diff -u -r fritz/src/driver.c fcclassic/src/driver.c --- fritz/src/driver.c 2005-07-07 00:00:00.000000000 +0200 +++ fcclassic/src/driver.c 2007-11-04 12:08:10.000000000 +0100 @@ -107,7 +107,7 @@ /*---------------------------------------------------------------------------*\ \*---------------------------------------------------------------------------*/ static void scheduler (unsigned long data); -static irqreturn_t irq_handler (int irq, void * args, struct pt_regs * regs); +static irqreturn_t irq_handler (int irq, void * args); static DECLARE_TASKLET_DISABLED (scheduler_tasklet, scheduler, 0); @@ -608,6 +608,7 @@ ERROR("Error: %s\n", msg); hfree (card); capi_card = NULL; + capi_controller = NULL; return res; } @@ -836,11 +837,10 @@ /*---------------------------------------------------------------------------*\ \*---------------------------------------------------------------------------*/ -static irqreturn_t irq_handler (int irq, void * args, struct pt_regs * regs) { +static irqreturn_t irq_handler (int irq, void * args) { int res = IRQ_NONE; UNUSED_ARG (irq); - UNUSED_ARG (regs); if (args != NULL) { assert (capi_lib->cm_handle_events != NULL); if (atomic_read (&scheduler_id) == smp_processor_id ()) { @@ -901,14 +901,14 @@ /*---------------------------------------------------------------------------*\ \*---------------------------------------------------------------------------*/ -int driver_init (void) { +int my_driver_init (void) { return (NULL != (capi_lib = link_library (NULL))); } /* driver_init */ /*---------------------------------------------------------------------------*\ \*---------------------------------------------------------------------------*/ -void driver_exit (void) { +void my_driver_exit (void) { assert (capi_lib != NULL); free_library (); diff -u -r fritz/src/driver.h fcclassic/src/driver.h --- fritz/src/driver.h 2005-07-07 00:00:00.000000000 +0200 +++ fcclassic/src/driver.h 2007-06-10 20:52:42.000000000 +0200 @@ -23,7 +23,7 @@ #ifndef __have_driver_h__ #define __have_driver_h__ -#include +//#include #include #include #include @@ -98,8 +98,8 @@ /*---------------------------------------------------------------------------*\ \*---------------------------------------------------------------------------*/ -extern int driver_init (void); -extern void driver_exit (void); +extern int my_driver_init (void); +extern void my_driver_exit (void); /*---------------------------------------------------------------------------*\ \*---------------------------------------------------------------------------*/ diff -u -r fritz/src/lib.c fcclassic/src/lib.c --- fritz/src/lib.c 2005-07-07 00:00:00.000000000 +0200 +++ fcclassic/src/lib.c 2007-06-12 04:58:27.000000000 +0200 @@ -389,16 +389,6 @@ /*---------------------------------------------------------------------------*\ \*---------------------------------------------------------------------------*/ -static __attr unsigned long long os_msec64 (void) { - unsigned long tmp; - - update_j64 (); - tmp = j64 * JIFF2MSEC; - return tmp; -} /* os_msec64 */ - -/*---------------------------------------------------------------------------*\ -\*---------------------------------------------------------------------------*/ static __attr unsigned long os_msec (void) { unsigned long tmp; @@ -678,7 +668,7 @@ .delay = &os_delay, #endif .msec = &os_msec, - .msec64 = &os_msec64, +// .msec64 = &os_msec64, .timer_new = &os_timer_new, .timer_delete = &os_timer_delete, .timer_start = &os_timer_start, diff -u -r fritz/src/libdefs.h fcclassic/src/libdefs.h --- fritz/src/libdefs.h 2005-07-07 00:00:00.000000000 +0200 +++ fcclassic/src/libdefs.h 2007-06-12 04:53:51.000000000 +0200 @@ -96,7 +96,7 @@ void (__attr * delay) (unsigned); #endif unsigned long (__attr * msec) (void); - unsigned long long (__attr * msec64) (void); +// unsigned long long (__attr * msec64) (void); int (__attr * timer_new) (unsigned); void (__attr * timer_delete) (void); diff -u -r fritz/src/main.c fcclassic/src/main.c --- fritz/src/main.c 2005-07-07 00:00:00.000000000 +0200 +++ fcclassic/src/main.c 2007-11-04 12:59:27.000000000 +0100 @@ -22,7 +22,7 @@ #include #include -#include +//#include #include #include #include @@ -205,7 +205,7 @@ NOTE(PRODUCT_LOGO " found: port 0x%04x, irq %u\n", pars.port, pars.irq); NOTE("Loading...\n"); - if (!driver_init ()) { + if (!my_driver_init ()) { ERROR("Error: Driver library not available.\n"); ERROR("Not loaded.\n"); return res; @@ -238,7 +238,7 @@ remove_ctrl (&card->ctrl); NOTE("Removed.\n"); libheap_exit (); - driver_exit (); + my_driver_exit (); #ifndef NDEBUG if (hallocated() != 0) { ERROR("%u bytes leaked.\n", hallocated()); @@ -270,7 +270,7 @@ NOTE (PRODUCT_LOGO " found: port 0x%04x, irq %u\n", pars.port, pars.irq); NOTE("Loading...\n"); - if (!driver_init ()) { + if (!my_driver_init ()) { ERROR("Error: Driver library not available.\n"); ERROR("Not loaded.\n"); return -EBUSY; @@ -303,7 +303,7 @@ remove_ctrl (&card->ctrl); NOTE("Removed.\n"); libheap_exit (); - driver_exit (); + my_driver_exit (); #ifndef NDEBUG if (hallocated() != 0) { ERROR("%u bytes leaked.\n", hallocated()); @@ -378,7 +378,7 @@ } return err; #elif defined (__fcpcmcia__) || defined (__fcclassic__) - if (!driver_init ()) { + if (!my_driver_init ()) { ERROR("Error: Driver library not available.\n"); ERROR("Not loaded.\n"); return -EBUSY; @@ -388,7 +388,14 @@ libheap_init (MAX_LIB_HEAP_SIZE); #if defined (__fcclassic__) if ((io != 0) && (irq != 0)) { - return isa_start (io, irq); + int retval = isa_start (io, irq); + if (retval) + { + libheap_exit (); + unregister_capi_driver (&fritz_capi_driver); + LOG("CAPI driver unregistered.\n"); + return retval; + } } else if ((io + irq) != 0) { NOTE("Warning: Missing parameter!\n"); NOTE("Waiting for capiinit...\n"); @@ -403,7 +410,8 @@ static void __exit fritz_exit (void) { #if defined (__fcclassic__) - isa_stop (); + if (capi_controller != NULL) + isa_stop (); libheap_exit (); #endif unregister_capi_driver (&fritz_capi_driver); diff -u -r fritz/src/Makefile fcclassic/src/Makefile --- fritz/src/Makefile 2005-07-07 00:00:00.000000000 +0200 +++ fcclassic/src/Makefile 2007-11-04 12:22:59.000000000 +0100 @@ -1,7 +1,7 @@ # COMMON -CARD := fcpci -LIBDIR := /var/lib/fritz +CARD := fcclassic +LIBDIR := $(PWD) OBJECTS := main.o driver.o tools.o tables.o queue.o lib.o ifneq ($(KERNELRELEASE),) @@ -33,6 +33,10 @@ KDIR := /lib/modules/$(shell uname -r)/build endif +ifeq ($(INSTALL),) +INSTALL := /lib/modules/$(shell uname -r)/extra +endif + ifeq ($(CARD),fcpcmcia) all: $(CARD).ko $(CARD)_cs.ko else @@ -40,20 +44,27 @@ endif $(CARD).ko: $(LIBDIR) $(SOURCES) $(HEADERS) - @cp -f ../lib/$(CARD)-lib.o $(LIBDIR) + ld -r -d ../lib/$(CARD)-lib.o -o $(LIBDIR)/$(CARD)-lib.o + objcopy --redefine-sym memcpy=lib_memcpy --redefine-sym memset=lib_memset --redefine-sym memmove=lib_memmove \ + --redefine-sym memcmp=lib_memcmp --redefine-sym strcat=lib_strcat \ + --redefine-sym strncpy=lib_strncpy --redefine-sym strncmp=lib_strncmp --redefine-sym strlen=lib_strlen \ + --redefine-sym strcpy=lib_strcpy --redefine-sym strcmp=lib_strcmp $(LIBDIR)/$(CARD)-lib.o $(MAKE) -C $(KDIR) SUBDIRS=$(shell pwd) modules $(CARD)_cs.ko: $(CARD)_cs.c $(CARD).ko clean: ; $(RM) $(OBJECTS) - $(RM) $(CARD).o $(CARD).ko - @$(RM) .*.cmd $(CARD).mod.* + $(RM) $(CARD)-lib.o $(CARD).o $(CARD).ko + @$(RM) Module.symvers .*.cmd $(CARD).mod.* + @$(RM) -rf .tmp_versions ifeq ($(CARD),fcpcmcia) @$(RM) $(CARD)_cs.o $(CARD)_cs.ko $(CARD)_cs.mod.* endif -$(LIBDIR): - mkdir -p $(LIBDIR) +install:; mkdir -p $(INSTALL) + cp $(CARD).ko $(INSTALL) + strip -g $(INSTALL)/$(CARD).ko + depmod -a endif diff -u -r fritz/src/tools.h fcclassic/src/tools.h --- fritz/src/tools.h 2005-07-07 00:00:00.000000000 +0200 +++ fcclassic/src/tools.h 2007-06-10 20:52:19.000000000 +0200 @@ -71,15 +71,6 @@ /*---------------------------------------------------------------------------*\ \*---------------------------------------------------------------------------*/ -static inline unsigned long atomic_xchg ( - volatile atomic_t * v, - unsigned value -) { - return __xchg (value, &v->counter, sizeof (unsigned)); -} /* atomic_xchg */ - -/*---------------------------------------------------------------------------*\ -\*---------------------------------------------------------------------------*/ #ifndef NDEBUG extern unsigned hallocated (void); extern int hvalid (void *);