| 
									
										
										
										
											2005-06-21 17:15:33 -07:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * Provides the Hypervisor PCI calls for iSeries Linux Parition. | 
					
						
							|  |  |  |  * Copyright (C) 2001  <Wayne G Holm> <IBM Corporation> | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This program is free software; you can redistribute it and/or modify | 
					
						
							|  |  |  |  * it under the terms of the GNU General Public License as published by | 
					
						
							|  |  |  |  * the Free Software Foundation; either version 2 of the License, or | 
					
						
							|  |  |  |  * (at your option) any later version. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This program is distributed in the hope that it will be useful, | 
					
						
							|  |  |  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							|  |  |  |  * GNU General Public License for more details. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * You should have received a copy of the GNU General Public License | 
					
						
							|  |  |  |  * along with this program; if not, write to the: | 
					
						
							|  |  |  |  * Free Software Foundation, Inc., | 
					
						
							|  |  |  |  * 59 Temple Place, Suite 330, | 
					
						
							|  |  |  |  * Boston, MA  02111-1307  USA | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Change Activity: | 
					
						
							|  |  |  |  *   Created, Jan 9, 2001 | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-10-14 17:16:17 +10:00
										 |  |  | #ifndef _PLATFORMS_ISERIES_CALL_PCI_H
 | 
					
						
							|  |  |  | #define _PLATFORMS_ISERIES_CALL_PCI_H
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-11-02 11:37:22 +11:00
										 |  |  | #include <asm/iseries/hv_call_sc.h>
 | 
					
						
							| 
									
										
										
										
											2005-11-02 13:46:07 +11:00
										 |  |  | #include <asm/iseries/hv_types.h>
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * DSA == Direct Select Address | 
					
						
							|  |  |  |  * this struct must be 64 bits in total | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | struct HvCallPci_DsaAddr { | 
					
						
							|  |  |  | 	u16		busNumber;		/* PHB index? */ | 
					
						
							| 
									
										
										
										
											2005-06-21 17:15:33 -07:00
										 |  |  | 	u8		subBusNumber;		/* PCI bus number? */ | 
					
						
							|  |  |  | 	u8		deviceId;		/* device and function? */ | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	u8		barNumber; | 
					
						
							|  |  |  | 	u8		reserved[3]; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union HvDsaMap { | 
					
						
							|  |  |  | 	u64	DsaAddr; | 
					
						
							|  |  |  | 	struct HvCallPci_DsaAddr Dsa; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct HvCallPci_LoadReturn { | 
					
						
							|  |  |  | 	u64		rc; | 
					
						
							|  |  |  | 	u64		value; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | enum HvCallPci_DeviceType { | 
					
						
							|  |  |  | 	HvCallPci_NodeDevice	= 1, | 
					
						
							| 
									
										
										
										
											2005-06-21 17:15:33 -07:00
										 |  |  | 	HvCallPci_SpDevice	= 2, | 
					
						
							|  |  |  | 	HvCallPci_IopDevice     = 3, | 
					
						
							|  |  |  | 	HvCallPci_BridgeDevice	= 4, | 
					
						
							|  |  |  | 	HvCallPci_MultiFunctionDevice = 5, | 
					
						
							|  |  |  | 	HvCallPci_IoaDevice	= 6 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct HvCallPci_DeviceInfo { | 
					
						
							| 
									
										
										
										
											2005-06-21 17:15:33 -07:00
										 |  |  | 	u32	deviceType;		/* See DeviceType enum for values */ | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2005-06-21 17:15:33 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | struct HvCallPci_BusUnitInfo { | 
					
						
							| 
									
										
										
										
											2005-06-21 17:15:33 -07:00
										 |  |  | 	u32	sizeReturned;		/* length of data returned */ | 
					
						
							|  |  |  | 	u32	deviceType;		/* see DeviceType enum for values */ | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct HvCallPci_BridgeInfo { | 
					
						
							| 
									
										
										
										
											2005-06-21 17:15:33 -07:00
										 |  |  | 	struct HvCallPci_BusUnitInfo busUnitInfo;  /* Generic bus unit info */ | 
					
						
							|  |  |  | 	u8		subBusNumber;	/* Bus number of secondary bus */ | 
					
						
							|  |  |  | 	u8		maxAgents;	/* Max idsels on secondary bus */ | 
					
						
							|  |  |  |         u8              maxSubBusNumber; /* Max Sub Bus */ | 
					
						
							|  |  |  | 	u8		logicalSlotNumber; /* Logical Slot Number for IOA */ | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-06-21 17:15:33 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * Maximum BusUnitInfo buffer size.  Provided for clients so | 
					
						
							|  |  |  |  * they can allocate a buffer big enough for any type of bus | 
					
						
							|  |  |  |  * unit.  Increase as needed. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | enum {HvCallPci_MaxBusUnitInfoSize = 128}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct HvCallPci_BarParms { | 
					
						
							|  |  |  | 	u64		vaddr; | 
					
						
							|  |  |  | 	u64		raddr; | 
					
						
							|  |  |  | 	u64		size; | 
					
						
							|  |  |  | 	u64		protectStart; | 
					
						
							|  |  |  | 	u64		protectEnd; | 
					
						
							|  |  |  | 	u64		relocationOffset; | 
					
						
							| 
									
										
										
										
											2005-06-21 17:15:33 -07:00
										 |  |  | 	u64		pciAddress; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	u64		reserved[3]; | 
					
						
							| 
									
										
										
										
											2005-06-21 17:15:33 -07:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | enum HvCallPci_VpdType { | 
					
						
							| 
									
										
										
										
											2005-06-21 17:15:33 -07:00
										 |  |  | 	HvCallPci_BusVpd	= 1, | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	HvCallPci_BusAdapterVpd	= 2 | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define HvCallPciConfigLoad8		HvCallPci + 0
 | 
					
						
							|  |  |  | #define HvCallPciConfigLoad16		HvCallPci + 1
 | 
					
						
							|  |  |  | #define HvCallPciConfigLoad32		HvCallPci + 2
 | 
					
						
							|  |  |  | #define HvCallPciConfigStore8		HvCallPci + 3
 | 
					
						
							|  |  |  | #define HvCallPciConfigStore16		HvCallPci + 4
 | 
					
						
							|  |  |  | #define HvCallPciConfigStore32		HvCallPci + 5
 | 
					
						
							|  |  |  | #define HvCallPciEoi			HvCallPci + 16
 | 
					
						
							|  |  |  | #define HvCallPciGetBarParms		HvCallPci + 18
 | 
					
						
							|  |  |  | #define HvCallPciMaskFisr		HvCallPci + 20
 | 
					
						
							|  |  |  | #define HvCallPciUnmaskFisr		HvCallPci + 21
 | 
					
						
							|  |  |  | #define HvCallPciSetSlotReset		HvCallPci + 25
 | 
					
						
							|  |  |  | #define HvCallPciGetDeviceInfo		HvCallPci + 27
 | 
					
						
							|  |  |  | #define HvCallPciGetCardVpd		HvCallPci + 28
 | 
					
						
							|  |  |  | #define HvCallPciBarLoad8		HvCallPci + 40
 | 
					
						
							|  |  |  | #define HvCallPciBarLoad16		HvCallPci + 41
 | 
					
						
							|  |  |  | #define HvCallPciBarLoad32		HvCallPci + 42
 | 
					
						
							|  |  |  | #define HvCallPciBarLoad64		HvCallPci + 43
 | 
					
						
							|  |  |  | #define HvCallPciBarStore8		HvCallPci + 44
 | 
					
						
							|  |  |  | #define HvCallPciBarStore16		HvCallPci + 45
 | 
					
						
							|  |  |  | #define HvCallPciBarStore32		HvCallPci + 46
 | 
					
						
							|  |  |  | #define HvCallPciBarStore64		HvCallPci + 47
 | 
					
						
							|  |  |  | #define HvCallPciMaskInterrupts		HvCallPci + 48
 | 
					
						
							|  |  |  | #define HvCallPciUnmaskInterrupts	HvCallPci + 49
 | 
					
						
							|  |  |  | #define HvCallPciGetBusUnitInfo		HvCallPci + 50
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline u64 HvCallPci_configLoad16(u16 busNumber, u8 subBusNumber, | 
					
						
							| 
									
										
										
										
											2005-06-21 17:15:33 -07:00
										 |  |  | 		u8 deviceId, u32 offset, u16 *value) | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | { | 
					
						
							|  |  |  | 	struct HvCallPci_DsaAddr dsa; | 
					
						
							|  |  |  | 	struct HvCallPci_LoadReturn retVal; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-06-21 17:15:33 -07:00
										 |  |  | 	*((u64*)&dsa) = 0; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	dsa.busNumber = busNumber; | 
					
						
							|  |  |  | 	dsa.subBusNumber = subBusNumber; | 
					
						
							|  |  |  | 	dsa.deviceId = deviceId; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	HvCall3Ret16(HvCallPciConfigLoad16, &retVal, *(u64 *)&dsa, offset, 0); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	*value = retVal.value; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return retVal.rc; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2005-06-21 17:15:33 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-05-19 16:43:58 +10:00
										 |  |  | static inline u64 HvCallPci_configLoad32(u16 busNumber, u8 subBusNumber, | 
					
						
							|  |  |  | 		u8 deviceId, u32 offset, u32 *value) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	struct HvCallPci_DsaAddr dsa; | 
					
						
							|  |  |  | 	struct HvCallPci_LoadReturn retVal; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	*((u64*)&dsa) = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	dsa.busNumber = busNumber; | 
					
						
							|  |  |  | 	dsa.subBusNumber = subBusNumber; | 
					
						
							|  |  |  | 	dsa.deviceId = deviceId; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	HvCall3Ret16(HvCallPciConfigLoad32, &retVal, *(u64 *)&dsa, offset, 0); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	*value = retVal.value; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return retVal.rc; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-06-21 17:15:33 -07:00
										 |  |  | static inline u64 HvCallPci_configStore8(u16 busNumber, u8 subBusNumber, | 
					
						
							|  |  |  | 		u8 deviceId, u32 offset, u8 value) | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | { | 
					
						
							|  |  |  | 	struct HvCallPci_DsaAddr dsa; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-06-21 17:15:33 -07:00
										 |  |  | 	*((u64*)&dsa) = 0; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	dsa.busNumber = busNumber; | 
					
						
							|  |  |  | 	dsa.subBusNumber = subBusNumber; | 
					
						
							|  |  |  | 	dsa.deviceId = deviceId; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-06-21 17:15:35 -07:00
										 |  |  | 	return HvCall4(HvCallPciConfigStore8, *(u64 *)&dsa, offset, value, 0); | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2005-06-21 17:15:33 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | static inline u64 HvCallPci_eoi(u16 busNumberParm, u8 subBusParm, | 
					
						
							|  |  |  | 		u8 deviceIdParm) | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | { | 
					
						
							|  |  |  | 	struct HvCallPci_DsaAddr dsa; | 
					
						
							|  |  |  | 	struct HvCallPci_LoadReturn retVal; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	*((u64*)&dsa) = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	dsa.busNumber = busNumberParm; | 
					
						
							|  |  |  | 	dsa.subBusNumber = subBusParm; | 
					
						
							|  |  |  | 	dsa.deviceId = deviceIdParm; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	HvCall1Ret16(HvCallPciEoi, &retVal, *(u64*)&dsa); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return retVal.rc; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2005-06-21 17:15:33 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | static inline u64 HvCallPci_getBarParms(u16 busNumberParm, u8 subBusParm, | 
					
						
							|  |  |  | 		u8 deviceIdParm, u8 barNumberParm, u64 parms, u32 sizeofParms) | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | { | 
					
						
							|  |  |  | 	struct HvCallPci_DsaAddr dsa; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	*((u64*)&dsa) = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	dsa.busNumber = busNumberParm; | 
					
						
							|  |  |  | 	dsa.subBusNumber = subBusParm; | 
					
						
							|  |  |  | 	dsa.deviceId = deviceIdParm; | 
					
						
							|  |  |  | 	dsa.barNumber = barNumberParm; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-06-21 17:15:35 -07:00
										 |  |  | 	return HvCall3(HvCallPciGetBarParms, *(u64*)&dsa, parms, sizeofParms); | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2005-06-21 17:15:33 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | static inline u64 HvCallPci_maskFisr(u16 busNumberParm, u8 subBusParm, | 
					
						
							|  |  |  | 		u8 deviceIdParm, u64 fisrMask) | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | { | 
					
						
							|  |  |  | 	struct HvCallPci_DsaAddr dsa; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-06-21 17:15:33 -07:00
										 |  |  | 	*((u64*)&dsa) = 0; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	dsa.busNumber = busNumberParm; | 
					
						
							|  |  |  | 	dsa.subBusNumber = subBusParm; | 
					
						
							|  |  |  | 	dsa.deviceId = deviceIdParm; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-06-21 17:15:35 -07:00
										 |  |  | 	return HvCall2(HvCallPciMaskFisr, *(u64*)&dsa, fisrMask); | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2005-06-21 17:15:33 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | static inline u64 HvCallPci_unmaskFisr(u16 busNumberParm, u8 subBusParm, | 
					
						
							|  |  |  | 		u8 deviceIdParm, u64 fisrMask) | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | { | 
					
						
							|  |  |  | 	struct HvCallPci_DsaAddr dsa; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-06-21 17:15:33 -07:00
										 |  |  | 	*((u64*)&dsa) = 0; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	dsa.busNumber = busNumberParm; | 
					
						
							|  |  |  | 	dsa.subBusNumber = subBusParm; | 
					
						
							|  |  |  | 	dsa.deviceId = deviceIdParm; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-06-21 17:15:35 -07:00
										 |  |  | 	return HvCall2(HvCallPciUnmaskFisr, *(u64*)&dsa, fisrMask); | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2005-06-21 17:15:33 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | static inline u64 HvCallPci_getDeviceInfo(u16 busNumberParm, u8 subBusParm, | 
					
						
							|  |  |  | 		u8 deviceNumberParm, u64 parms, u32 sizeofParms) | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | { | 
					
						
							|  |  |  | 	struct HvCallPci_DsaAddr dsa; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	*((u64*)&dsa) = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	dsa.busNumber = busNumberParm; | 
					
						
							|  |  |  | 	dsa.subBusNumber = subBusParm; | 
					
						
							|  |  |  | 	dsa.deviceId = deviceNumberParm << 4; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-06-21 17:15:35 -07:00
										 |  |  | 	return HvCall3(HvCallPciGetDeviceInfo, *(u64*)&dsa, parms, sizeofParms); | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2005-06-21 17:15:33 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | static inline u64 HvCallPci_maskInterrupts(u16 busNumberParm, u8 subBusParm, | 
					
						
							|  |  |  | 		u8 deviceIdParm, u64 interruptMask) | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | { | 
					
						
							|  |  |  | 	struct HvCallPci_DsaAddr dsa; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-06-21 17:15:33 -07:00
										 |  |  | 	*((u64*)&dsa) = 0; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	dsa.busNumber = busNumberParm; | 
					
						
							|  |  |  | 	dsa.subBusNumber = subBusParm; | 
					
						
							|  |  |  | 	dsa.deviceId = deviceIdParm; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-06-21 17:15:35 -07:00
										 |  |  | 	return HvCall2(HvCallPciMaskInterrupts, *(u64*)&dsa, interruptMask); | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2005-06-21 17:15:33 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | static inline u64 HvCallPci_unmaskInterrupts(u16 busNumberParm, u8 subBusParm, | 
					
						
							|  |  |  | 		u8 deviceIdParm, u64 interruptMask) | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | { | 
					
						
							|  |  |  | 	struct HvCallPci_DsaAddr dsa; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-06-21 17:15:33 -07:00
										 |  |  | 	*((u64*)&dsa) = 0; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	dsa.busNumber = busNumberParm; | 
					
						
							|  |  |  | 	dsa.subBusNumber = subBusParm; | 
					
						
							|  |  |  | 	dsa.deviceId = deviceIdParm; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-06-21 17:15:35 -07:00
										 |  |  | 	return HvCall2(HvCallPciUnmaskInterrupts, *(u64*)&dsa, interruptMask); | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-06-21 17:15:33 -07:00
										 |  |  | static inline u64 HvCallPci_getBusUnitInfo(u16 busNumberParm, u8 subBusParm, | 
					
						
							|  |  |  | 		u8 deviceIdParm, u64 parms, u32 sizeofParms) | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | { | 
					
						
							|  |  |  | 	struct HvCallPci_DsaAddr dsa; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-06-21 17:15:33 -07:00
										 |  |  | 	*((u64*)&dsa) = 0; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	dsa.busNumber = busNumberParm; | 
					
						
							|  |  |  | 	dsa.subBusNumber = subBusParm; | 
					
						
							|  |  |  | 	dsa.deviceId = deviceIdParm; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-06-21 17:15:35 -07:00
										 |  |  | 	return HvCall3(HvCallPciGetBusUnitInfo, *(u64*)&dsa, parms, | 
					
						
							|  |  |  | 			sizeofParms); | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-06-21 17:15:33 -07:00
										 |  |  | static inline int HvCallPci_getBusVpd(u16 busNumParm, u64 destParm, | 
					
						
							|  |  |  | 		u16 sizeParm) | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2005-06-21 17:15:35 -07:00
										 |  |  | 	u64 xRc = HvCall4(HvCallPciGetCardVpd, busNumParm, destParm, | 
					
						
							|  |  |  | 			sizeParm, HvCallPci_BusVpd); | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	if (xRc == -1) | 
					
						
							| 
									
										
										
										
											2005-06-21 17:15:35 -07:00
										 |  |  | 		return -1; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	else | 
					
						
							| 
									
										
										
										
											2005-06-21 17:15:35 -07:00
										 |  |  | 		return xRc & 0xFFFF; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-10-14 17:16:17 +10:00
										 |  |  | #endif /* _PLATFORMS_ISERIES_CALL_PCI_H */
 |