1b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang/*++ 2b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang 34b1e11214a01fa6994e3f77c2481f2723a32221bhhtianCopyright (c) 2004, Intel Corporation. All rights reserved.<BR> 44b1e11214a01fa6994e3f77c2481f2723a32221bhhtianThis program and the accompanying materials 5b38907a6d41515f48fe01a7c3d7c6b84b269926bqwangare licensed and made available under the terms and conditions of the BSD License 6b38907a6d41515f48fe01a7c3d7c6b84b269926bqwangwhich accompanies this distribution. The full text of the license may be found at 7b38907a6d41515f48fe01a7c3d7c6b84b269926bqwanghttp://opensource.org/licenses/bsd-license.php 8b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang 9b38907a6d41515f48fe01a7c3d7c6b84b269926bqwangTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 10b38907a6d41515f48fe01a7c3d7c6b84b269926bqwangWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 11b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang 12b38907a6d41515f48fe01a7c3d7c6b84b269926bqwangModule Name: 13b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang 14b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang MemoryStatusCode.h 15b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang 16b38907a6d41515f48fe01a7c3d7c6b84b269926bqwangAbstract: 17b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang 18b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang Lib to provide status code reporting via memory. 19b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang 20b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang--*/ 21b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang 22b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang#ifndef _PEI_MEMORY_STATUS_CODE_H_ 23b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang#define _PEI_MEMORY_STATUS_CODE_H_ 24b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang 25b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang// 26b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang// Statements that include other files 27b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang// 28b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang#include "Tiano.h" 29b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang#include "Pei.h" 30b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang#include "SimpleCpuIoLib.h" 31b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang#include "EfiCommonLib.h" 32b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang 33b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang// 34b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang// Produced PPI 35b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang// 36b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang#include EFI_PPI_PRODUCER (StatusCodeMemory) 37b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang#include EFI_PPI_PRODUCER (StatusCode) 38b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang 39b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang// 40b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang// Ppi Consumed For Notification 41b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang// 42b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang#include EFI_PPI_CONSUMER (MemoryDiscovered) 43b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang#if (PI_SPECIFICATION_VERSION < 0x00010000) 44b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang#include EFI_PPI_CONSUMER (LoadFile) 45b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang#endif 46b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang// 47b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang// Private data 48b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang// 49b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang// 50b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang// Define the amount of heap to use before memory is allocated 51b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang// 52b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang#define PEI_STATUS_CODE_HEAP_LENGTH 512 53b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang#define PEI_STATUS_CODE_MAX_HEAP_ENTRY (PEI_STATUS_CODE_HEAP_LENGTH / sizeof (EFI_STATUS_CODE_ENTRY)) 54b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang 55b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang// 56b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang// Define the number of 4K pages of BS memory to allocate (1MB) 57b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang// 58b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang#define PEI_STATUS_CODE_RT_PAGES (128) 59b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang#define PEI_STATUS_CODE_RT_LENGTH (PEI_STATUS_CODE_RT_PAGES * 1024 * 4) 60b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang#define PEI_STATUS_CODE_MAX_RT_ENTRY (PEI_STATUS_CODE_RT_LENGTH / sizeof (EFI_STATUS_CODE_ENTRY)) 61b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang 62b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang// 63b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang// Define a private data structure 64b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang// 65b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang#define MEMORY_STATUS_CODE_SIGNATURE EFI_SIGNATURE_32 ('M', 'S', 'C', 'S') 66b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang 67b38907a6d41515f48fe01a7c3d7c6b84b269926bqwangtypedef struct _MEMORY_STATUS_CODE_INSTANCE { 68b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang UINT32 Signature; 69b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang struct _MEMORY_STATUS_CODE_INSTANCE *This; 70b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang EFI_FFS_FILE_HEADER *FfsHeader; 71b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang EFI_PEI_PPI_DESCRIPTOR PpiDescriptor; 72b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang PEI_STATUS_CODE_MEMORY_PPI StatusCodeMemoryPpi; 73b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang#if (PI_SPECIFICATION_VERSION < 0x00010000) 74b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang EFI_PEI_NOTIFY_DESCRIPTOR NotifyDescriptor; 75b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang#endif 76b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang} MEMORY_STATUS_CODE_INSTANCE; 77b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang 78b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang#define MEMORY_STATUS_CODE_FROM_DESCRIPTOR_THIS(a) \ 79b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang PEI_CR (a, \ 80b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang MEMORY_STATUS_CODE_INSTANCE, \ 81b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang PpiDescriptor, \ 82b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang MEMORY_STATUS_CODE_SIGNATURE \ 83b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang ) 84b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang#define MEMORY_STATUS_CODE_FROM_NOTIFY_THIS(a) \ 85b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang PEI_CR (a, \ 86b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang MEMORY_STATUS_CODE_INSTANCE, \ 87b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang NotifyDescriptor, \ 88b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang MEMORY_STATUS_CODE_SIGNATURE \ 89b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang ) 90b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang 91b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang// 92b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang// Private function declarations 93b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang// 94b38907a6d41515f48fe01a7c3d7c6b84b269926bqwangEFI_STATUS 95b38907a6d41515f48fe01a7c3d7c6b84b269926bqwangEFIAPI 96b38907a6d41515f48fe01a7c3d7c6b84b269926bqwangLoadImageCallback ( 97b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang IN EFI_PEI_SERVICES **PeiServices, 98b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDescriptor, 99b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang IN VOID *Ppi 100e00e1d46940a267d6fbe92be4ed2e547b4e946dcvanjeff ); 101b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang 102b38907a6d41515f48fe01a7c3d7c6b84b269926bqwang#endif 103