1*637d23beSSai Pavan Boddu /* 2*637d23beSSai Pavan Boddu * SD Association Host Standard Specification v2.0 controller emulation 3*637d23beSSai Pavan Boddu * 4*637d23beSSai Pavan Boddu * Copyright (c) 2011 Samsung Electronics Co., Ltd. 5*637d23beSSai Pavan Boddu * Mitsyanko Igor <i.mitsyanko@samsung.com> 6*637d23beSSai Pavan Boddu * Peter A.G. Crosthwaite <peter.crosthwaite@petalogix.com> 7*637d23beSSai Pavan Boddu * 8*637d23beSSai Pavan Boddu * Based on MMC controller for Samsung S5PC1xx-based board emulation 9*637d23beSSai Pavan Boddu * by Alexey Merkulov and Vladimir Monakhov. 10*637d23beSSai Pavan Boddu * 11*637d23beSSai Pavan Boddu * This program is free software; you can redistribute it and/or modify it 12*637d23beSSai Pavan Boddu * under the terms of the GNU General Public License as published by the 13*637d23beSSai Pavan Boddu * Free Software Foundation; either version 2 of the License, or (at your 14*637d23beSSai Pavan Boddu * option) any later version. 15*637d23beSSai Pavan Boddu * 16*637d23beSSai Pavan Boddu * This program is distributed in the hope that it will be useful, 17*637d23beSSai Pavan Boddu * but WITHOUT ANY WARRANTY; without even the implied warranty of 18*637d23beSSai Pavan Boddu * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 19*637d23beSSai Pavan Boddu * See the GNU General Public License for more details. 20*637d23beSSai Pavan Boddu * 21*637d23beSSai Pavan Boddu * You should have received a copy of the GNU _General Public License along 22*637d23beSSai Pavan Boddu * with this program; if not, see <http://www.gnu.org/licenses/>. 23*637d23beSSai Pavan Boddu */ 24*637d23beSSai Pavan Boddu 25*637d23beSSai Pavan Boddu #ifndef SDHCI_H 26*637d23beSSai Pavan Boddu #define SDHCI_H 27*637d23beSSai Pavan Boddu 28*637d23beSSai Pavan Boddu #include "qemu-common.h" 29*637d23beSSai Pavan Boddu #include "hw/block/block.h" 30*637d23beSSai Pavan Boddu #include "hw/pci/pci.h" 31*637d23beSSai Pavan Boddu #include "hw/sysbus.h" 32*637d23beSSai Pavan Boddu #include "hw/sd/sd.h" 33*637d23beSSai Pavan Boddu 34*637d23beSSai Pavan Boddu /* SD/MMC host controller state */ 35*637d23beSSai Pavan Boddu typedef struct SDHCIState { 36*637d23beSSai Pavan Boddu union { 37*637d23beSSai Pavan Boddu PCIDevice pcidev; 38*637d23beSSai Pavan Boddu SysBusDevice busdev; 39*637d23beSSai Pavan Boddu }; 40*637d23beSSai Pavan Boddu SDState *card; 41*637d23beSSai Pavan Boddu MemoryRegion iomem; 42*637d23beSSai Pavan Boddu BlockConf conf; 43*637d23beSSai Pavan Boddu 44*637d23beSSai Pavan Boddu QEMUTimer *insert_timer; /* timer for 'changing' sd card. */ 45*637d23beSSai Pavan Boddu QEMUTimer *transfer_timer; 46*637d23beSSai Pavan Boddu qemu_irq eject_cb; 47*637d23beSSai Pavan Boddu qemu_irq ro_cb; 48*637d23beSSai Pavan Boddu qemu_irq irq; 49*637d23beSSai Pavan Boddu 50*637d23beSSai Pavan Boddu uint32_t sdmasysad; /* SDMA System Address register */ 51*637d23beSSai Pavan Boddu uint16_t blksize; /* Host DMA Buff Boundary and Transfer BlkSize Reg */ 52*637d23beSSai Pavan Boddu uint16_t blkcnt; /* Blocks count for current transfer */ 53*637d23beSSai Pavan Boddu uint32_t argument; /* Command Argument Register */ 54*637d23beSSai Pavan Boddu uint16_t trnmod; /* Transfer Mode Setting Register */ 55*637d23beSSai Pavan Boddu uint16_t cmdreg; /* Command Register */ 56*637d23beSSai Pavan Boddu uint32_t rspreg[4]; /* Response Registers 0-3 */ 57*637d23beSSai Pavan Boddu uint32_t prnsts; /* Present State Register */ 58*637d23beSSai Pavan Boddu uint8_t hostctl; /* Host Control Register */ 59*637d23beSSai Pavan Boddu uint8_t pwrcon; /* Power control Register */ 60*637d23beSSai Pavan Boddu uint8_t blkgap; /* Block Gap Control Register */ 61*637d23beSSai Pavan Boddu uint8_t wakcon; /* WakeUp Control Register */ 62*637d23beSSai Pavan Boddu uint16_t clkcon; /* Clock control Register */ 63*637d23beSSai Pavan Boddu uint8_t timeoutcon; /* Timeout Control Register */ 64*637d23beSSai Pavan Boddu uint8_t admaerr; /* ADMA Error Status Register */ 65*637d23beSSai Pavan Boddu uint16_t norintsts; /* Normal Interrupt Status Register */ 66*637d23beSSai Pavan Boddu uint16_t errintsts; /* Error Interrupt Status Register */ 67*637d23beSSai Pavan Boddu uint16_t norintstsen; /* Normal Interrupt Status Enable Register */ 68*637d23beSSai Pavan Boddu uint16_t errintstsen; /* Error Interrupt Status Enable Register */ 69*637d23beSSai Pavan Boddu uint16_t norintsigen; /* Normal Interrupt Signal Enable Register */ 70*637d23beSSai Pavan Boddu uint16_t errintsigen; /* Error Interrupt Signal Enable Register */ 71*637d23beSSai Pavan Boddu uint16_t acmd12errsts; /* Auto CMD12 error status register */ 72*637d23beSSai Pavan Boddu uint64_t admasysaddr; /* ADMA System Address Register */ 73*637d23beSSai Pavan Boddu 74*637d23beSSai Pavan Boddu uint32_t capareg; /* Capabilities Register */ 75*637d23beSSai Pavan Boddu uint32_t maxcurr; /* Maximum Current Capabilities Register */ 76*637d23beSSai Pavan Boddu uint8_t *fifo_buffer; /* SD host i/o FIFO buffer */ 77*637d23beSSai Pavan Boddu uint32_t buf_maxsz; 78*637d23beSSai Pavan Boddu uint16_t data_count; /* current element in FIFO buffer */ 79*637d23beSSai Pavan Boddu uint8_t stopped_state;/* Current SDHC state */ 80*637d23beSSai Pavan Boddu /* Buffer Data Port Register - virtual access point to R and W buffers */ 81*637d23beSSai Pavan Boddu /* Software Reset Register - always reads as 0 */ 82*637d23beSSai Pavan Boddu /* Force Event Auto CMD12 Error Interrupt Reg - write only */ 83*637d23beSSai Pavan Boddu /* Force Event Error Interrupt Register- write only */ 84*637d23beSSai Pavan Boddu /* RO Host Controller Version Register always reads as 0x2401 */ 85*637d23beSSai Pavan Boddu } SDHCIState; 86*637d23beSSai Pavan Boddu 87*637d23beSSai Pavan Boddu #define TYPE_PCI_SDHCI "sdhci-pci" 88*637d23beSSai Pavan Boddu #define PCI_SDHCI(obj) OBJECT_CHECK(SDHCIState, (obj), TYPE_PCI_SDHCI) 89*637d23beSSai Pavan Boddu 90*637d23beSSai Pavan Boddu #define TYPE_SYSBUS_SDHCI "generic-sdhci" 91*637d23beSSai Pavan Boddu #define SYSBUS_SDHCI(obj) \ 92*637d23beSSai Pavan Boddu OBJECT_CHECK(SDHCIState, (obj), TYPE_SYSBUS_SDHCI) 93*637d23beSSai Pavan Boddu 94*637d23beSSai Pavan Boddu #endif /* SDHCI_H */ 95