Lines Matching defs:ser

87 static inline void update_tty_status(struct ser_device *ser)
89 ser->tty_status =
90 ser->tty->flow.stopped << 5 |
91 ser->tty->flow.tco_stopped << 3 |
92 ser->tty->ctrl.packet << 2;
94 static inline void debugfs_init(struct ser_device *ser, struct tty_struct *tty)
96 ser->debugfs_tty_dir = debugfs_create_dir(tty->name, debugfsdir);
98 debugfs_create_blob("last_tx_msg", 0400, ser->debugfs_tty_dir,
99 &ser->tx_blob);
101 debugfs_create_blob("last_rx_msg", 0400, ser->debugfs_tty_dir,
102 &ser->rx_blob);
104 debugfs_create_xul("ser_state", 0400, ser->debugfs_tty_dir,
105 &ser->state);
107 debugfs_create_x8("tty_status", 0400, ser->debugfs_tty_dir,
108 &ser->tty_status);
110 ser->tx_blob.data = ser->tx_data;
111 ser->tx_blob.size = 0;
112 ser->rx_blob.data = ser->rx_data;
113 ser->rx_blob.size = 0;
116 static inline void debugfs_deinit(struct ser_device *ser)
118 debugfs_remove_recursive(ser->debugfs_tty_dir);
121 static inline void debugfs_rx(struct ser_device *ser, const u8 *data, int size)
123 if (size > sizeof(ser->rx_data))
124 size = sizeof(ser->rx_data);
125 memcpy(ser->rx_data, data, size);
126 ser->rx_blob.data = ser->rx_data;
127 ser->rx_blob.size = size;
130 static inline void debugfs_tx(struct ser_device *ser, const u8 *data, int size)
132 if (size > sizeof(ser->tx_data))
133 size = sizeof(ser->tx_data);
134 memcpy(ser->tx_data, data, size);
135 ser->tx_blob.data = ser->tx_data;
136 ser->tx_blob.size = size;
139 static inline void debugfs_init(struct ser_device *ser, struct tty_struct *tty)
143 static inline void debugfs_deinit(struct ser_device *ser)
147 static inline void update_tty_status(struct ser_device *ser)
151 static inline void debugfs_rx(struct ser_device *ser, const u8 *data, int size)
155 static inline void debugfs_tx(struct ser_device *ser, const u8 *data, int size)
165 struct ser_device *ser;
168 ser = tty->disc_data;
180 if (!ser->common.use_stx && !ser->tx_started) {
181 dev_info(&ser->dev->dev,
187 BUG_ON(ser->dev == NULL);
190 skb = netdev_alloc_skb(ser->dev, count+1);
197 debugfs_rx(ser, data, count);
201 ser->dev->stats.rx_packets++;
202 ser->dev->stats.rx_bytes += count;
204 ++ser->dev->stats.rx_dropped;
205 update_tty_status(ser);
208 static int handle_tx(struct ser_device *ser)
214 tty = ser->tty;
215 ser->tx_started = true;
218 if (test_and_set_bit(CAIF_SENDING, &ser->state))
222 while ((skb = skb_peek(&ser->head)) != NULL) {
237 update_tty_status(ser);
242 ser->dev->stats.tx_packets++;
243 ser->dev->stats.tx_bytes += tty_wr;
251 struct sk_buff *tmp = skb_dequeue(&ser->head);
257 if (ser->head.qlen <= SEND_QUEUE_LOW &&
258 test_and_clear_bit(CAIF_FLOW_OFF_SENT, &ser->state) &&
259 ser->common.flowctrl != NULL)
260 ser->common.flowctrl(ser->dev, ON);
261 clear_bit(CAIF_SENDING, &ser->state);
264 clear_bit(CAIF_SENDING, &ser->state);
270 struct ser_device *ser;
272 ser = netdev_priv(dev);
275 if (ser->head.qlen > SEND_QUEUE_HIGH &&
276 !test_and_set_bit(CAIF_FLOW_OFF_SENT, &ser->state) &&
277 ser->common.flowctrl != NULL)
279 ser->common.flowctrl(ser->dev, OFF);
281 skb_queue_tail(&ser->head, skb);
282 return handle_tx(ser);
288 struct ser_device *ser;
290 ser = tty->disc_data;
291 BUG_ON(ser == NULL);
292 WARN_ON(ser->tty != tty);
293 handle_tx(ser);
300 struct ser_device *ser, *tmp;
308 list_for_each_entry_safe(ser, tmp, &list, node) {
309 dev_close(ser->dev);
310 unregister_netdevice(ser->dev);
311 debugfs_deinit(ser);
321 struct ser_device *ser;
338 dev = alloc_netdev(sizeof(*ser), name, NET_NAME_UNKNOWN,
343 ser = netdev_priv(dev);
344 ser->tty = tty_kref_get(tty);
345 ser->dev = dev;
346 debugfs_init(ser, tty);
348 tty->disc_data = ser;
360 list_add(&ser->node, &ser_list);
364 update_tty_status(ser);
370 struct ser_device *ser = tty->disc_data;
372 tty_kref_put(ser->tty);
375 list_move(&ser->node, &ser_release_list);