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 "linux/delay.h"
#endif
#include <plat/nvt-sramctl.h>
#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;

View File

@ -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) {

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);
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,6 +444,7 @@ 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) {
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]);
@ -451,11 +457,13 @@ int nvt_usb2dev_drv_ioctl(unsigned char uc_if, USB2DEV_MODULE_INFO *pmodule_info
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) {
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]);
@ -468,11 +476,13 @@ int nvt_usb2dev_drv_ioctl(unsigned char uc_if, USB2DEV_MODULE_INFO *pmodule_info
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) {
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]);
@ -485,11 +495,13 @@ int nvt_usb2dev_drv_ioctl(unsigned char uc_if, USB2DEV_MODULE_INFO *pmodule_info
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) {
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]);
@ -502,11 +514,13 @@ int nvt_usb2dev_drv_ioctl(unsigned char uc_if, USB2DEV_MODULE_INFO *pmodule_info
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) {
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]);
@ -519,11 +533,13 @@ int nvt_usb2dev_drv_ioctl(unsigned char uc_if, USB2DEV_MODULE_INFO *pmodule_info
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) {
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]);
@ -536,11 +552,13 @@ int nvt_usb2dev_drv_ioctl(unsigned char uc_if, USB2DEV_MODULE_INFO *pmodule_info
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) {
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]);
@ -555,10 +573,12 @@ int nvt_usb2dev_drv_ioctl(unsigned char uc_if, USB2DEV_MODULE_INFO *pmodule_info
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) {
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]);
@ -573,10 +593,12 @@ int nvt_usb2dev_drv_ioctl(unsigned char uc_if, USB2DEV_MODULE_INFO *pmodule_info
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) {
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]);
@ -591,10 +613,12 @@ int nvt_usb2dev_drv_ioctl(unsigned char uc_if, USB2DEV_MODULE_INFO *pmodule_info
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) {
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]);
@ -609,10 +633,12 @@ int nvt_usb2dev_drv_ioctl(unsigned char uc_if, USB2DEV_MODULE_INFO *pmodule_info
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) {
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]);
@ -627,10 +653,12 @@ int nvt_usb2dev_drv_ioctl(unsigned char uc_if, USB2DEV_MODULE_INFO *pmodule_info
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) {
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]);
@ -645,10 +673,12 @@ int nvt_usb2dev_drv_ioctl(unsigned char uc_if, USB2DEV_MODULE_INFO *pmodule_info
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) {
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]);
@ -663,10 +693,12 @@ int nvt_usb2dev_drv_ioctl(unsigned char uc_if, USB2DEV_MODULE_INFO *pmodule_info
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) {
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]);
@ -681,6 +713,7 @@ int nvt_usb2dev_drv_ioctl(unsigned char uc_if, USB2DEV_MODULE_INFO *pmodule_info
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,7 +924,7 @@ 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);
@ -887,6 +943,9 @@ int nvt_usb2dev_drv_ioctl(unsigned char uc_if, USB2DEV_MODULE_INFO *pmodule_info
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 EP out of range\n");
}
}
}
@ -902,7 +961,7 @@ 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);
}
@ -910,7 +969,9 @@ int nvt_usb2dev_drv_ioctl(unsigned char uc_if, USB2DEV_MODULE_INFO *pmodule_info
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");
}
}
}
} break;
@ -925,7 +986,7 @@ 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);
@ -945,6 +1006,9 @@ int nvt_usb2dev_drv_ioctl(unsigned char uc_if, USB2DEV_MODULE_INFO *pmodule_info
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 EP out of range\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_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");
}
}
}
@ -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) {
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) {
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;

View File

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