133190b70SSascha Wildner /* 233190b70SSascha Wildner * Copyright (c) 2010, LSI Corp. 333190b70SSascha Wildner * All rights reserved. 433190b70SSascha Wildner * Author : Manjunath Ranganathaiah 533190b70SSascha Wildner * Support: freebsdraid@lsi.com 633190b70SSascha Wildner * 733190b70SSascha Wildner * Redistribution and use in source and binary forms, with or without 833190b70SSascha Wildner * modification, are permitted provided that the following conditions 933190b70SSascha Wildner * are met: 1033190b70SSascha Wildner * 1133190b70SSascha Wildner * 1. Redistributions of source code must retain the above copyright 1233190b70SSascha Wildner * notice, this list of conditions and the following disclaimer. 1333190b70SSascha Wildner * 2. Redistributions in binary form must reproduce the above copyright 1433190b70SSascha Wildner * notice, this list of conditions and the following disclaimer in 1533190b70SSascha Wildner * the documentation and/or other materials provided with the 1633190b70SSascha Wildner * distribution. 1733190b70SSascha Wildner * 3. Neither the name of the <ORGANIZATION> nor the names of its 1833190b70SSascha Wildner * contributors may be used to endorse or promote products derived 1933190b70SSascha Wildner * from this software without specific prior written permission. 2033190b70SSascha Wildner * 2133190b70SSascha Wildner * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 2233190b70SSascha Wildner * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2333190b70SSascha Wildner * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 2433190b70SSascha Wildner * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 2533190b70SSascha Wildner * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 2633190b70SSascha Wildner * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 2733190b70SSascha Wildner * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 2833190b70SSascha Wildner * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 2933190b70SSascha Wildner * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 3033190b70SSascha Wildner * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 3133190b70SSascha Wildner * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 3233190b70SSascha Wildner * POSSIBILITY OF SUCH DAMAGE. 3333190b70SSascha Wildner * 3433190b70SSascha Wildner * $FreeBSD: src/sys/dev/tws/tws_services.h,v 1.3 2007/05/09 04:16:32 mrangana Exp $ 3533190b70SSascha Wildner */ 3633190b70SSascha Wildner 3733190b70SSascha Wildner 3833190b70SSascha Wildner /* #define TWS_DEBUG on */ 3933190b70SSascha Wildner 4033190b70SSascha Wildner void tws_trace(const char *file, const char *fun, int linenum, 4133190b70SSascha Wildner struct tws_softc *sc, char *desc, u_int64_t val1, u_int64_t val2); 4233190b70SSascha Wildner void tws_log(struct tws_softc *sc, int index); 4333190b70SSascha Wildner u_int32_t tws_read_reg(struct tws_softc *sc, 4433190b70SSascha Wildner int offset, int size); 4533190b70SSascha Wildner void tws_write_reg(struct tws_softc *sc, int offset, 4633190b70SSascha Wildner u_int32_t value, int size); 4733190b70SSascha Wildner 4833190b70SSascha Wildner u_int16_t tws_swap16(u_int16_t val); 4933190b70SSascha Wildner u_int32_t tws_swap32(u_int32_t val); 5033190b70SSascha Wildner u_int64_t tws_swap64(u_int64_t val); 5133190b70SSascha Wildner 5233190b70SSascha Wildner void tws_init_qs(struct tws_softc *sc); 5333190b70SSascha Wildner 5433190b70SSascha Wildner 5533190b70SSascha Wildner 5633190b70SSascha Wildner /* ----------------- trace ----------------- */ 5733190b70SSascha Wildner 5833190b70SSascha Wildner #define TWS_TRACE_ON on /* Alawys on - use wisely to trace errors */ 5933190b70SSascha Wildner 6033190b70SSascha Wildner #ifdef TWS_DEBUG 6133190b70SSascha Wildner #define TWS_TRACE_DEBUG_ON on 6233190b70SSascha Wildner #endif 6333190b70SSascha Wildner 6433190b70SSascha Wildner #ifdef TWS_TRACE_DEBUG_ON 6533190b70SSascha Wildner #define TWS_TRACE_DEBUG(sc, desc, val1, val2) \ 6633190b70SSascha Wildner tws_trace(__FILE__, __func__, __LINE__, sc, desc, \ 6733190b70SSascha Wildner (u_int64_t)val1, (u_int64_t)val2) 6833190b70SSascha Wildner #else 69*1b13d02bSzrj #define TWS_TRACE_DEBUG(sc, desc, val1, val2) do { } while (0) 7033190b70SSascha Wildner #endif 7133190b70SSascha Wildner 7233190b70SSascha Wildner #ifdef TWS_TRACE_ON 7333190b70SSascha Wildner #define TWS_TRACE(sc, desc, val1, val2) \ 7433190b70SSascha Wildner tws_trace(__FILE__, __func__, __LINE__, sc, desc, \ 7533190b70SSascha Wildner (u_int64_t)val1, (u_int64_t)val2) 7633190b70SSascha Wildner #else 77*1b13d02bSzrj #define TWS_TRACE(sc, desc, val1, val2) do { } while (0) 7833190b70SSascha Wildner #endif 7933190b70SSascha Wildner 8033190b70SSascha Wildner /* ---------------- logging ---------------- */ 8133190b70SSascha Wildner 8233190b70SSascha Wildner 8333190b70SSascha Wildner /* ---------------- logging ---------------- */ 8433190b70SSascha Wildner enum error_index { 8533190b70SSascha Wildner SYSCTL_TREE_NODE_ADD, 8633190b70SSascha Wildner PCI_COMMAND_READ, 8733190b70SSascha Wildner ALLOC_MEMORY_RES, 8833190b70SSascha Wildner ALLOC_IRQ_RES, 8933190b70SSascha Wildner SETUP_INTR_RES, 9033190b70SSascha Wildner TWS_CAM_ATTACH, 9133190b70SSascha Wildner CAM_SIMQ_ALLOC, 9233190b70SSascha Wildner CAM_SIM_ALLOC, 9333190b70SSascha Wildner TWS_XPT_BUS_REGISTER, 9433190b70SSascha Wildner TWS_XPT_CREATE_PATH, 9533190b70SSascha Wildner TWS_BUS_SCAN_REQ, 9633190b70SSascha Wildner TWS_INIT_FAILURE, 9733190b70SSascha Wildner TWS_CTLR_INIT_FAILURE, 9833190b70SSascha Wildner }; 9933190b70SSascha Wildner 10033190b70SSascha Wildner enum severity { 10133190b70SSascha Wildner ERROR = 1, 10233190b70SSascha Wildner WARNING, 10333190b70SSascha Wildner INFO, 10433190b70SSascha Wildner _DEBUG, /* XXX swildner: conflict with DEBUG option */ 10533190b70SSascha Wildner }; 10633190b70SSascha Wildner 10733190b70SSascha Wildner struct error_desc { 10833190b70SSascha Wildner char desc[256]; 10933190b70SSascha Wildner u_int32_t error_code; 11033190b70SSascha Wildner int severity_level; 11133190b70SSascha Wildner char *fmt; 11233190b70SSascha Wildner char *error_str; 11333190b70SSascha Wildner }; 11433190b70SSascha Wildner 11533190b70SSascha Wildner extern struct error_desc array[]; 11633190b70SSascha Wildner /* ----------- q services ------------- */ 11733190b70SSascha Wildner 11833190b70SSascha Wildner #define TWS_FREE_Q 0 11933190b70SSascha Wildner #define TWS_PENDING_Q 1 12033190b70SSascha Wildner #define TWS_BUSY_Q 2 12133190b70SSascha Wildner #define TWS_COMPLETE_Q 3 12233190b70SSascha Wildner 12333190b70SSascha Wildner #define TWS_REQ_SUBMIT_SUCCESS 0 12433190b70SSascha Wildner /* req error codes */ 12533190b70SSascha Wildner #define TWS_REQ_ERR_INPROGRESS 1 12633190b70SSascha Wildner #define TWS_REQ_ERR_PEND_NOMFA 2 12733190b70SSascha Wildner #define TWS_REQ_REQUEUE 3 12833190b70SSascha Wildner 12933190b70SSascha Wildner #define TWS_REQ_ERR_INVALID 0xdead 13033190b70SSascha Wildner 13133190b70SSascha Wildner 13233190b70SSascha Wildner /* ------------------------ */ 133cec73927SMatthew Dillon #define TWS_LOCAL_TIME time_uptime 134