diff --git a/EdkModulePkg/EdkModulePkg.spd b/EdkModulePkg/EdkModulePkg.spd
index 0472f2d66f..3c1bd0c394 100644
--- a/EdkModulePkg/EdkModulePkg.spd
+++ b/EdkModulePkg/EdkModulePkg.spd
@@ -434,7 +434,9 @@
Universal/UserInterface/SetupBrowser/Dxe/SetupBrowser.msa
Universal/Variable/Pei/Variable.msa
Universal/EmuVariable/RuntimeDxe/EmuVariable.msa
+ Universal/EmuVariable/RuntimeDxe/EmuVariableIpf.msa
Universal/Variable/RuntimeDxe/Variable.msa
+ Universal/Variable/RuntimeDxe/VariableIpf.msa
Universal/Capsule/RuntimeDxe/CapsuleRuntime.msa
Universal/WatchdogTimer/Dxe/WatchDogTimer.msa
Universal/StatusCode/Pei/PeiStatusCode.msa
diff --git a/EdkModulePkg/Universal/EmuVariable/RuntimeDxe/EmuVariable.msa b/EdkModulePkg/Universal/EmuVariable/RuntimeDxe/EmuVariable.msa
index 6c7d5fe0d1..9c19e381e9 100644
--- a/EdkModulePkg/Universal/EmuVariable/RuntimeDxe/EmuVariable.msa
+++ b/EdkModulePkg/Universal/EmuVariable/RuntimeDxe/EmuVariable.msa
@@ -17,7 +17,7 @@
FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052
- IA32 X64 IPF EBC
+ IA32 X64 EBC
false
EmuVariable
@@ -40,9 +40,6 @@
UefiDriverEntryPoint
-
- EdkDxeSalLib
-
UefiBootServicesTableLib
@@ -51,10 +48,7 @@
Variable.h
EmuVariable.c
EmuVariable.dxs
- InitVariable.c
- InitVariable.c
- InitVariable.c
- Ipf/InitVariable.c
+ InitVariable.c
@@ -73,12 +67,6 @@
gEfiVariableArchProtocolGuid
-
- gEfiExtendedSalVariableServicesProtocolGuid
-
-
- gEfiExtendedSalBootServiceProtocolGuid
-
EFI_SPECIFICATION_VERSION 0x00020000
diff --git a/EdkModulePkg/Universal/EmuVariable/RuntimeDxe/EmuVariableIpf.msa b/EdkModulePkg/Universal/EmuVariable/RuntimeDxe/EmuVariableIpf.msa
new file mode 100644
index 0000000000..61f5ccff7f
--- /dev/null
+++ b/EdkModulePkg/Universal/EmuVariable/RuntimeDxe/EmuVariableIpf.msa
@@ -0,0 +1,87 @@
+
+
+
+ EmuVariableIpf
+ DXE_SAL_DRIVER
+ A46320E8-0514-489a-BC4E-481624D9CE33
+ 1.0
+ Emulation Variable for EFI_RUNTIME_SERVICES.
+ This module provides three EFI_RUNTIME_SERVICES: SetVariable, GetVariable, GetNextVariableName
+ Copyright (c) 2006, Intel Corporation
+ All rights reserved. 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
+ http://opensource.org/licenses/bsd-license.php
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+ FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052
+
+
+ IPF
+ false
+ EmuVariableIpf
+
+
+
+ BaseLib
+
+
+ BaseMemoryLib
+
+
+ MemoryAllocationLib
+
+
+ DebugLib
+
+
+ UefiRuntimeLib
+
+
+ UefiDriverEntryPoint
+
+
+ EdkDxeSalLib
+
+
+ UefiBootServicesTableLib
+
+
+
+ Variable.h
+ EmuVariable.c
+ EmuVariable.dxs
+ Ipf/InitVariable.c
+
+
+
+
+
+
+
+ gEfiVariableWriteArchProtocolGuid
+
+
+ gEfiVariableArchProtocolGuid
+
+
+ gEfiVariableWriteArchProtocolGuid
+
+
+ gEfiVariableArchProtocolGuid
+
+
+ gEfiExtendedSalVariableServicesProtocolGuid
+
+
+ gEfiExtendedSalBootServiceProtocolGuid
+
+
+
+ EFI_SPECIFICATION_VERSION 0x00020000
+ EDK_RELEASE_VERSION 0x00020000
+
+ VariableServiceInitialize
+
+
+
\ No newline at end of file
diff --git a/EdkModulePkg/Universal/Variable/RuntimeDxe/Ia32Variable.dxs b/EdkModulePkg/Universal/Variable/RuntimeDxe/Variable.dxs
similarity index 100%
rename from EdkModulePkg/Universal/Variable/RuntimeDxe/Ia32Variable.dxs
rename to EdkModulePkg/Universal/Variable/RuntimeDxe/Variable.dxs
diff --git a/EdkModulePkg/Universal/Variable/RuntimeDxe/Variable.msa b/EdkModulePkg/Universal/Variable/RuntimeDxe/Variable.msa
index 65ac9e0e32..d5d83156da 100644
--- a/EdkModulePkg/Universal/Variable/RuntimeDxe/Variable.msa
+++ b/EdkModulePkg/Universal/Variable/RuntimeDxe/Variable.msa
@@ -17,7 +17,7 @@
FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052
- IA32 X64 IPF
+ IA32 X64
false
Variable
@@ -52,9 +52,6 @@
EdkFvbServiceLib
-
- EdkDxeSalLib
-
UefiBootServicesTableLib
@@ -64,12 +61,8 @@
Variable.c
reclaim.h
reclaim.c
- InitVariable.c
- Ia32Variable.dxs
- InitVariable.c
- x64Variable.dxs
- Ipf/InitVariable.c
- IpfVariable.dxs
+ InitVariable.c
+ Variable.dxs
@@ -112,12 +105,6 @@
gEfiFirmwareVolumeBlockProtocolGuid
-
- gEfiExtendedSalBootServiceProtocolGuid
-
-
- gEfiExtendedSalVariableServicesProtocolGuid
-
diff --git a/EdkModulePkg/Universal/Variable/RuntimeDxe/VariableIpf.msa b/EdkModulePkg/Universal/Variable/RuntimeDxe/VariableIpf.msa
new file mode 100644
index 0000000000..42c1a94904
--- /dev/null
+++ b/EdkModulePkg/Universal/Variable/RuntimeDxe/VariableIpf.msa
@@ -0,0 +1,159 @@
+
+
+
+ VariableIpf
+ DXE_SAL_DRIVER
+ 9D0E793B-3970-4a6c-BA26-B4E2C30B437B
+ 1.0
+ Component description file for Variable module.
+ This module installs three EFI_RUNTIME_SERVICES: SetVariable, GetVariable, GetNextVariableName.
+ Copyright (c) 2006, Intel Corporation
+ All rights reserved. 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
+ http://opensource.org/licenses/bsd-license.php
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+ FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052
+
+
+ IPF
+ false
+ VariableIpf
+
+
+
+ PcdLib
+
+
+ BaseLib
+
+
+ UefiLib
+
+
+ UefiDriverEntryPoint
+
+
+ DxeServicesTableLib
+
+
+ UefiRuntimeLib
+
+
+ DebugLib
+
+
+ HobLib
+
+
+ BaseMemoryLib
+
+
+ EdkFvbServiceLib
+
+
+ EdkDxeSalLib
+
+
+ UefiBootServicesTableLib
+
+
+
+ Variable.h
+ Variable.c
+ reclaim.h
+ reclaim.c
+ Ipf/InitVariable.c
+ IpfVariable.dxs
+
+
+
+
+
+
+
+ gEfiVariableArchProtocolGuid
+
+
+ gEfiVariableWriteArchProtocolGuid
+
+
+ gEfiFaultTolerantWriteLiteProtocolGuid
+
+
+ gEfiCpuIoProtocolGuid
+
+
+ gEfiFvbExtensionProtocolGuid
+
+
+ gEfiFirmwareVolumeBlockProtocolGuid
+
+
+ gEfiVariableArchProtocolGuid
+
+
+ gEfiVariableWriteArchProtocolGuid
+
+
+ gEfiFaultTolerantWriteLiteProtocolGuid
+
+
+ gEfiCpuIoProtocolGuid
+
+
+ gEfiFvbExtensionProtocolGuid
+
+
+ gEfiFirmwareVolumeBlockProtocolGuid
+
+
+ gEfiExtendedSalBootServiceProtocolGuid
+
+
+ gEfiExtendedSalVariableServicesProtocolGuid
+
+
+
+
+ gEfiFlashMapHobGuid
+
+
+
+
+ gEfiAlternateFvBlockGuid
+
+
+
+ EFI_SPECIFICATION_VERSION 0x00020000
+ EDK_RELEASE_VERSION 0x00020000
+
+ VariableServiceInitialize
+
+
+ VariableClassAddressChangeEvent
+
+
+
+
+ PcdFlashNvStorageVariableBase
+ gEfiGenericPlatformTokenSpaceGuid
+
+ The driver gets the Variable store base address from this PCD. This base address point to
+ an EFI_FIRMWARE_VOLUMN_HEADER struct.
+
+
+
+ PcdFlashNvStorageVariableSize
+ gEfiGenericPlatformTokenSpaceGuid
+
+ The driver gets the NvStorage Variable Size from this PCD.
+
+
+
+
\ No newline at end of file
diff --git a/EdkModulePkg/Universal/Variable/RuntimeDxe/x64Variable.dxs b/EdkModulePkg/Universal/Variable/RuntimeDxe/x64Variable.dxs
deleted file mode 100644
index e6d92ef9fd..0000000000
--- a/EdkModulePkg/Universal/Variable/RuntimeDxe/x64Variable.dxs
+++ /dev/null
@@ -1,28 +0,0 @@
-/*++
-
-Copyright (c) 2006, Intel Corporation
-All rights reserved. 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
-http://opensource.org/licenses/bsd-license.php
-
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-Module Name:
-
- x64Variable.dxs
-
-Abstract:
-
- Dependency expression source file.
-
---*/
-#include
-#include "DxeDepex.h"
-
-DEPENDENCY_START
- EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL_GUID AND
- EFI_ALTERNATE_FV_BLOCK_GUID AND
- EFI_FTW_LITE_PROTOCOL_GUID
-DEPENDENCY_END
\ No newline at end of file