MMIO Access APIs¶
Purpose¶
The MMIO access APIs provide a portable interface for reading from and writing to memory-mapped I/O (MMIO) registers.
Unlike normal memory access, device registers should be accessed through these APIs after they have been mapped into the kernel virtual address space with ioremap().
Header¶
Read APIs¶
readb()¶
Reads an 8-bit value from an MMIO register.
Parameters¶
| Parameter | Description |
|---|---|
addr |
Virtual MMIO address returned by ioremap(). |
Return Value¶
Returns the 8-bit value stored at the specified MMIO address.
Example¶
readw()¶
Reads a 16-bit value from an MMIO register.
Parameters¶
| Parameter | Description |
|---|---|
addr |
Virtual MMIO address returned by ioremap(). |
Return Value¶
Returns the 16-bit value stored at the specified MMIO address.
Example¶
readl()¶
Reads a 32-bit value from an MMIO register.
Parameters¶
| Parameter | Description |
|---|---|
addr |
Virtual MMIO address returned by ioremap(). |
Return Value¶
Returns the 32-bit value stored at the specified MMIO address.
Example¶
Write APIs¶
writeb()¶
Writes an 8-bit value to an MMIO register.
Parameters¶
| Parameter | Description |
|---|---|
value |
8-bit value to write. |
addr |
Virtual MMIO address returned by ioremap(). |
Return Value¶
None.
Example¶
writew()¶
Writes a 16-bit value to an MMIO register.
Parameters¶
| Parameter | Description |
|---|---|
value |
16-bit value to write. |
addr |
Virtual MMIO address returned by ioremap(). |
Return Value¶
None.
Example¶
writel()¶
Writes a 32-bit value to an MMIO register.
Parameters¶
| Parameter | Description |
|---|---|
value |
32-bit value to write. |
addr |
Virtual MMIO address returned by ioremap(). |
Return Value¶
None.
Example¶
Typical Usage¶
A typical Linux platform driver accesses device registers as follows:
void __iomem *base;
u32 status;
base = ioremap(PHYS_ADDR, SIZE);
writel(CTRL_ENABLE, base + REG_CTRL);
status = readl(base + REG_STATUS);
iounmap(base);