[Linaro-uefi,v3,6/6] Platforms/FVP-AArch64: switch to simpler DT platform driver

Message ID 20170410162208.20611-7-ard.biesheuvel@linaro.org
State Accepted
Commit f8757df45f6a6ef9ce203c4f95eaf25ab57930a8
Headers show
Series
  • Platforms/ARM: FVP spring cleaning -- OpenPlatformPkg edition
Related show

Commit Message

Ard Biesheuvel April 10, 2017, 4:22 p.m.
Replace the elaborate but awkward FdtPlatformDxe with the new
DtPlatformDxe, which supports embedded DTBs only. This is
sufficient for virtually all use cases, and if it is not, there
are various way to override the device tree binary presented to
the OS.

As a bonus, this driver makes ACPI and DT mutually exclusive - this
can be configured via the setup screen.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
---
 Platforms/ARM/Juno/ArmJuno.dsc                     |  8 +++++
 Platforms/ARM/VExpress/ArmVExpress-CTA15-A7.dsc    |  8 +++++
 Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.dsc | 27 ++++++++------
 Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.fdf | 37 ++++++--------------
 Platforms/ARM/VExpress/ArmVExpress.dsc.inc         |  8 -----
 5 files changed, 44 insertions(+), 44 deletions(-)

Comments

Leif Lindholm April 11, 2017, 6:32 p.m. | #1
On Mon, Apr 10, 2017 at 05:22:08PM +0100, Ard Biesheuvel wrote:
> Replace the elaborate but awkward FdtPlatformDxe with the new
> DtPlatformDxe, which supports embedded DTBs only.

So, this is technically correct (which as we all know is the best kind
of correct), but then the first two hunks actually insert new
references to FdtPlatformDxe.

What this code actually does is replaces FdtPlatformDxe with
DtPlatformDxe in the common include files and makes the
FdtPlatformDxe/DtPlatformDxe selection platform specific.

So, suggested change:
"Replace the elaborate but awkward FdtPlatformDxe with the new
DtPlatformDxe, which supports embedded DTBs only, for FVP platforms.
This is done by removing the FdtPlatformDxe reference from
ArmVExpress.dsc.inc and making it a platform-specific decision."

With that (or something like it) folded in - for the series:
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>

