1 /** @file
2   C based implemention of IA32 interrupt handling only
3   requiring a minimal assembly interrupt entry point.
4 
5   Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>
6   This program and the accompanying materials
7   are licensed and made available under the terms and conditions of the BSD License
8   which accompanies this distribution.  The full text of the license may be found at
9   http://opensource.org/licenses/bsd-license.php
10 
11   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
13 
14 **/
15 
16 #ifndef _CPU_GDT_H_
17 #define _CPU_GDT_H_
18 
19 //
20 // Local structure definitions
21 //
22 
23 #pragma pack (1)
24 
25 //
26 // Global Descriptor Entry structures
27 //
28 
29 typedef struct _GDT_ENTRY {
30   UINT16 Limit15_0;
31   UINT16 Base15_0;
32   UINT8  Base23_16;
33   UINT8  Type;
34   UINT8  Limit19_16_and_flags;
35   UINT8  Base31_24;
36 } GDT_ENTRY;
37 
38 typedef
39 struct _GDT_ENTRIES {
40   GDT_ENTRY Null;
41   GDT_ENTRY Linear;
42   GDT_ENTRY LinearCode;
43   GDT_ENTRY SysData;
44   GDT_ENTRY SysCode;
45   GDT_ENTRY Spare4;
46   GDT_ENTRY LinearData64;
47   GDT_ENTRY LinearCode64;
48   GDT_ENTRY Spare5;
49 } GDT_ENTRIES;
50 
51 #pragma pack ()
52 
53 #define NULL_SEL          OFFSET_OF (GDT_ENTRIES, Null)
54 #define LINEAR_SEL        OFFSET_OF (GDT_ENTRIES, Linear)
55 #define LINEAR_CODE_SEL   OFFSET_OF (GDT_ENTRIES, LinearCode)
56 #define SYS_DATA_SEL      OFFSET_OF (GDT_ENTRIES, SysData)
57 #define SYS_CODE_SEL      OFFSET_OF (GDT_ENTRIES, SysCode)
58 #define SPARE4_SEL        OFFSET_OF (GDT_ENTRIES, Spare4)
59 #define LINEAR_DATA64_SEL OFFSET_OF (GDT_ENTRIES, LinearData64)
60 #define LINEAR_CODE64_SEL OFFSET_OF (GDT_ENTRIES, LinearCode64)
61 #define SPARE5_SEL        OFFSET_OF (GDT_ENTRIES, Spare5)
62 
63 #if defined (MDE_CPU_IA32)
64 #define CPU_CODE_SEL LINEAR_CODE_SEL
65 #define CPU_DATA_SEL LINEAR_SEL
66 #elif defined (MDE_CPU_X64)
67 #define CPU_CODE_SEL LINEAR_CODE64_SEL
68 #define CPU_DATA_SEL LINEAR_DATA64_SEL
69 #else
70 #error CPU type not supported for CPU GDT initialization!
71 #endif
72 
73 #endif // _CPU_GDT_H_
74 
75