Annotation of kernel/bsd/netat/h/adsp_internal.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
                      3:  *
                      4:  * @APPLE_LICENSE_HEADER_START@
                      5:  * 
                      6:  * Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
                      7:  * Reserved.  This file contains Original Code and/or Modifications of
                      8:  * Original Code as defined in and that are subject to the Apple Public
                      9:  * Source License Version 1.1 (the "License").  You may not use this file
                     10:  * except in compliance with the License.  Please obtain a copy of the
                     11:  * License at http://www.apple.com/publicsource and read it before using
                     12:  * this file.
                     13:  * 
                     14:  * The Original Code and all software distributed under the License are
                     15:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
                     16:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
                     17:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
                     18:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
                     19:  * License for the specific language governing rights and limitations
                     20:  * under the License.
                     21:  * 
                     22:  * @APPLE_LICENSE_HEADER_END@
                     23:  */
                     24: 
                     25: #undef T_IDLE
                     26: 
                     27: /*
                     28: * Default Behavior for ADSP
                     29: */
                     30: #define        ocIntervalDefault       6
                     31: #define ocMaximumDefault       10
                     32: #define probeIntervalDefault   180
                     33: 
                     34: /*
                     35: * MACROS for comparing 32-bit sequence numbers
                     36: */
                     37: #define GT(x,y)  (((long)(x-y)) > (long) 0)
                     38: #define LT(x,y)  (((long)(x-y)) < (long) 0)
                     39: #define GTE(x,y) (((long)(x-y)) >= (long) 0)
                     40: #define LTE(x,y) (((long)(x-y)) <= (long) 0)
                     41: #define BETWEEN(x,y,z) (LTE(x,y) && LTE(y,z))
                     42: 
                     43: /*
                     44:  * Use the kernel tick counter for SysTicks.
                     45:  */
                     46: 
                     47: #define SysTicks()     lbolt
                     48: 
                     49: /*
                     50:  * Timer element used for handling timings
                     51:  */
                     52: typedef struct timerelem {
                     53:     struct timerelem *link;
                     54:     short timer;
                     55:     char type;
                     56:     unsigned onQ:1;            /* Bit-fields are faster than booleans */
                     57: } TimerElem;
                     58: 
                     59: typedef TimerElem *TimerElemPtr;
                     60: 
                     61: /*
                     62:  * For AppleTalk Phase 2 event queue
                     63:  */
                     64: typedef struct {
                     65:     Ptr        qLink;
                     66:     unsigned short qType;
                     67:     ProcPtr callAddr;
                     68: } LAPEventElem;
                     69: 
                     70: typedef LAPEventElem *LAPEventElemPtr;
                     71: 
                     72: /* 
                     73:  * The Event types we're passed when an AppleTalk transition occurs
                     74:  */
                     75: #define AOpenTransition                0
                     76: #define        ACloseTransition        2
                     77: #define ANetworkTransition     5
                     78: 
                     79: /*
                     80:  * The element we're passed when a NetworkTransaction event occurs
                     81:  */
                     82: typedef struct TNetworkTransition {
                     83:     Ptr        private;                /* pointer used internally by NetShare */
                     84:     ProcPtr netValidProc;      /* pointer to the network valid procedure */
                     85: } TNetworkTransition, *TPNetworkTransition;
                     86: 
                     87: typedef long (*NetworkTransitionProcPtr)();
                     88:                                /* (TPNetworkTransition nettrans, 
                     89:                                   unsigned long thenet); */
                     90: /*
                     91:  * This is the connection control block
                     92:  */
                     93: typedef struct ccb {
                     94:     /*---These fields may not change order or size-----------*/
                     95: 
                     96:     struct ccb *ccbLink;       /* link to next ccb */
                     97:     unsigned short state;      /* state of the connection end */
                     98:     unsigned char userFlags;   /* flags for unsolicited connection events */
                     99:     unsigned char localSocket; /* socket number of this connection end */
                    100:     AddrUnion remoteAddress;   /* internet address of remote end */
                    101:     unsigned short attnCode;   /* attention code received */
                    102:     unsigned short attnSize;   /* size of received attention data */
                    103:     unsigned char *attnPtr;    /* ptr to received attention data */
                    104:     unsigned short recvQPending; /* # bytes in receive queue %%% */
                    105:     /*------------------------------------------------------ */
                    106:        
                    107:     struct adspcmd *opb;       /* Outstanding open/close/remove/listens */
                    108:     struct adspcmd *spb;       /* Outstanding Sends */
                    109:     struct adspcmd *sapb;      /* Outstanding Send Attentions */
                    110:     struct adspcmd *frpb;      /* Outstanding Forward Resets */
                    111:     struct adspcmd *rpb;       /* Outstanding Read Requests */
                    112:        
                    113:     struct ccb *otccbLink;     /* link to next ccb */
                    114:     int pid;           /* Process ID for CCB owner */
                    115: 
                    116:     unsigned short remCID;     /* Remote Connection ID */
                    117:     unsigned short locCID;     /* Local Connection ID */
                    118:     int sendSeq;               /* Seq number of next char to send to remote */
                    119:     int firstRtmtSeq;          /* oldest seq # in local send queue */
                    120:     int sendWdwSeq;            /* Seq # of last char remote has bfr for */
                    121:     int recvSeq;               /* Seq of # of next char expected from rmte */
                    122:     int recvWdw;               /* # of bytes local end has buffer space for */
                    123:     int attnSendSeq;           /* Seq # of next attn pkt to send to remote */
                    124:     int attnRecvSeq;           /* Seq # of next packet local end expects */
                    125:     int maxSendSeq;            /* Highest seq # we ever sent on connection */
                    126: 
                    127:     /* These must be in the first 255 bytes of the CCB */
                    128:     TimerElem ProbeTimer;      /* Timer element for probes (and open) */
                    129:     TimerElem FlushTimer;      /* Timer element for flushing data */
                    130:     TimerElem RetryTimer;      /* Timer element for retransmissions */
                    131:     TimerElem AttnTimer;       /* Timer element for attention packets */
                    132:     TimerElem ResetTimer;      /* Timer element for forward resets */
                    133:        
                    134:     short openInterval;                /* Interval between open connection packets */
                    135:     short probeInterval;       /* Interval between probes */
                    136:     short sendInterval;                /* Interval before automatic flush */
                    137:     short rtmtInterval;                /* Rexmit interval (dynamically determined) */
                    138: 
                    139:     short sendCtl;             /* Send control message bits */
                    140:     short sendBlocking;                /* Flush unsent data if > than sendBlocking */
                    141:     short openRetrys;          /* # of retrys for Connect & Accept */
                    142:     short rbuflen;             /* Total size of receive buffer */
                    143:     short sbuflen;             /* Total size of receive buffer */
                    144:     char pad;
                    145:     char lockFlag;
                    146:     char badSeqMax;            /* retransmit advice send threshold */
                    147:     char badSeqCnt;            /* # of of out-of-order packets received */
                    148:     char useCheckSum;          /* true to use DDP checksums */
                    149:     char openState;            /* Used for opening a connection (see below) */
                    150: 
                    151:     gbuf_t *rbuf_mb;           /* message block for the recv buffer */
                    152:     gbuf_t *crbuf_mb;
                    153:     gbuf_t *sbuf_mb;           /* message block for the send buffer */
                    154:     gbuf_t *csbuf_mb;
                    155:     gbuf_t *attn_mb;           /* message block for the attention buffer */
                    156:     gbuf_t *deferred_mb;               /* message block deferred for later processing */
                    157:        
                    158:     char ioDone;       /* flag for when the adsp header is busy */
                    159:     char probeCntr;            /* # of probes we can miss (counts down) */
                    160:     char pktSendMax;           /* Max # of packets to send without an ack */
                    161:     char pktSendCnt;           /* # of packets sent so far */
                    162:        
                    163:     int sendStamp;             /* Time of last ackRequest */
                    164:     int timerSeq;              /* Seq # of char corresponding to above time stamp */
                    165:     short roundTrip;   /* Average Round-Trip time (in 6ths of a second) */
                    166:     short deviation;   /* deviation from roundTrip time */
                    167:     
                    168:     unsigned sData:1;          /* There's data in the send queue */
                    169:     unsigned waitingAck:1;     /* We're waiting for an ack packet */
                    170:     unsigned rData:1;          /* There's data in the receive queue */
                    171:     unsigned resentData:1;     /* True when we resend data due to timeout */
                    172:     unsigned sendDataAck:1;    /* True if he requested an ack */
                    173:     unsigned sendAttnAck:1;    /* Must send attn acknowlege */
                    174:     unsigned sendAttnData:1;   /* Must send attn data */
                    175:     unsigned callSend:1;       /* Must call CheckSend() */
                    176:     unsigned rbufFull:1;       /* We've closed our receive window. */
                    177:     unsigned noXmitFlow:1;     /* True stops incrementing # of xmit 
                    178:                                 * packets to send in a row after receiving 
                    179:                                 * an ack packet. */
                    180:     unsigned secureCCB:1;      /* True if this is a secure connection */
                    181:     unsigned removing:1;       /* There is a dspRemove pending */
                    182:     unsigned writeFlush:1;     /* Flush send queue even if # bytes to 
                    183:                                 * send is less than send blocking. */
                    184:     unsigned delay:1;          /* do not complete commands until user
                    185:                                 * */
                    186:     ADSP_FRAME f;              /* Used to send every packet */
                    187:     ADSP_OPEN_DATA of;         /* Holds the data for the open exchange */
                    188:     gref_t *gref;                      /* The queue associated with the CCB */
                    189:     gbuf_t *sp_mp;
                    190:     atlock_t lock;
                    191:     atlock_t lockClose;
                    192:     atlock_t lockRemove;
                    193: } CCB, *CCBPtr;
                    194: 
                    195: 
                    196: /*
                    197:  * Change order and die !!! --- See the receive open packet code
                    198:  */
                    199: #define O_STATE_NOTHING                0       /* Not opening */
                    200: #define O_STATE_LISTEN                 1       /* Listening for open request */
                    201: #define O_STATE_OPENWAIT       2       /* Sent Req, waiting for Ack to open 
                    202:                                         * request */
                    203: #define O_STATE_ESTABLISHED    3       /* Got Req, send Req+Ack,waiting Ack */
                    204: #define O_STATE_OPEN           4       /* Connection is open */
                    205: 
                    206: /*
                    207: * These bits are used in the sendCtl field to indicate what needs to be sent
                    208: */
                    209: #define B_CTL_PROBE            0x0001
                    210: #define B_CTL_OREQ             0x0002
                    211: #define B_CTL_OACK             0x0004
                    212: #define B_CTL_OREQACK          0x0008
                    213: #define B_CTL_ODENY            0x0010
                    214: #define B_CTL_CLOSE            0x0020
                    215: #define B_CTL_FRESET           0x0040
                    216: #define B_CTL_FRESETACK                0x0080
                    217: #define        B_CTL_RETRANSMIT        0x0100
                    218: 
                    219: 
                    220: #define kProbeTimerType offsetof(CCB, ProbeTimer)
                    221: #define kFlushTimerType offsetof(CCB, FlushTimer)
                    222: #define kRetryTimerType offsetof(CCB, RetryTimer)
                    223: #define kAttnTimerType offsetof(CCB, AttnTimer)
                    224: #define kResetTimerType offsetof(CCB, ResetTimer)
                    225: 
                    226: /*
                    227:  * Used to manage the send receive queue
                    228:  */
                    229: typedef struct {
                    230:     short len;                 /* # of bytes in this fragment */
                    231:     char flags;                        /* See #define's below */
                    232:     char data[1];
                    233: } HDR, *HDRPtr;
                    234: 
                    235: #define        HDR_LEN 3               /* Yes, I know it really is 4 bytes long... */
                    236: 
                    237: #define F_GAP          0x03
                    238: #define F_EOM          0x04
                    239: #define F_WRAP         0x08
                    240: #define F_VALID                0x10
                    241: #define F_ENCRYPTED    0x20    /* %%% Needed ??? */
                    242: #define F_LAST         0x40    /* This is last block in buffer */
                    243: 
                    244: 
                    245: /* %%% Are these two used anymore? */
                    246: #define sbufPtr(y) (&sp->sbuf[((y) < sp->sbuflen) ? (y) : ((y) - sp->sbuflen)])
                    247: #define rbufPtr(y) (&sp->rbuf[((y) < sp->rbuflen) ? (y) : ((y) - sp->rbuflen)])
                    248: 
                    249: /* End Internal.h */

unix.superglobalmegacorp.com

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