linux/arch/alpha/kernel/pci-noop.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 *      linux/arch/alpha/kernel/pci-noop.c
   4 *
   5 * Stub PCI interfaces for Jensen-specific kernels.
   6 */
   7
   8#include <linux/pci.h>
   9#include <linux/init.h>
  10#include <linux/memblock.h>
  11#include <linux/gfp.h>
  12#include <linux/capability.h>
  13#include <linux/mm.h>
  14#include <linux/errno.h>
  15#include <linux/sched.h>
  16#include <linux/dma-mapping.h>
  17#include <linux/scatterlist.h>
  18#include <linux/syscalls.h>
  19
  20#include "proto.h"
  21
  22
  23/*
  24 * The PCI controller list.
  25 */
  26
  27struct pci_controller *hose_head, **hose_tail = &hose_head;
  28struct pci_controller *pci_isa_hose;
  29
  30
  31struct pci_controller * __init
  32alloc_pci_controller(void)
  33{
  34        struct pci_controller *hose;
  35
  36        hose = memblock_alloc(sizeof(*hose), SMP_CACHE_BYTES);
  37        if (!hose)
  38                panic("%s: Failed to allocate %zu bytes\n", __func__,
  39                      sizeof(*hose));
  40
  41        *hose_tail = hose;
  42        hose_tail = &hose->next;
  43
  44        return hose;
  45}
  46
  47struct resource * __init
  48alloc_resource(void)
  49{
  50        void *ptr = memblock_alloc(sizeof(struct resource), SMP_CACHE_BYTES);
  51
  52        if (!ptr)
  53                panic("%s: Failed to allocate %zu bytes\n", __func__,
  54                      sizeof(struct resource));
  55
  56        return ptr;
  57}
  58
  59SYSCALL_DEFINE3(pciconfig_iobase, long, which, unsigned long, bus,
  60                unsigned long, dfn)
  61{
  62        struct pci_controller *hose;
  63
  64        /* from hose or from bus.devfn */
  65        if (which & IOBASE_FROM_HOSE) {
  66                for (hose = hose_head; hose; hose = hose->next)
  67                        if (hose->index == bus)
  68                                break;
  69                if (!hose)
  70                        return -ENODEV;
  71        } else {
  72                /* Special hook for ISA access.  */
  73                if (bus == 0 && dfn == 0)
  74                        hose = pci_isa_hose;
  75                else
  76                        return -ENODEV;
  77        }
  78
  79        switch (which & ~IOBASE_FROM_HOSE) {
  80        case IOBASE_HOSE:
  81                return hose->index;
  82        case IOBASE_SPARSE_MEM:
  83                return hose->sparse_mem_base;
  84        case IOBASE_DENSE_MEM:
  85                return hose->dense_mem_base;
  86        case IOBASE_SPARSE_IO:
  87                return hose->sparse_io_base;
  88        case IOBASE_DENSE_IO:
  89                return hose->dense_io_base;
  90        case IOBASE_ROOT_BUS:
  91                return hose->bus->number;
  92        }
  93
  94        return -EOPNOTSUPP;
  95}
  96
  97SYSCALL_DEFINE5(pciconfig_read, unsigned long, bus, unsigned long, dfn,
  98                unsigned long, off, unsigned long, len, void __user *, buf)
  99{
 100        if (!capable(CAP_SYS_ADMIN))
 101                return -EPERM;
 102        else
 103                return -ENODEV;
 104}
 105
 106SYSCALL_DEFINE5(pciconfig_write, unsigned long, bus, unsigned long, dfn,
 107                unsigned long, off, unsigned long, len, void __user *, buf)
 108{
 109        if (!capable(CAP_SYS_ADMIN))
 110                return -EPERM;
 111        else
 112                return -ENODEV;
 113}
 114