ARM: Add fixed PCI i/o mapping
This adds a fixed virtual mapping for PCI i/o addresses. The mapping is located at the last 2MB of vmalloc region (0xfee00000-0xff000000). 2MB is used to align with PMD size, but IO_SPACE_LIMIT is 1MB. The space is reserved after .map_io and can be mapped at any time later with pci_ioremap_io. Platforms which need early i/o mapping (e.g. for vga console) can call pci_map_io_early in their .map_io function. This has changed completely from the 1st implementation which only supported creating the static mapping at .map_io. Signed-off-by: Rob Herring <rob.herring@calxeda.com> Cc: Russell King <linux@arm.linux.org.uk> Acked-by: Nicolas Pitre <nico@linaro.org>
此提交包含在:
@@ -9,6 +9,9 @@
|
||||
*
|
||||
* Page table mapping constructs and function prototypes
|
||||
*/
|
||||
#ifndef __ASM_MACH_MAP_H
|
||||
#define __ASM_MACH_MAP_H
|
||||
|
||||
#include <asm/io.h>
|
||||
|
||||
struct map_desc {
|
||||
@@ -34,6 +37,8 @@ struct map_desc {
|
||||
|
||||
#ifdef CONFIG_MMU
|
||||
extern void iotable_init(struct map_desc *, int);
|
||||
extern void vm_reserve_area_early(unsigned long addr, unsigned long size,
|
||||
void *caller);
|
||||
|
||||
struct mem_type;
|
||||
extern const struct mem_type *get_mem_type(unsigned int type);
|
||||
@@ -44,4 +49,7 @@ extern int ioremap_page(unsigned long virt, unsigned long phys,
|
||||
const struct mem_type *mtype);
|
||||
#else
|
||||
#define iotable_init(map,num) do { } while (0)
|
||||
#define vm_reserve_area_early(a,s,c) do { } while (0)
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
@@ -11,6 +11,7 @@
|
||||
#ifndef __ASM_MACH_PCI_H
|
||||
#define __ASM_MACH_PCI_H
|
||||
|
||||
|
||||
struct pci_sys_data;
|
||||
struct pci_ops;
|
||||
struct pci_bus;
|
||||
@@ -54,6 +55,15 @@ struct pci_sys_data {
|
||||
*/
|
||||
void pci_common_init(struct hw_pci *);
|
||||
|
||||
/*
|
||||
* Setup early fixed I/O mapping.
|
||||
*/
|
||||
#if defined(CONFIG_PCI)
|
||||
extern void pci_map_io_early(unsigned long pfn);
|
||||
#else
|
||||
static inline void pci_map_io_early(unsigned long pfn) {}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* PCI controllers
|
||||
*/
|
||||
|
新增問題並參考
封鎖使用者