Platform Dependent hcall()s
This chapter 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