vxgehal-virtualpath.h revision 331722
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: stable/11/sys/dev/vxge/vxgehal/vxgehal-virtualpath.h 331722 2018-03-29 02:50:57Z eadler $*/
32
33#ifndef	VXGE_HAL_VIRTUALPATH_H
34#define	VXGE_HAL_VIRTUALPATH_H
35
36__EXTERN_BEGIN_DECLS
37
38struct __hal_device_t;
39
40
41/*
42 * struct __hal_virtualpath_t - Virtual Path
43 *
44 * @vp_id: Virtual path id
45 * @vp_open: This flag specifies if vxge_hal_vp_open is called from LL Driver
46 * @hldev: Hal device
47 * @vp_config: Virtual Path Config
48 * @vp_reg: VPATH Register map address in BAR0
49 * @vpmgmt_reg: VPATH_MGMT register map address
50 * @is_first_vpath: 1 if this first vpath in this vfunc, 0 otherwise
51 * @promisc_en: Promisc mode state flag.
52 * @min_bandwidth: Guaranteed Band Width in Mbps
53 * @max_bandwidth: Maximum Band Width in Mbps
54 * @max_mtu: Max mtu that can be supported
55 * @sess_grps_available: The mask of available session groups for this vpath
56 * @bmap_root_assigned: The bitmap root for this vpath
57 * @vsport_choices: The mask of vsports that are available for this vpath
58 * @vsport_number: vsport attached to this vpath
59 * @sess_grp_start: Session oid start
60 * @sess_grp_end: session oid end
61 * @max_kdfc_db: Maximum kernel mode doorbells
62 * @max_nofl_db: Maximum non offload doorbells
63 * @max_ofl_db: Maximum offload doorbells
64 * @max_msg_db: Maximum message doorbells
65 * @rxd_mem_size: Maximum RxD memory size
66 * @tx_intr_num: Interrupt Number associated with the TX
67 * @rx_intr_num: Interrupt Number associated with the RX
68 * @einta_intr_num: Interrupt Number associated with Emulated MSIX DeAssert IntA
69 * @bmap_intr_num: Interrupt Number associated with the bitmap
70 * @nce_oid_db: NCE ID database
71 * @session_oid_db: Session Object Id database
72 * @active_lros: Active LRO session list
73 * @active_lro_count: Active LRO count
74 * @free_lros: Free LRO session list
75 * @free_lro_count: Free LRO count
76 * @lro_lock: LRO session lists' lock
77 * @sqs: List of send queues
78 * @sq_lock: Lock for operations on sqs
79 * @srqs: List of SRQs
80 * @srq_lock: Lock for operations on srqs
81 * @srq_oid_db: DRQ object id database
82 * @cqrqs: CQRQs
83 * @cqrq_lock: Lock for operations on cqrqs
84 * @cqrq_oid_db: CQRQ object id database
85 * @umqh: UP Message Queue
86 * @dmqh: Down Message Queue
87 * @umq_dmq_ir: The adapter will overwrite and update this location as Messages
88 *		are read from DMQ and written into UMQ.
89 * @umq_dmq_ir_reg_entry: Reg entry of umq_dmq_ir_t
90 * @ringh: Ring Queue
91 * @fifoh: FIFO Queue
92 * @vpath_handles: Virtual Path handles list
93 * @vpath_handles_lock: Lock for operations on Virtual Path handles list
94 * @stats_block: Memory for DMAing stats
95 * @stats: Vpath statistics
96 *
97 * Virtual path structure to encapsulate the data related to a virtual path.
98 * Virtual paths are allocated by the HAL upon getting configuration from the
99 * driver and inserted into the list of virtual paths.
100 */
101typedef struct __hal_virtualpath_t {
102	u32				vp_id;
103
104	u32				vp_open;
105#define	VXGE_HAL_VP_NOT_OPEN		0
106#define	VXGE_HAL_VP_OPEN		1
107
108	struct __hal_device_t		*hldev;
109	vxge_hal_vp_config_t		*vp_config;
110	vxge_hal_vpath_reg_t		*vp_reg;
111	vxge_hal_vpmgmt_reg_t		*vpmgmt_reg;
112	__hal_non_offload_db_wrapper_t	*nofl_db;
113	__hal_messaging_db_wrapper_t	*msg_db;
114	u32				is_first_vpath;
115
116	u32				promisc_en;
117#define	VXGE_HAL_VP_PROMISC_ENABLE	1
118#define	VXGE_HAL_VP_PROMISC_DISABLE	0
119
120	u32				min_bandwidth;
121	u32				max_bandwidth;
122
123	u32				max_mtu;
124	u64				sess_grps_available;
125	u32				bmap_root_assigned;
126	u32				vsport_choices;
127	u32				vsport_number;
128	u32				sess_grp_start;
129	u32				sess_grp_end;
130	u32				max_kdfc_db;
131	u32				max_nofl_db;
132	u32				max_ofl_db;
133	u32				max_msg_db;
134	u32				rxd_mem_size;
135	u32				tx_intr_num;
136	u32				rx_intr_num;
137	u32				einta_intr_num;
138	u32				bmap_intr_num;
139
140	u64				tim_tti_cfg1_saved;
141	u64				tim_tti_cfg3_saved;
142	u64				tim_rti_cfg1_saved;
143	u64				tim_rti_cfg3_saved;
144
145
146	vxge_hal_ring_h			ringh;
147	vxge_hal_fifo_h			fifoh;
148	vxge_list_t			vpath_handles;
149	spinlock_t			vpath_handles_lock;
150	__hal_blockpool_entry_t		*stats_block;
151	vxge_hal_vpath_stats_hw_info_t	*hw_stats;
152	vxge_hal_vpath_stats_hw_info_t	*hw_stats_sav;
153	vxge_hal_vpath_stats_sw_info_t	*sw_stats;
154} __hal_virtualpath_t;
155
156/*
157 * struct __hal_vpath_handle_t - List item to store callback information
158 * @item: List head to keep the item in linked list
159 * @vpath: Virtual path to which this item belongs
160 * @cb_fn: Callback function to be called
161 * @client_handle: Client handle to be returned with the callback
162 *
163 * This structure is used to store the callback information.
164 */
165typedef struct __hal_vpath_handle_t {
166	vxge_list_t			item;
167	__hal_virtualpath_t		*vpath;
168	vxge_hal_vpath_callback_f	cb_fn;
169	vxge_hal_client_h		client_handle;
170} __hal_vpath_handle_t;
171
172
173#define	VXGE_HAL_VIRTUAL_PATH_HANDLE(vpath)				\
174		((vxge_hal_vpath_h)(vpath)->vpath_handles.next)
175
176#define	VXGE_HAL_VPATH_STATS_PIO_READ(offset) {				\
177	status = __hal_vpath_stats_access(vpath,			\
178			VXGE_HAL_STATS_OP_READ,				\
179			offset,						\
180			&val64);					\
181	if (status != VXGE_HAL_OK) {					\
182		vxge_hal_trace_log_stats("<== %s:%s:%d  Result: %d",	\
183		    __FILE__, __func__, __LINE__, status);		\
184		return (status);					\
185	}								\
186}
187
188vxge_hal_status_e
189__hal_vpath_size_quantum_set(
190    vxge_hal_device_h devh,
191    u32 vp_id);
192
193vxge_hal_status_e
194__hal_vpath_mgmt_read(
195    struct __hal_device_t *hldev,
196    __hal_virtualpath_t *vpath);
197
198vxge_hal_status_e
199__hal_vpath_pci_read(
200    struct __hal_device_t *hldev,
201    u32 vp_id,
202    u32 offset,
203    u32 length,
204    void *val);
205
206vxge_hal_status_e
207__hal_vpath_reset_check(
208    __hal_virtualpath_t *vpath);
209
210vxge_hal_status_e
211__hal_vpath_fw_memo_get(
212    pci_dev_h pdev,
213    pci_reg_h regh0,
214    u32 vp_id,
215    vxge_hal_vpath_reg_t *vpath_reg,
216    u32 action,
217    u64 param_index,
218    u64 *data0,
219    u64 *data1);
220
221vxge_hal_status_e
222__hal_vpath_fw_flash_ver_get(
223    pci_dev_h pdev,
224    pci_reg_h regh0,
225    u32 vp_id,
226    vxge_hal_vpath_reg_t *vpath_reg,
227    vxge_hal_device_version_t *fw_version,
228    vxge_hal_device_date_t *fw_date,
229    vxge_hal_device_version_t *flash_version,
230    vxge_hal_device_date_t *flash_date);
231
232vxge_hal_status_e
233__hal_vpath_card_info_get(
234    pci_dev_h pdev,
235    pci_reg_h regh0,
236    u32 vp_id,
237    vxge_hal_vpath_reg_t *vpath_reg,
238    u8 *serial_number,
239    u8 *part_number,
240    u8 *product_description);
241
242vxge_hal_status_e
243__hal_vpath_pmd_info_get(
244    pci_dev_h pdev,
245    pci_reg_h regh0,
246    u32 vp_id,
247    vxge_hal_vpath_reg_t *vpath_reg,
248    u32 *ports,
249    vxge_hal_device_pmd_info_t *pmd_port0,
250    vxge_hal_device_pmd_info_t *pmd_port1);
251
252u64
253__hal_vpath_pci_func_mode_get(
254    pci_dev_h pdev,
255    pci_reg_h regh0,
256    u32 vp_id,
257    vxge_hal_vpath_reg_t *vpath_reg);
258
259vxge_hal_device_lag_mode_e
260__hal_vpath_lag_mode_get(
261    __hal_virtualpath_t *vpath);
262
263u64
264__hal_vpath_vpath_map_get(
265    pci_dev_h pdev,
266    pci_reg_h regh0,
267    u32 vp_id,
268    u32 vh,
269    u32 func,
270    vxge_hal_vpath_reg_t *vpath_reg);
271
272vxge_hal_status_e
273__hal_vpath_fw_upgrade(
274    pci_dev_h pdev,
275    pci_reg_h regh0,
276    u32 vp_id,
277    vxge_hal_vpath_reg_t *vpath_reg,
278    u8 *buffer,
279    u32 length);
280
281vxge_hal_status_e
282__hal_vpath_pcie_func_mode_set(
283    struct __hal_device_t *hldev,
284    u32 vp_id,
285    u32 func_mode);
286
287vxge_hal_status_e
288__hal_vpath_flick_link_led(
289    struct __hal_device_t *hldev,
290    u32 vp_id,
291    u32 port,
292    u32 on_off);
293
294vxge_hal_status_e
295__hal_vpath_udp_rth_set(
296    struct __hal_device_t *hldev,
297    u32 vp_id,
298    u32 on_off);
299
300vxge_hal_status_e
301__hal_vpath_rts_table_get(
302    vxge_hal_vpath_h vpath_handle,
303    u32 action,
304    u32 rts_table,
305    u32 offset,
306    u64 *data1,
307    u64 *data2);
308
309vxge_hal_status_e
310__hal_vpath_rts_table_set(
311    vxge_hal_vpath_h vpath_handle,
312    u32 action,
313    u32 rts_table,
314    u32 offset,
315    u64 data1,
316    u64 data2);
317
318
319vxge_hal_status_e
320__hal_vpath_hw_reset(
321    vxge_hal_device_h devh,
322    u32 vp_id);
323
324vxge_hal_status_e
325__hal_vpath_sw_reset(
326    vxge_hal_device_h devh,
327    u32 vp_id);
328
329vxge_hal_status_e
330__hal_vpath_prc_configure(
331    vxge_hal_device_h devh,
332    u32 vp_id);
333
334vxge_hal_status_e
335__hal_vpath_kdfc_configure(
336    vxge_hal_device_h devh,
337    u32 vp_id);
338
339vxge_hal_status_e
340__hal_vpath_mac_configure(
341    vxge_hal_device_h devh,
342    u32 vp_id);
343
344vxge_hal_status_e
345__hal_vpath_tim_configure(
346    vxge_hal_device_h devh,
347    u32 vp_id);
348
349vxge_hal_status_e
350__hal_vpath_hw_initialize(
351    vxge_hal_device_h devh,
352    u32 vp_id);
353
354vxge_hal_status_e
355__hal_vp_initialize(
356    vxge_hal_device_h devh,
357    u32 vp_id,
358    vxge_hal_vp_config_t *config);
359
360void
361__hal_vp_terminate(
362    vxge_hal_device_h devh,
363    u32 vp_id);
364
365vxge_hal_status_e
366__hal_vpath_hw_addr_get(
367    pci_dev_h pdev,
368    pci_reg_h regh0,
369    u32 vp_id,
370    vxge_hal_vpath_reg_t *vpath_reg,
371    macaddr_t macaddr,
372    macaddr_t macaddr_mask);
373
374
375vxge_hal_status_e
376__hal_vpath_intr_enable(
377    __hal_virtualpath_t *vpath);
378
379vxge_hal_status_e
380__hal_vpath_intr_disable(
381    __hal_virtualpath_t *vpath);
382
383vxge_hal_device_link_state_e
384__hal_vpath_link_state_test(
385    __hal_virtualpath_t *vpath);
386
387vxge_hal_device_link_state_e
388__hal_vpath_link_state_poll(
389    __hal_virtualpath_t *vpath);
390
391vxge_hal_device_data_rate_e
392__hal_vpath_data_rate_poll(
393    __hal_virtualpath_t *vpath);
394
395vxge_hal_status_e
396__hal_vpath_alarm_process(
397    __hal_virtualpath_t *vpath,
398    u32 skip_alarms);
399
400vxge_hal_status_e
401__hal_vpath_stats_access(
402    __hal_virtualpath_t *vpath,
403    u32 operation,
404    u32 offset,
405    u64 *stat);
406
407vxge_hal_status_e
408__hal_vpath_xmac_tx_stats_get(
409    __hal_virtualpath_t *vpath,
410    vxge_hal_xmac_vpath_tx_stats_t *vpath_tx_stats);
411
412vxge_hal_status_e
413__hal_vpath_xmac_rx_stats_get(
414    __hal_virtualpath_t *vpath,
415    vxge_hal_xmac_vpath_rx_stats_t *vpath_rx_stats);
416
417
418vxge_hal_status_e
419__hal_vpath_hw_stats_get(
420    __hal_virtualpath_t *vpath,
421    vxge_hal_vpath_stats_hw_info_t *hw_stats);
422
423__EXTERN_END_DECLS
424
425#endif	/* VXGE_HAL_VIRTUALPATH_H */
426