1.在linux下插入usb 进入msdc模式,在Windows上没有出盘符

This commit is contained in:
payton 2023-07-28 17:28:31 +08:00
parent 996aa82e50
commit 5bd85f955b
4 changed files with 291 additions and 192 deletions

View File

@ -23,6 +23,7 @@
#include <plat/nvt-gpio.h> #include <plat/nvt-gpio.h>
#include "linux/delay.h" #include "linux/delay.h"
#endif #endif
#include <plat/nvt-sramctl.h>
#include "usb2dev.h" #include "usb2dev.h"
#include "usb2dev_reg.h" #include "usb2dev_reg.h"
@ -458,6 +459,7 @@ static ER usb_openInternal(BOOL bChkCharger, UINT32 uiDebounce)
} }
usb_attach(); usb_attach();
nvt_disable_sram_shutdown(USB_SD);
// Set Controller as Device Mode // Set Controller as Device Mode
RegTop.reg = USB_GETREG(USB_PHYTOP_REG_OFS); 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 (USB_STANDARD_CHARGER_DETECT == 1)
if (bChkCharger == TRUE) { if (bChkCharger == TRUE) {
// nvt_enable_sram_shutdown(USB_SD);
return E_OK; return E_OK;
} }
#else #else
@ -515,6 +518,7 @@ static ER usb_openInternal(BOOL bChkCharger, UINT32 uiDebounce)
} }
if (i == 0) { if (i == 0) {
DBG_ERR("No USBHost\r\n"); DBG_ERR("No USBHost\r\n");
// nvt_enable_sram_shutdown(USB_SD);
return E_TMOUT; return E_TMOUT;
} }
} }
@ -1285,6 +1289,8 @@ ER usb2dev_close(void)
} }
// nvt_enable_sram_shutdown(USB_SD);
gfpVendorReqHdl = NULL; gfpVendorReqHdl = NULL;
gUsbSetInterfaceHdl = NULL; gUsbSetInterfaceHdl = NULL;

View File

