Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v6.17-rc3 133 lines 2.6 kB view raw
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