blob: fc023203ab1a3461006008f891d625dd41a71e90 [file] [log] [blame]
rjw6c1fd8f2022-11-30 14:33:01 +08001#include "drv_cuif.h"
2#include "kal_hrt_api.h"
3#if defined(__CUIF_DEBUG__)
4#include "us_timer.h"
5#endif
6/*******************************************************************************
7 * Function prototypes
8 *******************************************************************************/
9#if defined(__CUIF_DEBUG__)
10extern CUIF_DebugRecordList cuif_debug_records[CUIF_VPE_NUM];
11#endif
12
13
14#if !defined(__CUIF_DEBUG__)
15void cuif_InterruptHandlerInternal(volatile cuif_uint32* sreg,
16 volatile cuif_uint32* ereg,
17 volatile cuif_uint32* creg,
18 CUIF_InterruptEntryFun* handler,
19 cuif_bool* auto_eoi);
20#else /* __CUIF_DEBUG__ */
21void cuif_InterruptHandlerInternal(volatile cuif_uint32* sreg,
22 volatile cuif_uint32* ereg,
23 volatile cuif_uint32* creg,
24 CUIF_InterruptEntryFun* handler,
25 cuif_bool* auto_eoi,
26 CUIF_MCU_INT nID);
27#endif /* __CUIF_DEBUG__ */
28
29/*******************************************************************************
30 * Functions - Common Part
31 *******************************************************************************/
32void CUIF_DefaultISR(CUIF_Mask_t* mask)
33{
34 // code 1: status register value, code 2: enable register vale, code 3: n0~n4 (0~4)
35 CUIF_ASSERT(0, CUIF_REG_READ(mask->status_reg_addr),
36 CUIF_REG_READ((cuif_uint32)mask->status_reg_addr + CUIF_INTERRUPT_STA_EN_OFFSET),
37 ((cuif_uint32)mask->status_reg_addr - (cuif_uint32)CUIF_U2C_STATUS_BASE) / CUIF_INTERRUPT_NEXT_INT_OFFSET);
38}
39
40#if defined(__CUIF_DEBUG__)
41void cuif_DebugAddRecord(cuif_uint32 status,
42 volatile cuif_uint32* set_addr,
43 cuif_uint32 set_value,
44 cuif_uint32 caller)
45{
46 cuif_uint32 save_index = 0;
47 cuif_uint32 vpe_id = kal_get_current_vpe_id();
48 CUIF_ASSERT(vpe_id < CUIF_VPE_NUM, vpe_id, CUIF_VPE_NUM, 0);
49
50 CUIF_DebugRecordList *cuif_debug_records_ptr = &cuif_debug_records[vpe_id];
51
52 //cuif_uint32 mask;
53 //mask = kal_hrt_SaveAndSetIRQMask();
54
55 // fetch and add top_index atomically.
56 //save_index = cuif_debug_records_ptr->top_index;
57 save_index = kal_atomic_inc_circular_index(&(cuif_debug_records_ptr -> top_index), CUIF_DEBUG_ISR_HANDLE_CODE_SIZE);
58 //++(cuif_debug_records_ptr->top_index);
59 //if(cuif_debug_records_ptr->top_index == CUIF_DEBUG_ISR_HANDLE_CODE_SIZE){
60 // cuif_debug_records_ptr->top_index = 0;
61 //}
62
63 //kal_hrt_RestoreIRQMask(mask);
64
65 cuif_debug_records_ptr->records[save_index].time = ust_get_current_time();
66 cuif_debug_records_ptr->records[save_index].status = status;
67 cuif_debug_records_ptr->records[save_index].set_addr = (cuif_uint32)set_addr;
68 cuif_debug_records_ptr->records[save_index].set_value = set_value;
69 cuif_debug_records_ptr->records[save_index].caller = caller;
70}
71#endif /* __CUIF_DEBUG__ */
72
73
74/**
75 * General interrupt handler function
76 *
77 * @param[in] sreg CUIF interrupt status register
78 * @param[in] creg CUIF interrupt clean register
79 * @param[in] handler CUIF user entry function lists
80 * @param[in] core CUIF interrupt core type - BRP, DFE and RAKE (Debug only)
81 * @param[in] interrupt_type CUIF interrupt type - U3G or U4G (Debug only)
82 **/
83#if !defined(__CUIF_DEBUG__)
84void cuif_InterruptHandlerInternal(volatile cuif_uint32* sreg,
85 volatile cuif_uint32* ereg,
86 volatile cuif_uint32* creg,
87 CUIF_InterruptEntryFun* handler,
88 cuif_bool* auto_eoi
89 )
90#else /* __CUIF_DEBUG__ */
91void cuif_InterruptHandlerInternal(volatile cuif_uint32* sreg,
92 volatile cuif_uint32* ereg,
93 volatile cuif_uint32* creg,
94 CUIF_InterruptEntryFun* handler,
95 cuif_bool* auto_eoi,
96 CUIF_MCU_INT nID)
97#endif /* __CUIF_DEBUG__ */
98{
99 cuif_uint32 eidx; // entry function index
100 CUIF_Mask_t cuif_mask;
101#if defined(__CUIF_DEBUG__)
102 cuif_uint32 caller;
103 CUIF_GET_RETURN_ADDRESS(caller);
104#endif /* __CUIF_DEBUG__ */
105
106 // for debug when no register callback
107 cuif_mask.status_reg_addr = (cuif_uint32*)sreg;
108
109 // read the sreg to the mask
110 cuif_mask.mask31_0 = CUIF_REG_READ(sreg) & CUIF_REG_READ(ereg);
111
112 while(cuif_mask.mask31_0){
113 // find the lsb
114 eidx = CUIF_GET_LSB(cuif_mask.mask31_0);
115
116 // invoke the user register interupt handler function
117 (*handler[eidx])((CUIF_Mask_t *)&cuif_mask);
118
119 // if the `irq_auto_eoi` is CUIF_TRUE, clean the interupt bit
120 if(auto_eoi[eidx] == CUIF_TRUE){
121
122 CUIF_REG_WRITE(creg, 1 << eidx);
123
124#if defined(__CUIF_DEBUG__)
125 cuif_DebugAddRecord(cuif_mask.mask31_0, creg, (1 << eidx), caller);
126#endif /* __CUIF_DEBUG__ */
127 }
128
129#if defined(__CUIF_DEBUG__)
130 cuif_DebugAddISRHandleCode(eidx, nID);
131#endif /* __CUIF_DEBUG__ */
132
133 // read the sreg to the mask
134 cuif_mask.mask31_0 = CUIF_REG_READ(sreg) & CUIF_REG_READ(ereg);
135 }
136}
137
138
139/*******************************************************************************
140 * Functions - Driver test
141 *******************************************************************************/
142
143#if defined(__CUIF_DRV_TEST__)
144
145
146extern cuif_uint32 cuif_drvtest_case;
147extern cuif_uint32 cuif_drvtest_prev_irq;
148extern cuif_uint32 cuif_drvtest_irq_test_success;
149
150extern void CUIF_DriverAPIU2CTest(CUIF_MODULE_INDEX moduleID, CUIF_MCU_INT nID);
151extern void CUIF_DriverAPIC2UTest(CUIF_MODULE_INDEX moduleID, CUIF_MCU_INT nID);
152
153extern void CUIF_DriverISRTestC2U(CUIF_MODULE_INDEX moduleID, cuif_uint32 case_num);
154extern void CUIF_DriverISRTestU2C(CUIF_MCU_INT nID, cuif_uint32 case_num, CUIF_MODULE_INDEX moduleID);
155
156void cuif_drv_test_sync(CUIF_MODULE_INDEX moduleID)
157{
158 volatile cuif_uint32* sync;
159 if (CUIF_ENUM_INNER == moduleID || CUIF_ENUM_OUTER == moduleID)
160 {
161 sync = (volatile cuif_uint32*)CUIF_SYNC_ADDR_USIP0;
162 }
163 else
164 {
165 sync = (volatile cuif_uint32*)CUIF_SYNC_ADDR_USIP1;
166 }
167 // MCU Part
168 while(sync[1] == 1) ;
169 sync[1] = 1;
170
171 while(sync[0] == 0) ;
172 sync[0] = 0;
173}
174
175#define EN_ALL_EXCEPT_WFI_MASK 0xFFFFFFC0
176#define EN_ALL_MASK 0xFFFFFFFF
177
178void CUIF_DisableInterrupt()
179{
180 #if defined(__MD93__)
181 CUIF_REG_WRITE(CUIF_U2C_EN_CLR_BASE + REG_OFFSET(CUIF_ENUM_N0), EN_ALL_EXCEPT_WFI_MASK);
182 CUIF_REG_WRITE(CUIF_U2C_EN_CLR_BASE + REG_OFFSET(CUIF_ENUM_N1), EN_ALL_MASK);
183 CUIF_REG_WRITE(CUIF_U2C_EN_CLR_BASE + REG_OFFSET(CUIF_ENUM_N2), EN_ALL_MASK);
184 CUIF_REG_WRITE(CUIF_U2C_EN_CLR_BASE + REG_OFFSET(CUIF_ENUM_N3), EN_ALL_MASK);
185 CUIF_REG_WRITE(CUIF_U2C_EN_CLR_BASE + REG_OFFSET(CUIF_ENUM_N4), EN_ALL_EXCEPT_WFI_MASK);
186 #elif defined(__MD95__)
187 CUIF_REG_WRITE(CUIF_U2C_EN_CLR_BASE + REG_OFFSET(CUIF_ENUM_N0), EN_ALL_EXCEPT_WFI_MASK);
188 CUIF_REG_WRITE(CUIF_U2C_EN_CLR_BASE + REG_OFFSET(CUIF_ENUM_N1), EN_ALL_MASK);
189 CUIF_REG_WRITE(CUIF_U2C_EN_CLR_BASE + REG_OFFSET(CUIF_ENUM_N2), EN_ALL_MASK);
190 CUIF_REG_WRITE(CUIF_U2C_EN_CLR_BASE + REG_OFFSET(CUIF_ENUM_N3), EN_ALL_MASK);
191 CUIF_REG_WRITE(CUIF_U2C_EN_CLR_BASE + REG_OFFSET(CUIF_ENUM_N4), EN_ALL_MASK);
192 CUIF_REG_WRITE(CUIF_U2C_EN_CLR_BASE + REG_OFFSET(CUIF_ENUM_N5), EN_ALL_EXCEPT_WFI_MASK);
193 CUIF_REG_WRITE(CUIF_U2C_EN_CLR_BASE + REG_OFFSET(CUIF_ENUM_N6), EN_ALL_EXCEPT_WFI_MASK);
194 #elif defined(__MD97__) || defined(__MD97P__)
195 CUIF_REG_WRITE(CUIF_U2C_EN_CLR_BASE + REG_OFFSET(CUIF_ENUM_N0), EN_ALL_EXCEPT_WFI_MASK);
196 CUIF_REG_WRITE(CUIF_U2C_EN_CLR_BASE + REG_OFFSET(CUIF_ENUM_N1), EN_ALL_EXCEPT_WFI_MASK);
197 CUIF_REG_WRITE(CUIF_U2C_EN_CLR_BASE + REG_OFFSET(CUIF_ENUM_N2), EN_ALL_EXCEPT_WFI_MASK);
198 CUIF_REG_WRITE(CUIF_U2C_EN_CLR_BASE + REG_OFFSET(CUIF_ENUM_N3), EN_ALL_EXCEPT_WFI_MASK);
199 CUIF_REG_WRITE(CUIF_U2C_EN_CLR_BASE + REG_OFFSET(CUIF_ENUM_N4), EN_ALL_EXCEPT_WFI_MASK);
200 CUIF_REG_WRITE(CUIF_U2C_EN_CLR_BASE + REG_OFFSET(CUIF_ENUM_N5), EN_ALL_EXCEPT_WFI_MASK);
201 CUIF_REG_WRITE(CUIF_U2C_EN_CLR_BASE + REG_OFFSET(CUIF_ENUM_N6), EN_ALL_EXCEPT_WFI_MASK);
202 CUIF_REG_WRITE(CUIF_U2C_EN_CLR_BASE + REG_OFFSET(CUIF_ENUM_N7), EN_ALL_EXCEPT_WFI_MASK);
203 CUIF_REG_WRITE(CUIF_U2C_EN_CLR_BASE + REG_OFFSET(CUIF_ENUM_N8), EN_ALL_EXCEPT_WFI_MASK);
204 CUIF_REG_WRITE(CUIF_U2C_EN_CLR_BASE + REG_OFFSET(CUIF_ENUM_N9), EN_ALL_EXCEPT_WFI_MASK);
205 CUIF_REG_WRITE(CUIF_U2C_EN_CLR_BASE + REG_OFFSET(CUIF_ENUM_N10), EN_ALL_EXCEPT_WFI_MASK);
206 CUIF_REG_WRITE(CUIF_U2C_EN_CLR_BASE + REG_OFFSET(CUIF_ENUM_N11), EN_ALL_EXCEPT_WFI_MASK);
207 CUIF_REG_WRITE(CUIF_U2C_EN_CLR_BASE + REG_OFFSET(CUIF_ENUM_N12), EN_ALL_EXCEPT_WFI_MASK);
208 CUIF_REG_WRITE(CUIF_U2C_EN_CLR_BASE + REG_OFFSET(CUIF_ENUM_N13), EN_ALL_EXCEPT_WFI_MASK);
209 #endif
210}
211
212void CUIF_EnableInterrupt()
213{
214 #if defined(__MD93__)
215 CUIF_REG_WRITE(CUIF_U2C_EN_SET_BASE + REG_OFFSET(CUIF_ENUM_N0), EN_ALL_EXCEPT_WFI_MASK);
216 CUIF_REG_WRITE(CUIF_U2C_EN_SET_BASE + REG_OFFSET(CUIF_ENUM_N1), EN_ALL_MASK);
217 CUIF_REG_WRITE(CUIF_U2C_EN_SET_BASE + REG_OFFSET(CUIF_ENUM_N2), EN_ALL_MASK);
218 CUIF_REG_WRITE(CUIF_U2C_EN_SET_BASE + REG_OFFSET(CUIF_ENUM_N3), EN_ALL_MASK);
219 CUIF_REG_WRITE(CUIF_U2C_EN_SET_BASE + REG_OFFSET(CUIF_ENUM_N4), EN_ALL_EXCEPT_WFI_MASK);
220 #elif defined(__MD95__)
221 CUIF_REG_WRITE(CUIF_U2C_EN_SET_BASE + REG_OFFSET(CUIF_ENUM_N0), EN_ALL_EXCEPT_WFI_MASK);
222 CUIF_REG_WRITE(CUIF_U2C_EN_SET_BASE + REG_OFFSET(CUIF_ENUM_N1), EN_ALL_MASK);
223 CUIF_REG_WRITE(CUIF_U2C_EN_SET_BASE + REG_OFFSET(CUIF_ENUM_N2), EN_ALL_MASK);
224 CUIF_REG_WRITE(CUIF_U2C_EN_SET_BASE + REG_OFFSET(CUIF_ENUM_N3), EN_ALL_MASK);
225 CUIF_REG_WRITE(CUIF_U2C_EN_SET_BASE + REG_OFFSET(CUIF_ENUM_N4), EN_ALL_MASK);
226 CUIF_REG_WRITE(CUIF_U2C_EN_SET_BASE + REG_OFFSET(CUIF_ENUM_N5), EN_ALL_EXCEPT_WFI_MASK);
227 CUIF_REG_WRITE(CUIF_U2C_EN_SET_BASE + REG_OFFSET(CUIF_ENUM_N6), EN_ALL_EXCEPT_WFI_MASK);
228 #elif defined(__MD97__) || defined(__MD97P__)
229 CUIF_REG_WRITE(CUIF_U2C_EN_SET_BASE + REG_OFFSET(CUIF_ENUM_N0), EN_ALL_EXCEPT_WFI_MASK);
230 CUIF_REG_WRITE(CUIF_U2C_EN_SET_BASE + REG_OFFSET(CUIF_ENUM_N1), EN_ALL_EXCEPT_WFI_MASK);
231 CUIF_REG_WRITE(CUIF_U2C_EN_SET_BASE + REG_OFFSET(CUIF_ENUM_N2), EN_ALL_EXCEPT_WFI_MASK);
232 CUIF_REG_WRITE(CUIF_U2C_EN_SET_BASE + REG_OFFSET(CUIF_ENUM_N3), EN_ALL_EXCEPT_WFI_MASK);
233 CUIF_REG_WRITE(CUIF_U2C_EN_SET_BASE + REG_OFFSET(CUIF_ENUM_N4), EN_ALL_EXCEPT_WFI_MASK);
234 CUIF_REG_WRITE(CUIF_U2C_EN_SET_BASE + REG_OFFSET(CUIF_ENUM_N5), EN_ALL_EXCEPT_WFI_MASK);
235 CUIF_REG_WRITE(CUIF_U2C_EN_SET_BASE + REG_OFFSET(CUIF_ENUM_N6), EN_ALL_EXCEPT_WFI_MASK);
236 CUIF_REG_WRITE(CUIF_U2C_EN_SET_BASE + REG_OFFSET(CUIF_ENUM_N7), EN_ALL_EXCEPT_WFI_MASK);
237 CUIF_REG_WRITE(CUIF_U2C_EN_SET_BASE + REG_OFFSET(CUIF_ENUM_N8), EN_ALL_EXCEPT_WFI_MASK);
238 CUIF_REG_WRITE(CUIF_U2C_EN_SET_BASE + REG_OFFSET(CUIF_ENUM_N9), EN_ALL_EXCEPT_WFI_MASK);
239 CUIF_REG_WRITE(CUIF_U2C_EN_SET_BASE + REG_OFFSET(CUIF_ENUM_N10), EN_ALL_EXCEPT_WFI_MASK);
240 CUIF_REG_WRITE(CUIF_U2C_EN_SET_BASE + REG_OFFSET(CUIF_ENUM_N11), EN_ALL_EXCEPT_WFI_MASK);
241 CUIF_REG_WRITE(CUIF_U2C_EN_SET_BASE + REG_OFFSET(CUIF_ENUM_N12), EN_ALL_EXCEPT_WFI_MASK);
242 CUIF_REG_WRITE(CUIF_U2C_EN_SET_BASE + REG_OFFSET(CUIF_ENUM_N13), EN_ALL_EXCEPT_WFI_MASK);
243 #endif
244}
245
246void CUIF_ENABLE_ALL_CHECK()
247{
248 cuif_uint8 nID;
249 cuif_uint32 set_mask;
250 cuif_uint32 get_mask;
251 cuif_uint8 irq_num;
252
253 for(nID = 0; nID < CUIF_ENUM_ALL_MCU_INT_NUM - 1; nID++)
254 {
255 #if defined(__MD93__)
256 if (nID == 0 || nID == 4)
257 { // skip WFI bits
258 irq_num = 4;
259 }
260 else
261 {
262 irq_num = 0;
263 }
264 #elif defined(__MD95__)
265 if (nID == 0 || nID == 5 || nID == 6)
266 { // skip WFI bits
267 irq_num = 6;
268 }
269 else
270 {
271 irq_num = 0;
272 }
273 #elif defined(__MD97__) || defined(__MD97P__)
274 irq_num = 6;
275 #endif
276
277 set_mask = 0;
278 for(; irq_num < cuif_u2c_int_source_num[nID]; irq_num++)
279 {
280 set_mask |= 1 << irq_num;
281 }
282 get_mask = CUIF_REG_READ(CUIF_U2C_EN_BASE + REG_OFFSET(nID));
283 CUIF_DRV_TEST_ASSERT_EQ(get_mask, set_mask);
284 dbg_print("Enable n%d - Pass\n", nID);
285 }
286}
287
288void CUIF_DISABLE_ALL_CHECK()
289{
290 CUIF_Mask_t mask;
291
292 CUIF_N0_EN_STATUS(&mask);
293 CUIF_DRV_TEST_ASSERT_EQ(mask.mask31_0, 0x0);
294
295 CUIF_N1_EN_STATUS(&mask);
296 CUIF_DRV_TEST_ASSERT_EQ(mask.mask31_0, 0x0);
297
298 CUIF_N2_EN_STATUS(&mask);
299 CUIF_DRV_TEST_ASSERT_EQ(mask.mask31_0, 0x0);
300
301 CUIF_N3_EN_STATUS(&mask);
302 CUIF_DRV_TEST_ASSERT_EQ(mask.mask31_0, 0x0);
303
304 CUIF_N4_EN_STATUS(&mask);
305 CUIF_DRV_TEST_ASSERT_EQ(mask.mask31_0, 0x0);
306
307 #if defined(__MD95__) || defined(__MD97__) || defined(__MD97P__)
308 CUIF_N5_EN_STATUS(&mask);
309 CUIF_DRV_TEST_ASSERT_EQ(mask.mask31_0, 0x0);
310
311 CUIF_N6_EN_STATUS(&mask);
312 CUIF_DRV_TEST_ASSERT_EQ(mask.mask31_0, 0x0);
313 #endif
314
315 #if defined(__MD97__) || defined(__MD97P__)
316 CUIF_N7_EN_STATUS(&mask);
317 CUIF_DRV_TEST_ASSERT_EQ(mask.mask31_0, 0x0);
318
319 CUIF_N8_EN_STATUS(&mask);
320 CUIF_DRV_TEST_ASSERT_EQ(mask.mask31_0, 0x0);
321
322 CUIF_N9_EN_STATUS(&mask);
323 CUIF_DRV_TEST_ASSERT_EQ(mask.mask31_0, 0x0);
324
325 CUIF_N10_EN_STATUS(&mask);
326 CUIF_DRV_TEST_ASSERT_EQ(mask.mask31_0, 0x0);
327
328 CUIF_N11_EN_STATUS(&mask);
329 CUIF_DRV_TEST_ASSERT_EQ(mask.mask31_0, 0x0);
330
331 CUIF_N12_EN_STATUS(&mask);
332 CUIF_DRV_TEST_ASSERT_EQ(mask.mask31_0, 0x0);
333
334 CUIF_N13_EN_STATUS(&mask);
335 CUIF_DRV_TEST_ASSERT_EQ(mask.mask31_0, 0x0);
336 #endif
337}
338
339void CUIF_EN_STA_API_TEST()
340{
341 CUIF_EnableInterrupt();
342 CUIF_ENABLE_ALL_CHECK();
343 CUIF_DisableInterrupt();
344 CUIF_DISABLE_ALL_CHECK();
345}
346
347void CUIF_DriverAPITest()
348{
349 cuif_uint8 mID;
350 cuif_uint8 nID;
351
352 CUIF_EN_STA_API_TEST();
353
354#if 0
355/* under construction !*/
356#else
357 for(mID = 0; mID < 1; mID++)
358#endif
359 {
360 for(nID = 0; nID < CUIF_ENUM_ALL_MCU_INT_NUM - 1; nID++)
361 {
362 CUIF_DriverAPIU2CTest(mID, nID);
363 CUIF_DriverAPIC2UTest(mID, nID);
364 }
365 }
366}
367
368void CUIF_ClearPendingInterrupt()
369{
370#if 0
371/* under construction !*/
372/* under construction !*/
373#endif
374}
375
376void CUIF_InterruptTest()
377{
378 cuif_uint8 mID;
379 cuif_uint8 nID;
380
381 for(nID = 0; nID < CUIF_ENUM_ALL_MCU_INT_NUM - 1; nID++)
382 {
383 CUIF_DriverISRTestU2C(nID, 1, CUIF_ENUM_INNER);
384 }
385
386#if 0
387/* under construction !*/
388#else
389 for(mID = 0; mID < 1; mID++)
390#endif
391
392 {
393 CUIF_DriverISRTestC2U(mID, 1);
394 }
395
396 for(nID = 0; nID < CUIF_ENUM_ALL_MCU_INT_NUM - 1; nID++)
397 {
398 CUIF_DriverISRTestU2C(nID, 2, CUIF_ENUM_INNER);
399 }
400
401#if 0
402/* under construction !*/
403#else
404 for(mID = 0; mID < 1; mID++)
405#endif
406
407 {
408 CUIF_DriverISRTestC2U(mID, 2);
409 }
410}
411
412/* how to run cuif driver test ? */
413/* MD32 Side: insert CUIF_DriverTest to basic load function */
414/* CR4 Side: insert CUIF_DriverTest to idle task function */
415
416void CUIF_DriverTest()
417{
418#if __CUIF_MD32S_CORE__
419 extern void CUIF_DriverInitTest();
420 CUIF_DriverInitTest();
421#endif
422
423 CUIF_DisableInterrupt();
424 dbg_print("-- CUIF API Test Start.\n");
425 CUIF_DisableInterrupt();
426 CUIF_DriverAPITest();
427 dbg_print("-- CUIF API Test End.\n");
428
429 dbg_print("-- CUIF Interrupt Start.\n");
430 CUIF_EnableInterrupt();
431 CUIF_InterruptTest();
432 dbg_print("-- CUIF Interrupt End.\n");
433
434 while(1);
435
436}
437
438#endif /* __CUIF_DRV_TEST__ */
439