xref: /qemu/include/hw/misc/lasi.h (revision b514f432445608c516cd82a93ae7c761454f17ea)
1*b514f432SMark Cave-Ayland /*
2*b514f432SMark Cave-Ayland  * HP-PARISC Lasi chipset emulation.
3*b514f432SMark Cave-Ayland  *
4*b514f432SMark Cave-Ayland  * (C) 2019 by Helge Deller <deller@gmx.de>
5*b514f432SMark Cave-Ayland  *
6*b514f432SMark Cave-Ayland  * This work is licensed under the GNU GPL license version 2 or later.
7*b514f432SMark Cave-Ayland  *
8*b514f432SMark Cave-Ayland  * Documentation available at:
9*b514f432SMark Cave-Ayland  * https://parisc.wiki.kernel.org/images-parisc/7/79/Lasi_ers.pdf
10*b514f432SMark Cave-Ayland  */
11*b514f432SMark Cave-Ayland 
12*b514f432SMark Cave-Ayland #ifndef LASI_H
13*b514f432SMark Cave-Ayland #define LASI_H
14*b514f432SMark Cave-Ayland 
15*b514f432SMark Cave-Ayland #define TYPE_LASI_CHIP "lasi-chip"
16*b514f432SMark Cave-Ayland OBJECT_DECLARE_SIMPLE_TYPE(LasiState, LASI_CHIP)
17*b514f432SMark Cave-Ayland 
18*b514f432SMark Cave-Ayland #define LASI_IRR        0x00    /* RO */
19*b514f432SMark Cave-Ayland #define LASI_IMR        0x04
20*b514f432SMark Cave-Ayland #define LASI_IPR        0x08
21*b514f432SMark Cave-Ayland #define LASI_ICR        0x0c
22*b514f432SMark Cave-Ayland #define LASI_IAR        0x10
23*b514f432SMark Cave-Ayland 
24*b514f432SMark Cave-Ayland #define LASI_PCR        0x0C000 /* LASI Power Control register */
25*b514f432SMark Cave-Ayland #define LASI_ERRLOG     0x0C004 /* LASI Error Logging register */
26*b514f432SMark Cave-Ayland #define LASI_VER        0x0C008 /* LASI Version Control register */
27*b514f432SMark Cave-Ayland #define LASI_IORESET    0x0C00C /* LASI I/O Reset register */
28*b514f432SMark Cave-Ayland #define LASI_AMR        0x0C010 /* LASI Arbitration Mask register */
29*b514f432SMark Cave-Ayland #define LASI_IO_CONF    0x7FFFE /* LASI primary configuration register */
30*b514f432SMark Cave-Ayland #define LASI_IO_CONF2   0x7FFFF /* LASI secondary configuration register */
31*b514f432SMark Cave-Ayland 
32*b514f432SMark Cave-Ayland #define LASI_BIT(x)     (1ul << (x))
33*b514f432SMark Cave-Ayland #define LASI_IRQ_BITS   (LASI_BIT(5) | LASI_BIT(7) | LASI_BIT(8) | LASI_BIT(9) \
34*b514f432SMark Cave-Ayland             | LASI_BIT(13) | LASI_BIT(14) | LASI_BIT(16) | LASI_BIT(17) \
35*b514f432SMark Cave-Ayland             | LASI_BIT(18) | LASI_BIT(19) | LASI_BIT(20) | LASI_BIT(21) \
36*b514f432SMark Cave-Ayland             | LASI_BIT(26))
37*b514f432SMark Cave-Ayland 
38*b514f432SMark Cave-Ayland #define ICR_BUS_ERROR_BIT  LASI_BIT(8)  /* bit 8 in ICR */
39*b514f432SMark Cave-Ayland #define ICR_TOC_BIT        LASI_BIT(1)  /* bit 1 in ICR */
40*b514f432SMark Cave-Ayland 
41*b514f432SMark Cave-Ayland struct LasiState {
42*b514f432SMark Cave-Ayland     PCIHostState parent_obj;
43*b514f432SMark Cave-Ayland 
44*b514f432SMark Cave-Ayland     uint32_t irr;
45*b514f432SMark Cave-Ayland     uint32_t imr;
46*b514f432SMark Cave-Ayland     uint32_t ipr;
47*b514f432SMark Cave-Ayland     uint32_t icr;
48*b514f432SMark Cave-Ayland     uint32_t iar;
49*b514f432SMark Cave-Ayland 
50*b514f432SMark Cave-Ayland     uint32_t errlog;
51*b514f432SMark Cave-Ayland     uint32_t amr;
52*b514f432SMark Cave-Ayland     uint32_t rtc;
53*b514f432SMark Cave-Ayland     time_t rtc_ref;
54*b514f432SMark Cave-Ayland 
55*b514f432SMark Cave-Ayland     MemoryRegion this_mem;
56*b514f432SMark Cave-Ayland };
57*b514f432SMark Cave-Ayland 
58*b514f432SMark Cave-Ayland #endif
59