1 /* $OpenBSD: ufshcivar.h,v 1.1 2023/02/04 23:11:59 mglocker Exp $ */ 2 3 /* 4 * Copyright (c) 2022 Marcus Glocker <mglocker@openbsd.org> 5 * 6 * Permission to use, copy, modify, and distribute this software for any 7 * purpose with or without fee is hereby granted, provided that the above 8 * copyright notice and this permission notice appear in all copies. 9 * 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17 */ 18 19 #define UFSHCI_READ_4(sc, x) \ 20 bus_space_read_4((sc)->sc_iot, (sc)->sc_ioh, (x)) 21 #define UFSHCI_WRITE_4(sc, x, y) \ 22 bus_space_write_4((sc)->sc_iot, (sc)->sc_ioh, (x), (y)) 23 24 #define UFSHCI_DMA_MAP(_udm) ((_udm)->udm_map) 25 #define UFSHCI_DMA_LEN(_udm) ((_udm)->udm_map->dm_segs[0].ds_len) 26 #define UFSHCI_DMA_DVA(_udm) ((uint64_t)(_udm)->udm_map->dm_segs[0].ds_addr) 27 #define UFSHCI_DMA_KVA(_udm) ((void *)(_udm)->udm_kva) 28 struct ufshci_dmamem { 29 bus_dmamap_t udm_map; 30 bus_dma_segment_t udm_seg; 31 size_t udm_size; 32 caddr_t udm_kva; 33 }; 34 35 struct ufshci_softc; 36 37 /* SCSI */ 38 struct ufshci_ccb { 39 SIMPLEQ_ENTRY(ufshci_ccb) ccb_entry; 40 bus_dmamap_t ccb_dmamap; 41 void *ccb_cookie; 42 int ccb_slot; 43 void (*ccb_done)(struct ufshci_softc *, 44 struct ufshci_ccb *); 45 }; 46 SIMPLEQ_HEAD(ufshci_ccb_list, ufshci_ccb); 47 48 struct ufshci_softc { 49 struct device sc_dev; 50 51 bus_space_tag_t sc_iot; 52 bus_space_handle_t sc_ioh; 53 bus_size_t sc_ios; 54 bus_dma_tag_t sc_dmat; 55 56 uint8_t sc_intraggr_enabled; 57 58 uint32_t sc_ver; 59 uint32_t sc_cap; 60 uint32_t sc_hcpid; 61 uint32_t sc_hcmid; 62 uint8_t sc_nutmrs; 63 uint8_t sc_rtt; 64 uint8_t sc_nutrs; 65 uint8_t sc_taskid; 66 67 struct ufshci_dmamem *sc_dmamem_utmrd; 68 struct ufshci_dmamem *sc_dmamem_utrd; 69 struct ufshci_dmamem *sc_dmamem_ucd; 70 71 /* SCSI */ 72 struct scsi_iopool sc_iopool; 73 struct mutex sc_ccb_mtx; 74 struct ufshci_ccb_list sc_ccb_list; 75 struct ufshci_ccb *sc_ccbs; 76 }; 77 78 int ufshci_intr(void *); 79 void ufshci_attach_hook(struct device *); /* XXX: Only for testing */ 80 int ufshci_attach(struct ufshci_softc *); 81