blob: 48b479f60976986569d1423eb8c53a990b8e4425 [file] [log] [blame]
/*
* 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 *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);