Messages in this thread |  | | Date | Thu, 3 May 2001 00:46:09 -0700 | From | Jonathan Lundell <> | Subject | Re: unsigned long ioremap()? |
| |
At 3:18 AM -0400 2001-05-03, Jeff Garzik wrote: >"David S. Miller" wrote: >> There is a school of thought which believes that: >> > > struct xdev_regs { >> u32 reg1; >> u32 reg2; >> }; > > >> val = readl(®s->reg2); >> >> is cleaner than: >> >> #define REG1 0x00 >> #define REG2 0x04 >> >> val = readl(regs + REG2); >> >> I'm personally ambivalent and believe that both cases should be allowed. > >Agreed... Tangent a bit, I wanted to plug using macros which IMHO make >code even more readable: > > val = RTL_R32(REG2); > RTL_W32(REG2, val); > >Since these are driver-private, if you are only dealing with one chip >you could even shorten things to "R32" and "W32", if that doesn't offend >any sensibilities :)
With a little arithmetic behind the scenes and a NULL pointer to the struct xdev, you could have:
struct xdev_regs { u32 reg1; u32 reg2; } *xdr = 0;
#define RTL_R32(REG) readl(cookie+(unsigned long)(&xdr->REG))
cookie = ioremap(blah, blah);
val = RTL_R32(reg2);
...and have the benefits of the R32 macro as well as the use of structure members. -- /Jonathan Lundell. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|  |