1*53ee8cc1Swenshuai.xi /********************************************************************* 2*53ee8cc1Swenshuai.xi * 3*53ee8cc1Swenshuai.xi * Filename: irda.h 4*53ee8cc1Swenshuai.xi * Version: 5*53ee8cc1Swenshuai.xi * Description: 6*53ee8cc1Swenshuai.xi * Status: Experimental. 7*53ee8cc1Swenshuai.xi * Author: Dag Brattli <dagb@cs.uit.no> 8*53ee8cc1Swenshuai.xi * Created at: Mon Mar 8 14:06:12 1999 9*53ee8cc1Swenshuai.xi * Modified at: Sat Dec 25 16:06:42 1999 10*53ee8cc1Swenshuai.xi * Modified by: Dag Brattli <dagb@cs.uit.no> 11*53ee8cc1Swenshuai.xi * 12*53ee8cc1Swenshuai.xi * Copyright (c) 1999 Dag Brattli, All Rights Reserved. 13*53ee8cc1Swenshuai.xi * 14*53ee8cc1Swenshuai.xi * This program is free software; you can redistribute it and/or 15*53ee8cc1Swenshuai.xi * modify it under the terms of the GNU General Public License as 16*53ee8cc1Swenshuai.xi * published by the Free Software Foundation; either version 2 of 17*53ee8cc1Swenshuai.xi * the License, or (at your option) any later version. 18*53ee8cc1Swenshuai.xi * 19*53ee8cc1Swenshuai.xi * Neither Dag Brattli nor University of Tromsø admit liability nor 20*53ee8cc1Swenshuai.xi * provide warranty for any of this software. This material is 21*53ee8cc1Swenshuai.xi * provided "AS-IS" and at no charge. 22*53ee8cc1Swenshuai.xi * 23*53ee8cc1Swenshuai.xi ********************************************************************/ 24*53ee8cc1Swenshuai.xi 25*53ee8cc1Swenshuai.xi #ifndef KERNEL_IRDA_H 26*53ee8cc1Swenshuai.xi #define KERNEL_IRDA_H 27*53ee8cc1Swenshuai.xi 28*53ee8cc1Swenshuai.xi /* Please do *not* add any #include in this file, this file is 29*53ee8cc1Swenshuai.xi * included as-is in user space. 30*53ee8cc1Swenshuai.xi * Please fix the calling file to properly included needed files before 31*53ee8cc1Swenshuai.xi * this one, or preferably to include <net/irda/irda.h> instead. 32*53ee8cc1Swenshuai.xi * Jean II */ 33*53ee8cc1Swenshuai.xi 34*53ee8cc1Swenshuai.xi /* Hint bit positions for first hint byte */ 35*53ee8cc1Swenshuai.xi #define HINT_PNP 0x01 36*53ee8cc1Swenshuai.xi #define HINT_PDA 0x02 37*53ee8cc1Swenshuai.xi #define HINT_COMPUTER 0x04 38*53ee8cc1Swenshuai.xi #define HINT_PRINTER 0x08 39*53ee8cc1Swenshuai.xi #define HINT_MODEM 0x10 40*53ee8cc1Swenshuai.xi #define HINT_FAX 0x20 41*53ee8cc1Swenshuai.xi #define HINT_LAN 0x40 42*53ee8cc1Swenshuai.xi #define HINT_EXTENSION 0x80 43*53ee8cc1Swenshuai.xi 44*53ee8cc1Swenshuai.xi /* Hint bit positions for second hint byte (first extension byte) */ 45*53ee8cc1Swenshuai.xi #define HINT_TELEPHONY 0x01 46*53ee8cc1Swenshuai.xi #define HINT_FILE_SERVER 0x02 47*53ee8cc1Swenshuai.xi #define HINT_COMM 0x04 48*53ee8cc1Swenshuai.xi #define HINT_MESSAGE 0x08 49*53ee8cc1Swenshuai.xi #define HINT_HTTP 0x10 50*53ee8cc1Swenshuai.xi #define HINT_OBEX 0x20 51*53ee8cc1Swenshuai.xi 52*53ee8cc1Swenshuai.xi /* IrLMP character code values */ 53*53ee8cc1Swenshuai.xi #define CS_ASCII 0x00 54*53ee8cc1Swenshuai.xi #define CS_ISO_8859_1 0x01 55*53ee8cc1Swenshuai.xi #define CS_ISO_8859_2 0x02 56*53ee8cc1Swenshuai.xi #define CS_ISO_8859_3 0x03 57*53ee8cc1Swenshuai.xi #define CS_ISO_8859_4 0x04 58*53ee8cc1Swenshuai.xi #define CS_ISO_8859_5 0x05 59*53ee8cc1Swenshuai.xi #define CS_ISO_8859_6 0x06 60*53ee8cc1Swenshuai.xi #define CS_ISO_8859_7 0x07 61*53ee8cc1Swenshuai.xi #define CS_ISO_8859_8 0x08 62*53ee8cc1Swenshuai.xi #define CS_ISO_8859_9 0x09 63*53ee8cc1Swenshuai.xi #define CS_UNICODE 0xff 64*53ee8cc1Swenshuai.xi 65*53ee8cc1Swenshuai.xi /* These are the currently known dongles */ 66*53ee8cc1Swenshuai.xi typedef enum { 67*53ee8cc1Swenshuai.xi IRDA_TEKRAM_DONGLE = 0, 68*53ee8cc1Swenshuai.xi IRDA_ESI_DONGLE = 1, 69*53ee8cc1Swenshuai.xi IRDA_ACTISYS_DONGLE = 2, 70*53ee8cc1Swenshuai.xi IRDA_ACTISYS_PLUS_DONGLE = 3, 71*53ee8cc1Swenshuai.xi IRDA_GIRBIL_DONGLE = 4, 72*53ee8cc1Swenshuai.xi IRDA_LITELINK_DONGLE = 5, 73*53ee8cc1Swenshuai.xi IRDA_AIRPORT_DONGLE = 6, 74*53ee8cc1Swenshuai.xi IRDA_OLD_BELKIN_DONGLE = 7, 75*53ee8cc1Swenshuai.xi IRDA_EP7211_IR = 8, 76*53ee8cc1Swenshuai.xi IRDA_MCP2120_DONGLE = 9, 77*53ee8cc1Swenshuai.xi IRDA_ACT200L_DONGLE = 10, 78*53ee8cc1Swenshuai.xi IRDA_MA600_DONGLE = 11, 79*53ee8cc1Swenshuai.xi IRDA_TOIM3232_DONGLE = 12, 80*53ee8cc1Swenshuai.xi IRDA_EP7211_DONGLE = 13, 81*53ee8cc1Swenshuai.xi } IRDA_DONGLE; 82*53ee8cc1Swenshuai.xi 83*53ee8cc1Swenshuai.xi /* Protocol types to be used for SOCK_DGRAM */ 84*53ee8cc1Swenshuai.xi enum { 85*53ee8cc1Swenshuai.xi IRDAPROTO_UNITDATA = 0, 86*53ee8cc1Swenshuai.xi IRDAPROTO_ULTRA = 1, 87*53ee8cc1Swenshuai.xi IRDAPROTO_MAX 88*53ee8cc1Swenshuai.xi }; 89*53ee8cc1Swenshuai.xi 90*53ee8cc1Swenshuai.xi #define SOL_IRLMP 266 /* Same as SOL_IRDA for now */ 91*53ee8cc1Swenshuai.xi #define SOL_IRTTP 266 /* Same as SOL_IRDA for now */ 92*53ee8cc1Swenshuai.xi 93*53ee8cc1Swenshuai.xi #define IRLMP_ENUMDEVICES 1 /* Return discovery log */ 94*53ee8cc1Swenshuai.xi #define IRLMP_IAS_SET 2 /* Set an attribute in local IAS */ 95*53ee8cc1Swenshuai.xi #define IRLMP_IAS_QUERY 3 /* Query remote IAS for attribute */ 96*53ee8cc1Swenshuai.xi #define IRLMP_HINTS_SET 4 /* Set hint bits advertised */ 97*53ee8cc1Swenshuai.xi #define IRLMP_QOS_SET 5 98*53ee8cc1Swenshuai.xi #define IRLMP_QOS_GET 6 99*53ee8cc1Swenshuai.xi #define IRLMP_MAX_SDU_SIZE 7 100*53ee8cc1Swenshuai.xi #define IRLMP_IAS_GET 8 /* Get an attribute from local IAS */ 101*53ee8cc1Swenshuai.xi #define IRLMP_IAS_DEL 9 /* Remove attribute from local IAS */ 102*53ee8cc1Swenshuai.xi #define IRLMP_HINT_MASK_SET 10 /* Set discovery filter */ 103*53ee8cc1Swenshuai.xi #define IRLMP_WAITDEVICE 11 /* Wait for a new discovery */ 104*53ee8cc1Swenshuai.xi 105*53ee8cc1Swenshuai.xi #define IRTTP_MAX_SDU_SIZE IRLMP_MAX_SDU_SIZE /* Compatibility */ 106*53ee8cc1Swenshuai.xi 107*53ee8cc1Swenshuai.xi #define IAS_MAX_STRING 256 /* See IrLMP 1.1, 4.3.3.2 */ 108*53ee8cc1Swenshuai.xi #define IAS_MAX_OCTET_STRING 1024 /* See IrLMP 1.1, 4.3.3.2 */ 109*53ee8cc1Swenshuai.xi #define IAS_MAX_CLASSNAME 60 /* See IrLMP 1.1, 4.3.1 */ 110*53ee8cc1Swenshuai.xi #define IAS_MAX_ATTRIBNAME 60 /* See IrLMP 1.1, 4.3.3.1 */ 111*53ee8cc1Swenshuai.xi #define IAS_MAX_ATTRIBNUMBER 256 /* See IrLMP 1.1, 4.3.3.1 */ 112*53ee8cc1Swenshuai.xi /* For user space backward compatibility - may be fixed in kernel 2.5.X 113*53ee8cc1Swenshuai.xi * Note : need 60+1 ('\0'), make it 64 for alignement - Jean II */ 114*53ee8cc1Swenshuai.xi #define IAS_EXPORT_CLASSNAME 64 115*53ee8cc1Swenshuai.xi #define IAS_EXPORT_ATTRIBNAME 256 116*53ee8cc1Swenshuai.xi 117*53ee8cc1Swenshuai.xi /* Attribute type needed for struct irda_ias_set */ 118*53ee8cc1Swenshuai.xi #define IAS_MISSING 0 119*53ee8cc1Swenshuai.xi #define IAS_INTEGER 1 120*53ee8cc1Swenshuai.xi #define IAS_OCT_SEQ 2 121*53ee8cc1Swenshuai.xi #define IAS_STRING 3 122*53ee8cc1Swenshuai.xi 123*53ee8cc1Swenshuai.xi #define LSAP_ANY 0xff 124*53ee8cc1Swenshuai.xi 125*53ee8cc1Swenshuai.xi struct sockaddr_irda { 126*53ee8cc1Swenshuai.xi sa_family_t sir_family; /* AF_IRDA */ 127*53ee8cc1Swenshuai.xi __u8 sir_lsap_sel; /* LSAP selector */ 128*53ee8cc1Swenshuai.xi __u32 sir_addr; /* Device address */ 129*53ee8cc1Swenshuai.xi char sir_name[25]; /* Usually <service>:IrDA:TinyTP */ 130*53ee8cc1Swenshuai.xi }; 131*53ee8cc1Swenshuai.xi 132*53ee8cc1Swenshuai.xi struct irda_device_info { 133*53ee8cc1Swenshuai.xi __u32 saddr; /* Address of local interface */ 134*53ee8cc1Swenshuai.xi __u32 daddr; /* Address of remote device */ 135*53ee8cc1Swenshuai.xi char info[22]; /* Description */ 136*53ee8cc1Swenshuai.xi __u8 charset; /* Charset used for description */ 137*53ee8cc1Swenshuai.xi __u8 hints[2]; /* Hint bits */ 138*53ee8cc1Swenshuai.xi }; 139*53ee8cc1Swenshuai.xi 140*53ee8cc1Swenshuai.xi struct irda_device_list { 141*53ee8cc1Swenshuai.xi __u32 len; 142*53ee8cc1Swenshuai.xi struct irda_device_info dev[1]; 143*53ee8cc1Swenshuai.xi }; 144*53ee8cc1Swenshuai.xi 145*53ee8cc1Swenshuai.xi struct irda_ias_set { 146*53ee8cc1Swenshuai.xi char irda_class_name[IAS_EXPORT_CLASSNAME]; 147*53ee8cc1Swenshuai.xi char irda_attrib_name[IAS_EXPORT_ATTRIBNAME]; 148*53ee8cc1Swenshuai.xi unsigned int irda_attrib_type; 149*53ee8cc1Swenshuai.xi union { 150*53ee8cc1Swenshuai.xi unsigned int irda_attrib_int; 151*53ee8cc1Swenshuai.xi struct { 152*53ee8cc1Swenshuai.xi unsigned short len; 153*53ee8cc1Swenshuai.xi __u8 octet_seq[IAS_MAX_OCTET_STRING]; 154*53ee8cc1Swenshuai.xi } irda_attrib_octet_seq; 155*53ee8cc1Swenshuai.xi struct { 156*53ee8cc1Swenshuai.xi __u8 len; 157*53ee8cc1Swenshuai.xi __u8 charset; 158*53ee8cc1Swenshuai.xi __u8 string[IAS_MAX_STRING]; 159*53ee8cc1Swenshuai.xi } irda_attrib_string; 160*53ee8cc1Swenshuai.xi } attribute; 161*53ee8cc1Swenshuai.xi __u32 daddr; /* Address of device (for some queries only) */ 162*53ee8cc1Swenshuai.xi }; 163*53ee8cc1Swenshuai.xi 164*53ee8cc1Swenshuai.xi /* Some private IOCTL's (max 16) */ 165*53ee8cc1Swenshuai.xi #define SIOCSDONGLE (SIOCDEVPRIVATE + 0) 166*53ee8cc1Swenshuai.xi #define SIOCGDONGLE (SIOCDEVPRIVATE + 1) 167*53ee8cc1Swenshuai.xi #define SIOCSBANDWIDTH (SIOCDEVPRIVATE + 2) 168*53ee8cc1Swenshuai.xi #define SIOCSMEDIABUSY (SIOCDEVPRIVATE + 3) 169*53ee8cc1Swenshuai.xi #define SIOCGMEDIABUSY (SIOCDEVPRIVATE + 4) 170*53ee8cc1Swenshuai.xi #define SIOCGRECEIVING (SIOCDEVPRIVATE + 5) 171*53ee8cc1Swenshuai.xi #define SIOCSMODE (SIOCDEVPRIVATE + 6) 172*53ee8cc1Swenshuai.xi #define SIOCGMODE (SIOCDEVPRIVATE + 7) 173*53ee8cc1Swenshuai.xi #define SIOCSDTRRTS (SIOCDEVPRIVATE + 8) 174*53ee8cc1Swenshuai.xi #define SIOCGQOS (SIOCDEVPRIVATE + 9) 175*53ee8cc1Swenshuai.xi 176*53ee8cc1Swenshuai.xi /* No reason to include <linux/if.h> just because of this one ;-) */ 177*53ee8cc1Swenshuai.xi #define IRNAMSIZ 16 178*53ee8cc1Swenshuai.xi 179*53ee8cc1Swenshuai.xi /* IrDA quality of service information (must not exceed 16 bytes) */ 180*53ee8cc1Swenshuai.xi struct if_irda_qos { 181*53ee8cc1Swenshuai.xi unsigned long baudrate; 182*53ee8cc1Swenshuai.xi unsigned short data_size; 183*53ee8cc1Swenshuai.xi unsigned short window_size; 184*53ee8cc1Swenshuai.xi unsigned short min_turn_time; 185*53ee8cc1Swenshuai.xi unsigned short max_turn_time; 186*53ee8cc1Swenshuai.xi unsigned char add_bofs; 187*53ee8cc1Swenshuai.xi unsigned char link_disc; 188*53ee8cc1Swenshuai.xi }; 189*53ee8cc1Swenshuai.xi 190*53ee8cc1Swenshuai.xi /* For setting RTS and DTR lines of a dongle */ 191*53ee8cc1Swenshuai.xi struct if_irda_line { 192*53ee8cc1Swenshuai.xi __u8 dtr; 193*53ee8cc1Swenshuai.xi __u8 rts; 194*53ee8cc1Swenshuai.xi }; 195*53ee8cc1Swenshuai.xi 196*53ee8cc1Swenshuai.xi /* IrDA interface configuration (data part must not exceed 16 bytes) */ 197*53ee8cc1Swenshuai.xi struct if_irda_req { 198*53ee8cc1Swenshuai.xi union { 199*53ee8cc1Swenshuai.xi char ifrn_name[IRNAMSIZ]; /* if name, e.g. "irda0" */ 200*53ee8cc1Swenshuai.xi } ifr_ifrn; 201*53ee8cc1Swenshuai.xi 202*53ee8cc1Swenshuai.xi /* Data part */ 203*53ee8cc1Swenshuai.xi union { 204*53ee8cc1Swenshuai.xi struct if_irda_line ifru_line; 205*53ee8cc1Swenshuai.xi struct if_irda_qos ifru_qos; 206*53ee8cc1Swenshuai.xi unsigned short ifru_flags; 207*53ee8cc1Swenshuai.xi unsigned int ifru_receiving; 208*53ee8cc1Swenshuai.xi unsigned int ifru_mode; 209*53ee8cc1Swenshuai.xi unsigned int ifru_dongle; 210*53ee8cc1Swenshuai.xi } ifr_ifru; 211*53ee8cc1Swenshuai.xi }; 212*53ee8cc1Swenshuai.xi 213*53ee8cc1Swenshuai.xi #define ifr_baudrate ifr_ifru.ifru_qos.baudrate 214*53ee8cc1Swenshuai.xi #define ifr_receiving ifr_ifru.ifru_receiving 215*53ee8cc1Swenshuai.xi #define ifr_dongle ifr_ifru.ifru_dongle 216*53ee8cc1Swenshuai.xi #define ifr_mode ifr_ifru.ifru_mode 217*53ee8cc1Swenshuai.xi #define ifr_dtr ifr_ifru.ifru_line.dtr 218*53ee8cc1Swenshuai.xi #define ifr_rts ifr_ifru.ifru_line.rts 219*53ee8cc1Swenshuai.xi 220*53ee8cc1Swenshuai.xi 221*53ee8cc1Swenshuai.xi /* IrDA netlink definitions */ 222*53ee8cc1Swenshuai.xi #define IRDA_NL_NAME "irda" 223*53ee8cc1Swenshuai.xi #define IRDA_NL_VERSION 1 224*53ee8cc1Swenshuai.xi 225*53ee8cc1Swenshuai.xi enum irda_nl_commands { 226*53ee8cc1Swenshuai.xi IRDA_NL_CMD_UNSPEC, 227*53ee8cc1Swenshuai.xi IRDA_NL_CMD_SET_MODE, 228*53ee8cc1Swenshuai.xi IRDA_NL_CMD_GET_MODE, 229*53ee8cc1Swenshuai.xi 230*53ee8cc1Swenshuai.xi __IRDA_NL_CMD_AFTER_LAST 231*53ee8cc1Swenshuai.xi }; 232*53ee8cc1Swenshuai.xi #define IRDA_NL_CMD_MAX (__IRDA_NL_CMD_AFTER_LAST - 1) 233*53ee8cc1Swenshuai.xi 234*53ee8cc1Swenshuai.xi enum nl80211_attrs { 235*53ee8cc1Swenshuai.xi IRDA_NL_ATTR_UNSPEC, 236*53ee8cc1Swenshuai.xi IRDA_NL_ATTR_IFNAME, 237*53ee8cc1Swenshuai.xi IRDA_NL_ATTR_MODE, 238*53ee8cc1Swenshuai.xi 239*53ee8cc1Swenshuai.xi __IRDA_NL_ATTR_AFTER_LAST 240*53ee8cc1Swenshuai.xi }; 241*53ee8cc1Swenshuai.xi #define IRDA_NL_ATTR_MAX (__IRDA_NL_ATTR_AFTER_LAST - 1) 242*53ee8cc1Swenshuai.xi 243*53ee8cc1Swenshuai.xi /* IrDA modes */ 244*53ee8cc1Swenshuai.xi #define IRDA_MODE_PRIMARY 0x1 245*53ee8cc1Swenshuai.xi #define IRDA_MODE_SECONDARY 0x2 246*53ee8cc1Swenshuai.xi #define IRDA_MODE_MONITOR 0x4 247*53ee8cc1Swenshuai.xi 248*53ee8cc1Swenshuai.xi #endif /* KERNEL_IRDA_H */ 249*53ee8cc1Swenshuai.xi 250*53ee8cc1Swenshuai.xi 251*53ee8cc1Swenshuai.xi 252*53ee8cc1Swenshuai.xi 253