xref: /freebsd/sys/dev/mmc/host/dwmmc_var.h (revision b2f0caf160993c30a0d0e3d52e8a2d03616908cd)
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