TUOX OPERATING
SYSTEM
FLOPPY DRIVER
Popis:
Floppy task je blokove zarizeni, ktere je schopne nacist
(zapsat) 1 blok z bufferu na disketu nebo zjistit
kapacitu (pocet bloku) mechaniky, nebo zjistit
pocet mechanik ktere je tento ovladac schopen ridit. V implementaci
se pocita i s praci vice po sobe jdoucich bloku az do velikosti DMA.
Po prichodu pozadavku na cteni(zapis) se zformuluje pozadavek na DMA
(prepocet cisla bloku na fyz. cislo sektoru
(cislo hlavy, sectoru a stopy), pricemz se budou cist dva sektory jdouci
po sobe = 1024 byte). Pocka se, dokud nebude radic pripraven. Po spusteni
pozadavku se inicializuje clock task,
ktery po vyprseni 3 sekundoveho timeoutu spusti funkci do_timeout(void),
ktera posle zpravu pro floppy task s argumentem timeout. Jestlize cteni
bylo rychlejsi, kernel prijme preruseni
od radice a posle zpravu a arg. DISKINT. Pote se vynuluje alarm u clock
tasku a zacne se zkoumat stav radice. Podle jeho stavu se pozna uspesnost.
Posle se zprava processu prislusnemu procesu o ukonceni IO.
Po prichodu pozadavku na IOCTL se z pole na strukturu FDD urci kapacita
prislusne mechaniky, nebo se z konstanty NR_DRIVES urci maximalni pocet
mechanik, ktere ovladac umi oslovovat.
Task floppy disk reaguje na
tyto zprávy (zprávy jsou typu mess_devio):
M_TYPE
|
DEVICE
|
PROC_NR
|
COUNT
|
POSITION
|
ADDRESS
|
DEV_READ
|
device
|
proc_nr
|
1
|
block_nr
|
buf_ptr
|
DEV_WRITE
|
device
|
proc_nr
|
1
|
block_nr
|
buf_ptr
|
DEV_IOCTL |
device
|
proc_nr
|
request |
nic
|
buf_ptr
|
Zpravy jsou konzistentni se zpravami na libovolny device.
Popis zpráv:
DEV_READ - čtení bloku
DEV_WRITE - zápis bloku
DEV_IOCTL - čtení stavu mechanik
Popis navratovych hodnot:
Jako odpověď je zasílána zpráva typu TASK_REPLY, která v REP_STATUS
vrací buď kladne cislo (OK, nebo pocet byte ) nebo zaporne cislo
(kod chyby).
Poznamky:
Odkazy: