Ovladac blokoveho zarizeni FLOPPY

Stav ukolu: pracuje se

Hotova cast: Ovladac, ktery umi neco nacist, ulozit a reaguje na chyby a systemova volani (floppy.c)

Poznamka: Provedena dohoda s KERNEL a prijimani preruseni 06 a zaslani zpravy HARDWARE. To neni implementovane z hlediska predelavek a nemoznosti testovani. Ovladac posila preruseni a chyta bez ucasti KERNELu.

Podili se:

Jiri Kubica (vyhotovil fungujici ovladac)
Libor Cudek (Komunikace pres systemova volani)

Jak predat pozadavek tasku FLOPPY ?

Pomoci systemoveho volani SEND(FLOPPY, message *)

Struktura cele zpravy:

typedef struct {
  int m_source;                 /* kdo zasila zpravu */
  int m_type;                   /* jaky typ zpravy */
  union {
        mess_1 m_m1;
        mess_2 m_m2;
        mess_3 m_m3;
        mess_4 m_m4;
        mess_5 m_m5;
        mess_6 m_m6;
       mess_devio m_dio;
  } m_u;
} message;

Typy zprav:

#define DISK_READ   2
#define DISK_WRITE  3

Pouzijte prosim format zpravy mess_devio (viz PSEUDO/COMMON/type.c). Struktura zprávy mess_devio:

typedef struct {
 int device;              /* minor dev nr */ 
 int proc_nr;             /* process requesting I/O */ 
 unsigned int count;      /* # of bytes required */ 
 unsigned long position;  /* starting position */
                          /* (TTY uses this for flags if needed) */
 vir_bytes address;       /* data buffer address in (proc_nr) space */
                          /* (TTY uses it as ptr to info structure for ioctl */               
} mess_devio;
 Zpravy pro floppy task budou konzistentni se zpravami RAMDisku.

 Device   je minor cislo zarizeni tedy cislo drive (pouze floppy).
 proc_nr  pozice procesu, ktery operaci pozadoval v tab. procesu.
 count    pocet bloku jdoucich po sobe, se kterymi budete pracovat.
 position cislo pocatecniho bloku, se kterym budete pracovat.
 address  je adresa v ramci procesu proc_nr, odkud se maji data vzit,
          resp. kam se maji dat.(buffer)