1 /* $OpenBSD: aic79xx_inline.h,v 1.5 2022/01/09 05:42:38 jsg Exp $ */ 2 3 /* 4 * Copyright (c) 2004 Milos Urbanek, Kenneth R. Westerback & Marco Peereboom 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND 17 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR 20 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26 * SUCH DAMAGE. 27 * 28 */ 29 30 /* 31 * Inline routines shareable across OS platforms. 32 * 33 * Copyright (c) 1994-2001 Justin T. Gibbs. 34 * Copyright (c) 2000-2003 Adaptec Inc. 35 * All rights reserved. 36 * 37 * Redistribution and use in source and binary forms, with or without 38 * modification, are permitted provided that the following conditions 39 * are met: 40 * 1. Redistributions of source code must retain the above copyright 41 * notice, this list of conditions, and the following disclaimer, 42 * without modification. 43 * 2. Redistributions in binary form must reproduce at minimum a disclaimer 44 * substantially similar to the "NO WARRANTY" disclaimer below 45 * ("Disclaimer") and any redistribution must be conditioned upon 46 * including a substantially similar Disclaimer requirement for further 47 * binary redistribution. 48 * 3. Neither the names of the above-listed copyright holders nor the names 49 * of any contributors may be used to endorse or promote products derived 50 * from this software without specific prior written permission. 51 * 52 * Alternatively, this software may be distributed under the terms of the 53 * GNU General Public License ("GPL") version 2 as published by the Free 54 * Software Foundation. 55 * 56 * NO WARRANTY 57 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 58 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 59 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 60 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 61 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 62 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 63 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 64 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 65 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 66 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 67 * POSSIBILITY OF SUCH DAMAGES. 68 * 69 * $FreeBSD: src/sys/dev/aic7xxx/aic79xx_inline.h,v 1.14 2004/02/04 16:38:38 gibbs Exp $ 70 * 71 */ 72 73 #ifndef _AIC79XX_INLINE_H_ 74 #define _AIC79XX_INLINE_H_ 75 76 /******************************** Debugging ***********************************/ 77 char *ahd_name(struct ahd_softc *ahd); 78 79 /************************ Sequencer Execution Control *************************/ 80 void ahd_known_modes(struct ahd_softc *, ahd_mode, ahd_mode); 81 ahd_mode_state ahd_build_mode_state(struct ahd_softc *, 82 ahd_mode , ahd_mode ); 83 void ahd_extract_mode_state(struct ahd_softc *, ahd_mode_state, 84 ahd_mode *, ahd_mode *); 85 void ahd_set_modes(struct ahd_softc *, ahd_mode, ahd_mode ); 86 void ahd_update_modes(struct ahd_softc *); 87 void ahd_assert_modes(struct ahd_softc *, ahd_mode, 88 ahd_mode, const char *, int); 89 ahd_mode_state ahd_save_modes(struct ahd_softc *); 90 void ahd_restore_modes(struct ahd_softc *, ahd_mode_state); 91 int ahd_is_paused(struct ahd_softc *); 92 void ahd_pause(struct ahd_softc *); 93 94 void ahd_unpause(struct ahd_softc *); 95 96 /*********************** Scatter Gather List Handling *************************/ 97 void *ahd_sg_setup(struct ahd_softc *ahd, struct scb *scb, 98 void *sgptr, bus_addr_t addr, 99 bus_size_t len, int last); 100 void ahd_setup_scb_common(struct ahd_softc *ahd, 101 struct scb *scb); 102 void ahd_setup_data_scb(struct ahd_softc *ahd, 103 struct scb *scb); 104 void ahd_setup_noxfer_scb(struct ahd_softc *ahd, 105 struct scb *scb); 106 107 /************************** Memory mapping routines ***************************/ 108 size_t ahd_sg_size(struct ahd_softc *); 109 void * 110 ahd_sg_bus_to_virt(struct ahd_softc *, struct scb *, 111 uint32_t); 112 uint32_t 113 ahd_sg_virt_to_bus(struct ahd_softc *, struct scb *, 114 void *); 115 void ahd_sync_scb(struct ahd_softc *, struct scb *, int); 116 void ahd_sync_sglist(struct ahd_softc *, struct scb *, int); 117 void ahd_sync_sense(struct ahd_softc *, struct scb *, int); 118 uint32_t 119 ahd_targetcmd_offset(struct ahd_softc *, u_int); 120 121 /*********************** Miscellaneous Support Functions **********************/ 122 void ahd_complete_scb(struct ahd_softc *, struct scb *); 123 void ahd_update_residual(struct ahd_softc *, struct scb *); 124 struct ahd_initiator_tinfo * 125 ahd_fetch_transinfo(struct ahd_softc *, char , u_int, 126 u_int, struct ahd_tmode_tstate **); 127 uint16_t 128 ahd_inw(struct ahd_softc *, u_int); 129 void ahd_outw(struct ahd_softc *, u_int, u_int); 130 uint32_t 131 ahd_inl(struct ahd_softc *, u_int); 132 void ahd_outl(struct ahd_softc *, u_int, uint32_t); 133 uint64_t ahd_inq(struct ahd_softc *, u_int); 134 void ahd_outq(struct ahd_softc *, u_int, uint64_t); 135 u_int ahd_get_scbptr(struct ahd_softc *ahd); 136 void ahd_set_scbptr(struct ahd_softc *ahd, u_int scbptr); 137 u_int ahd_get_hnscb_qoff(struct ahd_softc *ahd); 138 void ahd_set_hnscb_qoff(struct ahd_softc *ahd, u_int value); 139 u_int ahd_get_hescb_qoff(struct ahd_softc *ahd); 140 void ahd_set_hescb_qoff(struct ahd_softc *ahd, u_int value); 141 u_int ahd_get_snscb_qoff(struct ahd_softc *ahd); 142 void ahd_set_snscb_qoff(struct ahd_softc *ahd, u_int value); 143 u_int ahd_get_sescb_qoff(struct ahd_softc *ahd); 144 void ahd_set_sescb_qoff(struct ahd_softc *ahd, u_int value); 145 u_int ahd_get_sdscb_qoff(struct ahd_softc *ahd); 146 void ahd_set_sdscb_qoff(struct ahd_softc *ahd, u_int value); 147 u_int ahd_inb_scbram(struct ahd_softc *ahd, u_int offset); 148 u_int ahd_inw_scbram(struct ahd_softc *ahd, u_int offset); 149 uint32_t ahd_inl_scbram(struct ahd_softc *ahd, u_int offset); 150 uint64_t ahd_inq_scbram(struct ahd_softc *ahd, u_int offset); 151 struct scb *ahd_lookup_scb(struct ahd_softc *, u_int); 152 void ahd_swap_with_next_hscb(struct ahd_softc *ahd, struct scb *scb); 153 void ahd_queue_scb(struct ahd_softc *ahd, struct scb *scb); 154 uint8_t *ahd_get_sense_buf(struct ahd_softc *ahd, struct scb *scb); 155 uint32_t ahd_get_sense_bufaddr(struct ahd_softc *ahd, struct scb *scb); 156 157 /************************** Interrupt Processing ******************************/ 158 void ahd_sync_qoutfifo(struct ahd_softc *ahd, int op); 159 void ahd_sync_tqinfifo(struct ahd_softc *ahd, int op); 160 u_int ahd_check_cmdcmpltqueues(struct ahd_softc *ahd); 161 int ahd_intr(struct ahd_softc *ahd); 162 163 #define AHD_ASSERT_MODES(ahd, source, dest) \ 164 ahd_assert_modes(ahd, source, dest, __FILE__, __LINE__); 165 166 #endif /* _AIC79XX_INLINE_H_ */ 167