.. | .. |
---|
237 | 237 | #define H_CREATE_RPT 0x1A4 |
---|
238 | 238 | #define H_REMOVE_RPT 0x1A8 |
---|
239 | 239 | #define H_REGISTER_RPAGES 0x1AC |
---|
240 | | -#define H_DISABLE_AND_GETC 0x1B0 |
---|
| 240 | +#define H_DISABLE_AND_GET 0x1B0 |
---|
241 | 241 | #define H_ERROR_DATA 0x1B4 |
---|
242 | 242 | #define H_GET_HCA_INFO 0x1B8 |
---|
243 | 243 | #define H_GET_PERF_COUNT 0x1BC |
---|
.. | .. |
---|
278 | 278 | #define H_COP 0x304 |
---|
279 | 279 | #define H_GET_MPP_X 0x314 |
---|
280 | 280 | #define H_SET_MODE 0x31C |
---|
| 281 | +#define H_BLOCK_REMOVE 0x328 |
---|
281 | 282 | #define H_CLEAR_HPT 0x358 |
---|
282 | 283 | #define H_REQUEST_VMC 0x360 |
---|
283 | 284 | #define H_RESIZE_HPT_PREPARE 0x36C |
---|
.. | .. |
---|
295 | 296 | #define H_INT_ESB 0x3C8 |
---|
296 | 297 | #define H_INT_SYNC 0x3CC |
---|
297 | 298 | #define H_INT_RESET 0x3D0 |
---|
298 | | -#define MAX_HCALL_OPCODE H_INT_RESET |
---|
| 299 | +#define H_SCM_READ_METADATA 0x3E4 |
---|
| 300 | +#define H_SCM_WRITE_METADATA 0x3E8 |
---|
| 301 | +#define H_SCM_BIND_MEM 0x3EC |
---|
| 302 | +#define H_SCM_UNBIND_MEM 0x3F0 |
---|
| 303 | +#define H_SCM_QUERY_BLOCK_MEM_BINDING 0x3F4 |
---|
| 304 | +#define H_SCM_QUERY_LOGICAL_MEM_BINDING 0x3F8 |
---|
| 305 | +#define H_SCM_UNBIND_ALL 0x3FC |
---|
| 306 | +#define H_SCM_HEALTH 0x400 |
---|
| 307 | +#define H_SCM_PERFORMANCE_STATS 0x418 |
---|
| 308 | +#define H_RPT_INVALIDATE 0x448 |
---|
| 309 | +#define MAX_HCALL_OPCODE H_RPT_INVALIDATE |
---|
| 310 | + |
---|
| 311 | +/* Scope args for H_SCM_UNBIND_ALL */ |
---|
| 312 | +#define H_UNBIND_SCOPE_ALL (0x1) |
---|
| 313 | +#define H_UNBIND_SCOPE_DRC (0x2) |
---|
299 | 314 | |
---|
300 | 315 | /* H_VIOCTL functions */ |
---|
301 | 316 | #define H_GET_VIOA_DUMP_SIZE 0x01 |
---|
.. | .. |
---|
322 | 337 | #define H_GET_24X7_DATA 0xF07C |
---|
323 | 338 | #define H_GET_PERF_COUNTER_INFO 0xF080 |
---|
324 | 339 | |
---|
| 340 | +/* Platform-specific hcalls used for nested HV KVM */ |
---|
| 341 | +#define H_SET_PARTITION_TABLE 0xF800 |
---|
| 342 | +#define H_ENTER_NESTED 0xF804 |
---|
| 343 | +#define H_TLB_INVALIDATE 0xF808 |
---|
| 344 | +#define H_COPY_TOFROM_GUEST 0xF80C |
---|
| 345 | + |
---|
| 346 | +/* Flags for H_SVM_PAGE_IN */ |
---|
| 347 | +#define H_PAGE_IN_SHARED 0x1 |
---|
| 348 | + |
---|
| 349 | +/* Platform-specific hcalls used by the Ultravisor */ |
---|
| 350 | +#define H_SVM_PAGE_IN 0xEF00 |
---|
| 351 | +#define H_SVM_PAGE_OUT 0xEF04 |
---|
| 352 | +#define H_SVM_INIT_START 0xEF08 |
---|
| 353 | +#define H_SVM_INIT_DONE 0xEF0C |
---|
| 354 | +#define H_SVM_INIT_ABORT 0xEF14 |
---|
| 355 | + |
---|
325 | 356 | /* Values for 2nd argument to H_SET_MODE */ |
---|
326 | 357 | #define H_SET_MODE_RESOURCE_SET_CIABR 1 |
---|
327 | | -#define H_SET_MODE_RESOURCE_SET_DAWR 2 |
---|
| 358 | +#define H_SET_MODE_RESOURCE_SET_DAWR0 2 |
---|
328 | 359 | #define H_SET_MODE_RESOURCE_ADDR_TRANS_MODE 3 |
---|
329 | 360 | #define H_SET_MODE_RESOURCE_LE 4 |
---|
| 361 | +#define H_SET_MODE_RESOURCE_SET_DAWR1 5 |
---|
330 | 362 | |
---|
331 | 363 | /* Values for argument to H_SIGNAL_SYS_RESET */ |
---|
332 | 364 | #define H_SIGNAL_SYS_RESET_ALL -1 |
---|
.. | .. |
---|
343 | 375 | #define H_CPU_CHAR_THREAD_RECONFIG_CTRL (1ull << 57) // IBM bit 6 |
---|
344 | 376 | #define H_CPU_CHAR_COUNT_CACHE_DISABLED (1ull << 56) // IBM bit 7 |
---|
345 | 377 | #define H_CPU_CHAR_BCCTR_FLUSH_ASSIST (1ull << 54) // IBM bit 9 |
---|
| 378 | +#define H_CPU_CHAR_BCCTR_LINK_FLUSH_ASSIST (1ull << 52) // IBM bit 11 |
---|
346 | 379 | |
---|
347 | 380 | #define H_CPU_BEHAV_FAVOUR_SECURITY (1ull << 63) // IBM bit 0 |
---|
348 | 381 | #define H_CPU_BEHAV_L1D_FLUSH_PR (1ull << 62) // IBM bit 1 |
---|
349 | 382 | #define H_CPU_BEHAV_BNDS_CHK_SPEC_BAR (1ull << 61) // IBM bit 2 |
---|
350 | 383 | #define H_CPU_BEHAV_FLUSH_COUNT_CACHE (1ull << 58) // IBM bit 5 |
---|
| 384 | +#define H_CPU_BEHAV_FLUSH_LINK_STACK (1ull << 57) // IBM bit 6 |
---|
| 385 | +#define H_CPU_BEHAV_NO_L1D_FLUSH_ENTRY (1ull << 56) // IBM bit 7 |
---|
| 386 | +#define H_CPU_BEHAV_NO_L1D_FLUSH_UACCESS (1ull << 55) // IBM bit 8 |
---|
351 | 387 | |
---|
352 | 388 | /* Flag values used in H_REGISTER_PROC_TBL hcall */ |
---|
353 | 389 | #define PROC_TABLE_OP_MASK 0x18 |
---|
.. | .. |
---|
358 | 394 | #define PROC_TABLE_HPT_PT 0x02 |
---|
359 | 395 | #define PROC_TABLE_RADIX 0x04 |
---|
360 | 396 | #define PROC_TABLE_GTSE 0x01 |
---|
| 397 | + |
---|
| 398 | +/* |
---|
| 399 | + * Defines for |
---|
| 400 | + * H_RPT_INVALIDATE - Invalidate RPT translation lookaside information. |
---|
| 401 | + */ |
---|
| 402 | + |
---|
| 403 | +/* Type of translation to invalidate (type) */ |
---|
| 404 | +#define H_RPTI_TYPE_NESTED 0x0001 /* Invalidate nested guest partition-scope */ |
---|
| 405 | +#define H_RPTI_TYPE_TLB 0x0002 /* Invalidate TLB */ |
---|
| 406 | +#define H_RPTI_TYPE_PWC 0x0004 /* Invalidate Page Walk Cache */ |
---|
| 407 | +/* Invalidate Process Table Entries if H_RPTI_TYPE_NESTED is clear */ |
---|
| 408 | +#define H_RPTI_TYPE_PRT 0x0008 |
---|
| 409 | +/* Invalidate Partition Table Entries if H_RPTI_TYPE_NESTED is set */ |
---|
| 410 | +#define H_RPTI_TYPE_PAT 0x0008 |
---|
| 411 | +#define H_RPTI_TYPE_ALL (H_RPTI_TYPE_TLB | H_RPTI_TYPE_PWC | \ |
---|
| 412 | + H_RPTI_TYPE_PRT) |
---|
| 413 | +#define H_RPTI_TYPE_NESTED_ALL (H_RPTI_TYPE_TLB | H_RPTI_TYPE_PWC | \ |
---|
| 414 | + H_RPTI_TYPE_PAT) |
---|
| 415 | + |
---|
| 416 | +/* Invalidation targets (target) */ |
---|
| 417 | +#define H_RPTI_TARGET_CMMU 0x01 /* All virtual processors in the partition */ |
---|
| 418 | +#define H_RPTI_TARGET_CMMU_LOCAL 0x02 /* Current virtual processor */ |
---|
| 419 | +/* All nest/accelerator agents in use by the partition */ |
---|
| 420 | +#define H_RPTI_TARGET_NMMU 0x04 |
---|
| 421 | + |
---|
| 422 | +/* Page size mask (page sizes) */ |
---|
| 423 | +#define H_RPTI_PAGE_4K 0x01 |
---|
| 424 | +#define H_RPTI_PAGE_64K 0x02 |
---|
| 425 | +#define H_RPTI_PAGE_2M 0x04 |
---|
| 426 | +#define H_RPTI_PAGE_1G 0x08 |
---|
| 427 | +#define H_RPTI_PAGE_ALL (-1UL) |
---|
361 | 428 | |
---|
362 | 429 | #ifndef __ASSEMBLY__ |
---|
363 | 430 | #include <linux/types.h> |
---|
.. | .. |
---|
371 | 438 | * the other plpar_hcalls. |
---|
372 | 439 | */ |
---|
373 | 440 | long plpar_hcall_norets(unsigned long opcode, ...); |
---|
| 441 | + |
---|
| 442 | +/* Variant which does not do hcall tracing */ |
---|
| 443 | +long plpar_hcall_norets_notrace(unsigned long opcode, ...); |
---|
374 | 444 | |
---|
375 | 445 | /** |
---|
376 | 446 | * plpar_hcall: - Make a pseries hypervisor call |
---|
.. | .. |
---|
461 | 531 | u64 behaviour; |
---|
462 | 532 | }; |
---|
463 | 533 | |
---|
| 534 | +/* Register state for entering a nested guest with H_ENTER_NESTED */ |
---|
| 535 | +struct hv_guest_state { |
---|
| 536 | + u64 version; /* version of this structure layout */ |
---|
| 537 | + u32 lpid; |
---|
| 538 | + u32 vcpu_token; |
---|
| 539 | + /* These registers are hypervisor privileged (at least for writing) */ |
---|
| 540 | + u64 lpcr; |
---|
| 541 | + u64 pcr; |
---|
| 542 | + u64 amor; |
---|
| 543 | + u64 dpdes; |
---|
| 544 | + u64 hfscr; |
---|
| 545 | + s64 tb_offset; |
---|
| 546 | + u64 dawr0; |
---|
| 547 | + u64 dawrx0; |
---|
| 548 | + u64 ciabr; |
---|
| 549 | + u64 hdec_expiry; |
---|
| 550 | + u64 purr; |
---|
| 551 | + u64 spurr; |
---|
| 552 | + u64 ic; |
---|
| 553 | + u64 vtb; |
---|
| 554 | + u64 hdar; |
---|
| 555 | + u64 hdsisr; |
---|
| 556 | + u64 heir; |
---|
| 557 | + u64 asdr; |
---|
| 558 | + /* These are OS privileged but need to be set late in guest entry */ |
---|
| 559 | + u64 srr0; |
---|
| 560 | + u64 srr1; |
---|
| 561 | + u64 sprg[4]; |
---|
| 562 | + u64 pidr; |
---|
| 563 | + u64 cfar; |
---|
| 564 | + u64 ppr; |
---|
| 565 | +}; |
---|
| 566 | + |
---|
| 567 | +/* Latest version of hv_guest_state structure */ |
---|
| 568 | +#define HV_GUEST_STATE_VERSION 1 |
---|
| 569 | + |
---|
| 570 | +/* |
---|
| 571 | + * From the document "H_GetPerformanceCounterInfo Interface" v1.07 |
---|
| 572 | + * |
---|
| 573 | + * H_GET_PERF_COUNTER_INFO argument |
---|
| 574 | + */ |
---|
| 575 | +struct hv_get_perf_counter_info_params { |
---|
| 576 | + __be32 counter_request; /* I */ |
---|
| 577 | + __be32 starting_index; /* IO */ |
---|
| 578 | + __be16 secondary_index; /* IO */ |
---|
| 579 | + __be16 returned_values; /* O */ |
---|
| 580 | + __be32 detail_rc; /* O, only needed when called via *_norets() */ |
---|
| 581 | + |
---|
| 582 | + /* |
---|
| 583 | + * O, size each of counter_value element in bytes, only set for version |
---|
| 584 | + * >= 0x3 |
---|
| 585 | + */ |
---|
| 586 | + __be16 cv_element_size; |
---|
| 587 | + |
---|
| 588 | + /* I, 0 (zero) for versions < 0x3 */ |
---|
| 589 | + __u8 counter_info_version_in; |
---|
| 590 | + |
---|
| 591 | + /* O, 0 (zero) if version < 0x3. Must be set to 0 when making hcall */ |
---|
| 592 | + __u8 counter_info_version_out; |
---|
| 593 | + __u8 reserved[0xC]; |
---|
| 594 | + __u8 counter_value[]; |
---|
| 595 | +} __packed; |
---|
| 596 | + |
---|
| 597 | +#define HGPCI_REQ_BUFFER_SIZE 4096 |
---|
| 598 | +#define HGPCI_MAX_DATA_BYTES \ |
---|
| 599 | + (HGPCI_REQ_BUFFER_SIZE - sizeof(struct hv_get_perf_counter_info_params)) |
---|
| 600 | + |
---|
| 601 | +struct hv_gpci_request_buffer { |
---|
| 602 | + struct hv_get_perf_counter_info_params params; |
---|
| 603 | + uint8_t bytes[HGPCI_MAX_DATA_BYTES]; |
---|
| 604 | +} __packed; |
---|
| 605 | + |
---|
464 | 606 | #endif /* __ASSEMBLY__ */ |
---|
465 | 607 | #endif /* __KERNEL__ */ |
---|
466 | 608 | #endif /* _ASM_POWERPC_HVCALL_H */ |
---|