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