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