igbe: use safer MMIO register access
authorBarret Rhoden <brho@cs.berkeley.edu>
Fri, 28 Mar 2014 21:39:24 +0000 (14:39 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Sat, 29 Mar 2014 01:17:06 +0000 (18:17 -0700)
Gcc might optimize the register accesses, so we need to use the
volatile* helpers.

kern/drivers/net/etherigbe.c

index aa2c471..1e1c0f2 100644 (file)
@@ -535,8 +535,15 @@ struct ctlr {
        int     fcrth;
 };
 
-#define csr32r(c, r)   (*((c)->nic+((r)/4)))
-#define csr32w(c, r, v)        (*((c)->nic+((r)/4)) = (v))
+static inline uint32_t csr32r(struct ctlr *c, uintptr_t reg)
+{
+       return read_mmreg32((uintptr_t)(c->nic + (reg / 4)));
+}
+
+static inline void csr32w(struct ctlr *c, uintptr_t reg, uint32_t val)
+{
+       write_mmreg32((uintptr_t)(c->nic + (reg / 4)), val);
+}
 
 static struct ctlr* igbectlrhead;
 static struct ctlr* igbectlrtail;