From: Sam Ravnborg <sam@ravnborg.org>
To: Andrey Smirnov <andrew.smirnov@gmail.com>
Cc: barebox@lists.infradead.org
Subject: Re: [PATCH 02/27] console: Unify console_simple.c and pbl/console.c
Date: Fri, 15 Jun 2018 06:58:05 +0200 [thread overview]
Message-ID: <20180615045805.GB10093@ravnborg.org> (raw)
In-Reply-To: <20180615041136.23492-5-andrew.smirnov@gmail.com>
Hi Andrey.
> +
> +/**
> + * __console_get_default - Return default output console
> + *
> + * Internal function used to determine which console to use for early
> + * output. It has the following two use-cases:
> + *
> + * 1. PBL, where it falls back onto console_ll and whatever it is
> + * set up to (either putc_ll or custome callback set with
> + * pbl_set_putc())
> + *
> + * 2. CONSOLE_SIMPLE, where it falls back onto console_ll (which in
> + * this case always boils down to a putc_ll() call) until first
> + * (and only) console is registered via console_register().
> + */
> +struct console_device *__console_get_default(void)
If it is used as internal only then it should be static.
(Have not read the the remaining patches)
> +{
> + /*
> + * Doing on-demand initialization here as opposed to in the
> + * definition of console_ll above has that advantage that on
> + * some architecutres (e.g. AArch64) it allows us to avoid
> + * additional relocation and makes it possible to use console
> + * infrastructure before any relocation happens
> + */
> + if (unlikely(!console_ll.putc))
> + console_ll.putc = __console_ll_putc;
> +
> + if (IS_ENABLED(__PBL__) || !console)
> + return &console_ll;
> +
> + return console;
> +}
> +
> +/**
> + * __console_set_putc - Early console initalization helper
> + *
> + * @cdev: Console device to initialize
> + * @putcf: putc() implementation to be used for this console
> + * @ctx: Context to pass to putc()
> + *
> + * Internal function used to initialize early/trivial console devices
> + * capable of only outputting a single character
> + */
> +void __console_set_putc(struct console_device *cdev,
> + putc_func_t putcf, void *ctx)
Likewise, and so on for the reimaining __xxx functions.
> +{
> + cdev->putc = (void *)putcf;
> + cdev->ctx = ctx;
> +}
> +
> +/**
> + * __cdev_putc - Internal .putc() callback dispatcher
> + *
> + * @cdev: Console device to use
> + * @c: Character to print
> + *
> + * Internal .putc() callback dispatcher needed to correctly select
> + * which context to pass.
> + *
> + * This is needed becuase when being used in PBL in conjunction with
> + * pbl_set_putc(), .putc() callback is expecting to receive a void *
> + * context that was registered earlier.
> + *
> + * In the "normal" world, however all of the .putc() callback are
> + * written with expectation of receiving struct console_device * as a
> + * first argument.
> + *
> + * Accomodation of both of those use-cases is the purpoese of this
> + * function
> + */
> +void __cdev_putc(struct console_device *cdev, char c)
> +{
> + void *ctx = cdev->ctx ? : cdev;
Looks strange to me.
What is ctx assigned in the "true" case?
Maybe there is some subtle C rule that I have missed/forgot.
Point is, if this is valid code it may also make other puzzeled.
> +
> + cdev->putc(ctx, c);
> +}
> +
> +/**
> + * __console_putc - Internal high-level putc() implementation
> + *
> + * @cdev: Console device to use
> + * @c: Character to print
> + *
> + * Internal high-level putc() implementation based on __cdev_putc()
> + * that performs correct '\n' -> '\n\r' substitution.
> + */
> +void __console_putc(struct console_device *cdev, char c)
> +{
> + __cdev_putc(cdev, c);
> + if (c == '\n')
> + __cdev_putc(cdev, '\r');
> +}
> diff --git a/pbl/console.c b/pbl/console.c
> index 75576ec79..c1c3e1dde 100644
> --- a/pbl/console.c
> +++ b/pbl/console.c
> @@ -2,12 +2,7 @@
> #include <debug_ll.h>
> #include <linux/err.h>
>
> -/*
> - * Put these in the data section so that they survive the clearing of the
> - * BSS segment.
> - */
> -static __attribute__ ((section(".data"))) putc_func_t __putc;
> -static __attribute__ ((section(".data"))) void *putc_ctx;
> +extern struct console_device console_ll;
I mentioned these in previous mail, and I see them gone now. OK.
Sam
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
next prev parent reply other threads:[~2018-06-15 4:58 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-15 4:11 [PATCH 00/27] Console code consolidation Andrey Smirnov
2018-06-15 4:11 ` [PATCH 01/27] pbl: console: Introduce putc_func_t Andrey Smirnov
2018-06-15 4:11 ` [PATCH 02/27] console: Unify console_simple.c and pbl/console.c Andrey Smirnov
2018-06-15 4:49 ` Sam Ravnborg
2018-06-15 12:22 ` Andrey Smirnov
2018-06-15 4:58 ` Sam Ravnborg [this message]
2018-06-15 7:26 ` Sascha Hauer
2018-06-15 11:36 ` Andrey Smirnov
2018-06-15 12:18 ` Andrey Smirnov
2018-06-15 4:11 ` [PATCH 03/27] pbl: console: Move '\n' handling into console_putc() Andrey Smirnov
2018-06-15 4:11 ` [PATCH 04/27] console: Reconcile 3 different puts() implementations Andrey Smirnov
2018-06-15 7:37 ` Sascha Hauer
2018-06-15 11:33 ` Andrey Smirnov
2018-06-15 4:11 ` [PATCH 05/27] ratp: Add dependency on CONSOLE_FULL Andrey Smirnov
2018-06-15 4:11 ` [PATCH 06/27] netconsole: " Andrey Smirnov
2018-06-15 4:11 ` [PATCH 07/27] input: " Andrey Smirnov
2018-06-15 4:11 ` [PATCH 08/27] console: Make use of __console_putc() Andrey Smirnov
2018-06-15 4:11 ` [PATCH 09/27] console: Fix console_get_first_active() Andrey Smirnov
2018-06-15 4:11 ` [PATCH 10/27] console: Simplify early console code Andrey Smirnov
2018-06-15 4:11 ` [PATCH 11/27] console: Consolidate all implemenatations of ctrlc() Andrey Smirnov
2018-06-15 4:11 ` [PATCH 12/27] console: Drop ARCH_HAS_CTRLC Andrey Smirnov
2018-06-15 4:11 ` [PATCH 13/27] console: Consolidate DEBUG_LL and CONSOLE_* '\n' -> '\n\r' code Andrey Smirnov
2018-06-18 20:18 ` Sascha Hauer
2018-06-18 20:25 ` Andrey Smirnov
2018-06-15 4:11 ` [PATCH 14/27] console: Consolidate DEBUG_LL and CONSOLE_* puts() implementations Andrey Smirnov
2018-06-18 20:22 ` Sascha Hauer
2018-06-18 20:26 ` Andrey Smirnov
2018-06-15 4:11 ` [PATCH 15/27] console_simple: Use console_flush() from CONSOLE_FULL Andrey Smirnov
2018-06-15 4:11 ` [PATCH 16/27] console_simple: Use tstc_raw() as tstc() Andrey Smirnov
2018-06-15 4:11 ` [PATCH 17/27] console_simple: Use getc_raw() as getchar() Andrey Smirnov
2018-06-15 4:11 ` [PATCH 18/27] console_simple: Get rid of global console pointer Andrey Smirnov
2018-06-15 4:11 ` [PATCH 19/27] console_simple: Make use of list_add_tail() Andrey Smirnov
2018-06-15 4:11 ` [PATCH 20/27] console: Share definition for printf with PBL Andrey Smirnov
2018-06-15 4:11 ` [PATCH 21/27] pbl: console: Convert pr_print into a single line #define Andrey Smirnov
2018-06-15 4:11 ` [PATCH 22/27] " Andrey Smirnov
2018-06-15 4:11 ` [PATCH 23/27] console: Remove dputc() Andrey Smirnov
2018-06-15 4:11 ` [PATCH 24/27] console: Simplify dputs() Andrey Smirnov
2018-06-15 4:11 ` [PATCH 25/27] console: Introduce dvprintf() Andrey Smirnov
2018-06-15 4:11 ` [PATCH 26/27] console: Convert printf() into a single line #define Andrey Smirnov
2018-06-15 4:11 ` [PATCH 27/27] psci: console: Convert to use lib/console.c Andrey Smirnov
2018-06-15 9:28 ` [PATCH 00/27] Console code consolidation Sascha Hauer
2018-06-15 12:11 ` Andrey Smirnov
2018-06-18 20:49 ` Sascha Hauer
2018-06-18 23:26 ` Andrey Smirnov
2018-06-19 6:44 ` Sascha Hauer
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180615045805.GB10093@ravnborg.org \
--to=sam@ravnborg.org \
--cc=andrew.smirnov@gmail.com \
--cc=barebox@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.