1 /* $Id: message.h,v 1.1.10.1 2001/09/23 22:24:59 kai Exp $
2  *
3  * Copyright (C) 1996  SpellCaster Telecommunications Inc.
4  *
5  * structures, macros and defines useful for sending
6  * messages to the adapter
7  *
8  * This software may be used and distributed according to the terms
9  * of the GNU General Public License, incorporated herein by reference.
10  *
11  * For more information, please contact gpl-info@spellcast.com or write:
12  *
13  *     SpellCaster Telecommunications Inc.
14  *     5621 Finch Avenue East, Unit #3
15  *     Scarborough, Ontario  Canada
16  *     M1B 2T9
17  *     +1 (416) 297-8565
18  *     +1 (416) 297-6433 Facsimile
19  */
20 
21 /*
22  * Board message macros, defines and structures
23  */
24 
25 #ifndef MESSAGE_H
26 #define MESSAGE_H
27 
28 #define MAX_MESSAGES		32	/* Maximum messages that can be
29 					   queued */
30 #define MSG_DATA_LEN		48	/* Maximum size of message payload */
31 #define MSG_LEN			64	/* Size of a message */
32 #define CMPID			0	/* Loader message process ID */
33 #define CEPID			64	/* Firmware message process ID */
34 
35 /*
36  * Macro to determine if a message is a loader message
37  */
38 #define IS_CM_MESSAGE(mesg, tx, cx, dx)		\
39 		((mesg.type == cmRspType##tx)		\
40 		&&(mesg.class == cmRspClass##cx)	\
41 		&&(mesg.code == cmRsp##dx))
42 
43 /*
44  * Macro to determine if a message is a firmware message
45  */
46 #define IS_CE_MESSAGE(mesg, tx, cx, dx)		\
47 		((mesg.type == ceRspType##tx)		\
48 		&&(mesg.class == ceRspClass##cx)	\
49 		&&(mesg.code == ceRsp##tx##dx))
50 
51 /*
52  * Loader Request and Response Messages
53  */
54 
55 /* message types */
56 #define cmReqType1			1
57 #define cmReqType2			2
58 #define cmRspType0			0
59 #define cmRspType1			1
60 #define cmRspType2			2
61 #define cmRspType5			5
62 
63 /* message classes */
64 #define cmReqClass0			0
65 #define cmRspClass0			0
66 
67 /* message codes */
68 #define cmReqHWConfig		1			/* 1,0,1 */
69 #define cmReqMsgLpbk		2			/* 1,0,2 */
70 #define cmReqVersion		3			/* 1,0,3 */
71 #define cmReqLoadProc		1			/* 2,0,1 */
72 #define cmReqStartProc		2			/* 2,0,2 */
73 #define cmReqReadMem		6			/* 2,0,6 */
74 #define cmRspHWConfig		cmReqHWConfig
75 #define	cmRspMsgLpbk		cmReqMsgLpbk
76 #define cmRspVersion		cmReqVersion
77 #define cmRspLoadProc		cmReqLoadProc
78 #define cmRspStartProc		cmReqStartProc
79 #define	cmRspReadMem		cmReqReadMem
80 #define cmRspMiscEngineUp	1			/* 5,0,1 */
81 #define cmRspInvalid		0			/* 0,0,0 */
82 
83 
84 /*
85  * Firmware Request and Response Messages
86  */
87 
88 /* message types */
89 #define ceReqTypePhy		1
90 #define ceReqTypeLnk		2
91 #define ceReqTypeCall		3
92 #define ceReqTypeStat		1
93 #define ceRspTypeErr		0
94 #define	ceRspTypePhy		ceReqTypePhy
95 #define ceRspTypeLnk		ceReqTypeLnk
96 #define ceRspTypeCall		ceReqTypeCall
97 #define ceRspTypeStat		ceReqTypeStat
98 
99 /* message classes */
100 #define ceReqClass0		0
101 #define ceReqClass1		1
102 #define ceReqClass2		2
103 #define ceReqClass3		3
104 #define ceRspClass0		ceReqClass0
105 #define ceRspClass1		ceReqClass1
106 #define ceRspClass2		ceReqClass2
107 #define ceRspClass3		ceReqClass3
108 
109 /* message codes  (B) = BRI only, (P) = PRI only, (V) = POTS only */
110 #define ceReqPhyProcInfo	1			/* 1,0,1 */
111 #define ceReqPhyConnect		1			/* 1,1,1 */
112 #define ceReqPhyDisconnect	2			/* 1,1,2 */
113 #define ceReqPhySetParams	3			/* 1,1,3 (P) */
114 #define ceReqPhyGetParams	4			/* 1,1,4 (P) */
115 #define ceReqPhyStatus		1			/* 1,2,1 */
116 #define ceReqPhyAcfaStatus	2			/* 1,2,2 (P) */
117 #define ceReqPhyChCallState	3			/* 1,2,3 (P) */
118 #define ceReqPhyChServState	4			/* 1,2,4 (P) */
119 #define ceReqPhyRLoopBack	1			/* 1,3,1 */
120 #define ceRspPhyProcInfo	ceReqPhyProcInfo
121 #define	ceRspPhyConnect		ceReqPhyConnect
122 #define ceRspPhyDisconnect	ceReqPhyDisconnect
123 #define ceRspPhySetParams	ceReqPhySetParams
124 #define ceRspPhyGetParams	ceReqPhyGetParams
125 #define ceRspPhyStatus		ceReqPhyStatus
126 #define ceRspPhyAcfaStatus	ceReqPhyAcfaStatus
127 #define ceRspPhyChCallState	ceReqPhyChCallState
128 #define ceRspPhyChServState	ceReqPhyChServState
129 #define ceRspPhyRLoopBack	ceReqphyRLoopBack
130 #define ceReqLnkSetParam	1			/* 2,0,1 */
131 #define ceReqLnkGetParam	2			/* 2,0,2 */
132 #define ceReqLnkGetStats	3			/* 2,0,3 */
133 #define ceReqLnkWrite		1			/* 2,1,1 */
134 #define ceReqLnkRead		2			/* 2,1,2 */
135 #define ceReqLnkFlush		3			/* 2,1,3 */
136 #define ceReqLnkWrBufTrc	4			/* 2,1,4 */
137 #define ceReqLnkRdBufTrc	5			/* 2,1,5 */
138 #define ceRspLnkSetParam	ceReqLnkSetParam
139 #define ceRspLnkGetParam	ceReqLnkGetParam
140 #define ceRspLnkGetStats	ceReqLnkGetStats
141 #define ceRspLnkWrite		ceReqLnkWrite
142 #define ceRspLnkRead		ceReqLnkRead
143 #define ceRspLnkFlush		ceReqLnkFlush
144 #define ceRspLnkWrBufTrc	ceReqLnkWrBufTrc
145 #define ceRspLnkRdBufTrc	ceReqLnkRdBufTrc
146 #define ceReqCallSetSwitchType	1			/* 3,0,1 */
147 #define ceReqCallGetSwitchType	2			/* 3,0,2 */
148 #define ceReqCallSetFrameFormat	3			/* 3,0,3 */
149 #define ceReqCallGetFrameFormat	4			/* 3,0,4 */
150 #define ceReqCallSetCallType	5			/* 3,0,5 */
151 #define ceReqCallGetCallType	6			/* 3,0,6 */
152 #define ceReqCallSetSPID	7			/* 3,0,7 (!P) */
153 #define ceReqCallGetSPID	8			/* 3,0,8 (!P) */
154 #define ceReqCallSetMyNumber	9			/* 3,0,9 (!P) */
155 #define ceReqCallGetMyNumber	10			/* 3,0,10 (!P) */
156 #define	ceRspCallSetSwitchType	ceReqCallSetSwitchType
157 #define ceRspCallGetSwitchType	ceReqCallSetSwitchType
158 #define ceRspCallSetFrameFormat	ceReqCallSetFrameFormat
159 #define ceRspCallGetFrameFormat	ceReqCallGetFrameFormat
160 #define ceRspCallSetCallType	ceReqCallSetCallType
161 #define ceRspCallGetCallType	ceReqCallGetCallType
162 #define ceRspCallSetSPID	ceReqCallSetSPID
163 #define ceRspCallGetSPID	ceReqCallGetSPID
164 #define ceRspCallSetMyNumber	ceReqCallSetMyNumber
165 #define ceRspCallGetMyNumber	ceReqCallGetMyNumber
166 #define ceRspStatAcfaStatus	2
167 #define ceRspStat
168 #define ceRspErrError		0			/* 0,0,0 */
169 
170 /*
171  * Call Types
172  */
173 #define CALLTYPE_64K		0
174 #define CALLTYPE_56K		1
175 #define CALLTYPE_SPEECH		2
176 #define CALLTYPE_31KHZ		3
177 
178 /*
179  * Link Level data contains a pointer to and the length of
180  * a buffer in shared RAM. Used by LnkRead and LnkWrite message
181  * types. Part of RspMsgStruct and ReqMsgStruct.
182  */
183 typedef struct {
184 	unsigned long buff_offset;
185 	unsigned short msg_len;
186 } LLData;
187 
188 
189 /*
190  * Message payload template for an HWConfig message
191  */
192 typedef struct {
193 	char st_u_sense;
194 	char powr_sense;
195 	char sply_sense;
196 	unsigned char asic_id;
197 	long ram_size;
198 	char serial_no[13];
199 	char part_no[13];
200 	char rev_no[2];
201 } HWConfig_pl;
202 
203 /*
204  * A Message
205  */
206 struct message {
207 	unsigned char sequence_no;
208 	unsigned char process_id;
209 	unsigned char time_stamp;
210 	unsigned char cmd_sequence_no;	/* Rsp messages only */
211 	unsigned char reserved1[3];
212 	unsigned char msg_byte_cnt;
213 	unsigned char type;
214 	unsigned char class;
215 	unsigned char code;
216 	unsigned char phy_link_no;
217 	unsigned char rsp_status;	/* Rsp messages only */
218 	unsigned char reseved2[3];
219 	union {
220 		unsigned char byte_array[MSG_DATA_LEN];
221 		LLData response;
222 		HWConfig_pl HWCresponse;
223 	} msg_data;
224 };
225 
226 typedef struct message ReqMessage;	/* Request message */
227 typedef struct message RspMessage;	/* Response message */
228 
229 /*
230  * The first 5010 bytes of shared memory contain the message queues,
231  * indexes and other data. This structure is its template
232  */
233 typedef struct {
234 	volatile ReqMessage req_queue[MAX_MESSAGES];
235 	volatile RspMessage rsp_queue[MAX_MESSAGES];
236 	volatile unsigned char req_head;
237 	volatile unsigned char req_tail;
238 	volatile unsigned char rsp_head;
239 	volatile unsigned char rsp_tail;
240 	volatile unsigned long signature;
241 	volatile unsigned long trace_enable;
242 	volatile unsigned char reserved[4];
243 } DualPortMemory;
244 
245 #endif
246