Messages in this thread | | | Date | Wed, 15 Sep 2004 19:32:36 +0200 | From | Jörn Engel <> | Subject | Re: Being more anal about iospace accesses.. |
| |
On Wed, 15 September 2004 10:07:29 -0700, Linus Torvalds wrote: > On Wed, 15 Sep 2004, Jörn Engel wrote: > > > > C now supports pointer arithmetic with void*? > > C doesn't. gcc does. It's a documented extension, and it acts like if it > was done on a byte. > > See gcc's user guide "Extension to the C Language Family". > > It's a singularly good feature.
Nice.
But it still leaves me confused. Before I had this code:
struct regs { uint32_t status; ... }
...
struct regs *regs = ioremap(...); uint32_t status = regs->status; ...
So now I should do it like this:
#define REG_STATUS 0
...
void __iomem *regs = ioremap(...); uint32_t status = readl(regs + REG_STATUS); ...
But wait, that only works when long is 32bit wide. Plus I could be stupid enough and "#define REG_STATUS 64" while the register space is just 64 bytes long. It solves the confusion about address spaces, agreed, but overall I'm more confused now. Hope it's just temporary.
Jörn
-- There is no worse hell than that provided by the regrets for wasted opportunities. -- Andre-Louis Moreau in Scarabouche - 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/
| |