Merge "usb: gadget: Update default class subclass and protocol for rndis"
This commit is contained in:
commit
bdc7048a1b
1 changed files with 48 additions and 6 deletions
|
@ -106,6 +106,7 @@ struct f_rndis_qc {
|
||||||
u8 port_num;
|
u8 port_num;
|
||||||
u16 cdc_filter;
|
u16 cdc_filter;
|
||||||
bool net_ready_trigger;
|
bool net_ready_trigger;
|
||||||
|
bool use_wceis;
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct ipa_usb_init_params rndis_ipa_params;
|
static struct ipa_usb_init_params rndis_ipa_params;
|
||||||
|
@ -161,9 +162,9 @@ static struct usb_interface_descriptor rndis_qc_control_intf = {
|
||||||
/* .bInterfaceNumber = DYNAMIC */
|
/* .bInterfaceNumber = DYNAMIC */
|
||||||
/* status endpoint is optional; this could be patched later */
|
/* status endpoint is optional; this could be patched later */
|
||||||
.bNumEndpoints = 1,
|
.bNumEndpoints = 1,
|
||||||
.bInterfaceClass = USB_CLASS_WIRELESS_CONTROLLER,
|
.bInterfaceClass = USB_CLASS_MISC,
|
||||||
.bInterfaceSubClass = 0x01,
|
.bInterfaceSubClass = 0x04,
|
||||||
.bInterfaceProtocol = 0x03,
|
.bInterfaceProtocol = 0x01, /* RNDIS over ethernet */
|
||||||
/* .iInterface = DYNAMIC */
|
/* .iInterface = DYNAMIC */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -222,9 +223,9 @@ rndis_qc_iad_descriptor = {
|
||||||
.bDescriptorType = USB_DT_INTERFACE_ASSOCIATION,
|
.bDescriptorType = USB_DT_INTERFACE_ASSOCIATION,
|
||||||
.bFirstInterface = 0, /* XXX, hardcoded */
|
.bFirstInterface = 0, /* XXX, hardcoded */
|
||||||
.bInterfaceCount = 2, /* control + data */
|
.bInterfaceCount = 2, /* control + data */
|
||||||
.bFunctionClass = USB_CLASS_WIRELESS_CONTROLLER,
|
.bFunctionClass = USB_CLASS_MISC,
|
||||||
.bFunctionSubClass = 0x01,
|
.bFunctionSubClass = 0x04,
|
||||||
.bFunctionProtocol = 0x03,
|
.bFunctionProtocol = 0x01, /* RNDIS over ethernet */
|
||||||
/* .iFunction = DYNAMIC */
|
/* .iFunction = DYNAMIC */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -935,6 +936,17 @@ rndis_qc_bind(struct usb_configuration *c, struct usb_function *f)
|
||||||
rndis_qc_iad_descriptor.iFunction = status;
|
rndis_qc_iad_descriptor.iFunction = status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (rndis->use_wceis) {
|
||||||
|
rndis_qc_iad_descriptor.bFunctionClass =
|
||||||
|
USB_CLASS_WIRELESS_CONTROLLER;
|
||||||
|
rndis_qc_iad_descriptor.bFunctionSubClass = 0x01;
|
||||||
|
rndis_qc_iad_descriptor.bFunctionProtocol = 0x03;
|
||||||
|
rndis_qc_control_intf.bInterfaceClass =
|
||||||
|
USB_CLASS_WIRELESS_CONTROLLER;
|
||||||
|
rndis_qc_control_intf.bInterfaceSubClass = 0x1;
|
||||||
|
rndis_qc_control_intf.bInterfaceProtocol = 0x03;
|
||||||
|
}
|
||||||
|
|
||||||
/* allocate instance-specific interface IDs */
|
/* allocate instance-specific interface IDs */
|
||||||
status = usb_interface_id(c, f);
|
status = usb_interface_id(c, f);
|
||||||
if (status < 0)
|
if (status < 0)
|
||||||
|
@ -1470,8 +1482,38 @@ static struct configfs_item_operations qcrndis_item_ops = {
|
||||||
.release = qcrndis_attr_release,
|
.release = qcrndis_attr_release,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static ssize_t qcrndis_wceis_show(struct config_item *item, char *page)
|
||||||
|
{
|
||||||
|
struct f_rndis_qc *rndis = to_f_qc_rndis_opts(item)->rndis;
|
||||||
|
|
||||||
|
return snprintf(page, PAGE_SIZE, "%d\n", rndis->use_wceis);
|
||||||
|
}
|
||||||
|
|
||||||
|
static ssize_t qcrndis_wceis_store(struct config_item *item,
|
||||||
|
const char *page, size_t len)
|
||||||
|
{
|
||||||
|
struct f_rndis_qc *rndis = to_f_qc_rndis_opts(item)->rndis;
|
||||||
|
bool val;
|
||||||
|
|
||||||
|
if (kstrtobool(page, &val))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
rndis->use_wceis = val;
|
||||||
|
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
CONFIGFS_ATTR(qcrndis_, wceis);
|
||||||
|
|
||||||
|
static struct configfs_attribute *qcrndis_attrs[] = {
|
||||||
|
&qcrndis_attr_wceis,
|
||||||
|
NULL,
|
||||||
|
};
|
||||||
|
|
||||||
static struct config_item_type qcrndis_func_type = {
|
static struct config_item_type qcrndis_func_type = {
|
||||||
.ct_item_ops = &qcrndis_item_ops,
|
.ct_item_ops = &qcrndis_item_ops,
|
||||||
|
.ct_attrs = qcrndis_attrs,
|
||||||
.ct_owner = THIS_MODULE,
|
.ct_owner = THIS_MODULE,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue