pci.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:5k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. #ifndef __PPC64_PCI_H
  2. #define __PPC64_PCI_H
  3. #ifdef __KERNEL__
  4. /*
  5.  * This program is free software; you can redistribute it and/or
  6.  * modify it under the terms of the GNU General Public License
  7.  * as published by the Free Software Foundation; either version
  8.  * 2 of the License, or (at your option) any later version.
  9.  */
  10. /* Values for the `which' argument to sys_pciconfig_iobase syscall.  */
  11. #define IOBASE_BRIDGE_NUMBER 0
  12. #define IOBASE_MEMORY 1
  13. #define IOBASE_IO 2
  14. #define IOBASE_ISA_IO           3
  15. #define IOBASE_ISA_MEM          4
  16. /* Can be used to override the logic in pci_scan_bus for skipping
  17.  * already-configured bus numbers - to be used for buggy BIOSes
  18.  * or architectures with incomplete PCI setup by the loader.
  19.  */
  20. extern int pcibios_assign_all_busses(void);
  21. #define PCIBIOS_MIN_IO 0x1000
  22. #define PCIBIOS_MIN_MEM 0x10000000
  23. static inline void pcibios_set_master(struct pci_dev *dev)
  24. {
  25. /* No special bus mastering setup handling */
  26. }
  27. static inline void pcibios_penalize_isa_irq(int irq)
  28. {
  29. /* We don't do dynamic PCI IRQ allocation */
  30. }
  31. #include <linux/types.h>
  32. #include <linux/slab.h>
  33. #include <linux/string.h>
  34. #include <asm/scatterlist.h>
  35. #include <asm/io.h>
  36. #include <asm/prom.h>
  37. struct pci_dev;
  38. #define REG_SAVE_SIZE 64
  39. /************************************************************************
  40.  * Structure to hold the data for PCI Register Save/Restore functions.  *
  41.  ************************************************************************/
  42. struct pci_config_reg_save_area {
  43. struct pci_dev* PciDev;     /* Pointer to device(Sanity Check)     */ 
  44. int    Flags;               /* Control & Info Flags                */
  45. int    RCode;               /* Return Code on Save/Restore         */
  46. int    Register;            /* Pointer to current register.        */
  47. u8     Regs[REG_SAVE_SIZE]; /* Save Area                           */ 
  48. };
  49. /************************************************************************
  50.  * Functions to support device reset                                    *
  51.  ************************************************************************/
  52. extern int   pci_reset_device(struct pci_dev*, int, int);
  53. extern int   pci_save_config_regs(struct pci_dev*,struct pci_config_reg_save_area*);
  54. extern int   pci_restore_config_regs(struct pci_dev*,struct pci_config_reg_save_area*);
  55. extern char* pci_card_location(struct pci_dev*);
  56. extern void *pci_alloc_consistent(struct pci_dev *hwdev, size_t size,
  57.   dma_addr_t *dma_handle);
  58. extern void pci_free_consistent(struct pci_dev *hwdev, size_t size,
  59. void *vaddr, dma_addr_t dma_handle);
  60. extern dma_addr_t pci_map_single(struct pci_dev *hwdev, void *ptr,
  61. size_t size, int direction);
  62. extern void pci_unmap_single(struct pci_dev *hwdev, dma_addr_t dma_addr,
  63.                              size_t size, int direction);
  64. extern int pci_map_sg(struct pci_dev *hwdev, struct scatterlist *sg,
  65.                       int nents, int direction);
  66. extern void pci_unmap_sg(struct pci_dev *hwdev, struct scatterlist *sg,
  67.                          int nents, int direction);
  68. extern void pSeries_pcibios_init_early(void);
  69. static inline void pci_dma_sync_single(struct pci_dev *hwdev,
  70.        dma_addr_t dma_handle,
  71.        size_t size, int direction)
  72. {
  73. if (direction == PCI_DMA_NONE)
  74. BUG();
  75. /* nothing to do */
  76. }
  77. static inline void pci_dma_sync_sg(struct pci_dev *hwdev,
  78.    struct scatterlist *sg,
  79.    int nelems, int direction)
  80. {
  81. if (direction == PCI_DMA_NONE)
  82. BUG();
  83. /* nothing to do */
  84. }
  85. /* Return whether the given PCI device DMA address mask can
  86.  * be supported properly.  For example, if your device can
  87.  * only drive the low 24-bits during PCI bus mastering, then
  88.  * you would pass 0x00ffffff as the mask to this function.
  89.  */
  90. static inline int pci_dma_supported(struct pci_dev *hwdev, u64 mask)
  91. {
  92. return 1;
  93. }
  94. /* Return the index of the PCI controller for device PDEV. */
  95. extern int pci_controller_num(struct pci_dev *pdev);
  96. struct vm_area_struct;
  97. /* Map a range of PCI memory or I/O space for a device into user space */
  98. int pci_mmap_page_range(struct pci_dev *pdev, struct vm_area_struct *vma,
  99. enum pci_mmap_state mmap_state, int write_combine);
  100. /* Tell drivers/pci/proc.c that we have pci_mmap_page_range() */
  101. #define HAVE_PCI_MMAP 1
  102. #define sg_dma_address(sg) ((sg)->dma_address)
  103. #define sg_dma_len(sg) ((sg)->dma_length)
  104. #define pci_map_page(dev, page, off, size, dir) 
  105. pci_map_single(dev, (page_address(page) + (off)), size, dir)
  106. #define pci_unmap_page(dev,addr,sz,dir) pci_unmap_single(dev,addr,sz,dir)
  107. /* pci_unmap_{single,page} is not a nop, thus... */
  108. #define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME)
  109. dma_addr_t ADDR_NAME;
  110. #define DECLARE_PCI_UNMAP_LEN(LEN_NAME)
  111. __u32 LEN_NAME;
  112. #define pci_unmap_addr(PTR, ADDR_NAME)
  113. ((PTR)->ADDR_NAME)
  114. #define pci_unmap_addr_set(PTR, ADDR_NAME, VAL)
  115. (((PTR)->ADDR_NAME) = (VAL))
  116. #define pci_unmap_len(PTR, LEN_NAME)
  117. ((PTR)->LEN_NAME)
  118. #define pci_unmap_len_set(PTR, LEN_NAME, VAL)
  119. (((PTR)->LEN_NAME) = (VAL))
  120. #define pci_dac_dma_supported(pci_dev, mask) (0)
  121. /* The PCI address space does equal the physical memory
  122.  * address space.  The networking and block device layers use
  123.  * this boolean for bounce buffer decisions.
  124.  */
  125. #define PCI_DMA_BUS_IS_PHYS (0)
  126. #endif /* __KERNEL__ */
  127. #endif /* __PPC64_PCI_H */