Obsah / Ovladače / DMA / Struktury a makra ovladače řadiče DMA
Zdrojový kód: INCLUDE\DRIVERS\SYSTEM\DMA.INC
Struktury a makra ovladače řadiče DMA
|
Struktura DEVDMA je popisovač ovladače řadiče přímého přístupu k paměti DMA. Struktura je odvozena od všeobecného zařízení DEV.
DEVDMA_Channels je interní proměnná ovladače (nemělo by k ní být přistupováno přímo) obsahující počet DMA kanálů řadiče.
DEVDMA_Used je interní proměnná ovladače (nemělo by k ní být přistupováno přímo) s maskou použitých (vlastněných) kanálů. Je-li bit nastaven na hodnotu 1, je příslušný kanál používán (vlastněn). Při hodnotě 0 je kanál volný k dispozici.
DEVDMA_Running je interní proměnná ovladače (nemělo by k ní být přistupováno přímo) s maskou probíhajících přenosů. Je-li bit nastaven na hodnotu 1, probíhá na příslušném DMA kanále přenos dat. Při hodnotě 0 se žádná data nepřenáší.
DEVDMA_Info je funkce ke zjištění informací o DMA kanálu. Na vstupu funkce obsahuje registr EAX číslo kanálu DMA, pro který mají být informace zjištěny. Registr EBX obsahuje popisovač zařízení. Na výstupu z funkce je navrácen v registru ECX počet kanálů DMA a v registru EDX příznaky (nebo jejich kombinace) s těmito hodnotami: DMAINFO_VALID kanál je platný, DMAINFO_USED kanál je používán (vlastněn), DMAINFO_RUNNING na kanálu probíhá přenos dat, DMAINFO_8BIT kanál je 8-bitový (jinak 16-bitový), DMAINFO_BOUND blok dat nesmí překrýt hranici adres 64 KB (jinak 128 KB), DMAINFO_ALIGN adresa musí být zarovnána na slovo, DMAINFO_16M limitace na nižších 16 MB paměti. V případě neplatného čísla DMA kanálu navrátí funkce příznak CY a obsah registru EDX je nulový. Počet kanálů navrácený v registru ECX je i v případě chyby platný. Funkce vyžaduje uzamknutí pomocí rychlého zámku.
Funkce DEVDMA_Alloc slouží k alokaci (přivlastnění) DMA kanálu. Na vstupu funkce obsahuje registr EAX číslo kanálu DMA, který má být alokován. Registr EBX obsahuje popisovač zařízení. V případě chyby (kanál je již alokován nebo zadáno neplatné číslo kanálu) navrátí funkce příznak chyby CY. Funkce vyžaduje uzamknutí pomocí rychlého zámku.
Funkce DEVDMA_Free slouží k dealokaci (uvolnění) DMA kanálu. Na vstupu funkce obsahuje registr EAX číslo kanálu DMA, který má být uvolněn. Registr EBX obsahuje popisovač zařízení. V případě chyby (kanál není alokován nebo zadáno neplatné číslo kanálu nebo probíhá přenos dat) navrátí funkce příznak chyby CY. Není kontrolováno, zda kanál uvolňuje stejný vlastník, který si zažádal o jeho alokaci. Funkce vyžaduje uzamknutí pomocí rychlého zámku.
Funkce DEVDMA_Start odstartuje DMA přenos dat. Na vstupu funkce obsahuje registr EAX číslo kanálu DMA, na kterém má být přenos odstartován. Registr EBX obsahuje popisovač zařízení. V registru ECX je nastaven počet bajtů k přenosu, v registru EDX adresa paměti v systému (tedy ne fyzické paměti) a v registru ESI je příznak směru přenosu: DMADIR_READ čtení ze zařízení, DMADIR_WRITE zápis na zařízení a DMADIR_VERIFY je verifikace dat ze zařízení. Současná verze ovladače má následující omezení: blok dat nesmí překrýt hranici adres 64 KB, maximální velikost bloku 64 KB, minimální velikost bloku 2 B, velikost musí být zarovnaná na slovo, adresa musí být zarovnaná na slovo a lze používat pouze nižších 16 MB fyzické paměti (blok získaný pomocí funkce DMAMemAlloc). V případě neplatného zadání některého z argumentů navrátí funkce příznak chyby CY. Funkce vyžaduje uzamknutí pomocí rychlého zámku.
Funkce DEVDMA_Stop zastaví DMA přenos dat. Na vstupu funkce obsahuje registr EAX číslo kanálu DMA, jehož přenos dat má být zastaven. Registr EBX obsahuje popisovač zařízení. V případě chyby (zadáno neplatné číslo kanálu nebo přenos dat neprobíhá) navrátí funkce příznak chyby CY. Funkce vyžaduje uzamknutí pomocí rychlého zámku.
Funkce DEVDMA_Remain zjistí zbývající počet bajtů k přenosu. Na vstupu funkce obsahuje registr EAX číslo kanálu DMA, pro který má být počet bajtů zjištěn. Registr EBX obsahuje popisovač zařízení. Na výstupu funkce je v registru ECX navrácen zbývající počet bajtů k přenosu. V případě chyby (zadáno neplatné číslo kanálu nebo přenos dat neprobíhá) navrátí funkce příznak chyby CY. Funkce vyžaduje uzamknutí pomocí rychlého zámku.
Funkce DEVDMA_Check slouží ke zjištění, zda probíhá přenos dat na DMA kanálu, jehož číslo obsahuje na vstupu funkce registr EAX. Na výstupu funkce je navrácen příznak CY, pokud přenos dat neprobíhá nebo byl zadán neplatný DMA kanál. Funkce se používá jako rychlejší varianta k testu přenosu než DEVDMA_Remain. Funkce vyžaduje uzamknutí pomocí rychlého zámku.
|
Makro DEVICEDMA je inicializovaný popisovač ovladače řadiče přímého přístupu k paměti DMA. Makro má 7 parametrů:
%1 - index zařízení
%2 - příznaky
%3 - hlavní číslo verze ovladače
%4 - vedlejší číslo verze ovladače
%5 - číslo překladu ovladače
%6 - počet DMA kanálů
%7 - prefix jména ### :
###Info - zjištění informací o DMA kanálu
###Alloc - alokace DMA kanálu
###Free - uvolnění DMA kanálu
###Start - start DMA přenosu
###Stop - stop DMA přenosu
###Remain - zjištění zbylých dat k přenosu
###Check - zjištění, zda dosud probíhá přenos dat
Obsah / Ovladače / DMA / Struktury a makra ovladače řadiče DMA