github.com/jlmucb/cloudproxy@v0.0.0-20170830161738-b5aa0b619bc4/cpvmm/vmm/include/vmcs_hierarchy.h (about) 1 /* 2 * Copyright (c) 2013 Intel Corporation 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * Unless required by applicable law or agreed to in writing, software 9 * distributed under the License is distributed on an "AS IS" BASIS, 10 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 * See the License for the specific language governing permissions and 12 * limitations under the License. 13 */ 14 15 #ifndef _VMCS_HIERARCHY_H_ 16 #define _VMCS_HIERARCHY_H_ 17 18 #include "list.h" 19 #include "vmcs_api.h" 20 21 typedef struct _VMCS_HIERARCHY { 22 VMCS_OBJECT *vmcs[VMCS_LEVELS]; 23 LIST_ELEMENT vmcs_1_list[1]; // contains list of VMCS_1_DESCRIPTOR. empty means no layering 24 } VMCS_HIERARCHY; 25 26 27 INLINE BOOLEAN vmcs_hierarchy_is_layered(VMCS_HIERARCHY *obj) 28 { 29 return obj->vmcs[VMCS_LEVEL_0] != obj->vmcs[VMCS_MERGED]; 30 } 31 32 33 VMM_STATUS vmcs_hierarchy_create(VMCS_HIERARCHY *obj, GUEST_CPU_HANDLE gcpu); 34 VMM_STATUS vmcs_hierarchy_add_vmcs(VMCS_HIERARCHY * obj, GUEST_CPU_HANDLE gcpu, 35 ADDRESS gpa); 36 VMM_STATUS vmcs_hierarchy_remove_vmcs(VMCS_HIERARCHY *obj, VMCS_OBJECT *vmcs_1); 37 VMCS_OBJECT* vmcs_hierarchy_get_vmcs(VMCS_HIERARCHY *obj, VMCS_LEVEL level); 38 VMCS_OBJECT* vmcs_hierarchy_get_next_vmcs_1(VMCS_HIERARCHY *obj); 39 VMCS_OBJECT* vmcs_hierarchy_select_vmcs_1(VMCS_HIERARCHY *obj, VMCS_OBJECT *vmcs); 40 #endif // _VMCS_HIERARCHY_H_ 41