/*************************************************************************
* *
* Header: syscall.h *
* *
* realizzato dal Gruppo 17 di Lab2 Anno Accademico 1995/96 *
* *
* Lorenzo Claudio Valerio Riccardo Emiliano *
* Coronati Lanconelli Paolini Solmi Trentini *
* *
**************************************************************************/
#ifndef _SYSCT_H
#define _SYSCT_H
#include "../h/types.h"
#include "../h/supconst.h"
#if VBUFNO == 1
#define NEXTVMSG(tproc) ( tproc->T_vbuffers )
#else
#define NEXTVMSG(tproc) nextVmsg(tproc)
#endif
/* identificativi del vqueue_t */
#define VQ_SEND 1
#define VQ_RECV 2
#define VQ_REPLY 3
#define VQ_RR 4
typedef struct vqueue_t {
struct vqueue_t *vq_next;
int vq_type; /* utilizzato per gestire il caso particolare della Receive & Reply */
thr_t *vq_from;
thr_t *vq_to;
state_t *vq_state; /* utilizzato per memorizzare i risultati */
void *vq_address;
} vqueue_t;
/* identificativi del vmsg_t */
#define FREETAG 0
#define SENDTAG 1
#define REPLYTAG 2
typedef struct vmsg_t {
char vmsg_buffer[MAXMSGLEN]; /* e` importante che sia il primo campo */
int vmsg_type; /* FREETAG, SENDTAG o REPLYTAG */
thr_t *vmsg_from;
thr_t *vmsg_to;
state_t *vmsg_state; /* utilizzato per memorizzare il risultato */
} vmsg_t;
#ifdef THR_DENY
#define INTERNAL(t, x) ( (t)->T_mainthread == (x) || (t)->T_sysservt == (x) || \
(t)->T_memmant == (x) || (t)->T_progt == (x) )
#else
#define INTERNAL(t, x) ( (x)->t_process == (t)->T_process )
#endif
#endif