xref: /qemu/tests/qtest/libqos/sdhci.h (revision a2ce7dbd917a18408cf4bfd132578b46c2752a72)
1a0a9ba66SEmanuele Giuseppe Esposito /*
2a0a9ba66SEmanuele Giuseppe Esposito  * libqos driver framework
3a0a9ba66SEmanuele Giuseppe Esposito  *
4a0a9ba66SEmanuele Giuseppe Esposito  * Copyright (c) 2018 Emanuele Giuseppe Esposito <e.emanuelegiuseppe@gmail.com>
5a0a9ba66SEmanuele Giuseppe Esposito  *
6a0a9ba66SEmanuele Giuseppe Esposito  * This library is free software; you can redistribute it and/or
7a0a9ba66SEmanuele Giuseppe Esposito  * modify it under the terms of the GNU Lesser General Public
8dc0ad02dSThomas Huth  * License version 2.1 as published by the Free Software Foundation.
9a0a9ba66SEmanuele Giuseppe Esposito  *
10a0a9ba66SEmanuele Giuseppe Esposito  * This library is distributed in the hope that it will be useful,
11a0a9ba66SEmanuele Giuseppe Esposito  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12a0a9ba66SEmanuele Giuseppe Esposito  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13a0a9ba66SEmanuele Giuseppe Esposito  * Lesser General Public License for more details.
14a0a9ba66SEmanuele Giuseppe Esposito  *
15a0a9ba66SEmanuele Giuseppe Esposito  * You should have received a copy of the GNU Lesser General Public
16a0a9ba66SEmanuele Giuseppe Esposito  * License along with this library; if not, see <http://www.gnu.org/licenses/>
17a0a9ba66SEmanuele Giuseppe Esposito  */
18a0a9ba66SEmanuele Giuseppe Esposito 
19a8b991b5SMarkus Armbruster #ifndef QGRAPH_QSDHCI_H
20a8b991b5SMarkus Armbruster #define QGRAPH_QSDHCI_H
21a0a9ba66SEmanuele Giuseppe Esposito 
22*a2ce7dbdSPaolo Bonzini #include "qgraph.h"
23a0a9ba66SEmanuele Giuseppe Esposito #include "pci.h"
24a0a9ba66SEmanuele Giuseppe Esposito 
25a0a9ba66SEmanuele Giuseppe Esposito typedef struct QSDHCI QSDHCI;
26a0a9ba66SEmanuele Giuseppe Esposito typedef struct QSDHCI_MemoryMapped QSDHCI_MemoryMapped;
27a0a9ba66SEmanuele Giuseppe Esposito typedef struct QSDHCI_PCI  QSDHCI_PCI;
28a0a9ba66SEmanuele Giuseppe Esposito typedef struct QSDHCIProperties QSDHCIProperties;
29a0a9ba66SEmanuele Giuseppe Esposito 
30a0a9ba66SEmanuele Giuseppe Esposito /* Properties common to all QSDHCI devices */
31a0a9ba66SEmanuele Giuseppe Esposito struct QSDHCIProperties {
32a0a9ba66SEmanuele Giuseppe Esposito     uint8_t version;
33a0a9ba66SEmanuele Giuseppe Esposito     uint8_t baseclock;
34a0a9ba66SEmanuele Giuseppe Esposito     struct {
35a0a9ba66SEmanuele Giuseppe Esposito         bool sdma;
36a0a9ba66SEmanuele Giuseppe Esposito         uint64_t reg;
37a0a9ba66SEmanuele Giuseppe Esposito     } capab;
38a0a9ba66SEmanuele Giuseppe Esposito };
39a0a9ba66SEmanuele Giuseppe Esposito 
40a0a9ba66SEmanuele Giuseppe Esposito struct QSDHCI {
41a0a9ba66SEmanuele Giuseppe Esposito     uint16_t (*readw)(QSDHCI *s, uint32_t reg);
42a0a9ba66SEmanuele Giuseppe Esposito     uint64_t (*readq)(QSDHCI *s, uint32_t reg);
43a0a9ba66SEmanuele Giuseppe Esposito     void (*writeq)(QSDHCI *s, uint32_t reg, uint64_t val);
44a0a9ba66SEmanuele Giuseppe Esposito     QSDHCIProperties props;
45a0a9ba66SEmanuele Giuseppe Esposito };
46a0a9ba66SEmanuele Giuseppe Esposito 
47a0a9ba66SEmanuele Giuseppe Esposito /* Memory Mapped implementation of QSDHCI */
48a0a9ba66SEmanuele Giuseppe Esposito struct QSDHCI_MemoryMapped {
49a0a9ba66SEmanuele Giuseppe Esposito     QOSGraphObject obj;
50a0a9ba66SEmanuele Giuseppe Esposito     QTestState *qts;
51a0a9ba66SEmanuele Giuseppe Esposito     QSDHCI sdhci;
52a0a9ba66SEmanuele Giuseppe Esposito     uint64_t addr;
53a0a9ba66SEmanuele Giuseppe Esposito };
54a0a9ba66SEmanuele Giuseppe Esposito 
55a0a9ba66SEmanuele Giuseppe Esposito /* PCI implementation of QSDHCI */
56a0a9ba66SEmanuele Giuseppe Esposito struct QSDHCI_PCI {
57a0a9ba66SEmanuele Giuseppe Esposito     QOSGraphObject obj;
58a0a9ba66SEmanuele Giuseppe Esposito     QPCIDevice dev;
59a0a9ba66SEmanuele Giuseppe Esposito     QSDHCI sdhci;
60a0a9ba66SEmanuele Giuseppe Esposito     QPCIBar mem_bar;
61a0a9ba66SEmanuele Giuseppe Esposito };
62a0a9ba66SEmanuele Giuseppe Esposito 
63a0a9ba66SEmanuele Giuseppe Esposito /**
64a0a9ba66SEmanuele Giuseppe Esposito  * qos_init_sdhci_mm(): external constructor used by all drivers/machines
65a0a9ba66SEmanuele Giuseppe Esposito  * that "contain" a #QSDHCI_MemoryMapped driver
66a0a9ba66SEmanuele Giuseppe Esposito  */
67a0a9ba66SEmanuele Giuseppe Esposito void qos_init_sdhci_mm(QSDHCI_MemoryMapped *sdhci, QTestState *qts,
68a0a9ba66SEmanuele Giuseppe Esposito                        uint32_t addr, QSDHCIProperties *common);
69a0a9ba66SEmanuele Giuseppe Esposito 
70a0a9ba66SEmanuele Giuseppe Esposito #endif
71