pci-noop.c 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. /*
  2. * linux/arch/alpha/kernel/pci-noop.c
  3. *
  4. * Stub PCI interfaces for Jensen-specific kernels.
  5. */
  6. #include <linux/pci.h>
  7. #include <linux/init.h>
  8. #include <linux/bootmem.h>
  9. #include <linux/capability.h>
  10. #include <linux/mm.h>
  11. #include <linux/errno.h>
  12. #include <linux/sched.h>
  13. #include <linux/dma-mapping.h>
  14. #include "proto.h"
  15. /*
  16. * The PCI controller list.
  17. */
  18. struct pci_controller *hose_head, **hose_tail = &hose_head;
  19. struct pci_controller *pci_isa_hose;
  20. struct pci_controller * __init
  21. alloc_pci_controller(void)
  22. {
  23. struct pci_controller *hose;
  24. hose = alloc_bootmem(sizeof(*hose));
  25. *hose_tail = hose;
  26. hose_tail = &hose->next;
  27. return hose;
  28. }
  29. struct resource * __init
  30. alloc_resource(void)
  31. {
  32. struct resource *res;
  33. res = alloc_bootmem(sizeof(*res));
  34. return res;
  35. }
  36. asmlinkage long
  37. sys_pciconfig_iobase(long which, unsigned long bus, unsigned long dfn)
  38. {
  39. struct pci_controller *hose;
  40. /* from hose or from bus.devfn */
  41. if (which & IOBASE_FROM_HOSE) {
  42. for (hose = hose_head; hose; hose = hose->next)
  43. if (hose->index == bus)
  44. break;
  45. if (!hose)
  46. return -ENODEV;
  47. } else {
  48. /* Special hook for ISA access. */
  49. if (bus == 0 && dfn == 0)
  50. hose = pci_isa_hose;
  51. else
  52. return -ENODEV;
  53. }
  54. switch (which & ~IOBASE_FROM_HOSE) {
  55. case IOBASE_HOSE:
  56. return hose->index;
  57. case IOBASE_SPARSE_MEM:
  58. return hose->sparse_mem_base;
  59. case IOBASE_DENSE_MEM:
  60. return hose->dense_mem_base;
  61. case IOBASE_SPARSE_IO:
  62. return hose->sparse_io_base;
  63. case IOBASE_DENSE_IO:
  64. return hose->dense_io_base;
  65. case IOBASE_ROOT_BUS:
  66. return hose->bus->number;
  67. }
  68. return -EOPNOTSUPP;
  69. }
  70. asmlinkage long
  71. sys_pciconfig_read(unsigned long bus, unsigned long dfn,
  72. unsigned long off, unsigned long len, void *buf)
  73. {
  74. if (!capable(CAP_SYS_ADMIN))
  75. return -EPERM;
  76. else
  77. return -ENODEV;
  78. }
  79. asmlinkage long
  80. sys_pciconfig_write(unsigned long bus, unsigned long dfn,
  81. unsigned long off, unsigned long len, void *buf)
  82. {
  83. if (!capable(CAP_SYS_ADMIN))
  84. return -EPERM;
  85. else
  86. return -ENODEV;
  87. }
  88. /* Stubs for the routines in pci_iommu.c: */
  89. void *
  90. pci_alloc_consistent(struct pci_dev *pdev, size_t size, dma_addr_t *dma_addrp)
  91. {
  92. return NULL;
  93. }
  94. void
  95. pci_free_consistent(struct pci_dev *pdev, size_t size, void *cpu_addr,
  96. dma_addr_t dma_addr)
  97. {
  98. }
  99. dma_addr_t
  100. pci_map_single(struct pci_dev *pdev, void *cpu_addr, size_t size,
  101. int direction)
  102. {
  103. return (dma_addr_t) 0;
  104. }
  105. void
  106. pci_unmap_single(struct pci_dev *pdev, dma_addr_t dma_addr, size_t size,
  107. int direction)
  108. {
  109. }
  110. int
  111. pci_map_sg(struct pci_dev *pdev, struct scatterlist *sg, int nents,
  112. int direction)
  113. {
  114. return 0;
  115. }
  116. void
  117. pci_unmap_sg(struct pci_dev *pdev, struct scatterlist *sg, int nents,
  118. int direction)
  119. {
  120. }
  121. int
  122. pci_dma_supported(struct pci_dev *hwdev, dma_addr_t mask)
  123. {
  124. return 0;
  125. }
  126. /* Generic DMA mapping functions: */
  127. void *
  128. dma_alloc_coherent(struct device *dev, size_t size,
  129. dma_addr_t *dma_handle, gfp_t gfp)
  130. {
  131. void *ret;
  132. if (!dev || *dev->dma_mask >= 0xffffffffUL)
  133. gfp &= ~GFP_DMA;
  134. ret = (void *)__get_free_pages(gfp, get_order(size));
  135. if (ret) {
  136. memset(ret, 0, size);
  137. *dma_handle = virt_to_bus(ret);
  138. }
  139. return ret;
  140. }
  141. EXPORT_SYMBOL(dma_alloc_coherent);
  142. int
  143. dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
  144. enum dma_data_direction direction)
  145. {
  146. int i;
  147. for (i = 0; i < nents; i++ ) {
  148. void *va;
  149. BUG_ON(!sg[i].page);
  150. va = page_address(sg[i].page) + sg[i].offset;
  151. sg_dma_address(sg + i) = (dma_addr_t)virt_to_bus(va);
  152. sg_dma_len(sg + i) = sg[i].length;
  153. }
  154. return nents;
  155. }
  156. EXPORT_SYMBOL(dma_map_sg);
  157. int
  158. dma_set_mask(struct device *dev, u64 mask)
  159. {
  160. if (!dev->dma_mask || !dma_supported(dev, mask))
  161. return -EIO;
  162. *dev->dma_mask = mask;
  163. return 0;
  164. }
  165. EXPORT_SYMBOL(dma_set_mask);
  166. void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
  167. {
  168. return NULL;
  169. }
  170. void pci_iounmap(struct pci_dev *dev, void __iomem * addr)
  171. {
  172. }
  173. EXPORT_SYMBOL(pci_iomap);
  174. EXPORT_SYMBOL(pci_iounmap);