diff --git a/src/guest/aaf.c b/src/guest/aaf.c index a195866..fec99ec 100644 --- a/src/guest/aaf.c +++ b/src/guest/aaf.c @@ -33,6 +33,11 @@ static const char *suspend_support[] = { [AAF_SUSPEND_ENABLE] = "suspend:true" }; +static const char *civ_flag_support[] = { + [AAF_CIV_DISABLE] = "civ_flag:false", + [AAF_CIV_ENABLE] = "civ_flag:true" +}; + static char *aaf_file = NULL; static const char *aaf_config_array[AAF_CONFIG_NUM] = { NULL }; @@ -105,6 +110,11 @@ int set_aaf_option(aaf_config_opt_t opt, unsigned int sub) return -1; aaf_config_array[AAF_CONFIG_GPU_TYPE] = gpu_type[sub]; break; + case AAF_CONFIG_CIV: + if (sub >AAF_CIV_DISABLE) + return -1; + aaf_config_array[AAF_CONFIG_CIV] = civ_flag_support[sub]; + break; default: fprintf(stderr, "%s: Invalid AAF config option!\n", __func__); break; diff --git a/src/guest/guest.c b/src/guest/guest.c index f053892..d8d6fa7 100644 --- a/src/guest/guest.c +++ b/src/guest/guest.c @@ -138,6 +138,8 @@ int load_form_data(char *name) set_field_data(FORM_INDEX_AAF_PATH, val); val = g_key_file_get_string(in, g->name, g->key[AAF_SUSPEND], NULL); set_field_data(FORM_INDEX_AAF_SUSPEND, val); + val = g_key_file_get_string(in, g->name, g->key[AAF_CIV], NULL); + set_field_data(FORM_INDEX_AAF_CIV, val); g = &g_group[GROUP_GUEST_SERVICE]; val = g_key_file_get_string(in, g->name, g->key[GUEST_TIME_KEEP], NULL); @@ -315,6 +317,11 @@ int generate_keyfile(void) g_key_file_set_string(out, g_group[GROUP_AAF].name, g_group[GROUP_AAF].key[AAF_SUSPEND], temp); } + get_field_data(FORM_INDEX_AAF_CIV, temp, sizeof(temp) - 1); + if (0 == check_field(g_group[GROUP_AAF].key[AAF_CIV], temp)) { + g_key_file_set_string(out, g_group[GROUP_AAF].name, g_group[GROUP_AAF].key[AAF_CIV], temp); + } + get_field_data(FORM_INDEX_PCI_PT, temp, sizeof(temp) - 1); g_key_file_set_string(out, g_group[GROUP_PCI_PT].name, g_group[GROUP_PCI_PT].key[PCI_PT], temp); diff --git a/src/guest/start.c b/src/guest/start.c index ba54d30..ce68f23 100644 --- a/src/guest/start.c +++ b/src/guest/start.c @@ -605,6 +605,16 @@ int start_guest(char *name) else g_warning("Invalid setting of AAF Allow suspend option, it should be either true or false\n"); } + + val = g_key_file_get_string(gkf, g->name, g->key[AAF_CIV], NULL); + if (val) { + if (0 == strcmp(val, CIV_ENABLE_STR)) + set_aaf_option(AAF_CONFIG_CIV, AAF_CIV_ENABLE); + else if (0 == strcmp(val, CIV_DISABLE_STR)) + set_aaf_option(AAF_CONFIG_CIV, AAF_CIV_DISABLE); + else + g_warning("Invalid setting of AAF Allow CiV option, it should be either true or false\n"); + } } g = &g_group[GROUP_VGPU]; diff --git a/src/guest/tui.c b/src/guest/tui.c index 70f1a8f..5b7d49c 100644 --- a/src/guest/tui.c +++ b/src/guest/tui.c @@ -363,6 +363,7 @@ int set_field_data(form_index_t index, const char *in) set_field_buffer(g_form_field_data[index].input.f, 0, buf); break; case FORM_INDEX_AAF_SUSPEND: + case FORM_INDEX_AAF_CIV: set_opts_buffer(g_form_field_data[index].input.f, in); break; default: diff --git a/src/include/guest/aaf.h b/src/include/guest/aaf.h index 71e7036..a152976 100644 --- a/src/include/guest/aaf.h +++ b/src/include/guest/aaf.h @@ -11,7 +11,8 @@ typedef enum { AAF_CONFIG_GPU_TYPE = 0, AAF_CONFIG_SUSPEND, - AAF_CONFIG_NUM + AAF_CONFIG_NUM, + AAF_CONFIG_CIV } aaf_config_opt_t; enum { @@ -19,6 +20,11 @@ enum { AAF_SUSPEND_ENABLE }; +enum { + AAF_CIV_DISABLE = 0, + AAF_CIV_ENABLE +}; + enum { AAF_GPU_TYPE_VIRTIO = 0, AAF_GPU_TYPE_GVTG, @@ -29,4 +35,4 @@ int set_aaf_path(const char *bin_path); int set_aaf_option(aaf_config_opt_t opt, unsigned int sub); int flush_aaf_config(void); -#endif /* __AAF_H__ */ \ No newline at end of file +#endif /* __AAF_H__ */ diff --git a/src/include/guest/guest.h b/src/include/guest/guest.h index 5fcdecb..b0e4afa 100644 --- a/src/include/guest/guest.h +++ b/src/include/guest/guest.h @@ -56,6 +56,7 @@ typedef enum { FORM_INDEX_THERMAL_MED, FORM_INDEX_AAF_PATH, FORM_INDEX_AAF_SUSPEND, + FORM_INDEX_AAF_CIV, FORM_INDEX_GUEST_TIME_KEEP, FORM_INDEX_PM_CONTROL, FORM_INDEX_EXTRA_CMD, @@ -183,6 +184,7 @@ enum { /* Sub key of group aaf */ AAF_PATH = 0, AAF_SUSPEND, + AAF_CIV, /* Guest services */ GUEST_TIME_KEEP = 0,