Lines Matching refs:nu
51 static inline struct sk_buff *nci_uart_dequeue(struct nci_uart *nu)
53 struct sk_buff *skb = nu->tx_skb;
56 skb = skb_dequeue(&nu->tx_q);
58 nu->tx_skb = NULL;
63 static inline int nci_uart_queue_empty(struct nci_uart *nu)
65 if (nu->tx_skb)
68 return skb_queue_empty(&nu->tx_q);
71 static int nci_uart_tx_wakeup(struct nci_uart *nu)
73 if (test_and_set_bit(NCI_UART_SENDING, &nu->tx_state)) {
74 set_bit(NCI_UART_TX_WAKEUP, &nu->tx_state);
78 schedule_work(&nu->write_work);
85 struct nci_uart *nu = container_of(work, struct nci_uart, write_work);
86 struct tty_struct *tty = nu->tty;
90 clear_bit(NCI_UART_TX_WAKEUP, &nu->tx_state);
92 if (nu->ops.tx_start)
93 nu->ops.tx_start(nu);
95 while ((skb = nci_uart_dequeue(nu))) {
102 nu->tx_skb = skb;
108 if (test_bit(NCI_UART_TX_WAKEUP, &nu->tx_state))
111 if (nu->ops.tx_done && nci_uart_queue_empty(nu))
112 nu->ops.tx_done(nu);
114 clear_bit(NCI_UART_SENDING, &nu->tx_state);
119 struct nci_uart *nu = NULL;
128 nu = kzalloc(sizeof(*nu), GFP_KERNEL);
129 if (!nu)
132 memcpy(nu, nci_uart_drivers[driver], sizeof(struct nci_uart));
133 nu->tty = tty;
134 tty->disc_data = nu;
135 skb_queue_head_init(&nu->tx_q);
136 INIT_WORK(&nu->write_work, nci_uart_write_work);
137 spin_lock_init(&nu->rx_lock);
139 ret = nu->ops.open(nu);
142 kfree(nu);
143 } else if (!try_module_get(nu->owner)) {
144 nu->ops.close(nu);
146 kfree(nu);
187 struct nci_uart *nu = (void *)tty->disc_data;
192 if (!nu)
195 kfree_skb(nu->tx_skb);
196 kfree_skb(nu->rx_skb);
198 skb_queue_purge(&nu->tx_q);
200 nu->ops.close(nu);
201 nu->tty = NULL;
202 module_put(nu->owner);
204 cancel_work_sync(&nu->write_work);
206 kfree(nu);
219 struct nci_uart *nu = (void *)tty->disc_data;
221 if (!nu)
226 if (tty != nu->tty)
229 nci_uart_tx_wakeup(nu);
247 struct nci_uart *nu = (void *)tty->disc_data;
249 if (!nu || tty != nu->tty)
252 spin_lock(&nu->rx_lock);
253 nu->ops.recv_buf(nu, (void *)data, flags, count);
254 spin_unlock(&nu->rx_lock);
275 struct nci_uart *nu = (void *)tty->disc_data;
280 if (!nu)
313 static int nci_uart_send(struct nci_uart *nu, struct sk_buff *skb)
316 skb_queue_tail(&nu->tx_q, skb);
319 nci_uart_tx_wakeup(nu);
330 static int nci_uart_default_recv_buf(struct nci_uart *nu, const u8 *data,
335 if (!nu->ndev) {
336 nfc_err(nu->tty->dev,
346 if (!nu->rx_skb) {
347 nu->rx_packet_len = -1;
348 nu->rx_skb = nci_skb_alloc(nu->ndev,
351 if (!nu->rx_skb)
356 if (nu->rx_skb->len < NCI_CTRL_HDR_SIZE) {
357 skb_put_u8(nu->rx_skb, *data++);
363 if (nu->rx_packet_len < 0)
364 nu->rx_packet_len = NCI_CTRL_HDR_SIZE +
365 nci_plen(nu->rx_skb->data);
370 chunk_len = nu->rx_packet_len - nu->rx_skb->len;
373 skb_put_data(nu->rx_skb, data, chunk_len);
378 if (nu->rx_packet_len == nu->rx_skb->len) {
380 if (nu->ops.recv(nu, nu->rx_skb) != 0)
381 nfc_err(nu->tty->dev, "corrupted RX packet\n");
383 nu->rx_skb = NULL;
391 static int nci_uart_default_recv(struct nci_uart *nu, struct sk_buff *skb)
393 return nci_recv_frame(nu->ndev, skb);
396 int nci_uart_register(struct nci_uart *nu)
398 if (!nu || !nu->ops.open ||
399 !nu->ops.recv || !nu->ops.close)
403 nu->ops.send = nci_uart_send;
406 if (!nu->ops.recv_buf)
407 nu->ops.recv_buf = nci_uart_default_recv_buf;
408 if (!nu->ops.recv)
409 nu->ops.recv = nci_uart_default_recv;
412 if (nci_uart_drivers[nu->driver]) {
413 pr_err("driver %d is already registered\n", nu->driver);
416 nci_uart_drivers[nu->driver] = nu;
418 pr_info("NCI uart driver '%s [%d]' registered\n", nu->name, nu->driver);
424 void nci_uart_unregister(struct nci_uart *nu)
426 pr_info("NCI uart driver '%s [%d]' unregistered\n", nu->name,
427 nu->driver);
430 nci_uart_drivers[nu->driver] = NULL;
434 void nci_uart_set_config(struct nci_uart *nu, int baudrate, int flow_ctrl)
438 if (!nu->tty)
441 down_read(&nu->tty->termios_rwsem);
442 new_termios = nu->tty->termios;
443 up_read(&nu->tty->termios_rwsem);
451 tty_set_termios(nu->tty, &new_termios);