18ae57b2fSPeter Crosthwaite /* 28ae57b2fSPeter Crosthwaite * Device model for Cadence UART 38ae57b2fSPeter Crosthwaite * 48ae57b2fSPeter Crosthwaite * Copyright (c) 2010 Xilinx Inc. 58ae57b2fSPeter Crosthwaite * Copyright (c) 2012 Peter A.G. Crosthwaite (peter.crosthwaite@petalogix.com) 68ae57b2fSPeter Crosthwaite * Copyright (c) 2012 PetaLogix Pty Ltd. 78ae57b2fSPeter Crosthwaite * Written by Haibing Ma 88ae57b2fSPeter Crosthwaite * M.Habib 98ae57b2fSPeter Crosthwaite * 108ae57b2fSPeter Crosthwaite * This program is free software; you can redistribute it and/or 118ae57b2fSPeter Crosthwaite * modify it under the terms of the GNU General Public License 128ae57b2fSPeter Crosthwaite * as published by the Free Software Foundation; either version 138ae57b2fSPeter Crosthwaite * 2 of the License, or (at your option) any later version. 148ae57b2fSPeter Crosthwaite * 158ae57b2fSPeter Crosthwaite * You should have received a copy of the GNU General Public License along 168ae57b2fSPeter Crosthwaite * with this program; if not, see <http://www.gnu.org/licenses/>. 178ae57b2fSPeter Crosthwaite */ 188ae57b2fSPeter Crosthwaite 198ae57b2fSPeter Crosthwaite #ifndef CADENCE_UART_H 200553d895SMarkus Armbruster #define CADENCE_UART_H 218ae57b2fSPeter Crosthwaite 22a27bd6c7SMarkus Armbruster #include "hw/qdev-properties.h" 238ae57b2fSPeter Crosthwaite #include "hw/sysbus.h" 244d43a603SMarc-André Lureau #include "chardev/char-fe.h" 253e80f690SMarkus Armbruster #include "qapi/error.h" 268ae57b2fSPeter Crosthwaite #include "qemu/timer.h" 27db1015e9SEduardo Habkost #include "qom/object.h" 288ae57b2fSPeter Crosthwaite 298ae57b2fSPeter Crosthwaite #define CADENCE_UART_RX_FIFO_SIZE 16 308ae57b2fSPeter Crosthwaite #define CADENCE_UART_TX_FIFO_SIZE 16 318ae57b2fSPeter Crosthwaite 328ae57b2fSPeter Crosthwaite #define CADENCE_UART_R_MAX (0x48/4) 338ae57b2fSPeter Crosthwaite 348ae57b2fSPeter Crosthwaite #define TYPE_CADENCE_UART "cadence_uart" 35*8063396bSEduardo Habkost OBJECT_DECLARE_SIMPLE_TYPE(CadenceUARTState, CADENCE_UART) 368ae57b2fSPeter Crosthwaite 37db1015e9SEduardo Habkost struct CadenceUARTState { 388ae57b2fSPeter Crosthwaite /*< private >*/ 398ae57b2fSPeter Crosthwaite SysBusDevice parent_obj; 408ae57b2fSPeter Crosthwaite 418ae57b2fSPeter Crosthwaite /*< public >*/ 428ae57b2fSPeter Crosthwaite MemoryRegion iomem; 438ae57b2fSPeter Crosthwaite uint32_t r[CADENCE_UART_R_MAX]; 448ae57b2fSPeter Crosthwaite uint8_t rx_fifo[CADENCE_UART_RX_FIFO_SIZE]; 458ae57b2fSPeter Crosthwaite uint8_t tx_fifo[CADENCE_UART_TX_FIFO_SIZE]; 468ae57b2fSPeter Crosthwaite uint32_t rx_wpos; 478ae57b2fSPeter Crosthwaite uint32_t rx_count; 488ae57b2fSPeter Crosthwaite uint32_t tx_count; 498ae57b2fSPeter Crosthwaite uint64_t char_tx_time; 50becdfa00SMarc-André Lureau CharBackend chr; 518ae57b2fSPeter Crosthwaite qemu_irq irq; 528ae57b2fSPeter Crosthwaite QEMUTimer *fifo_trigger_handle; 53b636db30SDamien Hedde Clock *refclk; 54db1015e9SEduardo Habkost }; 558ae57b2fSPeter Crosthwaite 568ae57b2fSPeter Crosthwaite #endif 57