kcapi.h (4094B)
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 26enum { 27 CAPI_CTR_DETACHED = 0, 28 CAPI_CTR_DETECTED = 1, 29 CAPI_CTR_LOADING = 2, 30 CAPI_CTR_RUNNING = 3, 31}; 32 33extern struct capi_ctr *capi_controller[CAPI_MAXCONTR]; 34extern struct mutex capi_controller_lock; 35 36extern struct capi20_appl *capi_applications[CAPI_MAXAPPL]; 37 38void kcapi_proc_init(void); 39void kcapi_proc_exit(void); 40 41struct 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 58u16 capi20_isinstalled(void); 59u16 capi20_register(struct capi20_appl *ap); 60u16 capi20_release(struct capi20_appl *ap); 61u16 capi20_put_message(struct capi20_appl *ap, struct sk_buff *skb); 62u16 capi20_get_manufacturer(u32 contr, u8 buf[CAPI_MANUFACTURER_LEN]); 63u16 capi20_get_version(u32 contr, struct capi_version *verp); 64u16 capi20_get_serial(u32 contr, u8 serial[CAPI_SERIAL_LEN]); 65u16 capi20_get_profile(u32 contr, struct capi_profile *profp); 66int capi20_manufacturer(unsigned long cmd, void __user *data); 67 68#define CAPICTR_UP 0 69#define CAPICTR_DOWN 1 70 71int kcapi_init(void); 72void kcapi_exit(void); 73 74/*----- basic-type definitions -----*/ 75 76typedef __u8 *_cstruct; 77 78typedef 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 91typedef 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 166char *capi_cmd2str(__u8 cmd, __u8 subcmd); 167 168typedef 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 178void cdebbuf_free(_cdebbuf *cdb); 179int cdebug_init(void); 180void cdebug_exit(void); 181 182_cdebbuf *capi_message2str(__u8 *msg);