xref: /qemu/include/hw/ssi/pl022.h (revision db1015e92e04835c9eb50c29625fe566d1202dbd)
11d52866fSPeter Maydell /*
21d52866fSPeter Maydell  * ARM PrimeCell PL022 Synchronous Serial Port
31d52866fSPeter Maydell  *
41d52866fSPeter Maydell  * Copyright (c) 2007 CodeSourcery.
51d52866fSPeter Maydell  * Written by Paul Brook
61d52866fSPeter Maydell  *
71d52866fSPeter Maydell  * This program is free software; you can redistribute it and/or modify
81d52866fSPeter Maydell  * it under the terms of the GNU General Public License version 2 or
91d52866fSPeter Maydell  * (at your option) any later version.
101d52866fSPeter Maydell  */
111d52866fSPeter Maydell 
121d52866fSPeter Maydell /* This is a model of the Arm PrimeCell PL022 synchronous serial port.
131d52866fSPeter Maydell  * The PL022 TRM is:
141d52866fSPeter Maydell  * http://infocenter.arm.com/help/topic/com.arm.doc.ddi0194h/DDI0194H_ssp_pl022_trm.pdf
151d52866fSPeter Maydell  *
161d52866fSPeter Maydell  * QEMU interface:
171d52866fSPeter Maydell  * + sysbus IRQ: SSPINTR combined interrupt line
181d52866fSPeter Maydell  * + sysbus MMIO region 0: MemoryRegion for the device's registers
191d52866fSPeter Maydell  */
201d52866fSPeter Maydell 
211d52866fSPeter Maydell #ifndef HW_SSI_PL022_H
221d52866fSPeter Maydell #define HW_SSI_PL022_H
231d52866fSPeter Maydell 
241d52866fSPeter Maydell #include "hw/sysbus.h"
25*db1015e9SEduardo Habkost #include "qom/object.h"
261d52866fSPeter Maydell 
271d52866fSPeter Maydell #define TYPE_PL022 "pl022"
28*db1015e9SEduardo Habkost typedef struct PL022State PL022State;
291d52866fSPeter Maydell #define PL022(obj) OBJECT_CHECK(PL022State, (obj), TYPE_PL022)
301d52866fSPeter Maydell 
31*db1015e9SEduardo Habkost struct PL022State {
321d52866fSPeter Maydell     SysBusDevice parent_obj;
331d52866fSPeter Maydell 
341d52866fSPeter Maydell     MemoryRegion iomem;
351d52866fSPeter Maydell     uint32_t cr0;
361d52866fSPeter Maydell     uint32_t cr1;
371d52866fSPeter Maydell     uint32_t bitmask;
381d52866fSPeter Maydell     uint32_t sr;
391d52866fSPeter Maydell     uint32_t cpsr;
401d52866fSPeter Maydell     uint32_t is;
411d52866fSPeter Maydell     uint32_t im;
421d52866fSPeter Maydell     /* The FIFO head points to the next empty entry.  */
431d52866fSPeter Maydell     int tx_fifo_head;
441d52866fSPeter Maydell     int rx_fifo_head;
451d52866fSPeter Maydell     int tx_fifo_len;
461d52866fSPeter Maydell     int rx_fifo_len;
471d52866fSPeter Maydell     uint16_t tx_fifo[8];
481d52866fSPeter Maydell     uint16_t rx_fifo[8];
491d52866fSPeter Maydell     qemu_irq irq;
501d52866fSPeter Maydell     SSIBus *ssi;
51*db1015e9SEduardo Habkost };
521d52866fSPeter Maydell 
531d52866fSPeter Maydell #endif
54