====== HYPERVISOR API ======
The PS3 contains a Hypervisor which arbitrates access to the low level hardware from the "Other OS". The Hypervisor is accessed from the "Other OS" through a simple register based call, using the "System Call" instruction. Following is my attempt to document the Hypervisor system call interface. As this is a work in progress, and there are many unknowns, I will include comments where I have questions that I can not easily resolve, in //italics//.
* [[PS3:Hypervisor:System Call]]
* [[PS3:Hypervisor:Hypervisor Parameters]]
* [[PS3:Hypervisor:Hypervisor Return Values]]
* [[PS3:Hypervisor:Hypervisor Function Return Status]]
* [[PS3:Hypervisor:Hypervisor Data Structures]]
* [[PS3:Hypervisor:Example Hypervisor Call Sequence]]
* [[PS3:Hypervisor:Comparison with Celleb Hypervisor]]
===== Hypervisor Function List =====
**BOLD** entries have some information known about the call, other than its name, number of parameters and number of results. Unless marked with a source (e.g. kboot), information is assumed to be taken from the current Kernel.
//ITALIC// entries are "deprecated" hypervisor functions, listed in earlier sources but removed from the current source. These functions seem to still be callable on retail PS3s.
//**BOLD ITALIC**// entries have usage examples.
STRIKE-THROUGH entries have been removed from later versions of the hypervisor.
__Underlined Entries are undocumented and have been discovered by probing__
^ ^ ^ Parameters ^^
^ Code ^ Function Name ^ IN ^ OUT ^
| 0 | **[[PS3:Hypervisor:lv1_allocate_memory]]** | 4 | 2 |
| 1 | **[[PS3:Hypervisor:lv1_write_htab_entry]]** | 4 | 0 |
| 2 | **[[PS3:Hypervisor:lv1_construct_virtual_address_space]]** | 3 | 2 |
| 3 | [[PS3:Hypervisor:lv1_invalidate_htab_entries]] | 5 | 0 |
| 4 | **[[PS3:Hypervisor:lv1_get_virtual_address_space_id_of_ppe]]** | 1 | 1 |
| 5 | __[[PS3:Hypervisor:lv1_undocumented_function_5]]__ | ?? | ?? |
| 6 | **[[PS3:Hypervisor:lv1_query_logical_partition_address_region_info]]** | 1 | 5 |
| 7 | **[[PS3:Hypervisor:lv1_select_virtual_address_space]]** | 1 | 0 |
| 8 | __[[PS3:Hypervisor:lv1_undocumented_function_8]]__ | ?? | 1 |
| 9 | **[[PS3:Hypervisor:lv1_pause]]** | 1 | 0 |
| 10 | **[[PS3:Hypervisor:lv1_destruct_virtual_address_space]]** | 1 | 0 |
| 11 | **[[PS3:Hypervisor:lv1_configure_irq_state_bitmap]]** | 3 | 0 |
| 12 | **[[PS3:Hypervisor:lv1_connect_irq_plug_ext]]** | 5 | 0 |
| 13 | **[[PS3:Hypervisor:lv1_release_memory]]** | 1 | 0 |
| ||||
| 15 | //**[[PS3:Hypervisor:lv1_put_iopte]]** (kboot) // | 5 | 0 |
| ||||
| 17 | **[[PS3:Hypervisor:lv1_disconnect_irq_plug_ext]]** | 3 | 0 |
| 18 | **[[PS3:Hypervisor:lv1_construct_event_receive_port]]** | 0 | 1 |
| 19 | **[[PS3:Hypervisor:lv1_destruct_event_receive_port]]** | 1 | 0 |
| ||||
| 24 | **[[PS3:Hypervisor:lv1_send_event_locally]]** | 1 | 0 |
| ||||
| 26 | //[[PS3:Hypervisor:lv1_detect_pending_interrupts]]// (kboot) | 1 | 4 |
| ||||
| 27 | **[[PS3:Hypervisor:lv1_end_of_interrupt]]** (kboot) | 1 | 0 |
| 28 | **[[PS3:Hypervisor:lv1_connect_irq_plug]]** (kboot)| 2 | 0 |
| 29 | **[[PS3:Hypervisor:lv1_disconnect_irq_plug]]** (kboot) | 1 | 0 |
| 30 | **[[PS3:Hypervisor:lv1_end_of_interrupt_ext]]** | 3 | 0 |
| 31 | **[[PS3:Hypervisor:lv1_did_update_interrupt_mask]]** | 2 | 0 |
| ||||
| 44 | **[[PS3:Hypervisor:lv1_shutdown_logical_partition]]** (kboot) | 1 | 0 |
| ||||
| 54 | **[[PS3:Hypervisor:lv1_destruct_logical_spe]]** | 1 | 0 |
| ||||
| 57 | **[[PS3:Hypervisor:lv1_construct_logical_spe]]** | 7 | 6 |
| ||||
| 61 | **[[PS3:Hypervisor:lv1_set_spe_interrupt_mask]]** | 3 | 0 |
| 62 | __[[PS3:Hypervisor:lv1_undocumented_function_62]]__ | ?? | ?? |
| 63 | __[[PS3:Hypervisor:lv1_undocumented_function_63]]__ | ?? | ?? |
| 64 | [[PS3:Hypervisor:lv1_set_spe_transition_notifier]] | 3 | 0 |
| 65 | **[[PS3:Hypervisor:lv1_disable_logical_spe]]** | 2 | 0 |
| 66 | **[[PS3:Hypervisor:lv1_clear_spe_interrupt_status]]** | 4 | 0 |
| 67 | **[[PS3:Hypervisor:lv1_get_spe_interrupt_status]]** | 2 | 1 |
| ||||
| 69 | **[[PS3:Hypervisor:lv1_get_logical_ppe_id]]** | 0 | 1 |
| ||||
| 73 | [[PS3:Hypervisor:lv1_set_interrupt_mask]] | 5 | 0 |
| 74 | **[[PS3:Hypervisor:lv1_get_logical_partition_id]]** | 0 | 1 |
| 75 | __[[PS3:Hypervisor:lv1_undocumented_function_75]]__ | ?? | ?? |
| ||||
| 77 | [[PS3:Hypervisor:lv1_configure_execution_time_variable]] | 1 | 0 |
| 78 | **[[PS3:Hypervisor:lv1_get_spe_irq_outlet]]** | 2 | 1 |
| 79 | **[[PS3:Hypervisor:lv1_set_spe_privilege_state_area_1_register]]** | 3 | 0 |
| ||||
| 89 | __[[PS3:Hypervisor:lv1_undocumented_function_89]]__ | ?? | ?? |
| 90 | [[PS3:Hypervisor:lv1_create_repository_node]] | 6 | 0 |
| 91 | **[[PS3:Hypervisor:lv1_get_repository_node_value]]** | 5 | 2 |
| 92 | [[PS3:Hypervisor:lv1_modify_repository_node_value]] | 6 | 0 |
| 93 | [[PS3:Hypervisor:lv1_remove_repository_node]] | 4 | 0 |
| ||||
| 95 | [[PS3:Hypervisor:lv1_read_htab_entries]] | 2 | 5 |
| 96 | **[[PS3:Hypervisor:lv1_set_dabr]]** | 2 | 0 |
| 97 | //[[PS3:Hypervisor:lv1_set_vmx_graphics_mode]]// (kboot) | 1 | 0 |
| 98 | //[[PS3:Hypervisor:lv1_set_thread_switch_control_register]]// (kboot) | 1 | 0 |
| 99 | __[[PS3:Hypervisor:lv1_undocumented_function_99]]__ | ?? | ?? |
| ||||
| 102 | __[[PS3:Hypervisor:lv1_undocumented_function_102]]__ | ?? | ?? |
| 103 | [[PS3:Hypervisor:lv1_get_total_execution_time]] | 2 | 1 |
| ||||
| 105 | __[[PS3:Hypervisor:lv1_undocumented_function_105]]__ | ?? | ?? |
| 106 | __[[PS3:Hypervisor:lv1_undocumented_function_106]]__ | ?? | ?? |
| 107 | __[[PS3:Hypervisor:lv1_undocumented_function_107]]__ | ?? | ?? |
| 108 | __[[PS3:Hypervisor:lv1_undocumented_function_108]]__ | ?? | ?? |
| 109 | __[[PS3:Hypervisor:lv1_undocumented_function_109]]__ | ?? | ?? |
| 110 | __[[PS3:Hypervisor:lv1_undocumented_function_110]]__ | ?? | ?? |
| 111 | __[[PS3:Hypervisor:lv1_undocumented_function_111]]__ | ?? | ?? |
| 112 | __[[PS3:Hypervisor:lv1_undocumented_function_112]]__ | ?? | ?? |
| ||||
| 114 | __[[PS3:Hypervisor:lv1_undocumented_function_114]]__ | ?? | ?? |
| 115 | __[[PS3:Hypervisor:lv1_undocumented_function_115]]__ | ?? | ?? |
| 116 | //**[[PS3:Hypervisor:lv1_allocate_io_segment]]**// (kboot) | 3 | 1 |
| 117 | //**[[PS3:Hypervisor:lv1_release_io_segment]]**// (kboot) | 2 | 0 |
| 118 | //[[PS3:Hypervisor:lv1_allocate_ioid]]// (kboot) | 1 | 1 |
| 119 | //[[PS3:Hypervisor:lv1_release_ioid]]// (kboot) | 2 | 0 |
| ||||
| 120 | **[[PS3:Hypervisor:lv1_construct_io_irq_outlet]]** | 1 | 1 |
| 121 | **[[PS3:Hypervisor:lv1_destruct_io_irq_outlet]]** | 1 | 0 |
| 122 | **[[PS3:Hypervisor:lv1_map_htab]]** | 1 | 1 |
| 123 | **[[PS3:Hypervisor:lv1_unmap_htab]]** | 1 | 0 |
| 124 | __[[PS3:Hypervisor:lv1_undocumented_function_124]]__ | ?? | ?? |
| 125 | __[[PS3:Hypervisor:lv1_undocumented_function_125]]__ | ?? | ?? |
| 126 | __[[PS3:Hypervisor:lv1_undocumented_function_126]]__ | ?? | ?? |
| 127 | **[[PS3:Hypervisor:lv1_get_version_info]]** | 0 | 1 |
| ||||
| 134 | __[[PS3:Hypervisor:lv1_undocumented_function_134]]__ | ?? | ?? |
| 135 | __[[PS3:Hypervisor:lv1_undocumented_function_135]]__ | ?? | ?? |
| 136 | __[[PS3:Hypervisor:lv1_undocumented_function_136]]__ | ?? | ?? |
| 137 | __[[PS3:Hypervisor:lv1_undocumented_function_137]]__ | ?? | ?? |
| 138 | __[[PS3:Hypervisor:lv1_undocumented_function_138]]__ | ?? | ?? |
| ||||
| 140 | [[PS3:Hypervisor:lv1_construct_lpm]] | 6 | 3 |
| 141 | [[PS3:Hypervisor:lv1_destruct_lpm]] | 1 | 0 |
| 142 | [[PS3:Hypervisor:lv1_start_lpm]] | 1 | 0 |
| 143 | [[PS3:Hypervisor:lv1_stop_lpm]] | 1 | 1 |
| 144 | [[PS3:Hypervisor:lv1_copy_lpm_trace_buffer]] | 3 | 1 |
| 145 | [[PS3:Hypervisor:lv1_add_lpm_event_bookmark]] | 5 | 0 |
| 146 | [[PS3:Hypervisor:lv1_delete_lpm_event_bookmark]] | 3 | 0 |
| 147 | [[PS3:Hypervisor:lv1_set_lpm_interrupt_mask]] | 3 | 1 |
| 148 | [[PS3:Hypervisor:lv1_get_lpm_interrupt_status]] | 1 | 1 |
| 149 | [[PS3:Hypervisor:lv1_set_lpm_general_control]] | 5 | 2 |
| 150 | [[PS3:Hypervisor:lv1_set_lpm_interval]] | 3 | 1 |
| 151 | [[PS3:Hypervisor:lv1_set_lpm_trigger_control]] | 3 | 1 |
| 152 | [[PS3:Hypervisor:lv1_set_lpm_counter_control]] | 4 | 1 |
| 153 | [[PS3:Hypervisor:lv1_set_lpm_group_control]] | 3 | 1 |
| 154 | [[PS3:Hypervisor:lv1_set_lpm_debug_bus_control]] | 3 | 1 |
| 155 | [[PS3:Hypervisor:lv1_set_lpm_counter]] | 5 | 2 |
| 156 | [[PS3:Hypervisor:lv1_set_lpm_signal]] | 7 | 0 |
| 157 | [[PS3:Hypervisor:lv1_set_lpm_spr_trigger]] | 2 | 0 |
| 158 | [[PS3:Hypervisor:lv1_insert_htab_entry]] | 6 | 3 |
| ||||
| 162 | **[[PS3:Hypervisor:lv1_read_virtual_uart]]** | 3 | 1 |
| 163 | **[[PS3:Hypervisor:lv1_write_virtual_uart]]** | 3 | 1 |
| 164 | **[[PS3:Hypervisor:lv1_set_virtual_uart_param]]** | 3 | 0 |
| 165 | **[[PS3:Hypervisor:lv1_get_virtual_uart_param]]** | 2 | 1 |
| 166 | **[[PS3:Hypervisor:lv1_configure_virtual_uart_irq]]** | 1 | 1 |
| 167 | __[[PS3:Hypervisor:lv1_undocumented_function_167]]__ | ?? | ?? |
| 168 | __[[PS3:Hypervisor:lv1_undocumented_function_168]]__ | ?? | ?? |
| ||||
| 170 | **[[PS3:Hypervisor:lv1_open_device]]** | 3 | 0 |
| 171 | **[[PS3:Hypervisor:lv1_close_device]]** | 2 | 0 |
| 172 | **[[PS3:Hypervisor:lv1_map_device_mmio_region]]** | 5 | 1 |
| 173 | **[[PS3:Hypervisor:lv1_unmap_device_mmio_region]]** | 3 | 0 |
| 174 | **[[PS3:Hypervisor:lv1_allocate_device_dma_region]]** | 5 | 1 |
| 175 | **[[PS3:Hypervisor:lv1_free_device_dma_region]]** | 3 | 0 |
| 176 | **[[PS3:Hypervisor:lv1_map_device_dma_region]]** | 6 | 0 |
| 177 | **[[PS3:Hypervisor:lv1_unmap_device_dma_region]]** | 4 | 0 |
| 178 | //**[[PS3:Hypervisor:lv1_read_pci_config]]**// (kboot) | 6 | 1 |
| 179 | //**[[PS3:Hypervisor:lv1_write_pci_config]]**// (kboot) | 7 | 0 |
| 180 | //[[PS3:Hypervisor:lv1_read_pci_io]]// (kboot) | 4 | 1 |
| 181 | //[[PS3:Hypervisor:lv1_write_pci_io]]// (kboot) | 5 | 0 |
| 182 | __[[PS3:Hypervisor:lv1_undocumented_function_182]]__ | ?? | ?? |
| 183 | __[[PS3:Hypervisor:lv1_undocumented_function_183]]__ | ?? | ?? |
| ||||
| 185 | **[[PS3:Hypervisor:lv1_net_add_multicast_address]]** | 4 | 0 |
| 186 | **[[PS3:Hypervisor:lv1_net_remove_multicast_address]]** | 4 | 0 |
| 187 | **[[PS3:Hypervisor:lv1_net_start_tx_dma]]** | 4 | 0 |
| 188 | **[[PS3:Hypervisor:lv1_net_stop_tx_dma]]** | 3 | 0 |
| 189 | **[[PS3:Hypervisor:lv1_net_start_rx_dma]]** | 4 | 0 |
| 190 | **[[PS3:Hypervisor:lv1_net_stop_rx_dma]]** | 3 | 0 |
| 191 | **[[PS3:Hypervisor:lv1_net_set_interrupt_status_indicator]]** | 4 | 0 |
| ||||
| 193 | **[[PS3:Hypervisor:lv1_net_set_interrupt_mask]]** | 4 | 0 |
| 194 | **[[PS3:Hypervisor:lv1_net_control]]** | 6 | 2 |
| 195 | __[[PS3:Hypervisor:lv1_undocumented_function_195]]__ | ?? | ?? |
| 196 | __[[PS3:Hypervisor:lv1_undocumented_function_196]]__ | ?? | ?? |
| 197 | **[[PS3:Hypervisor:lv1_connect_interrupt_event_receive_port]]** | 4 | 0 |
| 198 | **[[PS3:Hypervisor:lv1_disconnect_interrupt_event_receive_port]]** | 4 | 0 |
| 199 | [[PS3:Hypervisor:lv1_get_spe_all_interrupt_statuses]] | 1 | 1 |
| 200 | __[[PS3:Hypervisor:lv1_undocumented_function_200]]__ | ?? | ?? |
| 201 | __[[PS3:Hypervisor:lv1_undocumented_function_201]]__ | ?? | ?? |
| 202 | **[[PS3:Hypervisor:lv1_deconfigure_virtual_uart_irq]]** | 0 | 0 |
| ||||
| 207 | **[[PS3:Hypervisor:lv1_enable_logical_spe]]** | 2 | 0 |
| ||||
| 209 | __[[PS3:Hypervisor:lv1_undocumented_function_209]]__ | ?? | ?? |
| 210 | **[[PS3:Hypervisor:lv1_gpu_open]]** | 1 | 0 |
| 211 | **[[PS3:Hypervisor:lv1_gpu_close]]** | 0 | 0 |
| 212 | **[[PS3:Hypervisor:lv1_gpu_device_map]]** (kboot) | 1 | 2 |
| 213 | **[[PS3:Hypervisor:lv1_gpu_device_unmap]]** (kboot) | 1 | 0 |
| 214 | **[[PS3:Hypervisor:lv1_gpu_memory_allocate]]** | 5 | 2 |
| ||||
| 216 | **[[PS3:Hypervisor:lv1_gpu_memory_free]]** | 1 | 0 |
| 217 | **[[PS3:Hypervisor:lv1_gpu_context_allocate]]** | 2 | 5 |
| 218 | **[[PS3:Hypervisor:lv1_gpu_context_free]]** | 1 | 0 |
| ||||
| 221 | **[[PS3:Hypervisor:lv1_gpu_context_iomap]]** | 5 | 0 |
| 222 | __[[PS3:Hypervisor:lv1_undocumented_function_222]]__ | 0 | 0 |
| ||||
| 225 | **[[PS3:Hypervisor:lv1_gpu_context_attribute]]** \\ **lv1_gpu_context_attribute:[[ps3:hypervisor:lv1_gpu_context_attribute:display_mode_set]]** \\ **lv1_gpu_context_attribute:[[PS3:Hypervisor:lv1_gpu_context_attribute:display_sync]]** \\ **lv1_gpu_context_attribute:[[PS3:Hypervisor:lv1_gpu_context_attribute:display_flip]]** \\ **lv1_gpu_context_attribute:[[PS3:Hypervisor:lv1_gpu_context_attribute:fb_setup]]** \\ **lv1_gpu_context_attribute:[[PS3:Hypervisor:lv1_gpu_context_attribute:fb_blit]]** \\ lv1_gpu_context_attribute:[[PS3:Hypervisor:lv1_gpu_context_attribute:fb_blit_sync]] | 6 | 0 |
| ||||
| 227 | **[[PS3:Hypervisor:lv1_gpu_context_intr]]** | 1 | 1 |
| 228 | **[[PS3:Hypervisor:lv1_gpu_attribute]]** (kboot) | 5 | 0 |
| 229 | __[[PS3:Hypervisor:lv1_undocumented_function_229]]__ | ?? | ?? |
| 230 | __[[PS3:Hypervisor:lv1_undocumented_function_230]]__ | ?? | ?? |
| 231 | __[[PS3:Hypervisor:lv1_undocumented_function_231]]__ | ?? | ?? |
| 232 | **[[PS3:Hypervisor:lv1_get_rtc]]** | 0 | 2 |
| 233 | __[[PS3:Hypervisor:lv1_undocumented_function_233]]__ | ?? | ?? |
| ||||
| 240 | [[PS3:Hypervisor:lv1_set_ppe_periodic_tracer_frequency]] | 1 | 0 |
| 241 | [[PS3:Hypervisor:lv1_start_ppe_periodic_tracer]] | 5 | 0 |
| 242 | [[PS3:Hypervisor:lv1_stop_ppe_periodic_tracer]] | 1 | 1 |
| 243 | __[[PS3:Hypervisor:lv1_undocumented_function_243]]__ | ?? | ?? |
| 244 | __[[PS3:Hypervisor:lv1_undocumented_function_244]]__ | ?? | ?? |
| 245 | **[[PS3:Hypervisor:lv1_storage_read]]** | 6 | 1 |
| 246 | **[[PS3:Hypervisor:lv1_storage_write]]** | 6 | 1 |
| 247 | __[[PS3:Hypervisor:lv1_undocumented_function_247]]__ | ?? | ?? |
| 248 | **[[PS3:Hypervisor:lv1_storage_send_device_command]]** | 6 | 1 |
| 249 | **[[PS3:Hypervisor:lv1_storage_get_async_status]]** | 1 | 2 |
| 250 | __[[PS3:Hypervisor:lv1_undocumented_function_250]]__ | ?? | ?? |
| 251 | __[[PS3:Hypervisor:lv1_undocumented_function_251]]__ | ?? | ?? |
| 252 | __[[PS3:Hypervisor:lv1_undocumented_function_252]]__ | ?? | ?? |
| 253 | __[[PS3:Hypervisor:lv1_undocumented_function_253]]__ | ?? | ?? |
| 254 | **[[PS3:Hypervisor:lv1_storage_check_async_status]]** | 2 | 1 |
| 255 | **[[PS3:Hypervisor:lv1_panic]]** | 1 | 0 |