Annotation of 43BSDTahoe/new/enet/net/enetdefs.h, revision 1.1

1.1     ! root        1: /*      enetdefs.h     Stanford        25 April 1983 */
        !             2: 
        !             3: /* Notes:
        !             4:  *     - check maxwaiting, etc.
        !             5:  *     - Xdrops in enState may be meaningless
        !             6:  */
        !             7: 
        !             8: /*
        !             9:  *  Ethernet definitions NOT needed for user processes
        !            10:  *
        !            11:  **********************************************************************
        !            12:  * HISTORY
        !            13:  * 7 October 1985      Jeff Mogul      Stanford
        !            14:  *     Removed ENMAXOPENS limitation; available minors are now
        !            15:  *     dynamically allocated to interfaces.
        !            16:  *     Certain arrays in the enState structure are now indirected
        !            17:  *     via pointers.
        !            18:  * 17 October 1984     Jeff Mogul      Stanford
        !            19:  *     Added RecvCount filed to enOpenDescriptor struct to store count
        !            20:  *     of packets received on this filter.
        !            21:  *     Also, made some changes to encourage use of "high-priority"
        !            22:  *     devices:
        !            23:  *     - changed ENHIPRIDEV from 12 to 0; allows anyone to use
        !            24:  *             high priority
        !            25:  *     - changed ENHIPRI from 128 to 2; no point in having more than
        !            26:  *             one priority below ENHIPRI, since all would be equivalent.
        !            27:  *
        !            28:  * 2 October 1984      Jeff Mogul      Stanford
        !            29:  *     Added field to enOpenDescriptor struct to store pre-computed
        !            30:  *     address of short word AFTER last valid word in the filter;
        !            31:  *     this saves a few instructions in some very busy code.
        !            32:  *
        !            33:  * 10 November 1983    Jeffrey Mogul   Stanford
        !            34:  *     Minor changes to support EIOCDEVP ioctl,
        !            35:  *     removed references to enUnit[]
        !            36:  *
        !            37:  * 25-Apr-83   Jeffrey Mogul   Stanford
        !            38:  *     Began conversion to 4.2BSD.  This involves removing all
        !            39:  *     references to the actual hardware.
        !            40:  *     Most previous history comments removed.
        !            41:  *     Split off from definitions of interest to users.
        !            42:  *
        !            43:  * 10-Aug-82  Mike Accetta (mja) at Carnegie-Mellon University
        !            44:  *     Added EIOCMBIS and EIOCMBIC definitions, and new ENHOLDSIG mode
        !            45:  *     bit and ENPRIVMODES defintions (V3.05e). [Last change before
        !            46:  *     4.2BSD conversion starts.]
        !            47:  *
        !            48:  * 22-Feb-80  Rick Rashid (rfr) at Carnegie-Mellon University
        !            49:  *     Rewritten for multiple simultaneous opens with filters (V1.05).
        !            50:  *
        !            51:  * 18-Jan-80  Mike Accetta (mja) at Carnegie-Mellon University
        !            52:  *      Created (V1.00).
        !            53:  *
        !            54:  **********************************************************************
        !            55:  */
        !            56: 
        !            57: /* tunable constants */
        !            58: #define        ENHIPRI         2               /* high priority priority */
        !            59:                        /*
        !            60:                         * setting ENHIPRI to 2 makes sense because all
        !            61:                         * priorities below ENHIPRI are equivalent; therefore,
        !            62:                         * we only need one of them.
        !            63:                         */
        !            64: #define        ENMAXPRI        255             /* maximum high priority priority */
        !            65: 
        !            66: #define        ENUNIT(dev)     (enUnitMap[minor(dev)]) /* macro */
        !            67:                                        /* to extract ethernet unit number */
        !            68:                                        /* from device number (used as the */
        !            69:                                        /* index into the enState[] table); */
        !            70: #define        ENINDEX(dev)    (minor(dev)) /* macro to extract logical */
        !            71:                                        /* device index from device number */
        !            72:                                        /* (used as the index into the */
        !            73:                                        /* AllDescriptors table for the */
        !            74:                                        /* unit) */
        !            75: 
        !            76: #define ENMAXWAITING   8               /* maximum number of packets */
        !            77:                                        /* which can be queued at one time */
        !            78:                                        /* for an open enet file (max 256) */
        !            79: #define ENDEFWAITING   2               /* default number of packets */
        !            80:                                        /* which can be queued at one */
        !            81:                                        /* time for an open enet file */
        !            82: #define ENPACKETS      50              /* number of preallocated packets */
        !            83:                                        /* available for receiving (these
        !            84:                                        /* should be allocated dynamically */
        !            85:                                        /* once the system makes */
        !            86:                                        /* this more feasible) */
        !            87: 
        !            88: #define ENMINSCAVENGE  4               /* minimum number of packets */
        !            89:                                        /* guaranteed to be freed by */
        !            90:                                        /* scavenging */
        !            91: 
        !            92: /*
        !            93:  * Privileged mode bits
        !            94:  */
        !            95: #define        ENKERNEL        (0x8000)        /* flag bit to indicate kernel mode */
        !            96:                                        /*  requests */
        !            97: 
        !            98: /*
        !            99:  *  The following definitions are meant to clean up
        !           100:  *  C language syntax a bit.
        !           101:  */
        !           102: 
        !           103: typedef        enum {false, true}      boolean;
        !           104: #define        TRUE    ((int)true)
        !           105: #define        FALSE   ((int)false)
        !           106: 
        !           107: #define endcase break;
        !           108: 
        !           109: /*
        !           110:  * General purpose structure to define circular queues.
        !           111:  *  Both the queue header and the queue elements have this
        !           112:  *  structure.
        !           113:  */
        !           114: 
        !           115: struct Queue
        !           116: {
        !           117:     struct Queue * F;
        !           118:     struct Queue * B;
        !           119: };
        !           120: 
        !           121: #ifdef notdef
        !           122: /* Temporary used by queue macros. */
        !           123: struct Queue * q_tmp;
        !           124: 
        !           125: #define enqueue(head,elt) \
        !           126: { (elt)->F = (head);(elt)->B = (head)->B;(head)->B = (elt);((elt)->B)->F = (elt); };
        !           127: 
        !           128: #define remqueue(head,elt) \
        !           129:     { ((elt)->B)->F = (elt)->F; ((elt)->F)->B = (elt)->B; };
        !           130: 
        !           131: #define dequeue(head)                    \
        !           132:     (((q_tmp = (head)->F) == (head)) ? NULL : \
        !           133:      (((q_tmp->B)->F = q_tmp->F),         \
        !           134:       ((q_tmp->F)->B = q_tmp->B),        \
        !           135:       (q_tmp)))
        !           136: 
        !           137: #define queueempty(head) \
        !           138:     ((head)->F == (head))
        !           139: 
        !           140: #define initqueue(head)  \
        !           141:     { (head)->F = (head); (head)->B = (head); };
        !           142: #endif notdef
        !           143: 
        !           144: /*
        !           145:  *  The ethernet packet structure.
        !           146:  *
        !           147:  */
        !           148: 
        !           149: struct enPacket
        !           150: {
        !           151:     struct Queue   enP_Link;           /* queue pointers */
        !           152:     u_short      *enP_Data;            /* pointer to start of packet */
        !           153:     short          enP_ByteCount;      /* # of bytes in Data */
        !           154:     u_short       enP_RefCount;        /* # of outstanding references to */
        !           155:                                        /* this packet */
        !           156:     struct mbuf          *enP_mbuf;            /* first mbuf of packet */
        !           157: };
        !           158: #define        enP_F   enP_Link.F
        !           159: #define        enP_B   enP_Link.B
        !           160: 
        !           161: /*
        !           162:  *  Ethernet queue header
        !           163:  */
        !           164: struct enQueue
        !           165: {
        !           166:     struct Queue enQ_Head;     /* queue header and trailer pointers */
        !           167:     short       enQ_NumQueued; /* number of elements in queue */
        !           168: };
        !           169: #define        enQ_F   enQ_Head.F
        !           170: #define        enQ_B   enQ_Head.B
        !           171: 
        !           172: /*
        !           173:  *  Wait queue header
        !           174:  */
        !           175: struct enWaitQueue
        !           176: {
        !           177:     struct enPacket *enWQ_Packets[ENMAXWAITING];/* pointers to queued packets */
        !           178:     char            enWQ_Head;         /* index into Packets (for dequeue) */
        !           179:     char            enWQ_Tail;         /* index into Packets (for enqueue) */
        !           180:     u_char          enWQ_NumQueued;    /* current queue size */
        !           181:     u_char          enWQ_MaxWaiting;   /* threshold for additions */
        !           182: };
        !           183: #define        enNextWaitQueueIndex(idx)                                       \
        !           184:        if (++(idx) >= ENMAXWAITING) (idx) = 0
        !           185: #define        enPrevWaitQueueIndex(idx)                                       \
        !           186:        if (--(idx) < 0) (idx) = (ENMAXWAITING-1)
        !           187: 
        !           188: /*
        !           189:  *  States of receive side of open enet file.
        !           190:  */
        !           191: enum enStates {ENRECVIDLE, ENRECVTIMING, ENRECVTIMEDOUT};
        !           192: 
        !           193: struct enOpenDescriptor
        !           194: {
        !           195:     struct Queue       enOD_Link;      /* Linked list of OpenDescriptors */
        !           196:     struct enWaitQueue enOD_Waiting;   /* fixed Queue of waiting packets */
        !           197:     struct proc       *enOD_SigProc;   /* Process to signal (user mode) */
        !           198:     short             enOD_SigPid;     /* Process ID of process to signal */
        !           199:     short             enOD_SigNumb;    /* Signal number for input packet */
        !           200:                                        /* notification  */
        !           201:     long               enOD_Timeout;   /* Length of time to wait for packet */
        !           202:     struct enfilter    enOD_OpenFilter;        /* Packet filter */
        !           203:     enum enStates      enOD_RecvState; /* see enStates enumeration (above) */
        !           204:     short             enOD_Flag;       /* option bits */
        !           205:     
        !           206:     /* following are for enetselect() */
        !           207:     short             enOD_SelColl;    /* true if selects collide */
        !           208:     struct proc       *enOD_SelProc;   /* process that last selected us */
        !           209:     
        !           210:     unsigned long      enOD_RecvCount; /* number of packets received */
        !           211: 
        !           212:     /* store precomputed address of end of filter */
        !           213:     unsigned short    *enOD_FiltEnd;   /* addr of short AFTER end of filt */
        !           214: };
        !           215: 
        !           216: /*
        !           217:  *  State descriptor for each enet device
        !           218:  */
        !           219: struct enState
        !           220: {
        !           221:     long       ens_Rcnt;               /* input packets queued since */
        !           222:                                        /* system startup */
        !           223:     long       ens_Xcnt;               /* output packets sent since */
        !           224:                                        /* system startup */
        !           225:     long       ens_Rdrops;             /* input packets dropped since */
        !           226:                                        /* system startup */
        !           227:     long       ens_Xdrops;             /* output packets dropped since */
        !           228:                                        /* system startup */
        !           229:     struct enQueue                     /* queue of active open */
        !           230:                ens_Desq;               /* file descriptors */
        !           231:     struct endevp      ens_DevParams;  /* device parameters, see enet.h */
        !           232: };
        !           233: #define        enRcnt          (enStatep->ens_Rcnt)
        !           234: #define        enXcnt          (enStatep->ens_Xcnt)
        !           235: #define        enRdrops        (enStatep->ens_Rdrops)
        !           236: #define        enXdrops        (enStatep->ens_Xdrops)
        !           237: #define        enDesq          (enStatep->ens_Desq)
        !           238: #define        enCurOpens      (enStatep->ens_Desq.enQ_NumQueued)
        !           239: #define        enDevParams     (enStatep->ens_DevParams)

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.