[ LUGOS ] Teles 16.3c PnP ISDN
Metod Kozelj
metod.kozelj na rzs-hm.si
Čet Nov 4 07:49:37 CET 1999
Howdy!
On Wed, 3 Nov 1999, Bostjan Mercun wrote:
> Kaj pa ce das kernelu ob bootu nastavitve za mrezno kartico? Mislim, da kernel za PCI
> kartice pregleda vse adrese in jim dodeli irq-je in tako naprej, ampak lahko mu pa dolocis
> kaj naj pregleda in kaksen irq naj kartici da itd.. V /etc/lilo.conf dodaj tisti "append
> ether ...". Mislim, da dela tudi za PCI kartice. V najslabsem primeru lahko verjetno tudi
> prevedes podporo za mrezno kartico kot modul in mu sam poves cifre..
Ne, ne ... en kratek tecaj strojnistva (malo daljsi tekst):
PCI vodilo ima 4 interrupt linije, navadno oznacene z A, B, C in D.
Nekatere kartice imajo kaksnega skakaca (po domace: jumper), s katerim
nastavis, katero linijo naj uporabi (obicajno lahko izbiras med A in B).
Linije gredo fizicno od enega PCI slota do drugega in so torej elektricno
deljene. Uporabljena pa je finta: linije so verizene, tako da pride
(fizicna) linija A s slota 0 na (fizicno) linijo B na slotu 1 (ostale pa
podobno). Nekatere starejse plate te finte niso uporabile, zato je prav
prisel tisti skakac na kartici. Elektricno so interrupti 'level
sensitive', tako da tudi delitev fizicne interrupt linije ni problem.
Ko se masina zbudi, BIOS naredi mapiranje med PCI interrupt linijami (A,
B, C in D) in procesorjevimi interrupti (0-15 oz. 0-127). Kako to naredi,
je mala magija vsakega proizvajalca BIOSa (v sodelovanju s proizvajalcem
osnovne plosce). Te nastavitve potem linux kernel *podeduje*, oziroma jih
prebere iz PCI config registrov (verzija ipd. se izpise precej na zacetku
bootanja kernela).
Zgoraj zapisano seveda velja le za eksterne PCI naprave (kartice), za na
plosco integrirane naprave pa ne, ker lahko proizvajalec cipovja po volji
doda je kaksno 'PCI interrupt linijo' in jo potem ustrezno zmapira.
Iz zgoraj zapisanega sledi, da se slej ko prej lahko zgodi deljenje
interruptov ce je v masini vec kot 4 PCI naprave. Primer so razne
multi-port ethernet kartice, ki delujejo kot locene naprave, vendar pa si
potem porti med sabo delijo interrupte. Ali pa kaksne twin SCSI kartice,
ki se obnasajo kot dva locena SCSI kontrolerja. Seveda ni nujno, da si
take naprave delijo interrupt med seboj, lahko si ga delijo s kaksno
drugo.
Mimogrede, delitev interrupta je strojno podprto ze na vodilu EISA, kjer
so lahko interrupti level-sensitive ali pa edge-sensitive (za backward
kompatibilnost z ISA vodilom).
Delitev prekinitev sama po sebi ni nic napacnega, tezava se pojavi sele
pri driverjih. Nekateri so pisani tako, da delitve interrupta ne
podpirajo. Cetudi driverji delitev interruptov podpirajo, pride do
(nezanemarljivega) overheada, ko se ugotavlja, kateri driver mora
interrupt sploh servisirati.
K sreci se vecina PC BIOS proizvajalcev trudi, da bi bili interrupti cim
manj deljeni. Obstajajo tudi primeri zanikrnih BIOSov.
Primer iz sveta Alph: enkrat sem poizkusal na eno SX164 alfo instalirati
Digital Unix. Ta rabi ti. SRM konzolo (primerljivo z BIOSom). Masina je
imela dve mrezni in eno SCSI kartico. Vse je teklo lepo, dokler ni prislo
do instocasne uporabe mreze in diska. Potem je hitrost prenosa preko mreze
padla z kaksnih 90MBps na kaksna 2MBps. Ko smo na masino dali Linux (SRM
konzolo pa je funkcionalno zamenjal MILO - funkcionalnost je rahlo podobna
LILOtu), je stvar zacela funkcionirati normalno. Ocitno je SRM konzola
dodelila vsem PCI interrupt linijam isto CPU interrupt linijo.
Peace!
Mkx
---- perl -e 'print $i=pack(c5,(41*2),sqrt(7056),(unpack(c,H)-2),oct(115),10);'
Dodatne informacije o seznamu Starilist