root/arch/x86/include/asm/seamldr.h
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _ASM_X86_SEAMLDR_H
#define _ASM_X86_SEAMLDR_H

#include <linux/types.h>

/*
 * This is the "SEAMLDR_INFO" data structure defined in the
 * "SEAM Loader (SEAMLDR) Interface Specification".
 *
 * Must be aligned to a 256-byte boundary.
 */
struct seamldr_info {
        u32     version;
        u32     attributes;
        u32     vendor_id;
        u32     build_date;
        u16     build_num;
        u16     minor_version;
        u16     major_version;
        u16     update_version;
        u32     acm_x2apicid;
        u32     num_remaining_updates;
        u8      seam_info[128];
        u8      seam_ready;
        u8      seam_debug;
        u8      p_seam_ready;
        u8      reserved[93];
} __packed __aligned(256);

static_assert(sizeof(struct seamldr_info) == 256);

int seamldr_get_info(struct seamldr_info *seamldr_info);
int seamldr_install_module(const u8 *data, u32 data_len);
void seamldr_lock_module_update(void);
void seamldr_unlock_module_update(void);

#endif /* _ASM_X86_SEAMLDR_H */