From cd2dde52dbdb0dfcb890eb911b30bcfef5b46970 Mon Sep 17 00:00:00 2001 From: ppisa Date: Sun, 14 Mar 2004 00:58:31 +0000 Subject: [PATCH] Implemented selection of simplified IO access methods (port or mem only). --- lincan/include/main.h | 49 +++++++++++++++++++++++++++++++++++++++++ lincan/src/Makefile.std | 2 +- 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/lincan/include/main.h b/lincan/include/main.h index 2fa81ce..f92d1c4 100644 --- a/lincan/include/main.h +++ b/lincan/include/main.h @@ -11,6 +11,7 @@ #include "./constants.h" #include "./can_sysdep.h" #include "./can_queue.h" +#include "lincan_config.h" #ifdef CAN_DEBUG #define DEBUGMSG(fmt,args...) can_printk(KERN_ERR "can.o (debug): " fmt,\ @@ -373,6 +374,52 @@ extern struct msgobj_t *objects_p[MAX_TOT_MSGOBJS]; extern struct mem_addr *mem_head; + +#if defined(CONFIG_OC_LINCAN_PORTIO_ONLY) +extern inline void can_write_reg(const struct chip_t *chip, unsigned char data, unsigned address) +{ + outb(data, chip->chip_base_addr+address); +} +extern inline unsigned can_read_reg(const struct chip_t *chip, unsigned address) +{ + return inb(chip->chip_base_addr+address); +} +extern inline void canobj_write_reg(const struct chip_t *chip, const struct msgobj_t *obj, + unsigned char data, unsigned address) +{ + outb(data, obj->obj_base_addr+address); +} +extern inline unsigned canobj_read_reg(const struct chip_t *chip, const struct msgobj_t *obj, + unsigned address) +{ + return inb(obj->obj_base_addr+address); +} + +#elif defined(CONFIG_OC_LINCAN_MEMIO_ONLY) +extern inline void can_write_reg(const struct chip_t *chip, unsigned char data, unsigned address) +{ + writeb(data, chip->chip_base_addr+address); +} +extern inline unsigned can_read_reg(const struct chip_t *chip, unsigned address) +{ + return readb(chip->chip_base_addr+address); +} +extern inline void canobj_write_reg(const struct chip_t *chip, const struct msgobj_t *obj, + unsigned char data, unsigned address) +{ + writeb(data, obj->obj_base_addr+address); +} +extern inline unsigned canobj_read_reg(const struct chip_t *chip, const struct msgobj_t *obj, + unsigned address) +{ + return readb(obj->obj_base_addr+address); +} + +#else /*CONFIG_OC_LINCAN_DYNAMICIO*/ +#ifndef CONFIG_OC_LINCAN_DYNAMICIO +#define CONFIG_OC_LINCAN_DYNAMICIO +#endif + /* Inline function to write to the hardware registers. The argument address is * relative to the memory map of the chip and not the absolute memory address. */ @@ -406,6 +453,8 @@ extern inline unsigned canobj_read_reg(const struct chip_t *chip, const struct m return chip->read_register(address_to_read); } +#endif /*CONFIG_OC_LINCAN_DYNAMICIO*/ + int can_base_addr_fixup(struct candevice_t *candev, unsigned long new_base); int can_request_io_region(unsigned long start, unsigned long n, const char *name); void can_release_io_region(unsigned long start, unsigned long n); diff --git a/lincan/src/Makefile.std b/lincan/src/Makefile.std index 0346c8a..f740504 100644 --- a/lincan/src/Makefile.std +++ b/lincan/src/Makefile.std @@ -145,7 +145,7 @@ L_OBJS = # Kernel only objects with exported symbols (-DEXPORT_SYMTAB) LX_OBJS = # Additional CFLAGS -EXTRA_CFLAGS += +EXTRA_CFLAGS += -I . # Linux 2.4.2 and newer build system needs next can-objs = $(O_OBJS) -- 2.39.2