> This is
> sufficient for virtually all use cases, and if it is not, there
> are various way to override the device tree binary presented to
> the OS.
> 
> As a bonus, this driver makes ACPI and DT mutually exclusive - this
> can be configured via the setup screen.
> 
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
> ---
>  Platforms/ARM/Juno/ArmJuno.dsc                     |  8 +++++
>  Platforms/ARM/VExpress/ArmVExpress-CTA15-A7.dsc    |  8 +++++
>  Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.dsc | 27 ++++++++------
>  Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.fdf | 37 ++++++--------------
>  Platforms/ARM/VExpress/ArmVExpress.dsc.inc         |  8 -----
>  5 files changed, 44 insertions(+), 44 deletions(-)
> 
> diff --git a/Platforms/ARM/Juno/ArmJuno.dsc b/Platforms/ARM/Juno/ArmJuno.dsc
> index 6adb33c76087..4ff2246822e6 100644
> --- a/Platforms/ARM/Juno/ArmJuno.dsc
> +++ b/Platforms/ARM/Juno/ArmJuno.dsc
> @@ -340,6 +340,14 @@
>        NULL|MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanceManagerUiLib.inf
>    }
>  
> +  #
> +  # FDT installation
> +  #
> +  EmbeddedPkg/Drivers/FdtPlatformDxe/FdtPlatformDxe.inf {
> +    <LibraryClasses>
> +      BdsLib|ArmPkg/Library/BdsLib/BdsLib.inf
> +  }
> +
>  [Components.AARCH64]
>    #
>    # EBC
> diff --git a/Platforms/ARM/VExpress/ArmVExpress-CTA15-A7.dsc b/Platforms/ARM/VExpress/ArmVExpress-CTA15-A7.dsc
> index 55640837ba7c..d1cfc719837c 100644
> --- a/Platforms/ARM/VExpress/ArmVExpress-CTA15-A7.dsc
> +++ b/Platforms/ARM/VExpress/ArmVExpress-CTA15-A7.dsc
> @@ -284,3 +284,11 @@
>        NULL|MdeModulePkg/Library/BootManagerUiLib/BootManagerUiLib.inf
>        NULL|MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanceManagerUiLib.inf
>    }
> +
> +  #
> +  # FDT installation
> +  #
> +  EmbeddedPkg/Drivers/FdtPlatformDxe/FdtPlatformDxe.inf {
> +    <LibraryClasses>
> +      BdsLib|ArmPkg/Library/BdsLib/BdsLib.inf
> +  }
> diff --git a/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.dsc b/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.dsc
> index 5b19184b061e..1e95971cddfd 100644
> --- a/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.dsc
> +++ b/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.dsc
> @@ -35,6 +35,7 @@
>    DEFINE EDK2_SKIP_PEICORE=1
>  !endif
>  
> +  DT_SUPPORT                     = FALSE
>  
>  !include OpenPlatformPkg/Platforms/ARM/VExpress/ArmVExpress.dsc.inc
>  
> @@ -58,6 +59,8 @@
>    FileExplorerLib|MdeModulePkg/Library/FileExplorerLib/FileExplorerLib.inf
>  !endif
>  
> +  DtPlatformDtbLoaderLib|OpenPlatformPkg/Platforms/ARM/VExpress/Library/ArmVExpressDtPlatformDtbLoaderLib/ArmVExpressDtPlatformDtbLoaderLib.inf
> +
>  [LibraryClasses.common.SEC]
>    ArmPlatformSecLib|ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressSecLibRTSM/ArmVExpressSecLib.inf
>    ArmPlatformLib|ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibRTSM/ArmVExpressLibSec.inf
> @@ -172,15 +175,6 @@
>    # the entire FVP address space can be covered by 36 bit VAs
>    gEmbeddedTokenSpaceGuid.PcdPrePiCpuMemorySize|36
>  
> -[PcdsDynamicDefault.common]
> -  #
> -  # The size of a dynamic PCD of the (VOID*) type can not be increased at run
> -  # time from its size at build time. Set the "PcdFdtDevicePaths" PCD to a 128
> -  # character "empty" string, to allow to be able to set FDT text device paths
> -  # up to 128 characters long.
> -  #
> -  gEmbeddedTokenSpaceGuid.PcdFdtDevicePaths|L"                                                                                                                                "
> -
>  ################################################################################
>  #
>  # Components Section - list of all EDK II Modules needed by this Platform
> @@ -261,7 +255,13 @@
>    #
>    # ACPI Support
>    #
> -  MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf
> +  MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf {
> +!if $(DT_SUPPORT) == TRUE
> +  <LibraryClasses>
> +    NULL|EmbeddedPkg/Library/PlatformHasAcpiLib/PlatformHasAcpiLib.inf
> +!endif
> +  }
> +
>    MdeModulePkg/Universal/Acpi/AcpiPlatformDxe/AcpiPlatformDxe.inf
>    OpenPlatformPkg/Platforms/ARM/VExpress/AcpiTables/AcpiTables.inf
>  
> @@ -314,3 +314,10 @@
>        NULL|MdeModulePkg/Library/BootManagerUiLib/BootManagerUiLib.inf
>        NULL|MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanceManagerUiLib.inf
>    }
> +
> +!if $(DT_SUPPORT) == TRUE
> +  #
> +  # FDT installation
> +  #
> +  EmbeddedPkg/Drivers/DtPlatformDxe/DtPlatformDxe.inf
> +!endif
> diff --git a/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.fdf b/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.fdf
> index 262515150dd9..7b2397417534 100644
> --- a/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.fdf
> +++ b/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.fdf
> @@ -170,35 +170,20 @@ FvNameGuid         = 87940482-fc81-41c3-87e6-399cf85ac8a0
>    # FV Filesystem
>    INF MdeModulePkg/Universal/FvSimpleFileSystemDxe/FvSimpleFileSystemDxe.inf
>  
> +!if $(DT_SUPPORT) == TRUE
>    #
>    # FDT installation
>    #
> -  # The UEFI driver is at the end of the list of the driver to be dispatched
> -  # after the device drivers (eg: Ethernet) to ensure we have support for them.
> -  INF EmbeddedPkg/Drivers/FdtPlatformDxe/FdtPlatformDxe.inf
> -
> -!ifdef $(DTB_DIR)
> -  #
> -  # Embed flattened device tree (FDT) images for all known
> -  # variants of this platform
> -  #
> -  FILE RAW = PCD (gArmVExpressTokenSpaceGuid.PcdFdtFvpBaseAEMv8x4GicV2) {
> -    $(DTB_DIR)/fvp-base-gicv2-psci.dtb
> -  }
> -  FILE RAW = PCD (gArmVExpressTokenSpaceGuid.PcdFdtFvpBaseAEMv8x4GicV2Legacy) {
> -    $(DTB_DIR)/fvp-base-gicv2legacy-psci.dtb
> -  }
> -  FILE RAW = PCD (gArmVExpressTokenSpaceGuid.PcdFdtFvpBaseAEMv8x4GicV3) {
> -    $(DTB_DIR)/fvp-base-gicv3-psci.dtb
> -  }
> -  FILE RAW = PCD (gArmVExpressTokenSpaceGuid.PcdFdtFvpFoundationGicV2) {
> -    $(DTB_DIR)/fvp-foundation-gicv2-psci.dtb
> -  }
> -  FILE RAW = PCD (gArmVExpressTokenSpaceGuid.PcdFdtFvpFoundationGicV2Legacy) {
> -    $(DTB_DIR)/fvp-foundation-gicv2legacy-psci.dtb
> -  }
> -  FILE RAW = PCD (gArmVExpressTokenSpaceGuid.PcdFdtFvpFoundationGicV3) {
> -    $(DTB_DIR)/fvp-foundation-gicv3-psci.dtb
> +  INF EmbeddedPkg/Drivers/DtPlatformDxe/DtPlatformDxe.inf
> +
> +  # builtin device tree binaries -- order matches ARM_VEXPRESS_PLATFORM_ID
> +  FILE FREEFORM = 25462CDA-221F-47DF-AC1D-259CFAA4E326 {
> +    SECTION RAW = OpenPlatformPkg/Platforms/ARM/VExpress/DeviceTree/fvp-base-gicv2-psci.dtb
> +    SECTION RAW = OpenPlatformPkg/Platforms/ARM/VExpress/DeviceTree/fvp-base-gicv2legacy-psci.dtb
> +    SECTION RAW = OpenPlatformPkg/Platforms/ARM/VExpress/DeviceTree/fvp-base-gicv3-psci.dtb
> +    SECTION RAW = OpenPlatformPkg/Platforms/ARM/VExpress/DeviceTree/fvp-foundation-gicv2-psci.dtb
> +    SECTION RAW = OpenPlatformPkg/Platforms/ARM/VExpress/DeviceTree/fvp-foundation-gicv2legacy-psci.dtb
> +    SECTION RAW = OpenPlatformPkg/Platforms/ARM/VExpress/DeviceTree/fvp-foundation-gicv3-psci.dtb
>    }
>  !endif
>  
> diff --git a/Platforms/ARM/VExpress/ArmVExpress.dsc.inc b/Platforms/ARM/VExpress/ArmVExpress.dsc.inc
> index 9dfe2ac9e440..8c4de54c8875 100644
> --- a/Platforms/ARM/VExpress/ArmVExpress.dsc.inc
> +++ b/Platforms/ARM/VExpress/ArmVExpress.dsc.inc
> @@ -491,14 +491,6 @@
>    MdeModulePkg/Universal/FvSimpleFileSystemDxe/FvSimpleFileSystemDxe.inf
>  
>    #
> -  # FDT installation
> -  #
> -  EmbeddedPkg/Drivers/FdtPlatformDxe/FdtPlatformDxe.inf {
> -    <LibraryClasses>
> -      BdsLib|ArmPkg/Library/BdsLib/BdsLib.inf
> -  }
> -
> -  #
>    # UEFI application (Shell Embedded Boot Loader)
>    #
>    ShellPkg/Application/Shell/Shell.inf {
> -- 
> 2.9.3
>
Ard Biesheuvel April 11, 2017, 6:41 p.m. | #2
On 11 April 2017 at 19:32, Leif Lindholm <leif.lindholm@linaro.org> wrote:
> On Mon, Apr 10, 2017 at 05:22:08PM +0100, Ard Biesheuvel wrote:
>> Replace the elaborate but awkward FdtPlatformDxe with the new
>> DtPlatformDxe, which supports embedded DTBs only.
>
> So, this is technically correct (which as we all know is the best kind
> of correct), but then the first two hunks actually insert new
> references to FdtPlatformDxe.
>
> What this code actually does is replaces FdtPlatformDxe with
> DtPlatformDxe in the common include files and makes the
> FdtPlatformDxe/DtPlatformDxe selection platform specific.
>
> So, suggested change:
> "Replace the elaborate but awkward FdtPlatformDxe with the new
> DtPlatformDxe, which supports embedded DTBs only, for FVP platforms.
> This is done by removing the FdtPlatformDxe reference from
> ArmVExpress.dsc.inc and making it a platform-specific decision."
>
> With that (or something like it) folded in - for the series:
> Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
>

Both parts pushed to edk2 and opp, respectively.

Patch

diff --git a/Platforms/ARM/Juno/ArmJuno.dsc b/Platforms/ARM/Juno/ArmJuno.dsc
index 6adb33c76087..4ff2246822e6 100644
--- a/Platforms/ARM/Juno/ArmJuno.dsc
+++ b/Platforms/ARM/Juno/ArmJuno.dsc
@@ -340,6 +340,14 @@ 
       NULL|MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanceManagerUiLib.inf
   }
 
+  #
+  # FDT installation
+  #
+  EmbeddedPkg/Drivers/FdtPlatformDxe/FdtPlatformDxe.inf {
+    <LibraryClasses>
+      BdsLib|ArmPkg/Library/BdsLib/BdsLib.inf
+  }
+
 [Components.AARCH64]
   #
   # EBC
diff --git a/Platforms/ARM/VExpress/ArmVExpress-CTA15-A7.dsc b/Platforms/ARM/VExpress/ArmVExpress-CTA15-A7.dsc
index 55640837ba7c..d1cfc719837c 100644
--- a/Platforms/ARM/VExpress/ArmVExpress-CTA15-A7.dsc
+++ b/Platforms/ARM/VExpress/ArmVExpress-CTA15-A7.dsc
@@ -284,3 +284,11 @@ 
       NULL|MdeModulePkg/Library/BootManagerUiLib/BootManagerUiLib.inf
       NULL|MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanceManagerUiLib.inf
   }
