/*************************************************************************
* *
* Header: globals.h *
* *
* realizzato dal Gruppo 17 di Lab2 Anno Accademico 1995/96 *
* *
* Lorenzo Claudio Valerio Riccardo Emiliano *
* Coronati Lanconelli Paolini Solmi Trentini *
* *
**************************************************************************/
#ifndef _GLOBS_H
#define _GLOBS_H
#include "types.h"
#include "thrqueue.h"
typedef struct {
state_t old;
state_t new;
} state_area;
typedef struct {
unsigned sts;
unsigned len;
} dev_t;
/* struttura delle richieste di servizio al SSI, qui vengono memorizzati
* anche gli eventuali risultati del servizio che possono essere la copia
* dei registri stato e len del dispositivo (WAITIO), oppure un intero
* oppure un long (GETCPUTIME) */
typedef union {
struct {
int service;
void ssip;
} s;
dev_t d;
thr_t *thr;
long l;
} ssimsg;
/* i seguenti tipi sono utilizzati per gestire le richieste di WAITIO.
* Quando SSI riceve una richiesta di WAITIO da un thread consulta una
* struttura chiamata ioreply_t, di cui ne viene mantenuta una per ogni
* dispositivo. In tale struttura vi e` un campo status (di tipo iorep_sts)
* che indica se e` gia` avvenuto l'interrupt associato al dispositivo;
* in questo caso il campo vale INTR (interrupt gia` avvenuto) e gli altri
* campi contengono la copia dei registri del dispositivo, altrimenti
* vengono memorizzati il thread richiedente e l'indirizzo in cui memoriz-
* zare la risposta; inoltre il campo status viene posto a WAIT.
*/
typedef enum {
NONE,
WAIT,
INTR
} iorep_sts;
typedef struct {
iorep_sts status;
union {
struct {
thr_t *sender;
ssimsg *msg;
} r;
dev_t d;
} u;
} ioreply_t;
#endif