#ifndef _SYS_UCODE_INTEL_H
#define _SYS_UCODE_INTEL_H
#include <sys/types.h>
#include <ucode/ucode_errno.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct ucode_header_intel {
uint32_t uh_header_ver;
uint32_t uh_rev;
uint32_t uh_date;
uint32_t uh_signature;
uint32_t uh_checksum;
uint32_t uh_loader_ver;
uint32_t uh_proc_flags;
uint32_t uh_body_size;
uint32_t uh_total_size;
uint32_t uh_reserved[3];
} ucode_header_intel_t;
typedef struct ucode_ext_sig_intel {
uint32_t ues_signature;
uint32_t ues_proc_flags;
uint32_t ues_checksum;
} ucode_ext_sig_intel_t;
typedef struct ucode_ext_table_intel {
uint32_t uet_count;
uint32_t uet_checksum;
uint32_t uet_reserved[3];
ucode_ext_sig_intel_t uet_ext_sig[1];
} ucode_ext_table_intel_t;
typedef struct ucode_file_intel {
ucode_header_intel_t *uf_header;
uint8_t *uf_body;
ucode_ext_table_intel_t *uf_ext_table;
} ucode_file_intel_t;
#define UCODE_MAX_NAME_LEN_INTEL (sizeof ("XXXXXXXX-XX"))
#define UCODE_HEADER_SIZE_INTEL (sizeof (struct ucode_header_intel))
#define UCODE_EXT_TABLE_SIZE_INTEL (20)
#define UCODE_EXT_SIG_SIZE_INTEL (sizeof (struct ucode_ext_sig_intel))
#define UCODE_DEFAULT_TOTAL_SIZE UCODE_KB(2)
#define UCODE_DEFAULT_BODY_SIZE (UCODE_KB(2) - UCODE_HEADER_SIZE_INTEL)
#define UCODE_SIZE_CONVERT(size, default_size) \
((size) == 0 ? (default_size) : (size))
#define UCODE_BODY_SIZE_INTEL(size) \
UCODE_SIZE_CONVERT((size), UCODE_DEFAULT_BODY_SIZE)
#define UCODE_TOTAL_SIZE_INTEL(size) \
UCODE_SIZE_CONVERT((size), UCODE_DEFAULT_TOTAL_SIZE)
#define UCODE_MATCH_INTEL(sig1, sig2, pf1, pf2) \
(((sig1) == (sig2)) && \
(((pf1) & (pf2)) || (((pf1) == 0) && ((pf2) == 0))))
#ifdef __cplusplus
}
#endif
#endif