1 /* $Id: message.h,v 1.1.4.1 2001/11/20 14:19:37 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