1*d14abf15SRobert Mustacchi 
2*d14abf15SRobert Mustacchi /*****************************************************************************
3*d14abf15SRobert Mustacchi  * CDDL HEADER START
4*d14abf15SRobert Mustacchi  *
5*d14abf15SRobert Mustacchi  * The contents of this file are subject to the terms of the
6*d14abf15SRobert Mustacchi  * Common Development and Distribution License (the "License").
7*d14abf15SRobert Mustacchi  * You may not use this file except in compliance with the License.
8*d14abf15SRobert Mustacchi  *
9*d14abf15SRobert Mustacchi  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*d14abf15SRobert Mustacchi  * or http://www.opensolaris.org/os/licensing.
11*d14abf15SRobert Mustacchi  * See the License for the specific language governing permissions
12*d14abf15SRobert Mustacchi  * and limitations under the License.
13*d14abf15SRobert Mustacchi  *
14*d14abf15SRobert Mustacchi  * When distributing Covered Code, include this CDDL HEADER in each
15*d14abf15SRobert Mustacchi  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16*d14abf15SRobert Mustacchi  * If applicable, add the following below this CDDL HEADER, with the
17*d14abf15SRobert Mustacchi  * fields enclosed by brackets "[]" replaced with your own identifying
18*d14abf15SRobert Mustacchi  * information: Portions Copyright [yyyy] [name of copyright owner]
19*d14abf15SRobert Mustacchi  *
20*d14abf15SRobert Mustacchi  * CDDL HEADER END
21*d14abf15SRobert Mustacchi  *
22*d14abf15SRobert Mustacchi  * Copyright 2014 QLogic Corporation
23*d14abf15SRobert Mustacchi  * The contents of this file are subject to the terms of the
24*d14abf15SRobert Mustacchi  * QLogic End User License (the "License").
25*d14abf15SRobert Mustacchi  * You may not use this file except in compliance with the License.
26*d14abf15SRobert Mustacchi  *
27*d14abf15SRobert Mustacchi  * You can obtain a copy of the License at
28*d14abf15SRobert Mustacchi  * http://www.qlogic.com/Resources/Documents/DriverDownloadHelp/
29*d14abf15SRobert Mustacchi  * QLogic_End_User_Software_License.txt
30*d14abf15SRobert Mustacchi  * See the License for the specific language governing permissions
31*d14abf15SRobert Mustacchi  * and limitations under the License.
32*d14abf15SRobert Mustacchi  *
33*d14abf15SRobert Mustacchi  *****************************************************************************/
34*d14abf15SRobert Mustacchi 
35*d14abf15SRobert Mustacchi #if defined(_VBD_)
36*d14abf15SRobert Mustacchi #include <ntddk.h>
37*d14abf15SRobert Mustacchi #elif defined(_VBD_CMD_)
38*d14abf15SRobert Mustacchi #include "vc_os_emul.h"
39*d14abf15SRobert Mustacchi #endif
40*d14abf15SRobert Mustacchi 
41*d14abf15SRobert Mustacchi #include "../../Windows/b10bdrv/um_lock.h"
42*d14abf15SRobert Mustacchi 
43*d14abf15SRobert Mustacchi // portable integer type of the pointer size for current platform (64/32)
44*d14abf15SRobert Mustacchi typedef ULONG_PTR mm_int_ptr_t;
45*d14abf15SRobert Mustacchi 
46*d14abf15SRobert Mustacchi typedef spin_lock_t mm_spin_lock_t;
47*d14abf15SRobert Mustacchi 
48*d14abf15SRobert Mustacchi #if defined(_IA64_) || defined(_VBD_CMD_)
49*d14abf15SRobert Mustacchi #define mm_read_barrier_imp()  KeMemoryBarrier()
50*d14abf15SRobert Mustacchi #else
51*d14abf15SRobert Mustacchi #define mm_read_barrier_imp()  KeMemoryBarrierWithoutFence()
52*d14abf15SRobert Mustacchi #endif
53*d14abf15SRobert Mustacchi 
54*d14abf15SRobert Mustacchi /* Sections that are different between VBD_CMD and VBD (shouldn't be alot...)  */
55*d14abf15SRobert Mustacchi #if defined(_VBD_)
56*d14abf15SRobert Mustacchi lm_status_t mm_get_bar_offset_imp(struct _lm_device_t *pdev,
57*d14abf15SRobert Mustacchi                                   u8_t barn,
58*d14abf15SRobert Mustacchi                                   lm_address_t *bar_addr);
59*d14abf15SRobert Mustacchi 
60*d14abf15SRobert Mustacchi lm_status_t mm_get_bar_size_imp(struct _lm_device_t *pdev,
61*d14abf15SRobert Mustacchi                                  u8_t bar_num,
62*d14abf15SRobert Mustacchi                                  u32_t *bar_sz);
63*d14abf15SRobert Mustacchi 
64*d14abf15SRobert Mustacchi #else
65*d14abf15SRobert Mustacchi 
66*d14abf15SRobert Mustacchi #define mm_get_bar_offset_imp(pdev, bar_num, bar_addr) \
67*d14abf15SRobert Mustacchi     lm_get_bar_offset_direct(pdev, bar_num, bar_addr)
68*d14abf15SRobert Mustacchi 
69*d14abf15SRobert Mustacchi #define mm_get_bar_size_imp(pdev, bar_num, val_p) \
70*d14abf15SRobert Mustacchi     lm_get_bar_size_direct(pdev, bar_num, val_p)
71*d14abf15SRobert Mustacchi 
72*d14abf15SRobert Mustacchi 
73*d14abf15SRobert Mustacchi #endif
74*d14abf15SRobert Mustacchi 
75*d14abf15SRobert Mustacchi #define mm_write_barrier_imp() KeMemoryBarrier()
76*d14abf15SRobert Mustacchi #define mm_barrier_imp()       KeMemoryBarrier()
77*d14abf15SRobert Mustacchi 
78*d14abf15SRobert Mustacchi #define mm_atomic_set_imp(_p, _v) InterlockedExchange((long*)(_p), (long)(_v))
79*d14abf15SRobert Mustacchi 
80*d14abf15SRobert Mustacchi #define mm_atomic_dec_imp(_p) InterlockedDecrement((long*)(_p))
81*d14abf15SRobert Mustacchi #define mm_atomic_inc_imp(_p) InterlockedIncrement((long*)(_p))
82*d14abf15SRobert Mustacchi 
83*d14abf15SRobert Mustacchi #define mm_atomic_add_imp(_p, _v) \
84*d14abf15SRobert Mustacchi     InterlockedExchangeAdd((long*)(_p), (long)(_v))
85*d14abf15SRobert Mustacchi #define mm_atomic_sub_imp(_p, _v) \
86*d14abf15SRobert Mustacchi     InterlockedExchangeAdd((long*)(_p), -1*(long)(_v))
87*d14abf15SRobert Mustacchi 
88*d14abf15SRobert Mustacchi #define mm_atomic_and_imp(_p, _v)      InterlockedAnd((long*)(_p), (long)(_v))
89*d14abf15SRobert Mustacchi #define mm_atomic_long_and_imp(_p, _v) mm_atomic_and_imp((_p), (_v))
90*d14abf15SRobert Mustacchi 
91*d14abf15SRobert Mustacchi #define mm_atomic_or_imp(_p, _v)      InterlockedOr((long*)(_p), (long)(_v) )
92*d14abf15SRobert Mustacchi #define mm_atomic_long_or_imp(_p, _v) mm_atomic_or_imp((_p), (_v))
93*d14abf15SRobert Mustacchi 
94*d14abf15SRobert Mustacchi #define mm_atomic_read_imp(_p) \
95*d14abf15SRobert Mustacchi     InterlockedExchangeAdd((long*)(_p), (long)(0))
96*d14abf15SRobert Mustacchi #define mm_atomic_long_read_imp(_p) mm_atomic_read_imp((_p))
97*d14abf15SRobert Mustacchi 
98*d14abf15SRobert Mustacchi #define mm_atomic_cmpxchg_imp(_p, _old_val, _new_val) \
99*d14abf15SRobert Mustacchi     InterlockedCompareExchange(_p, (long)_new_val, (long)_old_val )
100*d14abf15SRobert Mustacchi 
101*d14abf15SRobert Mustacchi 
102*d14abf15SRobert Mustacchi #define MM_WRITE_DOORBELL_IMP(PDEV, BAR, CID, VAL) \
103*d14abf15SRobert Mustacchi     if (IS_PFDEV(pdev)) \
104*d14abf15SRobert Mustacchi     { \
105*d14abf15SRobert Mustacchi         LM_BAR_WR32_ADDRESS((PDEV), ((u8_t *)PFDEV(PDEV)->context_info->array[VF_TO_PF_CID((PDEV), (CID))].cid_resc.mapped_cid_bar_addr + (DPM_TRIGER_TYPE)), (VAL)); \
106*d14abf15SRobert Mustacchi     } \
107*d14abf15SRobert Mustacchi     else \
108*d14abf15SRobert Mustacchi     { \
109*d14abf15SRobert Mustacchi         LM_BAR_WR32_ADDRESS((PDEV), ((u8_t *)(PDEV)->context_info->array[VF_TO_PF_CID((PDEV), (CID))].cid_resc.mapped_cid_bar_addr), (VAL)); \
110*d14abf15SRobert Mustacchi     }
111*d14abf15SRobert Mustacchi 
112*d14abf15SRobert Mustacchi #define MM_REGISTER_LPME_IMP(_pdev, _func, _b_fw_access, _b_queue_for_fw) \
113*d14abf15SRobert Mustacchi     mm_register_lpme((_pdev), (_func), (_b_fw_access), (_b_queue_for_fw))
114*d14abf15SRobert Mustacchi 
115*d14abf15SRobert Mustacchi 
116*d14abf15SRobert Mustacchi void MM_ACQUIRE_SPQ_LOCK_IMP(struct _lm_device_t *_pdev);
117*d14abf15SRobert Mustacchi void MM_RELEASE_SPQ_LOCK_IMP(struct _lm_device_t *_pdev);
118*d14abf15SRobert Mustacchi void MM_ACQUIRE_SPQ_LOCK_DPC_IMP(struct _lm_device_t *_pdev);
119*d14abf15SRobert Mustacchi void MM_RELEASE_SPQ_LOCK_DPC_IMP(struct _lm_device_t *_pdev);
120*d14abf15SRobert Mustacchi 
121*d14abf15SRobert Mustacchi void MM_ACQUIRE_CID_LOCK_IMP(struct _lm_device_t *_pdev);
122*d14abf15SRobert Mustacchi void MM_RELEASE_CID_LOCK_IMP(struct _lm_device_t *_pdev);
123*d14abf15SRobert Mustacchi 
124*d14abf15SRobert Mustacchi void MM_ACQUIRE_REQUEST_LOCK_IMP(struct _lm_device_t *_pdev);
125*d14abf15SRobert Mustacchi void MM_RELEASE_REQUEST_LOCK_IMP(struct _lm_device_t *_pdev);
126*d14abf15SRobert Mustacchi 
127*d14abf15SRobert Mustacchi #define MM_ACQUIRE_REQUEST_LOCK_DPC_IMP(pdev)
128*d14abf15SRobert Mustacchi #define MM_RELEASE_REQUEST_LOCK_DPC_IMP(pdev)
129*d14abf15SRobert Mustacchi 
130*d14abf15SRobert Mustacchi void MM_ACQUIRE_PHY_LOCK_IMP(struct _lm_device_t * pDev);
131*d14abf15SRobert Mustacchi void MM_RELEASE_PHY_LOCK_IMP(struct _lm_device_t * pDev);
132*d14abf15SRobert Mustacchi void MM_ACQUIRE_PHY_LOCK_DPC_IMP(struct _lm_device_t * pDev);
133*d14abf15SRobert Mustacchi void MM_RELEASE_PHY_LOCK_DPC_IMP(struct _lm_device_t * pDev);
134*d14abf15SRobert Mustacchi 
135*d14abf15SRobert Mustacchi void MM_ACQUIRE_ISLES_CONTROL_LOCK_IMP(struct _lm_device_t *_pdev);
136*d14abf15SRobert Mustacchi void MM_RELEASE_ISLES_CONTROL_LOCK_IMP(struct _lm_device_t *_pdev);
137*d14abf15SRobert Mustacchi void MM_ACQUIRE_ISLES_CONTROL_LOCK_DPC_IMP(struct _lm_device_t *_pdev);
138*d14abf15SRobert Mustacchi void MM_RELEASE_ISLES_CONTROL_LOCK_DPC_IMP(struct _lm_device_t *_pdev);
139*d14abf15SRobert Mustacchi 
140*d14abf15SRobert Mustacchi #define MM_ACQUIRE_RAMROD_COMP_LOCK_IMP(_pdev)
141*d14abf15SRobert Mustacchi #define MM_RELEASE_RAMROD_COMP_LOCK_IMP(_pdev)
142*d14abf15SRobert Mustacchi 
143*d14abf15SRobert Mustacchi void MM_ACQUIRE_MCP_LOCK_IMP(struct _lm_device_t *_pdev);
144*d14abf15SRobert Mustacchi void MM_RELEASE_MCP_LOCK_IMP(struct _lm_device_t *_pdev);
145*d14abf15SRobert Mustacchi 
146*d14abf15SRobert Mustacchi void MM_ACQUIRE_ISLES_CONTROL_LOCK_IMP(struct _lm_device_t *_pdev);
147*d14abf15SRobert Mustacchi void MM_RELEASE_ISLES_CONTROL_LOCK_IMP(struct _lm_device_t *_pdev);
148*d14abf15SRobert Mustacchi void MM_ACQUIRE_ISLES_CONTROL_LOCK_DPC_IMP(struct _lm_device_t *_pdev);
149*d14abf15SRobert Mustacchi void MM_RELEASE_ISLES_CONTROL_LOCK_DPC_IMP(struct _lm_device_t *_pdev);
150*d14abf15SRobert Mustacchi 
151*d14abf15SRobert Mustacchi void MM_ACQUIRE_IND_REG_LOCK_IMP(struct _lm_device_t *_pdev);
152*d14abf15SRobert Mustacchi void MM_RELEASE_IND_REG_LOCK_IMP(struct _lm_device_t *_pdev);
153*d14abf15SRobert Mustacchi 
154*d14abf15SRobert Mustacchi void MM_ACQUIRE_LOADER_LOCK_IMP();
155*d14abf15SRobert Mustacchi void MM_RELEASE_LOADER_LOCK_IMP();
156*d14abf15SRobert Mustacchi 
157*d14abf15SRobert Mustacchi void MM_ACQUIRE_SP_REQ_MGR_LOCK_IMP(struct _lm_device_t *_pdev);
158*d14abf15SRobert Mustacchi void MM_RELEASE_SP_REQ_MGR_LOCK_IMP(struct _lm_device_t *_pdev);
159*d14abf15SRobert Mustacchi 
160*d14abf15SRobert Mustacchi void MM_ACQUIRE_SB_LOCK_IMP(struct _lm_device_t *_pdev, u8_t _sb_idx);
161*d14abf15SRobert Mustacchi void MM_RELEASE_SB_LOCK_IMP(struct _lm_device_t *_pdev, u8_t _sb_idx);
162*d14abf15SRobert Mustacchi 
163*d14abf15SRobert Mustacchi void MM_ACQUIRE_ETH_CON_LOCK_IMP(struct _lm_device_t *_pdev);
164*d14abf15SRobert Mustacchi void MM_RELEASE_ETH_CON_LOCK_IMP(struct _lm_device_t *_pdev);
165*d14abf15SRobert Mustacchi 
166*d14abf15SRobert Mustacchi #ifdef VF_INVOLVED
167*d14abf15SRobert Mustacchi 
168*d14abf15SRobert Mustacchi void MM_ACQUIRE_PF_LOCK_IMP(struct _lm_device_t *_pdev);
169*d14abf15SRobert Mustacchi void MM_RELEASE_PF_LOCK_IMP(struct _lm_device_t *_pdev);
170*d14abf15SRobert Mustacchi 
171*d14abf15SRobert Mustacchi void MM_ACQUIRE_VFS_STATS_LOCK_IMP(struct _lm_device_t *_pdev);
172*d14abf15SRobert Mustacchi void MM_RELEASE_VFS_STATS_LOCK_IMP(struct _lm_device_t *_pdev);
173*d14abf15SRobert Mustacchi void MM_ACQUIRE_VFS_STATS_LOCK_DPC_IMP(struct _lm_device_t *_pdev);
174*d14abf15SRobert Mustacchi void MM_RELEASE_VFS_STATS_LOCK_DPC_IMP(struct _lm_device_t *_pdev);
175*d14abf15SRobert Mustacchi 
176*d14abf15SRobert Mustacchi void
177*d14abf15SRobert Mustacchi mm_sriov_invalidate_vf_block(
178*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev,
179*d14abf15SRobert Mustacchi     u16_t       vf_id,
180*d14abf15SRobert Mustacchi     u64_t       invalidate_bock);
181*d14abf15SRobert Mustacchi 
182*d14abf15SRobert Mustacchi #endif /* VF_INVOLVED */
183*d14abf15SRobert Mustacchi 
184*d14abf15SRobert Mustacchi 
185*d14abf15SRobert Mustacchi lm_status_t mm_er_initiate_recovery_imp(struct _lm_device_t * pdev);
186*d14abf15SRobert Mustacchi 
187*d14abf15SRobert Mustacchi typedef void lm_generic_dpc_func(struct _lm_device_t *pdev);
188*d14abf15SRobert Mustacchi lm_status_t mm_register_dpc_imp(struct _lm_device_t *_pdev,
189*d14abf15SRobert Mustacchi                                 lm_generic_dpc_func *func);
190*d14abf15SRobert Mustacchi 
191*d14abf15SRobert Mustacchi void mm_empty_ramrod_received_imp(struct _lm_device_t *_pdev,
192*d14abf15SRobert Mustacchi                                   const u32_t empty_data);
193*d14abf15SRobert Mustacchi 
194*d14abf15SRobert Mustacchi void mm_dbus_start_if_enabled_imp(struct _lm_device_t *_pdev);
195*d14abf15SRobert Mustacchi void mm_dbus_stop_if_started_imp(struct _lm_device_t *_pdev);
196*d14abf15SRobert Mustacchi 
197*d14abf15SRobert Mustacchi 
198*d14abf15SRobert Mustacchi #ifdef BIG_ENDIAN
199*d14abf15SRobert Mustacchi // LE
200*d14abf15SRobert Mustacchi #define mm_le16_to_cpu_imp(val) SWAP_BYTES16(val)
201*d14abf15SRobert Mustacchi #define mm_cpu_to_le16_imp(val) SWAP_BYTES16(val)
202*d14abf15SRobert Mustacchi #define mm_le32_to_cpu_imp(val) SWAP_BYTES32(val)
203*d14abf15SRobert Mustacchi #define mm_cpu_to_le32_imp(val) SWAP_BYTES32(val)
204*d14abf15SRobert Mustacchi // BE
205*d14abf15SRobert Mustacchi #define mm_be32_to_cpu_imp(val) (val)
206*d14abf15SRobert Mustacchi #define mm_cpu_to_be32_imp(val) (val)
207*d14abf15SRobert Mustacchi #define mm_be16_to_cpu_imp(val) (val)
208*d14abf15SRobert Mustacchi #define mm_cpu_to_be16_imp(val) (val)
209*d14abf15SRobert Mustacchi #else /* LITTLE_ENDIAN */
210*d14abf15SRobert Mustacchi // LE
211*d14abf15SRobert Mustacchi #define mm_le16_to_cpu_imp(val) (val)
212*d14abf15SRobert Mustacchi #define mm_cpu_to_le16_imp(val) (val)
213*d14abf15SRobert Mustacchi #define mm_le32_to_cpu_imp(val) (val)
214*d14abf15SRobert Mustacchi #define mm_cpu_to_le32_imp(val) (val)
215*d14abf15SRobert Mustacchi // BE
216*d14abf15SRobert Mustacchi #define mm_be32_to_cpu_imp(val) SWAP_BYTES32(val)
217*d14abf15SRobert Mustacchi #define mm_cpu_to_be32_imp(val) SWAP_BYTES32(val)
218*d14abf15SRobert Mustacchi #define mm_be16_to_cpu_imp(val) SWAP_BYTES16(val)
219*d14abf15SRobert Mustacchi #define mm_cpu_to_be16_imp(val) SWAP_BYTES16(val)
220*d14abf15SRobert Mustacchi #endif /* ifdef BIG_ENDIAN */
221*d14abf15SRobert Mustacchi 
222*d14abf15SRobert Mustacchi u32_t mm_get_cpu_count();
223*d14abf15SRobert Mustacchi 
224*d14abf15SRobert Mustacchi 
225*d14abf15SRobert Mustacchi #define RESOURCE_TRACE_FLAG_COUNTERS 0x01
226*d14abf15SRobert Mustacchi #define RESOURCE_TRACE_FLAG_DESC     0x02
227*d14abf15SRobert Mustacchi #define RESOURCE_TRACE_FLAG_MDL      0x04 // Currently - not working well!!!
228*d14abf15SRobert Mustacchi 
229*d14abf15SRobert Mustacchi #define MEM_TRACE_FLAG_HIGH          (RESOURCE_TRACE_FLAG_COUNTERS | RESOURCE_TRACE_FLAG_DESC)
230*d14abf15SRobert Mustacchi #define MEM_TRACE_FLAG_DEFAULT       RESOURCE_TRACE_FLAG_COUNTERS
231*d14abf15SRobert Mustacchi 
232*d14abf15SRobert Mustacchi #define RESOURCE_TRACE_INC(_pdev, _cli_idx, _type, _field)             \
233*d14abf15SRobert Mustacchi {                                                                      \
234*d14abf15SRobert Mustacchi     DbgBreakIf((_cli_idx) >= MAX_DO_TYPE_CNT);                         \
235*d14abf15SRobert Mustacchi     DbgBreakIf((_type) >= RESOURCE_TYPE_MAX);                          \
236*d14abf15SRobert Mustacchi     InterlockedIncrement((long*)&_pdev->resource_list.                 \
237*d14abf15SRobert Mustacchi                                    type_counters_arr[_cli_idx][_type]. \
238*d14abf15SRobert Mustacchi                                      _field);                          \
239*d14abf15SRobert Mustacchi }
240*d14abf15SRobert Mustacchi 
241*d14abf15SRobert Mustacchi #define RESOURCE_TRACE_DEC(_pdev, _cli_idx, _type, _field)             \
242*d14abf15SRobert Mustacchi {                                                                      \
243*d14abf15SRobert Mustacchi     DbgBreakIf((_cli_idx) >= MAX_DO_TYPE_CNT);                         \
244*d14abf15SRobert Mustacchi     DbgBreakIf((_type) >= RESOURCE_TYPE_MAX);                          \
245*d14abf15SRobert Mustacchi     InterlockedDecrement((long*)&_pdev->resource_list.                 \
246*d14abf15SRobert Mustacchi                                    type_counters_arr[_cli_idx][_type]. \
247*d14abf15SRobert Mustacchi                                      _field);                          \
248*d14abf15SRobert Mustacchi }
249*d14abf15SRobert Mustacchi 
250*d14abf15SRobert Mustacchi #define RESOURCE_TRACE_ADD(_pdev, _cli_idx, _type, _field, _size)         \
251*d14abf15SRobert Mustacchi {                                                                         \
252*d14abf15SRobert Mustacchi     DbgBreakIf((_cli_idx) >= MAX_DO_TYPE_CNT);                            \
253*d14abf15SRobert Mustacchi     DbgBreakIf((_type) >= RESOURCE_TYPE_MAX);                             \
254*d14abf15SRobert Mustacchi     InterlockedExchangeAdd((long*)&(_pdev->resource_list.                 \
255*d14abf15SRobert Mustacchi                                       type_counters_arr[_cli_idx][_type]. \
256*d14abf15SRobert Mustacchi                                         _field), (long)(_size));          \
257*d14abf15SRobert Mustacchi }
258*d14abf15SRobert Mustacchi 
259*d14abf15SRobert Mustacchi #define RESOURCE_TRACE_SUB(_pdev, _cli_idx, _type, _field, _size) \
260*d14abf15SRobert Mustacchi     RESOURCE_TRACE_ADD( _pdev, _cli_idx, _type, _field, 0L-(long)_size)
261*d14abf15SRobert Mustacchi 
262*d14abf15SRobert Mustacchi #define RESOURCE_TRACE_UPDATE_PEAK(_pdev, _cli_idx, _type)                  \
263*d14abf15SRobert Mustacchi {                                                                           \
264*d14abf15SRobert Mustacchi     DbgBreakIf((_cli_idx) >= MAX_DO_TYPE_CNT);                              \
265*d14abf15SRobert Mustacchi     DbgBreakIf((_type) >= RESOURCE_TYPE_MAX);                               \
266*d14abf15SRobert Mustacchi     if (_pdev->resource_list.type_counters_arr[_cli_idx][_type].size >      \
267*d14abf15SRobert Mustacchi         _pdev->resource_list.type_counters_arr[_cli_idx][_type].size_peak)  \
268*d14abf15SRobert Mustacchi     {                                                                       \
269*d14abf15SRobert Mustacchi         _pdev->resource_list.type_counters_arr[_cli_idx][_type].size_peak = \
270*d14abf15SRobert Mustacchi             _pdev->resource_list.type_counters_arr[_cli_idx][_type].size;   \
271*d14abf15SRobert Mustacchi     }                                                                       \
272*d14abf15SRobert Mustacchi     if (_pdev->resource_list.type_counters_arr[_cli_idx][_type].cnt >       \
273*d14abf15SRobert Mustacchi         _pdev->resource_list.type_counters_arr[_cli_idx][_type].cnt_peak)   \
274*d14abf15SRobert Mustacchi     {                                                                       \
275*d14abf15SRobert Mustacchi         _pdev->resource_list.type_counters_arr[_cli_idx][_type].cnt_peak =  \
276*d14abf15SRobert Mustacchi             _pdev->resource_list.type_counters_arr[_cli_idx][_type].cnt;    \
277*d14abf15SRobert Mustacchi     }                                                                       \
278*d14abf15SRobert Mustacchi }
279*d14abf15SRobert Mustacchi 
280*d14abf15SRobert Mustacchi 
281*d14abf15SRobert Mustacchi /* this is _NTDDK_ only... */
282*d14abf15SRobert Mustacchi u32_t mm_get_wol_flags(struct _lm_device_t* pdev);
283*d14abf15SRobert Mustacchi 
284*d14abf15SRobert Mustacchi /* this is _NTDDK_ only... */
285*d14abf15SRobert Mustacchi u32_t mm_get_vmq_cnt(struct _lm_device_t* pdev);
286*d14abf15SRobert Mustacchi 
287*d14abf15SRobert Mustacchi /* this is _NTDDK_ only... */
288*d14abf15SRobert Mustacchi u32_t mm_get_feature_flags(struct _lm_device_t* pdev);
289*d14abf15SRobert Mustacchi 
290*d14abf15SRobert Mustacchi u32_t mm_get_cap_offset(struct _lm_device_t *pdev, u32_t cap_id);
291*d14abf15SRobert Mustacchi 
292*d14abf15SRobert Mustacchi 
293*d14abf15SRobert Mustacchi void mm_dcb_indicate_event(
294*d14abf15SRobert Mustacchi     IN struct _lm_device_t  *pdev,
295*d14abf15SRobert Mustacchi     IN lm_event_code_t      event,
296*d14abf15SRobert Mustacchi     IN u8_t                 *event_buf,
297*d14abf15SRobert Mustacchi     IN u32_t                event_buf_size
298*d14abf15SRobert Mustacchi     );
299*d14abf15SRobert Mustacchi #define MM_DCB_INDICATE_EVENT(_pdev,_event,_event_buf, _event_buf_size)     mm_dcb_indicate_event(_pdev,_event,_event_buf, _event_buf_size)
300*d14abf15SRobert Mustacchi 
301*d14abf15SRobert Mustacchi u32_t
302*d14abf15SRobert Mustacchi mm_dcb_mp_l2_is_enable(struct _lm_device_t	*pdev);
303*d14abf15SRobert Mustacchi #define MM_DCB_MP_L2_IS_ENABLE(_pdev)  (mm_dcb_mp_l2_is_enable(pdev))
304*d14abf15SRobert Mustacchi 
305