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()
339 self->state == IRCOMM_TTY_READY) in ircomm_tty_block_til_ready()
376 struct ircomm_tty_cb *self; in ircomm_tty_install() local
380 self = hashbin_lock_find(ircomm_tty, line, NULL); in ircomm_tty_install()
381 if (!self) { in ircomm_tty_install()
383 self = kzalloc(sizeof(struct ircomm_tty_cb), GFP_KERNEL); in ircomm_tty_install()
384 if (self == NULL) in ircomm_tty_install()
387 tty_port_init(&self->port); in ircomm_tty_install()
388 self->port.ops = &ircomm_port_ops; in ircomm_tty_install()
389 self->magic = IRCOMM_TTY_MAGIC; in ircomm_tty_install()
390 self->flow = FLOW_STOP; in ircomm_tty_install()
392 self->line = line; in ircomm_tty_install()
393 INIT_WORK(&self->tqueue, ircomm_tty_do_softint); in ircomm_tty_install()
394 self->max_header_size = IRCOMM_TTY_HDR_UNINITIALISED; in ircomm_tty_install()
395 self->max_data_size = IRCOMM_TTY_DATA_UNINITIALISED; in ircomm_tty_install()
398 init_timer(&self->watchdog_timer); in ircomm_tty_install()
399 spin_lock_init(&self->spinlock); in ircomm_tty_install()
412 hashbin_insert(ircomm_tty, (irda_queue_t *) self, line, NULL); in ircomm_tty_install()
415 tty->driver_data = self; in ircomm_tty_install()
417 return tty_port_install(&self->port, driver, tty); in ircomm_tty_install()
429 struct ircomm_tty_cb *self = tty->driver_data; in ircomm_tty_open() local
434 spin_lock_irqsave(&self->port.lock, flags); in ircomm_tty_open()
435 self->port.count++; in ircomm_tty_open()
436 spin_unlock_irqrestore(&self->port.lock, flags); in ircomm_tty_open()
437 tty_port_tty_set(&self->port, tty); in ircomm_tty_open()
440 self->line, self->port.count); in ircomm_tty_open()
443 self->port.low_latency = (self->port.flags & ASYNC_LOW_LATENCY) ? 1 : 0; in ircomm_tty_open()
446 if (self->line < 0x10) { in ircomm_tty_open()
447 self->service_type = IRCOMM_3_WIRE | IRCOMM_9_WIRE; in ircomm_tty_open()
448 self->settings.service_type = IRCOMM_9_WIRE; /* 9 wire as default */ in ircomm_tty_open()
450 self->settings.dce = IRCOMM_CTS | IRCOMM_CD | IRCOMM_DSR | IRCOMM_RI; /* Default line settings */ in ircomm_tty_open()
454 self->service_type = IRCOMM_3_WIRE_RAW; in ircomm_tty_open()
455 self->settings.service_type = IRCOMM_3_WIRE_RAW; /* Default */ in ircomm_tty_open()
458 ret = ircomm_tty_startup(self); in ircomm_tty_open()
462 ret = ircomm_tty_block_til_ready(self, tty, filp); in ircomm_tty_open()
480 struct ircomm_tty_cb *self = (struct ircomm_tty_cb *) tty->driver_data; in ircomm_tty_close() local
481 struct tty_port *port = &self->port; in ircomm_tty_close()
483 IRDA_ASSERT(self != NULL, return;); in ircomm_tty_close()
484 IRDA_ASSERT(self->magic == IRCOMM_TTY_MAGIC, return;); in ircomm_tty_close()
489 ircomm_tty_shutdown(self); in ircomm_tty_close()
505 struct ircomm_tty_cb *self = (struct ircomm_tty_cb *) tty->driver_data; in ircomm_tty_flush_buffer() local
507 IRDA_ASSERT(self != NULL, return;); in ircomm_tty_flush_buffer()
508 IRDA_ASSERT(self->magic == IRCOMM_TTY_MAGIC, return;); in ircomm_tty_flush_buffer()
514 schedule_work(&self->tqueue); in ircomm_tty_flush_buffer()
526 struct ircomm_tty_cb *self = in ircomm_tty_do_softint() local
532 if (!self || self->magic != IRCOMM_TTY_MAGIC) in ircomm_tty_do_softint()
535 tty = tty_port_tty_get(&self->port); in ircomm_tty_do_softint()
540 spin_lock_irqsave(&self->spinlock, flags); in ircomm_tty_do_softint()
542 ctrl_skb = self->ctrl_skb; in ircomm_tty_do_softint()
543 self->ctrl_skb = NULL; in ircomm_tty_do_softint()
545 spin_unlock_irqrestore(&self->spinlock, flags); in ircomm_tty_do_softint()
549 if(self->flow == FLOW_START) in ircomm_tty_do_softint()
550 ircomm_control_request(self->ircomm, ctrl_skb); in ircomm_tty_do_softint()
559 spin_lock_irqsave(&self->spinlock, flags); in ircomm_tty_do_softint()
561 skb = self->tx_skb; in ircomm_tty_do_softint()
562 self->tx_skb = NULL; in ircomm_tty_do_softint()
564 spin_unlock_irqrestore(&self->spinlock, flags); in ircomm_tty_do_softint()
568 ircomm_tty_do_event(self, IRCOMM_TTY_DATA_REQUEST, skb, NULL); in ircomm_tty_do_softint()
590 struct ircomm_tty_cb *self = (struct ircomm_tty_cb *) tty->driver_data; in ircomm_tty_write() local
600 IRDA_ASSERT(self != NULL, return -1;); in ircomm_tty_write()
601 IRDA_ASSERT(self->magic == IRCOMM_TTY_MAGIC, return -1;); in ircomm_tty_write()
619 if (self->max_header_size == IRCOMM_TTY_HDR_UNINITIALISED) { in ircomm_tty_write()
631 spin_lock_irqsave(&self->spinlock, flags); in ircomm_tty_write()
634 skb = self->tx_skb; in ircomm_tty_write()
648 if (size > self->max_data_size) in ircomm_tty_write()
649 size = self->max_data_size; in ircomm_tty_write()
665 if ((tailroom = (self->tx_data_size - skb->len)) > 0) { in ircomm_tty_write()
678 skb = alloc_skb(self->max_data_size+ in ircomm_tty_write()
679 self->max_header_size, in ircomm_tty_write()
682 spin_unlock_irqrestore(&self->spinlock, flags); in ircomm_tty_write()
685 skb_reserve(skb, self->max_header_size); in ircomm_tty_write()
686 self->tx_skb = skb; in ircomm_tty_write()
689 self->tx_data_size = self->max_data_size; in ircomm_tty_write()
699 spin_unlock_irqrestore(&self->spinlock, flags); in ircomm_tty_write()
708 schedule_work(&self->tqueue); in ircomm_tty_write()
722 struct ircomm_tty_cb *self = (struct ircomm_tty_cb *) tty->driver_data; in ircomm_tty_write_room() local
726 IRDA_ASSERT(self != NULL, return -1;); in ircomm_tty_write_room()
727 IRDA_ASSERT(self->magic == IRCOMM_TTY_MAGIC, return -1;); in ircomm_tty_write_room()
731 if (self->max_header_size == IRCOMM_TTY_HDR_UNINITIALISED) in ircomm_tty_write_room()
742 spin_lock_irqsave(&self->spinlock, flags); in ircomm_tty_write_room()
743 if (self->tx_skb) in ircomm_tty_write_room()
744 ret = self->tx_data_size - self->tx_skb->len; in ircomm_tty_write_room()
746 ret = self->max_data_size; in ircomm_tty_write_room()
747 spin_unlock_irqrestore(&self->spinlock, flags); in ircomm_tty_write_room()
762 struct ircomm_tty_cb *self = (struct ircomm_tty_cb *) tty->driver_data; in ircomm_tty_wait_until_sent() local
766 IRDA_ASSERT(self != NULL, return;); in ircomm_tty_wait_until_sent()
767 IRDA_ASSERT(self->magic == IRCOMM_TTY_MAGIC, return;); in ircomm_tty_wait_until_sent()
776 spin_lock_irqsave(&self->spinlock, flags); in ircomm_tty_wait_until_sent()
777 while (self->tx_skb && self->tx_skb->len) { in ircomm_tty_wait_until_sent()
778 spin_unlock_irqrestore(&self->spinlock, flags); in ircomm_tty_wait_until_sent()
780 spin_lock_irqsave(&self->spinlock, flags); in ircomm_tty_wait_until_sent()
786 spin_unlock_irqrestore(&self->spinlock, flags); in ircomm_tty_wait_until_sent()
799 struct ircomm_tty_cb *self = (struct ircomm_tty_cb *) tty->driver_data; in ircomm_tty_throttle() local
801 IRDA_ASSERT(self != NULL, return;); in ircomm_tty_throttle()
802 IRDA_ASSERT(self->magic == IRCOMM_TTY_MAGIC, return;); in ircomm_tty_throttle()
810 self->settings.dte &= ~IRCOMM_RTS; in ircomm_tty_throttle()
811 self->settings.dte |= IRCOMM_DELTA_RTS; in ircomm_tty_throttle()
813 ircomm_param_request(self, IRCOMM_DTE, TRUE); in ircomm_tty_throttle()
816 ircomm_flow_request(self->ircomm, FLOW_STOP); in ircomm_tty_throttle()
828 struct ircomm_tty_cb *self = (struct ircomm_tty_cb *) tty->driver_data; in ircomm_tty_unthrottle() local
830 IRDA_ASSERT(self != NULL, return;); in ircomm_tty_unthrottle()
831 IRDA_ASSERT(self->magic == IRCOMM_TTY_MAGIC, return;); in ircomm_tty_unthrottle()
840 self->settings.dte |= (IRCOMM_RTS|IRCOMM_DELTA_RTS); in ircomm_tty_unthrottle()
842 ircomm_param_request(self, IRCOMM_DTE, TRUE); in ircomm_tty_unthrottle()
845 ircomm_flow_request(self->ircomm, FLOW_START); in ircomm_tty_unthrottle()
856 struct ircomm_tty_cb *self = (struct ircomm_tty_cb *) tty->driver_data; in ircomm_tty_chars_in_buffer() local
860 IRDA_ASSERT(self != NULL, return -1;); in ircomm_tty_chars_in_buffer()
861 IRDA_ASSERT(self->magic == IRCOMM_TTY_MAGIC, return -1;); in ircomm_tty_chars_in_buffer()
863 spin_lock_irqsave(&self->spinlock, flags); in ircomm_tty_chars_in_buffer()
865 if (self->tx_skb) in ircomm_tty_chars_in_buffer()
866 len = self->tx_skb->len; in ircomm_tty_chars_in_buffer()
868 spin_unlock_irqrestore(&self->spinlock, flags); in ircomm_tty_chars_in_buffer()
873 static void ircomm_tty_shutdown(struct ircomm_tty_cb *self) in ircomm_tty_shutdown() argument
877 IRDA_ASSERT(self != NULL, return;); in ircomm_tty_shutdown()
878 IRDA_ASSERT(self->magic == IRCOMM_TTY_MAGIC, return;); in ircomm_tty_shutdown()
880 if (!test_and_clear_bit(ASYNCB_INITIALIZED, &self->port.flags)) in ircomm_tty_shutdown()
883 ircomm_tty_detach_cable(self); in ircomm_tty_shutdown()
885 spin_lock_irqsave(&self->spinlock, flags); in ircomm_tty_shutdown()
887 del_timer(&self->watchdog_timer); in ircomm_tty_shutdown()
890 if (self->ctrl_skb) { in ircomm_tty_shutdown()
891 dev_kfree_skb(self->ctrl_skb); in ircomm_tty_shutdown()
892 self->ctrl_skb = NULL; in ircomm_tty_shutdown()
896 if (self->tx_skb) { in ircomm_tty_shutdown()
897 dev_kfree_skb(self->tx_skb); in ircomm_tty_shutdown()
898 self->tx_skb = NULL; in ircomm_tty_shutdown()
901 if (self->ircomm) { in ircomm_tty_shutdown()
902 ircomm_close(self->ircomm); in ircomm_tty_shutdown()
903 self->ircomm = NULL; in ircomm_tty_shutdown()
906 spin_unlock_irqrestore(&self->spinlock, flags); in ircomm_tty_shutdown()
918 struct ircomm_tty_cb *self = (struct ircomm_tty_cb *) tty->driver_data; in ircomm_tty_hangup() local
919 struct tty_port *port = &self->port; in ircomm_tty_hangup()
922 IRDA_ASSERT(self != NULL, return;); in ircomm_tty_hangup()
923 IRDA_ASSERT(self->magic == IRCOMM_TTY_MAGIC, return;); in ircomm_tty_hangup()
926 ircomm_tty_shutdown(self); in ircomm_tty_hangup()
960 struct ircomm_tty_cb *self = (struct ircomm_tty_cb *) tty->driver_data; in ircomm_tty_start() local
962 ircomm_flow_request(self->ircomm, FLOW_START); in ircomm_tty_start()
973 struct ircomm_tty_cb *self = (struct ircomm_tty_cb *) tty->driver_data; in ircomm_tty_stop() local
975 IRDA_ASSERT(self != NULL, return;); in ircomm_tty_stop()
976 IRDA_ASSERT(self->magic == IRCOMM_TTY_MAGIC, return;); in ircomm_tty_stop()
978 ircomm_flow_request(self->ircomm, FLOW_STOP); in ircomm_tty_stop()
988 void ircomm_tty_check_modem_status(struct ircomm_tty_cb *self) in ircomm_tty_check_modem_status() argument
993 IRDA_ASSERT(self != NULL, return;); in ircomm_tty_check_modem_status()
994 IRDA_ASSERT(self->magic == IRCOMM_TTY_MAGIC, return;); in ircomm_tty_check_modem_status()
996 tty = tty_port_tty_get(&self->port); in ircomm_tty_check_modem_status()
998 status = self->settings.dce; in ircomm_tty_check_modem_status()
1003 if ((self->port.flags & ASYNC_CHECK_CD) && (status & IRCOMM_DELTA_CD)) { in ircomm_tty_check_modem_status()
1004 pr_debug("%s(), ircomm%d CD now %s...\n", __func__ , self->line, in ircomm_tty_check_modem_status()
1008 wake_up_interruptible(&self->port.open_wait); in ircomm_tty_check_modem_status()
1018 if (tty && tty_port_cts_enabled(&self->port)) { in ircomm_tty_check_modem_status()
1025 wake_up_interruptible(&self->port.open_wait); in ircomm_tty_check_modem_status()
1027 schedule_work(&self->tqueue); in ircomm_tty_check_modem_status()
1050 struct ircomm_tty_cb *self = (struct ircomm_tty_cb *) instance; in ircomm_tty_data_indication() local
1053 IRDA_ASSERT(self != NULL, return -1;); in ircomm_tty_data_indication()
1054 IRDA_ASSERT(self->magic == IRCOMM_TTY_MAGIC, return -1;); in ircomm_tty_data_indication()
1057 tty = tty_port_tty_get(&self->port); in ircomm_tty_data_indication()
1069 if (tty->hw_stopped && (self->flow == FLOW_START)) { in ircomm_tty_data_indication()
1071 ircomm_param_request(self, IRCOMM_POLL, TRUE); in ircomm_tty_data_indication()
1074 ircomm_tty_send_initial_parameters(self); in ircomm_tty_data_indication()
1075 ircomm_tty_link_established(self); in ircomm_tty_data_indication()
1083 tty_insert_flip_string(&self->port, skb->data, skb->len); in ircomm_tty_data_indication()
1084 tty_flip_buffer_push(&self->port); in ircomm_tty_data_indication()
1100 struct ircomm_tty_cb *self = (struct ircomm_tty_cb *) instance; in ircomm_tty_control_indication() local
1103 IRDA_ASSERT(self != NULL, return -1;); in ircomm_tty_control_indication()
1104 IRDA_ASSERT(self->magic == IRCOMM_TTY_MAGIC, return -1;); in ircomm_tty_control_indication()
1109 irda_param_extract_all(self, skb->data+1, IRDA_MIN(skb->len-1, clen), in ircomm_tty_control_indication()
1127 struct ircomm_tty_cb *self = (struct ircomm_tty_cb *) instance; in ircomm_tty_flow_indication() local
1130 IRDA_ASSERT(self != NULL, return;); in ircomm_tty_flow_indication()
1131 IRDA_ASSERT(self->magic == IRCOMM_TTY_MAGIC, return;); in ircomm_tty_flow_indication()
1133 tty = tty_port_tty_get(&self->port); in ircomm_tty_flow_indication()
1142 schedule_work(&self->tqueue); in ircomm_tty_flow_indication()
1153 self->flow = cmd; in ircomm_tty_flow_indication()
1157 static void ircomm_tty_line_info(struct ircomm_tty_cb *self, struct seq_file *m) in ircomm_tty_line_info() argument
1162 seq_printf(m, "State: %s\n", ircomm_tty_state[self->state]); in ircomm_tty_line_info()
1165 if (self->service_type & IRCOMM_9_WIRE) in ircomm_tty_line_info()
1167 else if (self->service_type & IRCOMM_3_WIRE) in ircomm_tty_line_info()
1169 else if (self->service_type & IRCOMM_3_WIRE_RAW) in ircomm_tty_line_info()
1175 seq_printf(m, "Port name: %s\n", self->settings.port_name); in ircomm_tty_line_info()
1179 if (self->settings.dte & IRCOMM_RTS) { in ircomm_tty_line_info()
1183 if (self->settings.dte & IRCOMM_DTR) { in ircomm_tty_line_info()
1191 if (self->settings.dce & IRCOMM_CTS) { in ircomm_tty_line_info()
1195 if (self->settings.dce & IRCOMM_DSR) { in ircomm_tty_line_info()
1199 if (self->settings.dce & IRCOMM_CD) { in ircomm_tty_line_info()
1203 if (self->settings.dce & IRCOMM_RI) { in ircomm_tty_line_info()
1210 if (!self->settings.null_modem) in ircomm_tty_line_info()
1215 seq_printf(m, "Data rate: %d\n", self->settings.data_rate); in ircomm_tty_line_info()
1219 if (self->settings.flow_control & IRCOMM_XON_XOFF_IN) { in ircomm_tty_line_info()
1223 if (self->settings.flow_control & IRCOMM_XON_XOFF_OUT) { in ircomm_tty_line_info()
1227 if (self->settings.flow_control & IRCOMM_RTS_CTS_IN) { in ircomm_tty_line_info()
1231 if (self->settings.flow_control & IRCOMM_RTS_CTS_OUT) { in ircomm_tty_line_info()
1235 if (self->settings.flow_control & IRCOMM_DSR_DTR_IN) { in ircomm_tty_line_info()
1239 if (self->settings.flow_control & IRCOMM_DSR_DTR_OUT) { in ircomm_tty_line_info()
1243 if (self->settings.flow_control & IRCOMM_ENQ_ACK_IN) { in ircomm_tty_line_info()
1247 if (self->settings.flow_control & IRCOMM_ENQ_ACK_OUT) { in ircomm_tty_line_info()
1255 if (tty_port_cts_enabled(&self->port)) { in ircomm_tty_line_info()
1259 if (self->port.flags & ASYNC_CHECK_CD) { in ircomm_tty_line_info()
1263 if (self->port.flags & ASYNC_INITIALIZED) { in ircomm_tty_line_info()
1267 if (self->port.flags & ASYNC_LOW_LATENCY) { in ircomm_tty_line_info()
1271 if (self->port.flags & ASYNC_CLOSING) { in ircomm_tty_line_info()
1275 if (self->port.flags & ASYNC_NORMAL_ACTIVE) { in ircomm_tty_line_info()
1281 seq_printf(m, "Role: %s\n", self->client ? "client" : "server"); in ircomm_tty_line_info()
1282 seq_printf(m, "Open count: %d\n", self->port.count); in ircomm_tty_line_info()
1283 seq_printf(m, "Max data size: %d\n", self->max_data_size); in ircomm_tty_line_info()
1284 seq_printf(m, "Max header size: %d\n", self->max_header_size); in ircomm_tty_line_info()
1286 tty = tty_port_tty_get(&self->port); in ircomm_tty_line_info()
1296 struct ircomm_tty_cb *self; in ircomm_tty_proc_show() local
1301 self = (struct ircomm_tty_cb *) hashbin_get_first(ircomm_tty); in ircomm_tty_proc_show()
1302 while (self != NULL) { in ircomm_tty_proc_show()
1303 if (self->magic != IRCOMM_TTY_MAGIC) in ircomm_tty_proc_show()
1306 ircomm_tty_line_info(self, m); in ircomm_tty_proc_show()
1307 self = (struct ircomm_tty_cb *) hashbin_get_next(ircomm_tty); in ircomm_tty_proc_show()