/** * uart_tty_receive() - Called by TTY low level driver when receive data is available. * @tty: Pointer to TTY instance data * @data: Pointer to received data * @flags: Pointer to flags for data * @count: Count of received data in bytes */ static void uart_tty_receive(struct tty_struct *tty, const u8 *data, char *flags, int count) { CG2900_INFO("uart_tty_receive"); if (tty != uart_info->tty) return; CG2900_DBG_DATA("Received data with length = %d and first byte 0x%02X", count, data[0]); CG2900_DBG_DATA_CONTENT("uart_tty_receive", data, count); #ifdef BAUD_RATE_FIX del_timer(&uart_info->timer); #endif /* BAUD_RATE_FIX */ /* Restart data ccd timer */ spin_lock(&uart_info->rx_lock); #ifndef BAUD_RATE_FIX update_timer(); #endif /* BAUD_RATE_FIX */ uart_receive_skb(data, count); spin_unlock(&uart_info->rx_lock); #ifndef BAUD_RATE_FIX /* Open TTY for more data */ tty_unthrottle(tty); #endif /* BAUD_RATE_FIX */ }
/* hci_uart_tty_receive() * * Called by tty low level driver when receive data is * available. * * Arguments: tty pointer to tty isntance data * data pointer to received data * flags pointer to flags for data * count count of received data in bytes * * Return Value: None */ static void hci_uart_tty_receive(struct tty_struct *tty, const u8 *data, char *flags, int count) { struct hci_uart *hu = (void *)tty->disc_data; #if defined(CONFIG_BT_CSR8811) if(hu->hdev == NULL) return ; #endif if (!hu || tty != hu->tty) return; if (!test_bit(HCI_UART_PROTO_SET, &hu->flags)) return; /* CSR8811 Project(Dayton.Kim) 2012.02.23 */ if (hu == NULL || hu->proto == NULL || hu->proto->recv == NULL || data == NULL) return; /* CSR8811 Project(Dayton.Kim) end */ spin_lock(&hu->rx_lock); hu->proto->recv(hu, (void *) data, count); hu->hdev->stat.byte_rx += count; spin_unlock(&hu->rx_lock); tty_unthrottle(tty); }
static int n_tty_open(struct tty_struct *tty) { if (!tty) return -EINVAL; if (!tty->read_buf) { tty->read_buf = kzalloc(N_TTY_BUF_SIZE, GFP_KERNEL); if (!tty->read_buf) return -ENOMEM; } if (!tty->echo_buf) { tty->echo_buf = kzalloc(N_TTY_BUF_SIZE, GFP_KERNEL); if (!tty->echo_buf) return -ENOMEM; } reset_buffer_flags(tty); tty_unthrottle(tty); tty->column = 0; n_tty_set_termios(tty, NULL); tty->minimum_to_wake = 1; tty->closing = 0; return 0; }
/* nci_uart_tty_receive() * * Called by tty low level driver when receive data is * available. * * Arguments: tty pointer to tty isntance data * data pointer to received data * flags pointer to flags for data * count count of received data in bytes * * Return Value: None */ static void nci_uart_tty_receive(struct tty_struct *tty, const u8 *data, char *flags, int count) { struct nci_uart *nu = (void *)tty->disc_data; if (!nu || tty != nu->tty) return; spin_lock(&nu->rx_lock); nu->ops.recv_buf(nu, (void *)data, flags, count); spin_unlock(&nu->rx_lock); tty_unthrottle(tty); }
/* hci_uart_tty_receive() * * Called by tty low level driver when receive data is * available. * * Arguments: tty pointer to tty isntance data * data pointer to received data * flags pointer to flags for data * count count of received data in bytes * * Return Value: None */ static void hci_uart_tty_receive(struct tty_struct *tty, const u8 *data, char *flags, int count) { struct hci_uart *hu = (void *)tty->disc_data; if (!hu || tty != hu->tty) return; if (!test_bit(HCI_UART_PROTO_SET, &hu->flags)) return; spin_lock(&hu->rx_lock); hu->proto->recv(hu, (void *) data, count); hu->hdev->stat.byte_rx += count; spin_unlock(&hu->rx_lock); tty_unthrottle(tty); }
static void stp_uart_tty_receive(struct tty_struct *tty, const u8 *data, char *flags, int count) { #if 0 mtk_wcn_stp_debug_gpio_assert(IDX_STP_RX_PROC, DBG_TIE_LOW); #endif if(count > 2000){ /*this is abnormal*/ UART_ERR_FUNC("stp_uart_tty_receive buffer count = %d\n", count); } #if 0 { struct timeval now; do_gettimeofday(&now); printk("[+STP][ ][R] %4d --> sec = %d, --> usec --> %d\n", count, now.tv_sec, now.tv_usec); } #endif /*There are multi-context to access here? Need to spinlock?*/ /*Only one context: flush_to_ldisc in tty_buffer.c*/ mtk_wcn_stp_parser_data((UINT8 *)data, (UINT32)count); #if 0 mtk_wcn_stp_debug_gpio_assert(IDX_STP_RX_PROC, DBG_TIE_HIGH); #endif tty_unthrottle(tty); #if 0 { struct timeval now; do_gettimeofday(&now); printk("[-STP][ ][R] %4d --> sec = %d, --> usec --> %d\n", count, now.tv_sec, now.tv_usec); } #endif return; }
/* hci_uart_tty_receive() * * Called by tty low level driver when receive data is * available. * * Arguments: tty pointer to tty isntance data * data pointer to received data * flags pointer to flags for data * count count of received data in bytes * * Return Value: None */ static void hci_uart_tty_receive(struct tty_struct *tty, const u8 *data, char *flags, int count) { struct hci_uart *hu = tty->disc_data; if (!hu || tty != hu->tty) return; if (!test_bit(HCI_UART_PROTO_READY, &hu->flags)) return; /* It does not need a lock here as it is already protected by a mutex in * tty caller */ hu->proto->recv(hu, data, count); if (hu->hdev) hu->hdev->stat.byte_rx += count; tty_unthrottle(tty); }
/* hci_uart_tty_receive() * * Called by tty low level driver when receive data is * available. * * Arguments: tty pointer to tty isntance data * data pointer to received data * flags pointer to flags for data * count count of received data in bytes * * Return Value: None */ static void hci_uart_tty_receive(struct tty_struct *tty, const u8 *data, char *flags, int count) { struct hci_uart *hu = (void *)tty->disc_data; if (!hu || tty != hu->tty) return; #ifdef CONFIG_BT_CSR_7820 if (hu->hdev == NULL) { BT_ERR("hci_uart_tty_receive : hu->hdev is null"); return; } #endif if (!test_bit(HCI_UART_PROTO_SET, &hu->flags)) return; spin_lock(&hu->rx_lock); hu->proto->recv(hu, (void *) data, count); hu->hdev->stat.byte_rx += count; spin_unlock(&hu->rx_lock); tty_unthrottle(tty); }
static void check_unthrottle(struct tty_struct *tty) { if (tty->count) tty_unthrottle(tty); }