xref: /qemu/hw/audio/pl041.h (revision 72ac97cd)
1 /*
2  * Arm PrimeCell PL041 Advanced Audio Codec Interface
3  *
4  * Copyright (c) 2011
5  * Written by Mathieu Sonet - www.elasticsheep.com
6  *
7  * This code is licensed under the GPL.
8  *
9  * *****************************************************************
10  */
11 
12 #ifndef HW_PL041_H
13 #define HW_PL041_H
14 
15 /* Register file */
16 #define REGISTER(name, offset) uint32_t name;
17 typedef struct {
18     #include "pl041.hx"
19 } pl041_regfile;
20 #undef REGISTER
21 
22 /* Register addresses */
23 #define REGISTER(name, offset) PL041_##name = offset,
24 enum {
25     #include "pl041.hx"
26 
27     PL041_periphid0 = 0xFE0,
28     PL041_periphid1 = 0xFE4,
29     PL041_periphid2 = 0xFE8,
30     PL041_periphid3 = 0xFEC,
31     PL041_pcellid0  = 0xFF0,
32     PL041_pcellid1  = 0xFF4,
33     PL041_pcellid2  = 0xFF8,
34     PL041_pcellid3  = 0xFFC,
35 };
36 #undef REGISTER
37 
38 /* Register bits */
39 
40 /* IEx */
41 #define TXCIE           (1 << 0)
42 #define RXTIE           (1 << 1)
43 #define TXIE            (1 << 2)
44 #define RXIE            (1 << 3)
45 #define RXOIE           (1 << 4)
46 #define TXUIE           (1 << 5)
47 #define RXTOIE          (1 << 6)
48 
49 /* TXCRx */
50 #define TXEN            (1 << 0)
51 #define TXSLOT1         (1 << 1)
52 #define TXSLOT2         (1 << 2)
53 #define TXSLOT3         (1 << 3)
54 #define TXSLOT4         (1 << 4)
55 #define TXCOMPACT       (1 << 15)
56 #define TXFEN           (1 << 16)
57 
58 #define TXSLOT_MASK_BIT (1)
59 #define TXSLOT_MASK     (0xFFF << TXSLOT_MASK_BIT)
60 
61 #define TSIZE_MASK_BIT  (13)
62 #define TSIZE_MASK      (0x3 << TSIZE_MASK_BIT)
63 
64 #define TSIZE_16BITS    (0x0 << TSIZE_MASK_BIT)
65 #define TSIZE_18BITS    (0x1 << TSIZE_MASK_BIT)
66 #define TSIZE_20BITS    (0x2 << TSIZE_MASK_BIT)
67 #define TSIZE_12BITS    (0x3 << TSIZE_MASK_BIT)
68 
69 /* SRx */
70 #define RXFE         (1 << 0)
71 #define TXFE         (1 << 1)
72 #define RXHF         (1 << 2)
73 #define TXHE         (1 << 3)
74 #define RXFF         (1 << 4)
75 #define TXFF         (1 << 5)
76 #define RXBUSY       (1 << 6)
77 #define TXBUSY       (1 << 7)
78 #define RXOVERRUN    (1 << 8)
79 #define TXUNDERRUN   (1 << 9)
80 #define RXTIMEOUT    (1 << 10)
81 #define RXTOFE       (1 << 11)
82 
83 /* ISRx */
84 #define TXCINTR      (1 << 0)
85 #define RXTOINTR     (1 << 1)
86 #define TXINTR       (1 << 2)
87 #define RXINTR       (1 << 3)
88 #define ORINTR       (1 << 4)
89 #define URINTR       (1 << 5)
90 #define RXTOFEINTR   (1 << 6)
91 
92 /* SLFR */
93 #define SL1RXBUSY    (1 << 0)
94 #define SL1TXBUSY    (1 << 1)
95 #define SL2RXBUSY    (1 << 2)
96 #define SL2TXBUSY    (1 << 3)
97 #define SL12RXBUSY   (1 << 4)
98 #define SL12TXBUSY   (1 << 5)
99 #define SL1RXVALID   (1 << 6)
100 #define SL1TXEMPTY   (1 << 7)
101 #define SL2RXVALID   (1 << 8)
102 #define SL2TXEMPTY   (1 << 9)
103 #define SL12RXVALID  (1 << 10)
104 #define SL12TXEMPTY  (1 << 11)
105 #define RAWGPIOINT   (1 << 12)
106 #define RWIS         (1 << 13)
107 
108 /* MAINCR */
109 #define AACIFE       (1 << 0)
110 #define LOOPBACK     (1 << 1)
111 #define LOWPOWER     (1 << 2)
112 #define SL1RXEN      (1 << 3)
113 #define SL1TXEN      (1 << 4)
114 #define SL2RXEN      (1 << 5)
115 #define SL2TXEN      (1 << 6)
116 #define SL12RXEN     (1 << 7)
117 #define SL12TXEN     (1 << 8)
118 #define DMAENABLE    (1 << 9)
119 
120 /* INTCLR */
121 #define WISC         (1 << 0)
122 #define RXOEC1       (1 << 1)
123 #define RXOEC2       (1 << 2)
124 #define RXOEC3       (1 << 3)
125 #define RXOEC4       (1 << 4)
126 #define TXUEC1       (1 << 5)
127 #define TXUEC2       (1 << 6)
128 #define TXUEC3       (1 << 7)
129 #define TXUEC4       (1 << 8)
130 #define RXTOFEC1     (1 << 9)
131 #define RXTOFEC2     (1 << 10)
132 #define RXTOFEC3     (1 << 11)
133 #define RXTOFEC4     (1 << 12)
134 
135 #endif /* #ifndef HW_PL041_H */
136