Re: Being more anal about iospace accesses..
From: Jörn Engel
Date: Wed Sep 15 2004 - 12:55:22 EST
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@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/