1949f388f5fa361e3be374f59edc09b92296abe03andrewfish/** @file
2949f388f5fa361e3be374f59edc09b92296abe03andrewfish  ResetCapabilities.
3949f388f5fa361e3be374f59edc09b92296abe03andrewfish  SMBIOS type 23.
4949f388f5fa361e3be374f59edc09b92296abe03andrewfish
52bfd90f959c94165c1e3b597992932e6dcb59669lzeng  Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
6949f388f5fa361e3be374f59edc09b92296abe03andrewfish  This program and the accompanying materials
7949f388f5fa361e3be374f59edc09b92296abe03andrewfish  are licensed and made available under the terms and conditions of the BSD License
8949f388f5fa361e3be374f59edc09b92296abe03andrewfish  which accompanies this distribution.  The full text of the license may be found at
9949f388f5fa361e3be374f59edc09b92296abe03andrewfish  http://opensource.org/licenses/bsd-license.php
10949f388f5fa361e3be374f59edc09b92296abe03andrewfish
11949f388f5fa361e3be374f59edc09b92296abe03andrewfish  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12949f388f5fa361e3be374f59edc09b92296abe03andrewfish  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
13949f388f5fa361e3be374f59edc09b92296abe03andrewfish
14949f388f5fa361e3be374f59edc09b92296abe03andrewfish**/
15949f388f5fa361e3be374f59edc09b92296abe03andrewfish
16949f388f5fa361e3be374f59edc09b92296abe03andrewfish#include "MiscSubClassDriver.h"
17949f388f5fa361e3be374f59edc09b92296abe03andrewfish/**
18949f388f5fa361e3be374f59edc09b92296abe03andrewfish  This function makes boot time changes to the contents of the
19949f388f5fa361e3be374f59edc09b92296abe03andrewfish  MiscOemString (Type 11).
20949f388f5fa361e3be374f59edc09b92296abe03andrewfish
21d18d8a1d0e370f8ce6ccc2725f4170586d457e53jljusten  @param  RecordData                 Pointer to copy of RecordData from the Data Table.
22949f388f5fa361e3be374f59edc09b92296abe03andrewfish
23949f388f5fa361e3be374f59edc09b92296abe03andrewfish  @retval EFI_SUCCESS                All parameters were valid.
24949f388f5fa361e3be374f59edc09b92296abe03andrewfish  @retval EFI_UNSUPPORTED            Unexpected RecordType value.
25949f388f5fa361e3be374f59edc09b92296abe03andrewfish  @retval EFI_INVALID_PARAMETER      Invalid parameter was found.
26949f388f5fa361e3be374f59edc09b92296abe03andrewfish
27949f388f5fa361e3be374f59edc09b92296abe03andrewfish**/
28949f388f5fa361e3be374f59edc09b92296abe03andrewfishMISC_SMBIOS_TABLE_FUNCTION(MiscResetCapabilities)
29949f388f5fa361e3be374f59edc09b92296abe03andrewfish{
30949f388f5fa361e3be374f59edc09b92296abe03andrewfish  EFI_STATUS               Status;
31949f388f5fa361e3be374f59edc09b92296abe03andrewfish  EFI_SMBIOS_HANDLE        SmbiosHandle;
32949f388f5fa361e3be374f59edc09b92296abe03andrewfish  SMBIOS_TABLE_TYPE23      *SmbiosRecord;
33949f388f5fa361e3be374f59edc09b92296abe03andrewfish  EFI_MISC_RESET_CAPABILITIES   *ForType23InputData;
34d18d8a1d0e370f8ce6ccc2725f4170586d457e53jljusten
35949f388f5fa361e3be374f59edc09b92296abe03andrewfish  ForType23InputData = (EFI_MISC_RESET_CAPABILITIES *)RecordData;
36949f388f5fa361e3be374f59edc09b92296abe03andrewfish
37949f388f5fa361e3be374f59edc09b92296abe03andrewfish  //
38949f388f5fa361e3be374f59edc09b92296abe03andrewfish  // First check for invalid parameters.
39949f388f5fa361e3be374f59edc09b92296abe03andrewfish  //
40949f388f5fa361e3be374f59edc09b92296abe03andrewfish  if (RecordData == NULL) {
41949f388f5fa361e3be374f59edc09b92296abe03andrewfish    return EFI_INVALID_PARAMETER;
42949f388f5fa361e3be374f59edc09b92296abe03andrewfish  }
43949f388f5fa361e3be374f59edc09b92296abe03andrewfish
44949f388f5fa361e3be374f59edc09b92296abe03andrewfish
45949f388f5fa361e3be374f59edc09b92296abe03andrewfish  //
46949f388f5fa361e3be374f59edc09b92296abe03andrewfish  // Two zeros following the last string.
47949f388f5fa361e3be374f59edc09b92296abe03andrewfish  //
48949f388f5fa361e3be374f59edc09b92296abe03andrewfish  SmbiosRecord = AllocatePool(sizeof (SMBIOS_TABLE_TYPE23) + 1 + 1);
49949f388f5fa361e3be374f59edc09b92296abe03andrewfish  ZeroMem(SmbiosRecord, sizeof (SMBIOS_TABLE_TYPE23) + 1 + 1);
50949f388f5fa361e3be374f59edc09b92296abe03andrewfish
51949f388f5fa361e3be374f59edc09b92296abe03andrewfish  SmbiosRecord->Hdr.Type = EFI_SMBIOS_TYPE_SYSTEM_RESET;
52949f388f5fa361e3be374f59edc09b92296abe03andrewfish  SmbiosRecord->Hdr.Length = sizeof (SMBIOS_TABLE_TYPE23);
53949f388f5fa361e3be374f59edc09b92296abe03andrewfish  //
54949f388f5fa361e3be374f59edc09b92296abe03andrewfish  // Make handle chosen by smbios protocol.add automatically.
55d18d8a1d0e370f8ce6ccc2725f4170586d457e53jljusten  //
56d18d8a1d0e370f8ce6ccc2725f4170586d457e53jljusten  SmbiosRecord->Hdr.Handle    = 0;
57949f388f5fa361e3be374f59edc09b92296abe03andrewfish  SmbiosRecord->Capabilities  = *(UINT8*)&(ForType23InputData->ResetCapabilities);
58949f388f5fa361e3be374f59edc09b92296abe03andrewfish  SmbiosRecord->ResetCount    = (UINT16)ForType23InputData->ResetCount;
59d18d8a1d0e370f8ce6ccc2725f4170586d457e53jljusten  SmbiosRecord->ResetLimit    = (UINT16)ForType23InputData->ResetLimit;
60949f388f5fa361e3be374f59edc09b92296abe03andrewfish  SmbiosRecord->TimerInterval = (UINT16)ForType23InputData->ResetTimerInterval;
61949f388f5fa361e3be374f59edc09b92296abe03andrewfish  SmbiosRecord->Timeout       = (UINT16)ForType23InputData->ResetTimeout;
62949f388f5fa361e3be374f59edc09b92296abe03andrewfish
63949f388f5fa361e3be374f59edc09b92296abe03andrewfish  //
64949f388f5fa361e3be374f59edc09b92296abe03andrewfish  // Now we have got the full smbios record, call smbios protocol to add this record.
65949f388f5fa361e3be374f59edc09b92296abe03andrewfish  //
662bfd90f959c94165c1e3b597992932e6dcb59669lzeng  Status = AddSmbiosRecord (Smbios, &SmbiosHandle, (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord);
672bfd90f959c94165c1e3b597992932e6dcb59669lzeng
68949f388f5fa361e3be374f59edc09b92296abe03andrewfish  FreePool(SmbiosRecord);
69949f388f5fa361e3be374f59edc09b92296abe03andrewfish  return Status;
70949f388f5fa361e3be374f59edc09b92296abe03andrewfish}
71949f388f5fa361e3be374f59edc09b92296abe03andrewfish
72