globals.h


/*************************************************************************
*                                                                        *
*   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



[INDICE CODICE]