+
+  #
+  # FDT installation
+  #
+  EmbeddedPkg/Drivers/FdtPlatformDxe/FdtPlatformDxe.inf {
+    <LibraryClasses>
+      BdsLib|ArmPkg/Library/BdsLib/BdsLib.inf
+  }
diff --git a/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.dsc b/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.dsc
index 5b19184b061e..1e95971cddfd 100644
--- a/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.dsc
+++ b/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.dsc
@@ -35,6 +35,7 @@ 
   DEFINE EDK2_SKIP_PEICORE=1
 !endif
 
+  DT_SUPPORT                     = FALSE
 
 !include OpenPlatformPkg/Platforms/ARM/VExpress/ArmVExpress.dsc.inc
 
@@ -58,6 +59,8 @@ 
   FileExplorerLib|MdeModulePkg/Library/FileExplorerLib/FileExplorerLib.inf
 !endif
 
+  DtPlatformDtbLoaderLib|OpenPlatformPkg/Platforms/ARM/VExpress/Library/ArmVExpressDtPlatformDtbLoaderLib/ArmVExpressDtPlatformDtbLoaderLib.inf
+
 [LibraryClasses.common.SEC]
   ArmPlatformSecLib|ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressSecLibRTSM/ArmVExpressSecLib.inf
   ArmPlatformLib|ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibRTSM/ArmVExpressLibSec.inf
