struct kvm_tdx_capabilities {
         __u64 supported_attrs;
         __u64 supported_xfam;
-        __u64 reserved[254];
+
+        /* TDG.VP.VMCALL hypercalls executed in kernel and forwarded to
+         * userspace, respectively
+         */
+        __u64 kernel_tdvmcallinfo_1_r11;
+        __u64 user_tdvmcallinfo_1_r11;
+
+        /* TDG.VP.VMCALL instruction executions subfunctions executed in kernel
+         * and forwarded to userspace, respectively
+         */
+        __u64 kernel_tdvmcallinfo_1_r12;
+        __u64 user_tdvmcallinfo_1_r12;
+
+        __u64 reserved[250];
 
         /* Configurable CPUID bits for userspace */
         struct kvm_cpuid2 cpuid;
 
 struct kvm_tdx_capabilities {
        __u64 supported_attrs;
        __u64 supported_xfam;
-       __u64 reserved[254];
+
+       __u64 kernel_tdvmcallinfo_1_r11;
+       __u64 user_tdvmcallinfo_1_r11;
+       __u64 kernel_tdvmcallinfo_1_r12;
+       __u64 user_tdvmcallinfo_1_r12;
+
+       __u64 reserved[250];
 
        /* Configurable CPUID bits for userspace */
        struct kvm_cpuid2 cpuid;
 
        tdx_clear_unsupported_cpuid(entry);
 }
 
+#define TDVMCALLINFO_GET_QUOTE                         BIT(0)
+#define TDVMCALLINFO_SETUP_EVENT_NOTIFY_INTERRUPT      BIT(1)
+
 static int init_kvm_tdx_caps(const struct tdx_sys_info_td_conf *td_conf,
                             struct kvm_tdx_capabilities *caps)
 {
 
        caps->cpuid.nent = td_conf->num_cpuid_config;
 
+       caps->user_tdvmcallinfo_1_r11 =
+               TDVMCALLINFO_GET_QUOTE |
+               TDVMCALLINFO_SETUP_EVENT_NOTIFY_INTERRUPT;
+
        for (i = 0; i < td_conf->num_cpuid_config; i++)
                td_init_cpuid_entry2(&caps->cpuid.entries[i], i);