1use kernel::utilities::registers::ReadOnly;
13use kernel::utilities::registers::ReadWrite;
14use kernel::utilities::registers::WriteOnly;
15use kernel::utilities::registers::{register_bitfields, register_structs};
16pub const SPI_HOST_PARAM_NUM_C_S: u32 = 1;
18pub const SPI_HOST_PARAM_TX_DEPTH: u32 = 72;
20pub const SPI_HOST_PARAM_RX_DEPTH: u32 = 64;
22pub const SPI_HOST_PARAM_CMD_DEPTH: u32 = 4;
24pub const SPI_HOST_PARAM_NUM_ALERTS: u32 = 1;
26pub const SPI_HOST_PARAM_REG_WIDTH: u32 = 32;
28
29register_structs! {
30    pub SpiHostRegisters {
31        (0x0000 => pub(crate) intr_state: ReadWrite<u32, INTR::Register>),
33        (0x0004 => pub(crate) intr_enable: ReadWrite<u32, INTR::Register>),
35        (0x0008 => pub(crate) intr_test: ReadWrite<u32, INTR::Register>),
37        (0x000c => pub(crate) alert_test: ReadWrite<u32, ALERT_TEST::Register>),
39        (0x0010 => pub(crate) control: ReadWrite<u32, CONTROL::Register>),
41        (0x0014 => pub(crate) status: ReadWrite<u32, STATUS::Register>),
43        (0x0018 => pub(crate) configopts: [ReadWrite<u32, CONFIGOPTS::Register>; 1]),
45        (0x001c => pub(crate) csid: ReadWrite<u32, CSID::Register>),
47        (0x0020 => pub(crate) command: ReadWrite<u32, COMMAND::Register>),
49        (0x0024 => pub(crate) rxdata: [ReadOnly<u32>; 1]),
51        (0x0028 => pub(crate) txdata: [WriteOnly<u32>; 1]),
53        (0x002c => pub(crate) error_enable: ReadWrite<u32, ERROR_ENABLE::Register>),
55        (0x0030 => pub(crate) error_status: ReadWrite<u32, ERROR_STATUS::Register>),
57        (0x0034 => pub(crate) event_enable: ReadWrite<u32, EVENT_ENABLE::Register>),
59        (0x0038 => @END),
60    }
61}
62
63register_bitfields![u32,
64    pub(crate) INTR [
66        ERROR OFFSET(0) NUMBITS(1) [],
67        SPI_EVENT OFFSET(1) NUMBITS(1) [],
68    ],
69    pub(crate) ALERT_TEST [
70        FATAL_FAULT OFFSET(0) NUMBITS(1) [],
71    ],
72    pub(crate) CONTROL [
73        RX_WATERMARK OFFSET(0) NUMBITS(8) [],
74        TX_WATERMARK OFFSET(8) NUMBITS(8) [],
75        OUTPUT_EN OFFSET(29) NUMBITS(1) [],
76        SW_RST OFFSET(30) NUMBITS(1) [],
77        SPIEN OFFSET(31) NUMBITS(1) [],
78    ],
79    pub(crate) STATUS [
80        TXQD OFFSET(0) NUMBITS(8) [],
81        RXQD OFFSET(8) NUMBITS(8) [],
82        CMDQD OFFSET(16) NUMBITS(4) [],
83        RXWM OFFSET(20) NUMBITS(1) [],
84        BYTEORDER OFFSET(22) NUMBITS(1) [],
85        RXSTALL OFFSET(23) NUMBITS(1) [],
86        RXEMPTY OFFSET(24) NUMBITS(1) [],
87        RXFULL OFFSET(25) NUMBITS(1) [],
88        TXWM OFFSET(26) NUMBITS(1) [],
89        TXSTALL OFFSET(27) NUMBITS(1) [],
90        TXEMPTY OFFSET(28) NUMBITS(1) [],
91        TXFULL OFFSET(29) NUMBITS(1) [],
92        ACTIVE OFFSET(30) NUMBITS(1) [],
93        READY OFFSET(31) NUMBITS(1) [],
94    ],
95    pub(crate) CONFIGOPTS [
96        CLKDIV_0 OFFSET(0) NUMBITS(16) [],
97        CSNIDLE_0 OFFSET(16) NUMBITS(4) [],
98        CSNTRAIL_0 OFFSET(20) NUMBITS(4) [],
99        CSNLEAD_0 OFFSET(24) NUMBITS(4) [],
100        FULLCYC_0 OFFSET(29) NUMBITS(1) [],
101        CPHA_0 OFFSET(30) NUMBITS(1) [],
102        CPOL_0 OFFSET(31) NUMBITS(1) [],
103    ],
104    pub(crate) CSID [
105        CSID OFFSET(0) NUMBITS(32) [],
106    ],
107    pub(crate) COMMAND [
108        LEN OFFSET(0) NUMBITS(9) [],
109        CSAAT OFFSET(9) NUMBITS(1) [],
110        SPEED OFFSET(10) NUMBITS(2) [],
111        DIRECTION OFFSET(12) NUMBITS(2) [],
112    ],
113    pub(crate) ERROR_ENABLE [
114        CMDBUSY OFFSET(0) NUMBITS(1) [],
115        OVERFLOW OFFSET(1) NUMBITS(1) [],
116        UNDERFLOW OFFSET(2) NUMBITS(1) [],
117        CMDINVAL OFFSET(3) NUMBITS(1) [],
118        CSIDINVAL OFFSET(4) NUMBITS(1) [],
119    ],
120    pub(crate) ERROR_STATUS [
121        CMDBUSY OFFSET(0) NUMBITS(1) [],
122        OVERFLOW OFFSET(1) NUMBITS(1) [],
123        UNDERFLOW OFFSET(2) NUMBITS(1) [],
124        CMDINVAL OFFSET(3) NUMBITS(1) [],
125        CSIDINVAL OFFSET(4) NUMBITS(1) [],
126        ACCESSINVAL OFFSET(5) NUMBITS(1) [],
127    ],
128    pub(crate) EVENT_ENABLE [
129        RXFULL OFFSET(0) NUMBITS(1) [],
130        TXEMPTY OFFSET(1) NUMBITS(1) [],
131        RXWM OFFSET(2) NUMBITS(1) [],
132        TXWM OFFSET(3) NUMBITS(1) [],
133        READY OFFSET(4) NUMBITS(1) [],
134        IDLE OFFSET(5) NUMBITS(1) [],
135    ],
136];
137
138