xref: /freebsd/sys/dev/mmc/host/dwmmc_var.h (revision 87dc015dbf35da3ff8b484602f631bc2dd1a2784)
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  * $FreeBSD$
31fa6ea996SAndrew Turner  */
32fa6ea996SAndrew Turner 
33fa6ea996SAndrew Turner #ifndef DEV_MMC_HOST_DWMMC_VAR_H
34fa6ea996SAndrew Turner #define DEV_MMC_HOST_DWMMC_VAR_H
35fa6ea996SAndrew Turner 
36dd198e86SEmmanuel Vadot #ifdef EXT_RESOURCES
37dd198e86SEmmanuel Vadot #include <dev/extres/clk/clk.h>
38e088e853SMichal Meloun #include <dev/extres/hwreset/hwreset.h>
39e088e853SMichal Meloun #include <dev/extres/regulator/regulator.h>
40dd198e86SEmmanuel Vadot #endif
41dd198e86SEmmanuel 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;
55fa6ea996SAndrew Turner 	struct mtx		sc_mtx;
56fa6ea996SAndrew Turner 	struct mmc_request	*req;
57fa6ea996SAndrew Turner 	struct mmc_command	*curcmd;
58fa6ea996SAndrew Turner 	uint32_t		flags;
59fa6ea996SAndrew Turner 	uint32_t		hwtype;
60fa6ea996SAndrew Turner 	uint32_t		use_auto_stop;
61fa6ea996SAndrew Turner 	uint32_t		use_pio;
62fa6ea996SAndrew Turner 	uint32_t		pwren_inverted;
63fa6ea996SAndrew Turner 	u_int			desc_count;
64*87dc015dSEmmanuel Vadot 	device_t		child;
65fa6ea996SAndrew Turner 
66dd198e86SEmmanuel Vadot 	int			(*update_ios)(struct dwmmc_softc *sc, struct mmc_ios *ios);
67dd198e86SEmmanuel Vadot 
68fa6ea996SAndrew Turner 	bus_dma_tag_t		desc_tag;
69fa6ea996SAndrew Turner 	bus_dmamap_t		desc_map;
70fa6ea996SAndrew Turner 	struct idmac_desc	*desc_ring;
71fa6ea996SAndrew Turner 	bus_addr_t		desc_ring_paddr;
72fa6ea996SAndrew Turner 	bus_dma_tag_t		buf_tag;
73fa6ea996SAndrew Turner 	bus_dmamap_t		buf_map;
74fa6ea996SAndrew Turner 
75fa6ea996SAndrew Turner 	uint32_t		bus_busy;
76fa6ea996SAndrew Turner 	uint32_t		dto_rcvd;
77fa6ea996SAndrew Turner 	uint32_t		acd_rcvd;
78fa6ea996SAndrew Turner 	uint32_t		cmd_done;
79dd198e86SEmmanuel Vadot 	uint64_t		bus_hz;
80dd198e86SEmmanuel Vadot 	uint32_t		max_hz;
81fa6ea996SAndrew Turner 	uint32_t		fifo_depth;
82fa6ea996SAndrew Turner 	uint32_t		num_slots;
83fa6ea996SAndrew Turner 	uint32_t		sdr_timing;
84fa6ea996SAndrew Turner 	uint32_t		ddr_timing;
85dd198e86SEmmanuel Vadot 
86dd198e86SEmmanuel Vadot #ifdef EXT_RESOURCES
87dd198e86SEmmanuel Vadot 	clk_t			biu;
88dd198e86SEmmanuel Vadot 	clk_t			ciu;
89e088e853SMichal Meloun 	hwreset_t		hwreset;
90e088e853SMichal Meloun 	regulator_t		vmmc;
91e088e853SMichal Meloun 	regulator_t		vqmmc;
92dd198e86SEmmanuel Vadot #endif
93fa6ea996SAndrew Turner };
94fa6ea996SAndrew Turner 
9574e0613eSEmmanuel Vadot DECLARE_CLASS(dwmmc_driver);
96fa6ea996SAndrew Turner 
97fa6ea996SAndrew Turner int dwmmc_attach(device_t);
98*87dc015dSEmmanuel Vadot int dwmmc_detach(device_t);
99fa6ea996SAndrew Turner 
100fa6ea996SAndrew Turner #endif
101