From 5bd85f955b23fd96537d6ee4b295fdeefaa18a04 Mon Sep 17 00:00:00 2001 From: payton Date: Fri, 28 Jul 2023 17:28:31 +0800 Subject: [PATCH] =?UTF-8?q?1.=E5=9C=A8linux=E4=B8=8B=E6=8F=92=E5=85=A5usb?= =?UTF-8?q?=20=E8=BF=9B=E5=85=A5msdc=E6=A8=A1=E5=BC=8F=EF=BC=8C=E5=9C=A8Wi?= =?UTF-8?q?ndows=E4=B8=8A=E6=B2=A1=E6=9C=89=E5=87=BA=E7=9B=98=E7=AC=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../k_driver/source/comm/usb2dev/usb2dev.c | 6 + .../source/comm/usb2dev/usb2dev_EPConfig.c | 36 +- .../source/comm/usb2dev/usb2dev_drv.c | 439 ++++++++++-------- .../source/comm/usb2dev/usb2dev_ver.c | 2 +- 4 files changed, 291 insertions(+), 192 deletions(-) mode change 100755 => 100644 code/hdal/drivers/k_driver/source/comm/usb2dev/usb2dev.c mode change 100755 => 100644 code/hdal/drivers/k_driver/source/comm/usb2dev/usb2dev_drv.c diff --git a/code/hdal/drivers/k_driver/source/comm/usb2dev/usb2dev.c b/code/hdal/drivers/k_driver/source/comm/usb2dev/usb2dev.c old mode 100755 new mode 100644 index 018e736a3..49d13af69 --- a/code/hdal/drivers/k_driver/source/comm/usb2dev/usb2dev.c +++ b/code/hdal/drivers/k_driver/source/comm/usb2dev/usb2dev.c @@ -23,6 +23,7 @@ #include #include "linux/delay.h" #endif +#include #include "usb2dev.h" #include "usb2dev_reg.h" @@ -458,6 +459,7 @@ static ER usb_openInternal(BOOL bChkCharger, UINT32 uiDebounce) } usb_attach(); + nvt_disable_sram_shutdown(USB_SD); // Set Controller as Device Mode RegTop.reg = USB_GETREG(USB_PHYTOP_REG_OFS); @@ -494,6 +496,7 @@ static ER usb_openInternal(BOOL bChkCharger, UINT32 uiDebounce) #if (USB_STANDARD_CHARGER_DETECT == 1) if (bChkCharger == TRUE) { +// nvt_enable_sram_shutdown(USB_SD); return E_OK; } #else @@ -515,6 +518,7 @@ static ER usb_openInternal(BOOL bChkCharger, UINT32 uiDebounce) } if (i == 0) { DBG_ERR("No USBHost\r\n"); +// nvt_enable_sram_shutdown(USB_SD); return E_TMOUT; } } @@ -1285,6 +1289,8 @@ ER usb2dev_close(void) } +// nvt_enable_sram_shutdown(USB_SD); + gfpVendorReqHdl = NULL; gUsbSetInterfaceHdl = NULL; diff --git a/code/hdal/drivers/k_driver/source/comm/usb2dev/usb2dev_EPConfig.c b/code/hdal/drivers/k_driver/source/comm/usb2dev/usb2dev_EPConfig.c index 48a8ed240..838aab439 100755 --- a/code/hdal/drivers/k_driver/source/comm/usb2dev/usb2dev_EPConfig.c +++ b/code/hdal/drivers/k_driver/source/comm/usb2dev/usb2dev_EPConfig.c @@ -142,14 +142,12 @@ static void usb_setEPMap(USB_EP EPn, USB_EP_DIR Dir, USB_FIFO_NUM FIFOn) else DevEpMAP9_12Reg.bit.FNO_OEP11 = FIFOn; break; - case USB_EP12: + default: if (Dir == EP_DIR_IN) DevEpMAP9_12Reg.bit.FNO_IEP12 = FIFOn; else DevEpMAP9_12Reg.bit.FNO_OEP12 = FIFOn; break; - default: - break; } USB_SETREG(USB_DEVEPMAP9_12_REG_OFS, DevEpMAP9_12Reg.reg); @@ -2478,7 +2476,10 @@ ER usb2dev_set_ep_read(USB_EP EPn, UINT8 *pBuffer, UINT32 *pDMALen) #endif unsigned long flags; +#if _USE_VDMA_FIFO_ +#else FLGPTN flags2; +#endif if (!gUSBOpen) { DBG_ERR("driver is not opened !\r\n"); @@ -2598,7 +2599,7 @@ ER usb2dev_set_ep_read(USB_EP EPn, UINT8 *pBuffer, UINT32 *pDMALen) #if _USE_VDMA_FIFO_ //wai_flg(&flags2, FLG_ID_USB, FLGPTN_USB_DMA_RDY, TWF_CLR | TWF_ORW); - flags2 = flags2; + //flags2 = flags2; if (fifonum < USB_FIFO4) { @@ -2798,7 +2799,10 @@ ER usb2dev_set_ep_write(USB_EP EPn, UINT8 *pBuffer, UINT32 *pDMALen) UINT32 *pBUF; #endif unsigned long flags; +#if _USE_VDMA_FIFO_ +#else FLGPTN flags2; +#endif UINT32 busy_count = 0; if (!gUSBOpen) { @@ -2916,7 +2920,7 @@ ER usb2dev_set_ep_write(USB_EP EPn, UINT8 *pBuffer, UINT32 *pDMALen) #if _USE_VDMA_FIFO_ //wai_flg(&flags2, FLG_ID_USB, FLGPTN_USB_DMA_RDY, TWF_CLR | TWF_ORW); - flags2 = flags2; + //flags2 = flags2; if (fifonum < USB_FIFO4) { @@ -3245,9 +3249,14 @@ ER usb2dev_wait_ep_done_timeout(USB_EP EPn, UINT32 *pDMALen, UINT32 timeout_ms) if (EPn == USB_EP0) { #if _USE_VDMA_FIFO_ - vos_flag_wait_timeout(&uiFlag, FLG_ID_USBTSK, FLGUSB_EP0_DMADONE, TWF_CLR | TWF_ORW, vos_util_msec_to_tick(timeout_ms)); + if (vos_flag_wait_timeout(&uiFlag, FLG_ID_USBTSK, FLGUSB_EP0_DMADONE, TWF_CLR | TWF_ORW, vos_util_msec_to_tick(timeout_ms)) != E_OK) { + + } #else - vos_flag_wait_timeout(&uiFlag, FLG_ID_USBTSK, FLGUSB_DMADONE, TWF_CLR | TWF_ORW, vos_util_msec_to_tick(timeout_ms)); + if (vos_flag_wait_timeout(&uiFlag, FLG_ID_USBTSK, FLGUSB_DMADONE, TWF_CLR | TWF_ORW, vos_util_msec_to_tick(timeout_ms)) != E_OK) { + + } + set_flg(FLG_ID_USBTSK, FLGPTN_USB_DMA_RDY); #endif //DBG_DUMP("o"); @@ -3260,9 +3269,18 @@ ER usb2dev_wait_ep_done_timeout(USB_EP EPn, UINT32 *pDMALen, UINT32 timeout_ms) if (fifonum < USB_FIFO_MAX) { // wait for DMA done #if _USE_VDMA_FIFO_ - vos_flag_wait_timeout(&uiFlag, FLG_ID_USBTSK, (FLGUSB_DMA0DONE << fifonum), TWF_CLR | TWF_ORW, vos_util_msec_to_tick(timeout_ms)); + if (vos_flag_wait_timeout(&uiFlag, FLG_ID_USBTSK, (FLGUSB_DMA0DONE << fifonum), TWF_CLR | TWF_ORW, vos_util_msec_to_tick(timeout_ms)) != E_OK) { + //timeout + *pDMALen = 0; + return E_TMOUT; + + } #else - vos_flag_wait_timeout(&uiFlag, FLG_ID_USBTSK, FLGUSB_DMADONE, TWF_CLR | TWF_ORW, vos_util_msec_to_tick(timeout_ms)); + if (vos_flag_wait_timeout(&uiFlag, FLG_ID_USBTSK, FLGUSB_DMADONE, TWF_CLR | TWF_ORW, vos_util_msec_to_tick(timeout_ms)) != E_OK) { + //timeout + *pDMALen = 0; + return E_TMOUT; + } #endif if (uiFlag == 0) { diff --git a/code/hdal/drivers/k_driver/source/comm/usb2dev/usb2dev_drv.c b/code/hdal/drivers/k_driver/source/comm/usb2dev/usb2dev_drv.c old mode 100755 new mode 100644 index 9cf8dc456..91248b8e7 --- a/code/hdal/drivers/k_driver/source/comm/usb2dev/usb2dev_drv.c +++ b/code/hdal/drivers/k_driver/source/comm/usb2dev/usb2dev_drv.c @@ -332,6 +332,11 @@ int nvt_usb2dev_drv_ioctl(unsigned char uc_if, USB2DEV_MODULE_INFO *pmodule_info //usb2dev_api("%s IF-%d cmd:%x\n", __func__, uc_if, ui_cmd); pdesc = kmalloc(sizeof(USB2DEV_DESC), GFP_KERNEL); + if (pdesc == NULL) { + ret = -ENOMEM; + DBG_ERR("no mem for pdesc\r\n"); + return ret; + } switch (ui_cmd) { case USB2DEV_IOC_OPEN: { @@ -439,246 +444,274 @@ int nvt_usb2dev_drv_ioctl(unsigned char uc_if, USB2DEV_MODULE_INFO *pmodule_info case USB2DEV_IOC_SET_DEVICE_DESC: { ret = copy_from_user(pdesc, (void __user *)ul_arg, sizeof(USB2DEV_DESC)); if (!ret) { - usb2dev_api("dev desc (%d) 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\r\n" - , pdesc->ui_length, pdesc->desc_data[0], pdesc->desc_data[1], pdesc->desc_data[2], pdesc->desc_data[3], pdesc->desc_data[4], pdesc->desc_data[5], pdesc->desc_data[6], pdesc->desc_data[7]); + if (pdesc != NULL) { + usb2dev_api("dev desc (%d) 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\r\n" + , pdesc->ui_length, pdesc->desc_data[0], pdesc->desc_data[1], pdesc->desc_data[2], pdesc->desc_data[3], pdesc->desc_data[4], pdesc->desc_data[5], pdesc->desc_data[6], pdesc->desc_data[7]); - if(usbioc_dev_desc == NULL) { - usbioc_dev_desc = kmalloc(18, GFP_KERNEL); + if(usbioc_dev_desc == NULL) { + usbioc_dev_desc = kmalloc(18, GFP_KERNEL); + } + + if (pdesc->ui_length <= 18) + memcpy(usbioc_dev_desc, pdesc->desc_data, pdesc->ui_length); + + gUSBManage.p_dev_desc = usbioc_dev_desc; } - - if (pdesc->ui_length <= 18) - memcpy(usbioc_dev_desc, pdesc->desc_data, pdesc->ui_length); - - gUSBManage.p_dev_desc = usbioc_dev_desc; } } break; case USB2DEV_IOC_SET_CFG_HS_DESC: { ret = copy_from_user(pdesc, (void __user *)ul_arg, sizeof(USB2DEV_DESC)); if (!ret) { - usb2dev_api("cfg hs desc (%d) 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\r\n" - , pdesc->ui_length, pdesc->desc_data[0], pdesc->desc_data[1], pdesc->desc_data[2], pdesc->desc_data[3], pdesc->desc_data[4], pdesc->desc_data[5], pdesc->desc_data[6], pdesc->desc_data[7]); + if (pdesc != NULL) { + usb2dev_api("cfg hs desc (%d) 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\r\n" + , pdesc->ui_length, pdesc->desc_data[0], pdesc->desc_data[1], pdesc->desc_data[2], pdesc->desc_data[3], pdesc->desc_data[4], pdesc->desc_data[5], pdesc->desc_data[6], pdesc->desc_data[7]); - if(usbioc_cfg_desc_hs == NULL) { - usbioc_cfg_desc_hs = kmalloc(USB_DESC_MAX_SIZE, GFP_KERNEL); + if(usbioc_cfg_desc_hs == NULL) { + usbioc_cfg_desc_hs = kmalloc(USB_DESC_MAX_SIZE, GFP_KERNEL); + } + + if (pdesc->ui_length <= USB_DESC_MAX_SIZE) + memcpy(usbioc_cfg_desc_hs, pdesc->desc_data, pdesc->ui_length); + + gUSBManage.p_config_desc_hs = (USB_CONFIG_DESC *)usbioc_cfg_desc_hs; } - - if (pdesc->ui_length <= USB_DESC_MAX_SIZE) - memcpy(usbioc_cfg_desc_hs, pdesc->desc_data, pdesc->ui_length); - - gUSBManage.p_config_desc_hs = (USB_CONFIG_DESC *)usbioc_cfg_desc_hs; } } break; case USB2DEV_IOC_SET_CFG_HS_OTHER_DESC: { ret = copy_from_user(pdesc, (void __user *)ul_arg, sizeof(USB2DEV_DESC)); if (!ret) { - usb2dev_api("cfg hs desc oth (%d) 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\r\n" - , pdesc->ui_length, pdesc->desc_data[0], pdesc->desc_data[1], pdesc->desc_data[2], pdesc->desc_data[3], pdesc->desc_data[4], pdesc->desc_data[5], pdesc->desc_data[6], pdesc->desc_data[7]); + if (pdesc != NULL) { + usb2dev_api("cfg hs desc oth (%d) 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\r\n" + , pdesc->ui_length, pdesc->desc_data[0], pdesc->desc_data[1], pdesc->desc_data[2], pdesc->desc_data[3], pdesc->desc_data[4], pdesc->desc_data[5], pdesc->desc_data[6], pdesc->desc_data[7]); - if(usbioc_cfg_desc_hs_oth == NULL) { - usbioc_cfg_desc_hs_oth = kmalloc(USB_DESC_MAX_SIZE, GFP_KERNEL); + if(usbioc_cfg_desc_hs_oth == NULL) { + usbioc_cfg_desc_hs_oth = kmalloc(USB_DESC_MAX_SIZE, GFP_KERNEL); + } + + if (pdesc->ui_length <= USB_DESC_MAX_SIZE) + memcpy(usbioc_cfg_desc_hs_oth, pdesc->desc_data, pdesc->ui_length); + + gUSBManage.p_config_desc_hs_other = (USB_CONFIG_DESC *)usbioc_cfg_desc_hs_oth; } - - if (pdesc->ui_length <= USB_DESC_MAX_SIZE) - memcpy(usbioc_cfg_desc_hs_oth, pdesc->desc_data, pdesc->ui_length); - - gUSBManage.p_config_desc_hs_other = (USB_CONFIG_DESC *)usbioc_cfg_desc_hs_oth; } }break; case USB2DEV_IOC_SET_CFG_FS_DESC: { ret = copy_from_user(pdesc, (void __user *)ul_arg, sizeof(USB2DEV_DESC)); if (!ret) { - usb2dev_api("cfg fs desc (%d) 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\r\n" - , pdesc->ui_length, pdesc->desc_data[0], pdesc->desc_data[1], pdesc->desc_data[2], pdesc->desc_data[3], pdesc->desc_data[4], pdesc->desc_data[5], pdesc->desc_data[6], pdesc->desc_data[7]); + if (pdesc != NULL) { + usb2dev_api("cfg fs desc (%d) 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\r\n" + , pdesc->ui_length, pdesc->desc_data[0], pdesc->desc_data[1], pdesc->desc_data[2], pdesc->desc_data[3], pdesc->desc_data[4], pdesc->desc_data[5], pdesc->desc_data[6], pdesc->desc_data[7]); - if(usbioc_cfg_desc_fs == NULL) { - usbioc_cfg_desc_fs = kmalloc(USB_DESC_MAX_SIZE, GFP_KERNEL); + if(usbioc_cfg_desc_fs == NULL) { + usbioc_cfg_desc_fs = kmalloc(USB_DESC_MAX_SIZE, GFP_KERNEL); + } + + if (pdesc->ui_length <= USB_DESC_MAX_SIZE) + memcpy(usbioc_cfg_desc_fs, pdesc->desc_data, pdesc->ui_length); + + gUSBManage.p_config_desc_fs = (USB_CONFIG_DESC *)usbioc_cfg_desc_fs; } - - if (pdesc->ui_length <= USB_DESC_MAX_SIZE) - memcpy(usbioc_cfg_desc_fs, pdesc->desc_data, pdesc->ui_length); - - gUSBManage.p_config_desc_fs = (USB_CONFIG_DESC *)usbioc_cfg_desc_fs; } } break; case USB2DEV_IOC_SET_CFG_FS_OTHER_DESC: { ret = copy_from_user(pdesc, (void __user *)ul_arg, sizeof(USB2DEV_DESC)); if (!ret) { - usb2dev_api("cfg hs desc oth (%d) 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\r\n" - , pdesc->ui_length, pdesc->desc_data[0], pdesc->desc_data[1], pdesc->desc_data[2], pdesc->desc_data[3], pdesc->desc_data[4], pdesc->desc_data[5], pdesc->desc_data[6], pdesc->desc_data[7]); + if (pdesc != NULL) { + usb2dev_api("cfg hs desc oth (%d) 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\r\n" + , pdesc->ui_length, pdesc->desc_data[0], pdesc->desc_data[1], pdesc->desc_data[2], pdesc->desc_data[3], pdesc->desc_data[4], pdesc->desc_data[5], pdesc->desc_data[6], pdesc->desc_data[7]); - if(usbioc_cfg_desc_fs_oth == NULL) { - usbioc_cfg_desc_fs_oth = kmalloc(USB_DESC_MAX_SIZE, GFP_KERNEL); + if(usbioc_cfg_desc_fs_oth == NULL) { + usbioc_cfg_desc_fs_oth = kmalloc(USB_DESC_MAX_SIZE, GFP_KERNEL); + } + + if (pdesc->ui_length <= USB_DESC_MAX_SIZE) + memcpy(usbioc_cfg_desc_fs_oth, pdesc->desc_data, pdesc->ui_length); + + gUSBManage.p_config_desc_fs_other = (USB_CONFIG_DESC *)usbioc_cfg_desc_fs_oth; } - - if (pdesc->ui_length <= USB_DESC_MAX_SIZE) - memcpy(usbioc_cfg_desc_fs_oth, pdesc->desc_data, pdesc->ui_length); - - gUSBManage.p_config_desc_fs_other = (USB_CONFIG_DESC *)usbioc_cfg_desc_fs_oth; } } break; case USB2DEV_IOC_SET_DEV_QUALI_DESC: { ret = copy_from_user(pdesc, (void __user *)ul_arg, sizeof(USB2DEV_DESC)); if (!ret) { - usb2dev_api("dev qua desc (%d) 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\r\n" - , pdesc->ui_length, pdesc->desc_data[0], pdesc->desc_data[1], pdesc->desc_data[2], pdesc->desc_data[3], pdesc->desc_data[4], pdesc->desc_data[5], pdesc->desc_data[6], pdesc->desc_data[7]); + if (pdesc != NULL) { + usb2dev_api("dev qua desc (%d) 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\r\n" + , pdesc->ui_length, pdesc->desc_data[0], pdesc->desc_data[1], pdesc->desc_data[2], pdesc->desc_data[3], pdesc->desc_data[4], pdesc->desc_data[5], pdesc->desc_data[6], pdesc->desc_data[7]); - if(usbioc_devquali_desc == NULL) { - usbioc_devquali_desc = kmalloc(18, GFP_KERNEL); + if(usbioc_devquali_desc == NULL) { + usbioc_devquali_desc = kmalloc(18, GFP_KERNEL); + } + + if (pdesc->ui_length <= 18) + memcpy(usbioc_devquali_desc, pdesc->desc_data, pdesc->ui_length); + + gUSBManage.p_dev_quali_desc = (USB_DEVICE_DESC *)usbioc_devquali_desc; } - - if (pdesc->ui_length <= 18) - memcpy(usbioc_devquali_desc, pdesc->desc_data, pdesc->ui_length); - - gUSBManage.p_dev_quali_desc = (USB_DEVICE_DESC *)usbioc_devquali_desc; } } break; case USB2DEV_IOC_SET_STRING0_DESC: { ret = copy_from_user(pdesc, (void __user *)ul_arg, sizeof(USB2DEV_DESC)); if (!ret) { - usb2dev_api("str-0 desc (%d) 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\r\n" - , pdesc->ui_length, pdesc->desc_data[0], pdesc->desc_data[1], pdesc->desc_data[2], pdesc->desc_data[3], pdesc->desc_data[4], pdesc->desc_data[5], pdesc->desc_data[6], pdesc->desc_data[7]); + if (pdesc != NULL) { + usb2dev_api("str-0 desc (%d) 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\r\n" + , pdesc->ui_length, pdesc->desc_data[0], pdesc->desc_data[1], pdesc->desc_data[2], pdesc->desc_data[3], pdesc->desc_data[4], pdesc->desc_data[5], pdesc->desc_data[6], pdesc->desc_data[7]); - if(usbioc_str_desc0 == NULL) { - usbioc_str_desc0 = kmalloc(512, GFP_KERNEL); - } + if(usbioc_str_desc0 == NULL) { + usbioc_str_desc0 = kmalloc(512, GFP_KERNEL); + } - if (pdesc->ui_length <= 512) { - memcpy(usbioc_str_desc0, pdesc->desc_data, pdesc->ui_length); - gUSBManage.p_string_desc[0] = (USB_STRING_DESC *)usbioc_str_desc0; - } else { - DBG_ERR("str0 size exceed 512\r\n"); + if (pdesc->ui_length <= 512) { + memcpy(usbioc_str_desc0, pdesc->desc_data, pdesc->ui_length); + gUSBManage.p_string_desc[0] = (USB_STRING_DESC *)usbioc_str_desc0; + } else { + DBG_ERR("str0 size exceed 512\r\n"); + } } } } break; case USB2DEV_IOC_SET_STRING1_DESC: { ret = copy_from_user(pdesc, (void __user *)ul_arg, sizeof(USB2DEV_DESC)); if (!ret) { - usb2dev_api("str-1 desc (%d) 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\r\n" - , pdesc->ui_length, pdesc->desc_data[0], pdesc->desc_data[1], pdesc->desc_data[2], pdesc->desc_data[3], pdesc->desc_data[4], pdesc->desc_data[5], pdesc->desc_data[6], pdesc->desc_data[7]); + if (pdesc != NULL) { + usb2dev_api("str-1 desc (%d) 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\r\n" + , pdesc->ui_length, pdesc->desc_data[0], pdesc->desc_data[1], pdesc->desc_data[2], pdesc->desc_data[3], pdesc->desc_data[4], pdesc->desc_data[5], pdesc->desc_data[6], pdesc->desc_data[7]); - if(usbioc_str_desc1 == NULL) { - usbioc_str_desc1 = kmalloc(512, GFP_KERNEL); - } + if(usbioc_str_desc1 == NULL) { + usbioc_str_desc1 = kmalloc(512, GFP_KERNEL); + } - if (pdesc->ui_length <= 512) { - memcpy(usbioc_str_desc1, pdesc->desc_data, pdesc->ui_length); - gUSBManage.p_string_desc[1] = (USB_STRING_DESC *)usbioc_str_desc1; - } else { - DBG_ERR("str1 size exceed 512\r\n"); + if (pdesc->ui_length <= 512) { + memcpy(usbioc_str_desc1, pdesc->desc_data, pdesc->ui_length); + gUSBManage.p_string_desc[1] = (USB_STRING_DESC *)usbioc_str_desc1; + } else { + DBG_ERR("str1 size exceed 512\r\n"); + } } } } break; case USB2DEV_IOC_SET_STRING2_DESC: { ret = copy_from_user(pdesc, (void __user *)ul_arg, sizeof(USB2DEV_DESC)); if (!ret) { - usb2dev_api("str-2 desc (%d) 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\r\n" - , pdesc->ui_length, pdesc->desc_data[0], pdesc->desc_data[1], pdesc->desc_data[2], pdesc->desc_data[3], pdesc->desc_data[4], pdesc->desc_data[5], pdesc->desc_data[6], pdesc->desc_data[7]); + if (pdesc != NULL) { + usb2dev_api("str-2 desc (%d) 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\r\n" + , pdesc->ui_length, pdesc->desc_data[0], pdesc->desc_data[1], pdesc->desc_data[2], pdesc->desc_data[3], pdesc->desc_data[4], pdesc->desc_data[5], pdesc->desc_data[6], pdesc->desc_data[7]); - if(usbioc_str_desc2 == NULL) { - usbioc_str_desc2 = kmalloc(512, GFP_KERNEL); - } + if(usbioc_str_desc2 == NULL) { + usbioc_str_desc2 = kmalloc(512, GFP_KERNEL); + } - if (pdesc->ui_length <= 512) { - memcpy(usbioc_str_desc2, pdesc->desc_data, pdesc->ui_length); - gUSBManage.p_string_desc[2] = (USB_STRING_DESC *)usbioc_str_desc2; - } else { - DBG_ERR("str2 size exceed 512\r\n"); + if (pdesc->ui_length <= 512) { + memcpy(usbioc_str_desc2, pdesc->desc_data, pdesc->ui_length); + gUSBManage.p_string_desc[2] = (USB_STRING_DESC *)usbioc_str_desc2; + } else { + DBG_ERR("str2 size exceed 512\r\n"); + } } } } break; case USB2DEV_IOC_SET_STRING3_DESC: { ret = copy_from_user(pdesc, (void __user *)ul_arg, sizeof(USB2DEV_DESC)); if (!ret) { - usb2dev_api("str-3 desc (%d) 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\r\n" - , pdesc->ui_length, pdesc->desc_data[0], pdesc->desc_data[1], pdesc->desc_data[2], pdesc->desc_data[3], pdesc->desc_data[4], pdesc->desc_data[5], pdesc->desc_data[6], pdesc->desc_data[7]); + if (pdesc != NULL) { + usb2dev_api("str-3 desc (%d) 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\r\n" + , pdesc->ui_length, pdesc->desc_data[0], pdesc->desc_data[1], pdesc->desc_data[2], pdesc->desc_data[3], pdesc->desc_data[4], pdesc->desc_data[5], pdesc->desc_data[6], pdesc->desc_data[7]); - if(usbioc_str_desc3 == NULL) { - usbioc_str_desc3 = kmalloc(512, GFP_KERNEL); - } + if(usbioc_str_desc3 == NULL) { + usbioc_str_desc3 = kmalloc(512, GFP_KERNEL); + } - if (pdesc->ui_length <= 512) { - memcpy(usbioc_str_desc3, pdesc->desc_data, pdesc->ui_length); - gUSBManage.p_string_desc[3] = (USB_STRING_DESC *)usbioc_str_desc3; - } else { - DBG_ERR("str3 size exceed 512\r\n"); + if (pdesc->ui_length <= 512) { + memcpy(usbioc_str_desc3, pdesc->desc_data, pdesc->ui_length); + gUSBManage.p_string_desc[3] = (USB_STRING_DESC *)usbioc_str_desc3; + } else { + DBG_ERR("str3 size exceed 512\r\n"); + } } } } break; case USB2DEV_IOC_SET_STRING4_DESC: { ret = copy_from_user(pdesc, (void __user *)ul_arg, sizeof(USB2DEV_DESC)); if (!ret) { - usb2dev_api("str-4 desc (%d) 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\r\n" - , pdesc->ui_length, pdesc->desc_data[0], pdesc->desc_data[1], pdesc->desc_data[2], pdesc->desc_data[3], pdesc->desc_data[4], pdesc->desc_data[5], pdesc->desc_data[6], pdesc->desc_data[7]); + if (pdesc != NULL) { + usb2dev_api("str-4 desc (%d) 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\r\n" + , pdesc->ui_length, pdesc->desc_data[0], pdesc->desc_data[1], pdesc->desc_data[2], pdesc->desc_data[3], pdesc->desc_data[4], pdesc->desc_data[5], pdesc->desc_data[6], pdesc->desc_data[7]); - if(usbioc_str_desc4 == NULL) { - usbioc_str_desc4 = kmalloc(512, GFP_KERNEL); - } + if(usbioc_str_desc4 == NULL) { + usbioc_str_desc4 = kmalloc(512, GFP_KERNEL); + } - if (pdesc->ui_length <= 512) { - memcpy(usbioc_str_desc4, pdesc->desc_data, pdesc->ui_length); - gUSBManage.p_string_desc[4] = (USB_STRING_DESC *)usbioc_str_desc4; - } else { - DBG_ERR("str4 size exceed 512\r\n"); + if (pdesc->ui_length <= 512) { + memcpy(usbioc_str_desc4, pdesc->desc_data, pdesc->ui_length); + gUSBManage.p_string_desc[4] = (USB_STRING_DESC *)usbioc_str_desc4; + } else { + DBG_ERR("str4 size exceed 512\r\n"); + } } } } break; case USB2DEV_IOC_SET_STRING5_DESC: { ret = copy_from_user(pdesc, (void __user *)ul_arg, sizeof(USB2DEV_DESC)); if (!ret) { - usb2dev_api("str-5 desc (%d) 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\r\n" - , pdesc->ui_length, pdesc->desc_data[0], pdesc->desc_data[1], pdesc->desc_data[2], pdesc->desc_data[3], pdesc->desc_data[4], pdesc->desc_data[5], pdesc->desc_data[6], pdesc->desc_data[7]); + if (pdesc != NULL) { + usb2dev_api("str-5 desc (%d) 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\r\n" + , pdesc->ui_length, pdesc->desc_data[0], pdesc->desc_data[1], pdesc->desc_data[2], pdesc->desc_data[3], pdesc->desc_data[4], pdesc->desc_data[5], pdesc->desc_data[6], pdesc->desc_data[7]); - if(usbioc_str_desc5 == NULL) { - usbioc_str_desc5 = kmalloc(512, GFP_KERNEL); - } + if(usbioc_str_desc5 == NULL) { + usbioc_str_desc5 = kmalloc(512, GFP_KERNEL); + } - if (pdesc->ui_length <= 512) { - memcpy(usbioc_str_desc5, pdesc->desc_data, pdesc->ui_length); - gUSBManage.p_string_desc[5] = (USB_STRING_DESC *)usbioc_str_desc5; - } else { - DBG_ERR("str5 size exceed 512\r\n"); + if (pdesc->ui_length <= 512) { + memcpy(usbioc_str_desc5, pdesc->desc_data, pdesc->ui_length); + gUSBManage.p_string_desc[5] = (USB_STRING_DESC *)usbioc_str_desc5; + } else { + DBG_ERR("str5 size exceed 512\r\n"); + } } } } break; case USB2DEV_IOC_SET_STRING6_DESC: { ret = copy_from_user(pdesc, (void __user *)ul_arg, sizeof(USB2DEV_DESC)); if (!ret) { - usb2dev_api("str-6 desc (%d) 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\r\n" - , pdesc->ui_length, pdesc->desc_data[0], pdesc->desc_data[1], pdesc->desc_data[2], pdesc->desc_data[3], pdesc->desc_data[4], pdesc->desc_data[5], pdesc->desc_data[6], pdesc->desc_data[7]); + if (pdesc != NULL) { + usb2dev_api("str-6 desc (%d) 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\r\n" + , pdesc->ui_length, pdesc->desc_data[0], pdesc->desc_data[1], pdesc->desc_data[2], pdesc->desc_data[3], pdesc->desc_data[4], pdesc->desc_data[5], pdesc->desc_data[6], pdesc->desc_data[7]); - if(usbioc_str_desc6 == NULL) { - usbioc_str_desc6 = kmalloc(512, GFP_KERNEL); - } + if(usbioc_str_desc6 == NULL) { + usbioc_str_desc6 = kmalloc(512, GFP_KERNEL); + } - if (pdesc->ui_length <= 512) { - memcpy(usbioc_str_desc6, pdesc->desc_data, pdesc->ui_length); - gUSBManage.p_string_desc[6] = (USB_STRING_DESC *)usbioc_str_desc6; - } else { - DBG_ERR("str6 size exceed 512\r\n"); + if (pdesc->ui_length <= 512) { + memcpy(usbioc_str_desc6, pdesc->desc_data, pdesc->ui_length); + gUSBManage.p_string_desc[6] = (USB_STRING_DESC *)usbioc_str_desc6; + } else { + DBG_ERR("str6 size exceed 512\r\n"); + } } } } break; case USB2DEV_IOC_SET_STRING7_DESC: { ret = copy_from_user(pdesc, (void __user *)ul_arg, sizeof(USB2DEV_DESC)); if (!ret) { - usb2dev_api("str-7 desc (%d) 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\r\n" - , pdesc->ui_length, pdesc->desc_data[0], pdesc->desc_data[1], pdesc->desc_data[2], pdesc->desc_data[3], pdesc->desc_data[4], pdesc->desc_data[5], pdesc->desc_data[6], pdesc->desc_data[7]); + if (pdesc != NULL) { + usb2dev_api("str-7 desc (%d) 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\r\n" + , pdesc->ui_length, pdesc->desc_data[0], pdesc->desc_data[1], pdesc->desc_data[2], pdesc->desc_data[3], pdesc->desc_data[4], pdesc->desc_data[5], pdesc->desc_data[6], pdesc->desc_data[7]); - if(usbioc_str_desc7 == NULL) { - usbioc_str_desc7 = kmalloc(512, GFP_KERNEL); - } + if(usbioc_str_desc7 == NULL) { + usbioc_str_desc7 = kmalloc(512, GFP_KERNEL); + } - if (pdesc->ui_length <= 512) { - memcpy(usbioc_str_desc7, pdesc->desc_data, pdesc->ui_length); - gUSBManage.p_string_desc[7] = (USB_STRING_DESC *)usbioc_str_desc7; - } else { - DBG_ERR("str7 size exceed 512\r\n"); + if (pdesc->ui_length <= 512) { + memcpy(usbioc_str_desc7, pdesc->desc_data, pdesc->ui_length); + gUSBManage.p_string_desc[7] = (USB_STRING_DESC *)usbioc_str_desc7; + } else { + DBG_ERR("str7 size exceed 512\r\n"); + } } } } break; @@ -834,27 +867,50 @@ int nvt_usb2dev_drv_ioctl(unsigned char uc_if, USB2DEV_MODULE_INFO *pmodule_info case USB2DEV_IOC_SET_EP_R: { USB2DEV_DATA_RW data_rw; UINT32 dma_len = 0; + ER erReturn; ret = copy_from_user(&data_rw, (void __user *)ul_arg, sizeof(USB2DEV_DATA_RW)); if (!ret) { ret = copy_from_user(&dma_len, (void __user *)data_rw.dma_length, sizeof(UINT32)); - if (!ret) - usb2dev_set_ep_read(data_rw.epn, data_rw.buffer, &dma_len); + if (!ret) { + if ((data_rw.epn <= (USB_EP_MAX -1))) { + erReturn = usb2dev_set_ep_read(data_rw.epn, data_rw.buffer, &dma_len); + + if (erReturn != E_OK) { + ret = erReturn; + DBG_ERR("usb2dev_set_ep_read err\n"); + } + } else { + DBG_ERR("USB2DEV_IOC_SET_EP_R EP range exceed\n"); + } + } } } break; case USB2DEV_IOC_SET_EP_W: { USB2DEV_DATA_RW data_rw; UINT32 dma_len = 0; + ER erReturn; ret = copy_from_user(&data_rw, (void __user *)ul_arg, sizeof(USB2DEV_DATA_RW)); if (!ret) { ret = copy_from_user(&dma_len, (void __user *)data_rw.dma_length, sizeof(UINT32)); - if (!ret) - usb2dev_set_ep_write(data_rw.epn, data_rw.buffer, &dma_len); + if (!ret) { + if ((data_rw.epn <= (USB_EP_MAX -1))) { + erReturn = usb2dev_set_ep_write(data_rw.epn, data_rw.buffer, &dma_len); + + if (erReturn != E_OK) { + ret = erReturn; + DBG_ERR("usb2dev_set_ep_write err\n"); + } + } else { + DBG_ERR("USB2DEV_IOC_SET_EP_W EP range exceed\n"); + } + + } } } break; case USB2DEV_IOC_READ_EP: { @@ -868,25 +924,28 @@ int nvt_usb2dev_drv_ioctl(unsigned char uc_if, USB2DEV_MODULE_INFO *pmodule_info ret = copy_from_user(&dma_len, (void __user *)data_rw.dma_length, sizeof(UINT32)); if (!ret) { + if ((data_rw.epn <= (USB_EP_MAX -1))) { + if (data_rw.epn == USB_EP0) { + memset(pmodule_info->ctrl_buff, 0x0, 64); - if (data_rw.epn == USB_EP0) { - memset(pmodule_info->ctrl_buff, 0x0, 64); - - if(dma_len <= 64) { - usb2dev_read_endpoint(data_rw.epn, pmodule_info->ctrl_buff, &dma_len); - ret = copy_to_user((void __user *)data_rw.buffer, pmodule_info->ctrl_buff, dma_len); - if (ret != 0) - DBG_ERR("copy_to_user\n"); + if(dma_len <= 64) { + usb2dev_read_endpoint(data_rw.epn, pmodule_info->ctrl_buff, &dma_len); + ret = copy_to_user((void __user *)data_rw.buffer, pmodule_info->ctrl_buff, dma_len); + if (ret != 0) + DBG_ERR("copy_to_user\n"); + } else { + DBG_ERR("ep0 r sz err %d\n",dma_len); + } } else { - DBG_ERR("ep0 r sz err %d\n",dma_len); + usb2dev_read_endpoint(data_rw.epn, data_rw.buffer, &dma_len); } + ret = copy_to_user((void __user *)data_rw.dma_length, &dma_len, sizeof(UINT32)); + if (ret != 0) + DBG_ERR("copy_to_user\n"); } else { - usb2dev_read_endpoint(data_rw.epn, data_rw.buffer, &dma_len); + DBG_ERR("USB2DEV_IOC_READ_EP EP out of range\n"); } - ret = copy_to_user((void __user *)data_rw.dma_length, &dma_len, sizeof(UINT32)); - if (ret != 0) - DBG_ERR("copy_to_user\n"); } } @@ -902,15 +961,17 @@ int nvt_usb2dev_drv_ioctl(unsigned char uc_if, USB2DEV_MODULE_INFO *pmodule_info ret = copy_from_user(&dma_len, (void __user *)data_rw.dma_length, sizeof(UINT32)); if (!ret) { + if ((data_rw.epn <= (USB_EP_MAX -1))) { + if (data_rw.epn != USB_EP0) { + usb2dev_read_endpoint_timeout(data_rw.epn, data_rw.buffer, &dma_len, data_rw.timeout_ms); + } - if (data_rw.epn != USB_EP0) { - usb2dev_read_endpoint_timeout(data_rw.epn, data_rw.buffer, &dma_len, data_rw.timeout_ms); + ret = copy_to_user((void __user *)data_rw.dma_length, &dma_len, sizeof(UINT32)); + if (ret != 0) + DBG_ERR("copy_to_user\n"); + } else { + DBG_ERR("USB2DEV_IOC_READ_EP_TMOT EP out of range\n"); } - - ret = copy_to_user((void __user *)data_rw.dma_length, &dma_len, sizeof(UINT32)); - if (ret != 0) - DBG_ERR("copy_to_user\n"); - } } } break; @@ -925,26 +986,29 @@ int nvt_usb2dev_drv_ioctl(unsigned char uc_if, USB2DEV_MODULE_INFO *pmodule_info ret = copy_from_user(&dma_len, (void __user *)data_rw.dma_length, sizeof(UINT32)); if (!ret) { + if ((data_rw.epn <= (USB_EP_MAX -1))) { + if (data_rw.epn == USB_EP0) { + memset(pmodule_info->ctrl_buff, 0x0, 64); - if (data_rw.epn == USB_EP0) { - memset(pmodule_info->ctrl_buff, 0x0, 64); + if(dma_len <= 64) { + ret = copy_from_user(pmodule_info->ctrl_buff, (void __user *)data_rw.buffer, dma_len); + if (ret != 0) + DBG_ERR("copy_from_user\n"); - if(dma_len <= 64) { - ret = copy_from_user(pmodule_info->ctrl_buff, (void __user *)data_rw.buffer, dma_len); - if (ret != 0) - DBG_ERR("copy_from_user\n"); - - usb2dev_write_endpoint(data_rw.epn, pmodule_info->ctrl_buff, &dma_len); + usb2dev_write_endpoint(data_rw.epn, pmodule_info->ctrl_buff, &dma_len); + } else { + DBG_ERR("ep0 r sz err %d\n",dma_len); + } } else { - DBG_ERR("ep0 r sz err %d\n",dma_len); + usb2dev_write_endpoint(data_rw.epn, data_rw.buffer, &dma_len); } + ret = copy_to_user((void __user *)data_rw.dma_length, &dma_len, sizeof(UINT32)); + if (ret != 0) + DBG_ERR("copy_to_user\n"); } else { - usb2dev_write_endpoint(data_rw.epn, data_rw.buffer, &dma_len); + DBG_ERR("USB2DEV_IOC_WRITE_EP EP out of range\n"); } - ret = copy_to_user((void __user *)data_rw.dma_length, &dma_len, sizeof(UINT32)); - if (ret != 0) - DBG_ERR("copy_to_user\n"); } } @@ -959,13 +1023,16 @@ int nvt_usb2dev_drv_ioctl(unsigned char uc_if, USB2DEV_MODULE_INFO *pmodule_info ret = copy_from_user(&dma_len, (void __user *)data_rw.dma_length, sizeof(UINT32)); if (!ret) { - - if (data_rw.epn != USB_EP0) { - usb2dev_write_endpoint_timeout(data_rw.epn, data_rw.buffer, &dma_len, data_rw.timeout_ms); + if ((data_rw.epn <= (USB_EP_MAX -1))) { + if (data_rw.epn != USB_EP0) { + usb2dev_write_endpoint_timeout(data_rw.epn, data_rw.buffer, &dma_len, data_rw.timeout_ms); + } + ret = copy_to_user((void __user *)data_rw.dma_length, &dma_len, sizeof(UINT32)); + if (ret != 0) + DBG_ERR("copy_to_user\n"); + } else { + DBG_ERR("USB2DEV_IOC_WRITE_EP_TMOT EP out of range\n"); } - ret = copy_to_user((void __user *)data_rw.dma_length, &dma_len, sizeof(UINT32)); - if (ret != 0) - DBG_ERR("copy_to_user\n"); } } @@ -993,7 +1060,11 @@ int nvt_usb2dev_drv_ioctl(unsigned char uc_if, USB2DEV_MODULE_INFO *pmodule_info case USB2DEV_IOC_STALL_EP: { ret = copy_from_user(&value, (void __user *)ul_arg, sizeof(UINT32)); if (!ret) { - usb2dev_set_ep_stall((USB_EP) value); + if ((value <= (USB_EP_MAX -1))) { + usb2dev_set_ep_stall((USB_EP) value); + } else { + DBG_ERR("USB2DEV_IOC_STALL_EP EP out of range\n"); + } } } break; @@ -1008,10 +1079,14 @@ int nvt_usb2dev_drv_ioctl(unsigned char uc_if, USB2DEV_MODULE_INFO *pmodule_info case USB2DEV_IOC_CHK_EPBUSY: { ret = copy_from_user(&value, (void __user *)ul_arg, sizeof(UINT32)); if (!ret) { - value = usb2dev_check_ep_busy((USB_EP) value); - ret = copy_to_user((void __user *)ul_arg, &value, sizeof(UINT32)); - if (ret != 0) - DBG_ERR("copy_to_user\n"); + if ((value <= (USB_EP_MAX -1))) { + value = usb2dev_check_ep_busy((USB_EP) value); + ret = copy_to_user((void __user *)ul_arg, &value, sizeof(UINT32)); + if (ret != 0) + DBG_ERR("copy_to_user\n"); + } else { + DBG_ERR("USB2DEV_IOC_CHK_EPBUSY EP out of range\n"); + } } } break; diff --git a/code/hdal/drivers/k_driver/source/comm/usb2dev/usb2dev_ver.c b/code/hdal/drivers/k_driver/source/comm/usb2dev/usb2dev_ver.c index 8063540b8..4e6e40e5c 100755 --- a/code/hdal/drivers/k_driver/source/comm/usb2dev/usb2dev_ver.c +++ b/code/hdal/drivers/k_driver/source/comm/usb2dev/usb2dev_ver.c @@ -17,4 +17,4 @@ #endif #endif -VOS_MODULE_VERSION(usb2dev, 1, 00, 000, 11); +VOS_MODULE_VERSION(usb2dev, 1, 00, 000, 14);