11bb92983SJerome Forissier /* SPDX-License-Identifier: BSD-2-Clause */ 2974c85b1SJens Wiklander /* 3974c85b1SJens Wiklander * Copyright (c) 2016, Linaro Limited 4974c85b1SJens Wiklander */ 5974c85b1SJens Wiklander #ifndef __DRIVERS_SERIAL_H 6974c85b1SJens Wiklander #define __DRIVERS_SERIAL_H 7974c85b1SJens Wiklander 8a26e2529SJerome Forissier #include <assert.h> 9ae8a86d9SJerome Forissier #include <stdbool.h> 10a26e2529SJerome Forissier #include <types_ext.h> 11a26e2529SJerome Forissier #include <mm/core_memprot.h> 12a26e2529SJerome Forissier #include <mm/core_mmu.h> 13ae8a86d9SJerome Forissier 14974c85b1SJens Wiklander struct serial_chip { 15974c85b1SJens Wiklander const struct serial_ops *ops; 16974c85b1SJens Wiklander }; 17974c85b1SJens Wiklander 18974c85b1SJens Wiklander struct serial_ops { 19*7b84e23dSJerome Forissier /* Mandatory handler */ 20974c85b1SJens Wiklander void (*putc)(struct serial_chip *chip, int ch); 21*7b84e23dSJerome Forissier /* Optional handlers */ 22974c85b1SJens Wiklander void (*flush)(struct serial_chip *chip); 23974c85b1SJens Wiklander bool (*have_rx_data)(struct serial_chip *chip); 24974c85b1SJens Wiklander int (*getchar)(struct serial_chip *chip); 25974c85b1SJens Wiklander }; 26974c85b1SJens Wiklander 279e30051eSJerome Forissier struct serial_driver { 289e30051eSJerome Forissier /* Allocate device data and return the inner serial_chip */ 299e30051eSJerome Forissier struct serial_chip *(*dev_alloc)(void); 309e30051eSJerome Forissier /* 319e30051eSJerome Forissier * Initialize device from FDT node. @parms is device-specific, 329e30051eSJerome Forissier * its meaning is as defined by the DT bindings for the characters 339e30051eSJerome Forissier * following the ":" in /chosen/stdout-path. Typically for UART 349e30051eSJerome Forissier * devices this is <baud>{<parity>{<bits>{<flow>}}} where: 359e30051eSJerome Forissier * baud - baud rate in decimal 369e30051eSJerome Forissier * parity - 'n' (none), 'o', (odd) or 'e' (even) 379e30051eSJerome Forissier * bits - number of data bits 389e30051eSJerome Forissier * flow - 'r' (rts) 399e30051eSJerome Forissier * For example: 115200n8r 409e30051eSJerome Forissier */ 419e30051eSJerome Forissier int (*dev_init)(struct serial_chip *dev, const void *fdt, 429e30051eSJerome Forissier int offset, const char *parms); 439e30051eSJerome Forissier void (*dev_free)(struct serial_chip *dev); 449e30051eSJerome Forissier }; 459e30051eSJerome Forissier 46974c85b1SJens Wiklander #endif /*__DRIVERS_SERIASERIAL_H*/ 47