1 /* $Id: diddfunc.c,v 1.14.6.2 2004/08/28 20:03:53 armin Exp $
3 * DIDD Interface module for Eicon active cards.
5 * Functions are in dadapter.c
7 * Copyright 2002-2003 by Armin Schindler (mac@melware.de)
8 * Copyright 2002-2003 Cytronics & Melware (info@melware.de)
10 * This software may be used and distributed according to the terms
11 * of the GNU General Public License, incorporated herein by reference.
19 #define DBG_MINIMUM (DL_LOG + DL_FTL + DL_ERR)
20 #define DBG_DEFAULT (DBG_MINIMUM + DL_XLOG + DL_REG)
23 extern void DIVA_DIDD_Read(void *, int);
24 extern char *DRIVERRELEASE_DIDD
;
25 static dword notify_handle
;
26 static DESCRIPTOR _DAdapter
;
29 * didd callback function
31 static void *didd_callback(void *context
, DESCRIPTOR
*adapter
,
34 if (adapter
->type
== IDI_DADAPTER
) {
35 DBG_ERR(("Notification about IDI_DADAPTER change ! Oops."))
37 } else if (adapter
->type
== IDI_DIMAINT
) {
41 DbgRegister("DIDD", DRIVERRELEASE_DIDD
, DBG_DEFAULT
);
50 static int __init
connect_didd(void)
55 DESCRIPTOR DIDD_Table
[MAX_DESCRIPTORS
];
57 DIVA_DIDD_Read(DIDD_Table
, sizeof(DIDD_Table
));
59 for (x
= 0; x
< MAX_DESCRIPTORS
; x
++) {
60 if (DIDD_Table
[x
].type
== IDI_DADAPTER
) { /* DADAPTER found */
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)
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
);
80 * disconnect from didd
82 static void __exit
disconnect_didd(void)
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
);
95 int __init
diddfunc_init(void)
97 diva_didd_load_time_init();
99 if (!connect_didd()) {
100 DBG_ERR(("init: failed to connect to DIDD."))
101 diva_didd_load_time_finit();
110 void __exit
diddfunc_finit(void)
114 diva_didd_load_time_finit();