[Skiboot] [RFC PATCH 09/12] core/console: Make inmem_read/inmem_write take a memcons parameter
Oliver O'Halloran
oohall at gmail.com
Tue May 19 15:46:30 AEST 2020
Allow the console ring-buffer read/write functions to be used for any
memcons structure. This way we can use them for both the msglog and the
cronus in-memory console once they're split apart.
Signed-off-by: Oliver O'Halloran <oohall at gmail.com>
---
core/console.c | 32 ++++++++++++++++----------------
1 file changed, 16 insertions(+), 16 deletions(-)
diff --git a/core/console.c b/core/console.c
index 34944de4f310..719ba67063a0 100644
--- a/core/console.c
+++ b/core/console.c
@@ -187,35 +187,35 @@ bool flush_console(void)
return ret;
}
-static void inmem_write(char c)
+static void inmem_write(struct memcons *mcon, char c)
{
uint32_t opos;
if (!c)
return;
- memcons.obuf[memcons.out_pos++] = c;
- if (memcons.out_pos >= INMEM_CON_OUT_LEN) {
- memcons.out_pos = 0;
- memcons.has_wrapped = true;
+ mcon->obuf[mcon->out_pos++] = c;
+ if (mcon->out_pos >= INMEM_CON_OUT_LEN) {
+ mcon->out_pos = 0;
+ mcon->has_wrapped = true;
}
/*
- * We must always re-generate memcons.desc->out_pos because
+ * We must always re-generate mcon->desc->out_pos because
* under some circumstances, the console script will
* use a broken putmemproc that does RMW on the full
* 8 bytes containing out_pos and in_prod, thus corrupting
* out_pos
*/
- opos = memcons.out_pos;
- if (memcons.has_wrapped)
+ opos = mcon->out_pos;
+ if (mcon->has_wrapped)
opos |= MEMCONS_OUT_POS_WRAP;
lwsync();
- memcons.desc->out_pos = cpu_to_be32(opos);
+ mcon->desc->out_pos = cpu_to_be32(opos);
}
static void write_char(char c)
{
- inmem_write(c);
+ inmem_write(&memcons, c);
/* If head reaches tail, push tail around & drop chars */
if (flush_head == memcons.desc->out_pos)
@@ -250,15 +250,15 @@ ssize_t write(int fd __unused, const void *buf, size_t count)
return console_write(true, buf, count);
}
-static size_t inmem_read(char *buf, size_t req)
+static size_t inmem_read(struct memcons *mcon, char *buf, size_t req)
{
size_t read = 0;
- char *ibuf = (char *)be64_to_cpu(memcons.desc->ibuf_phys);
+ char *ibuf = (char *)be64_to_cpu(mcon->desc->ibuf_phys);
- while (req && be32_to_cpu(memcons.desc->in_prod) != be32_to_cpu(memcons.desc->in_cons)) {
- *(buf++) = ibuf[be32_to_cpu(memcons.desc->in_cons)];
+ while (req && be32_to_cpu(mcon->desc->in_prod) != be32_to_cpu(mcon->desc->in_cons)) {
+ *(buf++) = ibuf[be32_to_cpu(mcon->desc->in_cons)];
lwsync();
- memcons.desc->in_cons = cpu_to_be32((be32_to_cpu(memcons.desc->in_cons) + 1) % INMEM_CON_IN_LEN);
+ mcon->desc->in_cons = cpu_to_be32((be32_to_cpu(mcon->desc->in_cons) + 1) % INMEM_CON_IN_LEN);
req--;
read++;
}
@@ -271,7 +271,7 @@ ssize_t read(int fd __unused, void *buf, size_t req_count)
size_t count = 0;
if (!count)
- count = inmem_read(buf, req_count);
+ count = inmem_read(&memcons, buf, req_count);
if (need_unlock)
unlock(&con_lock);
return count;
--
2.26.2
More information about the Skiboot
mailing list