Add new function-pointer-based console API
authorJulius Werner <jwerner@chromium.org>
Tue, 1 Aug 2017 01:15:11 +0000 (18:15 -0700)
committerJulius Werner <jwerner@chromium.org>
Tue, 12 Dec 2017 23:00:34 +0000 (15:00 -0800)
commit9536bae6df5638772a1e8b1c8cf8e321f4ab5452
treed2432e194d416ba3bd6e024e76819bbce53fb7f5
parenta33e763c40b532859a1793025075b06adc553c4c
Add new function-pointer-based console API

This patch overhauls the console API to allow for multiple console
instances of different drivers that are active at the same time. Instead
of binding to well-known function names (like console_core_init),
consoles now provide a register function (e.g. console_16550_register())
that will hook them into the list of active consoles. All console
operations will be dispatched to all consoles currently in the list.

The new API will be selected by the build-time option MULTI_CONSOLE_API,
which defaults to ${ERROR_DEPRECATED} for now. The old console API code
will be retained to stay backwards-compatible to older platforms, but
should no longer be used for any newly added platforms and can hopefully
be removed at some point in the future.

The new console API is intended to be used for both normal (bootup) and
crash use cases, freeing platforms of the need to set up the crash
console separately. Consoles can be individually configured to be active
active at boot (until first handoff to EL2), at runtime (after first
handoff to EL2), and/or after a crash. Console drivers should set a sane
default upon registration that can be overridden with the
console_set_scope() call. Code to hook up the crash reporting mechanism
to this framework will be added with a later patch.

This patch only affects AArch64, but the new API could easily be ported
to AArch32 as well if desired.

Change-Id: I35c5aa2cb3f719cfddd15565eb13c7cde4162549
Signed-off-by: Julius Werner <jwerner@chromium.org>
Makefile
drivers/console/aarch64/console.S
drivers/console/aarch64/deprecated_console.S [new file with mode: 0644]
drivers/console/aarch64/multi_console.S [new file with mode: 0644]
drivers/console/aarch64/skeleton_console.S
include/common/aarch64/console_macros.S [new file with mode: 0644]
include/drivers/console.h
include/drivers/console_assertions.h [new file with mode: 0644]
make_helpers/defaults.mk
plat/common/aarch64/plat_common.c