1 #ifndef KVM__OF_PCI_H 2 #define KVM__OF_PCI_H 3 4 #include <linux/types.h> 5 6 /* 7 * Definitions for implementing parts of the OpenFirmware PCI Bus Binding 8 * Specification (IEEE Std 1275-1994). 9 */ 10 11 struct of_pci_unit_address { 12 u32 hi, mid, lo; 13 } __attribute__((packed)); 14 15 struct of_pci_irq_mask { 16 struct of_pci_unit_address pci_addr; 17 u32 pci_pin; 18 } __attribute__((packed)); 19 20 struct of_pci_ranges_entry { 21 struct of_pci_unit_address pci_addr; 22 u64 cpu_addr; 23 u64 length; 24 } __attribute__((packed)); 25 26 /* Macros to operate with address in OF binding to PCI */ 27 #define __b_x(x, p, l) (((x) & ((1<<(l))-1)) << (p)) 28 #define of_pci_b_n(x) __b_x((x), 31, 1) /* 0 if relocatable */ 29 #define of_pci_b_p(x) __b_x((x), 30, 1) /* 1 if prefetchable */ 30 #define of_pci_b_t(x) __b_x((x), 29, 1) /* 1 if the address is aliased */ 31 #define of_pci_b_ss(x) __b_x((x), 24, 2) /* the space code */ 32 #define of_pci_b_bbbbbbbb(x) __b_x((x), 16, 8) /* bus number */ 33 #define of_pci_b_ddddd(x) __b_x((x), 11, 5) /* device number */ 34 #define of_pci_b_fff(x) __b_x((x), 8, 3) /* function number */ 35 #define of_pci_b_rrrrrrrr(x) __b_x((x), 0, 8) /* register number */ 36 37 #define OF_PCI_SS_CONFIG 0 38 #define OF_PCI_SS_IO 1 39 #define OF_PCI_SS_M32 2 40 #define OF_PCI_SS_M64 3 41 42 #define OF_PCI_IRQ_MAP_MAX 256 /* 5 bit device + 3 bit pin */ 43 44 #endif /* KVM__OF_PCI_H */ 45