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