Obsah / Ovladače / DEVICE / Struktura všeobecného zařízení DEV
Zdrojový kód: INCLUDE\DRIVERS\DEVICE.INC
Struktura všeobecného zařízení DEV
Od struktury popisovače všeobecného zařízení DEV jsou odvozovány popisovače všech ostatních zařízení.
|
Na začátku struktury se nachází položka stromového seznamu zařízení RBNODE. Seznam je tříděn podle adresy zařízení v paměti a slouží k rychlému vyhledání zařízení podle adresy, která je přijata od uživatelského programu při přístupu k zařízení.
DEV_Hash je hashovaný seznam zařízení s klíčem odvozeným z třídy zařízení. Seznam slouží k rychlému vyhledání zařízení, je-li adresováno pomocí třídy a podtřídy. Konstanta DEVHASH_SIZE představuje počet položek klíče (=256) a DEVHASH_MASK je maska hodnoty klíče (=0FFh).
DEV_DevList je hierarchický seznam zařízení (typu stromový seznam). Zařízení jsou organizována podle vzájemné funkční závislosti.
DEV_Mutex je pomalý zámek k uzamykání zařízení na dlouhé operace (vyžadující čekání). Pokud se uzamyká i rychlý zámek, musí se rychlý zámek uzamknout až po pomalém zámku.
DEV_Lock je rychlý zámek k uzamykání zařízení při přístupu ke sdíleným prostředkům. Pokud se současně uzamyká i pomalý zámek, musí se rychlý zámek uzamknout až po pomalém zámku.
DEV_Resource je seznam systémových prostředků DEVRES používaných zažízením.
DEV_Ref je referenční čítač použití zařízení. Zařízení lze odstranit pouze v případě, že není používáno - tj. čítač je nastaven na nulu.
DEV_IntList je ukazatel na seznam podporovaných rozhraní (interface) zařízení. Seznam rozhraní je posloupnost čísel velikosti DWORD (4 bajty). Každé číslo představuje identifikátor rozhraní - číslo 4 bajty nebo text o délce 4 znaky. Seznam je ukončen číslem 0 (konstanta DEV_NUL_ID). Např. zařízení DMA podporuje rozhraní DEV1 a DMA1.
DEV_Flags jsou příznaky zařízení. Příznak DEV_STATIC označuje statický popisovač zařízení, který při rušení zařízení nesmí být zrušen (nebyl alokován jako paměťový blok). Příznak DEV_INIT indikuje, že zařízení bylo inicializováno (byla zavolána funkce DEV_Init). Příznak DEV_ROOT označuje kořenové zařízení, jehož rodičem je systém (není závislé na jiném zařízení).
DEV_Index je index zařízení jedné třídy a podtřídy (např. číslo pevného disku). DEV_SubClass je podtřída zařízení. DEV_Class je třída zařízení.
DEV_VerMaj, DEV_VerMin a DEV_Build je číslo verze, podverze a číslo překladu ovladače zařízení.
DEV_Name je ukazatel na systémové jméno zařízení (formát TEXT) - používá se k identifikaci zařízení v systému. DEV_Vendor je identifikační jméno poskytovatele (výrobce) zařízení. DEV_Short je krátké jméno zařízení - zobrazuje se v rychlých přehledech. DEV_Full je ukazatel na vícejazykové pole dlouhého jména zařízení - zobrazuje se uživateli.
DEV_Init je adresa funkce sloužící k inicializaci zařízení. Na vstupu obsahuje registr EBX ukazatel na popisovač zařízení DEV. Pokud nastala chyba inicializace zařízení, funkce navrátí příznak chyby CY. Namísto přímého volání funkce je doporučeno použít funkci DevInit, která zajistí provedení inicializace pouze v případě, že inicializace nebyla dosud provedena.
DEV_Deinit je adresa funkce sloužící k deinicializaci zařízení. Na vstupu obsahuje registr EBX ukazatel na popisovač zařízení DEV. Pokud nastala chyba deinicializace zařízení, funkce navrátí příznak chyby CY. Namísto přímého volání funkce je doporučeno použít funkci DevDeinit, která zajistí provedení deinicializace pouze v případě, že deinicializace nebyla dosud provedena.
|
Popisovač zařízení používá popisovač DEVRES k popisu jednoho systémového zdroje. Systémovým zdrojem může být: signál přerušení IRQ, signál přímého přístupu k paměti DMA, port nebo oblast paměti. Popisovače systémových zdrojů jsou připojeny k popisovači zařízení pomocí dvojitě spojeného seznamu LIST. Položka DEVRES_Start udává začátek systémového zdroje. Může jím být počáteční číslo signálu přerušení IRQ, počáteční číslo přímého přístupu k paměti DMA, počáteční adresa portu nebo počáteční adresa v paměti. Položka DEVRES_End označuje konec systémového zdroje. DEVRES_Type je typ zdroje (přerušení, DMA, port, paměť). DEVRES_Flags jsou příznaky - používá se pouze příznak DEVRES_STATIC udávající, že popisovač je statický a nesmí být při rušení dealokován, protože se nejedná o paměťový blok. DEVRES_Name je jméno zdroje - jedná se o textovou proměnnou typu TEXT.
Makro DEVRESOURCE je inicializovaný popisovač systémového zdroje. První a druhý parametr jsou ukazatele na následující a předešlý popisovač. Třetím parametrem je počátek systémového zdroje, čtvrtým konec zdroje, pátým typ zdroje, šestým příznaky a sedmým jméno (ukazatel na CTEXTDATA).
Obsah / Ovladače / DEVICE / Struktura všeobecného zařízení DEV