From 4f7b687fb71430df23a73c8d145f850dd5a0235c Mon Sep 17 00:00:00 2001 From: Nico Huber Date: Sun, 8 Nov 2020 23:22:32 +0100 Subject: libpayload/i8042: Add API to peek on keyboard input queue Change-Id: I60699e044b5bacd3f5292fed7edbf529ae133284 Signed-off-by: Nico Huber Reviewed-on: https://review.coreboot.org/c/coreboot/+/47592 Reviewed-by: Angel Pons Tested-by: build bot (Jenkins) --- payloads/libpayload/drivers/i8042/i8042.c | 21 +++++++++++++++++++++ payloads/libpayload/include/libpayload.h | 1 + 2 files changed, 22 insertions(+) (limited to 'payloads') 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 */ @@ -390,6 +403,14 @@ u8 i8042_read_data_ps2(void) return fifo_pop(ps2_fifo); } +/** + * 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. */ 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); -- cgit v1.2.3