hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/arch/powerpc/include/asm/hvcall.h
....@@ -237,7 +237,7 @@
237237 #define H_CREATE_RPT 0x1A4
238238 #define H_REMOVE_RPT 0x1A8
239239 #define H_REGISTER_RPAGES 0x1AC
240
-#define H_DISABLE_AND_GETC 0x1B0
240
+#define H_DISABLE_AND_GET 0x1B0
241241 #define H_ERROR_DATA 0x1B4
242242 #define H_GET_HCA_INFO 0x1B8
243243 #define H_GET_PERF_COUNT 0x1BC
....@@ -278,6 +278,7 @@
278278 #define H_COP 0x304
279279 #define H_GET_MPP_X 0x314
280280 #define H_SET_MODE 0x31C
281
+#define H_BLOCK_REMOVE 0x328
281282 #define H_CLEAR_HPT 0x358
282283 #define H_REQUEST_VMC 0x360
283284 #define H_RESIZE_HPT_PREPARE 0x36C
....@@ -295,7 +296,21 @@
295296 #define H_INT_ESB 0x3C8
296297 #define H_INT_SYNC 0x3CC
297298 #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)
299314
300315 /* H_VIOCTL functions */
301316 #define H_GET_VIOA_DUMP_SIZE 0x01
....@@ -322,11 +337,28 @@
322337 #define H_GET_24X7_DATA 0xF07C
323338 #define H_GET_PERF_COUNTER_INFO 0xF080
324339
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
+
325356 /* Values for 2nd argument to H_SET_MODE */
326357 #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
328359 #define H_SET_MODE_RESOURCE_ADDR_TRANS_MODE 3
329360 #define H_SET_MODE_RESOURCE_LE 4
361
+#define H_SET_MODE_RESOURCE_SET_DAWR1 5
330362
331363 /* Values for argument to H_SIGNAL_SYS_RESET */
332364 #define H_SIGNAL_SYS_RESET_ALL -1
....@@ -343,11 +375,15 @@
343375 #define H_CPU_CHAR_THREAD_RECONFIG_CTRL (1ull << 57) // IBM bit 6
344376 #define H_CPU_CHAR_COUNT_CACHE_DISABLED (1ull << 56) // IBM bit 7
345377 #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
346379
347380 #define H_CPU_BEHAV_FAVOUR_SECURITY (1ull << 63) // IBM bit 0
348381 #define H_CPU_BEHAV_L1D_FLUSH_PR (1ull << 62) // IBM bit 1
349382 #define H_CPU_BEHAV_BNDS_CHK_SPEC_BAR (1ull << 61) // IBM bit 2
350383 #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
351387
352388 /* Flag values used in H_REGISTER_PROC_TBL hcall */
353389 #define PROC_TABLE_OP_MASK 0x18
....@@ -358,6 +394,37 @@
358394 #define PROC_TABLE_HPT_PT 0x02
359395 #define PROC_TABLE_RADIX 0x04
360396 #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)
361428
362429 #ifndef __ASSEMBLY__
363430 #include <linux/types.h>
....@@ -371,6 +438,9 @@
371438 * the other plpar_hcalls.
372439 */
373440 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, ...);
374444
375445 /**
376446 * plpar_hcall: - Make a pseries hypervisor call
....@@ -461,6 +531,78 @@
461531 u64 behaviour;
462532 };
463533
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
+
464606 #endif /* __ASSEMBLY__ */
465607 #endif /* __KERNEL__ */
466608 #endif /* _ASM_POWERPC_HVCALL_H */