1fa6ea996SAndrew Turner /*- 2fa6ea996SAndrew Turner * Copyright (c) 2014 Ruslan Bukin <br@bsdpad.com> 3fa6ea996SAndrew Turner * All rights reserved. 4fa6ea996SAndrew Turner * 5fa6ea996SAndrew Turner * This software was developed by SRI International and the University of 6fa6ea996SAndrew Turner * Cambridge Computer Laboratory under DARPA/AFRL contract (FA8750-10-C-0237) 7fa6ea996SAndrew Turner * ("CTSRD"), as part of the DARPA CRASH research programme. 8fa6ea996SAndrew Turner * 9fa6ea996SAndrew Turner * Redistribution and use in source and binary forms, with or without 10fa6ea996SAndrew Turner * modification, are permitted provided that the following conditions 11fa6ea996SAndrew Turner * are met: 12fa6ea996SAndrew Turner * 1. Redistributions of source code must retain the above copyright 13fa6ea996SAndrew Turner * notice, this list of conditions and the following disclaimer. 14fa6ea996SAndrew Turner * 2. Redistributions in binary form must reproduce the above copyright 15fa6ea996SAndrew Turner * notice, this list of conditions and the following disclaimer in the 16fa6ea996SAndrew Turner * documentation and/or other materials provided with the distribution. 17fa6ea996SAndrew Turner * 18fa6ea996SAndrew Turner * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 19fa6ea996SAndrew Turner * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20fa6ea996SAndrew Turner * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21fa6ea996SAndrew Turner * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 22fa6ea996SAndrew Turner * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23fa6ea996SAndrew Turner * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 24fa6ea996SAndrew Turner * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25fa6ea996SAndrew Turner * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 26fa6ea996SAndrew Turner * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27fa6ea996SAndrew Turner * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28fa6ea996SAndrew Turner * SUCH DAMAGE. 29fa6ea996SAndrew Turner */ 30fa6ea996SAndrew Turner 31fa6ea996SAndrew Turner #ifndef DEV_MMC_HOST_DWMMC_VAR_H 32fa6ea996SAndrew Turner #define DEV_MMC_HOST_DWMMC_VAR_H 33fa6ea996SAndrew Turner 34be82b3a0SEmmanuel Vadot #include <dev/clk/clk.h> 351f469a9fSEmmanuel Vadot #include <dev/hwreset/hwreset.h> 36*b2f0caf1SEmmanuel Vadot #include <dev/regulator/regulator.h> 37dd198e86SEmmanuel Vadot 3841c653beSEmmanuel Vadot #include "opt_mmccam.h" 3941c653beSEmmanuel Vadot 40f1cc48e5SEmmanuel Vadot #include <cam/mmc/mmc_sim.h> 41f1cc48e5SEmmanuel Vadot 42fa6ea996SAndrew Turner enum { 43fa6ea996SAndrew Turner HWTYPE_NONE, 44fa6ea996SAndrew Turner HWTYPE_ALTERA, 45fa6ea996SAndrew Turner HWTYPE_EXYNOS, 46fa6ea996SAndrew Turner HWTYPE_HISILICON, 47fa6ea996SAndrew Turner HWTYPE_ROCKCHIP, 48fa6ea996SAndrew Turner }; 49fa6ea996SAndrew Turner 50fa6ea996SAndrew Turner struct dwmmc_softc { 51fa6ea996SAndrew Turner struct resource *res[2]; 52fa6ea996SAndrew Turner device_t dev; 53fa6ea996SAndrew Turner void *intr_cookie; 54fa6ea996SAndrew Turner struct mmc_host host; 558a8166e5SBartlomiej Grzesik struct mmc_helper mmc_helper; 56fa6ea996SAndrew Turner struct mtx sc_mtx; 5741c653beSEmmanuel Vadot #ifdef MMCCAM 5841c653beSEmmanuel Vadot union ccb * ccb; 59f1cc48e5SEmmanuel Vadot struct mmc_sim mmc_sim; 6041c653beSEmmanuel Vadot #else 61fa6ea996SAndrew Turner struct mmc_request *req; 6241c653beSEmmanuel Vadot #endif 63fa6ea996SAndrew Turner struct mmc_command *curcmd; 64fa6ea996SAndrew Turner uint32_t flags; 65fa6ea996SAndrew Turner uint32_t hwtype; 66fa6ea996SAndrew Turner uint32_t use_auto_stop; 67fa6ea996SAndrew Turner uint32_t use_pio; 6887dc015dSEmmanuel Vadot device_t child; 6987d4212bSEmmanuel Vadot struct task card_task; /* Card presence check task */ 7087d4212bSEmmanuel Vadot struct timeout_task card_delayed_task;/* Card insert delayed task */ 71fa6ea996SAndrew Turner 72dd198e86SEmmanuel Vadot int (*update_ios)(struct dwmmc_softc *sc, struct mmc_ios *ios); 73dd198e86SEmmanuel Vadot 74fa6ea996SAndrew Turner bus_dma_tag_t desc_tag; 75fa6ea996SAndrew Turner bus_dmamap_t desc_map; 76fa6ea996SAndrew Turner struct idmac_desc *desc_ring; 77fa6ea996SAndrew Turner bus_addr_t desc_ring_paddr; 78fa6ea996SAndrew Turner bus_dma_tag_t buf_tag; 79fa6ea996SAndrew Turner bus_dmamap_t buf_map; 80fa6ea996SAndrew Turner 81fa6ea996SAndrew Turner uint32_t bus_busy; 82fa6ea996SAndrew Turner uint32_t dto_rcvd; 83fa6ea996SAndrew Turner uint32_t acd_rcvd; 84fa6ea996SAndrew Turner uint32_t cmd_done; 85dd198e86SEmmanuel Vadot uint64_t bus_hz; 86fa6ea996SAndrew Turner uint32_t fifo_depth; 87fa6ea996SAndrew Turner uint32_t num_slots; 88fa6ea996SAndrew Turner uint32_t sdr_timing; 89fa6ea996SAndrew Turner uint32_t ddr_timing; 90dd198e86SEmmanuel Vadot 91dd198e86SEmmanuel Vadot clk_t biu; 92dd198e86SEmmanuel Vadot clk_t ciu; 93e088e853SMichal Meloun hwreset_t hwreset; 94e088e853SMichal Meloun regulator_t vmmc; 95e088e853SMichal Meloun regulator_t vqmmc; 96fa6ea996SAndrew Turner }; 97fa6ea996SAndrew Turner 9874e0613eSEmmanuel Vadot DECLARE_CLASS(dwmmc_driver); 99fa6ea996SAndrew Turner 100fa6ea996SAndrew Turner int dwmmc_attach(device_t); 10187dc015dSEmmanuel Vadot int dwmmc_detach(device_t); 102fa6ea996SAndrew Turner 103fa6ea996SAndrew Turner #endif 104