home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-x86_64 / pci-direct.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  1.2 KB  |  49 lines

  1. #ifndef ASM_PCI_DIRECT_H
  2. #define ASM_PCI_DIRECT_H 1
  3.  
  4. #include <linux/types.h>
  5. #include <asm/io.h>
  6.  
  7. /* Direct PCI access. This is used for PCI accesses in early boot before
  8.    the PCI subsystem works. */ 
  9.  
  10. #define PDprintk(x...)
  11.  
  12. static inline u32 read_pci_config(u8 bus, u8 slot, u8 func, u8 offset)
  13. {
  14.     u32 v; 
  15.     outl(0x80000000 | (bus<<16) | (slot<<11) | (func<<8) | offset, 0xcf8);
  16.     v = inl(0xcfc); 
  17.     if (v != 0xffffffff)
  18.         PDprintk("%x reading 4 from %x: %x\n", slot, offset, v);
  19.     return v;
  20. }
  21.  
  22. static inline u8 read_pci_config_byte(u8 bus, u8 slot, u8 func, u8 offset)
  23. {
  24.     u8 v; 
  25.     outl(0x80000000 | (bus<<16) | (slot<<11) | (func<<8) | offset, 0xcf8);
  26.     v = inb(0xcfc + (offset&3)); 
  27.     PDprintk("%x reading 1 from %x: %x\n", slot, offset, v);
  28.     return v;
  29. }
  30.  
  31. static inline u16 read_pci_config_16(u8 bus, u8 slot, u8 func, u8 offset)
  32. {
  33.     u16 v; 
  34.     outl(0x80000000 | (bus<<16) | (slot<<11) | (func<<8) | offset, 0xcf8);
  35.     v = inw(0xcfc + (offset&2)); 
  36.     PDprintk("%x reading 2 from %x: %x\n", slot, offset, v);
  37.     return v;
  38. }
  39.  
  40. static inline void write_pci_config(u8 bus, u8 slot, u8 func, u8 offset,
  41.                     u32 val)
  42. {
  43.     PDprintk("%x writing to %x: %x\n", slot, offset, val); 
  44.     outl(0x80000000 | (bus<<16) | (slot<<11) | (func<<8) | offset, 0xcf8);
  45.     outl(val, 0xcfc); 
  46. }
  47.  
  48. #endif
  49.