arch/hexagon/include/asm/io.h

Source file repositories/reference/linux-study-clean/arch/hexagon/include/asm/io.h

File Facts

System
Linux kernel
Corpus path
arch/hexagon/include/asm/io.h
Extension
.h
Size
2599 bytes
Lines
134
Domain
Architecture Layer
Bucket
arch/hexagon
Inferred role
Architecture Layer: implementation source
Status
source 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

#ifndef _ASM_IO_H
#define _ASM_IO_H

#include <linux/types.h>
#include <asm/page.h>
#include <asm/cacheflush.h>

extern int remap_area_pages(unsigned long start, unsigned long phys_addr,
				unsigned long end, unsigned long flags);

/*
 * virt_to_phys - map virtual address to physical
 * @address:  address to map
 */
static inline unsigned long virt_to_phys(volatile void *address)
{
	return __pa(address);
}

/*
 * phys_to_virt - map physical address to virtual
 * @address: address to map
 */
static inline void *phys_to_virt(unsigned long address)
{
	return __va(address);
}

/*
 * readb - read byte from memory mapped device
 * @addr:  pointer to memory
 *
 */
static inline u8 __raw_readb(const volatile void __iomem *addr)
{
	u8 val;
	asm volatile(
		"%0 = memb(%1);"
		: "=&r" (val)
		: "r" (addr)
	);
	return val;
}
#define __raw_readb __raw_readb

static inline u16 __raw_readw(const volatile void __iomem *addr)
{
	u16 val;
	asm volatile(
		"%0 = memh(%1);"
		: "=&r" (val)
		: "r" (addr)
	);
	return val;
}
#define __raw_readw __raw_readw

static inline u32 __raw_readl(const volatile void __iomem *addr)
{
	u32 val;
	asm volatile(
		"%0 = memw(%1);"
		: "=&r" (val)
		: "r" (addr)
	);
	return val;
}
#define __raw_readl __raw_readl

/*
 * writeb - write a byte to a memory location
 * @data: data to write to
 * @addr:  pointer to memory
 *
 */
static inline void __raw_writeb(u8 data, volatile void __iomem *addr)
{
	asm volatile(
		"memb(%0) = %1;"
		:
		: "r" (addr), "r" (data)
		: "memory"
	);
}
#define __raw_writeb __raw_writeb

static inline void __raw_writew(u16 data, volatile void __iomem *addr)
{
	asm volatile(
		"memh(%0) = %1;"

Annotation

Implementation Notes