diff options
author | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
commit | 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (patch) | |
tree | 0bba044c4ce775e45a88a51686b5d9f90697ea9d /drivers/isdn/hardware/eicon/diddfunc.c |
Linux-2.6.12-rc2v2.6.12-rc2
Initial git repository build. I'm not bothering with the full history,
even though we have it. We can create a separate "historical" git
archive of that later if we want to, and in the meantime it's about
3.2GB when imported into git - space that would just make the early
git days unnecessarily complicated, when we don't have a lot of good
infrastructure for it.
Let it rip!
Diffstat (limited to 'drivers/isdn/hardware/eicon/diddfunc.c')
-rw-r--r-- | drivers/isdn/hardware/eicon/diddfunc.c | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/drivers/isdn/hardware/eicon/diddfunc.c b/drivers/isdn/hardware/eicon/diddfunc.c new file mode 100644 index 000000000000..3029234178d8 --- /dev/null +++ b/drivers/isdn/hardware/eicon/diddfunc.c | |||
@@ -0,0 +1,115 @@ | |||
1 | /* $Id: diddfunc.c,v 1.14.6.2 2004/08/28 20:03:53 armin Exp $ | ||
2 | * | ||
3 | * DIDD Interface module for Eicon active cards. | ||
4 | * | ||
5 | * Functions are in dadapter.c | ||
6 | * | ||
7 | * Copyright 2002-2003 by Armin Schindler (mac@melware.de) | ||
8 | * Copyright 2002-2003 Cytronics & Melware (info@melware.de) | ||
9 | * | ||
10 | * This software may be used and distributed according to the terms | ||
11 | * of the GNU General Public License, incorporated herein by reference. | ||
12 | */ | ||
13 | |||
14 | #include "platform.h" | ||
15 | #include "di_defs.h" | ||
16 | #include "dadapter.h" | ||
17 | #include "divasync.h" | ||
18 | |||
19 | #define DBG_MINIMUM (DL_LOG + DL_FTL + DL_ERR) | ||
20 | #define DBG_DEFAULT (DBG_MINIMUM + DL_XLOG + DL_REG) | ||
21 | |||
22 | |||
23 | extern void DIVA_DIDD_Read(void *, int); | ||
24 | extern char *DRIVERRELEASE_DIDD; | ||
25 | static dword notify_handle; | ||
26 | static DESCRIPTOR _DAdapter; | ||
27 | |||
28 | /* | ||
29 | * didd callback function | ||
30 | */ | ||
31 | static void *didd_callback(void *context, DESCRIPTOR * adapter, | ||
32 | int removal) | ||
33 | { | ||
34 | if (adapter->type == IDI_DADAPTER) { | ||
35 | DBG_ERR(("Notification about IDI_DADAPTER change ! Oops.")) | ||
36 | return (NULL); | ||
37 | } else if (adapter->type == IDI_DIMAINT) { | ||
38 | if (removal) { | ||
39 | DbgDeregister(); | ||
40 | } else { | ||
41 | DbgRegister("DIDD", DRIVERRELEASE_DIDD, DBG_DEFAULT); | ||
42 | } | ||
43 | } | ||
44 | return (NULL); | ||
45 | } | ||
46 | |||
47 | /* | ||
48 | * connect to didd | ||
49 | */ | ||
50 | static int DIVA_INIT_FUNCTION connect_didd(void) | ||
51 | { | ||
52 | int x = 0; | ||
53 | int dadapter = 0; | ||
54 | IDI_SYNC_REQ req; | ||
55 | DESCRIPTOR DIDD_Table[MAX_DESCRIPTORS]; | ||
56 | |||
57 | DIVA_DIDD_Read(DIDD_Table, sizeof(DIDD_Table)); | ||
58 | |||
59 | for (x = 0; x < MAX_DESCRIPTORS; x++) { | ||
60 | if (DIDD_Table[x].type == IDI_DADAPTER) { /* DADAPTER found */ | ||
61 | dadapter = 1; | ||
62 | memcpy(&_DAdapter, &DIDD_Table[x], sizeof(_DAdapter)); | ||
63 | req.didd_notify.e.Req = 0; | ||
64 | req.didd_notify.e.Rc = | ||
65 | IDI_SYNC_REQ_DIDD_REGISTER_ADAPTER_NOTIFY; | ||
66 | req.didd_notify.info.callback = (void *)didd_callback; | ||
67 | req.didd_notify.info.context = NULL; | ||
68 | _DAdapter.request((ENTITY *) & req); | ||
69 | if (req.didd_notify.e.Rc != 0xff) | ||
70 | return (0); | ||
71 | notify_handle = req.didd_notify.info.handle; | ||
72 | } else if (DIDD_Table[x].type == IDI_DIMAINT) { /* MAINT found */ | ||
73 | DbgRegister("DIDD", DRIVERRELEASE_DIDD, DBG_DEFAULT); | ||
74 | } | ||
75 | } | ||
76 | return (dadapter); | ||
77 | } | ||
78 | |||
79 | /* | ||
80 | * disconnect from didd | ||
81 | */ | ||
82 | static void DIVA_EXIT_FUNCTION disconnect_didd(void) | ||
83 | { | ||
84 | IDI_SYNC_REQ req; | ||
85 | |||
86 | req.didd_notify.e.Req = 0; | ||
87 | req.didd_notify.e.Rc = IDI_SYNC_REQ_DIDD_REMOVE_ADAPTER_NOTIFY; | ||
88 | req.didd_notify.info.handle = notify_handle; | ||
89 | _DAdapter.request((ENTITY *) & req); | ||
90 | } | ||
91 | |||
92 | /* | ||
93 | * init | ||
94 | */ | ||
95 | int DIVA_INIT_FUNCTION diddfunc_init(void) | ||
96 | { | ||
97 | diva_didd_load_time_init(); | ||
98 | |||
99 | if (!connect_didd()) { | ||
100 | DBG_ERR(("init: failed to connect to DIDD.")) | ||
101 | diva_didd_load_time_finit(); | ||
102 | return (0); | ||
103 | } | ||
104 | return (1); | ||
105 | } | ||
106 | |||
107 | /* | ||
108 | * finit | ||
109 | */ | ||
110 | void DIVA_EXIT_FUNCTION diddfunc_finit(void) | ||
111 | { | ||
112 | DbgDeregister(); | ||
113 | disconnect_didd(); | ||
114 | diva_didd_load_time_finit(); | ||
115 | } | ||