1/*-
2 * Copyright(c) 2002-2011 Exar Corp.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification are permitted provided the following conditions are met:
7 *
8 *    1. Redistributions of source code must retain the above copyright notice,
9 *       this list of conditions and the following disclaimer.
10 *
11 *    2. Redistributions in binary form must reproduce the above copyright
12 *       notice, this list of conditions and the following disclaimer in the
13 *       documentation and/or other materials provided with the distribution.
14 *
15 *    3. Neither the name of the Exar Corporation nor the names of its
16 *       contributors may be used to endorse or promote products derived from
17 *       this software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
23 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE.
30 */
31/*$FreeBSD: releng/10.3/sys/dev/vxge/vxgehal/vxgehal-doorbells.h 221167 2011-04-28 14:33:15Z gnn $*/
32
33#ifndef	VXGE_HAL_DOOR_BELLS_H
34#define	VXGE_HAL_DOOR_BELLS_H
35
36__EXTERN_BEGIN_DECLS
37
38/*
39 * struct __hal_non_offload_db_wrapper_t - Non-offload Doorbell Wrapper
40 * @control_0:	Bits 0 to 7 - Doorbell type.
41 *		Bits 8 to 31 - Reserved.
42 *		Bits 32 to 39 - The highest TxD in this TxDL.
43 *		Bits 40 to 47 - Reserved.
44 *		Bits 48 to 55 - Reserved.
45 *		Bits 56 to 63 - No snoop flags.
46 * @txdl_ptr:	The starting location of the TxDL in host memory.
47 *
48 * Created by the host and written to the adapter via PIO to a Kernel Doorbell
49 * FIFO. All non-offload doorbell wrapper fields must be written by the host as
50 * part of a doorbell write. Consumed by the adapter but is not written by the
51 * adapter.
52 */
53typedef __vxge_os_attr_cacheline_aligned struct __hal_non_offload_db_wrapper_t {
54	u64		control_0;
55#define	VXGE_HAL_NODBW_GET_TYPE(ctrl0)				bVAL8(ctrl0, 0)
56#define	VXGE_HAL_NODBW_TYPE(val)				vBIT(val, 0, 8)
57#define	VXGE_HAL_NODBW_TYPE_NODBW				0
58
59#define	VXGE_HAL_NODBW_GET_LAST_TXD_NUMBER(ctrl0)		bVAL8(ctrl0, 32)
60#define	VXGE_HAL_NODBW_LAST_TXD_NUMBER(val)			vBIT(val, 32, 8)
61
62#define	VXGE_HAL_NODBW_GET_NO_SNOOP(ctrl0)			bVAL8(ctrl0, 56)
63#define	VXGE_HAL_NODBW_LIST_NO_SNOOP(val)			vBIT(val, 56, 8)
64#define	VXGE_HAL_NODBW_LIST_NO_SNOOP_TXD_READ_TXD0_WRITE	0x2
65#define	VXGE_HAL_NODBW_LIST_NO_SNOOP_TX_FRAME_DATA_READ		0x1
66
67	u64		txdl_ptr;
68} __hal_non_offload_db_wrapper_t;
69
70/*
71 * struct __hal_offload_db_wrapper_t - Tx-Offload Doorbell Wrapper
72 * @control_0:	Bits 0 to 7 - Doorbell type.
73 *		Bits 8 to 31 - Identifies the session to which this Tx
74 *		offload doorbell applies.
75 *		Bits 32 to 40 - Identifies the incarnation of this Session
76 *		Number. The adapter assigns a Session Instance
77 *		Number of 0 to a session when that Session Number
78 *		is first used. Each subsequent assignment of that
79 *		Session Number from the free pool causes this
80 *		number to be incremented, with wrap eventually
81 *		occurring from 255 back to 0.
82 *		Bits 40 to 63 - Identifies the end of the TOWI list for
83 *		this session to the adapter.
84 * @control_1:	Bits 0 to 7 - Identifies what is included in this doorbell
85 *		Bits 8 to 15 - The number of Immediate data bytes included in
86 *		this doorbell.
87 *		Bits 16 to 63 - Reserved.
88 *
89 * Created by the host and written to the adapter via PIO to a Kernel Doorbell
90 * FIFO. All Tx Offload doorbell wrapper fields must be written by the host as
91 * part of a doorbell write. Consumed by the adapter but is never written by the
92 * adapter.
93 */
94typedef __vxge_os_attr_cacheline_aligned struct __hal_offload_db_wrapper_t {
95	u64		control_0;
96#define	VXGE_HAL_ODBW_GET_TYPE(ctrl0)			bVAL8(ctrl0, 0)
97#define	VXGE_HAL_ODBW_TYPE(val)				vBIT(val, 0, 8)
98#define	VXGE_HAL_ODBW_TYPE_ODBW				1
99
100#define	VXGE_HAL_ODBW_GET_SESSION_NUMBER(ctrl0)		bVAL24(ctrl0, 8)
101#define	VXGE_HAL_ODBW_SESSION_NUMBER(val)		vBIT(val, 8, 24)
102
103#define	VXGE_HAL_ODBW_GET_SESSION_INST_NUMBER(ctrl0)	bVAL8(ctrl0, 32)
104#define	VXGE_HAL_ODBW_SESSION_INST_NUMBER(val)		vBIT(val, 32, 8)
105
106#define	VXGE_HAL_ODBW_GET_HIGH_TOWI_NUMBER(ctrl0)	bVAL24(ctrl0, 40)
107#define	VXGE_HAL_ODBW_HIGH_TOWI_NUMBER(val)		vBIT(val, 40, 24)
108
109	u64		control_1;
110#define	VXGE_HAL_ODBW_GET_ENTRY_TYPE(ctrl1)		bVAL8(ctrl1, 0)
111#define	VXGE_HAL_ODBW_ENTRY_TYPE(val)			vBIT(val, 0, 8)
112#define	VXGE_HAL_ODBW_ENTRY_TYPE_WRAPPER_ONLY		0x0
113#define	VXGE_HAL_ODBW_ENTRY_TYPE_WRAPPER_TOWI		0x1
114#define	VXGE_HAL_ODBW_ENTRY_TYPE_WRAPPER_TOWI_DATA	0x2
115
116#define	VXGE_HAL_ODBW_GET_IMMEDIATE_BYTE_COUNT(ctrl1)	bVAL8(ctrl1, 8)
117#define	VXGE_HAL_ODBW_IMMEDIATE_BYTE_COUNT(val)		vBIT(val, 8, 8)
118
119} __hal_offload_db_wrapper_t;
120
121/*
122 * struct __hal_offload_atomic_db_wrapper_t - Atomic Tx-Offload Doorbell
123 *						 Wrapper
124 * @control_0:	Bits 0 to 7 - Doorbell type.
125 *		Bits 8 to 31 - Identifies the session to which this Tx
126 *		offload doorbell applies.
127 *		Bits 32 to 40 - Identifies the incarnation of this Session
128 *		Number. The adapter assigns a Session Instance
129 *		Number of 0 to a session when that Session Number
130 *		is first used. Each subsequent assignment of that
131 *		Session Number from the free pool causes this
132 *		number to be incremented, with wrap eventually
133 *		occurring from 255 back to 0.
134 *		Bits 40 to 63 - Identifies the end of the TOWI list for
135 *		this session to the adapter.
136 *
137 * Created by the host and written to the adapter via PIO to a Kernel Doorbell
138 * FIFO.  All Tx Offload doorbell wrapper fields must be written by the host as
139 * part of a doorbell write. Consumed by the adapter but is never written by the
140 * adapter.
141 */
142typedef	__vxge_os_attr_cacheline_aligned
143struct __hal_offload_atomic_db_wrapper_t {
144	u64		control_0;
145#define	VXGE_HAL_ODBW_GET_TYPE(ctrl0)			bVAL8(ctrl0, 0)
146#define	VXGE_HAL_ODBW_TYPE(val)				vBIT(val, 0, 8)
147#define	VXGE_HAL_ODBW_TYPE_ATOMIC			2
148
149#define	VXGE_HAL_ODBW_GET_SESSION_NUMBER(ctrl0)		bVAL24(ctrl0, 8)
150#define	VXGE_HAL_ODBW_SESSION_NUMBER(val)		vBIT(val, 8, 24)
151
152#define	VXGE_HAL_ODBW_GET_SESSION_INST_NUMBER(ctrl0)	bVAL8(ctrl0, 32)
153#define	VXGE_HAL_ODBW_SESSION_INST_NUMBER(val)		vBIT(val, 32, 8)
154
155#define	VXGE_HAL_ODBW_GET_HIGH_TOWI_NUMBER(ctrl0)	bVAL24(ctrl0, 40)
156#define	VXGE_HAL_ODBW_HIGH_TOWI_NUMBER(val)		vBIT(val, 40, 24)
157
158} __hal_offload_atomic_db_wrapper_t;
159
160
161
162/*
163 * struct __hal_messaging_db_wrapper_t - Messaging Doorbell Wrapper
164 * @control_0:	Bits 0 to 7 - Doorbell type.
165 *		Bits 8 to 31 - Reserved.
166 *		Bits 32 to 63 - The number of new message bytes made available
167 *		by this doorbell entry.
168 * @control_1:	Bits 0 to 7 - Reserved.
169 *		Bits 8 to 15 - The number of Immediate messaging bytes included
170 *		in this doorbell.
171 *		Bits 16 to 63 - Reserved.
172 *
173 * Created by the host and written to the adapter via PIO to a Kernel Doorbell
174 * FIFO. All message doorbell wrapper fields must be written by the host as
175 * part of a doorbell write. Consumed by the adapter but not written by adapter.
176 */
177typedef __vxge_os_attr_cacheline_aligned struct __hal_messaging_db_wrapper_t {
178	u64		control_0;
179#define	VXGE_HAL_MDBW_GET_TYPE(ctrl0)			bVAL8(ctrl0, 0)
180#define	VXGE_HAL_MDBW_TYPE(val)				vBIT(val, 0, 8)
181#define	VXGE_HAL_MDBW_TYPE_MDBW				3
182
183#define	VXGE_HAL_MDBW_GET_MESSAGE_BYTE_COUNT(ctrl0)	bVAL32(ctrl0, 32)
184#define	VXGE_HAL_MDBW_MESSAGE_BYTE_COUNT(val)		vBIT(val, 32, 32)
185
186	u64		control_1;
187#define	VXGE_HAL_MDBW_GET_IMMEDIATE_BYTE_COUNT(ctrl1)	bVAL8(ctrl1, 8)
188#define	VXGE_HAL_MDBW_IMMEDIATE_BYTE_COUNT(val)		vBIT(val, 8, 8)
189
190} __hal_messaging_db_wrapper_t;
191
192
193void
194__hal_non_offload_db_post(vxge_hal_vpath_h vpath_handle,
195    u64 txdl_ptr,
196    u32 num_txds,
197    u32 no_snoop);
198
199void
200__hal_rxd_db_post(vxge_hal_vpath_h vpath_handle,
201    u32 num_bytes);
202
203vxge_hal_status_e
204__hal_non_offload_db_reset(vxge_hal_vpath_h vpath_handle);
205
206
207void
208__hal_message_db_post(vxge_hal_vpath_h vpath_handle,
209    u32 num_msg_bytes,
210    u8 *immed_msg,
211    u32 immed_msg_len);
212
213vxge_hal_status_e
214__hal_message_db_reset(vxge_hal_vpath_h vpath_handle);
215
216__EXTERN_END_DECLS
217
218#endif	/* VXGE_HAL_DOOR_BELLS_H */
219