arch/parisc/lib/iomap.c

Source file repositories/reference/linux-study-clean/arch/parisc/lib/iomap.c

File Facts

System
Linux kernel
Corpus path
arch/parisc/lib/iomap.c
Extension
.c
Size
12610 bytes
Lines
552
Domain
Architecture Layer
Bucket
arch/parisc
Inferred role
Architecture Layer: exported/initcall integration point
Status
integration implementation candidate

Why This File Exists

CPU and platform-specific kernel glue: boot entry, traps, syscall entry, interrupts, page tables, context switch, and low-level barriers.

Dependency Surface

Detected Declarations

Annotated Snippet

struct iomap_ops {
	unsigned int (*read8)(const void __iomem *);
	unsigned int (*read16)(const void __iomem *);
	unsigned int (*read16be)(const void __iomem *);
	unsigned int (*read32)(const void __iomem *);
	unsigned int (*read32be)(const void __iomem *);
#ifdef CONFIG_64BIT
	u64 (*read64)(const void __iomem *);
	u64 (*read64be)(const void __iomem *);
#endif
	void (*write8)(u8, void __iomem *);
	void (*write16)(u16, void __iomem *);
	void (*write16be)(u16, void __iomem *);
	void (*write32)(u32, void __iomem *);
	void (*write32be)(u32, void __iomem *);
#ifdef CONFIG_64BIT
	void (*write64)(u64, void __iomem *);
	void (*write64be)(u64, void __iomem *);
#endif
	void (*read8r)(const void __iomem *, void *, unsigned long);
	void (*read16r)(const void __iomem *, void *, unsigned long);
	void (*read32r)(const void __iomem *, void *, unsigned long);
	void (*write8r)(void __iomem *, const void *, unsigned long);
	void (*write16r)(void __iomem *, const void *, unsigned long);
	void (*write32r)(void __iomem *, const void *, unsigned long);
};

/* Generic ioport ops.  To be replaced later by specific dino/elroy/wax code */

#define ADDR2PORT(addr) ((unsigned long __force)(addr) & 0xffffff)

static unsigned int ioport_read8(const void __iomem *addr)
{
	return inb(ADDR2PORT(addr));
}

static unsigned int ioport_read16(const void __iomem *addr)
{
	return inw(ADDR2PORT(addr));
}

static unsigned int ioport_read32(const void __iomem *addr)
{
	return inl(ADDR2PORT(addr));
}

static void ioport_write8(u8 datum, void __iomem *addr)
{
	outb(datum, ADDR2PORT(addr));
}

static void ioport_write16(u16 datum, void __iomem *addr)
{
	outw(datum, ADDR2PORT(addr));
}

static void ioport_write32(u32 datum, void __iomem *addr)
{
	outl(datum, ADDR2PORT(addr));
}

static void ioport_read8r(const void __iomem *addr, void *dst, unsigned long count)
{
	insb(ADDR2PORT(addr), dst, count);
}

static void ioport_read16r(const void __iomem *addr, void *dst, unsigned long count)
{
	insw(ADDR2PORT(addr), dst, count);
}

static void ioport_read32r(const void __iomem *addr, void *dst, unsigned long count)
{
	insl(ADDR2PORT(addr), dst, count);
}

static void ioport_write8r(void __iomem *addr, const void *s, unsigned long n)
{
	outsb(ADDR2PORT(addr), s, n);
}

static void ioport_write16r(void __iomem *addr, const void *s, unsigned long n)
{
	outsw(ADDR2PORT(addr), s, n);
}

static void ioport_write32r(void __iomem *addr, const void *s, unsigned long n)
{
	outsl(ADDR2PORT(addr), s, n);
}

Annotation

Implementation Notes