GK SDK 源码库: XMIPCLinuxV100R005C00SPC030 (kernel/tools/open_source excluded)
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
/* SPDX-License-Identifier: Intel */
|
||||
/*
|
||||
* Copyright (C) 2013, Intel Corporation
|
||||
* Copyright (C) 2014, Bin Meng <bmeng.cn@gmail.com>
|
||||
*/
|
||||
|
||||
#ifndef __FSP_API_H__
|
||||
#define __FSP_API_H__
|
||||
|
||||
#include <linux/linkage.h>
|
||||
|
||||
/*
|
||||
* FSP common configuration structure.
|
||||
* This needs to be included in the platform-specific struct fsp_config_data.
|
||||
*/
|
||||
struct fsp_cfg_common {
|
||||
struct fsp_header *fsp_hdr;
|
||||
u32 stack_top;
|
||||
u32 boot_mode;
|
||||
};
|
||||
|
||||
/*
|
||||
* FspInit continuation function prototype.
|
||||
* Control will be returned to this callback function after FspInit API call.
|
||||
*/
|
||||
typedef void (*fsp_continuation_f)(u32 status, void *hob_list);
|
||||
|
||||
struct fsp_init_params {
|
||||
/* Non-volatile storage buffer pointer */
|
||||
void *nvs_buf;
|
||||
/* Runtime buffer pointer */
|
||||
void *rt_buf;
|
||||
/* Continuation function address */
|
||||
fsp_continuation_f continuation;
|
||||
};
|
||||
|
||||
struct common_buf {
|
||||
/*
|
||||
* Stack top pointer used by the bootloader. The new stack frame will be
|
||||
* set up at this location after FspInit API call.
|
||||
*/
|
||||
u32 stack_top;
|
||||
u32 boot_mode; /* Current system boot mode */
|
||||
void *upd_data; /* User platform configuraiton data region */
|
||||
u32 tolum_size; /* Top of low usable memory size (FSP 1.1) */
|
||||
u32 reserved[6]; /* Reserved */
|
||||
};
|
||||
|
||||
enum fsp_phase {
|
||||
/* Notification code for post PCI enuermation */
|
||||
INIT_PHASE_PCI = 0x20,
|
||||
/* Notification code before transfering control to the payload */
|
||||
INIT_PHASE_BOOT = 0x40
|
||||
};
|
||||
|
||||
struct fsp_notify_params {
|
||||
/* Notification phase used for NotifyPhase API */
|
||||
enum fsp_phase phase;
|
||||
};
|
||||
|
||||
/* FspInit API function prototype */
|
||||
typedef asmlinkage u32 (*fsp_init_f)(struct fsp_init_params *params);
|
||||
|
||||
/* FspNotify API function prototype */
|
||||
typedef asmlinkage u32 (*fsp_notify_f)(struct fsp_notify_params *params);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,153 @@
|
||||
/* SPDX-License-Identifier: Intel */
|
||||
/*
|
||||
* Copyright (C) 2013, Intel Corporation
|
||||
* Copyright (C) 2014, Bin Meng <bmeng.cn@gmail.com>
|
||||
*/
|
||||
|
||||
#ifndef __FSP_FFS_H__
|
||||
#define __FSP_FFS_H__
|
||||
|
||||
/* Used to verify the integrity of the file */
|
||||
union __packed ffs_integrity {
|
||||
struct {
|
||||
/*
|
||||
* The IntegrityCheck.checksum.header field is an 8-bit
|
||||
* checksum of the file header. The State and
|
||||
* IntegrityCheck.checksum.file fields are assumed to be zero
|
||||
* and the checksum is calculated such that the entire header
|
||||
* sums to zero.
|
||||
*/
|
||||
u8 header;
|
||||
/*
|
||||
* If the FFS_ATTRIB_CHECKSUM (see definition below) bit of
|
||||
* the Attributes field is set to one, the
|
||||
* IntegrityCheck.checksum.file field is an 8-bit checksum of
|
||||
* the file data. If the FFS_ATTRIB_CHECKSUM bit of the
|
||||
* Attributes field is cleared to zero, the
|
||||
* IntegrityCheck.checksum.file field must be initialized with
|
||||
* a value of 0xAA. The IntegrityCheck.checksum.file field is
|
||||
* valid any time the EFI_FILE_DATA_VALID bit is set in the
|
||||
* State field.
|
||||
*/
|
||||
u8 file;
|
||||
} checksum;
|
||||
|
||||
/* This is the full 16 bits of the IntegrityCheck field */
|
||||
u16 checksum16;
|
||||
};
|
||||
|
||||
/*
|
||||
* Each file begins with the header that describe the
|
||||
* contents and state of the files.
|
||||
*/
|
||||
struct __packed ffs_file_header {
|
||||
/*
|
||||
* This GUID is the file name.
|
||||
* It is used to uniquely identify the file.
|
||||
*/
|
||||
efi_guid_t name;
|
||||
/* Used to verify the integrity of the file */
|
||||
union ffs_integrity integrity;
|
||||
/* Identifies the type of file */
|
||||
u8 type;
|
||||
/* Declares various file attribute bits */
|
||||
u8 attr;
|
||||
/* The length of the file in bytes, including the FFS header */
|
||||
u8 size[3];
|
||||
/*
|
||||
* Used to track the state of the file throughout the life of
|
||||
* the file from creation to deletion.
|
||||
*/
|
||||
u8 state;
|
||||
};
|
||||
|
||||
struct __packed ffs_file_header2 {
|
||||
/*
|
||||
* This GUID is the file name. It is used to uniquely identify the file.
|
||||
* There may be only one instance of a file with the file name GUID of
|
||||
* Name in any given firmware volume, except if the file type is
|
||||
* EFI_FV_FILE_TYPE_FFS_PAD.
|
||||
*/
|
||||
efi_guid_t name;
|
||||
/* Used to verify the integrity of the file */
|
||||
union ffs_integrity integrity;
|
||||
/* Identifies the type of file */
|
||||
u8 type;
|
||||
/* Declares various file attribute bits */
|
||||
u8 attr;
|
||||
/*
|
||||
* The length of the file in bytes, including the FFS header.
|
||||
* The length of the file data is either
|
||||
* (size - sizeof(struct ffs_file_header)). This calculation means a
|
||||
* zero-length file has a size of 24 bytes, which is
|
||||
* sizeof(struct ffs_file_header). Size is not required to be a
|
||||
* multiple of 8 bytes. Given a file F, the next file header is located
|
||||
* at the next 8-byte aligned firmware volume offset following the last
|
||||
* byte of the file F.
|
||||
*/
|
||||
u8 size[3];
|
||||
/*
|
||||
* Used to track the state of the file throughout the life of
|
||||
* the file from creation to deletion.
|
||||
*/
|
||||
u8 state;
|
||||
/*
|
||||
* If FFS_ATTRIB_LARGE_FILE is set in attr, then ext_size exists
|
||||
* and size must be set to zero.
|
||||
* If FFS_ATTRIB_LARGE_FILE is not set then
|
||||
* struct ffs_file_header is used.
|
||||
*/
|
||||
u32 ext_size;
|
||||
};
|
||||
|
||||
/*
|
||||
* Pseudo type. It is used as a wild card when retrieving sections.
|
||||
* The section type EFI_SECTION_ALL matches all section types.
|
||||
*/
|
||||
#define EFI_SECTION_ALL 0x00
|
||||
|
||||
/* Encapsulation section Type values */
|
||||
#define EFI_SECTION_COMPRESSION 0x01
|
||||
#define EFI_SECTION_GUID_DEFINED 0x02
|
||||
#define EFI_SECTION_DISPOSABLE 0x03
|
||||
|
||||
/* Leaf section Type values */
|
||||
#define EFI_SECTION_PE32 0x10
|
||||
#define EFI_SECTION_PIC 0x11
|
||||
#define EFI_SECTION_TE 0x12
|
||||
#define EFI_SECTION_DXE_DEPEX 0x13
|
||||
#define EFI_SECTION_VERSION 0x14
|
||||
#define EFI_SECTION_USER_INTERFACE 0x15
|
||||
#define EFI_SECTION_COMPATIBILITY16 0x16
|
||||
#define EFI_SECTION_FIRMWARE_VOLUME_IMAGE 0x17
|
||||
#define EFI_SECTION_FREEFORM_SUBTYPE_GUID 0x18
|
||||
#define EFI_SECTION_RAW 0x19
|
||||
#define EFI_SECTION_PEI_DEPEX 0x1B
|
||||
#define EFI_SECTION_SMM_DEPEX 0x1C
|
||||
|
||||
/* Common section header */
|
||||
struct __packed raw_section {
|
||||
/*
|
||||
* A 24-bit unsigned integer that contains the total size of
|
||||
* the section in bytes, including the EFI_COMMON_SECTION_HEADER.
|
||||
*/
|
||||
u8 size[3];
|
||||
u8 type;
|
||||
};
|
||||
|
||||
struct __packed raw_section2 {
|
||||
/*
|
||||
* A 24-bit unsigned integer that contains the total size of
|
||||
* the section in bytes, including the EFI_COMMON_SECTION_HEADER.
|
||||
*/
|
||||
u8 size[3];
|
||||
u8 type;
|
||||
/*
|
||||
* If size is 0xFFFFFF, then ext_size contains the size of
|
||||
* the section. If size is not equal to 0xFFFFFF, then this
|
||||
* field does not exist.
|
||||
*/
|
||||
u32 ext_size;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,72 @@
|
||||
/* SPDX-License-Identifier: Intel */
|
||||
/*
|
||||
* Copyright (C) 2013, Intel Corporation
|
||||
* Copyright (C) 2014, Bin Meng <bmeng.cn@gmail.com>
|
||||
*/
|
||||
|
||||
#ifndef __FSP1_SUPPORT_H__
|
||||
#define __FSP1_SUPPORT_H__
|
||||
|
||||
#include <asm/fsp/fsp_support.h>
|
||||
#include "fsp_ffs.h"
|
||||
|
||||
/**
|
||||
* fsp_asm_continuation() - FSP Continuation assembly helper routine
|
||||
*
|
||||
* This routine jumps to the C version of FSP continuation function
|
||||
*/
|
||||
void fsp_asm_continuation(void);
|
||||
|
||||
/**
|
||||
* fsp_init_done() - FSP initialization complete
|
||||
*
|
||||
* This is the function that indicates FSP initialization is complete and jumps
|
||||
* back to the bootloader with HOB list pointer as the parameter.
|
||||
*
|
||||
* @hob_list: HOB list pointer
|
||||
*/
|
||||
void fsp_init_done(void *hob_list);
|
||||
|
||||
/**
|
||||
* fsp_continue() - FSP Continuation function
|
||||
*
|
||||
* @status: Always 0
|
||||
* @hob_list: HOB list pointer
|
||||
*
|
||||
* @return Never returns
|
||||
*/
|
||||
void fsp_continue(u32 status, void *hob_list);
|
||||
|
||||
/**
|
||||
* fsp_init() - FSP initialization wrapper function
|
||||
*
|
||||
* @stack_top: bootloader stack top address
|
||||
* @boot_mode: boot mode defined in fsp_bootmode.h
|
||||
* @nvs_buf: Non-volatile memory buffer pointer
|
||||
*/
|
||||
void fsp_init(u32 stack_top, u32 boot_mode, void *nvs_buf);
|
||||
|
||||
/**
|
||||
* fsp_get_bootloader_tmp_mem() - retrieves temporary stack buffer and size
|
||||
*
|
||||
* @hob_list: A HOB list pointer.
|
||||
* @len: A pointer to the bootloader temporary stack length.
|
||||
* If the HOB is located, the length will be updated.
|
||||
*
|
||||
* @return NULL: Failed to find the bootloader temporary stack HOB.
|
||||
* @return others: Bootloader temporary stackbuffer pointer.
|
||||
*/
|
||||
void *fsp_get_bootloader_tmp_mem(const void *hob_list, u32 *len);
|
||||
|
||||
/**
|
||||
* fsp_update_configs() - overrides the default configurations of FSP
|
||||
*
|
||||
* @config: A pointer to the FSP configuration data structure
|
||||
* @rt_buf: A pointer to the FSP runtime buffer data structure
|
||||
*
|
||||
* @return None
|
||||
*/
|
||||
void fsp_update_configs(struct fsp_config_data *config,
|
||||
struct fspinit_rtbuf *rt_buf);
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user