1fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang/** @file
250a64e5b0b92772b3aa02c23a64745b51094916bjji  Provides services to send progress/error codes to a POST card.
3fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang
49df063a06aef048c042498e2f542fb693e93493ahhtianCopyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>
59df063a06aef048c042498e2f542fb693e93493ahhtianThis program and the accompanying materials
650a64e5b0b92772b3aa02c23a64745b51094916bjjiare licensed and made available under the terms and conditions of the BSD License
750a64e5b0b92772b3aa02c23a64745b51094916bjjiwhich accompanies this distribution.  The full text of the license may be found at
850a64e5b0b92772b3aa02c23a64745b51094916bjjihttp://opensource.org/licenses/bsd-license.php
9fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang
1050a64e5b0b92772b3aa02c23a64745b51094916bjjiTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
1150a64e5b0b92772b3aa02c23a64745b51094916bjjiWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang
13fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang**/
14fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang
15fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang#ifndef __POST_CODE_LIB_H__
16fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang#define __POST_CODE_LIB_H__
17fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang
18fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang#define POST_CODE_PROPERTY_POST_CODE_ENABLED              0x00000008
19fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang#define POST_CODE_PROPERTY_POST_CODE_DESCRIPTION_ENABLED  0x00000010
20fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang
21fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang/**
221a2f870c9babe077c2d3abea23b6e8e044778341pkandel  Sends a 32-bit value to a POST card.
23fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang
24fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  Sends the 32-bit value specified by Value to a POST card, and returns Value.
25fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  Some implementations of this library function may perform I/O operations
26fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  directly to a POST card device.  Other implementations may send Value to
27fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  ReportStatusCode(), and the status code reporting mechanism will eventually
28fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  display the 32-bit value on the status reporting device.
29fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang
30fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  PostCode() must actively prevent recursion.  If PostCode() is called while
311a2f870c9babe077c2d3abea23b6e8e044778341pkandel  processing another Post Code Library function, then
32fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  PostCode() must return Value immediately.
33fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang
34fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  @param  Value  The 32-bit value to write to the POST card.
35fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang
36122e21915101b8f38d81edc6d4f1fd1dd353e28ajji  @return The 32-bit value to write to the POST card.
37fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang
38fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang**/
39fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshangUINT32
40fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshangEFIAPI
41fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshangPostCode (
42fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  IN UINT32  Value
43fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  );
44fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang
45fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang
46fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang/**
471a2f870c9babe077c2d3abea23b6e8e044778341pkandel  Sends a 32-bit value to a POST and associated ASCII string.
48fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang
49fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  Sends the 32-bit value specified by Value to a POST card, and returns Value.
50fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  If Description is not NULL, then the ASCII string specified by Description is
51fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  also passed to the handler that displays the POST card value.  Some
52fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  implementations of this library function may perform I/O operations directly
53fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  to a POST card device.  Other implementations may send Value to ReportStatusCode(),
54fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  and the status code reporting mechanism will eventually display the 32-bit
55fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  value on the status reporting device.
56fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang
57fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  PostCodeWithDescription()must actively prevent recursion.  If
58122e21915101b8f38d81edc6d4f1fd1dd353e28ajji  PostCodeWithDescription() is called while processing another any other Post
59122e21915101b8f38d81edc6d4f1fd1dd353e28ajji  Code Library function, then PostCodeWithDescription() must return Value
60122e21915101b8f38d81edc6d4f1fd1dd353e28ajji  immediately.
61fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang
62fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  @param  Value        The 32-bit value to write to the POST card.
63fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  @param  Description  Pointer to an ASCII string that is a description of the
64fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang                       POST code value.  This is an optional parameter that may
65fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang                       be NULL.
66fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang
67122e21915101b8f38d81edc6d4f1fd1dd353e28ajji  @return The 32-bit value to write to the POST card.
68fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang
69fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang**/
70fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshangUINT32
71fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshangEFIAPI
72fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshangPostCodeWithDescription (
73fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  IN UINT32       Value,
74fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  IN CONST CHAR8  *Description  OPTIONAL
75fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  );
76fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang
77fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang
78fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang/**
79fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  Returns TRUE if POST Codes are enabled.
80fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang
81fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  This function returns TRUE if the POST_CODE_PROPERTY_POST_CODE_ENABLED
82fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  bit of PcdPostCodePropertyMask is set.  Otherwise FALSE is returned.
83fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang
84fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  @retval  TRUE   The POST_CODE_PROPERTY_POST_CODE_ENABLED bit of
85fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang                  PcdPostCodeProperyMask is set.
86fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  @retval  FALSE  The POST_CODE_PROPERTY_POST_CODE_ENABLED bit of
87fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang                  PcdPostCodeProperyMask is clear.
88fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang
89fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang**/
90fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshangBOOLEAN
91fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshangEFIAPI
92fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshangPostCodeEnabled (
93fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  VOID
94fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  );
95fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang
96fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang
97fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang/**
98fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  Returns TRUE if POST code descriptions are enabled.
99fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang
100eceb3a4cb9b97d331ba91ea0a930465c05e8e20blgao  This function returns TRUE if the POST_CODE_PROPERTY_POST_CODE_DESCRIPTION_ENABLED
101eceb3a4cb9b97d331ba91ea0a930465c05e8e20blgao  bit of PcdPostCodePropertyMask is set.  Otherwise FALSE is returned.
102fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang
103eceb3a4cb9b97d331ba91ea0a930465c05e8e20blgao  @retval  TRUE   The POST_CODE_PROPERTY_POST_CODE_DESCRIPTION_ENABLED bit of
104eceb3a4cb9b97d331ba91ea0a930465c05e8e20blgao                  PcdPostCodeProperyMask is set.
105eceb3a4cb9b97d331ba91ea0a930465c05e8e20blgao  @retval  FALSE  The POST_CODE_PROPERTY_POST_CODE_DESCRIPTION_ENABLED bit of
106eceb3a4cb9b97d331ba91ea0a930465c05e8e20blgao                  PcdPostCodeProperyMask is clear.
107fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang
108fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang**/
109fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshangBOOLEAN
110fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshangEFIAPI
111fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshangPostCodeDescriptionEnabled (
112fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  VOID
113fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  );
114fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang
115fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang
116fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang/**
1171a2f870c9babe077c2d3abea23b6e8e044778341pkandel  Sends a 32-bit value to a POST card.
118fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang
119fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  If POST codes are enabled in PcdPostCodeProperyMask, then call PostCode()
120fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  passing in Value.  Value is returned.
121fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang
122fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  @param  Value  The 32-bit value to write to the POST card.
123fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang
124eceb3a4cb9b97d331ba91ea0a930465c05e8e20blgao  @return  Value The 32-bit value to write to the POST card.
125fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang
126fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang**/
127fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang#define POST_CODE(Value)  PostCodeEnabled() ? PostCode(Value) : Value
128fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang
129fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang/**
1301a2f870c9babe077c2d3abea23b6e8e044778341pkandel  Sends a 32-bit value to a POST and associated ASCII string.
131fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang
132fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  If POST codes and POST code descriptions are enabled in
133fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  PcdPostCodeProperyMask, then call PostCodeWithDescription() passing in
134fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  Value and Description.  If only POST codes are enabled, then call PostCode()
135fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  passing in Value.  Value is returned.
136fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang
137fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  @param  Value        The 32-bit value to write to the POST card.
138fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  @param  Description  Pointer to an ASCII string that is a description of the
139fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang                       POST code value.
140fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang
141eceb3a4cb9b97d331ba91ea0a930465c05e8e20blgao  @return Value        The 32-bit value to write to the POST card.
142fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang**/
143fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang#define POST_CODE_WITH_DESCRIPTION(Value,Description)  \
144fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang  PostCodeEnabled()                              ?     \
145fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang    (PostCodeDescriptionEnabled()                ?     \
146fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang      PostCodeWithDescription(Value,Description) :     \
147fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang      PostCode(Value))                           :     \
148fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang    Value
149fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang
150fb3df220f89e6eecaf1862b9241d8a1214eeda1cyshang#endif
151