@ -142,14 +142,12 @@ static void usb_setEPMap(USB_EP EPn, USB_EP_DIR Dir, USB_FIFO_NUM FIFOn)
else else
DevEpMAP9_12Reg.bit.FNO_OEP11 = FIFOn; DevEpMAP9_12Reg.bit.FNO_OEP11 = FIFOn;
break; break;
case USB_EP12: default:
if (Dir == EP_DIR_IN) if (Dir == EP_DIR_IN)
DevEpMAP9_12Reg.bit.FNO_IEP12 = FIFOn; DevEpMAP9_12Reg.bit.FNO_IEP12 = FIFOn;
else else
DevEpMAP9_12Reg.bit.FNO_OEP12 = FIFOn; DevEpMAP9_12Reg.bit.FNO_OEP12 = FIFOn;
break; break;
default:
break;
} }
USB_SETREG(USB_DEVEPMAP9_12_REG_OFS, DevEpMAP9_12Reg.reg); 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 #endif
unsigned long flags; unsigned long flags;
#if _USE_VDMA_FIFO_
#else
FLGPTN flags2; FLGPTN flags2;
#endif
if (!gUSBOpen) { if (!gUSBOpen) {
DBG_ERR("driver is not opened !\r\n"); 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_ #if _USE_VDMA_FIFO_
//wai_flg(&flags2, FLG_ID_USB, FLGPTN_USB_DMA_RDY, TWF_CLR | TWF_ORW); //wai_flg(&flags2, FLG_ID_USB, FLGPTN_USB_DMA_RDY, TWF_CLR | TWF_ORW);
flags2 = flags2; //flags2 = flags2;
if (fifonum < USB_FIFO4) { if (fifonum < USB_FIFO4) {
@ -2798,7 +2799,10 @@ ER usb2dev_set_ep_write(USB_EP EPn, UINT8 *pBuffer, UINT32 *pDMALen)
UINT32 *pBUF; UINT32 *pBUF;
#endif #endif
unsigned long flags; unsigned long flags;
#if _USE_VDMA_FIFO_
#else
FLGPTN flags2; FLGPTN flags2;
#endif
UINT32 busy_count = 0; UINT32 busy_count = 0;
if (!gUSBOpen) { if (!gUSBOpen) {
@ -2916,7 +2920,7 @@ ER usb2dev_set_ep_write(USB_EP EPn, UINT8 *pBuffer, UINT32 *pDMALen)
#if _USE_VDMA_FIFO_ #if _USE_VDMA_FIFO_
//wai_flg(&flags2, FLG_ID_USB, FLGPTN_USB_DMA_RDY, TWF_CLR | TWF_ORW); //wai_flg(&flags2, FLG_ID_USB, FLGPTN_USB_DMA_RDY, TWF_CLR | TWF_ORW);
flags2 = flags2; //flags2 = flags2;
if (fifonum < USB_FIFO4) { 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 (EPn == USB_EP0) {
#if _USE_VDMA_FIFO_ #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 #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); set_flg(FLG_ID_USBTSK, FLGPTN_USB_DMA_RDY);
#endif #endif
//DBG_DUMP("o"); //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) { if (fifonum < USB_FIFO_MAX) {
// wait for DMA done // wait for DMA done
#if _USE_VDMA_FIFO_ #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 #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 #endif
if (uiFlag == 0) { if (uiFlag == 0) {

View File

@ -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); //usb2dev_api("%s IF-%d cmd:%x\n", __func__, uc_if, ui_cmd);
pdesc = kmalloc(sizeof(USB2DEV_DESC), GFP_KERNEL); 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) { switch (ui_cmd) {
case USB2DEV_IOC_OPEN: { 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: { case USB2DEV_IOC_SET_DEVICE_DESC: {
ret = copy_from_user(pdesc, (void __user *)ul_arg, sizeof(USB2DEV_DESC)); ret = copy_from_user(pdesc, (void __user *)ul_arg, sizeof(USB2DEV_DESC));
if (!ret) { 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" if (pdesc != NULL) {
, 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]); 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) { if(usbioc_dev_desc == NULL) {
usbioc_dev_desc = kmalloc(18, GFP_KERNEL); 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; } break;
case USB2DEV_IOC_SET_CFG_HS_DESC: { case USB2DEV_IOC_SET_CFG_HS_DESC: {
ret = copy_from_user(pdesc, (void __user *)ul_arg, sizeof(USB2DEV_DESC)); ret = copy_from_user(pdesc, (void __user *)ul_arg, sizeof(USB2DEV_DESC));
if (!ret) { 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" if (pdesc != NULL) {
, 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]); 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) { if(usbioc_cfg_desc_hs == NULL) {
usbioc_cfg_desc_hs = kmalloc(USB_DESC_MAX_SIZE, GFP_KERNEL); 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; } break;
case USB2DEV_IOC_SET_CFG_HS_OTHER_DESC: { case USB2DEV_IOC_SET_CFG_HS_OTHER_DESC: {
ret = copy_from_user(pdesc, (void __user *)ul_arg, sizeof(USB2DEV_DESC)); ret = copy_from_user(pdesc, (void __user *)ul_arg, sizeof(USB2DEV_DESC));
if (!ret) { 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" if (pdesc != NULL) {
, 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]); 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) { if(usbioc_cfg_desc_hs_oth == NULL) {
usbioc_cfg_desc_hs_oth = kmalloc(USB_DESC_MAX_SIZE, GFP_KERNEL); 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; }break;
case USB2DEV_IOC_SET_CFG_FS_DESC: { case USB2DEV_IOC_SET_CFG_FS_DESC: {
ret = copy_from_user(pdesc, (void __user *)ul_arg, sizeof(USB2DEV_DESC)); ret = copy_from_user(pdesc, (void __user *)ul_arg, sizeof(USB2DEV_DESC));
if (!ret) { 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" if (pdesc != NULL) {
, 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]); 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) { if(usbioc_cfg_desc_fs == NULL) {
usbioc_cfg_desc_fs = kmalloc(USB_DESC_MAX_SIZE, GFP_KERNEL); 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; } break;
case USB2DEV_IOC_SET_CFG_FS_OTHER_DESC: { case USB2DEV_IOC_SET_CFG_FS_OTHER_DESC: {
ret = copy_from_user(pdesc, (void __user *)ul_arg, sizeof(USB2DEV_DESC)); ret = copy_from_user(pdesc, (void __user *)ul_arg, sizeof(USB2DEV_DESC));
if (!ret) { 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" if (pdesc != NULL) {
, 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]); 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) { if(usbioc_cfg_desc_fs_oth == NULL) {
usbioc_cfg_desc_fs_oth = kmalloc(USB_DESC_MAX_SIZE, GFP_KERNEL); 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; } break;
case USB2DEV_IOC_SET_DEV_QUALI_DESC: { case USB2DEV_IOC_SET_DEV_QUALI_DESC: {
ret = copy_from_user(pdesc, (void __user *)ul_arg, sizeof(USB2DEV_DESC)); ret = copy_from_user(pdesc, (void __user *)ul_arg, sizeof(USB2DEV_DESC));
if (!ret) { 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" if (pdesc != NULL) {
, 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]); 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) { if(usbioc_devquali_desc == NULL) {
usbioc_devquali_desc = kmalloc(18, GFP_KERNEL); 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; } break;
case USB2DEV_IOC_SET_STRING0_DESC: { case USB2DEV_IOC_SET_STRING0_DESC: {
ret = copy_from_user(pdesc, (void __user *)ul_arg, sizeof(USB2DEV_DESC)); ret = copy_from_user(pdesc, (void __user *)ul_arg, sizeof(USB2DEV_DESC));
if (!ret) { 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" if (pdesc != NULL) {
, 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]); 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) { if(usbioc_str_desc0 == NULL) {
usbioc_str_desc0 = kmalloc(512, GFP_KERNEL); usbioc_str_desc0 = kmalloc(512, GFP_KERNEL);
} }
if (pdesc->ui_length <= 512) { if (pdesc->ui_length <= 512) {
memcpy(usbioc_str_desc0, pdesc->desc_data, pdesc->ui_length); memcpy(usbioc_str_desc0, pdesc->desc_data, pdesc->ui_length);
gUSBManage.p_string_desc[0] = (USB_STRING_DESC *)usbioc_str_desc0; gUSBManage.p_string_desc[0] = (USB_STRING_DESC *)usbioc_str_desc0;
} else { } else {
DBG_ERR("str0 size exceed 512\r\n"); DBG_ERR("str0 size exceed 512\r\n");
}
} }
} }
} break; } break;
case USB2DEV_IOC_SET_STRING1_DESC: { case USB2DEV_IOC_SET_STRING1_DESC: {
ret = copy_from_user(pdesc, (void __user *)ul_arg, sizeof(USB2DEV_DESC)); ret = copy_from_user(pdesc, (void __user *)ul_arg, sizeof(USB2DEV_DESC));
if (!ret) { 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" if (pdesc != NULL) {
, 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]); 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) { if(usbioc_str_desc1 == NULL) {
usbioc_str_desc1 = kmalloc(512, GFP_KERNEL); usbioc_str_desc1 = kmalloc(512, GFP_KERNEL);
} }
if (pdesc->ui_length <= 512) { if (pdesc->ui_length <= 512) {
memcpy(usbioc_str_desc1, pdesc->desc_data, pdesc->ui_length); memcpy(usbioc_str_desc1, pdesc->desc_data, pdesc->ui_length);
gUSBManage.p_string_desc[1] = (USB_STRING_DESC *)usbioc_str_desc1; gUSBManage.p_string_desc[1] = (USB_STRING_DESC *)usbioc_str_desc1;
} else { } else {
DBG_ERR("str1 size exceed 512\r\n"); DBG_ERR("str1 size exceed 512\r\n");
}
} }
} }
} break; } break;
case USB2DEV_IOC_SET_STRING2_DESC: { case USB2DEV_IOC_SET_STRING2_DESC: {
ret = copy_from_user(pdesc, (void __user *)ul_arg, sizeof(USB2DEV_DESC)); ret = copy_from_user(pdesc, (void __user *)ul_arg, sizeof(USB2DEV_DESC));
if (!ret) { 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" if (pdesc != NULL) {
, 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]); 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) { if(usbioc_str_desc2 == NULL) {
usbioc_str_desc2 = kmalloc(512, GFP_KERNEL); usbioc_str_desc2 = kmalloc(512, GFP_KERNEL);
} }
if (pdesc->ui_length <= 512) { if (pdesc->ui_length <= 512) {
memcpy(usbioc_str_desc2, pdesc->desc_data, pdesc->ui_length); memcpy(usbioc_str_desc2, pdesc->desc_data, pdesc->ui_length);
gUSBManage.p_string_desc[2] = (USB_STRING_DESC *)usbioc_str_desc2; gUSBManage.p_string_desc[2] = (USB_STRING_DESC *)usbioc_str_desc2;
} else { } else {
DBG_ERR("str2 size exceed 512\r\n"); DBG_ERR("str2 size exceed 512\r\n");
}
} }
} }
} break; } break;
case USB2DEV_IOC_SET_STRING3_DESC: { case USB2DEV_IOC_SET_STRING3_DESC: {
ret = copy_from_user(pdesc, (void __user *)ul_arg, sizeof(USB2DEV_DESC)); ret = copy_from_user(pdesc, (void __user *)ul_arg, sizeof(USB2DEV_DESC));
if (!ret) { 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" if (pdesc != NULL) {
, 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]); 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) { if(usbioc_str_desc3 == NULL) {
usbioc_str_desc3 = kmalloc(512, GFP_KERNEL); usbioc_str_desc3 = kmalloc(512, GFP_KERNEL);
} }
if (pdesc->ui_length <= 512) { if (pdesc->ui_length <= 512) {
memcpy(usbioc_str_desc3, pdesc->desc_data, pdesc->ui_length); memcpy(usbioc_str_desc3, pdesc->desc_data, pdesc->ui_length);
gUSBManage.p_string_desc[3] = (USB_STRING_DESC *)usbioc_str_desc3; gUSBManage.p_string_desc[3] = (USB_STRING_DESC *)usbioc_str_desc3;
} else { } else {
DBG_ERR("str3 size exceed 512\r\n"); DBG_ERR("str3 size exceed 512\r\n");
}
} }
} }
} break; } break;
case USB2DEV_IOC_SET_STRING4_DESC: { case USB2DEV_IOC_SET_STRING4_DESC: {
ret = copy_from_user(pdesc, (void __user *)ul_arg, sizeof(USB2DEV_DESC)); ret = copy_from_user(pdesc, (void __user *)ul_arg, sizeof(USB2DEV_DESC));
if (!ret) { 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" if (pdesc != NULL) {
, 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]); 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) { if(usbioc_str_desc4 == NULL) {
usbioc_str_desc4 = kmalloc(512, GFP_KERNEL); usbioc_str_desc4 = kmalloc(512, GFP_KERNEL);
} }
if (pdesc->ui_length <= 512) { if (pdesc->ui_length <= 512) {
memcpy(usbioc_str_desc4, pdesc->desc_data, pdesc->ui_length); memcpy(usbioc_str_desc4, pdesc->desc_data, pdesc->ui_length);
gUSBManage.p_string_desc[4] = (USB_STRING_DESC *)usbioc_str_desc4; gUSBManage.p_string_desc[4] = (USB_STRING_DESC *)usbioc_str_desc4;
} else { } else {
DBG_ERR("str4 size exceed 512\r\n"); DBG_ERR("str4 size exceed 512\r\n");
}
} }
} }
} break; } break;
case USB2DEV_IOC_SET_STRING5_DESC: { case USB2DEV_IOC_SET_STRING5_DESC: {
ret = copy_from_user(pdesc, (void __user *)ul_arg, sizeof(USB2DEV_DESC)); ret = copy_from_user(pdesc, (void __user *)ul_arg, sizeof(USB2DEV_DESC));
if (!ret) { 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" if (pdesc != NULL) {
, 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]); 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) { if(usbioc_str_desc5 == NULL) {
usbioc_str_desc5 = kmalloc(512, GFP_KERNEL); usbioc_str_desc5 = kmalloc(512, GFP_KERNEL);
} }
if (pdesc->ui_length <= 512) { if (pdesc->ui_length <= 512) {
memcpy(usbioc_str_desc5, pdesc->desc_data, pdesc->ui_length); memcpy(usbioc_str_desc5, pdesc->desc_data, pdesc->ui_length);
gUSBManage.p_string_desc[5] = (USB_STRING_DESC *)usbioc_str_desc5; gUSBManage.p_string_desc[5] = (USB_STRING_DESC *)usbioc_str_desc5;
} else { } else {
DBG_ERR("str5 size exceed 512\r\n"); DBG_ERR("str5 size exceed 512\r\n");
}
} }
} }
} break; } break;
case USB2DEV_IOC_SET_STRING6_DESC: { case USB2DEV_IOC_SET_STRING6_DESC: {
ret = copy_from_user(pdesc, (void __user *)ul_arg, sizeof(USB2DEV_DESC)); ret = copy_from_user(pdesc, (void __user *)ul_arg, sizeof(USB2DEV_DESC));
if (!ret) { 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" if (pdesc != NULL) {
, 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]); 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) { if(usbioc_str_desc6 == NULL) {
usbioc_str_desc6 = kmalloc(512, GFP_KERNEL); usbioc_str_desc6 = kmalloc(512, GFP_KERNEL);
} }
if (pdesc->ui_length <= 512) { if (pdesc->ui_length <= 512) {
memcpy(usbioc_str_desc6, pdesc->desc_data, pdesc->ui_length); memcpy(usbioc_str_desc6, pdesc->desc_data, pdesc->ui_length);
gUSBManage.p_string_desc[6] = (USB_STRING_DESC *)usbioc_str_desc6; gUSBManage.p_string_desc[6] = (USB_STRING_DESC *)usbioc_str_desc6;
} else { } else {
DBG_ERR("str6 size exceed 512\r\n"); DBG_ERR("str6 size exceed 512\r\n");
}
} }
} }
} break; } break;
case USB2DEV_IOC_SET_STRING7_DESC: { case USB2DEV_IOC_SET_STRING7_DESC: {
ret = copy_from_user(pdesc, (void __user *)ul_arg, sizeof(USB2DEV_DESC)); ret = copy_from_user(pdesc, (void __user *)ul_arg, sizeof(USB2DEV_DESC));
if (!ret) { 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" if (pdesc != NULL) {
, 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]); 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) { if(usbioc_str_desc7 == NULL) {
usbioc_str_desc7 = kmalloc(512, GFP_KERNEL); usbioc_str_desc7 = kmalloc(512, GFP_KERNEL);
} }
if (pdesc->ui_length <= 512) { if (pdesc->ui_length <= 512) {
memcpy(usbioc_str_desc7, pdesc->desc_data, pdesc->ui_length); memcpy(usbioc_str_desc7, pdesc->desc_data, pdesc->ui_length);
gUSBManage.p_string_desc[7] = (USB_STRING_DESC *)usbioc_str_desc7; gUSBManage.p_string_desc[7] = (USB_STRING_DESC *)usbioc_str_desc7;
} else { } else {
DBG_ERR("str7 size exceed 512\r\n"); DBG_ERR("str7 size exceed 512\r\n");
}
} }
} }
} break; } 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: { case USB2DEV_IOC_SET_EP_R: {
USB2DEV_DATA_RW data_rw; USB2DEV_DATA_RW data_rw;
UINT32 dma_len = 0; UINT32 dma_len = 0;
ER erReturn;
ret = copy_from_user(&data_rw, (void __user *)ul_arg, sizeof(USB2DEV_DATA_RW)); ret = copy_from_user(&data_rw, (void __user *)ul_arg, sizeof(USB2DEV_DATA_RW));
if (!ret) { if (!ret) {
ret = copy_from_user(&dma_len, (void __user *)data_rw.dma_length, sizeof(UINT32)); ret = copy_from_user(&dma_len, (void __user *)data_rw.dma_length, sizeof(UINT32));
if (!ret) if (!ret) {
usb2dev_set_ep_read(data_rw.epn, data_rw.buffer, &dma_len); 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; } break;
case USB2DEV_IOC_SET_EP_W: { case USB2DEV_IOC_SET_EP_W: {
USB2DEV_DATA_RW data_rw; USB2DEV_DATA_RW data_rw;
UINT32 dma_len = 0; UINT32 dma_len = 0;
ER erReturn;
ret = copy_from_user(&data_rw, (void __user *)ul_arg, sizeof(USB2DEV_DATA_RW)); ret = copy_from_user(&data_rw, (void __user *)ul_arg, sizeof(USB2DEV_DATA_RW));
if (!ret) { if (!ret) {
ret = copy_from_user(&dma_len, (void __user *)data_rw.dma_length, sizeof(UINT32)); ret = copy_from_user(&dma_len, (void __user *)data_rw.dma_length, sizeof(UINT32));
if (!ret) if (!ret) {
usb2dev_set_ep_write(data_rw.epn, data_rw.buffer, &dma_len); 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; } break;
case USB2DEV_IOC_READ_EP: { 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)); ret = copy_from_user(&dma_len, (void __user *)data_rw.dma_length, sizeof(UINT32));
if (!ret) { 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) { if(dma_len <= 64) {
memset(pmodule_info->ctrl_buff, 0x0, 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(dma_len <= 64) { if (ret != 0)
usb2dev_read_endpoint(data_rw.epn, pmodule_info->ctrl_buff, &dma_len); DBG_ERR("copy_to_user\n");
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 { } 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 { } 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)); ret = copy_from_user(&dma_len, (void __user *)data_rw.dma_length, sizeof(UINT32));
if (!ret) { 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) { ret = copy_to_user((void __user *)data_rw.dma_length, &dma_len, sizeof(UINT32));
usb2dev_read_endpoint_timeout(data_rw.epn, data_rw.buffer, &dma_len, data_rw.timeout_ms); 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; } 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)); ret = copy_from_user(&dma_len, (void __user *)data_rw.dma_length, sizeof(UINT32));
if (!ret) { 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) { if(dma_len <= 64) {
memset(pmodule_info->ctrl_buff, 0x0, 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) { usb2dev_write_endpoint(data_rw.epn, pmodule_info->ctrl_buff, &dma_len);
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);
} else {
DBG_ERR("ep0 r sz err %d\n",dma_len);
}
} else { } 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 { } 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)); ret = copy_from_user(&dma_len, (void __user *)data_rw.dma_length, sizeof(UINT32));
if (!ret) { if (!ret) {
if ((data_rw.epn <= (USB_EP_MAX -1))) {
if (data_rw.epn != USB_EP0) { if (data_rw.epn != USB_EP0) {
usb2dev_write_endpoint_timeout(data_rw.epn, data_rw.buffer, &dma_len, data_rw.timeout_ms); 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: { case USB2DEV_IOC_STALL_EP: {
ret = copy_from_user(&value, (void __user *)ul_arg, sizeof(UINT32)); ret = copy_from_user(&value, (void __user *)ul_arg, sizeof(UINT32));
if (!ret) { 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; } break;
@ -1008,10 +1079,14 @@ int nvt_usb2dev_drv_ioctl(unsigned char uc_if, USB2DEV_MODULE_INFO *pmodule_info
case USB2DEV_IOC_CHK_EPBUSY: { case USB2DEV_IOC_CHK_EPBUSY: {
ret = copy_from_user(&value, (void __user *)ul_arg, sizeof(UINT32)); ret = copy_from_user(&value, (void __user *)ul_arg, sizeof(UINT32));
if (!ret) { if (!ret) {
value = usb2dev_check_ep_busy((USB_EP) value); if ((value <= (USB_EP_MAX -1))) {
ret = copy_to_user((void __user *)ul_arg, &value, sizeof(UINT32)); value = usb2dev_check_ep_busy((USB_EP) value);
if (ret != 0) ret = copy_to_user((void __user *)ul_arg, &value, sizeof(UINT32));
DBG_ERR("copy_to_user\n"); if (ret != 0)
DBG_ERR("copy_to_user\n");
} else {
DBG_ERR("USB2DEV_IOC_CHK_EPBUSY EP out of range\n");
}
} }
} break; } break;

View File

@ -17,4 +17,4 @@
#endif #endif
#endif #endif
VOS_MODULE_VERSION(usb2dev, 1, 00, 000, 11); VOS_MODULE_VERSION(usb2dev, 1, 00, 000, 14);