UefiCpuPkg/CpuMpPei: Add CodeSegment and DataSegment fields

Added CodeSegment and DataSegment fields in MP_CPU_EXCHANGE_INFO. They are set
to the values of current BSP's CS and DS.

Cc: Feng Tian <feng.tian@intel.com>
Cc: Michael Kinney <michael.d.kinney@intel.com>
Cc: Giri Mudusuru <giri.p.mudusuru@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jeff Fan <jeff.fan@intel.com>
Reviewed-by: Giri P Mudusuru <giri.p.mudusuru@intel.com>
diff --git a/UefiCpuPkg/CpuMpPei/CpuMpPei.c b/UefiCpuPkg/CpuMpPei/CpuMpPei.c
index bccff24..9b602a1 100644
--- a/UefiCpuPkg/CpuMpPei/CpuMpPei.c
+++ b/UefiCpuPkg/CpuMpPei/CpuMpPei.c
@@ -455,6 +455,8 @@
   ExchangeInfo->PmodeOffset        = PeiCpuMpData->AddressMap.PModeEntryOffset;

   ExchangeInfo->LmodeOffset        = PeiCpuMpData->AddressMap.LModeEntryOffset;

   ExchangeInfo->Cr3                = AsmReadCr3 ();

+  ExchangeInfo->CodeSegment        = AsmReadCs ();

+  ExchangeInfo->DataSegment        = AsmReadDs ();

   ExchangeInfo->CFunction          = (UINTN) ApCFunction;

   ExchangeInfo->NumApsExecuting    = 0;

   ExchangeInfo->PeiCpuMpData       = PeiCpuMpData;

diff --git a/UefiCpuPkg/CpuMpPei/CpuMpPei.h b/UefiCpuPkg/CpuMpPei/CpuMpPei.h
index 5e56934..4c114de 100644
--- a/UefiCpuPkg/CpuMpPei/CpuMpPei.h
+++ b/UefiCpuPkg/CpuMpPei/CpuMpPei.h
@@ -119,6 +119,8 @@
   UINTN                 BufferStart;

   UINTN                 PmodeOffset;

   UINTN                 NumApsExecuting;

+  UINTN                 CodeSegment;

+  UINTN                 DataSegment;

   UINTN                 LmodeOffset;

   UINTN                 Cr3;

   PEI_CPU_MP_DATA       *PeiCpuMpData;

diff --git a/UefiCpuPkg/CpuMpPei/Ia32/MpEqu.inc b/UefiCpuPkg/CpuMpPei/Ia32/MpEqu.inc
index fc637cc..a88185e 100644
--- a/UefiCpuPkg/CpuMpPei/Ia32/MpEqu.inc
+++ b/UefiCpuPkg/CpuMpPei/Ia32/MpEqu.inc
@@ -1,5 +1,5 @@
 ;------------------------------------------------------------------------------ ;

-; Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>

+; Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR>

 ; This program and the accompanying materials

 ; are licensed and made available under the terms and conditions of the BSD License

 ; which accompanies this distribution.  The full text of the license may be found at

@@ -37,4 +37,6 @@
 BufferStartLocation           equ        LockLocation + 1Ch

 PmodeOffsetLocation           equ        LockLocation + 20h

 NumApsExecutingLoction        equ        LockLocation + 24h

+CodeSegmentLocation           equ        LockLocation + 28h

+DataSegmentLocation           equ        LockLocation + 2Ch

 

diff --git a/UefiCpuPkg/CpuMpPei/X64/MpEqu.inc b/UefiCpuPkg/CpuMpPei/X64/MpEqu.inc
index ab851cf..30c7f61 100644
--- a/UefiCpuPkg/CpuMpPei/X64/MpEqu.inc
+++ b/UefiCpuPkg/CpuMpPei/X64/MpEqu.inc
@@ -1,5 +1,5 @@
 ;------------------------------------------------------------------------------ ;

-; Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>

+; Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR>

 ; This program and the accompanying materials

 ; are licensed and made available under the terms and conditions of the BSD License

 ; which accompanies this distribution.  The full text of the license may be found at

@@ -39,7 +39,9 @@
 BufferStartLocation           equ        LockLocation + 34h

 PmodeOffsetLocation           equ        LockLocation + 3Ch

 NumApsExecutingLoction        equ        LockLocation + 44h

-LmodeOffsetLocation           equ        LockLocation + 4Ch

-Cr3Location                   equ        LockLocation + 54h

+CodeSegmentLocation           equ        LockLocation + 4Ch

+DataSegmentLocation           equ        LockLocation + 54h

+LmodeOffsetLocation           equ        LockLocation + 5Ch

+Cr3Location                   equ        LockLocation + 64h

 

 ;-------------------------------------------------------------------------------