Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.1.
  1/* SPDX-License-Identifier: GPL-2.0-only */
  2/*
  3 * IO definitions for the Hexagon architecture
  4 *
  5 * Copyright (c) 2010-2013, The Linux Foundation. All rights reserved.
  6 */
  7
  8#ifndef _ASM_IO_H
  9#define _ASM_IO_H
 10
 11#include <linux/types.h>
 12#include <asm/page.h>
 13#include <asm/cacheflush.h>
 14
 15extern int remap_area_pages(unsigned long start, unsigned long phys_addr,
 16				unsigned long end, unsigned long flags);
 17
 18/*
 19 * virt_to_phys - map virtual address to physical
 20 * @address:  address to map
 21 */
 22static inline unsigned long virt_to_phys(volatile void *address)
 23{
 24	return __pa(address);
 25}
 26
 27/*
 28 * phys_to_virt - map physical address to virtual
 29 * @address: address to map
 30 */
 31static inline void *phys_to_virt(unsigned long address)
 32{
 33	return __va(address);
 34}
 35
 36/*
 37 * readb - read byte from memory mapped device
 38 * @addr:  pointer to memory
 39 *
 40 */
 41static inline u8 __raw_readb(const volatile void __iomem *addr)
 42{
 43	u8 val;
 44	asm volatile(
 45		"%0 = memb(%1);"
 46		: "=&r" (val)
 47		: "r" (addr)
 48	);
 49	return val;
 50}
 51#define __raw_readb __raw_readb
 52
 53static inline u16 __raw_readw(const volatile void __iomem *addr)
 54{
 55	u16 val;
 56	asm volatile(
 57		"%0 = memh(%1);"
 58		: "=&r" (val)
 59		: "r" (addr)
 60	);
 61	return val;
 62}
 63#define __raw_readw __raw_readw
 64
 65static inline u32 __raw_readl(const volatile void __iomem *addr)
 66{
 67	u32 val;
 68	asm volatile(
 69		"%0 = memw(%1);"
 70		: "=&r" (val)
 71		: "r" (addr)
 72	);
 73	return val;
 74}
 75#define __raw_readl __raw_readl
 76
 77/*
 78 * writeb - write a byte to a memory location
 79 * @data: data to write to
 80 * @addr:  pointer to memory
 81 *
 82 */
 83static inline void __raw_writeb(u8 data, volatile void __iomem *addr)
 84{
 85	asm volatile(
 86		"memb(%0) = %1;"
 87		:
 88		: "r" (addr), "r" (data)
 89		: "memory"
 90	);
 91}
 92#define __raw_writeb __raw_writeb
 93
 94static inline void __raw_writew(u16 data, volatile void __iomem *addr)
 95{
 96	asm volatile(
 97		"memh(%0) = %1;"
 98		:
 99		: "r" (addr), "r" (data)
100		: "memory"
101	);
102
103}
104#define __raw_writew __raw_writew
105
106static inline void __raw_writel(u32 data, volatile void __iomem *addr)
107{
108	asm volatile(
109		"memw(%0) = %1;"
110		:
111		: "r" (addr), "r" (data)
112		: "memory"
113	);
114}
115#define __raw_writel __raw_writel
116
117/*
118 * I/O memory mapping functions.
119 */
120#define _PAGE_IOREMAP (_PAGE_PRESENT | _PAGE_READ | _PAGE_WRITE | \
121		       (__HEXAGON_C_DEV << 6))
122
123/*
124 * These defines are necessary to use the generic io.h for filling in
125 * the missing parts of the API contract. This is because the platform
126 * uses (inline) functions rather than defines and the generic helper
127 * fills in the undefined.
128 */
129#define virt_to_phys virt_to_phys
130#define phys_to_virt phys_to_virt
131#include <asm-generic/io.h>
132
133#endif