]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Core/DxeIplPeim/Ia32/ImageRead.c
Add doxygen style comments for functions in DxeIpl.
[mirror_edk2.git] / MdeModulePkg / Core / DxeIplPeim / Ia32 / ImageRead.c
1 /** @file
2 This module loads an image to memory for IA32 Cpu architecture.
3
4 Copyright (c) 2006 - 2008, Intel Corporation. <BR>
5 All rights reserved. This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
9
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12
13 **/
14
15 #include "DxeIpl.h"
16
17
18
19
20
21 /**
22 Support routine for the PE/COFF Loader that reads a buffer from a PE/COFF file
23
24 @param FileHandle The handle to the PE/COFF file
25 @param FileOffset The offset, in bytes, into the file to read
26 @param ReadSize The number of bytes to read from the file starting at
27 FileOffset
28 @param Buffer A pointer to the buffer to read the data into.
29
30 @retval EFI_SUCCESS ReadSize bytes of data were read into Buffer from the
31 PE/COFF file starting at FileOffset
32
33 **/
34 EFI_STATUS
35 EFIAPI
36 PeiImageRead (
37 IN VOID *FileHandle,
38 IN UINTN FileOffset,
39 IN OUT UINTN *ReadSize,
40 OUT VOID *Buffer
41 )
42 {
43 UINT8 *Destination32;
44 UINT8 *Source32;
45 UINTN Length;
46
47
48 Destination32 = Buffer;
49 Source32 = (UINT8 *) ((UINTN) FileHandle + FileOffset);
50
51 //
52 // This function assumes 32-bit alignment to increase performance
53 //
54 // ASSERT (ALIGN_POINTER (Destination32, sizeof (UINT32)) == Destination32);
55 // ASSERT (ALIGN_POINTER (Source32, sizeof (UINT32)) == Source32);
56
57 Length = *ReadSize;
58 while (Length--) {
59 *(Destination32++) = *(Source32++);
60 }
61
62 return EFI_SUCCESS;
63 }
64
65
66
67
68
69 /**
70 This function simply retrieves the function pointer of ImageRead in
71 ImageContext structure.
72
73 @param ImageContext A pointer to the structure of
74 PE_COFF_LOADER_IMAGE_CONTEXT
75
76 @retval EFI_SUCCESS This function always return EFI_SUCCESS.
77
78 **/
79 EFI_STATUS
80 GetImageReadFunction (
81 IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
82 )
83 {
84 VOID *MemoryBuffer;
85
86 if (gInMemory) {
87 ImageContext->ImageRead = PeiImageRead;
88 return EFI_SUCCESS;
89 }
90
91 //
92 // BugBug; This code assumes PeiImageRead() is less than a page in size!
93 // Allocate a page so we can shaddow the read function from FLASH into
94 // memory to increase performance.
95 //
96
97 MemoryBuffer = AllocateCopyPool (0x400, (VOID *)(UINTN) PeiImageRead);
98 ASSERT (MemoryBuffer != NULL);
99
100 ImageContext->ImageRead = (PE_COFF_LOADER_READ_FILE) (UINTN) MemoryBuffer;
101
102 return EFI_SUCCESS;
103 }