1 /*	$NetBSD: i4b_capi_msgs.h,v 1.1 2003/09/25 15:34:38 pooka Exp $	*/
2 
3 /*
4  * Copyright (c) 2001-2003 Cubical Solutions Ltd. All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25  * SUCH DAMAGE.
26  *
27  * capi/capi_msgs.h	The CAPI i4b message and handler declarations.
28  *
29  * $FreeBSD: src/sys/i4b/capi/capi_msgs.h,v 1.1 2001/05/25 08:39:31 hm Exp $
30  */
31 
32 #ifndef _I4B_CAPI_MSGS_H_
33 #define _I4B_CAPI_MSGS_H_
34 
35 /* CAPI commands */
36 
37 #define CAPI_ALERT                   0x01
38 #define CAPI_CONNECT                 0x02
39 #define CAPI_CONNECT_ACTIVE          0x03
40 #define CAPI_CONNECT_B3              0x82
41 #define CAPI_CONNECT_B3_ACTIVE       0x83
42 #define CAPI_CONNECT_B3_T90_ACTIVE   0x88
43 #define CAPI_DATA_B3                 0x86
44 #define CAPI_DISCONNECT_B3           0x84
45 #define CAPI_DISCONNECT              0x04
46 #define CAPI_FACILITY                0x80
47 #define CAPI_INFO                    0x08
48 #define CAPI_LISTEN                  0x05
49 #define CAPI_MANUFACTURER            0xff
50 #define CAPI_RESET_B3                0x87
51 #define CAPI_SELECT_B_PROTOCOL       0x41
52 
53 /* CAPI subcommands */
54 
55 #define CAPI_REQ                     0x80
56 #define CAPI_CONF                    0x81
57 #define CAPI_IND                     0x82
58 #define CAPI_RESP                    0x83
59 
60 /* CAPI combined commands */
61 
62 #define CAPICMD(cmd,subcmd)          (((subcmd)<<8)|(cmd))
63 
64 #define CAPI_DISCONNECT_REQ          CAPICMD(CAPI_DISCONNECT,CAPI_REQ)
65 #define CAPI_DISCONNECT_CONF         CAPICMD(CAPI_DISCONNECT,CAPI_CONF)
66 #define CAPI_DISCONNECT_IND          CAPICMD(CAPI_DISCONNECT,CAPI_IND)
67 #define CAPI_DISCONNECT_RESP         CAPICMD(CAPI_DISCONNECT,CAPI_RESP)
68 
69 #define CAPI_ALERT_REQ               CAPICMD(CAPI_ALERT,CAPI_REQ)
70 #define CAPI_ALERT_CONF              CAPICMD(CAPI_ALERT,CAPI_CONF)
71 
72 #define CAPI_CONNECT_REQ             CAPICMD(CAPI_CONNECT,CAPI_REQ)
73 #define CAPI_CONNECT_CONF            CAPICMD(CAPI_CONNECT,CAPI_CONF)
74 #define CAPI_CONNECT_IND             CAPICMD(CAPI_CONNECT,CAPI_IND)
75 #define CAPI_CONNECT_RESP            CAPICMD(CAPI_CONNECT,CAPI_RESP)
76 
77 #define CAPI_CONNECT_ACTIVE_REQ      CAPICMD(CAPI_CONNECT_ACTIVE,CAPI_REQ)
78 #define CAPI_CONNECT_ACTIVE_CONF     CAPICMD(CAPI_CONNECT_ACTIVE,CAPI_CONF)
79 #define CAPI_CONNECT_ACTIVE_IND      CAPICMD(CAPI_CONNECT_ACTIVE,CAPI_IND)
80 #define CAPI_CONNECT_ACTIVE_RESP     CAPICMD(CAPI_CONNECT_ACTIVE,CAPI_RESP)
81 
82 #define CAPI_SELECT_B_PROTOCOL_REQ   CAPICMD(CAPI_SELECT_B_PROTOCOL,CAPI_REQ)
83 #define CAPI_SELECT_B_PROTOCOL_CONF  CAPICMD(CAPI_SELECT_B_PROTOCOL,CAPI_CONF)
84 
85 #define CAPI_CONNECT_B3_REQ          CAPICMD(CAPI_CONNECT_B3,CAPI_REQ)
86 #define CAPI_CONNECT_B3_CONF         CAPICMD(CAPI_CONNECT_B3,CAPI_CONF)
87 #define CAPI_CONNECT_B3_IND          CAPICMD(CAPI_CONNECT_B3,CAPI_IND)
88 #define CAPI_CONNECT_B3_RESP         CAPICMD(CAPI_CONNECT_B3,CAPI_RESP)
89 
90 #define CAPI_CONNECT_B3_ACTIVE_REQ   CAPICMD(CAPI_CONNECT_B3_ACTIVE,CAPI_REQ)
91 #define CAPI_CONNECT_B3_ACTIVE_CONF  CAPICMD(CAPI_CONNECT_B3_ACTIVE,CAPI_CONF)
92 #define CAPI_CONNECT_B3_ACTIVE_IND   CAPICMD(CAPI_CONNECT_B3_ACTIVE,CAPI_IND)
93 #define CAPI_CONNECT_B3_ACTIVE_RESP  CAPICMD(CAPI_CONNECT_B3_ACTIVE,CAPI_RESP)
94 
95 #define CAPI_CONNECT_B3_T90_ACTIVE_IND CAPICMD(CAPI_CONNECT_B3_T90_ACTIVE,CAPI_IND)
96 #define CAPI_CONNECT_B3_T90_ACTIVE_RESP CAPICMD(CAPI_CONNECT_B3_T90_ACTIVE,CAPI_RESP)
97 
98 #define CAPI_DATA_B3_REQ             CAPICMD(CAPI_DATA_B3,CAPI_REQ)
99 #define CAPI_DATA_B3_CONF            CAPICMD(CAPI_DATA_B3,CAPI_CONF)
100 #define CAPI_DATA_B3_IND             CAPICMD(CAPI_DATA_B3,CAPI_IND)
101 #define CAPI_DATA_B3_RESP            CAPICMD(CAPI_DATA_B3,CAPI_RESP)
102 
103 #define CAPI_DISCONNECT_B3_REQ       CAPICMD(CAPI_DISCONNECT_B3,CAPI_REQ)
104 #define CAPI_DISCONNECT_B3_CONF      CAPICMD(CAPI_DISCONNECT_B3,CAPI_CONF)
105 #define CAPI_DISCONNECT_B3_IND       CAPICMD(CAPI_DISCONNECT_B3,CAPI_IND)
106 #define CAPI_DISCONNECT_B3_RESP      CAPICMD(CAPI_DISCONNECT_B3,CAPI_RESP)
107 
108 #define CAPI_RESET_B3_REQ            CAPICMD(CAPI_RESET_B3,CAPI_REQ)
109 #define CAPI_RESET_B3_CONF           CAPICMD(CAPI_RESET_B3,CAPI_CONF)
110 #define CAPI_RESET_B3_IND            CAPICMD(CAPI_RESET_B3,CAPI_IND)
111 #define CAPI_RESET_B3_RESP           CAPICMD(CAPI_RESET_B3,CAPI_RESP)
112 
113 #define CAPI_LISTEN_REQ              CAPICMD(CAPI_LISTEN,CAPI_REQ)
114 #define CAPI_LISTEN_CONF             CAPICMD(CAPI_LISTEN,CAPI_CONF)
115 
116 #define CAPI_MANUFACTURER_REQ        CAPICMD(CAPI_MANUFACTURER,CAPI_REQ)
117 #define CAPI_MANUFACTURER_CONF       CAPICMD(CAPI_MANUFACTURER,CAPI_CONF)
118 #define CAPI_MANUFACTURER_IND        CAPICMD(CAPI_MANUFACTURER,CAPI_IND)
119 #define CAPI_MANUFACTURER_RESP       CAPICMD(CAPI_MANUFACTURER,CAPI_RESP)
120 
121 #define CAPI_FACILITY_REQ            CAPICMD(CAPI_FACILITY,CAPI_REQ)
122 #define CAPI_FACILITY_CONF           CAPICMD(CAPI_FACILITY,CAPI_CONF)
123 #define CAPI_FACILITY_IND            CAPICMD(CAPI_FACILITY,CAPI_IND)
124 #define CAPI_FACILITY_RESP           CAPICMD(CAPI_FACILITY,CAPI_RESP)
125 
126 #define CAPI_INFO_REQ                CAPICMD(CAPI_INFO,CAPI_REQ)
127 #define CAPI_INFO_CONF               CAPICMD(CAPI_INFO,CAPI_CONF)
128 #define CAPI_INFO_IND                CAPICMD(CAPI_INFO,CAPI_IND)
129 #define CAPI_INFO_RESP               CAPICMD(CAPI_INFO,CAPI_RESP)
130 
131 /* CAPI message access helpers */
132 
133 /*
134  * CAPI message header:
135  * word   Length
136  * word   ApplId
137  * byte   Command
138  * byte   Subcommand
139  * word   MsgId
140  *
141  * Note that in the following, Controller/PLCI/NCCI is coded as follows:
142  * bits 0..6 = controller, bit 7 = ext/int, bits 8..15 = PLCI, and
143  * bits 16..31 = NCCI value.
144  *
145  * ALERT_REQ, 01 80:
146  * dword  PLCI
147  * struct Additional Info
148  *
149  * ALERT_CONF, 01 81:
150  * dword  PLCI
151  * word   Info (0 = OK, other = cause)
152  *
153  * CONNECT_REQ, 02 80:
154  * dword  controller
155  * word   CIP
156  * struct Called party number
157  * struct Calling party number
158  * struct Called party subaddress
159  * struct Calling party subaddress
160  * struct Bearer Capability
161  * struct Low Layer Compatibility
162  * struct High Layer Compatibility
163  * struct Additional Info
164  *
165  * CONNECT_CONF, 02 81:
166  * dword  PLCI
167  * word   Info (0 = OK, other = cause)
168  *
169  * CONNECT_IND, 02 82:
170  * dword  PLCI
171  * word   CIP
172  * struct Called party number
173  * struct Calling party number
174  * struct Called party subaddress
175  * struct Calling party subaddress
176  * struct Bearer Capability
177  * struct Low Layer Compatibility
178  * struct High Layer Compatibility
179  * struct Additional Info
180  * struct Second Calling party number
181  *
182  * CONNECT_RESP, 02 83:
183  * dword  PLCI
184  * word   Reject (0 = accept, 1 = ignore, 2 = reject/normal clearing)
185  * struct B protocol
186  * struct Connected number
187  * struct Connected subaddress
188  * struct Low Layer Compatibility
189  * struct Additional Info
190  *
191  * CONNECT_ACTIVE_IND, 03 82:
192  * dword  PLCI
193  * struct Connected number
194  * struct Connected subaddress
195  * struct Low Layer Compatibility
196  *
197  * CONNECT_ACTIVE_RESP, 03 83:
198  * dword  PLCI
199  *
200  * CONNECT_B3_REQ, 82 80:
201  * dword  PLCI
202  * struct NCPI
203  *
204  * CONNECT_B3_CONF, 82 81:
205  * dword  NCCI
206  * word   Info (0 = connected, other = cause)
207  *
208  * CONNECT_B3_IND, 82 82:
209  * dword  NCCI
210  * struct NCPI
211  *
212  * CONNECT_B3_RESP, 82 83:
213  * dword  NCCI
214  * word   Reject (0 = accept, 2 = reject/normal clearing)
215  * struct NCPI
216  *
217  * CONNECT_B3_ACTIVE_IND, 83 82:
218  * dword  NCCI
219  * struct NCPI
220  *
221  * CONNECT_B3_ACTIVE_RESP, 83  83:
222  * dword  NCCI
223  *
224  * DATA_B3_REQ, 86 80:
225  * dword  NCCI
226  * dword  Data pointer
227  * word   Data length
228  * word   Data handle (packet id)
229  * word   Flags (02 = more)
230  *
231  * DATA_B3_CONF, 86 81:
232  * dword  NCCI
233  * word   Data handle (packet id)
234  * word   Info (0 = OK, other = cause)
235  *
236  * DATA_B3_IND, 86 82:
237  * dword  NCCI
238  * dword  Data pointer
239  * word   Data length
240  * word   Data handle (packet id)
241  * word   Flags (02 = more)
242  *
243  * DATA_B3_RESP, 86 83:
244  * dword  NCCI
245  * word   Data handle (packet id)
246  *
247  * DISCONNECT_B3_REQ, 84 80:
248  * dword  NCCI
249  * struct NCPI
250  *
251  * DISCONNECT_B3_CONF, 84 81:
252  * dword  NCCI
253  * word   Info (0 = OK, other = cause)
254  *
255  * DISCONNECT_B3_IND, 84 82:
256  * dword  NCCI
257  * word   Reason
258  * struct NCPI
259  *
260  * DISCONNECT_B3_RESP, 84 83:
261  * dword  NCCI
262  *
263  * DISCONNECT_REQ, 04 80:
264  * dword  PLCI
265  * struct Additional Info
266  *
267  * DISCONNECT_CONF, 04 81:
268  * dword  PLCI
269  * word   Info (0 = OK, other = cause)
270  *
271  * DISCONNECT_IND, 04 82:
272  * dword  PLCI
273  * word   Reason
274  *
275  * DISCONNECT_RESP, 04 83:
276  * dword  PLCI
277  *
278  * LISTEN_REQ, 05 80:
279  * dword  Controller
280  * dword  Info mask (bits 0..9 used)
281  * dword  CIP Mask (bit 0 = any match)
282  * dword  CIP Mask 2 (bit 0 = any match)
283  * struct Calling party number
284  * struct Calling party subaddress
285  *
286  * LISTEN_CONF, 05 81:
287  * dword  Controller
288  * word   Info (0 = OK, other = cause)
289  *
290  * INFO_REQ, 08 80:
291  * dword  Controller/PLCI
292  * struct Called party number
293  * struct Additional Info
294  *
295  * INFO_CONF, 08 81:
296  * dword  Controller/PLCI
297  * word   Info (0 = OK, other = cause)
298  *
299  * INFO_IND, 08 82:
300  * dword  Controller/PLCI
301  * word   Info number
302  * struct Info element
303  *
304  * INFO_RESP, 08 83:
305  * dword  Controller/PLCI
306  */
307 
308 #define CAPIMSG_LEN(msg)             (msg[0]|(msg[1]<<8))
309 #define CAPIMSG_DATALEN(msg)         (msg[16]|(msg[17]<<8))
310 
capimsg_getu8(u_int8_t * msg,u_int8_t * val)311 static __inline u_int8_t* capimsg_getu8(u_int8_t *msg, u_int8_t *val)
312 {
313     *val = *msg;
314     return (msg + 1);
315 }
316 
capimsg_getu16(u_int8_t * msg,u_int16_t * val)317 static __inline u_int8_t* capimsg_getu16(u_int8_t *msg, u_int16_t *val)
318 {
319     *val = (msg[0]|(msg[1]<<8));
320     return (msg + 2);
321 }
322 
capimsg_getu32(u_int8_t * msg,u_int32_t * val)323 static __inline u_int8_t* capimsg_getu32(u_int8_t *msg, u_int32_t *val)
324 {
325     *val = (msg[0]|(msg[1]<<8)|(msg[2]<<16)|(msg[3]<<24));
326     return (msg + 4);
327 }
328 
capimsg_setu8(u_int8_t * msg,u_int8_t val)329 static __inline u_int8_t* capimsg_setu8(u_int8_t *msg, u_int8_t val)
330 {
331     msg[0] = val;
332     return (msg + 1);
333 }
334 
capimsg_setu16(u_int8_t * msg,u_int16_t val)335 static __inline u_int8_t* capimsg_setu16(u_int8_t *msg, u_int16_t val)
336 {
337     msg[0] = (val & 0xff);
338     msg[1] = (val >> 8) & 0xff;
339     return (msg + 2);
340 }
341 
capimsg_setu32(u_int8_t * msg,u_int32_t val)342 static __inline u_int8_t* capimsg_setu32(u_int8_t *msg, u_int32_t val)
343 {
344     msg[0] = (val & 0xff);
345     msg[1] = (val >> 8) & 0xff;
346     msg[2] = (val >> 16) & 0xff;
347     msg[3] = (val >> 24) & 0xff;
348     return (msg + 4);
349 }
350 
351 /*
352 //  CAPI message handlers called by higher layers
353 */
354 
355 extern void capi_listen_req(capi_softc_t *sc, u_int32_t CIP);
356 extern void capi_alert_req(capi_softc_t *sc, call_desc_t *cd);
357 extern void capi_connect_req(capi_softc_t *sc, call_desc_t *cd);
358 extern void capi_connect_b3_req(capi_softc_t *sc, call_desc_t *cd);
359 extern void capi_connect_resp(capi_softc_t *sc, call_desc_t *cd);
360 extern void capi_data_b3_req(capi_softc_t *sc, int chan, struct mbuf *m);
361 extern void capi_disconnect_req(capi_softc_t *sc, call_desc_t *cd);
362 
363 /*
364 //  CAPI message handlers called by the receive routine
365 */
366 
367 extern void capi_listen_conf(capi_softc_t *sc, struct mbuf *m);
368 extern void capi_info_ind(capi_softc_t *sc, struct mbuf *m);
369 extern void capi_alert_conf(capi_softc_t *sc, struct mbuf *m);
370 extern void capi_connect_conf(capi_softc_t *sc, struct mbuf *m);
371 extern void capi_connect_active_ind(capi_softc_t *sc, struct mbuf *m);
372 extern void capi_connect_b3_conf(capi_softc_t *sc, struct mbuf *m);
373 extern void capi_connect_b3_active_ind(capi_softc_t *sc, struct mbuf *m);
374 extern void capi_connect_ind(capi_softc_t *sc, struct mbuf *m);
375 extern void capi_connect_b3_ind(capi_softc_t *sc, struct mbuf *m);
376 extern void capi_data_b3_conf(capi_softc_t *sc, struct mbuf *m);
377 extern void capi_data_b3_ind(capi_softc_t *sc, struct mbuf *m);
378 extern void capi_disconnect_conf(capi_softc_t *sc, struct mbuf *m);
379 extern void capi_disconnect_b3_ind(capi_softc_t *sc, struct mbuf *m);
380 extern void capi_disconnect_ind(capi_softc_t *sc, struct mbuf *m);
381 
382 #endif /* _I4B_CAPI_MSGS_H_ */
383