]> git.donarmstrong.com Git - qmk_firmware.git/blob - tool/mbed/mbed-sdk/libraries/USBHost/USBHost/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/common/usb0_host_lib.c
Squashed 'tmk_core/' changes from 7967731..b9e0ea0
[qmk_firmware.git] / tool / mbed / mbed-sdk / libraries / USBHost / USBHost / TARGET_RENESAS / TARGET_RZ_A1H / usb0 / src / common / usb0_host_lib.c
1 /*******************************************************************************
2 * DISCLAIMER
3 * This software is supplied by Renesas Electronics Corporation and is only
4 * intended for use with Renesas products. No other uses are authorized. This
5 * software is owned by Renesas Electronics Corporation and is protected under
6 * all applicable laws, including copyright laws.
7 * THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
8 * THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
9 * LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
10 * AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
11 * TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
12 * ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
13 * FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
14 * ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
15 * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
16 * Renesas reserves the right, without notice, to make changes to this software
17 * and to discontinue the availability of this software. By using this software,
18 * you agree to the additional terms and conditions found by accessing the
19 * following link:
20 * http://www.renesas.com/disclaimer
21 * Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
22 *******************************************************************************/
23 /*******************************************************************************
24 * File Name    : usb0_host_lib.c
25 * $Rev: 1116 $
26 * $Date:: 2014-07-09 16:29:19 +0900#$
27 * Device(s)    : RZ/A1H
28 * Tool-Chain   :
29 * OS           : None
30 * H/W Platform :
31 * Description  : RZ/A1H R7S72100 USB Sample Program
32 * Operation    :
33 * Limitations  :
34 *******************************************************************************/
35
36
37 /*******************************************************************************
38 Includes   <System Includes> , "Project Includes"
39 *******************************************************************************/
40 #include "usb0_host.h"
41 #if(1) /* ohci_wrapp */
42 #include "MBRZA1H.h"            /* INTC Driver Header   */
43 #else
44 #include "devdrv_intc.h"        /* INTC Driver Header   */
45 #endif
46
47
48 /*******************************************************************************
49 Typedef definitions
50 *******************************************************************************/
51
52
53 /*******************************************************************************
54 Macro definitions
55 *******************************************************************************/
56
57
58 /*******************************************************************************
59 Imported global variables and functions (from other files)
60 *******************************************************************************/
61
62
63 /*******************************************************************************
64 Exported global variables and functions (to be accessed by other files)
65 *******************************************************************************/
66
67
68 /*******************************************************************************
69 Private global variables and functions
70 *******************************************************************************/
71
72
73 /*******************************************************************************
74 * Function Name: usb0_host_enable_brdy_int
75 * Description  : Enables BRDY interrupt in the pipe spceified by the argument.
76 *              : Disables BEMP/NRDY/BRDY interrupts in all pipes before enabling
77 *              : BRDY. Enables BRDY interrupt in the pipe specified by the argument
78 *              : in the disabled status. After enabling BRDY, recover all
79 *              : BEMP/NRDY/BRDY disabled/enabled status.
80 * Arguments    : uint16_t pipe           ; pipe Number
81 * Return Value : none
82 *******************************************************************************/
83 void usb0_host_enable_brdy_int (uint16_t pipe)
84 {
85     /* enable brdy interrupt */
86     USB200.BRDYENB |= (uint16_t)g_usb0_host_bit_set[pipe];
87 }
88
89 /*******************************************************************************
90 * Function Name: usb0_host_disable_brdy_int
91 * Description  : Disables BRDY interrupt in the pipe spceified by the argument.
92 *              : Disables BEMP/NRDY/BRDY interrupts in all pipes before disabling
93 *              : BRDY. Enables BRDY interrupt in the pipe specified by the argument
94 *              : in the disabled status. After disabling BRDY, recover all
95 *              : BEMP/NRDY/BRDY disabled/enabled status.
96 * Arguments    : uint16_t pipe        ; pipe Number
97 * Return Value : none
98 *******************************************************************************/
99 void usb0_host_disable_brdy_int (uint16_t pipe)
100 {
101     /* disable brdy interrupt */
102     USB200.BRDYENB &= (uint16_t)~(g_usb0_host_bit_set[pipe]);
103 }
104
105 /*******************************************************************************
106 * Function Name: usb0_host_clear_brdy_sts
107 * Description  : Clear BRDY interrupt status in the pipe spceified by the argument.
108 * Arguments    : uint16_t pipe        ; pipe Number
109 * Return Value : none
110 *******************************************************************************/
111 void usb0_host_clear_brdy_sts (uint16_t pipe)
112 {
113     /* clear brdy status */
114     USB200.BRDYSTS = (uint16_t)~(g_usb0_host_bit_set[pipe]);
115 }
116
117 /*******************************************************************************
118 * Function Name: usb0_host_enable_bemp_int
119 * Description  : Enables BEMP interrupt in the pipe spceified by the argument.
120 *              : Disables BEMP/NRDY/BRDY interrupts in all pipes before enabling
121 *              : BEMP. Enables BEMP interrupt in the pipe specified by the argument
122 *              : in the disabled status. After enabling BEMP, recover all
123 *              : BEMP/NRDY/BRDY disabled/enabled status.
124 * Arguments    : uint16_t pipe           ; pipe Number
125 * Return Value : none
126 *******************************************************************************/
127 void usb0_host_enable_bemp_int (uint16_t pipe)
128 {
129     /* enable bemp interrupt */
130     USB200.BEMPENB |= (uint16_t)g_usb0_host_bit_set[pipe];
131 }
132
133 /*******************************************************************************
134 * Function Name: usb0_host_disable_bemp_int
135 * Description  : Disables BEMP interrupt in the pipe spceified by the argument.
136 *              : Disables BEMP/NRDY/BRDY interrupts in all pipes before disabling
137 *              : BEMP. Enables BEMP interrupt in the pipe specified by the argument
138 *              : in the disabled status. After enabling BEMP, recover all
139 *              : BEMP/NRDY/BRDY disabled/enabled status.
140 * Arguments    : uint16_t pipe           ; pipe Number
141 * Return Value : none
142 *******************************************************************************/
143 void usb0_host_disable_bemp_int (uint16_t pipe)
144 {
145     /* disable bemp interrupt */
146     USB200.BEMPENB &= (uint16_t)~(g_usb0_host_bit_set[pipe]);
147 }
148
149 /*******************************************************************************
150 * Function Name: usb0_host_clear_bemp_sts
151 * Description  : Clear BEMP interrupt status in the pipe spceified by the argument.
152 * Arguments    : uint16_t pipe        ; pipe Number
153 * Return Value : none
154 *******************************************************************************/
155 void usb0_host_clear_bemp_sts (uint16_t pipe)
156 {
157     /* clear bemp status */
158     USB200.BEMPSTS = (uint16_t)~(g_usb0_host_bit_set[pipe]);
159 }
160
161 /*******************************************************************************
162 * Function Name: usb0_host_enable_nrdy_int
163 * Description  : Enables NRDY interrupt in the pipe spceified by the argument.
164 *              : Disables BEMP/NRDY/BRDY interrupts in all pipes before enabling
165 *              : NRDY. Enables NRDY interrupt in the pipe specified by the argument
166 *              : in the disabled status. After enabling NRDY, recover all
167 *              : BEMP/NRDY/BRDY disabled/enabled status.
168 * Arguments    : uint16_t pipe             ; pipe Number
169 * Return Value : none
170 *******************************************************************************/
171 void usb0_host_enable_nrdy_int (uint16_t pipe)
172 {
173     /* enable nrdy interrupt */
174     USB200.NRDYENB |= (uint16_t)g_usb0_host_bit_set[pipe];
175 }
176
177 /*******************************************************************************
178 * Function Name: usb0_host_disable_nrdy_int
179 * Description  : Disables NRDY interrupt in the pipe spceified by the argument.
180 *              : Disables BEMP/NRDY/BRDY interrupts in all pipes before disabling
181 *              : NRDY. Disables NRDY interrupt in the pipe specified by the argument
182 *              : in the disabled status. After disabling NRDY, recover all
183 *              : BEMP/NRDY/BRDY disabled/enabled status.
184 * Arguments    : uint16_t pipe            ; pipe Number
185 * Return Value : none
186 *******************************************************************************/
187 void usb0_host_disable_nrdy_int (uint16_t pipe)
188 {
189     /* disable nrdy interrupt */
190     USB200.NRDYENB &= (uint16_t)~(g_usb0_host_bit_set[pipe]);
191 }
192
193 /*******************************************************************************
194 * Function Name: usb0_host_clear_nrdy_sts
195 * Description  : Clear NRDY interrupt status in the pipe spceified by the argument.
196 * Arguments    : uint16_t pipe        ; pipe Number
197 * Return Value : none
198 *******************************************************************************/
199 void usb0_host_clear_nrdy_sts (uint16_t pipe)
200 {
201     /* clear nrdy status */
202     USB200.NRDYSTS = (uint16_t)~(g_usb0_host_bit_set[pipe]);
203 }
204
205 /*******************************************************************************
206 * Function Name: usb0_host_is_hispeed
207 * Description  : Returns the result of USB reset hand shake (RHST) as
208 *              : return value.
209 * Arguments    : none
210 * Return Value : USB_HOST_HIGH_SPEED  ; Hi-Speed
211 *              : USB_HOST_FULL_SPEED  ; Full-Speed
212 *              : USB_HOST_LOW_SPEED   ; Low-Speed
213 *              : USB_HOST_NON_SPEED   ; error
214 *******************************************************************************/
215 uint16_t usb0_host_is_hispeed (void)
216 {
217     uint16_t rhst;
218     uint16_t speed;
219
220     rhst = RZA_IO_RegRead_16(&USB200.DVSTCTR0,
221                                 USB_DVSTCTR0_RHST_SHIFT,
222                                 USB_DVSTCTR0_RHST);
223     if (rhst == USB_HOST_HSMODE)
224     {
225         speed = USB_HOST_HIGH_SPEED;
226     }
227     else if (rhst == USB_HOST_FSMODE)
228     {
229         speed = USB_HOST_FULL_SPEED;
230     }
231     else if (rhst == USB_HOST_LSMODE)
232     {
233         speed = USB_HOST_LOW_SPEED;
234     }
235     else
236     {
237         speed = USB_HOST_NON_SPEED;
238     }
239
240     return speed;
241 }
242
243 /*******************************************************************************
244 * Function Name: usb0_host_is_hispeed_enable
245 * Description  : Returns the USB High-Speed connection enabled status as
246 *              : return value.
247 * Arguments    : none
248 * Return Value : USB_HOST_YES : Hi-Speed Enable
249 *              : USB_HOST_NO  : Hi-Speed Disable
250 *******************************************************************************/
251 uint16_t usb0_host_is_hispeed_enable (void)
252 {
253     uint16_t ret;
254
255     ret = USB_HOST_NO;
256
257     if (RZA_IO_RegRead_16(&USB200.SYSCFG0,
258                                 USB_SYSCFG_HSE_SHIFT,
259                                 USB_SYSCFG_HSE) == 1)
260     {
261         ret = USB_HOST_YES;
262     }
263
264     return ret;
265 }
266
267 /*******************************************************************************
268 * Function Name: usb0_host_set_pid_buf
269 * Description  : Enables communicaqtion in the pipe specified by the argument
270 *              : (BUF).
271 * Arguments    : uint16_t pipe             ; pipe Number
272 * Return Value : none
273 *******************************************************************************/
274 void usb0_host_set_pid_buf (uint16_t pipe)
275 {
276     uint16_t pid;
277
278     pid = usb0_host_get_pid(pipe);
279
280     if (pid == USB_HOST_PID_STALL2)
281     {
282         usb0_host_set_pid_nak(pipe);
283     }
284
285     switch (pipe)
286     {
287         case USB_HOST_PIPE0:
288             RZA_IO_RegWrite_16(&USB200.DCPCTR,
289                                 USB_HOST_PID_BUF,
290                                 USB_DCPCTR_PID_SHIFT,
291                                 USB_DCPCTR_PID);
292         break;
293
294         case USB_HOST_PIPE1:
295             RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
296                                 USB_HOST_PID_BUF,
297                                 USB_PIPEnCTR_1_5_PID_SHIFT,
298                                 USB_PIPEnCTR_1_5_PID);
299         break;
300
301         case USB_HOST_PIPE2:
302             RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
303                                 USB_HOST_PID_BUF,
304                                 USB_PIPEnCTR_1_5_PID_SHIFT,
305                                 USB_PIPEnCTR_1_5_PID);
306         break;
307
308         case USB_HOST_PIPE3:
309             RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
310                                 USB_HOST_PID_BUF,
311                                 USB_PIPEnCTR_1_5_PID_SHIFT,
312                                 USB_PIPEnCTR_1_5_PID);
313         break;
314
315         case USB_HOST_PIPE4:
316             RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
317                                 USB_HOST_PID_BUF,
318                                 USB_PIPEnCTR_1_5_PID_SHIFT,
319                                 USB_PIPEnCTR_1_5_PID);
320         break;
321
322         case USB_HOST_PIPE5:
323             RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
324                                 USB_HOST_PID_BUF,
325                                 USB_PIPEnCTR_1_5_PID_SHIFT,
326                                 USB_PIPEnCTR_1_5_PID);
327         break;
328
329         case USB_HOST_PIPE6:
330             RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
331                                 USB_HOST_PID_BUF,
332                                 USB_PIPEnCTR_6_8_PID_SHIFT,
333                                 USB_PIPEnCTR_6_8_PID);
334         break;
335
336         case USB_HOST_PIPE7:
337             RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
338                                 USB_HOST_PID_BUF,
339                                 USB_PIPEnCTR_6_8_PID_SHIFT,
340                                 USB_PIPEnCTR_6_8_PID);
341         break;
342
343         case USB_HOST_PIPE8:
344             RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
345                                 USB_HOST_PID_BUF,
346                                 USB_PIPEnCTR_6_8_PID_SHIFT,
347                                 USB_PIPEnCTR_6_8_PID);
348         break;
349
350         case USB_HOST_PIPE9:
351             RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
352                                 USB_HOST_PID_BUF,
353                                 USB_PIPEnCTR_9_PID_SHIFT,
354                                 USB_PIPEnCTR_9_PID);
355         break;
356
357         default:
358         break;
359     }
360 }
361
362 /*******************************************************************************
363 * Function Name: usb0_host_set_pid_nak
364 * Description  : Disables communication (NAK) in the pipe specified by the argument.
365 *              : When the pipe status was enabling communication (BUF) before
366 *              : executing before executing this function, waits in the software
367 *              : until the pipe becomes ready after setting disabled.
368 * Arguments    : uint16_t pipe            ; pipe Number
369 * Return Value : none
370 *******************************************************************************/
371 void usb0_host_set_pid_nak (uint16_t pipe)
372 {
373     uint16_t pid;
374     uint16_t pbusy;
375     uint32_t loop;
376
377     pid = usb0_host_get_pid(pipe);
378
379     if (pid == USB_HOST_PID_STALL2)
380     {
381         usb0_host_set_pid_stall(pipe);
382     }
383
384     switch (pipe)
385     {
386         case USB_HOST_PIPE0:
387             RZA_IO_RegWrite_16(&USB200.DCPCTR,
388                                 USB_HOST_PID_NAK,
389                                 USB_DCPCTR_PID_SHIFT,
390                                 USB_DCPCTR_PID);
391         break;
392
393         case USB_HOST_PIPE1:
394             RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
395                                 USB_HOST_PID_NAK,
396                                 USB_PIPEnCTR_1_5_PID_SHIFT,
397                                 USB_PIPEnCTR_1_5_PID);
398         break;
399
400         case USB_HOST_PIPE2:
401             RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
402                                 USB_HOST_PID_NAK,
403                                 USB_PIPEnCTR_1_5_PID_SHIFT,
404                                 USB_PIPEnCTR_1_5_PID);
405         break;
406
407         case USB_HOST_PIPE3:
408             RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
409                                 USB_HOST_PID_NAK,
410                                 USB_PIPEnCTR_1_5_PID_SHIFT,
411                                 USB_PIPEnCTR_1_5_PID);
412         break;
413
414         case USB_HOST_PIPE4:
415             RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
416                                 USB_HOST_PID_NAK,
417                                 USB_PIPEnCTR_1_5_PID_SHIFT,
418                                 USB_PIPEnCTR_1_5_PID);
419         break;
420
421         case USB_HOST_PIPE5:
422             RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
423                                 USB_HOST_PID_NAK,
424                                 USB_PIPEnCTR_1_5_PID_SHIFT,
425                                 USB_PIPEnCTR_1_5_PID);
426         break;
427
428         case USB_HOST_PIPE6:
429             RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
430                                 USB_HOST_PID_NAK,
431                                 USB_PIPEnCTR_6_8_PID_SHIFT,
432                                 USB_PIPEnCTR_6_8_PID);
433         break;
434
435         case USB_HOST_PIPE7:
436             RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
437                                 USB_HOST_PID_NAK,
438                                 USB_PIPEnCTR_6_8_PID_SHIFT,
439                                 USB_PIPEnCTR_6_8_PID);
440         break;
441
442         case USB_HOST_PIPE8:
443             RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
444                                 USB_HOST_PID_NAK,
445                                 USB_PIPEnCTR_6_8_PID_SHIFT,
446                                 USB_PIPEnCTR_6_8_PID);
447         break;
448
449         case USB_HOST_PIPE9:
450             RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
451                                 USB_HOST_PID_NAK,
452                                 USB_PIPEnCTR_9_PID_SHIFT,
453                                 USB_PIPEnCTR_9_PID);
454         break;
455
456         default:
457         break;
458     }
459
460     if (pid == USB_HOST_PID_BUF)
461     {
462         for (loop = 0; loop < 200; loop++)
463         {
464             switch (pipe)
465             {
466                 case USB_HOST_PIPE0:
467                     pbusy = RZA_IO_RegRead_16(&USB200.DCPCTR,
468                                                 USB_DCPCTR_PBUSY_SHIFT,
469                                                 USB_DCPCTR_PBUSY);
470                 break;
471
472                 case USB_HOST_PIPE1:
473                     pbusy = RZA_IO_RegRead_16(&USB200.PIPE1CTR,
474                                                 USB_PIPEnCTR_1_5_PBUSY_SHIFT,
475                                                 USB_PIPEnCTR_1_5_PBUSY);
476                 break;
477
478                 case USB_HOST_PIPE2:
479                     pbusy = RZA_IO_RegRead_16(&USB200.PIPE2CTR,
480                                                 USB_PIPEnCTR_1_5_PBUSY_SHIFT,
481                                                 USB_PIPEnCTR_1_5_PBUSY);
482                 break;
483
484                 case USB_HOST_PIPE3:
485                     pbusy = RZA_IO_RegRead_16(&USB200.PIPE3CTR,
486                                                 USB_PIPEnCTR_1_5_PBUSY_SHIFT,
487                                                 USB_PIPEnCTR_1_5_PBUSY);
488                 break;
489
490                 case USB_HOST_PIPE4:
491                     pbusy = RZA_IO_RegRead_16(&USB200.PIPE4CTR,
492                                                 USB_PIPEnCTR_1_5_PBUSY_SHIFT,
493                                                 USB_PIPEnCTR_1_5_PBUSY);
494                 break;
495
496                 case USB_HOST_PIPE5:
497                     pbusy = RZA_IO_RegRead_16(&USB200.PIPE5CTR,
498                                                 USB_PIPEnCTR_1_5_PBUSY_SHIFT,
499                                                 USB_PIPEnCTR_1_5_PBUSY);
500                 break;
501
502                 case USB_HOST_PIPE6:
503                     pbusy = RZA_IO_RegRead_16(&USB200.PIPE6CTR,
504                                                 USB_PIPEnCTR_6_8_PBUSY_SHIFT,
505                                                 USB_PIPEnCTR_6_8_PBUSY);
506                 break;
507
508                 case USB_HOST_PIPE7:
509                     pbusy = RZA_IO_RegRead_16(&USB200.PIPE7CTR,
510                                                 USB_PIPEnCTR_6_8_PBUSY_SHIFT,
511                                                 USB_PIPEnCTR_6_8_PBUSY);
512                 break;
513
514                 case USB_HOST_PIPE8:
515                     pbusy = RZA_IO_RegRead_16(&USB200.PIPE8CTR,
516                                                 USB_PIPEnCTR_6_8_PBUSY_SHIFT,
517                                                 USB_PIPEnCTR_6_8_PBUSY);
518                 break;
519
520                 case USB_HOST_PIPE9:
521                     pbusy = RZA_IO_RegRead_16(&USB200.PIPE9CTR,
522                                                 USB_PIPEnCTR_9_PBUSY_SHIFT,
523                                                 USB_PIPEnCTR_9_PBUSY);
524                 break;
525
526                 default:
527                     pbusy = 1;
528                 break;
529             }
530
531             if (pbusy == 0)
532             {
533                 break;
534             }
535
536             Userdef_USB_usb0_host_delay_500ns();
537         }
538     }
539 }
540
541 /*******************************************************************************
542 * Function Name: usb0_host_set_pid_stall
543 * Description  : Disables communication (STALL) in the pipe specified by the
544 *              : argument.
545 * Arguments    : uint16_t pipe            ; pipe Number
546 * Return Value : none
547 *******************************************************************************/
548 void usb0_host_set_pid_stall (uint16_t pipe)
549 {
550     uint16_t pid;
551
552     pid = usb0_host_get_pid(pipe);
553
554     if (pid == USB_HOST_PID_BUF)
555     {
556         switch (pipe)
557         {
558             case USB_HOST_PIPE0:
559                 RZA_IO_RegWrite_16(&USB200.DCPCTR,
560                                     USB_HOST_PID_STALL2,
561                                     USB_DCPCTR_PID_SHIFT,
562                                     USB_DCPCTR_PID);
563             break;
564
565             case USB_HOST_PIPE1:
566                 RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
567                                     USB_HOST_PID_STALL2,
568                                     USB_PIPEnCTR_1_5_PID_SHIFT,
569                                     USB_PIPEnCTR_1_5_PID);
570             break;
571
572             case USB_HOST_PIPE2:
573                 RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
574                                     USB_HOST_PID_STALL2,
575                                     USB_PIPEnCTR_1_5_PID_SHIFT,
576                                     USB_PIPEnCTR_1_5_PID);
577             break;
578
579             case USB_HOST_PIPE3:
580                 RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
581                                     USB_HOST_PID_STALL2,
582                                     USB_PIPEnCTR_1_5_PID_SHIFT,
583                                     USB_PIPEnCTR_1_5_PID);
584             break;
585
586             case USB_HOST_PIPE4:
587                 RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
588                                     USB_HOST_PID_STALL2,
589                                     USB_PIPEnCTR_1_5_PID_SHIFT,
590                                     USB_PIPEnCTR_1_5_PID);
591             break;
592
593             case USB_HOST_PIPE5:
594                 RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
595                                     USB_HOST_PID_STALL2,
596                                     USB_PIPEnCTR_1_5_PID_SHIFT,
597                                     USB_PIPEnCTR_1_5_PID);
598             break;
599
600             case USB_HOST_PIPE6:
601                 RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
602                                     USB_HOST_PID_STALL2,
603                                     USB_PIPEnCTR_6_8_PID_SHIFT,
604                                     USB_PIPEnCTR_6_8_PID);
605             break;
606
607             case USB_HOST_PIPE7:
608                 RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
609                                     USB_HOST_PID_STALL2,
610                                     USB_PIPEnCTR_6_8_PID_SHIFT,
611                                     USB_PIPEnCTR_6_8_PID);
612             break;
613
614             case USB_HOST_PIPE8:
615                 RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
616                                     USB_HOST_PID_STALL2,
617                                     USB_PIPEnCTR_6_8_PID_SHIFT,
618                                     USB_PIPEnCTR_6_8_PID);
619             break;
620
621             case USB_HOST_PIPE9:
622                 RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
623                                     USB_HOST_PID_STALL2,
624                                     USB_PIPEnCTR_9_PID_SHIFT,
625                                     USB_PIPEnCTR_9_PID);
626             break;
627
628             default:
629             break;
630         }
631     }
632     else
633     {
634         switch (pipe)
635         {
636             case USB_HOST_PIPE0:
637                 RZA_IO_RegWrite_16(&USB200.DCPCTR,
638                                     USB_HOST_PID_STALL,
639                                     USB_DCPCTR_PID_SHIFT,
640                                     USB_DCPCTR_PID);
641             break;
642
643             case USB_HOST_PIPE1:
644                 RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
645                                     USB_HOST_PID_STALL,
646                                     USB_PIPEnCTR_1_5_PID_SHIFT,
647                                     USB_PIPEnCTR_1_5_PID);
648             break;
649
650             case USB_HOST_PIPE2:
651                 RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
652                                     USB_HOST_PID_STALL,
653                                     USB_PIPEnCTR_1_5_PID_SHIFT,
654                                     USB_PIPEnCTR_1_5_PID);
655             break;
656
657             case USB_HOST_PIPE3:
658                 RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
659                                     USB_HOST_PID_STALL,
660                                     USB_PIPEnCTR_1_5_PID_SHIFT,
661                                     USB_PIPEnCTR_1_5_PID);
662             break;
663
664             case USB_HOST_PIPE4:
665                 RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
666                                     USB_HOST_PID_STALL,
667                                     USB_PIPEnCTR_1_5_PID_SHIFT,
668                                     USB_PIPEnCTR_1_5_PID);
669             break;
670
671             case USB_HOST_PIPE5:
672                 RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
673                                     USB_HOST_PID_STALL,
674                                     USB_PIPEnCTR_1_5_PID_SHIFT,
675                                     USB_PIPEnCTR_1_5_PID);
676             break;
677
678             case USB_HOST_PIPE6:
679                 RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
680                                     USB_HOST_PID_STALL,
681                                     USB_PIPEnCTR_6_8_PID_SHIFT,
682                                     USB_PIPEnCTR_6_8_PID);
683             break;
684
685             case USB_HOST_PIPE7:
686                 RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
687                                     USB_HOST_PID_STALL,
688                                     USB_PIPEnCTR_6_8_PID_SHIFT,
689                                     USB_PIPEnCTR_6_8_PID);
690             break;
691
692             case USB_HOST_PIPE8:
693                 RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
694                                     USB_HOST_PID_STALL,
695                                     USB_PIPEnCTR_6_8_PID_SHIFT,
696                                     USB_PIPEnCTR_6_8_PID);
697             break;
698
699             case USB_HOST_PIPE9:
700                 RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
701                                     USB_HOST_PID_STALL,
702                                     USB_PIPEnCTR_9_PID_SHIFT,
703                                     USB_PIPEnCTR_9_PID);
704             break;
705
706             default:
707             break;
708         }
709     }
710 }
711
712 /*******************************************************************************
713 * Function Name: usb0_host_clear_pid_stall
714 * Description  : Disables communication (NAK) in the pipe specified by the argument.
715 * Arguments    : uint16_t pipe            ; pipe Number
716 * Return Value : none
717 *******************************************************************************/
718 void usb0_host_clear_pid_stall (uint16_t pipe)
719 {
720     usb0_host_set_pid_nak(pipe);
721 }
722
723 /*******************************************************************************
724 * Function Name: usb0_host_get_pid
725 * Description  : Returns the pipe state specified by the argument.
726 * Arguments    : uint16_t pipe          ; Pipe Number
727 * Return Value : PID
728 *******************************************************************************/
729 uint16_t usb0_host_get_pid (uint16_t pipe)
730 {
731     uint16_t pid;
732
733     switch (pipe)
734     {
735         case USB_HOST_PIPE0:
736             pid = RZA_IO_RegRead_16(&USB200.DCPCTR,
737                                     USB_DCPCTR_PID_SHIFT,
738                                     USB_DCPCTR_PID);
739         break;
740
741         case USB_HOST_PIPE1:
742             pid = RZA_IO_RegRead_16(&USB200.PIPE1CTR,
743                                     USB_PIPEnCTR_1_5_PID_SHIFT,
744                                     USB_PIPEnCTR_1_5_PID);
745         break;
746
747         case USB_HOST_PIPE2:
748             pid = RZA_IO_RegRead_16(&USB200.PIPE2CTR,
749                                     USB_PIPEnCTR_1_5_PID_SHIFT,
750                                     USB_PIPEnCTR_1_5_PID);
751         break;
752
753         case USB_HOST_PIPE3:
754             pid = RZA_IO_RegRead_16(&USB200.PIPE3CTR,
755                                     USB_PIPEnCTR_1_5_PID_SHIFT,
756                                     USB_PIPEnCTR_1_5_PID);
757         break;
758
759         case USB_HOST_PIPE4:
760             pid = RZA_IO_RegRead_16(&USB200.PIPE4CTR,
761                                     USB_PIPEnCTR_1_5_PID_SHIFT,
762                                     USB_PIPEnCTR_1_5_PID);
763         break;
764
765         case USB_HOST_PIPE5:
766             pid = RZA_IO_RegRead_16(&USB200.PIPE5CTR,
767                                     USB_PIPEnCTR_1_5_PID_SHIFT,
768                                     USB_PIPEnCTR_1_5_PID);
769         break;
770
771         case USB_HOST_PIPE6:
772             pid = RZA_IO_RegRead_16(&USB200.PIPE6CTR,
773                                     USB_PIPEnCTR_6_8_PID_SHIFT,
774                                     USB_PIPEnCTR_6_8_PID);
775         break;
776
777         case USB_HOST_PIPE7:
778             pid = RZA_IO_RegRead_16(&USB200.PIPE7CTR,
779                                     USB_PIPEnCTR_6_8_PID_SHIFT,
780                                     USB_PIPEnCTR_6_8_PID);
781         break;
782
783         case USB_HOST_PIPE8:
784             pid = RZA_IO_RegRead_16(&USB200.PIPE8CTR,
785                                     USB_PIPEnCTR_6_8_PID_SHIFT,
786                                     USB_PIPEnCTR_6_8_PID);
787         break;
788
789         case USB_HOST_PIPE9:
790             pid = RZA_IO_RegRead_16(&USB200.PIPE9CTR,
791                                     USB_PIPEnCTR_9_PID_SHIFT,
792                                     USB_PIPEnCTR_9_PID);
793         break;
794
795         default:
796             pid = 0;
797         break;
798     }
799
800     return pid;
801 }
802
803 /*******************************************************************************
804 * Function Name: usb0_host_set_csclr
805 * Description  : CSPLIT status clear setting of sprit transaction in specified
806 *              : pipe is performed.
807 *              : When SQSET bit or SQCLR bit, and SQSET bit or SQCLR bit
808 *              : in DCPCTR register are continuously changed (when the sequence
809 *              : toggle bit of data PID is continuously changed over two or more pipes),
810 *              : the access cycle with 120 ns and more than 5 cycle bus clock is necessary.
811 *              : Do not set both SQCLR bit and SQSET bit to 1 at the same time.
812 *              : In addition, both bits should be operated after PID is set to NAK.
813 *              : However, when it is set to the isochronous transfer as the transfer type
814 *              : (TYPE=11), writing in SQSET bit is disabled.
815 * Arguments    : uint16_t pipe     ; Pipe number
816 * Return Value : none
817 *******************************************************************************/
818 void usb0_host_set_csclr (uint16_t pipe)
819 {
820     switch (pipe)
821     {
822         case USB_HOST_PIPE0:
823             RZA_IO_RegWrite_16(&USB200.DCPCTR,
824                                 1,
825                                 USB_DCPCTR_CSCLR_SHIFT,
826                                 USB_DCPCTR_CSCLR);
827         break;
828
829         case USB_HOST_PIPE1:
830             RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
831                                 1,
832                                 USB_PIPEnCTR_1_5_CSCLR_SHIFT,
833                                 USB_PIPEnCTR_1_5_CSCLR);
834         break;
835
836         case USB_HOST_PIPE2:
837             RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
838                                 1,
839                                 USB_PIPEnCTR_1_5_CSCLR_SHIFT,
840                                 USB_PIPEnCTR_1_5_CSCLR);
841         break;
842
843         case USB_HOST_PIPE3:
844             RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
845                                 1,
846                                 USB_PIPEnCTR_1_5_CSCLR_SHIFT,
847                                 USB_PIPEnCTR_1_5_CSCLR);
848         break;
849
850         case USB_HOST_PIPE4:
851             RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
852                                 1,
853                                 USB_PIPEnCTR_1_5_CSCLR_SHIFT,
854                                 USB_PIPEnCTR_1_5_CSCLR);
855         break;
856
857         case USB_HOST_PIPE5:
858             RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
859                                 1,
860                                 USB_PIPEnCTR_1_5_CSCLR_SHIFT,
861                                 USB_PIPEnCTR_1_5_CSCLR);
862         break;
863
864         case USB_HOST_PIPE6:
865             RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
866                                 1,
867                                 USB_PIPEnCTR_6_8_CSCLR_SHIFT,
868                                 USB_PIPEnCTR_6_8_CSCLR);
869         break;
870
871         case USB_HOST_PIPE7:
872             RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
873                                 1,
874                                 USB_PIPEnCTR_6_8_CSCLR_SHIFT,
875                                 USB_PIPEnCTR_6_8_CSCLR);
876         break;
877
878         case USB_HOST_PIPE8:
879             RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
880                                 1,
881                                 USB_PIPEnCTR_6_8_CSCLR_SHIFT,
882                                 USB_PIPEnCTR_6_8_CSCLR);
883         break;
884
885         case USB_HOST_PIPE9:
886             RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
887                                 1,
888                                 USB_PIPEnCTR_9_CSCLR_SHIFT,
889                                 USB_PIPEnCTR_9_CSCLR);
890         break;
891
892         default:
893         break;
894     }
895 }
896
897 /*******************************************************************************
898 * Function Name: usb0_host_set_sqclr
899 * Description  : Sets the sequence bit of the pipe specified by the argument to
900 *              : DATA0.
901 * Arguments    : uint16_t pipe              ; Pipe Number
902 * Return Value : none
903 *******************************************************************************/
904 void usb0_host_set_sqclr (uint16_t pipe)
905 {
906     switch (pipe)
907     {
908         case USB_HOST_PIPE0:
909             RZA_IO_RegWrite_16(&USB200.DCPCTR,
910                                 1,
911                                 USB_DCPCTR_SQCLR_SHIFT,
912                                 USB_DCPCTR_SQCLR);
913         break;
914
915         case USB_HOST_PIPE1:
916             RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
917                                 1,
918                                 USB_PIPEnCTR_1_5_SQCLR_SHIFT,
919                                 USB_PIPEnCTR_1_5_SQCLR);
920         break;
921
922         case USB_HOST_PIPE2:
923             RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
924                                 1,
925                                 USB_PIPEnCTR_1_5_SQCLR_SHIFT,
926                                 USB_PIPEnCTR_1_5_SQCLR);
927         break;
928
929         case USB_HOST_PIPE3:
930             RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
931                                 1,
932                                 USB_PIPEnCTR_1_5_SQCLR_SHIFT,
933                                 USB_PIPEnCTR_1_5_SQCLR);
934         break;
935
936         case USB_HOST_PIPE4:
937             RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
938                                 1,
939                                 USB_PIPEnCTR_1_5_SQCLR_SHIFT,
940                                 USB_PIPEnCTR_1_5_SQCLR);
941         break;
942
943         case USB_HOST_PIPE5:
944             RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
945                                 1,
946                                 USB_PIPEnCTR_1_5_SQCLR_SHIFT,
947                                 USB_PIPEnCTR_1_5_SQCLR);
948         break;
949
950         case USB_HOST_PIPE6:
951             RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
952                                 1,
953                                 USB_PIPEnCTR_6_8_SQCLR_SHIFT,
954                                 USB_PIPEnCTR_6_8_SQCLR);
955         break;
956
957         case USB_HOST_PIPE7:
958             RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
959                                 1,
960                                 USB_PIPEnCTR_6_8_SQCLR_SHIFT,
961                                 USB_PIPEnCTR_6_8_SQCLR);
962         break;
963
964         case USB_HOST_PIPE8:
965             RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
966                                 1,
967                                 USB_PIPEnCTR_6_8_SQCLR_SHIFT,
968                                 USB_PIPEnCTR_6_8_SQCLR);
969         break;
970
971         case USB_HOST_PIPE9:
972             RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
973                                 1,
974                                 USB_PIPEnCTR_9_SQCLR_SHIFT,
975                                 USB_PIPEnCTR_9_SQCLR);
976         break;
977
978         default:
979         break;
980     }
981 }
982
983 /*******************************************************************************
984 * Function Name: usb0_host_set_sqset
985 * Description  : Sets the sequence bit of the pipe specified by the argument to
986 *              : DATA1.
987 * Arguments    : uint16_t pipe   ; Pipe number
988 * Return Value : none
989 *******************************************************************************/
990 void usb0_host_set_sqset (uint16_t pipe)
991 {
992     switch (pipe)
993     {
994         case USB_HOST_PIPE0:
995             RZA_IO_RegWrite_16(&USB200.DCPCTR,
996                                 1,
997                                 USB_DCPCTR_SQSET_SHIFT,
998                                 USB_DCPCTR_SQSET);
999         break;
1000
1001         case USB_HOST_PIPE1:
1002             RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
1003                                 1,
1004                                 USB_PIPEnCTR_1_5_SQSET_SHIFT,
1005                                 USB_PIPEnCTR_1_5_SQSET);
1006         break;
1007
1008         case USB_HOST_PIPE2:
1009             RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
1010                                 1,
1011                                 USB_PIPEnCTR_1_5_SQSET_SHIFT,
1012                                 USB_PIPEnCTR_1_5_SQSET);
1013         break;
1014
1015         case USB_HOST_PIPE3:
1016             RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
1017                                 1,
1018                                 USB_PIPEnCTR_1_5_SQSET_SHIFT,
1019                                 USB_PIPEnCTR_1_5_SQSET);
1020         break;
1021
1022         case USB_HOST_PIPE4:
1023             RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
1024                                 1,
1025                                 USB_PIPEnCTR_1_5_SQSET_SHIFT,
1026                                 USB_PIPEnCTR_1_5_SQSET);
1027         break;
1028
1029         case USB_HOST_PIPE5:
1030             RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
1031                                 1,
1032                                 USB_PIPEnCTR_1_5_SQSET_SHIFT,
1033                                 USB_PIPEnCTR_1_5_SQSET);
1034         break;
1035
1036         case USB_HOST_PIPE6:
1037             RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
1038                                 1,
1039                                 USB_PIPEnCTR_6_8_SQSET_SHIFT,
1040                                 USB_PIPEnCTR_6_8_SQSET);
1041         break;
1042
1043         case USB_HOST_PIPE7:
1044             RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
1045                                 1,
1046                                 USB_PIPEnCTR_6_8_SQSET_SHIFT,
1047                                 USB_PIPEnCTR_6_8_SQSET);
1048         break;
1049
1050         case USB_HOST_PIPE8:
1051             RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
1052                                 1,
1053                                 USB_PIPEnCTR_6_8_SQSET_SHIFT,
1054                                 USB_PIPEnCTR_6_8_SQSET);
1055         break;
1056
1057         case USB_HOST_PIPE9:
1058             RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
1059                                 1,
1060                                 USB_PIPEnCTR_9_SQSET_SHIFT,
1061                                 USB_PIPEnCTR_9_SQSET);
1062         break;
1063
1064         default:
1065         break;
1066     }
1067 }
1068
1069 /*******************************************************************************
1070 * Function Name: usb0_host_get_sqmon
1071 * Description  : Toggle bit of specified pipe is obtained
1072 * Arguments    : uint16_t pipe   ; Pipe number
1073 * Return Value : sqmon
1074 *******************************************************************************/
1075 uint16_t usb0_host_get_sqmon (uint16_t pipe)
1076 {
1077     uint16_t sqmon;
1078
1079     switch (pipe)
1080     {
1081         case USB_HOST_PIPE0:
1082             sqmon = RZA_IO_RegRead_16(&USB200.DCPCTR,
1083                                         USB_DCPCTR_SQMON_SHIFT,
1084                                         USB_DCPCTR_SQMON);
1085         break;
1086
1087         case USB_HOST_PIPE1:
1088             sqmon = RZA_IO_RegRead_16(&USB200.PIPE1CTR,
1089                                         USB_PIPEnCTR_1_5_SQMON_SHIFT,
1090                                         USB_PIPEnCTR_1_5_SQMON);
1091         break;
1092
1093         case USB_HOST_PIPE2:
1094             sqmon = RZA_IO_RegRead_16(&USB200.PIPE2CTR,
1095                                         USB_PIPEnCTR_1_5_SQMON_SHIFT,
1096                                         USB_PIPEnCTR_1_5_SQMON);
1097         break;
1098
1099         case USB_HOST_PIPE3:
1100             sqmon = RZA_IO_RegRead_16(&USB200.PIPE3CTR,
1101                                         USB_PIPEnCTR_1_5_SQMON_SHIFT,
1102                                         USB_PIPEnCTR_1_5_SQMON);
1103         break;
1104
1105         case USB_HOST_PIPE4:
1106             sqmon = RZA_IO_RegRead_16(&USB200.PIPE4CTR,
1107                                         USB_PIPEnCTR_1_5_SQMON_SHIFT,
1108                                         USB_PIPEnCTR_1_5_SQMON);
1109         break;
1110
1111         case USB_HOST_PIPE5:
1112             sqmon = RZA_IO_RegRead_16(&USB200.PIPE5CTR,
1113                                         USB_PIPEnCTR_1_5_SQMON_SHIFT,
1114                                         USB_PIPEnCTR_1_5_SQMON);
1115         break;
1116
1117         case USB_HOST_PIPE6:
1118             sqmon = RZA_IO_RegRead_16(&USB200.PIPE6CTR,
1119                                         USB_PIPEnCTR_6_8_SQMON_SHIFT,
1120                                         USB_PIPEnCTR_6_8_SQMON);
1121         break;
1122
1123         case USB_HOST_PIPE7:
1124             sqmon = RZA_IO_RegRead_16(&USB200.PIPE7CTR,
1125                                         USB_PIPEnCTR_6_8_SQMON_SHIFT,
1126                                         USB_PIPEnCTR_6_8_SQMON);
1127         break;
1128
1129         case USB_HOST_PIPE8:
1130             sqmon = RZA_IO_RegRead_16(&USB200.PIPE8CTR,
1131                                         USB_PIPEnCTR_6_8_SQMON_SHIFT,
1132                                         USB_PIPEnCTR_6_8_SQMON);
1133         break;
1134
1135         case USB_HOST_PIPE9:
1136             sqmon = RZA_IO_RegRead_16(&USB200.PIPE9CTR,
1137                                         USB_PIPEnCTR_9_SQMON_SHIFT,
1138                                         USB_PIPEnCTR_9_SQMON);
1139         break;
1140
1141         default:
1142             sqmon = 0;
1143         break;
1144     }
1145
1146     return sqmon;
1147 }
1148
1149 /*******************************************************************************
1150 * Function Name: usb0_host_aclrm
1151 * Description  : The buffer of specified pipe is initialized
1152 * Arguments    : uint16_t pipe    : Pipe
1153 * Return Value : none
1154 *******************************************************************************/
1155 void usb0_host_aclrm (uint16_t pipe)
1156 {
1157     usb0_host_set_aclrm(pipe);
1158     usb0_host_clr_aclrm(pipe);
1159 }
1160
1161 /*******************************************************************************
1162 * Function Name: usb0_host_set_aclrm
1163 * Description  : The auto buffer clear mode of specified pipe is enabled
1164 * Arguments    : uint16_t pipe    : Pipe
1165 * Return Value : none
1166 *******************************************************************************/
1167 void usb0_host_set_aclrm (uint16_t pipe)
1168 {
1169     switch (pipe)
1170     {
1171         case USB_HOST_PIPE0:
1172         break;
1173
1174         case USB_HOST_PIPE1:
1175             RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
1176                                 1,
1177                                 USB_PIPEnCTR_1_5_ACLRM_SHIFT,
1178                                 USB_PIPEnCTR_1_5_ACLRM);
1179         break;
1180
1181         case USB_HOST_PIPE2:
1182             RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
1183                                 1,
1184                                 USB_PIPEnCTR_1_5_ACLRM_SHIFT,
1185                                 USB_PIPEnCTR_1_5_ACLRM);
1186         break;
1187
1188         case USB_HOST_PIPE3:
1189             RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
1190                                 1,
1191                                 USB_PIPEnCTR_1_5_ACLRM_SHIFT,
1192                                 USB_PIPEnCTR_1_5_ACLRM);
1193         break;
1194
1195         case USB_HOST_PIPE4:
1196             RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
1197                                 1,
1198                                 USB_PIPEnCTR_1_5_ACLRM_SHIFT,
1199                                 USB_PIPEnCTR_1_5_ACLRM);
1200         break;
1201
1202         case USB_HOST_PIPE5:
1203             RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
1204                                 1,
1205                                 USB_PIPEnCTR_1_5_ACLRM_SHIFT,
1206                                 USB_PIPEnCTR_1_5_ACLRM);
1207         break;
1208
1209         case USB_HOST_PIPE6:
1210             RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
1211                                 1,
1212                                 USB_PIPEnCTR_6_8_ACLRM_SHIFT,
1213                                 USB_PIPEnCTR_6_8_ACLRM);
1214         break;
1215
1216         case USB_HOST_PIPE7:
1217             RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
1218                                 1,
1219                                 USB_PIPEnCTR_6_8_ACLRM_SHIFT,
1220                                 USB_PIPEnCTR_6_8_ACLRM);
1221         break;
1222
1223         case USB_HOST_PIPE8:
1224             RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
1225                                 1,
1226                                 USB_PIPEnCTR_6_8_ACLRM_SHIFT,
1227                                 USB_PIPEnCTR_6_8_ACLRM);
1228         break;
1229
1230         case USB_HOST_PIPE9:
1231             RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
1232                                 1,
1233                                 USB_PIPEnCTR_9_ACLRM_SHIFT,
1234                                 USB_PIPEnCTR_9_ACLRM);
1235         break;
1236
1237         default:
1238         break;
1239     }
1240 }
1241
1242 /*******************************************************************************
1243 * Function Name: usb0_host_clr_aclrm
1244 * Description  : The auto buffer clear mode of specified pipe is enabled
1245 * Arguments    : uint16_t pipe    : Pipe
1246 * Return Value : none
1247 *******************************************************************************/
1248 void usb0_host_clr_aclrm (uint16_t pipe)
1249 {
1250     switch (pipe)
1251     {
1252         case USB_HOST_PIPE0:
1253         break;
1254
1255         case USB_HOST_PIPE1:
1256             RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
1257                                 0,
1258                                 USB_PIPEnCTR_1_5_ACLRM_SHIFT,
1259                                 USB_PIPEnCTR_1_5_ACLRM);
1260         break;
1261
1262         case USB_HOST_PIPE2:
1263             RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
1264                                 0,
1265                                 USB_PIPEnCTR_1_5_ACLRM_SHIFT,
1266                                 USB_PIPEnCTR_1_5_ACLRM);
1267         break;
1268
1269         case USB_HOST_PIPE3:
1270             RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
1271                                 0,
1272                                 USB_PIPEnCTR_1_5_ACLRM_SHIFT,
1273                                 USB_PIPEnCTR_1_5_ACLRM);
1274         break;
1275
1276         case USB_HOST_PIPE4:
1277             RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
1278                                 0,
1279                                 USB_PIPEnCTR_1_5_ACLRM_SHIFT,
1280                                 USB_PIPEnCTR_1_5_ACLRM);
1281         break;
1282
1283         case USB_HOST_PIPE5:
1284             RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
1285                                 0,
1286                                 USB_PIPEnCTR_1_5_ACLRM_SHIFT,
1287                                 USB_PIPEnCTR_1_5_ACLRM);
1288         break;
1289
1290         case USB_HOST_PIPE6:
1291             RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
1292                                 0,
1293                                 USB_PIPEnCTR_6_8_ACLRM_SHIFT,
1294                                 USB_PIPEnCTR_6_8_ACLRM);
1295         break;
1296
1297         case USB_HOST_PIPE7:
1298             RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
1299                                 0,
1300                                 USB_PIPEnCTR_6_8_ACLRM_SHIFT,
1301                                 USB_PIPEnCTR_6_8_ACLRM);
1302         break;
1303
1304         case USB_HOST_PIPE8:
1305             RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
1306                                 0,
1307                                 USB_PIPEnCTR_6_8_ACLRM_SHIFT,
1308                                 USB_PIPEnCTR_6_8_ACLRM);
1309         break;
1310
1311         case USB_HOST_PIPE9:
1312             RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
1313                                 0,
1314                                 USB_PIPEnCTR_9_ACLRM_SHIFT,
1315                                 USB_PIPEnCTR_9_ACLRM);
1316         break;
1317
1318         default:
1319         break;
1320     }
1321 }
1322
1323 /*******************************************************************************
1324 * Function Name: usb0_host_get_inbuf
1325 * Description  : Returns INBUFM of the pipe specified by the argument.
1326 * Arguments    : uint16_t pipe             ; Pipe Number
1327 * Return Value : inbuf
1328 *******************************************************************************/
1329 uint16_t usb0_host_get_inbuf (uint16_t pipe)
1330 {
1331     uint16_t inbuf;
1332
1333     switch (pipe)
1334     {
1335         case USB_HOST_PIPE0:
1336             inbuf = 0;
1337         break;
1338
1339         case USB_HOST_PIPE1:
1340             inbuf = RZA_IO_RegRead_16(&USB200.PIPE1CTR,
1341                                     USB_PIPEnCTR_1_5_INBUFM_SHIFT,
1342                                     USB_PIPEnCTR_1_5_INBUFM);
1343         break;
1344
1345         case USB_HOST_PIPE2:
1346             inbuf = RZA_IO_RegRead_16(&USB200.PIPE2CTR,
1347                                     USB_PIPEnCTR_1_5_INBUFM_SHIFT,
1348                                     USB_PIPEnCTR_1_5_INBUFM);
1349         break;
1350
1351         case USB_HOST_PIPE3:
1352             inbuf = RZA_IO_RegRead_16(&USB200.PIPE3CTR,
1353                                     USB_PIPEnCTR_1_5_INBUFM_SHIFT,
1354                                     USB_PIPEnCTR_1_5_INBUFM);
1355         break;
1356
1357         case USB_HOST_PIPE4:
1358             inbuf = RZA_IO_RegRead_16(&USB200.PIPE4CTR,
1359                                     USB_PIPEnCTR_1_5_INBUFM_SHIFT,
1360                                     USB_PIPEnCTR_1_5_INBUFM);
1361         break;
1362
1363         case USB_HOST_PIPE5:
1364             inbuf = RZA_IO_RegRead_16(&USB200.PIPE5CTR,
1365                                     USB_PIPEnCTR_1_5_INBUFM_SHIFT,
1366                                     USB_PIPEnCTR_1_5_INBUFM);
1367         break;
1368
1369         case USB_HOST_PIPE6:
1370             inbuf = 0;
1371         break;
1372
1373         case USB_HOST_PIPE7:
1374             inbuf = 0;
1375         break;
1376
1377         case USB_HOST_PIPE8:
1378             inbuf = 0;
1379         break;
1380
1381         case USB_HOST_PIPE9:
1382             inbuf = RZA_IO_RegRead_16(&USB200.PIPE9CTR,
1383                                     USB_PIPEnCTR_9_INBUFM_SHIFT,
1384                                     USB_PIPEnCTR_9_INBUFM);
1385         break;
1386
1387         default:
1388             inbuf = 0;
1389         break;
1390     }
1391
1392     return inbuf;
1393 }
1394
1395 /*******************************************************************************
1396 * Function Name: usb0_host_setting_interrupt
1397 * Description  : Sets the USB module interrupt level.
1398 * Arguments    : uint8_t level ; interrupt level
1399 * Return Value : none
1400 *******************************************************************************/
1401 void usb0_host_setting_interrupt (uint8_t level)
1402 {
1403 #if(1) /* ohci_wrapp */
1404     IRQn_Type d0fifo_dmaintid;
1405     IRQn_Type d1fifo_dmaintid;
1406
1407     InterruptHandlerRegister(USBI0_IRQn, usb0_host_interrupt);
1408     GIC_SetPriority(USBI0_IRQn, level);
1409     GIC_EnableIRQ(USBI0_IRQn);
1410
1411     d0fifo_dmaintid = (IRQn_Type)Userdef_USB_usb0_host_d0fifo_dmaintid();
1412
1413     if (d0fifo_dmaintid != 0xFFFF)
1414     {
1415         InterruptHandlerRegister(d0fifo_dmaintid, usb0_host_dma_interrupt_d0fifo);
1416         GIC_SetPriority(d0fifo_dmaintid, level);
1417         GIC_EnableIRQ(d0fifo_dmaintid);
1418     }
1419
1420     d1fifo_dmaintid = (IRQn_Type)Userdef_USB_usb0_host_d1fifo_dmaintid();
1421
1422     if (d1fifo_dmaintid != 0xFFFF)
1423     {
1424         InterruptHandlerRegister(d1fifo_dmaintid, usb0_host_dma_interrupt_d1fifo);
1425         GIC_SetPriority(d1fifo_dmaintid, level);
1426         GIC_EnableIRQ(d1fifo_dmaintid);
1427     }
1428 #else
1429     uint16_t d0fifo_dmaintid;
1430     uint16_t d1fifo_dmaintid;
1431
1432     R_INTC_RegistIntFunc(INTC_ID_USBI0, usb0_host_interrupt);
1433     R_INTC_SetPriority(INTC_ID_USBI0, level);
1434     R_INTC_Enable(INTC_ID_USBI0);
1435
1436     d0fifo_dmaintid = Userdef_USB_usb0_host_d0fifo_dmaintid();
1437
1438     if (d0fifo_dmaintid != 0xFFFF)
1439     {
1440         R_INTC_RegistIntFunc(d0fifo_dmaintid, usb0_host_dma_interrupt_d0fifo);
1441         R_INTC_SetPriority(d0fifo_dmaintid, level);
1442         R_INTC_Enable(d0fifo_dmaintid);
1443     }
1444
1445     d1fifo_dmaintid = Userdef_USB_usb0_host_d1fifo_dmaintid();
1446
1447     if (d1fifo_dmaintid != 0xFFFF)
1448     {
1449         R_INTC_RegistIntFunc(d1fifo_dmaintid, usb0_host_dma_interrupt_d1fifo);
1450         R_INTC_SetPriority(d1fifo_dmaintid, level);
1451         R_INTC_Enable(d1fifo_dmaintid);
1452     }
1453 #endif
1454 }
1455
1456 /*******************************************************************************
1457 * Function Name: usb0_host_reset_module
1458 * Description  : Initializes the USB module.
1459 *              : Enables providing clock to the USB module.
1460 *              : Sets USB bus wait register.
1461 * Arguments    : uint16_t clockmode ; 48MHz ; USBHCLOCK_X1_48MHZ
1462 *              :                    ; 12MHz ; USBHCLOCK_EXTAL_12MHZ
1463 * Return Value : none
1464 *******************************************************************************/
1465 void usb0_host_reset_module (uint16_t clockmode)
1466 {
1467     if (RZA_IO_RegRead_16(&USB200.SYSCFG0,
1468                                 USB_SYSCFG_UPLLE_SHIFT,
1469                                 USB_SYSCFG_UPLLE) == 1)
1470     {
1471         if ((USB200.SYSCFG0 & USB_HOST_BITUCKSEL) != clockmode)
1472         {
1473             RZA_IO_RegWrite_16(&USB200.SUSPMODE,
1474                                 0,
1475                                 USB_SUSPMODE_SUSPM_SHIFT,
1476                                 USB_SUSPMODE_SUSPM);
1477             USB200.SYSCFG0 = 0;
1478             USB200.SYSCFG0 = (USB_HOST_BITUPLLE | clockmode);
1479             Userdef_USB_usb0_host_delay_xms(1);
1480             RZA_IO_RegWrite_16(&USB200.SUSPMODE,
1481                                 1,
1482                                 USB_SUSPMODE_SUSPM_SHIFT,
1483                                 USB_SUSPMODE_SUSPM);
1484         }
1485         else
1486         {
1487             RZA_IO_RegWrite_16(&USB200.SUSPMODE,
1488                                 0,
1489                                 USB_SUSPMODE_SUSPM_SHIFT,
1490                                 USB_SUSPMODE_SUSPM);
1491             Userdef_USB_usb0_host_delay_xms(1);
1492             RZA_IO_RegWrite_16(&USB200.SUSPMODE,
1493                                 1,
1494                                 USB_SUSPMODE_SUSPM_SHIFT,
1495                                 USB_SUSPMODE_SUSPM);
1496         }
1497     }
1498     else
1499     {
1500         RZA_IO_RegWrite_16(&USB200.SUSPMODE,
1501                             0,
1502                             USB_SUSPMODE_SUSPM_SHIFT,
1503                             USB_SUSPMODE_SUSPM);
1504         USB200.SYSCFG0 = 0;
1505         USB200.SYSCFG0 = (USB_HOST_BITUPLLE | clockmode);
1506         Userdef_USB_usb0_host_delay_xms(1);
1507         RZA_IO_RegWrite_16(&USB200.SUSPMODE,
1508                             1,
1509                             USB_SUSPMODE_SUSPM_SHIFT,
1510                             USB_SUSPMODE_SUSPM);
1511     }
1512
1513     USB200.BUSWAIT = (uint16_t)(USB_HOST_BUSWAIT_05 & USB_HOST_BITBWAIT);
1514 }
1515
1516 /*******************************************************************************
1517 * Function Name: usb0_host_get_buf_size
1518 * Description  : Obtains pipe buffer size specified by the argument and
1519 *              : maximum packet size of the USB device in use.
1520 *              : When USB_HOST_PIPE0 is specified by the argument, obtains the maximum
1521 *              : packet size of the USB device using the corresponding pipe.
1522 *              : For the case that USB_HOST_PIPE0 is not assigned by the argument, when the
1523 *              : corresponding pipe is in continuous transfer mode,
1524 *              : obtains the buffer size allocated in the corresponcing pipe,
1525 *              : when incontinuous transfer, obtains maximum packet size.
1526 * Arguments    : uint16_t ; pipe Number
1527 * Return Value : Maximum packet size or buffer size
1528 *******************************************************************************/
1529 uint16_t usb0_host_get_buf_size (uint16_t pipe)
1530 {
1531     uint16_t size;
1532     uint16_t bufsize;
1533
1534     if (pipe == USB_HOST_PIPE0)
1535     {
1536         size = RZA_IO_RegRead_16(&USB200.DCPMAXP,
1537                                 USB_DCPMAXP_MXPS_SHIFT,
1538                                 USB_DCPMAXP_MXPS);
1539     }
1540     else
1541     {
1542         if (RZA_IO_RegRead_16(&g_usb0_host_pipecfg[pipe], USB_PIPECFG_CNTMD_SHIFT, USB_PIPECFG_CNTMD) == 1)
1543         {
1544             bufsize = RZA_IO_RegRead_16(&g_usb0_host_pipebuf[pipe], USB_PIPEBUF_BUFSIZE_SHIFT, USB_PIPEBUF_BUFSIZE);
1545             size    = (uint16_t)((bufsize + 1) * USB_HOST_PIPExBUF);
1546         }
1547         else
1548         {
1549             size = RZA_IO_RegRead_16(&g_usb0_host_pipemaxp[pipe], USB_PIPEMAXP_MXPS_SHIFT, USB_PIPEMAXP_MXPS);
1550         }
1551     }
1552     return size;
1553 }
1554
1555 /*******************************************************************************
1556 * Function Name: usb0_host_get_mxps
1557 * Description  : Obtains maximum packet size of the USB device using the pipe
1558 *              : specified by the argument.
1559 * Arguments    : uint16_t ; Pipe Number
1560 * Return Value : Max Packet Size
1561 *******************************************************************************/
1562 uint16_t usb0_host_get_mxps (uint16_t pipe)
1563 {
1564     uint16_t size;
1565
1566     if (pipe == USB_HOST_PIPE0)
1567     {
1568         size = RZA_IO_RegRead_16(&USB200.DCPMAXP,
1569                                 USB_DCPMAXP_MXPS_SHIFT,
1570                                 USB_DCPMAXP_MXPS);
1571     }
1572     else
1573     {
1574         size = RZA_IO_RegRead_16(&g_usb0_host_pipemaxp[pipe], USB_PIPEMAXP_MXPS_SHIFT, USB_PIPEMAXP_MXPS);
1575     }
1576
1577     return size;
1578 }
1579
1580 /* End of File */