⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 m803xx.h

📁 m80320 VoIP DSP驱动源码
💻 H
📖 第 1 页 / 共 2 页
字号:
/******************************************************************************
 * 文件名:m803xx.h                                                           *
 * 说  明:定义了M803xx驱动用到的宏和数据结构                                 *
 * 日  期:2003/01/16                                                         *
 ******************************************************************************/
#ifndef _M80320_H
#define _M80320_H

#include "vxworks.h"
#include "stdio.h"
#include "install.h"
#include "ros_ex.h"
#include "rtpmib.h"
#include "cacheLib.h"
#include "taskLib.h"
#include "garlib.h"
#include "Typedef.h"
#include "protocol/common/include/prot_ex.h"
#include "Attache/Common/Include/att_ex.h"
/*#include "Protocol\Attache\Stack\RTM\Include\rtm_ex.h"
#include "Attache/Stack/IPV4/Include/ip_ex.h"*/
#include "product.h"
#include "Layout/ip.h"
/*#include "driver/drvlib/include/drv_comm.h"*/
#include "drvlib/include/voipmuxlib.h"

#if INSTALL_LFXS_DRIVER
#define INPORT(x)       Swap_Word(*((volatile unsigned long *)(x)))
#define OUTPORT(x,y)    (*((volatile UINT16 *)(x)) = Swap_Byte(y))
#define SEM_FLAG  1

#define SendOpenChannelMsgFirst   1
#define M803xx_INIT_DEBUG         0
#define M803xx_DEBUG    1
#define Send_Int        1

#define MAX_CSM_INTR    (1024*2*4)
#define M803XX_MAX_PORT_NUM    8
#define PORTS_OF_CHIP   12

#define MAX_RX_MSG_NUM  10
#define M80320_MAX_CID_NUMBER 32

#define MAX_PIN_NUM     8
#define MAX_PCI_NUM     8
#define FIFO_SIZE       248
#define PCI_TXBUF_SIZE  1540

#define M803xx_VEN_ID   0x14F1
#define M803xx_DEV_ID   0x0100

#define PCI_MEM_BASE_OFFSET     0x10     /*定义内存基地址在PCI配置空间中的偏移量*/
#define PCI_MEM_BASE_MASK        0xfffffff0     /*定义PCI内存基地址mask*/
#define PCI_CFG_COMMAND_OFFSET  0x04    /*定义PCI配置空间命令偏移量*/
#define PCI_CFG_CMD_MEM_ENABLE  0x0002  /* memory access enable */
#define PCI_CFG_CMD_MASTER_ENABLE   0x0004  /* bus master enable */

#define MAX_CID_NUM             64
#define RTP_VERSION     2
#define RTP_SEQ_MOD     (1<<16)  /* 65536 */
/*maximum text length for SDES*/
#define RTP_MAX_SDES 255

/*Seq number update related constants*/
#define RTP_MAX_DROPOUT  3000
#define RTP_MAX_MISORDER 100

#define TX_MBOX_QSIZE   80
#define TX_DATA_QSIZE   20

#define RE_WR_BUF_SIZE  2000

#define MAX_PPP_FRAME_SIZE  1520
#define MAX_RX_BUF_SIZE     1000

#define PACKET_START_SIZE     28
#define IPV4_PKT_LEN_OFFSET   2
#define UDP_PKT_LEN_OFFSET    24
#define IPV4_HEADER_LEN       20
#define UDP_HEADER_LEN        8


#define CODE_OFFSET     0x80

#define DM_ASYN         0
#define DM_SYNC         1

#define LFXS_DOWN            0
#define LFXS_UP              1
#define BUSY            2
#define LFXS_STOP            3

#define LFXS_CALLTYPE_IDLE     0
#define LFXS_CALLTYPE_IN       1
#define LFXS_CALLTYPE_OUT      2

#define RTP_PACKET      50
#define UDP_PACKET      51
#define IP_PACKET       52
#define RTCP_PACKET     53
#define PORT_FAIL       54
#define SEND_DTMF       55
#define SEND_TONE       56
#define VoIP_CHANNEL_MODE    57

