1
0
Files
irix-657m-src/irix/kern/sys/queue.h
2022-09-29 17:59:04 +03:00

174 lines
5.8 KiB
C

/* Copyright (c) 1984 AT&T */
/* All Rights Reserved */
/* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T */
/* The copyright notice above does not evidence any */
/* actual or intended publication of such source code. */
/*#ident "@(#)kern-port:sys/queue.h 10.1"*/
#ident "$Revision: 3.4 $"
/* Express Queue Macros */
#define R_EXP ((RQUEUE *)R_ADDR)->express
#define C_EXP ((CQUEUE *)C_ADDR)->express
/* QUEUE POINTER MACROS */
/* all pointers */
#define R_ALL(Q) ((RQUEUE *)R_ADDR)->queue[Q].p_queues.all
#define C_ALL ((CQUEUE *)C_ADDR)->queue.p_queues.all
/* pointers as a sixteen bit quantity */
#define R_SLOAD(Q) ((RQUEUE *)R_ADDR)->queue[Q].p_queues.bit16.load
#define R_SULOAD(Q) ((RQUEUE *)R_ADDR)->queue[Q].p_queues.bit16.unload
#define C_SLOAD ((CQUEUE *)C_ADDR)->queue.p_queues.bit16.load
#define C_SULOAD ((CQUEUE *)C_ADDR)->queue.p_queues.bit16.unload
/* pointers as an eight bit quantity */
#define R_BLOAD(Q) ((RQUEUE *)R_ADDR)->queue[Q].p_queues.bit8.unload
#define R_BULOAD(Q) ((RQUEUE *)R_ADDR)->queue[Q].p_queues.bit8.unload
#define C_BLOAD ((CQUEUE *)C_ADDR)->queue.p_queues.bit8.load
#define C_BULOAD ((CQUEUE *)C_ADDR)->queue.p_queues.bit8.unload
/* job entry at load pointer for 16 bit ptrs */
#define Q_RSENTRY(Q) (RENTRY *)(R_SLOAD(Q)+(((RQUEUE *)R_ADDR)->queue[Q].entry))
/* job entry at load pointer for 8 bit ptrs */
#define Q_RBENTRY(Q) (RENTRY *)(R_BLOAD(Q)+(((RQUEUE *)R_ADDR)->queue[Q].entry))
/* job completion at unload pointer for 16 bit ptrs */
#define Q_CSENTRY (CENTRY *)(C_SULOAD+(((CQUEUE *)C_ADDR)->queue.entry))
/* job completion at unload pointer for 8 bit */
#define Q_CBENTRY (CENTRY *)(C_BULOAD+(((CQUEUE *)C_ADDR)->queue.entry))
struct com_entry{
union{
struct {
unsigned bytcnt:16; /* offset of last byte to transfer */
/* 0 transfers byte 0 */
#ifdef x86
/* this for the Intel side since bit fields are assigned */
/* opposite from WE32000 */
unsigned subdev:6; /* Subdevice being addressed. */
unsigned seqbit:1; /* flag for block available */
unsigned cmd_stat:1; /* flag for command/status opcode */
#else
# ifdef b16
/* this for the Intel side since bit fields are assigned */
/* opposite from WE32000 */
unsigned subdev:6; /* Subdevice being addressed. */
unsigned seqbit:1; /* flag for block available */
unsigned cmd_stat:1; /* flag for command/status opcode */
# else
/* this for the m32 side */
unsigned cmd_stat:1; /* flag for command/status opcode */
unsigned seqbit:1; /* flag for block available */
unsigned subdev:6; /* Subdevice being addressed. */
# endif
#endif
unsigned opcode:8; /* command or status opcode */
}bits;
struct {
unsigned short bytcnt;
char subdev;
char opcode;
}bytes;
}codes;
long addr; /* data or memory address of data */
};
typedef struct {
struct com_entry common;
CAPP appl; /* application defined area */
/* CAPP for CENTRY */
}CENTRY; /* CENTRY in completion queue */
typedef struct {
/* entry for express requests */
CENTRY express;
struct {
/* Three ways of accessing load and unload ptrs */
union {
/* All pointers at once */
long all;
/* 16 bit load ptr and 16 bit unload ptr */
struct {
short load;
short unload;
}bit16;
/* 8 bit load ptr and 8 bit unload ptr */
struct {
char pad1;
char load;
char pad2;
char unload;
}bit8;
}p_queues;
CENTRY entry[CQSIZE];
}queue; /* one for completion queue */
} CQUEUE;
typedef struct {
struct com_entry common;
RAPP appl; /* application defined area */
}RENTRY; /* RENTRY in request queue */
typedef struct {
/* entry for express requests */
RENTRY express;
struct {
/* Three ways of accessing load and unload ptrs */
union {
/* All pointers at once */
long all;
/* 16 bit load ptr and 16 bit unload ptr */
struct {
short load;
short unload;
}bit16;
/* 8 bit load ptr and 8 bit unload ptr */
struct {
char pad1;
char load;
char pad2;
char unload;
}bit8;
}p_queues;
RENTRY entry[RQSIZE];
}queue[NUM_QUEUES]; /* #defined for request queue */
} RQUEUE;
typedef struct { /* sysgen data block */
long request; /* address of request queue */
long complt; /* address of cmplt queue */
unsigned char req_size; /* no entries in req q */
unsigned char comp_size; /* no entries in cmplt q*/
unsigned char int_vect; /* base intrpt vector */
unsigned char no_rque; /* number of req queues */
}SG_DBLK;