====== 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 |