#ifndef __UFSHCI_REG_H__
#define __UFSHCI_REG_H__
#include <sys/param.h>
#include <sys/endian.h>
struct ufshci_registers {
uint32_t cap;
uint32_t mcqcap;
uint32_t ver;
uint32_t ext_cap;
uint32_t hcpid;
uint32_t hcmid;
uint32_t ahit;
uint32_t reserved1;
uint32_t is;
uint32_t ie;
uint32_t reserved2;
uint32_t hcsext;
uint32_t hcs;
uint32_t hce;
uint32_t uecpa;
uint32_t uecdl;
uint32_t uecn;
uint32_t uect;
uint32_t uecdme;
uint32_t utriacr;
uint32_t utrlba;
uint32_t utrlbau;
uint32_t utrldbr;
uint32_t utrlclr;
uint32_t utrlrsr;
uint32_t utrlcnr;
uint64_t reserved3;
uint32_t utmrlba;
uint32_t utmrlbau;
uint32_t utmrldbr;
uint32_t utmrlclr;
uint32_t utmrlrsr;
uint8_t reserved4[12];
uint32_t uiccmd;
uint32_t ucmdarg1;
uint32_t ucmdarg2;
uint32_t ucmdarg3;
uint8_t reserved5[16];
uint8_t reserved6[16];
uint8_t vendor[64];
uint32_t ccap;
uint32_t reserved7[511];
uint32_t config;
uint8_t reserved9[124];
uint32_t mcqconfig;
uint32_t esilba;
uint32_t esiuba;
};
#define UFSHCI__REG__SHIFT (0)
#define UFSHCI__REG__MASK (0)
#define UFSHCI_CAP_REG_NUTRS_SHIFT (0)
#define UFSHCI_CAP_REG_NUTRS_MASK (0xFF)
#define UFSHCI_CAP_REG_NORTT_SHIFT (8)
#define UFSHCI_CAP_REG_NORTT_MASK (0xFF)
#define UFSHCI_CAP_REG_NUTMRS_SHIFT (16)
#define UFSHCI_CAP_REG_NUTMRS_MASK (0x7)
#define UFSHCI_CAP_REG_EHSLUTRDS_SHIFT (22)
#define UFSHCI_CAP_REG_EHSLUTRDS_MASK (0x1)
#define UFSHCI_CAP_REG_AUTOH8_SHIFT (23)
#define UFSHCI_CAP_REG_AUTOH8_MASK (0x1)
#define UFSHCI_CAP_REG_64AS_SHIFT (24)
#define UFSHCI_CAP_REG_64AS_MASK (0x1)
#define UFSHCI_CAP_REG_OODDS_SHIFT (25)
#define UFSHCI_CAP_REG_OODDS_MASK (0x1)
#define UFSHCI_CAP_REG_UICDMETMS_SHIFT (26)
#define UFSHCI_CAP_REG_UICDMETMS_MASK (0x1)
#define UFSHCI_CAP_REG_CS_SHIFT (28)
#define UFSHCI_CAP_REG_CS_MASK (0x1)
#define UFSHCI_CAP_REG_LSDBS_SHIFT (29)
#define UFSHCI_CAP_REG_LSDBS_MASK (0x1)
#define UFSHCI_CAP_REG_MCQS_SHIFT (30)
#define UFSHCI_CAP_REG_MCQS_MASK (0x1)
#define UFSHCI_CAP_REG_EIS_SHIFT (31)
#define UFSHCI_CAP_REG_EIS_MASK (0x1)
#define UFSHCI_MCQCAP_REG_MAXQ_SHIFT (0)
#define UFSHCI_MCQCAP_REG_MAXQ_MASK (0xFF)
#define UFSHCI_MCQCAP_REG_SP_SHIFT (8)
#define UFSHCI_MCQCAP_REG_SP_MASK (0x1)
#define UFSHCI_MCQCAP_REG_RRP_SHIFT (9)
#define UFSHCI_MCQCAP_REG_RRP_MASK (0x1)
#define UFSHCI_MCQCAP_REG_EIS_SHIFT (10)
#define UFSHCI_MCQCAP_REG_EIS_MASK (0x1)
#define UFSHCI_MCQCAP_REG_QCFGPTR_SHIFT (16)
#define UFSHCI_MCQCAP_REG_QCFGPTR_MASK (0xFF)
#define UFSHCI_MCQCAP_REG_MIAG_SHIFT (24)
#define UFSHCI_MCQCAP_REG_MIAG_MASK (0xFF)
#define UFSHCI_VER_REG_VS_SHIFT (0)
#define UFSHCI_VER_REG_VS_MASK (0xF)
#define UFSHCI_VER_REG_MNR_SHIFT (4)
#define UFSHCI_VER_REG_MNR_MASK (0xF)
#define UFSHCI_VER_REG_MJR_SHIFT (8)
#define UFSHCI_VER_REG_MJR_MASK (0xFF)
#define UFSHCI_EXTCAP_REG_HOST_HINT_CACAHE_SIZE_SHIFT (0)
#define UFSHCI_EXTCAP_REG_HOST_HINT_CACAHE_SIZE_MASK (0xFFFF)
#define UFSHCI_HCPID_REG_PID_SHIFT (0)
#define UFSHCI_HCPID_REG_PID_MASK (0xFFFFFFFF)
#define UFSHCI_HCMID_REG_MIC_SHIFT (0)
#define UFSHCI_HCMID_REG_MIC_MASK (0xFFFF)
#define UFSHCI_HCMID_REG_BI_SHIFT (8)
#define UFSHCI_HCMID_REG_BI_MASK (0xFFFF)
#define UFSHCI_AHIT_REG_AH8ITV_SHIFT (0)
#define UFSHCI_AHIT_REG_AH8ITV_MASK (0x3FF)
#define UFSHCI_AHIT_REG_TS_SHIFT (10)
#define UFSHCI_AHIT_REG_TS_MASK (0x7)
#define UFSHCI_IS_REG_UTRCS_SHIFT (0)
#define UFSHCI_IS_REG_UTRCS_MASK (0x1)
#define UFSHCI_IS_REG_UDEPRI_SHIFT (1)
#define UFSHCI_IS_REG_UDEPRI_MASK (0x1)
#define UFSHCI_IS_REG_UE_SHIFT (2)
#define UFSHCI_IS_REG_UE_MASK (0x1)
#define UFSHCI_IS_REG_UTMS_SHIFT (3)
#define UFSHCI_IS_REG_UTMS_MASK (0x1)
#define UFSHCI_IS_REG_UPMS_SHIFT (4)
#define UFSHCI_IS_REG_UPMS_MASK (0x1)
#define UFSHCI_IS_REG_UHXS_SHIFT (5)
#define UFSHCI_IS_REG_UHXS_MASK (0x1)
#define UFSHCI_IS_REG_UHES_SHIFT (6)
#define UFSHCI_IS_REG_UHES_MASK (0x1)
#define UFSHCI_IS_REG_ULLS_SHIFT (7)
#define UFSHCI_IS_REG_ULLS_MASK (0x1)
#define UFSHCI_IS_REG_ULSS_SHIFT (8)
#define UFSHCI_IS_REG_ULSS_MASK (0x1)
#define UFSHCI_IS_REG_UTMRCS_SHIFT (9)
#define UFSHCI_IS_REG_UTMRCS_MASK (0x1)
#define UFSHCI_IS_REG_UCCS_SHIFT (10)
#define UFSHCI_IS_REG_UCCS_MASK (0x1)
#define UFSHCI_IS_REG_DFES_SHIFT (11)
#define UFSHCI_IS_REG_DFES_MASK (0x1)
#define UFSHCI_IS_REG_UTPES_SHIFT (12)
#define UFSHCI_IS_REG_UTPES_MASK (0x1)
#define UFSHCI_IS_REG_HCFES_SHIFT (16)
#define UFSHCI_IS_REG_HCFES_MASK (0x1)
#define UFSHCI_IS_REG_SBFES_SHIFT (17)
#define UFSHCI_IS_REG_SBFES_MASK (0x1)
#define UFSHCI_IS_REG_CEFES_SHIFT (18)
#define UFSHCI_IS_REG_CEFES_MASK (0x1)
#define UFSHCI_IS_REG_SQES_SHIFT (19)
#define UFSHCI_IS_REG_SQES_MASK (0x1)
#define UFSHCI_IS_REG_CQES_SHIFT (20)
#define UFSHCI_IS_REG_CQES_MASK (0x1)
#define UFSHCI_IS_REG_IAGES_SHIFT (21)
#define UFSHCI_IS_REG_IAGES_MASK (0x1)
#define UFSHCI_IE_REG_UTRCE_SHIFT (0)
#define UFSHCI_IE_REG_UTRCE_MASK (0x1)
#define UFSHCI_IE_REG_UDEPRIE_SHIFT (1)
#define UFSHCI_IE_REG_UDEPRIE_MASK (0x1)
#define UFSHCI_IE_REG_UEE_SHIFT (2)
#define UFSHCI_IE_REG_UEE_MASK (0x1)
#define UFSHCI_IE_REG_UTMSE_SHIFT (3)
#define UFSHCI_IE_REG_UTMSE_MASK (0x1)
#define UFSHCI_IE_REG_UPMSE_SHIFT (4)
#define UFSHCI_IE_REG_UPMSE_MASK (0x1)
#define UFSHCI_IE_REG_UHXSE_SHIFT (5)
#define UFSHCI_IE_REG_UHXSE_MASK (0x1)
#define UFSHCI_IE_REG_UHESE_SHIFT (6)
#define UFSHCI_IE_REG_UHESE_MASK (0x1)
#define UFSHCI_IE_REG_ULLSE_SHIFT (7)
#define UFSHCI_IE_REG_ULLSE_MASK (0x1)
#define UFSHCI_IE_REG_ULSSE_SHIFT (8)
#define UFSHCI_IE_REG_ULSSE_MASK (0x1)
#define UFSHCI_IE_REG_UTMRCE_SHIFT (9)
#define UFSHCI_IE_REG_UTMRCE_MASK (0x1)
#define UFSHCI_IE_REG_UCCE_SHIFT (10)
#define UFSHCI_IE_REG_UCCE_MASK (0x1)
#define UFSHCI_IE_REG_DFEE_SHIFT (11)
#define UFSHCI_IE_REG_DFEE_MASK (0x1)
#define UFSHCI_IE_REG_UTPEE_SHIFT (12)
#define UFSHCI_IE_REG_UTPEE_MASK (0x1)
#define UFSHCI_IE_REG_HCFEE_SHIFT (16)
#define UFSHCI_IE_REG_HCFEE_MASK (0x1)
#define UFSHCI_IE_REG_SBFEE_SHIFT (17)
#define UFSHCI_IE_REG_SBFEE_MASK (0x1)
#define UFSHCI_IE_REG_CEFEE_SHIFT (18)
#define UFSHCI_IE_REG_CEFEE_MASK (0x1)
#define UFSHCI_IE_REG_SQEE_SHIFT (19)
#define UFSHCI_IE_REG_SQEE_MASK (0x1)
#define UFSHCI_IE_REG_CQEE_SHIFT (20)
#define UFSHCI_IE_REG_CQEE_MASK (0x1)
#define UFSHCI_IE_REG_IAGEE_SHIFT (21)
#define UFSHCI_IE_REG_IAGEE_MASK (0x1)
#define UFSHCI_HCSEXT_IIDUTPE_SHIFT (0)
#define UFSHCI_HCSEXT_IIDUTPE_MASK (0xF)
#define UFSHCI_HCSEXT_EXT_IIDUTPE_SHIFT (4)
#define UFSHCI_HCSEXT_EXT_IIDUTPE_MASK (0xF)
#define UFSHCI_HCS_REG_DP_SHIFT (0)
#define UFSHCI_HCS_REG_DP_MASK (0x1)
#define UFSHCI_HCS_REG_UTRLRDY_SHIFT (1)
#define UFSHCI_HCS_REG_UTRLRDY_MASK (0x1)
#define UFSHCI_HCS_REG_UTMRLRDY_SHIFT (2)
#define UFSHCI_HCS_REG_UTMRLRDY_MASK (0x1)
#define UFSHCI_HCS_REG_UCRDY_SHIFT (3)
#define UFSHCI_HCS_REG_UCRDY_MASK (0x1)
#define UFSHCI_HCS_REG_UPMCRS_SHIFT (8)
#define UFSHCI_HCS_REG_UPMCRS_MASK (0x7)
#define UFSHCI_HCS_REG_UTPEC_SHIFT (12)
#define UFSHCI_HCS_REG_UTPEC_MASK (0xF)
#define UFSHCI_HCS_REG_TTAGUTPE_SHIFT (16)
#define UFSHCI_HCS_REG_TTAGUTPE_MASK (0xFF)
#define UFSHCI_HCS_REG_TLUNUTPE_SHIFT (24)
#define UFSHCI_HCS_REG_TLUNUTPE_MASK (0xFF)
#define UFSHCI_HCE_REG_HCE_SHIFT (0)
#define UFSHCI_HCE_REG_HCE_MASK (0x1)
#define UFSHCI_HCE_REG_CGE_SHIFT (1)
#define UFSHCI_HCE_REG_CGE_MASK (0x1)
#define UFSHCI_UECPA_REG_EC_SHIFT (0)
#define UFSHCI_UECPA_REG_EC_MASK (0xF)
#define UFSHCI_UECPA_REG_ERR_SHIFT (31)
#define UFSHCI_UECPA_REG_ERR_MASK (0x1)
#define UFSHCI_UECDL_REG_EC_SHIFT (0)
#define UFSHCI_UECDL_REG_EC_MASK (0xFFFF)
#define UFSHCI_UECDL_REG_ERR_SHIFT (31)
#define UFSHCI_UECDL_REG_ERR_MASK (0x1)
#define UFSHCI_UECN_REG_EC_SHIFT (0)
#define UFSHCI_UECN_REG_EC_MASK (0x7)
#define UFSHCI_UECN_REG_ERR_SHIFT (31)
#define UFSHCI_UECN_REG_ERR_MASK (0x1)
#define UFSHCI_UECT_REG_EC_SHIFT (0)
#define UFSHCI_UECT_REG_EC_MASK (0x7F)
#define UFSHCI_UECT_REG_ERR_SHIFT (31)
#define UFSHCI_UECT_REG_ERR_MASK (0x1)
#define UFSHCI_UECDME_REG_EC_SHIFT (0)
#define UFSHCI_UECDME_REG_EC_MASK (0xF)
#define UFSHCI_UECDME_REG_ERR_SHIFT (31)
#define UFSHCI_UECDME_REG_ERR_MASK (0x1)
#define UFSHCI_UTRLBA_REG_UTRLBA_SHIFT (0)
#define UFSHCI_UTRLBA_REG_UTRLBA_MASK (0xFFFFFFFF)
#define UFSHCI_UTRLBAU_REG_UTRLBAU_SHIFT (0)
#define UFSHCI_UTRLBAU_REG_UTRLBAU_MASK (0xFFFFFFFF)
#define UFSHCI_UTRLDBR_REG_UTRLDBR_SHIFT (0)
#define UFSHCI_UTRLDBR_REG_UTRLDBR_MASK (0xFFFFFFFF)
#define UFSHCI_UTRLCLR_REG_UTRLCLR_SHIFT (0)
#define UFSHCI_UTRLCLR_REG_UTRLCLR_MASK (0xFFFFFFFF)
#define UFSHCI_UTRLRSR_REG_UTRLRSR_SHIFT (0)
#define UFSHCI_UTRLRSR_REG_UTRLRSR_MASK (0x1)
#define UFSHCI_UTRLCNR_REG_UTRLCNR_SHIFT (0)
#define UFSHCI_UTRLCNR_REG_UTRLCNR_MASK (0xFFFFFFFF)
#define UFSHCI_UTMRLBA_REG_UTMRLBA_SHIFT (0)
#define UFSHCI_UTMRLBA_REG_UTMRLBA_MASK (0xFFFFFFFF)
#define UFSHCI_UTMRLBAU_REG_UTMRLBAU_SHIFT (0)
#define UFSHCI_UTMRLBAU_REG_UTMRLBAU_MASK (0xFFFFFFFF)
#define UFSHCI_UTMRLDBR_REG_UTMRLDBR_SHIFT (0)
#define UFSHCI_UTMRLDBR_REG_UTMRLDBR_MASK (0xFF)
#define UFSHCI_UTMRLCLR_REG_UTMRLCLR_SHIFT (0)
#define UFSHCI_UTMRLCLR_REG_UTMRLCLR_MASK (0xFF)
#define UFSHCI_UTMRLRSR_REG_UTMRLRSR_SHIFT (0)
#define UFSHCI_UTMRLRSR_REG_UTMRLRSR_MASK (0xFF)
#define UFSHCI_UICCMD_REG_CMDOP_SHIFT (0)
#define UFSHCI_UICCMD_REG_CMDOP_MASK (0xFF)
#define UFSHCI_UICCMDARG1_REG_ARG1_SHIFT (0)
#define UFSHCI_UICCMDARG1_REG_ARG1_MASK (0xFFFFFFFF)
#define UFSHCI_UICCMDARG1_REG_GEN_SELECTOR_INDEX_SHIFT (0)
#define UFSHCI_UICCMDARG1_REG_GEN_SELECTOR_INDEX_MASK (0xFFFF)
#define UFSHCI_UICCMDARG1_REG_MIB_ATTR_SHIFT (16)
#define UFSHCI_UICCMDARG1_REG_MIB_ATTR_MASK (0xFFFF)
#define UFSHCI_UICCMDARG2_REG_ARG2_SHIFT (0)
#define UFSHCI_UICCMDARG2_REG_ARG2_MASK (0xFFFFFFFF)
#define UFSHCI_UICCMDARG2_REG_ERROR_CODE_SHIFT (0)
#define UFSHCI_UICCMDARG2_REG_ERROR_CODE_MASK (0xFF)
#define UFSHCI_UICCMDARG2_REG_ATTR_SET_TYPE_SHIFT (16)
#define UFSHCI_UICCMDARG2_REG_ATTR_SET_TYPE_MASK (0xFF)
#define UFSHCI_UICCMDARG3_REG_ARG3_SHIFT (0)
#define UFSHCI_UICCMDARG3_REG_ARG3_MASK (0xFFFFFFFF)
#define UFSHCIM(name) (name##_MASK << name##_SHIFT)
#define UFSHCIV(name, x) (((x) >> name##_SHIFT) & name##_MASK)
#define UFSHCIF(name, x) (((x)&name##_MASK) << name##_SHIFT)
#define UFSHCI_DUMP_REG(ctrlr, member) \
do { \
uint32_t _val = ufshci_mmio_read_4(ctrlr, member); \
ufshci_printf(ctrlr, " %-15s (0x%03lx) : 0x%08x\n", #member, \
ufshci_mmio_offsetof(member), _val); \
} while (0)
#endif