Skip to content

Instantly share code, notes, and snippets.

@btbytes
Created March 18, 2009 04:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save btbytes/80935 to your computer and use it in GitHub Desktop.
Save btbytes/80935 to your computer and use it in GitHub Desktop.
/***** 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