1 1.1 rkujawa /* $NetBSD: isp1763var.h,v 1.1 2026/10/11 16:09:06 rkujawa Exp $ */ 2 1.1 rkujawa 3 1.1 rkujawa /*- 4 1.1 rkujawa * Copyright (c) 2026 The NetBSD Foundation, Inc. 5 1.1 rkujawa * All rights reserved. 6 1.1 rkujawa * 7 1.1 rkujawa * This code is derived from software contributed to The NetBSD Foundation 8 1.1 rkujawa * by Radoslaw Kujawa. 9 1.1 rkujawa * 10 1.1 rkujawa * Redistribution and use in source and binary forms, with or without 11 1.1 rkujawa * modification, are permitted provided that the following conditions 12 1.1 rkujawa * are met: 13 1.1 rkujawa * 1. Redistributions of source code must retain the above copyright 14 1.1 rkujawa * notice, this list of conditions and the following disclaimer. 15 1.1 rkujawa * 2. Redistributions in binary form must reproduce the above copyright 16 1.1 rkujawa * notice, this list of conditions and the following disclaimer in the 17 1.1 rkujawa * documentation and/or other materials provided with the distribution. 18 1.1 rkujawa * 19 1.1 rkujawa * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 20 1.1 rkujawa * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21 1.1 rkujawa * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22 1.1 rkujawa * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 23 1.1 rkujawa * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24 1.1 rkujawa * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25 1.1 rkujawa * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26 1.1 rkujawa * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27 1.1 rkujawa * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28 1.1 rkujawa * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29 1.1 rkujawa * POSSIBILITY OF SUCH DAMAGE. 30 1.1 rkujawa */ 31 1.1 rkujawa 32 1.1 rkujawa #ifndef _DEV_IC_ISP1763VAR_H_ 33 1.1 rkujawa #define _DEV_IC_ISP1763VAR_H_ 34 1.1 rkujawa 35 1.1 rkujawa #include <sys/types.h> 36 1.1 rkujawa 37 1.1 rkujawa #ifdef _KERNEL 38 1.1 rkujawa #include <sys/bus.h> 39 1.1 rkujawa #include <sys/device.h> 40 1.1 rkujawa #include <sys/mutex.h> 41 1.1 rkujawa #include <sys/pool.h> 42 1.1 rkujawa #include <sys/queue.h> 43 1.1 rkujawa 44 1.1 rkujawa #include <dev/usb/usb.h> 45 1.1 rkujawa #include <dev/usb/usbdi.h> 46 1.1 rkujawa #include <dev/usb/usbdivar.h> 47 1.1 rkujawa #endif 48 1.1 rkujawa 49 1.1 rkujawa #include <dev/ic/isp1763reg.h> 50 1.1 rkujawa 51 1.1 rkujawa /* What a transfer descriptor is built from. */ 52 1.1 rkujawa struct isp1763hc_ptdreq { 53 1.1 rkujawa uint16_t pr_mem; /* payload, CPU address */ 54 1.1 rkujawa uint16_t pr_len; 55 1.1 rkujawa uint16_t pr_mps; 56 1.1 rkujawa uint8_t pr_mult; 57 1.1 rkujawa uint8_t pr_addr; 58 1.1 rkujawa uint8_t pr_ep; 59 1.1 rkujawa uint8_t pr_token; 60 1.1 rkujawa uint8_t pr_eptype; 61 1.1 rkujawa uint8_t pr_hub; 62 1.1 rkujawa uint8_t pr_port; 63 1.1 rkujawa uint8_t pr_se; 64 1.1 rkujawa uint8_t pr_uframe; 65 1.1 rkujawa uint8_t pr_usa; 66 1.1 rkujawa uint8_t pr_uscs; 67 1.1 rkujawa bool pr_split; 68 1.1 rkujawa bool pr_toggle; 69 1.1 rkujawa bool pr_ping; 70 1.1 rkujawa }; 71 1.1 rkujawa 72 1.1 rkujawa void isp1763hc_ptd_build(const struct isp1763hc_ptdreq *, uint32_t *); 73 1.1 rkujawa void isp1763hc_ptd_encode(const uint32_t *, uint8_t *, int); 74 1.1 rkujawa void isp1763hc_ptd_decode(const uint8_t *, uint32_t *, int); 75 1.1 rkujawa void isp1763hc_intr_sched(bool, u_int, uint8_t *, uint8_t *); 76 1.1 rkujawa uint16_t isp1763hc_last_map(uint16_t); 77 1.1 rkujawa 78 1.1 rkujawa #ifdef _KERNEL 79 1.1 rkujawa 80 1.1 rkujawa /* A transfer descriptor queue: ATL or INT. */ 81 1.1 rkujawa struct isp1763hc_queue { 82 1.1 rkujawa struct isp1763hc_xfer *q_xfer[ISP1763_NSLOTS]; 83 1.1 rkujawa TAILQ_HEAD(, isp1763hc_xfer) q_wait; 84 1.1 rkujawa bus_size_t q_regdone; 85 1.1 rkujawa bus_size_t q_regskip; 86 1.1 rkujawa bus_size_t q_reglast; 87 1.1 rkujawa uint16_t q_irq; 88 1.1 rkujawa uint16_t q_ptdbase; 89 1.1 rkujawa uint16_t q_membase; 90 1.1 rkujawa uint16_t q_memsize; 91 1.1 rkujawa uint16_t q_busy; 92 1.1 rkujawa uint16_t q_skip; 93 1.1 rkujawa }; 94 1.1 rkujawa 95 1.1 rkujawa struct isp1763hc_softc { 96 1.1 rkujawa device_t sc_dev; 97 1.1 rkujawa struct usbd_bus sc_bus; 98 1.1 rkujawa 99 1.1 rkujawa kmutex_t sc_lock; 100 1.1 rkujawa kmutex_t sc_rhlock; 101 1.1 rkujawa pool_cache_t sc_xferpool; 102 1.1 rkujawa void *sc_softint; 103 1.1 rkujawa device_t sc_child; 104 1.1 rkujawa struct usbd_xfer *sc_intrxfer; 105 1.1 rkujawa 106 1.1 rkujawa struct isp1763hc_queue sc_atl; 107 1.1 rkujawa struct isp1763hc_queue sc_int; 108 1.1 rkujawa 109 1.1 rkujawa uint16_t sc_hwmode; /* bus mode, front end */ 110 1.1 rkujawa bool sc_dying; 111 1.1 rkujawa bool sc_isreset; 112 1.1 rkujawa 113 1.1 rkujawa /* Chip access, provided by the front end. */ 114 1.1 rkujawa uint8_t (*sc_rd1)(struct isp1763hc_softc *, bus_size_t); 115 1.1 rkujawa void (*sc_wr1)(struct isp1763hc_softc *, bus_size_t, 116 1.1 rkujawa uint8_t); 117 1.1 rkujawa uint16_t (*sc_rd2)(struct isp1763hc_softc *, bus_size_t); 118 1.1 rkujawa void (*sc_wr2)(struct isp1763hc_softc *, bus_size_t, 119 1.1 rkujawa uint16_t); 120 1.1 rkujawa void (*sc_memrd)(struct isp1763hc_softc *, uint16_t, void *, 121 1.1 rkujawa size_t); 122 1.1 rkujawa void (*sc_memwr)(struct isp1763hc_softc *, uint16_t, 123 1.1 rkujawa const void *, size_t); 124 1.1 rkujawa void (*sc_intr_enable)(struct isp1763hc_softc *, bool); 125 1.1 rkujawa }; 126 1.1 rkujawa 127 1.1 rkujawa #define ISP_READ1(sc, r) ((sc)->sc_rd1((sc), (r))) 128 1.1 rkujawa #define ISP_WRITE1(sc, r, v) ((sc)->sc_wr1((sc), (r), (v))) 129 1.1 rkujawa #define ISP_READ2(sc, r) ((sc)->sc_rd2((sc), (r))) 130 1.1 rkujawa #define ISP_WRITE2(sc, r, v) ((sc)->sc_wr2((sc), (r), (v))) 131 1.1 rkujawa #define ISP_MEMREAD(sc, a, p, n) \ 132 1.1 rkujawa ((sc)->sc_memrd((sc), (a), (p), (n))) 133 1.1 rkujawa #define ISP_MEMWRITE(sc, a, p, n) \ 134 1.1 rkujawa ((sc)->sc_memwr((sc), (a), (p), (n))) 135 1.1 rkujawa #define ISP_INTR_ENABLE(sc, on) ((sc)->sc_intr_enable((sc), (on))) 136 1.1 rkujawa 137 1.1 rkujawa int isp1763hc_attach(struct isp1763hc_softc *); 138 1.1 rkujawa int isp1763hc_detach(struct isp1763hc_softc *, int); 139 1.1 rkujawa int isp1763hc_activate(device_t, enum devact); 140 1.1 rkujawa void isp1763hc_childdet(device_t, device_t); 141 1.1 rkujawa void isp1763hc_shutdown(struct isp1763hc_softc *); 142 1.1 rkujawa void isp1763hc_intr(struct isp1763hc_softc *); 143 1.1 rkujawa 144 1.1 rkujawa #endif /* _KERNEL */ 145 1.1 rkujawa 146 1.1 rkujawa #endif /* !_DEV_IC_ISP1763VAR_H_ */ 147