blob: 88ba2ab3469bb753040a2b82fd71d1c3fc2a7e2a [file] [log] [blame] [edit]
/*
* Copyright 2017, Data61, CSIRO (ABN 41 687 119 230)
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <platsupport/chardev.h>
#include <utils/arith.h>
struct dev_defn {
enum chardev_id id;
uintptr_t paddr;
int size;
const int *irqs;
int (*init_fn)(const struct dev_defn *defn,
const ps_io_ops_t *ops,
struct ps_chardevice *dev);
};
static inline void *chardev_map(
const struct dev_defn *dev,
const ps_io_ops_t *ops)
{
return ps_io_map(
&ops->io_mapper,
dev->paddr,
dev->size,
0, // map uncached
PS_MEM_NORMAL);
}
int uart_init(
const struct dev_defn *defn,
const ps_io_ops_t *ops,
ps_chardevice_t *dev);
int uart_static_init(
void *vaddr,
const ps_io_ops_t *ops,
ps_chardevice_t *dev);
ssize_t uart_write(
ps_chardevice_t *dev,
const void *vdata,
size_t count,
chardev_callback_t rcb UNUSED,
void *token UNUSED);
ssize_t uart_read(
ps_chardevice_t *dev,
void *vdata,
size_t count,
chardev_callback_t rcb UNUSED,
void *token UNUSED);
int uart_getchar(
ps_chardevice_t *dev);
int uart_putchar(
ps_chardevice_t *dev,
int c);