18485149cSManivannan Sadhasivam /* SPDX-License-Identifier: GPL-2.0 */ 28485149cSManivannan Sadhasivam /* 38485149cSManivannan Sadhasivam * Copyright (c) 2022, Linaro Ltd. 48485149cSManivannan Sadhasivam * 58485149cSManivannan Sadhasivam */ 68485149cSManivannan Sadhasivam 78485149cSManivannan Sadhasivam #ifndef _MHI_COMMON_H 88485149cSManivannan Sadhasivam #define _MHI_COMMON_H 98485149cSManivannan Sadhasivam 108485149cSManivannan Sadhasivam #include <linux/bitfield.h> 118485149cSManivannan Sadhasivam #include <linux/mhi.h> 128485149cSManivannan Sadhasivam 138485149cSManivannan Sadhasivam /* MHI registers */ 148485149cSManivannan Sadhasivam #define MHIREGLEN 0x00 158485149cSManivannan Sadhasivam #define MHIVER 0x08 168485149cSManivannan Sadhasivam #define MHICFG 0x10 178485149cSManivannan Sadhasivam #define CHDBOFF 0x18 188485149cSManivannan Sadhasivam #define ERDBOFF 0x20 198485149cSManivannan Sadhasivam #define BHIOFF 0x28 208485149cSManivannan Sadhasivam #define BHIEOFF 0x2c 218485149cSManivannan Sadhasivam #define DEBUGOFF 0x30 228485149cSManivannan Sadhasivam #define MHICTRL 0x38 238485149cSManivannan Sadhasivam #define MHISTATUS 0x48 248485149cSManivannan Sadhasivam #define CCABAP_LOWER 0x58 258485149cSManivannan Sadhasivam #define CCABAP_HIGHER 0x5c 268485149cSManivannan Sadhasivam #define ECABAP_LOWER 0x60 278485149cSManivannan Sadhasivam #define ECABAP_HIGHER 0x64 288485149cSManivannan Sadhasivam #define CRCBAP_LOWER 0x68 298485149cSManivannan Sadhasivam #define CRCBAP_HIGHER 0x6c 308485149cSManivannan Sadhasivam #define CRDB_LOWER 0x70 318485149cSManivannan Sadhasivam #define CRDB_HIGHER 0x74 328485149cSManivannan Sadhasivam #define MHICTRLBASE_LOWER 0x80 338485149cSManivannan Sadhasivam #define MHICTRLBASE_HIGHER 0x84 348485149cSManivannan Sadhasivam #define MHICTRLLIMIT_LOWER 0x88 358485149cSManivannan Sadhasivam #define MHICTRLLIMIT_HIGHER 0x8c 368485149cSManivannan Sadhasivam #define MHIDATABASE_LOWER 0x98 378485149cSManivannan Sadhasivam #define MHIDATABASE_HIGHER 0x9c 388485149cSManivannan Sadhasivam #define MHIDATALIMIT_LOWER 0xa0 398485149cSManivannan Sadhasivam #define MHIDATALIMIT_HIGHER 0xa4 408485149cSManivannan Sadhasivam 418485149cSManivannan Sadhasivam /* MHI BHI registers */ 428485149cSManivannan Sadhasivam #define BHI_BHIVERSION_MINOR 0x00 438485149cSManivannan Sadhasivam #define BHI_BHIVERSION_MAJOR 0x04 448485149cSManivannan Sadhasivam #define BHI_IMGADDR_LOW 0x08 458485149cSManivannan Sadhasivam #define BHI_IMGADDR_HIGH 0x0c 468485149cSManivannan Sadhasivam #define BHI_IMGSIZE 0x10 478485149cSManivannan Sadhasivam #define BHI_RSVD1 0x14 488485149cSManivannan Sadhasivam #define BHI_IMGTXDB 0x18 498485149cSManivannan Sadhasivam #define BHI_RSVD2 0x1c 508485149cSManivannan Sadhasivam #define BHI_INTVEC 0x20 518485149cSManivannan Sadhasivam #define BHI_RSVD3 0x24 528485149cSManivannan Sadhasivam #define BHI_EXECENV 0x28 538485149cSManivannan Sadhasivam #define BHI_STATUS 0x2c 548485149cSManivannan Sadhasivam #define BHI_ERRCODE 0x30 558485149cSManivannan Sadhasivam #define BHI_ERRDBG1 0x34 568485149cSManivannan Sadhasivam #define BHI_ERRDBG2 0x38 578485149cSManivannan Sadhasivam #define BHI_ERRDBG3 0x3c 588485149cSManivannan Sadhasivam #define BHI_SERIALNU 0x40 598485149cSManivannan Sadhasivam #define BHI_SBLANTIROLLVER 0x44 608485149cSManivannan Sadhasivam #define BHI_NUMSEG 0x48 618485149cSManivannan Sadhasivam #define BHI_MSMHWID(n) (0x4c + (0x4 * (n))) 628485149cSManivannan Sadhasivam #define BHI_OEMPKHASH(n) (0x64 + (0x4 * (n))) 638485149cSManivannan Sadhasivam #define BHI_RSVD5 0xc4 648485149cSManivannan Sadhasivam 658485149cSManivannan Sadhasivam /* BHI register bits */ 668485149cSManivannan Sadhasivam #define BHI_TXDB_SEQNUM_BMSK GENMASK(29, 0) 678485149cSManivannan Sadhasivam #define BHI_TXDB_SEQNUM_SHFT 0 688485149cSManivannan Sadhasivam #define BHI_STATUS_MASK GENMASK(31, 30) 698485149cSManivannan Sadhasivam #define BHI_STATUS_ERROR 0x03 708485149cSManivannan Sadhasivam #define BHI_STATUS_SUCCESS 0x02 718485149cSManivannan Sadhasivam #define BHI_STATUS_RESET 0x00 728485149cSManivannan Sadhasivam 738485149cSManivannan Sadhasivam /* MHI BHIE registers */ 748485149cSManivannan Sadhasivam #define BHIE_MSMSOCID_OFFS 0x00 758485149cSManivannan Sadhasivam #define BHIE_TXVECADDR_LOW_OFFS 0x2c 768485149cSManivannan Sadhasivam #define BHIE_TXVECADDR_HIGH_OFFS 0x30 778485149cSManivannan Sadhasivam #define BHIE_TXVECSIZE_OFFS 0x34 788485149cSManivannan Sadhasivam #define BHIE_TXVECDB_OFFS 0x3c 798485149cSManivannan Sadhasivam #define BHIE_TXVECSTATUS_OFFS 0x44 808485149cSManivannan Sadhasivam #define BHIE_RXVECADDR_LOW_OFFS 0x60 818485149cSManivannan Sadhasivam #define BHIE_RXVECADDR_HIGH_OFFS 0x64 828485149cSManivannan Sadhasivam #define BHIE_RXVECSIZE_OFFS 0x68 838485149cSManivannan Sadhasivam #define BHIE_RXVECDB_OFFS 0x70 848485149cSManivannan Sadhasivam #define BHIE_RXVECSTATUS_OFFS 0x78 858485149cSManivannan Sadhasivam 868485149cSManivannan Sadhasivam /* BHIE register bits */ 878485149cSManivannan Sadhasivam #define BHIE_TXVECDB_SEQNUM_BMSK GENMASK(29, 0) 888485149cSManivannan Sadhasivam #define BHIE_TXVECDB_SEQNUM_SHFT 0 898485149cSManivannan Sadhasivam #define BHIE_TXVECSTATUS_SEQNUM_BMSK GENMASK(29, 0) 908485149cSManivannan Sadhasivam #define BHIE_TXVECSTATUS_SEQNUM_SHFT 0 918485149cSManivannan Sadhasivam #define BHIE_TXVECSTATUS_STATUS_BMSK GENMASK(31, 30) 928485149cSManivannan Sadhasivam #define BHIE_TXVECSTATUS_STATUS_SHFT 30 938485149cSManivannan Sadhasivam #define BHIE_TXVECSTATUS_STATUS_RESET 0x00 948485149cSManivannan Sadhasivam #define BHIE_TXVECSTATUS_STATUS_XFER_COMPL 0x02 958485149cSManivannan Sadhasivam #define BHIE_TXVECSTATUS_STATUS_ERROR 0x03 968485149cSManivannan Sadhasivam #define BHIE_RXVECDB_SEQNUM_BMSK GENMASK(29, 0) 978485149cSManivannan Sadhasivam #define BHIE_RXVECDB_SEQNUM_SHFT 0 988485149cSManivannan Sadhasivam #define BHIE_RXVECSTATUS_SEQNUM_BMSK GENMASK(29, 0) 998485149cSManivannan Sadhasivam #define BHIE_RXVECSTATUS_SEQNUM_SHFT 0 1008485149cSManivannan Sadhasivam #define BHIE_RXVECSTATUS_STATUS_BMSK GENMASK(31, 30) 1018485149cSManivannan Sadhasivam #define BHIE_RXVECSTATUS_STATUS_SHFT 30 1028485149cSManivannan Sadhasivam #define BHIE_RXVECSTATUS_STATUS_RESET 0x00 1038485149cSManivannan Sadhasivam #define BHIE_RXVECSTATUS_STATUS_XFER_COMPL 0x02 1048485149cSManivannan Sadhasivam #define BHIE_RXVECSTATUS_STATUS_ERROR 0x03 1058485149cSManivannan Sadhasivam 1068485149cSManivannan Sadhasivam /* MHI register bits */ 1078485149cSManivannan Sadhasivam #define MHICFG_NHWER_MASK GENMASK(31, 24) 1088485149cSManivannan Sadhasivam #define MHICFG_NER_MASK GENMASK(23, 16) 1098485149cSManivannan Sadhasivam #define MHICFG_NHWCH_MASK GENMASK(15, 8) 1108485149cSManivannan Sadhasivam #define MHICFG_NCH_MASK GENMASK(7, 0) 1118485149cSManivannan Sadhasivam #define MHICTRL_MHISTATE_MASK GENMASK(15, 8) 1128485149cSManivannan Sadhasivam #define MHICTRL_RESET_MASK BIT(1) 1138485149cSManivannan Sadhasivam #define MHISTATUS_MHISTATE_MASK GENMASK(15, 8) 1148485149cSManivannan Sadhasivam #define MHISTATUS_SYSERR_MASK BIT(2) 1158485149cSManivannan Sadhasivam #define MHISTATUS_READY_MASK BIT(0) 1168485149cSManivannan Sadhasivam 1178485149cSManivannan Sadhasivam /* Command Ring Element macros */ 1188485149cSManivannan Sadhasivam /* No operation command */ 1198485149cSManivannan Sadhasivam #define MHI_TRE_CMD_NOOP_PTR 0 1208485149cSManivannan Sadhasivam #define MHI_TRE_CMD_NOOP_DWORD0 0 1218485149cSManivannan Sadhasivam #define MHI_TRE_CMD_NOOP_DWORD1 cpu_to_le32(FIELD_PREP(GENMASK(23, 16), MHI_CMD_NOP)) 1228485149cSManivannan Sadhasivam 1238485149cSManivannan Sadhasivam /* Channel reset command */ 1248485149cSManivannan Sadhasivam #define MHI_TRE_CMD_RESET_PTR 0 1258485149cSManivannan Sadhasivam #define MHI_TRE_CMD_RESET_DWORD0 0 1268485149cSManivannan Sadhasivam #define MHI_TRE_CMD_RESET_DWORD1(chid) cpu_to_le32(FIELD_PREP(GENMASK(31, 24), chid) | \ 1278485149cSManivannan Sadhasivam FIELD_PREP(GENMASK(23, 16), \ 1288485149cSManivannan Sadhasivam MHI_CMD_RESET_CHAN)) 1298485149cSManivannan Sadhasivam 1308485149cSManivannan Sadhasivam /* Channel stop command */ 1318485149cSManivannan Sadhasivam #define MHI_TRE_CMD_STOP_PTR 0 1328485149cSManivannan Sadhasivam #define MHI_TRE_CMD_STOP_DWORD0 0 1338485149cSManivannan Sadhasivam #define MHI_TRE_CMD_STOP_DWORD1(chid) cpu_to_le32(FIELD_PREP(GENMASK(31, 24), chid) | \ 1348485149cSManivannan Sadhasivam FIELD_PREP(GENMASK(23, 16), \ 1358485149cSManivannan Sadhasivam MHI_CMD_STOP_CHAN)) 1368485149cSManivannan Sadhasivam 1378485149cSManivannan Sadhasivam /* Channel start command */ 1388485149cSManivannan Sadhasivam #define MHI_TRE_CMD_START_PTR 0 1398485149cSManivannan Sadhasivam #define MHI_TRE_CMD_START_DWORD0 0 1408485149cSManivannan Sadhasivam #define MHI_TRE_CMD_START_DWORD1(chid) cpu_to_le32(FIELD_PREP(GENMASK(31, 24), chid) | \ 1418485149cSManivannan Sadhasivam FIELD_PREP(GENMASK(23, 16), \ 1428485149cSManivannan Sadhasivam MHI_CMD_START_CHAN)) 1438485149cSManivannan Sadhasivam 1448485149cSManivannan Sadhasivam #define MHI_TRE_GET_DWORD(tre, word) le32_to_cpu((tre)->dword[(word)]) 1458485149cSManivannan Sadhasivam #define MHI_TRE_GET_CMD_CHID(tre) FIELD_GET(GENMASK(31, 24), MHI_TRE_GET_DWORD(tre, 1)) 1468485149cSManivannan Sadhasivam #define MHI_TRE_GET_CMD_TYPE(tre) FIELD_GET(GENMASK(23, 16), MHI_TRE_GET_DWORD(tre, 1)) 1478485149cSManivannan Sadhasivam 1488485149cSManivannan Sadhasivam /* Event descriptor macros */ 1498485149cSManivannan Sadhasivam #define MHI_TRE_EV_PTR(ptr) cpu_to_le64(ptr) 1508485149cSManivannan Sadhasivam #define MHI_TRE_EV_DWORD0(code, len) cpu_to_le32(FIELD_PREP(GENMASK(31, 24), code) | \ 1518485149cSManivannan Sadhasivam FIELD_PREP(GENMASK(15, 0), len)) 1528485149cSManivannan Sadhasivam #define MHI_TRE_EV_DWORD1(chid, type) cpu_to_le32(FIELD_PREP(GENMASK(31, 24), chid) | \ 1538485149cSManivannan Sadhasivam FIELD_PREP(GENMASK(23, 16), type)) 1548485149cSManivannan Sadhasivam #define MHI_TRE_GET_EV_PTR(tre) le64_to_cpu((tre)->ptr) 1558485149cSManivannan Sadhasivam #define MHI_TRE_GET_EV_CODE(tre) FIELD_GET(GENMASK(31, 24), (MHI_TRE_GET_DWORD(tre, 0))) 1568485149cSManivannan Sadhasivam #define MHI_TRE_GET_EV_LEN(tre) FIELD_GET(GENMASK(15, 0), (MHI_TRE_GET_DWORD(tre, 0))) 1578485149cSManivannan Sadhasivam #define MHI_TRE_GET_EV_CHID(tre) FIELD_GET(GENMASK(31, 24), (MHI_TRE_GET_DWORD(tre, 1))) 1588485149cSManivannan Sadhasivam #define MHI_TRE_GET_EV_TYPE(tre) FIELD_GET(GENMASK(23, 16), (MHI_TRE_GET_DWORD(tre, 1))) 1598485149cSManivannan Sadhasivam #define MHI_TRE_GET_EV_STATE(tre) FIELD_GET(GENMASK(31, 24), (MHI_TRE_GET_DWORD(tre, 0))) 1608485149cSManivannan Sadhasivam #define MHI_TRE_GET_EV_EXECENV(tre) FIELD_GET(GENMASK(31, 24), (MHI_TRE_GET_DWORD(tre, 0))) 1618485149cSManivannan Sadhasivam #define MHI_TRE_GET_EV_SEQ(tre) MHI_TRE_GET_DWORD(tre, 0) 1628485149cSManivannan Sadhasivam #define MHI_TRE_GET_EV_TIME(tre) MHI_TRE_GET_EV_PTR(tre) 1638485149cSManivannan Sadhasivam #define MHI_TRE_GET_EV_COOKIE(tre) lower_32_bits(MHI_TRE_GET_EV_PTR(tre)) 1648485149cSManivannan Sadhasivam #define MHI_TRE_GET_EV_VEID(tre) FIELD_GET(GENMASK(23, 16), (MHI_TRE_GET_DWORD(tre, 0))) 1658485149cSManivannan Sadhasivam #define MHI_TRE_GET_EV_LINKSPEED(tre) FIELD_GET(GENMASK(31, 24), (MHI_TRE_GET_DWORD(tre, 1))) 1668485149cSManivannan Sadhasivam #define MHI_TRE_GET_EV_LINKWIDTH(tre) FIELD_GET(GENMASK(7, 0), (MHI_TRE_GET_DWORD(tre, 0))) 1678485149cSManivannan Sadhasivam 1688485149cSManivannan Sadhasivam /* Transfer descriptor macros */ 1698485149cSManivannan Sadhasivam #define MHI_TRE_DATA_PTR(ptr) cpu_to_le64(ptr) 1708485149cSManivannan Sadhasivam #define MHI_TRE_DATA_DWORD0(len) cpu_to_le32(FIELD_PREP(GENMASK(15, 0), len)) 1718485149cSManivannan Sadhasivam #define MHI_TRE_TYPE_TRANSFER 2 1728485149cSManivannan Sadhasivam #define MHI_TRE_DATA_DWORD1(bei, ieot, ieob, chain) cpu_to_le32(FIELD_PREP(GENMASK(23, 16), \ 1738485149cSManivannan Sadhasivam MHI_TRE_TYPE_TRANSFER) | \ 1748485149cSManivannan Sadhasivam FIELD_PREP(BIT(10), bei) | \ 1758485149cSManivannan Sadhasivam FIELD_PREP(BIT(9), ieot) | \ 1768485149cSManivannan Sadhasivam FIELD_PREP(BIT(8), ieob) | \ 1778485149cSManivannan Sadhasivam FIELD_PREP(BIT(0), chain)) 1788485149cSManivannan Sadhasivam 1798485149cSManivannan Sadhasivam /* RSC transfer descriptor macros */ 1808485149cSManivannan Sadhasivam #define MHI_RSCTRE_DATA_PTR(ptr, len) cpu_to_le64(FIELD_PREP(GENMASK(64, 48), len) | ptr) 1818485149cSManivannan Sadhasivam #define MHI_RSCTRE_DATA_DWORD0(cookie) cpu_to_le32(cookie) 1828485149cSManivannan Sadhasivam #define MHI_RSCTRE_DATA_DWORD1 cpu_to_le32(FIELD_PREP(GENMASK(23, 16), \ 1838485149cSManivannan Sadhasivam MHI_PKT_TYPE_COALESCING)) 1848485149cSManivannan Sadhasivam 1858485149cSManivannan Sadhasivam enum mhi_pkt_type { 1868485149cSManivannan Sadhasivam MHI_PKT_TYPE_INVALID = 0x0, 1878485149cSManivannan Sadhasivam MHI_PKT_TYPE_NOOP_CMD = 0x1, 1888485149cSManivannan Sadhasivam MHI_PKT_TYPE_TRANSFER = 0x2, 1898485149cSManivannan Sadhasivam MHI_PKT_TYPE_COALESCING = 0x8, 1908485149cSManivannan Sadhasivam MHI_PKT_TYPE_RESET_CHAN_CMD = 0x10, 1918485149cSManivannan Sadhasivam MHI_PKT_TYPE_STOP_CHAN_CMD = 0x11, 1928485149cSManivannan Sadhasivam MHI_PKT_TYPE_START_CHAN_CMD = 0x12, 1938485149cSManivannan Sadhasivam MHI_PKT_TYPE_STATE_CHANGE_EVENT = 0x20, 1948485149cSManivannan Sadhasivam MHI_PKT_TYPE_CMD_COMPLETION_EVENT = 0x21, 1958485149cSManivannan Sadhasivam MHI_PKT_TYPE_TX_EVENT = 0x22, 1968485149cSManivannan Sadhasivam MHI_PKT_TYPE_RSC_TX_EVENT = 0x28, 1978485149cSManivannan Sadhasivam MHI_PKT_TYPE_EE_EVENT = 0x40, 1988485149cSManivannan Sadhasivam MHI_PKT_TYPE_TSYNC_EVENT = 0x48, 1998485149cSManivannan Sadhasivam MHI_PKT_TYPE_BW_REQ_EVENT = 0x50, 2008485149cSManivannan Sadhasivam MHI_PKT_TYPE_STALE_EVENT, /* internal event */ 2018485149cSManivannan Sadhasivam }; 2028485149cSManivannan Sadhasivam 2038485149cSManivannan Sadhasivam /* MHI transfer completion events */ 2048485149cSManivannan Sadhasivam enum mhi_ev_ccs { 2058485149cSManivannan Sadhasivam MHI_EV_CC_INVALID = 0x0, 2068485149cSManivannan Sadhasivam MHI_EV_CC_SUCCESS = 0x1, 2078485149cSManivannan Sadhasivam MHI_EV_CC_EOT = 0x2, /* End of transfer event */ 2088485149cSManivannan Sadhasivam MHI_EV_CC_OVERFLOW = 0x3, 2098485149cSManivannan Sadhasivam MHI_EV_CC_EOB = 0x4, /* End of block event */ 2108485149cSManivannan Sadhasivam MHI_EV_CC_OOB = 0x5, /* Out of block event */ 2118485149cSManivannan Sadhasivam MHI_EV_CC_DB_MODE = 0x6, 2128485149cSManivannan Sadhasivam MHI_EV_CC_UNDEFINED_ERR = 0x10, 2138485149cSManivannan Sadhasivam MHI_EV_CC_BAD_TRE = 0x11, 2148485149cSManivannan Sadhasivam }; 2158485149cSManivannan Sadhasivam 2168485149cSManivannan Sadhasivam /* Channel state */ 2178485149cSManivannan Sadhasivam enum mhi_ch_state { 2188485149cSManivannan Sadhasivam MHI_CH_STATE_DISABLED, 2198485149cSManivannan Sadhasivam MHI_CH_STATE_ENABLED, 2208485149cSManivannan Sadhasivam MHI_CH_STATE_RUNNING, 2218485149cSManivannan Sadhasivam MHI_CH_STATE_SUSPENDED, 2228485149cSManivannan Sadhasivam MHI_CH_STATE_STOP, 2238485149cSManivannan Sadhasivam MHI_CH_STATE_ERROR, 2248485149cSManivannan Sadhasivam }; 2258485149cSManivannan Sadhasivam 2268485149cSManivannan Sadhasivam enum mhi_cmd_type { 2278485149cSManivannan Sadhasivam MHI_CMD_NOP = 1, 2288485149cSManivannan Sadhasivam MHI_CMD_RESET_CHAN = 16, 2298485149cSManivannan Sadhasivam MHI_CMD_STOP_CHAN = 17, 2308485149cSManivannan Sadhasivam MHI_CMD_START_CHAN = 18, 2318485149cSManivannan Sadhasivam }; 2328485149cSManivannan Sadhasivam 2338485149cSManivannan Sadhasivam #define EV_CTX_RESERVED_MASK GENMASK(7, 0) 2348485149cSManivannan Sadhasivam #define EV_CTX_INTMODC_MASK GENMASK(15, 8) 2358485149cSManivannan Sadhasivam #define EV_CTX_INTMODT_MASK GENMASK(31, 16) 2368485149cSManivannan Sadhasivam struct mhi_event_ctxt { 2378485149cSManivannan Sadhasivam __le32 intmod; 2388485149cSManivannan Sadhasivam __le32 ertype; 2398485149cSManivannan Sadhasivam __le32 msivec; 2408485149cSManivannan Sadhasivam 2418485149cSManivannan Sadhasivam __le64 rbase __packed __aligned(4); 2428485149cSManivannan Sadhasivam __le64 rlen __packed __aligned(4); 2438485149cSManivannan Sadhasivam __le64 rp __packed __aligned(4); 2448485149cSManivannan Sadhasivam __le64 wp __packed __aligned(4); 2458485149cSManivannan Sadhasivam }; 2468485149cSManivannan Sadhasivam 2478485149cSManivannan Sadhasivam #define CHAN_CTX_CHSTATE_MASK GENMASK(7, 0) 2488485149cSManivannan Sadhasivam #define CHAN_CTX_BRSTMODE_MASK GENMASK(9, 8) 2498485149cSManivannan Sadhasivam #define CHAN_CTX_POLLCFG_MASK GENMASK(15, 10) 2508485149cSManivannan Sadhasivam #define CHAN_CTX_RESERVED_MASK GENMASK(31, 16) 2518485149cSManivannan Sadhasivam struct mhi_chan_ctxt { 2528485149cSManivannan Sadhasivam __le32 chcfg; 2538485149cSManivannan Sadhasivam __le32 chtype; 2548485149cSManivannan Sadhasivam __le32 erindex; 2558485149cSManivannan Sadhasivam 2568485149cSManivannan Sadhasivam __le64 rbase __packed __aligned(4); 2578485149cSManivannan Sadhasivam __le64 rlen __packed __aligned(4); 2588485149cSManivannan Sadhasivam __le64 rp __packed __aligned(4); 2598485149cSManivannan Sadhasivam __le64 wp __packed __aligned(4); 2608485149cSManivannan Sadhasivam }; 2618485149cSManivannan Sadhasivam 2628485149cSManivannan Sadhasivam struct mhi_cmd_ctxt { 2638485149cSManivannan Sadhasivam __le32 reserved0; 2648485149cSManivannan Sadhasivam __le32 reserved1; 2658485149cSManivannan Sadhasivam __le32 reserved2; 2668485149cSManivannan Sadhasivam 2678485149cSManivannan Sadhasivam __le64 rbase __packed __aligned(4); 2688485149cSManivannan Sadhasivam __le64 rlen __packed __aligned(4); 2698485149cSManivannan Sadhasivam __le64 rp __packed __aligned(4); 2708485149cSManivannan Sadhasivam __le64 wp __packed __aligned(4); 2718485149cSManivannan Sadhasivam }; 2728485149cSManivannan Sadhasivam 2738485149cSManivannan Sadhasivam struct mhi_ring_element { 2748485149cSManivannan Sadhasivam __le64 ptr; 2758485149cSManivannan Sadhasivam __le32 dword[2]; 2768485149cSManivannan Sadhasivam }; 2778485149cSManivannan Sadhasivam 278*3a1b8e28SManivannan Sadhasivam static inline const char *mhi_state_str(enum mhi_state state) 279*3a1b8e28SManivannan Sadhasivam { 280*3a1b8e28SManivannan Sadhasivam switch (state) { 281*3a1b8e28SManivannan Sadhasivam case MHI_STATE_RESET: 282*3a1b8e28SManivannan Sadhasivam return "RESET"; 283*3a1b8e28SManivannan Sadhasivam case MHI_STATE_READY: 284*3a1b8e28SManivannan Sadhasivam return "READY"; 285*3a1b8e28SManivannan Sadhasivam case MHI_STATE_M0: 286*3a1b8e28SManivannan Sadhasivam return "M0"; 287*3a1b8e28SManivannan Sadhasivam case MHI_STATE_M1: 288*3a1b8e28SManivannan Sadhasivam return "M1"; 289*3a1b8e28SManivannan Sadhasivam case MHI_STATE_M2: 290*3a1b8e28SManivannan Sadhasivam return "M2"; 291*3a1b8e28SManivannan Sadhasivam case MHI_STATE_M3: 292*3a1b8e28SManivannan Sadhasivam return "M3"; 293*3a1b8e28SManivannan Sadhasivam case MHI_STATE_M3_FAST: 294*3a1b8e28SManivannan Sadhasivam return "M3 FAST"; 295*3a1b8e28SManivannan Sadhasivam case MHI_STATE_BHI: 296*3a1b8e28SManivannan Sadhasivam return "BHI"; 297*3a1b8e28SManivannan Sadhasivam case MHI_STATE_SYS_ERR: 298*3a1b8e28SManivannan Sadhasivam return "SYS ERROR"; 299*3a1b8e28SManivannan Sadhasivam default: 300*3a1b8e28SManivannan Sadhasivam return "Unknown state"; 301*3a1b8e28SManivannan Sadhasivam } 302*3a1b8e28SManivannan Sadhasivam }; 3038485149cSManivannan Sadhasivam 3048485149cSManivannan Sadhasivam #endif /* _MHI_COMMON_H */ 305