#define IDLE            0
#define LFXS_USE        1
#define REPAIR          2
#define FAIL            3

#define MAX_REPAIR_NUM  3

#define SENDTOM803xxOK  0
#define PORT_ERR        1
#define ERR_PORT_NUM    2
#define DATA_QUEUE_FULL 3
#define ERR_RTP_PACKET  4
#define ERR_TONE_TYPE   5
#define ERR_PORT_ACTIVE 6
#define OPEN_QUEUE_FULL 7
#define MBOX_QUEUE_FULL 8
#define ERR_DTMF_MODE   9
#define ERR_DTMF_DIGIT  10
#define ERR_RTCP_PACKET 11
#define ERROR_ARGUMENT  12
#define FAX_CHAN_NOT_OK 13
#define ADD_FWD_TASK_ERR 14

#define IdleStatus          0
#define ToneStatus          1
#define TalkStatus          2
#define ErrStatus           3
#define WaitTalkStatus      4
#define WaitIdleStatus      5
#define WaitCIDStatus       6
#define CIDStatus           7
#define CIDWaitIdleStatus   8
#define CIDIdleStatus       9
#define RECStatus           10
#define PLAYToneStatus      11
#define SendToneStatus      12
#define ReceiveToneStatus   13
#define CIDTalkStatus       14
#define RingGenerateStatus  15

/* caowm add qos dscp */
#define VOIP_DRIVER_IP_PRECEDENCE_DEFAULT  46
#define VOIP_DRIVER_IP_PRECEDENCE_MAX      63
/* end add */

#define SWITCH_TYPE         15

#define MAX_TONE_NUM    6
#define Dial_Tone       0        /* 拨号音 */
#define Ring_Back_Tone  1        /* 回铃音 */
#define Congestion_Tone 2        /* 拥塞音 */
#define Busy_Tone       3        /* 忙  音 */
#define Null_Tone       4        /* 空号音 */
#define Stop_Tone       5        /* 催挂音 */

#define PHONE_PACKET            0
#define TONE_GENERATION         1
#define DTMF_DETECT             2
#define DTMF_SEND               3
#define OPEN_CHANNEL            4
#define CLOSE_CHANNEL           5
#define GET_MIB                 6
#define DTMF_PROCESS_TYPE       7
#define COMFORT_NOISE           8
#define DTMF_THRESHOLD          9
#define ECHO_CANCELLER          10
#define IN_GAIN                 11
#define OUT_ATTENUATION         12
#define VAD_CONFIG              13
#define JITTER_BUFFER           14
#define SINGEL_PKT_FRAME_NUM    15
#define VOICE_TYPE              16
#define DRIVER_CHANGE_MODE      17
#define DRIVER_RING_GENERATE    18

#define FIRMWARE_NAME_FILE  "/system/cfg/firmware.axf"
#define FIRMWARE_MEM_LEN    3000000

#define DM_INT_TASK_MODE        (T_NOPREEMPT|T_NOTSLICE|T_NOASR|T_SUPV|T_ISR)
#define TASK_ATTRI              (T_GLOBAL|T_NOFPU)


/*2006-3-28 Add by ZhengQishan, 定义编码方式宏*/
#define CODER_TYPE_G711Alaw      1
#define CODER_TYPE_G711Ulaw      3
#define CODER_TYPE_G723          8
#define CODER_TYPE_G728          9
#define CODER_TYPE_G729          10
#define CODER_TYPE_G729a         11
#define CODER_TYPE_G729wb        12
#define CODER_TYPE_G729awb       13
#define CODER_TYPE_T30           19
#define CODER_TYPE_T38           20


#define M803xx_ALLOC_PCI_ADDR(PciAddr, tempAddr, buf) \
{\
    buf = (UINT32 *)endPktAlloc(); \
    tempAddr = (UINT32 *)sysVirtToPhys((void*)buf);\
    tempAddr = (UINT32*)sysPhysToPci((void *)tempAddr);\
    PciAddr = (UINT32 *)tempAddr;\
}

