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>
diff --git a/payloads/libpayload/drivers/i8042/i8042.c b/payloads/libpayload/drivers/i8042/i8042.c
index 476139e..a89b9d9 100644
--- a/payloads/libpayload/drivers/i8042/i8042.c
+++ b/payloads/libpayload/drivers/i8042/i8042.c
@@ -112,6 +112,19 @@
 	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 @@
 }
 
 /**
+ * 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 371471f..a33d8bb 100644
--- a/payloads/libpayload/include/libpayload.h
+++ b/payloads/libpayload/include/libpayload.h
@@ -233,6 +233,7 @@
 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);