diff options
author | 2023-10-10 14:33:42 +0000 | |
---|---|---|
committer | 2023-10-10 14:33:42 +0000 | |
commit | af1a266670d040d2f4083ff309d732d648afba2a (patch) | |
tree | 2fc46203448ddcc6f81546d379abfaeb323575e9 /roms/skiboot/include/console.h | |
parent | e02cda008591317b1625707ff8e115a4841aa889 (diff) |
Change-Id: Iaf8d18082d3991dec7c0ebbea540f092188eb4ec
Diffstat (limited to 'roms/skiboot/include/console.h')
-rw-r--r-- | roms/skiboot/include/console.h | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/roms/skiboot/include/console.h b/roms/skiboot/include/console.h new file mode 100644 index 000000000..02fc7a4b6 --- /dev/null +++ b/roms/skiboot/include/console.h @@ -0,0 +1,91 @@ +// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +/* Copyright 2013-2018 IBM Corp. */ + +#ifndef __CONSOLE_H +#define __CONSOLE_H + +#include "unistd.h" + +/* + * Our internal console uses the format of BML new-style in-memory + * console and supports input for setups without a physical console + * facility or FSP. + * + * (This is v3 of the format, the previous one sucked) + */ +struct memcons { + __be64 magic; +#define MEMCONS_MAGIC 0x6630696567726173LL + __be64 obuf_phys; + __be64 ibuf_phys; + __be32 obuf_size; + __be32 ibuf_size; + __be32 out_pos; +#define MEMCONS_OUT_POS_WRAP 0x80000000u +#define MEMCONS_OUT_POS_MASK 0x00ffffffu + __be32 in_prod; + __be32 in_cons; +}; + +extern struct memcons memcons; + +#define INMEM_CON_IN_LEN 16 +#define INMEM_CON_OUT_LEN (INMEM_CON_LEN - INMEM_CON_IN_LEN) + +/* Console driver */ +struct con_ops { + size_t (*write)(const char *buf, size_t len); + size_t (*read)(char *buf, size_t len); + bool (*poll_read)(void); +}; + +struct opal_con_ops { + const char *name; + + /* + * OPAL console driver specific init function. + */ + void (*init)(void); + + int64_t (*write)(int64_t term, __be64 *__len, const uint8_t *buf); + int64_t (*read)(int64_t term, __be64 *__len, uint8_t *buf); + + /* + * returns the amount of space available in the console write buffer + */ + int64_t (*space)(int64_t term_number, __be64 *__length); + + /* + * Forces the write buffer to be flushed by the driver + */ + int64_t (*flush)(int64_t term_number); +}; + +extern bool flush_console(void); + +extern void set_console(struct con_ops *driver); +extern void set_opal_console(struct opal_con_ops *driver); +extern void init_opal_console(void); + +extern void console_complete_flush(void); + +extern size_t mambo_console_write(const char *buf, size_t count); +extern void enable_mambo_console(void); + +ssize_t console_write(bool flush_to_drivers, const void *buf, size_t count); + +extern void clear_console(void); +extern void memcons_add_properties(void); +extern void dummy_console_add_nodes(void); + +struct dt_node *add_opal_console_node(int index, const char *type, + uint32_t write_buffer_size); + +/* OPAL console drivers */ +extern struct opal_con_ops uart_opal_con; +extern struct opal_con_ops fsp_opal_con; +extern struct opal_con_ops dummy_opal_con; + +void mprintf(const char *fmt, ...); + +#endif /* __CONSOLE_H */ |