Loading drivers/usb/gadget/config.c +2 −1 Original line number Diff line number Diff line Loading @@ -227,6 +227,7 @@ void usb_free_all_descriptors(struct usb_function *f) { usb_free_descriptors(f->fs_descriptors); usb_free_descriptors(f->hs_descriptors); if (f->ss_descriptors) usb_free_descriptors(f->ss_descriptors); } EXPORT_SYMBOL_GPL(usb_free_all_descriptors); drivers/usb/gadget/f_ncm.c +81 −1 Original line number Diff line number Diff line Loading @@ -328,6 +328,77 @@ static struct usb_descriptor_header *ncm_hs_function[] = { NULL, }; /* Super Speed Support */ static struct usb_endpoint_descriptor ncm_ss_notify_desc = { .bLength = USB_DT_ENDPOINT_SIZE, .bDescriptorType = USB_DT_ENDPOINT, .bEndpointAddress = USB_DIR_IN, .bmAttributes = USB_ENDPOINT_XFER_INT, .wMaxPacketSize = cpu_to_le16(NCM_STATUS_BYTECOUNT), .bInterval = USB_MS_TO_HS_INTERVAL(NCM_STATUS_INTERVAL_MS), }; static struct usb_ss_ep_comp_descriptor ncm_ss_notify_comp_desc = { .bLength = sizeof(ncm_ss_notify_comp_desc), .bDescriptorType = USB_DT_SS_ENDPOINT_COMP, /* the following 3 values can be tweaked if necessary */ /* .bMaxBurst = 0, */ /* .bmAttributes = 0, */ .wBytesPerInterval = cpu_to_le16(NCM_STATUS_BYTECOUNT), }; static struct usb_endpoint_descriptor ncm_ss_in_desc = { .bLength = USB_DT_ENDPOINT_SIZE, .bDescriptorType = USB_DT_ENDPOINT, .bEndpointAddress = USB_DIR_IN, .bmAttributes = USB_ENDPOINT_XFER_BULK, .wMaxPacketSize = cpu_to_le16(1024), }; static struct usb_ss_ep_comp_descriptor ncm_ss_in_comp_desc = { .bLength = sizeof(ncm_ss_in_comp_desc), .bDescriptorType = USB_DT_SS_ENDPOINT_COMP, /* the following 2 values can be tweaked if necessary */ /* .bMaxBurst = 0, */ /* .bmAttributes = 0, */ }; static struct usb_endpoint_descriptor ncm_ss_out_desc = { .bLength = USB_DT_ENDPOINT_SIZE, .bDescriptorType = USB_DT_ENDPOINT, .bEndpointAddress = USB_DIR_OUT, .bmAttributes = USB_ENDPOINT_XFER_BULK, .wMaxPacketSize = cpu_to_le16(1024), }; static struct usb_ss_ep_comp_descriptor ncm_ss_out_comp_desc = { .bLength = sizeof(ncm_ss_out_comp_desc), .bDescriptorType = USB_DT_SS_ENDPOINT_COMP, /* the following 2 values can be tweaked if necessary */ /* .bMaxBurst = 0, */ /* .bmAttributes = 0, */ }; static struct usb_descriptor_header *ncm_ss_function[] = { (struct usb_descriptor_header *) &ncm_iad_desc, /* CDC NCM control descriptors */ (struct usb_descriptor_header *) &ncm_control_intf, (struct usb_descriptor_header *) &ncm_header_desc, (struct usb_descriptor_header *) &ncm_union_desc, (struct usb_descriptor_header *) &necm_desc, (struct usb_descriptor_header *) &ncm_desc, (struct usb_descriptor_header *) &ncm_ss_notify_desc, (struct usb_descriptor_header *) &ncm_ss_notify_comp_desc, /* data interface, altsettings 0 and 1 */ (struct usb_descriptor_header *) &ncm_data_nop_intf, (struct usb_descriptor_header *) &ncm_data_intf, (struct usb_descriptor_header *) &ncm_ss_in_desc, (struct usb_descriptor_header *) &ncm_ss_in_comp_desc, (struct usb_descriptor_header *) &ncm_ss_out_desc, (struct usb_descriptor_header *) &ncm_ss_out_comp_desc, NULL, }; /* string descriptors: */ #define STRING_CTRL_IDX 0 Loading Loading @@ -1238,8 +1309,17 @@ ncm_bind(struct usb_configuration *c, struct usb_function *f) hs_ncm_notify_desc.bEndpointAddress = fs_ncm_notify_desc.bEndpointAddress; if (gadget_is_superspeed(c->cdev->gadget)) { ncm_ss_in_desc.bEndpointAddress = fs_ncm_in_desc.bEndpointAddress; ncm_ss_out_desc.bEndpointAddress = fs_ncm_out_desc.bEndpointAddress; ncm_ss_notify_desc.bEndpointAddress = fs_ncm_notify_desc.bEndpointAddress; } status = usb_assign_descriptors(f, ncm_fs_function, ncm_hs_function, NULL); ncm_ss_function); /* * NOTE: all that is done without knowing or caring about * the network link ... which is unavailable to this code Loading Loading
drivers/usb/gadget/config.c +2 −1 Original line number Diff line number Diff line Loading @@ -227,6 +227,7 @@ void usb_free_all_descriptors(struct usb_function *f) { usb_free_descriptors(f->fs_descriptors); usb_free_descriptors(f->hs_descriptors); if (f->ss_descriptors) usb_free_descriptors(f->ss_descriptors); } EXPORT_SYMBOL_GPL(usb_free_all_descriptors);
drivers/usb/gadget/f_ncm.c +81 −1 Original line number Diff line number Diff line Loading @@ -328,6 +328,77 @@ static struct usb_descriptor_header *ncm_hs_function[] = { NULL, }; /* Super Speed Support */ static struct usb_endpoint_descriptor ncm_ss_notify_desc = { .bLength = USB_DT_ENDPOINT_SIZE, .bDescriptorType = USB_DT_ENDPOINT, .bEndpointAddress = USB_DIR_IN, .bmAttributes = USB_ENDPOINT_XFER_INT, .wMaxPacketSize = cpu_to_le16(NCM_STATUS_BYTECOUNT), .bInterval = USB_MS_TO_HS_INTERVAL(NCM_STATUS_INTERVAL_MS), }; static struct usb_ss_ep_comp_descriptor ncm_ss_notify_comp_desc = { .bLength = sizeof(ncm_ss_notify_comp_desc), .bDescriptorType = USB_DT_SS_ENDPOINT_COMP, /* the following 3 values can be tweaked if necessary */ /* .bMaxBurst = 0, */ /* .bmAttributes = 0, */ .wBytesPerInterval = cpu_to_le16(NCM_STATUS_BYTECOUNT), }; static struct usb_endpoint_descriptor ncm_ss_in_desc = { .bLength = USB_DT_ENDPOINT_SIZE, .bDescriptorType = USB_DT_ENDPOINT, .bEndpointAddress = USB_DIR_IN, .bmAttributes = USB_ENDPOINT_XFER_BULK, .wMaxPacketSize = cpu_to_le16(1024), }; static struct usb_ss_ep_comp_descriptor ncm_ss_in_comp_desc = { .bLength = sizeof(ncm_ss_in_comp_desc), .bDescriptorType = USB_DT_SS_ENDPOINT_COMP, /* the following 2 values can be tweaked if necessary */ /* .bMaxBurst = 0, */ /* .bmAttributes = 0, */ }; static struct usb_endpoint_descriptor ncm_ss_out_desc = { .bLength = USB_DT_ENDPOINT_SIZE, .bDescriptorType = USB_DT_ENDPOINT, .bEndpointAddress = USB_DIR_OUT, .bmAttributes = USB_ENDPOINT_XFER_BULK, .wMaxPacketSize = cpu_to_le16(1024), }; static struct usb_ss_ep_comp_descriptor ncm_ss_out_comp_desc = { .bLength = sizeof(ncm_ss_out_comp_desc), .bDescriptorType = USB_DT_SS_ENDPOINT_COMP, /* the following 2 values can be tweaked if necessary */ /* .bMaxBurst = 0, */ /* .bmAttributes = 0, */ }; static struct usb_descriptor_header *ncm_ss_function[] = { (struct usb_descriptor_header *) &ncm_iad_desc, /* CDC NCM control descriptors */ (struct usb_descriptor_header *) &ncm_control_intf, (struct usb_descriptor_header *) &ncm_header_desc, (struct usb_descriptor_header *) &ncm_union_desc, (struct usb_descriptor_header *) &necm_desc, (struct usb_descriptor_header *) &ncm_desc, (struct usb_descriptor_header *) &ncm_ss_notify_desc, (struct usb_descriptor_header *) &ncm_ss_notify_comp_desc, /* data interface, altsettings 0 and 1 */ (struct usb_descriptor_header *) &ncm_data_nop_intf, (struct usb_descriptor_header *) &ncm_data_intf, (struct usb_descriptor_header *) &ncm_ss_in_desc, (struct usb_descriptor_header *) &ncm_ss_in_comp_desc, (struct usb_descriptor_header *) &ncm_ss_out_desc, (struct usb_descriptor_header *) &ncm_ss_out_comp_desc, NULL, }; /* string descriptors: */ #define STRING_CTRL_IDX 0 Loading Loading @@ -1238,8 +1309,17 @@ ncm_bind(struct usb_configuration *c, struct usb_function *f) hs_ncm_notify_desc.bEndpointAddress = fs_ncm_notify_desc.bEndpointAddress; if (gadget_is_superspeed(c->cdev->gadget)) { ncm_ss_in_desc.bEndpointAddress = fs_ncm_in_desc.bEndpointAddress; ncm_ss_out_desc.bEndpointAddress = fs_ncm_out_desc.bEndpointAddress; ncm_ss_notify_desc.bEndpointAddress = fs_ncm_notify_desc.bEndpointAddress; } status = usb_assign_descriptors(f, ncm_fs_function, ncm_hs_function, NULL); ncm_ss_function); /* * NOTE: all that is done without knowing or caring about * the network link ... which is unavailable to this code Loading