Lemur zaprasza
#ifndef _LINUX_TTY_LDISC_H #define _LINUX_TTY_LDISC_H /* * Definitions for the tty line discipline */ #include #include struct tty_ldisc { int magic; int num; int flags; int (*open)(struct tty_struct *); void (*close)(struct tty_struct *); void (*flush_buffer)(struct tty_struct *tty); /* oproznia bufor wejsciowy i przekazuje znaki do procesu, o ile ktos na nie bedzie czekal wpp. traci je bezpowrotnie*/ int (*chars_in_buffer)(struct tty_struct *tty); /* podaje liczbe znakow zgromadzonych w buforze */ int (*read)(struct tty_struct * tty, struct file * file, unsigned char * buf, unsigned int nr); int (*write)(struct tty_struct * tty, struct file * file, const unsigned char * buf, unsigned int nr); int (*ioctl)(struct tty_struct * tty, struct file * file, unsigned int cmd, unsigned long arg); void (*set_termios)(struct tty_struct *tty, struct termios * old); int (*select)(struct tty_struct * tty, struct inode * inode, struct file * file, int sel_type, struct select_table_struct *wait); /* wolana przez tty_select, gdy w odniesieni do derminala uzyjemy funkcji select(...) /* Powyzsze funkcje sa wolane "z gory" tzn przez procedury obslugi terminala , ktore z kolei sa wolane przez procesy. */ /* Natomiast 3 ponizsze funkcje sa wolane "z dolu" tzn. zwykle w wyniku przerwania zgloszonego przez urzadzenie jest wywolywana jedna z tych funkcji raczej nie bezposrednio a przez jedna z procedur xxx_bottom_half). */ void (*receive_buf)(struct tty_struct *, const unsigned char *cp, char *fp, int count); /* Ta funkcja ma odebrac znaki zgromadzone w buforze (flip w tty_struct) i obrobic je */ int (*receive_room)(struct tty_struct *); /* ta funkcja zwraca ile jescze moze przyjac znaczkow od sterownika "z dolu" (we wszystkich innych, zdefiniowanych w Linux'ie dyscyplinach nie robi ona dokladnie nic poza zwroceniem wartosci 65535). */ void (*write_wakeup)(struct tty_struct *); /* Dzieki tej funkcji jest mozliwe zastosowanie nastepujacego schematu: proces zleca wykonanie operacji pisania, wstawia sie na kolejke procesow spiacych i wykonuje schuedule(). Natomiast sterownik po zakonczeniu pisania zglasza przerwanie, ktorego procedura obslugi powoduje wywolanie wlasnie tej funkcji (byc moze przez "bottom_half") Nie zauwazylem aby ta funkcj byl implementowana w ktorejkolwiek z Linux'owych dyscyplin. */ }; #define TTY_LDISC_MAGIC 0x5403 #define LDISC_FLAG_DEFINED 0x00000001 #endif /* _LINUX_TTY_LDISC_H */ |