summaryrefslogtreecommitdiffstats
path: root/qemu/roms/ipxe/src/interface/xen/xengrant.c
diff options
context:
space:
mode:
authorRajithaY <rajithax.yerrumsetty@intel.com>2017-04-25 03:31:15 -0700
committerRajitha Yerrumchetty <rajithax.yerrumsetty@intel.com>2017-05-22 06:48:08 +0000
commitbb756eebdac6fd24e8919e2c43f7d2c8c4091f59 (patch)
treeca11e03542edf2d8f631efeca5e1626d211107e3 /qemu/roms/ipxe/src/interface/xen/xengrant.c
parenta14b48d18a9ed03ec191cf16b162206998a895ce (diff)
Adding qemu as a submodule of KVMFORNFV
This Patch includes the changes to add qemu as a submodule to kvmfornfv repo and make use of the updated latest qemu for the execution of all testcase Change-Id: I1280af507a857675c7f81d30c95255635667bdd7 Signed-off-by:RajithaY<rajithax.yerrumsetty@intel.com>
Diffstat (limited to 'qemu/roms/ipxe/src/interface/xen/xengrant.c')
-rw-r--r--qemu/roms/ipxe/src/interface/xen/xengrant.c232
1 files changed, 0 insertions, 232 deletions
diff --git a/qemu/roms/ipxe/src/interface/xen/xengrant.c b/qemu/roms/ipxe/src/interface/xen/xengrant.c
deleted file mode 100644
index 269cd5836..000000000
--- a/qemu/roms/ipxe/src/interface/xen/xengrant.c
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- * Copyright (C) 2014 Michael Brown <mbrown@fensystems.co.uk>.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301, USA.
- *
- * You can also choose to distribute this program under the terms of
- * the Unmodified Binary Distribution Licence (as given in the file
- * COPYING.UBDL), provided that you have satisfied its requirements.
- */
-
-FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
-
-#include <stdint.h>
-#include <strings.h>
-#include <errno.h>
-#include <assert.h>
-#include <ipxe/io.h>
-#include <ipxe/xen.h>
-#include <ipxe/xengrant.h>
-
-/** @file
- *
- * Xen grant tables
- *
- */
-
-/** Grant table version to try setting
- *
- * Using version 1 grant tables limits guests to using 16TB of
- * grantable RAM, and prevents the use of subpage grants. Some
- * versions of the Xen hypervisor refuse to allow the grant table
- * version to be set after the first grant references have been
- * created, so the loaded operating system may be stuck with whatever
- * choice we make here. We therefore currently use version 2 grant
- * tables, since they give the most flexibility to the loaded OS.
- *
- * Current versions (7.2.0) of the Windows PV drivers have no support
- * for version 2 grant tables, and will merrily create version 1
- * entries in what the hypervisor believes to be a version 2 table.
- * This causes some confusion.
- *
- * Avoid this problem by attempting to use version 1 tables, since
- * otherwise we may render Windows unable to boot.
- *
- * Play nicely with other potential bootloaders by accepting either
- * version 1 or version 2 grant tables (if we are unable to set our
- * requested version).
- */
-#define XENGRANT_TRY_VERSION 1
-
-/**
- * Initialise grant table
- *
- * @v xen Xen hypervisor
- * @ret rc Return status code
- */
-int xengrant_init ( struct xen_hypervisor *xen ) {
- struct gnttab_query_size size;
- struct gnttab_set_version set_version;
- struct gnttab_get_version get_version;
- struct grant_entry_v1 *v1;
- union grant_entry_v2 *v2;
- unsigned int version;
- int xenrc;
- int rc;
-
- /* Get grant table size */
- size.dom = DOMID_SELF;
- if ( ( xenrc = xengrant_query_size ( xen, &size ) ) != 0 ) {
- rc = -EXEN ( xenrc );
- DBGC ( xen, "XENGRANT could not get table size: %s\n",
- strerror ( rc ) );
- return rc;
- }
- xen->grant.len = ( size.nr_frames * PAGE_SIZE );
-
- /* Set grant table version, if applicable */
- set_version.version = XENGRANT_TRY_VERSION;
- if ( ( xenrc = xengrant_set_version ( xen, &set_version ) ) != 0 ) {
- rc = -EXEN ( xenrc );
- DBGC ( xen, "XENGRANT could not set version %d: %s\n",
- XENGRANT_TRY_VERSION, strerror ( rc ) );
- /* Continue; use whatever version is current */
- }
-
- /* Get grant table version */
- get_version.dom = DOMID_SELF;
- get_version.pad = 0;
- if ( ( xenrc = xengrant_get_version ( xen, &get_version ) ) == 0 ) {
- version = get_version.version;
- switch ( version ) {
-
- case 0:
- /* Version not yet specified: will be version 1 */
- version = 1;
- break;
-
- case 1 :
- /* Version 1 table: nothing special to do */
- break;
-
- case 2:
- /* Version 2 table: configure shift appropriately */
- xen->grant.shift = ( fls ( sizeof ( *v2 ) /
- sizeof ( *v1 ) ) - 1 );
- break;
-
- default:
- /* Unsupported version */
- DBGC ( xen, "XENGRANT detected unsupported version "
- "%d\n", version );
- return -ENOTSUP;
-
- }
- } else {
- rc = -EXEN ( xenrc );
- DBGC ( xen, "XENGRANT could not get version (assuming v1): "
- "%s\n", strerror ( rc ) );
- version = 1;
- }
-
- DBGC ( xen, "XENGRANT using v%d table with %d entries\n",
- version, xengrant_entries ( xen ) );
- return 0;
-}
-
-/**
- * Allocate grant references
- *
- * @v xen Xen hypervisor
- * @v refs Grant references to fill in
- * @v count Number of references
- * @ret rc Return status code
- */
-int xengrant_alloc ( struct xen_hypervisor *xen, grant_ref_t *refs,
- unsigned int count ) {
- struct grant_entry_header *hdr;
- unsigned int entries = xengrant_entries ( xen );
- unsigned int mask = ( entries - 1 );
- unsigned int check = 0;
- unsigned int avail;
- unsigned int ref;
-
- /* Fail unless we have enough references available */
- avail = ( entries - xen->grant.used - GNTTAB_NR_RESERVED_ENTRIES );
- if ( avail < count ) {
- DBGC ( xen, "XENGRANT cannot allocate %d references (only %d "
- "of %d available)\n", count, avail, entries );
- return -ENOBUFS;
- }
- DBGC ( xen, "XENGRANT allocating %d references (from %d of %d "
- "available)\n", count, avail, entries );
-
- /* Update number of references used */
- xen->grant.used += count;
-
- /* Find unused references */
- for ( ref = xen->grant.ref ; count ; ref = ( ( ref + 1 ) & mask ) ) {
-
- /* Sanity check */
- assert ( check++ < entries );
-
- /* Skip reserved references */
- if ( ref < GNTTAB_NR_RESERVED_ENTRIES )
- continue;
-
- /* Skip in-use references */
- hdr = xengrant_header ( xen, ref );
- if ( readw ( &hdr->flags ) & GTF_type_mask )
- continue;
- if ( readw ( &hdr->domid ) == DOMID_SELF )
- continue;
-
- /* Zero reference */
- xengrant_zero ( xen, hdr );
-
- /* Mark reference as in-use. We leave the flags as
- * empty (to avoid creating a valid grant table entry)
- * and set the domid to DOMID_SELF.
- */
- writew ( DOMID_SELF, &hdr->domid );
- DBGC2 ( xen, "XENGRANT allocated ref %d\n", ref );
-
- /* Record reference */
- refs[--count] = ref;
- }
-
- /* Update cursor */
- xen->grant.ref = ref;
-
- return 0;
-}
-
-/**
- * Free grant references
- *
- * @v xen Xen hypervisor
- * @v refs Grant references
- * @v count Number of references
- */
-void xengrant_free ( struct xen_hypervisor *xen, grant_ref_t *refs,
- unsigned int count ) {
- struct grant_entry_header *hdr;
- unsigned int ref;
- unsigned int i;
-
- /* Free references */
- for ( i = 0 ; i < count ; i++ ) {
-
- /* Sanity check */
- ref = refs[i];
- assert ( ref < xengrant_entries ( xen ) );
-
- /* Zero reference */
- hdr = xengrant_header ( xen, ref );
- xengrant_zero ( xen, hdr );
- DBGC2 ( xen, "XENGRANT freed ref %d\n", ref );
- }
-}