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