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