1 /********************************************************************* 2 * 3 * Filename: ircomm_tty.h 4 * Version: 5 * Description: 6 * Status: Experimental. 7 * Author: Dag Brattli <dagb@cs.uit.no> 8 * Created at: Sun Jun 6 23:24:22 1999 9 * Modified at: Fri Jan 28 13:16:57 2000 10 * Modified by: Dag Brattli <dagb@cs.uit.no> 11 * 12 * Copyright (c) 1999-2000 Dag Brattli, All Rights Reserved. 13 * 14 * This program is free software; you can redistribute it and/or 15 * modify it under the terms of the GNU General Public License as 16 * published by the Free Software Foundation; either version 2 of 17 * the License, or (at your option) any later version. 18 * 19 * This program is distributed in the hope that it will be useful, 20 * but WITHOUT ANY WARRANTY; without even the implied warranty of 21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 * GNU General Public License for more details. 23 * 24 * You should have received a copy of the GNU General Public License 25 * along with this program; if not, see <http://www.gnu.org/licenses/>. 26 * 27 ********************************************************************/ 28 29 #ifndef IRCOMM_TTY_H 30 #define IRCOMM_TTY_H 31 32 #include <linux/serial.h> 33 #include <linux/termios.h> 34 #include <linux/timer.h> 35 #include <linux/tty.h> /* struct tty_struct */ 36 37 #include <net/irda/irias_object.h> 38 #include <net/irda/ircomm_core.h> 39 #include <net/irda/ircomm_param.h> 40 41 #define IRCOMM_TTY_PORTS 32 42 #define IRCOMM_TTY_MAGIC 0x3432 43 #define IRCOMM_TTY_MAJOR 161 44 #define IRCOMM_TTY_MINOR 0 45 46 /* This is used as an initial value to max_header_size before the proper 47 * value is filled in (5 for ttp, 4 for lmp). This allow us to detect 48 * the state of the underlying connection. - Jean II */ 49 #define IRCOMM_TTY_HDR_UNINITIALISED 16 50 /* Same for payload size. See qos.c for the smallest max data size */ 51 #define IRCOMM_TTY_DATA_UNINITIALISED (64 - IRCOMM_TTY_HDR_UNINITIALISED) 52 53 /* 54 * IrCOMM TTY driver state 55 */ 56 struct ircomm_tty_cb { 57 irda_queue_t queue; /* Must be first */ 58 struct tty_port port; 59 magic_t magic; 60 61 int state; /* Connect state */ 62 63 struct ircomm_cb *ircomm; /* IrCOMM layer instance */ 64 65 struct sk_buff *tx_skb; /* Transmit buffer */ 66 struct sk_buff *ctrl_skb; /* Control data buffer */ 67 68 /* Parameters */ 69 struct ircomm_params settings; 70 71 __u8 service_type; /* The service that we support */ 72 int client; /* True if we are a client */ 73 LOCAL_FLOW flow; /* IrTTP flow status */ 74 75 int line; 76 77 __u8 dlsap_sel; 78 __u8 slsap_sel; 79 80 __u32 saddr; 81 __u32 daddr; 82 83 __u32 max_data_size; /* Max data we can transmit in one packet */ 84 __u32 max_header_size; /* The amount of header space we must reserve */ 85 __u32 tx_data_size; /* Max data size of current tx_skb */ 86 87 struct iriap_cb *iriap; /* Instance used for querying remote IAS */ 88 struct ias_object* obj; 89 void *skey; 90 void *ckey; 91 92 struct timer_list watchdog_timer; 93 struct work_struct tqueue; 94 95 /* Protect concurent access to : 96 * o self->ctrl_skb 97 * o self->tx_skb 98 * Maybe other things may gain to be protected as well... 99 * Jean II */ 100 spinlock_t spinlock; 101 }; 102 103 void ircomm_tty_start(struct tty_struct *tty); 104 void ircomm_tty_check_modem_status(struct ircomm_tty_cb *self); 105 106 int ircomm_tty_tiocmget(struct tty_struct *tty); 107 int ircomm_tty_tiocmset(struct tty_struct *tty, unsigned int set, 108 unsigned int clear); 109 int ircomm_tty_ioctl(struct tty_struct *tty, unsigned int cmd, 110 unsigned long arg); 111 void ircomm_tty_set_termios(struct tty_struct *tty, 112 struct ktermios *old_termios); 113 114 #endif 115 116 117 118 119 120 121 122