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()
93 ser->tty->port->low_latency << 1; in update_tty_status()
95 static inline void debugfs_init(struct ser_device *ser, struct tty_struct *tty) in debugfs_init() argument
97 ser->debugfs_tty_dir = in debugfs_init()
99 if (!IS_ERR(ser->debugfs_tty_dir)) { in debugfs_init()
101 ser->debugfs_tty_dir, in debugfs_init()
102 &ser->tx_blob); in debugfs_init()
105 ser->debugfs_tty_dir, in debugfs_init()
106 &ser->rx_blob); in debugfs_init()
109 ser->debugfs_tty_dir, in debugfs_init()
110 (u32 *)&ser->state); in debugfs_init()
113 ser->debugfs_tty_dir, in debugfs_init()
114 &ser->tty_status); in debugfs_init()
117 ser->tx_blob.data = ser->tx_data; in debugfs_init()
118 ser->tx_blob.size = 0; in debugfs_init()
119 ser->rx_blob.data = ser->rx_data; in debugfs_init()
120 ser->rx_blob.size = 0; in debugfs_init()
123 static inline void debugfs_deinit(struct ser_device *ser) in debugfs_deinit() argument
125 debugfs_remove_recursive(ser->debugfs_tty_dir); in debugfs_deinit()
128 static inline void debugfs_rx(struct ser_device *ser, const u8 *data, int size) in debugfs_rx() argument
130 if (size > sizeof(ser->rx_data)) in debugfs_rx()
131 size = sizeof(ser->rx_data); in debugfs_rx()
132 memcpy(ser->rx_data, data, size); in debugfs_rx()
133 ser->rx_blob.data = ser->rx_data; in debugfs_rx()
134 ser->rx_blob.size = size; in debugfs_rx()
137 static inline void debugfs_tx(struct ser_device *ser, const u8 *data, int size) in debugfs_tx() argument
139 if (size > sizeof(ser->tx_data)) in debugfs_tx()
140 size = sizeof(ser->tx_data); in debugfs_tx()
141 memcpy(ser->tx_data, data, size); in debugfs_tx()
142 ser->tx_blob.data = ser->tx_data; in debugfs_tx()
143 ser->tx_blob.size = size; in debugfs_tx()
146 static inline void debugfs_init(struct ser_device *ser, struct tty_struct *tty) in debugfs_init() argument
150 static inline void debugfs_deinit(struct ser_device *ser) in debugfs_deinit() argument
154 static inline void update_tty_status(struct ser_device *ser) in update_tty_status() argument
158 static inline void debugfs_rx(struct ser_device *ser, const u8 *data, int size) in debugfs_rx() argument
162 static inline void debugfs_tx(struct ser_device *ser, const u8 *data, int size) in debugfs_tx() argument
172 struct ser_device *ser; in ldisc_receive() local
176 ser = tty->disc_data; in ldisc_receive()
188 if (!ser->common.use_stx && !ser->tx_started) { in ldisc_receive()
189 dev_info(&ser->dev->dev, in ldisc_receive()
195 BUG_ON(ser->dev == NULL); in ldisc_receive()
198 skb = netdev_alloc_skb(ser->dev, count+1); in ldisc_receive()
206 debugfs_rx(ser, data, count); in ldisc_receive()
210 ser->dev->stats.rx_packets++; in ldisc_receive()
211 ser->dev->stats.rx_bytes += count; in ldisc_receive()
213 ++ser->dev->stats.rx_dropped; in ldisc_receive()
214 update_tty_status(ser); in ldisc_receive()
217 static int handle_tx(struct ser_device *ser) in handle_tx() argument
223 tty = ser->tty; in handle_tx()
224 ser->tx_started = true; in handle_tx()
227 if (test_and_set_bit(CAIF_SENDING, &ser->state)) in handle_tx()
231 while ((skb = skb_peek(&ser->head)) != NULL) { in handle_tx()
246 update_tty_status(ser); in handle_tx()
251 ser->dev->stats.tx_packets++; in handle_tx()
252 ser->dev->stats.tx_bytes += tty_wr; in handle_tx()
260 struct sk_buff *tmp = skb_dequeue(&ser->head); in handle_tx()
269 if (ser->head.qlen <= SEND_QUEUE_LOW && in handle_tx()
270 test_and_clear_bit(CAIF_FLOW_OFF_SENT, &ser->state) && in handle_tx()
271 ser->common.flowctrl != NULL) in handle_tx()
272 ser->common.flowctrl(ser->dev, ON); in handle_tx()
273 clear_bit(CAIF_SENDING, &ser->state); in handle_tx()
276 clear_bit(CAIF_SENDING, &ser->state); in handle_tx()
282 struct ser_device *ser; in caif_xmit() local
285 ser = netdev_priv(dev); in caif_xmit()
288 if (ser->head.qlen > SEND_QUEUE_HIGH && in caif_xmit()
289 !test_and_set_bit(CAIF_FLOW_OFF_SENT, &ser->state) && in caif_xmit()
290 ser->common.flowctrl != NULL) in caif_xmit()
292 ser->common.flowctrl(ser->dev, OFF); in caif_xmit()
294 skb_queue_tail(&ser->head, skb); in caif_xmit()
295 return handle_tx(ser); in caif_xmit()
301 struct ser_device *ser; in ldisc_tx_wakeup() local
303 ser = tty->disc_data; in ldisc_tx_wakeup()
304 BUG_ON(ser == NULL); in ldisc_tx_wakeup()
305 WARN_ON(ser->tty != tty); in ldisc_tx_wakeup()
306 handle_tx(ser); in ldisc_tx_wakeup()
313 struct ser_device *ser, *tmp; in ser_release() local
321 list_for_each_entry_safe(ser, tmp, &list, node) { in ser_release()
322 dev_close(ser->dev); in ser_release()
323 unregister_netdevice(ser->dev); in ser_release()
324 debugfs_deinit(ser); in ser_release()
334 struct ser_device *ser; in ldisc_open() local
351 dev = alloc_netdev(sizeof(*ser), name, NET_NAME_UNKNOWN, in ldisc_open()
356 ser = netdev_priv(dev); in ldisc_open()
357 ser->tty = tty_kref_get(tty); in ldisc_open()
358 ser->dev = dev; in ldisc_open()
359 debugfs_init(ser, tty); in ldisc_open()
361 tty->disc_data = ser; in ldisc_open()
372 list_add(&ser->node, &ser_list); in ldisc_open()
376 update_tty_status(ser); in ldisc_open()
382 struct ser_device *ser = tty->disc_data; in ldisc_close() local
384 tty_kref_put(ser->tty); in ldisc_close()
387 list_move(&ser->node, &ser_release_list); in ldisc_close()