Commit b11523f3 authored by Linus Torvalds's avatar Linus Torvalds

Merge http://linux-isdn.bkbits.net/linux-2.5.isdn

into home.transmeta.com:/home/torvalds/v2.5/linux
parents 7fda910b 27bd1b5e
...@@ -41,7 +41,9 @@ config ISDN ...@@ -41,7 +41,9 @@ config ISDN
Therefore the old ISDN4Linux layer is becoming obsolete. It is Therefore the old ISDN4Linux layer is becoming obsolete. It is
still usable, though, if you select this option. still usable, though, if you select this option.
if ISDN
source "drivers/isdn/i4l/Kconfig" source "drivers/isdn/i4l/Kconfig"
endif
endmenu endmenu
......
...@@ -12,7 +12,7 @@ config CAPI_AVM ...@@ -12,7 +12,7 @@ config CAPI_AVM
config ISDN_DRV_AVMB1_B1ISA config ISDN_DRV_AVMB1_B1ISA
tristate "AVM B1 ISA support" tristate "AVM B1 ISA support"
depends on CAPI_AVM && ISDN_CAPI && SA depends on CAPI_AVM && ISDN_CAPI && ISA
help help
Enable support for the ISA version of the AVM B1 card. Enable support for the ISA version of the AVM B1 card.
......
...@@ -5,14 +5,13 @@ ...@@ -5,14 +5,13 @@
#define DIVA_UM_IDI_ADAPTER_REMOVED 0x00000001 #define DIVA_UM_IDI_ADAPTER_REMOVED 0x00000001
typedef struct _diva_um_idi_adapter { typedef struct _diva_um_idi_adapter {
diva_entity_link_t link; diva_entity_link_t link;
DESCRIPTOR d; DESCRIPTOR d;
int adapter_nr; int adapter_nr;
diva_entity_queue_t entity_q; /* entities linked to this adapter */ diva_entity_queue_t entity_q; /* entities linked to this adapter */
dword status; dword status;
} diva_um_idi_adapter_t; } diva_um_idi_adapter_t;
#endif #endif
This diff is collapsed.
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
* of the GNU General Public License, incorporated herein by reference. * of the GNU General Public License, incorporated herein by reference.
*/ */
#ifndef __CAPIFUNC_H__ #ifndef __CAPIFUNC_H__
#define __CAPIFUNC_H__ #define __CAPIFUNC_H__
#define MAX_DESCRIPTORS 32 #define MAX_DESCRIPTORS 32
......
...@@ -31,20 +31,20 @@ ...@@ -31,20 +31,20 @@
EXPORT_NO_SYMBOLS; EXPORT_NO_SYMBOLS;
static char *main_revision = "$Revision: 1.1.2.2 $"; static char *main_revision = "$Revision: 1.1.2.11 $";
static char *DRIVERNAME = "Eicon DIVA - CAPI Interface driver (http://www.melware.net)"; static char *DRIVERNAME =
"Eicon DIVA - CAPI Interface driver (http://www.melware.net)";
static char *DRIVERLNAME = "divacapi"; static char *DRIVERLNAME = "divacapi";
MODULE_DESCRIPTION( "CAPI driver for Eicon DIVA cards"); MODULE_DESCRIPTION("CAPI driver for Eicon DIVA cards");
MODULE_AUTHOR( "Cytronics & Melware, Eicon Networks"); MODULE_AUTHOR("Cytronics & Melware, Eicon Networks");
MODULE_SUPPORTED_DEVICE( "CAPI and DIVA card drivers"); MODULE_SUPPORTED_DEVICE("CAPI and DIVA card drivers");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
/* /*
* get revision number from revision string * get revision number from revision string
*/ */
static char * static char *getrev(const char *revision)
getrev(const char *revision)
{ {
char *rev; char *rev;
char *p; char *p;
...@@ -52,7 +52,8 @@ getrev(const char *revision) ...@@ -52,7 +52,8 @@ getrev(const char *revision)
rev = p + 2; rev = p + 2;
p = strchr(rev, '$'); p = strchr(rev, '$');
*--p = 0; *--p = 0;
} else rev = "1.0"; } else
rev = "1.0";
return rev; return rev;
} }
...@@ -60,86 +61,85 @@ getrev(const char *revision) ...@@ -60,86 +61,85 @@ getrev(const char *revision)
/* /*
* sleep for some milliseconds * sleep for some milliseconds
*/ */
void void diva_os_sleep(dword mSec)
diva_os_sleep (dword mSec)
{ {
unsigned long timeout = HZ * mSec / 1000 + 1; unsigned long timeout = HZ * mSec / 1000 + 1;
set_current_state(TASK_UNINTERRUPTIBLE); set_current_state(TASK_UNINTERRUPTIBLE);
schedule_timeout(timeout); schedule_timeout(timeout);
} }
/* /*
* wait for some milliseconds * wait for some milliseconds
*/ */
void void diva_os_wait(dword mSec)
diva_os_wait (dword mSec)
{ {
mdelay (mSec); mdelay(mSec);
} }
/* /*
* alloc memory * alloc memory
*/ */
void* diva_os_malloc (unsigned long flags, unsigned long size) void *diva_os_malloc(unsigned long flags, unsigned long size)
{ {
void* ret = NULL; void *ret = NULL;
if (size) { if (size) {
ret = (void *)vmalloc((unsigned int)size); ret = (void *) vmalloc((unsigned int) size);
} }
return(ret); return (ret);
} }
/* /*
* free memory * free memory
*/ */
void diva_os_free(unsigned long unused, void* ptr) void diva_os_free(unsigned long unused, void *ptr)
{ {
if (ptr) { if (ptr) {
vfree(ptr); vfree(ptr);
} }
} }
/* /*
* alloc a message buffer * alloc a message buffer
*/ */
diva_os_message_buffer_s * diva_os_message_buffer_s *diva_os_alloc_message_buffer(unsigned long size,
diva_os_alloc_message_buffer(unsigned long size, void **data_buf) void **data_buf)
{ {
diva_os_message_buffer_s *dmb = alloc_skb(size, GFP_ATOMIC); diva_os_message_buffer_s *dmb = alloc_skb(size, GFP_ATOMIC);
if (dmb) { if (dmb) {
*data_buf = skb_put(dmb, size); *data_buf = skb_put(dmb, size);
} }
return(dmb); return (dmb);
} }
/* /*
* free a message buffer * free a message buffer
*/ */
void diva_os_free_message_buffer(diva_os_message_buffer_s *dmb) void diva_os_free_message_buffer(diva_os_message_buffer_s * dmb)
{ {
kfree_skb(dmb); kfree_skb(dmb);
} }
/* /*
* proc function for controller info * proc function for controller info
*/ */
static int diva_ctl_read_proc(char *page, char **start, off_t off,int count, int *eof, struct capi_ctr *ctrl) static int diva_ctl_read_proc(char *page, char **start, off_t off,
int count, int *eof, struct capi_ctr *ctrl)
{ {
diva_card *card = (diva_card *)ctrl->driverdata; diva_card *card = (diva_card *) ctrl->driverdata;
int len = 0; int len = 0;
len += sprintf(page+len, "%s\n", ctrl->name); len += sprintf(page + len, "%s\n", ctrl->name);
len += sprintf(page+len, "Serial No. : %s\n", ctrl->serial); len += sprintf(page + len, "Serial No. : %s\n", ctrl->serial);
len += sprintf(page+len, "Id : %d\n", card->Id); len += sprintf(page + len, "Id : %d\n", card->Id);
len += sprintf(page+len, "Channels : %d\n", card->d.channels); len += sprintf(page + len, "Channels : %d\n", card->d.channels);
if (off + count >= len) if (off + count >= len)
*eof = 1; *eof = 1;
if (len < off) if (len < off)
return 0; return 0;
*start = page + off; *start = page + off;
return((count < len-off) ? count : len-off); return ((count < len - off) ? count : len - off);
} }
/* /*
...@@ -147,52 +147,50 @@ static int diva_ctl_read_proc(char *page, char **start, off_t off,int count, int ...@@ -147,52 +147,50 @@ static int diva_ctl_read_proc(char *page, char **start, off_t off,int count, int
*/ */
void diva_os_set_controller_struct(struct capi_ctr *ctrl) void diva_os_set_controller_struct(struct capi_ctr *ctrl)
{ {
ctrl->driver_name = DRIVERLNAME; ctrl->driver_name = DRIVERLNAME;
ctrl->load_firmware = 0; ctrl->load_firmware = 0;
ctrl->reset_ctr = 0; ctrl->reset_ctr = 0;
ctrl->ctr_read_proc = diva_ctl_read_proc; ctrl->ctr_read_proc = diva_ctl_read_proc;
SET_MODULE_OWNER(ctrl); SET_MODULE_OWNER(ctrl);
} }
/* /*
* module init * module init
*/ */
static int DIVA_INIT_FUNCTION static int DIVA_INIT_FUNCTION divacapi_init(void)
divacapi_init(void)
{ {
char tmprev[32]; char tmprev[32];
int ret = 0; int ret = 0;
MOD_INC_USE_COUNT; MOD_INC_USE_COUNT;
sprintf(DRIVERRELEASE, "%d.%d%s", DRRELMAJOR, DRRELMINOR, DRRELEXTRA); sprintf(DRIVERRELEASE, "%d.%d%s", DRRELMAJOR, DRRELMINOR,
DRRELEXTRA);
printk(KERN_INFO "%s\n", DRIVERNAME); printk(KERN_INFO "%s\n", DRIVERNAME);
printk(KERN_INFO "%s: Rel:%s Rev:", DRIVERLNAME, DRIVERRELEASE); printk(KERN_INFO "%s: Rel:%s Rev:", DRIVERLNAME, DRIVERRELEASE);
strcpy(tmprev, main_revision); strcpy(tmprev, main_revision);
printk("%s Build: %s(%s)\n", getrev(tmprev), printk("%s Build: %s(%s)\n", getrev(tmprev),
diva_capi_common_code_build, DIVA_BUILD); diva_capi_common_code_build, DIVA_BUILD);
if (!(init_capifunc())) if (!(init_capifunc())) {
{ printk(KERN_ERR "%s: failed init capi_driver.\n",
printk(KERN_ERR "%s: failed init capi_driver.\n", DRIVERLNAME); DRIVERLNAME);
ret = -EIO; ret = -EIO;
} }
MOD_DEC_USE_COUNT; MOD_DEC_USE_COUNT;
return ret; return ret;
} }
/* /*
* module exit * module exit
*/ */
static void DIVA_EXIT_FUNCTION static void DIVA_EXIT_FUNCTION divacapi_exit(void)
divacapi_exit(void)
{ {
finit_capifunc(); finit_capifunc();
printk(KERN_INFO "%s: module unloaded.\n", DRIVERLNAME); printk(KERN_INFO "%s: module unloaded.\n", DRIVERLNAME);
} }
module_init(divacapi_init); module_init(divacapi_init);
module_exit(divacapi_exit); module_exit(divacapi_exit);
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
#define DBG_DEFAULT (DBG_MINIMUM + DL_XLOG + DL_REG) #define DBG_DEFAULT (DBG_MINIMUM + DL_XLOG + DL_REG)
extern void DIVA_DIDD_Read (void *, int); extern void DIVA_DIDD_Read(void *, int);
extern char *DRIVERRELEASE; extern char *DRIVERRELEASE;
static dword notify_handle; static dword notify_handle;
static DESCRIPTOR _DAdapter; static DESCRIPTOR _DAdapter;
...@@ -30,73 +30,65 @@ static DESCRIPTOR _DAdapter; ...@@ -30,73 +30,65 @@ static DESCRIPTOR _DAdapter;
/* /*
* didd callback function * didd callback function
*/ */
static void * static void *didd_callback(void *context, DESCRIPTOR * adapter,
didd_callback(void *context, DESCRIPTOR* adapter, int removal) int removal)
{ {
if (adapter->type == IDI_DADAPTER) if (adapter->type == IDI_DADAPTER) {
{ DBG_ERR(("Notification about IDI_DADAPTER change ! Oops."))
DBG_ERR(("Notification about IDI_DADAPTER change ! Oops.")) return (NULL);
return(NULL); } else if (adapter->type == IDI_DIMAINT) {
} if (removal) {
else if (adapter->type == IDI_DIMAINT) DbgDeregister();
{
if (removal) {
DbgDeregister();
} else { } else {
DbgRegister("DIDD", DRIVERRELEASE, DBG_DEFAULT); DbgRegister("DIDD", DRIVERRELEASE, DBG_DEFAULT);
} }
} }
return(NULL); return (NULL);
} }
/* /*
* connect to didd * connect to didd
*/ */
static int DIVA_INIT_FUNCTION static int DIVA_INIT_FUNCTION connect_didd(void)
connect_didd(void)
{ {
int x = 0; int x = 0;
int dadapter = 0; int dadapter = 0;
IDI_SYNC_REQ req; IDI_SYNC_REQ req;
DESCRIPTOR DIDD_Table[MAX_DESCRIPTORS]; DESCRIPTOR DIDD_Table[MAX_DESCRIPTORS];
DIVA_DIDD_Read(DIDD_Table, sizeof(DIDD_Table)); DIVA_DIDD_Read(DIDD_Table, sizeof(DIDD_Table));
for (x = 0; x < MAX_DESCRIPTORS; x++) for (x = 0; x < MAX_DESCRIPTORS; x++) {
{ if (DIDD_Table[x].type == IDI_DADAPTER) { /* DADAPTER found */
if (DIDD_Table[x].type == IDI_DADAPTER) dadapter = 1;
{ /* DADAPTER found */ memcpy(&_DAdapter, &DIDD_Table[x], sizeof(_DAdapter));
dadapter = 1; req.didd_notify.e.Req = 0;
memcpy(&_DAdapter, &DIDD_Table[x], sizeof(_DAdapter)); req.didd_notify.e.Rc =
req.didd_notify.e.Req = 0; IDI_SYNC_REQ_DIDD_REGISTER_ADAPTER_NOTIFY;
req.didd_notify.e.Rc = IDI_SYNC_REQ_DIDD_REGISTER_ADAPTER_NOTIFY; req.didd_notify.info.callback = didd_callback;
req.didd_notify.info.callback = didd_callback; req.didd_notify.info.context = 0;
req.didd_notify.info.context = 0; _DAdapter.request((ENTITY *) & req);
_DAdapter.request((ENTITY *)&req); if (req.didd_notify.e.Rc != 0xff)
if (req.didd_notify.e.Rc != 0xff) return (0);
return(0); notify_handle = req.didd_notify.info.handle;
notify_handle = req.didd_notify.info.handle; } else if (DIDD_Table[x].type == IDI_DIMAINT) { /* MAINT found */
} DbgRegister("DIDD", DRIVERRELEASE, DBG_DEFAULT);
else if (DIDD_Table[x].type == IDI_DIMAINT) }
{ /* MAINT found */ }
DbgRegister("DIDD", DRIVERRELEASE, DBG_DEFAULT); return (dadapter);
}
}
return(dadapter);
} }
/* /*
* disconnect from didd * disconnect from didd
*/ */
static void DIVA_EXIT_FUNCTION static void DIVA_EXIT_FUNCTION disconnect_didd(void)
disconnect_didd(void)
{ {
IDI_SYNC_REQ req; IDI_SYNC_REQ req;
req.didd_notify.e.Req = 0; req.didd_notify.e.Req = 0;
req.didd_notify.e.Rc = IDI_SYNC_REQ_DIDD_REMOVE_ADAPTER_NOTIFY; req.didd_notify.e.Rc = IDI_SYNC_REQ_DIDD_REMOVE_ADAPTER_NOTIFY;
req.didd_notify.info.handle = notify_handle; req.didd_notify.info.handle = notify_handle;
_DAdapter.request((ENTITY *)&req); _DAdapter.request((ENTITY *) & req);
} }
/* /*
...@@ -104,14 +96,14 @@ disconnect_didd(void) ...@@ -104,14 +96,14 @@ disconnect_didd(void)
*/ */
int DIVA_INIT_FUNCTION diddfunc_init(void) int DIVA_INIT_FUNCTION diddfunc_init(void)
{ {
diva_didd_load_time_init(); diva_didd_load_time_init();
if(!connect_didd()) { if (!connect_didd()) {
DBG_ERR(("init: failed to connect to DIDD.")) DBG_ERR(("init: failed to connect to DIDD."))
diva_didd_load_time_finit(); diva_didd_load_time_finit();
return(0); return (0);
} }
return(1); return (1);
} }
/* /*
...@@ -119,8 +111,7 @@ int DIVA_INIT_FUNCTION diddfunc_init(void) ...@@ -119,8 +111,7 @@ int DIVA_INIT_FUNCTION diddfunc_init(void)
*/ */
void DIVA_EXIT_FUNCTION diddfunc_finit(void) void DIVA_EXIT_FUNCTION diddfunc_finit(void)
{ {
DbgDeregister(); DbgDeregister();
disconnect_didd(); disconnect_didd();
diva_didd_load_time_finit(); diva_didd_load_time_finit();
} }
This diff is collapsed.
/* $Id: diva.h,v 1.1.2.2 2002/10/02 14:38:37 armin Exp $ */ /* $Id: diva.h,v 1.1.2.2 2001/02/08 12:25:43 armin Exp $ */
#ifndef __DIVA_XDI_OS_PART_H__ #ifndef __DIVA_XDI_OS_PART_H__
#define __DIVA_XDI_OS_PART_H__ #define __DIVA_XDI_OS_PART_H__
int divasa_xdi_driver_entry (void); int divasa_xdi_driver_entry(void);
void divasa_xdi_driver_unload (void); void divasa_xdi_driver_unload(void);
void* diva_driver_add_card (void* pdev, unsigned long CardOrdinal); void *diva_driver_add_card(void *pdev, unsigned long CardOrdinal);
void diva_driver_remove_card (void* pdiva); void diva_driver_remove_card(void *pdiva);
typedef int (*divas_xdi_copy_to_user_fn_t)(void* os_handle, void* dst, typedef int (*divas_xdi_copy_to_user_fn_t) (void *os_handle, void *dst,
const void* src, int length); const void *src, int length);
typedef int (*divas_xdi_copy_from_user_fn_t)(void* os_handle, void* dst, typedef int (*divas_xdi_copy_from_user_fn_t) (void *os_handle, void *dst,
const void* src, int length); const void *src, int length);
int diva_xdi_read (void* adapter, void* os_handle, void* dst, int diva_xdi_read(void *adapter, void *os_handle, void *dst,
int max_length, divas_xdi_copy_to_user_fn_t cp_fn); int max_length, divas_xdi_copy_to_user_fn_t cp_fn);
int diva_xdi_write (void* adapter, void* os_handle, const void* src, int diva_xdi_write(void *adapter, void *os_handle, const void *src,
int length, divas_xdi_copy_from_user_fn_t cp_fn); int length, divas_xdi_copy_from_user_fn_t cp_fn);
void* diva_xdi_open_adapter (void* os_handle, const void* src, void *diva_xdi_open_adapter(void *os_handle, const void *src,
int length, divas_xdi_copy_from_user_fn_t cp_fn); int length,
divas_xdi_copy_from_user_fn_t cp_fn);
void diva_xdi_close_adapter (void* adapter, void* os_handle); void diva_xdi_close_adapter(void *adapter, void *os_handle);
#endif #endif
/* $Id: diva_didd.c,v 1.1.2.2 2002/10/02 14:38:37 armin Exp $ /* $Id: diva_didd.c,v 1.1.2.6 2001/05/01 15:48:05 armin Exp $
* *
* DIDD Interface module for Eicon active cards. * DIDD Interface module for Eicon active cards.
* *
...@@ -23,18 +23,19 @@ ...@@ -23,18 +23,19 @@
#include "divasync.h" #include "divasync.h"
#include "did_vers.h" #include "did_vers.h"
static char *main_revision = "$Revision: 1.1.2.2 $"; static char *main_revision = "$Revision: 1.1.2.6 $";
static char *DRIVERNAME = "Eicon DIVA - DIDD table (http://www.melware.net)"; static char *DRIVERNAME =
"Eicon DIVA - DIDD table (http://www.melware.net)";
static char *DRIVERLNAME = "divadidd"; static char *DRIVERLNAME = "divadidd";
char *DRIVERRELEASE = "2.0"; char *DRIVERRELEASE = "2.0";
static char *dir_in_proc_net = "isdn"; static char *dir_in_proc_net = "isdn";
static char *main_proc_dir = "eicon"; static char *main_proc_dir = "eicon";
MODULE_DESCRIPTION( "DIDD table driver for diva drivers"); MODULE_DESCRIPTION("DIDD table driver for diva drivers");
MODULE_AUTHOR( "Cytronics & Melware, Eicon Networks"); MODULE_AUTHOR("Cytronics & Melware, Eicon Networks");
MODULE_SUPPORTED_DEVICE( "Eicon diva drivers"); MODULE_SUPPORTED_DEVICE("Eicon diva drivers");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
#define MAX_DESCRIPTORS 32 #define MAX_DESCRIPTORS 32
...@@ -45,7 +46,7 @@ MODULE_LICENSE("GPL"); ...@@ -45,7 +46,7 @@ MODULE_LICENSE("GPL");
extern int diddfunc_init(void); extern int diddfunc_init(void);
extern void diddfunc_finit(void); extern void diddfunc_finit(void);
extern void DIVA_DIDD_Read (void *, int); extern void DIVA_DIDD_Read(void *, int);
static struct proc_dir_entry *proc_net_isdn; static struct proc_dir_entry *proc_net_isdn;
static struct proc_dir_entry *proc_didd; static struct proc_dir_entry *proc_didd;
...@@ -54,8 +55,7 @@ struct proc_dir_entry *proc_net_isdn_eicon = NULL; ...@@ -54,8 +55,7 @@ struct proc_dir_entry *proc_net_isdn_eicon = NULL;
EXPORT_SYMBOL_NOVERS(DIVA_DIDD_Read); EXPORT_SYMBOL_NOVERS(DIVA_DIDD_Read);
EXPORT_SYMBOL_NOVERS(proc_net_isdn_eicon); EXPORT_SYMBOL_NOVERS(proc_net_isdn_eicon);
static char * static char *getrev(const char *revision)
getrev(const char *revision)
{ {
char *rev; char *rev;
char *p; char *p;
...@@ -63,106 +63,112 @@ getrev(const char *revision) ...@@ -63,106 +63,112 @@ getrev(const char *revision)
rev = p + 2; rev = p + 2;
p = strchr(rev, '$'); p = strchr(rev, '$');
*--p = 0; *--p = 0;
} else rev = "1.0"; } else
rev = "1.0";
return rev; return rev;
} }
static int static int
proc_read(char *page, char **start, off_t off, int count, int *eof, void *data) proc_read(char *page, char **start, off_t off, int count, int *eof,
void *data)
{ {
int len = 0; int len = 0;
char tmprev[32]; char tmprev[32];
strcpy(tmprev, main_revision); strcpy(tmprev, main_revision);
len += sprintf(page+len, "%s\n", DRIVERNAME); len += sprintf(page + len, "%s\n", DRIVERNAME);
len += sprintf(page+len, "name : %s\n", DRIVERLNAME); len += sprintf(page + len, "name : %s\n", DRIVERLNAME);
len += sprintf(page+len, "release : %s\n", DRIVERRELEASE); len += sprintf(page + len, "release : %s\n", DRIVERRELEASE);
len += sprintf(page+len, "build : %s(%s)\n", len += sprintf(page + len, "build : %s(%s)\n",
diva_didd_common_code_build, DIVA_BUILD); diva_didd_common_code_build, DIVA_BUILD);
len += sprintf(page+len, "revision : %s\n", getrev(tmprev)); len += sprintf(page + len, "revision : %s\n", getrev(tmprev));
if (off + count >= len) if (off + count >= len)
*eof = 1; *eof = 1;
if (len < off) if (len < off)
return 0; return 0;
*start = page + off; *start = page + off;
return((count < len-off) ? count : len-off); return ((count < len - off) ? count : len - off);
} }
static int DIVA_INIT_FUNCTION create_proc(void) static int DIVA_INIT_FUNCTION create_proc(void)
{ {
struct proc_dir_entry *pe; struct proc_dir_entry *pe;
for (pe = proc_net->subdir; pe; pe = pe->next) { for (pe = proc_net->subdir; pe; pe = pe->next) {
if (!memcmp(dir_in_proc_net, pe->name, pe->namelen)) { if (!memcmp(dir_in_proc_net, pe->name, pe->namelen)) {
proc_net_isdn = pe; proc_net_isdn = pe;
break; break;
} }
} }
if (!proc_net_isdn) { if (!proc_net_isdn) {
proc_net_isdn = create_proc_entry(dir_in_proc_net, S_IFDIR, proc_net); proc_net_isdn =
} create_proc_entry(dir_in_proc_net, S_IFDIR, proc_net);
proc_net_isdn_eicon = create_proc_entry(main_proc_dir, S_IFDIR, proc_net_isdn); }
proc_net_isdn_eicon =
if(proc_net_isdn_eicon) { create_proc_entry(main_proc_dir, S_IFDIR, proc_net_isdn);
if((proc_didd = create_proc_entry(DRIVERLNAME, S_IFREG | S_IRUGO, proc_net_isdn_eicon))) {
proc_didd->read_proc = proc_read; if (proc_net_isdn_eicon) {
} if (
return(1); (proc_didd =
} create_proc_entry(DRIVERLNAME, S_IFREG | S_IRUGO,
return(0); proc_net_isdn_eicon))) {
proc_didd->read_proc = proc_read;
}
return (1);
}
return (0);
} }
static void DIVA_EXIT_FUNCTION remove_proc(void) static void DIVA_EXIT_FUNCTION remove_proc(void)
{ {
remove_proc_entry(DRIVERLNAME, proc_net_isdn_eicon); remove_proc_entry(DRIVERLNAME, proc_net_isdn_eicon);
remove_proc_entry(main_proc_dir, proc_net_isdn); remove_proc_entry(main_proc_dir, proc_net_isdn);
if ((proc_net_isdn) && (!proc_net_isdn->subdir)){ if ((proc_net_isdn) && (!proc_net_isdn->subdir)) {
remove_proc_entry(dir_in_proc_net, proc_net); remove_proc_entry(dir_in_proc_net, proc_net);
} }
} }
static int DIVA_INIT_FUNCTION static int DIVA_INIT_FUNCTION divadidd_init(void)
divadidd_init(void)
{ {
char tmprev[32]; char tmprev[32];
int ret = 0; int ret = 0;
MOD_INC_USE_COUNT; MOD_INC_USE_COUNT;
printk(KERN_INFO "%s\n", DRIVERNAME); printk(KERN_INFO "%s\n", DRIVERNAME);
printk(KERN_INFO "%s: Rel:%s Rev:", DRIVERLNAME, DRIVERRELEASE); printk(KERN_INFO "%s: Rel:%s Rev:", DRIVERLNAME, DRIVERRELEASE);
strcpy(tmprev, main_revision); strcpy(tmprev, main_revision);
printk("%s Build:%s(%s)\n", getrev(tmprev), printk("%s Build:%s(%s)\n", getrev(tmprev),
diva_didd_common_code_build, DIVA_BUILD); diva_didd_common_code_build, DIVA_BUILD);
if (!create_proc()) { if (!create_proc()) {
printk(KERN_ERR "%s: could not create proc entry\n", DRIVERLNAME); printk(KERN_ERR "%s: could not create proc entry\n",
ret = -EIO; DRIVERLNAME);
goto out; ret = -EIO;
} goto out;
}
if(!diddfunc_init()) {
printk(KERN_ERR "%s: failed to connect to DIDD.\n", DRIVERLNAME); if (!diddfunc_init()) {
remove_proc(); printk(KERN_ERR "%s: failed to connect to DIDD.\n",
ret = -EIO; DRIVERLNAME);
goto out; remove_proc();
} ret = -EIO;
goto out;
out: }
MOD_DEC_USE_COUNT;
return (ret); out:
MOD_DEC_USE_COUNT;
return (ret);
} }
void DIVA_EXIT_FUNCTION void DIVA_EXIT_FUNCTION divadidd_exit(void)
divadidd_exit(void)
{ {
diddfunc_finit(); diddfunc_finit();
remove_proc(); remove_proc();
printk(KERN_INFO "%s: module unloaded.\n", DRIVERLNAME); printk(KERN_INFO "%s: module unloaded.\n", DRIVERLNAME);
} }
module_init(divadidd_init); module_init(divadidd_init);
module_exit(divadidd_exit); module_exit(divadidd_exit);
/* $Id: diva_pci.h,v 1.1.2.2 2002/10/02 14:38:37 armin Exp $ */ /* $Id: diva_pci.h,v 1.1.2.2 2001/02/12 20:23:46 armin Exp $ */
#ifndef __DIVA_PCI_INTERFACE_H__ #ifndef __DIVA_PCI_INTERFACE_H__
#define __DIVA_PCI_INTERFACE_H__ #define __DIVA_PCI_INTERFACE_H__
void* divasa_remap_pci_bar (unsigned long bar, void *divasa_remap_pci_bar(unsigned long bar, unsigned long area_length);
unsigned long area_length); void divasa_unmap_pci_bar(void *bar);
void divasa_unmap_pci_bar (void* bar); unsigned long divasa_get_pci_irq(unsigned char bus,
unsigned long divasa_get_pci_irq (unsigned char bus, unsigned char func, void *pci_dev_handle);
unsigned char func, unsigned long divasa_get_pci_bar(unsigned char bus,
void* pci_dev_handle); unsigned char func,
unsigned long divasa_get_pci_bar (unsigned char bus, int bar, void *pci_dev_handle);
unsigned char func, byte diva_os_get_pci_bus(void *pci_dev_handle);
int bar, byte diva_os_get_pci_func(void *pci_dev_handle);
void* pci_dev_handle);
byte diva_os_get_pci_bus (void* pci_dev_handle);
byte diva_os_get_pci_func (void* pci_dev_handle);
#endif #endif
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
/* $Id: dlist.c,v 1.1.2.2 2002/10/02 14:38:37 armin Exp $ */ /* $Id: dlist.c,v 1.1.2.2 2001/02/11 14:40:41 armin Exp $ */
#include "platform.h" #include "platform.h"
#include "dlist.h" #include "dlist.h"
...@@ -7,102 +7,92 @@ ...@@ -7,102 +7,92 @@
** Initialize linked list ** Initialize linked list
*/ */
void void diva_q_init(diva_entity_queue_t * q)
diva_q_init (diva_entity_queue_t* q)
{ {
memset (q, 0x00, sizeof(*q)); memset(q, 0x00, sizeof(*q));
} }
/* /*
** Remove element from linked list ** Remove element from linked list
*/ */
void void diva_q_remove(diva_entity_queue_t * q, diva_entity_link_t * what)
diva_q_remove (diva_entity_queue_t* q, diva_entity_link_t* what)
{ {
if(!what->prev) { if (!what->prev) {
if ((q->head = what->next)) { if ((q->head = what->next)) {
q->head->prev = 0; q->head->prev = 0;
} else { } else {
q->tail = 0; q->tail = 0;
} }
} else if (!what->next) { } else if (!what->next) {
q->tail = what->prev; q->tail = what->prev;
q->tail->next = 0; q->tail->next = 0;
} else { } else {
what->prev->next = what->next; what->prev->next = what->next;
what->next->prev = what->prev; what->next->prev = what->prev;
} }
what->prev = what->next = 0; what->prev = what->next = 0;
} }
/* /*
** Add element to the tail of linked list ** Add element to the tail of linked list
*/ */
void void diva_q_add_tail(diva_entity_queue_t * q, diva_entity_link_t * what)
diva_q_add_tail (diva_entity_queue_t* q, diva_entity_link_t* what)
{ {
what->next = 0; what->next = 0;
if (!q->head) { if (!q->head) {
what->prev = 0; what->prev = 0;
q->head = q->tail = what; q->head = q->tail = what;
} else { } else {
what->prev = q->tail; what->prev = q->tail;
q->tail->next = what; q->tail->next = what;
q->tail = what; q->tail = what;
} }
} }
diva_entity_link_t* diva_entity_link_t *diva_q_find(const diva_entity_queue_t * q,
diva_q_find (const diva_entity_queue_t* q, const void* what, const void *what, diva_q_cmp_fn_t cmp_fn)
diva_q_cmp_fn_t cmp_fn)
{ {
diva_entity_link_t* diva_current = q->head; diva_entity_link_t *diva_current = q->head;
while (diva_current) { while (diva_current) {
if (!(*cmp_fn)(what, diva_current)) { if (!(*cmp_fn) (what, diva_current)) {
break; break;
} }
diva_current = diva_current->next; diva_current = diva_current->next;
} }
return (diva_current); return (diva_current);
} }
diva_entity_link_t* diva_entity_link_t *diva_q_get_head(diva_entity_queue_t * q)
diva_q_get_head (diva_entity_queue_t* q)
{ {
return (q->head); return (q->head);
} }
diva_entity_link_t* diva_entity_link_t *diva_q_get_tail(diva_entity_queue_t * q)
diva_q_get_tail (diva_entity_queue_t* q)
{ {
return (q->tail); return (q->tail);
} }
diva_entity_link_t* diva_entity_link_t *diva_q_get_next(diva_entity_link_t * what)
diva_q_get_next (diva_entity_link_t* what)
{ {
return ((what) ? what->next : 0); return ((what) ? what->next : 0);
} }
diva_entity_link_t* diva_entity_link_t *diva_q_get_prev(diva_entity_link_t * what)
diva_q_get_prev (diva_entity_link_t* what)
{ {
return ((what) ? what->prev : 0); return ((what) ? what->prev : 0);
} }
int int diva_q_get_nr_of_entries(const diva_entity_queue_t * q)
diva_q_get_nr_of_entries (const diva_entity_queue_t* q)
{ {
int i = 0; int i = 0;
const diva_entity_link_t* diva_current = q->head; const diva_entity_link_t *diva_current = q->head;
while (diva_current) { while (diva_current) {
i++; i++;
diva_current = diva_current->next; diva_current = diva_current->next;
} }
return (i); return (i);
} }
/* $Id: dlist.h,v 1.1.2.2 2002/10/02 14:38:37 armin Exp $ */ /* $Id: dlist.h,v 1.1.2.2 2001/02/08 12:25:43 armin Exp $ */
#ifndef __DIVA_LINK_H__ #ifndef __DIVA_LINK_H__
#define __DIVA_LINK_H__ #define __DIVA_LINK_H__
struct _diva_entity_link; struct _diva_entity_link;
typedef struct _diva_entity_link { typedef struct _diva_entity_link {
struct _diva_entity_link* prev; struct _diva_entity_link *prev;
struct _diva_entity_link* next; struct _diva_entity_link *next;
} diva_entity_link_t; } diva_entity_link_t;
typedef struct _diva_entity_queue { typedef struct _diva_entity_queue {
diva_entity_link_t* head; diva_entity_link_t *head;
diva_entity_link_t* tail; diva_entity_link_t *tail;
} diva_entity_queue_t; } diva_entity_queue_t;
typedef int (*diva_q_cmp_fn_t)(const void* what, typedef int (*diva_q_cmp_fn_t) (const void *what,
const diva_entity_link_t*); const diva_entity_link_t *);
void diva_q_remove (diva_entity_queue_t* q, diva_entity_link_t* what); void diva_q_remove(diva_entity_queue_t * q, diva_entity_link_t * what);
void diva_q_add_tail (diva_entity_queue_t* q, diva_entity_link_t* what); void diva_q_add_tail(diva_entity_queue_t * q, diva_entity_link_t * what);
diva_entity_link_t* diva_q_find (const diva_entity_queue_t* q, diva_entity_link_t *diva_q_find(const diva_entity_queue_t * q,
const void* what, diva_q_cmp_fn_t cmp_fn); const void *what, diva_q_cmp_fn_t cmp_fn);
diva_entity_link_t* diva_q_get_head (diva_entity_queue_t* q); diva_entity_link_t *diva_q_get_head(diva_entity_queue_t * q);
diva_entity_link_t* diva_q_get_tail (diva_entity_queue_t* q); diva_entity_link_t *diva_q_get_tail(diva_entity_queue_t * q);
diva_entity_link_t* diva_q_get_next (diva_entity_link_t* what); diva_entity_link_t *diva_q_get_next(diva_entity_link_t * what);
diva_entity_link_t* diva_q_get_prev (diva_entity_link_t* what); diva_entity_link_t *diva_q_get_prev(diva_entity_link_t * what);
int diva_q_get_nr_of_entries (const diva_entity_queue_t* q); int diva_q_get_nr_of_entries(const diva_entity_queue_t * q);
void diva_q_init (diva_entity_queue_t* q); void diva_q_init(diva_entity_queue_t * q);
#endif #endif
This diff is collapsed.
This diff is collapsed.
/* $Id: dsp_tst.h,v 1.1.2.2 2002/10/02 14:38:37 armin Exp $ */ /* $Id: dsp_tst.h,v 1.1.2.2 2001/02/08 12:25:43 armin Exp $ */
#ifndef __DIVA_PRI_HOST_TEST_DSPS_H__ #ifndef __DIVA_PRI_HOST_TEST_DSPS_H__
#define __DIVA_PRI_HOST_TEST_DSPS_H__ #define __DIVA_PRI_HOST_TEST_DSPS_H__
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
#define DSP10_PORT (0x840) #define DSP10_PORT (0x840)
#define DSP11_PORT (0x848) #define DSP11_PORT (0x848)
#define DSP12_PORT (0x850) #define DSP12_PORT (0x850)
#define DSP13_PORT (0x858) #define DSP13_PORT (0x858)
#define DSP14_PORT (0x860) #define DSP14_PORT (0x860)
#define DSP15_PORT (0x868) #define DSP15_PORT (0x868)
#define DSP16_PORT (0x870) #define DSP16_PORT (0x870)
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
/* $Id: os_4bri.h,v 1.1.2.2 2002/10/02 14:38:38 armin Exp $ */ /* $Id: os_4bri.h,v 1.1.2.2 2001/02/08 12:25:44 armin Exp $ */
#ifndef __DIVA_OS_4_BRI_H__ #ifndef __DIVA_OS_4_BRI_H__
#define __DIVA_OS_4_BRI_H__ #define __DIVA_OS_4_BRI_H__
int diva_4bri_init_card (diva_os_xdi_adapter_t* a); int diva_4bri_init_card(diva_os_xdi_adapter_t * a);
#endif #endif
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
/* $Id: platform.h,v 1.1.2.2 2002/10/02 14:38:38 armin Exp $ /* $Id: platform.h,v 1.1.2.6 2001/05/01 15:48:05 armin Exp $
* *
* platform.h * platform.h
* *
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment