/* Blackfin Universal Asynchronous Receiver/Transmitter (UART) model.
   For "old style" UARTs on BF53x/etc... parts.

   Copyright (C) 2010-2021 Free Software Foundation, Inc.
   Contributed by Analog Devices, Inc.

   This file is part of simulators.

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */

#ifndef DV_BFIN_UART_H
#define DV_BFIN_UART_H

struct bfin_uart;
bu16 bfin_uart_get_next_byte (struct hw *, bu16, bu16, bool *fresh);
bu16 bfin_uart_write_byte (struct hw *, bu16, bu16);
bu16 bfin_uart_get_status (struct hw *);
unsigned bfin_uart_write_buffer (struct hw *, const unsigned char *, unsigned);
unsigned bfin_uart_read_buffer (struct hw *, unsigned char *, unsigned);
void bfin_uart_reschedule (struct hw *);

/* UART_LCR */
#define DLAB	(1 << 7)

/* UART_LSR */
#define TFI	(1 << 7)
#define TEMT	(1 << 6)
#define THRE	(1 << 5)
#define BI	(1 << 4)
#define FE	(1 << 3)
#define PE	(1 << 2)
#define OE	(1 << 1)
#define DR	(1 << 0)

/* UART_IER */
#define ERBFI	(1 << 0)
#define ETBEI	(1 << 1)
#define ELSI	(1 << 2)

/* UART_MCR */
#define XOFF		(1 << 0)
#define MRTS		(1 << 1)
#define RFIT		(1 << 2)
#define RFRT		(1 << 3)
#define LOOP_ENA	(1 << 4)
#define FCPOL		(1 << 5)
#define ARTS		(1 << 6)
#define ACTS		(1 << 7)

#endif
