xref: /freebsd/sys/dev/tws/tws_services.h (revision 95ee2897)
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