Lines Matching refs:ser

87 static inline void update_tty_status(struct ser_device *ser)  in update_tty_status()  argument
89 ser->tty_status = in update_tty_status()
90 ser->tty->flow.stopped << 5 | in update_tty_status()
91 ser->tty->flow.tco_stopped << 3 | in update_tty_status()
92 ser->tty->ctrl.packet << 2; in update_tty_status()
94 static inline void debugfs_init(struct ser_device *ser, struct tty_struct *tty) in debugfs_init() argument
96 ser->debugfs_tty_dir = debugfs_create_dir(tty->name, debugfsdir); in debugfs_init()
98 debugfs_create_blob("last_tx_msg", 0400, ser->debugfs_tty_dir, in debugfs_init()
99 &ser->tx_blob); in debugfs_init()
101 debugfs_create_blob("last_rx_msg", 0400, ser->debugfs_tty_dir, in debugfs_init()
102 &ser->rx_blob); in debugfs_init()
104 debugfs_create_xul("ser_state", 0400, ser->debugfs_tty_dir, in debugfs_init()
105 &ser->state); in debugfs_init()
107 debugfs_create_x8("tty_status", 0400, ser->debugfs_tty_dir, in debugfs_init()
108 &ser->tty_status); in debugfs_init()
110 ser->tx_blob.data = ser->tx_data; in debugfs_init()
111 ser->tx_blob.size = 0; in debugfs_init()
112 ser->rx_blob.data = ser->rx_data; in debugfs_init()
113 ser->rx_blob.size = 0; in debugfs_init()
116 static inline void debugfs_deinit(struct ser_device *ser) in debugfs_deinit() argument
118 debugfs_remove_recursive(ser->debugfs_tty_dir); in debugfs_deinit()
121 static inline void debugfs_rx(struct ser_device *ser, const u8 *data, int size) in debugfs_rx() argument
123 if (size > sizeof(ser->rx_data)) in debugfs_rx()
124 size = sizeof(ser->rx_data); in debugfs_rx()
125 memcpy(ser->rx_data, data, size); in debugfs_rx()
126 ser->rx_blob.data = ser->rx_data; in debugfs_rx()
127 ser->rx_blob.size = size; in debugfs_rx()
130 static inline void debugfs_init(struct ser_device *ser, struct tty_struct *tty) in debugfs_init() argument
134 static inline void debugfs_deinit(struct ser_device *ser) in debugfs_deinit() argument
138 static inline void update_tty_status(struct ser_device *ser) in update_tty_status() argument
142 static inline void debugfs_rx(struct ser_device *ser, const u8 *data, int size) in debugfs_rx() argument
151 struct ser_device *ser; in ldisc_receive() local
154 ser = tty->disc_data; in ldisc_receive()
166 if (!ser->common.use_stx && !ser->tx_started) { in ldisc_receive()
167 dev_info(&ser->dev->dev, in ldisc_receive()
173 BUG_ON(ser->dev == NULL); in ldisc_receive()
176 skb = netdev_alloc_skb(ser->dev, count+1); in ldisc_receive()
183 debugfs_rx(ser, data, count); in ldisc_receive()
187 ser->dev->stats.rx_packets++; in ldisc_receive()
188 ser->dev->stats.rx_bytes += count; in ldisc_receive()
190 ++ser->dev->stats.rx_dropped; in ldisc_receive()
191 update_tty_status(ser); in ldisc_receive()
194 static int handle_tx(struct ser_device *ser) in handle_tx() argument
200 tty = ser->tty; in handle_tx()
201 ser->tx_started = true; in handle_tx()
204 if (test_and_set_bit(CAIF_SENDING, &ser->state)) in handle_tx()
208 while ((skb = skb_peek(&ser->head)) != NULL) { in handle_tx()
223 update_tty_status(ser); in handle_tx()
228 ser->dev->stats.tx_packets++; in handle_tx()
229 ser->dev->stats.tx_bytes += tty_wr; in handle_tx()
237 struct sk_buff *tmp = skb_dequeue(&ser->head); in handle_tx()
243 if (ser->head.qlen <= SEND_QUEUE_LOW && in handle_tx()
244 test_and_clear_bit(CAIF_FLOW_OFF_SENT, &ser->state) && in handle_tx()
245 ser->common.flowctrl != NULL) in handle_tx()
246 ser->common.flowctrl(ser->dev, ON); in handle_tx()
247 clear_bit(CAIF_SENDING, &ser->state); in handle_tx()
250 clear_bit(CAIF_SENDING, &ser->state); in handle_tx()
256 struct ser_device *ser; in caif_xmit() local
258 ser = netdev_priv(dev); in caif_xmit()
261 if (ser->head.qlen > SEND_QUEUE_HIGH && in caif_xmit()
262 !test_and_set_bit(CAIF_FLOW_OFF_SENT, &ser->state) && in caif_xmit()
263 ser->common.flowctrl != NULL) in caif_xmit()
265 ser->common.flowctrl(ser->dev, OFF); in caif_xmit()
267 skb_queue_tail(&ser->head, skb); in caif_xmit()
268 return handle_tx(ser); in caif_xmit()
274 struct ser_device *ser; in ldisc_tx_wakeup() local
276 ser = tty->disc_data; in ldisc_tx_wakeup()
277 BUG_ON(ser == NULL); in ldisc_tx_wakeup()
278 WARN_ON(ser->tty != tty); in ldisc_tx_wakeup()
279 handle_tx(ser); in ldisc_tx_wakeup()
286 struct ser_device *ser, *tmp; in ser_release() local
294 list_for_each_entry_safe(ser, tmp, &list, node) { in ser_release()
295 dev_close(ser->dev); in ser_release()
296 unregister_netdevice(ser->dev); in ser_release()
297 debugfs_deinit(ser); in ser_release()
307 struct ser_device *ser; in ldisc_open() local
324 dev = alloc_netdev(sizeof(*ser), name, NET_NAME_UNKNOWN, in ldisc_open()
329 ser = netdev_priv(dev); in ldisc_open()
330 ser->tty = tty_kref_get(tty); in ldisc_open()
331 ser->dev = dev; in ldisc_open()
332 debugfs_init(ser, tty); in ldisc_open()
334 tty->disc_data = ser; in ldisc_open()
346 list_add(&ser->node, &ser_list); in ldisc_open()
350 update_tty_status(ser); in ldisc_open()
356 struct ser_device *ser = tty->disc_data; in ldisc_close() local
358 tty_kref_put(ser->tty); in ldisc_close()
361 list_move(&ser->node, &ser_release_list); in ldisc_close()