/* * Kernel CAPI 2.0 Module * * Copyright 1999 by Carsten Paeth * Copyright 2002 by Kai Germaschewski * * This software may be used and distributed according to the terms * of the GNU General Public License, incorporated herein by reference. * */ #include #include #include #include #ifdef KCAPI_DEBUG #define DBG(format, arg...) do { \ printk(KERN_DEBUG "%s: " format "\n" , __func__ , ## arg); \ } while (0) #else #define DBG(format, arg...) /* */ #endif enum { CAPI_CTR_DETACHED = 0, CAPI_CTR_DETECTED = 1, CAPI_CTR_LOADING = 2, CAPI_CTR_RUNNING = 3, }; extern struct capi_ctr *capi_controller[CAPI_MAXCONTR]; extern struct mutex capi_controller_lock; extern struct capi20_appl *capi_applications[CAPI_MAXAPPL]; void kcapi_proc_init(void); void kcapi_proc_exit(void); struct capi20_appl { u16 applid; capi_register_params rparam; void (*recv_message)(struct capi20_appl *ap, struct sk_buff *skb); void *private; /* internal to kernelcapi.o */ unsigned long nrecvctlpkt; unsigned long nrecvdatapkt; unsigned long nsentctlpkt; unsigned long nsentdatapkt; struct mutex recv_mtx; struct sk_buff_head recv_queue; struct work_struct recv_work; int release_in_progress; }; u16 capi20_isinstalled(void); u16 capi20_register(struct capi20_appl *ap); u16 capi20_release(struct capi20_appl *ap); u16 capi20_put_message(struct capi20_appl *ap, struct sk_buff *skb); u16 capi20_get_manufacturer(u32 contr, u8 buf[CAPI_MANUFACTURER_LEN]); u16 capi20_get_version(u32 contr, struct capi_version *verp); u16 capi20_get_serial(u32 contr, u8 serial[CAPI_SERIAL_LEN]); u16 capi20_get_profile(u32 contr, struct capi_profile *profp); int capi20_manufacturer(unsigned long cmd, void __user *data); #define CAPICTR_UP 0 #define CAPICTR_DOWN 1 int kcapi_init(void); void kcapi_exit(void); /*----- basic-type definitions -----*/ typedef __u8 *_cstruct; typedef enum { CAPI_COMPOSE, CAPI_DEFAULT } _cmstruct; /* The _cmsg structure contains all possible CAPI 2.0 parameter. All parameters are stored here first. The function CAPI_CMSG_2_MESSAGE assembles the parameter and builds CAPI2.0 conform messages. CAPI_MESSAGE_2_CMSG disassembles CAPI 2.0 messages and stores the parameter in the _cmsg structure */ typedef struct { /* Header */ __u16 ApplId; __u8 Command; __u8 Subcommand; __u16 Messagenumber; /* Parameter */ union { __u32 adrController; __u32 adrPLCI; __u32 adrNCCI; } adr; _cmstruct AdditionalInfo; _cstruct B1configuration; __u16 B1protocol; _cstruct B2configuration; __u16 B2protocol; _cstruct B3configuration; __u16 B3protocol; _cstruct BC; _cstruct BChannelinformation; _cmstruct BProtocol; _cstruct CalledPartyNumber; _cstruct CalledPartySubaddress; _cstruct CallingPartyNumber; _cstruct CallingPartySubaddress; __u32 CIPmask; __u32 CIPmask2; __u16 CIPValue; __u32 Class; _cstruct ConnectedNumber; _cstruct ConnectedSubaddress; __u32 Data; __u16 DataHandle; __u16 DataLength; _cstruct FacilityConfirmationParameter; _cstruct Facilitydataarray; _cstruct FacilityIndicationParameter; _cstruct FacilityRequestParameter; __u16 FacilitySelector; __u16 Flags; __u32 Function; _cstruct HLC; __u16 Info; _cstruct InfoElement; __u32 InfoMask; __u16 InfoNumber; _cstruct Keypadfacility; _cstruct LLC; _cstruct ManuData; __u32 ManuID; _cstruct NCPI; __u16 Reason; __u16 Reason_B3; __u16 Reject; _cstruct Useruserdata; /* intern */ unsigned l, p; unsigned char *par; __u8 *m; /* buffer to construct message */ __u8 buf[180]; } _cmsg; /*-----------------------------------------------------------------------*/ /* * Debugging / Tracing functions */ char *capi_cmd2str(__u8 cmd, __u8 subcmd); typedef struct { u_char *buf; u_char *p; size_t size; size_t pos; } _cdebbuf; #define CDEBUG_SIZE 1024 #define CDEBUG_GSIZE 4096 void cdebbuf_free(_cdebbuf *cdb); int cdebug_init(void); void cdebug_exit(void); _cdebbuf *capi_message2str(__u8 *msg);