[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: ALSA e parport: problema di difficile soluzione



Mattia wrote:

Perchè 0x3c? Non dovrebbe essere:
pcitweak -r 00:0d:0 -b 0xa800
Perche' 0xa800 non e' l'offset di un registro dello spazio di configurazione di una scheda PCI (che va da 0x00 a 0x3f), ma l'indirizzo a cui inizia una delle 6 immagini I/O che la tua scheda sviluppa per comunicare con il resto del mondo.

In pratica, ogni scheda PCI genera da una a sei immagini (mappate con indirizzi a 16 o 32 bit a seconda che siano in memoria o in I/O), che, qualora vengono interpellate, causano la risposta della scheda alla chiamata del kernel. Queste immagini le vedi con lspci -v.

Ogni scheda PCI, pero' sviluppa anche una serie di registri accessibili dal kernel attraverso delle chiamate all'host del bus, che ne determinano il funzionamento, contenendo informazioni importanti per la gestione della comunicazione sul bus (quante immagini sviluppa la scheda, dove sono mappate, se sono di memoria o di I/O, ecc...) Tra queste, all'offset 0x3c trovi la linea di interrupt a cui la scheda, attraverso il piedino di interrupt (0x3d) comunica, appunto, gli interrupt. Alcune delle informazioni contenute nello spazio di configurazione della scheda sono read-only, perche' di solito si riferiscono a caratteristiche hardware del dispositivo, mentre altre sono modificabili, perche' agiscono solo su configurazioni software.

visto che da lspci ottengo:

Bus  0, device  13, function  0:
   Communication controller: PCI device 9710:9805 (NetMos Technology)
(rev 1).      IRQ 5.
     Master Capable.  Latency=32.
     I/O at 0xa800 [0xa807].
     I/O at 0xac00 [0xac07].
     I/O at 0xb000 [0xb007].
     I/O at 0xb400 [0xb407].
     I/O at 0xb800 [0xb807].
     I/O at 0xbc00 [0xbc0f].
Questo ti dice dove il BIOS e successivamente il kernel hanno mappato le sei immagini della tua scheda.

Scusami, ma non vorrei bruciarmi qualcosa...
Di certo no, l'unica cosa che puo' succedere e' che la scheda smetta di funzionare fino al ripristino del dato iniziale, o, nel caso peggiore, al riavvio della macchina :-)

Se faccio # pcitweak -r 00:0d:0 -b 0x3c

ottengo
0x0b
Questo e' un dato plausibile, e' il codice della linea di interrupt che sta usando la tua scheda adesso.

Mentre se do
# pcitweak -r 00:0d:0 -b 0xa800

ottengo
0x10
Questo non so cosa sia, l'offset che hai dato e' ben al di fuori dello spazio di configurazione della scheda. Potrebbe essere qualunque cosa

Perchè 0x0c? Cosa altro potrei mettere?
Mmmh, questo si perde nei tempi bui della tesi... se non ricordo male, i numeri validi sono da 0x00 a 0x0f. Tieni presente che questa cosa dice solo al driver che l'interrupt della scheda sara' comunicato su un'altra linea, a livello software, nulla piu'. Oltretutto te l'ho suggerito solo come test per capire se effettivamente il problema e' un sovraffollamento di interrupt, ma non e' un gran metodo per ovviare al problema...

Ciao.

--
Marco Buffa (FZS600'01)

Laboratorio di Spettroscopia Digitale
Dipartimento di Elettronica
Politecnico di Milano

tel. +39-02-2399-4004

marcobuffa@jabber.linux.it
http://marcobuffa.altervista.org

"Scorrelare vuol dire smarmellare."
(prof. Franco Zappa, Lezione di elettronica III)




Reply to: