d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/*****************************************************************************
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * CDDL HEADER START
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * The contents of this file are subject to the terms of the
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Common Development and Distribution License (the "License").
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * You may not use this file except in compliance with the License.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * or http://www.opensolaris.org/os/licensing.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * See the License for the specific language governing permissions
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * and limitations under the License.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * When distributing Covered Code, include this CDDL HEADER in each
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * If applicable, add the following below this CDDL HEADER, with the
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * fields enclosed by brackets "[]" replaced with your own identifying
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * information: Portions Copyright [yyyy] [name of copyright owner]
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * CDDL HEADER END
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Copyright 2014 QLogic Corporation
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * The contents of this file are subject to the terms of the
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * QLogic End User License (the "License").
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * You may not use this file except in compliance with the License.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * You can obtain a copy of the License at
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * http://www.qlogic.com/Resources/Documents/DriverDownloadHelp/
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * QLogic_End_User_Software_License.txt
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * See the License for the specific language governing permissions
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * and limitations under the License.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *****************************************************************************/
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#if defined(_VBD_)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <ntddk.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#elif defined(_VBD_CMD_)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include "vc_os_emul.h"
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include "../../Windows/b10bdrv/um_lock.h"
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// portable integer type of the pointer size for current platform (64/32)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef ULONG_PTR mm_int_ptr_t;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef spin_lock_t mm_spin_lock_t;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#if defined(_IA64_) || defined(_VBD_CMD_)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define mm_read_barrier_imp() KeMemoryBarrier()
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#else
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define mm_read_barrier_imp() KeMemoryBarrierWithoutFence()
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* Sections that are different between VBD_CMD and VBD (shouldn't be alot...) */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#if defined(_VBD_)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_status_t mm_get_bar_offset_imp(struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8_t barn,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_address_t *bar_addr);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_status_t mm_get_bar_size_imp(struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8_t bar_num,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t *bar_sz);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#else
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define mm_get_bar_offset_imp(pdev, bar_num, bar_addr) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_get_bar_offset_direct(pdev, bar_num, bar_addr)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define mm_get_bar_size_imp(pdev, bar_num, val_p) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_get_bar_size_direct(pdev, bar_num, val_p)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define mm_write_barrier_imp() KeMemoryBarrier()
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define mm_barrier_imp() KeMemoryBarrier()
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define mm_atomic_set_imp(_p, _v) InterlockedExchange((long*)(_p), (long)(_v))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define mm_atomic_dec_imp(_p) InterlockedDecrement((long*)(_p))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define mm_atomic_inc_imp(_p) InterlockedIncrement((long*)(_p))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define mm_atomic_add_imp(_p, _v) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi InterlockedExchangeAdd((long*)(_p), (long)(_v))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define mm_atomic_sub_imp(_p, _v) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi InterlockedExchangeAdd((long*)(_p), -1*(long)(_v))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define mm_atomic_and_imp(_p, _v) InterlockedAnd((long*)(_p), (long)(_v))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define mm_atomic_long_and_imp(_p, _v) mm_atomic_and_imp((_p), (_v))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define mm_atomic_or_imp(_p, _v) InterlockedOr((long*)(_p), (long)(_v) )
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define mm_atomic_long_or_imp(_p, _v) mm_atomic_or_imp((_p), (_v))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define mm_atomic_read_imp(_p) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi InterlockedExchangeAdd((long*)(_p), (long)(0))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define mm_atomic_long_read_imp(_p) mm_atomic_read_imp((_p))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define mm_atomic_cmpxchg_imp(_p, _old_val, _new_val) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi InterlockedCompareExchange(_p, (long)_new_val, (long)_old_val )
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MM_WRITE_DOORBELL_IMP(PDEV, BAR, CID, VAL) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (IS_PFDEV(pdev)) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert 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)); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert 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)); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MM_REGISTER_LPME_IMP(_pdev, _func, _b_fw_access, _b_queue_for_fw) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi mm_register_lpme((_pdev), (_func), (_b_fw_access), (_b_queue_for_fw))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_ACQUIRE_SPQ_LOCK_IMP(struct _lm_device_t *_pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_RELEASE_SPQ_LOCK_IMP(struct _lm_device_t *_pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_ACQUIRE_SPQ_LOCK_DPC_IMP(struct _lm_device_t *_pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_RELEASE_SPQ_LOCK_DPC_IMP(struct _lm_device_t *_pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_ACQUIRE_CID_LOCK_IMP(struct _lm_device_t *_pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_RELEASE_CID_LOCK_IMP(struct _lm_device_t *_pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_ACQUIRE_REQUEST_LOCK_IMP(struct _lm_device_t *_pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_RELEASE_REQUEST_LOCK_IMP(struct _lm_device_t *_pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MM_ACQUIRE_REQUEST_LOCK_DPC_IMP(pdev)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MM_RELEASE_REQUEST_LOCK_DPC_IMP(pdev)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_ACQUIRE_PHY_LOCK_IMP(struct _lm_device_t * pDev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_RELEASE_PHY_LOCK_IMP(struct _lm_device_t * pDev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_ACQUIRE_PHY_LOCK_DPC_IMP(struct _lm_device_t * pDev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_RELEASE_PHY_LOCK_DPC_IMP(struct _lm_device_t * pDev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_ACQUIRE_ISLES_CONTROL_LOCK_IMP(struct _lm_device_t *_pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_RELEASE_ISLES_CONTROL_LOCK_IMP(struct _lm_device_t *_pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_ACQUIRE_ISLES_CONTROL_LOCK_DPC_IMP(struct _lm_device_t *_pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_RELEASE_ISLES_CONTROL_LOCK_DPC_IMP(struct _lm_device_t *_pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MM_ACQUIRE_RAMROD_COMP_LOCK_IMP(_pdev)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MM_RELEASE_RAMROD_COMP_LOCK_IMP(_pdev)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_ACQUIRE_MCP_LOCK_IMP(struct _lm_device_t *_pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_RELEASE_MCP_LOCK_IMP(struct _lm_device_t *_pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_ACQUIRE_ISLES_CONTROL_LOCK_IMP(struct _lm_device_t *_pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_RELEASE_ISLES_CONTROL_LOCK_IMP(struct _lm_device_t *_pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_ACQUIRE_ISLES_CONTROL_LOCK_DPC_IMP(struct _lm_device_t *_pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_RELEASE_ISLES_CONTROL_LOCK_DPC_IMP(struct _lm_device_t *_pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_ACQUIRE_IND_REG_LOCK_IMP(struct _lm_device_t *_pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_RELEASE_IND_REG_LOCK_IMP(struct _lm_device_t *_pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_ACQUIRE_LOADER_LOCK_IMP();
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_RELEASE_LOADER_LOCK_IMP();
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_ACQUIRE_SP_REQ_MGR_LOCK_IMP(struct _lm_device_t *_pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_RELEASE_SP_REQ_MGR_LOCK_IMP(struct _lm_device_t *_pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_ACQUIRE_SB_LOCK_IMP(struct _lm_device_t *_pdev, u8_t _sb_idx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_RELEASE_SB_LOCK_IMP(struct _lm_device_t *_pdev, u8_t _sb_idx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_ACQUIRE_ETH_CON_LOCK_IMP(struct _lm_device_t *_pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_RELEASE_ETH_CON_LOCK_IMP(struct _lm_device_t *_pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#ifdef VF_INVOLVED
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_ACQUIRE_PF_LOCK_IMP(struct _lm_device_t *_pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_RELEASE_PF_LOCK_IMP(struct _lm_device_t *_pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_ACQUIRE_VFS_STATS_LOCK_IMP(struct _lm_device_t *_pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_RELEASE_VFS_STATS_LOCK_IMP(struct _lm_device_t *_pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_ACQUIRE_VFS_STATS_LOCK_DPC_IMP(struct _lm_device_t *_pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_RELEASE_VFS_STATS_LOCK_DPC_IMP(struct _lm_device_t *_pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchimm_sriov_invalidate_vf_block(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16_t vf_id,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u64_t invalidate_bock);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif /* VF_INVOLVED */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_status_t mm_er_initiate_recovery_imp(struct _lm_device_t * pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef void lm_generic_dpc_func(struct _lm_device_t *pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_status_t mm_register_dpc_imp(struct _lm_device_t *_pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_generic_dpc_func *func);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid mm_empty_ramrod_received_imp(struct _lm_device_t *_pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi const u32_t empty_data);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid mm_dbus_start_if_enabled_imp(struct _lm_device_t *_pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid mm_dbus_stop_if_started_imp(struct _lm_device_t *_pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#ifdef BIG_ENDIAN
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// LE
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define mm_le16_to_cpu_imp(val) SWAP_BYTES16(val)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define mm_cpu_to_le16_imp(val) SWAP_BYTES16(val)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define mm_le32_to_cpu_imp(val) SWAP_BYTES32(val)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define mm_cpu_to_le32_imp(val) SWAP_BYTES32(val)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// BE
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define mm_be32_to_cpu_imp(val) (val)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define mm_cpu_to_be32_imp(val) (val)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define mm_be16_to_cpu_imp(val) (val)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define mm_cpu_to_be16_imp(val) (val)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#else /* LITTLE_ENDIAN */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// LE
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define mm_le16_to_cpu_imp(val) (val)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define mm_cpu_to_le16_imp(val) (val)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define mm_le32_to_cpu_imp(val) (val)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define mm_cpu_to_le32_imp(val) (val)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// BE
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define mm_be32_to_cpu_imp(val) SWAP_BYTES32(val)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define mm_cpu_to_be32_imp(val) SWAP_BYTES32(val)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define mm_be16_to_cpu_imp(val) SWAP_BYTES16(val)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define mm_cpu_to_be16_imp(val) SWAP_BYTES16(val)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif /* ifdef BIG_ENDIAN */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiu32_t mm_get_cpu_count();
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define RESOURCE_TRACE_FLAG_COUNTERS 0x01
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define RESOURCE_TRACE_FLAG_DESC 0x02
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define RESOURCE_TRACE_FLAG_MDL 0x04 // Currently - not working well!!!
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MEM_TRACE_FLAG_HIGH (RESOURCE_TRACE_FLAG_COUNTERS | RESOURCE_TRACE_FLAG_DESC)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MEM_TRACE_FLAG_DEFAULT RESOURCE_TRACE_FLAG_COUNTERS
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define RESOURCE_TRACE_INC(_pdev, _cli_idx, _type, _field) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{ \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi DbgBreakIf((_cli_idx) >= MAX_DO_TYPE_CNT); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi DbgBreakIf((_type) >= RESOURCE_TYPE_MAX); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi InterlockedIncrement((long*)&_pdev->resource_list. \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi type_counters_arr[_cli_idx][_type]. \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi _field); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define RESOURCE_TRACE_DEC(_pdev, _cli_idx, _type, _field) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{ \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi DbgBreakIf((_cli_idx) >= MAX_DO_TYPE_CNT); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi DbgBreakIf((_type) >= RESOURCE_TYPE_MAX); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi InterlockedDecrement((long*)&_pdev->resource_list. \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi type_counters_arr[_cli_idx][_type]. \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi _field); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define RESOURCE_TRACE_ADD(_pdev, _cli_idx, _type, _field, _size) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{ \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi DbgBreakIf((_cli_idx) >= MAX_DO_TYPE_CNT); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi DbgBreakIf((_type) >= RESOURCE_TYPE_MAX); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi InterlockedExchangeAdd((long*)&(_pdev->resource_list. \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi type_counters_arr[_cli_idx][_type]. \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi _field), (long)(_size)); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define RESOURCE_TRACE_SUB(_pdev, _cli_idx, _type, _field, _size) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi RESOURCE_TRACE_ADD( _pdev, _cli_idx, _type, _field, 0L-(long)_size)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define RESOURCE_TRACE_UPDATE_PEAK(_pdev, _cli_idx, _type) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{ \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi DbgBreakIf((_cli_idx) >= MAX_DO_TYPE_CNT); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi DbgBreakIf((_type) >= RESOURCE_TYPE_MAX); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (_pdev->resource_list.type_counters_arr[_cli_idx][_type].size > \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi _pdev->resource_list.type_counters_arr[_cli_idx][_type].size_peak) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi _pdev->resource_list.type_counters_arr[_cli_idx][_type].size_peak = \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi _pdev->resource_list.type_counters_arr[_cli_idx][_type].size; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (_pdev->resource_list.type_counters_arr[_cli_idx][_type].cnt > \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi _pdev->resource_list.type_counters_arr[_cli_idx][_type].cnt_peak) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi _pdev->resource_list.type_counters_arr[_cli_idx][_type].cnt_peak = \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi _pdev->resource_list.type_counters_arr[_cli_idx][_type].cnt; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* this is _NTDDK_ only... */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiu32_t mm_get_wol_flags(struct _lm_device_t* pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* this is _NTDDK_ only... */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiu32_t mm_get_vmq_cnt(struct _lm_device_t* pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* this is _NTDDK_ only... */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiu32_t mm_get_feature_flags(struct _lm_device_t* pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiu32_t mm_get_cap_offset(struct _lm_device_t *pdev, u32_t cap_id);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid mm_dcb_indicate_event(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN lm_event_code_t event,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN u8_t *event_buf,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN u32_t event_buf_size
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi );
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MM_DCB_INDICATE_EVENT(_pdev,_event,_event_buf, _event_buf_size) mm_dcb_indicate_event(_pdev,_event,_event_buf, _event_buf_size)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiu32_t
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchimm_dcb_mp_l2_is_enable(struct _lm_device_t *pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MM_DCB_MP_L2_IS_ENABLE(_pdev) (mm_dcb_mp_l2_is_enable(pdev))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi