xref: /linux/arch/x86/include/asm/seamldr.h (revision b0820861748f43759bbf4c319ed1277cff3c5921)
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