Lines Matching refs:priv
191 static int rndis_transmit(FAR struct rndis_dev_s *priv);
192 static int rndis_txpoll(FAR struct rndis_dev_s *priv);
206 static int usbclass_setconfig(FAR struct rndis_dev_s *priv, uint8_t config);
207 static void usbclass_resetconfig(FAR struct rndis_dev_s *priv);
509 * priv: pointer to RNDIS device driver structure
516 static int rndis_submit_rdreq(FAR struct rndis_dev_s *priv)
520 if (!priv->rdreq_submitted && !priv->rx_blocked)
522 priv->rdreq->len = CONFIG_RNDIS_BULKOUT_REQLEN;
523 priv->epbulkout->handle_req = priv->rdreq;
525 ret = EP_SUBMIT(priv->epbulkout, priv->rdreq);
528 usb_err("%s %d, len:%u\n", __FUNCTION__, __LINE__, priv->rdreq->len);
532 priv->rdreq_submitted = true;
546 * priv: pointer to RNDIS device driver structure
550 static void rndis_cancel_rdreq(FAR struct rndis_dev_s *priv)
552 if (priv->rdreq_submitted)
554 EP_CANCEL(priv->epbulkout, priv->rdreq);
555 priv->rdreq_submitted = false;
566 * priv: pointer to RNDIS device driver structure
570 static void rndis_block_rx(FAR struct rndis_dev_s *priv)
572 priv->rx_blocked = true;
573 rndis_cancel_rdreq(priv);
583 * priv: pointer to RNDIS device driver structure
590 static void rndis_unblock_rx(FAR struct rndis_dev_s *priv)
592 priv->rx_blocked = false;
603 * priv: pointer to RNDIS device driver structure
613 static FAR struct usbdev_req_s *rndis_allocwrreq(FAR struct rndis_dev_s *priv)
617 req = usbclass_allocreq(priv->epbulkin, CONFIG_RNDIS_BULKIN_REQLEN);
633 * priv: pointer to RNDIS device driver structure
643 static bool rndis_hasfreereqs(FAR struct rndis_dev_s *priv)
645 return list_empty(&priv->reqlist) ? true : false;
655 * priv: pointer to RNDIS device driver structure
663 static void rndis_freewrreq(FAR struct rndis_dev_s *priv,
668 usbclass_freereq(priv->epbulkin, req);
669 rndis_submit_rdreq(priv);
679 * priv: pointer to RNDIS device driver structure
689 static bool rndis_allocnetreq(FAR struct rndis_dev_s *priv)
693 if (rndis_hasfreereqs(priv))
699 if (atomic_read(&priv->tx_transferring))
705 priv->net_req = list_first_entry(&priv->reqlist, struct usbdev_req_s, list);
706 list_del_init(&priv->net_req->list);
708 atomic_set(&priv->tx_transferring, 1);
710 return priv->net_req != NULL;
720 * priv: pointer to RNDIS device driver structure
727 static void rndis_sendnetreq(FAR struct rndis_dev_s *priv)
731 DEBUGASSERT(priv->net_req != NULL);
733 priv->net_req->priv = priv->net_req;
734 priv->epbulkin->handle_req = priv->net_req;
735 EP_SUBMIT(priv->epbulkin, priv->net_req);
737 priv->net_req = NULL;
749 * priv: pointer to RNDIS device driver structure
756 static void rndis_freenetreq(FAR struct rndis_dev_s *priv)
760 rndis_freewrreq(priv, priv->net_req);
761 priv->net_req = NULL;
773 * priv: pointer to RNDIS device driver structure
783 static bool rndis_allocrxreq(FAR struct rndis_dev_s *priv)
785 if (priv->rx_req != NULL)
790 priv->rx_req = rndis_allocwrreq(priv);
791 return priv->rx_req != NULL;
801 * priv: pointer to RNDIS device driver structure
808 static void rndis_giverxreq(FAR struct rndis_dev_s *priv)
810 DEBUGASSERT(priv->rx_req != NULL);
811 DEBUGASSERT(priv->net_req == NULL);
813 priv->net_req = priv->rx_req;
814 priv->rx_req = NULL;
824 * priv: pointer to RNDIS device driver structure
835 static uint16_t rndis_fillrequest(FAR struct rndis_dev_s *priv,
871 FAR struct rndis_dev_s *priv = (FAR struct rndis_dev_s *)arg->data;
876 rndis_giverxreq(priv);
879 if (priv->net_req == NULL)
884 eth_rx(&priv->netdev, priv->net_req);
886 priv->current_rx_datagram_size = 0;
887 rndis_unblock_rx(priv);
889 rndis_freenetreq(priv);
908 static int rndis_txpoll(FAR struct rndis_dev_s *priv)
912 if (!priv->connected)
917 if (priv->net_req->len > 0)
919 ret = rndis_transmit(priv);
937 static int rndis_transmit(FAR struct rndis_dev_s *priv)
941 rndis_fillrequest(priv, priv->net_req);
942 rndis_sendnetreq(priv);
957 FAR struct rndis_dev_s *priv = (FAR struct rndis_dev_s *)arg->data;
961 if (rndis_allocnetreq(priv))
963 rndis_txpoll(priv);
979 static int rndis_txavail(FAR struct rndis_dev_s *priv)
983 if (WORK_AVAILABLE(&priv->pollwork))
985 ret = queue_work(priv->wq, &priv->pollwork);
1005 static inline int rndis_recvpacket(FAR struct rndis_dev_s *priv,
1010 if (!rndis_allocrxreq(priv))
1015 if (!priv->connected)
1020 if (!priv->current_rx_datagram_size)
1033 priv->current_rx_received = reqlen;
1034 priv->current_rx_datagram_size = msg->datalen;
1035 priv->current_rx_msglen = msg->msglen;
1042 if ((priv->current_rx_msglen % priv->epbulkout->maxpacket) == 0)
1044 priv->current_rx_msglen += 1;
1051 priv->current_rx_datagram_offset = msg->dataoffset + 8;
1052 if (priv->current_rx_datagram_offset < reqlen)
1054 ret = memcpy_s(&priv->rx_req->buf[RNDIS_PACKET_HDR_SIZE],
1056 &reqbuf[priv->current_rx_datagram_offset],
1057 reqlen - priv->current_rx_datagram_offset);
1073 if (priv->current_rx_received >= priv->current_rx_datagram_offset &&
1074 priv->current_rx_received <= priv->current_rx_datagram_size +
1075 priv->current_rx_datagram_offset)
1077 size_t index = priv->current_rx_received - priv->current_rx_datagram_offset;
1078 size_t copysize = min(reqlen, priv->current_rx_datagram_size - index);
1084 ret = memcpy_s(&priv->rx_req->buf[RNDIS_PACKET_HDR_SIZE + index],
1098 priv->current_rx_received += reqlen;
1101 if (priv->current_rx_received >= priv->current_rx_msglen)
1105 if (priv->current_rx_datagram_size > (CONFIG_NET_ETH_MTU + 4) ||
1106 priv->current_rx_datagram_size <= (sizeof(struct eth_hdr) + 4))
1108 priv->current_rx_datagram_size = 0;
1112 priv->rx_req->xfrd = priv->current_rx_received;
1114 ret = queue_work(priv->wq, &priv->rxwork);
1118 rndis_block_rx(priv);
1119 priv->rndis_host_tx_count++;
1134 * priv: pointer to RNDIS device driver structure
1141 static bool rndis_prepare_response(FAR struct rndis_dev_s *priv, size_t size,
1145 priv->resp_buf = malloc(size);
1146 if (!priv->resp_buf)
1152 hdr = (FAR struct rndis_response_header *)priv->resp_buf;
1159 priv->ctrlreq_has_encap_response = true;
1172 * priv: pointer to RNDIS device driver structure
1179 static int rndis_send_encapsulated_response(FAR struct rndis_dev_s *priv)
1182 (FAR struct rndis_notification *)priv->epintin_req->buf;
1186 priv->epintin_req->len = sizeof(struct rndis_notification);
1187 priv->epintin->handle_req = priv->epintin_req;
1189 EP_SUBMIT(priv->epintin, priv->epintin_req);
1210 FAR struct rndis_dev_s *priv = (struct rndis_dev_s *)ctrlreq->priv;
1225 resp_flag = rndis_prepare_response(priv, sizeof(struct rndis_initialize_cmplt), cmd_hdr);
1231 resp = (FAR struct rndis_initialize_cmplt *)priv->resp_buf;
1241 rndis_send_encapsulated_response(priv);
1248 priv->connected = false;
1265 resp_flag = rndis_prepare_response(priv, max_reply_size, cmd_hdr);
1272 (FAR struct rndis_query_cmplt *)priv->resp_buf;
1309 resp->buffer[0] = priv->rndis_packet_filter;
1313 resp->buffer[0] = priv->rndis_host_tx_count;
1317 resp->buffer[0] = priv->rndis_host_rx_count;
1323 priv->host_mac_address, 6);
1356 rndis_send_encapsulated_response(priv);
1373 resp_flag = rndis_prepare_response(priv, sizeof(struct rndis_response_header),
1381 resp = (FAR struct rndis_response_header *)priv->resp_buf;
1385 priv->rndis_packet_filter = req->buffer[0];
1390 priv->connected = false;
1395 priv->connected = true;
1396 link_status_change(priv);
1408 rndis_send_encapsulated_response(priv);
1417 resp_flag = rndis_prepare_response(priv, sizeof(struct rndis_reset_cmplt),
1424 resp = (FAR struct rndis_reset_cmplt *)priv->resp_buf;
1426 priv->connected = false;
1428 rndis_send_encapsulated_response(priv);
1435 resp_flag = rndis_prepare_response(priv, sizeof(struct rndis_response_header),
1442 rndis_send_encapsulated_response(priv);
1462 FAR struct rndis_dev_s *priv;
1469 if (!ep || !ep->priv || !req)
1477 priv = (FAR struct rndis_dev_s *)ep->priv;
1484 priv->rdreq_submitted = false;
1489 ret = rndis_recvpacket(priv, req->buf, (uint16_t)req->xfrd);
1503 rndis_submit_rdreq(priv);
1521 FAR struct rndis_dev_s *priv;
1528 if (!ep || !ep->priv || !req || !req->priv)
1536 priv = (FAR struct rndis_dev_s *)ep->priv;
1537 req_wr = (FAR struct usbdev_req_s *)req->priv;
1546 atomic_set(&priv->tx_transferring, 0);
1547 priv->rndis_host_rx_count++;
1557 rndis_freewrreq(priv, req_wr);
1558 priv->epbulkin->handle_req = NULL;
1559 if (!rndis_hasfreereqs(priv))
1561 (void)rndis_txavail(priv);
1586 struct rndis_dev_s *priv = (FAR struct rndis_dev_s *)req->priv;
1587 priv->ctrlreq_has_encap_response = false;
1670 FAR struct rndis_dev_s *priv = ((FAR struct rndis_driver_s *)driver)->dev;
1679 priv->usbdev = dev;
1681 cdev = dev->ep0->priv;
1697 priv->ctrlreq = cdev->ctrlreq;
1698 if (priv->ctrlreq == NULL)
1711 priv->epintin = DEV_ALLOCEP(dev, g_rndis_hs_func_desc.nepd.bEndpointAddress,
1713 if (!priv->epintin)
1718 RNDIS_MKEPINTIN(devinfo) = priv->epintin->eplog;
1719 priv->epintin->priv = priv;
1720 priv->epintin_enable = false;
1722 priv->epintin_req = usbclass_allocreq(priv->epintin, sizeof(struct rndis_notification));
1723 if (priv->epintin_req == NULL)
1729 priv->epintin_req->callback = usbclass_epintin_complete;
1731 priv->epbulkin = DEV_ALLOCEP(dev, g_rndis_hs_func_desc.iepd.bEndpointAddress,
1733 if (!priv->epbulkin)
1738 RNDIS_MKEPBULKIN(devinfo) = priv->epbulkin->eplog;
1739 priv->epbulkin->handle_req = NULL;
1740 priv->epbulkin->priv = priv;
1741 priv->epbulkin_enable = false;
1743 priv->epbulkout = DEV_ALLOCEP(dev, g_rndis_hs_func_desc.oepd.bEndpointAddress,
1745 if (!priv->epbulkout)
1750 RNDIS_MKEPBULKOUT(devinfo) = priv->epbulkout->eplog;
1751 priv->epbulkout->priv = priv;
1752 priv->epbulkout_enable = false;
1762 priv->rdreq = usbclass_allocreq(priv->epbulkout, reqlen);
1763 if (priv->rdreq == NULL)
1769 priv->rdreq->callback = rndis_rdcomplete;
1784 INIT_WORK(&priv->rxwork, rndis_rxdispatch);
1785 priv->rxwork.data = (atomic_long_t)priv;
1786 INIT_WORK(&priv->pollwork, rndis_txavail_work);
1787 priv->pollwork.data = (atomic_long_t)priv;
1788 priv->wq = create_workqueue("rndis workqueue");
1789 if (!priv->wq)
1795 priv->connected = false;
1796 netdev_register(&priv->netdev);
1798 link_status_check_init(priv);
1821 FAR struct rndis_dev_s *priv;
1832 priv = ((FAR struct rndis_driver_s *)driver)->dev;
1835 if (!priv)
1843 if (priv != NULL)
1845 destroy_workqueue(priv->wq);
1846 priv->wq = NULL;
1855 usbclass_resetconfig(priv);
1858 netdev_unregister(&priv->netdev);
1860 link_status_check_deinit(priv);
1864 if (priv->epbulkin)
1866 DEV_FREEEP(dev, priv->epbulkin);
1867 priv->epbulkin = NULL;
1872 if (priv->ctrlreq != NULL)
1874 priv->ctrlreq = NULL;
1877 if (priv->epintin_req != NULL)
1879 usbclass_freereq(priv->epintin, priv->epintin_req);
1880 priv->epintin_req = NULL;
1885 if (priv->epintin)
1887 DEV_FREEEP(dev, priv->epintin);
1888 priv->epintin = NULL;
1895 if (priv->rdreq)
1897 usbclass_freereq(priv->epbulkout, priv->rdreq);
1898 priv->rdreq = NULL;
1903 if (priv->epbulkout)
1905 DEV_FREEEP(dev, priv->epbulkout);
1906 priv->epbulkout = NULL;
1927 FAR struct rndis_dev_s *priv;
1945 priv = ((FAR struct rndis_driver_s *)driver)->dev;
1948 if (!priv || !priv->ctrlreq || !priv->resp_buf)
1953 ctrlreq = priv->ctrlreq;
1975 return usbclass_setconfig(priv, value);
1996 ctrlreq->priv = priv;
2001 if (!priv->ctrlreq_has_encap_response)
2009 (FAR struct rndis_response_header *)priv->resp_buf;
2015 ret = memcpy_s(ctrlreq->buf, hdr->msglen, priv->resp_buf, hdr->msglen);
2019 free(priv->resp_buf);
2020 priv->resp_buf = NULL;
2025 ctrlreq->priv = priv;
2026 free(priv->resp_buf);
2027 priv->resp_buf = NULL;
2070 FAR struct rndis_dev_s *priv;
2081 priv = ((FAR struct rndis_driver_s *)driver)->dev;
2084 if (!priv)
2092 usbclass_resetconfig(priv);
2109 static void usbclass_resetconfig(FAR struct rndis_dev_s *priv)
2114 link_status_change(priv);
2120 if (priv->epintin_enable == true)
2122 EP_DISABLE(priv->epintin);
2123 priv->epintin_enable = false;
2125 if (priv->epbulkin_enable == true)
2127 EP_DISABLE(priv->epbulkin);
2128 priv->epbulkin_enable = false;
2130 if (priv->epbulkout_enable == true)
2132 EP_DISABLE(priv->epbulkout);
2133 priv->epbulkout_enable = false;
2140 if (priv->config != RNDIS_CONFIGIDNONE)
2144 priv->config = RNDIS_CONFIGIDNONE;
2146 priv->connected = false;
2148 if (priv->resp_buf != NULL)
2150 free(priv->resp_buf);
2151 priv->resp_buf = NULL;
2158 req = priv->epbulkin->handle_req;
2161 usbclass_freereq(priv->epbulkin, req);
2162 priv->epbulkin->handle_req = NULL;
2165 if (priv->net_req)
2167 usbclass_freereq(priv->epbulkout, priv->net_req);
2168 priv->net_req = NULL;
2171 if (priv->rx_req)
2173 usbclass_freereq(priv->epbulkout, priv->rx_req);
2174 priv->rx_req = NULL;
2177 while (!list_empty(&priv->reqlist))
2179 req = list_first_entry(&priv->reqlist, struct usbdev_req_s, list);
2182 if (req->priv != NULL)
2184 req->priv = NULL;
2186 usbclass_freereq(priv->epbulkin, req);
2188 atomic_set(&priv->tx_transferring, 0);
2202 static int usbclass_setconfig(FAR struct rndis_dev_s *priv, uint8_t config)
2208 if (priv == NULL)
2214 if (config == priv->config)
2223 usbclass_resetconfig(priv);
2238 dev = priv->usbdev;
2242 ret = EP_CONFIGURE(priv->epintin, &g_rndis_hs_func_desc.nepd, false);
2248 priv->epintin->priv = priv;
2249 priv->epintin_enable = true;
2254 ret = EP_CONFIGURE(priv->epbulkin, &g_rndis_hs_func_desc.iepd, false);
2260 priv->epbulkin->priv = priv;
2261 priv->epbulkin_enable = true;
2266 ret = EP_CONFIGURE(priv->epbulkout, &g_rndis_hs_func_desc.oepd, true);
2272 priv->epbulkout->priv = priv;
2273 priv->epbulkout_enable = true;
2277 priv->rdreq->callback = rndis_rdcomplete;
2279 ret = rndis_submit_rdreq(priv);
2287 priv->config = config;
2289 link_status_change(priv);
2293 usbclass_resetconfig(priv);
2316 req->priv = req;
2351 FAR struct rndis_dev_s *priv;
2367 priv = &alloc->dev;
2372 (void)memset_s(priv, sizeof(struct rndis_dev_s), 0, sizeof(struct rndis_dev_s));
2373 INIT_LIST_HEAD(&priv->reqlist);
2374 eth_random_addr(priv->host_mac_address);
2376 (void)memset_s(&priv->netdev, sizeof(struct los_eth_driver), 0, sizeof(struct los_eth_driver));
2377 priv->netdev.driver_context = priv;
2383 drvr->dev = priv;
2392 struct rndis_dev_s *priv;
2400 priv = drvr->dev;
2401 if (priv == NULL)