forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
182 lines
4.0 KiB
182 lines
4.0 KiB
/* |
|
* Kernel CAPI 2.0 Module |
|
* |
|
* Copyright 1999 by Carsten Paeth <[email protected]> |
|
* Copyright 2002 by Kai Germaschewski <[email protected]> |
|
* |
|
* This software may be used and distributed according to the terms |
|
* of the GNU General Public License, incorporated herein by reference. |
|
* |
|
*/ |
|
|
|
|
|
#include <linux/kernel.h> |
|
#include <linux/spinlock.h> |
|
#include <linux/list.h> |
|
#include <linux/isdn/capilli.h> |
|
|
|
#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);
|
|
|