Lines Matching refs:self
68 static void ircomm_tty_shutdown(struct ircomm_tty_cb *self);
110 struct ircomm_tty_cb *self = container_of(port, struct ircomm_tty_cb, in ircomm_port_raise_dtr_rts() local
118 self->settings.dte |= IRCOMM_RTS | IRCOMM_DTR; in ircomm_port_raise_dtr_rts()
120 self->settings.dte &= ~(IRCOMM_RTS | IRCOMM_DTR); in ircomm_port_raise_dtr_rts()
122 ircomm_param_request(self, IRCOMM_DTE, TRUE); in ircomm_port_raise_dtr_rts()
127 struct ircomm_tty_cb *self = container_of(port, struct ircomm_tty_cb, in ircomm_port_carrier_raised() local
129 return self->settings.dce & IRCOMM_CD; in ircomm_port_carrier_raised()
175 static void __exit __ircomm_tty_cleanup(struct ircomm_tty_cb *self) in __ircomm_tty_cleanup() argument
177 IRDA_ASSERT(self != NULL, return;); in __ircomm_tty_cleanup()
178 IRDA_ASSERT(self->magic == IRCOMM_TTY_MAGIC, return;); in __ircomm_tty_cleanup()
180 ircomm_tty_shutdown(self); in __ircomm_tty_cleanup()
182 self->magic = 0; in __ircomm_tty_cleanup()
183 tty_port_destroy(&self->port); in __ircomm_tty_cleanup()
184 kfree(self); in __ircomm_tty_cleanup()
214 static int ircomm_tty_startup(struct ircomm_tty_cb *self) in ircomm_tty_startup() argument
219 IRDA_ASSERT(self != NULL, return -1;); in ircomm_tty_startup()
220 IRDA_ASSERT(self->magic == IRCOMM_TTY_MAGIC, return -1;); in ircomm_tty_startup()
223 if (test_and_set_bit(ASYNCB_INITIALIZED, &self->port.flags)) { in ircomm_tty_startup()
240 notify.instance = self; in ircomm_tty_startup()
242 if (!self->ircomm) { in ircomm_tty_startup()
243 self->ircomm = ircomm_open(¬ify, self->service_type, in ircomm_tty_startup()
244 self->line); in ircomm_tty_startup()
246 if (!self->ircomm) in ircomm_tty_startup()
249 self->slsap_sel = self->ircomm->slsap_sel; in ircomm_tty_startup()
252 ret = ircomm_tty_attach_cable(self); in ircomm_tty_startup()
260 clear_bit(ASYNCB_INITIALIZED, &self->port.flags); in ircomm_tty_startup()
270 static int ircomm_tty_block_til_ready(struct ircomm_tty_cb *self, in ircomm_tty_block_til_ready() argument
273 struct tty_port *port = &self->port; in ircomm_tty_block_til_ready()
340 self->state == IRCOMM_TTY_READY) in ircomm_tty_block_til_ready()
377 struct ircomm_tty_cb *self; in ircomm_tty_install() local
381 self = hashbin_lock_find(ircomm_tty, line, NULL); in ircomm_tty_install()
382 if (!self) { in ircomm_tty_install()
384 self = kzalloc(sizeof(struct ircomm_tty_cb), GFP_KERNEL); in ircomm_tty_install()
385 if (self == NULL) in ircomm_tty_install()
388 tty_port_init(&self->port); in ircomm_tty_install()
389 self->port.ops = &ircomm_port_ops; in ircomm_tty_install()
390 self->magic = IRCOMM_TTY_MAGIC; in ircomm_tty_install()
391 self->flow = FLOW_STOP; in ircomm_tty_install()
393 self->line = line; in ircomm_tty_install()
394 INIT_WORK(&self->tqueue, ircomm_tty_do_softint); in ircomm_tty_install()
395 self->max_header_size = IRCOMM_TTY_HDR_UNINITIALISED; in ircomm_tty_install()
396 self->max_data_size = IRCOMM_TTY_DATA_UNINITIALISED; in ircomm_tty_install()
399 init_timer(&self->watchdog_timer); in ircomm_tty_install()
400 spin_lock_init(&self->spinlock); in ircomm_tty_install()
413 hashbin_insert(ircomm_tty, (irda_queue_t *) self, line, NULL); in ircomm_tty_install()
416 tty->driver_data = self; in ircomm_tty_install()
418 return tty_port_install(&self->port, driver, tty); in ircomm_tty_install()
430 struct ircomm_tty_cb *self = tty->driver_data; in ircomm_tty_open() local
435 spin_lock_irqsave(&self->port.lock, flags); in ircomm_tty_open()
436 self->port.count++; in ircomm_tty_open()
437 spin_unlock_irqrestore(&self->port.lock, flags); in ircomm_tty_open()
438 tty_port_tty_set(&self->port, tty); in ircomm_tty_open()
441 self->line, self->port.count); in ircomm_tty_open()
444 self->port.low_latency = (self->port.flags & ASYNC_LOW_LATENCY) ? 1 : 0; in ircomm_tty_open()
449 if (test_bit(ASYNCB_CLOSING, &self->port.flags)) { in ircomm_tty_open()
459 if (wait_event_interruptible(self->port.close_wait, in ircomm_tty_open()
460 !test_bit(ASYNCB_CLOSING, &self->port.flags))) { in ircomm_tty_open()
467 return (self->port.flags & ASYNC_HUP_NOTIFY) ? in ircomm_tty_open()
475 if (self->line < 0x10) { in ircomm_tty_open()
476 self->service_type = IRCOMM_3_WIRE | IRCOMM_9_WIRE; in ircomm_tty_open()
477 self->settings.service_type = IRCOMM_9_WIRE; /* 9 wire as default */ in ircomm_tty_open()
479 self->settings.dce = IRCOMM_CTS | IRCOMM_CD | IRCOMM_DSR | IRCOMM_RI; /* Default line settings */ in ircomm_tty_open()
483 self->service_type = IRCOMM_3_WIRE_RAW; in ircomm_tty_open()
484 self->settings.service_type = IRCOMM_3_WIRE_RAW; /* Default */ in ircomm_tty_open()
487 ret = ircomm_tty_startup(self); in ircomm_tty_open()
491 ret = ircomm_tty_block_til_ready(self, tty, filp); in ircomm_tty_open()
509 struct ircomm_tty_cb *self = (struct ircomm_tty_cb *) tty->driver_data; in ircomm_tty_close() local
510 struct tty_port *port = &self->port; in ircomm_tty_close()
512 IRDA_ASSERT(self != NULL, return;); in ircomm_tty_close()
513 IRDA_ASSERT(self->magic == IRCOMM_TTY_MAGIC, return;); in ircomm_tty_close()
518 ircomm_tty_shutdown(self); in ircomm_tty_close()
534 struct ircomm_tty_cb *self = (struct ircomm_tty_cb *) tty->driver_data; in ircomm_tty_flush_buffer() local
536 IRDA_ASSERT(self != NULL, return;); in ircomm_tty_flush_buffer()
537 IRDA_ASSERT(self->magic == IRCOMM_TTY_MAGIC, return;); in ircomm_tty_flush_buffer()
543 schedule_work(&self->tqueue); in ircomm_tty_flush_buffer()
555 struct ircomm_tty_cb *self = in ircomm_tty_do_softint() local
561 if (!self || self->magic != IRCOMM_TTY_MAGIC) in ircomm_tty_do_softint()
564 tty = tty_port_tty_get(&self->port); in ircomm_tty_do_softint()
569 spin_lock_irqsave(&self->spinlock, flags); in ircomm_tty_do_softint()
571 ctrl_skb = self->ctrl_skb; in ircomm_tty_do_softint()
572 self->ctrl_skb = NULL; in ircomm_tty_do_softint()
574 spin_unlock_irqrestore(&self->spinlock, flags); in ircomm_tty_do_softint()
578 if(self->flow == FLOW_START) in ircomm_tty_do_softint()
579 ircomm_control_request(self->ircomm, ctrl_skb); in ircomm_tty_do_softint()
588 spin_lock_irqsave(&self->spinlock, flags); in ircomm_tty_do_softint()
590 skb = self->tx_skb; in ircomm_tty_do_softint()
591 self->tx_skb = NULL; in ircomm_tty_do_softint()
593 spin_unlock_irqrestore(&self->spinlock, flags); in ircomm_tty_do_softint()
597 ircomm_tty_do_event(self, IRCOMM_TTY_DATA_REQUEST, skb, NULL); in ircomm_tty_do_softint()
619 struct ircomm_tty_cb *self = (struct ircomm_tty_cb *) tty->driver_data; in ircomm_tty_write() local
629 IRDA_ASSERT(self != NULL, return -1;); in ircomm_tty_write()
630 IRDA_ASSERT(self->magic == IRCOMM_TTY_MAGIC, return -1;); in ircomm_tty_write()
648 if (self->max_header_size == IRCOMM_TTY_HDR_UNINITIALISED) { in ircomm_tty_write()
660 spin_lock_irqsave(&self->spinlock, flags); in ircomm_tty_write()
663 skb = self->tx_skb; in ircomm_tty_write()
677 if (size > self->max_data_size) in ircomm_tty_write()
678 size = self->max_data_size; in ircomm_tty_write()
694 if ((tailroom = (self->tx_data_size - skb->len)) > 0) { in ircomm_tty_write()
707 skb = alloc_skb(self->max_data_size+ in ircomm_tty_write()
708 self->max_header_size, in ircomm_tty_write()
711 spin_unlock_irqrestore(&self->spinlock, flags); in ircomm_tty_write()
714 skb_reserve(skb, self->max_header_size); in ircomm_tty_write()
715 self->tx_skb = skb; in ircomm_tty_write()
718 self->tx_data_size = self->max_data_size; in ircomm_tty_write()
728 spin_unlock_irqrestore(&self->spinlock, flags); in ircomm_tty_write()
737 schedule_work(&self->tqueue); in ircomm_tty_write()
751 struct ircomm_tty_cb *self = (struct ircomm_tty_cb *) tty->driver_data; in ircomm_tty_write_room() local
755 IRDA_ASSERT(self != NULL, return -1;); in ircomm_tty_write_room()
756 IRDA_ASSERT(self->magic == IRCOMM_TTY_MAGIC, return -1;); in ircomm_tty_write_room()
760 if (self->max_header_size == IRCOMM_TTY_HDR_UNINITIALISED) in ircomm_tty_write_room()
771 spin_lock_irqsave(&self->spinlock, flags); in ircomm_tty_write_room()
772 if (self->tx_skb) in ircomm_tty_write_room()
773 ret = self->tx_data_size - self->tx_skb->len; in ircomm_tty_write_room()
775 ret = self->max_data_size; in ircomm_tty_write_room()
776 spin_unlock_irqrestore(&self->spinlock, flags); in ircomm_tty_write_room()
791 struct ircomm_tty_cb *self = (struct ircomm_tty_cb *) tty->driver_data; in ircomm_tty_wait_until_sent() local
795 IRDA_ASSERT(self != NULL, return;); in ircomm_tty_wait_until_sent()
796 IRDA_ASSERT(self->magic == IRCOMM_TTY_MAGIC, return;); in ircomm_tty_wait_until_sent()
805 spin_lock_irqsave(&self->spinlock, flags); in ircomm_tty_wait_until_sent()
806 while (self->tx_skb && self->tx_skb->len) { in ircomm_tty_wait_until_sent()
807 spin_unlock_irqrestore(&self->spinlock, flags); in ircomm_tty_wait_until_sent()
809 spin_lock_irqsave(&self->spinlock, flags); in ircomm_tty_wait_until_sent()
815 spin_unlock_irqrestore(&self->spinlock, flags); in ircomm_tty_wait_until_sent()
828 struct ircomm_tty_cb *self = (struct ircomm_tty_cb *) tty->driver_data; in ircomm_tty_throttle() local
830 IRDA_ASSERT(self != NULL, return;); in ircomm_tty_throttle()
831 IRDA_ASSERT(self->magic == IRCOMM_TTY_MAGIC, return;); in ircomm_tty_throttle()
839 self->settings.dte &= ~IRCOMM_RTS; in ircomm_tty_throttle()
840 self->settings.dte |= IRCOMM_DELTA_RTS; in ircomm_tty_throttle()
842 ircomm_param_request(self, IRCOMM_DTE, TRUE); in ircomm_tty_throttle()
845 ircomm_flow_request(self->ircomm, FLOW_STOP); in ircomm_tty_throttle()
857 struct ircomm_tty_cb *self = (struct ircomm_tty_cb *) tty->driver_data; in ircomm_tty_unthrottle() local
859 IRDA_ASSERT(self != NULL, return;); in ircomm_tty_unthrottle()
860 IRDA_ASSERT(self->magic == IRCOMM_TTY_MAGIC, return;); in ircomm_tty_unthrottle()
869 self->settings.dte |= (IRCOMM_RTS|IRCOMM_DELTA_RTS); in ircomm_tty_unthrottle()
871 ircomm_param_request(self, IRCOMM_DTE, TRUE); in ircomm_tty_unthrottle()
874 ircomm_flow_request(self->ircomm, FLOW_START); in ircomm_tty_unthrottle()
885 struct ircomm_tty_cb *self = (struct ircomm_tty_cb *) tty->driver_data; in ircomm_tty_chars_in_buffer() local
889 IRDA_ASSERT(self != NULL, return -1;); in ircomm_tty_chars_in_buffer()
890 IRDA_ASSERT(self->magic == IRCOMM_TTY_MAGIC, return -1;); in ircomm_tty_chars_in_buffer()
892 spin_lock_irqsave(&self->spinlock, flags); in ircomm_tty_chars_in_buffer()
894 if (self->tx_skb) in ircomm_tty_chars_in_buffer()
895 len = self->tx_skb->len; in ircomm_tty_chars_in_buffer()
897 spin_unlock_irqrestore(&self->spinlock, flags); in ircomm_tty_chars_in_buffer()
902 static void ircomm_tty_shutdown(struct ircomm_tty_cb *self) in ircomm_tty_shutdown() argument
906 IRDA_ASSERT(self != NULL, return;); in ircomm_tty_shutdown()
907 IRDA_ASSERT(self->magic == IRCOMM_TTY_MAGIC, return;); in ircomm_tty_shutdown()
909 if (!test_and_clear_bit(ASYNCB_INITIALIZED, &self->port.flags)) in ircomm_tty_shutdown()
912 ircomm_tty_detach_cable(self); in ircomm_tty_shutdown()
914 spin_lock_irqsave(&self->spinlock, flags); in ircomm_tty_shutdown()
916 del_timer(&self->watchdog_timer); in ircomm_tty_shutdown()
919 if (self->ctrl_skb) { in ircomm_tty_shutdown()
920 dev_kfree_skb(self->ctrl_skb); in ircomm_tty_shutdown()
921 self->ctrl_skb = NULL; in ircomm_tty_shutdown()
925 if (self->tx_skb) { in ircomm_tty_shutdown()
926 dev_kfree_skb(self->tx_skb); in ircomm_tty_shutdown()
927 self->tx_skb = NULL; in ircomm_tty_shutdown()
930 if (self->ircomm) { in ircomm_tty_shutdown()
931 ircomm_close(self->ircomm); in ircomm_tty_shutdown()
932 self->ircomm = NULL; in ircomm_tty_shutdown()
935 spin_unlock_irqrestore(&self->spinlock, flags); in ircomm_tty_shutdown()
947 struct ircomm_tty_cb *self = (struct ircomm_tty_cb *) tty->driver_data; in ircomm_tty_hangup() local
948 struct tty_port *port = &self->port; in ircomm_tty_hangup()
951 IRDA_ASSERT(self != NULL, return;); in ircomm_tty_hangup()
952 IRDA_ASSERT(self->magic == IRCOMM_TTY_MAGIC, return;); in ircomm_tty_hangup()
955 ircomm_tty_shutdown(self); in ircomm_tty_hangup()
989 struct ircomm_tty_cb *self = (struct ircomm_tty_cb *) tty->driver_data; in ircomm_tty_start() local
991 ircomm_flow_request(self->ircomm, FLOW_START); in ircomm_tty_start()
1002 struct ircomm_tty_cb *self = (struct ircomm_tty_cb *) tty->driver_data; in ircomm_tty_stop() local
1004 IRDA_ASSERT(self != NULL, return;); in ircomm_tty_stop()
1005 IRDA_ASSERT(self->magic == IRCOMM_TTY_MAGIC, return;); in ircomm_tty_stop()
1007 ircomm_flow_request(self->ircomm, FLOW_STOP); in ircomm_tty_stop()
1017 void ircomm_tty_check_modem_status(struct ircomm_tty_cb *self) in ircomm_tty_check_modem_status() argument
1022 IRDA_ASSERT(self != NULL, return;); in ircomm_tty_check_modem_status()
1023 IRDA_ASSERT(self->magic == IRCOMM_TTY_MAGIC, return;); in ircomm_tty_check_modem_status()
1025 tty = tty_port_tty_get(&self->port); in ircomm_tty_check_modem_status()
1027 status = self->settings.dce; in ircomm_tty_check_modem_status()
1032 if ((self->port.flags & ASYNC_CHECK_CD) && (status & IRCOMM_DELTA_CD)) { in ircomm_tty_check_modem_status()
1033 pr_debug("%s(), ircomm%d CD now %s...\n", __func__ , self->line, in ircomm_tty_check_modem_status()
1037 wake_up_interruptible(&self->port.open_wait); in ircomm_tty_check_modem_status()
1047 if (tty && tty_port_cts_enabled(&self->port)) { in ircomm_tty_check_modem_status()
1054 wake_up_interruptible(&self->port.open_wait); in ircomm_tty_check_modem_status()
1056 schedule_work(&self->tqueue); in ircomm_tty_check_modem_status()
1079 struct ircomm_tty_cb *self = (struct ircomm_tty_cb *) instance; in ircomm_tty_data_indication() local
1082 IRDA_ASSERT(self != NULL, return -1;); in ircomm_tty_data_indication()
1083 IRDA_ASSERT(self->magic == IRCOMM_TTY_MAGIC, return -1;); in ircomm_tty_data_indication()
1086 tty = tty_port_tty_get(&self->port); in ircomm_tty_data_indication()
1098 if (tty->hw_stopped && (self->flow == FLOW_START)) { in ircomm_tty_data_indication()
1100 ircomm_param_request(self, IRCOMM_POLL, TRUE); in ircomm_tty_data_indication()
1103 ircomm_tty_send_initial_parameters(self); in ircomm_tty_data_indication()
1104 ircomm_tty_link_established(self); in ircomm_tty_data_indication()
1112 tty_insert_flip_string(&self->port, skb->data, skb->len); in ircomm_tty_data_indication()
1113 tty_flip_buffer_push(&self->port); in ircomm_tty_data_indication()
1129 struct ircomm_tty_cb *self = (struct ircomm_tty_cb *) instance; in ircomm_tty_control_indication() local
1132 IRDA_ASSERT(self != NULL, return -1;); in ircomm_tty_control_indication()
1133 IRDA_ASSERT(self->magic == IRCOMM_TTY_MAGIC, return -1;); in ircomm_tty_control_indication()
1138 irda_param_extract_all(self, skb->data+1, IRDA_MIN(skb->len-1, clen), in ircomm_tty_control_indication()
1156 struct ircomm_tty_cb *self = (struct ircomm_tty_cb *) instance; in ircomm_tty_flow_indication() local
1159 IRDA_ASSERT(self != NULL, return;); in ircomm_tty_flow_indication()
1160 IRDA_ASSERT(self->magic == IRCOMM_TTY_MAGIC, return;); in ircomm_tty_flow_indication()
1162 tty = tty_port_tty_get(&self->port); in ircomm_tty_flow_indication()
1171 schedule_work(&self->tqueue); in ircomm_tty_flow_indication()
1182 self->flow = cmd; in ircomm_tty_flow_indication()
1186 static void ircomm_tty_line_info(struct ircomm_tty_cb *self, struct seq_file *m) in ircomm_tty_line_info() argument
1191 seq_printf(m, "State: %s\n", ircomm_tty_state[self->state]); in ircomm_tty_line_info()
1194 if (self->service_type & IRCOMM_9_WIRE) in ircomm_tty_line_info()
1196 else if (self->service_type & IRCOMM_3_WIRE) in ircomm_tty_line_info()
1198 else if (self->service_type & IRCOMM_3_WIRE_RAW) in ircomm_tty_line_info()
1204 seq_printf(m, "Port name: %s\n", self->settings.port_name); in ircomm_tty_line_info()
1208 if (self->settings.dte & IRCOMM_RTS) { in ircomm_tty_line_info()
1212 if (self->settings.dte & IRCOMM_DTR) { in ircomm_tty_line_info()
1220 if (self->settings.dce & IRCOMM_CTS) { in ircomm_tty_line_info()
1224 if (self->settings.dce & IRCOMM_DSR) { in ircomm_tty_line_info()
1228 if (self->settings.dce & IRCOMM_CD) { in ircomm_tty_line_info()
1232 if (self->settings.dce & IRCOMM_RI) { in ircomm_tty_line_info()
1239 if (!self->settings.null_modem) in ircomm_tty_line_info()
1244 seq_printf(m, "Data rate: %d\n", self->settings.data_rate); in ircomm_tty_line_info()
1248 if (self->settings.flow_control & IRCOMM_XON_XOFF_IN) { in ircomm_tty_line_info()
1252 if (self->settings.flow_control & IRCOMM_XON_XOFF_OUT) { in ircomm_tty_line_info()
1256 if (self->settings.flow_control & IRCOMM_RTS_CTS_IN) { in ircomm_tty_line_info()
1260 if (self->settings.flow_control & IRCOMM_RTS_CTS_OUT) { in ircomm_tty_line_info()
1264 if (self->settings.flow_control & IRCOMM_DSR_DTR_IN) { in ircomm_tty_line_info()
1268 if (self->settings.flow_control & IRCOMM_DSR_DTR_OUT) { in ircomm_tty_line_info()
1272 if (self->settings.flow_control & IRCOMM_ENQ_ACK_IN) { in ircomm_tty_line_info()
1276 if (self->settings.flow_control & IRCOMM_ENQ_ACK_OUT) { in ircomm_tty_line_info()
1284 if (tty_port_cts_enabled(&self->port)) { in ircomm_tty_line_info()
1288 if (self->port.flags & ASYNC_CHECK_CD) { in ircomm_tty_line_info()
1292 if (self->port.flags & ASYNC_INITIALIZED) { in ircomm_tty_line_info()
1296 if (self->port.flags & ASYNC_LOW_LATENCY) { in ircomm_tty_line_info()
1300 if (self->port.flags & ASYNC_CLOSING) { in ircomm_tty_line_info()
1304 if (self->port.flags & ASYNC_NORMAL_ACTIVE) { in ircomm_tty_line_info()
1310 seq_printf(m, "Role: %s\n", self->client ? "client" : "server"); in ircomm_tty_line_info()
1311 seq_printf(m, "Open count: %d\n", self->port.count); in ircomm_tty_line_info()
1312 seq_printf(m, "Max data size: %d\n", self->max_data_size); in ircomm_tty_line_info()
1313 seq_printf(m, "Max header size: %d\n", self->max_header_size); in ircomm_tty_line_info()
1315 tty = tty_port_tty_get(&self->port); in ircomm_tty_line_info()
1325 struct ircomm_tty_cb *self; in ircomm_tty_proc_show() local
1330 self = (struct ircomm_tty_cb *) hashbin_get_first(ircomm_tty); in ircomm_tty_proc_show()
1331 while (self != NULL) { in ircomm_tty_proc_show()
1332 if (self->magic != IRCOMM_TTY_MAGIC) in ircomm_tty_proc_show()
1335 ircomm_tty_line_info(self, m); in ircomm_tty_proc_show()
1336 self = (struct ircomm_tty_cb *) hashbin_get_next(ircomm_tty); in ircomm_tty_proc_show()