⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hvcallpci.h

📁 linux-2.4.29操作系统的源码
💻 H
📖 第 1 页 / 共 2 页
字号:
/************************************************************************//* Provides the Hypervisor PCI calls for iSeries Linux Parition.        *//* Copyright (C) 20yy  <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                                               *//************************************************************************///============================================================================//							 Header File Id// Name______________:	HvCallPci.H//// Description_______:////	This file contains the "hypervisor call" interface which is used to//	drive the hypervisor from SLIC.////============================================================================//-------------------------------------------------------------------// Forward declarations //-------------------------------------------------------------------//-------------------------------------------------------------------// Standard Includes//-------------------------------------------------------------------#ifndef  _HVCALLSC_H#include "HvCallSc.h"#endif#ifndef  _HVTYPES_H#include <asm/iSeries/HvTypes.h>#endif//-------------------------------------------------------------------// Other Includes//-------------------------------------------------------------------//-----------------------------------------------------------------------------// Constants//-----------------------------------------------------------------------------#ifndef _HVCALLPCI_H#define _HVCALLPCI_Hstruct HvCallPci_DsaAddr { // make sure this struct size is 64-bits total	u16		busNumber;	u8		subBusNumber; 	u8		deviceId;     	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,                        HvCallPci_SpDevice	= 2,	                        HvCallPci_IopDevice     = 3,	                        HvCallPci_BridgeDevice	= 4,	                        HvCallPci_MultiFunctionDevice = 5,	                        HvCallPci_IoaDevice	= 6	};struct HvCallPci_DeviceInfo {	u32	deviceType;		// See DeviceType enum for values};    struct HvCallPci_BusUnitInfo {	u32	sizeReturned;		// length of data returned	u32	deviceType;		// see DeviceType enum for values};struct HvCallPci_BridgeInfo {	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 };    //  Maximum BusUnitInfo buffer size.  Provided for clients so they can allocate//  a buffer big enough for any type of bus unit.  Increase as needed.enum {HvCallPci_MaxBusUnitInfoSize = 128};struct HvCallPci_BarParms {	u64		vaddr;	u64		raddr;	u64		size;	u64		protectStart;	u64		protectEnd;	u64		relocationOffset;	u64		pciAddress;			u64		reserved[3];};					enum HvCallPci_VpdType {	HvCallPci_BusVpd		= 1,	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_configLoad8(u16 busNumber, u8 subBusNumber,					      u8 deviceId, u32 offset,					      u8 *value){	struct HvCallPci_DsaAddr dsa;	struct HvCallPci_LoadReturn retVal;	*((u64*)&dsa) = 0;					dsa.busNumber = busNumber;	dsa.subBusNumber = subBusNumber;	dsa.deviceId = deviceId;	HvCall3Ret16(HvCallPciConfigLoad8, &retVal, *(u64 *)&dsa, offset, 0);	// getPaca()->adjustHmtForNoOfSpinLocksHeld();	*value = retVal.value;	return retVal.rc;}//============================================================================static inline u64	HvCallPci_configLoad16(u16 busNumber, u8 subBusNumber,					      u8 deviceId, u32 offset,					      u16 *value){	struct HvCallPci_DsaAddr dsa;	struct HvCallPci_LoadReturn retVal;	*((u64*)&dsa) = 0;					dsa.busNumber = busNumber;	dsa.subBusNumber = subBusNumber;	dsa.deviceId = deviceId;	HvCall3Ret16(HvCallPciConfigLoad16, &retVal, *(u64 *)&dsa, offset, 0);	// getPaca()->adjustHmtForNoOfSpinLocksHeld();	*value = retVal.value;	return retVal.rc;}//============================================================================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);	// getPaca()->adjustHmtForNoOfSpinLocksHeld();	*value = retVal.value;	return retVal.rc;}//============================================================================static inline u64	HvCallPci_configStore8(u16 busNumber, u8 subBusNumber,					      u8 deviceId, u32 offset,					      u8  value){	struct HvCallPci_DsaAddr dsa;	u64 retVal;	*((u64*)&dsa) = 0;					dsa.busNumber = busNumber;	dsa.subBusNumber = subBusNumber;	dsa.deviceId = deviceId;	retVal = HvCall4(HvCallPciConfigStore8, *(u64 *)&dsa, offset, value, 0);	// getPaca()->adjustHmtForNoOfSpinLocksHeld();	return retVal;}//============================================================================static inline u64	HvCallPci_configStore16(u16 busNumber, u8 subBusNumber,					      u8 deviceId, u32 offset,					      u16  value){	struct HvCallPci_DsaAddr dsa;	u64 retVal;	*((u64*)&dsa) = 0;					dsa.busNumber = busNumber;	dsa.subBusNumber = subBusNumber;	dsa.deviceId = deviceId;	retVal = HvCall4(HvCallPciConfigStore16, *(u64 *)&dsa, offset, value, 0);	// getPaca()->adjustHmtForNoOfSpinLocksHeld();	return retVal;}//============================================================================static inline u64	HvCallPci_configStore32(u16 busNumber, u8 subBusNumber,					      u8 deviceId, u32 offset,					      u32  value){	struct HvCallPci_DsaAddr dsa;	u64 retVal;	*((u64*)&dsa) = 0;					dsa.busNumber = busNumber;	dsa.subBusNumber = subBusNumber;	dsa.deviceId = deviceId;	retVal = HvCall4(HvCallPciConfigStore32, *(u64 *)&dsa, offset, value, 0);	// getPaca()->adjustHmtForNoOfSpinLocksHeld();	return retVal;}//============================================================================static inline u64	HvCallPci_barLoad8(u16	busNumberParm,					   u8		subBusParm,					   u8		deviceIdParm,					   u8		barNumberParm,					   u64		offsetParm,					   u8*		valueParm){	struct HvCallPci_DsaAddr dsa;	struct HvCallPci_LoadReturn retVal;	*((u64*)&dsa) = 0;					dsa.busNumber = busNumberParm;	dsa.subBusNumber = subBusParm;	dsa.deviceId = deviceIdParm;	dsa.barNumber = barNumberParm;	HvCall3Ret16(HvCallPciBarLoad8, &retVal, *(u64 *)&dsa, offsetParm, 0);	// getPaca()->adjustHmtForNoOfSpinLocksHeld();	*valueParm = retVal.value;	return retVal.rc;}//============================================================================static inline u64	HvCallPci_barLoad16(u16	busNumberParm,					   u8		subBusParm,					   u8		deviceIdParm,					   u8		barNumberParm,					   u64		offsetParm,					   u16*		valueParm){	struct HvCallPci_DsaAddr dsa;	struct HvCallPci_LoadReturn retVal;	*((u64*)&dsa) = 0;					dsa.busNumber = busNumberParm;	dsa.subBusNumber = subBusParm;	dsa.deviceId = deviceIdParm;	dsa.barNumber = barNumberParm;	HvCall3Ret16(HvCallPciBarLoad16, &retVal, *(u64 *)&dsa, offsetParm, 0);	// getPaca()->adjustHmtForNoOfSpinLocksHeld();	*valueParm = retVal.value;	return retVal.rc;}//============================================================================static inline u64	HvCallPci_barLoad32(u16	busNumberParm,					   u8		subBusParm,					   u8		deviceIdParm,					   u8		barNumberParm,					   u64		offsetParm,					   u32*		valueParm){	struct HvCallPci_DsaAddr dsa;	struct HvCallPci_LoadReturn retVal;	*((u64*)&dsa) = 0;					dsa.busNumber = busNumberParm;	dsa.subBusNumber = subBusParm;	dsa.deviceId = deviceIdParm;	dsa.barNumber = barNumberParm;	HvCall3Ret16(HvCallPciBarLoad32, &retVal, *(u64 *)&dsa, offsetParm, 0);	// getPaca()->adjustHmtForNoOfSpinLocksHeld();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -