From 1d951a3086ab569073ee60e890a1cddf512d122c Mon Sep 17 00:00:00 2001 From: Feng Tian Date: Tue, 22 Nov 2011 03:01:14 +0000 Subject: Only traverse recovery file's FAT table to fast the recovery performance. Signed-off-by: erictian Reviewed-by: niruiyu (based on FatPkg commit 6e68a62cf0c6b8ecad2bceff4e8d86ff08d1f041) [jordan.l.justen@intel.com: Use script to relicense to 2-clause BSD] Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jordan Justen Acked-by: Mark Doran Acked-by: Laszlo Ersek --- FatPkg/FatPei/FatLiteAccess.c | 10 +++++----- FatPkg/FatPei/FatLiteApi.c | 13 ++++++++++++- 2 files changed, 17 insertions(+), 6 deletions(-) (limited to 'FatPkg') diff --git a/FatPkg/FatPei/FatLiteAccess.c b/FatPkg/FatPei/FatLiteAccess.c index 0a688a3185..53f5e3f60c 100644 --- a/FatPkg/FatPei/FatLiteAccess.c +++ b/FatPkg/FatPei/FatLiteAccess.c @@ -1,7 +1,7 @@ /** @file FAT file system access routines for FAT recovery PEIM -Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.
+Copyright (c) 2006 - 2011, 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 @@ -315,7 +315,10 @@ FatSetFilePos ( } File->CurrentPos += Pos; - + // + // Calculate the amount of consecutive cluster occupied by the file. + // FatReadFile() will use it to read these blocks once. + // File->StraightReadAmount = 0; Cluster = File->CurrentCluster; while (!FAT_CLUSTER_FUNCTIONAL (Cluster)) { @@ -517,9 +520,6 @@ FatReadNextDirectoryEntry ( SubFile->StartingCluster = SubFile->CurrentCluster; SubFile->Volume = ParentDir->Volume; - if (SubFile->StartingCluster != 0) { - Status = FatSetFilePos (PrivateData, SubFile, 0); - } // // in Pei phase, time parameters do not need to be filled for minimum use. // diff --git a/FatPkg/FatPei/FatLiteApi.c b/FatPkg/FatPei/FatLiteApi.c index bf8158d94f..46054be284 100644 --- a/FatPkg/FatPei/FatLiteApi.c +++ b/FatPkg/FatPei/FatLiteApi.c @@ -1,7 +1,7 @@ /** @file FAT recovery PEIM entry point, Ppi Functions and FAT Api functions. -Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.
+Copyright (c) 2006 - 2011, 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 @@ -577,6 +577,7 @@ FindRecoveryFile ( // // Construct root directory file // + ZeroMem (&Parent, sizeof (PEI_FAT_FILE)); Parent.IsFixedRootDir = (BOOLEAN) ((PrivateData->Volume[VolumeIndex].FatType == Fat32) ? FALSE : TRUE); Parent.Attributes = FAT_ATTR_DIRECTORY; Parent.CurrentPos = 0; @@ -593,6 +594,9 @@ FindRecoveryFile ( // Status = FatReadNextDirectoryEntry (PrivateData, &Parent, File); while (Status == EFI_SUCCESS) { + // + // Compare whether the file name is recovery file name. + // if (EngStriColl (PrivateData, FileName, File->FileName)) { break; } @@ -604,6 +608,13 @@ FindRecoveryFile ( return EFI_NOT_FOUND; } + // + // Get the recovery file, set its file position to 0. + // + if (File->StartingCluster != 0) { + Status = FatSetFilePos (PrivateData, File, 0); + } + *Handle = File; return EFI_SUCCESS; -- cgit v1.2.3