@@ -172,15 +175,6 @@ 
   # the entire FVP address space can be covered by 36 bit VAs
   gEmbeddedTokenSpaceGuid.PcdPrePiCpuMemorySize|36
 
-[PcdsDynamicDefault.common]
-  #
-  # The size of a dynamic PCD of the (VOID*) type can not be increased at run
-  # time from its size at build time. Set the "PcdFdtDevicePaths" PCD to a 128
-  # character "empty" string, to allow to be able to set FDT text device paths
-  # up to 128 characters long.
-  #
-  gEmbeddedTokenSpaceGuid.PcdFdtDevicePaths|L"                                                                                                                                "
-
 ################################################################################
 #
 # Components Section - list of all EDK II Modules needed by this Platform
@@ -261,7 +255,13 @@ 
   #
   # ACPI Support
   #
-  MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf
+  MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf {
+!if $(DT_SUPPORT) == TRUE
+  <LibraryClasses>
+    NULL|EmbeddedPkg/Library/PlatformHasAcpiLib/PlatformHasAcpiLib.inf
+!endif
+  }
+
   MdeModulePkg/Universal/Acpi/AcpiPlatformDxe/AcpiPlatformDxe.inf
   OpenPlatformPkg/Platforms/ARM/VExpress/AcpiTables/AcpiTables.inf
 
@@ -314,3 +314,10 @@ 
       NULL|MdeModulePkg/Library/BootManagerUiLib/BootManagerUiLib.inf
       NULL|MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanceManagerUiLib.inf
   }
