usbdev: modify usb device support USB3.0 MaxPacketSize

Signed-off-by: yangsong8 <yangsong8@xiaomi.com>
This commit is contained in:
yangsong8
2024-07-02 14:36:49 +08:00
committed by Alan Carvalho de Assis
parent 0788e68285
commit 07aa8a5c57
20 changed files with 771 additions and 501 deletions

View File

@@ -318,6 +318,35 @@ config PL2303_EP0MAXPACKET
int "Packet and request buffer sizes"
default 64
config PL2303_EPBULK_FSSIZE
int "BULK endpoints full speed MAXPACKET size"
default 64
---help---
Max package size for the bulk endpoint if full speed mode.
Default 64.
if USBDEV_DUALSPEED
config PL2303_EPBULK_HSSIZE
int "BULK endpoints high speed MAXPACKET size"
default 512
---help---
Max package size for the bulk endpoint if high speed mode.
Default 512.
endif # USBDEV_DUALSPEED
if USBDEV_SUPERSPEED
config PL2303_EPBULK_SSSIZE
int "BULK endpoints super speed MAXPACKET size"
default 1024
---help---
Max package size for the bulk endpoint if super speed mode.
Default 1024.
endif # USBDEV_SUPERSPEED
config PL2303_NWRREQS
int "Number of read requests that can be in flight"
default 4
@@ -462,6 +491,17 @@ config CDCACM_EPINTIN_HSSIZE
endif # USBDEV_DUALSPEED
if USBDEV_SUPERSPEED
config CDCACM_EPINTIN_SSSIZE
int "Interrupt IN super speed MAXPACKET size"
default 64
---help---
Max package size for the interrupt IN endpoint if super speed mode.
Default 64.
endif # USBDEV_SUPERSPEED
if !CDCACM_COMPOSITE
# In a composite device the EP-Number is configured dynamically via
@@ -494,6 +534,17 @@ config CDCACM_EPBULKOUT_HSSIZE
endif # USBDEV_DUALSPEED
if USBDEV_SUPERSPEED
config CDCACM_EPBULKOUT_SSSIZE
int "Bulk OUT out super speed MAXPACKET size"
default 1024
---help---
Max package size for the bulk OUT endpoint if super speed mode.
Default 1024.
endif # USBDEV_SUPERSPEED
if !CDCACM_COMPOSITE
# In a composite device the EP-Number is configured dynamically via
@@ -526,6 +577,17 @@ config CDCACM_EPBULKIN_HSSIZE
endif # USBDEV_DUALSPEED
if USBDEV_SUPERSPEED
config CDCACM_EPBULKIN_SSSIZE
int "Bulk IN super speed MAXPACKET size"
default 1024
---help---
Max package size for the bulk IN endpoint if super speed mode.
Default 1024.
endif # USBDEV_SUPERSPEED
config CDCACM_NRDREQS
int "Number of read requests that can be in flight"
default 4
@@ -670,7 +732,7 @@ config USBADB_EPBULKOUT_FSSIZE
if USBDEV_DUALSPEED
config USBADB_EPBULKOUT_HSSIZE
int "Bulk OUT out high speed MAXPACKET size"
int "Bulk OUT high speed MAXPACKET size"
default 512
---help---
Max package size for the bulk OUT endpoint if high speed mode.
@@ -678,6 +740,17 @@ config USBADB_EPBULKOUT_HSSIZE
endif # USBDEV_DUALSPEED
if USBDEV_SUPERSPEED
config USBADB_EPBULKOUT_SSSIZE
int "Bulk OUT super speed MAXPACKET size"
default 1024
---help---
Max package size for the bulk OUT endpoint if super speed mode.
Default 1024.
endif # USBDEV_SUPERSPEED
config USBADB_EPBULKIN_FSSIZE
int "Bulk IN full speed MAXPACKET size"
default 64
@@ -696,6 +769,17 @@ config USBADB_EPBULKIN_HSSIZE
endif # USBDEV_DUALSPEED
if USBDEV_SUPERSPEED
config USBADB_EPBULKIN_SSSIZE
int "Bulk IN super speed MAXPACKET size"
default 1024
---help---
Max package size for the bulk IN endpoint if super speed mode.
Default 1024.
endif # USBDEV_SUPERSPEED
config USBADB_NRDREQS
int "Number of read requests that can be in flight"
default 4
@@ -1135,6 +1219,17 @@ config CDCECM_EPINTIN_HSSIZE
endif # USBDEV_DUALSPEED
if USBDEV_SUPERSPEED
config CDCECM_EPINTIN_SSSIZE
int "Interrupt IN super speed MAXPACKET size"
default 64
---help---
Max package size for the interrupt IN endpoint if super speed mode.
Default 64.
endif # USBDEV_SUPERSPEED
if !CDCECM_COMPOSITE
# In a composite device the EP-Number is configured dynamically via
@@ -1159,7 +1254,7 @@ config CDCECM_EPBULKOUT_FSSIZE
if USBDEV_DUALSPEED
config CDCECM_EPBULKOUT_HSSIZE
int "Bulk OUT out high speed MAXPACKET size"
int "Bulk OUT high speed MAXPACKET size"
default 512
---help---
Max package size for the bulk OUT endpoint if high speed mode.
@@ -1167,6 +1262,17 @@ config CDCECM_EPBULKOUT_HSSIZE
endif # USBDEV_DUALSPEED
if USBDEV_SUPERSPEED
config CDCECM_EPBULKOUT_SSSIZE
int "Bulk OUT super speed MAXPACKET size"
default 1024
---help---
Max package size for the bulk OUT endpoint if super speed mode.
Default 1024.
endif # USBDEV_SUPERSPEED
if !CDCECM_COMPOSITE
# In a composite device the EP-Number is configured dynamically via
@@ -1199,6 +1305,17 @@ config CDCECM_EPBULKIN_HSSIZE
endif # USBDEV_DUALSPEED
if USBDEV_SUPERSPEED
config CDCECM_EPBULKIN_SSSIZE
int "Bulk IN super speed MAXPACKET size"
default 1024
---help---
Max package size for the bulk IN endpoint if super speed mode.
Default 1024.
endif # USBDEV_SUPERSPEED
if !CDCECM_COMPOSITE
# In a composite device the Vendor- and Product-ID is given by the composite
@@ -1310,6 +1427,17 @@ config CDCNCM_EPINTIN_HSSIZE
endif # USBDEV_DUALSPEED
if USBDEV_SUPERSPEED
config CDCNCM_EPINTIN_SSSIZE
int "Interrupt IN super speed MAXPACKET size"
default 64
---help---
Max package size for the interrupt IN endpoint if super speed mode.
Default 64.
endif # USBDEV_SUPERSPEED
if !CDCNCM_COMPOSITE
# In a composite device the EP-Number is configured dynamically via
@@ -1334,7 +1462,7 @@ config CDCNCM_EPBULKOUT_FSSIZE
if USBDEV_DUALSPEED
config CDCNCM_EPBULKOUT_HSSIZE
int "Bulk OUT out high speed MAXPACKET size"
int "Bulk OUT high speed MAXPACKET size"
default 512
---help---
Max package size for the bulk OUT endpoint if high speed mode.
@@ -1342,6 +1470,17 @@ config CDCNCM_EPBULKOUT_HSSIZE
endif # USBDEV_DUALSPEED
if USBDEV_SUPERSPEED
config CDCNCM_EPBULKOUT_SSSIZE
int "Bulk OUT super speed MAXPACKET size"
default 1024
---help---
Max package size for the bulk OUT endpoint if super speed mode.
Default 1024.
endif # USBDEV_SUPERSPEED
if !CDCNCM_COMPOSITE
# In a composite device the EP-Number is configured dynamically via
@@ -1374,6 +1513,17 @@ config CDCNCM_EPBULKIN_HSSIZE
endif # USBDEV_DUALSPEED
if USBDEV_SUPERSPEED
config CDCNCM_EPBULKIN_SSSIZE
int "Bulk IN super speed MAXPACKET size"
default 1024
---help---
Max package size for the bulk IN endpoint if super speed mode.
Default 1024.
endif # USBDEV_SUPERSPEED
if !CDCNCM_COMPOSITE
# In a composite device the Vendor- and Product-ID is given by the composite
@@ -1519,6 +1669,17 @@ config USBMTP_EPBULKOUT_HSSIZE
endif # USBDEV_DUALSPEED
if USBDEV_SUPERSPEED
config USBMTP_EPBULKOUT_SSSIZE
int "Bulk OUT Super Speed MAXPACKET size"
default 1024
---help---
Max package size for the bulk OUT endpoint if Super Speed mode.
Default 1024.
endif # USBDEV_DUALSPEED
config USBMTP_EPBULKIN_FSSIZE
int "Bulk IN Full Speed MAXPACKET size"
default 64
@@ -1537,6 +1698,17 @@ config USBMTP_EPBULKIN_HSSIZE
endif # USBDEV_DUALSPEED
if USBDEV_SUPERSPEED
config USBMTP_EPBULKIN_SSSIZE
int "Bulk IN Super Speed MAXPACKET size"
default 1024
---help---
Max package size for the bulk IN endpoint if Super Speed mode.
Default 1024.
endif # USBDEV_DUALSPEED
config USBMTP_EPINTIN_SIZE
int "Interrupt IN MAXPACKET size"
default 28

View File