#define M803xx_PCI_ADDR(buf) \
{\
    void *tempAddr;\
    tempAddr = (UINT32 *)sysVirtToPhys((void*)buf);\
    tempAddr = (UINT32 *)sysPhysToPci((void *)tempAddr);\
    buf = (UINT32 *)tempAddr;\
}

#define M803xx_ADDR(PciAddr) \
{\
    void *tmpAddr;\
    tmpAddr = (UINT32 *)sysPciToPhys((void *)PciAddr);\
    PciAddr = (UINT32 *)sysPhysToVirt((void *)tmpAddr);\
}

typedef struct
{
    UINT16 Tone_Flags;          /* Tone Flags */
    UINT16 Start_Time[2];       /* Start TimeStamp */
    UINT16 Limit_Time[2];       /* Limit TimeStamp */
    UINT16 reserved[3];
    UINT16 Primary_Freq;        /* Primary Tone Frequency */
    UINT16 Primary_Amplitude;   /* Primary Tone Amplitude */
    UINT16 Secondary_Freq;      /* Secondary Tone Frequency */
    UINT16 Secondary_Amplitude; /* Secondary Tone Amplitude */
    UINT16 OnTime;              /* On Time, must be greater than 50ms */
    UINT16 OffTime;             /* Off Time, must be greater than 40ms */
    UINT16 reserved1[2];
}ToneStruct;

typedef struct
{
    UINT32 RecvCardOpenchannelRequestCount; /*1*/

    UINT32 SelfEnablechannelCount;          /*2*/
    UINT32 SelfDisablechannelCount;         /*3*/

    UINT32 SelfEnablechannelSucceedCount;   /*4*/
    UINT32 SelfDisablechannelSucceedCount;  /*5*/

    UINT32 SelfEnablechannelFailureCount;   /*6*/
    UINT32 SelfDisablechannelFailureCount;  /*7*/

    UINT32 Reserved;                        /*8*/
}   gChannelOperateCount;


/*2006-3-18 注释是郑其杉的理解*/
typedef struct
{
    UINT8   *QAddr;  /*指向队列缓冲区的指针*/
    UINT16  QSize;   /*缓冲区大小(字节为单位)*/
    UINT16  QCount;  /*本缓冲区当前已经有的数据,以sizeof(UIN16)为单位*/
    UINT16  QGet;    /*发送方向:已经通过M803XX发送出去的数据指针,从开始地址到当前位置的偏移量*/
    UINT16  QPut;    /*发送方向:CPU写入指针,从开始地址到当前位置的偏移量*/
}M80320_QUEUE;

typedef struct
{   UINT8  SQCount;
    UINT8  SQGet;
    UINT8  SQPut;
}SQUEUE;

typedef struct
{
    UINT32  p2;
    UINT32  p1;
    UINT32  p0;
    UINT32  message;
}MBOX_PACKET;

typedef struct
{
    UINT8 chip;
    MBOX_PACKET msg;
}M803xx_INT_TABLE;

typedef struct
{
    UINT16  data_offset_len; /* 数据块的索引 */
    UINT16  data_send_len;   /* 发送数据块大小*/
    UINT16  data_left_size;  /* 剩余数据大小  */
    UINT8    *packetptr;
    UINT8    *frame_ptr;      /* 数据块的首地址*/
}CHAN_QUEUE_HEAD;

typedef struct {
   UINT8 chan;          /* Modem/Channel ID byte of the DP message header */
   /*2006-3-18 ZhengQishan, 与程序中所用的pinNo是一个函意,与槽位号对应,不过要求是从0 - 7 */
   UINT8 chip;          /* Datapump number */
}M803xx_PORT;

#if 0
typedef struct
{
    SNMP_MSG_HEAD           struHead;                       /*消息头*/
    UINT8                    bSuccess;                       /*表示执行是否成功*/
}SETMDMRESULT;
#endif

