REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the OvmfPkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Andrew Fish <afish@apple.com>
		
			
				
	
	
		
			173 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			173 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  Initialize GDT for Linux.
 | 
						|
 | 
						|
  Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
 | 
						|
  SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#include "LoadLinuxLib.h"
 | 
						|
 | 
						|
//
 | 
						|
// Local structure definitions
 | 
						|
//
 | 
						|
 | 
						|
#pragma pack (1)
 | 
						|
 | 
						|
//
 | 
						|
// Global Descriptor Entry structures
 | 
						|
//
 | 
						|
 | 
						|
typedef struct _GDT_ENTRY {
 | 
						|
  UINT16    Limit15_0;
 | 
						|
  UINT16    Base15_0;
 | 
						|
  UINT8     Base23_16;
 | 
						|
  UINT8     Type;
 | 
						|
  UINT8     Limit19_16_and_flags;
 | 
						|
  UINT8     Base31_24;
 | 
						|
} GDT_ENTRY;
 | 
						|
 | 
						|
typedef
 | 
						|
  struct _GDT_ENTRIES {
 | 
						|
  GDT_ENTRY    Null;
 | 
						|
  GDT_ENTRY    Null2;
 | 
						|
  GDT_ENTRY    Linear;
 | 
						|
  GDT_ENTRY    LinearCode;
 | 
						|
  GDT_ENTRY    TaskSegment;
 | 
						|
  GDT_ENTRY    Spare4;
 | 
						|
  GDT_ENTRY    Spare5;
 | 
						|
} GDT_ENTRIES;
 | 
						|
 | 
						|
#pragma pack ()
 | 
						|
 | 
						|
STATIC GDT_ENTRIES  *mGdt = NULL;
 | 
						|
 | 
						|
//
 | 
						|
// Global descriptor table (GDT) Template
 | 
						|
//
 | 
						|
STATIC GDT_ENTRIES  GdtTemplate = {
 | 
						|
  //
 | 
						|
  // Null
 | 
						|
  //
 | 
						|
  {
 | 
						|
    0x0,            // limit 15:0
 | 
						|
    0x0,            // base 15:0
 | 
						|
    0x0,            // base 23:16
 | 
						|
    0x0,            // type
 | 
						|
    0x0,            // limit 19:16, flags
 | 
						|
    0x0,            // base 31:24
 | 
						|
  },
 | 
						|
  //
 | 
						|
  // Null2
 | 
						|
  //
 | 
						|
  {
 | 
						|
    0x0,            // limit 15:0
 | 
						|
    0x0,            // base 15:0
 | 
						|
    0x0,            // base 23:16
 | 
						|
    0x0,            // type
 | 
						|
    0x0,            // limit 19:16, flags
 | 
						|
    0x0,            // base 31:24
 | 
						|
  },
 | 
						|
  //
 | 
						|
  // Linear
 | 
						|
  //
 | 
						|
  {
 | 
						|
    0x0FFFF,        // limit 0xFFFFF
 | 
						|
    0x0,            // base 0
 | 
						|
    0x0,
 | 
						|
    0x09A,          // present, ring 0, data, expand-up, writable
 | 
						|
    0x0CF,          // page-granular, 32-bit
 | 
						|
    0x0,
 | 
						|
  },
 | 
						|
  //
 | 
						|
  // LinearCode
 | 
						|
  //
 | 
						|
  {
 | 
						|
    0x0FFFF,        // limit 0xFFFFF
 | 
						|
    0x0,            // base 0
 | 
						|
    0x0,
 | 
						|
    0x092,          // present, ring 0, data, expand-up, writable
 | 
						|
    0x0CF,          // page-granular, 32-bit
 | 
						|
    0x0,
 | 
						|
  },
 | 
						|
  //
 | 
						|
  // TaskSegment
 | 
						|
  //
 | 
						|
  {
 | 
						|
    0x0,            // limit 0
 | 
						|
    0x0,            // base 0
 | 
						|
    0x0,
 | 
						|
    0x089,          // ?
 | 
						|
    0x080,          // ?
 | 
						|
    0x0,
 | 
						|
  },
 | 
						|
  //
 | 
						|
  // Spare4
 | 
						|
  //
 | 
						|
  {
 | 
						|
    0x0,            // limit 0
 | 
						|
    0x0,            // base 0
 | 
						|
    0x0,
 | 
						|
    0x0,            // present, ring 0, data, expand-up, writable
 | 
						|
    0x0,            // page-granular, 32-bit
 | 
						|
    0x0,
 | 
						|
  },
 | 
						|
  //
 | 
						|
  // Spare5
 | 
						|
  //
 | 
						|
  {
 | 
						|
    0x0,            // limit 0
 | 
						|
    0x0,            // base 0
 | 
						|
    0x0,
 | 
						|
    0x0,            // present, ring 0, data, expand-up, writable
 | 
						|
    0x0,            // page-granular, 32-bit
 | 
						|
    0x0,
 | 
						|
  },
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
  Initialize Global Descriptor Table.
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
InitLinuxDescriptorTables (
 | 
						|
  VOID
 | 
						|
  )
 | 
						|
{
 | 
						|
  //
 | 
						|
  // Allocate Runtime Data for the GDT
 | 
						|
  //
 | 
						|
  mGdt = AllocateRuntimePool (sizeof (GdtTemplate) + 8);
 | 
						|
  ASSERT (mGdt != NULL);
 | 
						|
  mGdt = ALIGN_POINTER (mGdt, 8);
 | 
						|
 | 
						|
  //
 | 
						|
  // Initialize all GDT entries
 | 
						|
  //
 | 
						|
  CopyMem (mGdt, &GdtTemplate, sizeof (GdtTemplate));
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Initialize Global Descriptor Table.
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
SetLinuxDescriptorTables (
 | 
						|
  VOID
 | 
						|
  )
 | 
						|
{
 | 
						|
  IA32_DESCRIPTOR  GdtPtr;
 | 
						|
  IA32_DESCRIPTOR  IdtPtr;
 | 
						|
 | 
						|
  //
 | 
						|
  // Write GDT register
 | 
						|
  //
 | 
						|
  GdtPtr.Base  = (UINT32)(UINTN)(VOID *)mGdt;
 | 
						|
  GdtPtr.Limit = (UINT16)(sizeof (GdtTemplate) - 1);
 | 
						|
  AsmWriteGdtr (&GdtPtr);
 | 
						|
 | 
						|
  IdtPtr.Base  = (UINT32)0;
 | 
						|
  IdtPtr.Limit = (UINT16)0;
 | 
						|
  AsmWriteIdtr (&IdtPtr);
 | 
						|
}
 |