/*
 * Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#ifndef MESON_CONSOLE_H
#define MESON_CONSOLE_H

#include <console.h>

#define CONSOLE_T_MESON_BASE	CONSOLE_T_DRVDATA

#ifndef __ASSEMBLY__

#include <stdint.h>

typedef struct {
	console_t console;
	uintptr_t base;
} console_meson_t;

/*
 * Initialize a new meson console instance and register it with the console
 * framework. The |console| pointer must point to storage that will be valid
 * for the lifetime of the console, such as a global or static local variable.
 * Its contents will be reinitialized from scratch.
 *
 * NOTE: The clock is actually fixed to 24 MHz. The argument is only there in
 * order to make this function future-proof.
 */
int console_meson_register(uintptr_t baseaddr, uint32_t clock, uint32_t baud,
			   console_meson_t *console);

#endif /*__ASSEMBLY__*/

#endif /* MESON_CONSOLE_H */
