icE1usb fw: Internal API for configuring E1 rx/tx config register

Related: OS#4675
Change-Id: Ib23f9b99f169ab18d730bcf67b97a7b6bf863e98
diff --git a/firmware/ice40-riscv/icE1usb/e1.c b/firmware/ice40-riscv/icE1usb/e1.c
index b1771f5..1d8fd30 100644
--- a/firmware/ice40-riscv/icE1usb/e1.c
+++ b/firmware/ice40-riscv/icE1usb/e1.c
@@ -263,6 +263,29 @@
 	g_e1.tx.state = BOOT;
 }
 
+#define TXCR_PERMITTED (			\
+		E1_TX_CR_MODE_TS0_CRC_E	|	\
+		E1_TX_CR_TICK_REMOTE |		\
+		E1_TX_CR_ALARM	|		\
+		E1_TX_CR_LOOPBACK |		\
+		E1_TX_CR_LOOPBACK_CROSS	)
+
+void
+e1_tx_config(uint16_t cr)
+{
+	g_e1.tx.cr = (g_e1.tx.cr & ~TXCR_PERMITTED) | (cr & TXCR_PERMITTED);
+	e1_regs->tx.csr = g_e1.tx.cr;
+}
+
+#define RXCR_PERMITTED (			\
+		E1_RX_CR_MODE_MFA )
+
+void
+e1_rx_config(uint16_t cr)
+{
+	g_e1.rx.cr = (g_e1.rx.cr & ~RXCR_PERMITTED) | (cr & RXCR_PERMITTED);
+	e1_regs->rx.csr = g_e1.rx.cr;
+}
 
 #include "dma.h"
 
diff --git a/firmware/ice40-riscv/icE1usb/e1.h b/firmware/ice40-riscv/icE1usb/e1.h
index c438cb9..05ce19a 100644
--- a/firmware/ice40-riscv/icE1usb/e1.h
+++ b/firmware/ice40-riscv/icE1usb/e1.h
@@ -11,6 +11,9 @@
 void e1_poll(void);
 void e1_debug_print(bool data);
 
+void e1_tx_config(uint16_t cr);
+void e1_rx_config(uint16_t cr);
+
 volatile uint8_t *e1_data_ptr(int mf, int frame, int ts);
 unsigned int e1_data_ofs(int mf, int frame, int ts);