1/* $OpenBSD: ufshcivar.h,v 1.9 2024/05/29 00:48:15 jsg 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) 28struct 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 35struct ufshci_softc; 36 37/* SCSI */ 38struct ufshci_ccb { 39 SIMPLEQ_ENTRY(ufshci_ccb) ccb_entry; 40 bus_dmamap_t ccb_dmamap; 41 void *ccb_cookie; 42 int ccb_slot; 43#define CCB_STATUS_FREE 0 44#define CCB_STATUS_INPROGRESS 1 45#define CCB_STATUS_READY2FREE 2 46 int ccb_status; 47 void (*ccb_done)(struct ufshci_softc *, 48 struct ufshci_ccb *); 49}; 50SIMPLEQ_HEAD(ufshci_ccb_list, ufshci_ccb); 51 52struct ufshci_softc { 53 struct device sc_dev; 54 55 bus_space_tag_t sc_iot; 56 bus_space_handle_t sc_ioh; 57 bus_size_t sc_ios; 58 bus_dma_tag_t sc_dmat; 59 60 uint8_t sc_iacth; 61 struct mutex sc_cmd_mtx; 62 63#define UFSHCI_FLAGS_AGGR_INTR 1 64 uint8_t sc_flags; 65 uint32_t sc_ver; 66 uint32_t sc_cap; 67 uint32_t sc_hcpid; 68 uint32_t sc_hcmid; 69 uint8_t sc_nutmrs; 70 uint8_t sc_rtt; 71 uint8_t sc_nutrs; 72 73 struct ufshci_dmamem *sc_dmamem_utmrd; 74 struct ufshci_dmamem *sc_dmamem_utrd; 75 struct ufshci_dmamem *sc_dmamem_ucd; 76 77 /* SCSI */ 78 struct scsi_iopool sc_iopool; 79 struct mutex sc_ccb_mtx; 80 struct ufshci_ccb_list sc_ccb_list; 81 struct ufshci_ccb *sc_ccbs; 82}; 83 84int ufshci_intr(void *); 85int ufshci_attach(struct ufshci_softc *); 86int ufshci_activate(struct ufshci_softc *, int); 87