- every pci device which implements _PRT acpi method is considered to be a pci-to-pci bridge - acpi driver constructs a hierarchy of pci-to-pci bridges - when pci driver identifies a pci-to-pci bridge it tells acpi driver what is the primary and the secondary bus for this device - when pci requests IRQ routing information from acpi, it passes the bus number too to be able to identify the device accurately
		
			
				
	
	
		
			45 lines
		
	
	
		
			880 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			880 B
		
	
	
	
		
			C
		
	
	
	
	
	
#include <minix/types.h>
 | 
						|
#include <minix/ipc.h>
 | 
						|
 | 
						|
#define ACPI_REQ_GET_IRQ	1
 | 
						|
#define ACPI_REQ_MAP_BRIDGE	2
 | 
						|
 | 
						|
struct acpi_request_hdr {
 | 
						|
	endpoint_t 	m_source; /* message header */
 | 
						|
	u32_t		request;
 | 
						|
};
 | 
						|
 | 
						|
/* 
 | 
						|
 * Message to request dev/pin translation to IRQ by acpi using the acpi routing
 | 
						|
 * tables
 | 
						|
 */
 | 
						|
struct acpi_get_irq_req {
 | 
						|
	struct acpi_request_hdr	hdr;
 | 
						|
	u32_t			bus;
 | 
						|
	u32_t			dev;
 | 
						|
	u32_t			pin;
 | 
						|
	u32_t			__padding[4];
 | 
						|
};
 | 
						|
 | 
						|
/* response from acpi to acpi_get_irq_req */
 | 
						|
struct acpi_get_irq_resp {
 | 
						|
	endpoint_t 	m_source; /* message header */
 | 
						|
	i32_t		irq;
 | 
						|
	u32_t		__padding[7];
 | 
						|
};
 | 
						|
 | 
						|
/* message format for pci bridge mappings to acpi */
 | 
						|
struct acpi_map_bridge_req {
 | 
						|
	struct acpi_request_hdr	hdr;
 | 
						|
	u32_t	primary_bus;
 | 
						|
	u32_t	secondary_bus;
 | 
						|
	u32_t	device;
 | 
						|
	u32_t	__padding[4];
 | 
						|
};
 | 
						|
 | 
						|
struct acpi_map_bridge_resp {
 | 
						|
	endpoint_t 	m_source; /* message header */
 | 
						|
	int		err;
 | 
						|
	u32_t		__padding[7];
 | 
						|
};
 |