typedef struct
{
    ipaddr_t ipAddr;
    UINT16   port;
}sdTransportAddress_T;        /*传输地址, IP = 0, 地址无效 *//* tran */

typedef struct tagT38FaxArgument
{
    int  tcfPassThroughIpNetwork   ;   /* 0 - passthrough, 1 - no passthrough*/
    int  errRecoverMethod          ;   /* 0 - Redundancy,  1 - FEC*/
    int  speed                     ;
    int  redundancyNumOfT30Msg     ;   /* Range: 0 to 7, default 3. */
    int  redundancyNumOfPageData   ;   /* Range: 0 to 3 */
    int  ECMFlag                   ;   /* 0 - allow ECM faxes in T.38, 1 - Prevent ECM*/
    int  lossPktConcealment        ;   /* 0 - No T.38 packet loss Concealment*/
    int  level;                        /* singal level */
}T38_FAX_ARG_T;

typedef struct tagT38FaxPortArg
{
    T38_FAX_ARG_T  chipArg;  /*芯片相关的参数*/
    UINT8 ipUdpHeader[PACKET_START_SIZE + 1];
}T38_FAX_PORT_ARGUMENT;


#define OPEN_T38_FAX_CHANEL     1
#define CLOSE_T38_FAX_CHANEL    0

typedef struct
{
    UINT32                  PortNo;               /* 全局端口号 */
    int                     bearerInformation;    /* 0 - mu law 1 - a law */
    UINT8                   echoCancell;          /* 0 - 128ms, 8 step*/
    UINT8                   VAD;                  /* 静音检测      0--not use 1--use*/
    UINT8                   CNG;                  /* 舒适噪音产生  0--not use 1--use*/
    UINT8                   Channel_Open_Flag;      /* use for E1VI */
    UINT8                   Channel_Close_Flag;      /* use for E1VI */
    UINT8                   Receive_Tone_Stop_Flag;  /* use for E1VI */
    UINT8                   Send_Tone_Stop_Flag;     /* use for E1VI */
    UINT8                   Mfc_Close_Flag;          /* use for E1VI */
    UINT8                   Send_UnCom_Tone;         /* use for E1VI */
    UINT8                   DTMFSendMode;         /* 0--in-band   1--out of band */
    UINT8                   Tos;                 /*Qos  2004/08/10 add 0 - 7 */
    UINT8                   frameNum;             /* 1 - 5 */
    int                     InGainValue;          /* -140 - +60 */
    int                     OutAttenuationValue;  /* -60 - +140 */
    int                     DTMF_LEVEL;           /* 0 - -30 */
    int                     JitterValue;          /* 0 - 200ms */
    /*unsigned char         nameId;             same as bearerInformation*/
    UINT32                  fax_voiceduration;    /*设置特殊传真参数值*/
    sdTransportAddress_T    localRtpAddress;      /*用作T38传真参数时,此地址为UDPTL的参数*/
    sdTransportAddress_T    localRtcpAddress;     /*用作T38传真参数时,此地址为UDPTL的参数*/
    sdTransportAddress_T    remoteRtpAddress;
    sdTransportAddress_T    remoteRtcpAddress;
    int                     faxMode;
    T38_FAX_PORT_ARGUMENT   t38FaxArg;   

    UINT8                   isFaxCall;          /*用于e1vi    0---voiceCall 1----voiceCall*/
    UINT8                   callDirection;      /*用于e1vi*/
    int                     tone_temp;          /*用于e1vi*/   
    int                     e1vi_send_tone;
}PortStatusParameter;


typedef struct
{
    UINT8    Port;                 /* 对应端口号 */
    UINT16   ChanId;
    UINT16   TimeSlot;
    UINT8    Active;               /* 0: IDLE, 1: BUSY 2: FAIL*/
    UINT8    Repair_Num;
    UINT16   tx_data_requested;    /* 发送数据标志位 0 - 可以发送;1 - 不能发送 */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -