xref: /dragonfly/sys/dev/raid/tws/tws_services.h (revision 1b13d02b)
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