Lines Matching refs:dev

148 static inline int is_cdc(struct eth_dev *dev)  in is_cdc()  argument
155 return dev->cdc; /* depends on what hardware we found */ in is_cdc()
160 static inline int rndis_active(struct eth_dev *dev) in rndis_active() argument
163 return dev->rndis; in rndis_active()
169 #define subset_active(dev) (!is_cdc(dev) && !rndis_active(dev)) argument
170 #define cdc_active(dev) (is_cdc(dev) && !rndis_active(dev)) argument
913 static void eth_start(struct eth_dev *dev, gfp_t gfp_flags);
914 static int alloc_requests(struct eth_dev *dev, unsigned n, gfp_t gfp_flags);
917 set_ether_config(struct eth_dev *dev, gfp_t gfp_flags) in set_ether_config() argument
920 struct usb_gadget *gadget = dev->gadget; in set_ether_config()
924 if (!subset_active(dev) && dev->status_ep) { in set_ether_config()
925 dev->status = ep_desc(gadget, &hs_status_desc, in set_ether_config()
927 dev->status_ep->driver_data = dev; in set_ether_config()
929 result = usb_ep_enable(dev->status_ep, dev->status); in set_ether_config()
932 dev->status_ep->name, result); in set_ether_config()
938 dev->in = ep_desc(gadget, &hs_source_desc, &fs_source_desc); in set_ether_config()
939 dev->in_ep->driver_data = dev; in set_ether_config()
941 dev->out = ep_desc(gadget, &hs_sink_desc, &fs_sink_desc); in set_ether_config()
942 dev->out_ep->driver_data = dev; in set_ether_config()
953 if (!cdc_active(dev)) { in set_ether_config()
954 result = usb_ep_enable(dev->in_ep, dev->in); in set_ether_config()
957 dev->in_ep->name, result); in set_ether_config()
961 result = usb_ep_enable(dev->out_ep, dev->out); in set_ether_config()
964 dev->out_ep->name, result); in set_ether_config()
971 result = alloc_requests(dev, qlen(gadget), gfp_flags); in set_ether_config()
975 if (!subset_active(dev) && dev->status_ep) in set_ether_config()
976 (void) usb_ep_disable(dev->status_ep); in set_ether_config()
977 dev->status = NULL; in set_ether_config()
978 (void) usb_ep_disable(dev->in_ep); in set_ether_config()
979 (void) usb_ep_disable(dev->out_ep); in set_ether_config()
980 dev->in = NULL; in set_ether_config()
981 dev->out = NULL; in set_ether_config()
982 } else if (!cdc_active(dev)) { in set_ether_config()
987 eth_start(dev, GFP_ATOMIC); in set_ether_config()
994 static void eth_reset_config(struct eth_dev *dev) in eth_reset_config() argument
996 if (dev->config == 0) in eth_reset_config()
1001 rndis_uninit(dev->rndis_config); in eth_reset_config()
1008 if (dev->in) { in eth_reset_config()
1009 usb_ep_disable(dev->in_ep); in eth_reset_config()
1010 if (dev->tx_req) { in eth_reset_config()
1011 usb_ep_free_request(dev->in_ep, dev->tx_req); in eth_reset_config()
1012 dev->tx_req = NULL; in eth_reset_config()
1015 if (dev->out) { in eth_reset_config()
1016 usb_ep_disable(dev->out_ep); in eth_reset_config()
1017 if (dev->rx_req) { in eth_reset_config()
1018 usb_ep_free_request(dev->out_ep, dev->rx_req); in eth_reset_config()
1019 dev->rx_req = NULL; in eth_reset_config()
1022 if (dev->status) in eth_reset_config()
1023 usb_ep_disable(dev->status_ep); in eth_reset_config()
1025 dev->rndis = 0; in eth_reset_config()
1026 dev->cdc_filter = 0; in eth_reset_config()
1027 dev->config = 0; in eth_reset_config()
1034 static int eth_set_config(struct eth_dev *dev, unsigned number, in eth_set_config() argument
1038 struct usb_gadget *gadget = dev->gadget; in eth_set_config()
1040 eth_reset_config(dev); in eth_set_config()
1044 result = set_ether_config(dev, gfp_flags); in eth_set_config()
1048 dev->rndis = 1; in eth_set_config()
1049 result = set_ether_config(dev, gfp_flags); in eth_set_config()
1061 eth_reset_config(dev); in eth_set_config()
1062 usb_gadget_vbus_draw(dev->gadget, in eth_set_config()
1063 gadget_is_otg(dev->gadget) ? 8 : 100); in eth_set_config()
1069 usb_gadget_vbus_draw(dev->gadget, power); in eth_set_config()
1082 dev->config = number; in eth_set_config()
1085 rndis_active(dev) in eth_set_config()
1087 : (cdc_active(dev) in eth_set_config()
1109 struct eth_dev *dev = ep->driver_data; in eth_status_complete() local
1123 data[0] = data[1] = cpu_to_le32(BITRATE(dev->gadget)); in eth_status_complete()
1135 dev->network_started = 1; in eth_status_complete()
1142 static void issue_start_status(struct eth_dev *dev) in issue_start_status() argument
1144 struct usb_request *req = dev->stat_req; in issue_start_status()
1158 usb_ep_disable(dev->status_ep); in issue_start_status()
1159 usb_ep_enable(dev->status_ep, dev->status); in issue_start_status()
1174 req->context = dev; in issue_start_status()
1176 value = usb_ep_queue(dev->status_ep, req, GFP_ATOMIC); in issue_start_status()
1205 struct eth_dev *dev = ep->driver_data; in rndis_command_complete() local
1209 status = rndis_msg_parser(dev->rndis_config, (u8 *) req->buf); in rndis_command_complete()
1228 struct eth_dev *dev = get_gadget_data(gadget); in eth_setup() local
1229 struct usb_request *req = dev->req; in eth_setup()
1293 value = eth_set_config(dev, wValue, GFP_ATOMIC); in eth_setup()
1298 *(u8 *)req->buf = dev->config; in eth_setup()
1304 || !dev->config in eth_setup()
1307 if (!cdc_active(dev) && wIndex != 0) in eth_setup()
1315 if (dev->status) { in eth_setup()
1316 usb_ep_disable(dev->status_ep); in eth_setup()
1317 usb_ep_enable(dev->status_ep, dev->status); in eth_setup()
1325 usb_ep_disable(dev->in_ep); in eth_setup()
1326 usb_ep_disable(dev->out_ep); in eth_setup()
1334 if (!cdc_active(dev)) in eth_setup()
1336 usb_ep_enable(dev->in_ep, dev->in); in eth_setup()
1337 usb_ep_enable(dev->out_ep, dev->out); in eth_setup()
1338 dev->cdc_filter = DEFAULT_FILTER; in eth_setup()
1339 if (dev->status) in eth_setup()
1340 issue_start_status(dev); in eth_setup()
1341 eth_start(dev, GFP_ATOMIC); in eth_setup()
1356 || !dev->config in eth_setup()
1359 if (!(cdc_active(dev) || rndis_active(dev)) && wIndex != 0) in eth_setup()
1363 if (rndis_active(dev) || wIndex != 1) in eth_setup()
1380 || !cdc_active(dev) in eth_setup()
1385 dev->cdc_filter = wValue; in eth_setup()
1406 || !rndis_active(dev) in eth_setup()
1421 && rndis_active(dev) in eth_setup()
1430 buf = rndis_get_next_response(dev->rndis_config, &n); in eth_setup()
1434 rndis_free_response(dev->rndis_config, buf); in eth_setup()
1470 static int rx_submit(struct eth_dev *dev, struct usb_request *req, in rx_submit() argument
1493 size = (ETHER_HDR_SIZE + dev->mtu + RX_EXTRA); in rx_submit()
1494 size += dev->out_ep->maxpacket - 1; in rx_submit()
1495 if (rndis_active(dev)) in rx_submit()
1497 size -= size % dev->out_ep->maxpacket; in rx_submit()
1509 retval = usb_ep_queue(dev->out_ep, req, gfp_flags); in rx_submit()
1519 struct eth_dev *dev = ep->driver_data; in rx_complete() local
1525 if (rndis_active(dev)) { in rx_complete()
1535 dev->stats.rx_errors++; in rx_complete()
1536 dev->stats.rx_length_errors++; in rx_complete()
1541 dev->stats.rx_packets++; in rx_complete()
1542 dev->stats.rx_bytes += req->length; in rx_complete()
1554 dev->stats.rx_over_errors++; in rx_complete()
1557 dev->stats.rx_errors++; in rx_complete()
1564 static int alloc_requests(struct eth_dev *dev, unsigned n, gfp_t gfp_flags) in alloc_requests() argument
1567 dev->tx_req = usb_ep_alloc_request(dev->in_ep, 0); in alloc_requests()
1569 if (!dev->tx_req) in alloc_requests()
1572 dev->rx_req = usb_ep_alloc_request(dev->out_ep, 0); in alloc_requests()
1574 if (!dev->rx_req) in alloc_requests()
1580 usb_ep_free_request(dev->in_ep, dev->tx_req); in alloc_requests()
1588 struct eth_dev *dev = ep->driver_data; in tx_complete() local
1593 dev->stats.tx_errors++; in tx_complete()
1600 dev->stats.tx_bytes += req->length; in tx_complete()
1602 dev->stats.tx_packets++; in tx_complete()
1607 static inline int eth_is_promisc(struct eth_dev *dev) in eth_is_promisc() argument
1610 if (subset_active(dev)) in eth_is_promisc()
1612 return dev->cdc_filter & USB_CDC_PACKET_TYPE_PROMISCUOUS; in eth_is_promisc()
1618 struct eth_dev *dev = netdev_priv(net);
1625 if (!eth_is_promisc (dev)) {
1638 if (!(dev->cdc_filter & type)) {
1646 spin_lock_irqsave(&dev->req_lock, flags);
1652 if (list_empty(&dev->tx_reqs)) {
1653 spin_unlock_irqrestore(&dev->req_lock, flags);
1657 req = container_of (dev->tx_reqs.next, struct usb_request, list);
1661 if (list_empty (&dev->tx_reqs))
1663 spin_unlock_irqrestore(&dev->req_lock, flags);
1669 if (rndis_active(dev)) {
1691 if (!dev->zlp && (length % dev->in_ep->maxpacket) == 0)
1697 if (gadget_is_dualspeed(dev->gadget))
1698 req->no_interrupt = (dev->gadget->speed == USB_SPEED_HIGH)
1699 ? ((atomic_read(&dev->tx_qlen) % qmult) != 0)
1702 retval = usb_ep_queue (dev->in_ep, req, GFP_ATOMIC);
1705 DEBUG (dev, "tx queue err %d\n", retval);
1709 atomic_inc (&dev->tx_qlen);
1714 dev->stats.tx_dropped++;
1716 spin_lock_irqsave(&dev->req_lock, flags);
1717 if (list_empty (&dev->tx_reqs))
1719 list_add (&req->list, &dev->tx_reqs);
1720 spin_unlock_irqrestore(&dev->req_lock, flags);
1730 struct eth_dev *dev = get_gadget_data(gadget); in eth_unbind() local
1733 rndis_deregister(dev->rndis_config); in eth_unbind()
1737 if (dev->req) { in eth_unbind()
1738 usb_ep_free_request(gadget->ep0, dev->req); in eth_unbind()
1739 dev->req = NULL; in eth_unbind()
1741 if (dev->stat_req) { in eth_unbind()
1742 usb_ep_free_request(dev->status_ep, dev->stat_req); in eth_unbind()
1743 dev->stat_req = NULL; in eth_unbind()
1746 if (dev->tx_req) { in eth_unbind()
1747 usb_ep_free_request(dev->in_ep, dev->tx_req); in eth_unbind()
1748 dev->tx_req = NULL; in eth_unbind()
1751 if (dev->rx_req) { in eth_unbind()
1752 usb_ep_free_request(dev->out_ep, dev->rx_req); in eth_unbind()
1753 dev->rx_req = NULL; in eth_unbind()
1759 dev->gadget = NULL; in eth_unbind()
1796 struct eth_dev *dev = ep->driver_data; in rndis_control_ack_complete() local
1803 if (!dev->network_started) { in rndis_control_ack_complete()
1804 if (rndis_get_state(dev->rndis_config) in rndis_control_ack_complete()
1806 dev->network_started = 1; in rndis_control_ack_complete()
1813 if (req != dev->stat_req) in rndis_control_ack_complete()
1822 struct eth_dev *dev; in rndis_control_ack() local
1827 dev = &priv->ethdev; in rndis_control_ack()
1828 resp = dev->stat_req; in rndis_control_ack()
1831 if (!dev->status) { in rndis_control_ack()
1838 resp = usb_ep_alloc_request(dev->status_ep, GFP_ATOMIC); in rndis_control_ack()
1850 resp->context = dev; in rndis_control_ack()
1855 length = usb_ep_queue(dev->status_ep, resp, GFP_ATOMIC); in rndis_control_ack()
1858 rndis_control_ack_complete(dev->status_ep, resp); in rndis_control_ack()
1870 static void eth_start(struct eth_dev *dev, gfp_t gfp_flags) in eth_start() argument
1872 if (rndis_active(dev)) { in eth_start()
1873 rndis_set_param_medium(dev->rndis_config, in eth_start()
1875 BITRATE(dev->gadget)/100); in eth_start()
1876 rndis_signal_connect(dev->rndis_config); in eth_start()
1883 struct eth_dev *dev = &priv->ethdev; in eth_stop() local
1889 if (rndis_active(dev)) { in eth_stop()
1890 rndis_set_param_medium(dev->rndis_config, NDIS_MEDIUM_802_3, 0); in eth_stop()
1891 rndis_signal_disconnect(dev->rndis_config); in eth_stop()
1900 rndis_uninit(dev->rndis_config); in eth_stop()
1901 dev->rndis = 0; in eth_stop()
1969 struct eth_dev *dev = &l_priv->ethdev; in eth_bind() local
2138 dev->net = l_priv->netdev; in eth_bind()
2140 dev->cdc = cdc; in eth_bind()
2141 dev->zlp = zlp; in eth_bind()
2143 dev->in_ep = in_ep; in eth_bind()
2144 dev->out_ep = out_ep; in eth_bind()
2145 dev->status_ep = status_ep; in eth_bind()
2158 get_ether_addr(host_addr, dev->host_mac); in eth_bind()
2161 dev->host_mac[0], dev->host_mac[1], in eth_bind()
2162 dev->host_mac[2], dev->host_mac[3], in eth_bind()
2163 dev->host_mac[4], dev->host_mac[5]); in eth_bind()
2177 dev->mtu = PKTSIZE_ALIGN; /* RNDIS does not like this, only 1514, TODO*/ in eth_bind()
2180 dev->req = usb_ep_alloc_request(gadget->ep0, GFP_KERNEL); in eth_bind()
2181 if (!dev->req) in eth_bind()
2183 dev->req->buf = control_req; in eth_bind()
2184 dev->req->complete = eth_setup_complete; in eth_bind()
2188 if (dev->status_ep) { in eth_bind()
2189 dev->stat_req = usb_ep_alloc_request(dev->status_ep, in eth_bind()
2191 if (!dev->stat_req) { in eth_bind()
2192 usb_ep_free_request(dev->status_ep, dev->req); in eth_bind()
2196 dev->stat_req->buf = status_req; in eth_bind()
2197 dev->stat_req->context = NULL; in eth_bind()
2202 dev->gadget = gadget; in eth_bind()
2203 set_gadget_data(gadget, dev); in eth_bind()
2204 gadget->ep0->driver_data = dev; in eth_bind()
2221 dev->host_mac[0], dev->host_mac[1], in eth_bind()
2222 dev->host_mac[2], dev->host_mac[3], in eth_bind()
2223 dev->host_mac[4], dev->host_mac[5]); in eth_bind()
2230 dev->rndis_config = rndis_register(rndis_control_ack); in eth_bind()
2231 if (dev->rndis_config < 0) { in eth_bind()
2240 rndis_set_host_mac(dev->rndis_config, dev->host_mac); in eth_bind()
2241 if (rndis_set_param_dev(dev->rndis_config, dev->net, dev->mtu, in eth_bind()
2242 &dev->stats, &dev->cdc_filter)) in eth_bind()
2244 if (rndis_set_param_vendor(dev->rndis_config, vendorID, in eth_bind()
2247 if (rndis_set_param_medium(dev->rndis_config, in eth_bind()
2261 static void usb_eth_stop(struct udevice *dev);
2266 struct eth_dev *dev = &priv->ethdev; in usb_eth_start() local
2271 dev->network_started = 0; in usb_eth_start()
2276 gadget = dev->gadget; in usb_eth_start()
2282 while (!dev->network_started) { in usb_eth_start()
2292 rx_submit(dev, dev->rx_req, 0); in usb_eth_start()
2304 struct eth_dev *dev = &priv->ethdev; in usb_eth_send() local
2305 struct usb_request *req = dev->tx_req; in usb_eth_send()
2312 if (rndis_active(dev)) { in usb_eth_send()
2335 if (!dev->zlp && (length % dev->in_ep->maxpacket) == 0) in usb_eth_send()
2341 if (gadget_is_dualspeed(dev->gadget)) in usb_eth_send()
2342 req->no_interrupt = (dev->gadget->speed == USB_SPEED_HIGH) in usb_eth_send()
2343 ? ((dev->tx_qlen % qmult) != 0) : 0; in usb_eth_send()
2345 dev->tx_qlen = 1; in usb_eth_send()
2349 retval = usb_ep_queue(dev->in_ep, req, GFP_ATOMIC); in usb_eth_send()
2364 dev->stats.tx_dropped++; in usb_eth_send()
2371 struct eth_dev *dev = &priv->ethdev; in usb_eth_stop() local
2374 if (!dev->gadget) in usb_eth_stop()
2390 usb_gadget_disconnect(dev->gadget); in usb_eth_stop()
2393 if (dev->network_started) { in usb_eth_stop()
2395 dev->network_started = 0; in usb_eth_stop()
2399 static int usb_eth_recv(struct udevice *dev, int flags, uchar **packetp) in usb_eth_recv() argument
2401 struct ether_priv *priv = dev_get_priv(dev); in usb_eth_recv()
2404 dm_usb_gadget_handle_interrupts(dev->parent); in usb_eth_recv()
2419 static int usb_eth_free_pkt(struct udevice *dev, uchar *packet, in usb_eth_free_pkt() argument
2422 struct ether_priv *priv = dev_get_priv(dev); in usb_eth_free_pkt()
2458 static int usb_eth_probe(struct udevice *dev) in usb_eth_probe() argument
2460 struct ether_priv *priv = dev_get_priv(dev); in usb_eth_probe()
2461 struct eth_pdata *pdata = dev_get_plat(dev); in usb_eth_probe()
2463 priv->netdev = dev; in usb_eth_probe()
2505 static int usb_eth_remove(struct udevice *dev) in usb_eth_remove() argument
2507 struct ether_priv *priv = dev_get_priv(dev); in usb_eth_remove()
2514 static int usb_eth_unbind(struct udevice *dev) in usb_eth_unbind() argument
2516 udc_device_put(dev->parent); in usb_eth_unbind()