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->stopped << 5 | in update_tty_status()
91 ser->tty->flow_stopped << 3 | in update_tty_status()
92 ser->tty->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_tx(struct ser_device *ser, const u8 *data, int size) in debugfs_tx() argument
132 if (size > sizeof(ser->tx_data)) in debugfs_tx()
133 size = sizeof(ser->tx_data); in debugfs_tx()
134 memcpy(ser->tx_data, data, size); in debugfs_tx()
135 ser->tx_blob.data = ser->tx_data; in debugfs_tx()
136 ser->tx_blob.size = size; in debugfs_tx()
139 static inline void debugfs_init(struct ser_device *ser, struct tty_struct *tty) in debugfs_init() argument
143 static inline void debugfs_deinit(struct ser_device *ser) in debugfs_deinit() argument
147 static inline void update_tty_status(struct ser_device *ser) in update_tty_status() argument
151 static inline void debugfs_rx(struct ser_device *ser, const u8 *data, int size) in debugfs_rx() argument
155 static inline void debugfs_tx(struct ser_device *ser, const u8 *data, int size) in debugfs_tx() argument
165 struct ser_device *ser; in ldisc_receive() local
168 ser = tty->disc_data; in ldisc_receive()
180 if (!ser->common.use_stx && !ser->tx_started) { in ldisc_receive()
181 dev_info(&ser->dev->dev, in ldisc_receive()
187 BUG_ON(ser->dev == NULL); in ldisc_receive()
190 skb = netdev_alloc_skb(ser->dev, count+1); in ldisc_receive()
197 debugfs_rx(ser, data, count); in ldisc_receive()
201 ser->dev->stats.rx_packets++; in ldisc_receive()
202 ser->dev->stats.rx_bytes += count; in ldisc_receive()
204 ++ser->dev->stats.rx_dropped; in ldisc_receive()
205 update_tty_status(ser); in ldisc_receive()
208 static int handle_tx(struct ser_device *ser) in handle_tx() argument
214 tty = ser->tty; in handle_tx()
215 ser->tx_started = true; in handle_tx()
218 if (test_and_set_bit(CAIF_SENDING, &ser->state)) in handle_tx()
222 while ((skb = skb_peek(&ser->head)) != NULL) { in handle_tx()
237 update_tty_status(ser); in handle_tx()
242 ser->dev->stats.tx_packets++; in handle_tx()
243 ser->dev->stats.tx_bytes += tty_wr; in handle_tx()
251 struct sk_buff *tmp = skb_dequeue(&ser->head); in handle_tx()
257 if (ser->head.qlen <= SEND_QUEUE_LOW && in handle_tx()
258 test_and_clear_bit(CAIF_FLOW_OFF_SENT, &ser->state) && in handle_tx()
259 ser->common.flowctrl != NULL) in handle_tx()
260 ser->common.flowctrl(ser->dev, ON); in handle_tx()
261 clear_bit(CAIF_SENDING, &ser->state); in handle_tx()
264 clear_bit(CAIF_SENDING, &ser->state); in handle_tx()
270 struct ser_device *ser; in caif_xmit() local
275 ser = netdev_priv(dev); in caif_xmit()
278 if (ser->head.qlen > SEND_QUEUE_HIGH && in caif_xmit()
279 !test_and_set_bit(CAIF_FLOW_OFF_SENT, &ser->state) && in caif_xmit()
280 ser->common.flowctrl != NULL) in caif_xmit()
282 ser->common.flowctrl(ser->dev, OFF); in caif_xmit()
284 skb_queue_tail(&ser->head, skb); in caif_xmit()
285 return handle_tx(ser); in caif_xmit()
291 struct ser_device *ser; in ldisc_tx_wakeup() local
293 ser = tty->disc_data; in ldisc_tx_wakeup()
294 BUG_ON(ser == NULL); in ldisc_tx_wakeup()
295 WARN_ON(ser->tty != tty); in ldisc_tx_wakeup()
296 handle_tx(ser); in ldisc_tx_wakeup()
303 struct ser_device *ser, *tmp; in ser_release() local
311 list_for_each_entry_safe(ser, tmp, &list, node) { in ser_release()
312 dev_close(ser->dev); in ser_release()
313 unregister_netdevice(ser->dev); in ser_release()
314 debugfs_deinit(ser); in ser_release()
324 struct ser_device *ser; in ldisc_open() local
341 dev = alloc_netdev(sizeof(*ser), name, NET_NAME_UNKNOWN, in ldisc_open()
346 ser = netdev_priv(dev); in ldisc_open()
347 ser->tty = tty_kref_get(tty); in ldisc_open()
348 ser->dev = dev; in ldisc_open()
349 debugfs_init(ser, tty); in ldisc_open()
351 tty->disc_data = ser; in ldisc_open()
362 list_add(&ser->node, &ser_list); in ldisc_open()
366 update_tty_status(ser); in ldisc_open()
372 struct ser_device *ser = tty->disc_data; in ldisc_close() local
374 tty_kref_put(ser->tty); in ldisc_close()
377 list_move(&ser->node, &ser_release_list); in ldisc_close()