linux/include/asm-sh/pci.h
<<
>>
Prefs
   1#ifndef __ASM_SH_PCI_H
   2#define __ASM_SH_PCI_H
   3
   4#ifdef __KERNEL__
   5
   6#include <linux/dma-mapping.h>
   7
   8/* Can be used to override the logic in pci_scan_bus for skipping
   9   already-configured bus numbers - to be used for buggy BIOSes
  10   or architectures with incomplete PCI setup by the loader */
  11
  12#define pcibios_assign_all_busses()     1
  13#define pcibios_scan_all_fns(a, b)      0
  14
  15/*
  16 * A board can define one or more PCI channels that represent built-in (or
  17 * external) PCI controllers.
  18 */
  19struct pci_channel {
  20        struct pci_ops *pci_ops;
  21        struct resource *io_resource;
  22        struct resource *mem_resource;
  23        int first_devfn;
  24        int last_devfn;
  25};
  26
  27/*
  28 * Each board initializes this array and terminates it with a NULL entry.
  29 */
  30extern struct pci_channel board_pci_channels[];
  31
  32#define PCIBIOS_MIN_IO          board_pci_channels->io_resource->start
  33#define PCIBIOS_MIN_MEM         board_pci_channels->mem_resource->start
  34
  35/*
  36 * I/O routine helpers
  37 */
  38#if defined(CONFIG_CPU_SUBTYPE_SH7780) || defined(CONFIG_CPU_SUBTYPE_SH7785)
  39#define PCI_IO_AREA             0xFE400000
  40#define PCI_IO_SIZE             0x00400000
  41#else
  42#define PCI_IO_AREA             0xFE240000
  43#define PCI_IO_SIZE             0X00040000
  44#endif
  45
  46#define PCI_MEM_SIZE            0x01000000
  47
  48#define SH4_PCIIOBR_MASK        0xFFFC0000
  49#define pci_ioaddr(addr)        (PCI_IO_AREA + (addr & ~SH4_PCIIOBR_MASK))
  50
  51#if defined(CONFIG_PCI)
  52#define is_pci_ioaddr(port)             \
  53        (((port) >= PCIBIOS_MIN_IO) &&  \
  54         ((port) < (PCIBIOS_MIN_IO + PCI_IO_SIZE)))
  55#define is_pci_memaddr(port)            \
  56        (((port) >= PCIBIOS_MIN_MEM) && \
  57         ((port) < (PCIBIOS_MIN_MEM + PCI_MEM_SIZE)))
  58#else
  59#define is_pci_ioaddr(port)     (0)
  60#define is_pci_memaddr(port)    (0)
  61#endif
  62
  63struct pci_dev;
  64
  65extern void pcibios_set_master(struct pci_dev *dev);
  66
  67static inline void pcibios_penalize_isa_irq(int irq, int active)
  68{
  69        /* We don't do dynamic PCI IRQ allocation */
  70}
  71
  72/* Dynamic DMA mapping stuff.
  73 * SuperH has everything mapped statically like x86.
  74 */
  75
  76/* The PCI address space does equal the physical memory
  77 * address space.  The networking and block device layers use
  78 * this boolean for bounce buffer decisions.
  79 */
  80#define PCI_DMA_BUS_IS_PHYS     (1)
  81
  82#include <linux/types.h>
  83#include <linux/slab.h>
  84#include <asm/scatterlist.h>
  85#include <linux/string.h>
  86#include <asm/io.h>
  87
  88/* pci_unmap_{single,page} being a nop depends upon the
  89 * configuration.
  90 */
  91#ifdef CONFIG_SH_PCIDMA_NONCOHERENT
  92#define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME)       \
  93        dma_addr_t ADDR_NAME;
  94#define DECLARE_PCI_UNMAP_LEN(LEN_NAME)         \
  95        __u32 LEN_NAME;
  96#define pci_unmap_addr(PTR, ADDR_NAME)                  \
  97        ((PTR)->ADDR_NAME)
  98#define pci_unmap_addr_set(PTR, ADDR_NAME, VAL)         \
  99        (((PTR)->ADDR_NAME) = (VAL))
 100#define pci_unmap_len(PTR, LEN_NAME)                    \
 101        ((PTR)->LEN_NAME)
 102#define pci_unmap_len_set(PTR, LEN_NAME, VAL)           \
 103        (((PTR)->LEN_NAME) = (VAL))
 104#else
 105#define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME)
 106#define DECLARE_PCI_UNMAP_LEN(LEN_NAME)
 107#define pci_unmap_addr(PTR, ADDR_NAME)          (0)
 108#define pci_unmap_addr_set(PTR, ADDR_NAME, VAL) do { } while (0)
 109#define pci_unmap_len(PTR, LEN_NAME)            (0)
 110#define pci_unmap_len_set(PTR, LEN_NAME, VAL)   do { } while (0)
 111#endif
 112
 113#ifdef CONFIG_PCI
 114static inline void pci_dma_burst_advice(struct pci_dev *pdev,
 115                                        enum pci_dma_burst_strategy *strat,
 116                                        unsigned long *strategy_parameter)
 117{
 118        *strat = PCI_DMA_BURST_INFINITY;
 119        *strategy_parameter = ~0UL;
 120}
 121#endif
 122
 123/* Board-specific fixup routines. */
 124void pcibios_fixup(void);
 125int pcibios_init_platform(void);
 126int pcibios_map_platform_irq(struct pci_dev *dev, u8 slot, u8 pin);
 127
 128#ifdef CONFIG_PCI_AUTO
 129int pciauto_assign_resources(int busno, struct pci_channel *hose);
 130#endif
 131
 132#endif /* __KERNEL__ */
 133
 134/* generic pci stuff */
 135#include <asm-generic/pci.h>
 136
 137/* generic DMA-mapping stuff */
 138#include <asm-generic/pci-dma-compat.h>
 139
 140#endif /* __ASM_SH_PCI_H */
 141
 142