summaryrefslogtreecommitdiff
path: root/firmware/target/mips/ingenic_jz47xx/usb-jz4740.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/mips/ingenic_jz47xx/usb-jz4740.c')
-rw-r--r--firmware/target/mips/ingenic_jz47xx/usb-jz4740.c33
1 files changed, 22 insertions, 11 deletions
diff --git a/firmware/target/mips/ingenic_jz47xx/usb-jz4740.c b/firmware/target/mips/ingenic_jz47xx/usb-jz4740.c
index cf107397e3..2121d3e4b0 100644
--- a/firmware/target/mips/ingenic_jz47xx/usb-jz4740.c
+++ b/firmware/target/mips/ingenic_jz47xx/usb-jz4740.c
@@ -497,7 +497,7 @@ static inline u32 jz_readl(u32 address)
497 497
498#define TXFIFOEP0 USB_FIFO_EP0 498#define TXFIFOEP0 USB_FIFO_EP0
499 499
500u32 Bulk_in_buf[BULK_IN_BUF_SIZE]; 500u8 *Bulk_in_buf;
501u32 Bulk_out_buf[BULK_OUT_BUF_SIZE]; 501u32 Bulk_out_buf[BULK_OUT_BUF_SIZE];
502u32 Bulk_in_size,Bulk_in_finish,Bulk_out_size; 502u32 Bulk_in_size,Bulk_in_finish,Bulk_out_size;
503u16 handshake_PKT[4]={0,0,0,0}; 503u16 handshake_PKT[4]={0,0,0,0};
@@ -560,12 +560,14 @@ void HW_SendPKT(int ep, const u8 *buf, int size)
560 Bulk_in_size - Bulk_in_finish); 560 Bulk_in_size - Bulk_in_finish);
561 usb_setb(USB_REG_INCSR, USB_INCSR_INPKTRDY); 561 usb_setb(USB_REG_INCSR, USB_INCSR_INPKTRDY);
562 Bulk_in_finish = Bulk_in_size; 562 Bulk_in_finish = Bulk_in_size;
563 } else 563 }
564 else
564 { 565 {
565 udcWriteFifo((u8 *)((u32)buf+Bulk_in_finish), 566 udcWriteFifo((u8 *)((u32)buf+Bulk_in_finish),
566 fifosize[ep]); 567 fifosize[ep]);
567 usb_setb(USB_REG_INCSR, USB_INCSR_INPKTRDY); 568 usb_setb(USB_REG_INCSR, USB_INCSR_INPKTRDY);
568 Bulk_in_finish += fifosize[ep]; 569 Bulk_in_finish += fifosize[ep];
570 Bulk_in_buf = (u8*)buf;
569 } 571 }
570 } 572 }
571 else //EP0 573 else //EP0
@@ -645,7 +647,7 @@ static struct {
645 (1 << 7) | 1,// endpoint 2 is IN endpoint 647 (1 << 7) | 1,// endpoint 2 is IN endpoint
646 2, /* bulk */ 648 2, /* bulk */
647 512, 649 512,
648 16 650 0
649 }, 651 },
650 { 652 {
651 sizeof(USB_EndPointDescriptor), 653 sizeof(USB_EndPointDescriptor),
@@ -653,7 +655,7 @@ static struct {
653 (0 << 7) | 1,// endpoint 5 is OUT endpoint 655 (0 << 7) | 1,// endpoint 5 is OUT endpoint
654 2, /* bulk */ 656 2, /* bulk */
655 512, /* OUT EP FIFO size */ 657 512, /* OUT EP FIFO size */
656 16 658 0
657 } 659 }
658 } 660 }
659}; 661};
@@ -822,21 +824,27 @@ void usbHandleStandDevReq(u8 *buf)
822 } 824 }
823} 825}
824 826
825extern char printfbuf[256]; 827unsigned char nandbuffer[4096];
826 828
827void usbHandleVendorReq(u8 *buf) 829void usbHandleVendorReq(u8 *buf)
828{ 830{
829 int ret_state, i;
830 USB_DeviceRequest *dreq = (USB_DeviceRequest *)buf; 831 USB_DeviceRequest *dreq = (USB_DeviceRequest *)buf;
831 switch (dreq->bRequest) 832 switch (dreq->bRequest)
832 { 833 {
834 case 0xB0:
835 memset(&nandbuffer, 0, 4096);
836 jz_nand_read(dreq->wValue, dreq->wIndex, &nandbuffer);
837 //printf("Read block %d page %d", dreq->wValue, dreq->wIndex);
838 udc_state = IDLE;
839 break;
833 case 0xAB: 840 case 0xAB:
834 //for(i=0; i<256; i+=64) 841 HW_SendPKT(1, nandbuffer, 4096);
835 HW_SendPKT(0, printfbuf, 64); 842 //printf("Send data");
836 udc_state = IDLE; 843 //udc_state = BULK_OUT;
837 break; 844 break;
838 case 0x12: 845 case 0x12:
839 HW_SendPKT(0, "TEST", 4); 846 HW_SendPKT(0, "TEST", 4);
847 //printf("Send test");
840 udc_state = IDLE; 848 udc_state = IDLE;
841 break; 849 break;
842 } 850 }
@@ -874,7 +882,7 @@ void EP0_Handler (void)
874 byCSR0 = jz_readb(USB_REG_CSR0); 882 byCSR0 = jz_readb(USB_REG_CSR0);
875 883
876/* Check for SentStall 884/* Check for SentStall
877 if sendtall is set ,clear the sendstall bit*/ 885 if sendstall is set ,clear the sendstall bit*/
878 if (byCSR0 & USB_CSR0_SENTSTALL) 886 if (byCSR0 & USB_CSR0_SENTSTALL)
879 { 887 {
880 jz_writeb(USB_REG_CSR0, (byCSR0 & ~USB_CSR0_SENDSTALL)); 888 jz_writeb(USB_REG_CSR0, (byCSR0 & ~USB_CSR0_SENDSTALL));
@@ -942,7 +950,8 @@ void EPIN_Handler(u8 EP)
942 Bulk_in_size - Bulk_in_finish); 950 Bulk_in_size - Bulk_in_finish);
943 usb_setw(USB_REG_INCSR, USB_INCSR_INPKTRDY); 951 usb_setw(USB_REG_INCSR, USB_INCSR_INPKTRDY);
944 Bulk_in_finish = Bulk_in_size; 952 Bulk_in_finish = Bulk_in_size;
945 } else 953 }
954 else
946 { 955 {
947 udcWriteFifo((u8 *)((u32)Bulk_in_buf+Bulk_in_finish), 956 udcWriteFifo((u8 *)((u32)Bulk_in_buf+Bulk_in_finish),
948 fifosize[EP]); 957 fifosize[EP]);
@@ -1030,6 +1039,8 @@ void __udc_start(void)
1030 1039
1031void usb_init_device(void) 1040void usb_init_device(void)
1032{ 1041{
1042 REG_USB_REG_POWER &= ~USB_POWER_SOFTCONN;
1043 REG_USB_REG_POWER |= USB_POWER_SOFTCONN;
1033 __udc_start(); 1044 __udc_start();
1034} 1045}
1035 1046