DM USB: save MaxPacketSize value in endpoint descriptor

Save the MaxPacketSize value for every endpoint of virtual
USB device.

Tracked-On: #3054
Signed-off-by: Xiaoguang Wu <xiaoguang.wu@intel.com>
Acked-by: Yu Wang <yu1.wang@intel.com>
This commit is contained in:
Xiaoguang Wu 2019-04-29 10:33:08 +08:00 committed by ACRN System Integration
parent 296b649ae9
commit f2e35ab701
2 changed files with 33 additions and 2 deletions

View File

@ -19,8 +19,8 @@
#define LOG_TAG "USBPM: "
static struct usb_dev_sys_ctx_info g_ctx;
static inline uint8_t usb_dev_get_ep_type(struct usb_dev *udev, int pid,
int epnum);
static uint8_t usb_dev_get_ep_type(struct usb_dev *udev, int pid, int epnum);
static uint16_t usb_dev_get_ep_maxp(struct usb_dev *udev, int pid, int epnum);
static bool
usb_get_native_devinfo(struct libusb_device *ldev,
@ -480,6 +480,28 @@ usb_dev_get_ep_type(struct usb_dev *udev, int pid, int epnum)
return ep->type;
}
static inline void
usb_dev_set_ep_maxp(struct usb_dev *udev, int pid, int epnum, uint16_t maxp)
{
struct usb_dev_ep *ep;
ep = usb_dev_get_ep(udev, pid, epnum);
if (ep)
ep->maxp = maxp;
}
static inline uint16_t
usb_dev_get_ep_maxp(struct usb_dev *udev, int pid, int epnum)
{
struct usb_dev_ep *ep;
ep = usb_dev_get_ep(udev, pid, epnum);
if (!ep)
return 0;
else
return ep->maxp;
}
static void
usb_dev_reset_ep(struct usb_dev *udev)
{
@ -515,6 +537,10 @@ usb_dev_update_ep(struct usb_dev *udev)
USB_EP_PID(desc),
USB_EP_NR(desc),
USB_EP_TYPE(desc));
usb_dev_set_ep_maxp(udev,
USB_EP_PID(desc),
USB_EP_NR(desc),
USB_EP_MAXP(desc));
}
}
libusb_free_config_descriptor(cfg);

View File

@ -18,8 +18,12 @@
#define USB_EP_PID(d) (USB_EP_ADDR(d) & USB_DIR_IN ? TOKEN_IN : TOKEN_OUT)
#define USB_EP_TYPE(d) (USB_EP_ATTR(d) & 0x3)
#define USB_EP_NR(d) (USB_EP_ADDR(d) & 0xF)
#define USB_EP_MAXP(d) ((d)->wMaxPacketSize)
#define USB_EP_ERR_TYPE 0xFF
#define USB_EP_MAXP_SZ(m) ((m) & 0x7ff)
#define USB_EP_MAXP_MT(m) (((m) >> 11) & 0x3)
enum {
USB_INFO_VERSION,
USB_INFO_SPEED,
@ -32,6 +36,7 @@ enum {
struct usb_dev_ep {
uint8_t pid;
uint8_t type;
uint16_t maxp;
};
struct usb_dev {