Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[PATCH] USB: ethernet gadget updates (mostly cleanup)

Some cleanup for the the Ethernet part of the Ethernet/RNDIS gadget driver:

- Remove remnants of ancient endpoint init logic; this is simpler, clearer

- Save a smidgeon of space in the object file

- Get rid of some #ifdeffery, mostly by using some newish inlines

- Reset more driver state as part of USB reset

- Remove a needless wrapper around an RNDIS call

- Improve and comment the status interrupt handling:
* RNDIS sometimes needs to queue these transfers (rarely in normal
cases, but reproducibly while Windows was deadlocking its USB stack)
* Mark requests as busy/not

- Enable the SET_NETDEV_DEV() call; sysfs seems to behave sanely now

This is a net shrink of source code.

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

authored by

David Brownell and committed by
Greg Kroah-Hartman
907cba35 340600ab

+108 -181
+108 -181
drivers/usb/gadget/ether.c
··· 84 84 */ 85 85 86 86 #define DRIVER_DESC "Ethernet Gadget" 87 - #define DRIVER_VERSION "Equinox 2004" 87 + #define DRIVER_VERSION "May Day 2005" 88 88 89 89 static const char shortname [] = "ether"; 90 90 static const char driver_desc [] = DRIVER_DESC; ··· 141 141 * It also ASSUMES a self-powered device, without remote wakeup, 142 142 * although remote wakeup support would make sense. 143 143 */ 144 - static const char *EP_IN_NAME; 145 - static const char *EP_OUT_NAME; 146 - static const char *EP_STATUS_NAME; 147 144 148 145 /*-------------------------------------------------------------------------*/ 149 146 ··· 310 313 #define FS_BPS (19 * 64 * 1 * 1000 * 8) 311 314 312 315 #ifdef CONFIG_USB_GADGET_DUALSPEED 316 + #define DEVSPEED USB_SPEED_HIGH 313 317 314 318 static unsigned qmult = 5; 315 319 module_param (qmult, uint, S_IRUGO|S_IWUSR); ··· 329 331 } 330 332 331 333 #else /* full speed (low speed doesn't do bulk) */ 334 + #define DEVSPEED USB_SPEED_FULL 335 + 332 336 #define qlen(gadget) DEFAULT_QLEN 333 337 334 338 static inline int BITRATE(struct usb_gadget *g) ··· 540 540 .bDataInterface = 0x01, 541 541 }; 542 542 543 - static struct usb_cdc_acm_descriptor acm_descriptor = { 543 + static const struct usb_cdc_acm_descriptor acm_descriptor = { 544 544 .bLength = sizeof acm_descriptor, 545 545 .bDescriptorType = USB_DT_CS_INTERFACE, 546 546 .bDescriptorSubType = USB_CDC_ACM_TYPE, ··· 848 848 #else 849 849 850 850 /* if there's no high speed support, maxpacket doesn't change. */ 851 - #define ep_desc(g,hs,fs) fs 851 + #define ep_desc(g,hs,fs) (((void)(g)), (fs)) 852 852 853 853 static inline void __init hs_subset_descriptors(void) 854 854 { ··· 948 948 static void eth_start (struct eth_dev *dev, int gfp_flags); 949 949 static int alloc_requests (struct eth_dev *dev, unsigned n, int gfp_flags); 950 950 951 - #ifdef DEV_CONFIG_CDC 952 - static inline int ether_alt_ep_setup (struct eth_dev *dev, struct usb_ep *ep) 951 + static int 952 + set_ether_config (struct eth_dev *dev, int gfp_flags) 953 953 { 954 - const struct usb_endpoint_descriptor *d; 954 + int result = 0; 955 + struct usb_gadget *gadget = dev->gadget; 956 + 957 + /* status endpoint used for RNDIS and (optionally) CDC */ 958 + if (!subset_active(dev) && dev->status_ep) { 959 + dev->status = ep_desc (gadget, &hs_status_desc, 960 + &fs_status_desc); 961 + dev->status_ep->driver_data = dev; 962 + 963 + result = usb_ep_enable (dev->status_ep, dev->status); 964 + if (result != 0) { 965 + DEBUG (dev, "enable %s --> %d\n", 966 + dev->status_ep->name, result); 967 + goto done; 968 + } 969 + } 970 + 971 + dev->in = ep_desc (dev->gadget, &hs_source_desc, &fs_source_desc); 972 + dev->in_ep->driver_data = dev; 973 + 974 + dev->out = ep_desc (dev->gadget, &hs_sink_desc, &fs_sink_desc); 975 + dev->out_ep->driver_data = dev; 955 976 956 977 /* With CDC, the host isn't allowed to use these two data 957 978 * endpoints in the default altsetting for the interface. ··· 982 961 * a side effect of setting a packet filter. Deactivation is 983 962 * from REMOTE_NDIS_HALT_MSG, reset from REMOTE_NDIS_RESET_MSG. 984 963 */ 985 - 986 - /* one endpoint writes data back IN to the host */ 987 - if (strcmp (ep->name, EP_IN_NAME) == 0) { 988 - d = ep_desc (dev->gadget, &hs_source_desc, &fs_source_desc); 989 - ep->driver_data = dev; 990 - dev->in = d; 991 - 992 - /* one endpoint just reads OUT packets */ 993 - } else if (strcmp (ep->name, EP_OUT_NAME) == 0) { 994 - d = ep_desc (dev->gadget, &hs_sink_desc, &fs_sink_desc); 995 - ep->driver_data = dev; 996 - dev->out = d; 997 - 998 - /* optional status/notification endpoint */ 999 - } else if (EP_STATUS_NAME && 1000 - strcmp (ep->name, EP_STATUS_NAME) == 0) { 1001 - int result; 1002 - 1003 - d = ep_desc (dev->gadget, &hs_status_desc, &fs_status_desc); 1004 - result = usb_ep_enable (ep, d); 1005 - if (result < 0) 1006 - return result; 1007 - 1008 - ep->driver_data = dev; 1009 - dev->status = d; 1010 - } 1011 - return 0; 1012 - } 1013 - #endif 1014 - 1015 - #if defined(DEV_CONFIG_SUBSET) || defined(CONFIG_USB_ETH_RNDIS) 1016 - static inline int ether_ep_setup (struct eth_dev *dev, struct usb_ep *ep) 1017 - { 1018 - int result; 1019 - const struct usb_endpoint_descriptor *d; 1020 - 1021 - /* CDC subset is simpler: if the device is there, 1022 - * it's live with rx and tx endpoints. 1023 - * 1024 - * Do this as a shortcut for RNDIS too. 1025 - */ 1026 - 1027 - /* one endpoint writes data back IN to the host */ 1028 - if (strcmp (ep->name, EP_IN_NAME) == 0) { 1029 - d = ep_desc (dev->gadget, &hs_source_desc, &fs_source_desc); 1030 - result = usb_ep_enable (ep, d); 1031 - if (result < 0) 1032 - return result; 1033 - 1034 - ep->driver_data = dev; 1035 - dev->in = d; 1036 - 1037 - /* one endpoint just reads OUT packets */ 1038 - } else if (strcmp (ep->name, EP_OUT_NAME) == 0) { 1039 - d = ep_desc (dev->gadget, &hs_sink_desc, &fs_sink_desc); 1040 - result = usb_ep_enable (ep, d); 1041 - if (result < 0) 1042 - return result; 1043 - 1044 - ep->driver_data = dev; 1045 - dev->out = d; 1046 - } 1047 - 1048 - return 0; 1049 - } 1050 - #endif 1051 - 1052 - static int 1053 - set_ether_config (struct eth_dev *dev, int gfp_flags) 1054 - { 1055 - int result = 0; 1056 - struct usb_ep *ep; 1057 - struct usb_gadget *gadget = dev->gadget; 1058 - 1059 - gadget_for_each_ep (ep, gadget) { 1060 - #ifdef DEV_CONFIG_CDC 1061 - if (!dev->rndis && dev->cdc) { 1062 - result = ether_alt_ep_setup (dev, ep); 1063 - if (result == 0) 1064 - continue; 1065 - } 1066 - #endif 1067 - 1068 - #ifdef CONFIG_USB_ETH_RNDIS 1069 - if (dev->rndis && strcmp (ep->name, EP_STATUS_NAME) == 0) { 1070 - const struct usb_endpoint_descriptor *d; 1071 - d = ep_desc (gadget, &hs_status_desc, &fs_status_desc); 1072 - result = usb_ep_enable (ep, d); 1073 - if (result == 0) { 1074 - ep->driver_data = dev; 1075 - dev->status = d; 1076 - continue; 1077 - } 1078 - } else 1079 - #endif 1080 - 1081 - { 1082 - #if defined(DEV_CONFIG_SUBSET) || defined(CONFIG_USB_ETH_RNDIS) 1083 - result = ether_ep_setup (dev, ep); 1084 - if (result == 0) 1085 - continue; 1086 - #endif 964 + if (!cdc_active(dev)) { 965 + result = usb_ep_enable (dev->in_ep, dev->in); 966 + if (result != 0) { 967 + DEBUG(dev, "enable %s --> %d\n", 968 + dev->in_ep->name, result); 969 + goto done; 1087 970 } 1088 971 1089 - /* stop on error */ 1090 - ERROR (dev, "can't enable %s, result %d\n", ep->name, result); 1091 - break; 972 + result = usb_ep_enable (dev->out_ep, dev->out); 973 + if (result != 0) { 974 + DEBUG (dev, "enable %s --> %d\n", 975 + dev->in_ep->name, result); 976 + goto done; 977 + } 1092 978 } 1093 - if (!result && (!dev->in_ep || !dev->out_ep)) 1094 - result = -ENODEV; 1095 979 980 + done: 1096 981 if (result == 0) 1097 982 result = alloc_requests (dev, qlen (gadget), gfp_flags); 1098 983 1099 984 /* on error, disable any endpoints */ 1100 985 if (result < 0) { 1101 - #if defined(DEV_CONFIG_CDC) || defined(CONFIG_USB_ETH_RNDIS) 1102 - if (dev->status) 986 + if (!subset_active(dev)) 1103 987 (void) usb_ep_disable (dev->status_ep); 1104 - #endif 1105 988 dev->status = NULL; 1106 - #if defined(DEV_CONFIG_SUBSET) || defined(CONFIG_USB_ETH_RNDIS) 1107 - if (dev->rndis || !dev->cdc) { 1108 - if (dev->in) 1109 - (void) usb_ep_disable (dev->in_ep); 1110 - if (dev->out) 1111 - (void) usb_ep_disable (dev->out_ep); 1112 - } 1113 - #endif 989 + (void) usb_ep_disable (dev->in_ep); 990 + (void) usb_ep_disable (dev->out_ep); 1114 991 dev->in = NULL; 1115 992 dev->out = NULL; 1116 993 } else ··· 1016 1097 /* activate non-CDC configs right away 1017 1098 * this isn't strictly according to the RNDIS spec 1018 1099 */ 1019 - #if defined(DEV_CONFIG_SUBSET) || defined(CONFIG_USB_ETH_RNDIS) 1020 - if (dev->rndis || !dev->cdc) { 1100 + if (!cdc_active (dev)) { 1021 1101 netif_carrier_on (dev->net); 1022 1102 if (netif_running (dev->net)) { 1023 1103 spin_unlock (&dev->lock); ··· 1024 1106 spin_lock (&dev->lock); 1025 1107 } 1026 1108 } 1027 - #endif 1028 1109 1029 1110 if (result == 0) 1030 1111 DEBUG (dev, "qlen %d\n", qlen (gadget)); ··· 1070 1153 if (dev->status) { 1071 1154 usb_ep_disable (dev->status_ep); 1072 1155 } 1156 + dev->rndis = 0; 1157 + dev->cdc_filter = 0; 1073 1158 dev->config = 0; 1074 1159 } 1075 1160 ··· 1084 1165 int result = 0; 1085 1166 struct usb_gadget *gadget = dev->gadget; 1086 1167 1087 - if (number == dev->config) 1088 - return 0; 1089 - 1090 1168 if (gadget_is_sa1100 (gadget) 1091 1169 && dev->config 1092 1170 && atomic_read (&dev->tx_qlen) != 0) { ··· 1093 1177 } 1094 1178 eth_reset_config (dev); 1095 1179 1096 - /* default: pass all packets, no multicast filtering */ 1097 - dev->cdc_filter = DEFAULT_FILTER; 1098 - 1099 1180 switch (number) { 1100 1181 case DEV_CONFIG_VALUE: 1101 - dev->rndis = 0; 1102 1182 result = set_ether_config (dev, gfp_flags); 1103 1183 break; 1104 1184 #ifdef CONFIG_USB_ETH_RNDIS ··· 1146 1234 1147 1235 #ifdef DEV_CONFIG_CDC 1148 1236 1237 + /* The interrupt endpoint is used in CDC networking models (Ethernet, ATM) 1238 + * only to notify the host about link status changes (which we support) or 1239 + * report completion of some encapsulated command (as used in RNDIS). Since 1240 + * we want this CDC Ethernet code to be vendor-neutral, we don't use that 1241 + * command mechanism; and only one status request is ever queued. 1242 + */ 1243 + 1149 1244 static void eth_status_complete (struct usb_ep *ep, struct usb_request *req) 1150 1245 { 1151 1246 struct usb_cdc_notification *event = req->buf; ··· 1181 1262 } else if (value != -ECONNRESET) 1182 1263 DEBUG (dev, "event %02x --> %d\n", 1183 1264 event->bNotificationType, value); 1184 - event->bmRequestType = 0xff; 1265 + req->context = NULL; 1185 1266 } 1186 1267 1187 1268 static void issue_start_status (struct eth_dev *dev) ··· 1198 1279 * a "cancel the whole queue" primitive since any 1199 1280 * unlink-one primitive has way too many error modes. 1200 1281 * here, we "know" toggle is already clear... 1282 + * 1283 + * FIXME iff req->context != null just dequeue it 1201 1284 */ 1202 1285 usb_ep_disable (dev->status_ep); 1203 1286 usb_ep_enable (dev->status_ep, dev->status); ··· 1216 1295 1217 1296 req->length = sizeof *event; 1218 1297 req->complete = eth_status_complete; 1298 + req->context = dev; 1299 + 1219 1300 value = usb_ep_queue (dev->status_ep, req, GFP_ATOMIC); 1220 1301 if (value < 0) 1221 1302 DEBUG (dev, "status buf queue --> %d\n", value); ··· 1382 1459 1383 1460 /* CDC requires the data transfers not be done from 1384 1461 * the default interface setting ... also, setting 1385 - * the non-default interface clears filters etc. 1462 + * the non-default interface resets filters etc. 1386 1463 */ 1387 1464 if (wValue == 1) { 1465 + if (!cdc_active (dev)) 1466 + break; 1388 1467 usb_ep_enable (dev->in_ep, dev->in); 1389 1468 usb_ep_enable (dev->out_ep, dev->out); 1390 1469 dev->cdc_filter = DEFAULT_FILTER; ··· 1616 1691 */ 1617 1692 size = (sizeof (struct ethhdr) + dev->net->mtu + RX_EXTRA); 1618 1693 size += dev->out_ep->maxpacket - 1; 1619 - #ifdef CONFIG_USB_ETH_RNDIS 1620 - if (dev->rndis) 1694 + if (rndis_active(dev)) 1621 1695 size += sizeof (struct rndis_packet_msg_type); 1622 - #endif 1623 1696 size -= size % dev->out_ep->maxpacket; 1624 1697 1625 1698 if ((skb = alloc_skb (size + NET_IP_ALIGN, gfp_flags)) == 0) { ··· 1785 1862 struct usb_request *req; 1786 1863 unsigned long flags; 1787 1864 1788 - clear_bit (WORK_RX_MEMORY, &dev->todo); 1789 - 1790 1865 /* fill unused rxq slots with some skb */ 1791 1866 spin_lock_irqsave (&dev->lock, flags); 1792 1867 while (!list_empty (&dev->rx_reqs)) { ··· 1807 1886 { 1808 1887 struct eth_dev *dev = _dev; 1809 1888 1810 - if (test_bit (WORK_RX_MEMORY, &dev->todo)) { 1889 + if (test_and_clear_bit (WORK_RX_MEMORY, &dev->todo)) { 1811 1890 if (netif_running (dev->net)) 1812 1891 rx_fill (dev, GFP_KERNEL); 1813 - else 1814 - clear_bit (WORK_RX_MEMORY, &dev->todo); 1815 1892 } 1816 1893 1817 1894 if (dev->todo) ··· 1958 2039 1959 2040 #ifdef CONFIG_USB_ETH_RNDIS 1960 2041 1961 - static void rndis_send_media_state (struct eth_dev *dev, int connect) 1962 - { 1963 - if (!dev) 1964 - return; 1965 - 1966 - if (connect) { 1967 - if (rndis_signal_connect (dev->rndis_config)) 1968 - return; 1969 - } else { 1970 - if (rndis_signal_disconnect (dev->rndis_config)) 1971 - return; 1972 - } 1973 - } 2042 + /* The interrupt endpoint is used in RNDIS to notify the host when messages 2043 + * other than data packets are available ... notably the REMOTE_NDIS_*_CMPLT 2044 + * messages, but also REMOTE_NDIS_INDICATE_STATUS_MSG and potentially even 2045 + * REMOTE_NDIS_KEEPALIVE_MSG. 2046 + * 2047 + * The RNDIS control queue is processed by GET_ENCAPSULATED_RESPONSE, and 2048 + * normally just one notification will be queued. 2049 + */ 2050 + 2051 + static struct usb_request *eth_req_alloc (struct usb_ep *, unsigned, unsigned); 2052 + static void eth_req_free (struct usb_ep *ep, struct usb_request *req); 1974 2053 1975 2054 static void 1976 2055 rndis_control_ack_complete (struct usb_ep *ep, struct usb_request *req) 1977 2056 { 2057 + struct eth_dev *dev = ep->driver_data; 2058 + 1978 2059 if (req->status || req->actual != req->length) 1979 - DEBUG ((struct eth_dev *) ep->driver_data, 2060 + DEBUG (dev, 1980 2061 "rndis control ack complete --> %d, %d/%d\n", 1981 2062 req->status, req->actual, req->length); 2063 + req->context = NULL; 2064 + 2065 + if (req != dev->stat_req) 2066 + eth_req_free(ep, req); 1982 2067 } 1983 2068 1984 2069 static int rndis_control_ack (struct net_device *net) ··· 1997 2074 return -ENODEV; 1998 2075 } 1999 2076 2077 + /* in case queue length > 1 */ 2078 + if (resp->context) { 2079 + resp = eth_req_alloc (dev->status_ep, 8, GFP_ATOMIC); 2080 + if (!resp) 2081 + return -ENOMEM; 2082 + } 2083 + 2000 2084 /* Send RNDIS RESPONSE_AVAILABLE notification; 2001 2085 * USB_CDC_NOTIFY_RESPONSE_AVAILABLE should work too 2002 2086 */ 2003 2087 resp->length = 8; 2004 2088 resp->complete = rndis_control_ack_complete; 2089 + resp->context = dev; 2005 2090 2006 2091 *((__le32 *) resp->buf) = __constant_cpu_to_le32 (1); 2007 2092 *((__le32 *) resp->buf + 1) = __constant_cpu_to_le32 (0); ··· 2040 2109 rndis_set_param_medium (dev->rndis_config, 2041 2110 NDIS_MEDIUM_802_3, 2042 2111 BITRATE(dev->gadget)/100); 2043 - rndis_send_media_state (dev, 1); 2112 + (void) rndis_signal_connect (dev->rndis_config); 2044 2113 } 2045 2114 #endif 2046 2115 } ··· 2087 2156 if (dev->rndis) { 2088 2157 rndis_set_param_medium (dev->rndis_config, 2089 2158 NDIS_MEDIUM_802_3, 0); 2090 - rndis_send_media_state (dev, 0); 2159 + (void) rndis_signal_disconnect (dev->rndis_config); 2091 2160 } 2092 2161 #endif 2093 2162 ··· 2096 2165 2097 2166 /*-------------------------------------------------------------------------*/ 2098 2167 2099 - static struct usb_request *eth_req_alloc (struct usb_ep *ep, unsigned size) 2168 + static struct usb_request * 2169 + eth_req_alloc (struct usb_ep *ep, unsigned size, unsigned gfp_flags) 2100 2170 { 2101 2171 struct usb_request *req; 2102 2172 2103 - req = usb_ep_alloc_request (ep, GFP_KERNEL); 2173 + req = usb_ep_alloc_request (ep, gfp_flags); 2104 2174 if (!req) 2105 2175 return NULL; 2106 2176 2107 - req->buf = kmalloc (size, GFP_KERNEL); 2177 + req->buf = kmalloc (size, gfp_flags); 2108 2178 if (!req->buf) { 2109 2179 usb_ep_free_request (ep, req); 2110 2180 req = NULL; ··· 2303 2371 gadget->name); 2304 2372 return -ENODEV; 2305 2373 } 2306 - EP_IN_NAME = in_ep->name; 2307 2374 in_ep->driver_data = in_ep; /* claim */ 2308 2375 2309 2376 out_ep = usb_ep_autoconfig (gadget, &fs_sink_desc); 2310 2377 if (!out_ep) 2311 2378 goto autoconf_fail; 2312 - EP_OUT_NAME = out_ep->name; 2313 2379 out_ep->driver_data = out_ep; /* claim */ 2314 2380 2315 2381 #if defined(DEV_CONFIG_CDC) || defined(CONFIG_USB_ETH_RNDIS) ··· 2317 2387 if (cdc || rndis) { 2318 2388 status_ep = usb_ep_autoconfig (gadget, &fs_status_desc); 2319 2389 if (status_ep) { 2320 - EP_STATUS_NAME = status_ep->name; 2321 2390 status_ep->driver_data = status_ep; /* claim */ 2322 2391 } else if (rndis) { 2323 2392 dev_err (&gadget->dev, ··· 2358 2429 hs_source_desc.bEndpointAddress = fs_source_desc.bEndpointAddress; 2359 2430 hs_sink_desc.bEndpointAddress = fs_sink_desc.bEndpointAddress; 2360 2431 #if defined(DEV_CONFIG_CDC) || defined(CONFIG_USB_ETH_RNDIS) 2361 - if (EP_STATUS_NAME) 2432 + if (status_ep) 2362 2433 hs_status_desc.bEndpointAddress = 2363 2434 fs_status_desc.bEndpointAddress; 2364 2435 #endif ··· 2431 2502 SET_ETHTOOL_OPS(net, &ops); 2432 2503 2433 2504 /* preallocate control message data and buffer */ 2434 - dev->req = eth_req_alloc (gadget->ep0, USB_BUFSIZ); 2505 + dev->req = eth_req_alloc (gadget->ep0, USB_BUFSIZ, GFP_KERNEL); 2435 2506 if (!dev->req) 2436 2507 goto fail; 2437 2508 dev->req->complete = eth_setup_complete; ··· 2439 2510 /* ... and maybe likewise for status transfer */ 2440 2511 if (dev->status_ep) { 2441 2512 dev->stat_req = eth_req_alloc (dev->status_ep, 2442 - STATUS_BYTECOUNT); 2513 + STATUS_BYTECOUNT, GFP_KERNEL); 2443 2514 if (!dev->stat_req) { 2444 2515 eth_req_free (gadget->ep0, dev->req); 2445 2516 goto fail; 2446 2517 } 2518 + dev->stat_req->context = NULL; 2447 2519 } 2448 2520 2449 2521 /* finish hookup to lower layer ... */ ··· 2459 2529 netif_stop_queue (dev->net); 2460 2530 netif_carrier_off (dev->net); 2461 2531 2462 - // SET_NETDEV_DEV (dev->net, &gadget->dev); 2532 + SET_NETDEV_DEV (dev->net, &gadget->dev); 2463 2533 status = register_netdev (dev->net); 2464 2534 if (status < 0) 2465 2535 goto fail1; 2466 2536 2467 2537 INFO (dev, "%s, version: " DRIVER_VERSION "\n", driver_desc); 2468 2538 INFO (dev, "using %s, OUT %s IN %s%s%s\n", gadget->name, 2469 - EP_OUT_NAME, EP_IN_NAME, 2470 - EP_STATUS_NAME ? " STATUS " : "", 2471 - EP_STATUS_NAME ? EP_STATUS_NAME : "" 2539 + out_ep->name, in_ep->name, 2540 + status_ep ? " STATUS " : "", 2541 + status_ep ? status_ep->name : "" 2472 2542 ); 2473 2543 INFO (dev, "MAC %02x:%02x:%02x:%02x:%02x:%02x\n", 2474 2544 net->dev_addr [0], net->dev_addr [1], ··· 2543 2613 /*-------------------------------------------------------------------------*/ 2544 2614 2545 2615 static struct usb_gadget_driver eth_driver = { 2546 - #ifdef CONFIG_USB_GADGET_DUALSPEED 2547 - .speed = USB_SPEED_HIGH, 2548 - #else 2549 - .speed = USB_SPEED_FULL, 2550 - #endif 2616 + .speed = DEVSPEED, 2617 + 2551 2618 .function = (char *) driver_desc, 2552 2619 .bind = eth_bind, 2553 2620 .unbind = eth_unbind,