📄 lcm_q921.h
字号:
#ifdef __cplusplusextern "C"{#endif #ifndef __INC_LCM_Q921_H__#define __INC_LCM_Q921_H__#undef LCM_DEBUG#define MDL_ERROR_REPORT #define SAPI_0 0 #define SAPI_63 63 #define BROADCAST_TEI 127#define N200 3#define T200_LEN 1000 #define T203_LEN 10000#define DEFAULT_CCITT_K 7#define MOD_NUM 128#define MOD_MASK (128-1)#define Q921_SID_UFRAME 0#define Q921_SID_SFRAME 1#define Q921_SID_IFRAME 2#define NET_CMD 1#define NET_ACK 0#define USER_CMD 0#define USER_ACK 1#define PEER_CMD NET_CMD#define OWN_CMD USER_CMD#define OWN_ACK USER_ACK#define ACK_PENDING 0x00#define LCM_EFFICIENT_TEST 0x10#define LCM_EFFICIENT_TEST_ACK 0x11#define TRANS_V5_MSG_TO_LE 0xA0#define TRANS_V5_MSG_TO_AN 0xA1#define Q921_ERR_A (1) #define Q921_ERR_B (1<<1) #define Q921_ERR_C (1<<2) #define Q921_ERR_D (1<<3) #define Q921_ERR_E (1<<4) #define Q921_ERR_F (1<<5) #define Q921_ERR_G (1<<6) #define Q921_ERR_H (1<<7) #define Q921_ERR_I (1<<8) #define Q921_ERR_J (1<<9) #define Q921_ERR_K (1<<10) #define Q921_ERR_L (1<<11) #define Q921_ERR_M (1<<12) #define Q921_ERR_N (1<<13) #define Q921_ERR_O (1<<14) #define Q921_ERR_P (1<<15) #define SET_L3_INITED(linkp) (linkp->own_l3_init = 1)#define CLEAR_L3_INITED(linkp) (linkp->own_l3_init = 0)#define SET_PEER_RCV_BUSY(linkp) ( linkp->peer_rcv_busy = 1 )#define CLEAR_PEER_RCV_BUSY(linkp) ( linkp->peer_rcv_busy = 0 )#define SET_ACK_PENDING(linkp) ( linkp->ack_pending = 1 )#define CLEAR_ACK_PENDING(linkp) ( linkp->ack_pending = 0 )#define SET_REJ_EXCEPTION(linkp) ( linkp->rej_exception = 1 )#define CLEAR_REJ_EXCEPTION(linkp) ( linkp->rej_exception = 0 )#define CLEAR_EXCEPTION_COND( linkp )\\do{\ linkp->peer_rcv_busy = 0;\ linkp->rej_exception = 0;\ linkp->own_rcv_busy = 0;\ linkp->ack_pending = 0;\}while(0)#define IS_NR_CORRECT(linkp, n_r ) \((linkp->v_a <= linkp->v_s)?\(linkp->v_a <= n_r && n_r <= linkp->v_s):\(linkp->v_a <= n_r) || (n_r <= linkp->v_s ) )#define SET_LINK_STATUS(linkp, s)\\do\{\ if(LCM_PRINT_L2_MSG(linkp))\ {\ aos_printf( MPE_LCM,"q921:link(phy=%s,portno=%d,dl=%s) status change from %s to %s",\ PHY_STRING(linkp->phy_type),\ linkp->phy_port_no,\ DL_STRING(linkp->link_type),\ STATUS_STRING(linkp->status),\ STATUS_STRING(s) );\ }\ linkp->status = s;\}while(0)#if( CONFIG_BOARD_GMPU == TRUE && AOS_INCLUDE_SERVICE_V5 == TRUE)#define LCM_TRACE_L3_MSG( pDlMsg, direction )\\do\{\ if( TRACE_V5_L3_EXIST() )\ {\ TRACE_V5L3_PARAMS_S trace_filter;\ U32 l3_addr;\ U8 phyC, v5no;\ if(v5_get_v5no_phyc_l3_by_msg(pDlMsg,&v5no,&phyC,&l3_addr) )\ {\ trace_filter.ulPhyCNo = phyC;\ trace_filter.ulProtocolType = pDlMsg->ucV5DLType;\ trace_filter.ulV5No = v5no;\ trace_filter.ulL3Addr = l3_addr;\ trace_v5_l3( &trace_filter, direction, pDlMsg->ucInfo, \ pDlMsg->usLength-ELEMENT_OFFSET(DL_MSG_S,ucInfo) );\ }\ }\}while(0)#define LCM_TRACE_L2_MSG( mb, commport, dircetion )\\do\{\ if( TRACE_V5_L2_EXIST() )\ {\ TRACE_V5L2_PARAMS_S trace_filter;\ Q921_FRAME_S *framep;\ if( dev_mpu_card_is_master() )\ {\ framep = (Q921_FRAME_S*)mb->data;\ trace_filter.ulCommPort = commport;\ trace_filter.ulDLType = get_link_type(framep->frm.u_frame.tei);\ trace_v5_l2_by_phyc_dltype( &trace_filter, dircetion, mb->data, mb->len );\ }\ }\}while(0)#else#define LCM_TRACE_L3_MSG( pDlMsg, direction )#define LCM_TRACE_L2_MSG( mb, commport, dircetion )#endif#define _I_COMMAND 0 #define _RR 0x01 #define _RNR 0x05 #define _REJ 0x09 #define _SABME 0x6f #define _DM 0x0f #define _UI 0x03 #define _DISC 0x43 #define _UA 0x63 #define _FRMR 0x87 #define _XID 0xaf #define _ERR_CMD 0x100#define _ERR_FRAME 0x101#define _ERR_EA0 0x102#define _ERR_EA1 0x103#define _ERR_EF_ZERO 0x104#define _ERR_FRAME_TOO_LONG 0x105#define _ERR_C_R 0x106#define _ERR_UNKNOWN_FRAME 0x107#define P_0 0#define P_1 1#define F_0 0#define F_1 1#define PSTN_EF_ADDR ((U16)8176)#define CTRL_EF_ADDR ((U16)8177)#define BCC_EF_ADDR ((U16)8178)#define PROT_EF_ADDR ((U16)8179)#define LCTRL_EF_ADDR ((U16)8180)#define DEV_EF_ADDR ((U16)8181)#define EFADDR_LO( word ) ( ( BYTE ) ( word & 0x007f ) )#define EFADDR_HI( word ) ( ( BYTE ) ( ( word & 0x1f80 ) >> 7 ) )#define PSTN_TEI 112#define CTRL_TEI 113#define BCC_TEI 114#define PROT_TEI 115#define LCTRL_TEI 116#define DEV_TEI 117#define PRI_TEI 0 #define IS_I_FRAME( framep ) (!framep->frm.i_frame.zero)#define IS_U_FRAME( framep ) (framep->frm.u_frame.bit11==3)#define IS_S_FRAME( framep ) (framep->frm.s_frame.bit01==1)#define I_FRAME_LEN 6 #define U_FRAME_LEN 5 #define S_FRAME_LEN 6 #define FILL_EF_ADDR( to, ef_addr )\\do\{ \ EF_ADDR_S temp;\ temp.s.ef_hi = EF_ADDR_HIGH( ef_addr );\ temp.s.zero = 0;\ temp.s.ea_0 = 0;\ temp.s.ef_lo = EF_ADDR_LOW( ef_addr );\ temp.s.ea_1 = 1;\ to = temp.ef;\}while(0)#define LINK_EF_ADDR(dl_type) \( V5DL_ID_PSTN==(dl_type)?PSTN_EF_ADDR:\ V5DL_ID_BCC==(dl_type)?BCC_EF_ADDR:\ V5DL_ID_CTRL==(dl_type)?CTRL_EF_ADDR:\ V5DL_ID_LINKC==(dl_type)?LCTRL_EF_ADDR:\ V5DL_ID_PROT1==(dl_type)?PROT_EF_ADDR:\ V5DL_ID_PROT2==(dl_type)?PROT_EF_ADDR:\ V5DL_ID_DEV_MNGT==(dl_type)?DEV_EF_ADDR:0 ) #define PHY_STRING(phy) ((phy)<LCM_DRV_BUTT?phy_string[phy]:"UnknownDrv")#define DL_STRING(l) ((l)< V5DL_ID_BUTT?dl_string[l]:"UnknownDL")#define PRIM_STRING(prim) ((prim)<LCM_PRIM_BUTT?prim_string[prim]:"UnknownPrim")#define STATUS_STRING(s) ((s)<LINK_STATUS_BUTT?status_string[s]:"UnknownStatus")#define LCM_MNGT_PRINT_FLAG 1#define LCM_L2_PRINT_FLAG 2#define LCM_L3_PRINT_FLAG 4#define LCM_ERROR_PRINT_FLAG 8#define LCM_PRINT_MNGT(linkp) ( LCM_MNGT_PRINT_FLAG & linkp->print_flag )#define LCM_PRINT_L2_MSG(linkp) ( LCM_L2_PRINT_FLAG & linkp->print_flag )#define LCM_PRINT_L3_MSG(linkp) ( LCM_L3_PRINT_FLAG & linkp->print_flag )#define LCM_PRINT_ERROR_IND(linkp) ( LCM_ERROR_PRINT_FLAG & linkp->print_flag )enum enLcmTimerName{ Q921_T200, Q921_T203, LCM_TIMER_BUTT};typedef enum link_status{ AWAITING_ESTABLISHMENT = 5, AWAITING_RELEASE, MULTIPLE_FRAME_ESTABLISHED, TIMER_RECOVERY, LINK_NOT_ESTABLISHED, LINK_STATUS_BUTT}LINK_STATUS;#define EF_ADDR_HIGH( addr ) ( (U8)( ( (addr) & 0x1f80 ) >> 7 ) )#define EF_ADDR_LOW( addr ) ( (U8)( (addr) & 0x7f ) )#if( CONFIG_OS_WINDOWS == TRUE )#pragma pack(push,1)#elif( CONFIG_OS_VXWORKS == TRUE )#pragma pack(1)#endif#if( CONDIF_BIG_ENDIAN == TRUE )typedef union ef_addr_s{ U16 ef; struct { U8 ef_hi:6; U8 zero:1; U8 ea_0:1; U8 ef_lo:7; U8 ea_1:1; }s;}EF_ADDR_S;typedef struct u_frame_s{ U8 sapi:6; U8 c_r:1; U8 ea_0:1; U8 tei:7; U8 ea_1:1; U8 mmm:3; U8 p_f:1; U8 mm:2; U8 bit11:2; U8 info[N201];}U_FRAME_S;typedef struct s_frame_s{ U8 sapi:6; U8 c_r:1; U8 ea_0:1; U8 tei:7; U8 ea_1:1; U8 xxxx:4; U8 ss:2; U8 bit01:2; U8 n_r:7; U8 p_f:1; U8 info[N201];}S_FRAME_S;typedef struct i_frame_s{ U8 sapi:6; U8 c_r:1; U8 ea_0:1; U8 tei:7; U8 ea_1:1; U8 n_s:7; U8 zero:1; U8 n_r:7; U8 p_f:1; U8 info[N201]; }I_FRAME_S;#elsetypedef union ef_addr_s{ U16 ef; struct { U8 ea_0:1; U8 zero:1; U8 ef_hi:6; U8 ea_1:1; U8 ef_lo:7; }s;}EF_ADDR_S;typedef struct u_frame_s{ U8 ea_0:1; U8 c_r:1; U8 sapi:6; U8 ea_1:1; U8 tei:7; U8 bit11:2; U8 mm:2; U8 p_f:1; U8 mmm:3; U8 info[N201];}U_FRAME_S;typedef struct s_frame_s{ U8 ea_0:1; U8 c_r:1; U8 sapi:6; U8 ea_1:1; U8 tei:7; U8 bit01:2; U8 ss:2; U8 xxxx:4; U8 p_f:1; U8 n_r:7; U8 info[N201];}S_FRAME_S;typedef struct i_frame_s{ U8 ea_0:1; U8 c_r:1; U8 sapi:6; U8 ea_1:1; U8 tei:7; U8 zero:1; U8 n_s:7; U8 p_f:1; U8 n_r:7; U8 info[N201]; }I_FRAME_S;#endiftypedef struct q921_frame_s{ U16 ef_addr; union { I_FRAME_S i_frame; S_FRAME_S s_frame; U_FRAME_S u_frame; U8 info[N201+4]; }frm;}Q921_FRAME_S;#if( CONFIG_OS_WINDOWS == TRUE )#pragma pack(pop)#elif( CONFIG_OS_VXWORKS == TRUE )#pragma pack(4)#endiftypedef struct l2_link_s{ U16 status; U8 link_type; U8 phy_type; U32 phy_port_no; U32 error_code; U8 k; U8 n200; U16 pad0; U32 n201; U32 t200_len; U32 t203_len; U8 sapi; U8 tei; U8 v_s; U8 v_a; U8 v_r; U8 rc; U8 peer_cmd; U8 own_cmd; U8 own_resp; U8 peer_rcv_busy:1; U8 own_rcv_busy:1; U8 ack_pending:1; U8 rej_exception:1; U8 own_l3_init:1; U8 is_for_dss1:1; U8 is_for_siptrunk:1; U8 pading2:1; U16 ef_addr; TMR t200; TMR t203; struct msg_blk_que i_frame_q; U32 discard_pkt; U32 print_flag;}L2_LINK_S;typedef struct lcm_ui_frame{ U32 srcProcessorId; U32 srcMpe; U32 dstProcessorId; U32 dstMpe; U32 ulSize; U16 type; U8 slot; U8 hdlc_no; U8 info[4];}LCM_UI_FRAME_S;typedef struct lcm_self_msg_s{ U16 prim; U16 phy_type; U32 phy_port_no; U32 link_type;}LCM_SELF_MSG_S;typedef struct lcm_efficient_msg_s{ U16 prim; U16 sub_prim; U32 s_time; U32 count; }LCM_EFFICIENT_MSG_S;typedef struct lcm_drv_s{ U32 is_use_mbuf; union { VOID_FUNC_PTR send; LCM_PHY_SND mb_send; LCM_MBUF_SND mbuf_send; }tx; U32 mtu; U32 n200; U32 t200_len; U32 t203_len;}LCM_DRV_S;typedef VOID (*Q921FSM)( L2_LINK_S *linkp, U32 code, struct msg_blk *mb );extern U32 processor_id_base;extern L2_LINK_S *m_links[];extern U32 phy_port_num[];extern U32 link_per_port[];extern S8 *phy_string[];extern S8 *dl_string[];extern S8 *prim_string[];extern S8 *status_string[];extern struct msg_blk_que lcm_phy_que;extern U32 lcm_rcv_task_id;extern LCM_DRV_S lcm_phy_drv[];extern U16 dev_dl_ef_addr;VOID lcm_debug_proc(DEBUG_MSG_S *pDebugMsg);VOID lcm_test_proc( LCM_EFFICIENT_MSG_S *selfp, U32 srcProcId );VOID q921_phy_data_ind( U32 phy_type, U32 port_no, struct msg_blk* mb );VOID q921_ui_frame_handle( L2_LINK_S *linkp, struct msg_blk *mb );VOID lme_msg_proc( L2_LINK_S*linkp, struct msg_blk*mb);VOID q921_i_frame_handle( L2_LINK_S *linkp, struct msg_blk *mb );VOID on_link_not_established( L2_LINK_S *linkp, U32 cmd, struct msg_blk *mb );VOID on_awaiting_estblishment( L2_LINK_S *linkp, U32 cmd, struct msg_blk *mb );VOID on_awaiting_release( L2_LINK_S *linkp, U32 cmd, struct msg_blk *mb );VOID on_multi_frame_estblished( L2_LINK_S *linkp, U32 cmd, struct msg_blk *mb );VOID on_timer_recovery( L2_LINK_S *linkp, U32 cmd, struct msg_blk *mb );VOID q921_mngt_handle( U32 srcMpe, DL_MSG_S*pL3L2Prim );VOID q921_timeout_handle( U32 name, L2_LINK_S *linkp );VOID q921_self_handle( MSG_S *msgp );VOID err_frame_handle( L2_LINK_S *linkp, U32 cmd );VOID q921_unit_data_request( L2_LINK_S *linkp, struct msg_blk *mb );VOID q921_data_request( L2_LINK_S *linkp, struct msg_blk *mb );VOID q921_establish_req( L2_LINK_S *linkp );VOID q921_release_req( L2_LINK_S *linkp );VOID establish_data_link( L2_LINK_S *linkp );AOS_INLINE VOID start_t200( L2_LINK_S *linkp );AOS_INLINE VOID start_t203( L2_LINK_S *linkp );AOS_INLINE VOID stop_t200( L2_LINK_S *linkp );AOS_INLINE VOID stop_t203( L2_LINK_S *linkp );AOS_INLINE U32 able_to_establish( L2_LINK_S *linkp );VOID transmit_enquiry( L2_LINK_S *linkp );VOID enquiry_response( L2_LINK_S *linkp );VOID n_r_error_recovery( L2_LINK_S *linkp );VOID invoke_retransmission( L2_LINK_S *linkp );U32 get_cmd( struct msg_blk *mb, L2_LINK_S *linkp );S8 *cmd_string( U32 cmd );AOS_INLINE U8 get_link_type( U32 tei );VOID mdl_error_indication( L2_LINK_S *linkp, U32 errCode );VOID error_string( U32 errCode, S8 *string );L2_LINK_S *lcm_get_link_cb( U32 drvtype, U32 dltype, U32 portno );#endif#ifdef __cplusplus}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -