mirror of https://github.com/acidanthera/audk.git
165 lines
4.5 KiB
C
165 lines
4.5 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 2006, Intel Corporation
|
||
|
All rights reserved. This program and the accompanying materials
|
||
|
are licensed and made available under the terms and conditions of the BSD License
|
||
|
which accompanies this distribution. The full text of the license may be found at
|
||
|
http://opensource.org/licenses/bsd-license.php
|
||
|
|
||
|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||
|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
MiscOnboardDeviceFunction.c
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Onboard device information boot time changes.
|
||
|
Misc. subclass type 8.
|
||
|
SMBIOS type 10.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#include "MiscSubclassDriver.h"
|
||
|
#include "winntio/winntio.h"
|
||
|
#include "winntthunk/winntthunk.h"
|
||
|
|
||
|
#pragma pack(1)
|
||
|
|
||
|
typedef struct _VENDOR_DEVICE {
|
||
|
EFI_DEVICE_PATH_PROTOCOL Platform;
|
||
|
EFI_GUID PlatformGuid;
|
||
|
EFI_DEVICE_PATH_PROTOCOL Device;
|
||
|
EFI_GUID DeviceGuid;
|
||
|
UINT8 DeviceData[4];
|
||
|
EFI_DEVICE_PATH_PROTOCOL End;
|
||
|
|
||
|
} VENDOR_DEVICE;
|
||
|
#pragma pack()
|
||
|
|
||
|
MISC_SUBCLASS_TABLE_FUNCTION (
|
||
|
MiscOnboardDeviceVideo
|
||
|
)
|
||
|
/*++
|
||
|
Description:
|
||
|
|
||
|
This function makes boot time changes to the contents of the
|
||
|
MiscOnboardDevice structure.
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
RecordType
|
||
|
Type of record to be processed from the Data Table.
|
||
|
mMiscSubclassDataTable[].RecordType
|
||
|
|
||
|
RecordLen
|
||
|
Size of static RecordData from the Data Table.
|
||
|
mMiscSubclassDataTable[].RecordLen
|
||
|
|
||
|
RecordData
|
||
|
Pointer to copy of RecordData from the Data Table. Changes made
|
||
|
to this copy will be written to the Data Hub but will not alter
|
||
|
the contents of the static Data Table.
|
||
|
|
||
|
LogRecordData
|
||
|
Set *LogRecordData to TRUE to log RecordData to Data Hub.
|
||
|
Set *LogRecordData to FALSE when there is no more data to log.
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
EFI_SUCCESS
|
||
|
All parameters were valid and *RecordData and *LogRecordData have
|
||
|
been set.
|
||
|
|
||
|
EFI_UNSUPPORTED
|
||
|
Unexpected RecordType value.
|
||
|
|
||
|
EFI_INVALID_PARAMETER
|
||
|
One of the following parameter conditions was true:
|
||
|
RecordLen was zero.
|
||
|
RecordData was NULL.
|
||
|
LogRecordData was NULL.
|
||
|
--*/
|
||
|
{
|
||
|
STATIC VENDOR_DEVICE mVideoDevicePath = {
|
||
|
{
|
||
|
HARDWARE_DEVICE_PATH,
|
||
|
HW_VENDOR_DP,
|
||
|
0x14
|
||
|
},
|
||
|
EFI_WIN_NT_THUNK_PROTOCOL_GUID,
|
||
|
{
|
||
|
HARDWARE_DEVICE_PATH,
|
||
|
HW_VENDOR_DP,
|
||
|
0x18
|
||
|
},
|
||
|
EFI_WIN_NT_UGA_GUID,
|
||
|
0,
|
||
|
0,
|
||
|
0,
|
||
|
0,
|
||
|
END
|
||
|
};
|
||
|
|
||
|
STATIC BOOLEAN Done = FALSE;
|
||
|
|
||
|
//
|
||
|
// First check for invalid parameters.
|
||
|
//
|
||
|
if (RecordLen == 0 || RecordData == NULL || LogRecordData == NULL) {
|
||
|
return EFI_INVALID_PARAMETER;
|
||
|
}
|
||
|
//
|
||
|
// Then check for unsupported RecordType.
|
||
|
//
|
||
|
if (RecordType != EFI_MISC_ONBOARD_DEVICE_DATA_RECORD_NUMBER) {
|
||
|
return EFI_UNSUPPORTED;
|
||
|
}
|
||
|
//
|
||
|
// Is this the first time through this function?
|
||
|
//
|
||
|
if (!Done) {
|
||
|
//
|
||
|
// Yes, this is the first time. Inspect/Change the contents of the
|
||
|
// RecordData structure.
|
||
|
//
|
||
|
//
|
||
|
// Any time changes?
|
||
|
//
|
||
|
// %%TBD
|
||
|
//
|
||
|
// Set Done flag to TRUE for next pass through this function.
|
||
|
// Set *LogRecordData to TRUE so data will get logged to Data Hub.
|
||
|
//
|
||
|
switch (((EFI_MISC_ONBOARD_DEVICE_DATA *) RecordData)->OnBoardDeviceDescription) {
|
||
|
case STR_MISC_ONBOARD_DEVICE_VIDEO_DESCRIPTION:
|
||
|
{
|
||
|
CopyMem (
|
||
|
&((EFI_MISC_ONBOARD_DEVICE_DATA *) RecordData)->OnBoardDevicePath,
|
||
|
&mVideoDevicePath,
|
||
|
GetDevicePathSize ((EFI_DEVICE_PATH_PROTOCOL *) &mVideoDevicePath)
|
||
|
);
|
||
|
*RecordLen = *RecordLen - sizeof (EFI_DEVICE_PATH_PROTOCOL) + GetDevicePathSize ((EFI_DEVICE_PATH_PROTOCOL *) &mVideoDevicePath);
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
Done = TRUE;
|
||
|
*LogRecordData = TRUE;
|
||
|
} else {
|
||
|
//
|
||
|
// No, this is the second time. Reset the state of the Done flag
|
||
|
// to FALSE and tell the data logger that there is no more data
|
||
|
// to be logged for this record type. If any memory allocations
|
||
|
// were made by earlier passes, they must be released now.
|
||
|
//
|
||
|
Done = FALSE;
|
||
|
*LogRecordData = FALSE;
|
||
|
}
|
||
|
|
||
|
return EFI_SUCCESS;
|
||
|
}
|
||
|
|
||
|
/* eof - MiscOnboardDeviceFunction.c */
|