linux/arch/arm/include/asm/mach/pci.h
<<
>>
Prefs
   1/*
   2 *  arch/arm/include/asm/mach/pci.h
   3 *
   4 *  Copyright (C) 2000 Russell King
   5 *
   6 * This program is free software; you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License version 2 as
   8 * published by the Free Software Foundation.
   9 */
  10
  11#ifndef __ASM_MACH_PCI_H
  12#define __ASM_MACH_PCI_H
  13
  14#include <linux/ioport.h>
  15
  16struct pci_sys_data;
  17struct pci_ops;
  18struct pci_bus;
  19struct device;
  20
  21struct hw_pci {
  22#ifdef CONFIG_PCI_DOMAINS
  23        int             domain;
  24#endif
  25        struct pci_ops  *ops;
  26        int             nr_controllers;
  27        void            **private_data;
  28        int             (*setup)(int nr, struct pci_sys_data *);
  29        struct pci_bus *(*scan)(int nr, struct pci_sys_data *);
  30        void            (*preinit)(void);
  31        void            (*postinit)(void);
  32        u8              (*swizzle)(struct pci_dev *dev, u8 *pin);
  33        int             (*map_irq)(const struct pci_dev *dev, u8 slot, u8 pin);
  34        resource_size_t (*align_resource)(struct pci_dev *dev,
  35                                          const struct resource *res,
  36                                          resource_size_t start,
  37                                          resource_size_t size,
  38                                          resource_size_t align);
  39        void            (*add_bus)(struct pci_bus *bus);
  40        void            (*remove_bus)(struct pci_bus *bus);
  41};
  42
  43/*
  44 * Per-controller structure
  45 */
  46struct pci_sys_data {
  47#ifdef CONFIG_PCI_DOMAINS
  48        int             domain;
  49#endif
  50        struct list_head node;
  51        int             busnr;          /* primary bus number                   */
  52        u64             mem_offset;     /* bus->cpu memory mapping offset       */
  53        unsigned long   io_offset;      /* bus->cpu IO mapping offset           */
  54        struct pci_bus  *bus;           /* PCI bus                              */
  55        struct list_head resources;     /* root bus resources (apertures)       */
  56        struct resource io_res;
  57        char            io_res_name[12];
  58                                        /* Bridge swizzling                     */
  59        u8              (*swizzle)(struct pci_dev *, u8 *);
  60                                        /* IRQ mapping                          */
  61        int             (*map_irq)(const struct pci_dev *, u8, u8);
  62                                        /* Resource alignement requirements     */
  63        resource_size_t (*align_resource)(struct pci_dev *dev,
  64                                          const struct resource *res,
  65                                          resource_size_t start,
  66                                          resource_size_t size,
  67                                          resource_size_t align);
  68        void            (*add_bus)(struct pci_bus *bus);
  69        void            (*remove_bus)(struct pci_bus *bus);
  70        void            *private_data;  /* platform controller private data     */
  71};
  72
  73/*
  74 * Call this with your hw_pci struct to initialise the PCI system.
  75 */
  76void pci_common_init_dev(struct device *, struct hw_pci *);
  77
  78/*
  79 * Compatibility wrapper for older platforms that do not care about
  80 * passing the parent device.
  81 */
  82static inline void pci_common_init(struct hw_pci *hw)
  83{
  84        pci_common_init_dev(NULL, hw);
  85}
  86
  87/*
  88 * Setup early fixed I/O mapping.
  89 */
  90#if defined(CONFIG_PCI)
  91extern void pci_map_io_early(unsigned long pfn);
  92#else
  93static inline void pci_map_io_early(unsigned long pfn) {}
  94#endif
  95
  96/*
  97 * PCI controllers
  98 */
  99extern struct pci_ops iop3xx_ops;
 100extern int iop3xx_pci_setup(int nr, struct pci_sys_data *);
 101extern void iop3xx_pci_preinit(void);
 102extern void iop3xx_pci_preinit_cond(void);
 103
 104extern struct pci_ops dc21285_ops;
 105extern int dc21285_setup(int nr, struct pci_sys_data *);
 106extern void dc21285_preinit(void);
 107extern void dc21285_postinit(void);
 108
 109#endif /* __ASM_MACH_PCI_H */
 110