| /* $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 |