summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNico Huber <nico.h@gmx.de>2020-11-08 23:22:32 +0100
committerHung-Te Lin <hungte@chromium.org>2020-12-24 08:29:18 +0000
commit4f7b687fb71430df23a73c8d145f850dd5a0235c (patch)
tree1e87f2985cc33d1ee80e555259df6fcdd63a1405
parent6e021d31f9227e8e57289cb68494d903f5161d83 (diff)
libpayload/i8042: Add API to peek on keyboard input queue
Change-Id: I60699e044b5bacd3f5292fed7edbf529ae133284 Signed-off-by: Nico Huber <nico.h@gmx.de> Reviewed-on: https://review.coreboot.org/c/coreboot/+/47592 Reviewed-by: Angel Pons <th3fanbus@gmail.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
-rw-r--r--payloads/libpayload/drivers/i8042/i8042.c21
-rw-r--r--payloads/libpayload/include/libpayload.h1
2 files changed, 22 insertions, 0 deletions
diff --git a/payloads/libpayload/drivers/i8042/i8042.c b/payloads/libpayload/drivers/i8042/i8042.c
index 476139e2ea..a89b9d9717 100644
--- a/payloads/libpayload/drivers/i8042/i8042.c
+++ b/payloads/libpayload/drivers/i8042/i8042.c
@@ -112,6 +112,19 @@ static u8 fifo_pop(struct fifo *fifo)
return ret;
}
+/** Peek on the head of fifo queue.
+ * Returns the oldest object on the queue if any.
+ * In case the queue is empty 0 is returned.
+ * @fifo: Fifo to use
+ */
+static u8 fifo_peek(struct fifo *fifo)
+{
+ if (fifo_is_empty(fifo))
+ return 0;
+
+ return fifo->buf[fifo->rx];
+}
+
/** Destroys a fifo queue.
* @fifo: Fifo to use
*/
@@ -391,6 +404,14 @@ u8 i8042_read_data_ps2(void)
}
/**
+ * Returns available keyboard data without advancing the queue.
+ */
+u8 i8042_peek_data_ps2(void)
+{
+ return fifo_peek(ps2_fifo);
+}
+
+/**
* Returns available mouse data, if any.
*/
u8 i8042_read_data_aux(void)
diff --git a/payloads/libpayload/include/libpayload.h b/payloads/libpayload/include/libpayload.h
index 371471ffae..a33d8bb382 100644
--- a/payloads/libpayload/include/libpayload.h
+++ b/payloads/libpayload/include/libpayload.h
@@ -233,6 +233,7 @@ u8 i8042_data_ready_ps2(void);
u8 i8042_data_ready_aux(void);
u8 i8042_read_data_ps2(void);
+u8 i8042_peek_data_ps2(void);
u8 i8042_read_data_aux(void);
int i8042_wait_read_ps2(void);