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