11021af4dSSimon Glass /* 21021af4dSSimon Glass * Copyright (C) 2013, Intel Corporation 31021af4dSSimon Glass * Copyright (C) 2014, Bin Meng <bmeng.cn@gmail.com> 41021af4dSSimon Glass * 51021af4dSSimon Glass * SPDX-License-Identifier: Intel 61021af4dSSimon Glass */ 71021af4dSSimon Glass 81021af4dSSimon Glass #ifndef __FSP_API_H__ 91021af4dSSimon Glass #define __FSP_API_H__ 101021af4dSSimon Glass 1182196cf3SSimon Glass #include <linux/linkage.h> 1282196cf3SSimon Glass 131021af4dSSimon Glass /* 14*cb379a34SBin Meng * FSP common configuration structure. 15*cb379a34SBin Meng * This needs to be included in the platform-specific struct fsp_config_data. 16*cb379a34SBin Meng */ 17*cb379a34SBin Meng struct fsp_cfg_common { 18*cb379a34SBin Meng struct fsp_header *fsp_hdr; 19*cb379a34SBin Meng u32 stack_top; 20*cb379a34SBin Meng u32 boot_mode; 21*cb379a34SBin Meng }; 22*cb379a34SBin Meng 23*cb379a34SBin Meng /* 241021af4dSSimon Glass * FspInit continuation function prototype. 251021af4dSSimon Glass * Control will be returned to this callback function after FspInit API call. 261021af4dSSimon Glass */ 271021af4dSSimon Glass typedef void (*fsp_continuation_f)(u32 status, void *hob_list); 281021af4dSSimon Glass 291021af4dSSimon Glass struct fsp_init_params { 301021af4dSSimon Glass /* Non-volatile storage buffer pointer */ 311021af4dSSimon Glass void *nvs_buf; 321021af4dSSimon Glass /* Runtime buffer pointer */ 331021af4dSSimon Glass void *rt_buf; 341021af4dSSimon Glass /* Continuation function address */ 351021af4dSSimon Glass fsp_continuation_f continuation; 361021af4dSSimon Glass }; 371021af4dSSimon Glass 381021af4dSSimon Glass struct common_buf { 391021af4dSSimon Glass /* 401021af4dSSimon Glass * Stack top pointer used by the bootloader. The new stack frame will be 411021af4dSSimon Glass * set up at this location after FspInit API call. 421021af4dSSimon Glass */ 43f0285fbeSBin Meng u32 stack_top; 441021af4dSSimon Glass u32 boot_mode; /* Current system boot mode */ 451021af4dSSimon Glass void *upd_data; /* User platform configuraiton data region */ 461021af4dSSimon Glass u32 reserved[7]; /* Reserved */ 471021af4dSSimon Glass }; 481021af4dSSimon Glass 491021af4dSSimon Glass enum fsp_phase { 501021af4dSSimon Glass /* Notification code for post PCI enuermation */ 511021af4dSSimon Glass INIT_PHASE_PCI = 0x20, 521021af4dSSimon Glass /* Notification code before transfering control to the payload */ 531021af4dSSimon Glass INIT_PHASE_BOOT = 0x40 541021af4dSSimon Glass }; 551021af4dSSimon Glass 561021af4dSSimon Glass struct fsp_notify_params { 571021af4dSSimon Glass /* Notification phase used for NotifyPhase API */ 581021af4dSSimon Glass enum fsp_phase phase; 591021af4dSSimon Glass }; 601021af4dSSimon Glass 611021af4dSSimon Glass /* FspInit API function prototype */ 6282196cf3SSimon Glass typedef asmlinkage u32 (*fsp_init_f)(struct fsp_init_params *params); 631021af4dSSimon Glass 641021af4dSSimon Glass /* FspNotify API function prototype */ 6582196cf3SSimon Glass typedef asmlinkage u32 (*fsp_notify_f)(struct fsp_notify_params *params); 661021af4dSSimon Glass 671021af4dSSimon Glass #endif 68