Platform Dependent hcall()s This appendix defines the set of hypervisor calls (hcall()s) that are platform dependent. The existence and/or implementation of the hcall() can vary between firmware releases and between hardware platforms.
hcall()s Supported by Firmware Release & Hardware Platform is a list of platform specific hcall()s, which will be described in this chapter. Platform Dependent hcall()s Supported by Release and Hardware Platform Function Name/Section Hypervisor Call Function Token Firmware Releases Supported Hardware Platform Supported Reserved 0xF000-0xF07C     H_GetPerformanceCounterInfo / 0xF080 eFW 3.5 and later Power 6 and later
Supported hcall()s
H_GetPerformanceCounterInfo (0xF080) This call returns information about the performance of selectable performance counters maintained by the hardware or from data collected by the Hypervisor. Syntax: Parameters: size – size of the getPerformanceCounterInfoParms getPerformanceCounterInfoParms – parameter list indicating which performance counter information to retrieve. Semantics: Validate the getPerformanceInfoParms is accessible, else H_Privilege. Validate the size and contents of getPerformanceCounterInfoParms, else H_Parameter. Validate information is available for the firmware level and platform, else H_Not_Available. Validate partition is permitted to retrieve performance information, else H_Authority. Copy requested performance counters into getPerformanceInfoParms and return H_Success. Performance_Counter_Info_Parms struct Member Name Member Type IN/OUT Description Requested_Information uint_32 INPUT See starting_index int_32 BOTH At input, the partition id of the first processor/partition to retrieve performance metrics. If -1 is specified for this parameter, only information for the current processor/partition is returned. At output, the actual first processor/partition id that was found. returned_values uint_32 OUTPUT Number of lists of counters returned reserved uint_32 N/A Alignment reserved uint_64[2] N/A Alignment counter_value perf_data BOTH Array of counters values
The possible values for Requested_Information are as shown in . Performance Counter Info Requested_Information Values Name Value Description Dispatch_PURR_by_processor 0x0000 0010 The value for the counter_value is a list of values per physical processor as follows: uint64 processor time (in PURR cycles) that the processor was running work on behalf of partitions since the boot of the CEC uint32 hardware processor id uint16 owning partition id (0xFFFF is shared or unowned) uint8 processor state (0x01-Not Installed, 0x02-Guarded Off, 0x03-Unlicensed, 0x04-Shared, 0x05-Borrowed, 0x06-Dedicated) uint8[1] reserved uint32 hardware chip id (a value of -1 will be returned for Not Installed processors) uint32 hardware module id uint32 primary affinity domain uint32 secondary affinity domain uint32 processor version (a value of -1 will be returned for Not Installed processors) uint16 logical processor index uint8[10] reserved Entitled_capped _uncapped_donated _idle_PURR _by_partition 0x0000 0020 The value for the counter_value is a list of uint64 values as follows: Partition id Hypervisor collected PURR cycles that the partition was entitled to consume since the boot of the CEC (or partition creation). Hypervisor collected PURR cycles that the partition consumed as capped cycles since boot of the CEC (or partition creation). For a dedicated partition, all cycles consumed will be reported as capped cycles. For shared, these are the capped (entitled) cycles consumed by the partition. Hypervisor collected PURR cycles that the partition consumed as uncapped shared partition cycles since boot of the CEC (or partition creation). Hypervisor collected PURR cycles that were donated from a dedicated partition to uncapped partitions since boot of the CEC (or partition creation). Partition collected PURR cycles that the partition considers as idle cycles. These cycles can be subtracted from the total cycles consumed to calculate the partition’s view of utilization. Note that not all operating system versions will report this value. Run_instructions _run_cycles _by_partition 0x0000 0030 The value for the counter_value is a list of uint64 values as follows: Partition id Hypervisor collected instructions completed while the run latch is set since boot of the CEC (or partition creation). Note that this value will be zero on processors versions that do not provide the ability to collect this information. Hypervisor collected cycles while the run latch is set since boot of the CEC (or partition creation). Note that this value will be zero on processors versions that do not provide the ability to collect this information. System_performance _capabilities 0x00000040 The value for the counter_value is a list of values for the requesting partition as follows: uint8 Is partition allowed to get performance data for other partitions (boolean). uint8[15] Reserved Note: This request can only be issued by a partition to obtain data about itself (i.e. starting_index must always be -1) H_NOT_AVAILABLE will be returned otherwise. Processor_bus_utilization_ABC _links 0x00000050 The value for the counter_value is a list of values per physical chip as follows: uint32 hardware chip id uint32[3] RESERVED uint64 idle cycles for A link uint64 time value (in cycles) data for A link was collected uint64 idle cycles for B link uint64 time value (in cycles) data for B link was collected uint64 idle cycles for C link uint64 time value (in cycles) data for C link was collected Processor_bus_utilization_WXYZ _links 0x00000060 The value for the counter_value is a list of values per physical chip as follows: uint32 hardware chip id uint32[3] RESERVED uint64 idle cycles for W link uint64 time value (in cycles) data for W link was collected uint64 idle cycles for X link uint64 time value (in cycles) data for X link was collected uint64 idle cycles for Y link uint64 time value (in cycles) data for Y link was collected uint64 idle cycles for Z link uint64 time value (in cycles) data for Z link was collected Set MMCRH (LAB ONLY) 0x8000 1000 At input, counter_value is a single value with what to set the Performance Monitor Mode Control Register H to: uint64 value to set MMCRH to in all processors There will be no output for this function other than errors. Note 1: A passed value of (-1) will mean that collection of these values should be disabled. Note 2: Whenever this value is changed, the programmable counters (HPMC1 & HPMC2) will be reset in the next collection cycle. Retrieve HPMCx (LAB ONLY) 0x8000 2000 The value for the counter_value is a list of values per physical processor as follows: uint32 hardware processor id uint32 reserved uint64 current value of MMCRH for this processor uint64 elapsed timebase value in cycles since current MMCRH was set uint64 value for HPMC1 since current MMCRH was set uint64 value for HPMC2 since current MMCRH was set uint64 value for HPMC3 since current MMCRH was set uint64 current value for HPMC3 uint64 value for HPMC4 since current MMCRH was set uint64 current value for HPMC4