diff options
Diffstat (limited to 'firmware/target/mips/ingenic_jz47xx/usb-jz4740.c')
-rw-r--r-- | firmware/target/mips/ingenic_jz47xx/usb-jz4740.c | 33 |
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 | ||
500 | u32 Bulk_in_buf[BULK_IN_BUF_SIZE]; | 500 | u8 *Bulk_in_buf; |
501 | u32 Bulk_out_buf[BULK_OUT_BUF_SIZE]; | 501 | u32 Bulk_out_buf[BULK_OUT_BUF_SIZE]; |
502 | u32 Bulk_in_size,Bulk_in_finish,Bulk_out_size; | 502 | u32 Bulk_in_size,Bulk_in_finish,Bulk_out_size; |
503 | u16 handshake_PKT[4]={0,0,0,0}; | 503 | u16 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 | ||
825 | extern char printfbuf[256]; | 827 | unsigned char nandbuffer[4096]; |
826 | 828 | ||
827 | void usbHandleVendorReq(u8 *buf) | 829 | void 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 | ||
1031 | void usb_init_device(void) | 1040 | void 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 | ||