summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--openpcd/firmware/src/fifo.c17
-rw-r--r--openpcd/firmware/src/fifo.h23
-rw-r--r--openpcd/firmware/src/pio_irq.h4
-rw-r--r--openpcd/firmware/src/rc632.c13
4 files changed, 37 insertions, 20 deletions
diff --git a/openpcd/firmware/src/fifo.c b/openpcd/firmware/src/fifo.c
index 0c7ac6c..3772187 100644
--- a/openpcd/firmware/src/fifo.c
+++ b/openpcd/firmware/src/fifo.c
@@ -1,20 +1,9 @@
+/* Implementation of a virtual FIFO */
+
+#include "fifo.h"
#define FIFO_SIZE 1024
-/* virtual FIFO */
-
-struct fifo {
- u_int16_t size; /* actual FIFO size, can be smaller than 'data' */
- u_int16_t producer; /* index of producer */
- u_int16_t consumer; /* index of consumer */
- u_int16_t watermark;
- u_int8_t irq;
- u_int8_t irq_en;
- u_int8_t status;
- void (*callback)(struct fifo *fifo, u_int8_t event, void *data);
- void *cb_data;
- u_int8_t data[FIFO_SIZE];
-};
#define FIFO_IRQ_LO 0x01
#define FIFO_IRQ_HI 0x02
diff --git a/openpcd/firmware/src/fifo.h b/openpcd/firmware/src/fifo.h
new file mode 100644
index 0000000..68430ee
--- /dev/null
+++ b/openpcd/firmware/src/fifo.h
@@ -0,0 +1,23 @@
+#ifndef _FIFO_H
+#define _FIFO_H
+
+struct fifo {
+ u_int16_t size; /* actual FIFO size, can be smaller than 'data' */
+ u_int16_t producer; /* index of producer */
+ u_int16_t consumer; /* index of consumer */
+ u_int16_t watermark;
+ u_int8_t irq;
+ u_int8_t irq_en;
+ u_int8_t status;
+ void (*callback)(struct fifo *fifo, u_int8_t event, void *data);
+ void *cb_data;
+ u_int8_t data[FIFO_SIZE];
+};
+
+
+extern int fifo_init(struct fifo *fifo, u_int16_t size, void *cb_data);
+extern u_int16_t fifo_data_get(struct fifo *fifo, u_int16_t len, u_int8_t *data);
+extern u_int16_t fifo_data_put(struct fifo *fifo, u_int16_t len, u_int8_t *data);
+extern int fifo_available(struct fifo *fifo);
+
+#endif
diff --git a/openpcd/firmware/src/pio_irq.h b/openpcd/firmware/src/pio_irq.h
index a71ed75..ecb1a2c 100644
--- a/openpcd/firmware/src/pio_irq.h
+++ b/openpcd/firmware/src/pio_irq.h
@@ -1,3 +1,5 @@
+#ifndef _PIO_IRQ_H
+#define _PIO_IRQ_H
typedef irq_handler_t (void)(u_int32_t pio);
@@ -7,3 +9,5 @@ extern void pio_irq_enable(u_int32_t pio);
extern void pio_irq_disable(u_int32_t pio);
extern int pio_irq_register(u_int32_t pio, irq_handler_t func);
extern void pio_irq_unregister(u_int32_t pio);
+
+#endif
diff --git a/openpcd/firmware/src/rc632.c b/openpcd/firmware/src/rc632.c
index 6c83182..422815d 100644
--- a/openpcd/firmware/src/rc632.c
+++ b/openpcd/firmware/src/rc632.c
@@ -3,6 +3,7 @@
*
* */
+#include "fifo.h"
#include "pio_irq.h"
static void spi_irq(void)
@@ -29,12 +30,12 @@ struct rc632 {
/* RC632 access primitives */
-void rc632_write_reg(u_int8_t addr, u_int8_t data)
+void rc632_reg_write(u_int8_t addr, u_int8_t data)
{
addr = (addr << 1) & 0x7e;
}
-void rc632_write_fifo(u_int8_t len, u_int8_t *data)
+void rc632_fifo_write(u_int8_t len, u_int8_t *data)
{
if (len > sizeof(spi_outbuf)-1)
len = sizeof(spi_outbuf)-1;
@@ -47,12 +48,12 @@ void rc632_write_fifo(u_int8_t len, u_int8_t *data)
return len;
}
-u_int8_t rc632_read_reg(u_int8_t addr)
+u_int8_t rc632_reg_read(u_int8_t addr)
{
addr = (addr << 1) & 0x7e;
}
-u_int8_t rc632_read_fifo(u_int8_t max_len, u_int8_t *data)
+u_int8_t rc632_fifo_read(u_int8_t max_len, u_int8_t *data)
{
u_int8_t fifo_length = rc632_reg_read(RC632_REG_FIFO_LENGTH);
u_int8_t i;
@@ -74,10 +75,10 @@ u_int8_t rc632_read_fifo(u_int8_t max_len, u_int8_t *data)
static void rc632_irq(void)
{
/* CL RC632 has interrupted us */
- u_int8_t cause = rc632_read_reg(RC632_REG_INTERRUPT_RQ);
+ u_int8_t cause = rc632_reg_read(RC632_REG_INTERRUPT_RQ);
/* ACK all interrupts */
- rc632_write_reg(RC632_REG_INTERRUPT_RQ, cause);
+ rc632_reg_write(RC632_REG_INTERRUPT_RQ, cause);
if (cause & RC632_INT_LOALERT) {
/* FIFO is getting low, refill from virtual FIFO */
personal git repositories of Harald Welte. Your mileage may vary