+
+!if $(DT_SUPPORT) == TRUE
+  #
+  # FDT installation
+  #
+  EmbeddedPkg/Drivers/DtPlatformDxe/DtPlatformDxe.inf
+!endif
diff --git a/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.fdf b/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.fdf
index 262515150dd9..7b2397417534 100644
--- a/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.fdf
+++ b/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.fdf
@@ -170,35 +170,20 @@  FvNameGuid         = 87940482-fc81-41c3-87e6-399cf85ac8a0
   # FV Filesystem
   INF MdeModulePkg/Universal/FvSimpleFileSystemDxe/FvSimpleFileSystemDxe.inf
 
+!if $(DT_SUPPORT) == TRUE
   #
   # FDT installation
   #
-  # The UEFI driver is at the end of the list of the driver to be dispatched
-  # after the device drivers (eg: Ethernet) to ensure we have support for them.
-  INF EmbeddedPkg/Drivers/FdtPlatformDxe/FdtPlatformDxe.inf
-
-!ifdef $(DTB_DIR)
-  #
-  # Embed flattened device tree (FDT) images for all known
-  # variants of this platform
-  #
-  FILE RAW = PCD (gArmVExpressTokenSpaceGuid.PcdFdtFvpBaseAEMv8x4GicV2) {
-    $(DTB_DIR)/fvp-base-gicv2-psci.dtb
-  }
-  FILE RAW = PCD (gArmVExpressTokenSpaceGuid.PcdFdtFvpBaseAEMv8x4GicV2Legacy) {
-    $(DTB_DIR)/fvp-base-gicv2legacy-psci.dtb
-  }
-  FILE RAW = PCD (gArmVExpressTokenSpaceGuid.PcdFdtFvpBaseAEMv8x4GicV3) {
-    $(DTB_DIR)/fvp-base-gicv3-psci.dtb
-  }
-  FILE RAW = PCD (gArmVExpressTokenSpaceGuid.PcdFdtFvpFoundationGicV2) {
-    $(DTB_DIR)/fvp-foundation-gicv2-psci.dtb
-  }
-  FILE RAW = PCD (gArmVExpressTokenSpaceGuid.PcdFdtFvpFoundationGicV2Legacy) {
-    $(DTB_DIR)/fvp-foundation-gicv2legacy-psci.dtb
-  }
-  FILE RAW = PCD (gArmVExpressTokenSpaceGuid.PcdFdtFvpFoundationGicV3) {
-    $(DTB_DIR)/fvp-foundation-gicv3-psci.dtb
+  INF EmbeddedPkg/Drivers/DtPlatformDxe/DtPlatformDxe.inf
+
+  # builtin device tree binaries -- order matches ARM_VEXPRESS_PLATFORM_ID
+  FILE FREEFORM = 25462CDA-221F-47DF-AC1D-259CFAA4E326 {
+    SECTION RAW = OpenPlatformPkg/Platforms/ARM/VExpress/DeviceTree/fvp-base-gicv2-psci.dtb
+    SECTION RAW = OpenPlatformPkg/Platforms/ARM/VExpress/DeviceTree/fvp-base-gicv2legacy-psci.dtb
+    SECTION RAW = OpenPlatformPkg/Platforms/ARM/VExpress/DeviceTree/fvp-base-gicv3-psci.dtb
+    SECTION RAW = OpenPlatformPkg/Platforms/ARM/VExpress/DeviceTree/fvp-foundation-gicv2-psci.dtb
+    SECTION RAW = OpenPlatformPkg/Platforms/ARM/VExpress/DeviceTree/fvp-foundation-gicv2legacy-psci.dtb
+    SECTION RAW = OpenPlatformPkg/Platforms/ARM/VExpress/DeviceTree/fvp-foundation-gicv3-psci.dtb
   }
 !endif
 
diff --git a/Platforms/ARM/VExpress/ArmVExpress.dsc.inc b/Platforms/ARM/VExpress/ArmVExpress.dsc.inc
index 9dfe2ac9e440..8c4de54c8875 100644
--- a/Platforms/ARM/VExpress/ArmVExpress.dsc.inc
+++ b/Platforms/ARM/VExpress/ArmVExpress.dsc.inc
@@ -491,14 +491,6 @@ 
   MdeModulePkg/Universal/FvSimpleFileSystemDxe/FvSimpleFileSystemDxe.inf
 
   #
-  # FDT installation
-  #
-  EmbeddedPkg/Drivers/FdtPlatformDxe/FdtPlatformDxe.inf {
-    <LibraryClasses>
-      BdsLib|ArmPkg/Library/BdsLib/BdsLib.inf
-  }
-
-  #
   # UEFI application (Shell Embedded Boot Loader)
   #
   ShellPkg/Application/Shell/Shell.inf {