1.在linux下插入usb 进入msdc模式,在Windows上没有出盘符
This commit is contained in:
parent
996aa82e50
commit
5bd85f955b
6
code/hdal/drivers/k_driver/source/comm/usb2dev/usb2dev.c
Executable file → Normal file
6
code/hdal/drivers/k_driver/source/comm/usb2dev/usb2dev.c
Executable file → Normal 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;
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
93
code/hdal/drivers/k_driver/source/comm/usb2dev/usb2dev_drv.c
Executable file → Normal file
93
code/hdal/drivers/k_driver/source/comm/usb2dev/usb2dev_drv.c
Executable file → Normal 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;
|
||||
|
|
|
@ -17,4 +17,4 @@
|
|||
#endif
|
||||
#endif
|
||||
|
||||
VOS_MODULE_VERSION(usb2dev, 1, 00, 000, 11);
|
||||
VOS_MODULE_VERSION(usb2dev, 1, 00, 000, 14);
|
||||
|
|
Loading…
Reference in New Issue
Block a user