18e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#ifndef _IMR_TOC_H_
28e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define _IMR_TOC_H_
38e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
48e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin/*
58e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin * IMR Table of Contents format
68e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin */
78e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugintypedef struct {
88e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin    uint32_t start_offset;
98e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin    uint32_t size;
108e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin    uint32_t reserved1;
118e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin    uint32_t reserved2;
128e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin} imr_toc_entry_t;
138e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
148e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugintypedef struct {
158e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin    imr_toc_entry_t entries[8];    /* pick reasonable size to make gcc happy */
168e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin} imr_toc_t;
178e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
188e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define MAKE_TOC_VERSION(maj, min)  ((min) << 16 | (maj))
198e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugintypedef struct {
208e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin    uint16_t toc_maj_ver;
218e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin    uint16_t toc_min_ver;
228e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin} imr_toc_entry_version_t;
238e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
248e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin/*
258e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin * IMR6 values
268e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin */
278e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
288e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define IMR6_TOC_MAGIC       0x6CD96EDB
298e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
308e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define IMR6_TOC_VERSION_MAJ 0x0001
318e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define IMR6_TOC_VERSION_MIN 0x0000
328e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
338e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin/* ToC entry order for IMR6 */
348e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kaluginenum imr6_entries {
358e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin    IMR_TOC_ENTRY_TOC = 0,
368e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin    IMR_TOC_ENTRY_MTX_WB_BUF,
378e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin    IMR_TOC_ENTRY_VXE_FW,
388e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin    IMR_TOC_ENTRY_VXE_CTX_BUF,
398e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin    IMR_TOC_ENTRY_VXE_SEC_PGTBLS,
408e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin    IMR_TOC_ENTRY_PC_BUFS,
418e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin    IMR_TOC_ENTRY_VXE_SHADOW_PGTBLS,
428e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin    IMR_TOC_ENTRY_XEN_EXTRA,
438e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin};
448e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
458e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
468e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin/*
478e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin * IMR7 values
488e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin */
498e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
508e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define IMR7_TOC_MAGIC       0x6ED96CDB
518e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
528e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define IMR7_TOC_VERSION_MAJ 0x0001
538e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define IMR7_TOC_VERSION_MIN 0x0000
548e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
558e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin/* ToC entry order for IMR7 */
568e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kaluginenum imr7_entries {
578e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin    /* IMR_TOC_ENTRY_TOC = 0, */
588e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin    IMR_TOC_ENTRY_MAILBOXES = 1,     /* contents per imr_ia_chaabi_mailbox_t */
598e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin    IMR_TOC_ENTRY_IA_RUNTIME_FW,
608e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin    IMR_TOC_ENTRY_XEN
618e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin};
628e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
638e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin/* entry-specific data structures */
648e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
658e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define IMR6_PC_BUFS_START_VADDR  0x11223344
668e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
678e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugintypedef struct {
688e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin    uint32_t hdcp_sess_status;
698e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin    union {
708e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin        struct {
718e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	    uint32_t hdcp_sess_key_00_31;
728e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	    uint32_t hdcp_sess_key_32_63;
738e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	    uint32_t hdcp_sess_key_64_95;
748e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	    uint32_t hdcp_sess_key_96_127;
758e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	};
768e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin        uint8_t hdcp_sess_key[16];
778e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin    };
788e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin    union {
798e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin        struct {
808e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	    uint32_t hdcp_iv_00_31;
818e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	    uint32_t hdcp_iv_32_63;
828e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	};
838e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin        uint64_t hdcp_iv;
848e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin    };
858e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin} imr_ia_chaabi_mailbox_t;
868e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
878e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#endif
88