1 /* 2 * Kernel CAPI 2.0 Module 3 * 4 * Copyright 1999 by Carsten Paeth <calle@calle.de> 5 * Copyright 2002 by Kai Germaschewski <kai@germaschewski.name> 6 * 7 * This software may be used and distributed according to the terms 8 * of the GNU General Public License, incorporated herein by reference. 9 * 10 */ 11 12 13 #include <linux/kernel.h> 14 #include <linux/spinlock.h> 15 #include <linux/list.h> 16 #include <linux/isdn/capilli.h> 17 18 #ifdef KCAPI_DEBUG 19 #define DBG(format, arg...) do { \ 20 printk(KERN_DEBUG "%s: " format "\n" , __func__ , ## arg); \ 21 } while (0) 22 #else 23 #define DBG(format, arg...) /* */ 24 #endif 25 26 enum { 27 CAPI_CTR_DETACHED = 0, 28 CAPI_CTR_DETECTED = 1, 29 CAPI_CTR_LOADING = 2, 30 CAPI_CTR_RUNNING = 3, 31 }; 32 33 extern struct capi_ctr *capi_controller[CAPI_MAXCONTR]; 34 extern struct mutex capi_controller_lock; 35 36 extern struct capi20_appl *capi_applications[CAPI_MAXAPPL]; 37 38 void kcapi_proc_init(void); 39 void kcapi_proc_exit(void); 40 41 struct capi20_appl { 42 u16 applid; 43 capi_register_params rparam; 44 void (*recv_message)(struct capi20_appl *ap, struct sk_buff *skb); 45 void *private; 46 47 /* internal to kernelcapi.o */ 48 unsigned long nrecvctlpkt; 49 unsigned long nrecvdatapkt; 50 unsigned long nsentctlpkt; 51 unsigned long nsentdatapkt; 52 struct mutex recv_mtx; 53 struct sk_buff_head recv_queue; 54 struct work_struct recv_work; 55 int release_in_progress; 56 }; 57 58 u16 capi20_isinstalled(void); 59 u16 capi20_register(struct capi20_appl *ap); 60 u16 capi20_release(struct capi20_appl *ap); 61 u16 capi20_put_message(struct capi20_appl *ap, struct sk_buff *skb); 62 u16 capi20_get_manufacturer(u32 contr, u8 buf[CAPI_MANUFACTURER_LEN]); 63 u16 capi20_get_version(u32 contr, struct capi_version *verp); 64 u16 capi20_get_serial(u32 contr, u8 serial[CAPI_SERIAL_LEN]); 65 u16 capi20_get_profile(u32 contr, struct capi_profile *profp); 66 int capi20_manufacturer(unsigned long cmd, void __user *data); 67 68 #define CAPICTR_UP 0 69 #define CAPICTR_DOWN 1 70 71 int kcapi_init(void); 72 void kcapi_exit(void); 73 74 /*----- basic-type definitions -----*/ 75 76 typedef __u8 *_cstruct; 77 78 typedef enum { 79 CAPI_COMPOSE, 80 CAPI_DEFAULT 81 } _cmstruct; 82 83 /* 84 The _cmsg structure contains all possible CAPI 2.0 parameter. 85 All parameters are stored here first. The function CAPI_CMSG_2_MESSAGE 86 assembles the parameter and builds CAPI2.0 conform messages. 87 CAPI_MESSAGE_2_CMSG disassembles CAPI 2.0 messages and stores the 88 parameter in the _cmsg structure 89 */ 90 91 typedef struct { 92 /* Header */ 93 __u16 ApplId; 94 __u8 Command; 95 __u8 Subcommand; 96 __u16 Messagenumber; 97 98 /* Parameter */ 99 union { 100 __u32 adrController; 101 __u32 adrPLCI; 102 __u32 adrNCCI; 103 } adr; 104 105 _cmstruct AdditionalInfo; 106 _cstruct B1configuration; 107 __u16 B1protocol; 108 _cstruct B2configuration; 109 __u16 B2protocol; 110 _cstruct B3configuration; 111 __u16 B3protocol; 112 _cstruct BC; 113 _cstruct BChannelinformation; 114 _cmstruct BProtocol; 115 _cstruct CalledPartyNumber; 116 _cstruct CalledPartySubaddress; 117 _cstruct CallingPartyNumber; 118 _cstruct CallingPartySubaddress; 119 __u32 CIPmask; 120 __u32 CIPmask2; 121 __u16 CIPValue; 122 __u32 Class; 123 _cstruct ConnectedNumber; 124 _cstruct ConnectedSubaddress; 125 __u32 Data; 126 __u16 DataHandle; 127 __u16 DataLength; 128 _cstruct FacilityConfirmationParameter; 129 _cstruct Facilitydataarray; 130 _cstruct FacilityIndicationParameter; 131 _cstruct FacilityRequestParameter; 132 __u16 FacilitySelector; 133 __u16 Flags; 134 __u32 Function; 135 _cstruct HLC; 136 __u16 Info; 137 _cstruct InfoElement; 138 __u32 InfoMask; 139 __u16 InfoNumber; 140 _cstruct Keypadfacility; 141 _cstruct LLC; 142 _cstruct ManuData; 143 __u32 ManuID; 144 _cstruct NCPI; 145 __u16 Reason; 146 __u16 Reason_B3; 147 __u16 Reject; 148 _cstruct Useruserdata; 149 150 /* intern */ 151 unsigned l, p; 152 unsigned char *par; 153 __u8 *m; 154 155 /* buffer to construct message */ 156 __u8 buf[180]; 157 158 } _cmsg; 159 160 /*-----------------------------------------------------------------------*/ 161 162 /* 163 * Debugging / Tracing functions 164 */ 165 166 char *capi_cmd2str(__u8 cmd, __u8 subcmd); 167 168 typedef struct { 169 u_char *buf; 170 u_char *p; 171 size_t size; 172 size_t pos; 173 } _cdebbuf; 174 175 #define CDEBUG_SIZE 1024 176 #define CDEBUG_GSIZE 4096 177 178 void cdebbuf_free(_cdebbuf *cdb); 179 int cdebug_init(void); 180 void cdebug_exit(void); 181 182 _cdebbuf *capi_message2str(__u8 *msg); 183