1<?xml version="1.0" ?> 2<!-- 3 Copyright 2020, Data61, CSIRO (ABN 41 687 119 230) 4 5 SPDX-License-Identifier: BSD-2-Clause 6--> 7 8<api name="ObjectApiX86" label_prefix="x86_"> 9 <struct name="seL4_VCPUContext"> 10 <member name="eax"/> 11 <member name="ebx"/> 12 <member name="ecx"/> 13 <member name="edx"/> 14 <member name="esi"/> 15 <member name="edi"/> 16 <member name="ebp"/> 17 </struct> 18 <interface name="seL4_X86_PageDirectory" manual_name="Page Directory" 19 cap_description="Capability to the page directory being operated on."> 20 <method id="X86PageDirectoryMap" name="Map"> 21 <brief> 22 Map a page directory. 23 </brief> 24 <description> 25 <docref>See <autoref label="ch:vspace"/></docref> 26 </description> 27 <param dir="in" name="vspace" type="seL4_CPtr" 28 description='Capability to the VSpace which will contain the mapping'/> 29 <param dir="in" name="vaddr" type="seL4_Word" 30 description='Virtual address to map the page into.'/> 31 <param dir="in" name="attr" type="seL4_X86_VMAttributes"> 32 <description> 33 VM attributes for the mapping. <docref>Possible values for this type are given in <autoref label='ch:vspace'/></docref> 34 </description> 35 </param> 36 </method> 37 <method id="X86PageDirectoryUnmap" name="Unmap"> 38 <brief> 39 Unmap a page directory. 40 </brief> 41 <description> 42 <docref>See <autoref label="ch:vspace"/></docref> 43 </description> 44 </method> 45 <method id="X86PageDirectoryGetStatusBits" name="GetStatusBits" manual_name="Get Status Bits" condition="defined(CONFIG_ARCH_IA32)"> 46 <brief> 47 Retrieve the accessed and dirty bits of a page mapped into an address space. 48 </brief> 49 <description> 50 <docref>See <autoref label="ch:vspace"/></docref> 51 </description> 52 <return> 53 A <texttt text='seL4_X86_PageDirectory_GetStatusBits_t'/> structure. 54 </return> 55 <cap_param append_description='Capability to the address space to query.'/> 56 <param dir="in" name="vaddr" type="seL4_Word" description='Virtual address of the page to query'/> 57 <param dir="out" name="accessed" type="seL4_Word"/> 58 <param dir="out" name="dirty" type="seL4_Word"/> 59 </method> 60 </interface> 61 62 <interface name="seL4_X86_PageTable" manual_name="Page Table" 63 cap_description="Capability to the page table being operated on."> 64 <method id="X86PageTableMap" name="Map" manual_label="pagetable_map"> 65 <brief> 66 Map a page table into an address space. 67 </brief> 68 <description> 69 Takes a <texttt text='PageDirectory'/> capability as an argument, 70 and installs a reference to the invoked 71 <texttt text='PageTable'/> in a specified slot in the <texttt text="PageDirectory"/>. 72 </description> 73 <param dir="in" name="vspace" type="seL4_CPtr" 74 description='Capability to the VSpace which will contain the mapping'/> 75 <param dir="in" name="vaddr" type="seL4_Word" 76 description='Virtual address to map the page into.'/> 77 <param dir="in" name="attr" type="seL4_X86_VMAttributes"> 78 <description> 79 VM attributes for the mapping. <docref>Possible values for this type are given in <autoref label='ch:vspace'/></docref> 80 </description> 81 </param> 82 </method> 83 <method id="X86PageTableUnmap" name="Unmap" manual_label="pagetable_unmap"> 84 <brief> 85 Unmap a page table from its address space and zero it out. 86 </brief> 87 <description> 88 Removes the reference to the invoked <texttt text="PageTable"/> from its containing 89 <texttt text="PageDirectory"/>. 90 <docref>See <autoref label="ch:vspace"/></docref> 91 </description> 92 </method> 93 </interface> 94 95 <interface name="seL4_X86_IOPageTable" manual_name="I/O Page Table" 96 cap_description="Capability to the I/O page table being operated on."> 97 <method id="X86IOPageTableMap" name="Map" condition='defined(CONFIG_IOMMU)'> 98 <brief> 99 Map an IO page table into an IOSpace. 100 </brief> 101 <description> 102 <docref>See <autoref label="sec:iospace"/></docref> 103 </description> 104 <param dir="in" name="iospace" type="seL4_X86_IOSpace" 105 description='The IOSpace to map the page table into.'/> 106 <param dir="in" name="ioaddr" type="seL4_Word" 107 description='The address to map the page table at.'/> 108 </method> 109 <method id="X86IOPageTableUnmap" name="Unmap" condition='defined(CONFIG_IOMMU)'> 110 <brief> 111 Unmap an IO page table from an IOSpace. 112 </brief> 113 <description> 114 <docref>See <autoref label="sec:iospace"/></docref> 115 </description> 116 <cap_param append_description='The page table to unmap.'/> 117 </method> 118 </interface> 119 120 <interface name="seL4_X86_Page" manual_name="Page" cap_description="Capability to the page being operated on."> 121 <method id="X86PageMap" name="Map" manual_label='page_map'> 122 <brief> 123 Map a page into an address space or update the mapping attributes. 124 </brief> 125 <description> 126 Takes a VSpace capability, as an 127 argument and installs a reference 128 to the given <texttt text="Page"/> in the lowest-level unmapped paging structure 129 corresponding to the given address, or updates the mapping attributes if the page is already mapped at this address. If the required paging structures are not present 130 this operation will fail, returning a seL4_FailedLookup error. 131 </description> 132 <param dir="in" name="vspace" type="seL4_CPtr" 133 description='Capability to the VSpace which will contain the mapping'/> 134 <param dir="in" name="vaddr" type="seL4_Word" 135 description='Virtual address to map the page into.'/> 136 <param dir="in" name="rights" type="seL4_CapRights_t"> 137 <description> 138 Rights for the mapping. <docref>Possible values for this type are given in <autoref label='sec:cap_rights'/></docref> 139 </description> 140 </param> 141 <param dir="in" name="attr" type="seL4_X86_VMAttributes"> 142 <description> 143 VM attributes for the mapping. <docref>Possible values for this type are given in <autoref label='ch:vspace'/></docref> 144 </description> 145 </param> 146 </method> 147 <method id="X86PageUnmap" name="Unmap" manual_label='page_unmap'> 148 <brief> 149 Unmap a page. 150 </brief> 151 <description> 152 Removes an existing mapping. 153 </description> 154 </method> 155 <method id="X86PageMapIO" name="MapIO" manual_name="Map I/O" manual_label='page_map_io' condition='defined(CONFIG_IOMMU)'> 156 <brief> 157 Map a page into an IOSpace. 158 </brief> 159 <description> 160 <docref>See <autoref label="ch:vspace"/></docref> 161 </description> 162 <param dir="in" name="iospace" type="seL4_X86_IOSpace" 163 description='The IOSpace that the frame is being mapped into'/> 164 <param dir="in" name="rights" type="seL4_CapRights_t"> 165 <description> 166 Rights for the mapping. <docref>Possible values for this type are given in <autoref label='sec:cap_rights'/></docref> 167 </description> 168 </param> 169 <param dir="in" name="ioaddr" type="seL4_Word" 170 description='The address that the frame is being mapped at.'/> 171 </method> 172 <method id="X86PageGetAddress" name="GetAddress" manual_name="Get Address" 173 manual_label='page_getaddress'> 174 <brief> 175 Get the physical address of the underlying frame. 176 </brief> 177 <description> 178 <docref>See <autoref label="ch:vspace"/></docref> 179 </description> 180 <return> 181 A <texttt text='seL4_IA32_Page_GetAddress_t'/> struct that contains a 182 <texttt text='seL4_Word paddr'/>, which holds the physical address of the page, 183 and <texttt text='int error'/>. <docref>See <autoref label='sec:errors'/> for a description 184 of the message register and tag contents upon error.</docref> 185 </return> 186 <param dir="out" name="paddr" type="seL4_Word"/> 187 </method> 188 <method id="X86PageMapEPT" name="MapEPT" condition="defined(CONFIG_VTX)" manual_name="Map EPT"> 189 <param dir="in" name="vspace" type="seL4_X86_EPTPML4"/> 190 <param dir="in" name="vaddr" type="seL4_Word"/> 191 <param dir="in" name="rights" type="seL4_CapRights_t"/> 192 <param dir="in" name="attr" type="seL4_X86_VMAttributes"/> 193 </method> 194 </interface> 195 196 <interface name="seL4_X86_ASIDControl" manual_name="ASID Control"> 197 <method id="X86ASIDControlMakePool" name="MakePool" manual_name="Make Pool" 198 manual_label='ASID_controlmakepool'> 199 <brief> 200 Create an X86 ASID pool. 201 </brief> 202 <description> 203 Together with a capability to <texttt text="Untyped Memory"/>, which is passed as an argument, 204 create an <texttt text="ASID Pool"/>. The untyped capability must represent a 205 4K memory object. This will create an ASID pool with enough space for 1024 VSpaces. 206 </description> 207 <cap_param append_description='The master ASIDControl capability.'/> 208 <param dir="in" name="untyped" type="seL4_Untyped" 209 description='Capability to an untyped memory object that will become the pool. Must be 4K bytes.'/> 210 <param dir="in" name="root" type="seL4_CNode" 211 description='CPTR to the CNode that forms the root of the destination CSpace. Must be at a depth equivalent to the wordsize.'/> 212 <param dir="in" name="index" type="seL4_Word" 213 description='CPTR to the destination slot. Resolved from the root of the destination CSpace.'/> 214 <param dir="in" name="depth" type="seL4_Uint8" 215 description='Number of bits of index to resolve to find the destination slot.'/> 216 </method> 217 </interface> 218 219 <interface name="seL4_X86_ASIDPool" manual_name="ASID Pool"> 220 <method id="X86ASIDPoolAssign" name="Assign" manual_label='asidpool_assign'> 221 <brief> 222 Assign an ASID pool. 223 </brief> 224 <description> 225 Assigns an ASID to the VSpace associated with the <texttt text="Page Directory"/> passed in as an argument. 226 </description> 227 <cap_param append_description='The ASID pool which is being assigned to. Must not be full. Each ASID pool can contain 1024 entries.'/> 228 <param dir="in" name="vspace" type="seL4_CPtr" description='The page directory that is being assigned to an ASID pool. Must not already be assigned to an ASID pool.'/> 229 </method> 230 </interface> 231 232 <interface name="seL4_X86_IOPortControl" manual_name="I/O Port Control" cap_description='Control capability for I/O ports.'> 233 <method id="X86IOPortControlIssue" name="Issue" manual_label="ioport_issue"> 234 <brief> 235 Issue an IO port sub range. 236 </brief> 237 <description> 238 <docref>See <autoref label='sec:ioports'/></docref> 239 </description> 240 <param dir="in" name="first_port" type="seL4_Word" description="First port of the range of the issued capability."/> 241 <param dir="in" name="last_port" type="seL4_Word" description="Last port of the range of the issued capability."/> 242 <param dir="in" name="root" type="seL4_CNode" description="CPTR to the CNode that forms the root of the destination CSpace."/> 243 <param dir="in" name="index" type="seL4_Word" description="CPTR to the destination slot. Resolved from the root of the destination CSpace."/> 244 <param dir="in" name="depth" type="seL4_Uint8" description="Number of bits of dest_index to resolve to find the destination slot."/> 245 </method> 246 </interface> 247 248 <interface name="seL4_X86_IOPort" manual_name="I/O Port" cap_description='An I/O Port capability.'> 249 <method id="X86IOPortIn8" name="In8"> 250 <brief> 251 Read 8 bits from an IO port. 252 </brief> 253 <description> 254 <docref>See <autoref label='sec:ioports'/></docref> 255 </description> 256 <return> 257 A <texttt text='seL4_X86_IOPort_In8_t'/> structure <docref>as described in <autoref label='sec:ioports'/>.</docref> 258 </return> 259 <param dir="out" name="result" type="seL4_Uint8" /> 260 <param dir="in" name="port" type="seL4_Uint16" description='The port to read from.'/> 261 </method> 262 <method id="X86IOPortIn16" name="In16"> 263 <brief> 264 Read 16 bits from an IO port. 265 </brief> 266 <description> 267 <docref>See <autoref label='sec:ioports'/></docref> 268 </description> 269 <return> 270 A <texttt text='seL4_X86_IOPort_In16_t'/> structure <docref>as described in <autoref label='sec:ioports'/>.</docref> 271 </return> 272 <param dir="out" name="result" type="seL4_Uint16"/> 273 <param dir="in" name="port" type="seL4_Uint16" description='The port to read from.'/> 274 </method> 275 <method id="X86IOPortIn32" name="In32"> 276 <brief> 277 Read 32 bits from an IO port. 278 </brief> 279 <description> 280 <docref>See <autoref label='sec:ioports'/></docref> 281 </description> 282 <return> 283 A <texttt text='seL4_X86_IOPort_In32_t'/> structure <docref>as described in <autoref label='sec:ioports'/>.</docref> 284 </return> 285 <param dir="out" name="result" type="seL4_Uint32"/> 286 <param dir="in" name="port" type="seL4_Uint16" description='The port to read from.'/> 287 </method> 288 <method id="X86IOPortOut8" name="Out8"> 289 <brief> 290 Write 8 bits to an IO port. 291 </brief> 292 <description> 293 <docref>See <autoref label='sec:ioports'/></docref> 294 </description> 295 <param dir="in" name="port" type="seL4_Word" description='The port to write to.'/> 296 <param dir="in" name="data" type="seL4_Word" description='Data to write to the IO port.'/> 297 </method> 298 <method id="X86IOPortOut16" name="Out16"> 299 <brief> 300 Write 16 bits to an IO port. 301 </brief> 302 <description> 303 <docref>See <autoref label='sec:ioports'/></docref> 304 </description> 305 <param dir="in" name="port" type="seL4_Word" description='The port to write to.'/> 306 <param dir="in" name="data" type="seL4_Word" description='Data to write to the IO port.'/> 307 </method> 308 <method id="X86IOPortOut32" name="Out32"> 309 <brief> 310 Write 32 bits to an IO port. 311 </brief> 312 <description> 313 <docref>See <autoref label='sec:ioports'/></docref> 314 </description> 315 <param dir="in" name="port" type="seL4_Word" description='The port to write to.'/> 316 <param dir="in" name="data" type="seL4_Word" description='Data to write to the IO port.'/> 317 </method> 318 </interface> 319 320 <interface name="seL4_IRQControl" manual_name="IRQ Control" cap_description='An IRQControl capability. This gives you the authority to make this call.'> 321 <method id="X86IRQIssueIRQHandlerIOAPIC" name="GetIOAPIC" manual_name="Get I/O APIC"> 322 <brief> 323 Create an IRQ handler capability for an interrupt from an IOAPIC. 324 </brief> 325 <description> 326 <docref>See <autoref label='sec:interrupts'/> and <autoref label='sec:x86_interrupts'/>.</docref> 327 </description> 328 <param dir="in" name="root" type="seL4_CNode" 329 description='CPTR to the CNode that forms the root of the destination CSpace. Must be at a depth equivalent to the wordsize.'/> 330 <param dir="in" name="index" type="seL4_Word" 331 description='CPTR to the destination slot. Resolved from the root of the destination CSpace.'/> 332 <param dir="in" name="depth" type="seL4_Uint8" 333 description='Number of bits of index to resolve to find the destination slot.'/> 334 335 <param dir="in" name="ioapic" type="seL4_Word" 336 description='Zero based index of IOAPIC to get interrupt from, 337 ordered the same as in ACPI tables'/> 338 <param dir="in" name="pin" type="seL4_Word" description='IOAPIC pin that generates the interrupt.'/> 339 <param dir="in" name="level" type="seL4_Word" description='Indicates whether the IOAPIC should be programmed to treat this interrupt as level triggered.'/> 340 <param dir="in" name="polarity" type="seL4_Word" description='Indicates whether the IOAPIC should be programmed to treat this interrupt as high or 341 low triggered'/> 342 <param dir="in" name="vector" type="seL4_Word" description='CPU vector to deliver the interrupt to.'/> 343 </method> 344 <method id="X86IRQIssueIRQHandlerMSI" name="GetMSI" manual_name="Get MSI"> 345 <brief> 346 Create an IRQ handler capability for an interrupt from an MSI. 347 </brief> 348 <description> 349 <docref>See <autoref label='sec:interrupts'/> and <autoref label='sec:x86_interrupts'/>.</docref> 350 </description> 351 <param dir="in" name="root" type="seL4_CNode" 352 description='CPTR to the CNode that forms the root of the destination CSpace. Must be at a depth equivalent to the wordsize.'/> 353 <param dir="in" name="index" type="seL4_Word" 354 description='CPTR to the destination slot. Resolved from the root of the destination CSpace.'/> 355 <param dir="in" name="depth" type="seL4_Uint8" 356 description='Number of bits of index to resolve to find the destination slot.'/> 357 <param dir="in" name="pci_bus" type="seL4_Word" description='PCI bus ID of the device that will generate the interrupt.'/> 358 <param dir="in" name="pci_dev" type="seL4_Word" description='PCI device ID of the device that will generate the interrupt.'/> 359 <param dir="in" name="pci_func" type="seL4_Word" description='PCI function ID of the device that will generate the interrupt.'/> 360 <param dir="in" name="handle" type="seL4_Word" description='Value of the handle programmed into the data portion of the MSI.'/> 361 <param dir="in" name="vector" type="seL4_Word" description='CPU vector to deliver the interrupt to.'/> 362 </method> 363 </interface> 364 <interface name="seL4_TCB" manual_name="TCB"> 365 <method id="TCBSetEPTRoot" name="SetEPTRoot" condition="defined(CONFIG_VTX)" manual_name="Set EPT Root" manual_label="set_eptroot"> 366 <brief> 367 Set the EPT root of a thread 368 </brief> 369 <description> 370 <docref>See <autoref label='sec:virt'/>.</docref> 371 </description> 372 <param dir="in" name="eptpml4" type="seL4_X86_EPTPML4" 373 description='CPTR to an EPT PML4 object to act as the guest mode vspace root'/> 374 </method> 375 </interface> 376 <interface name="seL4_X86_VCPU" manual_name="VCPU" cap_description='VCPU object to operate on'> 377 <method id="X86VCPUSetTCB" name="SetTCB" condition="defined(CONFIG_VTX)" manual_name="Set TCB"> 378 <brief> 379 Bind TCB to VCPU 380 </brief> 381 <description> 382 Configures the one-to-one binding of a VCPU and TCB, overwriting any previous binding 383 in both. <docref>See <autoref label='sec:virt'/>.</docref> 384 </description> 385 <param dir="in" name="tcb" type="seL4_TCB" description='CPTR of the TCB to bind to'/> 386 </method> 387 <method id="X86VCPUReadVMCS" name="ReadVMCS" condition="defined(CONFIG_VTX)" manual_name="Read VMCS" manual_label="vcpu_readvmcs"> 388 <brief> 389 Read VMCS field from the hardware 390 </brief> 391 <description> 392 Thin wrapper around the <texttt text='vmread'/> instruction that is performed on the 393 VMCS region that is part of the VCPU object. After validating that a legal 394 field is requested the value of `vmread` is returned directly in the result. 395 </description> 396 <return> 397 A <texttt text='seL4_X86_VCPU_ReadVMCS_t'/> struct that contains a 398 <texttt text='seL4_Word value'/>, which holds the return result of the <texttt text='vmread'/> instruction, 399 and <texttt text='int error'/>. <docref>See <autoref label='sec:errors'/> for a description 400 of the message register and tag contents upon error.</docref> 401 </return> 402 <param dir="in" name="field" type="seL4_Word" 403 description='Field to give to `vmread` instruction'/> 404 <param dir="out" name="value" type="seL4_Word" 405 description='Value returned by `vmread` instruction'/> 406 </method> 407 <method id="X86VCPUWriteVMCS" name="WriteVMCS" condition="defined(CONFIG_VTX)" manual_name="Write VMCS" manual_label="vcpu_writevmcs"> 408 <brief> 409 Write VMCS field to the hardware 410 </brief> 411 <description> 412 Thin wrapper around the `vmwrite` instruction that is performed on the 413 VMCS region that is part of the VCPU object. As well as validating that 414 a legal field is requested, the value may be modified to ensure any 415 bits that are fixed in the hardware are correct, and that any features 416 required for kernel correctness are not disabled <docref>(see <autoref label='sec:virt'/>)</docref>. 417 418 The final value written to the hardware is returned and can be compared 419 to the input parameter to determine what bits the kernel changed. 420 </description> 421 <return> 422 A <texttt text='seL4_X86_VCPU_WriteVMCS_t'/> struct that contains a 423 <texttt text='seL4_Word writen'/>, which holds the final value written with the <texttt text='vmwrite'/> instruction, 424 and <texttt text='int error'/>. <docref>See <autoref label='sec:errors'/> for a description 425 of the message register and tag contents upon error.</docref> 426 </return> 427 <param dir="in" name="field" type="seL4_Word" 428 description='Field to give to `vmwrite` instruction'/> 429 <param dir="in" name="value" type="seL4_Word" 430 description='Value to write using `vmwrite` instruction'/> 431 <param dir="out" name="written" type="seL4_Word" 432 description='Final value written using `vmwrite` after kernel validation'/> 433 </method> 434 <method id="X86VCPUEnableIOPort" name="EnableIOPort" condition="defined(CONFIG_VTX)" 435 manual_name="Enable IO Port" manual_label="vcpu_enableioport"> 436 <brief> 437 Enable I/O port range in guest execution 438 </brief> 439 <description> 440 Enables a range of I/O ports for direct access by the execution mode in 441 the <texttt text='VCPU'/>. The requested port range must be a sub range 442 of the provided I/O port capability. 443 444 This also establishes a link between the provided I/O port capability and 445 the <texttt text='VCPU'/><docref>, see <autoref label='sec:virt'/> for details.</docref> 446 </description> 447 <param dir="in" name="ioPort" type="seL4_X86_IOPort" 448 description='I/O port capability whose authority is being delegating'/> 449 <param dir="in" name="low" type="seL4_Word" 450 description='Start of the I/O port range to enable'/> 451 <param dir="in" name="high" type="seL4_Word" 452 description='Last I/O port in the range to enable'/> 453 </method> 454 <method id="X86VCPUDisableIOPort" name="DisableIOPort" condition="defined(CONFIG_VTX)" 455 manual_name="Disable IO Port"> 456 <brief> 457 Disable I/O port range in privileged execution 458 </brief> 459 <description> 460 Disable a range of I/O ports for direct access by the execution mode in 461 the <texttt text='VCPU'/>. 462 </description> 463 <param dir="in" name="low" type="seL4_Word" 464 description='Start of the I/O port range to disable'/> 465 <param dir="in" name="high" type="seL4_Word" 466 description='Last I/O port in the range to disable'/> 467 </method> 468 <method id="X86VCPUWriteRegisters" name="WriteRegisters" condition="defined(CONFIG_VTX)" 469 manual_name="Write Registers"> 470 <brief> 471 Set guest mode registers to the fields of a given <texttt text="seL4_VCPUContext"/> 472 </brief> 473 <description> 474 Sets the guest mode registers, which is any registers not already part of the VMCS. 475 </description> 476 <param dir="in" name="regs" type="seL4_VCPUContext" 477 description='Data structure containing the new register values.'/> 478 </method> 479 </interface> 480 <interface name="seL4_X86_EPTPDPT" manual_name="Extended Page Table Page Directory Page Table" 481 cap_description="Capability to the EPT PDPT being operated on."> 482 <method id="X86EPTPDPTMap" name="Map" condition="defined(CONFIG_VTX)"> 483 <brief> 484 Map an EPT page directory page table. 485 </brief> 486 <description> 487 <docref>See <autoref label="ch:vspace"/></docref> 488 </description> 489 <param dir="in" name="eptpml4" type="seL4_X86_EPTPML4" 490 description='Capability to the EPT root which will contain the mapping'/> 491 <param dir="in" name="gpa" type="seL4_Word" 492 description='Guest physical address to map the page into.'/> 493 <param dir="in" name="attr" type="seL4_X86_VMAttributes"> 494 <description> 495 VM attributes for the mapping. <docref>Possible values for this type are given in <autoref label='ch:vspace'/></docref> 496 </description> 497 </param> 498 </method> 499 <method id="X86EPTPDPTUnmap" name="Unmap" condition="defined(CONFIG_VTX)"> 500 <brief> 501 Unmap an EPT page directory page table. 502 </brief> 503 <description> 504 <docref>See <autoref label="ch:vspace"/></docref> 505 </description> 506 </method> 507 </interface> 508 <interface name="seL4_X86_EPTPD" manual_name="Extended Page Table Page Directory" 509 cap_description="Capability to the EPT PD being operated on."> 510 <method id="X86EPTPDMap" name="Map" condition="defined(CONFIG_VTX)"> 511 <brief> 512 Map an EPT page directory. 513 </brief> 514 <description> 515 <docref>See <autoref label="ch:vspace"/></docref> 516 </description> 517 <param dir="in" name="eptpml4" type="seL4_X86_EPTPML4" 518 description='Capability to the EPT root which will contain the mapping'/> 519 <param dir="in" name="gpa" type="seL4_Word" 520 description='Guest physical address to map the page into.'/> 521 <param dir="in" name="attr" type="seL4_X86_VMAttributes"> 522 <description> 523 VM attributes for the mapping. <docref>Possible values for this type are given in <autoref label='ch:vspace'/></docref> 524 </description> 525 </param> 526 </method> 527 <method id="X86EPTPDUnmap" name="Unmap" condition="defined(CONFIG_VTX)"> 528 <brief> 529 Unmap an EPT page directory. 530 </brief> 531 <description> 532 <docref>See <autoref label="ch:vspace"/></docref> 533 </description> 534 </method> 535 </interface> 536 <interface name="seL4_X86_EPTPT" manual_name="Extended Page Table Page Table" 537 cap_description="Capability to the EPT PT being operated on."> 538 <method id="X86EPTPTMap" name="Map" condition="defined(CONFIG_VTX)"> 539 <brief> 540 Map an EPT page table. 541 </brief> 542 <description> 543 <docref>See <autoref label="ch:vspace"/></docref> 544 </description> 545 <param dir="in" name="eptpml4" type="seL4_X86_EPTPML4" 546 description='Capability to the EPT root which will contain the mapping'/> 547 <param dir="in" name="gpa" type="seL4_Word" 548 description='Guest physical address to map the page into.'/> 549 <param dir="in" name="attr" type="seL4_X86_VMAttributes"> 550 <description> 551 VM attributes for the mapping. <docref>Possible values for this type are given in <autoref label='ch:vspace'/></docref> 552 </description> 553 </param> 554 </method> 555 <method id="X86EPTPTUnmap" name="Unmap" condition="defined(CONFIG_VTX)"> 556 <brief> 557 Unmap an EPT page table. 558 </brief> 559 <description> 560 <docref>See <autoref label="ch:vspace"/></docref> 561 </description> 562 </method> 563 </interface> 564</api> 565