Do tematu: Podsystem wejścia-wyjścia

Do tematu: Struktury danych

struct tty_flip_buffer

Jest to struktura służąca do przechowywania znaków drivera terminala, używana jest do przekazywania znaków z terminala do dyscypliny linii.

struct tq_struct tqueue kolejka "bottom half" funkcji, ktore mają być wykonane po wystąpieniu przerwania. Inicjalnie kolejka jest jednoelementowa, funkcja do wykonania to flush_to_ldisc()- opróżnienie bufora i przekazanie znaków dyscyplinie linii
unsigned char char_buf [2*FLIP_BUF_SIZE] bufor drivera terminala
char flag_buf [2*FLIP_BUF_SIZE] flagi, związane z każdym ze znaków znajdujących się w buforze char_buf

Znaczenie flag

char * char_buf_ptr bieżąca pozycja w tablicy char_buf
unsigned char flag_buf_ptr bieżąca pozycja w tablicy flag_buf
int count mówi, ile znaków jest akualnie przechowywnych w buforze char_buf
int buf_num mówi, z której połowy tablic char_buf i flag_buf korzystamy: 0 - z pierwszej, 1 - z drugiej.

Podział na dwie połowy jest potrzebny po to, by w trakcie opróżniania jednej (flush_to_ldisc) znaki nadchodzące do terminala były kierowane do drugiej połowy.

Znaczenie flag:

TTY_NORMAL znak ma być traktowany jak zwykły znak (zwykłe przetwarzanie)
TTY_BREAK Jeśli ze znakiem związana jest ta flaga, to znaczy, że jest to znak związany z przerwaniem. Do procesów związanych z terminalem ma zostać wysłany sygnał SIGINT. Wysłanie sygnału następuje, jeśli nie jest ustawiona flaga IGN_BRK.
TTY_FRAME Flagi te są obsługiwane tak samo przez dyscyplinę linii N_TTY. Flaga TTY_PARITY oznacza, że nastąpił błąd kontroli parzystości .
TTY_PARITY
TTY_OVERRUN Przepełnienie. Gdy przyjdzie znak, z którym związana jest ta flaga, to znak jest ignorowany, zwiększamy licznik num_overrun, jeśli poprzednie przepełnienie było dość dawno, to zerujemy ten licznik i ustawiamy czas overrun_time na jiffies (globalna zmienna licząca liczbe tyknięć zegara). Nie wiadomo, co się dzieje ze zignorowanym znakiem. Nie ma próby odczytania go ponownie.


Autorka: Anna Petryk