Lines Matching full:qca
65 struct qcauart *qca = serdev_device_get_drvdata(serdev); in qca_tty_receive() local
66 struct net_device *netdev = qca->net_dev; in qca_tty_receive()
70 if (!qca->rx_skb) { in qca_tty_receive()
71 qca->rx_skb = netdev_alloc_skb_ip_align(netdev, in qca_tty_receive()
74 if (!qca->rx_skb) { in qca_tty_receive()
84 retcode = qcafrm_fsm_decode(&qca->frm_handle, in qca_tty_receive()
85 qca->rx_skb->data, in qca_tty_receive()
86 skb_tailroom(qca->rx_skb), in qca_tty_receive()
106 skb_put(qca->rx_skb, retcode); in qca_tty_receive()
107 qca->rx_skb->protocol = eth_type_trans( in qca_tty_receive()
108 qca->rx_skb, qca->rx_skb->dev); in qca_tty_receive()
109 skb_checksum_none_assert(qca->rx_skb); in qca_tty_receive()
110 netif_rx(qca->rx_skb); in qca_tty_receive()
111 qca->rx_skb = netdev_alloc_skb_ip_align(netdev, in qca_tty_receive()
114 if (!qca->rx_skb) { in qca_tty_receive()
128 struct qcauart *qca = container_of(work, struct qcauart, tx_work); in qcauart_transmit() local
129 struct net_device_stats *n_stats = &qca->net_dev->stats; in qcauart_transmit()
132 spin_lock_bh(&qca->lock); in qcauart_transmit()
135 if (!netif_running(qca->net_dev)) { in qcauart_transmit()
136 spin_unlock_bh(&qca->lock); in qcauart_transmit()
140 if (qca->tx_left <= 0) { in qcauart_transmit()
145 spin_unlock_bh(&qca->lock); in qcauart_transmit()
146 netif_wake_queue(qca->net_dev); in qcauart_transmit()
150 written = serdev_device_write_buf(qca->serdev, qca->tx_head, in qcauart_transmit()
151 qca->tx_left); in qcauart_transmit()
153 qca->tx_left -= written; in qcauart_transmit()
154 qca->tx_head += written; in qcauart_transmit()
156 spin_unlock_bh(&qca->lock); in qcauart_transmit()
164 struct qcauart *qca = serdev_device_get_drvdata(serdev); in qca_tty_wakeup() local
166 schedule_work(&qca->tx_work); in qca_tty_wakeup()
176 struct qcauart *qca = netdev_priv(dev); in qcauart_netdev_open() local
178 netif_start_queue(qca->net_dev); in qcauart_netdev_open()
185 struct qcauart *qca = netdev_priv(dev); in qcauart_netdev_close() local
188 flush_work(&qca->tx_work); in qcauart_netdev_close()
190 spin_lock_bh(&qca->lock); in qcauart_netdev_close()
191 qca->tx_left = 0; in qcauart_netdev_close()
192 spin_unlock_bh(&qca->lock); in qcauart_netdev_close()
201 struct qcauart *qca = netdev_priv(dev); in qcauart_netdev_xmit() local
206 spin_lock(&qca->lock); in qcauart_netdev_xmit()
208 WARN_ON(qca->tx_left); in qcauart_netdev_xmit()
211 spin_unlock(&qca->lock); in qcauart_netdev_xmit()
212 netdev_warn(qca->net_dev, "xmit: iface is down\n"); in qcauart_netdev_xmit()
216 pos = qca->tx_buffer; in qcauart_netdev_xmit()
233 netif_stop_queue(qca->net_dev); in qcauart_netdev_xmit()
235 written = serdev_device_write_buf(qca->serdev, qca->tx_buffer, in qcauart_netdev_xmit()
236 pos - qca->tx_buffer); in qcauart_netdev_xmit()
238 qca->tx_left = (pos - qca->tx_buffer) - written; in qcauart_netdev_xmit()
239 qca->tx_head = qca->tx_buffer + written; in qcauart_netdev_xmit()
242 spin_unlock(&qca->lock); in qcauart_netdev_xmit()
252 struct qcauart *qca = netdev_priv(dev); in qcauart_netdev_tx_timeout() local
254 netdev_info(qca->net_dev, "Transmit timeout at %ld, latency %ld\n", in qcauart_netdev_tx_timeout()
262 struct qcauart *qca = netdev_priv(dev); in qcauart_netdev_init() local
270 qca->tx_buffer = devm_kmalloc(&qca->serdev->dev, len, GFP_KERNEL); in qcauart_netdev_init()
271 if (!qca->tx_buffer) in qcauart_netdev_init()
274 qca->rx_skb = netdev_alloc_skb_ip_align(qca->net_dev, in qcauart_netdev_init()
275 qca->net_dev->mtu + in qcauart_netdev_init()
277 if (!qca->rx_skb) in qcauart_netdev_init()
285 struct qcauart *qca = netdev_priv(dev); in qcauart_netdev_uninit() local
287 dev_kfree_skb(qca->rx_skb); in qcauart_netdev_uninit()
315 .compatible = "qca,qca7000",
324 struct qcauart *qca; in qca_uart_probe() local
334 qca = netdev_priv(qcauart_dev); in qca_uart_probe()
335 if (!qca) { in qca_uart_probe()
340 qca->net_dev = qcauart_dev; in qca_uart_probe()
341 qca->serdev = serdev; in qca_uart_probe()
342 qcafrm_fsm_init_uart(&qca->frm_handle); in qca_uart_probe()
344 spin_lock_init(&qca->lock); in qca_uart_probe()
345 INIT_WORK(&qca->tx_work, qcauart_transmit); in qca_uart_probe()
349 ret = of_get_ethdev_address(serdev->dev.of_node, qca->net_dev); in qca_uart_probe()
351 eth_hw_addr_random(qca->net_dev); in qca_uart_probe()
353 qca->net_dev->dev_addr); in qca_uart_probe()
356 netif_carrier_on(qca->net_dev); in qca_uart_probe()
357 serdev_device_set_drvdata(serdev, qca); in qca_uart_probe()
377 cancel_work_sync(&qca->tx_work); in qca_uart_probe()
390 struct qcauart *qca = serdev_device_get_drvdata(serdev); in qca_uart_remove() local
392 unregister_netdev(qca->net_dev); in qca_uart_remove()
396 cancel_work_sync(&qca->tx_work); in qca_uart_remove()
398 free_netdev(qca->net_dev); in qca_uart_remove()