Created
March 18, 2009 04:07
-
-
Save btbytes/80935 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/***** PKG **** */ | |
/************************************************************************/ | |
/* hardware access functions or macros */ | |
/************************************************************************/ | |
#ifdef CAN_PORT_IO | |
/* #error Intel port I/O access */ | |
/* using port I/O with inb()/outb() for Intel architectures like | |
AT-CAN-MINI ISA board */ | |
#ifdef IODEBUG | |
# define CANout(bd,adr,v) \ | |
(printk("Cout: (%x)=%x\n", (int)&((canregs_t *)Base[bd])->adr, v), \ | |
outb(v, (int) &((canregs_t *)Base[bd])->adr )) | |
#else | |
# define CANout(bd,adr,v) \ | |
(outb(v, (int) &((canregs_t *)Base[bd])->adr )) | |
#endif | |
#define CANin(bd,adr) \ | |
(inb ((int) &((canregs_t *)Base[bd])->adr )) | |
#define CANset(bd,adr,m) \ | |
outb((inb((int) &((canregs_t *)Base[bd])->adr)) \ | |
| m ,(int) &((canregs_t *)Base[bd])->adr ) | |
#define CANreset(bd,adr,m) \ | |
outb((inb((int) &((canregs_t *)Base[bd])->adr)) \ | |
& ~m,(int) &((canregs_t *)Base[bd])->adr ) | |
#define CANtest(bd,adr,m) \ | |
(inb((int) &((canregs_t *)Base[bd])->adr ) & m ) | |
#else /* CAN_PORT_IO */ | |
/* using memory acces with readb(), writeb() */ | |
/* #error memory I/O access */ | |
/* #define can_base Base */ | |
#ifdef IODEBUG | |
# define CANout(bd,adr,v) \ | |
(printk("Cout: (%x)=%x\n", (u32)&((canregs_t *)can_base[bd])->adr, v), \ | |
writeb(v, (u32) &((canregs_t *)can_base[bd])->adr )) | |
#define CANset(bd,adr,m) do {\ | |
unsigned char v; \ | |
v = (readb((u32) &((canregs_t *)can_base[bd])->adr)); \ | |
printk("CANset %x |= %x\n", (v), (m)); \ | |
writeb( v | (m) , (u32) &((canregs_t *)can_base[bd])->adr ); \ | |
} while (0) | |
#define CANreset(bd,adr,m) do {\ | |
unsigned char v; \ | |
v = (readb((u32) &((canregs_t *)can_base[bd])->adr)); \ | |
printk("CANreset %x &= ~%x\n", (v), (m)); \ | |
writeb( v & ~(m) , (u32) &((canregs_t *)can_base[bd])->adr ); \ | |
} while (0) | |
#else | |
/* Memory Byte access */ | |
#define CANout(bd,adr,v) \ | |
(writeb(v, (u32) &((canregs_t *)can_base[bd])->adr )) | |
#define CANset(bd,adr,m) \ | |
writeb((readb((u32) &((canregs_t *)can_base[bd])->adr)) \ | |
| (m) , (u32) &((canregs_t *)can_base[bd])->adr ) | |
#define CANreset(bd,adr,m) \ | |
writeb((readb((u32) &((canregs_t *)can_base[bd])->adr)) \ | |
& ~(m), (u32) &((canregs_t *)can_base[bd])->adr ) | |
#endif | |
#define CANin(bd,adr) \ | |
(readb ((u32) &((canregs_t *)can_base[bd])->adr )) | |
#define CANtest(bd,adr,m) \ | |
(readb((u32) &((canregs_t *)can_base[bd])->adr ) & (m) ) | |
/* Memory word access */ | |
#define CANoutw(bd,adr,v) \ | |
(writew(v, (u32) &((canregs_t *)can_base[bd])->adr )) | |
#define CANsetw(bd,adr,m) \ | |
writew((readw((u32) &((canregs_t *)can_base[bd])->adr)) \ | |
| (m) , (u32) &((canregs_t *)can_base[bd])->adr ) | |
#define CANresetw(bd,adr,m) \ | |
writew((readw((u32) &((canregs_t *)can_base[bd])->adr)) \ | |
& ~(m), (u32) &((canregs_t *)can_base[bd])->adr ) | |
#define CANinw(bd,adr) \ | |
(readw ((u32) &((canregs_t *)can_base[bd])->adr )) | |
#define CANtestw(bd,adr,m) \ | |
(readw((u32) &((canregs_t *)can_base[bd])->adr ) & (m) ) | |
/* Memory long word access */ | |
#define CANoutl(bd,adr,v) \ | |
(writel(v, (u32) &((canregs_t *)can_base[bd])->adr )) | |
#define CANsetl(bd,adr,m) \ | |
writel((readl((u32) &((canregs_t *)can_base[bd])->adr)) \ | |
| (m) , (u32) &((canregs_t *)can_base[bd])->adr ) | |
#define CANresetl(bd,adr,m) \ | |
writel((readl((u32) &((canregs_t *)can_base[bd])->adr)) \ | |
& ~(m), (u32) &((canregs_t *)can_base[bd])->adr ) | |
#define CANinl(bd,adr) \ | |
(readl ((u32) &((canregs_t *)can_base[bd])->adr )) | |
#define CANtestl(bd,adr,m) \ | |
(readl((u32) &((canregs_t *)can_base[bd])->adr ) & (m) ) | |
#endif /* CAN_PORT_IO */ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment