x86: asm/io.h: unify virt_to_phys/phys_to_virt
Impact: unify identical code asm/io_32.h and _64.h has functionally identical definitions for virt_to_phys, phys_to_virt, page_to_phys, and the isa_* variants, so just unify them. The only slightly functional change is using phys_addr_t for the physical address argument and return val. Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
This commit is contained in:
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
#include <linux/compiler.h>
|
#include <linux/compiler.h>
|
||||||
#include <asm-generic/int-ll64.h>
|
#include <asm-generic/int-ll64.h>
|
||||||
|
#include <asm/page.h>
|
||||||
|
|
||||||
#define build_mmio_read(name, size, type, reg, barrier) \
|
#define build_mmio_read(name, size, type, reg, barrier) \
|
||||||
static inline type name(const volatile void __iomem *addr) \
|
static inline type name(const volatile void __iomem *addr) \
|
||||||
@@ -80,6 +81,64 @@ static inline void writeq(__u64 val, volatile void __iomem *addr)
|
|||||||
#define readq readq
|
#define readq readq
|
||||||
#define writeq writeq
|
#define writeq writeq
|
||||||
|
|
||||||
|
/**
|
||||||
|
* virt_to_phys - map virtual addresses to physical
|
||||||
|
* @address: address to remap
|
||||||
|
*
|
||||||
|
* The returned physical address is the physical (CPU) mapping for
|
||||||
|
* the memory address given. It is only valid to use this function on
|
||||||
|
* addresses directly mapped or allocated via kmalloc.
|
||||||
|
*
|
||||||
|
* This function does not give bus mappings for DMA transfers. In
|
||||||
|
* almost all conceivable cases a device driver should not be using
|
||||||
|
* this function
|
||||||
|
*/
|
||||||
|
|
||||||
|
static inline phys_addr_t virt_to_phys(volatile void *address)
|
||||||
|
{
|
||||||
|
return __pa(address);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* phys_to_virt - map physical address to virtual
|
||||||
|
* @address: address to remap
|
||||||
|
*
|
||||||
|
* The returned virtual address is a current CPU mapping for
|
||||||
|
* the memory address given. It is only valid to use this function on
|
||||||
|
* addresses that have a kernel mapping
|
||||||
|
*
|
||||||
|
* This function does not handle bus mappings for DMA transfers. In
|
||||||
|
* almost all conceivable cases a device driver should not be using
|
||||||
|
* this function
|
||||||
|
*/
|
||||||
|
|
||||||
|
static inline void *phys_to_virt(phys_addr_t address)
|
||||||
|
{
|
||||||
|
return __va(address);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Change "struct page" to physical address.
|
||||||
|
*/
|
||||||
|
#define page_to_phys(page) ((dma_addr_t)page_to_pfn(page) << PAGE_SHIFT)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ISA I/O bus memory addresses are 1:1 with the physical address.
|
||||||
|
*/
|
||||||
|
#define isa_virt_to_bus virt_to_phys
|
||||||
|
#define isa_page_to_bus page_to_phys
|
||||||
|
#define isa_bus_to_virt phys_to_virt
|
||||||
|
|
||||||
|
/*
|
||||||
|
* However PCI ones are not necessarily 1:1 and therefore these interfaces
|
||||||
|
* are forbidden in portable PCI drivers.
|
||||||
|
*
|
||||||
|
* Allow them on x86 for legacy drivers, though.
|
||||||
|
*/
|
||||||
|
#define virt_to_bus virt_to_phys
|
||||||
|
#define bus_to_virt phys_to_virt
|
||||||
|
|
||||||
|
|
||||||
#ifdef CONFIG_X86_32
|
#ifdef CONFIG_X86_32
|
||||||
# include "io_32.h"
|
# include "io_32.h"
|
||||||
#else
|
#else
|
||||||
|
@@ -53,47 +53,6 @@
|
|||||||
*/
|
*/
|
||||||
#define xlate_dev_kmem_ptr(p) p
|
#define xlate_dev_kmem_ptr(p) p
|
||||||
|
|
||||||
/**
|
|
||||||
* virt_to_phys - map virtual addresses to physical
|
|
||||||
* @address: address to remap
|
|
||||||
*
|
|
||||||
* The returned physical address is the physical (CPU) mapping for
|
|
||||||
* the memory address given. It is only valid to use this function on
|
|
||||||
* addresses directly mapped or allocated via kmalloc.
|
|
||||||
*
|
|
||||||
* This function does not give bus mappings for DMA transfers. In
|
|
||||||
* almost all conceivable cases a device driver should not be using
|
|
||||||
* this function
|
|
||||||
*/
|
|
||||||
|
|
||||||
static inline unsigned long virt_to_phys(volatile void *address)
|
|
||||||
{
|
|
||||||
return __pa(address);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* phys_to_virt - map physical address to virtual
|
|
||||||
* @address: address to remap
|
|
||||||
*
|
|
||||||
* The returned virtual address is a current CPU mapping for
|
|
||||||
* the memory address given. It is only valid to use this function on
|
|
||||||
* addresses that have a kernel mapping
|
|
||||||
*
|
|
||||||
* This function does not handle bus mappings for DMA transfers. In
|
|
||||||
* almost all conceivable cases a device driver should not be using
|
|
||||||
* this function
|
|
||||||
*/
|
|
||||||
|
|
||||||
static inline void *phys_to_virt(unsigned long address)
|
|
||||||
{
|
|
||||||
return __va(address);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Change "struct page" to physical address.
|
|
||||||
*/
|
|
||||||
#define page_to_phys(page) ((dma_addr_t)page_to_pfn(page) << PAGE_SHIFT)
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ioremap - map bus memory into CPU space
|
* ioremap - map bus memory into CPU space
|
||||||
* @offset: bus address of the memory
|
* @offset: bus address of the memory
|
||||||
@@ -123,22 +82,6 @@ static inline void __iomem *ioremap(resource_size_t offset, unsigned long size)
|
|||||||
|
|
||||||
extern void iounmap(volatile void __iomem *addr);
|
extern void iounmap(volatile void __iomem *addr);
|
||||||
|
|
||||||
/*
|
|
||||||
* ISA I/O bus memory addresses are 1:1 with the physical address.
|
|
||||||
*/
|
|
||||||
#define isa_virt_to_bus virt_to_phys
|
|
||||||
#define isa_page_to_bus page_to_phys
|
|
||||||
#define isa_bus_to_virt phys_to_virt
|
|
||||||
|
|
||||||
/*
|
|
||||||
* However PCI ones are not necessarily 1:1 and therefore these interfaces
|
|
||||||
* are forbidden in portable PCI drivers.
|
|
||||||
*
|
|
||||||
* Allow them on x86 for legacy drivers, though.
|
|
||||||
*/
|
|
||||||
#define virt_to_bus virt_to_phys
|
|
||||||
#define bus_to_virt phys_to_virt
|
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
memset_io(volatile void __iomem *addr, unsigned char val, int count)
|
memset_io(volatile void __iomem *addr, unsigned char val, int count)
|
||||||
{
|
{
|
||||||
|
@@ -142,27 +142,6 @@ __OUTS(l)
|
|||||||
|
|
||||||
#include <linux/vmalloc.h>
|
#include <linux/vmalloc.h>
|
||||||
|
|
||||||
#ifndef __i386__
|
|
||||||
/*
|
|
||||||
* Change virtual addresses to physical addresses and vv.
|
|
||||||
* These are pretty trivial
|
|
||||||
*/
|
|
||||||
static inline unsigned long virt_to_phys(volatile void *address)
|
|
||||||
{
|
|
||||||
return __pa(address);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void *phys_to_virt(unsigned long address)
|
|
||||||
{
|
|
||||||
return __va(address);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Change "struct page" to physical address.
|
|
||||||
*/
|
|
||||||
#define page_to_phys(page) ((dma_addr_t)page_to_pfn(page) << PAGE_SHIFT)
|
|
||||||
|
|
||||||
#include <asm-generic/iomap.h>
|
#include <asm-generic/iomap.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -187,22 +166,6 @@ extern void iounmap(volatile void __iomem *addr);
|
|||||||
|
|
||||||
extern void __iomem *fix_ioremap(unsigned idx, unsigned long phys);
|
extern void __iomem *fix_ioremap(unsigned idx, unsigned long phys);
|
||||||
|
|
||||||
/*
|
|
||||||
* ISA I/O bus memory addresses are 1:1 with the physical address.
|
|
||||||
*/
|
|
||||||
#define isa_virt_to_bus virt_to_phys
|
|
||||||
#define isa_page_to_bus page_to_phys
|
|
||||||
#define isa_bus_to_virt phys_to_virt
|
|
||||||
|
|
||||||
/*
|
|
||||||
* However PCI ones are not necessarily 1:1 and therefore these interfaces
|
|
||||||
* are forbidden in portable PCI drivers.
|
|
||||||
*
|
|
||||||
* Allow them on x86 for legacy drivers, though.
|
|
||||||
*/
|
|
||||||
#define virt_to_bus virt_to_phys
|
|
||||||
#define bus_to_virt phys_to_virt
|
|
||||||
|
|
||||||
void __memcpy_fromio(void *, unsigned long, unsigned);
|
void __memcpy_fromio(void *, unsigned long, unsigned);
|
||||||
void __memcpy_toio(unsigned long, const void *, unsigned);
|
void __memcpy_toio(unsigned long, const void *, unsigned);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user