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