xref: /utopia/UTPA2-700.0.x/modules/dscmb/drv/nsk2/drvNDSRasp.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi 
2*53ee8cc1Swenshuai.xi 
3*53ee8cc1Swenshuai.xi #include "MsCommon.h"
4*53ee8cc1Swenshuai.xi 
5*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX
6*53ee8cc1Swenshuai.xi #include "string.h"
7*53ee8cc1Swenshuai.xi #endif
8*53ee8cc1Swenshuai.xi 
9*53ee8cc1Swenshuai.xi 
10*53ee8cc1Swenshuai.xi #include "asmCPU.h"
11*53ee8cc1Swenshuai.xi #include "regNDSRASP.h"
12*53ee8cc1Swenshuai.xi #include "halNDSRASP.h"
13*53ee8cc1Swenshuai.xi #include "drvNDSRASP.h"
14*53ee8cc1Swenshuai.xi #include "XtvTypes.h"
15*53ee8cc1Swenshuai.xi #include "ndstypes.h"
16*53ee8cc1Swenshuai.xi #include "drvMMIO.h"
17*53ee8cc1Swenshuai.xi #include "drvEMMFlt.h"
18*53ee8cc1Swenshuai.xi #include "halEMMflt.h"
19*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
20*53ee8cc1Swenshuai.xi //  Debug Macro
21*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
22*53ee8cc1Swenshuai.xi static MS_U32       _g32RASPDrvDbgLv = RASP_DBGLV_DEBUG;
23*53ee8cc1Swenshuai.xi 
24*53ee8cc1Swenshuai.xi #define DRVRASP_DBG(lv, x, args...)   if (lv <= _g32RASPDrvDbgLv ) \
25*53ee8cc1Swenshuai.xi                                           { printf("%s, ",__FUNCTION__); \
26*53ee8cc1Swenshuai.xi                                             printf(x, ##args);  }
27*53ee8cc1Swenshuai.xi 
28*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------//
29*53ee8cc1Swenshuai.xi //       Macro Definition
30*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------//
31*53ee8cc1Swenshuai.xi 
32*53ee8cc1Swenshuai.xi #define RASP_INT_EVENT_ALL (RASP_INT_EFRAME_RD_OVF | RASP_INT_EFRAME_WT_OVF| \
33*53ee8cc1Swenshuai.xi                             RASP_INT_STR2MIU | RASP_INT_PAYLD2MIU | RASP_INT_ECM2MIU|\
34*53ee8cc1Swenshuai.xi                             RASP_INT_TIME_WATER_MARK|RASP_INT_EVENT_WATER_MARK |\
35*53ee8cc1Swenshuai.xi                             RASP_INT_ECM_PKT_RDY )
36*53ee8cc1Swenshuai.xi 
37*53ee8cc1Swenshuai.xi 
38*53ee8cc1Swenshuai.xi #define NDS_RASP_TASK_STACK_SIZE  (1024 * 16 )
39*53ee8cc1Swenshuai.xi 
40*53ee8cc1Swenshuai.xi 
41*53ee8cc1Swenshuai.xi #define NDS_RASP_TIME_WATER_MARK   0x00000200
42*53ee8cc1Swenshuai.xi #define NDS_RASP_EVENT_WATER_MARK   0x00000400
43*53ee8cc1Swenshuai.xi #define NDS_RASP_ECM_OVERFLOW_SHIFT   0x00000016
44*53ee8cc1Swenshuai.xi 
45*53ee8cc1Swenshuai.xi #define NDS_RASP_EVENT_ALL            0xFFFFFFFF
46*53ee8cc1Swenshuai.xi 
47*53ee8cc1Swenshuai.xi 
48*53ee8cc1Swenshuai.xi 
49*53ee8cc1Swenshuai.xi #define NDS_CAM_FLT_BUF_SIZE            (256)
50*53ee8cc1Swenshuai.xi #define NDS_CAM_FLT_BUF_ALIGN           (8)
51*53ee8cc1Swenshuai.xi #define NDS_CAM_ECM_FLT_NUM             (6)
52*53ee8cc1Swenshuai.xi #define NDS_CAM_EMM_BUF_NUM             (10)
53*53ee8cc1Swenshuai.xi 
54*53ee8cc1Swenshuai.xi #define NDS_RASP_PAYLOAD_PKT_NUM            (1000)
55*53ee8cc1Swenshuai.xi 
56*53ee8cc1Swenshuai.xi #define NDS_RASP_ECM_BUF_SIZE         (NDS_CAM_FLT_BUF_SIZE  * (NDS_CAM_ECM_FLT_NUM+2) )
57*53ee8cc1Swenshuai.xi #define NDS_RASP_PAYLOAD_BUF_SIZE       (192 * NDS_RASP_PAYLOAD_PKT_NUM )
58*53ee8cc1Swenshuai.xi 
59*53ee8cc1Swenshuai.xi #define NDS_RASP_ALL_BUF_SIZE         (NDS_RASP_ECM_BUF_SIZE + NDS_RASP_PAYLOAD_BUF_SIZE)
60*53ee8cc1Swenshuai.xi #define CA_OK                                   0
61*53ee8cc1Swenshuai.xi #define CA_REQUEST_NOT_SUPPORTED_BY_DRIVER      1
62*53ee8cc1Swenshuai.xi #define CA_DRIVER_CAN_NOT_PERFORM_FUNCTION_NOW  2
63*53ee8cc1Swenshuai.xi #define CA_GLOBAL_HARDWARE_FAILURE              3
64*53ee8cc1Swenshuai.xi #define CA_ECM_PID_FILTER_ALREADY_DEFINED       4
65*53ee8cc1Swenshuai.xi #define CA_DRIVER_INVALID_DATA_STREAM           5
66*53ee8cc1Swenshuai.xi #define CA_DRIVER_INVALID_LOGICAL_STREAM_ID     6
67*53ee8cc1Swenshuai.xi // #define CA_INSUFICIENT_BUFFER                   7
68*53ee8cc1Swenshuai.xi #define CA_INFO_NOT_AVAILABLE                           7
69*53ee8cc1Swenshuai.xi #define CA_INSUFFICIENT_BUFFER                          8
70*53ee8cc1Swenshuai.xi #define CA_SCHEME_NOT_SUPPORTED                         9
71*53ee8cc1Swenshuai.xi #define CA_FUNCTIONALITY_NOT_AVAILABLE_UNTIL_RESTART    10
72*53ee8cc1Swenshuai.xi #define CA_FUNCTIONALITY_PERMANENTLY_NOT_AVAILABLE      11
73*53ee8cc1Swenshuai.xi #define CA_FEATURE_NOT_SUPPORTED                        12
74*53ee8cc1Swenshuai.xi 
75*53ee8cc1Swenshuai.xi #if 1
76*53ee8cc1Swenshuai.xi #define MAX_PIDS                                8
77*53ee8cc1Swenshuai.xi 
78*53ee8cc1Swenshuai.xi /*  HDICA_ECM_FILTER_CONTROL_ODD_RECEPTION_MASK */
79*53ee8cc1Swenshuai.xi #define HDICA_ECM_FILTER_CONTROL_DISABLE_ODD_RECEPTION  0x00
80*53ee8cc1Swenshuai.xi #define HDICA_ECM_FILTER_CONTROL_ENABLE_ODD_RECEPTION   0x20
81*53ee8cc1Swenshuai.xi 
82*53ee8cc1Swenshuai.xi /*  HDICA_ECM_FILTER_CONTROL_EVEN_RECEPTION_MASK */
83*53ee8cc1Swenshuai.xi #define HDICA_ECM_FILTER_CONTROL_DISABLE_EVEN_RECEPTION 0x00
84*53ee8cc1Swenshuai.xi #define HDICA_ECM_FILTER_CONTROL_ENABLE_EVEN_RECEPTION  0x40
85*53ee8cc1Swenshuai.xi 
86*53ee8cc1Swenshuai.xi #define REG_RASP_ECM03_PID(n)        (0x0012+n*1)
87*53ee8cc1Swenshuai.xi     #define RASP_ECM_PID_MASK                        BMASK(12:0)
88*53ee8cc1Swenshuai.xi     #define RASP_ECM_PID_TID_MASK                    BMASK(14:13)
89*53ee8cc1Swenshuai.xi     #define RASP_ECM_PID_TID_ODD                     BIT(13)
90*53ee8cc1Swenshuai.xi     #define RASP_ECM_PID_TID_EVEN                    BIT(14)
91*53ee8cc1Swenshuai.xi     #define RASP_ECM_PID_ENABLE                      BIT(15)
92*53ee8cc1Swenshuai.xi //#define REG_RASP_ECM_TID             0x0016
93*53ee8cc1Swenshuai.xi //    #define RASP_ECM_TID_EVEN_MASK                   BMASK(7:0)
94*53ee8cc1Swenshuai.xi //    #define RASP_ECM_TID_ODD_MASK                    BMASK(15:8)
95*53ee8cc1Swenshuai.xi #define REG_RASP_ECM03_LOCK_CTRL     0x0017
96*53ee8cc1Swenshuai.xi     #define RASP_ECM_LOCK_BITS                       4
97*53ee8cc1Swenshuai.xi //#define REG_RASP_CA_INT              0x0018
98*53ee8cc1Swenshuai.xi     #define RASP_CA_INT_ECM                          BIT(0)
99*53ee8cc1Swenshuai.xi     #define RASP_CA_INT_MASK_RESET_MODE              BIT(7)  // set 1 to reset interrupt status
100*53ee8cc1Swenshuai.xi #define REG_RASP_ECM_INT_STAT        0x0019
101*53ee8cc1Swenshuai.xi     #define RASP_ECM_INT_FLT_MASK                    BMASK(7:0)
102*53ee8cc1Swenshuai.xi 
103*53ee8cc1Swenshuai.xi #define REG_RASP_ECM45_PID(n)        (0x0030+(n-4)*1)
104*53ee8cc1Swenshuai.xi 
105*53ee8cc1Swenshuai.xi #define REG_RASP_ECM45_LOCK_CTRL_     0x0032
106*53ee8cc1Swenshuai.xi 
107*53ee8cc1Swenshuai.xi /*  HDICA_ECM_RECEPTION_MASK */
108*53ee8cc1Swenshuai.xi #define HDICA_ECM_RECEPTION_DISABLE 0x00
109*53ee8cc1Swenshuai.xi #define HDICA_ECM_RECEPTION_ENABLE  0x80
110*53ee8cc1Swenshuai.xi 
111*53ee8cc1Swenshuai.xi #define HDICA_ECM_DISABLE_RECEPTION 0x00   /* it's multiply because of mismatch in the document */
112*53ee8cc1Swenshuai.xi #define HDICA_ECM_ENABLE_RECEPTION  0x80
113*53ee8cc1Swenshuai.xi 
114*53ee8cc1Swenshuai.xi //#define HW_RASP_REGBASE              0xBF223800
115*53ee8cc1Swenshuai.xi //#define RASP_REG(addr)               (*((volatile MS_U16*)(HW_RASP_REGBASE + ((addr)<<2))))
116*53ee8cc1Swenshuai.xi 
117*53ee8cc1Swenshuai.xi // Macros
118*53ee8cc1Swenshuai.xi #define REG_RASP_ECM_PID(n)          ( (n<4) ? (REG_RASP_ECM03_PID(n)) : (REG_RASP_ECM45_PID(n)) )
119*53ee8cc1Swenshuai.xi #define REG_RASP_ECM_LOCK(n)         ( (n<4) ? (REG_RASP_ECM03_LOCK_CTRL) : (REG_RASP_ECM45_LOCK_CTRL_) )
120*53ee8cc1Swenshuai.xi     #define RASP_ECM_LOCK_MASK(n)                    ( (n<4) ? (BMASK(2:0)<<(RASP_ECM_LOCK_BITS*n)) : (BMASK(2:0)<<(RASP_ECM_LOCK_BITS*(n-4))) )
121*53ee8cc1Swenshuai.xi     #define RASP_ECM_LOCK_AUTO(n)                    ( (n<4) ? (BIT(0)    <<(RASP_ECM_LOCK_BITS*n)) : (BIT(0)    <<(RASP_ECM_LOCK_BITS*(n-4))) )
122*53ee8cc1Swenshuai.xi     #define RASP_ECM_LOCK_EVEN(n)                    ( (n<4) ? (BIT(1)    <<(RASP_ECM_LOCK_BITS*n)) : (BIT(1)    <<(RASP_ECM_LOCK_BITS*(n-4))) )
123*53ee8cc1Swenshuai.xi     #define RASP_ECM_LOCK_ODD(n)                     ( (n<4) ? (BIT(2)    <<(RASP_ECM_LOCK_BITS*n)) : (BIT(2)    <<(RASP_ECM_LOCK_BITS*(n-4))) )
124*53ee8cc1Swenshuai.xi #endif
125*53ee8cc1Swenshuai.xi 
126*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------//
127*53ee8cc1Swenshuai.xi //       Local Structure definition
128*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------//
129*53ee8cc1Swenshuai.xi 
130*53ee8cc1Swenshuai.xi typedef struct
131*53ee8cc1Swenshuai.xi {
132*53ee8cc1Swenshuai.xi 
133*53ee8cc1Swenshuai.xi     MS_U16 pid ;
134*53ee8cc1Swenshuai.xi     MS_U16 ecmid;
135*53ee8cc1Swenshuai.xi     MS_U8  ecm_ctrl;
136*53ee8cc1Swenshuai.xi     MS_U32 Xconn;
137*53ee8cc1Swenshuai.xi     MS_BOOL b_defined;
138*53ee8cc1Swenshuai.xi 
139*53ee8cc1Swenshuai.xi } NDS_RASP_ECM_FLT;
140*53ee8cc1Swenshuai.xi 
141*53ee8cc1Swenshuai.xi typedef struct
142*53ee8cc1Swenshuai.xi {
143*53ee8cc1Swenshuai.xi     MS_U16            u16FltId;
144*53ee8cc1Swenshuai.xi     XUSHORT           Pid;
145*53ee8cc1Swenshuai.xi     F_RASP_EV_MASK    EventMask;
146*53ee8cc1Swenshuai.xi     F_RASP_EV_MASK    PayloadMask;
147*53ee8cc1Swenshuai.xi     DrvRASP_FltState  RASP_FltState;
148*53ee8cc1Swenshuai.xi } EventMask_s;
149*53ee8cc1Swenshuai.xi 
150*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------//
151*53ee8cc1Swenshuai.xi //       Variable declaration
152*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------//
153*53ee8cc1Swenshuai.xi 
154*53ee8cc1Swenshuai.xi //static MS_U8 *_rasp_ecm_addr[RASP_NUM] ;//{[0 ... (RASP_NUM)] = NULL } ;
155*53ee8cc1Swenshuai.xi static MS_S32 _nds_rasp_eventid = -1 , _nds_rasp_taskid  = -1 ;
156*53ee8cc1Swenshuai.xi 
157*53ee8cc1Swenshuai.xi //static MS_U32 _u32LastErr;
158*53ee8cc1Swenshuai.xi //static MS_BOOL _bSuspend = FALSE;
159*53ee8cc1Swenshuai.xi 
160*53ee8cc1Swenshuai.xi MS_U8    _u8RaspEcmBuf[RASP_NUM][NDS_CAM_ECM_FLT_NUM][2][NDS_CAM_FLT_BUF_SIZE];
161*53ee8cc1Swenshuai.xi 
162*53ee8cc1Swenshuai.xi NDS_RASP_ECM_FLT _rasp_ecm_flt[RASP_NUM][NDS_CAM_ECM_FLT_NUM];
163*53ee8cc1Swenshuai.xi 
164*53ee8cc1Swenshuai.xi static MS_U32  _nds_rasp_stack[NDS_RASP_TASK_STACK_SIZE/sizeof(MS_U32)];
165*53ee8cc1Swenshuai.xi 
166*53ee8cc1Swenshuai.xi //static EventMask_s _tEventMask[RASP_EVENT_NUM];
167*53ee8cc1Swenshuai.xi //static MS_U32 _u32PidIndEventMask = 0;
168*53ee8cc1Swenshuai.xi 
169*53ee8cc1Swenshuai.xi //static XUSHORT EcmPid[RASP_NUM][NDS_CAM_ECM_FLT_NUM];
170*53ee8cc1Swenshuai.xi static MS_U32 EcmPktNumer,EcmWritePtr,EcmTimeStamp;
171*53ee8cc1Swenshuai.xi static MS_U16 EcmIntStatus;
172*53ee8cc1Swenshuai.xi static MS_BOOL _bRASPIsInit = FALSE;
173*53ee8cc1Swenshuai.xi 
174*53ee8cc1Swenshuai.xi //#ifdef MSOS_TYPE_LINUX_KERNEL
175*53ee8cc1Swenshuai.xi //static irqreturn_t _NDS_RASP_Isr(int irq, void *dev_id);
176*53ee8cc1Swenshuai.xi //#else
177*53ee8cc1Swenshuai.xi //static void _NDS_RASP_Isr(InterruptNum eIntNum);
178*53ee8cc1Swenshuai.xi //#endif
179*53ee8cc1Swenshuai.xi 
180*53ee8cc1Swenshuai.xi static void _NDS_RASP_IsrTask(void);
181*53ee8cc1Swenshuai.xi RASP_EVENT_NOTIFY_FOUNCTION     *_RaspEventCB;
182*53ee8cc1Swenshuai.xi RASP_OVERFLOW_NOTIFY_FUNCTION   *_RaspOvfCB;
183*53ee8cc1Swenshuai.xi MS_PHYADDR _pPayloadBuf0;
184*53ee8cc1Swenshuai.xi MS_PHYADDR _pPayloadBuf1;
185*53ee8cc1Swenshuai.xi MS_U32 _PayloadSize0;
186*53ee8cc1Swenshuai.xi MS_U32 _PayloadSize1;
187*53ee8cc1Swenshuai.xi MS_U8 _u8pingpong;
188*53ee8cc1Swenshuai.xi 
189*53ee8cc1Swenshuai.xi //static MS_U8 *_rasp_payload_addr[RASP_NUM] ;//{[0 ... (RASP_NUM)] = NULL } ;
190*53ee8cc1Swenshuai.xi //RASP_EVENT _RaspEvents[NDS_RASP_PAYLOAD_PKT_NUM];	//egi
191*53ee8cc1Swenshuai.xi 
192*53ee8cc1Swenshuai.xi static MS_U32 _u32RaspEventFlag;
193*53ee8cc1Swenshuai.xi static MS_U32 _u32RaspOvfEventFlag;
194*53ee8cc1Swenshuai.xi static MS_U16 _RaspEventIdx;
195*53ee8cc1Swenshuai.xi //static MS_U16 _RaspNumEvents = 0;
196*53ee8cc1Swenshuai.xi static MS_U16 _RaspNumEventsTotal=0;
197*53ee8cc1Swenshuai.xi static MS_U16 _RaspReadIdx = 0;
198*53ee8cc1Swenshuai.xi MS_U16 _RaspEventHighMark;
199*53ee8cc1Swenshuai.xi MS_U32 _RaspTriggerExecutor;
200*53ee8cc1Swenshuai.xi 
201*53ee8cc1Swenshuai.xi 
202*53ee8cc1Swenshuai.xi //static MS_U16 EventLog = 0;
203*53ee8cc1Swenshuai.xi //static MS_U32 EventDescr = 0;
204*53ee8cc1Swenshuai.xi static MS_U16 EventNumber = 0;
205*53ee8cc1Swenshuai.xi static MS_U16 EventCurIndex[RASP_NUM];
206*53ee8cc1Swenshuai.xi static MS_U16 EventReadIndex[RASP_NUM];
207*53ee8cc1Swenshuai.xi static MS_U16 EventTmpIndex[RASP_NUM];
208*53ee8cc1Swenshuai.xi 
209*53ee8cc1Swenshuai.xi //static MS_U16 EventWriteIndex = 0;
210*53ee8cc1Swenshuai.xi 
211*53ee8cc1Swenshuai.xi static NDS_RASP_EVENT _EventDataArray[RASP_NUM][RASP_EVENT_FIFO_DEPTH];
212*53ee8cc1Swenshuai.xi 
213*53ee8cc1Swenshuai.xi //static MS_U16 EventNumber2 = 0;
214*53ee8cc1Swenshuai.xi //static MS_U32 _EventDataArray2[6];
215*53ee8cc1Swenshuai.xi 
216*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
217*53ee8cc1Swenshuai.xi //  Driver Compiler Option
218*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
219*53ee8cc1Swenshuai.xi 
220*53ee8cc1Swenshuai.xi // Safe Mode Configuration
221*53ee8cc1Swenshuai.xi // ============================================
222*53ee8cc1Swenshuai.xi //              ISR_SAFE            TASK_SAFE
223*53ee8cc1Swenshuai.xi //  ISR_SAFE    Int,Reg             Int,Reg,Task
224*53ee8cc1Swenshuai.xi //  TASK_SAFE   Int,Reg,Task        Mutex,Reg,Task
225*53ee8cc1Swenshuai.xi //
226*53ee8cc1Swenshuai.xi #define _RASP_SetEvent(flag)                            MsOS_SetEvent(_s32RASPEventId, (flag))
227*53ee8cc1Swenshuai.xi #define _RASP_SetSecRdyId(eng, flag)                    MsOS_SetEvent(_s32RASPSecRdyId[(eng)], (flag))
228*53ee8cc1Swenshuai.xi #define _RASP_SetSecOvfId(eng, flag)                    MsOS_SetEvent(_s32RASPSecOvfId[(eng)], (flag))
229*53ee8cc1Swenshuai.xi 
230*53ee8cc1Swenshuai.xi #define _RASP_GetEvent(events, flag, opt, timeout)      MsOS_WaitEvent(_s32RASPEventId, (flag), &(events), (opt), (timeout))
231*53ee8cc1Swenshuai.xi #define _RASP_GetSecRdyId(eng, flag, events, opt)       MsOS_WaitEvent(_s32RASPSecRdyId[(eng)], (flag), &(events), (opt), 0)
232*53ee8cc1Swenshuai.xi #define _RASP_GetSecOvfId(eng, flag, events, opt)       MsOS_WaitEvent(_s32RASPSecOvfId[(eng)], (flag), &(events), (opt), 0)
233*53ee8cc1Swenshuai.xi 
234*53ee8cc1Swenshuai.xi #define _RASP_SetSecCrcId(eng, flag)                    MsOS_SetEvent(_s32RASPSecCrcId[(eng)], (flag))
235*53ee8cc1Swenshuai.xi #define _RASP_GetSecCrcId(eng, flag, events, opt)       MsOS_WaitEvent(_s32RASPSecCrcId[(eng)], (flag), &(events), (opt), 0)
236*53ee8cc1Swenshuai.xi 
237*53ee8cc1Swenshuai.xi #define _RASP_SetFltDisableId(eng, flag)                MsOS_SetEvent(_s32RASPFltDisableId[(eng)], (flag))
238*53ee8cc1Swenshuai.xi #define _RASP_GetFltDisableId(eng, flag, events, opt)   MsOS_WaitEvent(_s32RASPFltDisableId[(eng)], (flag), &(events), (opt), 0)
239*53ee8cc1Swenshuai.xi 
240*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
241*53ee8cc1Swenshuai.xi //  Local Defines
242*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
243*53ee8cc1Swenshuai.xi 
244*53ee8cc1Swenshuai.xi #if defined (MSOS_TYPE_NOS)
245*53ee8cc1Swenshuai.xi #define _RASP_ENTRY()
246*53ee8cc1Swenshuai.xi #define _RASP_RETURN(_ret) {return _ret;}
247*53ee8cc1Swenshuai.xi #define _RASP_CHECK(idx)
248*53ee8cc1Swenshuai.xi #else
249*53ee8cc1Swenshuai.xi #define _RASP_ENTRY()       if (!MsOS_ObtainMutex(_prasp_res->_s32RASPMutexId, MSOS_WAIT_FOREVER))      \
250*53ee8cc1Swenshuai.xi                             {                                                               \
251*53ee8cc1Swenshuai.xi                                 _prasp_res->_u32LastErr = DRVRASP_FUNC_ERROR;                           \
252*53ee8cc1Swenshuai.xi                                 printf("_RASP_ENTRY return ERROR\n");                       \
253*53ee8cc1Swenshuai.xi                                 return DRVRASP_FUNC_ERROR;                                  \
254*53ee8cc1Swenshuai.xi                             }                                                               \
255*53ee8cc1Swenshuai.xi                             if (_prasp_res->_bSuspend)                                                  \
256*53ee8cc1Swenshuai.xi                             {                                                               \
257*53ee8cc1Swenshuai.xi                                 _RASP_RETURN(FALSE);                                 \
258*53ee8cc1Swenshuai.xi                             }
259*53ee8cc1Swenshuai.xi 
260*53ee8cc1Swenshuai.xi #define _RASP_RETURN(_ret)  if(MsOS_ReleaseMutex(_prasp_res->_s32RASPMutexId)) {return _ret;}           \
261*53ee8cc1Swenshuai.xi                             else                                                            \
262*53ee8cc1Swenshuai.xi                             {                                                               \
263*53ee8cc1Swenshuai.xi                                 _prasp_res->_u32LastErr = DRVRASP_FUNC_ERROR;                           \
264*53ee8cc1Swenshuai.xi                                 return DRVRASP_FUNC_ERROR;                                  \
265*53ee8cc1Swenshuai.xi                             }
266*53ee8cc1Swenshuai.xi 
267*53ee8cc1Swenshuai.xi #define _RASP_CHECK(idx)    if( (MS_U32)idx >= (MS_U32)RASP_NUM ) \
268*53ee8cc1Swenshuai.xi                             { printf("[RASP][ERR] Rasp Engine [%d] not exist ! \n",idx);   \
269*53ee8cc1Swenshuai.xi                              _RASP_RETURN(FALSE); }
270*53ee8cc1Swenshuai.xi #endif
271*53ee8cc1Swenshuai.xi 
272*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
273*53ee8cc1Swenshuai.xi //  Local variable
274*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
275*53ee8cc1Swenshuai.xi 
276*53ee8cc1Swenshuai.xi typedef struct _DrvRASP_State
277*53ee8cc1Swenshuai.xi {
278*53ee8cc1Swenshuai.xi     MS_U32          _RASP_init;
279*53ee8cc1Swenshuai.xi     DrvRASP_FltState _RASP_FltState;
280*53ee8cc1Swenshuai.xi     DrvRASP_FltState _RASP_ECMFltState;
281*53ee8cc1Swenshuai.xi } DrvRASP_State;
282*53ee8cc1Swenshuai.xi 
283*53ee8cc1Swenshuai.xi typedef struct _RASP_RESOURCE_PRIVATE
284*53ee8cc1Swenshuai.xi {
285*53ee8cc1Swenshuai.xi     MS_S32                      _s32RASPMutexId;
286*53ee8cc1Swenshuai.xi     MS_U32                      _u32LastErr;
287*53ee8cc1Swenshuai.xi     MS_BOOL                     _bSuspend;
288*53ee8cc1Swenshuai.xi 
289*53ee8cc1Swenshuai.xi     DrvRASP_State               _RASPState[RASP_NUM][RASP_PIDFLT_NUM_ALL];
290*53ee8cc1Swenshuai.xi 
291*53ee8cc1Swenshuai.xi     DrvRASP_Event               _RASPEvtNotify[RASP_NUM];
292*53ee8cc1Swenshuai.xi     P_DrvRASP_EvtCallback       _RASPCallback[RASP_NUM];
293*53ee8cc1Swenshuai.xi 	P_DrvRASP_EventCB			_RASPEventCB[RASP_NUM];	//event array callback
294*53ee8cc1Swenshuai.xi 
295*53ee8cc1Swenshuai.xi     MS_BOOL                     _bRASPInitReady;
296*53ee8cc1Swenshuai.xi }RASP_RESOURCE_PRIVATE;
297*53ee8cc1Swenshuai.xi 
298*53ee8cc1Swenshuai.xi 
299*53ee8cc1Swenshuai.xi //static MSIF_Version _drv_RASP_version = {
300*53ee8cc1Swenshuai.xi //    .DDI = { RASP_DRV_VERSION, },
301*53ee8cc1Swenshuai.xi //};
302*53ee8cc1Swenshuai.xi 
303*53ee8cc1Swenshuai.xi 
304*53ee8cc1Swenshuai.xi static RASP_RESOURCE_PRIVATE _rasp_res = {
305*53ee8cc1Swenshuai.xi     ._s32RASPMutexId                        = -1,
306*53ee8cc1Swenshuai.xi     ._u32LastErr                            = TRUE,
307*53ee8cc1Swenshuai.xi     ._bSuspend                              = FALSE,
308*53ee8cc1Swenshuai.xi     ._bRASPInitReady                        = FALSE,
309*53ee8cc1Swenshuai.xi };
310*53ee8cc1Swenshuai.xi 
311*53ee8cc1Swenshuai.xi static RASP_RESOURCE_PRIVATE*    _prasp_res = &_rasp_res;
312*53ee8cc1Swenshuai.xi static P_NDSRASP_Callback        _ndsrasp_cb = NULL;
313*53ee8cc1Swenshuai.xi 
314*53ee8cc1Swenshuai.xi static MS_PHYADDR _rasp_writeptr = 0;
315*53ee8cc1Swenshuai.xi static MS_PHYADDR _rasp_payloadptr = 0;
316*53ee8cc1Swenshuai.xi 
317*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
318*53ee8cc1Swenshuai.xi //  Forward declaration
319*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
320*53ee8cc1Swenshuai.xi 
321*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
_NDS_RASP_Isr(int irq,void * dev_id)322*53ee8cc1Swenshuai.xi irqreturn_t _NDS_RASP_Isr(int irq, void *dev_id)
323*53ee8cc1Swenshuai.xi #else
324*53ee8cc1Swenshuai.xi void _NDS_RASP_Isr(InterruptNum eIntNum)
325*53ee8cc1Swenshuai.xi #endif
326*53ee8cc1Swenshuai.xi {
327*53ee8cc1Swenshuai.xi #if 0
328*53ee8cc1Swenshuai.xi     MS_U8               u8EcmReg;
329*53ee8cc1Swenshuai.xi     MS_U8               ecm_polarity;
330*53ee8cc1Swenshuai.xi     MS_U32              i;
331*53ee8cc1Swenshuai.xi     MS_U32              u32OvfEvents = 0;
332*53ee8cc1Swenshuai.xi #endif
333*53ee8cc1Swenshuai.xi     MS_U32 IntStatus[RASP_NUM];
334*53ee8cc1Swenshuai.xi     MS_U16 i;
335*53ee8cc1Swenshuai.xi     MS_U32 RaspID;
336*53ee8cc1Swenshuai.xi 
337*53ee8cc1Swenshuai.xi     //MsOS_DisableInterrupt(E_INT_IRQ_RASP);
338*53ee8cc1Swenshuai.xi 	//printf("____NDS_RASP_Isr____\n");
339*53ee8cc1Swenshuai.xi 
340*53ee8cc1Swenshuai.xi     for( RaspID=0; RaspID<RASP_NUM; RaspID++)
341*53ee8cc1Swenshuai.xi     {
342*53ee8cc1Swenshuai.xi         IntStatus[RaspID] = (MS_U32)HAL_NDSRASP_INT_GetHW(RaspID);
343*53ee8cc1Swenshuai.xi 
344*53ee8cc1Swenshuai.xi         if(IntStatus[RaspID] == 0)
345*53ee8cc1Swenshuai.xi             continue;
346*53ee8cc1Swenshuai.xi 
347*53ee8cc1Swenshuai.xi         if(IntStatus[RaspID] & RASP_INT_STR2MIU)
348*53ee8cc1Swenshuai.xi         {
349*53ee8cc1Swenshuai.xi             _rasp_writeptr = HAL_NDSRASP_GetWritePtr(RaspID);
350*53ee8cc1Swenshuai.xi         }
351*53ee8cc1Swenshuai.xi 
352*53ee8cc1Swenshuai.xi         if( IntStatus[RaspID] & (RASP_INT_TIME_WATER_MARK | RASP_INT_EVENT_WATER_MARK) )
353*53ee8cc1Swenshuai.xi         {
354*53ee8cc1Swenshuai.xi             EventNumber = HAL_NDSRASP_EVENT_GetEventNum(RaspID);//reg_RASP0_event_log_ctrl_status
355*53ee8cc1Swenshuai.xi 
356*53ee8cc1Swenshuai.xi 			//Ring queue push
357*53ee8cc1Swenshuai.xi             if(EventCurIndex[RaspID] + EventNumber < RASP_EVENT_FIFO_DEPTH)
358*53ee8cc1Swenshuai.xi             {
359*53ee8cc1Swenshuai.xi                 for(i = EventCurIndex[RaspID] + 1; i <= (EventCurIndex[RaspID] + EventNumber); i++)
360*53ee8cc1Swenshuai.xi                 	{HAL_NDSRASP_EVENT_GetEventDescriptor(RaspID, (MS_U32*)&_EventDataArray[RaspID][i], 5);}
361*53ee8cc1Swenshuai.xi                 EventCurIndex[RaspID] = EventCurIndex[RaspID] + EventNumber;
362*53ee8cc1Swenshuai.xi             }
363*53ee8cc1Swenshuai.xi             else
364*53ee8cc1Swenshuai.xi             {
365*53ee8cc1Swenshuai.xi                 for(i = EventCurIndex[RaspID] + 1; i < RASP_EVENT_FIFO_DEPTH; i++)
366*53ee8cc1Swenshuai.xi                 	{HAL_NDSRASP_EVENT_GetEventDescriptor(RaspID, (MS_U32*)&_EventDataArray[RaspID][i], 5);}
367*53ee8cc1Swenshuai.xi                 for(i = 0; i <= (EventCurIndex[RaspID] + EventNumber - RASP_EVENT_FIFO_DEPTH); i++)
368*53ee8cc1Swenshuai.xi                 	{HAL_NDSRASP_EVENT_GetEventDescriptor(RaspID, (MS_U32*)&_EventDataArray[RaspID][i], 5);}
369*53ee8cc1Swenshuai.xi                 EventCurIndex[RaspID] = (EventCurIndex[RaspID] + EventNumber - RASP_EVENT_FIFO_DEPTH);
370*53ee8cc1Swenshuai.xi             }
371*53ee8cc1Swenshuai.xi 
372*53ee8cc1Swenshuai.xi 			EventTmpIndex[RaspID] = EventCurIndex[RaspID];
373*53ee8cc1Swenshuai.xi 			printf("EventCurIndex=%x EventNumber=%x\n", (MS_U32)EventCurIndex[RaspID], (MS_U32)EventNumber);
374*53ee8cc1Swenshuai.xi 
375*53ee8cc1Swenshuai.xi 		}
376*53ee8cc1Swenshuai.xi 
377*53ee8cc1Swenshuai.xi         if(IntStatus[RaspID] & RASP_INT_EFRAME_RD_OVF)
378*53ee8cc1Swenshuai.xi         {
379*53ee8cc1Swenshuai.xi         }
380*53ee8cc1Swenshuai.xi 
381*53ee8cc1Swenshuai.xi         if(IntStatus[RaspID] & RASP_INT_EFRAME_WT_OVF)
382*53ee8cc1Swenshuai.xi         {
383*53ee8cc1Swenshuai.xi         }
384*53ee8cc1Swenshuai.xi 
385*53ee8cc1Swenshuai.xi         if(IntStatus[RaspID] & RASP_INT_PAYLD2MIU)
386*53ee8cc1Swenshuai.xi         {
387*53ee8cc1Swenshuai.xi             _rasp_payloadptr = HAL_NDSRASP_GetPayloadWritePtr(RaspID);
388*53ee8cc1Swenshuai.xi         }
389*53ee8cc1Swenshuai.xi 
390*53ee8cc1Swenshuai.xi         if (IntStatus[RaspID] & RASP_INT_ECM_PKT_RDY) // ECM Packet Ready
391*53ee8cc1Swenshuai.xi         {
392*53ee8cc1Swenshuai.xi             EcmPktNumer = HAL_NDSRASP_GetEcmPktNum(RaspID);
393*53ee8cc1Swenshuai.xi 			printf("ECM Packet Number is [0x%x]\n", EcmPktNumer);
394*53ee8cc1Swenshuai.xi 
395*53ee8cc1Swenshuai.xi 			//printf("ECM Interrupt state = %X\n", HAL_NDSRASP_SetECM_GetHW(RaspID));
396*53ee8cc1Swenshuai.xi 			HAL_NDSRASP_SetECM_ResetHW(RaspID, 0xFFFF);
397*53ee8cc1Swenshuai.xi 
398*53ee8cc1Swenshuai.xi 			EcmWritePtr = HAL_NDSRASP_GetECMWritePtr(RaspID);
399*53ee8cc1Swenshuai.xi 			printf("ECM EcmWritePtr is [0x%x]\n", EcmWritePtr);
400*53ee8cc1Swenshuai.xi 
401*53ee8cc1Swenshuai.xi         	#if 0	//TODO
402*53ee8cc1Swenshuai.xi             EcmWritePtr = HAL_NDSRASP_GetECMWritePtr(EngId);
403*53ee8cc1Swenshuai.xi             EcmTimeStamp= HAL_NDSRASP_GetECMTimeStamp(EngId);
404*53ee8cc1Swenshuai.xi             //NDS_RASP_DBG("HAL_NDSRASP_SetECM_GetHW = %X\n", HAL_NDSRASP_SetECM_GetHW(0));
405*53ee8cc1Swenshuai.xi 
406*53ee8cc1Swenshuai.xi             EcmIntStatus = HAL_NDSRASP_SetECM_GetHW(EngId);
407*53ee8cc1Swenshuai.xi             //HAL_NDSRASP_SetECM_ResetHW(EngId, EcmIntStatus);
408*53ee8cc1Swenshuai.xi 
409*53ee8cc1Swenshuai.xi 
410*53ee8cc1Swenshuai.xi             if (pEcmData[0] != 0x47)
411*53ee8cc1Swenshuai.xi             {
412*53ee8cc1Swenshuai.xi                 continue; //_NDS_ASSERT_;
413*53ee8cc1Swenshuai.xi             }
414*53ee8cc1Swenshuai.xi             if (pEcmData[5] == 0x80)
415*53ee8cc1Swenshuai.xi             {
416*53ee8cc1Swenshuai.xi                 ecm_polarity = 0; // EVEN
417*53ee8cc1Swenshuai.xi             }
418*53ee8cc1Swenshuai.xi             else if (pEcmData[5] == 0x81)
419*53ee8cc1Swenshuai.xi             {
420*53ee8cc1Swenshuai.xi                 ecm_polarity = 1; // ODD
421*53ee8cc1Swenshuai.xi             }
422*53ee8cc1Swenshuai.xi             else
423*53ee8cc1Swenshuai.xi             {
424*53ee8cc1Swenshuai.xi                 NDS_ASSERT(FALSE, , "[%s]-[%d]\n", __FUNCTION__, __LINE__);
425*53ee8cc1Swenshuai.xi             }
426*53ee8cc1Swenshuai.xi 
427*53ee8cc1Swenshuai.xi 
428*53ee8cc1Swenshuai.xi             //need to copy to ecm buffer to keep buffer for future usage.....
429*53ee8cc1Swenshuai.xi             //memcpy(_u8RaspEcmBuf,
430*53ee8cc1Swenshuai.xi         	#endif
431*53ee8cc1Swenshuai.xi         }
432*53ee8cc1Swenshuai.xi 
433*53ee8cc1Swenshuai.xi         HAL_NDSRASP_INT_ClrHW(RaspID , IntStatus[RaspID]);
434*53ee8cc1Swenshuai.xi         //HAL_NDSRASP_INT_ClrHW(RaspID , 0x0);
435*53ee8cc1Swenshuai.xi         //printf("int status after clear = %x",(MS_U32)HAL_NDSRASP_INT_GetHW(RaspID));
436*53ee8cc1Swenshuai.xi         //HAL_NDSRASP_INT_Enable(RaspID , 0xffff);
437*53ee8cc1Swenshuai.xi 
438*53ee8cc1Swenshuai.xi 		MsOS_SetEvent(_nds_rasp_eventid, RaspID<<16 | (IntStatus[RaspID] ) );
439*53ee8cc1Swenshuai.xi     }
440*53ee8cc1Swenshuai.xi 
441*53ee8cc1Swenshuai.xi 
442*53ee8cc1Swenshuai.xi     if(FALSE == HAL_EMMFLT_GetIntMode())
443*53ee8cc1Swenshuai.xi     {
444*53ee8cc1Swenshuai.xi         MsOS_EnableInterrupt(E_INT_IRQ_RASP);
445*53ee8cc1Swenshuai.xi     }
446*53ee8cc1Swenshuai.xi 
447*53ee8cc1Swenshuai.xi }
448*53ee8cc1Swenshuai.xi 
_NDS_RASP_IsrTask(void)449*53ee8cc1Swenshuai.xi static void _NDS_RASP_IsrTask(void)
450*53ee8cc1Swenshuai.xi {
451*53ee8cc1Swenshuai.xi     //MS_U32  i ,p ,hi_count ,lo_count;;
452*53ee8cc1Swenshuai.xi     MS_U32 u32Events;
453*53ee8cc1Swenshuai.xi     //MS_U32 DataArray[5];
454*53ee8cc1Swenshuai.xi     MS_U8  RaspID;
455*53ee8cc1Swenshuai.xi     NDSRaspCallBack_t cb_info;
456*53ee8cc1Swenshuai.xi 	P_DrvRASP_EventCB _Event_CallBackFun;
457*53ee8cc1Swenshuai.xi 	MS_U16 u16EventQueued=0;
458*53ee8cc1Swenshuai.xi 
459*53ee8cc1Swenshuai.xi     printf("ISR task\n");
460*53ee8cc1Swenshuai.xi 
461*53ee8cc1Swenshuai.xi     while(1)
462*53ee8cc1Swenshuai.xi     {
463*53ee8cc1Swenshuai.xi         MsOS_WaitEvent(_nds_rasp_eventid, NDS_RASP_EVENT_ALL, &u32Events, E_OR_CLEAR, MSOS_WAIT_FOREVER);
464*53ee8cc1Swenshuai.xi 
465*53ee8cc1Swenshuai.xi         RaspID = ((u32Events>>16) & 0xff);
466*53ee8cc1Swenshuai.xi         printf("[RASP]_NDS_RASP_IsrTask!!----- u32Events = 0x%x, ID = %x \n",u32Events, RaspID);
467*53ee8cc1Swenshuai.xi         //printf("EventLog = %x, EventDescr = %x, EventNumber = %x\n",EventLog, EventDescr, EventNumber);
468*53ee8cc1Swenshuai.xi 
469*53ee8cc1Swenshuai.xi         if(RaspID >= RASP_NUM)
470*53ee8cc1Swenshuai.xi         {
471*53ee8cc1Swenshuai.xi             DRVRASP_DBG(RASP_DBGLV_ERR,"invalid Rasp ID\n");
472*53ee8cc1Swenshuai.xi             continue;
473*53ee8cc1Swenshuai.xi         }
474*53ee8cc1Swenshuai.xi 
475*53ee8cc1Swenshuai.xi 		_Event_CallBackFun = _prasp_res->_RASPEventCB[RaspID];
476*53ee8cc1Swenshuai.xi 
477*53ee8cc1Swenshuai.xi         memset(&cb_info, 0x0, sizeof(cb_info));
478*53ee8cc1Swenshuai.xi 
479*53ee8cc1Swenshuai.xi         if(u32Events & RASP_INT_STR2MIU)
480*53ee8cc1Swenshuai.xi         {
481*53ee8cc1Swenshuai.xi             printf("Str2MIU INT, _rasp_writeptr = %x\n",_rasp_writeptr);
482*53ee8cc1Swenshuai.xi             cb_info.eEvent = NDSRASP_CB_STR2RAM;
483*53ee8cc1Swenshuai.xi             cb_info.index  = 1;
484*53ee8cc1Swenshuai.xi             cb_info.write_ptr = _rasp_writeptr;
485*53ee8cc1Swenshuai.xi             if(_ndsrasp_cb != NULL)
486*53ee8cc1Swenshuai.xi             {
487*53ee8cc1Swenshuai.xi                 _ndsrasp_cb(RaspID, &cb_info);
488*53ee8cc1Swenshuai.xi             }
489*53ee8cc1Swenshuai.xi         }
490*53ee8cc1Swenshuai.xi 
491*53ee8cc1Swenshuai.xi         if(u32Events & RASP_INT_PVR2MIU)
492*53ee8cc1Swenshuai.xi         {
493*53ee8cc1Swenshuai.xi             printf("PVR2MIU INT\n");
494*53ee8cc1Swenshuai.xi         }
495*53ee8cc1Swenshuai.xi 
496*53ee8cc1Swenshuai.xi         if(u32Events & RASP_INT_PAYLD2MIU)
497*53ee8cc1Swenshuai.xi         {
498*53ee8cc1Swenshuai.xi             printf("Payload INT, _rasp_payloadptr = %x\n",_rasp_payloadptr);
499*53ee8cc1Swenshuai.xi             cb_info.eEvent = NDSRASP_CB_PAYLOAD2RAM;
500*53ee8cc1Swenshuai.xi             cb_info.index  = 1;
501*53ee8cc1Swenshuai.xi             cb_info.write_ptr = _rasp_payloadptr;
502*53ee8cc1Swenshuai.xi             if(_ndsrasp_cb != NULL)
503*53ee8cc1Swenshuai.xi             {
504*53ee8cc1Swenshuai.xi                 _ndsrasp_cb(RaspID, &cb_info);
505*53ee8cc1Swenshuai.xi             }
506*53ee8cc1Swenshuai.xi         }
507*53ee8cc1Swenshuai.xi 
508*53ee8cc1Swenshuai.xi         if( u32Events & (RASP_INT_TIME_WATER_MARK | RASP_INT_EVENT_WATER_MARK) )
509*53ee8cc1Swenshuai.xi         {
510*53ee8cc1Swenshuai.xi             printf("Event TIME/EVENT WATER MARK Int\n");
511*53ee8cc1Swenshuai.xi 			printf("EventReadIndex now [0x%x]\n", (MS_U32)EventReadIndex[RaspID]);
512*53ee8cc1Swenshuai.xi 
513*53ee8cc1Swenshuai.xi 			if (EventReadIndex[RaspID] < EventTmpIndex[RaspID])
514*53ee8cc1Swenshuai.xi 			{
515*53ee8cc1Swenshuai.xi 				u16EventQueued = (MS_U16)(EventTmpIndex[RaspID] - EventReadIndex[RaspID]);
516*53ee8cc1Swenshuai.xi 			}
517*53ee8cc1Swenshuai.xi 			else if (EventReadIndex[RaspID] > EventTmpIndex[RaspID])
518*53ee8cc1Swenshuai.xi 			{
519*53ee8cc1Swenshuai.xi 				u16EventQueued = (MS_U16)(RASP_EVENT_FIFO_DEPTH - EventReadIndex[RaspID] + EventTmpIndex[RaspID]);
520*53ee8cc1Swenshuai.xi 			}
521*53ee8cc1Swenshuai.xi 			else
522*53ee8cc1Swenshuai.xi 			{	printf("Event SW FIFO is not updated\n");	}
523*53ee8cc1Swenshuai.xi 			printf("u16EventQueued [0x%x]\n", (MS_U32)u16EventQueued);
524*53ee8cc1Swenshuai.xi 
525*53ee8cc1Swenshuai.xi 			EventReadIndex[RaspID] ++;
526*53ee8cc1Swenshuai.xi             if(NULL != _Event_CallBackFun)
527*53ee8cc1Swenshuai.xi             {
528*53ee8cc1Swenshuai.xi     			_Event_CallBackFun(RaspID, _EventDataArray[RaspID], u16EventQueued, EventReadIndex[RaspID]);
529*53ee8cc1Swenshuai.xi             }
530*53ee8cc1Swenshuai.xi 			EventReadIndex[RaspID] += (u16EventQueued-1);
531*53ee8cc1Swenshuai.xi 
532*53ee8cc1Swenshuai.xi 			printf("EventReadIndex then [0x%x]\n", (MS_U32)EventReadIndex[RaspID]);
533*53ee8cc1Swenshuai.xi 			#if 0 //TODO
534*53ee8cc1Swenshuai.xi 			for(i=0;i<EventNumber;i++)
535*53ee8cc1Swenshuai.xi             {
536*53ee8cc1Swenshuai.xi                 printf("EventNumber = %x\n",i);
537*53ee8cc1Swenshuai.xi                 printf("EventDescr = %x, PktPID = %x, PktNum = %x, PktTimer = %x, PktPCR = %x) \n",_EventDataArray[RaspID][i].Event_Descriptor, \
538*53ee8cc1Swenshuai.xi                     _EventDataArray[RaspID][i].Pid, _EventDataArray[RaspID][i].PacketNum,_EventDataArray[RaspID][i].Timer,_EventDataArray[RaspID][i].PCR);
539*53ee8cc1Swenshuai.xi             }
540*53ee8cc1Swenshuai.xi 			#endif
541*53ee8cc1Swenshuai.xi 
542*53ee8cc1Swenshuai.xi         }
543*53ee8cc1Swenshuai.xi 
544*53ee8cc1Swenshuai.xi         if(u32Events & RASP_INT_ECM2MIU)
545*53ee8cc1Swenshuai.xi         {
546*53ee8cc1Swenshuai.xi             printf("ECM 2 MIU Int\n");
547*53ee8cc1Swenshuai.xi         }
548*53ee8cc1Swenshuai.xi 
549*53ee8cc1Swenshuai.xi         if(u32Events & RASP_INT_ECM_PKT_RDY)
550*53ee8cc1Swenshuai.xi         {
551*53ee8cc1Swenshuai.xi             printf("ECM Packet Ready, EcmPktNumer = %x, EcmWritePtr = %x, EcmTimeStamp = %x, EcmIntStatus = %x\n",EcmPktNumer, EcmWritePtr, EcmTimeStamp, EcmIntStatus);
552*53ee8cc1Swenshuai.xi         }
553*53ee8cc1Swenshuai.xi 
554*53ee8cc1Swenshuai.xi         if(u32Events & RASP_INT_EFRAME_RD_OVF)
555*53ee8cc1Swenshuai.xi         {
556*53ee8cc1Swenshuai.xi             printf("RASP_INT_EFRAME_RD_OVF \n");
557*53ee8cc1Swenshuai.xi         }
558*53ee8cc1Swenshuai.xi 
559*53ee8cc1Swenshuai.xi         if(u32Events & RASP_INT_EFRAME_WT_OVF)
560*53ee8cc1Swenshuai.xi         {
561*53ee8cc1Swenshuai.xi             printf("RASP_INT_EFRAME_WT_OVF \n");
562*53ee8cc1Swenshuai.xi         }
563*53ee8cc1Swenshuai.xi 
564*53ee8cc1Swenshuai.xi         MsOS_DelayTask(1);
565*53ee8cc1Swenshuai.xi 
566*53ee8cc1Swenshuai.xi     }// while(1)
567*53ee8cc1Swenshuai.xi }
568*53ee8cc1Swenshuai.xi 
569*53ee8cc1Swenshuai.xi #if 0	//TEST
570*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
571*53ee8cc1Swenshuai.xi static irqreturn_t _NDS_RASP_Isr2(int irq, void *dev_id)
572*53ee8cc1Swenshuai.xi #else
573*53ee8cc1Swenshuai.xi static void _NDS_RASP_Isr2(InterruptNum eIntNum)
574*53ee8cc1Swenshuai.xi #endif
575*53ee8cc1Swenshuai.xi 
576*53ee8cc1Swenshuai.xi {
577*53ee8cc1Swenshuai.xi #if 0
578*53ee8cc1Swenshuai.xi     MS_U8               u8EcmReg;
579*53ee8cc1Swenshuai.xi     MS_U8               ecm_polarity;
580*53ee8cc1Swenshuai.xi     MS_U32              i;
581*53ee8cc1Swenshuai.xi     MS_U32              u32OvfEvents = 0;
582*53ee8cc1Swenshuai.xi #endif
583*53ee8cc1Swenshuai.xi     MS_U32 IntStatus;
584*53ee8cc1Swenshuai.xi     MS_U32 i;
585*53ee8cc1Swenshuai.xi     MS_U32 RaspID=0;
586*53ee8cc1Swenshuai.xi 
587*53ee8cc1Swenshuai.xi     MsOS_DisableInterrupt(E_INT_IRQ_RASP);
588*53ee8cc1Swenshuai.xi 
589*53ee8cc1Swenshuai.xi 
590*53ee8cc1Swenshuai.xi 
591*53ee8cc1Swenshuai.xi         IntStatus = (MS_U32)HAL_NDSRASP_INT_GetHW(RaspID);
592*53ee8cc1Swenshuai.xi 		printf("____Isr #2____[%08X]\n", IntStatus);
593*53ee8cc1Swenshuai.xi 
594*53ee8cc1Swenshuai.xi         if (IntStatus & RASP_INT_ECM_PKT_RDY)
595*53ee8cc1Swenshuai.xi         {
596*53ee8cc1Swenshuai.xi             //NDS_RASP_DBG("RASP_INT_ECM_PKT_RDY\n");
597*53ee8cc1Swenshuai.xi             EcmPktNumer = HAL_NDSRASP_GetEcmPktNum(RaspID);
598*53ee8cc1Swenshuai.xi 			printf("ECM Packet Number is [0x%x]\n", EcmPktNumer);
599*53ee8cc1Swenshuai.xi 			//printf("ECM Interrupt state = %X\n", HAL_NDSRASP_SetECM_GetHW(RaspID));
600*53ee8cc1Swenshuai.xi 			HAL_NDSRASP_SetECM_ResetHW(RaspID, 0xFFFF);
601*53ee8cc1Swenshuai.xi 			//EcmWritePtr = HAL_NDSRASP_GetECMWritePtr(RaspID);
602*53ee8cc1Swenshuai.xi 			//printf("ECM EcmWritePtr is [0x%x]\n", EcmWritePtr);
603*53ee8cc1Swenshuai.xi 
604*53ee8cc1Swenshuai.xi 			MsOS_ReleaseSemaphore(_nds_rasp_eventid);
605*53ee8cc1Swenshuai.xi         #if 0
606*53ee8cc1Swenshuai.xi             EcmWritePtr = HAL_NDSRASP_GetECMWritePtr(EngId);
607*53ee8cc1Swenshuai.xi             EcmTimeStamp= HAL_NDSRASP_GetECMTimeStamp(EngId);
608*53ee8cc1Swenshuai.xi             //NDS_RASP_DBG("HAL_NDSRASP_SetECM_GetHW = %X\n", HAL_NDSRASP_SetECM_GetHW(0));
609*53ee8cc1Swenshuai.xi 
610*53ee8cc1Swenshuai.xi             EcmIntStatus = HAL_NDSRASP_SetECM_GetHW(EngId);
611*53ee8cc1Swenshuai.xi             //HAL_NDSRASP_SetECM_ResetHW(EngId, EcmIntStatus);
612*53ee8cc1Swenshuai.xi 
613*53ee8cc1Swenshuai.xi 
614*53ee8cc1Swenshuai.xi             if (pEcmData[0] != 0x47)
615*53ee8cc1Swenshuai.xi             {
616*53ee8cc1Swenshuai.xi                 continue; //_NDS_ASSERT_;
617*53ee8cc1Swenshuai.xi             }
618*53ee8cc1Swenshuai.xi             if (pEcmData[5] == 0x80)
619*53ee8cc1Swenshuai.xi             {
620*53ee8cc1Swenshuai.xi                 ecm_polarity = 0; // EVEN
621*53ee8cc1Swenshuai.xi             }
622*53ee8cc1Swenshuai.xi             else if (pEcmData[5] == 0x81)
623*53ee8cc1Swenshuai.xi             {
624*53ee8cc1Swenshuai.xi                 ecm_polarity = 1; // ODD
625*53ee8cc1Swenshuai.xi             }
626*53ee8cc1Swenshuai.xi             else
627*53ee8cc1Swenshuai.xi             {
628*53ee8cc1Swenshuai.xi                 NDS_ASSERT(FALSE, , "[%s]-[%d]\n", __FUNCTION__, __LINE__);
629*53ee8cc1Swenshuai.xi             }
630*53ee8cc1Swenshuai.xi 
631*53ee8cc1Swenshuai.xi 
632*53ee8cc1Swenshuai.xi             //need to copy to ecm buffer to keep buffer for future usage.....
633*53ee8cc1Swenshuai.xi             //memcpy(_u8RaspEcmBuf,
634*53ee8cc1Swenshuai.xi         #endif
635*53ee8cc1Swenshuai.xi         }
636*53ee8cc1Swenshuai.xi 
637*53ee8cc1Swenshuai.xi 		if(IntStatus & RASP_INT_EFRAME_RD_OVF)
638*53ee8cc1Swenshuai.xi         {
639*53ee8cc1Swenshuai.xi         }
640*53ee8cc1Swenshuai.xi 
641*53ee8cc1Swenshuai.xi         if(IntStatus & RASP_INT_EFRAME_WT_OVF)
642*53ee8cc1Swenshuai.xi         {
643*53ee8cc1Swenshuai.xi         }
644*53ee8cc1Swenshuai.xi 
645*53ee8cc1Swenshuai.xi         if(IntStatus & RASP_INT_PAYLD2MIU)
646*53ee8cc1Swenshuai.xi         {
647*53ee8cc1Swenshuai.xi             _rasp_payloadptr = HAL_NDSRASP_GetPayloadWritePtr(RaspID);
648*53ee8cc1Swenshuai.xi         }
649*53ee8cc1Swenshuai.xi 		if(IntStatus & RASP_INT_EVENT_WATER_MARK)
650*53ee8cc1Swenshuai.xi 			;
651*53ee8cc1Swenshuai.xi 		if(IntStatus & RASP_INT_TIME_WATER_MARK)
652*53ee8cc1Swenshuai.xi         	;
653*53ee8cc1Swenshuai.xi 		if(IntStatus & RASP_INT_STR2MIU)
654*53ee8cc1Swenshuai.xi         {
655*53ee8cc1Swenshuai.xi             _rasp_writeptr = HAL_NDSRASP_GetWritePtr(RaspID);
656*53ee8cc1Swenshuai.xi         }
657*53ee8cc1Swenshuai.xi         if(IntStatus & RASP_INT_PAYLD2MIU)
658*53ee8cc1Swenshuai.xi         {
659*53ee8cc1Swenshuai.xi             _rasp_payloadptr = HAL_NDSRASP_GetPayloadWritePtr(RaspID);
660*53ee8cc1Swenshuai.xi         }
661*53ee8cc1Swenshuai.xi 
662*53ee8cc1Swenshuai.xi         //HAL_NDSRASP_INT_ClrHW(RaspID , IntStatus[RaspID]);
663*53ee8cc1Swenshuai.xi         HAL_NDSRASP_INT_ClrHW(RaspID , 0xFFFF);
664*53ee8cc1Swenshuai.xi 
665*53ee8cc1Swenshuai.xi 		//MsOS_SetEvent(_nds_rasp_eventid, RaspID<<16 | (IntStatus[RaspID] ) );
666*53ee8cc1Swenshuai.xi 
667*53ee8cc1Swenshuai.xi 
668*53ee8cc1Swenshuai.xi 
669*53ee8cc1Swenshuai.xi 
670*53ee8cc1Swenshuai.xi     MsOS_EnableInterrupt(E_INT_IRQ_RASP);
671*53ee8cc1Swenshuai.xi }
672*53ee8cc1Swenshuai.xi #endif
673*53ee8cc1Swenshuai.xi #if 0
674*53ee8cc1Swenshuai.xi static void _NDS_RASP_IsrTask2(void)
675*53ee8cc1Swenshuai.xi {
676*53ee8cc1Swenshuai.xi 
677*53ee8cc1Swenshuai.xi     MS_U32 u32Events=0;
678*53ee8cc1Swenshuai.xi     MS_U32 RaspID;
679*53ee8cc1Swenshuai.xi 
680*53ee8cc1Swenshuai.xi 
681*53ee8cc1Swenshuai.xi     printf("ISR task222\n");
682*53ee8cc1Swenshuai.xi 
683*53ee8cc1Swenshuai.xi     while(1)
684*53ee8cc1Swenshuai.xi     {
685*53ee8cc1Swenshuai.xi         //MsOS_WaitEvent(_nds_rasp_eventid, NDS_RASP_EVENT_ALL, &u32Events, E_OR_CLEAR, MSOS_WAIT_FOREVER);
686*53ee8cc1Swenshuai.xi 		MsOS_ObtainSemaphore(_nds_rasp_eventid, MSOS_WAIT_FOREVER);
687*53ee8cc1Swenshuai.xi 
688*53ee8cc1Swenshuai.xi         printf("[RASP]_NDS_RASP_IsrTask2222!!----- u32Events = %x \n",u32Events);
689*53ee8cc1Swenshuai.xi         //printf("EventLog = %x, EventDescr = %x, EventNumber = %x\n",EventLog, EventDescr, EventNumber);
690*53ee8cc1Swenshuai.xi 
691*53ee8cc1Swenshuai.xi 		#if 0
692*53ee8cc1Swenshuai.xi         RaspID = (u32Events>>16);
693*53ee8cc1Swenshuai.xi         if(RaspID >= RASP_NUM)
694*53ee8cc1Swenshuai.xi         {
695*53ee8cc1Swenshuai.xi             DRVRASP_DBG(RASP_DBGLV_ERR,"invalid Rasp ID\n");
696*53ee8cc1Swenshuai.xi             continue;
697*53ee8cc1Swenshuai.xi         }
698*53ee8cc1Swenshuai.xi 
699*53ee8cc1Swenshuai.xi         printf("Rasp ID = %x\n",RaspID);
700*53ee8cc1Swenshuai.xi 
701*53ee8cc1Swenshuai.xi         if(u32Events & RASP_INT_ECM_PKT_RDY)
702*53ee8cc1Swenshuai.xi         {
703*53ee8cc1Swenshuai.xi 			printf("ECM Packet Ready, EcmPktNumer = %x, EcmWritePtr = %x, EcmTimeStamp = %x, EcmIntStatus = %x\n",EcmPktNumer, EcmWritePtr, EcmTimeStamp, EcmIntStatus);
704*53ee8cc1Swenshuai.xi 		}
705*53ee8cc1Swenshuai.xi 		#endif
706*53ee8cc1Swenshuai.xi     }
707*53ee8cc1Swenshuai.xi }
708*53ee8cc1Swenshuai.xi #endif
709*53ee8cc1Swenshuai.xi 
_RASP_InitResource(RASP_RESOURCE_PRIVATE * presource)710*53ee8cc1Swenshuai.xi static MS_BOOL _RASP_InitResource(RASP_RESOURCE_PRIVATE* presource)
711*53ee8cc1Swenshuai.xi {
712*53ee8cc1Swenshuai.xi     if(presource == NULL)
713*53ee8cc1Swenshuai.xi         return FALSE;
714*53ee8cc1Swenshuai.xi 
715*53ee8cc1Swenshuai.xi     presource->_s32RASPMutexId = -1;
716*53ee8cc1Swenshuai.xi     presource->_bSuspend = FALSE;
717*53ee8cc1Swenshuai.xi     presource->_bRASPInitReady = FALSE;
718*53ee8cc1Swenshuai.xi     presource->_u32LastErr = TRUE;
719*53ee8cc1Swenshuai.xi 
720*53ee8cc1Swenshuai.xi     return TRUE;
721*53ee8cc1Swenshuai.xi }
722*53ee8cc1Swenshuai.xi 
_NDS_RASP_SwStateReset(void)723*53ee8cc1Swenshuai.xi static void _NDS_RASP_SwStateReset(void)
724*53ee8cc1Swenshuai.xi {
725*53ee8cc1Swenshuai.xi     MS_U32 _u32RASPnum = 0;
726*53ee8cc1Swenshuai.xi     MS_U32 i = 0;
727*53ee8cc1Swenshuai.xi     printf("%s\n",__FUNCTION__);
728*53ee8cc1Swenshuai.xi 
729*53ee8cc1Swenshuai.xi     for (_u32RASPnum = 0 ; _u32RASPnum < RASP_NUM ; _u32RASPnum++)
730*53ee8cc1Swenshuai.xi     {
731*53ee8cc1Swenshuai.xi         for (i = RASP_PIDFLT_START_NUM; i < RASP_PIDFLT_END_NUM; i++)
732*53ee8cc1Swenshuai.xi         {
733*53ee8cc1Swenshuai.xi             _prasp_res->_RASPState[_u32RASPnum][i]._RASP_init = 0;
734*53ee8cc1Swenshuai.xi             _prasp_res->_RASPState[_u32RASPnum][i]._RASP_FltState = E_DRVRASP_FLT_STATE_FREE;
735*53ee8cc1Swenshuai.xi             _prasp_res->_RASPState[_u32RASPnum][i]._RASP_ECMFltState = E_DRVRASP_FLT_STATE_FREE;
736*53ee8cc1Swenshuai.xi         }
737*53ee8cc1Swenshuai.xi     }
738*53ee8cc1Swenshuai.xi }
739*53ee8cc1Swenshuai.xi 
_NDS_RASP_RegStateReset(void)740*53ee8cc1Swenshuai.xi static void _NDS_RASP_RegStateReset(void)
741*53ee8cc1Swenshuai.xi {
742*53ee8cc1Swenshuai.xi     printf("%s\n",__FUNCTION__);
743*53ee8cc1Swenshuai.xi 
744*53ee8cc1Swenshuai.xi     MS_U16 _u16fltnum = 0;
745*53ee8cc1Swenshuai.xi     MS_U32 _u32RASPnum = 0;
746*53ee8cc1Swenshuai.xi     for (_u32RASPnum = 0 ; _u32RASPnum < RASP_NUM ; _u32RASPnum++)
747*53ee8cc1Swenshuai.xi     {
748*53ee8cc1Swenshuai.xi         HAL_RASP_SetPVRDstBuf(_u32RASPnum,0,0,0,0);
749*53ee8cc1Swenshuai.xi         for (_u16fltnum = 0 ; _u16fltnum < RASP_PIDFLT_NUM ; _u16fltnum++)
750*53ee8cc1Swenshuai.xi         {
751*53ee8cc1Swenshuai.xi             HAL_NDSRASP_SetPidflt(_u32RASPnum, _u16fltnum, RASP_PIDFLT_DEF);
752*53ee8cc1Swenshuai.xi         }
753*53ee8cc1Swenshuai.xi 
754*53ee8cc1Swenshuai.xi         for (_u16fltnum = 0 ; _u16fltnum < RASP_EVENT_NUM ; _u16fltnum++)
755*53ee8cc1Swenshuai.xi         {
756*53ee8cc1Swenshuai.xi             HAL_NDSRASP_SetEventMask(_u32RASPnum, _u16fltnum, ~RASP_BYPASS_MASK);
757*53ee8cc1Swenshuai.xi             HAL_NDSRASP_SetPayloadMask(_u32RASPnum, _u16fltnum, ~RASP_BYPASS_MASK);
758*53ee8cc1Swenshuai.xi         }
759*53ee8cc1Swenshuai.xi     }
760*53ee8cc1Swenshuai.xi }
761*53ee8cc1Swenshuai.xi 
_RASP_Close(void)762*53ee8cc1Swenshuai.xi static void _RASP_Close(void)
763*53ee8cc1Swenshuai.xi {
764*53ee8cc1Swenshuai.xi     MS_U8 u8ii;
765*53ee8cc1Swenshuai.xi 
766*53ee8cc1Swenshuai.xi     for(u8ii = 0; u8ii < RASP_NUM; u8ii++)
767*53ee8cc1Swenshuai.xi     {
768*53ee8cc1Swenshuai.xi         HAL_NDSRASP_Exit(u8ii);
769*53ee8cc1Swenshuai.xi     }
770*53ee8cc1Swenshuai.xi 
771*53ee8cc1Swenshuai.xi }
772*53ee8cc1Swenshuai.xi 
773*53ee8cc1Swenshuai.xi // General API
774*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
775*53ee8cc1Swenshuai.xi /// Initialize lib resource API
776*53ee8cc1Swenshuai.xi /// @param pResMemAddr                \b IN: Pointer to store resource memory address
777*53ee8cc1Swenshuai.xi /// @return MMFI_Result
778*53ee8cc1Swenshuai.xi /// @note
779*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
NDS_RASP_InitLibResource(void * pResMemAddr)780*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_InitLibResource(void* pResMemAddr)
781*53ee8cc1Swenshuai.xi {
782*53ee8cc1Swenshuai.xi     if(pResMemAddr == 0)
783*53ee8cc1Swenshuai.xi         return FALSE;
784*53ee8cc1Swenshuai.xi 
785*53ee8cc1Swenshuai.xi     _prasp_res = (RASP_RESOURCE_PRIVATE*)pResMemAddr;
786*53ee8cc1Swenshuai.xi 
787*53ee8cc1Swenshuai.xi     if(_prasp_res->_bRASPInitReady != TRUE)
788*53ee8cc1Swenshuai.xi     {
789*53ee8cc1Swenshuai.xi         if(_RASP_InitResource(_prasp_res) == FALSE)
790*53ee8cc1Swenshuai.xi         {
791*53ee8cc1Swenshuai.xi             _prasp_res->_u32LastErr = FALSE;
792*53ee8cc1Swenshuai.xi         }
793*53ee8cc1Swenshuai.xi         else
794*53ee8cc1Swenshuai.xi             _prasp_res->_u32LastErr = TRUE;
795*53ee8cc1Swenshuai.xi     }
796*53ee8cc1Swenshuai.xi 
797*53ee8cc1Swenshuai.xi     return (_prasp_res->_u32LastErr);
798*53ee8cc1Swenshuai.xi }
799*53ee8cc1Swenshuai.xi 
800*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
801*53ee8cc1Swenshuai.xi /// Initialize RASP driver and RASP engine
802*53ee8cc1Swenshuai.xi /// @return MS_U32
803*53ee8cc1Swenshuai.xi /// @note
804*53ee8cc1Swenshuai.xi /// It should be called before calling any other RASP DDI functions.
805*53ee8cc1Swenshuai.xi /// Driver task is in @ref E_TASK_PRI_SYS level.
806*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
NDS_RASP_Init(void)807*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_Init(void)
808*53ee8cc1Swenshuai.xi {
809*53ee8cc1Swenshuai.xi 	MS_U32 bRet = TRUE;
810*53ee8cc1Swenshuai.xi 	MS_U8 u8ii;
811*53ee8cc1Swenshuai.xi 
812*53ee8cc1Swenshuai.xi 	DRVRASP_DBG(RASP_DBGLV_INFO, "\n");
813*53ee8cc1Swenshuai.xi 
814*53ee8cc1Swenshuai.xi     if(_bRASPIsInit == FALSE)
815*53ee8cc1Swenshuai.xi     {
816*53ee8cc1Swenshuai.xi         MS_VIRT u32Bank;
817*53ee8cc1Swenshuai.xi         MS_PHY u32BankSize;
818*53ee8cc1Swenshuai.xi         printf("%s\n",__FUNCTION__);
819*53ee8cc1Swenshuai.xi         if (FALSE == MDrv_MMIO_GetBASE(&u32Bank, &u32BankSize, MS_MODULE_PM))
820*53ee8cc1Swenshuai.xi         {
821*53ee8cc1Swenshuai.xi         	DRVRASP_DBG(RASP_DBGLV_ERR,"MDrv_MMIO_GetBASE fail\n");
822*53ee8cc1Swenshuai.xi         	MS_ASSERT(0);
823*53ee8cc1Swenshuai.xi         }
824*53ee8cc1Swenshuai.xi 
825*53ee8cc1Swenshuai.xi         printf("u32Bank = %X\n",u32Bank);
826*53ee8cc1Swenshuai.xi         HAL_NDSRASP_SetBank(u32Bank);
827*53ee8cc1Swenshuai.xi 
828*53ee8cc1Swenshuai.xi         for(u8ii = 0; u8ii < RASP_NUM; u8ii++)
829*53ee8cc1Swenshuai.xi         {
830*53ee8cc1Swenshuai.xi         	_prasp_res->_RASPEvtNotify[u8ii] = E_DRVRASP_EVENT_DATA_INIT;
831*53ee8cc1Swenshuai.xi         	_prasp_res->_RASPCallback[u8ii] = NULL;
832*53ee8cc1Swenshuai.xi 
833*53ee8cc1Swenshuai.xi         	HAL_NDSRASP_PowerCtrl(u8ii, ENABLE);
834*53ee8cc1Swenshuai.xi         	HAL_NDSRASP_Init(u8ii);
835*53ee8cc1Swenshuai.xi         }
836*53ee8cc1Swenshuai.xi         _NDS_RASP_SwStateReset();
837*53ee8cc1Swenshuai.xi 
838*53ee8cc1Swenshuai.xi         if (-1 == _prasp_res->_s32RASPMutexId)
839*53ee8cc1Swenshuai.xi         {
840*53ee8cc1Swenshuai.xi         	_prasp_res->_s32RASPMutexId = MsOS_CreateMutex(E_MSOS_FIFO , "RASP_Mutex" , MSOS_PROCESS_SHARED);
841*53ee8cc1Swenshuai.xi         }
842*53ee8cc1Swenshuai.xi         else
843*53ee8cc1Swenshuai.xi         {
844*53ee8cc1Swenshuai.xi         	DRVRASP_DBG(RASP_DBGLV_ERR,"Create _s32RASPMutexId more than once\n");
845*53ee8cc1Swenshuai.xi         }
846*53ee8cc1Swenshuai.xi 
847*53ee8cc1Swenshuai.xi         _u32RaspEventFlag = 0;
848*53ee8cc1Swenshuai.xi         _u32RaspOvfEventFlag = 0;
849*53ee8cc1Swenshuai.xi         _RaspEventIdx = 0;
850*53ee8cc1Swenshuai.xi         _RaspReadIdx = 0;
851*53ee8cc1Swenshuai.xi         _RaspNumEventsTotal=0;
852*53ee8cc1Swenshuai.xi 
853*53ee8cc1Swenshuai.xi 
854*53ee8cc1Swenshuai.xi         if (-1 == _nds_rasp_eventid)
855*53ee8cc1Swenshuai.xi         {
856*53ee8cc1Swenshuai.xi            _nds_rasp_eventid =	MsOS_CreateEventGroup("NDS_RASP_Event");
857*53ee8cc1Swenshuai.xi         }
858*53ee8cc1Swenshuai.xi 
859*53ee8cc1Swenshuai.xi         if (-1 == _nds_rasp_taskid)
860*53ee8cc1Swenshuai.xi         {
861*53ee8cc1Swenshuai.xi            _nds_rasp_taskid = MsOS_CreateTask(	(TaskEntry) _NDS_RASP_IsrTask,
862*53ee8cc1Swenshuai.xi                                                 (MS_U32)NULL,
863*53ee8cc1Swenshuai.xi         										(TaskPriority) E_TASK_PRI_HIGHEST,
864*53ee8cc1Swenshuai.xi         										TRUE,
865*53ee8cc1Swenshuai.xi         										_nds_rasp_stack,
866*53ee8cc1Swenshuai.xi         										NDS_RASP_TASK_STACK_SIZE,
867*53ee8cc1Swenshuai.xi         										"NDS_RASP_IsrTask");
868*53ee8cc1Swenshuai.xi         }
869*53ee8cc1Swenshuai.xi 
870*53ee8cc1Swenshuai.xi         EMMRASP_IntAttach(RASP_ENGINE, TRUE);
871*53ee8cc1Swenshuai.xi         HAL_NDSRASP_INT_Enable(0 ,0xffff);
872*53ee8cc1Swenshuai.xi         _bRASPIsInit = TRUE;
873*53ee8cc1Swenshuai.xi 
874*53ee8cc1Swenshuai.xi         _RASP_ENTRY();
875*53ee8cc1Swenshuai.xi         _prasp_res->_bRASPInitReady = TRUE;
876*53ee8cc1Swenshuai.xi         _RASP_RETURN(bRet);
877*53ee8cc1Swenshuai.xi     }
878*53ee8cc1Swenshuai.xi 
879*53ee8cc1Swenshuai.xi 
880*53ee8cc1Swenshuai.xi     return bRet;
881*53ee8cc1Swenshuai.xi }
882*53ee8cc1Swenshuai.xi 
883*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
884*53ee8cc1Swenshuai.xi /// Poweroff RASP driver and RASP engine
885*53ee8cc1Swenshuai.xi /// @return MS_U32
886*53ee8cc1Swenshuai.xi /// @note
887*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
NDS_RASP_Reset(void)888*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_Reset(void)
889*53ee8cc1Swenshuai.xi {
890*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
891*53ee8cc1Swenshuai.xi     _NDS_RASP_SwStateReset();
892*53ee8cc1Swenshuai.xi     _NDS_RASP_RegStateReset();
893*53ee8cc1Swenshuai.xi     _RASP_RETURN(TRUE);
894*53ee8cc1Swenshuai.xi }
895*53ee8cc1Swenshuai.xi 
896*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
897*53ee8cc1Swenshuai.xi /// Close RASP driver and reset software/register state
898*53ee8cc1Swenshuai.xi /// @return MS_U32
899*53ee8cc1Swenshuai.xi /// @note
900*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
NDS_RASP_Exit(void)901*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_Exit(void)
902*53ee8cc1Swenshuai.xi {
903*53ee8cc1Swenshuai.xi     if (_prasp_res->_s32RASPMutexId != -1)
904*53ee8cc1Swenshuai.xi     {
905*53ee8cc1Swenshuai.xi         _RASP_ENTRY();
906*53ee8cc1Swenshuai.xi     }
907*53ee8cc1Swenshuai.xi 
908*53ee8cc1Swenshuai.xi     if(_prasp_res->_bRASPInitReady == TRUE)
909*53ee8cc1Swenshuai.xi     {
910*53ee8cc1Swenshuai.xi         _NDS_RASP_SwStateReset();
911*53ee8cc1Swenshuai.xi         _NDS_RASP_RegStateReset();
912*53ee8cc1Swenshuai.xi         _RASP_Close();
913*53ee8cc1Swenshuai.xi         _prasp_res->_bRASPInitReady = FALSE;
914*53ee8cc1Swenshuai.xi     }
915*53ee8cc1Swenshuai.xi 
916*53ee8cc1Swenshuai.xi     if (_prasp_res->_s32RASPMutexId != -1)
917*53ee8cc1Swenshuai.xi     {
918*53ee8cc1Swenshuai.xi         MsOS_ReleaseMutex(_prasp_res->_s32RASPMutexId);
919*53ee8cc1Swenshuai.xi         MsOS_DeleteMutex(_prasp_res->_s32RASPMutexId);
920*53ee8cc1Swenshuai.xi         _prasp_res->_s32RASPMutexId = -1;
921*53ee8cc1Swenshuai.xi     }
922*53ee8cc1Swenshuai.xi 
923*53ee8cc1Swenshuai.xi     return  TRUE ;
924*53ee8cc1Swenshuai.xi }
925*53ee8cc1Swenshuai.xi 
926*53ee8cc1Swenshuai.xi #if 0
927*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_SetBuffer(MS_U32 u32RASPEng, MS_PHYADDR u32BufStart0, MS_PHYADDR u32BufStart1, MS_U32 u32BufSize0, MS_U32 u32BufSize1)
928*53ee8cc1Swenshuai.xi {
929*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng = %x, StartAddr0 = %x, BufSize0 = %x, StartAddr1 = %x, BufSize1 = %x\n", u32RASPEng,u32BufStart0,u32BufSize0,u32BufStart1,u32BufSize1);
930*53ee8cc1Swenshuai.xi 
931*53ee8cc1Swenshuai.xi     _NDS_RASP_ENTRY();
932*53ee8cc1Swenshuai.xi     _NDS_RASP_CHECK(u32RASPEng);
933*53ee8cc1Swenshuai.xi 
934*53ee8cc1Swenshuai.xi     //check buffer size.....
935*53ee8cc1Swenshuai.xi     HAL_RASP_SetPVRDstBuf(u32RASPEng, u32BufStart0,(u32BufStart0 + u32BufSize0), u32BufStart1, (u32BufStart1 + u32BufSize1));
936*53ee8cc1Swenshuai.xi     _NDS_RASP_RETURN(TRUE);
937*53ee8cc1Swenshuai.xi }
938*53ee8cc1Swenshuai.xi #endif
939*53ee8cc1Swenshuai.xi 
940*53ee8cc1Swenshuai.xi 
NDS_RASP_RaspEngStart(MS_U32 u32RASPEng,DrvRASP_CtrlMode eCtrlMode,MS_BOOL bEnable)941*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_RaspEngStart(MS_U32 u32RASPEng, DrvRASP_CtrlMode eCtrlMode, MS_BOOL bEnable)
942*53ee8cc1Swenshuai.xi {
943*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng = %x, eCtrlMode = %d, bEnable = %d\n",u32RASPEng, eCtrlMode, bEnable);
944*53ee8cc1Swenshuai.xi 
945*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
946*53ee8cc1Swenshuai.xi     _RASP_CHECK(u32RASPEng);
947*53ee8cc1Swenshuai.xi 
948*53ee8cc1Swenshuai.xi     if (!bEnable)
949*53ee8cc1Swenshuai.xi     {
950*53ee8cc1Swenshuai.xi         switch (eCtrlMode)
951*53ee8cc1Swenshuai.xi         {
952*53ee8cc1Swenshuai.xi             case E_DRVRASP_MODE_PAYLOAD:
953*53ee8cc1Swenshuai.xi             {
954*53ee8cc1Swenshuai.xi                 HAL_NDSRASP_Payload_Enable(u32RASPEng , FALSE);
955*53ee8cc1Swenshuai.xi                 break;
956*53ee8cc1Swenshuai.xi             }
957*53ee8cc1Swenshuai.xi             case E_DRVRASP_MODE_ECM:
958*53ee8cc1Swenshuai.xi             {
959*53ee8cc1Swenshuai.xi                 HAL_NDSRASP_ECM_Enable(u32RASPEng , FALSE);
960*53ee8cc1Swenshuai.xi                 break;
961*53ee8cc1Swenshuai.xi             }
962*53ee8cc1Swenshuai.xi             default :
963*53ee8cc1Swenshuai.xi                 break;
964*53ee8cc1Swenshuai.xi         }
965*53ee8cc1Swenshuai.xi 
966*53ee8cc1Swenshuai.xi     }
967*53ee8cc1Swenshuai.xi     else
968*53ee8cc1Swenshuai.xi     {
969*53ee8cc1Swenshuai.xi         switch (eCtrlMode)
970*53ee8cc1Swenshuai.xi         {
971*53ee8cc1Swenshuai.xi             case E_DRVRASP_MODE_PAYLOAD:
972*53ee8cc1Swenshuai.xi             {
973*53ee8cc1Swenshuai.xi                 HAL_NDSRASP_Payload_Enable(u32RASPEng , TRUE);
974*53ee8cc1Swenshuai.xi                 break;
975*53ee8cc1Swenshuai.xi             }
976*53ee8cc1Swenshuai.xi             case E_DRVRASP_MODE_ECM:
977*53ee8cc1Swenshuai.xi             {
978*53ee8cc1Swenshuai.xi                 HAL_NDSRASP_ECM_Enable(u32RASPEng , TRUE);
979*53ee8cc1Swenshuai.xi                 break;
980*53ee8cc1Swenshuai.xi             }
981*53ee8cc1Swenshuai.xi             default :
982*53ee8cc1Swenshuai.xi                 break;
983*53ee8cc1Swenshuai.xi         }
984*53ee8cc1Swenshuai.xi 
985*53ee8cc1Swenshuai.xi     }
986*53ee8cc1Swenshuai.xi     _RASP_RETURN(TRUE);
987*53ee8cc1Swenshuai.xi }
988*53ee8cc1Swenshuai.xi 
NDS_RASP_PvrEngStart(MS_U32 u32RASPEng,DrvRASP_RecMode eRecMode,MS_BOOL bEnable)989*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_PvrEngStart(MS_U32 u32RASPEng, DrvRASP_RecMode eRecMode, MS_BOOL bEnable)
990*53ee8cc1Swenshuai.xi {
991*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng = %x, eRecMode = %d, bEnable = %d\n",u32RASPEng, eRecMode, bEnable);
992*53ee8cc1Swenshuai.xi 
993*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
994*53ee8cc1Swenshuai.xi     _RASP_CHECK(u32RASPEng);
995*53ee8cc1Swenshuai.xi 
996*53ee8cc1Swenshuai.xi     if (!bEnable)
997*53ee8cc1Swenshuai.xi     {
998*53ee8cc1Swenshuai.xi         switch (eRecMode)
999*53ee8cc1Swenshuai.xi         {
1000*53ee8cc1Swenshuai.xi             case E_DRVRASP_REC_MODE_PID:
1001*53ee8cc1Swenshuai.xi             {
1002*53ee8cc1Swenshuai.xi                 HAL_NDSRASP_Stop(u32RASPEng);
1003*53ee8cc1Swenshuai.xi                 break;
1004*53ee8cc1Swenshuai.xi             }
1005*53ee8cc1Swenshuai.xi             case E_DRVRASP_REC_MODE_ALL:
1006*53ee8cc1Swenshuai.xi             {
1007*53ee8cc1Swenshuai.xi                 HAL_NDSRASP_Stop(u32RASPEng);
1008*53ee8cc1Swenshuai.xi                 break;
1009*53ee8cc1Swenshuai.xi             }
1010*53ee8cc1Swenshuai.xi 
1011*53ee8cc1Swenshuai.xi             default :
1012*53ee8cc1Swenshuai.xi                 break;
1013*53ee8cc1Swenshuai.xi         }
1014*53ee8cc1Swenshuai.xi 
1015*53ee8cc1Swenshuai.xi     }
1016*53ee8cc1Swenshuai.xi     else
1017*53ee8cc1Swenshuai.xi     {
1018*53ee8cc1Swenshuai.xi         switch (eRecMode)
1019*53ee8cc1Swenshuai.xi         {
1020*53ee8cc1Swenshuai.xi             case E_DRVRASP_REC_MODE_PID:
1021*53ee8cc1Swenshuai.xi             {
1022*53ee8cc1Swenshuai.xi                 HAL_NDSRASP_Rec_PID(u32RASPEng, TRUE);
1023*53ee8cc1Swenshuai.xi                 HAL_NDSRASP_Pvr_Enable(u32RASPEng);
1024*53ee8cc1Swenshuai.xi                 break;
1025*53ee8cc1Swenshuai.xi             }
1026*53ee8cc1Swenshuai.xi             case E_DRVRASP_REC_MODE_ALL:
1027*53ee8cc1Swenshuai.xi             {
1028*53ee8cc1Swenshuai.xi                 HAL_NDSRASP_Rec_PID(u32RASPEng, FALSE);
1029*53ee8cc1Swenshuai.xi                 HAL_NDSRASP_Pvr_Enable(u32RASPEng);
1030*53ee8cc1Swenshuai.xi                 break;
1031*53ee8cc1Swenshuai.xi             }
1032*53ee8cc1Swenshuai.xi 
1033*53ee8cc1Swenshuai.xi             default :
1034*53ee8cc1Swenshuai.xi                 break;
1035*53ee8cc1Swenshuai.xi         }
1036*53ee8cc1Swenshuai.xi 
1037*53ee8cc1Swenshuai.xi     }
1038*53ee8cc1Swenshuai.xi     _RASP_RETURN(TRUE);
1039*53ee8cc1Swenshuai.xi }
1040*53ee8cc1Swenshuai.xi 
NDS_RASP_AdvEnable(MS_U32 u32RASPEng,DrvRASP_RecMode eRecMode,MS_BOOL bEn)1041*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_AdvEnable(MS_U32 u32RASPEng, DrvRASP_RecMode eRecMode, MS_BOOL bEn)
1042*53ee8cc1Swenshuai.xi {
1043*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng = %x, eRecMode = %d, bEn = %d\n",u32RASPEng, eRecMode, bEn);
1044*53ee8cc1Swenshuai.xi 
1045*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
1046*53ee8cc1Swenshuai.xi     _RASP_CHECK(u32RASPEng);
1047*53ee8cc1Swenshuai.xi 
1048*53ee8cc1Swenshuai.xi     if (!bEn)
1049*53ee8cc1Swenshuai.xi     {
1050*53ee8cc1Swenshuai.xi         switch (eRecMode)
1051*53ee8cc1Swenshuai.xi         {
1052*53ee8cc1Swenshuai.xi             case E_DRVRASP_MODE_PAYLOAD:
1053*53ee8cc1Swenshuai.xi             {
1054*53ee8cc1Swenshuai.xi                 HAL_NDSRASP_Payload_Enable(u32RASPEng , FALSE);
1055*53ee8cc1Swenshuai.xi                 break;
1056*53ee8cc1Swenshuai.xi             }
1057*53ee8cc1Swenshuai.xi             case E_DRVRASP_MODE_ECM:
1058*53ee8cc1Swenshuai.xi             {
1059*53ee8cc1Swenshuai.xi                 HAL_NDSRASP_ECM_Enable(u32RASPEng , FALSE);
1060*53ee8cc1Swenshuai.xi                 break;
1061*53ee8cc1Swenshuai.xi             }
1062*53ee8cc1Swenshuai.xi             default :
1063*53ee8cc1Swenshuai.xi                 break;
1064*53ee8cc1Swenshuai.xi         }
1065*53ee8cc1Swenshuai.xi 
1066*53ee8cc1Swenshuai.xi     }
1067*53ee8cc1Swenshuai.xi     else
1068*53ee8cc1Swenshuai.xi     {
1069*53ee8cc1Swenshuai.xi         switch (eRecMode)
1070*53ee8cc1Swenshuai.xi         {
1071*53ee8cc1Swenshuai.xi             case E_DRVRASP_MODE_PAYLOAD:
1072*53ee8cc1Swenshuai.xi             {
1073*53ee8cc1Swenshuai.xi                 HAL_NDSRASP_Payload_Enable(u32RASPEng , TRUE);
1074*53ee8cc1Swenshuai.xi                 break;
1075*53ee8cc1Swenshuai.xi             }
1076*53ee8cc1Swenshuai.xi             case E_DRVRASP_MODE_ECM:
1077*53ee8cc1Swenshuai.xi             {
1078*53ee8cc1Swenshuai.xi                 HAL_NDSRASP_ECM_Enable(u32RASPEng , TRUE);
1079*53ee8cc1Swenshuai.xi                 break;
1080*53ee8cc1Swenshuai.xi             }
1081*53ee8cc1Swenshuai.xi             default :
1082*53ee8cc1Swenshuai.xi                 break;
1083*53ee8cc1Swenshuai.xi         }
1084*53ee8cc1Swenshuai.xi 
1085*53ee8cc1Swenshuai.xi     }
1086*53ee8cc1Swenshuai.xi     _RASP_RETURN(TRUE);
1087*53ee8cc1Swenshuai.xi }
1088*53ee8cc1Swenshuai.xi 
1089*53ee8cc1Swenshuai.xi 
1090*53ee8cc1Swenshuai.xi 
NDS_RASP_Pause(MS_U32 u32RASPEng,MS_BOOL bPause)1091*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_Pause(MS_U32 u32RASPEng, MS_BOOL bPause)
1092*53ee8cc1Swenshuai.xi {
1093*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng = %x, bPause = %d\n",u32RASPEng, bPause);
1094*53ee8cc1Swenshuai.xi 
1095*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
1096*53ee8cc1Swenshuai.xi     _RASP_CHECK(u32RASPEng);
1097*53ee8cc1Swenshuai.xi 
1098*53ee8cc1Swenshuai.xi     HAL_NDSRASP_Pause(u32RASPEng,bPause);
1099*53ee8cc1Swenshuai.xi 
1100*53ee8cc1Swenshuai.xi 
1101*53ee8cc1Swenshuai.xi     _RASP_RETURN(TRUE);
1102*53ee8cc1Swenshuai.xi }
1103*53ee8cc1Swenshuai.xi 
1104*53ee8cc1Swenshuai.xi 
NDS_RASP_GetWriteAddr(MS_U32 u32RASPEng,MS_PHYADDR * pu32WriteAddr)1105*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_GetWriteAddr(MS_U32 u32RASPEng, MS_PHYADDR *pu32WriteAddr)
1106*53ee8cc1Swenshuai.xi {
1107*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng = %x\n",u32RASPEng);
1108*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
1109*53ee8cc1Swenshuai.xi     _RASP_CHECK(u32RASPEng);
1110*53ee8cc1Swenshuai.xi     *pu32WriteAddr = HAL_NDSRASP_GetWritePtr(u32RASPEng);
1111*53ee8cc1Swenshuai.xi     _RASP_RETURN(TRUE);
1112*53ee8cc1Swenshuai.xi }
1113*53ee8cc1Swenshuai.xi 
NDS_RASP_GetPayloadWriteAddr(MS_U32 u32RASPEng,MS_PHYADDR * pu32WriteAddr)1114*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_GetPayloadWriteAddr(MS_U32 u32RASPEng, MS_PHYADDR *pu32WriteAddr)
1115*53ee8cc1Swenshuai.xi {
1116*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng = %x\n",u32RASPEng);
1117*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
1118*53ee8cc1Swenshuai.xi     _RASP_CHECK(u32RASPEng);
1119*53ee8cc1Swenshuai.xi     *pu32WriteAddr = HAL_NDSRASP_GetPayloadWritePtr(u32RASPEng);
1120*53ee8cc1Swenshuai.xi     _RASP_RETURN(TRUE);
1121*53ee8cc1Swenshuai.xi }
1122*53ee8cc1Swenshuai.xi 
1123*53ee8cc1Swenshuai.xi 
NDS_RASP_SetNotify(MS_U32 u32RASPEng,DrvRASP_Event eEvents,P_DrvRASP_EvtCallback pfCallback)1124*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_SetNotify(MS_U32 u32RASPEng, DrvRASP_Event eEvents, P_DrvRASP_EvtCallback pfCallback)
1125*53ee8cc1Swenshuai.xi {
1126*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO, "eEvents = %x\n",eEvents);
1127*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
1128*53ee8cc1Swenshuai.xi     _RASP_CHECK(u32RASPEng);
1129*53ee8cc1Swenshuai.xi 
1130*53ee8cc1Swenshuai.xi     if (pfCallback)
1131*53ee8cc1Swenshuai.xi     {
1132*53ee8cc1Swenshuai.xi         _prasp_res->_RASPEvtNotify[u32RASPEng] = eEvents;
1133*53ee8cc1Swenshuai.xi         _prasp_res->_RASPCallback[u32RASPEng] = pfCallback;
1134*53ee8cc1Swenshuai.xi     }
1135*53ee8cc1Swenshuai.xi     else
1136*53ee8cc1Swenshuai.xi     {
1137*53ee8cc1Swenshuai.xi         _prasp_res->_RASPEvtNotify[u32RASPEng] = E_DRVRASP_EVENT_DATA_INIT;
1138*53ee8cc1Swenshuai.xi         _prasp_res->_RASPCallback[u32RASPEng] = NULL;
1139*53ee8cc1Swenshuai.xi     }
1140*53ee8cc1Swenshuai.xi     _RASP_RETURN(TRUE);
1141*53ee8cc1Swenshuai.xi }
1142*53ee8cc1Swenshuai.xi 
NDS_RASP_Set_EventNotify(MS_U32 u32RASPEng,P_DrvRASP_EventCB CallBackFun)1143*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_Set_EventNotify(MS_U32 u32RASPEng, P_DrvRASP_EventCB CallBackFun)
1144*53ee8cc1Swenshuai.xi {
1145*53ee8cc1Swenshuai.xi 
1146*53ee8cc1Swenshuai.xi     //DRVRASP_DBG(RASP_DBGLV_INFO, "eEvents = %x\n",eEvents);
1147*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO, "\n");
1148*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
1149*53ee8cc1Swenshuai.xi     _RASP_CHECK(u32RASPEng);
1150*53ee8cc1Swenshuai.xi 
1151*53ee8cc1Swenshuai.xi     if (CallBackFun)
1152*53ee8cc1Swenshuai.xi     {
1153*53ee8cc1Swenshuai.xi         _prasp_res->_RASPEventCB[u32RASPEng] = CallBackFun;
1154*53ee8cc1Swenshuai.xi     }
1155*53ee8cc1Swenshuai.xi 
1156*53ee8cc1Swenshuai.xi     _RASP_RETURN(TRUE);
1157*53ee8cc1Swenshuai.xi }
1158*53ee8cc1Swenshuai.xi 
1159*53ee8cc1Swenshuai.xi 
NDS_RASP_SetCallBack(MS_U32 u32RASPEng,P_NDSRASP_Callback pfCallback)1160*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_SetCallBack(MS_U32 u32RASPEng, P_NDSRASP_Callback pfCallback)
1161*53ee8cc1Swenshuai.xi {
1162*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO, "RASPEng = %x\n",u32RASPEng);
1163*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
1164*53ee8cc1Swenshuai.xi     _RASP_CHECK(u32RASPEng);
1165*53ee8cc1Swenshuai.xi 
1166*53ee8cc1Swenshuai.xi     if(pfCallback == NULL)
1167*53ee8cc1Swenshuai.xi     {
1168*53ee8cc1Swenshuai.xi         _RASP_RETURN(FALSE);
1169*53ee8cc1Swenshuai.xi     }
1170*53ee8cc1Swenshuai.xi     _ndsrasp_cb = pfCallback;
1171*53ee8cc1Swenshuai.xi     _RASP_RETURN(TRUE);
1172*53ee8cc1Swenshuai.xi }
1173*53ee8cc1Swenshuai.xi 
1174*53ee8cc1Swenshuai.xi 
NDS_RASP_SetPacketMode(MS_U32 u32RASPEng,NDSRASP_RecType eRecType,RASP_OUTSIZE_e eOutSize)1175*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_SetPacketMode(MS_U32 u32RASPEng, NDSRASP_RecType eRecType, RASP_OUTSIZE_e eOutSize)
1176*53ee8cc1Swenshuai.xi {
1177*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng = %x, eRecType = %d, eOutSize = %d\n",u32RASPEng, eRecType, eOutSize);
1178*53ee8cc1Swenshuai.xi 
1179*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
1180*53ee8cc1Swenshuai.xi     _RASP_CHECK(u32RASPEng);
1181*53ee8cc1Swenshuai.xi 
1182*53ee8cc1Swenshuai.xi     MS_BOOL b192 = TRUE;
1183*53ee8cc1Swenshuai.xi 
1184*53ee8cc1Swenshuai.xi     if(eOutSize == RASP_OUT_188)
1185*53ee8cc1Swenshuai.xi         b192 = FALSE;
1186*53ee8cc1Swenshuai.xi 
1187*53ee8cc1Swenshuai.xi     switch (eRecType)
1188*53ee8cc1Swenshuai.xi     {
1189*53ee8cc1Swenshuai.xi         case STR2MIU:
1190*53ee8cc1Swenshuai.xi             HAL_NDSRASP_SetStrPacketMode(u32RASPEng, b192);
1191*53ee8cc1Swenshuai.xi             break;
1192*53ee8cc1Swenshuai.xi 		case PAYLOAD2MIU:
1193*53ee8cc1Swenshuai.xi 			HAL_NDSRASP_SetPayloadPacketMode(u32RASPEng, !b192);
1194*53ee8cc1Swenshuai.xi 			break;
1195*53ee8cc1Swenshuai.xi 		case ECM2MIU:
1196*53ee8cc1Swenshuai.xi 			HAL_NDSRASP_SetECMPacketMode(u32RASPEng, !b192);
1197*53ee8cc1Swenshuai.xi 			break;
1198*53ee8cc1Swenshuai.xi 
1199*53ee8cc1Swenshuai.xi         default:
1200*53ee8cc1Swenshuai.xi 			DRVRASP_DBG(RASP_DBGLV_ERR, "Wrong eRecType\n");
1201*53ee8cc1Swenshuai.xi             break;
1202*53ee8cc1Swenshuai.xi     }
1203*53ee8cc1Swenshuai.xi     _RASP_RETURN(TRUE);
1204*53ee8cc1Swenshuai.xi }
1205*53ee8cc1Swenshuai.xi 
NDS_RASP_SetBufInfo(MS_U32 u32RASPEng,NDSRASP_RecType eRecType,MS_PHYADDR u32BufStart0,MS_PHYADDR u32BufStart1,MS_U32 u32BufSize0,MS_U32 u32BufSize1)1206*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_SetBufInfo(MS_U32 u32RASPEng, NDSRASP_RecType eRecType, MS_PHYADDR u32BufStart0, MS_PHYADDR u32BufStart1, MS_U32 u32BufSize0, MS_U32 u32BufSize1)
1207*53ee8cc1Swenshuai.xi {
1208*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng = %x, eRecType = %d, StartAddr0 = %x, BufSize0 = %x, StartAddr1 = %x, BufSize1 = %x\n",u32RASPEng,eRecType,u32BufStart0,u32BufSize0,u32BufStart1,u32BufSize1);
1209*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
1210*53ee8cc1Swenshuai.xi     _RASP_CHECK(u32RASPEng);
1211*53ee8cc1Swenshuai.xi 
1212*53ee8cc1Swenshuai.xi     switch (eRecType)
1213*53ee8cc1Swenshuai.xi     {
1214*53ee8cc1Swenshuai.xi         case STR2MIU:
1215*53ee8cc1Swenshuai.xi             HAL_RASP_SetPVRDstBuf(u32RASPEng, u32BufStart0,(u32BufStart0 + u32BufSize0), u32BufStart1, (u32BufStart1 + u32BufSize1));
1216*53ee8cc1Swenshuai.xi             break;
1217*53ee8cc1Swenshuai.xi 
1218*53ee8cc1Swenshuai.xi         case PAYLOAD2MIU:
1219*53ee8cc1Swenshuai.xi             HAL_RASP_SetPayloadDstBuf(u32RASPEng, 	u32BufStart0,
1220*53ee8cc1Swenshuai.xi 													(u32BufStart0 + u32BufSize0),
1221*53ee8cc1Swenshuai.xi 													(u32BufStart0 + 2*u32BufSize0),
1222*53ee8cc1Swenshuai.xi 													u32BufStart1,
1223*53ee8cc1Swenshuai.xi 													(u32BufStart1 + u32BufSize1),
1224*53ee8cc1Swenshuai.xi 													(u32BufStart1 + 2*u32BufSize1)
1225*53ee8cc1Swenshuai.xi 								);
1226*53ee8cc1Swenshuai.xi             break;
1227*53ee8cc1Swenshuai.xi 
1228*53ee8cc1Swenshuai.xi         case ECM2MIU:
1229*53ee8cc1Swenshuai.xi             HAL_RASP_SetECMDstBuf(u32RASPEng, 		(u32BufStart0)	,
1230*53ee8cc1Swenshuai.xi 													(u32BufStart0 + u32BufSize0),
1231*53ee8cc1Swenshuai.xi 													(u32BufStart0 + 2*u32BufSize0)
1232*53ee8cc1Swenshuai.xi 								);
1233*53ee8cc1Swenshuai.xi             break;
1234*53ee8cc1Swenshuai.xi         default:
1235*53ee8cc1Swenshuai.xi             break;
1236*53ee8cc1Swenshuai.xi     }
1237*53ee8cc1Swenshuai.xi 
1238*53ee8cc1Swenshuai.xi     _RASP_RETURN(TRUE);
1239*53ee8cc1Swenshuai.xi }
1240*53ee8cc1Swenshuai.xi 
1241*53ee8cc1Swenshuai.xi 
1242*53ee8cc1Swenshuai.xi //this function needs to check pid filter does open this pid or not....
NDS_RASP_SetECMPid(MS_U32 u32RASPEng,MS_U16 u16Fltid,MS_U16 u16Pid)1243*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_SetECMPid(MS_U32 u32RASPEng, MS_U16 u16Fltid, MS_U16 u16Pid)
1244*53ee8cc1Swenshuai.xi {
1245*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng = %x, u16Fltid = %x, u16Pid = %x\n",u32RASPEng, u16Fltid, u16Pid);
1246*53ee8cc1Swenshuai.xi 
1247*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
1248*53ee8cc1Swenshuai.xi     _RASP_CHECK(u32RASPEng);
1249*53ee8cc1Swenshuai.xi 
1250*53ee8cc1Swenshuai.xi     HAL_NDSRASP_SetEcmPidflt(u32RASPEng,u16Fltid,u16Pid);
1251*53ee8cc1Swenshuai.xi 
1252*53ee8cc1Swenshuai.xi     //MS_U16 ReadBackPid;
1253*53ee8cc1Swenshuai.xi     //HAL_NDSRASP_ReadEcmPidflt(u32RASPEng,u16Fltid,&ReadBackPid);
1254*53ee8cc1Swenshuai.xi     //DRVRASP_DBG(RASP_DBGLV_INFO, "Read Back ECM Pid = %x\n",ReadBackPid);
1255*53ee8cc1Swenshuai.xi     _RASP_RETURN(TRUE);
1256*53ee8cc1Swenshuai.xi }
1257*53ee8cc1Swenshuai.xi 
NDS_RASP_SetRecordTimeStamp(MS_U32 u32RASPEng,MS_U32 u32Stamp)1258*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_SetRecordTimeStamp(MS_U32 u32RASPEng, MS_U32 u32Stamp)
1259*53ee8cc1Swenshuai.xi {
1260*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng = %x, u32Stamp = %x\n",u32RASPEng, u32Stamp);
1261*53ee8cc1Swenshuai.xi 
1262*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
1263*53ee8cc1Swenshuai.xi     _RASP_CHECK(u32RASPEng);
1264*53ee8cc1Swenshuai.xi 
1265*53ee8cc1Swenshuai.xi     HAL_NDSRASP_SetPVRTimeStamp(u32RASPEng, u32Stamp);
1266*53ee8cc1Swenshuai.xi 
1267*53ee8cc1Swenshuai.xi     _RASP_RETURN(TRUE);
1268*53ee8cc1Swenshuai.xi }
1269*53ee8cc1Swenshuai.xi 
NDS_RASP_GetRecordTimeStamp(MS_U32 u32RASPEng,MS_U32 * u32Stamp)1270*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_GetRecordTimeStamp(MS_U32 u32RASPEng, MS_U32* u32Stamp)
1271*53ee8cc1Swenshuai.xi {
1272*53ee8cc1Swenshuai.xi     //_RASP_CHECK(u32RASPEng);
1273*53ee8cc1Swenshuai.xi     *u32Stamp = HAL_NDSRASP_GetPVRTimeStamp(u32RASPEng);
1274*53ee8cc1Swenshuai.xi     return TRUE;
1275*53ee8cc1Swenshuai.xi }
1276*53ee8cc1Swenshuai.xi 
NDS_RASP_SetECMTimeStamp(MS_U32 u32RASPEng,MS_U32 u32Stamp)1277*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_SetECMTimeStamp(MS_U32 u32RASPEng, MS_U32 u32Stamp)
1278*53ee8cc1Swenshuai.xi {
1279*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng = %x, u32Stamp = %x\n",u32RASPEng, u32Stamp);
1280*53ee8cc1Swenshuai.xi 
1281*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
1282*53ee8cc1Swenshuai.xi     _RASP_CHECK(u32RASPEng);
1283*53ee8cc1Swenshuai.xi 
1284*53ee8cc1Swenshuai.xi     HAL_NDSRASP_SetECMTimeStamp(u32RASPEng, u32Stamp);
1285*53ee8cc1Swenshuai.xi 
1286*53ee8cc1Swenshuai.xi     _RASP_RETURN(TRUE);
1287*53ee8cc1Swenshuai.xi }
1288*53ee8cc1Swenshuai.xi 
NDS_RASP_GetECMTimeStamp(MS_U32 u32RASPEng,MS_U32 * u32Stamp)1289*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_GetECMTimeStamp(MS_U32 u32RASPEng, MS_U32* u32Stamp)
1290*53ee8cc1Swenshuai.xi {
1291*53ee8cc1Swenshuai.xi     //_RASP_CHECK(u32RASPEng);
1292*53ee8cc1Swenshuai.xi     *u32Stamp = HAL_NDSRASP_GetECMTimeStamp(u32RASPEng);
1293*53ee8cc1Swenshuai.xi     return TRUE;
1294*53ee8cc1Swenshuai.xi }
1295*53ee8cc1Swenshuai.xi 
NDS_RASP_TimeStampSelRecordStampSrc(MS_U32 u32RASPEng,MS_BOOL bLocal)1296*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_TimeStampSelRecordStampSrc(MS_U32 u32RASPEng, MS_BOOL bLocal)
1297*53ee8cc1Swenshuai.xi {
1298*53ee8cc1Swenshuai.xi //not implement
1299*53ee8cc1Swenshuai.xi     return TRUE;
1300*53ee8cc1Swenshuai.xi }
1301*53ee8cc1Swenshuai.xi 
NDS_RASP_GetCurrentPktStatus(MS_U32 u32RASPEng,MS_U32 * u32PktStamp,MS_U32 * u32PktNumber)1302*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_GetCurrentPktStatus(MS_U32 u32RASPEng, MS_U32* u32PktStamp, MS_U32* u32PktNumber)
1303*53ee8cc1Swenshuai.xi {
1304*53ee8cc1Swenshuai.xi     *u32PktStamp = HAL_NDSRASP_GetPktTimer(u32RASPEng);
1305*53ee8cc1Swenshuai.xi     *u32PktNumber = HAL_NDSRASP_GetPktNum(u32RASPEng);
1306*53ee8cc1Swenshuai.xi     return TRUE;
1307*53ee8cc1Swenshuai.xi }
1308*53ee8cc1Swenshuai.xi 
1309*53ee8cc1Swenshuai.xi #if 0	//Migrate to RASP_FlowSet
1310*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_SetTSIF(MS_U32 u32RASPEng, MS_BOOL bPara, MS_BOOL bExtSync, MS_BOOL bDataSWP)
1311*53ee8cc1Swenshuai.xi {
1312*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
1313*53ee8cc1Swenshuai.xi 
1314*53ee8cc1Swenshuai.xi     _RASP_CHECK(u32RASPEng);
1315*53ee8cc1Swenshuai.xi     HAL_NDSRASP_SetTSIF(u32RASPEng, bPara, bExtSync, bDataSWP);
1316*53ee8cc1Swenshuai.xi     _RASP_RETURN(TRUE);
1317*53ee8cc1Swenshuai.xi }
1318*53ee8cc1Swenshuai.xi #endif
1319*53ee8cc1Swenshuai.xi 
NDS_RASP_GetTSIFStatus(MS_U32 u32RASPEng,MS_BOOL * pbExtSyc,MS_BOOL * pbParl,MS_BOOL * pbDataSWP)1320*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_GetTSIFStatus(MS_U32 u32RASPEng, MS_BOOL* pbExtSyc, MS_BOOL* pbParl, MS_BOOL *pbDataSWP)
1321*53ee8cc1Swenshuai.xi {
1322*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
1323*53ee8cc1Swenshuai.xi     _RASP_CHECK(u32RASPEng);
1324*53ee8cc1Swenshuai.xi     //        HAL_NDSRASP_GetTSIF(u32RASPEng, pbParl, pbExtSyc, pbDataSWP);
1325*53ee8cc1Swenshuai.xi     _RASP_RETURN(TRUE);
1326*53ee8cc1Swenshuai.xi }
1327*53ee8cc1Swenshuai.xi 
NDS_RASP_LiveSrcConvert(RASP_FLOW_INPUT eSource)1328*53ee8cc1Swenshuai.xi RASP_LIVEIN_SRC_e NDS_RASP_LiveSrcConvert(RASP_FLOW_INPUT eSource)
1329*53ee8cc1Swenshuai.xi {
1330*53ee8cc1Swenshuai.xi     RASP_LIVEIN_SRC_e eSrc = RASP_SRC_TS0;
1331*53ee8cc1Swenshuai.xi 
1332*53ee8cc1Swenshuai.xi     switch(eSource)
1333*53ee8cc1Swenshuai.xi     {
1334*53ee8cc1Swenshuai.xi         case RASP_FLOW_INPUT_DEMOD0:
1335*53ee8cc1Swenshuai.xi             eSrc = RASP_SRC_DEMOD0;
1336*53ee8cc1Swenshuai.xi             break;
1337*53ee8cc1Swenshuai.xi 
1338*53ee8cc1Swenshuai.xi         case RASP_FLOW_INPUT_DEMOD1:
1339*53ee8cc1Swenshuai.xi             eSrc = RASP_SRC_DEMOD1;
1340*53ee8cc1Swenshuai.xi             break;
1341*53ee8cc1Swenshuai.xi 
1342*53ee8cc1Swenshuai.xi         case RASP_FLOW_INPUT_TS0:
1343*53ee8cc1Swenshuai.xi             eSrc = RASP_SRC_TS0;
1344*53ee8cc1Swenshuai.xi             break;
1345*53ee8cc1Swenshuai.xi 
1346*53ee8cc1Swenshuai.xi         case RASP_FLOW_INPUT_TS1:
1347*53ee8cc1Swenshuai.xi             eSrc = RASP_SRC_TS1;
1348*53ee8cc1Swenshuai.xi             break;
1349*53ee8cc1Swenshuai.xi 
1350*53ee8cc1Swenshuai.xi         case RASP_FLOW_INPUT_TS2:
1351*53ee8cc1Swenshuai.xi             eSrc = RASP_SRC_TS2;
1352*53ee8cc1Swenshuai.xi             break;
1353*53ee8cc1Swenshuai.xi 
1354*53ee8cc1Swenshuai.xi         case RASP_FLOW_INPUT_TS3:
1355*53ee8cc1Swenshuai.xi             eSrc = RASP_SRC_TS3;
1356*53ee8cc1Swenshuai.xi             break;
1357*53ee8cc1Swenshuai.xi 
1358*53ee8cc1Swenshuai.xi         case RASP_FLOW_INPUT_TS4:
1359*53ee8cc1Swenshuai.xi             eSrc = RASP_SRC_TS4;
1360*53ee8cc1Swenshuai.xi             break;
1361*53ee8cc1Swenshuai.xi 
1362*53ee8cc1Swenshuai.xi         case RASP_FLOW_INPUT_TS5:
1363*53ee8cc1Swenshuai.xi             eSrc = RASP_SRC_TS5;
1364*53ee8cc1Swenshuai.xi             break;
1365*53ee8cc1Swenshuai.xi 
1366*53ee8cc1Swenshuai.xi         case RASP_FLOW_INPUT_TS6:
1367*53ee8cc1Swenshuai.xi             eSrc = RASP_SRC_TS6;
1368*53ee8cc1Swenshuai.xi             break;
1369*53ee8cc1Swenshuai.xi 
1370*53ee8cc1Swenshuai.xi         default:
1371*53ee8cc1Swenshuai.xi             eSrc = RASP_SRC_TS0;
1372*53ee8cc1Swenshuai.xi             break;
1373*53ee8cc1Swenshuai.xi     }
1374*53ee8cc1Swenshuai.xi 
1375*53ee8cc1Swenshuai.xi 
1376*53ee8cc1Swenshuai.xi     return eSrc;
1377*53ee8cc1Swenshuai.xi }
1378*53ee8cc1Swenshuai.xi 
NDS_RASP_FlowSet(MS_U32 rasp_eng,RASP_FLOW_INPUT eSource,RASP_FLOW_OUTPUT eDest,MS_BOOL bPara,MS_BOOL bExtSync,MS_BOOL bDataSWP,RASP_INPUTSIZE_e eMode)1379*53ee8cc1Swenshuai.xi MS_BOOL NDS_RASP_FlowSet(MS_U32 rasp_eng, RASP_FLOW_INPUT eSource, RASP_FLOW_OUTPUT eDest, MS_BOOL bPara, MS_BOOL bExtSync, MS_BOOL bDataSWP, RASP_INPUTSIZE_e eMode )
1380*53ee8cc1Swenshuai.xi {
1381*53ee8cc1Swenshuai.xi 	MS_U8 u8pLen=188;
1382*53ee8cc1Swenshuai.xi 
1383*53ee8cc1Swenshuai.xi 
1384*53ee8cc1Swenshuai.xi 	if (eMode==RASP_IN_188){
1385*53ee8cc1Swenshuai.xi 		u8pLen = 188;
1386*53ee8cc1Swenshuai.xi     }
1387*53ee8cc1Swenshuai.xi 	else if (eMode==RASP_IN_192){
1388*53ee8cc1Swenshuai.xi 		u8pLen = 192;
1389*53ee8cc1Swenshuai.xi     }
1390*53ee8cc1Swenshuai.xi 
1391*53ee8cc1Swenshuai.xi 	DRVRASP_DBG(RASP_DBGLV_INFO, "Input packet Size = %x\n", u8pLen);
1392*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_DEBUG, "rasp_eng = %x, eSource = %d, bPara = %d, eMode = %d\n", rasp_eng, eSource, bPara, eMode );
1393*53ee8cc1Swenshuai.xi 
1394*53ee8cc1Swenshuai.xi 	if (eSource==RASP_FLOW_INPUT_MEM)
1395*53ee8cc1Swenshuai.xi 	{
1396*53ee8cc1Swenshuai.xi 		HAL_NDSRASP_SetFileinConfig(rasp_eng, TRUE, 6);				// filein en, blocklevel
1397*53ee8cc1Swenshuai.xi 		HAL_NDSRASP_FileIn_Init(rasp_eng, u8pLen);					//filein bank. reset, chunk_size, auto flush
1398*53ee8cc1Swenshuai.xi 	}
1399*53ee8cc1Swenshuai.xi     else    //LIVEIN
1400*53ee8cc1Swenshuai.xi 	{
1401*53ee8cc1Swenshuai.xi 		HAL_NDSRASP_SetTSIF(rasp_eng, bPara, bExtSync, bDataSWP); 	// rasp_ctrl0, TSIF
1402*53ee8cc1Swenshuai.xi 		HAL_NDSRASP_SetFileinConfig(rasp_eng, FALSE, 0);			// filein dis, blocklevel
1403*53ee8cc1Swenshuai.xi 		HAL_NDSRASP_LiveIn_Init(rasp_eng, u8pLen);					//filein bank. reset, chunk_size, auto flush
1404*53ee8cc1Swenshuai.xi 
1405*53ee8cc1Swenshuai.xi         HAL_NDSRASP_Livein_Config(rasp_eng, NDS_RASP_LiveSrcConvert(eSource));
1406*53ee8cc1Swenshuai.xi 	}
1407*53ee8cc1Swenshuai.xi     return TRUE;
1408*53ee8cc1Swenshuai.xi }
1409*53ee8cc1Swenshuai.xi 
1410*53ee8cc1Swenshuai.xi 
1411*53ee8cc1Swenshuai.xi 
NDS_RASP_AllocFlt(MS_U32 u32RASPEng,MS_U32 * pu16PidFltId)1412*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_AllocFlt(MS_U32 u32RASPEng, MS_U32 *pu16PidFltId)
1413*53ee8cc1Swenshuai.xi {
1414*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng = %x\n",u32RASPEng);
1415*53ee8cc1Swenshuai.xi 
1416*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
1417*53ee8cc1Swenshuai.xi     _RASP_CHECK(u32RASPEng);
1418*53ee8cc1Swenshuai.xi     MS_U16 i = 0;
1419*53ee8cc1Swenshuai.xi 
1420*53ee8cc1Swenshuai.xi     for (i = RASP_PIDFLT_START_NUM ; i < RASP_PIDFLT_END_NUM ; i++)
1421*53ee8cc1Swenshuai.xi     {
1422*53ee8cc1Swenshuai.xi         if (_prasp_res->_RASPState[u32RASPEng][i]._RASP_FltState == E_DRVRASP_FLT_STATE_FREE)
1423*53ee8cc1Swenshuai.xi         {
1424*53ee8cc1Swenshuai.xi             _prasp_res->_RASPState[u32RASPEng][i]._RASP_FltState = E_DRVRASP_FLT_STATE_ALLOC;
1425*53ee8cc1Swenshuai.xi             *pu16PidFltId = i;
1426*53ee8cc1Swenshuai.xi             break;
1427*53ee8cc1Swenshuai.xi         }
1428*53ee8cc1Swenshuai.xi     }
1429*53ee8cc1Swenshuai.xi 
1430*53ee8cc1Swenshuai.xi     if (i == RASP_PIDFLT_END_NUM)
1431*53ee8cc1Swenshuai.xi     {
1432*53ee8cc1Swenshuai.xi         //RASP_ASSERT(0, OSAL_TSP_Print("[TSP_ERROR][%06d] No free fitler found 0x%02lx\n", __LINE__, i));
1433*53ee8cc1Swenshuai.xi         _RASP_RETURN(FALSE);
1434*53ee8cc1Swenshuai.xi     }
1435*53ee8cc1Swenshuai.xi 
1436*53ee8cc1Swenshuai.xi     _RASP_RETURN(TRUE);
1437*53ee8cc1Swenshuai.xi }
1438*53ee8cc1Swenshuai.xi 
NDS_RASP_FreeFlt(MS_U32 u32RASPEng,MS_U32 u32PidFltId)1439*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_FreeFlt(MS_U32 u32RASPEng, MS_U32 u32PidFltId)
1440*53ee8cc1Swenshuai.xi {
1441*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng = %x, u32PidFltId = %x\n",u32RASPEng,u32PidFltId);
1442*53ee8cc1Swenshuai.xi 
1443*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
1444*53ee8cc1Swenshuai.xi     _RASP_CHECK(u32RASPEng);
1445*53ee8cc1Swenshuai.xi 
1446*53ee8cc1Swenshuai.xi     if(u32PidFltId >= RASP_PIDFLT_END_NUM)
1447*53ee8cc1Swenshuai.xi     {
1448*53ee8cc1Swenshuai.xi         _RASP_RETURN(FALSE);
1449*53ee8cc1Swenshuai.xi     }
1450*53ee8cc1Swenshuai.xi 
1451*53ee8cc1Swenshuai.xi     HAL_NDSRASP_SetPidflt(u32RASPEng, u32PidFltId, DRVRASP_PID_NULL);
1452*53ee8cc1Swenshuai.xi     _prasp_res->_RASPState[u32RASPEng][u32PidFltId]._RASP_FltState = E_DRVRASP_FLT_STATE_FREE;
1453*53ee8cc1Swenshuai.xi     _RASP_RETURN(TRUE);
1454*53ee8cc1Swenshuai.xi }
1455*53ee8cc1Swenshuai.xi 
1456*53ee8cc1Swenshuai.xi 
NDS_RASP_AllocECMFlt(MS_U32 u32RASPEng,MS_U16 * pu16ECMFltId)1457*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_AllocECMFlt(MS_U32 u32RASPEng, MS_U16 *pu16ECMFltId)
1458*53ee8cc1Swenshuai.xi {
1459*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng = %x\n",u32RASPEng);
1460*53ee8cc1Swenshuai.xi 
1461*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
1462*53ee8cc1Swenshuai.xi     _RASP_CHECK(u32RASPEng);
1463*53ee8cc1Swenshuai.xi     MS_U16 i = 0;
1464*53ee8cc1Swenshuai.xi 
1465*53ee8cc1Swenshuai.xi     for (i = RASP_ECMFLT_START_NUM ; i < RASP_ECMFLT_END_NUM ; i++)
1466*53ee8cc1Swenshuai.xi     {
1467*53ee8cc1Swenshuai.xi         if (_prasp_res->_RASPState[u32RASPEng][i]._RASP_ECMFltState == E_DRVRASP_FLT_STATE_FREE)
1468*53ee8cc1Swenshuai.xi         {
1469*53ee8cc1Swenshuai.xi             _prasp_res->_RASPState[u32RASPEng][i]._RASP_ECMFltState = E_DRVRASP_FLT_STATE_ALLOC;
1470*53ee8cc1Swenshuai.xi             *pu16ECMFltId = i;
1471*53ee8cc1Swenshuai.xi             break;
1472*53ee8cc1Swenshuai.xi         }
1473*53ee8cc1Swenshuai.xi     }
1474*53ee8cc1Swenshuai.xi 
1475*53ee8cc1Swenshuai.xi     if (i == RASP_ECMFLT_END_NUM)
1476*53ee8cc1Swenshuai.xi     {
1477*53ee8cc1Swenshuai.xi         DRVRASP_DBG(RASP_DBGLV_ERR, "[ERROR][%d] No free fitler found 0x%x\n", __LINE__, (MS_U32)i);
1478*53ee8cc1Swenshuai.xi         _RASP_RETURN(FALSE);
1479*53ee8cc1Swenshuai.xi     }
1480*53ee8cc1Swenshuai.xi 
1481*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO, "ECM Flt ID = %x\n",(MS_U32)*pu16ECMFltId);
1482*53ee8cc1Swenshuai.xi 
1483*53ee8cc1Swenshuai.xi     _RASP_RETURN(TRUE);
1484*53ee8cc1Swenshuai.xi }
1485*53ee8cc1Swenshuai.xi 
NDS_RASP_FreeECMFlt(MS_U32 u32RASPEng,MS_U16 u16ECMFltId)1486*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_FreeECMFlt(MS_U32 u32RASPEng, MS_U16 u16ECMFltId)
1487*53ee8cc1Swenshuai.xi {
1488*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng = %x, u32ECMFltId = %x\n",u32RASPEng,(MS_U32)u16ECMFltId);
1489*53ee8cc1Swenshuai.xi 
1490*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
1491*53ee8cc1Swenshuai.xi     _RASP_CHECK(u32RASPEng);
1492*53ee8cc1Swenshuai.xi 
1493*53ee8cc1Swenshuai.xi     if(u16ECMFltId >= RASP_ECMFLT_END_NUM)
1494*53ee8cc1Swenshuai.xi     {
1495*53ee8cc1Swenshuai.xi         _RASP_RETURN(FALSE);
1496*53ee8cc1Swenshuai.xi     }
1497*53ee8cc1Swenshuai.xi 
1498*53ee8cc1Swenshuai.xi     HAL_NDSRASP_SetPidflt(u32RASPEng, u16ECMFltId, DRVRASP_PID_NULL);
1499*53ee8cc1Swenshuai.xi     _prasp_res->_RASPState[u32RASPEng][u16ECMFltId]._RASP_ECMFltState = E_DRVRASP_FLT_STATE_FREE;
1500*53ee8cc1Swenshuai.xi     _RASP_RETURN(TRUE);
1501*53ee8cc1Swenshuai.xi }
1502*53ee8cc1Swenshuai.xi 
NDS_RASP_SetPid(MS_U32 u32RASPEng,MS_U16 u16Fltid,MS_U16 u16Pid)1503*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_SetPid(MS_U32 u32RASPEng, MS_U16 u16Fltid, MS_U16 u16Pid)
1504*53ee8cc1Swenshuai.xi {
1505*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng = %x, u16Fltid = %x, u16Pid = %x\n",u32RASPEng,u16Fltid,u16Pid);
1506*53ee8cc1Swenshuai.xi 
1507*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
1508*53ee8cc1Swenshuai.xi     _RASP_CHECK(u32RASPEng);
1509*53ee8cc1Swenshuai.xi 
1510*53ee8cc1Swenshuai.xi     HAL_NDSRASP_SetPidflt(u32RASPEng, u16Fltid, u16Pid);
1511*53ee8cc1Swenshuai.xi     _RASP_RETURN(TRUE);
1512*53ee8cc1Swenshuai.xi }
1513*53ee8cc1Swenshuai.xi 
NDS_RASP_GetPid(MS_U32 u32RASPEng,MS_U16 u16Fltid,MS_U16 * pu16Pid)1514*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_GetPid(MS_U32 u32RASPEng, MS_U16 u16Fltid, MS_U16 *pu16Pid)
1515*53ee8cc1Swenshuai.xi {
1516*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng = %x, u16Fltid = %x\n",u32RASPEng,u16Fltid);
1517*53ee8cc1Swenshuai.xi 
1518*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
1519*53ee8cc1Swenshuai.xi     _RASP_CHECK(u32RASPEng);
1520*53ee8cc1Swenshuai.xi 
1521*53ee8cc1Swenshuai.xi     HAL_NDSRASP_GetPidflt(u32RASPEng, u16Fltid, pu16Pid);
1522*53ee8cc1Swenshuai.xi 
1523*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO, "Pid = %x\n",*pu16Pid);
1524*53ee8cc1Swenshuai.xi      _RASP_RETURN(TRUE);
1525*53ee8cc1Swenshuai.xi }
1526*53ee8cc1Swenshuai.xi 
NDS_RASP_GetFileinEnable(MS_U32 u32RASPEng,MS_BOOL * bEn)1527*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_GetFileinEnable(MS_U32 u32RASPEng, MS_BOOL* bEn)
1528*53ee8cc1Swenshuai.xi {
1529*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
1530*53ee8cc1Swenshuai.xi     _RASP_CHECK(u32RASPEng);
1531*53ee8cc1Swenshuai.xi 
1532*53ee8cc1Swenshuai.xi     *bEn = HAL_NDSRASP_GetFileinStart(u32RASPEng);
1533*53ee8cc1Swenshuai.xi 
1534*53ee8cc1Swenshuai.xi     _RASP_RETURN(TRUE);
1535*53ee8cc1Swenshuai.xi }
1536*53ee8cc1Swenshuai.xi 
NDS_RASP_GetCap(NDSRASP_Cap eCap,void * pOutput)1537*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_GetCap(NDSRASP_Cap eCap, void* pOutput)
1538*53ee8cc1Swenshuai.xi {
1539*53ee8cc1Swenshuai.xi 	*((MS_U32*)pOutput) = 0;
1540*53ee8cc1Swenshuai.xi 
1541*53ee8cc1Swenshuai.xi     switch (eCap)
1542*53ee8cc1Swenshuai.xi     {
1543*53ee8cc1Swenshuai.xi         case E_NDSRASP_CAP_RESOURCE_SIZE:
1544*53ee8cc1Swenshuai.xi             *((MS_U32*)pOutput) = sizeof(RASP_RESOURCE_PRIVATE);
1545*53ee8cc1Swenshuai.xi             return TRUE;
1546*53ee8cc1Swenshuai.xi         case E_NDSRASP_CAP_FILTER_NUM:
1547*53ee8cc1Swenshuai.xi         case E_NDSRASP_CAP_FILTER_PVR_NUM:
1548*53ee8cc1Swenshuai.xi             *((MS_U32*)pOutput) = RASP_PIDFLT_NUM_ALL;
1549*53ee8cc1Swenshuai.xi             return TRUE;
1550*53ee8cc1Swenshuai.xi         case E_NDSRASP_CAP_PVR_ALIGN:
1551*53ee8cc1Swenshuai.xi             *((MS_U32*)pOutput) = 16;
1552*53ee8cc1Swenshuai.xi             return TRUE;
1553*53ee8cc1Swenshuai.xi         case E_NDSRASP_CAP_RASP_NUM:
1554*53ee8cc1Swenshuai.xi             *((MS_U32*)pOutput) = RASP_NUM;
1555*53ee8cc1Swenshuai.xi             return TRUE;
1556*53ee8cc1Swenshuai.xi 		case E_NDSRASP_CAP_EVENT_FIFO_DEPTH:
1557*53ee8cc1Swenshuai.xi 			return RASP_EVENT_FIFO_DEPTH;
1558*53ee8cc1Swenshuai.xi 		case E_NDSRASP_CAP_EVENT_NUM:
1559*53ee8cc1Swenshuai.xi 			return RASP_EVENT_NUM;
1560*53ee8cc1Swenshuai.xi         default:
1561*53ee8cc1Swenshuai.xi             return DRVRASP_INVALID_PARAM;
1562*53ee8cc1Swenshuai.xi     }
1563*53ee8cc1Swenshuai.xi }
1564*53ee8cc1Swenshuai.xi 
1565*53ee8cc1Swenshuai.xi 
NDS_RASP_SetEventMask(MS_U32 u32RASPEng,MS_U16 u16Flt,MS_U32 u32Event)1566*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_SetEventMask(MS_U32 u32RASPEng, MS_U16 u16Flt, MS_U32 u32Event)
1567*53ee8cc1Swenshuai.xi {
1568*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng = %x, u16Flt = %x, u32Event = %x\n",u32RASPEng, u16Flt, u32Event);
1569*53ee8cc1Swenshuai.xi 
1570*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
1571*53ee8cc1Swenshuai.xi     _RASP_CHECK(u32RASPEng);
1572*53ee8cc1Swenshuai.xi 
1573*53ee8cc1Swenshuai.xi     HAL_NDSRASP_SetEventMask(u32RASPEng, u16Flt, u32Event);
1574*53ee8cc1Swenshuai.xi 
1575*53ee8cc1Swenshuai.xi     _RASP_RETURN(TRUE);
1576*53ee8cc1Swenshuai.xi }
1577*53ee8cc1Swenshuai.xi 
NDS_RASP_SetWatermark(MS_U32 u32RASPEng,WATERMARK_TYPE WType,MS_BOOL bEnable)1578*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_SetWatermark(MS_U32 u32RASPEng, WATERMARK_TYPE WType, MS_BOOL bEnable)
1579*53ee8cc1Swenshuai.xi {
1580*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng = %x, WType = %d, bEnable = %d\n",u32RASPEng, WType, bEnable);
1581*53ee8cc1Swenshuai.xi 
1582*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
1583*53ee8cc1Swenshuai.xi     _RASP_CHECK(u32RASPEng);
1584*53ee8cc1Swenshuai.xi 
1585*53ee8cc1Swenshuai.xi     if(WType == EVENT_WATERMARK)
1586*53ee8cc1Swenshuai.xi     {
1587*53ee8cc1Swenshuai.xi         //HAL_NDSRASP_SetEventWaterMark(u32RASPEng, 0xf);		//TPE team request, separate API
1588*53ee8cc1Swenshuai.xi         HAL_NDSRASP_EVENT_EventWM_Enable(u32RASPEng, bEnable);
1589*53ee8cc1Swenshuai.xi     }
1590*53ee8cc1Swenshuai.xi     else if(WType == TIMER_WATERMARK)
1591*53ee8cc1Swenshuai.xi     {
1592*53ee8cc1Swenshuai.xi         //HAL_NDSRASP_SetTimerWaterMark(u32RASPEng, 2);		//TPE team request, separate API
1593*53ee8cc1Swenshuai.xi         HAL_NDSRASP_EVENT_TimeWM_Enable(u32RASPEng, bEnable);
1594*53ee8cc1Swenshuai.xi     }
1595*53ee8cc1Swenshuai.xi 
1596*53ee8cc1Swenshuai.xi     //HAL_NDSRASP_SetEventMask(u32RASPEng, u16Flt, u32Event);
1597*53ee8cc1Swenshuai.xi 
1598*53ee8cc1Swenshuai.xi     _RASP_RETURN(TRUE);
1599*53ee8cc1Swenshuai.xi }
1600*53ee8cc1Swenshuai.xi 
NDS_RASP_SetEvent_Threshold(MS_U32 u32RASPEng,MS_U8 u8Threshold)1601*53ee8cc1Swenshuai.xi MS_BOOL NDS_RASP_SetEvent_Threshold(MS_U32 u32RASPEng, MS_U8 u8Threshold /*Maximum value is 31*/)
1602*53ee8cc1Swenshuai.xi {
1603*53ee8cc1Swenshuai.xi 	DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng [%x], Event Threshold [%x]\n", u32RASPEng, u8Threshold);
1604*53ee8cc1Swenshuai.xi 
1605*53ee8cc1Swenshuai.xi 	if (u8Threshold <= 31 )
1606*53ee8cc1Swenshuai.xi 	{
1607*53ee8cc1Swenshuai.xi 		return HAL_NDSRASP_EVENT_SetEventThreshold(u32RASPEng, (MS_U32)u8Threshold);
1608*53ee8cc1Swenshuai.xi 	}
1609*53ee8cc1Swenshuai.xi 
1610*53ee8cc1Swenshuai.xi 	DRVRASP_DBG(RASP_DBGLV_ERR, "Threshold exceeds\n");
1611*53ee8cc1Swenshuai.xi 	return FALSE;
1612*53ee8cc1Swenshuai.xi 
1613*53ee8cc1Swenshuai.xi }
1614*53ee8cc1Swenshuai.xi 
NDS_RASP_SetTime_Timeout(MS_U32 u32RASPEng,TIME_WATERMARK_e timeout)1615*53ee8cc1Swenshuai.xi MS_BOOL NDS_RASP_SetTime_Timeout(MS_U32 u32RASPEng, TIME_WATERMARK_e timeout)
1616*53ee8cc1Swenshuai.xi {
1617*53ee8cc1Swenshuai.xi 	DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng [%x], Event Threshold [%x]\n", u32RASPEng, timeout);
1618*53ee8cc1Swenshuai.xi 	return HAL_NDSRASP_EVENT_SetTimerThreshold(u32RASPEng, (MS_U16)timeout );
1619*53ee8cc1Swenshuai.xi }
1620*53ee8cc1Swenshuai.xi 
NDS_RASP_SetPayloadMask(MS_U32 u32RASPEng,MS_U16 u16Flt,MS_U32 u32Payload)1621*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_SetPayloadMask(MS_U32 u32RASPEng, MS_U16 u16Flt, MS_U32 u32Payload)
1622*53ee8cc1Swenshuai.xi {
1623*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
1624*53ee8cc1Swenshuai.xi     _RASP_CHECK(u32RASPEng);
1625*53ee8cc1Swenshuai.xi 
1626*53ee8cc1Swenshuai.xi     HAL_NDSRASP_SetPayloadMask(u32RASPEng, u16Flt, u32Payload);
1627*53ee8cc1Swenshuai.xi 
1628*53ee8cc1Swenshuai.xi     _RASP_RETURN(TRUE);
1629*53ee8cc1Swenshuai.xi }
1630*53ee8cc1Swenshuai.xi 
NDS_RASP_SetPayloadTimeStamp(MS_U32 u32RASPEng,MS_U32 u32TimeStamp)1631*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_SetPayloadTimeStamp(MS_U32 u32RASPEng , MS_U32 u32TimeStamp)
1632*53ee8cc1Swenshuai.xi {
1633*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng = %x, u32TimeStamp = %x\n",u32RASPEng, u32TimeStamp);
1634*53ee8cc1Swenshuai.xi 
1635*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
1636*53ee8cc1Swenshuai.xi     _RASP_CHECK(u32RASPEng);
1637*53ee8cc1Swenshuai.xi 
1638*53ee8cc1Swenshuai.xi     HAL_NDSRASP_SetPayloadTimeStamp(u32RASPEng,u32TimeStamp);
1639*53ee8cc1Swenshuai.xi     _RASP_RETURN(TRUE);
1640*53ee8cc1Swenshuai.xi }
1641*53ee8cc1Swenshuai.xi 
NDS_RASP_GetPayloadTimeStamp(MS_U32 u32RASPEng,MS_U32 * pu32TimeStamp)1642*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_GetPayloadTimeStamp(MS_U32 u32RASPEng , MS_U32 *pu32TimeStamp)
1643*53ee8cc1Swenshuai.xi {
1644*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng = %x\n",u32RASPEng);
1645*53ee8cc1Swenshuai.xi 
1646*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
1647*53ee8cc1Swenshuai.xi     _RASP_CHECK(u32RASPEng);
1648*53ee8cc1Swenshuai.xi 
1649*53ee8cc1Swenshuai.xi     *pu32TimeStamp = HAL_NDSRASP_GetPayloadTimeStamp(u32RASPEng);
1650*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO, "TimeStamp = %x\n",*pu32TimeStamp);
1651*53ee8cc1Swenshuai.xi     _RASP_RETURN(TRUE);
1652*53ee8cc1Swenshuai.xi }
1653*53ee8cc1Swenshuai.xi 
1654*53ee8cc1Swenshuai.xi #if 0	//move to NDS_RASP_SetPacketMode
1655*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_SetPayloadPacketMode(MS_U32 u32RASPEng, MS_BOOL bDisable192)
1656*53ee8cc1Swenshuai.xi {
1657*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng = %x\n",u32RASPEng);
1658*53ee8cc1Swenshuai.xi 
1659*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
1660*53ee8cc1Swenshuai.xi     _RASP_CHECK(u32RASPEng);
1661*53ee8cc1Swenshuai.xi 
1662*53ee8cc1Swenshuai.xi 	//If want to disable 192 mode--> TRUE
1663*53ee8cc1Swenshuai.xi 	//If want to enable  192 mode--> FALSE
1664*53ee8cc1Swenshuai.xi 	HAL_NDSRASP_SetPayloadPacketMode(u32RASPEng, bDisable192);
1665*53ee8cc1Swenshuai.xi 
1666*53ee8cc1Swenshuai.xi 	_RASP_RETURN(TRUE);
1667*53ee8cc1Swenshuai.xi }
1668*53ee8cc1Swenshuai.xi #endif
1669*53ee8cc1Swenshuai.xi 
NDS_RASP_SetDataSwap(MS_U32 u32RASPEng,MS_BOOL bEn)1670*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_SetDataSwap(MS_U32 u32RASPEng, MS_BOOL bEn)
1671*53ee8cc1Swenshuai.xi {
1672*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
1673*53ee8cc1Swenshuai.xi     _RASP_CHECK(u32RASPEng);
1674*53ee8cc1Swenshuai.xi     HAL_NDSRASP_SetDataSwap(u32RASPEng, bEn);
1675*53ee8cc1Swenshuai.xi     _RASP_RETURN(TRUE);
1676*53ee8cc1Swenshuai.xi }
1677*53ee8cc1Swenshuai.xi 
NDS_RASP_CallbackSize(MS_U32 u32RASPEng,MS_U32 * pu32CallbackSize,MS_BOOL bSet)1678*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_CallbackSize(MS_U32 u32RASPEng, MS_U32* pu32CallbackSize, MS_BOOL bSet)
1679*53ee8cc1Swenshuai.xi {
1680*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
1681*53ee8cc1Swenshuai.xi     _RASP_CHECK(u32RASPEng);
1682*53ee8cc1Swenshuai.xi #ifdef PVR_CALLBACK_BY_SIZE_ENABLE
1683*53ee8cc1Swenshuai.xi     if(bSet)
1684*53ee8cc1Swenshuai.xi     {
1685*53ee8cc1Swenshuai.xi         HAL_NDSRASP_SetCallbackSize(u32RASPEng, *pu32CallbackSize);
1686*53ee8cc1Swenshuai.xi         if(*pu32CallbackSize < CALLBACK_SIZE_MIN)
1687*53ee8cc1Swenshuai.xi         {
1688*53ee8cc1Swenshuai.xi             HAL_NDSRASP_INT_Disable(u32RASPEng, RASP_INT_CALLBACK_BY_SIZE);
1689*53ee8cc1Swenshuai.xi         }
1690*53ee8cc1Swenshuai.xi         else
1691*53ee8cc1Swenshuai.xi         {
1692*53ee8cc1Swenshuai.xi             if(_prasp_res->_RASPCallback[u32RASPEng])
1693*53ee8cc1Swenshuai.xi                 HAL_NDSRASP_INT_Enable(u32RASPEng, RASP_INT_CALLBACK_BY_SIZE);
1694*53ee8cc1Swenshuai.xi         }
1695*53ee8cc1Swenshuai.xi     }
1696*53ee8cc1Swenshuai.xi     else
1697*53ee8cc1Swenshuai.xi         *pu32CallbackSize = HAL_NDSRASP_GetCallbackSize(u32RASPEng);
1698*53ee8cc1Swenshuai.xi #endif
1699*53ee8cc1Swenshuai.xi 
1700*53ee8cc1Swenshuai.xi     _RASP_RETURN(TRUE);
1701*53ee8cc1Swenshuai.xi }
1702*53ee8cc1Swenshuai.xi 
NDS_PROC_RASP_PVR_SizeMet(MS_U32 u32RASPEng)1703*53ee8cc1Swenshuai.xi MS_U32 NDS_PROC_RASP_PVR_SizeMet(MS_U32 u32RASPEng)
1704*53ee8cc1Swenshuai.xi {
1705*53ee8cc1Swenshuai.xi     static DrvRASP_Msg stMsg;
1706*53ee8cc1Swenshuai.xi     _RASP_CHECK(u32RASPEng);
1707*53ee8cc1Swenshuai.xi     if(_prasp_res->_RASPEvtNotify[u32RASPEng] && _prasp_res->_RASPCallback[u32RASPEng])
1708*53ee8cc1Swenshuai.xi     {
1709*53ee8cc1Swenshuai.xi         if(_prasp_res->_RASPEvtNotify[u32RASPEng] & E_DRVRASP_EVENT_CALLBACK_SIZE_MET)
1710*53ee8cc1Swenshuai.xi         {
1711*53ee8cc1Swenshuai.xi             stMsg.u8PVREngNum = u32RASPEng;
1712*53ee8cc1Swenshuai.xi             _prasp_res->_RASPCallback[u32RASPEng](E_DRVRASP_EVENT_CALLBACK_SIZE_MET, &stMsg);
1713*53ee8cc1Swenshuai.xi         }
1714*53ee8cc1Swenshuai.xi     }
1715*53ee8cc1Swenshuai.xi     return TRUE;
1716*53ee8cc1Swenshuai.xi }
1717*53ee8cc1Swenshuai.xi 
NDS_RASP_CallbackIntCheck(MS_U32 u32RASPEng,MS_BOOL * bInterrupted)1718*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_CallbackIntCheck(MS_U32 u32RASPEng, MS_BOOL* bInterrupted)
1719*53ee8cc1Swenshuai.xi {//this func may be used in interrupt context , so watch out!!! Here's no synchronization mechanism.
1720*53ee8cc1Swenshuai.xi #ifdef PVR_CALLBACK_BY_SIZE_ENABLE
1721*53ee8cc1Swenshuai.xi     if(!bInterrupted)
1722*53ee8cc1Swenshuai.xi         return FALSE;
1723*53ee8cc1Swenshuai.xi      _RASP_CHECK(u32RASPEng);
1724*53ee8cc1Swenshuai.xi     if(HAL_NDSRASP_INT_GetHW(u32RASPEng) & RASP_INT_CALLBACK_BY_SIZE)
1725*53ee8cc1Swenshuai.xi         *bInterrupted = TRUE;
1726*53ee8cc1Swenshuai.xi     else
1727*53ee8cc1Swenshuai.xi         *bInterrupted = FALSE;
1728*53ee8cc1Swenshuai.xi #endif
1729*53ee8cc1Swenshuai.xi     return TRUE;
1730*53ee8cc1Swenshuai.xi }
1731*53ee8cc1Swenshuai.xi 
NDS_RASP_CallbackIntClr(MS_U32 u32RASPEng)1732*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_CallbackIntClr(MS_U32 u32RASPEng)
1733*53ee8cc1Swenshuai.xi {//this func may be used in interrupt context , so watch out!!! Here's no synchronization mechanism.
1734*53ee8cc1Swenshuai.xi #ifdef PVR_CALLBACK_BY_SIZE_ENABLE
1735*53ee8cc1Swenshuai.xi      _RASP_CHECK(u32RASPEng);
1736*53ee8cc1Swenshuai.xi     HAL_NDSRASP_INT_ClrHW(u32RASPEng, RASP_INT_CALLBACK_BY_SIZE);
1737*53ee8cc1Swenshuai.xi #endif
1738*53ee8cc1Swenshuai.xi     return TRUE;
1739*53ee8cc1Swenshuai.xi }
1740*53ee8cc1Swenshuai.xi 
1741*53ee8cc1Swenshuai.xi 
NDS_RASP_SetFileIn_Config(MS_U32 RaspEng,MS_U32 StartAddr,MS_U32 FileInSize)1742*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_SetFileIn_Config(MS_U32 RaspEng, MS_U32 StartAddr, MS_U32 FileInSize)
1743*53ee8cc1Swenshuai.xi {
1744*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO,"RaspEng = %x, StartAddr = %x, FileInSize = %x\n",RaspEng,StartAddr,FileInSize);
1745*53ee8cc1Swenshuai.xi     return HAL_RASP_SetFileIn_Config(RaspEng, StartAddr, FileInSize);
1746*53ee8cc1Swenshuai.xi }
1747*53ee8cc1Swenshuai.xi 
NDS_RASP_FileIn_Start(MS_U32 RaspEng)1748*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_FileIn_Start(MS_U32 RaspEng)
1749*53ee8cc1Swenshuai.xi {
1750*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng = %x\n",RaspEng);
1751*53ee8cc1Swenshuai.xi 
1752*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
1753*53ee8cc1Swenshuai.xi     _RASP_CHECK(RaspEng);
1754*53ee8cc1Swenshuai.xi 
1755*53ee8cc1Swenshuai.xi     _RASP_RETURN(HAL_RASP_FileIn_Start(RaspEng));
1756*53ee8cc1Swenshuai.xi }
1757*53ee8cc1Swenshuai.xi 
NDS_RASP_SetFileIn_Timer(MS_U32 RaspEng,MS_U16 u16Timer)1758*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_SetFileIn_Timer(MS_U32 RaspEng, MS_U16 u16Timer)
1759*53ee8cc1Swenshuai.xi {
1760*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO,"RaspEng = %x,  u16Timer = %x\n",RaspEng,u16Timer);
1761*53ee8cc1Swenshuai.xi     return HAL_RASP_SetFileIn_Timer(RaspEng, u16Timer);
1762*53ee8cc1Swenshuai.xi }
1763*53ee8cc1Swenshuai.xi 
NDS_RASP_SetFileIn_PktSize(MS_U32 RaspEng,MS_U16 PktSize)1764*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_SetFileIn_PktSize(MS_U32 RaspEng, MS_U16 PktSize)
1765*53ee8cc1Swenshuai.xi {
1766*53ee8cc1Swenshuai.xi 	//(Packet Size �V 1) for sync detection in TSIF1
1767*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng = %x,  PktSize = %x\n", RaspEng,PktSize);
1768*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
1769*53ee8cc1Swenshuai.xi     _RASP_CHECK(RaspEng);
1770*53ee8cc1Swenshuai.xi 
1771*53ee8cc1Swenshuai.xi     _RASP_RETURN(HAL_RASP_SetFileIn_PktSize(RaspEng, PktSize));
1772*53ee8cc1Swenshuai.xi }
1773*53ee8cc1Swenshuai.xi 
NDS_RASP_IsFileIn_Done(MS_U32 RaspEng)1774*53ee8cc1Swenshuai.xi MS_BOOL NDS_RASP_IsFileIn_Done(MS_U32 RaspEng)
1775*53ee8cc1Swenshuai.xi {
1776*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng = %x\n", RaspEng);
1777*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
1778*53ee8cc1Swenshuai.xi     _RASP_CHECK(RaspEng);
1779*53ee8cc1Swenshuai.xi     _RASP_RETURN(HAL_RASP_IsFileIn_Done(RaspEng));
1780*53ee8cc1Swenshuai.xi }
1781*53ee8cc1Swenshuai.xi 
NDS_RASP_FileIn_Flush(MS_U32 RaspEng)1782*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_FileIn_Flush(MS_U32 RaspEng)
1783*53ee8cc1Swenshuai.xi {
1784*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng = %x\n", RaspEng);
1785*53ee8cc1Swenshuai.xi 
1786*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
1787*53ee8cc1Swenshuai.xi     _RASP_CHECK(RaspEng);
1788*53ee8cc1Swenshuai.xi 
1789*53ee8cc1Swenshuai.xi     _RASP_RETURN(HAL_RASP_FileIn_Flush(RaspEng));
1790*53ee8cc1Swenshuai.xi }
1791*53ee8cc1Swenshuai.xi 
1792*53ee8cc1Swenshuai.xi #if 0 //Migrate to RASP_FlowSet
1793*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_FileinInit(MS_U32 u32RASPEng)
1794*53ee8cc1Swenshuai.xi {
1795*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng = %x\n",u32RASPEng);
1796*53ee8cc1Swenshuai.xi 
1797*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
1798*53ee8cc1Swenshuai.xi     _RASP_CHECK(u32RASPEng);
1799*53ee8cc1Swenshuai.xi 
1800*53ee8cc1Swenshuai.xi     HAL_RASP_FileIn_Init(u32RASPEng);
1801*53ee8cc1Swenshuai.xi 
1802*53ee8cc1Swenshuai.xi     _RASP_RETURN(TRUE);
1803*53ee8cc1Swenshuai.xi }
1804*53ee8cc1Swenshuai.xi #endif
1805*53ee8cc1Swenshuai.xi 
1806*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1807*53ee8cc1Swenshuai.xi /// FileIn mode bypass timestamp.
1808*53ee8cc1Swenshuai.xi /// If 192 byte Filein mode --> bypass=FALSE
1809*53ee8cc1Swenshuai.xi /// If 188 byte Filein mode --> NO NEED CALL THIS API
1810*53ee8cc1Swenshuai.xi /// @return
1811*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
NDS_RASP_FileIn_BypassTimeStamp(MS_U32 u32RASPEng,MS_BOOL bypass)1812*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_FileIn_BypassTimeStamp (MS_U32 u32RASPEng, MS_BOOL bypass)
1813*53ee8cc1Swenshuai.xi {
1814*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng = %x\n",u32RASPEng);
1815*53ee8cc1Swenshuai.xi 
1816*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
1817*53ee8cc1Swenshuai.xi     _RASP_CHECK(u32RASPEng);
1818*53ee8cc1Swenshuai.xi 
1819*53ee8cc1Swenshuai.xi 	HAL_RASP_FileIn_BlockTimeStamp(u32RASPEng, !bypass);
1820*53ee8cc1Swenshuai.xi 
1821*53ee8cc1Swenshuai.xi 	_RASP_RETURN(TRUE);
1822*53ee8cc1Swenshuai.xi }
1823*53ee8cc1Swenshuai.xi 
1824*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1825*53ee8cc1Swenshuai.xi /// FileIn mode bypass timestamp.
1826*53ee8cc1Swenshuai.xi /// If lpcr2 (system 90k counter) is higher than stream timestamp, then packet can output. Otherwise no packet will output.
1827*53ee8cc1Swenshuai.xi /// So, the one should set lpcr2 time initial value according to FileIn packet initial timestamp value
1828*53ee8cc1Swenshuai.xi /// @return
1829*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
NDS_RASP_FileIn_SetPlaybackTimeStamp(MS_U32 u32RASPEng,MS_U32 u32Stamp)1830*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_FileIn_SetPlaybackTimeStamp (MS_U32 u32RASPEng, MS_U32 u32Stamp)
1831*53ee8cc1Swenshuai.xi {
1832*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng = %x\n",u32RASPEng);
1833*53ee8cc1Swenshuai.xi 
1834*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
1835*53ee8cc1Swenshuai.xi     _RASP_CHECK(u32RASPEng);
1836*53ee8cc1Swenshuai.xi 
1837*53ee8cc1Swenshuai.xi 	HAL_RASP_FileIn_SetPlaybackTimeStamp(u32RASPEng, u32Stamp);
1838*53ee8cc1Swenshuai.xi 
1839*53ee8cc1Swenshuai.xi 	_RASP_RETURN(TRUE);
1840*53ee8cc1Swenshuai.xi }
1841*53ee8cc1Swenshuai.xi 
NDS_RASP_FileIn_GetPlaybackTimeStamp(MS_U32 u32RASPEng)1842*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_FileIn_GetPlaybackTimeStamp (MS_U32 u32RASPEng)
1843*53ee8cc1Swenshuai.xi {
1844*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng = %x\n",u32RASPEng);
1845*53ee8cc1Swenshuai.xi 
1846*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
1847*53ee8cc1Swenshuai.xi     _RASP_CHECK(u32RASPEng);
1848*53ee8cc1Swenshuai.xi 
1849*53ee8cc1Swenshuai.xi 	_RASP_RETURN( HAL_RASP_FileIn_GetPlaybackTimeStamp(u32RASPEng) );
1850*53ee8cc1Swenshuai.xi }
1851*53ee8cc1Swenshuai.xi 
NDS_RASP_FileIn_IsCMDQ_Full(MS_U32 RaspEng)1852*53ee8cc1Swenshuai.xi MS_BOOL NDS_RASP_FileIn_IsCMDQ_Full(MS_U32 RaspEng)
1853*53ee8cc1Swenshuai.xi {
1854*53ee8cc1Swenshuai.xi 	DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng = %x\n",RaspEng);
1855*53ee8cc1Swenshuai.xi 
1856*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
1857*53ee8cc1Swenshuai.xi     _RASP_CHECK(RaspEng);
1858*53ee8cc1Swenshuai.xi 	_RASP_RETURN( HAL_RASP_FileIn_IsCMDQ_Full(RaspEng) );
1859*53ee8cc1Swenshuai.xi }
1860*53ee8cc1Swenshuai.xi 
NDS_RASP_FileIn_IsCMDQ_Empty(MS_U32 RaspEng)1861*53ee8cc1Swenshuai.xi MS_BOOL NDS_RASP_FileIn_IsCMDQ_Empty(MS_U32 RaspEng)
1862*53ee8cc1Swenshuai.xi {
1863*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng = %x\n",RaspEng);
1864*53ee8cc1Swenshuai.xi 
1865*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
1866*53ee8cc1Swenshuai.xi     _RASP_CHECK(RaspEng);
1867*53ee8cc1Swenshuai.xi 
1868*53ee8cc1Swenshuai.xi 	_RASP_RETURN( HAL_RASP_FileIn_IsCMDQ_Empty(RaspEng) );
1869*53ee8cc1Swenshuai.xi }
1870*53ee8cc1Swenshuai.xi 
NDS_RASP_FileIn_GetCmdQueueLevel(MS_U32 RaspEng,FILEIN_CMDQ_LEVEL * peCMDQLvl)1871*53ee8cc1Swenshuai.xi MS_BOOL NDS_RASP_FileIn_GetCmdQueueLevel(MS_U32 RaspEng, FILEIN_CMDQ_LEVEL* peCMDQLvl)
1872*53ee8cc1Swenshuai.xi {
1873*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng = %x\n",RaspEng);
1874*53ee8cc1Swenshuai.xi 
1875*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
1876*53ee8cc1Swenshuai.xi     _RASP_CHECK(RaspEng);
1877*53ee8cc1Swenshuai.xi 	MS_U8 CmdQLevel=0xFF;
1878*53ee8cc1Swenshuai.xi 
1879*53ee8cc1Swenshuai.xi 	/*
1880*53ee8cc1Swenshuai.xi 	cmd_wr_level = 2'b00 //empty
1881*53ee8cc1Swenshuai.xi 	cmd_wr_level = 2'b01 // 25% full
1882*53ee8cc1Swenshuai.xi 	cmd_wr_level = 2'b10 // 50% full
1883*53ee8cc1Swenshuai.xi 	cmd_wr_level = 2'b11 // 75% full
1884*53ee8cc1Swenshuai.xi 	*/
1885*53ee8cc1Swenshuai.xi 	HAL_RASP_FileIn_GetCmdQueueLevel( RaspEng, &CmdQLevel);
1886*53ee8cc1Swenshuai.xi 
1887*53ee8cc1Swenshuai.xi 	if (CmdQLevel!=0xFF)
1888*53ee8cc1Swenshuai.xi 	{
1889*53ee8cc1Swenshuai.xi 		*peCMDQLvl = (FILEIN_CMDQ_LEVEL)CmdQLevel;
1890*53ee8cc1Swenshuai.xi 		_RASP_RETURN( TRUE );
1891*53ee8cc1Swenshuai.xi 	}
1892*53ee8cc1Swenshuai.xi 
1893*53ee8cc1Swenshuai.xi 	DRVRASP_DBG(RASP_DBGLV_ERR, "CmdQLevel value ERROR\n");
1894*53ee8cc1Swenshuai.xi 	_RASP_RETURN( FALSE );
1895*53ee8cc1Swenshuai.xi 
1896*53ee8cc1Swenshuai.xi }
1897*53ee8cc1Swenshuai.xi 
1898*53ee8cc1Swenshuai.xi 
NDS_RASP_FileIn_GetEmptyNum(MS_U32 RaspEng,MS_U8 * peCMDQCnt)1899*53ee8cc1Swenshuai.xi MS_BOOL NDS_RASP_FileIn_GetEmptyNum(MS_U32 RaspEng, MS_U8* peCMDQCnt)
1900*53ee8cc1Swenshuai.xi {
1901*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng = %x\n",RaspEng);
1902*53ee8cc1Swenshuai.xi 
1903*53ee8cc1Swenshuai.xi     _RASP_ENTRY();
1904*53ee8cc1Swenshuai.xi     _RASP_CHECK(RaspEng);
1905*53ee8cc1Swenshuai.xi 	MS_U8 CmdQCnt=0xFF;
1906*53ee8cc1Swenshuai.xi 
1907*53ee8cc1Swenshuai.xi 	/*	empty cmd_wr_count		*/
1908*53ee8cc1Swenshuai.xi 	HAL_RASP_FileIn_GetEmptyNum( RaspEng, &CmdQCnt);
1909*53ee8cc1Swenshuai.xi 
1910*53ee8cc1Swenshuai.xi 	if (CmdQCnt!=0xFF)
1911*53ee8cc1Swenshuai.xi 	{
1912*53ee8cc1Swenshuai.xi 		*peCMDQCnt = CmdQCnt;
1913*53ee8cc1Swenshuai.xi 		_RASP_RETURN( TRUE );
1914*53ee8cc1Swenshuai.xi 	}
1915*53ee8cc1Swenshuai.xi 
1916*53ee8cc1Swenshuai.xi 	DRVRASP_DBG(RASP_DBGLV_ERR, "peCMDQCnt value ERROR\n");
1917*53ee8cc1Swenshuai.xi 	_RASP_RETURN( FALSE );
1918*53ee8cc1Swenshuai.xi 
1919*53ee8cc1Swenshuai.xi }
1920*53ee8cc1Swenshuai.xi 
NDS_RASP_FileIn_Timer(MS_U32 RaspEng,MS_BOOL bEnFileInTimer,MS_U16 u16Timer)1921*53ee8cc1Swenshuai.xi MS_U32 NDS_RASP_FileIn_Timer(MS_U32 RaspEng, MS_BOOL bEnFileInTimer, MS_U16 u16Timer)
1922*53ee8cc1Swenshuai.xi {
1923*53ee8cc1Swenshuai.xi 	DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng = %x\n",RaspEng);
1924*53ee8cc1Swenshuai.xi 
1925*53ee8cc1Swenshuai.xi 	_RASP_ENTRY();
1926*53ee8cc1Swenshuai.xi 	_RASP_CHECK(RaspEng);
1927*53ee8cc1Swenshuai.xi 
1928*53ee8cc1Swenshuai.xi 	HAL_RASP_FileIn_Timer(RaspEng, bEnFileInTimer, u16Timer);
1929*53ee8cc1Swenshuai.xi 
1930*53ee8cc1Swenshuai.xi 	_RASP_RETURN( TRUE );
1931*53ee8cc1Swenshuai.xi }
1932*53ee8cc1Swenshuai.xi 
NDS_RASP_FileIn_Init_TimeStamp(MS_U32 RaspEng,MS_BOOL bResetPacketTimeStamp)1933*53ee8cc1Swenshuai.xi MS_BOOL NDS_RASP_FileIn_Init_TimeStamp(MS_U32 RaspEng, MS_BOOL bResetPacketTimeStamp)
1934*53ee8cc1Swenshuai.xi {
1935*53ee8cc1Swenshuai.xi     DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng = %x\n",RaspEng);
1936*53ee8cc1Swenshuai.xi 
1937*53ee8cc1Swenshuai.xi 	_RASP_ENTRY();
1938*53ee8cc1Swenshuai.xi 	_RASP_CHECK(RaspEng);
1939*53ee8cc1Swenshuai.xi 
1940*53ee8cc1Swenshuai.xi 	HAL_RASP_FileIn_Reset_TStamp(RaspEng, bResetPacketTimeStamp);
1941*53ee8cc1Swenshuai.xi 
1942*53ee8cc1Swenshuai.xi     _RASP_RETURN( TRUE );
1943*53ee8cc1Swenshuai.xi }
1944*53ee8cc1Swenshuai.xi 
NDS_RASP_Reset_EventPktCounter(MS_U32 RaspEng)1945*53ee8cc1Swenshuai.xi MS_BOOL NDS_RASP_Reset_EventPktCounter(MS_U32 RaspEng)
1946*53ee8cc1Swenshuai.xi {
1947*53ee8cc1Swenshuai.xi 	DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng = %x\n",RaspEng);
1948*53ee8cc1Swenshuai.xi 
1949*53ee8cc1Swenshuai.xi 	_RASP_ENTRY();
1950*53ee8cc1Swenshuai.xi 	_RASP_CHECK(RaspEng);
1951*53ee8cc1Swenshuai.xi 
1952*53ee8cc1Swenshuai.xi 	HAL_NDSRASP_EVENT_RstCounter(RaspEng);
1953*53ee8cc1Swenshuai.xi 
1954*53ee8cc1Swenshuai.xi 	_RASP_RETURN( TRUE );
1955*53ee8cc1Swenshuai.xi }
1956*53ee8cc1Swenshuai.xi 
NDS_RASP_Reset_EventPktTimer(MS_U32 RaspEng)1957*53ee8cc1Swenshuai.xi MS_BOOL NDS_RASP_Reset_EventPktTimer(MS_U32 RaspEng)
1958*53ee8cc1Swenshuai.xi {
1959*53ee8cc1Swenshuai.xi 	DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng = %x\n",RaspEng);
1960*53ee8cc1Swenshuai.xi 
1961*53ee8cc1Swenshuai.xi 	_RASP_ENTRY();
1962*53ee8cc1Swenshuai.xi 	_RASP_CHECK(RaspEng);
1963*53ee8cc1Swenshuai.xi 
1964*53ee8cc1Swenshuai.xi 	HAL_NDSRASP_EVENT_RstTimer(RaspEng);
1965*53ee8cc1Swenshuai.xi 
1966*53ee8cc1Swenshuai.xi 	_RASP_RETURN( TRUE );
1967*53ee8cc1Swenshuai.xi }
1968*53ee8cc1Swenshuai.xi 
1969*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1970*53ee8cc1Swenshuai.xi /// Get Event descriptor from FIFO, intended for polling mode
1971*53ee8cc1Swenshuai.xi /// Otherwise use interrupt callback method
1972*53ee8cc1Swenshuai.xi /// @return
1973*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
NDS_RASP_GetEventDescriptor(MS_U32 RaspEng,NDS_RASP_EVENT * pEventDesc,MS_U32 u32ArraySize)1974*53ee8cc1Swenshuai.xi MS_BOOL NDS_RASP_GetEventDescriptor(MS_U32 RaspEng, NDS_RASP_EVENT *pEventDesc, MS_U32 u32ArraySize)
1975*53ee8cc1Swenshuai.xi {
1976*53ee8cc1Swenshuai.xi 	DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng = %x\n",RaspEng);
1977*53ee8cc1Swenshuai.xi 
1978*53ee8cc1Swenshuai.xi 	_RASP_ENTRY();
1979*53ee8cc1Swenshuai.xi 	_RASP_CHECK(RaspEng);
1980*53ee8cc1Swenshuai.xi 
1981*53ee8cc1Swenshuai.xi 	if (pEventDesc)
1982*53ee8cc1Swenshuai.xi 	{
1983*53ee8cc1Swenshuai.xi 		HAL_NDSRASP_EVENT_GetEventDescriptor(RaspEng, (MS_U32 *)pEventDesc, u32ArraySize);
1984*53ee8cc1Swenshuai.xi 		_RASP_RETURN( TRUE );
1985*53ee8cc1Swenshuai.xi 	}
1986*53ee8cc1Swenshuai.xi 	else
1987*53ee8cc1Swenshuai.xi 	{
1988*53ee8cc1Swenshuai.xi 		DRVRASP_DBG(RASP_DBGLV_INFO, "NULL descriptor pointer\n");
1989*53ee8cc1Swenshuai.xi 
1990*53ee8cc1Swenshuai.xi 	}
1991*53ee8cc1Swenshuai.xi 
1992*53ee8cc1Swenshuai.xi 	_RASP_RETURN( FALSE );
1993*53ee8cc1Swenshuai.xi }
1994*53ee8cc1Swenshuai.xi 
1995*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1996*53ee8cc1Swenshuai.xi /// Get remaining event numbers in event FIFO
1997*53ee8cc1Swenshuai.xi /// @return
1998*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
NDS_RASP_GetEventNumber(MS_U32 RaspEng)1999*53ee8cc1Swenshuai.xi MS_U16 NDS_RASP_GetEventNumber(MS_U32 RaspEng)
2000*53ee8cc1Swenshuai.xi {
2001*53ee8cc1Swenshuai.xi 
2002*53ee8cc1Swenshuai.xi 	DRVRASP_DBG(RASP_DBGLV_INFO, "RaspEng = %x\n",RaspEng);
2003*53ee8cc1Swenshuai.xi 
2004*53ee8cc1Swenshuai.xi 	return HAL_NDSRASP_EVENT_GetEventNum(RaspEng);
2005*53ee8cc1Swenshuai.xi 
2006*53ee8cc1Swenshuai.xi }
2007*53ee8cc1Swenshuai.xi 
NDS_RASP_SetDbgLevel(MS_U32 level)2008*53ee8cc1Swenshuai.xi void NDS_RASP_SetDbgLevel(MS_U32 level)
2009*53ee8cc1Swenshuai.xi {
2010*53ee8cc1Swenshuai.xi     _g32RASPDrvDbgLv = level;
2011*53ee8cc1Swenshuai.xi     HAL_NDSRASP_SetDbgLevel(level);
2012*53ee8cc1Swenshuai.xi 
2013*53ee8cc1Swenshuai.xi }
2014*53ee8cc1Swenshuai.xi 
RaspDemoTest(MS_U32 Addr)2015*53ee8cc1Swenshuai.xi void RaspDemoTest(MS_U32 Addr)
2016*53ee8cc1Swenshuai.xi {
2017*53ee8cc1Swenshuai.xi     MS_U32 u32Size = (188 * 10);
2018*53ee8cc1Swenshuai.xi     printf("enter RaspDemoTest\n");
2019*53ee8cc1Swenshuai.xi     NDS_RASP_SetDbgLevel(7);
2020*53ee8cc1Swenshuai.xi     NDS_RASP_Init();
2021*53ee8cc1Swenshuai.xi 
2022*53ee8cc1Swenshuai.xi     MS_U32 rasp_eng = 0;
2023*53ee8cc1Swenshuai.xi     HAL_NDSRASP_Rec_PID(0, TRUE);
2024*53ee8cc1Swenshuai.xi     NDS_RASP_SetPid(0, 0, 0xc1);
2025*53ee8cc1Swenshuai.xi 
2026*53ee8cc1Swenshuai.xi 	NDS_RASP_SetBufInfo(rasp_eng, STR2MIU /*PVR*/, Addr, (Addr + u32Size), u32Size, u32Size);
2027*53ee8cc1Swenshuai.xi 
2028*53ee8cc1Swenshuai.xi 	//payload packetmode, FALSE-->188 byte mode
2029*53ee8cc1Swenshuai.xi     //NDS_RASP_SetPayloadPacketMode(rasp_eng, TRUE);	//payload packet 192/188
2030*53ee8cc1Swenshuai.xi 
2031*53ee8cc1Swenshuai.xi 	NDS_RASP_FlowSet(rasp_eng, RASP_FLOW_INPUT_DEMOD0, 0 /*not implement*/, TRUE, TRUE, FALSE, RASP_IN_188);
2032*53ee8cc1Swenshuai.xi 
2033*53ee8cc1Swenshuai.xi }
2034*53ee8cc1Swenshuai.xi 
NDS_RASP_SetExtendConfig(MS_U32 RaspEng,MS_U16 type,MS_U16 extendbytes,MS_U16 syncbyte)2035*53ee8cc1Swenshuai.xi MS_BOOL NDS_RASP_SetExtendConfig(MS_U32 RaspEng, MS_U16 type, MS_U16 extendbytes, MS_U16 syncbyte)
2036*53ee8cc1Swenshuai.xi {
2037*53ee8cc1Swenshuai.xi 
2038*53ee8cc1Swenshuai.xi     printf("NDS_RASP_SetExtendConfig, RaspEng = %x\n",RaspEng);
2039*53ee8cc1Swenshuai.xi     HAL_NDSRASP_SetExtendConfig(RaspEng, type, extendbytes, syncbyte);
2040*53ee8cc1Swenshuai.xi 
2041*53ee8cc1Swenshuai.xi     return TRUE;
2042*53ee8cc1Swenshuai.xi }
2043*53ee8cc1Swenshuai.xi 
2044