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 #ifndef _MM_H
36*d14abf15SRobert Mustacchi #define _MM_H
37*d14abf15SRobert Mustacchi 
38*d14abf15SRobert Mustacchi #include <sys/va_list.h>
39*d14abf15SRobert Mustacchi 
40*d14abf15SRobert Mustacchi /*
41*d14abf15SRobert Mustacchi    This define is relevant for MS compilers.
42*d14abf15SRobert Mustacchi    So the main purpose here is to comply with older MS compilers
43*d14abf15SRobert Mustacchi    as well as non-MS compilers
44*d14abf15SRobert Mustacchi */
45*d14abf15SRobert Mustacchi #ifndef FORCEINLINE
46*d14abf15SRobert Mustacchi #if defined(_MSC_VER) && (_MSC_VER >= 1200) /* Windows */
47*d14abf15SRobert Mustacchi #define FORCEINLINE __forceinline
48*d14abf15SRobert Mustacchi #else
49*d14abf15SRobert Mustacchi #define FORCEINLINE __inline
50*d14abf15SRobert Mustacchi #endif /* _MSC_VER */
51*d14abf15SRobert Mustacchi #endif /* !FORCEINLINE */
52*d14abf15SRobert Mustacchi 
53*d14abf15SRobert Mustacchi /* common lpme callback used by multiple platforms */
54*d14abf15SRobert Mustacchi typedef void lm_generic_workitem_function(struct _lm_device_t *pdev);
55*d14abf15SRobert Mustacchi lm_status_t mm_register_lpme(struct _lm_device_t *_pdev,
56*d14abf15SRobert Mustacchi                              lm_generic_workitem_function *func,
57*d14abf15SRobert Mustacchi                              const u8_t b_fw_access,
58*d14abf15SRobert Mustacchi                              const u8_t b_queue_for_fw);
59*d14abf15SRobert Mustacchi 
60*d14abf15SRobert Mustacchi /* mm_i2c for special elink query */
61*d14abf15SRobert Mustacchi lm_status_t mm_i2c_update(struct _lm_device_t *pdev);
62*d14abf15SRobert Mustacchi 
63*d14abf15SRobert Mustacchi /* query system time - for time stamps */
64*d14abf15SRobert Mustacchi u64_t       mm_query_system_time(void);
65*d14abf15SRobert Mustacchi 
66*d14abf15SRobert Mustacchi #if defined(UEFI)
67*d14abf15SRobert Mustacchi #include "mm_uefi.h"
68*d14abf15SRobert Mustacchi #elif defined(DOS)
69*d14abf15SRobert Mustacchi #include "mm_dos.h"
70*d14abf15SRobert Mustacchi #elif defined(__LINUX) || defined (USER_LINUX)
71*d14abf15SRobert Mustacchi #include "mm_linux.h"
72*d14abf15SRobert Mustacchi #elif defined(__SunOS)
73*d14abf15SRobert Mustacchi #include "mm_solaris.h"
74*d14abf15SRobert Mustacchi #elif defined(__USER_MODE_DEBUG)
75*d14abf15SRobert Mustacchi #include "mm_user_mode_debug.h"
76*d14abf15SRobert Mustacchi #elif defined(_VBD_) || defined(_VBD_CMD_)
77*d14abf15SRobert Mustacchi #include "mm_vbd.h"
78*d14abf15SRobert Mustacchi #elif defined (NDISMONO) // VBD
79*d14abf15SRobert Mustacchi #include "mm_ndismono.h"
80*d14abf15SRobert Mustacchi #endif
81*d14abf15SRobert Mustacchi 
82*d14abf15SRobert Mustacchi unsigned int mm_crc32(unsigned char *address, unsigned int size, unsigned int crc);
83*d14abf15SRobert Mustacchi 
84*d14abf15SRobert Mustacchi #define mm_read_barrier()  mm_read_barrier_imp()
85*d14abf15SRobert Mustacchi #define mm_write_barrier() mm_write_barrier_imp()
86*d14abf15SRobert Mustacchi #define mm_barrier()       mm_barrier_imp()
87*d14abf15SRobert Mustacchi 
88*d14abf15SRobert Mustacchi #define mm_atomic_set(/* u32_t* */_p, /* u32_t */_v) mm_atomic_set_imp(_p, _v)
89*d14abf15SRobert Mustacchi 
90*d14abf15SRobert Mustacchi #define mm_atomic_dec(/* u32_t* */_p) mm_atomic_dec_imp(_p)
91*d14abf15SRobert Mustacchi #define mm_atomic_inc(/* u32_t* */_p) mm_atomic_inc_imp(_p)
92*d14abf15SRobert Mustacchi 
93*d14abf15SRobert Mustacchi #define mm_atomic_add(/* u32_t* */_p, /* u32_t */_v) mm_atomic_add_imp(_p, _v)
94*d14abf15SRobert Mustacchi 
95*d14abf15SRobert Mustacchi #define mm_atomic_sub(/* u32_t* */_p, /* u32_t */_v) mm_atomic_sub_imp(_p, _v)
96*d14abf15SRobert Mustacchi 
97*d14abf15SRobert Mustacchi #define mm_atomic_and(/* u32_t* */_p, /* u32_t */_v) mm_atomic_and_imp(_p, _v)
98*d14abf15SRobert Mustacchi #define mm_atomic_long_and(/* unsigned long* */_p, /* unsigned long */_v) \
99*d14abf15SRobert Mustacchi     mm_atomic_long_and_imp(_p, _v)
100*d14abf15SRobert Mustacchi 
101*d14abf15SRobert Mustacchi #define mm_atomic_or(/* u32_t* */_p, /* u32_t */_v)  mm_atomic_or_imp(_p, _v)
102*d14abf15SRobert Mustacchi #define mm_atomic_long_or(/* unsigned long* */_p, /* unsigned long */_v) \
103*d14abf15SRobert Mustacchi     mm_atomic_long_or_imp(_p, _v)
104*d14abf15SRobert Mustacchi 
105*d14abf15SRobert Mustacchi #define mm_atomic_read(/* u32_t* */_p) mm_atomic_read_imp(_p)
106*d14abf15SRobert Mustacchi #define mm_atomic_long_read(/* unsigned long* */_p)  \
107*d14abf15SRobert Mustacchi     mm_atomic_long_read_imp(_p)
108*d14abf15SRobert Mustacchi 
109*d14abf15SRobert Mustacchi #define mm_atomic_cmpxchg(/* u32_t* */_p, /* u32_t */_old_val, /* u32_t */_new_val) \
110*d14abf15SRobert Mustacchi     mm_atomic_cmpxchg_imp(_p, _old_val, _new_val)
111*d14abf15SRobert Mustacchi 
112*d14abf15SRobert Mustacchi #define MM_WRITE_DOORBELL(/* struct _lm_device_t* */PDEV, /* u32_t */BAR, /* u32_t */CID, /* u32_t */VAL) \
113*d14abf15SRobert Mustacchi     MM_WRITE_DOORBELL_IMP(PDEV, BAR, CID, VAL)
114*d14abf15SRobert Mustacchi 
115*d14abf15SRobert Mustacchi #define MM_REGISTER_LPME(/* struct _lm_device_t* */_pdev, /* lm_generic_workitem_function */_func, /* u8_t */_b_fw_access, /* u8_t */_b_queue_for_fw) \
116*d14abf15SRobert Mustacchi     MM_REGISTER_LPME_IMP(_pdev, _func, _b_fw_access, _b_queue_for_fw)
117*d14abf15SRobert Mustacchi 
118*d14abf15SRobert Mustacchi #define MM_ACQUIRE_SPQ_LOCK(/* struct _lm_device_t* */pdev)     MM_ACQUIRE_SPQ_LOCK_IMP(pdev)
119*d14abf15SRobert Mustacchi #define MM_RELEASE_SPQ_LOCK(/* struct _lm_device_t* */pdev)     MM_RELEASE_SPQ_LOCK_IMP(pdev)
120*d14abf15SRobert Mustacchi #define MM_ACQUIRE_SPQ_LOCK_DPC(/* struct _lm_device_t* */pdev) MM_ACQUIRE_SPQ_LOCK_DPC(pdev)
121*d14abf15SRobert Mustacchi #define MM_RELEASE_SPQ_LOCK_DPC(/* struct _lm_device_t* */pdev) MM_RELEASE_SPQ_LOCK_DPC(pdev)
122*d14abf15SRobert Mustacchi 
123*d14abf15SRobert Mustacchi #define MM_ACQUIRE_CID_LOCK(/* struct _lm_device_t* */pdev) MM_ACQUIRE_CID_LOCK_IMP(pdev)
124*d14abf15SRobert Mustacchi #define MM_RELEASE_CID_LOCK(/* struct _lm_device_t* */pdev) MM_RELEASE_CID_LOCK_IMP(pdev)
125*d14abf15SRobert Mustacchi 
126*d14abf15SRobert Mustacchi #define MM_ACQUIRE_REQUEST_LOCK(/* struct _lm_device_t* */pdev) MM_ACQUIRE_REQUEST_LOCK_IMP(pdev)
127*d14abf15SRobert Mustacchi #define MM_RELEASE_REQUEST_LOCK(/* struct _lm_device_t* */pdev) MM_RELEASE_REQUEST_LOCK_IMP(pdev)
128*d14abf15SRobert Mustacchi 
129*d14abf15SRobert Mustacchi #define MM_ACQUIRE_REQUEST_LOCK_DPC(/* struct _lm_device_t* */pdev) MM_ACQUIRE_REQUEST_LOCK_DPC_IMP(pdev)
130*d14abf15SRobert Mustacchi #define MM_RELEASE_REQUEST_LOCK_DPC(/* struct _lm_device_t* */pdev) MM_RELEASE_REQUEST_LOCK_DPC_IMP(pdev)
131*d14abf15SRobert Mustacchi 
132*d14abf15SRobert Mustacchi #define MM_ACQUIRE_PHY_LOCK(/* struct _lm_device_t* */pdev)     MM_ACQUIRE_PHY_LOCK_IMP(pdev)
133*d14abf15SRobert Mustacchi #define MM_RELEASE_PHY_LOCK(/* struct _lm_device_t* */pdev)     MM_RELEASE_PHY_LOCK_IMP(pdev)
134*d14abf15SRobert Mustacchi #define MM_ACQUIRE_PHY_LOCK_DPC(/* struct _lm_device_t* */pdev) MM_ACQUIRE_PHY_LOCK_DPC_IMP(pdev)
135*d14abf15SRobert Mustacchi #define MM_RELEASE_PHY_LOCK_DPC(/* struct _lm_device_t* */pdev) MM_RELEASE_PHY_LOCK_DPC_IMP(pdev)
136*d14abf15SRobert Mustacchi 
137*d14abf15SRobert Mustacchi #define MM_ACQUIRE_MCP_LOCK(/* struct _lm_device_t* */pdev) MM_ACQUIRE_MCP_LOCK_IMP(pdev)
138*d14abf15SRobert Mustacchi #define MM_RELEASE_MCP_LOCK(/* struct _lm_device_t* */pdev) MM_RELEASE_MCP_LOCK_IMP(pdev)
139*d14abf15SRobert Mustacchi 
140*d14abf15SRobert Mustacchi #define MM_ACQUIRE_ISLES_CONTROL_LOCK(/* struct _lm_device_t* */pdev)     MM_ACQUIRE_ISLES_CONTROL_LOCK_IMP(pdev)
141*d14abf15SRobert Mustacchi #define MM_RELEASE_ISLES_CONTROL_LOCK(/* struct _lm_device_t* */pdev)     MM_RELEASE_ISLES_CONTROL_LOCK_IMP(pdev)
142*d14abf15SRobert Mustacchi #define MM_ACQUIRE_ISLES_CONTROL_LOCK_DPC(/* struct _lm_device_t* */pdev) MM_ACQUIRE_ISLES_CONTROL_LOCK_DPC_IMP(pdev)
143*d14abf15SRobert Mustacchi #define MM_RELEASE_ISLES_CONTROL_LOCK_DPC(/* struct _lm_device_t* */pdev) MM_RELEASE_ISLES_CONTROL_LOCK_DPC_IMP(pdev)
144*d14abf15SRobert Mustacchi 
145*d14abf15SRobert Mustacchi #define MM_ACQUIRE_RAMROD_COMP_LOCK(/* struct _lm_device_t* */pdev) MM_ACQUIRE_RAMROD_COMP_LOCK_IMP(pdev)
146*d14abf15SRobert Mustacchi #define MM_RELEASE_RAMROD_COMP_LOCK(/* struct _lm_device_t* */pdev) MM_RELEASE_RAMROD_COMP_LOCK_IMP(pdev)
147*d14abf15SRobert Mustacchi 
148*d14abf15SRobert Mustacchi #define MM_ACQUIRE_IND_REG_LOCK(/* struct _lm_device_t* */pdev) MM_ACQUIRE_IND_REG_LOCK_IMP(pdev)
149*d14abf15SRobert Mustacchi #define MM_RELEASE_IND_REG_LOCK(/* struct _lm_device_t* */pdev) MM_RELEASE_IND_REG_LOCK_IMP(pdev)
150*d14abf15SRobert Mustacchi 
151*d14abf15SRobert Mustacchi #define MM_ACQUIRE_LOADER_LOCK() MM_ACQUIRE_LOADER_LOCK_IMP()
152*d14abf15SRobert Mustacchi #define MM_RELEASE_LOADER_LOCK() MM_RELEASE_LOADER_LOCK_IMP()
153*d14abf15SRobert Mustacchi 
154*d14abf15SRobert Mustacchi #define MM_ACQUIRE_SP_REQ_MGR_LOCK(/* struct _lm_device_t* */pdev) MM_ACQUIRE_SP_REQ_MGR_LOCK_IMP(pdev)
155*d14abf15SRobert Mustacchi #define MM_RELEASE_SP_REQ_MGR_LOCK(/* struct _lm_device_t* */pdev) MM_RELEASE_SP_REQ_MGR_LOCK_IMP(pdev)
156*d14abf15SRobert Mustacchi 
157*d14abf15SRobert Mustacchi #define MM_ACQUIRE_SB_LOCK(/* struct _lm_device_t* */pdev, /* u8_t */sb_idx) MM_ACQUIRE_SB_LOCK_IMP(pdev, sb_idx)
158*d14abf15SRobert Mustacchi #define MM_RELEASE_SB_LOCK(/* struct _lm_device_t* */pdev, /* u8_t */sb_idx) MM_RELEASE_SB_LOCK_IMP(pdev, sb_idx)
159*d14abf15SRobert Mustacchi 
160*d14abf15SRobert Mustacchi void mm_init_lock(struct _lm_device_t *_pdev, mm_spin_lock_t *spinlock);
161*d14abf15SRobert Mustacchi 
162*d14abf15SRobert Mustacchi #ifdef _VBD_
163*d14abf15SRobert Mustacchi #if defined(NTDDI_WIN8)
164*d14abf15SRobert Mustacchi __drv_maxIRQL(DISPATCH_LEVEL)
165*d14abf15SRobert Mustacchi __drv_at(lock->irql, __drv_savesIRQL)
166*d14abf15SRobert Mustacchi __drv_setsIRQL(DISPATCH_LEVEL)
167*d14abf15SRobert Mustacchi #endif
168*d14abf15SRobert Mustacchi #endif
169*d14abf15SRobert Mustacchi lm_status_t mm_acquire_lock( mm_spin_lock_t *spinlock);
170*d14abf15SRobert Mustacchi 
171*d14abf15SRobert Mustacchi #ifdef _VBD_
172*d14abf15SRobert Mustacchi #if defined(NTDDI_WIN8)
173*d14abf15SRobert Mustacchi _IRQL_requires_(DISPATCH_LEVEL)
174*d14abf15SRobert Mustacchi __drv_at(lock->irql, __drv_restoresIRQL )
175*d14abf15SRobert Mustacchi #endif
176*d14abf15SRobert Mustacchi #endif
177*d14abf15SRobert Mustacchi lm_status_t mm_release_lock( mm_spin_lock_t *spinlock);
178*d14abf15SRobert Mustacchi 
179*d14abf15SRobert Mustacchi #define MM_ACQUIRE_ETH_CON_LOCK(/* struct _lm_device_t* */pdev) MM_ACQUIRE_ETH_CON_LOCK_IMP(pdev)
180*d14abf15SRobert Mustacchi #define MM_RELEASE_ETH_CON_LOCK(/* struct _lm_device_t* */pdev) MM_RELEASE_ETH_CON_LOCK_IMP(pdev)
181*d14abf15SRobert Mustacchi 
182*d14abf15SRobert Mustacchi #ifdef VF_INVOLVED
183*d14abf15SRobert Mustacchi 
184*d14abf15SRobert Mustacchi #define MM_ACQUIRE_PF_LOCK(/* struct _lm_device_t* */pdev) MM_ACQUIRE_PF_LOCK_IMP(pdev)
185*d14abf15SRobert Mustacchi #define MM_RELEASE_PF_LOCK(/* struct _lm_device_t* */pdev) MM_RELEASE_PF_LOCK_IMP(pdev)
186*d14abf15SRobert Mustacchi 
187*d14abf15SRobert Mustacchi #define MM_ACQUIRE_VFS_STATS_LOCK(/* struct _lm_device_t* */pdev)     MM_ACQUIRE_VFS_STATS_LOCK_IMP(pdev)
188*d14abf15SRobert Mustacchi #define MM_RELEASE_VFS_STATS_LOCK(/* struct _lm_device_t* */pdev)     MM_RELEASE_VFS_STATS_LOCK_IMP(pdev)
189*d14abf15SRobert Mustacchi #define MM_ACQUIRE_VFS_STATS_LOCK_DPC(/* struct _lm_device_t* */pdev) MM_ACQUIRE_VFS_STATS_LOCK_DPC_IMP(pdev)
190*d14abf15SRobert Mustacchi #define MM_RELEASE_VFS_STATS_LOCK_DPC(/* struct _lm_device_t* */pdev) MM_RELEASE_VFS_STATS_LOCK_DPC_IMP(pdev)
191*d14abf15SRobert Mustacchi 
192*d14abf15SRobert Mustacchi #endif /* VF_INVOLVED */
193*d14abf15SRobert Mustacchi 
194*d14abf15SRobert Mustacchi 
195*d14abf15SRobert Mustacchi #define mm_er_initiate_recovery(/* struct _lm_device_t* */pdev) \
196*d14abf15SRobert Mustacchi     mm_er_initiate_recovery_imp(pdev)
197*d14abf15SRobert Mustacchi 
198*d14abf15SRobert Mustacchi #define MM_REGISTER_DPC(/* struct _lm_device_t* */_pdev, /* lm_generic_dpc_func */_func) \
199*d14abf15SRobert Mustacchi     mm_register_dpc_imp(_pdev, _func)
200*d14abf15SRobert Mustacchi 
201*d14abf15SRobert Mustacchi #define MM_EMPTY_RAMROD_RECEIVED(/* struct _lm_device_t* */pdev, /* lm_cli_idx_t */lm_cli_idx) \
202*d14abf15SRobert Mustacchi     mm_empty_ramrod_received_imp(pdev, lm_cli_idx)
203*d14abf15SRobert Mustacchi 
204*d14abf15SRobert Mustacchi #define mm_dbus_start_if_enable(/* struct _lm_device_t* */pdev) \
205*d14abf15SRobert Mustacchi     mm_dbus_start_if_enabled_imp(pdev)
206*d14abf15SRobert Mustacchi #define mm_dbus_stop_if_started(/* struct _lm_device_t* */pdev) \
207*d14abf15SRobert Mustacchi     mm_dbus_stop_if_started_imp(pdev)
208*d14abf15SRobert Mustacchi 
209*d14abf15SRobert Mustacchi 
210*d14abf15SRobert Mustacchi /* Busy delay for the specified microseconds. */
211*d14abf15SRobert Mustacchi void mm_wait(struct _lm_device_t *pdev,
212*d14abf15SRobert Mustacchi              u32_t delay_us);
213*d14abf15SRobert Mustacchi 
214*d14abf15SRobert Mustacchi /* Read a PCI configuration register (must be 32-bit aligned) */
215*d14abf15SRobert Mustacchi lm_status_t mm_read_pci(struct _lm_device_t *pdev,
216*d14abf15SRobert Mustacchi                         u32_t pci_reg,
217*d14abf15SRobert Mustacchi                         u32_t *reg_value);
218*d14abf15SRobert Mustacchi 
219*d14abf15SRobert Mustacchi /* Write a PCI configuration register (must be 32-bit aligned) */
220*d14abf15SRobert Mustacchi lm_status_t mm_write_pci(struct _lm_device_t *pdev,
221*d14abf15SRobert Mustacchi                          u32_t pci_reg,
222*d14abf15SRobert Mustacchi                          u32_t reg_value);
223*d14abf15SRobert Mustacchi 
224*d14abf15SRobert Mustacchi /*
225*d14abf15SRobert Mustacchi  * Map the base address of the device registers to system address space so
226*d14abf15SRobert Mustacchi  * that registers are accessible. The base address will be unmapped when the
227*d14abf15SRobert Mustacchi  * driver unloads.
228*d14abf15SRobert Mustacchi  */
229*d14abf15SRobert Mustacchi void * mm_map_io_base(struct _lm_device_t *pdev,
230*d14abf15SRobert Mustacchi                       lm_address_t base_addr,
231*d14abf15SRobert Mustacchi                       u32_t size,
232*d14abf15SRobert Mustacchi                       u8_t bar);
233*d14abf15SRobert Mustacchi 
234*d14abf15SRobert Mustacchi /* Read driver configuration.  It is called from lm_get_dev_info. */
235*d14abf15SRobert Mustacchi lm_status_t mm_get_user_config(struct _lm_device_t *pdev);
236*d14abf15SRobert Mustacchi 
237*d14abf15SRobert Mustacchi /* Get the size of a packet descriptor. */
238*d14abf15SRobert Mustacchi u32_t mm_desc_size(struct _lm_device_t *pdev,
239*d14abf15SRobert Mustacchi                    u32_t desc_type);
240*d14abf15SRobert Mustacchi #define DESC_TYPE_L2TX_PACKET 0
241*d14abf15SRobert Mustacchi #define DESC_TYPE_L2RX_PACKET 1
242*d14abf15SRobert Mustacchi 
243*d14abf15SRobert Mustacchi 
244*d14abf15SRobert Mustacchi /* XXX
245*d14abf15SRobert Mustacchi mm_map_io_space(struct _lm_device_t * pLM,
246*d14abf15SRobert Mustacchi                 lm_address_t  physAddr,
247*d14abf15SRobert Mustacchi                 u8_t          bar,
248*d14abf15SRobert Mustacchi                 u32_t         offset,
249*d14abf15SRobert Mustacchi                 u32_t         size,
250*d14abf15SRobert Mustacchi                 void *        pHandle);
251*d14abf15SRobert Mustacchi */
252*d14abf15SRobert Mustacchi #ifdef __SunOS
253*d14abf15SRobert Mustacchi void *
254*d14abf15SRobert Mustacchi mm_map_io_space_solaris(struct _lm_device_t *      pLM,
255*d14abf15SRobert Mustacchi                         lm_address_t       physAddr,
256*d14abf15SRobert Mustacchi                         u8_t               bar,
257*d14abf15SRobert Mustacchi                         u32_t              offset,
258*d14abf15SRobert Mustacchi                         u32_t              size,
259*d14abf15SRobert Mustacchi                         ddi_acc_handle_t * pRegAccHandle);
260*d14abf15SRobert Mustacchi #else
261*d14abf15SRobert Mustacchi void *
262*d14abf15SRobert Mustacchi mm_map_io_space(struct _lm_device_t *pdev,
263*d14abf15SRobert Mustacchi                 lm_address_t phys_addr,
264*d14abf15SRobert Mustacchi                 u32_t size);
265*d14abf15SRobert Mustacchi #endif
266*d14abf15SRobert Mustacchi 
267*d14abf15SRobert Mustacchi void mm_unmap_io_space(struct _lm_device_t *pdev,
268*d14abf15SRobert Mustacchi                        void *virt_addr,
269*d14abf15SRobert Mustacchi                        u32_t size);
270*d14abf15SRobert Mustacchi 
271*d14abf15SRobert Mustacchi 
272*d14abf15SRobert Mustacchi void * mm_alloc_mem_imp(struct _lm_device_t *pdev,
273*d14abf15SRobert Mustacchi                         u32_t mem_size,
274*d14abf15SRobert Mustacchi                         const char* sz_file,
275*d14abf15SRobert Mustacchi                         const unsigned long line,
276*d14abf15SRobert Mustacchi                         u8_t cli_idx);
277*d14abf15SRobert Mustacchi #define mm_alloc_mem(_pdev, _mem_size, cli_idx) \
278*d14abf15SRobert Mustacchi     mm_alloc_mem_imp((_pdev), (_mem_size), __FILE_STRIPPED__, __LINE__, (cli_idx));
279*d14abf15SRobert Mustacchi 
280*d14abf15SRobert Mustacchi 
281*d14abf15SRobert Mustacchi void * mm_alloc_phys_mem_imp(struct _lm_device_t* pdev,
282*d14abf15SRobert Mustacchi                              u32_t mem_size,
283*d14abf15SRobert Mustacchi                              lm_address_t* phys_mem,
284*d14abf15SRobert Mustacchi                              u8_t mem_type,
285*d14abf15SRobert Mustacchi                              const char* sz_file,
286*d14abf15SRobert Mustacchi                              const unsigned long line,
287*d14abf15SRobert Mustacchi                              u8_t cli_idx);
288*d14abf15SRobert Mustacchi #define mm_alloc_phys_mem(_pdev, _mem_size, _phys_mem, _mem_type, cli_idx) \
289*d14abf15SRobert Mustacchi     mm_alloc_phys_mem_imp((_pdev), (_mem_size), (_phys_mem), (_mem_type), __FILE_STRIPPED__, __LINE__, (cli_idx));
290*d14abf15SRobert Mustacchi 
291*d14abf15SRobert Mustacchi 
292*d14abf15SRobert Mustacchi void * mm_rt_alloc_mem_imp(struct _lm_device_t* pdev,
293*d14abf15SRobert Mustacchi                            u32_t mem_size,
294*d14abf15SRobert Mustacchi                            const char* sz_file,
295*d14abf15SRobert Mustacchi                            const unsigned long line,
296*d14abf15SRobert Mustacchi                            u8_t cli_idx);
297*d14abf15SRobert Mustacchi #define mm_rt_alloc_mem(_pdev, _mem_size, cli_idx) \
298*d14abf15SRobert Mustacchi     mm_rt_alloc_mem_imp((_pdev), (_mem_size), __FILE_STRIPPED__, __LINE__, (cli_idx));
299*d14abf15SRobert Mustacchi 
300*d14abf15SRobert Mustacchi 
301*d14abf15SRobert Mustacchi void * mm_alloc_phys_mem_align_imp(struct _lm_device_t* pdev,
302*d14abf15SRobert Mustacchi                                    u32_t mem_size,
303*d14abf15SRobert Mustacchi                                    lm_address_t* phys_mem,
304*d14abf15SRobert Mustacchi                                    u32_t alignment,
305*d14abf15SRobert Mustacchi                                    u8_t mem_type,
306*d14abf15SRobert Mustacchi                                    const char* sz_file,
307*d14abf15SRobert Mustacchi                                    const unsigned long line,
308*d14abf15SRobert Mustacchi                                    u8_t cli_idx ) ;
309*d14abf15SRobert Mustacchi 
310*d14abf15SRobert Mustacchi #define mm_alloc_phys_mem_align(_pdev, _mem_size, _phys_mem, _alignment, _mem_type, cli_idx) \
311*d14abf15SRobert Mustacchi     mm_alloc_phys_mem_align_imp((_pdev), (_mem_size), (_phys_mem), (_alignment), (_mem_type), __FILE_STRIPPED__, __LINE__, (cli_idx));
312*d14abf15SRobert Mustacchi 
313*d14abf15SRobert Mustacchi 
314*d14abf15SRobert Mustacchi void * mm_rt_alloc_phys_mem_imp(struct _lm_device_t* pdev,
315*d14abf15SRobert Mustacchi                                 u32_t mem_size,
316*d14abf15SRobert Mustacchi                                 lm_address_t* phys_mem,
317*d14abf15SRobert Mustacchi                                 u8_t mem_type,
318*d14abf15SRobert Mustacchi                                 const char* sz_file,
319*d14abf15SRobert Mustacchi                                 const unsigned long line,
320*d14abf15SRobert Mustacchi                                 u8_t cli_idx);
321*d14abf15SRobert Mustacchi 
322*d14abf15SRobert Mustacchi #define mm_rt_alloc_phys_mem(_pdev, _mem_size, _phys_mem, _flush_type, cli_idx) \
323*d14abf15SRobert Mustacchi     mm_rt_alloc_phys_mem_imp((_pdev), (_mem_size), (_phys_mem), (_flush_type), __FILE_STRIPPED__, __LINE__, (cli_idx));
324*d14abf15SRobert Mustacchi 
325*d14abf15SRobert Mustacchi 
326*d14abf15SRobert Mustacchi #define PHYS_MEM_TYPE_UNSPECIFIED 0
327*d14abf15SRobert Mustacchi #define PHYS_MEM_TYPE_NONCACHED   1
328*d14abf15SRobert Mustacchi 
329*d14abf15SRobert Mustacchi 
330*d14abf15SRobert Mustacchi void mm_rt_free_mem(struct _lm_device_t *pdev,
331*d14abf15SRobert Mustacchi                     void *mem_virt,
332*d14abf15SRobert Mustacchi                     u32_t mem_size,
333*d14abf15SRobert Mustacchi                     u8_t cli_idx);
334*d14abf15SRobert Mustacchi 
335*d14abf15SRobert Mustacchi void mm_rt_free_phys_mem(struct _lm_device_t *pdev,
336*d14abf15SRobert Mustacchi                          u32_t mem_size,
337*d14abf15SRobert Mustacchi                          void *virt_mem,
338*d14abf15SRobert Mustacchi                          lm_address_t phys_mem,
339*d14abf15SRobert Mustacchi                          u8_t cli_idx);
340*d14abf15SRobert Mustacchi 
341*d14abf15SRobert Mustacchi 
342*d14abf15SRobert Mustacchi void mm_memset(void *buf, u8_t val, u32_t mem_size);
343*d14abf15SRobert Mustacchi #define mm_mem_zero(buf, mem_size) mm_memset((buf), 0, (mem_size))
344*d14abf15SRobert Mustacchi 
345*d14abf15SRobert Mustacchi void mm_memcpy(void *destenation, const void *source, u32_t mem_size);
346*d14abf15SRobert Mustacchi 
347*d14abf15SRobert Mustacchi u8_t mm_memcmp(void *buf1, void *buf2, u32_t count);
348*d14abf15SRobert Mustacchi 
349*d14abf15SRobert Mustacchi 
350*d14abf15SRobert Mustacchi /* Returns current high-definition time. */
351*d14abf15SRobert Mustacchi u64_t mm_get_current_time(struct _lm_device_t *pdev);
352*d14abf15SRobert Mustacchi 
353*d14abf15SRobert Mustacchi 
354*d14abf15SRobert Mustacchi /*
355*d14abf15SRobert Mustacchi  * This routine is called to indicate completion of a transmit request.
356*d14abf15SRobert Mustacchi  * If 'packet' is not NULL, all the packets in the completion queue will
357*d14abf15SRobert Mustacchi  * be indicated.  Otherwise, only 'packet' will be indicated.
358*d14abf15SRobert Mustacchi  */
359*d14abf15SRobert Mustacchi void mm_indicate_tx(struct _lm_device_t *pdev,
360*d14abf15SRobert Mustacchi                     u32_t chain_idx,
361*d14abf15SRobert Mustacchi                     s_list_t *packet_list);
362*d14abf15SRobert Mustacchi 
363*d14abf15SRobert Mustacchi 
364*d14abf15SRobert Mustacchi /**
365*d14abf15SRobert Mustacchi  * @brief
366*d14abf15SRobert Mustacchi  *      a function that enables lm to indicate rx packets
367*d14abf15SRobert Mustacchi  *      directly. In regular rx indication flow, the call is
368*d14abf15SRobert Mustacchi  *      made from UM -> Um request the rx packets and then
369*d14abf15SRobert Mustacchi  *      indicates them. This function, at time of writing, was
370*d14abf15SRobert Mustacchi  *      used just for aborting packets but may be used for any
371*d14abf15SRobert Mustacchi  *      kind of indication.
372*d14abf15SRobert Mustacchi  *
373*d14abf15SRobert Mustacchi  * @param pdev
374*d14abf15SRobert Mustacchi  * @param chain_idx
375*d14abf15SRobert Mustacchi  * @param packet_list
376*d14abf15SRobert Mustacchi  * @param ind_status   - SUCCESS / ABORTED
377*d14abf15SRobert Mustacchi  */
378*d14abf15SRobert Mustacchi void mm_indicate_rx(struct _lm_device_t *pdev,
379*d14abf15SRobert Mustacchi                     u32_t                chain_idx,
380*d14abf15SRobert Mustacchi                     s_list_t            *packet_list,
381*d14abf15SRobert Mustacchi                     lm_status_t          ind_status);
382*d14abf15SRobert Mustacchi 
383*d14abf15SRobert Mustacchi /* Indicate the current phy link status. */
384*d14abf15SRobert Mustacchi void mm_indicate_link(struct _lm_device_t *pdev,
385*d14abf15SRobert Mustacchi                       lm_status_t link,
386*d14abf15SRobert Mustacchi                       lm_medium_t medium);
387*d14abf15SRobert Mustacchi 
388*d14abf15SRobert Mustacchi /* Indicate a critical HW error that requires to completely
389*d14abf15SRobert Mustacchi    stop all access to the device */
390*d14abf15SRobert Mustacchi void mm_indicate_hw_failure(struct _lm_device_t *pdev);
391*d14abf15SRobert Mustacchi 
392*d14abf15SRobert Mustacchi /* Call the lm_task_cb_t callback function after the specified delay. */
393*d14abf15SRobert Mustacchi typedef void(*lm_task_cb_t)(struct _lm_device_t *pdev, void *param);
394*d14abf15SRobert Mustacchi lm_status_t mm_schedule_task(struct _lm_device_t *pdev,
395*d14abf15SRobert Mustacchi                              u32_t delay_ms,
396*d14abf15SRobert Mustacchi                              lm_task_cb_t task,
397*d14abf15SRobert Mustacchi                              void *param);
398*d14abf15SRobert Mustacchi 
399*d14abf15SRobert Mustacchi 
400*d14abf15SRobert Mustacchi /* XXX needs description... */
401*d14abf15SRobert Mustacchi void mm_set_done(struct _lm_device_t *pdev,
402*d14abf15SRobert Mustacchi                  u32_t cid,
403*d14abf15SRobert Mustacchi                  void *cookie);
404*d14abf15SRobert Mustacchi 
405*d14abf15SRobert Mustacchi 
406*d14abf15SRobert Mustacchi struct sq_pending_command;
407*d14abf15SRobert Mustacchi 
408*d14abf15SRobert Mustacchi void mm_return_sq_pending_command(struct _lm_device_t * pdev,
409*d14abf15SRobert Mustacchi                                   struct sq_pending_command * pending);
410*d14abf15SRobert Mustacchi 
411*d14abf15SRobert Mustacchi struct sq_pending_command * mm_get_sq_pending_command(struct _lm_device_t * pdev);
412*d14abf15SRobert Mustacchi 
413*d14abf15SRobert Mustacchi 
414*d14abf15SRobert Mustacchi u32_t mm_copy_packet_buf(struct _lm_device_t *pdev,
415*d14abf15SRobert Mustacchi                          struct _lm_packet_t *lmpkt, /* packet to copy from */
416*d14abf15SRobert Mustacchi                          u8_t *mem_buf,              /* buffer to copy to */
417*d14abf15SRobert Mustacchi                          u32_t size);                /* number of bytes to copy */
418*d14abf15SRobert Mustacchi 
419*d14abf15SRobert Mustacchi 
420*d14abf15SRobert Mustacchi lm_status_t mm_event_log_generic_arg_fwd(struct _lm_device_t* pdev,
421*d14abf15SRobert Mustacchi                                          const lm_log_id_t lm_log_id,
422*d14abf15SRobert Mustacchi                                          va_list ap);
423*d14abf15SRobert Mustacchi 
424*d14abf15SRobert Mustacchi lm_status_t mm_event_log_generic(struct _lm_device_t* pdev,
425*d14abf15SRobert Mustacchi                                  const lm_log_id_t lm_log_id,
426*d14abf15SRobert Mustacchi                                  ...);
427*d14abf15SRobert Mustacchi 
428*d14abf15SRobert Mustacchi void mm_print_bdf(int, void*);
429*d14abf15SRobert Mustacchi 
430*d14abf15SRobert Mustacchi 
431*d14abf15SRobert Mustacchi /* common alloc and zero memory routine used for all platforms */
mm_rt_zalloc_mem(struct _lm_device_t * pdev,u32_t size)432*d14abf15SRobert Mustacchi static __inline void * mm_rt_zalloc_mem(struct _lm_device_t * pdev, u32_t size)
433*d14abf15SRobert Mustacchi {
434*d14abf15SRobert Mustacchi     void * ptr;
435*d14abf15SRobert Mustacchi 
436*d14abf15SRobert Mustacchi     ptr = mm_rt_alloc_mem(pdev, size, 0);
437*d14abf15SRobert Mustacchi 
438*d14abf15SRobert Mustacchi     if (ptr)
439*d14abf15SRobert Mustacchi     {
440*d14abf15SRobert Mustacchi         mm_mem_zero(ptr, size);
441*d14abf15SRobert Mustacchi     }
442*d14abf15SRobert Mustacchi 
443*d14abf15SRobert Mustacchi     return ptr;
444*d14abf15SRobert Mustacchi }
445*d14abf15SRobert Mustacchi 
446*d14abf15SRobert Mustacchi 
447*d14abf15SRobert Mustacchi u32_t mm_build_ver_string(struct _lm_device_t * pdev);
448*d14abf15SRobert Mustacchi 
449*d14abf15SRobert Mustacchi 
450*d14abf15SRobert Mustacchi #ifdef VF_INVOLVED
451*d14abf15SRobert Mustacchi 
452*d14abf15SRobert Mustacchi #ifndef VF_TO_PF_STANDARD_BLOCK_ID
453*d14abf15SRobert Mustacchi #define VF_TO_PF_STANDARD_BLOCK_ID 0x100
454*d14abf15SRobert Mustacchi #endif
455*d14abf15SRobert Mustacchi 
456*d14abf15SRobert Mustacchi struct _lm_vf_pf_message_t;
457*d14abf15SRobert Mustacchi struct _lm_vf_info_t;
458*d14abf15SRobert Mustacchi struct _lm_sriov_info_t;
459*d14abf15SRobert Mustacchi 
460*d14abf15SRobert Mustacchi void mm_vf_pf_arm_trigger(struct _lm_device_t *pdev,
461*d14abf15SRobert Mustacchi                           struct _lm_vf_pf_message_t *mess);
462*d14abf15SRobert Mustacchi 
463*d14abf15SRobert Mustacchi lm_status_t mm_vf_pf_write_block_to_sw_channel(struct _lm_device_t *pdev,
464*d14abf15SRobert Mustacchi                                                u32_t block_id,
465*d14abf15SRobert Mustacchi                                                void *buffer,
466*d14abf15SRobert Mustacchi                                                u32_t length);
467*d14abf15SRobert Mustacchi 
468*d14abf15SRobert Mustacchi lm_status_t mm_vf_pf_read_block_from_sw_channel(struct _lm_device_t *pdev,
469*d14abf15SRobert Mustacchi                                                 u32_t block_id,
470*d14abf15SRobert Mustacchi                                                 void *buffer,
471*d14abf15SRobert Mustacchi                                                 u32_t *length);
472*d14abf15SRobert Mustacchi 
473*d14abf15SRobert Mustacchi lm_status_t mm_vf_pf_sw_ch_process_standard_request(struct _lm_device_t *pdev,
474*d14abf15SRobert Mustacchi                                                     u16_t relative_vf_id,
475*d14abf15SRobert Mustacchi                                                     void *virt_buffer,
476*d14abf15SRobert Mustacchi                                                     u32_t length);
477*d14abf15SRobert Mustacchi 
478*d14abf15SRobert Mustacchi lm_status_t mm_vf_pf_sw_ch_retrieve_standard_response(struct _lm_device_t *pdev,
479*d14abf15SRobert Mustacchi                                                       u16_t relative_vf_id,
480*d14abf15SRobert Mustacchi                                                       void *virt_buffer,
481*d14abf15SRobert Mustacchi                                                       u32_t length);
482*d14abf15SRobert Mustacchi 
483*d14abf15SRobert Mustacchi lm_status_t mm_vf_pf_hw_ch_process_standard_request(struct _lm_device_t *pdev,
484*d14abf15SRobert Mustacchi                                                     u8_t vf_id,
485*d14abf15SRobert Mustacchi                                                     lm_address_t *vf_pf_message);
486*d14abf15SRobert Mustacchi 
487*d14abf15SRobert Mustacchi lm_status_t mm_vf_pf_upload_standard_request(struct _lm_device_t *pdev,
488*d14abf15SRobert Mustacchi                                              u8_t vf_id,
489*d14abf15SRobert Mustacchi                                              lm_address_t *vf_pf_message);
490*d14abf15SRobert Mustacchi 
491*d14abf15SRobert Mustacchi lm_status_t mm_vf_en(struct _lm_device_t* pdev,
492*d14abf15SRobert Mustacchi                      u16_t vfs_num);
493*d14abf15SRobert Mustacchi 
494*d14abf15SRobert Mustacchi void mm_vf_dis(struct _lm_device_t* pdev);
495*d14abf15SRobert Mustacchi 
496*d14abf15SRobert Mustacchi u16_t mm_get_extended_caps(struct _lm_device_t *pdev,
497*d14abf15SRobert Mustacchi                            u16_t capabilityID);
498*d14abf15SRobert Mustacchi 
499*d14abf15SRobert Mustacchi lm_status_t mm_get_sriov_info(struct _lm_device_t *pdev,
500*d14abf15SRobert Mustacchi                               struct _lm_sriov_info_t *info);
501*d14abf15SRobert Mustacchi 
502*d14abf15SRobert Mustacchi lm_status_t mm_pf_get_queues_number(struct _lm_device_t *pdev,
503*d14abf15SRobert Mustacchi                                     struct _lm_vf_info_t *vf_info,
504*d14abf15SRobert Mustacchi                                     u8_t *num_rxqs,
505*d14abf15SRobert Mustacchi                                     u8_t *num_txqs);
506*d14abf15SRobert Mustacchi 
507*d14abf15SRobert Mustacchi lm_status_t mm_pf_get_filters_number(struct _lm_device_t *pdev,
508*d14abf15SRobert Mustacchi                                      struct _lm_vf_info_t *vf_info,
509*d14abf15SRobert Mustacchi                                      u8_t *num_mac_filters,
510*d14abf15SRobert Mustacchi                                      u8_t *num_vlan_filters,
511*d14abf15SRobert Mustacchi                                      u8_t *num_mc_filters);
512*d14abf15SRobert Mustacchi 
513*d14abf15SRobert Mustacchi lm_status_t mm_pf_get_macs(struct _lm_device_t *pdev,
514*d14abf15SRobert Mustacchi                            struct _lm_vf_info_t *vf_info,
515*d14abf15SRobert Mustacchi                            u8_t *permanent_mac_addr,
516*d14abf15SRobert Mustacchi                            u8_t *current_mac_addr);
517*d14abf15SRobert Mustacchi 
518*d14abf15SRobert Mustacchi void mm_report_malicious_vf(struct _lm_device_t *pdev, struct _lm_vf_info_t *vf_info);
519*d14abf15SRobert Mustacchi 
520*d14abf15SRobert Mustacchi #endif /* ifdef VF_INVOLVED */
521*d14abf15SRobert Mustacchi 
522*d14abf15SRobert Mustacchi 
523*d14abf15SRobert Mustacchi #ifdef BIG_ENDIAN
524*d14abf15SRobert Mustacchi // LE
525*d14abf15SRobert Mustacchi #define mm_le16_to_cpu(val) mm_le16_to_cpu_imp(val)
526*d14abf15SRobert Mustacchi #define mm_cpu_to_le16(val) mm_cpu_to_le16_imp(val)
527*d14abf15SRobert Mustacchi #define mm_le32_to_cpu(val) mm_le32_to_cpu_imp(val)
528*d14abf15SRobert Mustacchi #define mm_cpu_to_le32(val) mm_cpu_to_le32_imp(val)
529*d14abf15SRobert Mustacchi // BE
530*d14abf15SRobert Mustacchi #define mm_be32_to_cpu(val) mm_be32_to_cpu_imp(val)
531*d14abf15SRobert Mustacchi #define mm_cpu_to_be32(val) mm_cpu_to_be32_imp(val)
532*d14abf15SRobert Mustacchi #define mm_be16_to_cpu(val) mm_be16_to_cpu_imp(val)
533*d14abf15SRobert Mustacchi #define mm_cpu_to_be16(val) mm_cpu_to_be16_imp(val)
534*d14abf15SRobert Mustacchi #else /* LITTLE_ENDIAN */
535*d14abf15SRobert Mustacchi // LE
536*d14abf15SRobert Mustacchi #define mm_le16_to_cpu(val) mm_le16_to_cpu_imp(val)
537*d14abf15SRobert Mustacchi #define mm_cpu_to_le16(val) mm_cpu_to_le16_imp(val)
538*d14abf15SRobert Mustacchi #define mm_le32_to_cpu(val) mm_le32_to_cpu_imp(val)
539*d14abf15SRobert Mustacchi #define mm_cpu_to_le32(val) mm_cpu_to_le32_imp(val)
540*d14abf15SRobert Mustacchi // BE
541*d14abf15SRobert Mustacchi #define mm_be32_to_cpu(val) mm_be32_to_cpu_imp(val)
542*d14abf15SRobert Mustacchi #define mm_cpu_to_be32(val) mm_cpu_to_be32_imp(val)
543*d14abf15SRobert Mustacchi #define mm_be16_to_cpu(val) mm_be16_to_cpu_imp(val)
544*d14abf15SRobert Mustacchi #define mm_cpu_to_be16(val) mm_cpu_to_be16_imp(val)
545*d14abf15SRobert Mustacchi #endif /* ifdef BIG_ENDIAN */
546*d14abf15SRobert Mustacchi 
547*d14abf15SRobert Mustacchi 
548*d14abf15SRobert Mustacchi #define mm_get_bar_offset(/* struct _lm_device_t* */pdev, /* u8_t */bar_num, /* lm_address_t* */bar_addr) \
549*d14abf15SRobert Mustacchi     mm_get_bar_offset_imp(pdev, bar_num, bar_addr)
550*d14abf15SRobert Mustacchi 
551*d14abf15SRobert Mustacchi #define mm_get_bar_size(/* struct _lm_device_t* */pdev, /* u8_t */bar_num, /* u32_t* */val_p) \
552*d14abf15SRobert Mustacchi     mm_get_bar_size_imp(pdev, bar_num, val_p)
553*d14abf15SRobert Mustacchi 
554*d14abf15SRobert Mustacchi 
555*d14abf15SRobert Mustacchi #endif /* _MM_H */
556*d14abf15SRobert Mustacchi 
557