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 #include <ntddk.h> 36*d14abf15SRobert Mustacchi #include <ndis.h> 37*d14abf15SRobert Mustacchi 38*d14abf15SRobert Mustacchi #ifndef __FILE_STRIPPED__ 39*d14abf15SRobert Mustacchi #define __FILE_STRIPPED__ strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__ 40*d14abf15SRobert Mustacchi #endif 41*d14abf15SRobert Mustacchi 42*d14abf15SRobert Mustacchi // portable integer type of the pointer size for current platform (64/32) 43*d14abf15SRobert Mustacchi typedef ULONG_PTR mm_int_ptr_t; 44*d14abf15SRobert Mustacchi 45*d14abf15SRobert Mustacchi typedef NDIS_SPIN_LOCK mm_spin_lock_t; 46*d14abf15SRobert Mustacchi 47*d14abf15SRobert Mustacchi #if defined(NDIS31_MINIPORT) || defined(NDIS40_MINIPORT) || defined(NDIS50_MINIPORT) 48*d14abf15SRobert Mustacchi 49*d14abf15SRobert Mustacchi #define mm_read_barrier_imp() 50*d14abf15SRobert Mustacchi #define mm_write_barrier_imp() 51*d14abf15SRobert Mustacchi #define mm_barrier_imp() 52*d14abf15SRobert Mustacchi 53*d14abf15SRobert Mustacchi #else 54*d14abf15SRobert Mustacchi 55*d14abf15SRobert Mustacchi #ifdef _IA64_ 56*d14abf15SRobert Mustacchi #define mm_read_barrier_imp() KeMemoryBarrier() 57*d14abf15SRobert Mustacchi #else 58*d14abf15SRobert Mustacchi #define mm_read_barrier_imp() KeMemoryBarrierWithoutFence() 59*d14abf15SRobert Mustacchi #endif 60*d14abf15SRobert Mustacchi 61*d14abf15SRobert Mustacchi #define mm_write_barrier_imp() KeMemoryBarrier() 62*d14abf15SRobert Mustacchi #define mm_barrier_imp() KeMemoryBarrier() 63*d14abf15SRobert Mustacchi 64*d14abf15SRobert Mustacchi #endif 65*d14abf15SRobert Mustacchi 66*d14abf15SRobert Mustacchi #define mm_atomic_set_imp(_p, _v) InterlockedExchange((long*)(_p), (long)(_v)) 67*d14abf15SRobert Mustacchi 68*d14abf15SRobert Mustacchi #define mm_atomic_dec_imp(_p) InterlockedDecrement((long*)(_p)) 69*d14abf15SRobert Mustacchi #define mm_atomic_inc_imp(_p) InterlockedIncrement((long*)(_p)) 70*d14abf15SRobert Mustacchi 71*d14abf15SRobert Mustacchi #define mm_atomic_and_imp(_p, _v) InterlockedAnd((long*)(_p), (long)(_v)) 72*d14abf15SRobert Mustacchi #define mm_atomic_long_and_imp(_p, _v) mm_atomic_and_imp((_p), (_v)) 73*d14abf15SRobert Mustacchi 74*d14abf15SRobert Mustacchi #define mm_atomic_or_imp(_p, _v) InterlockedOr((long*)(_p), (long)(_v) ) 75*d14abf15SRobert Mustacchi #define mm_atomic_long_or_imp(_p, _v) mm_atomic_or_imp((_p), (_v)) 76*d14abf15SRobert Mustacchi 77*d14abf15SRobert Mustacchi #define mm_atomic_read_imp(_p) \ 78*d14abf15SRobert Mustacchi InterlockedExchangeAdd((long*)(_p), (long)(0)) 79*d14abf15SRobert Mustacchi #define mm_atomic_long_read_imp(_p) mm_atomic_read_imp((_p)) 80*d14abf15SRobert Mustacchi 81*d14abf15SRobert Mustacchi #define mm_atomic_cmpxchg_imp(_p, _old_val, _new_val) \ 82*d14abf15SRobert Mustacchi InterlockedCompareExchange(_p, (long)_new_val, (long)_old_val ) 83*d14abf15SRobert Mustacchi 84*d14abf15SRobert Mustacchi 85*d14abf15SRobert Mustacchi #define MM_WRITE_DOORBELL_IMP(PDEV, BAR, CID, VAL) \ 86*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)) 87*d14abf15SRobert Mustacchi 88*d14abf15SRobert Mustacchi #define MM_REGISTER_LPME_IMP(_pdev, _func, _b_fw_access, _b_queue_for_fw) \ 89*d14abf15SRobert Mustacchi mm_register_lpme((_pdev), (_func), (_b_fw_access), (_b_queue_for_fw)) 90*d14abf15SRobert Mustacchi 91*d14abf15SRobert Mustacchi u32_t 92*d14abf15SRobert Mustacchi mm_dcb_mp_l2_is_enable(struct _lm_device_t *pdev); 93*d14abf15SRobert Mustacchi #define MM_DCB_MP_L2_IS_ENABLE(_pdev) (mm_dcb_mp_l2_is_enable(pdev)) 94*d14abf15SRobert Mustacchi 95*d14abf15SRobert Mustacchi void MM_ACQUIRE_SPQ_LOCK_IMP(struct _lm_device_t *_pdev); 96*d14abf15SRobert Mustacchi void MM_RELEASE_SPQ_LOCK_IMP(struct _lm_device_t *_pdev); 97*d14abf15SRobert Mustacchi void MM_ACQUIRE_SPQ_LOCK_DPC_IMP(struct _lm_device_t *_pdev); 98*d14abf15SRobert Mustacchi void MM_RELEASE_SPQ_LOCK_DPC_IMP(struct _lm_device_t *_pdev); 99*d14abf15SRobert Mustacchi 100*d14abf15SRobert Mustacchi void MM_ACQUIRE_CID_LOCK_IMP(struct _lm_device_t *_pdev); 101*d14abf15SRobert Mustacchi void MM_RELEASE_CID_LOCK_IMP(struct _lm_device_t *_pdev); 102*d14abf15SRobert Mustacchi 103*d14abf15SRobert Mustacchi void MM_ACQUIRE_REQUEST_LOCK_IMP(struct _lm_device_t *_pdev); 104*d14abf15SRobert Mustacchi void MM_RELEASE_REQUEST_LOCK_IMP(struct _lm_device_t *_pdev); 105*d14abf15SRobert Mustacchi 106*d14abf15SRobert Mustacchi #define MM_ACQUIRE_REQUEST_LOCK_DPC_IMP(pdev) 107*d14abf15SRobert Mustacchi #define MM_RELEASE_REQUEST_LOCK_DPC_IMP(pdev) 108*d14abf15SRobert Mustacchi 109*d14abf15SRobert Mustacchi void MM_ACQUIRE_PHY_LOCK_IMP(struct _lm_device_t * pDev); 110*d14abf15SRobert Mustacchi void MM_RELEASE_PHY_LOCK_IMP(struct _lm_device_t * pDev); 111*d14abf15SRobert Mustacchi void MM_ACQUIRE_PHY_LOCK_DPC_IMP(struct _lm_device_t * pDev); 112*d14abf15SRobert Mustacchi void MM_RELEASE_PHY_LOCK_DPC_IMP(struct _lm_device_t * pDev); 113*d14abf15SRobert Mustacchi 114*d14abf15SRobert Mustacchi void MM_ACQUIRE_ISLES_CONTROL_LOCK_IMP(struct _lm_device_t *_pdev); 115*d14abf15SRobert Mustacchi void MM_RELEASE_ISLES_CONTROL_LOCK_IMP(struct _lm_device_t *_pdev); 116*d14abf15SRobert Mustacchi void MM_ACQUIRE_ISLES_CONTROL_LOCK_DPC_IMP(struct _lm_device_t *_pdev); 117*d14abf15SRobert Mustacchi void MM_RELEASE_ISLES_CONTROL_LOCK_DPC_IMP(struct _lm_device_t *_pdev); 118*d14abf15SRobert Mustacchi 119*d14abf15SRobert Mustacchi #define MM_ACQUIRE_RAMROD_COMP_LOCK_IMP(_pdev) 120*d14abf15SRobert Mustacchi #define MM_RELEASE_RAMROD_COMP_LOCK_IMP(_pdev) 121*d14abf15SRobert Mustacchi 122*d14abf15SRobert Mustacchi void MM_ACQUIRE_MCP_LOCK_IMP(struct _lm_device_t *_pdev); 123*d14abf15SRobert Mustacchi void MM_RELEASE_MCP_LOCK_IMP(struct _lm_device_t *_pdev); 124*d14abf15SRobert Mustacchi 125*d14abf15SRobert Mustacchi void MM_ACQUIRE_ISLES_CONTROL_LOCK_IMP(struct _lm_device_t *_pdev); 126*d14abf15SRobert Mustacchi void MM_RELEASE_ISLES_CONTROL_LOCK_IMP(struct _lm_device_t *_pdev); 127*d14abf15SRobert Mustacchi void MM_ACQUIRE_ISLES_CONTROL_LOCK_DPC_IMP(struct _lm_device_t *_pdev); 128*d14abf15SRobert Mustacchi void MM_RELEASE_ISLES_CONTROL_LOCK_DPC_IMP(struct _lm_device_t *_pdev); 129*d14abf15SRobert Mustacchi 130*d14abf15SRobert Mustacchi void MM_ACQUIRE_IND_REG_LOCK_IMP(struct _lm_device_t *_pdev); 131*d14abf15SRobert Mustacchi void MM_RELEASE_IND_REG_LOCK_IMP(struct _lm_device_t *_pdev); 132*d14abf15SRobert Mustacchi 133*d14abf15SRobert Mustacchi void MM_ACQUIRE_LOADER_LOCK_IMP(); 134*d14abf15SRobert Mustacchi void MM_RELEASE_LOADER_LOCK_IMP(); 135*d14abf15SRobert Mustacchi 136*d14abf15SRobert Mustacchi void MM_ACQUIRE_SP_REQ_MGR_LOCK_IMP(struct _lm_device_t *_pdev); 137*d14abf15SRobert Mustacchi void MM_RELEASE_SP_REQ_MGR_LOCK_IMP(struct _lm_device_t *_pdev); 138*d14abf15SRobert Mustacchi 139*d14abf15SRobert Mustacchi void MM_ACQUIRE_SB_LOCK_IMP(struct _lm_device_t *_pdev, u8_t _sb_idx); 140*d14abf15SRobert Mustacchi void MM_RELEASE_SB_LOCK_IMP(struct _lm_device_t *_pdev, u8_t _sb_idx); 141*d14abf15SRobert Mustacchi 142*d14abf15SRobert Mustacchi void MM_ACQUIRE_ETH_CON_LOCK(struct _lm_device_t *_pdev); 143*d14abf15SRobert Mustacchi void MM_RELEASE_ETH_CON_LOCK(struct _lm_device_t *_pdev); 144*d14abf15SRobert Mustacchi 145*d14abf15SRobert Mustacchi #ifdef VF_INVOLVED 146*d14abf15SRobert Mustacchi 147*d14abf15SRobert Mustacchi void MM_ACQUIRE_PF_LOCK_IMP(struct _lm_device_t *_pdev); 148*d14abf15SRobert Mustacchi void MM_RELEASE_PF_LOCK_IMP(struct _lm_device_t *_pdev); 149*d14abf15SRobert Mustacchi 150*d14abf15SRobert Mustacchi void MM_ACQUIRE_VFS_STATS_LOCK_IMP(struct _lm_device_t *_pdev); 151*d14abf15SRobert Mustacchi void MM_RELEASE_VFS_STATS_LOCK_IMP(struct _lm_device_t *_pdev); 152*d14abf15SRobert Mustacchi void MM_ACQUIRE_VFS_STATS_LOCK_DPC_IMP(struct _lm_device_t *_pdev); 153*d14abf15SRobert Mustacchi void MM_RELEASE_VFS_STATS_LOCK_DPC_IMP(struct _lm_device_t *_pdev); 154*d14abf15SRobert Mustacchi 155*d14abf15SRobert Mustacchi #endif /* VF_INVOLVED */ 156*d14abf15SRobert Mustacchi 157*d14abf15SRobert Mustacchi #define mm_er_initiate_recovery_imp(pdev) \ 158*d14abf15SRobert Mustacchi (LM_STATUS_FAILURE) 159*d14abf15SRobert Mustacchi 160*d14abf15SRobert Mustacchi #define mm_register_dpc_imp(_pdev, _func) \ 161*d14abf15SRobert Mustacchi (LM_STATUS_FAILURE) 162*d14abf15SRobert Mustacchi 163*d14abf15SRobert Mustacchi void mm_empty_ramrod_received_imp(struct _lm_device_t *pdev, 164*d14abf15SRobert Mustacchi const u32_t empty_data); 165*d14abf15SRobert Mustacchi 166*d14abf15SRobert Mustacchi #define mm_dbus_start_if_enabled_imp(pdev) 167*d14abf15SRobert Mustacchi #define mm_dbus_stop_if_started_imp(pdev) 168*d14abf15SRobert Mustacchi 169*d14abf15SRobert Mustacchi 170*d14abf15SRobert Mustacchi #ifdef BIG_ENDIAN 171*d14abf15SRobert Mustacchi // LE 172*d14abf15SRobert Mustacchi #define mm_le16_to_cpu_imp(val) SWAP_BYTES16(val) 173*d14abf15SRobert Mustacchi #define mm_cpu_to_le16_imp(val) SWAP_BYTES16(val) 174*d14abf15SRobert Mustacchi #define mm_le32_to_cpu_imp(val) SWAP_BYTES32(val) 175*d14abf15SRobert Mustacchi #define mm_cpu_to_le32_imp(val) SWAP_BYTES32(val) 176*d14abf15SRobert Mustacchi // BE 177*d14abf15SRobert Mustacchi #define mm_be32_to_cpu_imp(val) (val) 178*d14abf15SRobert Mustacchi #define mm_cpu_to_be32_imp(val) (val) 179*d14abf15SRobert Mustacchi #define mm_be16_to_cpu_imp(val) (val) 180*d14abf15SRobert Mustacchi #define mm_cpu_to_be16_imp(val) (val) 181*d14abf15SRobert Mustacchi #else /* LITTLE_ENDIAN */ 182*d14abf15SRobert Mustacchi // LE 183*d14abf15SRobert Mustacchi #define mm_le16_to_cpu_imp(val) (val) 184*d14abf15SRobert Mustacchi #define mm_cpu_to_le16_imp(val) (val) 185*d14abf15SRobert Mustacchi #define mm_le32_to_cpu_imp(val) (val) 186*d14abf15SRobert Mustacchi #define mm_cpu_to_le32_imp(val) (val) 187*d14abf15SRobert Mustacchi // BE 188*d14abf15SRobert Mustacchi #define mm_be32_to_cpu_imp(val) SWAP_BYTES32(val) 189*d14abf15SRobert Mustacchi #define mm_cpu_to_be32_imp(val) SWAP_BYTES32(val) 190*d14abf15SRobert Mustacchi #define mm_be16_to_cpu_imp(val) SWAP_BYTES16(val) 191*d14abf15SRobert Mustacchi #define mm_cpu_to_be16_imp(val) SWAP_BYTES16(val) 192*d14abf15SRobert Mustacchi #endif /* ifdef BIG_ENDIAN */ 193*d14abf15SRobert Mustacchi 194*d14abf15SRobert Mustacchi 195*d14abf15SRobert Mustacchi #define mm_get_bar_offset_imp(pdev, bar_num, bar_addr) \ 196*d14abf15SRobert Mustacchi lm_get_bar_offset_direct(pdev, bar_num, bar_addr) 197*d14abf15SRobert Mustacchi 198*d14abf15SRobert Mustacchi #define mm_get_bar_size_imp(pdev, bar_num, val_p) \ 199*d14abf15SRobert Mustacchi lm_get_bar_size_direct(pdev, bar_num, val_p) 200*d14abf15SRobert Mustacchi 201