From ba267626288eb01194c3b57c5d5e3262f3cf8289 Mon Sep 17 00:00:00 2001 From: Jeff Scheel Date: Tue, 15 Aug 2017 15:40:34 -0500 Subject: [PATCH] Initial repo priming from IBM Internal tree. Signed-off-by: Jeff Scheel --- .gitignore | 2 + DeviceTree/app_bibliography.xml | 284 + DeviceTree/app_glossary.xml | 1290 + DeviceTree/bk_main.xml | 109 + DeviceTree/ch_devtree_pa.xml | 4376 +++ DeviceTree/ch_devtree_system.xml | 10452 +++++++ DeviceTree/ch_devtree_terms.xml | 330 + DeviceTree/ch_introduction.xml | 97 + DeviceTree/figures/PAPR-60.gif | Bin 0 -> 36512 bytes DeviceTree/figures/PAPR-61.gif | Bin 0 -> 7248 bytes DeviceTree/figures/PAPR-62.gif | Bin 0 -> 24619 bytes DeviceTree/figures/PAPR-64.gif | Bin 0 -> 16381 bytes DeviceTree/pom.xml | 148 + Error Handling/app_bibliography.xml | 284 + Error Handling/app_fault_v_errorlog.xml | 891 + Error Handling/app_glossary.xml | 1290 + Error Handling/bk_main.xml | 111 + Error Handling/ch_error_codes.xml | 1280 + Error Handling/ch_notifications.xml | 30 + Error Handling/ch_rtas_error_classes.xml | 321 + Error Handling/ch_rtas_error_reporting.xml | 36 + Error Handling/ch_service_indicators.xml | 4168 +++ Error Handling/figures/PAPR-34.gif | Bin 0 -> 51484 bytes Error Handling/figures/PAPR-36.gif | Bin 0 -> 47609 bytes Error Handling/figures/PAPR-37.gif | Bin 0 -> 37294 bytes Error Handling/figures/PAPR-38.gif | Bin 0 -> 1140 bytes Error Handling/figures/PAPR-39.gif | Bin 0 -> 1012 bytes Error Handling/figures/PAPR-40.gif | Bin 0 -> 1131 bytes Error Handling/figures/PAPR-41.gif | Bin 0 -> 47805 bytes Error Handling/figures/PAPR-42.gif | Bin 0 -> 11011 bytes Error Handling/figures/PAPR-43.gif | Bin 0 -> 24230 bytes Error Handling/figures/PAPR-44.gif | Bin 0 -> 46575 bytes Error Handling/figures/PAPR-45.gif | Bin 0 -> 28271 bytes Error Handling/figures/PAPR-46.gif | Bin 0 -> 14637 bytes Error Handling/figures/PAPR-47.gif | Bin 0 -> 14863 bytes Error Handling/figures/PAPR-48.gif | Bin 0 -> 56553 bytes Error Handling/figures/PAPR-49.gif | Bin 0 -> 11130 bytes Error Handling/figures/PAPR-50.gif | Bin 0 -> 13535 bytes Error Handling/figures/PAPR-51.gif | Bin 0 -> 10035 bytes Error Handling/figures/PAPR-52.gif | Bin 0 -> 11005 bytes Error Handling/figures/PAPR-53.gif | Bin 0 -> 11327 bytes Error Handling/figures/PAPR-54.gif | Bin 0 -> 9926 bytes Error Handling/figures/PAPR-73.gif | Bin 0 -> 36224 bytes Error Handling/pom.xml | 148 + Error Handling/sec_error_introduction.xml | 85 + Error Handling/sec_error_reporting.xml | 87 + Error Handling/sec_rtas_env_epow.xml | 336 + Error Handling/sec_rtas_error_indications.xml | 711 + .../sec_rtas_error_reporting_introduction.xml | 40 + ...ec_rtas_error_reporting_location_codes.xml | 37 + ...sec_rtas_error_reporting_return_format.xml | 4055 +++ Error Handling/sec_rtas_hot_plug.xml | 46 + LICENSE | 176 + Platform/app_bibliography.xml | 284 + Platform/app_eeh_handling.xml | 284 + Platform/app_glossary.xml | 1289 + Platform/bk_main.xml | 121 + Platform/ch_address_map.xml | 1132 + Platform/ch_interrupt_controller.xml | 726 + Platform/ch_io_devices.xml | 989 + Platform/ch_io_topology.xml | 2610 ++ Platform/ch_nonvolatile_memory.xml | 740 + Platform/ch_numa.xml | 524 + Platform/ch_platform_intro.xml | 148 + Platform/ch_processors_memory.xml | 813 + Platform/ch_product_topology.xml | 4638 +++ Platform/ch_smp.xml | 373 + Platform/ch_system_reqs.xml | 2624 ++ Platform/figures/PAPR-10.gif | Bin 0 -> 67958 bytes Platform/figures/PAPR-11.gif | Bin 0 -> 136610 bytes Platform/figures/PAPR-12.gif | Bin 0 -> 66894 bytes Platform/figures/PAPR-14.gif | Bin 0 -> 65445 bytes Platform/figures/PAPR-15.gif | Bin 0 -> 28606 bytes Platform/figures/PAPR-3.gif | Bin 0 -> 15002 bytes Platform/figures/PAPR-32.gif | Bin 0 -> 31377 bytes Platform/figures/PAPR-4.gif | Bin 0 -> 17584 bytes Platform/figures/PAPR-6.gif | Bin 0 -> 30924 bytes Platform/figures/PAPR-7.gif | Bin 0 -> 31122 bytes Platform/figures/PAPR-8.gif | Bin 0 -> 57083 bytes Platform/pom.xml | 148 + README.md | 105 + RTAS/app_bibliography.xml | 284 + RTAS/app_glossary.xml | 1290 + RTAS/bk_main.xml | 111 + RTAS/ch_cmo_def.xml | 173 + RTAS/ch_error_codes.xml | 1272 + RTAS/ch_firmware_dump.xml | 4072 +++ RTAS/ch_rtas_call_defn.xml | 24715 ++++++++++++++++ RTAS/ch_rtas_environment.xml | 2560 ++ RTAS/ch_rtas_introduction.xml | 76 + RTAS/pom.xml | 148 + RTAS/sec_rtas_get_indices.xml | 5952 ++++ Virtualization/app_bibliography.xml | 284 + Virtualization/app_glossary.xml | 1282 + Virtualization/bk_main.xml | 117 + Virtualization/ch_dynamic_reconfig.xml | 4314 +++ Virtualization/ch_lpar_option.xml | 18584 ++++++++++++ Virtualization/ch_platform_hcalls.xml | 617 + Virtualization/ch_splpar.xml | 535 + Virtualization/ch_virtual_io.xml | 14520 +++++++++ Virtualization/ch_virtual_nic.xml | 9890 +++++++ Virtualization/ch_virtual_scsi.xml | 1198 + Virtualization/ch_virtual_tty.xml | 1041 + Virtualization/ch_vmc_comm.xml | 1301 + Virtualization/figures/PAPR-18.gif | Bin 0 -> 14453 bytes Virtualization/figures/PAPR-19.gif | Bin 0 -> 58309 bytes Virtualization/figures/PAPR-20.gif | Bin 0 -> 38525 bytes Virtualization/figures/PAPR-22.gif | Bin 0 -> 2926 bytes Virtualization/figures/PAPR-23.gif | Bin 0 -> 3919 bytes Virtualization/figures/PAPR-24.gif | Bin 0 -> 7159 bytes Virtualization/figures/PAPR-25.gif | Bin 0 -> 2908 bytes Virtualization/figures/PAPR-26.gif | Bin 0 -> 3934 bytes Virtualization/figures/PAPR-27.gif | Bin 0 -> 3890 bytes Virtualization/figures/PAPR-28.gif | Bin 0 -> 3708 bytes Virtualization/figures/PAPR-29.gif | Bin 0 -> 13741 bytes Virtualization/figures/PAPR-29_t0_31.gif | Bin 0 -> 30147 bytes Virtualization/figures/PAPR-30.gif | Bin 0 -> 8868 bytes Virtualization/figures/PAPR-31.gif | Bin 0 -> 9374 bytes Virtualization/figures/PAPR-33.gif | Bin 0 -> 26293 bytes Virtualization/figures/PAPR-55.gif | Bin 0 -> 40317 bytes Virtualization/figures/PAPR-58.gif | Bin 0 -> 51990 bytes Virtualization/figures/PAPR-59.gif | Bin 0 -> 38251 bytes Virtualization/figures/PAPR-66.gif | Bin 0 -> 19119 bytes Virtualization/figures/PAPR-68.gif | Bin 0 -> 13300 bytes Virtualization/figures/PAPR-70.gif | Bin 0 -> 10843 bytes Virtualization/figures/PAPR-71.gif | Bin 0 -> 6968 bytes Virtualization/figures/PAPR-72.gif | Bin 0 -> 5471 bytes Virtualization/pom.xml | 148 + common/app_EOD.xml | 27 + common/ch_LoPAR_preface.xml | 31 + common/sec_LoPAR_audience.xml | 48 + common/sec_LoPAR_conventions.xml | 182 + common/sec_LoPAR_goals.xml | 89 + common/sec_LoPAR_reading.xml | 52 + pom.xml | 27 + 135 files changed, 143708 insertions(+) create mode 100644 .gitignore create mode 100644 DeviceTree/app_bibliography.xml create mode 100644 DeviceTree/app_glossary.xml create mode 100644 DeviceTree/bk_main.xml create mode 100644 DeviceTree/ch_devtree_pa.xml create mode 100644 DeviceTree/ch_devtree_system.xml create mode 100644 DeviceTree/ch_devtree_terms.xml create mode 100644 DeviceTree/ch_introduction.xml create mode 100644 DeviceTree/figures/PAPR-60.gif create mode 100644 DeviceTree/figures/PAPR-61.gif create mode 100644 DeviceTree/figures/PAPR-62.gif create mode 100644 DeviceTree/figures/PAPR-64.gif create mode 100644 DeviceTree/pom.xml create mode 100644 Error Handling/app_bibliography.xml create mode 100644 Error Handling/app_fault_v_errorlog.xml create mode 100644 Error Handling/app_glossary.xml create mode 100644 Error Handling/bk_main.xml create mode 100644 Error Handling/ch_error_codes.xml create mode 100644 Error Handling/ch_notifications.xml create mode 100644 Error Handling/ch_rtas_error_classes.xml create mode 100644 Error Handling/ch_rtas_error_reporting.xml create mode 100644 Error Handling/ch_service_indicators.xml create mode 100644 Error Handling/figures/PAPR-34.gif create mode 100644 Error Handling/figures/PAPR-36.gif create mode 100644 Error Handling/figures/PAPR-37.gif create mode 100644 Error Handling/figures/PAPR-38.gif create mode 100644 Error Handling/figures/PAPR-39.gif create mode 100644 Error Handling/figures/PAPR-40.gif create mode 100644 Error Handling/figures/PAPR-41.gif create mode 100644 Error Handling/figures/PAPR-42.gif create mode 100644 Error Handling/figures/PAPR-43.gif create mode 100644 Error Handling/figures/PAPR-44.gif create mode 100644 Error Handling/figures/PAPR-45.gif create mode 100644 Error Handling/figures/PAPR-46.gif create mode 100644 Error Handling/figures/PAPR-47.gif create mode 100644 Error Handling/figures/PAPR-48.gif create mode 100644 Error Handling/figures/PAPR-49.gif create mode 100644 Error Handling/figures/PAPR-50.gif create mode 100644 Error Handling/figures/PAPR-51.gif create mode 100644 Error Handling/figures/PAPR-52.gif create mode 100644 Error Handling/figures/PAPR-53.gif create mode 100644 Error Handling/figures/PAPR-54.gif create mode 100644 Error Handling/figures/PAPR-73.gif create mode 100644 Error Handling/pom.xml create mode 100644 Error Handling/sec_error_introduction.xml create mode 100644 Error Handling/sec_error_reporting.xml create mode 100644 Error Handling/sec_rtas_env_epow.xml create mode 100644 Error Handling/sec_rtas_error_indications.xml create mode 100644 Error Handling/sec_rtas_error_reporting_introduction.xml create mode 100644 Error Handling/sec_rtas_error_reporting_location_codes.xml create mode 100644 Error Handling/sec_rtas_error_reporting_return_format.xml create mode 100644 Error Handling/sec_rtas_hot_plug.xml create mode 100644 LICENSE create mode 100644 Platform/app_bibliography.xml create mode 100644 Platform/app_eeh_handling.xml create mode 100644 Platform/app_glossary.xml create mode 100644 Platform/bk_main.xml create mode 100644 Platform/ch_address_map.xml create mode 100644 Platform/ch_interrupt_controller.xml create mode 100644 Platform/ch_io_devices.xml create mode 100644 Platform/ch_io_topology.xml create mode 100644 Platform/ch_nonvolatile_memory.xml create mode 100644 Platform/ch_numa.xml create mode 100644 Platform/ch_platform_intro.xml create mode 100644 Platform/ch_processors_memory.xml create mode 100644 Platform/ch_product_topology.xml create mode 100644 Platform/ch_smp.xml create mode 100644 Platform/ch_system_reqs.xml create mode 100644 Platform/figures/PAPR-10.gif create mode 100644 Platform/figures/PAPR-11.gif create mode 100644 Platform/figures/PAPR-12.gif create mode 100644 Platform/figures/PAPR-14.gif create mode 100644 Platform/figures/PAPR-15.gif create mode 100644 Platform/figures/PAPR-3.gif create mode 100644 Platform/figures/PAPR-32.gif create mode 100644 Platform/figures/PAPR-4.gif create mode 100644 Platform/figures/PAPR-6.gif create mode 100644 Platform/figures/PAPR-7.gif create mode 100644 Platform/figures/PAPR-8.gif create mode 100644 Platform/pom.xml create mode 100644 README.md create mode 100644 RTAS/app_bibliography.xml create mode 100644 RTAS/app_glossary.xml create mode 100644 RTAS/bk_main.xml create mode 100644 RTAS/ch_cmo_def.xml create mode 100644 RTAS/ch_error_codes.xml create mode 100644 RTAS/ch_firmware_dump.xml create mode 100644 RTAS/ch_rtas_call_defn.xml create mode 100644 RTAS/ch_rtas_environment.xml create mode 100644 RTAS/ch_rtas_introduction.xml create mode 100644 RTAS/pom.xml create mode 100644 RTAS/sec_rtas_get_indices.xml create mode 100644 Virtualization/app_bibliography.xml create mode 100644 Virtualization/app_glossary.xml create mode 100644 Virtualization/bk_main.xml create mode 100644 Virtualization/ch_dynamic_reconfig.xml create mode 100644 Virtualization/ch_lpar_option.xml create mode 100644 Virtualization/ch_platform_hcalls.xml create mode 100644 Virtualization/ch_splpar.xml create mode 100644 Virtualization/ch_virtual_io.xml create mode 100644 Virtualization/ch_virtual_nic.xml create mode 100644 Virtualization/ch_virtual_scsi.xml create mode 100644 Virtualization/ch_virtual_tty.xml create mode 100644 Virtualization/ch_vmc_comm.xml create mode 100644 Virtualization/figures/PAPR-18.gif create mode 100644 Virtualization/figures/PAPR-19.gif create mode 100644 Virtualization/figures/PAPR-20.gif create mode 100644 Virtualization/figures/PAPR-22.gif create mode 100644 Virtualization/figures/PAPR-23.gif create mode 100644 Virtualization/figures/PAPR-24.gif create mode 100644 Virtualization/figures/PAPR-25.gif create mode 100644 Virtualization/figures/PAPR-26.gif create mode 100644 Virtualization/figures/PAPR-27.gif create mode 100644 Virtualization/figures/PAPR-28.gif create mode 100644 Virtualization/figures/PAPR-29.gif create mode 100644 Virtualization/figures/PAPR-29_t0_31.gif create mode 100644 Virtualization/figures/PAPR-30.gif create mode 100644 Virtualization/figures/PAPR-31.gif create mode 100644 Virtualization/figures/PAPR-33.gif create mode 100644 Virtualization/figures/PAPR-55.gif create mode 100644 Virtualization/figures/PAPR-58.gif create mode 100644 Virtualization/figures/PAPR-59.gif create mode 100644 Virtualization/figures/PAPR-66.gif create mode 100644 Virtualization/figures/PAPR-68.gif create mode 100644 Virtualization/figures/PAPR-70.gif create mode 100644 Virtualization/figures/PAPR-71.gif create mode 100644 Virtualization/figures/PAPR-72.gif create mode 100644 Virtualization/pom.xml create mode 100644 common/app_EOD.xml create mode 100644 common/ch_LoPAR_preface.xml create mode 100644 common/sec_LoPAR_audience.xml create mode 100644 common/sec_LoPAR_conventions.xml create mode 100644 common/sec_LoPAR_goals.xml create mode 100644 common/sec_LoPAR_reading.xml create mode 100644 pom.xml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..489e8f3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*~ +*target* diff --git a/DeviceTree/app_bibliography.xml b/DeviceTree/app_bibliography.xml new file mode 100644 index 0000000..bd1412b --- /dev/null +++ b/DeviceTree/app_bibliography.xml @@ -0,0 +1,284 @@ + + + + + Bibliography + This section lists documents which were referenced in this specification or which provide + additional information, and some useful information for obtaining these documents. Referenced + documents are listed below. When any of the following standards are superseded by an approved + revision, the revision shall apply. + + + + + + Linux on Power Architecture Reference: Platform and Device Tree + + + + + + + Linux on Power Architecture Reference: Error Recovery and Logging + + + + + Linux on Power Architecture Reference: Virtualization + + + + + Linux on Power Architecture Reference: Runtime Abstraction Services (RTAS) + + + + + Power ISA + + + + + IEEE 1275, IEEE Standard for Boot (Initialization Configuration) Firmware: + Core Requirements and Practices + IEEE part number DS02683, ISBN 1-55937-426-8 + + + + + Core Errata, IEEE P1275.7/D4 + + + + + Open Firmware Recommended Practice:OBP-TFTP + Extension + + + + + Open Firmware Recommended Practice: Device + Support Extensions + + + + + PCI Bus binding to: IEEE Std 1275-1994, Standard + for Boot (Initialization, Configuration) Firmware + + + + + Open Firmware: Recommended Practice - Interrupt + Mapping + + + + + Open Firmware: Recommended Practice - Forth Source + and FCode Image Support, Version 1.0 + + + + + Open Firmware: Recommended Practice - Interrupt + Mapping, Version 1.0 + + + + + Open Firmware: Recommended Practice - TFTP Booting + Extensions, Version 0.8 + + + + + Open Firmware: Recommended Practice - + Interposition, Version 0.2 + + + + + MS-DOS Programmer's Reference + Published by Microsoft + + + + + Peering Inside the PE: A Tour of the Win32 Portable + Executable File Format + Found in the March, 1994 issue of Microsoft Systems Journal + + + + + ISO-9660, Information processing -- Volume and + file structure of CD-ROM for information interchange + Published by International Organization for Standardization + + + + + System V Application Binary Interface, PowerPC + Processor Supplement + By Sunsoft + + + + + ISO Standard 8879:1986, Information Processing + -- Text and Office Systems -- Standard Generalized Markup Language (SGML) + + + + + IEEE 996, A Standard for an Extended Personal Computer + Back Plane Bus + + + + + PCI Local Bus Specification + All designers are responsible for assuring that they use the most current version of this document + at the time that they design conventional PCI related components or platforms. See the PCI SIG website + for the most current version of this document. + + + + + PCI-to-PCI Bridge Architecture Specification + All designers are responsible for assuring that they use the most current version of this document + at the time that they design conventional PCI related components or platforms. See the + PCI SIG website for the most current version of this document. + + + + + PCI Standard Hot-Plug Controller and Subsystem + Specification + + + + + PCI-X Protocol Addendum to the PCI Local Bus Specification + All designers are responsible for assuring that they use the most current version of this document at + the time that they design PCI-X related components or platforms. See the PCI SIG website for the most + current version of this document. + + + + + PCI Express Base Specification + All designers are responsible for assuring that they use the most current version of this document + at the time that they design PCI Express related components or platforms. See the PCI SIG website for + the most current version of this document. + + + + + PCI Express to PCI/PCI-X Bridge Specification + All designers are responsible for assuring that they use the most current version of this document at the + time that they design PCI Express related components or platforms. See the PCI SIG website for the most current + version of this document. + + + + + System Management BIOS (SMBIOS) Reference + Specification + + + + + (List Number Reserved for Compatibility) + + + + (List Number Reserved for Compatibility) + + + + (List Number Reserved for Compatibility) + + + + + IBM RS/6000® Division, Product Topology Data System, + Product Development Guide + Version 2.1 + + + + + Single Root I/O Virtualization and Sharing Specification + All designers are responsible for assuring that they use the most current version of this document at + the time that they design PCI Express SR-IOV related components or platforms. See the PCI SIG website + for the most current version of this document. + + + + + Multi-Root I/O Virtualization and Sharing Specification + All designers are responsible for assuring that they use the most current version of this document at the + time that they design PCI Express MR-IOV related components or platforms. See the PCI SIG website for the + most current version of this document. + + + + + + diff --git a/DeviceTree/app_glossary.xml b/DeviceTree/app_glossary.xml new file mode 100644 index 0000000..acd25d0 --- /dev/null +++ b/DeviceTree/app_glossary.xml @@ -0,0 +1,1290 @@ + + + + + Glossary + This glossary contains an alphabetical list of terms, phrases, and abbreviations used in this document. + + + + Term + Definition + + + + AC + Alternating current + + + + ACR + Architecture Change Request + + + + AD + Address Data line + + + + Adapter + A device which attaches a device to a bus or which converts one + bus to another; for example, an I/O Adapter (IOA), a PCI Host Bridge (PHB), + or a NUMA fabric attachment device. + + + + + addr + Address + + + + Architecture + The hardware/software interface definition or software module to + software module interface definition. + + + + ASCII + American National Standards Code for Information + Interchange + + + + ASR + Address Space Register + + + + BAT + Block Address Translation + + + + BE + Big-Endian or Branch Trace Enable bit in the + MSR (MSRBE) + + + + BIO + Bottom of Peripheral Input/Output Space + + + + BIOS + Basic Input/Output system + + + + BIST + Built in Self Test + + + + Boundedly undefined + Describes some addresses and registers which when referenced provide + one of a small set of predefined results. + + + + BPA + Bulk Power Assembly. Refers to components used for power distribution + from a central point in the rack. + + + + BPM + Bottom of Peripheral Memory + + + + BSCA + Bottom of System Control Area + + + + BSM + Bottom of System Memory + + + + BUID + Bus Unit Identifier. The high-order part of an interrupt source number + which is used for hardware routing purposes by the platform. + + + + CCIN + Custom Card Identification Number + + + + CD-ROM + Compact Disk Read-Only Memory + + + + CIS + Client Interface Service + + + + CMO + Cooperative Memory Over-commitment option. See + for more information. + + + + + + CMOS + Complimentary Metal Oxide Semiconductor + + + + Conventional PCI + Behavior or features that conform to . + + + + CPU + Central Processing Unit + + + + CR + Condition Register + + + + CTR + Count Register + + + + DABR + Data Address Breakpoint Register + + + + DAR + Data Address Register + + + + DASD + Direct Access Storage Device (a synonym for “hard disk”) + + + + DBAT + Data Block Address Translation + + + + DC + Direct current + + + + DEC + Decrementer + + + + DIMM + Dual In-line Memory Module + + + + DMA + Direct Memory Access + + + + DMA Read + A data transfer from System Memory to I/O. A DMA Read Request + is the inbound operation and the DMA Read Reply (or Read Completion) is the + outbound data coming back from a DMA Read Request. + + + + DMA Write + A data transfer to System Memory from I/O or a Message Signalled Interrupt (MSI) DMA Write. This is an inbound operation. + + + + DOS + Disk OS + + + + DR + Data Relocate bit in MSR (MSRDR) + + + + DRA + Deviation Risk Assessment + + + + DRAM + Dynamic Random Access Memory + + + + DRC + Delayed Read Completion. A transaction that has completed + on the destination bus and is now moving toward the originating bus to complete. + DR Connector. + + + + DR entity + An entity that can participate in DR operations. That is, an entity + that can be added or removed from the platform while the platform power is on and the + system remains operational. + + + + DRR + Delayed Read Request. A transaction that must complete on the destination bus before completing on the originating bus. + + + + DSISR + Data Storage Interrupt Status Register + + + + DWR + Delayed Write Request. A transaction that must complete on the destination bus before completing on the originating bus. + + + + EA + Effective Address + + + + EAR + External Access Register + + + + ECC + Error Checking and Correction + + + + EE + External interrupt Enable bit in the MSR (MSREE) + + + + EEH + Enhance I/O Error Handling + + + + EEPROM + Electrically Erasable Programmable Read Only Memory + + + + EPOW + Environment and Power Warning + + + + + Error Log indicator An amber indicator that indicates that the user needs to + look at the error log or problem determination procedures, in order to determine the cause. + Previously called System Information (Attention). + + + + FCode + A computer programming language defined by the OF standard which is semantically + similar to the Forth programming language, but is encoded as a sequence of binary byte codes + representing a defined set of Forth words. + + + + FE0 + Floating-point Exception mode 0 bit in the MSR (MSRFE0) + + + + FE1 + Floating-point Exception mode 1bit in the MSR (MSRFE1) + + + + FIR + Fault Isolation Registers + + + + FLR + Function Level Reset (see PCI Express documentation). An optional reset for PCI Express + functions that allows resetting a single function of a multi-function IOA. + + + + FP + Floating-Point available bit in the MSR (MSRFP) + + + + FPSCR + Floating-Point Status And Control Register + + + + FRU + Field Replaceable Unit + + + + FSM + Finite State Machine + + + + GB + Gigabytes - as used in this document it is 2 raised to the power of 30 + + + + HB + Host Bridge + + + + HMC + Hardware Management Console - used generically to refer to the system + component that performs platform administration function where ever physically located. + The HMC is outside of this architecture and may be implemented in multiple ways. + Examples include: a special HMC applications in another system, an external appliance, + or in an LPAR partition using the Virtual Management Channel (VMC) interface to the + hypervisor. + + + + Hz + Hertz + + + + IBAT + Instruction block address translation + + + + ID + Identification + + + + IDE + Integrated Device Electronics + + + + IDU + Interrupt Delivery Unit + + + + IEEE + Institute of Electrical and Electronics Engineers + + + + I2C + Inter Integrated-circuit Communications + + + + I/O + nput/Output + + + + I/O bus master + Any entity other than a processor, cache, + memory controller, or host bridge which supplies both address and data in + write transactions or supplies the address and is the sink for the data in + read transactions. + + + + I/O device + Generally refers to any entity that is connected + to an IOA (usually through a cable), but in some cases may refer to the IOA + itself (that is, a device in the device tree that happens to be used for I/O + operations). + + + + I/O Drawer + An enclosure in a rack that holds at least one PHB and at + least one IOA. + + + + ILE + Interrupt Little-Endian bit in MSR (MSRILE) + + + + Instr + Instruction + + + + Interrupt Number + See Interrupt Vector below. + + + + Interrupt Vector + The identifier associated with a specific interrupt source. + The identifier’s value is loaded into the source’s Interrupt Vector Register and + is read from the Interrupt Delivery Unit’s Interrupt Acknowledge Register. + + + + IOA + I/O Adapter. A device which attaches to a physical bus which is capable + of supporting I/O (a physical IOA) or logical bus (a virtual IOA). The term “IOA” + without the usage of the qualifier “physical” or “virtual” will be + used to designate a physical IOA. Virtual IOAs are defined further in + + . + In PCI terms, an IOA may be defined by a unique combination of its assigned + bus number and device number, but not necessarily including its function number. + That is, an IOA may be a single or multi-function device, unless otherwise specified by + the context of the text. In the context of a PCIe I/O Virtualized (IOV) device (not to be + confused with a virtual IOA), an IOA is a single or multiple function device (for example, a + PCIe Virtual Function (VF) or multiple VFs). An IOA function may or may not have its own set of + resources, that is may or may not be in its own Partitionable Endpoint (PE) domain + (see also + + ). + + + + + IOA function + That part of an IOA that deals with a specific part of the + IOA as defined by the configuration space “Function” part of Bus/Device/Function. + For single-function IOAs, the IOA Function and the IOA are synonymous. + + + + IP + Interrupt Prefix bit in MSR (MSRIP) + + + + IPI + Interprocessor Interrupt + + + + IR + Instruction Relocate bit in MSR register (MSRIR) or infrared + + + + ISF + Interrupt 64-bit processor mode bit in the MSR (MSRISF) + + + + ISO + International Standards Organization + + + + ISR + Interrupt Source Register + + + + ISU + Interrupt Source Unit + + + + KB + Kilobytes - as used in this document it is 2 raised to the power of 10 + + + + KHz + Kilo Hertz + + + + LAN + Local Area Network + + + + LCD + Liquid Crystal Display + + + + LE + Little-Endian bit in MSR (MSRLE) or Little-Endian + + + + LED + Light Emitting Diode + + + + LMB + Logical Memory Block. The Block of logical memory addresses associated with a dynamically + reconfigurable memory node. + + + + Load + A Load Request is the outbound (from the processor) operation + and the Load Reply is the inbound data coming back from a + Load Request. When it relates to I/O operations, this is an + MMIO Load . + + + + LR + Link Register + + + + LSb + Least Significant bit + + + + LSB + Least Significant Byte + + + + LSI + Level Sensitive Interrupt + + + + LUN + Logical Unit Number + + + + L1 + Primary cache + + + + L2 + Secondary cache + + + + MB + Megabytes - as used in this document it is 2 raised to the power of 20 + + + + ME + Machine check Enable + + + + MMIO + Memory Mapped I/O. This refers to the mapping of the address space required + by an I/O device for Load or Store operations into + the system’s address space. + + + + MES + Miscellaneous Equipment Specification + + + + MFM + Modified frequency modulation + + + + MHz + Mega Hertz + + + + MOD + Address modification bit in the MSR + (MSRMOD) + + + + MP + Multiprocessor + + + + MSb + Most Significant bit + + + + MSB + Most Significant Byte + + + + MSI + Message Signalled Interrupt + + + + MSR + Machine State Register + + + + MTT + Multi-TCE-Table option. See + + + . + + + + + N/A + Not Applicable + + + + Nibble + Refers to the first or last four bits in an 8 bit byte + + + + NUMA + Non-Uniform Memory Access + + + + NUMA fabric + Mechanism and method for connecting the multiple nodes of a NUMA system + + + + NVRAM + Nonvolatile Random Access Memory + + + + OF + Open Firmware + + + + OP + Operator + + + + OS + Operating System + + + + OUI + Organizationally Unique Identifier + + + + PA + Processor Architecture + + + + PAP + Privileged Access Password + + + + LoPAR + Used within the Linux on Power Architecture + Reference documents to denote: (1) the architectural requirements specified + by the Linux on Power Architecture Reference document, (2) the Linux on Power Architecture + Reference documents themself, and (3) as an adjective to qualify an entity as being + related to this architecture. + + + + Partitionable Endpoint + This refers to the I/O granule that may be treated as one for + purposes of assignment to an OS (for example, to an LPAR partition). May be an + I/O adapter (IOA), or groups of IOAs and bridges, or portions of IOAs. PE granularity + supported by the hardware may be finer than is supported by the firmware. Grouping + of multiple PEs into one DR entity may limit assignment of a the separate PEs to different + LPAR partitions. See also DR entity. + + + + PC + Personal Computer + + + + PCI + Peripheral Component Interconnect. An all-encompassing term referring to + conventional PCI, PCI-X, and PCI Express. + + + + PCI bus + A general term referring to either the PCI Local Bus, as + specified in and + for conventional PCI and PCI-X, or a PCI Express link, as specified in + for PCI Express. + + + + PCI Express + Behavior or features that conform to + . + + + + PCI link + A PCI Express link, as specified in . + + + + PCI-X + Behavior or features that conform to . + + + + PD + Presence Detect + + + + PE + When referring to the body of the LoPAR, this refers to a Partitionable + Endpoint. + + + + + + + PEM + Partition Energy Management option. See + + + . + + + + + Peripheral I/O Space + The range of real addresses which are assigned + to the I/O Space of a Host Bridge (HB) and which are sufficient to contain all of + the Load and Store address space requirements of all the devices in the I/O Space + of the I/O bus that is generated by the HB. A keyboard controller is an example of + a device which may require Peripheral I/O Space addresses. + + + + Peripheral Memory Space + The range of real addresses which are assigned to the Memory + Space of a Host Bridge (HB) and which are sufficient to contain all of the Load and + Store address space requirements of the devices in the Memory Space of the I/O bus + that is generated by the HB. The frame buffer of a graphics adapter is an example + of a device which may require Peripheral Memory Space addresses. + + + + Peripheral Space + Refers to the physical address space which may + be accessed by a processor, but which is controlled by a host bridge. At least one + peripheral space must be present and it is referred to by the suffix 0. A host bridge + will typically provide access to at least a memory space and possibly to an I/O + space. + + + + PHB + PCI Host Bridge + + + + PIC + Programmable Interrupt Controller + + + + PIR + Processor Identification Register + + + + Platform + Refers to the hardware plus firmware portion of a system composed of hardware, + firmware, and OS. + + + + Platform firmware + Refers to all firmware on a system including the software or firmware in a + support processor. + + + + Plug-in I/O card + A card which can be plugged into an I/O + connector in a platform and which contains one or more IOAs and potentially + one or more I/O bridges or switches. + + + + Plug-in Card + An entity that plugs into a physical slot. + + + + PMW + Posted memory write. A transaction that has complete on the + originating bus before completing on the destination bus + + + + PnP + Plug and Play + + + + POP + Power On Password + + + + POST + Power-On Self Test + + + + PR + Privileged bit in the MSR (MSRPR) + + + + Processor Architecture + Used throughout this document to + mean compliance with the requirements specified in + . + + + + Processor revision number + A 16-bit number that distinguishes between various releases + of a particular processor version, for example different engineering change + levels. + + + + PVN + Processor Version Number. Uniquely determines the particular + processor and PA version. + + + + PVR + Processor Version Register. A register in each processor + that identifies its type. The contents of the PVR include the processor + version number and processor revision number. + + + + RAID + Redundant Array of Independent Disks + + + + RAM + Random Access Memory + + + + RAS + Reliability, Availability, and Serviceability + + + + Real address + A real address results from doing address + translation on an effective address when address translation is enabled. + If address translation is not enabled, the real address is the same as the + effective address. An attempt to fetch from, load from, or store to a real + address that is not physically present in the machine may result in a + machine check interrupt. + + + + Reserved + The term “reserved” is used within this + document to refer to bits in registers or areas in the address space + which should not be referenced by software except as described in this + document. + + + + Reserved for firmware use + Refers to a given location or bit which may not be used by + software, but are used by firmware. + + + + Reserved for future use + Refers to areas of address space or bits in registers which may be + used by future versions of this architecture. + + + + RI + Recoverable interrupt bit in the MSR (MSRRI) + + + + RISC + Reduced Instruction Set Computing + + + + RMA + Real Mode Area. The first block of logical memory addresses + owned by a logical partition, containing the storage that may be accessed with + translate off. + + + + ROM + Read Only Memory + + + + Root Complex + A PCI Express root complex as specified in + . + + + + RPN + Real Page Number + + + + RTAS + Run-Time Abstraction Services + + + + RTC + Real Time Clock + + + + SAE + Log Service Action Event log + + + + SCC + Serial Communications Controller + + + + SCSI + Small Computer System Interface + + + + SE + Single-step trace enabled bit in the MSR + (MSRSE) + + + + Service Focal Point + The common point of control in the system for handling all + service actions + + + + Serviceable Event + Serviceable Events are platform, + global, regional and local error events that require a service action + and possibly a call home when the serviceable event must be handled by a + service representative or at least reported to the service provider. + Activation of the Error Log indicator notifies the customer of the event + and the event indicates to the customer that there must be some intervention + to rectify the problem. The intervention may be a service action that the + customer can perform or it may require a service provider. + + + + SES + Storage Enclosure Services (can also mean SCSI Enclosure + Services in relation to SCSI storage) + + + + SF + Processor 32-bit or 64-bit processor mode bit in the MSR + (MSRSF) + + + + SFP + Service Focal Point + + + + Shrink-wrap OS + A single version of an OS that runs on all + compliant platforms. + + + + Shrink-wrap Application + A single version of an application program + that runs on all compliant platforms with the applicable OS. + + + + SMP + Symmetric multiprocessor + + + + SMS + System Management Services + + + + Snarf + An industry colloquialism for cache-to-cache + transfer. A typical scenario is as follows: (1) cache miss from cache A, + (2) line found modified in cache B, (3) cache B performs castout of modified + line, and (4) cache A allocates the modified line as it is being written back + to memory. + + + + Snoop + The act of interrogating a cache for the presence of a + line, usually in response to another party on a shared bus attempting to + allocate that line. + + + + SPRG + Special Purpose Registers for General use + + + + SR + System Registers + + + + SRC + Service Reference Code + + + + SRN + Service Request Number + + + + Store + A Store Request is an + outbound (from the processor) operation. When it relates to I/O + operations, this is an MMIO Store. + + + + System + Refers to the collection of hardware, system firmware, + and OS software which comprise a computer model. + + + + System address space + The total range of addressability as established by the + processor implementation. + + + + System Control Area + Refers to a range of addresses which + contains the system ROM(s) and an unarchitected, reserved, platform-dependent + area used by firmware and Run-Time Abstraction services for control of the + platform. The ROM areas are defined by the OF properties in the + openprom and os-rom nodes + of the OF device tree. + + + + System Information (Attention) indicator + See Error Log indicator. + + + + System firmware + Refers to the collection of all firmware on a system + including OF, RTAS and any legacy firmware. + + + + System Memory + Refers to those areas of memory which form + a coherency domain with respect to the PA processor or processors that + execute application software on a system. + + + + System software + Refers to the combination of OS software, + device driver software, and any hardware abstraction software, but + excludes the application software. + + + + TB + Time Base + + + + TCE + Translation Control Entry + + + + TLB + Translation Look-aside Buffer + + + + TOD + Time Of Day + + + + TOSM + Top of system memory + + + + TPM + Top of Peripheral Memory + Trusted Platform Module + + + + tty + Teletypewriter or ASCII character driven + terminal device + + + + UI + User Interface + + + + USB + Universal Serial Bus + + + + v + Volt + + + + VGA + Video Graphics Array + + + + VMC + Virtual Management Channel + + + + VPD + Vital Product Data + + + + VPNH + Virtual Processor Home Node option. See + + + . + + + + + + + + + + + + + + diff --git a/DeviceTree/bk_main.xml b/DeviceTree/bk_main.xml new file mode 100644 index 0000000..8238c3f --- /dev/null +++ b/DeviceTree/bk_main.xml @@ -0,0 +1,109 @@ + + + + + + + Device Tree Bindings + Linux on Power Architecture Reference + + + + + System Software Work Group + + syssw-chair@openpowerfoundation.org + + OpenPOWER Foundation + + + + 2016 + OpenPOWER Foundation + + + Revision 2.0_pre1 + OpenPOWER + + + + + + Copyright details are filled in by the template. + + + + + + The purpose of this document is to provide firmware and software + architectural details associated with Device Tree Bindings on OpenPOWER Systems. + The base content for this document were contributed to the OpenPOWER Foundation in the + IBM Linux on Power Architecture Platform Reference (LoPAPR) Draft + document. It had numerous contributors inside IBM. + This document is a Standard Track, Work Group Specification work product owned by the + System Software Workgroup and handled in compliance with the requirements outlined in the + OpenPOWER Foundation Work Group (WG) Process document. It was + created using the Master Template Guide version 0.9.5. Comments, + questions, etc. can be submitted to the public mailing list for this document at + TBD. + + + + + + 2016-05-04 + + + + Revision 2.0_pre1 - initial conversion from IBM document. Extracted from + Linux on Power Architecture Platform Reference (LoPAPR) version 1.1 dated March 24, + 2016 -- Appendix B (LoPAPR Binding) and Appendix C (PA Processor Binding). + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/DeviceTree/ch_devtree_pa.xml b/DeviceTree/ch_devtree_pa.xml new file mode 100644 index 0000000..1cfe59c --- /dev/null +++ b/DeviceTree/ch_devtree_pa.xml @@ -0,0 +1,4376 @@ + + + + Processor Architecture Binding + +
+ Data Formats and Representations + + The cell size shall be 32 bits. Number ranges for + n, + u, and other cell-sized items are consistent with + 32-bit, two's-complement number representation. + The required alignment for items accessed with + a-addr addresses shall be four-byte aligned (i.e., a + multiple of 4). + Each operation involving a + qaddr address shall be performed with a single 32-bit + access to the addressed location; similarly, each + waddr access shall be performed with a single 16-bit + access. This implies four-byte alignment for + qaddrs and two-byte alignment for + waddrs. + +
+ +
+ Memory Management + +
+ PA Address Translation Model + + This section describes the model that is used for co-existence of + OF and client programs (i.e., OSs) with respect to address + translation. + The following overview of translation is provided so that the + issues relevant to OF for the PA can be discussed. Details that are not + relevant to OF issues (e.g., protection) are not described in detail; + , particularly Book III, should + be consulted for the details. For the scope of this section, terms will + be used as defined in + . + +
+ Translation requirements + + The default access mode of storage for load and stores (i.e., with + translation disabled -- referred to as + Real-Mode) within the PA assumes that caches are + enabled (in copy-back mode). In order to perform access to I/O device + registers, the access mode must be set to Cache-Inhibited, Guarded by + establishing a translation with this mode and enabling translation. Thus, + even though most of a client program and/or OF can run with translation + disabled, it must be enabled when performing I/O. + +
+ +
+ Segmented Address Translation + + + Note: The use of the term Virtual Address in this + section refers to the PA definition, while the rest of the document uses + the IEEE 1275 definition of virtual address. + + Note: The following description of PA address + translation is only one of several translation modes available and is + given for reference only. See + for complete details. + An Effective Address (EA) of a PA processor is 64(32) bits wide. + Each EA is translated into an 80(52)-bit Virtual Address (VA) by + prepending a 52(24)-bit Virtual Segment Id (VSID) to the 28 LSbs of the + effective address. On 32-bit implementations, the VSID is obtained by + indexing into a set of 16 Segment Registers (SRs) using the 4 MSbs of the + EA. On 64-bit implementations, the VSID is looked up in a Segment Table + using the 36 MSbs of the EA. Finally, the virtual address is translated + into a Real Address (RA). This is done by mapping the Virtual Page-Number + (VPN) (bits 0-67(39) of the VA) into a Real Page Number (RPN) and + concatenating this RPN with the byte offset (12 LSbs of the VA). The + mapping of VPN to RPN involves a hashing algorithm within a Hashed Page + Table (HTAB) to locate a Page Table Entry (PTE) that matches the VPN and + using that entry’s RPN component. If a valid entry is not found, a + Data Storage Interrupt (DSI) or Instruction Storage Interrupt (ISI) is + signalled, depending upon the source of the access. + This process is not performed for every translation! Processors + will typically have a Translation Look-aside Buffer (TLB) that caches the + most recent translations, thus exploiting the natural spatial locality of + programs to reduce the overhead of address translation. 64-bit + implementations may also implement a Segment Lookaside Buffer (SLB) for + the same reasons. On most PA processors, the TLB updates are performed in + hardware. However, the architecture allows an implementation to use a + software-assisted mechanism to perform the TLB updates. Such schemes must + not affect the architected state of the processor unless the translation + fails; i.e., the HTAB does not contain a valid PTE for the VA and a + DSI/ISI is signalled. + + Note: One unusual feature of this translation + mechanism is that valid translations might not be found in the HTAB; the + HTAB might be too small to contain all of the currently valid + translations. This introduces a level of complexity in the use of address + translation by OF, as discussed below. + +
+ +
+ Block Address Translation + + To further reduce the translation overhead for contiguous regions + of virtual and real address spaces (e.g., a frame buffer, or all of real + memory), the Block Address Translation (BAT) mechanism is also supported + by the PA. The Block Address Translation involves the use of BAT entries + that contain a Block Effective Page Index (BEPI), a Block Length (BL) + specifier and a Block Real Page Number (BRPN); the architecture defines 4 + BAT entries for data (DBAT entries) and 4 BAT entries for instruction + (IBAT entries) + The 601 has a single set of BAT entries that are shared by both + instruction and data accesses. + . BAT areas are restricted to a finite set of allowable + lengths, all of which are powers of 2. The smallest BAT area defined is + 128 KB (217 bytes). The largest BAT area defined is 256 MB (228 bytes). + The starting address of a BAT area in both EA space and RA space must be + a multiple of the area's length. + Block Address Translation is done my matching a number of upper + bits of the EA (specified by the BL value) against each of the BAT + entries. If a match is found, the corresponding BRPN bits replace the + matched bits in the EA to produce the RA. + Block Address Translation takes precedence over Segmented Address + Translation; i.e., if a mapping for a storage location is present in both + a BAT entry and a Page Table Entry or HTAB, the Block Address Translation + will be used. + + Note: Block Address Translation is a deprecated + translation mode of the PA. This description is retained here for + historical reference. See + for details on all supported + addressing mechanisms. + +
+
+ +
+ Open Firmware’s use of memory + + OF shall use the memory resources within the space indicated by the + + real-base, real-size, virt-base and + virt-size Configuration Variables defined for the PA. + As described in the applicable platform binding, a mechanism is defined + to enable OF to determine if its current configuration is consistent with + the requirements of the client. + If the client program has specific requirements for physical memory + or address space usage, it may establish requirements for OF's physical + and/or virtual address space usage by means of its program header. When + OF loads the client program, it inspects the program header, and if its + current usage of physical memory or virtual address space conflicts with + that specified in the program header, OF shall set the + real-base, + real-size, + virt-base, and + virt-size to the configuration variables as specified + in the header and restart itself. + Real-base, + real-size, + virt-base, and + virt-size may be specified as -1, in which case the + firmware is permitted to choose appropriate values for the variables + specified as -1. + If the values of the + real-size and/or + virt-size configuration variables do not provide + sufficient memory and/or virtual address space for the firmware's own + use, then the firmware shall not attempt to load a client program and the + condition should be reported to the user. The possibility of not being + able to comply with limitations on firmware's size should be tested as + the firmware is coming up in order to handle the possibility that a user + established an unworkable limitation on the size. Clients can minimize + this exposure by setting size to -1 and allowing OF to choose the + size. + A PA OF binding shall support two different addressing models, + depending upon the setting of the + real-mode? Configuration Variable. This variable + indicates the OF addressing mode that a client program expects; + false (0) indicates Virtual-Mode, + true (-1) indicates Real-Mode; the default value of + real-mode? is implementation dependent. + The management of + real-mode? is analogous to + little-endian?. OF determines its addressing mode + using the value of + real-mode?. If the current state of + real-mode? (and hence, the current state of OF) is + incorrect, it shall set + real-mode? appropriately and reset itself, possibly + by executing + reset-all. + Memory that cannot be allocated for general purpose use, for + example physical memory on LoPAR systems used for interrupt vectors and + implementation specific areas, shall not appear in the “ + available ” property of the + memory node. A Client Program that needs to use such + memory for its architected purpose must not claim that area prior to + use. + In the following two sections, some of conventions in Real-Mode and + Virtual-Mode address translations are described. Remaining sections + describe the assumptions that OF makes about the state and control of the + system in regard to OF’s use of system resources for three OF + interfaces (e.g. Device, User and Client interfaces). + +
+ Real-Mode + + In Real-Mode (when + real-mode? is + true), the use of address translations by OF and its + client are independent. Either they do not use translation, or their + translations are private; they do not share any translations. All + interfaces between the two must pass the real address of the data. Any + data structure shared by OF and its client that refers to + virt addresses in + , or this binding, must be real + addresses. + + Note: In particular, that the address of the Client + interface handler, that is passed to the client, has to be a real + address. + The Configuration Variables + real-base and + real-size should indicate the physical memory base + and size in which OF must locate itself. In Real-Mode, the Configuration + Variables + virt-base and + virt-size do not have meaning and should be set to + -1. + +
+ +
+ Virtual-Mode + + When + real-mode? is + false, OF shall configure itself to run in + Virtual-Mode. In Virtual-Mode, OF and its client + will share a single virtual address space. This binding provides + interfaces to allow OF and its client to ensure that this single virtual + address model can be maintained. + The Configuration Variables + virt-base and + virt-size should indicate the virtual address space + base address and size that OF should use. The Configuration Variables + real-base and + real-size should indicate the physical memory base + and size in which OF must locate itself. + +
+ +
+ Device Interface (Real-Mode) + + While OF is performing system initialization and probing functions, + it establishes and maintains its own translations. In particular, it + maintains its own Page Tables (and/or BAT entries) and handles any + DSI/ISI interrupts itself. + + Note: In Real-Mode, all translations will be + virt=real; the primary reason for translation is to + allow appropriate I/O accesses. + +
+ +
+ Device Interface (Virtual-Mode) + + OF will establish its own translation environment, handling DSI/ISI + interrupts as in the Real-Mode case. However, this environment will, in + general, contain translations in which virtual addresses do not equal + real addresses. The virtual address space used by OF must be compatible + with its client. + + Note: Since these virtual addresses will be used by + the Client and/or User Interfaces (e.g., for pointers to its code, + device-tree, etc.), their translations must be preserved until the client + OS decides that it no longer requires the services of OF. +
+ +
+ Client Interface (Real-Mode) + + In Real-Mode, addresses of client data are real.; the client must + ensure that all data areas referred to across the Client Interface are + valid real addresses. This may require moving data to meet any + requirements for contiguous storage areas (e.g., for + read/write calls). Translation shall be disabled + before the client interface call is made. + OF will typically have to maintain its translations in order to + perform I/O. Since the client may be running with translation enabled + (except for the Client interface call), OF shall save the state of all + relevant translation resources (e.g., SDR1, BATs) and restore them before + returning to the client. Likewise, it + may take over interrupts for its own use (e.g., for + doing “lazy” allocation of BATs); it shall preserve the state + of any interrupt vectors for its client. + Since the state of the address translation system is not + predictable to any interrupts, the client shall ensure that interrupts + are disabled before calling the Client Interface handler and call the + handler from only one CPU at a time. The client shall also ensure that + other processors do not generate translation exceptions for the duration + of the call. + Client programs are not required to assume responsibility for + physical memory management. The client program must use the OF claim + client interface service to allocate physical memory while physical + memory is managed by OF. Physical memory shall remain managed by OF until + the client program defines the real-mode physical memory management + assist callbacks. Physical memory must be managed by the client program + once the client program defines the real-mode physical memory management + assist callbacks. OF shall use the client program's real-mode physical + memory management assist callbacks to allocate physical memory after the + client program has assumed physical memory management. + In Real-Mode, + claim methods shall not allocate more pages than are + necessary to satisfy the request. + +
+ +
+ Client Interface (Virtual-Mode) + + Client interface calls are essentially “subroutine” + calls to OF. Hence, the client interface executes in the environment of + its client, including any translations that the OS has established. E.g., + addresses passed in to the client interface are assumed to be valid + virtual addresses within the scope of the OS. Any DSI/ISI interrupts are + either invalid addresses or caused by HTAB “spills”. In + either case, the OS has the responsibility for the handling of such + exceptions. + + Note: Addresses that the OF internal use will be + those that were established by the Device interface (or, by subsequent + actions of the Client or User interface). Thus, the client must preserve + these OF translations if it takes over the virtual memory management + function. + In addition to using existing translations, the Client Interface + might require the establishment of new translations (e.g., due to + map-in calls during + open time), or the removal of old translations (e.g., + during + map-out calls during + close time). Since this requires altering the + Client’s translation resources (e.g., Page Tables), possibly + handling spill conditions, OF cannot know how to perform these + updates. + Hence, there shall be + callback services provided by the client for use by + OF for such actions; see + . + In order to let clients (i.e., target OSs) know where OF lives in + the address space, the following rules shall be followed by an OF + implementation for the PA and by client programs. + OF: + + + + OF shall maintain its “translations” + “mmu”-node property (see + ) + + + + OF’s + claim methods shall not allocate more pages + than are necessary to satisfy the request. + + + + When a client executes + set-callback, OF shall attempt to invoke the + “translate” callback. If the translate callback is + implemented, OF shall cease use of address translation hardware, instead + using the client callbacks for changes to address translation. + + + + The + exit service must continue to work after a + set-callback that takes over address translation. + This implies that OF takes responsibility for address translation + hardware upon + exit and must maintain internal information about + translations that it requests of the client. + Client Programs: + + + + Client programs that take control of the management of address + translation hardware and expect to be able to subsequently invoke OF + client services must provide callbacks to assist OF in address + translation (see + ). + + + + A client program shall not directly manipulate any address + translation hardware before it either a) ceases to invoke OF client + services or b) issues a + set-callback to install the “translate” + callback. + + + + + Note: The intended sequence is that a client program + will first issue a set-callback and then take control of address + translation hardware. Address translation hardware includes BAT entries, + page table, segment registers, Machine State Register and the interrupt + vectors relating to translation faults. + +
+ +
+ User Interface (Real-Mode) + + In Real-Mode, OF regains total control of the system. As with the + Client interface in Real-Mode, it should save the state of the + translation resources (including interrupt vectors) upon entry and should + restore them upon exit. + +
+ +
+ User Interface (Virtual-Mode) + + When the User interface is invoked, OF is responsible for managing + the machine. Therefore, it will take over control of any relevant + interrupt vectors for its own handling. In particular, it will take over + DSI/ISI handling in order to report errors to the user for bad addresses, + protection violations, etc. However, as described above, one source of + DSI/ISI may simply be HTAB spills. As with the case of + map-in and + map-out calls, the User interface cannot know how to + handle such spill conditions, itself, or even if this is, in fact, a + spill versus a bad address. + Hence, this binding defines + callback services that the client provides for use by + OF; see + . + +
+ +
+ +
+ +
+ Properties + This section describes the standard properties of a PA OF + implementation. + +
+ CPU properties + + +
+ The Device Tree + + OF requires that the multiple instances of any device that appears + more than once in the device tree must be distinguishable by means of + their + “reg” properties. The + “reg” property must express the address + of each node relative to its parent bus. Furthermore, the core + specification says that the root node of the device tree usually + represents the main physical bus of the system. Thus, if processors are + not directly addressable on the main physical bus, as is expected to be + the case on many/most PA-based systems, the CPU nodes on such systems may + not be children of the root node but must instead be children of a + pseudo-device node. In this case, the name of the pseudo-device node, + which will usually be a child of the root node, shall be + “cpus”. + The “cpus” node shall have one child node of + device_type “cpu” for each processor. + +
+ +
+ Physical Address Formats and Representations for CPU + Nodes + + + +
+ Numerical Representation + The numerical representation of a processor’s + “address” in a LoPAR system shall consist of one cell, + encoded as follows (Bit# 0 refers to the least significant bit) + : + + + Numerical Representation of a Processor’s + “address” + + + + + + + + + + + + + Bit# + + + + + 3322222210987654 + + + + + 2222111132109876 + + + + + 1111110054321098 + + + + + 0000000076543210 + + + + + + + + phys.lo cell: + + + 00000000 + + + 00000000 + + + 00000000 + + + pppppppp + + + + +
+ where: + pppppppp is an 8-bit integer representing the + interprocessor interrupt identifier used by the platform. + +
+ +
+ Text Representation + + The text representation of a processor’s + “address” shall be an ASCII hexadecimal number in the range + 0...FF. + Conversion of the hexadecimal number from text representation to + numeric representation shall be case insensitive, and leading zeros shall + be permitted but not required. + Conversion from numeric representation to text representation shall + use the lower case forms of the hexadecimal digits in the range + a..f, suppressing leading zeros. + +
+ +
+ Unit Address Representation + + A processor’s “unit-number” (i.e. the first + component of its + “reg” value) is the interprocessor + interrupt destination identifier used by the platform. For a + uni-processor platform, the “unit-number” shall be + zero. + +
+ +
+ +
+ CPUS Node Properties + + The following properties shall be created within the + “cpus” node. + + + + “#address-cells” + + Standard property name to define the number of cells required + to represent the physical addresses for the “ + cpu ” nodes (i.e., the children of the “ + cpus ” node). + prop-encoded-array: Integer constant 1, encoded as + with encode-int. + The value of + “#address-cells” for the + “cpus” node shall be + 1. + + + + + “#size-cells” + + Standard + property name to define the number of cells necessary + to represent the length of a physical address range. + prop-encoded-array: Integer constant 0, encoded as + with encode-int. + The value of “ + #size-cells ” for the “cpus” + pseudo-device node is 0 because the processors that are represented by + the cpu nodes do not consume any physical address space. + + + + +
+ +
+ CPU Node Properties + + For each CPU in the system, a cpu-node shall be defined as a child + of + “cpus”. The following properties apply to + each of these nodes. The + cpus node shall not have “ + reg ” or “ + ranges ” properties. In general, properties in + a cpu-node that affect the software interface (for example properties + that convey the presence of instructions, presence of registers, or + location of resources) to the processor are preserved by the device tree + once presented upon boot. For a list of properties that may change before + a reboot, see + . + + + + “name” + + Standard property name. The value of this property + shall be of the form: “PowerPC,<name>”, where <name> + is the name of the processor chip which may be displayed to the user. + <name> + shall not contain underscores. + + + + + “device_type” + + Standard property name. The value of this + property for CPU nodes shall be + “cpu”. + + + + + “reg” + + Standard proper name to define a cpu node’s + unit-address. + prop-encoded-array: an integer encoded as with + encode-int. + For a cpu node, the first and only value of the + “reg” property shall be the number of the + per-processor interrupt line assigned to the processor represented by the + node. For a uni-processor platform, the value of the + “reg” property shall be zero. + + + + + “status” + + Standard property name. The value of the is + property shall be one of the following string values: + + + + “okay” + for a good processor. + + + + “fail” + for a processor that fails during power-on testing. + + + + “fail-offline” + for a processor that has been automatically deconfigured because of previous + failures. + + + + “disabled” + for a processor that has been manually deconfigured. + + + + + + + “cpu-version” + + property name: Represents the processor type. + prop-encoded-value: The value, encoded as with + encode-int, + shall be either the value obtained by + reading the Processor Version Register of the processor described by this + node, or the logical processor version as given in + . The first byte of the logical + processor version value shall be 0x0F. The values of the “Logical + Processor Version” column of + indicate that the processor + provides the base support described by that version of the architecture. + The presence and value of all optional and implementation dependent + features and facilities are described by their corresponding + properties. + + + Logical Processor Version Values + + + + + + + + + + Logical Processor Version + + + + + Property Value + + + + + + + + 2.04 + + + 0x0F000001 + + + + + 2.05 + + + 0x0F000002 + + + + + 2.06 + + + 0x0F000003 + + + + + 2.06 plus: + URG field in DSCR (Bits 55-57) + + + 0x0F100003 + + + + + 2.07 + + + 0x0F000004 + + + + + 2.08 + + + 0x0F000005 + + + + +
+
+
+ + + “clock-frequency” + + Standard property name, encoded as with + encode-int, that represents + the internal processor speed (in hertz) of this node. + + + + + “ibm,extended-clock-frequency” + + property name: Property that represents the internal + processor speed in hertz of this node. This property allows the encoding + of multi-giga-hertz quantities. + prop-encoded-array: Consisting of the low order 32 + bits of two cells (freq-hi, freq-lo) each encoded as with + encode-int, such that + their combined value is (the low order 32 bits of freq-hi || the low order + 32 bits of freq-lo). + + + + + “timebase-frequency” + + Standard property name, encoded as with + encode-int, + that represents the rate (in hertz) at + which the PA TimeBase and Decrementer registers are updated. + Note: The 601 PowerPC + processor does not have a timebase frequency, + therefore on a 601 PowerPC processor the value reported in this property + shall be 1 billion (1 x 109) which represents the logical rate of the + real time clock. + + + + + “ibm,extended-timebase-frequency” + + property name: Property that represents the rate in + hertz at which the PA TimeBase and Decrementer registers are updated. + This property allows the encoding of multi-giga-hertz quantities. + prop-encoded-array: Consisting of the low order 32 + bits of two cells (freq-hi, freq-lo) each encoded as with + encode-int, such that their combined + value is (the low order 32 bits of freq-hi || the low order 32 bits of freq-lo). + Note: The + “ibm,extended-timebase-frequency” + property will be deprecated from the architecture due to the emergence of the + “ibm,nominal-tbf” property and the lack + of a need for a two cell version of the + “timebase-frequency” property. + Implementations should not provide the + “ibm,extended-timebase-frequency” property. + + + + + “ibm,nominal-tbf” + + property name: Property, encoded as with + encode-int, + that represents the design nominal + timebase frequency (in hertz). + + + + + “ibm,tbu40-offset” + + property name: that provides the value that, when + added (ignoring overflow) to the processor TimeBase, yields a value + consistent with other platform partitions that utilize their respective + values of the property. If the property is missing, the default value is + zero. + prop-encoded-array: An eight byte, big endian, + unsigned, binary value. + + + + + “64-bit” + + prop-encoded-array: <none> + This property, if present, indicates that the PA processor defined + by this CPU node is a 64-bit implementation of the PA. The absence of + this property indicates that the microprocessor defined by this CPU node + is a 32 bit implementation of the PA + + + + + “64-bit-virtual-address” + + prop-encoded-array: <none> + This property, if present, indicates that the PA processor defined + by this CPU node supports the 64-bit virtual address subset of the 80-bit + virtual address as defined by the PA. The absence of this property + indicates that the PA processor defined by this CPU node supports the + full 80-bit virtual address defined by the PA. This property is only + valid for 64-bit implementations. + Note: The + “64-bit-virtual-address” + will be + deprecated from the architecture. Implementations should not provide this + property. + + + + + “603-translation” + + prop-encoded-array: <none> + This property, if present, indicates that the PA processor defined + by this CPU node uses the PowerPC 603 processor defined mechanism to + update its Translation Lookaside Buffers (TLBs). The absence of this + property indicates that the PA processor defined by this CPU node does + not use the PowerPC 603 processor defined mechanism to update its + TLBs. + + + + + “603-power-management” + + prop-encoded-array: <none> + This property, if present, indicates that the PA processor defined + by this CPU node implements the PowerPC 603 processor defined power + management states. The absence of this property indicates that the PA + processor defined by this CPU node does not support the PowerPC 603 + processor defined power management states. + + + + + “bus-frequency” + + Standard property name, encoded as with + encode-int, + that represents the speed (in hertz) of + this processor’s bus. + + + + + “ibm,extended-bus-frequency” + + property name: Property that represents the rate in + hertz of this processor’s bus. This property allows the encoding of + multi-giga-hertz quantities. + prop-encoded-array: Consisting of the low order 32 + bits of two cells (freq-hi, freq-lo) each encoded as with + encode-int, + such that their combined value is (the + low order 32 bits of freq-hi || the low order 32 bits of freq-lo). + + + + + “32-64-bridge” + + prop-encoded-array: <none> + This property, if present, indicates that the PA processor defined + by this CPU node implements the “Bridge Facilities and Instructions + for 64-bit Implementations” as described in an appendix of Book III + of + . The absence of this property + indicates that the PA processor defined by this CPU node does not support + these facilities and instructions. + + + + + “external-control” + + prop-encoded-array: <none> + This property, if present, indicates that the PA processor defined + by this CPU node implements the External Control Facility as described in + the “Optional Facilities and Instructions” appendix of Book + II of + . The absence of his property + indicates that the PA processor defined by this CPU node does not support + the External Control Facility. + + + + + “general-purpose” + + prop-encoded-array: <none> + This property, if present, indicates that the PA processor defined + by this CPU node implements the floating point instructions + fsqrt, + fsqrts and + stfiwx. The absence of this property indicates that + the PA processor defined by this CPU node does not support the floating + point instructions + fsqrt, + fsqrts and + stfiwx. + + + + + “reservation-granule-size” + + Standard property, encoded as with + encode-int, + that represents the reservation granule + size (i.e., the minimum size of lock variables) supported by this + processor, in bytes. + + + + + “graphics” + + prop-encoded-array: <none> + This property, if present, indicates that the PA processor defined + by this CPU node implements floating point instructions + fres, frsqrte, and + fsel. The absence of this property indicates that + the PA processor defined by this CPU node does not support the floating + point instructions + fres, frsqrte, and + fsel. + + + + + “performance-monitor” + + property name: Indicates that the processor described + by this node implements a performance monitor. + prop-encoded-array: Consists of a pair of values, + each encoded as with + encode-int. + The first value of the pair shall be 0 + indicating that the performance monitor functionality is implementation + specific. The second value of the pair represents the documentation + describing the performance monitor functionality implemented by the + processor described by this node. The documentation represented by the + second value is specified in + . + + + Documentation for Implementation Specific Performance + Monitors + + + + + + + + + + Second Value + + + + + Documentation + + + + + + + + 0 + + + + Power 5+ Performance Monitor Programmer’s + Guide + + + + + + 1 + + + + Power 7 Performance Monitor Programmer’s + Guide + + + + + +
+
+
+ + + “ibm,vmx” + + property name that indicates that the processor + supports the POWER VMX architecture. + prop-encoded-array: an integer encoded as with + encode-int, + that represents the level of the VMX + architecture supported. The first level supported is the value 1. The + value of 1 represents the level of support described by the + A Vector/SIMD Multimedia eXtension to the PowerPC Architecture, + Specification Revision 1.2.3, 7/18/97 specification. The value + of 2 represents the level of support provided by the VSX option of + level 2.06. + + + + + “ibm,segment-page-sizes” + + property name: that indicates the segment base page + sizes and related encodings supported by the processor. + prop-encoded-array: one or more + segment-page-size-descriptor(s). + segment-page-size-descriptor: a + segment-page-size-header followed by a pte-lp-descriptor. + segment-page-size-header: Consists of three cells + (X,Y,Z) encoded as with + encode-int. + The first cell represents the base page + size of the segment (the page size which determines the hash value used + to locate the segment's page table entries) as 2 + X. The second cell contains the SLB encoding that, + ORed with the RS register value for use by a slbmte instruction, selects + this segment's base page size. Note, the low order bits of the cell Y are + aligned with the low order bits of RS and the RS's L and LP bits are zero + prior to the logical OR operation. The third cell contains the number of + pte-lp-encodings in the pte-lp-descriptor. + pte-lp-descriptor: Consists of Z (from the + segment-page-size-header) pte-lp-encoding(s), one for each of the page + sizes supported for this base segment page size. + pte-lp-encoding: Each pte-lp-encoding consists of + two cells (P,Q) encoded as with + encode-int. + The first cell represents the page size + of the encoding as 2 + P (thus implying the number of low order RPN bits + that are available to page size encoding). The second cell, left shifted + 12 bit positions, is the encoding to be entered into the available low + order RPN bits to represent this page size for this segment base page + size. + Note: A + segment-page-size-descriptor applies to a segment + only if the size of the segment is greater than or equal to all of the + page sizes within the + pte-lp-encoding (s) contained within the + segment-page-size-descriptor. + + + + + “ibm,processor-page-sizes” + + property name: Relates the number and sizes of the virtual memory + page sizes supported by the processor describe by this node. + prop-encoded-array: One to N cells in ascending + value order, each encoded as with + encode-int, each cell represents the size of a + supported virtual memory page where the value of the cell is the power of + 2 of the cell size. i.e. a 4 K page size is represented by the value 12 + (4 K= 2 + 12) etc. + + + + + “ibm,processor-segment-sizes” + + property name: Relates the number and sizes of the + virtual memory segment sizes supported by the processor described by this + node. + prop-encoded-array: One to N cells in ascending + value order of the segment selector (SLBE B field), each encoded as with + encode-int, each positive value cell represents the + size of a supported virtual memory segment where the value of the cell is + the power of 2 of the segment size. That is, a 256Meg segment size is + represented by the value 28 (256Meg = 2 + 28) etc. (negative valued cells represent + unsupported encodings). + + + + + “ibm,processor-storage-keys” + + property name indicating the number of virtual + storage keys supported by the processor described by this node. + prop-encoded-array: Consists of two cells encoded as + with encode-int. + The first cell represents the number of + virtual storage keys supported for data accesses while the second cell + represents the number of virtual storage keys supported for instruction + accesses. The cell value of zero indicates that no storage keys are + supported for the access type. + + + + + “ibm,processor-vadd-size” + + property name indicating the number of virtual + address bits that are supported by the processor described by this + node. + prop-encode-array: An integer, encoded as with + encode-int, that represents the number of supported + virtual address bits. + Note: A processor + described by this node implements + the least significant + “ibm,processor-vadd-size” + bits of the architected virtual address. + + + + + “ibm,vrma-page-sizes” + + property-name: Maps the VRMASD field values + implemented by the processor described by this node to their page + sizes. + prop-encoded-array: Array of one or more + VRMA page-size-descriptor (s) starting with the value + selected by the firmware when booting the partition, followed by the + other values supported by the platform. + VRMA page-size-descriptor: A pair of cells encoded + as with + encode-int; The first cell is the log base 2 of the + page size. The second cell contains, in its low order bits, the VRMASD + field value to achieve that supported size. The high order bits of the + second cell are zero. + + + + + “ibm,estimate-precision” + + property name: Relates PA estimate instruction + mnemonics to precisions supported by the processor described by this + node. + prop-encoded-array: One or more + instruction-precision descriptor (s). + + instruction-precision descriptor: An + instruction descriptor followed by a + precision descriptor. An + instruction-precision descriptor relates one estimate + instruction mnemonic to the precision supported by the processor + described by this node for that estimate instruction mnemonic. + instruction descriptor: Consists of one PA + instruction mnemonic encoded as with + encode-string. + precision descriptor: Consists of an integer, encoded + as with + encode-int, + specifying the number of bits of + precision the processor described by this node supports for an + instruction mnemonic. + + + + + “ibm,dfp” + + property name: Indicates that the processor described + by this node supports the Decimal Floating Point (DFP) + architecture. + prop-encoded-value: an integer, encoded as with + encode-int, + that represents the level of DFP support + of the CPU described by this node. The absolute value of the integer + represents the level of the DFP architecture supported. The sign of the + integer indicates how the architecture level is supported. A positive + integer indicates native support while a negative integer indicates + emulation assisted support. The absolute values supported are as + follows: + 1: Represents the level of support defined by Version 2.05 of the + . + 2: Represents the level of support defined by Version 2.06 of the + . + + + + + “ibm,purr” + + property name: Indicates that the processor + described by this node implements a Processor Utilization of Resources + Register (PURR). + prop-encoded-value: an integer, encoded as with + encode-int, + that represents the level of PURR + architecture supported. The first level supported is the value 1 and is + defined by Section 6.5 “Processor Utilization of Resources + Register” of Book III of version 2.02 of the PA. + + + + + “ibm,spurr” + + property name: Indicates that the processor + described by this node implements a Scaled Processor Utilization of + Resources Register (SPURR). + prop-encoded-value: an integer, encoded as with + encode-int, + that represents the level of SPURR + architecture supported. The value of 1 represents the level of support + defined by Version 2.05 of the + . + + + + + “ibm,pa-features” + + property name: Indicates level of support of several + extended features of the Processor Architecture. + prop-encoded-array: One or more + attribute-descriptor (s). + attribute-descriptor: Consists of an + attribute-header immediately followed by an + attribute-specifier. + attribute-header: Consists of two bytes. The first + byte is an unsigned integer representing a value from 1 to 254. The first + byte specifies the number of bytes implemented by the platform of the + attribute-specifier. The second byte is an unsigned + integer specifying the + attribute-specifier-type. + attribute-specifier: The + attribute-specifier is defined by the + attribute-specifier-type of the + attribute-header. The + attribute-specifier for the + attribute-specifier-type value of 0 is defined by + . + + + Definition for + <emphasis>attribute-specifier</emphasis> + <emphasis>attribute-specifier-type</emphasis> value 0 + + + + + + + + + + Byte Number + + + + + Bit Number + + + + + Attribute Name + + + + + Description + + + + + + + + 0 + + + 0 + + + Memory Management Unit (MMU) + + + The value of 1 indicates MMU support; else not + supported. + + + + + 1 + + + Floating Point Unit (FPU) + + + The value of 1 indicates FPU support; else not + supported. + + + + + 2 + + + Segment Lookaside Buffer (SLB). + + + The value of 1 indicates SLB support; else not + supported. + + + + + 3 + + + RUN field + + + The value of 1 indicates support for the RUN field of the + Control Register (CTRL, SPR #152); else not supported. + + + + + 4 + + + Reserved + + + Reserved bits within defined bytes + shall be zero. + + + + + 5 + + + Data Address Breakpoint Register (DABR) + + + The value of 1 indicates DABR support; else not + supported. + + + + + 6 + + + No Execute (N) bit in Page Table Entries. + + + The value of 1 indicates No Execute (N) bit in Page Table + Entry support; else not supported. + + + + + 7 + + + Write Through Required (W) bit + + + The value of 1 indicates setting the W bit to 1 (write + through always) is supported; else attempting to set the W bit + to 1 has no effect + + + + + 1 + + + 0 + + + Memory Coherence Required (M) bit + + + The value of 1 indicates that setting the M bit to 0 + (main storage not always coherent) is supported; else + attempting to set the M bit to 0 has no effect. + + + + + 1 + + + Data Storage Interrupt Status Register (DSISR) set on an + alignment interrupt. + + + The value of 1 indicates that the DSISR is set on an + alignment interrupt as described by version 2.01 of PA; else + the DSISR is not set on alignment interrupt as described by + version 2.01 of PA. + + + + + 2 + + + I=1 (cache inhibited) Large Pages + + + The value of 1 indicates support for I=1 (cache + inhibited) large pages; else not supported. + + + + + 3 + + + Round to Integer (from floating point) group of + instructions. + + + The value of 1 indicates support for the + frin, friz, frip, and + frim instructions; else these instructions + are not supported. + + + + + 4 + + + Data Address Breakpoint Register Extension (DABRX) + + + The value of 1 indicates support for the DABRX + architecture as defined by version 2.02 of PA; else not + supported. + + + + + 5 + + + User Accessible SPRG3 + + + The value of 1 indicates support for accessing SPRG3 in + Problem State; else SPRG3 is not accessible in Problem + State. + + + + + 6 + + + Reading an invalid SLB entry returns zeros. + + + The value of 1 indicates that reading an invalid SLB + entry always returns zeros; else non-zero values may be + returned. + + + + + 7 + + + Support for “110” value of the Page + Protection (PP) bits. + + + The value of 1 indicates support for “110” + value of the Page Protection (PP) bits as described by version + 2.04 of PA; else “110” is not supported.as + described by 2.04 of PA. + + + + + 2 + + + 0 + + + Virtualized Partition Memory (VPM) + + + The value of 1 indicates support for Virtualized + Partition Memory (VPM) as described by version 2.04 of PA; else + not supported. + + + + + 1 + + + 2.05 Data Stream Support + + + The value of 1 indicates that data streams as described + by version 2.05 of PA are supported; else not supported. + + + + + 2 + + + Reserved + + + Reserved bits within defined bytes + shall be zero. + + + + + 3 + + + Data Address Register (DAR) set on an alignment + interrupt. + + + The value of 1 indicates that the DAR is set on an + alignment interrupt as described by version 2.01 of PA; else + the DAR is not set on alignment interrupt as described by + version 2.01 of PA. + + + + + 4 + + + Reserved + + + Reserved bits within defined bytes + shall be zero. + + + + + 5 + + + Program Priority Register (PPR) + + + The value of 1 indicates that the PPR is implemented as + described by version 2.03 of PA; else the PPR is not + implemented as described by version 2.03 of PA. + + + + + 6 + + + 2.02 Data Stream Support + + + The value of 1 indicates that data streams as described + by version 2.02 of PA are supported; else not supported. + + + + + 7 + + + 2.06 Data Stream Support + + + The value of 1 indicates that data streams as described + by version 2.06 of PA are supported; else the 2.06 version data + streams are not supported. + + + + + 3 + + + 0 + + + LSD in DSCR(Bit 58) + + + The value of 1indicates that “Load Stream + Disable” bit of the Data Stream Control Register is + implemented + + + + + 1 + + + URG in DSCR (Bits 55::57) + + + The value of 1 indicates that the “Depth Attainment + Urgency” field of the Data Stream Control Register is + implemented. + + + + + 2-7 + + + Reserved + + + Reserved bits within defined bytes + shall be zero. + + + + + 4 + + + Storage Order Options + + + Byte bits define the availability of specific + options + + + + + 0 + + + 2.06 Strong Storage Order + + + The value of 1 indicates that Strong Storage Order as + defined by version 2.06 of PA is supported; else not. + + + + + 1-7 + + + Reserved for future storage order options + + + Reserved bits within defined bytes + shall be zero. + + + + + 5 + + + 0 + + + Little Endian + + + The value of 1indicates support for Little Endian as + described by version 2.03 of PA; else not supported. + + + + + 1 + + + Come From Address Register (CFAR) + + + The value of 1 indicates that the CFAR is implemented as + described by version 2.05 of PA; else the CFAR is not + implemented as described by version 2.05 of PA. + + + + + 2 + + + Elemental Barriers + + + The value of 1 indicates that elemental barriers are + supported; else elemental barriers are not supported. + + + + + 3 + + + 2.07 load/store quadword + + + The value of 1 indicates that the load/store quadword + category as described by version 2.07 of POWER ISA is + supported; else the 2.07 version load/store quadword category + is not supported. + + + + + 4-7 + + + Reserved + + + Reserved bits within defined bytes + shall be zero. + + + + + 6-7 + + + Data Streaming Specifications + + + + + 0 + + + 2.07 Data Streaming Support + + + The value of 1 indicates that data streams as described + by version 2.07 of POWER ISA are supported; else the 2.07 + version data streams are not supported. + + + + + 1-7 + + + Reserved + + + Reserved bits within defined bytes + shall be zero. + + + + + 8-15 + + + 0-7 + + + Reserved Co-Processor Option + + + Individual non-zero bits indicate available coprocessor + types per their architected ACOP bit locations. (the value + 0x0000000000000000 indicates that moving to/from the ACOP SPR + or the ICSWX instruction should not be attempted) + + + + + 16-17 + + + Level of Vector Category Support + + + + + 0 + + + 2.07 Vector Support + + + The value of 1 indicates that the vector category as + described by version 2.07 of POWER ISA is supported; else the + 2.07 version vector category is not supported. + + + + + 1-7 + + + Reserved + + + Reserved bits within defined bytes + shall be zero. + + + + + 18-19 + + + Level of Vector Scalar Category Support + + + + + 0 + + + 2.07 Vector Scalar Support + + + The value of 1 indicates that the vector scalar category + as described by version 2.07 of POWER ISA is supported; else + the 2.07 version vector scalar category is not + supported. + + + + + 1-7 + + + Reserved + + + Reserved bits within defined bytes + shall be zero. + + + + + 20-21 + + + Level of Vector.XOR Category Support + + + + + 0 + + + 2.07 Vector.XOR Support + + + The value of 1 indicates that the vector.xor category as + described by version 2.07 of POWER ISA is supported; else the + 2.07 version vector.xor category is not supported. + + + + + 1-7 + + + Reserved + + + Reserved bits within defined bytes + shall be zero. + + + + + 22-23 + + + Level of Transactional Memory Category Support + + + + + 0 + + + 2.07 Transactional Memory Support + + + The value of 1 indicates that the Transactional Memory + Category as described by version 2.07 of POWER ISA is + supported; else the 2.07 version Transactional Memory Category + is not supported. + + + + + 1-7 + + + Reserved + + + Reserved bits within defined bytes + shall be zero. + + + + + 24-255 + + + 0-7 + + + Undefined + + + Readers + shall ignore undefined bytes if + present. + + + + +
+
+
+ + + “ibm,pi-features” + + property name: Indicates level of support of + processor implementation specific options not described by the Processor + Architecture. + prop-encoded-array: One or more + pi-attribute-descriptor (s). + pi-attribute-descriptor: Consists of a + pi-attribute-header immediately followed by a + pi-attribute-specifier. + pi-attribute-header: Consists of two bytes. The first + byte is an unsigned integer representing a value from 1 to 254. The first + byte specifies the number of bytes implemented by the platform of the + pi-attribute-specifier. The second byte is an + unsigned integer specifying the + pi-attribute-specifier-type. + pi-attribute-specifier: The + pi-attribute-specifier is defined by the + pi-attribute-specifier-type of the + pi-attribute-header. The + pi-attribute-specifier for the + pi-attribute-specifier-type value of 0 is defined by + . + + + Definition for + <emphasis>‘</emphasis> + <emphasis>pi-attribute-specifier-type</emphasis> value 0 + + + + + + + + + + Byte Number + + + + + Bit Number + + + + + Attribute Name + + + + + Description + + + + + + + + 0 + + + 0 + + + P4 Data Address Register (DAR) setting on alignment + interrupt. + + + The value of 1 indicates that the DAR is set on an + alignment interrupt as described by version 2.01 of PA except + for the case where the interrupt is caused by an unsupported + access to cache inhibited space. In this case, the DAR will be + set to the effective address of the first access into the cache + inhibited space. The value of 0 indicates that the processor + does not adhere to this behavior. + + + + + 1 + + + Reserved + + + Reserved bits within defined bytes + shall be zero. + + + + + 2 + + + Ordered Thread Activation/Deactivation + + + The value of 1 indicates that the + “ibm,ppc-interrupt-server-#s” property + conveys the order that threads need to be activated and + deactivated in to achieve optimal performance; else no need to + activate and deactivate threads in order. + + + + + 3-7 + + + Reserved + + + Reserved bits within defined bytes + shall be zero. + + + + + 1-255 + + + 0-7 + + + Reserved + + + Reserved bits within defined bytes + shall be zero. + + + + +
+
+
+ + + “ibm,negotiated-pa-features” + + property name: Indicates level + of support negotiated via the + ibm,client-architecture-support + method (See + ) of several extended features + of the Processor Architecture. + prop-encoded-array: One or more + negotiated-pa-attribute-descriptor (s). + negotiated-pa-attribute-descriptor: Consists of a + negotiated-pa-attribute-header immediately followed + by a + negotiated-pa-attribute-specifier. + negotiated-pa-attribute-header: Consists of two + bytes. The first byte is an unsigned integer representing a value from 1 + to 254. The first byte specifies the number of bytes implemented by the + platform of the + negotiated-pa-attribute-specifier. The second byte + is an unsigned integer specifying the + negotiated-pa-attribute-specifier-type. + negotiated-pa-attribute-specifier: The + negotiated-pa-attribute-specifier is defined by the + negotiated-pa-attribute-specifier-type of the + negotiated-pa-attribute-header. The + negotiated-pa-attribute-specifier for the + negotiated-pa-attribute-specifier-type value of 0 is + defined by + . + + + Definition for + <emphasis>negotiated-pa-attribute-specifier</emphasis> + <emphasis>negotiated-pa-attribute-specifier-type</emphasis> value + 0 + + + + + + + + + + Byte Number + + + + + Bit Number + + + + + Attribute Name + + + + + Description + + + + + + + + 0 + + + 0 + + + TC Set + + + The value of 1 indicates that the TC bit is implemented + as described by version 2.05 of PA and set to a value of 1; + else the TC bit is not implemented as described by version 2.05 + of PA or not set to a value of 1. + + + + + 1-7 + + + Reserved + + + Reserved bits within defined bytes + shall be zero. + + + + + 1-255 + + + 0-7 + + + Reserved + + + Reserved bits within defined bytes + shall be zero. + + + + +
+
+
+ + + “ibm,raw-pi-features” + + property name: Indicates level of support of + processor implementation specific options not described by the Processor + Architecture and not supported on partitions that contain the + “ibm,migratable-partition” property. + prop-encoded-array: One or more + raw-pi-attribute-descriptor (s). + raw-pi-attribute-descriptor: Consists of a + raw-pi-attribute-header immediately followed by a + raw-pi-attribute-specifier. + raw-pi-attribute-header: Consists of two bytes. The + first byte is an unsigned integer representing a value from 1 to 254. The + first byte specifies the number of bytes implemented by the platform of + the + raw-pi-attribute-specifier. The second byte is an + unsigned integer specifying the + raw-pi-attribute-specifier-type. + raw-pi-attribute-specifier: The + raw-pi-attribute-specifier is defined by the + raw-pi-attribute-specifier-type of the + raw-pi-attribute-header. The + raw-pi-attribute-specifier for the + raw-pi-attribute-specifier-type value of 0 is defined + by + . + + + Definition for + <emphasis>raw-pi-attribute-specifier</emphasis> + <emphasis>raw-pi-attribute-specifier-type</emphasis> value 0 + + + + + + + + + + Byte Number + + + + + Bit Number + + + + + Attribute Name + + + + + Description + + + + + + + + 0 + + + 0 + + + FPR GPR Move Instructions + + + The value of 1 indicates that the PA processor defined by + this CPU node implements the + mftgpr and + mffgpr instructions as described by IBM + POWER6® CEC Book IV Implementation + Features; else not supported. + + + + + 1-7 + + + Reserved + + + Reserved bits within defined bytes + shall be zero. + + + + + 1-255 + + + 0-7 + + + Reserved + + + Reserved bits within defined bytes + shall be zero. + + + + +
+
+
+ + + “ibm,pa-optimizations” + + property name: Indicates the level of support of + performance variabilities described by the Processor Architecture. + prop-encoded-array: One or more + pa-optimization-attribute-descriptor (s). + pa-optimization-attribute-descriptor: Consists of a + pa-optimization-attribute-header immediately followed + by a + pa-optimization-attribute-specifier. + pa-optimization-attribute-header: Consists of two + bytes. The first byte is an unsigned integer representing a value from 1 + to 254. The first byte specifies the number of bytes implemented by the + platform of the + pa-optimization-attribute-specifier. The second byte + is an unsigned integer specifying the + pa-optimization-attribute-specifier-type. + pa-optimization-attribute-specifier: The + pa-optimization-attribute-specifier is defined by the + pa-optimization-attribute-specifier-type of the + pa-optimization-attribute-header. The + pa-optimization-attribute-specifier for the + pa-optimization-attribute-specifier-type value of 0 + is defined by + . + + + Definition for + <emphasis>pa-optimization-attribute-specifier</emphasis> + <emphasis>pa-optimization-attribute-specifier-type</emphasis> value + 0 + + + + + + + + + + Byte Number + + + + + Bit Number + + + + + Attribute Name + + + + + Description + + + + + + + + 0 + + + 0-7 + + + Stream IDs + + + The value is an unsigned quantity indicating the number + of data stream IDs supported. The value of this byte + shall be zero for processors that do not + support data streams. + + + + + 1 + + + 0-7 + + + Default Prefetch Depth + + + The value in the Default Prefetch Depth (DPFD) field of + the Logical Partitioning Control Register (LPCR) as described + by version 2.05 of PA. Unimplemented high order bits + shall be zero. This byte is valid only if + the “2.05 Data Stream Support” bit of + “ibm,pa-features” is set to + one; else this byte is undefined. + + + + + 2-255 + + + 0-7 + + + Reserved + + + Reserved bits within defined bytes + shall be zero. + + + + +
+
+
+
+ +
+ +
+ TLB properties + + Since the PA defines the MMU as being part of the processor, the + properties defined by Section 3.6.5 of + and the following MMU-related + properties shall be presented under “cpu” nodes. + + + + “tlb-size” + + Standard property name, encoded as with + encode-int, that represents + the total number of TLB entries. + + + + + “tlb-sets” + + Standard property name, encoded as with + encode-int, that represents + the number of associativity sets of the TLB. A value of 1 indicates that the TLB is + fully-associative. + + + + + “tlb-split” + + This property, if present, shall indicate that the TLB has a split + organization. The absence of this property shall indicate that the TLB + has a unified organization. + + + + + “d-tlb-size” + + Standard property name, encoded as with + encode-int, that represents + the total number of d-TLB entries. + + + + + “d-tlb-sets” + + Standard property name, encoded as with + encode-int, that represents + the number of associativity sets of the d-TLB. A value of 1 indicates that the + d-TLB is fully-associative. + + + + + “i-tlb-size” + + Standard property name, encoded as with + encode-int, that + represents the total number of i-TLB entries. + + + + + “i-tlb-sets” + + Standard property name, encoded as with + encode-int, that represents + the number of associativity sets of the i-TLB. A value of 1 indicates that the + i-TLB is fully-associative. + + + + + “tlbia” + + prop-encoded-array: <none> + This property, if present, indicates that the PA processor defined + by this CPU node implements thetlbia instruction. The absence + of this property indicates that the PA processor defined by this CPU node does + not support the tlbia instruction. + + + + +
+ +
+ Internal (L1) cache properties + + The PA defines a Harvard-style cache architecture; however, unified + caches are an implementation option. All of the PA cache instructions act + upon a cache “block”. The coherence block size, if different + from the cache block size, is reported via the + “i-cache-line-size” and + “d-cache-line-size” properties. The + internal (also referred to as “L1”) caches of PA processors + are represented in the OF device tree by the following properties + contained under + “cpu” nodes. + + + + “cache-unified” + + This property, if present, indicates that the internal cache has a + physically unified organization. Absence of this property indicates that + the internal caches are implemented as separate instruction and data + caches. Unless otherwise noted, separate instruction and data caches + require the architected instruction sequence for instruction modification + so that data cache stores appear in the instruction cache. + + + + + “i-cache-size” + + Standard property name, encoded as with + encode-int, that represents + the total size (in bytes) of the internal instruction cache. + + + + + “i-cache-sets” + + Standard property name, encoded as with + encode-int, that represents + number of associativity sets of the internal instruction cache. A value of 1 + signifies that the instruction cache is fully associative. + + + + + “i-cache-block-size” + + Standard property name, encoded as with + encode-int, that represents + the internal instruction cache's block size, in bytes. + + + + + “d-cache-size” + + Standard property name, encoded as with + encode-int, that represents + the total size (in bytes) of the internal data cache. + + + + + “d-cache-sets” + + Standard property name, encoded as with + encode-int, that represents + number of associativity sets of the internal data cache. A value of 1 signifies + that the data cache is fully associative. + + + + + “d-cache-block-size” + + Standard property name, encoded as with + encode-int, that represents + the internal (L1) data cache's block size, in bytes. + + + + + “l2-cache” + + Standard property name, encoded as with + encode-int, that represents + the next level of cache in the memory hierarchy. + Absence of this property indicates that no further levels of cache + are present. If present, its value is the + phandle of the device node that represents the next + level of cache. + + + + + “i-cache-line-size” + + Standard property name, encoded as with + encode-int, that represents + the internal instruction cache's coherency block size (line size), in bytes, + if different than its cache block size. + + + + + “d-cache-line-size” + + Standard property name, encoded as with + encode-int, that represents + the internal data cache's coherency block size (line size), in bytes, if different + than its cache block size. + Note: If this is a unified cache, the + corresponding i- and d- sizes must be equal. + + + + +
+ +
+ Memory Management Unit properties + + To aid a client in “taking over” the translation + mechanism and still interact with OF (via the client interface), the + client needs to know what translations have been established by OF. The + following standard property shall exist within the package to which the + “mmu” property of the /chosen package refers. + + + + “translations” + + This property, consisting of sets of translations, defines the + currently active translations that have been established by OF (e.g., + using map). Each set has the following format: + + Each value is encoded as with + encode-int. + + + + + +
+ +
+ SLB properties + + Since the PA defines the MMU as being part of the processor, the + properties defined by Section 3.6.5 of + and the following MMU-related + properties as appropriate to the specific processor implementation shall + be presented under “cpu” nodes. + + + + “slb-size” + + Standard property name, encoded as with + encode-int, that + represents the total number of SLB entries. + Note: + requires that the SLB be + fully-associative, and appear to be a unified organization. Therefore, + properties to report SLB sets, split, and sizes and sets of i and d SLBs + are not defined. + + + + +
+ +
+ +
+ Ancillary (L2,L3...) cache node properties + Some systems might include secondary (L2) or tertiary (L3), etc. + cache(s). As with the L1 caches, they can be implemented as either + Harvard-style or unified. Unlike the L1 properties, that are contained + within the + “cpu” nodes, the properties of ancillary + caches are contained within other device tree nodes. + The following properties define the characteristics of such + ancillary caches. These properties shall be contained within a child node + of one of the CPU nodes or, for platforms that support dynamic + reconfiguration of cpus, the CPUS node; this is to allow path-name access + to the node. These properties shall always be contained within a child + node of the CPUS node. All + “cpu” nodes that share the same ancillary + cache (including the cpu node under which the ancillary cache node is + contained) shall contain an + “l2-cache” property whose value is the + phandle of that ancillary cache node. + + Note: The + “l2-cache” property shall be used in one + level of the cache hierarchy to represent the next level. The device node + for a subsequent level shall appear as a child of one of the caches in + the hierarchy to allow path-name traversal. The preceding sentence does + not apply to platforms that support dynamic reconfiguration of cpus or + platforms designed after 07/2005. + + + + “device_type” + + Standard property name; the device_type of ancillary cache + nodes shall be + “cache”. + + + + + “cache-unified” + + This property, if present, indicates that the cache at this node + has a physically unified organization. Absence of this property indicates + that the caches at this node are implemented as separate instruction and + data caches. Unless otherwise noted, separate instruction and data caches + require the architected instruction sequence for instruction modification + so that data cache stores appear in the instruction cache. + + + + + “i-cache-size” + + Standard property name, encoded as with + encode-int, that represents the total size (in + bytes) of the instruction cache at this node. + + + + + “i-cache-sets” + + Standard property name, encoded as with + encode-int, that represents number of associativity + sets of the instruction cache at this node. A value of 1 signifies that + the instruction cache is fully associative. + + + + + “d-cache-size” + + Standard property name, encoded as with + encode-int, that represents the total size (in + bytes) of the data cache at this node. + + + + + “d-cache-sets” + + Standard property name, encoded as with + encode-int, that represents number of associativity + sets of the instruction cache at this node. A value of 1 signifies that + the instruction cache is fully associative. + + + + + “l2-cache” + + Standard property name, encoded as with + encode-int, that represents the next level of cache + in the memory hierarchy. + Absence of this property indicates that no further levels of cache + are present. If present, its value is the + phandle of the device node that represents the cache + at the next level. + + + + + “i-cache-line-size” + + Standard property name, encoded as with + encode-int, that represents the internal instruction + cache's line size, in bytes, if different than its block size. + + + + + “d-cache-line-size” + + Standard property name, encoded as with + encode-int, that represents the internal data + cache's line size, in bytes, if different than its block size. + + Note: If this is a unified cache, the corresponding + i- and d- sizes must be equal. + + + + +
+ +
+ +
+ Methods + + This section describes the additional standard methods required of a + PA OF implementation. + +
+ MMU related methods + + The MMU methods defined by section 3.6.5. of + shall be implemented by CPU + nodes. The value of the + mode parameter for the relevant methods (e.g., + map) shall be the value that is contained within + PTEs that control Write-through, Cache-Inhibit, Memory-coherent, Guarded + and the 2 protection bits; thus, its format is: + WIMGxPP, where x is a reserved bit that shall be 0. + In order for I/O accesses to be properly performed in a LoPAR system, + address ranges that are mapped by + map-in shall be marked as Cache-Inhibited, + Guarded. + The default mode (i.e., the mode specified when the value of the + mode argument is -1) for the + map-in and + modify MMU methods of CPU nodes is defined as + follows: + If the beginning of the physical address range affected by the + operation refers to system memory, the values for + WIMGxPP shall be W=0, I=0, M=0, G=1, PP=10. + If the beginning of the physical address range affected by the + operation refers to an I/O address, the values for WIMGxPP shall be W=1, + I=1, M=0, G=1, PP=10. + +
+ +
+ +
+ Client Interface Requirements + + A PA OF implementation shall implement a client interface (as defined + in chapter 6 of + ) according to the specifications + contained within this section. + +
+ Calling Conventions + To invoke a client interface service, a + client program constructs a client interface + argument array as specified in the core OF document, + places its address in + r3 and transfers to the + client interface handler, with the return address in + lr. (A typical way of accomplishing this is to copy + the + client interface handler's address into + ctr and executing a + bctrl.) + The term “preserved” below shall mean that the register + has the same value when returning as it did when the call was + made. + + + Register usage conventions + + + + + + + + + + + + Register(s) + + + + + Value -- real-mode + + + + + Value -- virt-mode + + + + + Notes + + + + + + + +   + + + If either the FWNMI, or LPAR option is implemented + + + If neither the FWNMI or LPAR option is implemented + + + If either the FWNMI, or LPAR option is implemented + + + If neither the FWNMI or LPAR option is implemented + + +   + + + + + msr + + + client interface shall preserve + + + client interface shall preserve + + + same as real-mode + + + client interface shall not modify + + +   + + + + + cr + + + client interface shall preserve + + + client interface shall preserve + + + same as real-mode + + + same as real-mode + + + 1 + + + + + r1-r2 + + + client interface shall preserve + + + client interface shall preserve + + + same as real-mode + + + same as real-mode + + +   + + + + + r3 + + + argument array address on client interface entry + + + argument array address on client interface entry + + + same as real-mode + + + same as real-mode + + + 2 + + + + +   + + + result value (true or false) on client interface + return + + + result value (true or false) on client interface + return + + + same as real-mode + + + same as real-mode + + + 2 + + + + + r13-r31 + + + client interface shall preserve + + + client interface shall preserve + + + same as real-mode + + + same as real-mode + + +   + + + + + sprg0, sprg1, and sprg3 + + + client interface shall preserve + + + client interface shall not modify + + + same as real-mode + + + same as real-mode + + +   + + + + + fpscr + + + client interface shall preserve + + + client interface shall preserve + + + same as real-mode + + + same as real-mode + + +   + + + + + f0-f31 + + + client interface shall preserve + + + client interface shall preserve + + + same as real-mode + + + same as real-mode + + +   + + + + + lr, + ctr, + xer + + + undefined + + + undefined + + + same as real-mode + + + same as real-mode + + +   + + + + + sr0-sr15 + + + client interface shall preserve + + + client interface shall preserve + + + same as real-mode + + + client interface shall not modify + + +   + + + + + vr0-vr31 + + + client interface shall preserve + + + client interface shall preserve + + + same as real-mode + + + same as real mode + + +   + + + + + dec + + + client interface shall preserve + + + client interface shall not modify + + + same as real-mode + + + same as real mode + + +   + + + + + Other SPRs + + + client interface shall preserve + + + client interface shall preserve + + + same as real-mode + + + same as real-mode + + + 3 + + + + +
+ Notes: + + + + Only the non-volatile fields ( + cr2-cr4) need to be preserved. + + + + As defined by section 6.3.1. of + . + + + + Other special purpose registers + + + + The + client interface handler shall perform the service + specified by the contents of the argument array that begins at the + address in + r3, place the return value (indicating success or + failure of the attempt to invoke the client interface service) back into + r3, and return to the + client program. This is typically done by a Branch + to Link Register ( + blr). + The + client interface handler shall preserve the contents + of the Stack Pointer (r1), TOC Pointer (r2), Condition Register ( + cr) all non-volatile registers (r13-r31) and all + special purpose registers except lr, ctr and xer. + The preservation of r2 allows TOC-based client programs to function + correctly. OF shall + not depend upon whether its client is TOC-based or + not. If the client interface handler, itself, is TOC-based, it must + provide for the appropriate initialization of its + r2. + +
+ +
+ +
+ Client Program Requirements + +
+ Load Address + + The client’s load address is specified by the value of the + load-base Configuration Variable. The value of + load-base defines the default load address for + client programs when using the + load method. + Load-base shall be a real address in real mode or a + virtual address in virtual mode. Note that this address represents the + area into which the client program file will be read by + load; it does not correspond to the addresses at + which the program will be executed. All of physical memory from + load-base to either the start of OF physical memory + or the end of physical memory, whichever comes first, shall be available + for loading the client program. + +
+ +
+ Initial Program State + This section defines the “initial program state”, the + execution environment that exists when the first machine instruction of a + + client program of the format specified above begins + execution. Many aspects of the “initial program state” are + established by + init-program, which sets the + saved program state so that subsequent execution of + go will begin execution of the + client program with the specified environment. + +
+ Initial Register Values + Upon entry to the client program, the following registers shall + contain the following values: + + + Initial Register Values + + + + + + + + + + + Register(s) + + + + + Value + + + + + Notes + + + + + + + + msr + + + EE = 0, interrupts disabled + + + 1 + + + + +   + + + PR = 0, supervisor state + + +   + + + + +   + + + FP = 1, floating point enabled + + +   + + + + +   + + + ME = 1, machine checks enabled + + +   + + + + +   + + + FE0, FE1 = 0, floating point exceptions disabled + + +   + + + + +   + + + IP, see + + + +   + + + + +   + + + IR,DR, see + + + +   + + + + +   + + + SF=0, 32-bit mode + + +   + + + + +   + + + ILE,LE, little endian support + + + 2 + + + + + r1 + + + See + + + +   + + + + + r2 + + + 0 + + + 3 + + + + + r3 + + + reserved for platform binding + + + 4 + + + + + r4 + + + reserved for platform binding + + + 4 + + + + + r5 + + + See + + + +   + + + + + r6, r7 + + + See + + + +   + + + + + Other user mode registers + + + 0 + + +   + + + + +
+ + Notes: + + + + + OF will typically require the use of external interrupts for its + + user interface. However, when a + client program is invoked, external interrupts shall + be disabled. If a + client program causes the invocation of the user + interface, external interrupts + may be re-enabled. + + + + The 601 processor uses a different mechanism for controlling the + endian-mode of the processor. On the 601, the LE bit is contained in the + HID0 register; this bit controls the endian-mode of both program and + privileged states. + + + + OF does not make any assumptions about whether a client program + is TOC-based or not. It is the responsibility of the client program to + set + r2 to its TOC, if necessary. + + + + As defined in the relevant section of the platform + binding. + + + +
+ +
+ Initial Stack + + Client programs shall be invoked with a valid stack pointer ( + r1) with at least 32 KB of memory available for + stack growth. The stack pointer shall be 16-byte aligned, reserving + sufficient room for a linkage area (32 bytes above the address in r1). If + the system is executing in Real-Mode, the value in r1 is a real address; + if in Virtual-Mode, the address in r1 is a mapped virtual address. + +
+ +
+ Client Interface Handler Address + + When client programs are invoked, + r5 shall contain the address of the entry point of + the + client interface handler. If the system is executing + in Real-Mode, the value in r5 is a real address; if in Virtual-Mode, the + address in r5 is a mapped virtual address. + + Note: This address points to the first instruction of + the + client interface handler, not to a procedure + descriptor. + +
+ +
+ Client Program Arguments + + The calling program + may pass to the client an array of bytes of arbitrary + content; if this array is present, its address and length shall be passed + in registers + r6 and + r7, respectively. For programs booted directly by + OF, the length of this array is zero. Secondary boot programs may use + this argument array to pass information to the programs that they + boot. + + Note: The OF standard makes no provision for + specifying such an array or its contents. Therefore, in the absence of + implementation-dependent extensions, a client program executed directly + from an OF implementation will not be passed such an array. However, + intermediate boot programs that simulate or propagate the OF client + interface to the programs that they load can provide such an array for + their clients. + + Note: + boot command line arguments, typically consisting of + the name of a file to be loaded by a secondary boot program followed by + flags selecting various secondary boot and OS options, are provided to + client programs via the + “bootargs” and + “bootpath” properties of the + /chosen node. + +
+ +
+ +
+ Caching + + The caches of the processor shall be enabled when the client + program is called. The I-cache shall be consistent with the D-cache for + all memory areas occupied by the client program. Memory areas allocated + on behalf of the client program shall be marked as cacheable. Accesses to + “I/O” devices (especially, to devices across + “bridges”) shall be made with the register access words + (e.g., + %rl@). All processors in a SMP system shall have the + same consistent view of all memory areas (for data references). No more + than one processor shall have a modified copy of the same data area in + its cache when the client program is called. + + Note: If firmware makes cacheable M=0 data references + from different processors on a SMP system, it may have to perform + additional cache management to meet this requirement. + +
+ +
+ Interrupts + + OF requires that interrupts be “vectored” to its + handlers when it is in control of the processor; this will occur when the + User Interface is running. Client Interface calls are considered to + execute in the environment of the client, and hence, OF does not assume + ownership of interrupts. + + Note: There used to be a paragraph here that said an + area of memory was to be reserved by the client program for the exclusive + use of OF. This requirement has been removed, since the sharing of + interrupt vectors on these platforms has not been found to be + practical. + OF shall save and restore the first location of each interrupt that + it wants to “take over”. I.e., whenever OF needs the use of + an interrupt, it shall save the current contents of the corresponding + entry point and replace that location with a branch to its entry point. + When OF returns control, it shall restore the RAM location to its + original contents. + +
+ +
+ Client callbacks + + This section defines the callback mechanism that allows OF to + access services exported to it by the client program. As described in + section 6.3.2 and the glossary entries for + callback and + $callback in + , the callback mechanism + follows the same rules as those of Client interface calls. I.e., an + argument array is constructed by OF and the address + of that array is passed (via + r3) to the client’s callback routine; the + address of the callback routine is supplied to OF by means of the + set-callback client call. + If the system is running in Real-Mode, the address of the client + callback routine shall be a real address; if it is running in + Virtual-Mode, the client callback routine address shall be a mapped + virtual address. + +
+ Real-Mode physical memory management assist + callback + + Once the control of physical memory is transferred to the client + program, OF which is running in real-mode shall use the callback service + provided by the client program to allocate physical memory. Client + programs which expect OF to operate in read-mode must implement the + following physical memory management client callback routines for + OF: + + + + alloc-real-mem + + IN: [address] min_addr, [address] max_addr, size, mode + OUT: error, [address] real_addr + This routine allocates a contiguous physical memory of + size bytes within the address range between + min_addr and + max_addr. The + mode parameter contains the WIMGxPP bits as defined + in + A non-zero error code shall be + returned if the mapping cannot be performed. If error code is zero (i.e. + allocation is succeeded) the routine returns the base address of the + physical memory allocated for OF. + + + + +
+ +
+ Virtual address translation assist callbacks + + As mentioned in + , when OF is in Virtual-Mode, + client programs that take over control of the system’s memory + management must provide a set of callbacks that implement MMU functions. + This section defines the input arguments and return values for these + callbacks. The notation follows the style used in chapter 6 of the OF + specification + . + + + + map + + IN: [address] phys, [address] virt, size, mode + OUT: throw-code, error + This routine creates system-specific translation information; this + will typically include the addition of PTEs to the HTAB. If the mapping + is successfully performed, a value of zero shall be placed in the + error cell of the argument array; a non-zero error + code shall be returned in + error if the mapping cannot be performed. + + + + + unmap + + IN: [address] virt, size + OUT: throw-code + The system removes any data structures (e.g., PTEs) for the virtual + address range. + + + + + translate + + IN: [address] virt + OUT: throw-code, error, [address] real, mode + The system attempts to compute the real address ( + real) to which the virtual address ( + virt) is mapped. If the translation is successful, a + PTE shall be placed into the HTAB for this translation, the number of + return cells shall be four with the resulting real address returned in + real and + error shall be set to + false (0). If the translation is not successful, the + number of return cells shall be two and + error shall be set to a non-zero error code. + This call shall be made when OF handles a DSI/ISI within the User + interface. A successful result of the translate call indicates that OF + can complete the interrupted access; a failure indicates that an access + was made to an invalid address. + + + + +
+ +
+ +
+ +
+ User Interface Requirements + + An implementation of OF for the PA shall conform to the core + requirements as specified in + and the following PA-specific + extensions. + +
+ Machine Register Access + + The following + user interface commands represent PA registers within + the + saved program state. Executing the command returns + the saved value of the corresponding register. The saved value may be set + by preceding the command with + to; the actual registers are restored to the saved + values when + go is executed. + The following command displays the PA processor's + saved program state. + + .registers + + +
+ Branch Unit Registers + + + + %cr + + Access saved copy of Condition Register. + + + + + %ctr + + Access saved copy of Count Register. + + + + + %lr + + Access saved copy of Link Register. + + + + + %msr + + Access saved copy of the low order 16 bits of SRR1 register. + + + + + %srr0 and + %srr1 + + Access saved copy of Save/Restore Registers. + + + + + %pc + + An alias of “ + %srr0 + + + + +
+ +
+ Fixed-Point Registers + + + + %r0 through + %r31 + + Access saved copies of fixed-point registers. + + + + + %xer + + Access saved copy of XER register. + + + + + %sprg0 through + %sprg3 + + Access saved copies of SPRG registers. + + + + +
+ +
+ Floating-Point Registers + + Unlike the other registers, the floating point unit registers are + not normally saved, since they are not used by OF. The following access + words, therefore, access the registers directly. + + + + %f0 through + %f31 + + Access floating point registers. + + + + + %fpscr + + Access Floating Point Status and Control Register. + + + + +
+ +
+ +
+ +
+ Configuration Variables + + In addition to the standard Configuration Variables defined by the + core OF document + , the following Configuration + Variables shall be implemented for the PA: + + + + “little-endian?” + + This boolean variable controls the endian-mode of OF. If + true (-1), the endian-mode is Little-Endian; if + false (0), the endian-mode is Big-Endian. The default + value is implementation dependent. + + + + + “real-mode?” + + This boolean variable controls the address translation mode of OF. If + true (-1), the addressing mode is Real-Mode; if + false (0), the addressing mode is Virtual-Mode. The + default value is implementation dependent. + + + + + “real-base” + + This integer variable defines the starting physical address to be + used by OF. + + + + + “real-size” + + This integer variable defines the size of the physical address space + which can be used by OF. + + + + + “virt-base” + + This integer variable defines the starting virtual memory address + which can be used by OF. + + + + + “virt-size” + + This integer variable defines the size of the virtual address space + which can be used by OF. + + + + + “load-base” + + This integer variable defines the default load address for + client programs when using the + load method. The default value is implementation + dependent. + + + + +
+ +
+ MP Extensions + + This section specifies the application of OF to PA multiprocessor + (MP) systems. An OF implementation for an MP PA system shall implement the + extensions described in this section as well as the requirements described + in previous sections of this binding. + +
+ The Device Tree + + This section defines an additional property under the + /chosen node for a MP extension. Refer to + for more details about the + device tree structure for a MP Configuration. + +
+ Additional Properties + + /chosen Node Properties + + + + “cpu” + + property name, identifies the running CPU. + prop-encode-array: An integer, encoded as with + encode-int, which contains the i-handle of the CPU + node that is associated with the “running” CPU. + + + + + +
+ +
+ +
+ Initialization + + OF shall select one processor, using an algorithm of its choice, to + be the “master” processor, which performs the role of the + single processor on a uniprocessor system, either booting the client or + providing the user interface. OF shall place all the remaining processors + into stopped state, a state in which the processor does not perform OF or + client functions and does not interfere with the operation of the master + processor. A processor in stopped state remains in that state unless and + until an executing client starts it using the + start-cpu client service defined below. + Client programs shall use the OF + start-cpu client interface service to start all + processors before it reclaims the OF memory + On machines in which a machine check on one processor is broadcast + to all processors, the processors which are either in the idle or stopped + state shall not change their states due to a machine check on another + processor: OF shall not depend on the contents of the low vector (IP=0) + in the event of a machine check. + + depicts the relationship of the + Running, Stopped and Idle States to each other. The + Client Interface Service calls are shown as how to + move between the states. + +
+ Stopped, Running, and Idle State Diagram + + + + + + + + +
+ + Note: OF's memory cannot be reclaimed by a client if + a CPU is in the “stopped” or “idle” state. + +
+ +
+ Client Interface Services + + The following client interface services are added for MP support on + PA systems. These interfaces make the client program responsible for any + Inter-CPU communication needed for these interfaces. The rationale for + this is to architecturally separate the Inter-CPU communication mechanism + of the firmware from the client program and vice versa. + + + + start-cpu + + IN: nodeid, pc, arg + OUT: none + This client interface service starts the CPU. The + nodeid is the phandle of a node whose device_type is + “cpu”. + Start-cpu arranges for the CPU identified by phandle + in nodeid to begin executing client code at the real + address given by the + pc input with an argument, + arg, passed in register r3. When it begins execution, + the started processor shall be in the endian mode of the client program, + and in real (not translated) addressing mode. The contents of registers + other than r3 are indeterminate. + A client should not call + start-cpu for the processor on which it is running, + effectively restarting with a new pc and abandoning the only client + thread. A jump or branch instruction shall be used instead to achieve the + objective. + start-cpu permits more than one processor to run at + the same time, enabling multi-threaded client execution. In general, an + OF client shall avoid multi-threaded operation within OF. Usually, this + means that client threads running on different CPUs must use mutual + exclusion to prevent more than one processor from making client service + requests at any one time. The exceptions are that a client thread may + invoke either the + stop-self or + idle-self client services defined below at any + time. + Note: The results are undefined if the CPU identified + by *phandle* has already been started (e.g. it is already running and has + not exited) or *phandle* is not a valid package handle of a CPU device + node. + + + + + stop-self + + IN: none + OUT: none + OF places the processor on which the caller was running into the + “stopped” state. The client program is not-resumable. + Note: When an MP client program exits, one CPU + invokes the + exit client interface service, the others invoke the + stop-self service. + + + + + idle-self + + IN: none + OUT: none + OF places the CPU on which this service was invoked into an 'idle' + state, saving the *current state* of the client program, so that the + client program may be resumed. + A processor in idle state can be resumed using + resume-cpu service defined below or restarted using + start-cpu. If the processor is resumed, it executes + a normal return to the client, as if its call to + idle-self had just completed. + + Note: When a client program wants to enter the + firmware user interface, one CPU invokes the + enter client interface service, the others invoke the + idle-self service. The rational is that the user + interface may affect the machine state in any way that it desires, + therefore the client shall not depend on it. + + + + + resume-cpu + + IN: nodeid + OUT: none + This client interface service is used to resume an *idled* CPU. The + nodeid is the phandle of a CPU node in idle + state. + resume-cpu arranges for that CPU to restore the + CPU’s state as saved by + idle-self and begin return to the client, completing + the idle-self client service call that placed the CPU into idle state. + The results are undefined if the CPU identified by *phandle* is not in an + *idle* state by a previous call to the + idle-self client interface service. + Note: When the client program is resumed via the GO + (or similar) user interface command, the client program is resumed on the + CPU which called the + enter service; the client program is responsible for + calling the + resume-cpu service to resume other idled CPU's, if + that is the desired client program behavior. + + + + +
+ +
+ Breakpoints + + If the breakpoint is taken by the firmware, without the client + program's assistance, the other CPUs will continue to run in the client + program. The client program may field the breakpoint 'trap' or 'vector' + and idle the other CPUs before entering the PROM. The platform binding + document has to specify how this is done to avoid loss of state at + breakpoint time. + +
+ +
+ Serialization + + The firmware is a single threaded program, from the client + program's point of view. Only the + idle-self, + stop-self, + enter and + exit client interfaces may be invoked simultaneously + on different CPUs. Furthermore, only a single CPU may invoke the + enter or + exit client interface at any one time. The other CPUs + must use the + idle-self or + stop-self client interface service. + + Note: The results are undefined if the client program + invokes client interface services including breakpoint traps (other than + the + enter/exit stop-self/idle-self case listed above) + simultaneously on more than a single CPU. + + Note: Since locking mechanisms are subject to client + program policy, the client program is responsible for implementing any + necessary mechanism to insure that it adheres to this policy. Further, + the client program should disable any preemption mechanism before calling + a client interface service to avoid rescheduling a thread of execution in + the firmware on a different CPU if such a mechanism exists in the client + program. + +
+ +
+ +
diff --git a/DeviceTree/ch_devtree_system.xml b/DeviceTree/ch_devtree_system.xml new file mode 100644 index 0000000..206cf68 --- /dev/null +++ b/DeviceTree/ch_devtree_system.xml @@ -0,0 +1,10452 @@ + + + + System Binding + +
+ LoPAR Boot Flow + + This section gives a system boot process overview and defines the + enhancements to the standard OF boot process that are present in the boot + process for an LoPAR platform. + +
+ Boot Overview + The platform performs a normal OF boot (see + , as stated in the Core + Practice Document, Section 4.2.3, Start-up script evaluation. LoPAR + platforms provide an additional capability to assist the user in choosing + which of several OSs to boot. A key sequence can be used to interrupt the + normal boot flow and present the user with a + multiboot menu, which can be either graphical or + text-based at the discretion of the platform’s firmware, from which + the user can choose one of the installed or installable OSs. Presenting + the user with this choice can also be made the default mode of operation + at platform boot time, by means of the + auto-boot? and + menu? configuration variables. + An overview of a platform boot sequence and the additions of the + multiboot menu are given below: + + + + + + + + + + + + + The boot flow described above occurs after all of the devices have + been probed (i.e., by the execution of + probe-all); see + additional requirements for + probe-all method. + The boot sequence defaults to a normal boot if the boolean variable + + auto-boot? is true and + diagnostic-mode? is false. In this situation, the + system shall then boot from information contained in the configuration + variables + boot-device and + boot-file. + From the boot sequence above, entry to the + multiboot menu may occur anywhere after step ‘f’, + banner, if the platform key + sequence (multiboot menu) has been depressed or in step + ‘i’ if the boolean variable + menu? is true. + +
+ Additional Requirements for probe-all Method + + Before probing for plug-in devices, OF shall execute the + probe method, as with + execute-device-method, of any built-in device nodes. + The order of evaluation shall ensure that the + probe method of a parent device node is executed + before the + probe method of any of its children. + + Note: During this built-in probing, /rom nodes will + locate ROM based OSs. The FCode for these devices can publish their + “bootinfo” properties that are used + during the multiboot scenario as described below. + +
+ +
+ LoPAR Multiboot + + The boot choices identified to the user are defined by + bootinfo objects hich are located on various system + media. Each + bootinfo object contains information about one OS, + such as its name and description, an icon depicting it, and an OF command + sequence to load and execute it. The locations where + bootinfo objects can be found are specified by OF + device-specifiers that are the values of + configuration variables, the names of which are of the form + “bootinfo-nnnnn”, where + “nnnnn” is OS-specific. These + configuration variables are stored in the System + Partition in NVRAM and are published in the + device tree as properties under the + /options node. The + multiboot menu will use these + configuration variables to locate and parse + bootinfo to obtain the OS icon, description, + etc. + In addition to the + bootinfo-nnnnn configuration variables, the + multiboot menu will search the device tree for nodes + containing + “bootinfo” properties, which specify that + the node can supply a + bootinfo object. This is particularly useful for OSs + contained in ROMs. + + Note: The order prescribed by probe-all guarantees + that these properties be created before the + multiboot menu has been invoked. + Different versions of the same OS may each have their own + bootinfo and associated + configuration variables. Although it is possible to + put + bootinfo in any media location that OF can read, this + specification defines standard locations for various types of media, to + allow the firmware to establish the + bootinfo configuration variables automatically in + many cases. + +
+ +
+ Bootinfo Configuration Variables + + A + bootinfo configuration variable is any + configuration variable that meets the following + requirements: + + + + Its name is of the form + “bootinfo-nnnnn”, where + nnnnn is a string of at most 22 characters from the + set of valid characters for OF configuration variable names. The exact + value of + “nnnnn” for a particular OS may be chosen + by that OS. The naming convention for the OS should be chosen to avoid + possible naming conflicts between OS vendors. + + + + Its value is an OF + device-specifier that identifies an object (e.g. disk + file, tape file, disk partition or + /rom child node) whose contents are a + “bootinfo object” as defined + below. + + + +
+ +
+ Bootinfo Properties + + Any node in the device tree can have a + “bootinfo” property whose value specifies + the arguments to use in opening that device in order to access its + bootinfo object. + + “bootinfo” S + + property name locates the node’s + bootinfo object + + prop-encoded-array: A string, encoded as with + encode-string + The presence of this property signifies that the device has an + associated + bootinfo object. The value is a text string such + that when this device’s node + open method is called, the value of text string that + is passed to the device’s node + open method is + “my-args”. When so opened, subsequent + calls to the node’s + “read” method will yield the contents of + the node’s + bootinfo object. + +
+ +
+ Standard Locations for Bootinfo Objects + + The standard locations for + bootinfo objects on various LoPAR media and + partition types is shown in the table below. An OS must put its + bootinfo object in the standard location in order to + guarantee interoperability with the LoPAR + multiboot menu mechanism. + + + Standard Pathnames for + <emphasis>bootinfo.txt</emphasis> File + + + + + + + + + + Name + + + + + Device/Partition + + + + + Notes + + + + + + + + Installation Media: + + +   + + +   + + + + + Any block device: + + + device:partition,\ppc\bootinfo.txt + + + Any file system format + + + + + Tape: + + + device:0 (Note 1) + + + Presence of bootinfo.txt is optional + + + + + ROM: + + + device:bootinfo + + + bootinfo is the value of the “ + bootinfo ” property in a /rom child + node + + + + + Network: + + + Could specify bootinfo.txt or some other file from the + Bootp server + + + Specifying bootinfo.txt from the Bootp server is + optional + + + + +
+ + Note 1: If bootinfo.txt file is not present, file 0 + should contain a program image file for a bootable tape. + Example of installed ( + “bootinfo-nnnnn”) block device + (disk): + ALIAS EXAMPLE: + bootinfo-aix-4.3=disk:2 (The contents of partition 2, which is + probably a “0x41” partition, on the default disk, is the + bootinfo.txt file for a version of the AIX + OS.) + bootinfo-nt-4.0=disk:\os\winnt\bootinfo.txt + NON-ALIAS EXAMPLE: + bootinfo-aix-4.4=/pci@ff500000/pci3,1000@10/sd0,0:3 (The contents + of partition 3, which is probably a “0x41” partition, on the + SCSI disk at target 0 unit 0, is the + bootinfo.txt file for a version of the AIX + OS.) + +
+ +
+ Bootinfo Objects + + The information used by OF to display information in the + multiboot menu and to + locate and process an OS load image is contained + within a sequence of text that is called a + bootinfo object. The text comprising the bootinfo + object uses SGML syntax, as defined in + , with tags identifying the + subordinate elements. + The following outline is a summary of the organization of the + bootinfo object. Elements at the same level do not + have any required order. The tags are illustrated in upper case, but + shall be processed in a case-insensitive manner. + + + .... + + + .... + + + .... + + + + hh hh hh hh . . . + + +]]> + + + Notes: + + + + + If ‘SIZE’ is not present, assume default of 64,64. + If ‘COLOR-SPACE’ is not present, assume default of + 3,3,2. + + + + Another <chrp-boot> tag sequence could define a different + boot selection + + + + LoPAR platforms will recognize only the tags between the + beginning <chrp-boot> tag until the end </chrp-boot> tag. If + a tag is unrecognized, the material will be ignored until the end tag. + Other non-<chrp-boot> tags may be supported in the future. These + additional selections would also be presented to the user as boot + options. + + + +
+ Bootinfo Entities + + SGML provides “entities” that provide symbolic names + for text. When the entity names are contained within & and + ‘;’, the entity is replaced with text as defined by the + entity; i.e., entities provide a “macro” substitution + capability. The + bootinfo object may use entities to supply pathname + components that depend upon the location of the file. Also, entities have + been defined for the standard SMGL Tags for the presence of the + ‘<‘, ‘&’ and ‘>’ characters + in the text as &lt;, &amp; and &gt;. Within the + <BOOT-SCRIPT> element, the following entities are defined with + respect to the fully qualified pathname of the + bootinfo object: + + + + device + + the device component. + + + + + partition + + the partition component. + + + + + directory + + the directory component. + + + + + filename + + the filename component. + + + + + full-path + + the entire fully qualified pathname. + + + + + The fully qualified pathname could be represented by the following + text: + + + Note: Underlined portions illustrate where entities + are positioned within the full pathname. +
+ +
+ Bootinfo Character Sets + The character set used by the bootinfo.txt file is ISO-8859-1 + (Latin-1). Element tags and entity names are not case sensitive; all + other text is case sensitive. +
+ +
+ Element Tag Descriptions + The following sections describe each of the element tags and how + they are used. +
+ +
+ CHRP-BOOT Element + This element provides the grouping for each OS that is represented + within a single bootinfo.txt file. Multiple CHRP-BOOT sections are + allowed within a single bootinfo.txt file. +
+ +
+ OS-NAME element + This element contains the complete name of the OS. +
+ +
+ BOOT-SCRIPT element + This element contains an OF script that is executed when the OS + defined by this CHRP-BOOT section is selected to be loaded. Each line of + this element is processed as if it were entered from the input device of + the user interface. Typically, the last line of this script would contain + a + boot command; the pathname of the OS’s load + image can be constructed with the entities described above. +
+ +
+ ICON element + This element describes the OS icon that can be displayed by the + multi-boot process. The icon should be designed to be pleasant against a + light background. + The SIZE parameter consists of a two decimal numbers, separated by + a comma, that represent the width and height (in pixels) of the icon, + respectively. The default value is “64,64” + The COLOR-SPACE parameter consists of three decimal numbers, + separated by commas, that represent the number of bits for the red, + green, and blue components of each pixel. The default value is + “3,3,2”1. + + Note 1: This version of LoPAR supports only a 3,3,2 + icon color-space and 64,64 icon size. Other icon size’s and + color-space’s are reserved for future implementations. + If an icon is not stated, the platform will display a generic + system icon that is platform dependent. + +
+ BITMAP element + This element specifies the bitmap. It consists of a sequence of hex + digit pairs, each of which defines a pixel; white spaces is allowed + between pixel values. The number of hex digit pairs is defined by the + product of the width and height values of the SIZE parameter. + + + + icon string example: + + <icon size=64,64 + color-space=3,3,2><bitmap>hh hh... + hh2</bitmap></icon> + + + + + + Note 2: Hex string would be 8192 characters for a + size=64,64 in the above example. + For the two examples below, the tags have been indented and + separated by line feeds for each start/end tag pair to make a more + readable script style. + + + AIX Bootinfo Object Example: + + + AIX 4.2.D.0 + AIX 4.2.D.0 + boot &device;:2 + hh ... hh1 +]]> + + AIX Diagnostics Bootinfo Object Example: + + AIX 4.2.D.0 Diagnostics + AIX 4.2.D.0 Diagnostics + boot &device;:2 diag + hh ... hh +]]> + + + Note: 64x64 icon size would have 8192 hex string + characters in the "hh ... hh" field above. +
+ +
+ +
+ +
+ Multiboot Menu + If the boot sequence is interrupted by the multiboot key sequence, + then the firmware shall present a + multiboot menu that provides at least the functions + listed below. The form of the menu (e.g. graphical or text- oriented) and + the selection mechanism (e.g. numbered choices, arrow keys, or mouse) are + platform-dependent. + Multiboot Required Functions: + + + + Locate all bootinfo objects specified by bootinfo configuration + variables and device node + “bootinfo” properties. For each + bootinfo object, present a choice corresponding to + each valid <chrp-boot> section contained therein. For each such + choice, allow the user to either: + + + + Execute the contents of that + bootinfo object’s <boot-script> + element. + + + + Set the + boot-command configuration variable to the contents + of that + bootinfo object’s <boot-script> + element. + + + + + + Present a choice corresponding to each install device, which, + when invoked, will attempt to locate a bootinfo object at the + device’s standard location (see Table 1). + + + + Allow the user to manage configuration variables + + + + Allow the user to invoke the OF user interface + + + + Additional options that could be implemented would be to provide a + means to get to diagnostics or specific platform options. + There shall be at least one key sequence to enter the multi-boot + platform function for an LoPAR platform. + + Note: OS have the responsibility to update the NVRAM + System Partition Variable to reflect a change where the + bootinfo.txt file is located; e.g., moving to a + different disk device. Also, the OS is responsible for maintaining the + contents of the + bootinfo.txt file. + +
+ +
+ +
+ Reboot-Command Variable Description + + The OS can cause OF to execute a specified sequence of commands at + the next boot by setting the value of the + reboot-command configuration variable. LoPAR + firmware implementations shall implement the following configuration + variable. + + + + reboot-command(-- addr len) [N] + + One time or temporary reboot command. + The value of this configuration variable is a string consisting of + zero or more lines of text, with lines separated by either + <return>, <linefeed>, or + <return><linefeed>. + During firmware start-up, just prior to checking the + auto-boot? configuration variable for automatic + booting, the firmware shall check the value of + reboot-command. If the value is not the empty + string, the firmware shall save the value to a temporary location, set + reboot-command to the empty string, and evaluate the + saved value as though it were a series of user interface command + lines. + If the evaluation of + reboot-command returns without executing, the + firmware shall proceed with its normal start-up sequence. In typical + usage, however, the value of + reboot-command will include a + boot command that starts a client program and does + not return. + + + + +
+ +
+ +
+ LoPAR Processor + + OF defines a minimum cell size of 32 bits; therefore, only one cell + is necessary to represent addresses up to 4GB (32 bits). Two cells are + necessary to represent addresses above 4GB and within 64 bits. Also, two + cells are necessary to represent sizes greater than 4GB. + +
+ Processor Endian-ness Support + LoPAR requires the use of PA processors that support Big-Endian + storage format. LoPAR allows for the use of PA processors that support + Little-Endian storage format in addition to Big-Endian storage + format. +
+ +
+ Multi-Threading Support + + The processors used in some platforms support multiple threads of + execution. This processor model differs from Symmetric Multi-Processors + in that the multiple threads of execution share the processor hardware to + such an extent that operations on one thread can significantly affect the + performance of another tread of the same processor. Therefore, the + processor is represented with a single processor node having multiple + interrupt server numbers. The OS is then free to start and stop + multi-threading as the processing environment dictates. The client + interface call + start-cpu, operates on the full CPU as presented in + the device tree, upon successful completion, the started CPU is running + in single threaded mode, the active thread being the one associated with + the first interrupt server number in the + “ibm,ppc-interrupt-server#s” property. + The client interface calls: + stop-self, idle-self, resume-cpu are all defined to + operate on the full CPU when called in single threaded mode, the behavior + of these calls if called with multiple threads active is implementation + dependent, it is suggested that the implementation deactivate all but one + thread before performing the call’s standard function. + +
+ +
+ +
+ OF Platform Extensions + This section defines OF properties, methods, device tree structure + and Client Interface Service requirements for LoPAR platforms. + The naming conventions for IBM unique OF properties and devices are + as follows: + + + + Properties created for use only by IBM compatible implementations + must have the string + “ibm,” as a prefix to the property + name. + + + + Property names prefixed with the string + “ibm,fw-” are reserved for and must be + controlled by the Firmware Area. + + + + An IBM property name which does not have the firmware or AIX prefix + must be defined in this document unless documented elsewhere. + + + + The value of a device + “name” whether reported through the + compatible property or name property for a device implemented by IBM must + contain the string + “IBM,” as a prefix unless it conforms to a + binding which specifies otherwise. + + + +
+ Properties for Dynamic Reconfiguration + + The following standard properties are define for all dynamically + reconfigurable platform nodes. + + + + “ibm,drc-indexes” + + + property name denotes an integer index to be used to + communicate to the firmware what connector is to be operated upon for the + various RTAS calls used for DR. + + prop-encoded-array: An integer encoded as with + encode-int, followed by a list of integers also + encoded as with + encode-int. + For each DR connector, a unique integer index is provided which + uniquely identifies the DR connector for purposes of the + ibm,configure-connector, + set-indicator, and + get-sensor RTAS calls. The first element of the array + is the number of connectors associated with the node. The second element + of the array is the index which represents the first connector associated + with the node, the third element the second connector, and so on until + all of the node’s DR connectors are specified. + + + + + “ibm,my-drc-index” + + + property name denotes an integer index (value of the + entry in the + “ibm,drc-indexes” property) for the + connector between the node and the node’s parent. + + prop-encoded-array: An array of integers encoded as + with + encode-int. + + + + + “ibm,drc-names” + + + property name describes the external labeling of the + DR connectors. + + prop-encoded-array: An integer encoded as with + encode-int, followed by a list of strings each + encoded as with + encode-string. + For each DR connector, a unique human-readable name for a + connector. The first element of the array is the number of connectors + associated with the node. The second element of the array is the + human-readable name which represents the first connector associated with + the node, the third element the second connector, and so on until all of + the node’s DR connectors are specified. + + + + + “ibm,drc-power-domains” + + + property name gives the power domain number for each + connector associated with the node, which is the domain number to be used + in the + set-power-level RTAS call, if necessary. + + prop-encoded-array: An integer encoded as with + encode-int, followed by a list of integers also + encoded as with + encode-int. + For each DR connector, the power domain which will be controlled + for DR operations (the power domain in which the DRC resides), and which + will be used, if not -1, in the + set-power-level RTAS call for the connector. The + power domain number of -1 denotes a live-insertion power domain (in which + case, the + set-power-level RTAS call is not used). The first + element of the array is the number of connectors associated with this + node. The second element represents the domain number for the first + connector. The element following this is the domain number for the second + connector, and so on until all of the node’s DR connectors are + specified. + + + + + “ibm,drc-types” + + + property name, describes the type of each connector + associated with the node, in a human-readable form. + + prop-encoded-array: An integer encoded as with + encode-int, followed by a list of strings each + encoded as with + encode-string. + The first element of the array is the number of connectors + associated with this node. The second element of the array is the + connector type of the first connector associated with the node, the third + element the second connector, and so on until all the node’s DR + connectors are specified, and these elements will be one of the currently + defined connector types specified in + . + + + Currently Defined DR Connector Types + + + + + + + + Connector Type(character + string) + + + + + Description + + + + + + + + 1 + + + A 32-bit, 5 Volt conventional PCI slot which accommodates + cards that operate up to 33 MHz Only. + + + + + 2 + + + A 32-bit, 5 Volt conventional PCI slot which accommodates + cards that operate up to 33 MHz. + + + + + 3 + + + A 32-bit, 3.3 Volt conventional PCI slot which + accommodates cards that operate up to 33 MHz Only. + + + + + 4 + + + A 64-bit, 5 Volt conventional PCI slot which accommodates + cards that operate up to 33 MHz Only. + + + + + 5 + + + A 64-bit, 5 Volt conventional PCI slot which accommodates + cards that operate up to 33 MHz. + + + + + 6 + + + A 64-bit, 3.3 Volt conventional PCI slot which + accommodates cards that operate up to 33 MHz Only. + + + + + 7 + + + A 32-bit, 3.3 Volt conventional PCI slot which + accommodates cards that operate up to 66 MHz. IOAs that operate + up to 66 MHz will only operate at frequencies above 33 MHz if + there are no 33 MHz IOAs on the same bus. + + + + + 8 + + + A 64-bit, 3.3 Volt conventional PCI slot which + accommodates cards that operate up to 66 MHz. IOAs that operate + up to 66 MHz will only operate at frequencies above 33 MHz if + there are no 33 MHz IOAs on the same bus. + + + + + 9 + + + Reserved + + + + + 10 + + + Reserved + + + + + 11 + + + A 32-bit PCI-X capable slot which accommodates cards that + operate up to 66 MHz + + + + + 12 + + + A 32-bit PCI-X capable slot which accommodates cards that + operate up to 100 MHz + + + + + 13 + + + A 32-bit PCI-X capable slot which accommodates cards that + operate up to 133 MHz + + + + + 14 + + + A 64-bit PCI-X capable slot which accommodates cards that + operate up to 66 MHz + + + + + 15 + + + A 64-bit PCI-X capable slot which accommodates cards that + operate up to 100 MHz + + + + + 16 + + + A 64-bit PCI-X capable slot which accommodates cards that + operate up to 133 MHz + + + + + 17 + + + A 64-bit PCI-X capable slot which accommodates cards that + operate up to 266 MHz + + + + + 18 + + + A 64-bit PCI-X capable slot which accommodates cards that + operate up to 533 MHz + + + + + 19 + + + A PCI Express Rev 1 slot with 1x lanes. + + + + + 20 + + + A PCI Express Rev 1 slot with 2x lanes. + + + + + 21 + + + A PCI Express Rev 1 slot with 4x lanes. + + + + + 22 + + + A PCI Express Rev 1 slot with 8x lanes. + + + + + 23 + + + A PCI Express Rev 1 slot with 16x lanes. + + + + + 24 + + + A PCI Express Rev 1 slot with 32x lanes. + + + + + 25 + + + A PCI Express Rev 2 slot with 1x lanes. + + + + + 26 + + + A PCI Express Rev 2 slot with 2x lanes. + + + + + 27 + + + A PCI Express Rev 2 slot with 4x lanes. + + + + + 28 + + + A PCI Express Rev 2 slot with 8x lanes. + + + + + 29 + + + A PCI Express Rev 2 slot with 16x lanes. + + + + + 30 + + + A PCI Express Rev 2 slot with 32x lanes. + + + + + CPU + + + Logical CPU + + + + + MEM + + + Logical Memory Region + + + + + MEM-n + (where n is a + non-zero integer) + + + Extended Logical Memory Region(s). Used with the Reserved + Memory option. + + + + + PHB + + + Logical PCI Host Bridge + + + + + SLOT + + + Logical I/O slot + + + + + PORT + + + Logical Port + + + + +
+
+
+ + + “ibm,phandle” + + + property name, defines the phandle for the + node. + + prop-encode-array: An integer encoded with + encode-int. + + +
+ +
+ +
+ OF Root Node + This section defines additional properties and methods associated + with LoPAR platforms that OSs expect to find in the root node. Unit + addresses in an LoPAR system are limited to 60 bits in length + corresponding to the maximum real address supported by the POWER + processor architecture. The unit address of all non-system nodes that are + children of the root node shall have the same value each time the + platform is booted; i.e., shall be invariant for each boot + process. + + Notes: + + + + + This requirement ensures that the PHB would have a stable unit + address. Violations of this rule may require reinstallation of an + OS. + + + + The recommended practice is to generate a virtual unit address + for PHB nodes. This is done by giving a zero length to its first reg + property with an address that is selected such that it remains constant. + In single bridge platforms, the value is chosen based upon historical + precedent of the predecessor product. In multi-enclosure platforms, the + virtual unit address is based upon the manufacturing serial number to + insure uniqueness. + + + +
+ Root Node Properties + + This section defines the additional properties or values which + shall be present in the root node unless otherwise specified. + + + + “#address-cells” [S] + + Standard + property name, encoded as with + encode-int, that specifies the number of cells + required to represent physical addresses on the processor bus. The value + of + “#address-cells” for the processor bus + shall be 1 or 2 depending on whether there is any memory addressable at + or above 4GB’s. + + + + + “#size-cells” [S] + + Standard + property name, encoded as with + encode-int, that specifies the size of cells + required to represent physical addresses on the processor bus. The value + of + “#size-cells” for the processor bus shall + be 1 or 2 depending on whether there is any memory addressable at or + above 4GB’s. + + + + + “clock-frequency” [S] + + Standard + property name, encoded as with + encode-int, that represents the primary system bus + speed (in hertz). + + + + + “ibm,extended-clock-frequency” + + + property name: Property that represents the primary + system bus speed in hertz of this node. This property allows the encoding + of multi-giga-hertz quantities. + + prop-encoded-array: Consisting of two cells + (freq-hi, freq-lo) each encoded as with + encode-int, such that their combined value is + (freq-hi || freq-lo). + + + + + “system-id” [S] + + Standard + property name, encoded as with + encode-string, that contains the identification of + the computer system (Reference the + “name” property in + ). This string should be unique + across all systems and all manufacturers. An example of an address of + this form is “0nnnnnnmmmmmm” where nnnnnn is a sequence of 6 + uppercase hexadecimal digits representing a 24-bit value that identifies + manufacturer and mmmmmm is a sequence of 6 uppercase hexadecimal digits + representing a 24-bit binary number assigned by the manufacturer to + assure uniqueness. + + Note: For platforms with built-in ethernet or other + IEEE 802-style interfaces, the 6-byte MAC address assigned to that + interface meets the requirements and could be used as the + system-id. + + + + + “model” [S] + + Standard + property name that is a printable string identifying + the manufacturer and model number of the platform. + + prop-encoded-array: Text string, encoded as with + encode-string. + The value of this property is a vendor dependent string which + identifies this platform via its manufacturer and model number. + + + + + “device_type” [S] + + Standard + property name that is a printable string identifying + the platform as LoPAR Compliant. + + prop-encoded-array: Text string, encoded as with + encode-string. + The value of this property is a string, + “chrp” which identifies the platform is + LoPAR Compliant. + + + + + “ibm,lpar-capable” + + + property name indicates that the platform is capable + of supporting logical partitioning and is only present on such systems. + This property is, however, present even if the platform is not currently + configured for logical partition operation. + prop-encoded-array: <NULL> + + + + + “ibm,converged-loc-codes” + + + property name indicates that the platform supports + the “Converged Location Code” option. This property shall be + present only on platforms that support the “Converged Location + Code” option. + + prop-encoded-array: <NULL> + + + + + “ibm,max-boot-devices” + + + property name indicates the maximum number of + boot-device entries that the OF automatic boot code will process (entries + after this number are ignored). Platforms that do not present this + property default to process a maximum of 5 entries. + + prop-encoded-array: an integer encoded as with + encode-int. + + + + + “ibm,aix-diagnostics” + + + property name indicates that the platform is capable + running AIX diagnostics. + + prop-encoded-array: <NULL> + + + + + “ibm,diagnostic-lic” + + + property name, presented to partitions authorized to + perform diagnostic operations, that indicates that the platform is + designed to use the specified license internal code package for + diagnostic services. + + prop-encoded-array: one or more encapsulated package + handles encoded as with + encode-int. + + + + + “ibm,io-server-lic” + + + property name indicates that the platform is designed + to use the specified license internal code package for I/O + services. + + prop-encoded-array: one or more encapsulated package + handles encoded as with + encode-int. + + + + + “ibm,plat-res-int-priorities” + + + property name that designates to the client program + that the platform has reserved one or more interrupt priorities for its + own use. + + prop-encoded-value: one or more ( + interrupt priority, range) pairs, where + interrupt priority is a single cell hexidecimal + number between 0x00 and 0xFF, and + range is an integer encoded as with + encode-int that represents the number of contiguous + interrupt priorities that have been reserved by the platform for its + internal use. + + + + + “ibm,eeh-default” + + + property name indicates the platform’s default + setting for the EEH option. + + prop-encoded-array: An integer encoded as with + encode-int that represents the platform’s + default setting for the EEH option. The defined states are: + 0= The platform boots up with the EEH option disabled. + 1= The platform boots up with the EEH option enabled. + + + + + “ibm,model-class” + + property name to indicate the platform class. + prop-encoded-array: string encoded as defined in + . + + + Example Encoding Strings + + + + + + + + + + Encoded String + + + + + Platform Class + + + + + + + + C5 + + + Blade/Entry + + + + + D5 + + + Entry + + + + + E5 + + + Entry + + + + + F5 + + + Mid-range + + + + + G5 + + + High-end + + + + + H5 + + + High-end + + + + + P5 + + + obsolete + + + + +
+
+
+ + + “ibm,partition-no” [S] + + property name to define the partition number of this particular + logical partition as established by the Hardware Management + Console. + prop-encoded-array: The logical partition number is a one cell + integer encoded as with + encode-int. + + + + + “ibm,partition-name” [S] + + property name to define the partition name of this particular + logical partition as established by the Hardware Management + Console. + prop-encoded-array: A NULL terminated string. + + + + + “ibm,platform-hardware-notification” + + + property name indicating to the OS the presence of + hardware for which the OS may need to take action. This property exists + to notify the OS of hardware elements on the platform which may require + special handling by the OS, such as in response to a hardware + errata. + + prop-encoded-array: An integer encoded as with + encode-int followed by a list of strings encoded as + with + encode-string. + The first element represents the number of strings to follow in the + property. Each string in the array names a hardware element that may + require the OS to take specific action. The intention is that the string + is to name the hardware element being reported. It is not the intention + to define (or even hint at) the action that the OS must take. It is + expected that some source outside this document will contain a cross + reference between these strings and documentation such as hardware errata + notes which define the action the OS must take. + If the + “ibm,platform-hardware-notification” + property is provided and a string begins with the <name> field of the + “name” (see + ) property in the + CPU nodes followed by an underscore, the characters + following the underscore are a hexadecimal representation of the contents + of a Processor Version Register that the platform may contain. + + + + + “ibm,fault-behavior” + + + property name to define the behavior of the Error Log + indicator relative to FRU faults. + + prop-encoded-array: An integer encoded as with + encode-int that represents how the Error Log indicator should be handled + when a FRU fault is detected. + Property non-existent -- The OS may set FRU Fault and Error Log + indicators for all errors (those it detected and those that the platform + reports to the OS). + Property exists with a value of 1 -- The OS only sets FRU Fault and + Error Log indicators for errors it detects. + + + + + “ibm,fru-9006-deactivate” + + + property name to define whether or not the OS should + deactivate 9006 indicators that it has activated. + + prop-encoded-array: An integer encoded as with + encode-int that represents how the OS should behave relative to FRU Fault + indicator deactivation. + Property non-existent -- The OS is responsible for deactivating FRU + level 9006 indicators that it has activated. + Property exists with a value of 1 -- The OS should not deactivate + FRU level 9006 indicators that it has activated, but is allowed to do so + (firmware does not block). The deactivation of the FRU level 9006 + indicators is platform and service procedure dependent. + + + + + “compatible” [S] + + Standard + property name that conveys the platform architecture + identifiers. + + prop-encoded-array: The concatenation, with + encode+, of an arbitrary number of text strings, + each encoded with + encode-string. + Specifies a list of platform architectures with which this platform + is compatible. This is used by a client program when it is trying to + determine the appropriate support for this platform. This property shall + include the substring “LoPAR-<LoPAR + version>-<Manufacturer>-<Manufacturer Version>” + where <LoPAR version> is the text (without blanks) after the word + “Version” on the cover page of the LoPAR specification that + the platform adheres to, <Manufacturer> is a unique string + identifying the manufacturer of the platform (see the OF standard + description of the + “name” property for suggestions), and + <Manufacturer_Version> is defined by the manufacturer of the + platform. + + Note: In order to comply with the OF Standard + description of the + “compatible” property, implementations + should place the “LoPAR-<LoPPR + version>-<Manufacturer>-<Manufacturer Version>” + substring after values that were present in the + “compatible” property prior to the + inclusion of the “LoPAR-<LoPAR + version>-<Manufacturer>-<Manufacturer Version>” + substring. + + + + + “ibm,max-vios-function-level” + + + property name to define the maximum vios function + level that a client shall permit. + + prop-encoded-array: An integer encoded as with + encode-int that represents the maximum VIOS level + that the client shall negotiate. See + for the definition of the + values of this property. + + + + + “ibm,partition-performance-parameters-level” + + + property name to define the level of partition + performance parameter reporting supported by the platform. + + prop-encoded-array: An integer encoded as with + encode-int that represents the level of partition performance parameter + reporting supported by the platform (See + ). + + + Level of Partition Performance Parameter Reporting + Supported + + + + + + + + + + Partition Performance Parameter + Level + + + + + Description + + + + + + + + 0 + + + Base Level + + + + + 1 + + + Addition of Processor Virtualization Resource Allocations + to H_GET_PPP and Virtualization Processor idle count to + H_PIC + + + + +
+
+
+ + + “ibm,preconfigure-usb-kvm” + + + property name the presence of which indicates that + the platform requires the operating system to force configuration of the + USB keyboard/mouse nodes during its configuration phase. + + prop-encoded-array: <NULL> + This property, when present in the root node, indicates that the + platform requires the operating system to force pre-configuration of USB + keyboard/mouse nodes internally during its configuration phase. This + property is presented only by platforms with a KVM switch that desire to + force configuration by one or more target operating systems that do not + fully support dynamic addition of USB keyboard and mouse unless the USB + keyboard and mouse are actually seen during the operating system + configuration phase, but may be present even if the KVM switch is not + present when the device tree is inspected. Forced pre-configuration is + needed since the operating system may not actually see the USB keyboard + and mouse during its configuration phase due to the KVM switch that the + platform uses only shows USB keyboard and mouse when those devices are + actually switched to the appropriate KVM switch port. + + + + + “ibm,enable-ci64-capable” + + + property name to define the platform supports the + “ibm,enable-ci64” method in the Client + Interface. + + prop-encoded-array: None, this is a name only + property. + + + + + “ibm,migratable-partition” + + + property name indicating that the platform supports + the potential migration of this partition. + + prop-encoded-array: NULL + + + + + “ibm,extended-address” [S] + + + property name indicates this platform supports + Peripheral Memory Spaces, Peripheral I/O Spaces, and SCA spaces above 4 + GB. + + prop-encoded-array: <none> + This property must be present. + + + + + “ibm,ignore-hp-po-fails-for-dlpar” + + + property name to define that the OS may ignore + failures of Hot Plug power off and isolate operations during a DLPAR + remove operation. See also Note 2 in + . + + prop-encoded-array: None, this is a name only + property. + + + + + “ibm,managed-address-types” + + + property name that conveys the platform's supported + types of external addresses that are reprogrammable. + + prop-encoded-array: The concatenation, with + encode+, of an arbitrary number of text strings as + described in + , each encoded with + encode-string. + + + Address types supported in + <emphasis role="bold"><literal>“ibm,managed-address-types”</literal></emphasis> + property + + + + + + + + + + Text String + + + + + Description + + + + + + + + ethernet_mac + + + Ethernet MAC address + + + + + ethernet_vlan + + + Ethernet VLAN ID (for default traffic) + + + + + san_wwn + + + Fibre Channel World Wide Name (covers both Port & + Node names) + + + + + sas_wwid + + + SAS IOA's WWID value + + + + +
+
+
+ + + “ibm,service-indicator-mode” + + + property name indicates in which service indicator + mode the platform is operating. + + prop-encoded-array: an integer encoded as with + encode-int that represents the mode. Defined values + are: + + + + + 0 = Platform is operating in the Guiding Light mode. + + + + 1 = Platform is operating in the Lightpath mode. + + + + +
+ + + Implementation Notes: + + + + + + In the absence of this property, the determination of how the OS + is to behave is made by the platform presenting or not presenting FRU + Fault indicators to the OS see chapter + . In the case where there are + no FRUs owned by the partition, the OS will not observe any FRU Fault + indicators assigned, even when the platform is operating in the Lightpath + mode. + + + + Presenting this property does not imply any relaxation of the + requirements spe3cified in chapter + . + + + +
+ +
+ Properties of the Children of Root + + + + “ibm,9009-domain” + + + property name that defines the index for a 9009 reset + component indicator, and if it exists, the corresponding 9009 sensor, for + the node in which the property exists. Multiple nodes may have the same + index, indicating that they belong to the same reset domain; including + nodes which are not descendents of the node which contains this property. + Descendents of a node containing this property will be in the same reset + domain. + + prop-encoded-array: An integer encoded as with + encode-phys that represents the index for the + indicator, and if it exists, for the corresponding sensor. + + + + + “ibm,associativity” + + property name to define the associativity domains for this + resource. + prop-encoded-array: One or more associativity lists. Each + associativity list consisting of a number of entries integer (N) encoded + as with + encode-int followed by N integers encoded as with + encode-int each representing an associativity domain + number. + + + + +
+ +
+ Root Node Methods + + This section defines methods associated with the platform via + “/” (the + root node). + + Boot Loader Note: The suggested behavior for boot + loader client programs: + + + + Check the “ibm,rpa-client-config” + property to see if + the platform recognized the “ignore-my-settings” bit in the + boot loader image i.e. YABOOT for LINUX. + + + + If recognized, check for existence of + “ibm,client-architecture-support” + and invoke that method with the + + >ibm,??? compatible (wording???) with the Real Base and Real Size constraints of the + kernel being loaded. + + + + If that method did not exist, invoke + “PROCESS-ELF-HEADER” from /packages/elf-loader with a + simulated ELF-header that the Linux kernel is compatible with. + + + + + ibm,client-architecture-support (ibm,architecture.vec -- + err?) + This method is called via the call-method + Client Interface Service, prior to starting other + partition processors or threads, to communicate to the platform, via the + ibm,architecture.vec structure, the architecture + options that are supported by the client program. Based upon this + knowledge the platform configures itself and the device tree to represent + the most functional programming environment supported by the combination + of the platform, client program and user specified constraints. If + multiple partition processors or threads are active at the time of the + ibm,client-architecture-support method call, or an + error is detected in the format of the + ibm,architecture.vec structure, the + err? boolean shall be + TRUE; else + FALSE. The + ibm,architecture.vec input parameter is the starting + address of a self defining structure in contiguous memory. Some bits + within the + ibm,architecture.vec structure option vectors + represent policies. When set, and an associated condition is detected, + the + ibm,client-architecture-support method does not + return and processing continues as with a boot failure of the client + program. The LoPAR architecture options that are selected by this method + are communicated in the value of the + “ibm,architecture-vec-5” property of the + /chosen node. + To ensure the greatest level of interoperability, the client + program should constrain itself to using the set of instructions and + environment specified for first level interrupt handlers, see Book III of + the + , while not attempting access + to potentially optional SPRs or the MSR prior to invoking the + ibm,client-architecture-support root node + method. + + Architecture and Implementation Notes: + + + + + Most of the + IBM,RPA-Client-Config ELF header functionality is + subsumed by the + ibm,client-architecture-support root method. However, + the + ibm,client-architecture-support root method does not + support the functionality specified through the ns.min-load field of the + IBM,RPA-Client-Config ELF header. Supporting firmware + implementations are prepared to move themselves out of the way when + loading client programs. + + + + When booting a client program, firmware processes an + IBM,RPA-Client-Config ELF header if present; a + subsequent call of the + ibm,client-architecture-support root method with + conflicting values in the + ibm,architecture.vec structure, overrides the + configuration variables set by the ELF header. + + + + + Formal definition of ibm,architecture.vec: + + + ibm,architecture.vec = a + PVR-list: + Number-of-option-vectors: + option-vectors[Number-of-option-vectors + 1] + + PVR-list = + Terminator-list-entry | + Non-terminator-list: Terminator-list-entry + + Non-terminator-list = Non-terminal-list-entry | + Non-terminal-list-entry : Non-terminator-list + + + List-entry = + 4-byte-mask: + 4-byte-PVR-value + + Terminator-list-entry = + List-entry such that ! + 4-byte-mask & + 4-byte-PVR-value != 0x00000000 + + Non-terminator-list-entry = List-entry such that ! + 4-byte-mask & 4-byte-PVR-value == + 0x00000000 + + Number-of-option-vectors = The number of option + vectors is n+1 where n is the numeric value of the byte (byte value of + 0x00 represents one option vector) + + option-vector (option-vectors number 1-255): 1 byte + length of the option vector where the number of bytes in the option + vector (including the first byte of length) is n+2 where n is the numeric + value of the byte (byte value of 0x00 represents a two byte option vector + -- one length byte and one bit-vector byte) followed by 1-256 bytes of + bit-vector. + + option-vector (option-vector number 256): is special + in that it is reserved for expansion. The first byte is again the number + of option vectors in the vector expansion (see definition of + Number-of-option-vectors above). This is followed by + 1-255 + option-vectors (see definition above) and potentially + a 256th + option-vector which is again an expansion option + vector, and so on. + + bit-vector: The structure of a bit vector is vector + specific, in general support for most options are indicated by setting a + specific bit to a 1, see + . + The + PVR-list of the + ibm,architecture.vec structure is processed for the + PVR value of each processor that the client program may be exposed to + until either a + List-entry allows the process to continue, or the + Terminator-list-entry has been processed. If no + List-entry allows the process to continue, then the + ibm,client-architecture-support method terminates + partition operation as with a boot failure. A + List-entry allows the process to continue if either + of the two following conditions hold. + + + + (Processor-PVR-value & + List-entry[4-byte-mask]) == (List-entry[4-byte-PVR-value] & + List-entry[4-byte-mask]) /*The client program explicitly + supports the processor implementation */ + + + + If (the processor requires no client support for errata) + && + (Logical-Processor-PVR-value & List-entry[4-byte-mask]) == + (List-entry[4-byte-PVR-value] & List-entry[4-byte-mask]) /* + Client program specifies support for this level of architecturally + compliant processors */ + + + + + List-entry values of special interest (these are + Terminator-list-entry values): + + + + 0x00000000 0xFFFFFFFF Single entry list that matches any PVR + value + + + + 0xFF000000 0x0FFFFFFF Single entry list that matches all + architecturally compliant processors. + + + + + ibm,architecture.vec option vectors + + + + + + + + + + + Option Array + + + + + Option Vector + + + + + Byte Number + + + + + Bit Number + + + + + Description + + + + + + + + Base + + + 1 + PowerPC Server Processor Architecture Level 6 + + + 1 + + + 0 + + + Ignore 1 + + + + + 1 + + + Cessation Policy 2 + + + + + 2 + + + Reserved for Expansion (0b0) + + + + + 3 + + + + + 4 + + + + + 5 + + + + + 6 + + + + + 7 + + + + + 2 + + + 0 + + + 2.00 + + + + + 1 + + + 2.01 + + + + + 2 + + + 2.02 + + + + + 3 + + + 2.03 + + + + + 4 + + + 2.04 + + + + + 5 + + + 2.05 + + + + + 6 + + + 2.06 + + + + + 7 + + + 2.07 + + + + + 3 + + + 0 + + + 2.08 + + + + + 1-7 + + + Reserved for Expansion (0b0) + + + + + 4-256 + + + Reserved for Expansion + + + + + Base + + + 2 + Open Firmware + + + 1 + + + 0 + + + Ignore 1 + + + + + 1 + + + Reserved + + + + + 2 + + + real-mode + + + + + 3 + + + Reserved for Expansion (0b0) + + + + + 4 + + + + + 5 + + + + + 6 + + + + + 7 + + + + + 2-3 + + + 0-15 + + + Reserved for Expansion (0x0000) + + + + + 4-7 + real-base + + + 0-31 + + + OF real starting address or -1 for platform + default + + + + + 8-11 + real-size + + + 0-31 + + + Maximum OF size or -1 for platform default + + + + + 12-15 + virt-base + + + 0-31 + + + OF starting virtual address or -1 for platform default + (valid for real-mode = 0) + + + + + 16-19 + virt-size + + + 0-31 + + + Maximum OF virtual size or -1 for platform default (valid + for real-mode = 0) + + + + + 20-23 + load-base + + + 0-31 + + + Starting address of the client program load or -1 for + platform default + + + + + 24-27 + min-rma-size + + + 0-31 + + + Minimum size of RMA in MB + + + + (total bytes = N*(2**20)) + + + + + 28-31 + min-load + + + 0-31 + + + Minimum client code to load at load-base or -1 for full + client program at load base + + + + + 32 + min-rma% + + + 0-8 + + + RMA size => M% * Partition_memory_size where M is the + value of this 8 bit field + + + + + + + + 33 + max-pft-size + + + 0-8 + + + The maximum size of the hash page table as 2**n + 17<n<46 + + + + + 34-256 + + + Reserved for Expansion + + +   + + + + + Base + + + 3 + IBM PowerPC Server Processor Options6 + + + 1 + + + 0 + + + Ignore 1 + + + + + 1 + + + Cessation Policy 2 + + + + + 2 + + + Reserved for Expansion (0b0) + + + + + 3 + + + + + 4 + + + + + 5 + + + + + 6 + + + + + 7 + + + + + 2 + + + 0 + + + Floating Point + + + + + 1 + + + VMX + + + + + 2 + + + Decimal Floating Point + + + + + 3 + + + Decimal Floating Point Facility (The value of the ibm,dfp + property indicates the architecture level of the + facility.) + + + + + 4 + + + Reserved for Expansion (0b0) + + + + + 5 + + + + + 6 + + + + + 7 + + + + + 3-256 + + + Reserved for Expansion + + + + + Base + + + 4 + LoPAR Implementation + + + 1 + + + 0 + + +   + + + + + 1 + + + Cessation Policy 2 + + + + + 2 + + + Reserved for Expansion (0b0) + + + + + 3 + + + + + 4 + + + + + 5 + + + + + 6 + + + + + 7 + + + + + 2 + + + 0-7 + + + Minimum VP entitled capacity percentage * 100 (if absent + assume 10%) + + + + + 2-256 + + + Reserved for Expansion + + + + + Base + + + 5 + LoPAR or OF Options 5 + + + 1 + + + 0 + + + Ignore 1 + + + + + 1 + + + Cessation Policy 2 + + + + + 2 + + + Reserved for Expansion (0b0) +   + + + + + 3 + + + + + 4 + + + + + 5 + + + + + 6 + + + + + 7 + + + + + 2 + + + 0 + + + Logical Partitioning: If set the client program supports + logical partitioning and associated hcall()s; else the client + program shall be run with the hypervisor bit on.7 + + + + + 1 + + + Shared Processor Logical Partitioning: If set the client + program supports the Shared Processor LPAR Option and may be + run with that option enabled; else the Shared Processor LPAR + Option shall be disabled for this partition. + + + + + 2 + + + ibm,dynamic-reconfiguration-memory: If set the client + program supports the + “ibm,dynamic-reconfiguration-memory” + property and it may be presented in the device tree; else, the partition + memory shall be represented with individual + memory nodes. + + + + + 3 + + + Large Pages: If this bit is set, the client supports + pages larger than 4 KB; else, the platform shall represent all + of memory as mapped via 4 K pages. + + + + + 4 + + + Alpha Partition 4 + + + + + 5 + + + Tolerate long delays in H_MIGRATE_DMA + + + + + 6 + + + Client supports donating dedicated processor + cycles + + + + + 7 + + + PCI Express/MSI Support: If set, the client supports PCI + Express implementations utilizing Message Signaled Interrupts + (MSIs). + + + + + 3 + + + 0 + + + On input to ibm,client-architecture-support a non-zero + value indicates that the client supports the I/O Super Page + Option (Support of >4K I/O pages) (Includes extensions to + H_MIGRATE_DMA for >4K I/O pages and >256 xlates). + . +   + In the + ibm,architecture-vec-5 property of the + /chosen node, a non-zero value indicates + that the platform supports the I/O Super Page Option (Support + of >4K I/O pages). + + + + + 1-4 + + + On input to ibm,client-architecture-support this field + shall be zero. +   + In the + ibm,architecture-vec-5 property of the + /chosen node, this field represents the + implementation dependent number of xlates entries supported per + migration operation as: 256 * 2**N. + . + + + + + 5-7 + + + On input to ibm,client-architecture-support this field + shall be zero. +   + In the + ibm,architecture-vec-5 property of the + /chosen node, this field represents the + implementation dependent number of simultaneous migration + options supported as: 2**N. + . + + + + + Base +   + + + 5 + LoPAR or OF Options 5 +   + + + 4 + + + Cooperative Memory Over-commitment Option Control + + + + + 0 + + + The value of 1 enables the Cooperative Memory + Over-commitment Option + + + + + 1 + + + The value of 1 enables the Extended Cooperative Memory + Over-commit + Option + + + + + 2-7 + + + Reserved for Expansion + + + + + 5 + + + Associativity Information Option Control + + + + + 0 + + + = the “Form value” of the + “ibm,associativity” and + “ibm,associativity-reference-points” + properties. See for further details. + + + + + 1 + + + Platform Resource Reassignment Notification (Affinity + Change) + + + + + 2-7 + + + Reserved for Expansion + + + + + 6 + + + Binary Option Controls + + + + + 0 + + + Enable MTT Option + See + . + + + + + 1 + + + Reserved + + + + + 2 + + + Enable Active Memory Compression + + + + + 3 + + + Enable Universlly Unique IDentifier Option (UUID) + + + + + 4 + + + Reserved for Expansion + + + + + 5-7 + + + Reserved for Expansion + + + + + 7 + + +   + + + Reserved for Expansion + + + + + 8 + + +   + + + Reserved for Expansion + + + + + 9-12 + + + Max Processors Supported + (For legacy support, if this byte is not present the + partition is limited to a maximum of 64 processors) + + + + + 0-31 + + + 32 bit unsigned integer maximum number of OF device tree + nodes of type “cpu” that may be presented to this + partition. + + + + + 13-14 + + + 0-7 & 0-7 + + + Highest Base LoPAR Level Supported as the binary + contents of 13.14 + (i.e. level 4.15 would be encoded as 0x040F) + + + + + 15-16 + + +   + + + Reserved for Expansion + + + + + Base +   + + + 5 + LoPAR or OF Options 5 +   + + + 17-20 + + + Platform Facilities Enable – Value of 0b1 indicates + facility is enabled + + + + +   + + +   + + + 0 + + + Random Number Generator + + + + +   + + +   + + + 1 + + + Compression Engine + + + + +   + + +   + + + 2 + + + Encryption Engine + + + + +   + + +   + + + 3-31 + + + Reserved for Expansion -- Value = 0b0 + + + + +   + + +   + + + 21 + + + 0-7 + + + Sub-Processor Representation Level -- + Defined Values: +   + 0: Sub-Processors not supported + 1: 1,2,or 4 Sub-Processors supported + 2-255 Reserved + + + + +   + + +   + + + 22-256 + + +   + + + Reserved for Expansion + + + + + Base + + + 6 + Hints + + + 1 + + + 0 + + + Reserved for Expansion (0b0) + + + + + 1 + + + + + 2 + + + + + 3 + + + + + 4 + + + + + 5 + + + + + 6 + + + + + 7 + + + + + 2 + + + 0 + + + Secondary Page Table Entry Group: If set, the client does + not use secondary page table entry groups; else the client may + use secondary page table entry groups. + + + + + 1 + + + Reserved + + + + + 2 + + + + + 3 + + + + + 4 + + + + + 5 + + + + + 6 + + + + + 7 + + + + + 3 + + + 0-7 + + + OS Name: Represents the name of the client OS. Defined + values include: + 0x0: Reserved + 0x1: AIX + 0x2: Linux + 0x3-0xFF: Reserved for Expansion + + + + + 4-256 + + + Reserved for Expansion + + + + + 7 + OS Identification + + + 1-256 + + + An ASCII character formatted null terminated string that + describes the client operating system. The string shall be + human readable and may be displayed on the console. + + + + + 8-255 + + + Reserved for Expansion + + + + + 256 + + + Reserved for Expansion to the first Extension Option + Array + + + + + Extensions 1-N + + + Reserved for Expansion + + + + +
+ Notes: + + + + The Ignore Policy bit indicates that the client program assumes + all responsibility for the options represented by the option vector. The + firmware is to configure the platform at the highest level consistent + with its configuration variables and ignore the rest of the specific + option vector. An option vector with the Ignore Policy bit set need be no + longer than two bytes (size=0, data = 0b1ddd dddd where d = don’t + care). + + + + The Cessation Policy Bit determines if the partition continues + to run if the platform must operate with an option enabled that is not + explicitly supported by the client program as represented by the option + vector setting. If the Cessation Policy Bit is 1, then processing halts + as with a boot failure. If the Cessation Policy Bit is 0 then client + program processing continues if the unsupported option is initialized to + a benign state and stays in that state unless an aware program activates + the option, and the option does not appear in the device tree. If an + unsupported option cannot be initialized to a benign state, then + processing halts with a boot failure. Following are the detailed + definitions of benign state for selected bit vectors. + + + + For option vector numbers 1 “PowerPC Server Processor + Architecture Level” and 3 “IBM PowerPC Server Processor + Extensions” the benign state is defined as unable to generate + exceptions, mask errors, or present covert channel exposures. + + + + For option vector number 5 “LoPAR Options” Byte 2 + bit 5 “Alpha Partition” The Cessation Policy bit is not + applicable. + + + + For option vector number 2 “Open Firmware” the + Cessation Policy Bit is not defined, the platform either accommodates the + values defined in the option vector or proceeds as with boot + failure. + + + + + + The Initial size + of the RMA is set to the greater of the values indicated by bytes 24-27 + or 32 of option vector number 2 “Open Firmware” or minimum + RMA size supported by the platform and capped by the maximum memory + defined for the partition and the maximum size of the RMA supported by + the platform. The respective selected values are reported in the length + of the first + memory property. + + + + The Alpha flag only applies to the first partition of a non HMC + managed system and activates overrides to the partition's I/O resource + allocation as defined in the partition definition. + + + + If the system is HMC managed, the flag is ignored and the client + program gets the resources assigned by its partition definition (no + overrides are activated). + + + + If the partition is not the first partition, the flag is ignored + and the client program gets the resources assigned by the partition + definition (no overrides are activated). + + + + If the Alpha flag applies, and is set, then the partition gets a + VMC virtual I/O device in its device tree regardless of its partition + definition (Override to include VMC is activated). + + + + If the Alpha flag applies, and is not set, then the partition + does not get a VMC virtual I/O device in its device tree regardless of + its partition definition (Override to remove VMC is activated) and it + gets all the physical I/O resources in its device tree regardless of its + partition definition (Override to include all physical I/O is activated). + Note this condition requires that any other platform partitions be + terminated. + + + + + + Given that the Ignore policy bit is off and the partition + continues to run, the options and values presented in by this option + vector and supported/chosen by the platform firmware are reported in the + “ibm,architecture-vec-5” property of the + /chosen node. + + + + Option vector number 1 “PowerPC Server Processor + Architecture Level” and the property that reports the chosen value + (i.e., + “cpu-version”) represent the operational + base architectural level of the processors -- that is without regard to + enabled processor architectural options. Option vector number 3 + “IBM PowerPC Server Processor Extensions” and option specific + properties that report the chosen values represent the active processor + architectural options. Some processor implementations may not support all + combinations of these two option vectors. The firmware shall activate the + highest level of processor support, consistent with partition attributes, + that does not exceed the most restrictive of the two option vectors. Note + the Cessation Policy bit may allow operation where the lowest level of + processor support still exceeds the most restrictive case. + + + + If a client program does not support logical partitioning no + other client programs may be running simultaneously on the platform. The + platform may impose further restrictions beyond the scope of LoPAR. If + the platform honors the client program restriction of not supporting + logical partitioning, upon return the logical real address equals the + platform real address. If the platform can not honor the restriction, the + processing terminates as with a boot failure. The cessation policy option + vector bit has no effect upon logical partitioning option vector + bit. + + + +
+ +
+ ROM Node(s) + + The ROM Node(s), when present to represent optional platform read + only memory containing directly executable platform firmware, shall be a + child or children of the root node. + +
+ ROM Node Properties + + Each ROM Node shall have the following properties: + + + + “name” [S] + + Standard + property name that denotes a ROM Node. + + prop-encoded-array: A string, encoded as with + encode-string. + The value of this property shall be + “rom”. + + + + + “reg” [S] + + Standard + property name to define a unit-address for the + node. + + prop-encoded-array: One ( + phys-addr, size) pair. + The + phys-addr of this property shall be the starting + physical address of this ROM and the + size value shall be 0. The + size =0 prevents a conflict with the + “reg” of this node’s + children. + + + + + “#address-cells” [S] + + Standard + property name to define the address space + representation of child nodes. + + prop-encoded-array: an integer, encoded as with + encode-int. Its value shall be identical to that of + this node’s parent’s + “#address-cells” value. + + + + + “ranges” [S] + + Standard + property name to define the address range that is + decoded by this + /rom node. + + prop-encoded-array: One ( + child-phys, + parent-phys, + size) triple, where + child-phys equals + parent-phys and the number of cells of each + corresponds to the parent’s + “#address-cells” value. + + + + + “available” [S] + + Standard + property name to define available ROM + resources. + + prop-encoded-array: Arbitrary number of + phys-addr, size pairs. + Phys- + addr is a + phys.hi...phys.lo list of integers, each integer + encoded as with + encode-int. + Size is one or more integers, each encoded as with + encode-int. + The value of this property defines resources, managed by this + package, that are currently available for use by a client program. + + + + + “write-characteristic” [S] + + Standard + property name defines the ROM Technology. + + prop-encoded-array: a string, encoded as with + encode-string, where the value could equal + “flash”, + “eeprom”, + “rom” or + “nvram”. + + + + + “cacheable” [S] + + OF standard property indicating that the ROM is cacheable. + + prop-encoded-array: <none>. + The presence of this property indicates that the ROM is + cacheable. + + + + +
+ +
+ ROM Node Methods + + If one or more ROM nodes are present, they shall each implement the + following standard methods per + , Section 3.6.1. The + “reg” property is used to determine which + ROM the standard methods apply to for multiple ROM’s. + The following methods must be defined by + /rom node. + + + + open (-- true) [M] + + Standard method to prepare the ROM Node for subsequent use. + + + + + close (--) [M] + + Standard method to close the previously opened ROM Node. + + + + + decode-unit + (addr len -- phys.lo...phys.hi) [M] + + Standard method to convert text unit-string to physical address. + + + + + encode-unit + (phys.lo...phys.hi -- unit-str unit-len) [M] + + Standard method to convert physical address to text unit-string. + + + + + probe (--) [M] + + OF method used at boot time to probe all ROM’s. + The + probe method for ROM Nodes shall probe for FCode + images within the address space defined by its + “reg” property as defined herein. For + each page within its address space, look for a valid FCode image. A valid + FCode image is defined to start with an FCode-header (see section 5.2.2.5 + in + ) where the first byte is + start1, the format byte is 0x08, the length field + indicates that the FCode program is contained within the address space of + the + /rom node, and where the checksum is correct. (This + probing must take into account the possibility that the ROM image is in + the opposite endian-ness from which OF is currently running.) + If such an FCode image is found, a new child node shall be created + by executing + new-device and + set-args, the FCode image copied to memory (taking + into account the endian-ness) and the copy evaluated with + byte-load. (The FCode program can use + my-unit to create its + “reg” property.). The arguments used by + set-args are defined to be 0,0,unit-str, unit-len + where unit-str is a text string representation of the physical address + location for the FCode Image and unit-len is the length of the FCode + Image. + + + + +
+ +
+ +
+ ROM Child Node(s) + This section describes the properties and methods for a ROM Child + Node. + +
+ ROM Child Node Properties + + The following properties must be created by + /rom child nodes. + + + + “name” [S] + + Standard + property name that denotes a ROM child node. + + prop-encoded-array: A string, encoded as with + encode-string. + Some physical ROM implementations may not fully decode their entire + address range. This could lead to multiple images of the ROM to appear at + different addresses, due to the “aliasing” of the ROM image. + To prevent multiple device nodes from appearing in the device tree, the + FCode for such ROMs should look for an already existing peer node that + represents their image. This could be done, for example, by checking that + any of the peer of the child of its parent node has a + “name” property value that is the same as + this node’s FCode would create. + If such a node is found, the FCode should “abort” the + evaluation of its FCode (e.g., by executing an + end0) before creating its + “name” property. OF shall remove a node + when the FCode evaluation for the node does not result in a + “name” property being defined. + + + + + “reg” [S] + + Standard + property name that defines the child node address + range for a ROM image(s). + + prop-encoded-array: List of ( + phys-addr, size) specifications. + + Phys-addr is encoded as with + encode-phys, and + size is encoded as with + encode-int. The + phys-addr is a base address of the ROM image and + size is the length of the ROM image. + + + + +
+ +
+ ROM Child Node Methods + + The following methods must be defined by + /rom child nodes. + + + + open (-- true) [M] + + Standard method to prepare this device for subsequent use. + The + open method must be prepared to parse + my-args for the case(s) when the node is being opened + in order to access “files”; e.g., when the bootinfo.txt file + is being accessed during the + multiboot menu. + + + + + close (--) [M] + + Standard method to close the previously opened device. + + + + + load (addr -- len) [M] + + Standard method to load an image. The image must be one that is + recognized by the OF + init-program method. It is strongly recommended that + the ELF format be used, since it has the mechanism to specify + configuration variable requirements of an OS. + + + + +
+ +
+ +
+ +
+ Run Time Abstraction Services (RTAS) Node + + This system node is a child of + “/” (root). This section defines + properties and methods for the RTAS node. The RTAS Node shall not have + “reg” or + “ranges” properties. + +
+ RTAS Node Properties + + This section describes the + rtas node properties. + + + + “name” [S] + + Standard + property name that denotes the RTAS node. + + prop-encoded-array: A string, encoded as with + encode-string. + The value of this property shall be + “rtas”. + + + + + “rtas-event-scan-rate” [S] + + + property name that is the rate at which an OS should + read indicator/sensor/error data + + prop-encoded-array: An integer, encoded as with + encode-int + The value of this property shall be a number indicating the desired + rate for reading sensors and/or error information in calls per minute. + This number is platform dependent. + + + + + “rtas-indicators” [S] + + + property name that indicates indicators are + implemented. + + prop-encoded-array: An array of paired integers ( + token maxindex), each encoded as with + encode-int. + The values for this property is a list of integers that are the + token values ( + token) for the defined indicators and the number of + indicators ( + maxindex) for that token which are implemented (see + ) on the platform. + + Note: The indicator indices for a given token are + numbered 0... maxindex-1. + + + + + “rtas-sensors” [S] + + + property name that indicates sensors are + implemented. + + prop-encoded-array: An array of paired integers ( + token maxindex), each encoded as with + encode-int. + The values for this property is a list of integers that are the + token values ( + token) for the defined sensors and the number of + sensors ( + maxindex) for that token which are implemented (see + ) on the platform. + + Note: The sensor indices for a given token are + numbered 0 ... maxindex-1. + + + + + “rtas-version” [S] + + + property name describes version information for the + RTAS implementation. + + prop-encoded-array: An integer, encoded as with + encode-int. + The value of this property shall denote the version the RTAS + implementation. For this version, the integer shall be as defined in this + architecture. + + + + + “rtas-size” [S] + + + property name is the size of the RTAS memory + image. + + prop-encoded-array: An integer, encoded as with + encode-int. + The value of this property shall be the amount of contiguous real + system memory required by RTAS, in bytes. + + + + + “rtas-display-device” [S] + + + property name identifies RTAS Display Device + + prop-encoded-array: An integer, encoded as with + encode-int. + The value of this property shall be the + phandle of the device node used by the RTAS + display-character function. + + + + + “rtas-error-log-max” [S] + + + property name identifies maximum size of an extended + error log entry. + + prop-encoded-array: An integer, encoded as with + encode-int. + The value of this property shall be the maximum size of an extended + error log entry, in bytes. + + + + + “power-on-max-latency” [S] + + + property name specifies a future power on time + capability. + + prop-encoded-array: An integer, encoded as with + encode-int. + The value of this property specifies the capability of the hardware + to control the delay of system power on in days. If the property is + present, the value shall indicate the maximum delay or latency in days. + If the property is not present, the maximum delay or latency is 28 + days. + + + + + “ibm,preserved-storage” + + + property name specifies that the client program was + loaded with one or more LMBs preserved from a previous client + program. + + prop-encoded-array: None, this is a name only + property. + The client program may wish to save the contents of the preserved + LMBs and deregister the LMBs for preservation. + + + + + “ibm,scan-log-directory” + + property name specifies that the platform supports + the scan-log directory option. + + prop-encoded-array: None, this is a name only + property. + + + + + “ibm,indicator-<token> + + property name to provide a FRU location code for + identifying each indicator. + + prop-encoded-array: an array of + maxindex + 1 strings, encoded as with + encode-string. + + + + + “ibm,sensor-<token> + + property name to provide a FRU location code for + identifying each physical sensor. + + prop-encoded-array: an array of + maxindex + 1 strings, encoded as with + encode-string. + + + + + “ibm,display-line-length” + + property name to provide the length of a display line + in number of characters. + + prop-encoded-array: an integer, encoded as with + encode-int. + + + + + “ibm,display-number-of-lines” + + property name to provide the number of lines in the + display. + + prop-encoded-array: an integer, encoded as with + encode-int. + + + + + “ibm,display-truncation-length” + + property name, when provided, specifies the length to + which each line to be display is truncated, based on which line of the + physical display on which the line is displayed. When the truncation + length is greater than the length specified in the + “ibm,display-line-length” property, then + the platform provides a platform-dependent method of displaying the line + to the user. + + prop-encoded-array: An array of integers, each + encoded as with encode-int. The number of integers corresponds to the + number of lines, as defined by the + “ibm,display-number-lines” property. The + first integer refers to the truncation length for the first physical line + of the display, the second to the second physical line, and so on. + + + + + “ibm,form-feed” + + property name to provide an indication of the + form-feed capability. + + prop-encoded-array: a character, NULL (0x00) if + form-feed is not supported and np (0x0C) if form-feed is supported, + encoded as with + encode-int. + + + + + “ibm,environmental-sensors” + + property name describes the environmental sensors + which are available to an application. + + prop-encoded-array: An array of paired integers + (token maxindex), each encoded as with + encode-int. + + + + + “ibm,flash-block-version” + + + property name in the + /rtas node indicates the block list format to be + used. + + prop-encoded-array: integer encoded as with + encode-int. Value is 0x01 for the discontiguous + block list. (If a new version of the block list is ever required, other + values could be defined.) + + + + + “ibm,errinjct-tokens” [S] + + property name defines the error inject functions implemented on + this platform. + prop-encoded-array: List of (errinjct-token-name, + errinjct-token-value) specifications. + errinjct-token-name: A string, encoded as with + encode-string. + errinjct-token-value: is encoded as with + encode-int. + + + + + “ibm,lrdr-capacity” + + property name in the + /rtas node identifies the dynamic reconfiguration + capabilities of the partition + + prop-encoded-array: A triple consisting of phys, + size, and one integer encoded as with + encode-int + The phys (of size #address-cells) communicates the maximum address + in bytes and therefore, the most memory that can be allocated to this + partition. + The size (of size #size-cells) communicates the increment (quantum + of logical memory dynamic reconfiguration). + The first integer communicates the maximum number of processors + (implied quantum of 1). + + Note: Some implementations depend upon the presence + and value of a second integer. Future extensions to this property should + not define a second integer for new purposes. + + + + + “ibm,hypertas-functions” + + property name of the + /rtas node, defines the platform’s implemented + hypervisor RTAS function sets. + prop-encoded-array: List of Hypervisor-RTAS-function-set + specifications. + Each Hypervisor-RTAS-function-set specification is a byte string + encoded as with + encode-string. + + + + + “ibm,dma-delay-time” + + property name to define the time delay need to ensure outstanding + DMA operations targeting migrated pages have completed. + prop-encoded-array: A one cell integer encoded as with + encode-int that represents the number of + micro-seconds that the OS should wait prior to reusing migrated DMA read + target pages. + + + + + “ibm,associativity-reference-points” [S] + + property name to define the associativity reference points for the + “ibm,associativity” + properties of this platform. + prop-encoded-array: A list of one or more integers cell(s) encoded + as with + encode-int. + + + + + “ibm,max-associativity-domains” + + property name to define the maximum number associativity domains + for this platform. + prop-encoded-array: An associativity list such that all values are + the maximum that the platform supports in that location. The + associativity list consisting of a number of entries integer (N) encoded + as with + encode-int followed by N integers encoded as with + encode-int each representing maximum number + associativity domains the platform supports at that level. + + + + + “ibm,request-partition-shutdown” + + + property name to specify that the partition was + rebooted in the forced fire hose dump mode. + + prop-encoded-array: An integer encoded as with + encode-int that represents the platform’s + partition shutdown configuration variable. The defined states are: + 0 = The platform boots with no request to save appropriate data nor + shutdown the partition. + 1 = The platform boots with a conditional request to save + appropriate data and shutdown the partition. The client program should + check for an EPOW sensor state of 3 and if present, it should save + appropriate data and shutdown the partition. If the EPOW sensor state of + 3 is not present, then the partition should initiate a reboot since the + device tree will be incomplete. + 2 = The platform boots with a mandatory request to the client + program to save appropriate data and shutdown the partition. + + + + + “ibm,integrated-stop-self” + + + property name indicating that prior to placing a + processor in the stopped state, the platform flushes and disables any + caches/memory exclusively used by the issuing processor. + + prop-encoded-array: NULL + + + + + “ibm,rks-hcalls” + + + property name: indicating the hcalls that are + implemented with a reduced kill set. Absence of this property indicates + that only hcalls that are specified as always having a reduced kill set + provide that semantic. + + prop-encoded-array: A one to N byte bit vector, bit + positions representing hcall()s (see + ) that present a reduced kill + set per their architectural specification. + + + <emphasis role="bold"><literal>“ibm,rks-hcalls”</literal></emphasis> bit vector to hcall map + + + + + + + + + + + Byte Number + + + + + Bit Number + + + + + hcall + + + + + + + + 0 + + + 0 + + + 0b11 for H_CONFER & H_PROD + + + + + 1 + + + + + 2 + + + Set to 1 if H_PURR is implemented with a reduced volatile + kill set of r3 & r4; else set to 0. + + + + + 3 + + + Reserved for future expansion (0b0) + + + + + 4 + + + + + 5 + + + + + 6 + + + + + 7 + + + + + 1-N + + + Reserved for future expansion + + + + +
+
+
+ + + “ibm,reset-capabilities” + + + property name indicates what capabilities the + platform supports relative to the ibm,set-slot-reset RTAS call, when that + RTAS call is implemented. + + prop-encoded-array: An integer encoded as with + encode-int that represents the functions supported in the + ibm,set-slot-reset RTAS call + 0 = Platform supports Functions 0 and 1 supported. + 1 = Platform supports Functions 0, 1, and 3. + Note: The absence of this property implies the platform supports + Functions 0 and 1 for the + ibm,set-slot-reset RTAS call, when that RTAS call is + implemented. + + + + + “ibm,configure-kernel-dump-sizes” + + + property name specifies that the Platform Assisted + Kernel Dump option is supported for sections described by this + property. + + prop-encoded-array: For each dump section type + supported, a 32 bit cell which defines the ID of a supported section + followed by two 32-bit cells which gives the size of the section in bytes + (not including any disk headers.) + + + + + “ibm,configure-kernel-dump-version” + + + property name specifies that the Platform Assisted + Kernel Dump option is supported for versions described by this + property. + + prop-encoded-array: Contains a 16-bit cell describing + the minimum kernel dump version supported by the firmware followed by a + 16-bit cell describing the maximum kernel dump version supported by the + firmware. + + + + + “ibm,kernel-dump” + + + property name specifies the presence of a registered + kernel dump in the Platform Assisted Kernel Dump option. + + prop-encoded-array: Contains the description of the + registered kernel dump in the format described in + . + + + + + “ibm,read-slot-reset-state-functions” + + + property name specifies the implementation of certain + input or output fields in the + ibm,read-slot-reset-state2 RTAS call. If this + property does not exist, then the + ibm,read-slot-reset-state2 RTAS call implements only + the first 3 inputs and the first 4 outputs ( + Number Inputs is required to be 3 and the + Number Outputs is required to be 4), as defined in + . + + prop-encoded-array: Contains a 32 bit cell, with the + bits defined as follows: + Bits 0-29: Reserved (value of 0). + Bit 30: When a value of 1, the + ibm,read-slot-reset-state2 RTAS call checks the + Number Outputs and the implements the 5th output ( + Number Outputs of 5), as defined by + . + Bit 31: When a value of 1, the + ibm,read-slot-reset-state2 RTAS call implements the + first 3 inputs and the first 4 outputs ( + Number Inputs of 3 and the + Number Outputs of 4), as defined in + . This bit is always required + to be a value of 1 when this property is implemented. + + + + + “ibm,change-msix-capable” + + + property name indicating the platform supports the + ibm,change-msi RTAS call with + Number of Outputs equal to 4 and + Functions 3 and 4. + + prop-encoded-array: <none> + + +
+ +
+ +
+ <literal>/RTAS</literal> node DR Sensors and Indicators + + The following sensors and indicators are defined for the /RTAS node + for the DR option. + + + + “9003” + + sensor token, the existence of this token number + denotes that the platform supports the 9003 “DR entity sense” + sensor. + + + + + “9001” + + indicator token, the existence of this token number + denotes that the platform supports the 9001 “isolation state” + indicator. + + + + + “9002” + + indicator token, the existence of this token number + denotes that the platform supports the 9002 “dr-indicator” + indicator used to guide operators in the physical add or removal of + hardware. + + + + + “9003” + + indicator token, the existence of this token number + denotes that the platform supports the 9003 + “allocation-state” indicator. + + + + + “ibm,extended-os-term” + + property-name indicating that the platform supports + extended + ibm,os-term behavior as described in + . + prop-encoded-array: encode-null + + + + +
+ +
+ RTAS Function Property Names + + This section defines the property names associated with the various + RTAS functions defined by + . + should be used as the reference + for RTAS Functions currently implemented. Each RTAS function that a + platform implements shall + be represented by its own function property, + who’s value is the + token used to invoke the function on an RTAS + call. + The formal property definition for each such property is of the + form: + + property name specifies the name of the RTAS function + -- such as: + + + + “nvram-fetch” [S] + + prop-encoded-array: The value, + token, is an integer encoded as with + encode-int. + If an RTAS function is implemented, there is a property name which + corresponds to its function name. The value of this property is a + token. This + token, when passed to RTAS via its + rtas-call interface (see below), invokes the named + RTAS function. If a RTAS function is not implemented, there will not be a + property corresponding to that function name. See the + for more information about RTAS + functions. + + + + + “ibm,termno” + + property name of the + /rtas node defines the virtual terminal numbers + available for use by this partition. + prop-encoded-array: A pair of integers encoded as with + encode-int, the first being the value + of the lowest termno in a contiguous range of supported values, the second being the + number of termno values supported. + Note: The number of supported termno values is + implementation dependent -- the minimum number is one. + + + + + “ibm,hypertas_functions” + + property name of the /RTAS node, defines the + platform’s implemented hypervisor RTAS function sets. + + prop-encoded-array: List of + Hypervisor-RTAS-function-set specifications. + Each + Hypervisor-RTAS-function-set specification is a byte + string encoded as with + encode-string. + + + + +
+ +
+ RTAS Node Methods + + The + instantiate-rtas or + instantiate-rtas-64 method is invoked by the OS to + instantiate the RTAS functionality. This is accomplished via the + call-method + Client Interface Service. If the platform supports + the + ibm,client-architecture-support root node method, and + that method has not been called prior to the call of the + instantiate-rtas or + instantiate-rtas-64 methods, then the platform shall + operate at the least functional level supported by the platform. + + Note: Platforms should provide a manual override + capability to allow most functional level allowed by the partition + configuration in the event that a client program does not call the + ibm,client-architecture-support root node method + prior to the instantiation of RTAS. + + + + instantiate-rtas (rtas-base-address -- rtas-call) [M] + + Invoking the + instantiate-rtas method binds the RTAS environment to + a given location in System Memory and initializes the RTAS environment. + The in parameter, + rtas-base-address, is the physical address to which + the RTAS environment is to be bound. This call indicates that RTAS is + instantiated in a 32-bit mode. The amount of contiguous real memory that + should be allocated for the RTAS environment is given by the value of the + “rtas-size” property. + Upon completion of the + instantiate-rtas method, an entry point address, + rtas-call, is returned. The value of + rtas-call specifies the physical address of the entry + point into RTAS for future RTAS function calls. + + + + + instantiate-rtas-64 (rtas-base-address -- rtas-call) [M] + + Invoking the optional + instantiate-rtas-64 method binds the RTAS environment + to a given location in System Memory and initializes the RTAS + environment. The in parameter, + rtas-base-address, is the physical address to which + the RTAS environment is to be bound. This call indicates that RTAS is + instantiated in a 64-bit mode. The amount of contiguous real memory that + should be allocated for the RTAS environment is given by the value of the + “rtas-size” property. + Upon completion of the + instantiate-rtas-64 method, an entry point address, + rtas-call, is returned. The value of + rtas-call specifies the physical address of the entry + point into RTAS for future RTAS function calls. + + + + +
+ +
+ +
+ Properties of the Node of type cpu + When the platform implements the LPAR option the following + properties are required of the /cpus node + + + + ibm,pft-size + + property name of the children of type + “cpu” of the + /cpus node, defines the size of the processor’s + page frame table. + prop-encoded-array: A pair of integers encoded as + with + encode-int, the first being the NUMA CEC Cookie (up + to a maximum of (2 + 16)-1) the second being the base 2 log of the size + of the page frame table in bytes. + + Notes: + + + + + On single CEC platforms, the NUMA CEC Cookie value is + zero. + + + + Due to constraints caused by initial memory allocations, and + other running partitions, the firmware may not be able to allocate a + node’s PFT for the full size requested in the PFT_size + configuration variable. The + “ibm,pft-size” property of course + reflects the actual size allocated. + + + + The partitions running on multiple NUMA nodes would have + multiple PFTs which did not look alike due to the difference in mapping + local and remote page frames.) + + + + + + + + + To support dynamic addition and removal of processors, the /cpus + node contains the properties: + ibm,drc-types (cpu), + ibm,drc-indexes ibm,drc-names and + ibm,drc-power-domains (-1's). These properties have + entries for the maximum number of dynamically reconfigurable processors + that the platform supports for the specific OS image. + + + + “ibm,ppc-interrupt-server#s” [S] + + property name: Defines the single processor server + numbers associated with this processor. Placing the numerical equivalent + of one of these quantities into the server# field of an XIVR directs + associated interrupts to this processor. The first server number is + associated with the “primary processor thread” any subsequent + numbers are associated with the secondary. etc. hardware threads that the + processor may implement. + prop-encoded-array: A list of one or more integers + in the range of 0 to + 2“ibm,interrupt-server#-size” + encoded as with + encode-int. + Note: In order to achieve optimal performance, + processor server numbers should be activated in the order that they are + presented in the + “ibm,ppc-interrupt-server#s” property and + deactivated in the reverse order. + + + + + “ibm,ppc-interrupt-gserver#s” [S] + + property name: Defines the multiple processor global + server numbers to which this processor belongs. Placing the numerical + equivalent of one of these quantities into the server# field of an XIVR + directs associated interrupts to one of the processors in that + group. + prop-encoded-array: A list of ( + server#, gserver#s) specification pairs. the first + integer specifies a single processor + server# as presented in the node’s + “ibm,ppc-interrupt-server#s” property, + followed by an integer with a value less than or equal to 2 + “ibm,interrupt-server#-size” + encoded as with + encode-int that specifies the global server queue + that also may present interrupts to the interrupt management area + associated with the + server#. + + + + + “ibm,sub-processors” + + property name: the sub-processor configuration that + is running on this processor. In the absence of this property, this + processor may not be divided into sub-processors. + prop-encoded-array: a series of three or more + integers each encoded as with encode-int. The value of the first integer + indicates how many integers follow (the value 2 indicates that two + integers follow). The second integer indicates the number of + sub-processors that are running on this processor. If the processor is + not divided into sub-processors the value of the second integer shall be + 1, two sub-processors shall be represented by the value 2, four + sub-processors shall be represented by the value 4 and so on. The third + integer indicates the maximum number of sub-processors that could be + configured to run on this processor. + Client programs shall ignore subsequent integers beyond those + defined at the time they were written. + + + + +
+ +
+ Extensions for LoPAR I/O Sub-Systems + + LoPAR I/O sub-system events may be signaled in a variety of ways + depending upon platform capabilities. In order of increasing + functionality: + + + + Events are universally fatal, and are signaled via + checkstop. + + + + After being enabled, the effected section enters freeze state + signalling this state with a return of all 1’s to any MMIO load + instruction (If not enabled functionality of the specific section reverts + to #1. Presence of + ibm,set-eeh-option RTAS call denotes platforms that + support this level of functionality.) + + + + An extension to #2 above wherein, after being enabled for a + specific section of the I/O sub-system, additional event conditions may + be reported and events are signaled using an external interrupt. The + platform’s capability to support this level of functionality is + reported by the inclusion of the + “ibm,i/o-events-capable” property (see + definition below) in nodes where enabling control may be + exercised. + + + + + + “ibm,i/o-events-capable” + + property name indicating that I/O sub-system events + detected by the hardware represented by this node in the device tree may + be singled with an I/O event interrupt if enabled. + prop-encoded-array: 0 to N interrupt specifiers (per + the definition of interrupt specifiers for the node’s interrupt + parent). + When no interrupt specifiers are present, then the interrupt, if + enabled, is signaled via the interrupt specifier given in the + I/O-events child node of the + /events node. + To perform certain management functions, it is necessary to quiesce + segments of the platform’s I/O infrastructure, such quiescence + domains are not representable by a strict tree structure. The + “ibm,io-quiesce-domains” property relates + the membership of the various elements of a platform’s I/O + sub-system to such quiescence domains. + + + + + “ibm,io-quiesce-domains” + + property name indicating the I/O quiesce domains of + which this device, and all devices under this device (if any), is a + member. + prop-encoded-array: List of one or more + domain-id’s to which this device belongs, and to which all devices + under this device (if any) belongs. Domain-id's are encoded as with + encode-int. + + + + + Virtual I/O that does not take up physical address locations is + represented in a device sub tree for which the + “#size-cells” and + “#address-cells” properties are zero and + one, respectively. However, the ibm dma-window properties, such as + “ibm,dma-window” and + “ibm,my-dma-window”, need to contain + real size and address fields. The number of cells for these real size and + address fields need to be non-zero. + + + + “ibm,#dma-size-cells” + + property name to define the package’s dma + address + size format. + prop-encoded-array: number encoded as with + encode-int. + The property value specifies the number of cells that are used to + encode the size field of ibm dma-window properties. If the + “ibm,#dma-size-cells” property is + missing, the default value is the + “#size-cells” property for the package. + If both the + “ibm,#dma-size-cells” and + “#size-cells” properties are missing, + refer to the + “#size-cells” property definition in the + for the default value. + + + + + “ibm,#dma-address-cells” + + property name to define the package’s dma + address format. + prop-encoded-array: number encoded as with + encode-int. + The property value specifies the number of cells that are used to + encode the physical address field of ibm dma-window properties. If the + “ibm,#dma-address-cells” property is + missing, the default value is the + “#address-cells” property for the + package. If both the + “ibm,#dma-address-cells” and + “#address-cells” properties are missing, + refer to the + “#address-cells” property definition in + the + for the default value. + + + + +
+ PCI Host Bridge Nodes + This section describes the PCI Host Bridge (PHB) properties which + are added or modified for an LoPAR implementation. Refer to + for the base PCI properties and + methods. For each platform PCI Host Bridge, a + “reg” property shall be present in the + respective PCI Node. + + Note: Since the standard RTAS PCI configuration + access services do not have separate arguments identifying the PCI host + bridge to which a service applies, platforms with multiple PCI host + bridges must assign them unique bus numbers. An OS must not reassign bus + numbers if it expects to make subsequent use of the any RTAS PCI + configuration access services. + To support dynamic addition and removal of PHBs, the / node + contains the properties: + ibm,drc-types (phb), + ibm,drc-indexes ibm,drc-names and + ibm,drc-power-domains (-1's). These properties have + entries for the maximum number of dynamically reconfigurable PHBs that + the platform supports for the specific OS image. + +
+ PCI Host Bridge Properties + + For each PHB in the platform (called a PCI Bus Controller in the + PCI Bus binding), a PCI Host Bridge Node shall + be defined as a child node of the system bus, in + accordance with + . Each PCI PHB Node shall have + a Unit Address defined in the + “reg” property that is unique and + persistent from each boot-to-boot. One way for the platform to meet this + requirement is to supply a virtual Unit Address based upon a unique + identifier stored in the hardware. In this case, the size field of the + first + “reg” property phys-address, size pair + shall be zero. The following properties are modified or added by this + architecture and shall apply to each of these nodes. + Each PHB shall also have the + “used-by-rtas” property, since RTAS is + used for PCI Configuration. + + + + “ranges” [S] + + Standard + property name defines this PHB’s physical + address ranges. + prop-encoded-array: Two or more ( + child-phys, parent-phys, size) + specifications. + This property is mandatory for PCI Host Bridges in LoPAR + implementations. The property value consists of four ( + child-phys, parent-phys, size) specifications, as + described in + . + The first specification shall specify the configured address and + size of this PHB’s I/O Space. (I/O Space is shown as + “BIOn” to “TIOn” in + "Address Map" section.) The + second specification shall specify the configured address and size of + this PHB’s Memory Space. (Memory Space is shown as + “BPMn” to “TPMn” in the Common Hardware Reference + Platform Architecture.) + + + + + “model” [S] + + Standard + property name indicating this PHB’s + manufacturer, part number, and revision level. This property shall be + present if this PHB does not supply the following standard PCI + configuration properties which represent the values of standard PCI + configuration registers: + “vendor-id”, + “device-id”, and + “revision-id”. + + prop-encoded-array: Text string, encoded as with + encode-string. + The value of this property is a vendor dependent string which + uniquely identifies this PHB and is correlated to its manufacturer, part + number, and revision level. (see + for more information.) The + string value is device dependent, but shall supply information sufficient + to identify the part to a level equivalent to the level achievable via + the standard PCI configuration registers: + “vendor-id”, + “device-id”, and + “revision-id”. + + + + + “64-bit-addressing” [S] + + property name indicates this PHB’s capability + to address more than 4 GB of memory. + prop-encoded-array: <none> + This property shall be present indicating that the PHB supports + addressing more than 4 GB of memory (required for all + PHB nodes). + + + + + “external-control” [S] + + property name indicates this PHB’s ability to + support the PA external control facility. + prop-encoded-int: List of integers, each encoded as + with encode-int. + The property value, if present, is a list of Resource ID’s + the version of the PA external control facility supports. This property + shall be present if this PHB supports the PA external control facility, + otherwise the property shall be absent. + + + + + “ibm,tce-alloc-info” + + property name indicates the addresses of platform pre + allocated TCE table space. + + prop-encoded-array: One to N + phys-addr, size pair(s). The first pair represents + the memory area allocated by the platform for the TCE tables associated + with this PHB. Any subsequent pairs represent memory areas that the OS + should avoid using to minimize performance impacts. + Phys-addr is encoded as with + encode-phys the number of cells for + phys corresponds to + “#address-cells” value applicable to this + node. + size the number of cells for + size corresponds to the + “#cell-size” value applicable to this + node. + + + + + “ibm,max-completion-latency” + + property name indicates the maximum DMA Read + completion latency for IOAs under this PHB. + prop-encoded-array: Integer, encoded as with + encode-int. + This property, when present (for example, see Requirement + ), indicates the maximum DMA + Read completion latency for IOAs under this PHB, in microseconds. For + plug-in adapters, the latency value does not include latency of any + additional PCI fabric (for example, PCI Express switches) on the plug-in + adapter. + + + + + “ibm,extended-address” [S] + + property name indicates this platform supports + Peripheral Memory Spaces, Peripheral I/O Spaces, and SCA spaces above 4 + GB. + prop-encoded-array: <none> + This property must be present in all PHB nodes. + + + + + “ibm,pcie-link-width-stats” + + property name indicates the collection of PCI Express + link-width capabilities and measurements at the PE below the PHB. + prop-encoded-array: 2 integers encoded with + encode-int + The first integer represents the maximum PCI Express lane-width at + the Partitionable Endpoint. + The second integer represents the actual PCI Express lane-width at + the Partitionable Endpoint. + Implementation Note: In some cases, a PCIe device may + train at a different width depending on the speed capabilities of the + link. + + + + + “ibm,pcie-link-speed-stats” + + property name indicates the collection of PCI Express + link-speed capabilities and measurements at the PE below the PHB. + prop-encoded-array: 2 integers encoded with + encode-int. The format of each integer is identical + to the link speed encodings defined in the PCI Express Capability + Structure chapter of the + . In the 2.0 version of that + specification, it defines 0x1 = 2.5 GT/s and 0x2 = 5.0 GT/s. + The first integer represents the maximum PCI Express link-speed at + the Partitionable Endpoint. + The second integer represents the actual PCI Express link-speed at + the Partitionable Endpoint. + + + + +
+ Properties for Children of PCI Host Bridges + + The following properties are defined for PCI host bridges and their + children. + + + + “133mhz-capable” [S] + + property name: The presence of this property + indicates the device’s capability of operating at 133 megahertz. + Only present if PCI-X Status Register bit 17 is set. + + prop-encoded-array: None. + + + + + “266mhz-capable” [S] + + property name: The presence of this property + indicates the device’s capability of operating at 266 megahertz. + Only present if PCI-X Status Register bit 30 is set. + prop-encoded-array: None. + + + + + “533mhz-capable” [S] + + property name: The presence of this property + indicates the device’s capability of operating at 533 megahertz. + Only present if PCI-X Status Register bit 31 is set. + prop-encoded-array: None. + + + + + “ibm,msi-ranges” + + property name: Defines the Message Signaled + Interrupt interrupt source number (as returned by H_XIRR) range(s) + assigned to this unit using the MSI capability structure. (Note this + property is only supplied if the package is assigned one or more message + signaled interrupt numbers at boot time using the MSI capability + structure, those packages assigned level sensitive interrupts include the + standard interrupts property.) The platform firmware assigns the + interrupt source numbers in order to the first N Message Signaled + Interrupt configuration spaces of the adapter, setting the associated + configuration spaces, in accordance with the platform's hardware + configuration, to produce the interrupt source numbers specified. + prop-encoded-array: List of one or more (int-number, + range) specifications. + Int-number is the first interrupt source number in a + contiguous range of interrupt source numbers encoded as with + encode-int. + Range is the one based count of consecutive interrupt + source numbers that compose the specified range of interrupt source + numbers, encoded as with + encode-int. + + + + + “ibm,msi-x-ranges” + + property name defines the Message Signaled Interrupt + interrupt source number (as returned by H_XIRR) range(s) assigned to this + IOA function using the MSI-X capability structure. (Note this property is + only supplied if the package is assigned one or more message signaled + interrupt numbers at boot time using MSI-X capability structure, those + packages assigned level sensitive interrupts include the standard + interrupts property.) The platform firmware assigns the interrupt source + numbers in order to the first N MSI-X vectors of the IOA function, + setting the associated configuration spaces and MSI-X vectors, in + accordance with the platform's hardware configuration, to produce the + interrupt source numbers specified. + prop-encoded-array: List of one or more (int-number, + range) specifications. + Int-number is the first interrupt source number in a + contiguous range of interrupt source numbers encoded as with + encode-int. + Range is the one based count of consecutive interrupt + source numbers that compose the specified range of interrupt source + numbers, encoded as with encode-int. + + + + + “ibm,req#msi” + + property name: Defines the number of Message + Signaled Interrupts requested by the adapter as communicated in its MSI + capability structure. This number may be greater than the number of + Message Signaled Interrupts actually assigned by the firmware. + prop-encoded-array: number of requested interrupts + encoded as with + encode-int. + + + + + “ibm,req#msi-x” + + property name: Defines the number of MSI-X Interrupts + requested by the adapter as communicated in the Table Size field of the + MSI-X Capability Structure for the adapter. This number may be greater + than the number of MSI-X interrupts actually assigned by the + firmware. + prop-encoded-array: number of requested MSI-X + interrupts encoded as with + encode-int. + + + + + “ibm,connector-type” + + property name to identify the connectors associated with a built-in + IOA that supports wrap test. This property must be provided if there is + more than one connector for the same IOA on the platform. + prop-encoded-array: the concatenation, with + encode+, of an arbitrary number of text strings, + each encoded as with + encode-string. + + + + + “ibm,wrap-plug-pn” + + property name to provide the part number(s) of the wrap plug(s) + required for testing built-in IOAs with the default connector or the + connectors specified in + “ibm,connector-type”. If this property + is provided in the same node with an + “ibm,connector-type” property, there is a + one-to-one correspondence between the strings in each property. If this + property is provided without an + “ibm,connector-type” property, there is + assumed to be only one connector for the device (default connector) and + this property should contain only one string. If multiple wrap plugs may + be used with the same connector, their part numbers shall be represented + in the same string, separated by commas. + prop-encoded-array: the concatenation, with + encode+, of an arbitrary number of text strings, + each encoded as with + encode-string. + + + + + “ibm,pci-config-space-type” + + property name: Indicates if the platform supports + access to an extended configuration address space from the PHB up to and + including this node. + 0 = Platform supports only an eight bit register number for + configuration address space accesses. + 1 = Platform supports a twelve bit register number for + configuration address space accesses. + This property may be provided in all + PHB nodes and their children. + Note: The absence of this property implies the platform supports + only an eight bit register number for configuration address space + accesses. + + + + + “ibm,reserved-explanation” + + property name indicates why this PHB's + “status” property contains the value of + “reserved” or + “reserved-uninitialized”. + prop-encoded-array: Text string, encoded as with + encode-string. + The property value, when present, can have the values specified in + . + + + Values + <emphasis role="bold"><literal>“ibm,reserved-explanation”</literal></emphasis> + + + + + + + + + + Value + + + + + Explanation + + + + + + + + storage-system-io + + + Reserved for storage system product use + + + + + pcix-over-pcie + + + PCIe device is abstracted as a PCIx device in the device + tree for legacy compatibility + + + + +
+
+
+ + + “ibm,pe-total-#msi” + + property name defines the maximum number of Message + Signaled Interrupts (MSI plus MSI-X) that are available to the PE below + this device tree node. This number only indicates the number of available + interrupts, not the number assigned. The number assigned for an IOA may + be obtained by Function 0 (Query only) of the + ibm,change-msi RTAS call. + prop-encoded-array: Maximum number of interrupts + encoded as with + encode-int. + + + + + “ibm,ehci-boot-supported” + + property name: indicates if this IOA function for + USB 2.0 (EHCI) supports devices beneath it to be used for boot. + prop-encoded-array: None. + + + + + “ibm,pe-reset-is-flr” + + property name: The presence of this property in the + PCI Express function’s OF Device Tree node indicates that the + platform will use the Function Level Reset (FLR) of the function to reset + the function when the + ibm,set-slot-reset RTAS call is used to reset the PE, + and not the PCI Express Hot Reset. + prop-encoded-array: None. + + + + + “ibm,ddw-applicable” + + property name: The Dynamic DMA Windows option RTAS + calls may be used against the PE below this node. + prop-encoded-array: A list of three integers encoded + as with + encode-int. + This property may be provided in all PHB nodes or bridge nodes that + are the PHB’s children. Separate properties must exist for each PE + that can participate in the DDW option (exists in the node above the PE). + The existence of this property in any node, indicates that the platform + supports the Dynamic DMA Windows option for the platform and for the PE + below that node. Lack of this property in the bridge node above a PE + indicates that the DDW option RTAS calls are not applicable to that PE. + The values in the property are defined as follows: + The first integer represents the token to be used for the + ibm,query-pe-dma-window RTAS call. + The second integer represents the token to be used for the + ibm,create-pe-dma-window RTAS call. + The third integer represents the token to be used for the + ibm,remove-pe-dma-window RTAS call. + + + + + “ibm,ddw-extensions” + + property name: Extensions to the Dynamic DMA Windows + option RTAS calls may be used against the PE below this node. + prop-encoded-array: A list of integers encoded as + with + encode-int. + This property may be provided in all PHB nodes or bridge nodes that + are the PHB’s children. Separate properties shall exist for each PE + that can participate in the extensions to the DDW option (exists in the + node above the PE). The existence of this property in any node, indicates + that the platform supports the extensions to the Dynamic DMA Windows + option for the platform and for the PE below that node. Lack of this + property in the bridge node above a PE indicates that the extensions of + the DDW option RTAS calls are not applicable to that PE. This property is + designed to be extended in the future by adding integers to the end of + the list, reading software should be prepared to handle earlier versions + of the property that will have a short list as well as ignore longer + lists from later versions than it was designed to handle. The values in + the property are defined as follows: + The first integer represents the number of extensions implemented. + Subsequent integers represent values associated with each extension such + as a token for an additional RTAS call or an architectural level of an + extended interface. The value of one indicates that only a single + extension is implemented as specified by the second integer in the list. + provides the definition of the + subsequent integers as defined for the LoPAR level of the DDW + option. + + + + + ibm,h-get-dma-xlates-supported + + property name: to identify those PHBs for which + H_GET_DMA_XLATES is supported on all child LIOBNs. + prop-encoded-array: <none> + + + + + ibm,h-get-dma-xlates-limited-supported + + property name: to identify those PHBs for which + H_GET_DMA_XLATES_LIMITED is supported on all child LIOBNs. + prop-encoded-array: <none> + + +
+ +
+ +
+ LPAR Option Properties + + + + “ibm,dma-window” + + property name to define the bus address window + children of this bridge may use for dma. + prop-encoded-array: One ( + logical-bus-number, phys, + size) triple where the logical bus number (LIOBN) is + a one cell cookie representing the unique range of TCE entries assigned + to this bridge encoded as with + encode-int, the number of cells for + phys corresponds to the node’s + “ibm,#dma-address-cells” value while the + number of cells for + size corresponds to the + “ibm,#dma-size-cells” for this + node. + Implementation Note: Platforms that support PHB level + granularity of IO assignment to partitions place the + “ibm,dma-window” property in the PHB + node, while platforms that support slot level granularity place the + “ibm,dma-window” property in the bridge + node that creates the per slot bus isolation. + Note: The first element of the ibm,dma-window triple + (the LIOBN) is used as a parameter to firmware DMA setup routines to + identify the specific I/O address space (TCE table) to be + referenced. + + + + + “ibm,is-vf” + + property name to define that the node represents an + I/O Virtualized instance of an I/O adapter. + prop-encoded-array: A one cell value that represents the LoPAR + architectural level of the virtualization: + + + “<emphasis>ibm,is-vf</emphasis> ” Values + + + + + + + + + + Value: + + + + + Description: + + + + + + + + 0 + + + Not used + + + + + 1 + + + Per LoPAR + + + + + All others + + + Reserved + + + + +
+
+
+
+ +
+ +
+ +
+ +
+ +
+ Memory Node + + This section defines the LoPAR modifications to the OF / + memory node. In LoPAR, the memory allocated to an OS + image may be divided into a number of allocation units called + “regions” or “Logical Memory Blocks (LMB). An OS image + may be dynamically allocated additional regions or may be asked to + release regions. Each LMB is either represented in the device tree by its + own / + memory node or by an entry in + /ibm,dynamic-reconfiguration-memory nodes (see + ). The / + memory node that refers to the storage starting at + real address zero ( + “reg” property starting at the value + zero) always remains allocated to an OS image. The client program is + initially loaded into this storage, called the RMA, that is represented + by the first value of the + “reg” property of this first / + memory node. Additional storage regions may each be + represented by their own / + memory node that includes dynamic reconfiguration + (DR) properties or by an entry in /ibm,dynamic-reconfiguration-memory nodes. + To support dynamic addition and removal of regions, the / node + contains the properties: + ibm,drc-types (MEM), + ibm,drc-indexes ibm,drc-names and + ibm,drc-power-domains (-1's). These properties have + entries for the maximum number of dynamically reconfigurable regions that + the platform supports for the specific OS image. + +
+ Properties of the memory Node + + In addition to the standard properties defined for the + /memory node, the following are required for each + node representing a dynamically allocable memory region. Platforms that + support the dynamic reconfiguration of memory regions represent each such + logical memory block with its own + /memory node. Any new memory granted to an OS image + is done so with a new + /memory node, and OS images may free memory only in + full blocks represented by one of its currently held + /memory nodes. + The value of + “#address-cells” + for this node is 1. + The value of + “#size-cells” + for this node is 0 because the children of this node do not consume any physical + address space. + The + “ibm,my-drc-index” property as defined in + + . + + + + “ibm,preservable” + + property name that denotes the platform’s + ability to preserve the contents of the storage represented by this + node. + prop-encoded-array: A integer encoded as with + encode-int that represents + the ability of the platform to preserve the contents of the storage. + All non-negative values represents the expected length of time, in + minutes, that the platform can sustain the state of the storage. A value + of 0 indicates the storage is not preservable and the client program may + not register this storage for preservation, this is the assumed state if the + “preservable” + property is not present. The largest positive number represents an indefinite + retention time as provided by such technologies as flash storage. + Negative values indicate that the storage is preservable as long as + external power is maintained, perhaps by an external battery not directly + integrated into the platform. + + + + + “ibm,preserved” + + property name that denotes the preservation state of + the contents of the storage represented by this node. + + prop-encoded-array: An integer encoded as with + encode-int that represents the preservation state of + the storage. The defined states are: + 0= The storage was not registered for preservation and thus not + preserved. This is the assumed state if the + “preserved” property is not present. This + is also the state if the platform has lost knowledge of the preservation + registration state of the storage. + 1= The storage was registered for preservation and is has been + preserved since the client program last modified it. + 2= The storage was registered for preservation, however, the + contents have not been preserved. + + + + + “ibm,expected#pages” + + property name that denotes the number of pages that + the client program is expected to use to virtually map the LMB + represented by this node. + + prop-encoded-array: An integer encoded as with + encode-int that represents the log base 2 of the + expected number of virtual pages that the client program will use to map + the LMB represented by this node. + + + + + “ibm,no-h-migrate-dma” + + property name that designates that the memory in the + memory node in which this property resides cannot + have the H_MIGRATE_DMA hcall() used against it. + prop-encoded-value: <none> this is a name only + property. + + + + +
+ +
+ ibm,dynamic-reconfiguration-memory + + This device tree node defines an alternative means to represent a + number of dynamically-reconfigurable logical memory blocks (LMBs). This + node must only be generated by OF when instructed to do so by the client + program in the ELF header. All memory which is not subject to dynamic + reconfiguration (such as the RMA) is represented in + /memory node(s). + This node is a child of root. This node does not have a unit + address or + “reg” property. + The following properties are defined. + + + + “ibm,lmb-size” + + property name that defines the size of each + dynamically reconfigurable LMB. + prop-encoded-array: An integer encoded as with + encode-phys that represents the size in bytes of each + LMB. + + + + + “ibm,associativity-lookup-arrays” + + property name that defines a lookup array in which to + find the + ibm,associativity-array property value for the + LMBs. + prop-encoded-array: The number M of associativity + lists encoded as with + encode-int, the number N of entries per + associativity list encoded as with + encode-int, followed by M associativity lists each + of length N integers encoded as with + encode-int. + This property is used to duplicate the function of the + “ibm,associativity” property in a + /memory node. Each “assigned” LMB + represented has an index valued between 0 and M-1 which is used as in + index into this table to select which associativity list to use for the + LMB. “unassigned” LMBs are place holders for potential DLPAR + additions, for which the associativity list index is meaningless and is + given the reserved value of -1. This static property, need only contain + values relevant for the LMBs presented in the + “ibm,dynamicreconfiguration-memory” node; + for a dynamic LPAR addition of a new LMB, the device tree fragment + reported by the + ibm,configure-connector RTAS function is a /memory + node, with the inclusion of the + “ibm,associativity” device tree property + defined in + . + + + + + “ibm,dynamic-memory” + + property name that defines memory subject to dynamic + reconfiguration. + prop-encoded-array: The number N of LMB list entries + defined at boot time, encoded as with + encode-int, followed by N LMB list entries. + An LMB list entry consists of the following elements. There is one + LMB list entry per LMB represented. + Logical address of the start of the LMB, encodes as with + encode-phys. This corresponds to the first words in + the + “reg” property in a + /memory device tree node. + DRC index of the LMB, encoded as with + encode-int. This corresponds to the + “ibm,my-drc-index” property in a + /memory device tree node. + Four (4) bytes reserved for future expansion of flag. + Associativity list index for the LMB, encoded as with + encode-int. This is used as an index into + “ibm,associativity-lookup-arrays” + property defined above to retrieve the associativity list for the LMB. The associativity + list corresponds to the + “ibm,associativity” property in a + /memory device tree node. + A flags word, encoded as with + encode-int. This word represents 32 boolean flags. + As of this definition, flag bits are defined to correspond to the + “ibm,preservable” and + “ibm,preserved” properties in a + /memory device tree node. This definition allows for + additional flags to be added in the future. + The following bits in the “flags word” above are + defined. + + + Flag Word + + + + + + + + Name + + + Bit Position + + + Description + + + + + preserved + + + 0x00000001 + + + If b'0', corresponds to the + “ibm,preserved” property having + a zero value. + If b'1', corresponds to the + “ibm,preserved” property having + a non-zero value, and the preserved_state bit below indicates + the state of preservation. + + + + + preservable + + + 0x00000002 + + + If b'0', corresponds to the + “ibm,preservable” property + having a zero value. + If b'1', corresponds to the + “ibm,preservable” property + having a non-zero value. + + + + + preserved_state + + + 0x00000004 + + + If b'0', corresponds to the + “ibm,preserved” property having + a 0x1 value. + If b'1', corresponds to the + “ibm,preserved” property having + a 0x2 value (and, in the old binding, the LMB having a status + of “fail”). + + + + + assigned + + + 0x00000008 + + + If b'1', this LMB is assigned to the partition as of boot + time. If b'0', this LMB is not assigned to the partition as of + boot time. + + + + + No H_MIGRATE_DMA + + + 0x00000010 + + + If b'0', corresponds to non-existence of the + “ibm,no-h-migrate-dma” in the + memory node. + If b'1', corresponds to existence of the + “ibm,no-h-migrate-dma” in the + memory node. + + + + + DRC invalid + + + 0x00000020 + + + If b'0', the DRC field of + “ibm,dynamic-memory” property + is valid. + If b'1', the DRC field of + “ibm,dynamic-memory” property + is invalid. + + + + + Associativity Index + + + 0x00000040 + + + If b'0', the Associativity List Index field of + “ibm,dynamic-memory” property + is valid. + If b'1', the Associativity List Index field of + “ibm,dynamic-memory” property + is invalid. + + + + + Reserved Memory + + + 0x00000080 + + + If b'0', corresponds to the + “status” property having a + value of “okay”. + If b'1', corresponds to the + “status” property having a + value of “reserved”. + + + + +
+
+
+ + + “ibm,memory-flags-mask” + + property name that defined which flags in the + “flags word” above are defined in this version of this + architecture. + prop-encoded-array: An integer encoded as with + encode-int with all flag bits recognized by this + version of this architecture having a b'1' value. For this version, the + value will be 0x000000FF. + + + + + “ibm,memory-preservation-time” + + property name that defined the time value that would + appear in the + “ibm,preservable” property in the old + bindings for a preservable LMB. + prop-encoded-array: An integer value encoded as with + encode-int that represents the expected length of + time, in minutes, that the platform can sustain the state of power for a + preservable LMB. The largest positive number represents an indefinite + retention time as provided by such technologies as flash storage. A value + zero indicates that no memory will be marked as preservable. + + +
+ +
+ +
+ +
+ Memory Controller Nodes + This section describes + memory-controller nodes and their properties. NUMA + configurations, have multiple + memory-controller nodes in the device tree one for + each Central Electronics Complex (CEC). In dynamic reconfiguration NUMA + environments, these + /memory-controller nodes are subject to standard + LoPAR dynamic reconfiguration operations and contain standard LoPAR + dynamic reconfiguration properties. + +
+ Memory Controller Node Properties + + No nodes of type + memory-controller shall be defined anywhere in the + device tree when the platform fully abstracts the memory controller and + the OS has no access to the memory controller (typically when running in + a partition). Otherwise, one or more nodes of type + memory-controller shall be defined as a child of + “/” (the root) and shall not have a + “ranges” property. The following + properties shall apply to each of these nodes. If the platform does not + abstract the functions of a platform's multiple memory controllers via + firmware (such as RTAS) then the platform shall + include a node of type + memory-controller for each Memory Controller in the + platform. + A Memory Controller can also have the + “used-by-rtas” property (see + ), if it has functions + abstracted by RTAS. + + + + “device_type” [S] + + Standard property name that denotes a Memory Controller + node. + prop-encoded-array: A string, encoded as with + encode-string. + The value of this property shall be + “memory-controller”. + + + + + “reg” [S] + + Standard + property name defines the base physical address and + size of this Memory Controller’s addressable register space. + prop-encoded-array: One ( + phys-address, size) pair where + phys-address is encoded as with + encode-phys, and + size is encoded as with + encode-int. + The property value shall be the base physical address and size of + this Memory Controller’s register space. + + + + + “model” [S] + + Standard property name indicating this Memory + Controller’s manufacturer, part number and revision level. + prop-encoded-array: Text string, encoded as with + encode-string. + The value of this property is a vendor dependent string which + uniquely identifies this Memory Controller and shall be correlated to its + manufacturer, part number, and revision level. (see Core document for + more information.) + + + + + “external-control” [S] + + property name indicates this Memory + Controller’s ability to support the PA external control + facility. + prop-encoded-int: List of integers, each encoded as + with encode-int. + The property value, if present, is a list of Resource ID’s + the version of the PA external control facility supports. This property + shall be present if this Memory Controller supports the PA external + control facility, otherwise the property shall be absent. + + + + + “error-checking” [S] + + Standard property name defines the error checking capability + of the node. + prop-encoded-array: a string, encoded as with + encode-string, where the value could equal + “none”, “ecc”, or “parity”. + The value of + “#address-cells” + for this node is 1. + The value of + “#size-cells” for this node is 0 because + the children of this node do not consume any physical address + space. + + + + +
+ +
+ +
+ <literal>IBM,memory-module</literal> Nodes + + Memory packaged on DIMMs or DIMM like modules are represented in + the device tree with + IBM,memory-module nodes. These nodes represent + physical packages, these packages do not necessarily map directly to a + memory address range. + No nodes of type + IBM,memory-module shall be defined anywhere in the + device tree when the platform supports dynamic VPD via the RTAS + ibm,get-vpd service. Instead the VPD that would + normally be reported via the + “ibm,vpd” property in these nodes shall + be reported by + ibm,get-vpd. + +
+ Properties for Memory Modules + + Memory modules appear as children of the + memory node or, for platforms supporting memory DR + operations (either logical or physical), the + memory-controller node of the device tree. This + section defines properties for the + IBM,memory-module nodes and additional properties for + the + memory and + memory-controller nodes. + +
+ +
+ <literal>IBM,memory-module</literal> Node Properties + + An + IBM,memory-module node is a child of the + memory node or, for platforms supporting memory DR + operations (either logical or physical), the + memory-controller node. + The + “name” + of the node is “IBM,memory-module” + The + “device_type” + of the node is “IBM,memory-module” + The + “reg” + standard property for an + IBM,memory-module node is its memory module number + which is an arbitrary OF selected enumeration. + The + “ibm,size” + property for an + IBM,memory-module node is an integer which is less + than 4GB and which by itself indicates the size of the memory module, in + bytes, if the memory module is smaller than 4GB and if + “status” is + “okay” or + “fail”. + If the memory module is larger than or equal to 4GB in size, then + the + “ibm,size-upper” + property for an + IBM,memory-module node is present in addition to the + “ibm,size” property. This property is an + integer which is multiplied times 4GB and then added to the value of the + “ibm,size” property to get the size of + the module, in bytes. The property + “ibm,size-upper” is not required if the + memory module size is less than 4GB. + The + “status” + standard property for an + IBM,memory-module node may have one of the following + string values: + + + + “okay” for a good memory module + + + + “fail” for a bad memory module + + + + “fail-no-matched-pair” for a missing + memory module if one of a pair is missing + + + + “fail-unsupport” for an unsupported + memory module + + + + “fail-partial” for a bad memory module + where part of the memory on the module is bad and has not been configured + and part of the memory is good and has been configured. + + + + + “fail-excess-memory” for + “okay” memory modules that are not + configured because they exceed the system memory addressability of the + platform. + + + + + “disabled” for a memory module that has + been manually deconfigured. + + + + + + “ibm,mem-banks” + + property name defines the number of memory banks + contained within the memory module. + + prop-encoded-array: an integer, encoded as with + encode-int, which describes whether this is a 1, 2, + or 4-bank module, with a corresponding value of 1, 2 or 4 and so on to + match the number of banks in the physical device. + + + + + “ibm,mem-type” + + property name defines the memory module type. + + prop-encoded-array: a string, encoded as with + encode-string, that describes the type of module, + with values of + “FP” (Fast Page), + “EDO” (Extended Data Out), or + “SDRAM” (Synchronous DRAM). + + + + + “ibm,mem-err-det” + + property name defines the type of error detection + mechanism supported by the module + prop-encoded-array: a string, encoded as with + encode-string, with values of + “none”, + “parity”, or + “ECC”. + + + + + “ibm,mem-speed” + + property name defines the access or clock speed + supported by the module, in picoseconds + + prop-encoded-array: an integer, encoded as with + encode-int, which describes the access or clock + speed supported by the module, in picoseconds. + + + + +
+ +
+ +
+ Interrupt Controller Nodes + + This section describes the properties for the LoPAR interrupt + controller node. If an interrupt controller node includes the + “used-by-rtas” property, then the + platform includes firmware code for accessing the interrupt + controller. + For LSIs, the platform shall adhere to the + interrupt structure OF + representation. + +
+ PowerPC External Interrupt Controller Nodes + + This section describes the properties for the PowerPC External + Interrupt Controller nodes. PowerPC interrupt controllers are normally + packaged inside other system chips, however, they are logically + represented in the device tree by two or more independent interrupt + controller nodes. Each node reports either the interrupt source layer + resources that are housed in a single Bus Unit Controller (BUC) e.g. host + bridge, or logical equivalent, or a subset of the resources associated + with the platform’s interrupt presentation layer. The node per BUC + and presentation layer subset divisions provides a foundation for dynamic + reconfiguration. + At a dynamic reconfiguration event, such as adding an IO drawer, or + removing a processor, the interrupt controller nodes associated with the + added or removed hardware will also be added or removed. Therefore. + platforms should report, in individual nodes, each interrupt controller + that occupies a separate physical package. And OSs should expect a fine + granularity of interrupt controller reporting. + + + + “ibm,interrupt-domain” + + property name that denotes a PowerPC External + Interrupt Domain + prop-encoded-array: An integer encoded as with + encode-int. + + + + + +
+ PowerPC External Interrupt Presentation Controller Node + Properties + + The following properties apply to this node. + + + + “name” [S] + + Standard + property name that denotes a PowerPC External + Interrupt Controller. + prop-encoded-array: A string, encoded as with + encode-string. + The value of this string shall be + “interrupt-controller”. + + + + + “device_type” [S] + + Standard + property name that indicates an Interrupt + Controller. + prop-encoded-array: A string, encoded as with + encode-string. + The value of this property shall be + “PowerPC-External-Interrupt-Presentation”. + + + + + “reg” [S] + + Standard + property name defines the base physical address(s) + and size(s) of this PowerPC External Interrupt Presentation layer’s + registers. + + prop-encoded-array: List of ( + phys-addr, size + ) specifications. + + Phys-addr is encoded as with + encode-phys, and + size is encoded as with + encode-int. + The entries shall represent the base address of a single set of + PowerPC External Interrupt Presentation Layer Registers of the Interrupt + Management Area. There shall be one entry for each interrupt server queue + supported by this unit. The order of the entries shall correspond to the + entries in the + “ibm,interrupt-server-ranges” property + described below. + + + + + “compatible” [S] + + Standard + property name to define alternate + “name” property values. + + prop-encoded-array: The concatenation, with + encode+, of an arbitrary number of text strings, + each encoded as with + encode-string. + The property value shall include + “IBM,ppc-xicp”. + + + + + “ibm,interrupt-buid-size” + + property name: Defines the number of bits + implemented in the concatenation of the BUID fields. + + prop-encoded-value: An integer in the range of 9 to + 20 encoded as with + encode-int. + As platforms grow in size so as to require use of larger BUIDs + (values of the + “ibm,interrupt-buid-size” + property greater than 9) the platform engineers need to interlock with their OS + providers to ensure support. + + + + + “ibm,interrupt-server-ranges” + + Property name that defines the interrupt server + number(s) and range(s) handled by this unit. + prop-encoded-array: List of (server#, range) specifications. + Server# is encoded as with + encode-int in the range of 0 - 2 + the largest value of the + “ibm,interrupt-server#-size” property contained in the device + tree. + Range is encoded as with + encode-int. + The first entry in this list shall contain the + server# associated with the first + “reg” property entry. The + server# corresponds to a value of a processor’s + “ibm,ppc-interrupt-server#s” property. + The range shall be the number of contiguous + server# s supported by the unit (this also + corresponds to the number of + “reg” entries). + + + + + “interrupt-controller” [S] + + Standard + property name to indicate an interrupt (sub-)tree + root. + prop-encoded-array: <none> The presence of + this property indicates that this node represents an interrupt + controller. + + + + + “model” [S] + + Standard + property name indicating this unit’s + manufacturer, part number, and revision level. + + prop-encoded-array: Text string, encoded as with + encode-string. + The value of this property shall be a string which uniquely + identifies the interrupt controller and shall be correlated to the + manufacturer, part number, and revision level. This value is device + dependent (see the Core document for more information). + + + + +
+ +
+ PowerPC External Interrupt Source Controller Node + Properties + + Interrupt source controller resources as represented by + “interrupt-ranges”, + “#interrupt-cells”, and + “ibm,interrupt-server#-size” properties + may be reported in stand-alone interrupt source controller nodes or in + other logical equivalent nodes which contain the + “interrupt-controller” property. The + following properties apply to these nodes. + + + + “name” [S] + + Standard + property name that denotes a PowerPC External + Interrupt Controller. + prop-encoded-array: A string, encoded as with + encode-string. + The value of this string shall be + “interrupt-controller”. + + + + + “device_type” [S] + + Standard + property name that indicates the specific flavor of + Interrupt Source Controller. + prop-encoded-array: A string, encoded as with + encode-string. + The value of this property shall be one of the following: + + “PowerPC-LSI-Source”. + For Level Sensitive Interrupt source controllers. + + “PowerPC-MSI-Source”. + For Message Sensitive Interrupt source controllers such as used + with PCI MSI. + + + + + “reg” [S] + + Standard + property name defines the base physical address(s) + and size(s) of this PowerPC External Interrupt Source if any. + prop-encoded-array: List of ( + phys-addr, size) specifications. + Phys-addr is encoded as with + encode-phys, and + size is encoded as with + encode-int. + If the + “device-type” of the interrupt source + controller is + “PowerPC-MSI-Source”, then the last + “reg” entry shall correspond to the + interrupt controller’s 4 byte Message Interrupt Input Port. + + + + + “compatible” [S] + + Standard + property name to define alternate + “name” property values. + prop-encoded-array: The concatenation, with + encode+, of an arbitrary number of text strings, + each encoded as with + encode-string. + The property value shall include + “ibm,ppc-xics”. + + + + + “interrupt-ranges” [S] + + Standard + property name that defines the interrupt number(s) + and range(s) handled by this unit. + prop-encoded-array: List of ( + int-number, range) specifications. + Int-number is encoded as with + encode-int. + + Range is encoded as with + encode-int. + The first entry in this list shall contain the + int-number associated with the first + “reg” property entry. The + int-number is the value representing the interrupt + source as would appear in the PowerPC External Interrupt Architecture + XISR. The range shall be the number of sequential interrupt numbers which + this unit can generate. + + + + + “interrupt-controller” [S] + + Standard + property name to indicate an interrupt (sub-)tree + root. + prop-encoded-array: <none> The presence of + this property indicates that this node represents an interrupt + controller. + + + + + “model” [S] + + Standard + property name indicating this unit’s + manufacturer, part number, and revision level. + prop-encoded-array: Text string, encoded as with + encode-string. + The value of this property shall be a string which uniquely + identifies the interrupt controller and shall be correlated to the + manufacturer, part number, and revision level. This value is device + dependent (see the Core document for more information). + + + + + “#interrupt-cells” [S] + + Standard property name to define the number of cells in an + interrupt-specifier within an interrupt + domain. + prop-encoded-array: An integer, encoded as with + encode-int, that denotes the number of cells + required to represent an interrupt specifier in its child nodes. + The value of this property for the PowerPC External Interrupt + option shall be 2. Thus all interrupt specifiers (as used in the standard + “interrupts” property) shall consist of + two cells, each containing an integer encoded as with + encode-int. The first integer represents the + interrupt number the second integer is the trigger code: 0 for edge + triggered, 1 for level triggered. + + + + + “ibm,interrupt-server#-size” + + property name: Defines the number of bits + implemented in the concatenation of the server#extension and server# + fields. + prop-encoded-value: An integer in the range of 8 to + 24 encoded as with + encode-int. + As platforms grow in size so as to require use of the + server#extension field (values of the + “ibm,interrupt-server#-size” + property greater than 8) the platform engineers need to interlock with their OS + providers to ensure support. + + + + +
+ +
+ +
+ +
+ Additional Node Properties + + Additional properties and methods are defined in this section for + LoPAR binding adapters and/or devices. + +
+ Interrupt Properties + + The properties in this section shall be implemented for any device + that can present an interrupt for an LoPAR platform implementation. The + platform shall adhere to the + definition for the interrupt + structure. + +
+ +
+ Miscellaneous Node Properties + + This section defines properties which support devices, adapter and + buses with geographical information. These properties shall be present + for an LoPAR platform. + + + + “built-in” [S] + + Standard property name: Any device that connects to an + industry standard I/O expansion bus attached through a non-standard + connector. + prop-encoded-string: <none>. + Note: This property will also include platform + ‘riser’ cards. + + + + + “used-by-rtas” [S] + + Standard property name: Indicates the device can be in use by + an RTAS Function Call. + prop-encoded-int: Presence of property indicates a + device may have an I/O or resource conflict with a RTAS Function + Call. + + + + + The use of the + “slot-names” property defined below is + deprecated in favor of the + “ibm,loc-code” property. + + + + “slot-names” [S] + + property name: Describes external labeling of + adapter/device connectors. + prop-encoded-array: An integer, encoded as with + encode-int, followed by a list of strings, each + encoded as with + encode-string. + The integer portion of the property value is a bitmask of available + connectors; for each connector associated with the adapter/device, the + bit corresponding to that connector’s ID number is set from + least-significant to most-significant ID number. The number of following + strings is the same as the number of connectors; the first string gives + the platform nomenclature or label for the connector with the smallest ID + number, and so on. + + Note: Each device that has a connector should + identify the order and contents of the list of strings in a + binding. + + + + + “ibm,loc-code” [S] + + property name to provide location code(s) for the + Field Replacable Unit. + prop-encoded-array: an arbitrary number of strings, + encoded as with + encode-string. + + + + + “ibm,vpd” + + property name to provide Vital Product Data (VPD) + information as defined in + . + + prop-encoded-array: the concatenation, with + encode+, of one or more pairs of elements, the first + element of each pair being an integer (representing the length of the + second element) encoded as with + encode-int, and the second element of each pair + being a series of bytes (the VPD data) encoded as with + encode-bytes. + + + + + “ibm,loc-code-map” + + prop-name to identify that the interface may have + child nodes, which may or may not be present in the device tree, that + have a physical location code based on their unit-address. + prop-encoded-array: A list of pairs (unit-address, + location-code). The unit-address is the child device node's + “reg” property string-encoded according + to the parent node's architecture and encoded as with encode-string. The + location-code is the child device node's + “ibm,loc-code” property encoded as with + encode-string. + If a child device under this node has a matching unit-address, the + location code corresponds to the physical location of that child + device. + + + + +
+ +
+ +
+ <literal>/aliases</literal> Node + + A device alias, or simply + alias, is a shorthand representation of a + device-path. + Aliases are properties of the + aliases node, encoded as with + encode-string. Aliases are typically used by a user + to facilitate not specifying a long path name at the User Interface + ‘ok’ prompt. + An implementation of OF for an LoPAR platform shall provide the + following aliases as properties of the + aliases node, if the corresponding device + exists: + + + + “disk” [S] + + property name indicating the device path of the + factory default disk that is the preferred boot disk + Implementation Note: The preferred + boot disk should be the disk + that results in the fastest boot time. Implementations might + automatically spin up a disk at system power on and provide mechanisms + for firmware to report that disk in this property. + for the platform. + + + + + “tape” [S] + + property name indicating the device path of the + factory default tape. + + + + + “cdrom” [S] + + property name indicating the device path of the + factory default CDROM. + + + + + “keyboard” [S] + + property name indicating the device path to the + keyboard to be used for the User Interface. + + + + + “mouse” [S] + + property name indicating the device path to the mouse + to be used for the User Interface. + + + + + “screen” [S] + + property name indicating the device path to the + screen to be used for the User Interface. + + + + + “pc-keyboard” [S] + + property name indicating the device path of the + factory default PC-style keyboard. + + + + + “pc-mouse” [S] + + property name indicating the device path of the + factory default PC-style mouse. + + + + + “adb-keyboard” [S] + + property name indicating the device path of the + factory default ADB-style keyboard. + + + + + “adb-mouse” [S] + + property name indicating the device path of the + factory default ADB-style mouse. + + + + + “scsi” [S] + + property name indicating the device path of the + factory default built-in SCSI device. + + + + + “com1” [S] + + property name indicating the device path of the + factory default 16550-style serial port known as + “com1.” + + + + + “com2” [S] + + property name indicating the device path of the + factory default 16550-style serial port known as “com2.” + + + + + “scca” [S] + + property name indicating the device path of the + factory default SCC-style serial port known as “SCCA.” + + + + + “sccb” [S] + + property name indicating the device path of the + factory default SCC-style serial port known as “SCCB.” + + + + + “floppy” [S] + + property name indicating the device path of the + factory default floppy drive. + + + + + “net” [S] + + property name indicating the device path of the + factory default built-in network interface controller. + + + + + “rtc” [S] + + property name indicating the device path of the + factory default real-time-clock chip. + + + + + “nvram” [S] + + property name indicating the device path of the + factory default NVRAM. + + + + +
+ +
+ <literal>/event-sources</literal> Node + The + /event-sources node describes the possible RTAS Error + and Event Classes for interrupts. The + /event-sources node shall be defined to be a child of + the root device tree node if the platform supports any event interrupts. + The following properties shall be defined for this node: + + + + “name” [S] + + Standard + property name that denotes the Event Sources. + prop-encoded-array: A string, encoded as with + encode-string. + The value of this string shall be + “event-sources”. + When events are reported as virtual interrupts there shall be a + node of + device_type + “PowerPC-External-Interrupt-Presentation” from + which the virtual interrupt source BUID size can be obtained. Also the + event-sources node represents the interrupt source + node for virtual event interrupts and thus the following properties shall + be defined for this node: + + + + + “interrupt-controller” [S] + + Standard property name: to indicate the events interrupt tree + root. + + prop-encoded-array: <none> The presence of + this property indicates that this node represents a source of virtual + interrupts. Encoded with + encode-null. + + + + + “#interrupt-cells” [S] + + Refer to the definition of the + “#interrupt-cells” property for nodes of + device_type “PowerPC-LSI-Source” for + information about the definition of this property for virtual event + interrupts. + + + + + “interrupt-ranges” [S] + + Refer to the definition of the + “interrupt-ranges” property for nodes of + device_type + “PowerPC-LSI-Source” for information + about the definition of this property for virtual event + interrupts. + Children of + /event-sources present the interrupt specifiers + associated with the reporting of platform events. LoPAR platforms have + historically implied the default value of + “#interrupt-cells” of 1 to report the + associated interrupt specifiers without the interrupt trigger specifier. + However, all new designs shall present interrupt specifiers with explicit + trigger level values. + + + + +
+ Child nodes of the Event Sources Node + + The following specify standard child nodes of the + /event-sources node. These nodes could be present in + an LoPAR platform. + Children of the + /event-sources node specify the interrupt specifiers + associated with the reporting of platform events. Interrupt designs shall + use the 1275 standard + “interrupts” property as configured to + report the interrupt specifier for the platforms PowerPC interrupt + controller. The interrupt specifiers if the + “interrupts” property indicates one or + more interrupt source numbers that are used to report event + conditions. + +
+ internal-errors + + The presence of the node indicates that all or some of the function + has been implemented and will be reported using an interrupt. + + + + “name” [S] + + Standard + property name that denotes the internal error’s + events. + + prop-encoded-array: A string, encoded as with + encode-string. + The value of this string shall be + “internal-error”. + + + + + +
+ +
+ epow-events + + The presence of the node indicates that all or some of the function + has been implemented and will be reported using an interrupt. + + + + “name” [S] + + Standard + property name that denotes the EPOW events. + prop-encoded-array: A string, encoded as with + encode-string. + The value of this string shall be + “epow-events”. + + + + +
+ +
+ ibm,io-events + + The presence of the node indicates that all or some of the function + has been implemented and will be reported using an interrupt. + + “name” S + Standard + property name that denotes the I/O sub-system + events. + + prop-encoded-array: A string, encoded as with + encode-string. + The value of this string shall be + “ibm,io-events”. + +
+ +
+ +
+ +
+ <literal>/reserved</literal> Node + + This section defines a reserved node which shall have a + “reg” property which allocates addresses + (on the bus of which it is a child) which is intended to be a place to + identify hardware registers that do not otherwise belong to a recognized + device. + + + + “name” [S] + + Standard + property name that denotes reserved addresses that do + not belong to a recognized device. + prop-encoded-array: A string, encoded as with + encode-string. + The value of this string shall be + “reserved”. + + + + + “device_type” [S] + + Standard + property name that indicates the device type. + + prop-encoded-array: Text string, encoded as with + encode-string. + The value of this property shall be + “reserved”. + + + + + “reg” [S] + + Standard + property name defines a hardware register address and + range of addresses not intended for OS (OS) use. + prop-encoded-array: List of ( + phys-addr, size) specifications. + Phys-addr is a (phys.lo ... phys.hi) sequence equal + to #address-cells, encoded as with + encode-phys. + + size is a sequence equal to + #size-cells encoded as with + encode-size. + The first entry in this list shall be a hardware register address ( + phys-addr) and a range of hardware addresses ( + size) that is not intended for OS usage. Successive + entries in this list shall be additional hardware addresses not intended + for OS usage. + + + + +
+ +
+ <literal>/chosen</literal> Node + + This section lists additional properties as required under the + /chosen node with the following text in a manner that + is consistent with + , Section 3.5. + + + + “nvram” [S] + + Standard property name that defines the package + Ihandle for CHRP NVRAM. + prop-encoded-array: an integer, as encoded with + encode-int, that is the package + Ihandle the CHRP NVRAM. + Note: The nvram Node identified in the /chosen Node + shall support a size method as specified in + , Section 7.2. The size method + will return a value that is the total platform NVRAM size. + + + + + “ibm,rpa-client-config” + + property name that defines the processed fields of + the client program’s IBM,RPA-Client-Config ELF note section. + + prop-encoded-array: an array of integers encoded as + with + encode-int, that consist of the fields of the note + section that the firmware processed prior to loading the client + program. + + + + + “ibm,architecture-vec-5” + + property name: that presents the values of the + option vector #5 negotiated by the + ibm,client architecture-support method. Presence of + this property signifies that the client program load module invoked the + ibm,client architecture-support method. + prop-encoded-array: An array of bytes having the + format of the fifth option vector from + representing the value chosen + by the ibm,client architecture-support method. + + + + + “ibm,client-architecture-support-reboot” + + property name: that indicates that one or more + reboots have occurred in this boot sequence in order to adjust the + platform settings to match the specification in the + “ibm,client-architecture-support” open + firmware method or the IBM,RPA-Client-Config ELF header note. Note this + property is not included for the first boot in a sequence. + prop-encoded-array: encoded as with + encode-int that specifies the number of reboots that + have occurred in this boot sequence in order to adjust the platform + settings to match the specification in the + “ibm,client-architecture-support” open + firmware method or the IBM,RPA-Client-Config ELF header note. + + + + +
+ +
+ <literal>/vdevice</literal> Node + + The node of type vdevice is a child of the root node. It is only + present in trees that also include the + “ibm,hypertas_functions” property. It, + and its children represent the virtualized devices that are implemented + by the platform firmware. Virtualized devices do not surface to a client + program a direct hardware interface. They do not appear to take up space + in the client program’s address map. Standard property names + associated with the + /vdevice node have special values as specified + below. + + + + “#address-cells” [S] + + Standard + property name encoded as with + encode-int that specifies the number of cells + required to represent a child bus address. Shall have the value of 1. + + + + + “#size-cells” [S] + + Standard + property name encoded as with + encode-int that specifies the number of cells + required to encode the size field of a child’s reg property. Shall + have the value of 0 indicating that no child node may actually take + physical address space. + + + + + “name” [S] + + Standard + property name string encoded as with + encode-string that defines the name of node. The + value shall be the string “vdevice”. + + + + + “device_type” [S] + + Standard + property name string encoded as with + encode-string that defines the device type of the + node. The value shall be the string “vdevice”. + + + + + “ibm,max-virtual-dma-size” + + Vendor unique + property name indicating the maximum size virtual dma + transfer size supported by the platform + prop-encoded-array: a single integer encoded as with + encode-int. + + + + + “ibm,migration-control” + + property name that indicates when platform firmware + supports the ability for an I/O server partition to delay the migration + of a partition to a different server in order to let any in progress I/O + to be completed. Specifically, this property indicates that the + DISABLE_MIGRATION and ENABLE_MIGRATION subfunctions of the H_VIOCTL + hypervisor call are supported. + prop-encoded-array: None, this is a name only + property. + + + + + “ibm,reserved-virtual-addresses” + + Vendor unique + property name indicating ranges of the client program + virtual address space that are reserved for platform use. + + prop-encoded-array: one or more pairs of + abbreviated-virtual-address, virtual-address-length specifications + representing the origin and length respectively of a reserved virtual + address range. + abbreviated-virtual-address: Consists of two integers + encoded as with + encode-int representing the high order and low order + 32 bits respectively of the 64 bit abbreviated virtual address. The full + virtual address is the abbreviated-virtual-address concatenated with 3 + low order bytes of 0x00. + virtual-address-length: Consists of a single integer + encoded as with + encode-int representing the number of consecutive 4K + pages contained within the range. + + + + +
+ Children of the <literal>/vdevice</literal> Node + + The children of the + /vdevice node represent the individual virtual + devices. + Children of the + /vdevice node that support dma operations contain a + the + “ibm,my-dma-window” property as defined + below: + + + + “ibm,my-dma-window” + + property name that defines the bus address window(s) + that this IOA may use for its dma. + + prop-encoded-array: One or more ( + logical-I/O-bus-number, phys, + size) triple(s) where the logical bus number is a + one cell cookie representing the unique range of TCE entries assigned to + this IOA encoded as with + encode-int, the number of cells for + phys corresponds to the node’s + “ibm,#dma-address-cells” value while the + number of cells for + size corresponds to the + “ibm,#dma-size-cells” for this node. The + first triple represents the TCE range available for mapping local memory, + while the second triple, if it exists, is where remote memory mapped by + remote partitions appears. The size field of the second triple shall be + equal to the size field of the corresponding remote partition’s + first triple. + The + “ibm,my-dma-window” property is the per + device equivalent of the + “ibm,dma-window” property found in nodes + representing bus bridges. + Children of the + /vdevice node share the ability to display unique + capabilities as represented by the following properties. + + + + + “ibm,async-dma-required” + + property name indicates that the virtual device + requires the use of asynchronous virtual DMA interfaces (see + for definition of asynchronous + virtual DMA interfaces). + prop-encoded-array: None, this is a name only + property. + Children of the + /vdevice node which act a a server to other virtual + client devices, display the following property. + + + + + “ibm,vserver” + + property name indicates that the virtual device is a + server to virtual devices. + prop-encoded-array: None, this is a name only + property. + + + + + “ibm,mac-address-filters” + + property name specifies the number of non-broadcast + multicast MAC filters supported by the implementation. + prop-encoded-array: an integer in the range of 0-255 + encoded as with + encode-int. + + + + + “ibm,trunk-adapter” + + property name that indicates that the virtual device + is a trunk adapter server to the logical LAN. + prop-encoded-array: None, this is a name only + property. + + + + + “ibm,illan-options” + + property name: The existence of this property is + required when any of the ILLAN sub-options are implemented and indicates + that the H_ILLAN_ATTRIBUTES hcall() is implemented, and that hcall() is + then used to determine which ILLAN options are implemented. + prop-encoded-array: None, this is a name only + property. + + + + +
+ Virtual Teletype Device + The virtual teletype device allows communication through the + platform’s attached Hardware System Console. There is one such + virtual device node for each virtual terminal enumerated by the + “ibm,termno” property. The unit addresses + of the virtual teletype devices shall correspond to the enumeration + presented in the + “ibm,termno” property. Such virtual + terminals, as represented by the + “ibm,termno” property, are intended for + the use of the client program and shall not be marked + “used-by-rtas”. Similarly they may be + “chosen” as the default input and output device. + + + + “name” [S] + + Standard + property name encoded as with + encode-string that defines the device name. The value + shall be the string + “vty”. + + + + + “reg” [S] + + Standard property name to define a unit address for the node. + One ( + phys-addr, size) pair. The + phys-addr is the unit address of the device + (corresponding to one of the virtual terminals enumerated by the + “ibm,termno” property), and the + size shall have a length of zero. + + + + + “device_type” [S] + + Standard property name encoded as with + encode-string to specify the device type. The value + shall be the string + “serial” indicating that the device + emulates a serial terminal. + + + + + “compatible” [S] + + Standard + property name encoded as with + encode-string to specify the device driver + compatibility. The value shall be one of the strings specified in + . + + + Virtual tty compatibility strings + + + + + + + + + + Compatible property String + Value + + + + + Comments + + + + + + + + + “hvterm1” + + + + Standard client virtual tty protocol + + + + + + “hvterm2” + + + + Standard server virtual tty protocol + + + + + + “hvterm-protocol” + + + + Client virtual tty protocol extended for control of + modems etc. + + + + +
+ See + for further detail on this + virtual device. +
+
+
+ +
+ +
+ Children of + <literal>/vdevice</literal> node defined in other documents + + Like children of the pci bus node, children of + /vdevice may be defined by their own binding + documents or via binding sections/tables in their device specifications. + For example, the binding information for the LoPAR Interpartition + Logical LAN, Virtual SCSI, and Virtual Terminal can be found in the + appropriate sections of this document. The virtualization of traditional + physical devices repositions their associated device tree nodes to be + children of + /vdevice. Examples include NVRAM and Real Time Clock + (RTC) devices which are defined by + . + +
+ +
+ +
+ +
+ Barrier Synchronization Facility + + This section describes the OF node that represents the optional + Barrier Synchronization Register (BSR) facility. If the platform provides + a BSR facility it provides the + ibm,bsr node as a child of + / (root). If the platform provides a client program + with multiple independent facilities, it represents each such facility + with a separate node. A given facility may have multiple representations + through parallel windows. Each window of a given facility is represented + by a separate + “reg” property value. The following + properties are the minimum required, optional support such as dynamic + reconfiguration will add properties per requirements called out in the + . + + + + “name” [S] + + Standard + property name encoded as with + encode-string that defines the device name. The value + shall be the string + “ibm,bsr” for legacy implementations and + “ibm,bsr2” for POWER8 implementations and + beyond. + + + + + “reg” [S] + + Standard + property name to define the addresses for the + facility window(s). + + prop-encoded-array: One or more ( + phys-addr, size) pair(s). The + phys-addr, encoded as with + encode-phys, is the starting address (4 K aligned) of + the window. The + size, encoded in the number of cells specified by + “#size-cells” of the parent, is the + length of the corresponding window. + + + + + “device_type” [S] + + Standard + property name encoded as with + encode-string to specify the device type. The value + shall be the string + “ibm,bsr”. + + + + + “compatible” [S] + + Standard + property name encoded as with + encode-string to specify the device driver + compatibility. The value shall be the string + “ibm,bsr”. + + + + + “ibm,#lock-bytes” + + property name: Indicates the number of lock bytes + per line of the BSR facility. + prop-encoded-array: One or more integers encoded as + with encode-int. When the facility has multiple windows, + as represented by multiple values of the + “reg” property, then there is a + corresponding number of integers, each integer representing the number of + lock bytes per line of the corresponding window. + + + + + “ibm,lock-stride” + + property name: Indicates the number of bytes between + the beginning of lock lines in the BSR facility. + prop-encoded-array: One or more integers encoded as + with encode-int. When the facility + has multiple windows, as represented by multiple values of the + “reg” property, then there is a + corresponding number of integers, each integer representing the number of + bytes to the beginning of the next lock line in the corresponding + window. + + + + +
+ +
+ Nodes of device_type <literal>“block”</literal> and + <literal>“byte”</literal> + + This section describes the OF nodes that provide access to storage + devices in block or byte commands. This applies to such nodes with and + without a + “reg” property. + + + + “ibm,write-supported” + + property name: Indicates the driver supports write + functionality and has been verified by IBM. The use of the write function + without this property is discouraged. + prop-encoded-array: None, this is a name only + property. + + + + + “ibm,16byte-cdb-supported” + + property name: Indicates the driver supports using + the 16 byte Command Descriptor Block format, which is needed to access + above 2 TB on 512 byte block-sized media. + prop-encoded-array: None, this is a name only + property. + + + + +
+ +
+ <literal>/ibm,platform-facilities</literal> + + The node of type + ibm,platform-facilities is a child of the root node. + It and its children represent the non-CPU platform computational + facilities that are available. Platform facilities do not take up space + in the client program’s address map. Standard property names + associated with the + /ibm,platformfacilities node have special values as + specified below. + + + + “#address-cells” [S] + + Standard + property name encoded as with + encode-int that specifies the number of cells + required to represent a child bus address. Shall have the value of + 1. + + + + + “#size-cells” [S] + + Standard + property name encoded as with + encode-int that specifies the number of cells + required to encode the size field of a child’s reg property. Shall + have the value of 0 indicating that no child node may actually take + physical address space. + + + + + “name” [S] + + Standard + property name string encoded as with + encode-string that defines the name of node. The + value shall be the string + “ibm,platform-facilities”. + + + + + “device_type” [S] + + Standard + property name string encoded as with + encode-string that defines the device type of the + node. The value shall be the string + “ibm,platform-facilities”. + Some platform facilities configurations allow multiple facilities + to share a common pool of interrupt server numbers. Individual operations + specify which interrupt server number from the pool shall be used to + signal completion of the operation. To represent such a configuration, + the + /ibm,platformfacilities node may either represent an + interrupt source controller for its children or the interrupt source + controller associated with the shared pool may be represented by a + PowerPC External Interrupt Source Controller Node as an additional child + node of the + /ibm,platform-facilities node + (). Additionally, the node + representing the platform facilities Interrupt Source Controller shall + contain the + “ibm,interrupt-pool” property, and all + platform facilities that share the common pool of interrupts shall + contain the + “ibm,shared-interrupt-pool” property. + + + + + “ibm,interrupt-pool” + + property name: that indicates this interrupt + controller provides a shared pool of interrupt source numbers. + property encoded array: single cell encoded as with + encode-int that represents the type of shared + interrupt pool being represented: Defined values are: 0 with all other + values reserved. + + + + + “ibm,max-async-ops-per-processor” + + property name: that indicates for the partition the + allowed maximum number of outstanding operations for the platform + facility based upon the number of processors currently allocated to the + partition. The total allowable number of such operations outstanding + across all partition processors is the product of the value of + “ibm,max-async-ops-per-processor” and the + number of nodes of type cpu in the current partition device tree. + property encoded array: single cell encoded as with + encode-int + + + + +
+ Children of the <literal>/ibm,platform-facilities</literal> Node + + The children of the + /ibm,platform-facilities node represent the + individual platform facilities. Standard property names associated with + the children of the + /ibm,platform-facilities node have special values as + specified below. Note the children of the + /ibm,platform-facilities node shall contain the + following standard properties with their standard definitions: + + + “compatible” + + + + “name” The defined Values for the + “name” property of children of + /ibm,platform-facilities are (were # is the version + number of the interface): + + + ibm,random-v# Random number generator + + + + ibm,compression-v# Compression/Decompression + engine + + + + ibm,sym-encryption-v# Symmetric encryption/decryption + engine + + + + ibm,asym-encryption-v# Asymmetric + encryption/decryption engine + + + + + + “status” + + + Optionally the children of the + /ibm,platform-facilities node may contain as + appropriate the following standard properties with their standard + definitions: + + + + “interrupts” + + + + Additionally the children of the + /ibm,platform-facilities node may contain as + appropriate the following unique properties: + + + + “ibm,resource-id” + + property name: that indicates the platform facility + resource identification handle. + property encoded array: single cell encoded as with + encode-int + + + + + “ibm,max-sync-cop” + + property name: that indicates the maximum + characteristics of the parameters for a synchronous call of the platform + facility. These characteristics are represented as a series of integers + encoded as with + encode-int that + may grow over time as platform + facilities evolve. The absence of this property indicates that + synchronous operations are not allowed for the given child. + + property encoded array: a series of zero or more or + more cells each encoded as with + encode-int. The interpretation of the series of + integers is unique per the value of the + “name” property: + + + + For the Random number generator: NULL value indicating that all + calls are synchronous + + + + For the compression/decompression engine: Two series of cells the + first series of cells represents the maximums that can be synchronously + compressed. The second series of cells represents the maximums that can + be synchronously decompressed. + + + + The first cell in each series contains the count of the number of + data length, scatter/gather elements pairs that follow – each being + of the form + + + + One cell data byte length + + + + One cell total number of scatter/gather elements + + + + + + + + For the symmetric encryption/decryption engine: the series of + cells report for each function code (FC) and mode combination the maximum + amount of data and scatter/gather list elements that can be processed + with a given key length. Thus the array consists of 1-N sub sequences + each of the form: + + + + First cell contains the FC field + + + + Second cell contains the mode field + + + + Third cell contains the count of the number of key length, data + length, scatter/gather elements triples that follow – each being of + the form: + + + One cell key bit length + + + + One cell data byte length + + + + One cell total number of scatter/gather elements + + + + + + + + + + + “ibm,max-sg-len” + + property name: that indicates the maximum byte length + of a scatter/gather list for the platform facility. + + property encoded array: single cell encoded as with + encode-int + + + + + “ibm,shared-interrupt-pool” + + property name: that provides an indirect pointer to + the node representing the shared interrupt pool used by this + facility. + property encoded array: the phandle of the node + representing the PowerPC External Interrupt Source Controller that + sources the interrupts of the shared interrupt pool used by this + facility. + + + + +
+ +
+ +
+ +
+ Symmetric Multi-Processors (SMP) + + LoPAR platforms can have Symmetric Multi-Processor (SMP) + Configurations. In addition to the processor node properties defined in + , a SMP Configuration will + utilize the + /cpus node as explained in + + +
+ SMP Platform Device Tree Structure + + OF requires that multiple instances of any device that appears more + than once in the device tree must be unique and distinguishable by means + of their + “reg” properties. For LoPAR platforms, + processors shall not be directly attached to the main physical bus (root + node (“ + / ”)). Instead, cpu devices shall be children + of the + /cpus node. + The + /cpus node shall have one child node of device type + cpu for each processor. The + ihandle of the “executing” processor + shall + be published in the + “cpu” property of the + /chosen node. + + Note: The properties of a cpu device are already + defined in + . The only change for symmetric + multiprocessor (SMP) systems is that there will be a cpu device node + under the + /cpus node for each individual processor. Other + properties of the cpu devices shall + conform with the requirements stated in + . + +
+ +
+ SMP Properties + + The following properties are for a PA SMP environment. These SMP + properties will be under the + /cpus Node. + + + + “slot-names” [S] + + property name that describes platform labeling of + plug-in cpu/processor card slots. + prop-encoded-array: An integer, encoded as with + encode-int, followed by a list of strings, each + encoded as with + encode-string. + The integer portion of the property value is a bitmask of possible + processors; for each add-in slot on the bus, the bit corresponding to + that slot’s ID number is set from least-significant to + most-significant ID number. The number of following strings is the same + as the number of slots; the first string gives the platform nomenclature + for the slot with the smallest ID number, and so on. The CPU’s + “slot-names-index” property can be used + as an index into the bitmask integer of this property. The absence of + this property indicates that no slots are present. + + + + + “smp-enabled” [S] + + property name that indicates a platform can be SMP + enabled. + prop-encoded-array: <NULL> + The presence of this property signifies that the platform is SMP + enabled, even if it only has one processor. + + + + +
+ +
+ Processor Node + + The following properties are for a PA SMP environment. This SMP + property will be under each + /cpu Node. + + + + “slot-names-index” [S] + + + property name: Identifies each cpu with a unique + number. + + prop-encoded-array: An integer, encoded as with + encode-int. + The value of this integer is a platform unique number with a range + from 0 to + n-1 for each CPU where + n is the number of slots. This number is used to + index into the + “slot-names” property to identify the + value of the string associated with the slot name. + + + + +
+ +
+ +
+ Device Power Management Properties/Methods + This section defines standard platform node properties, device node + properties, and methods related to power management. The properties and + methods of this section shall be implemented on any platform which supports + power management except where noted. However, it is still being enhanced. + OS providers who want to ensure that the data needed for their power + management policies is included should contact the authors of this + document. + +
+ System Node Properties + + The following defines properties are to be associated with the rtas + and the power-management-events nodes of the device tree. + +
+ Properties assigned to the RTAS node + + Power domains are a feature of platforms which support power + management. Within the OF device tree, power domains are represented by a + power domain identifier which is defined to be an integer in the range 0 + ... n-1, where n is the number of power domains on the platform. + + + + “power-domains-tree” [S] + + Standard + property name which defines the power domain + hierarchy for this platform. + + prop-encoded-array: An array of integers, each + encoded as with + encode-int, that is a flattened representation of + the power domain dependency tree. + The array consists of a number of tuples, one for each power domain + defined on the platform. Each tuple consists of the power domain + identifier domain#, followed by the number of power levels #levels + supported by the domain, followed by an array of tuples, one for each + level. These tuples consist of a level identifier level, followed by the + number of power sources from which the domain draws power, followed by an + array of tuples (power-source-id, power). The power domain tuple is + terminated by the number of children #children followed by a list of the + domain identifiers of each child. The power values are expressed in + milliamperes and include only the power consumed by support logic not + represented as devices in the device tree including any RTAS abstracted + devices within the particular power domain. + + + + + “power-domains-controllers” [S] + + Standard + property name which defines the power domain + controllers present on this platform. + + prop-encoded-array: an array of integers, each + encoded as with + encode-int. + Each integer is the + phandle of the device tree node that functions as the + power domain controller for a domain. A single controller may serve as + the control point for multiple domains (the architecture calls them power + domain control points). Each device which serves as a controller encodes + the + “controls-power-domain” property. + + + + + “power-domains-names” [S] + + Standard + property name used to define the user readable names + for the power domains. + + prop-encoded-array: an array of strings, each + encoded as with + encode-string, that are the user readable names for + the domains. + The number of strings matches the number of domains and there is a + one-to-one correspondence between the entries in the + “power-domain-controllers” property and + the entries in this array. + + + + + “platform-power-sources” [S] + + Standard + property name defining the platform power + sources. + + prop-encoded-array: an array of integers, each + encoded as with + encode-int. + The array is structured as a number of tuples. Each of these tuples + consists of the values source-voltage, (given in millivolts), peak-power, + continuous-use-power (both expressed in milliamperes supplied at the + stated voltage), and conversion-efficiency (expressed in percent). + + + + + “power-sources-names” [S] + + Standard + property name defining the platform power source + names. + + prop-encoded-array: an array of strings, each + encoded as with + encode-string, that are the user readable names for + the power sources. + The number of strings match the number of power sources and is in + one-to-one correspondence to the entries in the + “platform-power-sources” property. + + + + + “platform-battery-sources” [S] + + Standard + property name defining the batteries utilized by a + platform. + + prop-encoded-array: an array of integers, each + encoded as with + encode-int. + Each value in this array is the manufacturer’s rated capacity + of the battery expressed in milliwatt-hours. + + + + + “battery-sources-names” [S] + + Standard + property name defining the human-readable identifier + of the batteries utilized by a platform. + + prop-encoded-array: an array of strings, each + encoded as with + encode-string. + Each entry in this array corresponds one-for-one with the batteries + defined in the + “platform-battery-sources” property. + + + + +
+ +
+ Properties of the power-management-events node + + + + “power-type” [S] + + Standard + property name defining the power management event + types implemented on a specific platform. + + prop-encoded-array: an array of integers, each + encoded as with + encode-int. + + + + +
+ +
+ +
+ Device Properties + + + + “power-domains” [S] + + Standard + property name, indicating the power domains of which + this device is a member. + + prop-encoded-array: List of one or more + domain-id’s to which this device belongs. + Domain-id’s is encoded as with + encode-int. + The + “power-domains” property should only list + the + domain-id’s of the lowest power domain tree + nodes in which this device has membership. If the device is a member of + the default power domain 0 alone, this property does not need to be + provided. + + + + + “device-power-states” [S] + + Standard + property name which describes the power states this + device supports. + + prop-encoded-array: An array of integers, each + encoded as with + encode-int that defines the supported power states + for this device. + This property shall be provided for each physical device which has + multiple power states, if platform firmware provides device power state + information. + The array consists of an integer representing the initial device + power state after reset, followed by the number of power sources from + which the device draws power, followed by an arbitrary number of tuples, + one for each supported power state of the device. Each tuple consists of + the state, followed by an array of tuples (power-source-id, power) giving + the average power consumption from each power source during active use. + This is followed by another array of tuples (power-source-id, power) + giving the idle power consumption for each power source. Each power state + tuple is terminated by the maximum expected power usage lifetime in + seconds for the device if it were to remain in that state. The value + power is stated in the millamperes consumed at the voltage supplied by + the power source. + The value state shall be further constrained to have the following + semantics: + + + Semantics of device state values + + + + + + + + + + Value + + + + + Semantics + + + + + + + + 100 + + + This is the device’s most responsive state. + + + + + 20-99 + + + The device is functional. The range represents a range of + performance. + + + + + 11-19 + + + Reserved + + + + + 10 + + + Device is not operational, but retains its internal + functional parameters. + + + + + 1-9 + + + Reserved + + + + + 0 + + + Device not functional, may lose internal functional + parameters. + + + + +
+ The semantics of device power states may be further defined by + device type specific bindings. + The interaction of the defined semantics of device power state and + domain power level is defined in + . Those combinations not marked + are disallowed. + + + Combinations of Device Power State/Domain Power + Level + + + + + + + + + + + + + +   + + + + + Device Power State + + + + + + + +   + Domain Power Level + + + Full On + + + Allowed + + + Allowed + + + Allowed + + + Allowed + + + + + Reduced + + +   + + + Allowed + + + Allowed + + + Allowed + + + + + Freeze + + +   + + +   + + + Allowed + + + Allowed + + + + + Off + + +   + + +   + + +   + + + Allowed + + + + +
+
+
+ + + “device-state-transitions” [S] + + Standard + property name that describes the legal power state + transitions supported by the device. + + prop-encoded-array: an array of integers, each + encoded as with + encode-int that defines the legal power state + transitions for this device. + The array is structured as a number of tuples, one for each + possible transition. Each tuple consists of the starting state, followed + by the destination state, followed by an array of tuples + (power-source-id, power), one for each power source, followed by the time + required to make the transition in microseconds, followed by the maximum + count allowed for this transition. The starting state and destination + state are values defined in the + “device-power-states” property. The value + power is stated in the millamperes consumed. This property shall be + provided if platform firmware provides device power state + information. + + + + + “power-sources” [S] + + Standard + property name which designates this device as a + consumer of power sourced from a defined power source. + + prop-encoded-array: an array of integers, each + encoded as with + encode-int that gives the list of power sources to + which this device is connected. + The values are indices into the platform-power-sources data + structure. This property shall be provided if platform firmware provides + device power state information. + + + + + “power-management-mapping” [S] + + Standard + property name that defines device power states and + commands. + + prop-encoded-array: an array of integers as encoded + with + encode-int. + This optional property provides a device dependent mapping between + device power state and commands which the device driver sends to its + device. Also provides information concerning which device power states + are supported for each of the four domain power levels. See the device + type binding for a definition of the property value. + + +
+ +
+ Properties for Power Domain Control Points + + The following are specific to devices which can act as power domain + control points. + + + + “controls-power-domains” [S] + + Standard + property name which designates the domains over which + this device exercises control. + + prop-encoded-array: an array of integers, each + encoded as with + encode-int that defines the domains for which this + device can act a power domain control point. + A single device may serve as multiple logical control + points. + + + + +
+ +
+ +
+ Power Management Related Methods + This section defines methods associated with device tree nodes + which serve as power domain controllers (the architecture calls them + control points). + + + + set-power-level (domain# level -- actual-level) [M] + + This method is only present for power domain controllers. The + domain# is the power domain whose power level is altered, and level is + the desired level. actual-level reports the level to which the domain was + actually set. + + + + + get-power-level (domain# -- level) [M] + + This method is only present for power domain controllers. The + domain# is the power domain that is being queried. level is the current + level at which the domain is now operating. + + + + + system-off (--) [M] + + Method to turn the system off. This method is attached to the root + node of the device tree and is only present in a platform with software + control over system power. + + + + +
+ +
+ +
+ Configuration of Platform Resources + + Any computer platform is composed of standard components which are + invariant (platform ‘built-in’ standard I/O and power + management), optional components which are detectable (a second processor, + for example), and configurable components which are self-identifying + (system memory, for example). Most computer platforms also provide one or + more industry standard I/O buses which allow the insertion of specialized + functional adapter cards. These buses generally support a method for + automatic identification, interrogation, and option selection of installed + adapter cards. + A Platform shall + also have the capability of configuring power + management resources, if power management is implemented by the platform, + as defined in + . + +
+ Power Management Resource Configuration + + For a platform which supports device power management, all platform + power management related information shall be resident in the OF device + tree prior to the transfer phase of software operation (see the + definition of transfer phase in + ). Dummy devices shall be + placed in the device tree for all standard I/O bus connectors which are + not in use to provide a node to assign the slot-names, power-domains, and + power-sources properties. + Ultimately, the goal is that pluggable devices would not only + identify themselves to platform firmware but would also provide all + applicable power management related information. As an interim solution, + a utility shall be provided either in the platform firmware ROM or + supplied as a loadable OF utility on external media. This utility + interacts with a person to obtain power management information concerning + plug-in adapters and peripherals. + +
+ Power Management Information Utility + + Any platform capable of being expanded via the addition of + power-managed devices shall provide a device power management information + utility. The purpose of the utility is to allow a person (end-user or + system developer) to enter power management related device properties of + plug-in adapters and peripherals which have no mechanism to automatically + report this information to firmware or system software. The need for this + utility will disappear as standard protocols are developed for + interrogating pluggable adapters and devices to provide power management + related information. + In the most general case, the devices to be added to a node + representing a standard bus or I/O port are in the form of multilevel + subtrees. The root of this subtree specifies the path to the node in the + device tree where the subtree is to be grafted. + The utility determines the path to the node at which to graft the + new devices by interacting with a person to receive the information. The + utility uses the + “slot-names” property to identify the + location of the device for which it needs information. For example, the + utility might prompt the user with, “Enter the name of the first + device attached to the external scsi connector labeled + ‘SCSI1’.” + A data structure describing the subtree is stored in NVRAM. The + root node of this subtree contains an + “in-graft-node” property which specifies + the path to the parent node where the subtree is to be grafted into the + OF device tree. + As adapters and devices are enhanced to support the automatic + reporting of power management information the parent node would supply a + method query-power-management-attributes which can be used by firmware to + obtain this information without the need for this utility. Any + information obtained by direct device interrogation may update that + supplied via the PM NVRAM partition. + +
+ +
+ PM Configuration Process + + When the platform is booted after a configuration change and the + newly inserted adapter does not support the automatic reporting of power + management information, firmware should prompt the user asking if he + wishes to supply this information or potentially forfeit some or all of + the power management capabilities of the device. + The utility records the information it obtains in the NVRAM Power + Management Configuration Partition (NVRAM Signature of 0x71 and name + pm-config). On a subsequent reboot, platform + firmware uses the information saved in NVRAM to fill out the device tree + adding new nodes and their properties, as well as adding properties and + updating the values of properties of existing device tree nodes. + +
+
+ PM Configuration Format + + The NVRAM power management configuration partition is designed to + be accessed primarily by firmware, but the partition is designated global + and the format is specified to allow a third party to write a power + management information utility which runs on the booted OS. + The data field of the power management NVRAM partition shall be + defined as follows: + The data field is composed of a header, followed by a number of + fixed length data blocks, and finally a variable length property list + area. The length of the header and each data block is 8 bytes. The data + blocks use 16-bit integer offsets into the partition as pointers to the + data blocks and into the property list area. The base of this offset is + the beginning of the partition. This effectively limits the size of the + PM configuration area to 64 KB. If more space is required, additional PM + configuration partitions may be provided. Each pointer into the property + list area locates the start of a NULL-terminated string which represents + a list of property name/value pairs. + The following table specifies the format of the header: + + + Power Management Configuration Data Header + + + + + + + + + Field + + + + + Size + + + + + Description + + + + + + + + Version + + + 1 byte + + + Designates the version of the PM Partition data area + format + + + + + Subtree_ptr + + + 2 bytes + + + Pointer to the first data block which describes a device + subtree + + + + + Property_ptr + + + 2 bytes + + + Pointer to first data block which describes a property + list to be added to the base platform device tree + + + + + Reserved + + + 3 bytes + + + Reserved + + + + +
+ The PM Partition data area format value shall be 1. + The following table specifies the format of the data blocks: + + + Data Block Format + + + + + + + + + Field + + + + + Size + + + + + Description + + + + + + + + Block_type + + + 1 byte + + + Designates the data block type + + + + + Data Block Data + + + 7 bytes + + + Remainder of data block, format specific to data block + type + + + + +
+ Two data blocks are defined: one defining a device node and a + second defining properties to be added to the base platform device + tree. + The data block type field shall have the value 1 for a data block + which describes a device node. The data block type field shall have a + value 2 for a data block which describes a property. + + + Node Data Block Format + + + + + + + + + Field + + + + + Size + + + + + Description + + + + + + + + Block_type + + + 1 byte + + + This field shall contain the value 0x01 + + + + + Prop_list_ptr + + + 2 bytes + + + Pointer to a NULL terminated string containing the + property list for this node + + + + + Child_ptr + + + 2 bytes + + + Pointer to a data block defining a child node of this + node. This pointer will be equal to 0x0000 if this node has no + children. + + + + + Sibling_ptr + + + 2 bytes + + + Pointer to a data block defining a sibling node of this + node. This pointer will be equal to 0x0000 if this node has no + siblings. + + + + + Reserved + + + 1 byte + + + Reserved + + + + +
+ + + Property Data Block Format + + + + + + + + + Field + + + + + Size + + + + + Description + + + + + + + + Block_type + + + 1 byte + + + This field shall contain the value 0x02 + + + + + Node_path + + + 2 bytes + + + Pointer to a NULL terminated string giving the path name + of the node to which the designated property list + belongs. + + + + + Property_list_ptr + + + 2 bytes + + + Pointer to a NULL terminated string containing the + property list to be assigned to the designated node. + + + + + Reserved + + + 3 byte + + + Reserved + + + + +
+ The first node of a subtree shall have a + “name” property equal to “/” + and shall specify the + “in-graft-node” property. The child_ptr + of this data block points to the first in a list of data blocks which + describe the nodes which make up the subtree to be grafted onto the + system tree. + The final area of the partition is a set of NULL terminated strings + which represent property name/value pair lists. The last string in this + area will be terminated by at least two NULL bytes. The property list for + each node shall provide all the required PM properties and their values. + These include + “power-domains”, + “device-power-states”, + “device-state-transitions”, + “power-sources”, + “power-management-mapping”, and + “controls-power-domains”. +
+ +
+ +
+ +
+ Client Program Requirements + For LoPAR platforms, the client program requirements are defined in + , with the following + modifications. OF Client Programs for an LoPAR platform shall execute in + 32-bit mode with an OF cell size of 1. + +
+ Load Address + + The client’s load address is specified by the value of the + load-base Configuration Variable. The value of + load-base defines the default load address for + client programs when using the + load method. + Load-base shall be a real address in real mode or a + virtual address in virtual mode. Note that this address represents the + area, within the first LMB, into which the client program file will be + read by + load; it does not correspond to the addresses at + which the program will be executed. All of physical memory from + load-base to either the start of OF physical memory + or the end of physical memory, whichever comes first, shall be available + for loading the client program. + + Note: The load-base address represents the area into + which the client program will be read by load and does not correspond to + the address at which the program will be executed. +
+ +
+ Initial Register Values + + The “Initial Register Values” specified in the PA + Binding (see + ) are modified as + follows: + + + r3 -- shall be 0 on client program entry + + + + r4 -- shall be 0 on client program entry + + +
+ +
+ I/O Devices State + + With the exception of the stdin and stdout devices, OF shall close + all devices with the following conditions true: + All Devices - no DMA and not interrupting + Normal I/O Devices - not responding to access PCI + Adapter/Devices + HOST Bridges - responding to config cycles and passing through + config cycles to children + RTAS Devices - contract with OF to leave in state to perform + intended function +
+ +
+ Client Program Format + + The data format of a client program compliant with this + specification shall be either ELF (Executable and Linkage Format) as + defined by + , and extended by + , or PE (Portable Executable) + as defined by + . The standard ELF format + contains explicit indication as to the program's execution modes (e.g., + 32- or 64-bit, Big- or Little-Endian). LoPAR only supports the 32-bit + version (i.e., ELFCLASS32) for 32 and 64 bit platforms. + + Note: Other client program formats may be supported, + in an implementation specific manner, by an OF implementation. + A standard client program shall be statically linked, requiring no + relocation of the image. The program's entry point (e_entry) shall + contain the address of the first PA instruction of the client program. It + is the responsibility of the client program to establish the appropriate + value of the TOC (r2), if necessary. + + Note: The entry point is the address of the first + instruction of the client program, not that of a procedure + descriptor. + +
+ ELF-Format + This section defines how OF recognizes and prepares to execute an + ELF-Format Program. + +
+ ELF Note Section + + Part of the process of loading a client program involves verifying + its environmental requirements (e.g., endian-ness and address translation + mode) against the current firmware configuration. The client’s + endian-ness can be directly determined by examining the ELF EI-DATA + value; ELFDATA2LSB (1) implies Little-Endian while ELFDATA2MSB (2) + implies Big-Endian. However, the other client requirements (e.g., address + translation mode) are defined by means of an ELF Note Section (PT_NOTE), + pointed to by the program header. The following describes the format of + the Note Section for a client program file. + As defined by + , an ELF file can be + “annotated” by means of Note Sections within the executable + file. A Note Section contains a “header” followed by a + (possibly NULL) “descriptor”, as follows: + + + + + + + + + + + + + + Note: The endian format of the values corresponds to + the endian-ness specified by the EI-DATA field of the file. + The format of a Note Section header can be described by an OF + struct as: + struct \ Note Section header for OF + /L field ns.namesz \ length of ns.name, including NULL + /L field ns.descrsz + /L field ns.type + 0 field ns.name \ NULL-terminated, /L padded + +
+ 1275 PowerPC Note Definition + + The ns.name field of the PowerPC OF Note Section shall be + “PowerPC”; the ns.type field n shall be + 0x1275. + Following the Note Section header is a descriptor (desc); the + length (in bytes) of the descriptor is specified by a word in the Note + Section’s header (descsz). The interpretation of the descriptor + depends upon the kind of Note Section in which it is contained. For the + PowerPC OF note, the format of the Note Section’s descriptor can be + described by an OF struct, as follows: + struct \ Note Section descriptor for CHRP OF + /L field ns.real-mode + /L field ns.real-base + /L field ns.real-size + /L field ns.virt-base + /L field ns.virt-size + /L field ns.load-base + If the + ns.load-base value is not -1, then that value is + compared against the current value of the + load-base configuration variable. If they are equal + no further action is taken. If they are not equal then the + load-base configuration variable is set to the value + of + ns.load-base and the system is rebooted. + + Note: DATA field of the file. +
+ +
+ 1275 IBM,RPA-Client-Config Note Definition + + The ns.name field of the LoPAR Client Program Configuration Note + Section shall be + “IBM,RPA-Client-Config”; the ns.type + field shall be 0x12759999. + The format and requirements associated with this ELF Note Section + are designed to allow for expandability of the section definition (by + adding fields to the end of the section) while retaining forward and + backward compatibility for both the 1275 firmware and Client Program. + When the 1275 firmware code recognizes the + “IBM,RPA-Client-Config” note, it creates + a property named + “ibm,rpa-client-config” within the + /chosen node reads into this property and interprets + the lesser of the descriptor size or the maximum size of the descriptor + that was defined when the firmware was built. Should the note contain a + smaller descriptor than was defined when the firmware was built, the + firmware assumes default values for the missing descriptor fields. In + this way, new fields may be defined, and the four cases of + firmware/client program work as follows: + New Firmware/New Client Program: + Client Program Header Note contains old plus new fields. + Firmware reads all the new header and places it in + “ibm,rpa-client-config” property. + Client Program gets feed back that new fields were interpreted by + reading property in + /chosen. + Old Firmware/Old Client Program: + Client Program Header Note contains old fields. + Firmware reads all the old definition header and places it in + “ibm,rpa-client-config” property. + Client Program gets feed back that the expected fields were + interpreted by reading property in + /chosen. + New Firmware/Old Client Program: + Client Program Header Note contains only old fields. + Firmware reads only the descriptor length defined in the note + header, and places it in + “ibm,rpa-client-config” property. + Client Program gets feed back on the fields that were interpreted + by reading property in + /chosen. + Firmware uses default values for any missing fields. + Old Firmware/New Client Program: + Client Program Header Note contains old plus new fields. + Firmware reads only the length that it was defined when it was + built, and places it in + “ibm,rpa-client-config” property. + Client Program gets feed back that new fields were interpreted by + reading property in + /chosen, those missing fields indicate function not + implemented by the platform. + Following the Note Section header is a descriptor (desc); the + length (in bytes) of the descriptor is specified by a word in the Note + Section’s header (descsz). The interpretation of the descriptor + depends upon the kind of Note Section in which it is contained. For the + ELF header note named IBM,RPA-Client-Config of type 1275, the format of + the Note Section’s descriptor can be described by an OF struct, as + follows: + + + + Note: The size of the /L field is based off of + e_ident (EI_CLASS) i.e. is 4 for ELFCLASS32. + The + ns.lparaffinity field is a binary flag whose valid + values are 0 or 1. If the field is not one of these valid values the + value is assumed to be 0. If the character value is 1, the client program + requests that the platform provide all available affinity + information. + The + ns.min-rmo field specifies the minimum amount of real + mode addressable storage (in bytes times 2 + 20) that the client program needs to operate. The + ns.min-rmo-percent field specifies the minimum + percentage (valid values 0-100) of storage that must be real mode + addressable for the client program to operate. The platform shall start + the client program with a quantity of real mode accessible storage + (starting at location 0) of at least the ceiling of these two + values. + The + ns.max-pft-size field value specifies the largest + hardware Page Frame Table (in bytes times + 2 + ns.max-pft-size) that the client program can + support. The firmware shall not start a client program with a PFT larger + than this amount The minimum value is 18, the platform ignores the field + if the value is less than 18 and uses the platform defined default + value. + The + ns.splpar field is a binary flag whose valid values + are 0 or 1. If the field is not one of these valid values the value is + assumed to be 0. If the field’s value is 1, the client program + supports running in shared processor logical partitioning mode. If the + character value is not 1 and the partition is running in shared processor + mode, platform firmware reports a platform-specific error code and halts + the boot. However, if the client-program does not contain an + IBM,RPA-Client-Config + note, firmware assumes the OS supports shared + processor logical partition mode. This exception only applies to the + ns.slpar field. + The + ns.min-load field specifies the minimum amount of the + client program load module that must be loaded at + load-base. If this value is a -1 then the entire + load module must be loaded starting at + load-base else the client program load fails. The + default value is assumed to be -1. If the value of is greater than the + platform can support client program load fails. Given that the platform + can load the minimum amount of the client program load module at + load-base, it loads the amount up to the boundary + specified by + ns.min-load starting at + load-base, then it loads the rest of the load module + into contiguous storage at a location selected by platform firmware + (default, if possible, is that the residual is loaded immediately + following the first segment resulting in a single segment load). + The + ns.new-mem-def field is a flag which indicates if the + ibm,dynamic-reconfiguration-memory representation of reconfigurable + memory may be used. The default value 0x00000000 indicates the new + definition may not be used. The value 0x00000001 indicates the new + definition may be used. All other values are reserved for future + use. + The + ns.large-page-ready field is a flag which indicates + if the partition OS is prepared to support large pages. The default value + 0x00000000 indicates that the OS is not prepared for large pages. The + value 0x00000001 indicates that the OS is prepared for large pages. All + other values are reserved for future use. + If this variable indicates that the OS is not prepared for large + pages and large pages are present in the partition configuration, + platform firmware reports a platform-specific error code which indicates + this mismatch between the partition configuration and the OS + capabilities, removes all large pages from the device tree, and continues + the OS boot. + If the value of the + ns.ignore-my-client-config variable is 0x00000001, + platform firmware must not examine the value of + ns.large-page-ready until the client program calls + the PROCESS-ELF-HEADER method. The decision to continue boot should then + be made based on the value of the + ns.large-page-ready flag in the updated ELF head + passed by this method. + The + ns.force_alpha_mode field is a flag which indicates + that a non-HMC managed I/O services partition with partition management + support (VMC) configuration is being requested. The default value of + 0x00000000 indicates that the client expects to run in a configuration + which is not an I/O services partition configuration. If the partition + configuration is not compatible with this setting, the system will be + rebooted as a single partition which owns all of the system resources. On + reboot, the original partition configuration will be reinstated. The + value 0x0000001 indicates that the client is expecting to be executed in + a non-HMC managed I/O services partition with partition management + support (VMC). If the partition is not in this mode, the system will be + rebooted in this mode. In the case that the ns.force_alpha_mode flag is + compatible with the partition configuration, the boot process will + continue. This flag will be ignored when the system is HMC + managed. + +
+ +
+ +
+ Recognizing ELF-Format Programs + + The + init-program shall recognize client program images + that conform to all the requirements listed below as + “ELF-format” programs. + In the description below, field names refer to fields within the + ELF “file header” structure, which is assumed to begin at + load-base, and offsets are relative to the beginning of that structure. + Multi-byte numerical fields are interpreted according to the endianess + specified by the “data” field at offset 5. + + + + The “e_ident” field (at offset 0) contains the + string “\7fELF”, where '\7f'’ is a byte whose value is + (hex) 7f. This indicates the beginning of an ELF file header. + + + + The “EI_CLASS” field (at offset 4) contains the + value 1. This indicates the 32-bit variant of the ELF format. + + + + The “e-type” field (at offset 16) contains the + value 2. This indicates that the ELF image is executable. + + + + The “e_machine” field (at offset 18) contains the + value 20. This indicates that the ELF image is for the PA instruction + set. + + + + The “e_version” field (at offset 20) contains the + value 1. + + + + The “e_flags” field (at offset 36) contains the + value 0. + + + +
+ +
+ Preparing ELF-Format Programs for Execution + + Upon recognition of the client program image at load-base as an + ELF-format program, init-program shall prepare the program for execution + by performing the following sequence of steps. + In the description below, the fields mentioned by name are within + ELF “program header” structures, unless specified + otherwise. + + + + Search for an ELF “note” section of type + “1275” as defined in the section “ELF Note + Section”. If one is found, and the values specified by its + descriptor do not match the firmware's current operating mode, set the + appropriate configuration variables to the values specified in the note + section descriptor, and restart the firmware so that it will re-execute + the + boot command that resulted in the execution of + init-program. + + + + Set the p_paddr field for each PT_LOAD segment equal to its + p_vaddr field value if + real-mode? is false and p_paddr is -1. This + effectively maps these segments v=r. + + + + Allocate and map, if required, sufficient physical memory for + all program segments of type PT_LOAD (i.e. whose “p_type” + field contains the value 1) listed in the ELF image's program headers. + Note that all PT_LOAD program segments that have a p_paddr value that + matches their location in physical memory need not be moved, but the + memory that they occupy must be claimed. This special case is added to + allow large program images to be loaded without the 2x memory required to + move the segments. + + + + Copy the program headers to a “safe” location to + guard against the possibility of them being overwritten by the following + steps. + + + + For each program segment of type “PT_LOAD”: + + + + Copy, if required, the initialized portion of the program + segment from its current location in the loaded image to the location + given by the section's “p_paddr” field. + + + + Fill the rest of the segment with zero bytes (i.e., fill + “p_memsz - p_filez” bytes beginning at the address + “p_paddr + p_filesz”). + + + + If real-mode? is false, then map the program segment to + the virtual address specified by p_vaddr. + + + + + + Set the saved program state so that subsequent execution of + “go” will begin execution at the address + given by the “e_entry” field in the ELF file header. The + e_entry field is a physical address if + real-mode? is + TRUE and is a virtual address if + real-mode? is + false. + + + + The implementation need not take precautions to ensure that the + process of copying and zeroing program segments does not overwrite the + portions of the load image that have not yet been copied. In order to + guarantee correct copying, the value of the + load-base configuration variable and the destination + addresses of the various sections must be such that such overwriting does + not occur. One sufficient condition is that the region of memory + beginning at + load-base, of size equal to the size of the loaded + image, be disjoint from the regions of memory to which the program + segments are copied and zero-filled. Another sufficient condition is to + specify a + load-base in the Notes Section (PT_NOTE) that ensures + that the PT_LOAD segments are loaded at the address required by their + program headers and thus are not moved. There are other less-stringent + sufficient conditions, especially for simple ELF images with a small + number of program segments that are to be copied to contiguous + regions. + An implementation shall permit the ELF image to contain other + program segments in addition to those described above, but need not take + any action beyond that defined above as a result of the presence of such + other program segments. + An implementation shall ignore all ELF sections. ELF sections are + intended for binders, not loaders. Note that the CHRP ELF Note Section is + actual an ELF segment of type PT_NOTE and thus the above does not apply + to it. +
+ +
+ +
+ +
+ Additional Client Interface Requirements + + This section describes processor assist callbacks for real and + virtual memory management and a service. + +
+ Client Interface Callbacks + + This section describes callbacks for memory management. These + callbacks are provided by the client. + +
+ Real-Mode Memory Management Assist Callbacks + + + + claim_mem + + IN: [address] min_addr, [address] max_addr, size, align + OUT: throw-code, error, [address] real_addr + Allocate contiguous physical memory between min_addr and max_addr + of size bytes (128KB max for an area in the 0 to 16MB address range), + with align alignment. The alignment boundary is the smallest power of two + greater than or equal to the value of align; an align value of 1 + signifies one-byte alignment. A non-zero error code shall be returned if + the mapping cannot be performed. If error code is zero (i.e. allocation + succeeded) the routine returns the real address (real_addr) of the + physical memory block which was allocated for OF. + + + + + release_mem + + IN: [address] phys, size + OUT: throw-code + Free size bytes of physical memory starting at real address phys, + making that physical memory available for later use. That memory must + have been previously allocated by claim_mem. + + + + +
+ +
+ Virtual Address Translation Assist Callbacks + + + + alloc_virt_mem + + IN: size + OUT: throw-code, error, [address] virt_addr + Return the virtual address of a virtual memory area of size bytes + aligned to a doubleword (8-byte) boundary. A non-zero error code shall be + returned if the allocation cannot be performed. If error code is zero + (i.e. allocation succeeded) the routine returns the virtual address + (virt_addr) of the memory block which was allocated. + + + + + free_virt_mem + + IN: [address] virt_addr, size + OUT: throw-code + Free memory allocated by alloc_virt_mem. The values virt_addr and + size must correspond with memory previously allocated by + alloc_virt_mem. + + + + + claim_virt + + IN: size, align + OUT: throw-code, error, [address] virt_addr + Allocate a memory area of size bytes and alignment align. The + alignment boundary is the smallest power of two greater than or equal to + the value of align; an align value of 1 signifies one-byte alignment. A + non-zero error code shall be returned if the allocation cannot be + performed. If error code is zero (i.e. allocation succeeded) the routine + returns the virtual address (virt_addr) of the memory block which was + allocated. + + + + + release_virt + + IN: [address] virt, size + OUT: throw-code + Free size bytes of virtual memory starting at virtual address virt, + making that physical memory and the corresponding ranges of virtual + address space available for later use. That memory must have been + previously allocated by claim_virt. + + + + +
+ +
+ +
+ Client Interface Services + OF shall provide the following + Client Interface Service: + + + + test-method + + IN: phandle, [string] method + OUT: missing-flag? + Tests whether the package method named method exists in the package + phandle. missing-flag? is FALSE (0) if the method exists or TRUE (-1) if + the method does not exist. + + + + + OF may provide the following Client Interface Service: + + + + ibm,enable-ci64 + + IN: none + OUT: none + After the successful invocation of this method, all Client + Interface calls will utilize 64 bit cell items in their argument arrays. + This does not affect how the device tree is presented, which will still + assume that a cell is 32 bit in the property values. The method returns + using the cell size in which it was called. This method exists only on + platforms that present the + “ibm,enable-ci64-capable” property in the + root node. + + + + +
+ +
+ +
+
+ Support Packages + + This section describes the LoPAR Binding specific requirements of OF + support packages. These support packages are + disk-label and + tape-label. For “network” and/or + obp-tftp extensions, refer to + . These packages support the + loading and executing of a client program. Another means of executing a + Client Program is provided when an OS ROM is a “bootable + device” (Refer to + , as an example). + +
+ “disk-label” Support Package + + The process of loading and executing a client program is described + in two stages. The first stage determines what partition and/or file (if + one exists) to read into memory. This is done by locating a partition and + a file within the partition (if the partition supports a file system + structure) from the boot device, usually by means of a name lookup within + a directory contained within a disk “partition”. The second + stage examines the front portion (header) of the image for + “well-known” program formats. When the format of the image + has been determined, the loading is completed in a manner determined by + that format. + The name of the partition (and, a file contained within the + partition) can be explicitly specified by the user via the + load or + boot command, or can be implicitly specified by the + value of the + “boot-device” + property of the + /options node. The partition and filename are the + ARGUMENTS portion of the final COMPONENT of the PATH_NAME, as described + in section 4.3.1 of + . + The syntax for explicit partition/filename specification is given + in section + below where partition + identifies the partition to be used and filename is the name of a file + within that partition. If partition is omitted, the default partition (as + determined by the partition format) is used. If filename is omitted, the + default filename (i.e., the filename component of the + boot-device path-name) is used. + +
+ Media Layout Format + This section describes the media layout formats of Client Program + Images that the disk-label support package for an LoPAR platform shall + support; an implementation + may support additional mechanisms, in an + implementation-specific manner. The + disk-label package for a platform shall + support at least four(4) media layout types: + + + + FAT (FAT12 and FAT16 File System) + + + + FDISK (Partitions 4, 5, 6, 0x41 and 0x96) + + + + ISO-9660 (9660 File System) + + + + UDF + + + + An LoPAR platform may choose to support the following media layout + formats for historic reasons: + + + + Mac OS (MAC Binary Image) + + + +
+ FDISK Partition Types + + The following FDISK partition types shall be supported: + + + + Partition Type 4: FAT 12 or FAT 16 File System + + + + Partition Type 5: Extended Chained Partitions + + + + Partition Type 6: Extended Partitions + + + + Partition Type 0x41: Single program image + + + + Partition Type 0x96: ISO 9660 File System + + + + Partition Type 0x??: UDF File System + + + + FDISK partition type 0 is a free partition. Partition type 0x82 is + reserved and should not be used by this architecture. +
+ +
+ +
+ Open Method Algorithm + + The + open method of the + disk-label support package shall implement a disk + partition recognition algorithm that supports at least the set of disk + formats that are supported by the following algorithm. The following + algorithm is intended to support raw (uninterpreted) disks, raw + partitions of disks beginning with an FDISK partition map, and files on + FAT, UDF and ISO-9660 file systems both within FDISK partitions and by + themselves on disks without a partition map. + That + open method shall accept an argument string (as + returned by + “my-args”) with the following syntax + (according to the algorithm below), where brackets denote an optional + component: + [partition][,[filename]] + If the argument string contains a comma, or if the argument string + begins with a decimal digit, the partition component is deemed to be + present. Note that the arguments above are not the client arguments with + the boot command. + If the partition component is present, it selects the desired + partition, where partition 0 refers to the entire disk, partition 1 + refers to the first partition, partition 2 to the second, and so forth. + If the partition component is absent and the disk has an FDISK or Mac + partition map, the first “bootable” partition is used. If a + “bootable” partition is not found, then fail in an + implementation specific manner with an error. + If the filename component is present, it selects a particular file + within the file system on the disk or partition thereof. + + Note: For historic reasons, the following algorithm + includes support for the optional MAC OS media layout format. + + + PARTITION$, FILENAME$ +2 Else +3 Set PARTITION$ to the NULL string +3 Set FILENAME$ to ARGUMENT$ +2 If PARTITION$ is not the NULL string +3 If PARTITION$ is not a decimal number +4 Return FALSE +3 DECIMAL_STRING_TO_NUMBER (PARTITION$) -> PARTITION +3 If PARTITION is 0 +4 GET_DISK_SIZE +3 Else +4 Read the first 512 bytes of the device into a buffer +4 SELECT_EXPLICIT_PARTITION (PARTITION) +4 If SELECT_EXPLICIT_PARTITION returned an error indication +5 Return FALSE +2 Else \ PARTITION$ is NULL +3 Read the first 512 bytes of the device into a buffer +3 SELECT_ACTIVE_PARTITION +3 If SELECT_ACTIVE_PARTITION returned an error indication +4 Return FALSE +2 \ (At this point, D.OFFSET is set to the beginning of the selected + partition and D.SIZE is set to the size of that partition. If the + entire disk was selected, D.OFFSET is 0 and D.SIZE is the size of the disk.) +2 Call parent’s “seek” method with an argument of 0,0. +2 Return TRUE +1 CHECK_FOR_BPB procedure +2 If the first four(4) bytes are EBCDIC 'IBMA'(hex character string + C9C2D4C1), then the sector does not contain a BPB. +2 If the 16-bit little-endian quantity beginning at buffer offset 510 + is 0xAA55, and the 16-bit little-endian quantity beginning at buffer + offset 11 (which is the BPB “bytes per sector” field) is either 256, + 512, or 1024, and the byte at offset 16 (the BPB “number of FATs” field + is either 1 or 2, the sector is deemed to contain a BPB. Otherwise, the + sector does not contain a BPB. +1 CHECK_FOR_ISO_9660 procedure +2 Read 512-byte sector 64 (the beginning of logical 2048-byte sector 16)into + a buffer. +2 If the byte at offset 0 contains the binary number “1”, and the 5 bytes + beginning at offset 1 contains the text string “CD001”, the partition + or raw disk is deemed to contain an ISO 9660 file system. Otherwise, + the partition or raw disk is deemed not to contain an ISO 9660 file system. +1 CHECK_FOR_FDISK procedure +2 If the buffer does not contain an FDisk partition map signature of “AA55” + as a 16-bit little-endian number beginning at buffer offset 510, the buffer + is deemed not to contain an FDISK partition map. +2 If none of the partition type code field (the bytes at buffer offsets 0x1C2, + 0x1D2, 0x1E2, and 0x1F2) contains a recognizable partition type code (4,5, + 6, 0x41, 0x96, or other types that may be recognized by the implementation), + the buffer is deemed not to contain an FDISK partition map. +2 Otherwise, the buffer is deemed to contain an FDISK partition map. +2 The implementation may, at its option, apply additional validity tests to + the partition map information. +1 CHECK_FOR_MAC_DISK procedure +2 If the first (i.e., at the lowest offset) two bytes in the buffer contains + the 16-bit big-endian signature 0x4552, then the disk is deemed to be a Mac + partitioned disk. Otherwise, the partition or raw disk is deemed not to be + a Mac partitioned disk.]]> + + + Note: Subsequent 512 byte sectors will contain Mac + partition map entries, each of which begins with the 16-bit big-endian + signature 0x504D. Each such partition map entry contains a field (V) + indicating the total number of partition entries in the map. + + 1 +4 Return ERROR +2 CHECK_FOR_FDISK +2 If an FDisk partition map is found +3 Search the FDisk partition map beginning in 512-byte sector 0, reading new + 512-byte sectors into the buffer if necessary to “chain” to extended + partition entries, for the Nth, where N is the value of PARTITION, partition + entry whose “type” byte is neither 0 nor 5 (5 is the type code that + indicates a “chained” extended partition entry). +3 If the Nth partition is found: +4 Set PARTITION-TYPE to that entry's “type” field (the byte at offset 4) +4 Set D.OFFSET to the byte offset from the beginning of the disk to the + beginning of the partition denoted by that entry. +4 Set D.SIZE to the size of the partition in bytes denoted by that entry. +4 INTERPOSE_BY_TYPE +4 Return OKAY +3 Else \Nth partition does not exist +4 Return ERROR +2 CHECK_FOR_MAC_DISK +2 If this is a Mac partitioned disk +3 Search the Mac partition map for the Nth partition, where N is the value of + PARTITION. +3 If the Nth partition is valid, allocated, and readable +4 If FILENAME$ is %BOOT +5 If the Nth partition is marked bootable +6 Set D.OFFSET to the byte offset from the beginning of the disk + to the beginning of the boot area, as given by the pmLgBootStart + field. +6 Set D.SIZE to the size of the partition in bytes denoted by + pmBootSize. +6 Return OKAY +5 Else \Nth partition not “bootable” +6 Return ERROR +4 Else +5 If FILENAME$ is not the NULL string +6 INTERPOSE_BY_TYPE +5 Return OKAY +3 Else \ (If this point is reached, the partition is invalid) +4 Return ERROR +2 Else \ (If this point is reached, the partition map is not recognized) +3 Return ERROR]]> + + + This algorithm can be used to locate the correct partition and/or + file and/or load image from the specified device. The boot device is + selected as described in 7.4.3.2 of + . A filename can be explicitly + given as the arguments field of the + device-specifier (i.e., the field following the ':' + of the last path component). Other formats + may be recognized in an implementation-specific + manner. + +
+ +
+ +
+ tape-label Support Package + + The + tape-label Support Package shall + support tape as a standard byte device with the set + of methods specified in + , Section 3.7.3. Presence of + the bootinfo.txt file is optional. + The + open method shall accept an argument string, where + brackets denote an optional component: + [file number] + where the first file on the tape media is located at file number + 0. + +
+ Tape Format + + The LoPAR tape format shall consist of files ending with a file + mark (FM). The first block of data will be identified as file 0. The + bootinfo.txt file, if present, shall be located on the tape as file 0 + (the first file). There shall be only one bootinfo.txt file on the tape + media. Refer to + for the LoPAR Tape + format. + +
+ Tape Boot Format + + + + + + + + +
+ +
+ +
+ Tape bootinfo.txt File + The bootinfo.txt file shall have included for each set + of <chrp-boot> tags a set of <boot-script> tags that contains + a pointer to the program image to be loaded (Refer to + ). The form for this tape + pointer will be: + device specifier = device:file number + EXAMPLE: device specifier = tape:2 (For the specified set of + <chrp-boot> tags, load the tape program image from file 2). + A bootinfo.txt file may contain a multiple set of <chrp-boot> + tags where each one can point to a different tape file number. If a + bootinfo.txt file is not present, file 0 should be a bootable file. Only + file 0 will be loaded as a bootable image. No other files will be + searched if a bootinfo.txt file is not present unless the file number to + load is specified by an argument. + +
+ +
+ +
+ network Support Package + + The + network Support Package shall adhere to the + documentation functions and + conventions. + +
+ +
+ Program-image formats. + + OF must recognize a client program that is formatted as ELF, as + defined in + , and PE, as defined in + . Other formats + may be handled in an implementation-specific manner. + defines the FCode and Forth + Program-Image Formats. + After locating the file, OF reads the image into memory at the + location specified by the load-base Configuration Variable. Then, OF must + perform the following procedure to prepare the image for + execution. + + ”) + setup system to evaluate Forth Source Image +else if the image is a bootinfo.txt file (i.e., begins with “”) + setup system to parse the bootinfo.txt file +else + FAIL, in an implementation-specific manner.]]> + Notes: The following comments apply to the above code: + + + For more information on detecting an ELF format, refer to + . + + + + For more information on relocating an ELF image, refer to + . + + + +
+ +
+ +
diff --git a/DeviceTree/ch_devtree_terms.xml b/DeviceTree/ch_devtree_terms.xml new file mode 100644 index 0000000..4979d94 --- /dev/null +++ b/DeviceTree/ch_devtree_terms.xml @@ -0,0 +1,330 @@ + + + + + Terms + + This standard uses technical terms as they are defined in the + IEEE Std 1275-1994 Standard and other + documents cited in “References”, plus the following + terms: + + + + ARP + + Address Resolution Protocol + + + + + BOOTP + + Bootstrap Protocol + + + + + CHRP + + Common Hardware Reference Platform + + + + + core, core specification, core document + + Refers to IEEE Std 1275-1994 Standard for Boot (Initialization, + Configuration) Firmware, Core Practices and Requirements + + + + + core errata + + Refers to Core Errata, IEEE P1275.7 + + + + + CPU + + Central Processing Unit + + + + + effective address + + The 64- or 32-bit address computed by the processor + when executing a Storage Access or Branch instruction, or when fetching the + next sequential instruction. If address translation is disabled, the real + address is the same as the effective address. If address translation is + enabled, the real address is determined by, but not necessarily identical + to, the effective address. + + + + + ELF Executable and Linking Format + + A binary object file format defined by + that is used to represent client + programs in OF for PA. + + + + + FDISK + + Refers to the boot-record and partition table format used by + MS-DOS, as defined in + . + + + + + gateway + + Network connecting device + + + + + host + + A computer. In particular a source or destination of messages + from the point of view of the communication network. + + + + + ICMP + + Internet Control Message Protocol + + + + + IETF + + Internet Engineering Task Force + + + + + IP + + Internet Protocol + + + + + IO + + Input/Output + + + + + LAN + + Local Area Network + + + + + linkage area + + An area within the stack that is reserved for saving + certain registers across procedure calls in PA run-time models. This area + is reserved by the caller and is allocated above the current stack pointer + (%r1). + + + + + NVRAM + + Non-volatile memory that is the repository for various + platform, OF and OS information that remains persistent across reboots, + power management activities and/or cycles. + + + + + Open Firmware (OF) + + The firmware architecture defined by + and + , or, when used as an adjective, + a software component compliant with the core specification and + errata. + + + + + PCU + + Power Configuration Utility; Refers to a platform program to + assist a user to manage device power. + + + + + PE + + Portable Executable. A binary object file format defined by + . + + + + + procedure descriptor + + A data structure used by some PA run-time models + to represent a C “pointer to procedure”. The first word of this + structure contains the actual address of the procedure. + + + + + processor bus + + The bus that connects the CPU chip to the system. + + + + + PROM + + Programmable Read Only Memory + + + + + real address + + An address that the processor presents on the processor + bus. + + + + + real-mode + + The mode in which OF and its client are running with + translation disabled; all addresses passed between the client and OF are + real (i.e., hardware) addresses. + + + + + RFC + + Internet Request For Comments; part of the technical process of + establishing a standard. + + + + + ROM + + Read Only Memory + + + + + segmented address translation + + The process whereby an Effective Address (EA) is translated into a + Virtual Address (VA) and the virtual address is translated into a Real + Address (RA). (see + and Book III of + for more detail.) + + + + + suspend + + A form of Power Management characterized by a fast recovery + to full operation. Typically, system memory will not be powered off while + in the suspend state. + + + + + Table of Contents (TOC) + + A data structure used by some PA run-time models that is used for + access to global variables and for inter-module linkage. When a TOC is + used, + %r2 contains its base address. + + + + + TFTP + + Trivial File Transfer Protocol + + + + + UDP + + User Datagram Protocol + + + + + Virtual Address + + In IEEE 1275 parlance, the address that a program uses to access + a memory location or + memory-mapped device register. Depending on the presence or absence of + memory mapping hardware in the system, and whether or not that mapping + hardware is enabled, a virtual address may or may not be the same as the + physical (real) address that appears on an external bus. The IEEE 1275 + definition of “virtual address” corresponds to The PA's + definition of “effective address.” Except as noted, this + document uses the IEEE 1275 definition of virtual address. + + In PA parlance, an internal address within the PA address + translation mechanism, used + as in intermediate term in the translation of an effective address to the + corresponding real address. + + + + + virtual-mode + + The mode in which OF and its client share a single + virtual address space, and address translation is enabled; all addresses + passed between the client and OF are virtual (translated) addresses. + + + + + diff --git a/DeviceTree/ch_introduction.xml b/DeviceTree/ch_introduction.xml new file mode 100644 index 0000000..a3e2417 --- /dev/null +++ b/DeviceTree/ch_introduction.xml @@ -0,0 +1,97 @@ + + + + + Introduction + + This document specifies the application of OF to an LoPAR System, + including requirements and practices to support unique hardware and + firmware specific to the platform implementation. The core requirements and + practices specified by OF must be augmented by system-specific requirements + to form a complete specification for the firmware implementation of an + LoPAR System. This appendix establishes such additional requirements + pertaining to the platform and the support required by OF. + + This document also specifies the application of OF to a PA Processor + (which covers all PowerPC processors and their successors), including + requirements and practices to support unique firmware specific to a PA + Processor. The core requirements and practices specified by OF must be + augmented by processor-specific requirements to form a complete + specification for the firmware implementation for a PA processor. + + establishes such additional requirements pertaining to the + processor and the support required by OF. + + This document further specifies the application of + IEEE Std 1275-1994 Standard for Boot (Initialization, + Configuration) Firmware, Core Practices and Requirements, + Core Errata, IEEE P1275.7 and appropriate OF Standards + for LoPAR computer systems, including practices for client program + interface and data formats. + +
+ General Requirements + An OF implementation for an LoPAR platform shall implement the + core requirements as defined in + , core errata + , the PA Processor-specific + extensions described in + , other appropriate bindings + and/or recommended practices contained in the references (see + ), and the LoPAR Binding + specific extensions described in this appendix. + In addition, an OF implementation for an LoPAR platform shall + implement the + Device Interface, + Client Interface and + User Interface as defined in + . + Some LoPAR Binding property names exceed the OF Base specification + limit of 31 characters. LoPAR OF implementations shall support property + names of at least 47 characters. + +
+ +
+ Processor Architecture Requirements + + specifies the application of + + + to computer systems that use the PA instruction set, including + instruction-set-specific requirements and practices for debugging, client + program interface and data formats. An implementation of OF for PA shall + implement the core requirements as defined in + and the PA-specific extensions + described in this binding. + This appendix addresses + . The descriptions that follow, + and the relevant sections describing translation features for this binding, + assume that the system’s PA processor(s) implement the entire PA + (that is, all books of + ). Some processors may implement + different Book II-III features; such processors may need a variant of this + binding describing the differences to the mapping functions, etc. + +
+ +
diff --git a/DeviceTree/figures/PAPR-60.gif b/DeviceTree/figures/PAPR-60.gif new file mode 100644 index 0000000000000000000000000000000000000000..48d379d1d3d4df9ff775da408e006720071fcc03 GIT binary patch literal 36512 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 literal 0 HcmV?d00001 diff --git a/DeviceTree/figures/PAPR-62.gif b/DeviceTree/figures/PAPR-62.gif new file mode 100644 index 0000000000000000000000000000000000000000..82eb58e72f876ce6feb7df1be5fe1f9440f656e9 GIT binary patch literal 24619 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 literal 0 HcmV?d00001 diff --git a/DeviceTree/figures/PAPR-64.gif b/DeviceTree/figures/PAPR-64.gif new file mode 100644 index 0000000000000000000000000000000000000000..bd2ffa34ae241a1f999c7d38c055405bb5850441 GIT binary patch literal 16381 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 LxQg3JKmY(cTHlVT literal 0 HcmV?d00001 diff --git a/DeviceTree/pom.xml b/DeviceTree/pom.xml new file mode 100644 index 0000000..66148fd --- /dev/null +++ b/DeviceTree/pom.xml @@ -0,0 +1,148 @@ + + + + + org.openpowerfoundation.docs + workgroup-pom + 1.0.0-SNAPSHOT + ../pom.xml + + 4.0.0 + + + LoPAR-DeviceTree + + jar + + + LoPAR-DeviceTree + + + + + 0 + + + + + + + + + org.openpowerfoundation.docs + + openpowerdocs-maven-plugin + + + + generate-webhelp + + generate-webhelp + + generate-sources + + + ${comments.enabled} + LoPAR-DeviceTree + 1 + UA-17511903-1 + + appendix toc,title + article/appendix nop + article toc,title + book toc,title,figure,table,example,equation + book/appendix nop + book/chapter nop + chapter toc,title + chapter/section nop + section toc + part toc,title + qandadiv toc + qandaset toc + reference toc,title + set toc,title + + + 1 + 3 + 1 + + + LoPAR_DeviceTree + + + LoPAR_DeviceTree + + + + workgroupSpecification + + + + + workgroupConfidential + + + + + draft + + + + + + + + + true + . + + + bk_main.xml + + + + + ${basedir}/../glossary/glossary-terms.xml + 1 + www.openpowerfoundation.org + + + + + + diff --git a/Error Handling/app_bibliography.xml b/Error Handling/app_bibliography.xml new file mode 100644 index 0000000..4b48169 --- /dev/null +++ b/Error Handling/app_bibliography.xml @@ -0,0 +1,284 @@ + + + + + Bibliography + This section lists documents which were referenced in this specification or which provide + additional information, and some useful information for obtaining these documents. Referenced + documents are listed below. When any of the following standards are superseded by an approved + revision, the revision shall apply. + + + + + + Linux on Power Architecture Reference: Platform and Device Tree + + + + + Linux on Power Architecture Reference: Device Tree + + + + + + + Linux on Power Architecture Reference: Virtualization + + + + + Linux on Power Architecture Reference: Runtime Abstraction Services (RTAS) + + + + + Power ISA + + + + + IEEE 1275, IEEE Standard for Boot (Initialization Configuration) Firmware: + Core Requirements and Practices + IEEE part number DS02683, ISBN 1-55937-426-8 + + + + + Core Errata, IEEE P1275.7/D4 + + + + + Open Firmware Recommended Practice:OBP-TFTP + Extension + + + + + Open Firmware Recommended Practice: Device + Support Extensions + + + + + PCI Bus binding to: IEEE Std 1275-1994, Standard + for Boot (Initialization, Configuration) Firmware + + + + + Open Firmware: Recommended Practice - Interrupt + Mapping + + + + + Open Firmware: Recommended Practice - Forth Source + and FCode Image Support, Version 1.0 + + + + + Open Firmware: Recommended Practice - Interrupt + Mapping, Version 1.0 + + + + + Open Firmware: Recommended Practice - TFTP Booting + Extensions, Version 0.8 + + + + + Open Firmware: Recommended Practice - + Interposition, Version 0.2 + + + + + MS-DOS Programmer's Reference + Published by Microsoft + + + + + Peering Inside the PE: A Tour of the Win32 Portable + Executable File Format + Found in the March, 1994 issue of Microsoft Systems Journal + + + + + ISO-9660, Information processing -- Volume and + file structure of CD-ROM for information interchange + Published by International Organization for Standardization + + + + + System V Application Binary Interface, PowerPC + Processor Supplement + By Sunsoft + + + + + ISO Standard 8879:1986, Information Processing + -- Text and Office Systems -- Standard Generalized Markup Language (SGML) + + + + + IEEE 996, A Standard for an Extended Personal Computer + Back Plane Bus + + + + + PCI Local Bus Specification + All designers are responsible for assuring that they use the most current version of this document + at the time that they design conventional PCI related components or platforms. See the PCI SIG website + for the most current version of this document. + + + + + PCI-to-PCI Bridge Architecture Specification + All designers are responsible for assuring that they use the most current version of this document + at the time that they design conventional PCI related components or platforms. See the + PCI SIG website for the most current version of this document. + + + + + PCI Standard Hot-Plug Controller and Subsystem + Specification + + + + + PCI-X Protocol Addendum to the PCI Local Bus Specification + All designers are responsible for assuring that they use the most current version of this document at + the time that they design PCI-X related components or platforms. See the PCI SIG website for the most + current version of this document. + + + + + PCI Express Base Specification + All designers are responsible for assuring that they use the most current version of this document + at the time that they design PCI Express related components or platforms. See the PCI SIG website for + the most current version of this document. + + + + + PCI Express to PCI/PCI-X Bridge Specification + All designers are responsible for assuring that they use the most current version of this document at the + time that they design PCI Express related components or platforms. See the PCI SIG website for the most current + version of this document. + + + + + System Management BIOS (SMBIOS) Reference + Specification + + + + + (List Number Reserved for Compatibility) + + + + (List Number Reserved for Compatibility) + + + + (List Number Reserved for Compatibility) + + + + + IBM RS/6000® Division, Product Topology Data System, + Product Development Guide + Version 2.1 + + + + + Single Root I/O Virtualization and Sharing Specification + All designers are responsible for assuring that they use the most current version of this document at + the time that they design PCI Express SR-IOV related components or platforms. See the PCI SIG website + for the most current version of this document. + + + + + Multi-Root I/O Virtualization and Sharing Specification + All designers are responsible for assuring that they use the most current version of this document at the + time that they design PCI Express MR-IOV related components or platforms. See the PCI SIG website for the + most current version of this document. + + + + + + diff --git a/Error Handling/app_fault_v_errorlog.xml b/Error Handling/app_fault_v_errorlog.xml new file mode 100644 index 0000000..0b50f15 --- /dev/null +++ b/Error Handling/app_fault_v_errorlog.xml @@ -0,0 +1,891 @@ + + + + + When to use: Fault vs. Error Log Indicators (Lightpath Mode) + This appendix gives + highly recommended Service Indicator activation models + for typical system issues, when the Lightpath mode is implemented. The + purpose of this appendix is to get consistency across platforms, and to + answer common questions about how to handle specific issues. The reason that + these are recommended rather than required, is due to the range of systems + that are involved, specifically related to the different types of physical + layouts (for example: deskside, blade and blade chassis, rack-mounted and + particularly high end racks). + This appendix does + not change the architectural requirements specified in + other parts of this document, nor the requirement for implementations to + support those requirements. If there are any inconsistencies between this + appendix and the requirements in the rest of this document, the requirements + take precedence over this appendix. It is very important, therefore, that + designers understand the requirements in this architecture, and more + specifically, those in + . + gives the recommended models. The + general model, though, is still dictated by the following requirement, copied + here from the : + + + + + + + + + + + + + Service Indicator Activation Models for Typical System + Issues (Lightpath Mode) + <emphasis></emphasis> + + + + + + + + + + + + + Component or problem area + + + + + Problem or issue + + + + + Indicator activation? + (see notes + , + ) + + + + + Entry made in Service Focal Point error + log? + + + + + IBM Call Home? + + + + + Comments + + + + + + FRU Fault indicator?(see notes + , + ) + + + Error Log indicator?(see note + ) + + + + + + + All + + + Any not already covered in this table + + + Consult with the xipSIA architecture team for the proper + behavior + + +   + + + + + Power supply or fan + + + Redundant optional one missing + + + no + + + no + + + no + + + no + + + This row for information only (this is not a Serviceable + Event). + + + + + Redundant non-optional one missing + + + no + + + yes + + + yes + + + no + + +   + + + + + Failed redundant + + + yes + + + no + + + yes + + + yes + + +   + + + + + Failed non-redundant + + + yes + + + no + + + yes + + + yes + + +   + + + + + Power regulator not in power supply + + + Failed + + + yes + + + no + + + yes + + + yes + + + Treated the same as any other FRU or component on a FRU which + fails. + + + + + Power + + + Insufficient power with all power supplies installed and + operational for power domain + + + no + + + yes + + + yes + + + no + + + For components that will not power up due to lack of power + (for example, a blade in a chassis), and when that component + implements a fast blink capability for the green power LED, that + component’s green power LED remains in the fast blink + mode. + + + + + Insufficient power with missing power supply + + + no + + + yes + + + yes + + + no + + + + + Disabled button pressed + + + Unable to power on or off component due to power button being + disabled + + + no + + + no + + + no + + + no + + + These rows for information only (these are not a Serviceable + Events). + + + + + KVM or media tray button pressed, but not active because + disabled + + + no + + + no + + + no + + + no + + + + + Temperature detected out of tolerance + + + Warning only (no performance throttling or shut-down) + + + no + + + no + + + brand dependent + + + no + + +   + + + + + Performance throttling or shut-down due to over-temp + condition + + + yes + + + no + + + yes + + + no + + + FRU Fault indicator must be at component that is throttled or + shut-down (temperature indicators, which are not architected, do + not roll-up to Enclosure Fault indicators). + + + + + Memory (DIMMs) + + + No memory installed at all, or memory that is installed is + mismatched + + + yes + + + no + + + yes + + + no + + +   + + + + + Invalid memory configuration above the base memory (missing + memory, mismatched memory, unsupported memory) + + + no + + + yes + + + yes + + + no + + +   + + + + + Failed or predicted to fail + + + yes + + + no + + + yes + + + yes + + +   + + + + + System VPD + + + Invalid or missing + + + yes + + + no + + + yes + + + yes + + + Lack of some of the required fields in the call-home may + result in the call-home being flagged as a lack of + entitlement. + + + + + Battery + + + Missing or failed + + + yes + + + no + + + yes + + + brand dependent + + +   + + + + + Rechargeable battery needing reconditioning + + + no + + + yes + + + yes + + + no + + +   + + + + + CPU + + + Failed or predicted to fail + + + yes + + + no + + + yes + + + yes + + +   + + + + + Planar or CEC + + + Failed + + + yes + + + no + + + yes + + + yes + + +   + + + + + Disk + + + Failed or predicted to fail + + + yes + + + no + + + yes + + + yes + + +   + + + + + Boot device + + + Missing boot device + + + no + + + yes + + + yes + + + no + + +   + + + + + Corrupt image + + + no + + + yes + + + yes + + + no + + +   + + + + + I/O adapter + + + Fail or non-recoverable EEH error + + + yes + + + no + + + yes + + + yes + + +   + + + + + Service Processor (FSP, BMC, IMM) + + + Hardware failure + + + no + + + yes + + + yes + + + yes + + +   + + + + + Firmware failure + + + no + + + yes + + + yes + + + brand dependent + + +   + + + + + BIOS or Flash + + + Corrupted single side + + + no + + + yes + + + yes + + + no + + +   + + + + + Both sides corrupted + + + yes + + + no + + + yes + + + yes + + +   + + + + + All + + + Unisolated event + + + no + + + yes + + + yes + + + no + + + See also Requirement + + + + + + Switch + + + Failed + + + yes + + + no + + + yes + + + yes + + +   + + + + + System chassis controller (AMM, CME, ITME) + + + Failed + + + yes + + + no + + + yes + + + yes + + +   + + + + + Midplane + + + Failed + + + yes + + + no + + + yes + + + yes + + +   + + + + + Cables + + + Failed or missing + + + N/A + + + yes + + + yes + + + yes + + +   + + + + +
+ + Notes: + + + + + Never activate both a + Fault indicator and an Error Log indicator for the same problem. See also + Requirement + , referenced immediately above + . + + + + Fault indicators + above the FRU Fault indicator are not specified here, but the requirements + specify that a FRU Fault is rolled-up to the next higher level indicator + (specifically, the Enclosure Fault indicator). + + + + Enclosure Fault + indicators and above are only roll-up indicators and are never activated + without a FRU Fault indicator being activated. Therefore the column in + indicates a FRU Fault indicator. + That is, if no FRU Fault indicator exists for the problem, then the Error Log + indicator is used instead (per Requirement + , referenced immediately above + ). + + + + The activation of the + Error Log indicator (previously known as the System Information (Attention) + indicator) and Fault indicators are regulated by the following requirements, + among others: + + + + + + + + +
diff --git a/Error Handling/app_glossary.xml b/Error Handling/app_glossary.xml new file mode 100644 index 0000000..3aae9ef --- /dev/null +++ b/Error Handling/app_glossary.xml @@ -0,0 +1,1290 @@ + + + + + Glossary + This glossary contains an alphabetical list of terms, phrases, and abbreviations used in this document. + + + + Term + Definition + + + + AC + Alternating current + + + + ACR + Architecture Change Request + + + + AD + Address Data line + + + + Adapter + A device which attaches a device to a bus or which converts one + bus to another; for example, an I/O Adapter (IOA), a PCI Host Bridge (PHB), + or a NUMA fabric attachment device. + + + + + addr + Address + + + + Architecture + The hardware/software interface definition or software module to + software module interface definition. + + + + ASCII + American National Standards Code for Information + Interchange + + + + ASR + Address Space Register + + + + BAT + Block Address Translation + + + + BE + Big-Endian or Branch Trace Enable bit in the + MSR (MSRBE) + + + + BIO + Bottom of Peripheral Input/Output Space + + + + BIOS + Basic Input/Output system + + + + BIST + Built in Self Test + + + + Boundedly undefined + Describes some addresses and registers which when referenced provide + one of a small set of predefined results. + + + + BPA + Bulk Power Assembly. Refers to components used for power distribution + from a central point in the rack. + + + + BPM + Bottom of Peripheral Memory + + + + BSCA + Bottom of System Control Area + + + + BSM + Bottom of System Memory + + + + BUID + Bus Unit Identifier. The high-order part of an interrupt source number + which is used for hardware routing purposes by the platform. + + + + CCIN + Custom Card Identification Number + + + + CD-ROM + Compact Disk Read-Only Memory + + + + CIS + Client Interface Service + + + + CMO + Cooperative Memory Over-commitment option. See + for more information. + + + + + + CMOS + Complimentary Metal Oxide Semiconductor + + + + Conventional PCI + Behavior or features that conform to . + + + + CPU + Central Processing Unit + + + + CR + Condition Register + + + + CTR + Count Register + + + + DABR + Data Address Breakpoint Register + + + + DAR + Data Address Register + + + + DASD + Direct Access Storage Device (a synonym for “hard disk”) + + + + DBAT + Data Block Address Translation + + + + DC + Direct current + + + + DEC + Decrementer + + + + DIMM + Dual In-line Memory Module + + + + DMA + Direct Memory Access + + + + DMA Read + A data transfer from System Memory to I/O. A DMA Read Request + is the inbound operation and the DMA Read Reply (or Read Completion) is the + outbound data coming back from a DMA Read Request. + + + + DMA Write + A data transfer to System Memory from I/O or a Message Signalled Interrupt (MSI) DMA Write. This is an inbound operation. + + + + DOS + Disk OS + + + + DR + Data Relocate bit in MSR (MSRDR) + + + + DRA + Deviation Risk Assessment + + + + DRAM + Dynamic Random Access Memory + + + + DRC + Delayed Read Completion. A transaction that has completed + on the destination bus and is now moving toward the originating bus to complete. + DR Connector. + + + + DR entity + An entity that can participate in DR operations. That is, an entity + that can be added or removed from the platform while the platform power is on and the + system remains operational. + + + + DRR + Delayed Read Request. A transaction that must complete on the destination bus before completing on the originating bus. + + + + DSISR + Data Storage Interrupt Status Register + + + + DWR + Delayed Write Request. A transaction that must complete on the destination bus before completing on the originating bus. + + + + EA + Effective Address + + + + EAR + External Access Register + + + + ECC + Error Checking and Correction + + + + EE + External interrupt Enable bit in the MSR (MSREE) + + + + EEH + Enhance I/O Error Handling + + + + EEPROM + Electrically Erasable Programmable Read Only Memory + + + + EPOW + Environment and Power Warning + + + + + Error Log indicator An amber indicator that indicates that the user needs to + look at the error log or problem determination procedures, in order to determine the cause. + Previously called System Information (Attention). + + + + FCode + A computer programming language defined by the OF standard which is semantically + similar to the Forth programming language, but is encoded as a sequence of binary byte codes + representing a defined set of Forth words. + + + + FE0 + Floating-point Exception mode 0 bit in the MSR (MSRFE0) + + + + FE1 + Floating-point Exception mode 1bit in the MSR (MSRFE1) + + + + FIR + Fault Isolation Registers + + + + FLR + Function Level Reset (see PCI Express documentation). An optional reset for PCI Express + functions that allows resetting a single function of a multi-function IOA. + + + + FP + Floating-Point available bit in the MSR (MSRFP) + + + + FPSCR + Floating-Point Status And Control Register + + + + FRU + Field Replaceable Unit + + + + FSM + Finite State Machine + + + + GB + Gigabytes - as used in this document it is 2 raised to the power of 30 + + + + HB + Host Bridge + + + + HMC + Hardware Management Console - used generically to refer to the system + component that performs platform administration function where ever physically located. + The HMC is outside of this architecture and may be implemented in multiple ways. + Examples include: a special HMC applications in another system, an external appliance, + or in an LPAR partition using the Virtual Management Channel (VMC) interface to the + hypervisor. + + + + Hz + Hertz + + + + IBAT + Instruction block address translation + + + + ID + Identification + + + + IDE + Integrated Device Electronics + + + + IDU + Interrupt Delivery Unit + + + + IEEE + Institute of Electrical and Electronics Engineers + + + + I2C + Inter Integrated-circuit Communications + + + + I/O + nput/Output + + + + I/O bus master + Any entity other than a processor, cache, + memory controller, or host bridge which supplies both address and data in + write transactions or supplies the address and is the sink for the data in + read transactions. + + + + I/O device + Generally refers to any entity that is connected + to an IOA (usually through a cable), but in some cases may refer to the IOA + itself (that is, a device in the device tree that happens to be used for I/O + operations). + + + + I/O Drawer + An enclosure in a rack that holds at least one PHB and at + least one IOA. + + + + ILE + Interrupt Little-Endian bit in MSR (MSRILE) + + + + Instr + Instruction + + + + Interrupt Number + See Interrupt Vector below. + + + + Interrupt Vector + The identifier associated with a specific interrupt source. + The identifier’s value is loaded into the source’s Interrupt Vector Register and + is read from the Interrupt Delivery Unit’s Interrupt Acknowledge Register. + + + + IOA + I/O Adapter. A device which attaches to a physical bus which is capable + of supporting I/O (a physical IOA) or logical bus (a virtual IOA). The term “IOA” + without the usage of the qualifier “physical” or “virtual” will be + used to designate a physical IOA. Virtual IOAs are defined further in + + . + In PCI terms, an IOA may be defined by a unique combination of its assigned + bus number and device number, but not necessarily including its function number. + That is, an IOA may be a single or multi-function device, unless otherwise specified by + the context of the text. In the context of a PCIe I/O Virtualized (IOV) device (not to be + confused with a virtual IOA), an IOA is a single or multiple function device (for example, a + PCIe Virtual Function (VF) or multiple VFs). An IOA function may or may not have its own set of + resources, that is may or may not be in its own Partitionable Endpoint (PE) domain + (see also + + ). + + + + + IOA function + That part of an IOA that deals with a specific part of the + IOA as defined by the configuration space “Function” part of Bus/Device/Function. + For single-function IOAs, the IOA Function and the IOA are synonymous. + + + + IP + Interrupt Prefix bit in MSR (MSRIP) + + + + IPI + Interprocessor Interrupt + + + + IR + Instruction Relocate bit in MSR register (MSRIR) or infrared + + + + ISF + Interrupt 64-bit processor mode bit in the MSR (MSRISF) + + + + ISO + International Standards Organization + + + + ISR + Interrupt Source Register + + + + ISU + Interrupt Source Unit + + + + KB + Kilobytes - as used in this document it is 2 raised to the power of 10 + + + + KHz + Kilo Hertz + + + + LAN + Local Area Network + + + + LCD + Liquid Crystal Display + + + + LE + Little-Endian bit in MSR (MSRLE) or Little-Endian + + + + LED + Light Emitting Diode + + + + LMB + Logical Memory Block. The Block of logical memory addresses associated with a dynamically + reconfigurable memory node. + + + + Load + A Load Request is the outbound (from the processor) operation + and the Load Reply is the inbound data coming back from a + Load Request. When it relates to I/O operations, this is an + MMIO Load . + + + + LR + Link Register + + + + LSb + Least Significant bit + + + + LSB + Least Significant Byte + + + + LSI + Level Sensitive Interrupt + + + + LUN + Logical Unit Number + + + + L1 + Primary cache + + + + L2 + Secondary cache + + + + MB + Megabytes - as used in this document it is 2 raised to the power of 20 + + + + ME + Machine check Enable + + + + MMIO + Memory Mapped I/O. This refers to the mapping of the address space required + by an I/O device for Load or Store operations into + the system’s address space. + + + + MES + Miscellaneous Equipment Specification + + + + MFM + Modified frequency modulation + + + + MHz + Mega Hertz + + + + MOD + Address modification bit in the MSR + (MSRMOD) + + + + MP + Multiprocessor + + + + MSb + Most Significant bit + + + + MSB + Most Significant Byte + + + + MSI + Message Signalled Interrupt + + + + MSR + Machine State Register + + + + MTT + Multi-TCE-Table option. See + + + . + + + + + N/A + Not Applicable + + + + Nibble + Refers to the first or last four bits in an 8 bit byte + + + + NUMA + Non-Uniform Memory Access + + + + NUMA fabric + Mechanism and method for connecting the multiple nodes of a NUMA system + + + + NVRAM + Nonvolatile Random Access Memory + + + + OF + Open Firmware + + + + OP + Operator + + + + OS + Operating System + + + + OUI + Organizationally Unique Identifier + + + + PA + Processor Architecture + + + + PAP + Privileged Access Password + + + + LoPAR + Used within the Linux on Power Architecture + Reference documents to denote: (1) the architectural requirements specified + by the Linux on Power Architecture Reference document, (2) the Linux on Power Architecture + Reference documents themself, and (3) as an adjective to qualify an entity as being + related to this architecture. + + + + Partitionable Endpoint + This refers to the I/O granule that may be treated as one for + purposes of assignment to an OS (for example, to an LPAR partition). May be an + I/O adapter (IOA), or groups of IOAs and bridges, or portions of IOAs. PE granularity + supported by the hardware may be finer than is supported by the firmware. Grouping + of multiple PEs into one DR entity may limit assignment of a the separate PEs to different + LPAR partitions. See also DR entity. + + + + PC + Personal Computer + + + + PCI + Peripheral Component Interconnect. An all-encompassing term referring to + conventional PCI, PCI-X, and PCI Express. + + + + PCI bus + A general term referring to either the PCI Local Bus, as + specified in and + for conventional PCI and PCI-X, or a PCI Express link, as specified in + for PCI Express. + + + + PCI Express + Behavior or features that conform to + . + + + + PCI link + A PCI Express link, as specified in . + + + + PCI-X + Behavior or features that conform to . + + + + PD + Presence Detect + + + + PE + When referring to the body of the LoPAR, this refers to a Partitionable + Endpoint. + + + + + + + PEM + Partition Energy Management option. See + + + . + + + + + Peripheral I/O Space + The range of real addresses which are assigned + to the I/O Space of a Host Bridge (HB) and which are sufficient to contain all of + the Load and Store address space requirements of all the devices in the I/O Space + of the I/O bus that is generated by the HB. A keyboard controller is an example of + a device which may require Peripheral I/O Space addresses. + + + + Peripheral Memory Space + The range of real addresses which are assigned to the Memory + Space of a Host Bridge (HB) and which are sufficient to contain all of the Load and + Store address space requirements of the devices in the Memory Space of the I/O bus + that is generated by the HB. The frame buffer of a graphics adapter is an example + of a device which may require Peripheral Memory Space addresses. + + + + Peripheral Space + Refers to the physical address space which may + be accessed by a processor, but which is controlled by a host bridge. At least one + peripheral space must be present and it is referred to by the suffix 0. A host bridge + will typically provide access to at least a memory space and possibly to an I/O + space. + + + + PHB + PCI Host Bridge + + + + PIC + Programmable Interrupt Controller + + + + PIR + Processor Identification Register + + + + Platform + Refers to the hardware plus firmware portion of a system composed of hardware, + firmware, and OS. + + + + Platform firmware + Refers to all firmware on a system including the software or firmware in a + support processor. + + + + Plug-in I/O card + A card which can be plugged into an I/O + connector in a platform and which contains one or more IOAs and potentially + one or more I/O bridges or switches. + + + + Plug-in Card + An entity that plugs into a physical slot. + + + + PMW + Posted memory write. A transaction that has complete on the + originating bus before completing on the destination bus + + + + PnP + Plug and Play + + + + POP + Power On Password + + + + POST + Power-On Self Test + + + + PR + Privileged bit in the MSR (MSRPR) + + + + Processor Architecture + Used throughout this document to + mean compliance with the requirements specified in + . + + + + Processor revision number + A 16-bit number that distinguishes between various releases + of a particular processor version, for example different engineering change + levels. + + + + PVN + Processor Version Number. Uniquely determines the particular + processor and PA version. + + + + PVR + Processor Version Register. A register in each processor + that identifies its type. The contents of the PVR include the processor + version number and processor revision number. + + + + RAID + Redundant Array of Independent Disks + + + + RAM + Random Access Memory + + + + RAS + Reliability, Availability, and Serviceability + + + + Real address + A real address results from doing address + translation on an effective address when address translation is enabled. + If address translation is not enabled, the real address is the same as the + effective address. An attempt to fetch from, load from, or store to a real + address that is not physically present in the machine may result in a + machine check interrupt. + + + + Reserved + The term “reserved” is used within this + document to refer to bits in registers or areas in the address space + which should not be referenced by software except as described in this + document. + + + + Reserved for firmware use + Refers to a given location or bit which may not be used by + software, but are used by firmware. + + + + Reserved for future use + Refers to areas of address space or bits in registers which may be + used by future versions of this architecture. + + + + RI + Recoverable interrupt bit in the MSR (MSRRI) + + + + RISC + Reduced Instruction Set Computing + + + + RMA + Real Mode Area. The first block of logical memory addresses + owned by a logical partition, containing the storage that may be accessed with + translate off. + + + + ROM + Read Only Memory + + + + Root Complex + A PCI Express root complex as specified in + . + + + + RPN + Real Page Number + + + + RTAS + Run-Time Abstraction Services + + + + RTC + Real Time Clock + + + + SAE + Log Service Action Event log + + + + SCC + Serial Communications Controller + + + + SCSI + Small Computer System Interface + + + + SE + Single-step trace enabled bit in the MSR + (MSRSE) + + + + Service Focal Point + The common point of control in the system for handling all + service actions + + + + Serviceable Event + Serviceable Events are platform, + global, regional and local error events that require a service action + and possibly a call home when the serviceable event must be handled by a + service representative or at least reported to the service provider. + Activation of the Error Log indicator notifies the customer of the event + and the event indicates to the customer that there must be some intervention + to rectify the problem. The intervention may be a service action that the + customer can perform or it may require a service provider. + + + + SES + Storage Enclosure Services (can also mean SCSI Enclosure + Services in relation to SCSI storage) + + + + SF + Processor 32-bit or 64-bit processor mode bit in the MSR + (MSRSF) + + + + SFP + Service Focal Point + + + + Shrink-wrap OS + A single version of an OS that runs on all + compliant platforms. + + + + Shrink-wrap Application + A single version of an application program + that runs on all compliant platforms with the applicable OS. + + + + SMP + Symmetric multiprocessor + + + + SMS + System Management Services + + + + Snarf + An industry colloquialism for cache-to-cache + transfer. A typical scenario is as follows: (1) cache miss from cache A, + (2) line found modified in cache B, (3) cache B performs castout of modified + line, and (4) cache A allocates the modified line as it is being written back + to memory. + + + + Snoop + The act of interrogating a cache for the presence of a + line, usually in response to another party on a shared bus attempting to + allocate that line. + + + + SPRG + Special Purpose Registers for General use + + + + SR + System Registers + + + + SRC + Service Reference Code + + + + SRN + Service Request Number + + + + Store + A Store Request is an + outbound (from the processor) operation. When it relates to I/O + operations, this is an MMIO Store. + + + + System + Refers to the collection of hardware, system firmware, + and OS software which comprise a computer model. + + + + System address space + The total range of addressability as established by the + processor implementation. + + + + System Control Area + Refers to a range of addresses which + contains the system ROM(s) and an unarchitected, reserved, platform-dependent + area used by firmware and Run-Time Abstraction services for control of the + platform. The ROM areas are defined by the OF properties in the + openprom and os-rom nodes + of the OF device tree. + + + + System Information (Attention) indicator + See Error Log indicator. + + + + System firmware + Refers to the collection of all firmware on a system + including OF, RTAS and any legacy firmware. + + + + System Memory + Refers to those areas of memory which form + a coherency domain with respect to the PA processor or processors that + execute application software on a system. + + + + System software + Refers to the combination of OS software, + device driver software, and any hardware abstraction software, but + excludes the application software. + + + + TB + Time Base + + + + TCE + Translation Control Entry + + + + TLB + Translation Look-aside Buffer + + + + TOD + Time Of Day + + + + TOSM + Top of system memory + + + + TPM + Top of Peripheral Memory + Trusted Platform Module + + + + tty + Teletypewriter or ASCII character driven + terminal device + + + + UI + User Interface + + + + USB + Universal Serial Bus + + + + v + Volt + + + + VGA + Video Graphics Array + + + + VMC + Virtual Management Channel + + + + VPD + Vital Product Data + + + + VPNH + Virtual Processor Home Node option. See + + + . + + + + + + + + + + + + + + diff --git a/Error Handling/bk_main.xml b/Error Handling/bk_main.xml new file mode 100644 index 0000000..c5ab023 --- /dev/null +++ b/Error Handling/bk_main.xml @@ -0,0 +1,111 @@ + + + + + + + Error Handling + Linux on Power Architecture Reference + + + + + System Software Work Group + + syssw-chair@openpowerfoundation.org + + OpenPOWER Foundation + + + + 2016 + OpenPOWER Foundation + + + Revision 2.0_pre1 + OpenPOWER + + + + + + Copyright details are filled in by the template. + + + + + + The purpose of this document is to provide firmware and software + architectural details associated with Error Recovery and Logging on OpenPOWER Systems. + The base content for this document were contributed to the OpenPOWER Foundation in the + IBM Linux on Power Architecture Platform Reference (LoPAPR) Draft + document. It had numerous contributors inside IBM. + This document is a Standard Track, Work Group Specification work product owned by the + System Software Workgroup and handled in compliance with the requirements outlined in the + OpenPOWER Foundation Work Group (WG) Process document. It was + created using the Master Template Guide version 0.9.5. Comments, + questions, etc. can be submitted to the public mailing list for this document at + TBD. + + + + + + 2016-05-04 + + + + Revision 2.0_pre1 - initial conversion from IBM document. Extracted from + Linux on Power Architecture Platform Reference (LoPAPR) version 1.1 dated March 24, + 2016 -- Section 7.3.3 ([RTAS] Error and Event Reporting), Chapter 10 (Error and + Event Notification), Sections 1-3 of Chapter 16 (Service Indicators), and + Appendix L (When to use: Fault vs. Error Log Indicators). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Error Handling/ch_error_codes.xml b/Error Handling/ch_error_codes.xml new file mode 100644 index 0000000..ac42c69 --- /dev/null +++ b/Error Handling/ch_error_codes.xml @@ -0,0 +1,1280 @@ + + + + + Error Codes + +
+ Displaying Codes on the Standard Operator Panels + + + + + R1--1. + + Platform Implementation: Platforms must display + firmware progress codes (4 hex digits) on the operator panel display. On + 2x16 LCD displays, the progress codes are displayed left-justified on the + first line. + + + + + R1--2. + + Platform Implementation: Platforms must display + firmware error codes (8 hex digits) on the system console (graphic or + tty), and left-justified on the first line of a 2x16 LCD operator panel + display (if available). + + + + + R1--3. + + Platform Implementation: When a platform displays + firmware error codes, associated location codes must be displayed on the + following line on the system console (graphic or tty), and left-justified + on the second line of a 2x16 LCD operator panel display (if + available). + + + + + + The following describes in more detail the standard platform usage + of operator panel LEDs or LCDs for the display of firmware progress and + error codes. + + + + + Progress codes: Progress codes + from the system firmware and + service processor firmware are 4 hex digits in the range from 0x8000 + through 0xFFFF. Codes are displayed in the 4 character positions of a 1x4 + LED, or left justified in the first line of a 2x16 LCD. Subsequent + progress codes are displayed on top of (overlaying) the previous one. If + the system “hangs”, the last displayed progress code is left + on the display. + + + + + Error codes: Error codes are 8 + hex digits, as defined in + . These codes are displayed by + either boot ROM Power On Self Test (POST) or the service processor. If a + critical error is detected which prevents a successful boot or results in + system halt condition, the error code will be displayed left justified on + the first line of a 2x16 LCD. The error code is left on the LCD until the + system is reset or powered down. Error codes are not displayed on the + operator panel of platforms with only a 4-digit LED. On all platforms, + however, POST error codes are displayed on any system console (graphic or + tty). For non-critical errors where the system can boot and operate + normally or in a degraded mode, the associated error codes are not + displayed, but are reported to the OS via the POST error log and the RTAS + event-scan service. + + + + + Location Codes: Location codes + describe the physical location of + the most probable failing part associated with an error code. When an + error code is displayed on the first line of a 2x16 LCD, the location + code, if known, is displayed left justified on the second line. The + location code will remain on the LCD along with the error code until the + system is reset or powered down. Location codes for POST errors are also + displayed on any system console (graphic or tty), on the next line below + the error code. + + + + +
+ +
+ Firmware Error Codes + + The error code is an 8-character (4-byte) hexadecimal code produced + by firmware to identify the potential failing function or FRU in a + system. It consists of 5 source code characters and 3 reason code + characters. Individual characters within the error code have specific + field definitions, as defined in the following tables. + + + + + R1--1. + + Platform Implementation: To indicate the occurrence + of a critical platform error, platforms must display (either on an + operator panel or console) an 8-digit hex error code as defined in + and + . + + + + + + + + Service Reference Code (SRC) Field Layout + + + + + + + + + + + + + + + + Source Code + + + + + Reason Code + + + + + + + + + Byte 0 + + + + + Byte 1 + + + + + Byte 2 + + + + + Byte 3 + + + + + + S1 + + + S2 + + + S3 + + + S4 + + + S5 + + + R1 + + + R2 + + + R3 + + + + +
+ + + Service Reference Code (SRC) Field + Descriptions + + + + + + + + + + Field + + + + + Description + + + + + + + + S1 + + + Maintenance Package Source that produced the SRN + 0: Reserved + 1: Reserved + 2: POST, Firmware + 3: BIST + 4: Service processor, base system controller, etc. + 5: Reserved (potentially for use by AIX + Diagnostics) + 8: Product-Specific Service Guide, MAPs + 9: Reserved (potentially for use by the Problem Solving + Guide) + A-F: Reserved for future extension + + + + + S2 + + + Where applicable, use the lower nibble of the + + + base class code for the IOA definition (see + ). Only 00 to 0C are + currently defined in Revision 2.1, therefore the high nibble is + always zero. (There is a potential exposure that the high + nibble will be defined in the future, but currently there are + 13 base classes defined which include every device class, with + 3 remaining characters for future extension by the PCI SIG. + Therefore the exposure is in the far future.) For non-PCI + devices, use base class 0 to extend the definition (see + ). + + + + + S3-S4 + + + Where applicable, use the + + + subclass code for IOA definition (see + ). Also, extend the + definition to include non-PCI devices where it is not fully + utilized by PCI specification (see + ). + + + + + S5 + + + Unique version of the device/FRU type for a particular + product + + + + + R1 + + + Device/FRU unique failure reason codes. + For POST: assigned by Firmware Developer. + For AIX Diagnostics (S1 = 5, not currently + supported): + 1-7: Use in combination with R2,R3 for diagnostic test + failure when maximum isolation was obtained. + 8-9: Use in combination with R2,R3 for diagnostic test + failure when maximum isolation was NOT obtained. + A: Log analysis of POST error log + B: Log analysis of machine check or checkstop error + log + C: Log analysis of AIX device driver error log + D: diagnostic detected missing resource + E-F: Reserved + For others: assigned by respective developers. + + + + + R2-R3 + + + Device/FRU unique failure reason codes. + For POST: assigned by Firmware Developer + For others: assigned by respective developers. + + + + +
+ + + Current PCI Class Code Definition + + + + + + + + + + + PCI Base Class (lower + nibble)S2 + + + + + PCI Sub-ClassS3-S4 + + + + + Description + + + + + + + + 0 + + + Devices that were built before the class code field was + defined + + + + + 00 + + + All currently implemented IOAs except VGA-compatible + IOAs. + + + + + 01 + + + VGA-compatible IOAs. + + + + + 1 + + + Mass storage controller. + + + + + 00 + + + SCSI bus controller. + + + + + 01 + + + IDE controller. + + + + + 02 + + + Floppy disk controller. + + + + + 03 + + + Intelligent Peripheral Interface (IPI) bus + controller. + + + + + 04 + + + Redundant Array of Independent Disks (RAID) + controller. + + + + + 80 + + + Other mass storage controller. + + + + + 2 + + + Network controller. + + + + + 00 + + + Ethernet controller. + + + + + 01 + + + Token Ring controller. + + + + + 02 + + + FDDI controller. + + + + + 03 + + + ATM controller. + + + + + 80 + + + Other Network controller. + + + + + 3 + + + Display controller. + + + + + 00 + + + VGA-Compatible controller. + + + + + 01 + + + Extended Graphics Array (XGA) controller. + + + + + 80 + + + Other display controller. + + + + + 4 + + + Multimedia device + + + + + 00 + + + Video device + + + + + 01 + + + Audio device + + + + + 80 + + + Other multimedia device + + + + + 5 + + + Memory controller. + + + + + 00 + + + RAM + + + + + 01 + + + Flash + + + + + 80 + + + Other memory controller. + + + + + 6 + + + Bridge IOAs. + + + + + 00 + + + Host bridge + + + + + 01 + + + Reserved + + + + + 02 + + + Reserved + + + + + 03 + + + Reserved + + + + + 04 + + + PCI-to-PCI bridge + + + + + 05 + + + Reserved + + + + + 06 + + + Reserved + + + + + 07 + + + Reserved + + + + + 80 + + + Other bridge device. + + + + + 7 + + + Simple communication controllers. + + + + + 00 + + + Serial controllers. + + + + + 01 + + + Parallel port. + + + + + 80 + + + Other communication controllers. + + + + + 8 + + + Generic system peripherals + + + + + 00 + + + PIC + + + + + 01 + + + DMA Controller. + + + + + 02 + + + System timer + + + + + 03 + + + Real-Time Clock (RTC) controller + + + + + 80 + + + Other system peripherals + + + + + 9 + + + Input devices + + + + + 00 + + + Keyboard controller + + + + + 01 + + + Digitizer (pen). + + + + + 02 + + + Mouse controller + + + + + 80 + + + Other input controllers. + + + + + A + + + Docking stations + + + + + 00 + + + Generic docking station + + + + + 80 + + + Other type of docking station + + + + + B + + + Processors + + + + + 20 + + + PA compliant (PowerPC and successors) + + + + + 40 + + + Co-processor + + + + + C + + + Serial bus controllers + + + + + 03 + + + Universal Serial Bus (USB) + + + + + 04 + + + Fibre Channel + + + + +
+ + + S2-S3-S4 Definition for Devices/FRUs not Defined in + the PCI Specification + + + + + + + + + + + Base ClassS2 + + + + + Sub-ClassS3-S4 + + + + + Description + + + + + + + + 0 + + + 10 + + + AC Power + + + + + 11 + + + DC Power + + + + + 20 + + + Temperature Related Problem + + + + + 21 + + + Fans + + + + + 30-3x + + + Cables + + + + + 40-4x + + + Terminators + + + + + 50 + + + Operator panels + + + + + 60-6x + + + Reserved + + + + + 70-7x + + + Reserved + + + + + 90-9x + + + Reserved + + + + + A0 + + + Boot firmware Heartbeat + + + + + B0 + + + O/S Heartbeat + + + + + D0 + + + Unknown device + + + + + E0 + + + Security + + + + + 1 + + + A0 + + + SCSI Drives (generic) + + + + + B0 + + + IDE Drives + + + + + C0 + + + RAID Drives + + + + + D0 + + + SSA Drives + + + + + E0 + + + Tapes SCSI + + + + + E1 + + + Tapes IDE + + + + + ED + + + SCSI Changer + + + + + EE + + + Other SCSI Device + + + + + EF + + + Diskette drive + + + + + F0 + + + CDROM SCSI + + + + + F1 + + + CDROM IDE + + + + + F2 + + + Read/Write Optical SCSI + + + + + F3 + + + Read/Write Optical IDE + + + + + F4-FF + + + Reserved for other media devices + + + + + 5 + + + A0 + + + L2 Cache Controller including integrated SRAM + + + + + A1 + + + L2 Cache SRAM + + + + + A8 + + + NVRAM + + + + + A9 + + + CMOS + + + + + AA + + + Quartz/EEPROM + + + + + B0-Bx + + + Memory cards + + + + + Cyy + + + Memory DIMMs (yy = memory PD bits) + + + + + 7 + + + A0 + + + I2C bus + + + + + 8 + + + A0 + + + Power Management Functions + + + + + 9 + + + A0-Ax + + + Keyboards + + + + + B0-Bx + + + Mouse(s) + + + + + C0-Cx + + + Dials + + + + + D0 + + + Tablet + + + + + D1-Dx + + + Reserved for other input devices + + + + + B + + + A0 + + + Service processor + + + + +
+ +
+ +
diff --git a/Error Handling/ch_notifications.xml b/Error Handling/ch_notifications.xml new file mode 100644 index 0000000..ceea70c --- /dev/null +++ b/Error Handling/ch_notifications.xml @@ -0,0 +1,30 @@ + + + + + Error and Event Notification + + + + + + diff --git a/Error Handling/ch_rtas_error_classes.xml b/Error Handling/ch_rtas_error_classes.xml new file mode 100644 index 0000000..d561d0c --- /dev/null +++ b/Error Handling/ch_rtas_error_classes.xml @@ -0,0 +1,321 @@ + + + + + RTAS Error and Event Classes + + + describes the predefined classes of + error and event notifications that can be presented through the + check-exception and + event-scan RTAS functions. More detailed descriptions + of these classes are given later in this chapter. + defines nodes in the OF device + tree which, through an + “interrupts” property, may list the + platform-dependent interrupts related to each class. From this information, + OSs know which interrupts may be handled by calling + check-exception. The OF structure for describing these + interrupts is defined in + . + This document also defines the mask parameter for the + + check-exception and + event-scan RTAS functions which limits the search for + errors and events to the classes specified. + + + Error and Event Classes with RTAS Function Call + Mask + + + + + + + + + + + Class Type + + + + + OF Node Name(where the + “interrupts” property lists the + interrupts) + + + + + RTAS Function Call Mask(value = 1 enables + class) + + + + + + + + Internal Errors + + + internal-errors + + + bit 0 + + + + + Environmental and Power Warnings + + + epow-events + + + bit 1 + + + + + Reserved + + +   + + + bit 2 + + + + + Hot Plug Events + + + hot-plug-events + + + bit 3 + + + + + I/O Events and Errors + + + ibm,io-events + + + bit 4 + + + + +
+ + + + + R1--1. + + For the Platform Interrupt Event option: The platform + must implement the I/O Events and Errors class type along with the + appropriate + ibm,io-events node property to specify the + interrupts. + + + + + R1--2. + + Platform-specific error and event interrupts + that a platform provider wants the OS to enable must be listed in the + “interrupts” property of the appropriate OF + event class node, as described in + . + + + + + R1--3. + + To enable + platform-specific error and event interrupt notification, OSs must find the + list of interrupts (described in + ) for each error and event class in the + OF device tree, and enable them. + + + + + R1--4. + + OSs must have interrupt handlers for the + enabled interrupts described in Requirement + , which call the RTAS + check-exception function to determine the cause of the + interrupt. + + + + + R1--5. + + Platforms which + support error and event reporting must provide information to the OS via + the RTAS + event-scan and + check-exception functions, using the reporting format + described in + . + + + + + R1--6. + + Optional Extended Error Log information, if + returned by the + event-scan or + check-exception functions, must be in the reporting + format described in + . + + + + + R1--7. + + To provide control + over performance, the RTAS event reporting functions must not perform any + event data gathering for classes not selected in the event class mask + parameter, nor any extended data gathering if the time critical parameter + is non-zero or the log buffer length parameter does not allow for an + extended error log. + + + + + R1--8. + + To prevent the loss of any event + notifications, the RTAS event reporting functions must be written to gather + and process error and event data without destroying the state information + of events other than the one being processed. + + + + + R1--9. + + Any interrupts or interrupt controls used for + error and event notification must not be shared between error and event + classes, or with any other types of interrupt mechanisms. This allows the + OS to partition its interrupt handling and prevents blocking of one class + of interrupt by the processing of another. + + + + + R1--10. + + If a platform chooses to report multiple + event or error sources through a single interrupt, it must ensure that the + interrupt remains asserted or is re-asserted until + check-exception has been used to process all + outstanding errors or events for that interrupt. + + + + + + + Platform Implementation Note: In Requirement + , although the fixed-part return format + for + check-exception and + event-scan is the same, there are some expectations + about what types of error response may be returned from these functions, as + follows: + + + + + The + event-scan function is mainly intended to report only + errors that have been recovered or are non-critical to the OS, since it is + only called on a periodic basis. As such, it should never be used to report + a Severity greater than “WARNING”. More critical errors should + be signaled by an interrupt. Typically, the expected response of an OS to + an + event-scan error report is simply to log the error. The + check-exception function may report error information + of any severity. + + + + + If + event-scan is reporting a critical error (for example, + a checkstop) that occurred before the current boot session, it should not + report it with a “FATAL” Severity, even though the condition + was fatal at the time the failure occurred. The Severity field informs the + OS of the severity of the event at the time of reporting. Errors which + occurred before a successful reboot are no longer critical. Likewise, the + RTAS Disposition field for such an error should be + “FULLY_RECOVERED”. There is a bit in the extended error log to + indicate these “residual” errors. + + + + + Although + check-exception can potentially clean up an error and + return a “FULLY_RECOVERED” disposition, recovery still may not + occur if the MSR + RI bit is not set to 1. It is up to the OS to examine + the RI bit, to determine whether processor state is preserved so that a + return from the machine check interrupt handler can be safely + attempted. + + + + + + + + +
+ diff --git a/Error Handling/ch_rtas_error_reporting.xml b/Error Handling/ch_rtas_error_reporting.xml new file mode 100644 index 0000000..f53f0f0 --- /dev/null +++ b/Error Handling/ch_rtas_error_reporting.xml @@ -0,0 +1,36 @@ + + + + + RTAS Error and Event Information Reporting + + Architecture Note: All data formats listed in this section are either + referenced as byte fields (and therefore are independent of Endian + orientation), or an indicator in the data structure describes their Endian + orientation. Bits are numbered from left (high-order:0) to right + (low-order:7). + + + + + + diff --git a/Error Handling/ch_service_indicators.xml b/Error Handling/ch_service_indicators.xml new file mode 100644 index 0000000..2f14869 --- /dev/null +++ b/Error Handling/ch_service_indicators.xml @@ -0,0 +1,4168 @@ + + + + Service Indicators + + This chapter defines service indicators + + Note that many times “indicators” are referred to as + “LEDs” as this is one of the most common implementations for + indicators at the current time. + relative to: + + + + Which service indicators may be exposed to an OS and which may + not + + + + The usage model for service indicators, regardless of whether they + are exposed to the OS or not + + + +
+ General + This section gives some general background information required to + understand the service indicator requirements. The service indicator + requirements can be found starting in + . + +
+ Basic Platform Definitions + The following are the definitions of some of the terms used in this + architecture. See also + for additional terms. + +
+ “Enclosure”, Packaging, and Other + Terminology + In order to abstract specific packaging differences between + different products, this architecture uses a number of terms that denote + a unit of packaging. + The term + enclosure means something different, depending on the + product line. Generally this is an entity that can be unplugged and be + removed from the system, but may include the entire system, and generally + encloses other FRUs. It is, however, possible to have a FRU that contains + + one other FRU, and not have it be an enclosure. See + below, for more information. + The concept of the enclosure is very key to this architecture, + because the enclosure provides the anchor point for the Enclosure Fault, + Enclosure Identify, and (when applicable) the Error Log indicators. + + + + For a blade system, a base blade plus any attached + sidecars. + + + A sidecar is a blade that plugs + into a blade slot, but + which is physically connected to the base blade and which cannot be + removed without also removing the base blade and any other attached + sidecars. + + + + The Enclosure Identify indicator is located on the base blade. + Sidecars do not have an Enclosure Identify indicator. + + + + + + A stand-alone computing box, like a deskside unit. + + + + A separately powered box that attaches to a stand-alone computing + box (for example, an I/O expansion tower). + + + + For a rack system, a drawer or partial drawer, with its own power + domains, within a rack system (but not a chassis, in blade system + terms). + + + + FRUs that have one or no internal FRUs are a possible exception to + the above definition of enclosure. The general requirements are that the + enclosing FRU does not need an Error Log indicator (see also Requirement + ), implements the full xipSIA + Lightpath architecture + including FRU Identify, has the enclosing FRU + Fault/Identify and internal (if any) FRU Fault/Identify indicators + visible from the outside of the system the same way that enclosure + indicators would be, and rolls-up the FRU Fault/Identify indicators to + the next level of indicators when there is a next level (for example, + chassis level indicators). Examples of the type of FRUs that the xipSIA + architecture team + might approve as a non-enclosures is: + + + + Appliance drawers (“appliance” means that there are + no field serviceable parts inside). + + + + Appliance Blades, except if they require an Error Log + indicator. + + + + A power supply which comprises two or fewer FRUs. + + + + Fans, but not fan assemblies when the fan assemblies have three + or more Fault indicators. + + + + In addition, the term + System Enclosure (also known as a + Primary Enclosure) is used to denote the enclosure + of a system that contains the one and only Error Log indicator + + Previously known as the System Information (Attention) + indicator. + for the system. An enclosure that is not a System Enclosure is + called a + secondary enclosure. The System Enclosure is + expected to be one that contains at least some of the system processors + for the platform. + + In this chapter, the term + chassis will refer to a blade system chassis. + + Other terminology used in this chapter includes: + + + + activate + + To activate an indicator (physical or virtual) means to + set it to a non-off state (blink, blip, or on). An indicator does not + need to be in the off (deactivated) state prior to being activated (for + example a second request to activate an already active indicator, is also + considered to be an activation of that indicator). + + + + + active state + + An indicator in an active state is in a non-off state. + Different indicator types can be set to a different set of active states. + For each of the following indicators, the following states are applicable + in the indicator active state (See + for more detail on when each + state is applicable and for the conditions under which a state transition + is made): + FRU Identify: blink + FRU Fault: on + Blue Enclosure Identify: on or blink + Enclosure Fault: on or blip + Error Log: on + Blue Rack Identify: on + Blue Row Identify: on + + + + + blip + + A blink state with a short duty cycle used in the + “remind” state for Enclosure Fault Indicators. See also + Requirement + . + + + + + Chassis Enclosure Identify + + An Enclosure Identify indicator at the blade system chassis + level. + + + + + CRU + + See FRU. + + + + + deactivate + + To deactivate an indicator (physical or virtual) means + to set it to the off state. Deactivating a virtual indicator may or may + not deactivate the physical indicator associated with that virtual + indicator (see + ). + + + + + Enclosure Fault + + An amber indicator which indicates, when activated, + that there is a FRU Fault indicator in the enclosure that is + active. + + + + + Enclosure Identify + + An indicator that is used to identify an + enclosure in an installation or an enclosure in a group. This indicator + is blue in color and is turned on in the active identify state. + + + + + FRU + + Field Replaceable Unit. Used to also mean CRU (Customer + Replaceable Unit) in this chapter. + + + + + FRU Fault + + An amber indicator that is used to point to a failing FRU + in an enclosure. + + + + + FRU Identify + + An amber indicator that is used to identify a FRU in + an enclosure or a place where a FRU is to be plugged (for example, for an + upgrade operation). + + + + + Guiding Light Mode + + A platform implementation that provides FRU + Identify indicators for identifying failing FRUs. See + for more information. + + + + + ID + + Shorthand used some places (mainly figures) in this chapter for + “Identify” or “Identify indicator”. + + + + + Lightpath Mode + + A platform implementation that provides FRU Fault + indicators as the general way to identify failing FRUs. See + for more information. + + + + + not visible to the OS + + See transparent to the OS. + + + + + primary level indicators + + The enclosure level indicators. For + example, for rack systems, the enclosure is either the blade, for blade + systems, or the drawer level, for non-blade systems. + + + + + roll-down + + This term is not used by this architecture, but some + people refer to roll-up as the action of activating a higher level + indicator and roll-down as the action of deactivating a lower level + indicator. This architecture will use roll-up for both activation and + deactivation. See roll-up. + + + + + roll-up + + The action of activating a higher level indicator, when a + lower level indicator is activated, and deactivating it when all the + lower level indicators that roll-up to that indicator are deactivated. + For example, if a FRU Fault indicator is activated, it rolls-up and turns + on the Enclosure Fault indicator, and when the last FRU Fault indicator + in an enclosure is deactivated, the Enclosure Fault indicator for that + enclosure is deactivated. + + + + + secondary level indicators + + The indicators on levels below the Primary Level and above the FRU + level. + + + + + SFP + + Service Focal Point. See also + . + + + + + Error Log + + An amber indicator that indicates that the user needs to look at + the error log or problem determination procedures, in order to determine + the cause. + + + + + tertiary level indicators + + The FRU level indicators. + + + + + transparent to the OS + + Indicators whose state cannot be modified or + sensed by OS or application level software. For example, power supply + Fault indicators. + + + + + turn off + + To turn off a physical indicator means exactly like it + sounds. Turning off a virtual or logical indicator may or may not turn + off the physical indicator, depending on the state diagram for the + physical one (see + ). + + + + + visible to the OS + + Indicators whose state can be modified or sensed + by OS or application level software. For PCI Hot Plug indicators. See + also . + + + + +
+ +
+ Service Indicator Visibility and Transparency to the + OS + An indicator is said to be transparent or not visible to the OS + when its state cannot be modified or sensed by OS or application level + software (for example, power supply Fault indicators). An indicator is + said to be visible to the OS when its state can be modified and sensed by + OS or application level software (for example, PCI Hot Plug + indicators). + Requirements on visibility can be found in + . +
+ +
+ Service Indicator + A + service indicator is defined as any indicator that is + used in the course of servicing a system. The intent of service + indicators is + not, in general, to increase system Error Detection + and Fault Isolation (EDFI), but rather to guide the user in performance + of a service action. Usages include (but are not limited to): + + + + Dynamic Reconfiguration (LoPAR indicator type 9002) to indicate + the status of DR operations on a Field Replacable Unit (FRU). More + information on DR indicators can be found in + . This indicator is amber + + The term “amber” will be used in this chapter to mean + any wavelength between yellow and amber. + in color except for some legacy implementations which combined + this indicator with the power indicator, where the color was + green. + + + + An indication of a fault condition of a FRU (LoPAR indicator + type 9006, when OS visible). This indicator is amber in color. The FRU + Fault indicator is handled differently by the platform based on whether + or not the platform is Lightpath Mode platform or Guiding Light + Mode: + + + For Guiding Light Mode platforms, FRU fault indicators are + transparent to the software and therefore have some very specific + requirements relative to their very localized behavior. In this case, + although FRU Fault indicators themselves are transparent to the software, + the associated failure itself, which would activate a FRU Fault + indicator, will be available to the software that handles serviceable + events. + + + + For Lightpath Mode platforms, a FRU fault indicator will be + available to the software and is activated by the detector of the error. + In addition, the FRU Fault rolls up to an Enclosure Fault + indicator. + + + + + + A system-wide indication of a fault or some condition needing + attention in the system. An Error Log indicator (LoPAR indicator type + 9006) is an example of an OS-visible + + For a definition of the visibility or transparency of an + indicator, see + . + indicator of this class of indicators. The Error Log indicator + is a flag to the user that there is something in the system needing + attention, and therefore a starting point to indicate that they should + begin the isolation procedures to determine what needs attention. In a + partitioned system, the physical Error Log + + If the term “virtual” does not appear before + “Error Log”, then the text is referring to the physical + Error Log indicator. + indicator may be the logical OR of individual virtual Error + Log indicators (one virtual Error Log indicator per logical partition and + one for each other separate entity that is non-partition related). This + indicator is amber in color. + + + + An indication of an Identify (locate) operation. An Identify + indicator (LoPAR indicator type 9007) is an example of an indicator of + this class. These indicators may or may not be visible to an OS. In this + capacity, the indicator is activated + + For a definition of what “activate” means, see + . + at the user’s request in order to help them locate a + component in the system (for example, a FRU, a connector, an enclosure, + etc.). This indicator is amber in color, except for the Enclosure, Rack, + and Row Identify indicators, which are blue in color. + + + + An indication of the power state of an entity. This indicator is + platform controlled and is transparent to the OS(s). In addition to the + power state, this indicator may be used to indicate a power failure or + fault. This indicator is green in color. + + + + Environmental indicators such as ambient temperature too high. + These are transparent to the OS. + + + + Hardware only indicators such as Ethernet activity indicators. + These are transparent to the OS. + + + +
+ +
+ Service Indicator Modes + There are two modes that a platform can operate in relative to + service indicators: Lightpath Mode and Guiding Light Mode. Any particular + + platform operates in one and only one mode relative + to service indicators: Lightpath Mode or Guiding Light Mode. A + component (hardware, firmware, or software) which is + designed to be used in both a Lightpath Mode and a Guiding Light Mode + platform needs to be able to operate in both modes. + For guidance in which mode a platform should be designed to + operate, see + . + The following sections give an overview of these two modes. For + specific requirements of each mode, see + . + +
+ Lightpath Mode + The + Lightpath Mode specifies a platform implementation of + service indicators much like what industry-standard servers originally + implemented with its Lightpath, except that FRU indicators also implement + an Identify state along with the current Fault state. The Identify state + overrides the Fault state while the Identify is active for an indicator, + and the indicator is put into the Fault state, if one is pending, when + the Identify is removed. + A summary of the Lightpath Mode is as follows (see + for detailed + requirements): + + + + FRU Fault indicators are used as the general way to identify + failing FRUs. + + + + The physical indicator that implements the Fault indicator states + also implements the Identify indicator states (that is, a FRU Fault + indicator is also a FRU Identify indicator for the same FRU). + + + + This mode is basically a superset of the Guiding Light + Mode. + + + + FRU Fault indicators are presented to the OS for FRUs for which + the OS image is expected to detect errors for either the entire FRU or + part of the FRU. In the latter case, this represents a shared FRU, in + which case the FRU Fault indicator is virtualized, so that one partition + cannot view the setting by another partition, which would allow a covert + storage channel (see also + ). + + + + The OS and firmware are responsible for activating the FRU Fault + indicator for a FRU for which they detect an error. Fault indicators are + reset by the service action on the failing part that they + represent. + + + + FRU Identify indicators are presented to the OS for FRUs that are + fully owned by the OS image. They may also be presented for FRUs that are + partially owned by the OS image. Ownership of a FRU by the OS image is + defined as being the condition of the FRU being under software control by + the OS, a device driver associated with the OS, or application software + running on the OS. In the partially owned case, this represents a shared + FRU, in which case the FRU Identify indicator is virtualized, so that one + partition cannot view the setting by another partition, which would allow + a covert storage channel (see also + ). + + + + Connector Identify indicators are presented to the OS for + connectors that are fully owned by the OS image. Ownership of a connector + by the OS image is defined as being the condition of the connector being + under software control by the OS, a device driver associated with the OS, + or application software running on the OS. + + + + Enclosure Identify indicators are available to the OS when the OS + fully owns a FRU in the enclosure. This indicator is virtualized in a + partitioned system, so that one partition cannot view the setting by + another partition, which would allow a covert storage channel. + + + + The Error Log indicator or virtual copy thereof (for LPARed + platforms) is available to each OS image. + + + + See Requirement + for more information for + requirements on activation of the Fault indicators. + The Triple-S UI, when implemented, also adds additional requires to + Lightpath Mode implementations. See + . +
+ +
+ Guiding Light Mode + A summary of the Guiding Light Mode is as follows (see + for detailed + requirements): + + + + FRU Identify indicators are used as the way of identifying + service procedures like repair, reconfiguration, and upgrade. FRU + Identify indicators are activated/deactivated by user via a user + interface, to identify the FRU(s) involved in the service + procedure. + + + + FRU Identify indicators are presented to the OS for FRUs that are + fully owned by the OS image. Ownership of a FRU by the OS image is + defined as being the condition of the FRU being under software control by + the OS, a device driver associated with the OS, or application software + running on the OS. + + + + Connector Identify indicators are presented to the OS for + connectors that are fully owned by the OS image. Ownership of a connector + by the OS image is defined as being the condition of the connector being + under software control by the OS, a device driver associated with the OS, + or application software running on the OS. + + + + Fault indicators are allowed, but not required, but if provided, + must be transparent to any OS image, and are reset by the service action + on the failing part that they represent. To be transparent to an OS means + that they cannot be controlled by the OS, nor will they interfere with + any other indicator that is controlled by the OS. + + + + Enclosure Identify indicators are provided as part of the + Identify roll-up. Enclosure Identify indicators are available to the OS + when the OS fully owns a FRU in the enclosure. This indicator is + virtualized in a partitioned system, so that one partition cannot view + the setting by another partition, which would allow a covert storage + channel. + + + + The Error Log indicator, or a virtual copy thereof (for LPARed + platforms), is available to the OS. + + + +
+ +
+ +
+ Covert Storage Channels + A + covert storage channel is a path between two entities + that can be used to pass data outside the normal data sharing paths like + LANs. For example, if two OS images were given access to the same + physical indicator and if each OS image could read the state of the + indicator, then the indicator can become a single-bit covert storage + channel between cooperating entities in the two OS images, to pass data + back and forth. This cannot be allowed, for security reasons, and + therefore this architecture defines the concept of virtual + indicators. + A + virtual indicator is provided to each OS image for + each physical indicator that is shared between OS images. The physical + indicator is activated when any virtual indicator for that physical + indicator is activated and the physical indicator is deactivated when all + virtual indicators for that physical indicator are deactivated. The + general OS image can sense what it is trying to set the indicator to, but + cannot sense what the other virtual indicators are set to, and hence no + covert storage channel exists. The exception to the shared access is by a + trusted Service Focal Point (see + for more details). For more + information on how virtual indicators affect the physical indicator + state, see the physical indicator state diagrams later in this + chapter. + An OS image in a partitioned system needs to realize that it may + not have full control over all physical indicators to which it has access + (that is, needs to realize that the indicators may be virtualized in some + cases), and in those cases it should not attempt to indicate to the user + via a user interface the state of the physical indicator which is + controlled by a virtual indicator. + Virtual indicators are controlled by the OS for which they are + generated, except that the platform may activate an OS’ virtual + Error Log indicator if the partition in which the OS resides abnormally + terminates. +
+ +
+ Service Focal Point (SFP) and Service Partition + The + Service Focal Point (SFP), when it exists, will + ultimately be the exclusive common point of control in the system for + handling all service actions which are not resolved otherwise (for + example, via Fault indicators). It interfaces with the error log where + all the serviceable events are stored from the various OS and service + processor diagnostics. The SFP, among other things, allows resetting of + the Error Log light by the user, allows controlling the activation and + deactivation of the FRU, connector, and Enclosure Identify indicators, + and allows the clearing of the service actions in the error log. + The SFP shares access to some of the same indicators as one or more + OS images, but needs access to the physical indicator state, and + sometimes the state of all the virtual indicators for that physical + indicator. If the SFP in a partitioned system were to be implemented on + an OS image that runs non-trusted applications, then the SFP partition + could not be given access to the physical and other OS’ virtual + service indicators, or covert storage channels would exist (see + ) between the SFP partition and + the other OS partitions. This architecture assumes that the SFP is + implemented as trusted or + privileged entity which does not allow non-trusted + applications running on the same OS image as the SFP, and therefore + covert storage channels are not considered to exist between the + SFP’s privileged OS image and other OS images in the system. + The SFP may also be implemented on as a separate entity from the + one being monitored. A system management entity like an HMC interfacing + to the platform via firmware interfaces, or an external system management + entity, are examples of such implementations. + For Lightpath Mode, the Triple-S UI is a user interface that is + associated with a SFP. See + . + The platform’s physical indicators are accessible to the SFP + through the normal indicator interface (LoPAR indicator types 9006 and + 9007). +
+ +
+ Logical Indicators vs. Physical Indicators + A physical indicator is, in many cases, used to represent several + logical and/or virtual indicators. For example, a physical FRU indicator + can be used in Lightpath Mode to represent both a FRU Identify indicator + and a FRU Fault indicator. + The hardware/firmware that implements the physical + indicator’s state machine is the entity which knows about the + combining of the logical and virtual into the physical, and higher level + software (OS and applications) that are given control of a logical or + virtual indicator are only aware of the control of that logical or + virtual indicator, and may not be even able to sense the state of the + physical indicator (that is, can only sense the state of their logical or + virtual ones). + The physical indicator state diagrams in + indicate how logical and + virtual indicators are merged into the physical ones. See also + relative to virtual + indicators. +
+
+ +
+ Machine Classes and Service Strategy + Two broad classifications of computer implementations are defined + here for purposes of defining service indicator implementations. + shows the comparison of these + classes. +   + + Machine Classifications and Service + Characteristics + + + + + + + + + + + Characteristic + + + + + Simple Class + + + + + Complex Class + + + + + + + + Number of FRUs + + + Few + + + Many + + + + + Servicing performed by + + + Customer, generally + + + CE more than customer + + + + + Deferred maintenance + + + Very little + + + Enabled as much as possible + + Deferred maintenance is one of the big drivers towards + use of Guiding Light mode or Lightpath Mode with Triple-S. + That is, having many Fault indicators active at one time + (FRUS waiting for service actions) can lead to confusion when + service is being performed. + + + + + + Concurrent maintenance + + + Generally limited to redundant components (fans, power + supplies) and I/O devices + + + Generally a higher level of concurrent maintenance + + + + + Value of a FRU Fault indicator + + + High + + + Questionable value due to complexity of the system + + + + + FRU Fault indicator implementation + + + Realistic + + + Complex, given the higher level of deferred and + concurrent maintenance + + + + + Console interface + + + Rare + + + Standard + + + + + Platform service mode + + + Lightpath Mode platform + + + Guiding Light Mode platform + or + Lightpath Mode with Triple-S UI + + + + +
+ + Determining whether a platform’s classification, and + therefore the service mode of the platform is dependent on the product + requirements, and is beyond the scope of this architecture, but might + include: + + + + The RAS requirements for the platform. The considerations for + this come from + . + + + + The mixture of machines expected in the environment. Although the + Lightpath Mode and the Guiding Light Mode both contain the identify + capability, and that could be considered to be the common denominator in + servicing in a mixed environment, it could be that there are more + Lightpath Mode platforms in the environment for which a new platform + design is targeted, and therefore it might be desirable to make that new + platform’s mode of operation be the Lightpath Mode for that + reason. + + + +
+
+ General Information about Service Indicators + Indicators may serve multiple uses, but only as defined by this + architecture. For example, a physical indicator used for a FRU is used + for both the FRU Fault and FRU Identify indicators. Non-architected + usages of an architected indicator are specifically disallowed by this + architecture. + In some cases, an indicator may not be visible directly by the user + without removing covers, components, etc. In this case, there is required + to be one or more indicators that are higher in the hierarchy which get + activated in conjunction with the target indicator. This functionality is + called indicator + roll-up. Due to the hierarchy, there might be + multiple indicators that get rolled-up into a single indicator. The + platform (not the OS) is responsible for indicator roll-up. An example of + a roll-up is that on the front of an enclosure + + Note that the enclosure is sometimes called the + “unit,” but a unit is not necessarily a drawer and a drawer + is not necessarily a unit, so the term “unit” is not be + used here. Also note that an enclosure might be a drawer in a rack or + might be part of a drawer. For example, some I/O drawers consist of two + separate and independent enclosures. So, sometimes there may be + multiple enclosure indicators per rack drawer. See also + . + in a rack there is a summary LED that summarizes the Identify + LEDs within or on the back of the enclosure in a rack, and then the + multiple enclosure summary LEDs are summarized at the rack level with a + light on the top of the rack. Another example of a roll-up indicator is + the Enclosure Fault indicator on each enclosure in Lightpath Mode + platforms, which summarizes the Fault indicators within the enclosure. + These roll-up indicators are transparent to the OS, and sometimes to the + firmware, with the exception that the enclosure level Identify indicators + (or virtual versions thereof, in the case of partitioned systems) may be + accessible to the OS via the 9007 indicator type. The indicators that are + provided for roll-up from FRU to enclosure to rack are identified by this + architecture. Platforms may have unique indicators which are not visible + to the OS and which are not defined by this architecture. These will not + share the same indicator as used by one of the indicators which is + architected, including indicators in the roll-up path, except as + explicitly allowed by the architectural requirements in this + architecture. In addition to the roll-up to a higher level indicator for + visibility, the platform may also provide duplicate indicators for some + of the indicators. For example, there may be a front and rear indicator + for the enclosure indicators. These duplicate indicators are not defined + by this architecture except that as for roll-up indicators, the platform + is responsible for controlling any duplicate indicators and for not + making the duplicates visible to the controlling entities. Finally, FRU + indicators are required to be visible to the user during a service + action. This may require, for example, that the indicator be able to be + lit after power is removed from the system, requiring storage of power on + the component with the indicator (for example, via a capacitor) and + activation of the indicators by a push button by the user. + An OS image is given access to the FRU Identify indicators when the + OS image fully owns the resources, and is given access to the Enclosure + Identify indicator for any enclosure in which the OS image fully owns any + resource. An OS image is given access to the FRU Fault indicators when + the OS image owns all or part of the FRU. The Enclosure Fault indicators + are roll-up only indicators and access to these indicators are not given + to the OS. + In a partitioned system (logical or physical), there may be several + virtual Enclosure Identify indicators and one physical Enclosure Identify + indicator. In this case, the OS images are only given access to their + copy of the virtual Enclosure Identify indicator, and do not have direct + access to the physical Enclosure Identify indicator. Activating any + virtual Enclosure Identify indicator which is associated with an + enclosure activates the physical one for that drawer (if not already + activated). Turning off the last virtual Enclosure Identify indicator for + an enclosure turns off the physical one for that enclosure, providing all + other Identify indicators in the enclosure are also off. If software in a + partition senses the state of the virtual Enclosure Identify indicator, + it needs to take into consideration that it may be seeing the virtual + state and not the real state of the indicator, with the virtual state + being what the partition set the indicator to, and this is not + necessarily what the physical indicator is actually displaying. + The Error Log indicator is located on the System Enclosure (the CEC + enclosure) and is used to indicate that there was a failure in the + system. This indicator may also be used by the system to indicate that + some other attention is needed in the system. This Error Log indicator is + the starting point for the determination of the necessary action by the + user. + In a partitioned system (logical or physical), there may be several + virtual Error Log indicators and one physical Error Log indicator. + Activating a virtual Error Log indicator activates the physical one. + Turning off the last virtual Error Log indicator turns off the physical + one. If software in a partition senses the state of the Error Log + indicator, it needs to take into consideration that it may be seeing the + virtual state and not the real state of the indicator, with the virtual + state being what the partition set the indicator to, and this is not + necessarily what the physical indicator is actually displaying. + For Guiding Light Mode platforms, the FRU Identify indicators are + the primary method for pointing to failing FRUs. For Lightpath Mode + platforms, it is expected that the FRU Identify indicators will be used + as a secondary assistance for FRU fault identification (the FRU Fault + indicators being the primary). In both cases, the FRU Identify indicators + can be used to assist with such things as identifying where an upgrade + should be inserted. + The general rules for activation and deactivation of indicators can + be found in Requirements + and + , and more explicit + requirements of individual indicators in the state diagrams in + . When the Triple-S UI is + implemented, see also + . + This architecture assumes that the control of multiple users doing + identify operations at the same time, is under procedural control, and is + not handled or controlled in any way by this architecture, OS, or + firmware. + For Guiding Light Mode platforms, if a FRU contains a Fault + indicator, then the Fault indicator is transparent to the OS and control + of the FRU-level Fault indicator is entirely up to the FRU or to some + OS-transparent method. For example, some power supplies contain a Fault + indicator that does not get reported directly to the system controlling + entity and which is turned off by a button on the power supply which is + pushed when the service is complete. +
+
+ Secondary Light Panels + A secondary light panel may be used to house roll-up indicators as + indicated in the “intermediate” level or + “secondary” level indicators in + and + . These panels may also house + other indicators which would otherwise not have a home (for example, an + over-temperature indicator). + Secondary light panels indicators are not to be used as replacement + for FRU-level indicators. However, if an indicator is not directly + visible when the unit is placed into the service position (for example, + blocked by covers, baffles, cables, etc.), then the secondary light panel + is one implementation to get around this restriction (other + implementations may exist, for example light pipes, etc.). +
+
+ Group Identify Operation + In some systems it may be desirable to identify a set of enclosures + as being part of a group. This is called a group identify operation and + can be performed by activating the appropriate Enclosure Identify + indicators. + For platform or systems that consist of multiple enclosures, it may + be necessary to change the state of one enclosure before servicing + another enclosure. For example, a system drawer (primary enclosure) may + need to be powered down before servicing an I/O drawer (secondary + enclosure). It may be useful in this case for the servicer to be able to + identify the various enclosures that are linked. In such implementations, + the enclosures should be designed with a method to activate the Group + Identify function, with the “group” being all linked + enclosures. One implementation of this is to put a pushbutton in + proximity to the blue Enclosure Identify indicator, which is then used to + activate the blue Enclosure Identify indicators of all connected + enclosures, and subsequently to deactivate all of them. It is suggested + that with this implementation of the Group Identify function, that this + switch toggle the Group Identify function for this set of enclosures, + with each push toggling the Group Identify function. If it takes awhile + to activate all the blue Enclosure Identify indicators in the group, it + may be useful to give the user feedback that the button has been pressed. + One way to do this is to put the blue Enclosure Identify indicator next + to the pushbutton into the blink state (momentarily) until all the other + blue Enclosure Identify indicators in the group have been activated, and + when that is complete, to put this indicator into the Identify state (on + solid). +
+ +
+ System-Level Diagrams + The following figures are conceptual diagrams showing indicator + roll-ups: + + + + . + + + + . + + + + . + + + + +
+ Representation of the Indicators -- Lightpath Mode Platform + + + + + + + + +
+ +
+ Representation of the Indicators -- Guiding Light Mode Platform + + + + + + + + +
+ +
+ Representation of the Indicators -- Rack System + + + + + + + + +
+ Note: Guiding Light Mode platform shown, + with optional Enclosure Fault indicators. For Lightpath Mode platforms, + FRU Fault indicators would always exist and would roll up to the Enclosure + Fault indicator, and additionally, the Rack and Row Identify indicators would + have an additional Fault indicator (not shown) and the Fault indicators at the + enclosure level would roll up to those. +
+ +
+ +
+ Service Indicator Requirements + Service indicators are required on all platforms. + + + + R1--1. + + All platforms must implement either the + Lightpath Mode or the Guiding Light Mode of service indicators, and all + components and enclosures (the primary enclosure and any secondary + enclosures (for example, I/O expansion drawers)) within the platform must + be operating in the same mode. + + + + + R1--2. + + Indicators defined by this architecture must + not be used for any purpose other than is what is specified by this + architecture, and only with the specific states defined by this + architecture. + + + + R1--3. + + All platforms must provide the + “ibm,service-indicator-mode” property in + the Open Firmware Device Tree root node. + + + + + +
+ Service Indicator General Requirements + This section details requirements of indicators that are not + specifically LoPAR indicator type 9006 or 9007 related. These are true + even if the platform does not present any 9007 indicators to the OS. This + includes requirements for platform actions like roll-up. For 9006 and + 9007 specific requirements, see + . + Requirements which are prefaced by + “For Lightpath Mode platforms:” + only apply to + Lightpath Mode platforms. Requirements which are prefaced by + “For Guiding Light Mode platforms:” + only apply + to Guiding Light Mode platforms. Requirements that are prefaced by + neither, apply to both Lightpath Mode and Guiding Light Mode platforms. + Components which are designed to work in both + Lightpath Mode and Guiding Light Mode platforms, need to be able to + comply with both Lightpath Mode and Guiding Light Mode sets of + requirements, as well as the requirements that apply to all. + +
+ Fault Detection and Problem Determination + Requirements + There are two general classifications of problems which are + indicated by Service Indicators: + + + + An indication for FRUs that have failed and need to be + replaced + + + + An indication of other system problems that may be causing + performance degradation or which might cause failures in the future, for + example: + + + + A FRU that is predicted to fail (may be treated as a failing FRU + by some implementations) + + + + An over temperature conditions + + + + A loss of redundancy that is not caused directly by a FRU failure + (for example, greater than 100% of the power of the base power being + used) + + + + A configuration problem such as a missing resource, resource + plugged into the wrong slot, or invalid configuration + + + + + + The general model for use of the Error Log + + Previously called the System Information (Attention) + indicator. + and Enclosure Fault indicators is to indicate problems as + follows: + + + + Activation of either the Error Log or Enclosure Fault indicators + is accompanied by a log entry in an error log that can be queried by the + user + + + + Activation of the Error Log indicator is used when the user needs + to perform some procedure, or acknowledge some condition, prior to taking + corrective action + + + + For most types of problems, this requires the user to look into + the error log at the start of the procedure + + + + In some cases (generally for more common or more urgent + problems), additional indicators may be provided by a system and + activated to allow the user to determine the problem without looking into + the error log (these additional indicators are generally not allowed to + be the same indicators as defined by this architecture, except as allowed + by this architecture) + + + + The procedure performed by the user may include items + like: + + + + Activation of FRU Identify indicators (for example, as in Guiding + Light Mode systems) + + + + Removal and re-connection of cables, reseating of cards, + etc. + + + + + + + + Activation of an Enclosure Fault (Lightpath Mode systems) is only + allowed in the following cases: + + + As an indication of the roll-up of a FRU Fault indicator + + + + In conjunction with a system error that prevents a FRU Fault + indicator from being activated (this requires some other indication of + the global failure problem, for example, an error code on an op + panel) + + + + + + The following requirements define the actions to be taken by a + system on the detection of a fault. + + + + R1--1. + + The detector of a fault condition must do the following: + + + + If the a fault + occurs which cannot be isolated appropriately without the user performing + some procedure, then activate the Error Log indicator. + + + + If a fault occurs + which can be isolated to a single FRU and if there exists a Fault + indicator for the FRU, then activate that FRU Fault indicator, otherwise + activate the Error Log indicator. + + + + If a fault occurs + which cannot be isolated to a single FRU and if there exists a Fault + indicator for the most likely FRU in the FRU list, then activate that FRU + Fault indicator, otherwise activate the Error Log indicator. + + + + If a fault occurs + which is isolated to a group of FRUs (called a FRU group) and if there + exists a Fault indicator for each of the FRUs, then activate all the FRU + Fault indicators, otherwise activate the Error Log indicator. + + + + See also, + . + + + + + R1--2. + + (Requirement Number Reserved For + Compatibility) + + + + + R1--3. + + Service Indicators (Error Log, Fault, and Identify) must be activated + appropriately to guide a user to or through a service action or + procedure. + + + + + R1--4. + + Service Indicators (Error Log, Fault, and Identify) must be deactivated + appropriately, as follows: + + + + A Service Indicator activated by an entity must be automatically + deactivated by that entity when that entity can determine that the + activation is no longer necessary, or + + + + A Service Indicator must be automatically deactivated by the + platform when the platform can determine that the activation is no longer + necessary or may be necessary but will be redetected and therefore + reactivated a reasonable time later, or + + + + A Service Indicator must be automatically deactivated by a + service procedure which fixes the issue that caused the indicator to be + automatically activated in the first place, or + + + + A Error Log or Identify indicator must be deactivated when a + user request it to be deactivated by a system-level user + interface. + + + + For the Lightpath UI Base Enablement, as indicated in + Requirement + and + . + + + + + + + R1--5. + + For each + activation of the Error Log and Enclosure Fault Indicators, one of the + following must be true: + + + + If the platform + is functional enough to allow it, then an associated entry must be made + in an error log that can be queried by a user interface. + + + + In the case where + the platform is not functional enough to allow logging of an error log + entry, then there must exist a way for the user to determine the failure + associated with the indicator activation (for example, an error code on + an op panel on the system). + + + + + Implementation Notes: + + + + + Requirement + are intentionally written + general enough so that different platform types have some latitude in + implementation of Service Indicators. However, see the state diagrams, + , for some explicit + requirements for activation and deactivation of the various Service + Indicators. Those state diagrams take precedence over Requirement + . When the state diagrams and + Requirement + do not give explicit direction + for implementation, implementers should consider compatibility with + existing implementations when making decisions about activation and + deactivation. + + + + 2. In Requirement + , the physical indicator may + not be turned off when deactivated from an OS interface (versus a + system-level interface), if another entity outside of that OS also has + the physical indicator activated. That is, if the physical indicator is + the combination of several logical indicators. + + + + + + + R1--6. + + The Error Log + indicator must be activated only for Serviceable Events. Serviceable + Events are platform, global, regional and local error events that require + a service action and possibly a call home when the serviceable event must + be handled by a service representative or at least reported to the + service provider. Activation of the Error Log indicator notifies the + customer of the event and the event indicates to the customer that there + must be some intervention to rectify the problem. The intervention may be + a service action that the customer can perform or it may require a + service provider. + + + + +
+ +
+ FRU-Level and Connector Indicator Requirements + The indicators specified in this section represent the lowest level + indicators in the indicator roll-up hierarchy. + See also requirements in + . + For the Lightpath UI, see also the requirements in + . + + + + R1--1. + + For Lightpath Mode platforms: + All of the following must be true: + + + + A FRU Fault indicator must be implemented for every replaceable + FRU, with the states of “off” and “on,” except + for FRUs which are excepted in Requirement + . + + + + Clearing of the FRU Fault indicator from the Fault state must be + the result of part of the repair action and must be transparent to the + OS(s) and SFP (that is, the OS or SFP is not required to automatically + clear a FRU Fault indicator). + + + + The physical indicator which implements the FRU Fault indicator + must also be Identify indicator and follow the requirements for Identify + indicators. + + + + + + + R1--2. + + FRU indicators + (Fault and Identify) must be visible to the user during a service + action. + + Implementation Note: Requirement + may require, for example, that + the indicator be able to be lit after power is removed from the system, + requiring storage of power on the component with the indicator (for + example, via a capacitor) and activation of the indicators by a push + button by the user (see Requirement + for requirements on this + implementation). Another example would be via the use of a light pipe + from the indicator to a visible place. + + + + + R1--3. + + For Guiding Light Mode platforms: + If a FRU Fault + indicator exists, then it must be transparent to the OS, SFP, and HMC and + it must be independent of, and not physically combined into the same + indicator with, any indicator defined by this architecture, including the + setting of, resetting of, and displaying of the state of that indicator, + except that a FRU Identify indicator may be activated to the Fault state + (on solid) as a result of a FRU failure if all of the following are + true: + + + + The failure that is being indicated must be a failure which + prevents the user from activating the said FRU Identify indicator to the + Identify state. + + + + Clearing of the FRU Fault indicator must be the result of part + of the repair action and must be transparent to the OS, SFP, and + HMC. + + + + + Architecture Notes: + + + + + For Guiding Light Mode platforms, the only FRU-level indicators + that are allowed to be visible to an OS, SFP, or HMC are the FRU Identify + indicators. + + + + For Guiding Light Mode platforms, the only Fault indicator that + is allowed to be visible to an OS, SFP, or HMC is the Error Log + indicator. + + + + Examples of the exception of the use of FRU and enclosure + indicators in Requirement + as an indication of a fault + are: when the path for controlling an Enclosure Identify indicator or FRU + indicator in that enclosure is broken, or when the power supply in the + enclosure is broken and the indicator cannot be activated to the Identify + state. In these cases the FRU and/or enclosure indicators may be + activated (transparently) to the Fault state to indicate the failure, and + would be returned to the Normal state as a result of the repair action + that fixes the problem. + + + + + + + R1--4. + + All platforms + designs, except very low end servers, + + The term “very low end servers” is not explicitly + defined here, but is used to refer to implementations where FRU-level + indicators cannot reasonably be implemented (for example, due to size + constraints) or where the product can show explicit financial + justification for not implementing. + must include an Identify indicator for every FRU with the + states of “off” and “blink,” except for the + following classes of FRUs: + + + + If a device + driver has access to some standard form of Identify/Fault indicators for + the DASD devices it controls (for example, some standard form of + enclosure services), then the platform does not need to provide FRU + indicators for these devices. + + + + If a device + driver has access to some standard form of Identify/Fault indicators for + the removable media devices it controls (for example, some standard form + of enclosure services), then the platform does not need to provide FRU + indicators for these devices. + + + + External + enclosures other than PCI expansion enclosures, and external devices (for + example, keyboard, mice, tablets) that attach via cable to IOAs, do not + require FRU indicators. + + + + Cables that connect from IOAs to the devices defined in parts + , + , and + + of this requirement do not require FRU indicators. + + + + Internal cables, interposers, and other FRUs which do not + contain active components do not require FRU indicators. + + + + + Implementation Note: Even though an item falls into + the list of possible exceptions in Requirement + , the designer of such a + component should verify that leaving off the FRU Identify indicator from + their component will not prevent the systems in which that component is + used from meeting their serviceability requirements. + + + + + R1--5. + + All FRU-level + Identify indicators must implement the state diagram shown in + , except that the Fault state + is not required for Guiding Light Mode platforms. + + + + + R1--6. + + All platforms + must include an Identify indicator with the states of “off” + and “blink” for every connector that is to be involved in an + Identify operation. + + + + + R1--7. + + FRU-level and + connector-level indicators must be made visible to the OS(s) as follows, + and must be made transparent otherwise: + + + + For Lightpath Mode platforms: FRU Fault indicators + must be made visible to the OS for FRUs for which the OS image is + expected to detect errors for either the entire FRU or part of the + FRU. + + + + FRU Identify indicators must be made visible to the OS for FRUs + that are fully owned by the OS image. + + + + Connector Identify indicators must be made visible to the OS for + connectors that are fully owned by the OS image and for which a connector + Identify indicator exists. + + + + + Implementation Notes: + + + + + In Requirement , for FRU Fault indicators that + are shared, the FRU Fault indicator is virtualized, so that one partition + cannot view the setting by another partition, which would allow a covert + storage channel (see also + and + ). + + + + Ownership of a FRU or connector by the OS image is defined as + being the condition of the FRU or connector being under software control + by the OS, a device driver associated with the OS, or application + software running on the OS. + + + + + + + R1--8. + + An OS which activates a FRU Identify + indicator must provide a method of deactivating that indicator. + + + + + R1--9. + + (Requirement Number Reserved For + Compatibility) + + + + +
+ +
+ Enclosure-Level Indicator Requirements + See also requirements in + . + For the Lightpath UI, see also the requirements in + . + + + + R1--1. + + On the System Enclosure: + The platform must + implement an Error Log indicator and all of the following must be + true: + + + + The states of “off” and “on” must be + implemented and must be used for the Error Log function + + + + (Requirement Number Reserved For Compatibility) + + + + + This indicator must roll-up to the rack indicator, when the rack + indicator is implemented, and for blade implementations, to the Chassis + Error Log indicator. + + + + The indicator must implement the state diagram shown in + . + + + + The platform must provide a mechanism to allow the user to put + the Error Log indicator into the off state. + + + + + + + R1--2. + + Except for enclosures that contain only + FRUs that are exempted from FRU-level indicators as specified by + Requirement + parts + , + , and + , and which also do not have + any Connector Identify indicators, the platform must implement an + Enclosure Identify indicator on all enclosures, and all the following + must be true: + + + + The states of “off,” “blink,” and + “on” must be implemented and must be used for the Identify + function. + + + + This indicator must roll-up to the rack indicator, when the rack + indicator is implemented, and for blade implementations, to the Chassis + Enclosure Identify indicator. + + + + The indicator must implement the state diagrams shown in + and + . + + + + + + + R1--3. + + For Lightpath Mode Platforms: All the following must + be true for the Enclosure Fault indicator: + + + + The platform must implement an Enclosure Fault indicator on each + enclosure in which there exists at least one FRU Fault indicator. + + + + These indicators must implement the states of “off,” + “on,” and “blip”. + + + + These indicators must implement the state diagram as shown in + . + + + + These indicators must not be visible to any OS image. + + + + The platform must + provide a mechanism to allow the user to put each Enclosure Fault + indicator into the blip state. + + + + This indicator must roll-up to the rack indicator, when the rack + indicator is implemented, and for blade implementations, to the Chassis + Enclosure Fault indicator. + + + + + + Implementation Note: One way of achieving Requirement + is to provide a pushbutton (for + example, on the secondary indicator panel). + + + + + R1--4. + + (Requirement Number Reserved For Compatibility) + + + + + R1--5. + + (Requirement Number Reserved For Compatibility) + + + + + R1--6. + + Enclosure-level + indicators must be made visible to the OS(s) as follows, and must be made + transparent otherwise: + + + + Enclosure + Identify indicators must be made visible to the OS when the OS fully owns + a FRU in the enclosure. + + + + The Error Log indicator must be made visible to each OS image. + + + + + Implementation Notes: + + + + + In Requirement + , for indicators that are + shared, the indicator is virtualized, so that one partition cannot view + the setting by another partition, which would allow a covert storage + channel (see also + and + ). + + + + Ownership of a FRU by the OS image is defined as being the + condition of the FRU being under software control by the OS, a device + driver associated with the OS, or application software running on the + OS. + + + + + + + R1--7. + + An OS which + activates an Error Log indicator must provide a method of deactivating + that indicator, when such an activation is not be deactivated + automatically as part of the service action. + + + Implementation Note: Relative to Requirement + , it is recommended that an OS + that activates an Error Log indicator, provide a way to deactivate that + indicator, regardless of whether that indicator would be reset as part of + a service action. + + + + + R1--8. + + An OS which activates an Enclosure + Identify indicator must provide a method of deactivating that + indicator. + + + + + R1--9. + + (Requirement Number Reserved For Compatibility) + + + + + R1--10. + + For Guiding Light Mode Platforms: If a FRU Fault + indicator exists, then it must not roll-up to the Enclosure Identify or + Error Log indicator, and if there is such a requirement to roll-up such + an indicator, then the enclosure must implement an Enclosure Fault + indicator, with the same requirements as the Enclosure Fault indicator + for Lightpath Mode platforms. + + + + +
+ +
+ + Rack-Level Indicator Requirements + + See also requirements in + . + + + + R1--1. + + If a platform implements a rack-level + indicator then all of the following must be true: + + + + The rack indicator must be transparent to the OS, SFP, and + HMC. + + + + The rack indicator must be Highly visible + + As defined by our usability groups + (distance and viewing angle) with covers in place. + + + + For Lightpath Mode: The rack tower indicator must + implement the state diagram indicated in + , + , and + . + + + + For the Guiding Light Mode: The rack tower indicator + must implement the state diagram indicated in + , + , and if the optional Enclosure + Fault indicators are implemented, then + . + + + + + + +
+ +
+ Row-Level Indicator Requirements + + + + R1--1. + + If a system implements a row-level + indicator to roll-up a row of rack-level indicators, then the following + must be true for these indicators: + + + + The indicator must be transparent to the OS, SFP, and + HMC. + + + + For Lightpath Mode: This indicator must implement the + state diagram indicated in + , + , and + . + + + + For the Guiding Light Mode: This indicator must + implement the state diagram indicated in + , + , and if the optional Enclosure + Fault indicators are implemented, then + . + + + + + + +
+ +
+ Shared Indicator (Multiple Partition System) + Requirements + To avoid covert storage channels (see + ), virtual indicators are + required for physical indicators which are shared between OS + images. + + + + R1--1. + + If a physical + indicator (Fault or Identify) is shared between more than one partition, + all the following must be true: + + + + Except where there is explicit trust between the partitions, the + platform must provide a separate virtual indicator to each non-trusted + partition for each shared physical indicator and must control the + physical indicator appropriately, as indicated in the state diagrams in + . + + + + If software in a partition senses the state of the virtual + indicator, it must take into consideration that it is seeing the virtual + state and not the real state of the indicator, with the virtual state + being what the partition set the indicator to, and this is not + necessarily what the physical indicator is actually displaying. + + + + The SFP must be given access (sense and set) to the physical FRU + level indicators, and the platform must clear all the corresponding + virtual indicators when physical indicator is cleared by the SFP. + + + + The SFP must be given access (sense and set) to the physical + Error Log indicator, and the platform must not clear the corresponding + virtual indicators when physical indicator is cleared by the SFP. + + + + + Architecture Note: + + + + + In Requirement + , an example of “explicit + trust” is where the sharing partitions are the SFP and one other + partition, where the SFP is running in an OS where all the applications + and drivers can be trusted to not open a covert channel to the other OS + or application in that other partition. + + + + In Requirement + , it may be possible for the + SFP to get direct access to the virtual indicators, but such access is + beyond the scope of this architecture. + + + + + + +
+ +
+ Additional Indicator Requirements + + + + R1--1. + + A user interface which presents to a + user the state of the Identify indicators or which allows the user to set + the state of the Identify indicators, must be prepared for an indicator + to disappear from the list of indicators available to the OS image (for + example, a “no such indicator” response to a set request), + and must provide the user with an appropriate message and recovery (for + example, prompt the user whether they want to refresh the list of + available indicators). + + + + + R1--2. + + The color of indicators must be as follows: + + + + FRU Identify, FRU Fault, Enclosure Fault, Error Log indicators, + and any roll-up indicators for Error Log (rack-level, blade system + chassis-level, and row-level) must be amber. + + + + The Enclosure Identify indicators and any roll-up indicators for + these indicators (rack-level, blade system chassis-level, and row-level) + must be blue. + + + + + + + R1--3. + + The blink rate of + all Identify indicators which blink, must be nominally 2 Hz (minimum 1 + Hz) with a nominal 50% duty cycle. + + Implementation Note: The 1 Hz rate should not be used + unless absolutely necessary. The 1 Hz rate is put in to be consistent + with the industry standard SHPC specification, which specifies 2 Hz with + 1 Hz minimum. + + + + + R1--4. + + The + “blip” rate for the Enclosure Fault indicators when in the + “remind” state must be nominally 0.5 Hz with a duty cycle of + 0.2 seconds on, 1.8 seconds off. + + + + + R1--5. + + All indicator roll-up (activate and + deactivate) must be controlled entirely by the platform and must be + transparent to the OS, SFP, and HMC. + + + + + R1--6. + + Duplicate indicators that are + implemented to reflect the same state as another indicator in the system + (for example, an indicator on the back of an enclosure that is to reflect + the same visible state as the enclosure indicator on the front of the + enclosure) must be transparent to the OS and must be kept synchronized by + the platform. + + + + + R1--7. + + The platform must + provide a way to light all the indicators (Identify, Fault, Error Log, + etc.) without any OS present, for test purposes (manufacturing, field + service, etc.). + + + + + R1--8. + + The hardware must provide the firmware a + way to read the state of the indicators (that is, the register which + controls the visual state, not the actual visual state) as well as to set + the state of the indicators. + + + + + R1--9. + + The platform must + be designed such that permanently removing a FRU does not remove the + capability to use the Identify indicator(s) remaining in the platform or + affect any roll-up. + + + + + R1--10. + + In reference to + Requirement , if a capacitor and pushbutton + are used to be able to activate the indicator after removal of the part, + then all the following must be true: + + + + For Lightpath Mode platforms: Both + the Identify and + the Fault states must be supported, and the indicator must activate when + the push button is depressed and must go off (with the remaining + capacitor charge maintained) when the pushbutton is released (Identify + state is displayed as “blink” and Fault state as + “on”). + + + + For Guiding Light Mode platforms: + The Identify state + must be supported, and the indicator must activate (“blink”) + when the push button is depressed and must go off (with the remaining + capacitor charge maintained) when the pushbutton is released. + + + + There must be a + green indicator next to the pushbutton and the indicator must get turned + on when the button is pressed and when there is charge in the capacitor, + and must be off when the button is not pressed. + + + + The capacitor must have the capability to store enough charge + for two hours and after that period must be able to light for 30 seconds + the green indicator and enough other indicators to be able to identify + any necessary group of FRUs (for example, four additional indicators if a + group of four DIMM locations is to be identified simultaneously). + + + + + Implementation Note: As part of Requirement + , it is not necessary to + roll-up any activated indicators to the next level when the button is + pressed. + + + + + R1--11. + + All indicators which are under standby + power must work the way they do when full power is applied to the system, + including all of the following: + + + + The indicators must continue to display the last state displayed + when the system power went to standby-only power, unless the state is + changed during the standby state by the user or by a service + action. + + + + The changing of the state to the Identify state and then back to + the previous state by the user must be supported, when that functionality + is supported during full system power. + + + + + Implementation Note: Internal to the platform + firmware, it will most likely be required to have a common control point + for all service indicators in order to meet the requirements and meet the + necessary state information + + + + + R1--12. + + Any secondary (intermediate) level + roll-up indicator (see + ) must behave as + follows: + + + + Be blinking, if any Identify indicator that it represents is + blinking + + + + Be on solid if any Fault indicator that it represents is on and + no Identify indicator that it represents is blinking + + + + Be off if all indicators that it represents are off + + + + + + + R1--13. + + The icons used for the following indicators, and any + roll-up of the same, must be as follows (see the usability specifications + for size, color, and placement): + + + + For the Error Log indicator: + + + + + + + + + + + + + + For the Enclosure Fault indicator: + + + + + + + + + + + + + + For the Enclosure Identify indicator: + + + + + + + + + + + + + + + + +
+ +
+ Blade Systems Chassis-level Indicator + Requirements + The following describes the chassis-level Error Log and Enclosure + Identify indicator requirements for blade chassis implementations. These + are basically the same as for the rack and row level indicators, except + that the Enclosure Identify indicators are required to be able to be + turned on/off by a user interface, unlike the rack and row level + indicators. + For the Lightpath UI, see also the requirements in + . + + + + R1--1. + + The blade chassis + must implement an amber Error Log indicator, with the state diagram + indicated in + . + + + + + R1--2. + + The blade chassis + must implement an amber Enclosure Fault indicator, with the state diagram + indicated in + . + + + + + R1--3. + + The blade chassis + must implement an blue Enclosure Identify indicator, with the state + diagram indicated in + . + + + + +
+ +
+ Service Indicator State Diagrams + The following state diagrams show the transitions and states for + the service indicators in the system. + + Implementation Note: Activation of an + indicator by a + roll-up operation from a lower level indicator will prevent a user from + turning off such an indicator from a user interface without turning off + the lower level indicator. It is recommended, if possible, that in the + user interface that allows the user to attempt to deactivate an + indicator, provide to the user a message that the indicator cannot be + deactivated, if attempted, when a roll-up to that indicator is active. + That is, something better than just silently not turning off the + indicator. Alternatively, the user can be shown that the option of + turning off such an indicator is not possible, when a roll-up to that + indicator is active (for example, by graying out the option on the user + interface). + +
+ FRU or Connector Fault/Identify + Indicator State Diagram + + + + + + + + +
+ + Notes: + + + Not being available means the failure that is being + indicated must be a failure which prevents the user from + activating the Identify for the FRU. + + + + Transition to Fault state may occur if a failure + occurs which would prevent the activation of the indicator + into one of the Identify states. Not all FRU Fault indicators + in an enclosure get activated like this simultaneously; + only those that are directly involved with the fault + (for example, like the FRU Fault indicator associated with + the indicator controller hardware) + + + + OS is not expected to change an + indicator from Fault to Normal, but is permitted to do so + (providing that it has access to the indicator because it + owns the resource). + + + + Transition from Fault to the Identify + or Normal states by the OS may not be possible if a hardware + fault causes a failure which prevents access to the + indicator. + + + + Format on the above diagram of “xxxx,y” means a + call to the set-indicator or + ibm,set-dynamic-indicator + RTAS call with an indicator token of “xxxx” and a state + value of “y” (only the token applicable for the specific + indicator causes a state transition). + + + + The 9002 Identify and Action are the same state. + + + + 9006 FRU-level indicators only + provided in Lightpath Mode platforms. + + + + Fault indicators may be virtualized, + with several OS images and firmware given access to a virtual + FRU Fault indicator which controls the same physical + Fault/Identify indicator. These get combined as shown in the state + diagram, above; all virtual Fault indicators basically get + ORed together. + + + + This indicator may be forced to the Normal (off) + state under certain circumstances (for example, see Requirement + ). + + + + For the Lightpath UI, when implemented, + other transition conditions are possible. See + + for requirements. + + + + +
+ Error Log + Indicator State Diagram + + + + + + + + +
+ + Notes: + + + Format on the above diagram of “xxxx,y” means + a call to the set-indicator or + ibm,set-dynamic-indicator + RTAS call with an indicator token of “xxxx” and a state + value of “y” (only the token applicable for the + specific indicator causes a state transition). + + + + This indicator may be forced to the Normal + (off) state under certain circumstances (for example, see + Requirement + ). + + + + See Requirement + . + + + + For the Lightpath UI, when implemented, other transition conditions + are possible. See + + for requirements. + + + + +
+ Enclosure + Identify Indicator State Diagram for Scalable Systems + + + + + + + + +
+ + Notes: + + + This indicator may be forced to the Normal (off) + state under certain circumstances (for example, see Requirement + ). + This indicator is off at the end of POST. + + + + The states in this diagram overlay the corresponding + states in + . + This figure represents the POST states and + + the after-POST states. + + + + The use of the Optional Identify state to indicate boot + identify is only to be used for boot servers + for scalable system nodes or blades of a blade system + (for example, NUMA system nodes), and not for stand-alone + systems or blades + + + + +
+ Enclosure + Identify Indicator State Diagram + + + + + + + + +
+ + Notes: + + + This indicator may be activated to the on state + by any OS which is given access to the indicator per Requirements. + For indicators that are shared by multiple OS instances, this indicator + is virtualized (see + + and + ). + LoPAR compliant OSs are only given the capability to activate the + Enclosure ID to the on state, not to the blink state. The blink state + may be activated through an external platform management interface by + a user request through that interface to blink the physical Enclosure ID. + + + + This indicator may be forced to the off state under + certain circumstances (for example, see Requirement + ). + This indicator is off at the end of POST. + + + + A user is not allowed to deactivate the Enclosure ID if + there are still FRU IDs still active. + + + + A user request through a privileged user interface (for example, + via an SFP) to set the physical Enclosure ID to off, + forces any virtual Enclosure ID indicators that are active (on or + blink) to their off state, but this does not override + any FRU ID roll-ups (see Note + ). + + + + For Scalable (NUMA) systems, the states in this diagram + overlay the corresponding states in + . + This figure represents the after-POST states and + . + the POST states. + + + + A virtual Enclosure ID can be activated or turned off by the + 9007 indicator token for the target Enclosure ID. + + + + +
+ Enclosure Fault + Indicator State Diagram + + + + + + + + +
+ + Notes: + + + There is no direct activation or deactivation of + this indicator by any OS. + + + + See Requirement + + and the Implementation Note below that requirement. + + + + This indicator may be forced to the Normal (off) + state under certain circumstances (for example, see Requirement + ). + + + + Activation of an Enclosure Fault indicator without + activating a FRU Fault indicator within the + enclosure is to be used only in exceptional cases where + the FRU Fault cannot be activated. In + such cases the system is required to also provide + further direction to the user on how to resolve + the fault (for example, by providing an error code on an + op panel on the system). + + + + +
+ For Blade Systems: + Chassis-level Error Log Indicator State Diagram + + + + + + + + +
+ +
+ For Blade Systems: + Chassis-level Fault Indicator State Diagram + + + + + + + + +
+ +
+ For Blade Systems: + Chassis-level Enclosure Identify Indicator State Diagram + + + + + + + + +
+ + Notes: + + + This indicator may be forced to the Normal (off) state + under certain circumstances (for example, see Requirement + ). + + + + A user is not allowed to deactivate the chassis Enclosure + ID if there are still FRU Identify or Blade Enclosure + Identify indicators still active (see state transition qualifiers + in the above diagram). + + + + A user request to set the Chassis Enclosure ID to the + Identify (blink) state temporarily overrides roll-up + operations (roll-up operations set the indicator to the on state). + + + + A user request to change state of the Chassis Enclosure + ID cancels any previous user request against the + same indicator, replacing the user requested state with the new state. + + + + +
+ Rack-level Error + Log Indicator State Diagram + + + + + + + + +
+ +
+ Rack-level Fault + State Indicator Diagram + + + + + + + + +
+ +
+ Rack-level + Enclosure Identify Indicator State Diagram + + + + + + + + +
+ +
+ Row-level Error + Log State Diagram + + + + + + + + +
+ +
+ Row-level Fault + State Diagram + + + + + + + + +
+ +
+ Row-level + Identify State Diagram + + + + + + + + +
+ + Notes: A blinking Enclosure ID + is assumed to be “active” for purposes of the Row Enclosure ID indicator + state. +
+ +
+ +
+ Requirements for 9002, 9006, and 9007 Indicators + See + for service indicator + requirements that are not 9006 and 9007 specific. + + + + R1--1. + + When the platform + presents a 9006 indicator to an OS, the following must be true: + + + + The platform must set the location code of the Error Log (9006) + indicator and sensor to be the location code of the system and this + indicator or sensor must be the first one in the list of 9006 indicators + or sensors. + + + + For Lightpath Mode platforms: + The platform must set + the location code of each FRU Fault indicator and sensor to be the + location code of the component to which that indicator or sensor is + associated. + + + + For every 9006 indicator, there must be a corresponding 9006 + sensor which has the same index as the corresponding indicator. + + + + + + + R1--2. + + When 9007 + indicators are to be provided to an OS, the platform must implement the + ibm,get-indices RTAS call and must present that call + in the device tree for the OS, and the OS needing access to the 9007 + indicators and sensors must use the + ibm,get-indices call to get the indices of the 9007 + indicators and sensors available to the partition at the time of the + call. + + Software Implementation Notes: + + + + + Relative to Requirement + , due to Dynamic + Reconfiguration, the indicators available at any point in time might be + different than on a previous call to + ibm,get-indices. + + + + 9007 indicators may need to be provided to the OS in the order + in which they are best displayed to the user, because the OS or the UI + may not reorder them (for example, sort them) before presenting them to + the user. This is true regardless of the method of presentation to the OS + (OF device tree or + ibm,get-indices RTAS call). Relative to presentation + order, see also Requirement + + + + + + + + R1--3. + + If a platform + provides any 9007 indicators to the OS, then the following must be + true: + + + + The platform must set the location code of each Identify (9007) + indicator and sensor (Enclosure, FRU, or connector) to be the location + code of the enclosure, FRU, or connector to which that indicator is + associated. + + + + The System + Enclosure Identify (9007) indicator must be the first indicator in the + list of 9007 indicators. + + + + For every 9007 indicator, there must be a corresponding 9007 + sensor which has the same index as the corresponding indicator. + + + + + + + R1--4. + + A DR indicator (9002) must only be + provided to an OS if that particular OS image owns that resource and is + going to control the physical add, remove, and replace operations on the + FRU which is pointed to by that particular DR indicator. + + + + + R1--5. + + If a PCI Hot Plug slot implements a single + physical amber indicator for use as both the PCI Hot Plug DR indicator + (for concurrent maintenance) and as the FRU Identify indicator, then that + indicator must be presented to a LoPAR compliant OS as both a 9002 and + 9007 indicator. + + + + + R1--6. + + All platforms must provide the + “ibm,fault-behavior” and + “ibm,fru-9006-deactivate” properties in + the + root node of the OF device tree, both with a value of + 1. + + + + +
+ +
+ + Lightpath User Interface (UI) Requirements + The base Lightpath architecture does not provide a User Interface + (UI), per se, when one considers a UI as being an interactive entity; + that is, where the user can input requests as well as just see the + faults. When enabling the Identify indicators of the Lightpath mode, a UI + is necessary. This architecture will call this the Lightpath UI. The + Lightpath UI is an interface between the Service Focal Point (SFP) and + the user of the SFP, and at a minimum, provides an interface to show + hidden Fault indicators (for example, see + ). A slightly more + sophisticated Lightpath UI -- one with a General UI (GUI) such as an LCD + or general display like provided by IBM Director -- is required to + provide access to the Identify indicators. + Enablement of the Identify portion of Lightpath is important in + larger systems for reasons of deferred maintenance and guided + maintenance. In a system with deferred maintenance and Lightpath, many + Fault indicators may remain lit, requiring directed repair via an + Identify operation in order to see the component against which to do a + particular repair action. In addition, guided maintenance may be required + even if there is no failing component, to indicate to the user where to + plug or un-plug components or cables. + When a Lightpath UI is available, the platform does not display + logical Fault or Error Log on the physical indicators until a user + requests such a display of the indicators, with the exception that the + highest level roll-up indicators will be lit as a flag for the user to + use the Lightpath UI to identify the problem. The request to display + Fault and Error Log indicators may be made, for example, by pressing a + button or series of buttons, or by checking a check-box on a more + sophisticated Lightpath UI. The button(s) may be physical or may be on a + device like an LCD panel or other Service Focal Point (SFP) display, like + an IBM Director display. + + defines an SFP as: + “…common point of control in the system for handling all + service actions which are not resolved otherwise (for example, via Fault + indicators).” SFPs may or may not exist lower end systems, and may + exhibit different levels of sophistication in larger systems. The + following are some (not all) system implementation examples: + + + + For simple systems, there may be no SFP and no Lightpath UI, + which means everything needs to be resolved by Fault indicators. + + + + For simple systems implementing Triple-S (see + ), there may exist a simple SFP + with a simple Lightpath UI like one or more physical push-buttons. This + could be the System Error indicator with a physical button associated + with it, with the SFP being firmware underlying the button to communicate + with lower layers of firmware (for example, turn off FRU Fault indicators + as they are activated by the firmware, turn on all active FRU Faults + indicators on a button press). There may also be buttons for enabling the + lower layers of the Fault indicator hierarchy, and these buttons inform + the SFP firmware of the user’s request to display Fault indicators + on the physical indicators. In this case, the Lightpath UI is not + full-function and does not provide for enablement of the Identify + indicators. In this case, the firmware driving the Lightpath UI would use + the Lightpath UI base enablement (see + ). + + + + For intermediate systems, the Lightpath UI could be an LCD panel. + In this case, the firmware driving the Lightpath UI would use the + Lightpath UI base enablement (see + ). The Triple-S UI is also + possible (see + ). + + + + For larger systems, the Lightpath UI could be part of a more + sophisticated interface, like IBM Director. This more sophisticated + interface would use the Lightpath UI base enablement (see + ). The Triple-S UI is also + possible (see + ). + + + +
+ Lightpath UI Base Enablement Requirements + This section defines the base enablement requirements for all + Lightpath UI implementations. The Triple-S UI is one example of such a + Lightpath UI that uses the Lightpath UI Base Enablement. Other Lightpath + UIs are possible, and are not limited by this architecture. + + + + R1--1. + + For the Lightpath UI Base Enablement: + The platform must do all of the following: + + + + Implement Lightpath Mode, as defined by this architecture, + lighting FRU Fault indicators or Error Log indicator associated with a + fault. Lightpath Mode includes the implementation of Identify + indicators. + + + + If the SFP is + separate from the platform, then report to the SFP that the platform + implements the Lightpath UI Base Enablement (explicitly or implicitly). + (see implementation note, below) + + + + Whenever + possible, report all fault conditions which activate a FRU Fault + indicator or Error Log indicator, up to the SFP, with enough information + to allow determination by the SFP as to which FRU or Error Log indicators + are activated and the possible failing FRU(s). See the implementation + note, below, for the only exception cases allowed to this + requirement. + + + + Accept commands + from the Service Focal Point (SFP) to put each indicator (FRU, Enclosure, + etc.), into the Off, Fault and Identify states (that is, the SFP can + control each indicator), and not report an activation or deactivation + error to the SFP if the SFP requests putting the indicator into a state + to which the indicator is already activated. See the implementation note, + below, for the only exception cases allowed to this requirement. + + + + Prevent multiple + reports of same error, whenever possible. (see implementation note, + below) + + + + + Implementation Notes: + + + + + Requirement + allows a SFP to manage multiple + platforms that implement different Service Indicator modes. Note that + this requirement can be implemented implicitly from other information + reported to the SFP (for example, machine type/model). + + + + In Requirement + and + , acceptable reasons for not + being able to report errors to the SFP or have the SFP control the LEDs + may include: + + + + Loss of communications between the component and the SFP. + + + + A fault indicator that is entirely controlled by an OS, hardware, + or code, or an entity which is not in communications with the platform + firmware or the SFP. + + + + + + Requirement + prevents continual + “blinking” of Fault indicator and the flooding of the + SFP’s event or error log. + + + + + + + R1--2. + + For the Lightpath UI Base Enablement: + The Service Focal + Point (SFP) must exist and must do all of the following: + + + + Receive and log + fault conditions reported by the platform. (see implementation note, + below) + + + + Turn off each + Fault indicator or Error Log indicator associated with a fault condition, + as soon as possible after the fault is reported, except as required to + remain on by user request user request (for example, see Requirement + ). + + + + Accept direction from a user to show any faults on the Fault and + Error Log indicators (for example, see Requirement + ). + + + + If the SFP + contains a GUI (for example, an LCD display or a display like provided by + IBM Director), accept direction from a user to Identify a FRU or + connector for a service operation, and then turn off all activated FRU + Fault and Error Log indicators, unless otherwise directed by the user + (for example, by a check-box on the UI), and activate the FRU Identify + (blink), along with the normal FRU roll-up defined by the base Lightpath + Mode. + + + + + Implementation Notes: + + + + + Relative to Requirements + , a SFP may (but is not + required to) do additional failure analysis, or may apply policy rules, + on the failure(s) reported, and by doing so may change or re-prioritize + the list of failures, such that the most likely failure(s) is (are) + different than the fault indicator(s) that were initially turned on by + the detecting entity. In which case, when the user requests that the + indicators be reactivated, a different set may be activated than those + that were originally activated. + + + + In simpler systems, it is expected that there may only be one + push-button implemented, and that would be associated with the highest + level Fault roll-up indicator. For systems, or collection of systems that + are managed by a SFP, which consist of many enclosures, it may be useful + for an implementation to implement several levels of buttons. For + example, a SFP that manages multiple systems may (at least) implement one + button per system. + + + + + + +
+ +
+ + See/Select/Service (Triple-S) User Interface + Requirements + The Triple-S UI architecture is built on top of the Lightpath UI + Base Enablement architecture, which is in turn built on top of the + Lightpath architecture. The Triple-S architecture is basically defined as + follows (see Requirements for specifics): + + + + Do not display Fault or Error Log on the physical indicators + until user pushes a button or series of buttons. + + + + Except that the highest level roll-up for the Enclosure Fault + indicators and Error Log indicators will be activated if a lower level + one of the same type was activated. + + + + + + After seeing the highest level roll-up for Enclosure Fault or + Error Log being on, the user pushes one or more buttons (logical or + physical) associated with those, and then the user + Sees the Faults available for servicing. + + + + The user + Selects the item they want to service, by observing + the FRU Faults and selecting they want to then Service. + + + + The Selects part of Triple-S may also involve + activation of the FRU Identify indicator from the Lightpath UI. + + + + + + The user completes the Service action on that component which was + selected. + + + + + + + R1--1. + + For the Triple-S UI: The Lightpath UI Base Enablement + requirements must be met, as defined in + . + + + + + R1--2. + + For the Triple-S UI: The platform must provide one or + more push-buttons (physical button, or logical on a GUI), each associated + with a set of Fault indicators or Error Log indicators which is (are) to + be used by the user to display (“show”) or not display + (“hide”) fault conditions on those group of indicators, as + defined by Requirement + . + + + + + R1--3. + + For the Triple-S UI: + The Service Focal + Point (SFP) must accept direction from a user from a push-button + (physical or logical) press to show any fault conditions on, or hide all + fault conditions from, the physical indicators (FRU Faults and any + associated roll-up indicators for those indicators), which are associated + with the push-button (Fault or Error Log indicators). The fault + conditions must represent any open problems known by the SFP related to + the set of indicators associated with the push-button. The push of the + button must be a toggle operation, with each press either going from the + show state to the hide state or from the hide state to the show state, + based on the state prior to the push-button press. The platform must turn + off any indicators turned on by these push-button activations after a + pre-set period of time after the button activation, unless the pre-set + time is set to 0, in which case the indicators are left on until the + button is press again or until the platform determines they are no longer + needed to be on. (see implementation note, below). + + + + + R1--4. + + For the Triple-S UI: For more complex systems, and as + determined by the RAS requirements for those systems, the SFP must + implement a GUI (for example, an LCD or IBM Director display) and provide + the capability to activate the Identify indicators, as defined in + Requirement . + + + Implementation Notes: + + + + + Relative to Requirement + , a SFP may (but is not + required to) do additional failure analysis, or may apply policy rules, + on the failure(s) reported, and by doing so may change or re-prioritize + the list of failures, such that the most likely failure(s) is (are) + different than the fault indicator(s) that were initially turned on by + the detecting entity. In which case, when the user requests that the + indicators be reactivated, a different set may be activated than those + that were originally activated. + + + + Relative to Requirement + , the set of indicators + associated with a given push-button will normally be hierarchical, based + on the FRU Fault or Error Log roll-up path. For example, if a push-button + is associated with the Chassis Enclosure fault indictor, pressing that + button would toggle the show/hide state for all fault indicators within + that Chassis. Another example is pressing of a button associated with the + System Error roll-up indicator for a system, putting that system into the + “show” state could put that system basically into a Lightpath + (without Triple-S) mode, or “Lightpath Classic” mode. In this + latter example, it is not quite like previous implementations of + Lightpath because (1) service procedures may be different, (2) based on + Implementation note (a) the set of FRU Faults activated by the SFP may be + different than those activated by the entity detecting the error + originally, and (3) the Identify function can be used. + + + + + + +
+
+ +
+ +
+ Green Indicator Requirements + This chapter defines the platform requirements for green + indicators. + The usage of green indicators has been separated from the rest of + this chapter, because even though green indicators are used in some service + procedures (for example, to check for presence or absence of power on a + component or system), they are not to be used in lieu of amber FRU Fault + and Identify indicators. That is, they should supplement, not replace, the + amber indicators. + There are several exceptions to having all the green indicator + requirements in this chapter: + + + + The green indicator associated with a capacitor and pushbutton + implementation is specified in Requirement .). + + + + The capability to light all green indicators, as well as the amber + and blue indicators, for test purposes, is specified in Requirement + . + + + + Unless indicated otherwise in this chapter, the blink rate for + green indicators, when they blink, is specified in Requirement + . + + + + +
+ Green Indicator Uses and General Requirements + Green indicators generally are not used for indicating a fault + condition. + + + + R1--1. + + A green indicator must not be used in + place of an amber Fault/Identify indicator, except when use of amber + Fault/Identify indicator is not possible, and in this exceptional case, + the green must be off or blinking to indicate the error condition. + + Implementation Note: Examples where a + green indicator + might be used instead of an amber Fault/Identify indicator are: + + + + In a power supply to indicate lack of AC power (green + off). + + + + In the case where there is insufficient power to power the + component (green blinking). + + + + + + + R1--2. + + There must exist a green power indicator + for every FRU that is to participate in concurrent maintenance + (“hot plug” operation), unless that FRU does not require the + removal of power to remove or insert that FRU. + + + + +
+ +
+ Green Indicator States + This section attempts to capture the state requirements for all + usages of green indicators. If a state or usage is not specified, then + the user needs to get with the Architecture team for this architecture in + order to add or replace any state or usage of that state. + +
+ Power Supply Green Indicators + + + + R1--1. + + For power supply indicators, the + platform must implement the states defined in + for each green indicator, and + must use those states only for the usages stated in + . +   + + Power Supply Green Indicator States and Usage + + + + + + + + + + Green Indicator State + + + + + Usage + + + + + + + + Any not already covered in this table + + + Consult with the xipSIA architecture team for the proper + usage/behavior. + + + + + Off + + + For the input power indicator: no input power. + For the output power indicator: no output power. + + + + + On + + + For the input power indicator: input power good. + For the output power indicator: output power good. + + + + + Slow blink (1 Hz, 50% duty cycle) + + + Power supply (or supplies) are in the standby state. A + power supply must not blink its green output power indicator + unless that particular supply is in the standby state. + + + + +
+
+
+
+ +
+ +
+ System Power Green Indicators + + + + R1--1. + + For system power indicators, the + platform must implement the states defined in + for each green indicator, and + must use those states only for the usages stated in + . +   + + System Power Green Indicator States and Usage + + + + + + + + + + Green Indicator State + + + + + Usage + + + + + + + + Any not already covered in this table + + + Consult with the xipSIA architecture team for the proper + usage/behavior. + + + + + Off + + + System is off (no standby power). + + + + + On + + + System is on (operational state). + + + + + Fast blink (4 Hz, 50% duty cycle) + + + A determination is being made as to whether the system + (for example, a Blade in a Blade System) has enough power + available to it, in order to power up, or a determination has + already been made that there is not enough power, and the + indicator remains in this state. + + + + + Slow blink (1 Hz, 50% duty cycle) + + + System is in the standby power state. + + + + + Fade-in/fade-out cycling of the power LED as done in + various PC and notebook manufacturers: + the period of this fade-in/fade-out cycle is 2 seconds, + gradually ranging from fully on to fully off + + + Systems that support system-level sleep states (such as + the S3 sleep state) must use this state as a way to indicate + the system is sleeping but still powered on. + + + + +
+
+
+
+ +
+ +
+ HDD Green Indicators + + + + R1--1. + + For Hard Disk Drives (HDD) the platform + must implement the states defined in + for each green indicator, and + must use those states only for the usages stated in + . +   + + HDD Green Indicator States and Usage + + + + + + + + + + Green Indicator State + + + + + Usage + + + + + + + + Any not already covered in this table + + + Consult with the xipSIA architecture team for the proper + usage/behavior. + + + + + Off + + + Platform specific. + + + + + On + + + Platform specific. + + + + + Flickering (randomly blinking) + + + HDD activity (HDD is powered on and is being + used). + + + + +
+
+
+
+ +
+ +
+ Other Component/FRU Green Indicators + This section attempts to capture the state requirements for usages + of green indicators that are not specifically called out as special cases + elsewhere in + . To reiterate what was + specified, above: if a state or usage is not specified, then the user + needs to get with the Architecture team for this architecture in order to + add or replace any state or usage of that state. + + + + R1--1. + + For FRUs or components other than + specific ones specified elsewhere in + , which require power + indicators, the platform must implement the states defined in + for each green indicator, and + must use those states only for the usages stated in + . +   + + Sub-Unit (Component) Green Indicator States and + Usage + + + + + + + + + + Green Indicator State + + + + + Usage + + + + + + + + Any not already covered in this table + + + Consult with the xipSIA architecture team for the proper + usage/behavior. + + + + + Off + + + Component/FRU is powered off and/or is not in + operation. + + + + + On + + + Component/FRU is powered on. + + + + + Blink 1 Hz, 50% duty cycle + + + (Optional) Component/FRU is in transition to the off + state. Note that although this is an optional state, it is + highly recommended (for Human Factors reasons) for cases where + it takes awhile to power off the component (for example, for + hardware like a Blade in a Blade System that has to be quiesced + before powering off). + + + + +
+
+
+
+ +
+ +
+ Communication Link Green Indicators + + + + R1--1. + + For communication links, the platform + must implement the states defined in + for each green indicator, and + must use those states only for the usages stated in + . +   + + Communication Link Green Indicator States and + Usage + + + + + + + + + + Green Indicator State + + + + + Usage + + + + + + + + Any not already covered in this table + + + Consult with the xipSIA architecture team for the proper + usage/behavior. + + + + + Off + + + No link connection or link connected but no + activity. + + + + + Flickering (randomly blinking) + + + Communication link activity. + + + + +
+
+
+
+ +
+ +
+ +
+
diff --git a/Error Handling/figures/PAPR-34.gif b/Error Handling/figures/PAPR-34.gif new file mode 100644 index 0000000000000000000000000000000000000000..737a47d0f6314c8479b55558a63038419d69fd1a GIT binary patch literal 51484 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 R_u0>X26UhWP2+$706W;qq@n-- literal 0 HcmV?d00001 diff --git a/Error Handling/figures/PAPR-36.gif b/Error Handling/figures/PAPR-36.gif new file mode 100644 index 0000000000000000000000000000000000000000..9242a7f6c8ef60e0c5c039a8cbce76cad36f3589 GIT binary patch literal 47609 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 literal 0 HcmV?d00001 diff --git a/Error Handling/figures/PAPR-37.gif b/Error Handling/figures/PAPR-37.gif new file mode 100644 index 0000000000000000000000000000000000000000..b0e249d3a56566c32ae18918210a790cffe910ed GIT binary patch literal 37294 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 aZ~`mv0yA&}JMaTTa0E;61V?Z{0029HaT=lk literal 0 HcmV?d00001 diff --git a/Error Handling/figures/PAPR-38.gif b/Error Handling/figures/PAPR-38.gif new file mode 100644 index 0000000000000000000000000000000000000000..39af86f96c6ba86f1f40f9f383bb7bfdef783c47 GIT binary patch literal 1140 zcmaKre@v8h9LL}JE1kb0R$f;(;4F^>LigmvliV#X4rvbuCS3@#%hfZ+)N$F3a9w$|tK zdA(kb$K!A~5*!I|KnDb1nCF;fv(f3K&&Obp;V`373L(WI_Zj#TQIU-LbhK|o?-mSa zV@d`K!QFNqa8pxwCdBU|921fqx$EI~p~8#$ooL^S-YN{&Vd^Lt0lV$&b5kgcg*X}E zw2<JSZtac{yroplRsp!lg^NaRc}6nRI5oNNywdlP5@Fm#{t;E@U55}b4AYB^bdo+YNQTL% zX~*RIuL07AH^p*c0Snn6W4g zK?#x!S%IQL)u8Fn1%v_f;{OKtcU@}~NGe4;0{u_@ielF+C@xJQC@oP&4&$M2yePVTPbI#ee{=*ij?5Dv3fAx}O zj+dw2I@@>gRw&Ib; z7y#Rq>JX}f(yzWns==EjLTjq^9u8q0RH zRi9jxzS&Y~Svz^<%X?p?K78=*uQlfaO&417ku`q4dTB!5`LF+&96XZp_V<||O&eXS zT^>v8pC25^DB9xB87=n@^z?39+0yBsDyx|&c)j^^RP7&G8UJC^qgxLyM;<@^>|djq zC^8Ng9JFMYF3&H1uj-rN&+1c2-yYxI{z7Ri@GvQ-Z6vzLLj%L!mxEEw;Q(VT3v&yLVL$}OHK19=MFDY)4mD-Z7;~L6r70ohS zyWLe>LU9RPTI5dpVwEY8?n>_>!+hA{sEU0?r?6&&xzc7_g@VGsxqc}B-R$$&!{K~7 zoQL1lbMy-;c_s=>uTzvsaLRBi*rP(yQE$R8AX{i7B6OXhH^tB>qtnzD zX{=B{0uBM4zEb0XCqtZxazSI> zpd~0lk|8TlRH!<16Q+Q$V1NAI0RN7wQh}txr$aVzSU|DRLz}^sr1ug-lZ?(#TcD8# z@Y2I=c5X$Dol(3AIF?Z2*tLJ^YOde$Ty^`x)W{Fz>dVc)Wap4o?VDC4P bFAoGKpU?JH&!u*GZe5nM)1B8!O7P}C0Q%mK literal 0 HcmV?d00001 diff --git a/Error Handling/figures/PAPR-40.gif b/Error Handling/figures/PAPR-40.gif new file mode 100644 index 0000000000000000000000000000000000000000..e38139be26172f98701f043ea73ae20e9da990f0 GIT binary patch literal 1131 zcmaKre@v8h9LL{nqLyw#P^Xuu9ZoD{;hyE?WdeDETs|F$y-Fkh#`~3CUzI(sE z-%oB{&NI7Tvtuuo0g}th%S%g3(P%Ur4aXP@hr*#4W1$}m#$sjAI@Ws8;QYk~gY&U6 z@OV7VTxX^=(`vP*rly)qCZqx;(C1?yKp~_AI5wbU3q0H5eF_~`4D7{Z4(4UB5G=K@ z%1%vTPc6Uob4o}SICi2W3mzxDN6=A*fzz0*$9xm$2YW3H+9?!WIHJ=5_UR}RRX66N4zNO!07?hPoilaexjF_ zAnk%mh_!R{FH$5(Fw3wgNK+wc*rUTPAV*M0oM3V#Z4E4Hr@N272?nMpAOZQnNuUns z1V({b!!pb?OO#~F3Kf;AMop(KV)F@*%}^{*)1XPv_dwVYiP=f!2^%Ym*x+Wnk9`47 z2u|UD1zFf@XHcQ2WysGt!9^H?WEqMARgKxvbqIk-#PE_#+Q=f(P5Q`yVaM=gmash^ z)|1#@heMrseH0b5P-(8Gq*4BYica+!H9`FsiU<)4TnKmo4Hy8XjI<^b)6;3Uv$&WQ z6|AjgYb$$ujqgA+q-~HTC|OWtXosOI5T_7PL2oi!Z0ssxznkMeh60QTN|0p83KSKp z22F=9AR;g>{_g<)KG!w{l8P)1vW~+7N(859WJvbX*21DLy8G!HXCMUN@jq7>y#PCm zj@V9M_1}14^~M7|ZNci*iBG!5doGQfk56$lAGrG2=!F%0Q~ZdOZ&sS0cC5|wbyS^A za=hB67VP`ZmvVGs?MKqD;`jdBG8mew#>2%U7Gs?;bH*Ii?#}{;FHy>n0)~87+ z*Xy&p3UMh5; z9r;6-!d+_;JGTDyd&b;_cj7V!*PDXJE>xtr&V9dYM5#NI>0Fy`v)q|ncmJWR-!d|a z`!7F|v&-BxGjq8&ar%09x%I8HgCAJ;rf*EUJNtZt>3I2LZ{NKVYz*hPDs5$VZZxj@ z>dJFp&n^BM%yXu;-B;bKZXJ(~ZW`?WW8qqOB$~c?ch$Yop93au_8BZMwQOy!WGQaH kzp5{H^M|(*%8PTS5{@Bmf6bw!6$wh`%(;z`N8|DAKg%v30ssI2 literal 0 HcmV?d00001 diff --git a/Error Handling/figures/PAPR-41.gif b/Error Handling/figures/PAPR-41.gif new file mode 100644 index 0000000000000000000000000000000000000000..9f941b9ce70e26dd309761303d94221e7032a7ba GIT binary patch literal 47805 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 literal 0 HcmV?d00001 diff --git a/Error Handling/figures/PAPR-42.gif b/Error Handling/figures/PAPR-42.gif new file mode 100644 index 0000000000000000000000000000000000000000..8565d97abd7774aec92631ff4aeb1083a7ab63be GIT binary patch literal 11011 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�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 N#x$<6jh_|}06X2!)nfnv literal 0 HcmV?d00001 diff --git a/Error Handling/figures/PAPR-44.gif b/Error Handling/figures/PAPR-44.gif new file mode 100644 index 0000000000000000000000000000000000000000..c2e622a965e29834e0f2ef358ad3fc1c00d2482d GIT binary patch literal 46575 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 literal 0 HcmV?d00001 diff --git a/Error Handling/figures/PAPR-45.gif b/Error Handling/figures/PAPR-45.gif new file mode 100644 index 0000000000000000000000000000000000000000..189ae212818f7740da637fbccc5de11e4e277a95 GIT binary patch literal 28271 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%0A_H}Jv)BgJ;mpQu8#Xz>> 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 literal 0 HcmV?d00001 diff --git a/Error Handling/figures/PAPR-47.gif b/Error Handling/figures/PAPR-47.gif new file mode 100644 index 0000000000000000000000000000000000000000..f11063701fea51d719ac8f7eb3258355eff2578e GIT binary patch literal 14863 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 z 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 literal 0 HcmV?d00001 diff --git a/Error Handling/figures/PAPR-48.gif b/Error Handling/figures/PAPR-48.gif new file mode 100644 index 0000000000000000000000000000000000000000..917b1ece14557b3b594ce02bf5bf5340088b651c GIT binary patch literal 56553 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 z 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 ZE$UH|y40pVHL6ps>Q%G4)g1~506U>!11A6g literal 0 HcmV?d00001 diff --git a/Error Handling/figures/PAPR-51.gif b/Error Handling/figures/PAPR-51.gif new file mode 100644 index 0000000000000000000000000000000000000000..b4ddd2fda04bedf819083309e186e8492f9d25d8 GIT binary patch literal 10035 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 JUI+;Y06R_GTqOVi literal 0 HcmV?d00001 diff --git a/Error Handling/figures/PAPR-52.gif b/Error Handling/figures/PAPR-52.gif new file mode 100644 index 0000000000000000000000000000000000000000..04251e6ebef93f91a868189ad391fff3ab0a1f11 GIT binary patch literal 11005 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 RwI%PprEoL26%Ge<{}0`i=THCu literal 0 HcmV?d00001 diff --git a/Error Handling/figures/PAPR-53.gif b/Error Handling/figures/PAPR-53.gif new file mode 100644 index 0000000000000000000000000000000000000000..f62cf5ecbca7a4c786d96f7c485a74783440a162 GIT binary patch literal 11327 zcmWleWmFRm7skg}!C)Jm!ssC&18ERON=Yjr;wT9fM@TChIeLUhDI=7WMjA(_lmRv! zf=Wq@)!>t_G}!+*^KW)NZk$}%vh@G}5F3|II8 zya1pBjL}dCU@8J|76L1Y0=%#Q14AH42XI~splJ?JHiev1W|07JyK1orTQax-(V_sp zaD>o(J$6@JwjhACgOn%^&j)~9FcTC_)D=DN&L?t%Up|Bv=*Vw#OOWqApMZg+1wbWS z4RcFLi`}F zL}RTdhCGEv;)QzlMTR)(n^gRDQ)74kV7ykQBi7x+H5D(HdQ-c^!Q9_H?!^t!^TA!} zfwlO1KGiOoRd|_f*W2#C6}aHMGUrHx`{hY))Sv+8px{8o=s~@QwA2toiR3YIKtoBe zp?Q2;cd&9>sKJfI+TyTBl$e0n_!vS;fn)k`3n`>A&bj+xqGxv3eaggeoY|GackRix ziIm=qEXrh(j?dHTd!@9QEaOQEX*9jmsb--oKcT(Mf7>LQ{YBi>l6=)RD4w+6&_I+JU7CkG`tru+G)bRrdnBx1+lj8u{%-s`9sBcln*QhO2L0dJ>HNmo z5&d*~mwxt-zJ7SNe?mVyJ3FMG{gnm$SO3=n07eI#F$o&iQ+s1z9Os=!>WljmP-3Qq z#tkKd$-EbRKaVt&4yU8_lLSo~%SN*>wpGrfjnBp(W8KFJO`4v+E>H{n{&}>ie5wc+ z!+g%Pxnic&IP3h4vF6G*s^`F3=Jp+(s6s^UPuLY8X7VXl`qL|&FK1>M-MMy3rrfvYgf*jHUg>JvEoif} z6b1afsqLT#utPmVeq^UlwsXxgzWZO3xg5{6 zP?3bb(co{1nCA}G_=s-65^jSAaMq3zf6sUCY~iJ)=#Ih0N8OGeaSqN6pHVlp^A31d zTvUdhFJ)O7C8GRZH0W8$!j&*qvMgN?R_K@Gz$8hdlKl~#gw5Z1v7p5ke%&L^21k`r zs`PNdnY#4q)5sFCfN##~`)Aa;FJfTKkrjKXRIO6(8s)5h6Mr#);AQ2-uhf6pIn>eA zD)B-5d0+q08SgS2rG3U#w&=?-+J)}?oE~+6Eov4?m+-fP&)!;sWuVRj!3jyXO*J_Vk zkonc+b18|KGaU(_bx&=c_F>M^-7$m>@#1H?vdon{5og|vP{7)a%}N|XpXFx$(QNhZ zkYLF6?l3w*c5lQ>`p(`cro3ivOtzH;Fp3?P-JejJyR-jVZM|lHQtN1Ye+n0|!i{RO zi2YcJY6tTepEQ>kzTp3%Z;D{`%k`Uf(EpIv$K{|n>B?ai)Le%+r&9Dp%8Mn#Z(Fok z9N;R}e1GT~wD9*A%vVN3x+|kL3h(9rm{UGQ0@gVtWTh%ztkcAK$;!)D6?D>Tq?&fL zn!I_}$!mh)XPZe(sZ%IzI#e_xcAL7}9*}WSsok)$F70I7+vjP4@6&3|@U+q*NXi#v z+-3KLI!(L32L0m}r+e-nYMs}!rmZFg0iaxL$dQ)9ih^FylVojEnYFKgu;X>)5kMUG zB2qFbO-wU7$iW}rm6CPo^B1Q0<$Fp$CGI@syZwJ!C5!9_Rd6z)onMn5P5Pu6T_q!3{s@;Or!4-PHBbhMFux;rR8ma)V^ z;4Gax?q_rPNW=WiDxVqvUOpuZ@K-TDH&(zTf|({xF*5`DOn2^CZ_jW>a0tmf^kw($ zw}~+|5EJb7%T@p(l!s_Z0=+WfJ0mwlzLris-Fkwf=dd?~!qC`cB zszl%T8LWiWJQD5R`9@qRN)=VU<}%>WuH__}gZ z?*8WEA9RlA+Ua@|!+C+(A4Ew~ZVmjEhUKX<*^ILtn`DVQef*CnZvE1J2j_5bYYHj=MrT(x)uXD5~z zJSi@!BQLTBUhsYtE=pE`2fVfHtG6i;^eP)O=}Je)lr=D5TohHtwkzvYPc}f8aGUBk zN)~);zC+AC$KDs`Zux$Rtx`LCT&KcpAXqh$!xYMJK16PURa0rU4UJE9HV(?~x53G^ zAA#{SclI0w3|%ds6zCD10Wg=kc6WdYl6{ZQX`V+Okd(Z&F$k!^R`x4mQ#?Y48uuu4 z?v|RCyq1^0Uuu2GcM)A5W`VgUK22K1&Cf7h(V`jh-nJTK$CHme^kEMYACuVx7%B5bOMjpx*W}K&^Uxw9;lR9yVjxsgn`}r6nOGJ&Js!p(8Yv0pE207?BgPhu znU5z{BsEV)tJxA zUK7%q3fIloH9nn8hE6s;J(^h8K0TQtBAThtD;s(Of2PS6%_TgqH;gp@%uvz}GL{!v zymFV=bA@90RbKm8Ac1clV-276i)=o#E1jkG7?j(;h_^c}nVl$YmgX;p$ZmMPDH=ME zJO6sidw!IP*wcsCDER9m$Xti2}A{UXMp<5E3-!b)l@5oUbe8QmU(X| zwbek-8Pz8)V3U5~?H8_V0p~=%|7458iorp&m`}Ep@VFIsoq3zfOJGTkJ$F>~Q zN*+QRk)B(uQytlT{!H8zy~mgRjow17!+O<4ISWTk^vhgmq*=kcLN&;iG`Ah*xM9Og$g{OKZqad!p%YB8~+2A~FM&QQrv>99WXBKU{Q! zvxf>XT?ji;h?FHT>9%sJtVh0svN!B7-nC~`ofg~W0exX$Y?%|fK?@G1g6bNGacpoA z0wNTI{EdPTX~?}J34an?z=|c10{ue_-^V4Np;&H>B%jo?cB5ey-e^$9gV$E9;RHS} z54b%AdP0NUGG;Ycfc!&~PzS&Q+QS(=h9tZk698g|V!#c6D^V~Y6?Spn$cP+!ZSTRa zIib*sgfm)vgcK3vfMVH9AY#ZU>3AUN;diNYh;%x$LP~)Mv0{(Nj^WI&fQa#Ool{GC zW-L%*oOIPcNeV+}Kf*)4Ij~kQ0Isn|-Q`SeaR|R%A2baR5i?0$C%|fWqFiXmEPTBB zEHKl`NxvTc1C#1$j1WsiSmT*`P_U2dmW))89nRoM1LO?Lbk`tt1r@c8A!#s?^z$S_ z7a>RW;5rgQZpU_yC#4?-TOxpRP%xvtv;rbBZ93MH_qvNih}BrFd06s z-DwzLArno4ht-E{1Hf6FQCS07AnWjLue7G)H) zvm}iP&3sHLvi*>C16{m?h7Fly_bvdQ2ePDNpTLr`&hV@X(=3hbk7qWRo>-^Odb1da zqZWvcyTjRMy-YW!5rxx6J;sRL(IRuFqFLiq*UX|`Du6Y*{Ow60y&l8r*9P+;6#Z+@ z_VRw5gw3Q6WT)}7B;}WniB!t%RD3f@UGjwWpy7|vq1$Ni^B9C70Cwe%^qyC74=hEK z0B^>DYS!6z0cDRDxFqtDg4qyHD@vUgSq7h1bGZfuhGz6Ez&mIxdU(dy^~|VgD8I?g z8Z}rjg|V)lnF9rVhk|kKFe@~>*eM^)=2)(1q`;2`JDZo<-1#WvC7E zYZ~tS{n-@05JZAk3NTI)b1<5y+S?LU@P;iM>^!cc-YP=5AZw3DtcBdDzuD9n%0G*1 z#;_s#)~a2sSsjRAnGx=;D$pby&i#%GazNKO6hBM}4GC98eQRaioX-26fTZp4417e= zsVssYUe2SC3zU$3cmli<{*D6wfqPjl^0E!jU`&Ca2#_5@+uK#xMpff{v=;DmHU9wk?SoDAvWLe zXX5UOhNgGh}(SxYKg?_yMOn zs++2xf00_Nn!p_)%*1ibjy>G{T6#F4XAa8o5tTC;M%O0#I35;qB@j! zr21;`kJ=a&Ilzyk+f4L0ocg!q^yAr(aMf;)jFBKV#L2CZfSm3aE1rN9?%n@Z2)2X} z!Fk)av^0kASP$P?9Lf63n^NOt^l2!y@ScY?Ybh_kMfHex!&5%BGBVG3Bbo64|IwJ~ zQR~GqY8P+2IS)#yn!7lHHYa6WJ|5^l8ba*WH5KTWLeP_3qhiKgCh4d>FA zuFX9YoF@R54S|>3iSdMyo;|N1Q!mPAyefq6p`m$x`1}Jq^MrtndVVtOlf6KLv%uFb zF2=h8F|^U^Gr6KDrYIEDcpfcmnsytXVopRBVnJ1CWH_Fw0!?L{c^u^<&X^Y)oydF> zgM^FInRoH5gjULLsC;!jLme(bAdLTHcq&lgHSpYPCx7TOXF=`PTv2221++^IRW*tD zDDpRxE~V3)$Q-@H1Ga^q(8L(osEpwZQ`E-;#xsZ0IZK4cFlHuL2jfaEbh94HYy}&| ziRALt+HAzOjBwXZOr$N2RcUdls!j&^j|Qi3Wp_LvdOUN=6HtX9GQsmj}>Q3r%b8M`LZDwA_Y|^y00{R{LL`o#5NCX z0%z7E-SG3os^?}MAjbu8$^oK&A*r#rK`??LoAt@;Xjzk{!LtSE^uW`fK1dS%F6Jq7 z)hOVRjS0`tE#ZiNnRg5By1;Cu4Xnxfn8K&gDA|!z|r%utt)o zfD9^f2@ldiwdq^2R1?mfr@`M6z!Mrw6ZcuTzA~=X?@i8>u&Zi zi+Xc>{VQHX$9QKQ>N#6gm!~x=fY3d_hWIAORrpx6;@_NYam$();_gO2PZ(vO3h|2; zwFp4On4`2=2J~cK{_A|@H*SVVZVexA#U3+uQT{tFy?4+^*XdgNuk$HF>uSta`kR(5l$I)5)I28F%$EK=e6NM#a0m&z}~O{Y0)d!$;a z5I3Xm*jJ_8Y<&bM!#C`V|H2x=O*|0 z$J0NqbANBTpf=8+{LGzgyqvi`&uyPXszt|dmg6u6dedm9a;xgb=bS5Dc|#c+ZRcR6zw?m z{r>Zmy*83___^#_j^gC7FH!h7TIV>G;u{}zOfEW3683%j{y6RIn3De8&H4}%c>kO| zitfj8@mtJuThuE$V4MADYI#3M9u<6(!xTTKk@3fEMu{-}o6UY3?(ds%^YrD^?N=|4 zJ6@fVf8B{WJEcwe&KtSO+1}}m`rA8oIyU9%yAS}RlS=c8exDKThufh$Be3E+{s7BA z*Uv!puh_dSIIS$$eb@m635y7YA5z8Fzge;yzq;5eeAXi0JXUvn?tK98Ka#kxKYJ53 z^-dVDc#oaI>Wn_90T`j;q9MO7>C(m*Irw*2Tn2KjmyOcSX@0d?wq7yLl+e_G``A1i zdhkey1yCmMt|FCm?W;J`4_(8;OX^krYqlF!C5EX&hWQ7Qfah19C=SkIFhR*!`*>pBiSK(c)PD z8**5F^IR74g?ZT8M0rrO*Ee$h(VhMnCe}6jDF=Sru?NXu{}l#Mo-vDsf6K~zjsy1~ zj%rno=a#;kr4r5{LW0M(vX3#zc5;8+E-5g~&wolf`lcvX;+3jzzckeLpzI^|#mFR? z;Tq&NB;~vQn27plA3zCESS)Uyli8l zb>Syy;>E5!kHjlOiD2CGF3Kja$oY!ZOH^~t&C$6-cKJT9JJoUpV&XI9Pt_sy(w(fE zJ40+@P?|p11H#*dOiBNhQDF;CJbh5uSqP`t`XpHYiUH;fq-2#MdVSPV7b$0IYQSpK zT=$RO%SMzQI$58I${lZ-mDPppB!tlRxWyeRM%2=~~g*WX1ex2r5LvwFb$lB=3J<^FHldPOj{$^=nUi`gF(g8># z2MK?U+7`BNZiCTQ_wQXKx3j|4^+dy0zZ@%uPw9`NnaAr_nW8Ge4yAWmJyWFPZ^rYL z#&CJm`N>mJc*u9u=kU|6}HX?wQ{Ic$K5+u!IEn`yicPXB2v? zhM|S;TH&`@^;Tr~+SX0uL}e$$WOjFmV_DO9lTVY(ZL{m#ReoW&ySv|o|6&(t_`X&t zxhB5})w|{Qwq8k$|7PUOth8TNcR;>nM+4T7wM%uqD{x8&dMRk;vQ&4_8_Ubx2R;9U zcDHc9U|QJxJ7eT8VBdc0zNj>H(K@q1hXQqK-u^*|Wz(m{ya(Ks45V9_nf1vZdgjtX zHzC&1`+kn=LertZpI;5;+P?~IOXV|%waXnxpooAmW233(9qb%hw}rfu;!g|qfWkuR z2M{S<95iyISo*fD`5gU%P3pwe7mP65h_k#cggL6|cYH36QQFSB?(zGQU~PPYO#6cAUxqYaJ4S(j8?NlC z0g3Gx1%>BrF)y4q2Kt*R(3g<+W9!Zr#U@{z^_BsE*zztj4NI&V58Jtj3%{CwM@;nX_op8`)Kz0e_Gg$W8OZLZ2LP5rXT% zbNpz7T?ob}%dF@MZ}aM#+{30^!cbAK2_P_MMj8%{pSTLAhOhqc0I1+4(n-;Atz)o&Jm7|klAe|Ab% ztD?tAnS6-z$J+vG``<~a44j*R4pWkZ7jUaU18)s1`N4!1W(Yo z4eJ&@dPF4bef2pE7TLTqEIMm7e#bk*jGlW(|Hu<6gDn<}9DsQn7EF$g#UQ^BhafhK zaNDi}Q2_Ubj>T@umCONKq2Dk@ z^nbuLsO{c6y+E`lh%Cy816V}K8@)Kuo9~r&ucs0ev;6xE1}A2E&PImBsEaXf4lxa% zYGT3f(H~@@;y7-4L#0@pV;fdt1kgeoS`LK;tl53YKiHu=tiUv1w@@mNB!r|RYbA5~ zQs&~&NFt-G*EQK|qA3>?v=MBxe}B#mqqvOY-D}8r43TF6^>chl#u>O2!9S$UZ~ z-C6*mFT6oJ2g{3b5)_3UVj<8ZYo^2jQP4Vifd8wjefZ9da27pY(C)v)qHw9{)f%K! z<~^9v75o5jE!lwU)Xy3ajOsSJ|OpB!^( zJDJ+qn(}f82ADyXo{90AeflDHC-wG?H!*_?R!(6xY%yLtnzw2!?)ORr_T4LX+OEFE z@FD6VtH%x_?+@&7U&|jZ&sdEoujY+3Cc}=}Io|5KE4gd@@TJ@y;1Y9J5*5;3#I$#CN8!e|*l=5JL0cX1dxgaF8 zdofaSu=8bds}`koIosnNidC8W>_9UL6ahcxYS;l3C zrrNg?&p~S9Z$P?7XNIkW|g9l$02t z5vRctJPlOhEOBe3Wril4=(9Q|<7@#nkK1EbH8nNt5X)}BFaii(0hA?>%=6M@36%j9 zl5P!yxTA#GbSzf|>oSl*#+&Ghmd@f&_}+2hnwo-Wrj*~_^Auj0{YI$ghGtAfb?kYF z-9YJWHz}LX@jg4K`$^R`AFBqIt5SC~9%1_*IYhVaL}qg>~GA64K{X^M}92t)Q}2^mI|94sUymG@pkp>fW6Fnmge()@eCe+ zRSO12nQM#+h!=f9Ibgg+ zao3Z5%*EOja2+UBdk1`lNYqXmii9PYU~3}LAR!{u8%wIsW)vsIYgLFx9migz#>rGj z5IILoW-eS=G2jS|i?jplWG9qpRF$2N|5#NSv{9*N450}c-*br5CY*Oi z>@fwa0Vn^a>bB|A^Z$#8W!0`-?_I#QhIx~^jz{Crv86GX^3xU*X(re3#F#l`pQ52$bpgEZ*=bmQ{ZT?AQjn?1T*u1)e6wIk_QlsC2M5#9#r5 z-cNEEA>KM>Y*aEcL=6kcToz=E1s5pHD#{seU?&=(b^POvu|(rs#)710{bXpqGpjcR z@aBL?Jx^%Cdq|>;?``(<01;9vlbAy*B6|x1sH6bQYv05q_Qcof)vxP#HL7LOiz78I zj6!sAQh}N;uaCD3$9A}f#wGw6*#TfJ(**3rnv#n%s13-563nN-LUp=*Y9W53ndzr9 zqd1WM!l8}9u0B>21G4MDer<-KWT4XZ7TYOBrV(QmK{lMvY9SHzb+BgO)|6A#Q!s+*^Xd^V|B?0<((!$~laa*OV%6^ZpiEkdWq)ZViF z$Nh}mIo0vF3ZgyPdO{z3W%aH7h8m!OVeACz+XfUM3x9}FOFV_lWo7%LURY8Fq6l#= zj6Ku*HUU^07f)~v2c|WMvDJ>`wg7dYNcaSr@$+JGW75hBfF;=o-xVf#!}_45c)2ab zr4-fV9jFgQWg`Wv`39=4dr^7IlH_D_Hx-IA1wekl3uKM@$#I`dk|N{^2k6wfpXyf8 z`Yh@hIT@%&`eSJ(|7;DfvM?*N(QKi#H`;buvRiMUwB!U|g5g&3U@}gt(@nEArgHC1 z0-qpB4U-@>PjWtvP3mm3|J-#&8DLF@h!#lE=nByB^Mg6vN(PVC>}pq!YT z3^Z$4FYLh$2iXcM?nVa!Zcw44+`r0MOtd7Tj~t1MkA){FBvsRIn+`_tzM9(5PQhSG z)xVhK#ULnM3?nglU?TNd!-trwj!&`+9>tn@zN;tZ3^J-`m~{v*#L+u$s8FEyo8uJb z=la^>+6+@%9Y5chMwJtp@-{fnW7(hc&NnlC>qk2?YkVF+kq<;DXKiq;9hA|afDcJP zHx3@3id(Rf^1y3~D}HI!dqsIPKQ&$TmP_k)pXU0$X8UZF$j82S-a~y?lMY_6CRaL^ z`X^eG*bv2>5)AptWH7{-d(V@BIfcr2HD>e%{LKP~X0LELmG$@qzmIzQZd`I`8{=sA zH^H97J=PRHqpMGH?bM|K;v_bG*-Y&gmxrDt&ocC>96d#xPC-&{Y2IM;I!_tbh5af77iCwYV5&$aWpF}!ZSlLY_VNEV4**x`#UXtqavodsCUfAb;B zJS}L_U2cIvWdZY8m6bH!6+MfjZHjBlhb3FbWwC2@+oAcb-b3LM#b$_<&~`VZpSzAx z9+l1c8LytA_KI!Ke|FMRG2Ua$aarkSys@8q3UvkUoUC!dj+0-H-6c8IXEi0%-OA;W zQ+%=+o}_NH>XDY9@lvN0yKJ(7kMZ_&G;%B6OxD$QJT%60#oNgCkcra!1PXJr@OJkNc5kNt_q;zW4fO`OMZzuO$$d=g#9-%?(B*2f ziJ!}Q+)uJE4H%TRP;zn(P=RM1#9w~+*|C-fWWy|QxNd198F!7jVPyHztu$>(Z&?-Z zNF(O-A&>ZYpTApPl9J4rYlGW&lYU$g0A;RNE;8F)O^S6{6 zKP?DVNXoqvTb#Ce|C*#Stn(>8?M?mlt~lYMHJ?-$4CnlE&expBlVvY?i=J97!uPp& zF0hs(Ja@t0iz^_?R?)X=zjxCUN_s$5l8Fw~tjIz8XIL;dYV%NWO?Tvb0VS)i2X+Ra zfUvQK>|Rcix7DsC5-OHot!+)Mk?Eb- z=RFWOWLIR4jQo~UF@5`O1wGyj!#ls}kBu+py$9m>1>X|Mg{j8zN$trE!){Ld52%1e z5|Z!q{%1~PNL}`nk>}M@i4zz0Yj@a}z8rX=d_M{u$gZPzb2^}q4E5TU5o zs)!!_W#%2IDxBy`fY@RVcwfbs5#rVB_DzL312_b@A5sVgqj_{r!6Ip7PuAUaGDYqdk=PcP+@W^}r=6Sv%xFt4qN4)qN+`!==vO zuJXYq(EB&fphh8(GOb`o%LBWR!`t_KyrvI*itgW>4mKS=B=8*hOC1HM9tB=L3bH@C z?{yR$aukwq6#Dom>`M7jcQ@^P&Fah%t2 te8_P^!ZG>rabo##QtNT@@NvrAaq9YU+R<@3^n}85k|7m#o*4$v{2#H*x)cBa literal 0 HcmV?d00001 diff --git a/Error Handling/figures/PAPR-54.gif b/Error Handling/figures/PAPR-54.gif new file mode 100644 index 0000000000000000000000000000000000000000..b863c9eb1c692660c147b173f97733c88ddcb2ba GIT binary patch literal 9926 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 literal 0 HcmV?d00001 diff --git a/Error Handling/figures/PAPR-73.gif b/Error Handling/figures/PAPR-73.gif new file mode 100644 index 0000000000000000000000000000000000000000..be0d7a510b929c77f24d73d1090e91ab5351b1f1 GIT binary patch literal 36224 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 literal 0 HcmV?d00001 diff --git a/Error Handling/pom.xml b/Error Handling/pom.xml new file mode 100644 index 0000000..d20e88d --- /dev/null +++ b/Error Handling/pom.xml @@ -0,0 +1,148 @@ + + + + + org.openpowerfoundation.docs + workgroup-pom + 1.0.0-SNAPSHOT + ../pom.xml + + 4.0.0 + + + LoPAR-Error + + jar + + + LoPAR-Error + + + + + 0 + + + + + + + + + org.openpowerfoundation.docs + + openpowerdocs-maven-plugin + + + + generate-webhelp + + generate-webhelp + + generate-sources + + + ${comments.enabled} + LoPAR-Error + 1 + UA-17511903-1 + + appendix toc,title + article/appendix nop + article toc,title + book toc,title,figure,table,example,equation + book/appendix nop + book/chapter nop + chapter toc,title + chapter/section nop + section toc + part toc,title + qandadiv toc + qandaset toc + reference toc,title + set toc,title + + + 1 + 3 + 1 + + + LoPAR_Error_Handling + + + LoPAR_Error_Handling + + + + workgroupSpecification + + + + + workgroupConfidential + + + + + draft + + + + + + + + + true + . + + + bk_main.xml + + + + + ${basedir}/../glossary/glossary-terms.xml + 1 + www.openpowerfoundation.org + + + + + + diff --git a/Error Handling/sec_error_introduction.xml b/Error Handling/sec_error_introduction.xml new file mode 100644 index 0000000..20fdebb --- /dev/null +++ b/Error Handling/sec_error_introduction.xml @@ -0,0 +1,85 @@ + + +

+ + Introduction + + RTAS provides a mechanism which helps OSs avoid the need for + platform-dependent code that checks for, or recovers from, errors or + exceptional conditions. The mechanism is used to return information about + hardware errors which have occurred as well as information about non-error + events, such as environmental conditions (for example, temperature or + voltage out-of-bounds) which may need OS attention. This permits RTAS to + pass hardware event information to the OS in a way which is abstracted from + the platform hardware. This mechanism primarily presents itself to the OS + via two RTAS functions, + event-scan and + check-exception, which are described further in + . A further RTAS function, + rtas-last-error, is also provided to return + information about hardware failures detected specifically within an RTAS + call. + + The + event-scan function is called periodically to check for + the presence or past occurrence of a hardware event, such as a soft failure + or voltage condition, which did not cause a program exception or interrupt + (for example, an ECC error detected and corrected by background scrubbing + activity). The + check-exception function is called to provide further + detail on what platform event has occurred when certain exceptions or + interrupts are signaled. The events reported by these two functions are + mutually exclusive on any given platform; that is, a platform may choose to + notify the OS of a particular event type either through + event-scan or through an interrupt and + check-exception, but not both. + + Since firmware is platform-specific, it can examine hardware + registers, can often diagnose many kinds of hardware errors down to a root + cause, and may even perform some very limited kinds of error recovery on + behalf of the OS. The reporting format, described in this chapter, permits + firmware to report the type of error which has occurred, what entities in + the platform were involved in the error, and whether firmware has + successfully recovered from the error without the need for further OS + involvement. Firmware may not, in many cases, be able to determine all the + details of an error, so there are also returned values which indicate this + fact. Firmware may optionally provide extended error diagnostic + information, as described in + . + + The abstractions provided by this architecture enable the handling of + most platform errors and events without integrating platform-specific code + into each supported OS. + + Architecture Note: It is not a goal of the firmware to diagnose all + hardware failures. Most I/O device failures, for example, will be detected + and recovered by an associated device driver. Firmware attempts to + determine the cause of a problem and report what it finds, to aid the end + user (by providing meaningful diagnostic data for messages) and to prevent + the loss of error syndrome information. Firmware is never required to + correct any problem, but in some cases may attempt to do so. System vendors + who want more extensive error diagnosis may create OS error handlers which + contain specific hardware knowledge, or could use firmware to collect a + minimum set of error information which could then be used by diagnostics to + further analyze the cause of the error. + +
diff --git a/Error Handling/sec_error_reporting.xml b/Error Handling/sec_error_reporting.xml new file mode 100644 index 0000000..837388c --- /dev/null +++ b/Error Handling/sec_error_reporting.xml @@ -0,0 +1,87 @@ + + +
+ + Error and Event Reporting + + The error and event reporting RTAS calls are designed to provide an + abstract interface into hardware registers in the system that may contain + correctable or non-correctable errors and to provide an abstract interface + to certain platform events that may be of interest to the OS. Such errors + and events may be detected either by a periodic scan or by an exception trap. + + + These functions are not intended to replace the normal error handling + in the OS. Rather, they enhance the OS’s abilities by providing an + abstract interface to check for, report, and recover from errors or events + on the platform that are not necessarily known to the OS. + + The OS uses the error and event RTAS calls in two distinct ways: + + + + + Periodically, the OS calls event-scan + to have + the system firmware check for any errors or events that have occurred. + + + + + Whenever the OS receives an interrupt or exception that it cannot + fully process, it calls check-exception. + + + + + The first case covers all errors and events that do not signal their + occurrence with an interrupt or exception. The second case covers those + errors and events that do signal with an interrupt or exception. It is + platform dependent whether any specific error or event causes an interrupt + on that platform. + + + + + R1--1. + + RTAS must return the event generated by a + particular interrupt or event source by either + check-exception or event-scan, + but not both. + + + + + R1--2. + + check-exception + and event-scan , on a 64-bit capable platform, must + be able to handle platform resources that are accessed using 64-bit + addresses when instantiated in 32-bit mode. + + + + +
diff --git a/Error Handling/sec_rtas_env_epow.xml b/Error Handling/sec_rtas_env_epow.xml new file mode 100644 index 0000000..52237f2 --- /dev/null +++ b/Error Handling/sec_rtas_env_epow.xml @@ -0,0 +1,336 @@ + + +
+ + Environmental and Power Warnings + + Environmental and Power Warnings (EPOW) is an option that provides + a means for the platform to inform the OS of these types of events. The + intent is to enable the OS to provide basic information to the user about + environmental and power problems and to minimize the logical damage done + by these problems. For example, an OS might want to abort all disk I/O + operations in progress to ensure that disk sectors are not corrupted by + the loss of power. Even on platforms that provide hardware protection of + data during environmental events, EPOW notification allows discrimination + between I/O errors caused by hardware failures versus EPOW events. + + These warnings include action codes that the platform can use to + influence the OS behavior when various hardware components fail. For + example, a fan failure where the system can continue to operate in the + safe cooling range may just generate an action code of WARN_COOLING, but + a fan failure where the system cannot operate in the safe cooling range + may generate an action code of SYSTEM_HALT. + + Implementation Note: Hardware cannot assume that the OS will + process or take action on these warnings. These warnings are only + provided to the OS in order to allow the OS a chance to cleanly abort + operations in progress at the time of the warning. Hardware still assumes + responsibility for preventing hardware damage due to environmental or + power problems. + + An OS that wants to be EPOW-aware will look for the + epow-events node in the OF device tree, enable the + interrupts listed in its + “interrupts” property, and provide an + interrupt handler to call + check-exception when one of those interrupts are + received. + + When an EPOW event occurs, whether reported by + check-exception or + event-scan, RTAS will directly pass back the EPOW + sensor value as part of the Extended Error Log format as described in + , assuming the extended log is + requested. Doing so avoids the need for the OS to make an extra RTAS call + to obtain the sensor value. For critical power problems, the + check-exception function is used to immediately + report changes of state to the OS, while the + get-sensor-state function allows the OS to monitor + the condition (for example, loss of AC power) to see if the problem + corrects itself. + + + + + R1--1. + + If the platform supports Environmental and + Power Warnings by including a EPOW device tree entry, then the platform + must support the EPOW sensor for the + get-sensor-state RTAS function. + + + + + R1--2. + + The EPOW sensor, if provided, must contain + the EPOW action code (defined in + ) in the least significant 4 + bits. In cases where multiple EPOW actions are required, the action code + with the highest numerical value (where 0 is lowest and 7 is highest) + must be presented to the OS. The platform may implement any subset of + these action codes, but must operate as described in + for those it does implement. + + + + + R1--3. + + To ensure adequate response time, + platforms which implement the EPOW_MAIN_ENCLOSURE or EPOW_POWER_OFF + action codes must do so via interrupt and + check-exception notification, rather than by + event-scan notification. + (Except as modified by Requirement + ) + + + + + R1--4. + + If the platform + does not notify EPOW_MAIN_ENCLOSURE or EPOW_POWER_OFF via interrupt, then + the platform must protect data on I/O storage devices from corruption due + to the EPOW event. + + + + + R1--5. + + For interrupt-driven EPOW events, the + platform must ensure that an EPOW interrupt is not lost in the case where + a numerically higher-priority EPOW event occurs between the time when + check-exception gathers the sensor value and when it + resets the interrupt. + + + + + R1--6. + + For SYSTEM_SHUTDOWN EPOW class 3, after a + SYSTEM_SHUTDOWN EPOW commences and when the delay interval timer expires, + if an + “ibm,recoverable-epow3” + encode-null + property in the + /rtas node is present, then the OS code that manages + preserving storage must check the EPOW sensor state and the + “ibm,request-partition-shutdown” + property if present. A normal boot must only occur when the EPOW sensor state + indicates that the EPOW condition requiring a shutdown no longer exists + (EPOW 0) and the + “ibm,request-partition-shutdown” + is not present. Otherwise, the code that manages preserving storage must take + the action as identified by the property. + + + + + + Implementation Note: One way for hardware to prevent the loss of an + EPOW interrupt is by deferring the generation of a new EPOW interrupt + until the existing EPOW interrupt is reset by a call to the RTAS + check-exception function. Another way is to ignore + resets to the interrupt until all EPOW events have been reported. + + + EPOW Action Codes + + + + + + + + + Action Code + + + + + Value + + + + + Description + + + + + + + + EPOW_RESET/MESSAGE + + + 0 + + + No EPOW event is pending. This action code is the lowest + priority. + + + + + WARN_COOLING + + + 1 + + + A non-critical cooling problem exists. An EPOW-aware OS + logs the EPOW information. + + + + + WARN_POWER + + + 2 + + + A non-critical power problem exists. An EPOW-aware OS + logs the EPOW information. + + + + + SYSTEM_SHUTDOWN + + + 3 + + + The system must be shut down. An EPOW-aware OS logs the + EPOW error log information, then schedules the system to be + shut down to begin after an OS defined delay internal (default + is 10 minutes.) + + + + + SYSTEM_HALT + + + 4 + + + The system must be shut down quickly. An EPOW-aware OS + logs the EPOW error log information, then schedules the system + to be shut down in 20 seconds. + + + + + EPOW_MAIN_ENCLOSURE + + + 5 + + + The system may lose power. The hardware ensures that at + least 4 milliseconds of power within operational thresholds is + available after signalling an interrupt. An EPOW-aware OS + performs any desired functions, masks the EPOW interrupt, and + monitors the sensor to see if the condition changes. Hardware + does not clear this action code until the system resumes + operation within safe power levels. + + + + + EPOW_POWER_OFF + + + 7 + + + The system will lose power. The hardware ensures that at + least 4 milliseconds of power within operational thresholds is + available after signalling an interrupt. An EPOW-aware OS + performs any desired operations, then attempts to turn system + power off. An EPOW-aware OS does not clear the EPOW interrupt + for this action code. This action code is the highest + priority. + + + + +
+ + Software Implementation Note: A recommended OS processing method + for an EPOW_MAIN_ENCLOSURE event is as follows: + + + + + Prepare for shutdown, mask the EPOW interrupt, and wait for 50 + milliseconds. Then call get-sensor-state to read the EPOW sensor. + + + + + If the EPOW action code is unchanged, wait an additional 50 + milliseconds. + + + + + If the action code is EPOW_POWER_OFF, attempt to power off. + Otherwise, the power condition may have stabilized, so interrupts may be + enabled and normal operation resumed. + + + + + + Implementation Note: EPOW_RESET (EPOW action code 0) + may be used to indicate that a previously reported EPOW condition is no + longer present. For instance, a system might see a WARN_POWER action code + for a loss of a redundant line input power. EPOW_RESET may subsequently + be issued if the line power were restored. The same bits in the EPOW + error log that specified the type of WARN_POWER EPOW generated would be + set in the EPOW_RESET error log to indicate the specific EPOW event that + was reset. + + Systems that do not support an EPOW interrupt would generally be + unable to support the EPOW action codes 5 and 7. In those cases, there + could not be an EPOW event to indicate a loss of power. However, after + power were restored, generating the EPOW_RESET EPOW would indicate that + the system had lost power previously and the power had been restored. The + EPOW_RESET should only be used in this way if the system is unable to + generate an EPOW class 5 or class 7. + +
diff --git a/Error Handling/sec_rtas_error_indications.xml b/Error Handling/sec_rtas_error_indications.xml new file mode 100644 index 0000000..4a51bd4 --- /dev/null +++ b/Error Handling/sec_rtas_error_indications.xml @@ -0,0 +1,711 @@ + + +
+ + Internal Error Indications + + Hardware may detect a variety of problems during operation, ranging + from soft errors which have already been corrected by the time they are + reported, to hard errors of such severity that the OS (and perhaps the + hardware) cannot meaningfully continue operation. The mechanisms + described in + are used to report such errors to the + OS. This section describes the architectural sources of errors, and + describes a method that platforms can use to report the error. All OSs + need to be prepared to encounter the errors reported as they are + described here. However, in some platforms more sophisticated handling + may be introduced via RTAS, and the OS may not have to handle the error + directly. More robust error detection, reporting, and correcting are at + the option of the hardware vendor. + + + + The + primary architectural mechanism for indicating hardware errors to an OS + is the machine check interrupt. If an error condition is surfaced by + placing the system in checkstop, it precludes any immediate participation + by the OS in handling the error (that is, no error capture, logging, + recovery, analysis, or notification by the OS). For this reason, the + machine check interrupt is preferred over going to the checkstop state. + However, checkstop may be necessary in certain situations where further + processing represents an exposure to loss of data integrity. To better + handle such cases, a special hardware mechanism may be provided to gather + and store residual error data, to be analyzed when the system goes + through a subsequent successful reboot. + + Less critical internal errors may also be signaled to the OS + through a platform-specific interrupt in the “Internal + Errors” class, or by periodic polling with the + event-scan RTAS function. + + Architecture Note: The machine check interrupt will not be listed + in the OF node for the “Internal Errors” class, since it is a + standard architectural mechanism. The machine check interrupt mechanism + is enabled from software or firmware by setting the MSRME bit =1. Upon + the occurrence of a machine check interrupt, bits in SRR1 will indicate + the source of the interrupt and SRR0 will contain the address of the next + instruction that would have been executed if the interrupt had not + occurred. Depending on where the error is detected, the machine check + interrupt may be surfaced from within the processor, via logical + connection to the processor machine check interrupt pin, or via a system + bus error indicator (for example, Transfer Error Acknowledge - + TEA). + + + + + R1--1. + + OSs must set + MSRME=1 prior to the occurrence of a machine check interrupt in order to + enable machine check processing via the + check-exception RTAS function. + + + Architecture Note: Requirement + is not applicable when the FWNMI + option is used. + + + + + + R1--2. + + For + hardware-detected errors, platforms must generate error indications as + described in + , unless the error can be handled + through a less severe platform-specific interrupt, or the nature of the + error forces a checkstop condition. + + + + + R1--3. + + Platforms which detect and report the + errors described in + must provide information to the OS + via the RTAS + check-exception function, using the reporting format + described in + . + + + + + R1--4. + + To prevent error + propagation and allow for synchronization of error handling, all + processors in a multi-processor system must receive any machine check + interrupt signaled via the external machine check interrupt pin. + + + + + + + Platform Implementation Notes: + + + + + + The intent of Requirement + is to define standard error + notification mechanisms for different hardware error types. For most + hardware errors, the signaling mechanism is the machine check interrupt, + although this requirement hints at the use of a less severe + platform-specific interrupt for some errors. The important point here is + actually whether the error can be handled through that interrupt. Simply + using an external interrupt to signal the error is not sufficient. The + hardware and RTAS also need to limit the propagation of corrupted data, + prevent loss of error state data, and support the cleanup and recovery of + such an error. Since the response to an external interrupt may be + significantly slower than a machine check, and in fact may be masked, the + error should not require immediate action on the part of the OS and/or + RTAS. In addition, external interrupts (except external machine check + interrupts) are reported to only one processor, so operations by the + other processors in an MP system should not be impacted by this error + unless they specifically try to access the failing hardware element. To + summarize, platforms should not use platform-specific interrupts to + signal hardware errors unless there is a complete hardware/RTAS platform + solution for handling such errors. + + + + + The intent of Requirement + is that most hardware errors would be + signaled simultaneously to all processors, so that processors could + synchronize the error handling process; that is, one processor would be + chosen to do the call to + check-exception, while the other processors remained + idle so that they would not interfere with RTAS while it gathered machine + check error data. While this is a straightforward wiring solution for + errors signaled via the external machine check interrupt pin, that is not + the case for internal processor errors or processor bus errors. + Typically, only one processor will see such errors. An internal processor + error can be identified with just the contents of SRR1, and so can be + handled without synchronization with other processors. Processor bus + errors, however, can be more difficult, especially if the error is + propagated up to the processor bus from a lower-level bus. In general, + such propagation should be avoided, and such errors should be signaled + through the machine check interrupt pin to ensure proper error + handling. + + + + +
+ Error Indication Mechanisms + + + describes the mechanisms by + which software will be notified of the occurrence of operational failures + during the types of data transfer operations listed below. The assumption + here is that the error notification can occur only if a hardware + mechanism for error detection (for example, a parity checker) is present. + In cases where there is no specific error detection mechanism, the + resulting condition, and whether the software will eventually recognize + that condition as a failure, is undefined. +   + + Error Indications for System Operations + + + + + + + + + + + + Initiator + + + + + Target + + + + + Operation + + + + + Error Type(if detected) + + + + + Indication to Software + + + + + Comments + + + + + + + + Processor + + + N/A + + + Internal + + + Various + + + Machine check + + + Some may cause checkstop + + + + + Processor + + + Memory + + + Load + + + Invalid address + + + Machine check + + +   + + + + + System bus time-out + + + Machine check + + +   + + + + + Address parity on system bus + + + Machine check + + +   + + + + + Data parity on system bus + + + Machine check + + +   + + + + + Memory parity or uncorrectable ECC + + + Machine check + + +   + + + + + Store + + + Invalid address + + + Machine check + + +   + + + + + System bus time-out + + + Machine check + + +   + + + + + Address parity on system bus + + + Machine check + + +   + + + + + Data parity on system bus + + + Machine check + + +   + + + + + External cache load + + + Memory parity or uncorrectable ECC + + + Machine check + + + Associated with Instruction Fetch or Data Load + + + + + External cache flush + + + Cache parity or + uncorrectable ECC + + + Machine check + + +   + + + + + External cache access + + + Cache parity or + uncorrectable ECC + + + Machine check + + + Associated with Instruction Fetch or Data Transfer + + + + + Processor + + + I/O + + + Load or Store + + + Various errors between the processor and the I/O + fabric + + + Machine check + + + I/O fabrics include hubs and bridges and interconnecting + buses or links. + + + + + Processor + + + I/O bus configuration space + + + Read + + + Various, except no response from IOA + + + Firmware receives a machine check, OS receives + all=1’s data along with a + Status of -1 from the RTAS call + + + If EEH is implemented and enabled, firmware does not get + a machine check and the PE is in the EEH Stopped State on + return from the RTAS call + + + + + No response from an IOA + + + All-1’s data returned, along with a + “Success” + Status from the RTAS call + + + If EEH is implemented and enabled, the PE is not in the + EEH Stopped State on return from the RTAS call + + + + + Write + + + Various, except no response from IOA + + + Firmware receives a machine check, OS receives a + Status of -1 from the RTAS call + + + If EEH is implemented and enabled, firmware does not get + a machine check and the PE is in the EEH Stopped State on + return from the RTAS call + + + + + No response from an IOA + + + Operation ignored, OS receives a “Success” + Status from the RTAS call + + + If EEH is implemented and enabled, the PE is in the EEH + Stopped State on return from the RTAS call + + + + + Processor + + + I/O bus; + I/O Space + or + Memory Space + + + Load + + + Various, except no response from IOA + + + Machine check + + + If EEH is implemented and enabled, no machine check is + received, all-1’s data is returned, and the PE enters the + EEH Stopped State + + + + + No response from an IOA + + + All-1’s data returned + + + Invalid address, broken IOA, or configuration cycle to + non-existent IOA; if EEH is implemented and enabled, the PE + enters the EEH Stopped State + + + + + Store + + + Various, except no response from IOA + + + Machine check + + + If EEH is implemented and enabled, no machine check is + received and the PE enters the EEH Stopped State + + + + + No response from IOA + + + Ignore Store + + + Invalid address, broken IOA, or configuration cycle to + non-existent IOA; if EEH is implemented and enabled, the PE + enters the EEH Stopped State + + + + + Processor + + + Invalid address (addressing an “undefined” + address area) + + + Load or Store + + + No response from system + + + Machine check + + +   + + + + + I/O + + + Memory + + + DMA - either direction + + + Various, including but not limited to: + + + + Invalid addr accepted by a bridge + + + + TCE extent + + + + TCE Page Mapping and Control mis-match or invalid + TCE + + + + + + Machine check unless reportable directly to the IOA in a + way that allows the IOA to signal the error to its device + driver + + + If EEH is implemented and enabled, no machine check is + received and the PE enters the EEH Stopped State + + + + + I/O + + + I/O + + + DMA - either direction + + + Various + + + Machine check unless reportable to master of the transfer + in a way that allows master to recover + + +   + + + + + I/O + + + Invalid address + + + DMA - either direction + + + No response from any IOA + + + PCI IOA + master-aborts + + + Signal device driver using an external interrupt + + + + + PCI IOA + + + - + + + Any + + + Internal, indicated by SERR# or ERR_FATAL + + + SERR# or ERR_FATAL, causing machine check + + + If EEH is implemented and enabled, no machine check is + received and the PE enters the EEH Stopped State + + + + +
+ + Implementation Note: IOAs should, whenever possible, detect the + occurrence of PCI errors on DMA and report them via an external interrupt + (for possible device driver recovery) or retry the operation. Since + system state has not been lost, reporting these errors via a machine + check to the CPUs is inappropriate. Some devices or device drivers may + cause a catastrophic error. Systems which wish to recover from these + types of errors should choose devices and device drivers which are + designed to handle them correctly. + +
+ +
diff --git a/Error Handling/sec_rtas_error_reporting_introduction.xml b/Error Handling/sec_rtas_error_reporting_introduction.xml new file mode 100644 index 0000000..5aa7600 --- /dev/null +++ b/Error Handling/sec_rtas_error_reporting_introduction.xml @@ -0,0 +1,40 @@ + + +
+ + Introduction + + This section describes the data formats used to report events and + errors from RTAS to the OS. A common format is used for errors and events + to simplify software both in RTAS and in the OS. Both errors and events + may have been analyzed to some degree by RTAS, and value judgments may + have been applied to decide how serious an error is, or even how to + describe it to the OS. These judgments are made by platform providers, + since only they know enough about the hardware to decide how serious a + problem it is, whether and how to recover from it, and how to map it onto + the abstracted set of events and errors that a system is required to know + about. There will be cases with some platforms where no reasonable + mapping exists, and platform features may not be fully supported by the + OS. In such cases, error reports may also be non-specific, leaving + platform-specific details to platform-aware software. + +
\ No newline at end of file diff --git a/Error Handling/sec_rtas_error_reporting_location_codes.xml b/Error Handling/sec_rtas_error_reporting_location_codes.xml new file mode 100644 index 0000000..36bddfd --- /dev/null +++ b/Error Handling/sec_rtas_error_reporting_location_codes.xml @@ -0,0 +1,37 @@ + + +
+ + Location Codes + + This document defines an architecture extension for physical + location codes. One use of location codes is to append failing location + information to error logs returned by the + event-scan and + check-exception RTAS services. Refer to + for more information on the + format and use of location codes. For event logs with Version 6 or later, + the location code of FRU call out is contained in the Primary SRC + section, FRU call out sub-section of the Platform Event Log + format. + +
diff --git a/Error Handling/sec_rtas_error_reporting_return_format.xml b/Error Handling/sec_rtas_error_reporting_return_format.xml new file mode 100644 index 0000000..d6819e0 --- /dev/null +++ b/Error Handling/sec_rtas_error_reporting_return_format.xml @@ -0,0 +1,4055 @@ + + +
+ + RTAS Error/Event Return Format + + This section describes in detail the return value retrieved by an + RTAS call to either the + event-scan or + check-exception function. + + The return value consists of a fixed part and an optional Extended + Error Report, described in the next section, which contains full details + of the error. The fixed part is intended to allow reporting the most + common problems in a simple way, which makes error detection and recovery + simple for OSs that want to implement a very simple error handling + strategy. At the same time, the mechanism is capable of providing full + disclosure of the error syndrome information for OSs which have a more + complete error handling strategy. + + RTAS can return at most one return code per invocation. If multiple + conditions exist, RTAS returns them in descending order of severity on + successive calls. + +
+ Reporting and Recovery Philosophy, and Description of + Fields + + All firmware implementations use a common error and event reporting + scheme, as described in detail below. It is not required that error + recovery be present in firmware implementations, nor is it required that + a high degree of error recovery or survival be undertaken by OSs. If such + behavior is desired, then specific platform-dependent handlers can be + loaded into the OS. However, this section defines return result codes and + a philosophy which can be used if aggressive error handling is + implemented in firmware. This section describes the fields of the Error + Report format, and the philosophy which should be applied in generating + return values from firmware or interpreting such return codes in an + OS. + + In general, an OS would look at the Disposition field first to see + if an error has been corrected already by firmware. If not corrected to + the OS’s satisfaction, the OS would examine the Severity field. + Based on that value, and optionally on any information it can use from + the Type and other fields, the OS will make a determination of whether to + continue or to halt operations. In either case, it may choose to log + information regarding the error, using the remaining fields and optional + Extended Error Log. + + The following sections describe the field values in + . + +
+ Version + + This field is used only to distinguish among present and potential + future formats for the remainder of the error report. This value will be + incremented if extensions are made to the format described here. The + primary function of this field is for future OSs to identify whether an + error report may contain some (unknown at present) feature that was added + after the initial version of this specification. + +
+ +
+ Severity + + This field represents the value judgment of firmware of how serious + the problem being reported should be considered by the OS. + + Errors which are believed to represent a permanent hardware failure + affecting the entire system are considered “FATAL.” OSs would + not attempt to continue normal operation after receiving notice of such + an error. OSs may not even be able to perform an orderly shutdown in the + presence of a Fatal error, though they may make a policy decision to + try. + + Less serious errors, but still causing a loss of data or state, are + considered “ERRORs.” In general, continuing after such an + error is questionable, since details of what has failed may not be + available, or if available, may not map nicely onto any ongoing activity + with which the OS can associate it. However, OSs may make a policy + decision (for example, based on the error Type, the Initiator, or the + Target) to continue operation after an Error. + + There are some types of errors, such as parity errors in memory or + a parity error on a transfer between CPU and memory, which occur + synchronously with the current process execution context. Such errors are + sometimes fatal only to the current thread of execution; that is, they + affect only the current CPU state and possibly that of any memory + locations being currently referenced. If that context of execution is not + essential to the system’s operation (for example, if an error trap + mechanism is available in the OS and can be triggered to recover the OS + to a known state), recovery and continuation may be possible. Or at + least, since the memory of the machine is in an undamaged state, the + system may be able to be brought down in an orderly fashion. Such errors + are reported as having Severity “ERROR_SYNC”. It is OS + dependent whether recovery is possible after such an error, or whether + the OS will treat it as a fatal problem. + + The “WARNING” return value indicates that a + non-state-losing error, either fully recovered by firmware or not needing + recovery, has occurred. No OS action is required, and full operation is + expected to continue unhindered by the error. Examples include corrected + ECC errors or bus transfer failures which were re-tried + successfully. + + The “EVENT” return value is the mechanism firmware uses + to communicate event information to the OS. The event may have been + detected by polling using + event-scan or on the occurrence of an interrupt by + calling + check-exception. In either case, the Error Return + value indicates the event which has occurred in the Type field. See the + Type description below for a description of specific events and their + expected handling. + + The “NO_ERROR” return value indicates that no error was + present. In this case, the remainder of the Error Return fields are not + valid and should not be referenced. + +
+ +
+ RTAS Disposition + + An aggressive firmware implementation may choose to attempt + recovery for some classes of error so an OS can continue operation in the + face of recoverable errors. If firmware detects an error for which it has + recovery code, it attempts such action before it returns a value to the + OS (that is, the mechanisms are linked in RTAS and cannot be separately + accessed). Note that Disposition is nearly independent from Severity. + Severity says how serious an error was, and Disposition says, regardless + of severity, whether or not the OS has to even look at it. In general, an + OS will first examine Disposition, then Severity. + + A return value of “FULLY RECOVERED” means that RTAS was + able to completely recover the machine state after the error, and OS + operation can continue unhindered. The severity of the problem in this + case is irrelevant, though for consistency a “FATAL” error + can never be “FULLY RECOVERED.” + + A return value of “LIMITED RECOVERY” means that RTAS + was able to recover the state of the machine, but that some feature of + the machine has been disabled or lost (for example, error checking), or + performance may suffer (for example, a failing cache has been disabled). + The RTAS implementation may return further information in the extended + error log format regarding what action was done or what corrective action + failed. In general, a conservative OS will treat this return the same as + “NOT RECOVERED,” and initiate shutdown. A less conservative + OS may choose to let the user decide whether to continue or to shut + down. + + A value of “NOT RECOVERED” indicates that the RTAS + either did not attempt recovery, or that it attempted recovery but was + unsuccessful. + +
+ +
+ Optional Part Presence + + This is a single flag, valid only if the 32-bit Error Return value + is located in memory, which indicates whether or not an Extended Error + Log Length field and the Extended Error Log follows it in memory. It will + be set on an in-memory return result from RTAS if and only if the RTAS + call indicated sufficient space to return the Extended Error Log, and the + RTAS implementation supports the Extended Error Log. + +
+ +
+ Initiator + + This field indicates, to the best ability of RTAS to determine it, + the initiator of a failed transaction. (Note that in the + “Initiator” field of + , the value “I/O” + indicates one of the defined I/O buses or IOAs. This field contains + finer-grained details of which type of I/O bus failed, if known, and + “UNKNOWN” if RTAS cannot tell.) + + In many of the newer LoPAR platforms, the platform error + notification and handling flow is asynchronous to the OS and software + execution flow, therefore the context of Initiator is not applicable to + the platform firmware. In those cases, the value of “(0) Unknown or + Not Applicable” is used for Initiator. In logs created with Version + 6 or later, more detailed information about the error is provided in the + Platform Event log format. + +
+ +
+ Target + + If RTAS can determine it, this field indicates the target of a + failed transaction. + + In many of the newer LoPAR platforms, the platform error + notification and handling flow is asynchronous to the OS and software + execution flow, therefore the context of Target is not applicable to the + platform firmware. In those cases, the value of “(0) Unknown or Not + Applicable” is used for Target. In logs created with Version 6 or + later, more detailed information about the error are provided in the + Platform Event log format. + +
+ +
+ Type + + This field identifies the general type of the error or event. In + some cases (for example, INTERN_DEV_FAIL), multiple possible events are + grouped together under a common return value. In such cases, + platform-aware software may use the Extended Error Log to distinguish + them. Non-platform-aware software will generally treat all errors of a + given type the same, so it generally will not need to access the Extended + Error Log information. + + In the table, the EPOW values are associated with a Severity of + EVENT. All other values will be associated with Severity values of FATAL, + ERROR, ERROR_SYNC, or WARNING, and may or may not be corrected by + RTAS. + + EPOW is an event type which indicates the potential loss of power + or environmental conditions outside the limits of safe operation of the + platform. See + for more information. + + The “Platform Error (224)”, introduced for Version 6, + generalizes that the error is identified by the platform and the specific + details are encoded in the Platform Event log format itself. + The “ibm,io-events (225)” defines a set of event + notifications which requires special handling by the OS. For this type of + event notification, the Platform Event Log contains the “IO + Events” section which identifies additional details associated with + the event. + + The “Platform information event (226)” indicates the + return log should be logged as “Information Log”. These logs + indicate key platform events and can be used for reference + purposes. + + The “Resource deallocation event (227)” indicates an + event notification to the OS that a specific hardware resource has + experienced recurring recoverable errors with a trend toward + unrecoverable. The OS should take action to deallocate the resource from + usage to prevent unrecoverable errors. For these types of event + notification, the Platform Event Log contains the “Logical Resource + Identification” section which identifies the “Logical + Entity” by Resource Type and Resource ID, associated with the + event. + + The “Dump notification event (228)” indicates that a + dump file is present in the platform and is available for retrieval by + the OS. For this type of event notification, the Platform Event Log + contains the “Dump Locator” section which contains additional + event specific information. + + Additional Type values will be added in future revisions of the + specification. If an OS does not recognize a particular event type, it + can examine the severity first, and then choose to ignore the event if it + is not serious. + +
+ +
+ Extended Event Log Length / Change Scope + + This optional 32-bit field is present in memory following the + 32-bit Event Return value if the Optional Part Presence flag is + “PRESENT”, and it indicates the length in bytes of the + Extended Event Log information which immediately follows it in memory. + The length does not include this field or the Event Return field, so it + may be zero. The field is also present for a resource change “Hot + Plug” event, such as a PRRN event, and then represents the scope of + a resource change. + +
+ +
+ RTAS Event Return Format Fixed Part + + The summary portion of the error return is designed to fit into a + single 32-bit integer. When used as a data return format in memory, an + optional Length field and Extended Error Log data may follow the summary. + The fixed part contains a “presence” flag which identifies + whether an extended report is present. + + In the table below, the location of each field within the integer + is included in parentheses after its name. Numerical field values are + indicated in decimal unless noted otherwise. + + + RTAS Event Return Format (Fixed Part) + <emphasis>(Continued)</emphasis> + + + + + + + + Bit Field Name (bit + number(s)) + + + + + Description, Values (Described in + ) + + + + + + + + Version (0:7) + + + A distinct value used to identify the architectural + version of message. + + + + + Severity (8:10) + + + Severity level of error/event being reported: + ALREADY_REPORTED (6) + FATAL (5) + ERROR (4) + ERROR_SYNC (3) + WARNING (2) + EVENT (1) + NO_ERROR (0) + reserved for future use (7) + + + + + RTAS Disposition (11:12) + + + Degree of recovery which RTAS has performed prior to + return after an error (value is FULLY_RECOVERED if no error is + being reported): + FULLY_RECOVERED(0) + Note: Cannot be used when Severity is + “FATAL”. + LIMITED_RECOVERY(1) + NOT_RECOVERED(2) + reserved for future use (3) + + + + + Optional_Part_Presence (13) + + + Indicates if an Extended Error Log Length and Extended + Error Log follows this 32-bit quantity in memory: + PRESENT (1): The optional Extended Error Log is + present. + NOT_PRESENT (0): The optional Extended Error Log is not + present. + + + + + Reserved (14:15) + + + Reserved for future use (0:3) + + + + + Initiator (16:19) + + + Abstract entity that initiated the event or the failed + operation: + UNKNOWN (0): Unknown or Not Applicable + CPU (1): A CPU failure (in an MP system, the specific CPU + is not differentiated here) + PCI (2): PCI host bridge or PCI IOA + Reserved -- do not reuse (3) + MEMORY (4): Memory subsystem, including any caches + Reserved -- do not reuse (5) + HOT PLUG (6) + Reserved for future use (7-15) + + + + + Target (20:23) + + + Abstract entity that was apparent target of failed + operation (UNKNOWN if Not Applicable): Same values as Initiator + field + + + + + Type (24:31) + + + General event or error type being reported: +   + Internal Errors: + RETRY (1): too many tries failed, and a retry count + expired + TCE_ERR (2): range or access type error in an access + through a TCE + INTERN_DEV_FAIL (3): some RTAS-abstracted device has + failed (for example, TOD clock) + TIMEOUT (4): intended target did not respond before a + time-out occurred + DATA_PARITY (5): Parity error on data + ADDR_PARITY(6): Parity error on address + CACHE_PARITY (7): Parity error on external cache + ADDR_INVALID(8): access to reserved or undefined address, + or access of an unacceptable + type for an address + ECC_UNCORR (9): uncorrectable ECC error + ECC_CORR (10): corrected ECC error + RESERVED (11-63): Reserved for future use + Environmental and Power Warnings: + EPOW(64): See Extended Error Log for sensor value + RESERVED (65-95): Reserved for future use + Reserved -- do not reuse (96-159) +   + Platform Resource Reassignment (160) -- includes Change + Scope in bits 32-63 +   + Reserved for future use (through-223) +   + Platform Error (224) (for Version 6 or later) + ibm,io-events (225) (for Version 6 or later) + Platform information event (226) (for Version 6 or + later) + Resource deallocation event (227) (for Version 6 or + later) + Dump notification event (228) (for Version 6 or + later) +   + Vendor-specific events(229-255): Non-architected +   + Other (0): none of the above + + + + + Extended Event Log Length / Change Scope + (32:63) + + + Length in bytes of Extended Event Log information which + follows (see + ) OR the scope + parameter to be input the + ibm,update-nodes RTAS to retrieve the nodes + that were changed by selected “Hot Plug” + events. + + + + +
+ + Typically, most OSs care about, and have handlers for, only a few + specific errors. Since coding of an error is unique in the above scheme, + an OS can check for specific errors, then if nothing matches exactly, + look at more generic parts of the error message. This permits generic + error message generation for the user, providing the basic information + that RTAS delivered to the OS. Platforms may provide more complete error + diagnosis and reporting in RTAS, combined with off-line diagnostics which + take advantage of the information reported from previous failures. + +
+ +
+ +
+ Version 6 Extensions of Event Log Format + +
+ RTAS General Extended Event Log Format, Version 6 + + The following section defines new extensions to the event log + format which are identified by a Version number 0x06 in the first byte in + the returned buffer (byte 0 of the fixed-part information). The following + tables define extended error log formats for Version 6, by which the RTAS + can optionally return detailed information to the software about a + hardware error condition. Other versions will be defined in following + sections of this chapter. This format is also intended to be usable as + residual error log data in NVRAM, so that the OS could alternatively + retrieve error data after an error event which caused a reboot. + + Platforms indicate the maximum length of the error log buffer in + the + “rtas-error-log-max” RTAS property in the + OF device tree, so that the OS can allocate a buffer large enough to hold + the extended error log data when calling the RTAS + event-scan or + check-exception functions. If the allocated buffer is + not large enough to hold all the error log data, the data is truncated to + the size of the buffer. + + Requirement + and + require that four bytes of the + vendor-specific format contain a unique identifier for the company that + has defined the format. The description of the “name” string + in + provides alternatives for + defining this identifier. Examples of these unique identifiers include + stock ticker labels and Organizationally Unique Identifiers (OUIs). Since + the different options in IEEE 1275 provide different guarantees of + uniqueness and different identifier lengths, the company should use its + best judgement in selecting a unique identifier that fits the four + character field. The length of this field is limited to 4 bytes to + conserve available log data space. As an example, if Allied Information + Monitoring (a fictional name for the purposes of this example) were to + create a vendor-specific log format 12, then bytes 12-15 of such a log + may contain “AIM<NULL>”. + + This identifier is intended to apply to the company that defines + the specific format, and may be used by other companies that wish to be + compatible with that format. For example, if another company wanted to + take advantage of existing support in one of the OSs by using an + AIM-specific error log format for logs generated on their own platform, + their log would have to contain an identifier of + “AIM<NULL>”. + + + + + R1--1. + + Platforms which + support Version 6 of the Extended Event Log Format must do so by + including a 0x06 value in the first byte of the RTAS Event Return Format + (Fixed Part) and using the formats described in + (and all subsections under that + section). + + + Software Implementation Note: OSs running on + platforms which support Version 6 of the Extended Event Log Format must + ensure that the length parameter passed in the + event-scan RTAS call be at least 2 KB. + + + + + R1--2. + + If the length parameter on the RTAS + event-scan call for returning data using Version 6 of + the Extended Event Log Format is insufficient to return all the data the + platform would otherwise make available, the platform must truncate the + data by eliminating optional sections entirely rather than truncating a + section. + + + + + R1--3. + + All event logs returning a Version 6 + Platform Event Log format must include the Main-A and Main-B Sections. + Other sections are optional depending on the specific event type as + specified in Requirement + . + + + + + R1--4. + + The following + sections must be provided as indicated: + + + + For the Platform error Type, the Primary Service Reference Code + (SRC) section must be provided. + + + + For the ibm,io-events Type, the IO Events section must be + provided. + + + + For the Resource deallocation event Type, the Logical Resource + Identification section must be provided. + + + + For the Dump notification event Type, the Dump Locator section + must be provided. + + + + For the EPOW Type, the EPOW section must be provided. + + + + + + + + + + + Software Implementation Note: All fields in the + Platform Event Log marked “Platform specific information” or + “Other platform specific information sections” contain + information reserved for platform or platform Service Application use + only. That information is not defined in this document. Information in + these fields should be ignored by the OS. + + + Software Implementation and Architecture Note: All + fields currently marked “Reserved” are set to zero by RTAS + and are ignored by the OS. The reserved values in the defined fields in + the Platform Event Log may be defined in the future in this architecture + document for platform specific usage without change to this + architecture. + + + RTAS General Extended Event Log Format, Version 6 + + + + + + + + Byte + + + Bit + + + Description + + + + + + + 0 + + + 0 + + + 1 = Log Valid + + + + + 1 + + + 1 = Unrecoverable Error + + + + + 2 + + + 1 = Recoverable (correctable or successfully retried) + Error + + + + + 3 + + + 1 = Unrecoverable Error, Bypassed - Degraded operation + (e.g. CPU/memory taken off-line, bad cache bypassed, + etc.) + + + + + 4 + + + 1 = Predictive Error - Error is recoverable, but + indicates a trend toward unrecoverable failure (e.g. + correctable ECC error threshold, etc.) + + + + + 5 + + + 1 = “New” Log (always 1 for data returned + from RTAS) + + + + + 6 + + + 1 = Big-Endian + + + + + 7 + + + Reserved + + + + + 1 + + + 0:7 + + + Reserved + + + + + 2 + + + 0 + + + Set to 1 - (Indicating log is in PowerPC format) + + + + + 1:3 + + + Reserved + + + + + 4:7 + + + Log format indicator, defined format used for byte + 12-2047: + 0-13, 15 Reserved + 14: Platform Event Log + + + + + 3 + + + 0:7 + + + Reserved + + + + + 4-11 + + +   + + + Reserved + + + + + 12-15 + + +   + + + Company identifier of the company that has defined the + format for this vendor specific log type. + + + + + 16-2047 + + +   + + + Detail vendor specific log data. If byte 2, bits 4:7, + above, are a value of 14 (Platform Event Log) and bytes 12-16 + are “IBM ”, then see + for the content of + this field. + + + + +
+ +
+ +
+ Platform Event Log Format, Version 6 + + This format is used when byte 2, bits 4:7, of the RTAS General + Extended Event Log Version 6 are a value of 14 (Platform Event + Log). + + + Overview of Platform Event Log Format, Version + 6 + + + + + + + + Byte + + + Length in Bytes + + + Description + + + + + + + 12-15 + + + 4 + + + Contains ASCII characters + “IBM<NULL>”. + + + + + 16-63 + + + 48 + + + Main-A section (ID = 'PH'). Required section. See + for the + format. + + + + + 64-87 + + + 24 + + + Main-B section (ID = 'UH'). Required, always follow + Main-A section. See + for the + format. + + + + + 88-103 + + + 16 + + + Logical Resource Identification section (ID = 'LR'). + Optional, present only for Resource deallocation event + notification. If present, this section always follows Main-B + section. See + for the + format. + + + + + 104- + + + 80+ + optional FRU call out sub-section + + + Primary SRC section (ID = 'PS'). Required for + “Platform Error” event type, optional for other + event types. If present, this section always follows Main-B + section. See + for the + format. + + + + +   + + + 64 + + + Dump Locator section (ID = 'DH') Optional, present only + for dump event notification. If present, this section follows + Main-B or Primary SRC section. See + for the + format. + + + + +   + + + 20 + + + EPOW section (ID = 'EP'). Optional, present only for + “EPOW” interrupt event notification. If present, + this section follows Main-B section. See + for the + format. + + + + +   + + + Variable + + + IO Events section (ID = 'IE'). Optional, present only for + “ibm,io-events” interrupt event notification. If + present, this section follows Main-B section. See + for the + format. + + + + +   + + + 28 + + + Failing Enclosure MTMS section (ID = 'MT'). Required for + errors only. If present, this section follows Main-B section or + Primary SRC. See + for the + format. + + + + +   + + + 28 + + + Impacted partition description section (ID = 'LP''). + Required for errors only. If present, this section follows + Main-B section or Primary SRC + + + + +   + + + 40 + + + Machine Check Interrupt section (ID = 'MC'). Optional for + “Platform Error” event types with ERROR_SYNC + severity caused by a machine check interrupt. If present, this + section follows the Main-B. See + . + + + + + ...- 2047 + + + Variable + + + Other platform specific information sections. + Optional. + + + + +
+ +
+ +
+ Platform Event Log Format, Main-A Section + + + Platform Event Log Format, Version 6, Main-A + Section + + + + + + + + Offset + + + Length in Bytes + + + Description + + + + + + + 0x00 + + + 2 + + + Section ID: A two-ASCII character field which uniquely + identifies the type of section. + value = 'PH' + + + + + 0x02 + + + 2 + + + Section length: Length in bytes of the section, including + the section ID. + value = 48 + + + + + 0x04 + + + 1 + + + Section Version + + + + + 0x05 + + + 1 + + + Section sub-type + + + + + 0x06 + + + 2 + + + Creator Component ID + + + + + 0x08 + + + 4 + + + Log creation date in BCD format: YYYYMMDD, where YYYY = + year, MM = month 01 - 12, DD = day 01 - 31. + + + + + 0x0C + + + 4 + + + Log creation time in BCD format: HHMMSS00, where HH = + hour 00 - 23, MM = minutes 00 - 59, SS = s econds 00 -5 9, 00 = + hundredth of seconds 00 - 99. + + + + + 0x10 + + + 8 + + + Platform specific information + + + + + 0x18 + + + 1 + + + Creator ID -- subsystem creating the log entry + represented as a single ASCII character + 'E' = Service Processor + 'H' = Hypervisor, + 'W' = Power Control + 'L' = Partition Firmware + + + + + 0x19 + + + 2 + + + Reserved + + + + + 0x1B + + + 1 + + + Section count -- number of sections comprising log entry, + including this section + + + + + 0x1C + + + 4 + + + Reserved + + + + + 0x20 + + + 8 + + + Platform specific information + + + + + 0x28 + + + 4 + + + Platform Log ID (PLID) + Unique identifier for a single event. Note that it is + possible for multiple log entries to be made for a single + error/event. The entries are linked to the same event by using + the same PLID. + + + + + 0x2C + + + 4 + + + Platform specific information + + + + +
+ +
+ +
+ Platform Event Log Format, Main-B Section + + + Platform Event Log Format, Version 6, Main-B + Section + + + + + + + + Byte + + + Length in Bytes + + + Description + + + + + + + 0x00 + + + 2 + + + Section ID: A two-ASCII character field which uniquely + identifies the type of section. + value = 'UH' + + + + + 0x02 + + + 2 + + + Section length: Length in bytes of the section, including + the section ID. + value = 24 + + + + + 0x04 + + + 1 + + + Section Version + + + + + 0x05 + + + 1 + + + Section subtype + + + + + 0x06 + + + 2 + + + Creator Component ID + + + + + 0x08 + + + 1 + + + Subsystem ID: For error events, this is the failing + subsystem. For non-error events, this is the subsystem + associated with the event. + 0x10 - 0x1F = Processor subsystem including internal + cache + 0x20 - 0x2F = Memory subsystem including external + cache + 0x30 - 0x3F = I/O subsystem (hub, bridge, bus) + 0x40 - 0x4F = I/O adapter, device and peripheral + 0x50 - 0x5F = CEC hardware + 0x60 - 0x6F = Power/Cooling subsystem + 0x70 - 0x79 = Others subsystem + 0x7A - 0x7F = Surveillance Error + 0x80 - 0x8F = Platform Firmware + 0x90 - 0x9F = Software + 0xA0 - 0xAF = External environment + 0xB0 - 0xFF = Reserved + + + + + 0x09 + + + 1 + + + Platform specific information + + + + + 0x0A + + + 1 + + + Event/Error Severity (see additional description + following the table) + 0x00 = Informational or non- error Event. This field must + be 0x00 for non-error event. Use Event Sub-type field to + specify unique event. + 0x1X = Recovered Error + 0x10 = Recovered Error, general + 0x14 = Recovered Error, spare capacity utilized + 0x15 = Recovered Error, loss of entitled capacity + 0x2X = Predictive Error + 0x20 = Predictive Error, general + 0x21 = Predictive Error, degraded performance + 0x22 = Predictive Error, fault may be corrected after + platform re-boot + 0x23 = Predictive Error, fault may be corrected after + boot, degraded performance + 0x24 = Predictive Error, loss of redundancy + 0x4X = Unrecoverable Error + 0x40 = Unrecoverable Error, general + 0x41 = Unrecoverable Error, bypassed with degraded + performance + 0x44 = Unrecoverable Error, bypassed with loss of + redundancy + 0x45 = Unrecoverable Error, bypassed with loss of + redundancy and performance + 0x48 = Unrecoverable Error, bypassed with loss of + function + 0x6X = Error on diagnostic test + 0x60 = Error on diagnostic test, general + 0x61 = Error on diagnostic test, resource may produce + incorrect results + All other values = reserved + + + + + 0x0B + + + 1 + + + Event Sub-Type (primarily used when Event Severity = + 0x00, see additional description following the table) + 0x00 = not applicable. + 0x01 = Miscellaneous, Information Only + 0x08 = Dump Notification (Dump may also be reported on + Error event) + 0x10 = Previously reported error has been corrected by + system + 0x20 = System resources manually deconfigured by + user + 0x21 = System resources deconfigured by system due to + prior error event + 0x22 = Resource deallocation event notification + 0x30 = Customer environmental problem has returned to + normal + (e.g. input power restored, ambient temperature back + within limits) + 0x40 = Concurrent Maintenance Event + 0x60 = Capacity Upgrade Event + 0x70 = Resource Sparing Event + 0x80 = Dynamic Reconfiguration Event (generated by + RTAS) + 0xD0 = Normal system/platform shutdown or powered + off + 0xE0 = Platform powered off by user without normal + shutdown (abnormal power off) + All other values = reserved + + + + + 0x0C + + + 4 + + + Platform specific information + + + + + 0x10 + + + 2 + + + Reserved + + + + + 0x12 + + + 2 + + + Error Action Flags (see additional description following + the table) + bit 0 (0x8000) = 1, Service Action (customer + notification) Required + bit 1 (0x4000) = 1, Hidden Error - exclusive with SA + Required (bit 0) + bit 2 (0x2000) = 1, Report Externally (send to HMC and + hypervisor) + bit 3 (0x1000) = 1, Don't report to hypervisor (only + report to HMC) + (only meaningful when (bit 2) Report Externally is + set) + bit 4 (0x0800) = 1, Call Home Required + (only valid if (bit 0) SA Required is set) + bit 5 (0x0400) = 1, Error Isolation Incomplete. Further + analysis required. + bit 6 (0x0200) = 1, Deprecated. + bit 7 (0x0100) = 1, Reserved + bit 8, 9 = Platform specific information + bit 10-15 = Reserved + + + + + 0x14 + + + 4 + + + Reserved + + + + +
+ +
+ Error/Event Severity + + This field indicates the severity of the error event and the impact + of the error to the platform (if applicable). + + Non-error or Informational Event: + This value indicates an event + that is a non-error event. Informational or user action event log entries + must use this value. The Event Type field provides additional event + information. + + Recovered Error, general: + This value indicates an error event that + has been automatically recovered or corrected by the platform hardware + and/or firmware, e.g. ECC, internal spare or redundancy, cache line + delete, boot time array repair, etc. No service action is required for + this type of error. In general, when this value is used, the Error Action + Flags has the value of “Hidden Error”. An event log with this + value is used primarily for error thresholding design and code debug or + as a record to indicate error frequency or trend. + + + Recovered Error, spare capacity utilized: + This value + indicates that an error on a resource has been recovered by utilizing + another resource not currently assigned for use (spare). The failing + component is to be considered permanently in an error state. For example, + a faulty instruction on one processor may be checkpointed and loaded into + a spare processor, continuing the operations of the faulty one. In this + case the failing component is considered permanently in an error + state. + + + Recovered Error, loss of entitled capacity: + This value indicates that an error on a resource has been recovered by + utilizing another resource already in use by the system. The failing + component is to be considered permanently in an error state. This results + in a loss of capacity in the partition that receives the error. For + example, a processor already in use may take over the operations of a + faulty one. Loss of the faulty processor in the system then results in + less capacity being available to the partition receiving the error event. + Typically this event would have an event sub-type of “Resource + deallocation event notification” and the revised amount of entitled + capacity would be found in the Logical Resource Identification Section, + Entitled Capacity field. + + Predictive Error, general: + This value indicates an event that has + been automatically recovered or corrected by the platform hardware and/or + firmware. However, the frequency of the errors indicates a trend toward + (or potential) platform unrecoverable error. A deferred service or repair + action is required. The automatic platform recovery actions have no + impact to system performance (e.g. ECC, CRC, etc.), or the impact is + unknown. + + Predictive Error, degraded performance: + This value indicates an + error event that has been automatically recovered or corrected by the + platform hardware and/or firmware. However, the frequency of the errors + (i.e. over threshold) indicates a trend toward (or potential) platform + unrecoverable error. A deferred service or repair action is required. The + automatic platform recovery actions are impacting/degrading system + performance. + + Predictive Error, fault may be corrected after + platform re-boot: + This value indicates an error event that has been automatically recovered + or corrected by the platform hardware and/or firmware. However, the + frequency of the errors (i.e. over threshold) indicates a trend toward + (or potential) platform unrecoverable error. A deferred service or repair + action is required. The hardware fault may be corrected after platform + re-boot as part of the repair action. If the fault cannot be corrected + after re-boot, then a part replacement is required. The automatic + platform recovery actions have no impact to system performance (e.g. ECC, + CRC, etc.), or the impact is unknown. + + Predictive Error, fault may be corrected + after platform re-boot, degraded performance: + This value indicates an error event that has been + automatically recovered or corrected by the platform hardware and/or + firmware. However, the frequency of the errors (i.e. over threshold) + indicates a trend toward (or potential) platform unrecoverable error. A + deferred service or repair action is required. The hardware fault may be + corrected after platform re-boot as part of the repair action. If the + fault cannot be corrected after re-boot, then a part replacement is + required. The automatic platform recovery actions are impacting/degrading + the system performance. + + Predictive Error, loss of redundancy: + This value indicates an error + event that has been automatically recovered or corrected by the platform + hardware and/or firmware. However, the frequency of the errors (i.e. over + threshold) caused a loss in hardware redundancy. Future error in this + subsystem may causes platform unrecoverable error. A deferred service or + repair action is required to restore redundancy. The loss of redundancy + may or may not impact system performance. + + Unrecoverable Error, general: + This value indicates an error event + that is unrecoverable or uncorrectable by the platform hardware and/or + firmware. The hardware or platform resource with the error cannot be + deconfigured from the system. If the error is intermittent or soft, the + platform may be able to re-boot successfully and resume. A service or + repair action is required as soon as possible to correct the + error. + + Unrecoverable Error, bypassed with degraded + performance: This value + indicates an error event that is unrecoverable or uncorrectable by the + platform hardware and/or firmware. However, the hardware or platform + resource with the error has been deconfigured from the system. The + platform can be IPLed or re-IPLed with the error bypassed. System + performance is degraded due to the deconfigured platform resource(s) e.g. + processor, cache, memory, etc. A deferred service or repair action is + required. + + Unrecoverable Error, bypassed with loss + of redundancy: This value + indicates an error event that is unrecoverable or uncorrectable by the + platform hardware and/or firmware. However, the hardware or platform + resource with the error can be deconfigured from the system. The platform + can be IPLed or re-IPLed with the error bypassed. The deconfigured + platform resource(s) resulted in loss of redundancy (e.g. Redundant FSP + with static fail-over) with no loss of system performance. A deferred + service or repair action is required. + + Unrecoverable Error, bypassed with loss + of redundancy + performance: + This value indicates an error event that is unrecoverable or + uncorrectable by the platform hardware and/or firmware. However, the + hardware or platform resource with the error can be deconfigured from the + system. The platform can be IPLed or re-IPLed with the error bypassed. + The deconfigured platform resource(s) resulted in loss of redundancy and + system performance. A deferred service or repair action is + required. + + Unrecoverable Error, bypassed with loss + of function: This value + indicates an error event that is unrecoverable or uncorrectable by the + platform hardware and/or firmware. However, the hardware or platform + resource with the error can be deconfigured from the system. The platform + can be IPLed or re-IPLed with the error bypassed. The deconfigured + platform resource(s) resulted in loss of platform or system function. A + deferred service or repair action is required. + + Error on diagnostic test, general: + This value indicates an error + event that is detected during a diagnostic test. Impact to the system is + undefined or unknown. + + Error on diagnostic test, resource may + produce incorrect results: + This value indicates an error event that is detected during a diagnostic + test. The error may produce incorrect computational results (e.g. + processor floating point unit test error). + +
+ +
+ Event Sub-Type + + This field provides additional information on the non-error event + type. + + Not applicable: + This value is used when the event is associated + with an error. Error/Event Severity field and SRC section provide + additional error information. + + Miscellaneous, Information Only: + This value is used when the event + is “for information only” or the event description doesn't + fit into any other defined values in this field. + + Dump Notification: + This value is used by the hypervisor or + partition firmware as a “Dump Notification” event to the OS + that a dump file is present in the platform for retrieval by the OS. This + value is used by the HMC as a “Dump Notification” event to + the Service Application to indicate a dump file is present for + transmission to the manufacturer. + + Previously reported error has been + corrected by system: This value + is used by the platform firmware to indicate that the error event that + was previously reported has been corrected by the platform. On a + subsequent platform boot, this event type is logged to indicate that the + array was successfully repaired. + + System resources manually deconfigured + by user: This value is used + by the platform firmware to indicate that a subset of platform + resource(s) was/were deconfigured due to user's request (e.g. via + platform ASM menu). The deconfigured resource(s) is/are not associated + with error detected by the platform. The event is a reminder to the user + that the platform is running with partial capacity. + Note: The platform + provides this user option for platform performance testing + purpose. + + System resources deconfigured by + system due to prior error event: + This value is used by the platform firmware to indicate that the platform + is IPLed with resource(s) deconfigured due to error detected and reported + previously. The event is a reminder to the user that the platform + requires service. + + Resource deconfiguration notification: + This value is used by + partition firmware as an “Event Notification” to the OS that + a specified resource (e.g. processor, memory page, etc.) currently used + by the OS should be deallocated due to predictive error. A Logical + Resource Identification section is included in the event log to indicate + the Resource Type and ID. + + Customer environmental problem has + returned to normal: This value + is used by the platform firmware to indicate that a customer + environmental problem (e.g. utility power, room ambient temperature, + etc.) detected and reported previously, has returned to normal. + + Concurrent Maintenance: + This value is used by the platform firmware + to indicate any non-error event associated with concurrent maintenance + activity. + + Capacity Upgrade Event: + This value is used by the platform firmware + to indicate any non-error event associated with capacity upgrade + activity. + + Resource Sparing Event: + This value is used by the platform firmware + to indicate any non-error event associated with platform resource sparing + activity. + + Dynamic Reconfiguration Event: + This value is used by the partition + firmware to indicate any significant but non-error event associated with + dynamic reconfiguration activity. + Implementation Note: Due to limited + platform storage resource, non-error event log associated with a logical + partition will be reported to the OS but may not be stored in the + platform. + + Normal system/platform shutdown or + powered off: This value is used + by the platform firmware to indicate any non-error event associated with + normal system/platform shutdown or powered off activity initiated by the + user. + + Platform powered off by user without + normal shutdown (abnormal powered off): + This value is used by the platform firmware to indicate + that the platform is abnormally powered off by the user. + +
+ +
+ Error Action Flags + + The following are the definitions of the actions taken for the + various Error Action Flags. + + Report Externally - + This flag instructs the service processor + (error logger component) to send the error to the service application + (e.g. service focal point(s) or FNM error analyzer). If this flag is set, + the SP always sends the error: + + + + + To the “managing HMC(s)” if one (or multiple) + exists. + + + + + And to the hypervisor (unless the “Don't report to + hypervisor” flag is also set). + + + + + Service Action Required - + This flag instructs the Service + application that some service action is required by either the customer + or by the manufacturer’s service personnel. This is equivalent to + saying Customer Notification is required. Contrast this flag with the + “Call Home Required” flag. + + Call Home Required - + This flag indicates that the error requires + service and a Call Home Operation is to be performed. There are + additional policies used in combination with this flag: what subsystem + performs the Call Home, what is sent and where it is sent. + + Hidden Error - + This flag allows errors to be placed in a + partition's OS error log, but still remain hidden from the customer. This + is a legacy function and the partition firmware for must filter errors + marked “Hidden” and not forward these errors marked with this + flag to the OS. Note that this flag has no impact on the SP reporting + errors to either the HMC or hypervisor or for the hypervisor reporting + errors to partitions. + + Don't report Error to hypervisor - + While a partition is booting and + before it is functional (e.g. no OS error logging available), partition + errors may be sent through the hypervisor to the Service Processor). + These partition errors (and only partition errors) may be marked with + this flag to indicate that they need not be sent back to the hypervisor. + This is due to the error scope being limited to the failing partition and + the hypervisor has already taken the appropriate actions. + + Incomplete Information for Error + Isolation - Some errors are not + contained to a single enclosure and require error isolation from an + entity with broader system view / scope. + + Software Error - + This flag is used by the partition error logger to + indicate to the error is most likely to be caused by the software. When + both Software Error and Hardware Error flags are set, the error is caused + by either software or hardware. The Software Error and Hardware Error + flags are used to trigger the manufacturer’s support system to + automatically download software or firmware fixes. + + Hardware Error - + This flag is used by the partition error logger to + indicate to the error is most likely to be caused by the hardware. The + Software Error and Hardware Error flags are used to trigger the + manufacturer’s support system to automatically download software or + firmware fixes. + +
+ +
+ +
+ Platform Event Log Format, Logical Resource + Identification section + + + Platform Event Log Format, Version 6, Logical + Resource Identification Section + + + + + + + + Offset + + + Length in Bytes + + + Description + + + + + + + 0x00 + + + 2 + + + Section ID: A two-ASCII character field which uniquely + identifies the type of section. + value = 'LR' + + + + + 0x02 + + + 2 + + + Section length: Length in bytes of the section, including + the section ID. + value = 20 + + + + + 0x04 + + + 1 + + + Section Version + + + + + 0x05 + + + 1 + + + Section subtype + + + + + 0x06 + + + 2 + + + Creator Component ID + + + + + 0x08 + + + 1 + + + Resource Type + 0x10: Processor + 0x11: Shared processor + 0x40: Memory page + 0x41: Memory LMB + All other values = reserved + + + + + 0x09 + + + 1 + + + Reserved + + + + + 0x0A + + + 2 + + + Entitled Capacity: Hundredths of a CPU (only used for + Resource Type = Shared processor, value = 0x0000 for + others) + + + + + 0x0C + + + 4 + + + Logical CPU ID: for resource type = processor + DRC Index, for resource type = memory LMB + Memory Logical Address (bit 0-31), for resource type = + memory page + + + + + 0x10 + + + 4 + + + Memory Logical Address (bit 32-64)), for resource type = + memory page + + + + +
+ +
+ +
+ Platform Event Log Format, Primary SRC Section + + + Platform Event Log Format, Version 6, Primary SRC + Section + + + + + + + + Offset + + + Length in Bytes + + + Description + + + + + + + 0x00 + + + 2 + + + Section ID: A two-ASCII character field which uniquely + identifies the type of section. + value = 'PS' + + + + + 0x02 + + + 2 + + + Section length: Length in bytes of the section, including + the section ID. + value = 80 + optional FRU call out sub section + + + + + 0x04 + + + 1 + + + Section Version + + + + + 0x05 + + + 1 + + + Section Subtype + + + + + 0x06 + + + 2 + + + Creator component ID + + + + + 0x08 + + + 1 + + + SRC Version + + + + + 0x09 + + + 1 + + + SRC Flags + bit 0:6 = Platform specific information + bit 7 = 1: Additional/Optional sub-sections + present + + + + + 0x0A + + + 6 + + + Platform specific information + + + + + 0x10 + + + 4 + + + Extended Reference Code hex data word 2 (required) + + + + + 0x14 + + + 4 + + + Extended Reference Code hex data word 3 (optional) + + + + + 0x18 + + + 4 + + + Extended Reference Code hex data word 4 (optional) + + + + + 0x1C + + + 4 + + + Extended Reference Code hex data word 5 (optional) + + + + + 0x20 + + + 4 + + + Extended Reference Code hex data word 6 (optional) + + + + + 0x24 + + + 4 + + + Extended Reference Code hex data word 7 (optional) + + + + + 0x28 + + + 4 + + + Extended Reference Code hex data word 8 (optional) + + + + + 0x2C + + + 4 + + + Extended Reference Code hex data word 9 (optional) + + + + + 0x30 + + + 32 + + + Primary Reference Code: 32 byte ASCII character + (required) + + + + + Additional/Optional Sub section for FRU call out (present + only for “Platform Error” event type) + + + + + 0x00 + + + 1 + + + Sub section ID = C0 for FRU call out + + + + + 0x01 + + + 1 + + + Platform specific information + + + + + 0x02 + + + 2 + + + Length of sub section: expressed in # of words (4 bytes), + from Sub section ID field + + + + +   + + + FRU call out structure length + + + FRU call out 1 (see FRU call out structure format + below) + + + + +   + + +   + + + FRU call out 2 (call out 2-10 are optional) + + + + +   + + +   + + + ... + + + + +   + + +   + + + FRU call out 10 (maximum) + + + + +
+ + + Platform Event Log Format, Version 6, FRU Call-out + Structure + + + + + + + + Offset + + + Length in Bytes + + + Description + + + + + + + 0x00 + + + 1 + + + Call-out Structure length, in bytes including all fields, + including this one. + + + + + 0x01 + + + 1 + + + Call-out Type / Flags + bits 0-3: Call-out structure type + 0b0010 = this structure + bit 4 = 1 FRU Identity (ID) Substructure field included + in this FRU Call-out structure + bit 5 = 1 Other platform-only use substructure field + present following FRU ID substructure + bit 6-7 = 0b11: Other platform-only use substructure + field present following FRU ID substructure + + + + + 0x02 + + + 1 + + + FRU Replacement or Maintenance Procedure Priority + (expressed as an ASCII character, see additional description + following the table) + 'H' = High priority and mandatory call-out. + 'M' = Medium priority. + 'A' = Medium priority group A (1st group). + 'B' = Medium priority group B (2nd group). + 'C' = Medium priority group C (3rd group). + 'L' = Low priority. + + + + + 0x03 + + + 1 + + + Length of Location Code field - must be a multiple of + 4. + + + + + 0x04 + + + variable + max=80 + + + Location Code + NULL terminated ASCII string. May be up to 80 characters + including the NULL. Padded with extra NULLs to 4-byte + boundary. + + + + + FRU Identity Substructure follow: + + + + + 0x00 + + + 2 + + + Substructure Type (2 ASCII Characters) + 'ID' = FRU Identity Substructure + + + + + 0x02 + + + 1 + + + Substructure length (variable, several optional fields - + see flags below) + + + + + 0x03 + + + 1 + + + Flags + bits 0-3: Failing component Type (see additional + description following the table) + 0b0000: reserved + 0b0001: “normal” hardware FRU + 0b0010: code FRU + 0b0011: configuration error, configuration procedure + required + 0b0100: Maintenance Procedure required + 0b1001: External FRU + 0b1010: External code FRU + 0b1011: Tool FRU + 0b1100: Symbolic FRU + 0b1111: Reserved for expansion + all other values reserved + bit 4 (0x08) = 0b1: FRU Stocking Part Number supplied + (mutually exclusive with bit 6) + bit 5 (0x04) = 0b1: CCIN supplied (only valid if bit 4 = + 0b1) + bit 6 (0x02) = 0b1: Maintenance procedure call out + supplied (mutually exclusive with FRU p/n) + bit 7 (0x01) = 0b1: FRU Serial Number supplied (only + valid if bit 4 = 0b1) + + + + + 0x04 + + + 8, if present + + + FRU Stocking Part Number (VPD FN keyword) or Procedure + ID + This field is present if Flags bits 4 =0b1 or Flags bits + 6 =0b1. + It contains a NULL-terminated ASCII character + string. + If Flags bit 4 = 0b1, this field contains a 7ASCII + character part number + If Flags bit 6 = 0b1, this field contains a 5 ASCII + character procedure ID + + + + + 0x0C + + + 4, if present + + + CCIN (VPD CC keyword) (optional, only supplied if Part + Number also supplied) + This field is present if Flags bit 5 = 0b1. It contains + the CCIN of the failing FRU (VPD CC keyword), represented as 4 + ASCII characters (not a NULL-terminated string). + + + + +   + + + 12, if present + + + FRU Serial Number (VPD SE Keyword) (optional) + This field is present if Flags bit 7 = 0b1. It contains + the serial number of the failing FRU (VPD SE keyword), + represented as a 12 ASCII characters (not a NULL-terminated + string). + + + + + End of FRU Identify Substructure + + + + +   + + + variable + + + Other platform used only substructure field + + + + +
+ +
+ FRU Replacement or Maintenance Procedure + Priority + + This field defines the service priority of the specific call-out, + i.e., replacing the FRU part number or performing the maintenance + procedure ID as given in the FRU/Procedure Identity substructure. Here + are the priority descriptions: + + + + + 'H' = High priority and + mandatory call-out. Replacing the FRU (or + performing the maintenance procedure) is mandatory. If multiple call-outs + with 'H' priority are given, all must be replaced or performed as a + group. + + + + + 'M' = Medium priority. + Replacing the FRU (or performing + maintenance procedure) with 'M' priority one at a time in the order given + after all call-outs prior to this one, if present, are performed. + + + + + 'A' = Medium priority group A + (1st group). Replacing all the FRUs + with 'A' priority as a group after all call-outs prior to this group, if + present, are performed. + + + + + 'B' = Medium priority group B + (2nd group). Replacing all the FRUs + with 'B' priority as a group after all call-outs prior to this group, if + present, are performed. + + + + + 'C' = Medium priority group C + (3rd group). Replacing all the FRUs + with 'C' priority as a group after all call-outs prior to this group, if + present, are performed. + + + + + 'L' = Low priority. After + performed all the prior call-outs, if + present, and problem still persists, replacing the FRU with this priority + one at a time in the order given. + + + + + The list of FRU/Procedure call-outs in the “call-out” + subsection of the SRC structure must be in order as defined above, i.e. + High, Medium, Low. 'M' has the same medium priority level as 'A', 'B', or + 'C' and a call out with 'M' priority can precede or follow 'A', 'B' or + 'C'. A group call-out must be contiguous in the list. Within the medium + priority level, follow the call-out order in the list A list without High + or Medium priority is also valid. + +
+ +
+ Failing Component Type Description + + + + + Normal Hardware FRU: + Hardware FRU in the platform which the + platform firmware or code can positively identify, and its VPD contains + the part number and associated information. + + + + + Code FRU: + Some layer of platform firmware or OS code is + suspected. The procedure ID field provides additional information about + which code(s) is/are the potential problem. + + + + + Configuration error: + The problem may be related to how hardware + or code is configured. For example, an adapter is plugged in a slot that + cannot support it. The FRU could be a procedure or a symbolic FRU. The + reason to use one of these is if the analysis can provide more + information to the customer and service provider by giving a location + code. + + + + + Maintenance procedure required: + Further isolation of the problem + is required by performing the procedure as identified in the Procedure ID + field. Procedures are designed to help to isolate problems and guide the + service provider through identifying which FRUs to replace in which + order. + + + + + Symbolic FRU: Used for a single + FRU where the analysis code knows + exactly what the part is but there is no part number, or the part number + cannot be pulled from VPD, or when there is something special (like a + procedure) for acquiring the FRU or working with it. Examples are cables, + or FRUs without VPD (so a part number cannot be filled in). The term + “Symbolic” simply means “not an actual part + number”. + + + + + External FRU: A failing part(s) + which is/are not in the system, + e.g. attached storage sub-system, network hubs/switches, external drives + like CD/DVD boxes. + + + + + External Code: Code not running + in the platform but is the + potential source of the error. This could be something like storage + subsystem code or even another system in the same cluster. + + + + + Tool FRU: This is a special + tool that will be required by one of + the FRUs in the list. Tools are only added as FRUs when they are not part + of the CE tool kit and therefore the repair action could be delayed if + the CE did not know to bring it. Examples are Optical Cleaning Kits for + fiber channel, and special tools for torque or reach or weight + considerations. + + + + +
+ +
+ +
+ Platform Event Log Format, Dump Locator Section +   + + Platform Event Log Format, Version 6, Dump Locator + Section + + + + + + + + Offset + + + Length in Bytes + + + Description + + + + + + + 0x00 + + + 2 + + + Section ID: A two-ASCII character field which uniquely + identifies the type of section. + value = 'DH' + + + + + 0x02 + + + 2 + + + Section length: Length in bytes of the section, including + the section ID. + value = 64 + + + + + 0x04 + + + 1 + + + Section Version + + + + + 0x05 + + + 1 + + + Section Sub-Type + 0x00 = Log truncated, complete log received by another + service entity. + 0x01 = FSP Dump + 0x02 = Platform System Dump + 0x03 = Reserved + 0x04 = Power Subsystem Dump + 0x05 = Platform Event Log Entry Dump (when distinguishing + between dump types, the term “Log Dump” is + typically used) + 0x06 = Partition-initiated resource dump + 0x07 = Platform-initiated resource dump + All other values reserved + + + + + 0x0 + + + 2 + + + Creator component ID + + + + + 0x08 + + + 4 + + + Dump ID + + + + + 0x0C + + + 1 + + + Flags + bit 0 (0x80) = 0, Dump sent to partition + bit 0 = 1, Dump sent to HMC + bit 1 (0x40) = 0, File name in ASCII + bit 1 = 1, Dump file name is hex + bit 2 (0x20) = 1, Dump size field valid + + + + + 0x0D + + + 2 + + + Reserved + + + + + 0x0F + + + 1 + + + Length of OS assigned Dump ID field in bytes, must be + multiple of 4. + May be 0. + + + + + 0x10 + + + 8 + + + Dump Size + + + + + 0x18 + + + 40 + + + OS-Assigned Dump ID + As the flag field indicates, this field may either be an + ASCII string or a hex number. + When an ASCII string (AIX, Linux, HMC), this is a NULL + terminated ASCII string representing the dump file name (leaf + name only, does not include path). + Field may be up to 40 characters including the + NULL. + + + + +
+ +
+ +
+ Platform Event Log Format, EPOW Section + + + Platform Event Log Format, Version 6, EPOW + Section + + + + + + + + Offset + + + Length in Bytes + + + Description + + + + + + + 0x00 + + + 2 + + + Section ID: A two-ASCII character field which uniquely + identifies the type of section. + value = 'EP' + + + + + 0x02 + + + 2 + + + Section length: Length in bytes of the section, including + the section ID. + + + + + 0x04 + + + 1 + + + Section Version + + + + + 0x05 + + + 1 + + + Section subtype + + + + + 0x06 + + + 2 + + + Creator Component ID + + + + + 0x08 + + + 1 + + + EPOW Sensor Value (low-order 4 bits contain the action + code). + + + + + 0x09 + + + 1 + + + EPOW Event Modifier + (low-order 4 bits contain the event modifier + value) + 0x00 = Not applicable + For EPOW sensor value = 3 + 0x01 = Normal system shutdown with no additional + delay + 0x02 = Loss of utility power, system is running on + UPS/Battery + 0x03 = Loss of system critical functions, system should + be shutdown + 0x04 = Ambient temperature too high + All other values = reserved + + + + + 0x0A + + + 1 + + + Extended Modifier for Section Version 2 and higher + For EPOW Sensor Value = 3 + 0x00 System wide shutdown + 0x01 Partition specific shutdown + 0x02 - 0xFF Reserved + All other situations Reserved = 0x00 + + + + + 0x0B + + + 1 + + + Reserved + + + + + 0x0C + + + 8 + + + Platform specific reason code + + + + +
+ +
+ +
+ Platform Event Log Format, IO Events Section + + + Platform Event Log Format, Version 6, IO Events + Section + + + + + + + + Offset + + + Length in Bytes + + + Description + + + + + + + 0x00 + + + 2 + + + Section ID: A two-ASCII character field which uniquely + identifies the type of section. + value = 'IE' + + + + + 0x02 + + + 2 + + + Section length: Length in bytes of the section, including + the section ID. + + + + + 0x04 + + + 1 + + + Section Version + + + + + 0x05 + + + 1 + + + Section subtype + + + + + 0x06 + + + 2 + + + Creator Component ID + + + + + 0x08 + + + 1 + + + IO-Event Type: + 0x01 = Error Detected + 0x02 = Error Recovered + 0x03 = Event + 0x04 = RPC Pass Through + All other values = Reserved + + + + + 0x09 + + + 1 + + + Offset 0x10 Field Length: + For IO Event Type of RPC Pass Through, this field + specifies the length of the data field which begins at offset + 0x10, otherwise the value in this field is 0. Must be a + multiple of 4 to maintain 4-byte alignment. +   + + + + + 0x0A + + + 1 + + + Error/Event Scope: + 0x00 = Not Applicable (use for IO-Event type 0x02, 0x03, + 0x04) + 0x36 = Reserved + 0x37 = Reserved + 0x38 = PHB + 0x39 = Reserved + 0x3A = Reserved + 0x3B = Reserved + 0x51 = Service Processor + All other values = Reserved + + + + + 0x0B + + + 1 + + + I/O-Event Sub-Type: + 0x00 = Not Applicable (use for IO-Event type 0x01, 0x02, + 0x04) + 0x01 = Rebalance request + 0x03 = Node online + 0x04 = Node off-line + 0x05 = platform-dump-max-size change + 0x08 = Generic Notification + All other values = Reserved + + + + + 0x0C + + + 4 + + + DRC Index + + + + + 0x10 + + + 0-216 + + + For the RPC Pass Through IO Event Type: RPC data. + Variable length data. Must be padded to 4 bytes + alignment. +   + For the platform-dump-max-size change I/O-Event Sub-Type: + 8 bytes for the new value of the platform-dump-max-size system + parameter (specifying the sum (in bytes) of the maximum size of + each unique platform dump type that the + ibm,platform-dump RTAS call could + return). +   + For Generic Notification I/O Event Sub-Type: Scoped Data + Generic Notification Event Section. Must be padded to 4 bytes + alignment. + + + + +
+ +
+ +
+ Platform Event Log Format, Failing Enclosure + MTMS + + + Platform Event Log Format, Version 6, Failing + Enclosure MTMS + + + + + + + + Offset + + + Length in Bytes + + + Description + + + + + + + 0x00 + + + 2 + + + Section ID: A two-ASCII character field which uniquely + identifies the type of section. + value = 'MT' + + + + + 0x02 + + + 2 + + + Section length: Length in bytes of the section, including + the section ID. + value = 28 + + + + + 0x04 + + + 1 + + + Section Version + + + + + 0x05 + + + 1 + + + Section subtype + + + + + 0x06 + + + 2 + + + Creator Component ID + + + + + 0x08 + + + 8 + + + Machine Type and Model: 8 ASCII characters, in the form + “tttt-mmm”, + where tttt = Machine Type and mmm = Model Number + + + + + 0x10 + + + 12 + + + Serial Number: + 12 ASCII characters (If less than 12 characters are used, + string is left justified (stored in the field starting with the + lowest address) and padded with NULLs.) + + + + +
+ The Failing Enclosure Machine Type, Model, and Serial Number (MTMS) + that is associated with the error is important for service and + support. + + The source of information for the MTMS fields varies according to + the following: + + + + + For CEC errors, it is the CEC enclosure MTMS. + + + + + For errors in I/O enclosures (drawers and towers) that have their + own MTMS and are sold as separate MTMS from the CEC, we use the I/O + Drawer MTMS. + + + + + For I/O enclosures that were sold as a feature, this section + contains the Feature Code and Serial Number of the I/O enclosure. When + the Feature Code is used, it is left justified in the Machine Type and + Model field. + + + + +
+ +
+ Platform Event Log Format, Impacted Partitions + + + Platform Event Log Format, Version 6, Impacted + Partitions + + + + + + + + + + + Offset + + + Length + + + Byte 0 + + + Byte 1 + + + Byte 2 + + + Byte 3 + + + + + + + 0 + + + 8 + + + Section Header + + +   + + +   + + +   + + + + + 0x10 + + + 4 + + + Primary Partition ID + + + Length of LP name + (must be a multiple of 4) + + + Target LP Count + + +   + + + + + 0x14 + + + 4 + + + Logical Partition ID + + +   + + +   + + +   + + + + + 0x18 + + + variable + + + Primary Partition (LP) Name + Null terminated ASCII string, padded to 4-Byte + boundary + + +   + + +   + + +   + + + + +   + + + variable + + + Target LP 1 + + + Target LP 2 + and so on + (padded to a 4-Byte boundary) + + +   + + +   + + + + +
+ + This section describes partitions that are impacted by an error. + When this section is supplied, the partitions in this list (and only + these partitions) are notified of the error. + +
+ +
+ Platform Event Log Format, Failing Memory + Address + + + Platform Error Event Log Format, Version 6, Failing + Memory Address + + + + + + + + Offset + + + Length in Bytes + + + Description + + + + + + + 0x00 + + + 2 + + + Section ID: A two-ASCII character field which uniquely + identifies the type of section. + value = 'MC' + + + + + 0x02 + + + 2 + + + Section length: Length in bytes of the section, including + the section ID + value = 32 + + + + + 0x04 + + + 1 + + + Section Version + + + + + 0x05 + + + 1 + + + Section Subtype + + + + + 0x06 + + + 2 + + + Creator Component ID + + + + + 0x08 + + + 4 + + + FRU ID -- Identifies the FRU on which the machine check + interrupt occurred + + + + + 0x0C + + + 4 + + + Processor ID -- identifies the physical CPU on which the + machine check occurred + + + + + 0x10 + + + 1 + + + Type of machine check interrupt + 0x00 = Uncorrectable Memory Error (UE) + 0x01 = SLB error + 0x02 = ERAT Error + 0x04 = TLB error + 0x05 = D-Cache error + 0x07 = I-Cache error + + + + + 0x11 + + + 23 + + + Information specific to machine check interrupt type. + This section is binary zeroes if the platform does not provide + specific information for the type of interrupt. + + + + +
+ + + UE Error Information + + + + + + + + Offset + + + Length in Bytes + + + Description + + + + + + + 0x11 + + + 1 + + + Type of UE + Bit 0 = 0 Permanent UE. The UE may be cleared with a DCBZ + instruction. + Bit 0 =1 Transient UE. The UE cannot be cleared with a + DCBZ instruction. The contents of the entire logical page are + not accessible for this type of UE + 64 bit effective address is provided + Bit 1 = 0 64 bit effective address is not provided by the + log + Bit 1 = 1 64 bit effective address is provided by the + log. Offset 0x18 provides the effective address if this bit is + 1 + 64 bit logical address is provided + Bit 2 = 0 64 bit logical address of logical page is not + provided by the log + Bit 2 = 1 64 bit logical address of logical page is + provided by the log. Offset 0x20 provides the logical address + of the page if this bit is 1 + Bit3-4 Reserved + Bit5-7 Type of UE machine check interrupt. The value of + the field is 0b000 for a permanent UE + 0b000 = Platform cannot determine the processor unit that + detected the error + 0b001 = Error detected by instruction fetch unit of the + processor + 0b010 = Error during page table search for instruction + fetch + 0b011 = Error detected by load/store unit of the + processor + 0b100 = Error detected during page table search for + load/store type of instruction + All other values are reserved. + + + + + 0x12 + + + 6 + + + Reserved + + + + + 0x18 + + + 8 + + + 64 bit effective address + + + + + 0x20 + + + 8 + + + 64 bit logical address + + + + +
+ + + SLB Error Information + + + + + + + + Offset + + + Length in Bytes + + + Description + + + + + + + 0x11 + + + 1 + + + 64 bit effective address is provided + Bit 0 = 0 64 bit effective address not provided by the + log + Bit 0 =1 64 bit effective address provided by the log. + Offset 0x18 provides the effective address if bit 0 is1 + Bit1-5 Reserved + Bit 6-7 Type of SLB error + 0b00 = Parity error in the SLB array or on the access + path to the SLB + 0b01 = Multiple hit error. There are two or more entries + in the SLB that translate the same effective address + 0b10 = Multiple hit error or parity error. Platform does + not have enough information to disambiguate between the two + cases. + All other values are reserved. + + + + + 0x12 + + + 6 + + + Reserved + + + + + 0x18 + + + 8 + + + 64 bit effective address + + + + + 0x20 + + + 8 + + + Reserved + + + + +
+ + + ERAT Error Information + + + + + + + + Offset + + + Length in Bytes + + + Description + + + + + + + 0x11 + + + 1 + + + 64 bit effective address is provided + Bit 0 = 0 64 bit effective address not provided by the + log + Bit 0 =1 64 bit effective address provided by the log. + Offset 0x18 provides the effective address if bit 0 is1 + Bit 1-5 Reserved + Bit 6-7 Type of ERAT error + 0b01 = Parity error in the ERAT array + 0b10 = Multiple hit error. There are two or more entries + in the ERAT array that translate the same effective + address + 0b11 = Multiple hit error or parity error in the ERAT + array. Platform does not have enough information to + disambiguate between the two cases. + All other values are reserved. + + + + + 0x12 + + + 6 + + + Reserved + + + + + 0x18 + + + 8 + + + 64 bit effective address + + + + + 0x20 + + + 8 + + + Reserved + + + + +
+ + + TLB Error Information + + + + + + + + Offset + + + Length in Bytes + + + Description + + + + + + + 0x11 + + + 1 + + + 64 bit effective address is provided + Bit 0 = 0 64 bit effective address not provided by the + log + Bit 0 =1 64 bit effective address provided by the log. + Offset 0x18 provides the effective address if bit 0 is1 + Bit 1-5 Reserved + Bit 6-7 Type of TLB error + 0b01 = Parity error in the TLB array + 0b10 = Multiple hit error. There are two or more entries + in the TLB that translate the same effective address + 0b11= Multiple hit error or parity error in the TLB + array. Platform does not have enough information to + disambiguate between the two cases. + All other values are reserved. + + + + + 0x12 + + + 6 + + + Reserved + + + + + 0x18 + + + 8 + + + 64 bit effective address + + + + + 0x20 + + + 8 + + + Reserved + + + + +
+ + For an error log that has the machine check interrupt section + filled out, the platform is not required to provide the date and time + stamp in the main-a section. The fields will be binary zeroes if the date + and time stamp is not provided. + +
+ +
+ +
diff --git a/Error Handling/sec_rtas_hot_plug.xml b/Error Handling/sec_rtas_hot_plug.xml new file mode 100644 index 0000000..696b425 --- /dev/null +++ b/Error Handling/sec_rtas_hot_plug.xml @@ -0,0 +1,46 @@ + + +
+ + Hot Plug Events + + Hot Plug Events, when implemented, are reported through the + event-scan RTAS call. These events are surfaced through the fixed + portions of the RTAS return value. (see + ) Some parts of the system may + be modified without direct support from the OS. + + + + + R1--1. + + If FRUs can be hot plugged in the system + without OS support, the Hot Plug Event mechanism must be provided for + signaling the OS about the event. + + + + + +
diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..68c771a --- /dev/null +++ b/LICENSE @@ -0,0 +1,176 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + diff --git a/Platform/app_bibliography.xml b/Platform/app_bibliography.xml new file mode 100644 index 0000000..4d830bf --- /dev/null +++ b/Platform/app_bibliography.xml @@ -0,0 +1,284 @@ + + + + + Bibliography + This section lists documents which were referenced in this specification or which provide + additional information, and some useful information for obtaining these documents. Referenced + documents are listed below. When any of the following standards are superseded by an approved + revision, the revision shall apply. + + + + + + + + Linux on Power Architecture Reference: Device Tree + + + + + Linux on Power Architecture Reference: Error Recovery and Logging + + + + + Linux on Power Architecture Reference: Virtualization + + + + + Linux on Power Architecture Reference: Runtime Abstraction Services (RTAS) + + + + + Power ISA + + + + + IEEE 1275, IEEE Standard for Boot (Initialization Configuration) Firmware: + Core Requirements and Practices + IEEE part number DS02683, ISBN 1-55937-426-8 + + + + + Core Errata, IEEE P1275.7/D4 + + + + + Open Firmware Recommended Practice:OBP-TFTP + Extension + + + + + Open Firmware Recommended Practice: Device + Support Extensions + + + + + PCI Bus binding to: IEEE Std 1275-1994, Standard + for Boot (Initialization, Configuration) Firmware + + + + + Open Firmware: Recommended Practice - Interrupt + Mapping + + + + + Open Firmware: Recommended Practice - Forth Source + and FCode Image Support, Version 1.0 + + + + + Open Firmware: Recommended Practice - Interrupt + Mapping, Version 1.0 + + + + + Open Firmware: Recommended Practice - TFTP Booting + Extensions, Version 0.8 + + + + + Open Firmware: Recommended Practice - + Interposition, Version 0.2 + + + + + MS-DOS Programmer's Reference + Published by Microsoft + + + + + Peering Inside the PE: A Tour of the Win32 Portable + Executable File Format + Found in the March, 1994 issue of Microsoft Systems Journal + + + + + ISO-9660, Information processing -- Volume and + file structure of CD-ROM for information interchange + Published by International Organization for Standardization + + + + + System V Application Binary Interface, PowerPC + Processor Supplement + By Sunsoft + + + + + ISO Standard 8879:1986, Information Processing + -- Text and Office Systems -- Standard Generalized Markup Language (SGML) + + + + + IEEE 996, A Standard for an Extended Personal Computer + Back Plane Bus + + + + + PCI Local Bus Specification + All designers are responsible for assuring that they use the most current version of this document + at the time that they design conventional PCI related components or platforms. See the PCI SIG website + for the most current version of this document. + + + + + PCI-to-PCI Bridge Architecture Specification + All designers are responsible for assuring that they use the most current version of this document + at the time that they design conventional PCI related components or platforms. See the + PCI SIG website for the most current version of this document. + + + + + PCI Standard Hot-Plug Controller and Subsystem + Specification + + + + + PCI-X Protocol Addendum to the PCI Local Bus Specification + All designers are responsible for assuring that they use the most current version of this document at + the time that they design PCI-X related components or platforms. See the PCI SIG website for the most + current version of this document. + + + + + PCI Express Base Specification + All designers are responsible for assuring that they use the most current version of this document + at the time that they design PCI Express related components or platforms. See the PCI SIG website for + the most current version of this document. + + + + + PCI Express to PCI/PCI-X Bridge Specification + All designers are responsible for assuring that they use the most current version of this document at the + time that they design PCI Express related components or platforms. See the PCI SIG website for the most current + version of this document. + + + + + System Management BIOS (SMBIOS) Reference + Specification + + + + + (List Number Reserved for Compatibility) + + + + (List Number Reserved for Compatibility) + + + + (List Number Reserved for Compatibility) + + + + + IBM RS/6000® Division, Product Topology Data System, + Product Development Guide + Version 2.1 + + + + + Single Root I/O Virtualization and Sharing Specification + All designers are responsible for assuring that they use the most current version of this document at + the time that they design PCI Express SR-IOV related components or platforms. See the PCI SIG website + for the most current version of this document. + + + + + Multi-Root I/O Virtualization and Sharing Specification + All designers are responsible for assuring that they use the most current version of this document at the + time that they design PCI Express MR-IOV related components or platforms. See the PCI SIG website for the + most current version of this document. + + + + + + diff --git a/Platform/app_eeh_handling.xml b/Platform/app_eeh_handling.xml new file mode 100644 index 0000000..7bd39fb --- /dev/null +++ b/Platform/app_eeh_handling.xml @@ -0,0 +1,284 @@ + + + EEH Error Processing + + This appendix describes the architectural intent for EEH error processing. + This appendix does not attempt to illustrate all possible scenarios, and other + implementations are possible. + +
+ General Scenarios + In general, the device driver recovery consists of issuing an + ibm,read-slot-reset-state2 call prior to doing any recovery + to determine if (1) the IOA is in the MMIO Stopped and DMA Stopped state (that is, + that an error has occurred which has put it into this state), and (2) whether or + not the PE has been reset by the platform in the process of entering the MMIO + Stopped and DMA Stopped state, and then doing one of the following: + + + + Simplest approach: + + + Reset the PE + + + + Reconfigure the PE + + + + + + Most general approach (detailed more in ): + + + Release the PE for Load /Store + + + + Issue Load / Store instructions t + o get any desired state information from the IOA + + + + Call the ibm,slot-error-detail RTAS call to get the + platform error information + + + + Log the error information + + + + Reset the PE + + + + Reconfigure the PE + + + + + + Most robust (no reset unless necessary): + + + Release the PE for Load /Store + + + + Issue Load / Store instructions + to get any desired state information from the IOA + + + + Call the ibm,slot-error-detail RTAS call to get the + platform error information + + + + Log the error information + + + + Device driver does IOA cleanup + + + + Release the PE for DMA and restart operations (no reset) + + + + + + In any scenario, after several retries of a recoverable operation, the OS + may determine that further recovery efforts should cease. In such a case, + calling ibm,slot-error-detail with Function 2 + (Permanent Error), in addition to returning error information, marks that the PE is + no longer accessible due to previous errors. +
+ +
+ More Detail on the Most General Approach + The following gives a more detailed look at scenario # + in . This will be broken up into two groups of operations: + error logging and error recovery. + These scenarios assume that: + + + + The ibm,configure-pe RTAS call is implemented. + + + + The attempts at recovery stop when Max_Retries_Exceeded is true. + + + +
+ Error Logging + + + + If the device driver is going to capture internal IOA-specific information + as a part of the error logging process or if the IOA controlled by the device driver + requires a longer wait after reset than the normal PCI specified minimum wait time, + then the device driver determines whether its IOA has been reset as a result of entering + EEH Stopped State, by looking at the PE Recovery Info output of + the ibm,read-slot-reset-state2 RTAS call. + + + + The OS or device driver insures that all MMIOs to the IOA(s) in the PE are finished. + + + + If the IOA requires longer wait after reset times than the specified minimum, + and the PE was reset (see step #1) as a result of the EEH event, then wait the + additional necessary time before continuing. + + + + The OS or device driver + enables PE MMIOs by calling the ibm,set-eeh-option RTAS call + with Function 2. + + + + The OS or device driver calls the ibm,configure-pe RTAS call. + + + If the PCI fabric does not need configuring (the PE was not reset previous to the + call or was reset but was previously configured with ibm,configure-pe ), + then the call returns without doing anything, otherwise it attempts to configure + the fabric up to but not including the endpoint IOA configuration registers. + + + + If an EEH event occurs as a result of probing during the + ibm,configure-pe RTAS call that results in a + reset of the PE, the PE will be returned in the PE state of 2. Software + does not necessarily need to check this on return from the call. The case + where this occurs is expected to be rare, and probably signals a non-transient error. + In this case the software can continue on with the recovery phase of the EEH processing, + and will eventually hit the same EEH event on further processing. + + + + + + If the PE was + reset (see step #1) as a result of the EEH event, then if the device driver is + going to gather IOA-specific information for logging, it needs to finish the + configuration of the IOA PCI configuration registers, by restoring the PCI + configuration space registers of the IOA(s) in the PE (for example, BARs, + Memory Space Enable, etc.). + + + + If desired, the + device driver gathers IOA-specific information via MMIOs, by doing MMIOs to its IOA. + + + + The OS or device driver calls ibm,slot-error-detail . + Any data captured in step # is passed in the + call. Note that maximum amount of data will be captured in some cases only when the + ibm,slot-error-detail call is made with PE not in the MMIO Stopped + State (as it should be in step #). + + + If Max_Retries_Exceeded is true, then call ibm,slot-error-detail + with Function 2 (Permanent Error). + + + + If Max_Retries_Exceeded is not true, then call ibm,slot-error-detail + with Function 1(Temporary Error). + + + + + + The ibm,slot-error-detail RTAS call captures whatever + PCI config space registers it can between the configuration address passed in the call + and the system (PHB), and including at the configuration address and at the PHB, and + returns them along with the device specific data in an error log in the return information + from the call. This call may encounter another EEH event, in which case it returns what + information it can in the call, with a Status of 0 (Success). + + + + The OS or device driver logs the log entry returned from the + ibm,slot-error-detail RTAS call. + + + + If Max_Retries_Exceeded is not true, then the next step is PE Recovery, + otherwise stop and mark the IOA(s) in the PE as unusable. + + +
+ +
+ PE Recovery + + + + OS or device driver does a PE reset sequence. Note that this step is + required even if the PE was reset as a result of the initial EEH event, because + the error logging steps (for example, the ibm,configure-pe + or ibm,slot-error-detail calls) could have encountered + another EEH event. + + + The device driver or OS calls ibm,set-slot-reset with + Function 1 or 3 to activate the reset. + + + + The minimum reset active time is waited. + + + + The device driver or OS calls ibm,set-slot-reset with + Function 0 to deactivate the reset. + + + + The minimum reset inactive to first configuration cycles is waited. + If the IOA requires more than the standard PCI specified time, then wait that + longer time, instead. + + + + + + The OS or device driver calls ibm,configure-pe. + If an EEH event occurs as a result of probing + during the ibm,configure-pe RTAS call that results in a reset + of the PE, the PE will be returned in the PE state of 2. Software does not necessarily + need to check this on return from the call. The case where this occurs is expected to + be rare, and probably signals a non-transient error. In this case the software can + continue on with the recovery phase of the EEH processing, and will eventually hit + the same EEH event on further processing. + + + + + The device driver restores the PCI configuration spaces of the IOA(s) in the PE. + + + + The device driver initializes the IOA for operations. + + + +
+
+
diff --git a/Platform/app_glossary.xml b/Platform/app_glossary.xml new file mode 100644 index 0000000..0419382 --- /dev/null +++ b/Platform/app_glossary.xml @@ -0,0 +1,1289 @@ + + + + + Glossary + This glossary contains an alphabetical list of terms, phrases, and abbreviations used in this document. + + + + Term + Definition + + + + AC + Alternating current + + + + ACR + Architecture Change Request + + + + AD + Address Data line + + + + Adapter + A device which attaches a device to a bus or which converts one + bus to another; for example, an I/O Adapter (IOA), a PCI Host Bridge (PHB), + or a NUMA fabric attachment device. + + + + + addr + Address + + + + Architecture + The hardware/software interface definition or software module to + software module interface definition. + + + + ASCII + American National Standards Code for Information + Interchange + + + + ASR + Address Space Register + + + + BAT + Block Address Translation + + + + BE + Big-Endian or Branch Trace Enable bit in the + MSR (MSRBE) + + + + BIO + Bottom of Peripheral Input/Output Space + + + + BIOS + Basic Input/Output system + + + + BIST + Built in Self Test + + + + Boundedly undefined + Describes some addresses and registers which when referenced provide + one of a small set of predefined results. + + + + BPA + Bulk Power Assembly. Refers to components used for power distribution + from a central point in the rack. + + + + BPM + Bottom of Peripheral Memory + + + + BSCA + Bottom of System Control Area + + + + BSM + Bottom of System Memory + + + + BUID + Bus Unit Identifier. The high-order part of an interrupt source number + which is used for hardware routing purposes by the platform. + + + + CCIN + Custom Card Identification Number + + + + CD-ROM + Compact Disk Read-Only Memory + + + + CIS + Client Interface Service + + + + CMO + Cooperative Memory Over-commitment option. See + for more information. + + + + + + CMOS + Complimentary Metal Oxide Semiconductor + + + + Conventional PCI + Behavior or features that conform to . + + + + CPU + Central Processing Unit + + + + CR + Condition Register + + + + CTR + Count Register + + + + DABR + Data Address Breakpoint Register + + + + DAR + Data Address Register + + + + DASD + Direct Access Storage Device (a synonym for “hard disk”) + + + + DBAT + Data Block Address Translation + + + + DC + Direct current + + + + DEC + Decrementer + + + + DIMM + Dual In-line Memory Module + + + + DMA + Direct Memory Access + + + + DMA Read + A data transfer from System Memory to I/O. A DMA Read Request + is the inbound operation and the DMA Read Reply (or Read Completion) is the + outbound data coming back from a DMA Read Request. + + + + DMA Write + A data transfer to System Memory from I/O or a Message Signalled Interrupt (MSI) DMA Write. This is an inbound operation. + + + + DOS + Disk OS + + + + DR + Data Relocate bit in MSR (MSRDR) + + + + DRA + Deviation Risk Assessment + + + + DRAM + Dynamic Random Access Memory + + + + DRC + Delayed Read Completion. A transaction that has completed + on the destination bus and is now moving toward the originating bus to complete. + DR Connector. + + + + DR entity + An entity that can participate in DR operations. That is, an entity + that can be added or removed from the platform while the platform power is on and the + system remains operational. + + + + DRR + Delayed Read Request. A transaction that must complete on the destination bus before completing on the originating bus. + + + + DSISR + Data Storage Interrupt Status Register + + + + DWR + Delayed Write Request. A transaction that must complete on the destination bus before completing on the originating bus. + + + + EA + Effective Address + + + + EAR + External Access Register + + + + ECC + Error Checking and Correction + + + + EE + External interrupt Enable bit in the MSR (MSREE) + + + + EEH + Enhance I/O Error Handling + + + + EEPROM + Electrically Erasable Programmable Read Only Memory + + + + EPOW + Environment and Power Warning + + + + + Error Log indicator An amber indicator that indicates that the user needs to + look at the error log or problem determination procedures, in order to determine the cause. + Previously called System Information (Attention). + + + + FCode + A computer programming language defined by the OF standard which is semantically + similar to the Forth programming language, but is encoded as a sequence of binary byte codes + representing a defined set of Forth words. + + + + FE0 + Floating-point Exception mode 0 bit in the MSR (MSRFE0) + + + + FE1 + Floating-point Exception mode 1bit in the MSR (MSRFE1) + + + + FIR + Fault Isolation Registers + + + + FLR + Function Level Reset (see PCI Express documentation). An optional reset for PCI Express + functions that allows resetting a single function of a multi-function IOA. + + + + FP + Floating-Point available bit in the MSR (MSRFP) + + + + FPSCR + Floating-Point Status And Control Register + + + + FRU + Field Replaceable Unit + + + + FSM + Finite State Machine + + + + GB + Gigabytes - as used in this document it is 2 raised to the power of 30 + + + + HB + Host Bridge + + + + HMC + Hardware Management Console - used generically to refer to the system + component that performs platform administration function where ever physically located. + The HMC is outside of this architecture and may be implemented in multiple ways. + Examples include: a special HMC applications in another system, an external appliance, + or in an LPAR partition using the Virtual Management Channel (VMC) interface to the + hypervisor. + + + + Hz + Hertz + + + + IBAT + Instruction block address translation + + + + ID + Identification + + + + IDE + Integrated Device Electronics + + + + IDU + Interrupt Delivery Unit + + + + IEEE + Institute of Electrical and Electronics Engineers + + + + I2C + Inter Integrated-circuit Communications + + + + I/O + nput/Output + + + + I/O bus master + Any entity other than a processor, cache, + memory controller, or host bridge which supplies both address and data in + write transactions or supplies the address and is the sink for the data in + read transactions. + + + + I/O device + Generally refers to any entity that is connected + to an IOA (usually through a cable), but in some cases may refer to the IOA + itself (that is, a device in the device tree that happens to be used for I/O + operations). + + + + I/O Drawer + An enclosure in a rack that holds at least one PHB and at + least one IOA. + + + + ILE + Interrupt Little-Endian bit in MSR (MSRILE) + + + + Instr + Instruction + + + + Interrupt Number + See Interrupt Vector below. + + + + Interrupt Vector + The identifier associated with a specific interrupt source. + The identifier’s value is loaded into the source’s Interrupt Vector Register and + is read from the Interrupt Delivery Unit’s Interrupt Acknowledge Register. + + + + IOA + I/O Adapter. A device which attaches to a physical bus which is capable + of supporting I/O (a physical IOA) or logical bus (a virtual IOA). The term “IOA” + without the usage of the qualifier “physical” or “virtual” will be + used to designate a physical IOA. Virtual IOAs are defined further in + + . + In PCI terms, an IOA may be defined by a unique combination of its assigned + bus number and device number, but not necessarily including its function number. + That is, an IOA may be a single or multi-function device, unless otherwise specified by + the context of the text. In the context of a PCIe I/O Virtualized (IOV) device (not to be + confused with a virtual IOA), an IOA is a single or multiple function device (for example, a + PCIe Virtual Function (VF) or multiple VFs). An IOA function may or may not have its own set of + resources, that is may or may not be in its own Partitionable Endpoint (PE) domain + (see also + ). + + + + + IOA function + That part of an IOA that deals with a specific part of the + IOA as defined by the configuration space “Function” part of Bus/Device/Function. + For single-function IOAs, the IOA Function and the IOA are synonymous. + + + + IP + Interrupt Prefix bit in MSR (MSRIP) + + + + IPI + Interprocessor Interrupt + + + + IR + Instruction Relocate bit in MSR register (MSRIR) or infrared + + + + ISF + Interrupt 64-bit processor mode bit in the MSR (MSRISF) + + + + ISO + International Standards Organization + + + + ISR + Interrupt Source Register + + + + ISU + Interrupt Source Unit + + + + KB + Kilobytes - as used in this document it is 2 raised to the power of 10 + + + + KHz + Kilo Hertz + + + + LAN + Local Area Network + + + + LCD + Liquid Crystal Display + + + + LE + Little-Endian bit in MSR (MSRLE) or Little-Endian + + + + LED + Light Emitting Diode + + + + LMB + Logical Memory Block. The Block of logical memory addresses associated with a dynamically + reconfigurable memory node. + + + + Load + A Load Request is the outbound (from the processor) operation + and the Load Reply is the inbound data coming back from a + Load Request. When it relates to I/O operations, this is an + MMIO Load . + + + + LR + Link Register + + + + LSb + Least Significant bit + + + + LSB + Least Significant Byte + + + + LSI + Level Sensitive Interrupt + + + + LUN + Logical Unit Number + + + + L1 + Primary cache + + + + L2 + Secondary cache + + + + MB + Megabytes - as used in this document it is 2 raised to the power of 20 + + + + ME + Machine check Enable + + + + MMIO + Memory Mapped I/O. This refers to the mapping of the address space required + by an I/O device for Load or Store operations into + the system’s address space. + + + + MES + Miscellaneous Equipment Specification + + + + MFM + Modified frequency modulation + + + + MHz + Mega Hertz + + + + MOD + Address modification bit in the MSR + (MSRMOD) + + + + MP + Multiprocessor + + + + MSb + Most Significant bit + + + + MSB + Most Significant Byte + + + + MSI + Message Signalled Interrupt + + + + MSR + Machine State Register + + + + MTT + Multi-TCE-Table option. See + + + . + + + + + N/A + Not Applicable + + + + Nibble + Refers to the first or last four bits in an 8 bit byte + + + + NUMA + Non-Uniform Memory Access + + + + NUMA fabric + Mechanism and method for connecting the multiple nodes of a NUMA system + + + + NVRAM + Nonvolatile Random Access Memory + + + + OF + Open Firmware + + + + OP + Operator + + + + OS + Operating System + + + + OUI + Organizationally Unique Identifier + + + + PA + Processor Architecture + + + + PAP + Privileged Access Password + + + + LoPAR + Used within the Linux on Power Architecture + Reference documents to denote: (1) the architectural requirements specified + by the Linux on Power Architecture Reference document, (2) the Linux on Power Architecture + Reference documents themself, and (3) as an adjective to qualify an entity as being + related to this architecture. + + + + Partitionable Endpoint + This refers to the I/O granule that may be treated as one for + purposes of assignment to an OS (for example, to an LPAR partition). May be an + I/O adapter (IOA), or groups of IOAs and bridges, or portions of IOAs. PE granularity + supported by the hardware may be finer than is supported by the firmware. Grouping + of multiple PEs into one DR entity may limit assignment of a the separate PEs to different + LPAR partitions. See also DR entity. + + + + PC + Personal Computer + + + + PCI + Peripheral Component Interconnect. An all-encompassing term referring to + conventional PCI, PCI-X, and PCI Express. + + + + PCI bus + A general term referring to either the PCI Local Bus, as + specified in and + for conventional PCI and PCI-X, or a PCI Express link, as specified in + for PCI Express. + + + + PCI Express + Behavior or features that conform to + . + + + + PCI link + A PCI Express link, as specified in . + + + + PCI-X + Behavior or features that conform to . + + + + PD + Presence Detect + + + + PE + When referring to the body of the LoPAR, this refers to a Partitionable + Endpoint. + + + + + + + PEM + Partition Energy Management option. See + + + . + + + + + Peripheral I/O Space + The range of real addresses which are assigned + to the I/O Space of a Host Bridge (HB) and which are sufficient to contain all of + the Load and Store address space requirements of all the devices in the I/O Space + of the I/O bus that is generated by the HB. A keyboard controller is an example of + a device which may require Peripheral I/O Space addresses. + + + + Peripheral Memory Space + The range of real addresses which are assigned to the Memory + Space of a Host Bridge (HB) and which are sufficient to contain all of the Load and + Store address space requirements of the devices in the Memory Space of the I/O bus + that is generated by the HB. The frame buffer of a graphics adapter is an example + of a device which may require Peripheral Memory Space addresses. + + + + Peripheral Space + Refers to the physical address space which may + be accessed by a processor, but which is controlled by a host bridge. At least one + peripheral space must be present and it is referred to by the suffix 0. A host bridge + will typically provide access to at least a memory space and possibly to an I/O + space. + + + + PHB + PCI Host Bridge + + + + PIC + Programmable Interrupt Controller + + + + PIR + Processor Identification Register + + + + Platform + Refers to the hardware plus firmware portion of a system composed of hardware, + firmware, and OS. + + + + Platform firmware + Refers to all firmware on a system including the software or firmware in a + support processor. + + + + Plug-in I/O card + A card which can be plugged into an I/O + connector in a platform and which contains one or more IOAs and potentially + one or more I/O bridges or switches. + + + + Plug-in Card + An entity that plugs into a physical slot. + + + + PMW + Posted memory write. A transaction that has complete on the + originating bus before completing on the destination bus + + + + PnP + Plug and Play + + + + POP + Power On Password + + + + POST + Power-On Self Test + + + + PR + Privileged bit in the MSR (MSRPR) + + + + Processor Architecture + Used throughout this document to + mean compliance with the requirements specified in + . + + + + Processor revision number + A 16-bit number that distinguishes between various releases + of a particular processor version, for example different engineering change + levels. + + + + PVN + Processor Version Number. Uniquely determines the particular + processor and PA version. + + + + PVR + Processor Version Register. A register in each processor + that identifies its type. The contents of the PVR include the processor + version number and processor revision number. + + + + RAID + Redundant Array of Independent Disks + + + + RAM + Random Access Memory + + + + RAS + Reliability, Availability, and Serviceability + + + + Real address + A real address results from doing address + translation on an effective address when address translation is enabled. + If address translation is not enabled, the real address is the same as the + effective address. An attempt to fetch from, load from, or store to a real + address that is not physically present in the machine may result in a + machine check interrupt. + + + + Reserved + The term “reserved” is used within this + document to refer to bits in registers or areas in the address space + which should not be referenced by software except as described in this + document. + + + + Reserved for firmware use + Refers to a given location or bit which may not be used by + software, but are used by firmware. + + + + Reserved for future use + Refers to areas of address space or bits in registers which may be + used by future versions of this architecture. + + + + RI + Recoverable interrupt bit in the MSR (MSRRI) + + + + RISC + Reduced Instruction Set Computing + + + + RMA + Real Mode Area. The first block of logical memory addresses + owned by a logical partition, containing the storage that may be accessed with + translate off. + + + + ROM + Read Only Memory + + + + Root Complex + A PCI Express root complex as specified in + . + + + + RPN + Real Page Number + + + + RTAS + Run-Time Abstraction Services + + + + RTC + Real Time Clock + + + + SAE + Log Service Action Event log + + + + SCC + Serial Communications Controller + + + + SCSI + Small Computer System Interface + + + + SE + Single-step trace enabled bit in the MSR + (MSRSE) + + + + Service Focal Point + The common point of control in the system for handling all + service actions + + + + Serviceable Event + Serviceable Events are platform, + global, regional and local error events that require a service action + and possibly a call home when the serviceable event must be handled by a + service representative or at least reported to the service provider. + Activation of the Error Log indicator notifies the customer of the event + and the event indicates to the customer that there must be some intervention + to rectify the problem. The intervention may be a service action that the + customer can perform or it may require a service provider. + + + + SES + Storage Enclosure Services (can also mean SCSI Enclosure + Services in relation to SCSI storage) + + + + SF + Processor 32-bit or 64-bit processor mode bit in the MSR + (MSRSF) + + + + SFP + Service Focal Point + + + + Shrink-wrap OS + A single version of an OS that runs on all + compliant platforms. + + + + Shrink-wrap Application + A single version of an application program + that runs on all compliant platforms with the applicable OS. + + + + SMP + Symmetric multiprocessor + + + + SMS + System Management Services + + + + Snarf + An industry colloquialism for cache-to-cache + transfer. A typical scenario is as follows: (1) cache miss from cache A, + (2) line found modified in cache B, (3) cache B performs castout of modified + line, and (4) cache A allocates the modified line as it is being written back + to memory. + + + + Snoop + The act of interrogating a cache for the presence of a + line, usually in response to another party on a shared bus attempting to + allocate that line. + + + + SPRG + Special Purpose Registers for General use + + + + SR + System Registers + + + + SRC + Service Reference Code + + + + SRN + Service Request Number + + + + Store + A Store Request is an + outbound (from the processor) operation. When it relates to I/O + operations, this is an MMIO Store. + + + + System + Refers to the collection of hardware, system firmware, + and OS software which comprise a computer model. + + + + System address space + The total range of addressability as established by the + processor implementation. + + + + System Control Area + Refers to a range of addresses which + contains the system ROM(s) and an unarchitected, reserved, platform-dependent + area used by firmware and Run-Time Abstraction services for control of the + platform. The ROM areas are defined by the OF properties in the + openprom and os-rom nodes + of the OF device tree. + + + + System Information (Attention) indicator + See Error Log indicator. + + + + System firmware + Refers to the collection of all firmware on a system + including OF, RTAS and any legacy firmware. + + + + System Memory + Refers to those areas of memory which form + a coherency domain with respect to the PA processor or processors that + execute application software on a system. + + + + System software + Refers to the combination of OS software, + device driver software, and any hardware abstraction software, but + excludes the application software. + + + + TB + Time Base + + + + TCE + Translation Control Entry + + + + TLB + Translation Look-aside Buffer + + + + TOD + Time Of Day + + + + TOSM + Top of system memory + + + + TPM + Top of Peripheral Memory + Trusted Platform Module + + + + tty + Teletypewriter or ASCII character driven + terminal device + + + + UI + User Interface + + + + USB + Universal Serial Bus + + + + v + Volt + + + + VGA + Video Graphics Array + + + + VMC + Virtual Management Channel + + + + VPD + Vital Product Data + + + + VPNH + Virtual Processor Home Node option. See + + + . + + + + + + + + + + + + + + diff --git a/Platform/bk_main.xml b/Platform/bk_main.xml new file mode 100644 index 0000000..5a2b72c --- /dev/null +++ b/Platform/bk_main.xml @@ -0,0 +1,121 @@ + + + + + + + Platform + Linux on Power Architecture Reference + + + + + System Software Work Group + + syssw-chair@openpowerfoundation.org + + OpenPOWER Foundation + + + + 2016 + OpenPOWER Foundation + + + Revision 2.0_pre1 + OpenPOWER + + + + + + Copyright details are filled in by the template. + + + + + + The purpose of this document is to provide firmware and software + architectural details for the base Platform hardware associated with an OpenPOWER Systems. + The base content for this document were contributed to the OpenPOWER Foundation in the + IBM Linux on Power Architecture Platform Reference (LoPAPR) Draft + document. It had numerous contributors inside IBM. + This document is a Standard Track, Work Group Specification work product owned by the + System Software Workgroup and handled in compliance with the requirements outlined in the + OpenPOWER Foundation Work Group (WG) Process document. It was + created using the Master Template Guide version 0.9.5. Comments, + questions, etc. can be submitted to the public mailing list for this document at + TBD. + + + + + + 2016-05-04 + + + + Revision 2.0_pre1 - initial conversion from IBM document. Extracted from + Linux on Power Architecture Platform Reference (LoPAPR) version 1.1 dated March 24, + 2016 -- Chapter 1 (Introduction), Chapter 2 (System Requirements), + Chapter 3 (Address Map), Chapter 4 (I/O Bridges and Topology), + Chapter 5 (Processors and Memory), Chapter 6 (Interrupt Controller), + Chapter 8 (Non-volatile memory), Chapter 9 (I/O Devices), + Chapter 11 (The Symmetric Multiprocessor Option), Chapter 12 (Product Topology), + and Appendix H (Non-Uniform Memory Access [NUMA] Option). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Platform/ch_address_map.xml b/Platform/ch_address_map.xml new file mode 100644 index 0000000..333f6ce --- /dev/null +++ b/Platform/ch_address_map.xml @@ -0,0 +1,1132 @@ + + + 3 Address Map + + The address map of an LoPAR platform is made up of several distinct + areas. These areas are one of five basic types. Each of these types has its own + general characteristics such as coherency, alignment, size restrictions, + variability of starting address and size, the system action on access of the + area, and so on. This chapter gives details on some of those characteristics, + and other chapters define the other characteristics. The variable + characteristics of these areas are reported to the OS via properties in the OF + device tree. + +
+ Address Areas + The following is a definition of the five areas and some of their + characteristics: + + + + System Memory refers to memory + which forms a coherency domain with respect + to the PA processor(s) that execute application software on a system. See + for details on aspects of coherence. + System Memory Spaces refer to one or more pieces that + together form the System Memory. System Memory areas may be marked with a + special value of the “status” property of + “reserved” which means that this memory is not for general use by + the base OS, but may be reserved for use by OS extensions (see + ). Some System Memory areas may be + preservable across boots (see ). + + + + Peripheral Memory Space refers to a range of real addresses which + are assigned to the Memory Space of a Host Bridge (HB) or System Bus attached + IOA, and which are sufficient to contain all of the Load and Store address + space requirements of all IOAs in the Memory Space of the I/O bus that is + generated by the HB or which are encompassed by the System Bus attached IOA. + The frame buffer of a graphics IOA is an example of a device which may reside + in the Peripheral Memory Space. Due to space limitations in the address space + below 4 GB, the HBs of platforms may split this space into two pieces; one to + support the IOAs that need to have their addresses below 4 GB (because they + only support 32-bit addresses) and another to support the IOAs that can have + their addresses above 4 GB (because they support 64-bit addresses). In addition + to a Memory Space, many types of I/O buses have a separate address space called + the I/O Space. An HB which generates such I/O buses must decode another address + range, the Peripheral I/O Space.A + peripheral space may also include a “configuration” address + space. The configuration space is abstracted by a Run-Time Abstraction Service + (for example, see ). + + + + Peripheral I/O Space refers to a range of real addresses which + are assigned to the I/O Space of an HB or System Bus attached IOA and which are + sufficient to contain all of the Load and Store address space requirements of + all the IOAs in the I/O Space of the I/O bus that is generated by the HB or + which are encompassed by the System Bus IOA. A keyboard controller is an + example of an IOA which may require Peripheral I/O Space addresses. + + + + System Control Area (SCA) refers to a range of addresses which + contains all reserved addresses (architected or unarchitected) which are not + part of one of the other defined address spaces. For example, the system ROM(s), + unarchitected platform-dependent addresses used by firmware and Run-Time + Abstraction Services for control of the platform, and architected entities like + interrupt controller addresses when those addresses are not in another defined + address space. + + + + Undefined refers to areas that are not one of the above four + areas. The result of accessing one of these areas is defined in as an invalid address error. + + + + In addition to the above definitions, it is convenient, relative to + I/O op erations, to define a Partitionable Endpoint. A Partitionable + Endpoint (PE) is an I/O subtree that can be treated as a unit for + the purposes of partitioning and error recovery. A PE may be a single or + multi-function IOA, a function of a multi-function IOA, or multiple IOAs + (possibly including switch and bridge structures above the multiple IOAs). See + for more information about PEs. + In describing the characteristics of these various areas, it is + convenient to have a nomenclature for the various boundary addresses. + defines the labels which are used in this + document when describing the various address ranges. Note that + “bottom” refers to the smallest address of the range and + “top” refers to the largest address. + + + Map Legend + + + + + + + + Label + + + + + Description + + + + + + + + BIOn + + + Bottom of Peripheral I/O Space for HBn (n=0, 1, 2,...). + The OF property “ranges” + in the OF device tree for HBn contains the value of BIOn. + + + + + TIOn + + + Top of Peripheral I/O Space for HBn (n=0, 1, 2,...). The + value of TIOn can be determined by adding the size of the area as found in the + OF property “ranges” in the OF device tree + for HBn to the value of BIOn found in that same property and then subtracting + 1. + This architecture allows at most one Peripheral I/O area + per HB which may be above or below 4 GB. For any given n, BIOn to TIOn cannot + span from the first 4 GB of address space to the second. + + + + + BPMn,m + + + Bottom of Peripheral Memory Space m (m=0,1) for HBn (n=0, + 1, 2,...), as viewed from the system side of HBn. The OF property + “ranges” in the OF device tree for HBn contains the + value of BPMn,m. + + + + + BPM’n,m + + + Bottom of Peripheral Memory Space m (m=0,1) for HBn (n=0, + 1, 2,...), as viewed from the I/O side of the HBn. That is, this is the value + to which BPMn,m gets translated to as it passes through the HB. The OF property + “ranges” in the OF device tree for HBn + contains the value of BPM’n,m. BPM’n,m may be equal to BPMn,m or + may not be. + + + + + TPMn,m + + + Top of Peripheral Memory Space m (m=0,1) for HBn (n=0, 1, + 2,...) as viewed from the system side of HBn. The Peripheral Memory Space + address range is in the OF device tree, as indicated by the + “ranges” property in the node in the OF device tree + for HBn; BPMn,m to TPMn,m. The value of TPMn,m can be determined by adding the + size of the area as found in the OF property + “ranges” in the OF device tree for HBn to the value of + BPMn,m found in that same property and then subtracting 1. + This architecture allows for one or two Peripheral Memory + areas per HB (hence, m=0,1). A Peripheral Memory area may be above 4 GB or + below. For any given n, BPMn,m to TPMn,m cannot span from the first 4 GB of + address space to the second. + + + + + TPM’n,m + + + Top of Peripheral Memory Space m (m=0,1) for HBn (n=0, 1, + 2,...) as viewed from the I/O side of HBn. The value of TPM’n,m can be + calculated from the values in the“ranges” + property as was TPMn,m. In some cases TPM’n,m is required to be equal to + TPMn,m and in some cases it is not required to be equal. For any given n, + BPM’n,m to TPM’n,m cannot span from the first 4 GB of address + space to the second. + + + + + BSCAn + + + Bottom of System Control Area. Corresponding top of the + System Control Area is TSCAn. This architecture allows for one or two SCAs per + platform. The SCA below 4 GB is at the top (largest addresses) of the lower 4 + GB range. + + + + + TSCAn + + + Top of System Control Area. For any given n, BSCAn to + TSCAn cannot span from the first 4 GB of address space to the second. + + + + + BSMn + + + Bottom of System Memory Space n (n=0, 1, 2,...); BSM0 = 0. + The OF property “reg” in the OF device tree + for the Memory Controller’s node contains the value of BSMn. + + + + + TSMn + + + Top of System Memory Space n (n=0, 1, 2,...). The value of + TSMn can be determined by adding the value of BSMn as found in the Memory + Controller’s node of the OF device tree to the value of the size of that + area as found in the same property, and then subtracting 1. + + + + + BTTAn,m + + + Bottom of TCE Translatable Address space m (m=0, 1, 2,...) + for HBn (n=0, 1, 2,...) as viewed from the I/O side of HBn. This is the bottom + of an address range that is translatable by a Translation Control Entry (TCE) + table. The value of BTTAn,m is obtained from the + “ibm,dma-window” or + “ibm,my-dma-window” property in the OF device + tree. + + + + + TTTAn,m + + + Top of TCE Translatable Address space m (m=0, 1, 2,...) + for HBn (n=0, 1, 2,...) as viewed from the I/O side of HBn. This is the top of + an address range that is translatable by a TCE table. The range BTTAn,m to + TTTAn,m is not accessible by more than one PE for any given “n”. + The value of TTTAn,m can be determined by adding the size of the area as found + in the OF property “ibm,dma-window” or + “ibm,my-dma-window” in the OF device tree + for HBn to the value of BTTAn,m found in that same property and then + subtracting 1. + + + + +
+ The figures found in , show + examples of the areas referenced by the labels in . + The OS and other software should not use fixed addresses for these + various areas. A given platform may, however, make some of these addresses + unchangeable. Each of these areas is defined in the OF device tree in the node + of the appropriate controller. This gives platforms the most flexibility in + implementing the System Address Map to meet their market requirements. + + + + R2--1. + + All unavailable addresses in the Peripheral Memory and Peripheral + I/O Spaces must be conveyed in the OF device tree. + + + + A “device_type” of + “reserved” must be used to specify areas which are not + to be used by software and not otherwise reported by OF. + + + + Shadow aliases must be communicated as specified by the + appropriate OF bus binding. + + + + + + + R2--2. + + There must not be any address generated by + the system which causes the system to hang. + + + + + Hardware Implementation Note: The reason for Requirement + is to reserve address space for registers + used only by the firmware or addresses which are used only by the + hardware. +
+ +
+ Address Decoding (or Validating) and Translation + In general, different components in the hardware are going to decode + the address ranges for the various areas. In some cases the component may be + required to translate the address to a new address as it passes through the + component. The requirements, below, describe the various system address decodes + (or validating) and, where appropriate, what address transforms take place + outside of the processor. + The HB requirements in this section refer to HBs which are defined by + this architecture. Currently, there is only one HB defined by this + architecture, and that is the PHB. HBs which implement I/O buses other than + those defined by this architecture may or may not require changes to this + addressing model. + The reader may want to reference the example address maps found in + , while reading through the + requirements of this section. + +
+ <emphasis>Load</emphasis> and <emphasis>Store</emphasis> + Address Decoding and Translation + + Load and Store + operations may be targeted at System Memory or I/O. The latter is called Memory + Mapped I/O (MMIO). + + + + R2--1. + + Processor Load and Store + operations must be routed and translated as shown in . + + + + + + Processor Bus Address Space Decoding and Translation + + + + + + + + + Address Range at Processor + Bus + + + + + Route and Translation + Requirements + + + + + Other Requirements and + Comments + + + + + + + + BSCAn to TSCAn + (n=0, 1) + + + To ROM controller or to a platform dependent area. + Translation dependent on implementation. + + + Areas other than ROM are reserved for firmware use, or + have their address passed by the OF device tree. + + + + + BIOn to TIOn + (n=0,1, 2,...) + + + Send through the HB to the I/O space of the I/O bus, + translating by subtracting the value of BIO from each address in this range + (that is, translate BIO to TIO to be at 0 to (TIO - BIO) on the I/O + side). + + +   + + + + + BPMn,m to TPMn,m + (n=0, 1, 2,...) + (m=0, 1) + + + Send through HBn to the Memory Space of the I/O bus. + + + If BPMn,m < 4 GB, do not translate an address in the + BPMn,m to TPMn,m range as the transaction passes through the bridge (that is, + BPM’n,m = BPMn,m and TPM’n,m = TPMn,m). + + + + If BPMn,m is at or above 4 GB then if BPM’n,m is + to be below 4 GB (for 32-bit IOAs) then translate addresses in the BPMn,m to + TPMn,m range so that this address range becomes BPM’n,m to + TPM’n,m (where BPM’n,m and TPM’n,m are less than 4 GB) as + the transaction passes through the bridge, otherwise do not translate an + address in the BPMn,m to TPMn,m range as the transaction passes through the + bridge (for 64-bit IOAs which are configured at or above 4 GB). + + + + + Platforms that need to support both 32-bit capable and + 64-bit capable IOAs and do not want to configure the 64-bit capable IOAs below + 4 GB need to support two Peripheral Memory spaces per HB. + + + + + BSMm to TSMm + (m>0) + + + To System Memory Space m, no translation. + + + Can be at or above 4 GB, or below BSCA0. + + + + + 0 to TSM0 + + + To System Memory Space 0, no translation + + +   + + + + + All other addresses + + + See . + + + Access is to undefined space. + + + + +
+ + + + R2--2. + + There must be no architected address + spaces (Peripheral Memory, Peripheral I/O, SCA, or System Memory) which span + the (4GB - 1) to 4 GB boundary. + + + + + R2--3. + + The following are the System Control Area requirements: + + + + The platform must have at most one System Control Area below 4 GB + and at most one per platform or per NUMA node at or above 4 GB. + + + + The System Control Area must not overlap with the System Memory + Space(s), Peripheral Memory Space(s), or the Peripheral I/O Space(s) in the + platform. + + + + + + + R2--4. + + The following are the System Memory Space requirements: + + + + Each platform must have at least one System Memory Space. + + + + The System Memory Space(s) must not overlap with the Peripheral I/O + Space(s), Peripheral Memory Space(s), the System Control Area, or other System + Memory Space(s) in the platform. + + + + The first System Memory Space must start at address 0 (BSM0 = 0), + must be at least 128 MB before a second System Memory Space is added and must + be contiguous. + + + + Each of the additional (optional) System Memory Space(s) + must start on a 4 KB boundary. + + + + Each of the additional (optional) System Memory Space(s) + must be contiguous within itself. + + + + There must be at most eight System Memory Spaces below BSCA0 and + at most eight at or above 4 GB. + + + + If multiple System Memory Spaces exist below 4 GB, then they + must not have any Peripheral Memory or Peripheral I/O Spaces interspersed + between them and if multiple System Memory Spaces exist above 4 GB, then they + must not have any Peripheral Memory or Peripheral I/O Spaces interspersed + between them. + + + + + + + R2--5. + + The following are the Peripheral Memory Space requirements: + + + + The Peripheral Memory Space(s) must not overlap with the System + Memory Space(s), Peripheral I/O Space(s), the System Control Area, or other + Peripheral Memory Space(s) in the platform. + + + + The size of each + Peripheral Memory Space (TPMn,m - BPMn,m + 1) must be a power of two for sizes + up to and including 256 MB, with the minimum size being 1 MB, and an integer + multiple of 256 MB plus a power of two which is greater than or equal to 1 MB + for sizes greater than 256 MB (for example, 1 MB, 2 MB, 4 MB, 8 MB, 16 MB, 32 + MB, 64 MB, 128 MB, 256 MB, (256 + 1) MB, (256 + 2) MB,..., (512 + 1) + MB,...). + + + + The boundary alignment for each Peripheral Memory Space must be an integer multiple + of the size of the space up to and including 256 MB and must be an integer + multiple of 256 MB for sizes greater than 256 MB. + + + + There must be at most two Peripheral Memory Spaces per HB. + + + + + If the Peripheral Memory Space for a HB is below 4 GB, then the + address must not be translated as it passes through the HB from the system side + to the I/O side of the HB (see ). + + + + If the Peripheral Memory Space for a HB is above 4 GB, then the + address may or may not be translated as it passes through the HB from the + system side to the I/O side of the HB, but if it is translated, then the + translated address range must be aligned on a boundary which is an integer + multiple of the size of the Peripheral Memory Space. + + + + + + + Implementation Note: Relative to Requirement + , not all OSs can support BPM’ to + TPM’ being above 4 GB. + + + + R2--6. + + The following are the Peripheral I/O Space requirements: + + + + The Peripheral I/O Space(s) must not overlap with the System + Memory Space(s), Peripheral Memory Space(s), the System Control Area, or other + Peripheral I/O Space(s) in the platform. + + + + The size of each Peripheral I/O Space (TIOn - BIOn + 1) must be a + power of two with the minimum size being 64 KB (that is, sizes of 64 KB, 128 + KB, 256 KB, 512 KB, 1 MB, 2 MB, 4 MB, 8 MB, 16 MB, 32 MB, 64 MB, and so on, are + acceptable). + + + + The boundary alignment for each Peripheral I/O Space must be an integer multiple of the size of + the space. + + + + There must be at most one Peripheral I/O Space per + HB. + + + + + + + R2--7. + + All System Memory must be + accessible via DMA operation from all IOAs in the system, except where LPAR + requirements limit accessibility of an IOA belonging to one partition to the + System Memory of another partition. + + + + + Hardware Implementation Notes: Memory controller and memory card + designers who are designing for 64-bit platforms should be careful to consider + that the amount of I/O space below 4 GB is reduced by the amount of System + Memory space below 4 GB. Therefore it may be prudent to design the hardware to + allow minimization of the amount of System Memory below 4 GB, in order to allow + maximization of the space for 32-bit Peripheral Memory and Peripheral I/O + spaces below 4 GB. + The beginning addresses and sizes of the Peripheral I/O Space(s) + and Peripheral + Memory Space(s), are controlled by firmware. Information about the address map + is reported by the OF Device Tree or, for items that can change, through RTAS + calls (for example, for Dynamic Reconfiguration, through the + ibm,configure-connector RTAS call). + Certain System Memory addresses must be reserved in all systems for + specific uses (see and for more information). +
+
+ DMA Address Validation and Translation + is a representation of + how the validation and translation mechanism works, along with a description of + the steps which are involved. At the core of the translation mechanism is the + Translation and Control Entry (TCE) table. + +
+ PE DMA Address Validation and Translation in the Platform + + + + + + + + +
+ +
+ DMA Addressing Requirements + + + + R2--1. + + Upon receiving a DMA + transaction to the Memory Space of an I/O bus, the HB must perform the + validation and translation steps, as indicated in + and in + . + + + + + + DMA Address Decoding and Translation (I/O Bus Memory + Space) + + + + + + + + + Address Range at I/O Side of + HBn + + + + + Route and Translation + Requirements + + + + + Other Requirements and + Comments + + + + + + + + BPM’n,m to TPM’n,m + (n=0, 1, 2,...) + (m=0, 1) + (note 1) + + + HB does not respond or responds and signals an invalid + address error (See ). + + +   + + + + + BTTAn,m to TTTAn,m + (n=0, 1, 2,...) + (m=0, 1, 2,...) + (note 1) + + + If the PE that is trying to access this space is allowed + to access this space, then translate via the TCE table (as specified in ) and pass the translated address through + the HB, otherwise generate an invalid address or TCE extent error, as + appropriate (See ). + + + See Notes 2, 3 + + + + + All other addresses + + + Generate an invalid address error (See ). + + + See Note 3 + + + + + Notes: + + + n = # of HB Viewing or Receiving the Operation, m = # + of instance within the HB. + + + + After translation of the address, if the translated + address would re-access the same HB or another HB (for example, is in the + Peripheral Memory Space or Peripheral I/O Space of that HB or another HB), then + the HB generates an invalid address error (See ). + + + + If the Enhanced I/O Error Handling (EEH) option is + implemented and enabled, then on an error, the PE will enter the DMA Stopped + State (See ). + + + + + + + +
+ + + + R2--2. + + An HB must not act as a target + for operations in the I/O Space of an I/O bus. + + + +
+
+ DMA Address Translation and Control via the TCE + Mechanism + This architecture defines a Translation and Control Entry (TCE) + mechanism for translating and controlling DMA addresses. There are several + reasons for doing such translations, including: + + + + To provide a mechanism for increasing the number of addressing + bits for some IOAs. For example, IOAs which are only capable of accessing up to + 4 GB via DMA need a way to access above that limit when used in 64-bit + addressing systems and the addressing requirements go beyond 4 GB. + + + + To provide a redirection mechanism. A redirection mechanism is + needed, even for 64-bit addressing capable IOAs, in order to provide the + protection and indirection benefits provided by such a translation. + + + + The description of how the access to the TCE table occurs, for the + translation of a 32-bit address and using a 4 KB I/O page size, follows. The + most significant 20 bits of the address (for example, AD[31:12], for PCI) is + used as an offset into the TCE table for the PE to select the TCE. Thus, the + first TCE maps the addresses BTTAn to BTTAn + 0x00000FFF of the Memory Space of + the I/O bus; the second entry controls translation of addresses BTTAn + + 0x00001000 to BTTAn + 0x00001FFF, and so on. The translated real system address + is generated as follows. The Real Page Number (RPN) from the TCE replaces the + 20 most significant bits of the address from the I/O bus. The least significant + 12 bits from the I/O bus address are used as-is for the least significant 12 + bits of the new address. + Thus, the TCE table entries have a one-to-one correspondence with + the first n pages of the Memory Space of the I/O bus starting at BTTAn that + corresponds to the TCE table. The size of the Memory address space of the I/O + bus that can be mapped to the system address space for a particular HB depends + on how much System Memory is allocated to the TCE table(s) and on how much + mappable I/O bus Memory Space is unavailable due to IOAs which are mapped + there. + Each TCE also contains two control bits. These are used to identify + whether that page is mapped to the system address space, and if the page is + mapped, whether it is mapped read/write, read only, or write only. See the + for a definition of these control + bits. + The TCE table is the analogue of the system translation tables. + However, unlike the system translation tables, the dynamic page faulting of + memory during an I/O operation is not required (the page fault value, 0b00, in + the TCE Page Mapping and Control field is used for error detection; that is, + access to an invalid TCE by the I/O creates an error indication to the + software). + The size and location of the HB’s TCE table is set up and + changed only by the firmware. + + + + R2--1. + + The platform must provide the + “64-bit-addressing” and + “ibm,extended-address” OF properties in all HB nodes + of the device tree and the “ibm,extended-address” + OF property in the root node of the OF device tree. + + + + + R2--2. + + The bits of the TCE must be implemented + as defined in . + + + + + + + TCE Definition + + + + + + + + Bits + + + + + Description + + + + + + + + 0 to 51 + + + RPN: If the page mapping and control field of the TCE + indicate anything other than page fault, then these bits contain the Real Page + Number (RPN) to which the bus address is mapped in the system address space. In + certain HB implementations, all of these bits may not be required, however + enough bits must be implemented to match the largest real address in the + platform. + + + + + 52 to 61 + + + Reserved for future use. + + + + + 62 to 63 + + + Page Mapping and Control: These bits define page mapping + and read-write authority. They are coded as follows: + 00 Page fault (no access) + 01 System address space (read only) + 10 System address space (write only) + 11 System address space (read/write) + Code point 0b00 signifies that the page is not mapped. + It must be used to indicate a page fault error. Hardware must not change its + state based on the value in the remaining bits of a TCE when code point 0b00 is + set in this field of the TCE. + For accesses to system address space with an invalid + operation (write to a read-only page or read to a write-only page), the HB + generates an error. See for more information + about error handling. + + + + +
+ + + + R2--3. + + If the address that the HB would use to + access the TCE table (in order to get the TCE) would access outside of the TCE + table, then the HB must create a TCE extent error (See ). + + + + + R2--4. + + Enough bits must be implemented in the + TCE so that DMA IOAs are able to access all System Memory addresses. + + + + + R2--5. + + Each PE must have its own independent + TCE table. + + + + + R2--6. + + Any non-recoverable error while an HB + is accessing its TCE table must result in a TCE access error; the action to be + taken by the HB being defined under the TCE access error in . + + + + + R2--7. + + In implementations which cache TCEs, if + software changes a TCE, then the platform must perform the following steps: + First, if any data associated with the page represented by that TCE is in an + I/O bridge cache or buffer, the hardware must write the data, if modified, to + System Memory. Secondly, it must invalidate the data in the cache. Finally, it + must invalidate the TCE in the cache. + + + + + R2--8. + + Neither an IOA nor an HB must ever + modify a TCE. + + + + + R2--9. + + If the page mapping and control bits in + the TCE are set to 0b00, the hardware must not change its state based on the + values of the remaining bits of the TCE. + + + + + R2--10. + + The OS must initialize all its TCEs + upon receiving control from the platform. + + + +
+
+ +
+ Example Address Maps + shows how to construct a + simple address map with one PHB and with Peripheral Memory, Peripheral I/O, and + SCA spaces below 4 GB. + shows how to construct + the address map with Peripheral Memory, Peripheral I/O, and SCA spaces above 4 + GB. This configuration allows some overlap of the System Memory space and + 32-bit I/O bus memory space (with the resulting loss of the TCE table in the + overlap), while moving some of the SCA spaces above 4 GB. Several things can be + noted from this configuration: + + + + I/O bus memory areas can overlap System Memory addresses (see + memory space of PHB0). However, significant overlap of these I/O bus memory + areas and the TCE table may significantly reduce the amount of TCE table space + that is available for mapping I/O memory space to system address space (a + potential performance impact). + + + + The System Memory which is above 4GB is shown starting at 4GB. + This architecture also allows this to be pushed further up, with Peripheral + Memory, Peripheral I/O, and SCAs existing above 4 GB and below the System + Memory areas. + + + + BPM’n,m to TPM’n,m spaces for different PHBs + (different “n”) are allowed to occur at the same memory addresses + in the various memory spaces of different I/O buses, but are not required to do + so (and are not shown as the same in the figure). Implementations are likely + have BPM’n,m to TPM’n,m at the same address range for all + “n” when the BPM’n,m to TPM’n,m ranges are below 4 + GB. + + + +
+ Example Address Map: One PHB, Peripheral Memory and Peripheral + I/O Spaces below 4 GB + + + + + + + + +
+ +
+ Example Address Map: Four PHBs, all Peripheral Memory and + Peripheral I/O Spaces above 4GB + + + + + + + + +
+
+
+
diff --git a/Platform/ch_interrupt_controller.xml b/Platform/ch_interrupt_controller.xml new file mode 100644 index 0000000..788c5f6 --- /dev/null +++ b/Platform/ch_interrupt_controller.xml @@ -0,0 +1,726 @@ + + + Interrupt Controller + + This chapter specifies the requirements for the LoPAR interrupt + controller. Platforms may chose to virtualize the interrupt controller or to + provide the PowerPC External Interrupt option. + +
+ Interrupt Controller Virtualization + Virtualization of the interrupt controller is done through the + Interrupt Support hcalls. See . +
+ +
+ PowerPC External Interrupt Option + The PowerPC External Interrupt option is based upon a subset of the + PowerPC External Interrupt Architecture. The PowerPC External Interrupt + Architecture contains a register-level architectural definition of an interrupt + control structure. This architecture defines means for assigning properties + such as priority, destination, etc., to I/O and interprocessor interrupts, as + well as an interface for presenting them to processors. It supports both + specific and distributed methods for interrupt delivery. See also + A PowerPC External + Interrupt.htm#38341.--> + In NUMA platform configurations, the interrupt controllers may be + configured in disjoint domains. The firmware makes the server numbers visible + to any single OS image appear to come from a single space without duplication. + This may be done by appropriately initializing the interrupt presentation + controllers or the firmware may translate the server numbers presented to it in + RTAS calls before entering them into the interrupt controller registers. The OS + is made aware that certain interrupts are only served by certain servers by the + inclusion of the “ibm,interrupt-domain” + property in the interrupt controller nodes. + +
+ PowerPC External Interrupt Option Requirements + The following are the requirements for the PowerPC External + Interrupt option. Additional requirements and information relative to the MSI + option, when implemented with this option, are listed in . + + + + R1--1. + + For the PowerPC External + Interrupt option: Platforms must implement interrupt architectures + that are in register-level architectural compliance with + A PowerPC External + Interrupt. + + + + + R1--2. + + For the PowerPC External + Interrupt option: The platform’s OF device tree must include + one or more PowerPC External Interrupt Presentation node(s), as children of the + root node. + + + + + R1--3. + + For the PowerPC External + Interrupt option: The platform’s OF device tree must include + an “ibm,ppc-interrupt-server#s” and an + “ibm,ppc-interrupt-gserver#s” property as defined for + each processor in the processor’s /cpus/cpu + node. + + + + + R1--4. + + For the PowerPC External + Interrupt option: The various + “ibm,ppc-interrupt-server#s” property values seen by a + single OS image must be all unique. + + + + + R1--5. + + For the PowerPC External + Interrupt option: If an OS image sees multiple global interrupt + server queues, the “ibm,ppc-interrupt-gserver#s” + properties associated with the various queues must have unique values. + + + + + R1--6. + + For the PowerPC External + Interrupt option: The platform’s OF device tree must include + a PowerPC External Interrupt Source Controller node, as defined for each Bus + Unit Controller (BUC) that can generate PowerPC External Interrupt Architecture + interrupts, as a child of the platform’s root node. + + + + + R1--7. + + For the PowerPC External + Interrupt option: The platform’s OF device tree must conform + to the and + include the appropriate mapping and interrupt properties to allow the mapping + of all non-zero XISR values (interrupt#) to the + corresponding node generating the interrupt. + + + + + R1--8. + + For the PowerPC External + Interrupt option: The PowerPC External Interrupt Presentation + Controller node must not contain the + “used-by-rtas” property. + + + + + R1--9. + + For the PowerPC External + Interrupt option: The PowerPC External Interrupt Source Controller + node must contain the “used-by-rtas” + property. + + + + + R1--10. + + For the PowerPC External + Interrupt option: If the interrupt hardware is configured such that, + viewed from any given OS image, any interrupt source controller cannot direct + interrupts to any interrupt presentation controller, then the platform must + include the “ibm,interrupt-domain” property + in all interrupt source and presentation controller nodes for that OS so that + the OS can determine the servers that may be valid targets for any given + interrupt. + + + + + R1--11. + + For the PowerPC External + Interrupt option: All interrupt controller registers must be + accessed via Caching-Inhibited, Memory Coherence not required and Guarded + Storage mapping. + + + + + R1--12. + + For the PowerPC External + Interrupt option: The platform must manage the Available Processor + Mask Register so that global interrupts (server number field of the eXternal + Interrupt Vector Entry (XIVE) set to a value from + “ibm,ppc-interrupt-gserver#s”) are only sent to one + of the active processors. + + + + + R1--13. + + For the PowerPC External + Interrupt option: The platform must initialize the interrupt + priority in each XIVE to the least favored level (0xFF), enable any associated + IER bit for interrupt sources owned by the OS, and set the Current Processor + Priority Register to the Most favored level (0x00) prior to the transfer of + control to the OS so that no interrupts are signaled to a processor until the + OS has taken explicit action. + + + + + R1--14. + + For the PowerPC External + Interrupt option: Any implemented PowerPC External Interrupt + Architecture registers that are not reported in specific interrupt source or + destination controller nodes (such as the APM register) must be included in the + “reg” property of the + /reserved node. + + + + + R1--15. + + For the PowerPC External + Interrupt option: The interrupt source controller must prevent signalling new + interrupts when the XIVE interrupt priority field is set to the least favored + level. + + + + + R1--16. + + For the PowerPC External + Interrupt option: Interrupt controllers that do not implement the + behavior of Requirement , must provide + an Interrupt Enable Register (IER) which can be manipulated by RTAS, + + + + + R1--17. + + For the PowerPC External + Interrupt option: The platform must assign the Bus Unit Identifiers + (BUIDs) such that they form a compact address space. That is, while the first + BUID value is arbitrary, subsequent BUIDs should be contiguous. + + + + + R1--18. + + For the PowerPC External + Interrupt option: Platforms implementing interrupt server number + fields greater than 8 bits must include the + “ibm,interrupt-server#-size” property in the interrupt + source controller node. + + + + + R1--19. + + For the PowerPC External + Interrupt option: Platforms implementing interrupt buid number + fields greater than 9 bits must include the + “ibm,interrupt-buid-size” property in the interrupt + presentation controller node. + + + + + R1--20. + + For the PowerPC External + Interrupt option: Platforms must include the + “ibm,interrupt-server-ranges” property in the + interrupt presentation controller node. + + + + +
+ +
+ PowerPC External Interrupt Option Properties + See for property definitions. +
+ +
+ MSI Option + The Message Signaled Interrupt (MSI) or Enhanced MSI (MSI-X) + capability of PCI IOAs in many cases allows for greater flexibility in + assignment of external interrupts to IOA functions than the predecessor Level + Sensitive Interrupt (LSI) capability, and in some cases treats MSIs as a + resource pool that can be reassigned based on availability of MSIs and the need + of an IOA function for more interrupts than initially assigned. Platforms that + implement the MSI option implement the ibm,change-msi and + ibm,query-interrupt-source-number RTAS calls. These RTAS + calls manage interrupts in a platform that implements the MSI option. In + particular, these calls assign additional MSI resources to an IOA function (as + defined by its PCI configuration address: PHB_Unit_ID_Hi, + PHB_Unit_ID_Low, and config_addr), when supported by the platform. + See for more information on theses RTAS calls for + MSI management. + This architecture will refer generically to the MSI and MSI-X + capabilities as simply “MSI,” except where differentiation is + required. In this architecture, MSIs and LSIs are what the IOA function + signals, and what the software sees for that signal is ultimately the LSI or + MSI source number. The interrupt source numbers returned + by the ibm,query-interrupt-source-number RTAS call are + the numbers used to control the interrupt as in the ibm,get-xive, + ibm,set-xive, ibm,int-on, + and ibm,int-off RTAS calls. + PCI-X and PCI Express IOA functions that signal interrupts are + required by the PCI specifications to implement either the MSI or MSI-X + interrupt capabilities, or both. For PCI Express, it is expected that IOAs will + only support MSI or MSI-X (that is, no support for LSIs). When both MSI and + MSI-X are implemented by an IOA function, the MSI method will be configured by + the platform, but may be overridden by the OS or device driver, via the + ibm,change-msi RTAS call, to be MSI-X or, if assigned by + the firmware, to LSI (by removal of the MSIs assigned). + summarizes the LSI and MSI support. + + + LSI and MSI Support Requirements and Initial Assignment + + + + + + + + + + + + + IOA Type + + + + + LSI required by PCI specifications? + + + + + MSI or MSI-Xrequired by PCI specifications? + + + + + Bridge between IOA and PHB + + + + + Possible platform support + + + + + Initial interrupt assignmentAssignment means to allocate the platform + resources and to enable the interrupt in the IOA function’s + configuration space. + + + + + + If PHB does not support MSI option + (Not including PCI Express HBs) + + + If PHB supports MSI option + (Including all PCI Express HBs) + + + + + + + PCI + + + When interrupts are required + + + No + (allowed; optional) + + + - + + + LSI + + + LSI or MSI + + + LSIIf MSIs are to + be supported, the device driver must enable via the + ibm,change-msi RTAS call. + + + + + PCI-X + + + Encouraged when interrupts are required, for backward + platform compatibility + + + Yes + + + - + + + LSI + + + LSI or MSI + + + LSIIf MSIs are to + be supported, the device driver must enable via the + ibm,change-msi RTAS call. + + + + + PCI Express + + + Discouraged + (expect IOAs to not implement in most cases) + + + Yes + + + None or PCI Express switch only + + + n/a + + + MSI + + + MSIMSI as an + initial assignment means that one or more MSIs are reported as being available + for the IOA function. In addition, LSIs may also be reported but not enabled, + in which case if the device driver removes the assigned MSIs, the assigned LSI + are enabled by the platform firmware in the IOA function’s configuration + space. + + + + + Reverse bridge + (primary, PCI Express secondary) + + + LSI or not supported + If PCI Express IOA function does not support LSI, + then this combination is not supported. + + + LSI + If PCI Express + IOA function does not support LSI, then this combination is not + supported. or MSI + + + LSI + If the PCI + Express IOA function does not support LSI, then the platform will set the + initial interrupt assignment to MSI, and if the device driver does not support + MSI, then the IOA function will not be configurable (that is, conversion from + MSI to LSI through the bridge is not supported by this architecture). If LSI is + the initial assignment, then if MSIs are to be supported, device driver must + enable via the ibm,change-msi RTAS + call. + + + + +
+ + The ibm,change-msi RTAS call is used to query + the initial number of MSIs assigned to a PCI configuration address and to + request a change in the number of MSIs assigned. The MSIs interrupt source + numbers assigned to an IOA function are returned via the + ibm,query-interrupt-source-number + RTAS call. In addition, when the + ibm,query-interrupt-source-number RTAS call is + implemented, it may be used to query the LSI source numbers, also. The + ibm,query-interrupt-source-number RTAS call is called + iteratively, once for each interrupt assigned to the IOA function. When an IOA + function receives an initial assignment of an LSI, the interrupt number for + that LSI may also be obtained through the same OF device tree properties that + are used to report interrupt information when the + ibm,query-interrupt-source-number RTAS call is not + implemented. + + + + R1--1. + + The platform must implement the MSI + option if the platform contains at least one PCI Express HB. + Architecture and Software Note: The MSI + option may also be implemented in the absence of any PCI Express HBs. In that + case, the implementation of the MSI option is via the presence of the + implementation of the associated ibm,change-msi and + ibm,query-interrupt-source-number RTAS calls. + + + + + R1--2. + + For the MSI option: + The platform must implement the PowerPC External Interrupt option. + + + + + R1--3. + + For the MSI option: + The platform must implement the ibm,change-msi + and ibm,query-interrupt-source-number RTAS calls. + + + + + R1--4. + + For the MSI option: + The platform must initially assign LSI or MSIs to IOA functions as + defined in and must enable the + assigned interrupts in the IOA function’s configuration space (the + interrupts remains disabled at the PHB, and must be enabled by the device + driver though the ibm,set-xive and + ibm,int-on RTAS calls. + + + + + R1--5. + + For the MSI option: + The platform + must provide a minimum of one MSI per IOA function (that is per each unique PCI + configuration address, including the Function #) to be supported beneath the + interrupt source controller, and any given MSI and MSI source number must not + be shared between functions or within one function (even within the same + PE). + + + + + R1--6. + + For the MSI option: + The platform + must provide at least one MSI port (the address written by the MSI) per + Partitionable Endpoint (PE). + Platform Implementation Note: Requirement + in conjunction with Requirement may have certain ramifications on the + design. Depending on the implementation, a unique MSI port per IOA function may + be required, and not just a unique port per PE. + + + + + R1--7. + + For the MSI option with the + LPAR option: The platform must prevent a PE from creating an + interrupt to a partition other than those to which the PE is authorized by the + platform to interrupt. + + + + + R1--8. + + For the MSI option: + The platform must set the PCI configuration space MSI registers properly in an + IOA at all the following times: + + + + Initial boot time + + + + During the ibm,configure-connector RTAS + call + + + + During the ibm,change-msi or + ibm,query-interrupt-source-number RTAS call + + + + + + + R1--9. + + For the MSI option: + The platform must initialize any bridges necessary to appropriately route + interrupts at all the following times: + + + + At initial boot time + + + + During the ibm,configure-connector RTAS + call + + + + During the ibm,configure-bridge RTAS + call + + + + During the ibm,change-msi or + ibm,query-interrupt-source-number RTAS call + + + + + + + R1--10. + + For the MSI option: + The platform must provide the “ibm,req#msi” + property for any IOA function which is + requesting MSIs; at initial boot time and during the + ibm,configure-connector RTAS call. + + + + + R1--11. + + For the MSI option: + The platform + must remember and recover on error recovery any previously allocated and setup + interrupt information in the platform-owned hardware. + Software and Platform Implementation Note: In + Requirement , it is possible that some + interrupts may be lost as part of the error recovery, and software should be + implemented to take into consideration that possibility. + + + + +
+
+ +
+ Platform Reserved Interrupt Priority Level Option + The Platform Reserved Interrupt Priority Level option allows + platforms to reserve interrupt priority levels for internal uses. When the + platform exercises this option, it notifies the client program via the OF + device tree “ibm,plat-res-int-priorities” + property of the root node of the device tree. + + + + R1--1. + + For the Platform Reserved + Interrupt Priority Level option: The platform must include + the“ibm,plat-res-int-priorities” + property in the root node of the device tree. + + + + + R1--2. + + For the Platform Reserved + Interrupt Priority Level option: The platform must not reserve + priority levels 0x00 through 0x07 and 0xFF for internal use. + + + + +
+
diff --git a/Platform/ch_io_devices.xml b/Platform/ch_io_devices.xml new file mode 100644 index 0000000..e6df909 --- /dev/null +++ b/Platform/ch_io_devices.xml @@ -0,0 +1,989 @@ + + + I/O Devices + + This chapter describes requirements for IOAs. It adds detail to areas + of the PCI architectures (conventional PCI, PCI-X and PCI Express) that are + either unaddressed or optional. It also places some requirements on firmware + and the OS for IOA support. It provides references to specifications to which + IOAs must comply and gives design notes for IOAs that run on LoPAR systems. + + +
+ PCI IOAs + + + + + R1--1. + + All PCI IOAs must be capable of decoding and + generating either a full 32-bit address or a full 64-bit address. + + + + + R1--2. + + IOAs that implement conventional PCI must be compliant with the + most recent version of the at the + time of their design, including any approved Engineering Change Requests (ECRs) + against that document. + + + + + R1--3. + + IOAs that implement PCI-X must be compliant + with the most recent version of the + at the time of their design, including any approved Engineering Change Requests + (ECRs) against that document. + + + + + R1--4. + + IOAs that implement PCI Express must be + compliant with the most recent version of the at the time of their design, including any + approved Engineering Change Requests (ECRs) against that document + + + + + Architecture Note: Revision 2.1 and later of + the PCI Local Bus Specification requires that PCI masters + which receive a Retry target termination to unconditionally repeat the same + request until it completes. The master may perform other bus transactions, but + cannot require those to complete before repeating the original transaction + which was previously target terminated with Retry. Revision 2.1 of the + specification (page 49) also includes an example which describes how the + requirement above applies to a multi-function IOA. See page 48-49 of the 2.1 + revision of the PCI Local Bus Specification for more + detail. Revision 2.0 of the PCI Local Bus Specification + includes a definition of target termination via Retry, but did not spell out + the requirement described above for masters, as does the 2.1 revision of the + specification. Masters which are designed based on revision 2.0 of the + specification that perform other transactions following target termination with + Retry, may cause live-locks and/or deadlocks when installed in a system that + utilizes bridges (host bridge or PCI-PCI bridges) that implement Retry, delayed + transactions, and/or TCEs, when those masters require following transactions to + complete before the original transaction that was terminated with the target + Retry. This revision 2.0 to revision 2.1 compatibility problem has been + observed on several IOAs that have asked for deviations to Requirement . Wording was added to the revision 2.2 of + the PCI Local Bus Specification which makes a statement + similar to this Architecture Note. + +
+ Resource Locking + + + + R1--1. + + PCI IOAs, excepting bridges, must not depend on the PCI LOCK# + signal for correct operation nor require any other PCI IOA to assert LOCK# for + correct operation. + + + + + There are some legacy IOAs on legacy buses which require LOCK#. + Additionally, LOCK# is used in some implementations to resolve deadlocks + between bridges under a single PHB. These uses of LOCK# are permitted. +
+ +
+ PCI Expansion ROMs + + + + R1--1. + + PCI expansion ROMs must have a ROM image + with a code type of 1 for OF as provided in the . This ROM image must abide by the ROM image + format for OF as documented in the . + + + + + LoPAR systems rely on OF - not BIOS - to boot. This is why strong + requirements for OF device support are made. + Vital Product Data (VPD) is an optional feature for PCI adapters + and it is strongly recommended that VPD be included in all PCI expansion ROMs. + If it is put in the PCI expansion ROM in accordance with the , VPD will be reported in the OF device + tree. If the VPD information is formatted as defined in Revision 2.2 with the + new capabilities feature, or in any other format, firmware will not read the + VPD, and the device driver for the IOA will have to reformat any provided VPD + into an OS specified format. It is still required that the keywords and their + values must conform to those specified by either PCI 2.1 or PCI 2.2, no matter + how they are formatted. Refer to Requirement . +
+ +
+ Assignment of Interrupts to PCI IOAs + + + + R1--1. + + All PCI IOAs must use the PowerPC + interrupt controller, except when made transparent to the OS by the platform + through the architected hcall()s. + + + + + R1--2. + + PCI IOAs that do not reside in the + Peripheral Memory Space and Peripheral I/O Space of the same PHB must not share + the same LSI source. + + + + For further information on the interrupt controller refer to . + It is strongly advised that system board designers assign one + interrupt for each interrupt source. Additionally, multi-function PCI IOAs + should have multiple interrupt sources. For restrictions on sharing interrupts + with the LPAR option, see Requirement . + For restrictions on sharing MSIs, see Requirement and Requirement . +
+ +
+ PCI-PCI Bridge Devices + + + + R1--1. + + Firmware must initialize all PCI-to-PCI + bridges. See . + + + + All bridges and switches are required to comply with the bus + specification(s) of the buses to which they are attached. See Requirement . +
+ +
+ Graphics Controller and Monitor Requirements for Clients + + The graphics requirements for servers are different from those for + portable and personal systems. + + + + R1--1. + + Plug-in graphics controllers for portable + and personal platforms must provide graphics mode sets in the OF PCI expansion + ROM image in accordance with the + . + + + + + Portable and personal platforms are strongly urged to support some + mechanism which allows the platform to electronically sense the display + capabilities of monitors. + + For graphics controllers that are placed on the system board, the + graphics mode sets can be put in system ROM. The mode set software put in the + system ROM in this case would be FCode and would be largely or entirely the + same as the FCode that would be in the PCI expansion ROM if the same graphics + controller was put on a plug-in PCI card. +
+ +
+ PCI Plug-in Graphic Cards + + + + R1--1. + + (Requirement Number Reserved + For Compatibility) + + + + + R1--2. + + PCI plug-in graphics cards which are + going to be the primary display IOA during the time prior to the OS device + driver being loaded must contain an OF display driver on the IOA. + + + +
+ +
+ PCI Cache Support Protocol + The PCI architecture allows for the optional implementation of + caching of data. This architecture basically assumes that the data in I/O + memory is non-coherent. As such, platforms are not required to implement the + optional PCI Cache Support protocol using the SBO# and SDONE signals. + Therefore, IOAs used in LoPAR platforms should not count on those signals for + proper operations. + + + + R1--1. + + IOAs used in LoPAR platforms + and their device drivers must not require the use of the PCI signals SBO# and + SDONE for proper operations. + + + +
+ +
+ PCI Configuration Space for IOAs + There are several writable fields in the PCI Configuration Header. + Some of these are written by the firmware and should never be changed by the + device driver. + + + + R1--1. + + All registers and bits in the PCI Configuration Header must be + set to a platform specific value by firmware and preserved by software, except + that software is responsible for setting the configuration space as indicated + in . + + + Software Programming of PCI Configuration Header Registers + + + + + + + + Register Name + + + Bit Name + + + Software Action + + + + + + + Command + + + Bus Master + + + Must write to a 1 before the first DMA operation after a + reset. Must write to a 0 before unconfiguring device driver. + + + + + Memory Space + + + Must write to a 1 before the first MMIO operation to + IOA’s memory space (if any) after a reset. Must write to a 0 before + unconfiguring device driver. + + + + + IO Space + + + Must write to a 1 before the first MMIO operation to + IOA’s I/O space (if any) after a reset. Must write to a 0 before + unconfiguring device driver. + + + + + all other bits + + + Must restore to previous value after any reset operation + (for example, via ibm,set-slot-reset Function 1 or 3). + The ibm,configure-bridge RTAS call is available to assist + in restoring values, where appropriate. + + + + + Built in Self Test (BIST) + + + all + + + If implemented, software may use if desired. + + + + + all other PCI header registers that may be modified by + firmware after initial reset or by ibm,configure-connector for DR operations + + + all + + + Must restore to previous value after any reset operation + (for example, via ibm,set-slot-reset-state Function 1). + The ibm,configure-bridge RTAS call is available to assist + in configuring PCI bridges and switches, where appropriate. + + + + +
+
+
+ + + R1--2. + + All IOAs that implement PCI-X Mode 2 or PCI Express must supply + the “ibm,pci-config-space-type” property + (see ). + Implementation Note: The + “ibm,pci-config-space-type” + property in Requirement is added for platforms that support + I/O fabric and IOAs that implement PCI-X Mode 2, and PCI Express. To access the + extended configuration space provided by PCI-X Mode 2 and PCI Express, all I/O + fabric leading up to an IOA must support a 12-bit register number. In other + words, if a platform implementation has a conventional PCI bridge leading up to + an IOA that implements PCI-X Mode 2, the platform will not be able to provide + access to the extended configuration space of that IOA. The + “ibm,config-space-type” property in the IOA's OF node + is used by device drivers to determine if an IOA’s extended + configuration space can be accessed. + + +
+
+ +
+ PCI IOA Use of PCI Bus Memory Space Address 0 + Some PCI IOAs will fail when given a bus address of 0. In the PC + world, address 0 would not be a good address, so some PCI IOA designs which + were designed for the PC arena will check for an address of 0, and fail the + operation if it is 0. + + + + R1--1. + + For systems that use PCI IOAs + which will fail when given a bus address of 0 for DMA operations, and when the + operations for which those IOAs are used are other than system memory dump + operations, then the OS must prevent the mapping of PCI bus address 0 for PCI + DMA operation for such IOAs. + + + + + R1--2. + + PCI IOAs used for dumping contents of + system memory must operate properly with a PCI bus address of 0 for PCI DMA + operations. + + + + + R1--3. + + The firmware must not map an IOA used for + loading a boot image to an address of 0, when loading a boot image, if that IOA + cannot accept an address of 0. + + + + Implementation Note: A reasonable + implementation of Requirement would + be to have an interface between the device driver and the kernel to allow the + device driver to indicate to the kernel that the restriction is required for + that IOA, so that all IOAs for that kernel image are not affected. +
+ +
+ PCI Express Completion Timeout + Prior to the implementation of the PCI Express additional + capability to set the Completion Timeout Value and Completion Timeout Disable + in the PCI Express Device Control 2 register of an IOA, the IOAs need + device-specific way to provide the disable capability. In addition, the + platforms need to provide a way for the OSs and device drivers to know when to + disable the completion timeout of these devices that only provide a + device-specific way of doing so. + + + + R1--1. + + PCI Express IOAs must either provide a + device-specific way to disable their DMA Completion Timeout timer or must + provide the Completion Timeout Disable or Completion Timeout Value capability + in the PCI Express Device Control 2 register, and device drivers for IOAs that + provide a device-specific way must disable their DMA Completion Timeout timer + if it is either unknown whether the IOA provides a sufficiently long timer + value for the platform, or if it is known that they do not provide a sufficient + timeout value (for example, if the + “ibm,max-completion-latency” property is not + provided). + + + + + R1--2. + + Platforms must provide the + “ibm,max-completion-latency” property in + each PCI Express PHB node of the OF Device Tree. + + + + +
+ +
+ PCI Express I/O Virtualized (IOV) Adapters + PCI Express defines I/O Virtualized (IOV) adapters, where such an + adapter has separate resources for each virtual instance, called a Virtual + Function (VF). There are two PCI specifications that exist to define such + adapters: + + + + defines the + requirements for SR-IOV adapters. + + + + defines the + requirements for MR-IOV adapters. + + + + The interface presented to an OS from an MR-IOV adapter will look + the same as an SR-IOV adapters, and therefore will not be described separately + here. + IOV adapters and/or the VFs of an IOV adapter that has IOV enabled, + are assigned to OSs as follows (see also for a full set of characteristics of these + environments): + + + + For the Legacy Dedicated environment, the + entire adapter is assigned to one LPAR, with the IOV functionality not enabled. + In this mode, the OS provides device driver(s) for the adapter Function(s). VFs + do not exist, because IOV is not enabled. The OS is given the capability to do + Hot Plug add, remove, and replace in a non-managed environment (without an + HMC), and may be given that capability in a managed environment. + + + + For the SR-IOV Non-shared environment, the + entire adapter is assigned to one LPAR, with IOV functionality enabled, but + with the Physical Function(s) (PFs) of the adapter hosted by the platform. Only + VFs are presented to the OS. The OS is given the capability to do Hot Plug add, + remove, and replace in a non-managed environment (without an HMC), and may be + given that capability in a managed environment. + + + + For the SR-IOV Shared environment, the + adapter is assigned to the platform, with IOV functionality enabled. The + platform then assigns VF(s) to OS(s). Only the managed environment applies, and + add/remove/replace operations are controlled by DLPAR operations to the OS(s) + from the management console. + + + + For all environments except the SR-IOV Shared, multiple functions + will appear as a multi-function IOA with possible sharing of a single PE. For + example, the multi-function adapters may have a shared EEH domain and shared + DMA window. + Determination of which of the above environments is supported for a + given platform and partition or OS type is beyond the scope of this + architecture. + defines the + characteristics of these environments. + + + IOV Environment Characteristics + + + + + + + + + +   + + + + + Legacy Dedicated + + + + + SR-IOV Non-shared + + + + + SR-IOV Shared + + + + + + + + Entire adapter assigned to OS, IOV not enabled + + + yes + + + n/a + + + n/a + + + + + Entire adapter assigned to OS, IOV enabled + + + n/a + + + yes + + + n/a + + + + + Adapter can be shared across multiple OSs, IOV enabled + + + n/a + + + n/a + + + yes + + + + + Function DD support + + + Plain Function only + (not VF or PF) + + + VF only + + + VF only + + + + + PFs managed by platform? + + + n/a + + + yes + + + yes + + + + + Managed environment support? + + + yes + + + yes + + + yes + + + + + Non-managed environment support? + + + yes + + + yes + + + no + + + + + OS controlled Hot Plug capable? + + + yes + + + yes + + + no + + + + + DLPAR capable? + + + yes + + + yes + + + yes + + + + + All functions under one PHB in the OF Device Tree for the adapter? + + + yes + + + yes + + + no + + + + + All functions under separate PHBs in the OF Device Tree + for the same adapterThe adapter is + physically under one PHB, but the platform creates separate + “virtual” PHBs in the OF Device Tree and virtualizes the PCI + Express configuration space for the various functions.? + + + no + + + no + + + yes + + + + + config_addr translation + (virtualization) by the platform (that is, the bus/device/function of the + config_addr does not necessarily correspond to what the + device has programmed) + + + no + + + yes + + + yes + + + + + Shared PE domain (for example, shared EEH domain, shared DMA window) + + + yes + + + yes + + + no + + + + +
+ + + + R1--1. + + PCI Express Single Root IOV (SR-IOV) + adapters must comply to the . + + + + + R1--2. + + PCI Express Multi-Root IOV (MR-IOV) + adapters must comply to the . + + + + + R1--3. + + The platform must present within the + device tree nodes for all PCI Express adapters configured to operate in IOV + mode the "ibm,is-vf" property as defined in section + . + + + +
+
+ +
+ Multi-Initiator SCSI Support + Multi-initiator SCSI support is identified in the OF device tree. + + + + R1--1. + + Platform Implementation: + Platforms must support the “scsi-initiator-id” + property as described in and . + + + +
+ +
+ Contiguous Memory + I/O devices that require contiguous memory pages (either real or via + contiguous TCEs) cannot reasonably be accommodated in LoPAR platforms. When + TCEs are turned off, that would require that real physical memory addresses be + allocated. When TCEs are on, that would require contiguous TCEs be assigned, + and although that is the first attempt by the OS’s TCE assignment + algorithm, the algorithm will assign non-contiguous ones if contiguous ones + cannot be assigned. Dynamic Reconfiguration complicates the contiguous problem + even further. + + + + R1--1. + + I/O devices and/or their device drivers used + in LoPAR platforms must implement scatter/gather capability for DMA operations + such that they do not require contiguous memory pages to be allocated for + proper operation. + + + +
+ +
+ Re-directed Serial Ports + The “ibm,vty-wrap-capable” OF + device tree property will be present in an OF device tree of a serial port node + when the OS data communication with that serial port controller can be + redirected, or wrapped, away from the physical serial port connector to an + ibm,vty device, which is often a virtual terminal session + of the Hardware Management Console (HMC). This property indicates to serial + port diagnostic programs that additional end user information should be + displayed during the serial port diagnostic test indicating that it is possible + that serial port data could be redirected away from the physical serial port + preventing the execution of wrap tests with physical wrap plugs. The end user + information should describe that initiating a virtual terminal session causes + the serial port controller's data to be wrapped away from the physical serial + port connection and that terminating a virtual terminal session causes the + serial port controller's data to be returned to the physical serial port + connection. The “ibm,vty-wrap-capable” + property is present with a value of null when this re-direction capability + exists and is absent when this capability does not exist. + + + + R1--1. + + The “ibm,vty-wrap-capable” + OF device tree property must + be present in an OF device tree of a serial port node when the OS data + communication with that serial port controller can be redirected, or wrapped, + away from the physical serial port connector to an ibm,vty device, and must not + be present if this capability does not exist. + + + +
+ +
+ System Bus IOAs + This section lists the requirements for the systems to support IOAs + connected to the system bus or main I/O expansion bus. + + + + R1--1. + + Each system bus IOA must be a bus + master. + + + + + R1--2. + + Firmware must assign unique addresses to all + system bus IOA facilities. + + + + + R1--3. + + Addresses assigned to system bus IOA + facilities must not conflict with the addresses mapped by any host bridge on + the system bus. + + + + + R1--4. + + System bus IOAs must be assigned interrupt + sources for their interrupt requirements by firmware. + + + + + R1--5. + + A system bus IOA’s OF + “interrupts” property must reflect + the interrupt source and type allocation for the device. + + + + + R1--6. + + All system bus IOA interrupts must be low + true level sensitive (referred to as level sensitive). + + + + + R1--7. + + Interrupts assigned to system bus IOAs must + not be shared with other IOAs. + + + + + R1--8. + + The OF unit address (first entry of the + “reg” property) of a system + bus IOA must stay the same from boot to boot. + + + + + R1--9. + + Each system bus IOA must have documentation + for programming the IOA and an OF binding which describes at least the + “name”, + “reg”, + “interrupts”, and + “interrupt-parent” + properties for the device. + + + + +
+
diff --git a/Platform/ch_io_topology.xml b/Platform/ch_io_topology.xml new file mode 100644 index 0000000..87fc315 --- /dev/null +++ b/Platform/ch_io_topology.xml @@ -0,0 +1,2610 @@ + + + I/O Bridges and Topologies + + There will be at least one bridge in a platform which interfaces to the + system interconnect on the processor side, and interfaces to the Peripheral + Component Interface (PCI) bus on the other. This bridge is called the + PCI Host Bridge (PHB). + The architectural requirements on the PHB, as well as other aspects of the I/O + structures, PCI bridges, and PCI Express switches are defined in this chapter. + + +
+ I/O Topologies and Endpoint Partitioning + As systems get more sophisticated, partitioning of various components + of the system will be used, in order to obtain greater Reliability, + Availability, and Serviceability (RAS). For example, Dynamic Reconfiguration + (DR) allows the removal, addition, and replacement of components from an + OS’s pool of resources, without having to stop the operation of that OS. + In addition, Logical Partitioning (LPAR) allows the isolation of resources used + by one OS from those used by another. This section will discuss aspects of the + partitioning of the I/O subsystem. Further information on DR and LPAR can be + found in . + To be useful, the granularity of assignment of I/O resources to an OS + needs to be fairly fine-grained. For example, it is not generally acceptable to + require assignment of all I/O under the same PCI Host Bridge (PHB) to the same + partition in an LPARed system, as that restricts configurability of the system, + including the capability to dynamically move resources between + partitionsDynamic LPAR or DLPAR is + defined by the Logical Resource Dynamic Reconfiguration (LRDR) option. See + for more information. Assignment of all + IOAs under the same PHB to one partition may be acceptable if that I/O is + shared via the Virtual I/O (VIO) capability defined in .. To be able to partition + I/O adapters (IOAs), groups of IOAs or portions of IOAs for DR or to different + OSs for LPAR will generally require some extra functionality in the platform + (for example, I/O bridges and firmware) in order to be able to partition the + resources of these groups, or endpoints, while at the same time preventing any + of these endpoints from affecting another endpoint or getting access to another + endpoint’s resources. These endpoints (that is, I/O subtrees) that can + be treated as a unit for the purposes of partitioning and error recovery will + be called Partitionable Endpoints (PEs)A + “Partitionable Endpoint” in this architecture is not to be + confused with what the PCI Express defines as an “endpoint.” PCI + Express defines an endpoint as “a device with a Type 0x00 Configuration + Space header.” That means PCI Express defines any entity with a unique + Bus/Dev/Func # as an endpoint. In most implementations, a PE will not exactly + correspond to this unit. and this concept will be called + Endpoint Partitioning. + A PE is defined by its Enhanced I/O Error Handling (EEH) domain and + associated resources. The resources that need to be partitioned and not overlap + with other PE domains include: + + + + The Memory Mapped I/O (MMIO) Load and + Store address space which is available to the PE. This is + accomplished by using the processor’s Page Table mechanism (through + control of the contents of the Page Table Entries) and not having any part of + two separate PEs’ MMIO address space overlap into the same 4 KB system + page. Additionally, for LPAR environments, the Page Table Entries are + controlled by the hypervisor. + + + + The DMA I/O bus address space which is available to the PE. This is + accomplished by a hardware mechanism (in a bridge in the platform) which + enforces the correct DMA addresses, and for LPAR, this hardware enforcement is + set up by the hypervisor. It is also important that a mechanism be provided for + LPAR such that the I/O bus addresses can further be limited at the system level + to not intersect; so that one PE cannot get access to a partition’s + memory to which it should not have access. The Translation Control Entry (TCE) + mechanism, when controlled by the firmware (for example, a hypervisor), is such + a mechanism. See for more information + on the TCE mechanism. + + + + The configuration address space of the PE, as it is made available + to the device driver. This is accomplished through controlling access to a + PE’s configuration spaces through Run Time Abstraction Services (RTAS) + calls, and for LPAR, these accesses are controlled by the hypervisor. + + + + The interrupts which are accessible to the PE. An interrupt cannot + be shared between two PEs. For LPAR environments, the interrupt presentation + and management is via the hypervisor. + + + + The error domains of the PE; that is, the error containment must be + such that a PE error cannot affect another PE or, for LPAR, another partition + or OS image to which the PE is not given access. This is accomplished though + the use of the Enhanced I/O Error Handling (EEH) option of this architecture. + For LPAR environments, the control of EEH is through the hypervisor via several + RTAS calls. + + + + The reset domain: A reset domain contains all the components of a + PE. The reset is provided programmatically and is intended to be implemented + via an architected (non implementation dependent) method.For example, through a Standard Hot Plug + Controller in a bridge, or through the Secondary Bus Reset bit in the Bridge + Control register of a PCI bridge or switch. Resetting a + component is sometimes necessary in order to be able to recover from some types + of errors. A PE will equate to a reset domain, such that the entire PE can be + reset by the ibm,set-slot-reset RTAS call. For LPAR, the + control of the reset from the RTAS call is through the hypervisor. + + + + In addition to the above PE requirements, there may be other + requirements on the power domains. Specifically, if a PE is going to + participate in DR, including DLPAR,To + prevent data from being transferred from one partition to another via data + remaining in an IOA’s memory, most implementations of DLPAR will require + the power cycling of the PE after removal from one partition and prior to + assigning it to another partition. then either the power + domain of the PE is required to be in a power domain which is separate from + other PEs (that is, power domain, reset domain, and PE domain all the same), or + else the control of that power domain and PCI Hot Plug (when implemented) of + the contained PEs will be via the platform or a trusted platform agent. When + the control of power for PCI Hot Plug is via the OS, then for LPAR + environments, the control is also supervised via the hypervisor. + It is possible to allow several cooperating device drivers to share a + PE. Sharing of a PE between device drivers within one OS image is supported by + the constructs in this architecture. Sharing between device drivers in + different partitions is beyond the scope of the current architecture. + A PE domain is defined by its top-most (closest to the PHB) PCI + configuration address (in the terms of the RTAS calls, the + PHB_Unit_ID_Hi, PHB_Unit_ID_Low, and config_addr ), which will be + called the PE configuration address in this architecture, + and encompasses everything below that in the I/O tree. The top-most PCI bus of + the PE will be called the PE primary bus. Determination + of the PE configuration address is made as described in . + A summary of PE support can be found in . This architecture assumes that there is a + single level of bridge within a PE if the PE is heterogeneous (some + Conventional PCI Express), and these cases are shown by the shaded cells in the + table. + + + Conventional PCI Express PE Support Summary + + + + + + + + + Function + + + + + IOA Type + + + + + PE Primary BusPCI Express  + + + + + + + + PE determination + (is EEH supported for the IOA?) + + + All + + + Use the ibm,read-slot-reset-state2 + RTAS call. + + + + + PE reset + + + All + + + PE reset is required for all PEs and is + activated/deactivated via the ibm,set-slot-reset RTAS + call. The PCI configuration address used in this call is the PE configuration + address (the reset domain is the same as the PE domain). + + + + + + ibm,get-config-addr-info2RTAS call + + + PCI + Express + + + Required to be implemented. + + + + + Top of PE domain determinationPE + configuration address is used as input to the + RTAS calls which are used for PE control, namely: + ibm,set-slot-reset, + ibm,set-eeh-option, + ibm,slot-error-detail, + ibm,configure-bridge + (How to obtain the PE configuration address) + + + PCI + Express + + + Use the ibm,get-config-addr-info2 + RTAS call to obtain PE configuration address. + + + + + Shared PE determinationIf device + driver is written for the shared PE + environment, then this may be a don’t care. + (is there more than one IOA per PE?) + + + PCI + Express + + + Use the ibm,get-config-addr-info2 + RTAS call. + + + + + PEs per PCI Hot Plug domain and PCI Hot Plug control + point + + + PCI + Express + + + May have more than one PE per PCI Hot Plug DR entity, but + a PE will be entirely encompassed by the PCI Hot Plug power domain. If more + than one PE per DR entity, then PCI Hot Plug control is via the platform or + some trusted platform agent. + + + + +
+ + + + R1--1. + + All platforms must implement the + ibm,get-config-addr-info2 RTAS call. + + + + + R1--2. + + All platforms must implement the + ibm,read-slot-reset-state2 RTAS call. + + + + + R1--3. + + For the EEH option: + The resources of one PE must not overlap the resources of another PE, + including: + + + + Error domains + + + + MMIO address ranges + + + + I/O bus DMA address ranges (when PEs are below the same PHB) + + + + Configuration space + + + + Interrupts + + + + + + + R1--4. + + For the EEH option: + All the following must be true relative to a PE: + + + + An IOA function must be totally encompassed by a PE. + + + + All PEs must be independently resetable by a reset domain. + + + Architecture Note: The partitioning of PEs + down to a single IOA function within a multi-function IOA requires a way to + reset an individual IOA function within a multi-function IOA. For PCI, the only + mechanism defined to do this is the optional PCI Express Function Level Reset + (FLR). A platform supports FLR if it supports PCI Express and the partitioning + of PEs down to a single IOA function within a multi-function IOA. When FLR is + supported, if the ibm,set-slot-reset RTAS call uses FLR + for the Function 1/Function 0 + (activate/deactivate reset) sequence for an IOA function, then the platform + provides the “ibm,pe-reset-is-flr” property + in the function’s node of the OF device tree, See + for more information. + + + + + R1--5. + + The platform must own (be + responsible for) any error recovery for errors that occur outside of all PEs + (for example in switches and bridges above defined PEs). + Implementation Note: As part of the error + recovery of Requirement , the platform + may, as part of the error handling of those errors, establish an equivalent EEH + error state in the EEH domains of all PEs below the error point, in order to + recover the hardware above those EEH domains from its error state. The platform + also returns a PE Reset State of 5 (PE is unavailable) + with a PE Unavailable Info non-zero (temporarily + unavailable) while a recovery is in progress. + + + + + R1--6. + + The platform must own (be responsible for) + fault isolation for all errors that occur in the I/O fabric (that is, down to + the IOA; including errors that occur on that part of the I/O fabric which is + within a PE’s domain). + + + + + R1--7. + + For the EEH option with the PCI + Hot Plug option: All of the following must be true: + + + + If PCI Hot Plug operations are to be controlled by the OS to which + the PE is assigned, then the PE domain for the PCI Hot Plug entity and the PCI + Hot Plug power domain must be the same. + + + + All PE domains must be totally encompassed by their respective PCI + Hot Plug power domain, regardless of the entity that controls the PCI Hot Plug + operation. + + + + + + + R1--8. + + All platforms that implement the + EEH option must enable that option by default for all PEs. + Implementation Notes: + + + See for requirements + relative to EEH requirements with LPAR. + + + + Defaulting to EEH enabled, as required by Requirement + does not imply that the platform has no + responsibility in assuring that all device drivers are EEH enabled or EEH safe + before allowing their the Bus Master, Memory Space or I/O Space bits in the PCI + configuration Command register of their IOA to be set to a 1. Furthermore, even + though a platform defaults its EEH option as enabled, as required by + Requirement does not imply that the + platform cannot disable EEH for a PE. See Requirement + for more information. + + + + + + + + + The following two figures show some examples of the concept of + Endpoint Partitioning. See also for + more information on the EEH option. + +
+ PE and DR Partitioning Examples for Conventional PCI and PCI-X HBs + + + + + + + + +
+ +
+ PE and DR Partitioning Examples for PCI Express HBs + + + + + + + + +
+
+ +
+ PCI Host Bridge (PHB) Architecture + The PHB architecture places certain requirements on PHBs. There + should be no conflict between this document and the PCI specifications, but if + there is, the PCI documentation takes precedence. The intent of this + architecture is to provide a base architectural level which supports the PCI + architecture and to provide optional constructs which allow for use of 32-bit + PCI IOAs in platforms with greater than 4 GB of system addressability. + + + + R1--1. + + All PHBs that implement + conventional PCI must be compliant with the most recent version of the + at the time of their design, including any + approved Engineering Change Requests (ECRs) against that document. + + + + + R1--2. + + All PHBs that + implement PCI-X must be compliant with the most + recent version of the at the time of + their design, including any approved Engineering Change Requests (ECRs) against + that document. + + + + + R1--3. + + All PHBs that + implement PCI Express must be compliant with the + most recent version of the at the + time of their design, including any approved Engineering Change Requests (ECRs) + against that document. + + + + + R1--4. + + All requirements + defined in for HBs must + be implemented by all PHBs in the platform. + + + + +
+ PHB Implementation Options + There are a few implementation options when it comes to + implementing a PHB. Some of these become requirements, depending on the + characteristics of the system for which the PHB is being designed. The options + affecting PHBs, include the following: + + + + The Enhanced I/O Error Handling (EEH) option enhances RAS + characteristics of the I/O and allows for smaller granularities of I/O + assignments to partitions in an LPAR environment. + + + + The Error Injection (ERRINJCT) option enhances the testing of the + I/O error recovery code. This option is required of bridges which implement the + EEH option. + + + + + + R1--1. + + All PHBs + for use in platforms which implement LPAR must support EEH, in support of virtualizations + requirements in . + + + + + R1--2. + + All PCI HBs designed for use in platforms + which will support PCI Express must support the PCI extended configuration + address space and the MSI option. + + + +
+ +
+ PCI Data Buffering and Instruction Queuing + Some PHB + implementations may include buffers or queues for DMA, + Load, and Store operations. These buffers are required to be transparent to the + software with only certain exceptions, as noted in this section. + Most + processor accesses to System Memory go through the processor data cache. When + sharing System Memory with IOAs, hardware must maintain consistency with the + processor data cache and the System Memory, as defined by the requirements in + . + + + + R1--1. + + PHB implementations which + include buffers or queues for DMA, Load, and + Store operations must make sure that these are transparent to the + software, with a few exceptions which are allowed by the PCI architecture, by + , and by . + + + + + R1--2. + + PHBs must accept up to a 128 byte MMIO + Loads, and must do so without compromising performance + of other operations. + + + + +
+ PCI <emphasis>Load</emphasis> and <emphasis>Store</emphasis> Ordering + For the platform Load and + Store ordering requirements, see + and the + appropriate PCI specifications (per Requirements + , + , and + ). Those requirements will, for most + implementations, require strong ordering (single threading) of all + Load and Store operations through the PHB, + regardless of the address space on the PCI bus to which they are targeted. + Single threading through the PHB means that processing a + Load requires that the PHB wait on the Load + response data of a Load issued on the PCI bus prior to + issuing the next Load or Store on + the PCI bus. +
+ +
+ PCI DMA Ordering + For the platform DMA ordering requirements, see the requirements in + this section, in , and the appropriate + PCI specifications (per Requirements + , + , and + ). + In general, the ordering for DMA path operations from the I/O bus + to the processor side of the PHB is independent from the + Load and Store path, with the exception stated + in Requirement . Note that in the + requirement, below, a read request is the initial request + to the PHB and the read completion is the data phase of + the transaction (that is, the data is returned). + + + + R1--1. + + (Requirement Number Reserved + For Compatibility) + + + + + R1--2. + + (Requirement Number Reserved + For Compatibility) + + + + + R1--3. + + (Requirement Number Reserved + For Compatibility) + + + + + R1--4. + + The hardware must make sure that + a DMA read request from an IOA that specifies any byte address that has been + written by a previous DMA write operation (as defined by the untranslated PCI + address) does not complete before the DMA write from the previous DMA write is + in the coherency domain. + + + + + R1--5. + + (Requirement Number Reserved + For Compatibility) + + + + + R1--6. + + The hardware must make sure that + all DMA write data buffered from an IOA, which is destined for system memory, + is in the platform’s coherency domain prior to delivering data from a + Load operation through the same PHB which has come after + the DMA write operation(s). + + + + + R1--7. + + The hardware must make sure that + all DMA write data buffered from an IOA, which is destined for system memory, + is in the platform’s coherency domain prior to delivering an MSI from + that same IOA which has come after the DMA write operation(s). + + + + + Architecture Notes: + + + + Requirement clarifies + (and may tighten up) the PCI architecture requirement that the read be to the + “just-written” data. + + + + The address comparison for determining whether the address of the + data being read is the same as the address of that being written is in the same + cache line is based on the PCI address and not a TCE-translated address. This + says that the System Memory cache line address will be the same also, since the + requirement is directed towards operations under the same PHB. However, use of + a DMA Read Request and DMA Write Request that use different PCI addresses (even + if they hit the same System Memory address) are not required to be kept in + order (see Requirement ). So, for + example, Requirement says that split + PHBs that share the same data buffers at the system end do not have to keep DMA + Read Request following a DMA Write Request in order when they do not traverse + the same PHB PCI bus (even if they get translated to the same system address) + or when they originate on the same PCI bus but have different PCI bus addresses + (even if they get translated to the same system address). + + + + Requirement is the only + case where the Load and Store paths + are coupled to the DMA data path. This requirement guarantees that the software + has a method for forcing DMA write data out of any buffers in the path during + the servicing of a completion interrupt from the IOA. Note that the IOA can + perform the flush prior to the completion interrupt, via Requirement . That is, the IOA can issue a read request + to the last word written and wait for the read completion data to return. When + the read is complete, the data will have arrived at the destination. In + addition, the use of MSIs, instead of LSIs, allows for a programming model for + IOAs where the interrupt signalling itself pushes the last DMA write to System + Memory, prior to the signalling of the interrupt to the system (see Requirement + ). + + + + A DMA read operation is allowed to be processed prior to the + completion of a previous DMA read operation, but is not required to be. + + + +
+ +
+ PCI DMA Operations and Coherence + The I/O is not aware of the setting of the coherence required bit + when performing operations to System Memory, and so the PHB needs to assume + that the coherency is required. + + + + R1--1. + + I/O transactions to System Memory through a PHB must be made with coherency required. + + + +
+ +
+ +
+ Byte Ordering Conventions + LoPAR platforms operate with either Big-Endian (BE) or + Little-Endian addressing. In Big-Endian systems, the address of a word in + memory is the address of the most significant byte (the “big” + end) of the word. Increasing memory addresses will approach the least + significant byte of the word. In Little-Endian (LE) addressing, the address of + a word in memory is the address of the least significant byte (the + “little” end) of the word. See also + . + The PCI bus itself can be thought of as not inherently having an + endianess associated with it (although its numbering convention indicates LE). + It is the IOAs on the PCI bus that can be thought of as having endianess + associated with them. Some PCI IOAs will contain a mode bit to allow them to + appear as either a BE or LE IOA. Some IOAs will even have multiple mode bits; + one for each data path (Load and Store versus DMA). In addition, some IOAs may + have multiple concurrent apertures, or address ranges, where the IOA can be + accessed as a LE IOA in one aperture and as a BE IOA in another. + + + + R1--1. + + When the + processor is operating in the Big-Endian mode, the platform design must produce the results + indicated in while issuing + Load and Store operations to various entities + with various endianess. + + + + + R1--2. + + When performing DMA operations through a + PHB, the platform must not modify the data during the transfer process; the + lowest addressed byte in System Memory being transferred to the lowest + addressed byte on the PCI bus, the second byte in System Memory being + transferred as the second byte on the PCI bus, and so on. + + + + + + + Big-Endian Mode <emphasis>Load</emphasis> and + <emphasis>Store</emphasis> Programming Considerations + + + + + + + + Destination + + + + + Transfer Operation + + + + + + + + BE scalar entity: + For example, + TCE or BE register in a PCI IOA + + + Load or Store + + + + + LE scalar entity: + For example, + LE register in a PCI IOA or + PCI Configuration Registers + + + Load or Store Reverse + + + + +
+
+
+ PCI Bus Protocols + This section details the items from the + , + , and + documents where there is + variability allowed, and therefore further specifications, requirements, or + explanations are needed. + Specifically, details + specific PCI Express options and the requirements for usage of such in LoPAR + platforms. These requirements will drive the design of PHB implementations. See + the for more information. + + + PCI Express Optional Feature Usage in LoPAR Platforms + + + + + + + + + + PCI Express Option Name + + + + + Usage + + + + + Description + + + + + + Base + + + IBM Server + + + + + + Usage Legend : + NS = Not Supported; O = Optional (see also Description); OR = Optional but + Recommended; R = Required; SD = See Description + + + + + + + + Peripheral I/O Space + + + SD + + + SD + + + Required if the platform is going to support any Legacy + I/O devices, as defined by the , + otherwise support not required. The expectation is that Legacy I/O device + support by PHBs will end soon, so platform designers should not rely on this + being there when choosing I/O devices. + + + + + 64-bit DMA addresses + + + O + + + OR + SD + + + Implementation is optional, but is expected to be needed + in some platforms, especially those with more complex PCI Express fabrics. + Although the “ibm,dma-window” property can + implement 64-bit addresses, some OSs and Device Drivers may not be able to + handle values in the “ibm,dma-window” + property that are greater than or equal to 4 GB. Therefore, it is recommended + that 64-bit DMA addresses be implemented through the Dynamic DMA Window option + (see ). + + + + + Advanced Error Reporting (AER) + + + O + + + R + SD + + + This has implications in the IOAs selected for use in + the platform, as well as the PHB and firmware implementation. See the . + + + + + PCIe Relaxed Ordering (RO) and + ID-Based Ordering (IDO) + + + NS + + + NS + + + Enabling either of these options could allow DMA + transactions that should be dropped by an EEH Stopped State, to get to the + system before the EEH Stopped State is set, and therefore these options are not + to be enabled. Specifically, either of these could allow DMA transactions that + follow a DMA transaction in error to bypass the PCI Express error message + signalling an error on a previous packet. +   + Platform Implementation Note: It is + permissible for the platform (for example, the PHB or the nest) to re-order DMA + transactions that it knows can be re-ordered -- such as DMA transactions that + come from different Requester IDs or come into different PHBs -- as long as the + ordering with respect to error signalling is met. + + + + + 5.0 GT/s signalling (Gen 2) + + + O + + + OR + + +   + + + + + 8 GT signalling (Gen 3) + + + O + + + OR + + +   + + + + + TLP Processing Hints + + + O + + + O + + + If implemented, it must be transparent to OSs. + + + + + Atomic Operations (32 and 64 bit) + + + O + + + OR + SD + + + May be required if the IOAs being supported require it. + May specifically be needed for certain classes of IOAs such as + accelerators. + + + + + Atomic Operations (128 bit) + + + O + + + OR + SD + + + When 128 bit Atomic Operations are supported, 32 and 64 + bit Atomic Operations must be also supported. + + + + + Resizable BAR + + + O + + + O + + +   + + + + + Dynamic Power Allocation (DPA) + + + NS + + + NS + + + No support currently defined in LoPAR. + + + + + Latency Tolerance Reporting (LTR) + + + NS + + + NS + + + No support currently defined in LoPAR. + + + + + Optimized Buffer Flush/Fill (OBFF) + + + NS + + + NS + + + No support currently defined in LoPAR. + + + + + PCIe Multicast + + + NS + + + NS + + + No support currently defined in LoPAR. + + + + + Alternative Routing ID Interpretation (ARI) + + + O + + + SD + + + Required when the platform will support PCI Express IOV IOAs. + + + + + Access Control Services (ACS) + + + SD + + + SD + + + It is required that peer to peer operation between IOAs + be blocked when LPAR is implemented and those IOAs are assigned to different + LPAR partitions. For switches below a PHB, when the IOA functions below the + switch may be assigned to different partitions, this blocking is provided by + ACS in the switch. This is required even in Base platforms, if the above + conditions apply. + + + + + Function Level Reset (FLR) + + + SD + + + SD + + + Required when a PE consists of something other than a + full IOA. For example, if each function of a multi-function IOA each is in its + own PE. An SR-IOV Virtual Function (VF) may be one such example. + + + + + End-to-End CRC (ECRC) + + + O + + + R + SD + + + This has implications in the IOAs selected for use in + the platform, as well as the PHB and firmware implementation. See the + . + + + + + Internal Error Reporting + + + OR + SD + + + OR + SD + + + Implement where appropriate. Platforms need to consider + this for platform switches, also. PHBs may report internal errors to firmware + using a different mechanism outside of this architecture. + + + + + Address Translation Services (ATS) + + + NS + + + NS + + + LoPAR does not support ATS, because the invalidation + and modification of the Address Translation and Protection Table (ATPT) -- + called the TCEs in LoPAR -- is a synchronous operations, whereas the ATS + invalidation requires a more asynchronous operation. + + + + + Page Request Interface (PRI) + + + NS + + + NS + + + Requires ATS, which is not supported by LoPAR. + + + + + Single Root I/O Virtualization (SR-IOV) + + + O + + + OR + + + It is likely that most server platforms will need to be + enabled to use SR-IOV IOAs. + + + + + Multi-Root I/O Virtualization (MR-IOV) + + + SD + + + SD + + + Depending on how this is implemented, an MR-IOV device + is likely to look like an SR-IOV device to an OS (with the platform hiding the + Multi-root aspects). PHBs may be MR enabled or the MR support may be through + switches external to the PHBs. + + + + +
+
+ +
+ Programming Model + Normal memory mapped Load and Store instructions are used to access + a PHB’s facilities or PCI IOAs on the I/O side of the PHB. + defines the addressing model. + Addresses of IOAs are passed by OF via the OF device tree. + + + + R1--1. + + If a PHB defines any registers that are + outside of the PCI Configuration space, then the address of those registers + must be in the Peripheral Memory Space or Peripheral I/O Space for that PHB, or + must be in the System Control Area. + + + + + PCI + master DMA transfers refer to data transfers between a PCI master IOA and + another PCI IOA, or System Memory, where the PCI master IOA supplies the + addresses and controls all aspects of the data transfer. Transfers from a PCI + master to the PCI I/O Space are essentially ignored by a PHB (except for + address parity checking). Transfers from a PCI master to PCI Memory Space are + either directed at PCI Memory Space (for peer to peer operations) or need to be + directed to the host side of the PHB. DMA transfers directed to the host side + of a PHB may be to System Memory or may be to another IOA via the Peripheral + Memory Space of another HB. Transfers that are directed to the Peripheral I/O + Space of another HB are considered to be an addressing error (see + ). For information about decoding these address spaces + and the address transforms necessary, see + . +
+ +
+ Peer-to-Peer Across Multiple PHBs + This architecture does not architect peer-to-peer traffic between + two PCI IOAs when the operation traverses multiple PHBs. + + + + R1--1. + + The platform must prevent Peer-to-Peer + operations that would cross multiple PHBs. + + + +
+ +
+ Dynamic Reconfiguration of I/O + Disconnecting or connecting an I/O subsystem while the system is + operational and then having the new configuration be operational, including any + new added subsystems, is a subset of Dynamic Reconfiguration (DR). + Some platforms may also support plugging/unplugging of PCI IOAs + while the system is operational. This is another subset of DR. + DR is an option and as such, is not required by this architecture. + Attempts to change the hardware configuration on a platform that does not + enable configuration change, whose OS does not support that configuration + change, or without the appropriate user configuration change actions may + produce unpredictable results (for example, the system may crash). + PHBs in platforms that support the PCI Hot Plug Dynamic + Reconfiguration (DR) option may have some unique design considerations. For + information about the DR options, see . +
+ +
+ Split Bridge Implementations + In some platforms the PHB may be split into two pieces, separated + by a cable or fiber optics. The piece that is connected to the system bus (or + switch) and which generates the interconnect is called the Hub. There are + several implications of such implementations and several requirements to go + along with these. + +
+ Coherency Considerations with IOA to IOA Communications + via System Memory + Bridges which are split across multiple chips may introduce a large + enough latency between the time DMA write data is accepted by the PHB and the + time that previously cached copies of the same System Memory locations are + invalidated, and this latency needs to be taken into consideration in designs, + as it can introduce the problems described below. This is not a problem if the + same PCI address is used under a single PHB by the same or multiple IOAs, but + can be a problem under any of the following conditions: + + + + The same PCI address is used by different IOAs under different + PHBs. + + + + Different PCI addresses are used which access the same System + Memory coherency block, regardless of whether the IOA(s) are under the same PHB + or not; for example: + + + Two different TCEs accessing the same System Memory coherency + block. + + + + + + An example scenario where this could be a problem is as + follows: + + + + Device 1 does a DMA read from System Memory address x using PCI + address y + + + + Device 2 (under same PHB as Device 1 -- the devices could even + be different function in the same IOA) does a DMA write to System Memory + address x using PCI address z. + + + + Device 2 attempts to read back System Memory address x before + the time that its previous DMA write is globally coherent (that is, before the + DMA write gets to the Hub and an invalidate operation on the cache line + containing that data gets back down to the PHB), and gets the data read by + Device 1 rather than what it just wrote. + + + + Another example scenario is as follows: + + + + Device 1 under PHB 1 does a DMA read from System Memory location + x. + + + + Device 2 under PHB 2 does a DMA write to System Memory location + x and signals an interrupt to the system. + + + + The interrupt bypasses the written data which is on its way to + the coherency domain. + + + + The device driver for Device 2 services the interrupt and + signals Device 1 via a Store to Device 1 that the data is there at location + x. + + + + Device 1 sees the Store before the invalidate operation on the + cache line containing the data propagates down to invalidate the previous + cached copy of x, and does a DMA read of location x using the same address as + in step (1), getting the old copy of x instead of the new copy. + + + + This last example is a little far-fetched since the propagation + times should not be longer than the interrupt service latency time, but it is + possible. In this example, the device driver should do a Load to Device 2 + during the servicing of the interrupt and wait for the Load results before + trying to signal Device 1, just the way that this device driver would to a Load + if it was a program which was going to use the data written instead of another + IOA. Note that this scenario can also be avoided if the IOA uses a PCI Message + Signalled Interrupt (MSI) rather than the PCI interrupt signals pins, in order + to signal the interrupt (in which case the Load operation + is avoided). + + + + R1--1. + + A DMA read to a PCI address + which is different than a PCI address used by a previous DMA write or which is + performed under a different PHB must not presume that a previous DMA write is + complete, even if the DMA write is to the same System Memory address, unless + one of the following is true: + + + + The IOA doing the DMA write has followed that write by a DMA read + to the address of the last byte of DMA write data to be flushed (the DMA read + request must encompass the address of the last byte written, but does not need + to be limited to just that byte) and has waited for the results to come back + before an IOA is signaled (via peer-to-peer operations or via software) to + perform a DMA read to the same System Memory address. + + + + The device driver for the IOA doing the DMA write has followed + that write by a Load to that IOA and has waited for the + results to come back before a DMA read to the same System Memory address with a + different PCI address is attempted. + + + + The IOA doing the DMA write has followed the write with a PCI + Message Signalled Interrupt (MSI) as a way to interrupt the device driver, and + the MSI message has been received by the interrupt controller. + + + + + +
+
+
+ +
+ I/O Bus to I/O Bus Bridges + The PCI bus architecture was designed to allow for bridging to other + slower speed I/O buses or to another PCI bus. The requirements when bridging + from one I/O bus to another I/O bus in the platform are defined below. + + + + R1--1. + + All bridges must comply with the + bus specification(s) of the buses to which they are attached. + + + + +
+ What Must Talk to What + Platforms are not required to support peer to peer operations + between IOAs. IOAs on the same shared bus segment will generally be able to do + peer to peer operations between themselves. Peer to peer operations in an LPAR + environment, when the operations are between IOAs that are not in the same + partition, is specifically prohibited (see Requirement + ). +
+
+ PCI to PCI Bridges + This architecture allows the use of PCI to PCI bridges and + PCI Express switches in the platform. TCEs are used with the IOAs attached to + the other side of the PCI to PCI bridge or PCI Express switch when those IOAs + are accessing something on the processor side of the PHB. After configuration, + PCI to PCI bridges and PCI Express switches are basically transparent to the + software as far as addressing is concerned (the exception is error handling). + For more information, see the appropriate PCI Express switch + specification. + + + + R1--1. + + Conventional PCI to PCI bridges used on + the base platform and plug-in cards must be compliant with the most recent + version of the at the time of the + platform design, including any approved Engineering Change Requests (ECRs) + against that document. PCI-X to PCI-X bridges used on the base platform and + plug-in cards must be compliant with the most recent version of the + at the time of the platform design, + including any approved Engineering Change Requests (ECRs) against that + document. + + + + + R1--2. + + PCI Express to PCI/PCI-X and PCI/PCI-X to + PCI Express bridges used on the base platform and plug-in cards must be + compliant with the most recent version of the + at the time of the platform design, + including any approved Engineering Change Requests (ECRs) against that + document. + + + + + R1--3. + + PCI Express switches used on the base + platform and plug-in cards must be compliant with the most recent version of + the at the time of the platform + design, including any approved Engineering Change Requests (ECRs) against that + document. + + + + + R1--4. + + Bridges + and switches used in platforms which will support PCI + Express IOAs beneath them must support pass-through of PCI configuration cycles + which access the PCI extended configuration space. + Software and Platform Implementation Notes: + + + + Bridges used on plug-in cards that do not follow Requirement + will presumably allow for the + operation of their IOAs on the plug-in card, even though not supporting the PCI + extended configuration address space, because the card was designed with the + bridges and IOAs in mind. + + + + Determination of support of the PCI configuration address space + is via the “ibm,pci-config-space-type” + property in the IOA's node. + + + + + + + R1--5. + + Bridges and switches used in platforms + which will support PCI Express IOAs beneath them must support 64-bit + addressing. + + + +
+
+ +
+ Bridge Extensions +
+ Enhanced I/O Error Handling (EEH) Option + The EEH option uses the following terminology. + PE A Partitionable Endpoint. This refers to the granule that is + treated as one for purposes of EEH recovery and for assignment to an OS image + (for example, in an LPAR environment). Note that the PE granularity supported + by the hardware may be finer than is supported by the firmware. See also + . A PE may be any one of the + following: + A single-function or multi-function IOA + A set of IOAs and some piece of I/O fabric above the IOAs that + consists of one or more bridges or switches. + EEH Stopped state The state of a PE being in both the MMIO Stopped + state and DMA Stopped state. + MMIO Stopped state The state of the PE which will discard any MMIO + Store s to that PE, and will return all-1's data for + Load s to that PE. If the PE is in the MMIO Stopped state + and EEH is disabled, then a Load will also return a + machine check to the processor that issued the Load, for + the Load that had the initial error and while the PE + remains in the MMIO Stopped state. + DMA Stopped state The state of the PE which will block any further + DMA requests from that PE (DMA completions that occur after the DMA Stopped + state is entered that correspond to DMA requests that occurred before the DMA + Stopped state is entered, may be completed). + Failure A detected error between the PE and the system (for + example, processor or memory); errors internal to the PE are not considered + failures unless the PE signals the error via a normal I/O fabric error + signalling protocol. (for example, SERR or ERR_FATAL). + The Enhanced I/O Error Handling (EEH) option is defined primarily + to enhance the system recoverability from failures that occur during + Load and Store operations. In addition, + certain failures that are normally non-recoverable during DMA are prevented + from causing a catastrophic failure to the system (for example, a conventional + PCI address parity error). + The basic concept behind the EEH option is to turn all failures + that cannot be reported to the IOA, into something that looks like a + conventional PCI Master Abort (MA) errorA conventional PCI MA error is where the + conventional PCI IOA does not respond as a target with a device select + indication (that is, the IOA does not respond by activating the DEVSEL signal + back to the master). For PCI Express, the corresponding error is Unsupported + Request (UR). on a Load or Store operation to the PE during + and after the failure; responding with all-1’s data and no error + indication on a Load instruction and ignoring + Store instructions. The MA error should be handled by a device + driver, so this approach should just be an extension to what should be the + error handling without this option implemented. + The following is the general idea behind the EEH option: + + + + On a failure that occurs in an operation between the PHB and + PE: + + + + Put the PE into the MMIO Stopped and DMA Stopped states (also + known as the EEH Stopped state). This is defined as a state where the PE is + prevented from doing any further operations that could corrupt the system; + which for the most part means blocking DMA from the PE and preventing load and + store completions to the PE. + + + + While the PE is in the MMIO Stopped state, if a + Load or Store is targeted to that PE, then + return all-1’s data with no error indication on a + Load and discard all Stores to that PE. That + is, essentially treat the Load or + Store the same way as if a MA error was received on that + operation. + + + + The device driver and OS recovers a PE by removing it from the + MMIO Stopped state (keeping it in the DMA Stopped state) and doing any + necessary loads to the PE to capture PE state, and then either doing the + necessary stores to the PE to set the appropriate state before removing the PE + from the DMA Stopped state and continuing operations, or doing a reset of the + PE and then re-initializing and restarting the PE.Most + device drivers will implement a reset and + restart in order to assure a clean restart of + operations. + + + + + + In order to make sure that there are no interactions necessary + between device drivers during recovery operations, each PE will have the + capability of being removed from its MMIO Stopped and DMA Stopped states + independent from any other PE which is in the MMIO Stopped or DMA Stopped + state. + + + + In order to take into account device drivers which do not + correctly implement MA recovery, make sure that the EEH option can be enabled + and disabled independently for each PE.LPAR + implementations limit the capability of + running with EEH disabled (see virtualization rsequirements in + ). + + + + EEH, as defined, only extends to operations between the processor + and a PE and between a PE and System Memory. It does not extend to direct IOA + to IOA peer to peer operations. + + + + Hardware changes for this option are detailed in the next section. + RTAS changes required are detailed in . + +
+ EEH Option Requirements + Although the EEH option architecture may be extended to other I/O + topologies in the future, for now this recovery architecture will be limited to + PCI. + In order to be able to test device driver additional code for the + EEH-enabled case, the EEH option also requires the Error Injection option be + implemented concurrently. + The additional requirements on the hardware for this option are as + follows. For the RTAS requirements for this option, see + . + + + + R1--1. + + For the EEH option: + A platform must implement the Error Injection option concurrently + with the EEH option, with an error injection granularity to the PE level. + + + + + R1--2. + + For the EEH option: + If a platform is going to implement the EEH option, then the I/O + topology implementing EEH must only consist of PCI components. + + + + + R1--3. + + For the EEH option: + The hardware must provide a way to independently enable and disable + the EEH option for each PE with normal processor Load + and Store + instructions, and must provide the capability of doing this while not + disturbing operations to other PEs in the platform. + + + + + R1--4. + + For the EEH option: The hardware + fault isolation register bits must be set the same way on errors when the EEH + option is enabled as they were when the EEH option is not implemented or when + it is implemented but disabled. + + + + + R1--5. + + For the EEH option: Any + detected failure to/from a PE must set both the MMIO Stopped and DMA Stopped + states for the PE, unless the error that caused the failure can be reported to + the IOA in a way that the IOA will report the error to its device driver in a + way that will avoid any data corruption. + + + + + R1--6. + + For the EEH + option: If an + I/O fabric consists of a hierarchy of components, then when a failure is + detected in the fabric, all PEs that are downstream of the failure must enter + the MMIO Stopped and DMA Stopped states if they may be affected by the + failure. + + + + + R1--7. + + For the EEH + option: While a PE has its EEH option enabled, if a failure occurs, + the platform must not propagate it to the system as any type of error (for + example, as an SERR for a PE which is a conventional PCI-to-PCI bridge). + + + + + R1--8. + + For the EEH option: + From the time that the MMIO Stopped state is entered for a PE, the + PE must be prevented from responding to Load and Store operations including the + operation that caused the PE to enter the MMIO Stopped state; a Load operation + must return all-1’s with no error indication and a Store operation must + be discarded (that is, Load and Store + operations being treated like they received a conventional PCI + Master Abort error), until one of the following is true: + + + + The ibm,set-eeh-option RTAS call is called + with function 2 (Release PE for MMIO + Load /Store operations). + + + + The ibm, set-slot-reset RTAS call is + called with function 0 (Deactivate the reset signal to + the PE). + + + + The power is cycled (off then on) to the PE. + + + + The partition or system is rebooted. + + + + + + + R1--9. + + For the EEH option: + From the time that the DMA Stopped state is entered for a PE, the + PE must be prevented from initiating a new DMA request or completing a DMA + request that caused the PE to enter the DMA Stopped state (DMA requests that + were started before the DMA Stopped State is entered may be completed), and + including MSI DMA operations, until one of the following is true: + + + + The ibm,set-eeh-option RTAS call is called + with function 3 (Release PE for DMA operations). + + + + The ibm, set-slot-reset RTAS call is + called with function 0 (Deactivate the reset signal to + the PE). + + + + The power is cycled (off then on) to the PE. + + + + The partition or system is rebooted. + + + + + + + R1--10. + + For the EEH option: + The hardware must provide the capability to the firmware to + determine, on a per-PE basis, that a failure has occurred which has caused the + PE to be put into the MMIO Stopped and DMA Stopped states and to read the + actual state information (MMIO Stopped state and DMA Stopped state). + + + + + R1--11. + + For the EEH option: + The hardware must provide the capability of separately enabling and + resetting the DMA Stopped and MMIO Stopped states for a PE without disturbing + other PEs on the platform. The hardware must provide this capability without + requiring a PE reset and must do so through normal processor + Store instructions. + + + + + R1--12. + + For the EEH option: The hardware + must provide the capability to the firmware to deactivate the reset to each PE, + independent of other PEs, and the hardware must provide the proper controls on + the reset transitions in order to prevent failures from being introduced into + the platform by the changing of the reset. + + + + + R1--13. + + For the EEH option: The hardware + must provide the capability to the firmware to activate the reset to each PE, + independent of other PEs, and the hardware must provide the proper controls on + the reset transitions in order to prevent failures from being introduced into + the platform by the changing of the reset. + + + + + R1--14. + + For the EEH option: + The hardware must provide the capability to the firmware to read + the state of the reset signal to each PE. + + + + + R1--15. + + For the EEH option: When a PE is + put into the MMIO Stopped and DMA Stopped states, it must be done in such a way + to not introduce failures that may corrupt other parts of the platform. + + + + + R1--16. + + For the EEH option: + The hardware must allow firmware access to internal bridge and I/O + fabric control registers when any or all of the PEs are in the MMIO Stopped + state. + Platform Implementation Note: It is expected + that bridge and fabric control registers will have their own PE state separate + from the PEs for IOAs. + + + + + R1--17. + + For the EEH + option: A PE that supports the EEH option must not share an + interrupt with another PE in the platform. + Hardware Implementation Notes: + + + + Requirement means that + the hardware must always update the standard PCI error/status registers in the + bus’ configuration space as defined by the bus architecture, even when + the EEH option is enabled. + + + + The type of error information trapped by the hardware when a PE + is placed into the MMIO Stopped and DMA Stopped states is implementation + dependent. It is expected that the system software will do an check-exception + or ibm,slot-error-detail RTAS call to gather the error information when a + failure is detected. + + + + A DMA operation (Read or Write) that was initiated before a Load, + Store, or DMA error, does not + necessarily need to be blocked, as it was not a result of the + Load, Store, or DMA that failed. The normal + PCI Express ordering rules require that an ERR_FATAL or ERR_NONFATAL from a + failed Store or DMA error, or a + Load Completion with error status, will reach the PHB prior to any + DMA that might have been kicked-off in error as a result of a failed + Load or Store or a Load + or Store that follows a failed Load + or Store. This means that as long as the PHB processes + an ERR_FATAL, ERR_NONFATAL, or Load Completion which + indicates a failure, prior to processing any more DMA operations or + Load Completions, and puts the PE into the MMIO and Stopped DMA + Stopped states, implementations should be able to block DMA operations that + were kicked-off after a failing DMA operation and allow DMA operations that + were kicked off before a failing DMA operation without violating the normal PCI + Express ordering rules. + + + + In reference to Requirements + , and + , PCI Express implementations may choose to + enter the MMIO Stopped and DMA Stopped states even if an error can be reported + back to the IOA. + + + + + + + R1--18. + + For the EEH option: If + the device driver(s) for any IOA(s) in a PE in the platform are EEH unaware + (that is may produce data integrity exposures due to a MMIO Stopped or DMA + Stopped state), then the firmware must prevent the IOA(s) in such a PE from + being enabled for operations (that is, do not allow the Bus Master, Memory + Space or I/O Space bits in the PCI configuration Command register from being + set to a 1) while EEH is enabled for that PE, and instead of preventing the PE + from being enabled, may instead turn off EEH when such an enable is attempted + without first an attempt by the device driver to enable EEH (by the + ibm,set-eeh-option ), providing such EEH disablement does not + violate any other requirement for EEH enablement (for example, virtualization + requirement in ). + Software Implementation Note: To be EEH + aware, a device driver does not need to be able to recover from an MMIO Stopped + or DMA Stopped state, only recognize the all-1's condition and not use data + from operations that may have occurred since the last all-1's checkpoint. In + addition, the device driver under such failure circumstances needs to turn off + interrupts (using the ibm,set-int-off RTAS call or by + resetting the PE and keeping it reset with ibm,set-slot-reset or + ibm,slot-error-detail) in order to make + sure that any (unserviceable) interrupts from the PE do not affect the system. + Note that this is the same device driver support needed to protect against an + IOA dying or against a no-DEVSEL type error (which may or may not be the result + of an IOA that has died). + + + +
+ +
+ Slot Level EEH Event Interrupt Option + Some platform implementations may allow asynchronous notification + of EEH events via an external interrupt. This is called the Slot Level EEH + Event Interrupt option. When implemented, the platform will implement the + “ibm,io-events-capable” property in the + nodes where the EEH control resides, and the ibm,set-eeh-option + RTAS call will implement function 4 to enable the + EEH interrupt for each of these nodes and function 5 to disable the EEH + interrupt for each of these nodes (individual control by node). Calling the + ibm,set-eeh-option RTAS call with function 4 or function + 5 when the node specified does not implement this capability will return a -3, + indicating invalid parameters. + The interrupt source specified in the + ibm,io-events child must be enabled (in addition to any individual + node enables) via the ibm,int-on RTAS call and the + priority for that interrupt, as set in the XIVE by the + ibm,set-xive RTAS call, must be something other than 0xFF, in order + for the external interrupt to be presented to the system. + The “ibm,io-events-capable” + property, when it exists, contains 0 to N interrupt specifiers (per the + definition of interrupt specifiers for the node's interrupt parent). When no + interrupt specifiers are specified by the “ibm,io-events-capable” + property, then the interrupt, if enabled, is signaled via the interrupt specifier given in the + ibm,io-events child node of the /events + node. + + + + R1--1. + + For the Slot Level EEH Event + Interrupt option: All of the following must be true: + + + + The platform must implement the “ibm,io-events-capable” + property in all device tree nodes which represent bridge where EEH is implemented and for which the EEH + io-event interrupt is to be signaled. + + + + The platform must implement functions 4 and 5 of the + ibm,set-eeh-option RTAS call for all PEs under nodes that contain + the “ibm,io-events-capable” property. + + + + + +
+
+ +
+ Error Injection (ERRINJCT) Option + The Error Injection (ERRINJCT) option is defined primarily to test + enhanced error recovery software. As implemented in the I/O bridge, this option + is used to test the software which implements the recovery which is enabled by + the EEH option in that bridge. Specifically, the ioa-bus-error and + ioa-bus-error-64 functions + of the ibm,errinjct RTAS call are used to inject errors + onto each PE primary bus, which in turn will cause certain actions on the bus + and certain actions by the PE, the EEH logic, and by the error recovery + software. + +
+ ERRINJCT Option Hardware Requirements + Although the ioa-bus-error and + ioa-bus-error-64 functions of the + ibm,errinjct RTAS call may be extended to other I/O buses and PEs in + the future, for now this architecture will be limited to PCI buses. + The type of errors, and the injection qualifiers, place the + following additional requirements on the hardware for this option. + + + + R1--1. + + For the + ioa-bus-error and + ioa-bus-error-64 functions of the Error Injection option: + If a platform is going to implement either of these functions of this option, then + the I/O topology must be PCI. + + + + + R1--2. + + For the + ioa-bus-error and + ioa-bus-error-64 functions of the Error Injection option: + The hardware must provide a way to inject the required errors for + each PE primary bus, and the errors must be injectable independently, without + affecting the operations on the other buses in the platform. + + + + + R1--3. + + For the + ioa-bus-error and + ioa-bus-error-64 functions of the Error Injection option: + The hardware must provide a way to set up for the injection of the + required errors without disturbing operations to other buses outside the + PE. + + + + + R1--4. + + For the + ioa-bus-error and + ioa-bus-error-64 functions of the Error Injection option: + The hardware must provide a way to the firmware to set up the + following information for the error injection operation by normal processor + Load andStore instructions: + + + + Address at which to inject the error + + + + Address mask to mask off any combination of the least significant + 24 (64 for the ioa-bus-error-64 function) bits of the + address + + + + PE primary bus number which is to receive the error + + + + Type of error to be injected + + + + + + + + R1--5. + + For the + ioa-bus-error and + ioa-bus-error-64 functions of the Error Injection option: + The platform must have the capability of selecting the errors + specified in when the bus directly + below the bridge injecting the error is a Conventional PCI or PCI-X Bus, and + the errors specified in when the bus + directly below the bridge injecting the error is a PCI Express link, and when + that error is appropriate for the platform configuration, and the platform must + limit the injection of errors which are inappropriate for the given platform + configuration. + Platform Implementation Note: As an example + of inappropriate errors to inject in Requirement + , consider the configuration where there is + an I/O bridge or switch below the bridge with the injector and that bridge + generates multiple PEs and when those PEs are assigned to different LPAR + partitions. In that case, injection of some real errors may cause the switches + or bridges to react and generate an error that affects multiple partitions, + which would be inappropriate. Therefore, to comply with Requirement + , the platform may either emulate some + errors in some configurations instead of injecting real errors on the link or + bus, or else the platform may not support injection at all to those PEs. + Another example where a particular error may be inappropriate is when there is + a heterogeneous network between the PHB and the PE (for example, a PCI Express + bridge that converts from a PCI Express PHB and a PCI-X PE). + + + Supported Errors for Conventional PCI, PCI-X Mode 1 + or PCI-X Mode 2 Error Injectors + + + + + + + + + + Operation + + + + + PCI Address Space(s) + + + + + Error (s) + + + + + Other Requirements + + + + + + + + Load + + + Memory, I/O, Config + + + Data Parity Error + + + All PCI-X adapters operating in Mode 2 and some + operating in Mode 1 utilize a double bit detecting, single bit correcting Error + Correction Code (ECC). In these cases, ensure that at least two bits are + modified to detect this error. + + + + + Address Parity Error + + + + + Store + + + Memory, I/O, Config + + + Data Parity Error + + + + + Address Parity Error + + + + + DMA read + + + Memory + + + Data Parity Error + + + All PCI-X adapters operating in Mode 2 and some + operating in Mode 1 utilize a double bit detecting, single bit correcting Error + Correction Code (ECC). In these cases, ensure that at least two bits are + modified to detect this error. + + + + + Address Parity Error + + + + + Master Abort + + +   + + + + + Target Abort + + +   + + + + + DMA write + + + Memory + + + Data Parity Error + + + All PCI-X adapters operating in Mode 2 and some + operating in Mode 1 utilize a double bit detecting, single bit correcting Error + Correction Code (ECC). In these cases, ensure that at least two bits are + modified to detect this error. + + + + + Address Parity Error + + + + + Master Abort + + +   + + + + + Target Abort + + +   + + + + +
+ + + Supported Errors for PCI Express Error Injectors + + + + + + + + + + Operation + + + + + PCI Address Space(s) + + + + + Error (s) + + + + + Other Requirements + + + + + + + + Load + + + Memory, I/O, Config + + + TLP ECRC Error + + + The TLP ECRC covers the address and data bits of a TLP. + Therefore, one cannot determine if the integrity error resides in the address + or data portion of a TLP. + + + + + Store + + + Memory, I/O, Config + + + TLP ECRC Error + + + + + DMA read + + + Memory + + + TLP ECRC Error + + + The TLP ECRC covers the address and data bits of a TLP. + Therefore, one cannot determine if the integrity error resides in the address + or data portion of a TLP. + + + + + Completer Abort or Unsupported Request + + + Inject the error that is injected on a TCE Page Fault. + + + + + DMA write + + + Memory + + + TLP ECRC Error + + + The TLP ECRC covers the address and data bits of a TLP. + Therefore, one cannot determine if the integrity error resides in the address + or data portion of a TLP. + + + + +
+
+
+ + + R1--6. + + For the + ioa-bus-error and + ioa-bus-error-64 functions of the Error Injection option: + The hardware must provide a way to inject the errors in + in a non-persistent manner (that is, at + most one injection for each invocation of the ibm,errinjct RTAS call). + + +
+ +
+ +
+ ERRINJCT Option OF Requirements + The Error Injection option will be disabled for all IOAs prior to + the OS getting control. + + + + R1--1. + + For the + ioa-bus-error and + ioa-bus-error-64 functions of the Error Injection option: + The OF must disable the ERRINJCT option for all PEs and all empty + slots on all bridges which implement this option prior to passing control to + the OS. + + + + + Hardware and Firmware Implementation Note: + The platform only needs the capability to setup the injection of one error at a + time, and therefore injection facilities can be shared. The + ibm,open-errinjct and ibm,close-errinjct are + used to make sure that only one user is using the injection facilities at a + time. +
+
+ +
+ Bridged-I/O EEH Support Option + If a platform requires multi-function I/O cards which are + constructed by placing multiple IOAs beneath a PCI to PCI bridge, then extra + support is needed to support such cards in an EEH-enabled environment. If this + option is implemented, then the ibm,configure-bridge RTAS + call will be implemented and therefore the + “ibm,configure-bridge” property will exist in the + rtas device node. + + + + R1--1. + + For the Bridged-I/O EEH + Support option: The platform must support the + ibm,configure-bridge RTAS call. + + + + + R1--2. + + For the Bridged-I/O EEH + Support option: The OS must provide the correct EEH coordination + between device drivers that control multiple IOAs that are in the same + PE. + + + +
+
+
diff --git a/Platform/ch_nonvolatile_memory.xml b/Platform/ch_nonvolatile_memory.xml new file mode 100644 index 0000000..fa3d2cc --- /dev/null +++ b/Platform/ch_nonvolatile_memory.xml @@ -0,0 +1,740 @@ + + + Non-Volatile Memory + + This chapter describes the requirements relating to Non-Volatile + Memory. Non-Volatile Memory is the repository for system information that must + be persistent across reboots and power cycles. + +
+ System Requirements + + + + R1--1. + + Platforms must implement at least 8 KB of + Non-Volatile Memory. The actual amount is platform dependent and must allow for + 4 KB for the OS. Platforms must provide an additional 4 KB for each installed + OS beyond the first. + + + + + R1--2. + + Non-Volatile Memory must maintain its + contents in the absence of system power. + + + + + R1--3. + + Firmware must reinitialize NVRAM to a + bootable state if NVRAM data corruption is detected. + + + + + R1--4. + + OSs must reinitialize their own NVRAM + partitions if NVRAM data corruption is detected. OSs may create free space from + the first corrupted NVRAM partition header to the end of NVRAM and utilize this + area to initialize their NVRAM partitions. + + + + + Hardware Implementation Note: The NVRAM terminology used in this + chapter goes back to historic implementations that have used battery-powered + RAM to implement the non-volatile memory. It should be understood that this is + not the only possible implementation. Implementers need to understand that + there are no limits on the frequency of writing to the non-volatile memory, so + certain technologies may not be applicable. Also, it should be noted that the + nvram-fetch and nvram-store RTAS + calls do not allow a “busy” Status return, and this may further + limit the implementation choices. + Software Implementation Note: Refer to + for information on accessing NVRAM. +
+ +
+ Structure + NVRAM is formatted as a set of NVRAM partitions that adhere to the + structure in . NVRAM partitions are + prefixed with a header containing signature, + checksum, length, and + name fields. The structure of the data field + is defined by the NVRAM partition creator/owner (designated by + signature and name). + + + + R1--1. + + NVRAM partitions must be structured as shown + in . + + + + + R1--2. + + All NVRAM space must be accounted for by + NVRAM partitions. + + + + + R1--3. + + All IBM-defined NVRAM partitions that are + intended to be IBM-unique must have names prefixed with the ASCII + representation of the four characters: ibm,. + + + + + Software Implementation Note: Although the data + areas of NVRAM partitions are not required to have error checking, it is + strongly recommended that the system software implement robust data structures + and error checking. Loss of NVRAM structures due to data corruption can be + catastrophic, potentially leading to OS reinstallation and/or complete system + initialization. +
+ +
+ Signatures + The signature field is used as the first level + of NVRAM partition identification. + lists all the currently defined signature types and their ownership classes. + The ownership class determines the permission of a particular system software + component to create and/or modify NVRAM partitions and/or NVRAM partition + contents. All NVRAM partitions may be read by any system software component, + but the ownership class has exclusive write permission. Global ownership gives + read/write permission to all system software components. These restrictions are + made to minimize the possibility of corruption of NVRAM during update + activities. + Hardware and Software Implementation Note: It is recommended that + NVRAM partitions be ordered on the signature field with the lowest value + signature NVRAM partition at the lowest NVRAM address (with the exception of + signature = 0x7F, free space). This will minimize the effect of NVRAM data + corruption on system operation. + + + NVRAM Structure + + + + + + + + + Field Name + + + + + Size + + + + + Description + + + + + + + + signature + + + 1 byte + + + The signature field is used to + identify the NVRAM partition type and provide some level of checking for + overall NVRAM contamination. Signature assignments are given in + . + + + + + checksum + + + 1 byte + + + The checksum field is included to + provide a check on the validity of the header. The checksum covers the + signature, length, and + name fields and is calculated (on a byte by byte or equivalent + basis) by: add, and add 1 back to the sum if a carry resulted as demonstrated + with the following program listing. + This checksum algorithm guarantees 0 to be an impossible + calculated value. A valid header cannot have a checksum of zero. + + + + + length + + + 2 bytes + + + The length field designates the + total length of the NVRAM partition, in 16-byte blocks, beginning with the + signature and ending with the last byte of the data area. A length of zero is + invalid. + Software Implementation Note: The + length field must always provide valid offsets to the + next header since an invalid length effectively causes the loss of access to + every NVRAM partition beyond it. + + + + + name + + + 12 bytes + + + The name field is a 12 byte string + (or a NULL-terminated string of less than 12 bytes) used to identify a + particular NVRAM partition within a signature group. In order to reduce the + likelihood of a naming conflict, each platform-specific or OS-specific NVRAM + partition name should be prefixed with a company name as specified under the + description of the “name” string in the + , that is, a company name string + in one of the three forms described in the reference, followed by a comma + (“,”). If the company name string is null, the name will be + interpreted as “other”. + Before assigning a new name to a NVRAM partition, software + should scan the existing NVRAM partitions and ensure that an unwanted name + conflict is not created. + + + + + data + + + length minus 16 bytes + + + The structure of the data area is + controlled by the creator/owner of the NVRAM partition. + + + + +
+ + + NVRAM Signatures + + + + + + + + + + + Signature (see note) + + + + + Signature Type + + + + + Ownership Class + + + + + # Required + + + + + Description + + + + + + + + 0x70 + + + System + + + Global + + + 1 + + + For configuration variables. + + + + + 0x7E + + + Vendor-defined + + + Global + + + 0 to n + + + “name” prefix required. + + + + + 0x7F + + + Free Space + + + Global + + + 0 to n + + + This signature is used to mark free space in the NVRAM + array. The name field of all signature 0x7F NVRAM + partitions must be set to 0x7...77. + + + + + 0xA0 + + + OS + + + Any OS + + + 0 to n + + + General OS usage. + + + + + Note: Any signature not defined above is reserved, and + signatures 0x02, 0x50, 0x51, 0x52, 0x71, and 0x72 are reserved for legacy + reasons. + + + + +
+
+ +
+ Architected NVRAM Partitions + +
+ System (0x70) + System NVRAM partitions are used for storing information + (typically, configuration variables) accessible to both OF and the OS. Refer to + for the definition of the contents of the + System NVRAM partition named common. + + + + R1--1. + + Every system NVRAM must contain a System + NVRAM partition with the NVRAM partition name = common. + + + + + R1--2. + + Data in the common + NVRAM partition must be stored as NULL-terminated strings of the form: + <name>=<string> and the + data area must be terminated with at least two NULL + characters. + + + + + R1--3. + + All names used in + the common NVRAM partition must be unique. + + + + + R1--4. + + Device and file specifications used in + the common NVRAM partition must follow IEEE Std 1275 + nomenclature conventions. + + + + +
+ System NVRAM Partition + The System NVRAM partition, with name = common, + contains information that is accessible to both OF and OSs. + The contents of this NVRAM partition are represented in the OF device tree as + properties (i.e., (name, value) + pairs) in the /options node. While OF is available, the + OS can alter the contents of these properties by using the + setprop client interface service. When OF is no longer available, + the OS can alter the contents of the System NVRAM partition itself, following + the rules below for the formats of the name and + value. Information is stored in the System NVRAM + partition as a sequence of (name, + value) pairs in the following format: + name = value + where name follows the rules defined in + and value follows the + rules defined in . The end of the + sequence of pairs is denoted by a NULL (0x00) byte. + +
+ Name + Since the data in the System NVRAM partition is an external + representation of properties of the /option node, the + name component must follow the rules for property names + as defined by Section 3.2.2.1.1 Property names of + ; i.e., a string of 1-31 printable + characters containing no uppercase characters or the characters + “/”, “\”, “:”, “[“, + “]” or “@”. In addition to these rules, a naming + convention is required for OS specific names to avoid name conflicts. Each such + name must begin with the OS vendor’s OUI followed by a + “,”; e.g., aapl,xxx or + ibm,xxx. This introduces separate name spaces for each vendor in which + it manages its own naming conventions. +
+ +
+ Value + The value component of System NVRAM partition data can contain an + arbitrary number of bytes in the range 0x01 to 0xFF, terminated by a NULL + (0x00) byte. Bytes in the range 0x01 to 0xFE represent themselves. In order to + allow arbitrary byte data to be represented, an encoding is used to represent + strings of 0x00 or 0xFF bytes. This encoding uses the 0xFF byte as an escape, + indicating that the following byte is encoded as: + bnnnnnnn + where b, the most-significant bit, is 0 to represent a sequence of + 0x00 bytes or 1 to represent a sequence of 0xFF bytes. nnnnnnn, the + least-significant 7 bits, is a binary number (in the range 0x01 to 0x7F) that + represents the number of repetitions of 0x00 or 0xFF. +
+ +
+ OF Configuration Variables + OF configuration variables control the operation of OF. In addition + to the standard configuration variables defined in + , other configuration variables are defined + in . While such variables are stored in the System + NVRAM partition as described above, they have additional rules placed on the + format of the value component. Each configuration variable is also represented + by a user interface word (of the same name) that returns stack value(s) when + that word is evaluated. Each also has a platform defined default value; the + absence of a configuration variable in the System NVRAM partition indicates + that the value is set to its default value. The format of the external + representation of configuration variables, and their stack representation, is + defined by Section 7.4.4.1 Configuration Variables of + ; the format depends upon the data type of + the configuration variable. Whereas the internal storage format is not defined + by , this architecture specifies them + as described below. The names of configuration variables are defined in , except as noted otherwise. + +
+ Boolean Configuration Variables + The value of a boolean configuration variable is represented in the + System NVRAM partition as the string “true” or + “false”. The following configuration variables are of type + boolean: + + + auto-boot? + + + diag-switch? + + + fcode-debug? + + + oem-banner? + + + oem-logo? + + + use-nvramrc? + + + little-endian? + + + real-mode? + + + menu? (see ). + + +
+ +
+ Integer Configuration Variables + The value of an integer configuration variable is represented in + the System NVRAM partition as a decimal number or a hexadecimal number preceded + by “0x”. The following configuration variables are of type + integer: + + + screen-#columns + + + screen-#rows + + + security-#badlogins + + + security-mode + + + selftest-#megs + + + real-base + + + real-size + + + virt-base + + + virt-size + + + load-base + + +
+ +
+ String Configuration Variables + The value of a string configuration variable is represented in the + System NVRAM partition as the characters of the string. Where multiple + “lines” of text are represented, each line is terminated by a + carriage-return (0x0D), a line-feed (0x0A), or carriage-return, line-feed + sequence (0x0D, 0x0A). The following configuration variables are of type + string: + + + boot-command [1] + + + boot-device [1] + + + boot-file [1] + + + diag-device [1] + + + diag-file [1] + + + input-device [1] + + + nvramrc [1] + + + oem-banner [1] + + + output-device [1] + + + security-password [1] + + + bootinfo-nnnnn [*] + + + reboot-command [*] + + +
+ +
+ Byte Configuration Variables + The value of a bytes configuration variable is represented by an + arbitrary number of bytes, using the encoding escape for values of 0x00 and + 0xFF. The following configuration variables are of type bytes: + + + oem-logo [1] + + +
+
+
+ +
+ DASD Spin-up Control + In order to reduce the boot time of platforms, a configuration + variable is defined to communicate from the platform to the OS to what extent + spin-up of hard disk drives can be overlapped. Disk drives generally draw more + current as the motors spin up to operating speed, thus the capacity of the + power supply limits the ability to spin up drives simultaneously. + The configuration variable + ibm,dasd-spin-interval indicates the minimum time, in seconds, that + must be allowed between initiating the spin-up of hard disk drives on the + platform. Presence of this variable potentially allows starting up a drive + prior to receiving completion status from a drive previously started. The + absence of this variable implies no platform knowledge regarding the capability + to overlap and, hence, the OS should wait for the appropriate device status + before proceeding to subsequent drives (no overlap). + + + + R1--1. + + If a platform wants to overlap spinning + up it's hard disk drives to improve boot performance, it must create the + ibm,dasd-spin-interval OF configuration variable in the + NVRAM signature 0x70 NVRAM partition named common and set + it equal to an integer that represents the minimum time, in seconds, that must + be allowed between initiating the spin-up of drives on the platform. + + + + + Firmware Implementation Note: The platform + should provide a user-friendly interface to this variable to allow for the + possibility of a user installing hard disks that do not conform to the original + setting of the variable. +
+
+ +
+ Free Space (0x7F) + + + + R1--1. + + All unused NVRAM space must be included + in a signature = 0x7F Free Space NVRAM partition. + + + + + R1--2. + + All Free Space NVRAM partitions must have + the name field set to 0x7...77. + + + +
+
+ +
+ NVRAM Space Management + The only NVRAM partitions whose size an OS can modify are OS and Free + Space signature NVRAM partitions. As NVRAM partitions are created and modified + by an OS, it is likely that free space will become fragmented; free space + consolidation may become necessary. + + + + R1--1. + + An OS must not move or delete any NVRAM + partition, except OS and Free Space signature NVRAM partitions. + + + + + R1--2. + + The NVRAM partition header checksum must be + calculated as shown in . + + + +
+
diff --git a/Platform/ch_numa.xml b/Platform/ch_numa.xml new file mode 100644 index 0000000..cac8904 --- /dev/null +++ b/Platform/ch_numa.xml @@ -0,0 +1,524 @@ + + + Non Uniform Memory Access (NUMA) Option + +
+ Summary of Extensions to Support NUMA + NUMA platforms to a first level approximation are simply a large + scale Symmetric Multi-Processor. However to tune system performance and to aid + in platform maintenance, the OS needs additional information and mechanisms. + These include: + + + + Associativity -- to determine the platform resource + groupings. + + + + Relative Performance Distances -- to determine the performance + between resources within different groupings. + + + + Performance Monitor -- to provide usage data on the NUMA + fabric. + + + + Dynamic Reconfiguration -- due to such causes as platform upgrade, + reallocation of resources, or a repair of a failure. + + + + There are two NUMA support options: the “NUMA” option + and its proper subset the “Associativity Information” + option. +
+ +
+ NUMA Resource Associativity + Associativity Codes represent the groupings of the various platform + resources into domains of substantially similar mean performance relative to + resources outside of that domain. Resources subsets of a given domain that + exhibit better performance relative to each other than relative to other + resources subsets, are represented as being members of a sub-grouping domain. + Such sub-domain grouping is represented to any level deemed significant by the + platform design. presents a simple + system configuration with one possible decomposition into associativity + domains. From the decomposition provided the + “ibm,associativity” value string for each resource is + enumerated. + +
+ Example NUMA configuration with + domains and corresponding <emphasis role="bold"><literal>“ibm,associativity”</literal></emphasis> + values + + + + + + + + +
+ + The OF Device Tree node for each allocable resource + (processor, memory region, and IO slot) conveys information about the resources + statically assigned to the client program; and contains the + “ibm,associativity” + property (see ). This property allows the client + program to determine the associativity between any two of it’s + resources. The greater the associativity the greater the expected performance + when using those two resources in a given operation. + The legal form of the “ibm,associativity” + property is dependent upon the setting of the + “ibm,architecture-vec-5” + property byte 5 bit 0. The bit value of zero allows the + “ibm,associativity” property string to be sequenced in + priority order; this form is being deprecated for new implementations in favor + of the form indicated by the + “ibm,architecture-vec-5” + property byte 5 bit 0 having the value of one in which the + “ibm,associativity” property string represents the + strict physical hierarchy of the platform. + When the LPAR option is also implemented, the partition virtual + resources may be mapped onto physical resources with in a very dynamic manor. + Given that the resource mapping to the associativity domain is substantially + consistent, the client program can make use of the associativity information to + on the average optimize performance. If the resource mapping to the + associativity domain is substantially inconsistent, then associativity + information for the resources is not provided to prevent erroneous operation. + If the long term mapping changes the client program can be made aware of the + new associativity information using the ibm,update-properties RTAS call (See + ). + + + + R1--1. + + For the NUMA or Associativity + Information option: The platform must include the + “ibm,associativity” in the OF device tree + memory node and the nodes of each processor, memory + region, and PCI bridge onto which IOAs may be plugged if the component is + dedicated to the partition. (The device tree node for a component that the + platform intends to virtualize should include an + “ibm,associativity” property if the associativity + domain information is substantially accurate.) + + + + + R1--2. + + For the NUMA option and SPLPAR + option: In the case that both the NUMA and SPLPAR options are + implemented, Requirement is modified + to remove processors from the list of system elements that must include the + respective properties or interfaces described by that requirement. (The + platform is encouraged to provide processor associativity information if it is + substantially accurate.) + + + + + The “ibm,associativity” + property contains one or more lists of numbers representing the + resource’s platform grouping domains. Each list, starts with a number + representing the domain number of the highest level grouping within which the + platform is capable of supporting direct access. This highest level may be a + NUMA collective or possibly a cluster of machines with direct DMA access. + Successive numbers represent sub-divisions of the previous higher level within + which the expected mean value of the performance relative to outside resources + is substantially similar. Implementations determine the number of levels that + they report, subject to Requirements + and . The lowest level always being + that of the allocable resource itself. The user of this information is + cautioned not to imply any specific physical/logical significance of the + various intermediate levels. + + + + R1--3. + + For the NUMA or Associativity + Information option: Differing levels of resource grouping represented in the + “ibm,associativity” property + must reflect statistically repeatable differences in the expected mean of + measured performance. + + + + + R1--4. + + For the NUMA or Associativity + Information option: The expected mean performance of any resource + of a given type within the same grouping domain represented in the + “ibm,associativity” property relative to + resources outside of that grouping domain must be substantially similar. + + + + The reason that the “ibm,associativity” + property may contain + multiple associativity lists is that a resource may be multiply connected into + the platform. This resource then has a different associativity characteristics + relative to its multiple connections. To determine the associativity between + any two resources, the OS scans down the two resources associativity lists in + all pair wise combinations counting how many domains are the same until the + first domain where the two list do not agree. The highest such count is the + associativity between the two resources. +
+ +
+ Relative Performance Distance + An OS applies its NUMA tuning techniques based upon associativity and + relative performance distance attributes. As a guide to relative performance + distance, RISC Platforms provide the “ibm,associativity-reference-points” + property. The information in this property represents a first order approximation to points + having associativity and relative performance distance characteristics deemed + to be of significant interest to optimizing client program performance. + The contents of the “ibm,associativity-reference-points” + property is dependent upon the setting of the + “ibm,architecture-vec-5” + property byte 5 bit 0. The bit value of zero allows the + “ibm,associativity-reference-points” property string + to indicate logical structure points; this form is being deprecated for new + implementations in favor of the form indicated by the + “ibm,architecture-vec-5” + property byte 5 bit 0 having the value of one in which the + “ibm,associativity-reference-points” property string + represents boundaries between associativity domains presented by the + “ibm,associativity” property containing + “near” and “far” resources. + + + + R1--1. + + For the NUMA or Associativity + Information option: The RTAS OF device tree node must contain the + “ibm,associativity-reference-points”. + + + + +
+ Form 0 + When the “ibm,architecture-vec-5” + property byte 5 bit 0 has the value of zero, the + “ibm,associativity-reference-points” property defines + reference points in the “ibm,associativity” + property (see ) which roughly correspond to + traditional notions of platform topology constructs. It is important for the + user to realize that these reference points are not exact and their + characteristics vary among implementations. + The first integer in the “ibm,associativity-reference-points” + property relates the 1 based ordinal in the associativity lists of the platform’s + “ibm,associativity” property associated + with the traditional notion of a symmetric multi-processor within a NUMA + platform. That is the level that represents building blocks of processors and + memory that have the following characteristics: + + + + An OS is likely to view all members having roughly uniform access + characteristics. + + + + Represents the highest level before an OS is likely to notice + major Non-Uniformity of access. + + + + The second integer in the “ibm,associativity-reference-points” + property relates the 1 based ordinal in the associativity lists of the platform’s + “ibm,associativity” property associated + with the traditional notion of a processor group which is sometimes packaged in + a multi-chip module. A processor group has similar characteristics to an SMP, + however, several processor groups get packaged densely within the same physical + enclosure forming an SMP. While the intra processor group accesses are + measurably greater than inter processor group accesses they are a second order + effect. + Subsequent ibm,associativity-reference-points entries are reserved. +
+ +
+ Form 1 + When the “ibm,architecture-vec-5” + property byte 5 bit 0 has the value of one, the + “ibm,associativity-reference-points” property + indicates boundaries between associativity domains presented by the + “ibm,associativity” property containing + “near” and “far” resources. The first such boundary + in the list represents the 1 based ordinal in the associativity lists of the + most significant boundary, with subsequent entries indicating progressively + less significant boundaries. + Note: Platforms are encouraged to report + boundaries of actual significance. Thus if a platform has only a single + significant boundary to report, the preferred form of the + “ibm,associativ¬ity-reference-points” would + contain a single entry. However, providing two or more entries that reference + the same associativity domains provides equivalent information and is a legal + representation. +
+
+ +
+ Dynamic Reconfiguration with Cross CEC I/O Drawers + Should the configuration change in such a way that the associativity + between an OS image’s resources changes, the platform notifies the OS + via an event scan log. See . + + + + R1--1. + + For the NUMA or Associativity + Information option: If the platform configuration changes in such a + way that the associativity between an OS image’s resources might have + changed, the platform must notify the OS via an event scan or check exception + log. + + + +
+ +
+ Maximum Associativity Domains + Since the number of associativity domains that a platform may exhibit + is not apparent from the associativity properties presented at boot time, the + platform provides the “ibm,max-associativity-domains” + property in the /rtas node of the device tree (see + ). + + + + R1--1. + + For the NUMA or Associativity + Information option: The platform must provide the + “ibm,max-associativity-domains” property in + the /rtas node of the device tree. + + + +
+ +
+ Platform Resource Reassignment Notification Option (PRRN) + LoPAR platforms that implement the LPAR option are allowed to + transparently reassign the platform resources that are used by a partition. For + instance, if a processor or memory unit is predicted to fail, the platform may + transparently move the processing to an equivalent unused processor or the + memory state to an equivalent unused memory unit. However, reassigning + resources across NUMA boundaries may alter the performance of the partition. + When such reassignment is necessary, the PRRN option provides mechanisms that + inform the supporting OS of changes to the affinity among its platform + resources. It is expected that handling such notifications will involve + significant OS processing, therefore, changing affinity should be avoided, and + when it is necessary to change the affinity of several of the resources owned + by a partition, a single notification after all such changes have occurred is + preferred. + The OS and platform firmware negotiate their mutual support of the + PRRN option via the ibm,client-architecture-support + interface (See ). Should a partition be + migrated from a platform that did not support the PRRN option, the target + platform does not notify the partition’s OS of any PRRN events and, when + possible avoids changing the affinity among the partition’s resources. + Partitions that are about to be migrated complete/abort any in-process affinity + change processing prior to the migration, and if the target platform does not + support the PRRN option the partition will simply see no more PRRN + events. + A PRRN event is signaled via the RTAS event-scan + mechanism, which returns a Hot Plug Event message “fixed + part” (See ) indicating “Platform + Resource Reassignment”. In response to the Hot Plug Event message, the + OS may call ibm,update-nodes to determine which resources + were reassigned, and then ibm,update-properties to obtain + the new affinity information about those resources. + The PRRN event-scan RTAS message contains only + the “fixed part” with the “Type” field set to the + value 160 and no Extended Event Log. The four (4) byte Extended Event Log + Length field is repurposed, since no Extended Event Log message is included, to + pass the “scope” parameter that causes the + ibm,update-nodes to return the nodes affected by the specific + resource reassignment. + Requirements: + + + + R1--1. + + For the PRRN Option: + The platform must support the negotiation of the Associativity Information + Option Control Platform Resource Reassignment Notification (Affinity Change) + flag via the ibm,client-architecture-support + interface. + + + + + R1--2. + + For the PRRN Option: + If the client code did not claim support for the PRRN option via the + ibm,client-architecture-support interface the platform must not + present PRRN events per section . + + + + + R1--3. + + For the combination of the PRRN + and Partition Suspension Options: To avoid firmware function + conflicts the client code must complete or abort any PRRN processing prior to + exercising the Partition Suspension option. + + + + + R1--4. + + For the PRRN Option: + The platform must inform the client code of platform resource reassignments via + the event-scan RTAS mechanism with a “fixed + part” only event return message as presented in + + + + + R1--5. + + For the PRRN Option: + The platform must support the Platform Resource Reassignment scope (negative of + the value contained in bits 32:64 of the RTAS Event Return Format (Fixed Part) + for PRRN events) input parameter to input the + ibm,update-nodes RTAS call. + + + + + + RTAS Event Return Format (Fixed Part) for PRRN events + + + + + + + + + Bit Field Name (bitnumber(s)) + + + + + Description, Values (Described in ) + + + + + + + + Version (0:7) + + + A distinct value used to identify the architectural version of message + + + + + Severity (8:10) + + + EVENT (1) + + + + + RTAS Disposition (11:12) + + + FULLY_RECOVERED(0) + + + + + Optional_Part_Presence (13) + + + NOT_PRESENT (0): The optional Extended Error Log is not present. + + + + + Reserved (14:15) + + + 0b00 + + + + + Initiator (16:19) + + + HOT PLUG (6) + + + + + Target (20:23) + + + UNKNOWN (0): Not Applicable + + + + + Type (24:31) + + + Platform Resource Reassignment (160) – includes Change Scope in bits 32:63 + + + + + Extended Event Log Length / Change Scope (32:63) + + + The scope parameter to be input the ibm,update-nodes RTAS call + to retrieve the nodes that were changed by selected “Hot Plug” + events. + + + + +
+
+
diff --git a/Platform/ch_platform_intro.xml b/Platform/ch_platform_intro.xml new file mode 100644 index 0000000..2512dc4 --- /dev/null +++ b/Platform/ch_platform_intro.xml @@ -0,0 +1,148 @@ + + + Introduction + + This architecture specification provides a comprehensive computer + system platform-to-software interface definition, combined with minimum system + requirements, that enables the development of and software porting to a range + of compatible industry-standard computer systems from workstations through + servers. These systems are based on the requirements defined in + The + term “Processor Architecture” (PA) is used throughout this + document to mean compliance with the requirements specified in + .. The definition supports + the development of both uniprocessor and multiprocessor system + implementations. + A key attribute and benefit of this architecture is the ability of + platform developers to have degrees of freedom of implementation below the + level of architected interfaces and therefore have the opportunity for adding + unique value. This flexibility is achieved through architecture facilities + including: (1) device drivers; (2) Open Firmware (OF); (3) + Run-Time Abstraction Services (RTAS); + and (4) hardware abstraction layers. The role of items 1 + and 4 are described in separate operating system (OS) documentation. The role + that items 2 and 3 play in this architecture will be described in subsequent + paragraphs and chapters. + This architecture combines leading-edge technologies to create a + superior computing platform. By design, it supports a wide range of computing + needs including personal productivity, engineering design, data management, + information analysis, education, desktop publishing, multimedia, entertainment, + and database, file, and application servers. This architecture effectively + leverages industry-standard I/O through the PCI bus. Systems based on this + architecture are expected to offer price/performance advantages and to address + the expected growth in computing performance and functionality. + Architecture Note: In modern platforms, designers may choose + between various PCI topology standards. This architecture uses the term + “PCI” as a general term to describe the most recent versions of + all forms of PCI standards including any approved Engineering Change Requests + (ECRs) against them. In cases where there are significant differences between + individual PCI standards, the following terminology is used to differentiate + between the PCI standards. + + + + The term “conventional PCI” refers to behavior or + features that conform to the most recent version of the + , including any approved ECRs against it. + + + + + The term “PCI-X” refers to behavior or features that + conform to the most recent version of the + , including any approved ECRs against it. + + + + The term “PCI Express” refers to behavior or features + that conform to the most recent version of the + including any approved ECRs against it. In + addition, the terms “bus,” “bridge” and “PCI + Host Bridge (PHB)” used in relation to “PCI” throughout + this architecture may refer to a PCI Express “link,” + “switch,” and “root complex” respectively. + + + +
+ Platform Topology + To the experienced computer designer and system manufacturer, much of + the content of this architecture will be familiar. A typical desktop topology + is shown in . This topology consists + of a single PA processor, volatile System Memory, and a single Host Bridge + providing a PCI Bus. The PCI Bus provides for connection of I/O adapters + (IOAs). See for the definition of an + IOA. + A more complex general topology is shown in + . All platforms consist of one or more PA + processors, a volatile System Memory separate from other subsystems, and a + number of IOAs, which may initiate transactions to System Memory. The + processors are linked over the primary processor bus/switch to each other, to + the System Memory, and to one or more Host Bridges. In general, IOAs do not + connect to the primary processor bus/switch. The Host Bridges connect to + secondary buses which have IOAs connected to them. In turn, one or more bus + bridges may be employed to tertiary buses (and beyond) with additional IOAs + connected to them. Typically, the bus speeds and throughput decrease and the + number of supportable loads increases as one progresses from the primary + processor bus to more remote buses. + There are variations on these topologies, which are likely to occur + and are therefore worth describing below. This architecture describes + interfaces, not implementation. The logical software model must remain the + same, even if the physical topology is different. + + + + In a smaller platform, the Host Bridge and/or the memory and/or an + IOA may be integrated into a single chip. In this case, the topology would not + look like from a chip point of view, + but instead would be integrated onto the single chip. + + + + In a larger platform, secondary buses may be implemented, with two + or more Host Bridges, as two or more parallel expansion buses for performance + reasons. Similarly, tertiary buses may be two or more parallel expansion buses + off each secondary bus. This is indicated by the ellipses near the Host Bridge + and the Bus Bridge. + + + + In a high performance platform, with multiple processors and + multiple memoriea switch may be employed to allow multiple parallel accesses + by the processors to memory. The path through the switches would be decided by + the addressing of ths, a switch may be employed to allow multiple parallel accesses + by the processors to memory. The path through the switches would be decided by + the addressing of the memory. + + + Each of the following chapters provides information necessary to + successfully implement compliant systems. It is recommended that the reader + become thoroughly familiar with the contents of these chapters and their + references prior to beginning system or software development. It is anticipated + that standard chip sets will simplify the development of compliant + implementations consistent with the topologies shown below and will be + available from third-party industry sources. +
+ Typical Desktop Topology + + + + +
+
+ General Platform Topology + + + + +
+ Note: To enable the implementation of a large number of I/O adapters in a large + system, the Host Bridge may be split into two pieces -- a Hub and a Bridge -- + with the two connected by a cable, thus enabling the I/O adapters to be housed + at a distance from the main processor enclosure. +
+
diff --git a/Platform/ch_processors_memory.xml b/Platform/ch_processors_memory.xml new file mode 100644 index 0000000..ff7d24b --- /dev/null +++ b/Platform/ch_processors_memory.xml @@ -0,0 +1,813 @@ + + + Processor and Memory + + The purpose of this chapter is to specify the processor and memory + requirements of this architecture. The processor architecture section addresses + differences between the processors in the PA family as well as their interface + variations and features of note. The memory architecture section addresses + coherency, minimum system memory requirements, memory controller requirements, + and cache requirements. + +
+ Processor Architecture + The Processor Architecture (PA) governs software compatibility at an + instruction set and environment level. However, each processor implementation + has unique characteristics which are described in its user’s manual. To + facilitate shrink-wrapped software, this architecture places some limitations + on the variability in processor implementations. Nonetheless, evolution of the + PA and implementations creates a need for both software and hardware developers + to stay current with its progress. The following material highlights areas + deserving special attention and provides pointers to the latest + information. + +
+ Processor Architecture Compliance + The PA is defined in . + + + + R1--1. + + Platforms must incorporate only processors which comply fully + with . + + + + + R1--2. + + For the Symmetric Multiprocessor option: + Multiprocessing platforms must use only processors which + implement the processor identification register. + + + + + R1--3. + + Platforms must incorporate only processors which implement + tlbie and tlbsync, and + slbie and slbia for + 64-bit implementations. + + + + + R1--4. + + Except where specifically noted otherwise + in , platforms must support all + functions specified by the PA. + + + + Hardware and Software Implementation Note: The PA and this + architecture view tlbia + as an optional performance enhancement. Processors need not + implement tlbia. Software that needs to purge the TLB should provide a sequence + of instructions that is functionally equivalent to tlbia and use the content of + the OF device tree to choose the software implementation or the hardware + instruction. See for details. +
+ +
+ PA Processor Differences + A complete understanding of processor differences may be obtained + by studying and the user’s + manuals for the various processors. + The creators of this architecture cooperate with processor + designers to maintain a list of supported differences, to be used by the OS + instead of the processor + version number (PVN), + enabling execution on future processors. OF communicates these differences via properties of the + cpu node of the OF device tree. Examples of OF device + tree properties which support these differences include “64-bit” + and “performance-monitor”. See + for a complete listing and more details. + + + + R1--1. + + The OS must use the properties of the cpu + node of the OF device tree to determine the programming model of the processor + implementation. + + + + + R1--2. + + The OS must provide an execution path + which uses the properties of the cpu node of the OF + device. The PVN + is available to the platform aware OS for exceptional cases such as performance + optimization and errata handling. + + + + + R1--3. + + The OS must + support the 64-bit page table formats defined by + . + + + + + R1--4. + + Processors which exhibit the + “64-bit” property of the + cpu node of the OF device tree must also implement the + “bridge architecture,” an option in . + + + + + + R1--5. + + Platforms must restrict their choice of processors to those whose + programming models may be described by the properties defined for the + cpu node of the OF device tree in + . + + + + + R1--6. + + Platform firmware must initialize the + second and third pages above Base correctly for the + processor in the platform prior to giving control to the OS. + + + + + R1--7. + + OS and application software must not + alter the state of the second and third pages above Base. + + + + + R1--8. + + Platforms must implement the + “ibm,platform-hardware-notification” property (see + ) and include all PVRs that the platform may + contain. + + + + +
+ 64-bit Implementations + + Some 64-bit processor implementations will not support the full + virtual address allowed by . As a + result, this architecture adds a 64-bit virtual address subset to the PA and + the corresponding cpu node property + “64-bit-virtual-address” to OF. + In order for an OS to make use of the increased addressability of + 64-bit processor implementations: + + + + The memory subsystem must support the addressing of memory + located at or beyond 4 GB, and + + + + Any system memory located at or beyond 4 GB must be reported via + the OF device tree. + + + + At an abstract level, the effort to support 64-bit architecture in + platforms is modest. The requirements follow. + + + + R1--1. + + The OS must support the 64-bit virtual + address subset, but may defer support of the full 80-bit virtual address until + such time as it is required. + + + + + R1--2. + + Firmware must report the + “64-bit-virtual-address” + property for processors which implement the 64-bit virtual address subset. + + + + + R1--3. + + RTAS must be capable of being + instantiated in either a 32-bit or 64-bit mode on a platform with addressable + memory above 4 GB. + + + + + Software Implementation Note: A 64-bit OS need not require 64-bit + client interface services in order to boot. Because of the problems that might + be introduced by dynamically switching between 32-bit and 64-bit modes in OF, + the configuration variable 64-bit-mode? is provided so + that OF can statically configure itself to the needs of the OS. +
+
+ +
+ Processor Interface Variations + Individual processor interface implementations are described in + their respective user’s manuals. +
+ +
+ PA Features Deserving Comment + Some PA features are optional, and need not be implemented in a + platform. Usage of others may be discouraged due to their potential for poor + performance. The following sections elaborate on the disposition of these + features in regard to compliance with the PA. + +
+ Multiple Scalar Operations + The PA supports multiple scalar operations. The multiple scalar + operations are Load and Store String and Load and Store Multiple. + Due to the long-term performance disadvantage associated with multiple scalar + operations, their use by software is not recommended. +
+ +
+ External Control Instructions (Optional) + The external control instructions + (eciwx and ecowx) are not supported + by this architecture. +
+
+ +
+ <emphasis role="bold"><literal>cpu</literal></emphasis> Node <emphasis role="bold"><literal>“Status”</literal></emphasis> Property + See for the values of the + “status” property of the cpu + node. +
+ +
+ Multi-Threading Processor Option + Power processors may optionally support multi-threading. + + + + R1--1. + + For the Multi-threading + Processor option: The platform must supply one entry in the + ibm,ppc-interrupt-server#s property associated with the + processor for each thread that the processor supports. + + + + Refer to for the definition of + the ibm,ppc-interrupt-server#s property. +
+
+ +
+ Memory Architecture + The Memory Architecture of an LoPAR implementation is defined by + and + , which defines what platform elements + are accessed by each real (physical) system address, as well as the sections + which follow. + The PA allows implementations to incorporate such performance + enhancing features as write-back caching, non-coherent instruction caches, + pipelining, and out-of-order and speculative execution. These features + introduce the concepts of coherency (the apparent order + of storage operations to a single memory location as observed by other + processors and DMA) and consistency (the order of storage + accesses among multiple locations). In most cases, these features are + transparent to software. However, in certain circumstances, OS software + explicitly manages the order and buffering of storage operations. By + selectively eliminating ordering options, either via storage access mode bits + or the introduction of storage barrier instructions, software can force + increasingly restrictive ordering semantics upon its storage operations. Refer + to for further details. + PA processor designs usually allow, under certain conditions, for + caching, buffering, combining, and reordering in the platform’s memory + and I/O subsystems. The platform’s memory subsystem, system + interconnect, and processors, which cooperate through a platform implementation + specific protocol to meet the PA specified memory coherence, consistency, and + caching rules, are said to be within the platform’s coherency + domain. + shows an example system. + The shaded portion is the PA coherency domain. Buses 1 through 3 lie outside + this domain. The figure shows two + I/O subsystems, each interfacing with the host system via a Host Bridge. Notice that + the domain includes portions of the Host Bridges. This symbolizes the role of + the bridge to apply PA semantics to reference streams as they enter or leave + the coherency domain, while implementing the ordering rules of the I/O bus + architecture. + Memory, other than System Memory, is not required to be coherent. + Such memory may include memory in IOAs. + +
+ Example System Diagram Showing the PA Coherency Domain + + + + + + + + +
+ + Hardware Implementation Note: Components of the platform within the + coherency domain (memory controllers and in-line caches, for example) + collectively implement the PA memory model, including the ordering of + operations. Special care should be given to configurations for which multiple + paths exist between a component that accesses memory and the memory itself, if + accesses for which ordering is required are permitted to use different paths. + +
+ System Memory + System Memory normally consists of dynamic read/write random access + memory which is used for the temporary storage of programs and data being + operated on by the processor(s). A platform usually provides for the expansion + of System Memory via plug-in memory modules and/or memory boards. + + + + R1--1. + + Platforms must provide at least 128 MB of + System Memory. (Also see for + other requirements which apply to memory within the first 32MB of System + Memory.) + + + + + R1--2. + + Platforms must support the expansion of + System Memory to 2 GB or more. + + + + + Hardware Implementation Note: These requirements are minimum + requirements. Each OS has its own recommended configuration which may be + greater. + + Software Implementation Note: System Memory will be described by + the properties of the memory node(s) of the OF + device tree. +
+ +
+ Memory Mapped I/O (MMIO) and DMA Operations + Storage operations which cross the coherency domain boundary are + referred to as Memory Mapped I/O (MMIO) operations if they are initiated within + the coherency domain, and DMA operations + if they are initiated outside the coherency domain + and target storage within it. Accesses with targets outside the coherency + domain are assumed to be made to IOAs. These accesses are considered performed + (or complete) when they complete at the IOA’s I/O bus interface. + Bus bridges translate between bus operations on the initiator and + target buses. In some cases, there may not be a one-to-one correspondence + between initiator and target bus transactions. In these cases, the bridge + selects one or a sequence of transactions which most closely matches the + meaning of the transaction on the source bus. See also + for more details and the appropriate PCI + specifications. + For MMIO Load and Store + instructions, the software needs to set up the WIMG bits + appropriately to control Load and Store caching, + Store combining, and + speculative Load execution to I/O addresses. This + architecture does not require platform support of caching of MMIO + Load and Store instructions. + See the PA for more information. + + + + R1--1. + + For MMIO Load and Store instructions, + the hardware outside of the processor must not + introduce any reordering of the MMIO instructions for a processor or processor + thread which would not be allowed by the PA for the instruction stream executed + by the processor or processor thread. + Hardware Implementation Note: Requirement + may imply that hardware outside of + the processor cannot reorder MMIO instructions from the same processor or + processor thread, but this depends on the processor implementation. For + example, some processor implementations will not allow multiple + Loads to be issued when those Loads are to + Cache Inhibited and Guarded space (as are MMIO Loads ) or + allow multiple Stores to be issued when those + Stores are to Cache Inhibited and Guarded space (as are MMIO + Stores). In this example, hardware external to the + processors could re-order Load instructions with respect + to other Load instructions or re-order + Store instructions with respect to other Store + instructions since they would not be from the same processor or thread. + However, hardware outside of the processor must still take care not to re-order + Loads with respect to Stores or + vice versa, unless the hardware has access to the entire instruction stream to + see explicit ordering instructions, like eieio. Hardware outside of the + processor includes, but is not limited to, buses, interconnects, bridges, and + switches, and includes hardware inside and outside of the coherency + domain. + + + + + R1--2. + + (Requirement Number Reserved + For Compatibility) + + + + + Apart from the ordering disciplines stated in Requirements + and, for PCI the ordering of MMIO + Load data return versus buffered DMA data, as defined by + Requirement , no other ordering + discipline is guaranteed by the system hardware for Load + and Store instructions performed by a processor to + locations outside the PA coherency domain. Any other ordering discipline, if + necessary, must be enforced by software via programming means. + The elements of a system outside its coherency domain are not + expected to issue explicit PA ordering operations. System hardware must + therefore take appropriate action to impose ordering disciplines on storage + accesses entering the coherency domain. In general, a strong-ordering rule is + enforced on an IOA’s accesses to the same location, and write operations + from the same source are completed in a sequentially consistent manner. The + exception to this rule is for the special protocol ordering modifiers that may + exist in certain I/O bus protocols. An example of such a protocol ordering + modifier is the PCI Relaxed Ordering bitThe PCI + Relaxed Ordering bit is an optional + implementation, from both the IOA and platform perspective. , + as indicated in the requirements, below. + + + + R1--3. + + Platforms must guarantee that accesses + entering the PA coherency domain that are from the same IOA and to the same + location are completed in a sequentially consistent manner, except transactions + from PCI-X and PCI Express masters may be reordered when the Relaxed Ordering + bit in the transaction is set, as specified in the + and + . + + + + + R1--4. + + Platforms must guarantee that multiple write operations entering + the PA coherency domain that are issued by the same IOA are completed in a + sequentially consistent manner, except transactions from PCI-X and PCI Express + masters may be reordered when the Relaxed Ordering bit in the transaction is + set, as specified in the + and + . + + + + + R1--5. + + Platforms must be designed to present I/O DMA writes to the coherency domain in the order required by + , except transactions from PCI-X and PCI + Express masters may be reordered when the Relaxed Ordering bit in the + transaction is set, as specified in the + and + . + + + +
+ +
+ Storage Ordering and I/O Interrupts + The conclusion of I/O operations is often communicated to + processors via interrupts. For example, at the end of a DMA operation that + deposits data in the System Memory, the IOA performing the operation might send + an interrupt to the processor. Arrival of the interrupt, however, may be no + guarantee that all the data has actually been deposited; some might be on its + way. The receiving program must not attempt to read the data from the memory + before ensuring that all the data has indeed been deposited. There may be + system and I/O subsystem specific method for guaranteeing this. See . +
+ +
+ Atomic Update Model + An update of a memory location by a processor, involving a + Load followed by a Store, can be + considered “atomic” if there are no intervening + Stores to that location from another processor or mechanism. The PA + provides primitives in the form of Load + And Reserve and Store + Conditional instructions which can be used to determine if the update was + indeed atomic. These primitives can be used to emulate operations such as + “atomic read-modify-write” and “atomic + fetch-and-add.” Operation of the atomic update primitives is based on + the concept of “Reservation,”See + Book I and II of . + which is supported in an LoPAR system via the coherence mechanism. + + + + R1--1. + + Load And Reserve and + Store Conditional instructions + must not be assumed to be supported for Write-Through storage. + Software Implementation Note: To emulate an + atomic read-modify-write operation, the instruction pair must access the same + storage location, and the location must have the Memory Coherence Required + attribute. + Hardware Implementation Note: The reservation + protocol is defined in Book II of the + for atomic updates to locations in the same coherency domain. + + + + + R1--2. + + The Load And + Reserve and Store Conditional instructions + must not be assumed to be supported for Caching-Inhibited storage. + + + +
+ +
+ Memory Controllers + A Memory Controller responds to the real (physical) addresses + produced by a processor or a host bridge for accesses to System Memory. It is + responsible for handling the translation from these addresses to the physical + memory modules within its configured domain of control. + + + + R1--1. + + Memory controller(s) must support the + accessing of System Memory as defined in . + + + + + R1--2. + + Memory controller(s) must be fully initialized and + set to full power mode prior to the transfer of control to the OS. + + + + + R1--3. + + All allocations of System Memory space + among memory controllers must have been done prior to the transfer of control + to the OS. + + + + Software Implementation Note: Memory controller(s) are described by + properties of the memory-controller node(s) of the OF device + tree. +
+ +
+ Cache Memory + + All of the PA processors include some amount of on-chip or + internal cache memory. + This architecture allows for cache memory which is external to the processor + chip, and this external + cache memory forms an extension to internal cache memory. + + + + R1--1. + + If a platform implementation elects not + to cache portions of the address map in all external levels of the cache + hierarchy, the result of not doing so must be transparent to the operation of + the software, other than as a difference in performance. + + + + + R1--2. + + All caches must be fully + initialized and enabled, and they must have + accurate state bits prior to the transfer of control to the OS. + + + + + R1--3. + + If an in-line external + cache is used, it must support one reservation as + defined for the Load And Reserve and + Store Conditional instructions. + + + + + R1--4. + + For the Symmetric + Multiprocessor option: Platforms must implement their cache + hierarchy such that all caches at a given level in the cache hierarchy can be + flushed and disabled before any caches at the next level which may cache the + same data are flushed and disabled (that is, L1 first, then L2, and so + on). + + + + + R1--5. + + For the Symmetric + Multiprocessor option: If a cache implements snarfing, + then the cache must be capable of disabling the snarfing during flushing in order to implement + the RTAS stop-self function in an atomic way. + + + + + R1--6. + + Software must not depend on being able to + change a cache from copy-back to write-through. + + + + + Software Implementation Notes: + + + + Each first level cache will be defined via properties of the + cpu node(s) of the OF device tree. Each higher level cache will be + defined via properties of the l2-cache node(s) + of the OF device tree. See for more details. + + + + To ensure proper operation, cache(s) at the same level in the + cache hierarchy should be flushed and disabled before cache(s) at the next + level (that is, L1 first, then L2, and so on). + + + +
+ +
+ Memory Status information + New OF properties are defined to support the identification and + contain the status information on good and bad system memory. + + + + R1--1. + + Firmware must implement all of the + properties for memory modules, as specified by , + and any other properties defined by this document which apply to memory modules. + + + +
+ +
+ Reserved Memory + Sections of System Memory may be reserved for usage by OS + extensions, with the restrictions detailed below. Memory nodes marked with the + special value of the “status” property of + “reserved” is not to be used or altered by the base OS. Several + different ranges of memory may be marked as “reserved”. If DLPAR + of memory is to be supported and growth is expected, then, an address range + must be unused between these areas in order to allow growth of these areas. + Each area has its own DRC Type (starting at 0, MEM, MEM-1, MEM-2, and so on). + Each area has a current and a maximum size, with the current size being the sum + of the sizes of the populated DRCs for the area and the max being the sum total + of the sizes of all the DRCs for that area. The logical address space allocated + is the size of the sum of the all the areas' maximum sizes. Starting with + logical real address 0, the address areas are allocated in the following order: + OS, DLPAR growth space for OS (if DLPAR is supported), reserved area (if any) + followed by the DLPAR growth space for that reserved area (if DLPAR is + supported), followed by the next reserved space (if any), and so on. The + current memory allocation for each area is allocated contiguously from the + beginning of the area. On a boot or reboot, including hypervisor reboot, if + there is any data to be preserved (that is, the + “ibm,preserved-storage” + property exists in the RTAS + node), then the starting logical real address of each LMB is maintained through + the reboot. The memory in each region can be independently increased or + decreased using DLPAR memory functions, when DLPAR is supported. Changes to the + current memory allocation for an area results in the addition or removal of + memory to the end of the existing memory allocation. + Implementation Note: if the shared memory + regions are not accessed by the programs, and are just used for DMA most of the + time, then the same HPFT hit rate could be achieved with a far lower ration of + HPFT entries to logical storage space. + + + + R1--1. + + For the Reserved Memory option: + Memory nodes marked with the special value of the “status” + property of “reserved” must not be used or altered by the base OS + Implementation Note: How areas get chosen to + be marked as reserved is beyond the scope of this architecture. + + + + + R1--2. + + For the Reserved Memory option + with the LRDR option: Each unique memory area that is to be changed + independently via DLPAR must have different DRC Types (for example, MEM, MEM-1, + and so on). + + + +
+ +
+ Persistent Memory + Selected regions of storage (LMBs) may be optionally preserved + across client program boot cycles. See and + "Managing Storage Preservations" in specification. +
+
+ +
diff --git a/Platform/ch_product_topology.xml b/Platform/ch_product_topology.xml new file mode 100644 index 0000000..3c734c6 --- /dev/null +++ b/Platform/ch_product_topology.xml @@ -0,0 +1,4638 @@ + + + Product Topology + +
+ VPD and Location Code OF Properties + A set of OF properties is defined to facilitate asset protection and + RAS capabilities in LoPAR systems. The following properties are defined in +): + + + + “ibm,vpd” + + + + “ibm,loc-code” + + + + + + R1--1. + + Each instance of a hardware entity (FRU) has a platform unique + location code and any node in the OF device tree that describes a part of a + hardware entity must include the + “ibm,loc-code” property with a value that represents + the location code for that hardware entity. + + + + + R1--2. + + OF nodes that do not represent an instance + of a hardware entity (FRU) do not have a location code and thus these nodes, + except for the OF root node, do not include the “ibm,loc-code” property. + Architecture Note: In general, an OF node that has a unit address + corresponds to an instance of a hardware entity and a node that does not have a + unit address does not correspond to an instance of a hardware entity. The nodes + for caches are one exception to this statement. Note that the OF + openprom node is a system node and thus should have neither the + “ibm,loc-code” property nor the + “ibm,vpd” property. + + + + + R1--3. + + If a hardware entity contains unique VPD information and the + entity corresponds to a node in the OF device tree, then that device tree node + must include the “ibm,vpd” property. + + + + + R1--4. + + An instance of a hardware entity (FRU) must + have one and only one “ibm,vpd” property + element that defines the VPD keywords specified in Requirement + . + Platform Implementation Note: In general, an + instance of a hardware entity has a single “ibm,vpd” + property element that is in one of the nodes that also contains an + “ibm,loc-code” property element for that + entity. + + + + + R1--5. + + An OF device tree node that includes the + “ibm,vpd” property must also include an + “ibm,loc-code” property, where each + property has the same number of elements and the matching elements of both + properties define the same instance of a hardware entity (FRU), where matching + elements are defined as the nth string of the “ibm,loc-code” + property and the nth set of tags in + the “ibm,vpd” property for all values of + n. + + + + + R1--6. + + VPD data that is not associated with an instance of a hardware + entity (FRU) that is described by a single OF device tree node must be reported + in an appropriate OF node using the “ibm,loc-code” and + “ibm,vpd” properties. + + + + Architecture Notes: + + + + The root node is the appropriate OF node (for Requirement ) for any instance of a hardware entity that + cannot be dynamically reconfigured. Any one and only one of the OF nodes that + describe the dynamically reconfigurable entity can contain the properties for + the dynamically reconfigurable entity case. + + + + A dynamically reconfigurable entity may consist of more than one + FRU. In this case, the first element of both the “ibm,vpd” + property and the “ibm,loc-code” property for the dynamically + reconfigurable entity must define the VPD and location code for the OF device + tree node that includes those properties. + + + + A FRU can be considered dynamically reconfigurable if the hardware + is enabled for dynamic reconfiguration and full platform support might be + implemented at a later date. + + + + Platform Implementation Note: If a location + does not return VPD, the property would contain a null entry for the VPD. +
+ +
+ System Identification + provides properties in the + “OF Root Node” section called “system-id” + and“model”. + + + + R1--1. + + (Requirement Number Reserved For Compatibility) + + + + + R1--2. + + Each system enclosure (generally, a drawer), + must have the VPD SE and TM keywords (see ). + + + + + R1--3. + + The SE and TM keywords for a + master enclosure must be contained in the “ibm,vpd” + property for the master enclosure which may + also contain other keywords. A master enclosure must also have the YK keyword + if another enclosure shares the same combined SE and TM keyword values. The YK + keyword (see ) for a secondary + enclosure must be contained in the “ibm,vpd” + property for the secondary enclosure, which may also contain other + keywords. Each master enclosure with a YK keyword must have a unique YK value + that is the same as the value of the YK keyword for each of the secondary + enclosures that share the same combined SE and TM keyword values. An enclosure + is not a FRU and thus its VPD must not contain the FN, PN, SN, EC, RM or RL + keywords. + + + + + R1--4. + + The enclosure must also be + represented in the corresponding element of the “ibm,loc-code” + property with the location code of the + enclosure for a multi-enclosure platform. + Implementation Note: The location code will be + for the full enclosure. The drawer position is the u-units counting from the + bottom of the rack. Specific numbering is platform dependent. + + + + + R1--5. + + If the system contains multiple processor enclosures, firmware + must use the VPD SE field from the first or ‘marked’ processor + enclosure (see ) to + construct “system-id”. + Implementation Note: What is meant by ‘marked’ above is + that, in a system, the ‘first’ processor enclosure could become + ambiguous. In such a case, a specific processor enclosure could be marked by + the firmware or HMC as being the processor enclosure to use for identification + purposes. + + + + + R1--6. + + One or more of the MI, RM, and RL keywords + must be present for any firmware specific VPD. (with a value of + “UNKNOWN” for unknown values), and must be present based on all + of the following: + + + + The RL keyword must be provided if the platform does not support + the ibm,update-flash-64-and-reboot RTAS call. + + + + The RM keyword must be provided if the platform supports only a + single flash image updated via the ibm,update-flash-64-and-reboot + service and does not support the ibm,manage-flash-image and + ibm,validate-flash-image RTAS calls. + + + + The MI keyword must be provided if the platform supports dual + flash images via the ibm,update-flash-64-and-reboot, the + ibm,manage-flash-image, and the ibm,validate-flash-image + RTAS calls. + + + + The ML keyword must be provided if the platform supports dual + flash images via the ibm,update-flash64-and-reboot, + the ibm,manage-flash-image, and the ibm,validate-flash-image + RTAS calls. + + + + + + + R1--7. + + System firmware and service processor + firmware must have VPD that is separate from the VPD of the FRU that contains + the system firmware and service processor firmware and this VPD must have a + location code that is made by adding “/Yn” to the end of the + location code for the FRU that contains the firmware where n is a platform + dependent instance of the firmware. + + + + + R1--8. + + The description (large resource type of + 0x82) for the system firmware VPD in the “ibm,vpd” + property must be “System Firmware or + Platform Firmware”. + + + + + R1--9. + + System firmware VPD must be found in the + root node if the system supports only static VPD, + otherwise system firmware VPD must be provided via the + ibm,get-vpd RTAS call. + + + + + R1--10. + + The description (large resource type of + 0x82) for the service processor firmware VPD in the “ibm,vpd” + property must be “Service Processor + Firmware”, if the service processor firmware is a separate FRU from the + system firmware. + + + + + R1--11. + + Service processor firmware VPD must be + found in the root node if the service processor firmware is a separate FRU from + the system firmware. + + + + + R1--12. + + The VPD SE field (see ) + must be electronically stored in a manner that is not modifiable in a user + environment. + + + + + R1--13. + + There must be a property, “model”, + under the root node in the format, + “<vendor>,xxxx-yyy”, where <vendor> is replaced by + one to five letters representing the stock symbol of the company (for example, + for IBM: “IBM,xxxx-yyy”), and where xxxx-yyy is derived from the + VPD TM field (see ) of the first or + ‘marked’ processor enclosure. + + + + + R1--14. + + The values of the type/model (TM) and system serial number (SE) + (see ) must remain the same even with + service or reconfiguration of the system. + Implementation Note: A change in either TM or + SE would indicate a system replacement as opposed to a reconfiguration. + + + + + This definition of the“system-id” + property provides extensibility and ensures that uniqueness can be + maintained. The 2 byte Field Type will serve to identify the format of the + System Identifier Field which follows. + Hardware Implementation Note: It is recommended that the VPD SE field + be held in an area of the machine that is least susceptible to hardware + failure. This is to minimize the effect on software licensing when a FRU must + be changed. Another useful technique is to socket the part containing the SE + field, allowing service personnel to move the old SE to the new FRU. +
+ +
+ Hardware Location Codes + Hardware location codes are used to provide a mapping of logical + functions in a platform (or expansion sites for logical functions, such as + connectors or ports) to their specific locations within the physical structure + of the platform. The description in the following section is intended to define + a standard architecture for these location codes, which would be used in three + places: + + + + These location codes would be included as a property, + “ibm,loc-code”, under device nodes in + the OF device tree, to provide identification of where those device functions + are physically located in the platform. + + + + To make service and parts replacement easier, hardware location + codes of failing components would be appended to the standard 40-byte Extended + Error Log templates returned by the RTAS event-scan and + check-exception services. + + + + Software Note: Since the OF device tree currently only defines the + core platform devices and IOAs, OS applications such as diagnostics may need to + extend these location codes with logical addresses to point to devices such as + SCSI (Small Computer System Interface) drives or asynchronous tty + (teletypewriter) terminals. + Location Codes are globally unique within a system and are persistent + between system reboots and power cycles. + + + + R1--1. + + All platforms must implement the + Converged Location Codes option. + + + + + R1--2. + + Location codes must be globally unique + within a system, including across multiple CECs of a clustered system, and must + be persistent across multiple system reboots and power cycles. + + + + + Converged location codesThe + term “converged” is historic, based on merging (converging) + several previous versions of location codes. are strings + composed of one or more location labels separated by dashes + (“-”). Location labels are strings that begin with a location + prefix followed by a distinguishing value. For example, the location code for a + PCI (Peripheral Component Interconnect) card in a CEC (Central Electronic + Complex) might be something like this: + + + + U7879.001.1012345-P2-C3 + + + + Valid location codes consist of uppercase characters ('A' - 'Z'), + digits (0 - 9), periods ('.'), and dashes ('-'). Characters other than these + valid characters will be replaced by pound signs ('#') to protect display and + formatting routines and give a consistent indication of a problem in the data. + Periods may be used to improve readability of the location code. + The existence of the + “ibm,converged-loc-codes” property in the + root node of the device tree indicates that the platform implements + the Converged Location Codes option. + + + + + R1--3. + + For the Converged Location Codes + option: The platform must implement the “ibm,converged-loc-codes” + property in the root node of the device tree. + + + + + R1--4. + + For the Converged Location Codes + option: The location code contained in each instance of the + property “ibm,loc-code” must match the + format as described in the sections under and + . + + + + + R1--5. + + For the Converged Location Codes + option: Extended error logs reported to the OS by event-scan + orcheck-exception must have the + characters “IBM<NULL>” in bytes 12-15, and include the + location codes for the failing elements in the format as described in the + sections under and + . + + + + +
+ Converged Location Code Labels + This section describes the types of location code labels. See also + for the rules for building a location + code. + +
+ Prefix Summary Table + The prefix of a converged location code is as defined in this + section. + + + + R1--1. + + For the Converged Location + Codes option: The location code prefixes specified in + must be used in constructing location + codes. + + + + + + Converged Location Code Prefix Values + + + + + + + + Prefix + + + + + Meaning + + + + + + + + A + + + Air handler (for example: blower, fan, motor scroll + assembly, motor drive assembly). . + + + + + C + + + Card Connector (for example, connector for: IOA, + Processor Card, Riser Card, Daughter Card, DIMM, Regulator Card, MCM, L3 Cache, + Jumper Card, Passthru Interposer (for Processor Fabric when an MCM is not + installed), Pluggable Module Chips). + . + + + + + D + + + Device (for example: Diskette, DASD, Operator Panel, SES + (Storage Enclosure Services) Device). + . + + + + + E + + + Electrical (for example: Battery, Power Supply, + Charger). . + + + + + F + + + Frame. See + . + + + + + L + + + Logical Path (for example: SCSI Target, IDE Address, + ATAPI Address, Fibre Channel LUN, etc.). + . + + + + + M + + + Mechanical (Plumbing, Valves, Latches). See + . + + + + + N + + + Horizontal placement for an empty rack location. See + . + + + + + P + + + Planar (for example: Backplane, Board). + . + + + + + R + + + Resource (identifies a resource that is not a FRU, but + needs identification in the error log). See + . + + + + + S + + + SR-IOV adapter virtual function. See + . + + + + + T + + + Port (for example: Port, Connector, Cable Connector, + Jack, Interposer). + . + + + + + U + + + Unit (for example: System, CEC, Card Cage, Drawer, + Chassis (Unpopulated drawer)). + . + + + + + V + + + Virtual Planar. See . + + + + + W + + + Worldwide unique ID (for example: Fibre Channel). + . + + + + + X + + + EIA value for empty rack location. See + . + + + + + Y + + + Firmware FRU. See . + + + + +
+
+ +
+ Unit Location Label + The unit location label consists of the prefix “U” + followed by uppercase alphabetic characters, digits, and periods + (“.”). There is one and only one unit location label in a + location code and it is the first element in the location code. +
+ +
+ Planar Location Label + The planar location label consists of the prefix “P” + followed by a non-zero decimal number with no leading zeroes. Planar location + labels are present in location codes for planars and all locations on a planar. + There is at most one planar location label in a location code. When present, + the planar location label immediately follows the unit location label in the + location code. + Planars are uniquely labeled within a unit. +
+ +
+ Air Handler Location Label + An air handler location label consists of the prefix + “A” followed by a non-zero decimal number with no leading zeroes. + A location code may have zero or more air handler location labels. When + present, the air handler location label follows the location label of the + resource onto which the air handler is mounted, usually a unit or planar. + Examples of air handlers include blowers and fans. +
+ +
+ Card Connector Location Label + The card connector location label consists of the prefix + “C” followed by a non-zero decimal number with no leading zeroes. + A location code may contain zero or more card connector location labels. When + present, the card connector location label follows the location label of the + resource onto which the card is mounted, usually a planar or another + card. + Examples of cards include: Plug-in I/O cards, processor cards, + daughter cards, DIMMs, regulator cards, MCMs, L3 cache modules, jumper cards, + pass-through interposers, and pluggable module chips. +
+ +
+ Device Location Label + A device location label consists of the prefix “D” + followed by a non-zero decimal number with no leading zeroes. A location code + may have zero or more device location labels. When present, the device location + label follows the location label of the resource onto which the device is + mounted, usually a planar. + Device location labels are used for devices for which a physical + location can be determined. These are usually mounted in enclosures that have + rigid placement rules and, often, additional hardware support for location + determination, such as SES (Storage Enclosure Services) devices. +
+ +
+ Electrical Location Label + An electrical location label consists of the prefix + “E” followed by a non-zero decimal number with no leading zeroes. + A location code may have zero or more electrical location labels. When present, + the electrical location label follows the location label of the resource onto + which the electrical resource is mounted, usually a unit or planar. + Examples of electrical resources include: batteries, power + supplies, and chargers. +
+ +
+ Port Location Label + A port location label consists of the prefix “T” + followed by a non-zero decimal number with no leading zeroes. A location code + may have zero or more port location labels. When present, the port location + label follows the location label of the resource onto which the port is + mounted, usually a card or planar. + Examples of resources with a port location label include: ports, + connectors, cable connectors, jacks, and interposers. +
+ +
+ Worldwide Unique Identifier + A worldwide unique identifier location label consists of the prefix + “W” followed by a maximum of 16 uppercase hexadecimal digits with + no leading zeroes. A location code may have zero or one worldwide unique + identifier location labels. When present, the worldwide unique identifier + location label follows the location label of the resource that interfaces with + the resource having the worldwide unique identifier, usually a port. +
+ +
+ Logical Path Label + A logical path location label consists of the prefix + “L” followed by a decimal or hexadecimal number with no leading + zeros. Refer to through + to determine when decimal and hexadecimal + values are allowed. A location code may have zero or more logical path location + labels. When present, the logical path location label follows the location + label of the resource that interfaces with the resource being located, usually + a port or worldwide unique identifier. + The numeric value portion of the logical path label is a portion of + the address, appropriate to the protocol in use, which identifies the resource + to be located. +
+ +
+ Virtual Planar Location Label + A virtual planar label consists of the prefix “V” + followed by a non-zero decimal number with no leading zeroes. A location code + may have zero or one virtual planar location labels. When present, the virtual + planar location label will immediately follow the unit location label in a + location code. There is no physical label in the system or any I/O drawer + corresponding to the virtual planar location label. + Virtual planars are uniquely labeled within a system. +
+ +
+ Firmware Location Label + A firmware location label consists of the prefix “Y” + followed by a non-zero decimal number with no leading zeroes. A location code + may have zero or one firmware location labels. A firmware location code will + always contain a unit location label as its first element and a firmware + location label its last element. +
+ +
+ Horizontal Placement Location Label + The horizontal placement location label of an empty space in a rack + consists of the prefix “N” followed by a non-zero decimal number + with no leading zeroes. A location code may have zero or one horizontal + placement location labels. When present, the horizontal placement location + label immediately follows the EIA location label. +
+ +
+ EIA Location Label + The EIA location label of an empty space in a rack consists of the + prefix “X” followed by a non-zero decimal number with no leading + zeroes. A location code may have zero or one EIA location labels. When present, + the EIA location label immediately follows the frame location label. +
+ +
+ Frame Location Label + The frame location label of an empty space in a rack consists of + the prefix “F” followed by a non-zero decimal number with no + leading zeroes. A location code may have zero or more frame location labels. + When present, the frame location label immediately follows the unit location + label. +
+ +
+ Virtual Function Location Label + A virtual function label consists of the prefix “S” + followed by a zero-starting decimal number with no leading zeros. A location + code may have zero or more virtual function labels. When present, the virtual + function label is appended to the location code of the port that the virtual + function uses. +
+ +
+ Mechanical Location Label + The Mechanical location label consists of the prefix + “M” followed by a nonzero decimal number with no leading zeroes. + A location code my have zero or more Mechanical location labels. When present, + the Mechanical location label follows the location label of the resource onto + which the mechanical device is mounted. + Examples of resources with a mechanical location label include: + plumbing, valves, and latches. +
+ +
+ Resource Location Label + The Resource location label consists of the prefix + “R” followed by a nonzero decimal number with no leading zeroes. + A location code my have zero or more Resource location labels. When present, + the Resource location label follows the location label of the parent FRU. + + Resource location labels are resources, that are not FRUs, but that + need a location code label to be properly identified in the error log. An + example of a Resource is a module on the System backplane that is not a + separate FRU, but which needs to be separately identified in the system error + log for a fail in place type of service strategy. +
+
+ +
+ Converged Location Code Rules + This section describes the rules for building a location code. See + also the types of location code + labels. + +
+ Usage of Location Codes + Any reference to a FRU must reference the official location + code. + Unofficial internal forms or values of location codes which system + components may use for internal convenience are not to be presented to + customers, service personnel, etc. They are to be kept internal to those + components. +
+ +
+ Persistence of Location Codes + Physical path location codes are permanent. Physical path location + codes will not change unless there has been a change of hardware. + Logical path location codes are dependent on configuration + information and are therefore not permanent. Whenever reasonable and possible, + logical path location codes will persist across power cycles of the + system. +
+ +
+ Forming Location Codes + Location codes are formed by concatenating one or more location + labels together. Location labels start at the largest or most general resource + (the unit) and proceed to the most specific in order of containment. The + location labels are separated by dashes (“-”). +
+ +
+ Length Restrictions + Location codes are no more than 79 characters in length. The + lengths of individual location labels vary. +
+ +
+ Location Labels Content + The unit location label may contain uppercase letters, digits, and + periods. All other location labels contain only upper case letters and digits. + This will avoid problems when printing or displaying the location codes on + double byte devices. +
+ +
+ Physical Representation + In so far as it is possible, location labels must match the labels + that are present on the hardware. + Generally, there are labels visible on the hardware to identify + connectors, slots, etc. These physical labels must adhere to this specification + and must be reflected in the corresponding location codes. This will eliminate + the need for the user to translate between the location code presented in logs, + displays, reports, and instructions and the location label found on the + hardware. +
+ +
+ Multiple Function FRUs + Some FRUs (Field Replaceable Units) contain more than one logical + resource or function. The physical location code refers to the physical FRU. So + all the logical resources or functions on a FRU have the same physical location + code. Connectors on a FRU have different location codes except for the case of + multiple connectors for one port. +
+ +
+ Multiple Connectors for One Port + Some IOAs have multiple connectors (for example, a D-connector and + an RJ-45 connector) for one port. Since there is only one port involved, both + connectors have the same location code. +
+ +
+ Location Label Numbering Scope + For sequentially numbered location labels (planar, card, device, + air handler, electrical), each FRU has its own numbering space for its child + location labels. That numbering space begins with 1 and increments by 1 for + each child location label. Number is in decimal. For example, if there were two + planars in a unit, each planar having five card connectors, then each planar + would show child location labels of C1, C2, C3, C4, and C5. + This means that for each parent, the child location labels begin + with a count of one. As a further example, if there were two adapters in + adjacent PCI slots each with two port connectors, the ports on the first + adapter would have location labels T1 and T2, and the ports on the second + adapter would have location labels of T1 and T2. + Note: Model-specific modifications to this + numbering rule may be made, when similar models of a product line are housed in + the same enclosure/rack, and the equivalent slots and connectors from each + model are lined up with each other as seen by the customer. Then the location + code numbering of these equivalent slots and connectors may be the same for + each model, even though numbers may be skipped or appear to be out of order on + specific models. +
+ +
+ FRU Orientation + Locations are numbered left to right, top to bottom, back to front + with respect to the parent FRU, as viewed from the service position. However, a + location label does not change based on the orientation of a piece of hardware + within its parent hardware, for FRUs that may have more than one way of being + oriented. + If a CEC or I/O drawer is used both in standalone and rack mounted + configurations, the rack mounted configuration takes precedence in determining + location numbering. +
+ +
+ Unit Location Codes + The unit location code is the unit location label, Un, for the + unit. The unit location label is permanent. The unit location labels may not be + etched on the containing racks, since it may not be possible to determine them + during manufacture. + A system will have a unit location code composed of the machine + type, model, and serial number of the system with the components separated by + periods ('.'). For example, a system with machine type 9117, model 250, and + serial number 10-ABCDE would have a location code of: + + + + U9117.250.10ABCDE + + + + Some I/O Drawers and CECs may be assigned machine type, model, and + serial numbers (MTMS) by manufacturing. Other I/O Drawers and CECs may be + assigned feature code, count, and serial numbers by manufacturing. The same + requirements for uniqueness apply to both identification schemes. The data is + formatted in exactly the same way. And, for the purposes of location codes, the + data will be used in exactly the same way. + Drawers and CECs which have a machine type, model, and serial + number which the system can obtain will have a unit location code composed of + the machine type, model, and serial number with the components separated by + periods (“.”). For example, a drawer with machine type 5703, + model 012, and serial number 10-30490 would have a location code of: + + + + U5703.012.1030490 + + + + Drawers and CECs which have a feature code, count, and serial + number which the system can obtain will have a unit location code composed of + the feature code, count, and serial number with the components separated by + periods (‘.’), for readability. For example, a drawer with + feature code 0573, count 001, and serial number 10-40320 would have a location + code of: + + + + U0573.001.1040320 + + + + Additionally, the count portion of the location code unit label may + be modified by firmware at boot time to reflect information about the physical + location. It may be modified according to whatever scheme appropriate for the + unit's configuration -- provided all other location code rules are followed and + that the scheme generates the same value every time when no actual or relative + physical location change has been made. For example, TUn (“TU” to + indicate the Top CEC Unit, n=1,2,3, or 4 to indicate which drawer numbered top + to bottom) may be substituted for the actual count value, so an imaginary CEC + following this scheme might have a unit label of: + + U1234.TU1.5678901 + + Enclosure feature code/count must never collide with one another or + with any machine type/model. Likewise, enclosure machine type/model must never + collide with one another or any enclosure feature code/count. + Drawers for which the system cannot obtain a machine type, model, + and serial or a feature code, count, and serial number, will have a location + code of the form Uttaa. In this form, the tt is an alphabetic string + identifying the kind of drawer, for example, SSA. The aa is a string provided + by the rules of the OS to identify the instance of the drawer within the + particular system. For example: USSABKUP. The lengths of both tt and aa will + vary depending on the kind of drawer. The OS must provide mechanisms by which + the customer can ensure the uniqueness of these values. +
+ +
+ Planar Location Codes + Planar location codes are formed by appending the planar location + label, Pn, to the location code of the unit that contains the planar. The Pn + value is assigned during the engineering design and manufacturing process, is + unique within the unit, is physically displayed on the parent resource, and is + present in the VPD of the parent resource. This process is the same + irrespective of the kind of planar involved. + Note: In some implementations, a planar is + not a separate FRU but is considered to be part of the enclosure. For + consistency of the user interface, the enclosure in these cases is still + considered to have a location code consisting entirely of a unit location + label. In these cases, the planar has a location code consisting of both the + unit location label and the planar location label. This is done even though the + planar is not a separate FRU. In these cases, service related VPD and errors + will be reported with the planar location code. +
+ +
+ Card Connector Location Codes + Card connector location codes are formed by appending the card + connector location label, Cn, to the location code of the resource to which the + card is docked. The location label, Cn, assigned in the engineering and + manufacturing process, is unique within the parent resource, is physically + displayed on the parent resource, and is present in the VPD of the parent + resource. + The process is the same irrespective of the kind of card + involved. +
+ +
+ Riser Card Connector Location Codes + Riser card connector location codes are formed by appending the + card location label, Cn, of the child card to the location code of the parent + card to which it is attached. For example: + U5702.115.1031010-P3-C4-C2 +
+ +
+ Blade Daughter Card Connector Location Codes + The Blade daughter card slot can actually contain multiple + partitionable endpoints depending on the type of daughter card attached. The + PCI-E bus can be split (bifurcated) between two PHB's that are separately + DLPAR-able (just not hot-pluggable) resources. When that occurs, a -L# suffix + is required after the -C# of the daughter card slot to distinctly identify + between the two PE's. For example, when the daughter card contains two 4x PCIE + devices, the location code for the two PE's might be: + + + U78A0.001.DNWGDG0-P1-C10-L1 + + + U78A0.001.DNWGDG0-P1-C10-L2 + + + The actual daughter card device ports, in this example, will have + the -T# suffix (starting from 1) on top of those. For example, a 4-port PCI-E + Ethernet daughter card, might have location codes like: + + + U78A0.001.DNWGDG0-P1-C10-L1-T1 + + + U78A0.001.DNWGDG0-P1-C10-L1-T2 + + + U78A0.001.DNWGDG0-P1-C10-L2-T1 + + + U78A0.001.DNWGDG0-P1-C10-L2-T2 + + + If only a single PCI device is on the daughter card, then the -L# + suffix should not be used, as the -C# is sufficient to identify the PE and + device. +
+ +
+ Virtual Card Connector Location Codes + Virtual card connector location codes are formed as though there + were a virtual planar with card slots. For example, a virtual IOA would have a + location code of form: + + + U9117.150.1054321-V5-C2 + + + In the virtual card connector location code, the unit location + label specifies the system location code, not the CEC enclosure location + code. + It is recommended that the card connector location label have a + non-zero numeric part, for human factors reasons. +
+
+ Port Location Codes + Port location codes are formed by appending the port location + label, Tn, to the location code of the resource on which the port connector is + mounted. The location label, Tn, assigned in the engineering and manufacturing + process, is unique within the parent resource, is physically displayed on the + parent resource, and is present in the VPD of the parent resource. + +
+ Resources without Port VPD + If a resource without slot map VPD has port numbers physically + marked on it, the hard coded slot map will reflect the marked numbers and + letters with a “T” prefix. Any letters will be folded to + uppercase to avoid double byte display concerns. (Note: only letters 'A' - 'F' + may be used in a port location label. Other letters on the card will be ignored + and numbers will be assigned for uniqueness.) It is recognized that location + labels formed in this way may not conform to the location label rules stated in + . + If the port labels are not marked on the standalone adapter, the + hard coded slot map will specify location labels of Tn, where n is decimal and + equal to the port address (i.e. port 0 will map to T1, port 1 will map to T2, + etc.) Whenever possible, the hardware design should be such that this will lead + to the preferred left to right, top to bottom, front to back ordering. For + standalone adapters that can be installed in multiple systems, ports are + labeled beginning with the PCI connector and continuing toward the opposite + edge of the card and from tailstock forward toward the opposite edge of the + card. + If the adapter is imbedded on a FRU which does not have port + location labels marked on it and has ports for other functions, then the + numbering to the ports in the hard coded slot map must take into account the + other ports on the FRU. The hard coded slot map will comply with the left to + right, bottom to top, front to back ordering guidelines. In this case, the + first port for the imbedded adapter may be other than T0 and may not be + contiguous. +
+ +
+ Determining Port Number + If the port number cannot be determined from VPD or VPD plus + configuration or addressing information, software or firmware must infer the + port number. + + + + For SCSI IOAs with multiple PCI configuration spaces, each port + has its own configuration space. + + + + For multiport SCSI IOAs with a single PCI configuration space, + firmware or software will add n+1 to the base port's distinguishing value to + obtain the port number for the nth port. Thus port 0 (usually closest to the + PCI connector edge of the card) will have label T1, port 1 will have label T2, + etc. + + +
+ +
+ Physical Device Location Codes + Devices whose parent supports location label + VPDSES devices on SCSI backplanes contain VPD that has + a slot map. The slot map associates a SCSI LUN with a location label. Some + backplanes that do not actually have SES support have a virtual SES that + provides the same function. It is assumed that future protocols will support + equivalent function. + (that is, mounted/docked on a backplane + that supports location information for docked devices) will have physical + location codes. For example, + + + + U5734.001.10ABCDE-P3-D19 + + + + Physical device location codes are formed by appending the physical + device location label, Dn, to the location code of the resource to which the + device is docked. The location label, Dn, assigned in the engineering and + manufacturing process, is unique within the parent resource, is physically + displayed on the parent resource, and is present in the VPD of the parent + resource. + Notes: + + + AIX will use logical path location codes for SCSI devices even + in situations where a SES device is available to provide device location label + information. + + + + In some cases, a location code may need to be displayed or + logged before the information from the backplane is available to form the + physical location code. In these cases, a logical path location code will be + formed according to the applicable rules and used temporarily. Once the + information needed to form the physical device label is available, the physical + device location code will be used. + + +
+
+ +
+ SCSI Device Logical Path Location Codes -- Real and + Virtual + SCSI (Small Computer System Interface) devices whose parent does + not support location label VPD will have location codes that are composed of + the location code of the controlling SCSI port followed by the SCSI Target + (0-15) and SCSI LUN (Logical Unit Number). A SCSI logical-path example + is: + + + + U7043.150.1076543-P4-T3-L13-L0 + (Decimal L values) + + + + For virtual SCSI, a 48-bit ID is currently used (but is not limited + from moving to 64-bit) to identify the attached virtualized SCSI device. This + 48/64 bit ID is represented with a -L# in hexadecimal. There is no separate + LUN#. Examples are: + + + U7043.150.1076543-P4-T1-L830000000000 + (Hexadecimal L value) + + + or + + + U7043.150.1076543-P4-T3-W830000000000-L0 + (Hexadecimal W and L values) + + +
+ +
+ SAS Device Logical Path Location Codes + SAS (Serial SCSI) devices whose parent FRU does not support + location label VPD will have location codes that are composed of the location + code of the controlling SAS adapter followed by a series of port labels, + “-L#”, for each SAS port traversed from the adapter down to the + drive followed by the SCSI LUN (Logical Unit Number). The number value of the + “-L#” label will be the lowest phy in the outgoing SAS port with + # being a decimal value. For example: + + + U7043.150.1076543-P1-C3-L3-L1-L5-L0 + + +
+ +
+ IDE/ATAPI Device Logical Path Location Codes + The desired form of the location code is based on the physical-path + location codes obtained from VPD. For example: + + + + U5734.001.1076543-P2-D4 + + + + For an IDE device that had an older form of VPD (without physical + location codes), then its location code would have looked like: + + + + Ux-Px-(Cx)-Tx-L# + (from -L0 to -L3 where: + L0 = primary/master + L1 = primary/slave + L2 = secondary/master + L3 = secondary/slave) + + +
+ +
+ Fibre Channel Device Logical Path Location Codes -- + Real and Virtual + Fibre channel devices that are not mounted/docked on a backplane + that supports location code VPD will have location codes composed of the + location of the port on the controlling IOA followed by the worldwide unique + port identifier and LUN. The number value (#) of the “-L#” label + is a hexadecimal value. An example FC disk attached to a physical adapter + is: + + + + U787A.001.1012345-P1-C5-T2-W123456789ABCDEF0-L1A05000000000000 + + + + The same disk being accessed through virtual fibre channel would + appear like: + + + + U9111.520.1012345-V2-C4-T1-W123456789ABCDEF0-L1A05000000000000 + + +
+ +
+ Location Codes for SR-IOV Adapter Virtual + Functions + Single Root IO Virtualization allows for multiple “virtual + functions” to share the same physical port of a PCI adapter. The -S# + suffix, appended to the physical location code of the port (-T#), is used to + identify the unique virtual function using that port. The number value (#) of + the “-S#” label is a zero starting decimal value determined and + managed by the software layer that owns the physical functions of the SR-IOV + adapter. + For an SR-IOV ethernet adapter, the third virtual function for the + first ethernet port would look like: + + + + U7043.150.1076543-P1-C5-T1-S2 + + +
+ +
+ Group Labels + Group labels appear on parent FRUs to indicate groupings such as + port or DIMM pairs. Group labels are not part of the location label or location + code. Group labels may be part of slot map VPD and may be processed by software + that displays information on the corresponding FRUs. +
+ +
+ Sandwich FRU Location Label + A Sandwich FRU has a single location label to describe its location + just as any single FRU would. +
+ +
+ Sandwich FRU Child Location Labels + A Sandwich FRU is like any single FRU in that it has one numbering + space for numbering its child locations. +
+ +
+ Location Code Reported by Sensors + The location code reported by a sensor is the location code of the + FRU being monitored by the sensor. +
+ +
+ Sensor Locations + The location code of a sensor is the location code of the FRU on + which the sensor is located. +
+ +
+ Location Code Reported for Indicators + The VPD that reports an indicator will give the location label of + the resource identified by the indicator, not the location label of the + indicator itself. +
+ +
+ Indicator Locations + The location code of an indicator is the location code of the FRU + on which the indicator is located. +
+ +
+ Firmware Location Codes + The location specified for firmware is left to the platform except + that the location code must match the scope of the firmware and the location + code must follow the form specified above, beginning with a unit location label + and ending with a firmware location label. For example, firmware for port 2 (T + location label value) on planar 1 could have a location code of the form: + + + + U7879.001.1054321-P1-Y2 + + + + If the firmware is considered to be system wide, then the planar + location label would not be present and the unit location label specifies the + system location code not the CEC enclosure location code: + + + + U9117.001.1054321-Y1 + + +
+ +
+ Bulk Power Assembly (BPA) Location Codes + The unit location label for a BPA and its components consists of + the “U” prefix and the MTMS of the rack of which the BPA is a + component. + In some configurations, there are two BPAs in one rack. If they + were treated separately, the second BPA would have the same location label as + the first which would lead to location code collisions. Therefore, from the + perspective of location codes, the two BPAs will be treated as on BPA. The + planar location labels and, when necessary, other location labels within the + second BPA are incremented so that they are not the same as the labels in the + first BPA. For example, the front side BPA has a planar P1 and the back side + BPA has a planar P2 etc. +
+ +
+ Internal Battery Features Location Codes + The unit location label of an Internal Battery Feature (IBF) is the + unit location label of the BPA to which it belongs. The planar location labels + and, if necessary, other location labels within the IBF are incremented so that + they are not the same as the labels in the BPA or any other IBF belonging to + that BPA. +
+ +
+ Media Drawer Location Codes + In some configurations, there are media drawers that do not have a + MTMS. The unit location label for these media drawers is the unit location + label of the CEC to which it belongs. The planar location labels and, if + necessary, other location labels within the media are incremented so that they + are not the same as the labels in any other media drawer in the system or any + labels in the CEC. +
+ +
+ Horizontal Placement Location Labels + The horizontal placement location label begins with the prefix + “N” followed by the digit “1” for the left side of + the frame (viewed from the front) or the digit “2” for the right + side of the frame (when viewed from the front). +
+ +
+ EIA Location Label + The EIA location label begins with the prefix “X” + followed by a nonzero digit which represents the EIA location of the bottom of + the unit that is or would be in the frame at that location. +
+ +
+ Blade Chassis Location Codes + The disk storage module in a blade chassis may consist of a + backplane and a set of disks that plug into the backplane. Such a storage + module is assigned an enclosure feature code which is used to define the unit + location label (Un) of a disk in a storage module. + In some blade chassis there may be multiple identical storage + modules. All storage modules have a unit location with the same enclosure + feature code. The backplane within the left storage module has label P1, the + backplane in the next storage enclosure has label P2, and so on, to help with + disk identification. +
+ +
+ Location Codes for Hot-pluggable Devices + There are multiple occasions where devices may be added after the + system has booted and the addition did not use any dynamic reconfiguration + flows. In this situation, the O/S does not have adequate information from the + device tree's “ibm,loc-code” properties to + construct a correct physical location code. One example of this is with + IDE/SCSI drives that are hot-pluggable, where the O/S only knows the logical + location code from the IDE/SCSI bus. Firmware, however, may know the physical + location code of the drive based on the unit-address. Similarly, a USB root-hub + may have multiple down-facing ports with different physical location codes, but + the root-hub is only a single device tree node, so only a single location code + can be provided with just the “ibm,loc-code” property. + The “ibm,loc-code-map” property + contains a list of pairs (unit-address, location code), both as encoded + strings. It describes the physical location code for each potential child + node. + + + + R1--1. + + The instance of each USB root-hub in + the device tree must contain the “ibm,loc-code-map” property if the root-hub has multiple down-facing ports. This + applies to both the OHCI and EHCI interfaces of a USB adapter. Lack of this + property implies there is only a single down-facing root-hub port from that USB + interface. + + + + + R1--2. + + To determine the location code for an + end device associated with leaf open firmware node, the O/S must use the + “ibm,loc-code-map” entry with a matching + unit-address, if it exists, in preference to the parent's + “ibm,loc-code” property. + + + + + R1--3. + + The “ibm,loc-code-map” property must not contain an entry + for a port from an embedded IOA that is not externally connected, or if the + location code is undeterminable. + + + + + R1--4. + + If the unit-address architecture for + certain node types do not strictly bind a particular unit-address with a + hardware location, the “ibm,loc-code-map” + property must not exist in the parent of those nodes. + + + +
+ +
+ Location Code for USB Attached Devices + The root hub port number used determines the location code up to + the Tn suffix. There can be zero or many intervening hubs, and the intervening + “Ln” location labels are in path order. All immediate children + are of root hubs are represented by “L1”. For devices not + directly attached to the root hub, the “Ln” will correspond to + the software port number, n, of the parent hub that a device is attached to, + counting from 1. + For example, the location code for a USB device attached to an IOA + imbedded on a backplane with location label P1, using port T5, and with an + intervening hub under which the device is attached to the third port would + be: + + + + U787A.001.10ABCDE-P1-T5-L1-L3 + + +
+
+
+ +
+ Vital Product Data + +
+ Introduction + The set of all Vital Product Data (VPD) from the FRUs of a system + is the product topology information which uniquely defines that system’s + hardware and firmware elements. The system VPD describes a system in terms of + various FRUs, part numbers, serial numbers and other characterizing features. + With VPD, mechanisms may be provided for collecting information such as field + performance and failure data on any FRU in a system. Also, with the feedback + from the field into an installed system data base, the delivery of complete and + accurate Miscellaneous Equipment Specifications (MESs) to customers can be + assured. + + + + R1--1. + + FRUs used in LoPAR platforms must + provide machine-readable VPD as defined in + . + + + + + R1--2. + + LoPAR platforms must support the + collection of, and provide availability to, Vital Product Data. + + + + Platform Implementation Notes: + + + + It is the intent of this architecture that the FRUs of a system + be self describing using VPD. + + + + There are FRU’s which have VPD which is not in the format + described herein, such as JEDEC. In the case of use of these parts, the + firmware may choose to translate the FRU VPD data into the LoPAR format when + the OF device tree is being generated. For I/O adapters which have different + VPD, their device driver must perform the reading and translation. + + +
+ +
+ VPD Data Structure Description + Architecture Note: Even though only a few + large and small resource tags have been defined (see the + ), the current definition will allow all + possible tags except for (0x00). This will allow later devices with a new, + previously undefined tag, to work. + + + + R1--1. + + Vital Product Data when reported to the OS via + ibm,get-vpd or the OF device tree, must conform to the data + structures describe in the , section + 6.4The PCI 2.1 VPD keywords are PN, FN, + EC, MN, SN, LI, RL, RM, NA, DD, DG, LL, VI, FU, SI, and + Z0-ZZ, except as follows: + + + + The VPD will consist of only the following sequence of tags: + Large Resource type identifier string tag (type 2, byte 0 = 0x82) with FRU + name, Large Resource type VPD keywords tag (type 16, byte 0 = 0x90) with FRU + VPD keywords, Small Resource type end tag (type 15) with or without checksum + covering the above. + + + + Only resource tags, lengths and checksums are binary. All other + data must be in ASCII format. + + + + Architecture Note: There are three keywords + (FU, SI and VI) which allow binary data. There are no other exceptions. Also, + the length code following a large resource tag is Little-Endian. That is, the + first byte is the low order byte and the second byte is the high order byte of + the length. + Implementation Notes: + + + + Version 2.2 of the PCI Local Bus + Specification changed the format and location of VPD information. + With that change, a device with Version 2.2 VPD will result in no VPD being + detected by the firmware. In this case the selected device driver will have to + access and reformat the VPD information so that the format of the data provided + to the OS is in the format which is required by the OS. + + + + The definition of a small resource tag is where bit 7 is 0. Then + bit 6 through 3 are the type and bits 2 through 0 are the length. An end tag is + a type of 15. Thus a 0x78 is a small resource end tag of length 0 and 0x79 is a + small resource end tag of length 1. The valid end tags are 0x78 through + 0x7F. + + + + + + + R1--2. + + The end tag checksum, when provided to the OS, must cover all + resources beginning with the first byte (a resource tag) up to, but not + including, the Small Resource Type End tag. + + + + + R1--3. + + If the platform determines that the VPD that it has collected is + invalid, then the platform must discard any collected data and replace it + with: + + + + Large Resource type identifier string tag (type 2, byte 0 = 0x82) + with value ‘NOT_VALID_VPD’. + + + + Large Resource type VPD keywords tag (type 16, byte 0 = 0x90) + containing the “YL” keyword and associated location code + data. + + + + Small Resource Type End tag with or without a checksum covering + the above. + + + + + + + R1--4. + + If the device VPD is valid, all of the + device VPD must be transferred including the Small Resource Type End Tag. + + + + + R1--5. + + A “YL” keyword must be + added to the Large Resource type VPD keywords tag (type 16, byte 0 = 0x90) when + the VPD is reported to the OS via either the ibm,get-vpd + RTAS call or the OF device tree. + + + + The checksum byte after the (0x79) resource tag will cause the + binary sum of all the bytes from the first large resource tag, carries being + discarded, to result in 0x00. As noted in Requirement , the (0x79) small resource tag is not + included in this sum. +
+ +
+ Keyword Format Definition + The exact format of the VPD is vendor-specific but falls within the + specification as defined in the following subsections. + +
+ VPD fields + The fields defined in are + stored in VPD modules at the time of manufacturing. + + + + R1--1. + + LoPAR platforms and FRUs must + provide VPD fields marked as required in + and for all VPD fields provided must adhere + to the definitions specified by . + + + + + R1--2. + + Each system must have VPD that + contains the system’s SE keyword (see Requirements + , , + , and + ) and the system’s TM keyword (see + Requirements , + , , + and ). The description (large resource + type of 0x82) for this VPD in the “ibm,vpd” + property must be “System VPD”. + + + + + R1--3. + + VPD for memory FRUs must contain + the SZ keyword. + Platform Implementation Note: There are circumstances where vendor + preference or manufacturing processes may require that some fields be omitted + (for example; Serial Number). This should be treated as an exception and should + be accompanied by an appropriate level of risk assessment. In the case of an SN + exception, the SN should be omitted, not made blank, NULL, or a fixed + value. + + + + + + LoPAR VPD Fields + + + + + + + + + + + Keyword + + + + + Data Type + + + + + Data Length (Bytes) + + + + + Required?A lack of a hard requirement in this column does + not mean that the keyword is never required; only that it is not required all + the time. Keywords which are not marked as “Required” are + required when appropriate for the specific keyword. + + + + + Description + + + + + + + + A1 + + + ASCII + + + Up to 16 + + + -- + + + Storage Facility Image MTMS - Logical ID + Length (MTMS-a####). Linkage between logical entities. + Examples: Used on Disk FRU resource to link disk to array site. Used on array + site resource to link array site to array. Used on array resource to link array + to rank. Used on rank resource to link rank to segment pool. + + + + + AC + + + ASCII + + + Up to 32 + + + -- + + + Account Name + Used on HMC resource. + + + + + AD + + + ASCII + + + Up to 10 + + + -- + + + Addressing Field + + + + + AP + + + ASCII + + + Up to 16 + + + -- + + + Asset Protection Key Password + + + + + AS + + + ASCII + + + Up to 8 + + + -- + + + Reserved + + + + + AT + + + - + + + - + + + -- + + + Reserved + + + + + AX + + + ASCII + + + Up to 32 + + + -- + + + AIX name + + + + + B1 + + + ASCII + + + A multiple of 16, up to a max of 240 + + + -- + + + Contains 1 to 15 instances of the following 16 byte + definition, concatenated together. + Contains the base ethernet MAC address and an instance + count. + The count specifies the number of valid MAC addresses + starting with the base MAC address and incrementing by one for each successive + MAC address, until the specified number of MAC addresses have been + created. + The field contains the ASCII coded hexadecimal + representation of the binary value, as follows: + Bytes + 1 - 12 Base MAC address + 13 - 14 Reserved (ASCII “00”) + 15 - 16 Count + + + + + B2 + + + ASCII + + + A multiple of 32, up to a max of 224 + + + -- + + + Contains 1 to 7 instances of the following 32 byte + definition, concatenated together. + SAS WWIDs. + The Count field is the number of available WWIDs starting + from the base and incrementing by 1 for each new WWID. + The field contains the ASCII coded hexadecimal + representation of the binary value, as follows: + Bytes + 1 - 16 Base SAS WWID + 17 - 24 Reserved (ASCII “00000000”) + 25 - 32 Count + + + + + BC + + + ASCII + + + Up to 12 + + + -- + + + Bar Code + + + + + BH + + + ASCII + + + 2 + + + -- + + + BatcH code - used for vintage if no serial number + + + + + BR + + + ASCII + + + 2 + + + -- + + + Brand keyword value “xy” + Note: The following are the values + currently defined. To get other product specific values, go through the normal + LoPAR change process. + x = Type of machine + + + “B” - Reserved + + + “C” - Reserved + + + “D” - Reserved + + + “I” - Reserved + + + “N” - Reserved + + + “O” - Reserved + + + “P” - Reserved + + + “S” - IBM Power Systems™ platforms + + + “T” - OEM Power Systems platforms + + + Other values are reserved. + + + y = Specific Information + + + “0” - no specific information + + + Other values are reserved. + + + + + + + BT + + + ASCII + + + 10 + + + -- + + + Battery Replacement date in YYYY-MM-DD format. Used on + Primary Power Supply FRU in rack enclosure. + + + + + CC + + + ASCII + + + 4 + + + Required when a CCIN is required by code to configure or + service the component + + + Customer Card Identification Number (CCIN) + + + + + CE + + + ASCII + + + 1 + + + -- + + + CCIN Extender + + + + + CD + + + ASCII + + + Up to 10 + + + -- + + + Card ID + + + + + CI + + + ASCII + + + 16 + + + -- + + + CEC ID - of the CEC, that is the logical controller of + an MTMS (machine-type-model-serial #), like a drawer. + The 16 byte CI field definition is TTTT-MMM SSSSSSS where: + + + TTTT-MMM is an 8 byte field. The high order 4 bytes are + the system type, followed by a dash, followed by the 3 low order bytes which is + the model. + + + blank is a 1 byte separator character, that separates + the type-model from the serial #. + + + SSSSSSS is the 7 byte serial number. The high order 2 + bytes are the “plant of manufacture” and the low order 5 bytes + are the “sequence number”. + + + + + + + CL + + + ASCII + + + Up to 32 + + + -- + + + Code Level, LID keyword + Format: + fix pack MIF name, “space”, Load ID (8 + characters), time stamp (12 characters) + The fix pack name must be the same as the name used in + the MI keyword and is delimited by a space. + The time stamp is, hours (2 characters) + Minutes (2 + characters) + Year (4 characters) + Month (2 characters) + Day (2 characters). + The LID level reported is the current active level. + Note: There is no correlation + between the CL keyword value and which of the 3 candidate fixpack levels are + reported in the MI keyword. + + + + + CN + + + ASCII + + + Up to 7 + + + -- + + + Customer Number + + + + + CV + + + ASCII + + + Up to 4 + + + -- + + + Country Number + + + + + DC + + + ASCII + + + 2 + 1 + 12 +   +   +   +   +   +   +   +   +   +   +   +   +   +   +   +   +   +   + + + -- + + + Action Code, timestamp + blank (space) + TimeStamp: yyyymmddhhmm + Action Codes: + BD = Build Date + AM = added as MES + AB = added as bulk MES + AI = available at install + ID = field install date + AC = added with field EC + AU = added from unknown source + AR = added in repair action + AT = added temporarily in field + AH = added manually in field + Returned on history file: + RU = removed unknown (field) + RR = removed in repair action + RC = removed with EC + RT = removed temporarily / powered off (field) + RM = removed permanently (field) + RN = removed to another system + + + + + DD + + + - + + + - + + + -- + + + Reserved -- used for MicroChannel Architecture VPD + + + + + DG + + + - + + + - + + + -- + + + Reserved -- used for MicroChannel Architecture VPD + + + + + DU + + + ASCII + + + Up to 10 + + + -- + + + Drawer Unit + + + + + DL + + + ASCII + + + Up to 10 + + + -- + + + Drawer Level + + + + + DP + + + ASCII + + + Up to 255 + + + -- + + + Disk Space Characteristics + Used on Disk resource. Comma separated string. + Example (in the following, the “<“, + “>”, and text in between these would be replaced by a value + representing the quantity specified by the words between “<” + and “>”): + “VN=<Volume Serial Number>, + VD=<Vendor>, DT=<Disk Type>, DC=<Disk-Capacity>, + DR=<Disk-RPM>, DS=<Disk-Interface-Speed>, + AP=<Array-Site-Position>, ST=<Status>” + + + + + DS + + + ASCII + + + Up to 30 + + + -- + + + Displayable Message (if not defined, created by the + contents of the ID large resource (82)) + + + + + EA + + + ASCII + + + Up to 24 + + + -- + + + Electronic Message for electronic customer support (ECS) + + + + + EC + + + ASCII + + + 12 + + + Required if the part number is not changed with every modification + + + Engineering Change Level (technical features, revision level, vintage level) + + + + + ET + + + ASCII + + + 2 + + + -- + + + Enclosure Type. + This value is defined in the + . The ASCII value specified below is the + ASCII representation of the hexadecimal representation of the byte value + defined in the SMBIOS specification (for example, 0x0B becomes + “0B”). Bit 7 of the byte number is the chassis lock bit (if + present value is a 1, otherwise if either a lock is not present or it is + unknown if the enclosure has a lock, the value is a 0). If the chassis lock bit + is set, the following get changed to the corresponding ASCII representation + (for example, “01” becomes “81”, “10” + becomes “90”) + “01” Other + “02” Unknown + “03” Desktop + “04” Low Profile Desktop + “05” Pizza Box + “06” Mini Tower + “07” Tower + “08” Portable + “09” LapTop + “0A” Notebook + “0B” Hand Held + “0C” Docking Station + “0D” All in One + “0E” Sub Notebook + “0F” Space-saving + “10” Lunch Box + “11” Main Server Chassis + “12” Expansion Chassis + “13” SubChassis + “14” Bus Expansion Chassis + “15” Peripheral Chassis + “16” RAID Chassis + “17” Rack Mount Chassis + “18” Sealed-case PC + + + + + FC + + + ASCII + + + 8 + + + -- + + + The Feature Code is 8 bytes formatted as 4 characters, a + dash, and three characters. + + + + + FD + + + ASCII + + + 7 + + + -- + + + Field Bill of Material (FBM) EC level + + + + + FG + + + ASCII + + + 4 + + + -- + + + FlaG Field: The first two bytes contain a VPD flag in + the form of VS. V=V indicates that there is VPD. V=N indicates there is no VPD. + S=S indicates that the VPD contains a slot map. S=P indicates there is a port + map. S=N indicates no slot map or port map. S=B indicates both a slot map and a + port map. The right two characters contain the FRU identification + keyword. + + + + + FI + + + ASCII + + + 2 - 8 + + + -- + + + Frame ID: 2 hex byte value for SPCN or 8 character + logical frame number for DASD backplane. + + + + + FL + + + ASCII + + + Up to 16 + + + -- + + + FRU Label: This is a variable length ASCII character + data area for the FRU Label. + + + + + FN + + + ASCII + + + Up to 8 + + + Required + + + FRU Number (Board, card, or assembly Field Replacement + Unit number). + + + + + FU + + + Binary + + + Up to 10 + + + -- + + + Function Unit - This function identifies which function + in a multi-function IOA this VPD data applies to. Only one FU field can appear + per VPD tag. Data is binary encoded. + + + + + H1 + + + ASCII + + + 1 + + + -- + + + Partition HSL Pool + Used on a partition resource that is part of a storage facility image. + + + + + ID + + + ASCII + + + 2 + + + -- + + + Two ASCII characters are used to identify each system in + a Storage Facility. Valid values are 00 and 01. + + + + + IF + + + ASCII + + + Up to 16 + + + -- + + + Storage Facility MTMS - InterfaceID + Length (MTMS-####). Identifies one or more adapter I/O + interfaces in the storage facility that interconnect device adapters and + storage enclosures. Used on Device Adapter FRUs in I/O enclosure and on Storage + Enclosures. Device Adapters have two Interfaces Ids (comma separated string), + and storage enclosures have one. The number could change for future + products. + + + + +   + L1 + L2 + L3 + L4 + L5 + L6 + + + ASCII + + +   + Up to 30 + Up to 30 + Up to 30 + Up to 10 + Up to 30 + Up to 12 + + + -- + + + Location Information: + Individual or Company Name + Street Address + City, State, Country + Zip Code + Contact Name + Contact Phone Number + + + + + LA + + + ASCII + + + 32 + + + -- + + + LIC Node Alternate Bus VPD: This fixed format data field + contains 32 bytes of LIC I/O node alternate bus VPD data. + + + + + LE + + + ASCII + + + Up to 17 + + + -- + + + LIC VMRF + Example: SEA 5.1.0.0345. Used on a partition resource + that is part of a storage facility image or on an enclosure or enclosure + resource that has a firmware level. + + + + + LI + + + ASCII + + + Up to 10 + + + -- + + + Adapter Software Identification + + + + + LL + + + ASCII + + + Up to 10 + + + -- + + + Adapter Software Level + + + + + LN + + + ASCII + + + 32 + + + -- + + + LIC Node VPD: Fixed format 32 bytes of VPD data. + + + + + LO + + + ASCII + + + 2 + + + -- + + + Location (INternal/EXternal) + + + + + LP + + + ASCII + + + 32 + + + -- + + + LIC Node Primary Bus VPD: Fixed format 32 bytes of VPD data. + + + + + LS + + + ASCII + + + Up to 255 + + + -- + + + Logical Space Characteristics + Used on Storage Logical resources. + Examples: + Used on Array resource. Comma separated string. + Including: “AN=Array Serial Number, AT=Array-Type, AC=Array + Configuration, Rank Position”. + Used on Rank resource. Comma separated string. Including: + “RN=Rank Serial Number, ST=Segment-Type(FB-1G, CKD-Mod1), + SS=Segments(####), SU=Segments-Used, RG=Rank Group(#)”. + Used on Segment Pool resource. Comma separated string. + Including: “ST=Segment-Type(FB-1G, CKD-Mod1), SS=Segments(####), + SU=Segments-Used, VS=Virtual-Segments(####), + VU=Virtual-Segments-Used(####)”, RG=Rank-Group(#). + + + + + MD + + + ASCII + + + 4 + + + -- + + + Model Number: 3 characters with a leading blank. + + + + + MF + + + ASCII + + + 2 + + + -- + + + Map Format: Two hex characters identify the slot or port + map format that follows. This keyword must immediately precede the SM or PM + keyword. + + + + + MI + + + ASCII + + + Up to 40 + + + -- + + + Microcode Image + This keyword is only used to describe dual sided + alterable system firmware Image which can be altered by the OS via the + ibm,update-flash-64-and-reboot RTAS call. Both the + ibm,validate-flash-image and the + ibm,manage-flash-image RTAS calls are supported. May or may not be + able to be updated via non-OS visible means. + Format: + t side Microcode Image name, “space”, p + side Microcode Image name, “space”, booted Microcode Image + name + The Microcode Image name must be a 9 character name of + the form: + “NNSSS_FFF” + + where + “NN” is a two character name (assigned by + the GFW Firmware Distribution Coordinator) used to identify a set of + platforms; + “SSS” is a 3 character code stream + indicator; + “_” is a separation character for + readability; and, + “FFF” is a 3 character identifier of the + current microcode level. + Note: The booted fix pack level + reported may not match the current p-side or t-side level as a result of + concurrent update. The important information is what is in flash, and that is + what is being reported. The hypervisor will have to cache the value for the + booted level, and should go to FSP to check what's current on flash for the + p-side and t-side levels. + + + + + ML + + + ASCII + + + Up to 40 + + + -- + + + Microcode Level + This keyword is only used to describe dual sided + alterable system firmware images which can be altered by the OS via the + ibm,update-flash-64-and-reboot RTAS call. Both the ibm,validate-flash-image and + the ibm,manage-flash-image RTAS calls are supported. May or may not be able to + be updated via non-OS visible means. + Format: + t side Microcode Level name, “space”, p + side Microcode Level name, “space”, booted Microcode Level + name + The Microcode Image name must be a 8 character name of the form: + “FWVRE.MF” + + where + "FW" is a static prefix representing 'firmware' + “V” is Version - Power Processor Level + "R" is Revision - Typically GA number from the processor level + "E" is Extension - Typically zero. If non-zero, + designates off cycle single system release + "M" is Modification - associated Service Pack Level (0-Z) + "F" is Fix Level - Typically zero. If non-zero, designate + off cycle, targeted fixes + Note: The booted fix pack level + reported may not match the current p-side or t-side level as a result of + concurrent update. The important information is what is in flash, and that is + what is being reported. The hypervisor will have to cache the value for the + booted level, and should go to FSP to check what's current on flash for the + p-side and t-side levels. + + + + + MN + + + ASCII + + + 10 + + + -- + + + Manufacturer ID (source of device, name and location) + + + + + MP + + + ASCII + + + 3 + + + -- + + + Module Plug count. This counter keeps track of the + numbers of times a module has been plugged, so that reliability statistics can + be kept. + + + + + MS + + + ASCII + + + Up to 6 + + + -- + + + MES Number + + + + + MU + + + ASCII + + + 32 + + + -- + + + Machine Universal Unit ID (UUID). The value is the ASCII + coded hexadecimal representation of the 16 byte binary value. + + + + + N5 + + + ASCII + + + Up to 228 + + + -- + + + Processor CoD Capacity Card Info + + + + + N6 + + + ASCII + + + Up to 231 + + + -- + + + Memory CoD Capacity Card Info + + + + + N7 + + + ASCII + + + Up to 144 + + + -- + + + Processor on Demand billing data + + + + + N8 + + + ASCII + + + Up to 145 + + + -- + + + Memory on Demand billing data + + + + + NA + + + ASCII + + + Up to 16 + + + -- + + + Network Address (ASCII coded hexadecimal representation + of the binary value.) + + + + + NC + + + ASCII + + + Up to 25 + + + -- + + + This keyword is used to describe the prefix name of the + file used to install a single sided alterable system firmware or adapter/device + microcode image. When this keyword is present, the complete file name will be + described by the content of the NC keyword, concatenated with + “.”, concatenated with the content of the RM keyword. + + + + + NN + + + ASCII + + + 16 + + + -- + + + World Wide Node Name - IEEE assigned 64 bit identifier + (16 hexadecimal digits) for Storage Facility. Valid values are 0-9, A-F. + + + + + NT + + + ASCII + + + Up to 32 + + + -- + + + Sub-machine type + + + + + NV + + + ASCII + + + Up to 24 + + + -- + + + NVRAM ID, part number, location and size + + + + + NX + + + - + + + - + + + -- + + + Reserved + + + + + OS + + + ASCII + + + Up to 17 + + + -- + + + OS name and level. + The OS level is shown in the form of: V.R.M.F where V is + the version, R is the release, M is the modification, and F is the fix. + + + + + PA + + + ASCII + + + 1 + + + -- + + + Op Panel installed flag. “Y” = yes a panel + is installed, “N” = no a panel is not installed. The absence of + this keyword means, that an Op Panel is installed. + + + + + PC + + + ASCII + + + Up to 16 + + + -- + + + Processor Component Definition + + + + + PD + + + ASCII + + + Up to 8 + + + -- + + + Power dissipation/consumption + + + + + PI + + + ASCII + + + Up to 8 + + + -- + + + Processor ID or unique ID (used for licensing control) + + + + + PL + + + ASCII + + + Up to 32 + + + -- + + + Location code + + + + + PM + + + ASCII + + + Up to 16 + + + -- + + + Port Map: Contains the RIO Port Map label information. + Must be preceded by the MF keyword. + + + + + PN + + + ASCII + + + 12 + + + Required if it is different from the FRU number + (FN) + + + Part number of assembly. + + + + + PO + + + ASCII + + + Up to 16 + + + -- + + + SPCN VPD: Identification of the SPCN VPD area on the I/O + backplane. + + + + + PP + + + ASCII + + + 32 + + + -- + + + Power Parameters: SPCN field identifying Power node + parameters. + + + + + PR + + + ASCII + + + 16 + + + -- + + + Power: 16 ASCII hexadecimal characters that represent + the 8 bytes of binary information for Power Control. + + + + + R1 + + + ASCII + + + Up to 16 + + + -- + + + Rack MTMS - Rack Location + Length (MTMS-Exx). - used on storage enclosure + resources. + + + + + R2 + + + ASCII + + + 1 + + + -- + + + Rack Number + Used on Rack enclosure resources. Provides an ordered + number of racks in the storage facility. + + + + + RA + + + - + + + - + + + -- + + + Reserved + + + + + RD + + + ASCII + + + 16 + + + -- + + + Power Domain ID - is the MTMS of the BPA, that powers an + MTMS (Machine-Type-Model-Serial #), like a CEC or drawer. + The 16 byte RD field definition is: TTTT-MMM SSSSSSS where: + + + TTTT-MMM is an 8 byte field. The high order 4 bytes are + the system type, followed by a dash, followed by the 3 low order bytes which is + the model. + + + blank is a 1 byte separator character, that separates + the type-model from the serial #. + + + SSSSSSS is the 7 byte serial number. The high order 2 + bytes are the “plant of manufacture” and the low order 5 bytes + are the “sequence number”. + + + + + + + RI + + + ASCII + + + 4 + + + -- + + + Power Resource ID: A 4 byte hex field providing a unique + logical ID for the power resource. + + + + + RJ + + + ASCII + + + Up to 16 + + + -- + + + RIO-G Loop + Used on I/O enclosure resource. Identifies RIO-G loop on + the reporting system. + + + + + RK + + + ASCII + + + 16 + + + -- + + + Rack Unique ID - is the 64 bit Dallas + “1-wire” unique ROM code. The first 8 bits are a 1-Wire family + code. The next 48 bits are a unique serial number. The last 8 bits are a CRC of + the first 56 bits. + Each of the 16 4-bit nibbles are converted to 16 ASCII + characters, in the range 0-9 or A-F. + + + + + RL + + + ASCII + + + Up to 24 + + + -- + + + This keyword is only used to describe single sided + non-alterable system firmware or adapter/device microcode image which can not + be altered by any means; OS visible or non-OS visible. A single alphanumeric + character string that defines the level of the image. + ROM id, Location ID, ROM part number, FW part number, FW + level, FW code, release date, FW size. + + + + + RM + + + ASCII + + + Up to 25 + + + -- + + + This keyword is only used to describe single sided + alterable system firmware or adapter/device microcode image which can be + altered by the OS. The OS alters the system firmware image via the + ibm,update-flash-64-and-reboot RTAS call. Neither the + ibm,validate-flash-image nor the + ibm,manage-flash-image RTAS calls are supported. May or may not be + able to be updated via non-OS visible means. A single alphanumeric character + string that defines the level of the image. + ROM id, Location ID, ROM part number, FW part number, FW + level, FW code, release date, FW size + + + + + RN + + + ASCII + + + Up to 2 + + + -- + + + Rack Name + + + + + RP + + + ASCII + + + 1 + + + -- + + + RIO-G Position Offset + Used on I/O enclosure resource. Identifies the distance + in enclosures from the reporting system - first enclosure is offset 1. + + + + + RS + + + ASCII + + + Up to 128 + + + -- + + + IBM LoPAR Compliant platform unique VPD: Start of a data area. + + + + + RT + + + ASCII + + + 4 + + + -- + + + Record Type. Contains a four character Record Name that + represents a VPD Definition. The following list associates Record Names with + their VPD Definitions. + + + “VSYS” - System MTMS VPD + + + “VCEN” - Enclosure MTMS VPD + + + “VINI” - FRU VPD record + + + + + + + RW + + + - + + + - + + + -- + + + Reserved + + + + + RX + + + ASCII + + + Up to 25 + + + -- + + + This keyword is only used to describe single sided + microcode image which can not be altered by the OS, but may be updated via + non-OS visible means. A single alphanumeric character string that defines the + level of the image. + + + + + S1 + + + ASCII + + + Up to 8 + + + -- + + + Serial Number of attached machine + + + + + S3 + + + ASCII + + + 16 + + + -- + + + Storage Facility MTMS + Length (MTMS). Used on system resource, partition + resources, array-site, resources, array resources, rank resources, storage pool + resources, and enclosure resources in a storage facility to identify the + storage facility. + + + + + S4 + + + ASCII + + + Up to 16 + + + -- + + + Storage Facility Image MTMS + Length (MTMS). Used on partition, array-site, array, + rank, and storage pool, and enclosure-FRU resources, associated with a storage + facility image. + + + + + SC + + + ASCII + + + Up to 44 + + + -- + + + Specify codes + + + + + SE + + + ASCII + + + Up to 7 + + + See Requirements + , + , + , + , and + + + + Machine or Cabinet Serial Number. + + + + + SF + + + ASCII + + + Up to 8 + + + -- + + + Field Change Shipping Instruction (FCSI) number + + + + + SG + + + ASCII + + + 7 + + + -- + + + 2 high order bytes are the “plant of manufacture + code”, followed by the low order 5 bytes, which are the “unit + sequence number”. This unit sequence number must be DDDD0, ADDD0, AADD0, + AAAD0, or AAAA0 where D is a digit 0-9 and A is an alphabetic character A-Z + excluding E, I, J, O, Q, S, U. The right most character of the unit sequence + number must be set to 0. + + + + + SI + + + Binary + + + Up to 10 + + + -- + + + Subsystem Vendor ID. Data is binary encoded. + + + + + SL + + + - + + + - + + + -- + + + Reserved + + + + + SM + + + ASCII + + + Up to 16 + + + -- + + + Slot Map: Contains Slot Map information. Must be + preceded by the MF keyword. + + + + + SN + + + ASCII + + + 12 + + + Required and must be unique for each part with the same FN + + + Serial Number 12 characters. + + + + + SU + + + ASCII + + + 12 + + + See notes + + + The System Unique Identifier (SUID) is a twelve + hexadecimal character value that is unique to a given system anywhere in the + world. The number range is obtained from the Institute of Electrical and + Electronic Engineers. There are no IBM asset protection considerations + involved. + + + + + SY + + + ASCII + + + 7 + + + -- + + + System Number (only one allowed) + + + + + SZ + + + ASCII + + + Up to 10 + + + For memory FRUs, see Requirement + + + + + + Size in decimal, with no leading zeroes. For memory (for + example, cards and DIMMs), it provides the memory size in MB’s. As an + example, a 32 GB memory card would be coded as 32768. + + + + + Tl + + + ASCII + + + 8 + + + -- + + + Attached machine type-model + + + + + TM + + + ASCII + + + 8 + + + See Requirements + , + , + , + , and + + + + The high order 4 bytes are the “Machine + Type”, the next byte is a dash, followed by the 3 byte + “Model”. + + + + + TN + + + ASCII + + + 8 + + + -- + + + The high order 4 bytes are the “Machine + Type”, the next byte is a dash, followed by the 3 byte + “Model”. + + + + + U1 + + + ASCII + + + Up to 255 + + + -- + + + Logical Configuration String + Used on a partition resource that is: CKD3380=####, + CKD3390=####, SCSI512=####, SCSI520=####, SCSI Host Ports=####, SCSI LUN + Groups=####. + Used on device adapter or host adapter FRU for logical + configuration information, if any. + Used on Storage Enclosure. Comma separated string + including “BA=Base Address(xx)”. + + + + + U2 + + + ASCII + + + Up to 255 + + + -- + + + Host Inventory + Used on a partition resource that is part of a storage + facility image for storage facility image logical configuration. Comma + separated string. Including: “Host OS Type1=####, Host OS Type 2=####, . + . .”. + + + + + U3 + + + ASCII + + + Up to 255 + + + -- + + + Reserved for future use. Used on partition resource or + Storage Configuration resources. + + + + + U4 + + + ASCII + + + Up to 255 + + + -- + + + Reserved for future use. Used on partition resource or + Storage Configuration resources. + + + + + U5 + + + ASCII + + + Up to 255 + + + -- + + + Reserved for future use. Used on partition resource or + Storage Configuration resources. + + + + + U6 + + + ASCII + + + Up to 255 + + + -- + + + Reserved for future use. Used on partition resource or + Storage Configuration resources. + + + + + U7 + + + ASCII + + + Up to 255 + + + -- + + + Reserved for future use. Used on partition resource or + Storage Configuration resources. + + + + + U8 + + + ASCII + + + Up to 255 + + + -- + + + Reserved for future use. Used on partition resource or + Storage Configuration resources. + + + + + U9 + + + ASCII + + + Up to 255 + + + -- + + + Reserved for future use. Used on partition resource or + Storage Configuration resources. + + + + + VE + + + - + + + - + + + -- + + + Reserved -- used for MicroChannel Architecture VPD + + + + + VI + + + Binary + + + Up to 10 + + + -- + + + Vendor ID / Device ID + Only one VI may appear per VPD tag. + + + + + WN + + + ASCII + + + 16 + + + -- + + + Contains the ASCII coded hexadecimal World Wide Port + Name (WWPN). + + + + + YK + + + ASCII + + + 4 + + + See Requirement + + + Ties together multiple enclosures that share the same + combined SE and TM. + + + + +
+ Notes referenced in : + + + + When the + BR keyword indicates “S” or “T” for the type of + machine, this field must be present and must be non-blank. + + + Implementation Note: The following keywords + are defined in this architecture with the same or similar usage: AD, CD, DC, + DL, DS, DU, EC, FC, FN, LO, NA, P C, PI, PN, RL, RN, SN, SZ, TM, and US. +
+ +
+ Additional Fields for Product Specific use + Three fields are available for user, system or product specific + data for which no unique keyword has been defined. The first and second ranges + of fields in the list are not addressed in the PCI Specifications and are + unique to LoPAR platforms. + + + + U0 - UZ User specific + + + + N0 - NF ReservedV0 - VF Reserved + + + + Y0 - YZ System Information specific + + + + Z0 - ZZ Product specific + + + Note: If firmware/software has a specific + need for a keyword, then it must be provided by the appropriate component + VPD. + The Y? and Z? fields defined in + are specific to LoPAR platforms. As a need + for these fields is determined, they will be defined in this document. The + table contains several keywords which have been defined as place holders. + + + LoPAR Usage of Product Specific VPD Fields + + + + + + + + + + Keyword + + + + + Data Type + + + + + Data Length (Bytes) + + + + + Description + + + + + + + + N5 + + + ASCII + + + Up to 56 + + + Processor CoD Capacity Card Info per + + + + + N6 + + + ASCII + + + Up to 56 + + + Memory CoD Capacity Card Info per + + + + + U? + + + ASCII + + + Up to 128 + + + User Data:? = 0...9, A...Z + + + + + Y0 + + + ASCII + + + 64 + 2 + 2 + 24 + 24 + 12 + + + Board Repair Actions: + # times board repaired + # times board updated with code patches + Copy of system ID Y2 field + Copy of system ID TM field + Copy of system ID PI field + + + + + Y1 + + + ASCII + + + 24 + 2 + 2 +   + 8 + 12 + + + Error Descriptor: + # allowable messages + # valid messages + Messages of 20 bytes each, first, last and most recent 4 messages + Error Code + Date/Time Stamp: yyyymmddhhmm + + + + + Y2 + + + ASCII + + + 24 + 4 + 4 + 4 + 12 + + + Only in system VPD EEPROM: + Manufacturer’s Location + Machine Type + Model ID + Cabinet Serial Number + + + + + YK + + + ASCII + + + Up to 4 + + + Ties together multiple enclosures that share the same + combined SE and TM. See Requirement + . + + + + + YL + + + ASCII + + + Up to 255 + + + Hardware Location Code (see ) + + + + + Z? + + + ASCII + + + Up to 255 + + + Product Specific Information: may be keyword oriented + and ‘,’ delimited. + + + + +
+
+
+
+
diff --git a/Platform/ch_smp.xml b/Platform/ch_smp.xml new file mode 100644 index 0000000..50bf499 --- /dev/null +++ b/Platform/ch_smp.xml @@ -0,0 +1,373 @@ + + + The Symmetric Multiprocessor Option + + This architecture supports the implementation of symmetric + multiprocessor (SMP) systems as an optional feature. This Chapter provides + information concerning the design and programming of such systems. For SMP OF + binding information, see . + SMP systems differ from uniprocessors in a number of ways. These + differences are not all covered in this chapter. Other chapters that cover + SMP-related topics include: + + + + Non-processor-related initialization and other requirements: + + + + + Interrupts: + + + + Error handling: + + + + Many other general characteristics of SMPs—such as + interprocessor communication, load/store ordering, and cache + coherence—are defined in . + Requirements and recommendations for system organization and time base synchronization are + discussed here, along with SMP-specific aspects of the boot process. + SMP platforms require SMP-specific OS support. An OS supporting only + uniprocessor platforms + may not be usable on an SMP, even when an SMP platform has only a single + processor installed; conversely, an SMP-supporting OS may not be usable on a + uniprocessor. It is, however, a requirement that uniprocessor OSs be able to + run on one-processor SMPs, and that SMP-enabled OSs also run on uniprocessors. + See the next section. + +
+ SMP System Organization + This chapter only addresses SMP multiprocessor platforms. This is a + computer system in which multiple processors equally share functional and + timing access to and control over all other system components, including memory + and I/O, as defined in the requirements below. Other + multiprocessor organizations (“asymmetric + multiprocessors,” “ attached + processors,” etc.) are not included in this architecture. These might, + for example, include systems in which only one processor can perform I/O + operations; or in which processors have private memory that is not accessible + by other processors. + Requirements through + , further require that all processors + be of (nearly) equal speed, type, cache characteristics, etc. Requirements for + optional non-uniform multiprocessor platforms are found in + . + + + + R1--1. + + OSs that do not explicitly support the SMP option must support + SMP-enabled platforms, actively using only one processor. + + + + + R1--2. + + For the Symmetric Multiprocessor + option: SMP OSs must support uniprocessor platforms. + + + + + R1--3. + + For the Symmetric Multiprocessor + option: The extensions defined in + , and the SMP support section of the RTAS + specifications (see ) must be implemented. + + + + + R1--4. + + For the Symmetric Multiprocessor or Power Management + option: All processors in the configuration must have equal + functional access and “quasi-equal” + timing access to all of system memory, + including other processors’ caches, via cache coherence. + “Quasi-equal” means that the time required for processors to + access memory is sufficiently close to being equal that all software can ignore + the difference without a noticeable negative impact on system performance; and + no software is expected to profitably exploit the difference in timing. + + + + + R1--5. + + For the Symmetric Multiprocessor option: + All processors in the configuration must have equal functional and + “quasi-equal” + timing access to all I/O devices and IOAs. + “Quasi-equal” is defined as in Requirement , + above, with I/O access replacing memory access for this case. + + + + + R1--6. + + For the Symmetric Multiprocessor option: + SMP OSs must at least support SMPs with the same PVR contents and speed. The + PVR contents includes both the PVN and the revision number. + + + + + R1--7. + + For the Symmetric Multiprocessor option: + All caches at the same hierarchical level must have the same OF properties. + + + + + R1--8. + + Hardware for SMPs must provide a means for synchronizing all the + time bases of all the processors in the platform, for use by platform firmware. + See . This is for purposes of clock synchronization + at initialization and at times when the processor loses time base state. + + + + + R1--9. + + The platform must initialize and maintain the synchronization of + the time bases and timers of all platform processors such that; for any code + sequence “C”, run between any two platform processors + “A” and “B”, where the reading of the time base or + timer in processor “A” can be architecturally guaranteed to have + happened later in time than the reading of the time base or timer in processor + “B”, the value of the time base read by processor + “A” is greater than or equal to the value of the time base read + by processor “B”. + + + + + Software Implementation Notes: + + + + Requirement has + implications on the design of uniprocessor OSs, particularly regarding the + handling of interrupts. See the sections that follow, particularly + . + + + + While Requirement does + not require this, OSs are encouraged to support processors of the same type but + different PVR contents as long as their programming models are + compatible. + + + + Because of performance penalties associated with inter-processor + synchronization, the weakest synchronization primitive that produces correct + operation should be used. For example, eieio can often be + used as part of a sequence that unlocks a data structure, rather than the + higher-overhead but more general sync instruction. + + + + Hardware Implementation Notes: + + + Particularly when used as servers, SMP systems make heavy demands + on the I/O and memory subsystems. Therefore, it is strongly recommended that + the I/O and memory subsystem of an SMP platform should either be expandable as + additional processors are added, or else designed to handle the load of the + maximum system configuration. + + + + Defining an exact numeric threshold for + “quasi-equal” is not feasible because it depends on the + application, compiler, subsystem, and OS software that the system is to run. It + is highly likely that a wider range of timing differences can be absorbed in + I/O access time than in memory access time. An illustrative example that is + deliberately far from an upper bound: A 2% timing difference is certainly + quasi-equal by this definition. While significantly larger timing differences + are undoubtedly also quasi-equal, more conclusive statements must be the + province of the OS and other software. + + +
+ +
+ An SMP Boot Process + Booting + an SMP entails considerations not present when booting a + uniprocessor. This section indicates those considerations by describing a way + in which an SMP system can be booted. It does not pretend to describe + “the” way to boot an SMP, since there are a wide variety of ways + to do this, depending on engineering choices that can differ from platform to + platform. To illustrate the possibilities, several variations on the SMP + booting theme will be described after the initial description. + This section concentrates solely on SMP-related issues, and ignores a + number of other initialization issues such as hibernation and suspension. See + for a discussion of those other + issues. + +
+ SMP-Safe Boot + The basic booting process described here is called + “SMP-Safe” because it tolerates the presence of multiple + processors, but does not exploit them. This process proceeds as follows: + + + + At power on, one or more finite state machines (FSMs) built into + the system hardware initialize each processor independently. FSMs also perform + basic initialization of other system elements, such as the memory and interrupt + controllers. + + + + After the FSM initialization of each processor concludes, it + begins execution at a location in ROM that the FSM has specified. This is the + start of execution of the system firmware that eventually provides the OF + interfaces to the OS. + + + + One of the first things that firmware does is establish one of the processors as the + master: The + master is a single processor which + continues with the rest of the booting process; all the others are placed in a + stopped state. A processor in this + stopped state is out of the picture; it does nothing that affects + the state of the system and will continue to be in that state until awakened by + some outside force, such as an inter-processor interrupt (IPI).Another + characteristic of the stopped state, + defined in , is that the + processor remembers nothing of its prior life when placed in a + stopped state; this distinguishes it from the + idle state. That isn’t strictly necessary for this booting + process; idle could have been used. However, since the + non-master processor must be in the + stopped state when the OS is started, + stopped might as well be used. + One way to choose the master is to include a special register + at a fixed address in the memory controller. That special register has the + following properties: + + + + The FSM initializing the memory controller sets this + register’s contents to 0 (zero). + + + + The first time that register is read, it returns the value 0 and + then sets its own contents to non-zero. This is performed as an atomic + operation; if two or more processors attempt to read the register at the same + time, exactly one of them will get the 0 and the rest will get a non-zero + value. + + + + After the first attempt, all attempts to read that + register’s contents return a non-zero value. + + + + The master is then picked by having all the + processors read from that special register. Exactly one of them will receive a + 0 and thereby become the master. + Note that the operation of choosing the + master cannot be done using the PA memory locking instructions, + since at this point in the boot process the memory is not initialized. The + advantage to using a register in the memory controller is that system bus + serialization can be used to automatically provide the required + atomicity. + + + + The master chosen in step + then proceeds to do the remainder of the + system initialization. This includes, for example, the remainder of Power-On + Self Test, initialization of OF, discovery of devices and construction of the + OF device tree, loading the OS, starting it, and so on. Since one processor is + performing all these functions, and the rest are in a state where they are not + affecting anything, code that is at least very close to the uniprocessor code + can be used for all of this (but see + below). + + + + The OS begins execution on the single + master processor. It uses the OF Client Interface + Services to start each of the other processors, taking them out of the + stopped state and setting them loose on the SMP OS code. + This completes the example SMP boot process. Variations are + discussed beginning at . Before + discussing those variations, an element of the system initialization not + discussed above will be covered. + + + +
+ +
+ Finding the Processor Configuration + Unlike uniprocessor initialization, SMP initialization must also + discover the number and identities of the processors installed in the system. + “Identity” means the interrupt address of each processor as seen + by the interrupt controller; without that information, a processor cannot reset + interrupts directed at it. This identity is determined by board wiring: The + processor attached to the “processor 0” wire from the interrupt + controller has identity 0. For information about how this identity is used, see + . + The method used by a platform to identify its processors is + dependent upon the platform hardware design and may be based upon service + processor information, identification registers, inter-processor interrupts, or + other novel techniques. +
+ +
+ SMP-Efficient Boot + The booting + process as described so far tolerates the existence of multiple processors but + does not attempt to exploit them. It is possible that the booting process can + be sped up by actively using multiple processors simultaneously. In that case, + the pick-a-master technique must still be + used to perform sufficient initialization that other inter-processor + coordination facilities—in-memory locks and IPIs—can be used. + Once that is accomplished, normal parallel SMP programming techniques can be + used within the initialization process itself. +
+ +
+ Use of a Service Processor + A system might contain a service processor that is distinct from the processors + that form the SMP. If that service processor has suitably intimate access to + and control over each of the SMP processors, it can perform the operations of + choosing a master and discovering the SMP processor + configuration. +   +
+
+
diff --git a/Platform/ch_system_reqs.xml b/Platform/ch_system_reqs.xml new file mode 100644 index 0000000..d3f4d16 --- /dev/null +++ b/Platform/ch_system_reqs.xml @@ -0,0 +1,2624 @@ + + + System Requirements + + This chapter gives an operational overview of LoPAR systems and + introduces platform specific software and/or firmware components that are + required for OS support. This chapter also addresses some system level + requirements that are broad in nature and are fundamental to the architecture + described in later chapters. Lastly, a table of requirements is presented as a + guide for platform providers. + +
+ System Operation +
+ Control Flow + is an example of typical + phases of operation from power-on to full system operation to termination. This + section gives an overview of the processes involved in moving through these + phases of operation. This section will introduce concepts and terms that will + be explained in more detail in the following chapters. Most requirements + relating to these processes will also appear in later chapters. + The discussion in this chapter will be restricted to systems with a + single processor. Refer to for the + unique requirements relating to multiprocessor systems. + +
+ Phases of Operation (example) + + + + + + + + +
+
+ +
+ POST + + Power On Self Test (POST) is the process by which the + firmware tests those areas of the hardware that are critical to its ability to + carry out the boot process. It is not intended to be all-inclusive or to be + sophisticated in how it relates to the user. Diagnostics with these + characteristics will generally be provided as a service aid. + Platform Implementation Note: The platform + may choose to utilize a service processor to assist in the implementation of + functions during various phases of operation. The service (or support) + processor is not a requirement of this architecture, but is usually seen in the + larger systems. +
+ +
+ Boot Phase + The following sections describe the boot phase of operation. The + fundamental parts of the boot phase are: + + + + Identify and configure system components. + + + + Generate a device tree. + + + + Initialize/reset system components. + + + + Locate an OS boot image. + + + + Load the boot image into memory. + + + +
+ Identify and Configure System Components + Firmware is generally written with a hardware in mind, so some + components and their configuration data can be hardcoded. Examples of these + components are: type of processor, cache characteristics, and the use of + imbedded components on the planar. This hardcoding is not a requirement, only a + practical approach to a part of this task. + + + + R1--1. + + The firmware must, by various means, + become aware of all components in the system associated with the boot process + and configure or reset those components into a known state (components include, + for example, buses, bridges, I/O Adapters (IOAs) + See for + the definition of an IOA., + and I/O devices). + + + + + R1--2. + + The firmware must obtain certain system + information which is necessary to build the OF device tree from + “walking” the I/O buses (for example, identification of IOAs and + bridges). + + + +
+ +
+ Generate a Device Tree + + + + R1--1. + + The firmware must build a device tree + and the OS must gain access to the device tree through Client Interface + Services (CIS). + + + + + R1--2. + + Configuration information + (configuration variables) which are stored in non-volatile memory must be + stored under the partition names of-config or + common, depending on the nature of the information (see + ). + + + +
+ +
+ Initialize/Reset System Components + The OS requires devices to be in a known state at the time control + is transferred from the firmware. Firmware may gain control with the hardware + in various states depending on what has initiated the boot process. + + + + Normal boot: Initiated by a power-on sequence; all devices and + registers begin in a hardware reset state. + + + + Reboot: Device state is unpredictable at the start of a + reboot. + + + + The hardware reset state for a device is an inactive state. An + inactive state is defined as a state that allows no system level activity; + there can be no bus activity, interrupt requests, or DMA requests possible from + the IOA that is in a reset state. Since the OS may configure devices in a + manner that requires very specific control over these functions to avoid + transitory resource conflicts, these functions should be disabled at the device + and not at a central controlling agent (for example, the interrupt controller). + Devices that do not share any resources may have these resources disabled at a + system level (for example, keyboard interrupts may be disabled at the interrupt + controller in standard configurations). + + + + R1--1. + + IOAs must adhere to the reset states + given in when control of the system + is passed from firmware to an OS. + + + + IOA Reset States + + + + + + + + + Bus + + + + + IOAs Left Open by OF + + + + + Other IOAs + + + + + + + + PCI + + + Interrupts not active + No outstanding I/O operations + IOA is configured + + + The IOA is inactive: + + I/O access response disabled + Memory access response disabled + PCI master access disabled + Interrupts not active + + IOA is reset (see note) + + + + + System + + + Configured per OF device tree + + Interrupts inactive + DMA inactive + No outstanding I/O operations + + + + The IOA is in hardware reset state (see note) or inactive: + + Interrupts inactive + DMA inactive + + + + + +
+
+
+ + + R1--2. + + The platform must include the root node + OF device tree property “ibm,pci-full-cfg” with a + value of 1 and configure the configuration registers of all PCI IOAs and + bridges as specified by Requirement . + + + + + R1--3. + + Prior to passing control to the OS, the platform must initialize all processor registers to a value which, if + accessed, will not yield a machine check. + + + + + R1--4. + + Prior to passing control to the OS, the + platform must initialize all registers not visible to the OS to a state that is + consistent with the system view represented by the OF device tree. + + + + + R1--5. + + During boot or reboot operations and + prior to passing control to the OS, the platform must initialize the interrupt + controller. + + + + + R1--6. + + Hardware must provide a mechanism, + callable by software, to hard reset all processors and I/O subsystems in order + to facilitate the implementation of the RTAS system-reboot function. + + +
+ + Platform Implementation Note: The platform + is required to reset the interrupt controller to avoid inconsistency among the + states of IOAs, the interrupt controller, and software interrupt handler + routines. The reset state is shown in . + Software and Firmware Implementation Note: + The conventional PCI configuration registers are further described in the + and are copied into OF properties described + in the . PCI-X configuration registers + are further described in the . PCI + Express configuration registers are further described in the + . PCI-X IOAs and bridges and PCI Express + IOAs, bridges, and switches are treated the same as conventional PCI IOAs and + bridges for purposes of generation of OF properties. + Software and Firmware Implementation Note: In + reference to Requirement , generally + the initial value of processor registers is contained in the processor binding. + However, some processors have deviations on register usage. Also, since some + register implementation is optional, all processors are not the same. +
+ +
+ Locate an OS Boot Image + The OS boot image is located as described in + . A device and filename can be specified directly + from the command interpreter (the boot command) or OF + will locate the image through an automatic boot process controlled by + configuration variables. Once a boot image is located, the device path is set + in the device tree as the “bootpath” + property of the chosen node. + The devices searched by the automatic boot process are those + contained in the boot-device configuration variable. + Implementations may choose to limit the number of boot device entries that are + searched. The root node device tree property + “ibm,max-boot-devices” communicates the number of + boot-device entries that the platform processes. + If multi-boot (multiple bootable OSs residing on the same platform) is supported, + a configuration variable instructs the firmware to display a multi-boot menu + from which the OS and bootpath are selected. See + for information relating to the multiboot process. + + + + R1--1. + + The platform must supply in the OF root + node the “ibm,max-boot-devices” property. + + + +
+ +
+ Load the Boot Image into Memory + After locating the image, it is loaded into memory at the location + given by a configuration variable or as specified by the OS load image format. +
+ +
+ Boot Process + The boot process is described in . + Steps in the process are reviewed here, but the + authoritative and complete description of the process is included in + . is a + depiction of the boot flow showing the action of the f1, f5, and f6 function + keys. The figure should only be used as an aid in understanding the + requirements for LoPAR systems. +   +
+ Boot Process + + + + + + + + +
+ +
+ The Boot Prompt + + + + R1--1. + + After the banner step of the boot sequence, the platform display must present + a clearly visible graphical or text message (boot prompt), and + must provide a reaction window of at least 3 seconds that prompts the + user to activate various options including the f1, f5, and f6 control keys + detailed in this document. + + + + + R1--2. + + The functions provided by f1, f5 and + f6 described in this chapter must be equivalently provided by the tty numeral + keys 1, 5, and 6, respectively when a serial terminal is attached. + + + + + R1--3. + + The boot prompt must identify the + platform and communicate to the user that there are options that may be invoked + to alter the boot process. + + + +
+ +
+ The Menus + Once the boot prompt is displayed, the System Management Services + (SMS) menu can be invoked. SMS provides a user interface for utilities, + configuration, and the Multiboot Menu (as introduced in + ) for boot/install and the OF command + interpreter. + The Multiboot menu is formatted so that block devices that + currently contain boot information are most easily selected by the user. + Because of the serial nature of byte devices, they should not be opened unless + specifically included in a boot list. The user may also wish to add devices to + the boot-device and/or diag-device configuration variables (boot lists) that + currently do not contain boot information. The Multiboot menu presents these + devices in a secondary manner. + If the Multiboot Menu boot/install option is chosen, OF will + execute the bootinfo.txt<boot-script> of the + selected OS, and if the user elects to make this the default, the + boot-command variable will be set equal to the contents of + bootinfo.txt<boot-script>. + + + + R1--1. + + The SMS menu must provide a means to + display the Multiboot Menu. + + + + + R1--2. + + If, after the boot + prompt is displayed, + auto-boot? = false + and menu? = true, + the firmware must display the Multiboot Menu directly. + + + + + R1--3. + + The Multiboot Menu must present all + potential boot device options, differentiating block devices that contain + locatable bootinfo objects. + + + + + R1--4. + + Firmware must evaluate all + bootinfo objects at each invocation of the Multiboot Menu to ensure + that any modifications made by the OS will be included. + + + + + R1--5. + + The Multiboot Menu must provide a + means to enter the currently selected boot option into the desired location + within the boot-device/boot-file or + diag-device/diag-file configuration variables. + + + + + R1--6. + + The platform must provide a means to + delete individual boot options from the + boot-device/boot-file and + diag-device/diag-file configuration variables. + + + + + R1--7. + + The Multiboot Menu must provide an + option for the user to select whether or not to return to the Multiboot Menu on + each boot. + + + + + Firmware Implementation Note: Returning to the Multiboot Menu on + reboot is controlled with the auto-boot? and + menu? configuration variables. +
+ +
+ The f1 Key + The boot process is further controlled by the + auto-boot? and + menu? + OF configuration variables and the f1 key. + + + + R1--1. + + If, after the boot + prompt is displayed, function key f1 is pushed or if + auto-boot? = false and + menu? = false, the firmware must display the + System Management Services (SMS) menu. + + + + + R1--2. + + The default value for the + auto-boot? configuration variable must be + true. + + + + + R1--3. + + The default value for the + menu? configuration variable must be + false. + + + +
+ +
+ The f5 and f6 Keys + If auto-boot? = true, + the commands specified by the boot-command configuration + variable are executed. + If the boot command has no arguments, IEEE + 1275 states that the arguments are determined as follows: + + + + Normal Boot - If the + diagnostic-mode?FCode + function returns false, the boot + device is given by boot-device and the default boot + arguments are given by boot-file. + + + + Diagnostics Boot - If the diagnostic-mode? + FCode function returns true, the boot device is given by + diag-device and the default boot arguments are given by + diag-file. + + + + Platform Implementation Note: + boot-device, + boot-file, + diag-device and + diag-file + are potentially multi-entry strings. The + boot-command searches the + devices specified in boot-device/diag-device in the order + defined by the string for the boot-file/diag-file to load + into system memory. Failure occurs only if no corresponding file is + found/usable on any of the specified devices. + Platforms give the user the ability to control the boot process + further with function keys f5 and f6 (within the window described in + Requirement ). + + + + R1--1. + + If, after the boot prompt is displayed, function key f5 is pushed (and + auto-boot? = true), then + diagnostic-mode? must return true and the + default diagnostic device as defined in Requirements + and + must be used to locate bootable + media. + + + + + R1--2. + + If, after the boot prompt is displayed, function key f6 is pushed (and + auto-boot? = true), then + diagnostic-mode? must return true and + diag-device must be used to locate the boot image, else + if diag-device is empty, then its default as defined in + Requirements and + must be used to locate bootable + media. + + + + + R1--3. + + boot-command + must default to boot <with no + arguments>. + + + + + R1--4. + + boot-device and + diag-device + must default to the first devices of each type that + would be encountered by a search of the device tree. + + + + + R1--5. + + The search order for the + boot-device and + diag-device + defaults must be floppy, cdrom, tape, disk, network. + + + + + R1--6. + + boot-file must + default to <null>. + + + + + R1--7. + + diag-file must + default to diag. + + + + + Note: Requirement + provides a method to invoke stand-alone + diagnostics or to start reinstallation without going through the menus. + Requirement provides a method to boot + with on-line diagnostics. + Software Implementation Note: Pressing either f5 or f6 at the + correct time will cause the contents of diag-file to be + set into the “bootargs” property of the + chosen node of the device tree. The OS can recognize a + diagnostics boot request when it finds the “diag” + substring in “bootargs”. +
+ +
+ CDROM Boot + If the CDROM is the first bootable media found in the devices + listed in the bootlist (boot-device strings), the CDROM + should boot without having to enter optional file specification information or + using the f5 function key normally used for diagnostic boot. This is + accomplished by having the appropriate bootinfo.txt file + specification in the CDROM entry in the bootlist. + + + + R1--1. + + CDROM entries for the default OF + boot-device and + diag-device + configuration variables must include the standard block device + bootinfo.txt file specification as documented in + (\ppc\bootinfo.txt). + + + +
+ +
+ Tape Boot + Boot from tape is defined in . +
+ +
+ Network Boot + The user selects from a list of network devices on the Multiboot + Menu and then selects the boot option. The user may be prompted for network + parameters (IP addresses, etc.) which are set as arguments in + boot-device by the firmware. If the BOOTP protocol is used, the + BOOTREPLY packet contains the network parameters to be used for subsequent + transmissions (see for details of + this process). + + + + R1--1. + + If network boot is selected, firmware + must provide a means for the user to specify or override network parameters. + + + +
+ +
+ Service Processor Boot + In platforms with a service processor, the user may call for a boot + using a local/remote connection to the service processor. The particular port + used for this remote session is sent to the firmware in a status message after + the service processor finishes POST. The port is identified in the + “stdin” + and “stdout” + properties in the chosen node of the OF device tree. +
+ +
+ Console Selection + During the boot process, firmware establishes the console to be + used for displaying status and menus. The following pseudocode describes the + console selection process: + + + + + R1--1. + + If a console has been selected during + the boot process, firmware must set the “stdin” + and “stdout” properties of the + chosen node to the ihandles of this console’s input and + output devices prior to passing control to the OS. + + + +
+ +
+ Boot Retry + For boot failures related to firmware trying to access a boot + device, it is appropriate for the platform to retry the boot operation, + especially in the case of booting from a network device. However, in platforms + which have a service processor, there are several other types of detected + errors for which a reboot retry may be appropriate; for example, checkstops or + loss of communication between firmware and the service processor. To ensure + that the user policy is followed, the coordination and counting of retry + attempts need to be interlocked between the service processor and boot + firmware. The most straightforward way to implement this is to have the boot + firmware inform the service processor of all failed boot attempts, and let the + service processor initiate the system reset (as it also would for checkstops or + hangs). This way the service processor can easily manage the retry count and + initiate a service dial-out if the boot retry limit is exceeded. + + + + R1--1. + + Platform + Implementation: In platforms with service processors, retry of + failed boot operations must be coordinated between boot firmware and the + service processor, to ensure correct counting and handling of reboot retries + according to the service processor configuration reboot policies. + + + +
+ +
+ Boot Failures + Failure to boot occurs only when no corresponding file is found + which is usable on any device specified in the + boot-device, + boot-file, + diag-device, or + diag-file string being used. + + + + R1--1. + + If an error occurs in a boot device + preventing boot from that device, and after all defined retries have occurred, + the failure must be reported as a POST error. + + + + + R1--2. + + If a boot device is physically + missing or lacks a boot record (for example, if a CDROM is not present in a + CDROM drive), then a POST error must be generated for this case, must not + result in the calling out of a boot device as being defective, and must not + result in a hardware service repair action to the device. + + + + + R1--3. + + In Requirement + , if it is not possible for a device to + distinguish between an actual device error, as opposed to a missing device or + boot record, then a POST error must be generated that indicates the possible + causes of the failure to boot from the device, and this POST error must not + imply that a hardware service repair action is required for the boot + device. + + + + + Implementation Note: All device errors of the + same type may be consolidated into a single POST log entry with multiple + location codes listed if needed. This architecture anticipates remote support + center notification of hardware errors. It is the intention that only + definitive boot device errors will be reported as requiring hardware repair. + This is meant to prevent service calls for systems for non-hardware errors such + as no tape in a tape drive. +
+ +
+ Persistent Memory and Memory Preservation Boot + (Storage Preservation Option) + Selected regions of storage, or Logical Memory Blocks (LMBs), may + be optionally preserved across client program boot cycles. These LMBs are + denoted by the presence of the “ibm,preservable” + property in their OF device tree /memory node. + The client program registers the LMB with + the platform using the ibm,manage-storage-preservation + RTAS call if it wants the contents of the storage preserved across client boot + cycles (see also "Managing Storage Preservations" in + specification). The architectural intent of this + facility is to enable client programs to emulate persistent storage. This is + done by a client program registering preservable LMBs. Then, after a subsequent + boot cycle (perhaps due to error or impending power loss) the presence of the + “ibm,preserved-storage” property in the + /rtas node of the device tree indicates to the client + program that it has preserved memory. When the client program detects that it + has booted with preserved storage and that it might be necessary to preserve + the storage for long term, the client program is responsible for copying the + preserved data to long term persistent storage medium, and then clearing the + registration of the preserved LMBs to prevent potential corruption of the + persistent storage medium due to subsequent failures. + Upon reboot after such an operation, the + “ibm,request-partition-shutdown” property is provided + in the /rtas node with a value of 2, indicating that the + client program should save appropriate data and shutdown the partition. + Implementation Note: How areas get chosen to + be marked as preservable is beyond the scope of this architecture. +
+
+ +
+ +
+ Transfer Phase + The image is prepared for execution by checking it against certain + configuration variables; this may result in a reboot. + Once the OS gains control, it may use the CIS interface to learn + about the platform contents and configuration. The OS will generally build its + own version of this configuration data and may discard the OF code and device + tree in order to reclaim the space used by OF. A set of + platform-specific functions are provided by Run-Time Abstraction Services + (RTAS) which is instantiated by the OS invoking the + instantiate-rtas method of the RTAS OF device tree node. + + + + R1--1. + + If any device tree property is presented + that contains a phandle value to identify a certain node in the device tree, + the device tree node so identified must contain the + “ibm,phandle” property, and the value of the + “ibm,phandle” property must match the + phandle value in the property identifying that node. + + + + + R1--2. + + If the “ibm,phandle” + property is present in a device tree + node, the OS must use this value, and not the phandle value returned by a + client interface service, to associate this node with a device tree property + that uses a phandle value to identify this node. + + + + + R1--3. + + An OS must not assume that the + “ibm,phandle” property, if present, corresponds to the + phandle used by or returned by OF client interface services. A phandle value + passed to a client interface service as an argument must have been obtained by + use of a client interface service, and not from a device tree property + value. + + + + + Note: If the “ibm,phandle” + property exists, there are two “phandle” namespaces which must be kept separate. One is that + actually used by the OF client interface, the other is properties in the device + tree making reference to device tree nodes. These requirements are written to + maintain backward compatibility with older FW versions predating these + requirements; if the “ibm,phandle” property + is not present, the OS may assume that any device tree properties which refer + to this node will have a phandle value matching that returned by client + interface services. It will be necessary to have the OSs ready for this + requirement before the firmware implementation. +
+ +
+ Run-Time + During run-time, the OS has control of the system and will have + RTAS instantiated to provide low-level hardware-specific functions. +
+ +
+ Termination + Termination is the phase during which the OS yields control of the + system and may return control to the firmware depending on the nature of the + terminating condition. + +
+ Power Off + If the user activates the system power switch, power may be removed + from the hardware immediately (switch directly controls the power supply) or + software may be given an opportunity to bring the system down in an orderly + manner (power management control of the power switch). + If power is removed from the hardware immediately, the OS will lose + control of the system in an undetermined state. Any I/O underway will be + involuntarily aborted and there is potential for data loss or system damage. A + shut-down process prior to power removal is highly recommended. + In most power managed systems, power switch activation is fielded + as a power management interrupt and the OS (through RTAS) is able to quiesce + the system before removing power. The OS may turn off system power using the + RTAS power-off function. +
+ +
+ Reboot + The OS may cause the system to reset and reboot by calling the RTAS + system-reboot function. +
+
+ +
+ +
+ Firmware + + + + R1--1. + + Platforms must implement OF as defined in . + + + + + R1--2. + + The OF User Interface must include the + following methods as specified in , + Section 7.6:.registers, + to, + load, + go, + state-valid + and init-program. + + + + + R1--3. + + Platforms must implement the Run-Time Abstraction Services (RTAS) as described in + . + + + + + R1--4. + + OSs must use OF and the RTAS functions to be + compatible with all platforms. + + + +
+ +
+ OS Installation + Installation of OSs will be accomplished through the Multiboot Menu + as follows: + + + + The system boots or reboots normally; the user enters the + Multiboot Menu by one of the methods described herein. + + + + The Multiboot Menu presents a list of all installation + devices. + + + + The user selects “install” and an installation + device from the menu; firmware locates the bootinfo object or install image on + the selected installation device. + + + + Firmware will execute init-program and, if a + bootinfo object was found, firmware parses it, replaces the <boot-script> + entities with appropriate values and executes the script. + + + + The OS gets control and selects the target device. + + + + After the install process is determined to be successful, the OS + updates variables such as boot-device, + boot-file, + and boot-command. + + + + The OS adds the bootinfo-nnnn configuration + variable to the NVRAM common system partition. + + + + + + R1--1. + + The Multiboot Menu must provide an option for + OS installation that lists all possible installation devices. + + + + + R1--2. + + After the install process is determined to be successful, the OS + must set boot-device, + boot-file, + and boot-command. + + + + +
+ Tape Install + The OF definition of installation from tape is defined in + . +
+ +
+ Network Install + Network install follows the same process as network boot with the + exception that after installation is complete, the OS will write + boot-device with the target device information. + + + + R1--1. + + If network install is selected, firmware + must provide a means for the user to override default network parameters. + + + +
+
+ +
+ Diagnostics + IBM Power® system platforms may use IBM AIX® Kernel-based + stand-alone diagnostics as their multi-OS common diagnostics package. Since AIX + will run on other vendors’ platforms which might not have permission to + use AIX diagnostics, the “ibm,aix-diagnostics” + property indicates that AIX diagnostics are permitted (see "Root + Node Properties" in ). + + + + R1--1. + + If AIX diagnostics are supported on a + platform, then the firmware for that platform must include the property + “ibm,aix-diagnostics” in the + root node. + + + + + Software Implementation Note: Each OS may implement an OS-specific + run-time diagnostics package, but should, for purposes of consistency, adhere + to the error log formats in . +
+ +
+ Platform Class + The “ibm,model-class” OF property + is defined to classify platforms for planning, marketing, licensing, and + service purposes (see "Root Node Properties" in + ). + + + + R1--1. + + The “ibm,model-class” + property must be included in the + platform’s root node. + + + +
+ +
+ Security + Platforms will provide the user with options for a Power On Password + (POP) and a Privileged Access Password (PAP) and will have some optional + physical security features. + + + + R1--1. + + Platform + Implementation: Platforms must provide a Power On + Password (POP) capability which, when enforced, controls the + user’s ability to power-on and execute the configured boot + sequence. + + + + + R1--2. + + Platform + Implementation: Platforms must provide a Privileged + Access Password (PAP) capability which, when enforced, controls the + user’s ability to alter the boot sequence using f5/f6, and to enter SMS + and the Multiboot Menu. + + + + + R1--3. + + Platform + Implementation: If the PAP is absent or <NULL>, but the POP is + non-<NULL>, then the POP must act as the PAP. + + + + + R1--4. + + Platform + Implementation: Platforms must accept the PAP as a valid response to + a request to enter the POP. + + + + + R1--5. + + Platform Implementation: If + there is a key switch implemented with a secure position, the + system must not complete the boot process regardless of the state of POP and + PAP when the switch is in this position. + + + + + R1--6. + + Platform + Implementation: If a key switch is implemented and the switch is in + the maintenance (service) position, the POP and PAP must + not be enforced. + + + + + R1--7. + + Platform + Implementation: Platforms, except for rack mounted systems, must + provide a locking mechanism as an option which prevents the removal of the + covers. + + + + + R1--8. + + Platform Implementation: Platforms, except for rack mounted systems, must + provide a tie-down mechanism as an option which prevents the physical removal + of the system from the premises. + + + + + R1--9. + + Platform Implementation: Passwords and keyswitch positions must be + implemented in a manner that makes their values accessible to both OF and the + service processor. + + + + + R1--10. + + Platform Implementation: The OF configuration variable + security-password must be maintained to be equivalent to the + Privileged Access Password (PAP). + + + + + R1--11. + + Platform + Implementation: If the PAP and security-password + are absent or <NULL>, security-mode must be set to + “none”, otherwise security-mode + must be set to “command”. + + + + + R1--12. + + Platform Implementation: If security-mode + is set to any value other than “none” (such as + “command” or “full”), + it must be treated as security-mode=command. + Platform Implementation Notes: + + + + As defined here, the PAP and security-password are + stronger than as specified in IEEE 1275 for + security-mode = command in that + they are required for any command line operations, including + go and + boot. The PAP and + security-password are not required to boot the system with default + parameters, however, and in this sense the intent of + security-mode = command is achieved. There is currently no + implementation of + security-mode = full. + + + + If a service processor is provided, the requirements relating to + passwords are applicable in the service processor environment. Service + processor documentation refers to the POP as the General User Password and the + PAP as the Privileged User Password. + + + + + +
+ +
+ Endian Support + LoPAR platforms operate with either Big-Endian (BE) or Little-Endian + (LE) addressing. In Big-Endian systems, the address of a word in memory is the + address of the most significant byte (the “big” end) of the word. + Increasing memory addresses will approach the least significant byte of the + word. In Little-Endian (LE) addressing, the address of a word in memory is the + address of the least significant byte (the “little” end) of the + word. + All data structures used for communicating between the OS and the + platform (for example, RTAS and hypervisor calls) are Big-Endian format, unless + otherwise designated. + + + + R1--1. + + Platforms must by default operate with Big-Endian addressing. + + + + + R1--2. + + Platforms that operate with Little-Endian addressing must make + System memory appear to be in Little-Endian format to all entities in the + system that may observe that image, including I/O. + + + + + Platform Implementation Notes: + + + + Some hardware (for example, bridges, memory controllers, and + processors) may have modal bits to allow those components to be used in + platforms which operate in Little-Endian mode. In this case, the hardware or + firmware will need to set those bits appropriately. + + + + Requirement may have an + impact on the processor chosen for the platform. + + +
+ +
+ 64-Bit Addressing Support + A 64-bit-addressing-capable platform is defined as one capable of + supporting System Memory and Memory Mapped I/O (MMIO) configured above 4 GB + (greater than 32 bits of real addressing). This means that all hardware + elements in the topology down to the Host Bridges are capable of dealing with a + real address range greater than 32 bits, and all Host Bridges are capable of + providing a translation mechanism for translating 32-bit I/O bus DMA addresses. + All platforms compliant with IBM + Power Architecture Platform Requirements (PAPR) version 2.3 and beyond are required to be + 64-bit-addressing-capable. + A 64-bit-addressing-aware OS is an OS that can deal with a real + address space larger than 4GB. It must handle the 64-bit processor page table + format (required of all OSs), and must understand Host Bridge mechanisms and + Host Bridge OF methods for supporting System Memory greater than 4 GB. All OSs + compliant with IBM + Power Architecture Platform Requirements (PAPR) version 2.3 and beyond are required to be + 64-bit-addressing-aware. +
+ +
+ Minimum System Requirements + This section + summarizes the minimum hardware and functionality required for LoPAR + compliance. + The + term portable is used in this document to describe that class of systems that + is primarily battery powered and is easily carried by its user. + The term personal is used in this document to describe that class of systems that + is bound to a specific work area due to its size or power source, and whose use + is generally restricted to a single direct user or a small set of users. + The term server is used in this document to describe that class of systems that + supports a multi-user environment, providing a particular service such as file + storage, software repository, or remote processing capability. + Each of these classes may have unique requirements due to the way it + is used or which OS it generally employs and, for this reason, the requirements + in this document my have qualifiers based on the type of system being + developed. + + + + R1--1. + + (Requirement moved to + ) + + + + + R1--2. + + A means of attaching a diskette drive must be + provided (may be through a connector or over a network) and the drive must have + the following characteristics: + + + + Media sense: Implementations must allow polling of the drive up to + 100x per second to determine the presence of media in the drive. + + + + Must accept media of type: 3.5" 1.44 MB MFM + + + + + + + + R1--3. + + A means of attaching a CD-ROM drive must be + provided (may be through a connector or over a network) and the drive must have + the following characteristics: + + + + ISO9600 compliant + + + + Supports multi-session + + + + + + + + R1--4. + + When a keyboard is provided, it must be + capable of generating at least 101 scan codes. + + + + + R1--5. + + When a mouse is provided, it must have at + least two buttons. + + + + + R1--6. + + The capability to generate a tone must be provided on portable + and personal platforms, and on server platforms which are not housed in rack + enclosures. + + + + + R1--7. + + A Real Time Clock (RTC) must be + provide which must have the following characteristics: + + + + Is non-volatile + + + + Runs continuously + + + + Has a resolution of at least one second + + + + + + +
+ +
+ Options and Extensions + Options are features that are covered by this architecture, but are + not necessarily required to be present on a given platform. Platforms that + implement options are required to conform to the definitions in this + architecture, so that an aware OS environment can recognize and support them. + Some options may be required on some platforms. Refer to + for the disposition of currently defined + options, including requirements for implementation of some of these options on + some platforms. Note that in this table, “optional” does not mean + “not required;” see the description column of the table for more + information. + An extension is a feature that is added to this architecture and is + required on all platforms developed after a specified effective date. + Options and extensions will normally need to be dormant or invisible + in the presence of a non-aware OS environment. In general, this means that they + come up passively; that is, they are initialized to an inactive state and + activated by an aware OS. + + + + R1--1. + + Extensions and options must come up + passively unless otherwise specified in this architecture. + + + + + R1--2. + + Extensions and options that affect the OS + interface to the platform must be identified, when present, through some + architected means, such as OF device tree properties. + It is the responsibility of the product development teams to keep the + “usage” columns of up + to date, + + + + + + LoPAR Optional Features + + + + + + + + + + Option Name + + + + + Usage + + + + + Description + + + + + + + Base + + + + + IBM Server + + + + + + + Usage Legend : NS = + Not Supported; O = Optional (see also Description); OR = Optional but + Recommended; R = Required; SD = See Description + + + + + + + + Symmetrical Multiprocessing (SMP) + + + O + + + R + + + Required on MP platforms. + + + + + Multiboot + + + O + + + O + + + Required to support multiple versions of an OS. + + + + + PCI Hot Plug DR + + + O + + + OR + + + See for more information. + + + + + Logical Resource Dynamic Reconfiguration (LRDR) + + + O + + + OR + + + . + + + + + Enhanced I/O Error Handling (EEH) + + + OR SD + + + R + + + See and + . Requirements for platforms that implement + LPAR, regardless of the number of partitions, are contained in + . + + + + + Error Injection (ERRINJCT) + + + O + + + R + + + Required of servers which implement the EEH option. + + + + + Logical Partitioning (LPAR) + + + O + + + R + + + See . + + + + + Bridged-I/O EEH Support + + + O + + + R + + + EEH support for I/O structures which contain PCI to PCI + bridges or PCI Express switches. See . + Required if EEH is supported. + + + + + PowerPC External Interrupt + + + R + SD + + + R + SD + + + May be virtualized; See . + + + + + EXTI2C + + + O + + + O + + + See for more information on + support of I2C buses. + + + + + Firmware Assisted NMI (FWNMI) + + + R + + + R + + + . + + + + + System Parameters + + + R + + + R + + + . + + + + + Capacity on Demand (CoD) + + + O + + + O + + + . + + + + + Predictive Failure Sparing + + + O + + + O + + + . + + + + + Converged Location Codes + + + R + + + R + + + The Converged Location Codes option is required on all + platforms being developed. and + Requirement . + + + + + Shared Processor LPAR (SPLPAR) + + + O + + + O + + + . + + + + + Reliable Command/Response Transport + + + O + + + O + + + . + + + + + Logical Remote DMA (LRDMA) + + + O + + + O + + + . + + + + + Interpartition Logical LAN (ILLAN) + + + O + + + O + + + . + + + + + ILLAN Backup Trunk Adapter + + + O + + + O + + + . + + + + + ILLAN Checksum Offload Support + + + O + + + O + + + . + + + + + Checksum Offload Padded Packet Support + + + O + + + O + + + See . + + + + + Virtual SCSI (VSCSI) + + + O + + + O + + + . + + + + + Virtual FC (VFC) + + + O + + + O + + + See . + + + + + Storage Preservation + + + O + + + NS + + + and "Managing + Storage Preservations" in specification. + + + + + Client Vterm + + + O + + + R + + + Required of all platforms that support LPAR, otherwise not + implemented. Provides a virtual “Asynchronous” IOA for connecting + to a server Vterm IOA, the hypervisor, or HMC (for example, to a virtual + console). See for more + information. + + + + + Server Vterm + + + O + + + O + + + Allows a partition to serve a partner partition's client + Vterm IOA. + + + + + NUMA + Associativity Information + + + OR + + + OR + + + See . + + + + + Performance Tool Support + + + O + + + NS + + + Provides access to platform-level facilities for + performance tools running in a partition on an LPAR system. See + . + + + + + MSI (Message Signaled Interrupt) + + + SD + + + SD + + + Required for all platforms that support PCI Express. + + + + + ILLAN Buffer Size Control + + + O + + + O + + + See . + + + + + Virtual Management Channel (VMC) + + + O + + + O + + + See . + + + + + Partition Suspension + + + O + + + O + + + Requires the Logical Partitioning, LRDR, and Update OF Tree options. + + + + + Partition Hibernation + + + O + + + O + + + Allows a partition to sleep for an extended period; during + this time the partition state is stored on secondary storage for later + restoration. Requires the Partition Suspension, ILLAN, and VASI options. + + + + + Partition Migration + + + O + + + O + + + Allows the movement of a logical partition from one + platform to another; the source and destination platforms cooperate to minimize + the time that the partition is non-responsive. Requires the Partition + Suspension, ILLAN, and VASI options. + + + + + Thread Join + + + O + + + O + + + Allows the multi-threaded caller to efficiently establish + a single threaded processing environment. + + + + + Update OF Tree + + + O + + + O + + + Allows the caller to determine which device tree nodes + changed due to a massive platform reconfiguration as happens during a partition + migration or hibernation. + + + + + Virtual + Asynchronous Services Interface (VASI) + + + O + + + O + + + Allows an authorized virtual server partition (VSP) to + safely access the internal state of a specific partition. See + for more details. Requires the Reliable + Command/Response Transport option. + + + + + Virtualized Real Mode Area (VRMA) + + + O + + + O + + + Allows the OS to dynamically relocate, expand, and shrink + the Real Mode Area. + + + + + TC + + + O + + + O + + + Allows the OS to indicate that there is no need to search + secondary page table entry groups to determine a page table search has failed. + See for more details. + + + + + Configure Platform Assisted Kernel Dump + + + O + + + O + + + Allows the OS to register and unregister kernel dump + information with the platform. + + + + + I/O Super Page + + + O + + + OR + + + Allows the OS to specify I/O pages that are greater than 4 KB in length. + + + + + Subordinate CRQ (Sub-CRQ) Transport + + + O + + + O + + + Support for the Subordinate CRQs as needed by some Virtual + IOAs. See . + + + + + Cooperative Memory Over-commitment (CMO) + + + O + + + O + + + The CMO option allows for partition participation in the + over-commitment of logical memory by the platform. See + . + + + + + Partition Energy Management (PEM) + + + O + + + O + + + Allows the OS to cooperate with platform energy + management. See . + + + + + Multi-TCE-Table (MTT) + + + O + + + O + + + Support for the Multi-TCE-Table Option. See + . + + + + + Virtual Processor Home Node (VPNH) + + + O + + + O + + + Provides substantially consistent virtual processor + associativity in a shared processor LPAR environment. See + . + + + + + IBM Active Memory™ Compression + + + O + + + O + + + Allows the partition to perform active memory compression. + + + + + Virtual Network Interface Controller (VNIC) + + + O + + + O + + + See . + + + + + Expropriation Subvention Notification + + + O + + + O + + + Allows OS notification of a cooperative memory + overcommitment page fault see . + + + + + Boost Modes + + + O + + + O + + + Allows the platform to communicate and the availability of + performance boost modes along with any ability to manage the same. See + + + + + + Platform Resource Reassignment + Notification (PRRN) + + + O + + + O + + + + + + + + + + Dynamic DMA Windows (DDW) + + + O + + + O + + + Allows the creation of DMA Windows above 4 GB. See + . + + + + + Universally Unique Partition Identification Option (UUID) + + + O + + + O + + + + + + + + + + Platform Facilities Option (PFO) + + + O + + + O + + + See for more information. + + + + + Extended Cooperative Memory Overcommittment (XCMO) + + + O + + + O + + + Introduces additional cooperative memory overcommitment + functions see + + + + +
+
+ +
+ IBM LoPAR Platform Implementation Requirements + The tables in this section detail specific product requirements which + are not defined as an “option” in this architecture. The intent + is to define base requirements for these products, over and beyond what is + specified in and elsewhere in this + architecture. + In addition, any options that are unique to specific implementations + (that is, not general usage), and which do not appear in + , are listed in this section. + It is the responsibility of the product development teams to keep + these tables up to date. + +
+ IBM Server Requirements + This section talks to the requirements for IBM LoPAR Compliant + server platforms. + + + + R1--1. + + For all IBM LoPAR Compliant + Platforms: The platform must implement the options marked as + “required” in the IBM Server column of + and the additional functions as indicated + in (that is, the “Base” + column of is not sufficient). + + + + + + IBM Server Required Functions and Features + + + + + + + + + Function/Feature + + + + + Effective Date + + + + + Description + + + + + + + + All IOA device drivers EEH enabled or EEH safe + + + 6/2004 + + + Required even for systems running with just one partition. + + + + +
+ It is the responsibility of the product development teams to keep + up to date. +
+
+ +
+ Behavior for Optional and Reserved Bits and Bytes + Behavior of the OSs and platforms for bits and bytes in this + architecture that are marked as reserved or optional are defined here. + + + + R1--1. + + Bits and bytes which are marked as + “optional” by this architecture and which are not implemented by + the platform must be ignored by the platform on a Store + and must be returned as 0’s on a Load, including + the reserved or optional bits of a partially implemented field. + + + + + R1--2. + + Bits and bytes which are marked as + “reserved” by this architecture must be ignored by the platform + on a Store and must be returned as 0’s on a + Load, except that bits that are marked as + “reserved” and which were previously defined by the architecture + maybe be treated appropriately by legacy hardware (such bits in this + architecture will state the value that software must use henceforth). + + + + + R1--3. + + Bits and bytes marked as + “reserved” must be set to 0 by the OS on a + Store, except as otherwise defined by the architecture, and must be + ignored on a Load. + + + +
+ +
diff --git a/Platform/figures/PAPR-10.gif b/Platform/figures/PAPR-10.gif new file mode 100644 index 0000000000000000000000000000000000000000..7b9de73e8446b0892152018bdd9566fae03595e9 GIT binary patch literal 67958 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�X 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 Yx4-`l@PG?^-~=zY!4Hn`JO=~-JFJ}tg#Z8m literal 0 HcmV?d00001 diff --git a/Platform/figures/PAPR-11.gif b/Platform/figures/PAPR-11.gif new file mode 100644 index 0000000000000000000000000000000000000000..2673bcdfc9435b41e32d2ca22e8edadc4e3e01c2 GIT binary patch literal 136610 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
h-*<%rt!TRprNmQ%DL95R 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 A(EtDd literal 0 HcmV?d00001 diff --git a/Platform/figures/PAPR-14.gif b/Platform/figures/PAPR-14.gif new file mode 100644 index 0000000000000000000000000000000000000000..7a65a00129860555dfa7d4402c374502656ebca1 GIT binary patch literal 65445 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 CH(;y) literal 0 HcmV?d00001 diff --git a/Platform/figures/PAPR-15.gif b/Platform/figures/PAPR-15.gif new file mode 100644 index 0000000000000000000000000000000000000000..159b8549c0d58d147120bb6caa9dac89b4e6628f GIT binary patch literal 28606 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
+ CMO Terms + The LoPAR Cooperative Memory Over-commitment option (CMO) defines + terms as presented in + . + + + CMO Terms + + + + + + + Term + + + Definition + + + + + CMO Page Size + + + Page size as determined by the hypervisor. CMO page size is + expressed as the power of 2 of the page size. For example, a 4K + page size is represented by the value of 12 (4K = 2 + 12). + + + + + Primary Paging Service Partition + + + The primary paging service partition identifies the primary + VIOS which provides access to paging services and devices for + partitions participating in CMO. The primary paging service + partition value is the partition number of the VIOS. + + + + + Secondary Paging Service Partition + + + The secondary paging service partition identifies the + secondary VIOS in a redundant Paging Service Partition + configuration. If the hypervisor detects a problem with the + primary VIOS, it fails over to the secondary VIOS. The secondary + paging service partition value is the partition number of the + secondary VIOS. + + + + +
+
+ +
+ Key Words And Values + + defines the key words and the + associated legal values that will be returned in the ASCII NULL terminated + string when the parameter token value of 44 (CMO characteristics) is + specified on the + ibm,get-system-parameter RTAS call. The key word and + value is separated by an ASCII equal (“=”). Each key word, + value pair is delimited by an ASCII comma in the string. The numerical + value of the characteristic corresponding to the key word is the decimal + number that corresponds to the numeric characters in the value part of the + key word, value pair. + + + CMO Characteristics + + + + + + + + + Characteristics + + + Key Word + + + Values + + + Notes + + + + + CMO Page Size + + + CMOPageSize + + + 1 - 64 + + +   + + + + + Primary Paging Service Partition + + + PrPSP + + + -1 through N + + + Set to -1 when the partition is not in CMO mode (i.e. is a + dedicated memory partition) + + + + + Secondary Paging Service Partition + + + SecPSP + + + -1 through N + + + + +
+
+ diff --git a/RTAS/ch_error_codes.xml b/RTAS/ch_error_codes.xml new file mode 100644 index 0000000..5f74a7d --- /dev/null +++ b/RTAS/ch_error_codes.xml @@ -0,0 +1,1272 @@ + + + + + Error Codes + +
+ Displaying Codes on the Standard Operator Panels + + + + + R1--1. + + Platform Implementation: Platforms must display + firmware progress codes (4 hex digits) on the operator panel display. On + 2x16 LCD displays, the progress codes are displayed left-justified on the + first line. + + + + + R1--2. + + Platform Implementation: Platforms must display + firmware error codes (8 hex digits) on the system console (graphic or + tty), and left-justified on the first line of a 2x16 LCD operator panel + display (if available). + + + + + R1--3. + + Platform Implementation: When a platform displays + firmware error codes, associated location codes must be displayed on the + following line on the system console (graphic or tty), and left-justified + on the second line of a 2x16 LCD operator panel display (if + available). + + + + + + The following describes in more detail the standard platform usage + of operator panel LEDs or LCDs for the display of firmware progress and + error codes. + + + + + Progress codes: Progress codes + from the system firmware and + service processor firmware are 4 hex digits in the range from 0x8000 + through 0xFFFF. Codes are displayed in the 4 character positions of a 1x4 + LED, or left justified in the first line of a 2x16 LCD. Subsequent + progress codes are displayed on top of (overlaying) the previous one. If + the system “hangs”, the last displayed progress code is left + on the display. + + + + + Error codes: Error codes are 8 + hex digits, as defined in + . These codes are displayed by + either boot ROM Power On Self Test (POST) or the service processor. If a + critical error is detected which prevents a successful boot or results in + system halt condition, the error code will be displayed left justified on + the first line of a 2x16 LCD. The error code is left on the LCD until the + system is reset or powered down. Error codes are not displayed on the + operator panel of platforms with only a 4-digit LED. On all platforms, + however, POST error codes are displayed on any system console (graphic or + tty). For non-critical errors where the system can boot and operate + normally or in a degraded mode, the associated error codes are not + displayed, but are reported to the OS via the POST error log and the RTAS + event-scan service. + + + + + Location Codes: Location codes + describe the physical location of + the most probable failing part associated with an error code. When an + error code is displayed on the first line of a 2x16 LCD, the location + code, if known, is displayed left justified on the second line. The + location code will remain on the LCD along with the error code until the + system is reset or powered down. Location codes for POST errors are also + displayed on any system console (graphic or tty), on the next line below + the error code. + + + + +
+ +
+ Firmware Error Codes + + The error code is an 8-character (4-byte) hexadecimal code produced + by firmware to identify the potential failing function or FRU in a + system. It consists of 5 source code characters and 3 reason code + characters. Individual characters within the error code have specific + field definitions, as defined in the following tables. + + + + + R1--1. + + Platform Implementation: To indicate the occurrence + of a critical platform error, platforms must display (either on an + operator panel or console) an 8-digit hex error code as defined in + and + . + + + + + + + + Table 155. Service Reference Code (SRC) Field Layout + + + + + + + + + + + + + + Source Code + + + + + Reason Code + + + + + + + + + Byte 0 + + + + + Byte 1 + + + + + Byte 2 + + + + + Byte 3 + + + + + + S1 + + + S2 + + + S3 + + + S4 + + + S5 + + + R1 + + + R2 + + + R3 + + + + +
+ + + Table 156. Service Reference Code (SRC) Field + Descriptions + + + + + + + + Field + + + + + Description + + + + + + + + S1 + + + Maintenance Package Source that produced the SRN + 0: Reserved + 1: Reserved + 2: POST, Firmware + 3: BIST + 4: Service processor, base system controller, etc. + 5: Reserved (potentially for use by AIX + Diagnostics) + 8: Product-Specific Service Guide, MAPs + 9: Reserved (potentially for use by the Problem Solving + Guide) + A-F: Reserved for future extension + + + + + S2 + + + Where applicable, use the lower nibble of the + + + base class code for the IOA definition (see + ). Only 00 to 0C are + currently defined in Revision 2.1, therefore the high nibble is + always zero. (There is a potential exposure that the high + nibble will be defined in the future, but currently there are + 13 base classes defined which include every device class, with + 3 remaining characters for future extension by the PCI SIG. + Therefore the exposure is in the far future.) For non-PCI + devices, use base class 0 to extend the definition (see + ). + + + + + S3-S4 + + + Where applicable, use the + + + subclass code for IOA definition (see + ). Also, extend the + definition to include non-PCI devices where it is not fully + utilized by PCI specification (see + ). + + + + + S5 + + + Unique version of the device/FRU type for a particular + product + + + + + R1 + + + Device/FRU unique failure reason codes. + For POST: assigned by Firmware Developer. + For AIX Diagnostics (S1 = 5, not currently + supported): + 1-7: Use in combination with R2,R3 for diagnostic test + failure when maximum isolation was obtained. + 8-9: Use in combination with R2,R3 for diagnostic test + failure when maximum isolation was NOT obtained. + A: Log analysis of POST error log + B: Log analysis of machine check or checkstop error + log + C: Log analysis of AIX device driver error log + D: diagnostic detected missing resource + E-F: Reserved + For others: assigned by respective developers. + + + + + R2-R3 + + + Device/FRU unique failure reason codes. + For POST: assigned by Firmware Developer + For others: assigned by respective developers. + + + + +
+ + + Table 157. Current PCI Class Code Definition + + + + + + + + + PCI Base Class (lower + nibble)S2 + + + + + PCI Sub-ClassS3-S4 + + + + + Description + + + + + + + + 0 + + + Devices that were built before the class code field was + defined + + + + + 00 + + + All currently implemented IOAs except VGA-compatible + IOAs. + + + + + 01 + + + VGA-compatible IOAs. + + + + + 1 + + + Mass storage controller. + + + + + 00 + + + SCSI bus controller. + + + + + 01 + + + IDE controller. + + + + + 02 + + + Floppy disk controller. + + + + + 03 + + + Intelligent Peripheral Interface (IPI) bus + controller. + + + + + 04 + + + Redundant Array of Independent Disks (RAID) + controller. + + + + + 80 + + + Other mass storage controller. + + + + + 2 + + + Network controller. + + + + + 00 + + + Ethernet controller. + + + + + 01 + + + Token Ring controller. + + + + + 02 + + + FDDI controller. + + + + + 03 + + + ATM controller. + + + + + 80 + + + Other Network controller. + + + + + 3 + + + Display controller. + + + + + 00 + + + VGA-Compatible controller. + + + + + 01 + + + Extended Graphics Array (XGA) controller. + + + + + 80 + + + Other display controller. + + + + + 4 + + + Multimedia device + + + + + 00 + + + Video device + + + + + 01 + + + Audio device + + + + + 80 + + + Other multimedia device + + + + + 5 + + + Memory controller. + + + + + 00 + + + RAM + + + + + 01 + + + Flash + + + + + 80 + + + Other memory controller. + + + + + 6 + + + Bridge IOAs. + + + + + 00 + + + Host bridge + + + + + 01 + + + Reserved + + + + + 02 + + + Reserved + + + + + 03 + + + Reserved + + + + + 04 + + + PCI-to-PCI bridge + + + + + 05 + + + Reserved + + + + + 06 + + + Reserved + + + + + 07 + + + Reserved + + + + + 80 + + + Other bridge device. + + + + + 7 + + + Simple communication controllers. + + + + + 00 + + + Serial controllers. + + + + + 01 + + + Parallel port. + + + + + 80 + + + Other communication controllers. + + + + + 8 + + + Generic system peripherals + + + + + 00 + + + PIC + + + + + 01 + + + DMA Controller. + + + + + 02 + + + System timer + + + + + 03 + + + Real-Time Clock (RTC) controller + + + + + 80 + + + Other system peripherals + + + + + 9 + + + Input devices + + + + + 00 + + + Keyboard controller + + + + + 01 + + + Digitizer (pen). + + + + + 02 + + + Mouse controller + + + + + 80 + + + Other input controllers. + + + + + A + + + Docking stations + + + + + 00 + + + Generic docking station + + + + + 80 + + + Other type of docking station + + + + + B + + + Processors + + + + + 20 + + + PA compliant (PowerPC and successors) + + + + + 40 + + + Co-processor + + + + + C + + + Serial bus controllers + + + + + 03 + + + Universal Serial Bus (USB) + + + + + 04 + + + Fibre Channel + + + + +
+ + + Table 158. S2-S3-S4 Definition for Devices/FRUs not Defined in + the PCI Specification + + + + + + + + + Base ClassS2 + + + + + Sub-ClassS3-S4 + + + + + Description + + + + + + + + 0 + + + 10 + + + AC Power + + + + + 11 + + + DC Power + + + + + 20 + + + Temperature Related Problem + + + + + 21 + + + Fans + + + + + 30-3x + + + Cables + + + + + 40-4x + + + Terminators + + + + + 50 + + + Operator panels + + + + + 60-6x + + + Reserved + + + + + 70-7x + + + Reserved + + + + + 90-9x + + + Reserved + + + + + A0 + + + Boot firmware Heartbeat + + + + + B0 + + + O/S Heartbeat + + + + + D0 + + + Unknown device + + + + + E0 + + + Security + + + + + 1 + + + A0 + + + SCSI Drives (generic) + + + + + B0 + + + IDE Drives + + + + + C0 + + + RAID Drives + + + + + D0 + + + SSA Drives + + + + + E0 + + + Tapes SCSI + + + + + E1 + + + Tapes IDE + + + + + ED + + + SCSI Changer + + + + + EE + + + Other SCSI Device + + + + + EF + + + Diskette drive + + + + + F0 + + + CDROM SCSI + + + + + F1 + + + CDROM IDE + + + + + F2 + + + Read/Write Optical SCSI + + + + + F3 + + + Read/Write Optical IDE + + + + + F4-FF + + + Reserved for other media devices + + + + + 5 + + + A0 + + + L2 Cache Controller including integrated SRAM + + + + + A1 + + + L2 Cache SRAM + + + + + A8 + + + NVRAM + + + + + A9 + + + CMOS + + + + + AA + + + Quartz/EEPROM + + + + + B0-Bx + + + Memory cards + + + + + Cyy + + + Memory DIMMs (yy = memory PD bits) + + + + + 7 + + + A0 + + + I2C bus + + + + + 8 + + + A0 + + + Power Management Functions + + + + + 9 + + + A0-Ax + + + Keyboards + + + + + B0-Bx + + + Mouse(s) + + + + + C0-Cx + + + Dials + + + + + D0 + + + Tablet + + + + + D1-Dx + + + Reserved for other input devices + + + + + B + + + A0 + + + Service processor + + + + +
+ +
+ +
diff --git a/RTAS/ch_firmware_dump.xml b/RTAS/ch_firmware_dump.xml new file mode 100644 index 0000000..7d2a22b --- /dev/null +++ b/RTAS/ch_firmware_dump.xml @@ -0,0 +1,4072 @@ + + + + + Firmware Assisted Dump Data Format + + This Appendix documents the dump data format, in support of the + Configure Platform Assisted Kernel Dump option in + . + +
+ Register Save Area + The register save area is an area in the partition’s memory + used to preserve the registers for the active CPUs during a firmware + assisted dump. The location and size of this area is specified by the + partition when firmware assisted dump. The minimum size will be sent to the + partition in the PFDS KDUMP node. + The register save is a semi-free format list of registers for each + CPU. Each list of registers for a CPU starts with “CPUSTRT” and + ends with “CPUEND”. + NumCpusOffset should be used to access the data to allow for + additional fields to be added without affecting compatibility. + + Notes: + + + + + Only CPUs that are online at the start of the Firmware Assisted + Dump will have their register data saved. + + + + Each group of GPRs, FPRs, and VRs will be listed in ascending + array index (and ASCII identifier) sorted order with no other interleaving + registers. Further, registers whose value spans multiple doublewords + (currently only VR and VSR array elements) will be listed in high to low + sorted order with no other interleaving values. All other registers are not + required to be in any specific order (To make debug easier they will most + likely be placed in ascending ASCII identifier order) + + + + + Register Save Area Format + + + + + + + + + + + Offset + + + + + Length (Bytes) + + + + + Name + + + + + Value + + + + + Description + + + + + + + + 0x00 + + + 0x8 + + + Magic Number + + + 0x5245475341564500 “REGSAVE” + + + Identifies this area + + + + + 0x08 + + + 0x4 + + + Version + + + 0x0 + + + Current version + + + + + 0x0C + + + 0x4 + + + NumCpusOffset + + + 0x1C + + + Offset to NumCpus field + + + + + 0x10 + + + 0xC + + + Padding + + + 0x0 + + + Must be initialized to 0 + + + + + 0x1C + + + 0x4 + + + NumCpus + + + Actual number of CPUs + + + Number of CPUs (not the number of entries) + + + + + 0x20 + + + 0x10 + + + RegEntry + + + “CPUSTRT” + + +   + + + + + 0x30 + + + 0x10 + + + RegEntry + + + <various register values> + + +   + + + + + ... + + +   + + +   + + +   + + +   + + + + + 0x?? + + + 0x10 + + + RegEntry + + + “CPUEND” + + +   + + + + + 0x?? + + + 0x10 + + + RegEntry + + + “CPUSTRT” + + +   + + + + + ... + + +   + + +   + + +   + + +   + + + + +
+   + + RegEntry Format + + + + + + + + + + + Offset + + + + + Length (Bytes) + + + + + Name + + + + + Value + + + + + Description + + + + + + + + 0x0 + + + 0x8 + + + RegIdentifier + + + See Below + + + ASCII, Padded with binary zeros + + + + + 0x08 + + + 0x8 + + + RegData + + +   + + + Register Data + + + + +
+   + + CPUSTRT and CPUEND have the following format + + + + + + + + 8 Byte Identifier + + + 4 Byte Reserved + + + 4 Byte Logical CPU ID + + + + +
+   + + 8-Byte RegEntries + + + + + + + 8 Byte Identifier + + + 8 Byte Register Value + + + + +
+   + + 4-Byte RegEntries + + + + + + + + 8 Byte Identifier + + + 4 Byte Reserved + + + 4 Byte Register Value + + + + +
+   + + Identifiers Supported in Version 0x0 of the + Table + + + + + + + + + Identifier (Hex) + + + + + Identifier (ASCII) + + + + + Description + + + + + + + + 0x4350555354525400 + + + CPUSTRT + + +   + + + + + 0x435055454E440000 + + + CPUEND + + +   + + + + + 0x41434F5000000000 + + + ACOP + + + Available Coprocessor Register + + + + + 0x414D520000000000 + + + AMR + + + Authority Mask Register + + + + + 0x4346415200000000 + + + CFAR + + + Come From Address Register + + + + + 0x4352000000000000 + + + CR + + + Condition Register + + + + + 0x4354520000000000 + + + CTR + + + Count Register + + + + + 0x4354524C00000000 + + + CTRL + + + Control Register + + + + + 0x4441425200000000 + + + DABR + + + Data Address Breakpoint Register + + + + + 0x4441425258000000 + + + DABRX + + + DABR Extended + + + + + 0x4441520000000000 + + + DAR + + + Data Address Register + + + + + 0x4445430000000000 + + + DEC + + + Decrementer + + + + + 0x4453435200000000 + + + DSCR + + + Depth Stream Control Register + + + + + 0x4453495352000000 + + + DSISR + + + Data Storage Interrupt Status Register + + + + + 0x4650523030000000 + + + FPR00 + + + Floating Point Register 0 + + + + + 0x4650523031000000 + + + FPR01 + + + Floating Point Register 1 + + + + + 0x4650523032000000 + + + FPR02 + + + Floating Point Register 2 + + + + + 0x4650523033000000 + + + FPR03 + + + Floating Point Register 3 + + + + + 0x4650523034000000 + + + FPR04 + + + Floating Point Register 4 + + + + + 0x4650523035000000 + + + FPR05 + + + Floating Point Register 5 + + + + + 0x4650523036000000 + + + FPR06 + + + Floating Point Register 6 + + + + + 0x4650523037000000 + + + FPR07 + + + Floating Point Register 7 + + + + + 0x4650523038000000 + + + FPR08 + + + Floating Point Register 8 + + + + + 0x4650523039000000 + + + FPR09 + + + Floating Point Register 9 + + + + + 0x4650523130000000 + + + FPR10 + + + Floating Point Register 10 + + + + + 0x4650523131000000 + + + FPR11 + + + Floating Point Register 11 + + + + + 0x4650523132000000 + + + FPR12 + + + Floating Point Register 12 + + + + + 0x4650523133000000 + + + FPR13 + + + Floating Point Register 13 + + + + + 0x4650523134000000 + + + FPR14 + + + Floating Point Register 14 + + + + + 0x4650523135000000 + + + FPR15 + + + Floating Point Register 15 + + + + + 0x4650523136000000 + + + FPR16 + + + Floating Point Register 16 + + + + + 0x4650523137000000 + + + FPR17 + + + Floating Point Register 17 + + + + + 0x4650523138000000 + + + FPR18 + + + Floating Point Register 18 + + + + + 0x4650523139000000 + + + FPR19 + + + Floating Point Register 19 + + + + + 0x4650523230000000 + + + FPR20 + + + Floating Point Register 20 + + + + + 0x4650523231000000 + + + FPR21 + + + Floating Point Register 21 + + + + + 0x4650523232000000 + + + FPR22 + + + Floating Point Register 22 + + + + + 0x4650523233000000 + + + FPR23 + + + Floating Point Register 23 + + + + + 0x4650523234000000 + + + FPR24 + + + Floating Point Register 24 + + + + + 0x4650523235000000 + + + FPR25 + + + Floating Point Register 25 + + + + + 0x4650523236000000 + + + FPR26 + + + Floating Point Register 26 + + + + + 0x4650523237000000 + + + FPR27 + + + Floating Point Register 27 + + + + + 0x4650523238000000 + + + FPR28 + + + Floating Point Register 28 + + + + + 0x4650523239000000 + + + FPR29 + + + Floating Point Register 29 + + + + + 0x4650523330000000 + + + FPR30 + + + Floating Point Register 30 + + + + + 0x4650523331000000 + + + FPR31 + + + Floating Point Register 31 + + + + + 0x4650534352000000 + + + FPSCR + + + Floating Point Status and Control Register + + + + + 0x4750523030000000 + + + GPR00 + + + General Purpose Register 0 + + + + + 0x4750523031000000 + + + GPR01 + + + General Purpose Register 1 + + + + + 0x4750523032000000 + + + GPR02 + + + General Purpose Register 2 + + + + + 0x4750523033000000 + + + GPR03 + + + General Purpose Register 3 + + + + + 0x4750523034000000 + + + GPR04 + + + General Purpose Register 4 + + + + + 0x4750523035000000 + + + GPR05 + + + General Purpose Register 5 + + + + + 0x4750523036000000 + + + GPR06 + + + General Purpose Register 6 + + + + + 0x4750523037000000 + + + GPR07 + + + General Purpose Register 7 + + + + + 0x4750523038000000 + + + GPR08 + + + General Purpose Register 8 + + + + + 0x4750523039000000 + + + GPR09 + + + General Purpose Register 9 + + + + + 0x4750523130000000 + + + GPR10 + + + General Purpose Register 10 + + + + + 0x4750523131000000 + + + GPR11 + + + General Purpose Register 11 + + + + + 0x4750523132000000 + + + GPR12 + + + General Purpose Register 12 + + + + + 0x4750523133000000 + + + GPR13 + + + General Purpose Register 13 + + + + + 0x4750523134000000 + + + GPR14 + + + General Purpose Register 14 + + + + + 0x4750523135000000 + + + GPR15 + + + General Purpose Register 15 + + + + + 0x4750523136000000 + + + GPR16 + + + General Purpose Register 16 + + + + + 0x4750523137000000 + + + GPR17 + + + General Purpose Register 17 + + + + + 0x4750523138000000 + + + GPR18 + + + General Purpose Register 18 + + + + + 0x4750523139000000 + + + GPR19 + + + General Purpose Register 19 + + + + + 0x4750523230000000 + + + GPR20 + + + General Purpose Register 20 + + + + + 0x4750523231000000 + + + GPR21 + + + General Purpose Register 21 + + + + + 0x4750523232000000 + + + GPR22 + + + General Purpose Register 22 + + + + + 0x4750523233000000 + + + GPR23 + + + General Purpose Register 23 + + + + + 0x4750523234000000 + + + GPR24 + + + General Purpose Register 24 + + + + + 0x4750523235000000 + + + GPR25 + + + General Purpose Register 25 + + + + + 0x4750523236000000 + + + GPR26 + + + General Purpose Register 26 + + + + + 0x4750523237000000 + + + GPR27 + + + General Purpose Register 27 + + + + + 0x4750523238000000 + + + GPR28 + + + General Purpose Register 28 + + + + + 0x4750523239000000 + + + GPR29 + + + General Purpose Register 29 + + + + + 0x4750523330000000 + + + GPR30 + + + General Purpose Register 30 + + + + + 0x4750523331000000 + + + GPR31 + + + General Purpose Register 31 + + + + + 0x4C52000000000000 + + + LR + + + Link Register + + + + + 0x4D4D435230000000 + + + MMCR0 + + + Monitor Mode Control Register 0 + + + + + 0x4D4D435231000000 + + + MMCR1 + + + Monitor Mode Control Register 1 + + + + + 0x4D4D435240000000 + + + MMCRA + + + Monitor Mode Control Register A + + + + + 0x4D53520000000000 + + + MSR + + + Machine State Register + + + + + 0x4e49410000000000 + + + NIA + + + Next Instruction Address + + + + + 0x5049440000000000 + + + PID + + + Process ID Register + + + + + 0x5049520000000000 + + + PIR + + + Processor Identification Register + + + + + 0x504D433100000000 + + + PMC1 + + + Performance Monitor Counter 1 + + + + + 0x504D433200000000 + + + PMC2 + + + Performance Monitor Counter 2 + + + + + 0x504D433300000000 + + + PMC3 + + + Performance Monitor Counter 3 + + + + + 0x504D433400000000 + + + PMC4 + + + Performance Monitor Counter 4 + + + + + 0x504D433500000000 + + + PMC5 + + + Performance Monitor Counter 5 + + + + + 0x504D433600000000 + + + PIMC6 + + + Performance Monitor Counter 6 + + + + + 0x5055525200000000 + + + PURR + + + Processor Utilization Register + + + + + 0x5056520000000000 + + + PVR + + + Processor Version Register + + + + + 0x5344415200000000 + + + SDAR + + + Sampled Data Address Register + + + + + 0x5349415200000000 + + + SIAR + + + Sampled Instruction Address Register + + + + + 0x5350524730000000 + + + SPRG0 + + + Special Purpose Register General 0 + + + + + 0x5350524731000000 + + + SPRG1 + + + Special Purpose Register General 1 + + + + + 0x5350524732000000 + + + SPRG2 + + + Special Purpose Register General 2 + + + + + 0x5350524733000000 + + + SPRG3 + + + Special Purpose Register General 3 + + + + + 0x5350555252000000 + + + SPURR + + + Scaled Processor Utilization Register + + + + + 0x5352523000000000 + + + SRR0 + + + Save Restore Register 0 + + + + + 0x5352523100000000 + + + SRR1 + + + Save Restore Register 1 + + + + + 0x5442000000000000 + + + TB + + + Time Base Register + + + + + 0x5453520000000000 + + + TSR + + + Thread Status Register + + + + + 0x55414D4F52000000 + + + UAMOR + + + User Authority Mask Override Register + + + + + 0x565230305F484900 + + + VR00_HI + + + Vector Register 0 High + + + + + 0x565230305F4C4F00 + + + VR00_LO + + + Vector Register 0 Low + + + + + 0x565230315F484900 + + + VR01_HI + + + Vector Register 1 High + + + + + 0x565230315F4C4F00 + + + VR01_LO + + + Vector Register 1 Low + + + + + 0x565230325F484900 + + + VR02_HI + + + Vector Register 2 High + + + + + 0x565230325F4C4F00 + + + VR02_LO + + + Vector Register 2 Low + + + + + 0x565230335F484900 + + + VR03_HI + + + Vector Register 3 High + + + + + 0x565230335F4C4F00 + + + VR03_LO + + + Vector Register 3 Low + + + + + 0x565230345F484900 + + + VR04_HI + + + Vector Register 4 High + + + + + 0x565230345F4C4F00 + + + VR04_LO + + + Vector Register 4 Low + + + + + 0x565230355F484900 + + + VR05_HI + + + Vector Register 5 High + + + + + 0x565230355F4C4F00 + + + VR05_LO + + + Vector Register 5 Low + + + + + 0x565230365F484900 + + + VR06_HI + + + Vector Register 6 High + + + + + 0x565230365F4C4F00 + + + VR06_LO + + + Vector Register 6 Low + + + + + 0x565230375F484900 + + + VR07_HI + + + Vector Register 7 High + + + + + 0x565230375F4C4F00 + + + VR07_LO + + + Vector Register 7 Low + + + + + 0x565230385F484900 + + + VR08_HI + + + Vector Register 8 High + + + + + 0x565230385F4C4F00 + + + VR08_LO + + + Vector Register 8 Low + + + + + 0x565230395F484900 + + + VR09_HI + + + Vector Register 9 High + + + + + 0x565230395F4C4F00 + + + VR09_LO + + + Vector Register 9 Low + + + + + 0x565231305F484900 + + + VR10_HI + + + Vector Register 10 High + + + + + 0x565231305F4C4F00 + + + VR10_LO + + + Vector Register 10 Low + + + + + 0x565231315F484900 + + + VR11_HI + + + Vector Register 11 High + + + + + 0x565231315F4C4F00 + + + VR11_LO + + + Vector Register 11 Low + + + + + 0x565231325F484900 + + + VR12_HI + + + Vector Register 12 High + + + + + 0x565231325F4C4F00 + + + VR12_LO + + + Vector Register 12 Low + + + + + 0x565231335F484900 + + + VR13_HI + + + Vector Register 13 High + + + + + 0x565231335F4C4F00 + + + VR13_LO + + + Vector Register 13 Low + + + + + 0x565231345F484900 + + + VR14_HI + + + Vector Register 14 High + + + + + 0x565231345F4C4F00 + + + VR14_LO + + + Vector Register 14 Low + + + + + 0x565231355F484900 + + + VR15_HI + + + Vector Register 15 High + + + + + 0x565231355F4C4F00 + + + VR15_LO + + + Vector Register 15 Low + + + + + 0x565231365F484900 + + + VR16_HI + + + Vector Register 16 High + + + + + 0x565231365F4C4F00 + + + VR16_LO + + + Vector Register 16 Low + + + + + 0x565231375F484900 + + + VR17_HI + + + Vector Register 17 High + + + + + 0x565231375F4C4F00 + + + VR17_LO + + + Vector Register 17 Low + + + + + 0x565231385F484900 + + + VR18_HI + + + Vector Register 18 High + + + + + 0x565231385F4C4F00 + + + VR18_LO + + + Vector Register 18 Low + + + + + 0x565231395F484900 + + + VR19_HI + + + Vector Register 19 High + + + + + 0x565231395F4C4F00 + + + VR19_LO + + + Vector Register 19 Low + + + + + 0x565232305F484900 + + + VR20_HI + + + Vector Register 20 High + + + + + 0x565232305F4C4F00 + + + VR20_LO + + + Vector Register 20 Low + + + + + 0x565232315F484900 + + + VR21_HI + + + Vector Register 21 High + + + + + 0x565232315F4C4F00 + + + VR21_LO + + + Vector Register 21 Low + + + + + 0x565232325F484900 + + + VR22_HI + + + Vector Register 22 High + + + + + 0x565232325F4C4F00 + + + VR22_LO + + + Vector Register 22 Low + + + + + 0x565232335F484900 + + + VR23_HI + + + Vector Register 23 High + + + + + 0x565232335F4C4F00 + + + VR23_LO + + + Vector Register 23 Low + + + + + 0x565232345F484900 + + + VR24_HI + + + Vector Register 24 High + + + + + 0x565232345F4C4F00 + + + VR24_LO + + + Vector Register 24 Low + + + + + 0x565232355F484900 + + + VR25_HI + + + Vector Register 25 High + + + + + 0x565232355F4C4F00 + + + VR25_LO + + + Vector Register 25 Low + + + + + 0x565232365F484900 + + + VR26_HI + + + Vector Register 26 High + + + + + 0x565232365F4C4F00 + + + VR26_LO + + + Vector Register 26 Low + + + + + 0x565232375F484900 + + + VR27_HI + + + Vector Register 27 High + + + + + 0x565232375F4C4F00 + + + VR27_LO + + + Vector Register 27 Low + + + + + 0x565232385F484900 + + + VR28_HI + + + Vector Register 28 High + + + + + 0x565232385F4C4F00 + + + VR28_LO + + + Vector Register 28 Low + + + + + 0x565232395F484900 + + + VR29_HI + + + Vector Register 29 High + + + + + 0x565232395F4C4F00 + + + VR29_LO + + + Vector Register 29 Low + + + + + 0x565233305F484900 + + + VR30_HI + + + Vector Register 30 High + + + + + 0x565233305F4C4F00 + + + VR30_LO + + + Vector Register 30 Low + + + + + 0x565233315F484900 + + + VR31_HI + + + Vector Register 31 High + + + + + 0x565233315F4C4F00 + + + VR31_LO + + + Vector Register 31 Low + + + + + 0x5652534156450000 + + + VRSAVE + + + VR Save Register + + + + + 0x5653435200000000 + + + VSCR + + + VMX Status and Condition Register + + + + + 0x56535230305F4849 + + + VSR00_HI + + + Vector Scalar Register 0 High + + + + + 0x56535230305F4C4F + + + VSR00_LO + + + Vector Scalar Register 0 Low + + + + + 0x56535230315F4849 + + + VSR01_HI + + + Vector Scalar Register 1 High + + + + + 0x56535230315F4C4F + + + VSR01_LO + + + Vector Scalar Register 1 Low + + + + + 0x56535230325F4849 + + + VSR02_HI + + + Vector Scalar Register 2 High + + + + + 0x56535230325F4C4F + + + VSR02_LO + + + Vector Scalar Register 2 Low + + + + + 0x56535230335F4849 + + + VSR03_HI + + + Vector Scalar Register 3 High + + + + + 0x56535230335F4C4F + + + VSR03_LO + + + Vector Scalar Register 3 Low + + + + + 0x56535230345F4849 + + + VSR04_HI + + + Vector Scalar Register 4 High + + + + + 0x56535230345F4C4F + + + VSR04_LO + + + Vector Scalar Register 4 Low + + + + + 0x56535230355F4849 + + + VSR05_HI + + + Vector Scalar Register 5 High + + + + + 0x56535230355F4C4F + + + VSR05_LO + + + Vector Scalar Register 5 Low + + + + + 0x56535230365F4849 + + + VSR06_HI + + + Vector Scalar Register 6 High + + + + + 0x56535230365F4C4F + + + VSR06_LO + + + Vector Scalar Register 6 Low + + + + + 0x56535230375F4849 + + + VSR07_HI + + + Vector Scalar Register 7 High + + + + + 0x56535230375F4C4F + + + VSR07_LO + + + Vector Scalar Register 7 Low + + + + + 0x56535230385F4849 + + + VSR08_HI + + + Vector Scalar Register 8 High + + + + + 0x56535230385F4C4F + + + VSR08_LO + + + Vector Scalar Register 8 Low + + + + + 0x56535230395F4849 + + + VSR09_HI + + + Vector Scalar Register 9 High + + + + + 0x56535230395F4C4F + + + VSR09_LO + + + Vector Scalar Register 9 Low + + + + + 0x56535231305F4849 + + + VSR10_HI + + + Vector Scalar Register 10 High + + + + + 0x56535231305F4C4F + + + VSR10_LO + + + Vector Scalar Register 10 Low + + + + + 0x56535231315F4849 + + + VSR11_HI + + + Vector Scalar Register 11 High + + + + + 0x56535231315F4C4F + + + VSR11_LO + + + Vector Scalar Register 11 Low + + + + + 0x56535231325F4849 + + + VSR12_HI + + + Vector Scalar Register 12 High + + + + + 0x56535231325F4C4F + + + VSR12_LO + + + Vector Scalar Register 12 Low + + + + + 0x56535231335F4849 + + + VSR13_HI + + + Vector Scalar Register 13 High + + + + + 0x56535231335F4C4F + + + VSR13_LO + + + Vector Scalar Register 13 Low + + + + + 0x56535231345F4849 + + + VSR14_HI + + + Vector Scalar Register 14 High + + + + + 0x56535231345F4C4F + + + VSR14_LO + + + Vector Scalar Register 14 Low + + + + + 0x56535231355F4849 + + + VSR15_HI + + + Vector Scalar Register 15 High + + + + + 0x56535231355F4C4F + + + VSR15_LO + + + Vector Scalar Register 15 Low + + + + + 0x56535231365F4849 + + + VSR16_HI + + + Vector Scalar Register 16 High + + + + + 0x56535231365F4C4F + + + VSR16_LO + + + Vector Scalar Register 16 Low + + + + + 0x56535231375F4849 + + + VSR17_HI + + + Vector Scalar Register 17 High + + + + + 0x56535231375F4C4F + + + VSR17_LO + + + Vector Scalar Register 17 Low + + + + + 0x56535231385F4849 + + + VSR18_HI + + + Vector Scalar Register 18 High + + + + + 0x56535231385F4C4F + + + VSR18_LO + + + Vector Scalar Register 18 Low + + + + + 0x56535231395F4849 + + + VSR19_HI + + + Vector Scalar Register 19 High + + + + + 0x56535231395F4C4F + + + VSR19_LO + + + Vector Scalar Register 19 Low + + + + + 0x56535232305F4849 + + + VSR20_HI + + + Vector Scalar Register 20 High + + + + + 0x56535232305F4C4F + + + VSR20_LO + + + Vector Scalar Register 20 Low + + + + + 0x56535232315F4849 + + + VSR21_HI + + + Vector Scalar Register 21 High + + + + + 0x56535232315F4C4F + + + VSR21_LO + + + Vector Scalar Register 21 Low + + + + + 0x56535232325F4849 + + + VSR22_HI + + + Vector Scalar Register 22 High + + + + + 0x56535232325F4C4F + + + VSR22_LO + + + Vector Scalar Register 22 Low + + + + + 0x56535232335F4849 + + + VSR23_HI + + + Vector Scalar Register 23 High + + + + + 0x56535232335F4C4F + + + VSR23_LO + + + Vector Scalar Register 23 Low + + + + + 0x56535232345F4849 + + + VSR24_HI + + + Vector Scalar Register 24 High + + + + + 0x56535232345F4C4F + + + VSR24_LO + + + Vector Scalar Register 24 Low + + + + + 0x56535232355F4849 + + + VSR25_HI + + + Vector Scalar Register 25 High + + + + + 0x56535232355F4C4F + + + VSR25_LO + + + Vector Scalar Register 25 Low + + + + + 0x56535232365F4849 + + + VSR26_HI + + + Vector Scalar Register 26 High + + + + + 0x56535232365F4C4F + + + VSR26_LO + + + Vector Scalar Register 26 Low + + + + + 0x56535232375F4849 + + + VSR27_HI + + + Vector Scalar Register 27 High + + + + + 0x56535232375F4C4F + + + VSR27_LO + + + Vector Scalar Register 27 Low + + + + + 0x56535232385F4849 + + + VSR28_HI + + + Vector Scalar Register 28 High + + + + + 0x56535232385F4C4F + + + VSR28_LO + + + Vector Scalar Register 28 Low + + + + + 0x56535232395F4849 + + + VSR29_HI + + + Vector Scalar Register 29 High + + + + + 0x56535232395F4C4F + + + VSR29_LO + + + Vector Scalar Register 29 Low + + + + + 0x56535233305F4849 + + + VSR30_HI + + + Vector Scalar Register 30 High + + + + + 0x56535233305F4C4F + + + VSR30_LO + + + Vector Scalar Register 30 Low + + + + + 0x56535233315F4849 + + + VSR31_HI + + + Vector Scalar Register 31 High + + + + + 0x56535233315F4C4F + + + VSR31_LO + + + Vector Scalar Register 31 Low + + + + + 0x56535233325F4849 + + + VSR32_HI + + + Vector Scalar Register 32 High + + + + + 0x56535233325F4C4F + + + VSR32_LO + + + Vector Scalar Register 32 Low + + + + + 0x56535233335F4849 + + + VSR33_HI + + + Vector Scalar Register 33 High + + + + + 0x56535233335F4C4F + + + VSR33_LO + + + Vector Scalar Register 33 Low + + + + + 0x56535233345F4849 + + + VSR34_HI + + + Vector Scalar Register 34 High + + + + + 0x56535233345F4C4F + + + VSR34_LO + + + Vector Scalar Register 34 Low + + + + + 0x56535233355F4849 + + + VSR35_HI + + + Vector Scalar Register 35 High + + + + + 0x56535233355F4C4F + + + VSR35_LO + + + Vector Scalar Register 35 Low + + + + + 0x56535233365F4849 + + + VSR36_HI + + + Vector Scalar Register 36 High + + + + + 0x56535233365F4C4F + + + VSR36_LO + + + Vector Scalar Register 36 Low + + + + + 0x56535233375F4849 + + + VSR37_HI + + + Vector Scalar Register 37 High + + + + + 0x56535233375F4C4F + + + VSR37_LO + + + Vector Scalar Register 37 Low + + + + + 0x56535233385F4849 + + + VSR38_HI + + + Vector Scalar Register 38 High + + + + + 0x56535233385F4C4F + + + VSR38_LO + + + Vector Scalar Register 38 Low + + + + + 0x56535233395F4849 + + + VSR39_HI + + + Vector Scalar Register 39 High + + + + + 0x56535233395F4C4F + + + VSR39_LO + + + Vector Scalar Register 39 Low + + + + + 0x56535234305F4849 + + + VSR40_HI + + + Vector Scalar Register 40 High + + + + + 0x56535234305F4C4F + + + VSR40_LO + + + Vector Scalar Register 40 Low + + + + + 0x56535234315F4849 + + + VSR41_HI + + + Vector Scalar Register 41 High + + + + + 0x56535234315F4C4F + + + VSR41_LO + + + Vector Scalar Register 41 Low + + + + + 0x56535234325F4849 + + + VSR42_HI + + + Vector Scalar Register 42 High + + + + + 0x56535234325F4C4F + + + VSR42_LO + + + Vector Scalar Register 42 Low + + + + + 0x56535234335F4849 + + + VSR43_HI + + + Vector Scalar Register 43 High + + + + + 0x56535234335F4C4F + + + VSR43_LO + + + Vector Scalar Register 43 Low + + + + + 0x56535234345F4849 + + + VSR44_HI + + + Vector Scalar Register 44 High + + + + + 0x56535234345F4C4F + + + VSR44_LO + + + Vector Scalar Register 44 Low + + + + + 0x56535234355F4849 + + + VSR45_HI + + + Vector Scalar Register 45 High + + + + + 0x56535234355F4C4F + + + VSR45_LO + + + Vector Scalar Register 45 Low + + + + + 0x56535234365F4849 + + + VSR46_HI + + + Vector Scalar Register 46 High + + + + + 0x56535234365F4C4F + + + VSR46_LO + + + Vector Scalar Register 46 Low + + + + + 0x56535234375F4849 + + + VSR47_HI + + + Vector Scalar Register 47 High + + + + + 0x56535234375F4C4F + + + VSR47_LO + + + Vector Scalar Register 47 Low + + + + + 0x56535234385F4849 + + + VSR48_HI + + + Vector Scalar Register 48 High + + + + + 0x56535234385F4C4F + + + VSR48_LO + + + Vector Scalar Register 48 Low + + + + + 0x56535234395F4849 + + + VSR49_HI + + + Vector Scalar Register 49 High + + + + + 0x56535234395F4C4F + + + VSR49_LO + + + Vector Scalar Register 49 Low + + + + + 0x56535235305F4849 + + + VSR50_HI + + + Vector Scalar Register 50 High + + + + + 0x56535235305F4C4F + + + VSR50_LO + + + Vector Scalar Register 50 Low + + + + + 0x56535235315F4849 + + + VSR51_HI + + + Vector Scalar Register 51 High + + + + + 0x56535235315F4C4F + + + VSR51_LO + + + Vector Scalar Register 51 Low + + + + + 0x56535235325F4849 + + + VSR52_HI + + + Vector Scalar Register 52 High + + + + + 0x56535235325F4C4F + + + VSR52_LO + + + Vector Scalar Register 52 Low + + + + + 0x56535235335F4849 + + + VSR53_HI + + + Vector Scalar Register 53 High + + + + + 0x56535235335F4C4F + + + VSR53_LO + + + Vector Scalar Register 53 Low + + + + + 0x56535235345F4849 + + + VSR54_HI + + + Vector Scalar Register 54 High + + + + + 0x56535235345F4C4F + + + VSR54_LO + + + Vector Scalar Register 54 Low + + + + + 0x56535235355F4849 + + + VSR55_HI + + + Vector Scalar Register 55 High + + + + + 0x56535235355F4C4F + + + VSR55_LO + + + Vector Scalar Register 55 Low + + + + + 0x56535235365F4849 + + + VSR56_HI + + + Vector Scalar Register 56 High + + + + + 0x56535235365F4C4F + + + VSR56_LO + + + Vector Scalar Register 56 Low + + + + + 0x56535235375F4849 + + + VSR57_HI + + + Vector Scalar Register 57 High + + + + + 0x56535235375F4C4F + + + VSR57_LO + + + Vector Scalar Register 57 Low + + + + + 0x56535235385F4849 + + + VSR58_HI + + + Vector Scalar Register 58 High + + + + + 0x56535235385F4C4F + + + VSR58_LO + + + Vector Scalar Register 58 Low + + + + + 0x56535235395F4849 + + + VSR59_HI + + + Vector Scalar Register 59 High + + + + + 0x56535235395F4C4F + + + VSR59_LO + + + Vector Scalar Register 59 Low + + + + + 0x56535236305F4849 + + + VSR60_HI + + + Vector Scalar Register 60 High + + + + + 0x56535236305F4C4F + + + VSR60_LO + + + Vector Scalar Register 60 Low + + + + + 0x56535236315F4849 + + + VSR61_HI + + + Vector Scalar Register 61 High + + + + + 0x56535236315F4C4F + + + VSR61_LO + + + Vector Scalar Register 61 Low + + + + + 0x56535236325F4849 + + + VSR62_HI + + + Vector Scalar Register 62 High + + + + + 0x56535236325F4C4F + + + VSR62_LO + + + Vector Scalar Register 62 Low + + + + + 0x56535236335F4849 + + + VSR63_HI + + + Vector Scalar Register 63 High + + + + + 0x56535236335F4C4F + + + VSR63_LO + + + Vector Scalar Register 63 Low + + + + + 0x5845520000000000 + + + XER + + + Fixed-Point Exception Register + + + + +
+
+
+ Hardware Page Table Entry Save Area + The hardware page table entry save area is an area in the + partition’s memory used to preserve the hardware page table entries + corresponding to the VRMA entries that are used when Open Firmware is + started. The location and size of this area is specified by the partition + when firmware assisted dump. The minimum size is reported to the partition + in the new PFDS KDUMP node. + When accessing the table the offset to NumEntries should be used to + allow for different versions of the table. Newer versions of the table will + be compatible with all previous versions. +   + + HPT Entry Save Area Format + + + + + + + + + + + Offset + + + + + Length (Bytes) + + + + + Name + + + + + Value + + + + + Description + + + + + + + + 0x00 + + + 0x8 + + + Magic Number + + + 0x4850544553415645 + “HPTESAVE” + + + Used to verify that this area contains what it + should + + + + + 0x08 + + + 0x4 + + + Version + + + 0x0 + + + Current version + + + + + 0x0C + + + 0x4 + + + NumEntriesOffset + + + 0x1C + + + Offset to number of entries + + + + + 0x10 + + + 0x8 + + + Padding + + + 0x0 + + + Must be initialized to 0 + + + + + 0x18 + + + 0x8 + + + NumEntries + + + Actual Number Of Entries + + +   + + + + + 0x20 + + + 0x18 + + + HptEntry1 + + +   + + +   + + + + + 0x38 + + + 0x18 + + + HptEntry2 + + +   + + +   + + + + + ... + + +   + + +   + + +   + + +   + + + + +
+   + + HPT Entry Format + + + + + + + + + + + Offset + + + + + Length (Bytes) + + + + + Name + + + + + Value + + + + + Description + + + + + + + + 0x0 + + + 0x8 + + + HptEntryIndex + + +   + + + Index into the HPT table for the entry + + + + + 0x08 + + + 0x8 + + + Dword0 + + +   + + + HPT Entry High + + + + + 0x10 + + + 0x8 + + + Dword1 + + +   + + + HPT Entry Low + + + + +
+ + Note:The entries are not in any particular order. It + is up to the user of the save area to sort the data. + +
+ +
diff --git a/RTAS/ch_rtas_call_defn.xml b/RTAS/ch_rtas_call_defn.xml new file mode 100644 index 0000000..c0e3942 --- /dev/null +++ b/RTAS/ch_rtas_call_defn.xml @@ -0,0 +1,24715 @@ + + + + + Call Function Definition + + This section specifies the semantics of all the RTAS calls. It + specifies the RTAS function name, the contents of its argument call buffer + (its token, input parameters, and output values) and semantics. + +
+ NVRAM Access Functions + This architecture requires an area of non-volatile memory (NVRAM) + to hold OF options, RTAS information, machine configuration state, OS + state, diagnostic logs, etc. The type and size of NVRAM is specified in + the OF device tree. The format of NVRAM is detailed in + . + In order to give the OS the ability to access + NVRAM on + different platforms that may use different implementations or locations + for NVRAM, a layer of abstraction is provided to the OS. The functions in + this section provide an interface for reading and writing NVRAM with byte + level operations with no boundary requirements. + +
+ <emphasis>nvram-fetch</emphasis> + The RTAS function + nvram-fetch copies data from a given offset in NVRAM + into the user specified buffer. + + + + R1--1. + + RTAS must implement an + nvram-fetch function that returns data from NVRAM + using the argument call buffer defined by + . + + + Argument Call Buffer + <emphasis>nvram-fetch</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + nvram-fetch + + + + + + Number Inputs + + + + 3 + + + + + + Number Outputs + + + + 2 + + + + + + Index + + + + Byte offset in NVRAM + + + + + + Buffer + + + + Real address of data buffer + + + + + + Length + + + + Size of data buffer (in bytes) + + + + + Out + + + + Status + + + + 0: Success + -1: Hardware Error + -3: Parameter out of range + + + + + + Num + + + + Number of bytes successfully copied + + + + +
+
+
+
+ +
+ +
+ <emphasis>nvram-store</emphasis> + The RTAS function + nvram-store copies data from the user specified + buffer to a given offset in NVRAM. + + + + R1--1. + + RTAS must implement an + nvram-store function that stores data in NVRAM using + the argument call buffer defined by + . + + + Argument Call Buffer + <emphasis>nvram-store</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + nvram-store + + + + + + Number Inputs + + + + 3 + + + + + + Number Outputs + + + + 2 + + + + + + Index + + + + Byte number in NVRAM + + + + + + Buffer + + + + Real address of data buffer + + + + + + Length + + + + Size of data buffer (in bytes) + + + + + Out + + + + Status + + + + 0: Success + -1: Hardware Error + -3: Parameter out of range + + + + + + Num + + + + Number of bytes successfully copied + + + + +
+
+
+ + + R1--2. + + If the + nvram-store operation succeeded, the contents of + NVRAM must have been updated to the user specified values. The contents + of NVRAM are undefined if the RTAS call failed. + + Platform Implementation Note: The platform may keep + the NVRAM data cached in volatile memory as long as the cache is + implemented as a store-through cache and not a store-in cache. That is, + changed data is written to NVRAM as soon as possible. Return from the + nvram-store call with a “success” + Status is permissible after placing the data into a + store-through cache and prior to the actual writing to the NVRAM. + + + + + R1--3. + + The caller of the + nvram-store RTAS call must maintain the NVRAM + partitions as specified in + . + + +
+ +
+ +
+ +
+ Time of Day + The minimum system requirements include a non-volatile + real time + clock which maintains the time of day even if power to the machine is + removed. Minimum requirements for this clock are described in Requirement + + . + +
+ Time of Day Inputs/Outputs + The OS maintains the clock in UTC. This allows the OS and + diagnostics to co-exist with each other and provide uniform handling of + time. + + + + R1--1. + + The date and time inputs and outputs to + the RTAS time of day function calls are specified with the year as the + actual value (for example, 1995), the month as a value in the range 1-12, + the day as a value in the range 1-31, the hour as a value in the range + 0-23, the minute as a value in the range 0-59, and the second as a value + in the range 0-59. The date must also be a valid date according to common + usage: the day range being restricted for certain months, month 2 having + 29 days in leap years, etc. + + + + + R1--2. + + OSs must account for local time, for + daylight savings time when and where appropriate, and for leap + seconds. + + + + + R1--3. + + RTAS must account for leap years. + + + + +
+ +
+ <emphasis>get-time-of-day</emphasis> + + + + R1--1. + + RTAS must implement a + get-time-of-day call using the argument call buffer + defined by + . + + + Argument Call Buffer + <emphasis>get-time-of-day</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + get-time-of-day + + + + + + Number Inputs + + + + 0 + + + + + + Number Outputs + + + + 8 + + + + + Out + + + + Status + + + + 990x: Extended Delay where x is a number 0-5 (see text + below) + 0: Success + -1: Hardware Error + -2: Clock Busy, Try again later + + + + + + Year + + + + Year + + + + + + Month + + + + 1-12 + + + + + + Day + + + + 1-31 + + + + + + Hour + + + + 0-23 + + + + + + Minute + + + + 0-59 + + + + + + Second + + + + 0-59 + + + + + + Nanoseconds + + + + 0-999999999 + + + + +
+ + Software Implementation Note: When the 990x + Status is returned, it is suggested that software + delay for 10 raised to the x milliseconds (where x is the last digit of + the 990x return code), before calling again. However, software may issue + the call again either earlier or later than this. +
+
+ + + R1--2. + + RTAS must read the current time and set + the output values to the best resolution provided by the platform. + + +
+ +
+ +
+ <emphasis>set-time-of-day</emphasis> + + + + R1--1. + + RTAS must implement a + set-time-of-day call using the argument call buffer + defined by + . + + + Argument Call Buffer + <emphasis>set-time-of-day</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + set-time-of-day + + + + + + Number Inputs + + + + 7 + + + + + + Number Outputs + + + + 1 + + + + + + Year + + + + Year + + + + + + Month + + + + 1-12 + + + + + + Day + + + + 1-31 + + + + + + Hour + + + + 0-23 + + + + + + Minute + + + + 0-59 + + + + + + Second + + + + 0-59 + + + + + + Nanosecond + + + + 0-999999999 + + + + + Out + + + + Status + + + + 990x: Extended Delay where x is a number 0-5 (see text + below) + 0: Success + -1: Hardware Error + -3: Parameter Error + + + + +
+ + Software Implementation Note: When the 990x + Status is returned, it is suggested that software + delay for 10 raised to the x milliseconds (where x is the last digit of + the 990x return code), before calling again. However, software may issue + the call again either earlier or later than this. +
+
+ + + R1--2. + + RTAS must set the time of day to the best + resolution provided by the platform. + + + + + R1--3. + + RTAS must return a + Status of -3 (Parameter Error) to the + set-time-of-day RTAS call when the specified date is + outside the range supported by the platform. + Software Implementation Note: The OS maintains the clock in UTC. + This allows the OS and diagnostics to co-exist with each other and + provide uniform handling of time. Refer to Requirement + for further details on the time + of day clock. + + +
+ +
+ +
+ <emphasis>set-time-for-power-on</emphasis> + Some platforms provide the ability to set a time to cause the + platform power on. The + set-time-for-power-on call provides the interface to + the OS for setting this timer. + + + + R1--1. + + RTAS must implement the + set-time-for-power-on call using the argument call + buffer defined by + . + + + Argument Call Buffer + <emphasis>set-time-for-power-on</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + set-time-for-power-on + + + + + + Number Inputs + + + + 7 + + + + + + Number Outputs + + + + 1 + + + + + + Year + + + + Year + + + + + + Month + + + + 1-12 + + + + + + Day + + + + 1-31 + + + + + + Hour + + + + 0-23 + + + + + + Minute + + + + 0-59 + + + + + + Second + + + + 0-59 + + + + + + Nanosecond + + + + 0-999999999 + + + + + Out + + + + Status + + + + 990x: Extended Delay where x is a number 0-5 (see text + below) + 0: Success + -1: Hardware Error + -2: Clock Busy, Try again later + -3: Parameter Error + + + + +
+ + Software Implementation Note: When the 990x + Status is returned, it is suggested that software + delay for 10 raised to the x milliseconds (where x is the last digit of + the 990x return code), before calling again. However, software may issue + the call again either earlier or later than this. +
+
+ + + R1--2. + + Hardware must support power on times of + up to four weeks into the future, at a minimum. + + + + + R1--3. + + RTAS must schedule the time for power on + as close as it can approach to the desired time. + + Software Implementation Note: Hardware limitations on + the duration of the power-on timer may result in power-on sooner than + requested by software. If present in the + /rtas node, the OF property + “power-on-max-latency” gives in days the + maximum power-on duration capability of the hardware. If the property is + not present, software should expect the default of a maximum of 28 days. + A “day” is defined as 24 hour increments from the current + time. + + + + + R1--4. + + If the system is in a powered down state + at the time scheduled by + set-time-for-power-on (within the accuracy of the + clock), then power must be reapplied and the system must go through its + power on sequence. + + + + + R1--5. + + RTAS must return a + Status of -3 (Parameter Error) to the + set-time-for-power-on RTAS call when the specified + date is outside the range supported by the platform (such as before + current TOD). + + +
+ +
+ +
+ +
+ Error and Event Reporting + The error and event reporting RTAS calls are designed to provide an + abstract interface into hardware registers in the system that may contain + correctable or non-correctable errors and to provide an abstract + interface to certain platform events that may be of interest to the OS. + Such errors and events may be detected either by a periodic scan or by an + exception trap. + These functions are not intended to replace the normal error + handling in the OS. Rather, they enhance the OS’s abilities by + providing an abstract interface to check for, report, and recover from + errors or events on the platform that are not necessarily known to the + OS. + The OS uses the error and event RTAS calls in two distinct + ways: + + + + Periodically, the OS calls + event-scan + to have the + system firmware check for any errors or events that have occurred. + + + + Whenever the OS receives an interrupt or exception that it + cannot fully process, it calls + check-exception.. + + + + The first case covers all errors and events that do not signal + their occurrence with an interrupt or exception. The second case covers + those errors and events that do signal with an interrupt or exception. It + is platform dependent whether any specific error or event causes an + interrupt on that platform. + + + + R1--1. + + RTAS must return the event generated by a + particular interrupt or event source by either + check-exception or + event-scan, but not both. + + + + + R1--2. + + check-exception and + event-scan, on a 64-bit capable platform, must be + able to handle platform resources that are accessed using 64-bit + addresses when instantiated in 32-bit mode. + + + + +
+ <emphasis>event-scan</emphasis> + + + + R1--1. + + RTAS must implement an + event-scan + call using + the argument call buffer defined by + . + + + Argument Call Buffer + <emphasis>event-scan</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + event-scan + + + + + + Number Inputs + + + + 4 + + + + + + Number Outputs + + + + 1 + + + + + + Event Mask + + + + Mask of event classes to process + + + + + + Critical + + + + Indicates whether this call is required to complete + quickly + + + + + + Buffer + + + + Real address of error log + + + + + + Length + + + + Length of error log buffer + + + + + Out + + + + Status + + + + 1: No Errors Found + 0: New Error Log returned + -1: Hardware Error + + + + +
+
+
+ + + R1--2. + + The event-scan call must fill in the error log with a + single error log formatted as specified in + . If necessary, the data placed + into the error log must be truncated to + length bytes. + + + + + R1--3. + + RTAS must only check for errors or events + that are within the classes defined by the + Event mask. Event mask is a bit mask of error and + event classes. Refer to + for the definition of the bit + positions. + + + + + R1--4. + + If Critical is non-zero, then RTAS must perform only + those operations that are required for continued operation. No extended + error information is returned. + + + + + R1--5. + + The event-scan call must return the first found error or + event and clear that error or event so it is only reported once. + + + + + R1--6. + + The OS must continue to call + event-scan while a + Status of “New Error Log returned” is + returned. + + + + + R1--7. + + The event-scan call must be made at least + “rtas-event-scan-rate” + times per minute for each error and event class and + must have the + Critical parameter equal to 0 for this periodic + call. + + + + + R1--8. + + The platform must not return more than + two error logs during the first sequence of + event-scan RTAS calls after boot of an OS image, and + must not return more than one error log to that OS image during any + sequence of + event-scan RTAS calls after the first time a non-zero + Status is returned. + + +
+ + + Software Implementation Notes: + + + + In a multiprocessor system, each processor should call + event-scan periodically, not always the same one. The + event-scan function needs to be called a total of + “rtas-event-scan-rate” + times a minute. + + + + The maximum size of the error log is specified in the OF device + tree as the + “rtas-error-log-max” + property of the + /rtas node. + + + + This call does not log the error in NVRAM. It returns the error + log to the OS. It is the responsibility of the OS to take appropriate + action. + + + + For best system performance, the requested + “rtas-event-scan-rate” should be as low + as possible, and as a goal should not exceed 120 scans per minute. + Maximum system performance is obtained when no scans are required. + + + +
+ +
+ <emphasis>check-exception</emphasis> + + + + R1--1. + + RTAS must implement a + check-exception call using the argument call buffer + defined by + . + + + Argument Call Buffer + <emphasis>check-exception</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + check-exception + + + + + + Number Inputs + + + + 6 (without Extended Information) + 7 (with Extended Information) + + + + + + Number Outputs + + + + 1 + + + + + + Vector Offset + + + + The vector offset for the exception. See + + + . + + + + + + Additional Information + + + + Information which RTAS may need to determine the cause of + the exception, but which may be unavailable to it in hardware + registers. See + for details. + + + + + + Event Mask + + + + Mask of event classes to process + + + + + + Critical + + + + Indicates whether this call is required to complete + quickly + + + + + + Buffer + + + + Real address of error log + + + + + + Length + + + + Length of error log + + + + + + Extended Information + + + + See Requirement + . + + + + + Out + + + + Status + + + + 1: No Errors Found + 0: New Error Log returned + -1: Hardware Error + + + + +
+
+
+ + + R1--2. + + The OS must provide the value specified in + in the + Additional Information parameter in the call to + check-exception, with the + Number Inputs parameter set to 6. If the value (e.g., + SRR1) is too large to fit in this cell, the lower 32-bits must be + provided here, the upper 32-bits provided in the + Extended Information parameter, and the + Number Inputs parameter set to 7. + + + Additional Information Provided to + <emphasis>check-exception</emphasis> call + + + + + + + + Source of Interrupt + + + + + Value of “Additional + Information” Variable + + + + + + + + External Interrupt + + + Interrupt number + + + + + Machine check exception + + + Value of register SRR1 at entry to machine check + handler + + + + + System Reset exception + + + Value of register SRR1 at entry to system reset + handler + + + + + Other exception + + + Value of register SRR1 at entry to exception + handler + + + + +
+
+
+ + + R1--3. + + The check-exception call must fill in the error log with + a single error log formatted as specified in + . The data in the error log + must be truncated to + length bytes. + + + + + R1--4. + + If Critical is non-zero, then RTAS must perform only + those operations that are required for continued operation. No extended + error information is returned. + + + + + R1--5. + + The check-exception call must return the first found + error or event and clear that error or event so it is only reported + once. + + + + + R1--6. + + RTAS must only check for errors or events + that are within the classes defined by the + Event mask. Event mask is a bit mask of error and + event classes. Refer to + for the definition of the bit + positions. + + +
+ + Software Implementation Notes: + + + + All OS reserved exception handlers should call + check-exception to process any errors that are + unknown to the OS. + + + + The + interrupt number for external device interrupts is + provided in the OF device tree as specified in + . + + + + Software, with knowledge of the class of event it seeks, matches + the data in the Vector Offset, Additional Information, and Extended + Information with the Event Mask such that ambiguity does not + result. + + + +
+ +
+ <emphasis>rtas-last-error</emphasis> + + + + R1--1. + + RTAS must implement an + rtas-last-error call using the argument call buffer + defined in + . + + + Argument Call Buffer + <emphasis>rtas-last-error</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + rtas-last-error + + + + + + Number Inputs + + + + 2 + + + + + + Number Outputs + + + + 1 + + + + + + Buffer + + + + Real address of error log + + + + + + Length + + + + Length of error log buffer + + + + + Out + + + + Status + + + + 1: No Errors Found + 0: New Error Log Returned + -1: Hardware Error (cannot create log) + + + + +
+
+
+ + + R1--2. + + The rtas-last-error call must fill in the error log with + a single error log formatted as specified in + . If necessary, the data placed + into the error log must be truncated to ‘length” + bytes. + + + + + R1--3. + + RTAS must only check for hardware errors + that occurred during a prior call to some other RTAS function, resulting + in a -1 (Hardware Error) return + Status. + + +
+ + + Software Note: This function is intended to provide + the OS with more detailed failure information after an RTAS call returns + with a -1 (Hardware Error) + Status, and should not be called except for this + purpose. If + rtas-last-error itself returns a -1 + Status, then it could not create the error log data + because of a further error, and the OS should not try to call it + again. +
+ +
+ Platform Dump Option + + The architectural intent of the Platform Dump option is to allow a + mechanism for the platform to communicate a variety of dump data used to + debug problems within the platform firmware or hardware. + +
+ <emphasis>ibm,platform-dump</emphasis> + + This RTAS call is used to transfer dump data from the platform to + the OS. It is expected that this routine will have to be called several + times to complete the transfer of the diagnostic dump data. It is also + anticipated that multiple dumps could be in the process of completion at + the same time. Individual dumps are identified by a dump tag passed by + the OS. The OS may interleave calls to + ibm,platform-dump with different RTAS calls. Other + standard RTAS locking rules apply (for example, only one processor may + call RTAS at a time). + The OS only makes the + ibm,platform-dump RTAS call when an event scan + returns an error log with an Event Type of “Dump + Notification” as described in Version 6 or later of the RTAS + General Extended Error Log Format. + + + + R1--1. + + For the Platform Dump option: The RTAS function + ibm,platform-dump must be implemented and must + implement the argument call buffer as defined by + . + + + Argument Call Buffer + <emphasis>ibm,platform-dump</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + ibm,platform-dump + + + + + + Number of Inputs + + + + 6 + + + + + + Number of Outputs + + + + 5 + + + + + + Dump_Tag_Hi + + + + Most-significant 32 bits of a Dump_Tag representing an id + of the dump being processed + + + + + + Dump_Tag_Lo + + + + Least-significant 32 bits of a Dump_Tag representing an + id of the dump being processed + + + + + + Sequence_Hi + + + + Most-significant 32 bits of the Sequence, a value + indicating what portion of a dump to be returned by the call. + Sequence of 0 returns the beginning of the Dump. The value in + all subsequent call as needed, should be set to the value of + the Next_Sequence returned from each previous call. + + + + + + Sequence_Lo + + + + Least-significant 32 bits of the Sequence + + + + + + Buffer + + + + Address of dump buffer (NULL indicates completion of + processing) + + + + + + Length + + + + Length of the buffer in bytes (min. 1024) + + + + + Out + + + + Status + + + + -1: Hardware error + -2: Busy, try again later + -9002: Not Authorized + 0: Dump complete + 1: Continue dump + 990x: Extended Delay where x is a number 0-5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Next_Sequence_Hi + + + + Most-significant 32 bits of the Next_Sequence value + indicating the portion of the dump to be retrieved on the next + call if needed. (If + Status is returned as 0, then the dump is + complete and there is no next call required. The value of + Next_Sequence in this case is undefined.) + + + + + + Next_Sequence_Lo + + + + Least-significant 32 bits of the Next_Sequence + value + + + + + + Bytes_Returned_Hi + + + + Most-significant 32 bits of the Bytes_Returned value + indicating the number of valid bytes returned in the + Buffer + + + + + + Bytes_Returned_Lo + + + + Least-significant 32 bits of the Bytes_Returned value + indicating the number of valid bytes returned in the + Buffer + + + + +
+ + Software Implementation Note: When the 990x + Status is returned, it is suggested that software + delay for 10 raised to the x milliseconds (where x is the last digit of + the 990x return code), before calling + ibm,platform-dump again. However, software may issue + the + ibm,platform-dump call again either earlier or later + than this. +
+
+ + + R1--2. + + For the Platform Dump option: On the first call to + ibm,platform-dump of a platform dump sequence for a + given Dump_Tag, the Sequence value must be initialized to zero and on + subsequent calls for the same tag, the Dump_Sequence must be set to + Next_Sequence of the previous call made with the same Dump_Tag or else + set to zero to restart the entire dump sequence. + + + + + R1--3. + + For the Platform Dump option: The dump tag passed to + any call to ibm,platform-dump must be a value specified by the platform + and communicated to the OS by an + event-scan error log entry. + + + + + R1--4. + + For the Platform Dump option: Once a + Status of 0 (Dump complete) or -1 (Hardware + error” is returned for the + ibm,platform-dump call with a particular dump tag, + the dump is considered complete from a platform standpoint, but for the + “Dump complete” case the OS must signal to the platform that + the processing of the dump has been completed by a final call for the + Dump_Tag with the Buffer address set to NULL. + + + + + R1--5. + + For the Platform Dump option: If at any time a + partition receives a -9002, Not Authorized, return code for an + ibm,platform-dump RTAS, the partition must cease + attempting to acquire the dump information it was in process of acquiring + and discard any portion already acquired. + + Programming Note: It is expected that a platform + generally only transmits a dump to a single partition. However, the above + requirement makes provision for the platform abandoning the transmission + of a dump to a partition after it has been initiated, presumably to + re-initiate transmission to a different partition or to a Hardware + Management Console (HMC). + + + + + R1--6. + + For the Platform Dump option: The contents of dump + information returned through the sequence of calls to + ibm,platform-dump, must follow a dump directory + structure as defined in + . + + + + + R1--7. + + For the Platform Dump option: Collectively the dump + data returned from a sequence of + ibm,platform-dump calls for a given Dump_tag must + consist of one dump file directory entry as described in + followed by one or more dump + section directory entries as described in + followed by a dump data section + for each dump section directory entry earlier included. + + +
+ + + Programming Notes: + + + + + As required in + , the OS can determine the + maximum size of a copy of each dump that can be returned by issuing an + ibm,get-system-parameter for the + platform-dump-max-size. In addition, in the case of any change in the + value of this parameter, the platform may generate a Platform Event Log + entry announcing the change in the maximum size, and specifying the new + size in the IO Events Section. This entry, when generated, is then + returned by the + event-scan RTAS call. + + + + The Dump_Tag is taken from the Dump Locator Section of the + Platform Error/Event Log Format, Version 6 or later. Specifically, + Dump_Tag_Hi is composed of the 8 bit Dump Type as found in the Dump + Locator Section, padded with 24 bits on the left to make a 32 bit + quantity. The Dump_Tag_Lo is the Dump ID found in the Dump Locator + Section of the Error log entry. + + + + If the + ibm,platform-dump RTAS routine returns with the + Status of 1 (Continue dump), the transfer is + proceeding but had to be suspended to maintain the short execution time + requirement of RTAS routines or because more data was available than the + Buffer could contain. + + + + The Bytes_Returned value indicates how many bytes of dump data + (if any) were returned on a call and OS must be prepared to handle the + case of no bytes returned. When Continue dump + Status (1) is returned, this indicates that there is + more dump data available then was returned in the buffer. A subsequent + call with the same Dump_tag and the Sequence value being set to the + Next_Sequence returned from the previous call returns additional dump + data. + + + + When a dump has been successfully transmitted, the + Status of 0 (Dump complete) is returned. If there is + a hardware error preventing a dump from being successfully transmitted, + as + Status of -1 (Hardware error) is returned. In either + case, the Dump sequence is completed. It should be noted that the final + Next_Sequence value returned is undefined. After the sequence is + completed, the OS should make one final call for the given Dump_Tag using + a NULL buffer pointer. (The value of the Sequence parameter for this call + is undefined although it is acceptable for the platform to make the value + equal to the last Next_Sequence value returned.) This call tells the + platform that the OS has completed processing of the dump and will not + attempt to restart the sequence. + + + + If the platform used system memory to hold dump data, the + platform at this point is permitted to free the associated logical memory + blocks (LMBs) reserved for the dump. Successful return from the + ibm,platform-dump RTAS call with a NULL buffer + pointer indicates to the OS that one or more logical memory blocks (LMBs) + may now be acquired by the OS. A get-sensor-state RTAS call for these + LMBs returns with a state of “DR entity available for recovery + (4)” after the successful return from this + ibm,platform-dump RTAS call. + + + + If a platform does not receive the NULL buffer pointer call dump + for a given Dump_Tag but subsequently boots the partition, the platform + may report the presence of the dump again on an e + vent-scan after the boot. + + + +
+ +
+ Platform Dump Directory Structure + + The entire dump contents returned over a sequence of + ibm,platform-dump RTAS calls for a given Dump_Tag + follows a directory/data structure as illustrated in + and + where a dump consists of one + File Directory Entry, one or more Section Directory Entries and one data + section for each Section Directory entry. + + + Platform Dump File Directory Entry Format + + + + + + + + + + Field Name + + + + + Length + + + + + Values + + + + + Discussion + + + + + + + + Entry Header + + + 8 Bytes + + + “FILE” + + + Identifies the type of entry that follows. The value is + ASCII consisting of the characters “FILE” and 4 + ASCII blanks. + + + + + Entry Length + + + 2 Bytes + + + Number of bytes of the entire file directory entry + + + This length includes the Entry Header and Entry Length + fields. + + + + + Reserved + + + 6 Bytes + + +   + + +   + + + + + Flags + + + 4 Bytes + + + See + . + + +   + + + + + Entry Type + + + 2 Bytes + + + 0x0001 + + + 0x0001signifies a file entry. + + + + + Prefix Length + + + 2 Bytes + + + Number of bytes of the Dump File Base Name that is + considered to be a prefix. + + +   + + + + + Dump File Base Name + + + Length in bytes computed as “Entry length” - + 24, but not to exceed 46 characters including the ASCII NULL + string termination. + + + NULL terminated ASCII String consisting of ASCII + characters in the ranges of a-z, A-Z, 0-9, and the ASCII + “.” + + + Gives a base name for the dump file to be created from + the dump data. This base name is composed of a prefix followed + by additional data (e.g. dumptype.serialnumber.dumpID.timestamp + where dumptype.serialnumber is the prefix) + + + + +
+ + + Dump Section Directory Entry Format + + + + + + + + + + Field Name + + + + + Length + + + + + Values + + + + + Discussion + + + + + + + + Entry Header + + + 8 Bytes + + + “SECTION” + + + Identifies the type of entry that follows. The value is + ASCII consisting of the characters “SECTION” and 1 + ASCII blank. + + + + + Entry Length + + + 2 Bytes + + + Number of bytes of the entire section directory + entry + + + This length includes the Entry Header and Entry Length + fields. + + + + + Priority + + + 2 Bytes + + + Unsigned integer + + + See programming note after + . + + + + + Reserved + + + 4 Bytes + + +   + + +   + + + + + Flags + + + 4 Bytes + + + See + . + + +   + + + + + Entry Type + + + 2 Bytes + + + 0x0002 + + + 0x0002 signifies a section entry. + + + + + Reserved + + + 2 Bytes + + +   + + +   + + + + + Section Length + + + 8 Bytes + + + Length in bytes of the section of the dump that this + entry is the directory for + + +   + + + + + Section Name + + + Length in bytes computed as “Entry length” - + 32, but not to exceed 46 characters including the ASCII NULL + string termination. + + + NULL terminated ASCII String. + + + Gives a name to the dump section for which this entry is + a directory. + + + + +
+ The two previous tables refer to a set of flags used to describe + information related to a dump section. The options are stored in a single + 32 bit value which is the bit-wise OR'ing of each option value defined in + + . + + + Dump File Format Directory Options + + + + + + + + + + Name + + + + + Bit Position(s) of Option + + + + + Definition + + + + + Discussion + + + + + + + + last_flag + + + 0x00000001 + + + Binary value set to 1 if the last directory entry. + + + Flag is never set for the File Directory entry since at + least one Section Directory entry follows. + + + + + not_transmitted + + + 0x00000002 + + + If set to 1, indicates that the data for the block has + not been transmitted during some process of dump + transfer. + + + Platform always sets this value to 0. The bit may be set + to 1 by applications transmitting a dump. See Software + implementation note item 2: in this section below. + + + + + Reserved + + + All but bit positions shown above + + + All other values reserved + + +   + + + + +
+ + Software Implementation Notes: + + + + + Platforms supporting the + ibm,platform-dump call may have several unique dump + types. All dumps of the same type on a partition have the same + “prefix” to the name of the dump file as indicated in the + dump file directory entry in an error log. + + + + The priority in the priority field of the section directory + entries allow an application transmitting a dump to a remote support + center to decide what sections of data to transmit when the connection + bandwidth is limited. Zero is the highest priority. All sections at the + same priority shall be transmitted if any at that priority are + transmitted. It is intended that all directory entries be transmitted + with the section length set to zero and their not_transmitted Dump File + Format Directory Options flag set to a 1 if the section data cannot be + transmitted. + + + +
+ +
+ +
+ +
+ PCI Configuration Space + Device drivers and system software need access to + PCI + configuration space. + section on "Address Map" defines + system address spaces for PCI memory and PCI I/O spaces. It does not + define an address space for PCI configuration. Different PCI bridges may + implement the mechanisms for accessing PCI configuration space in + different ways. The RTAS calls in this section provide an abstract way of + reading and writing PCI configuration spaces. + The PCI access functions take a + config_addr input parameter which is similar to the + Type 1 PCI configuration space address. For conventional PCI and PCI-X + Mode 1, this address is a 24-bit quantity composed of bus, device, + function, and register numbers. This allows the configuration of up to + 256 buses (including sub-bridges), 32 IOAs per bus, 8 functions per IOA, + and 256 bytes of register space per function. PCI-X Mode 2 and PCI + Express define an extended configuration space with an additional 4-bit + quantity which specifies an extended register number allowing for 4096 + bytes of register space per function. Refer to the + or the + for more details. The + config_addr for an IOA is derived from the OF device tree, and is defined + in + . + The + ibm,read-pci-config and + ibm,write-pci-config RTAS calls allow for the + specification of the PHB Bus Unit ID, and therefore allow for up to 256 + unique + config_addr bus numbers per PHB. Note that for each + pci connector, there may be multiple PCI bus numbers, because plug-in PCI + cards may contain PCI to PCI bridges, which create other PCI + buses. + The + PCI Local Bus Specification requires that + unimplemented or reserved register space read as 0’s, and that + reads of the Vendor ID register of IOAs or functions which aren’t + present should be unambiguously reported (reading 0xFFFF is sufficient). + Writes to unimplemented or reserved register space are specified as + no-ops. Writes to IOAs or functions which aren’t present are + undefined. These operations are undefined if a bus is specified which + doesn’t exist. + + + + R1--1. + + For the RTAS PCI + configuration space and EEH functions where the parameter + config_addr is requested as input, the + config_addr parameter must be as specified by the hi + cell of the physical address in Open Firmware Working Group proposal + number 516 Ver 1.8 (see + ), with the upper register + address bits added for PCI-X Mode 2 and PCI Express, in order to access + past the first 256 bytes of configuration space. + + + Definition + <emphasis>Config_addr</emphasis> + + + + + + + + Bit + + + + + Definition + + + + + + + + 0:3 + + + Upper bits of the Register Number, when applicable, + otherwise 0. Set to 0 when the PCI extended configuration space + is not available, due to lack of support somewhere from the PHB + to the IOA. When a value of this field can be something other + than 0, the + + “ibm,pci-config-space-type” property will + exist in the IOA's node with a value indicating that the + extended space is supported. + + + + + 4:7 + + + Reserved (set to 0) + + + + + 8:15 + + + Bus Number + + + + + 16:20 + + + Device Number + + + + + 21:23 + + + Function Number, when applicable, otherwise 0 + + + + + 24:31 + + + Lower bits of the Register Number, when applicable, + otherwise 0 + + + + +
+
+
+ + + R1--2. + + All RTAS PCI Read/Write functions must + follow the appropriate PCI specification. + + + + + R1--3. + + RTAS must follow the rules of + when accessing PCI + configuration space. + + +
+ + + Software Implementation Notes: + + + + + Since PCI Configuration space is defined to be Little-Endian, + RTAS accesses this area using the byte-reversed forms of the + Load and + Store instructions. In this fashion, the values + passed are defined Big-Endian. + + + + Prior to accessing the extended configuration address space of + PCI-X Mode 2 and PCI Express devices, an IOA device driver is responsible + for checking if the + “ibm,pci-config-space-type” property (see + ) of the IOA's node exists and + is set to a non-zero value. + + + +
+ <emphasis>ibm,read-pci-config</emphasis> + + + + R1--1. + + For Platforms which may have greater than 256 PCI + Buses: RTAS must implement an + ibm,read-pci-config + call using + the argument call buffer defined by + . + + + Argument Call Buffer + <emphasis>ibm,read-pci-config</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + ibm,read-pci-config + + + + + + Number Inputs + + + + 4 + + + + + + Number Outputs + + + + 2 + + + + + + Config_addr + + + + Configuration Space Address + + + + + + PHB_Unit_ID_Hi + + + + Represents the most-significant 32-bits of the Unit ID of + the PHB that corresponds to the + config_addr + + + + + + PHB_Unit_ID_Low + + + + Represents the least-significant 32-bits of the Unit ID + of the PHB that corresponds to the + config_addr + + + + + + Size + + + + Size of Configuration Cycle in bytes, value can be 1, 2, + or 4 + + + + + Out + + + + Status + + + + 0: Success + -1: Hardware Error + -3: Parameter Error + + + + + + Value + + + + Value Read from the location specified by the PHB Unit ID + and config_addr + + + + +
+
+
+ + + R1--2. + + The + ibm,read-pci-config call must return the value from + the configuration register which is at the location specified by the PHB + Unit ID and + config_addr in PCI configuration space. + + + + + R1--3. + + The ibm,read-pci-config call must perform a 1-byte, + 2-byte, or 4-byte configuration space read depending on the value of the + size input argument. + + + + + R1--4. + + The config_addr must be aligned to a 2-byte boundary if + size is 2 and to a 4-byte boundary if + size is 4. + + + + + R1--5. + + The ibm,read-pci-config call + of IOAs or functions which are not present or which + are not available to the caller must return + Success with all ones as the output + value. + + +
+ +
+ +
+ <emphasis>ibm,write-pci-config</emphasis> + + + + R1--1. + + For Platforms which may have greater than 256 PCI + Buses: RTAS must implement an + ibm,write-pci-config + call + using the argument call buffer defined by + . + + + Argument Call Buffer + <emphasis>ibm,write-pci-config</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + ibm,write-pci-config + + + + + + Number Inputs + + + + 5 + + + + + + Number Outputs + + + + 1 + + + + + + Config_addr + + + + Configuration Space Address + + + + + + PHB_Unit_ID_Hi + + + + Represents the most-significant 32-bits of the Unit ID of + the PHB that corresponds to the + config_addr + + + + + + PHB_Unit_ID_Low + + + + Represents the least-significant 32-bits of the Unit ID + of the PHB that corresponds to the + config_addr + + + + + + Size + + + + Size of Configuration Cycle + in bytes, + can be 1, 2, or 4 + + + + + + Value + + + + Value to be written to the location specified by the PHB + Unit ID and config_addr + + + + + Out + + + + Status + + + + 0: Success + -1: Hardware Error + -3: Parameter or device enablement error + + + + +
+
+
+ + + R1--2. + + The + ibm,write-pci-config call must store the value to the + configuration register which is at the location specified by the PHB Unit + ID and + config_addr in PCI configuration space. + + + + + R1--3. + + The ibm,write-pci-config call must perform a 1-byte, + 2-byte, or 4-byte configuration space write depending on the value of the + size input argument. + + + + + R1--4. + + The config_addr must be aligned to a 2-byte boundary if + size is 2 and to a 4-byte boundary if + size is 4. + + + + + R1--5. + + The ibm,write-pci-config call + of IOAs or functions which are not present or which + are not available to the caller must be ignored and a + Status of 0 (Success) must be returned. + + + + + R1--6. + + For the LPAR option: The + Status of -3 (Parameter or device enablement error) + must be returned if all the following are true: + + + + The OS attempts an + ibm,write-pci-config to enable Memory or I/O for an + IOA, without first calling + ibm,set-eeh-option to enable EEH for the IOA + + + + Enabling the IOA could expose other partitions to errors from + the partition which is enabling the IOA + + + + The hypervisor is + enforcing EEH mode + + + + + Platform Implementation Note: In Requirement + + , + cross-partition errors could + be caused due to error domains which are shared between the partitions. + However, it is acceptable to share error domains when the IOA and its + device driver and the partition's OS cannot (through error or + maliciously) cause errors which affect another partition. + + +
+ +
+ +
+ +
+ Operator Interfaces and Platform Control + The RTAS operator interface and platform control functions provide + the OS with the ability to perform platform services in a portable + manner. The RTAS operator interface provides the ability for the OS to + notify the user about OS events during boot, to notify the user of + abnormal events, and to obtain information from the platform. The + platform control functions give the OS the ability to obtain + platform-specific information and to control platform features. + These calls are all “best effort” calls. RTAS should + make its best effort to implement the intent of the call. If the Platform + Hardware does not implement some optional feature, it is permitted for + RTAS to either return an error, or to virtualize the service in some way + and return “Operation Succeeded.” + Software Implementation Notes: + + + + For example, a keyswitch + could be virtualized by storing a keyswitch value in + NVRAM and by providing a user interface to modify this value. The RTAS + call + get-sensor-state on the + keyswitch returns the value stored in NVRAM. + + + + If these services are only called prior to the use of any of the + underlying devices by the OS, for example, during boot time, or only + after the OS has finished using the devices, for example, during a crash, + then the OS can avoid mutual exclusion and sharing concerns. Otherwise, + synchronization per + , must be performed. + + + +
+ Op Panel Display + + + + R1--1. + + Platform Implementation: + All servers must + implement an operator panel display mechanism by supporting the + display-character RTAS call. + + Implementation Note: The operator display mechanism + in Requirement + may be a physical alphanumeric + display with a special purpose LCD device marked “used by + RTAS”, or it may be some other virtualized display which is + accessible through some method not defined by this architecture. + + + + + R1--2. + + Platform Implementation: Servers which provide + display-character must provide a line length of at + least 16 characters. + + + + + + Software Implementation Notes: + + + + + There are currently four uses for the op panel display. The + first is for display of an error code, if needed, from the + Built-In-Self-Test (BIST) or Power-On-Self-Test (POST). This display is + machine dependent. (These tests are executed prior to loading the OS or + the operation of OF. Any display requirements are handled within the + hardware.) The second is for progress indication during initialization + and boot. This display is four digits and is updated as boot proceeds. + The third is for display after a failure running diagnostics. In this + case, a service request number (SRN) is displayed along with a FRU + location code list of possible devices needing service. These numbers and + locations can be longer than four characters. The SRN may be over 12 + characters and a FRU location code list is one or more items, typically + three, of 2 to 32 characters. The fourth is a crash code from the OS + which is 12 characters indicating cause and dump status. + + + + The RTAS + set-indicator call with token #6 specifies 4 hex + digits. The + display-character call requires a minimum display + size of one line of 4 characters, but a larger display may be made known + to the OS using the “ibm,” extension properties defined in + . When the message to be + displayed is larger than the OS believes the display to be, the OS should + perform appropriate truncation, scrolling, or otherwise meaningfully + display the message using the platform’s display resource. + + + + Some servers implement a display larger than the default. For + these servers, the + “ibm,display-line-length” property and + the + “ibm,display-number-of-lines” property + are set appropriately. + + + + If the OS assumes the default display, the 2X16 display still + works. It appears to be working in the bottom line and scrolling through + the top line as long as only CR and LF are issued for control. The OF + device tree properties indicate what is supported. + + + +
+ +
+ Service Processor + A service processor is not a platform requirement. Larger servers + tend to be implemented with service processors. When implemented, the + service processor is not seen directly as a device by software. All of + its services which are visible to the OS, are abstracted with RTAS. The + service processor may support the operator panel, manage sensors and + indicators, run diagnostics, monitor the platform environment and save + error logs. There is clearly an interface between RTAS and the service + processor, but that interface is not intended to be used by the + OS. + The service processor, in those platforms which choose to use one, + is key in the initialization of the platform and has interfaces with the + OF code. It is also involved with VPD collection and NVRAM access during + initialization. It can also provide a serial port for a remote service + capability. The service processor is also a significantly slower + processor than the primary PA processor. Therefore, in the implementation + of RTAS functions which use the service processor, care should be taken + to avoid interlocks with the service processor which could significantly + impair performance. + +
+ Surveillance + Platforms which include a service processor have the needed + mechanism for a surveillance function; that is, the OS and the service + processor can monitor each other. For example, if the OS crashes or + hangs, or if the service processor has failures, a failure notification + could occur. Notification could also occur if the platform fails during + the boot process, or if it cannot complete a boot successfully. The + notification can be sent to a service center or to a customer + administrator, as determined by the customer setup of configuration + parameters. The firmware provides notification to the OS by reporting + exceptions through + event-scan. The service processor can provide + dial-out notification if the OS stops, or if a boot process fails. + In the implementation of surveillance, the service processor + monitors the OS by tracking the issuance of heartbeats generated by calls + to the + event-scan RTAS service. If a service processor + time-out occurs prior to receiving another heartbeat, an action based on + user defined call out policy occurs. This action could be to reboot, call + service or power-down. The policy may be different depending on whether + the time-out occurs during a boot process or during a period of normal OS + operation. The default policy and time-out period, kept in NVRAM, can be + changed from a service processor menu or from software. The platform can + be configured such that surveillance is either enabled or disabled + immediately after boot. After boot, temporary changes to the surveillance + state can be made by issuing a + set-indicator call to indicator 9000 (see + ). + The following system parameters define the default behavior of + surveillance mode (see also, + for more information about + these parameters and for their default values). + + + + The + sp-sen system parameter defines whether the default + state of surveillance by the service processor is enabled (=on) or + disabled (=off). + + + + The + sp-sti system parameter defines the period of time + (1-255 minutes) that the service processor should wait between heartbeats + from + event-scan. If the time-out period expires without + the service processor receiving another heartbeat, the service processor + initiates recovery and reporting actions as defined by the user. + + + + The + sp-sdel system parameter defines the period of time + (1-120 minutes) that the service processor should wait before starting + surveillance after control passes to the OS. This value is set to allow + enough time for the OS to boot and initialize to the point where it can + start calling + event-scan on a regular periodic basis. + + + + + Architecture Note: Surveillance times out if the + time of the parameter, + sp-sdel, plus the time of the parameter, + sp-sti, passes prior to receiving the first + heartbeat. In effect, the first + event-scan can be considered the signal for boot + complete. + The platform may perform surveillance on the service processor + using + event-scan to trigger checking as well as for + reporting any errors found. + Software Implementation Note: + The surveillance here is for keeping + an eye on the overall functioning of the OS. If a specific process gets + hung and the OS is still functioning, it is the responsibility of the OS + to detect and not the surveillance discussed here. + OF Implementation Note: + The OS is expected to call the + event-scan RTAS service (with the internal-errors + mask bit on) at the rate defined by the property + “rtas-event-scan-rate” in the OF device + tree. If an + “rtas-event-scan-rate” + of zero (0) + is placed in the OF device tree and surveillance is initialized as + ‘active’, a surveillance time-out occurs after the time-out + period since the heartbeats are triggered by the + event-scan call. If there is reason to operate with + the rate = 0, the default state of surveillance ( + sp-sen parameter in NVRAM) should be disabled, and + the surveillance sensor and indicator should not be placed in the OF + device tree. + + + + R1--1. + + Platform Implementation: The default surveillance + policy must be defined by the + sp-sen, + sp-sti and + sp-sdel system parameters, as set by the service + processor or by software. + + + + + R1--2. + + Platform Implementation: Heartbeats to the service + processor must only be sent as the result of a call to the + event-scan RTAS service with the + internal-errors bit (bit 0) set to 1 in the call + buffer + Event Mask parameter. + + + + + R1--3. + + Platform Implementation: In platforms which implement + surveillance, the + event-scan RTAS service may be called more than once + per minute, but the heartbeat to the service processor must be sent at + the rate of at least once per minute. + + + + + R1--4. + + Platform Implementation: In platforms which implement + surveillance, the + ibm,os-term RTAS call must be implemented. + + + + + + Software Note: Requirement + provides a mechanism for the OS + to release control of the platform without being aware of the state of + surveillance. With the definition of a default platform state for + surveillance, the OS may not be aware of the function, yet surveillance + may be used. Platforms may not have a dependency on the OS to turn off + surveillance during normal shutdown (a shutdown not including immediate + reboot). +
+ +
+ Surveillance on SMP Systems + Each running processor in an SMP system should be covered by + surveillance. The following requirements assure this coverage. + + + + R1--1. + + Each processor which is running, that + is, not stopped by the stop-self RTAS call or not stopped due to BIST + testing at bring-up, must issue the event-scan RTAS call. The rate of + issue is the + “rtas-event-scan-rate” times per minute + divided by the number of processors. This is the minimum rate. + + + + + R1--2. + + The system must allow for all + processors to cycle through their event-scan calls. The timeout period + for a surveillance event, which is + sp-sti, must be greater than n time t, where n is + the number of processors and t is the + “rtas-event-scan-rate”. + + + + + R1--3. + + The surveillance event must be signaled + if after the surveillance interval, + sp-sti, one or more processors has not issued an + event-scan call. + + + + + + Implementation Note: Care is required in the + assignment of the surveillance interval and the + “rtas-event-scan-rate” such that a + surveillance event is not signaled prematurely. The default values are + not meant for a system with a large number of processors. +
+ +
+ +
+ <emphasis>display-character</emphasis> + The + display-character function allows the display of both + alphabetic and numeric information. The display for this function + requires at least one line of four (4) characters. Also specified are the + control characters carriage-return (CR) (0x0D) and line-feed (LF) + (0x0A). + The following OF properties are defined in + : + + + + “ibm,display-line-length” + + + + “ibm,display-number-of-lines” + + + + “ibm,display-truncation-length” + + + + “ibm,form-feed” + + + + + + R1--1. + + If + display-character is implemented on a platform, the + property + “ibm,display-line-length” in the + /rtas node must be provided if greater than the + required minimum default of 4 characters. + + + + + R1--2. + + If + display-character is implemented on a platform, the + property + “ibm,display-number-of-lines” in the + /rtas node must be provided if greater than the + required minimum default of 1 line. + + + + + R1--3. + + If the + “ibm,display-number-of-lines” is greater + than one, the platform must support form-feed (FF) (0x0C). + + + + + R1--4. + + If form-feed is implemented, it must + clear the display and position the display pointer to line 1 column + 1. + + + + + R1--5. + + The platform must include the property + “ibm,form-feed” + in the + /rtas node. + + + + + R1--6. + + For the + display-character RTAS call, when the truncation + length as specified in the + “ibm,display-truncation-length” property, + when it exists, is less than the length of the line being displayed on + that particular line, then the firmware must truncate the requested line + to be displayed to the length specified in the + “ibm,display-truncation-length” property + for that line. + + + + + R1--7. + + For the + display-character RTAS call, when the truncation + length as specified in the + “ibm,display-truncation-length” property, + when it exists, is greater than the length specified of the line as + specified in + “ibm,display-line-length” then the + platform must provide a platform-dependent method of displaying the line + to the user. + + + + + R1--8. + + For platforms that use converged location + codes, the platform must provide scrolling for the + display-character RTAS call, on the second line of + the display, and must provide the + “ibm,display-truncation-length” property + and specify a truncation length of no less than 80 characters for that + line. + + Platform and Software Implementation Note: In + implementing Requirements + and + , it is permissible to have a + separate buffer for any of the lines of the display and not display that + line until a button is pressed. + The RTAS call display-character can be used by the OS to display + informative messages during boot, or to display error messages when an + error has occurred and the OS cannot depend on its display drivers. This + call is intended to display the alpha-numeric characters on an LCD panel, + graphics console, or attached tty. The precise implementation is platform + vendor specific. + + + + + R1--9. + + RTAS must implement a + display-character call using + the argument call buffer defined by + to place a character on the + output device. + + + + + R1--10. + + The OS must serialize all calls to + display-character with any other use of the + rtas-display-device. + + + Argument Call Buffer + <emphasis>display-character</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + display-character + + + + + + Number Inputs + + + + 1 + + + + + + Number Outputs + + + + 1 + + + + + + Value + + + + Character to be displayed + + + + + Out + + + + Status + + + + 0: Success + -1: Hardware error + -2: Device busy, try again later + + + + +
+
+
+ + + R1--11. + + If a physical + output device is used for the output of the RTAS + display-character call, then it must have at least + one line and 4 characters. + + + + + R1--12. + + Certain ASCII control characters must + have their normal meanings with respect to position on output devices + which are capable of cursor positioning. In particular, ^M (0x0D) must + position the cursor at column 0 in the current line, and ^J (0x0A) must + move the cursor to the next line. If on the bottom line, move to column 0 + and scroll old data off the top. + + + + + R1--13. + + The ASCII characters which must be + displayed are generally those coded from 0x20 to 0x7E as shown in + . SP indicates a space and ND + is not defined + + + Display ASCII Characters + + + + + + + + + + + + + + + + + + Hex + + + + + Disp + + + + + Hex + + + + + Disp + + + + + Hex + + + + + Disp + + + + + Hex + + + + + Disp + + + + + Hex + + + + + Disp + + + + + Hex + + + + + Disp + + + + + + + + 20 + + + SP + + + 30 + + + 0 + + + 40 + + + @ + + + 50 + + + P + + + 60 + + + + + + 70 + + + p + + + + + 21 + + + ! + + + 31 + + + 1 + + + 41 + + + A + + + 51 + + + Q + + + 61 + + + a + + + 71 + + + q + + + + + 22 + + + + + + 32 + + + 2 + + + 42 + + + B + + + 52 + + + R + + + 62 + + + b + + + 72 + + + r + + + + + 23 + + + # + + + 33 + + + 3 + + + 43 + + + C + + + 53 + + + S + + + 63 + + + c + + + 73 + + + s + + + + + 24 + + + $ + + + 34 + + + 4 + + + 44 + + + D + + + 54 + + + T + + + 64 + + + d + + + 74 + + + t + + + + + 25 + + + % + + + 35 + + + 5 + + + 45 + + + E + + + 55 + + + U + + + 65 + + + e + + + 75 + + + u + + + + + 26 + + + & + + + 36 + + + 6 + + + 46 + + + F + + + 56 + + + V + + + 66 + + + f + + + 76 + + + v + + + + + 27 + + + + + + 37 + + + 7 + + + 47 + + + G + + + 57 + + + W + + + 67 + + + g + + + 77 + + + w + + + + + 28 + + + ( + + + 38 + + + 8 + + + 48 + + + H + + + 58 + + + X + + + 68 + + + h + + + 78 + + + x + + + + + 29 + + + ) + + + 39 + + + 9 + + + 49 + + + I + + + 59 + + + Y + + + 69 + + + i + + + 79 + + + y + + + + + 2A + + + * + + + 3A + + + : + + + 4A + + + J + + + 5A + + + Z + + + 6A + + + j + + + 7A + + + z + + + + + 2B + + + + + + + 3B + + + ; + + + 4B + + + K + + + 5B + + + [ + + + 6B + + + k + + + 7B + + + { + + + + + 2C + + + , + + + 3C + + + < + + + 4C + + + L + + + 5C + + + \ + + + 6C + + + l + + + 7C + + + | + + + + + 2D + + + - + + + 3D + + + = + + + 4D + + + M + + + 5D + + + ] + + + 6D + + + m + + + 7D + + + } + + + + + 2E + + + . + + + 3E + + + > + + + 4E + + + N + + + 5E + + + ^ + + + 6E + + + n + + + 7E + + + ~ + + + + + 2F + + + / + + + 3F + + + ? + + + 4F + + + O + + + 5F + + + _ + + + 6F + + + o + + + 7F + + + ND + + + + +
+ Software Implementation Note: Care should be taken in using the + full character set for all systems as some characters may not be + available or may display in a different fashion. For instance, the + currency symbol, $ (0x24), may be modified to a national currency symbol. + Other currently known differences occur for the reverse slant, \ (0x5C), + and the tilde, ~(0x7E). +
+
+ + + R1--14. + + RTAS must not + output characters to the + rtas-display-device except for explicit calls from + the OS to the + display-character function except for the following + conditions. + + + + The rtas-display-device is marked + “used-by-rtas”. + + + + The RTAS call is + power-off, ibm,power-off-ups, set-power-level + (0,0), or + system-reboot. + + + + +
+ + + + Software Implementation Notes: + + + + + RTAS should try to produce output to the user. This could be to + the system console, to an attached terminal, or to some other device. It + could be implemented using a diagnostic processor or network. RTAS could + also implement this call by storing the messages in a buffer in NVRAM so + the user could determine the reason for a crash upon reboot. + + + + This call modifies the registers associated with the + rtas-display-device. The OS may also access this + device, being aware that calls to + display-character change the state of the + device. + + + +
+ +
+ <emphasis>set-indicator</emphasis> + The RTAS + set-indicator function provides the OS with an + abstraction for controlling various lights, indicators, and other + resources on a platform. If multiple indicators of a given type are + provided by the platform, this function permits addressing them + individually. + + + + R1--1. + + RTAS must implement a + set-indicator call which sets the value of the + indicator of type + Indicator and index + Indicator-index using the argument call buffer + defined by + and indicator types defined by + . + + + Argument Call Buffer + <emphasis>set-indicator</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + set-indicator + + + + + + Number Inputs + + + + 3 + + + + + + Number Outputs + + + + 1 + + + + + + Indicator + + + + Token defining the type of indicator + + + + + + Indicator-index + + + + Index of specific indicator (0, 1,...) + + + + + + State + + + + Desired new state + + + + + Out + + + + Status + + + + 990x: Extended Delay + 0: Success + -1: Hardware Error + -2: Hardware busy, try again later + -3: No such indicator implemented + -9000: Multi-level isolation error + -9001: Valid outstanding translation + + + + +
+
+
+ + + R1--2. + + For indicators in the + “rtas-indicators” property, the indices + for indicators must start at zero (0) and increment sequentially up to + the maximum index; that is, all of the integers and only those integers + from 0 to the maximum index are valid. + + Architecture Note: Indicator indices that are + obtained via the + ibm,get-indices RTAS call are not necessarily + contiguous (that is, any of the indices between 0 and the + maxindex, inclusive, may be missing). + + + + + R1--3. + + Of the indicator types defined by + , RTAS must implement at least + Tone Frequency and Tone Volume. + + + + + R1--4. + + The + set-indicator RTAS call must not return a busy + indication (-2 or 990x) for any indicator in + which is marked with a + “yes” in the “Fast?” column of that table. + + + + + R1--5. + + The platform may, but is not required to, + turn off a tone automatically after 5 minutes or more duration (that is, + automatically set the Tone Volume to zero), and therefore a user of the + Tone must call + set-indicator Tone Volume with a volume value of + non-zero, if a tone is to be sustained longer than 5 minutes, and if the + platform is going to automatically terminate the tone, the platform must + reset its automatic turn-off timer when it receives a + set-indicator call for the Tone Volume with a + non-zero tone volume value. + + +
+ + + Defined Indicators + + + + + + + + + + + + + + Indicator Name + + + + + Token Value + + + + + Defined Values + + + + + Default Value + + + + + Fast? + + + + + Required? + + + + + <vendor> + + Values in the “<vendor>” column are + used to replace the “ + <vendor>” field of the + <vendor>,indicator-<token> + property, when that property is + presented. See Requirement + . + + + + + + Examples/Comments + + + + + + + + Tone Frequency + + + 1 + + + Unsigned Integer + (units are Hz) + + + 1000 + + + yes + + + When tone is required. See Requirement + . + + + ibm + + + Generate an audible tone using the tone generator + hardware. RTAS selects the closest implemented audible + frequency to the requested value. + + + + + Tone Volume + + + 2 + + + 0-100 (units are percent), + 0 = OFF + + + 0 + + + yes + + + When tone is required. See Requirement + . + + + ibm + + + Set the percentage of full volume of the tone generator + output, scaled approximately logarithmically. RTAS should + select the closest implemented volume for values between zero + (off) and 100 (full on). + + + + + - + + + 3-6 + + + - + + + - + + + - + + + - + + + - + + + Reserved. + + + + + - + + + 7 + + + - + + + - + + + - + + + - + + + - + + + Reserved. Was (deprecated) Battery Warning Time. + + + + + - + + + 8 + + + - + + + - + + + - + + + - + + + - + + + Reserved. Was (deprecated) Condition Cycle + Request. + + + + + Surveillance + + + 9000 + + + 0-disabled + 1-255-timeout + + + sp-sti + + + yes + + + When the platform implements the surveillance + function. + + + ibm + + + Initialized with value from the sp-sti system + parameter. + + + + + Isolation-state + + + 9001 + + + Isolate = 0 + Unisolate = 1 + + + 1 + + + no + + + For all DR options + + + - + + + Isolate refers to the DR action to logically disconnect + from the platform and/or OS (for example, for PCI, isolate from + the bus and from the OS). See + for more + details. + + + + + DR + + + 9002 + + + Inactive = 0 + Active = 1 + Identify = 2 + Action = 3 + + + 0 if Inactive + 1 if Active + + + no + + + For all DR options + + + - + + + Indicator index may refer to a single indicator that + combines Power/Active indicator and Identify/Action indications + or just an Identify/Action indicator. Identify and Action may + map to the same visual state (for example, the same blink + rate). See + and + for more + information. + + + + + Allocation-state + + + 9003 + + + unusable (0) + usable (1) + exchange (2) + recover (3) + + +   + + + no + + + For all DR options + + + - + + + Allows an OS image to assign (usable, exchange, or + recover) resources from the firmware or, release resources from + the OS to the firmware. See + for more + details. + + + + + - + + + 9004 + + + - + + + - + + + - + + + - + + + - + + + Reserved. + + + + + Global Interrupt Queue Control + + + 9005 + + + Disable = 0 + Enable = 1 + + + 1 + + + yes + + + See Requirement + . + + + ibm + + + Enable and Disable the processor as Global Interrupt + Queue Server + + + + + Error Log + or + FRU Fault + + + 9006 + + + Normal (off) = 0 + Fault (on) = 1 + + + 0 + + + no + + + Yes + See + . + + + ibm + + + This indicator is combined with the Identify indicator + for the Primary Enclosure drawer/enclosure (that is, is the + same physical indicator). Off indicates that the system is + working normally. On indicates that the system hardware, + firmware and/or diagnostics detected a fault (failure) in the + system or a partition requires operator intervention for + another reason. The Error Log indicator is located only on the + Primary Enclosure. See + and + for more + information. + + + + + Identify (Locate) + + + 9007 + + + Normal (off) = 0 + Identify (blink) = 1 + + + 0 + + + no + + + Yes + See + . + + + ibm + + + Note that a 9002 indicator also has an Identify state, + and in the case where the 9002 indicator is implemented with + two physical indicators (one for Power and one for + Identify/Action), the same physical indicator must be used for + both a 9002 Identify/Action indicator and 9007 Identify + indicator. This architecture does not specify any mechanism for + protecting against the simultaneous use by the user of an + indicator that is both a 9002 and 9007 indicator, nor does it + protect against the use of multiple 9007 indicators + simultaneously or multiple uses of the same 9007 indicator + simultaneously. See + and + for more + information. + + + + + - + + + 9008 + + + - + + + - + + + - + + + - + + + - + + + Reserved. + + + + + - + + + 9009 + + + - + + + - + + + - + + + - + + + - + + + Reserved. + + + + + Vendor Specific + + + 9100-9999 + + +   + + +   + + +   + + +   + + + <vendor> + + The vendor specific company representation, as used on + other OF properties specified by that vendor. + + + + Indicator values reserved for platform vendor use. + + + + +
+ +
+ Indicators + + +
+ Indicator 9000 Surveillance + An indicator is defined with the token value 9000 to allow + temporary modification of the state of the surveillance function (further + described in + ). + To enable monitoring of heartbeats from the + event-scan RTAS call, the surveillance indicator is + set with a value of 1 to 255, indicating the number of minutes for the + surveillance time-out value. If monitoring is already enabled, the + time-out value can be modified by setting this indicator. To disable + monitoring, the surveillance indicator should be set to a value of zero + (0). The + set-indicator call is used to modify the state of + surveillance (overriding the default system parameter values) only for + the current session. The surveillance state returns to the default values + when the system is rebooted. + The default surveillance configuration may be modified by changing + the system parameters. For more information on these parameters, refer to + + . + + + + R1--1. + + Platforms with the surveillance + function must implement a sensor and an indicator, with the token value + of 9000, with defined state input values of on (= 1-255, which enables + surveillance with specified time-out value in minutes) and off (= 0, + which disables surveillance). + + + + + + Firmware Implementation Note: The requirement above + results in the creation of the properties + “ibm,indicator-9000” and + “ibm,sensor-9000” in the + /rtas node. + + Hardware Implementation Note: The action that the + service processor takes in the case of a timeout is determined by the + configuration setup policy in the system parameters. +
+ +
+ Indicator 9005 Global Interrupt Queue Control + The 9005 indicator controls the global interrupt server queue logic + of the interrupt presentation controllers for the processor making the + call (Available Processor Mask (APM) for the PowerPC interrupt + presentation controller). This is used when bringing a processor online + and taking a processor offline. + + + + R1--1. + + Platforms that + allow processors to be brought online or be taken offline dynamically + must implement the global interrupt queue control indicator with a value + of 9005 as specified in + . + + + + + R1--2. + + The index value for global interrupt + queue control indicator (9005) must be + (2 + ibm,interruptserver#-size) - 1 - the + gserver# of the global server to be controlled as + given in the + + “ibm,ppc-interrupt-gserver#s” property. + + + + +
+ +
+ +
+ +
+ <emphasis>get-sensor-state</emphasis> + The RTAS call + get-sensor-state is used by the OS to read the + current state of various sensors on any Platform. If multiple sensors of + a given type are provided by the platform, this function permits + addressing them individually. + + + + R1--1. + + RTAS must implement a + get-sensor-state call which + reads the value of the sensor of type + Sensor which has index + Sensor-index using the argument call buffer defined + by + and the sensor types defined by + + . + + + + + R1--2. + + If a platform tests sensor values against + limits, then RTAS must return the result of these tests using the + Status output parameter. + + + <emphasis>get-sensor-state</emphasis> Argument Call Buffer + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for get-sensor-state + + + + + + Number Inputs + + + + 2 + + + + + + Number Outputs + + + + 2 + + + + + + Sensor + + + + Token defining the sensor type + + + + + + Sensor-index + + + + Index of specific sensor (0, 1,...) + + + + + Out + + + + Status + + + + 990x: Extended Delay where x is a number 0-5 (see text + below) + 13: Sensor value >= Critical high + 12: Sensor value >= Warning high + 11: Sensor value normal + 10: Sensor value <= Warning low + 9: Sensor value <= Critical low + 0: Success + -1: Hardware Error + -2: Hardware Busy, Try again later + -3: No such sensor implemented + -9000: DR Entity isolated ( + ) + + + + +   + + + + State + + + + Current value as defined in the Defined Values column of + . + + + + +
+ + Software Implementation Note: When the 990x + Status is returned, it is suggested that software + delay for 10 raised to the x milliseconds (where x is the last digit of + the 990x return code), before calling + get-sensor-state again. However, software may issue + the + get-sensor-state call again either earlier or later + than this. +
+
+ + + R1--3. + + For sensors in the + “rtas-sensors” property, the indices for + sensors must start at zero (0) and increment sequentially up to the + maximum index; that is, all of the integers and only those integers from + 0 to the maximum index are valid. + + Architecture Note: Sensor indices that are obtained + via the + ibm,get-indices RTAS call are not necessarily + contiguous (that is, any of the indices between 0 and the + maxindex, inclusive, may be missing). + + + + + R1--4. + + The get-sensor RTAS call must not return a busy + indication (-2 or 990x) for any indicator in + which is marked with a + “yes” in the “Fast?” column of that table. + + +
+ + + Hardware Implementation Note: Some platforms may + compare the value of environmental sensors (such as the Battery Voltage + or Thermal Sensor) to some limits. When the value of the sensor meets or + exceeds a limit, the platform may take some action. RTAS makes the OS + aware of the relationship of the sensor values to the limit by using the + Status code to return this information. + + Software and Hardware Implementation Notes: The + meaning of these limits is as follows: + + + + Critical High - The sensor value is greater than or equal to this + limit. The platform may take some action and may initiate an EPOW (see + ). The OS may take some action + to correct this situation or to perform an orderly shutdown. + + + + Warning High - The sensor value is greater than or equal to this + limit, but less than the critical high limit. The platform may initiate a + warning EPOW. The OS may take some action to bring this reading back into + the normal range. + + + + Normal - RTAS is aware of the limits and the value is within + these operating limits. + + + + Warning Low - The sensor value is less than or equal to this + limit, but greater than the critical low limit. The platform may initiate + a warning EPOW. The OS may take some action to bring this reading back + into the normal range. + + + + Critical Low - The sensor value is less than or equal to this + limit. The platform may take some action and may initiate an EPOW. The OS + may take some action to correct this situation or to perform an orderly + shutdown. + + Where: + + + + A ‘critical’ state is defined as a condition where + the sensor value of the measured item indicates that it is outside the + allowable operating parameters of the system, and that a failure is + imminent unless some immediate action is taken. + + + + A ‘warning’ state is defined as a condition where the + sensor value of the measured item indicates that it is outside the + expected operating parameters for normal operation, but has not yet + reached a critical state. The variance is significant enough that either + system software or an operator may want to take some action to bring the + parameter back into the normal range. + + + + + Platform Implementation Note: The existence of this + sensor state reporting capability should not be construed as a + requirement to have any limits on sensors or to always have all four + limits. + + + Defined Sensors + + + + + + + + + + + + + Sensor Name + + + + + Token Value + + + + + Defined Values + + + + + Fast? + + + + + Required? + + + + + <vendor> + + Values in the “<vendor>” column are + used to replace the “ + <vendor>” field of the + <vendor>,sensor-<token> + property, when that property is presented. See Requirement + . + + + + + + Description + + + + + + + + Key Switch + + + 1 + + + Off (0), + Normal (1), + Secure (2), + Maintenance (3) + + + yes + + + No + + + ibm + + + Key switch modes are tied to OS security policy. + Suggested meanings: Maintenance mode permits booting from + floppy or other external, non-secure media. Normal mode permits + boot from any attached device. Secure mode permits no manual + choice of boot device, and may restrict available functionality + which is accessed from the main operator station. Off + completely disables the system. + + + + + - + + + 2 + + + - + + + - + + + - + + + - + + + Reserved. + + + + + Thermal + + + 3 + + + Temperature + (in Degrees Celsius) + + + no + + + No + + + ibm + + + If implemented, returns the internal temperature of the + specified thermal sensor. + + + + + - + + + 4 + + + - + + + - + + + - + + + - + + + Reserved. Was (deprecated) Lid Status. + + + + + - + + + 5 + + + - + + + - + + + - + + + - + + + Reserved. + + + + + - + + + 6 + + + - + + + - + + + - + + + - + + + Reserved. Was (deprecated) Current battery output + voltage. + + + + + - + + + 7 + + + - + + + - + + + - + + + - + + + Reserved. Was (deprecated) Battery Capacity + Remaining. + + + + + - + + + 8 + + + - + + + - + + + - + + + - + + + Reserved. Was (deprecated) Battery Capacity + Percentage. + + + + + Environmental and + Power State (EPOW) + + + 9 + + + EPOW_Reset(0) + Warn_Cooling(1) + Warn_Power(2) + System_Shutdown(3) + System_Halt(4) + EPOW_Main_Enclosure(5) + EPOW_Power_Off(7) + + + yes + + + Yes + + + ibm + + + RTAS assessment of the environment and power state of the + platform. + + + + + - + + + 10 + + + - + + + - + + + - + + + - + + + Reserved. Was (deprecated) Battery Condition Cycle + State. + + + + + - + + + 11 + + + - + + + - + + + - + + + - + + + Reserved. Was (deprecated) Battery Charging State. + + + + + Surveillance + + + 9000 + + + 1-255 and 0 + + + yes + + + When the platform implements the surveillance + function + + + ibm + + + Current state of surveillance. + + + + + Fan speed + + + 9001 + + + fan - rpm + + + no + + + No + + + ibm + + +   + + + + + Voltage + + + 9002 + + + voltage - mv + + + no + + + No + + + ibm + + +   + + + + + DR-entity-sense + + + 9003 + + + DR connector empty = 0 + DR entity present = 1 + DR entity unusable (2) + DR entity available for exchange (3) + DR entity available for recovery (4) + + + no + + + For all DR options + + + - + + + Used in Dynamic Reconfiguration operations to determine + if connector is available and whether the user performed a + particular DR operation correctly. See + and + . + + + + + Power Supply + + + 9004 + + +   + + + no + + + No + + + ibm + + + Sense presence and status of power supplies. + + + + + Global Interrupt Queue Control + + + 9005 + + + Disabled = 0 + Enabled = 1 + + + yes + + + See Requirement + . + + + ibm + + + Global interrupt queue server control state. + + + + + Error Log + or + FRU Fault + + + 9006 + + + Normal (off) = 0 + Fault (on) = 1 + + + no + + + Yes + See + . + + + ibm + + + Off indicates that the system is working normally. + On indicates that the system hardware, firmware and/or + diagnostics detected a fault in the system. + + + + + Identify + + + 9007 + + + Normal (off) = 0 + Identify (blink) = 1 + + + no + + + Yes + See + . + + + ibm + + + Identify (locate) indicator (FRU, connector, or + drawer/unit). + Off is the default State. + On indicates the Identify State. + + + + + - + + + 9008 + + + - + + + - + + + - + + + ibm + + + Reserved. + + + + + - + + + 9009 + + + - + + + - + + + - + + + ibm + + + Reserved. + + + + + Vendor Specific + + + 9100-9999 + + +   + + +   + + +   + + + <vendor> + + The vendor specific company representation, as used on + other OF properties specified by that vendor. + + + + Reserved for use by platform vendors. + + + + +
+ +
+ Sensors + The current state of surveillance, as described in + , is queried with a call to + get-sensor-state with a token value of 9000. Fan + speed is queried with the token value of 9001 and an index specifying the + desired fan. Similarly, voltage is sensed with a token value of 9002 and + an index specifying the desired voltage source. + + + + R1--1. + + Platforms which implement the + surveillance function must implement a single defined RTAS sensor with + the token value of 9000, which returns values of on (= 1-255 minutes) and + off (= 0) to show the current state of surveillance during this + session. + + + + + R1--2. + + Platforms with software visible fan + speed sensors must implement them as defined RTAS sensors with the token + value of 9001, which returns a sensor value in revolutions per minute + (RPM). + + + + + R1--3. + + Platforms with software visible voltage + sensors must implement them as defined RTAS sensors with the token value + of 9002, which returns a sensor value in millivolts. + + + + + Hardware Implementation Note: + The notion of a delay, due to the + sensor data acquisition time, may make it desirable to cache sensor data + to avoid interlocking with the service processor. + Software Implementation Note: + Software should not assume that + sensor data returned is a real time reading. + +
+ Example Implementation of Sensors + An example implementation of a platform with a service processor + and four fans and four voltage sensors is represented by the paired + integers ( + token maxindex) in the OF device tree as shown in + . + + + Example - Contents of + <emphasis role="bold"><literal>“rtas-sensors”</literal></emphasis> property + + + + + + + + token + + + + + maxindex + + + + + + + + + (Any sensors withStandardSensor + Tokens)... + + + + + (Associated maxindex + values)... + + + + + + 9000 (surveillance) + + + 0000 + + + + + 9001 (fan-speed) + + + 0003 + + + + + 9002 (voltage) + + + 0003 + + + + +
+ This requires sensors such as those shown in + . + + + Example - Sensor Definitions + + + + + + + + + + sensor + + + + + token + + + + + index + + + + + value + + + + + + + + surveillance + + + 9000 + + + 0000 + + + 0 / 1-255 + + + + + fan#1 fan speed + + + 9001 + + + 0000 + + + fan rpm + + + + + fan#2 fan speed + + + 9001 + + + 0001 + + + fan rpm + + + + + fan#3 fan speed + + + 9001 + + + 0002 + + + fan rpm + + + + + fan#4 fan speed + + + 9001 + + + 0003 + + + fan rpm + + + + + voltage-level #1 + + + 9002 + + + 0000 + + + voltage - mv + + + + + voltage-level #2 + + + 9002 + + + 0001 + + + voltage - mv + + + + + voltage-level #3 + + + 9002 + + + 0002 + + + voltage - mv + + + + + voltage-level #4 + + + 9002 + + + 0003 + + + voltage - mv + + + + +
+ In addition, the properties + “ibm,sensor-9000”, + “ibm,sensor-9001” and + “ibm,sensor-9002” in the + /rtas node that each contain an array of strings. + Each entry in the array contains the location code for the matching + sensor. For example, the first entry of + “ibm,sensor-9001” contains the location + code for fan#1. Location codes are shown in + . Of course, since it is an + abstracted sensor, the entry for + “ibm,sensor-9000” is NULL. +
+ +
+ Power Supply Sensors + + + + R1--1. + + Platforms with multiple software + visible power supply sensors must implement them as defined RTAS sensors + with the token value of 9004, which returns the values defined in + . + + + + + + + Power Supply Sensor Values + + + + + + + + Value + + + + + Status + + + + + + + + 0 + + + Not present + + + + + 1 + + + Present and Not operational + + + + + 2 + + + Status unknown + + + + + 3 + + + Present and operational + + + + +
+ For static 9004 sensors, the maxindex in the + “rtas-sensors” property for the token + 9004 indicates the number of power supplies supported by the platform. In + this case, the property + “ibm,sensor-9004” in the + /rtas node contains the location code for each + index. + For dynamic 9004 sensors, the platform provides the information + about the 9004 indicators as it would for other dynamic sensors. That is, + the platform does not provide the + “ibm,sensor-9004” property and instead + provides the 9004 location code information through the + ibm,get-indices RTAS call, and if the + ibm,get-indices RTAS call returns an index of all-1's + for a 9004 indicator, then the + ibm,get-dynamic-sensor-state RTAS call is used to get + the sensor state, instead of the + get-sensor RTAS call. +
+ +
+ Environmental Sensors + + + + R1--1. + + Platforms which want to allow an + application to analyze their environmental sensors must provide the + property + “ibm,environmental-sensors” in the + /rtas node (see + ). + + + + + The values for this property is a list of integers that are the + token values (token) for the defined environmental sensors and the number + of sensors (maxindex) for that token which are implemented on the + platform. + Architecture Note: + When a sensor is in the + “ibm,environmental-sensors” property and + when the sensor token indices are obtained via the + ibm,get-indices RTAS call, the indices may not be + contiguous for that sensor token (that is, any of the indices between 0 + and the maxindex, inclusive, may be missing). +
+ +
+ Sensor 9005 Global Interrupt Queue Control + State + The 9005 sensor reports the state of the global interrupt server + queue logic of the interrupt presentation controller for the specific + processor making the call (Available Processor Mask (APM) for the PowerPC + interrupt presentation controller). This is used when varying the + processor on and off line. + + + + R1--1. + + Platforms that allow processors to be + brought online or be taken offline dynamically must implement the global + interrupt queue control sensor with a value of 9005 as specified in + . + + + + + R1--2. + + RThe index value for global interrupt + queue control state sensor (9005) must be + (2 + ibm,interrupt-server#-size) - 1- the gserver# of the + global queue to be sensed as given in the + + “ibm,ppc-interrupt-gserver#s” property. + + + + + + Note: on platforms that do not report + “ibm,interrupt-server#-size” property, + the assumed value of the size of the interrupt server number is 8. +
+ +
+ +
+ +
+ +
+ Power Control + + +
+ <emphasis>set-power-level</emphasis> + This RTAS call is used to set the power level of a power domain to + either on or off. + + + + R1--1. + + RTAS must implement the + set-power-level call using the argument call buffer + defined by + . + + + Argument Call Buffer + <emphasis>set-power-level</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + set-power-level + + + + + + Number Inputs + + + + 2 + + + + + + Number Outputs + + + + 2 + + + + + + Power_domain + + + + Token defining the power domain + + + + + + Level + + + + Token for the desired level for this domain + + + + + Out + + + + Status + + + + 0: Success + -1: Hardware Error + -2: Busy, Try again later + 990x:Extended Delay + where x is a number 0-5 (see text below) + + + + + + Actual_level + + + + The power level actually set + + + + +
+
+
+ + + R1--2. + + Power_domain must be a power domain identified in the + OF device tree. + + + + + R1--3. + + Level must be 100 for full power and 0 for + off. + + + + + R1--4. + + The set-power-level call + must return the power level actually set in the + Actual_level output parameter. + Software Implementation Notes: + + + + The set-power-level(0,0) call, if implemented, removes power + from the root domain, turning off power to all domains. The external + events which can turn power back on are platform specific. The RTAS + primitive power-off also removes power from the system, but permits + specifying the events which can turn power back on. + + + + The implemented values for the + Level parameter for each power domain are defined in + the OF device tree. + + + + + + + R1--5. + + The set-power-level RTAS call, when implemented, must + return either a -2 or a 990x return code if the + set-power-level operation specified in the RTAS call + is going to exceed 1 millisecond in duration (where value of x gives a + hint as to the duration of the busy; see text). + + +
+ + A single + set-power-level operation may require an extended + period of time for execution. Following the initiation of the hardware + operation to change the power level, if the + set-power-level call returns prior to successful + completion of the operation, the call returns either a + Status code of -2 or 990x. A + Status code of -2 indicates that RTAS may be capable + of doing useful processing immediately. A + Status code of 990x indicates that the platform + requires an extended period of time, and hints at how much time is + required. Neither the 990x nor the -2 + Status codes implies that the platform has initiated + the operation, but it is expected that the 990x + Status is used only if the operation had been + initiated. + When the 990x + Status is returned, it is suggested that software + delay for 10 raised to the x milliseconds (where x is the last digit of + the 990x return code), before calling + set-power-level with the same power domain token. + However, software may issue the + set-power-level call again either earlier or later + than this. + Software Implementation Note: + In Requirement + , a return code of -2 or 990x + may either mean that the operation was initiated but not completed, or + may mean that the operation was not initiated at all. + Firmware Implementation Notes: + + + + If the RTAS initiates and returns before successful completion + of the operation, then it needs to handle the split of a + set-power-level operation across multiple + calls. + + + + It is the firmware’s responsibility to not return a + Status of 0 (success) until the operation is + complete, and that may require performing an operation such as a delay + operation or querying the hardware for power good status. In the former + case, the firmware needs to save state between the calls to the same + power domain number, until the operation is complete. + + + + The + set-power-level RTAS call may be called to set the + power level of other power domains after the initiation to other domains + and before the operation to those other domains are complete. If + necessary, the + set-power-level call may return a -2 or 990x + Status to those calls without initiating the + operation, if multiple simultaneous operations are not feasible. + + + +
+ +
+ <emphasis>get-power-level</emphasis> + + + + R1--1. + + RTAS must implement the + get-power-level call using the argument call buffer + defined by + . + + + Argument Call Buffer + <emphasis>get-power-level</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + get-power-level + + + + + + Number Inputs + + + + 1 + + + + + + Number Outputs + + + + 2 + + + + + + Power_domain + + + + Token defining the power domain + + + + + Out + + + + Status + + + + 0: Success + -1: Hardware Error + -2: Busy, try again later + -3: Can’t determine current level + + + + + + Level + + + + The current power level for this domain + + + + +
+
+
+ + + R1--2. + + Power_domain must be a power domain identified in the + OF device tree. + Software Implementation Note: The + get-power-level call only returns information about + power levels whose state is readable in hardware. It does not need to + remember the last set state and return that value. + + +
+ +
+ +
+ <emphasis>power-off</emphasis> + This primitive turns power off on a system which is equipped to + perform a software-controlled power off function. + + + + R1--1. + + If software controlled power-off hardware is + present, the + power-off function must turn off power to the + platform, using the argument call buffer described in + . + + + <emphasis>power-off</emphasis> Argument Call Buffer + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + power-off + + + + + + Number Inputs + + + + 2 + + + + + + Number Outputs + + + + 1 + + + + + + Power_on_mask_hi + + + + Mask of events that can cause a power on event - event + mask values [0:31] (right-justified if the cell size is 64 + bits) + + + + + + Power_on_mask_lo + + + + Mask of events that can cause a power on event - event + mask values [32:63] (right-justified if the cell size is 64 + bits) + + + + + Out + + + + Status + + + + On successful operation, does not return + -1: Hardware error + + + + +
+
+
+ + + R1--2. + + If software controlled power-off hardware is + present, + Power_on_mask, which is passed in two parts to permit + a possible 64 events even on 32-bit implementations, + must be a bit mask of power on triggers, or if the + “power-on-triggers” property is absent + from the + /rtas node, a value of 0 must be used for + Power_on_mask_hi and + Power_on_mask_lo. + + + + + R1--3. + + Platforms must omit the + “power-on-triggers” property from the + /rtas node. + + + Implementation Note: The power on triggers, which + were removed from this architecture, are documented in the + , for legacy reasons. + + + Defined Power On Triggers + + + + + + + + Bit + + + + + Event + + + + + + + + 0 + + + Power Switch On + + + + + 2 + + + Lid Open + + + + + 5 + + + Wake Button + + + + + 8 + + + Switch to Battery + + + + + 9 + + + Switch to AC + + + + + 10 + + + Keyboard or mouse activity + + + + + 12 + + + Enclosure Closed + + + + + 13 + + + Ring Indicate + + + + + 14 + + + LAN Attention + + + + + 15 + + + Time Alarm + + + + + 16 + + + Configuration change + + + + + 17 + + + Service Processor + + + + +
+
+
+ + + R1--4. + + For the System Parameters option: If software + controlled power-off hardware is present, the power-off function must + prevent reboot in the event of a later external power recovery with the + platform_auto_power_restart system parameter enabled. + + +
+ +
+ +
+ <emphasis>ibm,power-off-ups</emphasis> + This RTAS call manages the system power-off function in systems + which may have power backed up with an Uninterruptible Power Supply + (UPS). + + + + R1--1. + + For platforms that support a platform + controlled Uninterruptible Power Supply (UPS), the + ibm,power-off-ups function must be implemented, + whether a platform controlled UPS is present or not, using the argument + call buffer described in + . + + + Argument Call Buffer + <emphasis>ibm,power-off-ups</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + ibm,power-off-ups + + + + + + Number Inputs + + + + 0 + + + + + + Number Outputs + + + + 1 + + + + + Out + + + + Status + + + + On successful operation, does not return + -1: Hardware error + + + + +
+
+
+ + + R1--2. + + If a platform controlled UPS is present, + then the + ibm,power-off-ups RTAS call must turn off system + power while enabling platform auto restart upon restoration of system + power, according to the platform_auto_power_restart policy described in + , and must not return, + otherwise, the call must not turn off system power and must not + return. + + + + + R1--3. + + If a platform controlled UPS is not + present, then the + ibm,power-off-ups RTAS call must turn off system + power while enabling platform auto restart upon restoration of system + power, according to the platform_auto_power_restart policy described in + , and must not return, + otherwise, the call must not turn off system power and must not + return. + + +
+ + + Software Implementation Notes: + + + + + Supporting + ibm,power-off-ups, allows a system to be shutdown + due to a report that the system was running under UPS power for systems + with a platform managed UPS. As opposed to + power-off, + ibm,power-off-ups, permits the operating system to + be restarted when power is restored after a loss of external + power. + + + + The report that a system needs to be shutdown due to running + under a UPS would be given by the platform as an EPOW event with EPOW + event modifier being given as, 0x02 = Loss of utility power, system is + running on UPS/Battery, as described in section + . + + + + If the RTAS + ibm,power-off-ups call is supported by the platform, + it will also allow a shutdown with a subsequent restart when power is + restored for systems running with a UPS that is not under platform + control. This presumes that the OS has some external means of recognizing + when running under UPS power to initiate the + ibm,power-off-ups call. + + + +
+ +
+ +
+ Reboot and Flash Update Calls + During execution, it may become necessary to shut down processing + and reboot the system in a new mode. For example, a different OS level + may need to be loaded, or the same OS may need to be rebooted with + different settings of System Environment Variables. + +
+ <emphasis>system-reboot</emphasis> + + + + R1--1. + + RTAS must implement a + system-reboot call which resets all processors and + all attached devices. After reset, the system must be booted with the + current settings of the System Environment Variables (refer to + for more information). + + + + + R1--2. + + The RTAS + system-reboot call must be implemented using the + argument call buffer defined by + . + + + Argument Call Buffer + <emphasis>system-reboot</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + system-reboot + + + + + + Number Inputs + + + + 0 + + + + + + Number Outputs + + + + 1 + + + + + Out + + + + Status + + + + On successful operation, does not return + -1: Hardware error + + + + +
+
+
+
+ + Hardware Implementation Note: + The platform must be able to perform + a system reset and reboot. On a multiprocessor system, this should be a + hard reset to the processors. +
+ +
+ <emphasis>ibm,update-flash-64-and-reboot</emphasis> + The + ibm,update-flash-64-and-reboot function is described + in this section. It does not return to the OS if successful. This call + supports RTAS instantiated in 32 bit mode to access storage at addresses + above 4GB. In an exception to the LPAR Requirement + this call supports block lists + being outside of the Real Mode Area (RMA) as long as the initial block + list is at an address below the limits of the cell size of the + Block_list argument. + + + + R1--1. + + The argument call buffer for the + ibm,update-flash-64-and-reboot RTAS call must + correspond to the definition in + . + + + Argument Call Buffer + <emphasis>ibm,update-flash-64-and-reboot</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + ibm,update-flash-64-and-reboot + + + + + + Number Inputs + + + + 1 + + + + + + Number Outputs + + + + 1 + + + + + + Block_list + + + + A real pointer to a block list of 64 bit entries + + + + + Out + + + + Status + + + + -1: Hardware error + -3: Image unacceptable to update program + -4: Programming failed when partially complete, and the + flash is now corrupted - reboot may fail + -9002: Not authorized + + + + + The + Status of 0 is never returned, because this + RTAS call does not return if successful. + + + + + The -1 return is to cover the case where some condition + prevents RTAS from being able to program the flash at this + time. For example, the flash programming power supply is + disconnected, a low-level security check (for instance a switch + or jumper) fails, or a test programming probe fails for an + unknown reason or the case where the flash has been + successfully updated, but the reboot fails for some + reason. + + + + + The -3 return is to cover the case where embedded + vendor/platform specific information in the image failed to + conform to the required format or content for this platform, + such as the firmware revision number or a CRC or some other + check which was intended to ensure the integrity of the + image. + + + + + The -4 return is to cover the case where the update + failed before the image was fully updated. In this case, the OS + has the responsibility for reporting the failure. + + + + + The -9002 return code is used to indicate that the + partition at the time the call was made was not authorized to + update the flash image. + + + + +
+
+
+ + + R1--2. + + The RTAS + ibm,update-flash-64-and-reboot call + Block_list on platforms that do not present the + “ibm,flash-block-version” property in the + OF + /rtas node must conform to the definition shown in + . + + + Format of Block List + + + + + + Length of + Block_list in bytes + + + + + + + Address of memory area 1 + + + + + Length of memory area 1 + + + + + . . . + + + + + Address of memory area n + + + + + Length of memory area n + + + + +
+
+
+ + + R1--3. + + The + ibm,update-flash-64-and-reboot RTAS call + Block_list must be a sequence of 64 bit cells. + + + + + R1--4. + + Memory blocks referenced in the + ibm,update-flash-64-and-reboot RTAS call + Block_list must reside in System Memory outside that + reserved for firmware (both the RTAS data area and OF’s memory + defined by real-base and real-size). + + + + + R1--5. + + The block list referenced by the + Block_list argument to the + ibm,update-flash-64-and-reboot RTAS call must be in + System Memory below the maximum address supported by the RTAS + instantiated cell size. + + + + + R1--6. + + The addresses of memory blocks referenced + by the + ibm,update-flash-64-and-reboot RTAS call + Block_list must align tn a 4 KB boundary. + + + + + R1--7. + + A memory block, included in the + ibm,update-flash-64-and-reboot RTAS call + Block_list, must not cross a 256MB boundary. + + + + + R1--8. + + The ibm,update-flash-64-and-reboot call must test the + image to make sure it has the right format and is not damaged, update the + flash from the + Block_list and then perform a system reset and + reboot, as for the + system-reboot call. + + +
+ + + Hardware and Software Implementation Note: Platform + specific information should be embedded in the flash images to identify + the firmware unambiguously and to ensure that the firmware operates + correctly on the platform. Such information might include platform board + model and revision numbers covered by the firmware, manufacturer ID, and + firmware revision number used for external display. This information + should include a CRC or other check which ensures the integrity of the + data. + + Software Implementation Notes: + + + + + The execution time for this calls may be in the order of + seconds, rather than “a few tens of microseconds” as noted on + page + . + + + + The RTAS flash update programs should display progress, + completion, and error information while the flash update is underway, if + possible. + + + + The OS does not expect a return from the + ibm,update-flash-64-and-reboot call other than for + cases where the hardware cannot be accessed, the flash image is + unacceptable to the RTAS flash update program, the result of the update + corrupted the flash, or the platform could not be rebooted. + + + +
+ +
+ Flash Update with Discontiguous Block Lists + The property + “ibm,flash-block-version” (see + ) is defined to describe the + following definition and operation of the + Block_list shown in + . + + + Format of Discontiguous + <emphasis>Block_list</emphasis> + + + + + + + VER + + + Length of + Block_list in bytes + + + + + + + Address of + Block_list extension + + + + + Address of memory area 1 + + + + + Length of memory area 1 + + + + + Address of memory area 2 + + + + + Length of memory area 2 + + + + + - - - + + + + + Address of memory area n + + + + + Length of memory area n + + + + +
+ Where: + + + + VER (1 byte in length) indicates the version of the + Block_list. + + + + Length of the + Block_list in bytes indicates the size of this + Block_list, including the header cell and the cell + with the address of the + Block_list extension. + + + + Address of the + Block_list extension indicates the location of the + next + Block_list. 0x00 indicates no additional + Block_list extension. + + + + Address of memory area 1 (2 . . . n) indicates the location of + this portion of the flash image. + + + + Length of memory area 1 (2 . . . n) indicates the length of this + portion of the flash image. + + + + + + + R1--1. + + If VER is 0x01, the + Block_list must be formatted as in + . + + + + + R1--2. + + If VER is 0x01, the + Block_list parameter in the function call or the + Address of the + Block_list extension, if not 0x00, must point to a + Block_list cell containing VER and Length of the + Block_list. + + + + + R1--3. + + If VER is 0x01, the Address of the + Block_list extension parameter must be 0x00 to + indicate that there are no further extensions. + + + + + R1--4. + + The VER byte must exist in the + Block_list and in each + Block_list extension. + + + + + R1--5. + + If the platform supports the property + “ibm,flash-block-version” with value + 0x01, it must also support the default value 0x00. + + + + + The + Block_list format allows flexibility in the size and + page requirements for the block lists. Page alignment is not required for + the lists or extensions. They may run across contiguous pages with the + control being the length of each list or extension and with the end being + the 0x00 pointer. +
+ +
+ <emphasis>ibm,manage-flash-image</emphasis> + + The + ibm,manage-flash-image RTAS call supports systems + having a “temporary” and “permanent” flash image + areas. It allows the user to commit the temporary flash image by copying + it to the permanent image area. It also allows the user to reject the + temporary flash image by overwriting it with the permanent flash + image. + + + + R1--1. + + The RTAS + ibm,manage-flash-image call must be implemented using + the argument call buffer defined by + . + + + Argument Call Buffer + <emphasis>ibm,manage-flash-image</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for ibm,manage-flash-image + + + + + + Number of Inputs + + + + 1 + + + + + + Number of Outputs + + + + 1 + + + + + + Image to Commit + + + + 0: Reject “temporary” firmware image + 1: Commit “temporary” firmware image + + + + + + + + + + Out + + + + Status + + + + 0: Success + -1: Hardware Error + -2: Busy + -3: Parameter Error + -9001: Cannot Overwrite the Active Firmware Image + Error + -9002 Not Authorized + 990x: Extended Delay + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + R1--2. + + The ibm,manage-flash-image RTAS call must not change the + system flash and must return a + Status of value -9001 when called with a request to + reject the temporary firmware image when not running on the permanent + firmware image. + + + + + R1--3. + + The ibm,manage-flash-image RTAS call must not change the + system flash and must return a + Status of value -9001 when called with a request to + commit the temporary firmware image when not running on the temporary + firmware image. + + +
+ + + Platform Implementation Note: In platforms supporting + two firmware image areas, platforms always apply updates to the temporary + image area. The RTAS call + ibm,manage-flash-image is the normal means by which a + temporary image is committed to the permanent side. However, if a + platform is running from a temporary image when an update is to be + applied, then the platform may automatically commit the current temporary + image to the permanent side to allow the new image to be updated to the + temporary image area. The + ibm,validate-flash-image RTAS call is used to + determine what would result from an attempt to update a FLASH image + taking in to account the image to be updated and the current image being + executed. +
+ +
+ <emphasis>ibm,validate-flash-image</emphasis> + + The + ibm,validate-flash-image RTAS call allows OS service + code to determine if a candidate flash image is valid, if the partition + has authority to update the flash image, and what the resulting flash + levels will be after performing the update. + + + + R1--1. + + The ibm,validate-flash-image RTAS call must be + implemented using the argument call buffer described in + . + + + Argument Call Buffer + <emphasis>ibm,validate-flash-image</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + ibm,validate-flash-image + + + + + + Number of Inputs + + + + 2 + + + + + + Number of Outputs + + + + 2 + + + + + + Buffer Ptr + + + + Real address of minimum 4 K buffer, contiguous in real + memory + + + + + + Buffer Size + + + + Size in bytes of Buffer + + + + + Out + + + + Status + + + + 990x: Extended Delay + 0: Success + -1: Hardware Error + -2: Busy + -3: Parameter Error + -9002: Not authorized + + + + + + + + + + + + + + + + + + + + + + + + + + Update Results Token + + + + Token to identify what will happen if update is attempted + with this token, described in Requirement + . + + + + +
+
+
+ + + R1--2. + + The + ibm,validate-flash-image RTAS call + Buffer Ptr parameter must be a real address + representing the starting address of a minimum 4 K buffer, contiguous in + real memory. + + + + + R1--3. + + On input, the + ibm,validate-flash-image RTAS call buffer pointed to + by the + Buffer Ptr parameter must contain the first 4 KB of + the candidate flash image to be validated. + + + + + R1--4. + + For the LPAR option: The + ibm,validate-flash-image RTAS call buffer described + in Requirement + must be in the partition's + RMA. + + + + + R1--5. + + On exit from the + ibm,validate-flash-image RTAS call, RTAS must place + the following data in the buffer, starting at the address in the + Buffer Ptr parameter: + + + + “MI” <sp> current-T-image <sp> + current-P-image <0x0A> + + + + “MI” <sp> new-T-image <sp> new-P-image + <0x00> + + + + “ML” <sp> current-T-image + <sp> current-P-image <0x0A> + + + + “ML” <sp> new-T-image <sp> + new-P-image <0x00> + + + + In Requirement + , current-T-image and + current-P-image are the fixpack microcode image names currently on the + Temporary and Permanent sides, respectively, and new-T-image and + new-P-image are the fixpack microcode image names that will exist in + flash after a successful flash update with the candidate image. + If the current flash image level is not known, the value provided + for current-T-image and/or current-P-image is + “UNKNOWN”. + If the flash update function would not succeed, the values of + new-T-image and new-P-image are the same as current-T-image and + current-P-image, respectively. + + + + + R1--6. + + On exit from the + ibm,validate-flash-image RTAS call, the + Update Results Token output must be updated with one + of the values in + . This list is in order; + firmware must provide the first value in the list which would be true if + an update is attempted: + + + Update Results Token Values + + + + + + + + Token + + + + + Description + + + + + + + + 1 + + + No update done, partition does not have authority to + perform flash update + + + + + 2 + + + No update done, the candidate image is not valid for this + platform + + + + + 3 + + + Current fixpack level is unknown, the new-T-image and + new-P-image identifies show what will exist in flash after + update with this image + + + + + 4 + + + Current T side will be committed to P side before being + replace with new image, and the new image is downlevel from + current image + + + + + 5 + + + Current T side will be committed to P side before being + replaced with new image + + + + + 6 + + + T side will be updated with a downlevel image + + + + + 0 + + + T side will be updated with a newer or identical + image + + + + +
+
+
+
+ +
+ +
+ <emphasis>ibm,activate-firmware</emphasis> + + The + ibm,activate-firmware allows an OS to activate a new + version of firmware that has been updated in the platform flash memory + after the partition was started. + + + + R1--1. + + The ibm,activate-firmware RTAS call must be implemented + using the argument call buffer described in + . + + + Argument Call Buffer + <emphasis>ibm,activate-firmware</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + ibm,activate-firmware + + + + + + Number of Inputs + + + + 0 + + + + + + Number of Outputs + + + + 1 + + + + + Out + + + + Status + + + + 990x: Extended Delay + 0: Success + -1: Hardware Error + -2: Busy, try again later + -3: Parameter Error + -9001: No valid FW available to activate + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ + + Software implementation Note: The OS should expect + that a number of calls may be required to accomplish firmware activation, + with “Busy, try again later” or “Extended Delay” + return codes from all but the last call. The new version of firmware is + not in use until a “Success” return. The OS may interleave + calls to other RTAS functions between calls to this function. +
+ +
+ +
+ SMP Support + In a Symmetric Multiprocessor (SMP) system, the platform needs the + ability to synchronize the clocks on all the processors. The timebase + registers are synchronized by the platform before CPUs are given to the + OS. + + + + R1--1. + + (Merged into Requirement + ) + + + + + R1--2. + + (Merged into Requirement + ) + + + + +
+ <emphasis>stop-self</emphasis> + + The stop-self primitive causes a processor thread to stop + processing OS or user code, and to enter a state in which it is only + responsive to the + start-cpu RTAS primitive. This is referred to as the + RTAS + stopped state. + + + + R1--1. + + A stop-self RTAS call must place the calling processor + thread in the + RTAS + stopped state. This call must be implemented using + the argument call buffer defined by + . + + + + + R1--2. + + RTAS must insure that a processor thread + in the RTAS + stopped state does not checkstop or otherwise fail if + a machine check or soft reset exception occurs. Processor threads in this + state receive the exception, but must perform a null action and remain in + the RTAS + stopped state. + + + Argument Call Buffer + <emphasis>stop-self</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + stop-self + + + + + + Number Inputs + + + + 0 + + + + + + Number Outputs + + + + 1 + + + + + Out + + + + Status + + + + If successful, this call does not return + -1: Hardware Error + + + + +
+ Software Implementation Note: If this call succeeds, it does not + return. The CPU thread waits for some other processor thread to issue a + start-cpu targeted to this processor thread. + + Firmware Implementation Note: In an LPAR environment + the state of the interrupt sub-system associated with this processor on + entry to this call cannot be trusted. Although interrupts are masked as + part of the RTAS call protocol, the caller may have left the processor + configured as an interrupt server. Therefore, interrupt signals may be + pending within the processor’s interrupt management area. These + conditions need to be cleared prior to allocating this processor to + another partition. +
+
+ + + R1--3. + + Platforms which support the enhanced + stop-self RTAS behavior must include the name only + “ibm,integrated-stop-self” OF property, + under the + /rtas node, and prior to placing a processor in the + stopped state, flush and disable any caches/memory exclusively used by + the issuing processor. + + Architecture Note: In Requirement + , an exclusively used cache + means that no other running processor currently needs the cache for + normal operation, even if the cache could potentially be shared with + other processors. An exclusively used memory means any main memory + allocated local to the processor thread and thus not accessible by other + processor threads. + + + + + R1--4. + + Execution of the + stop-self call by the last active processor thread + must cause the firmware to recover all the resources owned by the + executing OS image for use per platform policy. + + +
+ +
+ +
+ <emphasis>start-cpu</emphasis> + + The start-cpu primitive is used to cause a processor thread which + is currently in the RTAS + stopped state to start processing at an indicated location. + + + + R1--1. + + A start-cpu RTAS call must remove the processor thread + specified by the + CPU_id parameter from the RTAS + stopped state. This call must be implemented using + the argument call buffer defined by + . + + + + + R1--2. + + The processor thread specified by the + CPU_id parameter must be in the RTAS + stopped state entered because of a prior call by that + processor to the + stop-self primitive. + + + + + R1--3. + + When a processor thread exits the RTAS + stopped state, it must begin execution in real mode, + with the MSR in the same state as from a system reset interrupt (except + for the MSRHV bit which is on if not running under a hypervisor + and off if running under a hypervisor) at the real location indicated by + the + Start_location parameter, with register R3 set to the + value of parameter + Register_R3_contents and the MSR as defined in + . All other register contents + are indeterminate. + + + Argument Call Buffer + <emphasis>start-cpu</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + start-cpu + + + + + + Number Inputs + + + + 3 + + + + + + Number Outputs + + + + 1 + + + + + + Cpu_id + + + + Token identifying the processor thread to be started, + obtained from the value of the + + “ibm,ppc-interrupt-server#s” property for + the CPU in the OF device tree + + + + + + Start_location + + + + Real address at which the designated CPU begins + execution + + + + + + Register_R3_contents + + + + Value which is loaded into Register R3 before beginning + execution at Start_location + + + + + Out + + + + Status + + + + 0: Success + -1: Hardware Error + + + + +
+
+
+
+ + + Note: Requirement + applies to the start-cpu RTAS + call. At the completion of start-cpu, the caches to be used by the + specified processor must have been initialized and the state bits made + accurate prior to beginning execution at the start address. + + + Machine State Register (MSR) State in Started + Processor + + + + + + + + + + + + Bit Number + + + + + Name + + + + + Initial Value upon start by + start-cpu + + + + + Bit Number + + + + + Name + + + + + Initial Value upon start by + start-cpu + + + + + + + + 0 + + + SF + + + 0 if RTAS instantiated in 32 bit mode 1 if RTAS + instantiated in 64 bit mode + + + 53 + + + SE + + + 0 + + + + + 1 + + + Reserved + + + 0 + + + 54 + + + BE + + + 0 + + + + + 2 + + + Reserved + + + 0 + + + 55 + + + FE1 + + + Implementation Dependent + + + + + 3 + + + HV + + + 0 if running under hypervisor firmware, 1 if running in + “SMP” mode + + + 56 + + + US + + + 0 + + + + + 4:46 + + + Reserved + + + 0 + + + 57 + + + Reserved + + + 0 + + + + + 47 + + + ILE + + + 0 + + + 58 + + + IR + + + 0 + + + + + 48 + + + EE + + + 0 + + + 59 + + + DR + + + 0 + + + + + 49 + + + PR + + + 0 + + + 60 + + + Reserved + + + 0 + + + + + 50 + + + FP + + + Implementation Dependent + + + 61 + + + PMM + + + 0 + + + + + 51 + + + ME + + + 1 + + + 62 + + + RI + + + 0 + + + + + 52 + + + FE0 + + + Implementation Dependent + + + 63 + + + LE + + + 0 + + + + +
+
+ +
+ <emphasis>query-cpu-stopped state</emphasis> + + The query-cpu-stopped-state primitive is used to query a different + processor thread to determine its status with respect to the RTAS stopped + state. + + + + R1--1. + + A query-cpu-stopped-state RTAS call must return the + CPU_status of the processor thread specified by the + Cpu_id parameter. This call must be implemented using + the argument call buffer defined by + . + + + Argument Call Buffer + <emphasis>query-cpu-stopped-state</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + query-cpu-stopped-state + + + + + + Number Inputs + + + + 1 + + + + + + Number Outputs + + + + 2 + + + + + + Cpu_id + + + + Token identifying the processor thread to be queried, + obtained from the value of the + + “ibm,ppc-interrupt-server#s” property for + the CPU in the OF device tree + + + + + Out + + + + Status + + + + 0: Success + -1: Hardware Error + -2: Hardware Busy, Try again later + + + + + + CPU_status + + + + 0: The processor thread is in the RTAS stopped + state + 1: + stop-self is in progress + 2: The processor thread is not in the RTAS stopped + state + + + + +
+
+
+
+ + + Firmware Implementation Note: RTAS serialization may + be required between the + stop-self and the + query-cpu-stopped-state calls. + + Software Implementation Note: The OS performs a + stop-self on the desired processor thread, then + periodically call + s query-cpu-stopped-state on another processor thread + until the desired processor thread is stopped. Before calling + set-power-level to power off the desired processor, + or isolate the logical CPU, the platform requires that all processor + threads be in the RTAS stopped state. +
+ +
+ +
+ Miscellaneous RTAS Calls + + +
+ <emphasis>ibm,os-term</emphasis> + + This RTAS call is provided for the OS to indicate to the platform + that it has terminated normal operation. A string of information is + passed to the platform. + A call to the + ibm,os-term RTAS function implies the following to + the platform: + + + + Any platform reporting and recovery policies may now take + effect. + + + + The OS may no longer be issuing periodic + event-scan requests, so surveillance monitoring does + not continue. + + + + All devices not marked + “used-by-rtas” are released by the OS + (including, for example, native serial ports used by a service + processor). + + + + The OS no longer responds to any EPOW events, so it is up to the + platform to take any appropriate actions for such events. + + + + Due to the above implications, the platform may take actions (for + example, a service processor “call home”) that could conflict + with normal processing of further RTAS requests. However, since the OS + has entered a “live halt” state, the list of RTAS functions + that it still needs is relatively small. The list of RTAS functions that + the platform might expect to see after + ibm,os-term includes: + + + + nvram-fetch + + + + nvram-store + + + + display-character + + + + power-off + + + + ibm,power-off-ups + + + + system-reboot + + + + check-exception for machine checks (Although the OS + may still react normally to a machine check condition by calling + check-exception, it might not process a returned + error log. It is allowable for + check-exception to not return an extended log when in + this state.) + + + + If a platform has a service processor, and a policy has been + established for actions to be taken by the service processor upon + receiving notice of OS termination, the service processor may complete + those actions and a return to the CPU from this call may never occur. If + the call does return, the OS performs its own termination policy. + + When the platform supports extended + ibm,os-term behavior, the return to the RTAS will + always occur unless there is a kernel assisted dump active as initiated + by an + ibm,configure-kernel-dump call. + Platforms capable of supporting this extended + ibm,os-term behavior will so indicate by presenting + the + “ibm,extended-os-term” RTAS property in + the OF device tree. + + + + R1--1. + + RTAS must implement an + ibm,os-term call using the argument call buffer + defined by + to receive a termination string + from the OS. + + + Argument Call Buffer + <emphasis>ibm,os-term</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + ibm,os-term + + + + + + Number Inputs + + + + 1 + + + + + + Number Outputs + + + + 1 + + + + + + Pointer to String + + + + NULL terminated string + + + + + Out + + + + Status + + + + 0:success + -1:hardware error + -2:hardware busy, try again later + + + + + + + + + + + + + + +
+ + Platform Implementation Note: The string should be + maintained in an error log which could be made accessible to a service + location or saved in the platform for later remote access. +
+
+ + + R1--2. + + The ibm,os-term call must disable surveillance. + + + + + R1--3. + + During the machine check and soft reset + handlers, the platform must support access to the + ibm,os-term RTAS function. + + + + + R1--4. + + If the + ibm,os-term call does not return to the caller, the + platform must honor the partition_auto_restart system parameter + value. + + + + + R1--5. + + For platforms supporting extended + ibm,os-term behavior, the + ibm,os-term call must always return unless there is + an active kernel assisted dump configured as specified by an + ibm,configure-kernel-dump RTAS call. + + +
+ + + Platform implementation note: The + ibm,os-term RTAS call allows for the case where the + OS and platform may share an I/O device such as a TTY where the OS would + have use of the device normally, and the platform use when the OS has + terminated, such as to implement an error reporting call home function + both in the OS and the platform. For proper sharing in such a case where + extended behavior is supported, when the primary partition console is + also used for the call-home by the platform, the platform should not + initiate the call home until after the partition shuts down. +
+ +
+ <emphasis>Ibm,exti2c</emphasis> + + For support of platforms which require an external + I2C bus, a special port to the service processor is + required. The EXTI2C option is designed to control specific external + devices. Designers cannot assume that an arbitrary + I2C device may be substituted. + The + ibm,exti2c call provides a single channel to the + I2C bus. Through this channel, software can read or + write up to 256 bytes from/to an addressed resource within an address + space between X’000000 and X’FFFFFF. Reference the + specification for the specific I2C device to determine what effect such operations + may have. + The Buffer Pointer argument is used to manage this channel across + multiple + ibm,exti2c RTAS calls. If the input Buffer Pointer + value on a call is zero, the state of the channel is reset and any + outstanding I2C operation is aborted. If the input Buffer Pointer + has a different value from that of the last call, a new operation is + started, with any previous operation being aborted. An input Buffer + Pointer value that is the same as that used on the previous call + indicates a continuation of the last operation, given that the + Status of the last call was not 0 (success) or -1 + (hardware error). These terminating statuses reset the channel. + Using software must manage serialization to the + ibm,exti2c channel across multiple calls for the same + I2C operation. + A single + ibm,exti2c operation may require an extended period + of processing by background hardware. During this time, RTAS returns + either a + Status code of -2 or 990x. A + Status of -2 indicates that RTAS may be capable of + doing useful processing immediately. + A + Status code of 990x indicates that the platform + requires an extended period of time to perform the operation. It is + suggested that software delay for 10 raised to the x milliseconds before + calling + ibm,exti2c with the same Buffer Pointer value, + however, software may call again earlier or later. + A + Status code of -1 indicates either a general error + associated with the local + I2C hardware (service processor) or that the channel + has been corrupted due to other error conditions not associated with the + I2C operation. If the buffer is changed, as when an + error code is returned, the RTAS + Status code is 0 (success). + + + + R1--1. + + For the EXTI2C option: RTAS must implement an + ibm,exti2c call using the argument call buffer + defined by + to allow communications with + special hardware. + + + ibm,exti2c Argument Call Buffer + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + ibm,exti2c + + + + + + Number Inputs + + + + 1 + + + + + + Number Outputs + + + + 1 + + + + + + Buffer Pointer + + + + Real Address of data buffer + + + + + Out + + + + Status + + + + 0:Success + -1:hardware error + -2:hardware busy, try again later + -3: Parameter error + 990x:Extended delay where x is a number 0-5 + + + + + + + + + + + + + + + + + + + +
+
+
+ + + R1--2. + + For the EXTI2C option: The Buffer Pointer must point + to a contiguous real storage area large enough to contain the + I2C command and any associated data (maximum of 261 + bytes). + + + + + R1--3. + + For the EXTI2C option: The Buffer format for the + write operation must be as defined in + . + + + EXTI2C Buffer Write Operation Format + + + + + + + + + Condition + + + + + Byte # + + + + + Content + + + + + + + + On Call + + + 0 + + + 0x00 + + + + + 1-3 + + + Address of I2C resource + + + + + 4 + + + Length of op. (1-255 with 0 specifying 256) + + + + + 5... + + + Data + + + + + On Return - I2C OK + + + 0 + + + Buffer unmodified + + + + + 1-3 + + + + + 4 + + + + + 5... + + + + + On Return - I2C error + + + 0 + + + 0x01 + + + + + 1-3 + + + Address of I2C resource + + + + + 4 + + + I2C operation error code + + + + +
+ + Firmware and Software Implementation Note: When the + ibm,exti2c RTAS call write operation returns after + the operation has been enqueued by the firmware but prior to completion + by the hardware (therefore the operation status is truly not known), the + ibm,exti2c RTAS call can return a + Status of 0 (success) with the buffer + unmodified. +
+
+ + + R1--4. + + For the EXTI2C option: The Buffer format for a read + operation, if supported, must be as defined in + . + + + EXTI2C Buffer Read Operation Format (Optional) + + + + + + + + + Condition + + + + + Byte # + + + + + Content + + + + + + + + On Call + + + 0 + + + 0x80 + + + + + 1-3 + + + Address of I2C resource + + + + + 4 + + + Length of op. (1-255 with 0 specifying 256) + + + + + 5... + + + Data + + + + + On Return - I2C OK + + + 0 + + + 0x80 + + + + + 1-3 + + + Address of I2C resource + + + + + 4 + + + Length of op. (1-255 with 0 specifying 256) + + + + + 5... + + + Data + + + + + On Return - I2C error + + + 0 + + + 0x81 + + + + + 1-3 + + + Address of I2C resource + + + + + 4 + + + I2C operation error code + + + + +
+
+
+ + + R1--5. + + For the EXTI2C option: If read operations are not + supported and a read operation is attempted, then the platform must + return a + Status of -3. + + + + + R1--6. + + For the EXTI2C option: The maximum total Extended + Delay imposed by the + ibm,exti2c command for a single + I2C operation must be less than 2 seconds. + + + + + R1--7. + + For the EXTI2C option: When the + ibm,exti2c RTAS call returns an EXTI2C buffer + containing an I2C operation error code, the RTAS + Status code must be 0 (success). + + +
+ + + Firmware and Software Implementation Note: When the + ibm,exti2c RTAS call returns after the operation has + been enqueued by the firmware but prior to completion by the hardware + (therefore the operation status is truly not known), the + ibm,exti2c RTAS call can return a + Status of 0 (success) with the buffer + unmodified. +
+ +
+ +
+ PowerPC External Interrupt Option + The RTAS calls used to access the facilities of the PowerPC + External Interrupt option need not be serialized by the calling OS. Other + RTAS rules such as being called in real mode with interrupts disabled + still apply. + + Note: These RTAS calls make the PowerPC External + Interrupt option Logical Partition (LPAR) ready. + +
+ <emphasis>ibm,get-xive</emphasis> + + + + R1--1. + + For the PowerPC External Interrupt option: RTAS must + implement an + ibm,get-xive call using the argument call buffer + defined by + . + + + + + R1--2. + + For the PowerPC External Interrupt option: The + ibm,get-xive call must be reentrant to the number of + processors on the platform. + + + + + R1--3. + + For the PowerPC External Interrupt option: The + ibm,get-xive argument call buffer for each + simultaneous call must be physically unique. + + + + + R1--4. + + For the PowerPC External Interrupt option: The + ibm,get-xive call must return the current values of + the server number and priority fields, as set by the last + ibm,set-xive call (priority initialized to least + favored level by firmware at boot), of the External Interrupt Vector + Entry associated with the interrupt number provided as an input argument + unless prevented by Requirement + . + + + + + R1--5. + + For the PowerPC External Interrupt option: The + ibm,get-xive call must return the + Status of -3 (Argument Error) for an unimplemented + Interrupt # (not reported via an + “interrupt-ranges” property). + + + + + R1--6. + + For the PowerPC External Interrupt option combined with the + Platform Reserved Interrupt Priority Level option: The + ibm,get-xive call must return the + Status of -3 (Argument Error) for an platform + reserved interrupt priority (reported via an the + + “ibm,plat-res-int-priorities” property). + + + Argument Call Buffer + <emphasis>ibm,get-xive</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + ibm,get-xive + + + + + + Number Inputs + + + + 1 + + + + + + Number Outputs + + + + 3 + + + + + Interrupt # + + + From + + “interrupt-ranges” property + + + + + Out + + + + Status + + + + 0: Success + -1: Hardware Error + -3: Argument Error (Optional) + + + + + + Server # + + + + 0x0 - 2 + “ibm,interrupt-server#-size” + + + + + + + Priority + + + + 0x0 - 0xff + + + + +
+
+
+
+ +
+ +
+ <emphasis>ibm,set-xive</emphasis> + + + + R1--1. + + For the PowerPC External Interrupt option: RTAS must + implement an + ibm,set-xive call using the argument call buffer + defined by + . + + + + + R1--2. + + For the PowerPC External Interrupt option: The + ibm,set-xive call must be reentrant to the number of + processors on the platform. + + + + + R1--3. + + For the PowerPC External Interrupt option: The + ibm,set-xive argument call buffer for each + simultaneous call must be physically unique. + + + + + R1--4. + + For the PowerPC External Interrupt option: The + ibm,set-xive call must set values of the server + number and priority fields of the External Interrupt Vector Entry (XIVE) + and/or firmware saved priority value (if the interrupt source controller + does not use an interrupt Enable Register and the interrupt source is + masked off, either due to a previous + ibm,int-off call or because the interrupt source was + never enabled with an + ibm,int-on call since boot), associated with the + interrupt number provided as an input argument unless prevented by + Requirement + . + + + + + R1--5. + + For the PowerPC External Interrupt option: The + ibm,set-xive call must return the + Status of -3 (Argument Error) for an unimplemented + Interrupt number. + + + + + R1--6. + + + For the PowerPC External Interrupt plus the Platform Reserved + Interrupt Priority Level option: The + ibm,set-xive call must return the + Status of -3 (Argument Error) for an reserved + Priority value (as reported via an + + “ibm,plat-res-int-priorities” property). + + + Argument Call Buffer + <emphasis>ibm,set-xive</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + ibm,set-xive + + + + + + Number Inputs + + + + 3 + + + + + + Number Outputs + + + + 1 + + + + + + Interrupt # + + + + Interrupt number from appropriate OF device tree + property + + + + + + Server # + + + + 0x00 - 2 + + “ibm,interrupt-server#-size” + + + + + + Priority + + + + 0x00 - 0xFF + + + + + Out + + + + Status + + + + 0: Success + -1: Hardware Error + -3 Argument Error (Optional) + + + + +
+
+
+
+ +
+ +
+ <emphasis>ibm,int-off</emphasis> + + + + R1--1. + + For the PowerPC External Interrupt option: RTAS must + implement an + ibm,int-off call using the argument call buffer + defined by + . + + + + + R1--2. + + For the PowerPC External Interrupt option: The + ibm,int-off call must be reentrant to the number of + processors on the platform. + + + + + R1--3. + + For the PowerPC External Interrupt option: The + ibm,int-off argument call buffer for each + simultaneous call must be physically unique. + + + + + R1--4. + + For the PowerPC External Interrupt option: The + ibm,int-off call must disable interrupts from the + interrupt source associated with the interrupt number provided as an + input argument unless prevented by Requirement + . + + + + + R1--5. + + For the PowerPC External Interrupt option: If the + interrupt source controller uses an Interrupt Enable Register, the + ibm,int-off call must reset the mask bit associated + with the specified interrupt number; or if the interrupt source + controller does not use an interrupt Enable Register, the + ibm,int-off call must save the priority value of the + XIVE for later restoration by the + ibm,int-on call, or presentation by the + ibm,get-xive call and set the priority value of the + XIVE to the least favored priority value (0xFF), unless prevented by + Requirement + . + + + + + R1--6. + + For the PowerPC External Interrupt option: The + ibm,int-off call must return the + Status of -3 (Argument Error) for an unimplemented + Interrupt number. + + + Argument Call Buffer + <emphasis>ibm,int-off</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + ibm,int-off + + + + + + Number Inputs + + + + 1 + + + + + + Number Outputs + + + + 1 + + + + + + Interrupt # + + + + Interrupt number from appropriate OF device tree + property + + + + + Out + + + + Status + + + + 0: Success + -1: Hardware Error + -3 Argument Error (Optional) + + + + +
+
+
+
+ +
+ +
+ <emphasis>ibm,int-on</emphasis> + + + + R1--1. + + For the PowerPC External Interrupt option: RTAS must + implement an + ibm,int-on call using the argument call buffer + defined by + . + + + + + R1--2. + + For the PowerPC External Interrupt option: The + ibm,int-on call must be reentrant to the number of + processors on the platform. + + + + + R1--3. + + For the PowerPC External Interrupt option: The + ibm,int-on argument call buffer for each simultaneous + call must be physically unique. + + + + + R1--4. + + For the PowerPC External Interrupt option: The + ibm,int-on call must enable interrupts from the + interrupt source associated with the interrupt number provided as an + input argument unless prevented by Requirement + . + + + + + R1--5. + + For the PowerPC External Interrupt option: If the + interrupt source controller uses an Interrupt Enable Register, the + ibm,int-on call must set the mask bit associated with + the specified interrupt number; or if the interrupt source controller + does not use an interrupt Enable Register, the + ibm,int-on call must restore the XIVE priority value + saved by the previous + ibm,int-off call (initialized by the firmware to the + least favored level at boot) unless prevented by Requirement + . + + + + + R1--6. + + For the PowerPC External Interrupt option: The + ibm,int-on call must return the + Status of -3 (Argument Error) for an unimplemented + Interrupt number. + + + Argument Call Buffer + <emphasis>ibm,int-on</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + ibm,int-on + + + + + + Number Inputs + + + + 1 + + + + + + Number Outputs + + + + 1 + + + + + + Interrupt # + + + + Interrupt number from appropriate OF device tree + property + + + + + Out + + + + Status + + + + 0: Success + -1: Hardware Error + -3 Argument Error (Optional) + + + + +
+
+
+
+ +
+ +
+ MSI Support + This section describes the RTAS calls required when the MSI option + is implemented. See + for other platform requirements + for the MSI option. + The Message Signaled Interrupt (MSI) and Enhanced MSI (MSI-X) + capability of PCI IOAs in many cases allows for greater flexibility in + assignment of external interrupts to IOAs than the predecessor Level + Sensitive Interrupt (LSI) capability, and in some cases allows the + treatment of MSIs + + This architecture will refer generically to the MSI and MSI-X + capabilities as simply “MSI,” except where differentiation + is required. + as a resource pool that is reassigned based on availability of + MSIs and the need of an IOA function for more interrupts than initially + assigned. Platforms that implement the MSI option implement the + ibm,change-msi and + ibm,query-interrupt-source-number RTAS calls. + +
+ <emphasis>ibm,change-msi</emphasis> + The OS uses the + ibm,change-msi RTAS call to query the initial number + of MSIs assigned to a PCI configuration address (that is, to an IOA + function) and to request a change in the number of MSIs assigned, when + the platform allows for dynamic reassignment of MSIs for the IOA + function. The + ibm,change-msi RTAS call allows the caller to allow + the platform to select MSI or MSI-X, to specifically select MSI or MSI-X + or, if LSIs are allocated by the firmware for the IOA function, to change + to LSI (by removal of the MSIs assigned). The interrupt source numbers + assigned to an IOA function are queried via the + ibm,query-interrupt-source-number RTAS call. The + ibm,query-interrupt-source-number RTAS call is called + iteratively, once for each interrupt assigned to the IOA function. The + interrupt source numbers returned by the + ibm,query-interrupt-source-number RTAS call are the + numbers used to control the interrupt as in the + ibm,get-xive, + ibm,set-xive, + ibm,int-on, and + ibm,int-off RTAS calls. + If a device driver is willing to live with the platform-assigned + initial number of MSIs, then the device driver does not need to use the + ibm,change-msi RTAS call, and can instead use the + ibm,query-interrupt-source-number RTAS call to + determine the number of interrupts assigned to each IOA function. + An OS may abandon the effort to change the MSIs for a given + configuration address after the first call to + ibm,change-msi and prior to a call which gets a + status back indicating completion, by calling again with the same PCI + configuration address but with a + Function number of 2 (set to default number of + interrupts) and a + Sequence Number of 1. RTAS never returns a + Status of -2 or 990x when the call is made with a + Function number of 2. + If an OS successfully changes the number of interrupts, then it + should consider removing the increase when it deconfigures the IOA + function, especially if it starts with zero and wants to be backward + compatible with older device drivers that may not understand MSIs. To + remove all MSIs, set the Requested Number of Interrupts to zero. But it + should be noted, that once set to zero, there is no guarantee that on a + future request there will be any MSIs available to assign from the pool. + Adding MSIs to an IOA function which has LSIs assigned disables those + LSIs but does not remove them, and then removing the MSIs that replaced + the LSIs re-uses the same (previously removed) LSIs (mapped to the same + LSI source numbers as the previous LSI source numbers). + The presence of the + “ibm,change-msix-capable” property + specifies that the platform implements the version of this RTAS call that + allows + Number Outputs equal to 4 and + Functions 3 and 4. + If the + ibm,change-msi RTAS call is made with + Number Outputs equal to 4 or with + Function equal to 3 or 4 when the + “ibm,change-msix-capable” property does + not exist in the + /rtas node, then the call will return a + Status of -3 (Invalid Parameter). Specifying + Function 3 (MSI) also disables MSI-X for the + specified IOA function, and likewise specifying + Function 4 (MSI-X) disables MSI for the IOA function. + It is unnecessary to specify a + Requested Number of Interrupts of zero when switching + between MSI and MSI-X. Specifying the + Requested Number of Interrupts to zero for either + Function 3 or 4 removes all MSI & MSI-X + interrupts from the IOA function. It is permissible to use LSI, MSI and + MSI-X on different IOA functions. + The default (initial) assignment of interrupts is defined in + . + + + + R1--1. + + For the MSI option: The platform must implement the + ibm,change-msi call using the argument call buffer + defined by + . + + + Argument Call Buffer + <emphasis>ibm,change-msi</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + ibm,change-msi. + + + + + + Number Inputs + + + + 6 + + + + + + Number Outputs + + + + 3 or 4, when the + + “ibm,change-msix-capable” property is + present, 3 otherwise. + + + + + + Config_addr + + + + Configuration Space Address (Register field set to + 0) + + + + + + PHB_Unit_ID_Hi + + + + Represents the most-significant 32-bits of the Unit ID of + the PHB that corresponds to the + config_addr + + + + + + PHB_Unit_ID_Low + + + + Represents the least-significant 32-bits of the Unit ID + of the PHB that corresponds to the + config_addr + + + + + + Function + + + + Determines action of this call: + 0: Query only (only return actual number of MSI or MSI-X + interrupts assigned to the PCI configuration address). + 1: If + Number Outputs is equal to 3, request to + set to a new number of MSIs (including set to 0). + If the + + “ibm,change-msix-capable” property exists + and + Number Outputs is equal to 4, request is to + set to a new number of MSI or MSI-X (platform choice) + interrupts (including set to 0). + 2: Request to set back to the default number of + interrupts (also aborts a change in progress; that is, one that + has previously returned a + Status of -2 or 990x) + 3: (Only valid if + + “ibm,change-msix-capable” exists): + Request to set to a new number of MSIs (including set to + 0) + 4: (Only valid if + + “ibm,change-msix-capable” exists): + Request to set to a new number of MSI-X interrupts (including + set to 0) + + + + + + Requested Number of Interrupts + + + + The total number of MSIs being requested for the PCI + configuration address. A value of 0 is specified in order to + remove all MSIs for the PCI configuration address. This input + parameter is ignored by RTAS for + Function values other than 1, 3, or + 4. + + + + + + Sequence Number + + + + Integer representing the sequence number of the call. + First call in sequence starts with 1, following calls (if + necessary) use the + Next Sequence Number returned from the + previous call. + + + + + Out + + + + Status + + + + -3: Parameter error + -2: Call again + -1: Hardware error + 0: Success + 990x: Extended Delay + + + + + + Final Number of Interrupts + + + + Number of interrupts assigned to the PCI configuration + address at the successful completion of this call ( + Status of 0). For + Function 1, 3, or 4, if a greater number + was requested than what was previously assigned, the final + number may be less than what was requested, even though a + Status of 0 is returned. + + + + + + Next Sequence Number + + + + Integer to be returned as the + Sequence Number parameter on the next call. + This output is only valid if a + Status of -2 or 990x is returned. + + + + + + Type of Interrupts + + + + This field is only valid when the + Final Number of Interrupts is + non-zero. + 1: MSI + 2: MSI-X + + + + +
+
+
+ + + R1--2. + + For the MSI option: The + Final number of Interrupts and + Type of Interrupts must be valid when the platform + returns a + Status of 0 (Success), regardless of whether the + original number and final number of interrupts assigned is different and + regardless of whether or not the platform allows MSI resources to be + reassigned for the specified PCI configuration address. + + + + + R1--3. + + For the MSI option: The platform must return a + Status of -3 (Parameter error) from + ibm,change-msi, with no change in interrupt + assignments if the PCI configuration address does not support MSI and + Function 3 was requested (that is, the + “ibm,req#msi” property must exist for the + PCI configuration address in order to use + Function 3), or does not support MSI-X and + Function 4 is requested (that is, the + “ibm,req#msi-x” property must exist for + the PCI configuration address in order to use + Function 4), or if neither MSIs nor MSI-Xs are + supported and + Function 1 is requested. + + + + + R1--4. + + For the MSI option: If there are zero MSIs assigned + to the target IOA function but there is one or more LSIs assigned, then a + call to + ibm,change-msi which successfully changes the number + of MSIs assigned to non-zero must also disable the LSIs in the IOA + function’s configuration space and must keep the LSI platform + resources available to the IOA function in the case the MSIs are removed + (see Requirement + ). + + + + + R1--5. + + For the MSI option: + If there are a + non-zero number of MSIs assigned to the target IOA function and if that + IOA function originally had some LSIs assigned, then a call to + ibm,change-msi which successfully changes the number + of MSIs assigned to zero must also reassign any LSIs that were originally + assigned to that IOA function, using the same interrupt number that was + originally assigned (that is, the platform must reserve an originally + assigned LSI for a IOA function in case it needs to reassign it), and + must enable the LSIs in the IOA function’s configuration + space. + + + + + R1--6. + + For the MSI option: If the platform supports the + changing of MSIs, then it must support the reduction in the number of + interrupts by the + ibm,change-msi call, including setting the number of + MSIs to 0. + + + + + R1--7. + + For the MSI option: On the first call of + ibm,change-msi, the + Sequence Number must be a 1. + + + + + R1--8. + + For the MSI option: If + ibm,change-msi returns a + Status of -2 (Call again) or 990x (Extended Delay), + then the caller must provide on the next call to + ibm,change-msi, one of the following: + + + + All input parameters the same as the initial call except with the + Sequence Number set to the value in + Next Sequence Number returned from the previous + ibm,change-msi call. + + + + All input parameters the same as the initial call except with + Function set to 2 and the + Sequence Number set to 1, if the caller is wanting to + abort the previously started + ibm,change-msi operation. + + + + + + + R1--9. + + For the MSI option: If the + ibm,change-msi RTAS call returns something other than + 0 for the + Final Number of Interrupts, then the + ibm,query-interrupt-source-number RTAS call must be + used to get the current interrupt source numbers, even if the + ibm,change-msi call has returned the same number of + interrupts as before the call. + + + + + R1--10. + + For the MSI option: Firmware must not return a + Status of -2 or 990x when the + Requested Number of Interrupts is set to 0 or for + Function 0 (query only) or for + Function 2 (set back to default number). + + + + + R1--11. + + For the MSI option: When the + set-indicator RTAS call is made to isolate an IOA + (for both DLPAR and PCI Hot Plug operations), the platform must release + any additional MSI numbers that were obtained through the + ibm,change-msi RTAS call and make them available for + use by other + ibm,change-msi calls. + + + + + R1--12. + + For the MSI option: An OS or device driver that is + calling + ibm,change-msi for the purpose of changing the number + or type of interrupts for the IOA function must assure that the IOA + function cannot be actively performing operations that will generate + interrupts during the process of changing the number or type of + interrupts. + + + + + R1--13. + + For the MSI option: The platform must restore the + IOA’s MSI configuration space after a reset operation which occurs + following boot, to what it was previous to the reset operation, and + provide the same MSI assignments through the reset operation, unless a DR + isolate/unisolate operation has been performed (in which case the IOA's + MSI configuration space is set as it would at boot time). + + +
+ + + Software Implementation Notes: + + + + + Interrupt source numbers for MSIs are not necessarily be + assigned contiguously. + + + + MSIs and MSI source numbers are not shared (see Requirement + ). + + + + For a multi-function IOA, the + ibm,change-msi call is called for each function for + which the number of MSIs is to be changed. + + + + When the 990x + Status is returned, it is suggested that software + delay for 10 raised to the x milliseconds (where x is the last digit of + the 990x return code), before calling + ibm,change-msi again. However, software may issue the + + ibm,change-msi call again either earlier or later + than this. + + + + During a sequence of calls which return -2 or 990x, software may + abort at any time by setting the + Function equal to 2 and the + Sequence Number to 1. + + + + When there is a non-zero number of MSI or MSI-X interrupts + assigned, and when software attempts to change the type of interrupts + (MSI to MSI-X interrupt or MSI-X to MSI) at the same time as changing the + number of interrupts, the platform may return the same number of + interrupts as previously assigned, even though a greater number is + available. In this case a second call to + ibm,change-msi to increase the number of interrupts + may produce a greater number of interrupts. + + + +
+ +
+ <emphasis>ibm,query-interrupt-source-number</emphasis> + The + ibm,query-interrupt-source-number RTAS call is used + to query the interrupt source number and type (level sensitive for LSIs, + edge triggered for MSIs) for a specific PCI IOA function’s + interrupt, if one exists. That is, for a given PCI configuration address + ( + PHB_Unit_ID_Hi, PHB_Unit_ID_Low, and + config_addr) and function interrupt number. This + call is issued once for each interrupt of each IOA function, in order to + obtain the interrupt source number and type for that interrupt. For + example, if the + ibm,change-msi RTAS call has previously returned a + value of “n” interrupts for the IOA function, then the call + is made “n” times for that function (with a relative + interrupt number of 0 to n-1). + + + + R1--1. + + For the MSI option: The platform must implement the + ibm,query-interrupt-source-number RTAS call using the + argument call buffer defined by + + . + +   + + Argument Call Buffer + <emphasis>ibm,query-interrupt-source-number</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + ibm,query-interrupt-source-number + + + + + + Number Inputs + + + + 4 + + + + + + Number Outputs + + + + 3 + + + + + + Config_addr + + + + Configuration Space Address (Register field set to + 0) + + + + + + PHB_Unit_ID_Hi + + + + Represents the most-significant 32-bits of the Unit ID of + the PHB that corresponds to the + config_addr + + + + + + PHB_Unit_ID_Low + + + + Represents the least-significant 32-bits of the Unit ID + of the PHB that corresponds to the + config_addr + + + + + + IOA Function Interrupt Number + + + + The relative number of the interrupt within the PCI + configuration address, with a value of 0 being the first + interrupt of the PCI configuration address. + + + + + Out + + + + Status + + + + -3: Parameter error + -1: Hardware error + 0: Success + 1: No interrupt assigned for the given PCI configuration + address and + IOA Function Interrupt Number. + + + + + + Interrupt Source Number + + + + The interrupt source number corresponding to the PCI + configuration address and + IOA Function Interrupt Number, when a + Status of 0 is returned. Undefined for + other + Status values + . + + + + + + Interrupt Source Trigger + + + + The interrupt source trigger corresponding to the PCI + configuration address and + IOA Function Interrupt Number, when a + Status of 0 is returned. Undefined for + other + Status values + . + 0: Level sensitive + 1: Edge triggered + + + + +
+
+
+ + + R1--2. + + For the MSI option: The interrupt source numbers + returned by the + ibm,query-interrupt-source-number RTAS call must be + the numbers used to control the interrupt as in the + ibm,get-xive, + ibm,set-xive, + ibm,int-on, and + ibm,int-off RTAS calls. + + + + + R1--2. + + For the MSI option: The + ibm,query-interrupt-source-number RTAS call must + return a + Status of 1 (no interrupt assigned) if the inputs + specify a valid PCI configuration address and the PCI configuration + address does not have an interrupt assigned for the specified + IOA Function Interrupt Number. + + +
+ + + Software and Firmware Implementation Note: Software + may use the + ibm,query-interrupt-source-number RTAS call for all + IOA Function Interrupt Number values starting at 0 + until a + Status of 1 is returned, rather than using + ibm,change-msi Function 0 (query). That is, the + ibm,query-interrupt-source-number RTAS call works + even when the + “ibm,req#msi” property does not exist for + the IOA (that is even when the IOA is not requesting one or more MSIs), + This might be desirable, for example, if software never plans on using + the capability to change the number of MSIs, and therefore does not have + any other use for the + ibm,change-msi call. +
+ +
+ +
+ +
+ Enhanced I/O Error Handling (EEH) Option Functions + The EEH option requires several additional RTAS calls. In addition, + the Error Injection option RTAS calls are required to be implemented, in + order to be able to test device driver code that implements recovery + based on the EEH option. + See also, + , for additional information + about implementing EEH error recovery. + + + + R1--1. + + For the EEH option: The IOA bus error injection + function of the Error Injection option RTAS call must be implemented + concurrently with the EEH option (that is, the + ioa-bus-error token must exist in the + “ibm,errinjct-tokens” property). + + + + + R1--2. + + For the EEH option: If the EEH option is implemented + for the specified PE configuration address, then calls to the + + ibm,set-eeh-option, ibm,set-slot-reset, and + ibm,slot-error-detail RTAS calls must be governed by + , otherwise if one of the + invalid transitions in + is attempted, then return a + Status as defined by + . + + + + + R1--3. + + If the EEH option is not implemented for + the specified PE configuration address and a call is made to one of the + ibm,set-eeh-option, ibm,set-slot-reset, or + ibm,slot-error-detail RTAS calls, then return a + Status of -3 (parameter error). + + Software Implementation Note: Some transitions in + are made asynchronously to the + OS by the platform (in exceptional cases; see table for details). If + software receives a + Status of -7 (Unexpected state change) on an RTAS + call which is attempting to change state in + , then software should read the + state again via the + ibm,read-slot-reset-state2 RTAS call, in order to + obtain the current state. Some legacy implementations may return a -1 + instead of a -7. + + + + + R1--4. + + For the EEH option: + If the platform + activates the reset to a PE (for example, as part of a recovery action + above the PE), including the case where the platform has temporarily + deactivated and then reactivated the reset, then the platform must hide + such PE state transition(s) from the OS by returning a + Status of 5 (PE is unavailable) with + PE Unavailable Info indicating a non-zero value + (temporarily unavailable) for the + ibm,read-slot-reset-state2 RTAS call, until which + time the required minimum reset active hold time for the hardware within + the PE has been met. + + Software Implementation Note: Relative to the + platform automatically resetting the PE as part of error recovery, as + mentioned in Requirement + , the + PE Recovery Info output of the + ibm,read-slot-reset-state2 RTAS call is provided to + enable the software to determine that such a reset has occurred. + + + + + R1--5. + + For the EEH option: + If the platform + deactivates the reset to a PE, except in the case where the OS has + instructed it to do so with the + ibm,set-slot-reset Function 0, then the platform must + do all the following: + + + + Hide such a deactivation from the OS during the time that the PE + reset is deactivated by returning a + Status of 5 (PE is unavailable) with + PE Unavailable Info indicating a non-zero value + (temporarily unavailable) for the + ibm,read-slot-reset-state2 RTAS call. + + + + Force OS MMIO accesses to the PE during the deactivation time to + look like the PE is reset. + + + + Prevent the PE from introducing errors into the system (for + example, from DMA or due to the reset being deactivated prior to the + proper active hold time). + + + + Reactivate the reset, hiding the reset active hold time as + required by Requirement + , or force the PE into the + permanently unavailable state (return a + Status of 5 (PE is unavailable) with + PE Unavailable Info indicating a zero value for the + ibm,read-slot-reset-state2 RTAS call). + + + + + + + R1--6. + + For the EEH option: The Bridged-I/O EEH option must + be implemented concurrently with the EEH option. + + + + + R1--7. + + For the EEH option: The 64 bit IOA bus error + injection function of the Error Injection option RTAS call must be + implemented concurrently with the EEH option (that is, the + ioa-bus-error-64 token must exist in the + “ibm,errinjct-tokens” property). + + + + + R1--8. + + For the EEH option: The platform must implement the + ibm,configure-pe RTAS call. + + + + + + PE State Transition Table + + + + + + + + + + + + + + Initial PE State + + The state as would be returned from + ibm,read-slot-reset-state2, when no + asynchronous platform transition has occurred. + + + + + + + + Final PE State + + + + + + + + + + 0 + Not Reset + + Load/ + Store Allowed + + Load/ Store allowed means + the Loads or Stores channel is + open to the PE, and not necessarily that the PE itself has its MMIO space + enabled. The components within the PE also contain enable/disable bits + (for example, the PCI configuration space Memory Space and IO Space + enable bits in the PCI header Device Control register). + + + DMA Allowed + + DMA allowed means the DMA channel is open to the PE, if the PE + itself has its DMA enabled. The components within the PE also contain + enable/disable bits (for example, the PCI configuration space Bus Master + enable bit in the PCI header Device Control register). + + + (Normal Operations) + + + + 1 + Reset + + Reset may mean that the PE is being held in the reset state by + a reset signal or Hot Reset (PCI Express), or that it may have been + put into this state by the platform via a PCI Express Function Level + Reset (FLR) in response to the ibm,set-slot-reset + RTAS call. In the case of FLR, the platform makes the pulse of the FLR + look like the Hot Reset case to the OS in terms of the Reset state + (See for more information). + Note that the platform does not monitor writes to the FLR bit of an + IOA, and so OS or Device Driver writes directly to the FLR bit on an + IOA will not affect the PE State as shown in + . + + + + Load/ + Store Disabled + + Load/ Store disabled + means that either the PE is in the MMIO Stopped state or that the PE + is reset, the latter giving the appearance of being MMIO Stopped. + + + DMA Disabled + + DMA disabled means that either the PE is in the DMA + Stopped state or that the PE is reset, the latter giving + the appearance of being DMA Stopped. + + + + + + 2 + Not Reset + + Although the current state is “Not Reset”, + the PE may have been reset by the platform in the process of + getting to this state. The PE Recovery Info + output of the ibm,read-slot-reset-state2 + RTAS call will indicate if the platform has done such a reset. + + + + Load/ + Store Disabled + + In the MMIO Stopped state. + + + DMA Disabled + + In the DMA Stopped state. + + + + + + 4 + Not Reset + + Load/ + Store Allowed + + + DMA Disabled + + + + + + 5 + Temporarily + Unavailable + + Temporarily unavailable is signaled by a non-zero value r + eturned in the PE Unavailable Info of the + ibm,read-slot-reset-state2 RTAS calls. + + + + + + 5 + Permanently Unavailable + + Permanently unavailable is signaled by a zero value + returned in the PE Unavailable Info + of the ibm,read-slot-reset-state2 RTAS calls. + + + + + + + + + + 0 + Not Reset + + Load/ + Store Allowed + + + DMA Allowed + + + (Normal Operations) + + +   + + + + ibm,set-slot-reset + + + Function 1 or 3, or via a hardware + initiated action + + The hardware would not normally initiate this + transition; such implementation would only exist where the + platform only implements EEH Stopped State via a reset + (always) of the PE (that is, only implements states 0, 1, and + 5 of this table), which is not applicable for LoPAR + Compliant platforms. + + + + Hardware causes this state transition when EEH is enabled + and an error occurs or firmware may cause due to higher level + error recovery action + + + Not a valid + transition + + + Platform initiated action + + + + ibm,slot-error-detail + + + Function 2, or platform detected permanent + error + + + + + 1 + Reset + + Load/ + Store Disabled + DMA Disabled + + + + + + ibm,set-slot-reset + + + Function 0 + + The platform also removes the PE from the EEH Stopped + state, if applicable, on the transition from state 1 to state + 0. + + + + + ibm,set-slot-reset + + + Function 1 or 3 + + + Not a valid + transition + + + Not a valid + transition + + + Platform initiated action + + + + ibm,slot-error-detail + + + Function 2, or platform detected permanent + error + + + + + 2 + Not Reset + + Load/ + Store Disabled + + + DMA Disabled + + + + + Not a valid + transition + Must go through + state 4 or state 1 + + + + ibm,set-slot-reset + + + Function 1 or 3, or via a hardware + initiated action + + + + + +   + + + + ibm,set-eeh-option + + + Function 2 + + + Platform initiated action + + + + ibm,slot-error-detail + + + Function 2, or hardware detected permanent + error + + + + + 4 + Not Reset + + Load/ + Store Allowed + + + DMA Disabled + + + + + + ibm,set-eeh-option + + + Function 3 + See Requirement + + + + + + + ibm,set-slot-reset + + + Function 1 or 3, or via a hardware + initiated action + + + + + + Hardware causes this state transition when EEH is enabled + and an error occurs or firmware may cause due to higher level + error recovery action + + +   + + + Platform initiated action + + + + ibm,slot-error-detail + + + Function 2, or platform detected permanent + error + + + + + 5 + Temporarily + Unavailable + + + + + Not a valid + transition + + + Platform initiated action + + + Platform initiated action + + This transition cannot occur if the PE was in the reset + state prior to the platform transition to the temporarily + unavailable state. See Requirement . + . + + + Not a valid + transition + + +   + + + + ibm,slot-error-detail + + + Function 2, or platform detected permanent + error + + + + + 5 + Permanently Unavailable + + + + + Power cycle, + Partition reboot, + or DLPAR + re-assignment + + + Not a valid + transition + + + Not a valid + transition + + + Not a valid + transition + + + Not a valid transition + + +   + + + + +
+ + depicts the four main functions + for controlling a PE’s state: + + + + ibm,set-eeh-option Function 2 for releasing a PE from + the MMIO Stopped State, when the PE is in State 2 (MMIO Stopped State and + DMA Stopped State both active). + + + + ibm,set-eeh-option Function 3 for releasing a PE from + the DMA Stopped State, when the PE is in State 3 (MMIO Stopped State not + active and DMA Stopped State active). + + + + ibm,set-slot-reset Function 0 for releasing a + PE’s reset. + + + + ibm,set-slot-reset Function 1for activating a + PE’s reset. + + + + + Implementation Note: In the last two bullets, above, + for the case of the platform’s use of FLR for resetting the PE, the + meaning of “activating” and “deactivating” the + PE’s reset has slightly different meaning, but the platform makes + the EEH recovery model transparent. See + for more details. + + is a summary of the expected + results of the above four operations. The -7 + Status returns generally will occur for the cases + where the PE state has been changed asynchronously to the OS by the + platform. In these cases, software should read the state again (via the + ibm,read-slot-reset-state2 RTAS call) in order to + determine the current hardware state. + + + PE State Control + + + + + + + + + + + + + + RTAS Call + + + Function + + + Result and Status + + + + + Initial PE State + + The state as would be returned from + ibm,read-slot-reset-state2, when no + asynchronous platform transition has occurred. + + + + + + + + + 0 + Not Reset + + Load/ + Store Allowed + + Load/ Store allowed means + the Loads or Stores channel is + open to the PE, and not necessarily that the PE itself has its MMIO space + enabled. The components within the PE also contain enable/disable bits + (for example, the PCI configuration space Memory Space and IO Space + enable bits in the PCI header Device Control register). + + + DMA Allowed + + DMA allowed means the DMA channel is open to the PE, if the PE + itself has its DMA enabled. The components within the PE also contain + enable/disable bits (for example, the PCI configuration space Bus Master + enable bit in the PCI header Device Control register). + + + (Normal Operations) + + + + 1 + Reset + + Reset may mean that the PE is being held in the reset state by + a reset signal or Hot Reset (PCI Express), or that it may have been + put into this state by the platform via a PCI Express Function Level + Reset (FLR) in response to the ibm,set-slot-reset + RTAS call. In the case of FLR, the platform makes the pulse of the FLR + look like the Hot Reset case to the OS in terms of the Reset state + (See for more information). + Note that the platform does not monitor writes to the FLR bit of an + IOA, and so OS or Device Driver writes directly to the FLR bit on an + IOA will not affect the PE State as shown in + . + + + + Load/ + Store Disabled + + Load/ Store disabled + means that either the PE is in the MMIO Stopped state or that the PE + is reset, the latter giving the appearance of being MMIO Stopped. + + + DMA Disabled + + DMA disabled means that either the PE is in the DMA + Stopped state or that the PE is reset, the latter giving + the appearance of being DMA Stopped. + + + + + + 2 + Not Reset + + Load/ + Store Disabled + + In the MMIO Stopped state. + + + DMA Disabled + + + + 4 + Not Reset + + Load/ + Store Allowed + + + DMA Disabled + + In the DMA Stopped state. + + + + + + 5 + Temporarily + Unavailable + + Temporarily unavailable is signaled by a non-zero value + returned in the PE Unavailable Info of the + ibm,read-slot-reset-state2 RTAS calls. + + + + + + 5 + Permanently Unavailable + + Permanently unavailable is signaled by a zero value + returned in the PE Unavailable Info + of the ibm,read-slot-reset-state2 RTAS calls. + + + + + + + + + + ibm,set-eeh-option + + + + + Function 2 + Release PE for + + Load/Store + + + + Result + + + no-op + + + no-op + + + Transition from state 2 to 4 + + + no-op + + + no-op + + + no-op + + + + + + Status + + A + Status of -3 is returned instead of 0 + or -7 if an invalid PCI configuration address is used. An + invalid PCI configuration address is generally one which is + not a PE address or which is not assigned to the OS. + However, some platforms may allow resetting within the PE + or outside the PE, providing this does not violate other + requirements defined by this architecture. Also, some + legacy implementations may return a -1 or -3 instead of a + -7, but all implementations are required to implement the + -7 + Status, where appropriate. + + + + + -3 + + + -7 + + + 0 + + + -3 + + + -7 + + + -7 + + + + + + Function 3 + Release PE for + DMA + + + Result + + + no-op + + + no-op + + + no-op + + + Transition from state 4 to 0 + + + no-op + + + no-op + + + + + + Status + + + + + + + -3 + + + -7 + + + -7 + + + 0 + + + -7 + + + -7 + + + + + + ibm,set-slot-reset + + + + + Function 0 + Deactivate the + reset to the PE + + In the case of the use of FLR by the platform to reset + the PE, the “activate” and + “deactivate” of the reset has a different meaning + than for the Hot Reset case. For FLR, the platform makes the + pulse of the FLR look like the Hot Reset case to the OS in + terms of the Reset state (See + for more + information). + + + + Result + + + no-op + + + Transition from state 1 to 0 + + The platform also removes the PE from the EEH Stopped + state, if applicable, on the transition from state 1 to state + 0. + + + + no-op + + + no-op + + + no-op + + + no-op + + + + + + Status + + + + + + + + 0 + + + 0 + + + -7 + + + -3 + + + -7 + + + -7 + + + + + + Function 1 or 3 + Activate the + reset to the PE + + + Result + + + + + + Transition from state 0 to 1 + + + no-op + + + Transition from state 2 to 1 + + + Transition from state 4 to 1 + + + no-op + + + no-op + + + + + + Status + + , + + For + Function 3, if + Function 3 is not implemented, then a + Status of -3 is returned. For + Function 3, if implemented in the RTAS + call, but not implemented for the specified PCI + configuration address, then a + Status of -8 is returned. In either of + these cases, the PE state is not changed. If + Function 3 is implemented, then the + platform indicates this by the + + “ibm,reset-capabilities” property in + the OF device tree. + + + + + 0 + + + 0 + + + 0 + + + 0 + + + -7 + + + -7 + + + + +
+ + The PE configuration address ( + PHB_Unit_ID_Hi, PHB_Unit_ID_Low, and config_addr) + for the domain is the PCI configuration address for the PE primary bus + and is the same format as used for the ibm,read-pci-config and + ibm,write-pci-config calls (see Requirement + ), except that the Register + field is set to 0. The PE configuration address is obtained as indicated + in + . + +
+ <emphasis>ibm,set-eeh-option</emphasis> + + This call is used to enable and disable the EEH domain of a PE, to + remove a PE from the MMIO Stopped state to continue + Load and + Store operations to the domain, and to remove a PE + from the DMA Stopped state to continue DMA operations to the domain. The + PE configuration address ( + PHB_Unit_ID_Hi, PHB_Unit_ID_Low, and config_addr) + for the PE is obtained as defined in + . + + + + R1--1. + + For the EEH option: RTAS must implement an + ibm,set-eeh-option call + using the argument call buffer defined by + . + + + Argument Call Buffer + <emphasis>ibm,set-eeh-option</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + ibm,set-eeh-option + + + + + + Number Inputs + + + + 4 + + + + + + Number Outputs + + + + 1 + + + + + + Config_addr + + + + PE configuration address (Register fields set to + 0) + + + + + + PHB_Unit_ID_Hi + + + + Represents the most-significant 32-bits of the Unit ID of + the PHB that corresponds to the + config_addr + + + + + + PHB_Unit_ID_Low + + + + Represents the least-significant 32-bits of the Unit ID + of the PHB that corresponds to the + config_addr + + + + + + Function + + + + 0: Disable EEH option for the PE (no-op for PEs with PCI + Express IOAs) + 1: Enable EEH option for the PE + 2: Release the PE for + Load/ + Store operations + 3: Release the PE for DMA operations + 4: Enable EEH io-event interrupt for this PE + 5: Disable EEH io-event interrupt for this PE + + + + + Out + + + + Status + + + + 0: Success + -1: Hardware Error + -3: Parameter Error + -7 Unexpected state change + + + + +
+ + Software and Platform Implementation Note: For + platforms that enable EEH by default, + ibm,set-eeh-option Function 0 (disable EEH) is a + no-op. However, + ibm,set-eeh-option Function 1 (enable EEH) is still + required as a signalling method from the device driver to the platform + that the device driver is at least EEH aware (see Requirement + ). +
+
+ + + R1--2. + + For the EEH option: Software must use the + ibm,get-config-addr-info2 RTAS call, when supported, + to get the EEH domain span of the PE, otherwise software must use the + ibm,read-slot-reset-state2 RTAS call in order to + determine the span, and then software should attempt to perform all + ibm,set-slot-reset + and + + ibm,set-eeh-option + RTAS calls appropriately, based on the EEH + capabilities and as governed by + . + + + + + R1--3. + + For the EEH option: If the EEH option is implemented + for the specified PE configuration address, on a call to the + + ibm,set-eeh-option + with a + + Function + of 0 (disable EEH) the platform must do one of the + following: + + + + If any IOA in the PE is enabled (if any of the Bus Master, Memory + Space or I/O Space bits in the Command Register of the IOA’s + configuration space are 1), then do nothing and return a + Status of 0 (Success). + + + + If the platform allows disabling of EEH and the disabling of EEH + for the PE violates another requirement relative to LPAR, then the + platform must not disable the EEH option for the specified PE + configuration address and must return a -7 (unexpected state change) or a + -1 (hardware error), with -7 preferred. + + + + If the platform allows disabling of EEH and the disabling of EEH + for the PE does not violate the other requirements relative to LPAR, then + clear the MMIO Stopped State and DMA Stopped State, and disable the EEH + option, for the specified PE configuration address. + + + + If the default for the platform is EEH enabled, then do nothing + and return a + Status of 0 (Success). + + + + + + + R1--4. + + For the EEH option: + If the OS allows + the DMA to be enabled for a PE that is in the DMA Stopped state without + the use of a reset operation (that is, the use of the + ibm,set-eeh-option with a + Function of 3), the device driver must first do all + necessary cleanup of its IOA to prevent the IOA from doing anything + destructive when it starts DMA again. + + + + + R1--5. + + For the EEH option: If a device driver is going to + enable EEH and the platform has not defaulted to EEH enabled, then it + must do so before it does any operations with its IOA, including any + configuration cycles or + Load or + Store operations. + + + + + R1--6. + + For the EEH option: If an EEH domain is enabled for a + PE via the ibm,set-eeh-option RTAS call and if there are multiple IOAs or + one or more multi-function IOAs in that PE, and if these functions are + supported by multiple device drivers, then all of the device drivers for + all the functions in that PE must be EEH enabled and be capable of + coordinating EEH recovery procedures. + + Software implementation Note: Protection against + startup errors (configuration cycles, etc.), are every bit as important + as protection against errors during normal operations. Although the + quantity of operations is not as great, there is more of a chance of + latent errors showing up during the startup phase. + + + + + R1--7. + + For the EEH option: If the Slot Level EEH Event + Interrupt option is not implemented for the PE, then return a + Status of -3 if + Function 4 or 5 is attempted. + + + + + R1--8. + + For the EEH with the Slot Level EEH Event Interrupt + option: + Function 4 and 5 must be implemented for all PE under + nodes that contain the + “ibm,io-events-capable” property. + + +
+ +
+ +
+ <emphasis>ibm,set-slot-reset</emphasis> + + This call is used to reset a PE. The PE configuration address ( + PHB_Unit_ID_Hi, PHB_Unit_ID_Low, and config_addr) + for the PE is obtained as defined in + . All PEs have the capability + of being reset independently. Resets outside or within the PE are not + architected, but may be allowed by the platform implementation, providing + that it does not violate other requirements of this architecture. + The platform may use one of two methods to reset a PCI Express PE, + when the + ibm,set-slot-reset RTAS call is made with the + Function 1/ + Function 0 (activate the reset/deactivate the + reset). + + + + If the PE is a single function of a multi-function IOA, then the + Function Level Reset (FLR) option is required to be implemented by the + function, and the platform uses FLR to reset the function. When the + platform uses FLR instead of Hot Reset to reset a PCI Express PE, the + platform provides the + “ibm,pe-reset-is-flr” property in the + function’s OF Device Tree node, and provides the same EEH recovery + model to the software, as in the Hot Reset case, and as defined by + . The property is provided in + the case where there may be slightly different device-specific reset + recoveries by the software for the FLR case. + + Software Implementation Note: The platform does not + monitor writes to the FLR bit of an IOA, and so OS or Device Driver + writes directly to the FLR bit on an IOA will not affect the PE State as + shown in + . + + + + Otherwise, a PCI Express Hot Reset is used. + + + + + + R1--1. + + For the EEH option: The + ibm,set-slot-reset call must be implemented using the + argument call buffer defined by + . + + + + Argument Call Buffer + <emphasis>ibm,set-slot-reset</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + ibm,set-slot-reset + + + + + + Number Inputs + + + + 4 + + + + + + Number Outputs + + + + 1 + + + + + + Config_addr + + + + PE configuration address (Register fields set to + 0) + + + + + + PHB_Unit_ID_Hi + + + + Represents the most-significant 32-bits of the Unit ID of + the PHB that corresponds to the + config_addr + + + + + + PHB_Unit_ID_Low + + + + Represents the least-significant 32-bits of the Unit ID + of the PHB that corresponds to the + config_addr + + + + + + Function + + + + 0: Deactivate the reset to the PE + 1: Activate the reset to the PE (for PCI Express, if the + platform uses FLR to reset the PE, the platform provides the + “ibm,pe-reset-is-flr” property + in the function’s OF Device Tree node) + 3: (optional) Activate the reset to the PE, using a PCI + Express Fundamental Reset + + + + + Out + + + + Status + + + + 0: Success + -1: Hardware Error + -3: Parameter Error + -7: Unexpected state change + -8: Fundamental Reset not defined for this configuration + address + + + + +
+
+
+ + + R1--2. + + For the EEH option: After activation of the reset ( + Function 1 or 3), software must delay the + deactivation of the reset ( + Function 0) to that PE via the + ibm,set-slot-reset call, + until the minimum reset signal active time has elapsed, as designated by + the bus specifications for the particular type bus or buses involved (100 + millisecond for PCI). + + Software Implementation Notes: + + + + + The device driver is responsible for any additional clean up + required beyond that provided by a reset to the IOA. For PCI Express, the + clean up may be slightly different based on whether the platform used FLR + or Hot Reset to reset the PE. When FLR is used, the platform provides the + “ibm,pe-reset-is-flr” property in the + function’s OF Device Tree node. + + + + The software is responsible for quiescing (stopping) any MMIO + Load and + Store activities to the PE prior to resetting the + PE. + + + + If the platform uses FLR to implement the PE reset, software may + need to understand that this is a pulse and not a solid level, such that + the adapter is not held at reset during the time from the call with + Function 1 and the call with + Function 0. + + + + + + + R1--3. + + For the EEH option: After deactivation of the reset ( + Function 0), software must delay access to that PE + until the minimum time after reset that is required for the PE to be come + stable has elapsed, as designated by the bus specifications for the + particular type bus or buses involved (for example, 1.5 seconds for PCI + Express). + + Software Implementation Notes: + + + + + Different implementations of PCI Express may require different + amounts of delay in order to traverse the I/O fabric since individual + component delays are plug-in card specific. + + + + The ibm,read-slot-reset-state2 RTAS call returns a + PE Reset State of 5 (PE is unavailable) while any + reset delay time is happening for hardware outside the PE. + + + + + + + R1--4. + + For the EEH option: If the + ibm,set-slot-reset call is called with a + Function of 0 (deactivate) and any reset to the reset + domain specified by the + PE configuration address is active, then the RTAS + call must de-activate all resets to that PE configuration address. + + + + + R1--5. + + For the EEH option: If the + ibm,set-slot-reset call is called with a + Function of 0 (deactivate) and there is no operation + to be performed (for example, the reset to the reset domain specified by + the PE configuration address is not active), then the RTAS call must + return a + Status of 0 (success). + + + + + R1--6. + + For the EEH option: When the + ibm,set-slot-reset call is called with a + Function of 1 or 3 (activate) with a valid PHB Unit + ID and config_addr and it is the case that FLR is not being used by the + platform to reset the PE, then the RTAS call must activate the reset to + the reset domain as designated by the PE configuration address, if not + already activated. + + + + + R1--7. + + For the EEH option: When the + ibm,set-slot-reset RTAS call implements + Function 3, the platform must also provide the + “ibm,reset-capabilities” property in the + RTAS node of the OF device tree. + + + + + R1--8. + + For the EEH option: When the + ibm,set-slot-reset call is called with a + Function of 0 (deactivate) with a valid PHB Unit ID + and config_addr and if the corresponding PE is in the MMIO Stopped or DMA + Stopped state, then the RTAS call must bring that PE as designated by the + PE configuration address out of the MMIO Stopped and DMA Stopped states + and clear any applicable platform EEH status state. + + + + + R1--9. + + For the EEH option: When the platform uses FLR to + reset a PCI Express PE ( + ibm,set-slot-reset call with a + Function of 1(activate) followed by a call with + Function 0 (deactivate)), then the platform must + provide the + “ibm,pe-reset-is-flr” property in the + function’s OF Device Tree node, and the platform must always use + FLR to reset a PE which contains this property in the OF Device + Tree. + + + + + R1--10. + + For the EEH option: + For a PCI Express + PE, the platform must provide the EEH recovery model to the software, as + defined by + , regardless of whether Hot + Reset or FLR is used to reset the PE. + + +
+ +
+ +
+ <emphasis>ibm,read-slot-reset-state2</emphasis> + This call queries the state of a PE, and dynamically determines + whether a PCI configuration address corresponds to a PE primary bus (that + is, if it is the PE configuration address). In addition, when the + PE Reset State parameter is a 5 (PE is unavailable), + then the + PE Unavailable Info indicates an approximate amount + of time for which the PE might be unavailable. The PE configuration + address ( + PHB_Unit_ID_Hi, PHB_Unit_ID_Low, and config_addr) + for the PE is obtained as defined in + . + When the + ibm,get-config-addr-info2 RTAS call is implemented, + that call can be used instead of this one to determine the PE + configuration address. See + and + . + + + + R1--1. + + ibm,read-slot-reset-state2 call + must be implemented using the argument call buffer defined by + . + + + Argument Call Buffer + <emphasis>ibm,read-slot-reset-state2</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + ibm,read-slot-reset-state2 (see Firmware + Implementation note, below) + + + + + + Number Inputs + + + + 3 + + + + + + Number Outputs + + + + 4: Always allowed. + 5: May be allowed, depending on the value of the + + “ibm,read-slot-reset-state-functions” property + in the + RTAS node of the device tree ( + ). + + + + + + Config_addr + + + + Configuration Space Address (Register fields set to + 0) + + + + + + PHB_Unit_ID_Hi + + + + Represents the most-significant 32-bits of the Unit ID of + the PHB that corresponds to the + config_addr + + + + + + PHB_Unit_ID_Low + + + + Represents the least-significant 32-bits of the Unit ID + of the PHB that corresponds to the + config_addr + + + + + Out + + + + Status + + + + 0: Success + -3: Parameter Error + + + + + + PE Reset State + + + + Except for a + PE Reset State of 5, this output is not + valid unless the + Config_addr Capabilities output is a 1 and + the + Status is a 0. + 0: Reset deactivated and the PE is not in the MMIO + Stopped or DMA Stopped state + 1: Reset activated and the PE is not in the MMIO Stopped + or DMA Stopped states + 2: The PE is in the MMIO Stopped and DMA Stopped states + with the reset deactivated and the + Load/ + Store path is disabled + 4: The PE is in the DMA Stopped state with the reset + deactivated and the + Load/ + Store path is enabled + 5: PE is unavailable + + + + + + Config_addr Capabilities + + + + This output is not valid if the + PE Reset State is a 5. + 0: EEH not supported for the + Config_addr + 1: EEH supported for the + Config_addr + + + + + + PE Unavailable Info + + + + This output is not valid unless the + Config_addr Capabilities output is a 1 and + the + PE Reset State is a 5 and the + Status is a 0, in which case the value of + this parameter is a 0 if the PE is permanently unavailable, and + non-zero if a recovery is in progress and there is an expected + availability after the recovery; the non-0 value in this case + is the number of milliseconds that the recovery is expected to + take. + + + + + PE Recovery Info + + + This output is only valid if the + + “ibm,read-slot-reset-state-functions” property + in the + RTAS node of the device tree indicates that + it is implemented and the call is made with a + Number Outputs of at least 5 and the + PE Reset State is a value of 2. This is a + 32-bit field with bit significance, as follows: +   + Bits 0:27 - Reserved +   + Bits 28:29 - PE platform reset type. Only valid when bit + 31 of this field is a value of 1. + Bits 28:29 = 0b00: Firmware does not implement these + bits. Reset type is most likely a Hot Reset. + Bits 28:29 = 0b01: Platform used a Hot Reset to reset the + PE. + Bits 28:29 = 0b10: Platform used a Fundamental Reset to + reset the PE. + Bits 28:29 = 0b11: Platform used an FLR to reset the + PE. +   + Bit 30 - Retry Count Hint + Bit 30 = 0: Either the PE associated with the + Config_addr was the source of this PE + entering the + PE Reset State of 2, or the platform has + not determined whether this PE was the source or not. + Bit 30 = 1: The platform has determined that the PE + associated with the + Config_addr was not the source of this PE + entering the + PE Reset State of 2. That is, setting this + bit indicates that this PE entered the + PE Reset State of 2 as a side-effect of + some error outside of this PE’s domain. Software may use + this hint to not count this occurrence of the + PE Reset State of 2 as part of any EEH + error recovery retry count that it might be keeping for this + PE. +   + Bit 31 - Reset Status + Bit 31 = 0: PE was not reset as a result of the platform + transition to + PE Reset State of 2. + Bit 31 = 1: PE was reset as a result of the platform + transition to + PE Reset State of 2. If the PE is not below + a node marked with the special value of the + “status” property of + “reserved”, then after + deactivation of the platform-initiated PE reset, the platform + is required to delay access to that PE until the minimum time + after reset that is required for the PE to be come stable has + elapsed, as designated by the bus specifications for the + particular type bus or buses involved (for example, 1.5 seconds + for PCI Express), by returning + PE Reset State of 5 with + PE Unavailability Info non-zero + (temporarily unavailable) until that time has elapsed). If the + PE is below a node marked with the special value of the + “status” property of + “reserved”, then after + deactivation of the platform-initiated PE reset, the firmware + immediately (without delay) transitions the PE to the + PE Reset State of 2, and it is the + controlling software that is required to do the bus-specific + delays. + + + + +
+ + Firmware Implementation Note: The argument call + buffer structure and requirements for this call are the same as for the + old (removed from this architecture) + ibm,read-slot-reset-state call, except for the last + output parameter. Therefore, it is possible for platforms that still + require the old + ibm,read-slot-reset-state RTAS call to implement the + ibm,read-slot-reset-state and + ibm,read-slot-reset-state2 calls with the same RTAS + token and use the number of output parameters to determine whether or not + to implement the PE + Unavailable Info parameter. + + Platform Implementation Notes: + + + + + The ibm,read-slot-reset-state2 RTAS call only returns a + PE Reset State of 1 (Reset activated and the PE is + not in the MMIO Stopped or DMA Stopped state) when the reset may be + removed by software; that is, if the error is potentially recoverable. If + the firmware has detected a hardware error that is such that the reset to + the device cannot be removed or is not safe to remove, the + ibm,read-slot-reset-state2 does not return a + PE Reset State of 1, but instead returns a + PE Reset State of 5 (PE is unavailable) along with PE + Unavailable Info of 0 (PE is permanently + unavailable). + + + + The ibm,read-slot-reset-state2 RTAS call should never + return a -1 (hardware error), but should instead return a + PE Reset State of 5 (PE is unavailable) with a + PE Unavailable Info of 0 (PE is permanently + unavailable). + + +
+
+ + + R1--2. + + The ibm,read-slot-reset-state2 RTAS call must return a + Reset State value of 5 (PE is unavailable) under any + of the following conditions: + + + + Firmware has + determined that communications with the PE is not available or the path + to the PE cannot be traversed at the current time + + + + The ibm,slot-error-detail RTAS call has been called with + a + Function of 2, and none of the resetting conditions + specified in Requirement + have been met. + + + + + Software Implementation Notes: + + + + + The condition under Requirement + + may be temporary, with a + recovery time in the range of seconds (for example, as little as 3 + seconds or up to couple of minutes). Software may chose to delay the time + indicated in the + PE Unavailable Info and issue the + ibm,read-slot-reset-state2 call again when a + temporary condition exists. The condition may also be clearable with a + power cycle of the PE, in which case the firmware may return a + Status of 990x to the + set-power-level RTAS call, to delay long enough to + clear the temporary condition. + + + + Config_addr Capabilities may be indeterminate when + the PE Reset State of 5 (PE is unavailable) is returned. + Software should ignore the + Config_addr Capabilities return when the + PE Reset State of 5 is returned. + + + + + + + R1--3. + + If the + ibm,read-slot-reset-state2 RTAS call must return a + PE Reset State value of 5 (PE is unavailable) then it + must indicate in the + PE Unavailable Info parameter one of the + following: + + + + A value of zero, if there is no error recovery in progress that + makes the PE available in any predictable amount of time (that is, the PE + is “permanently” unavailable; for example, until a power + cycle or until a repair action). + + + + A non-zero value, indicating the approximate time in + milliseconds after which the path to the PE is expected to become + available again. + + + + + + + R1--4. + + The + ibm,read-slot-reset-state2 RTAS call must return a + Config_addr Capabilities of 1 (EEH supported for the + Config_addr) for every + Config_addr within a PE and for the PE configuration + address. + + + + + R1--5. + + The + ibm,read-slot-reset-state2 RTAS call must comply with + the state transitions defined in + . + + +
+ +
+ +
+ <emphasis>ibm,get-config-addr-info2</emphasis> + + This call is used obtain information about fabric configuration + addresses, given the PCI configuration address. See + for more information on PEs and + determining PE configuration addresses. + The PCI configuration address ( + PHB_Unit_ID_Hi, PHB_Unit_ID_Low, and config_addr) + for the call is defined by + . + + + + R1--1. + + The + ibm,get-config-addr-info2 call + must be implemented using the argument call buffer defined by + . + + + Argument Call Buffer + <emphasis>ibm,get-config-addr-info2</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + ibm,get-config-addr-info2 (see Firmware + Implementation note, below) + + + + + + Number Inputs + + + + 4 + + + + + + Number Outputs + + + + 2 + + + + + + Config_addr + + + + Configuration Space Address (Register fields set to + 0) + + + + + + PHB_Unit_ID_Hi + + + + Represents the most-significant 32-bits of the Unit ID of + the PHB that corresponds to the + config_addr + + + + + + PHB_Unit_ID_Low + + + + Represents the least-significant 32-bits of the Unit ID + of the PHB that corresponds to the + config_addr + + + + + + Function + + + + See + for available + functions. + + + + + Out + + + + Status + + + + 0: Success + -3: Parameter Error + + + + + + Info + + + + See + for values. + + + + +
+
+
+ + + R1--2. + + The + ibm,get-config-addr-info2 RTAS call must return the + Data output as per + . + + + Input and + <emphasis>ibm,get-config-addr-info2 Function</emphasis> + <emphasis>Info</emphasis> Output + + + + + + + + + + Function Input + + + + + Definition + + + + + + Info Output + + + + + + + + 0 + + + Get PE configuration address + + + PE configuration address (as defined by + ). Result returned in + + Info output is: + Equal to the + Config_addr input if there is no bridge or + switch between the IOA function (endpoint) and the PE primary + bus. + Equal to the + Config_addr of the PE primary bus if there + is a bridge or switch between the IOA function and the PE + primary bus. + Undefined if + Config_addr is not in a PE (query for PE + state by using + Function 1 first or by + ibm,read-slot-reset-state2 RTAS call). A + Status of -3 (Parameter Error) is returned + in this case, also. + + + + + 1 + + + Query shared PE state + + + 0: + Config_addr is not in a PE (EEH not + supported for the + Config_addr). + 1: Not shared (Only one IOA function in the PE). + 2: Shared (More than one IOA function in the PE). + + + + +
+
+
+
+ +
+ +
+ <emphasis>ibm,slot-error-detail</emphasis> + + This call combines device driver information, as gathered by the + device driver prior to this call, with information derived by firmware + from the platforms I/O infrastructure to create a detailed event log + concerning a recoverable EEH event. In this way, both OS and platform + maintenance applications have access to all the information about a given + event. In addition, the OS can mark a PE configuration address as being + in an unavailable state due to excessive errors. + The caller supplies the device driver information, referenced by + the + Device_Driver_Error_Buffer argument. The + Returned_Error_Buffer argument points to a buffer + that this call fills with valid error log data as defined in the error + log format section. Different platforms log using different versions of + the error logging format. The error log data may include platform + specific data as well as device driver data passed in the + Device_Driver_Error_Buffer. Regardless of the error + log version used, the data in the + Returned_Error_Buffer is in an extended log format as + defined in + . When the call returns data + for version 6 or greater, the device driver error buffer data is included + as the last User Data section. The device driver data in the return + buffer may be truncated from what is passed by the device driver or + completely eliminated as necessary to ensure that the returned buffer + length is not exceeded. + The + Config_addr supplied is the PE configuration address + ( + PHB_Unit_ID_Hi, PHB_Unit_ID_Low, and config_addr) + for the PE, obtained as defined in + , or a configuration address + within the PE. The I/O fabric information that is captured by the + platform consists of useful PCI configuration state at and above the + supplied + Config_addr. + This RTAS call supports both plug-in PCI cards and built-in PCI + IOAs. + In this section, the term unavailable, when applied to a PE, means + that + ibm,read-slot-reset-state2 would return a PE Reset + State of 5 (PE is unavailable) at the current time. + + + + R1--1. + + For the EEH option: The + argument call buffer for the + ibm,slot-error-detail call must correspond to the + definition given in + . + + + Argument Call Buffer + <emphasis>ibm,slot-error-detail</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + ibm,slot-error-detail + + + + + + Number Inputs + + + + 8 + + + + + + Number Outputs + + + + 1 + + + + + + Config_addr + + + + Configuration address (Register numbers set to 0) + + + + + + PHB_Unit_ID_Hi + + + + Represents the most-significant 32-bits of the Unit ID of + the PHB that corresponds to the + config_addr + + + + + + PHB_Unit_ID_Low + + + + Represents the least-significant 32-bits of the Unit ID + of the PHB that corresponds to the + config_addr + + + + + + Device_Driver_Error_Buffer + + + + Real address of an error log buffer containing device + driver debug data. This data is integrated into the final error + log + + + + + + Device_Driver_Error_Buffer_Length + + + + Length of the + Device_Driver_Error_Buffer + + + + + + Returned_Error_Buffer + + + + Real address of an error log buffer to contain a + compliant error log entry composed by the RTAS + + + + + + Returned_Error_Buffer_Length + + + + Length of the + Returned_Error_Buffer + + + + + + Function + + + + 1: Temporary Error + 2: Permanent Error + + + + + Out + + + + Status + + + + 1: No Error Log Returned + 0: Success + -1: Hardware Error (cannot create log) + + + + +
+
+
+ + + R1--2. + + The + Returned_Error_Buffer format must be the same as + implemented by + event-scan on the platform. + + + + + R1--3. + + To prevent standard error log record + truncation, the + Returned_Error_Buffer_Length must equal the value of + the OF device tree property + “rtas-error-log-max”. + + + + + R1--4. + + If the PE corresponding to the + Config_addr is in the MMIO Stopped or DMA Stopped + state, then the + ibm,slot-error-detail RTAS call must return a + Status of 0 and an error log that defines the FRU or + FRUs to which the error is isolated. + + + + + R1--5. + + If the communications with the + Config_addr is not available, the path to the + Config_addr cannot be traversed at the current time, + or this call has previously made with a + Function of 2 and none of the conditions that reset + this state have been met (that is the PE is unavailable), then the + ibm,slot-error-detail RTAS call must return a + Status of 0 and an error log that defines the FRU or + FRUs to which the error is isolated. + + + + + R1--6. + + If the conditions in Requirements + and + are not met, then the + ibm,slot-error-detail RTAS call must return a + Status of 1, no error found, with no error log entry + returned. + + Software and Platform Implementation Note: In some + cases, the platform may return an information-only error log to meet + Requirements + and + . For example, in some + implementations this might be appropriate if the actual error was already + logged via another RTAS call or this call was previously made with a + Function of 2 and none of the conditions that reset + this state have been met. + + + + + R1--7. + + Once a PE is unavailable and in the + absence of any state-resetting action by the OS that clears the + corresponding PE configuration address EEH error (for example, reset or + power cycle), the platform must return an error log in response to the + ibm,slot-error-detail RTAS call. + + + + + R1--8. + + Once a PE has experienced a + state-resetting action by the OS that clears the corresponding PE + configuration address EEH error (for example, reset or power cycle), that + makes the PE available, the platform must return a + Status of 1, no error found, with no error log entry + in response to the + ibm,slot-error-detail RTAS call. + + + + + R1--9. + + If the ibm,slot-error-detail RTAS call + Device_Driver_Error_Buffer_Length argument is + non-zero, indicating the existence of optional device driver error data, + the referenced buffer must contain an extended event log as defined in + . + + + + + R1--10. + + (Requirement Number Reserved For + Compatibility) + + + + + R1--11. + + When the + ibm,slot-error-detail RTAS call returns an extended + log debug record in the buffer specified by the + Returned_Error_Buffer argument as mandated by + Requirements + and + it must truncate the record at + the length specified by the + Returned_Error_Buffer_Length argument. + + + + + R1--12. + + If a Function of 2 is passed to the + ibm,slot-error-detail RTAS call, RTAS must + unconditionally set the state of the PE corresponding to the + Config_addr to permanently unavailable; that is, any + subsequent calls to + ibm,read-slot-reset-state2 return a PE Reset State of + 5 (PE is unavailable) with the + PE Unavailable Info argument set to zero. + + + + + R1--13. + + RTAS must not change a PE Reset state + of permanently unavailable unless one of the following occur: + + + + A PCI Hot Plug condition for the slot is encountered (as + determined by the power being turned off and then on for the slot) + + + + The power domain is power cycled for another reason (for + example, a power down of the OS image that owns the IOA) + + + + The state is cleared by a partition reboot or a dynamic LPAR + reassignment of the PCI configuration address. + + + + + + + R1--14. + + After a PE enters the MMIO and DMA + Stopped States due to an error, the platform must keep cached error + information relative to that error, for reporting via the + ibm,slot-error-detail RTAS call, until any one of the + following events occurs: + + + + The ibm,slot-error-detail RTAS call is called and the + error information is returned. + + + + The reset to the PE is activated via the + ibm,set-slot-reset RTAS call. + + + + The removal of the PE from the DMA Stopped State via + Function 3 of the + ibm,set-eeh-option RTAS call. + + + + The start of a DR operation as signalled by the calling of + set-indicator with + isolation-state set to isolate. + + + + + + + R1--15. + + Prior to calling the + ibm,slot-error-detail RTAS call, the PE which + includes the + Config_addr must not be in the MMIO Stopped State, if + the maximum amount of useful information is to be captured, as defined by + Requirement + . + + + + + R1--16. + + The firmware implementing the + ibm,slot-error-detail is responsible for gathering + the PCI fabric configuration space registers, including those at the + specified + Config_addr, and also any other non-PCI I/O fabric + registers that might be useful for debug purposes (for example, internal + PHB registers), with the suggested appropriate minimum set of PCI + configuration registers captured for each PCI device being as indicated + in + . + + + Suggested Minimum PCI Configuration Registers to + Capture for + <emphasis>ibm,slot-error-detail</emphasis> + + + + + + + + + + Data Structure + + + + + Offset within the Data + Structure + + + + + Register + + + + + + + + Base PCI Configuration Space Header + (for all PCI devices) + + + 0x00 + + + Vendor ID + + + + + 0x02 + + + Device ID + + + + + 0x04 + + + Command + + + + + 0x06 + + + Status + + + + + 0x08 + + + Revision ID + + + + + 0x09 + + + Class Code + + + + + Type 0 Configuration Space Header + (for non-PCI bridges only) + + + 0x2C + + + Subsystem Vendor ID + + + + + 0x2E + + + Subsystem ID + + + + + Type 1 Configuration Space Header + (for PCI bridges only) + + + 0x1E + + + Secondary Status + + + + + PCI-X Capabilities List + (for all PCI-X devices) + + + 0x02 + + + PCI-X Command (Type 0 Configuration Header) + PCI-X Secondary Status (Type 1 Configuration + Header) + + + + + 0x04 + + + PCI-X Status (Type 0 Configuration Header) + PCI-X Bridge Status (Type 1 Configuration Header) + + + + + PCI Express Capabilities Structure + (for all PCI Express devices) + + + 0x02 + + + PCI Express Capabilities + + + + + 0x04 + + + Device Capabilities + + + + + 0x08 + + + Device Control + + + + + 0x0A + + + Device Status + + + + + 0x0C + + + Link Capabilities + + + + + 0x10 + + + Link Control + + + + + 0x12 + + + Link Status + + + + + 0x14 + + + Slot Capabilities + + + + + 0x18 + + + Slot Control + + + + + 0x1A + + + Slot Status + + + + + 0x1C + + + Root Control + + + + + 0x1E + + + Root Capabilities + + + + + 0x20 + + + Root Status + + + + + Advanced Error Reporting Capability + (for all devices implementing AER) + + + 0x00 + + + PCI Express Enhanced Capability Header + + + + + 0x04 + + + Uncorrectable Error Status + + + + + 0x08 + + + Uncorrectable Error Mask + + + + + 0x0C + + + Uncorrectable Error Severity + + + + + 0x10 + + + Correctable Error Status + + + + + 0x14 + + + Correctable Error Mask + + + + + 0x18 + + + Advanced Error Capabilities and Control + + + + + 0x1C + + + Header Log + + + + + 0x2C + + + Root Error Command (Root Ports only) + + + + + 0x30 + + + Root Error Status (Root Ports only) + + + + + 0x34 + + + Correctable Error Source Identification (Root Ports + only) + + + + + 0x36 + + + Error Source Identification (Root Ports only) + + + + +
+
+
+ + + R1--17. + + If the + ibm,slot-error-detail RTAS call is made with the PE + in the PE state of 2 (as defined by + ), then the platform must not + remove the PE from that state in order to probe the PCI fabric. + + + + + R1--18. + + If the ibm,slot-error-detail RTAS call is made with the PE + in the PE state of 4 (as defined by + ), then the + ibm,slot-error-detail RTAS call must return with the + PE in the PE state of 4, except that if an error occurs in the course of + probing the PCI fabric that requires a reset of the PE by the platform, + then discontinue probing, return a Status of 0 or 1 (as appropriate), and + return the PE in the PE state of 2. + + Software and Platform Implementation Notes: + + + + + In Requirement + , it is possible, as a part of + the firmware probing the fabric, that the PE will transition temporarily + to a PE state of 2, in the case where another EEH event occurs as part of + the firmware probing the fabric. If the EEH event does not require a + reset of the PE for these subsequent EEH events, then the firmware may + transition the PE back to the PE state of 4, to continue probing. Several + of these PE state 4->2->4 events may occur as a result of probing + the fabric. + + + + In Requirement + if an EEH event occurs as a + result of probing that fabric that results in a reset of the PE, the + returned PE state of 2 does not necessarily need to be checked for by the + software on return from the call. The case where this occurs is expected + to be rare, and probably signals a non-transient error. In this case the + software can continue on with the recovery phase of the EEH processing, + and will eventually hit the same event on further processing. + + + + +
+ +
+ +
+ +
+ Bridged-I/O EEH Support Option + + The Bridged-I/O EEH Support Option provides RTAS calls for + restoring the boot time configuration of EEH error domains that contain + multiple IOAs or multi-function IOAs (for example, mult-function I/O + cards which are constructed by placing multiple IOAs beneath a PCI to PCI + bridge or PCI Express switch). During EEH recovery, the IOA is subject to + a full hardware reset. These calls recreate any configuration changes, + from full hardware reset, that the firmware normally makes during + platform boot prior to turning the IOA over to the client program plus + any subsequent changes made via ibm,change-msi. Once these calls restore + the IOA initial configuration plus interrupts changes, it is the + responsibility of the device driver, as part of its EEH recover + procedure, to finish the configuration restoration with any non + interrupts changes it makes to the IOA. + Bridge types supported by these calls include PCI to PCI bridges + (for example, a PCI to PCI bridge on an I/O plug-in card) and PCI Express + bridges and switches. + This option does not address the initialization of bridges and + switches which are outside of all PEs. Those are the platform’s + responsibility. + If there is no supported bridge or switch at the PE configuration + address specified by the input parameters, then these calls return a + “success” without configuring anything, and therefore these + calls can be made for all EEH recovery events, regardless of the type of + I/O present. The PE configuration address ( + PHB_Unit_ID_Hi, PHB_Unit_ID_Low, and config_addr) + for the PE is obtained as defined in + . + + Software Implementation Note: Neither + ibm,configure-bridge nor + ibm,configure-pe restores changes to an IOA’s + post boot configuration registers except as made through the + ibm,change-msi RTAS call (for example, to the point + of being able to issue PCI memory space MMIO operations to the IOA, or + perform DMA operations from the IOA). It is the software’s + responsibility to restore any post boot non interrupt changes it made to + the IOA’s PCI configuration space registers after calling one of + these two RTAS calls. + +
+ <emphasis>ibm,configure-bridge</emphasis> + + + + R1--1. + + For the Bridged-I/O EEH Support option: The + ibm,configure-bridge call + must implement the argument call buffer defined by + . + + + Argument Call Buffer + <emphasis>ibm,configure-bridge</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + ibm,configure-bridge + + + + + + Number Inputs + + + + 3 + + + + + + Number Outputs + + + + 1 + + + + + + Config_addr + + + + PE configuration address (Register fields set to + 0) + + + + + + PHB_Unit_ID_Hi + + + + Represents the most-significant 32-bits of the Unit ID of + the PHB that corresponds to the + config_addr + + + + + + PHB_Unit_ID_Low + + + + Represents the least-significant 32-bits of the Unit ID + of the PHB that corresponds to the + config_addr + + + + + Out + + + + Status + + + + 990x: Extended delay where x is a number 0-5 (see + Software Implementation note below) + 0: Success + -3: Parameter Error + + + + +
+ + Software Implementation Note: When the 990x + Status is returned, it is suggested that software + delay for 10 raised to the x milliseconds (where x is the last digit of + the 990x return code), before calling + ibm,configure-bridge again. However, software may + issue the + ibm,configure-bridge call again either earlier or + later than this. + + Firmware Implementation Note: + + + + + This call needs to limit the long busy to 9900-9902 with at most + a total of 1/5 second before the + ibm,configure-bridge succeeds. Any longer delays may + cause subsequent hardware or application failures. + + + + For hardware errors, return a + Status of 0 (Success). Hardware errors are + subsequently discovered by further accesses to the PE and additional EEH + events. + + +
+
+ + + R1--2. + + The caller of + ibm,configure-bridge must + provide the PE configuration address, otherwise the RTAS call returns a + -3, “Parameter Error”. + + + + + R1--3. + + The ibm,configure-bridge call + must set up all the PCI to PCI bridges, PCI Express bridges, and PCI + Express switches within the PE, the way they were delivered at boot time + with any modifications made to it via RTAS calls after boot, and must do + so with a single sequence of calls to + ibm,configure-bridge. + + + + + R1--4. + + The ibm,configure-bridge call + must only return a + Status of 990x if one of the following conditions is + true: + + + + The operation was not started. + + + + Firmware is able to restart the same call for this PE even when + other intervening calls to + ibm,configure-bridge have occurred (That is, OSs are + not required to serialize calls to + ibm,configure-bridge). + + + + + + + R1--5. + + Software must + complete all MMIO operations to the IOAs within a PE prior to calling the + ibm,configure-bridge RTAS call for a PE and must not + issue new MMIO operations to the IOAs within the specified PE until after + the RTAS call is complete. + + + + + R1--6. + + On return from the + ibm,configure-bridge RTAS call, the platform must + have the PE in the same EEH state (as defined by + ) as when the call was made, + except that if an error occurs in the course of probing the PCI fabric + that requires a reset of the PE by the platform, then discontinue + probing, return a + Status of 0 or 1 (as appropriate), and return the PE + in the PE state of 2. + + +
+ + + Software and Platform Implementation Note: + + + + + Given Requirements + and + , it is permissible for the + platform to temporarily transition the PE from a PE state of 2 to PE + state of 4, if the call is made with a PE state of 2 but the hardware + requires a PE state of 4 to get access to the PCI fabric. It is also + permissible for the platform to go through several of these state changes + during the execution of the call if there are errors that occur during + the course of probing the PCI fabric that put the PE back into the PE + state of 4. + + + + In Requirement + if an EEH event occurs as a + result of probing that fabric that results in a reset of the PE, the + returned PE state of 2 does not necessarily need to be checked for by the + software on return from the call. The case where this occurs is expected + to be rare, and probably signals a non-transient error. In this case the + software can continue on with the recovery phase of the EEH processing, + and will eventually hit the same event on further processing. + + + +
+ +
+ <emphasis>ibm,configure-pe</emphasis> + This call has about the same semantics as the + ibm,configure-bridge RTAS call, except that + it: + + + + Has the additional semantics of bypassing the configuration + process if the PE has previously not been reset by the platform as a + result of entering the EEH Stopped State. + + + + Configures all the configurations spaces within the PE, + including those of the endpoint devices within the PE (see Requirement + ). + + + + Thus, this RTAS call can be made at the beginning of any EEH + processing. + + + + R1--1. + + For the Bridged-I/O EEH Support option: The + ibm,configure-pe call must implement the argument + call buffer defined by + . + + + Argument Call Buffer + <emphasis>ibm,configure-pe</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + ibm,configure-pe + + + + + + Number Inputs + + + + 3 + + + + + + Number Outputs + + + + 1 + + + + + + Config_addr + + + + PE configuration address (Register fields set to + 0) + + + + + + PHB_Unit_ID_Hi + + + + Represents the most-significant 32-bits of the Unit ID of + the PHB that corresponds to the + config_addr + + + + + + PHB_Unit_ID_Low + + + + Represents the least-significant 32-bits of the Unit ID + of the PHB that corresponds to the + config_addr + + + + + Out + + + + Status + + + + 990x: Extended delay where x is a number 0-5 (see + Software Implementation note below) + 0: Success + -3: Parameter Error + + + + +
+ + Software Implementation Note: When the 990x + Status is returned, it is suggested that software + delay for 10 raised to the x milliseconds (where x is the last digit of + the 990x return code), before calling + ibm,configure-pe again. However, software may issue + the + ibm,configure-pe call again either earlier or later + than this. + + Firmware Implementation Note: + + + + + This call needs to limit the long busy to 9900-9902 with at most + a total of 1/5 second before the + ibm,configure-pe succeeds. Any longer delays may + cause subsequent hardware or application failures. + + + + For hardware errors, return a + Status of 0 (Success). Hardware errors are + subsequently discovered by further accesses to the PE and additional EEH + events. + + +
+
+ + + R1--2. + + The caller of + ibm,configure-pe must provide the PE configuration + address, otherwise the RTAS call returns a -3, “Parameter + Error”. + + + + + R1--3. + + If the specified + PE has been configured after the last platform or OS initiated reset to + the specified PE with + ibm,configure-connector, + ibm,configure-bridge, or + ibm,configure-pe, then the call must return with a + Status of 0 (Success) without doing any bridge or + switch configuration, otherwise the call must set up the configuration + spaces of all the PCI to PCI bridges, PCI Express bridges, PCI Express + switches, and endpoint functions within the PE, the way they were + delivered at boot time except with all sticky error bits left intact, any + changes made by calls to ibm,change-msi retained, and must do so with a + single sequence of calls to + ibm,configure-pe. + + Software Implementation Notes: + + + + + The configuration of endpoint functions (the “and endpoint + functions” part) in Requirement + was added to the architecture + after the firmware without that functionality in the + ibm,configure-pe RTAS call was shipping. Therefore, + any device driver that might run legacy implementations needs to be + prepared to restore all endpoint function config spaces, since the + ibm,configure-pe RTAS call might not. + + + + The ibm,configure-pe RTAS call does not restore + non-interrupts configuration space changes that were made after boot + (that is, under direction of the device driver or OS). Therefore, use of + the + ibm,configure-pe RTAS call does not absolve the + device driver or OS from the restoration of non-interrupts the PCI + configuration space for changes that were made to the configuration space + after boot (see Requirement + ). + + + + + + + R1--4. + + The ibm,configure-pe call must only return a + Status of 990x if one of the following conditions is + true: + + + + The operation was not started. + + + + Firmware is able to restart the same call for this PE even when + other intervening calls to + ibm,configure-pe have occurred (That is, OSs are not + required to serialize calls to + ibm,configure-pe). + + + + + + + R1--5. + + Software must + complete all MMIO operations to the IOAs within a PE prior to calling the + ibm,configure-pe RTAS call for a PE and must not + issue new MMIO operations to the IOAs within the specified PE until after + the RTAS call is complete. + + + + + R1--6. + + On return from the + ibm,configure-pe RTAS call, the platform must have + the PE in the same EEH state (as defined by + ) as when the call was made, + except that if an error occurs in the course of probing the PCI fabric + that requires a reset of the PE by the platform, then discontinue + probing, return a + Status of 0 or 1 (as appropriate), and return the PE + in the PE state of 2. + + +
+ + + Software and Platform Implementation Note: + + + + + Given Requirements + and + , it is permissible for the + platform to temporarily transition the PE from a PE state of 2 to PE + state of 4, if the call is made with a PE state of 2 but the hardware + requires a PE state of 4 to get access to the PCI fabric. It is also + permissible for the platform to go through several of these state changes + during the execution of the call if there are errors that occur during + the course of probing the PCI fabric that put the PE back into the PE + state of 2. + + + + In Requirement + if an EEH event occurs as a + result of probing that fabric that results in a reset of the PE, the + returned PE state of 2 does not necessarily need to be checked for by the + software on return from the call. The case where this occurs is expected + to be rare, and probably signals a non-transient error. In this case the + software can continue on with the recovery phase of the EEH processing, + and will eventually hit the same event on further processing. + + + +
+ +
+ +
+ Error Injection Option + + The Error Injection option (ERRINJCT) allows testing software to + check out the OS’s error paths. This architecture defines the + following abstract error categories: + Fatal: Platform Architectural state has been corrupted to an + unknown extent. Further valid processing is not possible. + Recovered Random Event: The Central Electronics Complex (CEC) + experienced an anomaly. However, platform architectural state has been + preserved/restored. The OS should log the event and continue + processing. + Recovered Special Event: The CEC has experienced a statistically + significant anomaly. While platform architectural state has been + preserved/restored, the OS should log the event and discontinue the use + of this processor as soon as possible to avoid a fatal situation. + Corrupted Page: The System Memory page (Up to 4 KB) contains + uncorrectable errors. The OS should log the event and avoid accessing + this page in the future. The OS recovery is possible given that it can + either recover the page from backing storage or isolate the error from + unaffected processes. + Corrupted SLB: The processor’s Segment Look-aside Buffer is + corrupted. The OS should log the event and can recover if it can + repopulate the SLB from internal tables. + Translator Failure: The processor’s virtual to real + translation hardware has failed. The processor’s architectural + state has been preserved in System Memory. The OS may be able to continue + the failed processor’s program and log the event on an alternate + processor in the future. + IOA Bus Error An error has occurred on the I/O bus on which an I/O + Adapter (IOA) is attached. IOA or Device driver recovery from the error + is possible if the error is such that it is reported to the IOA. Device + driver recovery of the IOA’s operations is possible when the error + is not reported to the IOA, if the EEH option is implemented and + enabled. + The ERRINJCT option RTAS call performs a platform dependent + accurate simulation of the abstract error requested. In some cases, the + platform hardware actually injects an error into the hardware. In others + cases, the platform may simply report the anomaly without generating an + error. Additionally, the ERRINJCT option provides access to platform + specific error injection logic for the benefit of platform aware test + software. + + + + R1--1. + + For the ERRINJCT option: RTAS must implement the + ibm,open-errinjct call + using the argument buffer defined by + . + + + Argument Call Buffer + <emphasis>ibm,open-errinjct</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + ibm,open-errinjct + + + + + + Number Inputs + + + + 0 + + + + + + Number Outputs + + + + 2 + + + + + Out + + + + Open Token + + + + If + Status is 0, then use this Open Token for + corresponding + ibm,errinjct and + ibm,close-errinjct calls + + + + + + Status + + + + 990x: Extended delay, where x is a number 0-5 (see + text) + 0: Success + -1: Hardware Error + -2: Busy, try again later + -4: Already open + -5: PCI Error Injection is not enabled (not + available) + + + + +
+ When the 990x + Status is returned, it is suggested that software + delay for 10 raised to the x milliseconds (where x is the last digit of + the 990x return code), before calling with the same parameters. However, + software may issue the call again either earlier or later than + this. + + Architecture Note: The output buffer is intentionally + reversed from what it should be, according to Requirement + (that is, + Status not first output), due to code that was + implemented and shipped as defined, above. +
+
+ + + R1--2. + + For the ERRINJCT option: On successful completion of + the + ibm,open-errinjct call, Firmware must return an Open + Token which uniquely identifies the caller on following + ibm,close-errinjct and + ibm,errinjct calls (Firmware may also need to keep + around other information about the caller that uniquely identifies the + caller when correlated with the Open Token) and must allocate the + ERRINJCT facilities to this caller until this same user calls + ibm,close-errinjct. + + + + + R1--3. + + For the ERRINJCT option: If the ERRINJCT facility has + been previously opened, a call to + ibm,open-errinjct call, must return a -4. + + + + + R1--4. + + For the ERRINJCT option: RTAS must implement the + ibm,close-errinjct call + using the argument buffer defined by + . + + + Argument Call Buffer + <emphasis>ibm,close-errinjct</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + ibm,close-errinjct + + + + + + Number Inputs + + + + 1 + + + + + + Number Outputs + + + + 1 + + + + + + Open Token + + + + Open Token that was returned on the corresponding + ibm,open-errinjct calls + + + + + Out + + + + Status + + + + 990x: Extended delay where x is a number 0-5 (see + text) + 0: Success + -1: Hardware Error + -2: Busy, try again later + -4: Close Error (User is not the one that opened the + ERRINJCT facility or facility not open) + + + + +
+ When the 990x + Status is returned, it is suggested that software + delay for 10 raised to the x milliseconds (where x is the last digit of + the 990x return code), before calling with the same parameters. However, + software may issue the call again either earlier or later than + this. +
+
+ + + R1--5. + + For the ERRINJCT option: If the ERRINJCT facility is + not open or was not previously allocated to the user via an + ibm,open-errinjct call (that is, the Open Token along + with any other pertinent data does not correspond with the user that + opened the facility via the + ibm,open-errinjct call), then a call to + ibm,close-errinjct call, must return a -4 and the + facility must remain open for use by the user that originally opened the + facility. + + + + + R1--6. + + For the ERRINJCT option: RTAS must implement the + ibm,errinjct call + using the argument buffer defined by + . + + + Argument Call Buffer + <emphasis>ibm,errinjct</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + ibm,errinjct + + + + + + Number Inputs + + + + 3 + + + + + + Number Outputs + + + + 1 + + + + + + Errinjct Token + + + + Token for the specific error injection class see + Requirement + + + + + + + Open Token + + + + The Open Token that was returned on the corresponding + ibm,open-errinjct call + + + + + + Working Buffer + + + + Real address of a 1 KB buffer on a 1 KB boundary + + + + + Out + + + + Status + + + + 990x: Extended delay where x is a number 0-5 + 0: Success + -1: Hardware Error + -2: Busy, try again later + -3 Argument Error (Optional) + -4: Call Error (User is not the one that opened the + ERRINJCT facility or facility not open) + + + + +
+ When the 990x + Status is returned, it is suggested that software + delay for 10 raised to the x milliseconds (where x is the last digit of + the 990x return code), before calling with the same parameters. However, + software may issue the call again either earlier or later than + this. +
+
+ + + R1--7. + + For the ERRINJCT option: If the ERRINJCT facility is + not open or was not previously allocated to the user via an + ibm,open-errinjct call (that is, the Open Token along + with any other pertinent data does not correspond with the user that + opened the facility via the + ibm,open-errinjct call), then a call to + ibm,errinjct call, must return a -4 and the facility + must remain open for use by the user that originally opened the + facility. + + + + + R1--8. + + For the ERRINJCT option: + The platform must include the + “ibm,errinjct-tokens” property as defined + below in the + /rtas node (see + ) of the OF device tree with a + specification for each implemented error injection class. + + + + + R1--9. + + For the ERRINJCT option: The errinjct-token-names + must be taken from the list provided in + . + + + Errinjct-token-names + + + + + + + + Errinjct-token-name + + + + + Errinjct function + + + + + + + + fatal + + + Simulate a platform fatal error. + + + + + recovered-random-event + + + Simulate a recovered random event + + + + + recovered-special-event + + + Simulate a recovered special (statistically significant) + event + + + + + corrupted-page + + + Corrupt the specified location (and potentially + surrounding locations up to the containing page) + + + + + corrupted-slb + + + Corrupt the SLB entry associated with a specific + effective address. + + + + + translator-failure + + + Simulate a translator failure. + + + + + ioa-bus-error + + + Simulate an error on an IOA bus - 32 bit address + specification only. + + + + + ioa-bus-error-64 + + + Simulate an error on an IOA bus - 64 bit address + specification. + + + + + platform-specific + + + Request the firmware perform a platform specific error + injection. + + + + + corrupted-dcache-start + + + Start causing a L1 data cache error + + + + + corrupted-dcache-end + + + Stop causing a L1 data cache error + + + + + corrupted-icache-start + + + Start causing an instruction cache error + + + + + corrupted-icache-end + + + Stop causing an instruction cache error + + + + + corrupted-tlb-start + + + Start corrupting TLB + + + + + corrupted-tlb-end + + + Stop corrupting TLB + + + + + upstream-IO-error + + + Inject I/O error above the IOA + + + + +
+
+
+ + + R1--10. + + For the ERRINJCT option: For the errinjct-tokens + implemented RTAS must use the work buffer format specified in + . + + + Errinjct Work Buffer Formats + + + + + + + + Errinjct-token-name + + + + + Errinjct work buffer format + + + + + + + + fatal + + + Undefined + + + + + recovered-random-event + + + Undefined + + + + + recovered-special-event + + + “1” for a non-persistent cpu recoverable + error + “2” for a persistent CPU recoverable + error + + + + + corrupted-page + + + The first cell contains the upper 32 bits of the real + address to corrupt. The second cell contains the lower 32 bits + of the real address to corrupt. + + + + + corrupted-slb + + + The first cell contains the effective address associated + with the SLB entry to corrupt + + + + + translator-failure + + + Undefined + + + + + ioa-bus-error + + + The first word contains I/O bus address, word aligned, at + which to inject the error. The second word is a mask used to + mask off up to 24 of the least significant bits of the address + which are not to be used in the comparison of address for error + injection (a 0 in a bit position masks off the bit, a 1 in the + bit position enables the bit to be used in the compare). The + third word is the config_addr on the bus which is to receive + the injected error. The fourth word is the + PHB_Unit_ID_Hi of the PHB that corresponds + to the + config_addr. The fifth word is the + PHB_Unit_ID_Low of the PHB that corresponds + to the + config_addr. The sixth word defines the + specifics of when and what to inject, as follows: + + See + for values 0 through + 19. + 20: (Optional) Disable PCI error injection for the + specified bus + 21: Obtain current error inject values. When RTAS returns + SUCCESS in the + Status field the work buffer field values + are populated with the current error injected. + + + + + ioa-bus-error-64 + + + The first and second words contain the I/O bus address, + double word aligned, at which to inject the error. The third + and fourth words are a mask used to mask off up to 64 of the + least significant bits of the address which are not to be used + in the comparison of address for error injection (a 0 in a bit + position masks off the bit, a 1 in the bit position enables the + bit to be used in the compare). The fifth word is the + config_addr of an IOA on the bus which is to receive the + injected error. The sixth word is the + PHB_Unit_ID_Hi of the PHB that corresponds + to the + config_addr. The seventh word is the + PHB_Unit_ID_Low of the PHB that corresponds + to the + config_addr. The eighth word defines the + specifics of when and what to inject, as follows: + + See + for values 0 through + 19. + 20: (Optional) Disable PCI error injection for the + specified bus + 21: Obtain current error inject values. When RTAS returns + SUCCESS in the + Status field the work buffer field values + are populated with the current error injected. + + + + + + platform-specific + + + See platform firmware documentation (RTAS component + specifications) for working buffer format for any particular + platform. + + + + + corrupted-dcache-start + corrupted-dcache-end + + + The first cell defines the specific action to + take: + 0: Parity error + 1: D-ERAT parity error + 2: tag parity error + The second cell defines the nature of the error: + 0: single + 1: solid + 2: hang + Supported injection modes are hardware specific and all + modes may not be supported on all hardware. The first supported + injection mode in the above list will be used if an unsupported + mode is specified (that is, first single, then solid, then + hang-pulse). If none of the above modes are available, then the + injection option most similar to single in functionality will + be used. + + + + + + + + + + + + + + + + + + + + corrupted-icache-start + corrupted-icache-end + + + The first cell defines the specific action to + take: + 0: parity error + 1: I-ERAT parity error + 2: cache directory 0 parity error + 3: cache directory 1 parity error + The second cell defines the nature of the error: + 0: single + 1: solid + 2: hang + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + corrupted-tlb-start + corrupted-tlb-end + + + The first cell defines the nature of the error: + 0: single + 1: solid + 2: hang + Supported injection modes are hardware specific and all + modes may not be supported on all hardware. The first supported + injection mode in the above list will be used if an unsupported + mode is specified (that is, first single, then solid, then + hang-pulse). If none of the above modes are available, then the + injection option most similar to single in functionality will + be used. + + + + +
+ + Programming Note: Options having a + “-start” and corresponding “-end” must be called + in pairs on the same processor. The corresponding “-end” + option should be called after the injected error has been noticed and + processed by the caller. On the same processor, other error inject + options should not be called between a “-start” and + “-end” sequence. However, it is possible to inject the same + type of error multiple times by calling “-start” on that CPU + as long as the “nature of error” is “single”. The + buffer contents should be the same for a “-start” and + corresponding “-end”. While not recommended -end can be + replaced with a call to + ibm,close-errinjct, but improper cleanup the machine + may result, with the machine left in an unknown state. +
+
+ + + R1--11. + + For the ERRINJCT option: If the platform + notifies the OS of a specific CEC error using the machine check interrupt in + response to an + ibm,errinjct RTAS call, the platform must do so only + when the processor’s MSRRI bit is active, unless said error is fatal or + involves accessing a storage location that has itself been corrupted or + is accessed through a corrupted SLB entry. + + + + + R1--12. + + For the ERRINJCT option with the LPAR + option: Hypervisor RTAS must allow a partition to only corrupt + its own memory pages. + + + + + R1--13. + + For the ERRINJCT option with the LPAR + option: Hypervisor RTAS must allow a partition to inject IOA + bus errors only if all of the following are true: + + + + The IOA bus is not shared with other partitions. + + + + The EEH option is implemented and enabled for the bus on which + the error injection is requested. + + + + + + + R1--14. + + For the ERRINJCT option with the LPAR option: The + platform must allow at most one partition to issue platform-specific + errinjct calls. + + + + + R1--15. + + For the SPLPAR option: The platform must either + implement actual hardware error injection with these interfaces, or must + fabricate appropriate partition behavior (machine check, error logs, + etc.) as if the hardware error had happened. + + + + + R1--16. + + For the Multi-threading Processor + option: All threads + on the processor on which the error is injected must be prepared to + handle the error. + + + + + R1--17. + + For the Error Injection option: The software using + the + ibm,errinjct call must be prepared to receive a -3 + for non-implemented errinjct work buffer formats. + + + + + R1--18. + + For the + ioa-bus-error + and + ioa-bus-error-64 + functions of the ERRINJCT option: For each + ibm,errinjct RTAS call invocation, the platform must + inject the error specified in the + working buffer at most once. + + + Semantics for + <emphasis>ioa-bus-error</emphasis> + <emphasis>ioa-bus-error</emphasis> Sixth Word and + <emphasis>ioa-bus-error-64</emphasis> Eighth Word Values 0-19 + + + + + + + + + + + Operation + + + + + Address Space + + + + + Cell Value + + + + + Conventional PCIPCI-X Mode 1PCI-X Mode + 2 + + + + + PCI Express + + + + + + + + + Load + + + + PCI Memory + + + 0 + + + Inject an Address Parity Error + + + Inject a TLP ECRC Error + + For PHB implementations that do not allow injection of + a TLP ECRC error into the request, or for the case where the + injection would be in violation of Requirement + due to the hardware + configuration, the platform should emulate the error by + setting the appropriate error state in the PHB when EEH is + enabled. + + + + + + 1 + + + Inject a Data Parity Error + + + + + PCI I/O + + + 2 + + + Inject an Address Parity Error + + + + + 3 + + + Inject a Data Parity Error + + + + + PCI Configuration + + + 4 + + + Inject an Address Parity Error + + + + + 5 + + + Inject a Data Parity Error + + + + + + Store + + + + PCI Memory + + + 6 + + + Inject an Address Parity Error + + + Inject a TLP ECRC Error (optional) + + + + + 7 + + + Inject a Data Parity Error + + + + + PCI I/O + + + 8 + + + Inject an Address Parity Error + + + + + 9 + + + Inject a Data Parity Error + + + + + PCI Configuration + + + 10 + + + Inject an Address Parity Error + + + + + 11 + + + Inject a Data Parity Error + + + + + DMA read + + + PCI Memory + + + 12 + + + Inject an Address Parity Error + + + Inject a TLP ECRC Error + + + + + 13 + + + Inject a Data Parity Error + + + + + 14 + + + Inject a Master Abort (no response to IOA) Error + + + -- + + + + + 15 + + + Inject a Target Abort + + + Inject a Completer Abort or Unsupported Request + + Inject the error that is injected on a TCE Page + Fault. + + + + + + DMA write + + + PCI Memory + + + 16 + + + Inject an Address Parity Error + + + Inject a TLP ECRC Error + + + + + 17 + + + Inject a Data Parity Error + + + + + 18 + + + Inject a Master Abort (no response to IOA) Error + + + -- + + + + + 19 + + + Inject a Target Abort + + + Not Applicable + + + + +
+
+
+
+ + + + Platform Implementation Notes: + + + + + Platforms that implement LPAR normally do not allow any partition + to be configured to perform platform-specific errinjct calls since they + are capable of crashing the entire complex. However, the should provide + special hidden overrides for laboratory testing purposes. + + + + + Software and Firmware Implementation Notes: + + + + + When a call to + ibm,errinjct results in an error injected into a + processor, then the error is injected on the same processor as the one + that called the + ibm,errinjct RTAS call, not the processor that called + the + ibm,open-errinjct. The OS could call + ibm,open-errinjct, + ibm,errinjct, and + ibm,close-errinjct from three different + processors. + + + + For usability reasons, the + ibm,close-errinjct RTAS call should do a reasonable + amount of cleanup; turning off error injection where it can. However, + since the ERRINJCT option is intended for internal use (that is, not + intended to be productized) and since software is allowed to basically + set unlimited error injections between the calls to + ibm,open-errinjct and + ibm,close-errinjct, the firmware may vary by + implementation as to what is cleaned up and what is not. An example of + something that might be very difficult to clean up is injection of memory + errors. Something that might be easier is to turn off the error injection + in all bridges to which the caller has access. Users of the ERRINJCT + option should consult the implementation documentation for a particular + platform to learn about the level of cleanup that is done in the + ibm,close-errinjct call for that implementation. In + the severe case, a reboot may even be necessary after the + ibm,close-errinjct in order to clear the error. In + other cases it may be possible for the caller to partially disable an + error that it has set by setting a benign error (for example, in the PCI + error injection case, by setting the error injection for a bus that was + previously set to inject an error to an address that will never occur to + that IOA). + + + + Test developers are encouraged not to extensively use the + platform-specific option to this function. In general, platform-specific + implementation options are not carried forward to new platforms. + + + +
+ +
+ Firmware Assisted Non-Maskable Interrupts Option + (FWNMI) + + The FWNMI option provides firmware support for System Reset + interrupts and platform dependent error recovery for recoverable machine + checks. The firmware gets control on a non-maskable interrupt (NMI), + analyses the condition, and, if the processor was not running inside the + hypervisor, reports its findings to the OS. The OS registers system reset + and machine check handlers by issuing either the + ibm,nmi- register or + ibm,nmi- register-2 RTAS call. In addition, with + these calls the OS permanently relinquishes to firmware the Machine State + Register’s Machine Check Enable bit, the two hundred fifty six + (256) bytes of the System Reset Interrupt vector starting at real + location 0x100, the two hundred fifty six (256) bytes of the Machine + Check Interrupt vector starting at real location 0x200, as well as the + storage page starting at real location 0x7000. The RTAS firmware records + the entry points of the OS notification routines to call to report the + results of the firmware’s analysis and any attempted recovery + should the hardware signal a machine check or system reset interrupt. The + results of an error analysis are reported via a standard error log + structure as defined in + . The storage containing the + error log structure is subsequently released back to firmware use by the + OS after it has completed its event handling by the issuance, from the + interrupted processor, of the + ibm,nmi-interlock RTAS call. Multiple processors of + the same OS image may experience fatal events at, or about, the same + time. The first processor to enter the machine check handling firmware + reports the fatal error. Subsequent processors serialize waiting for the + first processor to issue the + ibm,nmi-interlock call. These subsequent processors + report “fatal error previously reported”. If, after the + firmware makes a Machine Check call back, and before the OS issues the + ibm,nmi-interlock call, the same processor that is + currently holding the storage containing the error log structure receives + another Machine Check NMI, the firmware has no choice but to declare the + condition fatal, log the result and execute the partition’s reboot + policy. + When the OS gets control after a machine check, at its registered + machine check notification routine, all architected processor registers + have been restored to the values they contained when the firmware was + notified of the interrupt, except for register R3 which contains a real + address that points to a 16 byte structure. The first 8 bytes of this + area contains the original contents of R3 and the second 8 bytes contains + the fixed portion of the standard error log structure. If firmware is + able to immediately make a repair determination, the fixed portion + indicates that an additional variable part is present and follows the + fixed part per the standard error log structure. For some other errors, + the determination of the repair action is delayed, and the firmware + reports these determinations asynchronously to handling the machine + check. The repair action log is queued in the NVRAM and is reported + either in a subsequent + event-scan if the OS image remains operational, or on + a subsequent boot. In no case, does the OS call + check-exception in its machine check notification + routine. + The difference between + ibm,nmi- register and + ibm,nmi- register-2 is that + ibm,nmi- register allocates the error reporting + structure in RTAS space while + ibm,nmi- register-2 places the error reporting + structure in real page 7. New OS designs should use + ibm,nmi- register since support for + ibm,nmi- register-2 will be terminated at some future + date. + As with all first level interrupt service routines, the SPRG-2 + register is used to save the state of one general purpose register while + the processor computes the location of its state save area. + + Implementation Note: An acceptable non-LPAR firmware + implementation for the NMI check handlers saves one register in an + SPRG-2. Then, using the processor number register, determines an offset + into a page 7 table of addresses to the start of a per processor RTAS + save area (only need a single register saved per processor), and acquires + a lock located in page 7 to serialize the use of the RTAS state save area + among potentially competing processors. The MSRME + bit then prevents single processor Machine Check + stacking in the interval between the Machine Check call back and the + ibm,nmi-interlock call. LPAR implementations should + minimize potential effects to innocent partitions due to Machine Check + Interrupts affecting other partitions. + If the NMI was taken inside the hypervisor, then, if the firmware + determines that the condition is recoverable, the hypervisor recovery + routine is invoked. If the condition is not recoverable, hypervisor clean + up routines establish a safe state and mark the hypervisor return routine + to invoke the proper OS registered NMI routine rather than doing the + standard hypervisor return. + + + + R1--1. + + All platforms must implement the FWNMI + option. + + + + + R1--2. + + For the FWNMI option: + The platform must include the + “ibm,nmi-register” + RTAS function property name in the OF + /rtas node. + + + + + R1--3. + + For the FWNMI option: + The platform must include the + “ibm,nmi-register-2” + RTAS function property name in the OF + /rtas node if the platform requires support from + interim OS versions. + + + + + R1--4. + + For the FWNMI option: RTAS must implement the + ibm,nmi-register and/or + ibm,nmi-register-2, calls as appropriate per + Requirements + and + using the argument buffer + defined by + . + + + Argument Call Buffer + <emphasis>ibm,nmi-register or ibm,nmi-register-2</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + ibm,nmi-register or nmi-register-2 + + + + + + Number of Inputs + + + + 2 + + + + + + Number of Outputs + + + + 1 + + + + + + System Reset Notification Routine + + + + Real/Logical address of OS routine to call on a System + Reset (in the first 32 MB of memory). + + + + + + Machine Check a + + + Notification Routine + + + + Real/Logical address of OS routine to call on a Machine + Check (in the first 32 MB of memory). + + + + + Out + + + + Status + + + + 0: Success + -1: Hardware Error + -3: Parameter Error + + + + +
+
+
+ + + R1--5. + + For the FWNMI option: Once the + OS has registered for + NMI notification, it must not change the contents of the two hundred + fifty six (256) bytes of the NMI interrupt vectors at real locations + 0x100 or 0x200 or the memory page starting at real location + 0x7000. + + + + + R1--6. + + For the FWNMI option: + The Real/Logical + address of the registered OS Machine Check and System Reset routines must + be in the first 32 MB of the OS’s memory address space. + + Software Implementation Note: Requirement + ensures that the registered OS + Machine Check and System Reset routines are within the code’s + RMA. + + + + + R1--7. + + For the FWNMI option: If the OS registered with + ibm,nmi-register, firmware must not store the state + of the processor at the time of interrupt in interrupt vectors at + locations 0x100 or 0x200 or the memory page starting at real location + 0x7000. Firmware may use RTAS space to store such state data. + + + + + R1--8. + + For the FWNMI option: Once the OS has registered for + NMI notification, the platform firmware must intercept all System Reset + Interrupts on all of the OS’s processors. + + + + + R1--9. + + For the FWNMI option: The + platform firmware, for + those intercepted System Reset interrupts which platform policy dictate + are to be forwarded to the OS, must invoke the OS registered System Reset + Interrupt notification point with translate off and all other architected + processor registers restored to their state at the time of the System + Reset. + + + + + R1--10. + + For the FWNMI option: Once the OS has registered for + NMI notification, the platform firmware must intercept all Machine Check + Interrupts on all of the OS’s processors. + + + + + R1--11. + + or the FWNMI option: The platform must provide a + mechanism for the firmware to signal a non-maskable interrupt to each + processor in a partition. + + + + + R1--12. + + For the FWNMI option: The platform firmware must + analyze all intercepted Machine Check Interrupts, determine if the OS may + safely continue using the platform, attempt to recover any corrupted + architectural state, and report the results of the recovery attempt to + the OS. + + + + + R1--13. + + For the FWNMI option: If the platform firmware, on + analyzing an intercepted Machine Check Interrupt, determines that the OS + may safely continue using the platform, it must invoke the OS registered + Machine Check Interrupt notification point with translate off but all + other architected processor registers restored to their state at the time + of the Machine Check except that General Purpose Register (GPR) R3 + contains the real address of a 16 byte memory buffer containing the + original contents of GPR R3 in the first 8 bytes and the RTAS Error Log + (fixed part) (per + ) in the second 8 bytes. + + + + + R1--14. + + For the FWNMI option: The maximum time for the + platform’s processing of a non-fatal machine check interrupt must + be on the order of that taken by the + check-exception critical call. + + + + + R1--15. + + For the FWNMI option: Once the firmware has reported + a “fatal” machine check event to an OS image it must only + report “fatal error previously reported” (see + ) in response to machine checks + on any processor belonging to that image. + + + + + R1--16. + + For the FWNMI option: If the platform firmware, on + analyzing an intercepted Machine Check Interrupt, determines that the OS + may not safely continue using the processor (for example a check stop + will certainly result), it must select one of the implementation options + given in + . + + + Unsafe Processor Recovery Options + + + + + + + + Option Number + + + + + Implementation Option for handling an + unsafe processor. + + + + + + + + 1 + + + Invoke the registered Machine Check Interrupt + notification point on a spare processor which platform firmware + substitutes for the offending processor. + + Note: Firmware must adjust all interrupt + XIVT entries and APM registers, etc., so that the OS need not + be aware of the processor substitution. The VPD of the new and + old processors are different, the dynamic VPD collection RTAS + call can be used to determine the new values. Since the results + of this substitution are indicated as a non-fatal error to the + OS, the substitution may take no more than 10 times the length + of time of a critical check exception process. The firmware + makes a best effort to load the decrementer with a value that + represents the value in the failed processor at + the time of the machine check minus a value that + represents the time taken by the substitution process. + + + + + 2 + + + Mark the processor unsafe, do not return to the OS on + that processor and notify the OS to at the next event scan time + with a fatal return message. + Note: This action + may cause the OS to “hang” + due to locks held by the failing processor etc. that may cause + a surveillance time out. The NVRAM firmware error log retains a + trail of this condition for reading and logging at the + subsequent OS boot. However, in those cases where a hang does + not happen, the OS can select some other processor to pick up + the thread of execution. + + + + +
+
+
+ + + R1--17. + + For the FWNMI option: RTAS must implement the + ibm,nmi-interlock call using the Argument buffer + defined in + which causes the release of the + machine check work and reporting area in page 7. + + + Argument Call Buffer + <emphasis>ibm,nmi-interlock</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + ibm,nmi-interlock + + + + + + Number of Inputs + + + + 0 + + + + + + Number of Outputs + + + + 1 + + + + + Out + + + + Status + + + + 0: Success + -1: Hardware Error + + + + +
+
+
+ + + R1--18. + + For the FWNMI option: The + + ibm,nmi-interlock RTAS call must not require + serialization with respect to any other RTAS or hypervisor calls. + + + + + R1--19. + + For the FWNMI option: The + processor receiving the nmi signal must, after it + has processed the buffer pointed to by its R3 register, call the + ibm,nmi-interlock RTAS call. + + +
+ +
+ +
+ Memory Statistics + + Depending upon the platform configuration, various portions of + installed platform memory are in one of several states. Some memory may + be mapped out of the address space due to an error in one or more + locations. Other memory is used by the platform firmware. What is left is + allocated to one or more logical partitions or held in reserve. The usage + of memory is a first order platform management parameter, and is needed + by platform managers. However, it may also become a covert channel + between logical partitions. Therefore, the memory usage information that + is surfaced to an OS image by firmware is restricted to total platform + memory installed, plus three sub-divisions which total to the total + memory installed. These three sub-divisions are the total memory the + platform mapped out due to hardware failure, total memory reserved for + platform firmware and other partitions, and the memory allocated to the + calling OS image. LPAR machines can provide a more detailed memory usage + report via their Hardware Management Console. The total memory allocated + to the calling OS image is obtained through the device tree (potentially + modified by post boot dynamic reconfiguration). +
+ +
+ System Parameters Option + + The system parameters which are defined are shown in + . + + + Defined Parameters + + + + + + + + + + + Parameter token + + + + + Parameter + + + + + Description + + + + + Values + + + + + Notes + + + + + + + + 0 + + + HMC 0 + + +   + + +   + + +   + + + + + 1 + + + HMC 1 + + +   + + +   + + +   + + + + + 2 thru 15 + + + HMC 2 thru 15 + + +   + + +   + + +   + + + + + 16 + + + Reserved + + +   + + +   + + +   + + + + + 17 + + + Reserved + + +   + + +   + + +   + + + + + + 18 + + + Processor CoD Capacity Card Info + + + + + + + +   + + + 1 + + + + + 19 + + + Memory CoD Capacity Card Info + + + + + + + +   + + + 1 + + + + + 20 + + + SPLPAR Characteristics + + + Opaque ASCII NULL terminated string + + +   + + + 1, 2 + + + + + 21 + + + partition_auto_restart + + + + + + + +   + + +   + + + + + 22 + + + platform_auto_power_restart + + + + + + + +   + + +   + + + + + 23 + + + sp-remote-pon + + + Remote Power On + (see + ) + + + One byte decimal + 0 (for off) + 1 (for on) + Default 0 + + +   + + + + + 24 + + + sp-rb4-pon + + + Number of rings until power on + (see + ) + + + One byte decimal + + +   + + + + + 25 + + + sp-snoop-str + + + Snoop sequence string + (see + ) + + +   + + +   + + + + + 26 + + + sp-serial-snoop + + + Serial snoop enable/disable + (see + ) + + + 0 (for off) + 1 (for on) + Default 0 + + +   + + + + + 27 + + + sp-sen + + + Surveillance enable/disable + (see + ) + + + 0 (for off) + 1 (for 0n) + Default 0 + + +   + + + + + 28 + + + sp-sti + + + Surveillance time interval in minutes + (see + ) + + + 1-255 + Default 5 + + +   + + + + + 29 + + + sp-sdel + + + Surveillance delay in minutes + (see + ) + + + 1-120 + Default 10 + + +   + + + + + 30 + + + sp-call-home + + + + + + + +   + + +   + + + + + 31 + + + sp-current-flash-image + + + + + + + + 0 (for perm) + 1 (for temp) + + +   + + + + + 32 + + + platform-dump-max-size + + + + + + + + 64-bit integer + + + The value consists of a 32-bit high value followed by a + 32-bit low value. The resulting 64-bit value is + unsigned. + + + + + 33 + + + epow3-quiesce-time + + + + + + + + 0-65535 seconds + Default 0 + + +   + + + + + 34 + + + memory-preservation-boot-time + + + + + + + + 0-65535 seconds + Default 0 + + +   + + + + + 35 + + + SCSI Initiator Identifier + + + + + + + +   + + +   + + + + + 36 + + + AIX support + + +   + + +   + + +   + + + + + 37 + + + Enhanced Processor CoD Capacity information + + + + + + + +   + + + 1 + + + + + 38 + + + Enhanced Memory CoD Capacity information + + +   + + + 1 + + + + + 39 + + + CoD options + + + See + . + + +   + + + 1 + + + + + 40 + + + Platform Error Classification + + + See + . + + +   + + +   + + + + + 41 + + + Firmware Boot Options + + + See + . + + +   + + +   + + + + + 42 + + + platform-processor-diagnostics-run-mode + + + + + + + + One byte decimal + 0=disabled + 1=staggered + 2=immediate + 3=periodic + + +   + + + + + 43 + + + Processor Module Information + + + See + . + + +   + + + 1 + + + + + 44 + + + Cooperative Memory Over-commitment Definitions + + + Opaque ASCII NULL terminated string + + +   + + + 1, 3 + + + + + 45 + + + Cede Latency Settings Information + + + + + + + +   + + +   + + + + + 46 + + + Target Active Memory Compression Factor + + + + + + + + Field length: 2 bytes + Format: binary + Range: 100 -- 1000 + + +   + + + + + 47 + + + Performance boost modes vector + + + See + . + + + From + ibm,get-system-parameter the field length + is 96 bytes consisting of 3 32 byte bit vectors. To + ibm,set-system-parameter the field is a + single 32 byte bit vector + + +   + + + + + 48 + + + UUID + + + 16 Byte String + + + + + + + +   + + + + + >48 + + + Reserved + + +   + + +   + + +   + + + + +
+ + Notes: + + + + + These system parameters are defined for the + ibm,get-system-parameter RTAS call only. An attempt + to set them using the + ibm,set-system-parameter RTAS call results in a + return + Status of -9002 (Setting not + allowed/authorized). + + + + The format of the SPLPAR string is beyond the scope of this + architecture. See also, + . + + + + See . + Further parameters will be defined as required. + + + + + + + R1--1. + + All platforms must support the System + Parameters option. + + + + + R1--2. + + (Requirement Number Reserved For + Compatibility) + + + + + R1--3. + + For the System Parameters option: If the length of + the data for a parameter in + is less than what is specified + in the requirements for a parameter or if the data value in an + ibm,set-system-parameter RTAS call is other than what + is allowed by the requirements for the parameter, the platform must + return a -9999 indicating a parameter error. + + + + + R1--4. + + For the System Parameters option: + The default values + defined for parameters sp-sen, sp-sti and sp-sdel in the + must apply to the platform + prior to any + ibm,set-system-parameter RTAS call. + + + + + R1--5. + + For the System Parameters option: The + ibm,get-system-parameter RTAS call must implement the + argument call buffer defined by + . If the + ibm,set-system-parameter RTAS call is implemented, it + must use the argument call buffer defined by + . + + + + + R1--6. + + For the System Parameters option: If the platform + implements the + ibm,set-system-parameter RTAS call it must also + implement the + ibm,get-system-parameter RTAS call. + + + + + R1--7. + + For the System Parameters option: A system parameter, + which is not supported by the system, must return a + Status of -3 (System parameter not supported) from + the RTAS call. + + + + + R1--8. + + For the System Parameters option: A system parameter + for which access is not authorized, must return a + Status of -9002 (Not authorized) from the RTAS + call. + + + + + R1--9. + + For the System Parameters option: When a platform + implements a system parameter, it must meet the definition in + including applicable + descriptions and notes. + + + + + R1--10. + + For the System Parameters option: An + ibm,get-system-parameter RTAS call with a buffer + length of zero (0) must return a + Status of + 0 (success) if the parameter is supported and + authorized, a + Status of -3 if not supported, or a + Status of-9002 if not authorized. + + + + + R1--11. + + For the System Parameters option: An + ibm,set-system-parameter RTAS call with a parameter + length of zero (0) must return a + Status of + 0 (success) if the parameter is supported and + authorized, a + Status of -3 if not supported, or a + Status of -9002 if not authorized. + + Programming Note: A partition may lose or gain + authority for an + ibm,get-system-parameter or + ibm,set-system-parameter call dynamically. For + instance, three consecutive calls with the same parameters could return + Status of success, not authorized, and + success. + + + + + R1--12. + + For the System Parameters option: The + platform must + enforce the length of system parameter strings as follows: input strings + to ibm,set-system-parameters not to exceed 1024 bytes in length else the + platform returns a Status of -9999 (parameter error) from the RTAS call; + output strings from ibm,get-system-parameters not to exceed 4000 + bytes. + + + + + R1--13. + + For the System Parameter option with the SPLPAR + option: The Platform must implement parameter token 20 as + defined in + for + ibm,get-system-parameter. + + Implementation Note: Of course the OS is allowed to + provide and specify a buffer that is larger than the maximum system + parameter length. + + + + +
+ <emphasis>ibm,get-system-parameter</emphasis> + + + Argument Call Buffer + <emphasis>ibm,get-system-parameter</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + ibm,get-system-parameter + + + + + + Number Inputs + + + + 3 + + + + + + Number Outputs + + + + 1 + + + + + + Parameter + + + + Token of system parameter to retrieve + + + + + + buffer + + + + Real address of data buffer + + + + + + length + + + + length of data buffer + + + + + Out + + + + Status + + + + 0: Success + -1: Hardware Error + -2: Busy, Try again later + -3: System parameter not supported + -9002: Not authorized + -9999: Parameter Error + 990x: Extended delay where x is a number 0-5 (see text + below) + + + + + + + + + +
+ The + ibm,get-system-parameter RTAS call fetches the data + for the selected parameter and places it at the address specified in the + buffer operand. The first two (2) bytes of the data in the buffer are the + length of the returned data, not counting these first two (2) bytes. The + length of string data includes the length of the NULL but excludes the + length field. If the buffer length is less than the returned data length, + the data is truncated at the end of the buffer. The maximum length of the + input parameter data string for + ibm,set-system-parameter is architecturally limited + to 1024 bytes of data and 2 bytes of length, totaling 1026 bytes. The + maximum length of the output parameter data string for + ibm,get-system-parameter is architecturally limited to 4000 bytes of data + and 2 bytes of length, totaling 4002 bytes. The only currently valid + parameters are as specified in + . + When the 990x + Status is returned, it is suggested that software + delay for 10 raised to the x milliseconds (where x is the last digit of + the 990x return code), before calling + ibm,get-system-parameter with the same parameter + index. However, software may issue the + ibm,get-system-parameter call again either earlier or + later than this. +
+ +
+ <emphasis>ibm,set-system-parameter</emphasis> + + + Argument Call Buffer + <emphasis>ibm,set-system-parameter</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + ibm,set-system-parameter + + + + + + Number Inputs + + + + 2 + + + + + + Number Outputs + + + + 1 + + + + + + Parameter + + + + Token number of the target system parameter + + + + + + buffer + + + + Real address of data buffer + + + + + Out + + + + Status + + + + 0: Success + -1: Hardware Error + -2: Busy, Try again later + -3: System parameter not supported + -9002: Setting not allowed/authorized + -9999: Parameter Error + 990x:Extended delay where x is a number 0-5 (see text + below) + + + + + + + + + +
+ The + ibm,set-system-parameter RTAS call fetches the data + from the address specified in the buffer operand and sets it into the + system parameter specified by the + Parameter operand. The first two (2) bytes of the + data in the buffer are the length of the data, not counting these first + two (2) bytes. The length of string data includes the length of the NULL + but excludes the length field. The only currently valid parameters are as + specified in + . + When the 990x + Status is returned, it is suggested that software + delay for 10 raised to the x milliseconds (where x is the last digit of + the 990x return code), before calling + ibm,set-system-parameter with the same parameter + index. However, software may issue the + ibm,set-system-parameter call again either earlier or + later than this. +
+ +
+ HMC Parameter + The full HMC parameter data string is returned when the + ibm,get-system-parameter RTAS call is issued. + HMC parameter contents are: + length - two byte binary length of data string associated with the + HMC. + System Parameter Data - string of semicolon delimited ASCII + data. + The + ibm,set-system-parameter is not required to support + the HMC parameter since the HMC parameter data is set only by the HMC + through an out-of-band path. The + ibm,get-system-parameter RTAS call is provided for + reading the parameter data. The RTAS call is available in both LPAR mode + and non-LPAR mode. + + + + R1--1. + + For the HMC Parameter: If the + ibm,set-system-parameter RTAS call is provided, the + use of the HMC parameters, 0-15, must always return not authorized + Status, -9002. + + + + + R1--2. + + For the HMC Parameter: The + format of each HMC system + parameter supported by this system must consist of a two byte binary + length field describing the full length of the parameter data, followed + by a series of variables where each variable is of the form + “keyword” followed by “=” followed by + “value” and terminated by “;”. The order of the + variables is undefined and the total number of variables is undefined. + The platform must provide the “HscIPAddr” keyword + + The acronym “HSC” was replaced by “HMC” + but this keyword was retained with “Hsc” so as to not + invalidate code already created using the keyword. + , and the “RMCKey” keyword. The data after the + equal sign (=) may or may not have content. The value of the + “HscIPAddr” keyword is the IP address of that HMC. The value + of the “RMCKey” keyword is either null or is the RMC key for + that system or partition. The value of a keyword is null if there is + nothing between the “=” and the “;”. The update + state of keyword values of an HMC system parameter are uncertain when the + HMC stops talking to the managed system. + + + + + R1--3. + + For the HMC Parameter: All + HMC system parameter data + must be printable ASCII characters, excluding the two byte binary length + field. + + + + + R1--4. + + For the HMC Parameter: The + lowest valued HMC system + parameter which returns a -3 + Status must have no higher valued HMC system + parameter which is supported. That is, a scan of HMC system parameters + from 0 until the first -3 + Status must indicate all supported HMC system + parameters. + + + + + R1--5. + + For the HMC Parameter: If + there is no HMC control of + this platform, the platform must return a null response, zero length + data, to requests for all supported HMC system parameters. + + Implementation Note: Since the system is not + necessarily to be HMC controlled, it is shipped with the HMC parameter + set to the zero (0) length. If the system is HMC controlled, the HMC + passes the parameter values to the system at boot time so that the + ibm,get-system-parameters RTAS call indicates HMC + control. If there is deconfigured the HMC can write the zero (0) length + data to the system. If that is not done, the system can write the + parameter to zero length on a hard reset and the HMC, if present, then + initializes the data. + + + + + R1--6. + + For the HMC Parameter: The + platform must truncate the + HMC system parameter data at the buffer length if the buffer length is + less than the data length plus 2. + + + + +
+ +
+ Capacity on Demand (CoD) Option + + Platforms may optionally provide mechanisms for securely licensing + a subset of the platform’s physically installed resources for use. + The CoD option includes system parameters relating to the CoD Capacity + “smart card” which is used to securely store and validate the + license information. Dynamically adding memory and cpu resources to + running partitions requires the CoD option combined with the Logical + Resource Dynamic Reconfiguration option. + Additionally platforms may provide a provisional CoD activation + mode known as “Trial CoD”. This mode provides immediate + availability of resources while the permanent license is on order. The + CoD resources are made available for a platform dependent period of power + on hours. + If the platform implements the CoD sparing option and the platform + predicts the failure of a CoD resource, given that there is spare + capacity of that resource, the platform makes available a spare resource + so that the OS can migrate work off the failing resource and return the + failing resource to the OS. If the OS takes advantage of this sparing, by + actually using the available resource the OS is using resources in excess + of the permanently licensed entitlement until the failing CoD resource is + returned to the platform. + + + + R1--1. + + For the CoD option: The + platform must support the System Parameter option + (ibm,get-system-parameter) + along with Parameter tokens 18 + and 19 as described in + . + + + + +
+ CoD Capacity Card Info + + + Software Note: System parameters 18 and 19 present + only permanently activated capacity. These parameters will be removed at + some point in the future. OSs should begin using the enhanced CoD + Capacity parameters. + These two read only system parameters (one for memory and another + for processors) are ASCII hexadecimal strings representing the current + licensed entitlement of CoD resources of their respective types. These + strings contains 9 packed fields as presented in + . + + + CoD Capacity Card Info String Packed Fields + + + + + + + + Field Number + + + + + Definition + + + + + + + + 1 + + + System type (4 ASCII characters) (4 bytes) + + + + + 2 + + + System serial number (8 ASCII characters: pp-sssss) (8 + bytes) + + + + + 3 + + + CoD capacity card Custom Card Identification Number + (CCIN) (4 ASCII characters) (4 bytes) + + + + + 4 + + + CoD capacity card serial number (10 ASCII characters: + pp-sssssss) (10 bytes) + + + + + 5 + + + CoD capacity card unique ID (16 ASCII characters) (16 + bytes) + + + + + 6 + + + CoD resource identifier (4 ASCII characters) (4 + bytes) + + + + + 7 + + + Quantity of Activated CoD resource (4 characters ASCII) + (4 bytes) + + + + + 8 + + + CoD sequence number (4 numeric ASCII characters) (4 + bytes) + + + + + 9 + + + CoD activation code entry check (1 byte hex check sum, + two ASCII characters - based on EBCDIC representation of items: + 1, 2, 3, 4, 5, 6, 7, and 8) (2 bytes) + + + + +
+ + + + R1--1. + + For the CoD option: The platform’s + ibm-get-system-parameter RTAS call, specifying the + CoD Capacity Card Info, must, upon successful completion, return the + ASCII representation of the information defined in + for the managed CoD resource + type specified by the system parameter token. + + + + + R1--2. + + For the CoD option: The platform’s + ibm,set-system-parameter RTAS call specifying the CoD + Capacity Card Info, must not return a + Status of 0 (success); the expected return is a + Status of -9002 (Setting not allowed/authorized), + however, under special cases a + Status of -1 (Hardware error), or one of the Busy or + Extended Delay return + Status return values is allowed. + + + + +
+ +
+ Predictive Failure Sparing with Free Resources + + A platform may optionally provide an unused resource to a partition + that is notified of a predictive failure. This allows the + partition’s OS to transparently substitute the spare resource for + the failing one in some situations. To take advantage of this situation, + the partition’s OS queries the free DR slot(s) of the resource type + to determine if a spare resource is available, and if so uses the other + DR RTAS calls to acquire the resource. In some cases resources are free + because they have not been assigned to partitions. + A platform may optionally provide an unused CoD resource to a + partition as a predictive failure spare. In such cases, the result of an + get-sensor-state (entity-sense) for the DR slot + returns the state of “exchange”. Between the time that the OS + takes ownership, via + set-indicator (allocation-state, exchange), of the + spare CoD resource available and the OS gives up the failing resource, + the platform exceeds the licensed entitlement for that resource. + + + + R1--1. + + For the Predictive Failure Sparing option: + The platform, upon provisionally making available a spare CoD resource in + response to a predictive failure, must set the CoD Resource Provisional + Activation timer, to time out the use of the provisionally activated + excess resources. + + + + +
+ +
+ Enhanced CoD Capacity Info + + These two read only system parameters (one for processor and one + for memory) return ASCII hexadecimal strings representing the current + licensed CoD resources. + The strings are constructed with a fixed “base” section + followed by zero or more optional sections. The definitions below show + all optional sections. The caller should not expect the presence or order + of all optional sections. Each optional section starts with the following + 3 members: + + + + Offset to next section (zero for last section) + + + + Size in bytes of the section (including these three + members) + + + + Name of the section + + + + The specific meaning of the members of each section is beyond the + scope of this architecture; refer to the specific platform design + documents. + All data in these tables are composed of printable ASCII + characters. There are no NULLs or other non-printable characters. + + Programming Note: On a platform where the base + processor capacity is a fraction of a full processor, the data in the + BaseProc section below is rounded up to the next larger whole + number. + + + + R1--1. + + For the CoD option: The platform's + ibm,get-system-parameter RTAS call, specifying the + Enhanced CoD Processor Capacity Info, must, upon successful completion, + return the ASCII representation of the information defined in + for managed CoD processor + resources. + + + Enhanced CoD Processor Capacity Info, Version + 1 + + + + + + + + + + + Offset + + + + + Size in Bytes + + + + + Section + + + + + Description + + + + + Format + + + + + + + + 0 + + + 4 + + + Meta + + + Table version indicator + + + 4 ASCII characters “V1 “ + + + + + 4 + + + 4 + + + Meta + + + Decimal number of optional sections + + + 4 ASCII numeric characters + + + + + 8 + + + 4 + + + Base + + + Decimal offset in bytes from the start of this section to + the start of the next section (that is, the offset from the + first byte of this member to the first byte of the next + section). Zero if the last section + + + 4 ASCII numeric characters + + + + + 12 + + + 4 + + + Base + + + Section Length -- The length of this section in bytes + (including offset member above) + + + 4 ASCII numeric characters “78 “ + + + + + 16 + + + 8 + + + Base + + + Section Name + + + 8 ASCII characters “BASE “ + + + + + 24 + + + 4 + + + Base + + + system type + + + 4 ASCII characters + + + + + 28 + + + 10 + + + Base + + + System serial number + + + 10 ASCII characters: “pp-ssssss “ + + + + + 38 + + + 4 + + + Base + + + CoD capacity card CCIN + + + 4 ASCII characters + + + + + 42 + + + 10 + + + Base + + + CoD capacity card serial number + + + 10 ASCII characters “hh-hssssss” + + + + + 52 + + + 16 + + + Base + + + CoD capacity card unique ID + + + 16 ASCII characters + + + + + 68 + + + 4 + + + Base + + + CoD resource identifier + + + 4 ASCII characters + + + + + 72 + + + 4 + + + Base + + + Quantity of permanently activated resources + + + 4 ASCII characters + + + + + 76 + + + 4 + + + Base + + + CoD sequence number + + + 4 numeric ASCII characters + + + + + 80 + + + 2 + + + Base + + + CoD activation code entry check + + + 1 byte hex check sum, 2 ASCII characters -- based on + EBCDIC representation of previous 8 entries. + + + + + 82 + + + 4 + + + Base + + + Total CoD resources installed in system + + + 4 numeric ASCII characters + + + + + On/Off Processor Resources + + + + + 0 + + + 4 + + + OnOffPrc + + + Decimal offset in bytes from the start of this section to + the start of the next section (that is, the offset from the + first byte of this member to the first byte of the next + section). Zero if the last section. + + + 4 ASCII numeric characters + + + + + 4 + + + 4 + + + OnOffPrc + + + Section Length -- The length of this section in bytes + (including offset member above) + + + 4 ASCII numeric characters “66 “ + + + + + 8 + + + 8 + + + OnOffPrc + + + Section Name + + + 8 ASCII characters “ONOFFPRC” + + + + + 16 + + + 1 + + + OnOffPrc + + + On/Off CoD enabled + + + 1 ASCII character '0' or '1' + + + + + 17 + + + 1 + + + OnOffPrc + + + On/Off CoD active + + + 1 ASCII character '0' or '1' + + + + + 18 + + + 4 + + + OnOffPrc + + + On/Off CoD feature + + + 4 ASCII characters + + + + + 22 + + + 4 + + + OnOffPrc + + + On/Off CoD activated resources + + + 4 ASCII numeric characters + + + + + 26 + + + 4 + + + OnOffPrc + + + On/Off CoD sequence number + + + 4 ASCII numeric characters + + + + + 30 + + + 2 + + + OnOffPrc + + + On/Off CoD checksum + + + 2 ASCII characters + + + + + 32 + + + 4 + + + OnOffPrc + + + On/Off CoD resources requested + + + 4 ASCII numeric characters + + + + + 36 + + + 4 + + + OnOffPrc + + + On/Off CoD days requested + + + 4 ASCII numeric characters + + + + + 40 + + + 4 + + + OnOffPrc + + + On/Off CoD resource days expired + + + 4 ASCII numeric characters + + + + + 44 + + + 4 + + + OnOffPrc + + + On/Off CoD resource days remaining + + + 4 ASCII numeric characters + + + + + 48 + + + 4 + + + OnOffPrc + + + On/Off CoD counter + + + 4 ASCII numeric characters + + + + + 52 + + + 4 + + + OnOffPrc + + + On/Off standby resources available + + + 4 ASCII numeric characters + + + + + 56 + + + 1 + + + OnOffPrc + + + On/Off reserved byte + + + 1 ASCII blank + + + + + 57 + + + 4 + + + OnOffPrc + + + On/Off history of requested resource days + + + 4 ASCII characters + + + + + 61 + + + 1 + + + OnOffPrc + + + On/Off reserved byte + + + 1 ASCII blank + + + + + 62 + + + 4 + + + OnOffPrc + + + On/Off history of unreturned resource days + + + 4 ASCII characters + + + + + Debit Processor Resources + + + + + 0 + + + 4 + + + DebitPrc + + + Decimal offset in bytes from the start of this section to + the start of the next section (that is, the offset from the + first byte of this member to the first byte of the next + section). Zero if the last section. + + + 4 ASCII numeric characters + + + + + 4 + + + 4 + + + DebitPrc + + + Section Length -- The length of this section in bytes + (including offset member above) + + + 4 ASCII numeric characters “82 “ + + + + + 8 + + + 8 + + + DebitPrc + + + Section Name + + + 8 ASCII characters “DEBITPRC” + + + + + 16 + + + 1 + + + DebitPrc + + + Debit CoD enabled + + + 1 ASCII character '0' or '1' + + + + + 17 + + + 1 + + + DebitPrc + + + Debit CoD active + + + 1 ASCII character '0' or '1' + + + + + 18 + + + 4 + + + DebitPrc + + + Debit CoD feature + + + 4 ASCII characters + + + + + 22 + + + 4 + + + DebitPrc + + + Debit CoD activated resources + + + 4 ASCII numeric characters + + + + + 26 + + + 4 + + + DebitPrc + + + Debit CoD sequence number + + + 4 ASCII numeric characters + + + + + 30 + + + 2 + + + DebitPrc + + + Debit CoD checksum + + + 2 ASCII characters + + + + + 32 + + + 4 + + + DebitPrc + + + Debit CoD resources requested + + + 4 ASCII numeric characters + + + + + 36 + + + 12 + + + DebitPrc + + + Debit Reserved + + + 12 ASCII blanks + + + + + 48 + + + 4 + + + DebitPrc + + + Debit counter + + + 4 ASCII characters + + + + + 52 + + + 4 + + + DebitPrc + + + Debit standby resources available + + + 4 ASCII numeric characters + + + + + 56 + + + 1 + + + DebitPrc + + + Debit reserved byte + + + 1 ASCII blank + + + + + 57 + + + 4 + + + DebitPrc + + + Debit history of expired resource days + + + 4 ASCII numeric characters + + + + + 61 + + + 1 + + + DebitPrc + + + Debit reserved byte + + + 1 ASCII blank + + + + + 62 + + + 4 + + + DebitPrc + + + Debit history of unreturned resource days + + + 4 ASCII characters + + + + + 66 + + + 8 + + + DebitPrc + + + Extended total history of requested On/Off Processor + days + + + 8 ASCII characters + + + + + 74 + + + 8 + + + DebitPrc + + + Extended total history of unreturned On/Off Processor + days + + + 8 ASCII characters + + + + + Trial Processor Resources + + + + + 0 + + + 4 + + + TrialPrc + + + Decimal offset in bytes from the start of this section to + the start of the next section (that is, the offset from the + first byte of this member to the first byte of the next + section). Zero if the last section. + + + 4 ASCII numeric characters + + + + + 4 + + + 4 + + + TrialPrc + + + Section Length -- The length of this section in bytes + (including offset member above) + + + 4 ASCII numeric characters “66 “ + + + + + 8 + + + 8 + + + TrialPrc + + + Section Name + + + 8 ASCII characters “TRIALPRC” + + + + + 16 + + + 1 + + + TrialPrc + + + Trial CoD enabled + + + 1 ASCII character '0' or '1' + + + + + 17 + + + 1 + + + TrialPrc + + + Trial reserved + + + 1 ASCII blank + + + + + 18 + + + 4 + + + TrialPrc + + + Trial CoD feature + + + 4 ASCII characters + + + + + 22 + + + 4 + + + TrialPrc + + + Trial CoD activated resources + + + 4 ASCII numeric characters + + + + + 26 + + + 4 + + + TrialPrc + + + Trial CoD sequence number + + + 4 ASCII numeric characters + + + + + 30 + + + 2 + + + TrialPrc + + + Trial CoD checksum + + + 2 ASCII characters + + + + + 32 + + + 8 + + + TrialPrc + + + Trial reserved bytes + + + 8 ASCII blanks + + + + + 40 + + + 4 + + + TrialPrc + + + Trial days expired + + + 4 ASCII numeric characters + + + + + 44 + + + 4 + + + TrialPrc + + + Trial days remaining + + + 4 ASCII numeric characters + + + + + 48 + + + 14 + + + TrialPrc + + + Trial reserved bytes + + + 14 ASCII blanks + + + + + 62 + + + 4 + + + TrialPrc + + + Trial unreturned resources + + + 4 ASCII numeric characters + + + + + Base Processor Resources + + + + + 0 + + + 4 + + + BaseProc + + + Decimal offset in bytes from the start of this section to + the start of the next section (that is, the offset from the + first byte of this member to the first byte of the next + section). Zero if the last section. + + + 4 ASCII numeric characters + + + + + 4 + + + 4 + + + BaseProc + + + Section Length -- The length of this section in bytes + (including offset member above) + + + 4 ASCII numeric characters “20 “ + + + + + 8 + + + 8 + + + BaseProc + + + Section Name + + + 8 ASCII characters “BASEPROC” + + + + + 16 + + + 4 + + + BaseProc + + + Number of Non-CoD “Base” processors on this + system. NOTE: If this section is not present, there are no + “base” processors and all processors are CoD + activated. + + + 4 ASCII numeric characters + + + + +
+
+
+ + + R1--2. + + For the CoD option: The platform's + ibm,get-system-parameter RTAS call, specifying the + Enhanced CoD Memory Capacity Info, must, upon successful completion, + return the ASCII representation of the information defined in + for the managed CoD memory + resources. + + + Enhanced CoD Memory Capacity Info, Version 1 + + + + + + + + + + + Offset + + + + + Size in Bytes + + + + + Section + + + + + Description + + + + + Format + + + + + + + + 0 + + + 4 + + + Meta + + + Table version indicator + + + 4 ASCII characters “V1 ” + + + + + 4 + + + 4 + + + Meta + + + Decimal number of optional sections + + + 4 ASCII numeric characters + + + + + 8 + + + 4 + + + Base + + + Decimal offset in bytes from the start of this section to + the start of the next section (that is, the offset from the + first byte of this member to the first byte of the next + section). Zero if the last section. + + + 4 ASCII numeric characters + + + + + 12 + + + 4 + + + Base + + + Section Length -- The length of this section in bytes + (including offset member above) + + + 4 ASCII numeric characters “78 ” + + + + + 16 + + + 8 + + + Base + + + Section Name + + + 8 ASCII characters “BASE ” + + + + + 24 + + + 4 + + + Base + + + system type + + + 4 ASCII characters + + + + + 28 + + + 10 + + + Base + + + System serial number + + + 10 ASCII characters: “pp-ssssss ” + + + + + 38 + + + 4 + + + Base + + + CoD capacity card CCIN + + + 4 ASCII characters + + + + + 42 + + + 10 + + + Base + + + CoD capacity card serial number + + + 10 ASCII characters “hh-hssssss” + + + + + 52 + + + 16 + + + Base + + + CoD capacity card unique ID + + + 16 ASCII characters + + + + + 68 + + + 4 + + + Base + + + CoD resource identifier + + + 4 ASCII characters + + + + + 72 + + + 4 + + + Base + + + Quantity of permanently activated resources + + + 4 ASCII characters + + + + + 76 + + + 4 + + + Base + + + CoD sequence number + + + 4 numeric ASCII characters + + + + + 80 + + + 2 + + + Base + + + CoD activation code entry check + + + 1 byte hex check sum, 2 ASCII characters -- based on + EBCDIC representation of previous 8 entries. + + + + + 82 + + + 4 + + + Base + + + Total CoD resources installed in system + + + 4 numeric ASCII characters + + + + + On/Off Memory Resources + + + + + 0 + + + 4 + + + OnOffMem + + + Decimal offset in bytes from the start of this section to + the start of the next section (that is, the offset from the + first byte of this member to the first byte of the next + section). Zero if the last section. + + + 4 ASCII numeric characters + + + + + 4 + + + 4 + + + OnOffMem + + + Section Length -- The length of this section in bytes + (including offset member above) + + + 4 ASCII numeric characters “67 “ + + + + + 8 + + + 8 + + + OnOffMem + + + Section Name + + + 8 ASCII characters “ONOFFMEM” + + + + + 16 + + + 1 + + + OnOffMem + + + On/Off CoD enabled + + + 1 ASCII character '0' or '1' + + + + + 17 + + + 1 + + + OnOffMem + + + On/Off CoD active + + + 1 ASCII character '0' or '1' + + + + + 18 + + + 4 + + + OnOffMem + + + On/Off CoD feature + + + 4 ASCII characters + + + + + 22 + + + 4 + + + OnOffMem + + + On/Off CoD activated resources + + + 4 ASCII numeric characters + + + + + 26 + + + 4 + + + OnOffMem + + + On/Off CoD sequence number + + + 4 ASCII numeric characters + + + + + 30 + + + 2 + + + OnOffMem + + + On/Off CoD checksum + + + 2 ASCII characters + + + + + 32 + + + 4 + + + OnOffMem + + + On/Off CoD resources requested + + + 4 ASCII numeric characters + + + + + 36 + + + 4 + + + OnOffMem + + + On/Off CoD days requested + + + 4 ASCII numeric characters + + + + + 40 + + + 4 + + + OnOffMem + + + On/Off CoD resource days expired + + + 4 ASCII numeric characters + + + + + 44 + + + 4 + + + OnOffMem + + + On/Off CoD resource days remaining + + + 4 ASCII numeric characters + + + + + 48 + + + 4 + + + OnOffMem + + + On/Off CoD counter + + + 4 ASCII numeric characters + + + + + 52 + + + 4 + + + OnOffMem + + + On/Off standby resources available + + + 4 ASCII numeric characters + + + + + 56 + + + 1 + + + OnOffMem + + + On/Off reserved byte + + + 1 ASCII blank + + + + + 57 + + + 4 + + + OnOffMem + + + On/Off history of requested resource days + + + 4 ASCII characters + + + + + 61 + + + 1 + + + OnOffMem + + + On/Off reserved byte + + + 1 ASCII blank + + + + + 62 + + + 4 + + + OnOffMem + + + On/Off history of unreturned resource days + + + 4 ASCII characters + + + + + 66 + + + 1 + + + OnOffMem + + + On/Off Memory Multiplier + + + 1 ASCII numeric characters + + + + + Debit Memory Resources + + + + + 0 + + + 4 + + + DebitMem + + + Decimal offset in bytes from the start of this section to + the start of the next section (that is, the offset from the + first byte of this member to the first byte of the next + section). Zero if the last section. + + + 4 ASCII numeric characters + + + + + 4 + + + 4 + + + DebitMem + + + Section Length -- The length of this section in bytes + (including offset member above) + + + 4 ASCII numeric characters “83 “ + + + + + 8 + + + 8 + + + DebitMem + + + Section Name + + + 8 ASCII characters “DEBITMEM” + + + + + 16 + + + 1 + + + DebitMem + + + Debit CoD enabled + + + 1 ASCII character '0' or '1' + + + + + 17 + + + 1 + + + DebitMem + + + Debit CoD active + + + 1 ASCII character '0' or '1' + + + + + 18 + + + 4 + + + DebitMem + + + Debit CoD feature + + + 4 ASCII characters + + + + + 22 + + + 4 + + + DebitMem + + + Debit CoD activated resources + + + 4 ASCII numeric characters + + + + + 26 + + + 4 + + + DebitMem + + + Debit CoD sequence number + + + 4 ASCII numeric characters + + + + + 30 + + + 2 + + + DebitMem + + + Debit CoD checksum + + + 2 ASCII characters + + + + + 32 + + + 4 + + + DebitMem + + + Debit CoD resources requested + + + 4 ASCII numeric characters + + + + + 36 + + + 12 + + + DebitMem + + + Debit Reserved + + + 12 ASCII blanks + + + + + 48 + + + 4 + + + DebitMem + + + Debit counter + + + 4 ASCII characters + + + + + 52 + + + 4 + + + DebitMem + + + Debit standby resources available + + + 4 ASCII numeric characters + + + + + 56 + + + 1 + + + DebitMem + + + Debit reserved byte + + + 1 ASCII blank + + + + + 57 + + + 4 + + + DebitMem + + + Debit history of expired resource days + + + 4 ASCII numeric characters + + + + + 61 + + + 1 + + + DebitMem + + + Debit reserved byte + + + 1 ASCII blank + + + + + 62 + + + 4 + + + DebitMem + + + Debit history of unreturned resource days + + + 4 ASCII characters + + + + + 66 + + + 8 + + + DebitMem + + + Extended total history of requested On/Off Memory GB + days + + + 8 ASCII characters + + + + + 74 + + + 8 + + + DebitMem + + + Extended total history of unreturned On/Off Memory GB + days + + + 8 ASCII characters + + + + + 82 + + + 1 + + + DebitMem + + + Debit reserved byte + + + 1 ASCII blank + + + + + Trial Memory Resources + + + + + 0 + + + 4 + + + TrialMem + + + Decimal offset in bytes from the start of this section to + the start of the next section (that is, the offset from the + first byte of this member to the first byte of the next + section). Zero if the last section. + + + 4 ASCII numeric characters + + + + + 4 + + + 4 + + + TrialMem + + + Section Length -- The length of this section in bytes + (including offset member above) + + + 4 ASCII numeric characters “67 ” + + + + + 8 + + + 8 + + + TrialMem + + + Section Name + + + 8 ASCII characters “TRIALMEM” + + + + + 16 + + + 1 + + + TrialMem + + + Trial CoD enabled + + + 1 ASCII character '0' or '1' + + + + + 17 + + + 1 + + + TrialMem + + + Trial reserved + + + 1 ASCII blank + + + + + 18 + + + 4 + + + TrialMem + + + Trial CoD feature + + + 4 ASCII characters + + + + + 22 + + + 4 + + + TrialMem + + + Trial CoD activated resources + + + 4 ASCII numeric characters + + + + + 26 + + + 4 + + + TrialMem + + + Trial CoD sequence number + + + 4 ASCII numeric characters + + + + + 30 + + + 2 + + + TrialMem + + + Trial CoD checksum + + + 2 ASCII characters + + + + + 32 + + + 8 + + + TrialMem + + + Trial reserved bytes + + + 8 ASCII blanks + + + + + 40 + + + 4 + + + TrialMem + + + Trial days expired + + + 4 ASCII numeric characters + + + + + 44 + + + 4 + + + TrialMem + + + Trial days remaining + + + 4 ASCII numeric characters + + + + + 48 + + + 14 + + + TrialMem + + + Trial reserved bytes + + + 14 ASCII blanks + + + + + 62 + + + 4 + + + TrialMem + + + Trial unreturned resources + + + 4 ASCII numeric characters + + + + + 66 + + + 1 + + + TrialMem + + + Trial reserved byte + + + 1 ASCII blank + + + + +
+
+
+ + + R1--3. + + For the CoD option: The platform's + ibm,set-system-parameter RTAS call specifying the + Enhanced CoD Capacity Info, must not return a + Status of 0 (Success); the expected return is a + Status of -9002 (setting not allowed/authorized), + however, under special cases a + Status of -1 (Hardware Error) or one of the Busy or + Extended Delay return + Status values is allowed. + + +
+ +
+ +
+ +
+ <emphasis>Restart Parameters</emphasis> + + This section and its subsections describe parameters that govern + the actions that the platform firmware takes upon a restart (that is, + reboot) after an unintended termination. + +
+ partition_auto_restart Parameter + + The partition_auto_restart parameter governs whether or not + platform firmware attempts to restart a partition after an error which + causes an abnormal partition termination. Neither a loss of external + power without a UPS, nor a loss of external power and battery power with + a UPS are examples of an error which causes abnormal partition + termination. For terminations that involve only a specific partition (for + example, a machine check), the partition_auto_restart parameter governs + whether the partition restarts. For terminations that span the entire + platform (for example, a checkstop), the platform may separately govern + whether or not the entire platform restarts. If the platform does + restart, however, partition_auto_restart determines whether or not an + individual partition restarts. + + + + R1--1. + + For the LPAR option with the System Parameters + option: If the platform supports the partition_auto_restart + system parameter, the platform must establish and maintain across boot + (unless explicitly altered by a user) for each partition the one (1) byte + parameter, the initial value (depending upon platform policy) is one of + the following binary values: + 0 - Do not automatically restart the partition + 1 - Automatically restart the partition + + + + + R1--2. + + For the SMP option (non-LPAR) with the System Parameters + option: If the platform supports the partition_auto_restart + system parameter, the platform must establish and maintain across boot + (unless explicitly altered by a user) one and only one (1) byte + parameter, the initial value (depending upon platform policy) is one of + the following binary values: + 0 - Do not automatically restart the OS + 1 - Automatically restart the OS + + + + +
+ +
+ platform_auto_power_restart Parameter + + The platform_auto_power_restart parameter governs whether or not + platform firmware attempts to restart after power is restored following a + power outage. + + + + R1--1. + + For the System Parameters option: If + the platform + supports the platform_auto_power_restart system parameter, the platform + must maintain across boot (unless explicitly altered by a user) one and + only one platform wide value of the one (1) byte parameter having one of + the following binary values: + 0 - Do not automatically restart + 1 - Automatically restart partitions that were active when external + power was lost. + + + + + R1--2. + + For the LPAR option with the System Parameters + option: If the platform supports the + platform_auto_power_restart system parameter, the platform must provide + the authority to set and read the platform_auto_power_restart system + parameter to, at most, one partition at a time. + + + + +
+ +
+ +
+ Remote Serial Port System Management Parameters + + + + R1--1. + + For the LPAR option with the System Parameters + option: If the platform supports any of the following system + parameters: sp-remote-pon, sp-rb4-pon, sp-snoop-str, and sp-serial-snoop; + the platform must grant authority to set and read the single platform + wide values of the respective system parameters to only the partition + owning the resource required to implement the function, such as a serial + port, where the valid data for the parameters are specified in + . + + + + + R1--2. + + For the System Parameters option: The + platform must + support the sp-rb4-pon system parameter if and only if the sp-remote-pon + system parameter is supported and implemented by using “Ring + Indicate” of a serial port. + + + + + R1--3. + + For the LPAR option with the System Parameters + option: Platforms that supports the sp-snoop-str system + parameter must maintain one and only one platform wide NULL terminated + ASCII string value of the parameter; granting authority to set and read + the sp-snoop-str system parameter to, at most, one partition at a + time. + + + + + R1--4. + + For the System Parameters option: To prevent return + data truncation of the returned sp-snoop-str system parameter from the + ibm,get-system-parameter RTAS call the caller must + supply a buffer length sufficient to contain the two string length bytes + plus the ASCII string and the terminating ASCII NULL. + + + + + R1--5. + + For the System Parameters option: The + caller of the + ibm,get-system-parameter RTAS call must supply a + buffer length sufficient to contain the two string length bytes plus the + ASCII string and the terminating ASCII NULL to prevent return data + truncation of the returned sp-snoop-str system parameter. + + + + + R1--6. + + For the System Parameters option: The + platform must + supports both the sp-snoop-str and sp-serial-snoop system parameters if + it supports either. + + + + +
+ +
+ Surveillance Parameters + + For the definition of the sp-sen, sp-sti, and sp-del parameters, + see + . + + + + R1--1. + + For the LPAR option + with the System Parameters option: If the platform + supports any of the following system parameters: sp-sen, sp-sti, or + sp-del; the platform must grant authority to set and read the single + platform wide one (1) byte values, where the decimal representation is + defined in + , of the respective system + parameters to only one partition at a time. + + + + + R1--2. + + For the System Parameters option: If the platform + supports any of the sp-sen, sp-sti or sp-del system parameters, it must + support then all. + + + + +
+ +
+ Call Home Parameter + + This parameter is used to provide input concerning certain call + home values used when a call home function is provided. The data for the + parameter is an ASCII string which provides additional information + + + + R1--1. + + For the LPAR option with the System Parameters + option: If the platform supports the sp-call-home parameter, + platform must grant authority to set and read the single platform wide + value of the system parameter at any time to only one partition; where + the data for the parameter is an ASCII string in the form + <String_name1>=<string><ASCII + NULL><String_name2>=<string><ASCII + NULL>....<String_nameN>=<string><ASCII + NULL><ASCII NULL> with string names defined as per + . + + + + + R1--2. + + For the System Parameters option: The + caller of the + ibm,get-system-parameter RTAS call must supply a + buffer length sufficient to contain the maximum possible ASCII string + returned, including the two ASCII NULLs where + indicates the maximum length of + the data for each substring that comprises the sp-call-home data, to + prevent return data truncation of the returned sp-call-home system + parameter. + + + + + R1--3. + + For the System Parameters + option: If the platform + supports the sp-call-home parameter, the platform must provide the + sp-call-home parameter value defaults listed in + prior to any + ibm,set-system-parameter RTAS call. + + + sp-call-home Strings + + + + + + + + + + + String_Name + + + + + Default + + + + + Range + + + + + Maximum Characters in String + Data + + + + + Description + + + + + + + + sp-rt-s<N> + + + NULL + + +   + + + 20 + + + Retry string for serial port <N> + + + + + sp-ic-s<N> + + + NULL + + +   + + + 12 + + + Protocol interdata block delay (*IC) for serial port + <N> + + + + + sp-to-s<N> + + + NULL + + +   + + + 12 + + + Protocol time out (*DT) for serial port <N> + + + + + sp-cd-s<N> + + + NULL + + +   + + + 12 + + + Call Delay (*CD) for serial port <N> + + + + + sp-connect-s<N> + + + NULL + + +   + + + 12 + + + Connect (*CX) for serial port <N> + + + + + sp-disconnect-s<N> + + + NULL + + +   + + + 12 + + + Disconnect (*DX) for serial port <N> + + + + + sp-condout-s<N> + + + NULL + + +   + + + 12 + + + Call-out condition (*C0) for serial port <N> + + + + + sp-condwait-s<N> + + + NULL + + +   + + + 12 + + + Call-wait (*C0) for serial port <N> + + + + + sp-condin-s<N> + + + NULL + + +   + + + 12 + + + Call-in condition (*C1) for serial port <N> + + + + + sp-waitcall-s<N> + + + NULL + + +   + + + 12 + + + Wait call (*WC) for serial port <N> + + + + + sp-page-s<N> + + + NULL + + +   + + + 20 + + + Describes how to Page a beeper for serial port + <N> + + + + + sp-diok-s<N> + + + off + + + on,off + + + 4 + + + Serial Port <N> Call-in (Dial in authorized on the + port) + + + + + sp-dook-s<N> + + + off + + + on,off + + + 4 + + + Serial Port <N> Call-out (Dial out authorized on + the port) + + + + + sp-dookc + + + off + + + on,off + + + 4 + + + Call-out before restart (Dial out for system crash using + authorized serial port) + + + + + sp-ls-s<N> + + + 9600 + + + 300, 600, 1200, 2000, 2400, 3600, 4800, 7200, 9600, + 19200, 38400 + + + 6 + + + S<N> line speed + + + + + sp-modemf-s<N> + + + NULL + + +   + + + 120 + + + Filename of the last modem file used to configure modem + parameters + + + + + sp-phsvc + + + 20 blank characters + + + 20 characters max + + + 20 + + + Service Center Telephone Number (*PS) + + + + + sp-phadm + + + 20 blank characters + + + 20 characters max + + + 20 + + + Customer Administration Center Telephone Number + (*PH) + + + + + sp-pager + + + 20 blank characters + + + 20 characters max + + + 20 + + + Digital Pager Telephone Number + + + + + sp-phsys + + + 20 blank characters + + + 20 characters max + + + 20 + + + Customer System Telephone number (*PY) + + + + + sp-vox + + + 20 blank characters + + + 20 characters max + + + 20 + + + Customer Voice telephone number (*PO) + + + + + sp-acct + + + 12 blank characters + + + 12 characters max + + + 12 + + + Customer Account Number (*CA) + + + + + sp-cop + + + first + + + first, all + + + 6 + + + Call-out policy (first/all) - numbers to call in case of + failure + + + + + sp-retlogid + + + 12 blank characters + + + 12 characters max + + + 12 + + + Customer RETAIN Login Userid (*LI) + + + + + sp-retpw + + + 16 blank characters + + + 16 characters max + + + 12 + + + Customer RETAIN Login password (*PW) + + + + + sp-rto + + + 120 + + + >1 + + + 12 + + + Remote Timeout (in seconds) (*RT) + + + + + sp-rlat + + + 2 + + + > 1 + + + 12 + + + Remote Latency (in seconds) (*RL) + + + + + sp-rn + + + 2 + + + 0 or any positive number + + + 12 + + + Number of retries (while busy (*RN)) + + + + + sp-sysname + + + 15 blank characters + + + 15 characters max + + + 15 + + + System Name (system administrator aid) + + + + +
+ + Notes: + + + + + <N> is substituted with a modem number, i.e. 1 or + 2. + + + + NULL as a default indicates that the string is given a name, but + no value, e.g. sp-modemf-s= + + +
+
+
+ +
+ +
+ Current Flash Image Parameter + + In systems with storage for more than one Flash image, the + sp-current-flash-image parameter indicates which Flash image is currently + being used by the service processor. This is typically the Flash image + used at the last boot. + + + + R1--1. + + For the LPAR option + with the System Parameters option: Platforms that + supports the sp-current-flash-image system parameter, must authorize all + partitions to get the single platform wide one (1) byte value of the + system parameter, whose decimal representation is defined in + . + + + + + R1--2. + + For the System Parameters option: Platforms that + supports the sp-current-flash-image system parameter must support the + ibm,manage-flash-image RTAS call. + + + + +
+ +
+ Platform Dump Max Size Parameter + + This parameter indicates the size (in bytes) needed for dumps + returned from the + ibm,platform-dump RTAS function. + + + + R1--1. + + For the Platform Dump option: If the + ibm,platform-dump RTAS call is authorized for the + partition, the platform must authorize the partition to get the + platform-dump-max-size system parameter; where the value returned must + indicate the sum (in bytes) of the maximum size of each unique platform + dump type that the + ibm,platform-dump RTAS call could return. + + + + + + Programming Note: The intent of + platform-dump-max-size is for the platform to specify, in advance, the + sum of the maximum sizes of all the unique dump types that it can + generate. This is to allow the OS to reserve space for one log of each + type. In the case of any change in the value of this parameter, the + platform may generate a Platform Event Log entry announcing the change in + the maximum size, and specifying the new size in the IO Events Section. + This entry, when generated, is then returned by the + event-scan RTAS call. +
+ +
+ Storage Preservation Option System Parameters + + The epow3-quiesce-time system parameter contains the time granted + to the current instance of a client program to perform quiesce activities + in preparation for a memory preservation boot. This quiesce time is the + time used by the client program to do such things as quiesce and power + off I/O not needed for memory preservation boot processing, in order to + conserve batteries. A client program utilizing the Storage Preservation + option, upon completion of quiesce activities, requests a reboot. The + platform, upon seeing an EPOW class 3 condition, and if both the + memory-preservation-boot-time and epow3-quiesce-time system parameters + are non-zero, starts a timer with an initial value equal to the + epow3-quiesce-time. If the timer expires before the client program + performs a reboot, the platform forces a reboot of the client + program. + The memory-preservation-boot-time system parameter contains the + time granted to the rebooted instance of the partition to perform the + saving of preserved memory. The client program, upon completion of the + saving of preserved memory, requests a shutdown. The platform, upon + initiation of a memory preservation boot starts a timer with an initial + value equal to the memory-preservation-boot-time, providing the value of + the memory-preservation-boot-time parameter is non-zero. If the timer + expires before the client program performs a shutdown, the platform + forces a shutdown of the client program. + Thus, the platform uses the memory-preservation-boot-time system + parameter as a policy attribute. If the client program has set the value + of this parameter to a non-zero value, then the memory preservation boot + timers are enabled. If the memory-preservation-boot-time parameter is + zero (independent of the epow3-quiesce-time setting), the platform does + not initiate the memory preservation boot timers. + To use the memory preservation boot timers, the client program + registers its LMBs for preservation and sets the + memory-preservation-boot-time via the + ibm,set-system-parameter RTAS call. If an EPOW class + 3 is sent to a client program and the client program has set its + memory-preservation-boot-time parameter, then the platform starts the + timer for epow3-quiesce-time. The client program on reboot uses the + get-sensor RTAS call (to detect EPOW condition) and + the + “ibm,preserved-storage” property in the + device tree to drive memory preservation processing as necessary. The + values of memory-preservation-boot-time and epow3-quiesce-time prior to + being set for a client program are 0. These system parameters are + persisted, as are all system parameters. + + + + R1--1. + + For the Storage Preservation option: The platform + must implement the memory-preservation-boot-time and epow3-quiesce-time + system parameters and must set their initial values to 0. + + + + + R1--2. + + For the Storage Preservation option: If the + memory-preservation-boot-time system parameter is non-zero for a client + program and if the platform delivers an EPOW class 3 indication to the + client program, the platform must do all of the following: + + + Upon delivering the EPOW class 3 to the client program, if the + epow3-quiesce-time system parameter is non-zero, then set a timer based + on the client program’s epow3-quiesce-time system parameter and + force a reboot of the client program on timer expiration, if the client + program does not request a reboot itself before the timer expires. + + + + Upon initiation of the memory preservation boot, set a timer + based on the client program’s memory-preservation-boot-time system + parameter and on timer expiration, force a shutdown of the client program + if the client program does not request a shutdown itself before the timer + expires. + + + + + + +
+ +
+ SCSI Initiator Identifier System Parameters + + Certain physical SCSI IOAs maintain their previous settings for + SCSI initiator identifier, while others require that the platform set + this value during I/O adapter initialization. Since the initialization of + I/O adapters in the boot path is done by firmware, a method is required + for the OS to inform the platform firmware of such settings. Given that + an OS owns a slot, and that slot contains a supported SCSI I/O adapter, + the OS may use the + ibm,set-system-parameter RTAS call specifying SCSI + Initiator Identifier system parameters to instruct the firmware how to + initialize the I/O adapter to ensure that it does not conflict with other + SCSI initiators on the same bus. The + ibm,get-system-parameter RTAS call is used to verify + the SCSI Initiator Identifier system parameters value for any OS owned + slot. + When + ibm,set-system-parameter is called specifying SCSI + Initiator Identifier system parameters, the buffer contains the standard + two byte length field plus two NULL terminated strings. The first string + contains the location code of an I/O Adapter's SCSI bus connector, and + the second string contains one of the decimal values 0-15 representing + the value of the SCSI Initiator Identifier that the platform's firmware + is to use to initialize the SCSI controller for that bus. + When + ibm,get-system-parameter is called specifying SCSI + Initiator Identifier system parameters, the buffer contains the standard + two byte length field plus a NULL terminated string that contains the + location code of an I/O Adapter's SCSI bus connector. Upon successful + return, the buffer contains the standard two byte length field plus two + NULL terminated strings. The first string contains the location code of + the I/O Adapter's SCSI bus connector, and the second string contains one + of the decimal values 0-15 representing the value of the SCSI Initiator + Identifier that the platform's firmware is to use to initialize the SCSI + controller for that bus. + + Implementation Note: For IOAs that have multiple + connectors per bus, the location code specifies the connector for the + external bus. + Interaction between SCSI Initiator Identifier system parameters and + DR operations produce unique situations. The platform maintains only the + latest SCSI Initiator Identifier set for any given location code. On DR + operations, the value is normally retained until the IOA owner explicitly + changes it. If a DR operation replaces the original IOA with a different + type of IOA, such that the previously set SCSI Initiator Identifier + system parameters no longer make sense (IOA is not a supported SCSI + adapter or the connector location codes do not match), the platform + firmware clears the SCSI Initiator Identifier system parameters for the + location code and performs the platform default IOA + initialization. + + + + R1--1. + + For the SCSI Initiator Identifier System Parameters + option: + When ibm,set-system-parameter is called specifying SCSI + Initiator Identifier system parameters, RTAS must return + Status of -3 (Parameter error) on any of the + following conditions: + + + + The binary value of the first two bytes in the buffer, plus 2, + is greater than the buffer length parameter. + + + + The buffer length parameter is greater than 1026. + + + + The N bytes of buffer contents (N being the binary value of the + first two buffer bytes) does not contain two NULL terminated + strings. + + + + The contents of the first NULL terminated buffer string does not + match the format of a valid platform location code. + + + + The contents of the second NULL terminated buffer string does + not contain a decimal value in the range of 0 to 15. + + + + + + + R1--2. + + For the SCSI Initiator Identifier System Parameters + option: + When ibm,set-system-parameter is called specifying SCSI + Initiator Identifier system parameters, and the request successfully + passes the Requirements of + , the first NULL terminated + buffer string must contain a valid formatted platform location code for a + currently installed slot owned by the calling OS, or the platform must + return “Not authorized” + Status. + + + + + R1--3. + + For the SCSI Initiator Identifier System Parameters + option: + When ibm,set-system-parameter is called specifying SCSI + Initiator Identifier system parameters, and the request successfully + passes the Requirements of + , the first NULL terminated + buffer string must contain a valid formatted platform location code for a + SCSI bus connector of a supported SCSI I/O adapter currently installed in + a slot owned by the calling OS, or the platform must return + “Parameter Error” + Status. + + + + + R1--4. + + For the SCSI Initiator Identifier System Parameters + option: When + ibm,set-system-parameter is called specifying SCSI + Initiator Identifier system parameters, and the request successfully + passes the Requirements of + , the firmware must record the + value supplied in the second NULL terminated buffer string for use in + initializing the SCSI initiator identifier of the SCSI I/O adapter + contained in the slot specified by the first NULL terminated buffer + string and return a + Status of 0 (success) (except in the case of hardware + errors or busy conditions). + + + + + R1--5. + + For the SCSI Initiator Identifier System Parameters + option: + When ibm,get-system-parameter is called specifying SCSI + Initiator Identifier system parameters, RTAS must return a + Status of -3 (Parameter error) on any of the + following conditions: + + + + The binary value of the first two bytes in the buffer, plus 2, + is greater than the buffer length parameter. + + + + The buffer length parameter is greater than 1026. + + + + The N bytes of buffer contents (N being the binary value of the + first two buffer bytes) does not contain one NULL terminated + string. + + + + The contents of the NULL terminated buffer string does not match + the format of a valid platform location code. + + + + + + + R1--6. + + For the SCSI Initiator Identifier System Parameters + option: + When ibm,get-system-parameter is called specifying SCSI + Initiator Identifier system parameters, and the request successfully + passes the Requirements of + , the NULL terminated buffer + string must contain a valid formatted platform location code for a + currently installed slot owned by the calling OS, or the platform must + return “Not authorized” + Status. + + + + + R1--7. + + For the SCSI Initiator Identifier System Parameters + option: + When ibm,get-system-parameter is called specifying SCSI + Initiator Identifier system parameters, and the request successfully + passes the Requirements of + , the NULL terminated buffer + string must contain a valid formatted platform location code for a SCSI + bus connector of a supported SCSI I/O adapter currently installed in a + slot owned by the calling OS, or the platform must return a + Status of -3 (parameter error). + + + + + R1--8. + + For the SCSI Initiator Identifier System Parameters + option: When + ibm,get-system-parameter is called specifying SCSI + Initiator Identifier system parameters, and the request successfully + passes the Requirements of + , the firmware must: + + + + Increase the value contained in the first two bytes of the + buffer to cover both the length of the location code NULL terminated + string and a NULL terminated string representing the decimal value that + the platform uses to initialize the SCSI initiator identifier of the SCSI + I/O adapter contained in the slot specified by the first NULL terminated + buffer string. + + + + If there is room in the buffer, append the NULL terminated + string representing the decimal value that the platform uses to + initialize the SCSI initiator identifier of the SCSI I/O adapter + contained in the slot specified by the first NULL terminated buffer + string. + + + + Return a Status of 0 (success) (except in the + case of hardware errors or busy conditions). + + + + + + + R1--9. + + For the SCSI Initiator Identifier System Parameters + option: When the platform firmware initializes an IOA and a + SCSI Initiator Identifier system parameter is set for that IOA's slot + location code, and the SCSI Initiator Identifier system parameter is + incompatible with the currently installed IOA (IOA is not a supported + SCSI adapter or the connector location codes do not match a SCSI bus + connector for that IOA), the platform must clear the incompatible SCSI + Initiator Identifier system parameter and proceed to initialize the IOA + using platform default behaviors. + + + + +
+ +
+ CoD Options + + The CoD Options system parameter allows specification of various + CoD options. + + + + R1--1. + + ibm,get-system-parameter is called + specifying the CoD Options system parameter, the first + two bytes of the value returned must + contain the full length of the parameter data, including the length of + the NULL. The two byte binary length field is followed by a variable of + the form “keyword” followed by “=” followed by + “value” and terminated by a semicolon (“;”), + where the contents of “value” must be an ASCII printable + character string. + + + + + R1--2. + + The corresponding keyword and values + for the CoD Options parameter are defined in + . + + + CoD Options System Parameter Keyword and + Values + + + + + + + + + Keyword + + + + + Permitted Values + + + + + Definition + + + + + + + + LPoptions + + + yes, no + + + no: The platform does not support the Low Priced adapters + and devices. + yes: The platform supports the Low Priced adapters and + devices. + Absence of the keyword is the same as the keyword with + the value of “yes”. + + + + +
+
+
+
+ +
+ +
+ Platform Error Classification + + The Platform Error Classification system parameter specifies + whether the OS should process platform reported errors as informational + errors as opposed to service actionable events. + + + + R1--1. + + When + ibm,get-system-parameter is called specifying the + Platform Error Classification system parameter, the platform must return + a value of + “1” if all errors returned in + event-scan, + check-exception, + rtas-last-error and + ibm,slot-error-detail calls should be treated as + informational errors in the sense that they not be reported by service + applications as service actionable events and otherwise must return a + value of + “0”. + + + + + + Programming Note: Service applications within an + operating system may obtain information about platform errors and take + service actions (such as reporting the errors to a call center or other + error aggregation point) based on errors logged. Service applications + running in multiple partitions, each receiving platform error events, may + all report the same error to an aggregation point causing duplicated + error reports. To eliminate this duplication, a platform might choose to + log errors to only one partition in a system. That, however, would leave + an incomplete error record in individual partition and eliminate + notifications that each partition OS should be aware of (such as EPOW + events). + To allow platform errors to be reported to an OS, but prevent the + forwarding of the errors as service actionable events to an error + aggregation point, the Platform Error Classification system parameter may + be set to a value of 1. + The OS should not change how it logs an error based on this + parameter, nor should the OS change any error severity associated with + the log based on the parameter. Rather it is left to service applications + to query the system parameter and take actions based on it. +
+ +
+ Firmware Boot Options + + The Firmware Boot Options system parameter allows specification of + various firmware boot settings. + + + + R1--1. + + When ibm,get-system-parameter is called specifying the + Firmware Boot Options system parameter, the first two bytes of the value + returned must be binary and must contain the full length of the parameter + data, including the length of the NULL, and the field following length + field must be a variable of the form: “keyword” followed by + “=” followed by “value” and terminated by a + semicolon (“;”), where the contents of “value” + must be an ASCII printable character string. + + + + + R1--2. + + When ibm,set-system-parameter is + called specifying the + Firmware Boot Options system parameter, the first two bytes of the buffer + must be binary and must contain the full length of the parameter data, + including the length of the NULL, and the field following length field + must be a variable of the form: “keyword” followed by + “=” followed by “value” and terminated by a + semicolon (“;”), where the contents of “value” + must be an ASCII printable character string, and if the caller is not + authorized to adjust at least one of the specified keywords, the call + must return with a status of -9002. + + + + + R1--3. + + Keyword and values for the Firmware + Boot Options parameter must be as defined in + . + + + Firmware Boot Options System Parameter Keywords and + Values + + + + + + + + + Keyword + + + + + Permitted Values + + + + + Definition + + + + + + + + PlatformBootSpeed + + + fast, slow + + + fast: The platform will perform a minimal set of hardware + tests before loading the OS. + slow: The platform will perform a comprehensive set of + hardware tests before loading the OS. + Absence of the keyword implies the platform does not + support an alterable boot speed. + + + + +
+
+
+
+ +
+ +
+ Platform Processor Diagnostics Options + + The platform-processor-diagnostics-run-mode system parameter allows + the operating system to query or control how platform run-time processor + diagnostics are executed by the platform. Provision is made by this + parameter for the platform to execute run-time diagnostic tests to verify + various processor functions. These diagnostics tests typically would be + performed by the hypervisor against each processor in the system. + + + + R1--1. + + When + ibm,get-system-parameter is called with the + platform-processor-diagnostics-run-mode token, the platform must return a + one-byte parameter indicating the current run-mode of platform processor + diagnostics as one of the following: + + + + 0 = disabled: indicates that the platform will not run processor + run-time diagnostics. + + + + 1 = staggered: indicates that the platform is set to run + processor diagnostics on each processor on a periodic basis, but not + attempt to schedule the tests for all processors at the same time. The + frequency at which the tests will run are defined by the platform. + + + + 2 = immediate: indicates that the platform is currently in the + processor of running diagnostics against the processors in a system on a + non-staggered basis, either as a result of an “immediate” or + “periodic” setting. + + + + 3 = periodic: indicates that the platform is scheduled to run + diagnostics against all the processors in the system at a specific time + scheduled by the platform. + + + + + + + R1--2. + + When + ibm,set-system-parameter is called specifying the + platform-processor-diagnostics-run-mode token, the one-byte parameter + passed must indicate the run-mode of platform periodic diagnostics + desired as one of the following: + + + + 0 = disabled: indicates that the platform should not run any + processor run-time diagnostics. Any currently running diagnostics will be + terminated. + + + + 1 = staggered: indicates that the platform should run + diagnostics periodically against each processor in the system, but not + attempt to schedule the tests for all processors at the same time. The + frequency at which the tests will run are defined by the platform. + + + + 2 = immediate: indicates that the platform should immediately + begin the process of running processor diagnostics on all of the + processors in the system, This setting only temporarily overrides the + setting of “disabled”, “staggered” or + “periodic” and the platform will revert to the last setting + of “disabled”, “staggered” or + “periodic” once the immediately run diagnostics are + complete. + + + + + + + + Implementation Notes: To prevent conflicts in the + setting of the run-mode, the platform should only support this parameter + for one partition in a running system. The options may also be set by the + platform. The last value set will take precedent over any previous + settings. +
+ +
+ Processor Module Information + + The Processor Module Information system parameter allows + transferring of certain processor module information from the platform to + the OS. The information in the parameter is global for the platform and + encompasses all resources on the platform, not just those available to + the partition, and the + ibm,get-system-parameter will never return a + Status of -9002 (Not Authorized). This parameter is + read-only. + + + + R1--1. + + For the LPAR option with the System Parameters + option: If the platform supports the Processor Module + Information system parameter, then it must provide the following + information in the parameter, and the information returned for every + partition must be the same, with all the resources of the platform + encompassed: + 2 byte binary number (N) of module types followed by N module + specifiers of the form: + 2 byte binary number (M) of sockets of this module type + 2 byte binary number (L) of chips per this module type + 2 byte binary number (K) of cores per chip in this module + type. + + + + + R1--2. + + For the LPAR option with the System Parameters + option: For the Processor Module Information system parameter, + the + ibm,get-system-parameter RTAS call must never return + a + Status of -9002 (Not Authorized), and the + ibm,set-system-parameter RTAS call must always return + a Status of -9002 (Setting not allowed/authorized). + + + + +
+ +
+ Cede Latency Settings Information + + The Cede Latency Settings Information system parameter informs the + OS of the maximum latency to wake up from the various platform supported + processor sleep states that it might employ for idle processors. The + information in the parameter is global for the platform and encompasses + all processors on the platform, and the + ibm,get-system-parameter will never return a + Status of -9002 (Not Authorized). This parameter is + read-only. As the architecture evolves, the number of fields per record + are likely to increase, calling software should be written to handle + fewer fields (should it find itself running on a platform supporting an + older version of the architecture) and ignore additional fields (should + it find itself running on a platform supporting a newer version of the + architecture). Due to partition migration, the support for the cede + latency setting system parameter, the number of supported cede latency + settings (and thus the number of reported records) and the number of + fields reported per record might change from call to call; calling + software should be written to handle this variability + + + + R1--1. + + For the PEM option with the System Parameters + option: If the platform supports the cede latency settings + information system parameter it must provide the following information in + the NULL terminated parameter string: + + + + The first byte is the binary length “N” of each cede + latency setting record minus one (zero indicates a length of 1 + byte) + + + + For each supported cede latency setting a cede latency setting + record consisting of: The first “N” bytes of + . + + + + + Byte definitions within a cede latency setting + record + + + + + + + + + + Order of fields within a + record + + + + + Field Length + + + + + Values + + + + + Comments + + + + + + + + Cede Latency Specifier Value + + + 1 + + + Binary Values 0-255 + + + Records in ascending cede latency specifier value order + with no holes. + + + + + Maximum wakeup latency in time base ticks + + + 8 + + + 0x0000000000000000 - 0xFFFFFFFFFFFFFFFF + + +   + + + + + Responsive to external interrupts + + + 1 + + + Binary True/False + + +   + + + + +
+
+
+ + + R1--2. + + For the PEM option with the System Parameters + option: For the cede latency specifier system parameter, the + ibm,get-system-parameter RTAS call must never return + a + Status of -9002 (Not Authorized), and the + ibm,set-system-parameter RTAS call must always return + a + Status of -9002 (Setting not + allowed/authorized). + + +
+ +
+ +
+ Target Active Memory Compression Factor + + The target active memory compression factor system parameter + informs the OS of the target memory capacity increase the customer + expects to achieve due to active memory compression. The factor is + expressed in whole percentage with the minimum value of 100 and the + maximum value of 1000. + The + ibm,get-system-parameter for parameter token 46 will + never return a + Status of -9002 (Not Authorized). This parameter is + read-only. + + + + R1--1. + + For the Active Memory Compression option with the System + Parameters option: For the Target Active Memory Compression + Factor system parameter, the + ibm,get-system-parameter RTAS call must never return + a Status of -9002 (Not Authorized). + + + + + R1--2. + + For the Active Memory Compression option with the System + Parameters option: If the Active Memory Compression option is + enabled for the partition, the platform must provide in response to the + ibm,get-system-parameter for parameter token 46 the + two byte target active memory compression factor in binary format in the + range (0x0064 -- 0x03E8) (equivalent to 100 -- 1000 decimal). + + + + + R1--3. + + For the Active Memory Compression option with the System + Parameters option: If the Active Memory Compression option is + disabled for the system/partition, the platform must provide in response + to the + ibm,get-system-parameter for parameter token 46 the + two byte value 0x0000. + + + + + R1--4. + + For the Active Memory Compression option with the System + Parameters option: For the target active memory compression + factor system parameter, the + ibm,set-system-parameter RTAS call must always return + a Status of -9002 (Setting not allowed/authorized). + + + + +
+ +
+ Performance Boost Modes Vector + + A variety of platform dependent configuration modes might result in + a boost in platform computational capacity. The + ibm,get-system-parameter through the performance + boost modes vector system parameter communicates to the client program + which of these modes are available on the specific platform, which of + these modes the client program may enable/disable, and which ones are + active. + The performance boost mode vectors are 32 bytes (256 bits) long. + Each bit position within the performance boost mode vector corresponds to + a specific function as specified in + . The first defined boost mode + is assigned to the highest order bit position. As new boost modes are + defined, they are assigned to sequential lower order vector bit + positions. + Given that the second version of the vector from the + ibm,get-system-parameter RTAS call (specifying which + modes may be enabled/disabled by the client program) is non-zero, the + platform supports calling the + ibm,set-system-parameter RTAS call specifying the + performance boost modes vector token. The + ibm,set-system-parameter RTAS call specifying the + performance boost modes vector token takes a single vector as + input. + + + Performance Boost Modes Vector Bits + Definitions + + + + + + + + Bit Position (1 based + ordinal) + + + + + Definition + + + + + + + + 1 + + + Extended Cache Option + + + + + 2-- 256 + + + Reserved + + + + +
+ + + + R1--1. + + For the Performance Boost Modes option: The platform + must implement the System Parameters option. + + + + + R1--2. + + For the Performance Boost Modes option: The 96 byte + report returned by + ibm,get-system-parameter for parameter token 47 must + consist of three 32 byte bit vectors as defined by + . + + + + + R1--3. + + For the Performance Boost Modes option: The first 32 + byte bit vector returned by + ibm,get-system-parameter for parameter token 47 must + contain 1s in the bit positions define by + for the performance boost modes + that are both supported by the platform and authorized for the caller (by + means outside of the scope of LoPAR). + + + + + R1--4. + + For the Performance Boost Modes option: The second 32 + byte bit vector returned by + ibm,get-system-parameter for parameter token 47 must + contain 1s in the bit positions define by + for the performance boost modes + that are both represented in the first vector and may be enabled/disabled + by the caller through the + ibm,set-system-parameter using parameter token + 47. + + + + + R1--5. + + For the Performance Boost Modes option: The third 32 + byte bit vector returned by + ibm,get-system-parameter for parameter token 47 must + contain 1s in the bit positions define by + for the performance boost modes + that are both represented in the first vector and are enabled either by + default or by the caller through the + ibm,set-system-parameter using parameter token + 47. + + + + + R1--6. + + For the Performance Boost Modes option: If the + ibm,get-system-parameter for parameter token 47 + communicated that the client program has the ability to enable/disable + one or more of the boost modes, then the platform must support the + performance boost modes vector token for ibm,set-system-parameter. + + + + + R1--7. + + For the Performance Boost Modes option: If no boost + modes can be enabled/disabled then a call to ibm,set-system-parameter + specifying the boost modes vector token must return either: + + + + “System parameter not supported” as indeed the + implementation need not code support for the token if no mode setting is + supported. + + + + “Setting not allowed/authorized” if the + implementation supports setting boost modes but the caller is not + authorized to do so. + + + + + + + R1--8. + + For the Performance Boost Modes option: If any input + vector to the + ibm,set-system-parameter RTAS for parameter token 47 + is a one and does not correspond to a bit that is a one in the second + version of the vector returned by the + ibm,get-system-parameter RTAS for parameter token 47 + the ibm,set-system-parameter RTAS must return parameter error. + + + + + R1--9. + + For the Performance Boost Modes option: If the + corresponding bit that was a one in the second version of the vector + returned by the + ibm,get-system-parameter RTAS for parameter token 47 + is a one in the input vector to the + ibm,set-system-parameter RTAS for parameter token 47 + then upon successful return that corresponding boost mode must be + enabled. + + + + + R1--10. + + For the Performance Boost Modes option: If the + corresponding bit that was a one in the second version of the vector + returned by the + ibm,get-system-parameter RTAS for parameter token 47 + is a zero in the input vector to the + ibm,set-system-parameter RTAS for parameter token 47 + then upon successful return that corresponding boost mode must be + disabled. + + + + + R1--11. + + For the Performance Boost Modes option: To properly + awake from partition suspension and handle dynamic reconfiguration, the + client program must be prepared to handle changes in the bit settings + within the bit vectors reported by the + ibm,get-system-parameter RTAS for parameter token + 47. + + + + + R1--12. + + For the Performance Boost Modes option: Since it is + expected that bit positions define by + will expand over time, to avoid + firmware level compatibility issues, the client program must ignore bit + settings within the bit vectors reported by the + ibm,get-system-parameter RTAS for parameter token 47 + beyond those defined when the client pr gram was designed. + + + + +
+ +
+ Universally Unique IDentifier + + The Universally Unique IDentifier (UUID) option provides each + partition with a Universally Unique Identifier that is persisted by the + platform across partition reboots, reconfigurations, OS reinstalls, + partition migration, hibernation etc. The UUID is a 16 byte string of + format fields and random bits as defined in + . The random bits are generated + in an implementation dependent manner to achieve a projected probability + of collision of not greater than one in 2**60. + + + UUID Format + + + + + + + + + + Field + + + + + Byte:Bit + + + + + Size (Bits) + + + + + Values + + + + + + + + Version + + + 0:0 + + + 1 + + + 0: Initial Version + 1: Reserved + + + + + Random Bits + + + 0:1 thru 5:7 + + + 47 + + + Random Bits + + + + + Generation Method + + + 6:0-3 + + + 4 + + + 0b0000 Never Used + 0b0100 Random Generated + All other values are reserved + + + + + Random Bits + + + 6:4 - 7:7 + + + 12 + + + Random Bits + + + + + Variant + + + 8:0-1 + + + 2 + + + 0b10 DCE Variant UUID + All other values are reserved + + + + + Random Bits + + + 8:2 - 15:7 + + + 62 + + + Random Bits + + + + +
+ + + + R1--1. + + For the UUID option with the System Parameters + option: For the UUID system parameter, the + ibm,get-system-parameter RTAS call must never return + a Status of -9002 (Not Authorized). + + + + + R1--2. + + For the UUID option with the System Parameters + option: If the UUID option is enabled for the partition, the + platform must provide in response to the + ibm,getsystem-parameter for parameter token 48 the + calling partition unique 16 byte sting as described in + . + + + + + R1--3. + + For the UUID option with the System Parameters + option: If the UUID option is disabled for the + system/partition, the platform must provide in response to the + ibm,get-system-parameter for parameter token 48 the + two byte value 0x0000. + + + + + R1--4. + + For the UUID option with the System Parameters + option: For the UUID system parameter, the + ibm,set-system-parameter RTAS call must always return + a Status of -9002 (Setting not allowed/authorized). + + + + +
+ +
+ + + +
diff --git a/RTAS/ch_rtas_environment.xml b/RTAS/ch_rtas_environment.xml new file mode 100644 index 0000000..aea5dc0 --- /dev/null +++ b/RTAS/ch_rtas_environment.xml @@ -0,0 +1,2560 @@ + + + + + Environment + + RTAS provides an interface definition between the OS and the firmware + provided by the platform. This chapter defines the calling conventions used + by both the OS and the platform’s RTAS firmware. + RTAS runs with instruction and data relocate as well as processing + exceptions disabled. To not interfere with the OS, RTAS may not cause any + exceptions, nor can it depend on any particular virtual memory + mappings. + All RTAS functions are invoked from the OS by calling the + rtas-call function. The address of this + function is obtained from OF when + RTAS is instantiated. See Requirement + for more details. RTAS determines + what function to invoke based on the data passed into the + rtas-call function. This section describes the + mechanisms used to invoke the rtas-call function, + the machine state, register usage, resource + allocation, and the invocation requirements. + If the LPAR option is enabled, multiple partitions may exist, each + with its own OS instance. This requires some changes to the RTAS + environment. These changes are discussed in + . + +
+ Machine State + When RTAS functions are invoked, the calling processor shall have + address translations, floating point, and most other exceptions disabled + and it shall be running in privileged state. + + + + R1--1. + + RTAS must be called in “real + mode,” that is, all address translation must be disabled. Bits MSRIR and + MSRDR of the MSR register must be zero. + + + + + R1--2. + + RTAS must be called in privileged mode, and + the MSRPR bit must be set to 0. + + + + + R1--3. + + RTAS must be called with external + interrupts disabled, and the MSREE bit must be set to 0. + + + + + R1--4. + + RTAS must be called with trace disabled, + and the MSRSE and + MSRBE bits must be set to 0. + + + + + R1--5. + + RTAS must be + called with floating point disabled, and the + MSRFE0, + MSRFE1, and + MSRFP bits must be set to 0. + + + + + R1--6. + + RTAS must be called with the MSRSF, + (MSRISF, and ASRV + bits if applicable on the specific processor) set + to match the mode used to instantiate RTAS (0 for + instantiate-rtas or 1 for + instantiate-rtas-64) and the + LE bit set to 0. + + + + + R1--7. + + With the exception of the MSRDR and + MSRRI bits, RTAS must not change the state of the + machine by modifying the MSR. + + + + + R1--8. + + rtas-call is entered + in a non-recoverable mode, indicated by having the + MSRRI bit set equal to 0, then RTAS must not enter a + recoverable mode by setting the MSRRI bit to 1. + + + + + R1--9. + + If called with MSRRI equal to 1, + then RTAS must protect its own + critical regions from recursion by setting the MSRRI + bit to 0 when in the critical regions. + + + + + Software Implementation Notes: + + + + If the MSRME bit is left enabled, the OS’s exception + handler must be aware that RTAS might have been running and that various + processor registers might not be in the expected state for an interrupted + OS, which precludes recoverability but permit logging machine + checks. + + + + There are some provisions for recursive calls to RTAS error + handling functions. Therefore, RTAS should set the MSRRI + bit to 0 if SRR0/SRR1 or any other RTAS resource + is in a state where information could be lost and prohibit + recovery. + + + + Requirement + implies that RTAS must be able + to be instantiated in 64-bit mode on platforms that can support 64-bit + execution. + + + +
+ +
+ Register Usage + + + + R1--1. + + Except as + required by a specific function, registers SPRG2, R0, R3 through R12, + CTR, XER, LR, and fields CR2-CR4 of the CR, RTAS must preserve all OS + visible register state. + + + + + R1--2. + + RTAS must not modify the DEC and registers SPRG0, SPRG1, and SPRG3. + + + + + Software Implementation Notes: + + + + RTAS is entered in real mode + (with address translation turned off). In this mode, all data accesses + are assumed to be cached in copy back mode with memory coherence + required. Since these settings may not be appropriate for all accesses, + RTAS is free to transparently use the processor specific facilities + required to access platform hardware resources. The OS machine check + handler can only depend on those registers that are required to be + unchanged (see Requirement + ). + + + + RTAS must not change the preserved registers, or must first save + them and restore the original contents before returning to the OS. + + + + The SRR0-SRR1, LR, CTR, XER registers, as well as any + reservations made via the load and reserve instructions, need not be + preserved. + + + +
+ +
+ RTAS Critical Regions + + The OS, when using RTAS, is responsible for protecting RTAS and + devices used by RTAS from any simultaneous accesses that could corrupt + memory or device registers. Such corruption could be caused by + simultaneous execution of RTAS code, or by a device driver accessing a + control register that is also modified by RTAS. In a single processor + system, since the MSREE bit is 0 when entering RTAS, a call to RTAS while + it is in execution is prevented except for the machine check handler. + This handler may need to call various RTAS services such as + check-exception or + system-reboot even if the error was detected while in + an RTAS service + . + The OS and RTAS must co-exist on the same platform. RTAS must not + change device registers that are used by the OS, nor may the OS change + device registers on devices used by RTAS. With the advent of more and + more integration into common super parts, some of these registers may + physically reside on the same component. In this section, device implies + the collection of common registers that together perform a function. Each + device must be represented in the OF device tree. + + + + R1--1. + + Except as noted in Requirement + and + , the OS must ensure that RTAS + is not called while RTAS is in execution and that RTAS is not + simultaneously called from different processors in a multi-processor + system. + + + + + R1--2. + + Any RTAS access to device or I/O registers + specified in this document must be made in such a way as to be + transparent to the OS. + + + + + R1--3. + + Any device that + is used to implement the RTAS abstracted services must have the property + “used-by-rtas” in the OF device tree. + However, if the device is only used by the + power-off, and + system-reboot calls, the property should not be set. + The + rtas-display-device must be marked with the property + “used-by-rtas” if it is a specialized + device only to be accessed via the RTAS + display-character call and not otherwise shared with + the OS + + + Software Implementation Note: + clarifies when a device should + be marked with the + “used-by-rtas” property, based on whether + it has any interaction with RTAS and/or the OS (with the exception of the + calls listed in Requirement + ). + + + Use of + <emphasis role="bold"><literal>“used-by-rtas”</literal></emphasis> + + + + + + + + +   + + + + + Normal Device (1) + + + + + rtas-display-device + + + + + + + + Only used by OS + + + not marked + + + N/A (2) + + + + + Only used by RTAS + + + marked + + + marked + + + + + OS and RTAS shared + + + marked (3) + + + not marked (4) + + + + + Virtual + + + N/A + + + N/A + + + + +
+ + + + A device which is not normally to be used by the OS must meet + one of the following rules. + + + + It must not be included in the OF device tree. + + + + It must be defined as a “reserved” device + node. + + + + It must be marked with the + “used-by-rtas” property in the OF device + tree. + + + + + + It is assumed that an + rtas-display-device is used by RTAS. + + + + It is assumed that there are no devices other than the + rtas-display-device which are used by both RTAS and + an “unaware” OS. To allow an aware OS to share a device with + RTAS, the device should be marked. + + + + It is assumed that the + rtas-display-device is used by both RTAS and the OS + (as coordinated by the OS via display-character) unless it is marked. See + also Requirement + . + + + +
+
+ + + R1--4. + + Platforms must be designed such that + accesses to devices that are marked + “used-by-rtas” + have no side effects on other registers in the system. + + + + + R1--5. + + Any OS access to devices specified as + “used-by-rtas” + must be made in such a way as to be transparent to RTAS. + + + + + R1--6. + + RTAS must not generate any exceptions (for + example, no alignment exceptions, page table walk exceptions, + etc.). + + + + + R1--7. + + The OS machine check and soft reset handlers must be + able to call the RTAS services: + + + + nvram-fetch + + + + nvram-store + + + + check-exception + + + + display-character + + + + system-reboot + + + + set-power-level(0,0) + + + + power-off + + + + ibm,set-eeh-option + + + + ibm,set-slot-reset + + + + ibm,read-slot-reset-state2 + + + + + + + R1--8. + + The stop-self + service need only be serialized with calls to the + stop-self, + start-cpu, and + set-power-level services. The OS must be able to call + RTAS services on other processors while a processor is stopped or being + stopped. + + +
+ + Software Implementation Notes: + + + + While RTAS must not generate any exceptions, it is still + possible that a machine check interrupt may occur during the execution of + an RTAS function. In this case, the machine check handler may be entered + prior to the normal termination of the RTAS function. + + + + It is permissible for the OS exception handler to make an RTAS + call as long as Requirements + and + are met. In particular, it is + expected that the RTAS + check-exception is called from the OS exception + handler. + + + +
+ +
+ Resource Allocation and Use + During execution, RTAS requires memory for both code and data. This + memory may be in RAM, in a private memory area only known by the system + firmware, or in memory allocated by the OS for RTAS use. RTAS should use + this memory for its stack and any state savings. This memory is + subsequently called the “RTAS private data area.” + + + + R1--1. + + The OS must allocate + “rtas-size” + bytes of contiguous real memory as RTAS + private + data area. This memory must be aligned on a 4096 byte boundary and may + not cross a 256 MB boundary. + + + + + R1--2. + + The RTAS private data area must not be accessed by the OS. + + + + + R1--3. + + Except for the RTAS private data area, the + argument buffer, System Memory pointed to by any reference parameter in + the argument buffer, and any other System Memory areas explicitly + permitted in this chapter, RTAS must not modify any System Memory. RTAS + may, however, modify System Memory during error recovery provided that + such modifications are transparent to the OS. + + + + + R1--4. + + RTAS calls may + not sleep in any fashion nor busy wait for more than a very short period + of time, except for + power-off, ibm,power-off-ups, set-power-level (0,0), + system-reboot, ibm,update-flash-64-and-reboot, and + ibm,os-term. + + Software + Implementation Note: An RTAS call should take the same amount of time to + perform a service that it would take the OS to perform the same function. + A specific goal is that RTAS primitives should take less than a few tens + of microseconds. + + + + + R1--5. + + For RTAS calls which do not allow the + Status of -2 (Busy), there may be “rare” + instances where an anomaly may occur and the call may take longer than a + “very short period of time.” In these cases, the call must + complete within 250 microseconds. Otherwise, a hardware error response + must be given. + + + + +
+ +
+ Instantiating RTAS + RTAS is instantiated by an explicit client interface service call + into OF. The OF device tree contains a property + (“rtas-size”, under + the + /rtas node) which defines how much real memory RTAS + requires from the OS. The OS allocates + “rtas-size” + bytes of real memory, and + then invokes the + instantiate-rtas or + instantiate-rtas-64 method of the + /rtas node, passing the real address of the private + data area (or zero, if + “rtas-size” is zero) as the + rtas-base-address input argument. Firmware binds RTAS + to that address, binds the addresses of devices that RTAS uses, performs + any RTAS initialization, and returns the address of the + rtas-call + function + that is appropriate. + + + + R1--1. + + The instantiate-rtas or + instantiate-rtas-64 + OF method + must have the arguments specified in + . + + + <emphasis role="bold"><literal>instantiate-rtas</literal></emphasis> + <emphasis role="bold"><literal>instantiate-rtas-64</literal></emphasis> + Argument Call Buffer + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + rtas-base-address + + + + Real Address of RTAS area or zero, if + “rtas-size” is zero + + + + + Out + + + + rtas-call + + + + Real address used to invoke RTAS functions + + + + +
+
+
+ + + R1--2. + + The RTAS code bound and initialized by the + instantiate-rtas method on a 64-bit capable platform, + must be able to handle platform resources that are accessed using 64-bit + addresses. + + +
+ +
+ +
+ RTAS Device Tree Properties + The OF device tree contains a + /rtas device node that describes the implemented RTAS + features and the output device supported by RTAS. Within this device node + are properties that describe the RTAS functions implemented by the + firmware. For every implemented RTAS function, the + /rtas node contains an OF property whose name is the + same as the RTAS function. The value of this property is the token + argument passed into the + rtas-call + function + when making that specific RTAS call. Note that some + RTAS functions are optional and some are required. This is defined in + . + + + + R1--1. + + The OF device tree must contain a device + node named + /rtas which describes the RTAS implementation. + + + + + R1--2. + + The /rtas device node must have a property for each + implemented RTAS function in + . The value of this property is + a token that is passed into the + rtas-call + function to + indicate which RTAS function to invoke. + + RTAS Tokens for Functions + + + + + + + + + RTAS property/function + + + + + Required? + + + + + Notes + + + + + + + + + “nvram-fetch” + + + + + + + Required + + + Execution time proportional to amount of data + + + + + + “nvram-store” + + + + + + + Required + + + Execution time proportional to amount of data + + + + + + “get-time-of-day” + + + + + + + Required + + +   + + + + + + “set-time-of-day” + + + + + + + Required + + +   + + + + + + “set-time-for-power-on” + + + + + + +   + + +   + + + + + + “event-scan” + + + + + + + Required + + +   + + + + + + “check-exception” + + + + + + + Required + + +   + + + + + + “rtas-last-error” + + + + + + + Required + + +   + + + + + + “ibm,platform-dump” + + + + + + + If the Platform Dump option is implemented + + +   + + + + + + “ibm,read-pci-config” + + + + + + + Required + + +   + + + + + + “ibm,write-pci-config” + + + + + + + + + + “display-character” + + + + + + +   + + +   + + + + + + “set-indicator” + + + + + + + Required + + + Some specific indicators are required, and some are + optional + + + + + + “get-sensor-state” + + + + + + +   + + +   + + + + + + “ibm,set-system-parameter” + + + + + + +   + + +   + + + + + + “ibm,get-system-parameter” + + + + + + +   + + +   + + + + + + “set-power-level” + + + + + + + Required for DR operations (see + ) + + +   + + + + + + “get-power-level” + + + + + + +   + + + + + + “power-off” + + + + + + +   + + + Provided for platforms with software controlled power off + capability + + + + + + “ibm,power-off-ups” + + + + + + + If there may be a platform controlled UPS. + + + For power off control in a platform which may have power + backed up with an Uninterruptible Power Supply (UPS). + + + + + + “system-reboot” + + + + + + + Required + + +   + + + + + + “ibm,update-flash-64-and-reboot” + + + + + + +   + + +   + + + + + + “ibm,manage-flash-image” + + + + + + +   + + +   + + + + + + “ibm,validate-flash-image” + + + + + + +   + + +   + + + + + + “ibm,activate-firmware” + + + + + + +   + + +   + + + + + + “stop-self” + + + + + + + See Note + + +   + + + + + + “start-cpu” + + + + + + +   + + + + + + “query-cpu-stopped-state” + + + + + + +   + + + + + + “ibm,os-term” + + + + + + +   + + +   + + + + + + “ibm,exti2c” + + + + + + +   + + +   + + + + + + “ibm,get-xive” + + + + + + + Required for the PowerPC External Interrupt option + + +   + + + + + + “ibm,set-xive” + + + + + + +   + + + + + + “ibm,int-off” + + + + + + +   + + + + + + “ibm,int-on” + + + + + + +   + + + + + + “ibm,configure-connector” + + + + + + + Required for all DR options + + + See + . + + + + + + “ibm,set-eeh-option” + + + + + + + Required for EEH option + + +   + + + + + + “ibm,set-slot-reset” + + + + + + +   + + + + + + “ibm,read-slot-reset-state” + + + + Being replaced by + + ibm,read-slot-reset-state2 + + + + See + . + + + + + + “ibm,read-slot-reset-state2” + + + + + + + Required for all platforms + + +   + + + + + + “ibm,get-config-addr-info2” + + + + + + + Required on all platforms + + +   + + + + + + “ibm,slot-error-detail” + + + + + + + Required for the EEH option + + +   + + + + + + “ibm,open-errinjct” + + + + + + + Required for ERRINJCT option + + +   + + + + + + “ibm,errinjct” + + + + + + +   + + + + + + “ibm,close-errinjct” + + + + + + +   + + + + + + “ibm,nmi-register” + + + + + + + Required for FWNMI option + + +   + + + + + + “ibm,nmi-interlock” + + + + + + +   + + + + + + “ibm,configure-bridge” + + + + + + + Required for the EEH option + + +   + + + + + + “ibm,configure-pe” + + + + + + + Required for the EEH option + + +   + + + + + + “ibm,get-indices” + + + + + + + Sometimes (see + ) + + +   + + + + + + “ibm,get-vpd” + + + + + + + Required for the Dynamic VPD option + + +   + + + + + + “ibm,manage-storage-preservation” + + + + + + + Required for the Storage Preservation option + + +   + + + + + + “ibm,get-dynamic-sensor-state” + + + + + + + See Requirement + . + + +   + + + + + + “ibm,set-dynamic-indicator” + + + + + + + See Requirement + . + + +   + + + + + + “ibm,change-msi” + + + + + + + Required for the MSI option. Required if any PCI Express + HB in the platform. + + +   + + + + + + “ibm,suspend-me” + + + + + + + Required for the Partition Suspension option + + +   + + + + + + “ibm,update-nodes” + + + + + + + Required for the Update OF Tree option + + +   + + + + + + “ibm,update-properties” + + + + + + + Required for the Update OF Tree option + + +   + + + + + + “ibm,configure-kernel-dump” + + + + + + + Required for the Configure Platform Assisted Kernel Dump + option + + +   + + + + + + “ibm,query-pe-dma-window” + + + + + + + Required for the Dynamic DMA Window (DDW) option + + +   + + + + + + “ibm,create-pe-dma-window” + + + + + + +   + + + + + + “ibm,remove-pe-dma-window” + + + + + + +   + + + + + + “ibm,reset-pe-dma-windows” + + + + + + + Required for the LoPAR version l of the Dynamic DMA + Window (DDW) option + + +   + + + + +
+ + Note: These commands are required in SMP platforms if + dynamic reconfiguration is required of the processors. Similarly, a + degraded mode may need these, or similar commands in the case of + detection of excessive errors. In the case of a processor deconfigured by + dynamic reconfiguration or due to excessive errors, the returned + CPU_status from the + query-cpu-stopped-state RTAS call is 2 (The processor + thread is not in the RTAS stopped state) since the deconfigured processor + cannot be started. +
+
+ + + R1--3. + + The OF properties listed in + must be in the + /rtas device tree node prior to booting the + OS. + + + OF Device Tree Properties + + + + + + + + name + + + + + value + + + + + + + + + “rtas-size” + + + + integer size of RTAS private data area or zero if + allocation is not required + + + + + + “rtas-version” + + + + An integer encoding of the RTAS interface version. This + document describes version 1. + + + + + + “rtas-event-scan-rate” + + + + The rate, in calls per minute, at which rtas-event-scan + should be called by the OS. See + . + + + + + + “rtas-display-device” + + + + The + phandle of the device node used by the RTAS + call, + display-character. + + + + + + “rtas-error-log-max” + + + + The maximum size of an extended error log. + + + + +
+
+
+ + + R1--4. + + All RTAS functions listed as + “Required” in + must be implemented in + RTAS. + + + + + R1--5. + + For the Symmetric Multiprocessor option: The + functions listed as “Required in SMP Platforms” in + must be implemented in + RTAS. + + +
+ + Software Implementation Notes: + + + + It is permitted for RTAS not to implement those optional + functions that are not appropriate or not needed on a particular + platform. + + + + Vendors may introduce private RTAS calls of their own. If they + do, the property names should be of the form + “vendor,property” where + vendor is a company name string as defined by OF. + Future versions of this architecture will not choose RTAS property names + that include a comma. + + + +
+ RTAS Device Tree Properties for Indicators and + Sensors + Indicators and sensors may be static or dynamic. Each indicator or + sensor type is identified by its token; a number which is associated with + the functionality of the indicator or sensor. A specific indicator token + is static in a particular platform if the number of indicators of that + type do not change with Dynamic Reconfiguration (DR) operations, and + dynamic otherwise. Certain sensors and indicators associated with DR + + DR indicators include isolation-state (9001), DR indicator + (9002), and allocation-state (9003). DR sensors include dr-entity-sense + (9003). DR indicators and sensors are required to be there based on the + DR entity being supported. Their indices are specified by the DR index + for the DR entity. See + and + for more information. + are static since they represent the base hardware, others are + dynamic coming and going with extensions to the base hardware. Indices + for DR indicators and sensors are obtained from the DRC index for the DRC + connector. Information about static non-DR indicators and sensors (like + indices and location codes) are specified in the OF device tree at boot + time and do not change. Information about non-DR dynamic indicators and + sensors, needs to be gathered via the + ibm,get-indices RTAS call (see + ), and sensors, instead of + being represented in the device tree. + Indicators and sensors within a platform generally have location + codes associated with them. Location code information for static + indicators and sensors, except DR indicators and sensors, are placed in + the + <vendor>,indicator-<token> and + <vendor>,sensor-<token> + properties, respectively, in the + /rtas node, where “<vendor>” is + defined in the column marked “<vendor>” in + and + , respectively. Location code + information for dynamic indicators and sensors, except DR indicators and + sensors, for the most part come in via the + ibm,get-indices call. + Information (index, location code) about a particular indicator or + sensor token, except DR indicators and sensors, are in the + /rtas node properties or are available via the + ibm,get-indices call, but not both. When indices are + provided via the + “rtas-sensors” or + “rtas-indicators” properties, it is + expected that there exists a sensor/indicator for each index between 0 + and + maxindex. When indices are provided via the + ibm,get-indices call, the indices may not be + contiguous, and any of the indices between 0 and + maxindex may be missing. + The formats for location codes are defined in + . For indicators and sensors, + these location codes are for the location of the device being manipulated + or measured, not the location of the specific controller or sensor. The + location code for an abstracted indicator or sensor is a NULL + string. + +
+ Indicators + For static indicators, except DR indicators, OF provides for paired + integers ( + token maxindex) for each indicator token under the + property + “rtas-indicators” + in the + /rtas node. With this information, the OS can + determine which types of indicators, and the maximum number ( + maxindex) of each type, that the platform + provides. + For static indicators, except DR indicators, the extension + property, + <vendor>,indicator-<token> + (see ), provides an array of strings + containing the FRU location codes associated with each indicator. See + . Here, “ + <vendor>” corresponds to the + “<vendor>” column of + + + and “ + <token>” corresponds to the token of the + + “rtas-indicators” + type. + The index of a specific indicator token is used to index into the array + up to + maxindex. + Indices and location codes for dynamic indicators are obtained via + the + ibm,get-indices RTAS call and do not appear in the + static properties in the + /rtas node. + Indices for DR indicators 9001, 9002, and 9003 are obtained from + the DRC index for the DRC connector. See Requirement + . + + + + R1--1. + + For all static + indicators, except DR indicators 9001, 9002, and 9003, OF must provide + the extension property, + <vendor>,indicator-<token>, + in the + /rtas node, unless the indicator is part of an + extension which has its own set of appropriate properties for the + indicator, where “ + <vendor>” must be as defined in the + column labeled “<vendor>” in + for the specific indicator + token value. + + + + + R1--2. + + For all static indicators for which + there is an associated + <vendor>,indicator-<token> + property and for which there is not a + physical realization, the location code string must be NULL. + + + + + R1--3. + + Indices and location codes for any + indicator token, except DR indicators 9001, 9002, and 9003, for which the + number of such indicators in the platform may change dynamically, must be + obtained via the + ibm,get-indices RTAS call and the indicator token + must not appear in the + <vendor>,indicator-<token> + or “rtas-indicators” in the + /rtas node. + + + + + R1--4. + + The indicator token of 4 must not exist + in a platform when a Error Log (token 9006) is implemented. + + + + +
+ +
+ Sensors + For static sensors, except DR sensors, OF currently provides for + paired integers ( + token maxindex) for each sensor token under the + property + “rtas-sensors” + in the + /rtas node. With this information, the OS can + determine which types of sensors, and how many of each type, that the + platform provides. + For static sensors, except DR sensors, the extension property, + <vendor>,sensor-<token> + (see ), provides an array of strings + containing the FRU location codes associated with each sensor. See + . Here, “ + <vendor>” corresponds to the + “<vendor>” column of + + + and “ + <token>” corresponds to the token in the + + “rtas-sensors” property. The index of a + specific sensor is used to index into the array up to + maxindex. + Indices and location codes for dynamic sensors, except DR sensors, + are obtained via the + ibm,get-indices RTAS call and do not appear in the + static properties in the + /rtas node. + Indices for DR sensors 9003 are obtained from the DRC index for the + DRC connector. See Requirement + . + + + + R1--1. + + For all static + sensors, except DR sensor 9003, OF must provide the extension property, + <vendor>,sensor-<token>, in the + /rtas node, unless the sensor is part of an extension + which has its own set of appropriate properties for the sensor, where + “ + <vendor>” must be as defined in the + column labeled “<vendor>” in + for the specific sensor token + value. + + + + + R1--2. + + For all static sensors for which there + is an associated + <vendor>,sensor-<token> + property and for which there is not a + physical realization, the location code string must be NULL. + + + + + R1--3. + + Indices and location codes for any + sensor token, except DR sensor 9003, for which the number of such sensors + in the platform may change dynamically, must be obtained via the + ibm,get-indices RTAS call and the sensor token must + not appear in the + <vendor>,sensor-<token> + or “rtas-sensors” in the + /rtas node. + + + + + R1--4. + + The following sensor tokens must not be + implemented if the number of them may be changed by a DR operation (that + is, they can only be used when static): 3, 9001, and 9002. + + + + +
+ +
+ +
+ +
+ Calling Mechanism and Conventions + + RTAS is + called through a mechanism similar to the OF client interface service. An + argument buffer is constructed which describes the desired RTAS call. + This description includes an indication of the RTAS call that is being + invoked, the number and value of the input parameters, the number of + result values, and space for each of the result values. + + + + R1--1. + + In order to make an RTAS call, the OS must + construct an argument call buffer aligned on an eight byte boundary in + physically contiguous real memory as described by + . + + + RTAS Argument Call Buffer + + + + + + + + Cell Number + + + + + Use + + + + + + + + 1 + + + Token Specifying which RTAS Call + + + + + 2 + + + Number of Input Parameters + + + + + 3 + + + Number of Output Parameters + + + + + 4 + + + First Input Parameter + + + + + ... + + + + Other Input Parameters + + + + + 4 + Number of Inputs -1 + + + Last Input Parameter + + + + + 4 + Number of Inputs + + + First Output Parameter + + + + + ... + + + + Other Output Parameters + + + + + 4 + Number of Inputs + + Number of Outputs -1 + + + Last Output Parameter + + + + +
+
+
+ + + R1--2. + + If the system is + a 32-bit system, or if RTAS was instantiated by + instantiate-rtas, then all + cells in + the RTAS argument buffer must be 32-bit sign extended values that are + aligned to 4 byte boundaries. + + + + + R1--3. + + If the system is + a 64 bit system and if RTAS was instantiated by + instantiate-rtas-64, then all + cells in the RTAS argument buffer must be 64-bit sign extended values + that are aligned to 8 byte boundaries. + + + + + R1--4. + + RTAS functions must be invoked by branching + to the + rtas-call address which is returned by the + + instantiate-rtas + or + + instantiate-rtas-64 + OF method (see + ). + + + + + R1--5. + + Register R3 must contain the argument + buffer’s real address when + rtas-call is invoked. + + + + + R1--6. + + Register R4 must contain the real address + of the RTAS private data area when + rtas-call is invoked (see Requirement + ). + + + + + R1--7. + + The Link Register must contain the return + address when + rtas-call is invoked. + + +
+ + Software Implementation Notes: + + + + RTAS is not required to perform sanity checking of its input + parameters. Using invalid values for any parameter in an RTAS argument + buffer gives undefined results. However, when such checks are made, the + appropriate return code for invalid parameters is -3. + + + + The token that specifies the RTAS call is obtained by looking up + the desired call from the + /rtas node of the OF device tree. + + + + The OS must be aware that the effective address range for RTAS + is 4 GB when instantiated in 32-bit mode and the OS should not pass RTAS + addresses or blocks of data which might fall outside of this + range. + + + +
+ +
+ Return Codes + + + + R1--1. + + The first output + value of all the RTAS functions must be a + Status word which denotes the result of the call. The + + Status word takes on one of the values in + . Non-negative values indicate + success. + + + RTAS + <emphasis>Status</emphasis> Word Values + + + + + + + + Values + + + + + + Status Word Meanings + + + + + + + + 0 + + + RTAS function call succeeded. + + + + + -1 + + + RTAS function call encountered a hardware error. + + + + + -2 + + + A necessary hardware device was busy, and the requested + function could not be performed. The operation should be + retried at a later time. + + + + + -3 + + + Parameter Error. + In some cases, specific parameter errors are enumerated. + However, other parameter errors may be reported using this + return code in addition to those enumerated. + + + + + -7 + + + Unexpected state change. + + + + + 9000-9899 + + + Reserved for vendor specific success codes. + + + + + 990x + + + Extended delay - where x is a number in the range of + 0-5 + + + + + -9000 + + + Multi-level isolation error (see + ). + + + + + -9004 - (-9999) + + + Reserved for vendor specific error codes. + + + + + Additional Negative Numbers + + + An error was encountered. The meaning of this error is + specific to the RTAS function that was invoked. + + + + + Additional Positive Numbers + + + The function succeeded. The meaning of the + Status word is specific to the RTAS + function that was invoked. + + + + +
+
+
+
+ + + indicates a summation of all + possible + Status word values. A given RTAS function cannot + yield all of the possible + Status words. For the specific + Status words which apply to a specific RTAS function, + see the semantics for that function. + Software Implementation Notes: + + + + A return code of -2 or 990x may either mean that the operation + was initiated but not completed, or may mean that the operation was not + initiated at all. + + + + When the extended delay (990x) is returned, it is suggested that + software delay for 10 raised to the x milliseconds, where x is the last + digit of the 990x return code, before calling the function again. + + + +
+ + +
diff --git a/RTAS/ch_rtas_introduction.xml b/RTAS/ch_rtas_introduction.xml new file mode 100644 index 0000000..c93e06a --- /dev/null +++ b/RTAS/ch_rtas_introduction.xml @@ -0,0 +1,76 @@ + + + + + Introduction + + The Run-Time Abstraction Service (RTAS) functions are provided by + LoPAR platforms to insulate the OS from having to know about and + manipulate a number of key platform hardware functions which ordinarily + require platform-dependent code. The OS calls RTAS functions rather than + manipulating hardware registers directly, reducing the need for platform + tailoring by the OS. This method of abstracting access to these platform + functions also permits hardware designers considerable flexibility in + hardware implementation. Since RTAS is provided by the platform developer, + this approach places the responsibility for supporting the platform + hardware design with the platform developer, not the OS developer. This + permits a degree of independence between the schedules of hardware and + software and reduces the release and test requirements for the OS, since it + can be tested to conform to the RTAS interface and not to every specific + hardware implementation. See + + for a list of all RTAS calls, and + which ones are required based on which LoPAR options that are implemented + in the platform. + + In order for platforms to achieve this separation of OS code from + hardware implementation dependencies, RTAS defines an interface between the + platform and the OS that provides control of some of the common devices + found on all platforms. RTAS is a system programming interface that is + realized, on a specific platform, by an RTAS implementation. The RTAS + implementation provides the platform specific processing of the common + components. RTAS limits itself to the run-time control of non-I/O, + typically system board-resident, hardware features. Traditionally, features + such as these have been implemented differently on different platforms. The + different implementations have required much effort and platform-dependent + code in the OS. RTAS permits the OS to operate over a much wider range of + platforms without specialized code for each platform. + + In general, the OS should not access RTAS resources directly. It + should call RTAS to control the resource. + + OS drivers are necessary to provide device specific processing for + IOAs. + + The role of RTAS versus OF is very important to understand. OF and + RTAS are both platform-specific software, and both are tailored by the + platform developer to manipulate the specific platform hardware. However, + RTAS is intended to be present during the execution of the OS, and to be + called by the OS to access platform hardware features on behalf of the OS, + whereas OF need not be present when the OS is running. This frees + OF’s memory to be used by applications. RTAS is small enough to + painlessly coexist with the OS and applications. + + This document uses the term RTAS to refer both to the architected RTAS + interface and to an RTAS implementation. + + diff --git a/RTAS/pom.xml b/RTAS/pom.xml new file mode 100644 index 0000000..d9775dd --- /dev/null +++ b/RTAS/pom.xml @@ -0,0 +1,148 @@ + + + + + org.openpowerfoundation.docs + workgroup-pom + 1.0.0-SNAPSHOT + ../pom.xml + + 4.0.0 + + + LoPAR-RTAS + + jar + + + LoPAR-RTAS + + + + + 0 + + + + + + + + + org.openpowerfoundation.docs + + openpowerdocs-maven-plugin + + + + generate-webhelp + + generate-webhelp + + generate-sources + + + ${comments.enabled} + LoPAR-RTAS + 1 + UA-17511903-1 + + appendix toc,title + article/appendix nop + article toc,title + book toc,title,figure,table,example,equation + book/appendix nop + book/chapter nop + chapter toc,title + chapter/section nop + section toc + part toc,title + qandadiv toc + qandaset toc + reference toc,title + set toc,title + + + 1 + 3 + 1 + + + LoPAR_RTAS + + + LoPAR_RTAS + + + + workgroupSpecification + + + + + workgroupConfidential + + + + + draft + + + + + + + + + true + . + + + bk_main.xml + + + + + ${basedir}/../glossary/glossary-terms.xml + 1 + www.openpowerfoundation.org + + + + + + diff --git a/RTAS/sec_rtas_get_indices.xml b/RTAS/sec_rtas_get_indices.xml new file mode 100644 index 0000000..fdbe42c --- /dev/null +++ b/RTAS/sec_rtas_get_indices.xml @@ -0,0 +1,5952 @@ + + +
+ + <emphasis>ibm,get-indices</emphasis> Call + + The RTAS function + ibm,get-indices is used to obtain the indices and + location codes for a specified indicator or sensor token. It allows for + obtaining the list of indicators and sensors dynamically and therefore + assists in any Dynamic Reconfiguration operation that involves indicators + and sensors being added or deleted from the platform (unlike the + /rtas node + <vendor>,indicator-<token>, + <vendor>,sensor-<token>, + and “ibm,environmental-sensor” properties). + This call also allows discontiguous indices for a particular indicator or + sensor type (unlike the + “rtas-indicators”, + “rtas-sensors”, and + + “ibm,environmental-sensor” properties). + This RTAS call is not used for DR indicators (9001, 9002, and 9003) + or DR sensors (9003). See the following sections in the DR chapter for more + information: + and + . + It may require several calls to the + ibm,get-indices RTAS routine to get the entire list of + indicators or sensors of a particular type. Each call may specify a + different work area. + The OS may not interleave calls to + ibm,get-indices for different indicator or sensor + types. Other standard RTAS locking rules apply. + + + + R1--1. + + For all DR options: The RTAS function + ibm,get-indices must implement the argument call buffer + defined by + . + + + Argument Call Buffer + <emphasis>ibm,get-indices</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + ibm,get-indices + + + + + + Number Inputs + + + + 5 + + + + + + Number Outputs + + + + 2 + + + + + + Indicator or Sensor + + + + 0: indicator of given type + 1: sensor of given type + + + + + + Indicator Type + + + + Indicator or sensor type (for example, 9006, 9007) + + + + + + Work Area Address + + + + Address of work area + + + + + + Work Area Size + + + + Size of work area + + + + + + Starting Number + + + + Integer representing first indicator number to + return + + + + + Out + + + + Status + + + + -1: Hardware error + -3: Indicator type not supported + -4: Optional: Indicator list changed, start again + 0: Success + 1: More data available; call again + 990x:Extended Delay where x is a number 0-5 (see text + below) + + + + + + Next Starting Number + + + + Integer to use as the Starting Number parameter on the next + call, or 1 if no more calls are required + + + + +
+ When the 990x + Status is returned, it is suggested that software delay + for 10 raised to the x milliseconds (where x is the last digit of the 990x + return code), before calling + ibm,get-indices with the same Starting Number and + Indicator Type. However, software may issue the + ibm,get-indices call again either earlier or later than + this. +
+
+ + + R1--2. + + The OS must not interleave calls to + ibm,get-indices for different indicator or sensor + types. + + + + + R1--3. + + On the first call to get a particular + Indicator Type, the caller must provide a Starting + Number of 1 (32-bit integer) + + + + + R1--4. + + When + ibm,get-indices is called with a Starting Number of 1, + firmware must refresh any stale data in previously cached firmware buffers + for that indicator (for example, data made stale by a Dynamic + Reconfiguration operation). + + + + + R1--5. + + When calling + ibm,get-indices with a Starting Number of 1, a + previously returned + Next Starting Number value must be discarded. + + + + + R1--6. + + Optionally, if firmware detects a change in + the indicator list before the entire list is returned, the + ibm,get-indices call must return a -4 and the caller + must start again with a Starting Number of 1. + + + + + R1--7. + + The return data format in the work area for + all sensors and indicators must be as follows: + + + + Number Returned: 32-bit integer representing the number of + indicator indices returned on this call + + + + Sets of (32-bit integer index, 32-bit integer length of location + code including NULLs, location code string (NULL terminated and padded to + nearest 4 byte boundary)), one set per indicator or sensor, with the number + of sets indicated by the first integer in this work buffer + + + + + + + R1--8. + + If the + Status returned is 1 (more data available, call again), + then the caller must call + ibm,get-indices again with the + Starting Number parameter set to the Next Starting + Number integer from the previously returned buffer. + + + + + R1--9. + + The ibm,get-indices RTAS call must return the + Status value of -3 for the following conditions: + + + + Indicator type not supported + + + + No indicators of specified Indicator Type available to + caller + + + + + + + R1--10. + + If the ibm,get-indices RTAS call returns a + Status of anything other than 0 or 1 is returned, the + caller must consider that the contents of the work area is not + defined. + + + + + R1--11. + + The work area specified in the + ibm,get-indices RTAS call argument buffer must be + contiguous in logical real memory and must reside below 4GB. + + + + + R1--12. + + The ibm,get-indices RTAS call must only return the + indicator or sensor indices to which the caller has authorized access at + the time of the call. + + + + + R1--13. + + The ibm,get-indices RTAS call must make no assumptions + about the contents of the work area on the beginning of the call. + + + + + R1--14. + + When the platform supports the + ibm,get-indices RTAS call, the device tree must include + the + “ibm,get-indicator-indices-types” property + in the + /rtas node if the call is to be used for getting + indicator information and must include the + “ibm,get-sensor-indices-types” property in + the + /rtas node if the call is to be used for getting sensor + information. + + + + + R1--15. + + When an indicator token is provided in the + “ibm,get-indicator-indices-types” property, + it must not be included in the + <vendor>,indicator-<token> + property and must not be included in the + “rtas-indicators” property. + + + + + R1--16. + + When a sensor token is provided in the + “ibm,get-sensor-indices-types” property, it + must not be included in the + <vendor>,sensor-<token> + property and must not be included in the + “rtas-sensors” property. + + + + + R1--17. + + When an environmental sensor token is + provided in the + “ibm,get-sensor-indices-types” property, + users of data in the + “ibm,environmental-sensors” property for + that sensor token must not assume that the indices are contiguous for that + sensor token (that is, any of the indices between 0 and the maxindex, + inclusive, may be missing). + + + + + R1--18. + + When the value of + any index returned is 0xFFFFFFFF, the OS must use the + ibm,get-dynamic-sensor-state and + ibm,set-dynamic-indicator RTAS functions for this + sensor or indicator, using the location code to identify the sensor or + indicator. + + + + + R1--19. + + The OS must not call + get-sensor-state or + get-indicator with an index value of 0xFFFFFFFF. + + +
+ +
+ RTAS Call <emphasis>ibm,set-dynamic-indicator</emphasis> + + This RTAS call behaves as the RTAS + set-indicator call, except that the instance of the + indicator is identified by a location code instead of a index. + + + + R1--1. + + Platforms that + implement any indicators that are identified by location code instead of + index (see Requirement + ) must implement the + ibm,set-dynamic-indicator RTAS function. + + + + + R1--2. + + The RTAS function + ibm,set-dynamic-indicator must implement the argument + call buffer defined by + . + + + Argument Call Buffer + <emphasis>ibm,set-dynamic-indicator</emphasis> + + + + + + + + + Parameter Type + + + + + + Name + + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + ibm,set-dynamic-indicator + + + + + + Number Inputs + + + + 3 + + + + + + Number Outputs + + + + 1 + + + + + + Indicator + + + + Token defining the indicator + 9006: Error Log + 9007: Identify Indicator + + + + + + State + + + + Desired new state; see + . + + + + + + Location Code Address + + + + Real or Logical address of a location code string, in the + format defined by Requirement + + + + + + Out + + + + Status + + + + -1: Hardware error + -2: Busy, try again later + -3: No such indicator + 0: Success + 990x: Extended delay, where x is a number between 0 and + 5, as described below + + + + +
+ When 990x + Status is returned, it is suggested that software + delay for 10 raised to the power + x milliseconds (where + x is the last digit of the 990x return code), before + calling + ibm,set-dynamic-indicator with the same indicator + type and location code. However, software may call + ibm,set-dynamic-indicator again either earlier or + later than this. +
+
+ + + R1--3. + + The OS must not call + ibm,set-dynamic-indicator with a different indicator + until a non-busy return + Status has been received from the previous + ibm,set-dynamic-indicator call. + + + + + R1--4. + + The location code string referenced by the + Location Code Address argument in the + ibm,set-dynamic-indicator argument call buffer must + reside in contiguous in real memory below an address of 4GB. + + + + + R1--5. + + The input data + format in the work area must be as follows: + + + + 32-bit integer length of the location code string, including + NULL + + + + Location code string, NULL terminated, identifying the sensor to + be set. + + + + + + + R1--6. + + The platform must not modify the location + code string. + + + + + R1--7. + + The OS must only use this call for + indicators which have been provided by the + ibm,get-indices RTAS call with an index value of + 0xFFFFFFFF. + + + + + R1--8. + + Platforms must identify all indicators + except types 9006 and 9007 by index. + + + + + R1--9. + + The ibm,set-dynamic-indicator RTAS call must return A + Status of -3 for the following conditions: + + + + Indicator type not supported + + + + The specified location code does not identify a valid + indicator + + + + +
+ +
+ +
+ RTAS Call <emphasis>ibm,get-dynamic-sensor-state</emphasis> + This RTAS call behaves as the RTAS + get-sensor-state call, except that the instance of + the sensor is identified by a location code instead of a index. + + + + R1--1. + + Platforms that + implement any sensors that are identified by location code instead of + index (see Requirement + ) must implement the + ibm,get-dynamic-sensor-state RTAS function. + + + + + R1--2. + + The RTAS function + ibm,get-dynamic-sensor-state must implement the + argument call buffer defined by + . +   + + Argument Call Buffer + <emphasis>ibm,get-dynamic-sensor-state</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + ibm,get-dynamic-sensor-state + + + + +   + + + + Number Inputs + + + + 2 + + + + +   + + + + Number Outputs + + + + 2 + + + + +   + + + + Sensor + + + + Token defining the sensor + + + + +   + + + + Location Code Address + + + + Real or Logical address of a location code string, in the + format defined by Requirement + + + + + + Out + + + + Status + + + + -1: Hardware error + -2: Busy, try again later + -3: No such indicator + 0: Success + 990x: Extended delay, where x is a number between 0 and + 5, as described below + + + + +   + + + + State + + + + Current state of the sensor as defined in the + Defined Values column of + . + + + + +
+ When 990x + Status is returned, it is suggested that software + delay for 10 raised to the power + x milliseconds (where + x is the last digit of the 990x return code), before + calling + ibm,get-dynamic-sensor-state with the same indicator + type and location code. However, software may call + ibm,get-dynamic-sensor-state again either earlier or + later than this. +
+
+ + + R1--3. + + The OS must not call + ibm,get-dynamic-sensor-state with a different sensor + until a non-busy return + Status has been received from the previous + ibm,get-dynamic-sensor-state call. + + + + + R1--4. + + The work area must be contiguous in real + memory and must reside below 4GB. + + + + + R1--5. + + The input data + format in the work area must be as follows: + + + + 32-bit integer length of the location code string, including + NULL + + + + Location code string, NULL terminated, identifying the sensor to + be set. + + + + + + + R1--6. + + The platform must not modify the location + code string. + + + + + R1--7. + + The OS must only use this call with sensors + which have been provided by the + ibm,get-indices RTAS call with an index value of + 0xFFFFFFFF. + + + + + R1--8. + + The platform must use the + ibm,get-dynamic-sensor-state RTAS call only for + dynamic sensor types of 9004, 9006 and 9007. + + + + + R1--9. + + A Status of -3 must be returned for the following + conditions: + + + + Sensor type not supported + + + + The specified location code does not identify a valid + sensor + + + + +
+ +
+ +
+ RTAS Call <emphasis>ibm,get-vpd</emphasis> + This RTAS call allows for collection of VPD that changes after OS + boot time (after the initial reporting in the OF device tree). When this + call is implemented, there is no overlap between what is reported in the + device tree and what is reported with this RTAS call. Also, when this + RTAS call is implemented, all VPD, except PCI and I/O device VPD, which + is dynamically changed during OS run time is reported with this call and + not via the + “ibm,vpd” property in the OF device + tree. + + + + R1--1. + + For all Dynamic Reconfiguration options + except PCI Hot Plug, when the platform VPD can change dynamically due to + a Dynamic Reconfiguration operation, the platform must implement the + ibm,get-vpd RTAS call. + + + + + R1--2. + + The RTAS function + ibm,get-vpd must implement the argument call buffer + defined by + . + + + Argument Call Buffer + <emphasis>ibm,get-vpd</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + ibm,get-vpd + + + + + + Number Inputs + + + + 4 + + + + + + Number Outputs + + + + 3 + + + + + + Pointer to Location Code + + + + Real address of NULL-terminated string, contiguous in + real memory and below 4GB, which is the location code of the + FRU for which to obtain the VPD. When this parameter references + a NULL string the VPD for all location codes is + returned. + + + + + + Work Area Address + + + + Address of work area + + + + + + Work Area Size + + + + Size of work area + + + + + + Sequence Number + + + + Integer representing the sequence number of the call. + First call in sequence starts with 1, following calls (if + necessary) use the + Next Sequence Number returned from the + previous call. + + + + + Out + + + + Status + + + + -1: Hardware error + -3: Parameter error + -4: Optional: VPD changed, start again + 0: Success + 1: More data available; call again + 990x: Extended Delay where x is a number 0-5 (see text + below) + + + + + + Next Sequence Number + + + + Return this integer as the + Sequence Number parameter on the next call + to continue the sequence, or 1 if no more calls are + required + + + + + + Bytes Returned + + + + Integer representing the number of valid bytes returned + in the work area. + + + + +
+ When the 990x + Status is returned, it is suggested that software + delay for 10 raised to the x milliseconds (where x is the last digit of + the 990x return code), before calling + ibm,get-vpd with the same input parameters. However, + software may issue the + ibm,get-vpd call again either earlier or later than + this. +
+
+ + + R1--3. + + On the first call to + ibm,get-vpd for a particular VPD gathering operation, + the caller must provide a + Sequence Number of 1 (32-bit integer) + + + + + R1--4. + + Upon calling + ibm,get-vpd with a + Sequence Number of 1, a previously returned + Next Sequence Number must be discarded. This means + that multiple calls to + ibm,get-vpd cannot be interleaved by multiple + processors, and if processor “B” starts a new + ibm,get-vpd sequence while processor “A” + has a call sequence in process (that is, the function on processor + “A” has returned a + Status of 1, and the subsequent call has not yet been + made) then the call sequence on processor “A” is + abandoned. + + + + + R1--5. + + Optionally, if firmware detects a change in + the VPD being requested before the entire VPD is returned, the + ibm,get-vpd call must return a + Status of -4 and the caller must start again with a + Starting Number of 1. + + Implementation Note: The platform should not impede + forward progress by continuously returning a + Status of -4. + + + + + R1--6. + + The return data format in the work area + must be such that after returning all the data and concatenating all data + together in the order received, that the data is the same as is obtained + from the + “ibm,vpd” property of the OF device + tree. + + + + + R1--7. + + Each stanza of the returned data must + include the YL (location code) keyword. + + + + + R1--8. + + If the + ibm,get-vpd RTAS call is implemented, then the + platform must not provide the + “ibm,vpd” or + “ibm,loc-code” properties in the OF + device tree + root node. + + + + + R1--9. + + If the + ibm,get-vpd RTAS call is implemented, then any VPD + which may change after OS boot must be reported via the + ibm,get-vpd RTAS call. + + + + + R1--10. + + If the + Status returned is 1 (more data available, call + again), then the caller must call + ibm,get-vpd again with the + Sequence Number parameter set to the + Next Sequence Number integer from the previously + returned call. + + + + + R1--11. + + If a + Status of anything other than 0 or 1 is returned, the + contents of the work area is not defined. + + + + + R1--12. + + The work area must be contiguous in real + memory and must reside below 4GB. + + + + + R1--13. + + Firmware cannot count on the contents of + the work area at the beginning of any call to + ibm,get-vpd (regardless of the value of the + Sequence Number). + + + + + R1--14. + + The location code referenced by the + Pointer to Location Code parameter must reside in + contiguous real memory below an address of 4GB. + + + + + R1--15. + + If the + ibm,get-vpd RTAS call is implemented, then firmware + must supply the + “ibm,vpd-size” property in the + /rtas node, the value of which is a single cell, + encoded as with + encode-int, which is the estimated maximum size in + bytes of the VPD that is returned if the + Pointer to Location Code parameter to the + ibm,get-vpd RTAS function is NULL (that is, all + system VPD). This size should take in to account possible concurrent + addition of new platform elements after the partition is started. If + firmware is unable to estimate this size, it may return a value of 0x0 to + indicate that no estimate is available. + + Software Implementation Notes: + + + + + An OS should be prepared for older versions of firmware where + the + “ibm,vpd-size” property is not + provided. + + + + Each stanza of the returned data must include the YL (location + code) keyword. + + + + +
+ +
+ +
+ Managing Storage Preservation + + Platforms may optionally preserve selected regions of storage + (LMBs) across client program boot cycles. + for more information. + + + + R1--1. + + For the Storage Preservation option: The platform + must implement the + ibm,manage-storage-preservation RTAS argument call + buffer as defined by + . + + + <emphasis>ibm,manage-storage-preservation</emphasis> Argument Call + Buffer + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + ibm,manage-storage-preservation + + + + + + Number Inputs + + + + 3 + + + + + + Number Outputs + + + + 2 + + + + + + Subfunction + + + + 0 = unused (return -3) + 1 = Register specified LMB for preservation + 2 = Query preservation state of specified LMB + 3 = Deregister for preservation Specific LMB + 4 = Deregister for preservation all caller’s + LMBs. + All other values reserved (return -3) + + + + + + Reg High + + + + The high order 32 bits of the LMB's + “reg” property (Subfunctions + 1-3) + + + + + + Reg Low + + + + The low order 32 bits of the LMB's + “reg” property (Subfunctions + 1-3) + + + + + Out + + + + Status + + + + -1: Hardware error + -2: Busy + -3: Parameter error (Subfunction or Reg invalid; or Reg + for a non-preservable LMB) + 0: Success + 990x: Extended delay where x is a number 0-5 + + + + + + Preservation state + + + + If + Status= Success, the current preservation + state of specified LMB (Subfunctions 1-3) + + + + +
+
+
+ + + R1--2. + + For the Storage Preservation option: The platform + must include the + “ibm,preservable” property in the + /memory nodes of its OF device tree, containing a + value which reflects the platform's ability to preserve the specific + LMB. + + + + + R1--3. + + For the Storage Preservation option: The value of the + “ibm,preservable” property for the first + LMB must be 0 (cannot be preserved). + + + + + R1--4. + + For the Storage Preservation option: The platform + must not preserve the first LMB, thus must indicate a value of 0 for the + “ibm,preservable” property for the first + LMB. + + + + + R1--5. + + For the Storage Preservation option: The platform + must include the + “ibm,preserved” property in the + /memory nodes of its OF device tree, valued to + reflect the platform's preservation state of the specific LMB. + + + + + R1--6. + + For the Storage Preservation option: The platform, on + a reboot, must include in the OF + /rtas node the + “ibm,preserved-storage” property if the + previous client program registered one or more of its LMBs for + preservation. + + + + + R1--7. + + For the Storage Preservation option: If the client + program registered an LMB for preservation, the platform must preserve + the LMB's storage state across client program reboots. + + + + + R1--8. + + For the Storage Preservation option: The platform, on + a reboot, must include in the OF + /rtas node the + “ibm,request-partition-shutdown” property + which reflects the value of the partition shutdown configuration + variable, and if this property is not present, a value of 0 must be + assumed by the OS. + + +
+ +
+ +
+ <emphasis>ibm,lpar-perftools</emphasis> RTAS Call + + This RTAS call provides access to platform-level facilities for + performance tools running in a partition on an LPAR system. Platforms may + require platform-specific tools, beyond the scope of this architecture, + to make this call available. + + + + R1--1. + + For the Performance Tool Support option: The platform + must implement the LPAR option. + + + + + R1--2. + + For the Performance Tool Support option: RTAS must + implement the + ibm,lpar-perftools call using the argument call + buffer defined by + . + + + Argument Call Buffer + <emphasis>ibm,lpar-perftools</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + ibm,lpar-perftools + + + + + + Number Inputs + + + + 5 + + + + + + Number Outputs + + + + 2 + + + + + + Subfunction + + + + 1: Convert hypervisor IAR value to method name. + + + + + + Work Area Address High + + + + Most significant 32 bits of real address of work + area + + + + + + Work Area Address Low + + + + Least significant 32 bits of real address of work + area + + + + + + Work Area Size + + + + Size of work area in bytes + + + + + + Sequence Number + + + + Integer representing the sequence number of this call. + First call in sequence starts with 1, following calls (if + necessary) use the + Next Sequence Number returned from the + previous call. + + + + + Out + + + + Status + + + + -1: Hardware Error + -2: Busy + -3: Parameter Error (Subfunction invalid, invalid work + area address, invalid work area size) + -9002: Partition does not have authority to perform this + function + -5: Buffer was too small to supply requested data + 0: Success + 990x: Extended delay + + + + + + Next Sequence Number + + + + Return this integer as the + Sequence Number parameter on the next call, + or 1 if no more calls are required. + + + + +
+ When 990x + Status is returned, it is suggested that software + delay for 10 raised to the x milliseconds (where x is the last digit of + the 990x return code), before calling the + ibm,lpar-perftools call with the same input + parameters. However, software may issue the + ibm,lpar-perftools call again earlier or later than + this. +
+
+ + + R1--3. + + For the Performance Tool Support option: For + subfunction value 1, on input the first 8 bytes of + the work area must contain the hypervisor IAR address to be converted. On + output, the first 8 bytes of the work area contain the offset of this + address from the start of the hypervisor function, method or module, + followed by a NULL-terminated text string containing the name of the + hypervisor function, method or module. If the address is not a valid + address in the hypervisor, on output the buffer must contain 0x0 (8 + bytes) followed by a NULL-terminated text string indicating that the + address was not valid. + + + + + R1--4. + + For the Performance Tool support option: The work + area must reside in contiguous memory. + + + + + R1--5. + + For the Performance Tool Support option: If a + Status of anything other than 0 is returned, the + contents of the work area are not defined. + + + + + R1--6. + + For the Performance Tool Support option: A partition + must have at most one call to this function in process at a given time. + This means that if one processor in the partition initiates this call, + receives a Busy or Extended Delay return, and then another processor + calls this function with a sequence number of 1, a subsequent call using + the + Next Sequence Number returned to the first processor + results in a Parameter Error return code. + + +
+ +
+ +
+ RTAS Call <emphasis>ibm,suspend-me</emphasis> + The + ibm,suspend-me RTAS call provides the calling OS the + ability to suspend processing. Suspension of processing is required as + part of OS hibernation or migration to another platform. This RTAS call + is made by the last active processor thread of a partition. The OS uses + the H_JOIN hcall() (see + ) to deactivate other + processing threads. Processing treads may exit H_JOIN due to an + unmaskable interrupt; if a thread has exited H_JOIN, + ibm,suspend-me fails with a status of “multiple + processor threads active”. The wake up from suspension is triggered + by partition state change (see + sections on "Partition Migration" + and "Partition Hibernation"). The + ibm,suspend-me RTAS call returns only on the calling + virtual processor. Other virtual processors that were inactive when + ibm,suspend-me was called remain so until they are + proded by the OS. + While the logical configuration of a suspended partition remains + static, the physical properties may change; the OS may wish to issue + ibm,update-nodes (see + + ) to determine if any device + tree nodes changed, and then refresh its view of the device + tree physical properties using + ibm,update-properties (see + ) and/or + ibm,configure-connector (see + ). Also during suspension, some + system parameters may have changed. See + , for details. The OS may want + to re-scan selected system parameters. + + + + R1--1. + + For the Partition Suspension option: The platform + must implement the Logical Partitioning option (see + ) + . + + + + + R1--2. + + For the Partition Suspension option: RTAS must + implement the + ibm,suspend-me call within a logical partition using + the argument call buffer defined by + . + + + Argument Call Buffer + <emphasis>ibm,suspend-me</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + ibm,suspend-me + + + + + + Number Inputs + + + + 0 + + + + + + Number Outputs + + + + 1 + + + + + Out + + + + Status + + + + 9000: Suspension Aborted + 0: Success -- expected return on function resume + -1: Hardware Error +   + -9004: Partition not suspendable + -9005: Multiple processor threads active + -9006: Outstanding COP Operations + + + + +
+
+
+ + + R1--3. + + For the Partition Suspension option: The + ibm,suspend-me RTAS call must determine that the + calling partition is in the “suspendable state”, else return + a status of -9004 “Partition not suspendable”. + + + + + R1--4. + + For the Partition Suspension option: The + ibm,suspend-me RTAS call must determine that the + calling partition has no other active processor thread, else return a + status of -9005 “Multiple processor threads active”. + + + + + R1--5. + + For the Partition Suspension option: The platform + must implement the Thread Join option (see + ). + + + + + R1--6. + + For the Partition Suspension option: The platform + must restore all partition state as of the time of the call to + ibm,suspend-me prior to returning from the + ibm,suspend-me RTAS call, except for the values of + those Open Firmware Device tree properties as reported using the Update + OF Tree option, and the system parameters given in + . + + + + + R1--7. + + For the Partition Suspension option: The platform + must be prepared to respond to OS requests for updated device tree + information immediately after returning from the + ibm,suspend-me RTAS call. + + + + + R1--8. + + For the Partition Suspension option: The platform + must support the “update OF tree” option. + + + + + R1--9. + + For the Partition Suspension option: The platform + must support the “Partner partition suspended” CRQ Transport + Event (See + ). + + + + + R1--10. + + For the Partition Suspension option: The + ibm,suspend-me RTAS call must cause the platform to + deliver “Partner partition suspended” CRQ Transport Events to + both CRQs of all CRQ connections associated with the partition calling + ibm,suspend-me. + Note: The transport events are visible to the partition calling + ibm,suspend-me after the subsequent resume from + suspension, while the transport events are immediately visible to the + partner partitions of the caller at the time of the suspend. + + + + + R1--11. + + For the Partition Suspension option: The + ibm,suspend-me RTAS call must cause the platform to + set the state of all of the caller’s CRQs to disabled. + + + + + R1--12. + + For the Partition Suspension option: The platform + must implement the H_ENABLE_CRQ hcall() using the syntax and semantics + described in + . + + + + + R1--13. + + For platforms that implement the Partition Suspension and VSCSI + options: The + “compatible” property of the + platform’s + v-scsi and + v-scsi-host nodes must include + “IBM,v-scsi-2” and + “IBM,v-scsi-host-2” respectively + indicating the platform supports the “Partner partition + suspended” CRQ Transport Event. + + + + + R1--14. + + For the Partition Suspension option: If the OS is + participating in OS surveillance, to avoid a surveillance time out, the + OS must disable surveillance (see + ) prior to calling + ibm,suspend-me. + + + + + R1--15. + + For the Partition Suspension option: The platform + must implement the LRDR option (See + ). + + + + + R1--16. + + For the Partition Suspension option: The logical + configuration of a partition, including its view of the + rtas-display-device, and rtas tone facility must not + change while a partition is suspended. + + + + + R1--17. + + For the Partition Suspension option: The platform + must not change the support for a system parameter during + suspension. + + NOTE: If RTAS returns a status of -3 (System + parameter not supported) prior to suspension, it returns a Status of -3 + for accesses to that same system parameter after suspension. Similarly if + RTAS does not return a Status of -3 prior to suspension for a given + system parameter, it does not do so after suspension. + + + + + R1--18. + + For the Partition Suspension option: The platform + must limit the system parameters that change values during suspension to + those specified in + (all system parameters not + specified are preserved). + + + + + R1--19. + + For the Partition Suspension option: The platform + must preserve up to the first 32 SLB entries for each partition processor + during the suspension. Other SLB entries are subject to loss. + + + + + R1--20. + + For the Partition Suspension option with the Platform + Facilities Option: The + ibm,suspend-me RTAS call must determine that the + calling partition has no outstanding coprocessor operations else return a + status of -9005 “Outstanding COP Operations”. + + + System Parameters that May Change During Partition + Migration and Hibernation + + + + + + + + + System Parameter Token + + + + + Name + + + + +   + + + + + + + + 0-15 + + + HMC + + +   + + + + + 18-19 + + + Legacy processor CoD + + +   + + + + + 20 +   + + + SPLPAR characteristics + + + Only specified SPLPAR keywords may change value + + + + +   + + + DesiredEntitledCapacity + + +   + + + + + DesiredMemory + + +   + + + + + DesiredNumberOfProcessors + + +   + + + + + DesiredVariableCapacityWeight + + +   + + + + + DispatchWheelRotationPeriod + + +   + + + + + MinimumEntitledCapacityPerVP + + + Platform prevents migration where current Entitled + Capacity/VCPU ratio would be below the target's minimum. + + + + + MaximumPlatformProcessors + + +   + + + + + 22 + + + platform_auto_power_restart + + +   + + + + + 23 + + + sp-remote-pon + + +   + + + + + 24 + + + sp-rb4-pon + + +   + + + + + 25 + + + sp-snoop-str + + +   + + + + + 30 + + + sp-call-home + + +   + + + + + 31 + + + sp-current-flash-image + + +   + + + + + 33 + + + epow3-quiesce-time + + +   + + + + + 34 + + + memory-preservation-boot-time + + +   + + + + + 35 + + + SCSI initiator identifier + + +   + + + + + 36 + + + AIX support + + + The keyword “support” may not change to the + value “no” for an AIX client. + + + + + 37 + + + enhanced processor CoD + + +   + + + + + 38 + + + enhanced memory CoD + + +   + + + + + 39 + + + CoD Options + + +   + + + + + 41 + + + firmware boot options + + +   + + + + + 43 + + + processor module information + + +   + + + + +
+
+
+
+ +
+ +
+ RTAS Call <emphasis>ibm,update-nodes</emphasis> + + This RTAS call is used to determine which device tree nodes have + changed due to a massive platform reconfiguration such as when the + partition is migrated between machines. Differing platform + reconfigurations are expected to potentially result in different sets of + nodes being updated; the “scope” argument communicates what + set of changes are to be reported. The work area is a 4 KB naturally + aligned area of storage below the first 4 GB; as such, it may not be + large enough to contain the reports of all changed nodes. The status + value of 1 is used to inform the caller that there are more updates to + report and that it will have to call the + ibm,update-nodes RTAS again to receive them. On + subsequent calls the state variable, which is set to zero on the first + call, is set to the value returned on the previous call, to supply RTAS + with the information it needs to continue from where the previous call + ended. + Upon return, the work area contains, in addition to the state + variable, zero or more operation lists, and logically ends with a + terminator (4 byte word naturally aligned containing 0x00000000). An + operation list consists of an operator (4 bytes naturally aligned) and + zero or more (up to a the maximum number of 4 byte locations remaining in + the work area) operands, each 4 bytes long. An operator consists of a + single byte opcode followed by 3 bytes encoded with the binary value of + the number of operands that follow. An operator with an operand length + field of zero performs no operation, and the opcode of zero is reserved + for the terminator -- thus the terminator can be considered a special + encoding of a no-op operator. + + + + The opcode of 0x01 is used for deleted nodes -- the operands are + the + phandle values for the deleted nodes. + + + + The opcode of 0x02 is used for updated nodes -- the operands are + the + phandle values for the updated nodes. The updated + properties are obtained using the + ibm,update-properties RTAS call. + + + + The opcode of 0x03 is used for adding nodes -- the operands are + pairs of + phandle and + ibm,drc-index values; the + phandle value denotes the parent node of the node to + be added and the + ibm,drc-index value is passed with the + ibm,configure-connector RTAS call to obtain the + contents of the added node. + + + + To make processing of device tree updates simpler, all opcode 0x01 + (delete) operations (if any) are presented prior to all opcode 0x02 + (update) operations (if any), and finally any 0x03 (addition) operations + are presented. The + phandle operand values are the same + phandle values as reported by the + “ibm,phandle” property. + + + + R1--1. + + For the Update OF Tree option: The platform must + include the + “ibm,phandle” property in all OF nodes + specified in + . + + + + + R1--2. + + For the Update OF Tree option: The platform must + implement the + ibm,update-nodes RTAS call using the argument call + buffer defined by + . + + + Argument Call Buffer + <emphasis>ibm,update-nodes</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + ibm,update-nodes + + + + + + Number Inputs + + + + 2 + + + + + + Number Outputs + + + + 1 + + + + + + Work Area Address + + + + 32 bit real address of work area + + + + + + Scope + + + + Values per + . + + + + + Out + + + + Status + + + + -1: Hardware Error + -2: Busy + -3: Parameter Error (Purpose does not match the current + partition state) + 0: Success + 1: More nodes updated -- call again + + + + +
+
+
+ + + R1--3. + + ibm,update-nodes RTAS call work area must be 4 KB + long aligned on a 4 KB boundary that is accessible with MSR[DR] = 0, else + RTAS may return -3 “Parameter Error”. + + + + + R1--4. + + ibm,update-nodes RTAS for a given value of “ + Scope” must be formatted as specified in + , else RTAS may return -3 + “Parameter Error”. + + + Initial Format of Work Area for + <emphasis>ibm,update-nodes</emphasis> + + + + + + 0x00000000 (State Variable indicates Initial call for + specified + Scope) + + + + + + + 12 bytes of 0x00 (reserved) + + + + + Don’t Care . . . + + + + +
+
+
+ + + R1--5. + + Upon successful return (non-negative status + value) from + ibm,update-nodes the work area must by formatted as + defined in + . (Note each entry in + is 4 bytes long.) + + + Format of Work Area for + <emphasis>ibm,update-nodes</emphasis> + + + + + + State Variable (4 Bytes) + + + + + 12 bytes of 0x00 (reserved) + + + + + 0 or more operation lists + + + + + . . . + + + + + Terminator (0x00000000) + + + + +
+
+
+ + + R1--6. + + ibm,update-nodes RTAS call operation list for the + ibm,update-nodes RTAS call must contain an operator + (4 bytes naturally aligned) and zero or more 4 byte operands up to the + end of the work area. + + + + + R1--7. + + An operator in an + ibm,update-nodes RTAS call operation list must be + formatted with, starting at the high order byte, a single byte opcode + followed by 3 bytes encoded with the binary value of the number of + operands that follow. + + + + + R1--8. + + An operator in an + ibm,update-nodes RTAS call operation list with an + operand length field of zero must be considered to perform no + operation. + + + + + R1--9. + + The opcode of 0x01 in an + ibm,update-nodes RTAS call operation list must be + used to denote node deletions. + + + + + R1--10. + + The operands for opcode 0x01 in an + ibm,update-nodes RTAS call operation list must be the + + phandle values for the deleted nodes. + + + + + R1--11. + + The opcode of 0x02 in an + ibm,update-nodes RTAS call operation list must be + used to denote updated nodes. + + + + + R1--12. + + The operands for opcode 0x02 in an + ibm,update-nodes RTAS call operation list must be the + phandle values for the updated nodes that may be used + as the + ibm,update-properties RTAS call argument to obtain + the changed properties of the updated node. + + + + + R1--13. + + The opcode of 0x03 in an + ibm,update-nodes RTAS call operation list must used + for the added nodes. + + + + + R1--14. + + The operands for opcode of 0x03 in an + ibm,update-nodes RTAS call operation list must be + phandle and + ibm,drc-index value pairs (each value being 4 bytes + on a natural boundary totalling 8 bytes for the pair) denoting the parent + node of the added node and the + ibm,configure-connector RTAS call argument to obtain + the contents of the added node respectively. + + + + + R1--15. + + All opcode 0x01 (delete) in an + ibm,update-nodes RTAS call operation list (if any) + must be presented prior to any opcode 0x02 (update) operations (if + any). + + + + + R1--16. + + All opcode 0x02 (update) in an + ibm,update-nodes RTAS call operation list (if any) + must be presented prior to any opcode 0x03 (add) operations (if + any). + + + + + R1--17. + + The work area on subsequent call(s) to + ibm,update-nodes RTAS for the same value of the + “Scope” must be formatted as specified in + , else RTAS may return -3 + “Parameter Error”. + + + Format of Work Area for Subsequent Calls to + <emphasis>ibm,update-nodes</emphasis> + + + + + + Value of the 1st 16 bytes of the returned work area from + last call to + ibm,update-nodes RTAS that returned status + of 1. + + + + + + + Don’t Care . . . + + + + +
+
+
+ + + R1--18. + + The “Scope” argument for the + ibm,update-nodes RTAS call must be one of the values + specified in the scope value column of + , else RTAS may return -3 + “Parameter Error”. + + + + + R1--19. + + For the + ibm,update-nodes RTAS call, the platform must + restrict its reported node updates to those specified in + for the value of the specified + “Scope” argument. + + + Nodes That May be Reported by + <emphasis>ibm,update-nodes</emphasis> for a Given Value of the “ + <emphasis>Scope</emphasis>” Argument + + + + + + + + Scope Value + + + Reportable node types (value of + “name” or + “device_type” property) + + + Supported Opcodes + + + + + + + Negative values: Platform Resource Reassignment events as + from + event-scan RTAS + + + cpu + + + 0x02 + + + + + memory + + + 0x02 + + + + + ibm,dynamic-reconfiguration-memory + + + 0x02 + + + + + + ibm,plaform-facilities + + + + 0x01-0x03 + + + + + + ibm,random-v# + + + + 0x01-0x03 + + + + + + ibm,compression-v# + + + + 0x01-0x03 + + + + + + ibm,encryption-v# + + + + 0x01-0x03 + + + + + 1 Partition Migration / Hibernation + + + + root + + + + 0x02 + + + + + + openprom + + + + 0x02 + + + + + + rtas + + + + 0x02 + + + + + + vdevice + + + + 0x02 + + + + + + cpu + + + + 0x02 + + + + + + cache + + + + 0x01-0x03 + + + + + + options + + + + 0x02 + + + + + + memory + + + + 0x02 + + + + + ibm,dynamic-reconfiguration-memory + + + <all> + + + + + ibm,platform-facilities + + + 0x01-0x03 + + + + + + ibm,random-v# + + + + 0x01-0x03 + + + + + + ibm,compression-v# + + + + 0x01-0x03 + + + + + + ibm,encryption-v# + + + + 0x01-0x03 + + + + + 2 Activate Firmware + + + + rtas + + + + 0x02 + + + + +
+
+
+
+ +
+ +
+ TAS Call <emphasis>ibm,update-properties</emphasis> + + This RTAS call is used to report updates to the properties changed + due to a massive platform reconfiguration such as when the partition is + migrated between machines. This RTAS call reports changes in the node + specified by the phandle value in the work area passed using the Work + Area Address argument. The phandle value may be that of a critical node + that the caller is interested in or one reported by + ibm,update-nodes RTAS call. These changes may include + any combination of new values, deleted and added properties. Updates for + a given node are retained until the platform is subsequently + reconfigured, and remain available to subsequent calls to + ibm,update-nodes. + There may be more changes than can be reported in a single 4 K work + area. In this case, the RTAS call returns with a status of 1 “More + properties updated -- call again”. On the first call, the second + word of the work area contains the value 0 specifying that the RTAS call + is to start with the first changed property for the specified updated + node. On a call with a status value of 1, the first sixteen (16) bytes of + the work area contain values that, when subsequently supplied in the work + area of another call to + ibm,update-properties RTAS, specify that the call + returns the updated property data for properties after those reported in + the previous call. + A single updated property value string may exceed the capacity of a + single 4 K work area. In that case, the updated property value descriptor + for the property appears in the work area of multiple sequential calls to + + ibm,update-properties RTAS. When the updated property + value descriptor contains the final data for the property value, the + property string length field of the updated property value descriptor is + a positive number. When the updated property value descriptor contains + either the initial or interim data for the property value, the updated + property string length field is a negative number denoting the twos + complement of the length of the updated property string contained in the + work area. The data value strings for a given property name are + concatenated until the final updated property value descriptor is + processed. + The first value returned, with an updated property name string of + NULL, is always the node’s name (for example: full path || + name property value || @ unit address) even if there + has been no change. + + + + R1--1. + + For the Update OF Tree option: The platform must + implement the + ibm,update-properties RTAS call using the argument + call buffer defined by + . + + + Argument Call Buffer + <emphasis>ibm,update-properties</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + ibm,update-properties + + + + + + Number Inputs + + + + 2 + + + + + + Number Outputs + + + + 1 + + + + + + Work Area Address + + + + 32 bit real address of work area + + + + + + Scope + + + + Values per + . + + + + + Out + + + + Status + + + + -1: Hardware Error + -2: Busy + -3: Parameter Error (Purpose does not match the current + partition state) + 0: Success + 1: More properties updated -- call again + + + + +
+
+
+ + + R1--2. + + ibm,update-properties RTAS call must be 4 KB long + aligned on a 4 KB boundary that is accessible with MSR[DR] = 0, else RTAS + may return -3 “Parameter Error”. + + + + + R1--3. + + The work area on the first call to + ibm,update-properties RTAS for a given updated node + must be formatted as specified in + , else RTAS may return -3 + “Parameter Error”. + + + Initial Format of Work Area for + <emphasis>ibm,update-properties</emphasis> + + + + + + + phandle of updated node containing updated + properties to be reported (4 bytes) + + + + + + + 0x00000000 (Indicates Initial call for specified + phandle) + + + + + 8 bytes of 0x00 (reserved) + + + + + Don’t Care . . . + + + + +
+
+
+ + + R1--4. + + Upon successful return (non-negative status + value) from + ibm,update-properties the work area must by formatted + as defined in + . + + + Return Format of Work Area for + <emphasis>ibm,update-properties</emphasis> + + + + + + + + Description + + + + Comments + + + + + + + + phandle of updated node containing updated + properties to be reported. + + + 4 Bytes + + + + + State Variable + (to be returned if status argument value = 1) + + + 4 Bytes + + + + + Reserved + + + 8 bytes + + + + + Number of properties reported in the work area + + + 4 Bytes + The number (N) of updated property value descriptors that + follow -- see below + + + + + N updated property value descriptors + + + Each updated property value descriptor is formatted + as: +   + Null terminated string indicating the name of the updated + property. + followed by: + Value Descriptor -- 4 Bytes decoded as +   + 0x00000000 Name only property ( + “encode-null”) no value + follows +   + 0x80000000 The property is to be deleted no value + follows +   + Other positive values are the length (M) of the + immediately following property value string that completes the + update of the property value. +   + Other negative values are the twos complement of the + length (M) of the immediately following property value string + that either starts or continues the update of the property + value with the remainder in the work area of subsequent call(s) + to + ibm,update-properties. +   + Followed by: + 0-M bytes of property value string. + + + + +
+
+
+ + + R1--5. + + Upon successful return (non-negative status + value) from + ibm,update-properties when the State Variable had + been 0x00000000, the first updated property descriptor must describe the + fully qualified path name of the node specified by the phandle argument + in the work buffer; the three fields of this updated property descriptor + are: + + + + Property name string is as from + encode-null + + + + Value descriptor is the 4 byte binary length of the value + string + + + + Value string is the fully qualified path name as from the node + name string returned by the open firmware + package-to-path client interface call. + + + + + + + R1--6. + + The work area on subsequent call(s) to + ibm,update-properties RTAS for a given updated node + must be formatted as specified in + , else RTAS may return -3 + “Parameter Error”. + + + Format of Work Area for Subsequent Calls to + <emphasis>ibm,update-properties</emphasis> + + + + + + + phandle of updated node containing updated + properties to be reported (4 Bytes) + + + + + + + Value from last call to + ibm,update-properties RTAS that returned + status of 1 (12 bytes). + + + + + Don’t Care . . . + + + + +
+
+
+ + + R1--7. + + ibm,update-properties RTAS call, the platform must + restrict its reported property updates to those specified in + for the value of the specified + “Scope” argument. + + + + + R1--8. + + For the + ibm,update-properties RTAS call, the platform must + return a + Status of -3 (Parameter Error) for an unrecognized + value of the “Scope” argument. + + + Properties of the Nodes That May Be Reported by + <emphasis>ibm,update-properties</emphasis> for a “ + <emphasis>Scope</emphasis>” + + + + + + + + Scope Value + + + Reportable node types (value of + “name” or + “device_type” property) + + + Property Name + + + + + + + All negative values: Resource Reassignment events as from + event-scan RTAS + + + /memory + + + “ibm,associativity” + + + + + ibm,dynamic-reconfiguration-memory + + + “ibm,dynamic-memory” + + + + + cpu + + + “ibm,associativity” + + + + + + ibm,random-v# + + + + <all> + + + + + + ibm,compression-v# + + + + <all> + + + + + + ibm,encryption-v# + + + + <all> + + + + + 1 Partition Migration / Hibernation + + + + root + + + + + “ibm,model-class” + + + + + + + “clock-frequency” + + + + + + + + “ibm,extended-clock-frequency” + + + + + + + “model” + + + + + + + “compatible” + + + + + + + “name” + + + + + + + “system-id” + + + + + + + “ibm,partition-no” + + + + + + + “ibm,drc-indexes” + + + + + + + “ibm,drc-names” + + + + + + + “ibm,drc-power-domains” + + + + + + + “ibm,drc-types” + + + + + + + “ibm,aix-diagnostics” + + + + + + + “ibm,diagnostic-lic” + + + + + + + + “ibm,platform-hardware-notification” + + + + + + + + “ibm,ignore-hp-po-fails-for-dlpar” + + + + + + + “ibm,managed-address-types” + + + + + + + “ibm,service-indicator-mode” + + + + + + + openprom + + + + + “model” + + + + + + + rtas + + + + + “power-on-max-latency” + + + + + + + + “ibm,associativity-reference-points” + + + + + + + + “ibm,max-associativity-domains” + + + + + + + “ibm,configure-kernel-dump” + + + + + + + + “ibm,configure-kernel-dump-sizes” + + + + + + + + “ibm,configure-kernel-dump-version” + + + + + + + + “ibm,read-slot-reset-state-functions” + + + + + + + “ibm,configure-pe” + + + + + + + “ibm,change-msix-capable” + + + + + + + vdevice + + + + + “ibm,drc-names” + + + + + + children of the + vdevice node + + + + “ibm,loc-code” + + + + + + 1 Partition Migration / Hibernation +   + + + + cpu + + + + + “name” + + + + + + + “d-cache-sets” + + + + + + + “d-cache-size” + + + + + + + “i-cache-sets” + + + + + + + “i-cache-size” + + + + + + + “bus-frequency” + + + + + + + “ibm,extended-bus-frequency” + + + + + + + + “ibm,extended-clock-frequency” + + + + + + + “clock-frequency” + + + + + + + “timebase-frequency” + + + + + + + “l2-cache” + + + + + + + “performance-monitor” + + + + + + + “ibm,associativity” + + + + + + TLB properties (See + ) + + + + + + “slb-size” + + + + + + + “ibm,tbu40-offset” + + + + + + + “ibm,pi-features” + + + + + + + “ibm,spurr” + + + + + + + “ibm,pa-optimizations” + + + + + + + “ibm,dfp” (sign bit + only) + + + + + + "ibm,sub-processors" + + + + + + + cache + + + + + “d-cache-sets” + + + + + + + “d-cache-size” + + + + + + + “i-cache-sets” + + + + + + + “i-cache-size” + + + + + + + l2-cache + + + + + + + options + + + + + “ibm,dasd-spin-interval” + + + + + + + memory + + + + + “ibm,associativity” + + + + + + + ibm,dynamic-reconfiguration-memory + + + + “ibm,associativity-lookup-arrays” + + + + + “ibm,dynamic-memory” + only the associativity list index fields + + + + + “ibm,memory-preservation-time” + + + + + + /chosen + + + + + “ibm,architecture-vec-5” + + byte 3 (I/O Super Page Option support parameters) + + + + + 1 Partition Migration / Hibernation +   + + + + ibm,random-v# + + + + <all> + + + + + + ibm,compression-v# + + + + <all> + + + + + + ibm,encryption-v# + + + + <all> + + + + + 2 Activate Firmware + + + + rtas + + + + + + Any + /rtas node property as defined per LoPAR + remains invariant. + + + + Any + /rtas node property or definition + extension, except for the value of a function token property*, + may change (provided that the client program has indicated + support for such property or definition extension) including + the following: + + “ibm,read-slot-reset-state-functions” + “ibm,configure-pe” + + + + *NOTE: This exception mandates that if an RTAS function + token property survives a firmware activation, the token value + of that RTAS function call does not change. + + + + +
+
+
+
+ + +
+ +
+ RTAS call <emphasis>ibm,configure-kernel-dump</emphasis> + + This RTAS call is used to register and unregister with the platform + a data structure describing kernel dump information. This dump + information is preserved as needed by the platform in support of a + platform assisted kernel dump option. + + + + R1--1. + + For the Configure Platform Assisted Kernel Dump + option: The platform must implement the + ibm,configure-kernel-dump RTAS call using the + argument call buffer defined by + . + + + Argument Call Buffer + <emphasis>ibm,configure-kernel-dump</emphasis> + + + + + + + + Parameter Type + + + Name + + + Values + + + + + In + + + + Token + + + + Token for + ibm,configure-kernel-dump + + + + + + Number Inputs + + + + 3 + + + + + + Number Outputs + + + + 1 + + + + + + Command + + + + 1: Register for future kernel dump + 2: Unregister for future kernel dump + 3: Complete/Invalidate current kernel dump + + + + + + Work_buffer_address + + + + When command is 1: Register for future kernel dump, + points to a structure as defined in + . + + + + + + Work_buffer_length + + + + Length of Kernel Dump Memory Structure when defined + above + + + + + Out + + + + Status + + + + 0: Success + -1: Hardware Error + -2: Busy + -3: Parameter Error + -9: Dump Already Registered + -10: Dump Active + 990x:Extended Delay + + + + +
+
+
+ + + R1--2. + + For the Configure Platform Assisted Kernel Dump + option: The work-buffer address and work-buffer-length for the + ibm,configure-kernel-dump RTAS call must point to an + RMR-memory buffer that contains the structures described in + , whenever the command is 1, + register for future kernel dump; otherwise the call may return -3, + “Parameter Error.” + The Dump Memory Structure specified in + is passed by the operating + system during a + ibm,configure-kernel-dump RTAS call. It is also + reported by the platform using the + ibm,kernel-dump RTAS property after a dump has been + initiated. + + + Kernel Assisted Dump Memory Structure + + + + + + + + + + + Header + + + + + + + + Offset + + + Number of Bytes + + + Value + + + + + 0x0 + + + 4 + + + Dump Format Version = 0x00000001 + + + + + 0x4 + + + 2 + + + Number of Kernel Dump Sections + + + + + 0x6 + + + 2 + + + Dump Status Flags + A bit mask with value + 0x8000 = Dump performed (Set to 0 by caller of the + ibm,configure-kernel-dump call) + 0x4000 = Dump was triggered by the previous system boot + (set by platform) + 0x2000 = Dump error occurred (set by platform) + All other bits reserved + + + + + 0x8 + + + 4 + + + Offset to first Kernel Dump Section, offset from the + beginning of the Structure + + + + + 0xc + + + 4 + + + Number of bytes in a block of the dump-disk, if data to + be written to a dump-disk, If not, should be set to 0 + (indicating the no disk dump option.) + + + + + 0x10 + + + 8 + + + Starting block# offset on dump-disk (set to 0 for the no + disk dump option) + + + + + 0x18 + + + 8 + + + Number of blocks on dump-disk usable for dump (set to 0 + for the no disk dump option) + + + + + 0x20 + + + 4 + + + Offset from start of structure to a Null-terminated + Dump-disk path string (set to 0 for the no disk dump + option) + + + + + 0x24 + + + 4 + + + Maximum time allowed (milliseconds) after + Non-Maskable-Interrupt for the OS to call + ibm,configure-kernel-dump + Function 2 (unregister) to prevent an + automatic dump-reboot (set to 0 to disable the automatic + dump-reboot function) + + + + + + Dump-disk Path String + + + + + + Offset specified above + + + Varies + + + Null-terminated Dump-disk path string specifying the + dump-disk. If no disk dump option is indicated, this section is + not included. + + + + + + First Kernel Dump Section + + + + + + Offset specified above + + + 4 + + + Dump Request Flags: + A bit-mask + Bit 0x00000001 When set, firmware to copy source data to + partition memory. This option must be selected if no disk dump + option is indicated. + All other bit values reserved + + + + + Section Start+4 + + + 2 + + + Source Data type, describes section of dump memory being + described + 0x0001 = CPU State Data + 0x0002 = Hardware Page Table for Real Mode Region + 0x0011 = Real Mode Region + 0x0012 = Dump OS identified string (identifies that the + dump is for a particular OS type and version) + 0x0100 - 0xFFFF OS defined source types + All Other values reserved + + + + + Section Start+6 + + + 2 + + + Dump Error Flags (set by platform) + Bit mask + 0x8000 = Invalid section data type + 0x4000 = Invalid source address + 0x2000 = Requested section length exceeds source + 0x1000 = Invalid partition destination address + 0x0800 = Partition memory destination too small + + + + + Section Start+8 + + + 8 + + + Source address (logical address if section came from + partition memory, or byte offset if section is platform + memory) + + + + + Section Start+16 + + + 8 + + + Requested data length, represents number of bytes to + dump + + + + + Section Start+24 + + + 8 + + + Actual data length, number of bytes dumped + + + + + Section Start+32 + + + 8 + + + Destination address, logical address used for sections + not written to disk by the platform, always required for a Real + mode region section and for all sections when the no disk dump + option is used. + + + + + + Subsequent Sections + + + + + + Previous Section Start+40 + + + Start of Next Section + + + A total of up to nine additional 40 bytes sections with + values as described in the First Section may be specified so + long as the entire structure does not exceed 512 bytes for + version 1. + + + + +
+
+
+ + + R1--3. + + ibm,os-term RTAS call, or on a system reset without + an + ibm,nmi-interlock RTAS call, if the platform has a + dump structure registered through the + ibm,configure-kernel-dump call, the platform must + process each registered kernel dump section as required and, when + available, present the dump structure information to the operating system + through the + “ibm,kernel-dump” property, updated with + status for each dump section, until the dump has been invalidated through + the + ibm,configure-kernel-dump RTAS call. + + + + + R1--4. + + If ibm.comfigure-kernel-dump RTAS call is made to + register or unregister for a dump while a dump is currently active, the + platform must return a + Status of -9, “Dump Active” indicating + that a dump has been copied by the platform and a call must be made to + complete/invalidate the active dump before another call to register or + unregister a dump can be completed successfully. + + + + + R1--5. + + If ibm.comfigure-kernel-dump RTAS call is made to + register a dump after a dump has already been registered by a call, the + platform must return a + Status of -8, “Dump Already Registered” + unless an intervening call was made to invalidate the previously + registered dump. + + + + + R1--6. + + For the Configure Platform Assisted Kernel Dump + Option: Partition memory not specifically mentioned in the call + structure must be preserved by the platform at the same location as + existed prior to the os termination or platform reboot. + + + + + R1--7. + + For the Configure Platform Assisted Kernel Dump + Option: The platform must present the RTAS property, + “ibm,configure-kernel-dump-sizes” in the + OF device tree, which describes how much space is required to store dump + data for the firmware provided dump sections, where the firmware defined + dump sections are: + + + + 0x0001 = CPU State Data + + + + 0x0002 = Hardware Page Table for Real Mode Region + + + + + + + R1--8. + + For the Configure Platform Assisted Kernel Dump + Option: The platform must present the RTAS property, + “ibm-configure-kernel-dump-version” in + the OF device tree. + + + + + R1--9. + + For the Configure Platform Assisted Kernel Dump + Option: After a dump registration is disabled (for example, by + a partition migration operation), calls to + ibm,os-term must return to the OS as though a dump + was not registered. + + Programming Note: The intended flow of interactions + that utilize this call is as follows: + + + + The OS registers sections of memory for dump preservation during + OS initialization + + + + The OS terminates abnormally + + + + The Platform moves registered sections of memory as instructed + during dump registration. + + + + The Partition reboots and provides the prior registration data + in the device tree. + + + + The OS writes the preserved memory regions to disk before using + those memory regions for regular use + + + + The OS completes/invalidates current dump status. + + + + +
+ +
+ +
+ DMA Window Manipulation Calls + + DMA windows for a PE can be changed by the OS when the platform + implements the Dynamic DMA Windows (DDW) option for a PE. The occurrence + of the + “ibm,ddw-applicable” property in any node + of the OF Device Tree indicates that the platform implements the DDW + option, but that property is required to be in the bridge above a PE in + order for the DDW RTAS call to be applicable for the PE. That is, DDW may + be applicable to some PEs in a platform and not for others. + The platform may implement the DDW RTAS calls even when the OS does + not support these, because they are not required to be used by the OS, + because there is always a default window initially allocated below 4 GB, + as specified by the + “ibm,dma-window” property. During + partition migration, these RTAS calls may come and go, but so will the + “ibm,ddw-applicable” property as the + nodes in which those are supported come or go. + The following is an example of how an OS may grab all DMA window + resources allocated for a PE: + + + + If the default window (as specified by the + “ibm,dma-window” property for the PE) is + not needed, then call + ibm,remove-pe-dma-window for the PE, specifying the + default window LIOBN, to make the maximum resources available for the + ibm,create-pe-dma-window RTAS call. + + + + Call + ibm,query-pe-dma-window for the PE to get the + Windows Available and + PE TCEs available for the PE. If the + Windows Available field indicates 1 or more and the + PE TCEs field is non-zero, then continue. + + + + Call ibm,create-pe-dma-window for the PE, specifying the + size based on the + PE TCEs field obtained from the + ibm,query-pe-dma-window RTAS call in step + and on the I/O page size being + specified. + + + + If the Windows Available field indicated 2 or more in step + , then go back to step + and repeat, otherwise + finished. + + + + Software Implementation Note: The general expectation + is that if the + “ibm,ddw-applicable” property exists for + a PE, that the OS will be able to generate one or more windows whose + total size is larger than what is available via the default window. This + requires either additional TCEs being available or that I/O page sizes + other than 4 KB are available and the PE can use the largest I/O page + size (the default window using only the 4 KB I/O page size). If not, then + removing the default window would only allow re-allocation of the same + size window at a different bus address (that is, same number of TCEs and + same I/O page size). However, it may be possible for this to happen, in + which case the platform may indicate that DDW is available to a PE, but + removal of the default window will only allow creation of the same size + window. An example is when a larger I/O page size is available but only + the TCEs in the default window are available, and the PE cannot make use + of the larger page size. + + + + R1--1. + + For the Dynamic DMA Windows (DDW) option: The + platform must implement all of the following RTAS calls: + ibm,query-dma-window, + ibm,create-dma-window, and + ibm,remove-dma-window. + + + + + R1--2. + + For the Dynamic DMA Windows (DDW) option: The + platform must provide the + “ibm,ddw-applicable” property in the OF + Device Tree in the bridge above each PE for which the DDW option is + supported. + + + + + R1--3. + + For the Dynamic DMA Windows (DDW) option: The + software must not call the + ibm,query-dma-window, + ibm,create-dma-window, or + ibm,remove-dma-window RTAS calls in the absence of + the + “ibm,ddw-applicable” property for the PE, + otherwise the call returns a + Status of -3 (Parameter error), and when the property + does exist, software must use the token values specified in the + “ibm,ddw-applicable” property for these + RTAS calls. + + + + + R1--4. + + For the Dynamic DMA Windows (DDW) option: The + platform must provide a default DMA window for each PE, and all of the + following must be true: + + + + The window is defined by the + “ibm,dma-window” property in the OF + device tree. + + + + The window is defined with 4 KB I/O pages. + + + + The window is located entirely below 4 GB. + + + + + + + R1--5. + + For the Dynamic DMA Windows (DDW) option: + The platform must remove any DMA windows created by the + ibm,create-pe-dma-window RTAS call for a PE and must + restore the default DMA window (if it was removed) for the PE, as + originally defined by the + “ibm,dma-window” properties for the PE, + in each of the following cases: + + + + On a reboot of the partition + + + + On a DR isolate operation that encompasses the PE + + + + + + + R1--6. + + For the Dynamic DMA Windows (DDW) option: + In Requirement + , the platform must provide the + same LIOBN, location, and size as specified in the + “ibm,dma-window” property in the OF + Device Tree for the device. + + + + +
+ <emphasis>ibm,query-pe-dma-window</emphasis> + + This RTAS call allows for the discovery of the resources necessary + to make a successful subsequent call to + ibm,create-dma-window. + + + + R1--1. + + RTAS must implement a + ibm,query-pe-dma-window call using the argument call + buffer defined by + . + + + Argument Call Buffer + <emphasis>ibm,query-pe-dma-window</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + ibm,query-pe-dma-window + + + + + + Number Inputs + + + + 3 + + + + + + Number Outputs + + + + 5 + + + + + + Config_addr + + + + PE configuration address (Register fields set to + 0) + + + + + + PHB_Unit_ID_Hi + + + + Represents the most-significant 32-bits of the Unit ID of + the PHB that corresponds to the + config_addr + + + + + + PHB_Unit_ID_Low + + + + Represents the least-significant 32-bits of the Unit ID + of the PHB that corresponds to the + config_addr + + + + + Out + + + + Status + + + + 0: Success + -1: Hardware Error + -3: Parameter error + + + + + Windows Available + + + Number of additional DMA windows that can be created for + this PE. If the value is 0 and the default window (as specified + by the + “ibm,dma-window” property for + the PE) has not been yet removed via the + ibm,remove-pe-dma-window RTAS call for that + window, and if the default window is not needed, then removal + of the default window makes at least one window + available. + + + + + PE TCEs + + + Largest contiguous block of TCEs allocated specifically + for (that is, are reserved for) this PE. See also Requirement + . + + + + + IO Page Sizes + + + I/O Page Size Support. I/O page sizes supported for this + PE. This is a bit significant field, defined as follows: + Bits 0 - 23 reserved + 24 = 16 GB page size supported + 25 = 256 MB page size supported + 26 = 128 MB pages supported + 27 = 64 MB page size supported + 28 = 32 MB page size supported + 29 = 16 MB page size supported + 30 = 64 KB page size supported + 31 = 4 KB page size supported + + + + + Migration Capable + + + H_MIGRATE_DMA Mask. Mask to indicate for which page sizes + (as specified in the I/O Page Size Support field), that + H_MIGRATE_DMA is supported (for this PE). This is a bit + significant field, with the bits defined to align to the bits + in the I/O Page Size Support field. + + + + +
+
+
+ + + R1--2. + + For the Dynamic DMA Windows (DDW) option: + TCE resources returned in the + PE TCEs parameter of the + ibm,query-dma-window RTAS call must be allocated to + the PE specified by the PE configuration address specified in the call, + and must be available to a subsequent + ibm,create-dma-window RTAS call for that PE. + + +
+ +
+ +
+ <emphasis>ibm,create-pe-dma-window</emphasis> + + This call allows the creation of a new DMA window, given the size + of the DMA window, I/O page size, and the PE to which it is associated. + The return from the call includes the LIOBN of the new DMA window, the + starting I/O address of the DMA window, and size. + + Software Implementation Note: Software is expected to + not attempt to create a DMA window that is larger than possible, or + create more DMA windows than is possible, otherwise the + ibm,create-pe-dma-window will return a + Status of -3 (Parameter Error). Thus, the OS is + expected to use the + ibm,query-pe-dma-window first and not ask to create a + window that consumes more resources than those that are available to the + PE. + + + + R1--1. + + For the Dynamic DMA Windows (DDW) option: RTAS must + implement the + ibm,create-dma-window call using the argument call + buffer defined by + . + + + Argument Call Buffer + <emphasis>ibm,create-pe-dma-window</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + ibm,create-pe-dma-window + + + + + + Number Inputs + + + + 5 + + + + + + Number Outputs + + + + 4 + + + + + + Config_addr + + + + PE configuration address (Register fields set to + 0) + + + + + + PHB_Unit_ID_Hi + + + + Represents the most-significant 32-bits of the Unit ID of + the PHB that corresponds to the + config_addr + + + + + + PHB_Unit_ID_Low + + + + Represents the least-significant 32-bits of the Unit ID + of the PHB that corresponds to the + config_addr + + + + + I/O Page Size + + + The value n, where 2 + n is the requested I/O page size. Only page + sizes obtained from the + ibm,query-pe-dma-window RTAS call for the + PE are allowed. Values of n from 0-11 are invalid. + + + + + Requested Window Size + + + The value n, where 2 + n is the requested DMA window size. + + + + + Out + + + + Status + + + + 990x: Extended delay, where x is a number 0-5 (see + text) + 0: Success (window created) + -1: Hardware Error + -2: Busy, try again later + -3: Parameter Error + + + + + + LIOBN + + + + LIOBN of the DMA window created by this call, if any. If + no DMA window was created (that is, if the + Status is not 0), then this field is + present but not used. + + + + + I/O Starting Address Hi + + + Represents the most-significant 32-bits of the starting + address on the I/O bus for the DMA window created by this call, + if any. If no DMA window was created (that is, if the + Status is not 0), then this field is + present but not used. + + + + + I/O Starting Address Low + + + Represents the least-significant 32-bits of the starting + address on the I/O bus for the DMA window created by this call, + if any. If no DMA window was created (that is, if the + Status is not 0), then this field is + present but not used. + + + + +
+
+
+ + + R1--2. + + For the Dynamic DMA Windows (DDW) option: The + ibm,create-pe-dma-window RTAS call must return a + Status of 0 (Success) only if a window with the + requested attributes is created, and must not create a new window if a + non-0 + Status is returned. + + +
+ +
+ +
+ <emphasis>ibm,remove-pe-dma-window</emphasis> + + This RTAS call allows for the removal of PE DMA windows, including + those created with the + ibm,create-pe-dma-window RTAS call as well as the + default window specified by the + “ibm,dma-window” property for the PE. All + created DMA windows will be removed by the platform, and the default DMA + window restored, on a partition reboot, on a DR isolate operation (see + Requirement + and + ), or if the last remaining DMA + window for the PE is removed and that window is not the default DMA + window (see Requirements + and + ). After removal of a DMA + window, software needs to use the + ibm,query-pe-dma-window RTAS call to find out what + resources are available to the PE for subsequent + ibm,create-pe-dma-window RTAS call. + + + + R1--1. + + For the Dynamic DMA Windows (DDW) option: RTAS must + implement the + ibm,remove-dma-window call using the argument call + buffer defined by + . + + + Argument Call Buffer + <emphasis>ibm,remove-pe-dma-window</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + ibm,remove-pe-dma-window + + + + + + Number Inputs + + + + 1 + + + + + + Number Outputs + + + + 1 + + + + + + LIOBN + + + + LIOBN of the DMA window to be removed. + + + + + Out + + + + Status + + + + 0: Success + -1: Hardware Error + -3: Parameter error + + + + +
+
+
+ + + R1--2. + + For the Dynamic DMA Windows (DDW) option: The caller + of the + ibm,remove-pe-dma-window RTAS call must assure that + the TCE table specified by the + LIOBN field does not contain any valid mappings at + the time of the call (that is, that the window is not being used). + + + + + R1--3. + + For the Dynamic DMA Windows (DDW) option: + The platform must + restore the default DMA window for the PE on a call to the + ibm,remove-pe-dma-window RTAS call when all of the + following are true: + + + + The call removes the last DMA window remaining for the + PE. + + + + The DMA window being removed is not the default window. + + + + + + + R1--4. + + For the Dynamic DMA Windows (DDW) option: + In Requirement + , the platform must provide the + same LIOBN, location, and size as specified in the + “ibm,dma-window” property in the OF + Device Tree for the PE. + + +
+ +
+ +
+ Extensions to Dynamic DMA Windows + + Platforms supporting the DDW option implement extensions described + in this section. These extensions include: adding the + “ibm,ddw-extensions” property see + to those nodes that include the + “ibm,ddw-applicable” property, and + implementing the functional extensions specified for the architectural + level in + . The + “ibm,ddw-extensions” property value is a + list of integers the first integer indicates the number of extensions + implemented and subsequent integers, one per extension, provide a value + associated with that extension. Thus the property value is designed to + grow over time in such a way as to enable earlier client programs to + ignore later firmware extensions and later client programs to operate on + back level firmware. For this level of compatibility to work, the client + code needs to ignore extensions beyond what were defined when the client + code was written, and be prepared to operate on back level platforms t at + do not implement all the extensions that were defined when the client + code was written. + + + DDW Option Extensions + + + + + + + + + DDW Option LoPAR or PAPR Level + + + + + + “ibm,ddw-extensions” list + index + + + + + Value Definition + + + + + + + + 2.7 + + + 2 + + + Token of the i + bm,reset-pe-dma-windows RTAS Call + + + + +
+ + + + R1--1. + + For compatibility with changing extensions to the Dynamic DMA + Windows (DDW) option: The client program must ignore extensions + as represented by + “ibm,ddw-extensions” value list integers + beyond those defined when the client code was written. + + + + + R1--2. + + For compatibility with changing extensions to the Dynamic DMA + Windows (DDW) option: The client program must be prepared to + operate on back level platforms that do not implement all the extensions + that were defined when the client code was written, including no + extensions at all. + + + + + +
+ <emphasis>ibm,reset-pe-dma-windows</emphasis> + The + ibm,reset-dma-windows call resets the TCE table + allocation for the PE to its boot time value as communicated in the + “ibm,dma-window” OF Device Tree property + in the for the PE. + + + + R1--1. + + For the Dynamic DMA Windows (DDW) option starting with + IBM Power Architecture Platform Requirements (PAPR) + level 2.7: RTAS must implement the + ibm,reset-dma-windows call using the argument call + buffer defined by + . + + + Argument Call Buffer + <emphasis>ibm,reset-pe-dma-windows</emphasis> + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + + + + + + + Number Inputs + + + + 3 + + + + + + Number Outputs + + + + 1 + + + + + + config_addr + + + + PE configuration address + + + + + PHB_Unit_ID_HI + + + Represents the most-significant 32-bits of the Unit ID of + the PHB that corresponds to the config_addr + + + + + PHB_Unit_ID_Low + + + Represents the least-significant 32-bits of the Unit ID + of the PHB that corresponds to the config_addr + + + + + Out + + + + Status + + + + 0: Success + -1: Hardware Error + -2: Busy, Try again later + -3: Parameter error + + + + +
+
+
+ + + R1--2. + + For the Dynamic DMA Windows (DDW) option starting with + IBM Power Architecture Platform Requirements (PAPR) + level 2.7: The caller of the + ibm,reset-pe-dma-windows RTAS call must assure that + the TCE table(s) assigned to the PE specified by the + config_addr field contain no valid mappings at the + time of the call (that is, that the window(s) is not being used). + + + + + R1--3. + + For the Dynamic DMA Windows (DDW) option starting with + IBM Power Architecture Platform Requirements (PAPR) + level 2.7: On a call to + ibm,restore-pe-dma-windows, the platform must + restore the default DMA window per the values provided in the + “ibm,dma-window” Tree property + in the for the PE (same LIOBN, location, and size). + + +
+ + +
+ +
+ +
+ +
diff --git a/Virtualization/app_bibliography.xml b/Virtualization/app_bibliography.xml new file mode 100644 index 0000000..e0bed27 --- /dev/null +++ b/Virtualization/app_bibliography.xml @@ -0,0 +1,284 @@ + + + + + Bibliography + This section lists documents which were referenced in this specification or which provide + additional information, and some useful information for obtaining these documents. Referenced + documents are listed below. When any of the following standards are superseded by an approved + revision, the revision shall apply. + + + + + + Linux on Power Architecture Reference: Platform and Device Tree + + + + + Linux on Power Architecture Reference: Device Tree + + + + + Linux on Power Architecture Reference: Error Recovery and Logging + + + + + + + Linux on Power Architecture Reference: Runtime Abstraction Services (RTAS) + + + + + Power ISA + + + + + IEEE 1275, IEEE Standard for Boot (Initialization Configuration) Firmware: + Core Requirements and Practices + IEEE part number DS02683, ISBN 1-55937-426-8 + + + + + Core Errata, IEEE P1275.7/D4 + + + + + Open Firmware Recommended Practice:OBP-TFTP + Extension + + + + + Open Firmware Recommended Practice: Device + Support Extensions + + + + + PCI Bus binding to: IEEE Std 1275-1994, Standard + for Boot (Initialization, Configuration) Firmware + + + + + Open Firmware: Recommended Practice - Interrupt + Mapping + + + + + Open Firmware: Recommended Practice - Forth Source + and FCode Image Support, Version 1.0 + + + + + Open Firmware: Recommended Practice - Interrupt + Mapping, Version 1.0 + + + + + Open Firmware: Recommended Practice - TFTP Booting + Extensions, Version 0.8 + + + + + Open Firmware: Recommended Practice - + Interposition, Version 0.2 + + + + + MS-DOS Programmer's Reference + Published by Microsoft + + + + + Peering Inside the PE: A Tour of the Win32 Portable + Executable File Format + Found in the March, 1994 issue of Microsoft Systems Journal + + + + + ISO-9660, Information processing -- Volume and + file structure of CD-ROM for information interchange + Published by International Organization for Standardization + + + + + System V Application Binary Interface, PowerPC + Processor Supplement + By Sunsoft + + + + + ISO Standard 8879:1986, Information Processing + -- Text and Office Systems -- Standard Generalized Markup Language (SGML) + + + + + IEEE 996, A Standard for an Extended Personal Computer + Back Plane Bus + + + + + PCI Local Bus Specification + All designers are responsible for assuring that they use the most current version of this document + at the time that they design conventional PCI related components or platforms. See the PCI SIG website + for the most current version of this document. + + + + + PCI-to-PCI Bridge Architecture Specification + All designers are responsible for assuring that they use the most current version of this document + at the time that they design conventional PCI related components or platforms. See the + PCI SIG website for the most current version of this document. + + + + + PCI Standard Hot-Plug Controller and Subsystem + Specification + + + + + PCI-X Protocol Addendum to the PCI Local Bus Specification + All designers are responsible for assuring that they use the most current version of this document at + the time that they design PCI-X related components or platforms. See the PCI SIG website for the most + current version of this document. + + + + + PCI Express Base Specification + All designers are responsible for assuring that they use the most current version of this document + at the time that they design PCI Express related components or platforms. See the PCI SIG website for + the most current version of this document. + + + + + PCI Express to PCI/PCI-X Bridge Specification + All designers are responsible for assuring that they use the most current version of this document at the + time that they design PCI Express related components or platforms. See the PCI SIG website for the most current + version of this document. + + + + + System Management BIOS (SMBIOS) Reference + Specification + + + + + (List Number Reserved for Compatibility) + + + + (List Number Reserved for Compatibility) + + + + (List Number Reserved for Compatibility) + + + + + IBM RS/6000® Division, Product Topology Data System, + Product Development Guide + Version 2.1 + + + + + Single Root I/O Virtualization and Sharing Specification + All designers are responsible for assuring that they use the most current version of this document at + the time that they design PCI Express SR-IOV related components or platforms. See the PCI SIG website + for the most current version of this document. + + + + + Multi-Root I/O Virtualization and Sharing Specification + All designers are responsible for assuring that they use the most current version of this document at the + time that they design PCI Express MR-IOV related components or platforms. See the PCI SIG website for the + most current version of this document. + + + + + + diff --git a/Virtualization/app_glossary.xml b/Virtualization/app_glossary.xml new file mode 100644 index 0000000..a662dda --- /dev/null +++ b/Virtualization/app_glossary.xml @@ -0,0 +1,1282 @@ + + + + + Glossary + This glossary contains an alphabetical list of terms, phrases, and abbreviations used in this document. + + + + Term + Definition + + + + AC + Alternating current + + + + ACR + Architecture Change Request + + + + AD + Address Data line + + + + Adapter + A device which attaches a device to a bus or which converts one + bus to another; for example, an I/O Adapter (IOA), a PCI Host Bridge (PHB), + or a NUMA fabric attachment device. + + + + + addr + Address + + + + Architecture + The hardware/software interface definition or software module to + software module interface definition. + + + + ASCII + American National Standards Code for Information + Interchange + + + + ASR + Address Space Register + + + + BAT + Block Address Translation + + + + BE + Big-Endian or Branch Trace Enable bit in the + MSR (MSRBE) + + + + BIO + Bottom of Peripheral Input/Output Space + + + + BIOS + Basic Input/Output system + + + + BIST + Built in Self Test + + + + Boundedly undefined + Describes some addresses and registers which when referenced provide + one of a small set of predefined results. + + + + BPA + Bulk Power Assembly. Refers to components used for power distribution + from a central point in the rack. + + + + BPM + Bottom of Peripheral Memory + + + + BSCA + Bottom of System Control Area + + + + BSM + Bottom of System Memory + + + + BUID + Bus Unit Identifier. The high-order part of an interrupt source number + which is used for hardware routing purposes by the platform. + + + + CCIN + Custom Card Identification Number + + + + CD-ROM + Compact Disk Read-Only Memory + + + + CIS + Client Interface Service + + + + CMO + Cooperative Memory Over-commitment option. See + for more information. + + + + + CMOS + Complimentary Metal Oxide Semiconductor + + + + Conventional PCI + Behavior or features that conform to . + + + + CPU + Central Processing Unit + + + + CR + Condition Register + + + + CTR + Count Register + + + + DABR + Data Address Breakpoint Register + + + + DAR + Data Address Register + + + + DASD + Direct Access Storage Device (a synonym for “hard disk”) + + + + DBAT + Data Block Address Translation + + + + DC + Direct current + + + + DEC + Decrementer + + + + DIMM + Dual In-line Memory Module + + + + DMA + Direct Memory Access + + + + DMA Read + A data transfer from System Memory to I/O. A DMA Read Request + is the inbound operation and the DMA Read Reply (or Read Completion) is the + outbound data coming back from a DMA Read Request. + + + + DMA Write + A data transfer to System Memory from I/O or a Message Signalled Interrupt (MSI) DMA Write. This is an inbound operation. + + + + DOS + Disk OS + + + + DR + Data Relocate bit in MSR (MSRDR) + + + + DRA + Deviation Risk Assessment + + + + DRAM + Dynamic Random Access Memory + + + + DRC + Delayed Read Completion. A transaction that has completed + on the destination bus and is now moving toward the originating bus to complete. + DR Connector. + + + + DR entity + An entity that can participate in DR operations. That is, an entity + that can be added or removed from the platform while the platform power is on and the + system remains operational. + + + + DRR + Delayed Read Request. A transaction that must complete on the destination bus before completing on the originating bus. + + + + DSISR + Data Storage Interrupt Status Register + + + + DWR + Delayed Write Request. A transaction that must complete on the destination bus before completing on the originating bus. + + + + EA + Effective Address + + + + EAR + External Access Register + + + + ECC + Error Checking and Correction + + + + EE + External interrupt Enable bit in the MSR (MSREE) + + + + EEH + Enhance I/O Error Handling + + + + EEPROM + Electrically Erasable Programmable Read Only Memory + + + + EPOW + Environment and Power Warning + + + + + Error Log indicator An amber indicator that indicates that the user needs to + look at the error log or problem determination procedures, in order to determine the cause. + Previously called System Information (Attention). + + + + FCode + A computer programming language defined by the OF standard which is semantically + similar to the Forth programming language, but is encoded as a sequence of binary byte codes + representing a defined set of Forth words. + + + + FE0 + Floating-point Exception mode 0 bit in the MSR (MSRFE0) + + + + FE1 + Floating-point Exception mode 1bit in the MSR (MSRFE1) + + + + FIR + Fault Isolation Registers + + + + FLR + Function Level Reset (see PCI Express documentation). An optional reset for PCI Express + functions that allows resetting a single function of a multi-function IOA. + + + + FP + Floating-Point available bit in the MSR (MSRFP) + + + + FPSCR + Floating-Point Status And Control Register + + + + FRU + Field Replaceable Unit + + + + FSM + Finite State Machine + + + + GB + Gigabytes - as used in this document it is 2 raised to the power of 30 + + + + HB + Host Bridge + + + + HMC + Hardware Management Console - used generically to refer to the system + component that performs platform administration function where ever physically located. + The HMC is outside of this architecture and may be implemented in multiple ways. + Examples include: a special HMC applications in another system, an external appliance, + or in an LPAR partition using the Virtual Management Channel (VMC) interface to the + hypervisor. + + + + Hz + Hertz + + + + IBAT + Instruction block address translation + + + + ID + Identification + + + + IDE + Integrated Device Electronics + + + + IDU + Interrupt Delivery Unit + + + + IEEE + Institute of Electrical and Electronics Engineers + + + + I2C + Inter Integrated-circuit Communications + + + + I/O + nput/Output + + + + I/O bus master + Any entity other than a processor, cache, + memory controller, or host bridge which supplies both address and data in + write transactions or supplies the address and is the sink for the data in + read transactions. + + + + I/O device + Generally refers to any entity that is connected + to an IOA (usually through a cable), but in some cases may refer to the IOA + itself (that is, a device in the device tree that happens to be used for I/O + operations). + + + + I/O Drawer + An enclosure in a rack that holds at least one PHB and at + least one IOA. + + + + ILE + Interrupt Little-Endian bit in MSR (MSRILE) + + + + Instr + Instruction + + + + Interrupt Number + See Interrupt Vector below. + + + + Interrupt Vector + The identifier associated with a specific interrupt source. + The identifier’s value is loaded into the source’s Interrupt Vector Register and + is read from the Interrupt Delivery Unit’s Interrupt Acknowledge Register. + + + + IOA + I/O Adapter. A device which attaches to a physical bus which is capable + of supporting I/O (a physical IOA) or logical bus (a virtual IOA). The term “IOA” + without the usage of the qualifier “physical” or “virtual” will be + used to designate a physical IOA. Virtual IOAs are defined further in + . + In PCI terms, an IOA may be defined by a unique combination of its assigned + bus number and device number, but not necessarily including its function number. + That is, an IOA may be a single or multi-function device, unless otherwise specified by + the context of the text. In the context of a PCIe I/O Virtualized (IOV) device (not to be + confused with a virtual IOA), an IOA is a single or multiple function device (for example, a + PCIe Virtual Function (VF) or multiple VFs). An IOA function may or may not have its own set of + resources, that is may or may not be in its own Partitionable Endpoint (PE) domain + (see also + ). + + + + + IOA function + That part of an IOA that deals with a specific part of the + IOA as defined by the configuration space “Function” part of Bus/Device/Function. + For single-function IOAs, the IOA Function and the IOA are synonymous. + + + + IP + Interrupt Prefix bit in MSR (MSRIP) + + + + IPI + Interprocessor Interrupt + + + + IR + Instruction Relocate bit in MSR register (MSRIR) or infrared + + + + ISF + Interrupt 64-bit processor mode bit in the MSR (MSRISF) + + + + ISO + International Standards Organization + + + + ISR + Interrupt Source Register + + + + ISU + Interrupt Source Unit + + + + KB + Kilobytes - as used in this document it is 2 raised to the power of 10 + + + + KHz + Kilo Hertz + + + + LAN + Local Area Network + + + + LCD + Liquid Crystal Display + + + + LE + Little-Endian bit in MSR (MSRLE) or Little-Endian + + + + LED + Light Emitting Diode + + + + LMB + Logical Memory Block. The Block of logical memory addresses associated with a dynamically + reconfigurable memory node. + + + + Load + A Load Request is the outbound (from the processor) operation + and the Load Reply is the inbound data coming back from a + Load Request. When it relates to I/O operations, this is an + MMIO Load . + + + + LR + Link Register + + + + LSb + Least Significant bit + + + + LSB + Least Significant Byte + + + + LSI + Level Sensitive Interrupt + + + + LUN + Logical Unit Number + + + + L1 + Primary cache + + + + L2 + Secondary cache + + + + MB + Megabytes - as used in this document it is 2 raised to the power of 20 + + + + ME + Machine check Enable + + + + MMIO + Memory Mapped I/O. This refers to the mapping of the address space required + by an I/O device for Load or Store operations into + the system’s address space. + + + + MES + Miscellaneous Equipment Specification + + + + MFM + Modified frequency modulation + + + + MHz + Mega Hertz + + + + MOD + Address modification bit in the MSR + (MSRMOD) + + + + MP + Multiprocessor + + + + MSb + Most Significant bit + + + + MSB + Most Significant Byte + + + + MSI + Message Signalled Interrupt + + + + MSR + Machine State Register + + + + MTT + Multi-TCE-Table option. See + . + + + + + N/A + Not Applicable + + + + Nibble + Refers to the first or last four bits in an 8 bit byte + + + + NUMA + Non-Uniform Memory Access + + + + NUMA fabric + Mechanism and method for connecting the multiple nodes of a NUMA system + + + + NVRAM + Nonvolatile Random Access Memory + + + + OF + Open Firmware + + + + OP + Operator + + + + OS + Operating System + + + + OUI + Organizationally Unique Identifier + + + + PA + Processor Architecture + + + + PAP + Privileged Access Password + + + + LoPAR + Used within the Linux on Power Architecture + Reference documents to denote: (1) the architectural requirements specified + by the Linux on Power Architecture Reference document, (2) the Linux on Power Architecture + Reference documents themself, and (3) as an adjective to qualify an entity as being + related to this architecture. + + + + Partitionable Endpoint + This refers to the I/O granule that may be treated as one for + purposes of assignment to an OS (for example, to an LPAR partition). May be an + I/O adapter (IOA), or groups of IOAs and bridges, or portions of IOAs. PE granularity + supported by the hardware may be finer than is supported by the firmware. Grouping + of multiple PEs into one DR entity may limit assignment of a the separate PEs to different + LPAR partitions. See also DR entity. + + + + PC + Personal Computer + + + + PCI + Peripheral Component Interconnect. An all-encompassing term referring to + conventional PCI, PCI-X, and PCI Express. + + + + PCI bus + A general term referring to either the PCI Local Bus, as + specified in and + for conventional PCI and PCI-X, or a PCI Express link, as specified in + for PCI Express. + + + + PCI Express + Behavior or features that conform to + . + + + + PCI link + A PCI Express link, as specified in . + + + + PCI-X + Behavior or features that conform to . + + + + PD + Presence Detect + + + + PE + When referring to the body of the LoPAR, this refers to a Partitionable + Endpoint. + + PE has a different meaning relative to device tree bindings + + (see + for that definition). + + + + + PEM + Partition Energy Management option. See + + . + + + + + Peripheral I/O Space + The range of real addresses which are assigned + to the I/O Space of a Host Bridge (HB) and which are sufficient to contain all of + the Load and Store address space requirements of all the devices in the I/O Space + of the I/O bus that is generated by the HB. A keyboard controller is an example of + a device which may require Peripheral I/O Space addresses. + + + + Peripheral Memory Space + The range of real addresses which are assigned to the Memory + Space of a Host Bridge (HB) and which are sufficient to contain all of the Load and + Store address space requirements of the devices in the Memory Space of the I/O bus + that is generated by the HB. The frame buffer of a graphics adapter is an example + of a device which may require Peripheral Memory Space addresses. + + + + Peripheral Space + Refers to the physical address space which may + be accessed by a processor, but which is controlled by a host bridge. At least one + peripheral space must be present and it is referred to by the suffix 0. A host bridge + will typically provide access to at least a memory space and possibly to an I/O + space. + + + + PHB + PCI Host Bridge + + + + PIC + Programmable Interrupt Controller + + + + PIR + Processor Identification Register + + + + Platform + Refers to the hardware plus firmware portion of a system composed of hardware, + firmware, and OS. + + + + Platform firmware + Refers to all firmware on a system including the software or firmware in a + support processor. + + + + Plug-in I/O card + A card which can be plugged into an I/O + connector in a platform and which contains one or more IOAs and potentially + one or more I/O bridges or switches. + + + + Plug-in Card + An entity that plugs into a physical slot. + + + + PMW + Posted memory write. A transaction that has complete on the + originating bus before completing on the destination bus + + + + PnP + Plug and Play + + + + POP + Power On Password + + + + POST + Power-On Self Test + + + + PR + Privileged bit in the MSR (MSRPR) + + + + Processor Architecture + Used throughout this document to + mean compliance with the requirements specified in + . + + + + Processor revision number + A 16-bit number that distinguishes between various releases + of a particular processor version, for example different engineering change + levels. + + + + PVN + Processor Version Number. Uniquely determines the particular + processor and PA version. + + + + PVR + Processor Version Register. A register in each processor + that identifies its type. The contents of the PVR include the processor + version number and processor revision number. + + + + RAID + Redundant Array of Independent Disks + + + + RAM + Random Access Memory + + + + RAS + Reliability, Availability, and Serviceability + + + + Real address + A real address results from doing address + translation on an effective address when address translation is enabled. + If address translation is not enabled, the real address is the same as the + effective address. An attempt to fetch from, load from, or store to a real + address that is not physically present in the machine may result in a + machine check interrupt. + + + + Reserved + The term “reserved” is used within this + document to refer to bits in registers or areas in the address space + which should not be referenced by software except as described in this + document. + + + + Reserved for firmware use + Refers to a given location or bit which may not be used by + software, but are used by firmware. + + + + Reserved for future use + Refers to areas of address space or bits in registers which may be + used by future versions of this architecture. + + + + RI + Recoverable interrupt bit in the MSR (MSRRI) + + + + RISC + Reduced Instruction Set Computing + + + + RMA + Real Mode Area. The first block of logical memory addresses + owned by a logical partition, containing the storage that may be accessed with + translate off. + + + + ROM + Read Only Memory + + + + Root Complex + A PCI Express root complex as specified in + . + + + + RPN + Real Page Number + + + + RTAS + Run-Time Abstraction Services + + + + RTC + Real Time Clock + + + + SAE + Log Service Action Event log + + + + SCC + Serial Communications Controller + + + + SCSI + Small Computer System Interface + + + + SE + Single-step trace enabled bit in the MSR + (MSRSE) + + + + Service Focal Point + The common point of control in the system for handling all + service actions + + + + Serviceable Event + Serviceable Events are platform, + global, regional and local error events that require a service action + and possibly a call home when the serviceable event must be handled by a + service representative or at least reported to the service provider. + Activation of the Error Log indicator notifies the customer of the event + and the event indicates to the customer that there must be some intervention + to rectify the problem. The intervention may be a service action that the + customer can perform or it may require a service provider. + + + + SES + Storage Enclosure Services (can also mean SCSI Enclosure + Services in relation to SCSI storage) + + + + SF + Processor 32-bit or 64-bit processor mode bit in the MSR + (MSRSF) + + + + SFP + Service Focal Point + + + + Shrink-wrap OS + A single version of an OS that runs on all + compliant platforms. + + + + Shrink-wrap Application + A single version of an application program + that runs on all compliant platforms with the applicable OS. + + + + SMP + Symmetric multiprocessor + + + + SMS + System Management Services + + + + Snarf + An industry colloquialism for cache-to-cache + transfer. A typical scenario is as follows: (1) cache miss from cache A, + (2) line found modified in cache B, (3) cache B performs castout of modified + line, and (4) cache A allocates the modified line as it is being written back + to memory. + + + + Snoop + The act of interrogating a cache for the presence of a + line, usually in response to another party on a shared bus attempting to + allocate that line. + + + + SPRG + Special Purpose Registers for General use + + + + SR + System Registers + + + + SRC + Service Reference Code + + + + SRN + Service Request Number + + + + Store + A Store Request is an + outbound (from the processor) operation. When it relates to I/O + operations, this is an MMIO Store. + + + + System + Refers to the collection of hardware, system firmware, + and OS software which comprise a computer model. + + + + System address space + The total range of addressability as established by the + processor implementation. + + + + System Control Area + Refers to a range of addresses which + contains the system ROM(s) and an unarchitected, reserved, platform-dependent + area used by firmware and Run-Time Abstraction services for control of the + platform. The ROM areas are defined by the OF properties in the + openprom and os-rom nodes + of the OF device tree. + + + + System Information (Attention) indicator + See Error Log indicator. + + + + System firmware + Refers to the collection of all firmware on a system + including OF, RTAS and any legacy firmware. + + + + System Memory + Refers to those areas of memory which form + a coherency domain with respect to the PA processor or processors that + execute application software on a system. + + + + System software + Refers to the combination of OS software, + device driver software, and any hardware abstraction software, but + excludes the application software. + + + + TB + Time Base + + + + TCE + Translation Control Entry + + + + TLB + Translation Look-aside Buffer + + + + TOD + Time Of Day + + + + TOSM + Top of system memory + + + + TPM + Top of Peripheral Memory + Trusted Platform Module + + + + tty + Teletypewriter or ASCII character driven + terminal device + + + + UI + User Interface + + + + USB + Universal Serial Bus + + + + v + Volt + + + + VGA + Video Graphics Array + + + + VMC + Virtual Management Channel + + + + VPD + Vital Product Data + + + + VPNH + Virtual Processor Home Node option. See + . + + + + + + + + + + + + + + diff --git a/Virtualization/bk_main.xml b/Virtualization/bk_main.xml new file mode 100644 index 0000000..c8b35f0 --- /dev/null +++ b/Virtualization/bk_main.xml @@ -0,0 +1,117 @@ + + + + + + + Virtualization + Linux on Power Architecture Reference + + + + + System Software Work Group + + syssw-chair@openpowerfoundation.org + + OpenPOWER Foundation + + + + 2016 + OpenPOWER Foundation + + + Revision 2.0_pre1 + OpenPOWER + + + + + + Copyright details are filled in by the template. + + + + + + The purpose of this document is to provide firmware and software + architectural details for the base Platform hardware associated with an OpenPOWER Systems. + The base content for this document were contributed to the OpenPOWER Foundation in the + IBM Linux on Power Architecture Platform Reference (LoPAPR) Draft + document. It had numerous contributors inside IBM. + This document is a Standard Track, Work Group Specification work product owned by the + System Software Workgroup and handled in compliance with the requirements outlined in the + OpenPOWER Foundation Work Group (WG) Process document. It was + created using the Master Template Guide version 0.9.5. Comments, + questions, etc. can be submitted to the public mailing list for this document at + TBD. + + + + + + 2017-05-18 + + + + Revision 2.0_pre1 - initial conversion from IBM document. Extracted from + Linux on Power Architecture Platform Reference (LoPAPR) version 1.1 dated March 24, + 2016 -- Chapter 14 (Logical Partitioning Option), Chapter 13 (Dynamic Reconfiguration + Option), Chapter 17 (Virtualized Input/Output), Appendix A (SPLPAR Characteristics + Definitions), Appendix D (A Protocol for a Virtual TTY Interface), Appendix E + (A Protocol for VSCSI Communications), Appendix F (A Protocol for VMC Communications), + Appendix J (Platform Dependent hcalls), and Appendix K (A Protocol for VNIC Communications) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Virtualization/ch_dynamic_reconfig.xml b/Virtualization/ch_dynamic_reconfig.xml new file mode 100644 index 0000000..6f950f0 --- /dev/null +++ b/Virtualization/ch_dynamic_reconfig.xml @@ -0,0 +1,4314 @@ + + Dynamic Reconfiguration (DR) Architecture + + Dynamic Reconfiguration (DR) is the capability of a system to adapt to + changes in the hardware/firmware physical or logical configuration, and to be + able to use the new configuration, all without having to turn the platform + power off or restart the OS. This section will define the requirements for + systems that support DR operations. + +
+ DR Architecture Structure + + shows the relationship of the DR + architecture with LoPAR and the relationship of the individual DR pieces + with the base DR architecture. Each specific DR option (for example, PCI + Hot Plug) will have a piece that sits on top of the base DR option. The + base DR option is the set of requirements that will be implemented by all + DR platforms and that will be utilized by the OS that supports any of the + specific DR options. The specific DR options will call out the base DR + option requirements as being required. Therefore, in the figure, any + specific DR option is really that specific DR option piece plus the base DR + option. The base DR option is not a stand-alone option; a platform which + supports the base DR option without one or more of the specific DR option + pieces that sit on top of it, has not implemented the DR architecture to a + level that will provide any DR function to the user. Likewise, a DR entity + will meet the requirements of at least one of the specific DR options, or + else software is not required to support it as a DR entity. Thus, the base + DR option is the common building block and structure upon which all other + specific DR options are built. + DR operations can be physical or logical. Currently the only physical + DR entities are PCI Hot Plug. That is, the OS only has control over the + physical DR operations on PCI IOAs. The current direction for hot plug of + other DR entities is to do the physical hot plug (power up/down, control of + service indicators, etc.) via the HMC and to bring the entity into usage by + an OS via logical DR operations (Logical Resource DR -- LRDR). The PCI Hot + Plug DR option can be found in + . The Logical Resource Dynamic + Reconfiguration option can be found in + . It is expected that as time + goes on, the base DR option may be expanded upon by addition of other DR + options. + +
+ DR Architecture Structure + + + + + + + + +
+
+ +
+ Definitions Used in DR + + + DR Definitions + + + + + + + + Term + + + + + Definition + + + + + + + + Base Dynamic Reconfiguration (DR) option + + + The base on which all of the specific DR options are built. + Specific DR options include, for example, the PCI Hot Plug DR + option, processor card DR option, etc. These specific DR options + each include the requirement that all the base DR option + requirements be met. See + for more information + about the structure of the DR architecture pieces. + + + + + Dynamic Reconfiguration (DR) + + + The capability of a system to adapt to changes in the + hardware/firmware configuration with the power on and the OS + operating, and to be able to use the new configuration. This is a + piece of the High Availability puzzle, but only one of the + pieces. + + Addition, removal, and replacement may, in general, be done + with the power on or off on the connector into which the entity + is being added or removed. For the PCI Hot Plug option, the power + to the slot is turned off and the logic signals are electrically + isolated from the connector during the plug or unplug + operation. + + + + + Depth First + + + Refers to a method where a tree structure (for example, a + set of PCI buses connected by PCI to PCI bridges) is traversed + from the top to the bottom before all the siblings at any + particular level are acted upon. + + + + + DR Connector (DRC) + + + The term “DR connector” will be used here to + define the plug-in point for the entity that is participating in + DR. For example, a ‘slot’ into which a PCI IOA is + inserted is a DRC. + + + + + DR Entity + + + An entity that can participate in DR operations. That is, + an entity that can be added or removed from the platform while + the platform power is on and the system remains operational. See + also the definitions of logical and physical DR entities. + + + + + DR Operation + + + The act of removing, adding or replacing a DR + Entity. + + + + + Entity + + + One or more I/O devices, IOAs, Processor cards, etc., that + are treated as one unit. + + + + + High Availability (HA) System + + + A system that gives the customer “close” to + continuous availability, but allows for some system down-time. + Besides DR, other factors that need to be considered in the + design of an HA system include system partitioning, clustering, + redundancy, error recovery, failure prediction, Error Detection + and Fault Isolation (EDFI), software failure detection/recovery, + etc. + + + + + I/O Adapter (IOA) + + + A device which attaches to a physical bus which is capable + of supporting I/O (a physical IOA) or logical bus (a virtual IOA) + and which has its own separate set of resources is referred to as + an IOA. The term “IOA” without the usage of the + qualifier “physical” or “virtual” will be + used to designate a physical IOA. Virtual IOAs are defined + further in + . Resources which must + have the capability of being separate (from other devices) + include: MMIO Load/Store address spaces, configuration address + spaces, DMA address spaces, power domains, error domains, + interrupt domains, and reset domains. Note that the hardware of + an IOA may allow for separation of these resources but the + platform or system implementation may limit the separation (for + example, shared error domains). In PCI terms, an IOA may be + defined by a unique combination of its assigned bus number and + device number, but not including its function number; an IOA may + be a single or multi-function device, unless otherwise specified + by the context of the text. Examples include LAN and SCSI IOAs. A + PCI IOA may exist as multiple device nodes in the OF device tree; + that is, the OF may treat separate “functions” in an + IOA as separate OF device tree nodes. + + + + + IOA: built-in + + + An IOA that is not pluggable by the user. Sometimes called + integrated I/O. As opposed to an IOA that may be removed as part + of a plug-in card removal (see definition for a plug-in card, + below). + + + + + I/O Bus + + + A hardware interface onto which an IOA can be plugged on a + platform. I/O buses discussed here include: + + + + + I/O Bus: PCI + + + The term “PCI” refers to one of: conventional + PCI, PCI-X, or PCI Express. The term “bus” in the + case of PCI Express refers to a PCI Express link. + + + + + I/O Bus: System Bus + + + The system bus in a platform is normally used only to + attach CPUs, memory controllers, and Host Bridges to bridge to + I/O buses. A platform’s system bus may, in certain + circumstances, be used to attach very high speed IOAs. DR of + system bus-attached entities is not considered here. + + + + + I/O Device + + + An entity that is connected to an IOA (usually through a + cable). A SCSI-attached DASD device is an example. Some I/O + devices and their connection points to the IOAs are designed to + be plugged while the connection point is operational to the other + I/O devices connected to the same IOA, and some are not. For + example, while the SCSI bus was not initially designed to have + devices added and removed while the SCSI bus was operational, + different vendors have found ways to do so. For example, + SCSI-attached DASD is pluggable and unpluggable from the SCSI bus + in some platforms. + + + + + Live Insertion + + + A DR operation where the power remains on at the DR + connector. Live insertion entities are always powered unless the + machine power is shut off or unless a subsystem containing those + entities is shut off. + + + + + Logical DR entity + + + A DR entity which does not have to be physically plugged or + unplugged during a DR operation on that entity. See + for a list of the supported + Logical DR types. + + + + + Logical Resource DR + + + The name of the option for support of DR of logical + entities. See + . + + + + + PCI Hot Plug + + + DR for PCI plug-in cards where there is a separate power + domain for each PCI Hot Plug slot. Platforms which do not provide + individual control of power and isolation for each PCI slot but + which do provide power and isolation control for groups of PCI + slots (that is, multiple slots per power domain), do not provide + “PCI Hot Plug,” but can support PCI DR. + + + + + Physical DR entity + + + A DR entity which may need to be physically plugged or + unplugged during a DR operation on that entity. See + for a list of the supported + physical DR types. + + + + + Plug-in card + + + A card which can be plugged into an I/O connector in a + platform and which contains one or more IOAs and potentially one + or more I/O bridges or switches. + + + + + Subsystem + + + One or more I/O devices, IOAs, Processor cards, etc., that + are treated as one unit, for purposes of + removal/insertion. + + + + +
+
+
+ Architectural Limitations + The DR architecture places a few limitations on the implementations. + Current architectural limitations include: + + + + DR operations will be user initiated at the software level before + any physical plugging or unplugging of hardware is performed. This + architecture will be flexible enough to add additional methods for invoking + the process in the future, but for the initial architecture it will be + assumed that the operation is invoked by the user via a software method + (for example, invoking an OS DR services program). It is expected that some + technologies which will be added in the future will allow + plugging/unplugging without the user first informing the software (for + example, P1394 and USB). + + + + Critical system resources cannot be removed via a DR operation. + Which system resources are critical will not be defined by this + architecture; it is expected that this determination will be made by the OS + implementation and/or architecture. Loss of a critical resource would stop + the system from operating. + + + + Many of the RTAS calls will need to work properly, independent of + what is powered-off (for example, NVRAM access must work during DR + operations). This is partially encompassed by the last bullet. For more + information, see + . + + + + Any special requirements relative to redundant power supplies or + cooling are not addressed here. + + + + Moving of a DR entity from one location to another in a platform is + supported through a “remove and add” methodology rather than a + specific architecture which defines the constructs necessary to allow + moving of pieces of the platform around. + + + + Note: The current AIX implementation does a “remove and + add” sequence even when the overall DR operation is a replacement. + That is, first the old entity is removed, and then the new entity is + added. +
+
+ Dynamic Reconfiguration State Transitions + + shows the states and transitions + for the dynamic reconfiguration entities (DR Entities). The transition + between states is initiated by a program action (RTAS functions) provided + the conditions for the transition are met. + + Note: Relative to + , physical DRC types are brought + in to the “owned by the OS” states either: (1) by the Device + Tree at boot time, or (2) by a DLPAR operation, which brings in the logical + DRC “above” the physical DRC first, and drags the physical in + as part of transferring from state 3 to state 4. Therefore no states appear + in the “owned by platform” section under Hot Plug DR in the + figure. So, for example, the DLPAR assignment of a PCI physical slot to an + OS is done by assigning the logical SLOT DRC above the physical PCI slot, + thus giving the following state transitions: state 1, to state 2, to state + 3, to state 4, at which time the OS sees the physical slot, sees an IOA in + the physical slot (via + get-sensor-state (dr-entity-sense) of the physical DRC + returning “present”), and then proceeds with the state + transitions of: state 5, to state 6, to state 7, to state 8. The reverse of + this (DLPAR removal of the PCI slot) is: state 8, to state 6, to state 5, + to state 4, to state 2, to state 1. + +
+ Dynamic Reconfiguration State Transition Diagrams + + + + + + + + +
+ Notes: + + + In State 5, if empty status is returned from the + get-sensor-state dr-entity-sense call, then do not attempt to power-on + + + Transitions from State 8 to 6 or from State 6 to 5 may fail + (set-indicator isolation-state isolate, and get-sensor-state + dr-entity-sense) if the hardware cannot be accessed to control + these operations. In this case, the OS may ignore + those errors if the operation is a DLPAR to remove the + hardware. See also the “ibm,ignore-hp-po-fails-for-dlpar” + property in . + + + +
+
+ Base DR Option + +
+ For All DR Options - Platform Requirements + + This section contains the extra requirements placed on + the platform for all of the various DR configurations. + At this time, there are no provisions made in the DR architecture + for unexpected removal of hardware or insertion of hardware into a DR + connector. Therefore the user is expected to interact with the DR + software prior to changing the hardware configuration. For example, it is + expected that most systems will require a keyboard action prior to the + hardware configuration change. Future architecture might allow for other + possibilities. For example, a push-button switch at the DR connector may + be provided which causes an interrupt to the OS to signal that an + operation is about to take place on the connector + The push-button method is one that has been mentioned as a + possible enhancement for systems that are produced for telephone + company applications. + . + As mentioned in + , the requirements in this + section are not stand-alone requirements; the platform will also need to + implement one or more of the specific DR options. + + + + R1--1. + + For all DR options: If the + “ibm,configure-connector” + property exists in the + /rtas node of the OF device tree, then the platform + must meet all of the requirements for the Base DR option (that is, all of + the requirements labeled “For all DR options”), and must also + meet all the requirements for at least one of the specific DR + options. + + + + + R1--2. + + For all DR options: The platform and + OS must adhere to the design and usage restrictions on RTAS routines + defined in + , and any RTAS calls not + specified in + must comply with + Note + and + . + + + RTAS Call Operation During DR Operations + + + + + + + + + + + + RTAS Call Name + + + + + + Reference to + Note + Numbers + + + + +   + + + + + + RTAS Call Name + + + + + + Reference to + Note + Numbers + + + + + + + + + rtas-last-error + + + + 1 + + +   + + + + ibm,read-pci-config + + + + 4 + + + + + + check-exception + + + + 1, 2 + + + + + ibm,write-pci-config + + + + 4,7 + + + + + + display-character + + + + 1 + + + + + restart-rtas + + + + 1 + + + + + + event-scan + + + + 1, 2 + + + + + set-indicator + + + + 3, 4, 5 + + + + + + query-cpu-stopped-state + + + + 4 + + + + + set-power-level + + + + 3, 4, 5 + + + + + + get-power-level + + + + 4 + + + + + set-time-for-power-on + + + + 1 + + + + + + get-sensor-state + + + + 3, 4 + + + + + set-time-of-day + + + + 1 + + + + + + get-time-of-day + + + + 1 + + + + + start-cpu + + + + 4 + + + + + + ibm,configure-connector + + + + 7 + + + + + stop-self + + + + 7 + + + + + + ibm,exti2c + + + + 1 + + + + + system-reboot + + + + 1 + + + + + + ibm,os-term + + + + 1 + + + + + nvram-store + + + + 1 + + + + + + nvram-fetch + + + + 1 + + + + + power-off + + + + 1, 6 + + + + + + ibm,power-off-ups + + + +   + + + +   + + +   + + + + +
+ + Notes: + + + + + These RTAS calls + function as specified in this architecture, regardless of the power state + of any DR entity in the platform (providing the call is + implemented). + + + + These RTAS calls + do not cause errors nor return an error status by accessing hardware + which is isolated, unusable and/or powered down. + + + + These RTAS calls function properly when dealing with a DR + connector, when the parent of that DR connector is powered and + configured, regardless of the state of the child of the parent (for + set-indicator, the isolation-state and dr-indicator names, and for + get-sensor-state, the dr-entity-sense sensor name). + + + + The results of the OS issuing these RTAS calls to hardware when + the access to that hardware is through hardware which is isolated, + unusable, powered off, or incompletely configured, are + indeterminate. + + + + The results of the OS changing the power or isolation state of a + Dynamic Reconfigure connector while there is an uncompleted + ibm,configure-connector operation in progress against + that connector are indeterminate. + + + + Power domains which were defined within sub-trees which have + been subsequently isolated may remain un-modified by this call; their + state will be platform dependent. + + + + The results of the OS issuing these RTAS calls to hardware which + is isolated and/or powered off are indeterminate. + + + +
+
+ + + R1--3. + + For all DR options: If there is Forth code associated + with a DR entity, it must not modify the OF device tree properties or + methods unless modifications can be hidden by the + ibm,configure-connector RTAS call (that is, where + this RTAS routine recognizes the entity and creates the appropriate OF + device tree characteristics that would have been created by the Forth + code). + + + + + R1--4. + + For all DR options: The hardware must protect against + any physical damage to components if the DR entity is removed or inserted + while power is on at the DR connector. + + + + + R1--5. + + For all DR options: During a DR operation (including + resetting and removing the reset from the entity, powering up and + powering down the entity, unisolating and isolating the entity, and + physically inserting and removing the entity), the platform must prevent + the introduction of unrecoverable errors on the bus or interconnect into + which the DR entity is being inserted or removed. + + + + + R1--6. + + For all DR options: During a DR operation (including + resetting and removing the reset from the entity, powering up and + powering down the entity, unisolating and isolating the entity, and + physically inserting and removing the entity), the platform must prevent + damage to the DR entity and the planar due to any electrical + transitions. + + + + + R1--7. + + For all DR options: If there are any + live insertion DR entities in a platform and if those entities or the + rest of the platform cannot tolerate the power being turned off to those + entities during DR operations on other DR entities, then they must not be + placed in the same power domain as the DR entities that will be powered + off. + + + + + R1--8. + + For all DR options: A separate visual + indicator must be provided for each physical DR connector which can be + used for insertion of a DR Entity or which contains a DR entity that can + be removed, and the indicator must be individually controllable via the + set-indicator RTAS call, and must have the capability + to be set to the states as indicated in + and + . + + + + + R1--9. + + For all DR options: + If a platform provides a separate indicator to indicate the state of the power for the + DR connector, then that LED must be turned on by the platform when the + platform turns the power on to the DR connector and must be turned off by + the platform when the platform turns the power off to the DR + connector. + + + + + R1--10. + + For all DR options: If a DR entity requires power to + be turned off prior to the physical removal of the DR entity from the + platform, then the hardware must provide a green power indicator to + indicate the power state of the DR entity + + + + + R1--11. + + For all DR options: The platform must provide any + necessary power sequencing between voltages within a power domain during + DR operations (for example, during the + set-power-level RTAS call). + + + + + R1--12. + + For all DR options: If a platform supports DR, then + all DR entities must support the full on to off and the off to full on + power transitions. + + Architecture Note: Requirement + is necessary so that the OS can + count on the availability of certain RTAS facilities and so that the OS + does not use other RTAS facilities when they are not available. This may + put certain hardware restrictions on what can and cannot be shut + down. + + Hardware Implementation Notes: + + + + + Requirement + requires careful planning of + hardware design and platform structure to assure that no resources + critical to RTAS are put into power domains that are powered down as part + of a DR operation. In addition, the platform is required to provide the + facilities (registers and bits in registers readable by firmware, etc.) + so that RTAS can query the state of the hardware and determine if + something is powered off before actually accessing the powered-off + hardware. + + + + Requirement + indicates that there cannot be + any sharing of indicators between DR connectors. + + + + In some large systems (for example, systems with many racks of + equipment) it may not be possible or convenient to view the individual DR + visual indicators without opening cabinet doors, etc. In such cases, the + designers of such systems could consider putting a “summary” + visual indicator where the user could readily see it, which is basically + a logical “or” of the visual indicators which are out of + sight. For example, in a rack-based system, the drawers might have an + indicator on the front of the drawer that indicates if any indicators on + the back of the drawer are flashing. This summary indicator will not be + accessed by the software (that is, will be transparent to the software) + but it is permissible for the indicator to have firmware + dependencies. + + + + +
+ +
+ +
+ For All DR Options - OF Requirements + This section describes the OF properties added for DR and any + additional requirements placed on OF due to DR. + This section defines a number of new DR properties which are + arrays. All properties for a specific DR connector under a node are at + the same offset into each array. Also, when the descriptive text states + “the first connector” this does not imply any physical + position or numbering, but rather a logical “first” connector + beneath a particular node in the OF device tree. + +
+ General Requirements + + + + R1--1. + + For all DR options: When the firmware passes control + to the OS, the DR hardware must be initialized such that all of the DR + connectors which would return “DR entity present” to a + get-sensor-state dr-entity-sense) are fully powered + and operational and any DR visual indicators are set to the appropriate + state (on or off) as indicated by + . + + + + + R1--2. + + For all DR options: After the firmware has passed + control to the OS, the state of the DR visual indicators must not change + except under the following conditions: + + + + As directed to do so by the + set-indicator RTAS call. + + + + Under the condition of a power-fault, in which case the hardware + may change the state of the visual indicator to the “off” + state if it turns the power off to the slot. + + + + + + + R1--3. + + For all DR options: The platforms which have + hierarchical power domains must provide the + “power-domains-tree” property in the OF + device tree. + + + + +
+ +
+ Property + <emphasis role="bold"><literal>“ibm,drc-indexes”</literal></emphasis> + This property is added for the DR option to specify for each DR + connector an index to be passed between the OS and RTAS to identify the + DR connector to be operated upon. This property is in the parent node of + the DR connector to which the property applies. See + for the definition of this + property. + + + + R1--1. + + For all DR options: For each OF device tree node + which supports DR operations on its children, the OF must provide an + “ibm,drc-indexes” property for that + node. + + + +
+ +
+ Property + <emphasis role="bold"><literal>“ibm,my-drc-index”</literal></emphasis> + This property is added for the DR option to specify for each node + which has a DR connector between it and its parent, the value of the + entry in the + “ibm,drc-indexes” property for that + connector. This property is used for correlation purposes. See + for the definition of this + property. + + + + R1--1. + + For all DR options: For each OF device tree node + which has a DR connector between it and its parent, the OF must provide an + “ibm,my-drc-index” property for that + node. + + + +
+ +
+ Property + <emphasis role="bold"><literal>“ibm,drc-names”</literal></emphasis> + This property is added for the DR option to specify for each DR + connector a user-readable location code for the connector. See + for the definition of this + property. + + + + R1--1. + + For all DR options: For each OF device tree node + which supports DR operations on its children, the OF must provide an + “ibm,drc-names” property for that + node. + + + + + R1--2. + + For all DR options: The content of the + “ibm,drc-names” property must be of the + format defined in + . + + + + + + <emphasis role="bold"><literal>“ibm,drc-names”</literal></emphasis> Property Format + + + + + + + + + DRC Type + + + + + DRC Name + + + + + + + + 1-8, 11-30 (PCI Hot Plug) + + + Location code + + + + + SLOT + + + Location code (built-in has port suffix) + + + + + PORT + + + Port x + + + + + CPU + + + CPU x + where “x” is a decimal number with one or + more digits and no leading zeroes + + + + + MEM or MEM-n + + + LMB x + where “x” is a decimal number with one or + more digits and no leading zeroes + + + + + PHB + + + PHB x + where “x” is a decimal number with one or + more digits and no leading zeroes + + + + +
+
+ +
+ <emphasis role="bold"><literal>“ibm,drc-power-domains”</literal></emphasis> Property + This property is added for the DR option to specify for each DR + connector the power domain in which the connector resides. See + for the definition of this + property. + + + + R1--1. + + For all DR options: + For each OF device tree node which supports DR operations on its children, the OF + must provide an + “ibm,drc-power-domains” property for that + node. + Software Implementation Notes: + + + + Software will not call the + set-power-level RTAS call with an invalid power + domain number, and for purposes of this call, a power domain number of -1 + (a live insert connector) is considered invalid. + + + + For the case where the power domain is -1 (the live insert case), + this does not imply that the connector does not need isolating before the + DR operation, only that it does not need to be powered off. + + + + + + + +
+ +
+ Property + <emphasis role="bold"><literal>“ibm,drc-types”</literal></emphasis> + This property is added for the DR option to specify for each DR + connector a user-readable connector type for the connector. See + for the definition of this + property. + + Architecture Note: The logical connectors (CPU, MEM + etc.) represent DR boundaries that may not have physical DR connectors + associated with them. If a physical DR boundaries were present they would + be represented by a different DR connector type. It is possible that a + given boundary may be represented by both a physical and a logical + connector. In that case, logical assignment would be managed with the + logical connector and physical add/remove would be managed by specifying + the physical DR connector. + + + + R1--1. + + For all DR options: For each OF device tree node + which supports DR operations on its children, the OF must provide an + “ibm,drc-types” property for that + node. + + + +
+ +
+ Property + <emphasis role="bold"><literal>“ibm,phandle”</literal></emphasis> + This property is added for the DR option to specify the phandle for + each OF device tree node returned by ibm,configure-connector. See + for the definition of this + property. + + + + R1--1. + + For all DR options: The + ibm,configure-connector RTAS call will include the + “ibm,phandle” property in each OF device + tree node that it returns. This phandle must be unique and consistent + with any phandle visible to an OF client program or any other information + returned by + ibm,configure-connector. + + + +
+
+ +
+ For All DR Options - RTAS Requirements + For platforms that implement DR, there is one new RTAS call and + some changes (new requirements) placed on existing ones. + +
+ General Requirements + The following are the general requirements for RTAS for all DR + options. + + + + R1--1. + + For all DR options: + If there is Forth + code associated with a DR entity and that Forth code would normally + modify the OF device tree properties or methods, then if that entity is + to be supported as a DR entity on a particular platform, the + ibm,configure-connector RTAS call on that platform + must recognize that entity and create the appropriate OF device tree + characteristics that would have been created by the Forth code. + + + + +
+ +
+ <emphasis>set-power-level</emphasis> + This RTAS call is defined in + . Several additional requirements are placed + on this call when the platform implements DR along with PM. + This RTAS call is used in DR to power up or power down a DR + connector, if necessary (that is, if there is a non-zero power domain + listed for the DR connector in the + “ibm,drc-power-domains” property). The + input is the power domain and the output is the power level that is + actually to be set for that domain; for purposes of DR, only two of the + current power levels are of interest: “full on” and + “off.” + For sequencing requirements between this RTAS routine and others, + see Requirements + and + . + + + + R1--1. + + For all DR options: the + set-power-level RTAS call must be implemented as + specified in + and the further requirements of this DR + option. + + + + + R1--2. + + For all DR options: The + set-power-level RTAS call must initiate the operation + and return “busy” status for each call until the operation is + actually complete. + + + + + R1--3. + + For all DR options: + If a DR operation + involves the user inserting a DR entity, then if the firmware can + determine that the inserted entity would cause a system disturbance, then + the + set-power-level RTAS call must not power up the + entity and must return an error status which is unique to that particular + type of error, as indicated in + . + + + + + + + <emphasis>set-power-level</emphasis> Error Status for specific DR + options + + + + + + + + + + Parameter Type + + + + + Name + + + + + Option Name + + + + + Values + + + + + + + + Out + + + Status + + + PCI Hot Plug DR option + + + -9000: Powering entity would create change of frequency + on the bus and would disturb the operation of other PCI IOAs on + the bus, therefore entity not powered up. + + + + +
+ Hardware Implementation Notes: + + + + For any DR operation, the firmware could optionally not allow + powering up of a DR entity, if the powering up would cause a platform + over-power condition (the firmware would have to be provided with the DR + Entities’ power requirements and the platform’s power + capability by a method which is not architected by the DR + architecture). + + + + If PM is not implemented in the platform, then only the + “full on” and “off” states need to be implemented + for DR and only those two states will be used. + + + + + Software Implementation Note: The operation of the + set-power-level call is not complete at the time of + the return from the call if the “busy” status is returned. If + it is necessary to know when the operation is complete, the routine + should be called with the same parameters until a non-busy status is + returned. +
+ +
+ <emphasis>get-sensor-state</emphasis> + This RTAS call is defined in + . This RTAS call will be used + in DR to determine if there is something connected to the DR + connector. + The + “rtas-sensors” and + “ibm,sensor-<token>” + OF properties are not applicable to DR + sensors defined in + . + + + + R1--1. + + For all DR options: RTAS must implement the + get-sensor-state RTAS call. + + + + + R1--2. + + For all DR options: The sensor values specified in + must be implemented as + specified in that table. + + + <emphasis>get-sensor-state</emphasis> Defined Sensors for All DR + Options + + + + + + + + + + Sensor Name + + + + + Token Value + + + + + Defined Sensor Values + + + + + Description + + + + + + + + dr-entity-sense + + + 9003 + + + DR connector empty (0) + + + Returned for physical DR entities if the connector is + available (empty) for an add operation. The DR connector must + be allocated to the OS to return this value, otherwise a status + of -3, no such sensor implemented, will be returned from the + get-sensor-state RTAS call. + + + + + DR entity present (1) + + + Returned for logical and physical DR entities when the DR + connector is allocated to the OS and the DR entity is present. + For physical DR entities, this indicates that the DR connector + actually has a DR entity plugged into it. For DR connectors of + physical DR entities, the DR connector must be allocated to the + OS to return this value, otherwise a status of -3, no such + sensor implemented, will be returned from the + get-sensor-state RTAS call. For DR + connectors of logical DR entities, the DR connector must be + allocated to the OS to return this value, otherwise a sensor + value of 2 or 3 will be returned. + + + + + DR entity unusable (2) + + + Returned for logical DR entities when the DR entity is + not currently available to the OS, but may possibly be made + available to the OS by calling + set-indicator with the allocation-state + indicator, setting that indicator to usable. + + + + + DR entity available for exchange (3) + + + Returned for logical DR entities when the DR entity is + available for exchange in a sparing type operation, in which + case the OS can claim that resource by doing a + set-indicator RTAS call with + allocation-state set to exchange. + + + + + DR entity available for recovery (4) + + + Returned for logical DR entities when the DR entity can + be recovered by the platform and used by the partition + performing a + set-indicator RTAS call with + allocation-state set to recover. + + + + +
+
+
+ + + R1--3. + + For all DR options except the PCI Hot Plug and LRDR + options: + If the + get-sensor-state call with the dr-entity-sense sensor + requires the DR entity to be powered up and/or unisolated to sense the + presence of the DR entity, then the + get-sensor-state call must return the error code of + -9000 or -9001, as defined in + , if the DR entity is powered + down or is isolated when the call is made. + + + <emphasis>get-sensor-state</emphasis> Error Status for All DR + Options + + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + Out + + + Status + + + -9000: Need DR entity to be powered up and unisolated + before RTAS call + -9001: Need DR entity to be powered up, but not + unisolated, before RTAS call + -9002: (see architecture note, directly below) + + + + +
+ + Architecture Note: The -9002 return code should not + be implemented. For legacy implementations if it is returned, then it + should be treated by the caller the same as a return value of 2 (DR + entity unusable). +
+
+ + + R1--4. + + For all DR options: + The value used + for the sensor-index input to the + get-sensor-state RTAS call for the sensors in + must be the index for the + connector, as passed in the + “ibm,drc-indexes” property. + + Hardware and Software Implementation Note: The status + introduced in Requirement + is not valid for + get-sensor-state calls when trying to sense insertion + status for PCI slots (see Requirement + ). + + Architecture Note: DR entity available for recovery + state is intended to allow a platform to temporary allocate to itself + resources on a reboot and then allow the OS to subsequently recover those + resources when no longer needed by the platform. An example of use would + be the platform temporarily reserving some LMBs to itself during a reboot + to store dump data, and then making the LMBs available to a OS partition + by marking them with the state of “available for recovery” + after the dump data has been transferred to the OS. + + +
+ +
+ +
+ <emphasis>set-indicator</emphasis> + This RTAS call is defined as shown in + . This RTAS call is used in DR to transition + between isolation states, allocation states, and control DR indicators. + In some cases, a state transition fails due to various conditions, + however, a null transition (commanding that the new state be what it + already is) always succeeds. As a consequence, this RTAS call is used in + all DR sequences to logically (and if necessary physically) isolate and + unisolate the connection between a DR entity and the platform. If + physical isolation is indeed required for the DR entity, this RTAS call + determines the necessity for isolation, not the calling program. + The + set-indicator allocation-state and + set-indicator isolation-state are linked. Before + calling + set-indicator with isolation-state set to unisolate, + the DR entity being unisolated will first need to be allocated to the OS. + If the + get-sensor-state call would return a value of DR + entity unusable or if it would return an error like -3 for the DR entity, + then the + set-indicator isolation-state to unisolate would fail + for that DR entity. + For sequencing requirements between this RTAS routine and others, + see Requirements + and + . + A single + set-indicator operation for indicator type 9001 may + require an extended period of time for execution. Following the + initiation of the hardware operation, if the + set-indicator call returns prior to successful + completion of the operation, the call will return either a status code of + -2 or 990x. A status code of -2 indicates that RTAS may be capable of + doing useful processing immediately. A status code of 990x indicates that + the platform requires an extended period of time, and hints at how much + time will be required before completion status can be obtained. Neither + the 990x nor the -2 status codes imply that the platform has initiated + the operation, but it is expected that the 990x status would only be used + if the operation had been initiated. + The following are the requirements for the base DR option. Other DR + options may put additional requirements on this RTAS call. + + indicates which DR indicators + are used with which DR connector types. + The + “rtas-indicators” and + “ibm,indicator-<token>” + OF properties are not applicable to DR + indicators defined in + . + + + + R1--1. + + For all DR options: The indicator state values + specified in + must be implemented as + specified in that table. + + + <emphasis>set-indicator</emphasis> Defined Indicators for all DR + Options + + + + + + + + + + + Indicator Name + + + + + Token Value + + + + + Defined State Values + + + + + Default Value + + + + + Examples/Comments + + + + + + + + isolation-state + + + 9001 + + + Isolate (0), + Unisolate (1) + + + Unisolated + + + This indicator must be implemented for DR connectors for + both physical and logical DR entities. Isolate refers to the DR + action to logically disconnect the DR entity from the platform. + An isolate operation makes the DR entity available to the + firmware, and in the case of a physical DR entity like a PCI + IOA, logically disconnects the DR entity from the platform (for + example, from the PCI bus). Unisolate refers to the DR action + to logically connect the entity. Before + set-indicator isolation-state to unisolate, + the DR entity being unisolated must first be allocated to the + OS. If the + get-sensor-state call with the + dr-entity-sense token would return a value of DR entity + unusable or if it would return an error like -3 for the DR + entity, then the + set-indicator isolation-state to unisolate + must fail for that DR entity. + + + + + dr-indicator + + + 9002 + + + Inactive (0), + Active (1), + Identify (2) + Action (3) + + + 0 if Inactive + 1 if Active + + + This indicator must be implemented for DR connectors for + physical DR entities. If the DR indicators exist for the DR + connector, then they are used to indicate the state of the DR + connector to the user. Usage of these states are as defined in + and + . + + + + + allocation-state + + + 9003 + + + unusable (0) + usable (1) + exchange (2) + recover (3) + + + NA + + + This indicator must be implemented for DR connectors for + logical DR entities. Used to allocate and deallocate entities + to the OS. The initial allocation state of a connector is + established based upon the initial allocation of resources to + the OS image. Subsequently, an OS may request a change of + allocation state by use of the + set-indicator with allocation-state token. + If the transition to the usable state is not possible the -3 + (no such indicator implemented) status is returned. + + + + +
+
+
+ + + R1--2. + + For all DR options: + The value used for the indicator-index input to the + set-indicator RTAS call for the indicators in + must be the index for the + connector, as passed in the + “ibm,drc-indexes” property. + + + + + R1--3. + + For all DR options: The + set-indicator call must return a -2 status, or + optionally for indicator type 9001 the 990x status, for each call until + the operation is complete; where the 990x status is defined in + . + + + + + R1--4. + + For all DR options: If this is a DR operation that + involves the user inserting a DR entity, then if the firmware can + determine that the inserted entity would cause a system disturbance, then + the + set-indicator RTAS call must not unisolate the entity + and must return an error status which is unique to the particular + error. + + + + + R1--5. + + For all DR options: If the + set-indicator index refers to a connector that would + return a “DR entity unusable” status (2) to the + get-sensor dr-entity-sense token, the + set-indicator RTAS return code must be “No such + indicator implemented” (-3), except in response to a successful + set-indicator allocation state usable. + + + + + R1--6. + + For all DR options combined with the LPAR option: The + RTAS + set-indicator specifying unusable allocation-state of + a DR connector must unmap the resource from the partition’s Page + Frame Table(s) and, as appropriate, its Translation Control Entry + tables. + + + + + R1--7. + + For all DR options combined with the LPAR option: The + successful completion of the RTAS + set-indicator specifying usable allocation-state of a + DR connector must allow subsequent mapping of the resource as appropriate + within the partition’s Page Frame Table(s) and/or its Translation + Control Entry tables. + + Software Implementation Note: The operation of the + set-indicator call is not complete at the time of the + return from the call if the “busy” status is returned. If it + is necessary to know when the operation is complete, the routine should + be called with the same parameters until a non-busy status is + returned. + + Hardware and Software Implementation Note: The + set-indicator (isolation-state) call is used to clear + RTAS internal tables regarding this device. The + ibm,configure-connector RTAS routine will need to be + called before using the entities below this connector, even if power was + never removed from an entity while it was in the isolated state. + + +
+
+ +
+ <emphasis>ibm,configure-connector</emphasis> RTAS Call + The RTAS function + ibm,configure-connector is a new RTAS call introduced + by DR and is used to configure a DR entity after it has been added by + either an add or replace operation. It is expected that the + ibm,configure-connector RTAS routine will have to be + called several times to complete the configuration of a dynamic + reconfiguration connector, due to the time required to complete the + entire configuration process. The work area contains the intermediate + state that RTAS needs to retain between calls. The work area consists of + 4096 byte pages of real storage on 4096 byte boundaries which can be + increased by one page on each call. The OS may interleave calls to + ibm,configure-connector for different dynamic + reconfiguration connectors, however, a separate work area will be + associated with each dynamic reconfiguration connector which is actively + being configured. Other standard RTAS locking rules apply. + The properties generated by the + ibm,configure-connector call are dependent on the + type of DR entities. For a list of properties generated, see the RTAS + Requirements section for each specific DR option. For example, for a list + of properties generated for PCI Hot Plug, see + . + For sequencing requirements between this RTAS routine and others, + see Requirement + . + + + + R1--1. + + For all DR options: The RTAS function + ibm,configure-connector must be implemented and must + implement the argument call buffer defined by + . + + + <emphasis>ibm,configure-connector</emphasis> Argument Call Buffer + + + + + + + + + Parameter Type + + + + + Name + + + + + Values + + + + + + + + In + + + + Token + + + + Token for + ibm,configure-connector + + + + + + Number Inputs + + + + 2 + + + + + + Number Outputs + + + + 1 + + + + + + Work area + + + + Address of work area + + + + + + Memory extent + + + + 0 or address of additional page + + + + + Out + + + + Status + + + + -9003: Cannot configure - Logical DR connector unusable, + available for exchange, or available for recovery. + -9002: Cannot configure - DR Entity cannot be supported + in this connector + -9001 Cannot configure - DR Entity cannot be supported in + this system + -2: Call again + -1: Hardware error + 0: Configuration complete + 1: Next sibling + 2: Next child + 3: Next property + 4: Previous parent + 5: Need more memory + 990X: Extended Delay + + + + +
+
+
+ + + R1--2. + + For all DR options: On the first call of a dynamic + reconfiguration sequence, the one page work area must be initialized by + the OS as in + . + + + Initial Work Area Initialization + + + + + + + + + Entry Offset + + + + + Value + + + + + + + + 0 + + + entry from the + “ibm,drc-indexes” property for + the connector to configure + + + + + 1 + + + 0 + + + + +
+ + Architecture Note: The entry offset in + is either four bytes or eight + bytes depending on whether RTAS was instantiated in 32-bit or 64-bit + mode, respectively. +
+
+ + + R1--3. + + For all DR options: On all subsequent calls of the + sequence, the work area must be returned unmodified from its state at the + last return from RTAS. + + + + + R1--4. + + For all DR options: The + ibm,configure-connector RTAS call must update any + necessary RTAS configuration state based upon the configuration changes + effected through the specified DR connector. + + +
+ + The sequence ends when either RTAS returns a “hardware + error” or “configuration complete” status code, at + which time the contents of the work area are undefined. If the OS no + longer wishes to continue configuring the connector, the OS may recycle + the work area and never recall RTAS with that work area. Unless the + sequence ends with Configuration Complete, the OS will assume that any + reported devices remain unconfigured and unusable. RTAS internal data + structures (outside of the work area) are not updated until the call + which returns “configuration complete” status. A subsequent + sequence of calls to + ibm,configure-connector with the same entry from the + “ibm,drc-indexes” property will restart + the configuration of devices which were not completely configured. + If the index from + “ibm,drc-indexes” refers to a connector + that would return an “DR entity unusable” status (2) to the + get-sensor RTAS call with dr-entity-sense token, the + ibm,configure-connector RTAS call for that index + immediately returns “-9003: Cannot configure - Logical DR connector + unusable” on the first call without any configuration action taken + on the DR connector. + A dynamic reconfiguration connector may attach several sibling OF + device tree architected devices. Each such device may be the parent of + one or more device sub-trees. The + ibm,configure-connector RTAS routine configures and + reports the entire sub-tree of devices rooted in previously unconfigured + architected devices found below the connector whose index is specified in + the first entry of the work area, except those that are associated with + an empty or unowned dynamic reconfiguration connector; where unowned + refers to a DR connector that would return a DR entity unusable, a DR + entity available for exchange, or a DR entity available for entity + available for recovery value, for a + get-sensor dr-entity-sense sensor. Configuration + proceeds in a depth first order. + If the + ibm,configure-connector RTAS routine returns with the + “call again” or 990x status, configuration is proceeding but + had to be suspended to maintain the short execution time requirement of + RTAS routines. No results are available. The OS should call the + ibm,configure-connector RTAS routine passing back the + work area unmodified at a later time to continue the configuration + process. + If the + ibm,configure-connector RTAS routine returns with a + “Cannot configure - DR Entity cannot be supported in this + connector”, then there is a lack of one or more resources at this + connector for this DR Entity and there is at least one DR connector in + the system into which this DR Entity can be configured. In this case, the + DR program should indicate to the user that they need to consult the + appropriate system documentation relative to the DR Entity that they are + trying to insert into the system. + The “need more memory” status code, is similar in + semantics to the “call again” status. However, on the next + ibm,configure-connector call, the OS will supply, via + the + Memory extent parameter, the address of another page + of memory for RTAS to add to the work area in order for configuration to + continue. On all other calls to + ibm,configure-connector the contents of the + Memory extent parameter should be 0. It is the + responsibility of the OS to recover all work area memory after a sequence + of + ibm,configure-connector calls is completed. + + Software Implementation Note: The OS may allocate the + work area from contiguous virtual space and pass individual discontiguous + real pages to + ibm,configure-connector as needed. + If the + ibm,configure-connector RTAS routine returns either + the “next sibling” or “next child” status codes, + configuration has detected an architected OF device tree device, and is + returning its OF device tree node-name. Work Area offset 2 contains an + offset within the first page of the work area to a NULL terminated string + containing the node-name. Note, if the caller needs to preserve this or + any other returned parameters between the various calls of a + configuration sequence it will copy the value to its own area. Also, the + first call returning configuration data will have a “next + child” status code. + The “next property” status code indicates that a + subsequent property is being returned for the device. Work Area entry + offset 2 contains an offset within the first page of the work area to a + NULL terminated string containing the property name. Work Area entry + offset 3 contains the length of the property value in bytes. Work Area + entry offset 4 contains an offset within the first page of the work area + to the value of the property. + + Architecture Note: The + ibm,configure-connector RTAS routine returns those + applicable properties that can be determined without interpreting any + FCode ROM which is associated with the IOA. Additionally, it is + permissible for this RTAS call to be aware of various specific IOAs and + emulate the action of any FCode associated with the IOA. + If the + ibm,configure-connector RTAS routine returns the + “previous parent” status code, it has come to the end of the + string of siblings, and will back up the tree one level following its + depth first order algorithm. The 2nd through 4th work area entries are + undefined for this status code. + + Software Implementation Notes: + + + + Any attempts to configure an already configured connector or one + in progress of being configured will produce unpredictable + results. + + + + The software will put the DR entity in the full on power state + before issuing the + ibm,configure-connector RTAS call to configure the DR + entity. + + + +
+
+ +
+ For All DR Options - OS Requirements + + +
+ Visual Indicator States + DR Visual indicator usage will be as indicated in the following + requirement, in order to provide for a consistent user interface across + platforms. Information on implementation dependent aspects of the DR + indicators can be found in + . + + + + R1--1. + + For all DR options: The visual indicators must be + used as defined in + . + + + + + + Visual Indicator Usage + + + + + + + + + State of indicator + + + + + Usage + + + + + + + + Inactive + + + The DR connector is inactive and entity may be removed or + added without system disruption. For DR entities that require + power off at the connector, then the caller of + set-indicator must turn power off prior to + setting the indicator to this state. See also + . + + + + + Identify (Locate) + + + This indicator state is used to allow the user to + identify the physical location of the DR connector. This state + may map to the same visual state (for example, blink rate) as + the Action state, or may map to a different state. See also + . + + + + + Action + + + Used to indicate to the user the DR connector on which + the user is to perform the current DR operation. This state may + map to the same visual state (for example, blink rate) as the + Identify state, or may map to a different state. See also + . + + + + + Active + + + The DR connector is active and entity removal may disrupt + system operation. See also + . + + + + +
+
+ +
+ Other Requirements + + + + R1--1. + + For all DR options: The OS must detect hierarchical + power domains (as specified in the + “power-domains-tree” property) and must + handle those properly during a DR operation. + + + + + R1--2. + + For all DR options: + When bringing a + DR entity online, the OS must issue the following RTAS calls in the + following order: + + + + + If the power domain is not 0, then call + set-power-level + + + + set-indicator (with the isolation-state token and a + state value of unisolate) + + + + ibm,configure-connector + + + + + + + R1--3. + + For all DR options: + When taking a DR + entity offline, the OS must issue the following RTAS calls in the + following order: + + + + set-indicator with the isolation-state token and a + state value of isolate) + + + + If the power domain is not 0, then call + set-power-level + + + + + + + R1--4. + + When bringing a DR entity online that + utilizes TCEs (see + ), the OS must initialize the DR + entity's TCEs. + + + + +
+
+
+ +
+ PCI Hot Plug DR Option + This section will develop the requirements over and beyond the base + DR option requirements, that are unique to being able to perform DR + operations on PCI plug-in cards that do not share power domains with other + PCI plug-in cards. + +
+ PCI Hot Plug DR - Platform Requirements + A method will be provided to isolate the plug-in card (power and + logic signals) and to physically remove the plug-in card from the + machine. The physical removal may pose an interesting mechanical + challenge, due to the position of the card edge connector relative to the + desired direction of insertion of the card from the outside of the + machine. In addition, PCI plug-in cards may have internal cables and may + span multiple slots. Such mechanical issues are not addressed by this + architecture. + This section describes the requirements for the platform when a + platform implements the PCI Hot Plug DR option. + + + + R1--1. + + For the PCI Hot Plug DR option: All platform + requirements of the base DR option architecture must be met ( + ). + + + + + R1--2. + + For the PCI Hot Plug DR option: All PCI requirements + must be met (for example, timing rules, power slew rates, etc.) as + specified in the appropriate PCI specifications, and in the + . + + + + + R1--3. + + For the PCI Hot Plug DR option: + The hardware must + provide two indicators per PCI Hot Plug slot, and all the following must + be true: + + + One indicator must be green and the platform must use the + indicator to indicate the power state of the PCI Hot Plug slot, turning + on the indicator when the slot power is turned on and turning off the + indicator when the slot power is turned off. + + + + The other indicator must be amber and must be controllable by + RTAS, separately from all other indicators, and must be used as a slot + Identify indicator, as defined in + . + + + + + + + + R1--4. + + For the PCI Hot Plug DR option: + The hardware must + provide a separate power domain for each PCI Hot Plug slot, controllable + by RTAS, and that power domain must not be used by any other DR connector + in the platform. + + + + + R1--5. + + For the PCI Hot Plug DR option: + The hardware must + provide the capability to RTAS to be able to read the insertion state of + each PCI Hot Plug slot individually and must provide the capability of + reading this information independent of the power and isolation status of + the plug-in card. + + + + + R1--6. + + For the PCI Hot Plug DR option: + The hardware must + provide individually controllable electrical isolation (disconnect) from + the PCI bus for each PCI Hot Plug slot, controllable by RTAS and this + isolation when set to the isolation mode must protect against errors + being introduced on the bus, and damage to the plug-in cards or planars + during the plug-in card power up, power down, insertion, and + removal. + + + + + R1--7. + + For the PCI Hot Plug option: + A platform must + prevent the change in frequency of a bus segment (for example, on the + insertion or removal of an plug-in card) while that change of frequency + would result in improper operation of the system. + + + + + R1--8. + + For the PCI Hot Plug option: For each PCI Hot Plug + slot which will accept only 32-bit (data width) plug-in cards, the + platform must: + + + Accommodate plug-in cards requiring up to 64 MB of PCI Memory + Space and 64 KB of PCI I/O space + + + + For TCE-mapped DMA address space, must provide the capability to + map simultaneously and at all times at least 128 MB of PCI Memory space + for the slot. + + + + + + + + R1--9. + + For the PCI Hot Plug option: Each PCI Hot Plug slot + which will accept 64-bit (data width) plug-in cards, the platform + must: + + + Accommodate plug-in cards requiring up to 128 MB of PCI Memory + Space and 64 KB of PCI I/O space + + + + For TCE-mapped DMA address space, must provide the capability to + map simultaneously and at all times at least 256 MB of PCI Memory space + for the slot. + + + + + + + + R1--10. + + For the PCI Hot Plug option with PCI Express: The + power and isolation controls must be implemented by use of the PCI + Standard Hot-Plug Controller (see + ). + + + + + R1--11. + + For the PCI Hot Plug option with PCI Express: If a + PCI Hot Plug DRC contains multiple PEs, then that DRC must be owned by + the platform or a trusted platform agent. + + Hardware implementation Notes: + + + + Surge current protection on the planar is one way to provide the + required protection against damage to components if an entity is removed + from or inserted into a connector with the power still applied to the + connector. + + + + Removal of an entity without the proper quiescing operation may + result in a system crash. + + + + In order for hot plugging of PCI plug-in cards with the system + operational to be useful, a mechanical means is needed in order to be + able to remove or insert PCI plug-in cards without shutting off system + power and without removing the covers above the plug-in cards (which in + general, would require powering-down the system). + + + + It is recommended that the control of the indicators required by + Requirement + be via the PCI Standard Hot + Plug Controller (see + ). + + + + + + + +
+ +
+ PCI Hot Plug DR - Boot Time Firmware Requirements + + + + R1--1. + + For the PCI Hot Plug DR option: All OF requirements + of the base DR option architecture must be met ( + ). + + + + + R1--2. + + For the PCI Hot Plug DR option: The OF must only + generate the + “clock-frequency” OF property for PCI + bridge nodes which cannot change bus clock frequency during a PCI Hot + Plug operation. + + + + + R1--3. + + For the PCI Hot Plug DR option: The OF must set the + PCI configuration register bits and fields appropriately. + + + + + + Hardware Implementation Note: The OF should leave + sufficient gaps in the bus numbers when configuring bridges and switches + such that plug-in cards with bridges and switches which are to be + supported by the platform’s DR operations can be plugged into every + slot in the platform in which those plug-in cards are supported. That is, + insertion of an plug-in card that contains a bridge or switch into a + platform, requires that there be sufficient available bus numbers + allocated to that PCI bus such that new bus numbers can be assigned to + the buses generated by the bridges and switches on the plug-in + cards. +
+ +
+ PCI Hot Plug DR - Run Time Firmware Requirements + + + + R1--1. + + For the PCI Hot Plug DR option: All RTAS requirements + of the base DR option architecture must be met ( + ). + + + + + R1--2. + + For the PCI Hot Plug DR option: The + set-indicator RTAS call with a indicator type of + isolation-state and a state value of unisolate (1) must not return a + “success” status until any IOA on a plug-in card inserted + into the PCI slot is ready to accept configuration cycles, and must + return a “success” status if the PCI slot is empty. + + + + + R1--3. + + For the PCI Hot Plug DR option: The + ibm,configure-connector RTAS call must initialize the + PCI configuration registers and platform to the same values as at boot + time. + + Architecture Note: During a DR replace operation, the + replacement PCI IOA may not get placed back at the same addresses, etc., + as the original DR entity by the firmware (although it has to be placed + back into the same DR connector, or it is not a DR replace operation). On + a replace operation, the configuration information cannot reliably be + read from the IOA being replaced (the IOA might be broken), so the + firmware cannot read the configuration information from the old IOA and + replace the configuration information into the new IOA. + PCI I/O sub-systems architecturally consist of two classes of + devices, bus bridges (Processor Host Bridges (PHBs), PCI to PCI Bridges, + and PCI Express switches and bridges) and IOAs. The support that + ibm,configure-connector provides for these two + classes is different. + For Bus Bridges, firmware will totally configure the bridge so that + it can probe down the depth of the tree. For this reason, the firmware + must include support for all bridges the platform supports. This includes + interrupt controllers as well as miscellaneous unarchitected devices that + do not appear in the OF device tree. The properties supported and + reported are the same as provided by the boot time firmware. + For PCI plug-in cards, the support is significantly less; it is + essentially the functionality specified in section 2.5 FCode Evaluation + Semantics of the + . However, the configuration + proceeds as if all devices do not have an expansion ROM since the RTAS + code does not attempt to determine if an FCode ROM is present nor + attempts to execute it. This may, in some cases, generate different + device node properties, values and methods than would happen had the IOA + been configured during boot. If the IOA’s device driver or + configuration support cannot deal with such differences, then the IOA is + not dynamically reconfigurable. The other properties generated are + dependent upon the IOA’s configuration header from the following + list. If the property is not on this list the reader should assume that + RTAS + ibm,configure-connector will not generate it. + + shows what PCI OF properties + can be expected to be returned from the + ibm,configure-connector call for PCI Hot Plug + operations and + shows some which can be + expected to not be returned. + + + + + R1--4. + + For the PCI Hot Plug DR option: The + ibm,configure-connector RTAS call when used for PCI + IOAs must return the properties named in + except as indicated in the + Present?/Source column. + + + PCI Property Names which will be Generated by + <emphasis>ibm,configure-connector</emphasis> + + + + + + + + Property Name + + + + + Present?/Source + + + + + + + + + “name” + + + + Always present. + + + + + + “vendor-id” + + + + Always present. From PCI header. + + + + + + “device-id” + + + + Always present. From PCI header. + + + + + + “revision-id” + + + + Always present. From PCI header. + + + + + + “class-code” + + + + Always present. From PCI header. + + + + + + “interrupts” + + + + Only present if Interrupt Pin register not 0. + + + + + + “min-grant” + + + + Present unless Header Type is 0x01. + + + + + + “max-latency” + + + + Present unless Header Type is 0x01. + + + + + + “devsel-speed” + + + + Only present for conventional PCI and PCI-X. + + + + + + “compatible” + + + + Always present. Constructed from the PCI header + information for the IOA or bridge. + + + + + + “fast-back-to-back” + + + + Only present for conventional PCI and PCI-X when Status + Register bit 7 is set. + + + + + + “subsystem-id” + + + + Only present if “Subsystem ID” register not + 0. + + + + + + “subsystem-vendor-id” + + + + Only present if “Subsystem vendor ID” + register not 0. + + + + + + “66mhz-capable” + + + + Only present for conventional PCI and PCI-X when Status + Register bit 5 is set. + + + + + + “133mhz-capable” + + + + Only present for PCI-X when PCI-X Status Register bit 17 + is set. + + + + + + “266mhz-capable” + + + + Only present for PCI-X when PCI-X Status Register bit 30 + is set. + + + + + + “533mhz-capable” + + + + Only present for PCI-X when PCI-X Status Register bit 31 + is set. + + + + + + “reg” + + + + Always present. Specifies address requirements. + + + + + + “assigned-addresses” + + + + Always present. Specifies address assignment. + + + + + + “ibm,loc-code” + + + + Always present. RTAS will have to remember the location + codes associated with all DR connectors so that it can build + this property. + + + + + + “ibm,my-drc-index” + + + + Always present. + + + + + + “ibm,vpd” + + + + Always present for sub-systems and for PCI IOAs which + follow the PCI VPD proposed standard. See + + and note to see the effect of + using different PCI versions. + + + + + + “device_type” + + + + For bridges, always present with a value of + “PCI” otherwise not + present. + + + + + + “ibm,req#msi” + + + + Present for all PCI Express IOA nodes which are + requesting MSI support, when the platform supports MSIs. + + + + +
+ + is a non-exhaustive list of + common properties that may not be generated by RTAS + ibm,configure connector for a PCI IOA. Also, the + concept of a phandle does not apply to nodes reported by + ibm,configure-connector. + + + Non-exhaustive list of PCI properties that may not be + generated by + <emphasis>ibm,configure connector</emphasis> + + + + + + + + + Property Name + + + + + Present?/Source + + + + + + + + + “ibm,connector-type” + + + + Never present -- only for built-in entries not for + pluggable ones. + + + + + + “ibm,wrap-plug-pn” + + + + Never present -- only for built-in entries not for + pluggable ones. + + + + + + “alternate-reg” + + + + Never present -- needs FCode. + + + + + + “fcode-rom-offset” + + + + Never present -- RTAS does not look for this. + + + + + + “wide” + + + + Never present -- needs FCode. + + + + + + “model” + + + + Never present -- needs FCode. + + + + + + “supported-network-types” + + + + Never present -- needs FCode. + + + + + + “address-bits” + + + + Never present -- needs FCode. + + + + + + “max-frame-size” + + + + Never present -- needs FCode. + + + + + + “local-mac-address” + + + + Never present -- needs FCode. + + + + + + “mac-address” + + + + Never present -- needs FCode. + + + + + + “built-in” + + + + Not present for a PCI Hot Plug connectors. + + + + +
+ + Architecture Note: Without + “device_type” and other properties, the + OS cannot append an IOA added via DR to the boot list for use during the + next boot. +
+
+ + + R1--5. + + For the PCI Hot Plug option: When + ibm,configure-connector RTAS call returns to the + caller, if the device driver(s) for any IOA(s) configured as part of the + call are EEH unaware (that is may produce data integrity exposures due to + an EEH stopped state) or if they may be EEH unaware, then the + ibm,configure-connector call must disable EEH prior + to returning to the caller. + + Software Implementation Note: To be EEH aware, a + device driver does not need to be able to recover from an EEH stopped + state, only recognize the all-1's condition and not use data from + operations that may have occurred since the last all-1's checkpoint. In + addition, the device driver under such failure circumstances needs to + turn off interrupts (using the + ibm,set-int-off RTAS call) in order to make sure that + any (unserviceable) interrupts from the IOA do not affect the system. + Note that this is the same device driver support needed to protect + against an IOA dying or against a no-DEVSEL type error (which may or may + not be the result of an IOA that has died). Note that if all-1’s + data may be valid, the + ibm,read-slot-reset-state2 RTAS call should be used + to discover the true EEH state of the device. + + +
+
+ +
+ PCI Hot Plug DR - OS Requirements + + + + R1--1. + + For the PCI Hot Plug DR option: All OS requirements + of the base DR option architecture must be met ( + ). + + + + +
+
+ +
+ Logical Resource Dynamic Reconfiguration (LRDR) + The Logical Resource Dynamic Reconfiguration option allows a platform + to make available and recover platform resources such as CPUs, Memory + Regions, Processor Host Bridges, and I/O slots to/from its operating OS + image(s). The Logical Resource Dynamic Reconfiguration option provides the + means for providing capacity on demand to the running OS and provides the + capability for the platform to make available spare parts (for example, + CPUs) to replace failing ones (called + sparing operations). Combined with the LPAR option, + platforms can move resources between partitions without rebooting the + partitions’ OS images. + The Logical Resource Dynamic Reconfiguration (LRDR) option deals with + logical rather than physical resources. These logical resources are already + physically installed (dynamic installation/removal of these resources, if + supported, is managed via the Hardware Management Console (HMC) or Service + Focal Point (SFP)). As such, the OS does not manage either connector power + or DR visual indicators. Logical connector power domains are specified as + “hot pluggable” (value -1) and DR visual indicators are not + defined for logical connectors. + The device tree contains logical resource DR connectors for the + maximum number of resources that the platform can allocate to the specific + OS. In some cases such as for processors and PHBs, this may be the maximum + number of these resources that the platform supports even if there are + fewer than that currently installed. In other cases, such as memory regions + in a LPARed system, the number may be limited to the amount of memory that + can be supported without resizing the cpu page frame table. The OS may use + the + get-sensor-state RTAS call with the dr-entity-sense + token to determine if a given drc-index refers to a connector that is + currently usable for DR operations. If the connector is not currently + usable the return state is “DR entity unusable” (2). A + set-indicator (isolation state) RTAS call to an + unusable connector or (dr-indicator) to any logical resource connector + results in a “No such indicator implemented” return + status. + Two allocation models are supported. In the first, resources are + specifically assigned to one and only one partition at a time by the HMC. + In this model, a DR entity state is changed from unusable to usable only by + firmware in response to HMC requests to explicitly move the allocation of + the resource between partitions. In the second model, certain resources may + “float” between cooperating partitions, a partition issues a + set-indicator (allocation state usable) RTAS call and + if the resource is free, the firmware assigns the resource to the + requesting partition and returns the success status. + Set-indicator returns the code + “no-such-indicator” if either the resource is not free, or the + platform is operating in the first model. To return a resource to the + platform firmware, the OS issues a + set-indicator (allocation state unusable) RTAS call for + the resource’s DR connector. + +
+ Platform Requirements for LRDR + The following requirements apply to the hardware and/or firmware as + a result of implementing LRDR on a platform. + + + + R1--1. + + For the LRDR option: The hardware must provide the + capability to power-cycle any hardware that is going to be switched + between partitions as part of LRDR, if that hardware requires + power-cycling to put the hardware into a known state (for example, PCI + IOAs). + + Architecture Note: Except for PCI Express IOAs that + implement the Function Level Reset (FLR) option, since the PCI + architecture is not specific as to the state of the IOA when the IOAs + reset is activated and deactivated, either the platform designer will + need to guarantee that all logic in all IOAs (including any internal + storage associated with the IOA) is cleared to a known state by use of + the IOAs' reset, or else the platform will need to provide the capability + to power-cycle those IOAs, including the integrated ones (that is, + including the non-pluggable ones). Also note that hardware which requires + power-cycling to initialize may impact the capability to reliably reboot + an OS, independent of whether or not LRDR is implemented. + + + + + R1--2. + + For the LRDR option: + Any power-cycling + of the hardware which is done by the platform during an LRDR operation + (for example, as part of an ibm,configure-connector operation), must be + functionally transparent to the software, except that PCI plug-in cards + that are plugged into a PCI Hot Plug DR connector do not need to be + powered on before the + ibm,configure-connector call for a logical SLOT DR + connector returns to the caller. + + Architecture Note: PCI plug-in cards that are plugged + into a DR connector will not be configured as part of an + ibm,configure-connector operation on a logical DR connector of type SLOT + above the plug-in card (see section 17.6.3.3 ibm,configure-connector). + However, Requirement + does require a PCI IOA which is + not plugged in to a PCI Hot Plug DR connector (for example, soldered on + the planar) be powered up and configured as a result of an + ibm,configure-connector operation on a logical DR connector of type SLOT + above such an IOA, and requires this powering up to be functionally + transparent to the caller of ibm,configure-connector operation (a longer + busy time is not considered to be a violation of the functional + transparency requirement). + + + +
+ +
+ DR Properties for Logical Resources + Logical resource dynamic reconfiguration is a special case of + general DR, therefore, certain DR properties take on special + values. + + DR Property Values for Logical Resources + + + + + + + + Property Name + + + + + Property Value + + + + + + + + + “ibm,drc-indexes” + + + + As defined in + . + + + + + + “ibm,my-drc-index” + + + + As defined in + . + + + + + + “ibm,drc-names” + + + + As defined in + . + Note: + This name + allows for correlation between the OS and HMC user + interfaces. + + + + + + “ibm,drc-power-domains” + + + + Logical Resource connectors are defined to be “hot + pluggable” having a domain value of -1 per definition in + . + + + + + + “ibm,drc-types” + + + + Shall be one of the values “CPU”, + “MEM”, “PHB”, or “SLOT” as + defined in + . + + + + +
+ + + + R1--1. + + For the LRDR option: All platform requirements of the + base DR option architecture must be met ( + ). + + + + + R1--2. + + For the LRDR option: The + /cpus OF device tree node must include + “ibm,drc-types” (of type CPU), + “ibm,drc-power-domains” + (of value -1), + “ibm,drc-names”, and + “ibm,drc-indexes” + properties with entries for each potentially + supported dynamically reconfigurable processor. + + + + + R1--3. + + For the LRDR option: The root node of the OF device + tree must include + “ibm,drc-types” + (of type MEM), + “ibm,drc-power-domains” + (of value -1), + “ibm,drc-names”, and + “ibm,drc-indexes” + properties with entries for each potentially + supported dynamically reconfigurable memory region. + + + + + R1--4. + + For the LRDR option: The root node of the OF device + tree must not include any drc properties ( + “ibm,drc-*”) for the base memory region + (reg value 0). + + + + + R1--5. + + For the LRDR option: The root node of the OF device + tree must include + “ibm,drc-types” + (of type PHB), + “ibm,drc-power-domains” + (of value -1), + “ibm,drc-names”, and + “ibm,drc-indexes” + properties with entries for each potentially + supported dynamically reconfigurable PHB. + + + + + R1--6. + + For the LRDR option: The + /pci OF device tree node representing a PHB must + include + “ibm,drc-types” + (of type SLOT), + “ibm,drc-power-domains” + (of value -1), + “ibm,drc-names”, and + “ibm,drc-indexes” + properties with entries for each potentially + supported dynamically reconfigurable PCI SLOT. + + + + + R1--7. + + For the LRDR option: platforms must implement the + allocation-state indicator 9003, as defined in + . + + + + + R1--8. + + For the LRDR option: For memory LRDR, the + “ibm,lrdr-capacity” property must be + included in the + /rtas node of the partition device tree (see + ). + + + +
+ +
+ Architectural Intent -- Logical DR Sequences: + This architecture is designed to support the logical DR sequences + specified in the following sections. See also + . + +
+ Acquire Logical Resource from Resource Pool + + + + The OS responds to some stimuli (command, workload manager, HMC, + etc.) to acquire the resource, perhaps using the + “ibm,drc-names” value as a reference if a + human interface is involved. + + + + The OS determines + if the resource is usable: + + + + OS uses + get-sensor-state (dr-entity-sense) to determine the + state of the DR connector + + + + If the state is “unusable” the OS issues + set-indicator (allocation-state, usable) to attempt + to allocate the resource. Similarly, if the state is “available for + exchange” the OS issues + set-indicator (allocation-state, exchange) to attempt + to allocate the resource, and if the state is “available for + recovery” the OS issues + set-indicator (allocation-state, recover) to attempt + to allocate the resource. + + + + If successful, continue, else return error status to the + requester. If successful, this is the point where the resource is + allocated to the OS. + + + + + + Continue with DR operation. + + + + The OS unisolates the resource via + set-indicator (isolation-state, unisolate). This is + the point where the OS takes ownership of the resource from the platform + firmware and the firmware removes the resource from its resource + pool. + + + + The OS configures the resource using + ibm,configure-connector RTAS. + + + + The OS incorporates the resource into its resource pool. + + + + If the resource is a processor, the OS must use the + start-cpu RTAS call to move the processor from the + stopped state (at the end of the + ibm,configure-connector) to the running + state. + + + + + + The OS returns status of operation to the requester. + + + + + + The OS notifies requesting entity of the OS state relative to + the resource acquisition. + + +
+ +
+ Release Logical Resource + + + + Some entity (System administrator commanding from the HMC, a + workload manager, etc.) requests the OS to release the resource using the + “ibm,drc-names” value as a + reference. + + + + The OS attempts to stop using logical resource. + + + + If the resource is a processor, the OS calls the + stop-self RTAS call then waits for the processor to + enter the stopped state using the RTAS + query-cpu-stopped-state call. + + + + The OS isolates the resource via + set-indicator (isolation-state, isolate). + + + + Unless the isolated resource was the partition’s last + processor, the OS deallocates the resource via + set-indicator (allocation-state, unusable). This is + the point where the platform firmware takes ownership of the resource + from the OS. That is, the OS removes the resource from its resource pool + and the firmware adds it to the firmware resource pool. + + + + + + The OS returns status of operation to the requester. + + + + + + The OS unallocates the resource by + set-indicator (allocation-state, unusable). + + + + The system administrator may command the HMC to allocate the + logical resource to another partition (LPAR) or reserved pool + (COD). + + + + Any needed hardware removal is handled by HMC/SPC. + + +
+
+ +
+ RTAS Call Semantics/Restrictions + This section describes the unique application of DR RTAS functions + to the dynamic reconfiguration of logical resources. + +
+ <emphasis>set-indicator</emphasis> (isolation-state, isolate) + Dynamic reconfiguration of logical resources introduces special + meaning and restrictions to the DR connector isolation function depending + upon the logical resource being isolated. + +
+ Isolation of CPUs + The isolation of a CPU, in all cases, is preceded by the + stop-self RTAS function for all processor threads, + and the OS insures that all the CPU’s threads are in the RTAS + stopped state prior to isolating the CPU. Isolation of a processor that + is not stopped produces unpredictable results. The stopping of the last + processor thread of a LPAR partition effectively kills the partition, and + at that point, ownership of all partition resources reverts to the + platform firmware. + + + + R1--1. + + For the LRDR option: Prior to issuing the RTAS + set-indicator specifying isolate isolation-state of a + CPU DR connector type, all the CPU threads must be in the RTAS stopped + state. + + + + + R1--2. + + For the LRDR option: Stopping of the last processor + thread of a LPAR partition with the + stop-self RTAS function, must kill the partition, + with ownership of all partition resources reverting to the platform + firmware. + + + +
+ +
+ Isolation of MEM Regions + Isolation of a MEM region creates a paradox if the MEM region being + isolated contains the calling program (there being no program left for + the firmware to return). + + Note: The base memory region (starting at address + zero) is not associated with a MEM DR connector. This means that the base + memory region cannot be isolated. This restriction avoids two fatal + conditions, attempts to isolate the region containing RTAS, and attempts + to isolate the region containing the interrupt vectors. + It is the responsibility of the OS to unmap the addresses of the + MEM region being isolated from both PFT and the TCE tables. When the LRDR + option is combined with the LPAR option, the hypervisor ensures that the + addresses of the MEM region being isolated are unmapped from both the PFT + and TCE tables before successfully completing the isolation of the MEM + region. If any valid mappings are found, the RTAS + set-indicator (isolation-state) does not change the + isolation-state and returns with a + Status-9001 (Valid outstanding translation). + + + + R1--1. + + For the LRDR option: The caller of the RTAS + set-indicator specifying isolate isolation-state of a + MEM DR connector type must not be within the region being + isolated. + + + + + R1--2. + + For the LRDR option combined with the LPAR option: + The RTAS set-indicator specifying isolate isolation-state of a + MEM DR connector type must check that the region is unmapped from both + the partition’s Page Frame Table(s) and any Translation Control + Entries that would reference the memory, else the RTAS routine must + return with a status of + Status-9001 (Valid outstanding translation) and the + isolation-state is not changed. + + + + + + Implementation Note: The algorithm chosen for + implementing Requirement + depends upon the expected + frequency of isolation events. For RAS reasons, they should be seldom. + For load balancing, they may be far more frequent. These methods are + briefly described here: + + + + First pull the corresponding logical address from the + partition’s valid space so setting new translations to the logical + address are not possible. Then wait for any current in flight translation + additions to complete. Followed by either scanning the entire PFT and TCE + tables looking for valid translations or checking a use count for the + particular logical address range. The PFT/TCE table search may be long, + however, it is only done at isolation time. + + + + The use count method must be maintained for each add and remove + of an address translation with the corresponding accessing of a use count + based upon the physical real address of the memory block. + + +
+ +
+ Isolation of PHBs and Slots + An isolation of a PHB naturally disconnects the OS image from any + of the DR connectors downstream of the PHB (specifically any I/O slots + and PCI Hot Plug connectors associated with the PHB). To avoid the + complexity of gracefully managing multi-level isolation, isolation is + restricted to only “leaf” DR connectors, that is connectors + that have no unisolated or usable DR connectors below them. That is, for + logical DR connectors below the connector being isolated, a + get-sensor-state dr-entity-sense needs to return an + unusable (2) and for physical DR connectors below the connector being + isolated, the DR entity needs to be isolated first via + set-indicator (isolation-state, isolate). The OS is + responsible for removing all virtual address mappings to the address + range associated with a logical I/O SLOT before making the RTAS + set-indicator (isolation-state) call that isolates + the SLOT. When the LRDR option is combined with the LPAR option, the + hypervisor ensures that the addresses associated with the logical SLOT + being isolated are unmapped from both the PFT and TCE tables before + successfully completing the isolation of the SLOT connector. If any valid + mappings are found, the RTAS + set-indicator (isolation-state) does not change the + isolation-state and returns with a + Status-9001 (Valid outstanding translation). + + + + R1--1. + + For all LRDR options: If a request to + set-indicator (isolation-state, isolate) would result + in the isolation of one or more other DR connectors which are currently + unisolated or usable, then the + set-indicator RTAS must fail with a return code of + “Multi-level isolation error” (-9000). + + + + + R1--2. + + For the LRDR option combined with the LPAR + option: The RTAS + set-indicator specifying isolate isolation-state of a + SLOT DR connector type must check that the IOA address range associated + with the slot is unmapped from both the partition’s Page Frame + Table(s) and any Translation Control Entries that would reference those + locations, else the RTAS routine must return with a + Status-9001 (Valid outstanding translation) and the + isolation-state is not changed. + + + +
+
+
+ +
+ <emphasis>set-indicator</emphasis> (dr-indicator) + Logical connectors do not have associated dr-indicators (token + value 9002). An attempt to set the state of such an indicator results in + a “No such indicator implemented” return status. + + + + + R1--1. + + For all LRDR options: The calling of + set-indicator with a token value of 9002 + (dr-indicator) and an index representing a logical connector must fail + with a return code of “No such indicator implemented” + (-3). + + + +
+ +
+ <emphasis>ibm,configure-connector</emphasis> + The + ibm,configure-connector RTAS call is used to return + to the OS the device tree nodes and properties associated with the newly + un-isolated logical resources and configure them for use. + The + ibm,configure-connector RTAS call used against a + logical DR connector can encounter other logical DR connectors or + physical DR connectors below it in the tree. If a logical connector is + encountered below a logical connector that is being configured, the + ibm,configure-connector RTAS call will not configure + the sub-tree, if it is not owned by the OS (where owned refers to a DR + connector that would return a DR entity usable, for a + get-sensor dr-entity-sense sensor). If a physical + connector is encountered, then the sub-tree below the physical connector + may or may not be configured, depending on the implementation. + + Architecture Note: The requirements of this section + specify the minimum sub-tree contents returned for various connector + types. Implementations may optionally return other valid previously + reported nodes that represent the current configuration of the device + tree. Previously reported nodes may not have any changes from their + previously reported state. A node that was removed from the configuration + due to a DR operation and returns due to a subsequent DR operation is not + considered to have been previously reported. It is the caller's + responsibility to recognize previously reported nodes. + + + + R1--1. + + For all LRDR options: If a request to + ibm,configure-connector specifies a connector that is + isolated, + ibm,configure-connector must immediately return + configuration complete. + + + + + R1--2. + + For all LRDR options: If the connector index refers + to a connector that would return a “DR entity unusable” + status (2), “DR entity available for exchange” status (3), or + “DR entity available for recovery” status (4) to the + get-sensor dr-entity-sense token, the + ibm,configure-connector RTAS call must return + “-9003: Cannot configure - Logical DR connector unusable, available + for exchange, or available for recovery” on the first call without + any configuration action taken on the DR connector. + + + + + R1--3. + + For all LRDR options: If a request to + ibm,configure-connector specifies a connector of type + CPU, + the returned sub-tree must consist of the specific + cpu-node, its children, and any referenced nodes that had not been + previously reported (such as L2 and L3 caches etc.) all containing the + properties as would be contained in those nodes had they been available + at boot time. + + Implementation Note: Future platforms that support + concurrent maintenance of caches, will require that high level cache + nodes (L2, L3 etc.) are added by + ibm,configure-connector such that their properties + can change as new/repaired hardware is added to the platform. Therefore, + it is the OS's responsibility when isolating a CPU to purge any + information it may have regarding an orphaned high level cache node. The + OS may use the + “ibm,phandle” property to selectively + remove caches when a processor is removed. The platform considers any + high level cache that is newly referenced (reference count for this + partition goes from 0 to 1) to have been previously unreported. + + + + + R1--4. + + For all LRDR options: If a request to + ibm,configure-connector specifies a connector of type + MEM, + the returned sub-tree must consist of the specific + ibm,memory-region node containing the properties as + would be contained in that node had it been available at boot + time. + + + + + R1--5. + + For all LRDR options: If a request to + ibm,configure-connector specifies a connector of type + PHB or SLOT, then all of the following must be true: + + + The returned values must represent the sub-tree for the specific + I/O sub-system represented by the connector, except for entities below + any DR connectors (logical or physical) which are below the connector + which is the target of the ibm,configure-connector operation (that is, + the ibm,configure-connector operation stops at any DR connector). + + + + The sub-tree must consist of the specific node and its children + all containing the properties as would be contained in those nodes had + they been available at boot time, including (if they exist) built-in PCI + IOAs. + + + + + + + + R1--6. + + For all LRDR options: If a request to + ibm,configure-connector specifies a connector of type + SLOT, + the returned values must represent the sub-tree for + the specific I/O sub-system represented by the SLOT connector, and the + sub-tree must consist of the specific + /pci node and its children all containing the + properties as would be contained in those nodes had they been available + at boot time, except for the PCI IOA nodes assigned to the OS image that + contain the same properties as they would following a PCI hot plug + operation (see + ). + + + + + R1--7. + + For all LRDR options: If a platform implementation + powers-up and configures physical DR entities in the sub-tree under a + logical DR connector, then a request to + ibm,configure-connector of the logical DR connector + must use the return status of 990x from the + ibm,configure-connector call, as necessary, during + the DR entity power-up sequence(s) and must control any power-up and + sequencing requirements, as would be done by the platform during platform + power-up. + + + + +
+
+
diff --git a/Virtualization/ch_lpar_option.xml b/Virtualization/ch_lpar_option.xml new file mode 100644 index 0000000..019471f --- /dev/null +++ b/Virtualization/ch_lpar_option.xml @@ -0,0 +1,18584 @@ + + Logical Partitioning Option + +
+ Overview + The Logical PARtitioning option (LPAR) simultaneously runs one or + more copies of a single OS or multiple heterogeneous LoPAR compliant OSs + on a single LoPAR platform. A partition, within which an OS image runs, is + assigned a non-overlapping sub-set of the platform’s resources. These + platform-allocatable resources include one or more architecturally distinct + processors with their interrupt management area, regions of system memory, + and I/O adapter bus slots. Partition firmware loaded into each partition + generates an OF device tree to represent the resources of the partition to + the OS image. Allocatable resources are directly controlled by an OS. This + architecture restricts the sharing of allocatable resources between + partitions; to do so requires the use of optional facilities presented in + . Platform resources, other than + allocatable resources mentioned above, that are represented by OF nodes in + the device tree of more than one partition (for example, memory controllers + and processor host bridges) are marked ‘used-by-rtas’. + Since one of the main purposes of partitioning is isolation of the + OSs, the ability to manage real system resources that are common to all + partitions is modified for the LPAR option. This means that partition use + of RTAS functions which ostensibly use real system resources such as power + and time-of-day clocks are buffered from actual manipulation of those + resources. The RTAS is modified for LPAR, and has hypervisor support, to + virtualize real resources for the partitions. Operational management of the + platform moves to a Hardware Management Console (HMC) which is an + application, either local or remote, that manages platform resources with + messages to the hypervisor rather than being under direct control of a + partition’s OS. + Platforms supporting LPAR, contain Power PC processors that support + the hypervisor addressing mode, in which the physical address is equal to + the effective address and all processor resources are available. The + “Real Mode” addressing mode, in these processors, is redefined + to translate and limit the physical addresses that the processor can access + and to restrict access to certain address translation controlling processor + resources. The virtual addressing mode is unchanged. See the + (level 2.0 and beyond) for the + architecture extensions required for the processor. + The I/O subsystems of these platforms contain I/O bridges that + restrict the bus addresses that I/O adapters can access. These restricted + bus addresses are subsequently translated through the Translation Control + Entry (TCE) mechanism to restrict Direct Memory Accesses (DMAs) by I/O + devices. This restriction is to system memory allocated to a partition and + managed by the OS image owning the device. The interrupt subsystem of these + platforms is enhanced with multiple (one per partition) global interrupt + queues to direct interrupts to any processor assigned to the I/O + adapter’s owning OS image. + Logical Partitioning platforms employ a unique firmware component + called the hypervisor (that runs in hypervisor mode) to manage the address + mapping and common platform hardware facilities, thereby ensuring isolation + between partitions. The OS uses new hypervisor interfaces to manage the + partition’s page frame and TCE tables. The platform firmware utilizes + implementation dependent interfaces to platform hardware common to all + partitions. Thus, a system with LPAR has different OS support than a system + without LPAR. + In addition to generating per partition device trees, the OF + component of a logically partitioned platform manages the initial booting + and any subsequent booting of the specific OS image associated with each + partition. + The NVRAM of a platform contains configuration variables, policy + options, and working storage that is protected from accesses that might + adversely affect one or more partitions and their OS images. The hypervisor + firmware component restricts an OS image’s access to NVRAM to a + region assigned to its partition. This may restrict the number of + partitions. + Most system management on systems without LPAR is performed by OS + based applications that are given access to modify the platform’s + configuration variables, policy options and firmware flash. For various + Reliability Availability and Serviceability (RAS) reasons, LoPAR Logical + Partitioning platforms do not restrict platform operational management + functions to applications running on a preferred partition or OS image. + Access to these Operational Management facilities is provided via a Support + Processor communication port that is connected to an HMC and/or through a + communications port that is connected through a PCI adapter in a partition. + The HMC is a set of applications running in a separate stand-alone platform + or in one of the platform’s partitions. These HMC applications are + required to establish the platform’s LPAR configuration, however, the + configuration is stored in the platform and, therefore, the HMC is not + required to boot or operate the platform in a pre-configured non-error + condition. + +
+ Real Mode Accesses + When the OS controlling an LPAR runs with address translation + turned off (MSRDR or MSRIR + bit(s) =0) (real mode) the LPAR hardware + translates the memory addresses to an LPAR unique area known as the Real + Mode Area (RMA). When control is initially passed to the OS from the + platform, the RMA starts at the LPAR's logical address 0 and is the first + logical memory block reported in the LPAR’s device tree. In + general, the RMA is a subset of the LPAR's logical address space. + Attempting a non relocated access beyond the bounds of the RMA results in + an storage interrupt (ISI/DSI depending upon instruction or data + reference). The RMA hardware translation scheme is platform dependent. + The options are given below. + +
+ Offset and Limit Registers + The Offset RMA architecture checks the LPAR effective address + against the contents of an RMOL register allowing the access, after + adding an LPAR specific offset to form the real address, if the effective + address is less, else signaling a protection exception. +
+ +
+ Reserved Virtual Addresses + The platform may map the RMA through the hashed paged table via a + reserved range of virtual addresses. This mapping from the effective + address is done by setting the high order virtual address bits + corresponding to the VSID to the 0b00 || 0x001FFFFFF 1 TB VSID value. + This virtual address is then translated as other virtual addresses. If + the effective address is outside the bounds of the RMA, the storage + interrupt signals a PTEG miss. The platform firmware prepopulates the + LPAR's page frame table with “bolted” entries representing + the real storage blocks that make up the RMA. Note, this method allows + for the RMA to be discontiguous in real address space. The Virtualized + Real Mode Area (VRMA) option gives the OS the ability to dynamically + relocate, expand, and shrink the RMA. See + for more details. +
+
+ +
+ General LPAR Reservations and Conventions + This section documents general LPAR reserved facilities and + conventions. Other sections document reserved facilities and conventions + specific to the function they describe. + + + + R1--1. + + For the LPAR option: To avoid conflict with the + platform’s reserved addresses, the OS must not use the 1 TB (SLB + and PTE B field equal to one) 0b00 || 0x001FFFFFF VSID for purposes other + than virtualizing the RMA. + + + + + R1--2. + + For the LPAR option: In order to avoid a storage + exception, the OS must not remove PTEs marked with the + “bolted” indicator (PTE bit 59 = 1) unless the virtual + address space can be referenced by another PTE or the OS does not intend + to access the virtual address space. + + + + + R1--3. + + For the LPAR option: To avoid conflict with the + platform’s hypervisor, the OS must be prepared to share use of + SPRG2 as the interrupt scratch register whenever an hcall() is made, or a + machine check or reset interrupt is taken. + + + + + R1--4. + + For the LPAR option: If the platform virtualizes the + RMA, prior to transferring control to the OS, the platform must select a + page size for the RMA such that the platform uses only one page table + entry per page table entry group to virtualize the RMA. + + + + + R1--5. + + For the LPAR option: If the platform virtualizes the + RMA, prior to transferring control to the OS, the platform must use only + the last page table entry of a page table entry group to virtualize the + RMA. + + + + +
+
+ +
+ Processor Requirements + + + + R1--1. + + For the LPAR option: The platform processors must + support the Logical Partitioning (LPAR) facilities as defined in + (Version 2.0 or later). + + + + +
+ +
+ I/O Sub-System Requirements + The platform divides the I/O subsystem up into Partitionable + Endpoints (PEs). See + for more information on PEs. Each PE has + its own (separate) error, addressing, and interrupt domains which allows + the assignment of separate PEs to different LPAR partitions. + The following are the requirements for I/O subsystems when the + platform implements LPAR. + + + + R1--1. + + For the LPAR option: The platform must provide methods + and mechanisms to isolate IOA and I/O bus errors from one PE from affecting + another PE, from affecting a partition to which the PE is not given access + authority by the platform, and from affecting system resources such as the + service processor which are shared between partitions, and must do so with + the EEH option programming model. + + + + + R1--2. + + For the LPAR option: + The platform must enable the EEH option for all PEs by default. + Software and Firmware Implementation Notes: For the + platform (versus the OS or device driver) to enable EEH, there must be some + assurance that the device drivers are EEH aware, if not EEH enabled. For + example, the device driver or OS may signal its awareness by using + ibm,set-eeh-option RTAS call to enable EEH prior to a + configuration cycle via the + ibm,write-pci-config RTAS call which enables the Memory + Space or IO Space enable bits in the PCI Command register, and firmware can + ignore the + ibm,write-pci-config RTAS call which enables the Memory + Space or IO Space enable bits for an IOA if EEH for that IOA has not been + enabled first. To be EEH aware, a device driver does not need to be able to + recover from an MMIO Stopped and DMA Stopped state, only recognize the + all-1's condition (from a + Load from its IOA or on a PCI configuration read from + its IOA) and not use data from operations that may have occurred since the + last all-1's checkpoint. In addition, the device driver under such failure + circumstances needs to turn off interrupts (using the + ibm,set-int-off RTAS call, or for conventional PCI and + PCI-X infrastructures only: by resetting the IOA and keeping it reset with + ibm,set-slot-reset or + ibm,slot-error-detail) to make sure that any + (unserviceable) interrupts from the IOA do not affect the system (MSIs are + blocked by the EEH DMA Stopped State, but LSIs are not). Note that if + all-1’s data may be valid, the + ibm,read-slot-reset-state2 RTAS call should be used to + discover the true EEH state of the device. + + + + + R1--3. + + For the LPAR option: The platform must assign a PE to + one and only one partition at a time. + + + + + R1--4. + + For the LPAR option: + The platform must limit the DMA addresses accessible to a PE to the address ranges assigned + to the partition to which the PE is allocated, and, if the PE is used to + implement a VIO device, then also to any allowed redirected DMA address + ranges. + + Architecture and Implementation Notes: + + + Platforms which do not implement either Requirement + or Requirement + require PE granularity of + everything below the PHB, resulting in poor LPAR partition I/O assignment + granularity. + + + + Requirement + has implications in preventing access to both to I/O address + ranges and system memory address ranges. That is, Requirement + + + requires prevention of peer to peer operations from one IOA to + another IOA when those IOA addresses are not owned by the same partition, + as well as to providing an access protection mechanism to protect system + memory. Note that relative to peer to peer operations, some bridges or + switches may not provide the capabilities to limit peer to peer, and the + use of such bridges or switches require the limitation that all IOAs under + such bridges or switches be assigned to the same partition. + + + + + + + + R1--5. + + For the LPAR option: The platform must + provide a PE the capability of accessing all of the System Memory addresses + assigned to the partition to which the PE is allocated. + + + + + R1--6. + + For the LPAR option: If TCEs are used to satisfy + Requirements + , and + , then the platform must provide + the capability to map simultaneously and at all times at least 256 MB for + each PE. + + + + + R1--7. + + For the LPAR option: If TCEs are used to satisfy + Requirements + , and + , then the platform must prevent + any DMA operations to System Memory addresses which are not translated by + TCEs. + + + + + R1--8. + + For the LPAR option: The DMA address range accessible + to a PCI IOA on its I/O bus must be defined by the + “ibm,dma-window” property in its + parent’s OF device tree node. + Platform Implementation Note: To maximize the ability to migrate + memory pages underneath active DMA operations, when ever possible, a bridge + should create a bus for a single IOA and either its representing bridge + node should include the + “ibm,dma-window” property specific for the + IOA for conventional PCI or PCI-X IOAs or the IOA function nodes should + contain the + “ibm,my-dma-window” property specific for + the IOA function for PCI Express IOAs. When the configuration of a bus + precludes memory migration, the platform may combine the DMA address for + multiple IOAs that share a bus into a single + “ibm,dma-window” property housed in the + bridge node representing the bridge that creates the shared bus. + + + + +
+ +
+ Interrupt Sub-System Requirements + + + + R1--1. + + For the LPAR option: The platform must + not assign the same interrupt (LSI or MSI) or same interrupt source number + to different PEs (interrupts cannot be shared between partitions). + + + + + R1--2. + + For the LPAR option: The interrupt presentation layer + must support at least one global interrupt queue per platform supported + partition. + + + + + R1--3. + + For the LPAR option: The interrupt presentation layer + must separate the per processor interrupt management areas into a separate + 4 K pages per processor so that they can each be individually protected by + the PTE mechanism and assigned to their respective assigned + partitions. + + + + + R1--4. + + For the LPAR option: The platform must restrict the + processors that service a global queue to those assigned to a single + partition. + + + + + R1--5. + + For the LPAR option: If the interrupt source layer + supports message signaled interrupts, the platform must isolate the PCI + Message interrupt Input Port (PMIP) in its own 4 K page of the + platform’s address space. + + + + + R1--6. + + For the LPAR option: If the interrupt source layer + supports message signaled interrupts, the hardware must ignore all writes + to the PMIP’s 4 K page except those to the PMIP itself. + + + + + R1--7. + + For the LPAR option: If the interrupt source layer + supports message signaled interrupts, the hardware must return all ones on + reads of the PMIP’s 4 K page except those to the PMIP itself. + Signalling a machine check interrupt to the affected processor on a read + that returns all 1s as above is optional. + + + + + R1--8. + + For the LPAR option: The interrupt source layer must + support a means in addition to the inter-processor interrupt mechanism for + the hypervisor to signal an interrupt to any processor assigned to a + partition. + + Software Note: While firmware takes all reasonable + steps to prevent it, it may be possible, on some hardware implementations, + for an OS to erroneously direct an individual IOA’s interrupt to + another partition’s processor. An OS supporting LPAR should ignore + such “Phantom” interrupts. + + + + +
+ +
+ Hypervisor Requirements + The purpose of the hypervisor is to virtualize the facilities of + platforms, with LPAR, such that multiple copies of a LoPAR compliant OS + may simultaneously run protected from each other in different logical + partitions of the platform. That is, the various OS images may, without + explicit knowledge of each other, boot, run applications, handle exceptions + and events and terminate without affecting each other. + The hypervisor is entered by way of three interrupts: the System + Reset Interrupt, the Machine Check Interrupt and System (hypervisor) Call + Interrupt. These use hypervisor interrupt vectors 0x0100, 0x0200, and + 0x0C00 respectively. In addition, a processor implementation dependent + interrupt, at its assigned address may cause the hypervisor to be entered. + The return from the hypervisor to the OS is via the rfid (Return from + Interrupt Doubleword) instruction. The target of the rfid (instruction at + the address contained in SRR0) is either a firmware glue routine (in the + case of System Reset or Machine Check) or the instruction immediately + following the invoking hypervisor call. The reason for the firmware glue + routines is that the OS must do its own processing because of the + asynchronous nature of System Reset or Machine Check interruptions. The + firmware glue routine calls an OS registered recovery routine for the + System Reset or Machine Check condition for further details see (reference + to recoverable machine check ACR material to be added when available). The + glue routines are registered by the partition’s OS through RTAS. + Until the glue routines are registered, the OS does not receive direct + reports of either System Reset or Machine Check interrupts but is simply + re-booted by the hypervisor. The glue routines contain a register buffer + area that the hypervisor fills with register values that the glue routine + must pass to the OS when calling the interrupt handler. The last element in + this buffer is a lock word. The lock word is set with the value of the + using processor, and reset by the glue routine just before calling the OS + interrupt handler. This way only one buffer is needed per partition rather + than one per processor. + At the invocation of the hypervisor, footprint records are generated + for recovery conditions. Machine Check and Check Stop conditions are, in + some cases, isolatable to the affected partition(s). In these cases, the + hypervisor can then prove that it was not executing changes to the global + system tables on the offending processor when the error occurred. If this + cannot be proven, the global state of the complex is in doubt and the error + cannot be contained. It is anticipated that check stops that only corrupt + the internal state of the affected processor, stop that processor only. + When the service processor subsequently notices the stopped processor it + notifies one of the other processors in the partition through a simulated + recoverable machine check. The hypervisor running on the notified processor + then takes appropriate action to log out and restart the partition, or if + there is an alternate cpu capability, then continue execution with a + substitute for the stopped processor. + The following table presents the functions supplied by the + hypervisor. + Architecture Note: Some functions performed by partition firmware (OF + and RTAS) require hypervisor assist, but those firmware implementation + dependent interfaces do not appear in this document. + + + Architected hcall()s + <emphasis>(Continued)</emphasis> + + + + + + + + Function Name/Section + + + + + Comments + + + + + + + + + / + + + + Removes a PTE from the partition’s node Page Frame + Table + + + + + + / + + + + Removes up to four (4) PTEs from the partition’s node + Page Frame Table + + + + + + / + + + + Inserts a PTE into the partition’s node Page Frame + Table + + + + + + / + + + + Reads the specified PTE from the partition’s node + Page Frame Table + + + + + + / + + + + Clears the Modified bit in the specified PTE in the + partition’s node Page Frame Table + + + + + + / + + + + Clears the Referenced bit in the specified PTE in the + partition’s node Page Frame Table + + + + + + / + + + + Sets the Page Protection and Storage Key bits in the + specified PTE in the partition’s node Page Frame + Table + + + + + + / + + + + Returns the value of the specified DMA Translation Control + Entry + + + + + + / + + + + Inserts the specified value into the specified DMA + Translation Control Entry + + + + + + / + + + + Inserts the specified value into multiple DMA Translation + Control Entries + + + + + + / + + + + Inserts a list of values into the specified range of DMA + Translation Control Entries + + + + + + / + + + + SPRG0 is architecturally a hypervisor resource. This call + allows the OS to write the register. + + + + + + / + + + + DABR is architecturally a hypervisor resource. This call + allows the OS to write the register. + + + + + + / + + + + Initializes pages in real mode either to zero or to the + copied contents of another page. + + + + + + / + + + + Manage the Extended DABR facility. + + + + + + / + + + + Returns the value contained in a cache inhibited logical + address + + + + + + / + + + + Stores a value into a cache inhibited logical + address + + + + + + / + + + + Returns up to 16 bytes of virtualized console terminal + data. + + + + + + / + + + + Sends up to 16 bytes of data to a virtualized console + terminal. + + + + + + / + + + + Gets a list of possible client Vterm IOA + connections. + + + + + + / + + + + Associates server Vterm IOA to client Vterm IOA. + + + + + + / + + + + Breaks association between server Vterm IOA and client + Vterm IOA. + + + + + + / + + + + Returns internal hypervisor work areas for code + maintenance. + + + + + + / + + + + Generates and End Of Interrupt + + + + + + / + + + + Sets the Processor’s Current Interrupt + Priority + + + + + + / + + + + Generates an Inter-processor Interrupt + + + + + + / + + + + Polls for pending interrupt + + + + + + / + + + + Accepts pending interrupt + + + + + + / + + + + Migrates the page underneath an active DMA + operation. + + + + + + / + + + + Manages the performance monitor facility. + + + + + + / + + + + Registers the virtual processor area that contains the + virtual processor dispatch count + + + + + + / + + + + Makes processor virtual processor cycles available for + other uses (called when an OS image is idle) + + + + + + / + + + + Causes a virtual processor’s cycles to be transferred + to a specified processor. (Called by a blocked OS image to allow + a lock holder to use virtual processor cycles rather than waiting + for the block to clear.) + + + + + + / + + + + Awakens a virtual processor that has ceded its + cycles. + + + + + + / + + + + Returns the partition’s virtual processor performance + parameters. + + + + + + / + + + + Sets the partition’s virtual processor performance + parameters (within constraints). + + + + + + / + + + + Returns the value of the virtual processor utilization + register. + + + + + + / + + + + Polls the hypervisor for the existence of pending work to + dispatch on the calling processor. + + + + + + / + + + + Returns the summation of the physical processor + pool’s idle cycles. + + + + + + / + + + + Register Command/Response Queue + + + + + + / + + + + Frees the memory associated with the Command/Response + Queue + + + + + + / + + + + Controls the virtual interrupt signaling of virtual + IOAs + + + + + + / + + + + Sends a message on the Command/Response Queue + + + + + + / + + + + Loads a Redirected Remote DMA Remote Translation Control + Entry + + + + + + / + + + + Loads a list of Redirected Remote DMA Remote Translation + Control Entries + + + + + + / + + + + Unmaps a redirected TCE that was previously built with + H_PUT_RTCE or H_PUT_RTCE_INDIRECT + + + + + + / + + + + Allows modification of LIOBN Attributes. + + + + + + / + + + + Copies data between partitions as if by TCE mapped + DMA. + + + + + + / + + + + Write parameter data to remote DMA buffer. + + + + + + / + + + + Read data from remote DMA buffer to return + registers. + + + + + + / + + + + Registers the partition’s logical LAN control + structures with the hypervisor + + + + + + / + + + + Releases the partition’s logical LAN control + structures + + + + + + / + + + + Adds receive buffers to the logical LAN receive buffer + pool + + + + + + / + + + + Sends a logical LAN message + + + + + + / + + + + Controls the reception and filtering of non-broadcast + multicast packets. + + + + + + / + + + + Changes the MAC address for an ILLAN virtual IOA. + + + + + + / + + + + Allows modifications of ILLAN Attributes. + + + + + + + + / + + + + Constructs a cookie, specific to the intended client, + representing a shared resource. + + + + + + / + + + + Invalidates a cookie representing a shared resource. + + + + + + / + + + + Maps a shared resource into the client’s logical + address space + + + + + + / + + + + Removes a shared resource from a client’s logical + address space. + + + + + + / + + + + Removes receive buffers of specified size from the logical + LAN receive buffer pool. + + + + + + / + + + + Allows the partition to manipulate or query certain virtual + IOA behaviors. + + + + + + / + + + + Join active threads and return H_CONTINUE to final calling + thread + + + + + + + / + + + + Reactivate a suspended CRQ. + + + + + + / + + + + Change the page mapping characteristics of the Virtualized + Real Mode Area. + + + + + + / + + + + Returns Virtual Partition Memory pool statistics + + + + + + / + + + + Set Memory Performance Parameters + + + + + + / + + + + Get Memory Performance Parameters + + + + + + / + + + + Determine Memory Overcommit Performance + + + + + + / + + + + Register a Sub-CRQ. + + + + + + / + + + + Free a Sub-CRQ. + + + + + + / + + + + Send a message to a Sub-CRQ. + + + + + + / + + + + Send a list of messages to a Sub-CRQ. + + + + + + / + + + + Report the home node associativity for a given virtual + processor + + + + + + / + + + + Get the partition energy management parameters + + + + + + / + + + + Returns hints for activating/releasing resource instances + to achieve the best energy efficiency. + + + + + + / + + + + Registers Subvention Notification Structure + + + + + + / + + + + Get a random number + + + + + + / + + + + Initiate a co-processor operation + + + + + + / + + + + Stop a co-processor operation + + + + + + / + + + + Get Extended Memory Performance Parameters + + + + + + / + + + + Set Processing resource mode + + + + + + / + + + + Search TCE table for entries within a specified + range + + + + +
+ +
+ System Reset Interrupt + Hypervisor code saves all processor state by saving the contents of + one register in SPRG2 (SPRG1 if + ibm,nmi-register-2 was used) (Multiplexing the use of + this resource with the OS). The processor’s stack and data area are + found by processing the Processor Identification Register. + + + + R1--1. + + For the LPAR option: The platform must support + signalling system reset interrupts to all processors assigned to a + partition. + + + + + R1--2. + + For the LPAR option: The platform must support + signalling system reset interrupts individually as well as collectively + to all supported partitions. + + + + + R1--3. + + For the LPAR option: The system reset interrupts + signaled to one partition must not affect operations of another + partition. + + + + + R1--4. + + For the LPAR option: The hypervisor must intercept + all system reset interrupts. + + + + + R1--5. + + For the LPAR option: The platform must implement the + FWNMI option. + + + + + R1--6. + + For the LPAR option: The hypervisor must maintain a + count, reset when the partition’s OS, through RTAS, registers for + system reset interrupt notification, of system reset interrupts signaled + to a partition’s processor. + + + + + R1--7. + + For the LPAR option: Once the partition’s OS + has registered for system reset interrupt notification, the hypervisor + must forward the first and second system reset interrupts signaled to a + partition’s processor. + + + + + R1--8. + + For the LPAR option: The hypervisor must on the third + and all subsequent system reset interrupts signaled to a + partition’s processor invoke OF to initiate the partition’s + reboot policy. + + + + + R1--9. + + For the LPAR option: + The hypervisor must have the capability to receive and handle the system reset + interrupts simultaneously on multiple processors in the same or different + partitions up to the number of processors in the system. + + + + +
+ +
+ Machine Check Interrupt + Hypervisor code saves all processor state by saving the contents of + one register in SPRG2 (SPRG1 if + ibm,nmi-register-2 was used) (Multiplexing the use of + this resource with the OS). The processor’s stack and data area are + found by processing the Processor Identification Register. + The hypervisor investigates the cause of the machine check. The + cause is either a recoverable event on the current processor, or a + non-recoverable event either on the current processor or one of the other + processors in the logical partition. Also the hypervisor must determine + if the machine check may have corrupted its own internal state (by + looking at the footprints, if any, that were left in the per processor + data area of the errant processor. + + + + R1--1. + + For the LPAR option: The hypervisor must have the + capability to receive and handle the machine check interrupts + simultaneously on multiple processors in the same or different partitions + up to the number of processors in the system. + + + + +
+ +
+ Hypervisor Call Interrupt + The hypervisor call (hcall) interrupt is a special variety of the + system call instruction. The parameters to the hcall() are passed in + registers using the PA ABI definitions (Reg 3-12 for parameters). In + contrast to the PA ABI, pass by reference parameters are avoided to or + from hcall(). This minimizes the address translation problem pointer + parameters cause. Some input parameters are indexes. Output parameters, + when generated, are passed in registers 4 through 12 and require special + in-line assembler code on the part of the caller. The first parameter to + hcall() is the function token. + specifies the valid hcall() + function names and token values. Some of the hcall() functions are + optional, to indicate if the platform is in LPAR mode, and which + functions are available on a given platform, the OF property + “ibm,hypertas-functions” is provided in + the /rtas node of the partition’s device tree. The + property is present if the platform is in LPAR mode while its value + specifies which function sets are implemented by a given implementation. + If platform implements any hcall() of a function set it implements the + entire function set. Additionally, certain values of the + “ibm,hypertas-functions” property + indicate that the platform supports a given architecture extension to a + standard hcall(). + The floating point registers along with the FPSCR are in general + preserved across hcall() functions, unless the “Maintain + FPRs” field of the VPA =0, see + . The general purpose registers + r0 and r3-r12, the CTR and XER registers are volatile along with the + condition register fields 0 and 1 plus 5-7. Specific hcall()s may specify + a more restricted “kill set”, refer to the specific hcall() + specification below. + + + + R1--1. + + For the LPAR option: The platform’s + /rtas node must contain an + “ibm,hypertas-functions” property as + defined below. + + + + + R1--2. + + For the LPAR option: If a platform reports in its + “ibm,hypertas-functions” property (see + ) that it supports a function set, then it + must support all hcall()s of that function set as defined in + . + + + + + + Hypervisor Call Function Table + + + + + + + + + + + Hypervisor Call Function + Name/Section + + + + + Hypervisor Call Function + Token + + + + + Hypervisor Call Performance + Class + + + + + Function Mandatory? + + + + + Function Set + + + + + + + + UNUSED + + + 0x0 + + +   + + +   + + +   + + + + + + / + + + + 0x4 + + + Critical + + + Yes + + + hcall-pft + + + + + + / + + + + 0x8 + + + Critical + + + Yes + + + hcall-pft + + + + + + / + + + + 0xC + + + Critical + + + Yes + + + hcall-pft + + + + + + / + + + + 0x10 + + + Critical + + + Yes + + + hcall-pft + + + + + + / + + + + 0x14 + + + Critical + + + Yes + + + hcall-pft + + + + + + / + + + + 0x18 + + + Critical + + + Yes + + + hcall-pft + + + + + + / + + + + 0x1C + + + Critical + + + Yes + + + hcall-tce + + + + + + / + + + + 0x20 + + + Critical + + + Yes + + + hcall-tce + + + + + + / + + + + 0x24 + + + Critical + + + Yes + + + hcall-sprg0 + + + + + + / + + + + 0x28 + + + Critical + + + Yes - if DABR exists + + + hcall-dabr + + + + + + / + + + + 0x2C + + + Critical + + + Yes + + + hcall-copy + + + + + + / + + + + 0x3C + + + Normal + + + Yes + + + hcall-debug + + + + + + / + + + + 0x40 + + + Normal + + + Yes + + + hcall-debug + + + + + + / + + + + 0x54 + + + Critical + + + Yes + + + hcall-term + + + + + + / + + + + 0x58 + + + Critical + + + Yes + + + hcall-term + + + + + + / + + + + 0x60 + + + Normal + + + Yes if enabled by HMC (default disabled) + + + hcall-dump + + + + + + / + + + + 0x64 + + + Critical + + + Yes + + + hcall-interrupt + + + + + + / + + + + 0x68 + + + Critical + + + Yes + + + hcall-interrupt + + + + + + / + + + + 0x6C + + + Critical + + + Yes + + + hcall-interrupt + + + + + + / + + + + 0x70 + + + Critical + + + Yes + + + hcall-interrupt + + + + + + H_XIRR / + + + + 0x74 + + + Critical + + + Yes + + + hcall-interrupt + + + + + + H_XIRR-X / + + + + 0x2FC + + + Critical + + + Yes + + + hcall-interrupt + + + + + + / + + + + 0x78 + + + Normal + + + If LRDR option is implemented + + + hcall-migrate + + + + + + / + + + + 0x7C + + + Normal + + + If performance monitor is implemented + + + hcall-perfmon + + + + + Reserved + + + 0x80 - 0xD8 + + +   + + +   + + +   + + + + + + / + + + + 0xDC + + + Normal + + + If SPLPAR or SLB Shadow Buffer option is + implemented + + + hcall-splpar + SLB-Buffer + + + + + + / + + + + 0xE0 + + + Critical + + + If SPLPAR option is implemented + + + hcall-splpar + + + + + + / + + + + 0xE4 + + + Critical + + + If SPLPAR option is implemented + + + hcall-splpar + + + + + + / + + + + 0xE8 + + + Critical + + + If SPLPAR option is implemented + + + hcall-splpar + + + + + + / + + + + 0xEC + + + Normal + + + If SPLPAR option is implemented + + + hcall-splpar + + + + + + / + + + + 0xF0 + + + Normal + + + If SPLPAR option is implemented + + + hcall-splpar + + + + + + / + + + + 0xF4 + + + Critical + + + If SPLPAR option is implemented + + + hcall-splpar + + + + + + / + + + + 0xF8 + + + Normal + + + If SPLPAR option is implemented + + + hcall-pic + + + + + + / + + + + 0xFC + + + Normal + + + If VSCSI option is implemented + + + hcall-crq + + + + + + / + + + + 0x100 + + + Normal + + + If VSCSI option is implemented + + + hcall-crq + + + + + + / + + + + 0x104 + + + Critical + + + If either the VSCSI or logical LAN option is + implemented + + + hcall-vio + + + + + + / + + + + 0x108 + + + Critical + + + If VSCSI option is implemented + + + hcall-crq + + + + + + / + + + + 0x10C + + + Critical + + + If VSCSI option is implemented + + + hcall-rdma + + + + + + / + + + + 0x110 + + + Critical + + + If VSCSI option is implemented + + + hcall-rdma + + + + + + / + + + + 0x114 + + + Normal + + + If logical LAN option is implemented + + + hcall-lLAN + + + + + + / + + + + 0x118 + + + Normal + + + If logical LAN option is implemented + + + hcall-lLAN + + + + + + / + + + + 0x11C + + + Critical + + + If logical LAN option is implemented + + + hcall-lLAN + + + + + + / + + + + 0x120 + + + Critical + + + If logical LAN option is implemented + + + hcall-lLAN + + + + + + / + + + + 0x124 + + + Critical + + + New designs as of 01/01/2003 + + + hcall-bulk + + + + + + / + + + + 0x128 + + + Critical + + + If VSCSI option is implemented + + + hcall-rdma + + + + + + / + + + + 0x12C + + + Critical + + + If VSCSI option is implemented + + + hcall-rdma + + + + + + / + + + + 0x130 + + + Critical + + + If logical LAN option is implemented + + + hcall-lLAN + + + + + + / + + + + 0x134 + + + Normal + + + If Extended DABR option is implemented + + + hcall-xdabr + + + + + + / + + + + 0x138 + + + Critical + + +   + + + hcall-multi-tce + + + + + + / + + + + 0x13C + + + Critical + + +   + + + hcall-multi-tce + + + + + + / + + + + 0x140 + + + Critical + + +   + + + hcall-multi-tce + + + + + Reserved + + + 0x144 + + +   + + +   + + +   + + + + + Reserved + + + 0x148 + + +   + + +   + + +   + + + + + + / + + + + 0x14C + + + Normal + + + If Logical LAN option is implemented + + + hcall-ILAN + + + + + + / + + + + 0x150 + + + Normal + + + If the Server Vterm option is implemented + + + hcall-vty + + + + + + / + + + + 0x154 + + + Normal + + + If the Server Vterm option is implemented + + + hcall-vty + + + + + + / + + + + 0x158 + + + Normal + + + If the Server Vterm option is implemented + + + hcall-vty + + + + + + / + + + + 0x1C4 + + + Normal + + + If Shared Logical Resource option is Implemented + + + hcall-slr + + + + + + / + + + + 0x1C8 + + + Normal + + + If Shared Logical Resource option is Implemented + + + hcall-slr + + + + + + / + + + + 0x1CC + + + Normal + + + If Shared Logical Resource option is Implemented + + + hcall-slr + + + + + + / + + + + 0x1D0 + + + Normal + + + If Shared Logical Resource option is Implemented + + + hcall-slr + + + + + + / + + + + 0x1D4 + + + Critical + + + If logical LAN option is implemented + + + hcall-lLAN + + + + + + / + + + + 0x1D8 + + + Critical + + + If SPLPAR option is implemented + + + hcall-poll-pending + + + + + Reserved + + + 0x1DC - 0x1E0 + + + Varies + + +   + + +   + + + + + Reserved + + + 0x1E8 - 0x1EC + + +   + + +   + + +   + + + + + Reserved + + + 0x1F0 - 0x23C + + + Varies + + +   + + +   + + + + + + / + + + + 0x240 + + + Normal + + + If LIOBN Attributes are implemented + + + hcall-liobn-attributes + + + + + + / + + + + 0x244 + + + Normal + + + If ILLAN Checksum Offload Support is implemented + If ILLAN Backup Trunk Adapter option is + implemented + + + hcall-illan-options + + + + + Reserved + + + 0x248 + + +   + + +   + + +   + + + + + + / + + + + 0x24C + + + Critical + + + If H_PUT_RTCE is implemented + + + hcall-rdma + + + + + Reserved + + + 0x27C + + +   + + +   + + +   + + + + + Reserved + + + 0x280 + + +   + + +   + + +   + + + + + Reserved + + + 0x28C-0x294 + + +   + + +   + + +   + + + + + + / + + + + 0x298 + + + Normal + + + If Thread Join option is implemented + + + hcall-join + + + + + + + / + + + + 0x2A8 + + + Normal + + + If any virtual I/O options are implemented + + + hcall-vioctl + + + + + + / + + + + 0x2AC + + + Normal + + + If the VRMA option is implemented. + + + hcall-vrma + + + + + + / + + + + 0x2B0 + + + Continued + + + If partition suspension option is implemented + + + hcall-suspend + + + + + Reserved + + + 0x2B4 + + +   + + +   + + +   + + + + + + / + + + + 0x2B8 + + + Normal + + + If the Partition Energy Management Option is + implemented + + + hcall-get-emparm + + + + + + / + + + + 0x2BC + + + Normal + + + If the Cooperative Memory Over-commitment Option is + implemented + + + hcall-cmo + + + + + + / + + + + 0x2D0 + + + Normal + + + If the Cooperative Memory Over-commitment Option is + implemented + + + hcall-cmo + + + + + + / + + + + 0x2D4 + + + Normal + + + If the Cooperative Memory Over-commitment Option is + implemented + + + hcall-cmo + + + + + + / + + + + 0x2D8 + + + Normal + + + If the Cooperative Memory Over-commitment Option is + implemented and the calling partition is authorized. + + + hcall-cmo + + + + + + / + + + + 0x2DC + + + Normal + + + If the Subordinate CRQ Option is implemented + + + hcall-sub-crq + + + + + + / + + + + 0x2E0 + + + Normal + + + If the Subordinate CRQ Option is implemented + + + hcall-sub-crq + + + + + + / + + + + 0x2E4 + + + Normal + + + If the Subordinate CRQ Option is implemented + + + hcall-sub-crq + + + + + + / + + + + 0x2E8 + + + Normal + + + If the Subordinate CRQ Option is implemented + + + hcall-sub-crq + + + + + + / + + + + 0x2EC + + + Normal + + + If the VPHN Option is implemented + + + hcall-vphn + + + + + Reserved + + + 0x2F0 + + +   + + +   + + +   + + + + + + / + + + + 0x2F4 + + + Normal + + + If the Partition Energy Management Option is + implemented + + + hcall-best-energy-1<list> + The <list> suffix for hcall-best-energy indicates + an optional dash delimited series (may be null) of supported + resource codes encoded as ASCII decimal values in addition to + the minimal support value of 1 for processors, other values + are define in + . + + + + + + + / + + + + 0x2F8 + + + Normal + + + If the Expropriation Subvention Notification Option is + implemented + + + hcall-esn + + + + + + X_XIRR-X / + + + + 0x2FC + + + Critical + + + Yes + + + hcall-interrupt + + + + + + / + + + + 0x300 + + + Normal + + + If a random number generator Platform Facilities Option + is implemented + + + hcall-random + + + + + Reserved + + + 0x310 + + +   + + +   + + +   + + + + + + / + + + + 0x304 + + + Normal + + + If one or more Coprocessor Platform Facilities Options + are implemented + + + hcall-cop + + + + + + / + + + + 0x308 + + + Normal + + + If one or more Coprocessor Platform Facilities Options + are implemented + + + hcall-cop + + + + + + / + + + + 0x314 + + + Normal + + + If the Extended Cooperative Memory Overcommittment Option + is implemented + + + hcall-cmo-x + + + + + + / + + + + 0x31C + + + Normal + + + If the platform supports POWER ISA version 2.07 or + higher + + + hcall-set-mode + + + + + Reserved + + + 0x320 + + +   + + +   + + +   + + + + + + / + + + + 0x324 + + + normal + + + If the plaform implements the LRDR option at LoPAR + Version 2.7 or higher + + + hcall-xlates-limited + + + + + Reserved for platform-dependent hcall()s / + + + + 0xF000 - 0xFFFC + + +   + + +   + + +   + + + + + ILLEGAL + + + Any token value having a one in either of the low order + two bits + + +   + + +   + + +   + + + + + Reserved + + + 0x328 - 0xEFFC and 0x10000 - 0xFFFFFFFF-FFFFFFFC: RTAS + implementations may assigns values in these ranges to their own + internal interfaces, as long as they are prepared for the + growth of architected functions into this range. + + +   + + +   + + +   + + + + +
+ Firmware Implementation Note: The assignment of function tokens is + designed such that a single mask operation can validate that the value is + within the range of a reasonable size branch table. Entries within the + branch table can handle unimplemented code points. + The hypervisor routines are optimized for execution speed. In some + rare cases, locks are taken, and specific hardware designs require short + wait loops. However, if a needed resource is truly busy, or processing is + required by an agent, the hypervisor returns to the caller, either to + have the function retried or continued at a later time. The Performance + Class establishes specific performance requirements against each specific + hcall() function as defined below. + Hypervisor Call Performance Classes: + Critical Must make continuous forward progress, encountering any + busy resource must cause the function to back out and return with a + “hardware busy” return code. When subsequently called, the + operation begins again. Short loops for larwx and stwcx to acquire an + apparently unheld lock are allowed. These functions may not include wait + loops for slow hardware access. + Normal Similar to critical, however, wait loops for slow hardware + access are allowed. These functions may not include wait loops for an + agent such as an external micro-processor or message transmission + device. + Continued This class of functions is expected to serialize on the + use of external agents. If the external agent is busy the function + returns “hardware busy”. If the interface to the external + agent is not busy, the interface is marked busy and used to start the + function. The function returns one of the “function in + progress” return codes. Later, the caller may check on the + completion of the function by issuing the “check” Hcall + function with the “function in progress” parameter code. If + the function completed properly, the hypervisor maintains no status and + the “check” Hcall returns success. If the operation is still + in process, the same “function in progress” code is returned. + If the function completed in error, the completion error code is + returned. The hypervisor maintains room for at least one outstanding + error status per external agent interface per processor. If there is no + room to record the error status, the hypervisor returns “hardware + busy” and does not start the function. + Terminal This class of functions is used to manage a partition when + the OS is not in regular operation. These events include postmortems and + extensive recoveries. + The hypervisor performance classes are ordered in decreasing + restriction. + + + + R1--3. + + For the LPAR option: The caller must perform properly + given that the hypervisor meets the performance class specified. + + + + + R1--4. + + For the LPAR option: The hypervisor implementation + must meet the specified performance class or higher. + + + + + R1--5. + + For the LPAR option: Platform hardware designs must + take the allowable performance classes into account when choosing the + hardware access technology for the various facilities. + + + + + R1--6. + + For the LPAR option: The hypervisor must have the + capability to receive and handle the hypervisor call interrupts + simultaneously on multiple processors in the same or different partitions + up to the number of processors in the system. + + + + + R1--7. + + For the LPAR option: The hypervisor must check the + state of the MSR register bits that are not set to a specific value by + the processor hardware during the invoking interrupt per + . + + + + + + MSR State on Entrance to Hypervisor + + + + + + + + + + MSR Bit + + + + + Required State + + + + + Error-Code + + + + + + + + HV - Hypervisor + + + 1 + + + None + + + + + Bits 2,4:46, 57, and 60 Reserved + + + Set to 0 by Hardware + + + None + + + + + ILE - Interrupt Little Endian + + + As Last set by the hypervisor + + + None + + + + + ME - Machine check Enable + + + As last set by the hypervisor + + + None + + + + + LE Little-Endian Mode + + + 0 forced by ILE + + + None + + + + +
+ + + + R1--8. + + For the LPAR option: The Hcall() flags field must + meet the definition in: + ; the hypervisor may safely + ignore flag field values not explicitly defined by the specific hcall() + semantic. + + + + + R1--9. + + For the LPAR option: The platform must ensure that + flag field values not defined for a specific hcall() do not compromise + partitioning integrity. + + + + + R1--10. + + For the LPAR option: Implementations that normally + choose to ignore invalid flag field values must provide a “debug + mode” that does check for invalid flag field values and returns + H_Parameter when any are found. + + Architecture Note: The method for invocation of a + platform’s “debug mode” is beyond the scope of this + architecture. + + + + + + Page Frame Table Access flags field + definition + + + + + + + + + + + + + + Bit + + + + + Function + + + + + Bit + + + + + Function + + + + + Bit + + + + + Function + + + + + Bit + + + + + Function + + + + + + + + 0-15 + + + NUMA CEC Cookie + + + 16-23 + + + Subfunction Codes + + + 32 + + + AVPN + + + 48 + + + Zero Page + + + + + 33 + + + andcond + + + 49 + + + Copy Page + + + + + 34-39 + + + Reserved + + + 50-54 + + + key0-key4 + Bits 50-54 (key0 - key4) shall be treated as reserved + on platforms that either do not contain an + “ibm,processor-storage-keys” property, + or contain an + “ibm,processor-storage-keys” property + with the value of zero in both cells. + + + + + + 55 + + + pp0 + Bit 55 (pp0) shall be treated as reserved on platforms + that do not have the “Support for the “110” + value of the Page Protection (PP) bits” bit set to a + value of 1 in the + “ibm,pa-features” property. + + + + + + 24 + + + Exact + + + 40 + + + I-Cache-Invalidate + + + 56 + + + Compression + + + + + 25 + + + R-XLATE + + + 41 + + + I-Cache-Synchronize + + + 57 + + + Checksum + + + + + 26 + + + READ-4 + + + 42 + + + CC (Coalesce Candidate) + + + 58-60 + + + Reserved + + + + + 27 + + + Reserved + + + 43-47 + + + Reserved + + + + + 28-31 + + + CMO Option Flags + + + + + 61 + + + N + + + + + 62 + + + pp1 + + + + + 63 + + + pp2 + + + + +
+ + + + R1--11. + + For the LPAR option: The caller of Hcall must be in + privileged mode (MSRPR = 0) or the hypervisor immediately returns an + H_Privilege return code. See + for this and other architected + return codes. + + + + + R1--12. + + For the LPAR option: The caller of hcall() must be + prepared for a return code of H_Hardware from all functions. + + + + + R1--13. + + For the LPAR option: + In order for the platform to return H_Hardware, the error must not have resulted in an + undetectable state/data corruption nor will continued operation propagate + an undetectable state/data corruption as a result of the original + error. + Notes: + + + A detectable corruption, when accessed, results in either a + H_Hardware return code, machine check or check stop per platform + policy. + + + + Among other implications of Requirement + are: the effective state of the + partition appears to not change due to the failed hcall() -- (any partial + changes to persistent state/data are backed out); and the recovery of + platform resources that held lost state/data does not hide the state/data + loss to subsequent users of that state/data. + + + + The operating system is not expected to log a serviceable event + due to an H_Hardware return code from an hcall(), and treats the hcall() + as failing due to nonspecific hardware reasons. Any logging of a + serviceable event in response to the underlying cause is handled by + separate platform initiated operations. + + + + + + + + + Hypervisor Call Return Code Table + + + + + + + + + Hypervisor Call Return Code Values + (R3) + + + + + Meaning + + + + + + + + 0x0100000 - 0x0FFFFFFF + + + Function in Progress + + + + + 9905 + + + H_LongBusyOrder100sec - Similar to LongBusyOrder1msec, + but the hint is 100 second wait this time. + + + + + 9904 + + + H_LongBusyOrder10sec - Similar to LongBusyOrder1msec, but + the hint is 10 second wait this time. + + + + + 9903 + + + H_LongBusyOrder1Sec - Similar to LongBusyOrder1msec, but + the hint is 1 second wait this time. + + + + + 9902 + + + H_LongBusyOrder100mSec - Similar to LongBusyOrder1msec, + but the hint is 100mSec wait this time. + + + + + 9901 + + + H_LongBusyOrder10mSec - Similar to LongBusyOrder1msec, + but the hint is 10mSec wait this time. + + + + + 9900 + + + H_LongBusyOrder1msec - This return code is identical to + H_Busy, but with the added bonus of a hint to the partition OS. + If the partition OS can delay for 1 millisecond, the hcall will + likely succeed on a new hcall with no further busy return + codes. If the partition OS cannot handle a delay, they are + certainly free to immediately turn around and try again. + + + + + 18 + + + H_CONTINUE + + + + + 17 + + + H_PENDING + + + + + 16 + + + H_PARTIAL_STORE + + + + + 15 + + + H_PAGE_REGISTERED + + + + + 14 + + + H_IN_PROGRESS + + + + + 13 + + + Sensor value >= Critical high + + + + + 12 + + + Sensor value >= Warning high + + + + + 11 + + + Sensor value normal + + + + + 10 + + + Sensor value <= Warning low + + + + + 9 + + + Sensor value <= Critical low + + + + + 5 + + + H_PARTIAL (The request completed only partially + successful. Parameters were valid but some specific hcall + function condition prevented fully completing the architected + function, see the specific hcall definition for possible + reasons.) + + + + + 4 + + + H_Constrained (The request called for resources in excess + of the maximum allowed. The resultant allocation was + constrained to maximum allowed) + + + + + 3 + + + H_NOT_AVAILABLE + + + + + 2 + + + H_Closed (virtual I/O connection is closed) + + + + + 1 + + + H_Busy + Hardware Busy -- Retry Later + + + + + 0 + + + H_Success + + + + + -1 + + + H_Hardware (Error) + + + + + -2 + + + H_Function (Not Supported) + + + + + -3 + + + H_Privilege (Caller not in privileged mode). + + + + + -4 + + + H_Parameter (Outside Valid Range for Partition or + conflicting) + + + + + -5 + + + bad_mode (Illegal MSR value) + + + + + -6 + + + H_PTEG_FULL (The requested pteg was full) + + + + + -7 + + + H_Not_Found (The requested entity was not found) + + + + + -8 + + + H_RESERVED_DABR (The requested address is reserved by the + hypervisor on this processor) + + + + + -9 + + + H_NOMEM + + + + + -10 + + + H_AUTHORITY (The caller did not have authority to perform + the function) + + + + + -11 + + + H_Permission (The mapping specified by the request does + not allow for the requested transfer) + + + + + -12 + + + H_Dropped (One or more packets could not be delivered to + their requested destinations) + + + + + -13 + + + H_S_Parm (The source parameter is illegal) + + + + + -14 + + + H_D_Parm (The destination parameter is illegal) + + + + + -15 + + + H_R_Parm (The remote TCE mapping is illegal) + + + + + -16 + + + H_Resource (One or more required resources are in + use) + + + + + -17 + + + H_ADAPTER_PARM (invalid adapter) + + + + + -18 + + + H_RH_PARM (resource not valid or logical partition + conflicting) + + + + + -19 + + + H_RCQ_PARM (RCQ not valid or logical partition + conflicting) + + + + + -20 + + + H_SCQ_PARM (SCQ not valid or logical partition + conflicting) + + + + + -21 + + + H_EQ_PARM (EQ not valid or logical partition + conflicting) + + + + + -22 + + + H_RT_PARM (invalid resource type) + + + + + -23 + + + H_ST_PARM (invalid service type) + + + + + -24 + + + H_SIGT_PARM (invalid signalling type) + + + + + -25 + + + H_TOKEN_PARM (invalid token) + + + + + -27 + + + H_MLENGTH_PARM (invalid memory length) + + + + + -28 + + + H_MEM_PARM (invalid memory I/O virtual address) + + + + + -29 + + + H_MEM_ACCESS_PARM (invalid memory access control) + + + + + -30 + + + H_ATTR_PARM (invalid attribute value) + + + + + -31 + + + H_PORT_PARM (invalid port number) + + + + + -32 + + + H_MCG_PARM (invalid multicast group) + + + + + -33 + + + H_VL_PARM (invalid virtual lane) + + + + + -34 + + + H_TSIZE_PARM (invalid trace size) + + + + + -35 + + + H_TRACE_PARM (invalid trace buffer) + + + + + -36 + + + H_TRACE_PARM (invalid trace buffer) + + + + + -37 + + + H_MASK_PARM (invalid mask value) + + + + + -38 + + + H_MCG_FULL (multicast attachments exceeded) + + + + + -39 + + + H_ALIAS_EXIST (alias QP already defined) + + + + + -40 + + + H_P_COUNTER (invalid counter specification) + + + + + -41 + + + H_TABLE_FULL (resource page table full) + + + + + -42 + + + H_ALT_TABLE (alternate table already exists / alternate + page table not available) + + + + + -43 + + + H_MR_CONDITION (invalid memory region condition) + + + + + -44 + + + H_NOT_ENOUGH_RESOURCES (insufficient resources) + + + + + -45 + + + H_R_STATE (invalid resource state condition or sequencing + error) + + + + + -46 + + + H_RESCINDED + + + + + -54 + + + H_Aborted + + + + + -55 + + + H_P2 + + + + + -56 + + + H_P3 + + + + + -57 + + + H_P4 + + + + + -58 + + + H_P5 + + + + + -59 + + + H_P6 + + + + + -60 + + + H_P7 + + + + + -61 + + + H_P8 + + + + + -62 + + + H_P9 + + + + + -63 + + + H_NOOP + + + + + -64 + + + H_TOO_BIG + + + + + -65 + + + Reserved + + + + + -66 + + + Reserved + + + + + -67 + + + H_UNSUPPORTED (Parameter value outside of the range + supported by this implementation) + + + + + -68 + + + H_OVERLAP (unsupported overlap among passed buffer + areas) + + + + + -69 + + + H_INTERRUPT (Interrupt specification is invalid) + + + + + -70 + + + H_BAD_DATA (uncorrectable data error) + + + + + -71 + + + H_NOT_ACTIVE (Not associated with an active + operation) + + + + + -72 + + + H_SG_LIST (A scatter/gather list element is + invalid) + + + + + -73 + + + H_OP_MODE (There is a conflict between + the subcommand and the requested operation + notification) + + + + + -74 + + + H_COP_HW (co-processor hardware error) + + + + + -75 + + + H_STATE (invalid state) + + + + + -76 + + + H_RESERVED (a reserved value was specified) + + + + + -77 : -255 + + + Reserved + + + + + -256 -- -511 + + + H_UNSUPPORTED_FLAG (An unsupported binary flag bit was + specified. The returned value is -256 - the bit position of the + unsupported flag bit [high order flag bit is 0 etc.]) + + + + +
+
+ +
+ Hypervisor Call Functions + + +
+ Page Frame Table Access + All hypervisor Page Frame Table (PFT) access routines are called + using 64 bit linkage conventions and apply to all page sizes that the + platform supports as specified by the + “ibm,processor-page-sizes” property (See + for more details). The hypervisor PFT + access functions carefully update a given Page Table Entry (PTE) with at + least 64 bit store operations since an invalid update sequence could + result in machine checks. To guard against multiple conflicting + allocations of a PTE that could result in a check stop condition, the + hypervisor PTE allocation routine (H_ENTER) reserves the first two (high + order) software PTE bits for use as PTE locks while the low order two + software PTE bits are reserved for OS use (not used by firmware). If a + firmware PTE bit is on, the OS is to assume that the PTE is in use, just + as if the V bit were on. The hypervisor PFT access routines often execute + the tlbie instruction, on certain platforms, this instruction may only be + executed by one processor in a partition at a time, the hypervisor uses + locks to assure this. The tlbie instruction flushes a specific translate + lookaside buffer (TLB) entry from all processors participating in the + protocol. All the processors participating in the tlbie protocol are + defined as a translation domain. All processors of a given partition that + are in a given translation domain share the same hardware PFT. Book III + of the PA specifies the codes sequences needed to safely access the PFT, + in its chapter titled “Storage Control Instructions and Table + Updates”. These code sequences are part of this specification by + reference. The hypervisor PFT access routines are in the critical + performance path of the machine, therefore, extraordinary care must be + given to their performance, including machine dependent coding, minimal + run time checking, and code path length optimization. For performance + reasons, all parameter linkage is through registers, and no indirect + parameter linkage is allowed. This requires special glue code on the part + of the caller to pick up the return parameters. The hypervisor PFT access + routines modify the calling processor’s partition PFT on the + calling node. On NUMA systems, if an LPAR partition spans multiple + Central Electronics Complexes (CECs), the partition’s processors + may be in separate translation domains. Each platform translation domain + has a separate PFT. Therefore, the partition’s OS must modify each + PFT individually. This is done either by making hcall() accesses + specifying the NUMA CEC Cookie (which identifies the translation domain) + in the high order 16 bits of the flags parameter (H_ENTER and H_READ + only) or by issuing the hcall() from a processor within the translation + domain as identified by the processor’s NUMA CEC Cookie field of + the + “ibm,pft-size” property. + The PFT is preallocated based upon the value of the + partition’s PFT_size configuration variable. This configuration + variable is initialized to 4 PTEs per node local page frame and 2 PTEs + per remote node page frame. The size of the PFT per node is communicated + to the partition’s OS image via the + “ibm,pft-size” property of the + node. + The value of the configuration variable + PFT_size consists of two comma separated integers, + the first is the number of hardware PFT entries to allocate per CEC local + page, and the second is the number of hardware PFT entries to allocate + per remote CEC page (if NUMA configured). These allocations are made at + partition boot time based upon the initial partition memory allocation, + based upon specific situations (such as low page table usage or future + need for dynamic memory addition) the OS may wish to override the + platform default values. + + + + R1--1. + + For the LPAR option: The platform must allocate the + partition’s page frame table. The size of this table is determined + by the PFT_size configuration variable in the OS image’s + “common” NVRAM partition. + + + + + R1--2. + + For the LPAR option: The platform must provide the + “ibm,pft-size” property in the processor + nodes of the device tree (children of type + cpu of the + /cpus node). + Register Linkage (For hcall() tokens 0x04 - 0x18) + + + + + + On Call: + + R3 function call token + R4 flags (see ) + R5 Page Table Entry Index (PTEX) + R6 Page Table Entry High word (PTEH) (on H_ENTER only) + R7 Page Table Entry Low word (PTEL) (on H_ENTER only) + + + On Return: + + R3 Status Word + R4 chosen PTEX (from H_ENTER) / High Order Half of old PTE + R5 Low Order Half of old PTE + R6 + + + + + Semantics checks for all hypervisor PTE access routines: + + + + Hypervisor checks that the caller was in privileged mode or + H_Privilege return code. + + + + On NUMA platforms for the H_ENTER and H_READ calls only, the + hypervisor checks that the NUMA CEC Cookie is within the range of values + assigned to the partition else return H_Parameter. + + + + Hypervisor checks that the PTEX is zero or greater and less than + the partition maximum, else H_Parameter return code. + + + + Hypervisor checks the logical address contained in any PTE to be + entered into the PFT to insure that it is valid and then translates the + logical address into the assigned physical address. + + + + When hypervisor returns the contents of a PTE, the contents of + the RPN are usually architecturally undefined. It is expected that + hypervisor implementations leave the contents of this field as it was + read from the PTE since it cannot be used by the OS to directly access + real memory. The exception to this rule is when the R-XLATE flag is + specified to the H_READ hcall(), then the RPN in the PTE is reverse + translated into the LPN prior to return. + + + + Logical addressing: + LPAR adds another level of virtual address translation managed by + the hypervisor. The OS is never allowed to use the physical address of + its memory this includes System Memory, MMIO space, NVRAM etc. The OS + sees System Memory as N regions of contiguous logical memory. Each + logical region is mapped by the hypervisor into a corresponding block of + contiguous physical memory on a specific node. All regions on a specific + system are the same size though different systems with different amount + of memory may have different region sizes since they are the quantum of + memory allocation to partitions. That is, partitions are granted memory + in region size chunks and if a partition’s OS gives up memory, it + is in units of a full region. On NUMA platforms, groups of regions may be + associated with groups of processors forming logical CECs for allocation + and migration purposes. + Logical addresses are divided into two fields, the logical region + identifier and the region offset. The region offset is the low order bits + needed to represent the region size. The logical region identifier are + the remaining high order bits. + + + + Logical addresses start at zero. When control is initially passed + to the OS from the platform, the first region is the single RMA. The + first region has logical region identifier of zero. This first region is + specified by the first address - length pair of the + “reg” property of the + /memory node of the OF device tree. Subsequent + regions each have their own address - length pair. At initial program + load time, the logical region identifiers are sequential starting at zero + but over time, with dynamic memory reconfiguration, holes may appear in + the partition’s address space. + + + + Logical to physical translation: This translation is based upon a + simple indexed table per partition of the physical addresses associated + with the start of each region (in logical region identifier order). At + least two special values are recognized: + + + + The invalid value for those regions that do not have a physical + mapping (so that there can be holes in the logical address map for + various reasons such as memory expansion). + + + + The I/O region value, that calls for further checking against + partition I/O address range allocations. + + + + + + + The logical region identifier is checked for being less than the + maximum size, and then used to index the logical to physical translation + table. + + + + If the physical region identifier is valid (certain values are + reserved say 0 and all F’s) then it replaces the logical region + identifier in the PTE and the PTE access function continues. + + + + If the physical region identifier is the I/O region, then proceed + to the I/O translation algorithm (implementation dependent based upon + platform characteristics). + + + + If the physical region identifier is invalid, return + H_Parameter + + + + + + R1--3. + + For the LPAR option: The OS must make no assumptions + about the logical to physical mapping other than the low order + bits. + + + + + R1--4. + + For the LPAR option: Each logical region must have + its own address - length pair in the + “reg” property of the OF + /memory node. + + + + + R1--5. + + For the LPAR option: When control is initially passed + to the OS from the platform, the first logical region (having logical + region identifier 0) must be the region accessed when the OS operates + with translate off. + + + + + R1--6. + + For the LPAR option: When control is initially passed + to the OS from the platform, the size of the logical region must be equal + to a real mode length size supported by the platform. + + + + + R1--7. + + For the LPAR option: + Each logical region must start and end on a boundary of the largest page size that the + logical region supports (see + “ibm,dynamic-memory” and + “ibm,lmb-page-sizes” in + as well as + for more details). + + + + + R1--8. + + For the LPAR option: The pages that contain the + platform’s per processor interrupt management areas or any other + device marked + “used-by-rtas” must not be mapped into + the partition virtual address space. + + + + + R1--9. + + For the LPAR option: + Each logical region must support all page sizes presented in the + “ibm,processor-page-sizes” property in + that are less than or equal to the + size of the logical region as specified by either the OF standard + “reg” property of the logical + region’s OF + /memory node, or the + “ibm,lmb-size” property of the logical + region’s + /ibm,dynamic-reconfiguration-memory node in + . + + Implementation Note: 32 bit versions of AIX only support 36 bit + logical address memory spaces. Providing such a partition with a larger + logical memory address space may cause OS failures. + + Implementation Note: Requirement + may be met by ensuring that all + logical regions start and end on a boundary of the largest page size + supported by the platform. + + + + +
+ H_REMOVE + This hcall is for invalidating an entry in the page table. The PTEX + identifies a specific page table entry. If the PFO option is implemented + an optional flag causes the hypervisor to compress the page contents to + one or more data blocks after invalidating the page table entry given + that a compression coprocessor is available and the page is small enough + to be synchronously compressed. If the compression coprocessor is busy, + or the page is too large, the compression can be subsequently performed + using the H_COP_OP hcall() see + . If the page contents are + compressed, then a checksum may be appended by setting the checksum flag + - if the compression flag is not set the checksum flag is + ignored. + + + Syntax: + + + + + + + Parameters: + + + flags: AVPN, andcond, and for the CMO option: CMO Option flags as + defined in + and for the PFO option the + compression and checksum flags. + + + + PTEX (index of the PTE in the page table to be used) + + + + AVPN: Optional “Abbreviated Virtual Page Number” -- + used as a check for the correct PTE + + + + When the AVPN flag is set, the contents of the AVPN parameter are + compared to the first double word of the PTE (after bits 57-63 of the PTE + have been masked). Note, the low order 7 bits are undefined and should be + zero otherwise the likely result is a return code of H_Not_Found. + + + + When the andcond flag is set, the contents of the AVPN parameter + are bit anded with the first double word of the PTE. If the result is + non-zero the return code is H_Not_Found. + + + + + + out: For the PFO option, the output data block logical real + address when the compression flag bit is on. + + + + outlen: For the PFO option, the length of the compression data + block or compression data block descriptor list when the compression flag + bit is on. + + + + + + Semantics: + + + Check that the PTEX accesses within the PFT else return + H_Parameter + + + + If the AVPN flag is set, and the AVPN parameter bits 0-56 do not + match that of the specified PTE then return H_Not_Found. + + + + If the andcond flag is set, the AVPN parameter is bit anded with + the first double word of the specified PTE, if the result is non-zero, + then return H_Not_Found. + + + + The hypervisor Synchronizes the PTE specified by the PTEX and + returns its value + + + + Use the architected “Deleting a Page Table Entry” + sequence such that the first double word of the resultant PFT entry is + all 0s. + + + + Use the proper tlbie instruction for the page size within a + critical section protected by the proper lock (per large page bit in the + specified PTE). + + + + The synchronized value of the old PTE value ends up in R4 and R5 + for return to the caller. + + + + For the CMO option: set the page usage state per the CMO Option + flags field of the flags parameter as defined in + . + + + + + + For the PFO option: If the Compression flag is on: + + + + Check that the calling partition is authorized to use the + compression co-processor else return H_Function. + + + + If the page is not “main store memory” then return + H_UNSUPPORTED_FLAG TBD (value - 312) + + + + Check that the page size is <= the compression value in + “ibm,max-sync-cop” else return + H_Constrained. + + + + Build CRB for compression of the page size indicated in the + PTE + + + + If the checksum flag is on command that a checksum be + built + + + + Verify that the “out” parameter represents a valid + logical real address within the caller’s partition else return + H_P3 + + + + If the “outlen” parameter is non-negative verify that + the logical real address of (out + outlen) is a valid logical real + address within the same 4K page as the “out” parameter else + return H_P4. + + + + If the “outlen” parameter is negative: + + + + Verify that the absolute value of outlen meet all of the follow + else return H_P4: + + + + Is <= the value of + “ibm,max-sg-len” + + + + Is an even multiple of 16 + + + + That out + the absolute value of outlen represents a valid + logical real address within the same 4K page as the out parameter. + + + + + + Verify that each 16 byte scatter gather list entry meets all of + the following else return H_SG_LIST: + + + + Verify that the first 8 bytes represents a valid logical real + address within the caller’s partition. + + + + Verify that the logical real address represented by the sum of + the first 8 bytes and the second 8 bytes is a valid logical real address + within the same 4K page as the first 8 bytes. + + + + + + + + For the Shared Logical Resource Option if any of the memory + represented by the out/outlen parameters have been rescinded then return + H_RESCINDED. + + + + Fill in the destination DDE list from the converted the + out/outlen parameters. + + + + Issue icswx instruction to execute CRB + + + + Check coprocessor busy - retry / return H_PARTIAL if + execution time expired / return H_COP_HW if compressor is broken + + + + Wait for coprocessor to complete + + + + If compressor hardware error return H_COP_HW + + + + Check that the compressor had enough room to house the compressed + image else return H_TOO_BIG + + + + Save compression block size in R6 + + + + + + Return H_Success + + + + +
+ +
+ H_ENTER + This hcall adds an entry into the page frame table. PTEH and PTEL + contain the new entry. PTEX identifies either the page table entry group + or the specific PTE where the entry is to be added, depending upon the + setting of the Exact flag. If the Exact flag is off, the hypervisor + selects the first free (invalid) PTE in the page table entry group. For + pages with sizes less than or equal to 64 K, Flags further provide the + option to zero the page, and provide two levels of programmed I-Cache + coherence management before activating the page table mapping. This hcall + returns the PTE index of the entered mapping. If the PFO option is + implemented an optional compression flag causes the hypervisor to + initialize the page from one or more compressed data blocks and + optionally (checksum flag) check the end to end block data integrity + prior to adding the entry to the page table. If the compression flag is + not set the checksum flag is ignored. + + + + + Parameters: + + + + Flags + + + + CEC Cookie + + + + Zero Page: Zero the System Memory page in real mode before + placing its mapping into the PTE. This flag is ignored for memory mapped + I/O space pages; as an attempt to zero missing memory might result in a + machine check or worse. This function should use a processor dependent + algorithm optimized for maximum performance on the specific hardware. + This usually is a sequence of dcbz instructions. Setting this flag for a + page with a size larger than 64 K will result in return code of + H_TOO_BIG. + + + + I-Cache-Invalidate: Issue an icbi etc. instruction sequence to + manage the I-Cache coherency of the cachable page. This flag is ignored + for memory mapped I/O pages. For use when the D-Cache is known to be + clean, before placing its mapping into the PTE. Setting this flag for a + page with a size larger than 64 K will result in return code of + H_TOO_BIG. + + + + I-Cache-Synchronize: Issue dcbst and icbi, etc., instruction + sequence to manage the I-Cache coherency of the cachable page. This flag + is ignored for memory mapped I/O pages. For use when the D-Cache may + contain modified data, before placing its mapping into the PTE. Setting + this flag for a page with a size larger than 64 K will result in return + code of H_TOO_BIG. + + + + Exact: Place the entry in the exact PTE specified by PTEX if it + is empty else return H_PTEG_FULL. + + + + For the CMO option: CMO Option flags as defined in + . + + + + For the PFO option: the compression flag initializes the page + content from a compression buffer and the checksum flag checks for end to + end compression buffer data integrity. + + + + + + PTEX (index of the first PTE in the page table entry group to be + used for the PTE insertion) + + + + PTEH -- the high order 8 bytes of the page table entry. + + + + PTEL -- the low order 8 bytes of the page table entry. + + + + + + + Semantics: + + + + The hypervisor checks that the logical page number is within the + bounds of partition allocated memory resources, else returns + H_Parameter. + + + + If the Shared Logical Resource option is implemented and the + logical page number represents a page that has been rescinded by the + owner, return H_RESCINDED. + + + + + + The hypervisor checks that the address boundary matches the + setting of the input PTE’s large page bits; else return + H_Parameter. + + + + The hypervisor checks that the page size described by the setting + of the input PTE’s page size bits is less than or equal to the + largest page size supported by the logical region that is being mapped; + else return H_Parameter. + + + + The hypervisor checks that the WIMG bits within the PTE are + appropriate for the physical page number else H_Parameter return. (For + System Memory pages WIMG=0010, or, 1110 if the SAO option is enabled, and + for IO pages WIMG=01**.) + + + + For pages with sizes greater than 64 K, the hypervisor checks + that the Zero Page, I-Cache-Invalidate, and I-Cache_Synchronize bits of + the Flags parameter are not set; else return H_TOO_BIG. + + + + Force off RS mode reserved PTEL bits (1 + In addition, bits 52 and 53 are forced off on platforms that + either do not contain an + “ibm,processor-storage-keys” property, + or contain an + “ibm,processor-storage-keys” property + with the value of zero in both cells. Bit 0 is forced off on platforms + that do not have the “Support for the “110” value of + the Page Protection (PP) bits” bit set to a value of 1 in the + “ibm,pa-features” property. + ) as well as hypervisor reserved software bits (57 and 58) in + PTEH. + + + + If the Exact flag is off, set the low order 3 bits of the PTEX to + zero (insures that the algorithm stays inside partition’s PFT and + is faster than a check and error code response). + + + + If the Zero Page flag is set, use optimized routine to clear page + (usually series of dcbz instructions). + + + + For the PFO option: if the compression flag is on then + + + + Check that the calling partition is authorized to use the + compression co-processor else return H_Function. + + + + If the page is not “main store memory” then return + H_UNSUPPORTED_FLAG. + + + + Build CRB for decompression + + + + If the checksum flag is on command that a checksum be + verified. + + + + + Validate the inlen/in parameters and build the source DDE + + + + Verify that the “in” parameter represents a valid + logical real address within the caller’s partition else return + H_P4 + + + + If the “inlen” parameter is non-negative verify that + the logical real address of (in + inlen) is a valid logical real address + within the same 4K page as the “in” parameter else return + H_P5. + + + + If the “inlen” parameter is negative: Verify that the + absolute value of inlen meet all of the follow else return H_P5: + + + + Is <= the value of + “ibm,max-sg-len” + + + + Is an even multiple of 16 + + + + That in + the absolute value of inlen represents a valid logical + real address within the same 4K page as the in parameter. + + + + + + Verify that each 16 byte scatter gather list entry meets all of + the following else return H_SG_LIST: + + + + Verify that the first 8 bytes represents a valid logical real + address within the caller’s partition. + + + + Verify that the logical real address represented by the sum of + the first 8 bytes and the second 8 bytes is a valid logical real address + within the same 4K page as the first 8 bytes. + + + + + + Verify that the sum of all the scatter gather length fields + (second 8 bytes of each 16 byte entry) is <= the decompression value + in + “ibm,max-sync-cop” else return + H_TOO_BIG. + + + + + + For the Shared Logical Resource Option if any of the memory + represented by the in/inlen parameters have been rescinded then return + H_RESCINDED. + + + + Fill in the source DDE list from the converted the in/inlen + parameters. + + + + Build the destination DDE referencing the start of the PTE page + with the length of the PTE page size. + + + + Issue icswx instruction to execute CRB + + + + Check coprocessor busy - retry / return H_Busy if execution + time exhausted / return H_Hardware if compressor is broken + + + + Wait for coprocessor to complete + + + + If compressor ran out of destination space return + H_TOO_BIG + + + + Check that the decompression filled the full page else return + H_Aborted + + + + If the checksum flag is on check that the data is valid else + return H_BAD_DATA + + + + If hardware error return H_Hardware + + + + + + If the I-Cache-Invalidate flag is set, issue icbi instructions + for all of the page’s cache lines + + + + If the Cache-Synchronize flag is set, issue dcbst and icbi + instructions for all of the page’s cache lines. Implementations may + need to issue a sync instruction to complete the coherency management of + the I-Cache. + + + + The hypervisor selects a PTE within the page table entry group + using the following. + + + + + + + Algorithm: + + + + if Exact flag is on then set t to 0 else set t to 7 + + + + for i=0;i<= t; i++ + + + + Combine page table base, PTEX and offset base on (i) into + R3 + + + + R8 <- ldarx PTEH(R3) /* prepare to take a lock on the PTE + */ + + + + if PTE is valid (R8 (bit 63) is set) then continue + + + + if PTE is locked (R8 (bit 57) is set) then continue + + + + set R8 (bit 57) /* prepare to lock PTE */ + + + + PTEH(R3) <- stdcx R8 /* attempt to take lock */ + + + + if stdcx failed continue + + + + goto insert + + + + + + return H_PTEG_FULL + + + + insert: use code sequence from PA Book III + + + + construct return PTEX (R4 <- (R3 - PFTbase) shifted down 4 + places) + + + + For the CMO option: set the page usage state per the CMO Option + flags field of the flags parameter as defined in + . + + + + return H_Success + + + + +
+ +
+ H_READ + This hcall returns the contents of a specific PTE in registers R4 + and R5. + + + + + Parameters: + + + + + flags: + + + + CEC Cookie: Cross CEC PFT access + + + + READ_4: Return 4 PTEs + + + + R-XLATE: Include a valid logical page number in the PTE if the + valid bit is set, else the contents of the logical page number field is + undefined. + + + + For the CMO option: CMO Option flags as defined in + . + + + + + + PTEX (index of the PTE in the page table to be used -- if the + READ_4 flag is set the low order two bits of the PTEX are forced to zero + by the hypervisor to insure that they are in the range of the PTEG and it + is faster than checking.) + + + + + + + Semantics: + + + + Checks that the PTEX is within the defined range of the + partition’s PFT else return H_Parmaeter + + + + If the READ_4 bit is clear Then load the specified PTE into R4 + and R5 + + + + If R-XLATE flag is set, then reverse translate the RPN field into + the logical page number. + + + + + + Else + + + + clear the two low order bits of the PTEX (faster than checking + them) + + + + load the 4 PTEs starting at PTEX into R4 through R11. + + + + If R-XLATE flag is set, then reverse translate the RPN fields + into the logical page number. + + + + + + + + For the CMO option: set the page usage state per the CMO Option + flags field of the flags parameter as defined in + . + + + + Set H_Success in R3 and return + + + + +
+ +
+ H_CLEAR_MOD + + This hcall clears the modified bit in the specific PTE. The second + double word of the old PTE is returned in R4. + + + + + Parameters: + + + + flags: For the CMO option: CMO Option flags as defined in + . + + + + PTEX (index of the PTE in the page table to be used) + + + + + + Semantics: + + + + Check that the PTEX accesses within the PFT, else returns + H_Parameter + + + + Check that the “V” bit is one, else return + H_Not_Found. + + + + Fetch the low order double word of the PTE into R4. If the + “C” bit is zero, then return H_Success. + + + + The hypervisor synchronizes the PTE specified by the PTEX, clears + the mod bit, and returns its old value: + + + + Use the architected “Modifying a Page Table Entry General + Case” sequence from PA Book III. + + + + Only PTE bits to be modified are: + + + + In double word 0 SW bit 57 and the V bit (63) + + + + In double word 1, C bit (56). + + + + + + Use the proper tlbie instruction for the page size (per large + page flag within PTE) within a critical section protected by the proper + lock. + + + + The second double word of the old PTE value ends up in R4. + + + + At the point where the new values are to be activated, use the + old values with the “C” bit cleared. + + + + For the CMO option: set the page usage state per the CMO Option + flags field of the flags parameter as defined in + . + + + + Return H_Success + + + + + + +
+ +
+ H_CLEAR_REF + This hcall clears the reference bit in the specific PTE. The second + double word of the old PTE is returned in R4. + + + + + Parameters: + + + + flags: For the CMO option: CMO Option flags as defined in + . + + + + PTEX (index of the PTE in the page table to be used) + + + + + + Semantics: + + + + Check that the PTEX accesses within the PFT, else return + H_Parameter. + + + + Check that the “V” bit is one, else return + H_Not_Found. + + + + Only PTE bits to be modified are: + + + + In double word 1 the R bit (55) + + + + + + Use the architected “Resetting the Reference Bit” + sequence from PA Book III with the original second double word of the PTE + ending up in R4. + + + + For the CMO option: set the page usage state per the CMO Option + flags field of the flags parameter as defined in + . + + + + Return H_Success + + + + +
+ +
+ H_PROTECT + This hcall sets the page protect bits in the specific PTE. + + + + + Parameters: + + + + flags: AVPN, pp0 + The pp0 portion of the flags parameter is ignored on platforms + that do not have the “Support for the “110” value of + the Page Protection (PP) bits” bit set to a value of 1 in the + “ibm,pa-features” property. + , pp1, pp2, key0-key4 + The key0-key4 portion of the flags parameter is ignored on + platforms that either do not contain an + “ibm,processor-storage-keys” property, + or contain an + “ibm,processor-storage-keys” property + with the value of zero in both cells. + , n, and for the CMO option: CMO Option flags as defined in + . + + + + PTEX (index of the PTE in the page table to be used) + + + + AVPN: Optional “Abbreviated Virtual Page Number” -- + used as a check for the correct PTE when the AVPN flag is set. + + + + + + + Semantics: + + + + Check that the PTEX accesses within the PFT, else return + H_Parameter + + + + Check that the “V” bit is one, else return + H_Not_Found. + + + + If the AVPN flag is set, and the AVPN parameter bits 0-56 do not + match that of the specified PTE, then return H_Not_Found. + + + + The hypervisor synchronizes the PTE specified by the PTEX, sets + the pp0 + The pp0 bit is not modified on platforms that do not have the + “Support for the “110” value of the Page Protection + (PP) bits” bit set to a value of 1 in the + “ibm,pa-features” property. + , pp1, pp2, key0-key4 + The key0 - key4 bits are not modified on platforms that either + do not contain an “ibm,processor-storage-keys” + property, or contain an + “ibm,processor-storage-keys” property + with the value of zero in both cells. + , and n bits per the flags parameter. + + + + Only PTE bits to be modified are: + + + + In double word 0 SW bit 57 and the V bit (63) + + + + In double word 1 pp0, pp1, pp2, + key0-key4, and n + + + + + + Use the architected “Modifying a Page Table Entry General + Case” sequence. + + + + Use the proper tlbie instruction for the page size (per value in + PTE) within a critical section protected by the proper lock. + + + + At the point where the new values are to be activated use the old + values with the “R” bit cleared and the + pp0, + pp1, pp2, key0-key4, + and n bits set as specified in + the flags parameter. + + + + For the CMO option: set the page usage state per the CMO Option + flags field of the flags parameter as defined in + . + + + + Return H_Success + + + + + + +
+ +
+ H_BULK_REMOVE + This hcall is for invalidating up to four entries in the page + table. The PTEX in the translation specifier high parameters identifies + the specific page table entries. + Prototype: + + + + Translation specifiers: + Each is 16 bytes long made up of two 8 byte double words; a + translation specifier high and a translation specifier low. + + + + Translation Specifier High double word: + + + + First byte (0) is a control/status byte: + + + + High order two bits (0 and 1) are type code: + + + + 00 Unused -- if found stop processing and return + H_PARAMETER + + + + 01 Request -- Processes As per H_REMOVE as modified by low order + two control bits. + + + + 10 Response -- written by hypervisor as a return status from + processing individual “request” translation specifier + + + + 11 End of String -- if found stop processing and return + H_Success. + + + + + + Next two bits (2 and 3) are response code (in response to + processing an individual “request” translation specifier + (type code modified to 10)): + + + + 00 Success -- the specified translation was removed as per + H_REMOVE with the PTE's RC bits in the next two status bits. + + + + 01 Not found -- the specified translation was not found as per + H_REMOVE. + + + + 10 H_PARM -- one or more of the parameters of the specified + translation were invalid per H_REMOVE -- processing of the bulk entries + stops at this point and the hypervisor returns H_PARAMETER. + + + + 11 H_HW -- The hardware experienced an uncorrected error + processing this translation specifier -- processing of the bulk entries + stops at this point and the hypervisor returns H_HARDWARE. + + + + + + Next two bits (4 and 5) are the Reference/Change bits from the + removed PTE (These bits are only valid if bits 0-3 are 1000): + + + + Low order two bits (6 and 7) are request modification + flags: + + + + 00 absolute -- remove the specified PTEX entry + unconditionally + + + + 01 andcond -- remove the specified PTEX entry as with the andcond + flag of H_REMOVE + + + + 10 AVPN -- remove the specified PTEX entry as with the AVPN flag + of H_REMOVE + + + + 11 not used -- if found stop processing and return + H_PARAMETER. + + + + + + + + Bytes 1 through 7 are the PTEX (PFT byte offset divided by + 16) + + + + + + Translation Specifier Low double word: + + + + Bytes 0 through 7 are the AVPN as per H_REMOVE + + + + + +
+ + Semantics: + + + + For each translation specifier, while the translation specifier + is not “end of string”: + + + + Check that the PTEX accesses within the PFT else set H_PARM + response status in the specific translation specifier high register and + return H_Parameter + + + + If the AVPN flag is set, and the AVPN parameter bits 0-56 do not + match that of the specified PTE then set response status Not found in the + specific translation specifier high register, Continue. + + + + If the andcond flag is set, the AVPN parameter is bit anded with + the first double word of the specified PTE (after bits 57-63 of the PTE + have been masked), if the result is non-zero, then set response status + Not found in the specific translation specifier high register, Continue. + (Note the low order 7 bits of the AVPN parameter should be zero otherwise + the likely result is a response status of Not found). + + + + The hypervisor Synchronizes the PTE specified by the PTEX. + + + + Use the architected “Deleting a Page Table Entry” + sequence. + + + + Use the proper tlbie instruction for the page size within a + critical section protected by the proper lock (per large page bit in the + specified PTE). + + + + The synchronized value of the old PTE RC bits ends up in bits 4 + and 5 of the individual translation specifier high register along with + success response status. + + + + + + return H_Success + + + + +
+ +
+ Translation Control Entry Access + The Translation Control Entry (TCE) access hcall()s take as a + parameters the Logical I/O Bus Number (LIOBN) that is the logical bus + number value derived from the + “ibm,dma-window” property associated with + the particular IOA. For the format of the + “ibm,dma-window” property, reference + . + +
+ H_GET_TCE + This hcall() returns the contents of a specified Translation + Control Entry. + + + Syntax: + + + + + + + Parameters: + + + + LIOBN (Logical I/O Bus Number for TCE table to be + accessed) + + + + IOBA (I/O Bus Address for indexing into the TCE table) + + + + + + Semantics: + + + + If the LIOBN, or IOBA are outside of the range of calling + partition assigned values return H_PARAMETER. + + + + If the Shared Logical Resource option is implemented and the + LIOBN, or IOBA represents a logical resource that has been rescinded by + the owner, return H_RESCINDED. + + + + + + Load R4 with the specified TCE contents. + + + + If specified TCE’s Page Mapping and Control bits (see + ) specify “Page Fault” then + return H_Success + + + + Reverse translate the TCE’s RPN field into its logical page + number + + + + If the logical page number is owned by the calling partition then + replace the RPN field of R4 with the logical page number and return + H_Success. + + + + Logically OR the contents of R4 with 0xFFFFFFFFFFFFF000 placing + the result into R4. + + + + Return H_PARTIAL. + + + + +
+ +
+ H_PUT_TCE + This hcall() enters the mapping of a single 4 K page into the + specified Translation Control Entry. + + + Syntax: + + + + + + + Semantics: + + + + If the LIOBN or IOBA parameters are outside of the range of + calling partition assigned values return H_PARAMETER. + + + + If the Shared Logical Resource option is implemented and the + LIOBN, or IOBA represents a logical resource that has been rescinded by + the owner, return H_RESCINDED. + + + + + + If the Page Mapping and Control field of the TCE is not + “Page Fault” (see + ) + + + + Then if the logical address within the TCE parameter is outside + of the range of calling partition assigned values + + + + Then return H_PARAMETER. + + + + Else translate the logical address within the TCE parameter into + the corresponding physical real address. + + + + + + + + The hypervisor stores the TCE resultant value in the TCE table + specified by the LIOBN and IOBA parameters; returning H_Success. (In the + “Page Fault” case the RPN remains untranslated.) + + Software Note: The PA requires the OS to issue a sync instruction + to proceed the signalling of an IOA to start an IO operation involving + DMA to guarantee the global visibility of both DMA and TCE data. This + hcall() does not include a sync instruction to guarantee global + visibility of TCE data and in no way diminishes the requirement for the + OS to issue it. + + + + +
+ +
+ H_STUFF_TCE + This hcall() duplicates the mapping of a single 4 K page through + out a contiguous range of Translation Control Entries. Thus, in + initializing and/or invalidating many entries. To retain interrupt + responsiveness this hcall() should be called with a count parameter of no + more than 512, LoPAR architecture provides enforcement for this + restriction to aid in client code debug. + + + Syntax: + + + + + + + Semantics: + + + + If the LIOBN, or IOBA, are outside of the range of calling + partition assigned values return H_PARAMETER. + + + + If the Shared Logical Resource option is implemented and the + LIOBN, or IOBA represents a logical resource that has been rescinded by + the owner, return H_RESCINDED. + + + + + + If the count parameter is greater than 512 then return + H_P4 + + + + If the count parameter added to the TCE index specified by IOBA + is outside of the range of the calling partition assigned values return + H_PARAMETER. + + + + If the Page Mapping and Control field of the TCE is not + “Page Fault” (see + ) + + + + Then if the logical address within the TCE parameter is outside + of the range of calling partition assigned values + + + + Then return H_PARAMETER. + + + + If the Shared Logical Resource option is implemented and the + logical address’s page number represents a page that has been + rescinded by the owner, return H_RESCINDED. + + + + + + Else translate the logical address within the TCE parameter into + the corresponding physical real address. + + + + + + + + The hypervisor stores the TCE resultant value in the TCE table + entries specified by the LIOBN, IOBA and count parameters; returning + H_Success. (In the “Page Fault” case the RPN remains + untranslated.) + + + + Implementation Note: The PA requires the OS to issue a sync + instruction to proceed the signaling of an IOA to start an IO operation + involving DMA to guarantee the global visibility of both DMA and TCE + data. This hcall() does not include a sync instruction to guarantee + global visibility of TCE data and in no way diminishes the requirement + for the OS to issue it. + +
+ +
+ H_PUT_TCE_INDIRECT + This hcall() enters the mapping of up to 512 4 K pages into the + specified Translation Control Entry. The LIOBN parameter if positive is + the cookie (LIOBN) of the specific TCE table to load. For the Multi-TCE + Table (MTT) option, if the LIOBN parameter is negative, CNT = the + absolute value of LIOBN (up to 128), and the first CNT 8 byte entries of + the buffer referenced by the TCE parameter contains the TCE table cookies + (LIOBNs) for the various TCE tables to load (up to a maximum of 128 TCE + tables). + + Note: Users of the MTT option that are subject to + partition migration should be prepared for the loss of support for the + MTT option after partition migration. + + + Syntax: + + + + + + Semantics: + /* Validate the input parameters */ + + + + If the LIOBN parameter is non-negative then do + + + + If the count parameter is > 512 then return + H_Parameter. + + + + If the Shared Logical Resource option is implemented and the + LIOBN parameter represents a TCE table that has been rescinded by the + owner, return H_RESCINDED. + + + + If the LIOBN parameter represents a TCE table that is not valid + for the calling partition, return H_Parameter. + + + + Liobns[0] = the LIOBN parameter. + + + + If the Shared Logical Resource option is implemented and any of + the I/O bus address range represented the IOBA parameter plus count pages + within the TCE table represented by the LIOBN parameter represents + rescinded resource, return H_RESCINDED. + + + + If any of the I/O bus address range represented the IOBA + parameter plus count pages within the TCE table represented by the LIOBN + parameter is not valid for the calling partition then return + H_Parameter. + + + + end + + + + + + Else do + + + + If the MTT Option is not enabled return H_Function. + + + + If the LIOBN parameter < -128 then return H_Parameter. + + + + If the sum of the count parameter plus |LIOBN| is > 512 then + return H_Parameter. + + + + end + + + + + + If the Shared Logical Resource option is implemented and the TCE + parameter represents a logical page address of a page that has been + rescinded by the owner, return H_RESCINDED. + + + + If the TCE parameter represents the logical page address of a + page that is not valid for the calling partition, return + H_Parameter. + + + + Copy the contents of the page referenced by the TCE table to a + temporary hypervisor page (Temp) for validation without the potential for + caller manipulation. + + + + + + /* Validate the indirect parameters */ + + + + VAL= 0 + + + + If the LIOBN parameter is negative then do + + + + For CNT = 1,|LIOBN|,1 + + + + T = 8 byte entry Temp [VAL] + + + + If the Shared Logical Resource option is implemented and T as an + LIOBN represents a TCE table that has been rescinded by the owner, return + H_RESCINDED. + + + + If T as an LIOBN represents a TCE table that is not valid for the + calling partition, return H_Parameter. + + + + Liobns[VAL+] = T. + + + + If the Shared Logical Resource option is implemented and any of + the I/O bus address range represented the IOBA parameter plus count pages + within the TCE table represented by “T” as an LIOBN + represents a rescinded resource, return H_RESCINDED. + + + + If any of the I/O bus address range represented the IOBA + parameter plus count pages within the TCE table represented by + “T” as an LIOBN is not valid for the calling partition then + return H_Parameter. + + + + loop + + + + + + end + + + + + + + + /* Translate the logical pages addresses to physical*/ + + + + for CNT = 1,count,1 + + + + T = 8 byte entry Temp [VAL+] + + + + If the Page Mapping and Control field of the 8 byte entry + “T” is not “Page Fault” (see + ) then do + + + + If the Shared Logical Resource option is implemented and the + value of “T” as a logical address represents a page that has + been rescinded by the owner, then return H_RESCINDED. + + + + If “T” as a logical address is outside of the range + of calling partition assigned values then return H_PARAMETER. + + + + Translate the logical address within the TCE buffer entry into + the corresponding physical real address. + + + + Temp[CNT - 1] = translated physical real address. + + + + end + + + + + + loop + + + + + + + + /* Fill the TCE table(s) */ + + + + If LIOBN parameter is negative then VAL = |LIOBN| else VAL = + 1. + + + + For TABS = 1, VAL, 1 + + + + The TCE table to fill is that referenced by Liobns[VAL] as an + LIOBN. + + + + INDEX = the page index within the TCE table represented by the + IOBA parameter. + + + + For CNT = 1, count, 1 + + + + TCE_TABLE [Liobns[VAL], INDEX+] = Temp [CNT-1] + + + + Loop + + + + + + Loop + + + + + + Return H_Success. + + + + Implementation Note: The PA requires the OS to issue a sync + instruction to proceed the signaling of an IOA to start an IO operation + involving DMA to guarantee the global visibility of both DMA and TCE + data. This hcall() does not include a sync instruction to guarantee + global visibility of TCE data and in no way diminishes the requirement + for the OS to issue it. + +
+ +
+ +
+ Processor Register Hypervisor Resource Access + Certain processor registers are architecturally hypervisor + resources, in the following cases the hypervisor provides controlled + write access services. + +
+ H_SET_SPRG0 + + + + + Parameters: + + + + value: The value to be written into SPRG0. No parameter checking + is done against this value. + + + +
+ +
+ H_SET_DABR + Note: Implementations reporting compatibility to ISA versions less + than 2.07 are required to implement this interface; however, this + interface is being deprecated in favor of + for newer + implementations. + + + + + Semantics: + + + + If the platform does not implement the extended DABR facility + then: + + + + Validate the value parameter else return H_RESERVED_DABR and the + value in the DABR is not changed: + + + + The DABR BT bit (Breakpoint Translation) is checked for a value + of 1. + + + + + + + + Else (The platform does implement the extended DABR + facility): + + + + Load the DABRX register with 0b0011. + + + + place the value parameter into the DABR. + + + + + + Return H_Success. + + + + +
+ +
+ H_PAGE_INIT + + + + + Parameters: + + + + flags: zero, copy, I-Cache-Invalidate, I-Cache-Synchronize, and + for the CMO option: CMO Option flags as defined in + . + + + + destination: The logical address of the start of the page to be + initialized + + + + source: The logical address of the start of the page use as the + source on a page copy initialization. This parameter is only checked and + used if the copy flag is set. + + + + + + + Semantics: + + + + The logical addresses are checked, they must both point to the + start of a 4 K system memory page associated with the partition or return + H_Parameter. + + + + If the Shared Logical Resource option is implemented and the + source/destination logical page number represents a page that has been + rescinded by the owner, return H_RESCINDED. + + + + + + If the zero flag is set, clear the destination page using a + platform specific routine (usually a series of dcbz instructions). + + + + If the copy flag is set, execute a platform specific optimized + copy of the full 4 K page from the source to the destination. + + + + If I-Cache-Invalidate flag is set, issue icbi instructions for + all of the page’s cache lines + + + + If I-Cache-Synchronize flag is set, issue dcbst and icbi + instructions for all of the page’s cache lines. Implementations may + need to issue a sync instruction to complete the coherency management of + the I-Cache. + + + + For the CMO option: set the page usage state per the CMO Option + flags field of the flags parameter as defined in + . + + + + Return H_Success + + + + Note: For the CMO option, the CMO option flags may be + used to notify the platform of the page usage state of a page without + regard to its hardware page table entry or lack there of independent of + any other option flags. + +
+ +
+ H_SET_XDABR + Note: Implementations reporting compatibility to ISA versions less + than 2.07 are required to implement this interface; however, this + interface is being deprecated in favor of + for newer + implementations. + This hcall() provides support for the extended Data Address + Breakpoint facility. It sets the contents of the Data Address Breakpoint + Register (DABR) and its companion Data Address Breakpoint Register + Extension (DABRX). A principal advantage of the extended DABR facility is + that it allows setting breakpoints for LPAR addresses that the hypervisor + had to preclude using the previous facility. + + + + + Semantics: + + + Validates the extended parameter else return H_Parameter: + + + + Reserved Bits (0-59) are zero. + + + + The HYP bit (61) is off. + + + + The rest of the PRIVM field (Bits 62-63) is one of those + supported: + + + + 0b01 Problem State + + + + 0b10 Privileged non-hypervisor + + + + 0b11 Privileged or Problem State + + + + (Specifying neither Problem or Privileged state is not + supported) + + + + + + + Load the validated extended parameter into the DABRX + + + Load the value parameter into the DABR + + + Return H_Success. + + + +
+ +
+ H_SET_MODE + This hcall() is used to set hypervisor processing resource mode + registers such as breakpoints and watchpoints. The modes supported by the + hardware processor are a function of the processor architectural level as + reported in the + “cpu-version” property. + presents the valid parameter + ranges for the architectural level reported in the + “cpu-version” property. + Setting breakpoints: A breakpoint is set for a hardware tread. + Should the hardware thread complete an instruction who's effective + address matches that of the set breakpoint a trace interrupt is signaled. + When setting the breakpoint resource, the mflags and value2 parameters + are zero. The value1 parameter is the effective address of the breakpoint + to be set. + Setting watchpoints: A watchpoint is set for a hardware tread. + Should the hardware thread attempt to access within the specified double + word range of the effective address specified by the value1 parameter as + qualified by the conditions specified in the value2 parameter a Data + Storage type interrupt is signaled. When setting the watchpoint resource, + the mflags parameter is zero. The value1 parameter is the effective + double word address of the watchpoint to be set. The value2 parameter + specifies the qualifying conditions for the access, these are a subset of + the POWER ISA conditions that are relevant within the context of a + logical partition. This subset includes the MRD field, DW, DR, WT, WTI, + PNH, and PRO bits. All other value2 fields are zero. + Setting Interrupt Vector Location Modes: The Alternate Interrupt + Location (AIL) Mode for the calling partition is set. Since this function + has partition wide scope, it may take longer for the hypervisor to + perform the function on all processors than is permissible during a + synchronous call; therefore, the call might return long busy. In that + case the caller should repeat the call with the same parameters after the + specified time period until the H_SUCCESS return code is received. A call + with different parameters indicates the beginning of a new partition wide + mode setting. The desired AIL mode is encoded in the two low order mflags + bits (all other mflags bits are 0) while both value1 and value2 + parameters are zero. + + + + + Semantics: + switch (resource) { + case 0: /* not used / + return H_P2; + break; + case 1: /* Completed Instruction Address Breakpoint Register + */ + if value2 <> 0 the return H_P4; + if mflags <> 0 then return H_UNSUPPORTED_FLAG; + If low order two bits of value1 are 0b11 then return H_P3; /* not + hypervisor instruction address */ + move value 1 into CIABR; /* note the value2 parameter is not used + for this resource */ + break; + case2: /* Watch point 0 registers */ + if mflags <> 0 then return H_UNSUPPORTED_FLAG; + If value2 bit 61 == 0b1 then return H_P4; /* not hypervisor + addresses */ + move value1 into DAWR0; + move value2 into DAWRX0; + break; + case3: / * Address Translation Mode on Interrupt * / + if value1 < > 0 then return H_P3; + if value2 < > 0 then return H_P4; + switch (mflags) { + case 0: / * IR = DR = 0 * / + Set LPCR AIL field of calling partition processors to 0b00; + break; + case 1: / * reserved * / + return H_UNSUPPORTED_FLAG ( - 318); + break; + case 2: / * IR = DR = 1 interrupt vectors at E.A. 0X18000 * + / + Set LPCR AIL field of calling partition processors to 0b10; + break; + case 3: / * IR = DR = 1 interrupt vectors at E.A. 0XC000 0000 0000 + 4000 * / + Set LPCR AIL field of calling partition processors to 0b11; + break; + default: return H_UNSUPPORTED_FLAG (value based on most + convenient + unsupported bit); + break; + default: + return H_P2; + break; } + + + H_SET_MODE Parameters per ISA Level + + + + + + + + + + + + + ISA level + + + + + Supported Resource Values + + + + + Values Supported mflags + + + + + Value 1 + + + + + Value 2 + + + + + Comments  + + + + + + + + 2.07 + + + 1 + + + None + + + Breakpoint Address + + + None + + +   + + + + + 2 + + + None + + + Watchpoint Double Word Address + + + Watchpoint Qualifying Conditions + + +   + + + + + 3 + + + 0 + + + None + + + None + + + IR=DR=0 No offset + + + + + 1 + + + None + + + None + + + Reserved + + + + + 2 + + + None + + + None + + + IR=DR=1 offset 0x18000 + + + + + 3 + + + None + + + None + + + IR=DR=1 offset 0xC000 0000 0000 4000 + + + + + All Others + + + All Others + + + All Others + + + Reserved + + + + + All Others + + + All Others + + + All Others + + + All Others + + + Reserved + + + + +
+ + + + R1--1. + + For implementations supporting POWER + ISA level 2.07 and beyond: the platform must implement the H_SET_MODE + hcall() per the syntax and semantics of section + . + + + + +
+
+
+ +
+ Debugger Support hcall()s + The real mode debugger needs to be able to get to its async port + and beyond the real mode limit register without turning on virtual + address translation. The following hcall()s provide that + capability. + +
+ H_LOGICAL_CI_LOAD + + + + + Parameters: + + + + size: The size of the cache inhibited load: + + + + byte = 1 + + + + half = 2 + + + + full = 4 + + + + double=8 + + + + All other size values are illegal and returns H_Parameter + + + + + + addr: The logical address of the cache inhibited location to be + read. The hypervisor checks that the address is within the range of + addresses valid for the partition, on a boundary equal to the requested + length, is not to the location BA+4 within an interrupt management area, + and mapped as cache inhibited (cache paradoxes are to be avoided)-- Else + H_Parameter. + + + + On successful return (H_Success), the read value is low order + justified in register R4. + + + + +
+ +
+ H_LOGICAL_CI_STORE + + + + + Parameters: + + + + size: The size of the cache inhibited store: + + + + byte = 1 + + + + half = 2 + + + + full = 4 + + + + double=8 + + + + All other size values are illegal and returns H_Parameter + + + + + + addr: The logical address of the cache inhibited location to be + written. The hypervisor checks that the address is within the range of + addresses valid for the partition, on a boundary equal to the requested + length, is not to the location BA+4 within an interrupt management area, + and mapped as cache inhibited (cache paradoxes are to be avoided). + + + + value The value to be written is low order justified in register + R6. + + + + +
+
+ +
+ Virtual Terminal Support + This section has been moved to + . + + Architecture and Implementation Note: The requirement + to provide the + “ibm,termno” property in the + /rtas node, has been removed (it is now necessary to + look for + vty nodes and use their unit address from the + “reg” property to get the same + information). The + “ibm,termno” property called for + sequential terminal numbers, but with the use of unit addresses from the + “reg” property, such is not the + case. +
+ +
+ Dump Support hcall()s + To allow the OS to dump hypervisor data areas in support of field + problem diagnosis the hcall-dump support function set contains the + H_HYPERVISOR_DATA hcall(). This hcall() is enabled or disabled (default + disabled) via the Hardware Management Console. If the hcall-dump function + set is disabled an attempt to make a H_HYPERVISOR_DATA hcall() returns + H_Function. When the function is enabled, the hcall-dump function set is + specified in the + “ibm,hypertas-functions” property. The + requester calls repeatedly starting with a control value of zero getting + back 64 bytes per call and setting the control parameter on the next call + to the previous call’s return code until the hcall() returns + H_Parameter indicating that all hypervisor data has been dumped. The + precise meaning of the sequence of data is implementation dependent. The + H_HYPERVISOR_DATA hcall() need only return data in the firmware working + storage that is not contained in the PFT or TCE tables since the contents + of these tables are available to the OS. + +
+ H_HYPERVISOR_DATA + + + + + Parameters: + + + + control: A value passed to establish the progress of the + dump. + + + + + + Semantics: + + + + If the control value is zero, the data returned is the first + segment of the hypervisor’s working storage, with a non-negative + return code. + + + + If the control value is equal to the return code of the last + H_HYPERVISOR_DATA call, and the return code is non-negative, the data + returned in R4 through R11 is the next sequential segment of the + hypervisor’s working storage. The contents of R4 through R11 are + undefined if the return code is negative. + + + + Implementation Note: It is expected that the control + value is be used by the H_HYPERVISOR_DATA routine as an offset into the + hypervisor’s data area. For the expected implementation, hypervisor + checks the value of the control parameter to insure that the resultant + pointer is within hypervisor’s data area else it returns + H_Parameter. + +
+
+ +
+ Interrupt Support hcall()s + Injudicious values written to the interrupt source controller may + affect innocent partitions. The following hcall()s monitor the + architected functions. + +
+ H_EOI + + Software Implementation Note: Issuing more H_EOI + calls than actual interrupts may cause undesirable behavior, including + but not limited to lost interrupts, and excessive phantom + interrupts. + + + + + Parameters: + + + + xirr: The low order 32 bits is the value to be written into the + calling processor’s interrupt management area’s external + interrupt request register (xirr). + + + + + + Semantics: + + + + If the platform implements the Platform Reserved Interrupt + Priority Level Option, and the priority field of the xirr parameter + matches one of the reserved interrupt priorities then return + H_Resource. + + + + If the value of the xirr parameter is such that the low order 3 + bytes (xisr) is one of the interrupt source values assigned to the + partition, and the high order byte xirr byte (cppr) is equal or less + favored than the current cppr contents, then the value is written into + the calling processor’s xirr causing the interrupt source + controller to signal an “end of interrupt” (EOI) to the + specified interrupt source logic, then hypervisor returns H_Success or + H_Hardware (if an unrecoverable hardware error occurred). If the xirr + value is not legal, hypervisor returns H_Parameter. + + + + If the Shared Logical Resource option is implemented and the xirr + parameter represents a shared logical resource location that has been + rescinded by the owner, return H_RESCINDED. + + + + + +
+ +
+ H_CPPR + + + + + Parameters: + + + + cppr: The low order byte is the value to be written into the + calling processor’s interrupt management area’s current + processor priority register (cppr). + + + + + + Semantics: + + + + If the platform implements the Platform Reserved Interrupt + Priority Level Option, and the priority field of the xirr parameter + matches one of the reserved interrupt priorities then return + H_Resource. + + + + The value of the cppr parameter is written into the calling + processor’s cppr causing the interrupt source controller to reject + any interrupt of equal or less favored priority. Then hypervisor returns + H_Success or H_Hardware (if an unrecoverable hardware error + occurred). + + + +
+ +
+ H_IPI + + + + + Parameters: + + + + server#: The server number gotten from the + “ibm,ppc-interrupt-server#s” + property associated with the processor and/or thread + to be interrupted. + + + + mfrr: The priority value the inter-processor interrupt to be + signaled. + + + + + + Semantics: + + + + If the platform implements the Platform Reserved Interrupt + Priority Level Option, and the priority field of the xirr parameter + matches one of the reserved interrupt priorities then return + H_Resource. + + + + If the value of the server# parameter specifies of one of the + processors in the calling processor’s partition, then the value in + the low order byte of the mfrr parameter is written into the mfrr + register (BA+12) of the processor’s interrupt management area + causing that interrupt source controller to signal an + “inter-processor interrupt” (IPI) to the processor associated + with the specified interrupt management area. Hypervisor then returns + H_Success or H_Hardware (if an unrecoverable hardware error occurred). If + the server# value is not legal, hypervisor returns H_Parameter. + + + + If the Shared Logical Resource option is implemented and the + server# parameter represents a shared logical resource location that has + been rescinded by the owner, return H_RESCINDED. + + + + + + +
+ +
+ H_IPOLL + + + + + Parameters: + + + + server#: The server number gotten from the + “ibm,ppc-interrupt-server#s” + property associated with the processor and/or tread + to be interrupted. + + + + + Semantics: + + + + If the value of the server# parameter specifies of one of the + processors in the calling processor’s partition, then hypervisor + reads the 4 byte contents of the processor’s interrupt management + area port at offset BA+0 into the low order 4 bytes of register R4 and + the one byte of the mfrr (BA+12) into the low order byte of R5. Reading + these addresses has no side effects and is used to poll for pending + interrupts. Hypervisor then returns H_Success or H_Hardware (if an + unrecoverable hardware error occurred). If the server# value is not + legal, hypervisor returns H_Parameter. + + + + If the Shared Logical Resource option is implemented and the + server# parameter represents a shared logical resource location that has + been rescinded by the owner, return H_RESCINDED. + + + + + +
+ +
+ H_XIRR / H_XIRR-X + These hcall()s provide the same base function that is they return + the interrupt source number associated with the external interrupt. + H_XIRR-X further supplies the time stamp of the interrupt . Legacy + implementations implement only H_XIRR, returning H_Function for a call to + H_XIRR-X. POWER8 implementations also implement H_XIRR-X. + + + + + Parameters: + + + + H_XIRR: no input parameters defined. + + + + H_XIRR-X: cppr: the internal current processor priority of the + calling virtual processor. Valid values in the range of 0x00 - most + favored to 0xFF - least favored less those values specified by the + “ibm,plat-res-int-priorities” property in + the root node). + + + + + + Semantics: + + + + Hypervisor reads the 4 byte contents of the processor’s + interrupt management area port at offset BA+4 into the low order 4 bytes + of the register R4. Reading this address has the side effect of accepting + the interrupt and raising the current processor priority to that of the + accepted interrupt. + + + + Place the timestamp when the hypervisor first received the + interrupt into R5. + + + + Hypervisor then returns H_Success or H_Hardware (if an + unrecoverable hardware error occurred). + + + +
+
+ +
+ Memory Migration Support hcall()s + To assist an OS in memory migration, the following hcall() is + provided. During the migration process, it is the responsibility of the + OS to not change the DMA mappings referenced by the translations buffer + (for example by using the H_GET_TCE, H_PUT_TCE hcall()s, or other DMA + mapping hcall()s). Failure of the OS to serialize such DMA mapping access + may result in undesirable DMA mappings within the caller’s + partition (but not outside of the caller’s partition). Further, it + is the responsibility of the OS to serialize calls to the H_MIGRATE_DMA + service relative to the logical bus numbers referenced. Failure of the OS + to serialize relative to the logical bus numbers may result DMA data + corruption within the caller’s partition. + On certain implementations, DMA read operations targeting the old + page may still be in process for some time after the H_MIGRATE_DMA call + returns; this requires that the OS not reuse/modify the data within the + old page until the worst case DMA read access time has expired. The + “ibm,dma-delay-time” property (see + ) gives the OS this implementation + dependent delay value. Failure to observe this delay time may result in + data corruption as seen by the caller’s I/O adapter(s). + + + + R1--1. + + For the LPAR option supporting the hcall-migrate function + set: The platform must supply the + “ibm,dma-delay-time” property under the + /rtas node of the device tree. + Memory pages may be simultaneously mapped by multiple DMA agents, + with different translation table formats and operation characteristics. + The H_MIGRATE_DMA hcall() atomically performs the memory migration + process so that the new page contains the old page contents (as updated + by any DMA write operations allowed during migration), with all DMA + mappings and engines directed to access the new page. The entries in the + mapping list contain the logical bus number associated with the mapping + and the I/O address of the mapping. From these two data, the hcall() + associates the using DMA agent, that agent’s DMA control + procedures, the specific mapping table and mapping table entry. + + + + + R1--2. + + For the LPAR option supporting the hcall-migrate function + set: The platform must support migration of pages mapped for + DMA using any of the platform supported DMA agents. + + + + + R1--3. + + For the LPAR option supporting the hcall-migrate function + set: All the platform’s DMA agents must support + mechanisms that enable the platform to meet the syntax, semantics and + requirements set forth in section 14.5.4.8.1. + + Implementation Note: The minimal hardware mechanisms + to support the hcall-migrate function set are to quiesce DMA operation, + flush outstanding data to their targets (both reads and writes), modify + their DMA mapping and re-enable operation utilizing said modified DMA + mapping without introducing unrecoverable operational failures. Provision + for the hardware to direct DMA write operations to both old and new pages + provides a significantly more robust implementation. + It is the intent of this architecture to have all memory in the + platform have the capability to be migrated. However, on the rare + implementation that cannot meet that intent, the + “ibm,no-h-migrate-dma” property may be + provided in + memory nodes for which H_MIGRATE_DMA cannot be + implemented. + + + + + R1--4. + + For the LPAR option supporting the hcall-migrate function + set: If a memory node cannot support H_MIGRATE_DMA, then that + memory node must contain the + “ibm,no-h-migrate-dma” property. + For the I/O Super Page option the I/O page size is an attribute of + the specified LIOBN (I/O pages mapped by a given LIOBN are a uniform + size), also the syntax and semantics of H_MIGRATE_DMA are extended to + allow migration of I/O pages that are larger than 4K bytes and have more + than 256 xlates translation entries. Specifying more than 256 translation + entries requires a sequence of calls to H_MIGRATE_DMA with the same + “newpage” address. Making a call in the sequence with a + length parameter of zero terminates the operation - should this + termination happen after the start of the physical migration, the + resulting state of the calling partition’s memory is unpredictable. + Failure to make a continuing call in the sequence for more than one + second aborts the operation; again the resulting state of the calling + partition’s memory is unpredictable. + The introduction of super pages introduces the case where portions + of the super page may be I/O mapped and thus require the use of + H_MIGRATE_DMA to move the logical super page from one physical page to + another even though the super page as a whole may not be I/O mapped. To + handle this case, the LIOBN value of 0xFFFFFFFF is reserved to allow the + specification, within an translations entry (passed to H_MIGRATE_DMA via + the xlates parameter), of a super page that is not currently I/O mapped. + In this case, the normally reserved byte at xlates entry offset 4 is used + to specify the power of two size of the super page. + + + + + R1--5. + + For the I/O Super Page option: the platform must + support the setting by the client of byte 3 bit 0 of the + ibm,architecture.vec 5 as input to the + ibm,client-architecture-support method. + + + + + +
+ H_MIGRATE_DMA + + + + + + Parameters: + + + + newpage (The Logical address of the new page to be the target of + the TCE translations) + + + + xlates (The Logical address of a list of translations against the + target page the format of this list is: + + + + List starts on a page (4 K) boundary. + + + + Contains up to 256 translation entries: + + + + First 4 bytes of a translation entry is the logical bus number as + from either the: + + + + “ibm,dma-window” property + + + + or the reserved LIOBN 0xFFFFFFFF. + + + + + + Next 12 bytes of a translation entry is the logical bus offset + (I/O bus address). The format of the I/O bus address is dependent upon + the DMA agent: + + + + For 32 bit PCI, the high order 8 bytes are reserved with the low + order 4 bytes containing a 4 K aligned address (low order 12 bits + =zero). + + + + For 64 bit PCI, the high order 4 bytes are reserved with the low + order 8bytes containing a 4 K aligned address (low order 12 bits + =zero). + + + + For the I/O Super Page option the very first translation entry + passed is for the largest I/O page to be migrated by this sequence of + calls; else all translation entries are for the single 4K byte logical + page being migrated. The first translation entry may either be a current + I/O mapping for the largest I/O page that the caller wishes to migrate, + or the first translation entry may use the reserved LIOBN number of + 0xFFFFFFFF, with the next byte indicating the page size as 2**N where N + is the numeric value of the byte at offset 4 into the translation entry + with the low order 8 bytes of the translation entry being the logical + real address of the start of the page to be migrated (the low order N + bits = zero). + + + + + + + + + + length (Number of entries in translation list is less than or + equal to 256) + + + + If the total number of translation entries in the xlates list is + less than or equal to 256 then the “length” parameter is the + number of translation entries. + + + + For the I/O Super Page option and specifying more than 256 + translation entries, the client makes a series of calls, each passing 256 + translation entries with the “length” parameter being the + negative of the total number of translation entries yet to be passed + until there are less than or equal to 256 remaining then for the final + call in the initiating sequence the “length” parameter is + positive as above. + + + + + + + + + Semantics: + + + + For the I/O Super Page option: determine if a migration operation + is in process for this “newpage” address: + + + + Then: + + + + If the previous hcall() for the migration operation was more than + 1 second ago, return H_Aborted. + + + + If the length parameter value is zero then abort the migration + operation and return H_TERM. + + + + If the length parameter value is not the next expected in the + sequence return H_P3. + + + + Record the new xlates + + + + If the length parameter is less than zero return + H_CONTINUE. + + + + + + Else + + + + If the number of outstanding operations is more than an + implementation specific number as communicated in the + “ibm,vec-5” property then return + H_Resource + + + + If the length parameter is less than zero, initiate a new + migration operation for the “newpage” address. (Note + resources for the operation may be allocated at this point and freed when + the operation terminates either normally, in error, or via timeout. + Implementations may, in unusual cases, use a busy return code to wait for + the release of resources from an immanently completing operation. + + + + The first xlate entry specifies the length and starting address + of the page to be migrated, if this specification is invalid (unsupported + length, the address is invalid for the partition, or not aligned to the + length) return H_MEM_PARM. + + + + If the operation specifies more than an implementation specific + number of xlates as communicated in the + “ibm,vec-5” property then return + H_Resource. + + + + + + + + Check that the page to be migrated can be migrated, else + H_PARAMETER. + + + + Check that the newpage is within the allocated logical page range + of the calling partition and the address is aligned to the I/O page size + of the first translation entry passed else H_PARAMETER. + + + + If the Shared Logical Resource option is implemented and the + newpage parameter represents a shared logical resource location that has + been rescinded by the owner, return H_RESCINDED. + + + + + + The contents of the xlates buffer are checked. + + + + This may be done as each entry is used, or it may be done prior + to starting the operation. + + + + If the former, then partial processing must be backed out in the + case of a detected parameter error. + + + + If the later, then the translation entries must be copied into an + area that is not accessible by the calling OS to prevent parameter + corruption after they have been verified. The OS perceived reentrancy of + the function is not diminished if this option is chosen. + + + + + + The xlates buffer starts on a 4 K boundary within the + partition’s logical address range else H_PARAMETER. + + + + The length parameter is between (for the I/O Super Page option: + the negative of the maximum number of xlate entries supported as + indicated in the + “ibm.architecture-vec-5” property of the + /chosen device tree node else 1) and 256 else + H_PARAMETER. + + + + For the I/O Super Page option: the length of the physical page to + be migrated is the length of the I/O page of the first translation entry; + else the length of the physical page to be migrated is 4K bytes. + + + + Each translation originally references the same physical page, or + a portion there of, else H_PARAMETER. + + + + Each logical bus offset is within the allocated range of the + calling partition else H_PARAMETER. + + + + If the Shared Logical Resource option is implemented and the + logical bus offset represents a shared logical resource location that has + been rescinded by the owner, return H_RESCINDED. + + + + + + Check the logical bus number: + + + + Is allocated to the calling partition else H_PARAMETER. + Or: If the Shared Logical Resource option is implemented and the + logical bus number represents a shared logical resource location that has + been rescinded by the owner, return H_RESCINDED. + + + + For the I/O Super Page option: if the LIOBN implies a larger page + size than that specified by the first translation entry for this migrate + operation, place the index of the translation entry (0-255) into register + R4 and return H_PGSB_PARM. + + + + If the LIOBN referenced an unsupported DMA agent, place the index + of the translation entry (0-255) into register R4 and return + H_Function. + + + + If the logical bus number is not supported, return + H_PARAMETER. + + + + Note: The following is written from the perspective + of a PCI DMA agent; other DMA agents may require a different sequence of + operations to achieve equivalent results. + + + + + + The hypervisor disables arbitration for the IOA(s) associated + with the translation entries. (In some cases, where multiple IOAs share a + given TCE range, arbitration must be disabled for multiple IOAs. The + firmware assigned the bus address ranges to each IOA so knows which IOAs + correspond to which translation.) + + + + Waits for outstanding DMA write activity to complete. (This is + accomplished by doing a load from an appropriate register the bridge(s) + closest to the IOA -- when the load completes (dependency on load data is + satisfied) all DMA write activity has completed.) + + + + The hypervisor copies the contents of the 4 K page originally + accessed by the TCE(s) to the page referenced by the newpage + value. + + + + The hypervisor translates the logical address within the newpage + parameter and stores the resultant value in the TCE table entries + specified by the translation entries. + + + + Executes a sync operation to ensure that the new TCE data is + visible. + + + + The hypervisor enables arbitration on the IOA(s) associated with + the translation entities and returns H_Success. + + + + Implementation Notes: + + + + The firmware should be written to minimize the arbitration + disable time. The old page should be read into cache (possibly using the + data cache touch operations) prior to disabling the arbitration. + Implementation dependent algorithms can significantly improve the page + copy time. + + + + The firmware does not have to serialize this hcall() with other + hcall()s as long as it updates the TCE using atomic eight (8) byte write + operations. However, if the OS does not serialize this call with + H_PUT_TCE to the same TCE, and with other H_MIGRATE_DMA calls to the same + IOA(s) the calling LPARs DMA buffers could be corrupted. + + + + To minimize the effect of such unsupported DMA agents, the + platform designer should isolate such agents on their own bus with their + own “ibm,dma-window” property + specification. + + + +
+
+ +
+ Performance Monitor Support hcall()s + + +
+ H_PERFMON + To manage the Performance Monitor Function: + + + + + Parameters: + + + + mode-set Platform specific modes to be set by this call + + + + mode-reset Platform specific modes to be reset by this + call + + + + + + Semantics: + + + + mode-set bit(s) check for platform specific validity else + H_PARAMETER + + + + mode-reset bit(s) check for platform specific validity else + H_PARAMETER + + + + if any mode-set bits are set, activate corresponding mode(s) - if + logically capable else H_RESOURCE + + + + if any mode-reset bits are on, deactivate corresponding mode(s) - + if logically capable else H_RESOURCE + + + + place current state of platform specific modes in R4, return + H_Success + + + + + + Defined Perfmon mode bits: + bit 0: 1= Enable Perfmon + bit1: 0= Low threshold granularity 1= High threshold + granularity + +
+
+ +
+ H_GET_DMA_XLATES_LIMITED + This hcall returns the I/O bus address of the first entry defined + for the specified LIOBN and the corresponding logical address within the + range beginning with the Start logical address and less than the End + logical addresses, the search is limited to the range of I/O bus + addresses specified by the SIOBA and EIOBA parameters. + + + + R1--1. + + For the LRDR Option: The platform must implement the + H_GET_DMA_XLATES_LIMITED hcall() per the syntax and semantics specified + in section + . + + + + + R1--2. + + For the LRDR Option: The platform must present the + “ibm,h-get-dma-xlates-limited-supported” property in + all PCI host bridge OpenFirmware nodes for which the + H_GET_DMA_XLATES_LIMITED hcall() is supported for all child + LIOBNs. + + + + + + Syntax: + + + + + + + Parameters: + + + + Register R4: Logical I/O Bus Number (LIOBN) + + + + Bits 0-31are reserved and set to zero. + + + + Bits 32-63 contain a 32-bit unsigned binary integer that + identifies a translation which may have one or more entries that + translate to a page within a range specified by the Start and End logical + addresses. + + + + + + Register R5: Start Logical Address (SLA) + + + + Register R6: End Logical Address (ELA) + + + + Register R7: Start I/O Bus Address (SIOBA) of the translation + specified by the LIOBN + + + + The SIOBA register may specify a special value of -1 or a + starting IOBA + + + + + + Register R8: End I/O Bus Address (EIOBA) of the translation + specified by the LIOBN + + + + The EIOBA register may specify a special value of -1 or an ending + IOBA + + + + + + + + Semantics: + + + + Check that the specified LIOBN is supported and allocated to the + calling logical partition, else H_PARAMETER. + + + + Check that the specified start logical address (SLA) is within + the allocated range of the calling logical partition, and is designated + on a 4 K-byte boundary, else H_P2. + + + + Check that the End logical address (ELA) minus 4K is within the + allocated range of the calling logical partition, and is designated on a + 4 K-byte boundary, else H_P3. (May point no further than one page beyond + the maximum partition logical real address in order to stay within the + partition yet include the last partition page in the range of the + test.) + + + + Check that the specified starting logical address (SLA) is less + than the specified ending logical address (ELA), else H_P2. + + + + Check that the page specified by the logical addresses within the + specified range is within the allocated range of the calling logical + partition and the address is 4 K-byte aligned else H_P2. + + + + Check the content of SIOBA + + + + If a value other than -1 is specified, check that the specified + start I/O bus address (SIOBA) is not outside of the range of IOBAs for + the specified LIOBN, else H_P4. + + + + If the SIOBA specifies a value of -1, the hypervisor starts the + search at the lowest IOBA in the translation table, otherwise the search + starts at the address specified by the SIOBA. + + + + + + Check the content of EIOBA + + + + If a value other than -1 is specified, check that the specified + ending I/O bus address (EIOBA) is not outside of the range of IOBAs for + the specified LIOBN, else H_P5. + + + + If the EIOBA specifies a value of -1, the hypervisor ends the + search at the highest IOBA in the translation table, otherwise the search + ends at the address specified by the EIOBA. + + + + + + + + + Outputs: + Place the I/O bus address and corresponding logical address into + the respective registers: + + + + Register R4: I/O Bus Address (IOBA) + + + + This register contains a 64-bit unsigned binary integer that + specifies the I/O bus address of the page within the specified logical + address range for the specified LIOBN. + + + + The IOBA is returned when the hcall() completes with either + H_PARTIAL, H_PAGE_REGISTERED, or H_IN_PROGRESS return codes. + + + + + + Register R5: Corresponding Logical Address (CLA) + + + + This register contains a 64-bit unsigned binary integer that + designates the logical address of a page within the specified range that + corresponds to the I/O bus address. + + + + If the hcall() completes with H_IN_PROGRESS return code, the + corresponding logical address (CLA) is not returned. + + + + + + When the hcall() completes with H_PARTIAL or H_PAGE_REGISTERED + return code: + + + + The I/O bus address (IOBA) and corresponding logical address + (CLA) are returned. + + + + + + When the hcall() completes with H_PAGE_REGISTERED return + code: + + + + The I/O bus address (IOBA) is for the final page of the + translation table for the specified LIOBN as limited by the EIOBA + parameter. + + + + + + When the hcall() completes with H_IN_PROGRESS return code: + + + + The current IOBA being searched against the specified range is + returned, but the corresponding logical address is not returned. + + + + The hcall can be reissued by specifying the IOBA as the starting + IOBA without incrementing the IOBA by the resource page size. + + + + + + + Firmware Implementation Notes: + + + + When the H_GET_DMA_XLATES_LIMITED hcall() is issued, the + hypervisor searches the translation table designated by the specified + LIOBN, from the entry for SIOBA through the entry for EIOBA in IOBA + order, for the entries that translate to a page within a given range of + logical addresses. If an entry is found, the hcall() completes with the + H_PAGE_REGISTERED return code if the page found is the last entry in the + translation table, or the H_PARTIAL return code for all other pages, and + the IOBA with the corresponding logical address are returned in output + registers R4 and R5 respectively. + + + + The hypervisor searches the translation table in IOBA order, and + proceeds in that order until an entry that translates to a physical + address within the specified range of logical addresses is found, in + which case, the hcall() completes with H_PARTIAL or H_PAGE_REGISTERED + return code, or H_Success, if the end of the translation table, as + specified by the EIOBA parameter, is reached. + + + + Software Implementation Notes: + + + + When the hcall() completes with H_PARTIAL return code, the + stored IOBA is incremented by the page size of the resource corresponding + to the specified LIOBN, and then specified as the starting I/O bus + address on a subsequent call where the hypervisor would then proceed with + the search until the end of the translation table, specified by the EIOBA + parameter, is reached. The caller can accumulate a full list of the IOBAs + for the specified LIOBN that translate into the specified range of + logical addresses, which then forms part of the xlate translation entries + specified as an input to the H_MIGRATE_DMA function. + + + + When the hcall() completes with H_PAGE_REGISTERED return code, + this indicates that page is contained in the specified range of logical + addresses, and it is the last page of the translation table such that the + search for that LIOBN is complete. + + + + If a value other than -1 is specified in the starting I/O bus + address register, the program should check that the specified SIOBA value + is not the same as the returned IOBA. + + + +
+
+
+ +
+ RTAS Requirements + RTAS function as specified in this architecture is still required for + LoPAR LPAR partition. RTAS is instantiated via an OF client interface + call. RTAS operates without memory translation, therefore, the OS should + instantiate it within the RMA, however, the OF client interface does not + enforce this limitation. The RTAS calling sequences remain unchanged. + However, in LPAR configurations RTAS code is implemented differently than + in non-LPAR systems. LPAR RTAS has a part which is replicated in each + partition, and since RTAS has the capability to manipulate hardware system + resources, RTAS has a part which is implemented in the hypervisor. In the + hypervisor, there is a check of the RTAS parameters for validity before + execution. Therefore, the function of the partition replicated RTAS call is + to martial the arguments and make the required hidden hcall()s to the + hypervisor. In a non-LPAR system, RTAS calls are assumed to be made with + valid parameters. This cannot be assumed with LPAR. The LPAR RTAS operates + by all the rules of non-LPAR RTAS relative to it running real, with real + mode pointers to arguments and the same serialization requirement relative + to a single partition. However, the hypervisor may not assume that the + caller is following these serialization rules, failure on the part of the + OS to properly serialize is allowed to cause unpredictable results within + the scope of the calling partition but may not affect the proper operation + of other platform partitions. + The following is a list of RTAS functions that are not defined or + implemented when the LPAR option is active: + + + + restart-rtas + + + + R1--1. + + For the LPAR option: The platform must implement the + PowerPC External Interrupt option. + + + + + R1--2. + + For the LPAR option: The Firmware must initialize each + processor’s interrupt management area’s CPPR to the most + favored level and its MFRR to the least favored level before passing + control of the processor to the OS. + + + + + R1--3. + + For the LPAR option: The RTAS rules of serialization of + RTAS calls must only apply to a partition and not to the system. + + + + + R1--4. + + For the LPAR option: The hypervisor cannot trust the + RTAS calls to have no errors, therefore, the hypervisor must check a + partition’s RTAS call parameters for validity. + + + + + R1--5. + + For the LPAR option: RTAS must be instantiated within + the RMA of partition storage. + + + + + R1--6. + + For the LPAR option: + RTAS arguments must + be within the RMA of partition storage unless specifically specified in the + RTAS call definition. + + + + + R1--7. + + For the LPAR option: If one or more hcalls fail due to + hardware error (return status -1), the platform must make available, prior + to the completion of the next boot sequence, via an + event-scan/check-exception, an error log indicating + the hardware FRU responsible for such failures. Due to the asynchronous + nature of error analysis, there is not a direct correlation between the log + and a specific failing hcall(), indeed the error log may precede the + failing hcall(). + + + + + + + +
+
+ OF Requirements + The hypervisor is initialized and configured prior to the loading of + OF into the partition and boot of any client program (OS) in the partition + by OF. The NVRAM data base that describes the platform’s partitioning + is used to trigger the loading and initialization of the hypervisor. When + Logical Partitioning is enabled, a copy of OF code is loaded into each + partition where it builds the per partition device tree within the + partition’s RAM. The per partition device tree contains only entries + for platform components actually assigned to or used by the partition. The + invocation of the subset of the OF Client interface specified below appears + the same to the OS image regardless of the state of the LPAR option. + A model of the boot sequence is as follows: + + + + Support processor runs chip tests and configures the CPU + chips. + + + + The support processor loads the boot ROM image into System Memory + along with the configuration information. + + + + POST code + + + + Initialization Firmware + + + + Hardware configuration reporting structures + + + + OF + + + + Hypervisor RTAS + + + + + + boot ROM executes POST and Initialization Firmware. + + + + Processor initialization code synchronizes the time bases of all + platform processors to a small value (approaching zero). + + + + Initialization Firmware accesses the NVRAM Partition Database to + determine if the LPAR option is enabled. + + + + Initialization Firmware initializes the hypervisor. + + + + The hypervisor configures itself using the hardware configuration + reporting structures. + + + + The hypervisor configures the various partitions with resources as + required by the NVRAM Partition Database. + + + + The hypervisor loads a copy of OF into each partition passing to + OF a resource reporting structure known as the NACA/PACA. + + + + OF notices in the NACA/PACA that a specific partition table is + specified. + + + + OF Scans the configuration and walks the buses to build the + partition device tree. + + + + OF requests the specific partition table from the NVRAM Partition + Database. + + + + OF loads RTAS into the partition’s memory. + + + + OF pulls in the configuration variables from the + partition’s NVRAM area and uses them to determine the + partition’s boot device. + + + + OF then loads the client program and starts executing it with one + of the partition’s processors. + + + + The client program notices that it is running on a LPAR capable + machine but does not have the hypervisor bit on in the MSR so must use + hcall() routines for its PFT and TCE accesses. The presence of the + “ibm,hypertas-functions” property is a + duplicate indication of LPAR mode. + + + + + + R1--1. + + For the LPAR option: The OF code state must be retained + after all partitions are initialized pending future boot requests. + + + + + R1--2. + + For the LPAR option: The OF code must recognize that + logical partitioning is required as opposed to a non-LPARed system. + + + + + R1--3. + + For the LPAR option: The OF must generate the device + tree for the partition within the partition’s RAM. + + + + + R1--4. + + For the LPAR combined with Dynamic Reconfiguration + option: The + “interrupt-ranges” property for any + reported interrupt source controller must report all possible interrupt + source numbers. + + + + + R1--5. + + For the LPAR option: The OF device tree for a partition + must include in the root node, the + “ibm,partition-no” property. + + + + + R1--6. + + For the LPAR option: The OF device tree for an LPAR + capable model not running in a partition must include in the root node, the + “ibm,partition-no” property when the + default partition number for the first partition created is not 1. + + + + + R1--7. + + For the LPAR option: The + “ibm,partition-no” property value must be + an integer in the range of 1 to 220-1. + + + + + R1--8. + + For the LPAR option: The OF device tree for a partition + must include in the root node, the + “ibm,partition-name” property. + + + + + R1--9. + + For the LPAR option: When the platform does not provide + a partition manager and the one and only partition in the system owns all + the partition visible system resources, then the default value of the + “ibm,partition-name” property must be the + content of the SE keyword (as displayed in the same form as the root node + “system-id” property) with a hyphen added + between the plant of manufacture and sequence number. + + + + + R1--10. + + For the LPAR option: The nodes of the OF device tree + for a partition that represent platform resources that are not explicitly + allocated for the control of the platform’s OS image must be marked + “used-by-rtas”. This includes, but is not limited to, memory + controllers, and IO bridges that are a part of the platform’s + infrastructure common to more than one partition and commonly represented + in the OF device tree. But does not include read only resources such as + environmental sensors. + + + + + R1--11. + + For the LPAR option: The OF must, at the OS’s + request, load the required RTAS into the partition’s real addressable + memory region. + + + + + R1--12. + + For the LPAR option: The OF must use the + partition’s segment of the NVRAM to establish the partition’s + boot device and configuration variables. + + + + + R1--13. + + For the LPAR option: The OF must load the client + program and choose the partition’s processor on which to begin + execution. + Note: It is the responsibility of the client program to recognize + whether or not to use LPAR page management. + + + + + R1--14. + + For the LPAR option: The platform must initialize the + time base of the first processor to a small (approaching zero) value prior + to turning over control of the processor to a client program. + + + + + R1--15. + + + Reserved + + + + + R1--16. + + For the LPAR option: The OF Client Interface must + restrict access to only resources contained within the calling + partition’s version of the device tree. + + + + + R1--17. + + For the LPAR option: The OF Client Interface must + prevent the calls of one partition’s client program from interfering + with the operation of another partition’s client program. + + + + + R1--18. + + For the LPAR option: The OF Client Interface must + restrict its supported calls and methods to those specified in + . + + + + + R1--19. + + For the LPAR option: Any hidden hcall()s which firmware + may use to implement OF functions must check its parameters to insure + compliance with all of the architecturally mandated OF requirements. + + + + + R1--20. + + For the LPAR option: The OF Client Interface functions + “start-cpu” and “resume-cpu” must restrict their + operation to processors assigned to the calling Client’s + partition. + + + + + + OF Client Interface Functions Supported under the LPAR + Option + + + + + + + + + + test + + + cannon + + + child + + + finddevice + + + + + getprop + + + getproplen + + + instance-to-package + + + instance-to-path + + + + + nextprop + + + package-to-path + + + parent + + + peer + + + + + setprop + + + call-method + + + test-method + + + close + + + + + open + + + read + + + seek + + + write + + + + + claim + + + release + + + boot + + + enter + + + + + exit + + + start-cpu + + + milliseconds + + + size(/chosen/nvram) + + + + + get-time + + +   + + + instantiate-rtas + + +   + + + + +
+
+
+ NVRAM Requirements + The NVRAM is divided into multiple partitions each containing + different categories of data similar to files in a file system (these NVRAM + partitions are not to be confused with LPAR partitions). Each NVRAM + partition is structured with a self identifying header followed by its + partition unique data. Many of these NVRAM partitions contain data only + relevant to the platform firmware, while others contain data that either is + for OS image use from boot to boot or is used to communicate operational + parameters from the OS image to the platform. The platform firmware on LPAR + supporting platforms structures the NVRAM as per + . Each LPAR partition is assigned + a region of NVRAM space. This includes space for LPAR partition specific + configuration variables as well as the minimum 4 K space reserved for the + OS image. The hypervisor restricts access for the LPAR partition, through + logical address translation and range checking, to its assigned NVRAM + region. Other regions of NVRAM are reserved for firmware use including, for + instance, information about how the system should be partitioned. + + + LPAR NVRAM Map + + + + + + + + + + Real Address Range + + + + + Per Partition NVRAM access routine rtas + call Logical Address Range -- outside of legal range return + 0x00 and discard write data. + + + + + Contents + + + + + + + + 0x00 to F-1 + + + NA + + + Firmware only partitions (Signatures 0x00 to 0x6F) + + + + + F to (F-1+P) + + + 0x00 to P + + + Per LPAR partition copies of supported NVRAM partitions + with signatures 0x70 to 0x7F + + + + + (F+P) to (F-1+2P) + + + 0x00 to P + + + Per LPAR partition copies of supported NVRAM partitions + with signatures 0x70 to 0x7F + + + + + ... + + + + + (F+(P*(n-1))) + to + ((F-1)+ nP) + + + 0x00 to P + + + Per LPAR partition copies of supported NVRAM partitions + with signatures 0x70 to 0x7F + + + + +
+   + + NVRAM partitions on LPAR platforms + + + + + + + + + + Visible to: + + + + + Partition Signatures + + + + + Partition Name + + + + + Comments + + + + + + + + Only to the Platform firmware + + + 0x00 - 0x6F + + +   + + +   + + + + + Only to Platform firmware and the OS image running in the + owning LPAR Partition. + The read and write NVRAM RTAS routines + + + 0x70 + + + Common + + + This partition is duplicated per partition. + + + + + 0x7F + + + 0x7777777777777777-77777777 + + + This partition is duplicated per partition and is at least + 4 KB long when the OS is first installed. + + + + +
+ + + + R1--1. + + For the LPAR option: Platform OF must locate + configuration variables that the OS must manipulate to select options as to + how the specific OS image interfaces or relates to the platform in the + partition’s “system” partition signature (0x70) named + “common”, specifically none may be located in the + “OF” signature (0x50). + + + + + R1--2. + + For the LPAR option: The NVRAM region assigned to an + LPAR partition must contain, after any platform required NVRAM partitions + have been allocated, a free space partition a minimum of 4 KB long prior to + the installation of the partition’s OS image. + + + +
+ +
+ Administrative Application Communication Requirements + The platform needs to communicate with the an administrative + application (outside of the scope of LoPAR) to manage the platform + resources. The administrative application may run in an external computer + such as a Hardware Management Console, or it may be integrated into a + service partition. Many system facilities are not dedicated to an LPAR + partition but are managed through the HMC and the administrative + application. + + + + R1--1. + + For the LPAR option: The platform must provide a + communications means to the administrative application. + + + + + R1--2. + + For the LPAR option: The platform must respond to + messages received from the administrative application. + + + +
+ +
+ RTAS Access to Hypervisor Virtualized Resources + All allolcatable platform resources are always assigned to a + partition. There always exists a dummy partition that is never active. + Resources assigned to partitions that are inactive may be reassigned to + other partitions by mechanisms implemented in the Hardware Management + Console. + + + + R1--1. + + For the LPAR option: The nvram-fetch RTAS call must + restricted access to only the LPAR partition’s assigned + “OS”, “System” and “Error Log” nvram + partitions. + + + + + R1--2. + + For the LPAR option: The nvram-store RTAS call must + restricted accss to only the LPAR partition’s assigned + “OS”, “System” and “Error Log” nvram + partitions. + + + + + R1--3. + + For the LPAR option: The get-time-of-day RTAS call must + return the LPAR partition’s specific time of day clock value. + + + + + R1--4. + + For the LPAR option: The set-time-of-day RTAS call must + set the LPAR partition’s specific time of day clock value. + Firmware Implementation Note: The model implementation keeps time of + day on a partition basis. What is really changed is the offset from the + hardware TOD clock which is not normally written (Only written if for some + reason it is approaching its maximum value, such as after a battery + failure). + + + + + R1--5. + + For the LPAR option: The event-scan RTAS call must + report global events to each LPAR partition and LPAR partition local events + only to the affected LPAR partition. + + + + + R1--6. + + For the LPAR option: The check-exception RTAS call must + report global events to each LPAR partition and LPAR partition local events + only to the affected LPAR partition. + + + + + R1--7. + + For the LPAR option: The rtas-last-error RTAS call must + report only RTAS errors affecting the calling LPAR partition. + + + + + R1--8. + + For the LPAR option: The + ibm,read-pci-config RTAS calls must restrict access to + only IOAs assigned to the calling LPAR partition, and if the configuration + address is not available to the caller, must return a status of Success + with all ones as the output value. + + + + + R1--9. + + For the LPAR option: The ibm,write-pci-config RTAS + calls must restrict access to only IOAs assigned to the calling LPAR + partition, and if the configuration address is not available to the caller, + must be ignored and must return a status of Success. + + + + + R1--10. + + For the LPAR option: The ibm,write-pci-config RTAS + calls must prevent changing of the firmware assigned interrupt message + number on IOAs configured to use message signaled interrupts. + + + + + R1--11. + + For the LPAR option: The platform must virtualize the + display-character RTAS call such that the operator can distinguish and + selectively read messages from each partition without interference with + messages from other partitions. + + + + + R1--12. + + For the LPAR option: The set-indicator RTAS call must + restrict access to only indicators assigned to the calling LPAR + partition. + + + + + R1--13. + + For the LPAR option: The effects of the + system-reboot RTAS call must be restricted to only the + calling LPAR partition. + Firmware Implementation Note: One standard OS response to a machine + check is to reboot. Thus expecting the firmware to reset any error + conditions such as in the I/O sub-system. When the I/O sub-system, or parts + thereof, are shared among multiple partitions, the platform cannot allow + the boot of one partition to prevent another partition from detecting that + it was also affected by an I/O error. + + + + + R1--14. + + For the LPAR option: The platform must deliver machine + check and other event notifications to all affected partitions before + initiating recovery operations such as rebooting and resetting hardware + fault isolation circuits. + + + + + R1--15. + + For the LPAR option: The + start-cpu RTAS call must be restricted to only the + processors assigned to the calling LPAR partition. + + + + + R1--16. + + For the LPAR option: The + query-cpu-stopped-state RTAS call must be restricted to + only the processors assigned to the calling LPAR partition. + + + + + R1--17. + + For the LPAR option: The + power-off and + ibm,power-off-ups RTAS calls must deactivate the + calling partition and not power off the platform if other partitions remain + active. + + + + + R1--18. + + For the LPAR option: The + set-time-for-power-on RTAS call must activate the + platform when the partition requesting the earliest activation time is to + be activated. + + + + + R1--19. + + For the LPAR option: The + ibm,os-term RTAS call must adjust support processor + surveillance to account for the termination of the LPAR partition’s + OS. + + + + + R1--20. + + For the LPAR option: + The ibm,set-xive RTAS call must restrict access to only + interrupt sources assigned to the calling LPAR partition by silently + failing if the interrupt source is not owned by the calling partition + (return success without modifying the state of the unowed interrupt + logic). + + + + + R1--21. + + For the LPAR option: The + ibm,set-xive RTAS call must restrict the written queue + values to only interrupt processors assigned to the calling LPAR + partition. + + + + + R1--22. + + For the LPAR option: + The ibm,get-xive RTAS call must restrict access to only + interrupt sources assigned to the calling LPAR partition by silently + failing if the interrupt source is not owned by the calling partition + (return success with the least favored interrupt level, the interrupt + server number is undefined -- possibly all ones). + + + + + R1--23. + + For the LPAR option: + The ibm,int-on RTAS call must restrict access to only + interrupt sources assigned to the calling LPAR partition by silently + failing if the interrupt source is not owned by the calling partition + (return success without modifying the state of the unowed interrupt + logic). + + + + + R1--24. + + For the LPAR option: + The ibm,int-off RTAS call must restrict access to only + interrupt sources assigned to the calling LPAR partition by silently + failing if the interrupt source is not owned by the calling partition + (return success without modifying the state of the unowed interrupt + logic). + + + + + R1--25. + + For the LPAR option: The + ibm,configure-connector RTAS call must restrict access + to only Dynamic Reconfiguration Connectors assigned to the calling LPAR + partition. + + + + + R1--26. + + For the LPAR option: The platform must either define or + virtualize the power domains used by the set-power-level RTAS call such + that power level settings do not affect other partitions. + + + + + R1--27. + + For the LPAR option: The set-power-level and + get-power-level RTAS calls must restrict access to only power domains + assigned to the calling partition. + + + + + R1--28. + + For the LPAR option: The platform must restrict the + availability of the ibm,exti2c RTAS call to at most one partition (like any + IOA slot). + + + + + R1--29. + + For the LPAR option: The ibm,set-eeh-option RTAS call + must restrict access to only IOAs assigned to the calling partition. + + + + + R1--30. + + For the LPAR option: The ibm,set-slot-reset RTAS call + must restrict access to only IOAs assigned to the calling partition. + + + + + R1--31. + + For the LPAR option: The ibm,read-slot-reset-state2 + RTAS call must restrict access to only IOAs assigned to the calling + partition. + + + + + R1--32. + + For the LPAR option: The + ibm,configure-bridge RTAS call must restrict access to + only configuration addresses assigned to the calling partition. + + + + + R1--33. + + For the LPAR option: The ibm,set-eeh-option RTAS call + must restrict access to only IOAs assigned to the calling partition. + + + + + R1--34. + + For the LPAR option: The platform must restrict the + ibm,open-errinjct, ibm,close-errinjct, and ibm,errinjct RTAS calls as well + as the errinjct properties be available on at most one partition as defined + by a platform wide firmware configuration variable. + + + + + R1--35. + + For the LPAR option: Any hidden hcall()s which firmware + may use to implement RTAS functions must check its parameters to insure + compliance with all of the architecturally mandated RTAS + requirements. + + + + +
+ +
+ Shared Processor LPAR Option + The Shared Processor LPAR (SPLPAR) option allows the hypervisor to + generate multiple virtual processors by time slicing a single physical + processor. These multiple virtual processors may be assigned to one or more + OS images. There are two primary customer advantages to SPLPAR over the + standard LPAR. Most obviously, the assigned processing capacity of the + partition can scale downwards to allow for more OS images to be supported + on a single platform. The second customer advantage is that a SPLPAR + platform can achieve higher processor utilization by providing partitions, + that can use extra processing capacity, with the spare capacity ceded from + other partitions. This allows the customer to take advantage of the + variable nature of the instantaneous load on any one OS image to achieve an + increase in the average utilization of the platform’s capacity. While + the peak capacity (directly related to the platform cost) stays constant, + the customer may see a significant improvement in the average capacity + among all the platform’s workloads. However, since the peak capacity + cannot be physically exceeded, the customer may experience a wider variance + in performance when exercising the SPLPAR option. + In principal, the OS images running on the virtual processors of an + SPLPAR platform need not be aware that they are sharing their physical + processors, however, in practice, they experience significantly better + performance if they make a few optimizations. Specifically, if the OS + images cedes their virtual processor to the platform when they are idle, + and confers their processor to the holder of a spin lock for which the + virtual processor must wait. Another significant change due to SPLPAR is + that there may not be a fixed relationship between a virtual processor and + the physical processor that actualizes it. In those cases, such physical + information as location codes are undefined, affinity and associativity + values are indistinguishable, relationships to secondary caches are + meaningless, and any attempt by an OS to characterize the quality of its + processor (such as running diagnostics or performance comparisons to other + virtual processors) provide unreliable results. OF entities, that represent + physical characteristics of a virtual processor that do not remain fixed, + take on altered definitions/ requirements in an SPLPAR environment. + To provide input to the capacity planning and quality of service + tools, the hypervisor reports to an OS certain statistics, these include + the minimum processor capacity that the OS can expect (the OS may cede any + unused capacity back to the platform), the maximum processor capacity that + the platform grants to the OS, the portion of spare capacity (up to the + maximum) that the platform grants to the OS, and the maximum latency to a + dispatch via an hcall(). + The OS image optionally registers a data area (VPA) for each virtual + processor using the H_REGISTER_VPA hcall(). The hypervisor maintains a + variable, within the data area, that is incremented each time the virtual + processor is dispatched/preempted, such that the dispatch variable is + always even when the virtual processor is dispatched and always odd when it + is not dispatched. The achitectural intent for the usage of the dispatch + count variable is describe below in the paragraph devoted to conferring the + processor. Additionally this hcall() may register a trace buffer which the + OS may activate to gain detailed information about virtual processor + preemption and dispatching. + Both the VPA and the trace log buffer contain statistics on how long + the virtual processor has waited (not been dispatched on a physical + processor). Architecturally, the virtual processor wait time is divided + into three intervals: + + + + The time that the virtual processor waited to become logically + ready to run again, for example: + + + + The time needed to resolve a fault + + + + The time needed to process a hypervisor preemption + + + + The time until a wake up event after voluntarily relinquishing the + physical processor + + + + + + The time spent waiting after interval 1 until virtual processor + capacity was available. Shared processor partitions are granted a quantum + of virtual processor capacity (execution time) each dispatch wheel + rotation; thus if the partition has used its capacity, the ready to run + virtual processor has to wait until the next quantum is granted. + + + + The time spent waiting after interval 2 until the virtual + processor was dispatched on a physical processor. This is arises from the + fact that multiple ready to run virtual processors with virtual processor + capacity may be competing for a single physical processor. + + + + Two other performance statistics are available via hcall()s these are + the Processor Utilization Register, and Pool Idle Count returned by the + H_PURR and H_PIC hcall()s respectively. These two statistics are counts in + the same units as counted by the processor time base. Like the time base, + the PUR and PIC are 64 bit values that are set to a numerically low value + during system initialization. The difference between their values at the + end and beginning of monitored operations provides data on virtual + processor performance. The value of the PUR is a count of processor cycles + used by the calling virtual processor. The PUR count is intended to provide + an indication to the partition software of the computation load supported + by the virtual processor. SPLPAR virtual processors are created by + dispatching the virtual processor’s architectural state on one of the + physical processors from a pool of physical processors. The value of the + PIC is the summation of the physical processor pool idle cycles, that is + the number of time base counts when the pool could not dispatch a virtual + processor. The PIC count is intended to provide an indication to platform + management software of the pool capacity to perform more work. + A well behaved OS image normally cedes its virtual processor to the + platform using the H_CEDE hcall() after it determines that it currently has + run out of useful work. The H_CEDE hcall() gives up the virtual processor + until either an external interrupt (including decrementer, and Inter + Processor Interrupt) or another one of the partition’s processors + executes an H_PROD hcall() see below. Note the decrementer appears to + continue to run during the time that the virtual processor is ceded to the + platform. The H_CEDE hcall() always returns to the next instruction, + however, prior to executing the next instruction, any pending interrupt is + taken. To simulate atomic testing for work, the H_CEDE call may be called + with interrupts disabled, however, the H_CEDE call activates the virtual + processor’s MSREE bit to avoid going into a wait state with interrupts + masked. + A multi-processor OS uses two methods to initiate work on one + processor from another, in both cases the requesting processor places a + unit of work structure on a queue, and then either signals the serving + processor via an Inter-Processor interrupt to service the work queue, or + waits until the serving processor polls the work queue. The former method + translates directly to the SPLPAR environment, the second method may + experience significant performance degradation if the serving processor has + ceded. To provide a solution to this performance problem, the SPLPAR + provides the H_PROD hcall(). The H_PROD hcall() takes as a parameter the + virtual processor number of the serving processor. Waking a potentially + ceded or ceding processor is subject to many race conditions. The semantic + of the H_PROD hcall() attempts to minimize these race conditions. First the + H_CEDE and H_PROD hcall()s serialize on each other per target virtual + processor. Secondly by having the H_PROD firmware set a per virtual + processor memory bit before attempting to determine if the target virtual + processor is preempted. If the processor is not preempted the H_PROD + hcall() immediately returns, else the processor is dispatched and the + memory bit is reset. If the processor was dispatched, and subsequently the + virtual processor does a H_CEDE operation, the H_CEDE hcall() checks the + virtual processor’s memory bit and if set, resets the bit and returns + immediately (not ceding the physical processor to another virtual + processor). An OS might choose to always do an H_PROD after an enqueue to a + polled queue or it might qualify making the H_PROD hcall() with a status + bit set by the by the target processor when it decides to cede its virtual + processor. + Locking in a SPLPAR environment presents a problem for + multi-programming OSs, in that the virtual processor that is holding a lock + may have been preempted. In that case, spinning, waiting for the lock, + simply wastes time since the lock holder is in no position to release the + lock -- it needs processor cycles and cannot get them for some period of + time and the spinner is using up processor cycles waiting for the lock. The + condition is known as a live lock, however, it eventually resolves itself. + The SPLPAR optimization to alleviate this problem is to have the waiting + virtual processor “confer” its processor cycles to the lock + holder’s virtual processor until the lock holder has had a chance to + run another dispatch time slice. + As with the cede/prod pair of functions above, the confer function is + subject to timing window races between the waiting process determining that + the lock holder has been preempted and execution of the H_CONFER hcall() + during which time the originally holding virtual processor may have been + dispatched, released the lock and ceded the processor. To manage this + situation, the H_CONFER takes two parameters, one that specifies the + virtual processor(s) that are to receive the cycles and the second + parameter (valid only when a single processor is specified) which + represents the dispatch count of the holding virtual processor atomically + captured when the waiting processor decided to confer its cycles to the + waiting processor. + The semantic of H_CONFER checks the processor parameter for validity, + then if it is the “all processors” code proceeds to the + description below. If the processor parameter refers to a valid virtual + processor owned by the calling virtual processor’s partition, that is + not dispatched, that has not conferred its cycles to all other processors, + and who’s current dispatch count matches that of the second + parameter, the time remaining from the calling processors time slice is + conferred to the specified virtual processor. + If the first parameter of H_CONFER specifies the “all + processors” code, then it marks the calling virtual processor to + confer all its cycles until all of the partition’s virtual + processors, that have not ceded or conferred their cycles, have had a + chance to run a dispatch time slice. The “all processors” + version may be viewed as having the hypervisor record the dispatch counts + for all the other platform processors in the calling virtual + processor’s hypervisor owned “confer structure”, then + prior to any subsequent dispatch of the calling processor, if the confer + structure is not clear, the hypervisor does the equivalent of removing one + entry from the confer structure and calling H_CONFER for the specific + virtual processor. If the specific virtual processor confer is rejected + (because the virtual processor is running, ceded, conferred, or the + dispatch count does not match) then the next entry is tried until the + confer structure is clear before the originally calling virtual processor + is re-dispatched. + Virtual processors may migrate among the physical processor pool from + one dispatch cycle to the next. OF device tree properties that relate the + characteristics of the specific physical processor such as location codes, + and other vital product data cannot be consistent and are not reported in + the nodes of type + cpu if the partition is running in SPLPAR mode. Most + processor characteristics properties such as time base increment rate, are + consistent for all processors in the system physical and virtual so are + still reported via their standard properties. Additionally nodes of type + + L2 are not present in the tree since they are shared + with other virtual processors making optimizations based upon their + characteristics impossible. The Processor Identification Register (PIR) + should not be accessed by the OS since from cycle to cycle the OS may get + different readings, instead the virtual processor number (the number from + the + “ibm,ppc-interrupt-server#s” property, + contained in the nodes of type + cpu, associated with this virtual processor) is used + as the processor number to be passed as parameters to RTAS and hcall() + routines for managing interrupts etc. + + Software Note: When the client program (OS) first gets + control during the boot sequence, the virtual processor number of the + single processor that is operational is identified by the + /chosen node of the device tree. The + cpu nodes list the other virtual processors that the + first processor may start. These are started one at a time, giving the + virtual processor number as an input parameter to the call. As each + processor starts, it starts executing a program that picks up its virtual + processor number from a memory structure initialized by the processor that + called the start-cpu function. The newly started processor then records the + location of its per processor memory structure (where it saves its virtual + processor number) in one of the SPRG registers. + +
+ Virtual Processor Areas + The per processor areas are registered with the H_REGISTER_VPA + hcall() that takes three parameters. The first parameter is a flags field + that specifies the specific sub function to be performed, the second is + the virtual processor number of one of the processors owned by the + calling virtual processor’s partition for whom the area is being + registered. The third parameter is the logical address, within the + calling virtual processor’s partition, of the contiguous logically + addressed storage area to be registered. Registered areas are aligned on + a cache line (l1) size boundary and may not span an LMB boundary and for + the CMO option may not span an entitlement granule boundary. The length + of the area is provided to the hcall() in starting in byte offset 4 of + the area being registered. The H_REGISTER _VPA hcall() registers various + types of areas, and after verifying the parameters, initializes the + structure’s variables. + Per Virtual Processor Area: This area contains shared processor + operating parameters as defined in + . A shared processor LPAR aware + OS registers this area early in its initialization. The other types of + virtual processor areas can only be registered after the Per Virtual + Processor Area has been successfully registered. The minimum length of + the Per Virtual Processor Area is 640 bytes and the structure may not + span a 4096 byte boundary. + Dispatch Trace Log Buffer: This area is optionally registered by + OS’s that desire to collect performance measurement data relative + to its shared processor dispatching. The minimum size of this area is 48 + bytes while the maximum is 4 GB. See + for more details + SLB Shadow Buffer: This area is optionally registered by OS’s + that support the SLB-shadow function set. The structure may not span a + 4096 byte boundary. This function set allows the hypervisor to + significantly reduce the overhead associated with virtual processor + dispatch in a shared processor LPAR environment, and to provide enhanced + recovery from SLB hardware errors. See + for more details. + + Software Note: Registering, deregistering or changing + the value of a variable in one of the Virtual Processor Areas for a + different virtual processor (i.e. changing a value in the VPA of + processor A from processor B) may be problematic. In no cases is + partition integrity be compromised, but results may be imprecise if such + a change is made during the virtual processor preempt/dispatch window. If + the owning processor is started, registration or deregistration should + only be done by the owning processor, if the processor is stopped, + registration or deregistration can safely be done by other processors. + Also, for example, changing the number of persistent SLB Shadow Buffer + entries cause uncertainty in the number of currently valid SLB entries in + that virtual processor. In some cases, such as turning on and off + dispatch tracing, such uncertainty may be acceptable. + +
+ Per Virtual Processor Area +   + + Per Virtual Processor Area + + + + + + + + + Byte Offset + + + + + Length in Bytes + + + + + Variable Description + + + + + + + + 0x00 + + + 4 + + + Descriptor: This field is supplied for OS identification + use, it may be set to any value that may be useful (such as a + pattern that may be identified in a dump) or it may be left + uninitalized. + Historic values include: 0xD397D781 + + + + + 0x04 + + + 2 (unsigned) + + + Size: The size of the registered structure (640) + + + + + 0x6 - 0x17 + + + 18 + + + Reserved for Firmware Use + + + + + 0x18 - 0x1B + + + 4 + + + Physical Processor FRU ID + + + + + 0x1C - 0x1F + + + 4 + + + Physical Processor on FRU ID + + + + + 0x20 - 0x57 + + + 56 + + + Reserved for Firmware Use + + + + + 0x58 - 0x5F + + + 8 + + + Virtual processor home node associativity changes + counters (changes in the 8 most important associativity + levels) + + + + + 0x60 - 0xAF + + + 80 + + + Reserved for Firmware Use + + + + + 0xB0 + + + 1 + + + Cede Latency Specifier + + + + + 0xB1 + + + 7 + + + Reserved For LoPAR Expansion + + + + + 0xB8 + + + 1 + + + Dispatch Trace Log Enable Mask: (Note this entry is valid + only if a Dispatch Trace Log Buffer has been registered). A + Trace Log Entry is created when the virtual processor is + dispatched following its preemption for an enabled + cause. + =0 no dispatch trace logging + Bit 7 =1 Trace voluntary (OS initiated) virtual processor + waits + Bit 6 =1 Trace time slice preempts + Bit 5 = 1 Trace virtual partition memory page + faults. + All other values are reserved + + + + + 0xB9 + + + 1 + + + Bits 0-6 Reserved + Bit 7 = 0 -- Dedicated processor cycle donation + disabled + Bit 7 = 1 -- Dedicated processor cycle donation + enabled. + + + + + 0xBA + + + 1 + + + Maintain FPRs: + =0 architected state of floating point registers may be + discarded at any time, + =1 architected state of floating point registers must be + maintained, + all other values are reserved + Note: When set in conjunction with offset 0xFF the 128 + bit VSX space is saved on processors supporting the VSX option + ( 2.06 and + beyond). + + + + + 0xBB + + + 1 + + + Maintain PMCs: + =0 architected state of performance monitor counters may + be discarded at any time, + =1 architected state of performance monitor counters must + be maintained, + all other values are reserved + + + + + 0xBC-0xD7 + + + 28 + + + Reserved For Firmware Use + + + + + 0xD8-0xDF + + + 8 + + + Any non-zero value is taken by the firmware to be the OS, + estimate, in PURR units, of the cumulative number of cycles + that it has consumed on this virtual processor, while idle, + since it was initialized. + + + + + 0xE0 - 0xFB + + + 28 + + + Reserved for Firmware Use + + + + + 0xFC + + + 2 (unsigned) + + + Maintain #SLBs: + This number of Segment Lookaside Buffer Registers (up to + the platform implementation maximum) are maintained, all others + (up to the platform implementing maximum) may be discarded at + any time. + The value 0xFFFF maintains all SLBs + + + + + 0xFE + + + 1 + + + Idle: + =0 The OS is busy on this processor + =1 The OS is idle on this processor + All other values are reserved + + + + + 0xFF + + + 1 + + + Maintain VMX state: + =0 architected state of the processor’s VMX + facility, may be discarded at any time + =1 architected state of the processor’s VMX + facility, must be maintained + All other values are reserved + Note: When set in conjunction with offset 0xBA the 128 + bit VSX space is saved on processors + supporting the VSX option ( + 2.06 and beyond). + + + + + 0x100 + + + 4 (unsigned) + + + Virtual Processor Dispatch Counter: + (Even when virtual processor is dispatched odd when it is + preempted/ceded/conferred) + + + + + 0x104 + + + 4 (unsigned) + + + Virtual Processor Dispatch Dispersion Accumulator: + Incremented on each virtual processor dispatch if the + physical processor differs from that of the last + dispatch. + + + + + 0x108 + + + 8 (unsigned) + + + Virtual Processor Virtual Partition Memory Fault Counter: + Incremented on each Virtual Partition Memory page fault. + + + + + 0x110 + + + 8 (unsigned) + + + Virtual Processor Virtual Partition Memory Fault Time + Accumulator: Time, in Time Base units, that the virtual + processor has been blocked waiting for the resolution of + virtual Partition Memory page faults. + + + + + 0x118 - 0x11F + + + 8 + + + Unsigned accumulation of PURR cycles expropriated by the + hypervisor when VPA byte offset 0xFE = 1 + + + + + 0x120 - 0x127 + + + 8 + + + Unsigned accumulation of SPURR cycles expropriated by the + hypervisor when VPA byte offset 0xFE = 1 + + + + + 0x128 - 0x12F + + + 8 + + + Unsigned accumulation of PURR cycles expropriated by the + hypervisor when VPA byte offset 0xFE = 0 + + + + + 0x130 - 0x137 + + + 8 + + + Unsigned accumulation of SPURR cycles expropriated by the + hypervisor when VPA byte offset 0xFE = 0 + + + + + 0x138 - 0x13F + + + 8 + + + Unsigned accumulation of PURR cycles donated to the + processor pool when VPA byte offset 0xFE = 1 + + + + + 0x140 - 0x147 + + + 8 + + + Unsigned accumulation of SPURR cycles donated to the + processor pool when VPA byte offset 0xFE = 1 + + + + + 0x148 - 0x14F + + + 8 + + + Unsigned accumulation of PURR cycles donated to the + processor pool when VPA byte offset 0xFE = 0 + + + + + 0x150 - 0x157 + + + 8 + + + Unsigned accumulation of SPURR cycles donated to the + processor pool when VPA byte offset 0xFE = 0 + + + + + 0x158-0x15F + + + 8 + + + Accumulated virtual processor wait interval 3 timebase + cycles. (waiting for physical processor availability) + + + + + 0x160 - 0x167 + + + 8 + + + Accumulated virtual processor wait interval 2 timebase + cycles. (waiting for virtual processor capacity) + + + + + 0x168 - 0x16F + + + 8 + + + Accumulated virtual processor wait interval 1 timebase + cycles. (waiting for virtual processor ready to run) + + + + + 0x170 - 0x177 + + + 8 + + + Reserved for Firmware Use + + + + + 0x178 - 0x17F + + + 8 + + + Reserved for Firmware Use + + + + + 0x180 - 0x183 + + + 4 + + + For the CMO option: The OS may report in this field as a + hint to the hypervisor the accumulated number, since the + virtual processor was started, of ‘page in’ + operations initiated for pages that were previously swapped + out.” + + + + + 0x184 - 0x187 + + + 4 + + + Reserved for Firmware Use + + + + + 0x188 - 0x18F + + + 8 + + + Reserved for Firmware Use + + + + + 0x190 - 0x197 + + + 8 + + + .Reserved for Firmware Use + + + + + 0x198 - 0x217 + + + 128 + + + Reserved for Firmware Use + + + + + 0x218 - 0x21F + + + 8 + + + Dispatch Trace Log buffer index counter. + + + + + 0x220 - 0x27F + + + 96 + + + Reserved for Firmware Use + + + + +
+ + + + R1--1. + + For the SPLPAR option: If the OS registers a Per + Virtual Processor Area, it must correspond to the format specified in + . + + + + +
+ +
+ Dispatch Trace Log Buffer + The optional virtual processor dispatch trace log buffer is a + circularly managed buffer containing individual 48 byte entries, with the + first entry starting at byte offset 0. Therefore, the 4 byte registration + size field is overwritten by the first Trace Log Buffer entry. (Note the + hypervisor rounds down the dispatch trace log buffer length to a multiple + of 48 bytes and wraps when reaching that boundary.) A vpa location + contains the index counter that + the hypervisor increments each time that it makes a dispatch trace log + entry such that it always indicates the next entry to be filled. The low + order bits (modulo the buffer length divided by 48) of the counter + provide the index of the next entry to be filled, therefore, the buffer + wraps each (buffer length divided by 48 entries), while the high order + counter bits indicate how many buffer wraps have occurred. Prior to + enabling dispatch trace logging, the OS should initialize the vpa index + counter to the value of 0. The format of dispatch trace log buffer + entries is given in + . + The architectural intent is that OS trace tools keep a shadow index + counter into the log buffer of the next entry to be filled by the + hypervisor. Prior to making an entry of their own, such tools compare + their index counters with that of the hypervisor from the vpa, if they + are equal, no preempts/dispatches have occurred since the last OS trace + hook. If the two index counters are not equal, then the OS trace tool + processes the intermediate time stamps into the OS’s trace log, + updating its dispatch trace log buffer index until all have been + processed, then the new trace entry is added to the OS’s trace log. + Note, because of races, the processor may be preempted just prior to the + OS trace tool adding the new trace log entry, to handle this case, the OS + trace tool can examine the dispatch trace log buffer index immediately + after the adding of the new trace log entry and if needed adjust its own + trace log. In the extremely unlikely event that the two counters are off + by trace buffer length divided by forty eight or more counts, the OS + trace tool can detect that a dispatch trace log buffer overflow has + occurred, and trace data has been lost. + + + Dispatch Trace Log Buffer Entry + + + + + + + + + Byte Offset + + + + + Length in Bytes + + + + + Variable Description + + + + + + + + 0x0 + + + 1 + + + Reason Code for the virtual processor dispatch: + 0: The virtual processor was dispatched at the external + interrupt vector location to handle an IOA interrupt, Virtual + interrupt, or interprocessor interrupt. + 1: The virtual processor was dispatched to handle + firmware internal events. + 2: The virtual processor was dispatched at the next + sequential instruction due to an H_PROD call by another + partition processor. + 3: The virtual processor was dispatched at the DECR + interrupt vector due to a decrementer interrupt. + 4: The processor was dispatched at location specified in + load module (boot) or at the system reset interrupt vector. + (virtual yellow button). + 5: The virtual processor was dispatched to handle + firmware internal events + 6: The virtual processor was dispatched at the next + sequential instruction to use cycles conferred from another + partition processor + 7: The virtual processor was dispatched at the next + sequential instruction for its entitled time slice. + 8: The virtual processor was dispatched at the faulting + instruction following a virtual partition memory page + fault. + + + + + 0x1 + + + 1 + + + Reason Code for virtual processor preemption: + 0: Not used (for compatibility with earlier versions of + the facility) + 1: Firmware internal event + 2: Virtual processor called H_CEDE + 3: Virtual processor called H_CONFER + 4: Virtual processor reached the end of its timeslice + (HDEC) + 5: Partition Migration/Hibernation page fault + 6: Virtual memory page fault + + + + + 0x2 - 0x3 + + + 2 + + + Processor index of the physical processor actualizing the + thread on this dispatch. + + + + + 0x4 - 0x7 + + + 4 + + + Time Base Delta between enqueued to dispatcher and actual + dispatch on a physical processor + + + + + 0x8 - 0xB + + + 4 + + + Time Base Delta between ready to run and enqueue to + dispatcher + + + + + 0xC - 0xF + + + 4 + + + Time Base Delta between waiting and ready to run + (preempt/fault resolution time) + + + + + 0x10 - 0x17 + + + 8 + + + Time Base Value at the time of dispatch/wait + + + + + 0x18 - 0x1F + + + 8 + + + For virtual processor preemption reason codes 5 & 6: + Logical real address of faulting page; else reserved. + + + + + 0x20 - 0x27 + + + 8 + + + SRR0: At the time of preempt/wait + + + + + 0x28 - 0x2F + + + 8 + + + SRR1: At the time of preempt/wait + + + + +
+ + + + R1--1. + + For the SPLPAR option: If the OS registers a Dispatch + Trace Log Buffer, it must correspond to the format specified in + . + + + + +
+ +
+ SLB Shadow Buffer + On platforms supporting the SLB-Buffer function set, the OS may + optionally register an SLB shadow buffer area. When the OS takes this + option, it allows the hypervisor to optimize the saving of SLB entries, + thus reducing overhead and providing more processor capacity for the OS, + and also allows the platform to recover from certain SLB hardware faults. + When the OS registers an SLB shadow buffer for its virtual processor, the + processor’s SLB is architecturally divided into three categories + relative to their durability as depicted in + . +
+ Processor SLB relationship to the OS registered VPA and SLB Shadow Buffer + + + + + + + + +
+ OS may dynamically change M and N (for (N+1)*16 <= Length of SLB Shadow Buffer) + Each category of SLB entries consists of 0-n contiguous + SLBs. + Persistent Entries: The first N (starting at SLB index 0, N + specified by the numeric content of the first 4 bytes of the registered + SLB Shadow Buffer) SLBs are maintained persistent across all virtual + processor dispatches unless an unrecovered SLB error is noted. OS + maintains a shadow copy of those SLB entries in the registered SLB shadow + buffer. The OS sizes its SLB Shadow buffer for the largest number of + persistent entries it can ever maintain. If the OS registers an SLB + Shadow buffer, the hypervisor does not save the contents of the + Persistent entries on virtual processor preempt, cede, or confer. The OS + should minimally record as persistent the entries it needs to handle its + SLB fault interrupts to fill in required Volatile (and potentially) + Transient entries. + Volatile Entries: The next M-N SLBs (beginning at the next higher + SLB index after the last Persistent entry up through the entry specified + by the “maintain#SLBs” parameter of the VPA) may disappear. + The OS needs to be prepared to recover these entries via SLB fault + interrupts. For performance optimization, the hypervisor normally + maintains the state of these entries across H_DECR interrupts and most + hcalls(), they may be lost on H_CEDE calls. + Transient Entries: The platform makes no attempt to maintain the + state of these entries and they may be lost at any time. + The OS may dynamically change the number of Persistent entries by + atomically changing the value of the 4 byte parameter at SLB Shadow + Buffer offset 0. + The hypervisor does not explicitly check the value of this + parameter, however, the hypervisor limits the number of SLBs that it + attempts to load from the shadow buffer to the lesser of the maximum + number of SLB entries implemented by the platform, or the maximum number + of entries containable in the SLB Shadow buffer length when it was + registered. + + + + R1--1. + + For the SPLPAR option: If the OS + registers an SLB Shadow Buffer, it must correspond to the format + specified in + . + + + + +
+
+ +
+ Shared Processor LPAR OF Extensions + + +
+ Shared Processor LPAR Function Sets in + <emphasis role="bold"><literal>“ibm,hypertas-functions”</literal></emphasis> + + + + hcall-splpar + + + + hcall-pic + + + + SLB-Buffer + + +
+ +
+ Device Tree Variances + If an SPLPAR implementation does not maintain a fixed relationship + between the virtual processor that it reports to the OS image in the OF + device tree properties and the physical processor that it uses to + actualize the virtual processor, then OF entities that imply a fixed + physical relationship are not reported. These may include those listed in + + . + + + OF Variances due to SPLPAR + + + + + + + + Entity + + + + + Variance to standard + definition + + + + + + + + + “ibm,loc-code” property + + + If the physical relationship between virtual processors + and physical processors is not constant this property is + omitted from the virtual processor’s node. If missing, + the OS should not run diagnostics on the virtual + processor + + + + + + “l2-cache” property + + + If the physical relationship between virtual processors + and physical processors is not constant the secondary cache + characteristics are not relevant and this property is omitted + from the virtual processor’s node. + + + + + Nodes named + l2-cache + + + If the physical relationship between virtual processors + and physical processors is not constant the secondary cache + characteristics are not relevant and this node is omitted from + the partition’s device tree. + + + + + + “ibm,associativity” property + + + If the physical relationship between virtual processors + and physical processors is not constant the + “ibm,associativity” property reflects + the same domain for all virtual processors actualized by a + given physical processor pool. Note, even though the + associativity of virtual processors may be indistinguishable, + the associativity among other platform resources may be + relevant. + + + + +
+ + + + R1--1. + + For the SPLPAR option: If the platform does not + maintain a fixed relationship between its virtual processors and the + physical processors that actualize them, then the platform must vary the + device tree elements as outlined in + . + + + + +
+
+ +
+ Shared Processor LPAR Hypervisor Extensions + + +
+ Virtual Processor Preempt/Dispatch + A new virtual processor is dispatched on a physical processor when + one of the following conditions happens: + + + + The physical processor is idle and a virtual processor was made + ready to run (interrupt or prod) + + + + The old virtual processor exhausted its time slice (HDECR + interrupt). + + + + The old virtual processor ceded/conferred its cycles. + + + + When one of the above conditions occurs, the hypervisor, by + default, records all the virtual processor architected state including + the Time Base and Decrementer values and sets the hypervisor timer + services to wake the virtual processor per the setting of the + decrementer. The virtual processor’s Processor Utilization Register + value for this dispatch is computed. The VPA’s dispatch count is + incremented (such that the result is odd). Then the hypervisor selects a + new virtual processor to dispatch on the physical processor using an + implementation dependent algorithm having the following characteristics + given in priority order: + + + + The virtual processor is “ready to run” (has not + ceded/conferred its cycles or exhausted its time slice). + + + + Ready to run virtual processors are dispatched prior to waiting + in excess of their maximum specified latency. + + + + Of the non-latency critical virtual processors ready to run, + select the virtual processor that is most likely to have its working set + in the physical processor’s cache or for other reasons runs most + efficiently on the physical processor. + + + + If no virtual processor is “ready to run” at this time, + start accumulating the Pool Idle Count (PIC) of the total number of idle + processor cycles in the physical processor pool. + Optionally, flags in the VPA may be set by the OS to indicate to + the hypervisor that selected architected state of the virtual processor + need not be maintained (that is, the contents of these architected + facilities may be lost at any time without notice). The hypervisor may + then optimize its preempt/dispatch routines accordingly. Refer to + and SLB Shadow Buffer + description for the definition of these flags and values. The hypervisor + modifies any such OS setable and readable processor state that is not + explicitly saved and restored on a virtual processor dispatch so as to + prevent a covert channel between partitions. + When the virtual processor is dispatched, the virtual + processor’s “prod” bit is reset, the saved architected + state of the virtual processor is restored from that saved when the + virtual processor was preempted, ceded, or conferred, except for the time + base which retains the current value of the physical processor and the + decrementer which is reduced from the state saved value per current Time + Base value minus saved Time Base value. The hypervisor sets up for + computing the PUR value increment for the dispatch. + At this time, the hypervisor increments the virtual + processor’s VPA dispatch count (such that the value is even). The + hypervisor checks the VPA’s dispatch log flag, if set, the + hypervisor creates a pair of log entries in the dispatch log and stores + the circular buffer index in the first buffer entry. + If the virtual processor was signaled with an interrupt condition + and the physical interrupt has been reset, then the hypervisor adjusts + the virtual processor architected state to reflects that of a physical + processor taking the same interrupt prior to executing the next + sequential instruction and execution starts with the first instruction in + the appropriate interrupt vector. If no interrupt has been signaled to + the virtual processor or the physical interrupt is still active, then + execution starts at the next sequential instruction following the + instruction as noted by the hypervisor when the virtual processor ceded, + conferred, or was preempted. + The Platform allocates processor capacity to a partition’s + virtual processors using the architectural metaphor of a “dispatch + wheel” with a fixed implementation dependent rotation period. Each + virtual processor receives a time slice each rotation of the dispatch + wheel. The length of the time slice is determined by a number of + parameters, the OS image has direct control, within constraints, over + three of these parameters (number of virtual processors, Entitled + Processor Capacity Percentage, Variable Processor Capacity Weight). The + constraints are determined by partition and partition aggregate + configurations that are outside the scope of this architecture. For + reference, partition definitions provide the initial settings of these + parameters while the aggregation configurations provide the constraints + (including the degenerate case where an aggregation encapsulates only a + single member LPAR). + Entitled Processor Capacity Percentage: The percentage of a + physical processor that the hypervisor guarantees to be available to the + partition’s virtual processors (distributed in a uniform manner + among the partition’s virtual processors -- thus the number of + virtual processors affects the time slice size) each dispatch cycle. + Capacity ceded or conferred from one partition virtual processor extends + the time slices offered to other partition processors. Capacity ceded or + conferred after all of the partition’s virtual processors have been + dispatch is added to the variable capacity kitty. The initial, minimum + and maximum constraint values of this parameter are determined by the + partition configuration definition. The H_SET_PPP hcall() allows the OS + image to set this parameter within the constraints imposed by the + partition configuration definition minimum and maximums plus constraints + imposed by partition aggregation. + Variable Processor Capacity Weight: The unitless factor that the + hypervisor uses to assign processor capacity in addition to the Entitled + Processor Capacity Percentage. This factor may take the values 0 to 255. + A virtual processor’s time slice may be extended to allow it to use + capacity unused by other partitions, or not needed to meet the Entitled + Processor Capacity Percentage of the active partitions. A partition is + offered a portion of this variable capacity kitty equal to: (Variable + Processor Capacity Weight for the partition) / (summation of Variable + Processor Capacity Weights for all competing partitions). The initial + value of this parameter is determined by the partition configuration + definition. The H_SET_PPP hcall() allows the OS image to set this + parameter within the constraints imposed by the partition configuration + definition maximum. Certain partition definitions may not allow any + variable processor capacity allocation. + Unallocated Processor Capacity Percentage: The amount of processor + capacity that is currently available within the constraints of the LPAR's + current environment for allocation to Entitled Processor Capacity + Percentage. Race conditions may change the current environment before a + request for this capacity can be performed, resulting in a constrained + return from such a request. + Unallocated Variable Processor Capacity Weight: The amount of + variable processor capacity weight that is currently available within the + constraints of the LPAR's current environment for allocation to the + partition's variable processor capacity weight. Race conditions may + change the current environment before a request for this capacity can be + performed, resulting in a constrained return from such a request. + System Parameters readable via the + ibm,get-system-parameter RTAS call (see + ) + communicate a variety of configuration and + constraint parameters among which are determined by the partition + definition. + By means that are beyond the scope of this architecture, various + partitions may be organized into aggregations, for example “LPAR + groups”, for the purposes of load balancing. These aggregations may + impose constraints such as: “The summation of the minimum available + capacity for all virtual processors supported by the LPAR group cannot + exceed 100% of the group’s configured capacity”. + + + + R1--1. + + For the SPLPAR option: + The platform must dispatch each partition virtual processors each dispatch cycle unless + prevented by the semantics of the H_CONFER hcall(). + + + + + R1--2. + + For the SPLPAR option: + The summation of the processing capacity that the platform dispatches to the virtual + processors of each partition must be at least equal to that partition's + Entitled Processor Capacity Percentage unless prevented by the semantics + of the H_CONFER and H_CEDE hcall()s. + + + + + R1--3. + + For the SPLPAR option: + The processing capacity that the platform dispatches to each of the partition's virtual + processors must be substantially equal unless prevented by the semantics + of the H_CONFER and H_CEDE hcall()s. + + + + + R1--4. + + For the SPLPAR option: The platform must distribute + processor capacity allocated to SPLPAR virtual processor actualization + not consumed due to Requirements + , + , and + to partitions in strict + accordance with the definition of Variable Processor Capacity Weight + unless prevented by the LPAR's definition (capped) or the semantics of + the H_CONFER and H_CEDE hcall()s. + Note: A value of 0 for a Variable Processor Capacity Weight + effectively caps the partition at its Entitled Processor Capacity + Percentage value. + + + + + R1--5. + + For the SPLPAR option on platforms: The platform must + increment the counters in VPA offsets 0x158-0x16F per their definitions + in + . + + + + + R1--6. + + For the SPLPAR option on platforms : To maintain + compatibility across partition migration and firmware version levels the + OS must be prepared for platform implementations that do not increment + VPA offsets 0x158 - 0x16F. + + + + +
+ +
+ H_REGISTER_VPA + Register Virtual Processor Areas (these include the parameter area + known as the VPA, the Dispatch Trace Log Buffer, and if the SLB-Buffer + function set is supported, the SLB Shadow Buffer). Note if the caller + makes multiple registration requests for a given per virtual processor + area for a given virtual processor, the last registration wins, and if + the same memory area is registered for multiple processors, the area + contents are unpredictable, however, LPAR isolation is not + compromised. + The syntax of the H_REGISTER_VPA hcall() is given below. + + + + + Semantics: + + + + wVerify that the flags parameter is a supported value else return + H_Parameter. (That the subfunction field (Bits 16-23) is one of the + values supported by this call. Optionally that all other bits are zero. + Callers should not set any bits other than those specifically defined, + however, implementations are not required to check the value of bits + outside of the subfunction field.) + + + + Verify that the proc-no parameter references a virtual processor + owned by the calling virtual processor’s partition else return + H_Parameter + + + + If the sub function is a register, verify that the addr parameter + is an L1 cache line aligned logical address within the memory owned by + the calling virtual processor’s partition else return + H_Parameter. + + + + If the Shared Logical Resource option is implemented and the addr + parameter represents a shared logical resource location that has been + rescinded by the owner, return H_RESCINDED. + + + + + + Case on subfunction in flags parameter: + + + + Register VPA: + + + + Verify that the size field (2 bytes) at offset 0x4 is at least + 640 bytes else return H_Parameter. + + + + Verify that the entire structure (per the size field and vpa) + does not span a 4096 byte boundary else return H_Parameter. + + + + Record the specified processor’s vpa logical address for + access by other SPLPAR hypervisor functions. + + + + Initialize the contents of the area per + . + + + + Return H_Succes + + + + + + Register Dispatch Trace Log Buffer: + + + + Verify that the size field (4 bytes) at offset 0x4 is at least 48 + bytes else return H_Parameter. + + + + For the CMO option, verify that the entire structure (per the + size field and vpa parameter) does not span a memory entitlement granule + boundary else return H_MLENGTH_PARM. + + + + Verify that a VPA has been registered for the specified virtual + processor else return H_RESOURCE. + + + + Initialize the specified processor’s preempt/dispatch trace + log buffer pointers and index. + + + + Return H_Success. + + + + + + Register SLB Shadow Buffer (if SLB-Buffer function set is + supported): + + + + Verify that the size field (4 bytes) at offset 0x4 is at least 8 + bytes and that the entire structure (per the size and vpa parameters) + does not span a 4096 byte boundary else return H_Parameter. + + + + Verify that a VPA has been registered for the specified virtual + processor else return H_RESOURCE. + + + + Initialize the specified processor’s SLB Shadow buffer + pointers and set the maximum persistent SLB restore index to the lesser + of the maximum number of processor SLBs or the maximum number of entries + in the registered SLB Shadow buffer. + + + + Return H_Success. + + + + + + Deregister VPA: + + + + Verify that a Dispatch Trace Log buffer is not registered for the + specified processor else return H_RESOURCE. + + + + Verify that an SLB Shadow buffer is not registered for the + specified processor else return H_RESOURCE. + + + + Clear any partition memory pointer to the specified + processor’s VPA (note no check is made that a valid VPA + registration exists). + + + + Return H_Success. + + + + + + Deregister Dispatch Trace Log Buffer: + + + + Clear any partition memory and/ or hypervisor pointer to the + specified processor’s Dispatch Trace Buffer (note no check is made + that a valid Dispatch Trace Buffer registration exists). + + + + Return H_Success. + + + + + + Deregister SLB Shadow Buffer (if SLB-Buffer function set is + supported): + + + + Clear any hypervisor pointer(s) to the specified + processor’s SLB Shadow buffer (note no check is made that a valid + SLB Shadow buffer registration exists). + + + + Zero the hypervisor’s maximum persistent SLB restore index + for the specified processor. + + + + Return H_Success. + + + + + + Else Return H_Function. + + + + + + R1--1. + + For the SPLPAR option: The platform must implement + the H_REGISTER_PVA hcall() following the syntax and semantics of + . + + + + + R1--2. + + For the SLPAR plus SLB Shadow Buffer options: The + platform must register, and deregister the optional SLB Shadow buffer per + the syntax and semantics of + . + + + + + R1--3. + + For the SLPAR plus SLB Shadow Buffer options: The + platform must make persistent the SLB entries recorded by the OS within + the SLB Shadow buffer as described in + . + + + + + +
+ +
+ H_CEDE + The architectural intent of this hcall() is to have the virtual + processor, which has no useful work to do, enter a wait state ceding its + processor capacity to other virtual processors until some useful work + appears, signaled either through an interrupt or a prod hcall(). To help + the caller reduce race conditions, this call may be made with interrupts + disabled but the semantics of the hcall() enable the virtual + processor’s interrupts so that it may always receive wake up + interrupt signals. As a hint to the hypervisor, the cede latency + specifier + indicates how long the OS can + tolerate the latency to an H_PROD hcall() or interrupt, this may affect + how the hypervisor chooses to use or even power down the actualizing + physical processor in the mean time. + + Software Note: The floating point registers may not + be preserved by this call if the “Maintain FPRs” field of the + VPA =0, see + . + + + Syntax: + + + + + + + Semantics: + + + + Enable the virtual processor’s MSREE + bit as if it was on at the time of the call. + + + + Serialize for the virtual processor’s control structure + with H_PROD. + + + + If the virtual processor’s “prod” bit is set, + then: + + + + Reset the virtual processor’s “prod” + bit. + + + + Release the virtual processor’s control structure. + + + + Return H_Success. + + + + + + Record all the virtual processor architected state including the + Time Base and Decrementer values. + + + + Set hypervisor timer services to wake the virtual processor per + the setting of the decrementer. + + + + Mark the virtual processor as non-dispatchable until the + processor is the target of an interrupt (system reset, external including + decrementer or IPI) or PROD. + + + + Cede the time remaining in the virtual processor’s time + slice preferentially to the virtual processor’s partition. + + + + Release the virtual processor’s control structure. + + + + Dispatch some other virtual processor + + + + Return H_Success. + + + + + + R1--1. + + For the SPLPAR option: The platform must implement + the H_CEDE hcall() following the syntax and semantics of + . + + + + +
+ +
+ H_CONFER + The architectural intent of this hcall() is to confer the callers + processor capacity to the holder of a lock or the initiator of an event + that the caller is waiting upon. If the caller knows the identity of the + lock holder then the holder’s virtual processor number is supplied + as a parameter, if the caller does not know the identity of the lock + holder then the “all processors” value of the proc parameter + is specified. If the caller is conferring to the initiator of an event + the proc parameter value of the calling processor. This call may be made + with interrupts enabled or disabled. This call provides a reduced + “kill set” of volatile registers, GPRs r0 and r4-r13 are + preserved. + + Software Note: The floating point registers may not + be preserved by this call if the “Maintain FPRs” field of the + VPA =0, see + . + + + Syntax: + + + + + + + Semantics: + + + + Validate the proc number else return H_Parameter. Valid + Values: + + + + -1 (all partition processors) + + + + 0 through N one of the processor numbers of the calling processor's + partition + + + + The calling processor's number forces a confer until the calling + processor is PRODed + + + + + + If the proc number is for a single processor and the single + processor is not the calling processor, then + + + + If the dispatch parameter is not equal to the specified + processor’s hypervisor copy of the dispatch number or the + hypervisor copy of the dispatch number is even, then return + H_Success. + + + + If the target processor has conferred its cycles to all others, + then return H_Success. + + + + Firmware Implementation Note: If one were to confer + to a processor that had conferred to all, then a dead lock could occur, + however, there are valid cases with nested locks were this could happen, + therefore, the hypervisor call silently ignores the confer. + + + + Record all the virtual processor architected state including the + Time Base and Decrementer values. + + + + If the MSREE bit is on, + set hypervisor timer services to wake + the virtual processor per the setting of the decrementer. + + + + Mark the virtual processor as non-dispatchable until one of the + following: + + + + System reset interrupt. + + + + The MSREE bit is + on and the virtual processor is the target + of an external interrupt (including decrementer or IPI). + + + + The virtual processor is the target of a PROD operation. + + + + The specified target processor (or all partition processors if + the proc parameter value is a minus 1) have had the opportunity of a + dispatch cycle. + + + + + + Confer the time remaining in the virtual processor’s time + slice to the virtual processor’s partition. + + + + Dispatch the/a partition target virtual processor. + + + + Return H_Success. + + + + + + R1--1. + + For the SPLPAR option: The platform must implement + the H_CONFER hcall() following the syntax and semantics of + . + + + + + R1--2. + + For the SPLPAR option: The platform must implement + the H_CONFER hcall() such that the only GPR that is modified by the call + is r3. + + + + + +
+ +
+ H_PROD + Awakens the specific processor. This call provides a reduced + “kill set” of volatile registers, GPRs r0 and r4-r13 are + preserved. + + + Syntax: + + + + + + + Semantics: + + + + Verify that the target virtual processor specified by the proc + parameter is owned by the calling virtual processor’s + partition. + + + + Serialize for the Target Virtual Processor’s control + structure with H_CEDE. + + + + Set “prod” bit in the target virtual + processor’s control structure. + + + + If the target virtual processor is not ready to run, mark the + target virtual processor ready to run. + + + + Release the target virtual processor’s control + structure. + + + + Return H_Success. + + + + + + R1--1. + + For the SPLPAR option: The platform must implement + the H_PROD hcall() following the syntax and semantics of + . + + + + + R1--2. + + For the SPLPAR option: The platform must implement + the H_PROD hcall() such that the only GPR that is modified by the call is + r3. + + + + + +
+ +
+ H_GET_PPP + This hcall() returns the partition’s performance parameters. + The parameters are packed into registers: + + + + Register R4 contains the Entitled Processor Capacity Percentage + for the partition. In the case of a dedicated processor partition this + value is 100* the number of processors owned by the partition. + + + + Register R5 contains the Unallocated Processor Capacity + Percentage for the calling partition’s aggregation. + + + + Register R6 contains the aggregation numbers of up to 4 levels of + aggregations that the partition may be a member. + + + + Bytes 0-1: Reserved for future aggregation definition, and set to + zero -- in the future this field may be given meaning. + + + + Bytes 2-3: Reserved for future aggregation definition, and set to + zero -- in the future this field may be given meaning. + + + + Bytes 4-5: 16 bit binary representation of the “Group + Number”. + + + + Bytes 6-7: 16 bit binary representation of the “Pool + Number”. In the case of a dedicated processor partition the + “Pool Number” is not applicable which is represented by the + code 0xFFFF. + + + + + + Register R7 contains the platform resource capacities: + + + + Bytes 0 Reserved for future platform resource capacity + definition, set to zero -- in the future this field may be given + meaning. + + + + Byte 1 is a bit field representing the capping mode of the + partition’s virtual processor(s): + + + + Bits 0-6 are reserved, and set to zero -- in the future these + bits may be given meaning as new capping modes are defined + + + + Bit 7 -- The partition’s virtual processor(s) are capped at + their Entitled Processor Capacity Percentage. In the case of dedicated + processors this bit is set. + + + + + + Byte 2: Variable Processor Capacity Weight. In the case of a + dedicated processor partition this value is 0x00. + + + + Byte 3: Unallocated Variable Processor Capacity Weight for the + calling partition’s aggregation. + + + + Bytes 4-5 16 bit unsigned binary representation of the number of + processors active in the caller’s Processor Pool. In the case of a + dedicated processor partition this value is 0x00. + + + + Bytes 6-7 16 bit binary representation of the number of + processors active on the platform. + + + + + + When the value of the + “ibm,partition-performance-parameters-level” see + ) is >=1 then register R8 contains + the processor virtualization resource allocations. In the case of a + dedicated processor partition R8 contains 0: + + + + Bytes 0-1: 16 bit unsigned binary representation of the number of + physical platform processors allocated to processor + virtualization. + + + + Bytes 2-4: 24 bit unsigned binary representation of the maximum + processor capacity percentage that is available to the partition's + pool. + + + + Bytes 5-7: 24 bit unsigned binary representation of the entitled + processor capacity percentage available to the partition's pool. + + + + + + + + Syntax: + + + + + + + Semantics: + + + + Place the partition’s performance parameters for the + calling virtual processor’s partition into the respective + registers: + + + + R4: The calling partition’s Entitled Processor Capacity + Percentage + + + + R5: The calling partition’s aggregation’s Unallocated + Processor Capacity Percentage. + + + + R6: The aggregation numbers + + + + R7: The platform resource capacities + + + + R8: When + “ibm,partition-performance-parameters-level” is + >= 1 in the device tree, R8 is loaded with the processor + virtualization resource allocations + + + + Return H_Success. + + + + + + + + R1--1. + + For the SPLPAR option: The platform must implement + the H_GET_PPP hcall() following the syntax and semantics of + . + + + + +
+ +
+ H_SET_PPP + This hcall() allows the partition to modify its entitled processor + capacity percentage and variable processor capacity weight within limits. + If one or both request parameters exceed the constraints of the calling + LPAR’s environment, the hypervisor limits the set value to the + constrained value and returns H_Constrained. The H_GET_PPP call may be + used to determine the actual current operational values. By the + hypervisor constraining the actual values, the calling partition does not + need special authority to make the H_SET_PPP hcall(). + See + for definitions of these + values. + + + Syntax: + + + + + + + Semantics: + + + + Verify that the variable processor capacity weight is between 0 + and 255 else return H_Parameter. + + + + Verify that the capacities specified is within the constraints of + the partition: + + + + If yes, atomically set the partition’s entitled and + variable capacity per the request and return H_Success. + + + + If not set the partition’s entitled and variable capacity + as constrained by the partition’s configuration and return + H_Constrained. + + + + + + Firmware Implementation Note: If the dispatch algorithm requires + that the summation of variable capacities be updated, it is atomically + updated with the set of the partition’s weight. + + + + R1--1. + + For the SPLPAR option: The platform must implement + and make available to selected partitions, the H_SET_PPP hcall() + following the syntax and semantics of + . + + + + +
+ +
+ H_PURR + The Processor Utilization of Resources Register (PURR) is + compatibly read through the H_PURR hcall(). In those implementations + running on processors that do not implement the register in hardware, + firmware simulates the function. On platforms that present the property + “ibm,rks-hcalls” with bit 2 set (see + ), this call provides a reduced + “kill set” of volatile registers, GPRs r0 and r5-r13 are + preserved. + + + Syntax: + + + + + + + Semantics: + + + + If the platform presents the + “ibm,rks-hcall” property with bit 2 set; + then honor a kill set of volatile registers r3 & r4. + + + + Compute the PURR value for the calling virtual processor up to + the current point in time and place in R4 + + + + Return H_Success. + + + + + + R1--1. + + For the SPLPAR option: The platform must implement + the H_PURR hcall() following the syntax and semantics of + . + + + + +
+ +
+ H_POLL_PENDING + Certain implementations of the hypervisor steal processor cycles to + perform administrative functions in the background. The purpose of the + H_POLL_PENDING hcall() is to provide a OS, running atop such an + implementation, with a hint of pending work so that it may more + intelligently manage use of platform resources. The use of this call by + an OS is totally optional since such an implementation also uses hardware + mechanisms to ensure that the required cycles can be transparently + stolen. It is assumed that the caller of H_POLL_PENDING is idle, if all + threads of the processor are idle (as indicated by the idle flag at byte + offset 0xFE of + ), the hypervisor may choose to + perform a background administrative task. The hypervisor returns + H_PENDING if there is pending administrative work, at the time of the + call, that it could dispatch to the calling processor if the calling + processor were ceded, if there is no such pending work, the return code + is H_Success. Due to race conditions, this pending work may have grown or + disappeared by the time the calling OS makes a subsequent H_CEDE + call. + There is NO architectural guarantee that ceding a processor exempts + a virtual processor from preemption for a given period of time. That may + indeed be the characteristic of a given implementation, but cannot be + expected from all future implementations. + + + Syntax: + + + + + + + Semantics: + + + + Return H_PENDING if there is work pending that could be + dispatched to the calling processor if it were ceded, else return + H_Success. + + + + + + R1--1. + + For the SPLPAR option: The platform must implement + the H_POLL_PENDING hcall() following the syntax and semantics of + . + + + + + +
+ +
+ +
+ Pool Idle Count Function Set + The hcall-pic function set may be configured via the partition + definition in none or any number of partitions as the weights + administrative policy dictates. + +
+ H_PIC + + + + Syntax: + + + + + + + Semantics: + + + + Verify that calling partition has the authority to make the call + else return H_Authority. + + + + Compute the PIC value for the processor pool implementing the + calling virtual processor up to the current point in time and place into + R4 + + + + Place the number of processors in the caller’s processor + pool in R5. + + + + When the value of the + “ibm,partition-performance-parameters-level” (see + ) is >=1 then: + + + + Place the summation of time base ticks for all platform + processors, allocated to the caller's processor pool, into register + R6. + + + + Place the summation of all PURR ticks accumulated by all + dispatched (not idle) platform processor threads, allocated to the + caller's processor pool, into register R7. + + + + Place the summation of all SPURR + Machines that do not have a SPURR mechanism are assumed to run at + a constant speed, at which time the PURR value is substituted. + ticks accumulated by all dispatched (not idle) platform + processor threads, allocated to the caller's processor pool, into + register R8. + + + + Place the caller's processor pool ID into low order two bytes of + register R9 (high order 6 bytes are reserved - set to 0x000000). + + + + If the calling partition has the authority to monitor total + processor virtualization then: + + + + Place the summation of time base ticks for all platform physical + processors, allocated to processor virtualization, in register + R10. + + + + Place the summation of all PURR ticks accumulated by all + dispatched (not idle) platform physical processor threads, allocated to + processor virtualization, in register R11. + + + + Place the summation of all SPURR + ticks accumulated by all dispatched (not idle) platform + physical processor threads, allocated to processor virtualization, in + register R12. + + + + Else load R10, R11 and R12 with -1. + + + + + + + + Return H_Success. + + + + + + R1--1. + + For the SPLPAR option: The platform must implement + and make available to selected partitions, the H_PIC hcall() following + the syntax and semantics of + . + + + + +
+
+ + +
+ Thread Join Option + + +
+ H_JOIN + The H_JOIN hcall() performs the equivalent of a H_CONFER + (proc=self) hcall() (see + ) unless called by the sole + unjoined (active) processor thread, at which time the H_JOIN hcall() + returns H_CONTINUE. H_JOIN is intended to establish a single threaded + operating environment within a partition; to prevent external interrupts + from complicating this environment, H_JOIN returns “bad_mode” + if called with the processor MSR[EE] bit set to 1. Joined (inactive) + threads are activated by H_PROD (see + ) which starts execution at the + instruction following the hcall; or a system reset non-maskable interrupt + which appears to interrupt between the hcall and the instruction + following the hcall. + + + Syntax: + + + + + + + Semantics + + + + If MSR.EE=1 return bad_mode. + + + + If other processor threads are active in the calling partition, + then emulate H_CONFER (proc=self) + + + + Else return H_CONTINUE. + + + + + + R1--1. + + For the Thread Join option: The platform must + implement the H_JOIN hcall() following the syntax and semantics of + . + + + + + R1--2. + + For the Thread Join option: The platform must + implement the hcall-join and hcall-splpar function sets. + + + + + R1--3. + + For the Thread Join option: The platform must support + the H_PROD hcall even if the partition is operating in dedicated + processor mode. + + + + +
+
+ +
+ Virtual Processor Home Node Option (VPHN) + The SPLPAR option allows the platform to dispatch virtual + processors on physical processors that due to the variable nature of work + loads are temporarily free, thus improving the utilization of computing + resources. However, SPLPAR implies inconsistent mapping of virtual to + physical processors; defeating resource allocation software that attempts + to optimize performance on platforms that implement the NUMA + option. + To bridge the gap between these two options, the VPHN option + maintain a substantially consistent mapping of a given virtual processor + to a physical processor or set of processors within a given associativity + domain. Thus the OS can, when allocating computing resources, take + advantage of this statistically consistent mapping to improve processing + performance. + VPHN mappings are substantially consistent but not static. For any + given dispatch cycle, a best effort is made to dispatch the virtual + processor on a physical processor within a targeted associativity domain + (the virtual processor's home node). However, if processing capacity + within the home node is not available, some other physical processor is + assigned to meet the processing capacity entitlement. From time to time, + to optimize the total platform performance, it may be necessary for the + platform to change the home node of a given virtual processor. + To enable the OS to determine the associativity domain of the home + node of a virtual processor, platforms implementing the VPHN option + provide the H_HOME_NODE_ASSOCIATIVITY hcall(). The presence of the + hcall-vphn function set in the + “ibm,hypertas-functions” property + indicates that the platform supports the VPHN option. The OS should be + prepared for the support of the VPHN option to change with functions such + partition migration, after which a call to H_HOME_NODE_ASSOCIATIVITY may + end with a return code of H_FUNCTION. Additionally, the VPHN option + defines a VPA field that the OS can poll to determine if the + associativity domain of the home node has changed. When the home node + associativity domain changes, the OS might choose to call the + H_HOME_NODE_ASSOCIATIVITY hcall() and adjust its resource allocations + accordingly. + + + + R1--1. + + For the Virtual Processor Home Node option: The + platform must support the H_HOME_NODE_ASSOCIATIVITY hcall() per the + syntax and semantics specified in section + . + + + + + R1--2. + + For the Virtual Processor Home Node option: For the + OS to operate properly across such functions as partition migration, the + OS must be prepared for the target platform to not support the Virtual + Processor Home Node option. + + + + + R1--3. + + For the Virtual Processor Home Node option: The + platform must support the “virtual processor home node + associativity changes counters” field in the VPA per section + . + + + + + R1--4. + + For the Virtual Processor Home Node option: The + platform must support the “Form 1” of the + “ibm,associativity-reference-points” property per + . The client program may call + H_HOME_NODE_ASSOCIATIVITY hcall() with a valid identifier input parameter + (such as from the device tree or from the + ibm,configure-connector RTAS call) even if the + corresponding virtual processor has not been started so that the client + program can allocate resources optimally with respect to the to be + started virtual processor. + + + + +
+ H_HOME_NODE_ASSOCIATIVITY + The H_HOME_NODE_ASSOCIATIVITY hcall() returns the associativity + domain designation associated with the identifier input parameter. The + client program may call H_HOME_NODE_ASSOCIATIVITY hcall() with a valid + identifier input parameter (such as from the device tree or from the + + ibm,configure-connector RTAS call) even if the + corresponding virtual processor has not been started so that the client + program can allocate resources optimally with respect to the to be + started virtual processor. + + + Syntax: + + + + + + + Parameters: + + + + Input: + + + + flags: + + + + Note: this parameter does not share format with the flags + parameter of the Page Frame Table Access hcall()s. + + + + Defined Values: + + + + 0x0 Invalid + + + + 0x1 id parameter is as proc-no parameter of H_REGISTER_VPA + hcall() + + + + 0x2 id parameter is as processor index from byte offsets 0x2-0x3 + of a trace log buffer entry + + + + all other values reserved. + + + + + + + + id: processor identifier per the form indicated by the flags + parameter. + + + + + + Output: + + + + R3: return code + + + + R4-R9: associativity domain identifier list of the specified + processor’s home node. + + + + Only the “primary” connection (as would be reported + in the first string of the + “ibm,associativity” property) is + reported. + + + + The associativity domain numbers are reported in the sequence + they would appear in the + “ibm,associativity” property; starting + from the high order bytes of R4 proceeding toward the low order bytes of + R9. + + + + Each of the registers R4-R9 is divided into 4 fields each 2 bytes + long. + + + + The high order bit of each 2 byte field is a length + specifier: + + + + 1: The associativity domain number is contained in the low order + 15 bits of the field, + + + + 0: The associativity domain number is contained in the low order + 15 bits of the current field concatenated with the 16 bits of the next + sequential field) + + + + + + All low order fields not required to specify the associativity + domain identifier list contain the reserved value of all ones. + + + + + + + + + + Semantics: + + + + Verify that the “flags” parameter is valid else + return H_Parameter. + + + + Verify that the “id” parameter is valid for the + “flags” and the partition else return H_P2. + + + + Pack the associativity domain identifiers for the home node + associated with the “id” parameter starting with the highest + level reported in the + “ibm,associativity” property in the high + order field of R4. + + + + All remaining fields through the low order field of R9 are filled + with 0xFFFFFFFF. + + + + Return H_Success. + + + + +
+ +
+ VPA Home Node Associativity Changes Counters + For the VPHN option, the platform maintains within each VPA the + Virtual Processor Home Node Associativity Change Counters field. See + Table + . This eight (8) byte field is + maintained as 8 one byte long counters. The number of counters that are + supported is implementation dependent up to 8, and corresponds to the + entries in the form 1 of the + “ibm,associativity-reference-points” property. If + the platform implements fewer than 8 associativity reference points, only + the corresponding low offset counters within the field are used and the + remaining high offset counters within the field are unused. + Should the associativity of the home node of the virtual processor + change, for each changed associativity level that corresponds to a level + reported in the + “ibm,associativity-reference-points” property, the + corresponding counter in the Virtual Processor Home Node Associativity + Change Counters field is incremented. +
+ +
+
+ +
+ Virtualizing Partition Memory + This section describes the various high level functions that are + enabled by the virtualization of the logical real memory of a partition. In + principle, virtualization of partition memory can be totally transparent to + the partition software; however, partition software that is migration aware + can cooperate with the platform to achieve higher performance, and enhanced + functionality. + +
+ Partition Migration/Hibernation + Virtualizing partition memory allows a partition to be moved via + migration or hibernation. In the case of partition migration from one + platform to another, the source and destination platforms cooperate to + minimize the time that the partition is non-responsive; the goal is to be + non-responsive no more than a few seconds. In the case of hibernation, + the intent is to put the partition to sleep for an extended period; + during this time the partition state is stored on secondary storage for + later restoration. + + + + R1--1. + + For the Partition Migration and Partition Hibernation + options: The platform must implement the Partition Suspension + option (See + ). + + + + + R1--2. + + + Reserved + + + + + R1--3. + + For the Partition Migration and Partition Hibernation + options: The platform must implement the Update OF Tree + option. + + + + + R1--4. + + For the Partition Migration and Partition Hibernation + options: The platform must implement the Version 6 Extensions + of Event Log Format for all reported events (See + ). + + + + + R1--5. + + For the Partition Migration and Partition Hibernation + options: The platform must prevent the migration/hibernation of + partitions that own dedicated platform resources in addition to + processors and memory, this includes physical I/O resources, the BSR + facility, physical indicators and sensors (virtualized I/O, indicators + (such as tone) and sensors (such as EPOW) are allowed). + + + + + R1--6. + + For the Partition Migration and Partition Hibernation + options: The platform must implement the Client Vterm + option. + + + + + R1--7. + + For the Partition Migration and Partition Hibernation + options: The platform + “timebase-frequency” must be 512 MHz. +/- + 50 parts per million. + + + + + R1--8. + + For the Partition Migration and Partition Hibernation + options: The platform must present the + “ibm,nominal-tbf” property (See + ) with the value of 512 MHz. + + + + + R1--9. + + For the Partition Suspension option: The platform + must present the properties from + , as specified by + , to a partition. + + + + + R1--10. + + For the Partition Suspension option: The presence and + value of all properties in + must not change while a + partition is suspended except for those properties described by + . + + + + + + Properties Related to the Partition Suspension Option + + + + + + + + Property Name + + + + + Requirement + + + + + + + + + “ibm,estimate-precision” + + + + Shall be present. + “ibm,estimate-precision” shall + contain the “fre”, “fres”, + frsqrte”, and “frsqrtes” instruction + mnemonics. + + + + + + “ibm,processor-page-sizes” + + + + Shall be present. + + + + + + “reservation-granule-size” + + + + Shall be present. + + + + + + “cache-unified” + + + + Shall be present if the cache is physically or logically + unified and thus does not require the architected instruction + sequence for data cache stores to appear in the instruction + cache (See “Instruction Storage” section of Book II + of PA); else shall not be present. + + + + + + “i-cache-size” + + + + Shall be present. + + + + + + “d-cache-size” + + + + Shall be present. + + + + + + “i-cache-line-size” + + + + Shall be present. + + + + + + “d-cache-line-size” + + + + Shall be present. + + + + + + “i-cache-block-size” + + + + Shall be present. + + + + + + “d-cache-block-size” + + + + Shall be present. + + + + + + “i-cache-sets” + + + + Shall be present. + + + + + + “d-cache-sets” + + + + Shall be present. + + + + + + “timebase-frequency” + + + + Shall be present if the timebase frequency can fit into + the + “timebase-frequency” property; + else shall not be present. + + + + + “ibm,extended-timebase-frequency” + + + Shall be present if the timebase frequency cannot fit + into the + “timebase-frequency” property; else + shall not be present. + + + + + + “slb-size” + + + + Shall be present. + + + + + + “cpu-version” + + + + Shall be present. + + + + + + “ibm,ppc-interrupt-server#s” + + + + Shall be present. + + + + + + “l2-cache” + + + + Shall be present if another level of cache exists; else + shall not be present. + + + + + + “ibm,vmx” + + + + Shall be present if VMX is present for the partition; + else shall not be present. + + + + + + “clock-frequency” + + + + Shall be present if the processor frequency can fit into + the + “clock-frequency” property; + else shall not be present. + + + + + “ibm,extended-clock-frequency” + + + Shall be present if the processor frequency cannot fit + into the + “clock-frequency” property; else shall + not be present. + + + + + + “ibm,processor-storage-keys” + + + + Shall be present. + + + + + + “ibm,processor-vadd-size” + + + + Shall be present. + + + + + + “ibm,processor-segment-sizes” + + + + Shall be present. + + + + + “ibm,segment-page-sizes” + + + Shall be present. + + + + + + “64-bit” + + + + Shall be present. + + + + + + “ibm,dfp” + + + + Shall be present if DFP is present for the partition; + else shall not be present. + + + + + “ibm,purr” + + + Shall be present if a PURR is present; else shall not be + present. + + + + + “performance-monitor” + + + Shall be present if a Performance Monitor is present; + else shall not be present. + + + + + “32-64-bridge” + + + Shall be present. + + + + + “external-control” + + + Shall not be present. + + + + + “general-purpose” + + + Shall be present. + + + + + “graphics” + + + Shall be present. + + + + + “ibm,platform-hardware-notification” + + + Shall be present. + + + + + “603-translation” + + + Shall not be present. + + + + + “603-power-management” + + + Shall not be present. + + + + + “tlb-size” + + + Shall be present. + + + + + “tlb-sets” + + + Shall be present. + + + + + “tlb-split” + + + Shall be present. + + + + + “d-tlb-size” + + + Shall be present. + + + + + “d-tlb-sets” + + + Shall be present. + + + + + “i-tlb-size” + + + Shall be present. + + + + + “i-tlb-sets” + + + Shall be present. + + + + + “64-bit-virtual-address” + + + Shall not be present. + + + + + “bus-frequency” + + + Shall be present if the bus frequency can fit into the + “bus-frequency” property; else + shall not be present. + + + + + “ibm,extended-bus-frequency” + + + Shall be present if the processor frequency cannot fit + into the + “bus-frequency” property; else shall + not be present. + + + + + “ibm,spurr” + + + Shall be present if an SPURR is present; else shall not + be present. + + + + + “name” + + + Shall be present. + + + + + “device_type” + + + Shall be present. + + + + + “reg” + + + Shall be present. + + + + + “status” + + + Shall be present. + + + + + “ibm,pa-features” + + + Shall be present. + + + + + “ibm,negotiated-pa-features” + + + Shall be present + + + + + + “ibm,ppc-interrupt-gserver#s” + + + + Shall be present + + + + + + “ibm,tbu40-offset” + + + + Shall be present + + + + + + “ibm,pi-features ” + + + + Shall be present + + + + + + “ibm,pa-optimizations” + + + + Shall be present + + + + +
+ Note on : The values of the + properties in Table + shall be consistent with + implementation and design of the processor and the platform upon boot as + well as before and after partition suspension. + + Programming Note: The + “cpu-version” property may contain a + logical processor version value. Therefore, code designed to handle + processor errata should read the + “ibm,platform-hardware-notification” property of + the root node to obtain the physical processor version numbers allowed in + the platform. +
+ +
+ Virtualizing the Real Mode Area + PA requires implementations to provide a Real Mode Area of memory + that is accessed when not in hypervisor state (either MSR[HV] = 0, or + MSR[HV] = 1 and MSR[PR] = 1) and the OS address translation mechanism is + disabled (MSR[IR] = 0 or MSR[DR] = 0). PA provides mechanisms to allow + the RMA to consist of discontiguous pages of selectable sizes. Such an + RMA is known as a virtualized RMA. The H_VRMASD hcall() allows the OS to + change the characteristics of the mappings the address translation + mechanism uses to access a virtualized RMA. + +
+ H_VRMASD + The caller may need to invoke the H_VRMASD hcall() multiple times + for it to return with a return code of H_Success. Upon receiving a return + code of H_LongBusyOrder10mSec, the caller should attempt to invoke + H_VRMASD in 10 mSec with the same Page_Size_Code value used on the + previous H_VRMASD hcall(). Invoking H_VRMASD with a different + Page_Size_Code value indicates that the caller wants to transition to the + Page_Size_Code value of the most recent H_VRMASD call. + When changing the page size used to map the VRMA using the H_VRMASD + hcall(), the caller is responsible for establishing HPT entries for any + potential real mode accesses prior to calling H_VRMASD with a new value + of Page_Size_Code, and maintaining any HPT entries for the old value of + Page_Size_Code until the hcall() returns H_Success. + + + + R1--1. + + For the VRMA option: The platform must include the + “ibm,vrma-page-sizes” property (See + ) in the + /cpu node. + + + + + R1--2. + + For the VRMA option: The platform must implement the + H_VRMASD hcall() following the syntax and semantics of + . + + + + + R1--3. + + For the VRMA option: In order to prevent a storage + exception, the calling partition must establish page table mappings for + the Real Mode Area using entries with a page size corresponding to the + new Page_Size_Code value prior to making an H_VRMASD hcall() and must + maintain the old page table mappings using the page size corresponding to + the old Page_Size_Code value until the H_VRMASD hcall() returns + H_Success. + + + + + + Syntax: + + + + + + + Parameters: + + + Page_Size_Code: A supported VRMASD field value. Supported VRMASD + field values are described by the + “ibm,vrma-page-sizes” property. + + + + + + Semantics: + + + + Verify that the Page_Size_Code parameter corresponds to a + supported VRMASD field value; else return H_Parameter. + + + + If the Real Mode Area page size specified by the Page_Size_Code + parameter does not match the operating RMA page size of the partition, + then set the operating RMA page size of the partition to the value + specified by the Page_Size_Code parameter and initiate the transition of + the operating RMA page size of all active processing threads to the value + specified by the Page_Size_Code parameter. + + + + If all active threads have transitioned to the partition + operating RMA page size, then return H_Success; else return + H_LongBusyOrder10mSec. + + + +
+
+ +
+ Cooperative Memory Over-commitment Option (CMO) + Cooperative Memory Over-commitment Option (CMO) + The over-commitment of logical memory is accomplished by the + platform reassigning pages of memory among the partitions to create the + appearance of more memory than is actually present. This is commonly + known as paging. While paging can, in certain cases, be accomplished + transparently, significantly better memory utilization and platform + performance can be achieved with cooperation from the partition + OS. + CMO introduces the following LoPAR terms: + + + + Expropriation: + + The act of the platform disassociating a physical + page from a logical page. + + + + + Subvention: + + The act of the platform associating a physical page + with a logical page. + + + + + Loaned Memory: + + Logical real memory that a partition lends to the + hypervisor for reuse. The partition should not gratuitously access loaned + memory as such accesses are likely to experience a significant + delay. + + + + + Memory entitlement: + + The amount of memory that the platform + guarantees that the partition is able to I/O map at any given + time. + + + + + + + R1--1. + + For the CMO option: The partition must be running + under the SPLPAR option. + + + + + R1--2. + + For the CMO option: The platform must transparently + (except for time delays) handle all effects of any memory expropriation + that it may introduce unless the CMO option is explicitly enabled by the + setting of architecture.vec option vector 5 byte 4 bit 0 (See + for details). + The CMO option consists of the following LoPAR extensions: + + + + Define + ibm,architectue.vec-5 option Byte 4 bit 0 as + “Client supports cooperative logical real memory + over-commitment”. + + + Define page usage states to assist the platform in selecting good + victim pages and mechanisms to set such states. + + + Extend the syntax and semantics defined for the I/O mapping + hcall()s + + + + Return codes (H_LongBusyOrder1msec, H_LongBusyOrder10msec, and + H_NOT_ENOUGH_RESOURCES) + + + + Return parameter extension for memory entitlement + management + + + + + Define a simulated Special Uncorrectable memory Error machine + check for the case where a page can not be restored due to an + error. + + + + + + + R1--3. + + For the CMO option: The architected interface syntax + and semantics of all LoPAR hcall()s and RTAS calls except as explicitly + modified per the CMO option architecture must remain invariant when + operating in CMO mode; any accommodation to memory over-commitment by + these firmware functions (potentially any function that takes a logical + real address as an input parameter) is handled transparently. + Note: Requirement + specifically applies to the + debugger support hcall()s. + For maximum performance benefit, an OS that indicates via the + ibm,client-architecture-support interface that it + supports the CMO option will strive to maintain in the + “loaned” state (See + ), the amount of logical memory + indicated by the value returned in R9 from the H_GET_MPP hcall (See + ), as well as provide page + usage state information via the interfaces defined in + and + . + The Extended Cooperative Memory Over-commitment Option (XCMO) + provides additional features to manage page coalescing. These features + are activated via setting architecture.vec vector 5 byte 4 bit 1 to the + value of 1 in the + ibm,client-architecture-support interface. Given that + the platform supports the XCMO option, the CC flag for page frame table + Accesses see + and the H_GET_MPP_X hcall() see + + may be used by the OS. An OS + might understand that a given page is a great candidate for page + coalescing perhaps because the page contains OS and or common library + code which is likely to be duplicated in other partitions; if so it might + choose to set the Coalesce Candidate (CC) flag in the page table access + or H_PAGE_INIT hcall()s as a hint to the hypervisor. Should a given + logical page be mapped multiple times with conflicting Coalesce Candidate + hints, the value in the last mapping made takes precedence. + For a variety of reasons outside the scope of LoPAR, a platform + supporting the XCMO option for a given platform might not actually + perform page coalescing. If this is the case, the first return value from + the H_GET_MPP_X hcall() see + is the reserved value + zero. + + + + + R1--4. + + For the XCMO Option: The platform must implement the + CMO Option. + + + + + R1--5. + + Reserved for Compatibility For the XCMO Option: The + platform must implement the CC (Coalesce Candidate) flag bit see + . + + + + + R1--6. + + For the XCMO Option: The platform must implement the + H_GET_MPP_X hcall() see + . + + + + + R1--7. + + For the XCMO Option with the Partition Migration and + Partition Hibernation options: to ensure proper operation after partition + migration or hibernation, the OS must stop setting the CC flag bit see + and stop calling the + H_GET_MPP_X hcall() see + prior to calling + ibm,suspend-me RTAS and not do so again until after + the OS has determined that the XCMO option is supported on the + destination platform. + + + + + +
+ CMO Background (Informative) + The following information is provided to be informative of the + architectural intent. Implementations may vary, but should make a best + effort to achieve the goals described. + Ideally, the hypervisor does not expropriate any logical memory + pages that it must later read in from disk; this is based upon the belief + that the OS is in a better position to determine its working set relative + to the available memory and page its memory than the hypervisor thus, + when possible, the OS pager should be used. The ideal is approximated, + since it cannot be achieved in all cases. The “Overage” is + defined as the amount of logical address space that cannot be backed by + the physical main storage pool. The overage is equal to the summation of + the logical address space for all partitions using a given VRM main + storage pool (the main storage that the hypervisor uses to back logical + memory pages for a set of partitions) plus the high water mark of the + hypervisor free page list (the free list high water mark is some + implementation dependent ratio of the pool size) less the size of the VRM + main storage pool. + If the summation of the space freed by page coalescing and page + donation is equal to the overage, in the steady state the hypervisor need + not page. In reality the system is seldom, if ever, in the steady state, + but with the free list pages the hypervisor has enough buffer space to + take up most of the transient cases. + Page coalescing is a transparent operation where in the hypervisor + detects duplicate pages, directs all user reads to a single copy and may + reclaim the other duplicate physical memory pages. Should the page owner + change a coalesced page the hypervisor needs to transparently provide the + page owner with a unique copy of the page. Read only pages are more + likely to remain identical for a longer period of time and are thus + better coalescing candidates. + To set the value for the partition's page donation, the algorithm + needs to be “fair” and responsive to the partition's + “weight” so that more important work can be helped along. To + be “fair”, the donation needs to be somewhat proportional to + the partition's size since donating x pages is likely to cause greater + pain to a small partition than a large one; yet the reason for + “weight” is to cause greater pain to certain partitions + relative to others. + Thus the initial donation for a partition is set at the partition's + logical address space size as a percentage of the total pool logical + space subscription times the overage. + Each implementation dependent time interval (say single digit + seconds or so), the hypervisor randomly selects 100 pages from each + partition and monitors how many of them were accessed during the next + interval. This, after normalization to account for partition CPU + utilization relative to its recent maximum, becomes an estimate of the + partition's page utilization. It is expected that a partition with higher + page utilization has a higher page fault rate and a lower percentage of + its working set resident -- thus experiences more pain from VRM. + The page utilization method described above may over estimate + memory pressure in certain cases; specifically it may be slow to realize + that the partition has gone idle. An idle partition reduces its CPU + utilization which after normalization makes it appear that the partition + memory pressure has risen rather than lowered. For this reason, the + results of the page utilization method is further compared with the OS + reported count of faults against pages that were previously swapped out + as reported in offsets 0x180 - 0x183 of the VPA for each of the + partition processors. The partition fault count when normalized with + respect to processor cycles allows comparisons among the reported values + from other partitions. Since the partition fault count is OS reported, + and thus can not be trusted, it can not be the primary value used to + determine page allocation, but since if the OS is misreporting the + statistic, it is likely to be high, the memory pressure estimate derived + from the OS reported fault counts can be used to reduce (but not + increase) the partition memory allocation. Note since the hint might not + be reported by a given OS, a filter should be put in place to detect that + the OS is not reporting faults and appropriate default values + substituted. + This initial donation is then modified over time to force the pain + of higher page utilization upon lower weight partitions based upon + comparing the following ratios: + A: The average partition page utilization over the last interval of + all partitions in the pool / the partition's page utilization over the + last interval + B: The partition's weight/average partition weight of all + partitions in the pool + If A > B Increase the partition's donation by 1/256 of the + partition's logical address space (limited to the partition’s + logical address size) + If A < B Reduce the partition's donation by 1/256 of the + partition's logical address space provided that the summation of all + donations >= Overage. + The hypervisor maintains a per partition count of loaned pages + (incremented when a page is removed from the PFT with a + “loaned” state and decremented when/if the page state is + changed) thus it can keep track of how well a partition is doing against + the donation request that has been made of it. Partitions that do not + respond to donation requests need + to have their pages stolen to make up the difference. Pages that + are “unused” or “loaned” are automatically + applied to the free list. “Loaned” pages are expected to + raise the partition's free list low water mark so that the OS only + reclaims them in a transient situation which will then result in the OS + paging out some of its own virtual memory to restore the total donation + in the steady state. When the platform free list gets to the low water + mark, pages are expropriated starting with the partition that has the + greatest percentage discrepancy between its loaned plus expropriated + count and is donation tax. The algorithm used is implementation + dependent. The following is given for reference and is loosely based upon + the AIX method. + + + + For this algorithm, pages that are newly restored are marked as + “referenced” and all “unused” have already been + harvested + + + + Step through the partition logical address space until either + the hypervisor free list has gotten to its high water mark or the + partition has been taxed to its donation. + + + + If the page is I/O mapped and not expropriatable, continue to + the next page. + + + + If this is the first pass through the address space on this + harvest, and the page is marked critical, continue to the next + page. + + + + If the page is marked “referenced”, clear the + reference bit and continue to the next page. + + + + If the page is backed in the VPM paging space and not modified + since then, expropriate the page and continue to the next page. + + + + Queue the page to be copied into the VPM paging space. + + + + + + Thus partitions that keep up with their page donations seldom, if + ever, experience a hypervisor page in delay. Those that do not keep up, + will not get a free lunch and will be taxed up to the value of their + assigned donation, with the real possibility that they will experience + the pain of hypervisor page in delays. +
+ +
+ CMO Page Usage States + The CMO option defines a number of page states that are set by the + cooperating OS using the flags parameter of the HPT hcall()s. The + platform uses these page states to estimate the overhead associated with + expropriating the specific page. + + Note: that the first two definitions below represent + base background page states; the 3rd definition is the foreground state + of I/O mapped which is acquired as result of an I/O mapping hcall (such + as H_PUT_TCE); and the last two are caller specifiable state + modifiers/extended semantics of the base states. + + + + Unused + + The page contains no information that is needed in + the future, its contents need not be maintained by the platform, normally + set only when the page is unmapped. + Expropriation of “Unused” pages should be a low + overhead operation. However, the OS is likely to reuse these pages + which means that a clean free page will have to be assigned to the + corresponding logical address. + + + + + + Active + + The page retains data that the OS has no + reasonable way to regenerate. This is the state traditionally assumed by + the OS when mapping a page. + “Active” pages should be expropriated only as a last + resort since they must be paged out and paged back in on a subsequent + access. + + + + + + I/O Mapped + + The page is mapped for access by another + agent. This state is the side effect of registration and/or I/O mapping + functions. The page returns to its background state automatically when + unmapped or deregistered. + Pages in the I/O Mapped state normally may not be expropriated + since they are potentially the target of physical DMA + operations. + + + + + + Critical + + The page is critical to the performance of the + OS, and the hypervisor should avoid expropriating such pages while other + pages are available. + Expropriating pages marked “Critical” may result in + the OS being unable to meet its performance goals. + + + + + + Loaned + + The page contains no information and the OS + warrants that it will not gratuitously access this page such that the + hypervisor may expect to use it for an extended period of time. When the + OS does access the page, it is likely that the access will result in a + subvention delay. + Expropriating pages in the “Loaned” state should + result in the lowest overhead. + + + + + + + + R1--1. + + For the CMO option: The platform must at partition + boot initialize the page usage state of all platform pages to + “Active”. + + + + + R1--2. + + For the CMO option: The platform must preserve data + in pages that are in the “Active” state. + + + + + R1--3. + + For the CMO option: When the OS accesses a page in + the “Unused” state, the platform must present either the + preserved page data or all zeros. + + + + + R1--4. + + For the CMO option: When the OS specifies as input to + an I/O mapping or the H_MIGRATE_DMA hcall() a page in either the + “Unused” or “Loaned” states, the platform must + upgrade the page’s background page state to + “Active”. + + + + +
+ Setting CMO Page Usage States using HPT hcall() flags + Parameter + The CMO option defines additional flags parameter combinations for + the HPT hcall()s that take a flags parameter. Turning on flags bit 28 + activates the changing of page state. Leaving bit 28 at the legacy value + of zero maintains the page state setting, thus allowing legacy code to + operate unmodified with all pages remaining in the initialized + “Active” state. + + + + R1--1. + + For the CMO option: The platform must extend the + syntax and semantics of the HPT access hcall()s that take a flags + parameter, see + , to set the page usage state + of the specified page per + . + + + + + + HPT hcall()s extended with CMO flags + + + + + + + + hcall + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + CMO Page Usage State flags Definition + + + + + + + + + + + Flag bit 28 + + + + + Flag bits 29 - 30 + + + + + Flag bit 31 + + + + + Comments + + + + + + + + 0 + + + Don’t Care + + + Don’t Care + + + Inhibit Page State Change + + + + + 1 + + + 00 + + + 0 + + + Set page state to Active + + + + + 00 + + + 1 + + + Set page State to Active Critical + + + + + 01 + + + both 0 and 1 + + + Reserved + + + + + 10 + + + both 0 and 1 + + + Reserved + + + + + 11 + + + 0 + + + Set page state to Unused + + + + + 11 + + + 1 + + + Set page state to Unused Loaned + + + + +
+
+ +
+ Setting CMO Page Usage States with H_BULK_REMOVE + + + + R1--1. + + For the CMO option: The platform must extend the + syntax and semantics of the H_BULK_REMOVE hcall (see + ) to set the page usage state + of the specified pages per + . + + + + + + H_BULK_REMOVE Translation Specifier control/status + Byte Extended Definition for CMO Option + + + + + + + + + + + + + + + 0 + + + + + 1 + + + + + 2 + + + + + 3 + + + + + 4 + + + + + 5 + + + + + 6 + + + + + 7 + + + + + Bit Numbers + + + + + + + + type code + + +   + + + + + 0 + + + 0 + + + r0 + + + r0 + + + r0 + + + r0 + + + r0 + + + r0 + + + Unused + + + + +   + + + + + 0 + + + 1 + + + + page state + + + + r0 + + + r0 + + + req. mod. + + + Request + + + + +   + + +   + + +   + + + 0 + + + 0 + + + Absolute + + + + + 0 + + + 1 + + + andcon + + + + + 1 + + + 0 + + + APVN + + + + + 1 + + + 1 + + + not used + + + + + + 0 + + + + + 0 + + + + + Inhibit page usage state change + + + + + + + 0 + + + + + 1 + + + + + Reserved + + + + + + + 1 + + + + + 0 + + + + + For CMO option set page usage state to + “Unused” if Success + + + + + + + 1 + + + + + 1 + + + + + For CMO option set page usage state to + “Loaned” if Success + + + + + +   + + + + + 1 + + + 0 + + + return code + + + Response + + + + +   + + + 0 + + + 0 + + + R + + + C + + + r + + + r + + + Success + + + + + 0 + + + 1 + + + r + + + r + + + Not Found + + + + + 1 + + + 0 + + + H_PARM + + + + + 1 + + + 1 + + + H_HW + + + + +   + + + + + 1 + + + 1 + + + Reserved (to be zero) + + + End of String + + + + + Legion R=Reference Bit, C=Change Bit, r=reserved ignore, + r0=reserved to be zero + + + + +
+
+
+ +
+ CMO Extensions for I/O Mapping Hcall()s + If an OS were to map an excessive amount of its memory for + potential physical DMA access, little of its memory would be left for + paging; conversely, if the OS was totally prevented from I/O mapping its + memory, it could not do I/O operations. The CMO option introduces the + concept of memory entitlement. The partition’s memory entitlement + is the amount of memory that the platform guarantees that the partition + is able to I/O map at any given time. A given page may be mapped multiple + times through different LIOBNs yet it only counts once against the + partition’s I/O mapping memory entitlement. The syntax of certain + I/O mapping hcall()s is extended to return the change in the + partition’s I/O mapped memory total. The entitlement is intended to + be used to ensure forward progress of I/O operations. + + + + R1--1. + + For the CMO option: When the partition is operating + in CMO mode, the platform must extend the syntax and semantics of the I/O + mapping hcall()s specified in + as per the specifications in + and + . + + + + + + I/O Mapping hcall()s Modified by the CMO + Option. + + + + + + + + + hcall() + + + + + Base Definition on + + + + + + + + H_PUT_TCE + + + + + + + + + + H_STUFF_TCE + + + + + + + + + + H_PUT_TCE_INDIRECT + + + + + + + + + +
+ + Note: The I/O mapping hcalls H_PUT_RTCE and + H_PUT_RTCE_INDIRECT do not change the number of pages that are I/O mapped + since they simply create copies of the I/O mappings that already + exist. + +
+ CMO I/O Mapping Extended Return Codes + + + + R1--1. + + For the CMO option: The platform must ensure that the + DMA agent operating through the I/O mappings established by the hcall()s + specified in + can appear to successfully + access the associated page data of any expropriated page referenced by + the input parameters of the hcall() prior to returning the code + H_Success. + + + + + R1--2. + + For the CMO option: The platform must either extend + the return code set for the hcall()s specified in + to include H_LongBusyOrder1msec + and/or H_LongBusyOrder10msec or transparently suspend the calling virtual + processor for cases where the function is delayed pending the restoration + of an expropriated page. + + + + + R1--3. + + For the CMO option: The platform must extend the + return code set for the hcall()s specified in + to include + H_NOT_ENOUGH_RESOURCES for cases where the function would cause more + memory to be I/O mapped than the caller is entitled to I/O map and the + platform is incapable of honoring the request. + + + + +
+ +
+ CMO I/O Mapping Extended Return Parameter + The syntax and semantics of the hcall()s in + are extended when the partition + is operating in CMO mode by returning in register R4 the change in the + partition’s total number of I/O mapped memory bytes due to the + execution of the hcall(). The number may be positive (increase in the + amount of memory mapped) negative or zero (the page was/remains mapped + for I/O access by another agent). + + + + R1--1. + + For the CMO option: The platform must extend the + syntax and semantics of the hcall()s specified in + when operating in CMO mode, to + return in register R4 the change to the total number of bytes that were + I/O mapped due to the hcall(). + + + +
+
+ +
+ H_SET_MPP + This hcall() sets, within limits, the partition’s memory + performance parameters. If the request parameter exceeds the constraint + of the calling LPAR’s environment, the hypervisor limits the value + set to the constrained value and returns H_Constrained. The memory weight + is architecturally constrained to be within the range of 0-255. + + + Syntax: + + + + + + + Semantics: + + + + Verify that the memory performance parameters specified are + within the constraints of the partition: + + + + If yes, atomically set the partition’s memory performance + parameters per the request and return H_Success. + + + + If not, set the partition’s memory performance parameters + as constrained by the partition’s configuration and return + H_Constrained. + + + + + + + + R1--1. + + For the CMO option: The platform must initially set + the partition memory performance parameters to their configured maximums + at partition boot time. + + + + + R1--2. + + For the CMO option: The platform must implement the + H_SET_MPP hcall() following the syntax and semantics of + . + + + + + R1--3. + + For the CMO option: The platform must constrain the + partition memory weight to the range 0-255. + + + + +
+ +
+ H_GET_MPP + This hcall() reports the partition’s memory performance + parameters. The returned parameters are packed into registers. + +
+ Command Overview + + + Syntax: + + + + + + + Semantics: + + + + Place the partition’s memory performance parameters for the + calling virtual processor’s partition into the respective + registers: + + + + R4: The number of bytes of main storage that the calling + partition is entitled to I/O map. In the case of a dedicated memory + partition this shall be the size of the partition’s logical address + space. + + + + R5: The number of bytes of main storage that the calling + partition has I/O mapped. In the case of a dedicated memory partition + this is not applicable which is represented by the code -1. + + + + R6: The calling partition’s virtual partition memory + aggregation identifier numbers, up to 4 levels: + + + + Bytes 0-1: Reserved for future aggregation definition, and set to + zero -- in the future this field may be given meaning. + + + + Bytes 2-3: Reserved for future aggregation definition, and set to + zero -- in the future this field may be given meaning. + + + + Bytes 4-5: 16 bit binary representation of the “Group + Number”. + + + + Bytes 6-7: 16 bit binary representation of the “Pool + Number”. In the case of a dedicated memory partition the + “Pool Number” is not applicable which is represented by the + code 0xFFFF. + + + + + + R7: Collection of short memory performance parameters for the + calling partition: + + + + Byte 0: Memory weight (0-255). In the case of a dedicated + processor partition this is not applicable which is represented by the + code 0. + + + + Byte 1: Unallocated memory weight for the calling + partition’s aggregation. + + + + Bytes 2-7: Unallocated I/O mapping entitlement for the calling + partition’s aggregation divided by 4096. + + + + + + R8: The calling partition’s memory pool main storage size + in bytes. In the case of a dedicated processor partition this is not + applicable which is represented by the code -1. + + + + R9: The signed difference between the number of bytes of logical + storage that are currently on loan from the calling partition and the + partition’s overage allotment (a positive number indicates a + request to the partition to loan the indicated number of bytes else they + will be expropriated as needed). + + + + R10: The number of bytes of main storage that is backing the + partition logical address space. In the case of a dedicated processor + partition this is the size of the partition’s logical address + space. + + + + Return H_Success. + + + + + + + + R1--1. + + For the CMO option: The platform must implement the + H_GET_MPP hcall() following the syntax and semantics of + . + + + + +
+ +
+ H_GET_MPP_X + This hcall() provides additional information over and above (not + duplication of) that which is returned by the H_GET_MPP hcall() + . The syntax of this hcall() is + specifically designed to be seamlessly extensible and version to version + compatible both from the view of the caller and the called on an + invocation by invocation basis. To this end, all return registers (R3 + (return code) through R10) are defined from the outset, some are defined + as reserved and are set to zero upon return by the hcall(). The caller is + explicitly prohibited from assuming that any reserved register contains + the value zero, so that there will be no incompatibility with future + versions of the hcall() that return non-zero values in those registers. + New definitions for returned values will define the value zero to + indicate a benign or unreported setting. + + + Syntax: + + + + + + + Semantics: + + + + Place the partition’s extended memory performance + parameters for the calling virtual processor’s partition into the + respective registers: + + + + R4: The number of bytes of the calling partition’s logical + real memory coalesced because they contained duplicated data. + + + + R5: If the calling partition is authorized to see pool wide + statistics (set by means that are beyond the scope of LoPAR) then The + number of bytes of logical real memory coalesced because they contained + duplicated data in the calling partition’s memory pool else set to + zero. + + + + R6:: If the calling partition is authorized to see pool wide + statistics (set by means that are beyond the scope of LoPAR) then PURR + cycles consumed to coalesce data else set to zero. + + + + R7: If the calling partition is authorized to see pool wide + statistics (set by means that are beyond the scope of LoPAR) then SPURR + cycles consumed to coalesce data else set to zero. + + + + R8: Reserved shall be set to zero - shall not be read by + the caller + + + + R9: Reserved shall be set to zero - shall not be read by + the caller + + + + R10: Reserved shall be set to zero - shall not be read by + the caller + + + + + + Return H_Success: + + + + + + R1--1. + + For the XCMO option: If the platform coalesces memory + pages that contain duplicated data it must implement the H_GET_MPP_X + hcall() following the syntax and semantics of + . + + + + + R1--2. + + For the XCMO option: the caller must be prepared for + H_GET_MPP_X to return H_Function or to have a return parameter that was + previously non-zero be consistently returned with the value zero if the + caller wishes to operate properly in a partition migration or fail-over + environment. + + + + +
+
+ +
+ Restoration Failure Interrupt + + + + R1--1. + + For the CMO option: When the platform experiences an + unrecoverable error restoring the association of a physical page with an + expropriated logical page following an attempted access of the + expropriated page by the partition, the platform must signal a Machine + Check Interrupt by returning to the partition’s interrupt vector at + location 0x0200. Note the subsequent firmware assisted NMI and check + exception processing returns a VPM SUE error log (See + ). + + + +
+ +
+ H_MO_PERF + This hcall() applies an artificial memory over-commitment to the + specified pool while monitoring the pool performance for overload, + removing the applied over-commitment if an overload trigger point is + reached. The overload trigger point is designed to double as a dead man + switch, eventually ending the over-commitment condition should the + experiment terminate ungracefully. Only the partition that is authorized + to run platform diagnostics is authorized to make this call. + + + Syntax: + + + + + + + Semantics: + This description is based upon the architectural model of + , and must be adjusted to + achieve the intent for the specific implementation. + + + + Validate that the caller has the required authority; else return + H_AUTHORITY. + + + + Validate that the pool parameter references an active memory pool + else; return H_Parameter. + + + + Raise the pool’s free list low water mark above its base + value by the signed amount in the mem parameter. (The result is + constrained to not less than the base low water mark value and no more + then the amount of memory in the pool.) + + + + Change the permissible pool memory low event counter by the + signed value of the lows parameter. + + + + Return in R4 the accumulated rise in the pool’s free list + low water mark above its base value. + + + + Return in R5 the current value of the permissible pool memory low + event counter. + + + + On each subsequent low memory event (page allocation where the + free list is at or below the low water mark), the permissible pool memory + low event counter is decremented. Should the counter ever reach zero, the + pool’s free list low water mark is returned to its base + value. + + + +
+ +
+ Expropriation/Subvention Notification Option + + The Expropriation/Subvention Notification Option (ESN) sub option + of the CMO option allows implementing platforms to notify supporting + OS’s of delays due to their access of an expropriated VPM page + (such as would be experienced during a “page in” operation). + With an expropriation notification, the OS may block the affected process + and dispatch another rather than having the platform block the virtual + processor that happened to be running the affected process. An + expropriation notification is paired with a subsequent subvention + notification signaled when the original access succeeds. Additionally new + page states allow the OS to indicate pages that it can restore itself, + thus relieving the platform from the burden of making copies of those + pages when they are expropriated and potentially side stepping the + “double paging problem” wherein the platform pages in a page + in response to a touch operation in preparation for an OS page in only to + have the OS immediately discard the page data without looking at + it. + The ESN option includes the following LoPAR extensions: + + + + Define augmented CMO page states + + + + Define the per partition Subvention Notification Structure + (SNS) + + + + Define H_REG_SNS hcall() to register the SNS + + + + Define Expropriation Notification field definitions within the + VPA + + + + Define expropriation and subvention event interrupts. + + + + + + R1--1. + + For the ESN option: The partition must be running + under the CMO option. + + + + + R1--2. + + For the ESN option: The platform must ignore/disable + all other ESN option functions and features unless the OS has + successfully registered the Subvention Notification Structure via the + H_REG_SNS hcall. See + for details. + + + + +
+ ESN Augmentation of CMO Page Usage States + The ESN option augments the set of page states defined by the CMO + option that are set by the cooperating OS using the flags parameter of + the HPT hcall()s. The platform uses these page states to estimate the + overhead associated with expropriating the specific page. + + Active- An Expropriation notification on this + type of page allows the OS to put the using process to sleep, until the + page is restored, as signaled by a corresponding subvention notification, + at which time the affected instruction is retried. + + Expendable- the page retains data that the OS + can regenerate, for example, a text page that is backed up on disk; + usually the page is mapped read only. A reflected expropriation + notification on this type of page requires the OS to restore the page + - thus the platform presents somewhat different interrupt status + from that used by an Active page. + Expropriating an “Expendable” page should result in + lower overhead than expropriating an “Active” page since + the contents need not be paged out before the page is reused. + + An Expendable page that is Bolted while not illegal has to be + treated as an “Active” page since an access to a Bolted + page may not result in an expropriation notification. + + + Latent- the page contains data that the OS can + regenerate unless the contents have been modified - at which time + the page state appears to be “Active”, this is similar to + “Expendable” for pages mapped read/write. For example, a page + of a mapped file. Expropriation Notification is like “Active” + or “Expendable” above. + + Loaned- When the OS does access the page, it + is likely that the access will result in an expropriation + notification + + + ESN Augmentation of CMO Page Usage State flags + Definition + + + + + + + + + + + Flag bit 28 + + + + + Flag bits 29 - 30 + + + + + Flag bit 31 + + + + + Comments + + + + + + + + 1 + + + 01 + + + 0 + + + Set page state to Latent + Note: If Expropriation Notification is disabled, or the + bolted bit (HPT bit 59) is set to 1, the page state to Active + (Active Critical if flag bit 31=1). + + + + + + 01 + + + 1 + + + Set page State to Latent Critical + + + + + 10 + + + 0 + + + Set page state to Expendable + + + + + 10 + + + 1 + + + Set page state to Expendable Critical + + + + +
+
+ +
+ Expropriation Notification + Under the ESN option, notice of an attempt to access an + expropriated page is given when the Expropriation Interrupt is enabled in + the virtual processor VPA. Additionally the virtual processor VPA + Expropriation Correlation Number and Expropriation Flags fields are set + to allow the affected program to determine when the access may succeed + and if the program needs to restore data to the Subvened page, see + details in + . Once the VPA has been + updated, the platform presents an Expropriation Fault interrupt to the + affected virtual processor see details in + . + +
+ ESN VPA Fields + + + + R1--1. + + For the ESN + option: The platform must support the VPA field definitions of + , + , and + . + + + + + + VPA Byte Offset 0xB9 + + + + + + + + + + + + + + + + 0 + + + + + 1 + + + + + 2 + + + + + 3 + + + + + 4 + + + + + 5 + + + + + 6 + + + + + 7 + + + + + Bit Number + + + + + + + + Reserved (0) + + +   + + + 0 + + + Dedicated processor cycle donation inhibited + + + + +   + + + 1 + + + Dedicated processor cycle donation enabled + + + + + 0 + + +   + + + Expropriation interrupt disabled + + + + + 1 + + +   + + + Expropriation interrupt enabled + + + + +
+   + + Firmware Written VPA Starting at Byte Offset + 0x178 + + + + + + + + + + + + + + 0x178 F + + + + + 0x179 + + + + + 0x17A + + + + + 0x17B + + + + + 0x17C + + + + + 0x17D + + + + + 0x17E + + + + + 0x17 + + + + + + + + Reserved for firmware locks + + + Reserved + + +   + + + Expropriation Correlation + Number Field + + + + + Expropriation Flags -- See + . + + + + +
+ + Note: The Expropriation Flags and Expropriation + Correlation Number Fields are volatile with respect to Expropriation + Notifications thus it should be saved by the OS before executing any + instruction that may access unbolted pages. + + + Expropriation Flags at VPA Byte Offset 0x17D + + + + + + + + + + + + + + + + 0 + + + + + 1 + + + + + 2 + + + + + 3 + + + + + 4 + + + + + 5 + + + + + 6 + + + + + 7 + + + + + Bit Number + + + + + + + + Reserved (0) + + + 0 + + + The Subvened page data is/will be zero + + + + + 1 + + + The Subvened page data will be restored. + + + + +
+
+ +
+ Expropriation Interrupt + When the platform is running with real memory over-commitment, + eventually a partition virtual processor will access a stolen page. The + transparent solution is to block the virtual processor until the platform + has restored the page. By enabling the Expropriation Interrupt via the + Expropriation Interrupt Enable field of the VPA (see + ) the cooperating OS indicates + that it is prepared to make use of its virtual processors for other + purposes during the page restoration and/or restore the contents of + “expendable” and unmodified “latent” + pages. + + + + R1--1. + + For the ESN option: When the partition accesses an + expropriated page and either the page was bolted (PTE bit 59=1) or the + Expropriation Interrupt Enable bit of the affected virtual + processor’s VPA is off see + , then the platform must + recover the page transparently without an Expropriation Interrupt. + + + + + R1--2. + + For the ESN option: + When the partition accesses an expropriated page and the summation of the + partition’s in use subvention event queue entries plus outstanding + subvention events is equal to or greater than the size of the + partition’s subvention event queue, the platform must recover the + page prior to issuing any associated Expropriation Interrupt. + + Note: Requirement + prevents the overflow of the + subvention queue. + + + + + R1--3. + + For the ESN option: When the partition accesses an + expropriated “Unused” or “Expendable” page, the + platform must, unless prevented by + , set bit 7 of the affected + processor’s Expropriation Flags VPA byte (see + ) to 0b0; else the platform + must set the bit to 0b1. + + + + + R1--4. + + For the ESN option: When the partition accesses an + expropriated page and the platform associates a physical page with the + logical page prior to returning control to the affected virtual + processor, the platform must, unless prevented by + , set the Expropriation + Correlation Number field of the affected virtual processor’s VPA to + 0x0000 (see + ). + + + + + R1--5. + + For the ESN option: When the partition accesses an + expropriated page, the platform is not prevented by + , does not associate a physical + page with the logical page prior to returning control to the affected + virtual processor, and the restoration of the logical page has NOT + previously been reported to the OS with an expropriation notification, + the platform must, set the Expropriation Correlation Number field of the + VPA to a non-zero unique value for all outstanding recovering pages for + the affected partition. + + + + + R1--6. + + For the ESN option: When the partition accesses an + expropriated page, the platform is not prevented by + , does not associate a physical + page with the logical page prior to returning control to the affected + virtual processor, and the restoration of the logical page has previously + been reported to the OS with an expropriation notification, the platform + must set the Expropriation Correlation Number field of the VPA to the + same value as was supplied with the previous expropriation notification + event associated with the outstanding recovering page for the affected + partition. + + + + + R1--7. + + For the ESN option: When the partition performs an + instruction fetch from an expropriated page, the platform must, unless + prevented by + , signal the affected virtual + processor with an Expropriation Interrupt by returning to the affected + virtual processor’s interrupt vector at location 0x0400 with the + processor’s MSR, SRR0 and SRR1 registers set as if the instruction + fetch had experienced a translation fault type of Instruction Storage + Interrupt except that SRR1 bit 46 (Trap) is set to a one. + + + + + R1--8. + + For the ESN option: When the partition performs a + load or store instruction that accesses an expropriated page, the + platform must, unless prevented by + , signal the affected virtual + processor with an Expropriation Interrupt by returning to the affected + virtual processor’s interrupt vector at location 0x0300 with the + processor’s MSR, DSISR, DAR, SRR0 and SRR1 registers set as if the + storage access had experienced a translation fault type of Data Storage + Interrupt except that SRR1 bit 46 (Trap) is set to a one. + + + + +
+
+ +
+ ESN Subvention Event Notification + ESN uses an event queue within the Subvention Notification + Structure (SNS) to notify the OS of page subvention operations. + Subvention events have a two byte SNS-EQ entry which has the value of the + expropriation correlation number from the associated expropriation + notification event + + + + R1--1. + + For the ESN option: The platform must implement the + structures, syntax and semantics described in + , + , and + . + + + + + +
+ SNS Memory Area + + + + R1--1. + + For the ESN option: The platform + must support the 4K byte aligned SNS not spanning its page boundary + defined by + . + + + + + + Subvention Notification Structure + + + + + + + + + + + Access + + + + + Offset + + + + + Usage + + + + + + + + Written by OS Read by Hypervisor + + + 0x00 + + + Bit + + + Notification Control + + + + + 0 + + + Notification Trigger + + + + + 1-7 + + + Reserved + + + + + Written by Hypervisor Read by OS + + + 0x01 + + + Bit + + + Event Queue State + + + + + 0 + + + 0 = Operational + 1 = Overflow + + + + + 1-7 + + + Reserved + + + + + Set to non-zero by Hypervisor Read and cleared to zero by + OS + + + 0x02-0x02 + + + First SNS EQ Entry + + + + + . + . + . + + + + + (SNS Length -2) - SNS Length - 1) + + + Last SNS EQ Entry + + + + +
+
+ +
+ SNS Registration (H_REG_SNS) + + + Syntax: + + + + + + + Semantics: + + + + If the Address parameter is -1 then deregister any previously + registered SNS for the partition, disable ESN functions and return + H_Success. (Care is required on the part of the OS not to create any + Restoration Paradox Failures prior to registering a new SNS. See + for details.) + + + + If the Shared Logical Resource option is implemented and the + Address parameter represents a shared logical resource that has been + rescinded, then return H_RESCINDED. + + + + If the Address parameter is not 4K aligned in the valid logical + address space of the caller, then return H_Parameter. + + + + If the Length parameter is less than 256 or the Address plus + Length spans the page boundary of the page containing the starting + logical address, then return H_P2. + + + + Register the SNS structure for the calling partition by saving + the partition specific information: + + + + Record the SNS starting address + + + + Record the SNS ending address + + + + Record the next EQ entry to fill address (SNS starting address + +2) + + + + Set the SNS interrupt toggle = SNS Notification Trigger + + + + Set the SNS Event Queue State to “Operational” + + + + + + + + Return: + + + + R3: H_Success + + + + R4: Value to be passed in the “unit address” + parameter of the H_VIO_SIGNAL hcall() to enable/disable the virtual + interrupt associated with the transition of the SNS from empty to + non-empty. + + + + R5: Interrupt source number associated with the SNS empty to + non-empty virtual interrupt. + + + + +
+ +
+ SNS Event Processing + The following sequence is used by the platform to post an SNS + event. The SNS-EQ used corresponds to the EEN event type. This sequence + refers to fields described in + . + + + + If the SNS EQ overflow state is set, exit. + /* An EQ overflow drops all new events until software recovers the + EQ*/ + + + + Using atomic update protocol, store the event identifier into + the location indicated by the SNS next EQ entry to fill pointer if the + original contents of the location were zero; else set the associated EQ + overflow state and exit. + /* The value of zero is reserved for an unused entry -- an EQ + overflow drops the new event */ + + + + Increment the SNS next EQ entry to fill pointer by the size of + the EQ entry (2) modulo the size of the EQ + /* Adjust fill pointer */ + + + + If the SNS interrupt toggle = SNS Notification Trigger then + exit. + /* Exit on no event queue transition */ + + + + Invert the SNS interrupt toggle. + /* Remember event queue transition */ + + + + If the SNS interrupt is enabled, signal a virtual interrupt to + the associated partition. + /* Signal transition when enabled */ + + +
+ +
+ ESN Interrupts + The ESN option may generate several interrupts to the partition OS. + Defined in this section are those in addition to the Expropriation + Notification interrupts defined above. + +
+ Subvention Notification Queue Transition + Interrupt + + + + R1--1. + + For the ESN option: When the + platform has restored the association of a physical page with the logical + page that caused an Expropriation Notification interrupt with a non-zero + Expropriation Correlation Number, the platform must post the + corresponding Expropriation Correlation Number to the Subvention Event + Queue see + . + + + +
+ +
+ Restoration Paradox Failure + Restoration Paradox Failures result in an unrecoverable memory + failure machine check. + + + + R1--1. + + For the ESN option: When the platform finds that + Expropriation Notification has been disabled after it has discarded the + contents of an “Expendable” page, it must treat any access to + such a page as an unrecoverable error restoring the association of a + physical page with the expropriated logical page. + + + +
+
+
+
+
+ +
+ Virtual Partition Memory Pool Statistics Function + Set + The hcall-vpm-pstat function set may be configured via the + partition definition in none or any number of partitions as the VPM + administrative policy dictates. + +
+ H_VPM_PSTAT + This hcall() returns statistics on the physical shared memory pool. + Since these statistics can be manipulated by the processing of a single + partition, there is a risk of creating a covert channel through this + call. To mitigate this risk, the call is contained in a separate function + set that can be protected by authorization methods outside the scope of + LoPAR. + + + Syntax: + + + + + + + Parameters: + + + + Input: None + + + + Output: + + + + R4: Total VM Pool Page Faults + + + + R5: Total Page Fault Wait Time (Time Base Ticks) + + + + R7: Total Pool Physical Memory + + + + R8: Total Pool Physical Memory that is I/O mapped + + + + R9: Total Logical Real Memory that is Virtualized by the VM + Pool + + + + + + + + Semantics: + + + + Verify that calling partition has the authority to make the call + else return H_Authority. + + + + Report the statistics for the memory pool used to instantiate the + virtual real memory of the calling partition. + + + + Place in R4 the summation of the virtual partition memory page + faults against the memory pool since the initialization of the + pool. + + + + Place in R5 the summation of timebase ticks spent waiting for the + page faults indicated in R4. + + + + Place in R6 the total amount of physical memory in the memory + pool. + + + + Place in R7 the summation of the entitlement of all active + partitions served by the memory pool. + + + + Place in R8 the summation of the I/O mapped memory of all active + partition served by the memory pool. + + + + Place in R9 the summation of the logical real memory of all + active partitions served by the memory pool. + + + + + + Return H_Success. + + + +
+
+
+ +
+ Logical Partition Control Modes + Selected logical partition control modes may be modified by the + client program. + +
+ Secondary Page Table Entry Group (PTEG) Search + The page table search algorithm, described by the + , consists of searching for a + Page Table Entry (PTE) in up to two PTEGs. The first PTEG searched is the + “primary PTEG”. If a PTE match does not occur in the primary + PTEG, the hardware may search the “secondary PTEG”. If a PTE + match is not found in the searched PTEGs, the hardware signals a + translation exception. + Code is not required to place any PTEs in secondary PTEGs. + Therefore, if a PTE match does not occur in a primary PTEG there is no + need for the hardware to search a secondary PTEG to determine that a + search has failed. The “Secondary Page Table Entry Group” bit + of + “ibm,client-architecture-support” allows + code to indicate that there is no need to search secondary PTEGs to + determine that a PTE search has failed. +
+
+ +
+ Partition Energy Management Option (PEM) + This section describes the functional interfaces that are available + to assist the partition Operating System optimize trade offs between energy + consumption and performance requirements. + +
+ Long Term Processor Cede + To enable the hypervisor to effectively reduce the power draw from + unused partition processors, the concept of cede wakeup latency is + introduced with the Partition Energy Management Option. A one byte cede + latency specifier VPA field communicates the maximum latency class that + the OS can tolerate on wakeup from H_CEDE. In general the longer the + wakeup latency the greater the savings that can be made in power drawn by + the processor during a cede operation. However, due to implementation + restrictions, the platform might be unable to take full advantage of the + latency that the OS can tolerate thus the cede latency specifier is + considered a hint to the platform rather than a command. The platform may + not exceed the latency state specified by the OS. Calling H_CEDE + , with value of the cede + latency specifier set to zero denotes classic H_CEDE behavior. Calling + H_CEDE with the value of the cede latency specifier set greater than zero + allows the processor timer facility to be disabled (so as not to cause + gratuitous wake-ups - the use of H_PROD, or other external + interrupt is required to wake the processor in this case). An External + interrupt might not awake the ceded process at some of the higher (above + the value 1) cede latency specifier settings. Platforms that implement + cede latency specifier settings greater than the value of 1 implement the + cede latency settings system parameter see + . The hypervisor is then free to take energy + management actions with this hint in mind. + + + + R1--1. + + For the PEM option: The platform must honor the OS + set cede latency specifier value per the definition of + . + + + + + R1--2. + + For the PEM option: The platform must map any OS set + cede latency specifier value into one of its implemented values that does + not exceed the latency class set by the OS. + + + + + R1--3. + + For the PEM option: The platform must implement the + cede latency specifier values of 0 and 1 per + . + + + + + R1--4. + + For the PEM option: If the platform implements cede + latency specifier values greater than 1 it must implement the cede + latency settings values sequentially without holes. + + + + + R1--5. + + For the PEM option: If the platform implements cede + latency specifier values greater than 1 each sequential cede latency + settings value must represent a cede wake up latency not less than its + predecessor, and no less restrictive than its predecessor. + + + + + R1--6. + + For the PEM option: If the platform implements cede + latency specifier values greater than 1 it must implement the cede + latency settings system parameter see + . + + + +
+ +
+ H_GET_EM_PARMS + This hcall() returns the partition’s energy management + parameters. The return parameters are packed into registers. + Programming Note: On platforms that implement the + partition migration option, after partition migration: + + + + The support for this hcall() might change, the caller should be + prepared to receive an H_Function return code indicating the platform + does not implement this hcall(). + + + + Fields that were defined as “reserved” might contain + data; calling code should be tested to ensure that it ignores fields + defined as “reserved” at the time of its design, and that it + operates properly when encountering “zeroed” defined fields + that indicate that the field does not contain useful data. + + + + + Implementation Note: To aid the testing of calling + code, implementations would do well to include debug tools that seed + reserved return fields with random data. + + + Syntax: + + + + + + + Parameters: (on return) + + + + + + + + + + + +   + + + + + + + + + + + + + + Status Codes (bit offset within 2 byte field): Bits 0:5 Reserved + (zero) + + + + Bits 6:8 Energy Management major code: + + + + 0b000: Non - floor modes: + + + + Bits 9:15 Energy Management minor code: + + + + + 0x00: The energy management policy for this aggregation level is + not specified. + + + + 0x01: Maximum Performance (Energy Management enabled - + performance may exceed nominal) + + + + 0x02: Nominal Performance (Energy Management Disabled) + + + + 0x03: Static Power Saving Mode + + + + 0x04: Deterministic Performance (Energy Management enabled + - consistent performance on a given workload independent of + environmental factors and component variances) + + + + 0x05 - 0x7F Reserved + + + + + + + + 0b001: Dynamic Power Management: + + + + Bits 9:15 Performance floor as a percentage of nominal (0% - + 100%). + + + + + + 0b010:0b111 Reserved + + + + + + Implementation Note: Status Code Fields are + determined by means outside the scope of LoPAR. Platform designs may + define a hierarchy of aggregations in which lower levels by default + inherit the energy management policy of their parent. + + + + + + + + + + + + + + + Bytes 0:3 four byte Power Draw Status/Limit for the + platform + + + + Bit 0: Power Draw Limit is hard/soft: 0 = Soft, 1 = Hard + + + + Bits 1:7 Reserved. + + + + Bits 8:31 unsigned binary Power Draw Limit times 0.1 watts + + + + + + + + + + + + + + + +   + + + + + + + + + + + + + + The total processor energy consumed by the calling partition + since boot in Joules times 2**-16. The value zero indicates that the + platform does not support reporting this parameter. + + + + + + + + + + + + + + + + + The total memory energy consumed by the calling partition since + boot in Joules times 2**-16. The value zero indicates that the platform + does not support reporting this parameter. + + + + + + + + + + + + + + + + + The total I/O energy consumed by the calling partition since boot + in Joules times 2**-16. The value zero indicates that the platform does + not support reporting this parameter. + + + + + + Semantics: + + + + Place the partition’s performance parameters for the + calling virtual processor’s partition into the respective + registers: + + + + R4: Energy Management Status Codes + + + + R5: Power Draw Limits (Platform and Group) + + + + R6: Power Draw Limits (Pool and Partition) + + + + R7: Partition Processor Energy Consumption + + + + R8: Partition Memory Energy Consumption + + + + R9: Partition I/O Energy Consumption + + + + + + Return H_Success. + + + + + + R1--1. + + For the PEM option: The platform must implement the + H_GET_EMP hcall() following the syntax and semantics of + . + + + + +
+ +
+ H_BEST_ENERGY + This hcall() returns a hint to the caller as to the probable impact + toward the goal of minimal platform energy consumption for a given level + of computing capacity that would result from releasing or activating + various computing resources. The returned value is a unitless priority, + the lower the returned value; the more likely the goal will be achieved. + The accuracy of the returned hint is implementation dependent, and is + subject to change based upon actions of other partitions; thus the + implementation can only provide a “best effort” to be + “substantially correct”. Implementation dependent support for + this hcall() and supported resource codes might change during partition + suspension as in partition hibernation or migration; the client program + should be coded to gracefully handle H_Function, H_UNSUPPORTED, and + H_UNSUPPORTED_FLAG return codes. + H_BEST_ENERGY may be used in one of two modes, + “inquiry” or “ordered” specified by the setting + of bit 54 of the eflags parameter. It is intended that ordered mode be + used when the client program is largely indifferent to the specific + resource instance to be released or activated. In ordered mode, + H_BEST_ENERGY returns a list of resource instances in the order from the + best toward worst to choose to release/activate to achieve minimal energy + consumption starting with an initial resource instance in the ordered + list (if the specified initial resource is the reserved value zero the + returned list starts with the resource having the greatest probability of + minimizing energy consumption). It is intended that inquiry mode be used + when the client program wishes to compare the energy advantage of making + a resource selection from among a set of candidate resource instances. In + inquiry mode, H_BEST_ENERGY returns the unitless priority of + releasing/acquiring each of the specified resource instances. It is + expected that in the vast majority of cases, the client code will receive + data on a sufficient number of resource instances in one H_BEST_ENERGY + call to make its activate/release decision; however, in those rare cases + where more information is needed, a series of H_BEST_ENERGY calls can be + made to accumulate information on an arbitrary number of computing + resource instances. + Platforms may optionally support “buffered ordered” + return data mode. If the platform supports “buffered ordered” + return data mode, a “b” suffix appears at the end of the list + that terminates the hcall-best-energy-1 function set entry. If the + “buffered ordered” return data mode is supported the caller + may specify the “B” bit in the eflags parameter and supply in + P3 the logical address of a 4K byte aligned return buffer. + The probable effects of a given resource instance selection might + vary depending upon the intention of the client program to take other + actions. These other actions include the ability to reactivate a released + resource within a given time latency and number of resources the client + program intends to activate/release as a group. The eflags parameter to + H_BEST_ENERGY contains fields that convey hints to the platform of the + client program intentions in these areas; implementations might take + these hints into consideration as appropriate. The high order four (4) + bytes of the eflags parameter contain the unsigned required reactivation + latency in time base ticks (the reserved value of all zeros indicates an + unspecified reactivation latency). + Calling H_BEST_ENERGY with the eflags “refresh” flag + (bit 54) equal to a one causes the hypervisor to compute the relative + unitless priority value (1 being the best to activate/release with + increasing numbers being poorer choices from the perspective of potential + energy savings) for each instance of the specified resource that is owned + by the calling partition. If the hypervisor can not distinguish a + substantially different estimate for the various resource instances the + call returns H_Not_Available. If the “refresh” flag is equal + to a zero, the list as previously computed is used. Care should be + exercised when using the non-refresh version to ensure that the state of + the partition’s owned resource list has been initialized at some + point and has not changed due to resource instance activation/release + (including dynamic reconfiguration) activities by other partition threads + else the results of the H_BEST_ENERGY call are unpredictable (ranging + from inaccurate prediction values up to and including error code + responses). + The return values for H_BEST_ENERGY are passed in registers. + Following standard convention, the return code is in R3. Register R4 + contains the response count. If the call is made in “inquiry” + mode the response count equals the number of non-zero requested resource + instance entries in the call. If the call is made in + “ordered” mode, the response count contains the number of + entries in the ordered list from the first entry returned until the worst + choice entry. If the response count is <= 8 (512 for ordered buffer + mode) then the response count also indicates how many resource instances + are being reported by this call, if the response count is >8 (512 for + ordered buffer mode) then this call reports eight (512 for ordered buffer + mode) resource instances. Each response consists of three fields: bytes 0 + -- 2 are reserved, byte 3 contains the unitless priority for selecting + the indicated resource instance, and bytes 4 -- 7 contain the resource + instance identifier value corresponding to that passed in the + “ibm,my-drc-index” property. + In order to represent more accurately the significance of certain + priority values relative to others, the platform might leave holes in the + ranges of reported priority values. As an example there may be a gap of + several priority numbers between the value associated with a resource + that can be powered down versus one that can only be placed in an + intermediate energy mode, and yet again another gap to a resource that + represents a necessary but not sufficient condition for reducing energy + consumption. + + + Syntax: + + + + + + + Parameters: (on entry) + + + + + + + + + + + +   + + + + + + + + + + +   + + + + + + + + + + + + + + (on return) + + + R3: Return code + + + R4: Response Count Value <8 indicate the number of returned + values in registers starting with R5. The contents of registers after the + last returned value as indicated by the Response Count Value are + undefined. + + + R5 -- R12 Bytes 0-2 Reserved + + + Byte 3: 1 - 255 -- unitless priority value relative to + lowest total energy consumption for selecting the corresponding resource + ID. + + + Bytes 4-7 Resource instance ID to be used as input to dynamic + reconfiguration RTAS calls as would the value presented in the + “ibm,my-drc-index” property. + + + + + + Semantics: + + + + If the resource code in the eflags parameter is not supported + return H_UNSUPPORTED + + + + If other binary eflags values are not valid then return + H_UNSUPPORTED_FLAG with the specific value being (-256 - the bit + position of the highest order unsupported bit that is a one); + + + + If the eflags parameter “refresh” bit is zero and the + list has not been refreshed since the last return of H_Not_Available then + return H_Not_Available. + + + + If the eflags parameter “refresh” bit is a one + then: + + + + If energy estimates for the partition owned resources are + substantially indistinguishable then return H_Not_Available. + + + + Assign a priority value to each resource of the type specified in + the resource code owned by the calling partition relative to the probable + effect that selecting the specified resource to activate/release (per + eflags code) within the specified latency requirements would have on + achieving minimal platform energy consumption. (1 being the best + increasing values being worse - implementations may choose to use + an implementation dependent subset of the available values) + + + + Order the specified resources owned by the calling partition + starting with those having a priority value of 1; setting the resource + pointer to reference that starting resource. + + + + + + If the eflags parameter bit 54 is a one (“ordered”) + then + + + + If P2 == 0 then set pointer to best resource in ordered + list + + + + Else + + + + If P2 <> the drc-index of one of the resources in the + ordered list then return H_P2 + + + + Else set pointer to the resource corresponding to P2 + + + + + + Set R4 to the number of resources in the ordered list from the + pointer to the end + + + + If eflags “B” bit == 0b0 then /* this assumes that + the ordered buffer option is supported */: + + + + If R4 > 8 set count to 8 else set count to R4 + + + + Load “count” registers starting with R5 with the + priority value and resource IDs of the “count” resource + instances from the ordered list starting with the resource instance + referenced by “pointer”. + + + + + + Else + + + + If P3 does not contain the 4K aligned logical address of a + calling partition memory page then return H_P3 + + + + If R4 > 512 set count to 512 else set count to R4 + + + + Load “count” 8 byte memory fields starting with + logical address in R3 with the priority value and resource IDs of the + “count” resource instances from the ordered list starting + with the resource instance referenced by “pointer”. + + + + + + Return H_SUCCESS + + + + + + Else /* “inquiry” mode */ + + + + Set R4 to zero + + + + For each input parameter P2 -- P9 or until the input parameter is + zero + + + + If the input parameter Px <> the drc-index of one of the + resources in the ordered list then return H_Px + + + + Fill in byte 3 of the register containing Px with the priority + value of the resource instance corresponding to the drc-index (bytes 4 -- + 7) of the register. + + + + Increment R4 + + + + + + Return H_SUCCESS + + + + + + + + R1--1. + + For the PEM option: The platform must implement the + H_BEST_ENERGY hcall() following the syntax and semantics of + . + + + + +
+
+ +
+ Platform Facilities + This section documents the hypervisor interfaces to optional platform + facilities such as special purpose coprocessors. + +
+ H_RANDOM + If the platform supports a random number generator platform + facility the + “ibm,hypertasfunctions” property of the + /rtas node contains the function set specification + “hcall-random” and the following hcall() is supported. + + + +
+ +
+ Co-Processor Facilities + If the platform supports a co-processor platform facility the + “ibm,hypertas-functions” property of the + /rtas node contains + the function set specification “hcall-cop” and the following + hcall()s are supported. + For asynchronous coprocessor operations the caller may either + specify an interrupt source number to signal at completion or the caller + may poll the completion code in the CSB. The hypervisor and caller need + to take into account the processor storage models with explicit memory + synchronization to ensure that the rest of the return data from the + operation is visible prior to setting the CSB completion code, and that + any operation data that might have been fetched prior to the setting of + the CSB completion code is discarded. + Note: The H_MIGRATE_DMA hcall() does not handle data pages subject + to co-processor access, it is the caller’s responsibility to make + sure that outstanding co-processor operations do not target pages that + are being migrated by H_MIGRATE_DMA. + +
+ H_COP_OP: + The architectural intent of this hcall() is to initiate a + co-processor operation. Co-processor operations may complete with either + synchronous or asynchronous notification. In synchronous notification, + all platform resources associated with the operation are allocated and + released between the call to H_COP_OP and the subsequent return. In + asynchronous notification, operation associated platform resources may + remain allocated after the return from H_COP_OP, but are subsequently + recovered prior to setting the completion code in the CSB. For the + partition migration option no asynchronous notification operation may be + outstanding at the time the partition is suspended. + + + + + Syntax: + + + + Flags: + + + + Reserved (bits 0-- 38) + + + + “Rc” (bit 39) On Asymmetric Encryption operations the + “Rc” bit indicates that the high order 16 bits of the + “in” parameter contain the “Rc” field specifying + the encoded operand length while the remainder of the “in” + and “inlen” parameter bits are reserved and should be + 0b0 + + + + Notification of Operation (bits 40-- 41): + + + + 00 Synchronous: In this mode the hypervisor synchronously waits + for the coprocessor operation to complete. To preserve Interrupt service + times of the caller and quality of service for other callers, the length + of synchronous operations is restricted (see inlen parameter). + + + + 01 Reserved + + + + 10 Asynchronous: In this mode the hypervisor starts the + coprocessor operation and returns to the caller. The caller may poll for + operation completion in the CSB. + + + + 11 Async Notify: In this mode the hypervisor starts the + coprocessor operation as with the Asynchronous notification above however + the operation is flagged to generate a completion interrupt to the + interrupt source number given in the + “ibm,copint” property. When the interrupt + is signaled the caller may check the operation completion status in the + CSB. + + + + + + Interrupt descriptor index for Async Notify (bits 42-- 55) + + + + FC field: The FC field is the co-processor name specific function + code (bits 56-- 63) + + + + + + Resource identifier (bits 32-- 63(as from the + “ibm,resource-id” property)) + + + + in/inlen and out/outlen parameters: + + + + If the *len parameter is non-negative; the respective in/out + parameter is the logical real address of the start of the respective + buffer. The starting address plus the associated length may not extend + beyond the bounds of a 4K page owned by the calling partition. For + synchronous notification operations, the parameter values may not exceed + an implementation specified maximum; in some cases these are communicated + by the values of the + “ibm,maxsync-cop” property of the device + tree node that represents the co-processor to the partition. + + + + If the *len parameter is negative; the respective in/out + parameter is the logical real address of the start of a scatter/gather + list that describes the buffer with a length equal to the absolute value + of the *len parameter. The starting address of the scatter/gather list + plus the associated length may not extend beyond the bounds of a 4K page + owned by the calling partition. Further the scatter/gather list shall be + a multiple of 16 bytes in length not to exceed the value of the + “ibm,max-sg-len” property of the device tree + node that represents the coprocessor to the partition. Each 16 byte entry + in the scatter gather list consists of an 8 byte logical real address of + the start of the respective buffer segment. The starting address plus the + associated length may not extend beyond the bounds of a 4K page owned by + the calling partition. For synchronous notification operations, the + summation of the buffer segment lengths for the in scatter/gather list + may be limited; in some cases these limitations are communicated by the + value of the + “ibm,max-sync-cop” property of the device + tree node that represents the coprocessor to the partition. + + + + + + csbcpb: logical real address of the 4K naturally aligned memory + block used to house the co-processor status block and FC field dependent + co-processor parameter block. + + + + Output parameters on return + + + + R3 contains the standard hcall() return code: if the return code + is H_Success then the contents of the 4K naturally aligned page specified + by the csbspb parameter are filled from the hypervisor csb and cpb with + addresses converted from real to calling partition logical real + + + + + + + + Semantics: + + + + The hypervisor checks that the resource identifier parameter is + valid for the calling partition else returns H_RH_PARM. + + + + The hypervisor checks that for the coprocessor type specified by + the validated resource identifier parameter there are no non-zero + reserved bits within the function expansion field of the flags parameter + else returns H_UNSUPPORTED_FLAG for the highest order non-zero + unsupported flag. + + + + If the operation notification is asynchronous, check that there + are sufficient resources to initiate and track the operation else return + H_Resource. + + + + The hypervisor checks that the flag parameter notification field + is not a reserved value and FC field is valid for the specified + coprocessor type else returns H_ST_PARM + + + + If the notification field is “synchronous” the + hypervisor checks that the FC field is valid for synchronous operations + else return H_OP_MODE. + + + + The hypervisor builds the CRB CCW field per the coprocessor type + specified by the validated resource identifier parameter and by copying + the coprocessor type defined number of FC field bits from the low order + flags parameter FC field to the corresponding low order bits of CCW byte + 3. + + + + If the resource ID is an asymmetric encryption then (If the Flags + Parameter “Rc” bit is on then check the High order 16 bits of + the “in” parameter for a valid “Rc” encoding and + transfer to the CRB starting at byte 16 else return H_P2) else Validate + the inlen/in parameters and build the source DDE + + + + Verify that the “in” parameter represents a valid + logical real address within the caller’s partition else return + H_P2 + + + + If the “inlen” parameter is non-negative: + + + + Verify that the logical real address of (in + inlen) is a valid + logical real address within the same 4K page as the “in” + parameter else return H_P3. + + + + If the operation notification is synchronous verify that the + combination of parameter values request a sufficiently short operation + for synchronous operation else return H_TOO_BIG. + + + + + + If the “inlen” parameter is negative: + + + + Verify that the absolute value of inlen meet all of the follow + else return H_P3: + + + + Is <= the value of + “ibm,max-sg-len” + + + + Is an even multiple of 16 + + + + That in + the absolute value of inlen represents a valid logical + real address within the same 4K caller partition page as the in + parameter. + + + + + + Verify that each 16 byte scatter gather list entry meets all of + the following else return H_SG_LIST: + + + + Verify that the first 8 bytes represents a valid logical real + address within the caller’s partition. + + + + Verify that the logical real address represented by the sum of + the first 8 bytes and the second 8 bytes is a valid logical real address + within the same 4K byte page as the first 8 bytes. + + + + + + If the operation notification is synchronous verify that the sum + of all the scatter gather length fields (second 8 bytes of each 16 byte + entry) request a sufficiently short operation for synchronous operation + else return H_TOO_BIG. + + + + + + For the Shared Logical Resource Option if any of the memory + represented by the in/inlen parameters have been rescinded then return + H_RESCINDED. + + + + Fill in the source DDE list from the converted the in/inlen + parameters. + + + + + + Validate the outlen/out parameters and build the target + DDE + + + + Verify that the “out” parameter represents a valid + logical real address within the caller’s partition else return + H_P4 + + + + If the “outlen” parameter is non-negative verify that + the logical real address of (out + outlen) is a valid logical real + address within the same 4K page as the “out” parameter else + return H_P5. + + + + If the “outlen” parameter is negative: + + + + Verify that the absolute value of outlen meet all of the follow + else return H_P5: + + + + Is <= the value of + “ibm,max-sg-len” + + + + Is an even multiple of 16 + + + + That out + the absolute value of outlen represents a valid + logical real address within the same 4K caller partition page as the out + parameter + + + + + + Verify that each 16 byte scatter gather list entry meets all of + the following else return H_SG_LIST: + + + + Verify that the first 8 bytes represents a valid logical real + address within the caller’s partition. + + + + Verify that the logical real address represented by the sum of + the first 8 bytes and the second 8 bytes is a valid logical real address + within the same 4K page as the first 8 bytes. + + + + + + + + For the Shared Logical Resource Option if any of the memory + represented by the out/outlen parameters have been rescinded then return + H_RESCINDED. + + + + Fill in the destination DDE list from the converted the + out/outlen parameters. + + + + + + If the operation notification is asynchronous then verify that + the input and output buffers do not overlap else return H_OVERLAP (makes + the operations transparently restartable) + + + + Check that the csbcpb parameter is page aligned within the + calling address space of the calling partition else return H_P6 + + + + If the operation specifies a CPB and the specified CPB is invalid + for the operation then return H_ST_PARM. + + + + Set the CRB CSB address field & C bit to indicate a valid + CCB + + + + If the operation notification is asynchronous notify, + then: + + + + Check that the flags parameter interrupt index value is within + the defined range for the validated rid and is not currently in use for + another outstanding COP operation else return H_INTERRUPT. + + + + Set the CRB CM field to command a completion interrupt,. + + + + Set the job id field in the Co-processor Completion Block to + command the signaling via the interrupt source number contained the + interrupt specifier indicated by the interrupt index value. + + + + For the CMO option, if the number of entitlement granules pinned + for this operation causes the partition memory entitlement to be + exhausted then return H_NOT_ENOUGH_RESOURCES; else pin and record the + entitlement granules used by this operation, and increment the partition + consumed memory entitlement for the number of entitlement granules pinned + for this operation. + + + + + + Set the completion code field in the passed (via csbcpb + parameter) CSB to invalid (it is subsequently set to valid at the end of + the operation just after the rest of the contents of the 4k naturally + aligned page specified by the csbcpb parameter are filled). + + + + Issue icswx + + + + If busy response to icswx implementation dependent (may be null) + retry after backoff based upon some usage equality/priority mechanisms + else return H_Busy. + + + + If the operation notification is asynchronous then Return + H_Success + + + + Wait for completion posting in CSB (CSB valid bit. 1) + + + + The contents of the 4K naturally aligned page specified by the + csbcpb parameter are filled from the hypervisor csb and cpb with + addresses converted from real to calling partition logical real + + + + Return H_Success. + + + + +
+ +
+ H_STOP_COP_OP + The architectural intent of this hcall() is to terminate a + previously initiated co-processor operation. + + + + + Semantics: + + + + Check the rid parameter for validity for the caller else return + H_RH_PARM + + + If any reserved flags parameter bits are non zero then return + H_Parameter. + + + Check the csbcpb parameter for pointing within the caller’s + partition and 4K aligned else return H_P3 + + + For the shared logical resource option if the csbcpb parameter + references a rescinded shared logical resource then return + H_RESCINDED + + + If the csbcpb parameter is not associated with an outstanding + coprocessor operation then return H_NOT_ACTIVE. + + + Send a kill operation to the coprocessor handling the outstanding + operation + + + Wait for the outstanding kill operation to complete. + + + For the CMO option, unpin any entitlement granules still pinned + for this operation and decrement the consumed partition memory + entitlement for the number of entitlement granules pinned for this + operation. + + + Return H_Success. + + + +
+
+
+
diff --git a/Virtualization/ch_platform_hcalls.xml b/Virtualization/ch_platform_hcalls.xml new file mode 100644 index 0000000..abf23c2 --- /dev/null +++ b/Virtualization/ch_platform_hcalls.xml @@ -0,0 +1,617 @@ + + 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 + + + + + + +
+
+
+
+
diff --git a/Virtualization/ch_splpar.xml b/Virtualization/ch_splpar.xml new file mode 100644 index 0000000..444aca8 --- /dev/null +++ b/Virtualization/ch_splpar.xml @@ -0,0 +1,535 @@ + + SPLPAR Characteristics Definitions +
+ SPLPAR Characteristics Definitions + + This chapter defines the string that is returned by the + ibm,get-system-parameter RTAS call when the parameter token value of 20 + (SPLPAR Characteristics) is specified on the ibm,get-system-parameter RTAS + call as per . +
+
+ SPLPAR Terms + The LoPAR Shared Processor Logical Partition option (SPLPAR) defines + many terms as presented in + . + + + SPLPAR Terms + + + + + + + + Term + + + + + Definition + + + + + + + + Bound Threads + + + For virtual processor dispatches, if the hypervisor always + dispatches a set of virtual threads together on a physical + processor, the threads are said to be bound. This allows an + operating system to make scheduling decisions based on cache + affinity and work load. A change in this characteristic takes + effect on the next reboot of the partition. + + + + + Capacity Increment + + + This defines the delta by which the entitled capacity of a + partition can be incremented or decremented by DLPAR/WLM. The + capacity increment is expressed as a percentage of a physical + processor. A change in the capacity increment takes effect on the + next reboot of the partition. + + + + + Desired Entitled Capacity + + + The desired entitled capacity set by the system + administrator in the partition definition. The desired entitled + capacity is expressed as a percentage of a physical processor. + The desired entitled capacity can change without a reboot of the + partition. The entitled capacity that the partition is currently + using may differ from the desired entitled capacity because of + WLM actions or failed system processors. + + + + + Desired Memory + + + The desired memory set by the system administrator in the + partition definition. The desired memory is expressed in MB of + storage. The desired memory can change without a reboot of the + partition. The desired memory that the partition is currently + using may differ from the desired memory because of WLM actions + or because of failed system memory. + + + + + Desired Number of Processors + + + The desired number of virtual processors set by the system + administrator in the partition definition. The desired number of + processors can change without a reboot of the partition. The + number of processors that the partition is currently using may + differ from the desired number of processors because of WLM + actions or because of failed system processors. + + + + + Desired Variable Capacity Weight + + + The desired variable capacity weight set by the system + administrator in the partition definition. The desired variable + capacity weight is a number between 0 and 255. The desired + variable capacity weight can change without a reboot of the + partition. The variable capacity weight that the partition is + currently using may differ from the desired variable capacity + because of WLM actions. + + + + + Dispatch Wheel Rotation Period + + + The duration of the hypervisor’s scheduling window. + The time over which the entitled capacity of a virtual processor + has to be utilized by the partition. At the start of a dispatch + wheel rotation period, each virtual processor is eligible for CPU + time corresponding to its entitled capacity. If the entire + entitled capacity of a virtual processor is not utilized during a + dispatch wheel rotation period, the unused entitled capacity is + lost. The dispatch wheel rotation period is expressed as N number + of time base ticks. The dispatch wheel duration of a partition + with a capacity increment of 100 is 0. A change in the dispatch + wheel rotation period takes effect on the next reboot of the + partition. + + + + + Minimum Entitled Capacity + + + The minimum entitled capacity that is needed to power on + the partition. The capacity is expressed as a percentage of a + physical processor. The minimum entitled capacity is set by the + system administrator in the partition definition. DLPAR cannot + take the entitled capacity below the minimum entitled capacity. A + change in the minimum entitled capacity takes effect on the next + reboot of the partition. A partition can give up its entitled + capacity to be below the minimum entitled capacity. + + + + + Minimum Entitled Capacity per Virtual Processor + + + The minimum entitled capacity that the platform requires + for a virtual processor of any partition on the platform. The + minimum virtual per virtual processor is enforced by the HMC in + the partition definition and by the hypervisor for H_SET_PPP ( + ). A change in the + minimum entitled capacity per virtual processor takes effect on + the next reboot of the partition. + + + + + Minimum Memory + + + The minimum amount of main store that is needed to power on + the partition. Minimum memory is expressed in MB of storage. The + minimum memory is set by the system administrator in the + partition definition. DLPAR cannot take the partition memory + below the minimum memory. A change in the minimum memory takes + effect on the next reboot of the partition. A partition can + always give up its memory to go below the minimum memory. + + + + + Minimum Number of Processors + + + The minimum number of virtual processors that are needed to + start the partition. The minimum number of virtual processors is + set by the system administrator in the partition definition. + DLPAR cannot take the number of virtual processors below the + minimum number of processors. A change in the minimum number of + processors takes effect on the next reboot of the partition. A + partition can always give up its virtual processors to go below + the minimum number of processors. + + + + + Maximum Entitled Capacity + + + The maximum entitled capacity currently that can be + assigned to the partition through DLPAR/WLM. The capacity is + expressed as a percentage of a physical processor. The Maximum + entitled capacity is set up by the system administrator in the + partition definition. A change in the maximum entitled capacity + maximum takes effect on the next reboot of the partition. + + + + + Maximum Platform Processors + + + The maximum number of processors that can be active on the + platform. A change in the maximum platform processors takes + effect on the next reboot of the partition. + + + + + Dedicated Donate Mode + + + For a partition with a capacity increment of 100, the + platform uses a dedicated CPU to actualize a virtual processor of + the partition. For such a partition, the platform can increase + the capacity of the shared processor pool by utilizing the unused + processor capacity of the partition. If the platform supports the + dedicated donate function, it can be enabled by the system + administrator in the partition definition. The value of this + characteristic can change without a reboot of the + partition. + + + + + Thread + + + A multi threaded processor may have multiple contexts + executing concurrently. Each of them is called a thread. From a + software viewpoint, a thread is an independent executing unit. + Threads on a processor share some of the architected and + unarchitected resources of a physical processor. + + + + +
+
+
+ Key Words And Values + Table + defines the key words and the + associated legal values that will be returned in the ASCII NULL terminated + string when the parameter token value of 20 (SPLPAR characteristics) is + specified on the ibm,get-system-parameter RTAS call. The key word and value + is separated by an ascii equal (“=”). Each key word, value pair + is delimited by an ascii comma in the string. The numerical value of the + characteristic corresponding to the key word is the decimal number that + corresponds to the numeric characters in the value part of the key word, + value pair. + + SPLPAR Characteristics + + + + + + + + + + + Characteristics + + + + + Key Word + + + + + Values + + + + + Notes + + + + + + + + Bound Threads + + + BoundThrds + + + 0,1 + + + 1 + + + + + Capacity Increment + + + CapInc + + + 1 through 100 + + +   + + + + + Dispatch Wheel Rotation Period + + + DisWheRotPer + + + 1 through N + + +   + + + + + Minimum Entitled Capacity + + + MinEntCap + + + 0 through N + + + 2 + + + + + Minimum Entitled Capacity per Virtual Processor + + + MinEntCapPerVP + + + 1 through 100 + + +   + + + + + Minimum Memory + + + MinMem + + + 0 through N + + +   + + + + + Minimum Number of Processors + + + MinProcs + + + 0 through N + + +   + + + + + Maximum Entitled Capacity + + + MaxEntCap + + + 1 through N + + + 3 + + + + + Maximum Platform Processors + + + MaxPlatProcs + + + 1 through N + + +   + + + + + Desired Entitled Capacity + + + DesEntCap + + + 0 through N + + + 4 + + + + + Desired Memory + + + DesMem + + + 0 through N + + + 5 + + + + + Desired Number of Processors + + + DesProcs + + + 0 through N + + + 6 + + + + + Desired Variable Capacity Weight + + + DesVarCapWt + + + 0 through 255 + + +   + + + + + Dedicated Donate Mode + + + DedDonMode + + + 0,1 + + + 7 + + + + +
+ Notes: + + + 0=Threads are not bound, 1=Threads are bound. + + + + The maximum numeric value of Minimum Entitled Capacity is the + number of processors on the platform multiplied by 100. + + + + The maximum numeric value of Maximum Entitled Capacity is the + number of processors on the platform multiplied by 100. + + + + The numeric value of Desired Entitled Capacity is greater or equal + than the numeric value of the Minimum Entitled Capacity and less than or + equal to the numeric value of the Maximum Entitled Capacity. + + + + The numeric value of Desired Memory is greater or equal than the + numeric value of the Minimum Memory and less than or equal to the maximum + memory set by the system administrator in the partition profile. + + + + The numeric value of Desired Number of Processors is greater or + equal than the numeric value of the Minimum Number of Processors and less + than or equal to the maximum number of virtual processors set by the system + administrator in the partition profile. + + + + 0=Dedicated Donate Mode is disabled, 1=Dedicated Donate Mode is + enabled. + + + +
+
diff --git a/Virtualization/ch_virtual_io.xml b/Virtualization/ch_virtual_io.xml new file mode 100644 index 0000000..dcdacc2 --- /dev/null +++ b/Virtualization/ch_virtual_io.xml @@ -0,0 +1,14520 @@ + + Virtualized Input/Output + Virtualized I/O is an optional feature of platforms that have + hypervisor support. Virtual I/O (VIO) provides to a given partition the + appearance of I/O adapters that do not have a one to one correspondence with + a physical IOA. The hypervisor uses one of three techniques to realize a + virtual IOA: + + + + In the + hypervisor simulated class, the hypervisor may totally + simulate the adapter. For example, this is used in the virtual ethernet (IEEE + VLAN) support (see + ). This technique is applicable to + communications between partitions that are created by a single hypervisor + instance. + + + + In the + partition managed class, a + server partition provides the services of one of its + IOA’s to a + partner partition(s) (one or more + client partitions + The term “hosted” is sometimes used for + “client” and the term “hosting” is sometimes used + for “server.” Note that a server IOA or partition can sometimes + also be a client, and vice versa, so the terminology “client” + and “server” tend to be less confusing than hosted and + hosting. + or one or more server partitions). In limited cases, a client may + communicate directly to a client. A server partition provides support to + interpret I/O requests from the partner partition, perform those requests on + one or more of its devices, targeting the partner partition’s DMA + buffer areas (for example, by using the Remote DMA (RDMA) facilities), and + passing I/O responses back to the partner partition. For example, see + . + + + + In the + hypervisor managed class, the hypervisor may provide low + level hardware management (error and sub-channel allocation) so that + partition level code may directly manage its assigned sub-channels. + + + + + This chapter is organized from general to specific. The overall + structure of this architecture is as shown in + . + +
+ VIO Architecture Structure + + + + + + + + +
+ +
+ Terminology used with VIO + Besides the general terminology defined on the first page of this + chapter, + will assist the reader in understanding the content of this chapter. + + + Terminology used with VIO + + + + + + + Term + + + Definition + + + + + + + VIO + + + Virtual I/O. General term for all virtual I/O classes and + virtual IOAs. + + + + + ILLAN + + + Interpartition Logical LAN. This option uses the + hypervisor simulated class of virtual I/O to provide + partition-to-partition LAN facilities without a real LAN IOA. + See + . + + + + + VSCSI + + + Virtual SCSI. This option provides the facilities for + sharing physical SCSI type IOAs between partitions. + . + + + + + ClientClient VIO model + + + This terminology is mainly used with the partition + managed class of VIO. The client, or client partition, is an + entity which generally requests of a server partition, access + to I/O to which it does not have direct access (that is, access + to I/O which is under control of the server partition). Unlike + the server, the client does not provide services to other + partitions to share the I/O which resides in their partition. + However, it possible to have the same partition be both a + server and client partition, but under different virtual IOAs. + The Client VIO model is one where the client partition maps + part of its local memory into an RTCE table (as defined by the + first window pane of the + “ibm,my-dma-window”property), + so that the server partition can get access to that + client’s local memory. An example of this is the VSCSI + client (see + for more + information). + + + + + ServerServer VIO model + + + This terminology is mainly used with the partition + managed class of VIO. The server, or server partition is an + entity which provides a method of sharing the resources under + its direct control with another partition, virtualizing those + resources in the process. The following defines the Server VIO + model: + The server is a server to a client. An example of this is + the VSCSI client (see + ). In this case, the + Server VIO model is one where the server gets access to the + client partition’s local memory via what the client + mapped into an RTCE table. This access is done through the + second window pane of the server’s + “ibm,my-dma-window”property, + which is linked to the first window pane of the client’s + “ibm,my-dma-window”property. + + + + + Partner partition + + + This is “the other” partition in a pair of + partitions which are connected via a virtual IOA pair. For + client partitions, the partner is generally the server + (although, in limited cases, client to client connections may + be possible). For server partitions, the partner can be a + client partition or another server partition. + + + + + RTCE table + + + Remote DMA TCE table. TCE (Translation Control Entry) and + RTCE tables are used to translate I/O DMA operations and + provide protection against improper operations (access to what + should not be accessed or for protection against improper + access modes, like writing to a read only page). More + information on TCEs and TCE tables, which are used for physical + IOAs, can be found in + . The RTCE table for Remote + DMA (RDMA) is analogous to the TCE table for physical IOAs. The + RTCE table does, however, have a little more information in it + (as placed there by the hypervisor) in order to, among other + things, allow the hypervisor to create links to physical IOA + TCEs that were created from the RTCE table TCEs. A TCE in an + RTCE table is never accessed directly by the partitions + software; only though hypervisor hcall()s. For more information + on RTCE table and operations, see + , and + . + + + + + Window pane + (“ibm,my-dma-window” property) + + + The RTCE tables for VIO DMA are pointed to by the + “ibm,my-dma-window” property in + the device tree for each virtual device. This property can have + one, two, or three triples, each consisting of a Logical I/O + Bus Number (LIOBN), phys which is 0, and size. The LIOBN + essentially points to a unique RTCE table (or a unique entry + point into a single table. The phys is a value of 0, indicating + offsets start at 0. The size is the size of the available + address space for mapping memory into the RTCE table. This + architecture talks about these unique RTCE tables as being + window panes within the + “ibm,my-dma-window” property. + Thus, there can be up to three window panes for each virtual + IOA, depending on the type of IOA. For more on usage of the + window panes, see + . + + + + + RDMA + + + Remote Direct Memory Access is DMA transfer from the + server to its client or from the server to its partner + partition. DMA refers to both physical I/O to/from memory + operations and to memory to memory move operations. + + + + + Copy RDMA + + + This term refers to when the hypervisor is used (possibly + with hardware assist) to move data between server partition and + client partition memories or between server partition and + partner partition memories. See + . + + + + + Redirected RDMA + + + This term refers to when the TCE(s) for a physical IOA + are set up through the use of the RTCE table manipulation + hcall()s (for example, H_PUT_RTCE) such that the client or + partner’s partition’s RTCE table (though the second + window pane of the server partition) is used by the hypervisor + during the processing of the hcall() to setup the TCE(s) for + the physical IOA, and then the physical IOA DMAs directly to or + from the client or partner partition’s memory. See + for more + information. + + + + + LRDMA + + + Stands for Logical Remote DMA and refers to the set of + facilities for synchronous RDMA operations. See also + for more information. + LRDMA is a separate option. + + + + + Command/Response Queue (CRQ) + + + The CRQ is a facility which is used to communicate + between partner partitions. Transport events which are signaled + from the hypervisor to the partition are also reported in this + queue. + + + + + Subordinate CRQ (Sub-CRQ) + + + Similar to the CRQ, except with notable differences (See + ). + + + + + Reliable Command/Response Transport + + + This is the CRQ facility used for synchronous VIO + operations to communicate between partner partitions. Several + hcall()s are defined which allow a partition to place an entry + on the partner partition’s queue. The firmware can also + place transport change of status messages into the queue to + notify a partition when the connection has been lost (for + example, due to the other partition crashing or deregistering + its queue). See + for more + information. + + + + + Subordinate CRQ Transport + + + This is the Sub-CRQ facility used for synchronous VIO + operations to communicate between partner partitions when the + CRQ facility by itself is not sufficient. The Subordinate CRQ + Transport never exists without a corresponding Reliable + Command/Response Transport. See + for more + information. + + + + +
+
+ +
+ VIO Architectural Infrastructure + VIO is used in conjunction with the Logical Partitioning option as + described in + . For each of a platform’s + partitions, the number and type of VIO adapters with the associated + interpartition communications paths (if any are defined). These definitions + take the architectural form of VIO adapters and are communicated to the + partitions as device nodes in their OF device tree. Depending upon the + specific virtual device, their device tree node may be found as a child of + / (the root node) or in the VIO sub-tree (see + below). + The VIO infrastructure provides several primitives that may be used + to build connections between partitions for various purposes (that is, for + various virtual IOA types). These primitives include: + + + + A Command/Response Queue (CRQ) facility which provides a pipe + between partitions. A partition can enqueue an entry on its partner’s + CRQ for processing by that partner. The partition can set up the CRQ to + receive an interrupt when the queue goes from empty to non-empty, and hence + this facility provides a method for an inter-partition interrupt. + + + + A Subordinate CRQ (Sub-CRQ) facility that may be used in + conjunction with the CRQ facility, when the CRQ facility by itself is not + sufficient. That is, when more than one queue with more than one interrupt + is required by the virtual IOA. + + + + An extended TCE table called the RTCE table which allows a + partition to provide “windows” into the memory of its partition + to its partner partition, while maintaining addressing and access control + to its memory. + + + + Remote DMA services that allow a server partition to transfer data + to a partner partition’s memory via the RTCE table window panes. This + allows a device driver in a server partition to efficiently transfer data + to and from a partner, which is key in sharing of an IOA in the server + partition with its partner partition. + + + + In addition to the virtual IOAs themselves, this architecture defines + a virtual host bridge, and a virtual interrupt source controller. The + virtual host bridge roots the VIO sub-tree. The virtual interrupt source + controller provides the consistent syntax for communicating the interrupt + numbers the partition’s OS sees when the virtual IOAs signal an + interrupt. + The general VIO infrastructure is defined in + . There are additional + infrastructures requirements for the partition managed class based on the + Synchronous VIO model. See + . + +
+ VIO Infrastructure - General + This section describes the general OF device tree structure for + virtual IOAs and describes in more detail window panes, as well as + describing the interrupt control aspects of virtual IOAs. + +
+ Properties of the + <emphasis role="bold"><literal>/vdevice</literal></emphasis> OF Tree Node + Most VIO adapters are represented in the OF device tree as children + of the + /vdevice node (child of the root node). While the + vdevice sub-tree is the preferred architectural home for VIO adapters, + selected devices for historical reasons, are housed outside of the + vdevice sub-tree. + + + + R1--1. + + + /vdevice node must contain the properties as defined + in . + + + + + + Properties of the <emphasis role="bold"><literal>/vdevice</literal></emphasis> Node + + + + + + + + + Property Name + + + + + Required? + + + + + Definition + + + + + + + + + “name” + + + + Y + + + Standard property name per + , + specifying the virtual device name, the value shall be + “vdevice” + + + + + + “device_type” + + + + Y + + + Standard property name per + , + specifying the virtual device type, the value shall be + “vdevice” + + + + + + “model” + + + + NA + + + Property not present. + + + + + + “compatible” + + + + Y + + + Standard property name per + + , specifying + the virtual device programming models, the value shall include + “IBM,vdevice” + + + + + + “used-by-rtas” + + + + NA + + + Property not present. + + + + + + “ibm,loc-code” + + + + NA + + + The location code is meaningless unless one is doing + dynamic reconfiguration as in the children of this node. + + + + + + “reg” + + + + NA + + + Property not present. + + + + + + “#size-cells” + + + + Y + + + Standard property name per + , + the value shall be 0. No child of this node takes + space in the address map as seen by the owning + partition. + + + + + + “#address-cells” + + + + Y + + + Standard property name per + , + the value shall be 1. + + + + + + “#interrupt-cells” + + + + Y + + + Standard property name per + , + the value shall be 2. The first cell contains the + interrupt# as will appear in the XIRR and is used as input to + interrupt RTAS calls. The second cell contains the value 0 + indicating a positive edge sense + + + + + + “interrupt-map-mask” + + + + NA + + + Property not present. + + + + + + “interrupt-ranges” + + + + Y + + + Standard property name that defines the interrupt + number(s) and range(s) handled by this unit. + + + + + + “ranges” + + + +   + + + These will probably be needed for IB virtual + adapters. + + + + + + “interrupt-map” + + + + NA + + + Property not present. + + + + + + “interrupt-controller” + + + + Y + + + The + /vdevice node appears to contain an + interrupt controller. + + + + + + “ibm,drc-indexes” + + + + For DR + + + Refers to the DR slots -- the number provided is the + maximum number of slots that can be configured which is limited + by, among other things, the RTCE tables allocated by the + hypervisor. + + + + + + “ibm,drc-power-domains” + + + + For DR + + + Value of -1 to indicate that no power manipulation is + possible or needed. + + + + + + “ibm,drc-types” + + + + For DR + + + Value of + “SLOT”. Any virtual IOA can + fit into any virtual slot. + + + + + + “ibm,drc-names” + + + + For DR + + + The virtual location code (see + ) + + + + + + “ibm,max-virtual-dma-size” + + + + See definition column + + + The maximum transfer size for H_SEND_LOGICAL_LAN and + H_COPY_RDMA hcall()s. Applies to all VIO which are children of + the + /vdevice node. Minimum value is 128 + KB. + + + + +
+
+ +
+ RTCE Table and Properties of the Children of the + <emphasis role="bold"><literal>/vdevice</literal></emphasis> Node + This architecture defines an extended type of TCE table called a + Remote DMA TCE (RTCE) table. An RTCE table is one that is not directly + used by the hardware to translate an I/O adapter’s DMA addresses, + but is used by the hypervisor to translate a partition’s I/O + addresses. RTCE tables have extra data, compared with a standard TCE + table, to help firmware manage the use of its mappings. A partition + manages the entries for its memory that is to be the target for I/O + operations in the RTCE table using the TCE manipulation hcall()s, + depending on the type of window pane. More on this later in this section. + On platforms implementing the CRQ LRDMA options, these hcall()s are + extended to understand the format of the RTCE table via the LIOBN + parameter that is used to address the specific window pane within an RTCE + table + One could also think of each LIOBN pointing to a separate RTCE + table, rather than window panes within an RTCE table. + . + Children of the + /vdevice node that support operations which use RTCE + tables (for example, RDMA) contain the + “ibm,my-dma-window” property. This + property contains one or more (logical-I/O-bus-number, phys, size) + triple(s). Each triple represents one window pane in an RTCE table which + is available to this virtual IOA. The phys value is 0, and hence the + logical I/O bus number (LIOBN) points to a unique range of TCEs in the + RTCE table which are assigned to this window pane (LIOBN), and hence the + I/O address for that LIOBN begin at 0. + The LIOBN is an opaque handle which references a window pane within + an RTCE table. Since this handle is opaque, its internal structure is not + architected, but left to the implementation’s discretion. However, + it is the architectural intent that the LIOBN be an indirect reference to + the RTCE table through a hypervisor table that contains management + variables, allowing for movement of the RTCE table and table format + specific access methods. The partition uses an I/O address as an offset + relative to the beginning of the LIOBN, as part of any I/O request to + that memory mapped by that RTCE table’s TCEs. A server partition + appends its version of the LIOBN for the partner partition’s RTCE + table that represents the partner partition’s RTCE table which it + received through the second entry in the + “ibm,my-dma-window” property associated + with server partition’s virtual IOA’s device tree node (for + example, see + ). The mapping between the + LIOBN in the second pane of a server virtual IOA’s + “ibm,my-dma-window” property and the + corresponding partner partition IOA’s RTCE table is made when the + CRQ successfully completes registration. + The window panes and the hcall()s that are applicable to those + panes, are defined and used as indicated in + . + + + VIO Window Pane Usage and Applicable Hcall()s + + + + + + + + + + Window Pane (Which Triple) + + + + + Hypervisor Simulated Class + + + + + Client VIO Model + + + + + Server VIO Model + + + + + + + + First + + + + + I/O address range which is available to map local + partition memory for use by the hypervisor + + + + + + + I/O address range which is available to map local + partition memory to make it available to the hypervisor use + (access to the CRQ and any Sub-CRQs). + + + For clients which support RDMA operations from their + partner partition to their local memory (for example, VSCSI), + this I/O address range is available to map local partition + memory to make it available to the server partition, and this + pane gets mapped to the second window pane of the partner + partition (client/server relationship). + + + + + + + I/O address range which is available to map local + partition memory for use by the hypervisor (for access by + H_COPY_RDMA requests, and for access to the CRQ, any + Sub-CRQs). + + + This window is not available to any other + partition. + + + + + + + Applicable hcall()s: H_PUT_TCE, H_GET_TCE, + H_PUT_TCE_INDIRECT, H_STUFF_TCE + + + + + Second + + + Does not exist + + + Does not exist + + + + + I/O address range which corresponds to a window pane of + the partner partition: linked to the first window pane for + Client/Server model connections. + + + Used to get access to the partner partition’s + memory from the hypervisor that services the local partition + for use as source or destination in Copy RDMA requests or for + redirected DMA operations (for example, H_PUT_RTCE). + + + + + + + Applicable hcall()s: H_PUT_RTCE, H_REMOVE_RTCE and + H_PUT_RTCE_INDIRECT + + + + +
+ The + “ibm,my-dma-window” property is the per + device equivalent of the + “ibm,dma-window” property found in nodes + representing bus bridges. + Children of the + /vdevice node contain virtual location codes in their + + “ibm,loc-code” properties. The invariant + assignment number is uniquely generated when the virtual IOA is assigned + to the partition and remains invariably associated with that virtual IOA + for the duration of the partition definition. For more information, see + . +
+ +
+ VIO Interrupt Control + There are two hcall()s that work in conjunction with the RTAS calls + + ibm,int-on, + ibm,int-off, + ibm,set-xive and + ibm,get-xive, which manage the state of the + interrupt presentation controller logic. These hcall()s provide the + equivalent of IOA control registers used to control IOA interrupts. The + usage of these two hcall()s is summarized in + . The detail of the + H_VIO_SIGNAL is shown after this table and the detail of the applicable + H_VIOCTL subfunctions can be found in + , + , and + . + + + VIO Interrupt Control hcall() Usage + + + + + + + + + + Interrupt From + + + + + Virtual IOA Definition does + not + Include Sub-CRQs + + + + + Virtual IOA Definition + Includes + Sub-CRQs + + + + + Interrupt Number Obtained + From + + + + + + + + CRQ + + + H_VIO_SIGNAL + + + H_VIO_SIGNAL + or + H_VIOCTL + + + OF device tree + “interrupts” property + + + + + Sub-CRQ + + + Not Applicable + + + H_VIOCTL + + + H_REG_SUB_CRQ hcall() + + + + +
+ +
+ H_VIO_SIGNAL + This H_VIO_SIGNAL hcall() manages the interrupt mode of a virtual + adapter’s CRQ interrupt signalling logic. There are two modes: + Disabled, and Enabled. + The first interrupt of the + “interrupts” property is for the + CRQ. + + + Syntax: + + + + + + + Parameters: + + + + unit-address: unit address per device tree node + “reg” property. + + + + mode: + + + + Bit 63 controls the first interrupt specifier given in the + virtual IOA’s + “interrupts” property, and bit 62 the + second. High order bits not associated with an interrupt source as + defined in the previous sentence should be set to zero by the caller and + ignored by the hypervisor. + + + + A bit value of 1 enables the specified interrupt, a bit value of + 0 disables the specified interrupt. + + + + + + + + Semantics: + + + + Validate that the unit address belongs to the partition and to a + vdevice IOA, else H_Parameter. + + + + Validate that the mode is one of those defined, else + H_Parameter. + + + + Establish the specified mode. + + + + Return H_Success. + + + +
+
+ +
+ General VIO Requirements + + + + R1--1. + + + For all VIO options: The platform must be running in + LPAR mode. + + + + + R1--2. + + + For all VIO options: The platform’s OF device + tree must include, as a child of the + root node, a node of type + vdevice as the parent of a sub-tree representing the + virtual IOAs assigned to the partition (see + for details). + + + + + R1--3. + + + For all VIO options: The platform’s + /vdevice node must contain properties as defined in + . + + + + + R1--4. + + + For all VIO options: If the platform is going to + limit the size of virtual I/O data copy operations (e.g., + H_SEND_LOGICAL_LAN and H_COPY_RDMA), then the platform’s + /vdevice node must contain the + “ibm,max-virtual-dma-size” property, and + the value of this property must be at least 128 KB. + + + + + R1--5. + + + For all VIO options: The interrupt server numbers for + all interrupt source numbers, virtual and physical, must come from the + same name space and are defined by the + “ibm,interrupt-buid-size” property in the + PowerPC External Interrupt Presentation + Controller Node. + + + + + R1--6. + + + For all VIO options: The virtual interrupts for all + children of the + /vdevice node must, upon transfer of control to the + booted partition program, be masked as would be the result of an + ibm,int-off RTAS call specifying the virtual + interrupt source number. + + + + + R1--7. + + + For all VIO options with the Reliable Command/Response + option: The platform must specify the CRQ interrupt as the + first interrupt in the + “interrupts” property for a virtual + IOA. + + + + + R1--8. + + + + Reserved + + + + + R1--9. + + + For all VIO options: The platform must implement the + H_VIO_SIGNAL hcall() as defined in + . + + + + + R1--10. + + + For all VIO options: The platform must assign an + invariant virtual location code to each virtual IOA as described in + . + + + + + + R1--11. + + + (Requirement Number Reserved For Compatibility) + + + + + + R1--12. + + + For all VIO options: The + phys of each + “ibm,my-dma-window” property triple + (window pane) must have a value of zero and the LIOBN must be + unique. + Implementation Note: While the architectural + definition of LIOBN would allow the definition of one logical I/O bus + number (LIOBN) for all RTCE tables (IOBA ranges separating IOAs), such an + implementation is not permitted for the VIO option, which requires a + unique LIOBN (at least per partition preferably platform wide) for each + virtual IOA window pane. Such designs allow the LIOBN handle to be used + to validate access rights, and allows each subsequent I/O bus address + range to start at zero, providing maximum accommodation for 32 bit + OS’s. + + + + + R1--13. + + + For the VSCSI option: + For the server + partition, there must exist two triples (two window panes) in the + “ibm,my-dma-window” property and the size + field of the second triple (second window pane) of an + “ibm,my-dma-window” property must be + equal to the size field of the corresponding first triple (first window + pane) of the associated partner partition’s + “ibm,my-dma-window” property. + + + + + R1--14. + + + + Reserved + + + + + R1--15. + + + For all VIO options: + RTCE tables for + virtual IOAs, as pointed to by the partitions’ first window pane of + the + + “ibm,my-dma-window” property, and the + TCEs that they contain (as built by the TCE hcall()s) must be persistent + across partner partition reboots and across partner partition deregister + (free)/re-register operations, even when the partition which connects + after one deregisters is a different partition, and must be available to + have TCEs built in them by said partition, as long as that partition + still owns the corresponding virtual IOA (an LRDR operation which removes + the IOA will also remove the RTCE table). + + + + + R1--16. + + + For all VIO options: The connection between the + second window pane of the + “ibm,my-dma-window” property for a + partition and its corresponding window pane in the partner partition + (first window pane) must be broken by the platform when either partition + deregisters its CRQ or when either partition terminates, and the platform + must invalidate any redirected TCEs copied from the said second window + pane (for information on invalidation of TCEs, see + ). + + + + + + R1--17. + + + For all VIO options: The following window panes of + the “ibm,my-dma-window” + property, when they exist, must support the following specified hcall()s, when they are + implemented: + + + + For the first window pane: H_PUT_TCE, H_GET_TCE, + H_PUT_TCE_INDIRECT, H_STUFF_TCE + + + + For the second window pane: H_PUT_RTCE, H_REMOVE_RTCE, + H_PUT_RTCE_INDIRECT + + + + + + + R1--18. + + + For all VIO options: + The platform must not prohibit the server and partner partition, or client and partner + partition, from being the same partition, unless the user interface used + to setup the virtual IOAs specifically disallows such + configurations. + + + + + R1--19. + + + For all VIO options: Any child node of the + /vdevice node that is not defined by this + architecture must contain the + “used-by-rtas” property. + + Implementation Notes: + + + + + Relative to Requirement + , partner partitions being the + same partition makes sense from a product development standpoint. + + + + The + ibm,partner-control RTAS call does not make sense if + the partner partitions are the same partition. + + + + + + + R1--20. + + + For all VIO options: The platform must implement the + H_VIOCTL hcall() following the syntax of + and semantics specified by + . + + + + + +
+ +
+ Shared Logical Resources + The sharing of resources, within the boundaries of a single + coherence domain, owned by a partition owning a server virtual IOA by its + clients (those owning the associated client virtual IOAs) is controlled + by the hcall()s described in this section. The owning partition retains + control of and access to the resources and can ask for their return or + indeed force it. Refer to + for a graphic representation of + the state transitions involved in sharing logical resources. + +
+ Shared Logical Resource State Transitions + + + + + + + + +
+ + Owners of resources can grant, to one or more client + partitions, access to any of its resources. A client partition being + defined as a partition with which the resource owner is authorized to + register a CRQ, as denoted via an OF device tree virtual IOA node. + Granting access is accomplished by requesting that the hypervisor + generate a specific cookie for that resource for a specific sharing + partition. The cookie value thus generated is unique only within the + context of the partition being granted the resource and is unusable for + gaining access to the resource by any other partition. This unique cookie + is then communicated via some inter partition communications channel, + most likely the authorized Command Response Queue. The partner partition + then accepts the logical resource (mapping it into the accepting + partition’s logical address space). The owning partition may grant + shared access of the same logical resource to several clients (by + generating separate cookies for each client). During the time the + resource is shared, both the owner and the sharer(s) have access to the + logical resource, the software running in these partitions use private + protocols to synchronize control access. Once the resource has been + accepted into the client’s logical address space, the resource can + be used by the client in any way it wishes, including granting it to one + of its own clients. When the client no longer needs access to the shared + logical resource, it destroys any virtual mappings it may have created + for the logical resource and returns the logical resource thus unmapping + it from its logical address space. The client program could, subsequently + accept the logical resource again (given that the cookie is still valid). + To complete the termination of sharing, the owner partition rescinds the + cookie describing the shared resource. Normally a rescind operation + succeeds only if the client has returned the resource, however, the owner + can force the rescind in cases where it suspects that the client is + incapable of gracefully returning the resource. + In the case of a forced rescind, the hypervisor marks the client + partition’s logical address map location corresponding to the + shared logical resource such that any future hcall() that specifies the + logical address fails with an H_RESCINDED return code. The hypervisor + then ensures that the client partition’s translation tables contain + no references to a physical address of the shared logical + resource. + Should the server partition fail, the hypervisor automatically + notifies client partitions of the fact via the standard CRQ event + message. In addition, the hypervisor recovers any outstanding shared + logical resources prior to restarting the server partition. This recovery + is proceeded by a minimum of two seconds of delay to allow the client + partitions time to gracefully return the shared logical resources, then + the hypervisor performs the equivalent of a forced rescind operation on + all the server partition’s outstanding shared logical + resources. + This architecture does not specify a method of implementation, + however, for the sake of clarifying the specified function, the following + example implementation is given, refer to + . Assume that the hypervisor + maintains for each partition a logical to physical translation table (2) + (used to verify the partition’s virtual to logical mapping + requests). Each logical resource (4) mapped within the logical to real + translation table has associated with it a logical resource control + structure (3) (some of the contents of this control structure are defined + in the following text). The original logical resource control structures + (3) describe the standard logical resources allocated to the partition + due to the partition’s definition, such as one per Logical Memory + Blocks (LMB), etc. + The platform firmware, when creating the OF device tree for a given + partition knows the specific configuration of virtual IOAs with the + associated quantity of the various types of logical resources types for + each virtual IOA. From that knowledge, it understands the number and type + of resources that must be shared between the server and client partitions + and therefore the number of control structures that will be needed. When + an owning partition grants access to a subset of one of its logical + resources to another partition, the hypervisor chooses a logical resource + control structure to describe this newly granted resource (6), (as stated + above, the required number of these control structures were allocated + when the client virtual IOA was defined) and attaches it to the + grantee’s base partition control structure (5). This logical + resource control structure is linked (9) to the base logical resource + control structure (3) of the resource owner. Subsequently the + grantee’s OS may accept the shared logical resource (4) mapping it + (7) into the grantee’s partition logical to physical map table (8). + This same set of operations may subsequently be performed for other + partition(s) (10). The shared resource is always a subset (potentially + the complete subset) of the original. Once a partition (10) has accepted + a resource, it may subsequently grant a subset of that resource to yet + another partition (14), here the hypervisor creates a logical resource + control structure (13) links it (12) to the logical resource control + structure (11) of the granting partition (10) that is in turn linked (9) + to the owner’s logical resource control structure (3). +   +
+ Example Implementation of Control Structures + for Shared Logical Resources + + + + + + + + +
+ For the OS to return the logical resource represented by + control structure (11), the grant represented by control structure (13) + needs to be rescinded. This is normally accomplished only after the OS + that is running partition (14) performs a return operation, either + because it has finished using the logical resource, or in response to a + request (delivered by inter partition communications channel) from the + owner. The exceptions are in the case that either partition terminates + (the return operation is performed by the hypervisor) and a + non-responsive client (when the granter performs a forced rescind). A + return operation is much like a logical resource dynamic reconfiguration + isolate operation, the hypervisor removes the logical resource from the + partition’s logical to physical map table, to prevent new virtual + to physical mappings of the logical resource, then ensures that no + virtual to physical mappings of the logical resource are outstanding + (this can either be accomplished synchronously by checking map counts + etc. or asynchronously prior to the completion of the rescind operation. + + + + R1--1. + + + For the Shared Logical Resource option: The platform + must implement the hcall-logical-resource function set following the + syntax and semantics of the included hcall(s) as specified in: + , + , + , and + . + + + + + R1--2. + + + For the Shared Logical Resource option: In the event + that the partition owning a granted shared logical resource fails, the + platform must wait for a minimum of 2 seconds after notifying the client + partitions before recovering the shared resources via an automatic + H_RESCIND_LOGICAL (forced) operation. + + + + +
+ H_GRANT_LOGICAL + This hcall() creates a cookie that represents the specific instance + of the shared object. That is, the specific subset of the original + logical resource to be shared with the specific receiver partition. The + owning partition makes this hcall() in preparation for the sharing of the + logical resource subset with the receiver partition. The resulting cookie + is only valid for the specified receiver partition. + The caller needs to understand the bounds of the logical resource + being granted, such as for example, the logical address range of a given + LMB. The generated cookie does not span multiple elemental logical + resources (that is resources represented by their own Dynamic + Reconfiguration Connector). If the owner wishes to share a range of + resources that does span multiple elemental logical resources, then the + owner uses a series of H_GRANT_LOGICAL calls to generate a set of + cookies, one for each subset of each elemental logical resource to be + shared. + The “logical” parameter identifies the starting + “address” of the subset of the logical resource to be shared. + The form of this “address” is resource dependent, and is + given in + . + + + Syntax: + + + + + + + Parameters: +   + + Format of H_GRANT_LOGICAL parameters + + + + + + + + + + + Flags subfunction code (bits 16-23) + value: + + + + + + + + Access Restriction + + + Bits 16-19 + + + The defined bits in this field have + independent meanings, and may appear in combination with all + other bits unless specifically disallowed. (an x in the + binary field indicates that the bit can take on a value of 0 + or 1) + + + + + +   + + + 0b1xxx + + + Read access inhibited (The grantee may + not read from or grant access to read from this logical + resource.) + + + + +   + + + 0bx1xx + + + Write access inhibited (The grantee may + not write to or grant access to write to this logical + resource.) + + + + + +   + + + 0bxx1x + + + Re-Grant rights inhibited (the grantee + may not grant access to this logical resource to a subsequent + client.) + + + + + +   + + + 0bxxx1 + + + Reserved calling software should set + this bit to zero. Firmware returns H_Parameter if + set. + + + + + +   + + + + + + Logical Resource + + + + + Supported Combinations + + + + + Bits 20-23 + + + + + “address” + description + + + + + “length” + description + + + + + + System Memory + + + 0bxxx0 + + + 0x1 + + + Logical Address (as would be used in H_ENTER) in + logical-lo; logical-hi not used (should be = 0) + + + Bytes in units of 4 K on 4 K boundaries (low order 12 + bits = 0) + + + + + MMIO Space + + + 0bxxx0 + + + 0x2 + + + Logical Address (as would be used in H_ENTER) in + logical-lo; logical-hi not used (should be = 0) + + + Bytes in units of 4 K on 4 K boundaries (low order 12 + bits = 0) + + + + + Interrupt Source + + + 0b00x0 + + + 0x4 + + + 24 bit Interrupt # (as would be used in + ibm,get-xive) in low order 3 bytes in + logical-lo; logical-hi not used (should be = 0) + + + value=1 (the logical resource is one indivisible + unit) + + + + + DMA Window Pane + + Note: The DMA window only refers to physical DMA + windows not virtual DMA windows. Virtual DMA windows can be + directly created with a client virtual IOA definition and + need not be shared with those of the server. + + + + + 0b00x0 + + + 0x5 + + + 32 bit LIOBN in logical-hi; with a 64 bit IOBA + logical-lo + + + Bytes of IOBA in units of 4 K on 4 K boundaries (low + order 12 bits = 0) + + + + + Interprocessor Interrupt Port + + + 0b00x0 + + + 0x6 + + + Processor Number. (As from the processor’s Unit ID) + in logical-lo; logical-hi not used (should be = 0). + + + value=1 (the logical resource is one indivisible + unit) + + + + +
+ unit-address: The unit address of the virtual IOA associated with + the shared logical resource, and thus the partner partition that is to + share the logical resource. +
+ + + Semantics: + + + + Verify that the flags parameter specifies a supported logical + resource type, else return H_Parameter. + + + + Verify that the logical address validly identifies a logical + resource of the type specified by the flags parameter and owned/shared by + the calling partition, else return H_Parameter; unless: + + + + The logical address’s page number represents a page that + has been rescinded by the owner, then return H_RESCINDED. + + + + There exists a grant restriction on the logical resource, then + return H_Permission. + + + + + + Verify that the length parameter is of valid form for the + resource type specified by the flags parameter and that it represents a + subset (up to the full size) of the logical resource specified by the + logical address parameter, else return H_Parameter. + + + + Verify that the unit-address is for a virtual IOA owned by the + calling partition, else return H_Parameter. + + + + If the partner partition’s client virtual IOA has + sufficient resources, generate hypervisor structures to represent, for + hypervisor management purposes, including any grant restrictions, the + specified shared logical resource, else return H_NOMEM. + + + + Generate a cookie associated with the hypervisor structures + created in the previous step that the partner partition associated with + the unit-address can use to reference said structures via the + H_ACCEPT_LOGICAL and H_RETURN_LOGICAL hcall()s and the calling partition + can use to reference said structures via the H_RESCIND_LOGICAL + hcall(). + + + + Place the cookie generated in the previous step in R4 and return + H_Success. + + + +
+ +
+ H_RESCIND_LOGICAL + This hcall() invalidates a logical sharing as created by + H_GRANT_LOGICAL above. This operation may be subject to significant + delays in certain circumstances. Callers may experience an extended + series of H_PARTIAL returns prior to successful completion of this + operation. + If the sharer of the logical resource has not successfully + completed the H_RETURN_LOGICAL operation on the shared logical resource + represented by the specified cookie, the H_RESCIND_LOGICAL hcall() fails + with the H_Resource return code unless the “force” flag is + specified. The use of the “force” flag increases the + likelihood that a series of H_PARTIAL returns will be experienced prior + to successful completion. The “force” flag also causes the + hcall() to recursively rescind any and all cookies that represent + subsequent sharing of the logical resource. That is, if the original + client subsequently granted access to any or all of the logical resource + to a client, those cookies and any other subsequent grants are also + rescinded. + + + Syntax: + + + + + + + Parameters: + flags: The flags subfunction code field (bits 16-23) two values are + defined 0x00 “normal”, and 0x01 “forced”. + cookie: The handle returned by H_GRANT_LOGICAL representing the + logical resource to be rescinded. + + + + Semantics: + + + + Verify that the cookie parameter references an outstanding + instance of a shared logical resource owned/accepted by the calling + partition, else return H_Parameter. + + + + Verify that the flags parameter is one of the supported values, + else return H_Paramter. + + + + If the “force” flag is specified + Implementations should provide mechanisms to ensure that reserved + flag field bits are zero, to improve performance, implementations may + chose to activate this checking only in “debug” mode. The + mechanism for activating an implementation dependent debug mode is + outside of the scope of this architecture. + , then: perform the functions of H_RETURN_LOGICAL (cookie) as + if called by the client partition. Note this involves forced rescinding + any cookies generated by the client partition that refer to the logical + resource referenced by the original cookie being rescinded. + + + + If the client partition has the resource referenced by cookie is + in the available for mapping via its logical to physical mapping table + (the resource was accepted and not returned), return H_Resource. + + + + Verify that resource reference by cookie is not mapped by the + client partition, else return H_PARTIAL. + + + + Hypervisor reclaims control structures referenced by cookie and + returns H_Success. + + + +
+ +
+ H_ACCEPT_LOGICAL + The H_ACCEPT_LOGICAL hcall() maps the granted logical resource into + the client partition’s logical address space. To provide the most + compact client logical address space, the hypervisor maps the resource + into the lowest applicable logical address for the referenced logical + resource type, consistent with the resource’s size and the resource + type’s constraints upon alignment etc. The chosen logical address + for the starting point of the logical mapping is returned in register + R4. + + + Syntax: + + + + + + + Parameters: + cookie: The handle returned by H_GRANT_LOGICAL representing the + logical resource to be accepted. + + + + Semantics: + + + + Verify that the cookie parameter is valid for the calling + partition, else return H_Parameter. + n If the cookie represents a logical resources that has been + rescinded by the owner, return H_RESCINDED. + + + + Map the resources represented by the cookie parameter, with any + attendant access restrictions, into the lowest available logical address + of the calling partition consistent with constraints of size and + alignment and place the selected logical address into R4. + + + + Return H_Success. + + + +
+ +
+ H_RETURN_LOGICAL + The H_RETURN_LOGICAL hcall() unmaps the logical resource from the + client partition’s logical address space. Prior to calling + H_RETURN_LOGICAL the client partition should have destroyed all virtual + mappings to the section of the logical address space to which the logical + resource is mapped. That is unmapping virtual addresses for MMIO and + System Memory space, invalidating TCEs mapping a shared DMA window pane, + disabling/masking shared interrupt sources and/or inter processor + interrupts. Failing to do so, may result in parameter errors for other + hcall()s and H_Resource from the H_RETURN_LOGICAL hcall(). Part of the + semantic of this call is to determine that no such active mapping exists. + Implementations may be able to determine this quickly if they for example + maintain map counts for various logical resources, if an implementation + searches a significant amount of platform tables, then the hcall() may + return H_Busy and maintain internal state to continue the scan on + subsequent calls using the same cookie parameter. The cookie parameter + remains valid for the calling client partition until the server partition + successfully executes the H_RESCIND_LOGICAL hcall(). + + + Syntax: + + + + + + Parameters: + cookie: The handle returned by H_GRANT_LOGICAL representing the + logical resource to be returned. + + + + Semantics: + + + + Verify that the cookie parameter references an outstanding + instance of a shared logical resource accepted by the calling partition, + else return H_Parameter. + + + + Remove the referenced logical resource from the calling + partition’s logical address map. + + + + Verify that no virtual to logical mappings exist for the + referenced resource, else return H_Resource. + n This operation may require extensive processing -- in some cases + the hcall may return H_Busy to allow for improved system responsiveness + -- in these cases the state of the mapping scan is retained in the + hypervisor’s state structures such that after some number of + repeated calls the function is expected to finish. + + + + Return H_Success. + + + +
+ +
+ +
+ H_VIOCTL + The H_VIOCTL hypervisor call allows the partition to manipulate or + query certain virtual IOA behaviors. + +
+ Command Overview + + + Syntax: + + + + + + + Parameters: + + + + unit-address: As specified. + + + + subfunction: Specific subfunction to perform; see + . + + + + parm-1: Specified in subfunction semantics. + + + + parm-2: Specified in subfunction semantics. + + + + parm-3: Specified in subfunction semantics. + + + + + + Semantics: + + + + Validate that the subfunction is implemented, else return + H_Not_Found. + + + + Validate the unit-address, else return H_Parameter. + + + + Validate the subfunction is valid for the given virtual IOA, else + return H_Parameter. + + + + Refer to + to determine the semantics for + the given subfunction. + + + +   + + Semantics for H_VIOCTL subfunction parameter values + + + + + + + + + + Subfunction Number + + + + + Subfunction Name + + + + + Required? + + + + + Semantics Defined in + + + + + + + + 0x0 + + + (Reserved) + + + (Reserved) + + + (Reserved) + + + + + 0x1 + + + GET_VIOA_DUMP_SIZE + + + For all VIO options + + + + . + + + + + 0x2 + + + GET_VIOA_DUMP + + + + . + + + + + 0x3 + + + GET_ILLAN_NUMBER_VLAN_IDS + + + For the ILLAN option + + + + . + + + + + 0x4 + + + GET_ILLAN_VLAN_ID_LIST + + + + . + + + + + 0x5 + + + GET_ILLAN_SWITCH_ID + + + For the ILLAN option + + + + + + + + + + 0x6 + + + DISABLE_MIGRATION + + + For all vscsi-server and vfc-server + + + + . + + + + + 0x7 + + + ENABLE_MIGRATION + + + + . + + + + + 0x8 + + + GET_PARTNER_INFO + + + + . + + + + + 0x9 + + + GET_PARTNER_WWPN_LIST + + + For all vfc-server + + + + . + + + + + 0xA + + + DISABLE_ALL_VIO_INTERRUPTS + + + For the Subordinate CRQ Transport option + + + + + + + + + + 0xB + + + DISABLE_VIO_INTERRUPT + + + + + + + + + + 0xC + + + ENABLE_VIO_INTERRUPT + + + + + + + + + + 0xD + + + GET_ILLAN_MAX_VLAN_PRIORITY + + + No + + + + + + + + + + 0xE + + + GET_ILLAN_NUMBER_MAC_ACLS + + + No + + + + + + + + + + 0xF + + + GET_MAC_ACLS + + + No + + + + + + + + + + 0x10 + + + GET_PARTNER_UUID + + + For UUID Option + + + + + + + + + + 0x11 + + + FW_RESET + + + For the VNIC option. + + + + + + + + + + 0x12 + + + Get_ILLAN_SWITCHING_MODE + + + For any ILLAN adapter with the + “ibm,trunk-adapter” property + + +   + + + + + 0x13 + + + DISABLE_INACTIVE_TRUNK_RECEPTION + + + For any ILLAN adapter with the + "ibm,trunk-adapter" property + + + + + + + + + +
+
+
+ +
+ GET_VIOA_DUMP_SIZE Subfunction Semantics + + + + Validate parm-1, parm-2, and parm-3 are set to zero, else return + H_Parameter. + + + + The hypervisor calculates the size necessary for passing opaque + firmware data describing current virtual IOA state to the partition for + purposes of error logging and RAS, and returns H_Success, with the + required size in R4. + + +
+ +
+ GET_VIOA_DUMP Subfunction Semantics + + + + If the given virtual IOA has an + “ibm,my-dma-window” property in its + device tree, then parm-1 is an eight byte output descriptor. The high + order byte of an output descriptor is control, the next three bytes are a + length field of the buffer in bytes, and the low order four bytes are a + TCE mapped I/O address of the start of a buffer in I/O address space. The + high order control byte must be set to zero. The TCE mapped I/O address + is mapped via the first window pane of the + “ibm,my-dma-window” property. + + + + If the given virtual IOA has no + “ibm,my-dma-window” property in its + device tree, then parm-1 shall be a logical real, page-aligned address of + a 4 K page used to return the virtual IOA dump. + + + + Validate parm-2 and parm-3 are set to zero, else return + H_Parameter. + + + + If parm-1 is an output descriptor, then + + + + n Validate the I/O address range is in the required DMA window and + is mapped by valid TCEs, else return H_Parameter. + + + + Transfer as much opaque hypervisor data as fits into the output + buffer as specified by the output descriptor. + + + + If all opaque data will not fit due to size, return + H_Constrained, else return H_Success. + + + + + + If parm-1 is a logical real address, then + + + + Validate the logical real address is valid for the partition, + else return H_Parameter. + + + + Transfer as much opaque hypervisor data as will fit into the + passed logical real page, with a maximum of 4 K. + + + + If all opaque data will not fit in the page due to size, return + H_Constrained, else return H_Success. + + + + +
+ +
+ GET_ILLAN_NUMBER_VLAN_IDS Subfunction Semantics + + + + Validate parm-1, parm-2, and parm-3 are set to zero, else return + H_Parameter. + + + + The hypervisor returns H_Success, with the number of VLAN IDs + (PVID + VIDs) in R4. This subfunction allows the partition to allocate + the correct amount of space for the call: + H_VIOCTL(GET_VLAN_ID_LIST). + + +
+ +
+ GET_ILLAN_VLAN_ID_LIST Subfunction Semantics + + + + parm-1 is an eight byte output descriptor. The high order byte of + an output descriptor is control, the next three bytes are a length field + of the buffer in bytes, and the low order four bytes are a TCE mapped I/O + address of the start of a buffer in I/O address space. The high order + control byte must be set to zero. The TCE mapped I/O address is mapped + via the first window pane of the + “ibm,my-dma-window” property. + + + + Validate parm-2 and parm-3 are set to zero, else return + H_Parameter. + + + + Validate the I/O address range is in the required DMA window and + is mapped by valid TCEs, else return H_Parameter. + + + + Transfer the VLAN_ID_LIST into the output buffer as specified by + the output descriptor. The data will be an array of two byte values, + where the first element of the array is the PVID followed by all the + VIDs. The format of the elements of the array is specified by IEEE VLAN + documentation. Any unused space in the output buffer will be + zeroed. + + + + If all VLAN IDs do not fit due to size, return + H_Constrained. + + + + Return H_Success + + +
+ +
+ GET_ILLAN_SWITCH_ID Subfunction Semantics + + + + parm-1 is an eight byte output descriptor. The high order byte of + an output descriptor is control, the next three bytes are a length field + of the buffer in bytes, and the low order four bytes are a TCE mapped I/O + address of the start of a buffer in I/O address space. The high order + control byte must be set to zero. The TCE mapped I/O address is mapped + via the first window pane of the + “ibm,my-dma-window” property. + + + + Validate parm-2 and parm-3 are set to zero, else return + H_Parameter. + + + + Validate the I/O address range is in the required DMA window and + is mapped by valid TCEs, else return H_Parameter. + + + + Transfer the GET_ILLAN_SWITCH_ID into the output buffer as + specified by the output descriptor. The data will be a string of ASCII + characters uniquely identifying the virtual switch to which the ILLAN + adapter is connected. Any unused space in the output buffer will be + zeroed. + + + + If the switch identifier does not fit due to size, return + H_Constrained. + + + + Return H_Success + + +
+ +
+ DISABLE_MIGRATION Subfunction Semantics + When this subfunction is implemented, the + “ibm,migration-control” property exists + in the + /vdevice OF device tree node. + + + + Validate that parm-1, parm-2, and parm-3 are all set to zero, + else return H_Parameter. + + + + If no partner is connected, then return H_Closed. + + + + Prevent the migration of the partner partition to the destination + server until either the ENABLE_MIGRATION subfunction is called or + H_FREE_CRQ is called. + + + + Return H_Success. + + +
+ +
+ ENABLE_MIGRATION Subfunction Semantics + When this subfunction is implemented, the + “ibm,migration-control” property exists + in the + /vdevice OF device tree node. + + + + Validate that parm-1, parm-2, and parm-3 are all set to zero, + else return H_Parameter. + + + + Validate that the migration of the partner partition to the + destination server was previously prevented with DISABLE_MIGRATION + subfunction, else return H_Parameter. + + + + Enable the migration of the partner partition. + + + + Return H_Success. + + +
+ +
+ GET_PARTNER_INFO Subfunction Semantics + + + + Parm-1 is an eight byte output descriptor. The high order byte of + an output descriptor is control, the next three bytes are a length field + of the buffer in bytes, and the low order four bytes are a TCE mapped I/O + address of the start of a buffer in I/O address space. The high order + control byte must be set to zero. The TCE mapped I/O address is mapped + via the first window pane of the + “ibm,my-dma-window” property. + + + + Validate parm-2 and parm-3 are set to zero, else return + H_Parameter. + + + + Validate the I/O address range is in the required DMA window and + is mapped by valid TCEs, else return H_Parameter. + + + + If the output buffer is not large enough to fit all the data, + then return H_Constrained. + + + + If no partner is connected and more than one possible partner + exists, then return H_Closed. + + + + Transfer the eight byte partner partition ID into the first eight + bytes of the output buffer. + + + + Transfer the eight byte unit address into the second eight bytes + of the output buffer. + + + + Transfer the NULL-terminated Converged Location Code associated + with the partner unit address and partner partition ID immediately + following the unit address. + + + + Zero any remaining output buffer. + + + + Return H_Success. + + +
+ +
+ GET_PARTNER_WWPN_LIST Subfunction Semantics + This subfunction is used to get the WWPNs for the partner from the + hypervisor. In this way, there is assurance that the WWPNs are + accurate. + + + + Parm-1 is an eight byte output descriptor. The high order byte of + an output descriptor is control, the next three bytes are a length field + of the buffer in bytes, and the low order four bytes are a TCE mapped I/O + address of the start of a buffer in I/O address space. The high order + control byte must be set to zero. The TCE mapped I/O address is mapped + via the first window pane of the + “ibm,my-dma-window” property. + + + + Validate parm-2 and parm-3 are set to zero, else return + H_Parameter. + + + + Validate the I/O address range is in the required DMA window and + is mapped by valid TCEs, else return H_Parameter. + + + + If the output buffer is not large enough to fit all the data, + return H_Constrained. + + + + If no partner is connected, return H_Closed. + + + + Transfer the first eight byte WWPN, which is represented in the + vfc-client node of the partner partition in the + “ibm,port-wwn-1” parameter, into the + first eight bytes of the output buffer. + + + + Transfer the second eight byte WWPN, which is represented in the + vfc-client node of the partner partition in the + “ibm,port-wwn-2” parameter, into the + second eight bytes of the output buffer. + + + + Zero any remaining output buffer. + + + + Return H_Success. + + +
+ +
+ DISABLE_ALL_VIO_INTERRUPTS Subfunction + Semantics + This subfunction is used to disable any and all the CRQ and Sub-CRQ + interrupts associated with the virtual IOA designated by the + unit-address, for VIOs that define the use of Sub-CRQs. Software that + controls a virtual IOA that does not define the use of Sub-CRQ facilities + should use the H_VIO_SIGNAL hcall() to disable CRQ interrupts. + + Programming Note: On platforms that implement the + partition migration option, after partition migration the support for + this subfunction might change, and the caller should be prepared to + receive an H_Not_Found return code indicating the platform does not + implement this subfunction. + + + + Validate parm-1, parm-2, and parm-3 are set to zero, else return + H_Parameter. + + + + Disable all CRQ and any Sub-CRQ interrupts associated with + unit-address. + + + + Return H_Success. + + +
+ +
+ DISABLE_VIO_INTERRUPT Subfunction Semantics + This subfunction is used to disable a CRQ or Sub-CRQ interrupt, for + VIOs that define the use of Sub-CRQs. The CRQ or Sub-CRQ is defined by + the unit-address and parm-1. Software that controls a virtual IOA that + does not define the use of Sub-CRQ facilities should use the H_VIO_SIGNAL + hcall() to disable CRQ interrupts. + + Programming Note: On platforms that implement the + partition migration option, after partition migration the support for + this subfunction might change, and the caller should be prepared to + receive an H_Not_Found return code indicating the platform does not + implement this subfunction. + + + + Parm-1 is the interrupt number of the interrupt to be disabled. + For an interrupt associated with a CRQ this number is obtained from the + “interrupts” property in the device tree + For an interrupt associated with a Sub-CRQ this number is obtained during + the registration of the Sub-CRQ (H_REG_SUB_CRQ). + + + + Validate parm-1 is a valid interrupt number for a CRQ or Sub-CRQ + for the virtual IOA defined by parm-1 and that parm-2 and parm-3 are set + to zero, else return H_Parameter. + + + + Disable interrupt specified by parm-1. + + + + Return H_Success. + + +
+ +
+ ENABLE_VIO_INTERRUPT Subfunction Semantics + This subfunction is used to enable a CRQ or Sub-CRQ interrupt, for + VIOs that define the use of Sub-CRQs. The CRQ or Sub-CRQ is defined by + the unit-address and parm-1. Software that controls a virtual IOA that + does not define the use of Sub-CRQ facilities should use the H_VIO_SIGNAL + hcall() to disable CRQ interrupts. + + Programming Note: On platforms that implement the + partition migration option, after partition migration the support for + this subfunction might change, and the caller should be prepared to + receive an H_Not_Found return code indicating the platform does not + implement this subfunction. + + + + Parm-1 is the interrupt number of the interrupt to be enabled. + For an interrupt associated with a CRQ this number is obtained from the + “interrupts” property in the device tree + For an interrupt associated with a Sub-CRQ this number is obtained during + the registration of the Sub-CRQ (H_REG_SUB_CRQ). + + + + Validate parm-1 is a valid interrupt number for a CRQ or Sub-CRQ + for the virtual IOA defined by unit-address and that parm-2 and parm-3 + are set to zero, else return H_Parameter. + + + + Enable interrupt specified by parm-1. + + + + Return H_Success. + + +
+ +
+ GET_ILLAN_MAX_VLAN_PRIORITY Subfunction Semantics + + + + Validate parm-1, parm-2, and parm-3 are set to zero, else return + H_Parameter. + + + + The hypervisor returns H_Success, with the maximum IEEE 802.1Q + VLAN priority returned in R4. If no priority limits are in place, the + maximum VLAN priority is returned in R4. + + +
+ +
+ GET_ILLAN_NUMBER_MAC_ACLS Subfunction Semantics + This subfunction allows the partition to allocate the correct + amount of space for the GET_MAC_ACLS Subfunction call. + + + + Validate parm-1, parm-2, and parm-3 are set to zero, else return + H_Parameter. + + + + The hypervisor returns H_Success, with the number of allowed MAC + addresses returned in R4. If no MAC access control limits are in place, 0 + is returned in R4. + + +
+ +
+ GET_MAC_ACLS Subfunction Semantics + + + + parm-1 is an eight byte output descriptor. The high order byte of + an output descriptor is control, the next three bytes are a length field + of the buffer in bytes, and the low order four bytes are a TCE mapped I/O + address of the start of a buffer in I/O address space. The high order + control byte must be set to zero. The TCE mapped I/O address is mapped + via the first window pane of the + “ibm,my-dma-window” property. + + + + Validate parm-2 and parm-3 are set to zero, else return + H_Parameter. + + + + Validate the I/O address range is in the required DMA window and + is mapped by valid TCEs, else return H_Parameter. + + + + Transfer the allowed MAC addresses into the output buffer as + specified by the output descriptor. The data will be an array of 8 byte + values containing the allowed MAC address, with the low order 6 bytes + containing the 6 byte MAC address. Any unused space in the output buffer + are zeroed. + + + + If all allowed MAC addresses do not fit due to size, return + H_Constrained. + + + + Return H_Success + + +
+ +
+ GET_PARTNER_UUID Subfunction Semantics + + + + Validate parm-1, parm-2 and parm-3 are set to zero, else return + H_Parameter. + + + + If no partner is connected and more than one possible partner + exists, then return H_Closed. + + + + Transfer into registers R4 (High order 8 bytes) and R5 (low order + 8 bytes) of the UUID of the client partition that owns the virtual device + ( + for the format of the UUID string. + + + + Return H_Success + + +
+ +
+ FW_Reset Subfunction Semantics + This H_VIOCTL subfunction will reset the VNIC firmware associated + with a VNIC client adapter, if currently active. This subfunction is + useful when the associated firmware becomes unresponsive to other + CRQ-based commands. For the case of vTPMs the firmware will be left + inoperable until the client partition next boots up. + + + Semantics: + + + + Validate that parm-1, parm-2, and parm-3 are all set to zero, + else return H_Parameter. + + + + If the firmware associated with the virtual adapter can not be + reset, return H_Constrained. + + + + Reset the firmware associated with the virtual adapter. + + + + Return H_Success. + + + +
+ +
+ GET_ILLAN_SWITCHING_MODE Subfunction Semantics + + + + Validate parm-1, parm-2, and parm-3 are set to zero, else return + H_Parameter. + + + + Validate that the given virtual IOA is a ILLAN adapter with the + "ibm,trunk-adapter", else return H_Parameter. + + + + The hypervisor returns H_Success, with the current switching mode + in R4. If the switching mode is VEB mode, R4 will have a 0. If the + switching mode is VEPA mode, R4 will have a 1. + + +
+ +
+ DISABLE_INACTIVE_TRUNK_RECEPTION Subfunction + Semantics: + This subfunction is used to disable the reception of all packets + for a ILLAN trunk adapter that is not the Active Trunk Adapter as set by + the H_ILLAN_ATTRIBUTES hcall. + + Note: The default value for this attribute is + ENABLED. The value is reset on a successful H_FREE_LOGICAL_LAN hcall or + reboot/power change of the partition owning the ILLAN adapter. + + + + Validate parm-1, parm-2, and parm-3 are set to zero, else return + H_Parameter. + + + + Validate that the given virtual IOA is a ILLAN adapter with the + "ibm,trunk-adapter", else return H_Parameter. + + + + The hypervisor disables reception of packets for this adapter + when it is not the Active Trunk Adapter. + + + + Return H_Success. + + +
+
+ +
+ +
+ Partition Managed Class Infrastructure - General + In addition to the general requirements for all VIO described in + , the architecture for the + partition managed class of VIO defines several other + infrastructures: + + + + + A Command/Response Queue (CRQ) that allows communications back + and forth between the server partition and its partner partition (see + ). + + + + A Subordinate CRQ (Sub-CRQ) facility that may be used in + conjunction with the CRQ facility, when the CRQ facility by itself is not + sufficient. That is, when more than one queue with more than one + interrupt is required by the virtual IOA. See + . + + + + A mechanism for doing RDMA, which includes: + + + + A mechanism called Copy RDMA that can be used by the device + driver to move blocks of data between memory of the server and partner + partitions + + + + A mechanism for Redirected RDMA that allows the device driver to + direct DMA of data from the server partition’s physical IOA to or + from the partner partition’s memory (see + ). + + + + + + The mechanisms for the synchronous type VIO are described as + follows: + + + + + + + +   + +
+ Command/Response Queue (CRQ) + The CRQ facility provides ordered delivery of messages between + authorized partitions. The facility is reliable in the sense that the + messages are delivered in sequence, that the sender of a message is + notified if the transport facility is unable to deliver the message to + the receiver’s queue, and that a notification message is delivered + (providing that there is free space on the receive queue), or if the + partner partition either fails or deregisters its half of the transport + connection. The CRQ facility does not police the contents of the payload + portions (after the 1 byte header) of messages that are exchanged between + the communicating pairs, however, this architecture does provide means + (via the Format Byte) for self describing messages such that the + definitions of the content and protocol between using pairs may evolve + over time without change to the CRQ architecture, or its + implementation. + The CRQ is used to hold received messages from the partner + partition. The CRQ owner may optionally choose to be notified via an + interrupt when a message is added to their queue. + +
+ CRQ Format and Registration + The CRQ is built of one or more 4 KB pages aligned on a 4 KB + boundary within partition memory. The queue is organized as a circular + buffer of 16 byte long elements. The queue is mapped into contiguous I/O + addresses via the TCE mechanism and RTCE table (first window pane). The + I/O address and length of the queue are registered by + . This registration process + tells the hypervisor where to find the virtual IOA’s CRQ. +
+ +
+ CRQ Entry Format + Each CRQ entry consists of a 16 byte element. The first byte of a + CRQ entry is the Header byte and is defined in + . +   + + CRQ Entry Header Byte Values + + + + + + + + + Header Value + + + + + Description + + + + + + + + 0 + + + Element is unused -- all other bytes in the element are + undefined + + + + + 0x01 - 0x7F + + + Reserved + + + + + 0x80 + + + Valid Command/Response entry -- the second byte defines + the entry format (for example, see + ). + + + + + 0x81 - 0xBF + + + Reserved + + + + + 0xC0 + + + Valid Initialization Command/Response entry -- the second + byte defines the entry format. See + . + + + + + 0xC1 - 0xFE + + + Reserved + + + + + 0xFF + + + Valid Transport Event -- the second byte defines the + specific transport event. See + . + + + + +
+ The platform (transport mechanism) ignores the contents of all + non-header bytes in all CRQ entries. + Valid Command/Response entries (Header byte 0x80) are used to carry + data between communicating partners, transparently to the platform. The + second byte of the entry is reserved for a Format byte to enable the + definitions of the content and protocol between using pairs to evolve + over time. The definition of the second byte of the Valid + Command/Response entry is beyond the scope of this architecture. + presents example VSCSI format + byte values. + The Valid Initialization Command/Response entry (Header byte 0xC0) + is used during virtual IOA initialization sequences. The second byte of + this type entry is architected and is as defined in + . This format is used for + initialization operations between communicating partitions. The remaining + bytes (byte three and beyond) of the Valid Initialization + Command/Response entry are available for definition by the communicating + entities. +   + + Initialization Command/Response Entry Format Byte + Definitions + + + + + + + + + Format Byte Value + + + + + Definition + + + + + + + + 0x0 + + + Unused + + + + + 0x1 + + + Initialize + + + + + 0x2 + + + Initialization Complete + + + + + 0x03 - 0xFE + + + Reserved + + + + + 0xFF + + + Reserved for Expansion + + + + +
+ Valid Transport Events (Header byte 0xFF) are used by the platform + to notify communicating partners of conditions associated with the + transport channel, such as the failure of the partner’s partition + or the deregistration of the partner’s queue. The partner’s + queue may be deregistered as a means of resetting the transport channel + or simply to terminate the connection. When the Header byte of the queue + entry specifies a Valid Transport Event, then the second byte of the CRQ + entry defines the type of transport event. The Format byte (second byte) + of a Valid Transport Event queue entry is architected and is as defined + in + ). +   + + Transport Event Codes + + + + + + + + + Code Value + + + + + Explanation + + + + + + + + 0 + + + Unused + + + + + 1 + + + Partner partition failed + + + + + 2 + + + Partner partition deregistered CRQ + + + + + 3 + + +   + + + + + 4 + + +   + + + + + 5 + + +   + + + + + 6 + + + Partner partition suspended (for the Partition Suspension + option) + + + + + 0x07 - 0xFF + + + Reserved + + + + +
+ The “partner partition suspended” transport event + disables the associated CRQ such that any H_SEND_CRQ hcall() ( + ) to the associated CRQ returns + H_Closed until the CRQ has been explicitly enabled using the H_ENABLE_CRQ + hcall (See + ). +
+ +
+ CRQ Entry Processing + Prior to the partition software registering the CRQ, the partition + software sets all the header bytes to zero (entry invalid). After + registration, the first valid entry is placed in the first element and + the process proceeds to the end of the queue and then wraps around to the + first entry again (given that the entry has been subsequently marked as + invalid). This allows both the partition software and transport firmware + to maintain independent pointers to the next element they will be + respectively using. + A sender uses an infrastructure dependent method to enter a 16 byte + message on its partner’s queue (see + ). Prior to enqueueing an entry + on the CRQ, the platform first checks if the session to the + partner’s queue is open, and there is a free entry, if not, it + returns an error. If the checks succeed, the contents of the message is + copied into the next free queue element, potentially notifying the + receiver, and returns a successful status to the caller. + At the receiver’s option, it may be notified via an interrupt + when an element is enqueued to its CRQ. See + . + When the receiver has finished processing a queue entry, it writes + the header to the value 0x00 to invalidate the entry and free it for + future entries. + Should the receiver wish to terminate or reset the communication + channel it deregisters the queue, and if it needs to re-establish + communications, proceeds to register either the same or different section + of memory as the new queue, with the queue pointers reset to the first + entry. +
+ +
+ CRQ Facility Interrupt Notification + The receiver can set the virtual interrupt associated with its CRQ + to one of two modes. These are: + + + + Disabled (An enqueue interrupt is not signaled.) + + + + Enabled (An enqueue interrupt is signaled on every + enqueue) + + + + Note: An enqueue is considered a pulse not a level. + The pulse then sets the memory element within the emulated interrupt + source controller. This allows the resetting of the interrupt condition + by simply issuing the H_EOI hcall() as is done with the PCI MSI + architecture rather than having to do an explicit interrupt reset as in + the case with PCI Level Sensitive Interrupt (LSI) architecture. + The interrupt mechanism is capable of presenting only one interrupt + signal at a time from any given interrupt source. Therefore, no + additional interrupts from a given source are ever signaled until the + previous interrupt has been processed through to the issuance of an H_EOI + hcall(). Specifically, even if the interrupt mode is enabled, the effect + is to interrupt on an empty to non-empty transition of the queue. + However, as with any asynchronous posting operation race conditions are + to be expected. That is, an enqueue can happen in a window around the + H_EOI hcall(). Therefore, the receiver should poll the CRQ after an H_EOI + to prevent losing initiative. + See ) for + information about interrupt control. +
+ +
+ Extensions to Other hcall()s for CRQ + + +
+ H_MIGRATE_DMA + Since the CRQ is RTCE table mapped, the H_MIGRATE_DMA hcall() may + be requested to move a page that is part of the CRQ. The OS owner of the + queue is responsible for preventing its processors from modifying the + page during the migrate operation (as is standard practice with this + hcall()), however, the H_MIGRATE_DMA hcall() serializes with the CRQ + hcall()s to direct new elements to the migrated target page. +
+ +
+ H_XIRR, H_EOI + The CRQ facility utilizes a virtual interrupt source number to + notify the queue owner of new element enqueues. The standard H_XIRR and + H_EOI hcall()s are extended to support this virtual interrupt mechanism, + emulating the standard PowerPC Interrupt hardware with respect to the + virtual interrupt source number. +
+
+
+ CRQ Facility Requirements + + + + R1--1. + + For the CRQ facility: The platform must implement the + CRQ as specified in + . + + + + + R1--2. + + For the CRQ facility: The platform must reject CRQ + definitions that are not 4 KB aligned. + + + + + R1--3. + + For the CRQ facility: The platform must reject CRQ + definitions that are not a multiple of 4 KB long. + + + + + R1--4. + + For the CRQ facility: The platform must reject CRQ + definitions that are not mapped relative to the TCE mapping defined by + the first window pane of the virtual IOA’s + “ibm,my-dma-window” property. + + + + + R1--5. + + For the CRQ facility: + The platform must + start enqueueing Commands/Responses to the newly registered CRQ starting + at offset zero and proceeding as in a circular buffer, each entry being + 16 byte aligned. + + + + + R1--6. + + For the CRQ facility: + The platform must + enqueue Commands/Responses only if the 16 byte entry is free (header byte + contains 0x00), else the enqueue operation fails. + + + + + R1--7. + + For the CRQ facility: The platform must enqueue the + 16 bytes specified in the validated enqueue request as specified in + Requirement + except as required by + Requirement + . + + + + + R1--8. + + For the CRQ facility: + The platform must + not enqueue commands/response entries if the CRQ has not been registered + successfully or if after a successful completion, has subsequently + deregistered the CRQ. + + + + + R1--9. + + For the CRQ facility: The platform (transport + mechanism) must ignore and must not modify the contents of all non-header + bytes in all CRQ entries. + + + + + R1--10. + + For the CRQ facility: The first byte of a CRQ entry + must be the Header byte and must be as defined in + . + + + + + R1--11. + + For the CRQ facility: The Format byte (second byte) + of a Valid Initialization CRQ entry must be as defined in + . + + + + + R1--12. + + For the CRQ facility: The Format byte (second byte) + of a Valid Transport Event queue entry must be as defined in + . + + + + + R1--13. + + For the CRQ facility: If the partner partition fails, + then the platform must enqueue a 16 byte entry starting with 0xFF01 (last + 14 bytes unspecified) as specified in Requirement + except as required by + Requirements + and + . + + + + + R1--14. + + For the CRQ facility: If the partner partition + deregisters its corresponding CRQ, then the platform must enqueue a 16 + byte entry starting with 0xFF02 (last 14 bytes unspecified) as specified + in Requirement + except as required by + Requirements + and + . + + + + + R1--15. + + + Reserved + + + + + R1--16. + + For the CRQ facility with the Partner Control + option: If the partner partition is terminated by request of + this partition via the + ibm,partner-control RTAS call, then the platform must + enqueue a 16 byte entry starting with 0xFF04 (last 14 bytes unspecified) + as specified in Requirement + except as required by + Requirements + and + when the partner partition has + been successfully terminated. + + + + + R1--17. + + + Reserved + + + + + R1--18. + + For the CRQ facility option: Platforms that implement + the H_MIGRATE_DMA hcall() must implement that function for pages mapped + for use by the CRQ. + + + + + R1--19. + + For the CRQ facility: The platforms must emulate the + standard PowerPC External Interrupt Architecture for the interrupt source + numbers associated with the virtual devices via the standard RTAS and + hypervisor interrupt calls and must extend H_XIRR and H_EOI hcall()s as + appropriate for CRQ interrupts. + + + + + R1--20. + + For the CRQ facility: The platform’s OF must + disable interrupts from the using virtual IOA before initially passing + control to the booted partition program. + + + + + R1--21. + + For the CRQ facility: The platform’s OF must + disable interrupts from the using virtual IOA upon registering the + IOA’s CRQ. + + + + + R1--22. + + For the CRQ facility: The platform’s OF must + disable interrupts from the using virtual IOA upon deregistering the + IOA’s CRQ. + + + + + R1--23. + + For the CRQ facility: The platform must present (as + appropriate per RTAS control of the interrupt source number) the + partition owning a CRQ the appearance of an interrupt, from the interrupt + source number associated, through the OF device tree node, with the + virtual device, when a new entry is enqueued to the virtual + device’s CRQ and when the last interrupt mode set was + “Enabled”, unless a previous interrupt from the interrupt + source number is still outstanding. + + + + + R1--24. + + For the CRQ facility: The platform must not present + the partition owning a CRQ the appearance of an interrupt, from the + interrupt source number associated, through the OF device tree node, with + the virtual device, if the last interrupt mode set was + “Disabled”, unless a previous interrupt from the interrupt + source number is still outstanding. + + + +
+
+ +
+ Redirected RDMA (Using H_PUT_RTCE, and + H_PUT_RTCE_INDIRECT) + A server partition uses the hypervisor function, H_PUT_RTCE, which + takes as a parameter the opaque handle (LIOBN) of the partner + partition’s RTCE table (second window pane of + “ibm,my-dma-window”), an offset in the + RTCE table, the handle for one of the server partition's I/O adapter TCE + tables plus an offset within the I/O adapter's TCE table. H_PUT_RTCE then + copies the appropriate contents of the partner partition's RTCE table + into the server partition's I/O adapter TCE table. In effect, this + hcall() allows the server partition's I/O adapter to have access to a + specific section of the partner partition's memory as if it were the + server partition's memory. However, the partner partition, through the + hypervisor, maintains control over exactly which areas of the partner + partition's memory are made available to the server partition without the + overhead of the hypervisor having to directly handle each byte of the + shared data. + The H_PUT_RTCE_INDIRECT, if implemented, takes as an input + parameter a pointer to a list of offsets into the RTCE table, and builds + the TCEs similar to the H_PUT_RTCE, described above. + A server partition uses the hypervisor function, H_REMOVE_RTCE, to + back-out TCEs generated by the H_PUT_RTCE and H_PUT_RTCE_INDIRECT + hcall()s. + The following rules guide the definition of the RTCE table entries + and implementation of the H_PUT_RTCE, H_PUT_RTCE_INDIRECT, H_REMOVE_RTCE, + H_MASS_MAP_TCE, H_PUT_TCE, H_PUT_TCE_INDIRECT, and H_STUFF_TCE hcall()s. + Other implementations that provide the same external appearance as these + rules are acceptable. The architectural intent is to provide RDMA + performance essentially equivalent to direct TCE operations. + + + + The partner partition's RTCE table is itself never directly + accessed by an I/O Adapter (IOA), it is only accessed by the hypervisor, + and therefore it can be a bigger structure than the regular TCE table as + accessed by hardware (more fields). + + + + When a server partition asks (via an H_PUT_RTCE or + H_PUT_RTCE_INDIRECT hcall()) to have an RTCE table TCE copied to one of + the server partition's physical IOA's TCEs, or asks (via an + H_REMOVE_RTCE) to have an RTCE table entry removed from one of the server + partition’s physical IOA’s TCEs, the hypervisor atomically, + with respect to all RTCE table readers, sets (H_PUT_RTCE or + H_PUT_RTCE_INDIRECT) or removes (H_REMOVE_RTCE) a field in the copied + RTCE table entry + This is an example of where the earlier statement “Other + implementations that provide the same external appearance as these + rules are acceptable” comes into affect. For example, for an RTCE + table that is mapped with H_MASS_MAP_TCE, the pointer may not be in a + field of the actual TCE in the RTCE table, but could, for example, be + in a linked list, or other such structure, due to the fact that there + is not a one-to-one correspondence from the RTCE to the physical IOA + TCE in that case (H_MASS_MAP_TCE can map up to an LMB into one TCE, and + physical IOA TCEs only map 4 KB). + . This field is a pointer to the copy of the RTCE table TCE in + the server partition’s IOA’s TCE table. (A per RTCE table TCE + lock is one method for the atomic setting of the copied RTCE table TCE + link pointer.) + + + + If a server partition tries to get another copy of the same RTCE + table TCE it gets an error return (multiple mappings of the same physical + page are allowed, they just need to use different RTCE table TCEs just + like with physical IOA TCEs). + + + + When the partner partition issues an H_PUT_TCE, + H_PUT_TCE_INDIRECT, H_STUFF_TCE, or H_MASS_MAP hcall() to change his RTCE + table, the hypervisor finds the TCE tables in one of several states. A + number of these states represent unusual conditions, that can arise from + timing windows or error conditions. The hypervisor rules for handling + these cases are chosen to minimize its overhead while preventing one + partition’s errors from corrupting another partition’s + state. + + + + The RTCE table TCE is not currently in use: Clear/invalidate the + TCE copy pointer and enter the RTCE table TCE mapping per the input + parameters to the hcall(). + + + + The RTCE table TCE contains a valid mapping and the TCE copy + pointer is invalid (NULL or other implementation dependent value) (The + previous mapping was never used for Redirected RDMA): Enter the RTCE + table TCE mapping per the input parameters to the hcall(). + + + + The RTCE table TCE contains a valid mapping and the TCE copy + pointer references a TCE that does not contain a valid copy of the + previous mapping in the RTCE table TCE. (The previous mapping was used + for Redirected RDMA, however, the server partition has moved on and is no + longer targeting the page represented by the old RTCE table TCE mapping): + Clear/invalidate the TCE copy pointer and enter the RTCE table TCE + mapping per the input parameters to the hcall(). + + + + The RTCE table TCE contains a valid mapping and the TCE copy + pointer references a TCE that does contain a valid copy of the previous + mapping in the RTCE table TCE (the previous mapping is still potentially + in use for Redirected RDMA, however, the partner partition has moved on + and is no longer interested in the previous I/O operation). The server + partition’s IOA may still target a DMA operation against the TCE + containing the copy of the RTCE table TCE mapping. The assumption is that + any such targeting is the result of a timing window in the recovery of + resources in the face of errors. Therefore, the server partition’s + TCE is considered invalid, but the server partition may or may not be + able to immediately invalidate the TCEs. For more information on + invalidation of TCEs, see + . The H_Resource return from an + H_PUT_TCE, H_PUT_TCE_INDIRECT, and H_STUFF_TCE may be used to hold off + invalidation in this case. + + + + + + If a server partition terminates, the partner partition’s + device drivers time out the operations and resource recovery code + recovers the RTCE table TCEs. If the partner partition terminates, the + hypervisor scans the RTCE table and eventually invalidates all active + copies of RTCE table TCEs. For more information on invalidation of TCEs, + see . + + + + The server partition may use any of the supported hcall()s (see + ) to manage the TCE tables used + by its IOAs. No extra restrictions are made to changes of the server + partition's TCE table beside those stated in 2 above. The server + partition can only target its own memory or the explicitly granted + partner partition’s memory. + + + + The H_MIGRATE_DMA hcall() made by a partner partition migrates + the page referenced by the RTCE table TCE but follows the RTCE table TCE + copy pointer, if valid, to the server partition’s IOA’s TCE + table to determine which IOA’s DMA to disable, thus allowing + migration of partner partition pages underneath server partition DMA + activity. In this case, however, the H_MIGRATE_DMA algorithm is modified + such that server partition’s IOA’s TCE table is atomically + updated, after the page migration but prior to enabling the IOA’s + DMA, only when its contents still are a valid copy of the partner + partition’s RTCE table TCE contents. The H_MIGRATE_DMA hcall() also + serializes with H_PUT_RTCE so that new copies of the RTCE table TCE are + not made during the migration of the underlying page. + + + + The server partition should never call H_MIGRATE_DMA for any + Redirected RDMA mapped pages, however, to check, the H_MIGRATE_DMA + hcall() is enhanced to check the Logical Memory Block (LMB) owner in the + TCE and reject the call if the LMB did not belong to the + requester. + + + +
+ H_PUT_RTCE + This hcall() maps “count” number of contiguous TCEs in + an RTCE to the same number of contiguous IOA TCEs. The H_REMOVE_RTCE + hcall() is used to back-out TCEs built with H_PUT_RTCE hcall(). + for that hcall(). + + + Syntax: + + + + + + + Parameters: + + + + r-liobn: Handle of RDMA RTCE table + + + + r-ioba: IO address per RDMA RTCE table + + + + liobn: Logical I/O Bus Number of server TCE table + + + + ioba: I/O address as seen by server IOA + + + + count: Number of consecutive 4 KB pages to map + + + + + + Semantics: + + + + Validates r-liobn is from the second triple (second window pane) + of the server partition’s + “ibm,my-dma-window” property, else return + H_Parameter. + + + + Validates r-ioba plus (count * 4 KB) is within range of RTCE + table as specified by the window pane as specified by the r-liobn, else + return H_Parameter. + + + + Validates that the TCE table associated with liobn is owned by + calling partition, else return H_Parameter. + + + + If the Shared Logical Resource option is implemented and the + LIOBN, represents a logical resource that has been rescinded by the + owner, return H_RESCINDED. + + + + + + Validates that ioba plus (count * 4 KB) is within the range of + TCE table specified by liobn, else return H_Parameter. + + + + If the Shared Logical Resource option is implemented and the IOBA + represents a logical resource that has been rescinded by the owner, + return H_RESCINDED. + + + + + + For count entries + + + + The following is done in a critical section with respect to + updates to the r-ioba entry of the RTCE table TCE + + + + Check that the r-ioba entry of the RTCE table contains a valid + mapping (this requires having a completed partner connection), else + return H_R_Parm with the value of the loop count in R4. + + + + Prevent multiple redirected mappings of the same r-ioba: If the + r-ioba entry of the RTCE table TCE contains a valid pointer, and if that + pointer references a TCE that is a clone of the r-ioba entry of the RTCE + table TCE, then return H_Resource with the value of the loop count in + R4. + + + + Copy the DMA address mapping from the r-ioba entry of the r-liobn + RTCE table to the ioba entry of the liobn TCE table and save a pointer to + the ioba entry of the liobn TCE table in the r-ioba entry of the r-liobn + RTCE table, or in a separate structure associated with the r-liobn RTCE + table. + + + + + + End Loop (The critical section lasts for one iteration of the + loop) + + + + + + Return H_Success + + + + Implementation Note: The PA requires the OS to issue a sync + instruction to proceed the signalling of an IOA to start an IO operation + involving DMA to guarantee the global visibility of both DMA and TCE + data. This hcall() does not include a sync instruction to guarantee + global visibility of TCE data and in no way diminishes the requirement + for the OS to issue it. + + Implementation Note: The execution time for this hcall() is + expected to be a linear function of the count parameter. Excessive size + of the count parameter may cause an extended delay. + +
+ +
+ H_PUT_RTCE_INDIRECT + This hcall() maps “count” number of potentially + non-contiguous TCEs in an RTCE to the same number of contiguous IOA TCEs. + The H_REMOVE_RTCE hcall() is used to back-out TCEs built with the + H_PUT_RTCE_INDIRECT hcall(). + for that hcall(). + + + Syntax: + + + + + + + Parameters: + + + + buff-addr: The Logical Address of a page (4 KB, 4 KB boundary) + containing a list of r-ioba to be mapped via using the r-liobn RTCE + table + + + + r-liobn: Handle of RTCE table to be used with r-ioba entries in + indirect buffer (second window pane from server + “ibm,my-dma-window” + + + + liobn: Logical I/O Bus Number of server TCE table + + + + ioba: I/O address as seen by server IOA + + + + count: Number of consecutive IOA bus 4 KB pages to map (number of + entries in buffer) + + + + + + Semantics: + + + + Validates r-liobn is from the second triple (second window pane) + of the server partition’s + “ibm,my-dma-window” property, else return + H_Parameter. + + + + Validates buff-addr points to the beginning of a 4 KB page owned + by the calling partition, else return H_Parameter. + + + + If the Shared Logical Resource option is implemented and the + logical address’s page number represents a page that has been + rescinded by the owner, return H_RESCINDED. + + + + + + Validates that the TCE table associated with liobn is owned by + calling partition, else return H_Parameter. + + + + If the Shared Logical Resource option is implemented and the + LIOBN represents a logical resource that has been rescinded by the owner, + return H_RESCINDED. + + + + + + Validates that ioba plus (count * 4 KB) is within the range of + TCE table specified by liobn, else return H_Parameter. + + + + If the Shared Logical Resource option is implemented and the IOBA + represents a logical resource that has been rescinded by the owner, + return H_RESCINDED. + + + + + + If the count field is greater than 512 return H_Parameter. + + + + Copy (count * 8) bytes from the page specified by buff-addr to a + temporary hypervisor page for contents verification and processing (this + avoids the problem of the caller changing call by reference values after + they are checked). + + + + For count entries: + + + + Validate the r-ioba entry in the temporary page is within range + of RTCE table as specified by r-liobn, else place the count number in R4 + and return H_R_Parm. + + + + n End loop + + + + + + For count validated entries in the hypervisor's temporary + page: + + + + The following is done in a critical section with respect to + updates to the r-ioba entry of the RTCE + + + + Check that the r-ioba entry of the r-liobn RTCE table contains a + valid mapping (this requires having a completed partner connection), else + return H_R_Parm with the count number in R4. + + + + Prevent multiple redirected mappings of the same r-ioba: If the + r-ioba entry of the r-liobn RTCE table contains a valid pointer, and if + that pointer references a TCE entry that is a clone of the r-ioba entry + of the RTCE table, then return H_Resource with the count number in + R4. + + + + Copy the DMA address mapping from the r-ioba entry of the r-liobn + RTCE table to the ioba entry of the liobn TCE table and save a pointer to + the ioba entry of the liobn TCE table in the r-ioba entry of the r-liobn + RTCE table, or into a separate structure associated with the r-liobn RTCE + table. + + + + + + End Loop (The critical section lasts for one iteration of the + loop) + + + + + + Return H_Success + + + + Implementation Note: The PA requires the OS to issue + a sync instruction to proceed the signalling of an IOA to start an IO + operation involving DMA to guarantee the global visibility of both DMA + and TCE data. This hcall() does not include a sync instruction to + guarantee global visibility of TCE data and in no way diminishes the + requirement for the OS to issue it. + + Implementation Note: The execution time for this + hcall is expected to be a linear function of the count parameter. + Excessive size of the count parameter may cause an extended delay. + +
+ +
+ H_REMOVE_RTCE + The H_REMOVE_RTCE hcall() is used to back-out TCEs built with + H_PUT_RTCE and H_PUT_RTCE_INDIRECT hcall()s. That is, to remove the TCEs + from the IOA TCE table and links put into the RTCE table as a result of + the H_PUT_RTCE or H_PUT_RTCE_INDIRECT hcall()s. + + + Syntax: + + + + + + + Parameters: + + + + r-liobn: Handle of RDMA RTCE table + + + + r-ioba: IO address per RDMA RTCE table + + + + liobn: Logical I/O Bus Number of server TCE table + + + + ioba: I/O address as seen by server IOA + + + + count: Number of consecutive 4 KB pages to unmap + + + + tce-value: TCE value to be put into the IOA TCE(s) after setting + the “Page Mapping and Control” bits to “Page fault (no + access)”. + + + + + + Semantics: + + + + Validates r-liobn is from the second triple (second window pane) + of the server partition’s + “ibm,my-dma-window” property, else return + H_Parameter. + + + + Validates r-ioba plus (count * 4 KB) is within range of RTCE + table as specified by the window pane as specified by the r-liobn, else + return H_Parameter. + + + + Validates that the TCE table associated with liobn is owned by + calling partition, else return H_Parameter. + + + + If the Shared Logical Resource option is implemented and the + LIOBN, represents a logical resource that has been rescinded by the + owner, return H_RESCINDED. + + + + + + Validates that ioba plus (count * 4 KB) is within the range of + TCE table specified by liobn, else return H_Parameter. + + + + If the Shared Logical Resource option is implemented and the IOBA + represents a logical resource that has been rescinded by the owner, + return H_RESCINDED. + + + + + + For count entries + + + + The following is done in a critical section with respect to + updates the r-ioba entry of the RTCE table TCE + + + + If it exists, invalidate the pointer in the r-ioba entry of the + r-liobn RTCE table (or in a separate structure associated with the + r-liobn RTCE table). + + + + Replace the ioba entry of the liobn TCE table with tce-value + after setting the “Page Mapping and Control” bits to + “Page fault (no access)”. + + + + + + n End Loop (The critical section lasts for one iteration of the + loop) + + + + + + Return H_Success + + + + Implementation Note: The execution time for this hcall() is + expected to be a linear function of the count parameter. Excessive size + of the count parameter may cause an extended delay. + +
+ +
+ Redirected RDMA TCE Recovery and In-Flight DMA + There are certain error or error recovery scenarios that may + attempt to unmap a TCE in an IOA’s TCE table prior to the + completion of the operation which setup the TCE. For example: + + + + A client attempts to H_PUT_TCE to its DMA window pane, which is + mapped to the second window pane of the server’s DMA window, and + the TCE in the RTCE table which is the target of the H_PUT_TCE already + points to a valid TCE in an IOA’s TCE table. + + + + A client attempts to H_FREE_CRQ and the server’s second + window pane for that virtual IOA contains a TCE which points to a valid + TCE in an IOA’s TCE table. + + + + A client partition attempts to reboot (which essentially is an + H_FREE_CRQ). + + + + A server attempts to H_FREE_CRQ and the server’s second + window pane for that virtual IOA contains a TCE which points to a valid + TCE in an IOA’s TCE table. + + + + In such error and error recovery situations, the hypervisor + attempts to prevent the changing of an IOAs TCE to a value that would + cause a non-recoverable IOA error. One method that the hypervisor may use + to accomplish this is that on a TCE invalidation operation, set the value + of the read and write enable bits in the TCE to allow DMA writes but not + reads, and to change the real page number in the TCE to target a dummy + page. In this case the IOA receives an error (Target Abort) on attempts + to read, while DMA writes (which were for a defunct operation) are + silently dropped. This works well when all the following are true: + + + + The platform supports separate TCE read and write enable bits in + the TCE + + + + EEH is enabled and the DD can recover from the MMIO Stopped and + DMA Stopped states + + + + The IOA and the IOA’s DD can recover gracefully from Target + Aborts (which are received on a read to a page where the read enable bit + is off) + + + + If these conditions are not true then the hypervisor will need to + try to prevent or delay invalidation of the TCEs. The H_Resource return + from the H_FREE_CRQ, H_PUT_TCE, H_PUT_TCE_INDIRECT, and H_STUFF_TCE can + be used to hold-off the invalidation until which time the IOA can + complete the operation and the server can invalidate the IOA’s TCE. + In addition, the Bit Bucket Allowed LIOBN attribute and the + H_LIOBN_ATTRIBUTES hcall can be used to help enhance the recoverability + in these error scenarios (see + and + for more information). +
+ +
+ LIOBN Attributes + There are certain LIOBN attributes that are made visible to and can + be manipulated by partition software. The H_LIOBN_ATTRIBUTES hcall is + used to read and modify the attributes (see + ). + defines the attributes that are + visible and manipulatable. +   + + LIOBN Attributes + + + + + + + + + Bit(s) + + + + + Field Name + + + + + Definition + + + + + + + + 0-62 + + + Reserved + + +   + + + + + 63 + + + Bit Bucket Allowed + + + 1: For an indirect IOA TCE invalidation operation (that + is, via an operation other than an H_PUT_TCE directly to the + TCE by the partition owning the IOA), the platform may set the + value of the read and write enable bits in the TCE to allow DMA + writes but not reads and change the real page number in the TCE + to target a dummy page (the IOA receives an error (Target + Abort) on attempts to read, while DMA writes (which were for a + defunct operation) are silently dropped). + 0: The platform must reasonably attempt to prevent an + indirect (that is, via an operation other than an H_PUT_TCE + directly to the TCE by the partition owning the IOA) + modification an IOA’s valid TCE so that a possible + in-flight DMA does not cause a non-recoverable error. + Software Implementation Notes: + + + + The results of changing this field when there are + valid TCEs for the LIOBN may produce unexpected results. The + hypervisor is not required to prevent such an operation. + Therefore, the H_LIOBN_ATTRIBUTES call to change the value of + this field should be made when there are no valid TCEs in the + table for the IOA. + + + + This field may be implemented but not changeable (the + actual value will be returned in R4 as a result of the + H_LIOBN_ATTRIBUTES hcall() regardless, with a status of + H_Constrained if not changeable). + + + + + + + +
+
+ +
+ H_LIOBN_ATTRIBUTES + + + + R1--1. + + If the H_LIOBN_ATTRIBUTES hcall is + implemented, then it must implement the attributes as they are defined in + + and the syntax and semantics as + defined in + . + + + + + R1--2. + + The H_LIOBN_ATTRIBUTES hcall must + ignore bits in the set-mask and reset-mask which are not implemented and + must process as an exception those which cannot be changed (H_Constrained + returned), and must return the following for the LIOBN Attributes in + R4: + + + + + + + A value of 0 for unimplemented bit positions. + + + + The resultant field values for implemented fields. + + + + + Syntax: + + + + + + + Parameters: + liobn: The LIOBN on which this Attribute modification is to be + performed. + reset-mask: The bit-significant mask of bits to be reset in the + LIOBN’s Attributes (the reset-mask bit definition aligns with the + bit definition of the LIOBN’s Attributes, as defined in + ). The complement of the + reset-mask is ANDed with the LIOBN’s Attributes, prior to applying + the set-mask. See semantics for more details on any field-specific + actions needed during the reset operations. If a particular field + position in the LIOBN Attributes is not implemented, then the + corresponding bit(s) in the reset-mask are ignored. + set-mask: The bit-significant mask of bits to be set in the + LIOBN’s Attributes (the set-mask bit definition aligns with the bit + definition of the LIOBN’s Attributes, as defined in + ). The set-mask is ORed with + the LIOBN’s Attributes, after to applying the reset-mask. See + semantics for more details on any field-specific actions needed during + the set operations. If a particular field position in the LIOBN + Attributes is not implemented, then the corresponding bit(s) in the + set-mask are ignored. + + + + Semantics: + + + + Validate that liobn belongs to the partition, else + H_Parameter. + + + + If the Bit Bucket Allowed field of the specified LIOBN’s + Attributes is implemented and changeable, then set it to the result + of: + Bit Bucket Allowed field contents ANDed with the complement of the + corresponding bits of the reset-mask and then ORed with the corresponding + bits of the set-mask. + + + + Load R4 with the value of the LIOBN’s Attributes, with any + unimplemented bits set to 0, and if all requested changes were made, then + return H_Success, otherwise return H_Constrained. + + + +
+ +
+ Extensions to Other hcall()s for Redirected + RDMA + + +
+ H_PUT_TCE, H_PUT_TCE_INDIRECT, and + H_STUFF_TCE + These hcall()s are only valid for the first window pane of the + “ibm,my-dma-window” property. See + for information about window + pane types. + The following are extensions that apply to the H_PUT_TCE, + H_PUT_TCE_INDIRECT, and H_STUFF_TCE hcall()s in their use against an RTCE + table. + Recognize the validated (owned by the calling partition, else + H-Parameter) LIOBN as referring to a RTCE table (first window pane) and + access accordingly: + + + + If the TCE is not from the first triple (first window pane) of + the calling partition’s + “ibm,my-dma-window” property, return + H_Parameter. + + + + If the TCE is not currently in use: Clear/invalidate the TCE copy + pointer and enter the TCE mapping per the input parameters to the + hcall(). + + + + If the TCE contains a valid mapping and the TCE copy pointer is + invalid: Enter the TCE mapping per the input parameters to the + hcall(). + + + + If the TCE contains a valid mapping and the TCE copy pointer + references a TCE that does not contain a valid copy of the previous + mapping in the TCE: Clear/invalidate the TCE copy pointer and enter the + TCE mapping per the input parameters to the hcall(). + + + + If the TCE contains a valid mapping and the TCE copy pointer + references a TCE that does contain a valid copy of the previous mapping + in the TCE, then: + + + + If the Bit Bucket Allowed Attribute of the LIOBN containing the + TCE is a 1, invalidate the copied TCE and enter the TCE mapping per the + input parameters to the hcall(). + + + + If the Bit Bucket Allowed Attribute of the LIOBN containing the + TCE is a 0, then return H_Resource or perform some other + platform-specific error recovery. + + + + +
+ +
+ H_MIGRATE_DMA + Check that the pages referenced by the TCEs specified in the + mappings to be migrated belong to the calling partition, else + H_Parameter. + If the mapping being migrated is via an RTCE table (that is, LIOBN + points to an RTCE table), then follow the valid redirected TCE pointer + and migrate the redirected page (if the redirected TCE mapping is still a + clone of the original RTCE table entry). + If the mapping being migrated is via an RTCE table and if the RTCE + table TCEs were built with the H_MASS_MAP_TCE hcall(), then expand each + mass mapped area into smaller 4 KB granularities, as necessary to avoid + performance and locking issues, during the migration process. + Insert checking, and potentially delays, to allow IOAs to make + forward progress between successive DMA disables caused by multiple + partner partitions making simultaneous uncoordinated calls to + H_MIGRATE_DMA targeting the same IOA. +
+
+
+ +
+ Subordinate Command/Response Queue (Sub-CRQ) + The Sub-CRQ facility is used in conjunction with the CRQ facility, + for some virtual IOA types, when more than one queue is needed for the + virtual IOA. For information on the CRQ facility, see + . For information on which + virtual IOAs may use the Sub-CRQ facilities, see the applicable sections + for the virtual IOAs. See + for a comparison of the + differences in the queue structures between CRQs and Sub-CRQs. In + addition to the hcall()s specified in + , all of the following hcall()s + and RTAS calls are applicable to both CRQs and Sub-CRQs: + + + + H_XIRR + + + + H_EOI + + + + ibm,int-on + + + + ibm,int-off + + + + ibm,set-xive + + + + ibm,get-xive + + + +   + + CRQ and Sub-CRQ Comparison + + + + + + + + + Characteristic + + + + + CRQ + + + + + Sub-CRQ + + + + + + + + Queue entry size + + + 16 + + + 32 + + + + + Transport and initialization events + + + Applicable + + + Not applicable (coordinated through the CRQ that is + associated with the Sub-CRQ) + + + + + Registration + + + H_REG_CRQ + + + H_REG_SUB_CRQ + + + + + Deregistration + + + H_FREE_CRQ + + + H_FREE_SUB_CRQ + Note: H_FREE_CRQ for the associated CRQ implicitly + deregisters the associated Sub-CRQs + + + + + Enable + + + H_ENABLE_CRQ + + + Not applicable + + + + + Interrupt number + + + Obtained from + “interrupts” property + + + Obtained from H_REG_SUB_CRQ + + + + + Interrupt enable/disable + + + H_VIO_SIGNAL + + + H_VIOCTL subfunction + For virtual IOAs that define the use of Sub-CRQs, the + interrupt associated with the CRQ, as defined by the + “interrupts” property in the + OF device tree, may be enabled or disabled with either the + H_VIOCTL or the H_VIO_SIGNAL hcall(). The CRQ interrupt + associated with a CRQ of a virtual IOA that does not define + the use of Sub-CRQs should be enabled and disabled by use of + the H_VIO_SIGNAL hcall(). + + + + + + hcall() used to place entry on queue + + + H_SEND_CRQ + + + H_SEND_SUB_CRQ + H_SEND_SUB_CRQ_INDIRECT + + + + + Number of queues per virtual IOA + + + One + + + Zero or more, depending on virtual IOA architecture, + implementation, and client/server negotiation + + + + +
+ +
+ Sub-CRQ Format and Registration + Each Sub-CRQ is built of one or more 4 KB pages aligned on a 4 KB + boundary within partition memory, and is organized as a circular buffer + of 32 byte long elements. Each queue is mapped into contiguous I/O + addresses via the TCE mechanism and RTCE table (first window pane). The + I/O address and length of each queue is registered by the process defined + in + . This registration process + tells the hypervisor where to find the virtual IOA’s + Sub-CRQ(s). +
+ +
+ Sub-CRQ Entry Format + Each Sub-CRQ entry consists of a 32 byte element. The first byte of + a Sub-CRQ entry is the Header byte and is defined in + . +   + + Sub-CRQ Entry Header Byte Values + + + + + + + + + Header Value + + + + + Description + + + + + + + + 0 + + + Element is unused -- all other bytes in the element are + undefined. + + + + + 0x01 - 0x7F + + + Reserved. + + + + + 0x80 + + + Valid Command/Response entry. + + + + + 0x81 - 0xFF + + + Reserved. + + + + +
+ The platform (transport mechanism) ignores the contents of all + non-header bytes in all Sub-CRQ entries. + The operational state of any Sub-CRQs follows the operational state + of the CRQ to which the Sub-CRQ is associated. That is, the CRQ transport + is required to be operational in order for any associated Sub-CRQs to be + operational (for example, if an H_SEND_CRQ hcall() would not succeed due + to any reason other than lack of space is available in the CRQ, then an + H_SEND_SUB_CRQ or H_SEND_SUB_CRQ_INDIRECT hcall() to the associated + Sub-CRQ would also fail). Hence, the Sub-CRQ transport does not implement + the transport and initialization events that are implemented by the CRQ + facility. +
+ +
+ Sub-CRQ Entry Processing + During the Sub-CRQ registration (H_REG_SUB_CRQ), the platform + firmware sets all the header bytes of the Sub-CRQ being registered to + zero (entry invalid). After registration, the first valid entry is placed + in the first element and the process proceeds to the end of the queue and + then wraps around to the first entry again (given that the entry has been + subsequently marked as invalid). This allows both the partition software + and transport firmware to maintain independent pointers to the next + element they will be respectively using. + A sender uses an H_SEND_SUB_CRQ hcall() to enter one 32 byte + message on its partner’s Sub-CRQ. Prior to enqueueing an entry on + the Sub-CRQ, the platform first checks if the session to the + partner’s associate CRQ is open, and there is a enough free space + on the Sub-CRQ, if not, it returns an error. If the checks succeed, the + contents of the message is copied into the next free queue element, + potentially notifying the receiver, and returns a successful status to + the caller. The caller may also insert more than one entry on the queue + with one hcall() using H_SEND_SUB_CRQ_INDIRECT. Use of this hcall() + requires that there be enough space on the queue for all the entries, + otherwise none of the entries are placed onto the Sub-CRQ. + At the receiver’s option, it may be notified via an interrupt + when an element is enqueued to its Sub-CRQ. See + . + When the receiver has finished processing a Sub-CRQ entry, it + writes the header to the value 0x00 to invalidate the entry and free it + for future entries. + Should the receiver wish to terminate or reset the communication + channel it deregisters the Sub-CRQ (H_FREE_SUB_CRQ), and if it needs to + re-establish communications, proceeds to register (H_REG_SUB_CRQ) either + the same or different section of memory as the new queue, with the queue + pointers reset to the first entry. Deregistering a CRQ (H_FREE_CRQ) is an + implicit deregistration of any Sub-CRQs associated with the CRQ. +
+ +
+ Sub-CRQ Facility Interrupt Notification + The receiver can set the virtual interrupt associated with its + Sub-CRQ to one of two modes. These are: + + + + Disabled (an enqueued interrupt is not signaled). + + + + Enabled (an enqueued interrupt is signaled on every + enqueue). + + + + Note: An enqueue is considered a pulse not a level. + The pulse then sets the memory element within the emulated interrupt + source controller. This allows the resetting of the interrupt condition + by simply issuing the H_EOI hcall() as is done with the PCI MSI + architecture rather than having to do an explicit interrupt reset as in + the case with PCI Level Sensitive Interrupt (LSI) architecture. + The interrupt mechanism is capable of presenting only one interrupt + signal at a time from any given interrupt source. Therefore, no + additional interrupts from a given source are ever signaled until the + previous interrupt has been processed through to the issuance of an H_EOI + hcall(). Specifically, even if the interrupt mode is enabled, the effect + is to interrupt on an empty to non-empty transition of the queue. + However, as with any asynchronous posting operation race conditions are + to be expected. That is, an enqueue can happen in a window around the + H_EOI hcall(). Therefore, the receiver should poll the Sub-CRQ (that is, + look at the header byte of the next queue entry to see if the entry is + valid) after an H_EOI to prevent losing initiative. + The hcall() used to enable and disable this Sub-CRQ interrupt + notification is H_VIO_SIGNAL (see + ). +
+ +
+ Extensions to Other hcall()s for Sub-CRQ + + +
+ H_MIGRATE_DMA + Since Sub-CRQs are RTCE table mapped, the H_MIGRATE_DMA hcall() may + be requested to move a page that is part of a Sub-CRQ. The OS owner of + the queue is responsible for preventing its processors from modifying the + page during the migrate operation (as is standard practice with this + hcall()), however, the H_MIGRATE_DMA hcall() serializes with the Sub-CRQ + hcall()s to direct new elements to the migrated target page. +
+ +
+ H_XIRR, H_EOI + The Sub-CRQ facility utilizes a virtual interrupt source number to + notify the queue owner of new element enqueues. The standard H_XIRR and + H_EOI hcall()s are extended to support this virtual interrupt mechanism, + emulating the standard PowerPC Interrupt hardware with respect to the + virtual interrupt source number. +
+ +
+ +
+ Sub-CRQ Facility Requirements + + + + R1--1. + + + For the Sub-CRQ facility: The platform must implement + the Sub-CRQ as specified in + . + + + + + R1--2. + + + For the Sub-CRQ facility: + The platform must + start enqueueing Commands/Responses to the newly registered Sub-CRQ + starting at offset zero and proceeding as in a circular buffer, each + entry being 32 byte aligned. + + + + + R1--3. + + + For the Sub-CRQ facility: + The platform must + enqueue Commands/Responses only if the 32 byte entry is free (header byte + contains 0x00), else the enqueue operation fails. + + + + + R1--4. + + + For the Sub-CRQ facility: The first byte of a Sub-CRQ + entry must be the Header byte and must be as defined in + . + + + + + R1--5. + + + For the Sub-CRQ facility option: Platforms that + implement the H_MIGRATE_DMA hcall() must implement that function for + pages mapped for use by the Sub-CRQ. + + + + + R1--6. + + + For the Sub-CRQ facility: The platforms must emulate + the standard PowerPC External Interrupt Architecture for the interrupt + source numbers associated with the virtual devices via the standard RTAS + and hypervisor interrupt calls and must extend H_XIRR and H_EOI hcall()s + as appropriate for Sub-CRQ interrupts. + + + +
+
+
+ +
+ Partition Managed Class - Synchronous + Infrastructure + The architectural intent of the Synchronous VIO infrastructure is + for platforms where the communicating partitions are under the control of + the same hypervisor. Operations between the partitions are via + synchronous hcall() operations. The Synchronous VIO infrastructure + defines three options: + + + + Reliable Command/Response Transport option (see + + + + + Subordinate CRQ Transport option (see + + + + + Logical Remote DMA (LRDMA) option (see + ) + + + +
+ Reliable Command/Response Transport Option + For the synchronous infrastructure, the CRQ facility defined in + is + implemented via the Reliable Command/Response Transport + option. The synchronous nature of this infrastructure allows for the + capability to immediately (synchronously) notify the sender of the + message whether the message was delivered successfully or not. + +
+ Reliable CRQ Format and Registration + The format of the CRQ is as defined in + . + The I/O address and length of the queue are registered using the + H_REG_CRQ hcall(). + . +
+ +
+ Reliable CRQ Entry Format + See + . +
+ +
+ Reliable CRQ Entry Processing + A sender uses the H_SEND_CRQ hcall() to enter a 16 byte message on + its partner’s queue. The hcall() takes the entire message as input + parameters in two registers. + . +
+ +
+ Reliable Command/Response Transport Interrupt + Notification + The receiver can enable and disable the virtual interrupt + associated with its CRQ. See + . +
+ +
+ Reliable Command/Response Transport hcall()s + The H_REG_CRQ and H_FREE_CRQ hcall()s are used by both client and + server virtual IOA device drivers. It is the architectural intent that + the hypervisor maintains a connection control structure for each defined + partner/server connection. The H_REG_CRQ and its corresponding H_FREE_CRQ + register and deregister partition resources with that connection control + structure. However, there are several conditions that can arise + architecturally with this connection process (the design of an + implementation may preclude some of these conditions). + + + + The association connection to the partner virtual IOA not being + defined (H_Not_Found). The CRQ registration function fails if the CRQ is + not registered with the hypervisor. + + + + The partner virtual IOA may not have registered its CRQ + (H_Closed). The CRQ is registered with the hypervisor and the connection. + However, the connection is incomplete because their partner has not + registered. + + + + The partner virtual IOA may be already connected to another + partner virtual IOA (H_Resource). The CRQ registration function fails if + the CRQ is not registered with the hypervisor or the connection. + + + + The reaction of the virtual IOA device driver to these conditions + is somewhat different depending upon the calling device driver being for + a client or server IOA. Server IOAs in many cases register prior to their + partner IOAs since they are servers and subsequently wait for service + requests from their clients. Therefore, the H_Closed return code is to be + expected when the DD’s CRQ has been registered with the connection + and is just waiting for the partner to register. Should a partner DD + register its CRQ in the future, higher level protocol messages (via the + Initialization Command/Response CRQ entry) can notify the server DD when + the connection is established. If a client IOA registers and receives a + return code of H_Closed, it may choose to deregister the CRQ and fail + since the client IOA would not be in a position to successfully send + service requests using the CRQ facility, or it may wait and rely upon + higher level CRQ messages (via the Initialization Command/Response CRQ + entry) to tell it when its partner has registered. The reaction of a + virtual IOA DDs to H_Not_Found and H_Resource are dependent upon the + functionality of higher level platform and system management policies. + While the current registration has failed, higher level system and or + platform management actions may allow a future registration request to + succeed. + When registration succeeds, an association is made between the + partner partition’s LIOBN (RTCE table) and the second window pane + of the server partition. This association is dropped when either partner + deregisters or terminates. However, on deregistration or termination, the + RTCE tables associated with the local partition (first window pane) + remain intact for that partition (see Requirement + ). + +
+ H_REG_CRQ + This hcall() registers the RTCE table mapped memory that contains + the CRQ. + + + Syntax: + + + + + + + Parameters: + + + + unit-address: Unit Address per device tree node + “reg” property + + + + queue: I/O address (offset into the RTCE table) of the CRQ buffer + (starting on a 4 KB boundary). + + + + len: Length of the CRQ in bytes (a multiple of 4 KB) + + + + + + + Semantics: + + + + Validate unit-address, else H_Parameter + + + + Validate queue, which is the I/O address of the CRQ (I/O + addresses for entire buffer length starting at the specified I/O address + are translated by the RTCE table, is 4 KB aligned, and length, len, is a + multiple of 4 KB), else H_Parameter + + + + Validate that there is an authorized connection to another + partition associated with the Unit Address, else H_Not_Found. + + + + Validate that the authorized connection to another partition + associated with the Unit Address is free, else H_Resource. + + + + Initialize the CRQ enqueue pointer and length variables. These + variables are kept in terms of I/O addresses so that page migration works + and any remapping of TCEs is effective. + + + + Disable CRQ interrupts. + + + + Allow for Logical Remote DMA, when applicable, with associated + partner partition when partner registers. + + + + If partner is already registered, then return H_Success, else + return H_Closed. + + + +
+ +
+ H_FREE_CRQ + This hcall() deregisters the RTCE table mapped memory that contains + the CRQ. In addition, if there are any Sub-CRQs associated with the CRQ, + the H_FREE_CRQ has the effect of releasing the Sub-CRQs. + + + Syntax: + + + + + + + Parameters: + + + + unit-address: Unit Address per device tree node + “reg” property + + + + + + Semantics: + + + + Validate unit-address, else H_Parameter + + + + Mark the connection to the associated partner partition as closed + (so that send hcall()s from the partner partition fail). + + + + Mark the CRQ enqueue pointer and length variables as + invalid. + + + + For any and all Sub-CRQs associated with the CRQ, do the + following: + + + + Mark the connection to the associated partner partition as closed + for the Sub-CRQ (so that send hcall()s from the partner partition + fail). + + + + Mark the Sub-CRQ enqueue pointer and length variables for the + Sub-CRQ as invalid. + n Disable Sub-CRQ interrupts for the Sub-CRQ. + + + + + + Disable CRQ interrupts. + + + + If there exists any Redirected TCEs in the local TCE tables + associated with this Virtual IOA, and all of those tables have a Bit + Bucket Allowed attribute of 1, then Disable Logical Remote DMA with + associated partner partition, if enabled, invalidating any Redirected + TCEs in the local TCE tables (for information on invalidation of TCEs, + see ). + + + + If there exists any Redirected TCEs in the local TCE tables + associated with this Virtual IOA, and any of those tables have a Bit + Bucket Allowed attribute of 0, then return H_Resource or perform some + other platform-specific error recovery. + + + + Send partner terminated message to partner queue (if it is still + registered), overlaying the last valid entry in the queue if the CRQ is + full. + + + + Return H_Success. + + + + Implementation Note: If the hypervisor returns an + H_Busy, H_LongBusyOrder1mSec, or H_LongBusyOrder10mSec, software must + call H_FREE_CRQ again with the same parameters. Software may choose to + treat H_LongBusyOrder1mSec and H_LongBusyOrder10mSec the same as H_Busy. + The hypervisor, prior to returning H_Busy, H_LongBusyOrder1mSec, or + H_LongBusyOrder10mSec, will have placed the virtual adapter in a state + that will cause it to not accept any new work nor surface any new virtual + interrupts (no new entries will be placed on the CRQ). + +
+ +
+ H_SEND_CRQ + This hcall() sends one 16 byte entry to the partner + partition’s registered CRQ. + + + Syntax: + + + + + + + Parameters: + + + + unit-addr: Unit Address per device tree node + “reg” property + + + + msg-high: + n header: high order bit is on -- header of value 0xFF is reserved + for transport error and is invalid for input. + n format: not checked by the firmware. + + + + msg-low: not checked by the firmware -- should be consistent with + the definition of the format byte. + + + + + + Semantics: + + + + Validate the Unit Address, else return H_Parameter + + + + Validate that the msg header byte has its high order bit on and + that it is not = 0xFF, else return H_Parameter. + + + + Validate that there is an authorized connection to another + partition associated with the Unit Address and that the associated CRQ is + enabled, else return H_Closed. + + + + Enter Critical Section on target CRQ + + + + Validate that there is room on the receive queue for the message + and allocate that message, else exit critical Section and return + H_Dropped. + + + + Store msg-low into the second 8 bytes of the allocated queue + element. + + + + Store order barrier + + + + Store msg-high into the first 8 bytes of the allocated queue + element (setting the header valid bit.) + + + + + + Exit Critical Section + + + + If receiver queue interrupt mode == enabled, then signal + interrupt + + + + Return H_Success. + + + +
+ +
+ H_ENABLE_CRQ + This hcall() explicitly enables a CRQ that has been disabled due to + a Partner partition suspended transport event. As a side effect of this + hcall(), all pages that are mapped via the logical TCE table associated + with the first pane of + “ibm,my-dma-window” property of the + associated virtual IOA are restored prior to successful completion of the + hcall(). It is the architectural intent that this hcall() is made while + the logical TCE contains mappings for all the pages that will be involved + in the recovery of the outstanding I/O operations at the time of the + partition migration. Further, it is the architectural intent that this + hcall() is made from a processing context that can handle the expected + busy wait return code without blocking the processor. + + + Syntax: + + + + + + + Parameters: + + + + unit-addr: Unit Address per device tree node + “reg” property + + + + + + Semantics: + + + + Validate the Unit Address, else return H_Parameter + + + + Test that all pages mapped through the logical TCE table + associated with the first pane of the + “ibm,my-dma-window” property associated + with the unit-address parameter are present; else return + H_LongBusyOrder10mSec. + + + + Set the status of the CRQ associated with the unit-address + parameter to enabled. + + + + Return H_Success. + + + +
+
+ +
+ Reliable Command/Response Transport Option + Requirements + + + + R1--1. + + + For the Reliable Command/Response Transport + option: The platform must implement the CRQ facility, as + defined in + . + + + + + R1--2. + + + For the Reliable Command/Response Transport + option: The platform must implement the H_REG_CRQ hcall(). + . + + + + + R1--3. + + + For the Reliable Command/Response Transport + option: The platform must implement the H_FREE_CRQ hcall(). + . + + + + + R1--4. + + + For the Reliable Command/Response Transport + option: The platform must implement the H_SEND_CRQ hcall(). + . + + + + + R1--5. + + + For the Reliable Command/Response Transport + option: The platform must implement the H_ENABLE_CRQ hcall(). + . + + + +
+
+ +
+ Logical Remote DMA (LRDMA) Option + The Logical Remote Direct Memory Access (LRDMA) option allows a + server partition to securely target memory pages within a partner + partition for VIO operations. + This architecture defines two modes of RDMA + + + + Copy RDMA is used to have the hypervisor copy data + between a buffer in the server partition’s memory and a buffer in + the partner partition’s memory. See + for more information on Copy + RDMA with respect to LRDMA. + + + + Redirected RDMA allows for a server partition to + securely target its I/O adapter's DMA operations directly at the memory + pages of the partner partition. The platform overhead of Copy RDMA is + generally greater than Redirected RDMA, but this overhead may be offset + if the server partition’s DMA buffer is being used as a data cache + for multiple VIO operations. See + for more information on + Redirected RDMA with respect to LRDMA. + + + + The mapping between the LIOBN in the second pane of a server + virtual IOA’s + “ibm,my-dma-window” property and the + corresponding partner IOA’s RTCE table is made when the CRQ + successfully completes registration. The partner partition is not aware + if the server partition is using Copy RDMA or Redirected RDMA. The server + partition uses the Logical RDMA mode that best suits its needs for a + given VIO operation. See + for more information on RTCE + tables. + +
+ Copy RDMA + The Copy RDMA hcall()s are used to request that the hypervisor move + data between partitions. The specific implementation is optimized to the + platform’s hardware features. There are calls for when both source + and destination buffers are RTCE table mapped (H_COPY_DMA) and when only + the remote buffers are mapped (H_WRITE_RDMA and H_READ_RDMA). + +
+ H_COPY_RDMA + This hcall() copies data from an RTCE table mapped buffer in one + partition to an RTCE table mapped buffer in another partition, with the + length of the transfer being specified by the transfer length parameter + in the hcall(). The + “ibm,max-virtual-dma-size” property, if + it exists (in the + /vdevice (node), specifies the maximum length of the + transfer (minimum value of this property is 128 KB). + + + Syntax: + + + + + + + Parameters: + + + + len: Length of transfer (length not to exceed the value in the + “ibm,max-virtual-dma-size” property, if + it exists) + + + + s-liobn: LIOBN (RTCE table handle) of V-DMA source buffer + + + + s-ioba: IO address of V-DMA source buffer + + + + d-liobn: LIOBN (RTCE table handle) of V-DMA destination + buffer + + + + d-ioba: I/O address of V-DMA destination buffer + + + + + + Semantics: + + + + Serialize access to RTCE tables with H_MIGRATE_DMA. + + + + If the + “ibm,max-virtual-dma-size” property exist + in the + /vdevice node of the device tree, then if the value + of len is greater than the value of this property, return + H_Parameter. + + + + Source and destination LIOBNs are checked for authorization per + the + “ibm,my-dma-window” property, else return + H_S_Parm or H_D_Parm, respectively. + + + + Source and destination ioba’s and length are checked for + valid ranges per the + “ibm,my-dma-window” property, else return + H_S_Parm or H_D_Parm, respectively. + + + + The access bits of the associated TCEs are checked for + authorization, else return H_Permission. + + + + Copy len number of bytes from the buffer starting at the + specified source address to the buffer starting at the specified + destination address, then return H_Success. + + + +
+ +
+ H_WRITE_RDMA + This hcall() copies up to 48 bytes of data from a set of input + parameters to an RTCE table mapped buffer in another partition. + + + Syntax: + + + + + + + Parameters: + + + + len: Length of transfer + + + + d-liobn: LIOBN (RTCE table handle) of V-DMA destination + buffer + + + + d-ioba: I/O address of V-DMA destination buffer + + + + data1: Source data + + + + data2: Source data + + + + data3: Source data + + + + data4: Source data + + + + data5: Source data + + + + data6: Source data + + + + + + Semantics: + + + + Check that the len parameter => 0 and <= 48, else return + H_Parameter + + + + The destination LIOBN is checked for authorization per the remote + triple of the one of the calling partition’s + “ibm,my-dma-window” property, else return + H_D_Parm. + + + + The destination ioba and length are check for valid ranges per + the remote triple of the one of the calling partition’s + “ibm,my-dma-window” property, else return + H_D_Parm. + + + + Serialize access to the destination RTCE table with + H_MIGRATE_DMA. + + + + The access bits of the associated RTCE table TCEs are checked for + authorization, else return H_Permission. + + + + Copy len number of bytes from the data parameters starting at the + high order byte of data1 toward the low order byte of data 6 into the + buffer starting at the specified destination address, then return + H_Success. + + + +
+ +
+ H_READ_RDMA + This hcall() copies up to 72 bytes of data from an RTCE table + mapped buffer into a set of return registers. + + + Syntax: + + + + + + + Parameters: + + + + len: Length of transfer + + + + s-liobn: LIOBN (RTCE table handle) of V-DMA source buffer + + + + s-ioba: IO address of V-DMA source buffer + + + + + + Semantics: + + + + Check that the len parameter => 0 and <= 72, else return + H_Parameter + + + + The source LIOBN is checked for authorization per the remote + triple of the one of the calling partition’s + “ibm,my-dma-window” property, else return + H_S_Parm. + + + + The source ioba and length are check for valid ranges per the + remote triple of the one of the calling partition’s + “ibm,my-dma-window” property, else return + H_S_Parm. + + + + Serialize access to the source RTCE table with + H_MIGRATE_DMA. + + + + The access bits of the associated RTCE table TCEs are checked for + authorization, else return H_Permission. + + + + Copy len number of bytes from the source data buffer specified by + s-liobn starting at s-ioba, into the registers R4 through R12 starting + with the high order byte of R4 toward the low order byte of R12, then + return H_Success. + + + +
+
+ +
+ Logical Remote DMA Option Requirements + + + + R1--1. + + + For the Logical Remote DMA option: The platform must + implement the H_PUT_RTCE hcall() as specified in + . + + + + + R1--2. + + + For the Logical Remote DMA option: The platform must + implement the extensions to the H_PUT_TCE hcall() as specified in + . + + + + + R1--3. + + + For the Logical Remote DMA option: The platform must + implement the extensions to the H_MIGRATE_DMA hcall() as specified in + . + + + + + R1--4. + + + For the Logical Remote DMA option: The platform must + implement the H_COPY_RDMA hcall() as specified in + . + + + + + R1--5. + + + For the Logical Remote DMA option: + The platform must + disable Logical Remote DMA operations that target an inactive partition + (one that has terminated), including the H_COPY_RDMA hcall() and the + H_PUT_RTCE hcall(). + + + + + + Implementation Note: It is expected that as part of + meeting Requirement + , all of the terminating + partition’s TCE table entries (regular and RTCE) are invalidated + along with any clones (for information on invalidation of TCEs, see + ). While other mechanisms are + available for meeting this requirement in the case of H_COPY_RDMA, this + is the only method for Redirected RDMA, and since it works in both cases, + it is expected that implementations will use this single + mechanism. +
+
+ +
+ Subordinate CRQ Transport Option + For the synchronous infrastructure, in addition to the CRQ facility + defined in + , + the Subordinate CRQ Transport option may also be implemented + in conjunction with the CRQ facility. That is, the Subordinate CRQ + Transport option requires that the Reliable Command/Response Transport + option also be implemented. For this option, the Sub-CRQ facility defined + in + is + implemented. + +
+ Sub-CRQ Format and Registration + The format of the Sub-CRQ is as defined in + . + The I/O address and length of the queue are registered using the + H_REG_SUB_CRQ hcall(). + . +
+ +
+ Sub-CRQ Entry Format + See + . +
+ +
+ Sub-CRQ Entry Processing + A sender uses the H_SEND_SUB_CRQ or H_SEND_SUB_CRQ_INDIRECT hcall() + to enter one or more 32 byte messages on its partner’s queue. + and + . +
+ +
+ Sub-CRQ Transport Interrupt Notification + The receiver can enable and disable the virtual interrupt + associated with its Sub-CRQ using the H_VIOCTL hcall(), with the + appropriate subfunction. See + . The interrupt number that is + used in the H_VIOCTL call is obtained from the H_REG_SUB_CRQ call that is + made to register the Sub-CRQ. +
+ +
+ Sub-CRQ Transport hcall()s + The H_REG_SUB_CRQ and H_FREE_SUB_CRQ hcall()s are used by both + client and server virtual IOA device drivers. It is the architectural + intent that the hypervisor maintains a connection control structure for + each defined partner/server connection. The H_REG_SUB_CRQ and its + corresponding H_FREE_SUB_CRQ register and deregister partition resources + with that connection control structure. However, there are several + conditions that can arise architecturally with this connection process + (the design of an implementation may preclude some of these + conditions). + + + + The association connection to the partner virtual IOA not being + defined (H_Not_Found). + + + + The partner virtual IOA CRQ connection may not have been + completed (H_Closed). + + + + The partner may deregister its CRQ which also deregisters any + associated Sub-CRQs. + + + +
+ H_REG_SUB_CRQ + This hcall() registers the RTCE table mapped memory that contains + the Sub-CRQ. Multiple Sub-CRQ registrations may be attempted for each + virtual IOA. If resources are not available to establish a Sub-CRQ, the + H_REG_SUB_CRQ call will fail with H_Resource. + + Programming Note: On platforms that implement the + partition migration option, after partition migration the support for + this hcall() might change, and the caller should be prepared to receive + an H_Function return code indicating the platform does not implement this + hcall(). If a virtual IOA exists in the device tree after migration that + requires by this architecture the presence of this hcall(), then if that + virtual IOA exists after the migration, it can be expected that the + hcall() will, also. + + + Syntax: + + + + + + + Parameters: + + + + unit-address: Unit Address per device tree node + “reg” property. + + + + Sub-CRQ-ioba: I/O address (offset into the RTCE table, as + specified by the first window pane of the virtual IOA’s + “ibm,my-dma-window” property) of the + Sub-CRQ buffer (starting on a 4 KB boundary). + + + + Sub-CRQ-length: Length of the Sub-CRQ in bytes (a multiple of 4 + KB). + + + + + + Semantics: + + + + Validate unit-address, else H_Parameter. + + + + Validate Sub-CRQ-ioba, which is the I/O address of the Sub-CRQ + (I/O addresses for entire buffer length starting at the specified I/O + address are translated by the RTCE table, is 4 KB aligned, and length, + Sub-CRQ-length, is a multiple of 4 KB), else H_Parameter. + + + + Validate that there are sufficient resources associated with the + Unit Address to allocate the Sub-CRQ, else H_Resource. + + + + Initialize the Sub-CRQ enqueue pointer and length variables. + These variables are kept in terms of I/O addresses so that page migration + works and any remapping of TCEs is effective. + + + + Initialize all Sub-CRQ entry header bytes to 0 (invalid). + + + + Disable Sub-CRQ interrupts. + + + + Place cookie representing Sub-CRQ number (will be used in + H_SEND_SUB_CRQ, H_SEND_SUB_CRQ_INDIRECT, and H_FREE_SUB_CRQ) in + R4. + + + + Place interrupt number (the same as will be returned by H_XIRR or + H_IPOLL for the interrupt from this Sub-CRQ) in R5. + + + + If the CRQ connection is already complete, then return H_Success, + else return H_Closed. + + + +
+ +
+ H_FREE_SUB_CRQ + This hcall() deregisters the RTCE table mapped memory that contains + the Sub-CRQ. Note that the H_FREE_CRQ hcall() also deregisters any + Sub-CRQs associated with the CRQ being deregistered by that + hcall(). + + Programming Note: On platforms that implement the + partition migration option, after partition migration the support for + this hcall() might change, and the caller should be prepared to receive + an H_Function return code indicating the platform does not implement this + hcall(). If a virtual IOA exists in the device tree after migration that + requires by this architecture the presence of this hcall(), then if that + virtual IOA exists after the migration, it can be expected that the + hcall() will, also. + + + Syntax: + + + + + + + Parameters: + + + + unit-address: Unit Address per device tree node + “reg” property. + + + + Sub-CRQ-num: The queue # cookie returned from H_REG_SUB_CRQ + hcall() at queue registration time. + + + + + + Semantics: + + + + Validate unit-address and Sub-CRQ-num, else H_Parameter + + + + Mark the connection to the associated partner partition as closed + for the specified Sub-CRQ (so that send hcall()s from the partner + partition fail). + + + + Mark the Sub-CRQ enqueue pointer and length variables for the + specified Sub-CRQ as invalid. + + + + Disable Sub-CRQ interrupts for the specified Sub-CRQ. + + + + Return H_Success. + + + +
+ +
+ H_SEND_SUB_CRQ + This hcall() sends one 32 byte entry to the partner + partition’s registered Sub-CRQ. + + Programming Note: On platforms that implement the + partition migration option, after partition migration the support for + this hcall() might change, and the caller should be prepared to receive + an H_Function return code indicating the platform does not implement this + hcall(). If a virtual IOA exists in the device tree after migration that + requires by this architecture the presence of this hcall(), then if that + virtual IOA exists after the migration, it can be expected that the + hcall() will, also. + + + Syntax: + + + + + + + Parameters: + + + + unit-addr: Unit Address per device tree node + “reg” property. + + + + Sub-CRQ-num: The queue # cookie returned from H_REG_SUB_CRQ + hcall() at queue registration time. + + + + msg-dword0: firmware checks only high order byte. + + + + msg-dword1, msg-dword2, msg-dword3: the rest of the message; + firmware does not validate. + + + + + + Semantics: + + + + Validate the Unit Address, else return H_Parameter. + + + + Validate that the Sub-CRQ, as specified by Sub-CRQ-num, is + properly registered by the partner, else return H_Parameter. + + + + Validate that the message header byte (high order byte of + msg-dword0) is 0x80, else return H_Parameter. + + + + Validate that there is an authorized CRQ connection to another + partition associated with the Unit Address and that the associated CRQ is + enabled, else return H_Closed. + + + + Enter Critical Section on target Sub-CRQ. + + + + n Validate that there is room on the specified Sub-CRQ for the + message and allocate that message, else exit critical Section and return + H_Dropped. + + + + Store msgdword1 into bytes 4-7 of the allocated queue + element. + + + + Store msgdword2 into bytes 8-11 of the allocated queue + element. + + + + Store msgdword3 into bytes 12-15 of the allocated queue + element. + + + + Store order barrier. + + + + Store msgdword0 into bytes 0-3 of the allocated queue element + (this sets the valid bit in the header byte). + + + + + + Exit Critical Section. + + + + If receiver queue interrupt mode is enabled, then signal + interrupt. + + + + Return H_Success. + + + +
+ +
+ H_SEND_SUB_CRQ_INDIRECT + This hcall() sends one or more 32 byte entries to the partner + partition’s registered Sub-CRQ. On H_Success, all of the entries + have been put onto the Sub-CRQ. On any return code other than H_Success, + none of the entries have been put onto the Sub-CRQ. + + Programming Note: On platforms that implement the + partition migration option, after partition migration the support for + this hcall() might change, and the caller should be prepared to receive + an H_Function return code indicating the platform does not implement this + hcall(). If a virtual IOA exists in the device tree after migration that + requires by this architecture the presence of this hcall(), then if that + virtual IOA exists after the migration, it can be expected that the + hcall() will, also. + + + Syntax: + + + + + + + Parameters: + + + + unit-addr: Unit Address per device tree node + “reg” property. + + + + Sub-CRQ-num: The Sub-CRQ # cookie returned from H_REG_SUB_CRQ + hcall() at queue registration time. + + + + ioba: The address of the TCE-mapped page which contains the + entries to be placed onto the specified Sub-CRQ. + + + + num-entries: Number of entries to be placed onto the specified + Sub-CRQ from the TCE mapped page starting at ioba (maximum number of + entries is 16 in order to minimize the hcall() time). + + + + + + Semantics: + + + + Validate the Unit Address, else return H_Parameter. + + + + Validate that the Sub-CRQ, as specified by Sub-CRQ-num, is + properly registered by the partner, else return H_Parameter. + + + + If ioba is outside of the range of the calling partition assigned + values, then return H_Parameter. + + + + If num-entries is not in the range of 1 to 16, then return + H_Parameter. + + + + Validate that there is an authorized CRQ connection to another + partition associated with the Unit Address and that the associated CRQ is + enabled, else return H_Closed. + + + + Copy (num-entries * 32) bytes from the page specified starting at + ioba to a temporary hypervisor page for contents verification and + processing (this avoids the problem of the caller changing call by + reference values after they are checked). + + + + Validate that the message header bytes for num-entries starting + at ioba are 0x80, else return H_Parameter. + + + + Enter Critical Section on target Sub-CRQ. + + + + Validate that there is room on the specified Sub-CRQ for + num-entries messages and allocate those messages, else exit critical + Section and return H_Dropped. + + + + For each of the num-entries starting at ioba + + + + Store entry bytes 1-31 into bytes 1-31 of the allocated queue + element. + + + + Store order barrier. + + + + Store entry byte 0 into bytes 0 of the allocated queue element + (this sets the valid bit in the header byte). + + + + + + Loop + + + + + + Exit Critical Section. + + + + If receiver queue interrupt mode is enabled, then signal + interrupt. + + + + Return H_Success. + + + +
+
+ +
+ Subordinate CRQ Transport Option Requirements + + + + R1--1. + + For the Subordinate CRQ Transport option: The + platform must implement the Reliable Command/Response Transport option, + as defined in + . + + + + + R1--2. + + For the Subordinate CRQ Transport option: The + platform must implement the Sub-CRQ facility, as defined in + . + + + + + R1--3. + + For the Subordinate CRQ Transport option: The + platform must implement the H_REG_SUB_CRQ hcall(). + . + + + + + R1--4. + + For the Subordinate CRQ Transport option: The + platform must implement the H_FREE_SUB_CRQ hcall(). + . + + + + + R1--5. + + For the Subordinate CRQ Transport option: The + platform must implement the H_SEND_SUB_CRQ hcall(). + . + + + + + R1--6. + + For the Subordinate CRQ Transport option: The + platform must implement the H_SEND_SUB_CRQ_INDIRECT hcall(). + . + + + + + R1--7. + + For the Subordinate CRQ Transport option: The + platform must implement all of the following subfunctions of the H_VIOCTL + hcall() ( + ): + n DISABLE_ALL_VIO_INTERRUPTS + n DISABLE_VIO_INTERRUPT + n ENABLE_VIO_INTERRUPT + + + + +
+ +
+
+
+ +
+ Interpartition Logical LAN (ILLAN) Option + The Interpartition Logical LAN (ILLAN) option provides the + functionality of IEEE VLAN between LPAR partitions. Partitions are + configured to participate in the ILLAN. The participating partitions have + one or more logical IOAs in their device tree. + The hypervisor emulates the functionality of an IEEE VLAN switch. + That functionality is defined in IEEE 802.1Q. The following information on + IEEE VLAN switch functionality is provided for informative reference only + with the referenced document being normative. Logical Partitions may have + one or more Logical LAN IOA’s each of which appears to be connected + to one and only one Logical LAN Switch port of the single Logical LAN + Switch implemented by the hypervisor. Each Logical LAN Switch port is + configured (by platform dependent means) as to whether the attached Logical + LAN IOA supports IEEE VLAN headers or not, and the allowable VLAN numbers + that the port may use (a single number if VLAN headers are not supported, + an implementation dependent number if VLAN headers are supported). When a + message arrives at a Logical LAN Switch port from a Logical LAN IOA, the + hypervisor caches the message’s source MAC address (2nd 6 bytes) to + use as a filter for future messages to the IOA. Then the hypervisor + processes the message differently depending upon whether the port is + configured for IEEE VLAN headers, or not. If the port is configured for + VLAN headers, the VLAN header (bytes offsets 12 and 13 in the message) is + checked against the port’s allowable VLAN list. If the message + specified VLAN is not in the port’s configuration, the message is + dropped. Once the message passes the VLAN header check, it passes onto + destination MAC address processing below. If the port is NOT configured for + VLAN headers, the hypervisor (conceptually) inserts a two byte VLAN header + (based upon the port’s configured VLAN number) after byte offset 11 + in the message. + Next, the destination MAC address (first 6 bytes of the message) is + processed by searching the table of cached MAC addresses (built from + messages received at Logical LAN Switch ports see above). If a match for + the MAC address is not found and if there is no Trunk Adapter defined for + the specified VLAN number, then the message is dropped, otherwise if a + match for the MAC address is not found and if there is a Trunk Adapter + defined for the specified VLAN number, then the message is passed on to the + Trunk Adapter. If a MAC address match is found, then the associated switch + port is configured and the allowable VLAN number table is scanned for a + match to the VLAN number contained in the message’s VLAN header. If a + match is not found, the message is dropped. Next, the VLAN header + configuration of the destination Switch Port is checked, and if the port is + configured for VLAN headers, the message is delivered to the destination + Logical LAN IOA including any inserted VLAN header. If the port is + configured for no VLAN headers, the VLAN header is removed before being + delivered to the destination Logical LAN IOA. + The Logical LAN IOA’s device tree entry includes + Unit Address, and + “ibm,my-dma-window” properties. The + “ibm,my-dma-window” property contains a + LIOBN field that represents the RTCE table used by the Logical IOA. The + Logical LAN hcall()s use the Unit Address field to imply the LIOBN and, + therefore, the RTCE table to reference. + When the logical IOA is opened, the device driver registers, with the + hypervisor, as the “Buffer List”, a TCE mapped page of + partition I/O mapped memory that contains the receive buffer descriptors. + These receive buffers are mapped via a TCE mechanism from partition memory + into contiguous I/O DMA space. The first descriptor in the buffer list page + is that of the receive queue buffer. The rest of the descriptors are for a + number of buffer pools organized by increasing size of receive buffer. The + format of the descriptor is a 1 byte control field, 3 byte buffer length, + followed by a 4 byte I/O address. The number of buffer pools is determined + by the device driver (up to an architected maximum of 254). The control + field in all unused descriptors is 0h00. The last 8 bytes are reserved for + statistics. + When a new message is received by the logical IOA, the list of buffer + pools is scanned starting from the second descriptor in the buffer list + looking for the first available buffer that is equal to or greater than the + received message. That buffer is removed from the pool, filled with the + incoming message, and an entry is placed on the receive queue noting the + buffer status, message length, starting data offset, and the buffer + correlator. + The sender of a logical LAN message uses an hcall() that takes as + parameters the Unit Address and a list of up to 6 buffer descriptors + (length, starting I/O address pairs). The sending hcall(), after verifying + the sender owns the Unit Address, correlates the Unit Address with its + associated Logical LAN Switch port and copies the message from the send + buffer(s) into a receive buffer, as described above, for each target + logical LAN IOA that is a member of the specified VLAN. If a given logical + IOA does not have a suitable receive buffer, the message is dropped for + that logical IOA (a return code indicates that one or more destinations did + not receive a message allowing for a reliable datagram service). + The logical LAN facility uses the standard H_GET_TCE and H_PUT_TCE + hcall()s to manage the I/O translations tables along with H_MIGRATE_DMA to + aid in dynamic memory reconfiguration. + +
+ Logical LAN IOA Data Structures + The Logical LAN IOA defines certain data structures as described in + following paragraphs. + outlines the + inter-relationships between several of these structures. Since multiple + hcall()s as well as multiple partitions access the same structures, + careful serialization is essential. + + Implementation Note: During shutdown or migration of + TCE mapped pages, implementations may choose to atomically maintain, + within a single, two field variable, a usage count of processors + currently sending data through the Logical LAN IOA combined with a + quiesce request set to the processor that is requesting the quiesce (if + no quiesce is requested, the value of this field is some reserved value). + Then a protocol, such as the following, can manage the quiesce of Logical + LAN DMA. A new sender atomically checks the DMA channel management + variable -- spinning if the quiesce field is set and subsequently + incrementing the usage count field when the quiesce variable is not set. + The sender atomically decreases the use count when through with Logical + Remote DMA copying. A quiesce requester, after atomically setting the + quiesce field with its processor number (as in a lock), waits for the + usage count to go to zero before proceeding. + +
+ Logical LAN IOA Structures + + + + + + + + +
+ +
+ Buffer Descriptor + The buffer descriptor is an 8 byte quantity, on an 8 + byte boundary (so that it can be written atomically). The high order byte + is control, the next 3 bytes consist of a length field of the buffer in + bytes, the low order 4 bytes are a TCE mapped I/O address of the start of + the buffer in I/O address space. + Bit 0 of the control field is the valid indicator, 0 means not + valid and 1 is valid. Bits 2-5 are reserved. + Bit 1 is used in the receive queue descriptor as the valid toggle + if the descriptor specifies the receive queue, else it is reserved. If + the valid toggle is a 0, then the newly enqueued receive buffer + descriptors have a valid bit value of 1, if the valid toggle is a 1, then + the newly enqueued receive buffer descriptors have a valid bit value of + 0. The hypervisor flips the value of the valid toggle bit each time it + cycles from the bottom of the receive queue to the top. + Bit 6 is the No Checksum bit and indicates that there is no + checksum in this packet. See + for more information on the + usage of this bit. + Bit 7 is the Checksum Good bit and indicates that the checksum in + this packet has already been verified. See + for more information on the + usage of this bit. +
+ +
+ Buffer List + This structure is used to record buffer descriptors of various + types used by the Logical LAN IOA. Additionally, running statistics about + the logical LAN adapter are maintained at the end of the structure. It + consists of one 4 KB aligned TCE mapped page. By TCE mapping the page, + the H_MIGRATE_DMA hcall() is capable of migrating this structure. + The first buffer descriptor (at offset 0) contains the buffer + descriptor for the receive queue. + The second buffer descriptor (at offset 8) contains the buffer + descriptor for the MAC multicast filter table. + It is the architectural intent that all subsequent buffer + descriptors in the list head a pool of buffers of a given size. Further, + it is the architectural intent that descriptors are ordered in increasing + size of the buffers in their respective pools. The rest of the + description of the ILLAN option is written assuming this intent. However, + the contents of these descriptors are architecturally opaque, none of + these descriptors are manipulated by code above the architected + interfaces. This allows implementations to select the most appropriate + serialization techniques for buffer enqueue/dequeue, migration, and + buffer pool addition and subsequent garbage collection. + The final 8 bytes in the buffer list is a counter of frames dropped + because there was not a buffer in the buffer list capable of holding the + frame. +
+ +
+ Receive Queue + The receive queue is a circular buffer used to store received + message descriptors. The device driver sizes the buffer used for the + receive queue in multiples of 16 bytes, starting on an 16 byte boundary + (to allow atomic store operations) with, at least, one more 16 byte entry + than the maximum number of possible outstanding receive buffers. Failure + to have enough receive queue entries, may result in receive messages, and + their buffers being lost since the logical IOA assumes that there are + always empty receive queue elements and does not check. When the device + driver registers the receive queue buffer, the buffer contents should be + all zeros, this insures that the valid bits are all off. + If a message is received successfully, the next 16 byte area + (starting with the area at offset 0 for the first message received after + the registration of the receive queue and looping back to the top after + the last area is used) in the receive queue is written with a message + descriptor as shown in + . Either the entire entry is + atomically written, or the write order is serialized such that the + control field is globally visible after all other fields are + visible. +   + + Receive Queue Entry + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + Control + + + 0 + + + 1 + + + Bit 0 = the appropriate valid indicator. + Bit 1 = 1 if the buffer contains a valid message. Bit 1 = + 0 if the buffer does not contain a valid message, in which case + the device driver recycles the buffer. + Bits 2-5 Reserved. + Bit 6: No Checksum bit. If a 1, then this indicates that + there is no checksum in this packet (see + for more information + on the usage of this bit). + Bit 7: Checksum Good bit. If a 1, then this indicates + that the checksum in this packet has already been verified (see + + for more information + on the usage of this bit). + + + + + Reserved + + + 1 + + + 1 + + + Reserved for future use. + + + + + Message Offset + + + 2 + + + 2 + + + The byte offset to the start of the received message. The + minimum offset is 8 (to bypass the message correlator field); + larger offsets may be used to allow for optimized data copy + operations. + + + + + Message Length + + + 4 + + + 4 + + + The byte length of the received message. + + + + + Opaque handle + + + 8 + + + 8 + + + Copy of the first 8 bytes contained in the message buffer + as passed by the device driver. + + + + +
+ So that the device driver never has to write into the receive + queue, the VLAN logical IOA alternates the value of the valid bit on each + pass through the receive queue buffer. On the first pass following + registration, the valid bit value is written as a 1, on the next as a + zero, on the third as a 1, and so on. To allow the device driver to + follow the state of the valid bit, the Logical LAN IOA maintains a valid + bit toggle in bit 1 of the receive queue descriptor control byte. The + Logical LAN IOA increments its enqueue pointer after each enqueue. If the + pointer increment (modulo the buffer size) loops to the top, the valid + toggle bit alternates state. + Following the write of the message descriptor, if enqueue + interrupts are enabled and there is not an outstanding interrupt signaled + from the Logical LAN IOA’s interrupt source number, an interrupt is + signaled. + It is the architectural intent that the first 8 bytes of the buffer + is a device driver supplied opaque handle that is copied into the receive + queue entry. One possible format of the opaque handle is the OS effective + address of the buffer control block that pre-ends the buffer as seen by + the VLAN Logical IOA. Within this control block might be stored the total + length of the buffer, the 8 byte buffer descriptor (used to enqueue this + buffer using the H_ADD_LOGICAL_LAN_BUFFER hcall()) and other control + fields as deemed necessary by the device driver. + When servicing the receive interrupt, it is the architectural + intent that the device driver starts to search the receive queue using a + device driver maintained receive queue service pointer (initially + starting, after buffer registration, at the offset zero of the receive + queue) servicing all receive queue entries with the appropriate valid + bit, until reaching the first invalid receive queue entry. The receive + queue service pointer is also post incremented, modulo the receive queue + buffer length, and the device driver’s notion of valid bit state is + also toggled/read from the receive queue descriptor’s valid bit + toggle bit, on each cycle through the circular buffer. After all valid + receive queue entries are serviced, the device driver resets the + interrupt. + . After the interrupt reset, + the device driver again scans from the new value of the receive queue + service pointer to pick up any entries that may have been enqueued during + the interrupt reset window. +
+ +
+ MAC Multicast Filter List + This one 4 KB page (aligned on a 4 KB boundary) opaque data + structure is used by firmware to contain multicast filter MAC addresses. + The table is initialized by firmware by the H_REGISTER_LOGICAL_LAN + hcall(). Any modification of this table by the partition software (OS or + device driver) is likely to corrupt its contents which may corrupt/affect + the OS’s partition but not other partitions, that is, the + hypervisor may not experience significant performance degradation due to + table corruption. However, for the partition that corrupted its filter + list, the hypervisor may deliver multicast address packets that had + previously been requested to be filtered out, or it may fail to deliver + multicast address packets that had been requested to be delivered. +
+ +
+ Receive Buffers + The Logical LAN firmware requires that the minimum size receive + buffer is 16 bytes aligned on an 4 byte boundary so that stores of + linkage pointer may be atomic. Minimum IP message sizes, and message + padding areas force a larger minimum size buffer. + The first 8 bytes of the receive buffer are reserved for a device + driver defined opaque handle that is written into the receive queue entry + when the buffer is filled with a received message. Firmware never + modifies the first 8 bytes of the receive buffer. + From the time of buffer registration via the + H_ADD_LOGICAL_LAN_BUFFER hcall() until the buffer is posted onto the + receive queue, the entire buffer other than the first 8 bytes are subject + to modification by the firmware. Any modification of the buffer contents, + during this time, by non-firmware code subjects receive data within the + partition to corruption. However, any data corruption caused by errors in + partition code does not escape the offending partition, except to the + extent that the corruption involves the data in Logical LAN send + buffers. + Provisions are incorporated in the receive buffer format for a + beginning pad field to allow firmware to make use of data transfer + hardware that may be alignment sensitive. While the contents of the Pad + fields are undefined, firmware is not allowed to make visible to the + receiver more data than was specifically included by the sender in the + transfer message, so as to avoid a covert channel between the + communicating partitions. +   + + Receive Buffer Format + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + + Opaque Handle + + + + 0 + + + 8 + + + Per design of the device driver. + + + + + + Pad 1 + + + + 8 + + + 0-L1 cache line size + + + This field, containing undefined data, may be included by + the firmware to align data for optimized transfers. + + + + + + Message + + + + defined by the “Message Offset” field of the + Receive Queue Entry + + + 12-N + + + The destination and source MAC address are at the first + two 6 byte fields of the message, followed by the message + payload. + + + + + + Pad 2 + + + +   + + + To end of buffer + + + Buffer contents after the Message field are + undefined. + + + + +
+
+
+ +
+ Logical LAN Device Tree Node + The Logical LAN device tree node is a child of the + vdevice node which itself is a child of + / (the root node). There exists one such node for + each logical LAN virtual IOA instance. Additionally, Logical LAN device + tree nodes have associated packages such as obp-tftp and load method as + appropriate to the specific virtual IOA configuration as would the node + for a physical IOA of type network. + Logical IOA’s intrinsic MAC address -- This number is + guaranteed to be unique within the scope of the Logical LAN. +   + + Properties of the Logical LAN OF Device Tree + Node + + + + + + + + + Property Name + + + + + Required? + + + + + Definition + + + + + + + + + “name” + + + + Y + + + Standard property name per + , specifying the + virtual device name, the value shall be + “l-lan”. + + + + + + “device_type” + + + + Y + + + Standard property name per + , specifying the + virtual device type, the value shall be + “network”. + + + + + + “model” + + + + NA + + + Property not present. + + + + + + “compatible” + + + + Y + + + Standard property name per + , specifying the + programming models that are compatible with this virtual IOA, + the value shall include + “IBM,l-lan”. + + + + + + “used-by-rtas” + + + + See definition column + + + Present if appropriate. + + + + + + “ibm,loc-code” + + + + Y + + + Property name specifying the unique and persistent + location code associated with this virtual IOA, the value shall + be of the form defined in + . + + + + + + “reg” + + + + Y + + + Standard property name per + , specifying the unit + address (unit ID) associated with this virtual IOA presented as + an encoded array as with + encode-phys of length + “#address-cells” value shall be + 0xwhatever (virtual + “reg” property used for unit + address no actual locations used, therefore, the size field has + zero cells (does not exist) as determined by the value of the + “#size-cells” property). + + + + + + “ibm,my-dma-window” + + + + Y + + + Property name specifying the DMA window associated with + this virtual IOA presented as an encoded array of three values + (LIOBN, phys, size) encoded as with + encode-int, + encode-phys, and + encode-int. + + + + + + “local-mac-address” + + + + Y + + + Standard property name per + , specifying the + locally administered MAC addresses are denoted by having the + low order two bits of the high order byte being 0b10. + + + + + + “mac-address” + + + + See definition column + + + Initial MAC address (may be changed by + H_CHANGE_LOGICAL_LAN_MAC hcall()). Note: There have been + requests for a globally unique mac address per logical LAN IOA. + However, the combination of -- that requiring that the platform + ship with an unbounded set of reserved globally unique + addresses -- which clearly cannot work -- plus the availability + of IP routing for external connectivity have overridden those + requests. + + + + + + “ibm,mac-address-filters” + + + + Y + + + Property name specifying the number of non-broadcast + multicast MAC filters supported by this implementation (between + 0 and 255) presented as an encoded array encoded as with + encode-int. + + + + + + “interrupts” + + + + Y + + + Standard property name specifying the interrupt source + number and sense code associated with this virtual IOA + presented as an encoded array of two cells encoded as with + encode-int with the first cell containing + the interrupt source number, and the second cell containing the + sense code 0 indicating positive edge triggered. The interrupt + source number being the value returned by the H_XIRR or H_IPOLL + hcall(). + + + + + + “ibm,my-drc-index” + + + + For DR + + +   + + + + + + “ibm,vserver” + + + + Y + + + Property name specifying that this is a virtual server + node. + + + + + + “ibm,trunk-adapter” + + + + See definition column + + + Property name specifying that this is a Trunk Adapter. + This property must be provided when the node is a Trunk Adapter + node. + + + + + + “ibm,illan-options” + + + + See definition column + + + This property is required when any of the ILLAN + sub-options are implemented (see + ). The existence of + this property indicates that the H_ILLAN_ATTRIBUTES hcall() is + implemented, and that hcall() is then used to determine which + ILLAN options are implemented. + + + + + + “supported-network-types” + + + + Y + + + Standard property name as per + . + Reports possible types of “network” + the device can support. + + + + + + “chosen-network-type” + + + + Y + + + Standard property name as per + . + Reports the type of “network” this + device is supporting. + + + + + + “max-frame-size” + + + + Y + + + Standard property name per + , to indicate maximum + packet size. + + + + + + “address-bits” + + + + Y + + + Standard property name per + , to indicate network + address length. + + + + + + “ibm,#dma-size-cells” + + + + See definition column + + + Property name, to define the package’s dma address + size format. The property value specifies the number of cells + that are used to encode the size field of dma-window + properties. This property is present when the dma address size + format cannot be derived using the method described in the + definition for the + “ibm,#dma-size-cells” property + in + . + + + + + + “ibm,#dma-address-cells” + + + + See definition column + + + Property name, to define the package’s dma address + format. The property value specifies the number of cells that + are used to encode the physical address field of dma-window + properties. This property is present when the dma address + format cannot be derived using the method described in the + definition for the + “ibm,#dma-address-cells” property in + . + + + + +
+
+ +
+ Logical LAN hcall()s + The receiver can set the virtual interrupt associated with its + Receive Queue to one of two modes using the H_VIO_SIGNAL hcall(). These + are: + + + + Disabled (An enqueue interrupt is not signaled.) + + + + Enabled (An enqueue interrupt is signaled on every + enqueue) + + + + Note: An enqueue is considered a pulse not a level. + The pulse then sets the memory element within the emulated interrupt + source controller. This allows the resetting of the interrupt condition + by simply issuing the H_EOI hcall() as is done with the PCI MSI + architecture rather than having to do an explicit interrupt reset as in + the case with PCI LSI architecture. + The interrupt mechanism, however, is capable of presenting only one + interrupt signal at a time from any given interrupt source. Therefore, no + additional interrupts from a given source are ever signaled until the + previous interrupt has been processed through to the issuance of an H_EOI + hcall(). Specifically, even if the interrupt mode is enabled, the effect + is to interrupt on an empty to non-empty transition of the queue. + +
+ H_REGISTER_LOGICAL_LAN + + + + Syntax: + + + + + + + Parameters: + + + + unit-address: As specified in the Logical LAN device tree node + “reg” property + + + + buf-list: I/O address of a 4 KB page (aligned) used to record + registered input buffers + + + + rec-queue: Buffer descriptor of a receive queue, specifying a + receive queue which is a multiple of 16 bytes in length and is 16 byte + aligned + + + + filter-list: I/O address of a 4 KB page aligned broadcast MAC + address filter list + + + + mac-address: The receive filter MAC address + + + + + + Semantics: + + + + Validate the Unit Address else H_Parameter + + + + Validate the I/O addresses of the buf-list and filter-list is in + the TCE and is 4K byte aligned else H_Parameter + + + + Validate the Buffer Descriptor of the receive queue buffer (I/O + addresses for entire buffer length starting at the specified I/O address + are translated by the RTCE table, length is a multiple of 16 bytes, and + alignment is on a 16 byte boundary) else H_Parameter. + + + + Initialize the one page buffer list + + + + Enqueue the receive queue buffer (set valid toggle to 0). + + + + Initialize the hypervisor’s receive queue enqueue pointer + and length variables for the virtual IOA associated with the Unit + Address. These variables are kept in terms of DMA addresses so that page + migration works and any remapping of TCEs is effective. + + + + Disable receive queue interrupts. + + + + Record the low order 6 bytes of mac-address for filtering future + incoming messages. + + + + Return H_Success. + + + +
+ +
+ H_FREE_LOGICAL_LAN + + + + Syntax: + + + + + + + Parameters: + + + + unit-address: Unit Address per device tree node + “reg” property. + + + + + + Semantics: + + + + Validate the Unit Address else H_Parameter + + + + Interlock/carefully manipulate tables so that H_SEND_LOGICAL_LAN + performs safely. + + + + Clear the associated page buffer list, prevent further + consumption of receive buffers and generation of receive + interrupts. + + + + Return H_Success. + + + + H_FREE_LOGICAL_LAN is the only valid mechanism to reclaim the + memory pages registered via H_REGISTER_LOGICAL_LAN. + + Implementation Note: If the hypervisor returns an + H_Busy, H_LongBusyOrder1mSec, or H_LongBusyOrder10mSec, software must + call H_FREE_LOGICAL_LAN again with the same parameters. Software may + choose to treat H_LongBusyOrder1mSec and H_LongBusyOrder10mSec the same + as H_Busy. The hypervisor, prior to returning H_Busy, + H_LongBusyOrder1mSec, or H_LongBusyOrder10mSec, will have placed the + virtual adapter in a state that will cause it to not accept any new work + nor surface any new virtual interrupts (no new frames will arrive, + etc.). + +
+ +
+ H_ADD_LOGICAL_LAN_BUFFER + + + + Syntax: + + + + + + + Parameters: + + + + unit-address: Unit Address per device tree node + “reg” property + + + + buf: Buffer Descriptor of new I/O buffer + + + + + + Semantics: + + + + Checks that unit address is OK else H_Parameter. + + + + Checks that I/O Address is within range of DMA window. + + + + Scans the buffer list for a pool of buffers of the length + specified in the Descriptor + + + + If one does not exist (and there is still room in the buffer + list, create a new pool entry else H_Resource). + + + + Uses enqueue procedure that is compatible with H_SEND_LOGICAL_LAN + hcall()’s dequeue procedure + + + + Implementation Note: Since the buffer queue is based upon I/O + addresses that are checked by H_SEND_LOGICAL_LAN, it is only necessary to + insure that the enqueue/dequeue are internally consistent. If the owning + OS corrupts his buffer descriptors or buffer queue pointers, this is + caught by H_SEND_LOGICAL_LAN and/or the corruption is contained within + the OS’s partition. + Architecture Note: Consideration was given to define the enqueue + algorithm and have the DD do the enqueue itself. However, no designs + presented themselves that eliminated the timing windows caused by adding + and removing pool lists without the introduction of OS/FW + interlocks. + +
+ +
+ H_FREE_LOGICAL_LAN_BUFFER + + + + Syntax: + + + + + + + Parameters: + + + + unit-address: Unit Address per device tree node + “reg” property. + + + + bufsize: The size of the buffer that is being requested to be + removed from the receive buffer pool. + + + + + + Semantics: + + + + Check that unit address is valid, else return H_Parameter. + + + + Scan the buffer list for a pool of buffers of the length + specified in bufsize, and return H_Not_Found if one does not + exist. + + + + Place an entry on receive queue for buffer of specified size, + with Control field Bit 1 set to 0, and return H_Success + + + +
+ +
+ H_SEND_LOGICAL_LAN + + + + Syntax: + + + + The H_Dropped return code indicates to the sender that one or more + intended receivers did not receive the message. + + + + Parameters: + + + + unit-address: Unit Address per device tree node + “reg” property + + + + buff-1: Buffer Descriptor #1 + + + + buff-2: Buffer Descriptor #2 + + + + buff-3: Buffer Descriptor #3 + + + + buff-4: Buffer Descriptor #4 + + + + buff-5: Buffer Descriptor #5 + + + + buff-6: Buffer Descriptor #6 + + + + continue-token: Used to continue a transfer if H_Busy is + returned. Set to 0 on the first call. If H_Busy is returned, then call + again but use the value returned in R4 from the previous call as the + value of continue-token. + + + + + + Semantics: + + + + If continue-token is non-zero, then do appropriate checks to see + that parameters and buffers are still valid, and pickup where the + previous transfer left off for the specified unit address, based on the + value of the continue-token. + + + + If continue-token is zero and if previous H_SEND_LOGICAL_LAN for + the specified unit address was suspended with H_Busy and never completed, + then cleanup the state from the previously suspended call before + proceeding. + + + + Verifies the VLAN number -- else H_Parameter. + + + + Proceeds down the 6 buffer descriptors until the first one that + has a length of 0 + + + + If the + “ibm,max-virtual-dma-size” property exist + in the + /vdevice node of the device tree, then if the length + is greater than the value of this property, return H_Parameter + + + + For the length of the buffer: + + + + Verifies the I/O buffer addresses translate through the + sender’s RTCE table else H_Parameter. + + + + + + + + Verifies the destination MAC address for the VLAN + + + + If MAC address is not cached and there exists a Trunk Adapter for + the VLAN, then flags the message as destined for the Trunk Adapter and + continues processing + + + + If MAC address is not cached and a Trunk Adapter does not exist + for the VLAN, then drop the message (H_Dropped) + + + + + + For each Destination MAC Address (broadcast MAC address turns + into multi-cast to all destinations on the specified VLAN): + + + + In the case of multicast MAC addresses the following algorithm + defines the members of the receiver class for a given VLAN: + For each logical lan IOA that would be a target for a broadcast + from the source IOA: + + + + If the receiving IOA is not enabled for non-broadcast multicast + frames then continue + + + + If the receiving IOA is not enabled for filtering non-broadcast + multicast frames then copy the frame to the IOA's receive buffer + Else + + + + If (lookup filter (table index)) then copy the frame to the + IOA's receive buffer + + + + Else if the receiving IOA is not enabled for filtering + non-broadcast multicast frames then copy the frame to the IOA's receive + buffer /*allows for races on filter insertion */ + + + + + + int lookup filter (table index) + + + + Firmware implementation designed algorithm + + + + + + + Searches the receiver’s receive queue for a suitable buffer + and atomically dequeues it: + + + + If no suitable buffer is found, the receiver’s dropped + packet counter (last 8 bytes of buffer list) is incremented and + processing proceeds to the next receiver if any. + + + + + + Copy the send data in to the selected receive buffer, build a + receive queue entry, and generate an interrupt to the receiver if the + interrupt is enabled. + + + + + + If any frames were dropped return H_Dropped else return + H_Success. + + + + Firmware Implementation Note: If during the + processing of the H_SEND_LOGICAL_LAN call, it becomes necessary to + temporarily suspend the processing of the call (for example, due to the + length of time it is taking to process the call), the firmware may return + a continuation token in R4, along with the return code of H_Busy. The + value of the continuation token is up to the firmware, and will be passed + back by the software as the continue-token parameter on the next call of + H_SEND_LOGICAL_LAN. + This hcall() interlocks with H_MIGRATE_DMA to allow for migration + of TCE mapped DMA pages. + Note: It is possible for either or both the sending + and receiving OS to modify its RTCE tables so as to affect the TCE + translations being actively used by H_SEND_LOGICAL_LAN. This is an error + condition on the part of the OS. Implementations need only insure that + such conditions do not corrupt memory in innocent partitions and should + not add path length to protect guilty partitions. By all means the path + length of H_GET_TCE and H_PUT_TCE should not be increased. If reasonably + possible, without significant path length addition, implementations + should: On send buffer translation corruption, return H_Parameter to the + sender and either totally drop the packet prior to reception, or if the + receive buffer has been processed past the point of transparent + recycling, mark the receive buffer as received in error in the receive + queue. On receive buffer translation corruption, terminate the data copy + to the receive buffer and mark the buffer as received in error in the + receive queue. + +
+ +
+ H_MULTICAST_CTRL + This hcall() controls the reception of non-broadcast multicast + packets (those with the high order address byte being odd but not the all + 1’s address). All implementations support the enabling and + disabling of the reception of all multicast packets on their V-LAN. + Additionally, the l-lan device driver through this call may ask the + firmware to filter multicast packets for it. That is, receive packets + only if they contain multicast addresses specified by the device driver. + The number of simultaneous multicast packet filters supported is + implementation dependent, and is specified in the + “ibm,mac-address-filters” property of the + l-lan device tree node. Therefore, the device driver must be prepared to + have any filter request fail, and fall back to enabling reception of all + multicast packets and filtering them in the device driver. Semantically, + the device driver may ask that the reception of multicast packets be + enabled or disabled, further if reception is enabled, they may be + filtered by only allowing reception of packets who’s mac address + matches one of the entries in the filter table. The call also manages the + contents of the mac address filter table. Individual mac addresses may be + added, or removed, and the filter table may be cleared. If the filter + table is modified by a call, there is the possibility that a packet may + be improperly filtered (one that was to be filtered out may get through + or one that should have gotten through may be dropped) this is done to + avoid adding extra locking to the packet processing code. In most cases + higher level protocols will handle the condition (since firmware + filtering is simply a performance optimization), if, however, a specific + condition requires complete accuracy, the device driver can disable + filtering prior to an update, do its own filtering (as would be required + if the number of receivers exceeded the number of filters in the filter + table) update the filter table, and then reenable filtering. + + + Syntax: + + + + + + + Parameters: + + + + unit-address: Unit Address per device tree node + “reg” property + + + + flags: Only bits 44-47 and 62-63 are defined all other bits + should be zero. + + + + multi-cast-address: Multicast MAC address, if flag bits 62 and 63 + are 01 or 10, else this parameter is ignored. + + + + Return value in register R4: + State of Enables and Count of MAC Filters in table. + Format: + + R = The value of the Receipt Enable bit + F = The value of the Filter Enable bit + MAC Filter Count -- 16 bit count of the number of MAC Filters in + the multicast filter table. + + + + Semantics: + + + + Validate the unit-address parameter else return + H_Parameter. + + + + Validate that no reserved flag bit = 1 else return + H_Parameter. + + + + If any bits are on in the high order two bytes of the MAC + parameter Return H_Parameter + + + + Modify Enables per specification if requested. + + + + Modify the Filter Table per specification if requested filtering + is disable during any filter table modification and filter enable state + restored after filter table modification). + + + + If don't modify RC=H_Success + + + + If Clear all: initialize the filter table, RC=H_Success + + + + If Add: + + + + If there is room in the table insert new MAC Filter entry, MAC + Filter count++, RC=H_Success + + + + Else RC=H_Constrained + + + + (duplicates are silently dropped -- filter count stays the same + RC=H_Success) + + + + + + If Remove: + + + + Locate the specified entry in the MAC Filter Table + + + + If Found remove the entry, MAC Filter count--, + RC=H_Success + + + + Else RC=H_Not_Found + + + + + + + + Load the Enable Bits into R4 bits 46 and 47 Load the MAC Filter + count into R4 Bits 48-63 + + + + Return RC + + + +
+ +
+ H_CHANGE_LOGICAL_LAN_MAC + This hcall() allows the changing of the virtual IOA’s MAC + address. + + + Syntax: + + + + + + + Parameters: + + + + unit-address: Unit Address per device tree node + “reg” property + + + + mac-address: The new receive filter MAC address + + + + + + Semantics: + + + + Validates the unit address, else H_Parameter + + + + Records the low order 6 bytes of mac-address for filtering future + incoming messages + + + + Returns H_Success + + + +
+ +
+ H_ILLAN_ATTRIBUTES + There are certain ILLAN attributes that are made visible to and can + be manipulated by partition software. The H_ILLAN_ATTRIBUTES hcall is + used to read and modify the attributes (see + ). + defines the attributes that are + visible and manipulatable. +   + + ILLAN Attributes + + + + + + + + + Bit(s) + + + + + Field Name + + + + + Definition + + + + + + + + 0-49 + + + Reserved + + +   + + + + + 50 + + + Checksum Offload Padded Packet Support + + + This bit is implemented when the ILLAN Checksum Offload + Padded Packet Support option is implemented. See + . + 0: Software must not request checksum offload, by setting + Bit 6 of the buffer descriptor (the No Checksum bit), for + packets that have been padded. + 1: Software may request checksum offload, by setting Bit + 6 of the buffer descriptor (the No Checksum bit), for packets + that have been padded. + + + + + 51 + + + Buffer Size Control + + + This bit is implemented when the ILLAN Buffer Size + Control option is implemented. This bit allows the partition + software to inhibit the use of too large of a buffer for + incoming packets, when a reasonable size buffer is not + available. The state of this bit cannot be changed between the + time that the ILLAN is registered by an H_REGISTER_LOGICAL_LAN + and it is deregistered by an H_FREE_LOGICAL_LAN. See also + . + 1: The hypervisor will keep a history of what buffer + sizes have been registered. When a packets arrives the history + is searched to find the smallest buffers size that will contain + the packet. If that buffer size is depleted then the packet is + dropped by the hypervisor (H_Dropped) instead of searching for + the next larger available buffer. + 0: This is the initial value. When a packet arrives, the + available buffers are searched for the smallest available + buffer that will hold the packet, and the packet is not dropped + unless no buffer is available in which the packet will + fit. + + + + + 52-55 + + + Trunk Adapter Priority + + + This field is implemented for a VIOA whenever the ILLAN + Backup Trunk Adapter option is implemented and the VIOA is a + Trunk Adapter (the Active Trunk Adapter bit will be + implemented, also, in this case). If this field is a 0, then + the either the ILLAN Backup Trunk Adapter option is not + implemented or it is implemented but this VIOA is not a Trunk + Adapter. A non-0 value in this field reflects the priority of + the node in the backup Trunk Adapter hierarchy, with a value of + 1 being the highest (most favored) priority, the value of 2 + being the next highest priority, and so on. This field may or + may not be changeable by the partition firmware via the + H_ILLAN_ATTRIBUTES hcall() (platform implementation dependent). + If not changeable, then attempts to change this field will + result in a return code of H_Constrained. See also + . + + + + + 56-60 + + + Reserved + + +   + + + + + 61 + + + TCP Checksum Offload Support for IPv6 + + + This bit is implemented for a VIOA whenever the ILLAN + Checksum Offload Support option is implemented for TCP, the + IPv6 protocol, and the following extension headers: + Hop-by-Hop Options + Routing + Destination Options + Authentication + Mobility + This bit is initially set to 0 by the firmware and the + ILLAN DD may attempt to set it to a 1 by use of the + H_ILLAN_ATTRIBUTES hcall() if the DD supports the option for + TCP and IPv6. Firmware will not allow changing the state of + this bit if it does not support Checksum Offload Support for + TCP for IPv6 for the VIOA (H_Constrained would be returned in + this case from the H_ILLAN_ATTRIBUTES hcall() when this bit is + a 1 in the set-mask). This state of this bit cannot be changed + between the time that the ILLAN is registered by an + H_REGISTER_LOGICAL_LAN and it is deregistered by an + H_FREE_LOGICAL_LAN. See + for more + information. + 1: The partition software has indicated that it supports + the ILLAN Checksum Offload Support option for TCP and IPv6 + protocol and for the above stated extension headers by using + the H_ILLAN_ATTRIBUTES hcall() with this bit set to a 1 in the + set-mask, and the firmware has verified that it supports this + protocol for the option for the VIOA. + 0: The partition software has not indicated that it + supports the ILLAN Checksum Offload Support option for TCP and + IPv6 protocol and for the above stated extension headers by + using the H_ILLAN_ATTRIBUTES hcall() with this bit set to a 1 + in the set-mask, or it has but the firmware does not support + the option, or supports the option but not for this protocol or + for this VIOA. + + + + + 62 + + + TCP Checksum Offload Support for IPv4 + + + This bit is implemented for a VIOA whenever the ILLAN + Checksum Offload Support option is implemented for TCP and the + IPv4 protocol. This bit is initially set to 0 by the firmware + and the ILLAN DD may attempt to set it to a 1 by use of the + H_ILLAN_ATTRIBUTES hcall() if the DD supports the option for + TCP and IPv4. Firmware will not allow changing the state of + this bit if it does not support Checksum Offload Support for + TCP or IPv4 for the VIOA (H_Constrained would be returned in + this case from the H_ILLAN_ATTRIBUTES hcall() when this bit is + a 1 in the set-mask). This state of this bit cannot be changed + between the time that the ILLAN is registered by an + H_REGISTER_LOGICAL_LAN and it is deregistered by an + H_FREE_LOGICAL_LAN. See + for more + information. + 1: The partition software has indicated that it supports + the ILLAN Checksum Offload Support option for TCP and IPv4 + protocol by using the H_ILLAN_ATTRIBUTES hcall() with this bit + set to a 1 in the set-mask, and the firmware has verified that + it supports this protocol for the option for the VIOA. + 0: The partition software has not indicated that it + supports the ILLAN Checksum Offload Support option for TCP and + IPv4 by using the H_ILLAN_ATTRIBUTES hcall() with this bit set + to a 1 in the set-mask, or it has but the firmware does not + support the option, or supports the option but not for this + protocol or for this VIOA. + + + + + 63 + + + Active Trunk Adapter + + + This bit is implemented for a VIOA whenever the ILLAN + Backup Trunk Adapter option is implemented and the VIOA is a + Trunk Adapter (the Trunk Adapter Priority field will be + implemented, also, in this case). + This bit is initially set to 0 by the firmware for an + inactive Trunk Adapter. + This bit is initially set to 1 by the firmware for an + active Trunk Adapter. + This bit will be changed from a 0 to a 1 when all the + following a true: (1) the partition software (via the + H_ILLAN_ATTRIBUTES hcall() with this bit set to a 1 in the + set-mask) attempts to set this bit to a 1, (2) the firmware + supports the Backup Trunk Adapter option, (3) the VIOA is a + Trunk Adapter. + This bit will be changed from a 1 to a 0 by the firmware + when another Trunk Adapter has had its Active Trunk Adapter bit + changed from a 0 to a 1. + See + for more + information. + 1: The VIOA is the active Trunk Adapter. + 0: The VIOA is not an active Trunk Adapter or is not a + Trunk Adapter at all. + + + + +
+ + + + R1--1. + + + If the H_ILLAN_ATTRIBUTES hcall is + implemented, then it must implement the attributes as they are defined in + and the syntax and semantics as + defined in + . + + + + + R1--2. + + + The H_ILLAN_ATTRIBUTES hcall must ignore + bits in the set-mask and reset-mask which are not implemented for the + specified unit-address and must process as an exception those which + cannot be changed for the specified unit-address (H_Constrained + returned), and must return the following for the ILLAN Attributes in + R4: + + + + A value of 0 for unimplemented bit positions. + + + + The resultant field values for implemented fields. + + + + + + + + + Syntax: + + + + + + + Parameters: + unit-address: Unit Address per device tree node + “reg” property. The ILLAN unit address on + which this Attribute modification is to be performed. + reset-mask: The bit-significant mask of bits to be reset in the + ILLAN’s Attributes (the reset-mask bit definition aligns with the + bit definition of the ILLAN’s Attributes, as defined in + ). The complement of the + reset-mask is ANDed with the ILLAN’s Attributes, prior to applying + the set-mask. See semantics for more details on any field-specific + actions needed during the reset operations. If a particular field + position in the ILLAN Attributes is not implemented, then the + corresponding bit(s) in the reset-mask are ignored. + set-mask: The bit-significant mask of bits to be set in the + ILLAN’s Attributes (the set-mask bit definition aligns with the bit + definition of the ILLAN’s Attributes, as defined in + ). The set-mask is ORed with + the ILLAN’s Attributes, after to applying the reset-mask. See + semantics for more details on any field-specific actions needed during + the set operations. If a particular field position in the ILLAN + Attributes is not implemented, then the corresponding bit(s) in the + set-mask are ignored. + + + + Semantics: + + + + Validate that Unit Address belongs to the partition, else + H_Parameter. + + + + Reset/set the bits in the ILLAN Attributes, as indicated by the + rest-mask and set-mask except as indicated in the following + conditions. + + + + If the Buffer Size Control bit is trying to be changed from a 0 + to a 1 and any of the following is true, then do not allow the change + (H_Constrained will be returned): + + + + The ILLAN is active. That is, the ILLAN has been registered + (H_REGISTER_LOGICAL_LAN) but has not be deregistered + (H_FREE_LOGICAL_LAN). + + + + The firmware does not support the ILLAN Buffer Size Control + option. + + + + + + If the Buffer Size Control bit is trying to be changed from a 1 + to a 0 and any of the following is true, then do not allow the change + (H_Constrained will be returned): + + + + The ILLAN is active. That is, the ILLAN has been registered + (H_REGISTER_LOGICAL_LAN) but has not be deregistered + (H_FREE_LOGICAL_LAN). + + + + + + If either the TCP Checksum Offload Support for IPv4 bit or TCP + Checksum Offload Support for IPv6 bit is trying to be changed from a 0 to + a 1 and any of the following is true, then do not allow the change + (H_Constrained will be returned): + + + + The ILLAN is active. That is, the ILLAN has been registered + (H_REGISTER_LOGICAL_LAN) but has not be deregistered + (H_FREE_LOGICAL_LAN). + + + + The firmware does not support the ILLAN Checksum Offload Support + option or supports it, but not for the specified protocol(s) or does not + support it for this VIOA. + + + + + + If the TCP Checksum Offload Support for IPv4 bit or TCP Checksum + Offload Support for IPv6 bit is trying to be changed from a 1 to a 0 and + any of the following is true, then do not allow the change (H_Constrained + will be returned): + + + + The ILLAN is active. That is, the ILLAN has been registered + (H_REGISTER_LOGICAL_LAN) but has not be deregistered + (H_FREE_LOGICAL_LAN). + + + + + + If the Active Trunk Adapter bit is trying to be changed from a 0 + to a 1 and any of the following is true, then do not allow the change + (H_Constrained will be returned): + + + + The firmware does not support the ILLAN Backup Trunk Adapter + option or this VIOA is not a Trunk Adapter. + + + + + + If the Active Trunk Adapter bit is trying to be changed from a 1 + to a 0, then return H_Parameter. + + + + If the Active Trunk Adapter bit is changed from a 0 to a 1 for a + VIOA, then also set any previously active Trunk Adapter’s Active + Trunk Adapter bit from a 1 to a 0. + + + + If the Trunk Adapter Priority field is trying to be changed from + 0 to a non-0 value, then return H_Parameter. + + + + If the Trunk Adapter Priority field is trying to be changed from + a non-0 value to another non-0 value and either the parameter is not + changeable or the change is not within the platform allowed limits, then + do not allow the change (H_Constrained will be returned). + + + + Load R4 with the value of the ILLAN’s Attributes, with any + unimplemented bits set to 0, and if all requested changes were made then + return H_Success, otherwise return H_Constrained. + + + +
+ +
+ Other hcall()s extended or used by the Logical LAN + Option + + +
+ H_VIO_SIGNAL + The H_VIO_SIGNAL hcall() is used by multiple VIO options. +
+ +
+ H_EOI + The H_EOI hcall(), when specifying an interrupt source number + associated with an interpartion logical LAN IOA, incorporates the + interrupt reset function. +
+ +
+ H_XIRR + This call is extended to report the virtual interrupt source number + associated with virtual interrupts associated with an ILLAN IOA. +
+ +
+ H_PUT_TCE + This standard hcall() is used to manage the ILLAN IOA’s I/O + translations. +
+ +
+ H_GET_TCE + This standard hcall() is used to manage the ILLAN IOA’s I/O + translations. +
+ +
+ H_MIGRATE_DMA + This hcall() is extended to serialize with the H_SEND_LOGICAL_LAN + hcall() to allow for migration of TCE mapped DMA pages. +
+
+
+ +
+ RTAS Calls Extended or Used by the Logical LAN + Option + Platforms may combine the Logical LAN option with most other LoPAR + options such as dynamic reconfiguration by including the appropriate OF + properties and extending the associated firmware calls. However, the + ibm,set-xive, ibm,get-xive, ibm,int-off, + and + ibm,int-on RTAS calls are extended as part of the + base support. +
+ +
+ Interpartition Logical LAN Requirements + The following requirements are mandated for platforms implementing + the ILLAN option. + + + + R1--1. + + For the ILLAN option: The platform must interpret + logical LAN buffer descriptors as defined in + . + + + + + R1--2. + + For the ILLAN option: The platform must reject + logical LAN buffer descriptors that are not 8 byte aligned. + + + + + R1--3. + + For the ILLAN option: The platform must interpret the + first byte of a logical LAN buffer descriptor as a control byte, the high + order bit being the valid bit. + + + + + R1--4. + + For the ILLAN option: The platform must set the next + to high order bit of the control byte of the logical LAN buffer + descriptor for the receive queue to the inverse of the value currently + being used to indicate a valid receive queue entry. + + + + + R1--5. + + For the ILLAN option: The platform must interpret the + 2nd through 4th bytes of a logical LAN buffer descriptor as the binary + length of the buffer in I/O space (relative to the TCE mapping table + defined by the logical IOA’s + “ibm,my-dma-window” property). + + + + + R1--6. + + For the ILLAN option: The platform must interpret the + 5th through 8th bytes of a logical LAN buffer descriptor as the binary + beginning address of the buffer in I/O space (relative to the TCE mapping + table defined by the logical IOA’s + “ibm,my-dma-window” property). + + + + + R1--7. + + For the ILLAN option: The platform must interpret + logical LAN Buffer Lists as defined in + . + + + + + R1--8. + + For the ILLAN option: The platform must reject + logical LAN Buffer Lists that are not mapped relative to the TCE mapping + table defined by the logical IOA’s + “ibm,my-dma-window” property. + + + + + R1--9. + + For the ILLAN option: The platform must reject + logical LAN buffer lists that are not 4 KB aligned. + + + + + R1--10. + + For the ILLAN option: The platform must interpret the + first 8 bytes of a logical LAN buffer list as a buffer descriptor for the + logical IOA’s Receive Queue. + + + + + R1--11. + + For the ILLAN option: The platform must interpret the + logical LAN receive queue as defined in + . + + + + + R1--12. + + For the ILLAN option: The platform must reject a + logical LAN receive queue that is not mapped relative to the TCE mapping + table defined by the logical IOA’s + “ibm,my-dma-window” property. + + + + + R1--13. + + For the ILLAN option: The platform must reject a + logical LAN receive queue that is not aligned on a 4 byte + boundary. + + + + + R1--14. + + For the ILLAN option: The platform must reject a + logical LAN receive queue that is not an exact multiple of 12 bytes + long. + + + + + R1--15. + + For the ILLAN option: The platform must manage the + logical LAN receive queue as a circular buffer. + + + + + R1--16. + + For the ILLAN option: The platform must enqueue 12 + byte logical LAN receive queue entries when a new message is + received. + + + + + R1--17. + + For the ILLAN option: + The platform must + set the last 8 bytes of the logical LAN receive queue entry to the value + of the user supplied correlator found in the first 8 bytes of the logical + LAN receive buffer used to contain the message before setting the first 4 + bytes of the logical LAN receive queue entry. + + + + + R1--18. + + For the ILLAN option: + The platform must + set the first 4 bytes of the logical LAN receive queue entry such that + the first byte contains the control field (high order bit the inverse of + the valid toggle in the receive queue buffer descriptor, next bit to a + one if the message payload is valid) and the last 3 bytes contains the + receive message length, after setting the correlator field in the last 8 + bytes per Requirement + . + + + + + R1--19. + + For the ILLAN option: The platform must when crossing + from the end of the logical LAN receive queue back to the beginning + invert the value of the valid toggle in the receive queue buffer + descriptor. + + + + + R1--20. + + For the ILLAN option: The platform’s OF must + disable interrupts from the logical LAN IOA before initially passing + control to the booted client program. + + + + + R1--21. + + For the ILLAN option: The platform must present (as + appropriate per RTAS control of the interrupt source number) the + partition owning a logical LAN receive queue the appearance of an + interrupt, from the interrupt source number associated, through the OF + device tree node, with the virtual device, when a new entry is enqueued + to the logical LAN receive queue and the last interrupt mode set via the + H_VIO_SIGNAL was “Enabled”, unless a previous interrupt from + the interrupt source number is still outstanding. + + + + + R1--22. + + For the ILLAN option: The platform must NOT present + the partition owning a logical LAN receive queue the appearance of an + interrupt, from the interrupt source number associated, through the OF + device tree node, with the virtual device, if the last interrupt mode set + via the H_VIO_SIGNAL was “Disabled”, unless a previous + interrupt from the interrupt source number is still outstanding. + + + + + R1--23. + + For the ILLAN option: The platform must interpret + logical LAN receive buffers as defined in + . + + + + + R1--24. + + For the ILLAN option: The platform must reject a + logical LAN receive buffer that is not mapped relative to the TCE mapping + table defined by the logical IOA’s + “ibm,my-dma-window” property. + + + + + R1--25. + + For the ILLAN option: The platform must reject a + logical LAN receive buffer that is not aligned on a 4 byte + boundary. + + + + + R1--26. + + For the ILLAN option: The platform must reject a + logical LAN receive buffer that is not a minimum of 16 bytes long. + + + + + R1--27. + + For the ILLAN option: The platform must not modify + the first 8 bytes of a logical LAN receive buffer, this area is reserved + for a user supplied correlator value. + + + + + R1--28. + + For the ILLAN option: The platform must not allow + corruption caused by a user modifying the logical LAN receive buffer from + escaping the user partition (except as a side effect of some another user + partition I/O operation). + + + + + R1--29. + + For the ILLAN option: The platform’s + l-lan OF device tree node must contain properties as + defined in + . (Other standard I/O adapter + properties are permissible as appropriate.) + + + + + R1--30. + + For the ILLAN option: The platform must implement the + H_REGISTER_LOGICAL_LAN hcall() as defined in + . + + + + + R1--31. + + For the ILLAN option: The platform must implement the + H_FREE_LOGICAL_LAN hcall() as defined in + . + + + + + R1--32. + + For the ILLAN option: The platform must implement the + H_ADD_LOGICAL_LAN_BUFFER hcall() as defined in + . + + + + + R1--33. + + For the ILLAN option: The platform must implement the + H_SEND_LOGICAL_LAN hcall() as defined in + . + + + + + R1--34. + + For the ILLAN option: The platform must implement the + H_SEND_LOGICAL_LAN hcall() such that an OS requested modification to an + active RTCE table entry cannot corrupt memory in other partitions. + (Except indirectly as a result of some other of the partition’s I/O + operations.) + + + + + R1--35. + + For the ILLAN option: The platform must implement the + H_CHANGE_LOGICAL_LAN_MAC hcall() as defined in + . + + + + + R1--36. + + For the ILLAN option: The platform must implement the + H_VIO_SIGNAL hcall() as defined in + . + + + + + R1--37. + + For the ILLAN option: The platform must implement the + extensions to the H_EOI hcall() as defined in + . + + + + + R1--38. + + For the ILLAN option: The platform must implement the + extensions to the H_XIRR hcall() as defined in + . + + + + + R1--39. + + For the ILLAN option: The platform must implement the + H_PUT_TCE hcall(). + + + + + R1--40. + + For the ILLAN option: The platform must implement the + H_GET_TCE hcall(). + + + + + R1--41. + + For the ILLAN option: The platform must implement the + extensions to the H_MIGRATE_DMA hcall() as defined in + . + + + + + R1--42. + + For the ILLAN option: The platforms must emulate the + standard PowerPC External Interrupt Architecture for the interrupt source + numbers associated with the virtual devices via the standard RTAS and + hypervisor interrupt calls. + + + +
+ +
+ Logical LAN Options + The ILLAN option has several sub-options. The hypervisor reports to + the partition software when it supports one or more of these options, and + potentially other information about those option implementations, via the + implementation of the appropriate bits in the ILLAN Attributes, which can + be ascertained by the H_ILLAN_ATTRIBUTES hcall(). The same hcall() may be + used by the partition software to communicate back to the firmware the + level of support for those options where the firmware needs to know the + level of partition software support. The + “ibm,illan-options” property will exist + in the VIOA’s Device Tree node, indicating that the + H_ILLAN_ATTRIBUTES hcall() is implemented, and therefore that one or more + of the options are implemented. The following sections give more + details. + +
+ ILLAN Backup Trunk Adapter Option + The ILLAN Backup Trunk Adapter option allows the platform to + provide one or more backups to a Trunk Adapter, for reliability purposes. + Implementation of the ILLAN Backup Trunk Adapter option is specified to + the partition by the existence of the + “ibm,illan-options” property in the + VIOA’s Device Tree node and a non-0 value in the ILLAN Attributes + Backup Trunk adapter Priority field. A Trunk Adapter becomes the active + Trunk Adapter by calling H_ILLAN_ATTRIBUTES hcall() and setting its + Active Trunk Adapter bit. Only one Trunk Adapter is active for a VLAN at + a time. The protocols which determine which Trunk Adapter is active at + any particular time, is beyond the scope of this architecture. + + + + R1--1. + + For the ILLAN Backup Trunk Adapter option: The + platform must implement the ILLAN option. + + + + + R1--2. + + For the ILLAN Backup Trunk Adapter option: The + platform must implement the H_ILLAN_ATTRIBUTES hcall(). + + + + + R1--3. + + For the ILLAN Backup Trunk Adapter option: The + platform must implement the + “ibm,illan-options” and + “ibm,trunk-adapter” properties in all the + Trunk Adapter nodes of the Device Tree. + + + + + R1--4. + + For the ILLAN Backup Trunk Adapter option: The + platform must implement the Active Trunk Adapter bit and the Backup Trunk + Adapter Priority field in the ILLAN Attributes, as defined in + , for all Trunk Adapter + VIOAs. + + + + + R1--5. + + For the ILLAN Backup Trunk Adapter option: The + platform must allow only one Trunk Adapter to be active for a VLAN at any + given time, and must: + + + + Make the determination of which one is active by whichever was + the most recent one to set its Active Trunk Adapter bit in their ILLAN + Attributes. + + + + Turn off the Active Trunk Adapter bit in the ILLAN Attributes + for a Trunk Adapter when it is removed from the active Trunk Adapter + state. + + + + + +
+ +
+ ILLAN Checksum Offload Support Option + This option allows for the support of IOAs that do checksum offload + processing. This option allows for support at one end (client or server) + but not the other, on a per-protocol basis, with the hypervisor + generating the checksum when the client supports offload but the server + does not, and the operation is a send from the client. + +
+ General + The H_ILLAN_ATTRIUBTES hcall is used to establish the common set of + checksum offload protocols to be supported between the firmware and the + partition software. The firmware indicates support for H_ILLAN_ATTRIBUTES + via the + “ibm,illan-options” property in the + VIOA’s Device Tree node. The partition software can determine which + of the Checksum Offload protocols (if any) that the firmware supports by + either attempting to set the bits in the ILLAN Attributes of the + protocols that the partition software supports or by calling the hcall() + with reset-mask and set-mask parameters of all-0’s (the latter + being just a query and not a request to support anything between the + partition and the firmware). + Two bits in the control field of the first buffer descriptor + specify which operations do not contain a checksum and which have had + their checksum already verified. See + . These two bits get + transferred to the corresponding control field of the Receive Queue + Entry, with the exception that the H_SEND_LOGICAL_LAN hcall will + sometimes set these to 0b00 (see + ). + + + + R1--1. + + + For the ILLAN Checksum Offload Support option: The + platform must do all the following: + + + + Implement the ILLAN option. + + + + Implement the H_ILLAN_ATTRIBUTES hcall(). + + + + Implement the + “ibm,illan-options” property in the + VIOA’s Device Tree node. + + + + Implement the appropriate Checksum Offload Support bit(s) of the + ILLAN Attributes, as defined in + . + + + + Software Implementation Note: Fragmentation and + encryption are not supported when the No Checksum bit of the Buffer + Descriptor is set to a 1. + + + +
+ +
+ H_SEND_LOGICAL_LAN Semantic Changes + There are several H_SEND_LOGICAL_LAN semantic changes required for + the ILLAN Checksum Offload Support option. See + for the base semantics. + + + + R1--1. + + + For the ILLAN Checksum Offload Support option: The + H_SEND_LOGICAL_LAN semantics must be changed as follows: + + + + As shown in + , and for multi-cast + operations, the determination in this table must be applied for each + destination. + + + + If the No Checksum bit is set to a 1 in the first buffer + descriptor and the adapter is not a Trunk Adapter, and the source MAC + address does not match the adapter's MAC address, then drop the + packet. + + + +   + + Summary of H_SEND_LOGICAL_LAN Semantics with Checksum + Offload + + + + + + + + + + + + Has Sender Set the Appropriate Checksum + Offload Support bit in the ILLAN Attributes for the Protocol + Being Used? + + + + + Has Receiver Set the Appropriate + Checksum Offload Support bit in the ILLAN Attributes for the + Protocol Being Used? + + + + + No Checksum bit in the Buffer + Descriptor + + + + + Checksum Good bit in the Buffer + Descriptor + + + + + H_SEND_LOGICAL_LAN Additional + Semantics + + + + + Receiver DD Additional + Requirements + + + + + + + + no + + + - + + + 0 + + + 0 + + + None. + + + None. + + + + + no + + + - + + + Either bit non-0 + + + Return H_Parameter + + +   + + + + + yes + + + - + + + 0 + + + 0 + + + None. + + + None. + + + + + yes + + + no + + + 0 + + + 1 + + + Set the No Checksum and Checksum Good bits in the Buffer + Descriptor to 00 on transfer. + + + None. + + + + + yes + + + no + + + 1 + + + 1 + + + Generate checksum and set the No Checksum and Checksum + Good bits in the Buffer Descriptor to 00 on transfer. + + + None. + + + + + yes + + + yes + + + 0 + + + 1 + + + None. + + + Do not need to do checksum checking. + + + + + yes + + + yes + + + 1 + + + 1 + + + None. + + + Do not need to do checksum checking. Generate checksum if + packet is to be passed on to an external LAN (may be done by + the IOA or by the DD). + + + + + - + + + - + + + 1 + + + 0 + + + Return H_Parameter + + +   + + + + + yes + + + - + + + 01 or 11 and packet type not supported by the hypervisor, + as indicated by the value returned by the H_ILLAN_ATTRIBUTES + hcall() + + + Return H_Parameter + + +   + + + + +
+
+
+ + + R1--2. + + + For the ILLAN Checksum Offload Support option: The + Receiver DD Additional Requirements shown in + must be implemented. + + + + + R1--3. + + + For the ILLAN Checksum Offload Support option: When + the caller of H_SEND_LOGICAL_LAN has set the No Checksum bit in the + Control field to a 1, then they must also have set the checksum field in + the packet to 0. + + +
+ +
+ +
+ Checksum Offload Padded Packet Support Option + Firmware may or may not support checksum offload for IPv4 packets + that have been padded. The Checksum Offload Padded Packet Support bit of + the ILLAN Attributes specifies whether or not this option is + supported. + + + + R1--1. + + + For the Checksum Offload Padded Packet Support + Option: The platform must do all the following: + + + + Implement the ILLAN Checksum Offload Support option. + + + + Implement the Checksum Offload Padded Support bit of the ILLAN + Attributes, as defined in + , and set that bit to a value + of 1. + + + + + + +
+
+ +
+ ILLAN Buffer Size Control Option + It is the partition software’s responsibility to keep + firmware supplied with enough buffers to keep packets from being dropped. + The ILLAN Buffer Size Control option gives the partition software a way + to prevent a flood of small packets from consuming buffers that have been + allocated for larger packets. + When this option is implemented and the Buffer Size Control bit in + the ILLAN Attributes is set to a 1 for the VLAN, the hypervisor will keep + a history of what buffer sizes have been registered. Then, when a packets + arrives the history is searched to find the smallest buffer size that + will contain the packet. If that buffer size is depleted then the packet + is dropped by the hypervisor (H_Dropped) instead of searching for the + next larger available buffer. + +
+ General + The following are the general requirements for this option. For + H_SEND_LOGICAL_LAN changes, see + . + + + + R1--1. + + + For the ILLAN Buffer Size Control option: The + platform must do all the following: + + + + Implement the ILLAN option. + + + + Implement the H_ILLAN_ATTRIBUTES hcall(). + + + + Implement the + “ibm,illan-options” property in the + VIOA’s Device Tree node. + + + + Implement the Buffer Size Control bit of the ILLAN Attributes, + as defined in + . + + + + + + +
+ +
+ H_SEND_LOGICAL_LAN Semantic Changes + The following are the required semantic changes to the + H_SEND_LOGICL_LAN hcall(). + + + + R1--1. + + + For the ILLAN Buffer Size Control option: When the + Buffer Size Control bit of the target of an H_SEND_LOGIC_LAN hcall() is + set to a 1, then the firmware for the H_SEND_LOGICAL_LAN hcall() must not + just search for any available buffer into which the packet will fit, but + must instead only place the packet into the receiver’s buffer if + there is an available buffer of the smallest size previously registered + by the receiver which will fit the packet, and must drop the packet for + that target otherwise. + + + +
+
+
+
+ +
+ Virtual SCSI (VSCSI) + Virtual SCSI (VSCI) support is provided by code running in a server + partition that uses the mechanisms of the Reliable Command/Response + Transport and Logical Remote DMA of the Synchronous VIO Infrastructure to + service I/O requests for code running in a client partition, such that, the + client partition appears to enjoy the services of its own SCSI adapter (see + + ). The terms server and client + partitions refer to platform partitions that are respectively servers and + clients of requests, usually I/O operations, using the physical I/O + adapters (IOAs) that are assigned to the server partition. This allows a + platform to have more client partitions than it may have physical I/O + adapters because the client partitions share I/O adapters via the server + partition. + The VSCSI architecture is built upon the architecture specified in + the following sections: + + + + + + + + + + + + + + + +
+ VSCSI General + This section contains an informative outline of the architectural + intent of the use of the Synchronous VIO Infrastructure to provide VSCSI + support, along with a few architectural requirements. Other + implementations of the server and client partition code, consistent with + this architecture, are possible and may be preferable. + The architectural metaphor for the VSCSI subsystem is that the + server partition provides the virtual equivalent of a single SCSI + DASD/Media string via each VSCSI server virtual IOA. The client partition + provides the virtual equivalent of a single port SCSI adapter via each + VSCSI client IOA. The platform, through the partition definition, + provides means for defining the set of virtual IOA’s owned by each + partition and their respective location codes. The platform also + provides, through partition definition, instructions to connect each + client partition’s VSCSI client IOA to a specific server + partition’s VSCSI server IOA. That is, the equivalent of connecting + the adapter cable to the specific DASD/Media string. The mechanism for + specifying this partition definition is beyond the scope of this + architecture. The human readable handle associated with the partition + definition of virtual IOAs and their associated interconnection and + resource configuration is the virtual location code. The OF unit address + (Unit ID) remains the invariant handle upon which the + OS builds its “physical to logical” configuration. + The client partition’s device tree contains one or more nodes + notifying the partition that it has been assigned one or more virtual + adapters. The node’s + “type” and + “compatible” properties notify the + partition that the virtual adapter is a VSCSI adapter. The + unit address of the node is used by the client + partition to map the virtual device(s) to the OS’s corresponding + logical representations. The + “ibm,my-dma-window” property communicates + the size of the RTCE table window panes that the hypervisor has + allocated. The node also specifies the interrupt source number that has + been assigned to the Reliable Command/Response Transport connection and + the RTCE range that the client partition device driver may use to map its + memory for access by the server partition via Logical Remote DMA. The + client partition, uses the four hcall()s associated with the Reliable + Command/Response Transport facility to register and deregister its CRQ, + manage notification of responses, and send command requests to the server + partition. + The server partition’s device tree contains one or more + node(s) notifying the partition that it is requested to supply VSCSI + services for one or more client partitions. The unit address ( + Unit ID) of the node is used by the server partition + to map to the local logical devices that are represented by this VSCSI + device. The node also specifies the interrupt source number that has been + assigned to the Reliable Command/Response Transport connection and the + RTCE range that the server partition device driver may use for its copy + Logical Remote DMA. The server partition uses the four hcall()s + associated with the Reliable Command/Response Transport facility to + register and deregister its Command request queue, manage notification of + new requests, and send responses back to the client partition. In + addition, the server partition uses the hcall()s of the Logical Remote + DMA facility to manage the movement of commands and data associated with + the client requests. + The client partition, upon noting the device tree entry for the + virtual adapter, loads the device driver associated with the value of the + + “compatible” property. The device driver, + when configured and opened, allocates memory for its CRQ (an array, large + enough for all possible responses, of 16 byte elements), pins the queue + and maps it into the I/O space of the RTCE window specified in the + “ibm,my-dma-window” property using the + standard kernel mapping services that subsequently use the H_PUT_TCE + hcall(). The queue is then registered using the H_REG_CRQ hcall(). Next, + I/O request control blocks (within which the I/O requests commands are + built) are allocated, pinned, and mapped into I/O address space. Finally, + the device driver registers to receive control when the interrupt source + specified in the virtual IOA’s device tree node signals. + Once the CRQ is setup, the device driver queues an Initialization + Command/Response with the second byte of “Initialize” in + order to attempt to tell the hosting side that everything is setup on the + hosted side. The response to this send may be that the send has been + dropped or has successfully been sent. If successful, the sender should + expect back an Initialization Command/Response with a second byte of + “Initialization Complete,” at which time the communication + path can be deemed to be open. If dropped, then the sender waits for the + receipt of an Initialization Command/Response with a second byte of + “Initialize,” at which time an “Initialization + Complete” message is sent, and if that message is sent + successfully, then the communication path can be deemed to be + open. + When the VSCSI Adapter device driver receives an I/O request from + one of the SCSI device head drivers, it executes the following sequence. + First an I/O request control block is allocated. Then it builds the SCSI + request within the control block, adds a correlator field (to be returned + in the subsequent response), I/O maps any target memory buffers and + places their DMA descriptors into the I/O request control block. With the + request constructed in the I/O request control block, the driver + constructs a DMA descriptor (Starting Offset, and length) representing + the I/O request within the I/O request control block. Lastly, the driver + passes the I/O request’s DMA descriptor to the server partition + using the H_SEND_CRQ hcall(). Provided that the H_SEND_CRQ hcall() + succeeds, the VSCSI Adapter device driver returns, waiting for the + response interrupt indicating that a response has been posted by the + server partition to the device driver’s response queue. The + response queue entry contains the summary status and request correlator. + From the request correlator, the device driver accesses the I/O request + control block, and from the summary status, the device driver determines + how to complete the processing of the I/O request. + Notice that the client partition only uses the Reliable + Command/Response Transport primitives; it does not use the Logical Remote + DMA primitives. Since the server partition’s RTCE tables are not + authorized for access by the client partition, any attempt by the client + partition to modify server partition memory would be prevented by the + hypervisor. RTCE table access is granted on a connection by connection + basis (client/server virtual device pair). If a client partition happens + to be serving some other logical device, then the partition is entitled + to use Logical Remote DMA for the virtual devices that is serving. + The server partition, upon noting the device tree entry for the + virtual adapter, loads the device driver associated with the value of the + + “compatible” property. The device driver, + when configured and opened, allocates memory for its request queue (an + array, large enough for all possible outstanding requests, of 16 byte + elements). The driver then pins the queue and maps it into I/O space, via + the kernel’s I/O mapping services that invoke the H_PUT_TCE + hcall(), using the first window pane specified in the + “ibm,my-dma-window” property. The queue + is then registered using the H_REG_CRQ hcall(). Next, I/O request control + blocks (within which the I/O request commands are built) are allocated, + pinned, and I/O mapped. Finally the device driver registers to receive + control when the interrupt source specified in the virtual IOA’s + device tree node signals. + Once the CRQ is setup, the device driver queues an Initialization + Command/Response with the second byte of “Initialize” in + order to attempt to tell the hosted side that everything is setup on the + hosting side. The response to this send may be that the send has been + dropped or has successfully been sent. If successful, the sender should + expect back an Initialization Command/Response with a second byte of + “Initialization Complete,” at which time the communication + path can be deemed to be open. If dropped, then the sender waits for the + receipt of an Initialization Command/Response with a second byte of + “Initialize,” at which time an “Initialization + Complete” message is sent, and if that message is sent + successfully, then the communication path can be deemed to be + open. + When the server partition’s device driver receives an I/O + request from its corresponding client partition’s VSCSI adapter + drivers, it is notified via the interrupt registered for above. The + server partition’s device driver selects an I/O request control + block for the requested operation. It then uses the DMA descriptor from + the request queue element to transfer the SCSI request from the client + partition’s I/O request control block to its own (allocated above), + using the H_COPY_RDMA hcall() through the second window pane specified in + the + “ibm,my-dma-window” property. The server + partition’s device driver then uses kernel services, that are + extended, to register the I/O request’s DMA descriptors into + extended capacity cross memory descriptors (ones capable of recording the + DMA descriptors). These cross memory descriptors are later mapped by the + server partition’s physical device drivers into the physical I/O + DMA address space of the physical I/O adapters using the kernel services, + that have been similarly extended to call the H_PUT_RTCE hcall(), based + upon the value of the LIOBN field reference by the cross memory + descriptor. At this point, the server partition’s VSCSI device + driver delivers what appears to be a SCSI request to be decoded and + routed through the server partition’s file sub-system for + processing. When the request completes, the server partition’s + VSCSI device driver is called by the file sub-system and it packages the + summary status along with the request correlator into a response message + that it sends to the client partition using the H_SEND_CRQ hcall(), then + recycles the resources recorded in the I/O request control block, and the + block itself. + The LIOBN value in the second window pane of the server + partition’s + “ibm,my-dma-window” property is intended + to be an indirect reference to the RTCE table of the client partition. + If, for some reason, the physical location of the client + partition’s RTCE table changes or it becomes invalid, this level of + indirection allows the hypervisor to determine the current target without + changing the LIOBN number as seen by the server partition. The H_PUT_TCE + and H_PUT_RTCE hcall()s do not map server partition memory into the + second window pane; the second window pane is only available for use by + server partition via the Logical RDMA services to reference memory mapped + into it by the client partition’s IOA. + This architecture does not specify the payload format of the + requests or responses. However, the architectural intent is supplied in + the following tables for reference. +   + + General Form of Reliable CRQ Element + + + + + + + + + + Byte Offset + + + + + Field Name + + + + + Subfield Name + + + + + Description + + + + + + + + 0 + + + Header + + +   + + + Contains Element Valid Bit plus Event Type Encodings (see + ). + + + + + 1 + + + Payload + + + Format/Transport Event Code + + + For Valid Command Response Entries, see + . For Transport Event + Codes see + . + + + + + 2-15 + + +   + + + Format Dependent. + + + + +
+   + + Example Reliable CRQ Entry Format Byte Definitions for VSCSI + + + + + + + + Format Byte Value + + + + + Definition + + + + + + + + 0x0 + + + Unused + + + + + 0x1 + + + VSCSI Requests + + + + + 0x2 + + + VSCSI Responses + + + + + 0x03 - 0xFE + + + Reserved + + + + + 0xFF + + + Reserved for Expansion + + + + +
+   + + Example VSCSI Command Queue Element + + + + + + + + + Byte Offset + + + + + Field Value + + + + + Description + + + + + + + + 0 + + + 0x80 + + + Valid Header + + + + + 1 + + + 0x01 + + + VSCSI Request Format + + + + + 2-3 + + + NA + + + Reserved + + + + + 4-7 + + +   + + + Length of the request block to be transferred + + + + + 8-15 + + +   + + + I/O address of beginning of request + + + + +
+   + + Example VSCSI Response Queue Element + + + + + + + + + Byte Offset + + + + + Field Value + + + + + Description + + + + + + + + 0 + + + 0x80 + + + Valid Header + + + + + 1 + + + 0x02 + + + VSCSI Response Format + + + + + 2-3 + + + NA + + + Reserved + + + + + 4-7 + + +   + + + Summary Status + + + + + 8-15 + + +   + + + 8 byte command correlator + + + + +
+ See also + . +
+ +
+ Virtual SCSI Requirements + This normative section provides the general requirements for the + support of VSCSI. + + + + R1--1. + + + For the VSCSI option: The platform must implement the + Reliable Command/Response Transport option as defined in + . + + + + + R1--2. + + + For the VSCSI option: The platform must implement the + Logical Remote DMA option as defined in + . + In addition to the firmware primitives, and the structures they + define, the partition’s OS needs to know specific information + regarding the configuration of the virtual IOA’s that it has been + assigned so that it can load and configure the correct device driver + code. This information is provided by the OF device tree node associated + with the virtual IOA (see + and + ). + + + + +
+ Client Partition Virtual SCSI Device Tree Node + Client partition VSCSI device tree nodes have associated packages + such as disk-label, deblocker, iso-13346-files and iso-9660-files as well + as children nodes such as block and byte as appropriate to the specific + virtual IOA configuration as would the node for a physical IOA of type + scsi-3. + + + + R1--1. + + + For the VSCSI option: The platform’s OF device + tree for client partitions must include as a child of the + /vdevice node, a node of name “v-scsi” as + the parent of a sub-tree representing the virtual IOAs assigned to the + partition. + + + + + R1--2. + + + For the VSCSI option: The platform’s + v-scsi OF node must contain properties as defined in + (other standard I/O adapter + properties are permissible as appropriate). +   + + Properties of the VSCSI Node in the Client + Partition + + + + + + + + + Property Name + + + + + Required? + + + + + Definition + + + + + + + + + “name” + + + + Y + + + Standard property name per + , + specifying the virtual device name, the + value shall be + “v-scsi”. + + + + + + “device_type” + + + + Y + + + Standard property name per + , + specifying the virtual device type, the + value shall be + + “vscsi”. + + + + + + “model” + + + + NA + + + Property not present. + + + + + + “compatible” + + + + Y + + + Standard property name per + , + specifying the programming models that are + compatible with this virtual IOA, the value shall include + “IBM,v-scsi”. + “IBM,v-scsi-2” precedes + “IBM,vsci” if it is included in + the value of this property. + + + + + + “used-by-rtas” + + + + See Definition Column + + + Present if appropriate. + + + + + + “ibm,loc-code” + + + + Y + + + Property name specifying the unique and persistent + location code associated with this virtual IOA presented as an + encoded array as with + encode-string. The value shall be of the + form specified in + . + + + + + + “reg” + + + + Y + + + Standard property name per + , + specifying the register addresses, used as + the unit address (unit ID), associated with this virtual IOA + presented as an encoded array as with + encode-phys of length + “#address-cells” value shall be + 0xwhatever (virtual + “reg” property used for unit + address no actual locations used, therefore, the size field has + zero cells (does not exist) as determined by the value of the + “#size-cells” property). + + + + + + “ibm,my-dma-window” + + + + Y + + + Property name specifying the DMA window associated with + this virtual IOA presented as an encoded array of three values + (LIOBN, phys, size) encoded as with + encode-int, + encode-phys, and + encode-int. + + + + + + “interrupts” + + + + Y + + + Standard property name specifying the interrupt source + number and sense code associated with this virtual IOA + presented as an encoded array of two cells encoded as with + encode-int with the first cell containing + the interrupt source number, and the second cell containing the + sense code 0 indicating positive edge triggered. The interrupt + source number being the value returned by the H_XIRR or H_IPOLL + hcall(). + + + + + + “ibm,my-drc-index” + + + + For DR + + + Present if the platform implements DR for this + node. + + + + + + “ibm,#dma-size-cells” + + + + See Definition Column + + + Property name, to define the package’s dma address + size format. The property value specifies the number of cells + that are used to encode the size field of dma-window + properties. This property is present when the dma address size + format cannot be derived using the method described in the + definition for the + “ibm,#dma-size-cells” property + in + . + + + + + + “ibm,#dma-address-cells” + + + + See Definition Column + + + Property name, to define the package’s dma address + format. The property value specifies the number of cells that + are used to encode the physical address field of dma-window + properties. This property is present when the dma address + format cannot be derived using the method described in the + definition for the + “ibm,#dma-address-cells” property in + . + + + + +
+
+
+ + + R1--3. + + + For the VSCSI option: The platform’s + v-scsi node must have as children the appropriate + block (disk) and byte + (tape) nodes. + + +
+
+ +
+ Server Partition Virtual SCSI Device Tree Node + Server partition VSCSI IOA nodes have no children nodes. + + + + R1--1. + + + For the VSCSI option: The platform’s OF device + tree for server partitions must include as a child of the + /vdevice node, a node of name + “v-scsi-host” as the parent of a sub-tree + representing the virtual IOAs assigned to the partition. + + + + + R1--2. + + + For the VSCSI option: The platform’s + v-scsi-host node must contain properties as defined + in + (other standard I/O adapter + properties are permissible as appropriate). + + + + + + Properties of the VSCSI Node in the Server + Partition + + + + + + + + + Property Name + + + + + Required? + + + + + Definition + + + + + + + + + “name” + + + + Y + + + Standard property name per + , + specifying the virtual device name, the + value shall be + “v-scsi-host”. + + + + + + “device_type” + + + + Y + + + Standard property name per + , + specifying the virtual device type, the + value shall be + “v-scsi-host”. + + + + + + “model” + + + + NA + + + Property not present. + + + + + + “compatible” + + + + Y + + + Standard property name per + , + specifying the programming models that are + compatible with this virtual IOA, the value shall include + “IBM,v-scsi-host”. + “IBM,v-scsi-host-2” precedes + “IBM,vsci-host” if it is + included in the value of this property. + + + + + + + “used-by-rtas” + + + + See Definition Column + + + Present if appropriate. + + + + + + “ibm,loc-code” + + + + Y + + + Property name specifying the unique and persistent + location code associated with this virtual IOA presented as an + encoded array as with + encode-string. The value shall be of the + form + . + + + + + + “reg” + + + + Y + + + Standard property name per + , + specifying the register addresses, used as + the unit address (unit ID), associated with this virtual IOA + presented as an encoded array as with + encode-phys of length + “#address-cells” value shall be + 0xwhatever (virtual + “reg” property used for unit + address no actual locations used, therefore, the size field has + zero cells (does not exist) as determined by the value of the + “#size-cells” property). + + + + + + “ibm,my-dma-window” + + + + Y + + + Property name specifying the DMA window associated with + this virtual IOA presented as an encoded array of two sets (two + window panes) of three values (LIOBN, phys, size) encoded as + with + encode-int, + encode-phys, and + encode-int. Of these two triples, the + first describes the window pane used to map server partition + memory, the second is the window pane through which the client + partition maps its memory that it makes available to the server + partition. (Note the mapping between the LIOBN in the second + window pane of a server virtual IOA’s + “ibm,my-dma-window” property + and the corresponding client IOA’s RTCE table is made + when the CRQ successfully completes registration. See + for more information + on window panes.) + + + + + + “interrupts” + + + + Y + + + Standard property name specifying the interrupt source + number and sense code associated with this virtual IOA + presented as an encoded array of two cells encoded as with + encode-int with the first cell containing + the interrupt source number, and the second cell containing the + sense code 0 indicating positive edge triggered. The interrupt + source number being the value returned by the H_XIRR or H_IPOLL + hcall() + + + + + + “ibm,my-drc-index” + + + + For DR + + + Present if the platform implements DR for this + node. + + + + + + “ibm,vserver” + + + + Y + + + Property name specifying that this is a virtual server + node. + + + + + + “ibm,#dma-size-cells” + + + + See Definition Column + + + Property name, to define the package’s dma address + size format. The property value specifies the number of cells + that are used to encode the size field of dma-window + properties. This property is present when the dma address size + format cannot be derived using the method described in the + definition for the + “ibm,#dma-size-cells” property + in + . + + + + + + “ibm,#dma-address-cells” + + + + See Definition Column + + + Property name, to define the package’s dma address + format. The property value specifies the number of cells that + are used to encode the physical address field of dma-window + properties. This property is present when the dma address + format cannot be derived using the method described in the + definition for the + “ibm,#dma-address-cells” property in + . + + + + +
+   +
+
+
+ +
+ Virtual Terminal (Vterm) + This section defines the Virtual Terminal (Vterm) options (Client + Vterm option and Server Vterm option). Vterm IOAs are of the hypervisor + simulated class of VIO. See also + . + +
+ Vterm General + This section contains an informative outline of the architectural + intent of the use of Vterm support. + The architectural metaphor for the Vterm IOA is that of an Async + IOA. The connection at the other end of the Async “cable” may + be another Vterm IOA in a server partition, the hypervisor, or the + HMC. + A partition’s device tree contains one or more nodes + notifying the partition that it has been assigned one or more Vterm + client adapters (each LoPAR partition has at least one). The + node’s + “type” and + “compatible” properties notify the + partition that the virtual adapter is a Vterm client adapter. The + unit address of the node is used by the partition to + map the virtual device(s) to the OS’s corresponding logical + representations. The node’s + “interrupts” property, if it exists, + specifies the interrupt source number that has been assigned to the + client Vterm IOA for receive data. The partition, uses the + H_GET_TERM_CHAR and H_PUT_TERM_CHAR hcall()s to receive data from and + send data to the client Vterm IOA. If the node contains the + “interrupts” property, the partition may + optionally use the + ibm,int-on, + ibm,int-off, + ibm,set-xive, ibm,get-xive RTAS calls, and the + H_VIO_SIGNAL hcall() to manage the client Vterm IOA interrupt. + A partition’s device tree may also contain one or more + node(s) notifying the partition that it is requested to supply server + Vterm IOA services for one or more client Vterm IOAs. The node’s + “type” and + “compatible” properties notify the + partition that the virtual adapter is a server Vterm IOA. The unit + address (Unit ID) of the node is used by the partition to map + the virtual device(s) to the OS’s corresponding logical + representations. The node’s + “interrupts” property specifies the + interrupt source number that has been assigned to the server Vterm IOA + for receive data. The partition uses the H_VTERM_PARTNER_INFO hcall() to + find out which unit address(es) in which partition(s) to which it is + allowed to attach (that is, to which client Vterm IOAs it is allowed to + attach). The partition then uses the H_REGISTER_VTERM to setup the + connection between a server and a client Vterm IOAs, and uses the + H_GET_TERM_CHAR and H_PUT_TERM_CHAR hcall()s to receive data from and + send data to the server Vterm IOA. In addition, the partition may + optionally use the + ibm,int-on, + ibm,int-off, + ibm,set-xive, ibm,get-xive RTAS calls, and the + H_VIO_SIGNAL hcall() to manage the server Vterm IOA interrupt. + + shows a comparison between the + client and server versions of Vterm. +   + + Client Vterm versus Server Vterm Comparison + + + + + + + + + Client + + + + + Server + + + + + + + + The following hcall()s apply: + H_PUT_TERM_CHAR + H_GET_TERM_CHAR + H_VIO_SIGNAL (optional use with Client) + + + + + N/A + + + The following hcall()s are valid: + H_VTERM_PARTNER_INFO + H_REGISTER_VTERM + H_FREE_VTERM + + + + + + vty node + + + + vty-server node + + + + + The + “reg” property or the + vty node(s) + enumerates the valid client Vterm IOA unit + address(es) + + + The + “reg” property or the + vty-server node(s) enumerates the valid server Vterm IOA unit + address(es) + H_VTERM_PARTNER_INFO is used to getvalid client Vterm IOA partition ID(s) and corresponding + unit address(es) to which the server Vterm IOA is allowed to + connect + + + + + + “interrupts” property + optional: + Platform may or may not provide + If provided, Vterm driver may or may not use + + + + “interrupts” property + required: + Platform must provide + If provided, Vterm driver may or may not use + + + + +
+
+ +
+ Vterm Requirements + This normative section provides the general requirements for the + support of Vterm. + + + + R1--1. + + + For the LPAR option: + the Client Vterm option must be implemented. + + + + +
+ Character Put and Get hcall()s + The following hcall()s are used to send data to and get data from + both the client and sever Vterm IOAs. + +
+ H_GET_TERM_CHAR + + + + Syntax: + + + + + + + Parameters: + n termno: The unit address of the Vterm IOA, from the + “reg” property of the Vterm IOA. + + + + Semantics: + n Hypervisor checks the termno parameter for validity against the + Vterm IOA unit addresses assigned to the partition, else return + H_Parameter. + n Hypervisor returns H_Hardware if it detects that the virtual + console terminal physical connection is not working. + n Hypervisor returns H_Closed if it detects that the virtual + console associated with the termno parameter is not open (in the case of + connection to a server Vterm IOA, this means that the server code has not + made the connection to this specific client Vterm IOA). + n Hypervisor returns H_Success in all other cases, returning + maximum number of characters available in the partition’s virtual + console terminal input buffer (up to 16) -- a len value of 0 indicates + that the input buffer is empty. + n Upon return with H_Success register R4 contains the number of + bytes (if any) returned in registers R5 and R6. + n Upon return with H_Success the return character string starts in + the high order byte of register R5 and proceeds toward the low order byte + in register R6 for the number of characters specified in R4. The contents + of all other byte locations of registers R5 and R6 are undefined. + +
+ +
+ H_PUT_TERM_CHAR + + + + Syntax: + + + + + + + Parameters: + n termno: The unit address of the Vterm IOA, from the + “reg” property of the Vterm IOA. + n len: The length of the string to transmit through the virtual + terminal port. Valid values are in the range of 0-16. + n char0_7 and char8_15: The string starts in the high order byte of + register R6 and proceeds toward the low order byte in register R7 + + + + Semantics: + n Hypervisor checks the termno parameter for validity against the + Vterm IOA unit addresses assigned to the partition, else return + H_Parameter. + n Hypervisor returns H_Hardware if it detects that the virtual + console terminal physical connection is not working. + n Hypervisor returns H_Closed if it detects that the virtual + console session is not open (in the case of connection to a server Vterm + IOA, this means that the server code has not made the connection to this + specific client Vterm IOA). + n If the length parameter is outside of the values 0-16 the + hypervisor immediately returns H_Parameter with no other action. + n If the partition’s virtual console terminal buffer has room + for the entire string, the hypervisor queues the output string and + returns H_Success. + Note: There is always room for a zero length string (a + zero length write can be used to test the virtual console terminal + connection). + n If the buffer cannot hold the entire string, no data is enqueued + and the return code is H_Busy. + +
+
+ +
+ Interrupts + The interrupt source number is presented in the + “interrupts” property of the + Vterm node, when receive queue interrupts are + implemented for the Vterm. The + ibm,int-on, + ibm,int-off, + ibm,set-xive, ibm,get-xive RTAS calls, and + H_VIO_SIGNAL hcall() are used to manage the interrupt. + Interrupts and the + “interrupts” property are always + implemented for the server Vterm IOA, and may be implemented for the + client Vterm IOA. + The interrupt mechanism is edge-triggered and is capable of + presenting only one interrupt signal at a time from any given interrupt + source. Therefore, no additional interrupts from a given source are ever + signaled until the previous interrupt has been processed through to the + issuance of an H_EOI hcall(). Specifically, even if the interrupt mode is + enabled, the effect is to interrupt on an empty to non-empty transition + of the receiver queue or upon the closing of the connection between the + server and client. However, as with any asynchronous posting operation + race conditions are to be expected. That is, an enqueue can happen in a + window around the H_EOI hcall() so that the receiver should poll the + receive queue after an H_EOI using H_GET_TERM_CHAR after an H_EOI, to + prevent losing initiative. + + + + R1--1. + + + For the Server Vterm option: The platform must + implement the + “interrupts” property in all server + Vterm device tree nodes ( + vty-server), and must set the interrupt in that + property for the receive data interrupt for the IOA. + + + + + R1--2. + + + For the Client Vterm and Server Vterm options: When + implemented, the characteristics of the Vterm interrupts must be as + follows: + + + + All must be edge-triggered. + + + + The receive interrupt must be activated when the Vterm receive + queue goes from empty to non-empty. + + + + The receive interrupt must be activated when the Vterm + connection from the client to the server goes from open to closed. + + + + + +
+ +
+ Client Vterm Device Tree Node (vty) + All platforms that implement LPAR, also implement at least one + client Vterm IOA per partition. + + + + R1--1. + + + For the Client Vterm option: The H_GET_TERM_CHAR and + H_TERM_CHAR hcall()s must be implemented. + + + + + R1--2. + + + For the Client Vterm option: The platform’s OF + device tree must include as a child of the + /vdevice node, one or more nodes of type + “vty”; one for each client Vterm IOA. + + + + + R1--3. + + + For the Client Vterm option: The platform’s + vty OF node must contain properties as defined in + (other standard I/O adapter + properties are permissible as appropriate). +   + + Properties of the + <emphasis role="bold"><literal>vty</literal></emphasis> Node (Client Vterm IOA) + + + + + + + + + Property Name + + + + + Required? + + + + + Definition + + + + + + + + + “name” + + + + Y + + + Standard property name per + , + specifying the virtual device name. The + value shall be + “vty”. + + + + + + “device_type” + + + + Y + + + Standard property name per + , + specifying the virtual device type. The + value shall be + “serial”. + + + + + + “model” + + + + NA + + + Property not present. + + + + + + “compatible” + + + + Y + + + Standard property name per + , + specifying the programming models that are + compatible with this virtual IOA. The value shall include + “hvterm1” when the virtual IOA + will connect to a server with no special protocol, and shall + include + “hvterm-protocol” when the + virtual IOA will connect to a server that requires a protocol + to control modems or hardware control signals. + + + + + + “used-by-rtas” + + + + NA + + + Property not present. + + + + + + “ibm,loc-code” + + + + Y + + + Property name specifying the unique and persistent + location code associated with this virtual IOA presented as an + encoded array as with + encode-string. The value shall be of the + form specified in + . + + + + + + “reg” + + + + Y + + + Standard property name per + , + specifying the register addresses, used as + the unit address (unit ID), associated with this virtual IOA + presented as an encoded array as with + encode-phys of length + “#address-cells” value shall be + 0xwhatever (virtual + “reg” property used for unit + address no actual locations used, therefore, the size field has + zero cells (does not exist) as determined by the value of the + “#size-cells” property). + + + + + + “interrupts” + + + + See Definition Column + + + Standard property name specifying the interrupt source + number and sense code associated with this virtual IOA + presented as an encoded array of two cells encoded as with + encode-int with the first cell containing + the interrupt source number, and the second cell containing the + sense code 0 indicating positive edge triggered. The interrupt + source number being the value returned by the H_XIRR or H_IPOLL + hcall(). If provided, this property will present one interrupt; + the receive data interrupt. + + + + + + “ibm,my-drc-index” + + + + For DR + + + Present if the platform implements DR for this + node. + + + + +
+
+
+ + + R1--4. + + + For the Client Vterm option: If the compatible + property in the + vty node is + “hvterm-protocol”, then the protocol + that the client must use is defined in the document entitled + Protocol for Support of Physical Serial Port Using a Virtual + TTY Interface. + + +
+
+ +
+ Server Vterm + Server Vterm IOAs allow a partition to serve a partner + partition’s client Vterm IOA. + +
+ Server Vterm Device Tree Node (vty-server) and Other + Requirements + + + + R1--1. + + + For the Server Vterm option: The H_GET_TERM_CHAR, + H_PUT_TERM_CHAR, H_VTERM_PARTNER_INFO, H_REGISTER_VTERM, and H_FREE_VTERM + hcall()s must be implemented. + + + + + R1--2. + + + For the Server Vterm option: The platform’s OF + device tree for partitions implementing server Vterm IOAs must include as + a child of the + /vdevice node, one or more nodes of type + “vty-server”; one for each server Vterm + IOA. + + + + + R1--3. + + + For the Server Vterm option: The platform’s + vty-server node must contain properties as defined in + + (other standard I/O adapter + properties are permissible as appropriate). + + + + + + Properties of the + <emphasis role="bold"><literal>vty-server</literal></emphasis> Node (Server Vterm IOA) + + + + + + + + + Property Name + + + + + Required? + + + + + Definition + + + + + + + + + “name” + + + + Y + + + Standard property name per + , + specifying the virtual device name. The + value shall be + “vty-server”. + + + + + + “device_type” + + + + Y + + + Standard property name per + , + specifying the virtual device type. The + value shall be + “serial-server”. + + + + + + “model” + + + + NA + + + Property not present. + + + + + + “compatible” + + + + Y + + + Standard property name per + , + specifying the programming models that are + compatible with this virtual IOA. The value shall include + “hvterm2”. + + + + + + “used-by-rtas” + + + + NA + + + Property not present. + + + + + + “ibm,loc-code” + + + + Y + + + Property name specifying the unique and persistent + location code associated with this virtual IOA presented as an + encoded array as with + encode-string. The value shall be of the + form + . + + + + + + “reg” + + + + Y + + + Standard property name per + , + specifying the register addresses, used as + the unit address (unit ID), associated with this virtual IOA + presented as an encoded array as with + encode-phys of length specified by + “#address-cells” value shall be + 0xwhatever (virtual + “reg” property used for unit + address no actual locations used, therefore, the size field has + zero cells (does not exist) as determined by the value of the + “#size-cells” property). + + + + + + “interrupts” + + + + Y + + + Standard property name specifying the interrupt source + number and sense code associated with this virtual IOA + presented as an encoded array of two cells encoded as with + encode-int with the first cell containing + the interrupt source number, and the second cell containing the + sense code 0 indicating positive edge triggered. The interrupt + source number being the value returned by the H_XIRR or H_IPOLL + hcall(). This property will present one interrupt; the receive + data interrupt. + + + + + + “ibm,my-drc-index” + + + + For DR + + + Present if the platform implements DR for this + node. + + + + + + “ibm,vserver” + + + + Y + + + Property name specifying that this is a virtual server + node. + + + + +
+
+ +
+ Server Vterm hcall()s + The following hcall()s are unique to the server Vterm IOA. + +
+ H_VTERM_PARTNER_INFO + This hcall is used to retrieve the list of Vterms to which the + specified server Vterm IOA is permitted to connect. The list is retrieved + by making repeated calls, and returns sets of triples: partner partition + ID, partner unit address, and partner location code. Passing in the + previously returned value will return the next value in the list of + allowed connections. Passing in a value of 0xFF...FF will return the + first value in the list. + + + Syntax: + + + + + + + Parameters: + + + + unit-address: Virtual IOA’s unit address, as specified in + the IOA’s device tree node. + + + + partner-partition-id: The partner partition ID of the last + partner partition ID and partner unit address pair returned. If a value + of 0xFF...FF is specified, the call returns the first item in the + list. + + + + partner-unit-addr: The partner unit address of the last partner + partition ID and partner unit address pair returned. If a value of + 0xFF...FF is specified, the call returns the first item in the + list. + + + + buffr-addr: The logical address of a single page in memory, + belonging to the calling partition, which is used to return the next + triple of information (partner partition ID, partner unit address, and + Converged Location Code). The calling partition cannot migrate the page + during the duration of the call, otherwise the call will fail. + Buffer format on return with H_Success: + + + + First eight bytes: Eight byte partner partition ID of the partner + partition ID and partner unit address pair from the list, or 0xFF...FF if + partner partition ID and partner unit address passed in the input + parameters was the last item in the list of valid connections. + + + + Second eight bytes: Eight byte partner unit address associated + with the partner partition ID (as returned in first 8 bytes of the + buffer), or 0xFF...FF if the partner partition ID and partner unit + address passed in the input parameters was the last item in the list of + valid connections. + + + + Beginning at the 17 byte in the buffer: NULL-terminated Converged + Location Code associated with the partner unit address and partner + partition ID (a returned in the first 16 bytes of the buffer), or just a + NULL string if the partner partition ID and partner unit address passed + in the input parameters was the last item in the list of valid + connections. + + + + + + Semantics: + + + + Validate that unit-address belongs to the partition and to a + server Vterm IOA, else H_Parameter. + + + + If partner-partition-id and partner-unit-addr together do not + match a valid partner partition ID and partner unit address pair in the + list of valid connections for this unit-address, then return + H_Parameter. + + + + If the 4 KB page associated with buffr-addr does not belong to + the calling partition, then return H_Parameter. + + + + If the buffer associated with buffr-addr does not begin on a 4 K + boundary, then return H_Parameter. + + + + If the calling partition attempts to migrate the buffer page + associated with buffr-addr during the duration of the + H_VTERM_PARTNER_INFO call, then return H_Parameter. + + + + If partner-partition-id is equal to 0xFF...FF, then select the + first item from the list of valid connections, format the buffer as + specified, above, for this item, and return H_Success. + + + + If partner-partition-id and partner-unit-addr together matches a + valid partner partition ID and partner unit address pair in the list of + valid connections, and if this is the last valid connection in the list, + then format the buffer as specified, above, with the partner partition ID + and partner unit address both set to 0xFF...FF, and the Converged + Location Code set to the NULL string, and return H_Success. + + + + If partner-partition-id and partner-unit-addr together matches a + valid partner partition ID and partner unit address pair in the list of + valid connections, then select the next item from the list of valid + connections, and format the buffer as specified, above, and return + H_Success. + + + +
+ +
+ H_REGISTER_VTERM + This hcall has the effect of “opening” the connection + to the client Vterm IOA in the specified partition ID and which has the + specified unit address. The architectural metaphor for this is the + connecting of the cable between two Async IOAs. The hcall fails if the + partition does not have the authority to connect to the requested + partition/unit address pair. The hcall() also fails if the specified + partition/unit address is already in use (for example, by another + partition or the HMC) + + + Syntax: + + + + + + + Parameters: + + + + unit-address: The server Virtual IOA’s unit address, as + specified in the IOA’s device tree node. + + + + partner-partition-id: The partition ID of the partition ID and + unit address pair to which to be connected. + + + + partner-unit-addr: The unit address of the partition ID and unit + address pair to which to be connected. + + + + + + Semantics: + + + + Validate that unit-address belongs to the partition and to a + server Vterm IOA and that there does not exist a valid connection between + this server Vterm IOA and a partner, else H_Parameter. + + + + If partner-partition-id and partner-unit-addr together do not + match a valid partition ID and unit address pair in the list of valid + connections for this unit-address, then return H_Parameter, + n Else make connection between the server Vterm IOA specified by + unit-address and the client Vterm IOA specified by the + partner-partition-id and partner-unit-addr pair, allowing future + H_PUT_TERM_CHAR and H_GET_TERM_CHAR operations to flow between the two + Vterm IOAs, and return H_Success. + + + + Software Implementation Note: An H_Parameter will be + returned to the H_REGISTER_VTERM if a DLPAR operation has been performed + which changes the list of possible server to client Vterm connections. + After a DLPAR operation which affects a partition’s server Vterm + IOA connection list, a call to H_VTERM_PARTNER_INFO is needed to get the + current list of possible connections. + +
+ +
+ H_FREE_VTERM + This hcall has the effect of “closing” the connection + to the partition/unit address pair. The architectural metaphor for this + is the removal of the cable between two Async IOAs. After closing, the + partner partition’s server Vterm IOA would now be available for + serving by another partner (for example, another partition or the + HMC). + + + Syntax: + + + + + + + Parameters: + + + + unit-address: Virtual IOA’s unit address, as specified in + the IOA’s device tree node. + + + + + + Semantics: + + + + Validate that the unit address belongs to the partition and to a + server Vterm IOA and that there exists a valid connection between this + server Vterm IOA and a partner, else H_Parameter. + + + + Break the connection between the server Vterm IOA specified by + the unit address and the client Vterm IOA, preventing further + H_PUT_TERM_CHAR and H_GET_TERM_CHAR operations between the two Vterm IOAs + (until a future successful H_REGISTER_VTERM operation), and return + H_Success. + + + Implementation Note: If the hypervisor returns an + H_Busy, H_LongBusyOrder1mSec, or H_LongBusyOrder10mSec, software must + call H_FREE_VTERM again with the same parameters. Software may choose to + treat H_LongBusyOrder1mSec and H_LongBusyOrder10mSec the same as H_Busy. + The hypervisor, prior to returning H_Busy, H_LongBusyOrder1mSec, or + H_LongBusyOrder10mSec, will have placed the virtual adapter in a state + that will cause it to not accept any new work nor surface any new virtual + interrupts. +   + +
+
+
+
+
+ +
+ Virtual Fibre Channel (VFC) using NPIV + N_Port ID Virtualization (NPIV) is part of the Fibre Channel (FC) + standards. NPIV allows multiple World Wide Port Names (WWPNs) to be mapped + to a single physical port of a FC adapter. This section defines a Virtual + Fibre Channel (VFC) interface to a server partition interfacing to a + physical NPIV adapter that allows multiple partitions to share a physical + port using different WWPNs. The implementation support is provided by code + running in a server partition that uses the mechanisms of the Reliable + Command/Response Transport and Logical Remote DMA of the Synchronous VIO + Infrastructure to service I/O requests for code running in a client + partition. The client partition appears to enjoy the services of its own FC + adapter (see + ) with a WWPN visible to the FC + fabric. The terms server and client partitions refer to platform partitions + that are respectively servers and clients of requests, usually I/O + operations, using the physical I/O adapters (IOAs) that are assigned to the + server partition. This allows a platform to have more client partitions + than it may have physical I/O adapters because the client partitions share + I/O adapters via the server partition. + The VFC model makes use of Remote DMA which is built upon the + architecture specified in the following sections: + + + + + + + + + + + + + + + +
+ VFC and NPIV General + This section contains an informative outline of the architectural + intent of the use of VFC and NIPV, and it assumes the user is familiar + with + concerning VSCSI architecture + and the with the FC standards. Other implementations of the server and + client partition code, consistent with this architecture, are possible + and may be preferable. + The client partition provides the virtual equivalent of a single + port FC adapter via each VFC client IOA. The platform, through the + partition definition, provides means for defining the set of virtual + IOA’s owned by each partition and their respective location codes. + The platform also provides, through partition definition, instructions to + connect each client partition’s VFC client IOA to a specific server + partition’s VFC server IOA. The mechanism for specifying this + partition definition is beyond the scope of this architecture. The human + readable handle associated with the partition definition of virtual IOAs + and their associated interconnection and resource configuration is the + virtual location code. The OF unit address (Unit ID) remains the invariant handle upon which the + OS builds its “physical to logical” configuration. The + platform also provides a method to assign unique WWPNs for each VFC + client adapter. The port names are used by a SAN administrator to grant + access to storage to a client partition. The mechanism for allocating + port names is beyond the scope of this architecture. + The client partition’s device tree contains one or more nodes + notifying the partition that it has been assigned one or more virtual + adapters. The node’s + “type” and + “compatible” properties notify the + partition that the virtual adapter is a VFC adapter. The + unit address of the node is used by the client + partition to map the virtual device(s) to the OS’s corresponding + logical representations. The + “ibm,my-dma-window” property communicates + the size of the RTCE table window panes that the hypervisor has + allocated. The node also specifies the interrupt source number that has + been assigned to the Reliable Command/Response Transport connection and + the RTCE range that the client partition device driver may use to map its + memory for access by the server partition via Logical Remote DMA. The + client partition also reads it's WWPNs from the device tree. Two WWPNs + are presented to the client in the properties + “ibm,port-wwn-1”, and + “ibm,port-wwn-2”, and the server tells + the client, through a CRQ protocol exchange, which one of the two to use. + The client partition, uses the four hcall()s associated with the Reliable + Command/Response Transport facility to register and deregister its CRQ, + manage notification of responses, and send command requests to the server + partition. + The server partition’s device tree contains one or more + node(s) notifying the partition that it is requested to supply VFC + services for one or more client partitions. The unit address ( + Unit ID) of the node is used by the server partition + to map to the local logical devices that are represented by this VFC + device. The node also specifies the interrupt source number that has been + assigned to the Reliable Command/Response Transport connection and the + RTCE range that the server partition device driver may use for its copy + Logical Remote DMA. The server partition uses the four hcall()s + associated with the Reliable Command/Response Transport facility to + register and deregister its Command request queue, manage notification of + new requests, and send responses back to the client partition. In + addition, the server partition uses the hcall()s of the Logical Remote + DMA facility to manage the movement of commands and data associated with + the client requests. + The client partition, upon noting the device tree entry for the + virtual adapter, loads the device driver associated with the value of the + + “compatible” property. The device driver, + when configured and opened, allocates memory for its CRQ (an array, large + enough for all possible responses, of 16 byte elements), pins the queue + and maps it into the I/O space of the RTCE window specified in the + “ibm,my-dma-window” property using the + standard kernel mapping services that subsequently use the H_PUT_TCE + hcall(). The queue is then registered using the H_REG_CRQ hcall(). Next, + I/O request control blocks (within which the I/O requests commands are + built) are allocated, pinned, and mapped into I/O address space. Finally, + the device driver registers to receive control when the interrupt source + specified in the virtual IOA’s device tree node signals. + Once the CRQ is setup, the device driver queues an Initialization + Command/Response with the second byte of “Initialize” in + order to attempt to tell the hosting side that everything is setup on the + hosted side. The response to this send may be that the send has been + dropped or has successfully been sent. If successful, the sender should + expect back an Initialization Command/Response with a second byte of + “Initialization Complete,” at which time the communication + path can be deemed to be open. If dropped, then the sender waits for the + receipt of an Initialization Command/Response with a second byte of + “Initialize,” at which time an “Initialization + Complete” message is sent, and if that message is sent + successfully, then the communication path can be deemed to be + open. + When the VFC Adapter device driver receives an I/O request from one + of the FC device head drivers, it executes the following sequence. First + an I/O request control block is allocated. Then it builds the FC + Information Unit (FC IU) request within the control block, adds a + correlator field (to be returned in the subsequent response), I/O maps + any target memory buffers and places their DMA descriptors into the I/O + request control block. With the request constructed in the I/O request + control block, the driver constructs a DMA descriptor (Starting Offset, + and length) representing the FC IU within the I/O request control block. + It also constructs a DMA descriptor for the FC Response Unit. Lastly, the + driver passes the I/O request’s DMA descriptor to the server + partition using the H_SEND_CRQ hcall(). Provided that the H_SEND_CRQ + hcall() succeeds, the VFC Adapter device driver returns, waiting for the + response interrupt indicating that a response has been posted by the + server partition to the device driver’s response queue. The + response queue entry contains the summary status and request correlator. + From the request correlator, the device driver accesses the I/O request + control block, the summary status, and the FC Response Unit and + determines how to complete the processing of the I/O request. + Notice that the client partition only uses the Reliable + Command/Response Transport primitives; it does not use the Logical Remote + DMA primitives. Since the server partition’s RTCE tables are not + authorized for access by the client partition, any attempt by the client + partition to modify server partition memory would be prevented by the + hypervisor. RTCE table access is granted on a connection by connection + basis (client/server virtual device pair). If a client partition happens + to be serving some other logical device, then the partition is entitled + to use Logical Remote DMA for the virtual devices that is serving. + The server partition, upon noting the device tree entry for the + virtual adapter, loads the device driver associated with the value of the + + “compatible” property. The device driver, + when configured and opened, allocates memory for its request queue (an + array, large enough for all possible outstanding requests, of 16 byte + elements). The driver then pins the queue and maps it into I/O space, via + the kernel’s I/O mapping services that invoke the H_PUT_TCE + hcall(), using the first window pane specified in the + “ibm,my-dma-window” property. The queue + is then registered using the H_REG_CRQ hcall(). Next, I/O request control + blocks (within which the I/O request commands are built) are allocated, + pinned, and I/O mapped. Finally the device driver registers to receive + control when the interrupt source specified in the virtual IOA’s + device tree node signals. + Once the CRQ is setup, the device driver queues an Initialization + Command/Response with the second byte of “Initialize” in + order to attempt to tell the hosted side that everything is setup on the + hosting side. The response to this send may be that the send has been + dropped or has successfully been sent. If successful, the sender should + expect back an Initialization Command/Response with a second byte of + “Initialization Complete,” at which time the communication + path can be deemed to be open. If dropped, then the sender waits for the + receipt of an Initialization Command/Response with a second byte of + “Initialize,” at which time an “Initialization + Complete” message is sent, and if that message is sent + successfully, then the communication path can be deemed to be + open. + When the server partition’s device driver receives an I/O + request from its corresponding client partition’s VFC adapter + drivers, it is notified via the interrupt registered for above. The + server partition’s device driver selects an I/O request control + block for the requested operation. It then uses the DMA descriptor from + the request queue element to transfer the FC IU request from the client + partition’s I/O request control block to its own (allocated above), + using the H_COPY_RDMA hcall() through the second window pane specified in + the + “ibm,my-dma-window” property. The server + partition’s device driver then uses kernel services, that are + extended, to register the I/O request’s DMA descriptors into + extended capacity cross memory descriptors (ones capable of recording the + DMA descriptors). These cross memory descriptors are later mapped by the + server partition’s physical device drivers into the physical I/O + DMA address space of the physical I/O adapters using the kernel services, + that have been similarly extended to call the H_PUT_RTCE hcall(), based + upon the value of the LIOBN field reference by the cross memory + descriptor. At this point, the server partition’s VFC device driver + delivers what appears to be a FC IU request to be routed through the + server partition’s adapter driver. When the request completes, the + server partition’s VFC device driver is called through a registered + entry point and it packages the summary status along with the request + correlator into a response message that it sends to the client partition + using the H_SEND_CRQ hcall(), then recycles the resources recorded in the + I/O request control block, and the block itself. + The LIOBN value in the second window pane of the server + partition’s + “ibm,my-dma-window” property is intended + to be an indirect reference to the RTCE table of the client partition. + If, for some reason, the physical location of the client + partition’s RTCE table changes or it becomes invalid, this level of + indirection allows the hypervisor to determine the current target without + changing the LIOBN number as seen by the server partition. The H_PUT_TCE + and H_PUT_RTCE hcall()s do not map server partition memory into the + second window pane; the second window pane is only available for use by + server partition via the Logical RDMA services to reference memory mapped + into it by the client partition’s IOA. + This architecture does not specify the payload format of the + requests or responses. However, the architectural intent is supplied in + the following tables for reference. +   + + General Form of Reliable CRQ Element + + + + + + + + + + Byte Offset + + + + + Field Name + + + + + Subfield Name + + + + + Description + + + + + + + + 0 + + + Header + + +   + + + Contains Element Valid Bit plus Event Type Encodings (see + + ). + + + + + 1 + + + Payload + + + Format/Transport Event Code + + + For Valid Command Response Entries, see + . For Transport Event + Codes see + . + + + + + 2-15 + + +   + + + Format Dependent. + + + + +
+   + + Example Reliable CRQ Entry Format Byte Definitions + for VFC + + + + + + + + + Format Byte Value + + + + + Definition + + + + + + + + 0x0 + + + Unused + + + + + 0x01 + + + VFC Requests + + + + + 0x02 - 0x03 + + + Reserved + + + + + 0x04 + + + Management Datagram + + + + + 0x05 - 0xFE + + + Reserved + + + + + 0xFF + + + Reserved for Expansion + + + + +
+   + + Example VFC Command Queue Element + + + + + + + + + Byte Offset + + + + + Field Value + + + + + Description + + + + + + + + 0 + + + 0x80 + + + Valid Header + + + + + 1 + + + 0x01 + + + VFC Requests + + + + + 1 + + + 0x04 + + + Management Datagram + + + + + 2-3 + + + NA + + + Reserved + + + + + 4-7 + + +   + + + Length of the request block to be transferred + + + + + 8-15 + + +   + + + I/O address of beginning of request + + + + +
+   + + Example VFC Response Queue Element + + + + + + + + + Byte Offset + + + + + Field Value + + + + + Description + + + + + + + + 0 + + + 0x80 + + + Valid Header + + + + + 1 + + + 0x01 + + + VFC Response Format + + + + + 1 + + + 0x02 + + + Asynchronous Event + + + + + 1 + + + 0x04 + + + Management Datagram + + + + + 2-3 + + + NA + + + Reserved + + + + + 4-7 + + +   + + + Summary Status + + + + + 8-15 + + +   + + + 8 byte command correlator + + + + +
+
+ +
+ VFC and NPIV Requirements + This normative section provides the general requirements for the + support of VFC. + + + + R1--1. + + + For the VFC option: The platform must implement the + Reliable Command/Response Transport option as defined in + . + + + + + R1--2. + + + For the VFC option: The platform must implement the + Logical Remote DMA option as defined in + . + + + + + R1--3. + + + For the VFC option: The platform must allocate a WWPN + pair for each VFC client and must present the WWPNs to the VFC clients in + their OF device tree + . + In addition to the firmware primitives, and the structures they + define, the partition’s OS needs to know specific information + regarding the configuration of the virtual IOA’s that it has been + assigned so that it can load and configure the correct device driver + code. This information is provided by the OF device tree node associated + with the virtual IOA (see + and + ). + + + + +
+ Client Partition VFC Device Tree Node + Client partition VFC device tree nodes have associated packages + such as disk-label, deblocker, iso-13346-files and iso-9660-files as well + as children nodes such as block and byte as appropriate to the specific + virtual IOA configuration as would the node for a physical FC IOA. + + + + R1--1. + + + For the VFC option: The platform’s OF device + tree for client partitions must include as a child of the + /vdevice node, a node of name + “vfc-client” as the parent of a sub-tree + representing the virtual IOAs assigned to the partition. + + + + + R1--2. + + + For the VFC option: The platform’s + vfc-client OF node must contain properties as defined + in + (other standard I/O adapter + properties are permissible as appropriate). +   + + Properties of the VFC Node in the Client + Partition + + + + + + + + + Property Name + + + + + Required? + + + + + Definition + + + + + + + + + “name” + + + + Y + + + Standard property name per + , + specifying the virtual device name, the + value shall be + “vfc-client”. + + + + + + “device_type” + + + + Y + + + Standard property name per + , + specifying the virtual device type, the + value shall be + + “fcp”. + + + + + + “model” + + + + NA + + + Property not present. + + + + + + “compatible” + + + + Y + + + Standard property name per + , + specifying the programming models that are + compatible with this virtual IOA, the value shall include + “IBM,vfc-client”. + + + + + + “used-by-rtas” + + + + See Definition Column + + + Present if appropriate. + + + + + + “ibm,loc-code” + + + + Y + + + Property name specifying the unique and persistent + location code associated with this virtual IOA presented as an + encoded array as with + encode-string. The value shall be of the + form specified in + . + + + + + + “reg” + + + + Y + + + Standard property name per + , + specifying the register addresses, used as + the unit address (unit ID), associated with this virtual IOA + presented as an encoded array as with + encode-phys of length + “#address-cells” value shall be + 0xwhatever (virtual + “reg” property used for unit + address no actual locations used, therefore, the size field has + zero cells (does not exist) as determined by the value of the + “#size-cells” property). + + + + + + “ibm,my-dma-window” + + + + Y + + + Property name specifying the DMA window associated with + this virtual IOA presented as an encoded array of three values + (LIOBN, phys, size) encoded as with + encode-int, + encode-phys, and + encode-int. + + + + + + “interrupts” + + + + Y + + + Standard property name specifying the interrupt source + number and sense code associated with this virtual IOA + presented as an encoded array of two cells encoded as with + encode-int with the first cell containing + the interrupt source number, and the second cell containing the + sense code 0 indicating positive edge triggered. The interrupt + source number being the value returned by the H_XIRR or H_IPOLL + hcall(). + + + + + + “ibm,my-drc-index” + + + + For DR + + + Present if the platform implements DR for this + node. + + + + + + “ibm,#dma-size-cells” + + + + See Definition Column + + + Property name, to define the package’s dma address + size format. The property value specifies the number of cells + that are used to encode the size field of dma-window + properties. This property is present when the dma address size + format cannot be derived using the method described in the + definition for the + “ibm,#dma-size-cells” property + in + . + + + + + + “ibm,#dma-address-cells” + + + + See Definition Column + + + Property name, to define the package’s dma address + format. The property value specifies the number of cells that + are used to encode the physical address field of dma-window + properties. This property is present when the dma address + format cannot be derived using the method described in the + definition for the + “ibm,#dma-address-cells” property in + . + + + + + + “ibm,port-wwn-1” + + + + See Definition Column + + + Property that represents one of two WWPNs assigned to + this VFC client node. This property is a + prop-encoded-array each encoded with + encode-int. The array consists of the high + order 32 bits and low order 32 bits of the WWPN such that (32 + bits high | 32 bits low) is the 64 bit WWPN. The WWPN that the + client is to use ( + “ibm,port-wwn-1” or + “ibm,port-wwn-2”) is + communicated to the client by the server as part of the + client-server communications protocol. + + + + + + “ibm,port-wwn-2” + + + + See Definition Column + + + Property that represents one of two WWPNs assigned to + this VFC client node This property is a + prop-encoded-array each encoded with + encode-int. The array consists of the high + order 32 bits and low order 32 bits of the WWPN such that (32 + bits high | 32 bits low) is the 64 bit WWPN. The WWPN that the + client is to use ( + “ibm,port-wwn-1” or + “ibm,port-wwn-2”) is + communicated to the client by the server as part of the + client-server communications protocol. + + + + +
+
+
+ + + R1--3. + + + For the VFC option: The platform’s + vfc-client node must have as children the appropriate + block (disk) and byte (tape) nodes. + + +
+
+ +
+ Server Partition VFC Device Tree Node + Server partition VFC IOA nodes have no children nodes. + + + + R1--1. + + + For the VFC option: The platform’s OF device + tree for server partitions must include as a child of the + /vdevice node, a node of name + “vfc-server” as the parent of a sub-tree + representing the virtual IOAs assigned to the partition. + + + + + R1--2. + + + For the VFC option: The platform’s + vfc-server node must contain properties as defined in + + (other standard I/O adapter + properties are permissible as appropriate). + + + + + + Properties of the VFC Node in the Server + Partition + + + + + + + + + Property Name + + + + + Required? + + + + + Definition + + + + + + + + + “name” + + + + Y + + + Standard property name per + , + specifying the virtual device name, the + value shall be + “vfc-server”. + + + + + + “device_type” + + + + Y + + + Standard property name per + , + specifying the virtual device type, the + value shall be + “fcp”. + + + + + + “model” + + + + NA + + + Property not present. + + + + + + “compatible” + + + + Y + + + Standard property name per + , + specifying the programming models that are + compatible with this virtual IOA, the value shall include + “IBM,vfc-server”. + + + + + + “used-by-rtas” + + + + See Definition Column + + + Present if appropriate. + + + + + + “ibm,loc-code” + + + + Y + + + Property name specifying the unique and persistent + location code associated with this virtual IOA presented as an + encoded array as with + encode-string. The value shall be of the + form + . + + + + + + “reg” + + + + Y + + + Standard property name per + , + specifying the register addresses, used as + the unit address (unit ID), associated with this virtual IOA + presented as an encoded array as with + encode-phys of length + “#address-cells” value shall be + 0xwhatever (virtual + “reg” property used for unit + address no actual locations used, therefore, the size field has + zero cells (does not exist) as determined by the value of the + “#size-cells” property). + + + + + + “ibm,my-dma-window” + + + + Y + + + Property name specifying the DMA window associated with + this virtual IOA presented as an encoded array of two sets (two + window panes) of three values (LIOBN, phys, size) encoded as + with + encode-int, + encode-phys, and + encode-int. Of these two triples, the + first describes the window pane used to map server partition + memory, the second is the window pane through which the client + partition maps its memory that it makes available to the server + partition. (Note the mapping between the LIOBN in the second + window pane of a server virtual IOA’s + “ibm,my-dma-window” property + and the corresponding client IOA’s RTCE table is made + when the CRQ successfully completes registration. See + for more information + on window panes.) + + + + + + “interrupts” + + + + Y + + + Standard property name specifying the interrupt source + number and sense code associated with this virtual IOA + presented as an encoded array of two cells encoded as with + encode-int with the first cell containing + the interrupt source number, and the second cell containing the + sense code 0 indicating positive edge triggered. The interrupt + source number being the value returned by the H_XIRR or H_IPOLL + hcall() + + + + + + “ibm,my-drc-index” + + + + For DR + + + Present if the platform implements DR for this + node. + + + + + + “ibm,vserver” + + + + Y + + + Property name specifying that this is a virtual server + node. + + + + + + “ibm,#dma-size-cells” + + + + See Definition Column + + + Property name, to define the package’s dma address + size format. The property value specifies the number of cells + that are used to encode the size field of dma-window + properties. This property is present when the dma address size + format cannot be derived using the method described in the + definition for the + “ibm,#dma-size-cells” property + in + . + + + + + + “ibm,#dma-address-cells” + + + + See Definition Column + + + Property name, to define the package’s dma address + format. The property value specifies the number of cells that + are used to encode the physical address field of dma-window + properties. This property is present when the dma address + format cannot be derived using the method described in the + definition for the + “ibm,#dma-address-cells” property in + . + + + + +
+   +
+
+
+ +
+ Virtual Network Interface Controller (VNIC) + This section defines a Virtual Network Interface Controller (VNIC) + interface to a server partition interfacing to a physical Network Interface + Controller (NIC) adapter that allows multiple partitions to share a + physical port. The implementation support is provided by code running in a + server partition that uses the mechanisms of the Synchronous VIO + Infrastructure (or equivalent thereof as seen by the client) to service I/O + requests for code running in a client partition + The server partition for VNIC is expected to be part of the + platform firmware and therefore an OS interface is not provided in this + architecture for the server side. However, the platform firmware is still + expected to be implemented by a partition, and hence the term + “server partition.” + . The client partition appears to enjoy the services of its own + NIC adapter. The terms server and client partitions refer to platform + partitions that are respectively servers and clients of requests, usually + I/O operations, using the physical NIC that is assigned to the server + partition. This allows a platform to have more client partitions than it + may have physical NICs because the client partitions share I/O adapters via + the server partition. + The VNIC model makes use of Remote DMA which is built upon the + architecture specified in the following sections: + + + + + + + + + + + + + + + + The use of Remote DMA has implications that the physical NIC be able + to do some of its own vitualization. For example, for an Ethernet adapter, + being able to route receive requests, via DMA to the appropriate client + partition, based on the addressing in the incoming packet. + +
+ VNIC General + This section contains an informative outline of the architectural + intent of the use of VNIC. Other implementations of the server and client + partition code, consistent with this architecture, are possible and may + be preferable. + The client partition provides the virtual equivalent of a single + port NIC adapter via each VNIC client IOA. The platform, through the + partition definition, provides means for defining the set of virtual + IOA’s owned by each partition and their respective location codes. + The platform also provides, through partition definition, instructions to + connect each client partition’s VNIC client IOA to a specific + server partition’s VNIC server IOA. The mechanism for specifying + this partition definition is beyond the scope of this architecture. The + human readable handle associated with the partition definition of virtual + IOAs and their associated interconnection and resource configuration is + the virtual location code. The OF unit address (unit ID) remains the + invariant handle upon which the OS builds its “physical to + logical” configuration. The platform also provides a method to + assign unique MAC addresses for each VNIC client adapter. The mechanism + for allocating port names is beyond the scope of this + architecture. + The client partition’s device tree contains one or more nodes + notifying the partition that it has been assigned one or more virtual + adapters. The node’s + “type” and + “compatible” properties notify the + partition that the virtual adapter is a VNIC. The unit address of the + node is used by the client partition to map the virtual device(s) to the + OS’s corresponding logical representations. The + “ibm,my-dma-window” property communicates + the size of the RTCE table window panes that the hypervisor has + allocated. The node also specifies the interrupt source number that has + been assigned to the Reliable Command/Response Transport connection and + the RTCE range that the client partition device driver may use to map its + memory for access by the server partition via Logical Remote DMA. The + client partition, uses the hcall()s associated with the Reliable + Command/Response Transport facility to register and deregister its CRQ, + manage notification of responses, and send command requests to the server + partition. The client partition uses the hcall()s associated with the + Subordinate CRQ Transport facility to register and deregister any + sub-CRQs necessary for the operations of the VNIC. + The client partition, upon noting the device tree entry for the + virtual adapter, loads the device driver associated with the value of the + + “compatible” property. The device driver, + when configured and opened, allocates memory for its CRQ (an array, large + enough for all possible responses, of 16 byte elements), pins the queue + and maps it into the I/O space of the RTCE window specified in the + “ibm,my-dma-window” property using the + standard kernel mapping services that subsequently use the H_PUT_TCE + hcall(). The queue is then registered using the H_REG_CRQ hcall(). Next, + I/O request control blocks (within which the I/O requests commands are + built) are allocated, pinned, and mapped into I/O address space. Finally, + the device driver registers to receive control when the interrupt source + specified in the virtual IOA’s device tree node signals. + Once the CRQ is setup, the device driver in the client queues an + Initialization Command/Response with the second byte of + “Initialize” in order to attempt to tell the hosting side + that everything is setup on the hosted side. The response to this send + may be that the send has been dropped or has successfully been sent. If + successful, the sender should expect back an Initialization + Command/Response with a second byte of “Initialization + Complete,” at which time the communication path can be deemed to be + open. If dropped, then the sender waits for the receipt of an + Initialization Command/Response with a second byte of + “Initialize,” at which time an “Initialization + Complete” message is sent, and if that message is sent + successfully, then the communication path can be deemed to be + open. + Once the CRQ connection is complete between the client and the + server, the client receives from the server the number of sub-CRQs that + can be supported on the client side. The client allocates memory for the + first sub-CRQ (an array, large enough for all possible responses, of 32 + byte elements), pins the queue and maps it into the I/O space of the RTCE + window specified in the + “ibm,my-dma-window” property using the + standard kernel mapping services that subsequently use the H_PUT_TCE + hcall(). The queue is then registered using the H_REG_SUB_CRQ hcall(). + This process continues until all desired sub-CRQs are registered or until + the H_REG_SUB_CRQ hcall() indicates that the resources allocated to the + client for sub-CRQs for the virtual IOA have already been allocated + (H_Resource returned). Interrupt numbers for the Sub-CRQs that have been + registered, are returned by the H_REG_SUB_CRQ hcall() (See + ). + Once all the CRQs and Sub-CRQs are setup, the communications + between the client and server device drivers may commence for purposes of + further setup operations, and then normal I/O requests, error + communications, etc. The protocol for this communications is beyond the + scope of this architecture. +
+ +
+ VNIC Requirements + This normative section provides the general requirements for the + support of VNIC. + + + + R1--1. + + + For the VNIC option: The platform must implement the + Reliable Command/Response Transport option as defined in + . + + + + + R1--2. + + + For the VNIC option: The platform must implement the + Subordinate CRQ Transport option as defined in + . + + + + + R1--3. + + + For the VNIC option: The platform must implement the + Logical Remote DMA option as defined in + . + + + + + R1--4. + + + For the VNIC option: The platform’s OF device + tree for client partitions must include as a child of the + /vdevice node, at least one node of name + “vnic”. + + + + + R1--5. + + + For the VNIC option: The platform’s + vnic OF node must contain properties as defined in + (other standard I/O adapter + properties are permissible as appropriate). + + + + + + Properties of the <emphasis role="bold"><literal>vnic</literal></emphasis> Node in the OF Device Tree + + + + + + + + + Property Name + + + + + Required? + + + + + Definition + + + + + + + + + “name” + + + + Y + + + Standard property name per + , specifying the + virtual device name, the value shall be + “vnic”. + + + + + + “device_type” + + + + Y + + + Standard property name per + , specifying the + virtual device type, the value shall be + “network”. + + + + + + “model” + + + + NA + + + Property not present. + + + + + + “compatible” + + + + Y + + + Standard property name per + , specifying the + programming models that are compatible with this virtual IOA, + the value shall include + “IBM,vnic”. + + + + + + “used-by-rtas” + + + + See definition column + + + Present if appropriate. + + + + + + “ibm,loc-code” + + + + Y + + + Property name specifying the unique and persistent + location code associated with this virtual IOA. + + + + + + “reg” + + + + Y + + + Standard property name per + , specifying the unit + address (unit ID) associated with this virtual IOA presented as + an encoded array as with + encode-phys of length + “#address-cells” value shall be + 0xwhatever (virtual + “reg” property used for unit + address no actual locations used, therefore, the size field has + zero cells (does not exist) as determined by the value of the + “#size-cells” property). + + + + + + “ibm,my-dma-window” + + + + Y + + + Property name specifying the DMA window associated with + this virtual IOA presented as an encoded array of three values + (LIOBN, phys, size) encoded as with + encode-int, + encode-phys, and + encode-int. + + + + + + “interrupts” + + + + Y + + + Standard property name specifying the interrupt source + number and sense code associated with this virtual IOA + presented as an encoded array of two cells encoded as with + encode-int with the first cell containing + the interrupt source number, and the second cell containing the + sense code 0 indicating positive edge triggered. The interrupt + source number being the value returned by the H_XIRR or H_IPOLL + hcall(). + + + + + + “ibm,my-drc-index” + + + + For DR + + + Present if the platform implements DR for this + node. + + + + + + “ibm,#dma-size-cells” + + + + See definition column + + + Property name, to define the package’s dma address + size format. The property value specifies the number of cells + that are used to encode the size field of dma-window + properties. This property is present when the dma address size + format cannot be derived using the method described in the + definition for the + “ibm,#dma-size-cells” property + in + . + + + + + + “ibm,#dma-address-cells” + + + + See definition column + + + Property name, to define the package’s dma address + format. The property value specifies the number of cells that + are used to encode the physical address field of dma-window + properties. This property is present when the dma address + format cannot be derived using the method described in the + definition for the + “ibm,#dma-address-cells” property in + . + + + + + + “local-mac-address” + + + + Y + + + Standard property name per + , specifying the + locally administered MAC addresses are denoted by having the + low order two bits of the high order byte being 0b10. + + + + + + “mac-address” + + + + Y + + + Standard property name per + , specifying the + initial MAC address (may be changed by a VNIC CRQ + command). + + + + + + “supported-network-types” + + + + Y + + + Standard property name as per + . + Reports possible types of “network” + the device can support. + + + + + + “chosen-network-type” + + + + Y + + + Standard property name as per + . + Reports the type of “network” this + device is supporting. + + + + + + “max-frame-size” + + + + Y + + + Standard property name per + , to indicate maximum + packet size. + + + + + + “address-bits” + + + + Y + + + Standard property name per + , to indicate network + address length. + + + + + “interrupt-ranges” + + + Y + + + Standard property name that defines the interrupt + number(s) and range(s) handled by this device. Subordinate CRQs + associated with this VNIC use interrupt numbers from these + ranges. + + + + +
+
+
+
diff --git a/Virtualization/ch_virtual_nic.xml b/Virtualization/ch_virtual_nic.xml new file mode 100644 index 0000000..86e0f65 --- /dev/null +++ b/Virtualization/ch_virtual_nic.xml @@ -0,0 +1,9890 @@ + + A Protocol for VNIC Communications + +
+ Introduction + The VNIC protocol defined in this chapter defines the protocol to be + used with VNIC virtual IOA, as defined in + . VNIC provides a mechanism which + minimizes the number of times data is copied within the memory of the + physical system. The virtual I/O model described herein allows for either + zero copy using the redirected DMA or single copy when the data is first + moved to the memory space of firmware before being DMAed to the client + partition. + This protocol is designed to fulfill the following + requirements: + + + + Fast, efficient transfer and reception of Ethernet frames + + + + Exploitation of adapter multiple transmit and receive queue + support. + + + + Partition mobility capable + + + + Promiscuous mode support + + + + Stateless TCP and IP checksum offload + + + + TCP large send offload + + + + Multiple interrupt source support + + + + Notification of physical Ethernet link state + + + + Physical Ethernet link state control if configured + + + + Statistics, trace, and dump support + + + + Extensible protocol for future functional additions + + +
+ +
+ VNIC Adapter + The intent of this protocol is to support the implementation, within + the client logical partition, of a VNIC adapter device driver (VNIC client) + which is functionally similar to a physical Ethernet adapter device driver. + The VNIC can send and receive Ethernet packets, add receive buffers to the + virtualized hardware, handle physical and logical link status, acquire + hardware statistics, and utilize advanced hardware features like checksum + offload. The VNIC interface also provides tracing, logging, and dumping + facilities. + It is the firm intent of this protocol that no changes be required in + any layer 3 or higher communication protocol (e.g. TCP, IP, etc.). + A partition may have multiple VNIC Adapters. +
+
+ Zero Copy DMA Models + Unlike the Interpartition Logical LAN option (See + ), the VNIC protocol allows for + the physical Ethernet adapter associated with the VNIC device to securely + target memory pages associated with a VNIC adapter for virtual I/O + operations. LoPAR defines two modes of LRDMA (See + ). + The use of Redirected RDMA is completely invisible to the VNIC + adapter, and has no impact on the VNIC protocol defined here. It is left + entirely to the discretion of the server firmware whether it first moves + data from a physical adapter into its own memory before moving (DMAing) the + data to the VNIC adapter, or whether the physical adapter sets up the I/O + request in such a way that the physical device DMAs directly to the memory + of the client adapter. The virtualizing firmware uses the RDMA mode that + best suits its needs for a given virtual I/O operation. +
+
+ Protocol Overview + + The CRQ and Sub-CRQ facilities as defined in + are used to send and receive VNIC + commands to system firmware. The different VNIC command types are defined + in + . + Throughout this document, boolean values assume 0 to be false, 1 to + be true. Unless otherwise specified, all lengths are expected to be given + in terms of bytes. Any setting or capability changed or enabled after a + successful H_REGISTER_CRQ will be cleared when H_FREE_CRQ is + performed. + The format of a VNIC command is shown in + . The Command Type field of the + VNIC command is defined in + . The Return Code for a a VNIC + command is always at offset 12 in the response, as shown in + . + All VNIC commands have VNIC command values from 0x0 to 0x7F. Each + response to a VNIC command has a VNIC command value that is equal to the + command with the 0x80 bit in the command turned on. + In the event firmware receives a command it doesn’t understand, + a response will be returned with an UnknownCommand return code set at + offset 12, and the VNIC command type set to the passed in command type with + the 0x80 bit turned on. + + + Format of the VNIC command + + + + + + + + + + + + + + + Byte Offset + + + 0 + + + 1 + + + 2 + + + 3 + + + 4 + + + 5 + + + 6 + + + 7 + + + + + + + 0x00 + + + 0x80 + + + Command Type + + + Command dependent + + + + + 0x08 + + + Command dependent + + + Return Code or Command Dependent + + + + +
+   + + VNIC Return Code + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + Architected Return Value + + + 0 + + + 1 + + + This field contains a value from + that contains the high + level return code for the operation. + + + + + Detailed Error Data + + + 1 + + + 3 + + + This field contains an unarchitected detailed error code + that can be used by firmware to further classify the error + returned in the architected return value. + + + + +
+   + + VNIC Command Types + + + + + + + + + + Command Type + + + Command value + + + Sent by + + + Description + + + Location + + + + + + + VERSION_EXCHANGE + + + 0x01 + + + VNIC Client + + + Used to inform firmware of level of protocol VNIC + supports + + + + + + + + + + VERSION_EXCHANGE_RSP + + + 0x81 + + + Firmware + + + Used to inform VNIC of level of protocol firmware + supports + + + + + + + + + + QUERY_CAPABILITY + + + 0x02 + + + VNIC Client + + + Query firmware for a specific VNIC capability + + + + + + + + + + QUERY_CAPABILITY_RSP + + + 0x82 + + + Firmware + + + Response for a QUERY_CAPABILITY + + + + + + + + + + REQUEST_CAPABILITY + + + 0x03 + + + VNIC Client + + + Request firmware to start using a specific capability + value + + + + + + + + + + REQUEST_CAPABILITY_RSP + + + 0x83 + + + Firmware + + + Response from firmware to a REQUEST_CAPABILITY + command + + + + + + + + + + LOGIN + + + 0x04 + + + VNIC Client + + + Used to exchange Sub-CRQ information with system firmware + in preparation for functional use of the virtualized + adapter + + + + + + + + + + LOGIN_RSP + + + 0x84 + + + Firmware + + + Response from firmware with firmware’s Sub-CRQ + information in preparation for functional use. + + + + + + + + + + QUERY_PHYS_PARMS + + + 0x05 + + + VNIC Client + + + Used by VNIC client to enquire about physical port + parameters such as line speed, duplex setting, etc. + + + + + + + + + + QUERY_PHYS_PARMS_RSP + + + 0x85 + + + Firmware + + + A response to the QUERY_PHYS_PARMS request containing the + requested information + + + + + + + + + + QUERY_PHYS_CAPABILITIES + + + 0x06 + + + VNIC Client + + + Used by VNIC client to enquire about physical port + capabilities such as line speed. + + + + + + + + + + QUERY_PHYS_CAPABILITIES_RSP + + + 0x86 + + + Firmware + + + A response to the QUERY_PHYS_CAPABILITIES request + containing the requested information. + + + + + + + + + + SET_PHYS_PARMS + + + 0x07 + + + VNIC Client + + + Used by the VNIC to set physical port parameters such as + line speed if allowed. + + + + + + + + + + SET_PHYS_PARMS_RSP + + + 0x87 + + + Firmware + + + Response indicating status of SET_PHYS_PARMS request + + + + + + + + + + ERROR_INDICATION + + + 0x08 + + + Firmware + + + Used to indicate to either side of an error + condition. + + + + + + + + + + REQUEST_ERROR_INFO + + + 0x09 + + + VNIC Client + + + Used to request detailed error data about a previous + asynchronous error condition + + + + + + + + + + REQUEST_ERROR_RSP + + + 0x89 + + + Firmware + + + Used to return detailed error data in response to a + request + + + + + + + + + + REQUEST_DUMP_SIZE + + + 0x0A + + + VNIC Client + + + Used to request an estimate of how much size a VNIC + collected debug dump will require. + + + + + + + + + + REQUEST_DUMP_SIZE_RSP + + + 0x8A + + + Firmware + + + Used to inform VNIC of the dump size estimate. + + + + + + + + + + REQUEST_DUMP + + + 0x0B + + + VNIC Client + + + Used to request firmware to perform an adapter & + firmware dump to assist in problem determination + + + + + + + + + + REQUEST_DUMP_RSP + + + 0x8B + + + Firmware + + + Used to inform VNIC Client when the requested dump has been + completed + + + + + + + + + + LOGICAL_LINK_STATE + + + 0x0C + + + VNIC Client + + + Used by VNIC Client to tell firmware to start and stop + packet reception + + + + + + + + + + LOGICAL_LINK_STATE_RSP + + + 0x8C + + + Firmware + + + Used to inform VNIC Client of the status of the LINK_STATE + request + + + + + + + + + + REQUEST_STATISTICS + + + 0x0D + + + VNIC Client + + + Used to retrieve standard network adapter statistics + (bytes/packet sent/rcvd, etc.) + + + + + + + + + + REQUEST_STATISTICS_RSP + + + 0x8D + + + Firmware + + + Used to inform VNIC Client when statistics were + successfully collected + + + + + + + + + + REQUEST_RAS_COMP_NUM + + + 0x0E + + + VNIC Client + + + Used by VNIC Client to retrieve the number of independent + firmware components that can have their RAS capabilities + controlled in firmware associated with the VNIC + + + + + + + + + + REQUEST_RAS_COMP_NUM_RSP + + + 0x8E + + + Firmware + + + Response to the REQUEST_RAS_COMP_NUM command. + + + + + + + + + + REQUEST_RAS_COMPS + + + 0x0F + + + VNIC Client + + + Used by VNIC Client to retrieve the list of component ids + that can have their RAS capabilities controlled in firmware for + this VNIC. + + + + + + + + + + REQUEST_RAS_COMPS_RSP + + + 0x8F + + + Firmware + + + Response to the REQUEST_RAS_COMPS_RSP. + + + + + + + + + + CONTROL_RAS + + + 0x10 + + + VNIC Client + + + Request firmware to modify RAS characteristics to allow for + easier problem determination. + + + + + + + + + + CONTROL_RAS_RSP + + + 0x90 + + + Firmware + + + Response to the CONTROL_RAS command. + + + + + + + + + + COLLECT_FW_TRACE + + + 0x11 + + + VNIC Client + + + This allows the VNIC Client to collect a trace for a + firmware component. + + + + + + + + + + COLLECT_FW_TRACE_RSP + + + 0x91 + + + Firmware + + + Inform VNIC Client the trace collection is complete + + + + + + + + + + LINK_STATE_INDICATION + + + 0x12 + + + Firmware + + + Inform VNIC Client of link state changes. + + + + + + + + + + CHANGE_MAC_ADDR + + + 0x13 + + + VNIC Client + + + Request system firmware to change the current VNIC MAC + address + + + + + + + + + + CHANGE_MAC_ADDR_RSP + + + 0x93 + + + Firmware + + + Inform VNIC Client of MAC address change request + status + + + + + + + + + + MULTICAST_CTRL + + + 0x14 + + + VNIC Client + + + Request system firmware to change current multicast MAC + address settings + + + + + + + + + + MULTICAST_CTRL_RSP + + + 0x94 + + + Firmware + + + Inform VNIC Client of multicast response + + + + + + + + + + GET_VPD_SIZE + + + 0x15 + + + VNIC Client + + + Query firmware for the size of VPD + + + + + + + + + + GET_VPD_SIZE_RSP + + + 0x95 + + + Firmware + + + Return the size of VPD to VNIC client + + + + + + + + + + GET_VPD + + + 0x16 + + + VNIC Client + + + Request system firmware to return VPD associated with + adapter. + + + + + + + + + + GET_VPD_RSP + + + 0x96 + + + Firmware + + + Response to GET_VPD. + + + + + + + + + + TUNE + + + 0x17 + + + VNIC Client + + + Pass debugging information to system firmware + + + + + + + + + + TUNE_RSP + + + 0x97 + + + Firmware + + + Response to TUNE command. + + + + + + + + + + QUERY_IP_OFFLOAD + + + 0x18 + + + VNIC Client + + + Request details about TCP, UDP, and IP offload + capabilities + + + + + + + + + + QUERY_IP_OFFLOAD_RSP + + + 0x98 + + + Firmware + + + Response to QUERY_IP_OFFLOAD command. + + + + + + + + + + CONTROL_IP_OFFLOAD + + + 0x19 + + + VNIC Client + + + Enable and disable TCP, UDP, and IP offload + capabilities + + + + + + + + + + CONTROL_IP_OFFLOAD_RSP + + + 0x99 + + + Firmware + + + Response to CONTROL_IP_OFFLOAD command. + + + + + + + + + + ACL_CHANGE_INDICATION + + + 0x1A + + + Firmware + + + Inform VNIC client of dynamic changes to access + controls + + + + + + + + + + ACL_QUERY + + + 0x1B + + + VNIC Client + + + Request information about access control limitations in + place for this VNIC. + + + + + + + + + + ACL_QUERY_RSP + + + 0x9B + + + Firmware + + + Response to ACL_QUERY command. + + + + + + + + + + REQUEST_DEBUG_STATS + + + 0x1C + + + VNIC Client + + + Request unarchitected statistics block used for debugging + firmware problems. + + + + + + + + + + REQUEST_DEBUG_STATS_RSP + + + 0x9C + + + Firmware + + + Response to REQUEST_DEBUG_STATS command. + + + + + + + + + +
+   + + VNIC Architected Return Values + + + + + + + + + + Return Code + + + + + Value + + + + + Definition + + + + + + + + Success + + + 0 + + + The requested operation completed successfully. + + + + + PartialSuccess + + + 1 + + + The requested operation completed partially successful. The + parameters were valid, but not all resources could be obtained to + completely satisfy the command. Check the specific function + definition for details. + + + + + Permission + + + 2 + + + The request called for permissions not available. + + + + + NoMemory + + + 3 + + + The request failed due to insufficient memory. + + + + + Parameter + + + 4 + + + One or more parameters were in error in the request. + + + + + UnknownCommand + + + 5 + + + The specific VNIC command is unknown. + + + + + Aborted + + + 6 + + + The command was aborted by some other action. + + + + + InvalidState + + + 7 + + + The requested command is invalid at this time. + + + + + InvalidIOBA + + + 8 + + + An I/O bus address passed as a parameter was + invalid. + + + + + InvalidLength + + + 9 + + + A length passed as a parameter was invalid. + + + + + UnsupportedOption + + + 10 + + + A reserved value or option was used on an existing command + that system firmware does not support. + + + + + Reserved + + + 11-255 + + + These return codes are reserved. + + + + +
+
+
+ Typical VNIC Protocol Flows +
+ Boot Flow + This section gives an overview of the typical VNIC startup + sequence. + + + + The operating system discovers a VNIC device in the device + tree. + + + + The operating system instantiates the VNIC client device driver, + allocates a buffer for the VNIC CRQ, which is then TCE-mapped using the + VNIC’s TCE table. Since the VNIC protocol is a command/response + protocol, the VNIC client should allocate a CRQ buffer big enough to + handle a response for every command it wishes to have outstanding + concurrently with firmware with an allowance for unsolicited asynchronous + error and link state change CRQ events. + + + + VNIC client calls H_REG_CRQ specifying the unit address and IOBA + of the CRQ page(s), and waits for either H_Success or an INITIALIZATION + message as defined in + . + + + + VNIC client sends either an INITIALIZATION_COMPLETE or an + INITIALIZATION message to firmware using H_SEND_CRQ, as defined in + . + + + + Once the INITIALIZATION and INITIALIZATION_COMPLETE messages + have been exchanged, the VNIC client sends a VERSION_EXCHANGE using + H_SEND_CRQ, specifying the latest version of the VNIC protocol supported + by the VNIC client. + + + + Firmware responds with a VERSION_EXCHANGE_RSP specifying the + version it supports. Both VNIC client and firmware must support the lower + of the two versions. Until and unless the VNIC client receives a + VERSION_EXCHANGE_RSP, no further VNIC commands may be sent. + + + + VNIC client may now use QUERY_CAPABILITY commands to interrogate + what the firmware supports currently. Multiple QUERY_CAPABILITY commands + may be send in parallel, up to one for each capability being + interrogated. + + + + Firmware will respond with QUERY_CAPABILITY_RSP messages for + each query sent. + + + + Once the queries are returned, the VNIC client uses the + REQUEST_CAPABILITY commands to inform the firmware of the capabilities it + plans on using. Until the capability has been requested and a successful + response has been received, it will not function, and commands which use + the capabilities will fail. + + + + Only the Capability-related commands are usable prior to + sending a Login command. + + + + The VNIC client determines how many Sub-CRQs to set up based on + the capabilities negotiated with the server and partition configuration, + and attempts to set those up by allocating memory, mapping them with + TCEs, and calling H_REG_SUB_CRQ iteratively for each Sub-CRQ. + + + + Once the VNIC client has successfully gotten each Sub-CRQ it + needs registered (with some possibly failing due to unavailable + resources), it parcels them out to specific queues (Transmit Completion + and Receive Completion), and does a REQUEST_CAPABILITY for the + appropriate number of each from firmware. + + + + Once the VNIC client has all SubCrqs registered, he sends a + LOGIN CRQ to the server, specifying each Sub-CRQ handle and purpose as + defined in the LOGIN command structure, and waits for a LOGIN_RSP which + includes the server’s Sub-CRQ handles and purposes. + + + + Once the LOGIN_RSP has been returned successfully, the VNIC + client is free to utilize the Transmit Submission Sub-CRQs and Receive + Buffer Add Sub-CRQs, as well as any other VNIC command. + + + + Once the VNIC client is ready to receive frames (for the + Logical Link State to transition to Link Up), it sends a + LOGICAL_LINK_STATE command to firmware. If the VNIC client is also in + control of the physical port, sending the LOGICAL_LINK_STATE command has + the side effect of initiating physical port link negotiation, as + appropriate. + + + + The firmware will send a LOGICAL_LINK_STATE_RSP once the link + state is up. + + +
+ +
+ Adapter reboot + In the event that system firmware encounters an error, needs to + update the firmware on the adapter, or needs to remove the virtualized + adapter from the partition, the following flows will happen. + + + + Firmware will close its CRQ and Sub-CRQs. + + + + VNIC client receives a TRANSPORT_EVENT specifying Partner + Partition Closed or receives an H_Closed return code on a H_SEND_CRQ or + H_SEND_SUB_CRQ hypervisor call. + + + + VNIC client closes all Sub-CRQs and CRQ using H_FREE_SUB_CRQ and + H_FREE_CRQ. (Optionally, only H_FREE_CRQ could be used to close the CRQ + and all Sub-CRQs.) + + + + VNIC client cleans up all outstanding unacknowledged transmit + frames. + + + + VNIC client cleans up all receive buffers that had been given to + the firmware. + + + + VNIC client opens the CRQ, and attempts the boot + sequence. + + +
+ +
+ Partition Mobility + In the event that an active partition is migrated to a new + platform, the following sequence takes place. + + + + VNIC client receives a TRANSPORT_EVENT event specifying Partner + Partition Suspended (Defined in + ). + + + + VNIC client pauses submission of new transmit frames and receive + add buffers. + + + + VNIC client closes all Sub-CRQs. + + + + VNIC client completes all outstanding unacknowledged transmit + frames. This may involve queueing them for retransmission once the VNIC + is recovered, or completing them as dropped, letting higher layers of the + TCP/IP stack perform retransmission. + + + + VNIC client calls H_ENABLE_CRQ until H_Success is + returned. + + + + VNIC client attempts the boot sequence. + + +
+ +
+ Dump + Typical dump collection flow: + + + + VNIC client decides on the need for a VNIC dump. + + + + VNIC client sends a REQUEST_DUMP_SIZE command (see + ) to system firmware. + + + + Firmware responds with a REQUEST_DUMP_SIZE_RSP with an estimate + on the amount of storage required to store the dump into VNIC client + memory. + + + + VNIC client allocates a buffer big enough to hold the dump, and + maps it with TCEs. + + + + VNIC client sends a REQUEST_DUMP command (see + ) to system firmware containing + the IOBAs referring to the dump buffer. + + + + System firmware uses the supplied dump buffer to collect the + memory that’s previously been registered by firmware as important + for dumps. + + + + System firmware optionally collects physical adapter debug data + into the dump buffer as well. + + + + System firmware sends a REQUEST_DUMP_RSP (see + ) to the VNIC client, + indicating the dump is complete. + + +
+ +
+ Frame Transmission + Transmission of Ethernet frames using the VNIC protocol is + accomplished using two or more Subordinate CRQs. The VNIC client + allocates one or more Transmit Completion Sub-CRQs and system firmware + allocates one or more Transmit Submission CRQs. The handles for each are + exchanged during the LOGIN processing. + The following numbered sequence details the simplified transmission + of an Ethernet frame. As with any CRQ or Subordinate CRQ based protocol, + the listed virtual interrupts may not occur for every CRQ or Sub-CRQ that + is sent using H_SEND_CRQ, H_SEND_SUB_CRQ, or H_SEND_SUB_CRQ_INDIRECT. It + is the firm intent of this protocol to allow the VNIC client and system + firmware to batch frame transmission submission and transmit complete + indications to minimize the number of virtual interrupts and to make the + transmission of Ethernet frames as efficient as possible. Multiple + Sub-CRQs may be presented to either the VNIC or system firmware with a + single virtual interrupt. + + + + Operating system chooses a VNIC adapter to use for frame + transmission. + + + + VNIC client device driver either copies the frame into a private + buffer that’s already been mapped via a TCE or maps the frame with + a TCE. + + + + VNIC client device driver constructs a Transmit Descriptor (or + multiples) describing the TCE mapped buffer (see + ). + + + + VNIC client device driver uses H_SEND_SUB_CRQ to pass the + Transmit Descriptor to system firmware’s Transmit Submission + Sub-CRQ. + + + + System firmware receives the Sub-CRQ event, and transforms it + into the appropriate format for the specific Ethernet adapter being + virtualized, and uses its embedded device driver to send the frame out + the wire. The system firmware uses RDMA to DMA the frame directly from + the VNIC client. + + + + The physical Ethernet device driver interrupts system firmware + (or system firmware polls for completion at appropriate times) indicating + the frame has been successfully transmitted. System firmware constructs a + Transmit Completion Sub-CRQ event (see + ), and places that Sub-CRQ onto + the Transmit Completion Sub-CRQ. + + + + VNIC client removes the TCE mapping for the frame, and makes it + available to its network stack. + + +
+ +
+ Frame Reception + Reception of Ethernet frames is accomplished using two or more + Sub-CRQs, similar to frame transmission. System firmware creates one or + more Receive Buffer Add Sub-CRQs and the VNIC client creates one or more + Receive Completion Sub-CRQs. + The following numbered sequence details the simplified reception of + an Ethernet frame. As with any CRQ or Subordinate CRQ based protocol, the + listed virtual interrupts may not occur for every CRQ or Sub-CRQ that is + sent using H_SEND_CRQ, H_SEND_SUB_CRQ, or H_SEND_SUB_CRQ_INDIRECT. It is + the firm intent of this protocol to allow the VNIC client and system + firmware to batch frame reception and buffer adding to minimize the + number of virtual interrupts and to make the reception of Ethernet frames + as efficient as possible. Multiple Sub-CRQs may be presented to either + the VNIC or system firmware with a single virtual interrupt. + + + + When the VNIC client is started, the VNIC allocates several + memory buffers to be used to the reception of Ethernet frames. The VNIC + client maps those buffers with TCEs using its TCE mapping + services. + + + + For each receive buffer, the VNIC client creates Add Receive + Buffer Descriptor events (see + ), and gives them to system + firmware via the Receive Buffer Add Sub-CRQ using H_SEND_SUB_CRQ or + H_SEND_SUB_CRQ_INDIRECT. Once this is done, the VNIC client should not + use or otherwise modify the receive buffer until it’s been given + back to the VNIC client using the Receive Sub-CRQ or the Sub-CRQs and CRQ + have been freed using H_FREE_SUB_CRQ and H_FREE_CRQ. + + + + As system firmware receives the Receive Buffer Add Sub-CRQ + events, it uses its physical adapter device driver to add the receive + buffer to the physical adapter’s receive queues. + + + + A frame arrives for the physical adapter off of the physical + wire, and the adapter dmas the frame directly to the VNIC client’s + memory for one of the receive buffers. + + + + System firmware receives an interrupt from the physical adapter + saying a frame has arrived, and uses the information it saves to generate + a Receive Completion event Sub-CRQ (see + ), and places it on the + appropriate Receive Completion Sub-CRQ. + + + + The VNIC client receives a virtual interrupt for its Receive + Completion Sub-CRQ, and passes the frame up its network stack. + + +
+
+
+ VNIC Commands + All VNIC commands are sent using H_SEND_CRQ. +
+ Version Exchange + The VERSION_EXCHANGE command as defined in + allow the VNIC protocol to be + easily updated in the future. Each side is required to support the + highest common version of the VNIC protocol specification, as exchanged + right after the low level CRQ registration flows. + + + VERSION_EXCHANGE and VERSION_EXCHANGE_RSP + Command + + + + + + + + + + Field Name + + + + + ByteOffset + + + + + Length + + + + + Definition + + + + + + + + CRQ Type + + + 0 + + + 1 + + + This field should be set to 0x80 to indicate a valid CRQ + event. + + + + + VNIC Command + + + 1 + + + 1 + + + This field should be either VERSION_EXCHANGE or + VERSION_EXCHANGE_RSP. + + + + + Version + + + 2 + + + 2 + + + Maximum version that VNIC client supports on a + VERSION_EXCHANGE and the maximum version that system firmware + supports on a VERSION_EXCHANGE_RSP. Each side must support the + highest common version between the two versions. A value from + will be contained in + this field. + + + + + Reserved + + + 4 + + + 8 + + + This field is reserved, and should be set to 0. + + + + + Return Code + + + 12 + + + 4 + + + This is a return code for the operation as defined in + . + + + + +
+   + + VNIC Protocol Versions + + + + + + + + + Value + + + + + Definition + + + + + + + + 1 + + + Initial VNIC protocol version + + + + + 2-65535 + + + Reserved + + + + +
+
+
+ VNIC Capabilities + The VNIC capabilities command as defined in + is used to create an abstracted + architecture for discovering and utilizing different NIC advanced + functions on adapters, in an adapter-independent manner. As new + capabilities are introduced in adapters, more capability values will be + added. + To discover which capabilities a VNIC currently supports, multiple + QUERY_CAPABILITY commands should be sent from the VNIC client for each + capability of interest. System firmware will return the current + capability setting, or a bad return code if the capability isn’t + supported. System firmware will return UnsupportedOption for any + capability it doesn’t understand. + If the VNIC client wishes to use one of the supported capabilities, + it must be enabled via the correct REQUEST_CAPABILITY command. If a + capability has a variable number of settings (settable via the Number + field), and system firmware doesn’t support the value, a + PartialSuccess return code will be returned with the capped value in the + response. + If the VNIC client wishes to use REQUEST_CAPABILITY to determine if + any specific capabilities are valid without performing QUERY_CAPABILITY + commands, that’s acceptable, but there may be side effects as a + result. + + + CAPABILITIES Commands + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + CRQ Type + + + 0 + + + 1 + + + This field should be set to 0x80 to indicate a valid CRQ + event. + + + + + VNIC Command + + + 1 + + + 1 + + + This field should be QUERY_CAPABILITIES, + REQUEST_CAPABILITIES, or their associated responses. + + + + + Capability + + + 2 + + + 2 + + + This value should be one of the values from + . + + + + + Number + + + 4 + + + 8 + + + This field is used for both REQUESTs and QUERYs. For a + REQUEST, it’s the value that the VNIC client wishes to + use. On any RSP, it’s the new (or unchanged) current + value of the capability. + + + + + Return Code + + + 12 + + + 4 + + + This is a return code for the operation as defined in + . + + + + +
+   + + VNIC Capabilities + + + + + + + + + Value + + + + + Field Name + + + + + Behavior + + + + + + + + 1 + + + Minimum Number of firmware-supported Transmit + Completion/Submission Queues + + + - Query-only- Integer value returned in Number + + + + + 2 + + + Minimum Number of firmware-supported Receive Completion + Queues + + + - Query-only- Integer value returned in Number + + + + + 3 + + + Minimum Number of firmware-supported Receive Buffer Add + Queues per Receive Completion Queue + + + - Query-only- Integer value returned in Number + + + + + 4 + + + Maximum Number of firmware-supported Transmit + Completion/Submission Queues + + + - Query-only- Integer value returned in Number + + + + + 5 + + + Maximum Number of firmware-supported Receive Completion + Queues + + + - Query-only- Integer value returned in Number + + + + + 6 + + + Maximum Number of firmware-supported Receive Buffer Add + Queues per Receive Completion Queue + + + - Query-only- Integer value returned in Number + + + + + 7 + + + Requested Number of Transmit Completion/Submission + Queues + + + - Settable- Positive integer value set and returned in Number + + + + + 8 + + + Requested Number of Receive Completion Queues + + + - Settable- Positive integer value set and returned in Number + + + + + 9 + + + Requested Number of Receive Buffer Add Queues per Receive + Completion Queue + + + - Settable- Positive integer value set and returned in Number + + + + + 10 + + + Minimum Number of Transmit Entries Per Sub-CRQ + + + - Query only- Positive integer value set and returned in Number + + + + + 11 + + + Minimum Number of Receive Buffer Add Entries per + Sub-CRQ + + + - Query only- Positive integer value set and returned in Number + + + + + 12 + + + Maximum Number of Transmit Entries Per Sub-CRQ + + + - Query only- Positive integer value set and returned in Number + + + + + 13 + + + Maximum Number of Receive Buffer Add Entries per + Sub-CRQ + + + - Query only- Positive integer value set and returned in Number + + + + + 14 + + + Requested Number of Transmit Entries Per Sub-CRQ + + + - Settable- Positive integer value set and returned in Number + + + + + 15 + + + Requested Number of Receive Buffer Add Entries per + Sub-CRQ + + + - Settable- Positive integer value set and returned in Number + + + + + 16 + + + TCP/IP offload supported + + + - Query only- Boolean value returned in Number. If TRUE, TCP/IP + offload commands defined in + are supported. + + + + + 17 + + + Promiscuous mode requested + + + - Settable- Boolean value returned in Number + + + + + 18 + + + Promiscuous mode supported + + + - Query only- Boolean value returned in Number + + + + + 19 + + + Minimum MTU size + + + - Query only- Positive integer value set and returned in Number + + + + + 20 + + + Maximum MTU size + + + - Query only- Positive integer value set and returned in Number + + + + + 21 + + + Requested MTU size + + + - Settable + - Positive integer value set and returned in + Number + - This setting can impact the minimum number of queues or + receive buffer sizes supported, and should either be set early + or other capabilities will need to be reevaluated. + + + + + 22 + + + Maximum Number of Unique Multicast MAC address + filters + + + - Query only- Positive integer value set and returned in Number + + + + + 23 + + + VLAN Header insertion supported + + + - Query only + - Boolean value returned in Number + - This is controlled on a packet by packet basis in the + transmit descriptor. + + + + + 24 + + + Reserved + + +   + + + + + 25 + + + Maximum Transmit Scatter Gather entries + + + - Query only + - Positive integer value reflecting the maximum number of + IOBAs that can be used to describe a single frame using + Transmit Descriptors. + + + + + 26 + + + Receive Scatter/Gather Mode supported + + + - Query only + - Boolean value set and returned in Number. + - If supported, this can enable chaining of receive + buffers together to minimize the amount of memory that needs to + be added in the form of Receive Buffers (Particularly if Large + Receive Offload is enabled). + + + + + 27 + + + Receive Scatter/Gather Mode Requested + + + - Settable + - Boolean value set and returned in Number. + - This setting can impact the number of queues or receive + buffer sizes supported, and should be set before configuring + those values. + + + + + 28-65535 + + + Reserved + + +   + + + + +
+
+
+ Login Support + The use of the LOGIN and LOGIN_RSP commands is defined in + . The format of the LOGIN + command is defined in + , and the LOGIN_RSP command is + defined in + . + There must be exactly one Transmit Submission Sub-CRQ for each + Transmit Completion Sub-CRQ, and vice versa. Each is implicitly tied to + the other by virtue of the order each appears in the array of handles in + the LOGIN Buffer and LOGIN Response buffer. (i.e. The first entry in each + are associated, the second entry in each are associated, etc.) + + + LOGIN Request + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + CRQ Type + + + 0 + + + 1 + + + This should be set to 0x80 to indicate a valid CRQ + event. + + + + + VNIC Command + + + 1 + + + 1 + + + This should be set to LOGIN. + + + + + Reserved + + + 2 + + + 6 + + + This field is reserved, and should be set to 0. + + + + + IOBA + + + 8 + + + 4 + + + This field is an I/O bus address referring to a + TCE-mapped buffer containing the LOGIN Buffer as defined in + . + + + + + Length + + + 12 + + + 4 + + + This field is the length of the TCE-mapped LOGIN buffer. + This value should match that as seen in the LOGIN + Buffer. + + + + +
+   + + LOGIN Buffer + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + Total Length + + + 0 + + + 4 + + + This field is the total length of the LOGIN + Buffer. + + + + + Version + + + 4 + + + 4 + + + This field contains the version of LOGIN Buffer layout. + The initial version should be set to 1. + + + + + Number of Transmit Completion Sub-CRQs + + + 8 + + + 4 + + + This field contains the number of Transmit Completion + Sub-CRQs as allocated by the VNIC client. + + + + + Offset to Transmit Completion Sub-CRQ handles + + + 12 + + + 4 + + + Offset from the beginning of the LOGIN buffer to the + start of an array of 8 byte elements containing the array of + Transmit Completion Sub-CRQ handles. + + + + + Number of Receive Completion Sub-CRQs + + + 16 + + + 4 + + + This field contains the number of Receive Completion + Sub-CRQs as allocated by the VNIC client. + + + + + Offset to Receive Completion Sub-CRQ handles + + + 20 + + + 4 + + + Offset from the beginning of the LOGIN Buffer to the + start of an array of 8 byte elements containing the array of + Receive Completion Sub-CRQ handles. + + + + + Login Response buffer IOBA + + + 24 + + + 4 + + + This field contains an I/O buffer address referencing a + TCE-mapped buffer to be used for the system firmware to place + its LOGIN Response buffer containing its variable length array + of Sub-CRQ handles. This can point to the same storage as the + LOGIN Buffer, as necessary. + + + + + Login Response buffer length + + + 28 + + + 4 + + + This field contains the length of the Login Response + buffer described in the Login Response buffer IOBA. The VNIC + client needs to ensure that system firmware will have enough + space to place each Sub-CRQ handle as requested prior to LOGIN + using REQUEST_CAPABILITY commands. + + + + + Transmit Completion Sub-CRQ handle array + + + variable + + + variable + + + This is a variable sized array containing the Sub-CRQ + handles obtained from H_REGISTER_SUB_CRQ for the Transmit + Completion Sub-CRQ handles. + + + + + Receive Completion Sub-CRQ handle array + + + variable + + + variable + + + This is a variable sized array containing the Sub-CRQ + handles obtained from H_REGISTER_SUB_CRQ for the Receive + Completion Sub-CRQ handles. + + + + +
+   + + LOGIN Response Buffer + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + Total Length + + + 0 + + + 4 + + + This field is the total length of the Login Response + Buffer. + + + + + Version + + + 4 + + + 4 + + + This field contains the version of LOGIN Response Buffer + layout. The initial version should be set to 1. + + + + + Number of Transmit Submission Sub-CRQs + + + 8 + + + 4 + + + This field contains the number of Transmit Submission + Sub-CRQs as requested by the VNIC client and allocated by + firmware. + + + + + Offset to Transmit Submission Sub-CRQ handles + + + 12 + + + 4 + + + Offset from the beginning of the LOGIN Response Buffer to + the start of an array of 8 byte elements containing the array + of Transmit Submission Sub-CRQ handles. + + + + + Number of Receive Buffer Add Sub-CRQs + + + 16 + + + 4 + + + This field contains the total number of Receive Buffer + Add Sub-CRQs as requested by the VNIC client and allocated by + the firmware. The first n correspond to the first Receive + Completion Sub-CRQ, the next n to the second, etc., where n is + the Requested number of Receive Buffer Add Sub-CRQs per Receive + Completion Queue requested by the VNIC client. + + + + + Offset to Receive Buffer Add Sub-CRQ handles + + + 20 + + + 4 + + + Offset from the beginning of the LOGIN Response Buffer to + the start of an array of 8 byte elements containing the array + of Receive Buffer Add Sub-CRQ handles. + + + + + Offset to Receive Buffer Add Buffer Size + + + 24 + + + 4 + + + Offset from the beginning of the LOGIN Response Buffer to + the start of an array of 8 byte sizes. There is one size for + each Receive Buffer Add Sub-CRQ, and each size represents the + receive buffer size possible for that specific Receive Buffer + Add Sub-CRQ. + + + + + Number of Supported Transmit Descriptors + + + 28 + + + 4 + + + This field contains the number of supported Transmit + Descriptors, as detailed in + . + + + + + Offset to Supported Transmit Descriptors array + + + 32 + + + 4 + + + Offset from the beginning of the LOGIN Response Buffer to + the start of an array of 1 byte values. There is one value for + each supported Transmit Descriptor format, sorted so the + formats with best performance will be first in the + array. + + + + + Transmit Submission Sub-CRQ handle array + + + variable + + + variable + + + This is a variable sized array containing the Sub-CRQ + handles obtained from H_REGISTER_SUB_CRQ for the Transmit + Submission Sub-CRQ handles. + + + + + Receive Buffer Add Sub-CRQ handle array + + + variable + + + variable + + + This is a variable sized array containing the Sub-CRQ + handles obtained from H_REGISTER_SUB_CRQ for the Receive Buffer + Add Sub-CRQ handles. + + + + + Receive Buffer Add Buffer Size array + + + variable + + + variable + + + This is a variable sized array containing the Receive + Buffer Sizes must use for the respective Receive Buffer Add + Sub-CRQs. + + + + + Supported Transmit Descriptors array + + + variable + + + variable + + + This is a variable sized array containing the + performance-order sorted array of one byte supported Transmit + Descriptor formats. + + + + +
+   + + LOGIN_RSP Command + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + CRQ Type + + + 0 + + + 1 + + + This should be set to 0x80 to indicate a valid CRQ + event. + + + + + VNIC Command + + + 1 + + + 1 + + + This should be set to LOGIN_RSP. + + + + + Reserved + + + 2 + + + 10 + + + This field is reserved, and should be set to 0. + + + + + Return Code + + + 12 + + + 4 + + + This is a return code for the operation as defined in + . + + + + +
+
+
+ Physical Port Parameters + A VNIC client may always use the QUERY_PHYS_PARM command to + retrieve information about the current physical port state such as + current link speed and state. + A VNIC client may always use the QUERY_PHYS_CAPABILITIES command to + retrieve information about the current capabilities of the physical + adapter associated with the VNIC, including allowed speed, duplex, and + ability to modify those values. + If the VNIC client wishes to determine all bits that are supported + by firmware, it may choose to send a QUERY_PHYS_CAPABILITIES command with + no bits turned on. Firmware will respond with all possible bits it + supports. If the VNIC client wishes to determine if a specific bit + combination is supported by firmware, it may turn on those specific bit + combinations. In that case, firmware will validate the combination, and + validate the specific combination. + If the system administrator has configured the VNIC to have + physical port configuration authority, the VNIC client may also use the + SET_PHYS_PARMS command to change those values. + The SET_PHYS_PARMS, QUERY_PHYS_PARMS, and QUERY_PHYS_CAPABILITIES + commands all use a common command format defined in + . + + + Physical Port Parameters Commands + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + CRQ Type + + + 0 + + + 1 + + + This should be set to 0x80 to indicate a valid CRQ + event. + + + + + VNIC Command + + + 1 + + + 1 + + + This field will be either SET_PHYS_PARMS, + QUERY_PHYS_PARMS, QUERY_PHYS_CAPABILITIES, or the respective + response values. + + + + + Flags + + + 2 + + + 1 + + + The following bits are used to either request the + specific capability on a SET_PHYS_PARMS, indicate the + capability to use that capability on a QUERY_PHYS_CAPABILITIES, + or return the current value of the capability on a + QUERY_PHYS_PARMS command. + Bit 0: External loopback mode + Bit 1: Internal loopback mode + Bit 2: Promiscuous mode + Bit 3: Physical Link Active (VNIC can communicate onto + the physical media) + Bit 4: Autonegotiate Duplex + Bit 5: Full duplex mode + Bit 6: Half duplex mode + Bit 7: If set, the VNIC has the ability to change + physical port parameters. + + + + + Flags + + + 3 + + + 1 + + + Bit 0: Adapter Logical Link Active (multiple VNICs on the + same adapter can communicate) + Bit 1-7: Reserved + + + + + Speed + + + 4 + + + 4 + + + The following bits are used to either request the + specific speed on a SET_PHYS_PARMS, indicate the capability to + use that speed on a QUERY_PHYS_CAPABILITIES, or return the + current speed on a QUERY_PHYS_PARMS command. + Bit 0: Autonegotiate speed + Bit 1: 10 megabit speed + Bit 2: 100 megabit speed + Bit 3: 1 gigabit speed + Bit 4: 10 gigabit speed + Bit 5-31: These bits are reserved, and should be set to + 0. + + + + + MTU + + + 8 + + + 4 + + + This field is used to request a MTU for this VNIC client, + and to return the current MTU setting. If this value exceeds + the allowed value in the case where there are multiple VNICs + associated with the same physical adapter, this MTU will be + capped to an allowable value, and a PartialSuccess return code + will be returned on the SET_PHYS_PARMS command. + + + + + Return Code + + + 12 + + + 4 + + + On a response, this is a return code for the operation as + defined in + . + + + + +
+
+
+ Logical Link State + When the VNIC does not have authority to change the physical port + parameters, the LOGICAL_LINK_STATE command and response provide a method + for the VNIC to inform system firmware when it’s ready to receive + packets. The format of the LOGICAL_LINK_STATE and LOGICAL_LINK_STATE_RSP + commands is defined in + . + The current VNIC logical link state will always be returned in the + Link State field on a LOGICAL_LINK_STATE_RSP. + + + LOGICAL_LINK_STATE and LOGICAL_LINK_STATE_RSP + commands + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + CRQ Type + + + 0 + + + 1 + + + This should be set to 0x80 to indicate a valid CRQ + event. + + + + + VNIC Command + + + 1 + + + 1 + + + This field will be either LOGICAL_LINK_STATE or + LOGICAL_LINK_STATE_RSP. + + + + + Link State + + + 2 + + + 1 + + + This field is used to request a logical link state change + by the VNIC client without a corresponding change to the + physical link state. The intended use for this is when a VNIC + client is associated with a NIC VF that doesn’t have + control over the physical port to control when the VNIC client + receives incoming frames. + If this field is a 0, the link should be down, if the + field is a 1, the link should be up. + if this field is 0xFF, no logical link state change will + be done, and the current logical link state will be returned in + the response. + + + + + Reserved + + + 3 + + + 9 + + + This field is reserved, and should be set to 0. + + + + + Return Code + + + 12 + + + 4 + + + This is a return code for the operation as defined in + . + + + + +
+
+
+ TCP, UDP, and IP Offload Support + The QUERY_IP_OFFLOAD command as defined in + allows the VNIC client to + determine what facilities exist in the VNIC system firmware, and its + limitations, if any. + Based on the capabilities and limitations, the CONTROL_IP_OFFLOAD + command as defined in + allows the VNIC client to + enable appropriate offload capabilities. QUERY_IP_OFFLOAD and + CONTROL_IP_OFFLOAD must be done prior to successful LOGIN + exchange. + All offload parameters are off by default. + + + QUERY_IP_OFFLOAD and QUERY_IP_OFFLOAD_RSP + Commands + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + CRQ Type + + + 0 + + + 1 + + + This should be set to 0x80 to indicate a valid CRQ + event. + + + + + VNIC Command + + + 1 + + + 1 + + + This field will be either QUERY_IP_OFFLOAD or + QUERY_IP_OFFLOAD_RSP. + + + + + Reserved + + + 2 + + + 2 + + + This field is reserved, and should be set to 0. + + + + + Length + + + 4 + + + 4 + + + This field contains the length of the QUERY_IP_OFFLOAD + buffer + + + + + IOBA + + + 8 + + + 4 + + + This field is an I/O bus address referring to a + TCE-mapped buffer used by system firmware to return IP offload + information. On reception of a successful QUERY_IP_OFFLOAD_RSP, + the buffer will be filled in with the structure as defined in + . + + + + + Return Code + + + 12 + + + 4 + + + This is a return code for the operation as defined in + . + + + + +
+   + + CONTROL_IP_OFFLOAD and CONTROL_IP_OFFLOAD_RSP + Command + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + CRQ Type + + + 0 + + + 1 + + + This should be set to 0x80 to indicate a valid CRQ + event. + + + + + VNIC Command + + + 1 + + + 1 + + + This field will be CONTROL_IP_OFFLOAD or + CONTROL_IP_OFFLOAD_RSP. + + + + + Reserved + + + 2 + + + 2 + + + This field is reserved, and should be set to 0. + + + + + IOBA + + + 4 + + + 4 + + + This field is an I/O bus address referring to a + TCE-mapped buffer containing the parameters to enable or + disable TCP, UDP, and IP offload. The format of this buffer is + defined in + . + + + + + Length + + + 8 + + + 4 + + + This field contains the length of the CONTROL_IP_OFFLOAD + buffer. + + + + + Return Code + + + 12 + + + 4 + + + This is a return code for the operation as defined in + . + + + + +
+   + + QUERY_IP_OFFLOAD Buffer + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + Total Length + + + 0 + + + 4 + + + This field is the total length of the QUERY_IP_OFFLOAD + Buffer. + + + + + Version + + + 4 + + + 4 + + + This field contains the version of QUERY_IP_OFFLOAD + Buffer layout. The initial version should be 1. + + + + + IPv4 Checksum offload supported + + + 8 + + + 1 + + + This field is 1 if supported + + + + + IPv6 Checksum offload supported + + + 9 + + + 1 + + + This field is 1 if supported. + + + + + TCP over IPv4 checksum offload supported + + + 10 + + + 1 + + + This field is 1 if supported. + + + + + TCP over IPv6 checksum offload supported + + + 11 + + + 1 + + + This field is 1 if supported. + + + + + UDP over IPv4 checksum offload supported + + + 12 + + + 1 + + + This field is 1 if supported. + + + + + UDP over IPv6 checksum offload supported + + + 13 + + + 1 + + + This field is 1 if supported. + + + + + Large send offload over IPv4 supported + + + 14 + + + 1 + + + This field is 1 if supported. + + + + + Large send offload over IPv6 supported + + + 15 + + + 1 + + + This field is 1 if supported. + + + + + Large receive offload over IPv4 supported + + + 16 + + + 1 + + + This field is 1 if supported. + + + + + Large receive offload over IPv4 supported + + + 17 + + + 1 + + + This field is 1 if supported. + + + + + Reserved + + + 18 + + + 14 + + + This field is reserved, and is set to 0. + + + + + Maximum IPv4 header size + + + 32 + + + 2 + + + This field contains the maximum size of the IPv4 header + for offload operations, or 0xFFFF if no limit. + + + + + Maximum IPv6 header size + + + 34 + + + 2 + + + This field contains the maximum size of the IPv6 header + for offload operations, or 0xFFFF if no limit. + + + + + Maximum TCP header size + + + 36 + + + 2 + + + This field contains the maximum size of the TCP header + for offload operations, or 0xFFFF if no limit. + + + + + Maximum UDP header size + + + 38 + + + 2 + + + This field contains the maximum size of the UDP header + for offload operations, or 0xFFFF if no limit. + + + + + Maximum Large send offload size + + + 40 + + + 4 + + + This field contains the maximum size of a pseudo-frame + for large send offload operations, or 0xFFFFFFFF if no + limit. + + + + + Maximum Large receive offload size + + + 44 + + + 4 + + + This field contains the maximum size of a pseudo-frame + for large receive offload operations, or 0xFFFFFFFF if no + limit. + + + + + Reserved + + + 48 + + + 16 + + + This field is reserved, and is set to 0. + + + + + IPv6 Extension Header supported + + + 64 + + + 1 + + + This field contains a 0 if no extension headers are + supported. + This field contains a 1 if extension headers are + supported with limits + This field contains a 0xFF if all IPv6 extension headers + are supported + + + + + TCP Pseudosum required + + + 65 + + + 1 + + + This field is 0 if no pseudosum is required in the + frame. + This field is 1 if a standard pseudosum is required to be + put in the frame. + All other values are reserved. + + + + + Reserved + + + 66 + + + 30 + + + This field is reserved, and is set to 0. + + + + + Number of IPv6 extension headers supported + + + 96 + + + 2 + + + This field must be non zero if the IPv6 Extension Header + supported field is 1. + + + + + Offset to List of supported IPv6 extension headers + + + 98 + + + 4 + + + This field contains an offset from the start of the + QUERY_IP_OFFLOAD buffer to the array of supported extension + header values. + + + + + Reserved + + + 102 + + + 154 + + + This field is reserved, and should be set to 0. + + + + + Array of IPv6 extension header types + + + variable + + + variable + + + This is an array of one byte values that are the + extension header types supported by IPv6 offload. + + + + +
+   + + CONTROL_IP_OFFLOAD Buffer + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + Total Length + + + 0 + + + 4 + + + This field is the total length of the CONTROL_IP_OFFLOAD + Buffer. + + + + + Version + + + 4 + + + 4 + + + This field contains the version of CONTROL_IP_OFFLOAD + Buffer layout. The initial version should be set to 1. + + + + + Enable IPv4 Checksum offload + + + 8 + + + 1 + + + This field is 1 if desired + + + + + Enable IPv6 Checksum offload + + + 9 + + + 1 + + + This field is 1 if desired. + + + + + Enable TCP over IPv4 checksum offload + + + 10 + + + 1 + + + This field is 1 if desired. + + + + + Enable TCP over IPv6 checksum offload + + + 11 + + + 1 + + + This field is 1 if desired. + + + + + Enable UDP over IPv4 checksum offload + + + 12 + + + 1 + + + This field is 1 if desired. + + + + + Enable UDP over IPv6 checksum offload + + + 13 + + + 1 + + + This field is 1 if desired. + + + + + Enable Large send offload over IPv4 + + + 14 + + + 1 + + + This field is 1 if desired. + + + + + Enable Large send offload over IPv6 + + + 15 + + + 1 + + + This field is 1 if desired. + + + + + Enable bad packet reception + + + 16 + + + 1 + + + This field is 1 if desired + + + + + Reserved + + + 17 + + + 111 + + + This field is reserved, and should be set to 0. + + + + +
+
+
+ Dump Support + The dumps collected via the VNIC interface is a smart dump that + depends upon a working device driver. If the portion of system firmware + servicing the physical adapter has run into catastrophic problems, an + entire memory image of the associated firmware will be collected + automatically, and collected in a similar fashion to platform + dumps. + If the VNIC client detects that the VNIC interface is not providing + the services in the manner it expects, it may utilize the dump support to + collect focused debugging data collected and stored in VNIC client + storage that’s been TCE-mapped. + The format of the REQUEST_DUMP command is defined in + , and the format of the + REQUEST_DUMP_RSP command is defined in + . + + + REQUEST_DUMP_SIZE and REQUEST_DUMP_SIZE_RSP + Commands + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + CRQ Type + + + 0 + + + 1 + + + This should be set to 0x80 to indicate a valid CRQ + event. + + + + + VNIC Command + + + 1 + + + 1 + + + This field will be either REQUEST_DUMP_SIZE or + REQUEST_DUMP_SIZE_RSP. + + + + + Reserved + + + 2 + + + 6 + + + This field is reserved, and should be set to 0. + + + + + Length + + + 8 + + + 4 + + + This field is set to the estimated length of the VNIC + dump in the REQUEST_DUMP_RSP if the return code was + Success. + + + + + Return Code + + + 12 + + + 4 + + + This is a return code for the operation as defined in + . + + + + +
+   + + REQUEST_DUMP Command + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + CRQ Type + + + 0 + + + 1 + + + This should be set to 0x80 to indicate a valid CRQ + event. + + + + + VNIC Command + + + 1 + + + 1 + + + This field will be REQUEST_DUMP. + + + + + Reserved + + + 2 + + + 2 + + + This field is reserved, and should be set to 0. + + + + + IOBA + + + 4 + + + 4 + + + This field is an I/O bus address referring to a + TCE-mapped buffer used by system firmware to place the VNIC + dump. + + + + + Length + + + 8 + + + 4 + + + This field contains the length of the VNIC dump + buffer. + + + + + Reserved + + + 12 + + + 4 + + + This field is reserved and should be set to 0. + + + + +
+   + + REQUEST_DUMP_RSP Command + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + CRQ Type + + + 0 + + + 1 + + + This should be set to 0x80 to indicate a valid CRQ + event. + + + + + VNIC Command + + + 1 + + + 1 + + + This field will be REQUEST_DUMP_RSP. + + + + + Reserved + + + 2 + + + 6 + + + This field is reserved, and should be set to 0. + + + + + Dumped Length + + + 8 + + + 4 + + + This field contains the amount of data placed into the + dump buffer. + + + + + Return Code + + + 12 + + + 4 + + + This is a return code for the operation as defined in + . + + + + +
+
+
+ Reliability, Availability, and Service (RAS) Support + The VNIC RAS support allows the tracing of information within + system firmware, and control of consistency checking done by firmware. + Individual components of firmware will be exposed to the VNIC Client, and + each component can independently have their tracing and error checking + levels increased and decreased. Each individual component’s trace + information can be collected independently from others. + Trace entries will be returned to the VNIC client in timebase + order. + The upper 16 bits of the trace ID for the Firmware Trace Data + Format are an AIX RAS tracehook ID, and the lower 16 bits are an AIX RAS + subhookid. + Prior to a successful LOGIN request, all components related to the + VNIC may not be available in the list of components. To get a complete + list of all possible components, the RAS commands should be delayed until + after a successful LOGIN unless a pre-LOGIN problem is being + diagnosed. + The CONTROL_RAS command can be used to resize the individual + components’ trace buffers, but due to the limited memory available + in the system firmware, increasing the sizes of one trace buffer may + require decreasing the size of a different component’s trace + buffer. + The REQUEST_RAS_COMP_NUM and REQUEST_RAS_COMP_NUM_RSP commands are + defined in + , and the REQUEST_RAS_COMPS and + REQUEST_RAS_COMPS_RSP command format is defined in + . The COLLECT_FW_TRACE and + COLLECT_FW_TRACE_RSP commands are defined in + . + + + REQUEST_RAS_COMP_NUM and REQUEST_RAS_COMP_NUM_RSP + Commands + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + CRQ Type + + + 0 + + + 1 + + + This should be set to 0x80 to indicate a valid CRQ + event. + + + + + VNIC Command + + + 1 + + + 1 + + + This field will be REQUEST_RAS_COMP_NUM or + REQUEST_RAS_COMP_NUM_RSP. + + + + + Reserved + + + 2 + + + 2 + + + This field is reserved, and should be set to 0. + + + + + Number of Components + + + 4 + + + 4 + + + This field contains the number of individual firmware + components whose RAS characteristics can be independently + modified. + + + + + Reserved + + + 8 + + + 4 + + + This field is reserved, and should be set to 0. + + + + + Return Code + + + 12 + + + 4 + + + On a response, this field will contain a return code for + the request as defined in + . This field is + reserved for a request. + + + + +
+ . + + REQUEST_RAS_COMPS and REQUEST_RAS_COMPS_RSP + Commands + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + CRQ Type + + + 0 + + + 1 + + + This should be set to 0x80 to indicate a valid CRQ + event. + + + + + VNIC Command + + + 1 + + + 1 + + + This field will be REQUEST_RAS_COMPS or + REQUEST_RAS_COMPS_RSP. + + + + + Reserved + + + 2 + + + 2 + + + This field is reserved, and should be set to 0. + + + + + IOBA + + + 4 + + + 4 + + + This field contains an I/O bus address of a TCE-mapped + buffer containing an array of Firmware Component structures as + defined in + . The VNIC client + should ensure the buffer is large enough to contain the number + of components as returned in a REQUEST_RAS_COMP_NUM_RSP + command. + + + + + Length + + + 8 + + + 4 + + + This field is the length of the buffer referred to by the + IOBA field. It should be some multiple of the size of the + Firmware Component format. + + + + + Return Code + + + 12 + + + 4 + + + This is a return code for the operation as defined in + . + + + + +
+   + + CONTROL_RAS and CONTROL_RAS_RSP Commands + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + CRQ Type + + + 0 + + + 1 + + + This should be set to 0x80 to indicate a valid CRQ + event. + + + + + VNIC Command + + + 1 + + + 1 + + + This field will be CONTROL_RAS or CONTROL_RAS_RSP. + + + + + Correlator + + + 2 + + + 1 + + + This field contains a Correlator for a Firmware Component + as defined in + that this command + should act on. + + + + + Level + + + 3 + + + 1 + + + This value should be a value between 0 and 9, where a + larger number indicates a higher detail of tracing or error + checking. + + + + + Operation + + + 4 + + + 1 + + + This field controls what action the CONTROL_RAS command + performs. + If this value is a 1, use the Level field to modify the + current trace level of the specified component. + If this value is a 2, use the Level field to modify the + current error checking level of the specified component. + If this value is a 3, suspend the tracing for the + specified component that was previously on. + If this value is a 4, resume the tracing for the + specified component that was previously suspended. + If this value is a 5, turn tracing for the specified + component on. + If this value is a 6, turn tracing for the specified + component off. + If this value is a 7, change the size of the specified + trace buffer for the specified component. + All other values are reserved. + + + + + Trace Buffer Size + + + 5 + + + 3 + + + If Operation is a 7, this field contains the requested + size of the specified trace buffer. On a response, will be + filled in with the current size of the trace buffer. + For all other Operation values, this field is + reserved. + + + + + Reserved + + + 8 + + + 4 + + + This field is reserved, and should be set to 0. + + + + + Return Code + + + 12 + + + 4 + + + This is a return code for the operation as defined in + . + + + + +
+   + + COLLECT_FW_TRACE and COLLECT_FW_TRACE_RSP + Commands + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + CRQ Type + + + 0 + + + 1 + + + This should be set to 0x80 to indicate a valid CRQ + event. + + + + + VNIC Command + + + 1 + + + 1 + + + This field will be COLLECT_FW_TRACE or + COLLECT_FW_TRACE_RSP. + + + + + Correlator + + + 2 + + + 1 + + + This field contains a Correlator for a Firmware Component + as defined in + that this command + should act on. + + + + + Reserved + + + 3 + + + 1 + + + This field is reserved, and should be set to 0. + + + + + IOBA + + + 4 + + + 4 + + + This field contains the I/O bus address of a TCE-mapped + buffer of the indicated size that will be used by firmware to + return the trace. + + + + + Buffer Length + + + 8 + + + 4 + + + This field contains the length of the buffer in bytes + used to collect the trace information. On a COLLECT_FW_RSP, + this value will indicate how much trace data is actually placed + in the buffer. The trace data is an array of entries with the + format as defined in + . + + + + + Return Code + + + 12 + + + 4 + + + This is a return code for the operation as defined in + . + + + + +
+   + + Firmware Trace Data Entry Format + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + + + + Trace ID + + + 0 + + + 4 + + + + + Number Valid Trace Data + + + 4 + + + 1 + + + + + Reserved + + + 5 + + + 3 + + + + + PMC Registers + + + 8 + + + 8 + + + + + Timebase + + + 16 + + + 8 + + + + + Trace Data 1 + + + 24 + + + 8 + + + + + Trace Data 2 + + + 32 + + + 8 + + + + + Trace Data 3 + + + 40 + + + 8 + + + + + Trace Data 4 + + + 48 + + + 8 + + + + + Trace Data 5 + + + 56 + + + 8 + + + + +
+   + + Firmware Component Format + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + Component Name + + + 0 + + + 48 + + + This field contains an ASCII string containing a readable + name of the component. + + + + + Trace Buffer Size + + + 48 + + + 4 + + + This field contains the size of the trace buffer. + + + + + Correlator + + + 52 + + + 1 + + + This field contains a value to be used on a + COLLECT_FW_TRACE or CONTROL_RAS command to identify which + component to operate on. + + + + + Trace Level + + + 53 + + + 1 + + + This field shows the current trace level, as defined in + . + A value of 0xFF indicates this component does not support + tracing. + + + + + Parent Correlator + + + 54 + + + 1 + + + This field contains the correlator of the parent + component. If this value is 0xFF, there is no parent. + + + + + Error Checking + + + 55 + + + 1 + + + This field contains the error checking level for this + component. It contains a value from 0-9, where 0 means no extra + error checking, and 9 means the highest level of consistency + checking. + A value of 0xFF indicates this component does not support + changing its level of error checking. + + + + + Trace State + + + 56 + + + 1 + + + If this field is a 0, the component’s tracing is + turned off. If this field is a 1, the component’s tracing + is turned on. + + + + + Reserved + + + 57 + + + 7 + + + This field is reserved, and should be set to 0. + + + + + Description + + + 64 + + + 192 + + + This field contains an ASCII string containing a readable + description of the component. + + + + +
+
+
+ Statistics Support + The REQUEST_STATISTICS command as defined in + is used by the VNIC client to + obtain statistic counters kept by system firmware and the physical + adapter supporting the VNIC. + The REQUEST_STATISTICS_RSP command is defined in + . + In the event a given VNIC does not support the retrieval of certain + of the statistics, the statistic will have a -1 value returned in + it. + The REQUEST_DEBUG_STATS command defined in + is used by the VNIC client to + retrieve an unarchitected block of statistics that is implementation + dependent which may be used to debug firmware problems. This is an + optional command, and the actual data returned may vary from + implementation to implementation. + + + REQUEST_STATISTICS Command + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + CRQ Type + + + 0 + + + 1 + + + This should be set to 0x80 to indicate a valid CRQ + event. + + + + + VNIC Command + + + 1 + + + 1 + + + This field will be REQUEST_STATISTICS. + + + + + Flags + + + 2 + + + 1 + + + Bit 0: If set, retrieve the physical port statistics. If + the VNIC doesn’t have authority to retrieve the physical + port statistics, the command may fail. If this bit is 0, + retrieve the logical port statistics. + Bit 1: If this field is set to 1, clear the statistics. + If this field is set to 0, do not clear any statistics. + Bit 2-7: This fields are reserved, and should be set to + 0. + + + + + Reserved + + + 3 + + + 1 + + + This field is reserved, and should be set to 0. + + + + + IOBA + + + 4 + + + 4 + + + This field is an I/O bus address referring to a + TCE-mapped buffer used by system firmware to place the VNIC + statistics block as defined in + . + + + + + Length + + + 8 + + + 4 + + + This field contains the length of the VNIC statistics + buffer. + + + + + Reserved + + + 12 + + + 4 + + + This field is reserved and should be set to 0. + + + + +
+   + + REQUEST_STATISTICS_RSP Command + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + CRQ Type + + + 0 + + + 1 + + + This should be set to 0x80 to indicate a valid CRQ + event. + + + + + VNIC Command + + + 1 + + + 1 + + + This field will be REQUEST_STATISTICS_RSP. + + + + + Reserved + + + 2 + + + 2 + + + This field is reserved, and should be set to 0. + + + + + Reserved + + + 4 + + + 8 + + + This field is reserved and should be set to 0. + + + + + Return Code + + + 12 + + + 4 + + + This is a return code for the operation as defined in + . + + + + +
+   + + VNIC Statistics Version 1 + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + + + + Version + + + 0 + + + 4 + + + + + Promiscuous + + + 4 + + + 4 + + + + + Received Packets + + + 8 + + + 8 + + + + + Bytes Received + + + 16 + + + 8 + + + + + Packets Sent + + + 24 + + + 8 + + + + + Bytes Sent + + + 32 + + + 8 + + + + + Unicast Packets Sent + + + 40 + + + 8 + + + + + Unicast Packets Received + + + 48 + + + 8 + + + + + Multicast Packets Sent + + + 56 + + + 8 + + + + + Multicast Packets Received + + + 64 + + + 8 + + + + + Broadcast Packets Sent + + + 72 + + + 8 + + + + + Broadcast Packets Received + + + 80 + + + 8 + + + + + Alignment Errors + + + 88 + + + 8 + + + + + FCS Errors + + + 96 + + + 8 + + + + + Single Collision Frames + + + 104 + + + 8 + + + + + Multiple Collision Frames + + + 112 + + + 8 + + + + + SQE Test Errors + + + 120 + + + 8 + + + + + Deferred Transmissions + + + 128 + + + 8 + + + + + Late Collisions + + + 136 + + + 8 + + + + + Excess Collisions + + + 144 + + + 8 + + + + + Internal MAC Transmit Errors + + + 152 + + + 8 + + + + + Carrier Sense + + + 160 + + + 8 + + + + + Too Long Frames + + + 168 + + + 8 + + + + + Internal MAC Receive Errors + + + 176 + + + 8 + + + + + DMA Receive Overrun + + + 184 + + + 8 + + + + + DMA Transmit Underrun + + + 192 + + + 8 + + + + + Receive No Resource + + + 200 + + + 8 + + + + + Too Short Frames + + + 208 + + + 8 + + + + + Reserved + + + 216 + + + 40 + + + + +
+   + + REQUEST_DEBUG_STATS command + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + CRQ Type + + + 0 + + + 1 + + + This should be set to 0x80 to indicate a valid CRQ + event. + + + + + VNIC Command + + + 1 + + + 1 + + + This field will be REQUEST_DEBUG_STATS or + REQUEST_DEBUG_STATS_RSP. + + + + + Reserved + + + 2 + + + 2 + + + This field is reserved, and should be set to 0. + + + + + IOBA + + + 4 + + + 4 + + + This field is an I/O bus address referring to a + TCE-mapped buffer used by system firmware to place the VNIC + debug statistics block. + + + + + Length + + + 8 + + + 4 + + + This field contains the length of the VNIC statistics + buffer. On a REQUEST_DEBUG_STATS_RSP, contains the amount of + data filled in. + + + + + Return Code + + + 12 + + + 4 + + + This is a return code for the operation as defined in + . + + + + +
+
+
+ Error Reporting Support + If system firmware encounters an error processing requests related + to the physical adapter being virtualized by the VNIC interface, it will + generate ERROR_INDICATION commands to the VNIC client, as defined in + . The VNIC client may then, at + its discretion, obtain detailed error information using the + REQUEST_ERROR_INFO command as defined in + . It is the intent that the + VNIC client should log the detailed error information using its normal + error logging infrastructure and methods. + The REQUEST_ERROR_INFO_RSP command as defined in + is used by firmware to indicate + the successful retrieval of error information. The retrieval of detailed + error information allows firmware to reuse the resources for tracking + that error. Detailed error information can only be requested for a + specific error once. + If system firmware encounters an error while the VNIC client is not + connected, firmware will log the detailed error information using + firmware error logging methods. + Firmware will have a finite amount of space reserved for storing + detailed error information. In some situations, some detailed error + information may be unavailable in response to a REQUEST_ERROR_INFO + command if too many errors are being logged in firmware. If the detailed + error information is overwritten prior to the VNIC client performing the + relative REQUEST_ERROR_INFO command, an error return code will be + returned. + If the fatal error bit is set, the VNIC firmware has encountered a + fatal error preventing it from automatically recovering from the error. + The VNIC client should use the RAS facilities to collect any error + information, collect any RAS tracing, statistics, and possibly a dump. + Once all available error data has been collected, it is the VNIC + client’s responsibility to cause the VNIC to restart. This can be + accomplished in one of two ways: by freeing its CRQ using H_FREE_CRQ, or + by initiating a VNIC reset using the H_VIOCTL FW_RESET + subfunction. + + + ERROR_INDICATION Command + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + CRQ Type + + + 0 + + + 1 + + + This should be set to 0x80 to indicate a valid CRQ + event. + + + + + VNIC Command + + + 1 + + + 1 + + + This field will be ERROR_INDICATION. + + + + + Flags + + + 2 + + + 1 + + + Bit 0: If this bit is 1, this is a fatal error. + Bit 1-7: These fields are reserved, and should be set to + 0. + + + + + Reserved + + + 3 + + + 1 + + + This field is reserved, and should be set to 0. + + + + + Error Identification + + + 4 + + + 4 + + + This field is set to the error identification number that + can be used to retrieve detailed information about the error + using the REQUEST_ERROR_INFO command. If this value is set to + 0, there is no more detailed error information to retrieve, and + the ERROR_INDICATION contains all relevant information. + + + + + Detailed Error Size + + + 8 + + + 4 + + + This field contains the size of the detailed error + information associated with the error. + + + + + Error Cause + + + 12 + + + 2 + + + This field contains a value as detailed in + showing the cause of + the error. + + + + + Reserved + + + 14 + + + 2 + + + This field is reserved, and should be set to 0. + + + + +
+   + + REQUEST_ERROR_INFO Command + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + CRQ Type + + + 0 + + + 1 + + + This should be set to 0x80 to indicate a valid CRQ + event. + + + + + VNIC Command + + + 1 + + + 1 + + + This field will be REQUEST_ERROR_INFO. + + + + + Reserved + + + 2 + + + 2 + + + This field is reserved, and should be set to 0. + + + + + Buffer IOBA + + + 4 + + + 4 + + + This field contains the I/O bus address of a TCE-mapped + buffer to be used by system firmware to write the detailed + error information into. + + + + + Buffer Length + + + 8 + + + 4 + + + This field contains the length of the TCE-mapped + buffer. + + + + + Error Identification + + + 12 + + + 4 + + + This field contains the error identification from an + ERROR_INDICATION command that specifies which detailed error + information to obtain. + + + + +
+   + + REQUEST_ERROR_INFO_RSP Command + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + CRQ Type + + + 0 + + + 1 + + + This should be set to 0x80 to indicate a valid CRQ + event. + + + + + VNIC Command + + + 1 + + + 1 + + + This field will be REQUEST_ERROR_INFO_RSP. + + + + + Reserved + + + 2 + + + 2 + + + This field is reserved, and should be set to 0. + + + + + Error Identification + + + 4 + + + 4 + + + This field contains the error identification from an + ERROR_INDICATION command. This field can be used to correlate + this response to s REQUEST_ERROR_INFO command, allowing + multiple requests for errors to be outstanding at the same + time. + + + + + Length + + + 8 + + + 4 + + + This field contains the length of data successfully + returned in the TCE-mapped buffer. + + + + + Return Code + + + 12 + + + 4 + + + This is a return code for the operation as defined in + . + + + + +
+   + + Error Cause + + + + + + + + + Value + + + + + Definition + + + + + + + + Adapter Problem + + + 0 + + + + + Bus Problem + + + 1 + + + + + Firmware Problem + + + 2 + + + + + Device Driver Problem + + + 3 + + + + + EEH Recovery + + + 4 + + + + + Firmware Updated + + + 5 + + + + + Low Memory + + + 6 + + + + + Reserved + + + 7-65535 + + + + +
+
+
+ Link State Change + This LINK_STATE_INDICATION command as defined in + is an unacknowledged command + sent by system firmware to inform the VNIC client when the state of the + link changes. The VNIC client can also use QUERY_PHYS_PARMS at any time + to poll for link state changes. + + + LINK_STATE_INDICATION Command + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + CRQ Type + + + 0 + + + 1 + + + This should be set to 0x80 to indicate a valid CRQ + event. + + + + + VNIC Command + + + 1 + + + 1 + + + This field will be LINK_STATE_INDICATION. + + + + + Reserved + + + 2 + + + 2 + + + This field is reserved, and should be set to 0. + + + + + Physical Link State + + + 4 + + + 1 + + + If this field is a 0, the physical link is down, if the + field is a 1, the physical link is up. + + + + + Logical Link State + + + 5 + + + 1 + + + If this field is a 0, the logical link is down and the + VNIC cannot communicate with other VNICs on the same adapter, + if the field is a 1, the logical link is up, and the VNIC can + communicate with other VNICs on the same adapter. + + + + + Reserved + + + 6 + + + 10 + + + This field is reserved, and should be set to 0. + + + + +
+
+
+ Change MAC Address + The CHANGE_MAC_ADDR command defined in + allows the VNIC client to + change the current MAC address. The request to change may fail due to + Access Control List entries set up by the administrator. + + + CHANGE_MAC_ADDR and CHANGE_MAC_ADDR_RSP Commands + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + CRQ Type + + + 0 + + + 1 + + + This should be set to 0x80 to indicate a valid CRQ + event. + + + + + VNIC Command + + + 1 + + + 1 + + + This field will be CHANGE_MAC_ADDR or + CHANGE_MAC_ADDR_RSP. + + + + + MAC Address + + + 2 + + + 6 + + + This field contains the new requested MAC address on a + CHANGE_MAC_ADDR command, and the current MAC address on a + CHANGE_MAC_ADDR_RSP. + + + + + Reserved + + + 8 + + + 4 + + + This field is reserved, and should be set to 0. + + + + + Return Code + + + 12 + + + 4 + + + This is a return code for the operation as defined in + . + + + + +
+
+
+ Multicast Support + The MULTICAST_CTRL command defined in + allows the VNIC client to + manage the reception of Multicast Ethernet traffic. Individual multicast + MAC addresses may be enabled and disabled, as well as all multicast + traffic. + The VNIC client can choose to enable more than the maximum unique + multicast Ethernet addresses as returned in the Capabilities exchange. In + the event the VNIC client does so, system firmware will either enable the + MAC address via a non-exact hashing multicast reception mechanism if the + hardware supports it, or will enable all multicast addresses. When this + is done, system firmware will report exact matches through the unique + multicast Ethernet filter via the Exact Match bit defined in the Receive + Completion Descriptor as defined in + . If the Exact Match bit is + off, and a multicast packet was returned in the Receive Completion + Descriptor, the multicast packet either matches a non-exact hashing + mechanism if one exists or system firmware has enabled all multicast MAC + address reception. + + + MULTICAST_CTRL and MULTICAST_CTRL_RSP + Commands + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + CRQ Type + + + 0 + + + 1 + + + This should be set to 0x80 to indicate a valid CRQ + event. + + + + + VNIC Command + + + 1 + + + 1 + + + This field will be MULTICAST_CTRL or + MULTICAST_CTRL_RSP. + + + + + MAC Address + + + 2 + + + 6 + + + This field contains the new requested multicast MAC + address, as appropriate for the specific options + requested. + + + + + Flags + + + 8 + + + 1 + + + Bit 0: Enable specified multicast MAC address + Bit 1: Disable specified multicast MAC address + Bit 2: Enable the reception of all multicast MAC + addresses. This does not affect the multicast addresses enabled + through Bit 0. + Bit 3: Disable the reception of all multicast MAC + addresses. This does not affect the multicast addresses enabled + through Bit 0. + Bit 4-7: These bits are reserved, and should be set to + 0. + + + + + Reserved + + + 9 + + + 3 + + + This field is reserved, and should be set to 0. + + + + + Return Code + + + 12 + + + 4 + + + This is a return code for the operation as defined in + . + + + + +
+
+
+ VPD Support + The VPD commands may be used by the VNIC client to collect, store, + and display VPD related to the physical adapter backing the VNIC. As the + exact adapter may change during partition mobility operations, it is + suggested this data not be relied upon operationally, and be used with + the understanding that it may change from request to request. + The VPD commands are defined in + , + , + , and + . + + + GET_VPD_SIZE Command + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + CRQ Type + + + 0 + + + 1 + + + This should be set to 0x80 to indicate a valid CRQ + event. + + + + + VNIC Command + + + 1 + + + 1 + + + This field will be GET_VPD_SIZE. + + + + + Reserved + + + 2 + + + 14 + + + This field is reserved, and should be set to 0. + + + + +
+   + + GET_VPD_SIZE_RSP Command + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + CRQ Type + + + 0 + + + 1 + + + This should be set to 0x80 to indicate a valid CRQ + event. + + + + + VNIC Command + + + 1 + + + 1 + + + This field will be GET_VPD_SIZE_RSP. + + + + + Reserved + + + 2 + + + 2 + + + This field is reserved, and should be set to 0. + + + + + Length + + + 4 + + + 8 + + + This field contains the length of the VPD present. + + + + + Return Code + + + 12 + + + 4 + + + This is a return code for the operation as defined in + . + + + + +
+   + + GET_VPD Command + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + CRQ Type + + + 0 + + + 1 + + + This should be set to 0x80 to indicate a valid CRQ + event. + + + + + VNIC Command + + + 1 + + + 1 + + + This field will be GET_VPD. + + + + + Reserved + + + 2 + + + 2 + + + This field is reserved, and should be set to 0. + + + + + IOBA + + + 4 + + + 4 + + + This field is an I/O bus address referring to a + TCE-mapped buffer used by system firmware to place the VNIC + VPD. + + + + + Length + + + 8 + + + 4 + + + This field contains the length of the VPD buffer. + + + + + Reserved + + + 12 + + + 4 + + + This field is reserved and should be set to 0. + + + + +
+   + + GET_VPD_RSP Command + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + CRQ Type + + + 0 + + + 1 + + + This should be set to 0x80 to indicate a valid CRQ + event. + + + + + VNIC Command + + + 1 + + + 1 + + + This field will be GET_VPD_RSP. + + + + + Reserved + + + 2 + + + 10 + + + This field is reserved, and should be set to 0. + + + + + Return Code + + + 12 + + + 4 + + + This is a return code for the operation as defined in + . + + + + +
+
+
+ Access Control Support + The VNIC may have certain Access Control Lists (ACLs) in effect, + and some of these may change dynamically. The ACL_CHANGE_INDICATION + command defined in + is sent by system firmware to + the VNIC client in the event any of the ACLs have changed + dynamically. + The ACL_QUERY command defined in + and its associated response + defined in + may be used by the VNIC client + to obtain information about the ACLs in effect to enable earlier error + checking or ease of use functions. + + + ACL_CHANGE_INDICATION + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + CRQ Type + + + 0 + + + 1 + + + This should be set to 0x80 to indicate a valid CRQ + event. + + + + + VNIC Command + + + 1 + + + 1 + + + This field will be ACL_CHANGE_INDICATION. + + + + + Change Type + + + 2 + + + 2 + + + If this field is a 0, the MAC address ACLs have + changed. + If this field is a 1, the VLAN id ACLs have + changed. + All other values are reserved. + + + + + Reserved + + + 4 + + + 12 + + + This field is reserved, and should be set to 0. + + + + +
+   + + ACL_QUERY + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + CRQ Type + + + 0 + + + 1 + + + This should be set to 0x80 to indicate a valid CRQ + event. + + + + + VNIC Command + + + 1 + + + 1 + + + This field will be ACL_QUERY. + + + + + Reserved + + + 2 + + + 2 + + + This field is reserved, and should be set to 0. + + + + + IOBA + + + 4 + + + 4 + + + This field is an I/O bus address referring to a + TCE-mapped buffer used by system firmware to place the ACL + information. Upon reception of a ACL_QUERY_RSP with a Success + return code, this buffer will be filled in with the structure + as defined in + + + + + + Size + + + 8 + + + 4 + + + This field contains the size of the buffer mapped by the + IOBA. + + + + + Reserved + + + 12 + + + 4 + + + This field is reserved, and should be set to 0. + + + + +
+   + + ACL_QUERY_RSP + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + CRQ Type + + + 0 + + + 1 + + + This should be set to 0x80 to indicate a valid CRQ + event. + + + + + VNIC Command + + + 1 + + + 1 + + + This field will be ACL_QUERY_RSP. + + + + + Reserved + + + 2 + + + 10 + + + This field is reserved, and should be set to 0. + + + + + Return Code + + + 12 + + + 4 + + + This is a return code for the operation as defined in + . + + + + +
+   + + ACL Buffer + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + Total Length + + + 0 + + + 4 + + + This field is the total length of the ACL Buffer. + + + + + Version + + + 4 + + + 4 + + + This field contains the version of ACL Buffer layout. The + initial version should be set to 1. + + + + + MAC ACLs in effect + + + 8 + + + 1 + + + This field contains a 1 if there are MAC restrictions in + effect, zero otherwise. + + + + + VLAN id ACLs in effect + + + 9 + + + 1 + + + This field contains a 1 if there are VLAN id ACLs in + effect, zero otherwise. + + + + + Reserved + + + 10 + + + 22 + + + This field is reserved, and should be set to 0. + + + + + Number of Allowed MAC addresses + + + 32 + + + 4 + + + This field contains the number of allowable MAC + addresses. + + + + + Offset to array of allowed MAC addresses + + + 36 + + + 4 + + + This field contains an offset from the start of the ACL + Buffer to an array of six byte MAC addresses. + + + + + Number of allowed VLAN ids + + + 40 + + + 4 + + + This field contains the number of allowable VLAN + ids. + + + + + Offset to array of allowed VLAN ids + + + 44 + + + 4 + + + This field contains an offset from the start of the ACL + buffer to an array of 2 byte VLAN ids. + + + + + Reserved + + + 48 + + + 80 + + + This field is reserved, and should be set to 0. + + + + + Array of allowed MAC addresses + + + variable + + + variable + + + This is the array of six byte MAC addresses, with a size + as defined in the Number of Allowed MAC address field. + + + + + Array of allowed VLAN ids + + + variable + + + variable + + + This is the array of two byte VLAN ids, with a size as + defined in the Number of Allowed VLAN ids field. + + + + +
+
+
+ Debugging Support + The TUNE command defined in + may be used by the VNIC client + to opaquely pass tuning data from the VNIC client to system firmware. As + the exact firmware backing a VNIC client may change during partition + mobility operations, it is suggested this data not be relied upon + operationally, and be used with the understanding that it may change from + adapter to adapter. + A TUNE_RSP command defined in + will be generated by system + firmware upon completion of the TUNE command. + This command is an optional VNIC command, and may not be supported + for all VNIC implementations or versions of system firmware. + + + TUNE Command + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + CRQ Type + + + 0 + + + 1 + + + This should be set to 0x80 to indicate a valid CRQ + event. + + + + + VNIC Command + + + 1 + + + 1 + + + This field will be TUNE. + + + + + Reserved + + + 2 + + + 2 + + + This field is reserved, and should be set to 0. + + + + + IOBA + + + 4 + + + 4 + + + This field is an I/O bus address referring to a + TCE-mapped buffer used by system firmware to obtain the tuning + parameters. + + + + + Length + + + 8 + + + 4 + + + This field contains the length of the VPD buffer. + + + + + Reserved + + + 12 + + + 4 + + + This field is reserved and should be set to 0. + + + + +
+   + + TUNE_RSP Command + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + CRQ Type + + + 0 + + + 1 + + + This should be set to 0x80 to indicate a valid CRQ + event. + + + + + VNIC Command + + + 1 + + + 1 + + + This field will be TUNE_RSP. + + + + + Reserved + + + 2 + + + 10 + + + This field is reserved, and should be set to 0. + + + + + Return Code + + + 12 + + + 4 + + + This is a return code for the operation as defined in + . + + + + +
+
+
+
+ Subordinate CRQ Definitions + Frame transmission and reception is handled through the Subordinate + CRQ infrastructure, using the H_SEND_SUB_CRQ and H_SEND_SUB_CRQ_INDIRECT + hypervisor calls. +
+ Frame Transmission + Since each Transmit Completion Sub-CRQ is tied to a specific + Transmit Submission Sub-CRQ, the Transmit Descriptor correlator must only + be unique for a given Transmit Completion Sub-CRQ. + Several versions of Transmit Descriptors exist. Each version has a + Descriptor Version byte at byte offset one in the descriptor, which + specifies the layout of the later thirty bytes. A sorted array is + returned in the LOGIN response specifying all versions of transmit + descriptor supported by the VNIC. The versions of the transmit descriptor + offering the best performance appear in the array first. All VNIC + versions will support Transmit Descriptor Version Zero defined in + , but that version may not + offer the best performance. + Transmit Descriptor Version Two defined in + is designed to be used in + combination with a previous use of Transmit Descriptor Version Zero or + Transmit Descriptor Version One defined in + + + + Transmit Descriptor Version Zero + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + Sub-CRQ Format + + + 0 + + + 1 + + + This value should be set to 0x80 to indicate a valid + Sub-CRQ event. + + + + + Descriptor Version + + + 1 + + + 1 + + + This field is 0 for a Version Zero Transmit + Descriptor + + + + + Flags + + + 2 + + + 1 + + + Bit 0: If set to 1, this frame should use the large send + offload feature of the physical adapter, assuming it was + previously enabled through the use of CONTROL_IP_OFFLOAD + command. + Bit 1: If set to 1, this frame should use the IP checksum + feature of the physical adapter, assuming it was previously + enabled through the use of CONTROL_IP_OFFLOAD command. + Bit 2: If set to 1, this frame should use the TCP + checksum feature of the physical adapter, assuming it was + previously enabled through the use of CONTROL_IP_OFFLOAD + command. + Bit 3: If set to 1, this frame should use the physical + adapter’s capability of inserting VLAN headers, using the + VLAN header field as the source for the values to + insert. + Bit 4:If set to 1, this frame should use the UDP checksum + feature of the physical adapter, assuming it was previously + enabled through the use of CONTROL_IP_OFFLOAD command. + Bit 5: If set to 1, this frame spans multiple transmit + descriptors. + Bit 6: If set to 1, this frame contains the last fragment + of a complete packet for transmission. + Bit 7:If set to 1, this frame requires a transmit + completion event to be posted to the VNIC client’s + Transmit Completion Sub-CRQ. If set to 0, no completion event + will be generated unless an error occurred. + + + + + IP Header offset + + + 3 + + + 1 + + + Bit 0:If set to zero, this frame contains an IPv4 frame. + If set to 1, this frames contains an IPv6 frame. + Bits 1-7: This field should be set to the offset of IP + header in the first descriptor of a chain if any checksum + offload or large send offload is enabled. + If neither checksum offload nor large send offload are + enabled, this should be set to 0. + + + + + TCP/UDP Header offset or IP Data offset + + + 4 + + + 2 + + + In the first descriptor of a chain, if any checksum + offload or large send offload function should be done for this + packet, this field must be set to the offset of the first byte + of data after the IP header and extension headers. + If no checksum offload or large send offload function + should be done for this packet, this field must be set to + 0. + + + + + VLAN Header + + + 6 + + + 2 + + + If VLAN header insertion has been enabled, this field + contains the VLAN header to be inserted if indicated in the + Flags byte. + + + + + Reserved + + + 8 + + + 1 + + + This field is reserved and should be set to 0. + + + + + MSS Size + + + 9 + + + 3 + + + If large send offload is enabled, this field contains the + MSS size. + + + + + Correlator + + + 12 + + + 4 + + + This field is set to a unique opaque value generated by + the VNIC client that allows the device driver to correlate a + transmit submission to an eventual completion. This value must + be set even if the Completion Required bit is set to 0 in the + event an error happens. + + + + + IOBA1 + + + 16 + + + 4 + + + This field contains an I/O bus address valid for the VNIC + device that refers to the first chunk of the transmit frame for + this descriptor. + + + + + Length1 + + + 20 + + + 4 + + + This contains the length of the frame fragment pointed to + by IOBA1. + + + + + IOBA2 + + + 24 + + + 4 + + + This field contains an I/O bus address valid for the VNIC + device that refers to the second fragment of the transmit frame + for this descriptor. If the corresponding length field is 0, + this field is ignored. + + + + + Length2 + + + 28 + + + 4 + + + This contains the length of the frame fragment pointed to + by IOBA2. If IOBA2 is invalid, this field should be set to + 0. + + + + +
+   + + Transmit Completion Descriptor + + + + + + + + + + + Field Name + + + + + Byte offset + + + + + Length + + + + + Definition + + + + + + + + Sub-CRQ Format + + + 0 + + + 1 + + + This value should be set to 0x80 to indicate a valid + Sub-CRQ event. + + + + + Number of Completions + + + 1 + + + 1 + + + This is the number of return code and correlator pairs of + this descriptor that are valid. It must be a value from 1 to + 5. + + + + + Return Codes + + + 2 + + + 10 + + + This is an array of 5 two byte integer return codes as + defined in + . + + + + + Correlators + + + 12 + + + 20 + + + This is an array of five four-byte correlator values as + taken from the Transmit Submission Descriptor. + + + + +
+   + + Transmit Descriptor Version One + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + Sub-CRQ Format + + + 0 + + + 1 + + + This value should be set to 0x80 to indicate a valid + Sub-CRQ event. + + + + + Descriptor Version + + + 1 + + + 1 + + + This field is 1 for a Version One Transmit + Descriptor + + + + + Flags + + + 2 + + + 1 + + + Bit 0: If set to 1, this frame should use the large send + offload feature of the physical adapter, assuming it was + previously enabled through the use of CONTROL_IP_OFFLOAD + command. + Bit 1: If set to 1, this frame should use the IP checksum + feature of the physical adapter, assuming it was previously + enabled through the use of CONTROL_IP_OFFLOAD command. + Bit 2: If set to 1, this frame should use the TCP + checksum feature of the physical adapter, assuming it was + previously enabled through the use of CONTROL_IP_OFFLOAD + command. + Bit 3: If set to 1, this frame should use the physical + adapter’s capability of inserting VLAN headers, using the + VLAN header field as the source for the values to + insert. + Bit 4:If set to 1, this frame should use the UDP checksum + feature of the physical adapter, assuming it was previously + enabled through the use of CONTROL_IP_OFFLOAD command. + Bit 5: If set to 1, this frame spans multiple transmit + descriptors. + Bit 6: If set to 1, this frame contains the last fragment + of a complete packet for transmission. + Bit 7:If set to 1, this frame requires a transmit + completion event to be posted to the VNIC client’s + Transmit Completion Sub-CRQ. If set to 0, no completion event + will be generated unless an error occurred. + + + + + IP Header offset + + + 3 + + + 1 + + + Bit 0:If set to zero, this frame contains an IPv4 frame. + If set to 1, this frames contains an IPv6 frame. + Bits 1-7: This field should be set to the offset of IP + header in the first descriptor of a chain if any checksum + offload or large send offload is enabled. + If neither checksum offload nor large send offload are + enabled, this should be set to 0. + + + + + TCP/UDP Header offset or IP Data offset + + + 4 + + + 2 + + + In the first descriptor of a chain, if any checksum + offload or large send offload function should be done for this + packet, this field must be set to the offset of the first byte + of data after the IP header and extension headers. + If no checksum offload or large send offload function + should be done for this packet, this field must be set to + 0. + + + + + VLAN Header + + + 6 + + + 2 + + + If this frame is a VLAN-tagged frame, this field contains + the VLAN tag even if it is already present in the frame, and + even if VLAN offload is disabled. If already present in the + frame, this merely provides a hint to enable fast transmission + of this frame. If the VLAN header is not present in the frame, + this field contains the VLAN header to be inserted if indicated + in the Flags byte. + + + + + Reserved + + + 8 + + + 1 + + + This field is reserved and should be set to 0. + + + + + MSS Size + + + 9 + + + 3 + + + If large send offload is enabled, this field contains the + MSS size. + + + + + Correlator + + + 12 + + + 4 + + + This field is set to a unique opaque value generated by + the VNIC client that allows the device driver to correlate a + transmit submission to an eventual completion. This value must + be set even if the Completion Required bit is set to 0 in the + event an error happens. + + + + + IOBA1 + + + 16 + + + 4 + + + This field contains an I/O bus address valid for the VNIC + device that refers to the first chunk of the transmit frame for + this descriptor. + + + + + Length1 + + + 20 + + + 4 + + + This contains the length of the frame fragment pointed to + by IOBA1. + + + + + Destination MAC address + + + 24 + + + 6 + + + This field contains the destination MAC address as + specified in the frame to be sent. The frame still must contain + this information; this merely provides a hint to enable fast + transmission of this frame. + + + + + Ethertype + + + 30 + + + 2 + + + This field contains a copy of the ethertype from the + specified frame to be sent. The frame still must contain this + information; this merely provides a hint to enable fast + transmission of this frame. + + + + +
+   + + Transmit Descriptor Version Two + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + Sub-CRQ Format + + + 0 + + + 1 + + + This value should be set to 0x80 to indicate a valid + Sub-CRQ event. + + + + + Descriptor Version + + + 1 + + + 1 + + + This field is 2 for a Version Two Transmit Descriptor. + This transmit descriptor should be used following another valid + Transmit Descriptor Format such as Version Zero or Version One. + It inherits any advanced features from the previous Transmit + Descriptor. + + + + + Flags + + + 2 + + + 1 + + + Bit 0-5: These bits are reserved, and should be set to + 0. + Bit 6: If set to 1, this frame contains the last fragment + of a complete packet for transmission. + Bit 7:If set to 1, this frame requires a transmit + completion event to be posted to the VNIC client’s + Transmit Completion Sub-CRQ. If set to 0, no completion event + will be generated unless an error occurred. + + + + + Reserved + + + 3 + + + 1 + + + This field is reserved, and should be set to 0. + + + + + IOBA1 + + + 4 + + + 4 + + + This field contains an I/O bus address valid for the VNIC + device that refers to the first chunk of the transmit frame for + this descriptor. + + + + + Length1 + + + 8 + + + 4 + + + This field contains the length of the frame fragment + pointed to by IOBA1. + + + + + Correlator + + + 12 + + + 4 + + + This field is set to a unique opaque value generated by + the VNIC client that allows the device driver to correlate a + transmit submission to an eventual completion. This value must + be set even if the Completion Required bit is set to 0 in the + event an error happens. + + + + + IOBA2 + + + 16 + + + 4 + + + This field contains an I/O bus address valid for the VNIC + device that refers to the second chunk of the transmit frame + for this descriptor. + + + + + Length2 + + + 20 + + + 4 + + + This contains the length of the frame fragment pointed to + by IOBA2. + + + + + IOBA3 + + + 24 + + + 4 + + + This field contains an I/O bus address valid for the VNIC + device that refers to the third chunk of the transmit frame for + this descriptor. + + + + + Length3 + + + 28 + + + 4 + + + This contains the length of the frame fragment pointed to + by IOBA3. + + + + +
+
+
+ Frame Reception + Multiple Receive Buffer Add Sub-CRQs can be configured to allow the + VNIC client to efficiently allocate receive buffers of different sizes. + In the event multiple Sub-CRQs are allocated for this purpose, it is the + VNIC client’s responsibility to always allocate the receive buffer + size for the Receive Buffer Add Sub-CRQs that are returned by system + firmware as defined in + . + System firmware will configure the correct buffer sizes based on + the current VNIC maximum transmission unit, current number of Receive + Buffer Add Sub-CRQs, and physical adapter capabilities. In all cases, all + receive buffers given to an individual Receive Buffer Add Sub-CRQ must be + of the same size. + Since a Receive Buffer Correlator may appear on only a single + Receive Completion Sub-CRQ, the Receive Buffer Correlators must be unique + for a given Receive Completion Sub-CRQ. + Since every buffer added to all Receive Buffer Add Sub-CRQs + associated with a given Receive Completion Sub-CRQ could be received + simultaneously, each Receive Completion Sub-CRQ should be sized to handle + every possible buffer given to system firmware on its associated Receive + Buffer Add Sub-CRQs. + Some implementations of VNIC devices may have alignment + requirements. To ensure efficient use of receive buffers, VNIC clients + are encouraged to use at least cache-line aligned receive buffers. + . + + Receive Completion Descriptor + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + Sub-CRQ Format + + + 0 + + + 1 + + + This should be set to 0x80 to indicate a valid Sub-CRQ + event. + + + + + Flags + + + 1 + + + 1 + + + Bit 0: If this bit is a 1, it indicates system firmware + has validated the IP checksum field in the referenced packet + was verified to be good. + Bit 1: If this bit is a 1, it indicates system firmware + has validated the TCP/UDP checksum field in the referenced + packet was verified to be good. + Bit 2: If this bit is a 1, it indicates this frame + contains the end of a packet. + Bit 3: If this bit is a 1, this packet is an exact match + for one of the requested multicast MAC addresses for this + VNIC. + Bit 4: If this bit is a 1, the TCP/UDP checksum field + contains either the complete TCP/UDP checksum or a partial + TCP/UDP checksum in the case of an IP fragment packet. + Bit 5-7: These bits are reserved, and will be set to + 0. + + + + + Offset to start of frame data + + + 2 + + + 2 + + + This field contains an offset to the start of actual + frame data in the returned frame. + + + + + Length + + + 4 + + + 4 + + + This field contains the length of valid data in this + descriptor. + + + + + Correlator + + + 8 + + + 8 + + + This field is the correlator taken from the Receive + Buffer Add descriptor that allows the VNIC client to associate + this completion with a previously added receive buffer. + + + + + TCP/UDP Checksum + + + 16 + + + 2 + + + If the TCP/UDP checksum bit is a 1, this field contains + either the complete packet’s TCP/UDP checksum or a + partial TCP/UDP checksum in the event the packet is an IP + fragment. + + + + + Reserved + + + 18 + + + 14 + + + These fields are reserved, and will be set to 0. + + + + +
+   + + Receive Buffer Add Descriptor + + + + + + + + + + + Field Name + + + + + Byte Offset + + + + + Length + + + + + Definition + + + + + + + + Sub-CRQ Format + + + 0 + + + 1 + + + This should be set to 0x80 to indicate a valid Sub-CRQ + event. + + + + + Reserved + + + 1 + + + 7 + + + This bytes are reserved, and should be set to 0. + + + + + Correlator + + + 8 + + + 8 + + + This field is an opaque value that is returned to the + VNIC client when the buffer described by this descriptor is + used to receive a frame from the network. + + + + + IOBA + + + 16 + + + 4 + + + This field contains the I/O bus address for the + TCE-mapped memory buffer to be used for frame reception. + + + + + Length + + + 20 + + + 4 + + + This field contains the length of the memory buffer + described by this descriptor. + + + + + Reserved + + + 24 + + + 8 + + + These bytes are reserved, and should be set to 0. + + + + +
+ +
+
+
diff --git a/Virtualization/ch_virtual_scsi.xml b/Virtualization/ch_virtual_scsi.xml new file mode 100644 index 0000000..e43fc7b --- /dev/null +++ b/Virtualization/ch_virtual_scsi.xml @@ -0,0 +1,1198 @@ + + A Protocol for VSCSI Communications + +
+ Introduction + The purpose of this chapter is to define the protocol used by + virtual SCSI (vscsi) client drivers and vscsi server drivers in sufficient + detail to ensure compatibility between unlike operating systems + implementing these features. The SCSI Architecture Model (SAM-2) defines + the following simplified abstract model and terminology for a SCSI + system. + +
+ SCSI Initiator/Target Architecture + + + + + + + + +
+ In , the Application Client is the + application producing or consuming the data being stored. The SCSI + Initiator Port is the virtual scsi client adapter running in the client + partition. The Service Delivery System is the Hypervisor. The SCSI Target + Port is the vscsi host (vhost) adapter running in the VIO server (VIOS). + The Logical Unit is the entity providing the data storage + services. + Note that the model is not symmetrical. Client adapters may + communicate only with host adapters and host adapters may communicate + only with client adapters. Each may communicate with a maximum of one + partner at any point in time. Client adapters may exist only in client + partitions. Host adapters may exist only in VIOSs. A client partition may + have multiple client adapters and they may communicate with host adapters + in the same or different VIOSs. A SCSI host adapter may have multiple + Logical Units defined to it for use. Almost all messages are initiated by + the client. The client and host adapters communicate using + Command/Response Queues (CRQ) defined earlier in this document. A client + may not read or write VIOS memory, it may only write to the VIOS CRQ. The + VIOS may read and write to client partition memory, if the client passes + the VIOS a DMA mapped address for that memory. +
+
+ SCSI Remote DMA Protocol (SRP) + The protocol used for transferring data between the application + client and the logical unit is the SCSI Remote DMA Protocol (SRP), revision + 16.a, as defined by the InterNational Committee for Information Technology + Standards (INCITS). Copies of the standard are available at the INCITS + website at T10.org. + The client builds an SRP request in its address space, then DMA maps + that request so that the VIOS can access it. The client notifies the VIOS + of the request by including that mapped address in a CRQ message. A SCSI + Command Data Block (CDB) is encapsulated within the SRP request. Also + within the SRP request is a tag field, which is private to the client. The + VIOS must not modify that tag value in any way. When the request is + complete, the VIOS notifies the client of the completion by including that + tag field in the CRQ message to the client. The client then uses that tag + value to locate the request being completed. + If the SRP request expects to transfer any data, it also contains one + of the two types of memory descriptors specified by the SRP standard, to + describe the buffer(s) to be used in the data transfer. In the SRP memory + descriptor, the virtual address field is the DMA mapped address of the + buffer, to be used by the VIOS to transfer the data. The memory handle + field is not used and should be initialized to zero. + Using the H_SEND_CRQ call, the client sends the SRP request to the + VIOS. The first 64 bits of the message describe the type of message, the + format, and the length. The second 64 bits of the CRQ message contain the + DMA mapped address of the SRP request in the client partition memory. The + H_SEND_CRQ call in the client generates a virtual interrupt in the VIOS, if + the CRQ is going from empty to non-empty (edge-triggered interrupt). + The vhost driver uses the H_COPY_RDMA call and the mapped address to + copy the SRP request from client partition memory into VIOS memory, + examines the LUN to which the request is addressed, builds the appropriate + structure to represent the request, according to the type of backing + device, then queues the request to the backing device. The backing device + may be an actual physical storage device, a software emulator, or some + combination of device and emulation. + In the request is an SRP memory descriptor which contains one or more + address/length pairs describing one or more buffers in client partition + memory address space. The memory handle field of the SRP memory descriptor + is not used by vscsi and should be initialized to zero. The virtual address + field in the SRP memory descriptor is the DMA mapped address of a buffer in + client partition memory that the backing device uses to transfer data. When + the backing device services the request, it uses the same DMA services as + it would to handle a request that had originated locally on the VIOS. + However, DMA services on the VIOS use the H_COPY_RDMA call and the mapped + address(es) in the SRP memory descriptor(s) to copy data directly between + the client partition and the device, transparent to the device. + When the backing device has completed the request, it returns the + request along with the results back to the VIOS driver. The VIOS driver + builds an SRP response structure and copies that response back into client + partition memory over the original SRP request. The SRP response includes + any sense data that may have been returned with the request. All virtual + devices are “auto-sense” devices. The vhost driver then + notifies the client partition of the completed request by using H_SEND_CRQ + to place a message in the client CRQ. The first 64 bits of the message + describe the type, format, and length of the message. The second 64 bits + are the “tag” field from the original SRP request. The client + uses the tag to locate the SRP response and processes the response as + appropriate. + It is important to note that the client partition must not unmap or + modify in any way any of the memory associated with the request between the + time that it notifies the VIOS of the request and the time that the VIOS + notifies the client of the response. +
+
+ Connection Establishment + Before any data can be transferred the two partitions have to + establish a connection. Each partition is required to use H_REG_CRQ to + register a Command/Response Queue (CRQ) with the Hypervisor to receive + messages from the other partition. The size of the queue must be a multiple + of 4KB. That memory must be DMA mapped. The size of the CRQ merely + determines the number of requests that a client may send to the VIOS in a + single burst. The VIOS dequeues the requests as soon as it can, so in + evenly balanced systems, where the VIOS has enough CPUs and memory to deal + with all of its clients, the size of the CRQ is not a major limiting + factor. + After H_REG_CRQ returns H_SUCCESS, each partition uses H_SEND_CRQ to + attempt to send the Initialization message described previously in this + document. This is a race condition that only one partition will win. The + first partition to send the Initialization message receives an H_CLOSED + return value from the Hypervisor, because the other partition has not yet + registered its queue. The winning partition must wait to receive the + Initialization message from its partner. The second partition to send the + Initialization message receives an H_SUCCESS return value from the + Hypervisor. That partition must wait for the Initialization Complete + message from its partner. When a partition receives an Initialization + message during connection establishment, it must respond with the + Initialization Complete message and may then proceed to the next step. When + a partition receives the Initialization Complete message during connection + establishment, it may then proceed to the next step. + The next step in connection establishment is for the client to send + one or more of the Management Datagrams (MAD) messages, described in detail + later in this chapter. Since this is before the completion of the SRP + Login request, no flow control has been established between the client and + VIOS, so the client may send only one message at a time and must wait for + the response from the VIOS before sending the next one. The exception is + the optional MAD_EMPY_IU message. The client may follow that immediately + with another message. The VIOS enforces flow control violations by logging + and informative error, then closing and reopening the CRQ. + The client is required to send the MAD_ADAPTER_INFO_REQUEST. This + provides the information that the VIOS displays with the lsmap command. The + client may find it useful to save off and display the information that the + VIOS returns in the response to the MAD_ADAPTER_INFO_REQUEST. Customers and + service personnel frequently find this kind of information useful in + unravelling some of the more elaborate configurations. + The client is required to send the MAD_CAPABILITIES_EXCHANGE if it + wishes to participate in Partition Mobility operations. If it does not send + this message, the VIOS does not consider it to be capable of being + migrated. + If the client wishes to take advantage of the “fast fail” + feature, it should send the MAD_ENABLE_FAST_FAIL message before the SRP + login request. + The last step in connection establishment is the SRP login request. + The Target Port Identifier field of the SRP Login request is not used by + vscsi and should be initialized to zero. The client uses the SRP login + request to specify the size of the largest SRP Information Unit that it + will send to the VIOS and the format of the type of memory descriptors it + intends to use. The size of the largest SRP Information Unit must also + account for the size of the largest Management Datagram that the client + expects to send. The VIOS may reject the SRP login if it cannot support the + requested options. The VIOS will delay sending the response to the SRP + login if it does not have any LUNs defined to it yet. This may be the case + if both partitions are booted simultaneously and the VIOS has not completed + the configuration process when the client sends the SRP login. + If the VIOS accepts the SRP login, it sends the SRP login response + and notifies the client of this by placing the tag value from the SRP Login + in the CRQ message. The request limit delta field of the SRP login response + contains the maximum number of requests that the VIOS will allow the client + to have active on the VIOS at any one time. This is the flow control + mechanism. If the client violates this limit by sending too many requests, + the VIOS will terminate the connection to the client. Note that each SRP + response message also contains a request limit delta field. Typically, this + is set to 1, to indicate that this completed request means another can be + initiated. But if the VIOS has substantial resources added to it, it may + increase the number of requests a client may have active, and will do so by + setting a value greater than one in this field. Once the SRP login has been + accepted, the VIOS may increase the number of requests, but it may never + decrease that number until this connection is terminated. + After receiving an SRP Login Response for the VIOS, the client may + then proceed with normal I/O data traffic. Usually, this starts with device + discovery, where the client sends a REPORT_LUNS SCSI request to the VIOS. + The VIOS responds with the list of LUNs that have been defined to this host + adapter. The client may then use other SCSI requests to determine the + identity and capabilities of each LUN. + If, after establishing a connection (VIOS sends SRP login response, + and client receives it), a partition receives another Initialization + message, Initialization Complete message, an SRP Login, or SRP Login + response without some indication that the connection has been terminated, + usually a Transport Event (described later), that is a protocol violation. + Protocol violations are handled by logging an error, then closing and + reopening the CRQ. + Likewise, after a connection has been terminated, the first messages + must be either the Initialization or the Initialization Complete messages, + as appropriate. Any other message is a protocol violation. And any SRP + message received before a successful SRP Login is a protocol + violation. +
+
+ Connection Termination + A connection may be terminated by the client sending the VIOS an + SRP_I_LOGOUT Information Unit. The VIOS may send the client an SRP_T_LOGOUT + Information Unit, but only if the client has provided resources for this by + sending the MAD EMPTY IU first. In the current implementation, neither is + used and the drivers just call H_FREE_CRQ to terminate the + connection. + A connection may also be terminated by the abnormal termination of a + partition. When a partition crashes, the Hypervisor invalidates all of the + memory mappings for that partition and places a Transport Event in the CRQ + of the partner. If the partition that crashed was a client with requests + active on the VIOS, when the storage drivers attempt to service those + “in flight” requests, they find that the DMA mappings + associated with the requests are no longer valid and usually will log one + or more errors to that effect. + When a partition calls H_FREE_CRQ or crashes, the Hypervisor notifies + the partner partition by placing a Transport Event in the partner’s + CRQ. The first byte of the Transport Event is set to 0xFF, to indicate that + this is a Transport Event. The second byte describes the event. A value of + 0x01 indicates that the partner partition failed (crashed). A value of 0x02 + indicates that the partner partition called H_FREE_CRQ. A value of 0x06 + indicates to a client that it has been migrated. Only clients that send the + MAD_CAPABILITIES message are candidates for being migrated. A VIOS cannot + be migrated. + When a partition receives a Transport Event, it is not required to + close its CRQ. It may instead just wait for an Initialization message from + the partner partition when it is ready to communicate again. +
+
+ Client Migration + When a client receives the migrated Transport Event, it must unmap + any memory associated with any requests currently active on the VIOS. The + client will never receive any completions for those requests and must remap + and restart them at the end of the migration. Then the client must call + H_ENABLE_CRQ until it returns H_SUCCESS. When the CRQ has been successfully + enabled, the client sends the Initialization message and waits for the + Initialization Complete message. It then goes through the rest of the + connection establishment process, followed by the SRP login. After the VIOS + sends the SRP Login response, the client may resume normal data transfers, + starting with any requests that may have been active on the VIOS when the + client was migrated. + Note that the partition identification information that the client + sends in the MAD_ADAPTER_INFO message immediately after the migration event + may be stale and reflect the identification of the original client + partition before the migration. A client may register for DLPAR + notification of migration, use that notification to obtain the current + partition identification, and send another MAD_ADAPTER_INFO message to the + VIOS with the correct information. +
+
+ VSCSI Message Formats + All virtual scsi communications between client and server occurs + using the Reliable Command/Response Transport and Logical Remote DMA + functions defined earlier in this document. No other channels of + communication are required to perform virtual SCSI functions. + These communications are made up of three classes of messages: + + + + Messages contained entirely within a single CRQ message + + + + SRP requests and responses, as defined by the SRP standard + + + + Management Datagrams + + +
+
+ CRQ Message formats + CRQ messages are 16 bytes (128 bits) in length. Only the first byte + is architected by the Reliable Command/Response Transport specification + described earlier in this document. That specification is repeated in + . + + + First Byte of the CRQ Message + + + + + + + + Value + + + Description + + + + + + + 0x00 + + + Element is unused -- all other bytes in the element are + undefined + + + + + 0x01 - 0x7F + + + Reserved + + + + + 0x80 + + + Valid Command/Response Entry -- the second byte defines the + entry format + + + + + 0x81-0xFE + + + Reserved + + + + + 0xFF + + + Valid Transport Event -- the second byte defines the + specific transport event + + + + +
+ If the first byte of a CRQ message is 0x80, then it is a valid + Command/Response entry and the second byte describes the format of message. + Possible values for the second byte of the CRQ message when the first byte + is 0x80 are shown in + . + + + Second Byte of the CRQ Message + + + + + + + + Format Byte Value + + + Definition + + + + + + + 0x00 + + + Unused + + + + + 0x01 + + + VSCSI SRP format + + + + + 0x02 + + + Management Datagram (MAD) format + + + + + 0x03 + + + i5os private format + + + + + 0x04 + + + AIX private format + + + + + 0x05 + + + Linux private format + + + + + 0x06 + + + Message in CRQ format + + + + + 0x07 - 0xFF + + + Reserved + + + + +
+ If the format byte is 0x01, then the rest of the message is a vscsi + SRP request or response message. The rest of the CRQ contents for this type + of message is shown in + , for messages from the clients, + and + , for messages from the VIOS. + Messages with a format byte of 0x02 are Management Datagram messages, + defined later in this chapter. Messages formats of 0x03, 0x04, and 0x05 + are reserved for private, Operating System-specific messages, and are + currently unused by this implementation. Messages with a format byte of + 0x06 are messages contained entirely within the CRQ. +
+
+ CRQ VSCSI Client Message Format + Client messages are sent from the client partitions to the VIOS. + shows the format of these + messages, + + + CRQ VSCSI Client Message + + + + + + + + + + + + + + + Byte Offset + + + 0 + + + 1 + + + 2 + + + 3 + + + 4 + + + 5 + + + 6 + + + 7 + + + + + + + 0x00 + + + CRQ Valid + + + CRQ Format + + + Reserved + + + Timeout + + + IU Length + + + + + 0x08 + + + IU Data Pointer (TCE) + + + + +
+ For this type of message, the first byte (CRQ Valid) must be 0x80, + and the second byte (CRQ Format) must be 0x01. Bytes 6 and 7 of the first + long word are the IU Length, the length in bytes of the SRP Information + Unit being passed. The second long word, IU Data Pointer, is the DMA mapped + address of the SRP Information Unit being passed, typically an SRP Request. + The VIOS uses the IU length and IU Data Pointer to copy the SRP Request + into VIOS local memory for interpretation and processing. + Bytes 4 and 5 of the first long word, Timeout, are an optional + suggested timeout value for this request. If this value is greater than + zero, then the value may be passed along to the backing device as a + suggestion for how long this request is expected to take to complete. The + VIOS does not enforce any timeout values, but relies upon the underlaying + backing devices. + Management Datagram (MAD) messages also use this same format, with + the exception that the second byte (CRQ Format) must be set to 0x02. Bytes + 6 and 7 of the first long word are the length of the MAD message, and the + second long word, IU Data Pointer, is the DMA mapped address of the MAD + message being passed. MAD data structures are defined later in this + chapter. For MAD messages, the timeout value is not used. +
+
+ CRQ VSCSI VIOS Message Format + VIOS messages are sent from the VIOS to the clients, usually in + response to a request from the client. The VIOS message format is shown + . + + + CRQ VSCSI VIOS Message + + + + + + + + + + + + + + + Byte Offset + + + 0 + + + 1 + + + 2 + + + 3 + + + 4 + + + 5 + + + 6 + + + 7 + + + + + + + 0x00 + + + CRQ Valid + + + CRQ Format + + + Reserved + + + Status + + + Reserved + + + IU Length + + + + + 0x08 + + + IU TAG + + + + +
+ For this type of message, the first byte, CRQ Valid, must be 0x80. + This same type of message is used for SRP Responses and for responses to + MAD messages. If this is an SRP Response, the second byte, CRQ Format, is + 0x01. If this is the response to a MAD message, the second byte is 0x02. + Bytes 6 and 7 of the first long word, IU Length, contain the length of the + response. The second long word contains the tag field from the original + request. Both the SRP Request data structures and the MAD message data + structures contain a tag field for use in this message. + The Status field of the VIOS message is for reporting special, + non-SCSI status back to the client. This status is used for improving + failover times in configurations where the same storage device is visible + to this client over multiple adapters or when the same storage device is + being shared by multiple clients in clustered configurations. + If the client enables the “fast fail” feature using the + MAD_ENABLE_FAST_FAIL message, and if the VIOS determines that all paths to + a device on that client adapter have failed, the VIOS will report a status + of ADAPTER_FAILED (0x10) in response to a request to that device. + If the storage devices that the client are using are being shared by + other clients, as is the case of an IBM General Parallel File System + (GPFS™) configuration, and if the VIOS determines that all error + recovery efforts on a device have failed so that there is no point in any + more retries from the client, the VIOS will report a status of DEVICE_BUSY + (0x08) in response to a request to that device. + In both cases (ADAPTER_FAILED and DEVICE_BUSY), the client response + should be the same. The device is no longer accessible and the client + should abandon any error recovery or attempts to recover access to the + device using this client adapter. The client should attempt to failover to + another path to the device, using another adapter, if that is + possible. +
+
+ Transport Events + If the first byte (CRQ Valid) of the CRQ message is 0xFF, then this + message is a Transport Event from the Hypervisor and the connection to the + partner has been terminated. The second byte will be the reason for the + Transport Event, and may be one of the following values: + 0x01 - Partner Failed. The partner partition has crashed. + 0x02 - Partner de-registered the CRQ. The partner partition called + H_FREE_CRQ for this CRQ. This may be as a result of error recovery, as in + the case of a protocol error, or it may be the result of the system + administrator removing a client or VIOS adapter. + 0x06 - Client has been migrated as the result of a Partition Mobility + operation. Only clients can be migrated and only clients that send the + MAD_CAPABILITIES message are considered to be candidates for + migration. +
+
+ Messages in CRQs + If the first byte (CRQ Valid) of the CRQ message is 0x80, and the + second byte (CRQ Format) is 0x06, then this is a message contained entirely + within the CRQ. The rest of the message, including the IU Data Pointer, is + unused and must be initialized to zero. These messages do not require any + resources on the client or VIOS, and are not subject to flow control, so + may be sent at any time. However, they should be used sparingly, because + they do take up an entry in the CRQ and they do require interrupt + processing time to respond to them, The third byte defines the + message. + Only two messages of this type have been defined to this + point: + 0xF5 - PING + 0xF6 - PING RESPONSE + If the VIOS is not able to process interrupts, the client will likely + be hung, waiting on a completion from the VIOS. To detect this condition, + the client may send a PING to the VIOS. If the VIOS is capable of + processing an interrupt, it responds to the PING with a PING RESPONSE, + directly at interrupt level. If the client does not receive the PING + RESPONSE within a reasonably short period of time, it may choose to declare + the VIOS dead and attempt to failover to another client adapter. Likewise, + if the VIOS for some reason needs to determine if the client is still + alive, it may send a PING to the client. The client should respond as + expeditiously as possible, with a PING RESPONSE. +
+
+ VSCSI Management Datagrams (MADs) + VSCSI uses a number of messages that are not defined by the SRP + standard. The paradigm used for these messages is the Management Datagram, + discussed in the SRP and Fibre Channel specifications. Like all SRP + messages, the MADs are initiated by the client partition and the VIOS + responds to them. To initiate a MAD, the client sets the valid field to + 0x80, sets the format field to 0x02 (MAD_FORMAT), sets the length field to + the length of the data structure describing the MAD, sets the ioba field to + the mapped memory address of the data structure describing the MAD, and + uses the H_SEND_CRQ service provided by the Hypervisor to send the request + to the VIOS. + Most of these MADs can be initiated any time after the initialization + messages (INIT, INIT_COMPLETE) have been exchanged. Some of them are most + appropriately done before the SRP_login message and the start of normal + data transfer operations. These are: MAD_EMPTY_IU; + MAD_ADAPTER_INFO_REQUEST; MAD_CAPABILITIES_EXCHANGE; and + MAD_ENABLE_FAST_FAIL. Note that before the SRP_login message, resources + allocated by the VIOS for a client are limited so a client should wait for + one MAD to complete before issuing another, with the single exception of + the MAD_EMPTY_IU message. None of them are required for normal data + transfer operations between the client and VIOS. However, the + MAD_ADAPTER_INFO_REQUEST provides information that customers find highly + desirable, so using it is strongly recommended. In addition, the + MAD_ADAPTER_INFO_REQUEST returns the size of the largest data transfer + operation that the VIOS will accept from this client. Failure to honor this + limit can result in client failure. And the MAD_CAPABILITIES_EXCHANGE + message is required before a client is allowed to participate in partition + mobility operation. + The inter_op structure is used to specify the type of MAD being + sent. + + + + The type field describes the MAD and will be discussed in the + paragraphs that follow. + The status field describes the result of the MAD operation. The + client is required to initialize the status field to zero. The VIOS + responds one of three ways: + + + + MAD_NOT_SUPPORTED is returned if the VIOS is down-level. MAD_FAILED + is returned in every other situation where the MAD did not succeed. + The length field is set to the length of the data structure(s) used + in the command. + The tag field is reflected back to the client in the response to the + MAD. The VIOS uses H_SEND_CRQ to send a response with the format set to + 0x02 (MAD_FORMAT) and the ioba field is set to the tag field specified by + the client. + The type field may be set to one of the following: + + + + +
+ #define MAD_EMPTY_IU 0x01 + The client sends a MAD_EMPTY_IU command if it wishes to receive an + SRP target_logout before the VIOS closes the CRQ. The target_logout SRP + response contains the reason that the VIOS is closing the CRQ. + The MAD_EMPTY_IU command uses the following data structure: + + + + The inter_op structure is initialized with the type field set to + 0x01 (MAD_EMPTY_IU), the status field set to zero, the length field set + to the size of the mad_empty_iu structure, and the tag field set as + described above. + The desp field is set to mapped memory address of the SRP_T_LOGOUT + response data structure. The client must not unmap, free, or re-use this + memory until it receives the SRP target_logout or the CRQ is + closed. + The port field is unused at this time. +
+
+ #define MAD_ERROR_LOGGING_REQUEST 0x02 + The client sends the MAD_ERROR_LOGGING_REQUEST when it wishes the + VIOS to write an entry in the system error log on its behalf. Hardware + errors in physical storage components on the VIOS usually result in + errors on the client partition using that physical storage. The + MAD_ERROR_LOGGING REQUEST places client errors in the system error log in + proximity to the original hardware error to enable service personnel to + assess the impact of the original hardware error. + The MAD_ERROR_LOGGING_REQUEST uses the following data + structure: + + + + The inter_op structure is initialized with the type field set to + 0x02 (MAD_ERROR_LOGGING_REQUEST), the status field set to zero, the + length field set to the size of the mad_error_log structure plus the size + of the buffer of additional data, if any, and the tag field set as + described above. + The buffer field points to a mad_error_log structure. + + + + The lun field is set to the Logical Unit Number (LUN) of the device + on the client that is logging the error. + The correlator field is optional. If used, it should have a unique + value that can be used to correlate the error message on the client with + the error message on the VIOS. + The error_id field is set to a client-specific number associated + with the error. + The buffer_size is set to the length of the buffer of additional + data, which is optional. + The client_name array is set to the name by which this client + adapter instance is known on the client partition, for example + “vscsi0”. + The device_name array is set to the name by which the device + logging the error is known on the client partition, for example + “hdisk0”. + The partition field is set to the number of the client partition + requesting that the error be logged. + The flags field specifies the type of data contained in the + optional buffer. + The buffer, if used, starts immediately after the mad_error_log + structure. The buffer is not logged by the VIOS at this time. +
+
+ #define MAD_ADAPTER_INFO_REQUEST 0x03 + The client sends the MAD_ADAPTER_INFO_REQUEST to the VIOS to inform + the VIOS of the client’s identity. The VIOS responds with the + equivalent information about itself. The VIOS uses the client information + provided in the MAD_ADAPTER_INFO_REQUEST for the display in the + “lsmap” command. Use of this MAD is not enforced by VIOS. + However, customers have found the information useful enough to insist + that it be used. The MAD_ADAPTER_INFO_REQUEST may also be used after a + Partition Mobility operation to allow the client to update the + information on the VIOS, which may have changed during the + migration. + The MAD_ADAPTER_INFO_REQUEST uses the following data + structure: + + + + The inter_op structure is initialized with the type field set to + 0x03 (MAD_ADAPTER_INFO_REQUEST), the status field set to zero, the length + field set to the size of the mad_adapter_information_payload structure, + and the tag field set as described above. The buffer field points to + mapped memory address of a mad_adapter_information_payload + structure. + + + + The srp_version field is a NULL-terminated character array with the + version number of the SRP standard to which the partition complies. + Current versions of the VIOS and clients all support SRP revision 16.a. + The VIOS does not validate or enforce this field currently. + The partition name is the ASCII string representing the name of the + partition from the root node in the Open Firmware device tree. + The partition number is the integer number identifying the + partition from the root node in the Open Firmware device tree. Note that + partition number 0 is reserved for the hypervisor. + The mad_version field is set to the version of MAD messages + supported by the partition. The MAD messages described in this document + is version 1. The VIOS does not currently validate or enforce this + version. + The os_type field is set to the type of Operating System being run + on the partition. The VIOS uses this information to allocate additional + resources for client partitions that have unique requirements and to + return different values for sense data in error situations. The VIOS has + been able to make minor behavior changes to the device on behalf of + clients that use this field. + The port_max_txu array is used by the VIOS to report the size of + the largest single request that it can handle. Currently only the first + entry (port_max_txu[0]) is used. The client initializes this field to + zero. The VIOS responds with at least a value of 0x40000, meaning that it + is prepared to deal with a request to transfer at least 256,000 bytes of + data. The VIOS can respond with a larger value, depending on the + resources available and the capabilities of the physical device providing + storage. + + NOTE: If the VIOS reports a maximum transfer value + larger than the minimum of 0x40000, and subsequently a device which + cannot support that larger maximum transfer value is added to the device + inventory of this host adapter, the VIOS will log an informative error + and not report that new device in a REPORT_LUNS request until the client + has issued another MAD adapter information request. This prevents the + client from passing a data transfer request to a device which is too + large for that device to handle. The VIOS will return such requests with + an error. Optical devices typically have minimal maximum transfer + values. +
+
+ #define MAD_CAPABILITIES_EXCHANGE 0x05 + The MAD_CAPABILITIES_EXCHANGE command is used to allow the client + and VIOS to negotiate support for capabilities that may be required with + a partition migration. The data structures used are the capabilities + structure, followed by at least one specific capability structure. The + client uses a bit-mask to advertise the capabilities that it can support + by setting the bits representing those capabilities to one. The VIOS + responds by turning off (setting to zero) the bits for any capabilities + that it cannot support. This allows clients and VIOSs at a variety of + levels to cooperate in the partition migration operation. The client is + required to support a minimum level of capabilities in order to be + considered to be a candidate for migration. + The MAD_CAPABILITIES_EXCHANGE command uses the following data + structure: + + + + The inter_op field is initialized with the type field set to 0x05 + (MAD_CAPABILITIES_EXCHANGE), the status field initialized to zero, the + length field set to the size of the capabilities structures being passed, + and the tag field set as described above. The capabilities structures + must include at least the capabilities structure and the mig_cap + structure. + The buffer field contains the mapped memory address of a buffer + containing these structures. + + + + The flags field is always set to at least CAP_LIST_SUPPORTED by the + client. If the client is sending this command as the result of a + successful partition migration operation, it should also set the + CLIENT_MIGRATED flag. If the client is sending this command as the result + of a VIOS reboot or the VIOS has reset the CRQ, it should also set the + CLIENT_RECONNECT flag. If the VIOS cannot support all of the capabilities + in the list passed by the client, it will turn off the CAP_LIST_SUPPORTED + flag. If the VIOS overwrites some of the data in the capabilities list, + it will set the CAP_LIST_DATA flag. + The name array is filled with the NULL-terminated string + representing the name by which this client adapter instance is known on + the client partition, for example “vscsi0”. + The loc array is filled with the NULL-terminated string from the + “loc-code” field of the adapter node in the Open Firmware + device tree for this client adapter, for example + “U9117.MMA.107086C-V6-C5-T1”. + Following the capabilities structure is a list of capabilities to + be negotiated. Capabilities currently supported by the VIOS are + MIGRATION_CAPABILITIES and RESERVATION_CAPABILITIES. + + + + The capability_common structure is included in each capability + structure and describes the type of capability being negotiated. + The cap_type field is set to the type of capability. + MIGRATION_CAPABILITIES and RESERVATION_CAPABILITIES are the only types of + capabilities currently supported. + The length field is set to the size of the capabilities structure, + currently either mig_cap or reserve_cap. + The server_support field is initialized by the client to 1. If the + VIOS does not support that capability, it clears the field. + The capabilities structure used for negotiating migration + capabilities is as follows: + + + + The ecl field contains the effective capability level. The client + sets it to the current migration capability level that this client is + capable of supporting. If this level is lower than the level that the + VIOS can support or higher than the VIOS currently supports, the VIOS + sets the server_support to SERVER_CAP_DATA, sets the ecl field to the + lowest level it can support or the level currently supported, as + appropriate, and sets flags field of the capabilities structure to + CAP_LIST_DATA, to inform the client of the difference in the levels of + migration capabilities supported. Currently, the only migration + capability level supported is 1. + The structure used in negotiating reservation capabilities is as + follows: + + + + If the client is capable of breaking and re-establishing SCSI-2 + reservations after a migration event, it should set the type field to + CLIENT_RESERVE_SCSI_2. Otherwise, it should initialize the type field to + zero. +
+
+ #define MAD_PHYS_ADAP_INFO_REQUEST 0x06 + The MAD_PHYS_ADAP_INFO_REQUEST returns data about the physical + adapter to which the target device is attached, if the device supports + it. The only device currently supporting this request is virtual tape. + The data structure used with the MAD_PHYS_ADAP_INFO_REQUEST is as + follows: + + + + The client initializes the inter_op field, with the type set to + 0x06 (MAD_PHYS_ADAP_INFO_REQUEST), the status field initialized to zero, + the length field set to the size of the mad_phys_adapter_info structure, + the tag field set as described above, and the buffer field set to the + mapped memory address of a mad_phys_adapter_info structure. + + + + The client sets the lun field to the Logical Unit Number (LUN) of + the virtual device for which it is requesting the physical adapter + information, and it sets the version to 0x01 + (MAD_PHYS_ADAP_INFO_VERSION). + If the target device supports returning the physical adapter + information, the VIOS copies the Field Replaceable Unit (FRU) part + number, the FRU serial number, and the physical location code into the + appropriate arrays and returns that information to the client. This + information is intended for use by customer service engineers, to assist + them in repairing physical tape devices. +
+
+ #define MAD_TAPE_PASSTHROUGH_REQUEST 0x07 + The MAD_TAPE_PASSTHROUGH_REQUEST enables or disables SCSI command + data blocks (CDBs) to be passed directly to the physical tape device + driver without examination or emulation by the VIOS drivers. + The structure used with the MAD_TAPE_PASSTHROUGH_REQUEST is as + follows: + + + + The client initializes the inter_op structure by setting the type + field to 0x07 (MAD_TAPE_PASSTHROUGH_REQUEST), setting the status field to + zero, setting the length field to the size of the mad_tape_passthrough + structure, and setting the tag field as described above. The lun field is + set to the Logical Unit Number of a virtual tape device on this client + adapter. The version is set to 0x00000001 (MAD_TAPE_PASSTHRU_VERSION). + The passThru is set to either 0x00000001 (TAPE_PASSTHROUGH_ENABLE) or + 0x00000002 (TAPE_PASSTHROUGH_DISABLE). + When tape passthrough is enabled, the SCSI Command Data Blocks are + sent directly to the tape head driver, without examination or emulation + by the VIOS drivers. +
+
+ #define MAD_ENABLE_FAST_FAIL 0x08 + The MAD_ENABLE_FAST_FAIL command enables the VIOS to provide a hint + to the client that a physical device is no longer accessible so that a + failover to alternate paths, if any, should be attempted. + The only structure used with the MAD_ENABLE_FAST_FAIL command is + the inter_op structure. The type field is set to 0x08 + (MAD_ENABLE_FAST_FAIL), the status field is initialized to zero, the + length field is set to the size of the inter_op structure, and the tag + field is set as described above. + When the MAD_ENABLE_FAST_FAIL has completed successfully and the + VIOS determines that a device is no longer responding, when the VIOS is + completing an I/O request for that device back to the client, the VIOS + will set the status field in the CRQ message to 0x10 (ADAPTER_FAILED), in + addition to returning the normal device error and sense data. Fast fail + is disabled by closing the CRQ. + Two additional messages may be exchanged between clients and a VIOS + - PING and PING_RESPONSE. If a partition needs to know if the other + partition is still functional and at least able to respond to an + interrupt, it can send a PING message to the other partition. The other + partition should respond with a PING_RESPONSE. These are very lightweight + messages that require no resources. They fit entirely within the first + 64-bit quantity of the CRQ message. The PING_RESPONSE should be sent from + the interrupt code, immediately after receiving the PING. + To send a PING, the valid bit is set to one, the CRQ format field + is set to 0x06 (MESSAGE_IN_CRQ), and the status field is set to 0xF5 + (PING). + To send a PING_RESPONSE, the valid bit is set to one, the CRQ + format field is set to 0x06 (MESSAGE_IN_CRQ), and the status field is set + to 0xF6 (PING_RESPONSE). + It is strongly recommended that PING messages be used very + sparingly. One way to fill a CRQ with ping messages is to halt the VIOS + in kdb while the AIX client has requests active on it. + +
+
+
diff --git a/Virtualization/ch_virtual_tty.xml b/Virtualization/ch_virtual_tty.xml new file mode 100644 index 0000000..0e4c67e --- /dev/null +++ b/Virtualization/ch_virtual_tty.xml @@ -0,0 +1,1041 @@ + + A Protocol for a Virtual TTY Interface + +
+ Overview + This chapter defines a protocol to support partition use of a + physical serial port using a virtual TTY (VTY) interface. A protocol is + required to send control and status information of the physical device + using a data only transport. + Specifically, this protocol is used to allow the Virtual Terminal + (VTERM) option, as defined in + , as the interface to communicate + with a physical serial port which is under control of the platform instead + of the OS. + This chapter describes a connection between the platform, which has + physical control of the serial port and is an endpoint of the VTERM + interface, and a partition, which is the other endpoint of the VTERM + interface. The protocol described here provides a means to communicate both + data and control information over this data-only interface. +
+ +
+ Protocol Definition + +
+ Packet Formation + All information is sent in packets. There are four types of packets + supported for version 0, data packets, control packets, query packets and + query response packets. A packet consists of a one byte header, which + defines the type of packet, followed by a one byte length field, followed + by a two byte sequence number, followed by the packet payload, which + depends on the type of packet. This means that the minimum packet size is + 5 bytes, in the case of a one-byte data packet. + The one-byte length field for the packet is the length of the + entire packet, including the header byte and the length field + itself. + On the partition side the H_GET_TERM_CHAR and H_PUT_TERM_CHAR + hypervisor calls are used to read and write data. These HCALLS read and + write up to 16 bytes of data at once. There is no relationship between + the data in a particular HCALL and packet boundaries. A single packet can + span multiple HCALLS, and a single HCALL can contain data from more than + one packet. + For version 0, the following packet headers are defined: + +
+ Data Packet + + + + This packet type is used to send data. + The data packet is defined in + . + + + VTERM Data Packet + + + + + + + + + + Packet Offset + + + + + Member Size (Bytes) + + + + + Description + + + + + + + + 0x0 + + + 0x1 + + + Packet Header (0xFF) + + + + + 0x1 + + + 0x1 + + + Total size of packet in bytes, including this + header + + + + + 0x2 + + + 0x2 + + + Sequence Number (see description below) + + + + + 0x4 + + + variable + + + Data + + + + +
+
+ +
+ Control Packet + + + + This packet type is used to send commands that control the + operation of software or hardware on the other side of the link, and to + send notification of status changes on the other side. + The control packet is defined in + . + + + VTERM Control Packet + + + + + + + + + + Packet Offset + + + + + Member Size (Bytes) + + + + + Description + + + + + + + + 0x0 + + + 0x1 + + + Packet Header (0xFE) + + + + + 0x1 + + + 0x1 + + + Total size of packet in bytes, including this + header + + + + + 0x2 + + + 0x2 + + + Sequence Number (see description below) + + + + + 0x4 + + + 0x2 + + + Control verb (see description below) + + + + + 0x6 + + + optional and variable + + + Depending on verb, further data + + + + +
+ The following control verbs are supported. + +
+ VSV_SET_MODEM_CTL Verb (0x01) + + Protocol Version: 0x00 + + Note: One-way. This verb is only sent by the + partition to the platform. + + Data Member Definition: The data member for this verb + consists of 8 bytes, as defined in + . + + + VSV_SET_MODEM_CTL Verb Data Member + + + + + + + + + + Packet Offset + + + + + Member Size (Bytes) + + + + + Description + + + + + + + + 0x6 + + + 0x4 + + + VS_MODEM_CTL word (defined below) + + + + + 0xA + + + 0x4 + + + VS_MODEM_CTL mask, defining which bits in the control + word above are to be updated. + + + + +
+ VS_MODEM_CTL is a 4 byte bit-mask. The following bits are defined. + Note that each bit position has an associated protocol version. Note that + some bits can bet set (noted as R/W in the table), others only can be + read (noted as R/O in the table). This verb will set only bits marked + R/W. + The update of the serial port hardware driven by this command must + be serialized with data packets. + In the data portion of the packet, the first word defines the bit + values to be set; the second word is a mask defining which bits are to be + updated. See + . + + + VS_MODEM_CTL Bit Definition + + + + + + + + + + + + Bit Position + + + + + Protocol Version Supported + + + + + R/O, R/W + + + + + Name + + + + + Description + + + + + + + + 0x0000001 + + + 0x00 + + + R/W + + + TSDTR + + + Data Terminal Ready + + + + + 0x0000020 + + + 0x00 + + + R/O + + + TSCD + + + Carrier Detect + + + + +
+
+ +
+ VSV_MODEM_CTL_UPDATE Verb (0x02) + + Protocol Version: 0x00 + + Note: One-way. This verb is only sent by the platform + to the partition. + + Data Member Definition: The data member for this verb + consists of 4 bytes, as defined in + + + + VSV_MODEM_CTL_UPDATE Verb Data Member + + + + + + + + + + Packet Offset + + + + + Member Size (Bytes) + + + + + Description + + + + + + + + 0x6 + + + 0x4 + + + VS_MODEM_CTL word (defined above) + + + + +
+ This packet is sent by platform to the partition to inform the + partition of a change in status of certain bits in the VS_MODEM_CTL word. + The bits which cause this command to be sent when they transition are + defined in + . This command should be + serialized with data packets. The protocol version in + defines the first (lowest) + version of the protocol in which a transition of this bit should cause + the command to be sent. + + + VS_MODEM_CTL Word Bits + + + + + + + + + + Bit Name + + + + + Protocol Version Supported + + + + + Description + + + + + + + + TSCD + + + 0x00 + + + A transition of carrier detect must cause this packet to + be sent. + + + + +
+
+ +
+ VSV_RENEGOTIATE_CONNECTION Verb (0x03) + + Protocol Version: 0x00 + + Data Member Definition: No data member for this + verb. + This verb forces the protocol into “closed” state; see + the Connection Negotiation section below for the definition and meaning + of this state. + In normal operation it is expected that this command will be send + from the partition to the platform. However, if the platform is aware + that it will be unable to continue for some reason for a finite period of + time, it can send this command to the partition. + The platform may send this command even if the protocol is not in + an open state; this is to allow the platform to unconditionally close the + platform during an error recovery processor. + When the partition transitions control of the VTY between + independent entities, such as when it is given from OF control the to the + OS, the protocol should be closed with this command by the component that + is relinquishing it and reopened by the receiving component. +
+
+ +
+ Query Packet + + + + This packet is used to send queries to the other side of the link. + The other side responds by sending a query response packet, defined + below. There is in some case implied control of the state of the other + side of the link, as a series of queries and responses are used to + initialize (or re-initialize) the protocol. + The query packet is defined in + . + + + VTERM Query Packet + + + + + + + + + + Packet Offset + + + + + Member Size (Bytes) + + + + + Description + + + + + + + + 0x0 + + + 0x1 + + + Packet Header (0xFD) + + + + + 0x1 + + + 0x1 + + + Total size of packet in bytes, including this header + (0x6) + + + + + 0x2 + + + 0x2 + + + Sequence Number (see description below) + + + + + 0x4 + + + 0x2 + + + Query verb (see description below) + + + + +
+ The following query verbs are supported: + +
+ VSV_SEND_VERSION_NUMBER Verb (0x01) + + Protocol Version: 0x00 + + Response: The query response data member will contain + the one-byte version number of the highest version of the protocol + supported by the driver. +
+ +
+ VSV_SEND_MODEM_CTL_STATUS Verb (0x02) + + Protocol Version: 0x00 + + Response: The query response data member will contain + the four-byte VS_MODEM_CTL word defined above in the VSV_SET_MODEM_CTL + verb. + + Note: One-way. This verb is only sent by the + partition to the platform. +
+
+ +
+ Query Response Packet + + + + This packet is used to reply to query packets sent from the other + side of the link, and are sent only in response to query packets. + The query response packet is defined in + . + + + VTERM Query Response Packet + + + + + + + + + + Packet Offset + + + + + Member Size (Bytes) + + + + + Description + + + + + + + + 0x0 + + + 0x1 + + + Packet Header (0xFC) + + + + + 0x1 + + + 0x1 + + + Total size of packet in bytes, including this + header + + + + + 0x2 + + + 0x2 + + + Sequence Number (see description below) + + + + + 0x4 + + + 0x2 + + + Query verb -- matches the query verb for which this is a + response + + + + + 0x6 + + + 0x2 + + + Query Sequence Number -- the sequence number of the query + packet for which this is a response + + + + + 0x8 + + + variable + + + Verb-specific response data + + + + +
+
+
+ +
+ Verb Formation + A verb, either for a command or query packet, consists of two + bytes. The first byte is a version of the protocol associated with the + verb, and the second byte is the verb itself. This allows the flexibility + to redefine or add function to verbs in the future. More importantly, it + allows partners at either end of the protocol to find a “least + common denominator” at which they can work. + The connection sequence for partners to begin communication + (defined below) causes each side of the protocol to learn the highest + level of the protocol supported by the party on the other side. If one + party discover that the party on the other end supports a lower version + of the protocol, it is expected that only verbs at the lower version of + the protocol will be used. If an unknown verb is received, the command is + discarded without response. +
+ +
+ Sequence Numbers + Each packet has a sequence number. Sequence numbers start at 0 and + increment by one with each packet sent. There are separate name spaces + for sequence numbers in each direction, but all packets of all types in a + direction are in the same sequence number name space. The sequence number + is unsigned, and the number following 0xFFFF is 0x0. Sequence numbers are + used to match query packets with query response packets, and for general + debugging. + The sequence numbers in data packets represent a fair amount of + bandwidth overhead, especially if the number of bytes of data per packet + is small in practice. If the performance of this facility is found to be + inadequate due to bandwidth reasons, developers on both sides should + recognize that sequence numbers for data packets represents the + “low hanging fruit” to fix that problem, so are cautioned not + to create logical dependencies on sequence numbers for data packets. For + other packet types logical dependencies are acceptable, and indeed are + built into the protocol definition. + + Implementation Note: Developers should consider field + problem determination in their designs. However, other than providing + packet sequence numbers in the protocol, RAS is outside the scope of the + protocol itself. +
+ +
+ Flow Control + The partition side of the connection must understand what type or + types of flow control are supported by the platform (physical) side of + the connection. The options are no flow control, software flow control + and hardware flow control. + In version 0 of this protocol it is implied that only software flow + control is implemented by the platform side. If future platforms + implement other options, a new version of this protocol must be created + that includes a verb for the partition side to determine what type or + types of flow control are supported, and to negotiate what type is to be + used in the case that more than one is supported. +
+ +
+ Packet Type and Verb Summary + + A summary of packet types and verbs can be found in + . + + + VTERM Packet Type and Verb Summary + + + + + + + + + + Packet ID + + + + + Verb ID + + + + + Lowest Version Supported + + + + + Description + + + + + + + + 0xFF + + + -- + + + 0 + + + VS_DATA_PACKET_HEADER + + + + + 0xFE + + + -- + + + 0 + + + VS_CONTROL_PACKET_HEADER + + + + + 0xFE + + + 0x1 + + + 0 + + + VSV_SET_MODEM_CTL + + + + + 0xFE + + + 0x2 + + + 0 + + + VSV_MODEM_CTL_UPDATE + + + + + 0xFE + + + 0x3 + + + 0 + + + VSV_RENEGOTIATE_CONNECTION + + + + + 0xFE + + + 0x3 + + + 0 + + + VSV_CLOSE_PROTOCOL (alias for above) + + + + + 0xFC + + + -- + + + 0 + + + VS_QUERY_RESPONSE_PACKET_HEADER + + + + + 0xFC + + + 0x1 + + + 0 + + + VSV_SEND_VERSION_NUMBER + + + + + 0xFC + + + 0x2 + + + 0 + + + VSV_SEND_MODEM_CTL_STATUS + + + + + 0xFD + + + -- + + + 0 + + + VS_QUERY_RESPONSE_PACKET_HEADER + + + + +
+
+
+ +
+ Connection Negotiation + This protocol itself has a state of being open or closed. The state + is “closed” at partition boot time and remains closed until a + connection negotiation is initiated by the partition device driver. Once + open, the state remains “open” until a VSV_CLOSE_PROTOCOL + command is sent by either side. + While closed, both parties should “listen” on the VTY + interface. However, while closed, only query and query response packets + should be acted on; any data or control packets received should be + discarded. + The connection process is initiated by the partition side. The + sequence is as follows: + + + Both sides are in closed state. Both side are + “listening” to the VTY. + + + + The partition sends the VSV_SEND_VERSION_NUMBER query. + + + + The partition continues listening, but discard any packet that is + not a VSV_SEND_VERSION_NUMBER query response. + + + + The platform replies with the VSV_SEND_VERSION_NUMBER query + response packet. + + + + The platform clears any pending data in the serial port + hardware. + + + + The platform sends the VSV_SEND_VERSION_NUMBER query packet. + + + + The partition responds with the VSV_SEND_VERSION_NUMBER query + response packet. + + + At this point the protocol is open; any data received in the serial + hardware by the platform from this point should be put into data packets + and sent to the partition; any data packets received from the partition + should be sent out the serial hardware. + The platform should implement a time-out after sending a command that + expects a response, and after the time-out log an error. For version 0 of + the protocol an appropriate value would be seconds or minutes; at least 10 + seconds. The next version of the protocol should consider a property in the + device tree node to communicate an appropriate time-out value. + +
+
diff --git a/Virtualization/ch_vmc_comm.xml b/Virtualization/ch_vmc_comm.xml new file mode 100644 index 0000000..36cb6d5 --- /dev/null +++ b/Virtualization/ch_vmc_comm.xml @@ -0,0 +1,1301 @@ + + A Protocol for VMC Communications + +
+ Overview + The Virtual Management Channel (VMC) is a logical device which + provides an interface between the hypervisor and a management partition. + This management partition is intended to provide an alternative to + HMC-based system management. In the management partition, a Logical + Partition Manager (LPM) application exists which enables a system + administrator to configure the system’s partitioning characteristics + via a command line interface or web browser. Support for conventional HMC + management of the system may still be provided on a system; however, when + an HMC is attached to the system, the VMC interface is disabled by the + hypervisor. +
+ Logical Partition Manager + The LPM is a browser based LPAR configuration tool provided by the + management partition. System configuration, maintenance, and control + functions which traditionally require an HMC can be implemented in the + LPM using a combination of HMC to hypervisor interfaces and existing + operating system methods. This tool provides a subset of the functions + implemented by the HMC and enables basic partition configuration. The set + of HMC to hypervisor messages supported by the LPM component are passed + to the hypervisor over a VMC interface, which is defined below. The + actual content of these messages is defined in other documentation. In + order to remain consistent with this existing HMC documentation, this + chapter generally uses the HMC terminology to refer to these messages + and the LPM to hypervisor connections. +
+
+ Virtual Management Channel (VMC) + A logical device, called the virtual management channel (VMC), is + defined for communicating between the LPM application and the hypervisor. + This device, similar to a VSCSI server device, is presented to a + designated management partition as a virtual device and is only presented + when the system is not HMC managed. + This communication device borrows aspects from both VSCSI and ILLAN + devices and is implemented using the CRQ and the RDMA interfaces. The + initialization process for CRQs is defined in + , and is not duplicated here. A + three way handshake is defined that must take place to establish that + both the hypervisor and management partition sides of the channel are + running prior to sending/receiving any of the protocol messages defined + in this chapter. + Transport Event CRQs are also defined in + , and are not duplicated here. + They define the CRQ messages that are sent when the hypervisor detects + one of the peer partitions has abnormally terminated, or one side has + called H_FREE_CRQ to close their CRQ. + Two new classes of CRQ messages are introduced for the VMC device. + VMC Administrative messages are used for each partition using the VMC to + communicate capabilities to their partner. HMC Interface messages are + used for the actual flow of HMC messages between the management partition + and the hypervisor. As most HMC messages far exceed the size of a CRQ + bugger, a virtual DMA (RMDA) of the HMC message data is done prior to + each HMC Interface CRQ message. Only the management partition drives RDMA + operations; hypervisor never directly causes the movement of message + data. +
+
+
+ VMC CRQ Message Definition + For the VMC interface, all CRQ messages are defined to use the + following base format: + + + CRQ Message Base Format + + + + + + + + + 1 B + + + 1 B + + + 14 B + + + + + Header + + + Type + + + Data + + + + +
+ Two general message formats are defined: administrative and HMC + Interface. These are defined in the following sections. +
+ Administrative Messages + The administrative message format is used to configure a VMC + between the hypervisor and the management partition. The two messages + defined for this format are described in the following + subsections. + +
+ VMC Capabilities + + + VMC Capabilities Message + + + + + + + + + + + + + + + 1 B + + + 1 B + + + 1 B + + + 2 B + + + 1 B + + + 2 B + + + 4 B + + + 2 B + + + 2 B + + + + + 0x80 + + + 0x01 + + + Reserved + + + Reserved + + + # HMC’s + + + Pool Size + + + MTU + + + CRQ Size + + + Version (Major/Minor) + + + + +
+ The capabilities message is an administrative message sent after + the CRQ initialization sequence of messages and is used to exchange VMC + capabilities between the management partition and the hypervisor. The + management partition must send this message and the hypervisor must + respond with a VMC Capabilities Response message before HMC interface + messages can begin. Any HMC interface messages received before the + exchange of capabilities has completed are dropped. + This message enables the management partition and the hypervisor to + trade the following interface parameters: + + + # HMC’s. Maximum number of independent HMC connections + supported. Multiple connections would be required to support HMC pass + through mode. + + + + Pool Size. Maximum number of buffers supported per HMC + connection. + + + + MTU. Maximum message size supported (bytes). + + + + CRQ Size. Number of entries available in the CRQ for the source + partition. The target partition must limit the number of outstanding + messages to one half or less. + + + + Version. Indicates the code level of the management partition or + the hypervisor with the high-order byte indicating a major version and + the low-order byte indicating a minor version. + + +
+ +
+ VMC Capabilities Response + + + VMC Capabilities Response Message + + + + + + + + + + + + + + + 1 B + + + 1 B + + + 1 B + + + 2 B + + + 1 B + + + 2 B + + + 4 B + + + 2 B + + + 2 B + + + + + 0x80 + + + 0x81 + + + Status + + + Reserved + + + # HMC’s + + + Pool Size + + + MTU + + + CRQ Size + + + Version (Major/Minor) + + + + +
+ This command is sent by the hypervisor in response to the VMC + Capabilities message. This command enables the hypervisor to inform the + management partition of the values it supports. Parameters are identical + to the VMC Capabilities message, with the addition of the following + field: + Status. Zero is success. On failure, one of the following is + returned: + 1 - General failure + 2 - Invalid version + The hypervisor and the management partition use the minimum value + supported by each side for the parameters negotiated with the + capabilities message exchange. +
+
+ +
+ HMC Interface Buffers + Buffers are used to transfer data between the management partition + and the hypervisor. Many of the HMC Interface messages defined in + following sections indicate buffers that contain data that must be + transferred. Note the following: + + + All buffers exist in the hypervisor memory, and data is moved + between the hypervisor and the management partition by the management + partition issuing H_COPY_RDMA. + + + + To enable the management partition to access each buffer, the + hypervisor must allocate virtual TCEs as well as the actual buffer + storage. + + + + Each buffer is at least the minimum negotiated MTU bytes + long. + + + + Buffers are always owned by either the management partition or + the hypervisor. Management partition-owned buffers are used for messages + (both commands and responses) sent to the hypervisor from the management + partition. The hypervisor-owned buffers are used for messages (both + responses and asynchronous events) sent from the hypervisor to the + management partition. + + + + Each LPM interface message carrying HMC protocol (either + direction) also carries a buffer, and the ownership of this buffer + transfers from sender to receiver. + + + + There are no CRQ responses to the CRQ messages carrying HMC + protocol. The HMC protocol responses are carried in a message sent from + the other direction. + + + + The maximum depth of the buffer pool is the minimum value + negotiated via the capabilities exchange. + + + + For each of the HMC interface commands, Buffer ID is used to + identify the transfer buffer and ranges from 0 to the minimum negotiated + pool size - 1. + + + + There is a separate buffer pool for each LPM connection, each + with the negotiated number of buffers. + + +
+ +
+ HMC Interface Messages + There are several different HMC Interface messages, as defined in + the following sections. Each CRQ message has a unique HMC Interface + message type, and the HMC Interface message type defines the format for + the remaining 14 bytes of data. + +
+ Interface Open + + + Interface Open Command Message + + + + + + + + + + + + + + 1 B + + + 1 B + + + 1 B + + + 1 B + + + 1B + + + 1 B + + + 2 B + + + 8 B + + + + + 0x80 + + + 0x02 + + + Reserved + + + Reserved + + + HMC Sn + + + HMC Idx + + + Buffer ID + + + Reserved + + + + +
+ This command is sent by the management partition as the result of a + management partition device request. It causes the hypervisor to prepare + a set of data buffers for the LPM connection indicated by HMC Idx (HMC + index). A unique HMC Idx would be used if multiple management + applications running concurrently were desired. Before responding to this + command, the hypervisor must provide the management partition with at + least one of these new buffers (see the Add Buffer message defined + below). The HMC Sn (HMC Session) field is used as a session identifier + for the current VMC connection. If the management partition disconnects + (for example as the result of a crash in the LPM application), the next + open of the VMC device will result in the next HMC Sn value in the range + from 1 to 255 being used. + This message is issued after the capabilities exchange has + successfully completed and the hypervisor has issued an Add Buffer + command to create a buffer for the management partition for use in + establishing an LPM connection. The management partition sends the unique + 32-byte HMC ID to the hypervisor via an RDMA using the buffer established + by the hypervisor. +
+
+ Interface Open Response + + + Interface Open Response Message + + + + + + + + + + + + + + 1 B + + + 1 B + + + 1 B + + + 1 B + + + 1B + + + 1 B + + + 2 B + + + 8 B + + + + + 0x80 + + + 0x82 + + + Status + + + Reserved + + + HMC Sn + + + HMC Idx + + + Buffer ID + + + Reserved + + + + +
+ This command is sent by the hypervisor in response to the Interface + Open message. The status of the open command is returned in the Status + field. Zero is success. On failure, the following is returned: + 1 - General failure + When this message is received, the indicated buffer is again + available for management partition use. +
+
+ Interface Close + + + Interface Close Message + + + + + + + + + + + + + + 1 B + + + 1 B + + + 1 B + + + 1 B + + + 1B + + + 1 B + + + 2 B + + + 8 B + + + + + 0x80 + + + 0x03 + + + Reserved + + + Reserved + + + HMC Sn + + + HMC Idx + + + Reserved + + + Reserved + + + + +
+ This command is sent by the management partition to terminate an + LPM to hypervisor connection. When this command is sent, the management + partition has quiesced all I/O operations to all buffers associated with + this LPM connection, and has freed any storage for those buffers. +
+
+ Interface Close Response + + + Interface Close Response Message + + + + + + + + + + + + + + 1 B + + + 1 B + + + 1 B + + + 1 B + + + 1B + + + 1 B + + + 2 B + + + 8 B + + + + + 0x80 + + + 0x83 + + + Status + + + Reserved + + + HMC Sn + + + HMC Idx + + + Reserved + + + Reserved + + + + +
+ This command is sent by the hypervisor in response to the LPM + Interface Close message. The status of the close command is returned in + the Status field. Zero is success. On failure, the following is + returned: + 1 - General failure +
+
+ Add Buffer + + + Add Buffer Message + + + + + + + + + + + + + + 1 B + + + 1 B + + + 1 B + + + 1 B + + + 1B + + + 1 B + + + 2 B + + + 4 B + + + 4 B + + + + + 0x80 + + + 0x04 + + + Reserved + + + hypervisor + + + HMC Sn + + + HMC Idx + + + Buffer ID + + + Reserved + + + Buffer LIOBA + + + + +
+ This message transfers a buffer from hypervisor ownership to + management partition ownership. The LIOBA is obtained from the virtual + TCE table associated with the hypervisor side of the VMC device, and + points to a buffer of size MTU (as established in the capabilities + exchange). + The hypervisor field is set to 0 if the buffer being added is to be + used by the management partition for messages inbound to the hypervisor, + and to 1 if the buffer being added is to be used for messages outbound + from the hypervisor. + The typical flow for adding buffers: + + + A new LPM connection is opened by the management + partition. + + + + The hypervisor assigns new buffers for the traffic associated + with that connection. + + + + The hypervisor sends VMC Add Buffer messages to the management + partition, informing it of the new buffers. + + + + The hypervisor sends an HMC protocol message (to the LPM + application) notifying it of the new buffers. This informs the + application that it has buffers available for sending HMC + commands. + + +
+
+ Add Buffer Response + + + Add Buffer Response Message + + + + + + + + + + + + + + 1 B + + + 1 B + + + 1 B + + + 1 B + + + 1B + + + 1 B + + + 2 B + + + 8 B + + + + + 0x80 + + + 0x84 + + + Status + + + Reserved + + + HMC Sn + + + HMC Idx + + + Buffer ID + + + Reserved + + + + +
+ This command is sent by the management partition to the hypervisor + in response to the Add Buffer message. The Status field indicates the + result of the command. Zero is success. On failure, one of the following + is returned: + 1 - General failure + 2 - Invalid HMC Index + 3 - Invalid Buffer ID + 4 - HMC connection has closed +
+
+ Remove Buffer + + + Remove Buffer Message + + + + + + + + + + + + + + 1 B + + + 1 B + + + 1 B + + + 1 B + + + 1B + + + 1 B + + + 2 B + + + 8 B + + + + + 0x80 + + + 0x05 + + + Reserved + + + Reserved + + + HMC Sn + + + HMC Idx + + + Reserved + + + Reserved + + + + +
+ This message requests an HMC buffer to be transferred from + management partition ownership to hypervisor ownership. The management + partition may not be able to satisfy the request at a particular point in + time if all its buffers are in use. The management partition requires a + depth of at least one inbound buffer to allow LPM commands to flow to the + hypervisor. It is, therefore, an interface error for the hypervisor to + attempt to remove the management partition's last buffer. + The hypervisor is expected to manage buffer usage with the LPM + application directly and inform the management partition when buffers may + be removed. The typical flow for removing buffers: + + + The LPM application no longer needs a communication path to a + particular hypervisor function. That function is closed. + + + + The hypervisor and the LPM application quiesce all traffic to + that function. The hypervisor requests a reduction in buffer pool + size. + + + + The LPM application acknowledges the reduction in buffer pool + size. + + + + The hypervisor sends a Remove Buffer message to the management + partition, informing it of the reduction in buffers. + + + + The management partition verifies it can remove the buffer. This + is possible if buffers have been quiesced. + + +
+
+ Remove Buffer Response + + + Remove Buffer Response Message + + + + + + + + + + + + + 1 B + + + 1 B + + + 1 B + + + 1 B + + + 1B + + + 1 B + + + 2 B + + + 8 B + + + + + 0x80 + + + 0x85 + + + Status + + + Reserved + + + HMC Sn + + + HMC Idx + + + Buffer ID + + + Reserved + + + + +
+ This command is sent by the management partition to the hypervisor + in response to the Remove Buffer message. The Buffer ID field indicates + which buffer the management partition selected to remove. The Status + field indicates the result of the command. Zero is success. On failure, + the following is returned: + 1 - General failure + 2 - Invalid HMC Index + 3 - No buffer found +
+
+ Signal Message + + + Signal Message + + + + + + + + + + + + + + 1 B + + + 1 B + + + 1 B + + + 1 B + + + 1B + + + 1 B + + + 2 B + + + 4 B + + + 4 B + + + + + 0x80 + + + 0x06 + + + Reserved + + + Reserved + + + HMC Sn + + + HMC Idx + + + Buffer ID + + + Reserved + + + Msg Len + + + + +
+ This command is sent between the management partition and the + hypervisor in order to signal the arrival of an HMC protocol message. The + command can be sent by both the management partition and the hypervisor. + It is used for all traffic between the LPM application and the + hypervisor, regardless of who initiated the communication. + There is no response to this message. +
+
+
+ +
+ Example Management Partition VMC Driver Interface + This section provides an example for the LPM implementation where a + device driver is used to interface to the VMC device. This driver consists + of a new device, for example /dev/lparvmc, which provides interfaces to + open, close, read, write, and perform ioctl’s against the VMC + device. +
+ VMC Interface Initialization + The device driver is responsible for initializing the VMC when the + driver is loaded. It first creates and initializes the CRQ. Next, an + exchange of VMC capabilities is performed to indicate the code version + and number of resources available in both the management partition and + the hypervisor. Finally, the hypervisor requests that the management + partition create an initial pool of VMC buffers, one buffer for each + possible HMC connection, which will be used for LPM session + initialization. Prior to completion of this initialization sequence, the + device returns EBUSY to open() calls. EIO is returned for all open() + failures. + +
+ VMC Interface Initialization + + + + + + + + +
+
+
+ VMC Interface Open + After the basic VMC channel + has been initialized, an HMC session level connection can be established. + The application layer performs an open() to the VMC device and executes + an ioctl() against it, indicating the HMC ID (32 bytes of data) for this + session. If the VMC device is in an invalid state, EIO will be returned + for the ioctl(). The device driver creates a new HMC session value + (ranging from 1 to 255) and HMC index value (starting at index 0 and + potentially ranging to 254 in future releases) for this HMC ID. The + driver then does an RDMA of the HMC ID to the hypervisor, and then sends + an Interface Open message to the hypervisor to establish the session over + the VMC. After the hypervisor receives this information, it sends Add + Buffer messages to the management partition to seed an initial pool of + buffers for the new HMC connection. Finally, the hypervisor sends an + Interface Open Response message, to indicate that it is ready for normal + runtime messaging. The following illustrates this VMC flow: + +
+ VMC Interface Open + + + + + + + + +
+
+ +
+ VMC Interface Runtime + During normal runtime, the LPM + application and the hypervisor exchange HMC messages via the Signal VMC + message and RDMA operations. When sending data to the hypervisor, the LPM + application performs a write() to the VMC device, and the driver + RDMA’s the data to the hypervisor and then sends a Signal Message. + If a write() is attempted before VMC device buffers have been made + available by the hypervisor, or no buffers are currently available, EBUSY + is returned in response to the write(). A write() will return EIO for all + other errors, such as an invalid device state. When the hypervisor sends + a message to the LPM, the data is put into a VMC buffer and an Signal + Message is sent to the VMC driver in the management partition. The driver + RDMA’s the buffer into the partition and passes the data up to the + appropriate LPM application via a read() to the VMC device. The read() + request blocks if there is no buffer available to read. The LPM + application may use select() to wait for the VMC device to become ready + with data to read. + +
+ VMC Interface Runtime + + + + + + + + +
+
+
+ VMC Interface Close + HMC session level connections are + closed by the management partition when the application layer performs a + close() against the device. This action results in an Interface Close + message flowing to the hypervisor, which causes the session to be + terminated. The device driver must free any storage allocated for buffers + for this HMC connection. + +
+ VMC Interface Close + + + + + + + + +
+
+
+
diff --git a/Virtualization/figures/PAPR-18.gif b/Virtualization/figures/PAPR-18.gif new file mode 100644 index 0000000000000000000000000000000000000000..0a077e3f64b2ef10d4add0fafabfd234d7f8d8b0 GIT binary patch literal 14453 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 H1Oxy(FfLX{ literal 0 HcmV?d00001 diff --git a/Virtualization/figures/PAPR-19.gif b/Virtualization/figures/PAPR-19.gif new file mode 100644 index 0000000000000000000000000000000000000000..3f3c60969d4e39bf7a92ccf4179d04a87f2c9ac3 GIT binary patch literal 58309 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 NML#e}FbLq-{{fM!)iVG9 literal 0 HcmV?d00001 diff --git a/Virtualization/figures/PAPR-20.gif b/Virtualization/figures/PAPR-20.gif new file mode 100644 index 0000000000000000000000000000000000000000..0baec88b29bbb1a7f90675670cf505107b8f5f2a GIT binary patch literal 38525 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

Pl0?fS|By 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 P=SP3~)xZAx1q1*)PR6f@ literal 0 HcmV?d00001 diff --git a/Virtualization/figures/PAPR-59.gif b/Virtualization/figures/PAPR-59.gif new file mode 100644 index 0000000000000000000000000000000000000000..e684155d8a6e87f7dfc56f9eb87f23d168d7c29e GIT binary patch literal 38251 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 literal 0 HcmV?d00001 diff --git a/Virtualization/figures/PAPR-66.gif b/Virtualization/figures/PAPR-66.gif new file mode 100644 index 0000000000000000000000000000000000000000..c8d4f2c86bc7083e2711252387a5727a2a565205 GIT binary patch literal 19119 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≠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 literal 0 HcmV?d00001 diff --git a/Virtualization/figures/PAPR-68.gif b/Virtualization/figures/PAPR-68.gif new file mode 100644 index 0000000000000000000000000000000000000000..0e4e673b7e14dea2e566326e4f989bca06150cbd GIT binary patch literal 13300 zcmVPxY7y@G#NO%=0V;NL<7c_VnQ#3a;06=&EKaq1IVL~|?bs=~W zKYtZMj{rxWK0te7Ko>wjfpkC@I7OU#KpJ>JC1^%IcRyNqK}!H$kdHtdO;1Z8T51Je zmx)Fd7hQ;eN<5T9Po72?BVL{?UXq+gFkxCOibi}KVy<;doSsQEJz zh+$1ba&n(uDtcjpbZJ22G{AL8y?8^ncvn}9u40O$ymw|?jJSk` zgL;I(VT;OIj>WZmcte?|h>L2Kh-rn1vU-o4q=%fZi(E;a*Q1b8yo+FwlaS4dOkbVU zosPj{o!fYwuXdfj$&O%mqR51v(wv;Kte$j@ri)vy;-I3Rv7MpKomIo0dBC2G+niL4 ztFCme*@&yZ+MQw9ooKJ1$J?8Cv!cO(v$UQks;j=~ z*}9F0%{`uhri04#Kpp+%;)RFewftUtj_JS(C3=j>gdarnc4To z&FbdNrlQ&M@yv|Q(9Gn_wcX6ry4c9Q*}K-)n!VZau;1MC*P+)Q9& z{PDd1^2+}6(*5(;^z-}M{Qvd$^yvNXPuj{QvL& z|Mvd>{Qv*|A^8LW3IP8AEC2ui07e6o0RRa80R0IZNU)&6g9sBUT*$DY!-o(fN}Ncs zqQ#3CGiuz(v7^V2AVZ2ANwTELlPFWFT*({Vj%brcUw(Z-vbL-yCySMM(z=I1PPQ1AB_|5c1q&`yog6x9~4`U9hBV(0Gh>27z&=$4iXL`#1A4EmQ~FL1gKKbKA02$ABjY=)yoq<2tZ#!_K5LE zi)6VYg%vTD1Y`y^9#jnoIg-Ur2pt+U;d(`unN}}W2vY!=1@+tn2SSm9E06I)V zP&Q@*WV*%{ z8?W*JeqW9U#3CDGa=^Yg*IAH;;}HhE`UMc~Jq#Eg@-`W~)uBsff z0SacM2c_E`YDxy1!EP|^I)qed4kMJFD!D(+J{wLGJvMARn)wX)waRB)b1~Hg)XBDk z6Jm>Km~rP=b&S0%kYjj&;=@H5F%It!qA3f6Gn>bIn4Jqn`;&Zz=viI3Kg%O@@IZy9 zZ@u9V3@On2dkdba8j6aq29z2uY#-6&qf?B|N0jv?j7=bl)AfXqi^B!r38ttS8UjE) zfyj(zHsg-l1Tcne?1BQw=vw{^M}u>ijZM8M0;b6EtQb{81T@=+(lk~-r_o{@`m$Za zaECP!VS^6-`S{&HzQHAdbWb3~a}c8XlpQP~QDN*EANin!4GDBuLxh`-cES-(+3>9 z_b7wxgBMMB+Y^n~#e%#;6s;nY7SrdpLAFSX=fh$R2dSQTjB%C@O5Z`$7#;<_GM0c! zVjAgKBRk@+OL*)B;0Ut3W5!WWK~W?7pg555>@Gu@c;5a%*~%(jv6jM|CifaOPBI}1 z1$zFwUh2@-fWfUXMcyf5EKfmrg1Wc?8j?6IG@`m?_e= zZlkRdt?4xD7}2j{vz6#$Df=Q2Aa72zfG#E6MvYimH*r;gn4|#ZW-SY9@jzG758u5gwt3FgQ+Bm|tQO0mmT+WJPYA0908r{@SI$_6bqv zOzSfa8`hs@max+T++JLrqpC@WvM$5Jbo#<+H(NdJS*9v1a*rOTd5WJf!3EY z^^AKph+kVP5bAV@9bPD=XcUsnW+Jh!H^Z)mO0vQR6o}Ks^nw_p^_z=6dglS%YSed9~=6lO-JevfD@+h{)pTI-|!sL zT1ke}T;DN?7$CqHvWN%HhBTm*A*y!S$io9(u#Q@oZIC_y7>FuVJAVv_f(nfopLYOh zF+X*#`YTW=i#jAj)&mydn~I_03Tea@*NCEt3ELgK?Gn65UmgxB0oBpXHV{{7@dy? ztQ_)ZKQOUJMY@4k0l0#w2!e2c2e9FC_s2I#;7>%o3l(4vN4s!7s!~;sj2u_H=0oC+ zFMPY4e8}(Iku4h77NpsmPkmW>;lzTt;}%RNeQ1y>dep1__F&l&5O^k#SJncJJ()Gw zNTZK7U|o@Y$G!5kVh&HV3IGH!#NdJA`1GJXGcNv**$MulYcntZ`{0*~%LYymtW8|R z;ZMK%*U$d;yZ`<0kH7rqPyhPc|Ni*Tzy9~n|Ni^`{{R?(0yuyKSbz&54+tm^2DpF* zn1BwbfD9Oc{+EF2P=V@@fD)L2`iFoPXn_c*fgo6a99V(i01h4qfgzZJ?l*!ZSb`P! zfhrh->&JpE_<|@XgE+W+Bd888XoETUgE}Y=9q5BVScIxafhTx_M!1CN_JA13gixq< z4j6@0ScO)2g;q?I!}va$!YSfFTOkKKjl*kFa4poBjq=zOII~&@VS94|UpV7crzak+ zI7bvG9Xuc%SAOU*l3cZJ7@1xwMNv7j{!j@Ck~Db~^*D|X86X3~ikYR7_rsDcB}W>m zC^D&8HF=aqF(D4wk5IBBhx9}a`7!0_lHL_hMR|=|VGY)Rlw9a|SSe*0q8%o)C>wWu z;`obHIg~M}bu;M|qW}OWAP2yp4qS2H|2)35`O@VYM_x!1I+^ z@s<_h1djj?bxDOB^NHfZ38nOmAQE)~af~!X5cVON%aoRcNtA49lwqNm#B>6I01Qg_ zm^mmzmS_k7qYtj22Pfx_nnn;s6@38X4;%xD;=?MQ`ImTNbbDrOeMTSMM@C8TX`%KN zrb$fc;RK`Ln5+qe`0^>0@&rv2TQ=QRnw` zAZLfp37zzbnyOiygIF&|))>!8pU^3t)QO*FSTC5#82#y=^_iNhDWI7F0Gv?{rBa}Z zai9o_pa9CCn^B<}x}hA}p&t67AR3|~I-(?6q9%HxD4L@5$(R9(pY>7zud78}X~kI)Q7x}-nqpFujLOd6$VK}<-hq*8jN zX`z@;iltnd7S>>;T^gohI;Lb=re=DkXqu*Kx~6Q}rf&MCa2ls_I;V76r*?X$c$%kr zx~F{Fr+)gUfEuWRI;j3&Xdi(|6rwX!gt~xkD0Em5hvG1Yj3#{~2@83soeN=iRaX#?xNwp(iM83OH4p%)C=m=2 zk9T8;%;KtvcM_Q75Sf^&_UDPh)?T3qmSI_npoofY=MSscoZYyT4lyI~$gEfMtSsSV z3IU7CN`JLz5Vr`e^|Ol{(2MACs9dG33~?pYc&-JJuHiab3L%UhS+41KjGQVE%BZeQ zMFJ( zKCm!4@xU>UC;oCnN0R+QF1z^-r0^{BAS|PXDcTTAuc9EYv@PB8Dc~Yn3u7$EqAa%g zp8h~8{~>r7`+YaLv2l`*p|+33nrSjBMH`d`5hNwZBamzYjNDWJ3+s+{(=|!QH$V^y z+z^?h04q}RHRh)^qS7_lRaZxoG)ARg!nF%9pf_D3KTn%_4T+OX*;&pYk@*xrK8dyH zr$tsdnqf;JD9Qv!$D~FZW=}%^Mk$p(8ZwwNy1En=wG7d0 zJBh75{&}?@leHp6TB51D8^yaTwXoXMcf6!o#G6u#MMdN!Nd2a|>V|mGn|exlxu*pw zPWh?u6P4mIjF4NH^fkFMI=>6CQ}9zK!@FL^8(OGWI3^W~>4PZG8^3A?veWC0X*ibZ zb+Oa5l>OViHU_}xN5Kk#W7xo1d~03^lfdG&y@fMaXk=LKs|HKf4}K-V#i0(f0Hz{w zm#J$@dTD#q(U%V(xM>wJ@M>A=<-ueG!U@5{2=NZn^j=r@Wu-JPD;FB07;Gh zk=d+~630fiBpRYu=8M4S8(KT&NTM4t11Dn(r%d*7ZZ`B*AQz65z477KC@Yyz4mLtmYD|? zUG_1{#auK^Lu#gWaxOL`bK*H>=V_qkG8N*=n=Bh>tj7L{64yB%dYHlX5+mPvvEu12 zrh+O8p{W4i0)KEVzd#}5fdJH?o^Z7RJ*yDkoSoY_Ih5ja!}K3+Adut{&yV*fBnN#+ z%bh|8DHS(wuj6s?nO4dWOaGG1w$aHPsucPeh+aW=7~LJ){Gm%hpmhAvvKRi+&!N#G z$`mClp)JUDw#MIMLp$@C)^%;yf?9!k-PeBo*MJ?^f<4%TUD$?w*od9jioMv3-Pn%(*pMCBl0Dg! zUD=j>*_fT#n!VYa-PxY~*`OWTqCMKAJrwVdvcs5$<|Z#7gvUpGW!3R{r7eJ=3WuZ$ ztQJvysSSuLMZ2C#lJ6ngv;BXo+NuTMyBg7!Err~_I@}THt)ST2BL1P=2XR{m!L81{ zfIKZ#I5HB{Z4lP|Bbd;7**$;{n~V|*65q`v>m{6dQr-lpvGeLJhR2)Q!Y$r1wEir! z2pK$**DK}1EbWNG=AyDJdv~Z1FY{7)O*?(1b2?!L-^(Yx3IQZZwl~Y=HDm4{tVGzKu`;jpymqfjWP95 z>!ny+u60@dy<1*c5R87ag`MlD=cy;cB#8(N;3H8!IOF43S8U}%9_L;)=R)?iGhD+N zQqcgwla!uzPJ9qh%u$fC>0Cu#T~%C%Zj=pdnCdm^j85mQv}*!E#$ui+V|M1PZc2e{ z5br>lctq<0(a8DWV}PPe1~nw2J~*V_>j+cHTX4zBkjdTlZ2^|-smIH)`O8nlGR6W0 z0Fn*Uu*@)iYI0T&bY^FG77z9TV=~kMi<_L$&H>ruV$p@mx_qwIoE~iDbz;Wq=8kUr z9L`6lH2+dmLyOQQx6ovla`a|z-!3b-1bw}XaXUx;bLz1U_N-em*9tQ?&Z%zE0Umji zS1=Ece==S3A9?dQuaG+L8P?FEJC7RMO&V`mqfi?3q9Lh>xf%U=p-8`w6bhFL`t;ct z^@};3R6mPWf0|RD^=!EH{^|5yPljM$p{Usm3p(}!;hnJ@<59_jZ5x zc#rois`gz-qjGule7}VviljUm_+SX6LTdPAc%(_H_-BZqTk800NTrQ0`GcsXiEsIw z_@$cP`JVszpdb38Kl-F!`lf&SsGs_(zxu4-`mX=_upj%fKl`*_`?i1kxS#vFzx%wO z7^h7JsjVHWz2E`=+SEbBz0Vvpi=EL|49Wfq61p9WcQPL-J~+RP5blBe6~WHqfdZ$H ztI0nauKDK*rRo985$hdZuA3pHIubhqC`^mZ;lCLM#jDlo9_POi>Cf#7f!!maMgW1Y z3xFi_{2fG?P~k#`4IMs&7*XOxiWMzh#F$azMvfglegqj(lj=W5HI!_5LZa8KF5+HohL@xl|u4GB4rqdl07 z41fSvrXk#iYlDC|>j>#&2p6}%n{5^9=ItA}aN@@EIfg8mvSo$l7$L6ksoufboiZ0ia_VD6yFF1SXn zA{Zm5iL#PA3b%1;2%wDiZp@KF9(@E-$a@|HAi@bNyzroEM6l$#5f$t(u{2D{2f?M- zQQ<;;5E<&AadPPL9W(@R{v<#<@5D1tJ@@2uA)X3!t0A&0hf#p4=6QMM`#`7NP)#mZNlefzcN z-$TJgs+R_q1MMK>;a=@lze7X=nL;sOG|q8Nw{WhMe>5jq-aojYXOX@nlGR1L2N zBy7N9FE&hC6P#=WZ(FmmSh46%gKlCS9&=u32xs)8#qnpMHKf z-H;WXH(GL$s#sd`l%XuXf{8>bs08XvDDsB-p88DQ+i%DHp+skQD992GC!K0FiuK(@cnfD2@yB^(oap7dzPlfI5CR=Om;k0(APf4f zS&itYpWOPG{vI9`u}N+ha@8?@aL9wq0nI|@7C`?X@N>sMfBpB@lOI6gC23U}3iQg*Zea<^@3k0K?i6q77OA&xs-Q zfRf;KyaxKie@`l5;)K>b$4Ss1B8(MdK&Oa&*kcJjk_-K?7Z)9ZRVK7Cv@_& zB)(%3F+hMZWDyS(`5;PQ;$%HM2})7MLxcoKM2J?=0qzOJgmB~loyg;o0P=)K)1LRl=R<1qo!3=@GY6?;c;+F9Fn+2M@FBn zGMl3^~jKD_pB5ShG4-vX+&9)_8;ykoHxY*;A}$g=<{pin6WB;RJ0109y$&{>it_ z)vtdAtbfp|R=f%fD;axa~~uxE1S$h*0Y}lZAk`8 zS;~giw5LUFYO5ky(zaH$uZ3-FWt)-Fw$`?Joo#M)yW7`3VzRddZg7P=T;dkjxW`3q za+SMW<~G;4vf*uXrOOa?%t8*#oo;ruyIr$3;}JYK?kKoBUhlDturs_z3$NUr z3T}*}i3&-yz);P$4|?Q14i%3@9ODTO+>9jJ$N@e7oMo=;)gcvJ2(lG&>BhMVR_3fo zFWRJ*4p2i4WigeYIr8X1Ag7YEPRLBP?T;fu8zIg_Cqm>TfH(dWtj*vi&sye*xAKL= zon0D-4a_}gI5c7d@D@osgdpr;TlppcPqw2#t?ZX_(M>f-w?qc?GNW{sBmT>5FHXP~ z$+hGJs0N%uPUjD<%v&M(_B99zYKf5N#zLJkm^N9~9uHJRnd-NPnl0Z}fU0fu|v+n6>%tfg4^f(z`?$e(MShqkL6s zOTer^Qqs01VZt*TMbwTGo>=_zNoI!^4Dx*ev03!hj*}p zBQP0fG8t@`0FRl7<`4_gn~3o{iHQ@t^CPl;$b@s@iCJrjK2kxJU1r{y%^Oiy~iq%<*f(Si= zlZcGr7BoD%h;TuZI3F2gvUbRVpxcx+9&PkFGdz_e4CGlkSp-5%GZg^9B0&VeLaZVhu^QPM#D-Wz<|vC+5xp#G!b+T(4YY^~ zLbgsk2(DWaqr$7Us6+7MLe0ZOdsD?$Br-(8t07^*Xc^Wp8#?y>tGtFAzKQ@y3?#*E1PNC3#vr@LhBJ_IR5*yN zMN~u)7+FU`T)JL-z=W8dcoaFs(Uc((Ap{tPV?;*b(Z{l(JbyHhf~+@$ki%ct0C1WJ zuJOoJM97a&$c3~qYp{le2tBAP8Ir+2b}33eObGlF7i76e=h2iZ;-R4PAt1U*;hDz{ z@|q}^gGiY~gLER2>x!;xjAu}yxigT{fku6>11sDGsgXR0@Sj~|CY-c6k}x}-%rVwt zuy0Vmh2Xzl8iK@9!oVCAbG$oDgAFa@qPSznj6A}D;EqLVq@jF>Uf9TxY>z}qtSd~( zbK3xuONf1dg@39$qPQTeG@1T=*aTtw#8HHZmqU(T*c^-4Ns)lThhPO1sDwttOA@QC zwMvK}88_;2iC9@EXM!Da$ODQp8{}jU5}t8G5OqR`ax2Sl8jfyTB3Nk}@^A)7&^cI>H-bYDp3(0D95}eOnt-5divh2x&}+BiWvYFcp(iiwH2M4&Ar%drO0{jR&ZJ zOK_>)d^VpwT$6Q5==LSZkXKs02UrCiv*RU%`S? zsE2?#H9zo0*;oqriT;f@1JcLq8cwMiKsktGhy`%5nit?Gt0@apa~rB*4S@jyCH)*~ zL>Bwd0c!(-P@o4YagHbLM_3D;-fIs;vQi+O9T5V6=-W_X1JUs))TA7liO`3`fE^Xh zu-_!DNpd=&gd|_^Jc&Dl7^F=~h(3p)5aV=I2xC#;nxvo@PDs*+Ouf9V1c_R?2tcLD zQ2j4R6|Q>Hhc=*4Na_b&cm<8n2R<;7k8lS_!wCL!Pg%vUQ8g}m(uXyW6-asqNFdUR z(1t}wQH~%7C_urB_>)^gR`;S+d>|3Y!WKuWbq_WW*7bB!TFo!d)^zWyZ?fS9v0sj%bO3IHI~#iGIL@ z(-7VMlmk*NjZpw_fl}Dl%!4VyaEzg18YK-2@nciaMF~@xT*^%{V^vw=?7vDm3ll zUyV@U^rf;}+}-wdIHSl(4SmU~UMsT>rVhDafg!#oD zPYH@O6NwjIU!gVl zhzHo43mH9n+goop9C8(1|6SIcWTqU||IqLYIhh=%-W`kQ6y)K@E<^ z-^^{BY8D6o@z#D=g*q9UjLEzhF#)tNGqcc-D}4>cu7=nNksH97cWA#;W;?2jg5k*37cc*V1BoNgX8{sLJv(u8ZLd{SBa zimJ?+nW>j>dF<|~>#`|Ew3#Nx6|;9B1tA$x+}7=tP~2Q=v#F{ofkuQImWad#7rXPw zP8_+rlx}4^dj1jT+hsM(vkA}V7@nPZBjFy6FPf4D4^t|O3oW5c0q6wGg zHgC$Tq1G9y!xW2P2-#fnYR?Ep zY`hbm?}2Z~hHdn55XMHI$H@FmY|r*m9uAy;6HBM;BKcj2 zj(qAOy{7ek9%xLTpYZ9+mC|*Uvc~IJ2oyjf=R!$yX=m8}jp>!X<8_lDumowV32H;y zi}+lC8eTKZE<|GA2#>zgOb89C@C(-zite5ns&Ni)oXWo66%lF?&+MBCWU;sj6qo{p zaX4CLEX)8RY-CK2WXlD8vcXu-8$SM@52s`qd6j@G3RBl>?8XIq%?X=p)#e-0L0fnsEg^SSV~@YsSd87Z+cG^QCJ5 zrU9%0c@nmOr{+%jq)-~AkuP}^){+evr++^u&Z)-+0qk~ycq*eoRnYDQHg`;Ch(%14 zbbs|O`iOQ%8*fi7aIE0dE;^eMjVf&sEPRp1feuTy`Y?gg)I%CDh=i04l+q=S(G6c} zbZVQR&0S-!fr5MsFQI-hJP45 zgmmo=wKv2m;I=^h3SQcjuRb*cZ2n{y0)yJ6tX!O%yVx**yhIZRXxYyh82~6m{=~=S z;y}lc{q=egZy;K=oLj;kBABV`pWis7sLZr()P}j)nQ*%_lg)mUE9<>%_PN!>fOA8y zZv8s;?Ao_;@9zCOS7vmg&JM~<0^@A%9$fibTKQYxII~ve75L1^S=ubndVG{vI zYsKOZfl-|Zo^|+C0oZE(H0rn`k3IVMBalIUrw<(U!AD(l@2v+_V$P`-A5ruH)z2;u z2p|xQwi$O~lL0;!nPY%C<=TuxmDkP=y$Q9Rm=CoSCJLt1^HX_0t>;=VECsdXfrkYL z!D`YGUSt}M^7*NqQ1&${P|^v8DwhBPC17eHygHCP$KER| zhqNh|z#tFyvcUd(1Hl87IrtfH5U}t;73xnbdPXja%C?)z1{USx*uMFGtCWIH?fWsw zC7XOQ$~v;6#A`vN7}dwb5opj{}FU4KX`(r+KYD0V592BZQ(Ml|;{0M?p--c{f;OZgE6OJ0et@sBxaN(nAmwQRi)YbumPC(kiS1N zP#R_C(@)GiFleFvhz%G4RACs~QE37Uqe}%ChKS5%L<-5%i43+em-`Jwe;2q0ida;r zao7Mg?t|a=diMn^TvXU#Fd>beM z!-GdOV>_%U;R#!*%U$xamz#X0+hUn1QL5uQ%!pn|Fwiz%GP9Y^e5T3ZqQ1BZvxoqg zWi6lMMZ`g~o8J5;ID53VWbzJ{)*R+6iaC}MmIQm@d?!5PDNkrt^PFPBW>~zKsCn|U zpZ@&k3hQZ4bgFYJY%&`_6ROZ34YZ*SeJDgDD$$8jw4xThC`L1?(Tz@Yme$D1@us=Z zk&@Iq04OO+m9kM$k`gQW0{{{Hn9`Zjw5B$-&P90;h)8bbe=)r&P=hMep;CqZqD~m4 zSJKxaqB6CqP6aANPY?)TNYX3J+TVqqs@1J>6`&1u!YEn_E@v=ee|_vKTGOi5Zdy~S zR2>T|P*4dZuC=aqy=yAl1Xi))wXc5tt2{yJ)~W)wu!cQsGp)f_#4@(Aj(sd-BP-d- zQns>|y)0%ktJ%$RwzHo7ENDY3+R>7>w5B~RYE!G))v~s=u6-?RV=LR)(zdp?y)ABY ztJ~f3wzt0hEpUS?+~E?pxW+v$a+9mv05CuRPG0~3M*v3v8D9VyYycU05*S+>7h^&VT^<-} z78-b77yw}!0ACpyVHq)Z7y@G#NO%=0br~CY7c_SqRx~y<06=VEBW@W#K>$H{06&pJ zIU08&Z4p0zcp-TeLXQAPofeO!#VgocA!j>VCO zX})@CN1eT%jBbdGv#yFU*1CD4zv$VzjoP}P zhRpA_z}wlqo9DcL+P$vwy>`FKoWsS!@W6hi%<8bri=l%Tl{n!8e+42AL|NY?c|Ns8~=>Puj{QvL& z|Mvd>{Qv*|A^8LW3IP8AEC2ui0MP=F0RRa80R0IZNU)&6g9sBUT*$DY!-o(fN}Ncs zqQ#3CGiuz(v7^V2AVZ2ANwTELlPFWFT*({Vj%brcUw(Z-vbL-yCySMM(z=I1PPQ1ABI+l(LZ5-NRLH$Ic#{+SWMGXjbnp7wic^>p92Yr%N zVxTI)cjqMB-BtA>Lm zuf$qH3X7HQqst8^3L(ru<$%Hj75Zr6fB#_p>`%@OlkzYC z5g#Qiq>`L^EV3|!qv5Lqt)oRe(AN5A2FUm`F^=hkP^}{9{CR+}TX+4nh(o*5z$yO7 zc%subUQu?C9EM$O{wmtk{6Z(PrLKnyQC6EiIUD+E)}$OtR!kIZ*)&`lu+NKq~Tuf9HHJmqw<`o((? z5O6iH5X+3g=3Xlh_uhlgh0ss4l4j@2(sIX2VG)nP^#loTO!U4mxh7R6=rFfx1VTvQ1;SlE!#f8Xx z7#M^))F6X*1Zj3dn}h)Mwmciffgb%B2Brk^rxkR~9cB=K=)fpOG7hVMDoK_VFBs4>fpiI2M=TX6m1wgsDNl%3B3-j4=)-{=kc1}W zWRwWWwicpMA7tng<(8KY6ZEVf&Wa_^2J#^-T2e`XbcrChX)ItEE0F}b#vKT-yjha+ zdh`BVUL_%DI%9^ZlAin~D9vZgR|T_%sN`U#46;NJ_R=5j@Pxj?G)o*>ERnbjXat9+ z%7a#PC`%OP@_OhwU-GGkwhO2zLv_!462yW+v<99;`c4Sg4RrCN9I05uE0?CTC4%&a zGJX{fdz{pk!%7zugpdkI)N`1YoSjmc>QrNeElxb0<^wEN5P%lplc@YUM+4BLw(*DP4 z;nqkpz0pQWqTs;%0goto6|9`192!f-4osfXbuLURU=w@SaK!Ng`$H;1xmruR;`OUA zLaQ(hT2^5uv?w8MZ9%f8k2&;Gu`N86SP=r+E3qk7Np0fxyv43?Np~RY1#M_i5>)1) zAPOu^Elg?ZT?fLpN&^<}{r(V!gMkdcMKEWnn&I0V=1H%PG*uA?vW?I6HKE#N=yH3= zsm`KSuHU7rGgF&U?4FQ_ouXVxKg?C3gg1$cl^}eXYdaYVcdSDzu6{LC#$A|+zy#5U zDLN3qeBct3Vbbq@P14^kHF?Eyed<%cOUgzz5g%VzD7suh00S7}WcuKQ{`I8kOBYW! zN*elDztWY66n6K`3SDKKbku;tB~q4ttuBk33t_5B7M=DOf|+Q%+o0T7zAKKwA{L6? z2yRKk1M6^9fxJ;?92Lpbh@U`Yv?a<(n6o4(qLimRk}*jjnzY+MHEX6M771z}w{XI# zt`UvbA!?{NvNbkvt!q470~(DpW(7>BE9FJ^NB}6QKQv@mXjAryUlLRgtBoWYC9@Iu zU`3-#B!D-@5d@;cqygY|jXJ)Zj=Q*AM8-ZLfZD`*E- z9v#l`r3?6?MK@ECQrVSrglg&POphBA+I5f;y&x3&T0!6jqPY4=*37dy=3)y$fF3{t zb6FqSFgg%0dC>g3BctBhllOJ3lkcHG@!OyXQYZlQ&LBhOs^0h|_QyL>NLkXhuQcA~ z;VBXeSGI;t`=z=fn(e05-~rq&&v}+-MIVS*{Kd>5#Giy$F@%R1CjI$GdmsVvVPgO$ z)+H}@l}cS)?-$--2Ps$V)bLxP#ww7XG&)W%du{#_!(IMwm3>&^$OO4X*Bm`!((ITZ zmF7NZ(j;cWvf@!dxjkr3i~hB$A2fxk046qjjZql?C;29AqcILdz-j4sf1aTa_A)nF zkPD5*6FrxApYd?af+(1RD!76y*n%$j zf-o3^GB|@YSc5irgE*LjI=F*8*n>X!gFqOBLO6s(ScFD+gh-f#O1Okf*o02_gisiT zQaFWFScO)2g;d*@ zxkxO#Fiy%vUFGKw$M}H3s2fZ4I;3)AWF}#Y(kM4XERvF1kkSg75CW&B5Yt$D`j7^0 z@BpCbOlaT(wu6BOF(>UuOBS|<43}^Dc#gY~j#M{Xw}&~*vMQ|thp`e@&uBzS&<#kk zha%RHkk*f-a0Y{QKXc#=ZU$}J7gk4nOmYyCr`t@|95oKpRFt22_@V zG*ij*l3lfQ#zc)uS#kpS4OTD@8kIcDD3x`ILoXSabD5X3;d0cI3jb%99qE|}G+NZ; zONVq{1M!y8bbw_yjt!TTD$*r}RavX3^A2}`2d*-nzSJ-NAi%I*^zk3S);{H z0&!aKgg{9!EY6vhw274cI77?+wPSHf0K-X_;&_+d`I*EC8%t9t0hyczVU?-bCquO* zM%5?LnQvxTht^4wkO^}>fHUE=o2d1jzqy%I`Hbut65PNCzi#zTf6*DAWCft=X*~IfL9FBr)7g1HB%u=loV2-nHklF9kR?s<2-2{ijsZii0Ar2W zkYt8V{Z%6W6=0-7e`T1WYPndE*+T{Z2AQH)C5N04l?$sBo=173)dUhNYD^~p2MG$J ziII+Kphq(~j=QsN=r>wzc4a3vEcieMQ92L?sb@!7l0%A60*IugSP<@T3GgRkPWmoE z0;VG|rS%B_E&8HZIvD=67NwGfF!oc4bcBf>XgII-QnEHKfTAR_6{!ZHA=EQ|1~I1t z(RdG9dYzIEBLIFAV_0;wr2okAb6!_-laeKsLWf+%t9Gb;cnE?~!ViBSpN4lZwU<8Sf`;~U5Qa!T zi1??&YK|V^r?zTLfvT%Ah_2~shE;l{?8<`f`mTSvuJd{j_PVe9+OPiluK*jc0z0q- zTd)Ruun3#50b8Zqkgo&*02+v}@tUg+JAws^uN7;83yZ56tAhTDu^sEN?>ey|`+~L# zvL)++w<@nG+y1VA>Y^=sgYqB`FZ4=K@il@Buevw!sl%41tgrp<5|2CJ-=*pwj^YsJFerw+nG8=E{1^g!XPbmpU7|^#^igc~d5pBdl3+WMg(@dJKz@Z#@H>$RR(@GC z!vz*fP*s#6%ornlT&a{?{iJ>Ipu$rr5b{J%GF$|$cf?pLVmI80YV{&g3_GvYdO_?M zLu^(cmRwnN5K6q6Q`J;XgQNs8#tea);7X!bd<<;NG+cIIT^zvK%V>Faa5dIjWy~!8 zvc*~=gqHQ!$BpK>4;VJ)q*hx3xCG(HKWxW$EE!+i!+YE%r`8V?_Q!dWU?P+}hno%2 zfXT3?$qxu@Y1%dffGBFkDWr@pn;gkpToTgo1COu_lgxp6Ou}bXz+`4-Xr^X(wuUXN zWyWH0A%hQqFc0|#%-bW(WK3ppJ24L`qkX2z&YWh}v&C0w66gvCu|To8oE2zmaAA{h z-X;m86K?s?Y;zM`@-{HKB5lG(Y`Yc>^qD2*O@BdxXwQ7_#}wjy?RX}5NZCDTxMwLceh+R73U{UzWm&J`VzCrT7WZH5z_ z)JhG)LDAHA``_=b{uwW1ibbZzOL9jo-2g^XSeBB=bo7a0i*#6P4e;wF}Js|dK*o|!wlCTL*Q)eHmBcz6N1Foc<@>oEENGvI6@z z5nJ1}fKo=Tz#)YamCYR)lI5EP@nrSK#o;YPeCYsu`VelLN^t89B~T}-(~9FA86_g# zz)NWT&BaLRD-WFzj(kE3ptn|ZkzF2d%e!gQ1``_d|Cv=1x}1TNmqNNGur)goyebig8-18|bYG&|Un zF!%Ec-Sa&M;Lj(n7wMn{9im@0GH}%}1syOuPo6kZ4&p*YE?i1lpyyg-hDNodU1P#U zUNjASG)7XL*gDVyVmnEN@;-B_iSVIaoO6Q(>OH{?Me5Jq3`dtmb;L4z0PN zk>vvx13{9N=>EN)@)c3~LU|3R=Otdik}yhk48(#?7e1PPwFE(*-snt|l5&&IBSq;J zgI0|dcACEFaY2D*h{7qBKo#ZTwW-PpeCm?C!j}xi-Q4P~{uVN|TP{`W&1LLZE@DoT z=exe=xI%L1B4oQB>~~RK7mSwh^jY+1>ov|iufptLUg;}DrUId9z)tOJL79}R%KH{! zu}NsJ{NXe{;fmE;7P&WAhKMU811{b$0&GC6EB^*9 z|MI(K-C4p^|2MbUV+|A_2-hN-2w)6Uhs6E9E>vrXXukuGmGE=u-K~Qne|(5uQK?&)d!klU-kS-gNkGD zSjqMRTZ5STpj|lk1zUsk3EfqA4q6}Ah@be1zxa&b_>E5ym_zPaxD1c*0|;w_gr}re zcn+}u2Z3*cz>okZLik!p`IZl`H~0+`(9u}Q`JUgeH+Z#WP@bmm_Mk8N%(tMfPxdzG z3ROq)d0G2kg84|2B?=JeFuMCzFN3fS0LT6xvVuy3NBsO(9~~D>{nh^*zF&0?p8dPXJNI z-#~%|4IV_8P~k#`4IMs&7*XOxiWMzh#F$azMvfglegqj(KYf}U7&wJ7 zT?tYH$K@am^V%2yxDW1it#BNU09@P>99L^(^wia@U&sCw?TrekhSJnL+h1%1$1e6- z&>N@bwa5Bz;WjU2Xzj(F}R1qrgJ2ms=vh{N@C@CK;l2+B~t zGw6d32OvROZb%f5B+4CCn4r-hC7IN)q;l>cK!7#0p^ZQQgb)Tv)l|8`Km=oYaiADy z{BAgwvOusOWq>%HWwJI01b9PLe-b62yJ}$Zl0_eWuE&HPrdf?E z(5ct~#jXV)2w8sq!-JnmGH@?cgK7IzTb6qDhq0UeA-DqfcosqtoF_S;*S#3+XP6J` z1rSs58Vama3<)rspplv0^S0a~qAb3>jG%=Bt3uP@LW|ZO$Q?)A23tVZcC1OWw8^qjQ7#EbFWgjlAHuK+kdIBj2(9>~V1 zVo(`rAp4O70L2JuFi#t4KI1{$$Nnkh@p7l}#dJ(CZ#+vz4E!_|O(z@ed?B~~EJ+>& zbQcGXeyG7FDa(^1%D9gW{OCbq%)<3H8!UhLe>BT8Mk8Z~{a^-~2VMS(u)l|u zNq^8oUDN)cFqXy1Y(xFCQH*GWJ2X+SN%+7*d~o-mhi$M|=^z2qj(0oceFuM5u?7U5 zW-Dl|?>gTQgBezLz4v4fA(7J__dut^>NTl%nAynrMA#r6x^N>H980yp^MJ8c?oOO} z*8wL3JIYYccD<3}>x^W;0U}Tb3-ZTLin9s_ddf&P;u&W=W5MfPgGwCip9dkAHG@Qs zjRQF$(uyO9aT&2X{jkI-FlE1m;P8evJct|%5~Cs(5|KaDOYnxcE!X+6B4X(b7;Unz zMHYdOo!s9QL1#tW0V#|8+aePebjpJya3Gi}ju$E^N>r*xGp@TMLD0ekA*2Ela5Rz} z75+((TjnE|d8CbP#*!>cq9z?lhzBbR!YpLb0+G~wgEcETOgui|UF>m;xAFv;!3-c1 z+rm|vh$BA)>Eji5;6OJDaRBFdN{0;!rQiCr0$FG%8)}i%C#-UfUEx7Z1~5d6Xag)O z^^sUqFcz|u#VlvF&>ylwm9m-wO8^KYC!BoUC;Pz;e@OFp{X1S1yXeGJl5VA^`(i<2 z!>yS?5O(6r7CekuLSGf40l86R2e;QNL*fwvE;;4{2sxk*%&?iJ*+p4$S&-k{Y#*AK zf(@&RGpr)gAj6cE;=Y4H;Yr1QMTKPd1O~N&O+!Thz`!8Xp@t^%k9&IofbpQi{)36R z!wi&L-oI93H*iWp6#4M0Qx*8Ms7(!>Rl6D;Q^z&0sb?=%wb<^Og2bii1f+o49_t9Q z4V9U+f4$h8hA3k^Ru)i|pbKSYVp=)ApvgyPgk6mMCDUf?)V6c%RZ!zNRBh=Mat-)b zQu9O&i!SGrPo;}JlzPnEG z1mFr-LQ5h#7s`jN!w2A-)?8ZKKQ6|Wn6oWN`(_EeA;kuvZqWxPf^oe5-zrkL!6dFf zQt~<6?M}HUTtat|_FU+iMHzAUjt~u^j0ofhhfH>|S7n;xWqATpKo}Q!l?p_(q8Bsu z17aS_`#{UcFBjReMw4OGMcf%+V&f5Le=|p15Q?yr3g+qkwtPPos*1TKEy4uztP~24 ziiR*rpWeReJrjVr^9*_xQD*{&;jjJnYm&4`kD#H3+(hhLGjVGSZjE9a-?f zihSTTe)Ys_lMIKAecZwcExATCQr(DE=Yy=GWsI9C)(RWEMvt1sl)+MXVNB-$)J1-a zKIQ1FSJ>zjM_kz+h;Tps=jrpzw6)(S+?A|CIIkrD20Bwc@U0( zVxV&+Tz~|gfJo!PSeIX2xZZ;YGn;WRL87tK5?kD&@(1Otp_p31j4|!dJaO;VNq$fZD(&$`Ha*&kN%mdGsLMubjp;x1Hj~fhkfjq z@=Q&3vwYmNBez9A1@!3Y zO@r9o3*^!`d3*kIx2vMt^^T{vtjEH;Wxsy*AEh6yP~vs5pjgcq7l-w)9eZ=A@Al1R zn1gIQ;RB)yW3~)yFLbLZ9a;{lv9I*YIkW==bLfXjAPt;qI}9?O9V3k%1Gm!KGiwMk z{;3KVODNiqv8IT)?`pplWI@pIn)pK^VY{ewk(91^f~lYnm#M*FxIq9gv5^t2ec%PP zAe>pNwL0h%$G|JS3JnKfKI&_<*J#49Q=o4v{s>I*w{Eix<7l&l3JnPmtjeeW!77AN z8;D?=n2ISj??Sfk`HN-4lHXt*S2MaxTMCSmxE9pIJuHcMu_BebjEgdrrP~Dzzyt)r zsO~7lL+qBK`<5+91&!*OreYIopa4PW5`=TTj#Iz!P`ZW!w1BI37j&=N_pt2Iy*c5;%x2|7I+I!8RZq*Dug@s*hS6Q|HbD&)grG{$562+&gsd60*k z_=X9v3)Xm-G&EE9Q z-vrL!6wcu!&f+xA<3!HnRL%`9N)XweX&hGTi?*z~A z6wmP_&+;_S^F+_|RL}Kf&-QfB_k_>*l+XF3&!k92P^{1VY(GHEB$z0db4iz+OvWXN z3^u5hnFvS1Fbw@

nb>g=z@uxQMu6J2fb~k(k6)tg;UXOqt-DW%(Q9XwVU@5tKp+ z{LqaM07;Mt4G6G9i0J@!gNe55G!nJZhiI^d5D|>ny^{Ee=c1qseF@MbqIA5`Bb_3b zJcvvq$`$np?YbU(g8rV7AW}-oMNxQY1v{J+<1F+0hX%#AX6$4lWU~o4d z>L0d@Er3+p36JQXojm4}KbWGPt3emZ zdZ4@F3w9d^zCx_Onv1}qjY1%-%?JR)+E&GKnoVgee~8w|(i%0OtgivqXBAdcjZMpW zsT)&|1*;_*{u5F|f+QRH1`wDFHquvGnljg;HYWH4Y9kf~n0 z;=@i3Q=pqjl|8Y5N}87J8QBLxXs(5fI0{JMxUGc;2(*dm2Cdo$_t*le^qcnhH^ zBcb0Cvp$0uXjxkCyHb}GO?z!IoBd)(0TsuUtUutmTuX)4YcUw_!%nKjCO=q>3r zqeLR-T%U6TsSU_L{J z8HLEuTJamPZ8rgUSIkSDGK00sXv6nXn+3X1EaW3CBn+UEgctk5FkA~VG(!avHZ?Rh z6&d9>RG~O@wh9Gh2*u-L)L|ap$dcgC7$5{Z@dfxn*qwVh{PmNWW9A3Z#PYDYE5SLP zTQ~t=gGphkXl@84nH6q6&~|%)P=FLj{Y6NTIb3W>qKhAWOHdlYB-={GH~xh)SA>)~ zJs(+o88)fKJ}Fgq_Ca_yIy^u+rSnCYW9MKD=3~@jJ`PH91YfOC#)lrvVRlN2M%u2p zXpDBth>l8*&fKN=Xplxqji$6^ysoYv``=INg9f+H0q|V7omnqr$}G5yw>Zz=Ig%p>%RuHMrtHeL?90aN%+~D9=IqY)?9T@6U(goq(I)NEHto|! z?bKH7)n@J1cJ0@O?bw#>*{1Eg;U@0lHtyp_?&MbP l89@Lw(jf3?(Ej??dI<8Zt8#l06SYtpH%<= literal 0 HcmV?d00001 diff --git a/Virtualization/figures/PAPR-71.gif b/Virtualization/figures/PAPR-71.gif new file mode 100644 index 0000000000000000000000000000000000000000..afe7f1c38eb25b205f6af599cff4ab894a3cef4e GIT binary patch literal 6968 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 K27Bm$0028VA2dGz literal 0 HcmV?d00001 diff --git a/Virtualization/figures/PAPR-72.gif b/Virtualization/figures/PAPR-72.gif new file mode 100644 index 0000000000000000000000000000000000000000..c9a2d945cf0ee29e6c48970c356337e14c368d3d GIT binary patch literal 5471 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 literal 0 HcmV?d00001 diff --git a/Virtualization/pom.xml b/Virtualization/pom.xml new file mode 100644 index 0000000..2d4eb79 --- /dev/null +++ b/Virtualization/pom.xml @@ -0,0 +1,148 @@ + + + + + org.openpowerfoundation.docs + workgroup-pom + 1.0.0-SNAPSHOT + ../pom.xml + + 4.0.0 + + + LoPAR-Virtualization + + jar + + + LoPAR-Virtualization + + + + + 0 + + + + + + + + + org.openpowerfoundation.docs + + openpowerdocs-maven-plugin + + + + generate-webhelp + + generate-webhelp + + generate-sources + + + ${comments.enabled} + LoPAR-Virtualization + 1 + UA-17511903-1 + + appendix toc,title + article/appendix nop + article toc,title + book toc,title,figure,table,example,equation + book/appendix nop + book/chapter nop + chapter toc,title + chapter/section nop + section toc + part toc,title + qandadiv toc + qandaset toc + reference toc,title + set toc,title + + + 1 + 3 + 1 + + + LoPAR_Virtualization + + + LoPAR_Virtualization + + + + workgroupSpecification + + + + + workgroupConfidential + + + + + draft + + + + + + + + + true + . + + + bk_main.xml + + + + + ${basedir}/../glossary/glossary-terms.xml + 1 + www.openpowerfoundation.org + + + + + + diff --git a/common/app_EOD.xml b/common/app_EOD.xml new file mode 100644 index 0000000..d166964 --- /dev/null +++ b/common/app_EOD.xml @@ -0,0 +1,27 @@ + + + + + End of Document + + + diff --git a/common/ch_LoPAR_preface.xml b/common/ch_LoPAR_preface.xml new file mode 100644 index 0000000..0659d63 --- /dev/null +++ b/common/ch_LoPAR_preface.xml @@ -0,0 +1,31 @@ + + + + About This Document + + + + + + + + diff --git a/common/sec_LoPAR_audience.xml b/common/sec_LoPAR_audience.xml new file mode 100644 index 0000000..c6a5a1b --- /dev/null +++ b/common/sec_LoPAR_audience.xml @@ -0,0 +1,48 @@ + + +

+ + + Audience for This Document + + This document defines the platform and system requirements for designing + LoPAR platforms. This document is the primary source of information that a platform, + OS, or hardware component developer would need to create compatible products. + Additional requirements are defined by the industry standards referenced in this + document. + + This document describes the platform to OS interface which must be provided + in these platforms. Platform designers must assemble components and firmware which + match this interface. Also, the document defines minimum system configuration + requirements. Platform designers must meet or exceed these minimums to build a + standard platform. + + This document must be used by those designing compatible software including + the OS, boot software, or firmware. If a function is supported, software developers + must provide support for the interfaces described in this document. This software + must provide the mandatory functions and capabilities as described in the requirements + in this document. However, this document does not limit this software from going beyond + the specification through software tailored to specific hardware. For example, the OS + must implement the interface to the required abstracted interfaces to hardware, but the + OS may also implement fast paths to specific hardware that it recognizes. + +
diff --git a/common/sec_LoPAR_conventions.xml b/common/sec_LoPAR_conventions.xml new file mode 100644 index 0000000..b793238 --- /dev/null +++ b/common/sec_LoPAR_conventions.xml @@ -0,0 +1,182 @@ + + +
+ + + Document-specific Conventions + + + Requirement Enumeration + Within the body of this document requirements are clearly defined by separate + paragraphs beginning with a bold text sequence number. A list of all these are + available as a separate document. These requirements may point to other standards + documents, or figures or tables which conveniently show the requirement. The + referenced material becomes part of the requirements in this document. Users of this + document must comply with these requirements to build a standard platform. Other + material in this document is supportive description of these requirements, architecture + notes, or implementation notes. Architecture or implementation notes are flagged with + a descriptive phrase—for example, “Hardware Implementation Note”— + and followed by indented paragraphs. The descriptive material and notes provide no + additional requirements and may be used for their information content. + + + + Big-Endian Numbering + Big-Endian numbering of bytes and bits is used in this document, unless + indicated otherwise. Numbering of bits starts at 0 for the most significant bit and + continues to the least significant bit, unless indicated otherwise. All data structures + used for communicating between the OS and the platform (for example, RTAS and hypervisor + calls) will be in Big-Endian format, unless otherwise designated. + + + + Hypertext Links + This document makes use of hypertext links. Cross references, Table of Contents + entries, List of Tables entries, and List of Figures entries are all clickable hypertext + links, to make navigation of the document easier. + + + + Specific Terms + In this document: + + + The term “Processor Architecture” (PA) is used to mean compliance with + the requirements specified in . + + + The term “processor” is used as a general term to mean “processor, + ” or “processor core,” or “thread of a multi-threaded processor + design.” In any case where it makes a difference, the specific terminology for that + case is used. + + + The term “real” used in relationship with addresses is a generic term + that means “processor real address” when the platform is running in SMP (non-LPAR) + mode and partition “logical real address” when the platform is running in LPAR + mode. + + + The term “PCI” is used as a general term to describe the most recent + versions of all forms of PCI standards. In cases where there are significant differences + between individual PCI standards, the following terminology is used to differentiate between + the PCI standards: conventional PCI, PCI-X, and PCI Express. + + + + + + Typographical Conventions + Typographical conventions used in this document are described in + . +   + + Typographical Conventions + + + + + Text Element + Description of Use + + + + Rn-m-x. + A requirement number. The number “n” indicates a requirement + sequence number and is changed only when it is necessary change the sequence numbers + of one or more requirements on an update. The number “m” is the section + that the requirement appears in, and the number “x” is the number of the + requirement within that section. The sequence numbers are automatically generated and + are restarted at the beginning of each new section. Sequence numbers for existing + requirements will not change unless it becomes necessary to insert a requirement between + other requirements or to add a section that renumbers other sections (at which point, + the number “n” will be incremented for the next publication of the document). + + + Italics + Used for emphasis such as the first time a new term is used. + Indicates a book title. Indicates PA instruction mnemonics. + Indicates RTAS function, field names, and parameter names + + + Courier Bold + Indicates OF properties, methods, configuration variables, node names + and encode functions (for example, encode-int and + encode-string ). In addition, OF properties are enclosed in quotes. + Indicates NVRAM partition names + + + “Courier” (not bold, enclosed in quotes) + Indicates a character string value. + + + 0xnnnn + Prefix to denote hexadecimal numbers. + + + 0bnnnn + Prefix to denote binary numbers. + + + nnnnn + Numbers without a prefix are decimal numbers. + + + 0xF... FFF100 + This hexadecimal notation represents a replication of the hexadecimal + character to the right of the ellipsis to fill out the field width. For example, the + address 0xF... FFF100 would be 0xFFFFF100 on a processor with a 32-bit address bus or + 0xFFFFFFFFFFFFF100 on a processor with a 64-bit address bus. + + + 0:9 + Ranges of bits are specified by two numbers separated by a colon. The + range includes the first number, all numbers in between, and the last number. + + + 0xm-0xn + A range of addresses or values within the document is always inclusive, + from m up to and including n. + + + <token> + This notation means the character or character string named within the + less than and greater than symbols is used in the place of the symbols and name. For + instance, the property name “ibm,sensor- <token> + indicates the set of properties + “ibm,sensor-9000”, + “ibm,sensor-9001” , . . . + + + Reserved For Compatibility + This notation is a placeholder used to reserve numbering (for example, + chapter, section and requirement numbers) so that subsequent numbering remains consistent + with document changes. + + + NULL vs. null + NULL designates an ASCII NULL string (0x00). The term “null” + indicates the empty set. + + + +
+
+ +
diff --git a/common/sec_LoPAR_goals.xml b/common/sec_LoPAR_goals.xml new file mode 100644 index 0000000..8808489 --- /dev/null +++ b/common/sec_LoPAR_goals.xml @@ -0,0 +1,89 @@ + + +
+ + + Goals of This Specification + + The specific goals of this specification are as follows: + + + + + To provide an architecture which can be supported by converged AS/RS hardware designs. + + + + To create a stable platform architecture to be used by platforms based on processors + defined by . Processor + implementations based on this + architecture include IBM POWER8™ processors and their successors. + + + + To create an architecture which will allow platforms to operate with previous versions + of the OS (“n-1” capability). + + + + To leverage existing and future industry-standard buses and interfaces. + + + + To provide a flexible address map. Another key attribute of this specification + is the relocatability of devices and subsystems within the Processor Architecture (PA) + address space. Subsystem address information, which defines where I/O Adapters (IOAs) + reside, is detected by the OF and passed to the OS in the device tree. This architecture + accommodates the use of multiple identical buses and IOAs in the same platform without + address conflicts. + + + + To build upon the OF boot environment defined in + . + + + + To provide an architecture which can evolve as technology changes. + + + + To minimize the support cost for multiple OS versions through the definition of common + platform abstraction techniques. Common and compatible approaches to the abstraction of + hardware will reduce the burden on hardware developers who produce differentiated machines. + + + + To architect a mechanism for error handling, error reporting, and fault isolation. This + architecture provides for the implementation of more robust systems, if desired by the system + developers. + + + + To architect a mechanism for Dynamic Reconfiguration of the hardware. + + + + To provide an architecture which allows for the logical partitioning of system resources, + in order to execute multiple concurrent OS instances. + + + + +
diff --git a/common/sec_LoPAR_reading.xml b/common/sec_LoPAR_reading.xml new file mode 100644 index 0000000..b225386 --- /dev/null +++ b/common/sec_LoPAR_reading.xml @@ -0,0 +1,52 @@ + + +
+ + + Suggested Reading + + provides a full list of references and ordering information + for these references. + + This document assumes the reader has an understanding of computer architecture in general, + the Processor Architecture, the various Peripheral Component Interconnect (PCI) specifications, + and OF. Some understanding of the current personal computer and workstation architectures is also + useful. A list of suggested background reading includes: + + + + . + Note that this specification is referred to as the “Processor Architecture,” or “PA,” + in the body of this document. + + + + + + + + + + + + and relevant bindings + + + +
diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..300f7b1 --- /dev/null +++ b/pom.xml @@ -0,0 +1,27 @@ + + + + + org.openpowerfoundation.docs + master-pom + 1.0.0-SNAPSHOT + ../Docs-Master/pom.xml + + 4.0.0 + + workgroup-pom + pom + + + + + Error Handling + RTAS + DeviceTree + Virtualization + Platform + +

-kD6H!8knwzv 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 literal 0 HcmV?d00001 diff --git a/Virtualization/figures/PAPR-25.gif b/Virtualization/figures/PAPR-25.gif new file mode 100644 index 0000000000000000000000000000000000000000..f99ca2e87822b54882aee9bf7db05349ca5e06e3 GIT binary patch literal 2908 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 hiq*uk4z85;>!X0#{{Vn->_`9r literal 0 HcmV?d00001 diff --git a/Virtualization/figures/PAPR-26.gif b/Virtualization/figures/PAPR-26.gif new file mode 100644 index 0000000000000000000000000000000000000000..94aa548c08c61c558999bf4093262c690bd1cf44 GIT binary patch literal 3934 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 literal 0 HcmV?d00001 diff --git a/Virtualization/figures/PAPR-27.gif b/Virtualization/figures/PAPR-27.gif new file mode 100644 index 0000000000000000000000000000000000000000..b551f9a4d649bc7301878ed59e8a6f040aa84ee4 GIT binary patch literal 3890 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 A-~a#s literal 0 HcmV?d00001 diff --git a/Virtualization/figures/PAPR-28.gif b/Virtualization/figures/PAPR-28.gif new file mode 100644 index 0000000000000000000000000000000000000000..1e372b27e029db73a18eda41540a3aae4b9b2342 GIT binary patch literal 3708 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 amTcLUZuypQ8JBW7mvmW|c3Bhw0RTI_O9;pS literal 0 HcmV?d00001 diff --git a/Virtualization/figures/PAPR-29.gif b/Virtualization/figures/PAPR-29.gif new file mode 100644 index 0000000000000000000000000000000000000000..f49ed3f15795e75b6a0c62edc9cbde60f041c96d GIT binary patch literal 13741 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 X&U3Ewo%6isKL0t;gD&)U2Lu2+^s!AO literal 0 HcmV?d00001 diff --git a/Virtualization/figures/PAPR-29_t0_31.gif b/Virtualization/figures/PAPR-29_t0_31.gif new file mode 100644 index 0000000000000000000000000000000000000000..f1e49df5335d218893eba22a51316fc54c384637 GIT binary patch literal 30147 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 C=t2Ad literal 0 HcmV?d00001 diff --git a/Virtualization/figures/PAPR-30.gif b/Virtualization/figures/PAPR-30.gif new file mode 100644 index 0000000000000000000000000000000000000000..701cbeb5e3f854c7ff98ae5fe9920a2a29217af5 GIT binary patch literal 8868 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 YRnP@x&<1tT2ZhiGmCy+t&VT>_JLE=|a{vGU literal 0 HcmV?d00001 diff --git a/Virtualization/figures/PAPR-33.gif b/Virtualization/figures/PAPR-33.gif new file mode 100644 index 0000000000000000000000000000000000000000..46ab5383f42cb01dca5c43ad9177da081f965721 GIT binary patch literal 26293 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 literal 0 HcmV?d00001 diff --git a/Virtualization/figures/PAPR-58.gif b/Virtualization/figures/PAPR-58.gif new file mode 100644 index 0000000000000000000000000000000000000000..6f1bcc06aff73d1eb8533aaec57532b249601858 GIT binary patch literal 51990 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

RjPT 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 VJNEcvkV6)EWRgoZIkbQP06TTLQjP!s literal 0 HcmV?d00001 diff --git a/Platform/figures/PAPR-3.gif b/Platform/figures/PAPR-3.gif new file mode 100644 index 0000000000000000000000000000000000000000..a9bec6868a845e47b192b6a0a3e885cb089d4efb GIT binary patch literal 15002 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 literal 0 HcmV?d00001 diff --git a/Platform/figures/PAPR-32.gif b/Platform/figures/PAPR-32.gif new file mode 100644 index 0000000000000000000000000000000000000000..b188589d466b1567fdef0f4cf8b3957ac3e1bab9 GIT binary patch literal 31377 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≫h(T{&2-Y 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 literal 0 HcmV?d00001 diff --git a/Platform/figures/PAPR-8.gif b/Platform/figures/PAPR-8.gif new file mode 100644 index 0000000000000000000000000000000000000000..65df618712385c6032e9f8155de8a56a4612309a GIT binary patch literal 57083 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 Mee=8D&JG9wJBwIDiU0rr literal 0 HcmV?d00001 diff --git a/Platform/pom.xml b/Platform/pom.xml new file mode 100644 index 0000000..da1ba91 --- /dev/null +++ b/Platform/pom.xml @@ -0,0 +1,148 @@ + + + + + org.openpowerfoundation.docs + workgroup-pom + 1.0.0-SNAPSHOT + ../pom.xml + + 4.0.0 + + + LoPAR-Platform + + jar + + + LoPAR-Platform + + + + + 0 + + + + + + + + + org.openpowerfoundation.docs + + openpowerdocs-maven-plugin + + + + generate-webhelp + + generate-webhelp + + generate-sources + + + ${comments.enabled} + LoPAR-Platform + 1 + UA-17511903-1 + + appendix toc,title + article/appendix nop + article toc,title + book toc,title,figure,table,example,equation + book/appendix nop + book/chapter nop + chapter toc,title + chapter/section nop + section toc + part toc,title + qandadiv toc + qandaset toc + reference toc,title + set toc,title + + + 1 + 3 + 1 + + + LoPAR_Platform + + + LoPAR_Platform + + + + workgroupSpecification + + + + + workgroupConfidential + + + + + draft + + + + + + + + + true + . + + + bk_main.xml + + + + + ${basedir}/../glossary/glossary-terms.xml + 1 + www.openpowerfoundation.org + + + + + + diff --git a/README.md b/README.md new file mode 100644 index 0000000..2905127 --- /dev/null +++ b/README.md @@ -0,0 +1,105 @@ +# Linux Architecture Reference Specification for OpenPOWER +This repository hold the source for the source for the +Linux on Power Architecture Reference documents. There are +multiple component documents as follows: + +* The Platform (../Platform/) document describes the basic +requirements to run Linux on the hardware platform. + +* The Device Tree (../DeviceTree/) document describes the +structure and bindings associated with the device tree +definitions for OpenPOWER systems. + +* The Error Handing (../ErrorHandling/) document describes +the error reporting and recommended error procedures for the system. + +* The run-time services or RTAS (../RTAS/) document describes +the firmware interfaces available to Linux running on the system +and in a VM. + +* The Virtualization (../Virtualization/) document describes the +environment by which virtualized OS images are run on the system. + +The basis for this document was the +[*Linux on Power Architecture Platform Reference (LoPAR)*](https://openpowerfoundation.org/?resource_lib=linux-on-power-architecture-platform-reference) +Version 1.1, March 2016. It was derived from an IBM document known as the *Power Architecture Platform Reference (PAPR)* Versions 2.7. While much of this +documentation may apply to the IBM PowerVM (LPAR) environment, it will serve as a good base for the OpenPOWER documentation effort as well as support the +more broad IBM Linux on Power community as well. + +To build this project, one must ensure that the Docs-Master project has +also been cloned at the same directory level as the Docs-Template project. +This can be accomplished with the following steps: + +1. Clone the master documentation project (Docs-Master) using the following command: + + ``` + $ git clone https://github.com/OpenPOWERFoundation/Docs-Master.git + ``` + +2. Clone this project (Docs-Template) using the following command: + + ``` + $ git clone https://github.com/OpenPOWERFoundation/Linux-Architecture-Reference.git + ``` + +3. Build the project with these commands: + ``` + $ cd Linux-Architecture-Reference + $ mvn clean generate-sources + ``` + +The online version of the document can be found in the OpenPOWER Foundation +Document library at [TBD](http://openpowerfoundation.org/?resource_lib=tbd) + + +## Contributions +To contribute to the OpenPOWER Foundation template document project, contact Jeff Scheel \([scheel@us.ibm.com](mailto://scheel@us.ibm.com)\) or +Jeff Brown \([jeffdb@us.ibm.com](mailto://jeffdb@us.ibm.com)\). + +Contributions to this project should conform to the `Developer Certificate +of Origin` as defined at http://elinux.org/Developer_Certificate_Of_Origin. +Commits to this project need to contain the following line to indicate +the submitter accepts the DCO: +``` +Signed-off-by: Your Name +``` +By contributing in this way, you agree to the terms as follows: +``` +Developer Certificate of Origin +Version 1.1 + +Copyright (C) 2004, 2006 The Linux Foundation and its contributors. +660 York Street, Suite 102, +San Francisco, CA 94110 USA + +Everyone is permitted to copy and distribute verbatim copies of this +license document, but changing it is not allowed. + + +Developer's Certificate of Origin 1.1 + +By making a contribution to this project, I certify that: + +(a) The contribution was created in whole or in part by me and I + have the right to submit it under the open source license + indicated in the file; or + +(b) The contribution is based upon previous work that, to the best + of my knowledge, is covered under an appropriate open source + license and I have the right under that license to submit that + work with modifications, whether created in whole or in part + by me, under the same open source license (unless I am + permitted to submit under a different license), as indicated + in the file; or + +(c) The contribution was provided directly to me by some other + person who certified (a), (b) or (c) and I have not modified + it. + +(d) I understand and agree that this project and the contribution + are public and that a record of the contribution (including all + personal information I submit with it, including my sign-off) is + maintained indefinitely and may be redistributed consistent with + this project or the open source license(s) involved. +``` + diff --git a/RTAS/app_bibliography.xml b/RTAS/app_bibliography.xml new file mode 100644 index 0000000..0c73bb3 --- /dev/null +++ b/RTAS/app_bibliography.xml @@ -0,0 +1,284 @@ + + + + + Bibliography + This section lists documents which were referenced in this specification or which provide + additional information, and some useful information for obtaining these documents. Referenced + documents are listed below. When any of the following standards are superseded by an approved + revision, the revision shall apply. + + + + + + Linux on Power Architecture Reference: Platform and Device Tree + + + + + Linux on Power Architecture Reference: Device Tree + + + + + Linux on Power Architecture Reference: Error Recovery and Logging + + + + + Linux on Power Architecture Reference: Virtualization + + + + + + + Power ISA + + + + + IEEE 1275, IEEE Standard for Boot (Initialization Configuration) Firmware: + Core Requirements and Practices + IEEE part number DS02683, ISBN 1-55937-426-8 + + + + + Core Errata, IEEE P1275.7/D4 + + + + + Open Firmware Recommended Practice:OBP-TFTP + Extension + + + + + Open Firmware Recommended Practice: Device + Support Extensions + + + + + PCI Bus binding to: IEEE Std 1275-1994, Standard + for Boot (Initialization, Configuration) Firmware + + + + + Open Firmware: Recommended Practice - Interrupt + Mapping + + + + + Open Firmware: Recommended Practice - Forth Source + and FCode Image Support, Version 1.0 + + + + + Open Firmware: Recommended Practice - Interrupt + Mapping, Version 1.0 + + + + + Open Firmware: Recommended Practice - TFTP Booting + Extensions, Version 0.8 + + + + + Open Firmware: Recommended Practice - + Interposition, Version 0.2 + + + + + MS-DOS Programmer's Reference + Published by Microsoft + + + + + Peering Inside the PE: A Tour of the Win32 Portable + Executable File Format + Found in the March, 1994 issue of Microsoft Systems Journal + + + + + ISO-9660, Information processing -- Volume and + file structure of CD-ROM for information interchange + Published by International Organization for Standardization + + + + + System V Application Binary Interface, PowerPC + Processor Supplement + By Sunsoft + + + + + ISO Standard 8879:1986, Information Processing + -- Text and Office Systems -- Standard Generalized Markup Language (SGML) + + + + + IEEE 996, A Standard for an Extended Personal Computer + Back Plane Bus + + + + + PCI Local Bus Specification + All designers are responsible for assuring that they use the most current version of this document + at the time that they design conventional PCI related components or platforms. See the PCI SIG website + for the most current version of this document. + + + + + PCI-to-PCI Bridge Architecture Specification + All designers are responsible for assuring that they use the most current version of this document + at the time that they design conventional PCI related components or platforms. See the + PCI SIG website for the most current version of this document. + + + + + PCI Standard Hot-Plug Controller and Subsystem + Specification + + + + + PCI-X Protocol Addendum to the PCI Local Bus Specification + All designers are responsible for assuring that they use the most current version of this document at + the time that they design PCI-X related components or platforms. See the PCI SIG website for the most + current version of this document. + + + + + PCI Express Base Specification + All designers are responsible for assuring that they use the most current version of this document + at the time that they design PCI Express related components or platforms. See the PCI SIG website for + the most current version of this document. + + + + + PCI Express to PCI/PCI-X Bridge Specification + All designers are responsible for assuring that they use the most current version of this document at the + time that they design PCI Express related components or platforms. See the PCI SIG website for the most current + version of this document. + + + + + System Management BIOS (SMBIOS) Reference + Specification + + + + + (List Number Reserved for Compatibility) + + + + (List Number Reserved for Compatibility) + + + + (List Number Reserved for Compatibility) + + + + + IBM RS/6000® Division, Product Topology Data System, + Product Development Guide + Version 2.1 + + + + + Single Root I/O Virtualization and Sharing Specification + All designers are responsible for assuring that they use the most current version of this document at + the time that they design PCI Express SR-IOV related components or platforms. See the PCI SIG website + for the most current version of this document. + + + + + Multi-Root I/O Virtualization and Sharing Specification + All designers are responsible for assuring that they use the most current version of this document at the + time that they design PCI Express MR-IOV related components or platforms. See the PCI SIG website for the + most current version of this document. + + + + + + diff --git a/RTAS/app_glossary.xml b/RTAS/app_glossary.xml new file mode 100644 index 0000000..a8b2d24 --- /dev/null +++ b/RTAS/app_glossary.xml @@ -0,0 +1,1290 @@ + + + + + Glossary + This glossary contains an alphabetical list of terms, phrases, and abbreviations used in this document. + + + + Term + Definition + + + + AC + Alternating current + + + + ACR + Architecture Change Request + + + + AD + Address Data line + + + + Adapter + A device which attaches a device to a bus or which converts one + bus to another; for example, an I/O Adapter (IOA), a PCI Host Bridge (PHB), + or a NUMA fabric attachment device. + + + + + addr + Address + + + + Architecture + The hardware/software interface definition or software module to + software module interface definition. + + + + ASCII + American National Standards Code for Information + Interchange + + + + ASR + Address Space Register + + + + BAT + Block Address Translation + + + + BE + Big-Endian or Branch Trace Enable bit in the + MSR (MSRBE) + + + + BIO + Bottom of Peripheral Input/Output Space + + + + BIOS + Basic Input/Output system + + + + BIST + Built in Self Test + + + + Boundedly undefined + Describes some addresses and registers which when referenced provide + one of a small set of predefined results. + + + + BPA + Bulk Power Assembly. Refers to components used for power distribution + from a central point in the rack. + + + + BPM + Bottom of Peripheral Memory + + + + BSCA + Bottom of System Control Area + + + + BSM + Bottom of System Memory + + + + BUID + Bus Unit Identifier. The high-order part of an interrupt source number + which is used for hardware routing purposes by the platform. + + + + CCIN + Custom Card Identification Number + + + + CD-ROM + Compact Disk Read-Only Memory + + + + CIS + Client Interface Service + + + + CMO + Cooperative Memory Over-commitment option. See + for more information. + + + + + + CMOS + Complimentary Metal Oxide Semiconductor + + + + Conventional PCI + Behavior or features that conform to . + + + + CPU + Central Processing Unit + + + + CR + Condition Register + + + + CTR + Count Register + + + + DABR + Data Address Breakpoint Register + + + + DAR + Data Address Register + + + + DASD + Direct Access Storage Device (a synonym for “hard disk”) + + + + DBAT + Data Block Address Translation + + + + DC + Direct current + + + + DEC + Decrementer + + + + DIMM + Dual In-line Memory Module + + + + DMA + Direct Memory Access + + + + DMA Read + A data transfer from System Memory to I/O. A DMA Read Request + is the inbound operation and the DMA Read Reply (or Read Completion) is the + outbound data coming back from a DMA Read Request. + + + + DMA Write + A data transfer to System Memory from I/O or a Message Signalled Interrupt (MSI) DMA Write. This is an inbound operation. + + + + DOS + Disk OS + + + + DR + Data Relocate bit in MSR (MSRDR) + + + + DRA + Deviation Risk Assessment + + + + DRAM + Dynamic Random Access Memory + + + + DRC + Delayed Read Completion. A transaction that has completed + on the destination bus and is now moving toward the originating bus to complete. + DR Connector. + + + + DR entity + An entity that can participate in DR operations. That is, an entity + that can be added or removed from the platform while the platform power is on and the + system remains operational. + + + + DRR + Delayed Read Request. A transaction that must complete on the destination bus before completing on the originating bus. + + + + DSISR + Data Storage Interrupt Status Register + + + + DWR + Delayed Write Request. A transaction that must complete on the destination bus before completing on the originating bus. + + + + EA + Effective Address + + + + EAR + External Access Register + + + + ECC + Error Checking and Correction + + + + EE + External interrupt Enable bit in the MSR (MSREE) + + + + EEH + Enhance I/O Error Handling + + + + EEPROM + Electrically Erasable Programmable Read Only Memory + + + + EPOW + Environment and Power Warning + + + + + Error Log indicator An amber indicator that indicates that the user needs to + look at the error log or problem determination procedures, in order to determine the cause. + Previously called System Information (Attention). + + + + FCode + A computer programming language defined by the OF standard which is semantically + similar to the Forth programming language, but is encoded as a sequence of binary byte codes + representing a defined set of Forth words. + + + + FE0 + Floating-point Exception mode 0 bit in the MSR (MSRFE0) + + + + FE1 + Floating-point Exception mode 1bit in the MSR (MSRFE1) + + + + FIR + Fault Isolation Registers + + + + FLR + Function Level Reset (see PCI Express documentation). An optional reset for PCI Express + functions that allows resetting a single function of a multi-function IOA. + + + + FP + Floating-Point available bit in the MSR (MSRFP) + + + + FPSCR + Floating-Point Status And Control Register + + + + FRU + Field Replaceable Unit + + + + FSM + Finite State Machine + + + + GB + Gigabytes - as used in this document it is 2 raised to the power of 30 + + + + HB + Host Bridge + + + + HMC + Hardware Management Console - used generically to refer to the system + component that performs platform administration function where ever physically located. + The HMC is outside of this architecture and may be implemented in multiple ways. + Examples include: a special HMC applications in another system, an external appliance, + or in an LPAR partition using the Virtual Management Channel (VMC) interface to the + hypervisor. + + + + Hz + Hertz + + + + IBAT + Instruction block address translation + + + + ID + Identification + + + + IDE + Integrated Device Electronics + + + + IDU + Interrupt Delivery Unit + + + + IEEE + Institute of Electrical and Electronics Engineers + + + + I2C + Inter Integrated-circuit Communications + + + + I/O + nput/Output + + + + I/O bus master + Any entity other than a processor, cache, + memory controller, or host bridge which supplies both address and data in + write transactions or supplies the address and is the sink for the data in + read transactions. + + + + I/O device + Generally refers to any entity that is connected + to an IOA (usually through a cable), but in some cases may refer to the IOA + itself (that is, a device in the device tree that happens to be used for I/O + operations). + + + + I/O Drawer + An enclosure in a rack that holds at least one PHB and at + least one IOA. + + + + ILE + Interrupt Little-Endian bit in MSR (MSRILE) + + + + Instr + Instruction + + + + Interrupt Number + See Interrupt Vector below. + + + + Interrupt Vector + The identifier associated with a specific interrupt source. + The identifier’s value is loaded into the source’s Interrupt Vector Register and + is read from the Interrupt Delivery Unit’s Interrupt Acknowledge Register. + + + + IOA + I/O Adapter. A device which attaches to a physical bus which is capable + of supporting I/O (a physical IOA) or logical bus (a virtual IOA). The term “IOA” + without the usage of the qualifier “physical” or “virtual” will be + used to designate a physical IOA. Virtual IOAs are defined further in + + . + In PCI terms, an IOA may be defined by a unique combination of its assigned + bus number and device number, but not necessarily including its function number. + That is, an IOA may be a single or multi-function device, unless otherwise specified by + the context of the text. In the context of a PCIe I/O Virtualized (IOV) device (not to be + confused with a virtual IOA), an IOA is a single or multiple function device (for example, a + PCIe Virtual Function (VF) or multiple VFs). An IOA function may or may not have its own set of + resources, that is may or may not be in its own Partitionable Endpoint (PE) domain + (see also + + ). + + + + + IOA function + That part of an IOA that deals with a specific part of the + IOA as defined by the configuration space “Function” part of Bus/Device/Function. + For single-function IOAs, the IOA Function and the IOA are synonymous. + + + + IP + Interrupt Prefix bit in MSR (MSRIP) + + + + IPI + Interprocessor Interrupt + + + + IR + Instruction Relocate bit in MSR register (MSR IR) or infrared + + + + ISF + Interrupt 64-bit processor mode bit in the MSR (MSRISF) + + + + ISO + International Standards Organization + + + + ISR + Interrupt Source Register + + + + ISU + Interrupt Source Unit + + + + KB + Kilobytes - as used in this document it is 2 raised to the power of 10 + + + + KHz + Kilo Hertz + + + + LAN + Local Area Network + + + + LCD + Liquid Crystal Display + + + + LE + Little-Endian bit in MSR (MSRLE) or Little-Endian + + + + LED + Light Emitting Diode + + + + LMB + Logical Memory Block. The Block of logical memory addresses associated with a dynamically + reconfigurable memory node. + + + + Load + A Load Request is the outbound (from the processor) operation + and the Load Reply is the inbound data coming back from a + Load Request. When it relates to I/O operations, this is an + MMIO Load . + + + + LR + Link Register + + + + LSb + Least Significant bit + + + + LSB + Least Significant Byte + + + + LSI + Level Sensitive Interrupt + + + + LUN + Logical Unit Number + + + + L1 + Primary cache + + + + L2 + Secondary cache + + + + MB + Megabytes - as used in this document it is 2 raised to the power of 20 + + + + ME + Machine check Enable + + + + MMIO + Memory Mapped I/O. This refers to the mapping of the address space required + by an I/O device for Load or Store operations into + the system’s address space. + + + + MES + Miscellaneous Equipment Specification + + + + MFM + Modified frequency modulation + + + + MHz + Mega Hertz + + + + MOD + Address modification bit in the MSR + (MSRMOD) + + + + MP + Multiprocessor + + + + MSb + Most Significant bit + + + + MSB + Most Significant Byte + + + + MSI + Message Signalled Interrupt + + + + MSR + Machine State Register + + + + MTT + Multi-TCE-Table option. See + + + . + + + + + N/A + Not Applicable + + + + Nibble + Refers to the first or last four bits in an 8 bit byte + + + + NUMA + Non-Uniform Memory Access + + + + NUMA fabric + Mechanism and method for connecting the multiple nodes of a NUMA system + + + + NVRAM + Nonvolatile Random Access Memory + + + + OF + Open Firmware + + + + OP + Operator + + + + OS + Operating System + + + + OUI + Organizationally Unique Identifier + + + + PA + Processor Architecture + + + + PAP + Privileged Access Password + + + + LoPAR + Used within the Linux on Power Architecture + Reference documents to denote: (1) the architectural requirements specified + by the Linux on Power Architecture Reference document, (2) the Linux on Power Architecture + Reference documents themself, and (3) as an adjective to qualify an entity as being + related to this architecture. + + + + Partitionable Endpoint + This refers to the I/O granule that may be treated as one for + purposes of assignment to an OS (for example, to an LPAR partition). May be an + I/O adapter (IOA), or groups of IOAs and bridges, or portions of IOAs. PE granularity + supported by the hardware may be finer than is supported by the firmware. Grouping + of multiple PEs into one DR entity may limit assignment of a the separate PEs to different + LPAR partitions. See also DR entity. + + + + PC + Personal Computer + + + + PCI + Peripheral Component Interconnect. An all-encompassing term referring to + conventional PCI, PCI-X, and PCI Express. + + + + PCI bus + A general term referring to either the PCI Local Bus, as + specified in and + for conventional PCI and PCI-X, or a PCI Express link, as specified in + for PCI Express. + + + + PCI Express + Behavior or features that conform to + . + + + + PCI link + A PCI Express link, as specified in . + + + + PCI-X + Behavior or features that conform to . + + + + PD + Presence Detect + + + + PE + When referring to the body of the LoPAR, this refers to a Partitionable + Endpoint. + + + + + + + PEM + Partition Energy Management option. See + + + . + + + + + Peripheral I/O Space + The range of real addresses which are assigned + to the I/O Space of a Host Bridge (HB) and which are sufficient to contain all of + the Load and Store address space requirements of all the devices in the I/O Space + of the I/O bus that is generated by the HB. A keyboard controller is an example of + a device which may require Peripheral I/O Space addresses. + + + + Peripheral Memory Space + The range of real addresses which are assigned to the Memory + Space of a Host Bridge (HB) and which are sufficient to contain all of the Load and + Store address space requirements of the devices in the Memory Space of the I/O bus + that is generated by the HB. The frame buffer of a graphics adapter is an example + of a device which may require Peripheral Memory Space addresses. + + + + Peripheral Space + Refers to the physical address space which may + be accessed by a processor, but which is controlled by a host bridge. At least one + peripheral space must be present and it is referred to by the suffix 0. A host bridge + will typically provide access to at least a memory space and possibly to an I/O + space. + + + + PHB + PCI Host Bridge + + + + PIC + Programmable Interrupt Controller + + + + PIR + Processor Identification Register + + + + Platform + Refers to the hardware plus firmware portion of a system composed of hardware, + firmware, and OS. + + + + Platform firmware + Refers to all firmware on a system including the software or firmware in a + support processor. + + + + Plug-in I/O card + A card which can be plugged into an I/O + connector in a platform and which contains one or more IOAs and potentially + one or more I/O bridges or switches. + + + + Plug-in Card + An entity that plugs into a physical slot. + + + + PMW + Posted memory write. A transaction that has complete on the + originating bus before completing on the destination bus + + + + PnP + Plug and Play + + + + POP + Power On Password + + + + POST + Power-On Self Test + + + + PR + Privileged bit in the MSR (MSRPR) + + + + Processor Architecture + Used throughout this document to + mean compliance with the requirements specified in + . + + + + Processor revision number + A 16-bit number that distinguishes between various releases + of a particular processor version, for example different engineering change + levels. + + + + PVN + Processor Version Number. Uniquely determines the particular + processor and PA version. + + + + PVR + Processor Version Register. A register in each processor + that identifies its type. The contents of the PVR include the processor + version number and processor revision number. + + + + RAID + Redundant Array of Independent Disks + + + + RAM + Random Access Memory + + + + RAS + Reliability, Availability, and Serviceability + + + + Real address + A real address results from doing address + translation on an effective address when address translation is enabled. + If address translation is not enabled, the real address is the same as the + effective address. An attempt to fetch from, load from, or store to a real + address that is not physically present in the machine may result in a + machine check interrupt. + + + + Reserved + The term “reserved” is used within this + document to refer to bits in registers or areas in the address space + which should not be referenced by software except as described in this + document. + + + + Reserved for firmware use + Refers to a given location or bit which may not be used by + software, but are used by firmware. + + + + Reserved for future use + Refers to areas of address space or bits in registers which may be + used by future versions of this architecture. + + + + RI + Recoverable interrupt bit in the MSR (MSRRI) + + + + RISC + Reduced Instruction Set Computing + + + + RMA + Real Mode Area. The first block of logical memory addresses + owned by a logical partition, containing the storage that may be accessed with + translate off. + + + + ROM + Read Only Memory + + + + Root Complex + A PCI Express root complex as specified in + . + + + + RPN + Real Page Number + + + + RTAS + Run-Time Abstraction Services + + + + RTC + Real Time Clock + + + + SAE + Log Service Action Event log + + + + SCC + Serial Communications Controller + + + + SCSI + Small Computer System Interface + + + + SE + Single-step trace enabled bit in the MSR + (MSRSE) + + + + Service Focal Point + The common point of control in the system for handling all + service actions + + + + Serviceable Event + Serviceable Events are platform, + global, regional and local error events that require a service action + and possibly a call home when the serviceable event must be handled by a + service representative or at least reported to the service provider. + Activation of the Error Log indicator notifies the customer of the event + and the event indicates to the customer that there must be some intervention + to rectify the problem. The intervention may be a service action that the + customer can perform or it may require a service provider. + + + + SES + Storage Enclosure Services (can also mean SCSI Enclosure + Services in relation to SCSI storage) + + + + SF + Processor 32-bit or 64-bit processor mode bit in the MSR + (MSRSF) + + + + SFP + Service Focal Point + + + + Shrink-wrap OS + A single version of an OS that runs on all + compliant platforms. + + + + Shrink-wrap Application + A single version of an application program + that runs on all compliant platforms with the applicable OS. + + + + SMP + Symmetric multiprocessor + + + + SMS + System Management Services + + + + Snarf + An industry colloquialism for cache-to-cache + transfer. A typical scenario is as follows: (1) cache miss from cache A, + (2) line found modified in cache B, (3) cache B performs castout of modified + line, and (4) cache A allocates the modified line as it is being written back + to memory. + + + + Snoop + The act of interrogating a cache for the presence of a + line, usually in response to another party on a shared bus attempting to + allocate that line. + + + + SPRG + Special Purpose Registers for General use + + + + SR + System Registers + + + + SRC + Service Reference Code + + + + SRN + Service Request Number + + + + Store + A Store Request is an + outbound (from the processor) operation. When it relates to I/O + operations, this is an MMIO Store. + + + + System + Refers to the collection of hardware, system firmware, + and OS software which comprise a computer model. + + + + System address space + The total range of addressability as established by the + processor implementation. + + + + System Control Area + Refers to a range of addresses which + contains the system ROM(s) and an unarchitected, reserved, platform-dependent + area used by firmware and Run-Time Abstraction services for control of the + platform. The ROM areas are defined by the OF properties in the + openprom and os-rom nodes + of the OF device tree. + + + + System Information (Attention) indicator + See Error Log indicator. + + + + System firmware + Refers to the collection of all firmware on a system + including OF, RTAS and any legacy firmware. + + + + System Memory + Refers to those areas of memory which form + a coherency domain with respect to the PA processor or processors that + execute application software on a system. + + + + System software + Refers to the combination of OS software, + device driver software, and any hardware abstraction software, but + excludes the application software. + + + + TB + Time Base + + + + TCE + Translation Control Entry + + + + TLB + Translation Look-aside Buffer + + + + TOD + Time Of Day + + + + TOSM + Top of system memory + + + + TPM + Top of Peripheral Memory + Trusted Platform Module + + + + tty + Teletypewriter or ASCII character driven + terminal device + + + + UI + User Interface + + + + USB + Universal Serial Bus + + + + v + Volt + + + + VGA + Video Graphics Array + + + + VMC + Virtual Management Channel + + + + VPD + Vital Product Data + + + + VPNH + Virtual Processor Home Node option. See + + + . + + + + + + + + + + + + + + diff --git a/RTAS/bk_main.xml b/RTAS/bk_main.xml new file mode 100644 index 0000000..df88260 --- /dev/null +++ b/RTAS/bk_main.xml @@ -0,0 +1,111 @@ + + + + + + + Runtime Abstraction Services + Linux on Power Architecture Reference + + + + + System Software Work Group + + syssw-chair@openpowerfoundation.org + + OpenPOWER Foundation + + + + 2016 + OpenPOWER Foundation + + + Revision 2.0_pre1 + OpenPOWER + + + + + + Copyright details are filled in by the template. + + + + + + The purpose of this document is to provide firmware and software + architectural details associated with Runtime Abstraction Services (firmware) on OpenPOWER Systems. + The base content for this document were contributed to the OpenPOWER Foundation in the + IBM Linux on Power Architecture Platform Reference (LoPAPR) Draft + document. It had numerous contributors inside IBM. + This document is a Standard Track, Work Group Specification work product owned by the + System Software Workgroup and handled in compliance with the requirements outlined in the + OpenPOWER Foundation Work Group (WG) Process document. It was + created using the Master Template Guide version 0.9.5. Comments, + questions, etc. can be submitted to the public mailing list for this document at + TBD. + + + + + + 2016-05-04 + + + + Revision 2.0_pre1 - initial conversion from IBM document. Extracted from + Linux on Power Architecture Platform Reference (LoPAPR) version 1.1 dated March 24, + 2016 -- Chapter 7 (Run-time Abstration Services), Appendix G (Firmware Assisted + Dump Data Format), and Appendix I (CMO Characteristics Definition). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/RTAS/ch_cmo_def.xml b/RTAS/ch_cmo_def.xml new file mode 100644 index 0000000..3808f8b --- /dev/null +++ b/RTAS/ch_cmo_def.xml @@ -0,0 +1,173 @@ + + + + + CMO Characteristics Definitions + + This chapter defines the string that is returned by the + ibm,get-system-parameter RTAS call when the parameter + token value of 44 (CMO Characteristics) is specified on the + ibm,get-system-parameter RTAS call as per + . + +