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 = debugfs_create_dir(tty->name, debugfsdir); in debugfs_init()
99 debugfs_create_blob("last_tx_msg", 0400, ser->debugfs_tty_dir, in debugfs_init()
100 &ser->tx_blob); in debugfs_init()
102 debugfs_create_blob("last_rx_msg", 0400, ser->debugfs_tty_dir, in debugfs_init()
103 &ser->rx_blob); in debugfs_init()
105 debugfs_create_xul("ser_state", 0400, ser->debugfs_tty_dir, in debugfs_init()
106 &ser->state); in debugfs_init()
108 debugfs_create_x8("tty_status", 0400, ser->debugfs_tty_dir, in debugfs_init()
109 &ser->tty_status); in debugfs_init()
111 ser->tx_blob.data = ser->tx_data; in debugfs_init()
112 ser->tx_blob.size = 0; in debugfs_init()
113 ser->rx_blob.data = ser->rx_data; in debugfs_init()
114 ser->rx_blob.size = 0; in debugfs_init()
117 static inline void debugfs_deinit(struct ser_device *ser) in debugfs_deinit() argument
119 debugfs_remove_recursive(ser->debugfs_tty_dir); in debugfs_deinit()
122 static inline void debugfs_rx(struct ser_device *ser, const u8 *data, int size) in debugfs_rx() argument
124 if (size > sizeof(ser->rx_data)) in debugfs_rx()
125 size = sizeof(ser->rx_data); in debugfs_rx()
126 memcpy(ser->rx_data, data, size); in debugfs_rx()
127 ser->rx_blob.data = ser->rx_data; in debugfs_rx()
128 ser->rx_blob.size = size; in debugfs_rx()
131 static inline void debugfs_tx(struct ser_device *ser, const u8 *data, int size) in debugfs_tx() argument
133 if (size > sizeof(ser->tx_data)) in debugfs_tx()
134 size = sizeof(ser->tx_data); in debugfs_tx()
135 memcpy(ser->tx_data, data, size); in debugfs_tx()
136 ser->tx_blob.data = ser->tx_data; in debugfs_tx()
137 ser->tx_blob.size = size; in debugfs_tx()
140 static inline void debugfs_init(struct ser_device *ser, struct tty_struct *tty) in debugfs_init() argument
144 static inline void debugfs_deinit(struct ser_device *ser) in debugfs_deinit() argument
148 static inline void update_tty_status(struct ser_device *ser) in update_tty_status() argument
152 static inline void debugfs_rx(struct ser_device *ser, const u8 *data, int size) in debugfs_rx() argument
156 static inline void debugfs_tx(struct ser_device *ser, const u8 *data, int size) in debugfs_tx() argument
166 struct ser_device *ser; in ldisc_receive() local
169 ser = tty->disc_data; in ldisc_receive()
181 if (!ser->common.use_stx && !ser->tx_started) { in ldisc_receive()
182 dev_info(&ser->dev->dev, in ldisc_receive()
188 BUG_ON(ser->dev == NULL); in ldisc_receive()
191 skb = netdev_alloc_skb(ser->dev, count+1); in ldisc_receive()
198 debugfs_rx(ser, data, count); in ldisc_receive()
202 ser->dev->stats.rx_packets++; in ldisc_receive()
203 ser->dev->stats.rx_bytes += count; in ldisc_receive()
205 ++ser->dev->stats.rx_dropped; in ldisc_receive()
206 update_tty_status(ser); in ldisc_receive()
209 static int handle_tx(struct ser_device *ser) in handle_tx() argument
215 tty = ser->tty; in handle_tx()
216 ser->tx_started = true; in handle_tx()
219 if (test_and_set_bit(CAIF_SENDING, &ser->state)) in handle_tx()
223 while ((skb = skb_peek(&ser->head)) != NULL) { in handle_tx()
238 update_tty_status(ser); in handle_tx()
243 ser->dev->stats.tx_packets++; in handle_tx()
244 ser->dev->stats.tx_bytes += tty_wr; in handle_tx()
252 struct sk_buff *tmp = skb_dequeue(&ser->head); in handle_tx()
258 if (ser->head.qlen <= SEND_QUEUE_LOW && in handle_tx()
259 test_and_clear_bit(CAIF_FLOW_OFF_SENT, &ser->state) && in handle_tx()
260 ser->common.flowctrl != NULL) in handle_tx()
261 ser->common.flowctrl(ser->dev, ON); in handle_tx()
262 clear_bit(CAIF_SENDING, &ser->state); in handle_tx()
265 clear_bit(CAIF_SENDING, &ser->state); in handle_tx()
271 struct ser_device *ser; in caif_xmit() local
273 ser = netdev_priv(dev); in caif_xmit()
276 if (ser->head.qlen > SEND_QUEUE_HIGH && in caif_xmit()
277 !test_and_set_bit(CAIF_FLOW_OFF_SENT, &ser->state) && in caif_xmit()
278 ser->common.flowctrl != NULL) in caif_xmit()
280 ser->common.flowctrl(ser->dev, OFF); in caif_xmit()
282 skb_queue_tail(&ser->head, skb); in caif_xmit()
283 return handle_tx(ser); in caif_xmit()
289 struct ser_device *ser; in ldisc_tx_wakeup() local
291 ser = tty->disc_data; in ldisc_tx_wakeup()
292 BUG_ON(ser == NULL); in ldisc_tx_wakeup()
293 WARN_ON(ser->tty != tty); in ldisc_tx_wakeup()
294 handle_tx(ser); in ldisc_tx_wakeup()
301 struct ser_device *ser, *tmp; in ser_release() local
309 list_for_each_entry_safe(ser, tmp, &list, node) { in ser_release()
310 dev_close(ser->dev); in ser_release()
311 unregister_netdevice(ser->dev); in ser_release()
312 debugfs_deinit(ser); in ser_release()
322 struct ser_device *ser; in ldisc_open() local
339 dev = alloc_netdev(sizeof(*ser), name, NET_NAME_UNKNOWN, in ldisc_open()
344 ser = netdev_priv(dev); in ldisc_open()
345 ser->tty = tty_kref_get(tty); in ldisc_open()
346 ser->dev = dev; in ldisc_open()
347 debugfs_init(ser, tty); in ldisc_open()
349 tty->disc_data = ser; in ldisc_open()
361 list_add(&ser->node, &ser_list); in ldisc_open()
365 update_tty_status(ser); in ldisc_open()
371 struct ser_device *ser = tty->disc_data; in ldisc_close() local
373 tty_kref_put(ser->tty); in ldisc_close()
376 list_move(&ser->node, &ser_release_list); in ldisc_close()