Add in the 1st version of ECP.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2832 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004, 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:
|
||||
|
||||
AcpiS3Save.c
|
||||
|
||||
Abstract:
|
||||
|
||||
Tiano Tiano S3 Save Protocol
|
||||
|
||||
--*/
|
||||
|
||||
#include "Tiano.h"
|
||||
|
||||
#include EFI_PROTOCOL_DEFINITION (AcpiS3Save)
|
||||
|
||||
EFI_GUID gEfiAcpiS3SaveGuid = EFI_ACPI_S3_SAVE_GUID;
|
||||
|
||||
EFI_GUID_STRING(&gEfiAcpiS3SaveGuid, "EFI Acpi S3 Save Protocol", "Tiano Acpi S3 Save Protocol");
|
@@ -0,0 +1,68 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004, 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:
|
||||
|
||||
AcpiS3Save.h
|
||||
|
||||
Abstract:
|
||||
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _ACPI_S3_SAVE_PROTOCOL_H
|
||||
#define _ACPI_S3_SAVE_PROTOCOL_H
|
||||
|
||||
//
|
||||
// Includes
|
||||
//
|
||||
#include "Tiano.h"
|
||||
|
||||
//
|
||||
// Forward reference for pure ANSI compatability
|
||||
//
|
||||
EFI_FORWARD_DECLARATION (EFI_ACPI_S3_SAVE_PROTOCOL);
|
||||
|
||||
//
|
||||
// S3 Save Protocol GUID
|
||||
//
|
||||
#define EFI_ACPI_S3_SAVE_GUID \
|
||||
{ \
|
||||
0x125f2de1, 0xfb85, 0x440c, 0xa5, 0x4c, 0x4d, 0x99, 0x35, 0x8a, 0x8d, 0x38 \
|
||||
}
|
||||
|
||||
//
|
||||
// Protocol Data Structures
|
||||
//
|
||||
typedef
|
||||
EFI_STATUS
|
||||
EFI_BOOTSERVICE
|
||||
(EFIAPI *EFI_ACPI_S3_SAVE) (
|
||||
IN EFI_ACPI_S3_SAVE_PROTOCOL * This,
|
||||
IN VOID * LegacyMemoryAddress
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
EFI_BOOTSERVICE
|
||||
(EFIAPI *EFI_ACPI_GET_LEGACY_MEMORY_SIZE) (
|
||||
IN EFI_ACPI_S3_SAVE_PROTOCOL * This,
|
||||
OUT UINTN * Size
|
||||
);
|
||||
|
||||
typedef struct _EFI_ACPI_S3_SAVE_PROTOCOL {
|
||||
EFI_ACPI_GET_LEGACY_MEMORY_SIZE GetLegacyMemorySize;
|
||||
EFI_ACPI_S3_SAVE S3Save;
|
||||
} EFI_ACPI_S3_SAVE_PROTOCOL;
|
||||
|
||||
extern EFI_GUID gEfiAcpiS3SaveGuid;
|
||||
|
||||
#endif
|
@@ -0,0 +1,29 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 1999 - 2005, 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:
|
||||
|
||||
AcpiSupport.c
|
||||
|
||||
Abstract:
|
||||
|
||||
Tiano EFI 2.0 ACPI Support Protocol
|
||||
|
||||
--*/
|
||||
|
||||
#include "Tiano.h"
|
||||
|
||||
#include EFI_PROTOCOL_DEFINITION (AcpiSupport)
|
||||
|
||||
EFI_GUID gEfiAcpiSupportGuid = EFI_ACPI_SUPPORT_GUID;
|
||||
|
||||
EFI_GUID_STRING(&gEfiAcpiSupportGuid, "ACPI Support Protocol", "EFI 2.0 ACPI Support Protocol");
|
@@ -0,0 +1,128 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 1999 - 2005, 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:
|
||||
|
||||
AcpiSupport.h
|
||||
|
||||
Abstract:
|
||||
|
||||
Definition of the ACPI Support protocol. This is defined in the
|
||||
Tiano ACPI External Product Specification, revision 0.5.1.
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _ACPI_SUPPORT_PROTOCOL_H_
|
||||
#define _ACPI_SUPPORT_PROTOCOL_H_
|
||||
|
||||
//
|
||||
// Includes
|
||||
//
|
||||
#include "Tiano.h"
|
||||
|
||||
//
|
||||
// Forward reference for pure ANSI compatability
|
||||
//
|
||||
EFI_FORWARD_DECLARATION (EFI_ACPI_SUPPORT_PROTOCOL);
|
||||
|
||||
//
|
||||
// ACPI Support Protocol GUID
|
||||
//
|
||||
#define EFI_ACPI_SUPPORT_GUID \
|
||||
{ \
|
||||
0xdbff9d55, 0x89b7, 0x46da, 0xbd, 0xdf, 0x67, 0x7d, 0x3d, 0xc0, 0x24, 0x1d \
|
||||
}
|
||||
|
||||
//
|
||||
// Extern the GUID for protocol users.
|
||||
//
|
||||
extern EFI_GUID gEfiAcpiSupportGuid;
|
||||
|
||||
//
|
||||
// Protocol Data Definitions
|
||||
//
|
||||
//
|
||||
// ACPI Version bitmap definition:
|
||||
//
|
||||
// EFI_ACPI_TABLE_VERSION_1_0B - ACPI Version 1.0b
|
||||
// EFI_ACPI_TABLE_VERSION_2_0 - ACPI Version 2.0
|
||||
// EFI_ACPI_TABLE_VERSION_3_0 - ACPI Version 3.0
|
||||
// EFI_ACPI_TABLE_VERSION_NONE - No ACPI Versions. This might be used
|
||||
// to create memory-based operation regions or other information
|
||||
// that is not part of the ACPI "tree" but must still be found
|
||||
// in ACPI memory space and/or managed by the core ACPI driver.
|
||||
//
|
||||
// Note that EFI provides discrete GUIDs for each version of ACPI
|
||||
// that is supported. It is expected that each EFI GUIDed
|
||||
// version of ACPI will also have a corresponding bitmap
|
||||
// definition. This allows maintenance of separate ACPI trees
|
||||
// for each distinctly different version of ACPI.
|
||||
//
|
||||
#define EFI_ACPI_TABLE_VERSION UINT32
|
||||
|
||||
#define EFI_ACPI_TABLE_VERSION_NONE (1 << 0)
|
||||
#define EFI_ACPI_TABLE_VERSION_1_0B (1 << 1)
|
||||
#define EFI_ACPI_TABLE_VERSION_2_0 (1 << 2)
|
||||
#define EFI_ACPI_TABLE_VERSION_3_0 (1 << 3)
|
||||
|
||||
//
|
||||
// Protocol Member Functions
|
||||
//
|
||||
//
|
||||
// Retrieve a copy of an ACPI table and the handle of the table.
|
||||
//
|
||||
typedef
|
||||
EFI_STATUS
|
||||
EFI_BOOTSERVICE
|
||||
(EFIAPI *EFI_ACPI_GET_ACPI_TABLE) (
|
||||
IN EFI_ACPI_SUPPORT_PROTOCOL * This,
|
||||
IN INTN Index,
|
||||
OUT VOID **Table,
|
||||
OUT EFI_ACPI_TABLE_VERSION * Version,
|
||||
OUT UINTN *Handle
|
||||
);
|
||||
|
||||
//
|
||||
// Add, update, or remove a table.
|
||||
//
|
||||
typedef
|
||||
EFI_STATUS
|
||||
EFI_BOOTSERVICE
|
||||
(EFIAPI *EFI_ACPI_SET_ACPI_TABLE) (
|
||||
IN EFI_ACPI_SUPPORT_PROTOCOL * This,
|
||||
IN VOID *Table OPTIONAL,
|
||||
IN BOOLEAN Checksum,
|
||||
IN EFI_ACPI_TABLE_VERSION Version,
|
||||
IN OUT UINTN *Handle
|
||||
);
|
||||
|
||||
//
|
||||
// Publish tables to the outside world
|
||||
//
|
||||
typedef
|
||||
EFI_STATUS
|
||||
EFI_BOOTSERVICE
|
||||
(EFIAPI *EFI_ACPI_PUBLISH_TABLES) (
|
||||
IN EFI_ACPI_SUPPORT_PROTOCOL * This,
|
||||
IN EFI_ACPI_TABLE_VERSION Version
|
||||
);
|
||||
|
||||
//
|
||||
// ACPI Support Protocol
|
||||
//
|
||||
typedef struct _EFI_ACPI_SUPPORT_PROTOCOL {
|
||||
EFI_ACPI_GET_ACPI_TABLE GetAcpiTable;
|
||||
EFI_ACPI_SET_ACPI_TABLE SetAcpiTable;
|
||||
EFI_ACPI_PUBLISH_TABLES PublishTables;
|
||||
} EFI_ACPI_SUPPORT_PROTOCOL;
|
||||
|
||||
#endif
|
@@ -0,0 +1,28 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 1999 - 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:
|
||||
|
||||
BootScriptSave.c
|
||||
|
||||
Abstract:
|
||||
|
||||
S3 Save Protocol
|
||||
|
||||
--*/
|
||||
|
||||
#include "Tiano.h"
|
||||
|
||||
#include EFI_PROTOCOL_DEFINITION (BootScriptSave)
|
||||
|
||||
EFI_GUID gEfiBootScriptSaveGuid = EFI_BOOT_SCRIPT_SAVE_PROTOCOL_GUID;
|
||||
|
||||
EFI_GUID_STRING(&gEfiBootScriptSaveGuid, "EFI Boot Script Save Protocol", "EFI Boot Script Save Protocol");
|
@@ -0,0 +1,75 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 1999 - 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:
|
||||
|
||||
BootScriptSave.h
|
||||
|
||||
Abstract:
|
||||
|
||||
S3 Save Protocol
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _BOOT_SCRIPT_SAVE_PROTOCOL_H
|
||||
#define _BOOT_SCRIPT_SAVE_PROTOCOL_H
|
||||
|
||||
//
|
||||
// Includes
|
||||
//
|
||||
#include "Tiano.h"
|
||||
|
||||
//
|
||||
// Forward reference for pure ANSI compatability
|
||||
//
|
||||
EFI_FORWARD_DECLARATION (EFI_BOOT_SCRIPT_SAVE_PROTOCOL);
|
||||
|
||||
//
|
||||
// S3 Save Protocol GUID
|
||||
//
|
||||
#define EFI_BOOT_SCRIPT_SAVE_PROTOCOL_GUID \
|
||||
{ \
|
||||
0x470e1529, 0xb79e, 0x4e32, 0xa0, 0xfe, 0x6a, 0x15, 0x6d, 0x29, 0xf9, 0xb2 \
|
||||
}
|
||||
|
||||
//
|
||||
// Protocol Data Structures
|
||||
//
|
||||
typedef
|
||||
EFI_STATUS
|
||||
EFI_BOOTSERVICE
|
||||
(EFIAPI *EFI_BOOT_SCRIPT_WRITE) (
|
||||
IN EFI_BOOT_SCRIPT_SAVE_PROTOCOL * This,
|
||||
IN UINT16 TableName,
|
||||
IN UINT16 OpCode,
|
||||
...
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
EFI_BOOTSERVICE
|
||||
(EFIAPI *EFI_BOOT_SCRIPT_CLOSE_TABLE) (
|
||||
IN EFI_BOOT_SCRIPT_SAVE_PROTOCOL * This,
|
||||
IN UINT16 TableName,
|
||||
OUT EFI_PHYSICAL_ADDRESS * Address
|
||||
);
|
||||
|
||||
//
|
||||
// S3 Save Protocol data structure
|
||||
//
|
||||
typedef struct _EFI_BOOT_SCRIPT_SAVE_PROTOCOL {
|
||||
EFI_BOOT_SCRIPT_WRITE Write;
|
||||
EFI_BOOT_SCRIPT_CLOSE_TABLE CloseTable;
|
||||
} EFI_BOOT_SCRIPT_SAVE_PROTOCOL;
|
||||
|
||||
extern EFI_GUID gEfiBootScriptSaveGuid;
|
||||
|
||||
#endif
|
@@ -0,0 +1,28 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004, 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:
|
||||
|
||||
CpuIO.c
|
||||
|
||||
Abstract:
|
||||
|
||||
CPU IO Protocol GUID as defined in Tiano
|
||||
|
||||
|
||||
--*/
|
||||
|
||||
#include "Tiano.h"
|
||||
#include EFI_PROTOCOL_DEFINITION (CpuIo)
|
||||
|
||||
EFI_GUID gEfiCpuIoProtocolGuid = EFI_CPU_IO_PROTOCOL_GUID;
|
||||
|
||||
EFI_GUID_STRING(&gEfiCpuIoProtocolGuid, "CPU IO", "CPU IO Protocol");
|
@@ -0,0 +1,93 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004, 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:
|
||||
|
||||
CpuIO.h
|
||||
|
||||
Abstract:
|
||||
|
||||
CPU IO Protocol as defined in Tiano
|
||||
|
||||
This code abstracts the CPU IO Protocol
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _CPUIO_H_
|
||||
#define _CPUIO_H_
|
||||
|
||||
#define EFI_CPU_IO_PROTOCOL_GUID \
|
||||
{ \
|
||||
0xB0732526, 0x38C8, 0x4b40, 0x88, 0x77, 0x61, 0xC7, 0xB0, 0x6A, 0xAC, 0x45 \
|
||||
}
|
||||
|
||||
EFI_FORWARD_DECLARATION (EFI_CPU_IO_PROTOCOL);
|
||||
|
||||
//
|
||||
// *******************************************************
|
||||
// EFI_CPU_IO_PROTOCOL_WIDTH
|
||||
// *******************************************************
|
||||
//
|
||||
typedef enum {
|
||||
EfiCpuIoWidthUint8,
|
||||
EfiCpuIoWidthUint16,
|
||||
EfiCpuIoWidthUint32,
|
||||
EfiCpuIoWidthUint64,
|
||||
EfiCpuIoWidthFifoUint8,
|
||||
EfiCpuIoWidthFifoUint16,
|
||||
EfiCpuIoWidthFifoUint32,
|
||||
EfiCpuIoWidthFifoUint64,
|
||||
EfiCpuIoWidthFillUint8,
|
||||
EfiCpuIoWidthFillUint16,
|
||||
EfiCpuIoWidthFillUint32,
|
||||
EfiCpuIoWidthFillUint64,
|
||||
EfiCpuIoWidthMaximum
|
||||
} EFI_CPU_IO_PROTOCOL_WIDTH;
|
||||
|
||||
//
|
||||
// *******************************************************
|
||||
// EFI_CPU_IO_PROTOCOL_IO_MEM
|
||||
// *******************************************************
|
||||
//
|
||||
typedef
|
||||
EFI_STATUS
|
||||
EFI_RUNTIMESERVICE
|
||||
(EFIAPI *EFI_CPU_IO_PROTOCOL_IO_MEM) (
|
||||
IN EFI_CPU_IO_PROTOCOL * This,
|
||||
IN EFI_CPU_IO_PROTOCOL_WIDTH Width,
|
||||
IN UINT64 Address,
|
||||
IN UINTN Count,
|
||||
IN OUT VOID *Buffer
|
||||
);
|
||||
|
||||
//
|
||||
// *******************************************************
|
||||
// EFI_CPU_IO_PROTOCOL_ACCESS
|
||||
// *******************************************************
|
||||
//
|
||||
typedef struct {
|
||||
EFI_CPU_IO_PROTOCOL_IO_MEM Read;
|
||||
EFI_CPU_IO_PROTOCOL_IO_MEM Write;
|
||||
} EFI_CPU_IO_PROTOCOL_ACCESS;
|
||||
|
||||
//
|
||||
// *******************************************************
|
||||
// EFI_CPU_IO_PROTOCOL
|
||||
// *******************************************************
|
||||
//
|
||||
typedef struct _EFI_CPU_IO_PROTOCOL {
|
||||
EFI_CPU_IO_PROTOCOL_ACCESS Mem;
|
||||
EFI_CPU_IO_PROTOCOL_ACCESS Io;
|
||||
} EFI_CPU_IO_PROTOCOL;
|
||||
|
||||
extern EFI_GUID gEfiCpuIoProtocolGuid;
|
||||
|
||||
#endif
|
@@ -0,0 +1,32 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004, 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:
|
||||
|
||||
DataHub.c
|
||||
|
||||
Abstract:
|
||||
|
||||
The logging hub protocol is used both by agents wishing to log
|
||||
errors and those wishing to be made aware of all information that
|
||||
has been logged.
|
||||
|
||||
For more information please look at Intel Platform Innovation
|
||||
Framework for EFI Data Hub Specification.
|
||||
|
||||
--*/
|
||||
|
||||
#include "Tiano.h"
|
||||
#include EFI_PROTOCOL_DEFINITION (DataHub)
|
||||
|
||||
EFI_GUID gEfiDataHubProtocolGuid = EFI_DATA_HUB_PROTOCOL_GUID;
|
||||
|
||||
EFI_GUID_STRING(&gEfiDataHubProtocolGuid, "DataHub Protocol", "EFI Data Hub Protocol");
|
@@ -0,0 +1,125 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004, 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:
|
||||
|
||||
DataHub.h
|
||||
|
||||
Abstract:
|
||||
|
||||
The data hub protocol is used both by agents wishing to log
|
||||
data and those wishing to be made aware of all information that
|
||||
has been logged.
|
||||
|
||||
For more information please look at Intel Platform Innovation
|
||||
Framework for EFI Data Hub Specification.
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef __DATA_HUB_H__
|
||||
#define __DATA_HUB_H__
|
||||
|
||||
#define EFI_DATA_HUB_PROTOCOL_GUID \
|
||||
{ \
|
||||
0xae80d021, 0x618e, 0x11d4, 0xbc, 0xd7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 \
|
||||
}
|
||||
|
||||
//
|
||||
// EFI generic Data Hub Header
|
||||
//
|
||||
// A Data Record is an EFI_DATA_RECORD_HEADER followed by RecordSize bytes of
|
||||
// data. The format of the data is defined by the DataRecordGuid.
|
||||
//
|
||||
// If EFI_DATA_RECORD_HEADER is extended in the future the Version number must
|
||||
// change and the HeaderSize will change if the definition of
|
||||
// EFI_DATA_RECORD_HEADER is extended.
|
||||
//
|
||||
// The logger is responcible for initializing:
|
||||
// Version, HeaderSize, RecordSize, DataRecordGuid, DataRecordClass
|
||||
//
|
||||
// The Data Hub driver is responcible for initializing:
|
||||
// LogTime and LogMonotonicCount.
|
||||
//
|
||||
#define EFI_DATA_RECORD_HEADER_VERSION 0x0100
|
||||
typedef struct {
|
||||
UINT16 Version;
|
||||
UINT16 HeaderSize;
|
||||
UINT32 RecordSize;
|
||||
EFI_GUID DataRecordGuid;
|
||||
EFI_GUID ProducerName;
|
||||
UINT64 DataRecordClass;
|
||||
EFI_TIME LogTime;
|
||||
UINT64 LogMonotonicCount;
|
||||
} EFI_DATA_RECORD_HEADER;
|
||||
|
||||
//
|
||||
// Definition of DataRecordClass. These are used to filter out class types
|
||||
// at a very high level. The DataRecordGuid still defines the format of
|
||||
// the data. See DateHub.doc for rules on what can and can not be a
|
||||
// new DataRecordClass
|
||||
//
|
||||
#define EFI_DATA_RECORD_CLASS_DEBUG 0x0000000000000001
|
||||
#define EFI_DATA_RECORD_CLASS_ERROR 0x0000000000000002
|
||||
#define EFI_DATA_RECORD_CLASS_DATA 0x0000000000000004
|
||||
#define EFI_DATA_RECORD_CLASS_PROGRESS_CODE 0x0000000000000008
|
||||
|
||||
//
|
||||
// Forward reference for pure ANSI compatability
|
||||
//
|
||||
EFI_FORWARD_DECLARATION (EFI_DATA_HUB_PROTOCOL);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_DATA_HUB_LOG_DATA) (
|
||||
IN EFI_DATA_HUB_PROTOCOL * This,
|
||||
IN EFI_GUID * DataRecordGuid,
|
||||
IN EFI_GUID * ProducerName,
|
||||
IN UINT64 DataRecordClass,
|
||||
IN VOID *RawData,
|
||||
IN UINT32 RawDataSize
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_DATA_HUB_GET_NEXT_RECORD) (
|
||||
IN EFI_DATA_HUB_PROTOCOL * This,
|
||||
IN OUT UINT64 *MonotonicCount,
|
||||
IN EFI_EVENT * FilterDriver OPTIONAL,
|
||||
OUT EFI_DATA_RECORD_HEADER **Record
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_DATA_HUB_REGISTER_FILTER_DRIVER) (
|
||||
IN EFI_DATA_HUB_PROTOCOL * This,
|
||||
IN EFI_EVENT FilterEvent,
|
||||
IN EFI_TPL FilterTpl,
|
||||
IN UINT64 FilterClass,
|
||||
IN EFI_GUID * FilterDataRecordGuid OPTIONAL
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_DATA_HUB_UNREGISTER_FILTER_DRIVER) (
|
||||
IN EFI_DATA_HUB_PROTOCOL * This,
|
||||
IN EFI_EVENT FilterEvent
|
||||
);
|
||||
|
||||
typedef struct _EFI_DATA_HUB_PROTOCOL {
|
||||
EFI_DATA_HUB_LOG_DATA LogData;
|
||||
EFI_DATA_HUB_GET_NEXT_RECORD GetNextRecord;
|
||||
EFI_DATA_HUB_REGISTER_FILTER_DRIVER RegisterFilterDriver;
|
||||
EFI_DATA_HUB_UNREGISTER_FILTER_DRIVER UnregisterFilterDriver;
|
||||
} EFI_DATA_HUB_PROTOCOL;
|
||||
|
||||
extern EFI_GUID gEfiDataHubProtocolGuid;
|
||||
|
||||
#endif
|
@@ -0,0 +1,116 @@
|
||||
#/*++
|
||||
#
|
||||
# Copyright (c) 2004, 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:
|
||||
#
|
||||
# EdkFrameworkProtocolLib.inf
|
||||
#
|
||||
# Abstract:
|
||||
#
|
||||
# Component description file.
|
||||
#
|
||||
#--*/
|
||||
|
||||
[defines]
|
||||
BASE_NAME= EdkFrameworkProtocolLib
|
||||
COMPONENT_TYPE= LIBRARY
|
||||
|
||||
[includes.common]
|
||||
$(EDK_SOURCE)\Foundation\Framework
|
||||
$(EDK_SOURCE)\Foundation\Efi
|
||||
$(EDK_SOURCE)\Foundation\Include
|
||||
$(EDK_SOURCE)\Foundation\Efi\Include
|
||||
$(EDK_SOURCE)\Foundation\Framework\Include
|
||||
$(EDK_SOURCE)\Foundation\Include\IndustryStandard
|
||||
$(EDK_SOURCE)\Foundation\Include\Pei
|
||||
$(EDK_SOURCE)\Foundation\Library\Pei\Include
|
||||
$(EDK_SOURCE)\Foundation\Core\Dxe
|
||||
$(EDK_SOURCE)\Foundation\Library\Dxe\Include
|
||||
|
||||
[nmake.common]
|
||||
|
||||
[sources.common]
|
||||
AcpiS3Save\AcpiS3Save.h
|
||||
AcpiS3Save\AcpiS3Save.c
|
||||
AcpiSupport\AcpiSupport.h
|
||||
AcpiSupport\AcpiSupport.c
|
||||
BootScriptSave\BootScriptSave.h
|
||||
BootScriptSave\BootScriptSave.c
|
||||
CpuIo\CpuIo.h
|
||||
CpuIo\CpuIo.c
|
||||
DataHub\DataHub.h
|
||||
DataHub\DataHub.c
|
||||
FirmwareVolume\FirmwareVolume.h
|
||||
FirmwareVolume\FirmwareVolume.c
|
||||
FirmwareVolume2\FirmwareVolume2.h
|
||||
FirmwareVolume2\FirmwareVolume2.c
|
||||
FirmwareVolumeBlock\FirmwareVolumeBlock.h
|
||||
FirmwareVolumeBlock\FirmwareVolumeBlock.c
|
||||
FormBrowser\FormBrowser.h
|
||||
FormBrowser\FormBrowser.c
|
||||
FormCallback\FormCallback.h
|
||||
FormCallback\FormCallback.c
|
||||
Hii\Hii.h
|
||||
Hii\Hii.c
|
||||
IdeControllerInit\IdeControllerInit.h
|
||||
IdeControllerInit\IdeControllerInit.c
|
||||
IncompatiblePciDeviceSupport\IncompatiblePciDeviceSupport.h
|
||||
IncompatiblePciDeviceSupport\IncompatiblePciDeviceSupport.c
|
||||
Legacy8259\Legacy8259.h
|
||||
Legacy8259\Legacy8259.c
|
||||
LegacyBios\LegacyBios.h
|
||||
LegacyBios\LegacyBios.c
|
||||
LegacyBiosPlatform\LegacyBiosPlatform.h
|
||||
LegacyBiosPlatform\LegacyBiosPlatform.c
|
||||
LegacyInterrupt\LegacyInterrupt.h
|
||||
LegacyInterrupt\LegacyInterrupt.c
|
||||
LegacyRegion\LegacyRegion.h
|
||||
LegacyRegion\LegacyRegion.c
|
||||
PciHostBridgeResourceAllocation\PciHostBridgeResourceAllocation.h
|
||||
PciHostBridgeResourceAllocation\PciHostBridgeResourceAllocation.c
|
||||
PciHotPlugInit\PciHotPlugInit.h
|
||||
PciHotPlugInit\PciHotPlugInit.c
|
||||
PciPlatform\PciPlatform.h
|
||||
PciPlatform\PciPlatform.c
|
||||
SectionExtraction\SectionExtraction.h
|
||||
SectionExtraction\SectionExtraction.c
|
||||
SecurityPolicy\SecurityPolicy.h
|
||||
SecurityPolicy\SecurityPolicy.c
|
||||
Smbus\Smbus.h
|
||||
Smbus\Smbus.c
|
||||
|
||||
[sources.ia32,sources.x64]
|
||||
SmmAccess\SmmAccess.h
|
||||
SmmAccess\SmmAccess.c
|
||||
SmmBase\SmmBase.h
|
||||
SmmBase\SmmBase.c
|
||||
SmmControl\SmmControl.h
|
||||
SmmControl\SmmControl.c
|
||||
SmmCpuState\SmmCpuState.h
|
||||
SmmCpuState\SmmCpuState.c
|
||||
SmmGpiDispatch\SmmGpiDispatch.h
|
||||
SmmGpiDispatch\SmmGpiDispatch.c
|
||||
SmmIchnDispatch\SmmIchnDispatch.h
|
||||
SmmIchnDispatch\SmmIchnDispatch.c
|
||||
SmmPeriodicTimerDispatch\SmmPeriodicTimerDispatch.h
|
||||
SmmPeriodicTimerDispatch\SmmPeriodicTimerDispatch.c
|
||||
SmmPowerButtonDispatch\SmmPowerButtonDispatch.h
|
||||
SmmPowerButtonDispatch\SmmPowerButtonDispatch.c
|
||||
SmmStandbyButtonDispatch\SmmStandbyButtonDispatch.h
|
||||
SmmStandbyButtonDispatch\SmmStandbyButtonDispatch.c
|
||||
SmmStatusCode\SmmStatusCode.h
|
||||
SmmStatusCode\SmmStatusCode.c
|
||||
SmmSwDispatch\SmmSwDispatch.h
|
||||
SmmSwDispatch\SmmSwDispatch.c
|
||||
SmmSxDispatch\SmmSxDispatch.h
|
||||
SmmSxDispatch\SmmSxDispatch.c
|
||||
SmmUsbDispatch\SmmUsbDispatch.h
|
||||
SmmUsbDispatch\SmmUsbDispatch.c
|
@@ -0,0 +1,31 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004, 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:
|
||||
|
||||
FirmwareVolume.c
|
||||
|
||||
Abstract:
|
||||
|
||||
Firmware Volume protocol as defined in the Tiano Firmware Volume
|
||||
specification.
|
||||
|
||||
File level access layered on top of Firmware File System protocol. This
|
||||
protocol exists to provide a hook for a filter driver for a firmware volume.
|
||||
|
||||
--*/
|
||||
|
||||
#include "Tiano.h"
|
||||
#include EFI_PROTOCOL_DEFINITION (FirmwareVolume)
|
||||
|
||||
EFI_GUID gEfiFirmwareVolumeProtocolGuid = EFI_FIRMWARE_VOLUME_PROTOCOL_GUID;
|
||||
|
||||
EFI_GUID_STRING(&gEfiFirmwareVolumeProtocolGuid, "FirmwareVolume Protocol", "Firmware Volume protocol");
|
@@ -0,0 +1,301 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004, 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:
|
||||
|
||||
FirmwareVolume.h
|
||||
|
||||
Abstract:
|
||||
|
||||
Firmware Volume protocol as defined in the Tiano Firmware Volume
|
||||
specification.
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _FW_VOL_H_
|
||||
#define _FW_VOL_H_
|
||||
|
||||
//
|
||||
// Statements that include other files
|
||||
//
|
||||
#include "EfiFirmwareVolumeHeader.h"
|
||||
#include "EfiFirmwareFileSystem.h"
|
||||
#include "EfiFirmwareVolume.h"
|
||||
//
|
||||
// Firmware Volume Protocol GUID definition
|
||||
//
|
||||
#define EFI_FIRMWARE_VOLUME_PROTOCOL_GUID \
|
||||
{ \
|
||||
0x389F751F, 0x1838, 0x4388, 0x83, 0x90, 0xCD, 0x81, 0x54, 0xBD, 0x27, 0xF8 \
|
||||
}
|
||||
|
||||
|
||||
EFI_FORWARD_DECLARATION (EFI_FIRMWARE_VOLUME_PROTOCOL);
|
||||
|
||||
//
|
||||
// ************************************************************
|
||||
// EFI_FV_ATTRIBUTES bit definitions
|
||||
// ************************************************************
|
||||
//
|
||||
#define EFI_FV_READ_DISABLE_CAP 0x0000000000000001
|
||||
#define EFI_FV_READ_ENABLE_CAP 0x0000000000000002
|
||||
#define EFI_FV_READ_STATUS 0x0000000000000004
|
||||
|
||||
#define EFI_FV_WRITE_DISABLE_CAP 0x0000000000000008
|
||||
#define EFI_FV_WRITE_ENABLE_CAP 0x0000000000000010
|
||||
#define EFI_FV_WRITE_STATUS 0x0000000000000020
|
||||
|
||||
#define EFI_FV_LOCK_CAP 0x0000000000000040
|
||||
#define EFI_FV_LOCK_STATUS 0x0000000000000080
|
||||
#define EFI_FV_WRITE_POLICY_RELIABLE 0x0000000000000100
|
||||
|
||||
#define EFI_FV_ALIGNMENT_CAP 0x0000000000008000
|
||||
#define EFI_FV_ALIGNMENT_2 0x0000000000010000
|
||||
#define EFI_FV_ALIGNMENT_4 0x0000000000020000
|
||||
#define EFI_FV_ALIGNMENT_8 0x0000000000040000
|
||||
#define EFI_FV_ALIGNMENT_16 0x0000000000080000
|
||||
#define EFI_FV_ALIGNMENT_32 0x0000000000100000
|
||||
#define EFI_FV_ALIGNMENT_64 0x0000000000200000
|
||||
#define EFI_FV_ALIGNMENT_128 0x0000000000400000
|
||||
#define EFI_FV_ALIGNMENT_256 0x0000000000800000
|
||||
#define EFI_FV_ALIGNMENT_512 0x0000000001000000
|
||||
#define EFI_FV_ALIGNMENT_1K 0x0000000002000000
|
||||
#define EFI_FV_ALIGNMENT_2K 0x0000000004000000
|
||||
#define EFI_FV_ALIGNMENT_4K 0x0000000008000000
|
||||
#define EFI_FV_ALIGNMENT_8K 0x0000000010000000
|
||||
#define EFI_FV_ALIGNMENT_16K 0x0000000020000000
|
||||
#define EFI_FV_ALIGNMENT_32K 0x0000000040000000
|
||||
#define EFI_FV_ALIGNMENT_64K 0x0000000080000000
|
||||
|
||||
//
|
||||
// Protocol API definitions
|
||||
//
|
||||
//
|
||||
// Forward declaration of protocol data structure
|
||||
//
|
||||
typedef struct _EFI_FIRMWARE_VOLUME_PROTOCOL EFI_FIRMWARE_VOLUME_PROTOCOL;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *FV_GET_ATTRIBUTES) (
|
||||
IN EFI_FIRMWARE_VOLUME_PROTOCOL * This,
|
||||
OUT EFI_FV_ATTRIBUTES * Attributes
|
||||
);
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Retrieves attributes, insures positive polarity of attribute bits, returns
|
||||
resulting attributes in output parameter
|
||||
|
||||
Arguments:
|
||||
This - Calling context
|
||||
Attributes - output buffer which contains attributes
|
||||
|
||||
Returns:
|
||||
EFI_INVALID_PARAMETER
|
||||
EFI_SUCCESS
|
||||
|
||||
--*/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *FV_SET_ATTRIBUTES) (
|
||||
IN EFI_FIRMWARE_VOLUME_PROTOCOL * This,
|
||||
IN OUT EFI_FV_ATTRIBUTES * Attributes
|
||||
);
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Sets volume attributes
|
||||
|
||||
Arguments:
|
||||
This Calling context
|
||||
Attributes Buffer which contains attributes
|
||||
|
||||
Returns:
|
||||
EFI_INVALID_PARAMETER
|
||||
EFI_DEVICE_ERROR
|
||||
EFI_SUCCESS
|
||||
|
||||
--*/
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *FV_READ_FILE) (
|
||||
IN EFI_FIRMWARE_VOLUME_PROTOCOL * This,
|
||||
IN EFI_GUID * NameGuid,
|
||||
IN OUT VOID **Buffer,
|
||||
IN OUT UINTN *BufferSize,
|
||||
OUT EFI_FV_FILETYPE * FoundType,
|
||||
OUT EFI_FV_FILE_ATTRIBUTES * FileAttributes,
|
||||
OUT UINT32 *AuthenticationStatus
|
||||
);
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Read the requested file (NameGuid) and returns data in Buffer.
|
||||
|
||||
Arguments:
|
||||
This - Calling context
|
||||
NameGuid - Filename identifying which file to read
|
||||
Buffer - Pointer to pointer to buffer in which contents of file are returned.
|
||||
|
||||
If Buffer is NULL, only type, attributes, and size are returned as
|
||||
there is no output buffer.
|
||||
|
||||
If Buffer != NULL and *Buffer == NULL, the output buffer is allocated
|
||||
from BS pool by ReadFile
|
||||
|
||||
If Buffer != NULL and *Buffer != NULL, the output buffer has been
|
||||
allocated by the caller and is being passed in.
|
||||
|
||||
BufferSize - Indicates the buffer size passed in, and on output the size
|
||||
required to complete the read
|
||||
FoundType - Indicates the type of the file who's data is returned
|
||||
FileAttributes - Indicates the attributes of the file who's data is resturned
|
||||
AuthenticationStatus - Indicates the authentication status of the data
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS
|
||||
EFI_WARN_BUFFER_TOO_SMALL
|
||||
EFI_NOT_FOUND
|
||||
EFI_DEVICE_ERROR
|
||||
EFI_ACCESS_DENIED
|
||||
|
||||
--*/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *FV_READ_SECTION) (
|
||||
IN EFI_FIRMWARE_VOLUME_PROTOCOL * This,
|
||||
IN EFI_GUID * NameGuid,
|
||||
IN EFI_SECTION_TYPE SectionType,
|
||||
IN UINTN SectionInstance,
|
||||
IN OUT VOID **Buffer,
|
||||
IN OUT UINTN *BufferSize,
|
||||
OUT UINT32 *AuthenticationStatus
|
||||
);
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Read the requested section from the specified file and returns data in Buffer.
|
||||
|
||||
Arguments:
|
||||
This - Calling context
|
||||
NameGuid - Filename identifying the file from which to read
|
||||
SectionType - Indicates what section type to retrieve
|
||||
SectionInstance - Indicates which instance of SectionType to retrieve
|
||||
Buffer - Pointer to pointer to buffer in which contents of file are returned.
|
||||
|
||||
If Buffer is NULL, only type, attributes, and size are returned as
|
||||
there is no output buffer.
|
||||
|
||||
If Buffer != NULL and *Buffer == NULL, the output buffer is allocated
|
||||
from BS pool by ReadFile
|
||||
|
||||
If Buffer != NULL and *Buffer != NULL, the output buffer has been
|
||||
allocated by the caller and is being passed in.
|
||||
|
||||
BufferSize - Indicates the buffer size passed in, and on output the size
|
||||
required to complete the read
|
||||
AuthenticationStatus - Indicates the authentication status of the data
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS
|
||||
EFI_WARN_BUFFER_TOO_SMALL
|
||||
EFI_OUT_OF_RESOURCES
|
||||
EFI_NOT_FOUND
|
||||
EFI_DEVICE_ERROR
|
||||
EFI_ACCESS_DENIED
|
||||
|
||||
--*/
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *FV_WRITE_FILE) (
|
||||
IN EFI_FIRMWARE_VOLUME_PROTOCOL * This,
|
||||
IN UINT32 NumberOfFiles,
|
||||
IN EFI_FV_WRITE_POLICY WritePolicy,
|
||||
IN EFI_FV_WRITE_FILE_DATA * FileData
|
||||
);
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Write the supplied file (NameGuid) to the FV.
|
||||
|
||||
Arguments:
|
||||
This - Calling context
|
||||
NumberOfFiles - Indicates the number of file records pointed to by FileData
|
||||
WritePolicy - Indicates the level of reliability of the write with respect to
|
||||
things like power failure events.
|
||||
FileData - A pointer to an array of EFI_FV_WRITE_FILE_DATA structures. Each
|
||||
element in the array indicates a file to write, and there are
|
||||
NumberOfFiles elements in the input array.
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS
|
||||
EFI_OUT_OF_RESOURCES
|
||||
EFI_DEVICE_ERROR
|
||||
EFI_WRITE_PROTECTED
|
||||
EFI_NOT_FOUND
|
||||
EFI_INVALID_PARAMETER
|
||||
|
||||
--*/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *FV_GET_NEXT_FILE) (
|
||||
IN EFI_FIRMWARE_VOLUME_PROTOCOL * This,
|
||||
IN OUT VOID *Key,
|
||||
IN OUT EFI_FV_FILETYPE * FileType,
|
||||
OUT EFI_GUID * NameGuid,
|
||||
OUT EFI_FV_FILE_ATTRIBUTES * Attributes,
|
||||
OUT UINTN *Size
|
||||
);
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Given the input key, search for the next matching file in the volume.
|
||||
|
||||
Arguments:
|
||||
This - Calling context
|
||||
Key - Pointer to a caller allocated buffer that contains an implementation
|
||||
specific key that is used to track where to begin searching on
|
||||
successive calls.
|
||||
FileType - Indicates the file type to filter for
|
||||
NameGuid - Guid filename of the file found
|
||||
Attributes - Attributes of the file found
|
||||
Size - Size in bytes of the file found
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS
|
||||
EFI_NOT_FOUND
|
||||
EFI_DEVICE_ERROR
|
||||
EFI_ACCESS_DENIED
|
||||
|
||||
--*/
|
||||
typedef struct _EFI_FIRMWARE_VOLUME_PROTOCOL {
|
||||
FV_GET_ATTRIBUTES GetVolumeAttributes;
|
||||
FV_SET_ATTRIBUTES SetVolumeAttributes;
|
||||
FV_READ_FILE ReadFile;
|
||||
FV_READ_SECTION ReadSection;
|
||||
FV_WRITE_FILE WriteFile;
|
||||
FV_GET_NEXT_FILE GetNextFile;
|
||||
UINT32 KeySize;
|
||||
EFI_HANDLE ParentHandle;
|
||||
} EFI_FIRMWARE_VOLUME_PROTOCOL;
|
||||
|
||||
extern EFI_GUID gEfiFirmwareVolumeProtocolGuid;
|
||||
|
||||
#endif
|
@@ -0,0 +1,29 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2007, 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:
|
||||
|
||||
FirmwareVolume2.c
|
||||
|
||||
Abstract:
|
||||
|
||||
PI 1.0 spec definition.
|
||||
|
||||
--*/
|
||||
|
||||
|
||||
#include "Tiano.h"
|
||||
|
||||
#include EFI_PROTOCOL_DEFINITION (FirmwareVolume2)
|
||||
|
||||
EFI_GUID gEfiFirmwareVolume2ProtocolGuid = EFI_FIRMWARE_VOLUME2_PROTOCOL_GUID;
|
||||
|
||||
EFI_GUID_STRING(&gEfiFirmwareVolume2ProtocolGuid, "FirmwareVolume2Protocol", "Efi FirmwareVolume2Protocol");
|
@@ -0,0 +1,195 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2007, 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:
|
||||
|
||||
FirmwareVolume2.h
|
||||
|
||||
Abstract:
|
||||
|
||||
PI 1.0 spec definition.
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef __FIRMWARE_VOLUME2_H__
|
||||
#define __FIRMWARE_VOLUME2_H__
|
||||
#include "EfiImageFormat.h"
|
||||
#include "EfiFirmwareVolume.h"
|
||||
|
||||
//
|
||||
// Firmware Volume Protocol GUID definition
|
||||
//
|
||||
#define EFI_FIRMWARE_VOLUME2_PROTOCOL_GUID \
|
||||
{ 0x220e73b6, 0x6bdb, 0x4413, 0x84, 0x5, 0xb9, 0x74, 0xb1, 0x8, 0x61, 0x9a }
|
||||
|
||||
|
||||
EFI_FORWARD_DECLARATION (EFI_FIRMWARE_VOLUME2_PROTOCOL);
|
||||
|
||||
|
||||
//
|
||||
// ************************************************************
|
||||
// EFI_FV2_ATTRIBUTES bit definitions
|
||||
// ************************************************************
|
||||
//
|
||||
#define EFI_FV2_READ_DISABLE_CAP 0x0000000000000001
|
||||
#define EFI_FV2_READ_ENABLE_CAP 0x0000000000000002
|
||||
#define EFI_FV2_READ_STATUS 0x0000000000000004
|
||||
|
||||
#define EFI_FV2_WRITE_DISABLE_CAP 0x0000000000000008
|
||||
#define EFI_FV2_WRITE_ENABLE_CAP 0x0000000000000010
|
||||
#define EFI_FV2_WRITE_STATUS 0x0000000000000020
|
||||
|
||||
#define EFI_FV2_LOCK_CAP 0x0000000000000040
|
||||
#define EFI_FV2_LOCK_STATUS 0x0000000000000080
|
||||
#define EFI_FV2_WRITE_POLICY_RELIABLE 0x0000000000000100
|
||||
|
||||
#define EFI_FV2_READ_LOCK_CAP 0x0000000000001000
|
||||
#define EFI_FV2_READ_LOCK_STATUS 0x0000000000002000
|
||||
#define EFI_FV2_WRITE_LOCK_CAP 0x0000000000004000
|
||||
#define EFI_FV2_WRITE_LOCK_STATUS 0x0000000000008000
|
||||
#define EFI_FV2_ALIGNMENT 0x00000000001F0000
|
||||
|
||||
|
||||
#define EFI_FV2_ALIGNMENT_1 0x0000000000000000
|
||||
#define EFI_FV2_ALIGNMENT_2 0x0000000000010000
|
||||
#define EFI_FV2_ALIGNMENT_4 0x0000000000020000
|
||||
#define EFI_FV2_ALIGNMENT_8 0x0000000000030000
|
||||
#define EFI_FV2_ALIGNMENT_16 0x0000000000040000
|
||||
#define EFI_FV2_ALIGNMENT_32 0x0000000000050000
|
||||
#define EFI_FV2_ALIGNMENT_64 0x0000000000060000
|
||||
#define EFI_FV2_ALIGNMENT_128 0x0000000000070000
|
||||
#define EFI_FV2_ALIGNMENT_256 0x0000000000080000
|
||||
#define EFI_FV2_ALIGNMENT_512 0x0000000000090000
|
||||
#define EFI_FV2_ALIGNMENT_1K 0x00000000000A0000
|
||||
#define EFI_FV2_ALIGNMENT_2K 0x00000000000B0000
|
||||
#define EFI_FV2_ALIGNMENT_4K 0x00000000000C0000
|
||||
#define EFI_FV2_ALIGNMENT_8K 0x00000000000D0000
|
||||
#define EFI_FV2_ALIGNMENT_16K 0x00000000000E0000
|
||||
#define EFI_FV2_ALIGNMENT_32K 0x00000000000F0000
|
||||
#define EFI_FV2_ALIGNMENT_64K 0x0000000000100000
|
||||
#define EFI_FV2_ALIGNMENT_128K 0x0000000000110000
|
||||
#define EFI_FV2_ALIGNMENT_256K 0x0000000000120000
|
||||
#define EFI_FV2_ALIGNMENT_512K 0x0000000000130000
|
||||
#define EFI_FV2_ALIGNMENT_1M 0x0000000000140000
|
||||
#define EFI_FV2_ALIGNMENT_2M 0x0000000000150000
|
||||
#define EFI_FV2_ALIGNMENT_4M 0x0000000000160000
|
||||
#define EFI_FV2_ALIGNMENT_8M 0x0000000000170000
|
||||
#define EFI_FV2_ALIGNMENT_16M 0x0000000000180000
|
||||
#define EFI_FV2_ALIGNMENT_32M 0x0000000000190000
|
||||
#define EFI_FV2_ALIGNMENT_64M 0x00000000001A0000
|
||||
#define EFI_FV2_ALIGNMENT_128M 0x00000000001B0000
|
||||
#define EFI_FV2_ALIGNMENT_256M 0x00000000001C0000
|
||||
#define EFI_FV2_ALIGNMENT_512M 0x00000000001D0000
|
||||
#define EFI_FV2_ALIGNMENT_1G 0x00000000001E0000
|
||||
#define EFI_FV2_ALIGNMENT_2G 0x00000000001F0000
|
||||
|
||||
#define EFI_FV_FILE_ATTRIB_FIXED 0x00000100
|
||||
#define EFI_FV_FILE_ATTRIB_MEMORY_MAPPED 0x00000200
|
||||
|
||||
|
||||
//
|
||||
// Protocol API definitions
|
||||
//
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_FV_GET_ATTRIBUTES) (
|
||||
IN CONST EFI_FIRMWARE_VOLUME2_PROTOCOL *This,
|
||||
OUT EFI_FV_ATTRIBUTES *Attributes
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_FV_SET_ATTRIBUTES) (
|
||||
IN CONST EFI_FIRMWARE_VOLUME2_PROTOCOL *This,
|
||||
IN OUT EFI_FV_ATTRIBUTES *Attributes
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_FV_READ_FILE) (
|
||||
IN CONST EFI_FIRMWARE_VOLUME2_PROTOCOL *This,
|
||||
IN CONST EFI_GUID *NameGuid,
|
||||
IN OUT VOID **Buffer,
|
||||
IN OUT UINTN *BufferSize,
|
||||
OUT EFI_FV_FILETYPE *FoundType,
|
||||
OUT EFI_FV_FILE_ATTRIBUTES *FileAttributes,
|
||||
OUT UINT32 *AuthenticationStatus
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_FV_READ_SECTION) (
|
||||
IN CONST EFI_FIRMWARE_VOLUME2_PROTOCOL *This,
|
||||
IN CONST EFI_GUID *NameGuid,
|
||||
IN EFI_SECTION_TYPE SectionType,
|
||||
IN UINTN SectionInstance,
|
||||
IN OUT VOID **Buffer,
|
||||
IN OUT UINTN *BufferSize,
|
||||
OUT UINT32 *AuthenticationStatus
|
||||
);
|
||||
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_FV_WRITE_FILE) (
|
||||
IN CONST EFI_FIRMWARE_VOLUME2_PROTOCOL *This,
|
||||
IN UINT32 NumberOfFiles,
|
||||
IN EFI_FV_WRITE_POLICY WritePolicy,
|
||||
IN EFI_FV_WRITE_FILE_DATA *FileData
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_FV_GET_NEXT_FILE) (
|
||||
IN CONST EFI_FIRMWARE_VOLUME2_PROTOCOL *This,
|
||||
IN OUT VOID *Key,
|
||||
IN OUT EFI_FV_FILETYPE *FileType,
|
||||
OUT EFI_GUID *NameGuid,
|
||||
OUT EFI_FV_FILE_ATTRIBUTES *Attributes,
|
||||
OUT UINTN *Size
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_FV_GET_INFO) (
|
||||
IN CONST EFI_FIRMWARE_VOLUME2_PROTOCOL *This,
|
||||
IN CONST EFI_GUID *InformationType,
|
||||
IN OUT UINTN *BufferSize,
|
||||
OUT VOID *Buffer
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_FV_SET_INFO) (
|
||||
IN CONST EFI_FIRMWARE_VOLUME2_PROTOCOL *This,
|
||||
IN CONST EFI_GUID *InformationType,
|
||||
IN UINTN BufferSize,
|
||||
IN CONST VOID *Buffer
|
||||
);
|
||||
|
||||
|
||||
typedef struct _EFI_FIRMWARE_VOLUME2_PROTOCOL {
|
||||
EFI_FV_GET_ATTRIBUTES GetVolumeAttributes;
|
||||
EFI_FV_SET_ATTRIBUTES SetVolumeAttributes;
|
||||
EFI_FV_READ_FILE ReadFile;
|
||||
EFI_FV_READ_SECTION ReadSection;
|
||||
EFI_FV_WRITE_FILE WriteFile;
|
||||
EFI_FV_GET_NEXT_FILE GetNextFile;
|
||||
UINT32 KeySize;
|
||||
EFI_HANDLE ParentHandle;
|
||||
EFI_FV_GET_INFO GetInfo;
|
||||
EFI_FV_SET_INFO SetInfo;
|
||||
} EFI_FIRMWARE_VOLUME2_PROTOCOL;
|
||||
|
||||
extern EFI_GUID gEfiFirmwareVolume2ProtocolGuid;
|
||||
|
||||
#endif
|
@@ -0,0 +1,31 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004, 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:
|
||||
|
||||
FirmwareVolumeBlock.c
|
||||
|
||||
Abstract:
|
||||
|
||||
Firmware Volume Block protocol as defined in the Tiano Firmware Volume
|
||||
specification.
|
||||
|
||||
Low level firmware device access routines to abstract firmware device
|
||||
hardware.
|
||||
|
||||
--*/
|
||||
|
||||
#include "Tiano.h"
|
||||
#include EFI_PROTOCOL_DEFINITION (FirmwareVolumeBlock)
|
||||
|
||||
EFI_GUID gEfiFirmwareVolumeBlockProtocolGuid = EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL_GUID;
|
||||
|
||||
EFI_GUID_STRING(&gEfiFirmwareVolumeBlockProtocolGuid, "FirmwareVolumeBlock Protocol", "Firmware Volume Block protocol");
|
@@ -0,0 +1,251 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004, 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:
|
||||
|
||||
FirmwareVolumeBlock.h
|
||||
|
||||
Abstract:
|
||||
|
||||
Firmware Volume Block protocol as defined in the Tiano Firmware Volume
|
||||
specification.
|
||||
|
||||
Low level firmware device access routines to abstract firmware device
|
||||
hardware.
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _FW_VOL_BLOCK_H_
|
||||
#define _FW_VOL_BLOCK_H_
|
||||
|
||||
#include "EfiFirmwareVolumeHeader.h"
|
||||
|
||||
#define EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL_GUID \
|
||||
{ \
|
||||
0xDE28BC59, 0x6228, 0x41BD, 0xBD, 0xF6, 0xA3, 0xB9, 0xAD, 0xB5, 0x8D, 0xA1 \
|
||||
}
|
||||
|
||||
EFI_FORWARD_DECLARATION (EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_FVB_GET_ATTRIBUTES) (
|
||||
IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL * This,
|
||||
OUT EFI_FVB_ATTRIBUTES * Attributes
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Retrieves Volume attributes. No polarity translations are done.
|
||||
|
||||
Arguments:
|
||||
This - Calling context
|
||||
Attributes - output buffer which contains attributes
|
||||
|
||||
Returns:
|
||||
EFI_INVALID_PARAMETER
|
||||
EFI_SUCCESS
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_FVB_SET_ATTRIBUTES) (
|
||||
IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL * This,
|
||||
IN OUT EFI_FVB_ATTRIBUTES * Attributes
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Sets Volume attributes. No polarity translations are done.
|
||||
|
||||
Arguments:
|
||||
This - Calling context
|
||||
Attributes - On input: contains new attributes
|
||||
On output: contains current attributes of FV
|
||||
|
||||
Returns:
|
||||
EFI_INVALID_PARAMETER
|
||||
EFI_SUCCESS
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_FVB_GET_PHYSICAL_ADDRESS) (
|
||||
IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL * This,
|
||||
OUT EFI_PHYSICAL_ADDRESS * Address
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Retrieves the physical address of a memory mapped FV.
|
||||
|
||||
Arguments:
|
||||
This - Calling context
|
||||
Attributes - Address is a pointer to a caller allocated EFI_PHYSICAL_ADDRESS
|
||||
that on successful return from GetPhysicalAddress() contains the
|
||||
base address of the firmware volume.
|
||||
|
||||
Returns:
|
||||
EFI_UNSUPPORTED
|
||||
EFI_SUCCESS
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_FVB_GET_BLOCK_SIZE) (
|
||||
IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL * This,
|
||||
IN EFI_LBA Lba,
|
||||
OUT UINTN *BlockSize,
|
||||
OUT UINTN *NumberOfBlocks
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Retrieves the size in bytes of a specific block within an FV.
|
||||
|
||||
Arguments:
|
||||
This - Calling context.
|
||||
Lba - Indicates which block to return the size for.
|
||||
BlockSize - BlockSize is a pointer to a caller allocated
|
||||
UINTN in which the size of the block is returned.
|
||||
NumberOfBlocks - NumberOfBlocks is a pointer to a caller allocated
|
||||
UINTN in which the number of consecutive blocks
|
||||
starting with Lba is returned. All blocks in this
|
||||
range have a size of BlockSize.
|
||||
|
||||
Returns:
|
||||
EFI_INVALID_PARAMETER
|
||||
EFI_SUCCESS
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_FVB_READ) (
|
||||
IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL * This,
|
||||
IN EFI_LBA Lba,
|
||||
IN UINTN Offset,
|
||||
IN OUT UINTN *NumBytes,
|
||||
OUT UINT8 *Buffer
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Reads data beginning at Lba:Offset from FV and places the data in Buffer.
|
||||
The read terminates either when *NumBytes of data have been read, or when
|
||||
a block boundary is reached. *NumBytes is updated to reflect the actual
|
||||
number of bytes read.
|
||||
|
||||
Arguments:
|
||||
This - Calling context
|
||||
Lba - Block in which to begin read
|
||||
Offset - Offset in the block at which to begin read
|
||||
NumBytes - At input, indicates the requested read size. At output, indicates
|
||||
the actual number of bytes read.
|
||||
Buffer - Data buffer in which to place data read.
|
||||
|
||||
Returns:
|
||||
EFI_INVALID_PARAMETER
|
||||
EFI_NOT_FOUND
|
||||
EFI_DEVICE_ERROR
|
||||
EFI_SUCCESS
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_FVB_WRITE) (
|
||||
IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL * This,
|
||||
IN EFI_LBA Lba,
|
||||
IN UINTN Offset,
|
||||
IN OUT UINTN *NumBytes,
|
||||
IN UINT8 *Buffer
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
Writes data beginning at Lba:Offset from FV. The write terminates either
|
||||
when *NumBytes of data have been written, or when a block boundary is
|
||||
reached. *NumBytes is updated to reflect the actual number of bytes
|
||||
written.
|
||||
|
||||
Arguments:
|
||||
This - Calling context
|
||||
Lba - Block in which to begin write
|
||||
Offset - Offset in the block at which to begin write
|
||||
NumBytes - At input, indicates the requested write size. At output, indicates
|
||||
the actual number of bytes written.
|
||||
Buffer - Buffer containing source data for the write.
|
||||
|
||||
Returns:
|
||||
EFI_INVALID_PARAMETER
|
||||
EFI_NOT_FOUND
|
||||
EFI_DEVICE_ERROR
|
||||
EFI_SUCCESS
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
#define EFI_LBA_LIST_TERMINATOR 0xFFFFFFFFFFFFFFFF
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_FVB_ERASE_BLOCKS) (
|
||||
IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL * This,
|
||||
...
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
The EraseBlock() function erases one or more blocks as denoted by the
|
||||
variable argument list. The entire parameter list of blocks must be verified
|
||||
prior to erasing any blocks. If a block is requested that does not exist
|
||||
within the associated firmware volume (it has a larger index than the last
|
||||
block of the firmware volume), the EraseBlock() function must return
|
||||
EFI_INVALID_PARAMETER without modifying the contents of the firmware volume.
|
||||
|
||||
Arguments:
|
||||
This - Calling context
|
||||
... - Starting LBA followed by Number of Lba to erase. a -1 to terminate
|
||||
the list.
|
||||
|
||||
Returns:
|
||||
EFI_INVALID_PARAMETER
|
||||
EFI_DEVICE_ERROR
|
||||
EFI_SUCCESS
|
||||
EFI_ACCESS_DENIED
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
typedef struct _EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL {
|
||||
EFI_FVB_GET_ATTRIBUTES GetVolumeAttributes;
|
||||
EFI_FVB_SET_ATTRIBUTES SetVolumeAttributes;
|
||||
EFI_FVB_GET_PHYSICAL_ADDRESS GetPhysicalAddress;
|
||||
EFI_FVB_GET_BLOCK_SIZE GetBlockSize;
|
||||
EFI_FVB_READ Read;
|
||||
EFI_FVB_WRITE Write;
|
||||
EFI_FVB_ERASE_BLOCKS EraseBlocks;
|
||||
EFI_HANDLE ParentHandle;
|
||||
} EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL;
|
||||
|
||||
extern EFI_GUID gEfiFirmwareVolumeBlockProtocolGuid;
|
||||
|
||||
#endif
|
@@ -0,0 +1,31 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004, 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:
|
||||
|
||||
FormBrowser.c
|
||||
|
||||
Abstract:
|
||||
|
||||
The EFI_FORM_BROWSER_PROTOCOL is the interface to the EFI
|
||||
Configuration Driver. This will allow the caller to direct the
|
||||
configuration driver to use either the HII database or use the passed
|
||||
in packet of data. This will also allow the caller to post messages
|
||||
into the configuration drivers internal mailbox.
|
||||
|
||||
--*/
|
||||
|
||||
#include "Tiano.h"
|
||||
#include EFI_PROTOCOL_DEFINITION (FormBrowser)
|
||||
|
||||
EFI_GUID gEfiFormBrowserProtocolGuid = EFI_FORM_BROWSER_PROTOCOL_GUID;
|
||||
|
||||
EFI_GUID_STRING(&gEfiFormBrowserProtocolGuid, "Form Browser Protocol", "Form Browser 1.0 protocol");
|
@@ -0,0 +1,97 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004, 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:
|
||||
|
||||
FormBrowser.h
|
||||
|
||||
Abstract:
|
||||
|
||||
The EFI_FORM_BROWSER_PROTOCOL is the interface to the EFI
|
||||
Configuration Driver. This will allow the caller to direct the
|
||||
configuration driver to use either the HII database or use the passed
|
||||
in packet of data. This will also allow the caller to post messages
|
||||
into the configuration drivers internal mailbox.
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _FORM_BROWSER_H_
|
||||
#define _FORM_BROWSER_H_
|
||||
|
||||
#include EFI_PROTOCOL_DEFINITION (Hii)
|
||||
|
||||
#define EFI_FORM_BROWSER_PROTOCOL_GUID \
|
||||
{ \
|
||||
0xe5a1333e, 0xe1b4, 0x4d55, 0xce, 0xeb, 0x35, 0xc3, 0xef, 0x13, 0x34, 0x43 \
|
||||
}
|
||||
|
||||
//
|
||||
// Forward reference for pure ANSI compatability
|
||||
//
|
||||
EFI_FORWARD_DECLARATION (EFI_FORM_BROWSER_PROTOCOL);
|
||||
|
||||
typedef struct _EFI_FORM_BROWSER_PROTOCOL EFI_FORM_BROWSER_PROTOCOL;
|
||||
|
||||
typedef struct {
|
||||
UINT32 Length;
|
||||
UINT16 Type;
|
||||
UINT8 Data[1];
|
||||
} EFI_HII_PACKET;
|
||||
|
||||
typedef struct {
|
||||
EFI_HII_IFR_PACK *IfrData;
|
||||
EFI_HII_STRING_PACK *StringData;
|
||||
} EFI_IFR_PACKET;
|
||||
|
||||
typedef struct {
|
||||
UINTN LeftColumn;
|
||||
UINTN RightColumn;
|
||||
UINTN TopRow;
|
||||
UINTN BottomRow;
|
||||
} SCREEN_DESCRIPTOR;
|
||||
|
||||
//
|
||||
// The following types are currently defined:
|
||||
//
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SEND_FORM) (
|
||||
IN EFI_FORM_BROWSER_PROTOCOL * This,
|
||||
IN BOOLEAN UseDatabase,
|
||||
IN EFI_HII_HANDLE * Handle,
|
||||
IN UINTN HandleCount,
|
||||
IN EFI_IFR_PACKET * Packet,
|
||||
IN EFI_HANDLE CallbackHandle,
|
||||
IN UINT8 *NvMapOverride,
|
||||
IN SCREEN_DESCRIPTOR * ScreenDimensions,
|
||||
OUT BOOLEAN *ResetRequired OPTIONAL
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_CREATE_POP_UP) (
|
||||
IN UINTN NumberOfLines,
|
||||
IN BOOLEAN HotKey,
|
||||
IN UINTN MaximumStringSize,
|
||||
OUT CHAR16 *StringBuffer,
|
||||
OUT EFI_INPUT_KEY * KeyValue,
|
||||
IN CHAR16 *String,
|
||||
...
|
||||
);
|
||||
|
||||
typedef struct _EFI_FORM_BROWSER_PROTOCOL {
|
||||
EFI_SEND_FORM SendForm;
|
||||
EFI_CREATE_POP_UP CreatePopUp;
|
||||
} EFI_FORM_BROWSER_PROTOCOL;
|
||||
|
||||
extern EFI_GUID gEfiFormBrowserProtocolGuid;
|
||||
|
||||
#endif
|
@@ -0,0 +1,31 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004, 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:
|
||||
|
||||
FormCallback.c
|
||||
|
||||
Abstract:
|
||||
|
||||
The EFI_FORM_CALLBACK_PROTOCOL is the defined interface for access to custom
|
||||
NV storage devices as well as communication of user selections in a more
|
||||
interactive environment. This protocol should be published by hardware
|
||||
specific drivers which want to export access to custom hardware storage or
|
||||
publish IFR which has a requirement to call back the original driver.
|
||||
|
||||
--*/
|
||||
|
||||
#include "Tiano.h"
|
||||
#include EFI_PROTOCOL_DEFINITION (FormCallback)
|
||||
|
||||
EFI_GUID gEfiFormCallbackProtocolGuid = EFI_FORM_CALLBACK_PROTOCOL_GUID;
|
||||
|
||||
EFI_GUID_STRING(&gEfiFormCallbackProtocolGuid, "Form Callback Protocol", "Form Callback 1.0 protocol");
|
@@ -0,0 +1,120 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004, 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:
|
||||
|
||||
FormCallback.h
|
||||
|
||||
Abstract:
|
||||
|
||||
The EFI_FORM_CALLBACK_PROTOCOL is the defined interface for access to custom
|
||||
NV storage devices as well as communication of user selections in a more
|
||||
interactive environment. This protocol should be published by hardware
|
||||
specific drivers which want to export access to custom hardware storage or
|
||||
publish IFR which has a requirement to call back the original driver.
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _FORM_CALLBACK_H_
|
||||
#define _FORM_CALLBACK_H_
|
||||
|
||||
#include EFI_PROTOCOL_DEFINITION (FormBrowser)
|
||||
|
||||
#define EFI_FORM_CALLBACK_PROTOCOL_GUID \
|
||||
{ \
|
||||
0xf3e4543d, 0xcf35, 0x6cef, 0x35, 0xc4, 0x4f, 0xe6, 0x34, 0x4d, 0xfc, 0x54 \
|
||||
}
|
||||
|
||||
//
|
||||
// Forward reference for pure ANSI compatability
|
||||
//
|
||||
EFI_FORWARD_DECLARATION (EFI_FORM_CALLBACK_PROTOCOL);
|
||||
|
||||
typedef struct _EFI_FORM_CALLBACK_PROTOCOL EFI_FORM_CALLBACK_PROTOCOL;
|
||||
|
||||
#define RESET_REQUIRED 1 // Flags setting to signify that the callback operation resulted in an eventual
|
||||
// reset to be done upon exit of the browser
|
||||
//
|
||||
#define EXIT_REQUIRED 2 // Flags setting to signify that after the processing of the callback results - exit the browser
|
||||
#define SAVE_REQUIRED 4 // Flags setting to signify that after the processing of the callback results - save the NV data
|
||||
#define NV_CHANGED 8 // Flags setting to signify that after the processing of the callback results - turn the NV flag on
|
||||
#define NV_NOT_CHANGED 16 // Flags setting to signify that after the processing of the callback results - turn the NV flag off
|
||||
#pragma pack(1)
|
||||
typedef struct {
|
||||
UINT8 OpCode; // Likely a string, numeric, or one-of
|
||||
UINT8 Length; // Length of the EFI_IFR_DATA_ENTRY packet
|
||||
UINT16 Flags; // Flags settings to determine what behavior is desired from the browser after the callback
|
||||
VOID *Data; // The data in the form based on the op-code type - this is not a pointer to the data, the data follows immediately
|
||||
// If the OpCode is a OneOf or Numeric type - Data is a UINT16 value
|
||||
// If the OpCode is a String type - Data is a CHAR16[x] type
|
||||
// If the OpCode is a Checkbox type - Data is a UINT8 value
|
||||
// If the OpCode is a NV Access type - Data is a EFI_IFR_NV_DATA structure
|
||||
//
|
||||
} EFI_IFR_DATA_ENTRY;
|
||||
|
||||
typedef struct {
|
||||
VOID *NvRamMap; // If the flag of the op-code specified retrieval of a copy of the NVRAM map,
|
||||
// this is a pointer to a buffer copy
|
||||
//
|
||||
UINT32 EntryCount; // How many EFI_IFR_DATA_ENTRY entries
|
||||
EFI_IFR_DATA_ENTRY Data[1]; // The in-line Data entries.
|
||||
} EFI_IFR_DATA_ARRAY;
|
||||
|
||||
typedef union {
|
||||
EFI_IFR_DATA_ARRAY DataArray; // Primarily used by those who call back to their drivers and use HII as a repository
|
||||
EFI_IFR_PACKET DataPacket; // Primarily used by those which do not use HII as a repository
|
||||
CHAR16 String[1]; // If returning an error - fill the string with null-terminated contents
|
||||
} EFI_HII_CALLBACK_PACKET;
|
||||
#pragma pack()
|
||||
//
|
||||
// The following types are currently defined:
|
||||
//
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_NV_READ) (
|
||||
IN EFI_FORM_CALLBACK_PROTOCOL * This,
|
||||
IN CHAR16 *VariableName,
|
||||
IN EFI_GUID * VendorGuid,
|
||||
OUT UINT32 *Attributes OPTIONAL,
|
||||
IN OUT UINTN *DataSize,
|
||||
OUT VOID *Buffer
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_NV_WRITE) (
|
||||
IN EFI_FORM_CALLBACK_PROTOCOL * This,
|
||||
IN CHAR16 *VariableName,
|
||||
IN EFI_GUID * VendorGuid,
|
||||
IN UINT32 Attributes,
|
||||
IN UINTN DataSize,
|
||||
IN VOID *Buffer,
|
||||
OUT BOOLEAN *ResetRequired
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_FORM_CALLBACK) (
|
||||
IN EFI_FORM_CALLBACK_PROTOCOL * This,
|
||||
IN UINT16 KeyValue,
|
||||
IN EFI_IFR_DATA_ARRAY * Data,
|
||||
OUT EFI_HII_CALLBACK_PACKET **Packet
|
||||
);
|
||||
|
||||
typedef struct _EFI_FORM_CALLBACK_PROTOCOL {
|
||||
EFI_NV_READ NvRead;
|
||||
EFI_NV_WRITE NvWrite;
|
||||
EFI_FORM_CALLBACK Callback;
|
||||
} EFI_FORM_CALLBACK_PROTOCOL;
|
||||
|
||||
extern EFI_GUID gEfiFormCallbackProtocolGuid;
|
||||
|
||||
#endif
|
30
EdkCompatibilityPkg/Foundation/Framework/Protocol/Hii/Hii.c
Normal file
30
EdkCompatibilityPkg/Foundation/Framework/Protocol/Hii/Hii.c
Normal file
@@ -0,0 +1,30 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004, 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:
|
||||
|
||||
Hii.c
|
||||
|
||||
Abstract:
|
||||
|
||||
This file defines the Human Interface Infrastructure protocol which will
|
||||
be used by resources which want to publish IFR/Font/String data and have it
|
||||
collected by the Configuration engine.
|
||||
|
||||
|
||||
--*/
|
||||
|
||||
#include "Tiano.h"
|
||||
#include EFI_PROTOCOL_DEFINITION (Hii)
|
||||
|
||||
EFI_GUID gEfiHiiProtocolGuid = EFI_HII_PROTOCOL_GUID;
|
||||
|
||||
EFI_GUID_STRING(&gEfiHiiProtocolGuid, "Human Interface Infrastructure Protocol", "HII 1.0 protocol");
|
613
EdkCompatibilityPkg/Foundation/Framework/Protocol/Hii/Hii.h
Normal file
613
EdkCompatibilityPkg/Foundation/Framework/Protocol/Hii/Hii.h
Normal file
@@ -0,0 +1,613 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004 - 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:
|
||||
|
||||
Hii.h
|
||||
|
||||
Abstract:
|
||||
|
||||
This file defines the Human Interface Infrastructure protocol which will
|
||||
be used by resources which want to publish IFR/Font/String data and have it
|
||||
collected by the Configuration engine.
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _HII_H_
|
||||
#define _HII_H_
|
||||
|
||||
#include "EfiInternalFormRepresentation.h"
|
||||
#include EFI_PROTOCOL_DEFINITION (UgaDraw)
|
||||
#include EFI_PROTOCOL_DEFINITION (GraphicsOutput)
|
||||
|
||||
#define EFI_HII_PROTOCOL_GUID \
|
||||
{ \
|
||||
0xd7ad636e, 0xb997, 0x459b, 0xbf, 0x3f, 0x88, 0x46, 0x89, 0x79, 0x80, 0xe1 \
|
||||
}
|
||||
|
||||
//
|
||||
// Forward reference for pure ANSI compatability
|
||||
//
|
||||
EFI_FORWARD_DECLARATION (EFI_HII_PROTOCOL);
|
||||
|
||||
typedef struct _EFI_HII_PROTOCOL EFI_HII_PROTOCOL;
|
||||
|
||||
//
|
||||
// Global definition
|
||||
//
|
||||
#define NARROW_CHAR 0xFFF0
|
||||
#define WIDE_CHAR 0xFFF1
|
||||
#define NON_BREAKING_CHAR 0xFFF2
|
||||
#define GLYPH_WIDTH 8
|
||||
#define GLYPH_HEIGHT 19
|
||||
|
||||
#define EFI_HII_FONT 1
|
||||
#define EFI_HII_STRING 2
|
||||
#define EFI_HII_IFR 3
|
||||
#define EFI_HII_KEYBOARD 4
|
||||
#define EFI_HII_HANDLES 5
|
||||
#define EFI_HII_VARIABLE 6
|
||||
#define EFI_HII_DEVICE_PATH 7
|
||||
|
||||
#define HANG(foo) { \
|
||||
volatile INT32 __iii; \
|
||||
__iii = foo; \
|
||||
while (__iii) \
|
||||
; \
|
||||
}
|
||||
//
|
||||
// #define HANG(foo)
|
||||
//
|
||||
// References to string tokens must use this macro to enable scanning for
|
||||
// token usages.
|
||||
//
|
||||
#define STRING_TOKEN(t) t
|
||||
|
||||
//
|
||||
// The following types are currently defined:
|
||||
//
|
||||
typedef UINT16 EFI_FORM_ID;
|
||||
typedef UINT16 EFI_FORM_LABEL;
|
||||
typedef UINT16 EFI_HII_HANDLE;
|
||||
|
||||
#pragma pack(1)
|
||||
|
||||
typedef struct {
|
||||
UINT32 Length;
|
||||
UINT16 Type;
|
||||
} EFI_HII_PACK_HEADER;
|
||||
|
||||
//
|
||||
// A form list consists of a large variety of structure
|
||||
// possibilities so to represent the binary blob of data
|
||||
// associated with a package of forms, we will assume a
|
||||
// pointer to a self-describing data buffer.
|
||||
//
|
||||
typedef struct {
|
||||
EFI_HII_PACK_HEADER Header;
|
||||
} EFI_HII_IFR_PACK;
|
||||
|
||||
typedef struct {
|
||||
EFI_HII_PACK_HEADER Header; // Must be filled in
|
||||
EFI_HANDLE ImageHandle; // Must be filled in
|
||||
EFI_HANDLE DeviceHandle; // Optional
|
||||
EFI_HANDLE ControllerHandle; // Optional
|
||||
EFI_HANDLE CallbackHandle; // Optional
|
||||
EFI_HANDLE COBExportHandle; // Optional
|
||||
} EFI_HII_HANDLE_PACK;
|
||||
|
||||
//
|
||||
// ********************************************************
|
||||
// EFI_VARIABLE_CONTENTS
|
||||
// ********************************************************
|
||||
//
|
||||
typedef struct {
|
||||
EFI_HII_PACK_HEADER Header;
|
||||
EFI_GUID VariableGuid;
|
||||
UINT32 VariableNameLength;
|
||||
UINT16 VariableId;
|
||||
//
|
||||
// CHAR16 VariableName[]; //Null-terminated
|
||||
//
|
||||
} EFI_HII_VARIABLE_PACK;
|
||||
|
||||
//
|
||||
// ********************************************************
|
||||
// EFI_DEVICE_PATH_PACK
|
||||
// ********************************************************
|
||||
//
|
||||
typedef struct {
|
||||
EFI_HII_PACK_HEADER Header;
|
||||
//
|
||||
// EFI_DEVICE_PATH DevicePath[];
|
||||
//
|
||||
} EFI_HII_DEVICE_PATH_PACK;
|
||||
|
||||
//
|
||||
// ********************************************************
|
||||
// EFI_HII_DATA_TABLE
|
||||
// ********************************************************
|
||||
//
|
||||
typedef struct {
|
||||
EFI_HII_HANDLE HiiHandle;
|
||||
EFI_GUID PackageGuid;
|
||||
UINT32 DataTableSize;
|
||||
UINT32 IfrDataOffset;
|
||||
UINT32 StringDataOffset;
|
||||
UINT32 VariableDataOffset;
|
||||
UINT32 DevicePathOffset;
|
||||
UINT32 NumberOfVariableData;
|
||||
UINT32 NumberOfLanguages;
|
||||
//
|
||||
// EFI_HII_DEVICE_PATH_PACK DevicePath[];
|
||||
// EFI_HII_VARIABLE_PACK VariableData[];
|
||||
// EFI_HII_IFR_PACK IfrData;
|
||||
// EFI_HII_STRING_PACK StringData[];
|
||||
//
|
||||
} EFI_HII_DATA_TABLE;
|
||||
|
||||
//
|
||||
// ********************************************************
|
||||
// EFI_HII_EXPORT_TABLE
|
||||
// ********************************************************
|
||||
//
|
||||
typedef struct {
|
||||
UINT16 NumberOfHiiDataTables;
|
||||
EFI_GUID Revision;
|
||||
//
|
||||
// EFI_HII_DATA_TABLE HiiDataTable[];
|
||||
//
|
||||
} EFI_HII_EXPORT_TABLE;
|
||||
|
||||
typedef struct {
|
||||
BOOLEAN FormSetUpdate; // If TRUE, next variable is significant
|
||||
EFI_PHYSICAL_ADDRESS FormCallbackHandle; // If not 0, will update Formset with this info
|
||||
BOOLEAN FormUpdate; // If TRUE, next variable is significant
|
||||
STRING_REF FormTitle; // If not 0, will update Form with this info
|
||||
UINT16 DataCount; // The number of Data entries in this structure
|
||||
UINT8 *Data; // An array of 1+ op-codes, specified by DataCount
|
||||
} EFI_HII_UPDATE_DATA;
|
||||
|
||||
//
|
||||
// String attributes
|
||||
//
|
||||
#define LANG_RIGHT_TO_LEFT 0x00000001
|
||||
|
||||
//
|
||||
// A string package is used to localize strings to a particular
|
||||
// language. The package is associated with a particular driver
|
||||
// or set of drivers. Tools are used to associate tokens with
|
||||
// string references in forms and in programs. These tokens are
|
||||
// language agnostic. When paired with a language pack (directly
|
||||
// or indirectly), the string token resolves into an actual
|
||||
// UNICODE string. The NumStringPointers determines how many
|
||||
// StringPointers (offset values) there are as well as the total
|
||||
// number of Strings that are defined.
|
||||
//
|
||||
typedef struct {
|
||||
EFI_HII_PACK_HEADER Header;
|
||||
RELOFST LanguageNameString;
|
||||
RELOFST PrintableLanguageName;
|
||||
UINT32 NumStringPointers;
|
||||
UINT32 Attributes;
|
||||
//
|
||||
// RELOFST StringPointers[];
|
||||
// EFI_STRING Strings[];
|
||||
//
|
||||
} EFI_HII_STRING_PACK;
|
||||
|
||||
//
|
||||
// We use this one to get the real size of the header
|
||||
//
|
||||
typedef struct {
|
||||
EFI_HII_PACK_HEADER Header;
|
||||
RELOFST LanguageNameString;
|
||||
RELOFST PrintableLanguageName;
|
||||
UINT32 NumStringPointers;
|
||||
UINT32 Attributes;
|
||||
} EFI_HII_STRING_PACK_HEADER;
|
||||
|
||||
//
|
||||
// Glyph Attributes
|
||||
//
|
||||
#define GLYPH_NON_SPACING 1
|
||||
#define GLYPH_NON_BREAKING 2
|
||||
|
||||
typedef struct {
|
||||
CHAR16 UnicodeWeight;
|
||||
UINT8 Attributes;
|
||||
UINT8 GlyphCol1[GLYPH_HEIGHT];
|
||||
} EFI_NARROW_GLYPH;
|
||||
|
||||
typedef struct {
|
||||
CHAR16 UnicodeWeight;
|
||||
UINT8 Attributes;
|
||||
UINT8 GlyphCol1[GLYPH_HEIGHT];
|
||||
UINT8 GlyphCol2[GLYPH_HEIGHT];
|
||||
UINT8 Pad[3];
|
||||
} EFI_WIDE_GLYPH;
|
||||
|
||||
//
|
||||
// A font list consists of a font header followed by a series
|
||||
// of glyph structures. Note that fonts are not language specific.
|
||||
//
|
||||
typedef struct {
|
||||
EFI_HII_PACK_HEADER Header;
|
||||
UINT16 NumberOfNarrowGlyphs;
|
||||
UINT16 NumberOfWideGlyphs;
|
||||
} EFI_HII_FONT_PACK;
|
||||
|
||||
//
|
||||
// The IfrData in the EFI_HII_IFR_PACK structure definition
|
||||
// is variable length, and not really part of the header. To
|
||||
// simplify from code the size of the header, define an
|
||||
// identical structure that does not include the IfrData field.
|
||||
// Then use sizeof() this new structure to determine the
|
||||
// actual size of the header.
|
||||
//
|
||||
typedef struct {
|
||||
EFI_HII_PACK_HEADER Header;
|
||||
} EFI_HII_IFR_PACK_HEADER;
|
||||
|
||||
//
|
||||
// pedef EFI_HII_PACK_HEADER EFI_HII_IFR_PACK_HEADER;
|
||||
//
|
||||
typedef enum {
|
||||
EfiKeyLCtrl,
|
||||
EfiKeyA0,
|
||||
EfiKeyLAlt,
|
||||
EfiKeySpaceBar,
|
||||
EfiKeyA2,
|
||||
EfiKeyA3,
|
||||
EfiKeyA4,
|
||||
EfiKeyRCtrl,
|
||||
EfiKeyLeftArrow,
|
||||
EfiKeyDownArrow,
|
||||
EfiKeyRightArrow,
|
||||
EfiKeyZero,
|
||||
EfiKeyPeriod,
|
||||
EfiKeyEnter,
|
||||
EfiKeyLShift,
|
||||
EfiKeyB0,
|
||||
EfiKeyB1,
|
||||
EfiKeyB2,
|
||||
EfiKeyB3,
|
||||
EfiKeyB4,
|
||||
EfiKeyB5,
|
||||
EfiKeyB6,
|
||||
EfiKeyB7,
|
||||
EfiKeyB8,
|
||||
EfiKeyB9,
|
||||
EfiKeyB10,
|
||||
EfiKeyRshift,
|
||||
EfiKeyUpArrow,
|
||||
EfiKeyOne,
|
||||
EfiKeyTwo,
|
||||
EfiKeyThree,
|
||||
EfiKeyCapsLock,
|
||||
EfiKeyC1,
|
||||
EfiKeyC2,
|
||||
EfiKeyC3,
|
||||
EfiKeyC4,
|
||||
EfiKeyC5,
|
||||
EfiKeyC6,
|
||||
EfiKeyC7,
|
||||
EfiKeyC8,
|
||||
EfiKeyC9,
|
||||
EfiKeyC10,
|
||||
EfiKeyC11,
|
||||
EfiKeyC12,
|
||||
EfiKeyFour,
|
||||
EfiKeyFive,
|
||||
EfiKeySix,
|
||||
EfiKeyPlus,
|
||||
EfiKeyTab,
|
||||
EfiKeyD1,
|
||||
EfiKeyD2,
|
||||
EfiKeyD3,
|
||||
EfiKeyD4,
|
||||
EfiKeyD5,
|
||||
EfiKeyD6,
|
||||
EfiKeyD7,
|
||||
EfiKeyD8,
|
||||
EfiKeyD9,
|
||||
EfiKeyD10,
|
||||
EfiKeyD11,
|
||||
EfiKeyD12,
|
||||
EfiKeyD13,
|
||||
EfiKeyDel,
|
||||
EfiKeyEnd,
|
||||
EfiKeyPgDn,
|
||||
EfiKeySeven,
|
||||
EfiKeyEight,
|
||||
EfiKeyNine,
|
||||
EfiKeyE0,
|
||||
EfiKeyE1,
|
||||
EfiKeyE2,
|
||||
EfiKeyE3,
|
||||
EfiKeyE4,
|
||||
EfiKeyE5,
|
||||
EfiKeyE6,
|
||||
EfiKeyE7,
|
||||
EfiKeyE8,
|
||||
EfiKeyE9,
|
||||
EfiKeyE10,
|
||||
EfiKeyE11,
|
||||
EfiKeyE12,
|
||||
EfiKeyBackSpace,
|
||||
EfiKeyIns,
|
||||
EfiKeyHome,
|
||||
EfiKeyPgUp,
|
||||
EfiKeyNLck,
|
||||
EfiKeySlash,
|
||||
EfiKeyAsterisk,
|
||||
EfiKeyMinus,
|
||||
EfiKeyEsc,
|
||||
EfiKeyF1,
|
||||
EfiKeyF2,
|
||||
EfiKeyF3,
|
||||
EfiKeyF4,
|
||||
EfiKeyF5,
|
||||
EfiKeyF6,
|
||||
EfiKeyF7,
|
||||
EfiKeyF8,
|
||||
EfiKeyF9,
|
||||
EfiKeyF10,
|
||||
EfiKeyF11,
|
||||
EfiKeyF12,
|
||||
EfiKeyPrint,
|
||||
EfiKeySLck,
|
||||
EfiKeyPause
|
||||
} EFI_KEY;
|
||||
|
||||
typedef struct {
|
||||
EFI_KEY Key;
|
||||
CHAR16 Unicode;
|
||||
CHAR16 ShiftedUnicode;
|
||||
CHAR16 AltGrUnicode;
|
||||
CHAR16 ShiftedAltGrUnicode;
|
||||
UINT16 Modifier;
|
||||
} EFI_KEY_DESCRIPTOR;
|
||||
|
||||
//
|
||||
// This structure allows a sparse set of keys to be redefined
|
||||
// or a complete redefinition of the keyboard layout. Most
|
||||
// keyboards have a lot of commonality in their layouts, therefore
|
||||
// only defining those keys that need to change from the default
|
||||
// minimizes the passed in information.
|
||||
//
|
||||
// Additionally, when an update occurs, the active keyboard layout
|
||||
// will be switched to the newly updated keyboard layout. This
|
||||
// allows for situations that when a keyboard layout driver is
|
||||
// loaded as part of system initialization, the system will default
|
||||
// the keyboard behavior to the new layout.
|
||||
//
|
||||
// Each call to update the keyboard mapping should contain the
|
||||
// complete set of key descriptors to be updated, since every
|
||||
// call to the HII which contains an EFI_HII_KEYBOARD_PACK will
|
||||
// wipe the previous set of overrides. A call to
|
||||
//
|
||||
typedef struct {
|
||||
EFI_HII_PACK_HEADER Header;
|
||||
EFI_KEY_DESCRIPTOR *Descriptor;
|
||||
UINT8 DescriptorCount;
|
||||
} EFI_HII_KEYBOARD_PACK;
|
||||
|
||||
//
|
||||
// The EFI_HII_PACKAGES can contain different types of packages just
|
||||
// after the structure as inline data.
|
||||
//
|
||||
typedef struct {
|
||||
UINTN NumberOfPackages;
|
||||
EFI_GUID *GuidId;
|
||||
//
|
||||
// EFI_HII_HANDLE_PACK *HandlePack; // Only one pack.
|
||||
// EFI_HII_IFR_PACK *IfrPack; // Only one pack.
|
||||
// EFI_HII_FONT_PACK *FontPack[]; // Multiple packs ok
|
||||
// EFI_HII_STRING_PACK *StringPack[]; // Multiple packs ok
|
||||
// EFI_HII_KEYBOARD_PACK *KeyboardPack[]; // Multiple packs ok
|
||||
//
|
||||
} EFI_HII_PACKAGES;
|
||||
|
||||
typedef struct _EFI_HII_VARIABLE_PACK_LIST {
|
||||
struct _EFI_HII_VARIABLE_PACK_LIST *NextVariablePack;
|
||||
EFI_HII_VARIABLE_PACK *VariablePack;
|
||||
} EFI_HII_VARIABLE_PACK_LIST;
|
||||
|
||||
#pragma pack()
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_HII_NEW_PACK) (
|
||||
IN EFI_HII_PROTOCOL * This,
|
||||
IN EFI_HII_PACKAGES * Packages,
|
||||
OUT EFI_HII_HANDLE * Handle
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_HII_REMOVE_PACK) (
|
||||
IN EFI_HII_PROTOCOL *This,
|
||||
IN EFI_HII_HANDLE Handle
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_HII_FIND_HANDLES) (
|
||||
IN EFI_HII_PROTOCOL *This,
|
||||
IN OUT UINT16 *HandleBufferLength,
|
||||
OUT EFI_HII_HANDLE *Handle
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_HII_EXPORT) (
|
||||
IN EFI_HII_PROTOCOL *This,
|
||||
IN EFI_HII_HANDLE Handle,
|
||||
IN OUT UINTN *BufferSize,
|
||||
OUT VOID *Buffer
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_HII_RESET_STRINGS) (
|
||||
IN EFI_HII_PROTOCOL *This,
|
||||
IN EFI_HII_HANDLE Handle
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_HII_TEST_STRING) (
|
||||
IN EFI_HII_PROTOCOL *This,
|
||||
IN CHAR16 *StringToTest,
|
||||
IN OUT UINT32 *FirstMissing,
|
||||
OUT UINT32 *GlyphBufferSize
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_HII_GET_GLYPH) (
|
||||
IN EFI_HII_PROTOCOL *This,
|
||||
IN CHAR16 *Source,
|
||||
IN OUT UINT16 *Index,
|
||||
OUT UINT8 **GlyphBuffer,
|
||||
OUT UINT16 *BitWidth,
|
||||
IN OUT UINT32 *InternalStatus
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_HII_GLYPH_TO_BLT) (
|
||||
IN EFI_HII_PROTOCOL *This,
|
||||
IN UINT8 *GlyphBuffer,
|
||||
IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL Foreground,
|
||||
IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL Background,
|
||||
IN UINTN Count,
|
||||
IN UINTN Width,
|
||||
IN UINTN Height,
|
||||
IN OUT EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_HII_NEW_STRING) (
|
||||
IN EFI_HII_PROTOCOL *This,
|
||||
IN CHAR16 *Language,
|
||||
IN EFI_HII_HANDLE Handle,
|
||||
IN OUT STRING_REF *Reference,
|
||||
IN CHAR16 *NewString
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_HII_GET_PRI_LANGUAGES) (
|
||||
IN EFI_HII_PROTOCOL *This,
|
||||
IN EFI_HII_HANDLE Handle,
|
||||
OUT EFI_STRING *LanguageString
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_HII_GET_SEC_LANGUAGES) (
|
||||
IN EFI_HII_PROTOCOL *This,
|
||||
IN EFI_HII_HANDLE Handle,
|
||||
IN CHAR16 *PrimaryLanguage,
|
||||
OUT EFI_STRING *LanguageString
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_HII_GET_STRING) (
|
||||
IN EFI_HII_PROTOCOL *This,
|
||||
IN EFI_HII_HANDLE Handle,
|
||||
IN STRING_REF Token,
|
||||
IN BOOLEAN Raw,
|
||||
IN CHAR16 *LanguageString,
|
||||
IN OUT UINTN *BufferLength,
|
||||
OUT EFI_STRING StringBuffer
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_HII_GET_LINE) (
|
||||
IN EFI_HII_PROTOCOL *This,
|
||||
IN EFI_HII_HANDLE Handle,
|
||||
IN STRING_REF Token,
|
||||
IN OUT UINT16 *Index,
|
||||
IN UINT16 LineWidth,
|
||||
IN CHAR16 *LanguageString,
|
||||
IN OUT UINT16 *BufferLength,
|
||||
OUT EFI_STRING StringBuffer
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_HII_GET_FORMS) (
|
||||
IN EFI_HII_PROTOCOL *This,
|
||||
IN EFI_HII_HANDLE Handle,
|
||||
IN EFI_FORM_ID FormId,
|
||||
IN OUT UINTN *BufferLength,
|
||||
OUT UINT8 *Buffer
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_HII_GET_DEFAULT_IMAGE) (
|
||||
IN EFI_HII_PROTOCOL *This,
|
||||
IN EFI_HII_HANDLE Handle,
|
||||
IN UINTN DefaultMask,
|
||||
OUT EFI_HII_VARIABLE_PACK_LIST **VariablePackList
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_HII_UPDATE_FORM) (
|
||||
IN EFI_HII_PROTOCOL *This,
|
||||
IN EFI_HII_HANDLE Handle,
|
||||
IN EFI_FORM_LABEL Label,
|
||||
IN BOOLEAN AddData,
|
||||
IN EFI_HII_UPDATE_DATA *Data
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_HII_GET_KEYBOARD_LAYOUT) (
|
||||
IN EFI_HII_PROTOCOL * This,
|
||||
OUT UINT16 *DescriptorCount,
|
||||
OUT EFI_KEY_DESCRIPTOR * Descriptor
|
||||
);
|
||||
|
||||
typedef struct _EFI_HII_PROTOCOL {
|
||||
EFI_HII_NEW_PACK NewPack;
|
||||
EFI_HII_REMOVE_PACK RemovePack;
|
||||
EFI_HII_FIND_HANDLES FindHandles;
|
||||
EFI_HII_EXPORT ExportDatabase;
|
||||
|
||||
EFI_HII_TEST_STRING TestString;
|
||||
EFI_HII_GET_GLYPH GetGlyph;
|
||||
EFI_HII_GLYPH_TO_BLT GlyphToBlt;
|
||||
|
||||
EFI_HII_NEW_STRING NewString;
|
||||
EFI_HII_GET_PRI_LANGUAGES GetPrimaryLanguages;
|
||||
EFI_HII_GET_SEC_LANGUAGES GetSecondaryLanguages;
|
||||
EFI_HII_GET_STRING GetString;
|
||||
EFI_HII_RESET_STRINGS ResetStrings;
|
||||
EFI_HII_GET_LINE GetLine;
|
||||
EFI_HII_GET_FORMS GetForms;
|
||||
EFI_HII_GET_DEFAULT_IMAGE GetDefaultImage;
|
||||
EFI_HII_UPDATE_FORM UpdateForm;
|
||||
|
||||
EFI_HII_GET_KEYBOARD_LAYOUT GetKeyboardLayout;
|
||||
} EFI_HII_PROTOCOL;
|
||||
|
||||
extern EFI_GUID gEfiHiiProtocolGuid;
|
||||
|
||||
#endif
|
@@ -0,0 +1,30 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004, 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:
|
||||
|
||||
IdeControllerInit.c
|
||||
|
||||
Abstract:
|
||||
|
||||
EFI IDE Controller Init Protocol
|
||||
|
||||
Revision History
|
||||
|
||||
--*/
|
||||
|
||||
#include "Tiano.h"
|
||||
|
||||
#include EFI_PROTOCOL_DEFINITION (IdeControllerInit)
|
||||
|
||||
EFI_GUID gEfiIdeControllerInitProtocolGuid = EFI_IDE_CONTROLLER_INIT_PROTOCOL_GUID;
|
||||
|
||||
EFI_GUID_STRING(&gEfiIdeControllerInitProtocolGuid, "IDE Controller Init Protocol", "Platform IDE Init Protocol");
|
@@ -0,0 +1,348 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004, 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:
|
||||
|
||||
IdeControllerInit.h
|
||||
|
||||
Abstract:
|
||||
|
||||
EFI Platform IDE Init Protocol
|
||||
|
||||
Revision History
|
||||
|
||||
0.01 - Draft, 5-01-2002
|
||||
Add Atapi6 Identify structure definition, 8-14-2002
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _EFI_IDE_CONTROLLER_INIT_PROTOCOL_H
|
||||
#define _EFI_IDE_CONTROLLER_INIT_PROTOCOL_H
|
||||
|
||||
//
|
||||
// Global ID for the EFI Platform IDE Protocol GUID
|
||||
//
|
||||
#define EFI_IDE_CONTROLLER_INIT_PROTOCOL_GUID \
|
||||
{ 0xa1e37052, 0x80d9, 0x4e65, 0xa3, 0x17, 0x3e, 0x9a, 0x55, 0xc4, 0x3e, 0xc9 }
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Forward reference, ANSI compatability
|
||||
//
|
||||
EFI_FORWARD_DECLARATION (EFI_IDE_CONTROLLER_INIT_PROTOCOL);
|
||||
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
// EFI_IDE_BUS_ENUMERATION_PHASE
|
||||
// EFI_IDE_CONTROLLER_ENUM_PHASE
|
||||
//
|
||||
typedef enum{
|
||||
EfiIdeBeforeChannelEnumeration,
|
||||
EfiIdeAfterChannelEnumeration,
|
||||
EfiIdeBeforeChannelReset,
|
||||
EfiIdeAfterChannelReset,
|
||||
EfiIdeBusBeforeDevicePresenceDetection,
|
||||
EfiIdeBusAfterDevicePresenceDetection,
|
||||
EfiIdeResetMode,
|
||||
EfiIdeBusPhaseMaximum
|
||||
} EFI_IDE_CONTROLLER_ENUM_PHASE;
|
||||
|
||||
//
|
||||
//******************************************************
|
||||
// EFI_ATA_EXT_TRANSFER_PROTOCOL
|
||||
//******************************************************
|
||||
//
|
||||
// This extended mode describes the SATA physical protocol.
|
||||
// SATA physical layers can operate at different speeds.
|
||||
// These speeds are defined below. Various PATA protocols
|
||||
// and associated modes are not applicable to SATA devices.
|
||||
//
|
||||
|
||||
typedef enum {
|
||||
EfiAtaSataTransferProtocol
|
||||
} EFI_ATA_EXT_TRANSFER_PROTOCOL;
|
||||
|
||||
#define EFI_SATA_AUTO_SPEED 0
|
||||
#define EFI_SATA_GEN1_SPEED 1
|
||||
#define EFI_SATA_GEN2_SPEED 2
|
||||
|
||||
//
|
||||
//*******************************************************
|
||||
// EFI_IDE_CABLE_TYPE
|
||||
//*******************************************************
|
||||
//
|
||||
typedef enum {
|
||||
EfiIdeCableTypeUnknown,
|
||||
EfiIdeCableType40pin,
|
||||
EfiIdeCableType80Pin,
|
||||
EfiIdeCableTypeSerial,
|
||||
EfiIdeCableTypeMaximum
|
||||
} EFI_IDE_CABLE_TYPE;
|
||||
|
||||
//
|
||||
//******************************************************
|
||||
// EFI_ATA_MODE
|
||||
//******************************************************
|
||||
//
|
||||
typedef struct {
|
||||
BOOLEAN Valid;
|
||||
UINT32 Mode;
|
||||
} EFI_ATA_MODE;
|
||||
|
||||
//
|
||||
//******************************************************
|
||||
// EFI_ATA_EXTENDED_MODE
|
||||
//******************************************************
|
||||
//
|
||||
typedef struct {
|
||||
EFI_ATA_EXT_TRANSFER_PROTOCOL TransferProtocol;
|
||||
UINT32 Mode;
|
||||
} EFI_ATA_EXTENDED_MODE;
|
||||
|
||||
//
|
||||
//******************************************************
|
||||
// EFI_ATA_COLLECTIVE_MODE
|
||||
//******************************************************
|
||||
//
|
||||
typedef struct {
|
||||
EFI_ATA_MODE PioMode;
|
||||
EFI_ATA_MODE SingleWordDmaMode;
|
||||
EFI_ATA_MODE MultiWordDmaMode;
|
||||
EFI_ATA_MODE UdmaMode;
|
||||
UINT32 ExtModeCount;
|
||||
EFI_ATA_EXTENDED_MODE ExtMode[1];
|
||||
} EFI_ATA_COLLECTIVE_MODE;
|
||||
|
||||
//
|
||||
//*******************************************************
|
||||
// EFI_ATA_IDENTIFY_DATA
|
||||
//*******************************************************
|
||||
//
|
||||
|
||||
#pragma pack(1)
|
||||
|
||||
typedef struct {
|
||||
UINT16 config; // General Configuration
|
||||
UINT16 cylinders; // Number of Cylinders
|
||||
UINT16 reserved_2;
|
||||
UINT16 heads; //Number of logical heads
|
||||
UINT16 vendor_data1;
|
||||
UINT16 vendor_data2;
|
||||
UINT16 sectors_per_track;
|
||||
UINT16 vendor_specific_7_9[3];
|
||||
CHAR8 SerialNo[20]; // ASCII
|
||||
UINT16 vendor_specific_20_21[2];
|
||||
UINT16 ecc_bytes_available;
|
||||
CHAR8 FirmwareVer[8]; // ASCII
|
||||
CHAR8 ModelName[40]; // ASCII
|
||||
UINT16 multi_sector_cmd_max_sct_cnt;
|
||||
UINT16 reserved_48;
|
||||
UINT16 capabilities;
|
||||
UINT16 reserved_50;
|
||||
UINT16 pio_cycle_timing;
|
||||
UINT16 reserved_52;
|
||||
UINT16 field_validity;
|
||||
UINT16 current_cylinders;
|
||||
UINT16 current_heads;
|
||||
UINT16 current_sectors;
|
||||
UINT16 CurrentCapacityLsb;
|
||||
UINT16 CurrentCapacityMsb;
|
||||
UINT16 reserved_59;
|
||||
UINT16 user_addressable_sectors_lo;
|
||||
UINT16 user_addressable_sectors_hi;
|
||||
UINT16 reserved_62;
|
||||
UINT16 multi_word_dma_mode;
|
||||
UINT16 advanced_pio_modes;
|
||||
UINT16 min_multi_word_dma_cycle_time;
|
||||
UINT16 rec_multi_word_dma_cycle_time;
|
||||
UINT16 min_pio_cycle_time_without_flow_control;
|
||||
UINT16 min_pio_cycle_time_with_flow_control;
|
||||
UINT16 reserved_69_79[11];
|
||||
UINT16 major_version_no;
|
||||
UINT16 minor_version_no;
|
||||
UINT16 command_set_supported_82; // word 82
|
||||
UINT16 command_set_supported_83; // word 83
|
||||
UINT16 command_set_feature_extn; // word 84
|
||||
UINT16 command_set_feature_enb_85; // word 85
|
||||
UINT16 command_set_feature_enb_86; // word 86
|
||||
UINT16 command_set_feature_default; // word 87
|
||||
UINT16 ultra_dma_mode; // word 88
|
||||
UINT16 reserved_89_127[39];
|
||||
UINT16 security_status;
|
||||
UINT16 vendor_data_129_159[31];
|
||||
UINT16 reserved_160_255[96];
|
||||
} EFI_ATA_IDENTIFY_DATA;
|
||||
|
||||
#pragma pack()
|
||||
//
|
||||
//*******************************************************
|
||||
// EFI_ATAPI_IDENTIFY_DATA
|
||||
//*******************************************************
|
||||
//
|
||||
#pragma pack(1)
|
||||
typedef struct {
|
||||
UINT16 config; // General Configuration
|
||||
UINT16 obsolete_1;
|
||||
UINT16 specific_config;
|
||||
UINT16 obsolete_3;
|
||||
UINT16 retired_4_5[2];
|
||||
UINT16 obsolete_6;
|
||||
UINT16 cfa_reserved_7_8[2];
|
||||
UINT16 retired_9;
|
||||
CHAR8 SerialNo[20]; // ASCII
|
||||
UINT16 retired_20_21[2];
|
||||
UINT16 obsolete_22;
|
||||
CHAR8 FirmwareVer[8]; // ASCII
|
||||
CHAR8 ModelName[40]; // ASCII
|
||||
UINT16 multi_sector_cmd_max_sct_cnt;
|
||||
UINT16 reserved_48;
|
||||
UINT16 capabilities_49;
|
||||
UINT16 capabilities_50;
|
||||
UINT16 obsolete_51_52[2];
|
||||
UINT16 field_validity;
|
||||
UINT16 obsolete_54_58[5];
|
||||
UINT16 mutil_sector_setting;
|
||||
UINT16 user_addressable_sectors_lo;
|
||||
UINT16 user_addressable_sectors_hi;
|
||||
UINT16 obsolete_62;
|
||||
UINT16 multi_word_dma_mode;
|
||||
UINT16 advanced_pio_modes;
|
||||
UINT16 min_multi_word_dma_cycle_time;
|
||||
UINT16 rec_multi_word_dma_cycle_time;
|
||||
UINT16 min_pio_cycle_time_without_flow_control;
|
||||
UINT16 min_pio_cycle_time_with_flow_control;
|
||||
UINT16 reserved_69_74[6];
|
||||
UINT16 queue_depth;
|
||||
UINT16 reserved_76_79[4];
|
||||
UINT16 major_version_no;
|
||||
UINT16 minor_version_no;
|
||||
UINT16 cmd_set_support_82;
|
||||
UINT16 cmd_set_support_83;
|
||||
UINT16 cmd_feature_support;
|
||||
UINT16 cmd_feature_enable_85;
|
||||
UINT16 cmd_feature_enable_86;
|
||||
UINT16 cmd_feature_default;
|
||||
UINT16 ultra_dma_select;
|
||||
UINT16 time_required_for_sec_erase;
|
||||
UINT16 time_required_for_enhanced_sec_erase;
|
||||
UINT16 current_advanced_power_mgmt_value;
|
||||
UINT16 master_pwd_revison_code;
|
||||
UINT16 hardware_reset_result;
|
||||
UINT16 current_auto_acoustic_mgmt_value;
|
||||
UINT16 reserved_95_99[5];
|
||||
UINT16 max_user_lba_for_48bit_addr[4];
|
||||
UINT16 reserved_104_126[23];
|
||||
UINT16 removable_media_status_notification_support;
|
||||
UINT16 security_status;
|
||||
UINT16 vendor_data_129_159[31];
|
||||
UINT16 cfa_power_mode;
|
||||
UINT16 cfa_reserved_161_175[15];
|
||||
UINT16 current_media_serial_no[30];
|
||||
UINT16 reserved_206_254[49];
|
||||
UINT16 integrity_word;
|
||||
} EFI_ATAPI_IDENTIFY_DATA;
|
||||
|
||||
#pragma pack()
|
||||
//
|
||||
//*******************************************************
|
||||
// EFI_IDENTIFY_DATA
|
||||
//*******************************************************
|
||||
//
|
||||
typedef union {
|
||||
EFI_ATA_IDENTIFY_DATA AtaData;
|
||||
EFI_ATAPI_IDENTIFY_DATA AtapiData;
|
||||
} EFI_IDENTIFY_DATA;
|
||||
|
||||
#define EFI_ATAPI_DEVICE_IDENTIFY_DATA 0x8000
|
||||
|
||||
//
|
||||
/////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Function prototype declaration, for ANSI compatability
|
||||
//
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_IDE_CONTROLLER_GET_CHANNEL_INFO) (
|
||||
IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This,
|
||||
IN UINT8 Channel,
|
||||
OUT BOOLEAN *Enabled,
|
||||
OUT UINT8 *MaxDevices
|
||||
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_IDE_CONTROLLER_NOTIFY_PHASE) (
|
||||
IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This,
|
||||
IN EFI_IDE_CONTROLLER_ENUM_PHASE Phase,
|
||||
IN UINT8 Channel
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_IDE_CONTROLLER_SUBMIT_DATA) (
|
||||
IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This,
|
||||
IN UINT8 Channel,
|
||||
IN UINT8 Device,
|
||||
IN EFI_IDENTIFY_DATA *IdentifyData
|
||||
);
|
||||
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_IDE_CONTROLLER_DISQUALIFY_MODE) (
|
||||
IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This,
|
||||
IN UINT8 Channel,
|
||||
IN UINT8 Device,
|
||||
IN EFI_ATA_COLLECTIVE_MODE *BadModes
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_IDE_CONTROLLER_CALCULATE_MODE) (
|
||||
IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This,
|
||||
IN UINT8 Channel,
|
||||
IN UINT8 Device,
|
||||
OUT EFI_ATA_COLLECTIVE_MODE **SupportedModes
|
||||
);
|
||||
|
||||
//
|
||||
// ?? What happen to EFI_IDE_CONTROLLER_SET_TIMING ???
|
||||
//
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_IDE_CONTROLLER_SET_TIMING) (
|
||||
IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This,
|
||||
IN UINT8 Channel,
|
||||
IN UINT8 Device,
|
||||
IN EFI_ATA_COLLECTIVE_MODE *Modes
|
||||
);
|
||||
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Interface structure
|
||||
// EFI_IDE_CONTROLLER_INIT_PROTOCOL protocol provides the chipset specific information to the IDE bus driver.
|
||||
// An IDE Bus driver wants to manage an IDE bus and possible IDE devices will have to retrieve the
|
||||
// EFI_IDE_CONTROLLER_INIT_PROTOCOL instances.
|
||||
//
|
||||
typedef struct _EFI_IDE_CONTROLLER_INIT_PROTOCOL {
|
||||
EFI_IDE_CONTROLLER_GET_CHANNEL_INFO GetChannelInfo;
|
||||
EFI_IDE_CONTROLLER_NOTIFY_PHASE NotifyPhase;
|
||||
EFI_IDE_CONTROLLER_SUBMIT_DATA SubmitData;
|
||||
EFI_IDE_CONTROLLER_DISQUALIFY_MODE DisqualifyMode;
|
||||
EFI_IDE_CONTROLLER_CALCULATE_MODE CalculateMode;
|
||||
EFI_IDE_CONTROLLER_SET_TIMING SetTiming;
|
||||
BOOLEAN EnumAll;
|
||||
UINT8 ChannelCount;
|
||||
} EFI_IDE_CONTROLLER_INIT_PROTOCOL;
|
||||
|
||||
|
||||
extern EFI_GUID gEfiIdeControllerInitProtocolGuid;
|
||||
|
||||
#endif
|
@@ -0,0 +1,34 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004, 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:
|
||||
|
||||
IncompatiblePciDeviceSupport.c
|
||||
|
||||
Abstract:
|
||||
|
||||
EFI Incompatible PCI Device Support Protocol
|
||||
|
||||
Revision History
|
||||
|
||||
--*/
|
||||
|
||||
#include "Tiano.h"
|
||||
|
||||
#include EFI_PROTOCOL_DEFINITION (IncompatiblePciDeviceSupport)
|
||||
|
||||
EFI_GUID gEfiIncompatiblePciDeviceSupportProtocolGuid = EFI_INCOMPATIBLE_PCI_DEVICE_SUPPORT_PROTOCOL_GUID;
|
||||
|
||||
EFI_GUID_STRING
|
||||
(
|
||||
&gEfiIncompatiblePciDeviceSupportProtocolGuid, "Incompatible PCI Device Support Protocol",
|
||||
"Tiano Incompatible PCI Device Support Protocol"
|
||||
);
|
@@ -0,0 +1,55 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004, 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:
|
||||
|
||||
IncompatiblePciDeviceSupport.h
|
||||
|
||||
Abstract:
|
||||
|
||||
EFI Incompatible PCI Device Support Protocol
|
||||
|
||||
Revision History
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _INCOMPATIBLE_PCI_DEVICE_SUPPORT_H_
|
||||
#define _INCOMPATIBLE_PCI_DEVICE_SUPPORT_H_
|
||||
|
||||
#define EFI_INCOMPATIBLE_PCI_DEVICE_SUPPORT_PROTOCOL_GUID \
|
||||
{0xeb23f55a, 0x7863, 0x4ac2, 0x8d, 0x3d, 0x95, 0x65, 0x35, 0xde, 0x03, 0x75}
|
||||
|
||||
EFI_FORWARD_DECLARATION (EFI_INCOMPATIBLE_PCI_DEVICE_SUPPORT);
|
||||
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_INCOMPATIBLE_PCI_DEVICE_SUPPORT_CHECK_DEVICE) (
|
||||
IN EFI_INCOMPATIBLE_PCI_DEVICE_SUPPORT *This,
|
||||
IN UINTN VendorId,
|
||||
IN UINTN DeviceId,
|
||||
IN UINTN Revision,
|
||||
IN UINTN SubVendorId,OPTIONAL
|
||||
IN UINTN SubDeviceId,OPTIONAL
|
||||
OUT VOID *Configuration
|
||||
);
|
||||
|
||||
|
||||
//
|
||||
// Interface structure for the Incompatible PCI Device Support Protocol
|
||||
//
|
||||
typedef struct _EFI_INCOMPATIBLE_PCI_DEVICE_SUPPORT {
|
||||
EFI_INCOMPATIBLE_PCI_DEVICE_SUPPORT_CHECK_DEVICE CheckDevice;
|
||||
} EFI_INCOMPATIBLE_PCI_DEVICE_SUPPORT_PROTOCOL;
|
||||
|
||||
extern EFI_GUID gEfiIncompatiblePciDeviceSupportProtocolGuid;
|
||||
|
||||
#endif
|
@@ -0,0 +1,31 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 1999 - 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:
|
||||
|
||||
Legacy8259.c
|
||||
|
||||
Abstract:
|
||||
|
||||
EFI Legacy Region Protocol
|
||||
|
||||
Revision History
|
||||
|
||||
--*/
|
||||
|
||||
#include "Tiano.h"
|
||||
|
||||
#include EFI_PROTOCOL_DEFINITION (Legacy8259)
|
||||
|
||||
EFI_GUID gEfiLegacy8259ProtocolGuid = EFI_LEGACY_8259_PROTOCOL_GUID;
|
||||
|
||||
EFI_GUID_STRING(&gEfiLegacy8259ProtocolGuid, "Legacy 8259 Protocol", "Legacy 8259 Protocol");
|
@@ -0,0 +1,317 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 1999 - 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:
|
||||
|
||||
Legacy8259.h
|
||||
|
||||
Abstract:
|
||||
|
||||
This protocol abstracts the 8259 interrupt controller. This includes
|
||||
PCI IRQ routing need to program the PCI Interrupt Line register.
|
||||
|
||||
Revision History
|
||||
|
||||
The EFI Legacy 8259 Protocol is compliant with CSM spec 0.96.
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _EFI_LEGACY_8259_H
|
||||
#define _EFI_LEGACY_8259_H
|
||||
|
||||
#define EFI_LEGACY_8259_PROTOCOL_GUID \
|
||||
{ \
|
||||
0x38321dba, 0x4fe0, 0x4e17, 0x8a, 0xec, 0x41, 0x30, 0x55, 0xea, 0xed, 0xc1 \
|
||||
}
|
||||
|
||||
EFI_FORWARD_DECLARATION (EFI_LEGACY_8259_PROTOCOL);
|
||||
|
||||
typedef enum {
|
||||
Efi8259Irq0,
|
||||
Efi8259Irq1,
|
||||
Efi8259Irq2,
|
||||
Efi8259Irq3,
|
||||
Efi8259Irq4,
|
||||
Efi8259Irq5,
|
||||
Efi8259Irq6,
|
||||
Efi8259Irq7,
|
||||
Efi8259Irq8,
|
||||
Efi8259Irq9,
|
||||
Efi8259Irq10,
|
||||
Efi8259Irq11,
|
||||
Efi8259Irq12,
|
||||
Efi8259Irq13,
|
||||
Efi8259Irq14,
|
||||
Efi8259Irq15,
|
||||
Efi8259IrqMax
|
||||
} EFI_8259_IRQ;
|
||||
|
||||
typedef enum {
|
||||
Efi8259LegacyMode,
|
||||
Efi8259ProtectedMode,
|
||||
Efi8259MaxMode
|
||||
} EFI_8259_MODE;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_LEGACY_8259_SET_VECTOR_BASE) (
|
||||
IN EFI_LEGACY_8259_PROTOCOL * This,
|
||||
IN UINT8 MasterBase,
|
||||
IN UINT8 SlaveBase
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Get the 8259 interrupt masks for Irq0 - Irq15. A different mask exists for
|
||||
the legacy mode mask and the protected mode mask. The base address for the 8259
|
||||
is different for legacy and protected mode, so two masks are required.
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
MasterBase - The base vector for the Master PIC in the 8259 controller
|
||||
Slavebase - The base vector for the Master PIC in the 8259 controller
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - The new bases were programmed
|
||||
EFI_DEVICE_ERROR - A device erro occured programming the vector bases
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_LEGACY_8259_GET_MASK) (
|
||||
IN EFI_LEGACY_8259_PROTOCOL * This,
|
||||
OUT UINT16 *LegacyMask, OPTIONAL
|
||||
OUT UINT16 *LegacyEdgeLevel, OPTIONAL
|
||||
OUT UINT16 *ProtectedMask, OPTIONAL
|
||||
OUT UINT16 *ProtectedEdgeLevel OPTIONAL
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Get the 8259 interrupt masks for Irq0 - Irq15. A different mask exists for
|
||||
the legacy mode mask and the protected mode mask. The base address for the 8259
|
||||
is different for legacy and protected mode, so two masks are required.
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
LegacyMask - Bit 0 is Irq0 - Bit 15 is Irq15
|
||||
LegacyEdgeLevel - Bit 0 is Irq0 - Bit 15 is Irq15
|
||||
ProtectedMask - Bit 0 is Irq0 - Bit 15 is Irq15
|
||||
ProtectedEdgeLevel - Bit 0 is Irq0 - Bit 15 is Irq15
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - 8259 status returned
|
||||
EFI_DEVICE_ERROR - Error reading 8259
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_LEGACY_8259_SET_MASK) (
|
||||
IN EFI_LEGACY_8259_PROTOCOL * This,
|
||||
IN UINT16 *LegacyMask, OPTIONAL
|
||||
IN UINT16 *LegacyEdgeLevel, OPTIONAL
|
||||
IN UINT16 *ProtectedMask, OPTIONAL
|
||||
IN UINT16 *ProtectedEdgeLevel OPTIONAL
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Set the 8259 interrupt masks for Irq0 - Irq15. A different mask exists for
|
||||
the legacy mode mask and the protected mode mask. The base address for the 8259
|
||||
is different for legacy and protected mode, so two masks are required.
|
||||
Also set the edge/level masks.
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
LegacyMask - Bit 0 is Irq0 - Bit 15 is Irq15
|
||||
LegacyEdgeLevel - Bit 0 is Irq0 - Bit 15 is Irq15
|
||||
ProtectedMask - Bit 0 is Irq0 - Bit 15 is Irq15
|
||||
ProtectedEdgeLevel - Bit 0 is Irq0 - Bit 15 is Irq15
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - 8259 status returned
|
||||
EFI_DEVICE_ERROR - Error reading 8259
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_LEGACY_8259_SET_MODE) (
|
||||
IN EFI_LEGACY_8259_PROTOCOL * This,
|
||||
IN EFI_8259_MODE Mode,
|
||||
IN UINT16 *Mask, OPTIONAL
|
||||
IN UINT16 *EdgeLevel OPTIONAL
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Set the 8259 mode of operation. The base address for the 8259 is different for
|
||||
legacy and protected mode. The legacy mode requires the master 8259 to have a
|
||||
master base of 0x08 and the slave base of 0x70. The protected mode base locations
|
||||
are not defined. Interrupts must be masked by the caller before this function
|
||||
is called. The interrupt mask from the current mode is saved. The interrupt
|
||||
mask for the new mode is Mask, or if Mask does not exist the previously saved
|
||||
mask is used.
|
||||
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
Mode - Mode of operation. i.e. real mode or protected mode
|
||||
Mask - Optional interupt mask for the new mode.
|
||||
EdgeLevel - Optional trigger mask for the new mode.
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - 8259 programmed
|
||||
EFI_DEVICE_ERROR - Error writting to 8259
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_LEGACY_8259_GET_VECTOR) (
|
||||
IN EFI_LEGACY_8259_PROTOCOL * This,
|
||||
IN EFI_8259_IRQ Irq,
|
||||
OUT UINT8 *Vector
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Convert from IRQ to processor interrupt vector number.
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
Irq - 8259 IRQ0 - IRQ15
|
||||
Vector - Processor vector number that matches Irq
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - The Vector matching Irq is returned
|
||||
EFI_INVALID_PARAMETER - Irq not valid
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_LEGACY_8259_ENABLE_IRQ) (
|
||||
IN EFI_LEGACY_8259_PROTOCOL * This,
|
||||
IN EFI_8259_IRQ Irq,
|
||||
IN BOOLEAN LevelTriggered
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Enable Irq by unmasking interrupt in 8259
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
Irq - 8259 IRQ0 - IRQ15
|
||||
LevelTriggered - TRUE if level triggered. FALSE if edge triggered.
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - Irq enabled on 8259
|
||||
EFI_INVALID_PARAMETER - Irq not valid
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_LEGACY_8259_DISABLE_IRQ) (
|
||||
IN EFI_LEGACY_8259_PROTOCOL * This,
|
||||
IN EFI_8259_IRQ Irq
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Disable Irq by masking interrupt in 8259
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
Irq - 8259 IRQ0 - IRQ15
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - Irq disabled on 8259
|
||||
EFI_INVALID_PARAMETER - Irq not valid
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_LEGACY_8259_GET_INTERRUPT_LINE) (
|
||||
IN EFI_LEGACY_8259_PROTOCOL * This,
|
||||
IN EFI_HANDLE PciHandle,
|
||||
OUT UINT8 *Vector
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
PciHandle represents a PCI config space of a PCI function. Vector
|
||||
represents Interrupt Pin (from PCI config space) and it is the data
|
||||
that is programmed into the Interrupt Line (from the PCI config space)
|
||||
register.
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
PciHandle - PCI function to return vector for
|
||||
Vector - Vector for fucntion that matches
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - A valid Vector is returned
|
||||
EFI_INVALID_PARAMETER - PciHandle not valid
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_LEGACY_8259_END_OF_INTERRUPT) (
|
||||
IN EFI_LEGACY_8259_PROTOCOL * This,
|
||||
IN EFI_8259_IRQ Irq
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Send an EOI to 8259
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
Irq - 8259 IRQ0 - IRQ15
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - EOI successfully sent to 8259
|
||||
EFI_INVALID_PARAMETER - Irq not valid
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
typedef struct _EFI_LEGACY_8259_PROTOCOL {
|
||||
EFI_LEGACY_8259_SET_VECTOR_BASE SetVectorBase;
|
||||
EFI_LEGACY_8259_GET_MASK GetMask;
|
||||
EFI_LEGACY_8259_SET_MASK SetMask;
|
||||
EFI_LEGACY_8259_SET_MODE SetMode;
|
||||
EFI_LEGACY_8259_GET_VECTOR GetVector;
|
||||
EFI_LEGACY_8259_ENABLE_IRQ EnableIrq;
|
||||
EFI_LEGACY_8259_DISABLE_IRQ DisableIrq;
|
||||
EFI_LEGACY_8259_GET_INTERRUPT_LINE GetInterruptLine;
|
||||
EFI_LEGACY_8259_END_OF_INTERRUPT EndOfInterrupt;
|
||||
} EFI_LEGACY_8259_PROTOCOL;
|
||||
|
||||
extern EFI_GUID gEfiLegacy8259ProtocolGuid;
|
||||
|
||||
#endif
|
@@ -0,0 +1,30 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004, 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:
|
||||
|
||||
LegacyBios.c
|
||||
|
||||
Abstract:
|
||||
|
||||
EFI Legacy BIOS Protocol
|
||||
|
||||
Revision History
|
||||
|
||||
--*/
|
||||
|
||||
#include "Tiano.h"
|
||||
|
||||
#include EFI_PROTOCOL_DEFINITION (LegacyBios)
|
||||
|
||||
EFI_GUID gEfiLegacyBiosProtocolGuid = EFI_LEGACY_BIOS_PROTOCOL_GUID;
|
||||
|
||||
EFI_GUID_STRING(&gEfiLegacyBiosProtocolGuid, "Legacy BIOS Protocol", "Legacy BIOS Protocol");
|
@@ -0,0 +1,701 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004 - 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:
|
||||
|
||||
LegacyBios.h
|
||||
|
||||
Abstract:
|
||||
|
||||
The EFI Legacy BIOS Protocol is used to abstract legacy Option ROM usage
|
||||
under EFI and Legacy OS boot.
|
||||
|
||||
Note: The names for EFI_IA32_REGISTER_SET elements were picked to follow
|
||||
well known naming conventions.
|
||||
|
||||
Thunk - A thunk is a transition from one processor mode to another. A Thunk
|
||||
is a transition from native EFI mode to 16-bit mode. A reverse thunk
|
||||
would be a transition from 16-bit mode to native EFI mode.
|
||||
|
||||
|
||||
Note: Note: Note: Note: Note: Note: Note:
|
||||
|
||||
You most likely should not use this protocol! Find the EFI way to solve the
|
||||
problem to make your code portable
|
||||
|
||||
Note: Note: Note: Note: Note: Note: Note:
|
||||
|
||||
Revision History
|
||||
|
||||
The EFI Legacy BIOS Protocol is compliant with CSM spec 0.96.
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _EFI_LEGACY_BIOS_H
|
||||
#define _EFI_LEGACY_BIOS_H
|
||||
|
||||
#define EFI_LEGACY_BIOS_PROTOCOL_GUID \
|
||||
{ \
|
||||
0xdb9a1e3d, 0x45cb, 0x4abb, 0x85, 0x3b, 0xe5, 0x38, 0x7f, 0xdb, 0x2e, 0x2d \
|
||||
}
|
||||
|
||||
EFI_FORWARD_DECLARATION (EFI_LEGACY_BIOS_PROTOCOL);
|
||||
|
||||
//
|
||||
// Convert from 32-bit address (_Adr) to Segment:Offset 16-bit form
|
||||
//
|
||||
#define EFI_SEGMENT(_Adr) (UINT16) ((UINT16) (((UINTN) (_Adr)) >> 4) & 0xf000)
|
||||
#define EFI_OFFSET(_Adr) (UINT16) (((UINT16) ((UINTN) (_Adr))) & 0xffff)
|
||||
#define BYTE_GRANULARITY 0x01
|
||||
#define WORD_GRANULARITY 0x02
|
||||
#define DWORD_GRANULARITY 0x04
|
||||
#define QWORD_GRANULARITY 0x08
|
||||
#define PARAGRAPH_GRANULARITY 0x10
|
||||
|
||||
#define CARRY_FLAG 0x01
|
||||
|
||||
typedef struct {
|
||||
UINT32 CF:1;
|
||||
UINT32 Reserved1:1;
|
||||
UINT32 PF:1;
|
||||
UINT32 Reserved2:1;
|
||||
UINT32 AF:1;
|
||||
UINT32 Reserved3:1;
|
||||
UINT32 ZF:1;
|
||||
UINT32 SF:1;
|
||||
UINT32 TF:1;
|
||||
UINT32 IF:1;
|
||||
UINT32 DF:1;
|
||||
UINT32 OF:1;
|
||||
UINT32 IOPL:2;
|
||||
UINT32 NT:1;
|
||||
UINT32 Reserved4:2;
|
||||
UINT32 VM:1;
|
||||
UINT32 Reserved5:14;
|
||||
} EFI_EFLAGS_REG;
|
||||
|
||||
typedef struct {
|
||||
UINT16 CF : 1;
|
||||
UINT16 Reserved1 : 1;
|
||||
UINT16 PF : 1;
|
||||
UINT16 Reserved2 : 1;
|
||||
UINT16 AF : 1;
|
||||
UINT16 Reserved3 : 1;
|
||||
UINT16 ZF : 1;
|
||||
UINT16 SF : 1;
|
||||
UINT16 TF : 1;
|
||||
UINT16 IF : 1;
|
||||
UINT16 DF : 1;
|
||||
UINT16 OF : 1;
|
||||
UINT16 IOPL : 2;
|
||||
UINT16 NT : 1;
|
||||
UINT16 Reserved4 : 1;
|
||||
} EFI_FLAGS_REG;
|
||||
|
||||
typedef struct {
|
||||
UINT32 EAX;
|
||||
UINT32 EBX;
|
||||
UINT32 ECX;
|
||||
UINT32 EDX;
|
||||
UINT32 ESI;
|
||||
UINT32 EDI;
|
||||
EFI_EFLAGS_REG EFlags;
|
||||
UINT16 ES;
|
||||
UINT16 CS;
|
||||
UINT16 SS;
|
||||
UINT16 DS;
|
||||
UINT16 FS;
|
||||
UINT16 GS;
|
||||
UINT32 EBP;
|
||||
UINT32 ESP;
|
||||
} EFI_DWORD_REGS;
|
||||
|
||||
typedef struct {
|
||||
UINT16 AX;
|
||||
UINT16 ReservedAX;
|
||||
UINT16 BX;
|
||||
UINT16 ReservedBX;
|
||||
UINT16 CX;
|
||||
UINT16 ReservedCX;
|
||||
UINT16 DX;
|
||||
UINT16 ReservedDX;
|
||||
UINT16 SI;
|
||||
UINT16 ReservedSI;
|
||||
UINT16 DI;
|
||||
UINT16 ReservedDI;
|
||||
EFI_FLAGS_REG Flags;
|
||||
UINT16 ReservedFlags;
|
||||
UINT16 ES;
|
||||
UINT16 CS;
|
||||
UINT16 SS;
|
||||
UINT16 DS;
|
||||
UINT16 FS;
|
||||
UINT16 GS;
|
||||
UINT16 BP;
|
||||
UINT16 ReservedBP;
|
||||
UINT16 SP;
|
||||
UINT16 ReservedSP;
|
||||
} EFI_WORD_REGS;
|
||||
|
||||
typedef struct {
|
||||
UINT8 AL;
|
||||
UINT8 AH;
|
||||
UINT16 ReservedAX;
|
||||
UINT8 BL;
|
||||
UINT8 BH;
|
||||
UINT16 ReservedBX;
|
||||
UINT8 CL;
|
||||
UINT8 CH;
|
||||
UINT16 ReservedCX;
|
||||
UINT8 DL;
|
||||
UINT8 DH;
|
||||
UINT16 ReservedDX;
|
||||
} EFI_BYTE_REGS;
|
||||
|
||||
typedef union {
|
||||
EFI_DWORD_REGS E;
|
||||
EFI_WORD_REGS X;
|
||||
EFI_BYTE_REGS H;
|
||||
} EFI_IA32_REGISTER_SET;
|
||||
|
||||
#pragma pack(1)
|
||||
//
|
||||
// $EFI table created by Legacy16 code and consumed by EFI Legacy driver
|
||||
//
|
||||
typedef struct {
|
||||
UINT32 Signature; // "$EFI"
|
||||
UINT8 TableChecksum;
|
||||
UINT8 TableLength;
|
||||
UINT8 EfiMajorRevision;
|
||||
UINT8 EfiMinorRevision;
|
||||
UINT8 TableMajorRevision;
|
||||
UINT8 TableMinorRevision;
|
||||
UINT16 Reserved;
|
||||
UINT16 Compatibility16CallSegment;
|
||||
UINT16 Compatibility16CallOffset;
|
||||
|
||||
UINT16 PnPInstallationCheckSegment;
|
||||
UINT16 PnPInstallationCheckOffset;
|
||||
|
||||
UINT32 EfiSystemTable; // IPF - CSM Integration
|
||||
UINT32 OemIdStringPointer;
|
||||
UINT32 AcpiRsdPtrPointer;
|
||||
UINT16 OemRevision;
|
||||
UINT32 E820Pointer;
|
||||
UINT32 E820Length;
|
||||
UINT32 IrqRoutingTablePointer;
|
||||
UINT32 IrqRoutingTableLength;
|
||||
UINT32 MpTablePtr;
|
||||
UINT32 MpTableLength;
|
||||
UINT16 OemIntSegment;
|
||||
UINT16 OemIntOffset;
|
||||
UINT16 Oem32Segment;
|
||||
UINT16 Oem32Offset;
|
||||
UINT16 Oem16Segment;
|
||||
UINT16 Oem16Offset;
|
||||
UINT16 TpmSegment;
|
||||
UINT16 TpmOffset;
|
||||
UINT32 IbvPointer;
|
||||
UINT32 PciExpressBase;
|
||||
UINT8 LastPciBus;
|
||||
|
||||
} EFI_COMPATIBILITY16_TABLE;
|
||||
//
|
||||
// define maximum number of HDD system supports
|
||||
//
|
||||
#define MAX_HDD_ENTRIES 0x30
|
||||
|
||||
typedef struct {
|
||||
UINT16 Raw[256];
|
||||
} ATAPI_IDENTIFY;
|
||||
|
||||
//
|
||||
// HDD_INFO status
|
||||
//
|
||||
#define HDD_PRIMARY 0x01
|
||||
#define HDD_SECONDARY 0x02
|
||||
#define HDD_MASTER_ATAPI_CDROM 0x04
|
||||
#define HDD_SLAVE_ATAPI_CDROM 0x08
|
||||
#define HDD_MASTER_IDE 0x20
|
||||
#define HDD_SLAVE_IDE 0x40
|
||||
#define HDD_MASTER_ATAPI_ZIPDISK 0x10
|
||||
#define HDD_SLAVE_ATAPI_ZIPDISK 0x80
|
||||
|
||||
typedef struct {
|
||||
UINT16 Status;
|
||||
UINT32 Bus;
|
||||
UINT32 Device;
|
||||
UINT32 Function;
|
||||
UINT16 CommandBaseAddress;
|
||||
UINT16 ControlBaseAddress;
|
||||
UINT16 BusMasterAddress;
|
||||
UINT8 HddIrq;
|
||||
ATAPI_IDENTIFY IdentifyDrive[2];
|
||||
} HDD_INFO;
|
||||
|
||||
//
|
||||
// Parties data structures
|
||||
//
|
||||
typedef struct {
|
||||
UINT8 DirectoryServiceValidity : 1;
|
||||
UINT8 RabcaUsedFlag : 1;
|
||||
UINT8 ExecuteHddDiagnosticsFlag : 1;
|
||||
UINT8 Reserved : 5;
|
||||
} UDC_ATTRIBUTES;
|
||||
|
||||
typedef struct {
|
||||
UDC_ATTRIBUTES Attributes;
|
||||
UINT8 DeviceNumber;
|
||||
UINT8 BbsTableEntryNumberForParentDevice;
|
||||
UINT8 BbsTableEntryNumberForBoot;
|
||||
UINT8 BbsTableEntryNumberForHddDiag;
|
||||
UINT8 BeerData[128];
|
||||
UINT8 ServiceAreaData[64];
|
||||
} UD_TABLE;
|
||||
|
||||
//
|
||||
// define BBS Device Types
|
||||
//
|
||||
#define BBS_FLOPPY 0x01
|
||||
#define BBS_HARDDISK 0x02
|
||||
#define BBS_CDROM 0x03
|
||||
#define BBS_PCMCIA 0x04
|
||||
#define BBS_USB 0x05
|
||||
#define BBS_EMBED_NETWORK 0x06
|
||||
#define BBS_BEV_DEVICE 0x80
|
||||
#define BBS_UNKNOWN 0xff
|
||||
|
||||
typedef struct {
|
||||
UINT16 OldPosition : 4;
|
||||
UINT16 Reserved1 : 4;
|
||||
UINT16 Enabled : 1;
|
||||
UINT16 Failed : 1;
|
||||
UINT16 MediaPresent : 2;
|
||||
UINT16 Reserved2 : 4;
|
||||
} BBS_STATUS_FLAGS;
|
||||
|
||||
#define MAX_BBS_ENTRIES 0x100
|
||||
//
|
||||
// BBS_IGNORE_ENTRY is placed in the BootPriority field if the entry is to
|
||||
// be skipped.
|
||||
// BBS_UNPRIORITIZED_ENTRY is placed in the BootPriority field before
|
||||
// priority has been assigned but indicates valid entry.
|
||||
// BBS_LOWEST_PRIORITY is normally used for removable media with no media
|
||||
// inserted. This allows the 16-bit CSM to allocate a drive letter to
|
||||
// the device.
|
||||
// BBS_DO_NOT_BOOT_FROM is used for devices that the 16-bit CSM is to assign
|
||||
// a drive letter to but never boot from.
|
||||
//
|
||||
// AdditionalIrq??Handler usage is IBV specific. The fields have been added
|
||||
// for:
|
||||
// 1. Saving non-BBS card info about IRQs taken by card.
|
||||
// 2. For BBS compliant cards that hook IRQs in order to have their SETUP
|
||||
// executed.
|
||||
//
|
||||
#define BBS_DO_NOT_BOOT_FROM 0xFFFC
|
||||
#define BBS_LOWEST_PRIORITY 0xFFFD
|
||||
#define BBS_UNPRIORITIZED_ENTRY 0xFFFE
|
||||
#define BBS_IGNORE_ENTRY 0xFFFF
|
||||
|
||||
typedef struct {
|
||||
UINT16 BootPriority;
|
||||
UINT32 Bus;
|
||||
UINT32 Device;
|
||||
UINT32 Function;
|
||||
UINT8 Class;
|
||||
UINT8 SubClass;
|
||||
UINT16 MfgStringOffset;
|
||||
UINT16 MfgStringSegment;
|
||||
UINT16 DeviceType;
|
||||
BBS_STATUS_FLAGS StatusFlags;
|
||||
UINT16 BootHandlerOffset;
|
||||
UINT16 BootHandlerSegment;
|
||||
UINT16 DescStringOffset;
|
||||
UINT16 DescStringSegment;
|
||||
UINT32 InitPerReserved;
|
||||
UINT32 AdditionalIrq13Handler;
|
||||
UINT32 AdditionalIrq18Handler;
|
||||
UINT32 AdditionalIrq19Handler;
|
||||
UINT32 AdditionalIrq40Handler;
|
||||
UINT8 AssignedDriveNumber;
|
||||
UINT32 AdditionalIrq41Handler;
|
||||
UINT32 AdditionalIrq46Handler;
|
||||
UINT32 IBV1;
|
||||
UINT32 IBV2;
|
||||
} BBS_TABLE;
|
||||
|
||||
#pragma pack()
|
||||
|
||||
typedef
|
||||
BOOLEAN
|
||||
(EFIAPI *EFI_LEGACY_BIOS_INT86) (
|
||||
IN EFI_LEGACY_BIOS_PROTOCOL * This,
|
||||
IN UINT8 BiosInt,
|
||||
IN OUT EFI_IA32_REGISTER_SET * Regs
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Thunk to 16-bit real mode and execute a software interrupt with a vector
|
||||
of BiosInt. Regs will contain the 16-bit register context on entry and
|
||||
exit.
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
BiosInt - Processor interrupt vector to invoke
|
||||
Reg - Register contexted passed into (and returned) from thunk to
|
||||
16-bit mode
|
||||
|
||||
Returns:
|
||||
FALSE - Thunk completed, and there were no BIOS errors in the target code.
|
||||
See Regs for status.
|
||||
TRUE - There was a BIOS erro in the target code.
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
typedef
|
||||
BOOLEAN
|
||||
(EFIAPI *EFI_LEGACY_BIOS_FARCALL86) (
|
||||
IN EFI_LEGACY_BIOS_PROTOCOL * This,
|
||||
IN UINT16 Segment,
|
||||
IN UINT16 Offset,
|
||||
IN EFI_IA32_REGISTER_SET * Regs,
|
||||
IN VOID *Stack,
|
||||
IN UINTN StackSize
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Thunk to 16-bit real mode and call Segment:Offset. Regs will contain the
|
||||
16-bit register context on entry and exit. Arguments can be passed on
|
||||
the Stack argument
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
Segment - Segemnt of 16-bit mode call
|
||||
Offset - Offset of 16-bit mdoe call
|
||||
Reg - Register contexted passed into (and returned) from thunk to
|
||||
16-bit mode
|
||||
Stack - Caller allocated stack used to pass arguments
|
||||
StackSize - Size of Stack in bytes
|
||||
|
||||
Returns:
|
||||
FALSE - Thunk completed, and there were no BIOS errors in the target code.
|
||||
See Regs for status.
|
||||
TRUE - There was a BIOS erro in the target code.
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_LEGACY_BIOS_CHECK_ROM) (
|
||||
IN EFI_LEGACY_BIOS_PROTOCOL * This,
|
||||
IN EFI_HANDLE PciHandle,
|
||||
OUT VOID **RomImage, OPTIONAL
|
||||
OUT UINTN *RomSize, OPTIONAL
|
||||
OUT UINTN *Flags
|
||||
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Test to see if a legacy PCI ROM exists for this device. Optionally return
|
||||
the Legacy ROM instance for this PCI device.
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
PciHandle - The PCI PC-AT OPROM from this devices ROM BAR will be loaded
|
||||
RomImage - Return the legacy PCI ROM for this device
|
||||
RomSize - Size of ROM Image
|
||||
Flags - Indicates if ROM found and if PC-AT.
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - Legacy Option ROM availible for this device
|
||||
EFI_UNSUPPORTED - Legacy Option ROM not supported.
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_LEGACY_BIOS_INSTALL_ROM) (
|
||||
IN EFI_LEGACY_BIOS_PROTOCOL * This,
|
||||
IN EFI_HANDLE PciHandle,
|
||||
IN VOID **RomImage,
|
||||
OUT UINTN *Flags,
|
||||
OUT UINT8 *DiskStart, OPTIONAL
|
||||
OUT UINT8 *DiskEnd, OPTIONAL
|
||||
OUT VOID **RomShadowAddress, OPTIONAL
|
||||
OUT UINT32 *ShadowedRomSize OPTIONAL
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Load a legacy PC-AT OPROM on the PciHandle device. Return information
|
||||
about how many disks were added by the OPROM and the shadow address and
|
||||
size. DiskStart & DiskEnd are INT 13h drive letters. Thus 0x80 is C:
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
PciHandle - The PCI PC-AT OPROM from this devices ROM BAR will be loaded.
|
||||
This value is NULL if RomImage is non-NULL. This is the normal
|
||||
case.
|
||||
RomImage - A PCI PC-AT ROM image. This argument is non-NULL if there is
|
||||
no hardware associated with the ROM and thus no PciHandle,
|
||||
otherwise is must be NULL.
|
||||
Example is PXE base code.
|
||||
Flags - Return Status if ROM was found and if was Legacy OPROM.
|
||||
DiskStart - Disk number of first device hooked by the ROM. If DiskStart
|
||||
is the same as DiskEnd no disked were hooked.
|
||||
DiskEnd - Disk number of the last device hooked by the ROM.
|
||||
RomShadowAddress - Shadow address of PC-AT ROM
|
||||
RomShadowSize - Size of RomShadowAddress in bytes
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - Thunk completed, see Regs for status.
|
||||
EFI_INVALID_PARAMETER - PciHandle not found
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_LEGACY_BIOS_BOOT) (
|
||||
IN EFI_LEGACY_BIOS_PROTOCOL * This,
|
||||
IN BBS_BBS_DEVICE_PATH * BootOption,
|
||||
IN UINT32 LoadOptionsSize,
|
||||
IN VOID *LoadOptions
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Attempt to legacy boot the BootOption. If the EFI contexted has been
|
||||
compromised this function will not return.
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
BootOption - EFI Device Path from BootXXXX variable.
|
||||
LoadOptionSize - Size of LoadOption in size.
|
||||
LoadOption - LoadOption from BootXXXX variable
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - Removable media not present
|
||||
|
||||
--*/
|
||||
;
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_LEGACY_BIOS_UPDATE_KEYBOARD_LED_STATUS) (
|
||||
IN EFI_LEGACY_BIOS_PROTOCOL * This,
|
||||
IN UINT8 Leds
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Update BDA with current Scroll, Num & Cap lock LEDS
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
Leds - Status of current Scroll, Num & Cap lock LEDS
|
||||
Bit 0 is Scroll Lock 0 = Not locked
|
||||
Bit 1 is Num Lock
|
||||
Bit 2 is Caps Lock
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - Removable media not present
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_LEGACY_BIOS_GET_BBS_INFO) (
|
||||
IN EFI_LEGACY_BIOS_PROTOCOL * This,
|
||||
OUT UINT16 *HddCount,
|
||||
OUT HDD_INFO **HddInfo,
|
||||
OUT UINT16 *BbsCount,
|
||||
IN OUT BBS_TABLE **BbsTable
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Retrieve legacy BBS info and assign boot priority.
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
HddCount - Number of HDD_INFO structures
|
||||
HddInfo - Onboard IDE controller information
|
||||
BbsCount - Number of BBS_TABLE structures
|
||||
BbsTable - List BBS entries
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - Tables returned
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_LEGACY_BIOS_PREPARE_TO_BOOT_EFI) (
|
||||
IN EFI_LEGACY_BIOS_PROTOCOL * This,
|
||||
OUT UINT16 *BbsCount,
|
||||
OUT BBS_TABLE **BbsTable
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Assign drive number to legacy HDD drives prior to booting an EFI
|
||||
aware OS so the OS can access drives without an EFI driver.
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
BbsCount - Number of BBS_TABLE structures
|
||||
BbsTable - List BBS entries
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - Drive numbers assigned
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_LEGACY_BIOS_BOOT_UNCONVENTIONAL_DEVICE) (
|
||||
IN EFI_LEGACY_BIOS_PROTOCOL * This,
|
||||
IN UDC_ATTRIBUTES Attributes,
|
||||
IN UINTN BbsEntry,
|
||||
IN VOID *BeerData,
|
||||
IN VOID *ServiceAreaData
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
To boot from an unconventional device like parties and/or execute
|
||||
HDD diagnostics.
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
Attributes - How to interpret the other input parameters
|
||||
BbsEntry - The 0-based index into the BbsTable for the parent
|
||||
device.
|
||||
BeerData - Pointer to the 128 bytes of ram BEER data.
|
||||
ServiceAreaData - Pointer to the 64 bytes of raw Service Area data. The
|
||||
caller must provide a pointer to the specific Service
|
||||
Area and not the start all Service Areas.
|
||||
Returns:
|
||||
EFI_INVALID_PARAMETER if error. Does NOT return if no error.
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_LEGACY_BIOS_SHADOW_ALL_LEGACY_OPROMS) (
|
||||
IN EFI_LEGACY_BIOS_PROTOCOL * This
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Shadow all legacy16 OPROMs that haven't been shadowed.
|
||||
Warning: Use this with caution. This routine disconnects all EFI
|
||||
drivers. If used externally then caller must re-connect EFI
|
||||
drivers.
|
||||
Arguments:
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - OPROMs shadowed
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_LEGACY_BIOS_GET_LEGACY_REGION) (
|
||||
IN EFI_LEGACY_BIOS_PROTOCOL * This,
|
||||
IN UINTN LegacyMemorySize,
|
||||
IN UINTN Region,
|
||||
IN UINTN Alignment,
|
||||
OUT VOID **LegacyMemoryAddress
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Get a region from the LegacyBios for S3 usage.
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
LegacyMemorySize - Size of required region
|
||||
Region - Region to use.
|
||||
00 = Either 0xE0000 or 0xF0000 block
|
||||
Bit0 = 1 0xF0000 block
|
||||
Bit1 = 1 0xE0000 block
|
||||
Alignment - Address alignment. Bit mapped. First non-zero
|
||||
bit from right is alignment.
|
||||
LegacyMemoryAddress - Region Assigned
|
||||
|
||||
Returns:
|
||||
|
||||
EFI_SUCCESS - Region assigned
|
||||
|
||||
Other - Region not assigned
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_LEGACY_BIOS_COPY_LEGACY_REGION) (
|
||||
IN EFI_LEGACY_BIOS_PROTOCOL * This,
|
||||
IN UINTN LegacyMemorySize,
|
||||
IN VOID *LegacyMemoryAddress,
|
||||
IN VOID *LegacyMemorySourceAddress
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Get a region from the LegacyBios for Tiano usage. Can only be invoked once.
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
LegacyMemorySize - Size of data to copy
|
||||
LegacyMemoryAddress - Legacy Region destination address
|
||||
Note: must be in region assigned by
|
||||
LegacyBiosGetLegacyRegion
|
||||
LegacyMemorySourceAddress - Source of data
|
||||
|
||||
Returns:
|
||||
|
||||
EFI_SUCCESS - Region assigned
|
||||
EFI_ACCESS_DENIED - Destination outside assigned region
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
typedef struct _EFI_LEGACY_BIOS_PROTOCOL {
|
||||
EFI_LEGACY_BIOS_INT86 Int86;
|
||||
EFI_LEGACY_BIOS_FARCALL86 FarCall86;
|
||||
EFI_LEGACY_BIOS_CHECK_ROM CheckPciRom;
|
||||
EFI_LEGACY_BIOS_INSTALL_ROM InstallPciRom;
|
||||
EFI_LEGACY_BIOS_BOOT LegacyBoot;
|
||||
EFI_LEGACY_BIOS_UPDATE_KEYBOARD_LED_STATUS UpdateKeyboardLedStatus;
|
||||
EFI_LEGACY_BIOS_GET_BBS_INFO GetBbsInfo;
|
||||
EFI_LEGACY_BIOS_SHADOW_ALL_LEGACY_OPROMS ShadowAllLegacyOproms;
|
||||
EFI_LEGACY_BIOS_PREPARE_TO_BOOT_EFI PrepareToBootEfi;
|
||||
EFI_LEGACY_BIOS_GET_LEGACY_REGION GetLegacyRegion;
|
||||
EFI_LEGACY_BIOS_COPY_LEGACY_REGION CopyLegacyRegion;
|
||||
EFI_LEGACY_BIOS_BOOT_UNCONVENTIONAL_DEVICE BootUnconventionalDevice;
|
||||
} EFI_LEGACY_BIOS_PROTOCOL;
|
||||
|
||||
extern EFI_GUID gEfiLegacyBiosProtocolGuid;
|
||||
|
||||
#endif
|
@@ -0,0 +1,31 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 1999 - 2002, 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:
|
||||
|
||||
LegacyBiosPlatform.c
|
||||
|
||||
Abstract:
|
||||
|
||||
EFI Legacy BIOS Platform Protocol
|
||||
|
||||
Revision History
|
||||
|
||||
--*/
|
||||
|
||||
#include "Tiano.h"
|
||||
|
||||
#include EFI_PROTOCOL_DEFINITION (LegacyBiosPlatform)
|
||||
|
||||
EFI_GUID gEfiLegacyBiosPlatformProtocolGuid = EFI_LEGACY_BIOS_PLATFORM_PROTOCOL_GUID;
|
||||
|
||||
EFI_GUID_STRING(&gEfiLegacyBiosPlatformProtocolGuid, "Legacy BIOS Platform Protocol", "Legacy BIOS Platform Protocol");
|
@@ -0,0 +1,328 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 1999 - 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:
|
||||
|
||||
LegacyBiosPlatform.h
|
||||
|
||||
Abstract:
|
||||
|
||||
The EFI Legacy BIOS Patform Protocol is used to mate a Legacy16
|
||||
implementation with this EFI code. The EFI driver that produces
|
||||
the Legacy BIOS protocol is generic and consumes this protocol.
|
||||
A driver that matches the Legacy16 produces this protocol
|
||||
|
||||
Revision History
|
||||
|
||||
The EFI Legacy BIOS Platform Protocol is compliant with CSM spec 0.96.
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _EFI_LEGACY_BIOS_PLATFORM_H
|
||||
#define _EFI_LEGACY_BIOS_PLATFORM_H
|
||||
|
||||
#define EFI_LEGACY_BIOS_PLATFORM_PROTOCOL_GUID \
|
||||
{ \
|
||||
0x783658a3, 0x4172, 0x4421, 0xa2, 0x99, 0xe0, 0x9, 0x7, 0x9c, 0xc, 0xb4 \
|
||||
}
|
||||
|
||||
EFI_FORWARD_DECLARATION (EFI_LEGACY_BIOS_PLATFORM_PROTOCOL);
|
||||
|
||||
#include "Tiano.h"
|
||||
#include EFI_PROTOCOL_DEFINITION (LegacyBios)
|
||||
|
||||
#pragma pack(1)
|
||||
//
|
||||
// Define structures for GetOemIntData
|
||||
// Note:
|
||||
// OemIntDataElenent is an array of structures from 0 to Count-1.
|
||||
// RawData is an array of bytes from 0 to RamDataLength-1.
|
||||
//
|
||||
typedef struct {
|
||||
UINT16 Int;
|
||||
UINT16 Ax;
|
||||
UINT32 RawDataLength;
|
||||
UINT8 RawData[1];
|
||||
} EFI_OEM_INT_DATA_ELEMENT;
|
||||
|
||||
typedef struct {
|
||||
UINT16 Count;
|
||||
EFI_OEM_INT_DATA_ELEMENT OemIntDataElement[1];
|
||||
} EFI_OEM_INT_DATA;
|
||||
#pragma pack()
|
||||
|
||||
typedef enum {
|
||||
EfiGetPlatformBinaryMpTable = 0,
|
||||
EfiGetPlatformBinaryOemIntData = 1,
|
||||
EfiGetPlatformBinaryOem16Data = 2,
|
||||
EfiGetPlatformBinaryOem32Data = 3,
|
||||
EfiGetPlatformBinaryTpmBinary = 4,
|
||||
EfiGetPlatformBinarySystemRom = 5,
|
||||
EfiGetPlatformPciExpressBase = 6,
|
||||
EfiGetPlatformPmmSize = 7,
|
||||
EfiGetPlatformEndOfOpromShadowAddr = 8
|
||||
} EFI_GET_PLATFORM_INFO_MODE;
|
||||
|
||||
typedef enum {
|
||||
EfiGetPlatformVgaHandle = 0,
|
||||
EfiGetPlatformIdeHandle = 1,
|
||||
EfiGetPlatformIsaBusHandle = 2,
|
||||
EfiGetPlatformUsbHandle = 3
|
||||
} EFI_GET_PLATFORM_HANDLE_MODE;
|
||||
|
||||
typedef enum {
|
||||
EfiPlatformHookPrepareToScanRom = 0,
|
||||
EfiPlatformHookShadowServiceRoms= 1,
|
||||
EfiPlatformHookAfterRomInit = 2
|
||||
} EFI_GET_PLATFORM_HOOK_MODE;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_GET_PLATFORM_INFO) (
|
||||
IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL * This,
|
||||
IN EFI_GET_PLATFORM_INFO_MODE Mode,
|
||||
OUT VOID **Table,
|
||||
OUT UINTN *TableSize,
|
||||
OUT UINTN *Location,
|
||||
OUT UINTN *Alignment,
|
||||
IN UINT16 LegacySegment,
|
||||
IN UINT16 LegacyOffset
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Return a System ROM image for the platform
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
Mode - Specifies what data to return
|
||||
Table - Pointer to MP table.
|
||||
TableSize - Size in bytes of table.
|
||||
Location - Legacy region requested
|
||||
0x00 = Any location
|
||||
Bit 0 = 0xF0000 region
|
||||
Bit 1 = 0xE0000 region
|
||||
Multiple bits can be set
|
||||
Alignment - Address alignment for allocation.
|
||||
Bit mapped. First non-zero bit from right
|
||||
is alignment.
|
||||
|
||||
LegacySegment - Segment in LegacyBios where Table is stored
|
||||
LegacyOffset - Offset in LegacyBios where Table is stored
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - Data was returned successfully.
|
||||
EFI_UNSUPPORTED - Mode is not supported on the platform.
|
||||
EFI_NOT_FOUND - Binary image or table not found.
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_GET_PLATFORM_HANDLE) (
|
||||
IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL * This,
|
||||
IN EFI_GET_PLATFORM_HANDLE_MODE Mode,
|
||||
IN UINT16 Type,
|
||||
OUT EFI_HANDLE **HandleBuffer,
|
||||
OUT UINTN *HandleCount,
|
||||
IN VOID **AdditionalData OPTIONAL
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Return the Legacy16 policy for which device should be the VGA controller
|
||||
used during a Legacy16 boot.
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
Mode - Specifies what handle to return.
|
||||
Type - Type from Device Path for Handle to represent.
|
||||
HandleBuffer - Handles of the device/controller in priority order
|
||||
with HandleBuffer[0] highest priority.
|
||||
HandleCount - Number of handles in the buffer.
|
||||
AdditionalData - Mode specific.
|
||||
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - Handle is valid
|
||||
EFI_UNSUPPORTED - Mode is not supported on the platform.
|
||||
EFI_NOT_FOUND - Handle is not known
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_SMM_INIT) (
|
||||
IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL * This,
|
||||
IN VOID *EfiToLegacy16BootTable
|
||||
);
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Load and initialize the Legacy BIOS SMM handler.
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
EfiToLegacy16BootTable - Pointer to Legacy16 boot table.
|
||||
Returns:
|
||||
EFI_SUCCESS - SMM code loaded.
|
||||
EFI_DEVICE_ERROR - SMM code failed to load
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_HOOKS) (
|
||||
IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL * This,
|
||||
IN EFI_GET_PLATFORM_HOOK_MODE Mode,
|
||||
IN UINT16 Type,
|
||||
IN EFI_HANDLE DeviceHandle,
|
||||
IN OUT UINTN *ShadowAddress,
|
||||
IN EFI_COMPATIBILITY16_TABLE * Compatibility16Table,
|
||||
IN VOID **AdditionalData OPTIONAL
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Prepare to scan a ROM.
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
Handle - Device handle
|
||||
ShadowAddress - Address that ROM is shadowed at prior to
|
||||
initialization or first free ROM address,
|
||||
depending upon mode.
|
||||
Compatibility16Table - Pointer to Compatibility16Table.
|
||||
AdditionalData - Mode specific.
|
||||
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - RomImage is valid
|
||||
EFI_UNSUPPORTED - Mode is not supported on the platform or platform
|
||||
policy is to not install this OPROM.
|
||||
--*/
|
||||
;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_GET_ROUTING_TABLE) (
|
||||
IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL * This,
|
||||
OUT VOID **RoutingTable,
|
||||
OUT UINTN *RoutingTableEntries,
|
||||
OUT VOID **LocalPirqTable, OPTIONAL
|
||||
OUT UINTN *PirqTableSize, OPTIONAL
|
||||
OUT VOID **LocalIrqPriorityTable, OPTIONAL
|
||||
OUT UINTN *IrqPriorityTableEntries OPTIONAL
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
1. List of IRQ routing entries and number of entries.
|
||||
2. Pointer to Entire $PIR table and length.
|
||||
3. List of IRQs to assign to PCI in priority.
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
RoutingTable - Pointer to PCI IRQ Routing table.
|
||||
RoutingTableEntries - Number of entries in table.
|
||||
LocalPirqTable - $PIR table
|
||||
PirqTableSize - $PIR table size
|
||||
LocalIrqPriorityTable - List of interrupts in priority order to assign
|
||||
IrqPriorityTableEntries- Number of entries in priority table
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - Table pointer returned
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_TRANSLATE_PIRQ) (
|
||||
IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL * This,
|
||||
IN UINTN PciBus,
|
||||
IN UINTN PciDevice,
|
||||
IN UINTN PciFunction,
|
||||
IN OUT UINT8 *Pirq,
|
||||
OUT UINT8 *PciIrq
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Translate the PIRQ reported by the PCI device into the true PIRQ
|
||||
from the internal IRQ routing information and IRQ assigned or to be
|
||||
assigned to device.
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
Base as defined below is the bus,device, function in
|
||||
IRQ routing table.
|
||||
PciBus - Base Bus for this device.
|
||||
PciDevice - Base Device for this device.
|
||||
PciFunction - Base Function for this device.
|
||||
Pirq - Input is PIRQ reported by device, output is true PIRQ.
|
||||
PciIrq - The IRQ already assigned to the PIRQ or the IRQ to be
|
||||
assigned to the PIRQ.
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - Irq translated
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_PREPARE_TO_BOOT) (
|
||||
IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL * This,
|
||||
IN BBS_BBS_DEVICE_PATH * BbsDevicePath,
|
||||
IN VOID *BbsTable,
|
||||
IN UINT32 LoadOptionsSize,
|
||||
IN VOID *LoadOptions,
|
||||
IN VOID *EfiToLegacy16BootTable
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Attempt to legacy boot the BootOption. If the EFI contexted has been
|
||||
compromised this function will not return.
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
BbsDevicePath - EFI Device Path from BootXXXX variable.
|
||||
BbsTable - Internal BBS table.
|
||||
LoadOptionSize - Size of LoadOption in size.
|
||||
LoadOption - LoadOption from BootXXXX variable
|
||||
EfiToLegacy16BootTable - Pointer to BootTable structure
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - Removable media not present
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
typedef struct _EFI_LEGACY_BIOS_PLATFORM_PROTOCOL {
|
||||
EFI_LEGACY_BIOS_PLATFORM_GET_PLATFORM_INFO GetPlatformInfo;
|
||||
EFI_LEGACY_BIOS_PLATFORM_GET_PLATFORM_HANDLE GetPlatformHandle;
|
||||
EFI_LEGACY_BIOS_PLATFORM_SMM_INIT SmmInit;
|
||||
EFI_LEGACY_BIOS_PLATFORM_HOOKS PlatformHooks;
|
||||
EFI_LEGACY_BIOS_PLATFORM_GET_ROUTING_TABLE GetRoutingTable;
|
||||
EFI_LEGACY_BIOS_PLATFORM_TRANSLATE_PIRQ TranslatePirq;
|
||||
EFI_LEGACY_BIOS_PLATFORM_PREPARE_TO_BOOT PrepareToBoot;
|
||||
} EFI_LEGACY_BIOS_PLATFORM_PROTOCOL;
|
||||
|
||||
extern EFI_GUID gEfiLegacyBiosPlatformProtocolGuid;
|
||||
|
||||
#endif
|
@@ -0,0 +1,31 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 1999 - 2002, 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:
|
||||
|
||||
LegacyInterrupt.c
|
||||
|
||||
Abstract:
|
||||
|
||||
EFI Legacy InterruptProtocol
|
||||
|
||||
Revision History
|
||||
|
||||
--*/
|
||||
|
||||
#include "Tiano.h"
|
||||
|
||||
#include EFI_PROTOCOL_DEFINITION (LegacyInterrupt)
|
||||
|
||||
EFI_GUID gEfiLegacyInterruptProtocolGuid = EFI_LEGACY_INTERRUPT_PROTOCOL_GUID;
|
||||
|
||||
EFI_GUID_STRING(&gEfiLegacyInterruptProtocolGuid, "Legacy Interrupt Protocol", "Legacy Interrupt Protocol");
|
@@ -0,0 +1,136 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 1999 - 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:
|
||||
|
||||
LegacyInterrupt.h
|
||||
|
||||
Abstract:
|
||||
|
||||
This protocol manages the PIRQ for PCI devices
|
||||
|
||||
Revision History
|
||||
|
||||
The EFI Legacy Interrupt Protocol is compliant with CSM spec 0.96.
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _EFI_LEGACY_INTERRUPT_H_
|
||||
#define _EFI_LEGACY_INTERRUPT_H_
|
||||
|
||||
#define EFI_LEGACY_INTERRUPT_PROTOCOL_GUID \
|
||||
{ \
|
||||
0x31ce593d, 0x108a, 0x485d, 0xad, 0xb2, 0x78, 0xf2, 0x1f, 0x29, 0x66, 0xbe \
|
||||
}
|
||||
|
||||
EFI_FORWARD_DECLARATION (EFI_LEGACY_INTERRUPT_PROTOCOL);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_LEGACY_INTERRUPT_GET_NUMBER_PIRQS) (
|
||||
IN EFI_LEGACY_INTERRUPT_PROTOCOL * This,
|
||||
OUT UINT8 *NumberPirqs
|
||||
);
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Return the number of PIRQs this hardware supports.
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
NumberPirsq - Number of PIRQs.
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - Number of PIRQs returned.
|
||||
|
||||
--*/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_LEGACY_INTERRUPT_GET_LOCATION) (
|
||||
IN EFI_LEGACY_INTERRUPT_PROTOCOL * This,
|
||||
OUT UINT8 *Bus,
|
||||
OUT UINT8 *Device,
|
||||
OUT UINT8 *Function
|
||||
);
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Return PCI location of this device. $PIR table requires this info.
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
Bus - PCI Bus
|
||||
Device - PCI Device
|
||||
Function - PCI Function
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - Bus/Device/Function returned
|
||||
|
||||
--*/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_LEGACY_INTERRUPT_READ_PIRQ) (
|
||||
IN EFI_LEGACY_INTERRUPT_PROTOCOL * This,
|
||||
IN UINT8 PirqNumber,
|
||||
OUT UINT8 *PirqData
|
||||
);
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Read the PIRQ register and return the data
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
PirqNumber - PIRQ register to read
|
||||
PirqData - Data read
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - Data was read
|
||||
EFI_INVALID_PARAMETER - Invalid PIRQ number
|
||||
|
||||
--*/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_LEGACY_INTERRUPT_WRITE_PIRQ) (
|
||||
IN EFI_LEGACY_INTERRUPT_PROTOCOL * This,
|
||||
IN UINT8 PirqNumber,
|
||||
IN UINT8 PirqData
|
||||
);
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Write the specified PIRQ register with the given data.
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
PirqNumber - PIRQ register to read.
|
||||
PirqData - Data written.
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - Table pointer returned
|
||||
EFI_INVALID_PARAMETER - Invalid PIRQ number
|
||||
|
||||
--*/
|
||||
typedef struct _EFI_LEGACY_INTERRUPT_PROTOCOL {
|
||||
EFI_LEGACY_INTERRUPT_GET_NUMBER_PIRQS GetNumberPirqs;
|
||||
EFI_LEGACY_INTERRUPT_GET_LOCATION GetLocation;
|
||||
EFI_LEGACY_INTERRUPT_READ_PIRQ ReadPirq;
|
||||
EFI_LEGACY_INTERRUPT_WRITE_PIRQ WritePirq;
|
||||
} EFI_LEGACY_INTERRUPT_PROTOCOL;
|
||||
|
||||
extern EFI_GUID gEfiLegacyInterruptProtocolGuid;
|
||||
|
||||
#endif
|
@@ -0,0 +1,31 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 1999 - 2002, 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:
|
||||
|
||||
LegacyRegion.c
|
||||
|
||||
Abstract:
|
||||
|
||||
EFI Legacy Region Protocol
|
||||
|
||||
Revision History
|
||||
|
||||
--*/
|
||||
|
||||
#include "Tiano.h"
|
||||
|
||||
#include EFI_PROTOCOL_DEFINITION (LegacyRegion)
|
||||
|
||||
EFI_GUID gEfiLegacyRegionProtocolGuid = EFI_LEGACY_REGION_PROTOCOL_GUID;
|
||||
|
||||
EFI_GUID_STRING(&gEfiLegacyRegionProtocolGuid, "Legacy Region Protocol", "Legacy Region Protocol");
|
@@ -0,0 +1,82 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 1999 - 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:
|
||||
|
||||
LegacyRegion.h
|
||||
|
||||
Abstract:
|
||||
|
||||
This protocol manages the legacy memory regions between 0xc0000 - 0xfffff
|
||||
|
||||
Revision History
|
||||
|
||||
The EFI Legacy Region Protocol is compliant with CSM spec 0.96.
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _EFI_LEGACY_REGION_H_
|
||||
#define _EFI_LEGACY_REGION_H_
|
||||
|
||||
#define EFI_LEGACY_REGION_PROTOCOL_GUID \
|
||||
{ \
|
||||
0xfc9013a, 0x568, 0x4ba9, 0x9b, 0x7e, 0xc9, 0xc3, 0x90, 0xa6, 0x60, 0x9b \
|
||||
}
|
||||
|
||||
EFI_FORWARD_DECLARATION (EFI_LEGACY_REGION_PROTOCOL);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_LEGACY_REGION_DECODE) (
|
||||
IN EFI_LEGACY_REGION_PROTOCOL * This,
|
||||
IN UINT32 Start,
|
||||
IN UINT32 Length,
|
||||
IN BOOLEAN *On
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_LEGACY_REGION_LOCK) (
|
||||
IN EFI_LEGACY_REGION_PROTOCOL * This,
|
||||
IN UINT32 Start,
|
||||
IN UINT32 Length,
|
||||
OUT UINT32 *Granularity OPTIONAL
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_LEGACY_REGION_BOOT_LOCK) (
|
||||
IN EFI_LEGACY_REGION_PROTOCOL * This,
|
||||
IN UINT32 Start,
|
||||
IN UINT32 Length,
|
||||
OUT UINT32 *Granularity OPTIONAL
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_LEGACY_REGION_UNLOCK) (
|
||||
IN EFI_LEGACY_REGION_PROTOCOL * This,
|
||||
IN UINT32 Start,
|
||||
IN UINT32 Length,
|
||||
OUT UINT32 *Granularity OPTIONAL
|
||||
);
|
||||
|
||||
typedef struct _EFI_LEGACY_REGION_PROTOCOL {
|
||||
EFI_LEGACY_REGION_DECODE Decode;
|
||||
EFI_LEGACY_REGION_LOCK Lock;
|
||||
EFI_LEGACY_REGION_BOOT_LOCK BootLock;
|
||||
EFI_LEGACY_REGION_UNLOCK UnLock;
|
||||
} EFI_LEGACY_REGION_PROTOCOL;
|
||||
|
||||
extern EFI_GUID gEfiLegacyRegionProtocolGuid;
|
||||
|
||||
#endif
|
@@ -0,0 +1,31 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004, 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:
|
||||
|
||||
PciHostBridgeResourceAllocation.c
|
||||
|
||||
Abstract:
|
||||
|
||||
|
||||
--*/
|
||||
|
||||
#include "Tiano.h"
|
||||
|
||||
#include EFI_PROTOCOL_DEFINITION (PciHostBridgeResourceAllocation)
|
||||
|
||||
EFI_GUID gEfiPciHostBridgeResourceAllocationProtocolGuid = EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_GUID;
|
||||
|
||||
EFI_GUID_STRING
|
||||
(
|
||||
&gEfiPciHostBridgeResourceAllocationProtocolGuid, "PciHostBridgeRresourceAllocation Protocol",
|
||||
"Pci Host Bridge Resource Allocation Protocol"
|
||||
);
|
@@ -0,0 +1,364 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004, 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:
|
||||
|
||||
PciHostBridgeResourceAllocation.h
|
||||
|
||||
Abstract:
|
||||
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_H_
|
||||
#define _PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_H_
|
||||
|
||||
#include "Tiano.h"
|
||||
#include EFI_PROTOCOL_DEFINITION(PciRootBridgeIo)
|
||||
|
||||
|
||||
#define EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_GUID \
|
||||
{ 0xCF8034BE,0x6768,0x4d8b,0xB7,0x39,0x7C,0xCE,0x68,0x3A,0x9F,0xBE }
|
||||
|
||||
|
||||
EFI_FORWARD_DECLARATION (EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL);
|
||||
|
||||
|
||||
//
|
||||
// EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ATTRIBUTES
|
||||
//
|
||||
|
||||
// If this bit is set, then the PCI Root Bridge does not
|
||||
// support separate windows for Non-prefetchable and Prefetchable
|
||||
// memory. A PCI bus driver needs to include requests for Prefetchable
|
||||
// memory in the Non-prefetchable memory pool.
|
||||
//
|
||||
#define EFI_PCI_HOST_BRIDGE_COMBINE_MEM_PMEM 1
|
||||
|
||||
//
|
||||
// If this bit is set, then the PCI Root Bridge supports
|
||||
// 64 bit memory windows. If this bit is not set,
|
||||
// the PCI bus driver needs to include requests for 64 bit
|
||||
// memory address in the corresponding 32 bit memory pool.
|
||||
//
|
||||
#define EFI_PCI_HOST_BRIDGE_MEM64_DECODE 2
|
||||
|
||||
|
||||
//
|
||||
// EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PHASE
|
||||
//
|
||||
typedef enum {
|
||||
EfiPciHostBridgeBeginEnumeration,
|
||||
EfiPciHostBridgeBeginBusAllocation,
|
||||
EfiPciHostBridgeEndBusAllocation,
|
||||
EfiPciHostBridgeBeginResourceAllocation,
|
||||
EfiPciHostBridgeAllocateResources,
|
||||
EfiPciHostBridgeSetResources,
|
||||
EfiPciHostBridgeFreeResources,
|
||||
EfiPciHostBridgeEndResourceAllocation
|
||||
} EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PHASE;
|
||||
|
||||
//
|
||||
// EfiPciHostBridgeBeginEnumeration
|
||||
// Reset the host bridge PCI apertures and internal data structures.
|
||||
// PCI enumerator should issue this notification before starting fresh
|
||||
// enumeration process. Enumeration cannot be restarted after sending
|
||||
// any other notification such as EfiPciHostBridgeBeginBusAllocation.
|
||||
//
|
||||
// EfiPciHostBridgeBeginBusAllocation
|
||||
// The bus allocation phase is about to begin. No specific action
|
||||
// is required here. This notification can be used to perform any
|
||||
// chipset specific programming.
|
||||
//
|
||||
// EfiPciHostBridgeEndBusAllocation
|
||||
// The bus allocation and bus programming phase is complete. No specific
|
||||
// action is required here. This notification can be used to perform any
|
||||
// chipset specific programming.
|
||||
//
|
||||
// EfiPciHostBridgeBeginResourceAllocation
|
||||
// The resource allocation phase is about to begin.No specific action is
|
||||
// required here. This notification can be used to perform any chipset specific programming.
|
||||
//
|
||||
// EfiPciHostBridgeAllocateResources
|
||||
// Allocate resources per previously submitted requests for all the PCI Root
|
||||
// Bridges. These resource settings are returned on the next call to
|
||||
// GetProposedResources().
|
||||
//
|
||||
// EfiPciHostBridgeSetResources
|
||||
// Program the Host Bridge hardware to decode previously allocated resources
|
||||
// (proposed resources) for all the PCI Root Bridges.
|
||||
//
|
||||
// EfiPciHostBridgeFreeResources
|
||||
// De-allocate previously allocated resources previously for all the PCI
|
||||
// Root Bridges and reset the I/O and memory apertures to initial state.
|
||||
//
|
||||
// EfiPciHostBridgeEndResourceAllocation
|
||||
// The resource allocation phase is completed. No specific action is required
|
||||
// here. This notification can be used to perform any chipset specific programming.
|
||||
|
||||
|
||||
|
||||
//
|
||||
// EFI_PCI_CONTROLLER_RESOURCE_ALLOCATION_PHASE
|
||||
//
|
||||
typedef enum {
|
||||
EfiPciBeforeChildBusEnumeration,
|
||||
EfiPciBeforeResourceCollection
|
||||
} EFI_PCI_CONTROLLER_RESOURCE_ALLOCATION_PHASE;
|
||||
|
||||
//
|
||||
// EfiPciBeforeChildBusEnumeration
|
||||
// This notification is only applicable to PCI-PCI bridges and
|
||||
// indicates that the PCI enumerator is about to begin enumerating
|
||||
// the bus behind the PCI-PCI Bridge. This notification is sent after
|
||||
// the primary bus number, the secondary bus number and the subordinate
|
||||
// bus number registers in the PCI-PCI Bridge are programmed to valid
|
||||
// (not necessary final) values
|
||||
//
|
||||
// EfiPciBeforeResourceCollection
|
||||
// This notification is sent before the PCI enumerator probes BAR registers
|
||||
// for every valid PCI function.
|
||||
//
|
||||
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_NOTIFY_PHASE) (
|
||||
IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This,
|
||||
IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PHASE Phase
|
||||
);
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Enter a certain phase of the PCI enumeration process
|
||||
|
||||
Arguments:
|
||||
This -- The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL instance
|
||||
Phase -- The phase during enumeration
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - Success
|
||||
EFI_OUT_OF_RESOURCES - If SubmitResources ( ) could not allocate resources
|
||||
EFI_NOT_READY - This phase cannot be entered at this time
|
||||
EFI_DEVICE_ERROR - SetResources failed due to HW error.
|
||||
|
||||
--*/
|
||||
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_GET_NEXT_ROOT_BRIDGE) (
|
||||
IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This,
|
||||
IN OUT EFI_HANDLE *RootBridgeHandle
|
||||
);
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Return the device handle of the next PCI root bridge that is associated with
|
||||
this Host Bridge
|
||||
|
||||
Arguments:
|
||||
This -- The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance
|
||||
RootBridgeHandle -- Returns the device handle of the next PCI Root Bridge.
|
||||
On input, it holds the RootBridgeHandle returned by the most
|
||||
recent call to GetNextRootBridge().The handle for the first
|
||||
PCI Root Bridge is returned if RootBridgeHandle is NULL on input
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - Success
|
||||
EFI_INVALID_PARAMETER - RootBridgeHandle is invalid
|
||||
|
||||
--*/
|
||||
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI * EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_GET_ATTRIBUTES) (
|
||||
IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This,
|
||||
IN EFI_HANDLE RootBridgeHandle,
|
||||
OUT UINT64 *Attributes
|
||||
);
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Returns the attributes of a PCI Root Bridge.
|
||||
|
||||
Arguments:
|
||||
This -- The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance
|
||||
RootBridgeHandle -- The device handle of the PCI Root Bridge
|
||||
that the caller is interested in
|
||||
Attribute -- The pointer to attributes of the PCI Root Bridge
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - Success
|
||||
EFI_INVALID_PARAMETER - RootBridgeHandle is invalid
|
||||
EFI_INVALID_PARAMETER - Attributes is NULL
|
||||
|
||||
--*/
|
||||
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_START_BUS_ENUMERATION) (
|
||||
IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This,
|
||||
IN EFI_HANDLE RootBridgeHandle,
|
||||
OUT VOID **Configuration
|
||||
);
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
This is the request from the PCI enumerator to set up
|
||||
the specified PCI Root Bridge for bus enumeration process.
|
||||
|
||||
Arguments:
|
||||
This -- The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance
|
||||
RootBridgeHandle -- The PCI Root Bridge to be set up
|
||||
Configuration -- Pointer to the pointer to the PCI bus resource descriptor
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - Success
|
||||
EFI_INVALID_PARAMETER - RootBridgeHandle is invalid
|
||||
EFI_DEVICE_ERROR - Request failed due to hardware error
|
||||
EFI_OUT_OF_RESOURCES - Request failed due to lack of resources
|
||||
--*/
|
||||
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_SET_BUS_NUMBERS) (
|
||||
IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This,
|
||||
IN EFI_HANDLE RootBridgeHandle,
|
||||
IN VOID *Configuration
|
||||
);
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
This function programs the PCI Root Bridge hardware so that
|
||||
it decodes the specified PCI bus range
|
||||
|
||||
Arguments:
|
||||
This -- The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance
|
||||
RootBridgeHandle -- The PCI Root Bridge whose bus range is to be programmed
|
||||
Configuration -- The pointer to the PCI bus resource descriptor
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - Success
|
||||
EFI_INVALID_PARAMETER - RootBridgeHandle is invalid
|
||||
EFI_INVALID_PARAMETER - Configuration is NULL
|
||||
EFI_INVALID_PARAMETER - Configuration does not point to a valid ACPI resource descriptor
|
||||
EFI_INVALID_PARAMETER - Configuration contains one or more memory or IO ACPI resource descriptor
|
||||
EFI_INVALID_PARAMETER - Address Range Minimum or Address Range Length fields in Configuration
|
||||
are invalid for this Root Bridge.
|
||||
EFI_INVALID_PARAMETER - Configuration contains one or more invalid ACPI resource descriptor
|
||||
EFI_DEVICE_ERROR - Request failed due to hardware error
|
||||
EFI_OUT_OF_RESOURCES - Request failed due to lack of resources
|
||||
|
||||
--*/
|
||||
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI * EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_SUBMIT_RESOURCES) (
|
||||
IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This,
|
||||
IN EFI_HANDLE RootBridgeHandle,
|
||||
IN VOID *Configuration
|
||||
);
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Submits the I/O and memory resource requirements for the specified PCI Root Bridge
|
||||
|
||||
Arguments:
|
||||
This -- The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance
|
||||
RootBridgeHandle -- The PCI Root Bridge whose I/O and memory resource requirements
|
||||
are being submitted
|
||||
Configuration -- The pointer to the PCI I/O and PCI memory resource descriptor
|
||||
Returns:
|
||||
EFI_SUCCESS - Success
|
||||
EFI_INVALID_PARAMETER - RootBridgeHandle is invalid
|
||||
EFI_INVALID_PARAMETER - Configuration is NULL
|
||||
EFI_INVALID_PARAMETER - Configuration does not point to a valid ACPI resource descriptor
|
||||
EFI_INVALID_PARAMETER - Configuration includes a resource descriptor of unsupported type
|
||||
|
||||
--*/
|
||||
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI * EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_GET_PROPOSED_RESOURCES) (
|
||||
IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This,
|
||||
IN EFI_HANDLE RootBridgeHandle,
|
||||
OUT VOID **Configuration
|
||||
);
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
This function returns the proposed resource settings for the specified
|
||||
PCI Root Bridge
|
||||
|
||||
Arguments:
|
||||
This -- The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance
|
||||
RootBridgeHandle -- The PCI Root Bridge handle
|
||||
Configuration -- The pointer to the pointer to the PCI I/O
|
||||
and memory resource descriptor
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - Success
|
||||
EFI_INVALID_PARAMETER - RootBridgeHandle is invalid
|
||||
EFI_DEVICE_ERROR - Request failed due to hardware error
|
||||
EFI_OUT_OF_RESOURCES - Request failed due to lack of resources
|
||||
|
||||
--*/
|
||||
|
||||
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI * EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_PREPROCESS_CONTROLLER) (
|
||||
IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This,
|
||||
IN EFI_HANDLE RootBridgeHandle,
|
||||
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS PciAddress,
|
||||
IN EFI_PCI_CONTROLLER_RESOURCE_ALLOCATION_PHASE Phase
|
||||
);
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
This function is called for all the PCI controllers that the PCI
|
||||
bus driver finds. Can be used to Preprogram the controller.
|
||||
|
||||
Arguments:
|
||||
This -- The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance
|
||||
RootBridgeHandle -- The PCI Root Bridge handle
|
||||
PciBusAddress -- Address of the controller on the PCI bus
|
||||
Phase -- The Phase during resource allocation
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - Success
|
||||
EFI_INVALID_PARAMETER - RootBridgeHandle is invalid
|
||||
EFI_DEVICE_ERROR - Device pre-initialization failed due to hardware error.
|
||||
--*/
|
||||
|
||||
|
||||
|
||||
typedef struct _EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL {
|
||||
EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_NOTIFY_PHASE NotifyPhase;
|
||||
EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_GET_NEXT_ROOT_BRIDGE GetNextRootBridge;
|
||||
EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_GET_ATTRIBUTES GetAllocAttributes;
|
||||
EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_START_BUS_ENUMERATION StartBusEnumeration;
|
||||
EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_SET_BUS_NUMBERS SetBusNumbers;
|
||||
EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_SUBMIT_RESOURCES SubmitResources;
|
||||
EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_GET_PROPOSED_RESOURCES GetProposedResources;
|
||||
EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_PREPROCESS_CONTROLLER PreprocessController;
|
||||
} EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL;
|
||||
|
||||
extern EFI_GUID gEfiPciHostBridgeResourceAllocationProtocolGuid;
|
||||
|
||||
#endif
|
@@ -0,0 +1,30 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004, 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:
|
||||
|
||||
PciHotPlugInit.c
|
||||
|
||||
Abstract:
|
||||
|
||||
EFI PCI Hot Plug Init Protocol
|
||||
|
||||
Revision History
|
||||
|
||||
--*/
|
||||
|
||||
#include "Tiano.h"
|
||||
|
||||
#include EFI_PROTOCOL_DEFINITION (PciHotPlugInit)
|
||||
|
||||
EFI_GUID gEfiPciHotPlugInitProtocolGuid = EFI_PCI_HOT_PLUG_INIT_PROTOCOL_GUID;
|
||||
|
||||
EFI_GUID_STRING(&gEfiPciHotPlugInitProtocolGuid, "PCI Hot Plug Init Protocol", "PCI Hot Plug Init Protocol");
|
@@ -0,0 +1,97 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004, 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:
|
||||
|
||||
PciHotPlugInit.h
|
||||
|
||||
Abstract:
|
||||
|
||||
EFI PCI Hot Plug Init Protocol
|
||||
|
||||
Revision History
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _EFI_PCI_HOT_PLUG_INIT_H
|
||||
#define _EFI_PCI_HOT_PLUG_INIT_H
|
||||
|
||||
//
|
||||
// Global ID for the PCI Hot Plug Protocol
|
||||
//
|
||||
#define EFI_PCI_HOT_PLUG_INIT_PROTOCOL_GUID \
|
||||
{ 0xaa0e8bc1, 0xdabc, 0x46b0, 0xa8, 0x44, 0x37, 0xb8, 0x16, 0x9b, 0x2b, 0xea }
|
||||
|
||||
|
||||
EFI_FORWARD_DECLARATION (EFI_PCI_HOT_PLUG_INIT_PROTOCOL);
|
||||
|
||||
#define EFI_HPC_STATE_INITIALIZED 0x01
|
||||
#define EFI_HPC_STATE_ENABLED 0x02
|
||||
|
||||
typedef UINT16 EFI_HPC_STATE;
|
||||
|
||||
|
||||
typedef struct{
|
||||
EFI_DEVICE_PATH_PROTOCOL *HpcDevicePath;
|
||||
EFI_DEVICE_PATH_PROTOCOL *HpbDevicePath;
|
||||
} EFI_HPC_LOCATION;
|
||||
|
||||
|
||||
typedef enum{
|
||||
EfiPaddingPciBus,
|
||||
EfiPaddingPciRootBridge
|
||||
} EFI_HPC_PADDING_ATTRIBUTES;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_GET_ROOT_HPC_LIST) (
|
||||
IN EFI_PCI_HOT_PLUG_INIT_PROTOCOL *This,
|
||||
OUT UINTN *HpcCount,
|
||||
OUT EFI_HPC_LOCATION **HpcList
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_INITIALIZE_ROOT_HPC) (
|
||||
IN EFI_PCI_HOT_PLUG_INIT_PROTOCOL *This,
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *HpcDevicePath,
|
||||
IN UINT64 HpcPciAddress,
|
||||
IN EFI_EVENT Event, OPTIONAL
|
||||
OUT EFI_HPC_STATE *HpcState
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_GET_PCI_HOT_PLUG_PADDING) (
|
||||
IN EFI_PCI_HOT_PLUG_INIT_PROTOCOL *This,
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *HpcDevicePath,
|
||||
IN UINT64 HpcPciAddress,
|
||||
OUT EFI_HPC_STATE *HpcState,
|
||||
OUT VOID **Padding,
|
||||
OUT EFI_HPC_PADDING_ATTRIBUTES *Attributes
|
||||
);
|
||||
|
||||
|
||||
//
|
||||
// Prototypes for the PCI Hot Plug Init Protocol
|
||||
//
|
||||
|
||||
|
||||
typedef struct _EFI_PCI_HOT_PLUG_INIT_PROTOCOL {
|
||||
EFI_GET_ROOT_HPC_LIST GetRootHpcList;
|
||||
EFI_INITIALIZE_ROOT_HPC InitializeRootHpc;
|
||||
EFI_GET_PCI_HOT_PLUG_PADDING GetResourcePadding;
|
||||
} EFI_PCI_HOT_PLUG_INIT_PROTOCOL;
|
||||
|
||||
|
||||
extern EFI_GUID gEfiPciHotPlugInitProtocolGuid;
|
||||
|
||||
#endif
|
@@ -0,0 +1,26 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004, 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:
|
||||
PciPlatform.c
|
||||
|
||||
Abstract:
|
||||
This file defines global GUID variables for PlatformOpRom protocols.
|
||||
|
||||
--*/
|
||||
|
||||
#include "Tiano.h"
|
||||
#include EFI_PROTOCOL_PRODUCER (PciPlatform)
|
||||
|
||||
|
||||
EFI_GUID gEfiPciPlatformProtocolGuid = EFI_PCI_PLATFORM_PROTOCOL_GUID;
|
||||
|
||||
EFI_GUID_STRING (&gEfiPciPlatformProtocolGuid, "Pci Platform Protocol", "Pci Platform Protocol");
|
@@ -0,0 +1,211 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004, 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:
|
||||
PciPlatform.h
|
||||
|
||||
Abstract:
|
||||
This file declares PlatfromOpRom protocols.
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _PCI_PLATFORM_H_
|
||||
#define _PCI_PLATFORM_H_
|
||||
|
||||
|
||||
#include "Tiano.h"
|
||||
#include "TianoTypes.h"
|
||||
|
||||
#include EFI_PROTOCOL_DEFINITION (PciHostBridgeResourceAllocation)
|
||||
#include EFI_PROTOCOL_DEFINITION (PciRootBridgeIo)
|
||||
|
||||
//
|
||||
// Protocol for GUID.
|
||||
//
|
||||
|
||||
#define EFI_PCI_PLATFORM_PROTOCOL_GUID \
|
||||
{ 0x7d75280, 0x27d4, 0x4d69, 0x90, 0xd0, 0x56, 0x43, 0xe2, 0x38, 0xb3, 0x41}
|
||||
|
||||
|
||||
EFI_FORWARD_DECLARATION (EFI_PCI_PLATFORM_PROTOCOL);
|
||||
|
||||
typedef UINT32 EFI_PCI_PLATFORM_POLICY;
|
||||
|
||||
|
||||
#define EFI_RESERVE_NONE_IO_ALIAS 0x0000
|
||||
#define EFI_RESERVE_ISA_IO_ALIAS 0x0001
|
||||
#define EFI_RESERVE_ISA_IO_NO_ALIAS 0x0002
|
||||
#define EFI_RESERVE_VGA_IO_ALIAS 0x0004
|
||||
#define EFI_RESERVE_VGA_IO_NO_ALIAS 0x0008
|
||||
|
||||
|
||||
typedef enum {
|
||||
ChipsetEntry,
|
||||
ChipsetExit,
|
||||
MaximumChipsetPhase
|
||||
} EFI_PCI_CHIPSET_EXECUTION_PHASE;
|
||||
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI * EFI_PCI_PLATFORM_PHASE_NOTIFY) (
|
||||
IN EFI_PCI_PLATFORM_PROTOCOL *This,
|
||||
IN EFI_HANDLE HostBridge,
|
||||
IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PHASE Phase,
|
||||
IN EFI_PCI_CHIPSET_EXECUTION_PHASE ChipsetPhase
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
The PlatformNotify() function can be used to notify the platform driver so that
|
||||
it can perform platform-specific actions. No specific actions are required.
|
||||
Eight notification points are defined at this time. More synchronization points
|
||||
may be added as required in the future. The PCI bus driver calls the platform driver
|
||||
twice for every Phase-once before the PCI Host Bridge Resource Allocation Protocol
|
||||
driver is notified, and once after the PCI Host Bridge Resource Allocation Protocol
|
||||
driver has been notified.
|
||||
This member function may not perform any error checking on the input parameters. It
|
||||
also does not return any error codes. If this member function detects any error condition,
|
||||
it needs to handle those errors on its own because there is no way to surface any
|
||||
errors to the caller.
|
||||
|
||||
Arguments:
|
||||
This - Pointer to the EFI_PCI_PLATFORM_PROTOCOL instance.
|
||||
HostBridge - The handle of the host bridge controller.
|
||||
Phase - The phase of the PCI bus enumeration.
|
||||
ChipsetPhase - Defines the execution phase of the PCI chipset driver.
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - The function completed successfully.
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI * EFI_PCI_PLATFORM_PREPROCESS_CONTROLLER) (
|
||||
IN EFI_PCI_PLATFORM_PROTOCOL *This,
|
||||
IN EFI_HANDLE HostBridge,
|
||||
IN EFI_HANDLE RootBridge,
|
||||
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS PciAddress,
|
||||
IN EFI_PCI_CONTROLLER_RESOURCE_ALLOCATION_PHASE Phase,
|
||||
IN EFI_PCI_CHIPSET_EXECUTION_PHASE ChipsetPhase
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
The PlatformPrepController() function can be used to notify the platform driver so that
|
||||
it can perform platform-specific actions. No specific actions are required.
|
||||
Several notification points are defined at this time. More synchronization points may be
|
||||
added as required in the future. The PCI bus driver calls the platform driver twice for
|
||||
every PCI controller-once before the PCI Host Bridge Resource Allocation Protocol driver
|
||||
is notified, and once after the PCI Host Bridge Resource Allocation Protocol driver has
|
||||
been notified.
|
||||
This member function may not perform any error checking on the input parameters. It also
|
||||
does not return any error codes. If this member function detects any error condition, it
|
||||
needs to handle those errors on its own because there is no way to surface any errors to
|
||||
the caller.
|
||||
|
||||
Arguments:
|
||||
This - Pointer to the EFI_PCI_PLATFORM_PROTOCOL instance.
|
||||
HostBridge - The associated PCI host bridge handle.
|
||||
RootBridge - The associated PCI root bridge handle.
|
||||
PciAddress - The address of the PCI device on the PCI bus.
|
||||
Phase - The phase of the PCI controller enumeration.
|
||||
ChipsetPhase - Defines the execution phase of the PCI chipset driver.
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - The function completed successfully.
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI * EFI_PCI_PLATFORM_GET_PLATFORM_POLICY) (
|
||||
IN EFI_PCI_PLATFORM_PROTOCOL *This,
|
||||
OUT EFI_PCI_PLATFORM_POLICY *PciPolicy
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
The GetPlatformPolicy() function retrieves the platform policy regarding PCI
|
||||
enumeration. The PCI bus driver and the PCI Host Bridge Resource Allocation Protocol
|
||||
driver can call this member function to retrieve the policy.
|
||||
|
||||
Arguments:
|
||||
This - Pointer to the EFI_PCI_PLATFORM_PROTOCOL instance.
|
||||
PciPolicy - The platform policy with respect to VGA and ISA aliasing.
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - The function completed successfully.
|
||||
EFI_INVALID_PARAMETER - PciPolicy is NULL.
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_PCI_PLATFORM_GET_PCI_ROM) (
|
||||
IN EFI_PCI_PLATFORM_PROTOCOL *This,
|
||||
IN EFI_HANDLE PciHandle,
|
||||
OUT VOID **RomImage,
|
||||
OUT UINTN *RomSize
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
The GetPciRom() function gets the PCI device's option ROM from a platform-specific location.
|
||||
The option ROM will be loaded into memory. This member function is used to return an image
|
||||
that is packaged as a PCI 2.2 option ROM. The image may contain both legacy and EFI option
|
||||
ROMs. See the EFI 1.10 Specification for details. This member function can be used to return
|
||||
option ROM images for embedded controllers. Option ROMs for embedded controllers are typically
|
||||
stored in platform-specific storage, and this member function can retrieve it from that storage
|
||||
and return it to the PCI bus driver. The PCI bus driver will call this member function before
|
||||
scanning the ROM that is attached to any controller, which allows a platform to specify a ROM
|
||||
image that is different from the ROM image on a PCI card.
|
||||
|
||||
Arguments:
|
||||
This - Pointer to the EFI_PCI_PLATFORM_PROTOCOL instance.
|
||||
PciHandle - The handle of the PCI device.
|
||||
RomImage - If the call succeeds, the pointer to the pointer to the option ROM image.
|
||||
Otherwise, this field is undefined. The memory for RomImage is allocated
|
||||
by EFI_PCI_PLATFORM_PROTOCOL.GetPciRom() using the EFI Boot Service AllocatePool().
|
||||
It is the caller's responsibility to free the memory using the EFI Boot Service
|
||||
FreePool(), when the caller is done with the option ROM.
|
||||
RomSize - If the call succeeds, a pointer to the size of the option ROM size. Otherwise,
|
||||
this field is undefined.
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - The option ROM was available for this device and loaded into memory.
|
||||
EFI_NOT_FOUND - No option ROM was available for this device.
|
||||
EFI_OUT_OF_RESOURCES - No memory was available to load the option ROM.
|
||||
EFI_DEVICE_ERROR - An error occurred in getting the option ROM.
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
|
||||
typedef struct _EFI_PCI_PLATFORM_PROTOCOL {
|
||||
EFI_PCI_PLATFORM_PHASE_NOTIFY PhaseNotify;
|
||||
EFI_PCI_PLATFORM_PREPROCESS_CONTROLLER PlatformPrepController;
|
||||
EFI_PCI_PLATFORM_GET_PLATFORM_POLICY GetPlatformPolicy;
|
||||
EFI_PCI_PLATFORM_GET_PCI_ROM GetPciRom;
|
||||
} EFI_PCI_PLATFORM_PROTOCOL;
|
||||
|
||||
extern EFI_GUID gEfiPciPlatformProtocolGuid;
|
||||
|
||||
|
||||
|
||||
#endif
|
@@ -0,0 +1,28 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004, 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:
|
||||
|
||||
SectionExtraction.c
|
||||
|
||||
Abstract:
|
||||
|
||||
Section Extraction protocol as defined in the Tiano File Image Format
|
||||
specification.
|
||||
|
||||
--*/
|
||||
|
||||
#include "Tiano.h"
|
||||
#include EFI_PROTOCOL_DEFINITION (SectionExtraction)
|
||||
|
||||
EFI_GUID gEfiSectionExtractionProtocolGuid = EFI_SECTION_EXTRACTION_PROTOCOL_GUID;
|
||||
|
||||
EFI_GUID_STRING(&gEfiSectionExtractionProtocolGuid, "Section Extraction Protocol", "Tiano Section Extraction Protocol");
|
@@ -0,0 +1,83 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004, 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:
|
||||
|
||||
SectionExtraction.h
|
||||
|
||||
Abstract:
|
||||
|
||||
Section extraction protocol as defined in the Tiano File Image Format specification.
|
||||
|
||||
This interface provides a means of decoding a set of sections into a linked list of
|
||||
leaf sections. This provides for an extensible and flexible file format.
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _SECTION_EXTRACTION_PROTOCOL_H
|
||||
#define _SECTION_EXTRACTION_PROTOCOL_H
|
||||
|
||||
#include "EfiFirmwareFileSystem.h"
|
||||
|
||||
//
|
||||
// Protocol GUID definition
|
||||
//
|
||||
#define EFI_SECTION_EXTRACTION_PROTOCOL_GUID \
|
||||
{ \
|
||||
0x448F5DA4, 0x6DD7, 0x4FE1, 0x93, 0x07, 0x69, 0x22, 0x41, 0x92, 0x21, 0x5D \
|
||||
}
|
||||
|
||||
EFI_FORWARD_DECLARATION (EFI_SECTION_EXTRACTION_PROTOCOL);
|
||||
|
||||
//
|
||||
// Protocol member functions
|
||||
//
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_OPEN_SECTION_STREAM) (
|
||||
IN EFI_SECTION_EXTRACTION_PROTOCOL * This,
|
||||
IN UINTN SectionStreamLength,
|
||||
IN VOID *SectionStream,
|
||||
OUT UINTN *SectionStreamHandle
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_GET_SECTION) (
|
||||
IN EFI_SECTION_EXTRACTION_PROTOCOL * This,
|
||||
IN UINTN SectionStreamHandle,
|
||||
IN EFI_SECTION_TYPE * SectionType,
|
||||
IN EFI_GUID * SectionDefinitionGuid,
|
||||
IN UINTN SectionInstance,
|
||||
IN VOID **Buffer,
|
||||
IN OUT UINTN *BufferSize,
|
||||
OUT UINT32 *AuthenticationStatus
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_CLOSE_SECTION_STREAM) (
|
||||
IN EFI_SECTION_EXTRACTION_PROTOCOL * This,
|
||||
IN UINTN SectionStreamHandle
|
||||
);
|
||||
|
||||
//
|
||||
// Protocol definition
|
||||
//
|
||||
typedef struct _EFI_SECTION_EXTRACTION_PROTOCOL {
|
||||
EFI_OPEN_SECTION_STREAM OpenSectionStream;
|
||||
EFI_GET_SECTION GetSection;
|
||||
EFI_CLOSE_SECTION_STREAM CloseSectionStream;
|
||||
} EFI_SECTION_EXTRACTION_PROTOCOL;
|
||||
|
||||
extern EFI_GUID gEfiSectionExtractionProtocolGuid;
|
||||
|
||||
#endif
|
@@ -0,0 +1,28 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004, 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:
|
||||
|
||||
SecurityPolicy.c
|
||||
|
||||
Abstract:
|
||||
|
||||
Security Policy protocol as defined in the DXE CIS
|
||||
|
||||
--*/
|
||||
|
||||
#include "Tiano.h"
|
||||
#include EFI_PROTOCOL_DEFINITION (SecurityPolicy)
|
||||
|
||||
EFI_GUID gEfiSecurityPolicyProtocolGuid = EFI_SECURITY_POLICY_PROTOCOL_GUID;
|
||||
|
||||
EFI_GUID_STRING(&gEfiSecurityPolicyProtocolGuid, "Security Policy protocol", "Security Policy protocol");
|
||||
|
@@ -0,0 +1,33 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004, 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:
|
||||
|
||||
SecurityPolicy.h
|
||||
|
||||
Abstract:
|
||||
|
||||
Security Policy protocol as defined in the DXE CIS
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _SECURITY_POLICY_H_
|
||||
#define _SECURITY_POLICY_H_
|
||||
|
||||
//
|
||||
// Security policy protocol GUID definition
|
||||
//
|
||||
#define EFI_SECURITY_POLICY_PROTOCOL_GUID \
|
||||
{0x78E4D245, 0xCD4D, 0x4a05, 0xA2, 0xBA, 0x47, 0x43, 0xE8, 0x6C, 0xFC, 0xAB}
|
||||
|
||||
extern EFI_GUID gEfiSecurityPolicyProtocolGuid;
|
||||
|
||||
#endif
|
@@ -0,0 +1,31 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 1999 - 2002, 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:
|
||||
|
||||
SmBus.c
|
||||
|
||||
Abstract:
|
||||
|
||||
EFI SMBUS Protocol
|
||||
|
||||
Revision History
|
||||
|
||||
--*/
|
||||
|
||||
#include "Tiano.h"
|
||||
|
||||
#include EFI_PROTOCOL_DEFINITION (Smbus)
|
||||
|
||||
EFI_GUID gEfiSmbusProtocolGuid = EFI_SMBUS_HC_PROTOCOL_GUID;
|
||||
|
||||
EFI_GUID_STRING(&gEfiSmbusProtocolGuid, "SMBUS Protocol", "EFI 2.0 SMBUS Protocol");
|
@@ -0,0 +1,93 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 1999 - 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:
|
||||
|
||||
Smbus.h
|
||||
|
||||
Abstract:
|
||||
|
||||
EFI SMBUS Protocol
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _EFI_SMBUS_H
|
||||
#define _EFI_SMBUS_H
|
||||
|
||||
#include "EfiSmbus.h"
|
||||
|
||||
#define EFI_SMBUS_HC_PROTOCOL_GUID \
|
||||
{ \
|
||||
0xe49d33ed, 0x513d, 0x4634, 0xb6, 0x98, 0x6f, 0x55, 0xaa, 0x75, 0x1c, 0x1b \
|
||||
}
|
||||
|
||||
EFI_FORWARD_DECLARATION (EFI_SMBUS_HC_PROTOCOL);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMBUS_HC_EXECUTE_OPERATION) (
|
||||
IN EFI_SMBUS_HC_PROTOCOL * This,
|
||||
IN EFI_SMBUS_DEVICE_ADDRESS SlaveAddress,
|
||||
IN EFI_SMBUS_DEVICE_COMMAND Command,
|
||||
IN EFI_SMBUS_OPERATION Operation,
|
||||
IN BOOLEAN PecCheck,
|
||||
IN OUT UINTN *Length,
|
||||
IN OUT VOID *Buffer
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMBUS_NOTIFY_FUNCTION) (
|
||||
IN EFI_SMBUS_DEVICE_ADDRESS SlaveAddress,
|
||||
IN UINTN Data
|
||||
);
|
||||
|
||||
//
|
||||
// If ArpAll is TRUE, SmbusUdid/SlaveAddress is Optional.
|
||||
// If FALSE, ArpDevice will enum SmbusUdid and the address will be at SlaveAddress
|
||||
//
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMBUS_HC_PROTOCOL_ARP_DEVICE) (
|
||||
IN EFI_SMBUS_HC_PROTOCOL * This,
|
||||
IN BOOLEAN ArpAll,
|
||||
IN EFI_SMBUS_UDID * SmbusUdid, OPTIONAL
|
||||
IN OUT EFI_SMBUS_DEVICE_ADDRESS * SlaveAddress OPTIONAL
|
||||
);
|
||||
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMBUS_HC_PROTOCOL_GET_ARP_MAP) (
|
||||
IN EFI_SMBUS_HC_PROTOCOL * This,
|
||||
IN OUT UINTN *Length,
|
||||
IN OUT EFI_SMBUS_DEVICE_MAP **SmbusDeviceMap
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMBUS_HC_PROTOCOL_NOTIFY) (
|
||||
IN EFI_SMBUS_HC_PROTOCOL * This,
|
||||
IN EFI_SMBUS_DEVICE_ADDRESS SlaveAddress,
|
||||
IN UINTN Data,
|
||||
IN EFI_SMBUS_NOTIFY_FUNCTION NotifyFunction
|
||||
);
|
||||
|
||||
typedef struct _EFI_SMBUS_HC_PROTOCOL {
|
||||
EFI_SMBUS_HC_EXECUTE_OPERATION Execute;
|
||||
EFI_SMBUS_HC_PROTOCOL_ARP_DEVICE ArpDevice;
|
||||
EFI_SMBUS_HC_PROTOCOL_GET_ARP_MAP GetArpMap;
|
||||
EFI_SMBUS_HC_PROTOCOL_NOTIFY Notify;
|
||||
} EFI_SMBUS_HC_PROTOCOL;
|
||||
|
||||
extern EFI_GUID gEfiSmbusProtocolGuid;
|
||||
#endif
|
@@ -0,0 +1,30 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 1999 - 2002, 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:
|
||||
|
||||
SmmAccess.c
|
||||
|
||||
Abstract:
|
||||
|
||||
This file defines SMM SMRAM abstraction protocol defined by the
|
||||
SMM Component Interface Specification
|
||||
|
||||
|
||||
--*/
|
||||
|
||||
#include "Tiano.h"
|
||||
#include EFI_PROTOCOL_DEFINITION (SmmAccess)
|
||||
|
||||
EFI_GUID gEfiSmmAccessProtocolGuid = EFI_SMM_ACCESS_PROTOCOL_GUID;
|
||||
|
||||
EFI_GUID_STRING(&gEfiSmmAccessProtocolGuid, "SMM Access Protocol", "SMM Access protocol");
|
@@ -0,0 +1,79 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 1999 - 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:
|
||||
|
||||
SmmAccess.h
|
||||
|
||||
Abstract:
|
||||
|
||||
This file defines SMM SMRAM Access abstraction protocol defined
|
||||
by the SMM CIS.
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _SMM_ACCESS_H_
|
||||
#define _SMM_ACCESS_H_
|
||||
|
||||
#include EFI_GUID_DEFINITION (SmramMemoryReserve)
|
||||
|
||||
EFI_FORWARD_DECLARATION (EFI_SMM_ACCESS_PROTOCOL);
|
||||
|
||||
#define EFI_SMM_ACCESS_PROTOCOL_GUID \
|
||||
{ \
|
||||
0x3792095a, 0xe309, 0x4c1e, 0xaa, 0x01, 0x85, 0xf5, 0x65, 0x5a, 0x17, 0xf1 \
|
||||
}
|
||||
|
||||
//
|
||||
// SMM Access specification Data Structures
|
||||
//
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMM_OPEN) (
|
||||
IN EFI_SMM_ACCESS_PROTOCOL * This,
|
||||
UINTN DescriptorIndex
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMM_CLOSE) (
|
||||
IN EFI_SMM_ACCESS_PROTOCOL * This,
|
||||
UINTN DescriptorIndex
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMM_LOCK) (
|
||||
IN EFI_SMM_ACCESS_PROTOCOL * This,
|
||||
UINTN DescriptorIndex
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMM_CAPABILITIES) (
|
||||
IN EFI_SMM_ACCESS_PROTOCOL * This,
|
||||
IN OUT UINTN *SmramMapSize,
|
||||
IN OUT EFI_SMRAM_DESCRIPTOR * SmramMap
|
||||
);
|
||||
|
||||
typedef struct _EFI_SMM_ACCESS_PROTOCOL {
|
||||
EFI_SMM_OPEN Open;
|
||||
EFI_SMM_CLOSE Close;
|
||||
EFI_SMM_LOCK Lock;
|
||||
EFI_SMM_CAPABILITIES GetCapabilities;
|
||||
BOOLEAN LockState;
|
||||
BOOLEAN OpenState;
|
||||
} EFI_SMM_ACCESS_PROTOCOL;
|
||||
|
||||
extern EFI_GUID gEfiSmmAccessProtocolGuid;
|
||||
|
||||
#endif
|
@@ -0,0 +1,38 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 1999 - 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:
|
||||
|
||||
SmmBase.c
|
||||
|
||||
Abstract:
|
||||
|
||||
This file defines SMM Base abstraction protocol defined by the
|
||||
SMM Component Interface Specification
|
||||
|
||||
|
||||
--*/
|
||||
|
||||
#include "Tiano.h"
|
||||
#include EFI_PROTOCOL_DEFINITION (SmmBase)
|
||||
|
||||
EFI_GUID gEfiSmmBaseProtocolGuid = EFI_SMM_BASE_PROTOCOL_GUID;
|
||||
|
||||
EFI_GUID_STRING(&gEfiSmmBaseProtocolGuid, "SMM Base Protocol", "SMM Base protocol");
|
||||
|
||||
EFI_GUID gEfiSmmCpuIoGuid = EFI_SMM_CPU_IO_GUID;
|
||||
|
||||
EFI_GUID_STRING(&gEfiSmmCpuIoGuid, "SMM CPU IO", "SMM CPU IO");
|
||||
|
||||
EFI_GUID gEfiSmmCommunicateHeaderGuid = SMM_COMMUNICATE_HEADER_GUID;
|
||||
|
||||
EFI_GUID_STRING(&gEfiSmmCommunicateHeaderGuid, "SMM Communicate Header Guid", "SMM Communicate Header Guid");
|
@@ -0,0 +1,797 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 1999 - 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:
|
||||
|
||||
SmmBase.h
|
||||
|
||||
Abstract:
|
||||
|
||||
This file defines SMM Base abstraction protocol defined by the SMM Architecture
|
||||
Specification. This is the base level of compatiblity for SMM drivers.
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _SMM_BASE_H_
|
||||
#define _SMM_BASE_H_
|
||||
|
||||
#include EFI_PROTOCOL_DEFINITION (DevicePath)
|
||||
|
||||
#define EFI_SMM_BASE_PROTOCOL_GUID \
|
||||
{ \
|
||||
0x1390954D, 0xda95, 0x4227, 0x93, 0x28, 0x72, 0x82, 0xc2, 0x17, 0xda, 0xa8 \
|
||||
}
|
||||
|
||||
#define EFI_SMM_CPU_IO_GUID \
|
||||
{ \
|
||||
0x5f439a0b, 0x45d8, 0x4682, 0xa4, 0xf4, 0xf0, 0x57, 0x6b, 0x51, 0x34, 0x41 \
|
||||
}
|
||||
|
||||
#define SMM_COMMUNICATE_HEADER_GUID \
|
||||
{ \
|
||||
0xF328E36C, 0x23B6, 0x4a95, 0x85, 0x4B, 0x32, 0xE1, 0x95, 0x34, 0xCD, 0x75 \
|
||||
}
|
||||
|
||||
//
|
||||
// SMM Base specification constant and types
|
||||
//
|
||||
#define SMM_SMST_SIGNATURE EFI_SIGNATURE_32 ('S', 'M', 'S', 'T')
|
||||
#define EFI_SMM_SYSTEM_TABLE_REVISION (0 << 16) | (0x09)
|
||||
|
||||
EFI_FORWARD_DECLARATION (EFI_SMM_BASE_PROTOCOL);
|
||||
EFI_FORWARD_DECLARATION (EFI_SMM_CPU_IO_INTERFACE);
|
||||
EFI_FORWARD_DECLARATION (EFI_SMM_CPU_SAVE_STATE);
|
||||
EFI_FORWARD_DECLARATION (EFI_SMM_OPTIONAL_FP_SAVE_STATE);
|
||||
EFI_FORWARD_DECLARATION (EFI_SMM_SYSTEM_TABLE);
|
||||
|
||||
//
|
||||
// *******************************************************
|
||||
// EFI_SMM_IO_WIDTH
|
||||
// *******************************************************
|
||||
//
|
||||
typedef enum {
|
||||
SMM_IO_UINT8 = 0,
|
||||
SMM_IO_UINT16 = 1,
|
||||
SMM_IO_UINT32 = 2,
|
||||
SMM_IO_UINT64 = 3
|
||||
} EFI_SMM_IO_WIDTH;
|
||||
|
||||
//
|
||||
// *******************************************************
|
||||
// EFI_SMM_IO_ACCESS
|
||||
// *******************************************************
|
||||
//
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMM_CPU_IO) (
|
||||
IN EFI_SMM_CPU_IO_INTERFACE * This,
|
||||
IN EFI_SMM_IO_WIDTH Width,
|
||||
IN UINT64 Address,
|
||||
IN UINTN Count,
|
||||
IN OUT VOID *Buffer
|
||||
);
|
||||
|
||||
typedef struct {
|
||||
EFI_SMM_CPU_IO Read;
|
||||
EFI_SMM_CPU_IO Write;
|
||||
} EFI_SMM_IO_ACCESS;
|
||||
|
||||
typedef struct _EFI_SMM_CPU_IO_INTERFACE {
|
||||
EFI_SMM_IO_ACCESS Mem;
|
||||
EFI_SMM_IO_ACCESS Io;
|
||||
} EFI_SMM_CPU_IO_INTERFACE;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMMCORE_ALLOCATE_POOL) (
|
||||
IN EFI_MEMORY_TYPE PoolType,
|
||||
IN UINTN Size,
|
||||
OUT VOID **Buffer
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMMCORE_FREE_POOL) (
|
||||
IN VOID *Buffer
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMMCORE_ALLOCATE_PAGES) (
|
||||
IN EFI_ALLOCATE_TYPE Type,
|
||||
IN EFI_MEMORY_TYPE MemoryType,
|
||||
IN UINTN NumberOfPages,
|
||||
OUT EFI_PHYSICAL_ADDRESS * Memory
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMMCORE_FREE_PAGES) (
|
||||
IN EFI_PHYSICAL_ADDRESS Memory,
|
||||
IN UINTN NumberOfPages
|
||||
);
|
||||
|
||||
typedef
|
||||
VOID
|
||||
(EFIAPI *EFI_AP_PROCEDURE) (
|
||||
IN VOID *Buffer
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMM_STARTUP_THIS_AP) (
|
||||
IN EFI_AP_PROCEDURE Procedure,
|
||||
IN UINTN CpuNumber,
|
||||
IN OUT VOID *ProcArguments OPTIONAL
|
||||
);
|
||||
|
||||
typedef struct _EFI_SMM_CPU_SAVE_STATE {
|
||||
UINT8 Reserved1[248];
|
||||
UINT32 SMBASE;
|
||||
UINT32 SMMRevId;
|
||||
UINT16 IORestart;
|
||||
UINT16 AutoHALTRestart;
|
||||
UINT8 Reserved2[164];
|
||||
UINT32 ES;
|
||||
UINT32 CS;
|
||||
UINT32 SS;
|
||||
UINT32 DS;
|
||||
UINT32 FS;
|
||||
UINT32 GS;
|
||||
UINT32 LDTBase;
|
||||
UINT32 TR;
|
||||
UINT32 DR7;
|
||||
UINT32 DR6;
|
||||
UINT32 EAX;
|
||||
UINT32 ECX;
|
||||
UINT32 EDX;
|
||||
UINT32 EBX;
|
||||
UINT32 ESP;
|
||||
UINT32 EBP;
|
||||
UINT32 ESI;
|
||||
UINT32 EDI;
|
||||
UINT32 EIP;
|
||||
UINT32 EFLAGS;
|
||||
UINT32 CR3;
|
||||
UINT32 CR0;
|
||||
} EFI_SMM_CPU_SAVE_STATE;
|
||||
|
||||
typedef struct {
|
||||
UINT8 Reserved19[760]; // FC00
|
||||
UINT32 SMBASE; // FEF8
|
||||
UINT32 REVID; // FEFC
|
||||
UINT16 HALT_RESTART; // FF00
|
||||
UINT16 IO_RESTART; // FF02
|
||||
UINT32 Reserved17[22]; // FF58, 54, 50, 4c, 48, 44, 40, 3c, 38, 34, 30, 2c, 28, 24, 20, 1c, 18, 14, 10, 0c, 08, 04
|
||||
UINT32 EAX; // FF5C
|
||||
UINT32 Reserved16; // FF60
|
||||
UINT32 ECX; // FF64
|
||||
UINT32 Reserved15; // FF68
|
||||
UINT32 EDX; // FF6C
|
||||
UINT32 Reserved14; // FF70
|
||||
UINT32 EBX; // FF74
|
||||
UINT32 Reserved13; // FF78
|
||||
UINT32 ESP; // FF7C
|
||||
UINT32 Reserved12; // FF80
|
||||
UINT32 EBP; // FF84
|
||||
UINT32 Reserved11; // FF88
|
||||
UINT32 ESI; // FF8C
|
||||
UINT32 Reserved9; // FF90
|
||||
UINT32 EDI; // FF94
|
||||
UINT32 Reserved8; // FF98
|
||||
UINT32 IO_MEM_ADDR; // FF9C
|
||||
UINT32 Reserved7; // FFA0
|
||||
UINT32 IO_MISC; // FFA4
|
||||
UINT32 ES_SEL; // FFA8
|
||||
UINT32 CS_SEL; // FFAC
|
||||
UINT32 SS_SEL; // FFB0
|
||||
UINT32 DS_SEL; // FFB4
|
||||
UINT32 FS_SEL; // FFB8
|
||||
UINT32 GS_SEL; // FFBC
|
||||
UINT32 LDTR_SEL; // FFC0
|
||||
UINT32 TR_SEL; // FFC4
|
||||
UINT32 DR7; // FFC8
|
||||
UINT32 Reserved6; // FFCC
|
||||
UINT32 DR6; // FFD0
|
||||
UINT32 Reserved5; // FFD4
|
||||
UINT32 EIP; // FFD8
|
||||
UINT32 Reserved4; // FFDC
|
||||
UINT32 EFER; // FFE0
|
||||
UINT32 Reserved3; // FFE4
|
||||
UINT32 EFLAGS; // FFE8
|
||||
UINT32 Reserved2; // FFEC
|
||||
UINT32 CR3; // FFF0
|
||||
UINT32 Reserved1; // FFF4
|
||||
UINT32 CR0; // FFF8
|
||||
UINT32 Reserved0; // FFFC
|
||||
} EFI_SMM_CPU_CT_SAVE_STATE;
|
||||
|
||||
typedef struct {
|
||||
UINT8 Reserved26[464]; // FC00 - FDCF
|
||||
UINT32 GdtrUpperBase; // FDD0
|
||||
UINT32 LdtrUpperBase; // FDD4
|
||||
UINT32 IdtrUpperBase; // FDD8
|
||||
UINT32 Reserved25; // FDDC - FDDF
|
||||
UINT64 IoRdi; // FDE0
|
||||
UINT64 IoRip; // FDE8
|
||||
UINT64 IoRcx; // FDF0
|
||||
UINT64 IoRsi; // FDF8
|
||||
UINT8 Reserved24[64]; // FE00 - FE3F
|
||||
UINT64 Cr4; // FE40
|
||||
UINT8 Reserved23[68]; // FE48 - FE8B
|
||||
UINT32 GdtrBase; // FE8C
|
||||
UINT32 Reserved22; // FE90
|
||||
UINT32 IdtrBase; // FE94
|
||||
UINT32 Reserved21; // FE98
|
||||
UINT32 LdtrBase; // FE9C
|
||||
UINT32 Reserved20; // FEA0
|
||||
UINT8 Reserved19[84]; // FEA4 - FEF7
|
||||
UINT32 Smbase; // FEF8
|
||||
UINT32 RevId; // FEFC
|
||||
UINT16 IoRestart; // FF00
|
||||
UINT16 HaltRestart; // FF02
|
||||
UINT8 Reserved18[24]; // FF04 - FF1B
|
||||
UINT32 R15; // FF1C
|
||||
UINT32 Reserved17; // FE20
|
||||
UINT32 R14; // FF24
|
||||
UINT32 Reserved16; // FE28
|
||||
UINT32 R13; // FF2C
|
||||
UINT32 Reserved15; // FE30
|
||||
UINT32 R12; // FF34
|
||||
UINT32 Reserved14; // FE38
|
||||
UINT32 R11; // FF3C
|
||||
UINT32 Reserved13; // FE40
|
||||
UINT32 R10; // FF44
|
||||
UINT32 Reserved12; // FE48
|
||||
UINT32 R9; // FF4C
|
||||
UINT32 Reserved11; // FE50
|
||||
UINT32 R8; // FF54
|
||||
UINT32 Reserved10; // FE58
|
||||
UINT32 Rax; // FF5C
|
||||
UINT32 Reserved9; // FE60
|
||||
UINT32 Rcx; // FF64
|
||||
UINT32 Reserved8; // FE68
|
||||
UINT32 Rdx; // FF6C
|
||||
UINT32 Reserved7; // FE70
|
||||
UINT32 Rbx; // FF74
|
||||
UINT32 Reserved6; // FE78
|
||||
UINT32 Rsp; // FF7C
|
||||
UINT32 Reserved5; // FE80
|
||||
UINT32 Rbp; // FF84
|
||||
UINT32 Reserved4; // FE88
|
||||
UINT32 Rsi; // FF8C
|
||||
UINT32 Reserved3; // FE90
|
||||
UINT32 Rdi; // FF94
|
||||
UINT32 Reserved2; // FE98
|
||||
UINT32 IoMemAddr; // FF9C
|
||||
UINT32 Reserved1; // FEA0
|
||||
UINT32 IoMiscInfo; // FFA4
|
||||
UINT32 EsSel; // FFA8
|
||||
UINT32 CsSel; // FFAC
|
||||
UINT32 SsSel; // FFB0
|
||||
UINT32 DsSel; // FFB4
|
||||
UINT32 FsSel; // FFB8
|
||||
UINT32 GsSel; // FFBC
|
||||
UINT32 LdtrSel; // FFC0
|
||||
UINT32 TrSel; // FFC4
|
||||
UINT64 Dr7; // FFC8
|
||||
UINT64 Dr6; // FFD0
|
||||
UINT32 Rip; // FFD8
|
||||
UINT32 Reserved0; // FFDC
|
||||
UINT64 Efr; // FFE0
|
||||
UINT64 RFlags; // FFE8
|
||||
UINT64 Cr3; // FFF0
|
||||
UINT64 Cr0; // FFF8
|
||||
} EFI_SMM_CPU_MEROM_SAVE_STATE;
|
||||
|
||||
|
||||
typedef struct {
|
||||
UINT8 Reserved14[0x228]; // FC00-FE28
|
||||
UINT32 IO_EIP; // FE28
|
||||
UINT8 Reserved13[0x14]; // FE2C-FE40
|
||||
UINT32 CR4; // FE40
|
||||
UINT8 Reserved12[0x48]; // FE44-FE8C
|
||||
UINT32 GDT_BASE; // FE8C
|
||||
UINT8 Reserved11[0xC]; // FE90-FE9C
|
||||
UINT32 LDT_BASE; // FE9C
|
||||
UINT8 Reserved10[0x58]; // FEA0-FEF8
|
||||
UINT32 SMBASE;
|
||||
UINT32 REVID;
|
||||
UINT16 IO_RESTART;
|
||||
UINT16 HALT_RESTART;
|
||||
UINT8 Reserved9[0xA4];
|
||||
|
||||
UINT16 ES;
|
||||
UINT16 Reserved8;
|
||||
UINT16 CS;
|
||||
UINT16 Reserved7;
|
||||
UINT16 SS;
|
||||
UINT16 Reserved6;
|
||||
UINT16 DS;
|
||||
UINT16 Reserved5;
|
||||
UINT16 FS;
|
||||
UINT16 Reserved4;
|
||||
UINT16 GS;
|
||||
UINT16 Reserved3;
|
||||
UINT32 Reserved2;
|
||||
UINT16 TR;
|
||||
UINT16 Reserved1;
|
||||
UINT32 DR7;
|
||||
UINT32 DR6;
|
||||
UINT32 EAX;
|
||||
UINT32 ECX;
|
||||
UINT32 EDX;
|
||||
UINT32 EBX;
|
||||
UINT32 ESP;
|
||||
UINT32 EBP;
|
||||
UINT32 ESI;
|
||||
UINT32 EDI;
|
||||
UINT32 EIP;
|
||||
UINT32 EFLAGS;
|
||||
UINT32 CR3;
|
||||
UINT32 CR0;
|
||||
} EFI_SMM_CPU_CT_NOT_ENABLED_SAVE_STATE;
|
||||
|
||||
typedef struct _EFI_SMM_OPTIONAL_FP_SAVE_STATE {
|
||||
UINT16 Fcw;
|
||||
UINT16 Fsw;
|
||||
UINT16 Ftw;
|
||||
UINT16 Opcode;
|
||||
UINT32 Eip;
|
||||
UINT16 Cs;
|
||||
UINT16 Rsvd1;
|
||||
UINT32 DataOffset;
|
||||
UINT16 Ds;
|
||||
UINT8 Rsvd2[10];
|
||||
UINT8 St0Mm0[10], Rsvd3[6];
|
||||
UINT8 St0Mm1[10], Rsvd4[6];
|
||||
UINT8 St0Mm2[10], Rsvd5[6];
|
||||
UINT8 St0Mm3[10], Rsvd6[6];
|
||||
UINT8 St0Mm4[10], Rsvd7[6];
|
||||
UINT8 St0Mm5[10], Rsvd8[6];
|
||||
UINT8 St0Mm6[10], Rsvd9[6];
|
||||
UINT8 St0Mm7[10], Rsvd10[6];
|
||||
UINT8 Rsvd11[22 * 16];
|
||||
} EFI_SMM_OPTIONAL_FP_SAVE_STATE;
|
||||
|
||||
typedef struct _EFI_SMM_OPTIONAL_FP_SAVE_STATE32 {
|
||||
UINT16 Fcw;
|
||||
UINT16 Fsw;
|
||||
UINT16 Ftw;
|
||||
UINT16 Opcode;
|
||||
UINT32 Eip;
|
||||
UINT16 Cs;
|
||||
UINT16 Rsvd1;
|
||||
UINT32 DataOffset;
|
||||
UINT16 Ds;
|
||||
UINT8 Reserved2[10];
|
||||
UINT8 St0Mm0[10], Rsvd3[6];
|
||||
UINT8 St1Mm1[10], Rsvd4[6];
|
||||
UINT8 St2Mm2[10], Rsvd5[6];
|
||||
UINT8 St3Mm3[10], Rsvd6[6];
|
||||
UINT8 St4Mm4[10], Rsvd7[6];
|
||||
UINT8 St5Mm5[10], Rsvd8[6];
|
||||
UINT8 St6Mm6[10], Rsvd9[6];
|
||||
UINT8 St7Mm7[10], Rsvd10[6];
|
||||
UINT8 Xmm0[16];
|
||||
UINT8 Xmm1[16];
|
||||
UINT8 Xmm2[16];
|
||||
UINT8 Xmm3[16];
|
||||
UINT8 Xmm4[16];
|
||||
UINT8 Xmm5[16];
|
||||
UINT8 Xmm6[16];
|
||||
UINT8 Xmm7[16];
|
||||
UINT8 Rsvd11[14 * 16];
|
||||
} EFI_SMM_OPTIONAL_FP_SAVE_STATE32;
|
||||
|
||||
typedef struct _EFI_SMM_OPTIONAL_FP_SAVE_STATE64 {
|
||||
UINT16 Fcw;
|
||||
UINT16 Fsw;
|
||||
UINT16 Ftw;
|
||||
UINT16 Opcode;
|
||||
UINT64 Rip;
|
||||
UINT64 DataOffset;
|
||||
UINT8 Rsvd1[8];
|
||||
UINT8 St0Mm0[10], Rsvd2[6];
|
||||
UINT8 St1Mm1[10], Rsvd3[6];
|
||||
UINT8 St2Mm2[10], Rsvd4[6];
|
||||
UINT8 St3Mm3[10], Rsvd5[6];
|
||||
UINT8 St4Mm4[10], Rsvd6[6];
|
||||
UINT8 St5Mm5[10], Rsvd7[6];
|
||||
UINT8 St6Mm6[10], Rsvd8[6];
|
||||
UINT8 St7Mm7[10], Rsvd9[6];
|
||||
UINT8 Xmm0[16];
|
||||
UINT8 Xmm1[16];
|
||||
UINT8 Xmm2[16];
|
||||
UINT8 Xmm3[16];
|
||||
UINT8 Xmm4[16];
|
||||
UINT8 Xmm5[16];
|
||||
UINT8 Xmm6[16];
|
||||
UINT8 Xmm7[16];
|
||||
UINT8 Xmm8[16];
|
||||
UINT8 Xmm9[16];
|
||||
UINT8 Xmm10[16];
|
||||
UINT8 Xmm11[16];
|
||||
UINT8 Xmm12[16];
|
||||
UINT8 Xmm13[16];
|
||||
UINT8 Xmm14[16];
|
||||
UINT8 Xmm15[16];
|
||||
UINT8 Rsvd10[6 * 16];
|
||||
} EFI_SMM_OPTIONAL_FP_SAVE_STATE64;
|
||||
|
||||
struct _EFI_SMM_SYSTEM_TABLE;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMM_INSTALL_CONFIGURATION_TABLE) (
|
||||
IN EFI_SMM_SYSTEM_TABLE * SystemTable,
|
||||
IN EFI_GUID * Guid,
|
||||
IN VOID *Table,
|
||||
IN UINTN TableSize
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
The SmmInstallConfigurationTable() function is used to maintain the list
|
||||
of configuration tables that are stored in the System Management System
|
||||
Table. The list is stored as an array of (GUID, Pointer) pairs. The list
|
||||
must be allocated from pool memory with PoolType set to EfiRuntimeServicesData.
|
||||
|
||||
Arguments:
|
||||
SystemTable - A pointer to the SMM System Table.
|
||||
Guid - A pointer to the GUID for the entry to add, update, or remove.
|
||||
Table - A pointer to the buffer of the table to add.
|
||||
TableSize - The size of the table to install.
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - The (Guid, Table) pair was added, updated, or removed.
|
||||
EFI_INVALID_PARAMETER - Guid is not valid.
|
||||
EFI_NOT_FOUND - An attempt was made to delete a non-existent entry.
|
||||
EFI_OUT_OF_RESOURCES - There is not enough memory available to complete the operation.
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
//
|
||||
// System Management System Table (SMST)
|
||||
//
|
||||
typedef struct _EFI_SMM_SYSTEM_TABLE {
|
||||
EFI_TABLE_HEADER Hdr;
|
||||
|
||||
CHAR16 *SmmFirmwareVendor;
|
||||
UINT32 SmmFirmwareRevision;
|
||||
|
||||
EFI_SMM_INSTALL_CONFIGURATION_TABLE SmmInstallConfigurationTable;
|
||||
|
||||
//
|
||||
// I/O Services
|
||||
//
|
||||
EFI_GUID EfiSmmCpuIoGuid;
|
||||
EFI_SMM_CPU_IO_INTERFACE SmmIo;
|
||||
|
||||
//
|
||||
// Runtime memory service
|
||||
//
|
||||
EFI_SMMCORE_ALLOCATE_POOL SmmAllocatePool;
|
||||
EFI_SMMCORE_FREE_POOL SmmFreePool;
|
||||
EFI_SMMCORE_ALLOCATE_PAGES SmmAllocatePages;
|
||||
EFI_SMMCORE_FREE_PAGES SmmFreePages;
|
||||
|
||||
//
|
||||
// MP service
|
||||
//
|
||||
EFI_SMM_STARTUP_THIS_AP SmmStartupThisAp;
|
||||
|
||||
//
|
||||
// CPU information records
|
||||
//
|
||||
UINTN CurrentlyExecutingCpu;
|
||||
UINTN NumberOfCpus;
|
||||
EFI_SMM_CPU_SAVE_STATE *CpuSaveState;
|
||||
EFI_SMM_OPTIONAL_FP_SAVE_STATE *CpuOptionalFloatingPointState;
|
||||
|
||||
//
|
||||
// Extensibility table
|
||||
//
|
||||
UINTN NumberOfTableEntries;
|
||||
EFI_CONFIGURATION_TABLE *SmmConfigurationTable;
|
||||
|
||||
} EFI_SMM_SYSTEM_TABLE;
|
||||
|
||||
//
|
||||
// SMM Handler Definition
|
||||
//
|
||||
#define EFI_HANDLER_SUCCESS 0x0000
|
||||
#define EFI_HANDLER_CRITICAL_EXIT 0x0001
|
||||
#define EFI_HANDLER_SOURCE_QUIESCED 0x0002
|
||||
#define EFI_HANDLER_SOURCE_PENDING 0x0003
|
||||
|
||||
//
|
||||
// Structure of Communicate Buffer
|
||||
//
|
||||
typedef struct {
|
||||
EFI_GUID HeaderGuid;
|
||||
UINTN MessageLength;
|
||||
UINT8 Data[1];
|
||||
} EFI_SMM_COMMUNICATE_HEADER;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMM_HANDLER_ENTRY_POINT) (
|
||||
IN EFI_HANDLE SmmImageHandle,
|
||||
IN OUT VOID *CommunicationBuffer OPTIONAL,
|
||||
IN OUT UINTN *SourceSize OPTIONAL
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMM_CALLBACK_ENTRY_POINT) (
|
||||
IN EFI_HANDLE SmmImageHandle,
|
||||
IN OUT VOID *CommunicationBuffer OPTIONAL,
|
||||
IN OUT UINTN *SourceSize OPTIONAL
|
||||
);
|
||||
|
||||
typedef struct {
|
||||
EFI_HANDLE SmmHandler;
|
||||
EFI_DEVICE_PATH_PROTOCOL *HandlerDevicePath;
|
||||
} EFI_HANDLER_DESCRIPTOR;
|
||||
|
||||
//
|
||||
// SMM Base Protocol Definition
|
||||
//
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMM_REGISTER_HANDLER) (
|
||||
IN EFI_SMM_BASE_PROTOCOL * This,
|
||||
IN EFI_DEVICE_PATH_PROTOCOL * FilePath,
|
||||
IN VOID *SourceBuffer OPTIONAL,
|
||||
IN UINTN SourceSize,
|
||||
OUT EFI_HANDLE * ImageHandle,
|
||||
IN BOOLEAN LegacyIA32Binary OPTIONAL
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Register a given driver into SMRAM. This is the equivalent of performing
|
||||
the LoadImage/StartImage into System Management Mode.
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
SourceBuffer - Optional source buffer in case of the image file
|
||||
being in memory.
|
||||
SourceSize - Size of the source image file, if in memory.
|
||||
ImageHandle - Pointer to the handle that reflects the driver
|
||||
loaded into SMM.
|
||||
LegacyIA32Binary - The binary image to load is legacy 16 bit code.
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - The operation was successful.
|
||||
EFI_OUT_OF_RESOURCES - There were no additional SMRAM resources to load the handler
|
||||
EFI_UNSUPPORTED - This platform does not support 16-bit handlers.
|
||||
EFI_UNSUPPORTED - In runtime.
|
||||
EFI_INVALID_PARAMETER - The handlers was not the correct image type
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMM_UNREGISTER_HANDLER) (
|
||||
IN EFI_SMM_BASE_PROTOCOL * This,
|
||||
IN EFI_HANDLE ImageHandle
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Remove a given driver SMRAM. This is the equivalent of performing
|
||||
the UnloadImage System Management Mode.
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
ImageHandle - Pointer to the handle that reflects the driver
|
||||
loaded into SMM.
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - The operation was successful
|
||||
EFI_INVALID_PARAMETER - The handler did not exist
|
||||
EFI_UNSUPPORTED - In runtime.
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMM_COMMUNICATE) (
|
||||
IN EFI_SMM_BASE_PROTOCOL * This,
|
||||
IN EFI_HANDLE ImageHandle,
|
||||
IN OUT VOID *CommunicationBuffer,
|
||||
IN OUT UINTN *SourceSize
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
The SMM Inter-module Communicate Service Communicate() function
|
||||
provides a services to send/received messages from a registered
|
||||
EFI service. The BASE protocol driver is responsible for doing
|
||||
any of the copies such that the data lives in boot-service accessible RAM.
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
ImageHandle - Pointer to the handle that reflects the driver
|
||||
loaded into SMM.
|
||||
CommunicationBuffer - Pointer to the buffer to convey into SMRAM.
|
||||
SourceSize - Size of the contents of buffer..
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - The message was successfully posted
|
||||
EFI_INVALID_PARAMETER - The buffer was NULL
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMM_CALLBACK_SERVICE) (
|
||||
IN EFI_SMM_BASE_PROTOCOL * This,
|
||||
IN EFI_HANDLE SmmImageHandle,
|
||||
IN EFI_SMM_CALLBACK_ENTRY_POINT CallbackAddress,
|
||||
IN BOOLEAN MakeLast OPTIONAL,
|
||||
IN BOOLEAN FloatingPointSave OPTIONAL
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Register a callback to execute within SMM.
|
||||
This allows receipt of messages created with the Boot Service COMMUNICATE.
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
CallbackAddress - Address of the callback service
|
||||
MakeFirst - If present, will stipulate that the handler is posted
|
||||
to be the first module executed in the dispatch table.
|
||||
MakeLast - If present, will stipulate that the handler is posted
|
||||
to be last executed in the dispatch table.
|
||||
FloatingPointSave - This is an optional parameter which informs the
|
||||
EFI_SMM_ACCESS_PROTOCOL Driver core if it needs to save
|
||||
the floating point register state. If any of the handlers
|
||||
require this, then the state will be saved for all of the handlers.
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - The operation was successful
|
||||
EFI_OUT_OF_RESOURCES - Not enough space in the dispatch queue
|
||||
EFI_UNSUPPORTED - In runtime.
|
||||
EFI_UNSUPPORTED - Not in SMM.
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMM_ALLOCATE_POOL) (
|
||||
IN EFI_SMM_BASE_PROTOCOL * This,
|
||||
IN EFI_MEMORY_TYPE PoolType,
|
||||
IN UINTN Size,
|
||||
OUT VOID **Buffer
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
The SmmAllocatePool() function allocates a memory region of Size bytes from memory of
|
||||
type PoolType and returns the address of the allocated memory in the location referenced
|
||||
by Buffer. This function allocates pages from EFI SMRAM Memory as needed to grow the
|
||||
requested pool type. All allocations are eight-byte aligned.
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
PoolType - The type of pool to allocate.
|
||||
The only supported type is EfiRuntimeServicesData;
|
||||
the interface will internally map this runtime request to SMRAM.
|
||||
Size - The number of bytes to allocate from the pool.
|
||||
Buffer - A pointer to a pointer to the allocated buffer if the call
|
||||
succeeds; undefined otherwise.
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - The requested number of bytes was allocated.
|
||||
EFI_OUT_OF_RESOURCES - The pool requested could not be allocated.
|
||||
EFI_INVALID_PARAMETER - PoolType was invalid.
|
||||
EFI_UNSUPPORTED - In runtime.
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMM_FREE_POOL) (
|
||||
IN EFI_SMM_BASE_PROTOCOL * This,
|
||||
IN VOID *Buffer
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
The SmmFreePool() function returns the memory specified by Buffer to the system.
|
||||
On return, the memory's type is EFI SMRAM Memory. The Buffer that is freed must
|
||||
have been allocated by SmmAllocatePool().
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
Buffer - Pointer to the buffer allocation.
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - The memory was returned to the system.
|
||||
EFI_INVALID_PARAMETER - Buffer was invalid.
|
||||
EFI_UNSUPPORTED - In runtime.
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMM_INSIDE_OUT) (
|
||||
IN EFI_SMM_BASE_PROTOCOL * This,
|
||||
OUT BOOLEAN *InSmm
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
This routine tells caller if execution context is SMM or not.
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - The operation was successful
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMM_GET_SMST_LOCATION) (
|
||||
IN EFI_SMM_BASE_PROTOCOL * This,
|
||||
IN OUT EFI_SMM_SYSTEM_TABLE **Smst
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
The GetSmstLocation() function returns the locatin of the System Management
|
||||
Service Table. The use of the API is such that a driver can discover the
|
||||
location of the SMST in its entry point and then cache it in some driver
|
||||
global variable so that the SMST can be invoked in subsequent callbacks.
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
Smst - Pointer to the SMST.
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - The operation was successful
|
||||
EFI_INVALID_PARAMETER - Smst was invalid.
|
||||
EFI_UNSUPPORTED - Not in SMM.
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
typedef struct _EFI_SMM_BASE_PROTOCOL {
|
||||
EFI_SMM_REGISTER_HANDLER Register;
|
||||
EFI_SMM_UNREGISTER_HANDLER UnRegister;
|
||||
EFI_SMM_COMMUNICATE Communicate;
|
||||
EFI_SMM_CALLBACK_SERVICE RegisterCallback;
|
||||
EFI_SMM_INSIDE_OUT InSmm;
|
||||
EFI_SMM_ALLOCATE_POOL SmmAllocatePool;
|
||||
EFI_SMM_FREE_POOL SmmFreePool;
|
||||
EFI_SMM_GET_SMST_LOCATION GetSmstLocation;
|
||||
} EFI_SMM_BASE_PROTOCOL;
|
||||
|
||||
extern EFI_GUID gEfiSmmBaseProtocolGuid;
|
||||
extern EFI_GUID gEfiSmmCpuIoGuid;
|
||||
extern EFI_GUID gEfiSmmCommunicateHeaderGuid;
|
||||
|
||||
#endif
|
@@ -0,0 +1,30 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 1999 - 2002, 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:
|
||||
|
||||
SmmControl.c
|
||||
|
||||
Abstract:
|
||||
|
||||
This file defines SMM Control abstraction protocol defined by the
|
||||
SMM Component Interface Specification
|
||||
|
||||
|
||||
--*/
|
||||
|
||||
#include "Tiano.h"
|
||||
#include EFI_PROTOCOL_DEFINITION (SmmControl)
|
||||
|
||||
EFI_GUID gEfiSmmControlProtocolGuid = EFI_SMM_CONTROL_PROTOCOL_GUID;
|
||||
|
||||
EFI_GUID_STRING(&gEfiSmmControlProtocolGuid, "SMM Control Protocol", "SMM Control protocol");
|
@@ -0,0 +1,79 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 1999 - 2002, 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:
|
||||
|
||||
SmmControl.h
|
||||
|
||||
Abstract:
|
||||
|
||||
This file defines SMM Control abstraction protocol defined
|
||||
by the SMM CIS.
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _SMM_CONTROL_H_
|
||||
#define _SMM_CONTROL_H_
|
||||
|
||||
EFI_FORWARD_DECLARATION (EFI_SMM_CONTROL_PROTOCOL);
|
||||
|
||||
#define EFI_SMM_CONTROL_PROTOCOL_GUID \
|
||||
{ \
|
||||
0x8d12e231, 0xc667, 0x4fd1, 0x98, 0xf2, 0x24, 0x49, 0xa7, 0xe7, 0xb2, 0xe5 \
|
||||
}
|
||||
|
||||
//
|
||||
// SMM Control specification constant and types
|
||||
//
|
||||
// typedef EFI_SMM_PERIOD UINTN
|
||||
//
|
||||
// SMM Access specification Data Structures
|
||||
//
|
||||
typedef struct {
|
||||
UINT8 SmiTriggerRegister;
|
||||
UINT8 SmiDataRegister;
|
||||
} EFI_SMM_CONTROL_REGISTER;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMM_ACTIVATE) (
|
||||
IN EFI_SMM_CONTROL_PROTOCOL * This,
|
||||
IN OUT INT8 *ArgumentBuffer OPTIONAL,
|
||||
IN OUT UINTN *ArgumentBufferSize OPTIONAL,
|
||||
IN BOOLEAN Periodic OPTIONAL,
|
||||
IN UINTN ActivationInterval OPTIONAL
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMM_DEACTIVATE) (
|
||||
IN EFI_SMM_CONTROL_PROTOCOL * This,
|
||||
IN BOOLEAN Periodic OPTIONAL
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMM_GET_REGISTER_INFO) (
|
||||
IN EFI_SMM_CONTROL_PROTOCOL * This,
|
||||
IN OUT EFI_SMM_CONTROL_REGISTER * SmiRegister
|
||||
);
|
||||
|
||||
typedef struct _EFI_SMM_CONTROL_PROTOCOL {
|
||||
EFI_SMM_ACTIVATE Trigger;
|
||||
EFI_SMM_DEACTIVATE Clear;
|
||||
EFI_SMM_GET_REGISTER_INFO GetRegisterInfo;
|
||||
UINTN MinimumTriggerPeriod;
|
||||
} EFI_SMM_CONTROL_PROTOCOL;
|
||||
|
||||
extern EFI_GUID gEfiSmmControlProtocolGuid;
|
||||
|
||||
#endif
|
@@ -0,0 +1,150 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2005, 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:
|
||||
|
||||
CpuSaveState.h
|
||||
|
||||
Abstract:
|
||||
|
||||
Define data structures used by EFI_SMM_CPU_SAVE_STATE protocol.
|
||||
|
||||
Revision History
|
||||
|
||||
++*/
|
||||
|
||||
#ifndef _CPUSAVESTATE_H_
|
||||
#define _CPUSAVESTATE_H_
|
||||
|
||||
typedef unsigned char ASM_UINT8;
|
||||
typedef ASM_UINT8 ASM_BOOL;
|
||||
typedef unsigned short ASM_UINT16;
|
||||
typedef unsigned long ASM_UINT32;
|
||||
|
||||
#ifdef _H2INC
|
||||
typedef double ASM_UINT64;
|
||||
#else
|
||||
typedef unsigned __int64 ASM_UINT64;
|
||||
#endif
|
||||
|
||||
#pragma pack (push)
|
||||
#pragma pack (1)
|
||||
|
||||
typedef struct _EFI_SMM_CPU_STATE32 {
|
||||
ASM_UINT8 Reserved1[0xf8]; // fe00h
|
||||
ASM_UINT32 SMBASE; // fef8h
|
||||
ASM_UINT32 SMMRevId; // fefch
|
||||
ASM_UINT16 IORestart; // ff00h
|
||||
ASM_UINT16 AutoHALTRestart; // ff02h
|
||||
ASM_UINT32 IEDBASE; // ff04h
|
||||
ASM_UINT8 Reserved2[0x98]; // ff08h
|
||||
ASM_UINT32 IOMemAddr; // ffa0h
|
||||
ASM_UINT32 IOMisc; // ffa4h
|
||||
ASM_UINT32 _ES;
|
||||
ASM_UINT32 _CS;
|
||||
ASM_UINT32 _SS;
|
||||
ASM_UINT32 _DS;
|
||||
ASM_UINT32 _FS;
|
||||
ASM_UINT32 _GS;
|
||||
ASM_UINT32 _LDTBase;
|
||||
ASM_UINT32 _TR;
|
||||
ASM_UINT32 _DR7;
|
||||
ASM_UINT32 _DR6;
|
||||
ASM_UINT32 _EAX;
|
||||
ASM_UINT32 _ECX;
|
||||
ASM_UINT32 _EDX;
|
||||
ASM_UINT32 _EBX;
|
||||
ASM_UINT32 _ESP;
|
||||
ASM_UINT32 _EBP;
|
||||
ASM_UINT32 _ESI;
|
||||
ASM_UINT32 _EDI;
|
||||
ASM_UINT32 _EIP;
|
||||
ASM_UINT32 _EFLAGS;
|
||||
ASM_UINT32 _CR3;
|
||||
ASM_UINT32 _CR0;
|
||||
} EFI_SMM_CPU_STATE32;
|
||||
|
||||
typedef struct _EFI_SMM_CPU_STATE64 {
|
||||
ASM_UINT8 Reserved1[0x1d0]; // fc00h
|
||||
ASM_UINT32 GdtBaseHiDword; // fdd0h
|
||||
ASM_UINT32 LdtBaseHiDword; // fdd4h
|
||||
ASM_UINT32 IdtBaseHiDword; // fdd8h
|
||||
ASM_UINT8 Reserved2[0xc]; // fddch
|
||||
ASM_UINT64 IO_EIP; // fde8h
|
||||
ASM_UINT8 Reserved3[0x50]; // fdf0h
|
||||
ASM_UINT32 _CR4; // fe40h
|
||||
ASM_UINT8 Reserved4[0x48]; // fe44h
|
||||
ASM_UINT32 GdtBaseLoDword; // fe8ch
|
||||
ASM_UINT32 GdtLimit; // fe90h
|
||||
ASM_UINT32 IdtBaseLoDword; // fe94h
|
||||
ASM_UINT32 IdtLimit; // fe98h
|
||||
ASM_UINT32 LdtBaseLoDword; // fe9ch
|
||||
ASM_UINT32 LdtLimit; // fea0h
|
||||
ASM_UINT32 LdtInfo; // fea4h
|
||||
ASM_UINT8 Reserved5[0x50]; // fea8h
|
||||
ASM_UINT32 SMBASE; // fef8h
|
||||
ASM_UINT32 SMMRevId; // fefch
|
||||
ASM_UINT16 IORestart; // ff00h
|
||||
ASM_UINT16 AutoHALTRestart; // ff02h
|
||||
ASM_UINT32 IEDBASE; // ff04h
|
||||
ASM_UINT8 Reserved6[0x14]; // ff08h
|
||||
ASM_UINT64 _R15; // ff1ch
|
||||
ASM_UINT64 _R14;
|
||||
ASM_UINT64 _R13;
|
||||
ASM_UINT64 _R12;
|
||||
ASM_UINT64 _R11;
|
||||
ASM_UINT64 _R10;
|
||||
ASM_UINT64 _R9;
|
||||
ASM_UINT64 _R8;
|
||||
ASM_UINT64 _RAX; // ff5ch
|
||||
ASM_UINT64 _RCX;
|
||||
ASM_UINT64 _RDX;
|
||||
ASM_UINT64 _RBX;
|
||||
ASM_UINT64 _RSP;
|
||||
ASM_UINT64 _RBP;
|
||||
ASM_UINT64 _RSI;
|
||||
ASM_UINT64 _RDI;
|
||||
ASM_UINT64 IOMemAddr; // ff9ch
|
||||
ASM_UINT32 IOMisc; // ffa4h
|
||||
ASM_UINT32 _ES; // ffa8h
|
||||
ASM_UINT32 _CS;
|
||||
ASM_UINT32 _SS;
|
||||
ASM_UINT32 _DS;
|
||||
ASM_UINT32 _FS;
|
||||
ASM_UINT32 _GS;
|
||||
ASM_UINT32 _LDTR; // ffc0h
|
||||
ASM_UINT32 _TR;
|
||||
ASM_UINT64 _DR7; // ffc8h
|
||||
ASM_UINT64 _DR6;
|
||||
ASM_UINT64 _RIP; // ffd8h
|
||||
ASM_UINT64 IA32_EFER; // ffe0h
|
||||
ASM_UINT64 _RFLAGS; // ffe8h
|
||||
ASM_UINT64 _CR3; // fff0h
|
||||
ASM_UINT64 _CR0; // fff8h
|
||||
} EFI_SMM_CPU_STATE64;
|
||||
|
||||
#pragma warning (push)
|
||||
#pragma warning (disable: 4201)
|
||||
typedef union _EFI_SMM_CPU_STATE {
|
||||
struct {
|
||||
ASM_UINT8 Reserved[0x200];
|
||||
EFI_SMM_CPU_STATE32 x86;
|
||||
};
|
||||
EFI_SMM_CPU_STATE64 x64;
|
||||
} EFI_SMM_CPU_STATE;
|
||||
#pragma warning (pop)
|
||||
|
||||
#pragma pack (pop)
|
||||
|
||||
#define EFI_SMM_MIN_REV_ID_x64 0x30006
|
||||
|
||||
#endif
|
@@ -0,0 +1,30 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2005, 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:
|
||||
|
||||
SmmCpuState.c
|
||||
|
||||
Abstract:
|
||||
|
||||
Protocol definition for EFI_SMM_CPU_SAVE_STATE protocol
|
||||
|
||||
Revision History
|
||||
|
||||
--*/
|
||||
|
||||
#include "Tiano.h"
|
||||
#include EFI_PROTOCOL_DEFINITION (SmmCpuState)
|
||||
|
||||
EFI_GUID gEfiSmmCpuSaveStateProtocolGuid = EFI_SMM_CPU_SAVE_STATE_PROTOCOL_GUID;
|
||||
|
||||
EFI_GUID_STRING (&gEfiSmmCpuSaveStateProtocolGuid, "SMM CPU Save State Protocol", "SMM CPU Save State Protocol");
|
@@ -0,0 +1,43 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2005, 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:
|
||||
|
||||
SmmCpuState.h
|
||||
|
||||
Abstract:
|
||||
|
||||
Protocol definition for EFI_SMM_CPU_SAVE_STATE protocol
|
||||
|
||||
Revision History
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _SMMSAVESTATE_H_
|
||||
#define _SMMSAVESTATE_H_
|
||||
|
||||
#include "CpuSaveState.h"
|
||||
|
||||
//
|
||||
// Global ID for the Sx SMI Protocol
|
||||
//
|
||||
// {21F302AD-6E94-471b-84BC-B14800403A1D}
|
||||
#define EFI_SMM_CPU_SAVE_STATE_PROTOCOL_GUID \
|
||||
{ 0x21f302ad, 0x6e94, 0x471b, 0x84, 0xbc, 0xb1, 0x48, 0x0, 0x40, 0x3a, 0x1d }
|
||||
|
||||
typedef struct _EFI_SMM_CPU_SAVE_STATE_PROTOCOL {
|
||||
EFI_SMM_CPU_STATE **CpuSaveState;
|
||||
} EFI_SMM_CPU_SAVE_STATE_PROTOCOL;
|
||||
|
||||
extern EFI_GUID gEfiSmmCpuSaveStateProtocolGuid;
|
||||
|
||||
#endif // _SMMSAVESTATE_H_
|
@@ -0,0 +1,31 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 1999 - 2002, 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:
|
||||
|
||||
SmmGpiDispatch.c
|
||||
|
||||
Abstract:
|
||||
|
||||
EFI Smm Gpi Smi Child Protocol
|
||||
|
||||
Revision History
|
||||
|
||||
--*/
|
||||
|
||||
#include "Tiano.h"
|
||||
#include EFI_PROTOCOL_DEFINITION (SmmGpiDispatch)
|
||||
|
||||
EFI_GUID gEfiSmmGpiDispatchProtocolGuid = EFI_SMM_GPI_DISPATCH_PROTOCOL_GUID;
|
||||
|
||||
EFI_GUID_STRING
|
||||
(&gEfiSmmGpiDispatchProtocolGuid, "SMM GPI SMI Dispatch Protocol", "EFI 2.0 SMM GPI SMI Dispatch Protocol");
|
@@ -0,0 +1,152 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 1999 - 2002, 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:
|
||||
|
||||
SmmGpiDispatch.h
|
||||
|
||||
Abstract:
|
||||
|
||||
EFI Smm Gpi Smi Child Protocol
|
||||
|
||||
Revision History
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _EFI_SMM_GPI_DISPATCH_H_
|
||||
#define _EFI_SMM_GPI_DISPATCH_H_
|
||||
|
||||
//
|
||||
// Global ID for the GPI SMI Protocol
|
||||
//
|
||||
#define EFI_SMM_GPI_DISPATCH_PROTOCOL_GUID \
|
||||
{ \
|
||||
0xe0744b81, 0x9513, 0x49cd, 0x8c, 0xea, 0xe9, 0x24, 0x5e, 0x70, 0x39, 0xda \
|
||||
}
|
||||
|
||||
EFI_FORWARD_DECLARATION (EFI_SMM_GPI_DISPATCH_PROTOCOL);
|
||||
|
||||
//
|
||||
// Related Definitions
|
||||
//
|
||||
//
|
||||
// GpiMask is a bit mask of 32 possible general purpose inputs that can generate a
|
||||
// a SMI. Bit 0 corresponds to logical GPI[0], 1 corresponds to logical GPI[1], etc.
|
||||
//
|
||||
// The logical GPI index to physical pin on device is described by the GPI device name
|
||||
// found on the same handle as the GpiSmi child dispatch protocol. The GPI device name
|
||||
// is defined as protocol with a GUID name and NULL protocol pointer.
|
||||
//
|
||||
typedef struct {
|
||||
UINTN GpiNum;
|
||||
} EFI_SMM_GPI_DISPATCH_CONTEXT;
|
||||
|
||||
//
|
||||
// Member functions
|
||||
//
|
||||
typedef
|
||||
VOID
|
||||
(EFIAPI *EFI_SMM_GPI_DISPATCH) (
|
||||
IN EFI_HANDLE DispatchHandle,
|
||||
IN EFI_SMM_GPI_DISPATCH_CONTEXT * DispatchContext
|
||||
);
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Dispatch function for a GPI SMI handler.
|
||||
|
||||
Arguments:
|
||||
DispatchHandle - Handle of this dispatch function.
|
||||
DispatchContext - Pointer to the dispatch function's context.
|
||||
The DispatchContext fields are filled in
|
||||
by the dispatching driver prior to
|
||||
invoking this dispatch function.
|
||||
|
||||
Returns:
|
||||
Nothing
|
||||
|
||||
--*/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMM_GPI_REGISTER) (
|
||||
IN EFI_SMM_GPI_DISPATCH_PROTOCOL * This,
|
||||
IN EFI_SMM_GPI_DISPATCH DispatchFunction,
|
||||
IN EFI_SMM_GPI_DISPATCH_CONTEXT * DispatchContext,
|
||||
OUT EFI_HANDLE * DispatchHandle
|
||||
);
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Register a child SMI source dispatch function with a parent SMM driver
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
DispatchFunction - Pointer to dispatch function to be invoked for
|
||||
this SMI source
|
||||
DispatchContext - Pointer to the dispatch function's context.
|
||||
The caller fills this context in before calling
|
||||
the register function to indicate to the register
|
||||
function the GPI(s) for which the dispatch function
|
||||
should be invoked.
|
||||
DispatchHandle - Handle of dispatch function, for when interfacing
|
||||
with the parent Sx state SMM driver.
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - The dispatch function has been successfully
|
||||
registered and the SMI source has been enabled.
|
||||
EFI_DEVICE_ERROR - The driver was unable to enable the SMI source.
|
||||
EFI_OUT_OF_RESOURCES - Not enough memory (system or SMM) to manage this
|
||||
child.
|
||||
EFI_INVALID_PARAMETER - DispatchContext is invalid. The GPI input value
|
||||
is not within valid range.
|
||||
|
||||
--*/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMM_GPI_UNREGISTER) (
|
||||
IN EFI_SMM_GPI_DISPATCH_PROTOCOL * This,
|
||||
IN EFI_HANDLE DispatchHandle
|
||||
);
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Unregister a child SMI source dispatch function with a parent SMM driver
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
DispatchHandle - Handle of dispatch function to deregister.
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - The dispatch function has been successfully
|
||||
unregistered and the SMI source has been disabled
|
||||
if there are no other registered child dispatch
|
||||
functions for this SMI source.
|
||||
EFI_INVALID_PARAMETER - Handle is invalid.
|
||||
other - TBD
|
||||
|
||||
--*/
|
||||
|
||||
//
|
||||
// Interface structure for the SMM GPI SMI Dispatch Protocol
|
||||
//
|
||||
typedef struct _EFI_SMM_GPI_DISPATCH_PROTOCOL {
|
||||
EFI_SMM_GPI_REGISTER Register;
|
||||
EFI_SMM_GPI_UNREGISTER UnRegister;
|
||||
UINTN NumSupportedGpis;
|
||||
} EFI_SMM_GPI_DISPATCH_PROTOCOL;
|
||||
|
||||
extern EFI_GUID gEfiSmmGpiDispatchProtocolGuid;
|
||||
|
||||
#endif
|
@@ -0,0 +1,31 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 1999 - 2002, 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:
|
||||
|
||||
SmmIchnDispatch.c
|
||||
|
||||
Abstract:
|
||||
|
||||
EFI Smm ICH N Smi Child Protocol
|
||||
|
||||
Revision History
|
||||
|
||||
--*/
|
||||
|
||||
#include "Tiano.h"
|
||||
#include EFI_PROTOCOL_DEFINITION (SmmIchnDispatch)
|
||||
|
||||
EFI_GUID gEfiSmmIchnDispatchProtocolGuid = EFI_SMM_ICHN_DISPATCH_PROTOCOL_GUID;
|
||||
|
||||
EFI_GUID_STRING
|
||||
(&gEfiSmmIchnDispatchProtocolGuid, "SMM ICHn SMI Dispatch Protocol", "EFI 2.0 SMM ICHn SMI Dispatch Protocol");
|
@@ -0,0 +1,204 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 1999 - 2007, 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:
|
||||
|
||||
SmmIchnDispatch.h
|
||||
|
||||
Abstract:
|
||||
|
||||
EFI Smm ICH [N] Specific Smi Child Protocol
|
||||
|
||||
Revision History
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _EFI_SMM_ICHN_DISPATCH_H_
|
||||
#define _EFI_SMM_ICHN_DISPATCH_H_
|
||||
|
||||
//
|
||||
// Global ID for the ICH SMI Protocol
|
||||
//
|
||||
#define EFI_SMM_ICHN_DISPATCH_PROTOCOL_GUID \
|
||||
{ \
|
||||
0xc50b323e, 0x9075, 0x4f2a, 0xac, 0x8e, 0xd2, 0x59, 0x6a, 0x10, 0x85, 0xcc \
|
||||
}
|
||||
|
||||
EFI_FORWARD_DECLARATION (EFI_SMM_ICHN_DISPATCH_PROTOCOL);
|
||||
|
||||
//
|
||||
// Related Definitions
|
||||
//
|
||||
//
|
||||
// ICHN Specific SMIs. These are miscellaneous SMI sources that are supported by the
|
||||
// ICHN specific SMI implementation. These may change over time. TrapNumber is only
|
||||
// valid if the Type is Trap.
|
||||
//
|
||||
typedef enum {
|
||||
//
|
||||
// NOTE: NEVER delete items from this list/enumeration! Doing so will prevent other versions
|
||||
// of the code from compiling. If the ICH version your driver is written for doesn't support
|
||||
// some of these SMIs, then simply return EFI_UNSUPPORTED when a child/client tries to register
|
||||
// for them.
|
||||
//
|
||||
IchnMch,
|
||||
IchnPme,
|
||||
IchnRtcAlarm,
|
||||
IchnRingIndicate,
|
||||
IchnAc97Wake,
|
||||
IchnSerialIrq,
|
||||
IchnY2KRollover,
|
||||
IchnTcoTimeout,
|
||||
IchnOsTco,
|
||||
IchnNmi,
|
||||
IchnIntruderDetect,
|
||||
IchnBiosWp,
|
||||
IchnMcSmi,
|
||||
IchnPmeB0,
|
||||
IchnThrmSts,
|
||||
IchnSmBus,
|
||||
IchnIntelUsb2,
|
||||
IchnMonSmi7,
|
||||
IchnMonSmi6,
|
||||
IchnMonSmi5,
|
||||
IchnMonSmi4,
|
||||
IchnDevTrap13,
|
||||
IchnDevTrap12,
|
||||
IchnDevTrap11,
|
||||
IchnDevTrap10,
|
||||
IchnDevTrap9,
|
||||
IchnDevTrap8,
|
||||
IchnDevTrap7,
|
||||
IchnDevTrap6,
|
||||
IchnDevTrap5,
|
||||
IchnDevTrap3,
|
||||
IchnDevTrap2,
|
||||
IchnDevTrap1,
|
||||
IchnDevTrap0,
|
||||
IchnIoTrap3,
|
||||
IchnIoTrap2,
|
||||
IchnIoTrap1,
|
||||
IchnIoTrap0,
|
||||
IchnPciExpress,
|
||||
IchnMonitor,
|
||||
IchnSpi,
|
||||
IchnQRT,
|
||||
IchnGpioUnlock,
|
||||
//
|
||||
// INSERT NEW ITEMS JUST BEFORE THIS LINE
|
||||
//
|
||||
NUM_ICHN_TYPES // the number of items in this enumeration
|
||||
} EFI_SMM_ICHN_SMI_TYPE;
|
||||
|
||||
typedef struct {
|
||||
EFI_SMM_ICHN_SMI_TYPE Type;
|
||||
} EFI_SMM_ICHN_DISPATCH_CONTEXT;
|
||||
|
||||
//
|
||||
// Member functions
|
||||
//
|
||||
typedef
|
||||
VOID
|
||||
(EFIAPI *EFI_SMM_ICHN_DISPATCH) (
|
||||
IN EFI_HANDLE DispatchHandle,
|
||||
IN EFI_SMM_ICHN_DISPATCH_CONTEXT * DispatchContext
|
||||
);
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Dispatch function for a ICH n specific SMI handler.
|
||||
|
||||
Arguments:
|
||||
DispatchHandle - Handle of this dispatch function.
|
||||
DispatchContext - Pointer to the dispatch function's context.
|
||||
The DispatchContext fields are filled in
|
||||
by the dispatching driver prior to
|
||||
invoking this dispatch function.
|
||||
|
||||
Returns:
|
||||
Nothing
|
||||
|
||||
--*/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMM_ICHN_REGISTER) (
|
||||
IN EFI_SMM_ICHN_DISPATCH_PROTOCOL * This,
|
||||
IN EFI_SMM_ICHN_DISPATCH DispatchFunction,
|
||||
IN EFI_SMM_ICHN_DISPATCH_CONTEXT * DispatchContext,
|
||||
OUT EFI_HANDLE * DispatchHandle
|
||||
);
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Register a child SMI source dispatch function with a parent SMM driver
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
DispatchFunction - Pointer to dispatch function to be invoked for
|
||||
this SMI source
|
||||
DispatchContext - Pointer to the dispatch function's context.
|
||||
The caller fills this context in before calling
|
||||
the register function to indicate to the register
|
||||
function the ICHN SMI source for which the dispatch
|
||||
function should be invoked.
|
||||
DispatchHandle - Handle of dispatch function, for when interfacing
|
||||
with the parent Sx state SMM driver.
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - The dispatch function has been successfully
|
||||
registered and the SMI source has been enabled.
|
||||
EFI_DEVICE_ERROR - The driver was unable to enable the SMI source.
|
||||
EFI_OUT_OF_RESOURCES - Not enough memory (system or SMM) to manage this
|
||||
child.
|
||||
EFI_INVALID_PARAMETER - DispatchContext is invalid. The ICHN input value
|
||||
is not within valid range.
|
||||
|
||||
--*/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMM_ICHN_UNREGISTER) (
|
||||
IN EFI_SMM_ICHN_DISPATCH_PROTOCOL * This,
|
||||
IN EFI_HANDLE DispatchHandle
|
||||
);
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Unregister a child SMI source dispatch function with a parent SMM driver
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
DispatchHandle - Handle of dispatch function to deregister.
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - The dispatch function has been successfully
|
||||
unregistered and the SMI source has been disabled
|
||||
if there are no other registered child dispatch
|
||||
functions for this SMI source.
|
||||
EFI_INVALID_PARAMETER - Handle is invalid.
|
||||
other - TBD
|
||||
|
||||
--*/
|
||||
|
||||
//
|
||||
// Interface structure for the SMM Ich n specific SMI Dispatch Protocol
|
||||
//
|
||||
typedef struct _EFI_SMM_ICHN_DISPATCH_PROTOCOL {
|
||||
EFI_SMM_ICHN_REGISTER Register;
|
||||
EFI_SMM_ICHN_UNREGISTER UnRegister;
|
||||
} EFI_SMM_ICHN_DISPATCH_PROTOCOL;
|
||||
|
||||
extern EFI_GUID gEfiSmmIchnDispatchProtocolGuid;
|
||||
|
||||
#endif
|
@@ -0,0 +1,34 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 1999 - 2002, 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:
|
||||
|
||||
SmmPeriodicTimerDispatch.c
|
||||
|
||||
Abstract:
|
||||
|
||||
EFI Smm Periodic Timer Smi Child Protocol
|
||||
|
||||
Revision History
|
||||
|
||||
--*/
|
||||
|
||||
#include "Tiano.h"
|
||||
#include EFI_PROTOCOL_DEFINITION (SmmPeriodicTimerDispatch)
|
||||
|
||||
EFI_GUID gEfiSmmPeriodicTimerDispatchProtocolGuid = EFI_SMM_PERIODIC_TIMER_DISPATCH_PROTOCOL_GUID;
|
||||
|
||||
EFI_GUID_STRING
|
||||
(
|
||||
&gEfiSmmPeriodicTimerDispatchProtocolGuid, "SMM Periodic Timer SMI Dispatch Protocol",
|
||||
"EFI 2.0 SMM Periodic Timer SMI Dispatch Protocol"
|
||||
);
|
@@ -0,0 +1,205 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 1999 - 2002, 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:
|
||||
|
||||
SmmPeriodicTimerDispatch.h
|
||||
|
||||
Abstract:
|
||||
|
||||
EFI Smm Periodic Timer Smi Child Protocol
|
||||
|
||||
Revision History
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _EFI_SMM_PERIODIC_TIMER_DISPATCH_H_
|
||||
#define _EFI_SMM_PERIODIC_TIMER_DISPATCH_H_
|
||||
|
||||
//
|
||||
// Global ID for the Periodic Timer SMI Protocol
|
||||
//
|
||||
#define EFI_SMM_PERIODIC_TIMER_DISPATCH_PROTOCOL_GUID \
|
||||
{ \
|
||||
0x9cca03fc, 0x4c9e, 0x4a19, 0x9b, 0x6, 0xed, 0x7b, 0x47, 0x9b, 0xde, 0x55 \
|
||||
}
|
||||
|
||||
EFI_FORWARD_DECLARATION (EFI_SMM_PERIODIC_TIMER_DISPATCH_PROTOCOL);
|
||||
|
||||
//
|
||||
// Related Definitions
|
||||
//
|
||||
//
|
||||
// Period is the minimum period of time in 100 nanosecond units that child gets called.
|
||||
// The child will be called back after a time greater than the time Period.
|
||||
//
|
||||
// SmiTickInterval is the period of time interval between SMIs. Children of this interface
|
||||
// should use this field when registering for periodic timer intervals when a finer
|
||||
// granularity periodic SMI is desired. Valid values for this field are those returned
|
||||
// by GetNextInterval. A value of 0 indicates the parent is allowed to use any SMI
|
||||
// interval period to satisfy the requested period.
|
||||
// Example: A chipset supports periodic SMIs on every 64ms or 2 seconds.
|
||||
// A child wishes schedule a period SMI to fire on a period of 3 seconds, there
|
||||
// are several ways to approach the problem:
|
||||
// 1. The child may accept a 4 second periodic rate, in which case it registers with
|
||||
// Period = 40000
|
||||
// SmiTickInterval = 20000
|
||||
// The resulting SMI will occur every 2 seconds with the child called back on
|
||||
// every 2nd SMI.
|
||||
// NOTE: the same result would occur if the child set SmiTickInterval = 0.
|
||||
// 2. The child may choose the finer granularity SMI (64ms):
|
||||
// Period = 30000
|
||||
// SmiTickInterval = 640
|
||||
// The resulting SMI will occur every 64ms with the child called back on
|
||||
// every 47th SMI.
|
||||
// NOTE: the child driver should be aware that this will result in more
|
||||
// SMIs occuring during system runtime which can negatively impact system
|
||||
// performance.
|
||||
//
|
||||
// ElapsedTime is the actual time in 100 nanosecond units elapsed since last called, a
|
||||
// value of 0 indicates an unknown amount of time.
|
||||
//
|
||||
typedef struct {
|
||||
UINT64 Period;
|
||||
UINT64 SmiTickInterval;
|
||||
UINT64 ElapsedTime;
|
||||
} EFI_SMM_PERIODIC_TIMER_DISPATCH_CONTEXT;
|
||||
|
||||
//
|
||||
// Member functions
|
||||
//
|
||||
typedef
|
||||
VOID
|
||||
(EFIAPI *EFI_SMM_PERIODIC_TIMER_DISPATCH) (
|
||||
IN EFI_HANDLE DispatchHandle,
|
||||
IN EFI_SMM_PERIODIC_TIMER_DISPATCH_CONTEXT * DispatchContext
|
||||
);
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Dispatch function for a Periodic Timer SMI handler.
|
||||
|
||||
Arguments:
|
||||
DispatchHandle - Handle of this dispatch function.
|
||||
DispatchContext - Pointer to the dispatch function's context.
|
||||
The DispatchContext fields are filled in
|
||||
by the dispatching driver prior to
|
||||
invoking this dispatch function.
|
||||
|
||||
Returns:
|
||||
Nothing
|
||||
|
||||
--*/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMM_PERIODIC_TIMER_INTERVAL) (
|
||||
IN EFI_SMM_PERIODIC_TIMER_DISPATCH_PROTOCOL * This,
|
||||
IN OUT UINT64 **SmiTickInterval
|
||||
);
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Returns the next SMI tick period supported by the chipset. The order
|
||||
returned is from longest to shortest interval period.
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
SmiTickInterval - Pointer to pointer of next shorter SMI interval
|
||||
period supported by the child. This parameter
|
||||
works as a get-first, get-next field. The first
|
||||
time this function is called, *SmiTickInterval
|
||||
should be set to NULL to get the longest SMI
|
||||
interval. The returned *SmiTickInterval should
|
||||
be passed in on subsequent calls to get
|
||||
the next shorter interval period until
|
||||
*SmiTickInterval = NULL.
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS
|
||||
|
||||
--*/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMM_PERIODIC_TIMER_REGISTER) (
|
||||
IN EFI_SMM_PERIODIC_TIMER_DISPATCH_PROTOCOL * This,
|
||||
IN EFI_SMM_PERIODIC_TIMER_DISPATCH DispatchFunction,
|
||||
IN EFI_SMM_PERIODIC_TIMER_DISPATCH_CONTEXT * DispatchContext,
|
||||
OUT EFI_HANDLE * DispatchHandle
|
||||
);
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Register a child SMI source dispatch function with a parent SMM driver
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
DispatchFunction - Pointer to dispatch function to be invoked for
|
||||
this SMI source
|
||||
DispatchContext - Pointer to the dispatch function's context.
|
||||
The caller fills this context in before calling
|
||||
the register function to indicate to the register
|
||||
function the period at which the dispatch function
|
||||
should be invoked.
|
||||
DispatchHandle - Handle of dispatch function, for when interfacing
|
||||
with the parent Sx state SMM driver.
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - The dispatch function has been successfully
|
||||
registered and the SMI source has been enabled.
|
||||
EFI_DEVICE_ERROR - The driver was unable to enable the SMI source.
|
||||
EFI_OUT_OF_RESOURCES - Not enough memory (system or SMM) to manage this
|
||||
child.
|
||||
EFI_INVALID_PARAMETER - DispatchContext is invalid. The period input value
|
||||
is not within valid range.
|
||||
|
||||
--*/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMM_PERIODIC_TIMER_UNREGISTER) (
|
||||
IN EFI_SMM_PERIODIC_TIMER_DISPATCH_PROTOCOL * This,
|
||||
IN EFI_HANDLE DispatchHandle
|
||||
);
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Unregister a child SMI source dispatch function with a parent SMM driver
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
DispatchHandle - Handle of dispatch function to deregister.
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - The dispatch function has been successfully
|
||||
unregistered and the SMI source has been disabled
|
||||
if there are no other registered child dispatch
|
||||
functions for this SMI source.
|
||||
EFI_INVALID_PARAMETER - Handle is invalid.
|
||||
other - TBD
|
||||
|
||||
--*/
|
||||
|
||||
//
|
||||
// Interface structure for the SMM Periodic Timer Dispatch Protocol
|
||||
//
|
||||
typedef struct _EFI_SMM_PERIODIC_TIMER_DISPATCH_PROTOCOL {
|
||||
EFI_SMM_PERIODIC_TIMER_REGISTER Register;
|
||||
EFI_SMM_PERIODIC_TIMER_UNREGISTER UnRegister;
|
||||
EFI_SMM_PERIODIC_TIMER_INTERVAL GetNextShorterInterval;
|
||||
} EFI_SMM_PERIODIC_TIMER_DISPATCH_PROTOCOL;
|
||||
|
||||
extern EFI_GUID gEfiSmmPeriodicTimerDispatchProtocolGuid;
|
||||
|
||||
#endif
|
@@ -0,0 +1,34 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 1999 - 2002, 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:
|
||||
|
||||
SmmPowerButtonDispatch.c
|
||||
|
||||
Abstract:
|
||||
|
||||
EFI Smm Power Button Smi Child Protocol
|
||||
|
||||
Revision History
|
||||
|
||||
--*/
|
||||
|
||||
#include "Tiano.h"
|
||||
#include EFI_PROTOCOL_DEFINITION (SmmPowerButtonDispatch)
|
||||
|
||||
EFI_GUID gEfiSmmPowerButtonDispatchProtocolGuid = EFI_SMM_POWER_BUTTON_DISPATCH_PROTOCOL_GUID;
|
||||
|
||||
EFI_GUID_STRING
|
||||
(
|
||||
&gEfiSmmPowerButtonDispatchProtocolGuid, "SMM Power Button SMI Dispatch Protocol",
|
||||
"EFI 2.0 SMM Power Button SMI Dispatch Protocol"
|
||||
);
|
@@ -0,0 +1,153 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 1999 - 2002, 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:
|
||||
|
||||
SmmPowerButtonDispatch.h
|
||||
|
||||
Abstract:
|
||||
|
||||
EFI Smm Power Button Smi Child Protocol
|
||||
|
||||
Revision History
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _EFI_SMM_POWER_BUTTON_DISPATCH_H_
|
||||
#define _EFI_SMM_POWER_BUTTON_DISPATCH_H_
|
||||
|
||||
//
|
||||
// Global ID for the Power Button SMI Protocol
|
||||
//
|
||||
#define EFI_SMM_POWER_BUTTON_DISPATCH_PROTOCOL_GUID \
|
||||
{ \
|
||||
0xb709efa0, 0x47a6, 0x4b41, 0xb9, 0x31, 0x12, 0xec, 0xe7, 0xa8, 0xee, 0x56 \
|
||||
}
|
||||
|
||||
EFI_FORWARD_DECLARATION (EFI_SMM_POWER_BUTTON_DISPATCH_PROTOCOL);
|
||||
|
||||
//
|
||||
// Related Definitions
|
||||
//
|
||||
//
|
||||
// Power Button. Example, Use for changing LEDs before ACPI OS is on.
|
||||
// - DXE/BDS Phase
|
||||
// - OS Install Phase
|
||||
//
|
||||
typedef enum {
|
||||
PowerButtonEntry,
|
||||
PowerButtonExit
|
||||
} EFI_POWER_BUTTON_PHASE;
|
||||
|
||||
typedef struct {
|
||||
EFI_POWER_BUTTON_PHASE Phase;
|
||||
} EFI_SMM_POWER_BUTTON_DISPATCH_CONTEXT;
|
||||
|
||||
//
|
||||
// Member functions
|
||||
//
|
||||
typedef
|
||||
VOID
|
||||
(EFIAPI *EFI_SMM_POWER_BUTTON_DISPATCH) (
|
||||
IN EFI_HANDLE DispatchHandle,
|
||||
IN EFI_SMM_POWER_BUTTON_DISPATCH_CONTEXT * DispatchContext
|
||||
);
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Dispatch function for a Power Button SMI handler.
|
||||
|
||||
Arguments:
|
||||
DispatchHandle - Handle of this dispatch function.
|
||||
DispatchContext - Pointer to the dispatch function's context.
|
||||
The DispatchContext fields are filled in
|
||||
by the dispatching driver prior to
|
||||
invoking this dispatch function.
|
||||
|
||||
Returns:
|
||||
Nothing
|
||||
|
||||
--*/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMM_POWER_BUTTON_REGISTER) (
|
||||
IN EFI_SMM_POWER_BUTTON_DISPATCH_PROTOCOL * This,
|
||||
IN EFI_SMM_POWER_BUTTON_DISPATCH DispatchFunction,
|
||||
IN EFI_SMM_POWER_BUTTON_DISPATCH_CONTEXT * DispatchContext,
|
||||
OUT EFI_HANDLE * DispatchHandle
|
||||
);
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Register a child SMI source dispatch function with a parent SMM driver
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
DispatchFunction - Pointer to dispatch function to be invoked for
|
||||
this SMI source
|
||||
DispatchContext - Pointer to the dispatch function's context.
|
||||
The caller fills this context in before calling
|
||||
the register function to indicate to the register
|
||||
function the Power Button SMI phase for which the dispatch
|
||||
function should be invoked.
|
||||
DispatchHandle - Handle of dispatch function, for when interfacing
|
||||
with the parent Sx state SMM driver.
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - The dispatch function has been successfully
|
||||
registered and the SMI source has been enabled.
|
||||
EFI_DEVICE_ERROR - The driver was unable to enable the SMI source.
|
||||
EFI_OUT_OF_RESOURCES - Not enough memory (system or SMM) to manage this
|
||||
child.
|
||||
EFI_INVALID_PARAMETER - DispatchContext is invalid. The Power Button SMI
|
||||
phase is not within valid range.
|
||||
|
||||
--*/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMM_POWER_BUTTON_UNREGISTER) (
|
||||
IN EFI_SMM_POWER_BUTTON_DISPATCH_PROTOCOL * This,
|
||||
IN EFI_HANDLE DispatchHandle
|
||||
);
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Unregister a child SMI source dispatch function with a parent SMM driver
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
DispatchHandle - Handle of dispatch function to deregister.
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - The dispatch function has been successfully
|
||||
unregistered and the SMI source has been disabled
|
||||
if there are no other registered child dispatch
|
||||
functions for this SMI source.
|
||||
EFI_INVALID_PARAMETER - Handle is invalid.
|
||||
other - TBD
|
||||
|
||||
--*/
|
||||
|
||||
//
|
||||
// Interface structure for the SMM Power Button SMI Dispatch Protocol
|
||||
//
|
||||
typedef struct _EFI_SMM_POWER_BUTTON_DISPATCH_PROTOCOL {
|
||||
EFI_SMM_POWER_BUTTON_REGISTER Register;
|
||||
EFI_SMM_POWER_BUTTON_UNREGISTER UnRegister;
|
||||
} EFI_SMM_POWER_BUTTON_DISPATCH_PROTOCOL;
|
||||
|
||||
extern EFI_GUID gEfiSmmPowerButtonDispatchProtocolGuid;
|
||||
|
||||
#endif
|
@@ -0,0 +1,34 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 1999 - 2002, 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:
|
||||
|
||||
SmmStandbyButtonDispatch.c
|
||||
|
||||
Abstract:
|
||||
|
||||
EFI Smm Standby Button Smi Child Protocol
|
||||
|
||||
Revision History
|
||||
|
||||
--*/
|
||||
|
||||
#include "Tiano.h"
|
||||
#include EFI_PROTOCOL_DEFINITION (SmmStandbyButtonDispatch)
|
||||
|
||||
EFI_GUID gEfiSmmStandbyButtonDispatchProtocolGuid = EFI_SMM_STANDBY_BUTTON_DISPATCH_PROTOCOL_GUID;
|
||||
|
||||
EFI_GUID_STRING
|
||||
(
|
||||
&gEfiSmmStandbyButtonDispatchProtocolGuid, "SMM Standby Button SMI Dispatch Protocol",
|
||||
"EFI 2.0 SMM Standby Button SMI Dispatch Protocol"
|
||||
);
|
@@ -0,0 +1,153 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 1999 - 2002, 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:
|
||||
|
||||
SmmStandbyButtonDispatch.h
|
||||
|
||||
Abstract:
|
||||
|
||||
EFI Smm Standby Button Smi Child Protocol
|
||||
|
||||
Revision History
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _EFI_SMM_STANDBY_BUTTON_DISPATCH_H_
|
||||
#define _EFI_SMM_STANDBY_BUTTON_DISPATCH_H_
|
||||
|
||||
//
|
||||
// Global ID for the Standby Button SMI Protocol
|
||||
//
|
||||
#define EFI_SMM_STANDBY_BUTTON_DISPATCH_PROTOCOL_GUID \
|
||||
{ \
|
||||
0x78965b98, 0xb0bf, 0x449e, 0x8b, 0x22, 0xd2, 0x91, 0x4e, 0x49, 0x8a, 0x98 \
|
||||
}
|
||||
|
||||
EFI_FORWARD_DECLARATION (EFI_SMM_STANDBY_BUTTON_DISPATCH_PROTOCOL);
|
||||
|
||||
//
|
||||
// Related Definitions
|
||||
//
|
||||
//
|
||||
// Standby Button. Example, Use for changing LEDs before ACPI OS is on.
|
||||
// - DXE/BDS Phase
|
||||
// - OS Install Phase
|
||||
//
|
||||
typedef enum {
|
||||
Entry,
|
||||
Exit
|
||||
} EFI_STANDBY_BUTTON_PHASE;
|
||||
|
||||
typedef struct {
|
||||
EFI_STANDBY_BUTTON_PHASE Phase;
|
||||
} EFI_SMM_STANDBY_BUTTON_DISPATCH_CONTEXT;
|
||||
|
||||
//
|
||||
// Member functions
|
||||
//
|
||||
typedef
|
||||
VOID
|
||||
(EFIAPI *EFI_SMM_STANDBY_BUTTON_DISPATCH) (
|
||||
IN EFI_HANDLE DispatchHandle,
|
||||
IN EFI_SMM_STANDBY_BUTTON_DISPATCH_CONTEXT * DispatchContext
|
||||
);
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Dispatch function for a Standby Button SMI handler.
|
||||
|
||||
Arguments:
|
||||
DispatchHandle - Handle of this dispatch function.
|
||||
DispatchContext - Pointer to the dispatch function's context.
|
||||
The DispatchContext fields are filled in
|
||||
by the dispatching driver prior to
|
||||
invoking this dispatch function.
|
||||
|
||||
Returns:
|
||||
Nothing
|
||||
|
||||
--*/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMM_STANDBY_BUTTON_REGISTER) (
|
||||
IN EFI_SMM_STANDBY_BUTTON_DISPATCH_PROTOCOL * This,
|
||||
IN EFI_SMM_STANDBY_BUTTON_DISPATCH DispatchFunction,
|
||||
IN EFI_SMM_STANDBY_BUTTON_DISPATCH_CONTEXT * DispatchContext,
|
||||
OUT EFI_HANDLE * DispatchHandle
|
||||
);
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Register a child SMI source dispatch function with a parent SMM driver
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
DispatchFunction - Pointer to dispatch function to be invoked for
|
||||
this SMI source
|
||||
DispatchContext - Pointer to the dispatch function's context.
|
||||
The caller fills this context in before calling
|
||||
the register function to indicate to the register
|
||||
function the Standby Button SMI phase for which the dispatch
|
||||
function should be invoked.
|
||||
DispatchHandle - Handle of dispatch function, for when interfacing
|
||||
with the parent Sx state SMM driver.
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - The dispatch function has been successfully
|
||||
registered and the SMI source has been enabled.
|
||||
EFI_DEVICE_ERROR - The driver was unable to enable the SMI source.
|
||||
EFI_OUT_OF_RESOURCES - Not enough memory (system or SMM) to manage this
|
||||
child.
|
||||
EFI_INVALID_PARAMETER - DispatchContext is invalid. The Standby Button SMI
|
||||
phase is not within valid range.
|
||||
|
||||
--*/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMM_STANDBY_BUTTON_UNREGISTER) (
|
||||
IN EFI_SMM_STANDBY_BUTTON_DISPATCH_PROTOCOL * This,
|
||||
IN EFI_HANDLE DispatchHandle
|
||||
);
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Unregister a child SMI source dispatch function with a parent SMM driver
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
DispatchHandle - Handle of dispatch function to deregister.
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - The dispatch function has been successfully
|
||||
unregistered and the SMI source has been disabled
|
||||
if there are no other registered child dispatch
|
||||
functions for this SMI source.
|
||||
EFI_INVALID_PARAMETER - Handle is invalid.
|
||||
other - TBD
|
||||
|
||||
--*/
|
||||
|
||||
//
|
||||
// Interface structure for the SMM Standby Button SMI Dispatch Protocol
|
||||
//
|
||||
typedef struct _EFI_SMM_STANDBY_BUTTON_DISPATCH_PROTOCOL {
|
||||
EFI_SMM_STANDBY_BUTTON_REGISTER Register;
|
||||
EFI_SMM_STANDBY_BUTTON_UNREGISTER UnRegister;
|
||||
} EFI_SMM_STANDBY_BUTTON_DISPATCH_PROTOCOL;
|
||||
|
||||
extern EFI_GUID gEfiSmmStandbyButtonDispatchProtocolGuid;
|
||||
|
||||
#endif
|
@@ -0,0 +1,30 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 1999 - 2002, 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:
|
||||
|
||||
SmmStatusCode.c
|
||||
|
||||
Abstract:
|
||||
|
||||
SMM Status code Protocol as defined in EFI 2.0 (for Status Code Architectural Protocol)
|
||||
|
||||
This code abstracts Status Code reporting.
|
||||
|
||||
--*/
|
||||
|
||||
#include "Tiano.h"
|
||||
#include EFI_PROTOCOL_DEFINITION (SmmStatusCode)
|
||||
|
||||
EFI_GUID gEfiSmmStatusCodeProtocolGuid = EFI_SMM_STATUS_CODE_PROTOCOL_GUID;
|
||||
|
||||
EFI_GUID_STRING(&gEfiSmmStatusCodeProtocolGuid, "SMM Status Code", "SMM Status Code Protocol");
|
@@ -0,0 +1,58 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 1999 - 2002, 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:
|
||||
|
||||
SmmStatusCode.h
|
||||
|
||||
Abstract:
|
||||
|
||||
SMM Status code Protocol as defined in the DXE CIS (Status Code Architectural Protocol)
|
||||
|
||||
This code abstracts SMM Status Code reporting.
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _PROTOCOL_SMM_STATUS_CODE_H__
|
||||
#define _PROTOCOL_SMM_STATUS_CODE_H__
|
||||
|
||||
//
|
||||
// Global ID for the Smm Status Code Protocol
|
||||
//
|
||||
#define EFI_SMM_STATUS_CODE_PROTOCOL_GUID \
|
||||
{ \
|
||||
0x6afd2b77, 0x98c1, 0x4acd, 0xa6, 0xf9, 0x8a, 0x94, 0x39, 0xde, 0xf, 0xb1 \
|
||||
}
|
||||
|
||||
extern EFI_GUID gEfiSmmStatusCodeProtocolGuid;
|
||||
|
||||
//
|
||||
// Forward reference for pure ANSI compatability
|
||||
//
|
||||
EFI_FORWARD_DECLARATION (EFI_SMM_STATUS_CODE_PROTOCOL);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMM_REPORT_STATUS_CODE) (
|
||||
IN EFI_SMM_STATUS_CODE_PROTOCOL * This,
|
||||
IN EFI_STATUS_CODE_TYPE CodeType,
|
||||
IN EFI_STATUS_CODE_VALUE Value,
|
||||
IN UINT32 Instance,
|
||||
IN EFI_GUID * CallerId,
|
||||
IN EFI_STATUS_CODE_DATA * Data OPTIONAL
|
||||
);
|
||||
|
||||
typedef struct _EFI_SMM_STATUS_CODE_PROTOCOL {
|
||||
EFI_SMM_REPORT_STATUS_CODE ReportStatusCode;
|
||||
} EFI_SMM_STATUS_CODE_PROTOCOL;
|
||||
|
||||
#endif
|
@@ -0,0 +1,30 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 1999 - 2002, 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:
|
||||
|
||||
SmmSwDispatch.c
|
||||
|
||||
Abstract:
|
||||
|
||||
EFI Smm Software Smi Child Protocol
|
||||
|
||||
Revision History
|
||||
|
||||
--*/
|
||||
|
||||
#include "Tiano.h"
|
||||
#include EFI_PROTOCOL_DEFINITION (SmmSwDispatch)
|
||||
|
||||
EFI_GUID gEfiSmmSwDispatchProtocolGuid = EFI_SMM_SW_DISPATCH_PROTOCOL_GUID;
|
||||
|
||||
EFI_GUID_STRING(&gEfiSmmSwDispatchProtocolGuid, "SMM Sw SMI Dispatch Protocol", "EFI 2.0 SMM Sw SMI Dispatch Protocol");
|
@@ -0,0 +1,151 @@
|
||||
/*++
|
||||
|
||||
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:
|
||||
|
||||
SmmSwDispatch.h
|
||||
|
||||
Abstract:
|
||||
|
||||
EFI Smm Software Smi Child Protocol
|
||||
|
||||
Revision History
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _EFI_SMM_SW_DISPATCH_H_
|
||||
#define _EFI_SMM_SW_DISPATCH_H_
|
||||
|
||||
//
|
||||
// Global ID for the SW SMI Protocol
|
||||
//
|
||||
#define EFI_SMM_SW_DISPATCH_PROTOCOL_GUID \
|
||||
{ \
|
||||
0xe541b773, 0xdd11, 0x420c, 0xb0, 0x26, 0xdf, 0x99, 0x36, 0x53, 0xf8, 0xbf \
|
||||
}
|
||||
|
||||
EFI_FORWARD_DECLARATION (EFI_SMM_SW_DISPATCH_PROTOCOL);
|
||||
|
||||
//
|
||||
// Related Definitions
|
||||
//
|
||||
//
|
||||
// A particular chipset may not support all possible software SMI input values.
|
||||
// For example, the ICH supports only values 00h to 0FFh. The parent only allows a single
|
||||
// child registration for each SwSmiInputValue.
|
||||
//
|
||||
typedef struct {
|
||||
UINTN SwSmiInputValue;
|
||||
} EFI_SMM_SW_DISPATCH_CONTEXT;
|
||||
|
||||
//
|
||||
// Member functions
|
||||
//
|
||||
typedef
|
||||
VOID
|
||||
(EFIAPI *EFI_SMM_SW_DISPATCH) (
|
||||
IN EFI_HANDLE DispatchHandle,
|
||||
IN EFI_SMM_SW_DISPATCH_CONTEXT * DispatchContext
|
||||
);
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Dispatch function for a Software SMI handler.
|
||||
|
||||
Arguments:
|
||||
DispatchHandle - Handle of this dispatch function.
|
||||
DispatchContext - Pointer to the dispatch function's context.
|
||||
The SwSmiInputValue field is filled in
|
||||
by the software dispatch driver prior to
|
||||
invoking this dispatch function.
|
||||
The dispatch function will only be called
|
||||
for input values for which it is registered.
|
||||
|
||||
Returns:
|
||||
Nothing
|
||||
|
||||
--*/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMM_SW_REGISTER) (
|
||||
IN EFI_SMM_SW_DISPATCH_PROTOCOL * This,
|
||||
IN EFI_SMM_SW_DISPATCH DispatchFunction,
|
||||
IN EFI_SMM_SW_DISPATCH_CONTEXT * DispatchContext,
|
||||
OUT EFI_HANDLE * DispatchHandle
|
||||
);
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Register a child SMI source dispatch function with a parent SMM driver
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
DispatchFunction - Pointer to dispatch function to be invoked for
|
||||
this SMI source
|
||||
DispatchContext - Pointer to the dispatch function's context.
|
||||
The caller fills this context in before calling
|
||||
the register function to indicate to the register
|
||||
function which Software SMI input value the
|
||||
dispatch function should be invoked for.
|
||||
DispatchHandle - Handle of dispatch function, for when interfacing
|
||||
with the parent Sx state SMM driver.
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - The dispatch function has been successfully
|
||||
registered and the SMI source has been enabled.
|
||||
EFI_DEVICE_ERROR - The SW driver was unable to enable the SMI source.
|
||||
EFI_OUT_OF_RESOURCES - Not enough memory (system or SMM) to manage this
|
||||
child.
|
||||
EFI_INVALID_PARAMETER - DispatchContext is invalid. The SW SMI input value
|
||||
is not within valid range.
|
||||
|
||||
--*/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMM_SW_UNREGISTER) (
|
||||
IN EFI_SMM_SW_DISPATCH_PROTOCOL * This,
|
||||
IN EFI_HANDLE DispatchHandle
|
||||
);
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Unregister a child SMI source dispatch function with a parent SMM driver
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
DispatchHandle - Handle of dispatch function to deregister.
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - The dispatch function has been successfully
|
||||
unregistered and the SMI source has been disabled
|
||||
if there are no other registered child dispatch
|
||||
functions for this SMI source.
|
||||
EFI_INVALID_PARAMETER - Handle is invalid.
|
||||
other - TBD
|
||||
|
||||
--*/
|
||||
|
||||
//
|
||||
// Interface structure for the SMM Software SMI Dispatch Protocol
|
||||
//
|
||||
typedef struct _EFI_SMM_SW_DISPATCH_PROTOCOL {
|
||||
EFI_SMM_SW_REGISTER Register;
|
||||
EFI_SMM_SW_UNREGISTER UnRegister;
|
||||
UINTN MaximumSwiValue;
|
||||
} EFI_SMM_SW_DISPATCH_PROTOCOL;
|
||||
|
||||
extern EFI_GUID gEfiSmmSwDispatchProtocolGuid;
|
||||
|
||||
#endif
|
@@ -0,0 +1,30 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 1999 - 2002, 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:
|
||||
|
||||
SmmSxDispatch.c
|
||||
|
||||
Abstract:
|
||||
|
||||
EFI Smm Sx Smi Child Protocol
|
||||
|
||||
Revision History
|
||||
|
||||
--*/
|
||||
|
||||
#include "Tiano.h"
|
||||
#include EFI_PROTOCOL_DEFINITION (SmmSxDispatch)
|
||||
|
||||
EFI_GUID gEfiSmmSxDispatchProtocolGuid = EFI_SMM_SX_DISPATCH_PROTOCOL_GUID;
|
||||
|
||||
EFI_GUID_STRING(&gEfiSmmSxDispatchProtocolGuid, "SMM Sx Dispatch Protocol", "EFI 2.0 SMM Sx Dispatch Protocol");
|
@@ -0,0 +1,170 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 1999 - 2002, 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:
|
||||
|
||||
SmmSxDispatch.h
|
||||
|
||||
Abstract:
|
||||
|
||||
EFI Smm Sx Smi Child Protocol
|
||||
|
||||
Revision History
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _EFI_SMM_SX_DISPATCH_H_
|
||||
#define _EFI_SMM_SX_DISPATCH_H_
|
||||
|
||||
//
|
||||
// Global ID for the Sx SMI Protocol
|
||||
//
|
||||
#define EFI_SMM_SX_DISPATCH_PROTOCOL_GUID \
|
||||
{ \
|
||||
0x14fc52be, 0x1dc, 0x426c, 0x91, 0xae, 0xa2, 0x3c, 0x3e, 0x22, 0xa, 0xe8 \
|
||||
}
|
||||
|
||||
EFI_FORWARD_DECLARATION (EFI_SMM_SX_DISPATCH_PROTOCOL);
|
||||
|
||||
//
|
||||
// Related Definitions
|
||||
//
|
||||
typedef enum {
|
||||
SxS0,
|
||||
SxS1,
|
||||
SxS2,
|
||||
SxS3,
|
||||
SxS4,
|
||||
SxS5,
|
||||
EfiMaximumSleepType
|
||||
} EFI_SLEEP_TYPE;
|
||||
|
||||
typedef enum {
|
||||
SxEntry,
|
||||
SxExit,
|
||||
EfiMaximumPhase
|
||||
} EFI_SLEEP_PHASE;
|
||||
|
||||
typedef struct {
|
||||
EFI_SLEEP_TYPE Type;
|
||||
EFI_SLEEP_PHASE Phase;
|
||||
} EFI_SMM_SX_DISPATCH_CONTEXT;
|
||||
|
||||
//
|
||||
// Member functions
|
||||
//
|
||||
typedef
|
||||
VOID
|
||||
(EFIAPI *EFI_SMM_SX_DISPATCH) (
|
||||
IN EFI_HANDLE DispatchHandle,
|
||||
IN EFI_SMM_SX_DISPATCH_CONTEXT * DispatchContext
|
||||
);
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Dispatch function for a Sx state SMI handler.
|
||||
|
||||
Arguments:
|
||||
DispatchHandle - Handle of this dispatch function.
|
||||
DispatchContext - Pointer to the dispatch function's context.
|
||||
The Type and Phase fields are filled in
|
||||
by the Sx dispatch driver prior to invoking
|
||||
this dispatch function.
|
||||
For this intertace, the Sx driver will call the
|
||||
dispatch function for all Sx type and phases,
|
||||
so the Sx state handler(s) must check the Type
|
||||
and Phase field of the Dispatch context and act
|
||||
accordingly.
|
||||
|
||||
Returns:
|
||||
Nothing
|
||||
|
||||
--*/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMM_SX_REGISTER) (
|
||||
IN EFI_SMM_SX_DISPATCH_PROTOCOL * This,
|
||||
IN EFI_SMM_SX_DISPATCH DispatchFunction,
|
||||
IN EFI_SMM_SX_DISPATCH_CONTEXT * DispatchContext,
|
||||
OUT EFI_HANDLE * DispatchHandle
|
||||
);
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Register a child SMI source dispatch function with a parent SMM driver
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
DispatchFunction - Pointer to dispatch function to be invoked for
|
||||
this SMI source
|
||||
DispatchContext - Pointer to the dispatch function's context.
|
||||
The caller fills this context in before calling
|
||||
the register function to indicate to the register
|
||||
function which Sx state type and phase the caller
|
||||
wishes to be called back on. For this intertace,
|
||||
the Sx driver will call the registered handlers for
|
||||
all Sx type and phases, so the Sx state handler(s)
|
||||
must check the Type and Phase field of the Dispatch
|
||||
context and act accordingly.
|
||||
DispatchHandle - Handle of dispatch function, for when interfacing
|
||||
with the parent Sx state SMM driver.
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - The dispatch function has been successfully
|
||||
registered and the SMI source has been enabled.
|
||||
EFI_UNSUPPORTED - The Sx driver or hardware does not support that
|
||||
Sx Type/Phase.
|
||||
EFI_DEVICE_ERROR - The Sx driver was unable to enable the SMI source.
|
||||
EFI_OUT_OF_RESOURCES - Not enough memory (system or SMM) to manage this
|
||||
child.
|
||||
EFI_INVALID_PARAMETER - DispatchContext is invalid. Type & Phase are not
|
||||
within valid range.
|
||||
|
||||
--*/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMM_SX_UNREGISTER) (
|
||||
IN EFI_SMM_SX_DISPATCH_PROTOCOL * This,
|
||||
IN EFI_HANDLE DispatchHandle
|
||||
);
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Unregister a child SMI source dispatch function with a parent SMM driver
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
DispatchHandle - Handle of dispatch function to deregister.
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - The dispatch function has been successfully unregistered and the
|
||||
SMI source has been disabled if there are no other registered child
|
||||
dispatch functions for this SMI source.
|
||||
EFI_INVALID_PARAMETER - Handle is invalid.
|
||||
other - TBD
|
||||
|
||||
--*/
|
||||
|
||||
//
|
||||
// Interface structure for the SMM Child Dispatch Protocol
|
||||
//
|
||||
typedef struct _EFI_SMM_SX_DISPATCH_PROTOCOL {
|
||||
EFI_SMM_SX_REGISTER Register;
|
||||
EFI_SMM_SX_UNREGISTER UnRegister;
|
||||
} EFI_SMM_SX_DISPATCH_PROTOCOL;
|
||||
|
||||
extern EFI_GUID gEfiSmmSxDispatchProtocolGuid;
|
||||
|
||||
#endif
|
@@ -0,0 +1,31 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 1999 - 2002, 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:
|
||||
|
||||
SmmUsbDispatch.c
|
||||
|
||||
Abstract:
|
||||
|
||||
EFI Smm USB Smi Child Protocol
|
||||
|
||||
Revision History
|
||||
|
||||
--*/
|
||||
|
||||
#include "Tiano.h"
|
||||
#include EFI_PROTOCOL_DEFINITION (SmmUsbDispatch)
|
||||
|
||||
EFI_GUID gEfiSmmUsbDispatchProtocolGuid = EFI_SMM_USB_DISPATCH_PROTOCOL_GUID;
|
||||
|
||||
EFI_GUID_STRING
|
||||
(&gEfiSmmUsbDispatchProtocolGuid, "SMM USB SMI Dispatch Protocol", "EFI 2.0 SMM USB SMI Dispatch Protocol");
|
@@ -0,0 +1,149 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 1999 - 2002, 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:
|
||||
|
||||
SmmUsbDispatch.h
|
||||
|
||||
Abstract:
|
||||
|
||||
EFI Smm USB Smi Child Protocol
|
||||
|
||||
Revision History
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _EFI_SMM_USB_DISPATCH_H_
|
||||
#define _EFI_SMM_USB_DISPATCH_H_
|
||||
|
||||
//
|
||||
// Global ID for the USB Protocol
|
||||
//
|
||||
#define EFI_SMM_USB_DISPATCH_PROTOCOL_GUID \
|
||||
{ \
|
||||
0xa05b6ffd, 0x87af, 0x4e42, 0x95, 0xc9, 0x62, 0x28, 0xb6, 0x3c, 0xf3, 0xf3 \
|
||||
}
|
||||
|
||||
EFI_FORWARD_DECLARATION (EFI_SMM_USB_DISPATCH_PROTOCOL);
|
||||
|
||||
//
|
||||
// Related Definitions
|
||||
//
|
||||
typedef enum {
|
||||
UsbLegacy,
|
||||
UsbWake
|
||||
} EFI_USB_SMI_TYPE;
|
||||
|
||||
typedef struct {
|
||||
EFI_USB_SMI_TYPE Type;
|
||||
EFI_DEVICE_PATH_PROTOCOL *Device;
|
||||
} EFI_SMM_USB_DISPATCH_CONTEXT;
|
||||
|
||||
//
|
||||
// Member functions
|
||||
//
|
||||
typedef
|
||||
VOID
|
||||
(EFIAPI *EFI_SMM_USB_DISPATCH) (
|
||||
IN EFI_HANDLE DispatchHandle,
|
||||
IN EFI_SMM_USB_DISPATCH_CONTEXT * DispatchContext
|
||||
);
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Dispatch function for a USB SMI handler.
|
||||
|
||||
Arguments:
|
||||
DispatchHandle - Handle of this dispatch function.
|
||||
DispatchContext - Pointer to the dispatch function's context.
|
||||
The DispatchContext fields are filled in
|
||||
by the dispatching driver prior to
|
||||
invoking this dispatch function.
|
||||
|
||||
Returns:
|
||||
Nothing
|
||||
|
||||
--*/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMM_USB_REGISTER) (
|
||||
IN EFI_SMM_USB_DISPATCH_PROTOCOL * This,
|
||||
IN EFI_SMM_USB_DISPATCH DispatchFunction,
|
||||
IN EFI_SMM_USB_DISPATCH_CONTEXT * DispatchContext,
|
||||
OUT EFI_HANDLE * DispatchHandle
|
||||
);
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Register a child SMI source dispatch function with a parent SMM driver
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
DispatchFunction - Pointer to dispatch function to be invoked for
|
||||
this SMI source
|
||||
DispatchContext - Pointer to the dispatch function's context.
|
||||
The caller fills this context in before calling
|
||||
the register function to indicate to the register
|
||||
function the USB SMI types for which the dispatch
|
||||
function should be invoked.
|
||||
DispatchHandle - Handle of dispatch function, for when interfacing
|
||||
with the parent Sx state SMM driver.
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - The dispatch function has been successfully
|
||||
registered and the SMI source has been enabled.
|
||||
EFI_DEVICE_ERROR - The driver was unable to enable the SMI source.
|
||||
EFI_OUT_OF_RESOURCES - Not enough memory (system or SMM) to manage this
|
||||
child.
|
||||
EFI_INVALID_PARAMETER - DispatchContext is invalid. The USB SMI type
|
||||
is not within valid range.
|
||||
|
||||
--*/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SMM_USB_UNREGISTER) (
|
||||
IN EFI_SMM_USB_DISPATCH_PROTOCOL * This,
|
||||
IN EFI_HANDLE DispatchHandle
|
||||
);
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Unregister a child SMI source dispatch function with a parent SMM driver
|
||||
|
||||
Arguments:
|
||||
This - Protocol instance pointer.
|
||||
DispatchHandle - Handle of dispatch function to deregister.
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS - The dispatch function has been successfully
|
||||
unregistered and the SMI source has been disabled
|
||||
if there are no other registered child dispatch
|
||||
functions for this SMI source.
|
||||
EFI_INVALID_PARAMETER - Handle is invalid.
|
||||
other - TBD
|
||||
|
||||
--*/
|
||||
|
||||
//
|
||||
// Interface structure for the SMM USB SMI Dispatch Protocol
|
||||
//
|
||||
typedef struct _EFI_SMM_USB_DISPATCH_PROTOCOL {
|
||||
EFI_SMM_USB_REGISTER Register;
|
||||
EFI_SMM_USB_UNREGISTER UnRegister;
|
||||
} EFI_SMM_USB_DISPATCH_PROTOCOL;
|
||||
|
||||
extern EFI_GUID gEfiSmmUsbDispatchProtocolGuid;
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user