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