@@ -117,9 +117,9 @@
#ifndef CONFIG_USBADB_COMPOSITE
static const struct usb_devdesc_s g_adb_devdesc =
{
.len = USB_SIZEOF_DEVDESC, /* Descriptor length */
.type = USB_DESC_TYPE_DEVICE, /* Descriptor type */
.usb = /* USB version */
.len = USB_SIZEOF_DEVDESC, /* Descriptor length */
.type = USB_DESC_TYPE_DEVICE, /* Descriptor type */
.usb = /* USB version */
{
LSBYTE(0x0200),
MSBYTE(0x0200)
@@ -133,37 +133,37 @@ static const struct usb_devdesc_s g_adb_devdesc =
LSBYTE(CONFIG_USBADB_VENDORID),
MSBYTE(CONFIG_USBADB_VENDORID)
},
.product = /* Product ID */
.product = /* Product ID */
{
LSBYTE(CONFIG_USBADB_PRODUCTID),
MSBYTE(CONFIG_USBADB_PRODUCTID)
},
.device = /* Device ID */
.device = /* Device ID */
{
LSBYTE(USBADB_VERSIONNO),
MSBYTE(USBADB_VERSIONNO)
},
.imfgr = USBADB_MANUFACTURERSTRID, /* Manufacturer */
.iproduct = USBADB_PRODUCTSTRID, /* Product */
.serno = USBADB_SERIALSTRID, /* Serial number */
.nconfigs = USBADB_NCONFIGS, /* Number of configurations */
.imfgr = USBADB_MANUFACTURERSTRID, /* Manufacturer */
.iproduct = USBADB_PRODUCTSTRID, /* Product */
.serno = USBADB_SERIALSTRID, /* Serial number */
.nconfigs = USBADB_NCONFIGS, /* Number of configurations */
};
# ifdef CONFIG_USBDEV_DUALSPEED
static const struct usb_qualdesc_s g_adb_qualdesc =
{
USB_SIZEOF_QUALDESC, /* len */
USB_DESC_TYPE_DEVICEQUALIFIER, /* type */
{ /* usb */
USB_SIZEOF_QUALDESC, /* len */
USB_DESC_TYPE_DEVICEQUALIFIER, /* type */
{ /* usb */
LSBYTE(0x0200),
MSBYTE(0x0200)
},
0, /* classid */
0, /* subclass */
0, /* protocol */
CONFIG_USBADB_EP0MAXPACKET, /* mxpacketsize */
USBADB_NCONFIGS, /* nconfigs */
0, /* reserved */
0, /* classid */
0, /* subclass */
0, /* protocol */
CONFIG_USBADB_EP0MAXPACKET, /* mxpacketsize */
USBADB_NCONFIGS, /* nconfigs */
0, /* reserved */
};
# endif
@@ -238,6 +238,9 @@ static const struct usbdev_epinfo_s g_adb_epbulkin =
.fssize = CONFIG_USBADB_EPBULKIN_FSSIZE,
#ifdef CONFIG_USBDEV_DUALSPEED
.hssize = CONFIG_USBADB_EPBULKIN_HSSIZE,
#endif
#ifdef CONFIG_USBDEV_SUPERSPEED
.sssize = CONFIG_USBADB_EPBULKIN_SSSIZE,
#endif
.reqnum = CONFIG_USBADB_NWRREQS,
};
@@ -257,6 +260,9 @@ static const struct usbdev_epinfo_s g_adb_epbulkout =
.fssize = CONFIG_USBADB_EPBULKOUT_FSSIZE,
#ifdef CONFIG_USBDEV_DUALSPEED
.hssize = CONFIG_USBADB_EPBULKOUT_HSSIZE,
#endif
#ifdef CONFIG_USBDEV_SUPERSPEED
.sssize = CONFIG_USBADB_EPBULKOUT_SSSIZE,
#endif
.reqnum = CONFIG_USBADB_NRDREQS,
};
@@ -279,7 +285,7 @@ static const FAR struct usbdev_epinfo_s *g_adb_epinfos[USBADB_NUM_EPS] =
*
****************************************************************************/
#ifdef CONFIG_USBDEV_DUALSPEED
#if defined(CONFIG_USBDEV_DUALSPEED) || defined(CONFIG_USBDEV_SUPERSPEED)
static int16_t usbclass_mkcfgdesc(FAR uint8_t *buf,
FAR struct usbdev_devinfo_s *devinfo,
uint8_t speed, uint8_t type)
@@ -288,19 +294,18 @@ static int16_t usbclass_mkcfgdesc(FAR uint8_t *buf,
FAR struct usbdev_devinfo_s *devinfo)
#endif
{
bool hispeed = false;
FAR struct usb_epdesc_s *epdesc;
FAR struct usb_ifdesc_s *dest;
#ifdef CONFIG_USBDEV_DUALSPEED
hispeed = (speed == USB_SPEED_HIGH);
/* Check for switches between high and full speed */
if (type == USB_DESC_TYPE_OTHERSPEEDCONFIG)
#if defined(CONFIG_USBDEV_DUALSPEED) || defined(CONFIG_USBDEV_SUPERSPEED)
if (type == USB_DESC_TYPE_OTHERSPEEDCONFIG && speed < USB_SPEED_SUPER)
{
hispeed = !hispeed;
speed = speed == USB_SPEED_HIGH ? USB_SPEED_FULL : USB_SPEED_HIGH;
}
#else
uint8_t speed = USB_SPEED_FULL;
#endif
dest = (FAR struct usb_ifdesc_s *)buf;
@@ -309,9 +314,9 @@ static int16_t usbclass_mkcfgdesc(FAR uint8_t *buf,
memcpy(dest, &g_adb_ifdesc, sizeof(g_adb_ifdesc));
usbdev_copy_epdesc(&epdesc[0], devinfo->epno[USBADB_EP_BULKIN_IDX],
hispeed, &g_adb_epbulkin);
speed, &g_adb_epbulkin);
usbdev_copy_epdesc(&epdesc[1], devinfo->epno[USBADB_EP_BULKOUT_IDX],
hispeed, &g_adb_epbulkout);
speed, &g_adb_epbulkout);
#ifdef CONFIG_USBADB_COMPOSITE
/* For composite device, apply possible offset to the interface numbers */

View File

