xref: /kvmtool/include/kvm/of_pci.h (revision 16242d272132662650872c01a609cab001b11cae)
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