Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6
[linux-2.6] / drivers / isdn / sc / message.h
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