Lines Matching refs:dev

156 static inline int is_cdc(struct eth_dev *dev)  in is_cdc()  argument
163 return dev->cdc; /* depends on what hardware we found */ in is_cdc()
168 static inline int rndis_active(struct eth_dev *dev) in rndis_active() argument
171 return dev->rndis; in rndis_active()
177 #define subset_active(dev) (!is_cdc(dev) && !rndis_active(dev)) argument
178 #define cdc_active(dev) (is_cdc(dev) && !rndis_active(dev)) argument
923 static void eth_start(struct eth_dev *dev, gfp_t gfp_flags);
924 static int alloc_requests(struct eth_dev *dev, unsigned n, gfp_t gfp_flags);
927 set_ether_config(struct eth_dev *dev, gfp_t gfp_flags) in set_ether_config() argument
930 struct usb_gadget *gadget = dev->gadget; in set_ether_config()
934 if (!subset_active(dev) && dev->status_ep) { in set_ether_config()
935 dev->status = ep_desc(gadget, &hs_status_desc, in set_ether_config()
937 dev->status_ep->driver_data = dev; in set_ether_config()
939 result = usb_ep_enable(dev->status_ep, dev->status); in set_ether_config()
942 dev->status_ep->name, result); in set_ether_config()
948 dev->in = ep_desc(gadget, &hs_source_desc, &fs_source_desc); in set_ether_config()
949 dev->in_ep->driver_data = dev; in set_ether_config()
951 dev->out = ep_desc(gadget, &hs_sink_desc, &fs_sink_desc); in set_ether_config()
952 dev->out_ep->driver_data = dev; in set_ether_config()
963 if (!cdc_active(dev)) { in set_ether_config()
964 result = usb_ep_enable(dev->in_ep, dev->in); in set_ether_config()
967 dev->in_ep->name, result); in set_ether_config()
971 result = usb_ep_enable(dev->out_ep, dev->out); in set_ether_config()
974 dev->out_ep->name, result); in set_ether_config()
981 result = alloc_requests(dev, qlen(gadget), gfp_flags); in set_ether_config()
985 if (!subset_active(dev) && dev->status_ep) in set_ether_config()
986 (void) usb_ep_disable(dev->status_ep); in set_ether_config()
987 dev->status = NULL; in set_ether_config()
988 (void) usb_ep_disable(dev->in_ep); in set_ether_config()
989 (void) usb_ep_disable(dev->out_ep); in set_ether_config()
990 dev->in = NULL; in set_ether_config()
991 dev->out = NULL; in set_ether_config()
992 } else if (!cdc_active(dev)) { in set_ether_config()
997 eth_start(dev, GFP_ATOMIC); in set_ether_config()
1004 static void eth_reset_config(struct eth_dev *dev) in eth_reset_config() argument
1006 if (dev->config == 0) in eth_reset_config()
1011 rndis_uninit(dev->rndis_config); in eth_reset_config()
1018 if (dev->in) { in eth_reset_config()
1019 usb_ep_disable(dev->in_ep); in eth_reset_config()
1020 if (dev->tx_req) { in eth_reset_config()
1021 usb_ep_free_request(dev->in_ep, dev->tx_req); in eth_reset_config()
1022 dev->tx_req = NULL; in eth_reset_config()
1025 if (dev->out) { in eth_reset_config()
1026 usb_ep_disable(dev->out_ep); in eth_reset_config()
1027 if (dev->rx_req) { in eth_reset_config()
1028 usb_ep_free_request(dev->out_ep, dev->rx_req); in eth_reset_config()
1029 dev->rx_req = NULL; in eth_reset_config()
1032 if (dev->status) in eth_reset_config()
1033 usb_ep_disable(dev->status_ep); in eth_reset_config()
1035 dev->rndis = 0; in eth_reset_config()
1036 dev->cdc_filter = 0; in eth_reset_config()
1037 dev->config = 0; in eth_reset_config()
1044 static int eth_set_config(struct eth_dev *dev, unsigned number, in eth_set_config() argument
1048 struct usb_gadget *gadget = dev->gadget; in eth_set_config()
1051 && dev->config in eth_set_config()
1052 && dev->tx_qlen != 0) { in eth_set_config()
1057 eth_reset_config(dev); in eth_set_config()
1061 result = set_ether_config(dev, gfp_flags); in eth_set_config()
1065 dev->rndis = 1; in eth_set_config()
1066 result = set_ether_config(dev, gfp_flags); in eth_set_config()
1078 eth_reset_config(dev); in eth_set_config()
1079 usb_gadget_vbus_draw(dev->gadget, in eth_set_config()
1080 gadget_is_otg(dev->gadget) ? 8 : 100); in eth_set_config()
1086 usb_gadget_vbus_draw(dev->gadget, power); in eth_set_config()
1099 dev->config = number; in eth_set_config()
1102 rndis_active(dev) in eth_set_config()
1104 : (cdc_active(dev) in eth_set_config()
1126 struct eth_dev *dev = ep->driver_data; in eth_status_complete() local
1140 data[0] = data[1] = cpu_to_le32(BITRATE(dev->gadget)); in eth_status_complete()
1152 dev->network_started = 1; in eth_status_complete()
1159 static void issue_start_status(struct eth_dev *dev) in issue_start_status() argument
1161 struct usb_request *req = dev->stat_req; in issue_start_status()
1175 usb_ep_disable(dev->status_ep); in issue_start_status()
1176 usb_ep_enable(dev->status_ep, dev->status); in issue_start_status()
1191 req->context = dev; in issue_start_status()
1193 value = usb_ep_queue(dev->status_ep, req, GFP_ATOMIC); in issue_start_status()
1222 struct eth_dev *dev = ep->driver_data; in rndis_command_complete() local
1226 status = rndis_msg_parser(dev->rndis_config, (u8 *) req->buf); in rndis_command_complete()
1245 struct eth_dev *dev = get_gadget_data(gadget); in eth_setup() local
1246 struct usb_request *req = dev->req; in eth_setup()
1310 value = eth_set_config(dev, wValue, GFP_ATOMIC); in eth_setup()
1315 *(u8 *)req->buf = dev->config; in eth_setup()
1321 || !dev->config in eth_setup()
1324 if (!cdc_active(dev) && wIndex != 0) in eth_setup()
1332 value = eth_set_config(dev, DEV_CONFIG_VALUE, in eth_setup()
1340 dev->network_started = 1; in eth_setup()
1350 if (dev->status) { in eth_setup()
1351 usb_ep_disable(dev->status_ep); in eth_setup()
1352 usb_ep_enable(dev->status_ep, dev->status); in eth_setup()
1360 usb_ep_disable(dev->in_ep); in eth_setup()
1361 usb_ep_disable(dev->out_ep); in eth_setup()
1369 if (!cdc_active(dev)) in eth_setup()
1371 usb_ep_enable(dev->in_ep, dev->in); in eth_setup()
1372 usb_ep_enable(dev->out_ep, dev->out); in eth_setup()
1373 dev->cdc_filter = DEFAULT_FILTER; in eth_setup()
1374 if (dev->status) in eth_setup()
1375 issue_start_status(dev); in eth_setup()
1376 eth_start(dev, GFP_ATOMIC); in eth_setup()
1393 || !dev->config in eth_setup()
1396 if (!(cdc_active(dev) || rndis_active(dev)) && wIndex != 0) in eth_setup()
1400 if (rndis_active(dev) || wIndex != 1) in eth_setup()
1417 || !cdc_active(dev) in eth_setup()
1422 dev->cdc_filter = wValue; in eth_setup()
1443 || !rndis_active(dev) in eth_setup()
1458 && rndis_active(dev) in eth_setup()
1467 buf = rndis_get_next_response(dev->rndis_config, &n); in eth_setup()
1471 rndis_free_response(dev->rndis_config, buf); in eth_setup()
1507 static int rx_submit(struct eth_dev *dev, struct usb_request *req, in rx_submit() argument
1530 size = (ETHER_HDR_SIZE + dev->mtu + RX_EXTRA); in rx_submit()
1531 size += dev->out_ep->maxpacket - 1; in rx_submit()
1532 if (rndis_active(dev)) in rx_submit()
1534 size -= size % dev->out_ep->maxpacket; in rx_submit()
1546 retval = usb_ep_queue(dev->out_ep, req, gfp_flags); in rx_submit()
1556 struct eth_dev *dev = ep->driver_data; in rx_complete() local
1562 if (rndis_active(dev)) { in rx_complete()
1572 dev->stats.rx_errors++; in rx_complete()
1573 dev->stats.rx_length_errors++; in rx_complete()
1578 dev->stats.rx_packets++; in rx_complete()
1579 dev->stats.rx_bytes += req->length; in rx_complete()
1591 dev->stats.rx_over_errors++; in rx_complete()
1594 dev->stats.rx_errors++; in rx_complete()
1601 static int alloc_requests(struct eth_dev *dev, unsigned n, gfp_t gfp_flags) in alloc_requests() argument
1604 dev->tx_req = usb_ep_alloc_request(dev->in_ep, 0); in alloc_requests()
1606 if (!dev->tx_req) in alloc_requests()
1609 dev->rx_req = usb_ep_alloc_request(dev->out_ep, 0); in alloc_requests()
1611 if (!dev->rx_req) in alloc_requests()
1617 usb_ep_free_request(dev->in_ep, dev->tx_req); in alloc_requests()
1625 struct eth_dev *dev = ep->driver_data; in tx_complete() local
1630 dev->stats.tx_errors++; in tx_complete()
1637 dev->stats.tx_bytes += req->length; in tx_complete()
1639 dev->stats.tx_packets++; in tx_complete()
1644 static inline int eth_is_promisc(struct eth_dev *dev) in eth_is_promisc() argument
1647 if (subset_active(dev)) in eth_is_promisc()
1649 return dev->cdc_filter & USB_CDC_PACKET_TYPE_PROMISCUOUS; in eth_is_promisc()
1655 struct eth_dev *dev = netdev_priv(net);
1662 if (!eth_is_promisc (dev)) {
1675 if (!(dev->cdc_filter & type)) {
1683 spin_lock_irqsave(&dev->req_lock, flags);
1689 if (list_empty(&dev->tx_reqs)) {
1690 spin_unlock_irqrestore(&dev->req_lock, flags);
1694 req = container_of (dev->tx_reqs.next, struct usb_request, list);
1698 if (list_empty (&dev->tx_reqs))
1700 spin_unlock_irqrestore(&dev->req_lock, flags);
1706 if (rndis_active(dev)) {
1728 if (!dev->zlp && (length % dev->in_ep->maxpacket) == 0)
1734 if (gadget_is_dualspeed(dev->gadget))
1735 req->no_interrupt = (dev->gadget->speed == USB_SPEED_HIGH)
1736 ? ((atomic_read(&dev->tx_qlen) % qmult) != 0)
1739 retval = usb_ep_queue (dev->in_ep, req, GFP_ATOMIC);
1742 DEBUG (dev, "tx queue err %d\n", retval);
1746 atomic_inc (&dev->tx_qlen);
1751 dev->stats.tx_dropped++;
1753 spin_lock_irqsave(&dev->req_lock, flags);
1754 if (list_empty (&dev->tx_reqs))
1756 list_add (&req->list, &dev->tx_reqs);
1757 spin_unlock_irqrestore(&dev->req_lock, flags);
1767 struct eth_dev *dev = get_gadget_data(gadget); in eth_unbind() local
1770 rndis_deregister(dev->rndis_config); in eth_unbind()
1774 if (dev->req) { in eth_unbind()
1775 usb_ep_free_request(gadget->ep0, dev->req); in eth_unbind()
1776 dev->req = NULL; in eth_unbind()
1778 if (dev->stat_req) { in eth_unbind()
1779 usb_ep_free_request(dev->status_ep, dev->stat_req); in eth_unbind()
1780 dev->stat_req = NULL; in eth_unbind()
1783 if (dev->tx_req) { in eth_unbind()
1784 usb_ep_free_request(dev->in_ep, dev->tx_req); in eth_unbind()
1785 dev->tx_req = NULL; in eth_unbind()
1788 if (dev->rx_req) { in eth_unbind()
1789 usb_ep_free_request(dev->out_ep, dev->rx_req); in eth_unbind()
1790 dev->rx_req = NULL; in eth_unbind()
1796 dev->gadget = NULL; in eth_unbind()
1833 struct eth_dev *dev = ep->driver_data; in rndis_control_ack_complete() local
1840 if (!dev->network_started) { in rndis_control_ack_complete()
1841 if (rndis_get_state(dev->rndis_config) in rndis_control_ack_complete()
1843 dev->network_started = 1; in rndis_control_ack_complete()
1850 if (req != dev->stat_req) in rndis_control_ack_complete()
1863 struct eth_dev *dev = &priv->ethdev; in rndis_control_ack() local
1865 struct usb_request *resp = dev->stat_req; in rndis_control_ack()
1868 if (!dev->status) { in rndis_control_ack()
1875 resp = usb_ep_alloc_request(dev->status_ep, GFP_ATOMIC); in rndis_control_ack()
1887 resp->context = dev; in rndis_control_ack()
1892 length = usb_ep_queue(dev->status_ep, resp, GFP_ATOMIC); in rndis_control_ack()
1895 rndis_control_ack_complete(dev->status_ep, resp); in rndis_control_ack()
1907 static void eth_start(struct eth_dev *dev, gfp_t gfp_flags) in eth_start() argument
1909 if (rndis_active(dev)) { in eth_start()
1910 rndis_set_param_medium(dev->rndis_config, in eth_start()
1912 BITRATE(dev->gadget)/100); in eth_start()
1913 rndis_signal_connect(dev->rndis_config); in eth_start()
1917 static int eth_stop(struct eth_dev *dev) in eth_stop() argument
1924 if (rndis_active(dev)) { in eth_stop()
1925 rndis_set_param_medium(dev->rndis_config, NDIS_MEDIUM_802_3, 0); in eth_stop()
1926 rndis_signal_disconnect(dev->rndis_config); in eth_stop()
1935 rndis_uninit(dev->rndis_config); in eth_stop()
1936 dev->rndis = 0; in eth_stop()
2004 struct eth_dev *dev = &l_priv->ethdev; in eth_bind() local
2201 dev->net = &l_priv->netdev; in eth_bind()
2203 dev->net = l_priv->netdev; in eth_bind()
2206 dev->cdc = cdc; in eth_bind()
2207 dev->zlp = zlp; in eth_bind()
2209 dev->in_ep = in_ep; in eth_bind()
2210 dev->out_ep = out_ep; in eth_bind()
2211 dev->status_ep = status_ep; in eth_bind()
2222 get_ether_addr(dev_addr, dev->net->enetaddr); in eth_bind()
2223 memcpy(tmp, dev->net->enetaddr, sizeof(dev->net->enetaddr)); in eth_bind()
2229 get_ether_addr(host_addr, dev->host_mac); in eth_bind()
2232 dev->host_mac[0], dev->host_mac[1], in eth_bind()
2233 dev->host_mac[2], dev->host_mac[3], in eth_bind()
2234 dev->host_mac[4], dev->host_mac[5]); in eth_bind()
2248 dev->mtu = PKTSIZE_ALIGN; /* RNDIS does not like this, only 1514, TODO*/ in eth_bind()
2251 dev->req = usb_ep_alloc_request(gadget->ep0, GFP_KERNEL); in eth_bind()
2252 if (!dev->req) in eth_bind()
2254 dev->req->buf = control_req; in eth_bind()
2255 dev->req->complete = eth_setup_complete; in eth_bind()
2259 if (dev->status_ep) { in eth_bind()
2260 dev->stat_req = usb_ep_alloc_request(dev->status_ep, in eth_bind()
2262 if (!dev->stat_req) { in eth_bind()
2263 usb_ep_free_request(dev->status_ep, dev->req); in eth_bind()
2267 dev->stat_req->buf = status_req; in eth_bind()
2268 dev->stat_req->context = NULL; in eth_bind()
2273 dev->gadget = gadget; in eth_bind()
2274 set_gadget_data(gadget, dev); in eth_bind()
2275 gadget->ep0->driver_data = dev; in eth_bind()
2289 printf("MAC %pM\n", dev->net->enetaddr); in eth_bind()
2296 dev->host_mac[0], dev->host_mac[1], in eth_bind()
2297 dev->host_mac[2], dev->host_mac[3], in eth_bind()
2298 dev->host_mac[4], dev->host_mac[5]); in eth_bind()
2305 dev->rndis_config = rndis_register(rndis_control_ack); in eth_bind()
2306 if (dev->rndis_config < 0) { in eth_bind()
2315 rndis_set_host_mac(dev->rndis_config, dev->host_mac); in eth_bind()
2316 if (rndis_set_param_dev(dev->rndis_config, dev->net, dev->mtu, in eth_bind()
2317 &dev->stats, &dev->cdc_filter)) in eth_bind()
2319 if (rndis_set_param_vendor(dev->rndis_config, vendorID, in eth_bind()
2322 if (rndis_set_param_medium(dev->rndis_config, in eth_bind()
2340 struct eth_dev *dev = &priv->ethdev; in _usb_eth_init() local
2386 dev->network_started = 0; in _usb_eth_init()
2391 gadget = dev->gadget; in _usb_eth_init()
2398 while (!dev->network_started) { in _usb_eth_init()
2408 rx_submit(dev, dev->rx_req, 0); in _usb_eth_init()
2419 struct eth_dev *dev = &priv->ethdev; in _usb_eth_send() local
2420 struct usb_request *req = dev->tx_req; in _usb_eth_send()
2427 if (rndis_active(dev)) { in _usb_eth_send()
2450 if (!dev->zlp && (length % dev->in_ep->maxpacket) == 0) in _usb_eth_send()
2456 if (gadget_is_dualspeed(dev->gadget)) in _usb_eth_send()
2457 req->no_interrupt = (dev->gadget->speed == USB_SPEED_HIGH) in _usb_eth_send()
2458 ? ((dev->tx_qlen % qmult) != 0) : 0; in _usb_eth_send()
2460 dev->tx_qlen = 1; in _usb_eth_send()
2464 retval = usb_ep_queue(dev->in_ep, req, GFP_ATOMIC); in _usb_eth_send()
2480 dev->stats.tx_dropped++; in _usb_eth_send()
2493 struct eth_dev *dev = &priv->ethdev; in _usb_eth_halt() local
2496 if (!dev->gadget) in _usb_eth_halt()
2510 eth_stop(dev); in _usb_eth_halt()
2512 usb_gadget_disconnect(dev->gadget); in _usb_eth_halt()
2515 if (dev->network_started) { in _usb_eth_halt()
2517 dev->network_started = 0; in _usb_eth_halt()
2542 struct eth_dev *dev = &priv->ethdev; in usb_eth_recv() local
2554 if (dev->rx_req) { in usb_eth_recv()
2556 dev->rx_req->length); in usb_eth_recv()
2561 rx_submit(dev, dev->rx_req, 0); in usb_eth_recv()
2589 static int usb_eth_start(struct udevice *dev) in usb_eth_start() argument
2591 struct ether_priv *priv = dev_get_priv(dev); in usb_eth_start()
2596 static int usb_eth_send(struct udevice *dev, void *packet, int length) in usb_eth_send() argument
2598 struct ether_priv *priv = dev_get_priv(dev); in usb_eth_send()
2603 static int usb_eth_recv(struct udevice *dev, int flags, uchar **packetp) in usb_eth_recv() argument
2605 struct ether_priv *priv = dev_get_priv(dev); in usb_eth_recv()
2628 static int usb_eth_free_pkt(struct udevice *dev, uchar *packet, in usb_eth_free_pkt() argument
2631 struct ether_priv *priv = dev_get_priv(dev); in usb_eth_free_pkt()
2639 static void usb_eth_stop(struct udevice *dev) in usb_eth_stop() argument
2641 struct ether_priv *priv = dev_get_priv(dev); in usb_eth_stop()
2646 static int usb_eth_probe(struct udevice *dev) in usb_eth_probe() argument
2648 struct ether_priv *priv = dev_get_priv(dev); in usb_eth_probe()
2649 struct eth_pdata *pdata = dev_get_platdata(dev); in usb_eth_probe()
2651 priv->netdev = dev; in usb_eth_probe()
2670 struct udevice *dev; in usb_ether_init() local
2680 ret = device_bind_driver(usb_dev, "usb_ether", "usb_ether", &dev); in usb_ether_init()
2681 if (!dev || ret) { in usb_ether_init()