[sw, dif_uart] Return enum error codes instead of bool
This change keeps dif_uart conformant with the DIF guidlines outlined
in the README file.
Signed-off-by: Silvestrs Timofejevs <silvestrst@lowrisc.org>
diff --git a/sw/device/lib/dif/dif_uart.c b/sw/device/lib/dif/dif_uart.c
index 85e77d6..ce66a92 100644
--- a/sw/device/lib/dif/dif_uart.c
+++ b/sw/device/lib/dif/dif_uart.c
@@ -97,10 +97,10 @@
/**
* Performs fundamental UART configuration.
*/
-static bool uart_configure(const dif_uart_t *uart,
- const dif_uart_config_t *config) {
+static dif_uart_config_result_t uart_configure(
+ const dif_uart_t *uart, const dif_uart_config_t *config) {
if (config->baudrate == 0 || config->clk_freq_hz == 0) {
- return false;
+ return kDifUartConfigBadConfig;
}
// Calculation formula: NCO = 2^20 * baud / fclk.
@@ -109,7 +109,7 @@
// Requested baudrate is too high for the given clock frequency.
if (nco != nco_masked) {
- return false;
+ return kDifUartConfigBadNco;
}
// Must be called before the first write to any of the UART registers.
@@ -135,7 +135,7 @@
// Disable interrupts.
mmio_region_write32(uart->base_addr, UART_INTR_ENABLE_REG_OFFSET, 0u);
- return true;
+ return kDifUartConfigOk;
}
/**
@@ -166,10 +166,11 @@
return bytes_read;
}
-bool dif_uart_init(mmio_region_t base_addr, const dif_uart_config_t *config,
- dif_uart_t *uart) {
+dif_uart_config_result_t dif_uart_init(mmio_region_t base_addr,
+ const dif_uart_config_t *config,
+ dif_uart_t *uart) {
if (uart == NULL || config == NULL) {
- return false;
+ return kDifUartBadArg;
}
uart->base_addr = base_addr;
@@ -177,19 +178,19 @@
return uart_configure(uart, config);
}
-bool dif_uart_configure(const dif_uart_t *uart,
- const dif_uart_config_t *config) {
+dif_uart_config_result_t dif_uart_configure(const dif_uart_t *uart,
+ const dif_uart_config_t *config) {
if ((uart == NULL) || (config == NULL)) {
- return false;
+ return kDifUartBadArg;
}
return uart_configure(uart, config);
}
-bool dif_uart_watermark_rx_set(const dif_uart_t *uart,
- dif_uart_watermark_t watermark) {
+dif_uart_result_t dif_uart_watermark_rx_set(const dif_uart_t *uart,
+ dif_uart_watermark_t watermark) {
if (uart == NULL) {
- return false;
+ return kDifUartBadArg;
}
// Check if the requested watermark is valid, and get a corresponding
@@ -214,20 +215,20 @@
field.value = UART_FIFO_CTRL_RXILVL_RXLVL30;
break;
default:
- return false;
+ return kDifUartError;
}
// Set watermark level.
mmio_region_nonatomic_set_field32(uart->base_addr, UART_FIFO_CTRL_REG_OFFSET,
field);
- return true;
+ return kDifUartOk;
}
-bool dif_uart_watermark_tx_set(const dif_uart_t *uart,
- dif_uart_watermark_t watermark) {
+dif_uart_result_t dif_uart_watermark_tx_set(const dif_uart_t *uart,
+ dif_uart_watermark_t watermark) {
if (uart == NULL) {
- return false;
+ return kDifUartBadArg;
}
// Check if the requested watermark is valid, and get a corresponding
@@ -250,20 +251,22 @@
break;
default:
// The minimal TX watermark is 1 byte, maximal 16 bytes.
- return false;
+ return kDifUartError;
}
// Set watermark level.
mmio_region_nonatomic_set_field32(uart->base_addr, UART_FIFO_CTRL_REG_OFFSET,
field);
- return true;
+ return kDifUartOk;
}
-bool dif_uart_bytes_send(const dif_uart_t *uart, const uint8_t *data,
- size_t bytes_requested, size_t *bytes_written) {
+dif_uart_result_t dif_uart_bytes_send(const dif_uart_t *uart,
+ const uint8_t *data,
+ size_t bytes_requested,
+ size_t *bytes_written) {
if (uart == NULL || data == NULL) {
- return false;
+ return kDifUartBadArg;
}
// `bytes_written` is an optional parameter.
@@ -272,13 +275,14 @@
*bytes_written = res;
}
- return true;
+ return kDifUartOk;
}
-bool dif_uart_bytes_receive(const dif_uart_t *uart, size_t bytes_requested,
- uint8_t *data, size_t *bytes_read) {
+dif_uart_result_t dif_uart_bytes_receive(const dif_uart_t *uart,
+ size_t bytes_requested, uint8_t *data,
+ size_t *bytes_read) {
if (uart == NULL || data == NULL) {
- return false;
+ return kDifUartBadArg;
}
// `bytes_read` is an optional parameter.
@@ -287,12 +291,13 @@
*bytes_read = res;
}
- return true;
+ return kDifUartOk;
}
-bool dif_uart_byte_send_polled(const dif_uart_t *uart, uint8_t byte) {
+dif_uart_result_t dif_uart_byte_send_polled(const dif_uart_t *uart,
+ uint8_t byte) {
if (uart == NULL) {
- return false;
+ return kDifUartBadArg;
}
// Busy wait for the TX FIFO to free up.
@@ -306,12 +311,13 @@
while (!uart_tx_idle(uart)) {
}
- return true;
+ return kDifUartOk;
}
-bool dif_uart_byte_receive_polled(const dif_uart_t *uart, uint8_t *byte) {
+dif_uart_result_t dif_uart_byte_receive_polled(const dif_uart_t *uart,
+ uint8_t *byte) {
if (uart == NULL || byte == NULL) {
- return false;
+ return kDifUartBadArg;
}
// Busy wait for the RX message in the FIFO.
@@ -320,19 +326,19 @@
(void)uart_bytes_receive(uart, 1, byte);
- return true;
+ return kDifUartOk;
}
-bool dif_uart_irq_state_get(const dif_uart_t *uart,
- dif_uart_interrupt_t irq_type,
- dif_uart_enable_t *state) {
+dif_uart_result_t dif_uart_irq_state_get(const dif_uart_t *uart,
+ dif_uart_interrupt_t irq_type,
+ dif_uart_enable_t *state) {
if (uart == NULL || state == NULL) {
- return false;
+ return kDifUartBadArg;
}
ptrdiff_t offset;
if (!uart_irq_offset_get(irq_type, &offset)) {
- return false;
+ return kDifUartError;
}
// Get the requested interrupt state (enabled/disabled).
@@ -344,30 +350,31 @@
*state = kDifUartDisable;
}
- return true;
+ return kDifUartOk;
}
-bool dif_uart_irq_state_clear(const dif_uart_t *uart,
- dif_uart_interrupt_t irq_type) {
+dif_uart_result_t dif_uart_irq_state_clear(const dif_uart_t *uart,
+ dif_uart_interrupt_t irq_type) {
if (uart == NULL) {
- return false;
+ return kDifUartBadArg;
}
ptrdiff_t offset;
if (!uart_irq_offset_get(irq_type, &offset)) {
- return false;
+ return kDifUartError;
}
// Writing to the register clears the corresponding bits.
mmio_region_write_only_set_bit32(uart->base_addr, UART_INTR_STATE_REG_OFFSET,
offset);
- return true;
+ return kDifUartOk;
}
-bool dif_uart_irqs_disable(const dif_uart_t *uart, uint32_t *state) {
+dif_uart_result_t dif_uart_irqs_disable(const dif_uart_t *uart,
+ uint32_t *state) {
if (uart == NULL) {
- return false;
+ return kDifUartBadArg;
}
// Pass the current interrupt state to the caller.
@@ -378,29 +385,31 @@
// Disable all UART interrupts.
mmio_region_write32(uart->base_addr, UART_INTR_ENABLE_REG_OFFSET, 0u);
- return true;
+ return kDifUartOk;
}
-bool dif_uart_irqs_restore(const dif_uart_t *uart, uint32_t state) {
+dif_uart_result_t dif_uart_irqs_restore(const dif_uart_t *uart,
+ uint32_t state) {
if (uart == NULL) {
- return false;
+ return kDifUartBadArg;
}
// Restore the interrupt state.
mmio_region_write32(uart->base_addr, UART_INTR_ENABLE_REG_OFFSET, state);
- return true;
+ return kDifUartOk;
}
-bool dif_uart_irq_enable(const dif_uart_t *uart, dif_uart_interrupt_t irq_type,
- dif_uart_enable_t enable) {
+dif_uart_result_t dif_uart_irq_enable(const dif_uart_t *uart,
+ dif_uart_interrupt_t irq_type,
+ dif_uart_enable_t enable) {
if (uart == NULL) {
- return false;
+ return kDifUartBadArg;
}
ptrdiff_t offset;
if (!uart_irq_offset_get(irq_type, &offset)) {
- return false;
+ return kDifUartError;
}
// Enable/disable the requested interrupt.
@@ -412,29 +421,31 @@
UART_INTR_ENABLE_REG_OFFSET, offset);
}
- return true;
+ return kDifUartOk;
}
-bool dif_uart_irq_force(const dif_uart_t *uart, dif_uart_interrupt_t irq_type) {
+dif_uart_result_t dif_uart_irq_force(const dif_uart_t *uart,
+ dif_uart_interrupt_t irq_type) {
if (uart == NULL) {
- return false;
+ return kDifUartBadArg;
}
ptrdiff_t offset;
if (!uart_irq_offset_get(irq_type, &offset)) {
- return false;
+ return kDifUartError;
}
// Force the requested interrupt.
mmio_region_nonatomic_set_bit32(uart->base_addr, UART_INTR_TEST_REG_OFFSET,
offset);
- return true;
+ return kDifUartOk;
}
-bool dif_uart_rx_bytes_available(const dif_uart_t *uart, size_t *num_bytes) {
+dif_uart_result_t dif_uart_rx_bytes_available(const dif_uart_t *uart,
+ size_t *num_bytes) {
if (uart == NULL || num_bytes == NULL) {
- return false;
+ return kDifUartBadArg;
}
// RX FIFO fill level (in bytes).
@@ -442,12 +453,13 @@
uart->base_addr, UART_FIFO_STATUS_REG_OFFSET, UART_FIFO_STATUS_RXLVL_MASK,
UART_FIFO_STATUS_RXLVL_OFFSET);
- return true;
+ return kDifUartOk;
}
-bool dif_uart_tx_bytes_available(const dif_uart_t *uart, size_t *num_bytes) {
+dif_uart_result_t dif_uart_tx_bytes_available(const dif_uart_t *uart,
+ size_t *num_bytes) {
if (uart == NULL || num_bytes == NULL) {
- return false;
+ return kDifUartBadArg;
}
// TX FIFO fill level (in bytes).
@@ -457,5 +469,5 @@
*num_bytes = kDifUartFifoSizeBytes - fill_bytes;
- return true;
+ return kDifUartOk;
}
diff --git a/sw/device/lib/dif/dif_uart.h b/sw/device/lib/dif/dif_uart.h
index 257e374..36b4041 100644
--- a/sw/device/lib/dif/dif_uart.h
+++ b/sw/device/lib/dif/dif_uart.h
@@ -91,6 +91,30 @@
} dif_uart_t;
/**
+ * Uart generic status codes.
+ *
+ * These error codes can be used by any function. However if a function
+ * requires additional status codes, it must define a set of status codes to
+ * be used exclusicvely by such function.
+ */
+typedef enum dif_uart_result {
+ kDifUartOk = 0, /**< Success. */
+ kDifUartError, /**< General error. */
+ kDifUartBadArg, /**< Input parameter is not valid. */
+} dif_uart_result_t;
+
+/**
+ * Uart initialisation routine status codes.
+ */
+typedef enum dif_uart_config_result {
+ kDifUartConfigOk = 0, /**< Success. */
+ kDifUartConfigError, /**< General error. */
+ kDifUartConfigBadArg, /**< Input parameter is not valid. */
+ kDifUartConfigBadConfig, /**< Configuration is not valid. */
+ kDifUartConfigBadNco, /**< Calculated NCO is not valid. */
+} dif_uart_config_result_t;
+
+/**
* Initialise an instance of UART.
*
* Initialise UART instance using the configuration data in `config`.
@@ -99,10 +123,11 @@
* @param base_addr Base address of an instance of UART IP block.
* @param config UART configuration data.
* @param uart UART state data.
- * @return true if the function was successful, false otherwise.
+ * @return `dif_uart_config_result_t`.
*/
-bool dif_uart_init(mmio_region_t base_addr, const dif_uart_config_t *config,
- dif_uart_t *uart);
+dif_uart_config_result_t dif_uart_init(mmio_region_t base_addr,
+ const dif_uart_config_t *config,
+ dif_uart_t *uart);
/**
* Configure an instance of UART.
@@ -112,10 +137,10 @@
*
* @param uart UART state data.
* @param config UART configuration data.
- * @return true if the function was successful, false otherwise.
+ * @return `dif_uart_config_result_t`.
*/
-bool dif_uart_configure(const dif_uart_t *uart,
- const dif_uart_config_t *config);
+dif_uart_config_result_t dif_uart_configure(const dif_uart_t *uart,
+ const dif_uart_config_t *config);
/**
* Set the RX FIFO watermark.
@@ -126,10 +151,11 @@
*
* @param uart UART state data.
* @param watermark RX FIFO watermark.
- * @return true if the function was successful, false otherwise.
+ * @return `dif_uart_result_t`.
*/
-bool dif_uart_watermark_rx_set(const dif_uart_t *uart,
- dif_uart_watermark_t watermark);
+dif_uart_result_t dif_uart_watermark_rx_set(const dif_uart_t *uart,
+ dif_uart_watermark_t watermark);
+
/**
* Set the TX FIFO watermark.
*
@@ -139,10 +165,10 @@
*
* @param uart UART state data.
* @param watermark TX FIFO watermark.
- * @return true if the function was successful, false otherwise.
+ * @return `dif_uart_result_t`.
*/
-bool dif_uart_watermark_tx_set(const dif_uart_t *uart,
- dif_uart_watermark_t watermark);
+dif_uart_result_t dif_uart_watermark_tx_set(const dif_uart_t *uart,
+ dif_uart_watermark_t watermark);
/**
* UART send bytes.
@@ -157,10 +183,12 @@
* @param data Data to be written.
* @param bytes_requested Number of bytes requested to be written by the caller.
* @param bytes_written Number of bytes written (optional).
- * @return true if the function was successful, false otherwise.
+ * @return `dif_uart_result_t`.
*/
-bool dif_uart_bytes_send(const dif_uart_t *uart, const uint8_t *data,
- size_t bytes_requested, size_t *bytes_written);
+dif_uart_result_t dif_uart_bytes_send(const dif_uart_t *uart,
+ const uint8_t *data,
+ size_t bytes_requested,
+ size_t *bytes_written);
/**
* UART receive bytes.
@@ -175,10 +203,11 @@
* @param bytes_requested Number of bytes requested to be read by the caller.
* @param data Data to be read.
* @param bytes_read Number of bytes read (optional).
- * @return true if the function was successful, false otherwise.
+ * @return `dif_uart_result_t`
*/
-bool dif_uart_bytes_receive(const dif_uart_t *uart, size_t bytes_requested,
- uint8_t *data, size_t *bytes_read);
+dif_uart_result_t dif_uart_bytes_receive(const dif_uart_t *uart,
+ size_t bytes_requested, uint8_t *data,
+ size_t *bytes_read);
/**
* Transmit a single UART byte (polled).
@@ -188,9 +217,10 @@
*
* @param uart UART state data.
* @param byte Byte to be transmitted.
- * @return true if the function was successful, false otherwise.
+ * @return `dif_uart_result_t`.
*/
-bool dif_uart_byte_send_polled(const dif_uart_t *uart, uint8_t byte);
+dif_uart_result_t dif_uart_byte_send_polled(const dif_uart_t *uart,
+ uint8_t byte);
/**
* Receive a single UART byte (polled).
@@ -201,9 +231,10 @@
*
* @param uart UART state data.
* @param byte Received byte.
- * @return true if the function was successful, false otherwise.
+ * @return `dif_uart_result_t`.
*/
-bool dif_uart_byte_receive_polled(const dif_uart_t *uart, uint8_t *byte);
+dif_uart_result_t dif_uart_byte_receive_polled(const dif_uart_t *uart,
+ uint8_t *byte);
/**
* UART get requested IRQ state.
@@ -213,11 +244,11 @@
* @param uart UART state data.
* @param irq_type IRQ to get the state of.
* @param state IRQ state passed back to the caller.
- * @return true if the function was successful, false otherwise.
+ * @return `dif_uart_result_t`.
*/
-bool dif_uart_irq_state_get(const dif_uart_t *uart,
- dif_uart_interrupt_t irq_type,
- dif_uart_enable_t *state);
+dif_uart_result_t dif_uart_irq_state_get(const dif_uart_t *uart,
+ dif_uart_interrupt_t irq_type,
+ dif_uart_enable_t *state);
/**
* UART clear requested IRQ state.
*
@@ -226,10 +257,10 @@
*
* @param uart UART state data.
* @param irq_type IRQ to be de-asserted.
- * @return true if the function was successful, false otherwise.
+ * @return `dif_uart_result_t`.
*/
-bool dif_uart_irq_state_clear(const dif_uart_t *uart,
- dif_uart_interrupt_t irq_type);
+dif_uart_result_t dif_uart_irq_state_clear(const dif_uart_t *uart,
+ dif_uart_interrupt_t irq_type);
/**
* UART disable interrupts.
@@ -239,9 +270,10 @@
*
* @param uart UART state data.
* @param state IRQ state passed back to the caller.
- * @return true if the function was successful, false otherwise.
+ * @return 'dif_uart_result_t'.
*/
-bool dif_uart_irqs_disable(const dif_uart_t *uart, uint32_t *state);
+dif_uart_result_t dif_uart_irqs_disable(const dif_uart_t *uart,
+ uint32_t *state);
/**
* UART restore IRQ state.
@@ -251,9 +283,9 @@
*
* @param uart UART state data.
* @param state IRQ state to restore.
- * @return true if the function was successful, false otherwise.
+ * @return 'dif_uart_result_t'.
*/
-bool dif_uart_irqs_restore(const dif_uart_t *uart, uint32_t state);
+dif_uart_result_t dif_uart_irqs_restore(const dif_uart_t *uart, uint32_t state);
/**
* UART interrupt control.
@@ -263,10 +295,11 @@
* @param uart UART state data.
* @param irq_type UART interrupt type.
* @param enable enable or disable the interrupt.
- * @return true if the function was successful, false otherwise.
+ * @return `dif_uart_result_t`.
*/
-bool dif_uart_irq_enable(const dif_uart_t *uart, dif_uart_interrupt_t irq_type,
- dif_uart_enable_t enable);
+dif_uart_result_t dif_uart_irq_enable(const dif_uart_t *uart,
+ dif_uart_interrupt_t irq_type,
+ dif_uart_enable_t enable);
/**
* UART interrupt force.
@@ -275,9 +308,10 @@
*
* @param uart UART state data.
* @param irq_type UART interrupt type to be forced.
- * @return true if the function was successful, false otherwise.
+ * @return `dif_uart_result_t`.
*/
-bool dif_uart_irq_force(const dif_uart_t *uart, dif_uart_interrupt_t irq_type);
+dif_uart_result_t dif_uart_irq_force(const dif_uart_t *uart,
+ dif_uart_interrupt_t irq_type);
/**
* UART RX bytes available.
@@ -287,9 +321,10 @@
*
* @param uart UART state data.
* @param num_bytes Number of bytes available to be read.
- * @return true if the function was successful, false otherwise.
+ * @return `dif_uart_result_t`.
*/
-bool dif_uart_rx_bytes_available(const dif_uart_t *uart, size_t *num_bytes);
+dif_uart_result_t dif_uart_rx_bytes_available(const dif_uart_t *uart,
+ size_t *num_bytes);
/**
* UART TX bytes available.
@@ -299,8 +334,9 @@
*
* @param uart UART state data.
* @param num_bytes Number of bytes available to be written.
- * @return true if the function was successful, false otherwise.
+ * @return `dif_uart_result_t`.
*/
-bool dif_uart_tx_bytes_available(const dif_uart_t *uart, size_t *num_bytes);
+dif_uart_result_t dif_uart_tx_bytes_available(const dif_uart_t *uart,
+ size_t *num_bytes);
#endif // OPENTITAN_SW_DEVICE_LIB_DIF_DIF_UART_H_
diff --git a/sw/device/lib/uart.c b/sw/device/lib/uart.c
index 56ec489..6c22ae8 100644
--- a/sw/device/lib/uart.c
+++ b/sw/device/lib/uart.c
@@ -56,7 +56,7 @@
int uart_rcv_char(char *c) {
size_t num_bytes = 0;
- if (!dif_uart_rx_bytes_available(&uart0, &num_bytes)) {
+ if (dif_uart_rx_bytes_available(&uart0, &num_bytes) != kDifUartOk) {
return -1;
}
if (num_bytes == 0) {
@@ -64,5 +64,9 @@
}
// The pointer cast from char* to uint8_t* is dangerous. This needs to be
// revisited.
- return dif_uart_bytes_receive(&uart0, 1, (uint8_t *)c, NULL) ? 0 : -1;
+ if (dif_uart_bytes_receive(&uart0, 1, (uint8_t *)c, NULL) != kDifUartOk) {
+ return -1;
+ }
+
+ return 0;
}
diff --git a/sw/device/tests/consecutive_irqs/consecutive_irqs_test.c b/sw/device/tests/consecutive_irqs/consecutive_irqs_test.c
index 6b237a6..d8c2ac5 100644
--- a/sw/device/tests/consecutive_irqs/consecutive_irqs_test.c
+++ b/sw/device/tests/consecutive_irqs/consecutive_irqs_test.c
@@ -31,7 +31,7 @@
static size_t polled_uart_sink_func(void *data, const char *buf, size_t len) {
for (int i = 0; i < len; ++i) {
- if (!dif_uart_byte_send_polled(&uart0, (uint8_t)buf[i])) {
+ if (dif_uart_byte_send_polled(&uart0, (uint8_t)buf[i]) != kDifUartOk) {
abort();
}
}
@@ -83,8 +83,8 @@
LOG_FATAL_AND_ABORT("ISR is not implemented!");
}
- if (!dif_uart_irq_state_clear(uart, uart_irq)) {
- LOG_FATAL_AND_ABORT("ISR failed to clear IRQ!");
+ if (dif_uart_irq_state_clear(uart, uart_irq) != kDifUartOk) {
+ LOG_FATAL("ISR failed to clear IRQ!");
}
}
@@ -127,7 +127,7 @@
};
// No debug output in case of UART initialisation failure.
- if (!dif_uart_init(base_addr, &config, uart)) {
+ if (dif_uart_init(base_addr, &config, uart) != kDifUartConfigOk) {
abort();
}
}
@@ -145,12 +145,13 @@
* Configures all the relevant interrupts in UART.
*/
static bool uart_configure_irqs(dif_uart_t *uart) {
- if (!dif_uart_irq_enable(&uart0, kDifUartInterruptRxOverflow,
- kDifUartEnable)) {
+ if (dif_uart_irq_enable(&uart0, kDifUartInterruptRxOverflow,
+ kDifUartEnable) != kDifUartOk) {
LOG_ERROR("RX overflow IRQ enable failed!");
return false;
}
- if (!dif_uart_irq_enable(&uart0, kDifUartInterruptTxEmpty, kDifUartEnable)) {
+ if (dif_uart_irq_enable(&uart0, kDifUartInterruptTxEmpty, kDifUartEnable) !=
+ kDifUartOk) {
LOG_ERROR("TX empty IRQ enable failed!");
return false;
}
@@ -209,7 +210,7 @@
static bool execute_test(dif_uart_t *uart) {
// Force UART RX overflow interrupt.
- if (!dif_uart_irq_force(uart, kDifUartInterruptRxOverflow)) {
+ if (dif_uart_irq_force(uart, kDifUartInterruptRxOverflow) != kDifUartOk) {
LOG_ERROR("failed to force RX overflow IRQ!");
return false;
}
@@ -228,7 +229,7 @@
}
// Force UART TX empty interrupt.
- if (!dif_uart_irq_force(uart, kDifUartInterruptTxEmpty)) {
+ if (dif_uart_irq_force(uart, kDifUartInterruptTxEmpty) != kDifUartOk) {
LOG_ERROR("failed to force TX empty IRQ!");
return false;
}
diff --git a/sw/device/tests/dif/dif_uart_test.cc b/sw/device/tests/dif/dif_uart_test.cc
index df7b92f..443c8d1 100644
--- a/sw/device/tests/dif/dif_uart_test.cc
+++ b/sw/device/tests/dif/dif_uart_test.cc
@@ -2,10 +2,9 @@
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
-#include "sw/device/lib/testing/mock_mmio.h"
-
#include "gtest/gtest.h"
#include "sw/device/lib/base/mmio.h"
+#include "sw/device/lib/testing/mock_mmio.h"
extern "C" {
#include "sw/device/lib/dif/dif_uart.h"
@@ -60,9 +59,15 @@
class InitTest : public UartTest {};
TEST_F(InitTest, NullArgs) {
- EXPECT_FALSE(dif_uart_init(base_addr_, &dif_uart_config_, nullptr));
- EXPECT_FALSE(dif_uart_init(base_addr_, nullptr, &dif_uart_));
- EXPECT_FALSE(dif_uart_init(base_addr_, nullptr, nullptr));
+ dif_uart_config_result_t result = kDifUartConfigOk;
+ result = dif_uart_init(base_addr_, &dif_uart_config_, nullptr);
+ EXPECT_EQ(result, kDifUartConfigBadArg);
+
+ result = dif_uart_init(base_addr_, nullptr, &dif_uart_);
+ EXPECT_EQ(result, kDifUartConfigBadArg);
+
+ result = dif_uart_init(base_addr_, nullptr, nullptr);
+ EXPECT_EQ(result, kDifUartConfigBadArg);
}
TEST_F(InitTest, Default) {
@@ -81,7 +86,9 @@
EXPECT_WRITE32(UART_INTR_ENABLE_REG_OFFSET, 0);
- EXPECT_TRUE(dif_uart_init(base_addr_, &dif_uart_config_, &dif_uart_));
+ dif_uart_config_result_t result =
+ dif_uart_init(base_addr_, &dif_uart_config_, &dif_uart_);
+ EXPECT_EQ(result, kDifUartConfigOk);
}
TEST_F(InitTest, ParityEven) {
@@ -104,7 +111,9 @@
EXPECT_WRITE32(UART_INTR_ENABLE_REG_OFFSET, 0);
- EXPECT_TRUE(dif_uart_init(base_addr_, &dif_uart_config_, &dif_uart_));
+ dif_uart_config_result_t result =
+ dif_uart_init(base_addr_, &dif_uart_config_, &dif_uart_);
+ EXPECT_EQ(result, kDifUartConfigOk);
}
TEST_F(InitTest, ParityOdd) {
@@ -128,15 +137,23 @@
EXPECT_WRITE32(UART_INTR_ENABLE_REG_OFFSET, 0);
- EXPECT_TRUE(dif_uart_init(base_addr_, &dif_uart_config_, &dif_uart_));
+ dif_uart_config_result_t result =
+ dif_uart_init(base_addr_, &dif_uart_config_, &dif_uart_);
+ EXPECT_EQ(result, kDifUartConfigOk);
}
class ConfigTest : public UartTest {};
TEST_F(ConfigTest, NullArgs) {
- EXPECT_FALSE(dif_uart_configure(nullptr, &dif_uart_config_));
- EXPECT_FALSE(dif_uart_configure(&dif_uart_, nullptr));
- EXPECT_FALSE(dif_uart_configure(nullptr, nullptr));
+ dif_uart_config_result_t result = kDifUartConfigOk;
+ result = dif_uart_configure(nullptr, &dif_uart_config_);
+ EXPECT_EQ(result, kDifUartConfigBadArg);
+
+ result = dif_uart_configure(&dif_uart_, nullptr);
+ EXPECT_EQ(result, kDifUartConfigBadArg);
+
+ result = dif_uart_configure(nullptr, nullptr);
+ EXPECT_EQ(result, kDifUartConfigBadArg);
}
TEST_F(ConfigTest, Default) {
@@ -155,7 +172,9 @@
EXPECT_WRITE32(UART_INTR_ENABLE_REG_OFFSET, 0);
- EXPECT_TRUE(dif_uart_configure(&dif_uart_, &dif_uart_config_));
+ dif_uart_config_result_t result =
+ dif_uart_configure(&dif_uart_, &dif_uart_config_);
+ EXPECT_EQ(result, kDifUartConfigOk);
}
TEST_F(ConfigTest, ParityEven) {
@@ -178,7 +197,9 @@
EXPECT_WRITE32(UART_INTR_ENABLE_REG_OFFSET, 0);
- EXPECT_TRUE(dif_uart_configure(&dif_uart_, &dif_uart_config_));
+ dif_uart_config_result_t result =
+ dif_uart_configure(&dif_uart_, &dif_uart_config_);
+ EXPECT_EQ(result, kDifUartConfigOk);
}
TEST_F(ConfigTest, ParityOdd) {
@@ -202,13 +223,17 @@
EXPECT_WRITE32(UART_INTR_ENABLE_REG_OFFSET, 0);
- EXPECT_TRUE(dif_uart_configure(&dif_uart_, &dif_uart_config_));
+ dif_uart_config_result_t result =
+ dif_uart_configure(&dif_uart_, &dif_uart_config_);
+ EXPECT_EQ(result, kDifUartConfigOk);
}
class WatermarkRxSetTest : public UartTest {};
TEST_F(WatermarkRxSetTest, UartNull) {
- EXPECT_FALSE(dif_uart_watermark_rx_set(nullptr, kDifUartWatermarkByte1));
+ dif_uart_result_t result =
+ dif_uart_watermark_rx_set(nullptr, kDifUartWatermarkByte1);
+ EXPECT_EQ(result, kDifUartBadArg);
}
/**
@@ -221,7 +246,9 @@
UART_FIFO_CTRL_RXILVL_RXLVL1},
});
- EXPECT_TRUE(dif_uart_watermark_rx_set(&dif_uart_, kDifUartWatermarkByte1));
+ dif_uart_result_t result =
+ dif_uart_watermark_rx_set(&dif_uart_, kDifUartWatermarkByte1);
+ EXPECT_EQ(result, kDifUartOk);
EXPECT_MASK32(UART_FIFO_CTRL_REG_OFFSET,
{
@@ -229,17 +256,22 @@
UART_FIFO_CTRL_RXILVL_RXLVL30},
});
- EXPECT_TRUE(dif_uart_watermark_rx_set(&dif_uart_, kDifUartWatermarkByte30));
+ result = dif_uart_watermark_rx_set(&dif_uart_, kDifUartWatermarkByte30);
+ EXPECT_EQ(result, kDifUartOk);
}
class WatermarkTxSetTest : public UartTest {};
TEST_F(WatermarkTxSetTest, NullArgs) {
- EXPECT_FALSE(dif_uart_watermark_tx_set(nullptr, kDifUartWatermarkByte1));
+ dif_uart_result_t result =
+ dif_uart_watermark_tx_set(nullptr, kDifUartWatermarkByte1);
+ EXPECT_EQ(result, kDifUartBadArg);
}
TEST_F(WatermarkTxSetTest, InvalidWatermark) {
- EXPECT_FALSE(dif_uart_watermark_tx_set(&dif_uart_, kDifUartWatermarkByte30));
+ dif_uart_result_t result =
+ dif_uart_watermark_tx_set(&dif_uart_, kDifUartWatermarkByte30);
+ EXPECT_EQ(result, kDifUartError);
}
/**
@@ -252,7 +284,9 @@
UART_FIFO_CTRL_TXILVL_TXLVL1},
});
- EXPECT_TRUE(dif_uart_watermark_tx_set(&dif_uart_, kDifUartWatermarkByte1));
+ dif_uart_result_t result =
+ dif_uart_watermark_tx_set(&dif_uart_, kDifUartWatermarkByte1);
+ EXPECT_EQ(result, kDifUartOk);
EXPECT_MASK32(UART_FIFO_CTRL_REG_OFFSET,
{
@@ -260,7 +294,8 @@
UART_FIFO_CTRL_TXILVL_TXLVL16},
});
- EXPECT_TRUE(dif_uart_watermark_tx_set(&dif_uart_, kDifUartWatermarkByte16));
+ result = dif_uart_watermark_tx_set(&dif_uart_, kDifUartWatermarkByte16);
+ EXPECT_EQ(result, kDifUartOk);
}
class BytesSendTest : public UartTest {
@@ -282,17 +317,24 @@
};
TEST_F(BytesSendTest, NullArgs) {
- EXPECT_FALSE(dif_uart_bytes_send(nullptr, kBytesArray.data(), 1, nullptr));
- EXPECT_FALSE(dif_uart_bytes_send(&dif_uart_, nullptr, 1, nullptr));
- EXPECT_FALSE(dif_uart_bytes_send(nullptr, nullptr, 1, nullptr));
+ dif_uart_result_t result =
+ dif_uart_bytes_send(nullptr, kBytesArray.data(), 1, nullptr);
+ EXPECT_EQ(result, kDifUartBadArg);
+
+ result = dif_uart_bytes_send(&dif_uart_, nullptr, 1, nullptr);
+ EXPECT_EQ(result, kDifUartBadArg);
+
+ result = dif_uart_bytes_send(nullptr, nullptr, 1, nullptr);
+ EXPECT_EQ(result, kDifUartBadArg);
}
TEST_F(BytesSendTest, TxFifoEmptyBytesWrittenNull) {
uint8_t num_bytes = kBytesArray.size();
ExpectSendBytes(num_bytes);
- EXPECT_TRUE(
- dif_uart_bytes_send(&dif_uart_, kBytesArray.data(), num_bytes, nullptr));
+ dif_uart_result_t result =
+ dif_uart_bytes_send(&dif_uart_, kBytesArray.data(), num_bytes, nullptr);
+ EXPECT_EQ(result, kDifUartOk);
}
TEST_F(BytesSendTest, TxFifoEmpty) {
@@ -300,9 +342,9 @@
ExpectSendBytes(num_bytes);
size_t bytes_written = 0;
- EXPECT_TRUE(dif_uart_bytes_send(&dif_uart_, kBytesArray.data(), num_bytes,
- &bytes_written));
-
+ dif_uart_result_t result = dif_uart_bytes_send(&dif_uart_, kBytesArray.data(),
+ num_bytes, &bytes_written);
+ EXPECT_EQ(result, kDifUartOk);
EXPECT_EQ(bytes_written, num_bytes);
}
@@ -311,9 +353,9 @@
uint8_t num_bytes = kBytesArray.size();
size_t bytes_written = std::numeric_limits<size_t>::max();
- EXPECT_TRUE(dif_uart_bytes_send(&dif_uart_, kBytesArray.data(), num_bytes,
- &bytes_written));
-
+ dif_uart_result_t result = dif_uart_bytes_send(&dif_uart_, kBytesArray.data(),
+ num_bytes, &bytes_written);
+ EXPECT_EQ(result, kDifUartOk);
EXPECT_EQ(bytes_written, 0);
}
@@ -336,12 +378,17 @@
TEST_F(BytesReceiveTest, UartNull) {
std::vector<uint8_t> receive_bytes(1);
- EXPECT_FALSE(
- dif_uart_bytes_receive(nullptr, 1, receive_bytes.data(), nullptr));
+
+ dif_uart_result_t result =
+ dif_uart_bytes_receive(nullptr, 1, receive_bytes.data(), nullptr);
+ EXPECT_EQ(result, kDifUartBadArg);
EXPECT_THAT(receive_bytes, Each(Eq(0)));
- EXPECT_FALSE(dif_uart_bytes_receive(&dif_uart_, 1, nullptr, nullptr));
- EXPECT_FALSE(dif_uart_bytes_receive(nullptr, 1, nullptr, nullptr));
+ result = dif_uart_bytes_receive(&dif_uart_, 1, nullptr, nullptr);
+ EXPECT_EQ(result, kDifUartBadArg);
+
+ result = dif_uart_bytes_receive(nullptr, 1, nullptr, nullptr);
+ EXPECT_EQ(result, kDifUartBadArg);
}
TEST_F(BytesReceiveTest, RxFifoFullBytesWrittenNull) {
@@ -349,9 +396,9 @@
ExpectReceiveBytes(num_bytes);
std::vector<uint8_t> receive_bytes(num_bytes);
- EXPECT_TRUE(dif_uart_bytes_receive(&dif_uart_, num_bytes,
- receive_bytes.data(), nullptr));
-
+ dif_uart_result_t result = dif_uart_bytes_receive(
+ &dif_uart_, num_bytes, receive_bytes.data(), nullptr);
+ EXPECT_EQ(result, kDifUartOk);
EXPECT_EQ(kBytesArray, receive_bytes);
}
@@ -361,9 +408,9 @@
size_t bytes_read = 0;
std::vector<uint8_t> receive_bytes(num_bytes);
- EXPECT_TRUE(dif_uart_bytes_receive(&dif_uart_, num_bytes,
- receive_bytes.data(), &bytes_read));
-
+ dif_uart_result_t result = dif_uart_bytes_receive(
+ &dif_uart_, num_bytes, receive_bytes.data(), &bytes_read);
+ EXPECT_EQ(result, kDifUartOk);
EXPECT_EQ(bytes_read, num_bytes);
EXPECT_EQ(kBytesArray, receive_bytes);
}
@@ -374,9 +421,9 @@
uint8_t num_bytes = kBytesArray.size();
size_t bytes_read = std::numeric_limits<size_t>::max();
std::vector<uint8_t> receive_bytes(num_bytes);
- EXPECT_TRUE(dif_uart_bytes_receive(&dif_uart_, num_bytes,
- receive_bytes.data(), &bytes_read));
-
+ dif_uart_result_t result = dif_uart_bytes_receive(
+ &dif_uart_, num_bytes, receive_bytes.data(), &bytes_read);
+ EXPECT_EQ(result, kDifUartOk);
EXPECT_EQ(bytes_read, 0);
EXPECT_THAT(receive_bytes, Each(Eq(0)));
}
@@ -384,7 +431,8 @@
class BytesSendPolledTest : public UartTest {};
TEST_F(BytesSendPolledTest, NullArgs) {
- EXPECT_FALSE(dif_uart_byte_send_polled(nullptr, 'X'));
+ dif_uart_result_t result = dif_uart_byte_send_polled(nullptr, 'X');
+ EXPECT_EQ(result, kDifUartBadArg);
}
TEST_F(BytesSendPolledTest, Success) {
@@ -400,16 +448,22 @@
EXPECT_READ32(UART_STATUS_REG_OFFSET, {{UART_STATUS_TXIDLE, false}});
EXPECT_READ32(UART_STATUS_REG_OFFSET, {{UART_STATUS_TXIDLE, true}});
- EXPECT_TRUE(dif_uart_byte_send_polled(&dif_uart_, 'X'));
+ dif_uart_result_t result = dif_uart_byte_send_polled(&dif_uart_, 'X');
+ EXPECT_EQ(result, kDifUartOk);
}
class BytesReceivePolledTest : public UartTest {};
TEST_F(BytesReceivePolledTest, NullArgs) {
uint8_t byte;
- EXPECT_FALSE(dif_uart_byte_receive_polled(nullptr, &byte));
- EXPECT_FALSE(dif_uart_byte_receive_polled(&dif_uart_, nullptr));
- EXPECT_FALSE(dif_uart_byte_receive_polled(nullptr, nullptr));
+ dif_uart_result_t result = dif_uart_byte_receive_polled(nullptr, &byte);
+ EXPECT_EQ(result, kDifUartBadArg);
+
+ result = dif_uart_byte_receive_polled(&dif_uart_, nullptr);
+ EXPECT_EQ(result, kDifUartBadArg);
+
+ result = dif_uart_byte_receive_polled(nullptr, nullptr);
+ EXPECT_EQ(result, kDifUartBadArg);
}
TEST_F(BytesReceivePolledTest, Success) {
@@ -422,8 +476,8 @@
EXPECT_READ32(UART_RDATA_REG_OFFSET, 'X');
uint8_t byte = 'Y';
- EXPECT_TRUE(dif_uart_byte_receive_polled(&dif_uart_, &byte));
-
+ dif_uart_result_t result = dif_uart_byte_receive_polled(&dif_uart_, &byte);
+ EXPECT_EQ(result, kDifUartOk);
EXPECT_EQ('X', byte);
}
@@ -431,12 +485,17 @@
TEST_F(IrqStateGetTest, NullArgs) {
dif_uart_enable_t state;
- EXPECT_FALSE(
- dif_uart_irq_state_get(nullptr, kDifUartInterruptTxWatermark, &state));
- EXPECT_FALSE(dif_uart_irq_state_get(&dif_uart_, kDifUartInterruptTxWatermark,
- nullptr));
- EXPECT_FALSE(
- dif_uart_irq_state_get(nullptr, kDifUartInterruptTxWatermark, nullptr));
+ dif_uart_result_t result =
+ dif_uart_irq_state_get(nullptr, kDifUartInterruptTxWatermark, &state);
+ EXPECT_EQ(result, kDifUartBadArg);
+
+ result =
+ dif_uart_irq_state_get(&dif_uart_, kDifUartInterruptTxWatermark, nullptr);
+ EXPECT_EQ(result, kDifUartBadArg);
+
+ result =
+ dif_uart_irq_state_get(nullptr, kDifUartInterruptTxWatermark, nullptr);
+ EXPECT_EQ(result, kDifUartBadArg);
}
TEST_F(IrqStateGetTest, Success) {
@@ -445,9 +504,9 @@
{{UART_INTR_STATE_TX_WATERMARK, true}});
dif_uart_enable_t tx_watermark_state = kDifUartDisable;
- EXPECT_TRUE(dif_uart_irq_state_get(&dif_uart_, kDifUartInterruptTxWatermark,
- &tx_watermark_state));
-
+ dif_uart_result_t result = dif_uart_irq_state_get(
+ &dif_uart_, kDifUartInterruptTxWatermark, &tx_watermark_state);
+ EXPECT_EQ(result, kDifUartOk);
EXPECT_EQ(tx_watermark_state, kDifUartEnable);
// Get the last IRQ state.
@@ -455,16 +514,18 @@
{{UART_INTR_STATE_RX_PARITY_ERR, false}});
dif_uart_enable_t rx_parity_error_state = kDifUartEnable;
- EXPECT_TRUE(dif_uart_irq_state_get(&dif_uart_, kDifUartInterruptRxParityErr,
- &rx_parity_error_state));
-
+ result = dif_uart_irq_state_get(&dif_uart_, kDifUartInterruptRxParityErr,
+ &rx_parity_error_state);
+ EXPECT_EQ(result, kDifUartOk);
EXPECT_EQ(rx_parity_error_state, kDifUartDisable);
}
class IrqStateClearTest : public UartTest {};
TEST_F(IrqStateClearTest, NullArgs) {
- EXPECT_FALSE(dif_uart_irq_state_clear(nullptr, kDifUartInterruptTxWatermark));
+ dif_uart_result_t result =
+ dif_uart_irq_state_clear(nullptr, kDifUartInterruptTxWatermark);
+ EXPECT_EQ(result, kDifUartBadArg);
}
TEST_F(IrqStateClearTest, Success) {
@@ -472,29 +533,34 @@
EXPECT_WRITE32(UART_INTR_STATE_REG_OFFSET,
{{UART_INTR_STATE_TX_WATERMARK, 1}});
- EXPECT_TRUE(
- dif_uart_irq_state_clear(&dif_uart_, kDifUartInterruptTxWatermark));
+ dif_uart_result_t result =
+ dif_uart_irq_state_clear(&dif_uart_, kDifUartInterruptTxWatermark);
+ EXPECT_EQ(result, kDifUartOk);
// Clear the last IRQ state.
EXPECT_WRITE32(UART_INTR_STATE_REG_OFFSET,
{{UART_INTR_STATE_RX_PARITY_ERR, 1}});
- EXPECT_TRUE(
- dif_uart_irq_state_clear(&dif_uart_, kDifUartInterruptRxParityErr));
+ result = dif_uart_irq_state_clear(&dif_uart_, kDifUartInterruptRxParityErr);
+ EXPECT_EQ(result, kDifUartOk);
}
class IrqsDisableTest : public UartTest {};
TEST_F(IrqsDisableTest, NullArgs) {
uint32_t state;
- EXPECT_FALSE(dif_uart_irqs_disable(nullptr, &state));
- EXPECT_FALSE(dif_uart_irqs_disable(nullptr, nullptr));
+ dif_uart_result_t result = dif_uart_irqs_disable(nullptr, &state);
+ EXPECT_EQ(result, kDifUartBadArg);
+
+ result = dif_uart_irqs_disable(nullptr, nullptr);
+ EXPECT_EQ(result, kDifUartBadArg);
}
TEST_F(IrqsDisableTest, Success) {
EXPECT_WRITE32(UART_INTR_ENABLE_REG_OFFSET, 0);
- EXPECT_TRUE(dif_uart_irqs_disable(&dif_uart_, nullptr));
+ dif_uart_result_t result = dif_uart_irqs_disable(&dif_uart_, nullptr);
+ EXPECT_EQ(result, kDifUartOk);
}
TEST_F(IrqsDisableTest, AllDisabled) {
@@ -503,8 +569,8 @@
EXPECT_WRITE32(UART_INTR_ENABLE_REG_OFFSET, 0);
uint32_t state = std::numeric_limits<uint32_t>::max();
- EXPECT_TRUE(dif_uart_irqs_disable(&dif_uart_, &state));
-
+ dif_uart_result_t result = dif_uart_irqs_disable(&dif_uart_, &state);
+ EXPECT_EQ(result, kDifUartOk);
EXPECT_EQ(state, 0);
}
@@ -515,37 +581,41 @@
EXPECT_WRITE32(UART_INTR_ENABLE_REG_OFFSET, 0);
uint32_t state = 0;
- EXPECT_TRUE(dif_uart_irqs_disable(&dif_uart_, &state));
-
+ dif_uart_result_t result = dif_uart_irqs_disable(&dif_uart_, &state);
+ EXPECT_EQ(result, kDifUartOk);
EXPECT_EQ(state, std::numeric_limits<uint32_t>::max());
}
class IrqsRestoreTest : public UartTest {};
TEST_F(IrqsRestoreTest, NullArgs) {
- EXPECT_FALSE(
- dif_uart_irqs_restore(nullptr, std::numeric_limits<uint32_t>::max()));
+ dif_uart_result_t result =
+ dif_uart_irqs_restore(nullptr, std::numeric_limits<uint32_t>::max());
+ EXPECT_EQ(result, kDifUartBadArg);
}
TEST_F(IrqsRestoreTest, AllEnabled) {
uint32_t state = std::numeric_limits<uint32_t>::max();
EXPECT_WRITE32(UART_INTR_ENABLE_REG_OFFSET, state);
- EXPECT_TRUE(dif_uart_irqs_restore(&dif_uart_, state));
+ dif_uart_result_t result = dif_uart_irqs_restore(&dif_uart_, state);
+ EXPECT_EQ(result, kDifUartOk);
}
TEST_F(IrqsRestoreTest, NoneEnabled) {
uint32_t state = 0;
EXPECT_WRITE32(UART_INTR_ENABLE_REG_OFFSET, state);
- EXPECT_TRUE(dif_uart_irqs_restore(&dif_uart_, state));
+ dif_uart_result_t result = dif_uart_irqs_restore(&dif_uart_, state);
+ EXPECT_EQ(result, kDifUartOk);
}
class IrqEnableTest : public UartTest {};
TEST_F(IrqEnableTest, NullArgs) {
- EXPECT_FALSE(dif_uart_irq_enable(nullptr, kDifUartInterruptTxWatermark,
- kDifUartEnable));
+ dif_uart_result_t result = dif_uart_irq_enable(
+ nullptr, kDifUartInterruptTxWatermark, kDifUartEnable);
+ EXPECT_EQ(result, kDifUartBadArg);
}
TEST_F(IrqEnableTest, Success) {
@@ -553,21 +623,25 @@
EXPECT_MASK32(UART_INTR_ENABLE_REG_OFFSET,
{{UART_INTR_ENABLE_TX_WATERMARK, 0x1, true}});
- EXPECT_TRUE(dif_uart_irq_enable(&dif_uart_, kDifUartInterruptTxWatermark,
- kDifUartEnable));
+ dif_uart_result_t result = dif_uart_irq_enable(
+ &dif_uart_, kDifUartInterruptTxWatermark, kDifUartEnable);
+ EXPECT_EQ(result, kDifUartOk);
// Disable last IRQ.
EXPECT_MASK32(UART_INTR_ENABLE_REG_OFFSET,
{{UART_INTR_STATE_RX_PARITY_ERR, 0x1, false}});
- EXPECT_TRUE(dif_uart_irq_enable(&dif_uart_, kDifUartInterruptRxParityErr,
- kDifUartDisable));
+ result = dif_uart_irq_enable(&dif_uart_, kDifUartInterruptRxParityErr,
+ kDifUartDisable);
+ EXPECT_EQ(result, kDifUartOk);
}
class IrqForceTest : public UartTest {};
TEST_F(IrqForceTest, NullArgs) {
- EXPECT_FALSE(dif_uart_irq_force(nullptr, kDifUartInterruptTxWatermark));
+ dif_uart_result_t result =
+ dif_uart_irq_force(nullptr, kDifUartInterruptTxWatermark);
+ EXPECT_EQ(result, kDifUartBadArg);
}
TEST_F(IrqForceTest, Success) {
@@ -575,22 +649,30 @@
EXPECT_MASK32(UART_INTR_TEST_REG_OFFSET,
{{UART_INTR_TEST_TX_WATERMARK, 0x1, true}});
- EXPECT_TRUE(dif_uart_irq_force(&dif_uart_, kDifUartInterruptTxWatermark));
+ dif_uart_result_t result =
+ dif_uart_irq_force(&dif_uart_, kDifUartInterruptTxWatermark);
+ EXPECT_EQ(result, kDifUartOk);
// Force last IRQ.
EXPECT_MASK32(UART_INTR_TEST_REG_OFFSET,
{{UART_INTR_ENABLE_RX_PARITY_ERR, 0x1, true}});
- EXPECT_TRUE(dif_uart_irq_force(&dif_uart_, kDifUartInterruptRxParityErr));
+ result = dif_uart_irq_force(&dif_uart_, kDifUartInterruptRxParityErr);
+ EXPECT_EQ(result, kDifUartOk);
}
class RxBytesAvailableTest : public UartTest {};
TEST_F(RxBytesAvailableTest, NullArgs) {
size_t num_bytes;
- EXPECT_FALSE(dif_uart_rx_bytes_available(nullptr, &num_bytes));
- EXPECT_FALSE(dif_uart_rx_bytes_available(&dif_uart_, nullptr));
- EXPECT_FALSE(dif_uart_rx_bytes_available(nullptr, nullptr));
+ dif_uart_result_t result = dif_uart_rx_bytes_available(nullptr, &num_bytes);
+ EXPECT_EQ(result, kDifUartBadArg);
+
+ result = dif_uart_rx_bytes_available(&dif_uart_, nullptr);
+ EXPECT_EQ(result, kDifUartBadArg);
+
+ result = dif_uart_rx_bytes_available(nullptr, nullptr);
+ EXPECT_EQ(result, kDifUartBadArg);
}
TEST_F(RxBytesAvailableTest, FifoFull) {
@@ -599,8 +681,9 @@
{{UART_FIFO_STATUS_RXLVL_OFFSET, kDifUartFifoSizeBytes}});
size_t num_bytes = 0;
- EXPECT_TRUE(dif_uart_rx_bytes_available(&dif_uart_, &num_bytes));
-
+ dif_uart_result_t result =
+ dif_uart_rx_bytes_available(&dif_uart_, &num_bytes);
+ EXPECT_EQ(result, kDifUartOk);
EXPECT_EQ(num_bytes, kDifUartFifoSizeBytes);
}
@@ -610,8 +693,9 @@
{{UART_FIFO_STATUS_RXLVL_OFFSET, 0}});
size_t num_bytes = kDifUartFifoSizeBytes;
- EXPECT_TRUE(dif_uart_rx_bytes_available(&dif_uart_, &num_bytes));
-
+ dif_uart_result_t result =
+ dif_uart_rx_bytes_available(&dif_uart_, &num_bytes);
+ EXPECT_EQ(result, kDifUartOk);
EXPECT_EQ(num_bytes, 0);
}
@@ -619,9 +703,14 @@
TEST_F(TxBytesAvailableTest, NullArgs) {
size_t num_bytes;
- EXPECT_FALSE(dif_uart_tx_bytes_available(nullptr, &num_bytes));
- EXPECT_FALSE(dif_uart_tx_bytes_available(&dif_uart_, nullptr));
- EXPECT_FALSE(dif_uart_tx_bytes_available(nullptr, nullptr));
+ dif_uart_result_t result = dif_uart_tx_bytes_available(nullptr, &num_bytes);
+ EXPECT_EQ(result, kDifUartBadArg);
+
+ result = dif_uart_tx_bytes_available(&dif_uart_, nullptr);
+ EXPECT_EQ(result, kDifUartBadArg);
+
+ result = dif_uart_tx_bytes_available(nullptr, nullptr);
+ EXPECT_EQ(result, kDifUartBadArg);
}
TEST_F(TxBytesAvailableTest, FifoFull) {
@@ -630,8 +719,9 @@
{{UART_FIFO_STATUS_TXLVL_OFFSET, kDifUartFifoSizeBytes}});
size_t num_bytes = kDifUartFifoSizeBytes;
- EXPECT_TRUE(dif_uart_tx_bytes_available(&dif_uart_, &num_bytes));
-
+ dif_uart_result_t result =
+ dif_uart_tx_bytes_available(&dif_uart_, &num_bytes);
+ EXPECT_EQ(result, kDifUartOk);
EXPECT_EQ(num_bytes, 0);
}
@@ -641,8 +731,9 @@
{{UART_FIFO_STATUS_TXLVL_OFFSET, 0}});
size_t num_bytes = 0;
- EXPECT_TRUE(dif_uart_tx_bytes_available(&dif_uart_, &num_bytes));
-
+ dif_uart_result_t result =
+ dif_uart_tx_bytes_available(&dif_uart_, &num_bytes);
+ EXPECT_EQ(result, kDifUartOk);
EXPECT_EQ(num_bytes, kDifUartFifoSizeBytes);
}