blob: 8bcce772cc2963df949f14d303cc15951dfe2c1f [file]
/*
* Copyright 2017, Data61
* Commonwealth Scientific and Industrial Research Organisation (CSIRO)
* ABN 41 687 119 230.
*
* This software may be distributed and modified according to the terms of
* the BSD 2-Clause license. Note that NO WARRANTY is provided.
* See "LICENSE_BSD2.txt" for details.
*
* @TAG(DATA61_BSD)
*/
#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* d, const ps_io_ops_t* o)
{
return ps_io_map((ps_io_mapper_t*)&o->io_mapper, (uintptr_t) d->paddr, d->size, 0, 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* d, const void* vdata, size_t count, chardev_callback_t rcb UNUSED, void* token UNUSED);
ssize_t uart_read(ps_chardevice_t* d, void* vdata, size_t count, chardev_callback_t rcb UNUSED, void* token UNUSED);
int uart_getchar(ps_chardevice_t *d);
int uart_putchar(ps_chardevice_t* d, int c);