@@ -175,7 +175,7 @@ static void cdcacm_resetconfig(FAR struct cdcacm_dev_s *priv);
static int cdcacm_epconfigure(FAR struct usbdev_ep_s *ep,
enum cdcacm_epdesc_e epid, bool last,
FAR struct usbdev_devinfo_s *devinfo,
bool hispeed);
uint8_t speed);
static int cdcacm_setconfig(FAR struct cdcacm_dev_s *priv,
uint8_t config);
@@ -915,10 +915,10 @@ static void cdcacm_resetconfig(FAR struct cdcacm_dev_s *priv)
static int cdcacm_epconfigure(FAR struct usbdev_ep_s *ep,
enum cdcacm_epdesc_e epid, bool last,
FAR struct usbdev_devinfo_s *devinfo,
bool hispeed)
uint8_t speed)
{
struct usb_epdesc_s epdesc;
cdcacm_copy_epdesc(epid, &epdesc, devinfo, hispeed);
cdcacm_copy_epdesc(epid, &epdesc, devinfo, speed);
return EP_CONFIGURE(ep, &epdesc, last);
}
@@ -975,18 +975,8 @@ static int cdcacm_setconfig(FAR struct cdcacm_dev_s *priv, uint8_t config)
/* Configure the IN interrupt endpoint */
#ifdef CONFIG_USBDEV_DUALSPEED
if (priv->usbdev->speed == USB_SPEED_HIGH)
{
ret = cdcacm_epconfigure(priv->epintin, CDCACM_EPINTIN, false,
&priv->devinfo, true);
}
else
#endif
{
ret = cdcacm_epconfigure(priv->epintin, CDCACM_EPINTIN, false,
&priv->devinfo, false);
}
ret = cdcacm_epconfigure(priv->epintin, CDCACM_EPINTIN, false,
&priv->devinfo, priv->usbdev->speed);
if (ret < 0)
{
@@ -998,18 +988,8 @@ static int cdcacm_setconfig(FAR struct cdcacm_dev_s *priv, uint8_t config)
/* Configure the IN bulk endpoint */
#ifdef CONFIG_USBDEV_DUALSPEED
if (priv->usbdev->speed == USB_SPEED_HIGH)
{
ret = cdcacm_epconfigure(priv->epbulkin, CDCACM_EPBULKIN, false,
&priv->devinfo, true);
}
else
#endif
{
ret = cdcacm_epconfigure(priv->epbulkin, CDCACM_EPBULKIN, false,
&priv->devinfo, false);
}
ret = cdcacm_epconfigure(priv->epbulkin, CDCACM_EPBULKIN, false,
&priv->devinfo, priv->usbdev->speed);
if (ret < 0)
{
@@ -1021,18 +1001,8 @@ static int cdcacm_setconfig(FAR struct cdcacm_dev_s *priv, uint8_t config)
/* Configure the OUT bulk endpoint */
#ifdef CONFIG_USBDEV_DUALSPEED
if (priv->usbdev->speed == USB_SPEED_HIGH)
{
ret = cdcacm_epconfigure(priv->epbulkout, CDCACM_EPBULKOUT, true,
&priv->devinfo, true);
}
else
#endif
{
ret = cdcacm_epconfigure(priv->epbulkout, CDCACM_EPBULKOUT, true,
&priv->devinfo, false);
}
ret = cdcacm_epconfigure(priv->epbulkout, CDCACM_EPBULKOUT, true,
&priv->devinfo, priv->usbdev->speed);
if (ret < 0)
{
@@ -1336,8 +1306,9 @@ static int cdcacm_bind(FAR struct usbdevclass_driver_s *driver,
priv->epbulkout->priv = priv;
/* Pre-allocate read requests. The buffer size is one full packet. */
#ifdef CONFIG_USBDEV_DUALSPEED
#if defined(CONFIG_USBDEV_SUPERSPEED)
reqlen = CONFIG_CDCACM_EPBULKOUT_SSSIZE;
#elif defined(CONFIG_USBDEV_DUALSPEED)
reqlen = CONFIG_CDCACM_EPBULKOUT_HSSIZE;
#else
reqlen = CONFIG_CDCACM_EPBULKOUT_FSSIZE;
@@ -1369,7 +1340,9 @@ static int cdcacm_bind(FAR struct usbdevclass_driver_s *driver,
* shared with interrupt IN endpoint which does not need a large buffer.
*/
#ifdef CONFIG_USBDEV_DUALSPEED
#if defined(CONFIG_USBDEV_SUPERSPEED)
reqlen = CONFIG_CDCACM_EPBULKIN_SSSIZE;
#elif defined(CONFIG_USBDEV_DUALSPEED)
reqlen = CONFIG_CDCACM_EPBULKIN_HSSIZE;
#else
reqlen = CONFIG_CDCACM_EPBULKIN_FSSIZE;
@@ -1658,7 +1631,7 @@ static int cdcacm_setup(FAR struct usbdevclass_driver_s *driver,
#ifndef CONFIG_CDCACM_COMPOSITE
case USB_DESC_TYPE_CONFIG:
{
#ifdef CONFIG_USBDEV_DUALSPEED
#if defined(CONFIG_USBDEV_DUALSPEED) || defined(CONFIG_USBDEV_SUPERSPEED)
ret = cdcacm_mkcfgdesc(ctrlreq->buf, &priv->devinfo,
dev->speed, ctrl->value[1]);
#else
@@ -2931,8 +2904,9 @@ int cdcacm_classobject(int minor, FAR struct usbdev_devinfo_s *devinfo,
priv->serdev.priv = priv;
/* Initialize the USB class driver structure */
#ifdef CONFIG_USBDEV_DUALSPEED
#if defined(CONFIG_USBDEV_SUPERSPEED)
drvr->drvr.speed = USB_SPEED_SUPER;
#elif defined(CONFIG_USBDEV_DUALSPEED)
drvr->drvr.speed = USB_SPEED_HIGH;
#else
drvr->drvr.speed = USB_SPEED_FULL;
@@ -3133,7 +3107,7 @@ void cdcacm_get_composite_devdesc(struct composite_devdesc_s *dev)
/* Let the construction function calculate the size of config descriptor */
#ifdef CONFIG_USBDEV_DUALSPEED
#if defined(CONFIG_USBDEV_DUALSPEED) || defined(CONFIG_USBDEV_SUPERSPEED)
dev->cfgdescsize = cdcacm_mkcfgdesc(NULL, NULL, USB_SPEED_UNKNOWN, 0);
#else
dev->cfgdescsize = cdcacm_mkcfgdesc(NULL, NULL);

View File

@@ -236,7 +236,7 @@ FAR const struct usb_devdesc_s *cdcacm_getdevdesc(void);
int cdcacm_copy_epdesc(enum cdcacm_epdesc_e epid,
FAR struct usb_epdesc_s *epdesc,
FAR struct usbdev_devinfo_s *devinfo,
bool hispeed);
uint8_t speed);
/****************************************************************************
* Name: cdcacm_mkcfgdesc
@@ -246,7 +246,7 @@ int cdcacm_copy_epdesc(enum cdcacm_epdesc_e epid,
*
****************************************************************************/
#ifdef CONFIG_USBDEV_DUALSPEED
#if defined(CONFIG_USBDEV_DUALSPEED) || defined(CONFIG_USBDEV_SUPERSPEED)
int16_t cdcacm_mkcfgdesc(FAR uint8_t *buf,
FAR struct usbdev_devinfo_s *devinfo,
uint8_t speed, uint8_t type);

View File

@@ -227,10 +227,10 @@ FAR const struct usb_devdesc_s *cdcacm_getdevdesc(void)
int cdcacm_copy_epdesc(enum cdcacm_epdesc_e epid,
FAR struct usb_epdesc_s *epdesc,
FAR struct usbdev_devinfo_s *devinfo,
bool hispeed)
uint8_t speed)
{
#ifndef CONFIG_USBDEV_DUALSPEED
UNUSED(hispeed);
#if !defined(CONFIG_USBDEV_DUALSPEED) && !defined(CONFIG_USBDEV_SUPERSPEED)
UNUSED(speed);
#endif
switch (epid)
@@ -242,8 +242,18 @@ int cdcacm_copy_epdesc(enum cdcacm_epdesc_e epid,
epdesc->addr = CDCACM_MKEPINTIN(devinfo); /* Endpoint address */
epdesc->attr = CDCACM_EPINTIN_ATTR; /* Endpoint attributes */
#ifdef CONFIG_USBDEV_SUPERSPEED
if (speed == USB_SPEED_SUPER || speed == USB_SPEED_SUPER_PLUS)
{
/* Maximum packet size (super speed) */
epdesc->mxpacketsize[0] = LSBYTE(CONFIG_CDCACM_EPINTIN_SSSIZE);
epdesc->mxpacketsize[1] = MSBYTE(CONFIG_CDCACM_EPINTIN_SSSIZE);
}
else
#endif
#ifdef CONFIG_USBDEV_DUALSPEED
if (hispeed)
if (speed == USB_SPEED_HIGH)
{
/* Maximum packet size (high speed) */
@@ -269,8 +279,19 @@ int cdcacm_copy_epdesc(enum cdcacm_epdesc_e epid,
epdesc->type = USB_DESC_TYPE_ENDPOINT; /* Descriptor type */
epdesc->addr = CDCACM_MKEPBULKOUT(devinfo); /* Endpoint address */
epdesc->attr = CDCACM_EPOUTBULK_ATTR; /* Endpoint attributes */
#ifdef CONFIG_USBDEV_SUPERSPEED
if (speed == USB_SPEED_SUPER || speed == USB_SPEED_SUPER_PLUS)
{
/* Maximum packet size (super speed) */
epdesc->mxpacketsize[0] = LSBYTE(CONFIG_CDCACM_EPBULKOUT_SSSIZE);
epdesc->mxpacketsize[1] = MSBYTE(CONFIG_CDCACM_EPBULKOUT_SSSIZE);
}
else
#endif
#ifdef CONFIG_USBDEV_DUALSPEED
if (hispeed)
if (speed == USB_SPEED_HIGH)
{
/* Maximum packet size (high speed) */
@@ -297,8 +318,18 @@ int cdcacm_copy_epdesc(enum cdcacm_epdesc_e epid,
epdesc->addr = CDCACM_MKEPBULKIN(devinfo); /* Endpoint address */
epdesc->attr = CDCACM_EPINBULK_ATTR; /* Endpoint attributes */
#ifdef CONFIG_USBDEV_SUPERSPEED
if (speed == USB_SPEED_SUPER || speed == USB_SPEED_SUPER_PLUS)
{
/* Maximum packet size (super speed) */
epdesc->mxpacketsize[0] = LSBYTE(CONFIG_CDCACM_EPBULKIN_SSSIZE);
epdesc->mxpacketsize[1] = MSBYTE(CONFIG_CDCACM_EPBULKIN_SSSIZE);
}
else
#endif
#ifdef CONFIG_USBDEV_DUALSPEED
if (hispeed)
if (speed == USB_SPEED_HIGH)
{
/* Maximum packet size (high speed) */
@@ -333,7 +364,7 @@ int cdcacm_copy_epdesc(enum cdcacm_epdesc_e epid,
*
****************************************************************************/
#ifdef CONFIG_USBDEV_DUALSPEED
#if defined(CONFIG_USBDEV_DUALSPEED) || defined(CONFIG_USBDEV_SUPERSPEED)
int16_t cdcacm_mkcfgdesc(FAR uint8_t *buf,
FAR struct usbdev_devinfo_s *devinfo,
uint8_t speed, uint8_t type)
@@ -343,17 +374,14 @@ int16_t cdcacm_mkcfgdesc(FAR uint8_t *buf,
#endif
{
int length = 0;
bool hispeed = false;
#ifdef CONFIG_USBDEV_DUALSPEED
hispeed = (speed == USB_SPEED_HIGH);
/* Check for switches between high and full speed */
if (type == USB_DESC_TYPE_OTHERSPEEDCONFIG)
#if defined(CONFIG_USBDEV_DUALSPEED) || defined(CONFIG_USBDEV_SUPERSPEED)
if (type == USB_DESC_TYPE_OTHERSPEEDCONFIG && speed < USB_SPEED_SUPER)
{
hispeed = !hispeed;
speed = speed == USB_SPEED_HIGH ? USB_SPEED_FULL : USB_SPEED_HIGH;
}
#else
uint8_t speed = USB_SPEED_FULL;
#endif
/* Fill in all descriptors directly to the buf */
@@ -376,7 +404,7 @@ int16_t cdcacm_mkcfgdesc(FAR uint8_t *buf,
/* Let's calculate the size... */
#ifdef CONFIG_USBDEV_DUALSPEED
#if defined(CONFIG_USBDEV_DUALSPEED) || defined(CONFIG_USBDEV_SUPERSPEED)
int16_t size = cdcacm_mkcfgdesc(NULL, NULL, speed, type);
#else
int16_t size = cdcacm_mkcfgdesc(NULL, NULL);
@@ -537,7 +565,7 @@ int16_t cdcacm_mkcfgdesc(FAR uint8_t *buf,
{
cdcacm_copy_epdesc(CDCACM_EPINTIN, (struct usb_epdesc_s *)buf,
devinfo,
hispeed);
speed);
buf += USB_SIZEOF_EPDESC;
}
@@ -575,7 +603,7 @@ int16_t cdcacm_mkcfgdesc(FAR uint8_t *buf,
{
cdcacm_copy_epdesc(CDCACM_EPBULKOUT, (struct usb_epdesc_s *)buf,
devinfo,
hispeed);
speed);
buf += USB_SIZEOF_EPDESC;
}
@@ -587,7 +615,7 @@ int16_t cdcacm_mkcfgdesc(FAR uint8_t *buf,
{
cdcacm_copy_epdesc(CDCACM_EPBULKIN, (struct usb_epdesc_s *)buf,
devinfo,
hispeed);
speed);
buf += USB_SIZEOF_EPDESC;
}

View File

@@ -208,7 +208,7 @@ static void cdcecm_wrcomplete(FAR struct usbdev_ep_s *ep,
static void cdcecm_mkepdesc(int epidx,
FAR struct usb_epdesc_s *epdesc,
FAR struct usbdev_devinfo_s *devinfo, bool hispeed);
FAR struct usbdev_devinfo_s *devinfo, uint8_t speed);
/****************************************************************************
* Private Data
@@ -949,7 +949,6 @@ static void cdcecm_resetconfig(FAR struct cdcecm_driver_s *self)
static int cdcecm_setconfig(FAR struct cdcecm_driver_s *self, uint8_t config)
{
struct usb_epdesc_s epdesc;
bool is_high_speed;
int ret = OK;
if (config == self->config)
@@ -969,7 +968,8 @@ static int cdcecm_setconfig(FAR struct cdcecm_driver_s *self, uint8_t config)
return -EINVAL;
}
cdcecm_mkepdesc(CDCECM_EP_INTIN_IDX, &epdesc, &self->devinfo, false);
cdcecm_mkepdesc(CDCECM_EP_INTIN_IDX,
&epdesc, &self->devinfo, self->usbdev.speed);
ret = EP_CONFIGURE(self->epint, &epdesc, false);
if (ret < 0)
@@ -979,9 +979,8 @@ static int cdcecm_setconfig(FAR struct cdcecm_driver_s *self, uint8_t config)
self->epint->priv = self;
is_high_speed = (self->usbdev.speed == USB_SPEED_HIGH);
cdcecm_mkepdesc(CDCECM_EP_BULKIN_IDX,
&epdesc, &self->devinfo, is_high_speed);
&epdesc, &self->devinfo, self->usbdev.speed);
ret = EP_CONFIGURE(self->epbulkin, &epdesc, false);
if (ret < 0)
@@ -992,7 +991,7 @@ static int cdcecm_setconfig(FAR struct cdcecm_driver_s *self, uint8_t config)
self->epbulkin->priv = self;
cdcecm_mkepdesc(CDCECM_EP_BULKOUT_IDX,
&epdesc, &self->devinfo, is_high_speed);
&epdesc, &self->devinfo, self->usbdev.speed);
ret = EP_CONFIGURE(self->epbulkout, &epdesc, true);
if (ret < 0)
@@ -1141,21 +1140,34 @@ static int cdcecm_mkstrdesc(uint8_t id, FAR struct usb_strdesc_s *strdesc)
static void cdcecm_mkepdesc(int epidx,
FAR struct usb_epdesc_s *epdesc,
FAR struct usbdev_devinfo_s *devinfo,
bool hispeed)
uint8_t speed)
{
uint16_t intin_mxpktsz = CONFIG_CDCECM_EPINTIN_FSSIZE;
uint16_t bulkout_mxpktsz = CONFIG_CDCECM_EPBULKOUT_FSSIZE;
uint16_t bulkin_mxpktsz = CONFIG_CDCECM_EPBULKIN_FSSIZE;
#ifdef CONFIG_USBDEV_DUALSPEED
if (hispeed)
#ifdef CONFIG_USBDEV_SUPERSPEED
if (speed == USB_SPEED_SUPER || speed == USB_SPEED_SUPER_PLUS)
{
/* Maximum packet size (super speed) */
intin_mxpktsz = CONFIG_CDCECM_EPINTIN_SSSIZE;
bulkout_mxpktsz = CONFIG_CDCECM_EPBULKOUT_SSSIZE;
bulkin_mxpktsz = CONFIG_CDCECM_EPBULKIN_SSSIZE;
}
else
#endif
#ifdef CONFIG_USBDEV_DUALSPEED
if (speed == USB_SPEED_HIGH)
{
/* Maximum packet size (high speed) */
intin_mxpktsz = CONFIG_CDCECM_EPINTIN_HSSIZE;
bulkout_mxpktsz = CONFIG_CDCECM_EPBULKOUT_HSSIZE;
bulkin_mxpktsz = CONFIG_CDCECM_EPBULKIN_HSSIZE;
}
#else
UNUSED(hispeed);
UNUSED(speed);
#endif
epdesc->len = USB_SIZEOF_EPDESC; /* Descriptor length */
@@ -1209,7 +1221,7 @@ static void cdcecm_mkepdesc(int epidx,
*
****************************************************************************/
#ifdef CONFIG_USBDEV_DUALSPEED
#if defined(CONFIG_USBDEV_DUALSPEED) || defined(CONFIG_USBDEV_SUPERSPEED)
static int16_t cdcecm_mkcfgdesc(FAR uint8_t *desc,
FAR struct usbdev_devinfo_s *devinfo,
uint8_t speed, uint8_t type)
@@ -1220,17 +1232,16 @@ static int16_t cdcecm_mkcfgdesc(FAR uint8_t *desc,
{
FAR struct usb_cfgdesc_s *cfgdesc = NULL;
int16_t len = 0;
bool is_high_speed = false;
#ifdef CONFIG_USBDEV_DUALSPEED
is_high_speed = (speed == USB_SPEED_HIGH);
/* Check for switches between high and full speed */
if (type == USB_DESC_TYPE_OTHERSPEEDCONFIG)
#if defined(CONFIG_USBDEV_DUALSPEED) || defined(CONFIG_USBDEV_SUPERSPEED)
if (type == USB_DESC_TYPE_OTHERSPEEDCONFIG && speed < USB_SPEED_SUPER)
{
is_high_speed = !is_high_speed;
speed = speed == USB_SPEED_HIGH ? USB_SPEED_FULL : USB_SPEED_HIGH;
}
#else
uint8_t speed = USB_SPEED_FULL;
#endif
#ifndef CONFIG_CDCECM_COMPOSITE
@@ -1355,7 +1366,7 @@ static int16_t cdcecm_mkcfgdesc(FAR uint8_t *desc,
{
FAR struct usb_epdesc_s *epdesc = (FAR struct usb_epdesc_s *)desc;
cdcecm_mkepdesc(CDCECM_EP_INTIN_IDX, epdesc, devinfo, false);
cdcecm_mkepdesc(CDCECM_EP_INTIN_IDX, epdesc, devinfo, speed);
desc += USB_SIZEOF_EPDESC;
}
@@ -1407,7 +1418,7 @@ static int16_t cdcecm_mkcfgdesc(FAR uint8_t *desc,
{
FAR struct usb_epdesc_s *epdesc = (FAR struct usb_epdesc_s *)desc;
cdcecm_mkepdesc(CDCECM_EP_BULKIN_IDX, epdesc, devinfo, is_high_speed);
cdcecm_mkepdesc(CDCECM_EP_BULKIN_IDX, epdesc, devinfo, speed);
desc += USB_SIZEOF_EPDESC;
}
@@ -1417,7 +1428,7 @@ static int16_t cdcecm_mkcfgdesc(FAR uint8_t *desc,
{
FAR struct usb_epdesc_s *epdesc = (FAR struct usb_epdesc_s *)desc;
cdcecm_mkepdesc(CDCECM_EP_BULKOUT_IDX, epdesc, devinfo, is_high_speed);
cdcecm_mkepdesc(CDCECM_EP_BULKOUT_IDX, epdesc, devinfo, speed);
desc += USB_SIZEOF_EPDESC;
}
@@ -1473,7 +1484,7 @@ static int cdcecm_getdescriptor(FAR struct cdcecm_driver_s *self,
#endif /* CONFIG_USBDEV_DUALSPEED */
case USB_DESC_TYPE_CONFIG:
{
#ifdef CONFIG_USBDEV_DUALSPEED
#if defined(CONFIG_USBDEV_DUALSPEED) || defined(CONFIG_USBDEV_SUPERSPEED)
return cdcecm_mkcfgdesc((FAR uint8_t *)desc, &self->devinfo,
self->usbdev.speed, type);
#else
@@ -2007,7 +2018,7 @@ void cdcecm_get_composite_devdesc(struct composite_devdesc_s *dev)
/* Let the construction function calculate the size of config descriptor */
#ifdef CONFIG_USBDEV_DUALSPEED
#if defined(CONFIG_USBDEV_DUALSPEED) || defined(CONFIG_USBDEV_SUPERSPEED)
dev->cfgdescsize = cdcecm_mkcfgdesc(NULL, NULL, USB_SPEED_UNKNOWN, 0);
#else
dev->cfgdescsize = cdcecm_mkcfgdesc(NULL, NULL);

View File

@@ -427,7 +427,7 @@ static void cdcncm_wrcomplete(FAR struct usbdev_ep_s *ep,
static void cdcncm_mkepdesc(int epidx, FAR struct usb_epdesc_s *epdesc,
FAR struct usbdev_devinfo_s *devinfo,
bool hispeed);
uint8_t speed);
/****************************************************************************
* Private Data
@@ -580,7 +580,7 @@ static const struct netdev_ops_s g_netops =
static inline uint32_t cdcncm_get(FAR uint8_t **address, size_t size)
{
uint32_t value;
uint32_t value = 0;
switch (size)
{
@@ -1582,7 +1582,6 @@ static void cdcncm_resetconfig(FAR struct cdcncm_driver_s *self)
static int cdcncm_setconfig(FAR struct cdcncm_driver_s *self, uint8_t config)
{
struct usb_epdesc_s epdesc;
bool is_high_speed = self->usbdev.speed == USB_SPEED_HIGH;
int ret;
if (config == self->config)
@@ -1602,7 +1601,8 @@ static int cdcncm_setconfig(FAR struct cdcncm_driver_s *self, uint8_t config)
return -EINVAL;
}
cdcncm_mkepdesc(CDCNCM_EP_INTIN_IDX, &epdesc, &self->devinfo, false);
cdcncm_mkepdesc(CDCNCM_EP_INTIN_IDX,
&epdesc, &self->devinfo, self->usbdev.speed);
ret = EP_CONFIGURE(self->epint, &epdesc, false);
if (ret < 0)
@@ -1612,7 +1612,7 @@ static int cdcncm_setconfig(FAR struct cdcncm_driver_s *self, uint8_t config)
self->epint->priv = self;
cdcncm_mkepdesc(CDCNCM_EP_BULKIN_IDX,
&epdesc, &self->devinfo, is_high_speed);
&epdesc, &self->devinfo, self->usbdev.speed);
ret = EP_CONFIGURE(self->epbulkin, &epdesc, false);
if (ret < 0)
@@ -1623,7 +1623,7 @@ static int cdcncm_setconfig(FAR struct cdcncm_driver_s *self, uint8_t config)
self->epbulkin->priv = self;
cdcncm_mkepdesc(CDCNCM_EP_BULKOUT_IDX,
&epdesc, &self->devinfo, is_high_speed);
&epdesc, &self->devinfo, self->usbdev.speed);
ret = EP_CONFIGURE(self->epbulkout, &epdesc, true);
if (ret < 0)
@@ -1911,21 +1911,34 @@ static int cdcmbim_mkstrdesc(uint8_t id, FAR struct usb_strdesc_s *strdesc)
static void cdcncm_mkepdesc(int epidx, FAR struct usb_epdesc_s *epdesc,
FAR struct usbdev_devinfo_s *devinfo,
bool hispeed)
uint8_t speed)
{
uint16_t intin_mxpktsz = CONFIG_CDCNCM_EPINTIN_FSSIZE;
uint16_t bulkout_mxpktsz = CONFIG_CDCNCM_EPBULKOUT_FSSIZE;
uint16_t bulkin_mxpktsz = CONFIG_CDCNCM_EPBULKIN_FSSIZE;
#ifdef CONFIG_USBDEV_DUALSPEED
if (hispeed)
#ifdef CONFIG_USBDEV_SUPERSPEED
if (speed == USB_SPEED_SUPER || speed == USB_SPEED_SUPER_PLUS)
{
/* Maximum packet size (super speed) */
intin_mxpktsz = CONFIG_CDCNCM_EPINTIN_SSSIZE;
bulkout_mxpktsz = CONFIG_CDCNCM_EPBULKOUT_SSSIZE;
bulkin_mxpktsz = CONFIG_CDCNCM_EPBULKIN_SSSIZE;
}
else
#endif
#ifdef CONFIG_USBDEV_DUALSPEED
if (speed == USB_SPEED_HIGH)
{
/* Maximum packet size (high speed) */
intin_mxpktsz = CONFIG_CDCNCM_EPINTIN_HSSIZE;
bulkout_mxpktsz = CONFIG_CDCNCM_EPBULKOUT_HSSIZE;
bulkin_mxpktsz = CONFIG_CDCNCM_EPBULKIN_HSSIZE;
}
#else
UNUSED(hispeed);
UNUSED(speed);
#endif
epdesc->len = USB_SIZEOF_EPDESC; /* Descriptor length */
@@ -1979,7 +1992,7 @@ static void cdcncm_mkepdesc(int epidx, FAR struct usb_epdesc_s *epdesc,
*
****************************************************************************/
#ifdef CONFIG_USBDEV_DUALSPEED
#if defined(CONFIG_USBDEV_DUALSPEED) || defined(CONFIG_USBDEV_SUPERSPEED)
static int16_t cdcnm_mkcfgdesc(FAR uint8_t *desc,
FAR struct usbdev_devinfo_s *devinfo,
uint8_t speed, uint8_t type, bool isncm)
@@ -1991,17 +2004,16 @@ static int16_t cdcnm_mkcfgdesc(FAR uint8_t *desc,
{
FAR struct usb_cfgdesc_s *cfgdesc = NULL;
int16_t len = 0;
bool is_high_speed = false;
#ifdef CONFIG_USBDEV_DUALSPEED
is_high_speed = (speed == USB_SPEED_HIGH);
/* Check for switches between high and full speed */
if (type == USB_DESC_TYPE_OTHERSPEEDCONFIG)
#if defined(CONFIG_USBDEV_DUALSPEED) || defined(CONFIG_USBDEV_SUPERSPEED)
if (type == USB_DESC_TYPE_OTHERSPEEDCONFIG && speed < USB_SPEED_SUPER)
{
is_high_speed = !is_high_speed;
speed = speed == USB_SPEED_HIGH ? USB_SPEED_FULL : USB_SPEED_HIGH;
}
#else
uint8_t speed = USB_SPEED_FULL;
#endif
#ifndef CONFIG_CDCNCM_COMPOSITE
@@ -2172,7 +2184,7 @@ static int16_t cdcnm_mkcfgdesc(FAR uint8_t *desc,
{
FAR struct usb_epdesc_s *epdesc = (FAR struct usb_epdesc_s *)desc;
cdcncm_mkepdesc(CDCNCM_EP_INTIN_IDX, epdesc, devinfo, false);
cdcncm_mkepdesc(CDCNCM_EP_INTIN_IDX, epdesc, devinfo, speed);
desc += USB_SIZEOF_EPDESC;
}
@@ -2226,7 +2238,7 @@ static int16_t cdcnm_mkcfgdesc(FAR uint8_t *desc,
{
FAR struct usb_epdesc_s *epdesc = (FAR struct usb_epdesc_s *)desc;
cdcncm_mkepdesc(CDCNCM_EP_BULKIN_IDX, epdesc, devinfo, is_high_speed);
cdcncm_mkepdesc(CDCNCM_EP_BULKIN_IDX, epdesc, devinfo, speed);
desc += USB_SIZEOF_EPDESC;
}
@@ -2236,7 +2248,7 @@ static int16_t cdcnm_mkcfgdesc(FAR uint8_t *desc,
{
FAR struct usb_epdesc_s *epdesc = (FAR struct usb_epdesc_s *)desc;
cdcncm_mkepdesc(CDCNCM_EP_BULKOUT_IDX, epdesc, devinfo, is_high_speed);
cdcncm_mkepdesc(CDCNCM_EP_BULKOUT_IDX, epdesc, devinfo, speed);
desc += USB_SIZEOF_EPDESC;
}
@@ -2260,7 +2272,7 @@ static int16_t cdcnm_mkcfgdesc(FAR uint8_t *desc,
*
****************************************************************************/
#ifdef CONFIG_USBDEV_DUALSPEED
#if defined(CONFIG_USBDEV_DUALSPEED) || defined(CONFIG_USBDEV_SUPERSPEED)
static int16_t cdcncm_mkcfgdesc(FAR uint8_t *desc,
FAR struct usbdev_devinfo_s *devinfo,
uint8_t speed, uint8_t type)
@@ -2339,7 +2351,7 @@ static int cdcncm_getdescriptor(FAR struct cdcncm_driver_s *self,
case USB_DESC_TYPE_OTHERSPEEDCONFIG:
#endif /* CONFIG_USBDEV_DUALSPEED */
case USB_DESC_TYPE_CONFIG:
#ifdef CONFIG_USBDEV_DUALSPEED
#if defined(CONFIG_USBDEV_DUALSPEED) || defined(CONFIG_USBDEV_SUPERSPEED)
return cdcncm_mkcfgdesc((FAR uint8_t *)desc, &self->devinfo,
self->usbdev.speed, type);
#else
@@ -3070,7 +3082,7 @@ static void cdcnm_get_composite_devdesc(FAR struct composite_devdesc_s *dev,
/* Let the construction function calculate the size of config descriptor */
#ifdef CONFIG_USBDEV_DUALSPEED
#if defined(CONFIG_USBDEV_DUALSPEED) || defined(CONFIG_USBDEV_SUPERSPEED)
dev->cfgdescsize = isncm ?
cdcncm_mkcfgdesc(NULL, NULL, USB_SPEED_UNKNOWN, 0) :
cdcmbim_mkcfgdesc(NULL, NULL, USB_SPEED_UNKNOWN, 0);

View File

@@ -277,7 +277,7 @@ static int composite_msftdescriptor(FAR struct composite_dev_s *priv,
*
****************************************************************************/
#ifdef CONFIG_USBDEV_DUALSPEED
#if defined(CONFIG_USBDEV_DUALSPEED) || defined(CONFIG_USBDEV_SUPERSPEED)
static int16_t composite_mkcfgdesc(FAR struct usbdevclass_driver_s *driver,
FAR uint8_t *buf,
uint8_t speed, uint8_t type)
@@ -313,7 +313,7 @@ static int16_t composite_mkcfgdesc(FAR struct usbdevclass_driver_s *driver,
{
FAR struct composite_devobj_s *devobj = &priv->device[i];
#ifdef CONFIG_USBDEV_DUALSPEED
#if defined(CONFIG_USBDEV_DUALSPEED) || defined(CONFIG_USBDEV_SUPERSPEED)
len = devobj->compdesc.mkconfdesc(buf,
&devobj->compdesc.devinfo,
speed, type);
@@ -677,7 +677,7 @@ static int composite_setup(FAR struct usbdevclass_driver_s *driver,
case USB_DESC_TYPE_CONFIG:
{
#ifdef CONFIG_USBDEV_DUALSPEED
#if defined(CONFIG_USBDEV_DUALSPEED) || defined(CONFIG_USBDEV_SUPERSPEED)
ret = composite_mkcfgdesc(driver, ctrlreq->buf,
dev->speed, ctrl->value[1]);
#else

View File

@@ -181,11 +181,22 @@ static void usbclass_ep0incomplete(FAR struct usbdev_ep_s *ep,
{
}
#if defined(CONFIG_USBDEV_DUALSPEED) || defined(CONFIG_USBDEV_SUPERSPEED)
static int16_t usbclass_mkcfgdesc(FAR uint8_t *buf,
FAR struct usbdev_devinfo_s *devinfo,
uint8_t speed, uint8_t type)
#else
static int16_t usbclass_mkcfgdesc(FAR uint8_t *buf,
FAR struct usbdev_devinfo_s *devinfo)
#endif
{
FAR struct dfu_cfgdesc_s *dest = (FAR struct dfu_cfgdesc_s *)buf;
#if defined(CONFIG_USBDEV_DUALSPEED) || defined(CONFIG_USBDEV_SUPERSPEED)
UNUSED(speed);
UNUSED(type);
#endif
*dest = g_dfu_cfgdesc;
dest->ifdesc.ifno += devinfo->ifnobase;
dest->ifdesc.iif = devinfo->strbase;
@@ -308,7 +319,12 @@ static int usbclass_setup(FAR struct usbdevclass_driver_s *driver,
{
if (ctrl->value[1] == USB_DESC_TYPE_CONFIG)
{
#if defined(CONFIG_USBDEV_DUALSPEED) || defined(CONFIG_USBDEV_SUPERSPEED)
ret = usbclass_mkcfgdesc(ctrlreq->buf, &priv->devinfo,
dev->speed, ctrl->value[1]);
#else
ret = usbclass_mkcfgdesc(ctrlreq->buf, &priv->devinfo);
#endif
}
else if (ctrl->value[1] == USB_DESC_TYPE_STRING)
{

View File

@@ -226,6 +226,9 @@ static const struct usbdev_epinfo_s g_mtp_epbulkin =
.fssize = CONFIG_USBMTP_EPBULKIN_FSSIZE,
#ifdef CONFIG_USBDEV_DUALSPEED
.hssize = CONFIG_USBMTP_EPBULKIN_HSSIZE,
#endif
#ifdef CONFIG_USBDEV_SUPERSPEED
.sssize = CONFIG_USBMTP_EPBULKIN_SSSIZE,
#endif
.reqnum = CONFIG_USBMTP_NWRREQS,
};
@@ -245,6 +248,9 @@ static const struct usbdev_epinfo_s g_mtp_epbulkout =
.fssize = CONFIG_USBMTP_EPBULKOUT_FSSIZE,
#ifdef CONFIG_USBDEV_DUALSPEED
.hssize = CONFIG_USBMTP_EPBULKOUT_HSSIZE,
#endif
#ifdef CONFIG_USBDEV_SUPERSPEED
.sssize = CONFIG_USBMTP_EPBULKOUT_SSSIZE,
#endif
.reqnum = CONFIG_USBMTP_NRDREQS,
};
@@ -264,6 +270,9 @@ static const struct usbdev_epinfo_s g_mtp_epbulkintin =
.fssize = CONFIG_USBMTP_EPINTIN_SIZE,
#ifdef CONFIG_USBDEV_DUALSPEED
.hssize = CONFIG_USBMTP_EPINTIN_SIZE,
#endif
#ifdef CONFIG_USBDEV_SUPERSPEED
.sssize = CONFIG_USBMTP_EPINTIN_SIZE,
#endif
.reqnum = CONFIG_USBMTP_NWRREQS,
};
@@ -287,7 +296,7 @@ static const FAR struct usbdev_epinfo_s *g_mtp_epinfos[USBMTP_NUM_EPS] =
*
****************************************************************************/
#ifdef CONFIG_USBDEV_DUALSPEED
#if defined(CONFIG_USBDEV_DUALSPEED) || defined(CONFIG_USBDEV_SUPERSPEED)
static int16_t usbclass_mkcfgdesc(FAR uint8_t *buf,
FAR struct usbdev_devinfo_s *devinfo,
uint8_t speed, uint8_t type)
@@ -296,19 +305,18 @@ static int16_t usbclass_mkcfgdesc(FAR uint8_t *buf,
FAR struct usbdev_devinfo_s *devinfo)
#endif
{
bool hispeed = false;
FAR struct usb_epdesc_s *epdesc;
FAR struct usb_ifdesc_s *dest;
#ifdef CONFIG_USBDEV_DUALSPEED
hispeed = (speed == USB_SPEED_HIGH);
/* Check for switches between high and full speed */
if (type == USB_DESC_TYPE_OTHERSPEEDCONFIG)
#if defined(CONFIG_USBDEV_DUALSPEED) || defined(CONFIG_USBDEV_SUPERSPEED)
if (type == USB_DESC_TYPE_OTHERSPEEDCONFIG && speed < USB_SPEED_SUPER)
{
hispeed = !hispeed;
speed = speed == USB_SPEED_HIGH ? USB_SPEED_FULL : USB_SPEED_HIGH;
}
#else
uint8_t speed = USB_SPEED_FULL;
#endif
dest = (FAR struct usb_ifdesc_s *)buf;
@@ -317,11 +325,11 @@ static int16_t usbclass_mkcfgdesc(FAR uint8_t *buf,
memcpy(dest, &g_mtp_ifdesc, sizeof(g_mtp_ifdesc));
usbdev_copy_epdesc(&epdesc[0], devinfo->epno[USBMTP_EP_BULKIN_IDX],
hispeed, &g_mtp_epbulkin);
speed, &g_mtp_epbulkin);
usbdev_copy_epdesc(&epdesc[1], devinfo->epno[USBMTP_EP_BULKOUT_IDX],
hispeed, &g_mtp_epbulkout);
speed, &g_mtp_epbulkout);
usbdev_copy_epdesc(&epdesc[2], devinfo->epno[USBMTP_EP_INTIN_IDX],
hispeed, &g_mtp_epbulkintin);
speed, &g_mtp_epbulkintin);
#ifdef CONFIG_USBMTP_COMPOSITE
/* For composite device, apply possible offset to the interface numbers */

View File

@@ -293,9 +293,9 @@ static inline int usbclass_recvpacket(FAR struct pl2303_dev_s *priv,
/* Configuration ************************************************************/
static int usbclass_mkstrdesc(uint8_t id, struct usb_strdesc_s *strdesc);
#ifdef CONFIG_USBDEV_DUALSPEED
static void usbclass_mkepbulkdesc(const struct usb_epdesc_s *indesc,
uint16_t mxpacket, struct usb_epdesc_s *outdesc);
#if defined(CONFIG_USBDEV_DUALSPEED) || defined(CONFIG_USBDEV_SUPERSPEED)
static int16_t usbclass_mkcfgdesc(uint8_t *buf, uint8_t speed, uint8_t type);
#else
static int16_t usbclass_mkcfgdesc(uint8_t *buf);
@@ -835,7 +835,6 @@ static int usbclass_mkstrdesc(uint8_t id, FAR struct usb_strdesc_s *strdesc)
*
****************************************************************************/
#ifdef CONFIG_USBDEV_DUALSPEED
static inline void usbclass_mkepbulkdesc(
FAR const struct usb_epdesc_s *indesc,
uint16_t mxpacket,
@@ -850,7 +849,6 @@ static inline void usbclass_mkepbulkdesc(
outdesc->mxpacketsize[0] = LSBYTE(mxpacket);
outdesc->mxpacketsize[1] = MSBYTE(mxpacket);
}
#endif
/****************************************************************************
* Name: usbclass_mkcfgdesc
@@ -860,19 +858,25 @@ static inline void usbclass_mkepbulkdesc(
*
****************************************************************************/
#ifdef CONFIG_USBDEV_DUALSPEED
#if defined(CONFIG_USBDEV_DUALSPEED) || defined(CONFIG_USBDEV_SUPERSPEED)
static int16_t usbclass_mkcfgdesc(uint8_t *buf, uint8_t speed, uint8_t type)
#else
static int16_t usbclass_mkcfgdesc(uint8_t *buf)
#endif
{
FAR struct usb_cfgdesc_s *cfgdesc = (FAR struct usb_cfgdesc_s *)buf;
#ifdef CONFIG_USBDEV_DUALSPEED
bool hispeed = (speed == USB_SPEED_HIGH);
uint16_t bulkmxpacket;
#endif
uint16_t bulkmxpacket = CONFIG_PL2303_EPBULK_FSSIZE;
uint16_t totallen;
/* Check for switches between high and full speed */
#if defined(CONFIG_USBDEV_DUALSPEED) || defined(CONFIG_USBDEV_SUPERSPEED)
if (type == USB_DESC_TYPE_OTHERSPEEDCONFIG && speed < USB_SPEED_SUPER)
{
speed = speed == USB_SPEED_HIGH ? USB_SPEED_FULL : USB_SPEED_HIGH;
}
#endif
/* This is the total length of the configuration (not necessarily the
* size that we will be sending now.
*/
@@ -892,40 +896,28 @@ static int16_t usbclass_mkcfgdesc(uint8_t *buf)
memcpy(buf, &g_ifdesc, USB_SIZEOF_IFDESC);
buf += USB_SIZEOF_IFDESC;
/* Make the three endpoint configurations. First, check for switches
* between high and full speed
*/
#ifdef CONFIG_USBDEV_DUALSPEED
if (type == USB_DESC_TYPE_OTHERSPEEDCONFIG)
{
hispeed = !hispeed;
}
#endif
memcpy(buf, &g_epintindesc, USB_SIZEOF_EPDESC);
buf += USB_SIZEOF_EPDESC;
#ifdef CONFIG_USBDEV_DUALSPEED
if (hispeed)
#ifdef CONFIG_USBDEV_SUPERSPEED
if (speed == USB_SPEED_SUPER || speed == USB_SPEED_SUPER_PLUS)
{
bulkmxpacket = 512;
bulkmxpacket = CONFIG_PL2303_EPBULK_SSSIZE;
}
else
#endif
#ifdef CONFIG_USBDEV_DUALSPEED
if (speed == USB_SPEED_HIGH)
{
bulkmxpacket = 64;
bulkmxpacket = CONFIG_PL2303_EPBULK_HSSIZE;
}
#endif
usbclass_mkepbulkdesc(&g_epbulkoutdesc, bulkmxpacket,
(FAR struct usb_epdesc_s *)buf);
buf += USB_SIZEOF_EPDESC;
usbclass_mkepbulkdesc(&g_epbulkindesc, bulkmxpacket,
(FAR struct usb_epdesc_s *)buf);
#else
memcpy(buf, &g_epbulkoutdesc, USB_SIZEOF_EPDESC);
buf += USB_SIZEOF_EPDESC;
memcpy(buf, &g_epbulkindesc, USB_SIZEOF_EPDESC);
#endif
/* Finally, fill in the total size of the configuration descriptor */
@@ -982,10 +974,8 @@ static void usbclass_resetconfig(FAR struct pl2303_dev_s *priv)
static int usbclass_setconfig(FAR struct pl2303_dev_s *priv, uint8_t config)
{
FAR struct usbdev_req_s *req;
#ifdef CONFIG_USBDEV_DUALSPEED
struct usb_epdesc_s epdesc;
uint16_t bulkmxpacket;
#endif
uint16_t bulkmxpacket = CONFIG_PL2303_EPBULK_FSSIZE;
int i;
int ret = 0;
@@ -1038,21 +1028,23 @@ static int usbclass_setconfig(FAR struct pl2303_dev_s *priv, uint8_t config)
/* Configure the IN bulk endpoint */
#ifdef CONFIG_USBDEV_SUPERSPEED
if (priv->usbdev->speed == USB_SPEED_SUPER ||
priv->usbdev->speed == USB_SPEED_SUPER_PLUS)
{
bulkmxpacket = CONFIG_PL2303_EPBULK_SSSIZE;
}
else
#endif
#ifdef CONFIG_USBDEV_DUALSPEED
if (priv->usbdev->speed == USB_SPEED_HIGH)
{
bulkmxpacket = 512;
}
else
{
bulkmxpacket = 64;
bulkmxpacket = CONFIG_PL2303_EPBULK_HSSIZE;
}
#endif
usbclass_mkepbulkdesc(&g_epbulkindesc, bulkmxpacket, &epdesc);
ret = EP_CONFIGURE(priv->epbulkin, &epdesc, false);
#else
ret = EP_CONFIGURE(priv->epbulkin, &g_epbulkindesc, false);
#endif
if (ret < 0)
{
usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_EPBULKINCONFIGFAIL), 0);
@@ -1063,12 +1055,8 @@ static int usbclass_setconfig(FAR struct pl2303_dev_s *priv, uint8_t config)
/* Configure the OUT bulk endpoint */
#ifdef CONFIG_USBDEV_DUALSPEED
usbclass_mkepbulkdesc(&g_epbulkoutdesc, bulkmxpacket, &epdesc);
ret = EP_CONFIGURE(priv->epbulkout, &epdesc, true);
#else
ret = EP_CONFIGURE(priv->epbulkout, &g_epbulkoutdesc, true);
#endif
if (ret < 0)
{
usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_EPBULKOUTCONFIGFAIL), 0);
@@ -1273,7 +1261,7 @@ static int usbclass_bind(FAR struct usbdevclass_driver_s *driver,
((FAR struct pl2303_driver_s *)driver)->dev;
FAR struct pl2303_req_s *reqcontainer;
irqstate_t flags;
uint16_t reqlen;
uint16_t reqlen = CONFIG_PL2303_EPBULK_FSSIZE;
int ret;
int i;
@@ -1351,10 +1339,19 @@ static int usbclass_bind(FAR struct usbdevclass_driver_s *driver,
/* Pre-allocate read requests. The buffer size is one full packet. */
#ifdef CONFIG_USBDEV_SUPERSPEED
if (dev->speed == USB_SPEED_SUPER ||
dev->speed == USB_SPEED_SUPER_PLUS)
{
reqlen = CONFIG_PL2303_EPBULK_SSSIZE;
}
else
#endif
#ifdef CONFIG_USBDEV_DUALSPEED
reqlen = 512;
#else
reqlen = 64;
if (dev->speed == USB_SPEED_HIGH)
{
reqlen = CONFIG_PL2303_EPBULK_HSSIZE;
}
#endif
for (i = 0; i < CONFIG_PL2303_NRDREQS; i++)
@@ -1380,12 +1377,6 @@ static int usbclass_bind(FAR struct usbdevclass_driver_s *driver,
* size.
*/
#ifdef CONFIG_USBDEV_DUALSPEED
reqlen = 512;
#else
reqlen = 64;
#endif
if (CONFIG_PL2303_BULKIN_REQLEN > reqlen)
{
reqlen = CONFIG_CDCACM_BULKIN_REQLEN;
@@ -1643,7 +1634,7 @@ static int usbclass_setup(FAR struct usbdevclass_driver_s *driver,
case USB_DESC_TYPE_CONFIG:
{
#ifdef CONFIG_USBDEV_DUALSPEED
#if defined(CONFIG_USBDEV_DUALSPEED) || defined(CONFIG_USBDEV_SUPERSPEED)
ret = usbclass_mkcfgdesc(ctrlreq->buf,
dev->speed, ctrl->req);
#else

File diff suppressed because it is too large Load Diff

View File

@@ -76,18 +76,28 @@ int usbdev_copy_devdesc(FAR void *dest,
****************************************************************************/
void usbdev_copy_epdesc(FAR struct usb_epdesc_s *epdesc,
uint8_t epno, bool hispeed,
uint8_t epno, uint8_t speed,
FAR const struct usbdev_epinfo_s *epinfo)
{
#ifndef CONFIG_USBDEV_DUALSPEED
UNUSED(hispeed);
#if !defined(CONFIG_USBDEV_DUALSPEED) && !defined(CONFIG_USBDEV_SUPERSPEED)
UNUSED(speed);
#endif
memcpy(epdesc, &epinfo->desc, sizeof(struct usb_epdesc_s));
epdesc->addr |= epno;
#ifdef CONFIG_USBDEV_SUPERSPEED
if (speed == USB_SPEED_SUPER || speed == USB_SPEED_SUPER_PLUS)
{
/* Maximum packet size (super speed) */
epdesc->mxpacketsize[0] = LSBYTE(epinfo->sssize);
epdesc->mxpacketsize[1] = MSBYTE(epinfo->sssize);
}
else
#endif
#ifdef CONFIG_USBDEV_DUALSPEED
if (hispeed)
if (speed == USB_SPEED_HIGH)
{
/* Maximum packet size (high speed) */

View File

@@ -933,7 +933,9 @@ static int usbdev_fs_ep_bind(FAR struct usbdev_s *dev, uint8_t epno,
FAR const struct usbdev_epinfo_s *epinfo,
FAR struct usbdev_fs_ep_s *fs_ep)
{
#ifdef CONFIG_USBDEV_DUALSPEED
#if defined(CONFIG_USBDEV_SUPERSPEED)
uint16_t reqsize = epinfo->sssize;
#elif defined(CONFIG_USBDEV_DUALSPEED)
uint16_t reqsize = epinfo->hssize;
#else
uint16_t reqsize = epinfo->fssize;
@@ -1143,7 +1145,6 @@ static int usbdev_fs_classsetconfig(FAR struct usbdev_fs_dev_s *fs,
{
FAR struct usbdev_devinfo_s *devinfo = &fs->devinfo;
struct usb_epdesc_s epdesc;
bool hispeed = false;
uint16_t i;
uint16_t j;
int ret;
@@ -1160,16 +1161,12 @@ static int usbdev_fs_classsetconfig(FAR struct usbdev_fs_dev_s *fs,
return 0;
}
#ifdef CONFIG_USBDEV_DUALSPEED
hispeed = (fs->cdev->usbdev->speed == USB_SPEED_HIGH);
#endif
for (i = 0; i < devinfo->nendpoints; i++)
{
FAR struct usbdev_fs_ep_s *fs_ep = &fs->eps[i];
usbdev_copy_epdesc(&epdesc, devinfo->epno[i],
hispeed, devinfo->epinfos[i]);
fs->cdev->usbdev->speed, devinfo->epinfos[i]);
ret = EP_CONFIGURE(fs_ep->ep, &epdesc,
(i == (devinfo->nendpoints - 1)));
if (ret < 0)

View File

@@ -207,7 +207,9 @@ static int usbmsc_bind(FAR struct usbdevclass_driver_s *driver,
* const, canned descriptors.
*/
#if !defined(CONFIG_USBDEV_SUPERSPEED) && !defined(CONFIG_USBMSC_COMPOSITE)
DEBUGASSERT(CONFIG_USBMSC_EP0MAXPACKET == dev->ep0->maxpacket);
#endif
/* Preallocate control request */
@@ -544,7 +546,7 @@ static int usbmsc_setup(FAR struct usbdevclass_driver_s *driver,
#ifndef CONFIG_USBMSC_COMPOSITE
case USB_DESC_TYPE_CONFIG:
{
#ifdef CONFIG_USBDEV_DUALSPEED
#if defined(CONFIG_USBDEV_DUALSPEED) || defined(CONFIG_USBDEV_SUPERSPEED)
ret = usbmsc_mkcfgdesc(ctrlreq->buf, &priv->devinfo,
dev->speed, ctrl->value[1]);
#else
@@ -872,7 +874,6 @@ int usbmsc_setconfig(FAR struct usbmsc_dev_s *priv, uint8_t config)
FAR struct usbmsc_req_s *privreq;
FAR struct usbdev_req_s *req;
struct usb_epdesc_s epdesc;
bool hispeed = false;
int i;
int ret = 0;
@@ -892,10 +893,6 @@ int usbmsc_setconfig(FAR struct usbmsc_dev_s *priv, uint8_t config)
return OK;
}
#ifdef CONFIG_USBDEV_DUALSPEED
hispeed = (priv->usbdev->speed == USB_SPEED_HIGH);
#endif
/* Discard the previous configuration data */
usbmsc_resetconfig(priv);
@@ -919,7 +916,7 @@ int usbmsc_setconfig(FAR struct usbmsc_dev_s *priv, uint8_t config)
/* Configure the IN bulk endpoint */
usbmsc_copy_epdesc(USBMSC_EPBULKIN, &epdesc, &priv->devinfo,
hispeed);
priv->usbdev->speed);
ret = EP_CONFIGURE(priv->epbulkin, &epdesc, false);
if (ret < 0)
{
@@ -932,7 +929,7 @@ int usbmsc_setconfig(FAR struct usbmsc_dev_s *priv, uint8_t config)
/* Configure the OUT bulk endpoint */
usbmsc_copy_epdesc(USBMSC_EPBULKOUT, &epdesc, &priv->devinfo,
hispeed);
priv->usbdev->speed);
ret = EP_CONFIGURE(priv->epbulkout, &epdesc, true);
if (ret < 0)
{

View File

@@ -301,6 +301,9 @@
#define USBMSC_MKEPBULKIN(devDesc) (USB_DIR_IN | (devDesc)->epno[USBMSC_EP_BULKIN_IDX])
#define USBMSC_EPINBULK_ATTR (USB_EP_ATTR_XFER_BULK)
#define USBMSC_SSBULKMAXPACKET (1024)
#define USBMSC_SSBULKMXPKTSHIFT (10)
#define USBMSC_SSBULKMXPKTMASK (0x000003ff)
#define USBMSC_HSBULKMAXPACKET (512)
#define USBMSC_HSBULKMXPKTSHIFT (9)
#define USBMSC_HSBULKMXPKTMASK (0x000001ff)
@@ -545,7 +548,7 @@ FAR const struct usb_devdesc_s *usbmsc_getdevdesc(void);
int usbmsc_copy_epdesc(enum usbmsc_epdesc_e epid,
FAR struct usb_epdesc_s *epdesc,
FAR struct usbdev_devinfo_s *devinfo,
bool hispeed);
uint8_t speed);
/****************************************************************************
* Name: usbmsc_mkcfgdesc
@@ -555,7 +558,7 @@ int usbmsc_copy_epdesc(enum usbmsc_epdesc_e epid,
*
****************************************************************************/
#ifdef CONFIG_USBDEV_DUALSPEED
#if defined(CONFIG_USBDEV_DUALSPEED) || defined(CONFIG_USBDEV_SUPERSPEED)
int16_t usbmsc_mkcfgdesc(FAR uint8_t *buf,
FAR struct usbdev_devinfo_s *devinfo,
uint8_t speed, uint8_t type);

View File

@@ -225,10 +225,10 @@ FAR const struct usb_devdesc_s *usbmsc_getdevdesc(void)
int usbmsc_copy_epdesc(enum usbmsc_epdesc_e epid,
FAR struct usb_epdesc_s *epdesc,
FAR struct usbdev_devinfo_s *devinfo,
bool hispeed)
uint8_t speed)
{
#ifndef CONFIG_USBDEV_DUALSPEED
UNUSED(hispeed);
#if !defined(CONFIG_USBDEV_DUALSPEED) && !defined(CONFIG_USBDEV_SUPERSPEED)
UNUSED(speed);
#endif
switch (epid)
@@ -240,8 +240,18 @@ int usbmsc_copy_epdesc(enum usbmsc_epdesc_e epid,
epdesc->addr = USBMSC_MKEPBULKOUT(devinfo); /* Endpoint address */
epdesc->attr = USBMSC_EPOUTBULK_ATTR; /* Endpoint attributes */
#ifdef CONFIG_USBDEV_SUPERSPEED
if (speed == USB_SPEED_SUPER || speed == USB_SPEED_SUPER_PLUS)
{
/* Maximum packet size (super speed) */
epdesc->mxpacketsize[0] = LSBYTE(USBMSC_SSBULKMAXPACKET);
epdesc->mxpacketsize[1] = MSBYTE(USBMSC_SSBULKMAXPACKET);
}
else
#endif
#ifdef CONFIG_USBDEV_DUALSPEED
if (hispeed)
if (speed == USB_SPEED_HIGH)
{
/* Maximum packet size (high speed) */
@@ -268,8 +278,18 @@ int usbmsc_copy_epdesc(enum usbmsc_epdesc_e epid,
epdesc->addr = USBMSC_MKEPBULKIN(devinfo); /* Endpoint address */
epdesc->attr = USBMSC_EPINBULK_ATTR; /* Endpoint attributes */
#ifdef CONFIG_USBDEV_SUPERSPEED
if (speed == USB_SPEED_SUPER || speed == USB_SPEED_SUPER_PLUS)
{
/* Maximum packet size (super speed) */
epdesc->mxpacketsize[0] = LSBYTE(USBMSC_SSBULKMAXPACKET);
epdesc->mxpacketsize[1] = MSBYTE(USBMSC_SSBULKMAXPACKET);
}
else
#endif
#ifdef CONFIG_USBDEV_DUALSPEED
if (hispeed)
if (speed == USB_SPEED_HIGH)
{
/* Maximum packet size (high speed) */
@@ -304,7 +324,7 @@ int usbmsc_copy_epdesc(enum usbmsc_epdesc_e epid,
*
****************************************************************************/
#ifdef CONFIG_USBDEV_DUALSPEED
#if defined(CONFIG_USBDEV_DUALSPEED) || defined(CONFIG_USBDEV_SUPERSPEED)
int16_t usbmsc_mkcfgdesc(uint8_t *buf,
FAR struct usbdev_devinfo_s *devinfo,
uint8_t speed, uint8_t type)
@@ -313,17 +333,15 @@ int16_t usbmsc_mkcfgdesc(uint8_t *buf,
FAR struct usbdev_devinfo_s *devinfo)
#endif
{
bool hispeed = false;
#ifdef CONFIG_USBDEV_DUALSPEED
hispeed = (speed == USB_SPEED_HIGH);
/* Check for switches between high and full speed */
if (type == USB_DESC_TYPE_OTHERSPEEDCONFIG)
#if defined(CONFIG_USBDEV_DUALSPEED) || defined(CONFIG_USBDEV_SUPERSPEED)
if (type == USB_DESC_TYPE_OTHERSPEEDCONFIG && speed != USB_SPEED_HIGH)
{
hispeed = !hispeed;
speed = speed == USB_SPEED_HIGH ? USB_SPEED_FULL : USB_SPEED_HIGH;
}
#else
uint8_t speed = USB_SPEED_FULL;
#endif
/* Fill in all descriptors directly to the buf */
@@ -389,7 +407,7 @@ int16_t usbmsc_mkcfgdesc(uint8_t *buf,
{
int len = usbmsc_copy_epdesc(USBMSC_EPBULKIN,
(FAR struct usb_epdesc_s *)buf,
devinfo, hispeed);
devinfo, speed);
buf += len;
}
@@ -399,7 +417,7 @@ int16_t usbmsc_mkcfgdesc(uint8_t *buf,
{
int len = usbmsc_copy_epdesc(USBMSC_EPBULKOUT,
(FAR struct usb_epdesc_s *)buf, devinfo,
hispeed);
speed);
buf += len;
}

View File

@@ -57,6 +57,9 @@
* CONFIG_CDCACM_EPBULKOUT_HSSIZE
* Max package size for the bulk OUT endpoint if high speed mode.
* Default 512.
* CONFIG_CDCACM_EPBULKOUT_SSSIZE
* Max package size for the bulk OUT endpoint if super speed mode.
* Default 1024.
* CONFIG_CDCACM_EPBULKIN
* The logical 7-bit address of a hardware endpoint that supports
* bulk IN operation. Default: 2
@@ -66,6 +69,9 @@
* CONFIG_CDCACM_EPBULKIN_HSSIZE
* Max package size for the bulk IN endpoint if high speed mode.
* Default 512.
* CONFIG_CDCACM_EPBULKIN_SSSIZE
* Max package size for the bulk IN endpoint if super speed mode.
* Default 1024.
* CONFIG_CDCACM_NWRREQS and CONFIG_CDCACM_NRDREQS
* The number of write/read requests that can be in flight.
* CONFIG_CDCACM_NWRREQS includes write requests used for both the
@@ -146,6 +152,10 @@
# define CONFIG_CDCACM_EPBULKIN_HSSIZE 512
#endif
#ifndef CONFIG_CDCACM_EPBULKIN_SSSIZE
# define CONFIG_CDCACM_EPBULKIN_SSSIZE 1024
#endif
#ifndef CONFIG_CDCACM_BULKIN_REQLEN
# ifdef CONFIG_USBDEV_DUALSPEED
# define CONFIG_CDCACM_BULKIN_REQLEN (3 * CONFIG_CDCACM_EPBULKIN_FSSIZE / 2)
@@ -176,6 +186,10 @@
# define CONFIG_CDCACM_EPBULKOUT_HSSIZE 512
#endif
#ifndef CONFIG_CDCACM_EPBULKOUT_SSSIZE
# define CONFIG_CDCACM_EPBULKOUT_SSSIZE 1024
#endif
/* Number of requests in the write queue. This includes write requests used
* for both the interrupt and bulk IN endpoints.
*/

View File

@@ -50,6 +50,10 @@
# define CONFIG_RNDIS_EPINTIN_HSSIZE 16
#endif
#ifndef CONFIG_RNDIS_EPINTIN_SSSIZE
# define CONFIG_RNDIS_EPINTIN_SSSIZE 16
#endif
#ifndef CONFIG_RNDIS_EPBULKIN_FSSIZE
# define CONFIG_RNDIS_EPBULKIN_FSSIZE 64
#endif
@@ -58,6 +62,10 @@
# define CONFIG_RNDIS_EPBULKIN_HSSIZE 512
#endif
#ifndef CONFIG_RNDIS_EPBULKIN_SSSIZE
# define CONFIG_RNDIS_EPBULKIN_SSSIZE 1024
#endif
#ifndef CONFIG_RNDIS_EPBULKOUT_FSSIZE
# define CONFIG_RNDIS_EPBULKOUT_FSSIZE 64
#endif
@@ -66,6 +74,10 @@
# define CONFIG_RNDIS_EPBULKOUT_HSSIZE 512
#endif
#ifndef CONFIG_RNDIS_EPBULKOUT_SSSIZE
# define CONFIG_RNDIS_EPBULKOUT_SSSIZE 1024
#endif
/****************************************************************************
* Public Data
****************************************************************************/

View File

@@ -196,6 +196,9 @@ struct usbdev_epinfo_s
uint16_t fssize;
#ifdef CONFIG_USBDEV_DUALSPEED
uint16_t hssize;
#endif
#ifdef CONFIG_USBDEV_SUPERSPEED
uint16_t sssize;
#endif
uint16_t reqnum;
};
@@ -219,7 +222,7 @@ struct usbdev_devinfo_s
struct usbdevclass_driver_s;
struct composite_devdesc_s
{
#ifdef CONFIG_USBDEV_DUALSPEED
#if defined(CONFIG_USBDEV_DUALSPEED) || defined(CONFIG_USBDEV_SUPERSPEED)
CODE int16_t (*mkconfdesc)(FAR uint8_t *buf,
FAR struct usbdev_devinfo_s *devinfo,
uint8_t speed, uint8_t type);
@@ -438,7 +441,7 @@ int usbdev_copy_devdesc(FAR void *dest,
****************************************************************************/
void usbdev_copy_epdesc(FAR struct usb_epdesc_s *epdesc,
uint8_t epno, bool hispeed,
uint8_t epno, uint8_t speed,
FAR const struct usbdev_epinfo_s *epinfo);
/****************************************************************************