
On Thursday 07 December 2006 17:38, Pantelis Antoniou wrote:
But you should really be using accessors...
You might be right, but I really like to lay a struct over a IO-controllers registers.
Do so with accessors result in code like this (still missing some casts):
out32(&(fpga->fifo[i].ctrl), in32(&(fpga->fifo[i].ctrl)) | 0x8000);
Is this really recommended?
For simple IO operations
out32(FPGA_FIFO_CTRL, in32(FPGA_FIFO_CTRL) | 0x8000);
is fine. But with a more complex register layout like this:
struct pmc405v2_fpga_s { volatile u32 ctrl; volatile u32 status; volatile u32 test1; volatile u32 test2; u32 pad1[0x60 / sizeof(u32) - 4]; volatile u32 hostctrl; /* 0x0060 */ u32 pad2[0x20 / sizeof(u32) - 1]; struct pmc405v2_fifo_s fifo[FIFO_COUNT]; /* 0x0080..0x009f */ };
It results in ugly code.
Matthias