import of upstream 2.4.34.4 from kernel.org
[linux-2.4.git] / drivers / isdn / avmb1 / capilli.h
1 /* $Id: capilli.h,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
2  * 
3  * Kernel CAPI 2.0 Driver Interface for Linux
4  * 
5  * Copyright 1999 by Carsten Paeth <calle@calle.de>
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 #ifndef __CAPILLI_H__
13 #define __CAPILLI_H__
14
15 typedef struct capiloaddatapart {
16         int user;               /* data in userspace ? */
17         int len;
18         unsigned char *data;
19 } capiloaddatapart;
20
21 typedef struct capiloaddata {
22         capiloaddatapart firmware;
23         capiloaddatapart configuration;
24 } capiloaddata;
25
26 typedef struct capicardparams {
27         unsigned int port;
28         unsigned irq;
29         int cardtype;
30         int cardnr;
31         unsigned int membase;
32 } capicardparams;
33
34 struct capi_driver;
35
36 struct capi_ctr {
37         struct capi_ctr *next;                  /* next ctr of same driver */
38         struct capi_driver *driver;
39         int cnr;                                /* controller number */
40         char name[32];                          /* name of controller */
41         volatile unsigned short cardstate;      /* controller state */
42         volatile int blocked;                   /* output blocked */
43         int traceflag;                          /* capi trace */
44
45         void *driverdata;                       /* driver specific */
46
47         /* filled before calling ready callback */
48         __u8 manu[CAPI_MANUFACTURER_LEN];       /* CAPI_GET_MANUFACTURER */
49         capi_version version;                   /* CAPI_GET_VERSION */
50         capi_profile profile;                   /* CAPI_GET_PROFILE */
51         __u8 serial[CAPI_SERIAL_LEN];           /* CAPI_GET_SERIAL */
52
53         /* functions */
54         void (*ready)(struct capi_ctr * card);
55         void (*reseted)(struct capi_ctr * card);
56         void (*suspend_output)(struct capi_ctr * card);
57         void (*resume_output)(struct capi_ctr * card);
58         void (*handle_capimsg)(struct capi_ctr * card,
59                                 __u16 appl, struct sk_buff *skb);
60         void (*appl_registered)(struct capi_ctr * card, __u16 appl);
61         void (*appl_released)(struct capi_ctr * card, __u16 appl);
62
63         void (*new_ncci)(struct capi_ctr * card,
64                                 __u16 appl, __u32 ncci, __u32 winsize);
65         void (*free_ncci)(struct capi_ctr * card, __u16 appl, __u32 ncci);
66
67         /* management information for kcapi */
68
69         unsigned long nrecvctlpkt;
70         unsigned long nrecvdatapkt;
71         unsigned long nsentctlpkt;
72         unsigned long nsentdatapkt;
73
74         struct proc_dir_entry *procent;
75         char procfn[128];
76 };
77
78 struct capi_driver_interface {
79     struct capi_ctr *(*attach_ctr)(struct capi_driver *driver, char *name, void *data);
80     int (*detach_ctr)(struct capi_ctr *);
81 };
82
83 struct capi_driver {
84      char name[32];                             /* driver name */
85      char revision[32];
86      int (*load_firmware)(struct capi_ctr *, capiloaddata *);
87      void (*reset_ctr)(struct capi_ctr *);
88      void (*remove_ctr)(struct capi_ctr *);
89      void (*register_appl)(struct capi_ctr *, __u16 appl,
90                                                 capi_register_params *);
91      void (*release_appl)(struct capi_ctr *, __u16 appl);
92      void (*send_message)(struct capi_ctr *, struct sk_buff *skb);
93
94      char *(*procinfo)(struct capi_ctr *);
95      int (*ctr_read_proc)(char *page, char **start, off_t off,
96                                int count, int *eof, struct capi_ctr *card);
97      int (*driver_read_proc)(char *page, char **start, off_t off,
98                                int count, int *eof, struct capi_driver *driver);
99
100      int (*add_card)(struct capi_driver *driver, capicardparams *data);
101
102      /* intitialized by kcapi */
103      struct capi_ctr    *controller;            /* list of controllers */
104      struct capi_driver *next;
105      int ncontroller;
106      struct proc_dir_entry *procent;
107      char procfn[128];
108 };
109
110 struct capi_driver_interface *attach_capi_driver(struct capi_driver *driver);
111 void detach_capi_driver(struct capi_driver *driver);
112
113 #endif                          /* __CAPILLI_H__ */