Do you think /sys/netproto needs to use __P() prototypes?
[dragonfly.git] / sys / netproto / atm / uni / sscop_var.h
1 /*
2  *
3  * ===================================
4  * HARP  |  Host ATM Research Platform
5  * ===================================
6  *
7  *
8  * This Host ATM Research Platform ("HARP") file (the "Software") is
9  * made available by Network Computing Services, Inc. ("NetworkCS")
10  * "AS IS".  NetworkCS does not provide maintenance, improvements or
11  * support of any kind.
12  *
13  * NETWORKCS MAKES NO WARRANTIES OR REPRESENTATIONS, EXPRESS OR IMPLIED,
14  * INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
15  * AND FITNESS FOR A PARTICULAR PURPOSE, AS TO ANY ELEMENT OF THE
16  * SOFTWARE OR ANY SUPPORT PROVIDED IN CONNECTION WITH THIS SOFTWARE.
17  * In no event shall NetworkCS be responsible for any damages, including
18  * but not limited to consequential damages, arising from or relating to
19  * any use of the Software or related support.
20  *
21  * Copyright 1994-1998 Network Computing Services, Inc.
22  *
23  * Copies of this Software may be made, however, the above copyright
24  * notice must be reproduced on all copies.
25  *
26  *      @(#) $FreeBSD: src/sys/netatm/uni/sscop_var.h,v 1.2 1999/08/28 00:49:01 peter Exp $
27  *      @(#) $DragonFly: src/sys/netproto/atm/uni/sscop_var.h,v 1.3 2003/08/23 10:06:22 rob Exp $
28  *
29  */
30
31 /*
32  * ATM Forum UNI Support
33  * ---------------------
34  *
35  * SSCOP protocol control blocks
36  *
37  */
38
39 #ifndef _UNI_SSCOP_VAR_H
40 #define _UNI_SSCOP_VAR_H
41
42 /*
43  * Structure containing information for each SSCOP connection.
44  */
45 struct sscop {
46         struct sscop    *so_next;       /* Next connection in chain */
47         u_char          so_state;       /* Connection state (see below) */
48         u_short         so_flags;       /* Connection flags (see below) */
49         enum sscop_vers so_vers;        /* SSCOP version */
50
51         /* Transmitter variables */
52         sscop_seq       so_send;        /* VT(S) - next SD to send */
53         sscop_seq       so_sendmax;     /* VT(MS) - max SD to send + 1 */
54         sscop_seq       so_ack;         /* VT(A) - next expected ack */
55         sscop_seq       so_pollsend;    /* VT(PS) - last POLL sent */
56         sscop_seq       so_pollack;     /* VT(PA) - next expected STAT */
57         short           so_polldata;    /* VT(PD) - SD's sent between POLLs */
58         short           so_connctl;     /* VT(CC) - un-ack'd BGN,END,ER,RS */
59         u_char          so_sendconn;    /* VT(SQ) - last BGN,ER,RS sent */
60
61         /* Receiver variables */
62         sscop_seq       so_rcvnext;     /* VR(R) - next SD to receive */
63         sscop_seq       so_rcvhigh;     /* VR(H) - next highest SD to receive */
64         sscop_seq       so_rcvmax;      /* VR(MR) - max SD to receive + 1 */
65         u_char          so_rcvconn;     /* VR(SQ) - last BGN,ER,RS received */
66
67         /* PDU queues */
68         KBuffer         *so_xmit_hd;    /* SD transmission queue head */
69         KBuffer         *so_xmit_tl;    /* SD transmission queue tail */
70         struct pdu_hdr  *so_rexmit_hd;  /* SD retransmission queue head */
71         struct pdu_hdr  *so_rexmit_tl;  /* SD retransmission queue head */
72         struct pdu_hdr  *so_pack_hd;    /* SD pending ack queue head */
73         struct pdu_hdr  *so_pack_tl;    /* SD pending ack queue tail */
74         struct pdu_hdr  *so_recv_hd;    /* SD receive queue head */
75         struct pdu_hdr  *so_recv_tl;    /* SD receive queue tail */
76
77         /* Connection parameters */
78         struct sscop_parms so_parm;     /* Connection parameters */
79
80         /* Timers */
81         u_short         so_timer[SSCOP_T_NUM];  /* Connection timers */
82
83         /* Stack variables */
84         Atm_connvc      *so_connvc;     /* Connection vcc for this stack */
85         void            *so_toku;       /* Stack upper layer's token */
86         void            *so_tokl;       /* Stack lower layer's token */
87         void            (*so_upper)     /* Stack upper layer's interface */
88                                 (int, void *, int, int);
89         void            (*so_lower)     /* Stack lower layer's interface */
90                                 (int, void *, int, int);
91         u_short         so_headout;     /* Output buffer headroom */
92 };
93
94 /*
95  * Connection States
96  *
97  * Notes:
98  *      #  - state valid only for Q.SAAL1
99  *      ## - state valid only for Q.2110
100  */
101 #define SOS_INST        0               /* Instantiated, waiting for INIT */
102 #define SOS_IDLE        1               /* Idle connection */
103 #define SOS_OUTCONN     2               /* Outgoing connection pending */
104 #define SOS_INCONN      3               /* Incoming connection pending */
105 #define SOS_OUTDISC     4               /* Outgoing disconnection pending */
106 #define SOS_OUTRESYN    5               /* Outgoing resynchronization pending */
107 #define SOS_INRESYN     6               /* Incoming resynchronization pending */
108 #define SOS_CONRESYN    7               /* Concurrent resynch pending (#) */
109 #define SOS_OUTRECOV    7               /* Outgoing recovery pending (##) */
110 #define SOS_RECOVRSP    8               /* Recovery response pending (##) */
111 #define SOS_INRECOV     9               /* Incoming recovery pending (##) */
112 #define SOS_READY       10              /* Data transfer ready */
113 #define SOS_TERM        11              /* Waiting for TERM */
114
115 #define SOS_MAXSTATE    11              /* Maximum state value */
116 #define SOS_NUMSTATES   (SOS_MAXSTATE+1)/* Number of states */
117
118 /*
119  * Connection Flags
120  */
121 #define SOF_NOCLRBUF    0x0001          /* Clear buffers = no */
122 #define SOF_REESTAB     0x0002          /* SSCOP initiated reestablishment */
123 #define SOF_XMITSRVC    0x0004          /* Transmit queues need servicing */
124 #define SOF_KEEPALIVE   0x0008          /* Polling in transient phase */
125 #define SOF_ENDSSCOP    0x0010          /* Last END PDU, SOURCE=SSCOP */
126 #define SOF_NOCREDIT    0x0020          /* Transmit window closed */
127
128
129 /*
130  * SSCOP statistics
131  */
132 struct sscop_stat {
133         u_long          sos_connects;   /* Connection instances */
134         u_long          sos_aborts;     /* Connection aborts */
135         u_long          sos_maa_error[MAA_ERROR_COUNT]; /* Management errors */
136 };
137
138 #ifdef ATM_KERNEL
139 /*
140  * Global function declarations
141  */
142         /* sscop.c */
143 int             sscop_start (void);
144 int             sscop_stop (void);
145 void            sscop_maa_error (struct sscop *, int);
146 void            sscop_abort (struct sscop *, char *);
147
148         /* sscop_lower.c */
149 void            sscop_lower (int, void *, int, int);
150 void            sscop_aa_noop_0 (struct sscop *, int, int);
151 void            sscop_aa_noop_1 (struct sscop *, int, int);
152 void            sscop_init_inst (struct sscop *, int, int);
153 void            sscop_term_all (struct sscop *, int, int);
154
155         /* sscop_pdu.c */
156 int             sscop_send_bgn (struct sscop *, int);
157 int             sscop_send_bgak (struct sscop *);
158 int             sscop_send_bgrej (struct sscop *);
159 int             sscop_send_end (struct sscop *, int);
160 int             sscop_send_endak (struct sscop *);
161 int             sscop_send_rs (struct sscop *);
162 int             sscop_send_rsak (struct sscop *);
163 int             sscop_send_er (struct sscop *);
164 int             sscop_send_erak (struct sscop *);
165 int             sscop_send_poll (struct sscop *);
166 int             sscop_send_stat (struct sscop *, sscop_seq);
167 int             sscop_send_ustat (struct sscop *, sscop_seq);
168 int             sscop_send_ud (struct sscop *, KBuffer *);
169 void            sscop_pdu_print (struct sscop *, KBuffer *, char *);
170
171         /* sscop_sigaa.c */
172 void            sscop_estreq_idle (struct sscop *, int, int);
173 void            sscop_estrsp_inconn (struct sscop *, int, int);
174 void            sscop_relreq_outconn (struct sscop *, int, int);
175 void            sscop_relreq_inconn (struct sscop *, int, int);
176 void            sscop_relreq_ready (struct sscop *, int, int);
177 void            sscop_datreq_ready (struct sscop *, int, int);
178 void            sscop_udtreq_all (struct sscop *, int, int);
179
180         /* sscop_sigcpcs.c */
181 void            sscop_noop (struct sscop *, KBuffer *, caddr_t);
182 void            sscop_bgn_idle (struct sscop *, KBuffer *, caddr_t);
183 void            sscop_bgn_outdisc (struct sscop *, KBuffer *, caddr_t);
184 void            sscop_bgn_outresyn (struct sscop *, KBuffer *, caddr_t);
185 void            sscop_bgn_inresyn (struct sscop *, KBuffer *, caddr_t);
186 void            sscop_bgak_error (struct sscop *, KBuffer *, caddr_t);
187 void            sscop_bgak_idle (struct sscop *, KBuffer *, caddr_t);
188 void            sscop_bgak_outconn (struct sscop *, KBuffer *, caddr_t);
189 void            sscop_bgrej_error (struct sscop *, KBuffer *, caddr_t);
190 void            sscop_bgrej_outconn (struct sscop *, KBuffer *, caddr_t);
191 void            sscop_bgrej_inconn (struct sscop *, KBuffer *, caddr_t);
192 void            sscop_bgrej_outresyn (struct sscop *, KBuffer *, caddr_t);
193 void            sscop_bgrej_ready (struct sscop *, KBuffer *, caddr_t);
194 void            sscop_end_idle (struct sscop *, KBuffer *, caddr_t);
195 void            sscop_end_inconn (struct sscop *, KBuffer *, caddr_t);
196 void            sscop_end_outdisc (struct sscop *, KBuffer *, caddr_t);
197 void            sscop_endak_error (struct sscop *, KBuffer *, caddr_t);
198 void            sscop_endak_inconn (struct sscop *, KBuffer *, caddr_t);
199 void            sscop_endak_outdisc (struct sscop *, KBuffer *, caddr_t);
200 void            sscop_endak_ready (struct sscop *, KBuffer *, caddr_t);
201 void            sscop_rs_error (struct sscop *, KBuffer *, caddr_t);
202 void            sscop_rs_idle (struct sscop *, KBuffer *, caddr_t);
203 void            sscop_rsak_error (struct sscop *, KBuffer *, caddr_t);
204 void            sscop_rsak_idle (struct sscop *, KBuffer *, caddr_t);
205 void            sscop_rsak_outresyn (struct sscop *, KBuffer *, caddr_t);
206 void            sscop_sd_error (struct sscop *, KBuffer *, caddr_t);
207 void            sscop_sd_idle (struct sscop *, KBuffer *, caddr_t);
208 void            sscop_sd_inconn (struct sscop *, KBuffer *, caddr_t);
209 void            sscop_poll_error (struct sscop *, KBuffer *, caddr_t);
210 void            sscop_poll_idle (struct sscop *, KBuffer *, caddr_t);
211 void            sscop_poll_inconn (struct sscop *, KBuffer *, caddr_t);
212 void            sscop_stat_error (struct sscop *, KBuffer *, caddr_t);
213 void            sscop_stat_idle (struct sscop *, KBuffer *, caddr_t);
214 void            sscop_stat_inconn (struct sscop *, KBuffer *, caddr_t);
215 void            sscop_stat_ready (struct sscop *, KBuffer *, caddr_t);
216 void            sscop_ustat_error (struct sscop *, KBuffer *, caddr_t);
217 void            sscop_ustat_idle (struct sscop *, KBuffer *, caddr_t);
218 void            sscop_ustat_inconn (struct sscop *, KBuffer *, caddr_t);
219 void            sscop_ustat_ready (struct sscop *, KBuffer *, caddr_t);
220 void            sscop_ud_all (struct sscop *, KBuffer *, caddr_t);
221 void            sscop_md_all (struct sscop *, KBuffer *, caddr_t);
222
223         /* sscop_subr.c */
224 KBuffer *       sscop_stat_getelem (KBuffer *, sscop_seq *);
225 struct pdu_hdr *sscop_pack_locate (struct sscop *, sscop_seq);
226 void            sscop_pack_free (struct sscop *, sscop_seq);
227 void            sscop_rexmit_insert (struct sscop *, struct pdu_hdr *);
228 void            sscop_rexmit_unlink (struct sscop *, struct pdu_hdr *);
229 void            sscop_xmit_drain (struct sscop *);
230 int             sscop_recv_insert (struct sscop *, struct pdu_hdr *);
231 void            sscop_rcvr_drain (struct sscop *);
232 void            sscop_service_xmit (struct sscop *);
233 int             sscop_is_rexmit (struct sscop *, u_char);
234 void            sscop_set_poll (struct sscop *);
235
236         /* sscop_timer.c */
237 void            sscop_timeout (struct atm_time *);
238
239         /* sscop_upper.c */
240 void            sscop_upper (int, void *, int, int);
241
242         /* q2110_sigaa.c */
243
244         /* q2110_sigcpcs.c */
245
246         /* q2110_subr.c */
247 void            q2110_clear_xmit (struct sscop *);
248 void            q2110_init_state (struct sscop *);
249 void            q2110_prep_retrieve (struct sscop *);
250 void            q2110_prep_recovery (struct sscop *);
251 void            q2110_deliver_data (struct sscop *);
252 void            q2110_error_recovery (struct sscop *);
253
254         /* qsaal1_sigaa.c */
255
256         /* qsaal1_sigcpcs.c */
257
258         /* qsaal1_subr.c */
259 void            qsaal1_reestablish (struct sscop *);
260 void            qsaal1_reset_xmit (struct sscop *);
261 void            qsaal1_reset_rcvr (struct sscop *);
262 void            qsaal1_clear_connection (struct sscop *);
263
264
265 /*
266  * External variables
267  */
268 extern struct sp_info   sscop_pool;
269 extern int              sscop_vccnt;
270 extern struct sscop     *sscop_head;
271 extern struct sscop_stat        sscop_stat;
272 extern struct atm_time  sscop_timer;
273 extern void             (*(*sscop_qsaal_aatab[]))
274                                 (struct sscop *, int, int);
275 extern void             (*(*sscop_q2110_aatab[]))
276                                 (struct sscop *, int, int);
277 extern void             (*(*sscop_qsaal_pdutab[]))
278                                 (struct sscop *, KBuffer *, caddr_t);
279 extern void             (*(*sscop_q2110_pdutab[]))
280                                 (struct sscop *, KBuffer *, caddr_t);
281
282 #endif  /* ATM_KERNEL */
283
284 #endif  /* _UNI_SSCOP_VAR_H */