]> CyberLeo.Net >> Repos - FreeBSD/releng/9.2.git/blob - sys/dev/vxge/vxgehal/vxgehal-doorbells.h
- Copy stable/9 to releng/9.2 as part of the 9.2-RELEASE cycle.
[FreeBSD/releng/9.2.git] / sys / dev / vxge / vxgehal / vxgehal-doorbells.h
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$*/
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  */
53 typedef __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  */
94 typedef __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  */
142 typedef __vxge_os_attr_cacheline_aligned
143 struct __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  */
177 typedef __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
193 void
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
199 void
200 __hal_rxd_db_post(vxge_hal_vpath_h vpath_handle,
201     u32 num_bytes);
202
203 vxge_hal_status_e
204 __hal_non_offload_db_reset(vxge_hal_vpath_h vpath_handle);
205
206
207 void
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
213 vxge_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 */