blob: c34a8db9af695d2d52b7bda2ea7239cb58b2f894 [file] [log] [blame]
/* SPDX-License-Identifier: BSD-2-Clause */
/*
* Copyright (c) 2016, Linaro Limited
*/
#ifndef __DRIVERS_SERIAL_H
#define __DRIVERS_SERIAL_H
#include <assert.h>
#include <stdbool.h>
#include <types_ext.h>
#include <mm/core_memprot.h>
#include <mm/core_mmu.h>
struct serial_chip {
const struct serial_ops *ops;
};
struct serial_ops {
void (*putc)(struct serial_chip *chip, int ch);
void (*flush)(struct serial_chip *chip);
bool (*have_rx_data)(struct serial_chip *chip);
int (*getchar)(struct serial_chip *chip);
};
struct serial_driver {
/* Allocate device data and return the inner serial_chip */
struct serial_chip *(*dev_alloc)(void);
/*
* Initialize device from FDT node. @parms is device-specific,
* its meaning is as defined by the DT bindings for the characters
* following the ":" in /chosen/stdout-path. Typically for UART
* devices this is <baud>{<parity>{<bits>{<flow>}}} where:
* baud - baud rate in decimal
* parity - 'n' (none), 'o', (odd) or 'e' (even)
* bits - number of data bits
* flow - 'r' (rts)
* For example: 115200n8r
*/
int (*dev_init)(struct serial_chip *dev, const void *fdt,
int offset, const char *parms);
void (*dev_free)(struct serial_chip *dev);
};
#endif /*__DRIVERS_SERIASERIAL_H*/