| 1 | /* $NetBSD: sdhcvar.h,v 1.26 2015/12/31 11:53:19 ryo Exp $ */ |
| 2 | /* $OpenBSD: sdhcvar.h,v 1.3 2007/09/06 08:01:01 jsg Exp $ */ |
| 3 | |
| 4 | /* |
| 5 | * Copyright (c) 2006 Uwe Stuehler <uwe@openbsd.org> |
| 6 | * |
| 7 | * Permission to use, copy, modify, and distribute this software for any |
| 8 | * purpose with or without fee is hereby granted, provided that the above |
| 9 | * copyright notice and this permission notice appear in all copies. |
| 10 | * |
| 11 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
| 12 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
| 13 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
| 14 | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
| 15 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
| 16 | * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
| 17 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
| 18 | */ |
| 19 | |
| 20 | #ifndef _SDHCVAR_H_ |
| 21 | #define _SDHCVAR_H_ |
| 22 | |
| 23 | #include <sys/bus.h> |
| 24 | #include <sys/device.h> |
| 25 | #include <sys/pmf.h> |
| 26 | |
| 27 | struct sdhc_host; |
| 28 | struct sdmmc_command; |
| 29 | |
| 30 | struct sdhc_softc { |
| 31 | device_t sc_dev; |
| 32 | |
| 33 | struct sdhc_host **sc_host; |
| 34 | int sc_nhosts; |
| 35 | |
| 36 | bus_dma_tag_t sc_dmat; |
| 37 | |
| 38 | uint32_t sc_flags; |
| 39 | #define SDHC_FLAG_USE_DMA 0x00000001 |
| 40 | #define SDHC_FLAG_FORCE_DMA 0x00000002 |
| 41 | #define SDHC_FLAG_NO_PWR0 0x00000004 /* Freescale ESDHC */ |
| 42 | #define SDHC_FLAG_HAVE_DVS 0x00000008 /* Freescale ESDHC */ |
| 43 | #define SDHC_FLAG_32BIT_ACCESS 0x00000010 /* Freescale ESDHC */ |
| 44 | #define SDHC_FLAG_ENHANCED 0x00000020 /* Freescale ESDHC */ |
| 45 | #define SDHC_FLAG_8BIT_MODE 0x00000040 /* MMC 8bit mode is supported */ |
| 46 | #define SDHC_FLAG_HAVE_CGM 0x00000080 /* Netlogic XLP */ |
| 47 | #define SDHC_FLAG_NO_LED_ON 0x00000100 /* LED_ON unsupported in HOST_CTL */ |
| 48 | #define SDHC_FLAG_HOSTCAPS 0x00000200 /* No device provided capabilities */ |
| 49 | #define SDHC_FLAG_RSP136_CRC 0x00000400 /* Resp 136 with CRC and end-bit */ |
| 50 | #define SDHC_FLAG_SINGLE_ONLY 0x00000800 /* Single transfer only */ |
| 51 | #define SDHC_FLAG_WAIT_RESET 0x00001000 /* Wait for soft resets to start */ |
| 52 | #define SDHC_FLAG_NO_HS_BIT 0x00002000 /* Don't set SDHC_HIGH_SPEED bit */ |
| 53 | #define SDHC_FLAG_EXTERNAL_DMA 0x00004000 |
| 54 | #define SDHC_FLAG_EXTDMA_DMAEN 0x00008000 /* ext. dma need SDHC_DMA_ENABLE */ |
| 55 | #define SDHC_FLAG_NO_CLKBASE 0x00020000 /* ignore clkbase register */ |
| 56 | #define SDHC_FLAG_SINGLE_POWER_WRITE 0x00040000 |
| 57 | #define SDHC_FLAG_NO_TIMEOUT 0x00080000 /* ignore timeout interrupts */ |
| 58 | #define SDHC_FLAG_USE_ADMA2 0x00100000 |
| 59 | #define SDHC_FLAG_POLL_CARD_DET 0x00200000 /* polling card detect */ |
| 60 | #define SDHC_FLAG_SLOW_SDR50 0x00400000 /* reduce SDR50 speed */ |
| 61 | #define SDHC_FLAG_USDHC 0x00800000 /* Freescale uSDHC */ |
| 62 | |
| 63 | uint32_t sc_clkbase; |
| 64 | int sc_clkmsk; /* Mask for SDCLK */ |
| 65 | uint32_t sc_caps;/* attachment provided capabilities */ |
| 66 | uint32_t sc_caps2; |
| 67 | |
| 68 | int (*sc_vendor_rod)(struct sdhc_softc *, int); |
| 69 | int (*sc_vendor_write_protect)(struct sdhc_softc *); |
| 70 | int (*sc_vendor_card_detect)(struct sdhc_softc *); |
| 71 | int (*sc_vendor_bus_width)(struct sdhc_softc *, int); |
| 72 | int (*sc_vendor_bus_clock)(struct sdhc_softc *, int); |
| 73 | int (*sc_vendor_transfer_data_dma)(struct sdhc_softc *, struct sdmmc_command *); |
| 74 | }; |
| 75 | |
| 76 | /* Host controller functions called by the attachment driver. */ |
| 77 | int sdhc_host_found(struct sdhc_softc *, bus_space_tag_t, |
| 78 | bus_space_handle_t, bus_size_t); |
| 79 | int sdhc_intr(void *); |
| 80 | int sdhc_detach(struct sdhc_softc *, int); |
| 81 | bool sdhc_suspend(device_t, const pmf_qual_t *); |
| 82 | bool sdhc_resume(device_t, const pmf_qual_t *); |
| 83 | bool sdhc_shutdown(device_t, int); |
| 84 | kmutex_t *sdhc_host_lock(struct sdhc_host *); |
| 85 | |
| 86 | #endif /* _SDHCVAR_H_ */ |
| 87 | |