10988bf69SChao Gao /* SPDX-License-Identifier: GPL-2.0 */ 20988bf69SChao Gao #ifndef _ASM_X86_SEAMLDR_H 30988bf69SChao Gao #define _ASM_X86_SEAMLDR_H 40988bf69SChao Gao 50988bf69SChao Gao #include <linux/types.h> 60988bf69SChao Gao 70988bf69SChao Gao /* 80988bf69SChao Gao * This is the "SEAMLDR_INFO" data structure defined in the 90988bf69SChao Gao * "SEAM Loader (SEAMLDR) Interface Specification". 100988bf69SChao Gao * 110988bf69SChao Gao * Must be aligned to a 256-byte boundary. 120988bf69SChao Gao */ 130988bf69SChao Gao struct seamldr_info { 140988bf69SChao Gao u32 version; 150988bf69SChao Gao u32 attributes; 160988bf69SChao Gao u32 vendor_id; 170988bf69SChao Gao u32 build_date; 180988bf69SChao Gao u16 build_num; 190988bf69SChao Gao u16 minor_version; 200988bf69SChao Gao u16 major_version; 210988bf69SChao Gao u16 update_version; 220988bf69SChao Gao u32 acm_x2apicid; 230988bf69SChao Gao u32 num_remaining_updates; 240988bf69SChao Gao u8 seam_info[128]; 250988bf69SChao Gao u8 seam_ready; 260988bf69SChao Gao u8 seam_debug; 270988bf69SChao Gao u8 p_seam_ready; 280988bf69SChao Gao u8 reserved[93]; 290988bf69SChao Gao } __packed __aligned(256); 300988bf69SChao Gao 310988bf69SChao Gao static_assert(sizeof(struct seamldr_info) == 256); 320988bf69SChao Gao 330988bf69SChao Gao int seamldr_get_info(struct seamldr_info *seamldr_info); 34c3e70c5eSChao Gao int seamldr_install_module(const u8 *data, u32 data_len); 35*6e97c234SDave Hansen void seamldr_lock_module_update(void); 36*6e97c234SDave Hansen void seamldr_unlock_module_update(void); 370988bf69SChao Gao 380988bf69SChao Gao #endif /* _ASM_X86_SEAMLDR_H */ 39