17282444bSPedro F. Giffuni /*- 27282444bSPedro F. Giffuni * SPDX-License-Identifier: BSD-3-Clause 37282444bSPedro F. Giffuni * 4db1fda10SXin LI * Copyright (c) 2010, LSI Corp. 5db1fda10SXin LI * All rights reserved. 6db1fda10SXin LI * Author : Manjunath Ranganathaiah 7db1fda10SXin LI * Support: freebsdraid@lsi.com 8db1fda10SXin LI * 9db1fda10SXin LI * Redistribution and use in source and binary forms, with or without 10db1fda10SXin LI * modification, are permitted provided that the following conditions 11db1fda10SXin LI * are met: 12db1fda10SXin LI * 13db1fda10SXin LI * 1. Redistributions of source code must retain the above copyright 14db1fda10SXin LI * notice, this list of conditions and the following disclaimer. 15db1fda10SXin LI * 2. Redistributions in binary form must reproduce the above copyright 16db1fda10SXin LI * notice, this list of conditions and the following disclaimer in 17db1fda10SXin LI * the documentation and/or other materials provided with the 18db1fda10SXin LI * distribution. 19db1fda10SXin LI * 3. Neither the name of the <ORGANIZATION> nor the names of its 20db1fda10SXin LI * contributors may be used to endorse or promote products derived 21db1fda10SXin LI * from this software without specific prior written permission. 22db1fda10SXin LI * 23db1fda10SXin LI * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 24db1fda10SXin LI * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 25db1fda10SXin LI * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 26db1fda10SXin LI * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 27db1fda10SXin LI * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 28db1fda10SXin LI * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 29db1fda10SXin LI * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 30db1fda10SXin LI * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 31db1fda10SXin LI * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 32db1fda10SXin LI * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 33db1fda10SXin LI * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 34db1fda10SXin LI * POSSIBILITY OF SUCH DAMAGE. 35db1fda10SXin LI */ 36db1fda10SXin LI 37db1fda10SXin LI /* #define TWS_DEBUG on */ 38db1fda10SXin LI 39db1fda10SXin LI void tws_trace(const char *file, const char *fun, int linenum, 40db1fda10SXin LI struct tws_softc *sc, char *desc, u_int64_t val1, u_int64_t val2); 41db1fda10SXin LI void tws_log(struct tws_softc *sc, int index); 42db1fda10SXin LI u_int32_t tws_read_reg(struct tws_softc *sc, 43db1fda10SXin LI int offset, int size); 44db1fda10SXin LI void tws_write_reg(struct tws_softc *sc, int offset, 45db1fda10SXin LI u_int32_t value, int size); 46db1fda10SXin LI 47db1fda10SXin LI u_int16_t tws_swap16(u_int16_t val); 48db1fda10SXin LI u_int32_t tws_swap32(u_int32_t val); 49db1fda10SXin LI u_int64_t tws_swap64(u_int64_t val); 50db1fda10SXin LI 51db1fda10SXin LI void tws_init_qs(struct tws_softc *sc); 52db1fda10SXin LI 53db1fda10SXin LI /* ----------------- trace ----------------- */ 54db1fda10SXin LI 55db1fda10SXin LI #define TWS_TRACE_ON on /* Alawys on - use wisely to trace errors */ 56db1fda10SXin LI 57db1fda10SXin LI #ifdef TWS_DEBUG 58db1fda10SXin LI #define TWS_TRACE_DEBUG_ON on 59db1fda10SXin LI #endif 60db1fda10SXin LI 61db1fda10SXin LI #ifdef TWS_TRACE_DEBUG_ON 62174d86a0SRobert Wing #define __tws_debug 63db1fda10SXin LI #define TWS_TRACE_DEBUG(sc, desc, val1, val2) \ 64db1fda10SXin LI tws_trace(__FILE__, __func__, __LINE__, sc, desc, \ 65db1fda10SXin LI (u_int64_t)val1, (u_int64_t)val2) 66db1fda10SXin LI #else 67174d86a0SRobert Wing #define __tws_debug __unused 68db1fda10SXin LI #define TWS_TRACE_DEBUG(sc, desc, val1, val2) 69db1fda10SXin LI #endif 70db1fda10SXin LI 71db1fda10SXin LI #ifdef TWS_TRACE_ON 72db1fda10SXin LI #define TWS_TRACE(sc, desc, val1, val2) \ 73db1fda10SXin LI tws_trace(__FILE__, __func__, __LINE__, sc, desc, \ 74db1fda10SXin LI (u_int64_t)val1, (u_int64_t)val2) 75db1fda10SXin LI #else 76db1fda10SXin LI #define TWS_TRACE(sc, desc, val1, val2) 77db1fda10SXin LI #endif 78db1fda10SXin LI 79db1fda10SXin LI /* ---------------- logging ---------------- */ 80db1fda10SXin LI 81db1fda10SXin LI /* ---------------- logging ---------------- */ 82db1fda10SXin LI enum error_index { 83db1fda10SXin LI SYSCTL_TREE_NODE_ADD, 84db1fda10SXin LI PCI_COMMAND_READ, 85db1fda10SXin LI ALLOC_MEMORY_RES, 86db1fda10SXin LI ALLOC_IRQ_RES, 87db1fda10SXin LI SETUP_INTR_RES, 88db1fda10SXin LI TWS_CAM_ATTACH, 89db1fda10SXin LI CAM_SIMQ_ALLOC, 90db1fda10SXin LI CAM_SIM_ALLOC, 91db1fda10SXin LI TWS_XPT_BUS_REGISTER, 92db1fda10SXin LI TWS_XPT_CREATE_PATH, 93db1fda10SXin LI TWS_BUS_SCAN_REQ, 94db1fda10SXin LI TWS_INIT_FAILURE, 95db1fda10SXin LI TWS_CTLR_INIT_FAILURE, 96db1fda10SXin LI }; 97db1fda10SXin LI 98db1fda10SXin LI enum severity { 99db1fda10SXin LI ERROR = 1, 100db1fda10SXin LI WARNING, 101db1fda10SXin LI INFO, 102db1fda10SXin LI #if 0 103db1fda10SXin LI DEBUG, 104db1fda10SXin LI #endif 105db1fda10SXin LI }; 106db1fda10SXin LI 107db1fda10SXin LI struct error_desc { 108db1fda10SXin LI char desc[256]; 109db1fda10SXin LI u_int32_t error_code; 110db1fda10SXin LI int severity_level; 111db1fda10SXin LI char *fmt; 112db1fda10SXin LI char *error_str; 113db1fda10SXin LI }; 114db1fda10SXin LI 115db1fda10SXin LI /* ----------- q services ------------- */ 116db1fda10SXin LI 117db1fda10SXin LI #define TWS_FREE_Q 0 118db1fda10SXin LI #define TWS_PENDING_Q 1 119db1fda10SXin LI #define TWS_BUSY_Q 2 120db1fda10SXin LI #define TWS_COMPLETE_Q 3 121db1fda10SXin LI 122db1fda10SXin LI /* req return codes */ 123db1fda10SXin LI #define TWS_REQ_RET_SUBMIT_SUCCESS 0 124db1fda10SXin LI #define TWS_REQ_RET_PEND_NOMFA 1 125db1fda10SXin LI #define TWS_REQ_RET_RESET 2 126db1fda10SXin LI #define TWS_REQ_RET_INVALID 0xdead 127db1fda10SXin LI 128db1fda10SXin LI /* ------------------------ */ 129db1fda10SXin LI #include <sys/clock.h> 130db1fda10SXin LI #define TWS_LOCAL_TIME (time_second - utc_offset()) 131