zte's code,first commit
Change-Id: I9a04da59e459a9bc0d67f101f700d9d7dc8d681b
diff --git a/ap/os/linux/linux-3.4.x/drivers/slic/usr_line.h b/ap/os/linux/linux-3.4.x/drivers/slic/usr_line.h
new file mode 100644
index 0000000..83e0032
--- /dev/null
+++ b/ap/os/linux/linux-3.4.x/drivers/slic/usr_line.h
@@ -0,0 +1,339 @@
+#ifndef _USR_LINE_H
+#define _USR_LINE_H
+
+#include <asm/types.h>
+#include <linux/mutex.h>
+#include "112.h"
+#include "si_adt.h"
+#include "silicon_spi.h"
+#include "si3217x_registers.h"
+
+#define USL_MAJOR 211 /* device num */
+#define USL_NAME "slic" /* device name */
+
+#define MSGMAX 32
+#define SLIC_PORT_TYPE 0
+#define DAA_PORT_TYPE 1
+
+/* if line is ok to be scaned or operated */
+#define LINE_NOTINIT 0
+#define LINE_INITOK 1
+#define LINE_DISABLE 0
+#define LINE_ENABLE 1
+
+#define SLC_SUCCESS (0)
+#define SLC_FAIL (-1)
+
+typedef enum {
+ SLIC_UNKNOWN_CMD = -1, /* unknow cmd */
+
+ /* modified cmd*/
+ SLIC_DEV_INIT = 0, /* ³õʼ»¯SLICоƬ */
+ SLIC_MSG_REV, /* ½ÓÊÕÉϱ¨Ê¼þ*/
+ SLIC_TEST,
+ SLIC_SIGNAL_START, /* ¿ªÊ¼ÕñÁå»ò·ÅÒô */
+ SLIC_SIGNAL_STOP, /* Í£Ö¹ÕñÁå»ò·ÅÒô */
+ SLIC_PCM_OPEN = 5, /* ´ò¿ªPCMͨ· */
+ SLIC_PCM_CLOSE, /* ¹Ø±ÕPCMͨ· */
+ SLIC_PCM_SET_NB, /* ÉèÖÃÕ´øÒôƵ */
+ SLIC_PCM_SET_WB, /* ÉèÖÃ¿í´øÒôƵ */
+
+ /* original cmd*/
+ /* below cmd is used for ulc or slctool */
+ SLIC_INF_PRECFG = 9, /* */
+ SLIC_NOTUSED, /* for ioctl #define FIGETBSZ _IO(0x00,2) */
+ SLIC_PORT_RESET, /* */
+ SLIC_MSG_CLR, /* */
+ SLIC_DIAL_START, /* */
+ SLIC_DIAL_STOP, /* */
+ SLIC_TIMESLOT_SET, /* */
+ SLIC_TIMESLOT_RELEASE, /* */
+ SLIC_PORT_LOCK, /* */
+ SLIC_PORT_UNLOCK, /* */
+ SLIC_FSK_START, /* */
+ SLIC_FSK_STO, /* */
+ SLIC_POLARITY_REVERSE, /* */
+ SLIC_DTMFCID_START, /* */
+ SLIC_LINE_TEST_START, /* start line test */
+ SLIC_LINE_TEST_ABORT, /* stop line test */
+ SLIC_LINE_TEST_READ, /* read line test result */
+ SLIC_TIMEPARA_CFG, /* config the time para used for hookon¡¢hookoff¡¢pulse dial and flash */
+ SLIC_ELECTRIC_CFG, /* */
+
+ /* below cmd is only used for slctool for debug */
+ SLIC_DEBUG_LEVEL = 28, /* set the message print level */
+ SLIC_CFG_HOOK_LOWLEN, /* config the hookon time */
+ SLIC_CFG_HOOK_HIGLEN, /* */
+ SLIC_CFG_FLASH_LMIN, /* */
+ SLIC_CFG_FLASH_LMAX, /* */
+ SLIC_CFG_FLASH_HFIX, /* */
+ SLIC_CFG_DIAL_HMIN, /* */
+ SLIC_CFG_DIAL_HMAX, /* */
+ SLIC_CFG_DIAL_LMIN, /* */
+ SLIC_CFG_DIAL_LMAX, /* */
+ SLIC_CFG_RINGCEASE, /* */
+ SLIC_CFG_PREHOOK_HIGLEN, /* */
+ SLIC_CFG_QUEUE_DELAY, /* */
+ SLIC_CODEC_GET, /* read the content of reg xxx */
+ SLIC_CODEC_SET, /* wrtie value X to reg xxx */
+ SLIC_RAM_GET = 43, /* read the content of ram xxx */
+ SLIC_RAM_SET, /* wrtie value X to ram xxx */
+ SLIC_MUTE,
+ SLIC_CODEC_GETALL, /* read all the reg */
+ SLIC_RAM_GETALL, /* read all the ram */
+ SLIC_GET_CHIP_NAME, /* */
+
+ SLIC_IOCTL_CMD_MAX,
+} SLIC_IOCTL_CMD;
+
+/* scan report event */
+typedef enum {
+ EV_UNKONWN = -1,
+ EV_FXS_HOOKON, /*¹Ò»úʼþ*/
+ EV_FXS_HOOKOFF, /*Õª»úʼþ*/
+ EV_FXS_COLLECT_DIG, /*¼ì²âµ½°´¼ü£¬ÕýÔڲɼ¯ºÅÂë*/
+ EV_FXS_FLASH, /*ÅIJå»Éʼþ*/
+
+ EV_FXS_FIRST_RING,
+ EV_FXS_SIGNAL_CEASE,
+ EV_FXO_RING_START,
+ EV_FXO_RING_STOP,
+ EV_FXS_PRE_HOOKOFF,
+ EV_FXS_FIRST_TONE,
+ EV_FXS_TEST_DONE,
+ EV_FXS_TEST_ERROR
+} SLIC_EVENT;
+
+/* daa line status */
+#define DAA_STATES 3 /* all daa phone state */
+#define DAA_RING_ON 0 /* ring */
+#define DAA_RING_OFF 1 /* no ring */
+#define DAA_REPORT 2 /* report ring */
+
+
+/* errno define */
+#define MALLOC_ERR 0x60
+#define PORT_NOFOUND 0x61
+#define CODEC_HARDWARE_ERR 0x63
+#define MESSAGE_FULL 0x64
+#define NOT_SUPPORT 0x65
+#define PULSE_ERROR 0x66
+
+
+#define SIGNAL_PLAY_START 1
+#define SIGNAL_PLAY_STOP 0
+
+
+#define USL_RING_SIGNAL RING_SIGNAL
+#define USL_TONE_SIGNAL TONE_SIGNAL
+
+
+#define RING_SIGNAL_INIT 49
+#define RING_SIGNAL_ON 50
+#define RING_SIGNAL_OFF 51
+#define RING_SIGNAL_CLEAN_OFF 52
+#define RING_SIGNAL_CLEAN_ON 53
+#define RING_SIGNAL_OFF_REVERSED 54
+#define TONE_SIGNAL_INIT 60
+#define TONE_SIGNAL_ON 61
+#define TONE_SIGNAL_OFF 62
+#define TONE_SIGNAL_CLEAN 63
+
+#define GET_EV_MASK(x) (1<<x)
+/* conver time format millisecond to system jiffies */
+#define MS2JIFF(num, ms) ((num) * (ms) * HZ / 1000)
+
+#if 0
+#define DIAL_LOW_MAX_NORMAL 0
+#define DIAL_LOW_MAX_BIGGER 1
+#endif
+
+#define EV_DIAL_STOP 0
+#define EV_DIAL_START 1
+
+extern u8 si_usl_debuglvl;
+
+
+#define USLPUT0 printk
+#define USLPUT1 printk
+#define USLPUT2 printk
+#define USLPUT3 printk
+
+
+typedef struct
+{
+ u8 bTx;
+ u8 bRx;
+} TIME_SLOT;
+
+typedef union
+{
+ u16 wTime;
+ u16 wLevel;
+ u16 wImpe;
+ u16 wHighWay;
+ TIME_SLOT stTimeSlot;
+} SLIC_PARA_UNION;
+
+typedef struct
+{
+#if 0
+ u16 port;
+ u8 port_type;
+ SLIC_PARA_UNION unPara;
+#endif
+ void *data;
+ u32 data_size;
+} SLIC_IOCTL_DATA;
+
+typedef struct
+{
+ //u16 port; /* del by zhanghuan */
+ u8 msgid;
+ u32 payload; /* payload only 4 byte */
+} MSG_DATA;
+
+typedef struct
+{
+ MSG_DATA data[MSGMAX];
+ u32 head;
+ u32 tail;
+} USL_MSG;
+
+typedef struct
+{
+ u16 wCadence_rptcnt;
+ u16 cadence_on;
+ u16 cadence_off;
+ u16 freq1;
+ u16 freq2;
+ u16 amp;
+} CANDENCE_ATTR;
+
+#if 0
+typedef struct
+{
+ u16 dura; /* dura time */
+ u16 signal_type; /* tone type */
+ u16 signal_id; /* signal id */
+ u16 tone_num; /* Ring Tone counter */
+ u32 tick_count; /* passed tick */
+ u32 next_time; /* next time of ring tone toggle */
+
+ /* Tone attrible struct */
+ u32 cease_time;
+ u8 cadence_num;
+ u16 cadence_index;
+ u16 wCurrentrptcnt; /* repeat count on current cadence_index */
+ CANDENCE_ATTR cadence[4];
+
+} SIGNAL_DATA;
+#endif
+
+/* add by zhanghuan for new signal struct */
+typedef enum {
+ RING_SIGNAL = 0,
+ TONE_SIGNAL = 1
+} SLIC_SIGNAL_TYPE;
+
+typedef enum
+{
+ TONE_DIAL, /* ²¦ºÅÒô */
+ TONE_BUSY, /* æÒô */
+ TONE_RINGBACK, /* »ØÁåÒô */
+ TONE_CONGESTION, /* ×èÈûÒô*/
+ TONE_CW, /* ºô½ÐµÈ´ýÒô*/
+ TONE_TKY, /* Ð¥½ÐÒô*/
+ TONE_SERVICE_SUCCESS, /* ÉèÖóɹ¦Òô */
+ TONE_SERVICE_FAIL, /* ÉèÖÃʧ°ÜÒô */
+ /* ´ýÀ©Õ¹ */
+ TONE_MAX,
+
+} TONE_TYPE;
+
+typedef struct
+{
+ SLIC_SIGNAL_TYPE signal_type;
+ /* TONE_SIGNAL ±íʾTONEÒô */
+ /* RING_SIGNAL ±íʾÕñÁå */
+ char cid[32]; /* À´µçÏÔʾºÅÂë */
+ TONE_TYPE tone_type; /* toneÒôÀàÐÍ*/
+
+} SIGNAL_DATA;
+/* add by zhanghuan for new signal struct end*/
+
+
+/* used for quene ring */
+typedef struct
+{
+ u32 dwRingStop; /*flag: add for dealingl the stop ringing conflit 0:noaction 1:stop ringing*/
+ u32 dwNeedSort; /*flag: need the sort algorithm 0:no 1:need*/
+ u32 dwOffCountStart; /*during the ringing off time, we will start statistics*/
+ u32 dwOffCount; /*statistics time: ringing off time*/
+ u32 dwOffMaxCount; /*time: cadence_off - cadence_on - data->delay*2 */
+
+ u32 RingQueneDelay;
+} RING_QUENE_PARA;
+
+struct codec_ops;
+
+typedef struct
+{
+ struct codec_ops *codec_ops; /* chip adpter interface func struct pointer */
+
+ u16 port;
+ u8 port_type;
+ u8 flag; /* 0:disable 1:enable */
+ u32 dwInitOK; /* 0:not init 1:init ok*/
+
+ /* daa internal data */
+ u32 ring_on_len;
+ u32 ring_off_len;
+
+ /* used for setting fsk&dtmf transmit mode */
+ u32 dwIsRevPol;
+
+ u16 event_mask; /* event mask flag */
+
+ /* play signal data */
+ u8 signal_flag; /* play signal start or stop */
+ u8 signal_on; /* signal is on or off */
+ SIGNAL_DATA sig_data;
+ RING_QUENE_PARA stRingQuenePara;
+
+ Port_t *pLine; /*Ö¸ÏòоƬ²Ù×÷µÄÖ¸Õë*/
+
+} USL_PORT;
+
+typedef struct
+{
+ s8 (*pIoctlFunc) (USL_PORT *data, SLIC_IOCTL_DATA *pstCmd);
+} USRLINE_IOCTL_FUNC_MAP;
+
+typedef struct codec_ops
+{
+ s8 (*codec_signal_ctrl) (Port_t *pPort, const void *signal_attr, const u8 flag);
+ s8 (*codec_timeslot_set) (Port_t *pPort, const u8 tx, const u8 rx);
+ s8 (*codec_timeslot_release) (Port_t *pPort);
+ s8 (*codec_polarity_reverse) (Port_t *pPort, const u16 port);
+ s8 (*codec_reset) (Port_t *pPort, const u16 port);
+ s8 (*codec_parm_cfg) (Port_t *pPort, u8 *parm, const u8 size);
+ s8 (*codec_parm_get) (Port_t *pPort, u8 *parm, const u8 size);
+ s8 (*codec_ram_cfg) (Port_t *pPort, u8 *parm, const u8 size);
+ s8 (*codec_ram_get) (Port_t *pPort, u8 *parm, const u8 size);
+ s8 (*codec_time_cfg) (Port_t *pPort, const USL_CONFIG *buf);
+ s8 (*codec_slctool_time_cfg) (Port_t *pPort, SLIC_IOCTL_CMD cmd, u16 wTime);
+ s8 (*codec_time_print) (Port_t *pPort);
+ s8 (*codec_dial_set) (Port_t *pPort, u8 bDialEn);
+ s8 (*codec_electric_cfg) (Port_t *pPort, const u16 port, const ELECTRIC_CFG_CUSTOMIZED *buf);
+ s8 (*codec_start_test) (Port_t *pPort, const WriteCmd_t *Cmd);
+ s8 (*codec_stop_test) (Port_t *pPort);
+ s8 (*codec_read_reslult) (Port_t *pPort, TestResult_t *pstResult);
+ s8 (*codec_power_ctrl) (Port_t *pPort, u8 level);
+
+ void (*codec_scan) (USL_PORT *pUslPort);
+} CODEC_OPS;
+
+s8 usrline_report(const u16 port, const u8 event, const u32 payload, u16 mask);
+s8 usrline_port_register( const u16 port, const u8 type, CODEC_OPS *ops, Port_t *pchip);
+#endif /* _USR_LINE_H */