root/arch/x86/pci/early.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. read_pci_config
  2. read_pci_config_byte
  3. read_pci_config_16
  4. write_pci_config
  5. write_pci_config_byte
  6. write_pci_config_16
  7. early_pci_allowed

   1 // SPDX-License-Identifier: GPL-2.0
   2 #include <linux/kernel.h>
   3 #include <linux/pci.h>
   4 #include <asm/pci-direct.h>
   5 #include <asm/io.h>
   6 #include <asm/pci_x86.h>
   7 
   8 /* Direct PCI access. This is used for PCI accesses in early boot before
   9    the PCI subsystem works. */
  10 
  11 u32 read_pci_config(u8 bus, u8 slot, u8 func, u8 offset)
  12 {
  13         u32 v;
  14         outl(0x80000000 | (bus<<16) | (slot<<11) | (func<<8) | offset, 0xcf8);
  15         v = inl(0xcfc);
  16         return v;
  17 }
  18 
  19 u8 read_pci_config_byte(u8 bus, u8 slot, u8 func, u8 offset)
  20 {
  21         u8 v;
  22         outl(0x80000000 | (bus<<16) | (slot<<11) | (func<<8) | offset, 0xcf8);
  23         v = inb(0xcfc + (offset&3));
  24         return v;
  25 }
  26 
  27 u16 read_pci_config_16(u8 bus, u8 slot, u8 func, u8 offset)
  28 {
  29         u16 v;
  30         outl(0x80000000 | (bus<<16) | (slot<<11) | (func<<8) | offset, 0xcf8);
  31         v = inw(0xcfc + (offset&2));
  32         return v;
  33 }
  34 
  35 void write_pci_config(u8 bus, u8 slot, u8 func, u8 offset,
  36                                     u32 val)
  37 {
  38         outl(0x80000000 | (bus<<16) | (slot<<11) | (func<<8) | offset, 0xcf8);
  39         outl(val, 0xcfc);
  40 }
  41 
  42 void write_pci_config_byte(u8 bus, u8 slot, u8 func, u8 offset, u8 val)
  43 {
  44         outl(0x80000000 | (bus<<16) | (slot<<11) | (func<<8) | offset, 0xcf8);
  45         outb(val, 0xcfc + (offset&3));
  46 }
  47 
  48 void write_pci_config_16(u8 bus, u8 slot, u8 func, u8 offset, u16 val)
  49 {
  50         outl(0x80000000 | (bus<<16) | (slot<<11) | (func<<8) | offset, 0xcf8);
  51         outw(val, 0xcfc + (offset&2));
  52 }
  53 
  54 int early_pci_allowed(void)
  55 {
  56         return (pci_probe & (PCI_PROBE_CONF1|PCI_PROBE_NOEARLY)) ==
  57                         PCI_PROBE_CONF1;
  58 }
  59 

/* [<][>][^][v][top][bottom][index][help] */