Tämän kysyttyä on ollut jonkin aikaa, mutta vihaan orpoja kysymyksiä :)
Yksinkertaistetaan ensin nykyaikainen x86 -alusta ja teeskennetään, että sillä on 32-bittinen osoitetila välillä 0x00000000 - 0xFFFFFFFF. Ohitamme kaikki erityiset / varatut alueet, TOLUD-aukot (alemman käyttökelpoisen DRAM-muistin yläreuna, Intel-kieliversio), jne. Kutsumme tätä järjestelmän muistikartaksi .
Toinen , PCI Express laajentaa PCI: tä. Ohjelmiston näkökulmasta ne ovat hyvin, hyvin samankaltaisia.
Siirry ensin sinun 3. - kokoonpanotilaan -. Konfigurointitilaan osoittavat osoitteet varataan järjestelmän muistikartasta . PCI-laitteessa oli 256 tavun kokoonpanotila - tämä laajennetaan 4 kt: iin PCI express -laitteelle. Tämä 4 kt: n tila vie muistin osoitteet järjestelmän muistikartalta, mutta todelliset arvot / bitit / sisältö toteutetaan yleensä oheislaitteen rekistereissä. Esimerkiksi kun luet toimittajan tunnusta tai laitetunnusta, kohdeoheislaite palauttaa tiedot, vaikka käytetty muistiosoite olisi järjestelmän muistikartalta.
Sanoit, että nämä on "varattu RAM-muistiin". "- ei ole totta, varsinaiset bitit / tilalliset elementit ovat oheislaitteessa. Ne on kuitenkin kartoitettu järjestelmän muistikarttaan. Seuraavaksi kysyit, oliko kyseessä yhteinen rekisteriryhmä kaikissa PCIe-laitteissa - kyllä ja ei. Tapa, jolla PCI-määritystila toimii, on kunkin osion lopussa osoitin, joka osoittaa, onko lukemassa enemmän "juttuja". Kaikkien PCIe-laitteiden on toteutettava vähimmäisvaatimus, jonka jälkeen kehittyneemmät laitteet voivat toteuttaa enemmän. Mitä hyötyä siitä on toiminnalliselle toiminnalle, niin se on pakollinen ja sitä käytetään paljon. :)
Kysymyksesi BAR-tiedostoista (perusosoiterekisterit) on hyvä tila segmentoitavaksi muistitilaan ja I / O-tilaan. Koska määritys on jonkin verran x86-keskinen, se sallii tyypin lisäksi BAR-koon määrittelyn. Tämä sallii laitteen pyytää säännöllistä muistikartoitettua BAR-muistia tai IO-tilan BAR-tilaa, joka syö osan x86-koneen 4K I / O-tilasta. Huomaat, että PowerPC-koneissa I / O-avaruuspalkit ovat arvottomia.
BAR on periaatteessa laitteen tapa kertoa isännälle kuinka paljon muistia se tarvitsee ja minkä tyyppinen (keskusteltu yllä). Jos pyydän sanoa 1 Mt muistikartoitettua tilaa, BIOS voi antaa minulle osoitteen 0x10000000 - 0x10100000. Tämä ei kuluta fyysistä RAM-muistia, vain osoitetilaa (näetkö miksi 32-bittisissä järjestelmissä on ongelmia laajennuskorttien kanssa, kuten huippuluokan GPU: t, joissa on Gt RAM-muistia?). Nyt PCI Express -laitteelle lähetetään muistin kirjoitus- / luettu sanoen 0x10000004, ja se voi olla tavua kattava rekisteri, joka yhdistää LEDeihin. Joten jos kirjoitan 0xFF fyysiseen muistiosoitteeseen 0x10000004, se sytyttää 8 LEDiä. Tämä on muistikartoitetun I / O : n perusedellytys.
I / O-tila käyttäytyy samalla tavalla, paitsi että se toimii erillisessä muistitilassa, x86-I / O-tila. Osoite 0x3F8 (COM1) on olemassa sekä I / O- että muistitilassa ja se on kaksi eri asiaa.
Viimeinen kysymyksesi, viestit , viittaavat uudentyyppiseen keskeytysmekanismiin, sanomalla keskeytyneisiin keskeytyksiin tai lyhyeksi MSI: hen. Vanhoissa PCI-laitteissa oli neljä keskeytysnastaa, INTA, INTB, INTC, INTD. Nämä sekoitettiin yleensä lähtöpaikkojen välillä siten, että INTA meni INTA: lle lähtöpaikassa 0, sitten INTB paikassa 1, sitten INTC korttipaikassa 2, INTD korttipaikassa 3 ja sitten takaisin INTA: ssa korttipaikassa 4. Syynä tähän on se, että suurin osa PCI: stä laitteet, jotka on toteutettu vain INTA: ssa ja pyörittämällä sitä, sanomalla kolme laitetta, kullakin päätyisi omaan keskeytyssignaaliinsa keskeytysohjaimeen. MSI on yksinkertaisesti tapa antaa keskeytyksiä PCI Express -protokollakerroksen avulla, ja PCIe-juurikompleksi (isäntä) huolehtii suorittimen keskeyttämisestä.
Tämä vastaus saattaa olla liian myöhäistä auttaakseen sinua, mutta ehkä se auttaa joitain tulevia Googlerin / Bingerin jäseniä.
Lopuksi suosittelen lukemaan tämän Intelin kirjan, jotta saat hyvän ja yksityiskohtaisen esittelyn PCIe: stä, ennen kuin jatkat eteenpäin. Toinen viite olisi Linux Device Drivers, LWN: n online-e-kirja.