49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore/*
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore * Copyright (c) 2008-2016 Solarflare Communications Inc.
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore * All rights reserved.
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore *
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore * Redistribution and use in source and binary forms, with or without
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore * modification, are permitted provided that the following conditions are met:
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore *
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore * 1. Redistributions of source code must retain the above copyright notice,
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore * this list of conditions and the following disclaimer.
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore * 2. Redistributions in binary form must reproduce the above copyright notice,
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore * this list of conditions and the following disclaimer in the documentation
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore * and/or other materials provided with the distribution.
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore *
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore *
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore * The views and conclusions contained in the software and documentation are
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore * those of the authors and should not be interpreted as representing official
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore * policies, either expressed or implied, of the FreeBSD Project.
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore */
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#ifndef _SYS_EFSYS_H
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define _SYS_EFSYS_H
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#ifdef __cplusplus
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amoreextern "C" {
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#endif
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#include <sys/types.h>
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#include <sys/sysmacros.h>
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#include <sys/ddi.h>
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#include <sys/sunddi.h>
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#include <sys/cpuvar.h>
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#include <sys/disp.h>
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#include <sys/sdt.h>
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#include <sys/kstat.h>
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#include <sys/crc32.h>
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#include <sys/note.h>
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#include <sys/byteorder.h>
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_HAS_UINT64 1
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_USE_UINT64 0
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_HAS_SSE2_M128 0
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#ifdef _BIG_ENDIAN
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_IS_BIG_ENDIAN 1
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#endif
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#ifdef _LITTLE_ENDIAN
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_IS_LITTLE_ENDIAN 1
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#endif
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#include "efx_types.h"
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore/* Modifiers used for Windows builds */
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define __in
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define __in_opt
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define __in_ecount(_n)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define __in_ecount_opt(_n)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define __in_bcount(_n)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define __in_bcount_opt(_n)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define __out
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define __out_opt
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define __out_ecount(_n)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define __out_ecount_opt(_n)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define __out_bcount(_n)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define __out_bcount_opt(_n)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define __out_bcount_part(_n, _l)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define __out_bcount_part_opt(_n, _l)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define __deref_out
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define __inout
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define __inout_opt
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define __inout_ecount(_n)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define __inout_ecount_opt(_n)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define __inout_bcount(_n)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define __inout_bcount_opt(_n)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define __inout_bcount_full_opt(_n)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define __deref_out_bcount_opt(n)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define __checkReturn
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define __success(_x)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define __drv_when(_p, _c)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore/* Code inclusion options */
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_OPT_NAMES 1
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_OPT_SIENA 1
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_OPT_HUNTINGTON 1
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_OPT_MEDFORD 0
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#if DEBUG
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_OPT_CHECK_REG 1
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#else
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_OPT_CHECK_REG 0
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#endif
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_OPT_MCDI 1
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_OPT_MCDI_LOGGING 0
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_OPT_MCDI_PROXY_AUTH 0
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_OPT_MAC_STATS 1
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_OPT_LOOPBACK 1
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_OPT_MON_MCDI 1
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_OPT_MON_STATS 1
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_OPT_PHY_STATS 1
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_OPT_BIST 1
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_OPT_PHY_LED_CONTROL 1
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_OPT_VPD 1
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_OPT_NVRAM 1
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_OPT_BOOTCFG 1
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_OPT_DIAG 0
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_OPT_WOL 1
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_OPT_RX_SCALE 1
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_OPT_QSTATS 1
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_OPT_EV_PREFETCH 0
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_OPT_DECODE_INTR_FATAL 1
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_OPT_FILTER 1
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_OPT_LICENSING 0
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore/* ID */
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amoretypedef struct __efsys_identifier_s efsys_identifier_t;
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore/* DMA */
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amoretypedef uint64_t efsys_dma_addr_t;
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amoretypedef struct efsys_mem_s {
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ddi_dma_handle_t esm_dma_handle; /* DMA memory allocate/bind */
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ddi_acc_handle_t esm_acc_handle; /* DMA memory read/write */
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore caddr_t esm_base;
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore efsys_dma_addr_t esm_addr;
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore size_t esm_size;
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore size_t esm_used;
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore} efsys_mem_t;
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_MEM_ZERO(_esmp, _size) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore (void) bzero((_esmp)->esm_base, (_size))
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_MEM_READD(_esmp, _offset, _edp) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore do { \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore uint32_t *addr; \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ASSERT(IS_P2ALIGNED(_offset, sizeof (efx_dword_t))); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore addr = (void *)((_esmp)->esm_base + (_offset)); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore (_edp)->ed_u32[0] = ddi_get32((_esmp)->esm_acc_handle, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore addr); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore DTRACE_PROBE2(mem_readd, unsigned int, (_offset), \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore uint32_t, (_edp)->ed_u32[0]); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore } while (B_FALSE)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_MEM_READQ(_esmp, _offset, _eqp) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore do { \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore uint32_t *addr; \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ASSERT(IS_P2ALIGNED(_offset, sizeof (efx_qword_t))); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore addr = (void *)((_esmp)->esm_base + (_offset)); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore (_eqp)->eq_u32[0] = ddi_get32((_esmp)->esm_acc_handle, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore addr++); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore (_eqp)->eq_u32[1] = ddi_get32((_esmp)->esm_acc_handle, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore addr); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore DTRACE_PROBE3(mem_readq, unsigned int, (_offset), \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore uint32_t, (_eqp)->eq_u32[1], \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore uint32_t, (_eqp)->eq_u32[0]); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore } while (B_FALSE)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_MEM_READO(_esmp, _offset, _eop) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore do { \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore uint32_t *addr; \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ASSERT(IS_P2ALIGNED(_offset, sizeof (efx_oword_t))); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore addr = (void *)((_esmp)->esm_base + (_offset)); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore (_eop)->eo_u32[0] = ddi_get32((_esmp)->esm_acc_handle, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore addr++); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore (_eop)->eo_u32[1] = ddi_get32((_esmp)->esm_acc_handle, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore addr++); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore (_eop)->eo_u32[2] = ddi_get32((_esmp)->esm_acc_handle, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore addr++); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore (_eop)->eo_u32[3] = ddi_get32((_esmp)->esm_acc_handle, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore addr); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore DTRACE_PROBE5(mem_reado, unsigned int, (_offset), \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore uint32_t, (_eop)->eo_u32[3], \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore uint32_t, (_eop)->eo_u32[2], \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore uint32_t, (_eop)->eo_u32[1], \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore uint32_t, (_eop)->eo_u32[0]); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore } while (B_FALSE)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_MEM_WRITED(_esmp, _offset, _edp) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore do { \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore uint32_t *addr; \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ASSERT(IS_P2ALIGNED(_offset, sizeof (efx_dword_t))); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore DTRACE_PROBE2(mem_writed, unsigned int, (_offset), \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore uint32_t, (_edp)->ed_u32[0]); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore addr = (void *)((_esmp)->esm_base + (_offset)); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ddi_put32((_esmp)->esm_acc_handle, addr, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore (_edp)->ed_u32[0]); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore } while (B_FALSE)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_MEM_WRITEQ(_esmp, _offset, _eqp) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore do { \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore uint32_t *addr; \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ASSERT(IS_P2ALIGNED(_offset, sizeof (efx_qword_t))); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore DTRACE_PROBE3(mem_writeq, unsigned int, (_offset), \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore uint32_t, (_eqp)->eq_u32[1], \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore uint32_t, (_eqp)->eq_u32[0]); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore addr = (void *)((_esmp)->esm_base + (_offset)); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ddi_put32((_esmp)->esm_acc_handle, addr++, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore (_eqp)->eq_u32[0]); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ddi_put32((_esmp)->esm_acc_handle, addr, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore (_eqp)->eq_u32[1]); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore } while (B_FALSE)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_MEM_WRITEO(_esmp, _offset, _eop) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore do { \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore uint32_t *addr; \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ASSERT(IS_P2ALIGNED(_offset, sizeof (efx_oword_t))); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore DTRACE_PROBE5(mem_writeo, unsigned int, (_offset), \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore uint32_t, (_eop)->eo_u32[3], \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore uint32_t, (_eop)->eo_u32[2], \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore uint32_t, (_eop)->eo_u32[1], \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore uint32_t, (_eop)->eo_u32[0]); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore addr = (void *)((_esmp)->esm_base + (_offset)); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ddi_put32((_esmp)->esm_acc_handle, addr++, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore (_eop)->eo_u32[0]); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ddi_put32((_esmp)->esm_acc_handle, addr++, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore (_eop)->eo_u32[1]); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ddi_put32((_esmp)->esm_acc_handle, addr++, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore (_eop)->eo_u32[2]); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ddi_put32((_esmp)->esm_acc_handle, addr, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore (_eop)->eo_u32[3]); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore } while (B_FALSE)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_MEM_ADDR(_esmp) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ((_esmp)->esm_addr)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_MEM_IS_NULL(_esmp) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ((_esmp)->esm_base == NULL)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore/* BAR */
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amoretypedef struct efsys_bar_s {
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore kmutex_t esb_lock;
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ddi_acc_handle_t esb_handle;
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore caddr_t esb_base;
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore} efsys_bar_t;
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_BAR_READD(_esbp, _offset, _edp, _lock) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore do { \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore uint32_t *addr; \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ASSERT(IS_P2ALIGNED(_offset, sizeof (efx_dword_t))); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore if (_lock) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore mutex_enter(&((_esbp)->esb_lock)); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore addr = (void *)((_esbp)->esb_base + (_offset)); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore (_edp)->ed_u32[0] = ddi_get32((_esbp)->esb_handle, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore addr); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore DTRACE_PROBE2(bar_readd, unsigned int, (_offset), \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore uint32_t, (_edp)->ed_u32[0]); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore if (_lock) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore mutex_exit(&((_esbp)->esb_lock)); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore } while (B_FALSE)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_BAR_READQ(_esbp, _offset, _eqp) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore do { \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore uint32_t *addr; \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ASSERT(IS_P2ALIGNED(_offset, sizeof (efx_qword_t))); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore mutex_enter(&((_esbp)->esb_lock)); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore addr = (void *)((_esbp)->esb_base + (_offset)); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore (_eqp)->eq_u32[0] = ddi_get32((_esbp)->esb_handle, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore addr++); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore (_eqp)->eq_u32[1] = ddi_get32((_esbp)->esb_handle, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore addr); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore DTRACE_PROBE3(bar_readq, unsigned int, (_offset), \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore uint32_t, (_eqp)->eq_u32[1], \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore uint32_t, (_eqp)->eq_u32[0]); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore mutex_exit(&((_esbp)->esb_lock)); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore } while (B_FALSE)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_BAR_READO(_esbp, _offset, _eop, _lock) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore do { \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore uint32_t *addr; \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ASSERT(IS_P2ALIGNED(_offset, sizeof (efx_oword_t))); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore if (_lock) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore mutex_enter(&((_esbp)->esb_lock)); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore addr = (void *)((_esbp)->esb_base + (_offset)); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore (_eop)->eo_u32[0] = ddi_get32((_esbp)->esb_handle, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore addr++); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore (_eop)->eo_u32[1] = ddi_get32((_esbp)->esb_handle, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore addr++); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore (_eop)->eo_u32[2] = ddi_get32((_esbp)->esb_handle, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore addr++); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore (_eop)->eo_u32[3] = ddi_get32((_esbp)->esb_handle, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore addr); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore DTRACE_PROBE5(bar_reado, unsigned int, (_offset), \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore uint32_t, (_eop)->eo_u32[3], \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore uint32_t, (_eop)->eo_u32[2], \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore uint32_t, (_eop)->eo_u32[1], \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore uint32_t, (_eop)->eo_u32[0]); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore if (_lock) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore mutex_exit(&((_esbp)->esb_lock)); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore } while (B_FALSE)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_BAR_WRITED(_esbp, _offset, _edp, _lock) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore do { \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore uint32_t *addr; \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ASSERT(IS_P2ALIGNED(_offset, sizeof (efx_dword_t))); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore if (_lock) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore mutex_enter(&((_esbp)->esb_lock)); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore DTRACE_PROBE2(bar_writed, unsigned int, (_offset), \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore uint32_t, (_edp)->ed_u32[0]); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore addr = (void *)((_esbp)->esb_base + (_offset)); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ddi_put32((_esbp)->esb_handle, addr, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore (_edp)->ed_u32[0]); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore if (_lock) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore mutex_exit(&((_esbp)->esb_lock)); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore } while (B_FALSE)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_BAR_WRITEQ(_esbp, _offset, _eqp) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore do { \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore uint32_t *addr; \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ASSERT(IS_P2ALIGNED(_offset, sizeof (efx_qword_t))); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore mutex_enter(&((_esbp)->esb_lock)); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore DTRACE_PROBE3(bar_writeq, unsigned int, (_offset), \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore uint32_t, (_eqp)->eq_u32[1], \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore uint32_t, (_eqp)->eq_u32[0]); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore addr = (void *)((_esbp)->esb_base + (_offset)); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ddi_put32((_esbp)->esb_handle, addr++, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore (_eqp)->eq_u32[0]); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ddi_put32((_esbp)->esb_handle, addr, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore (_eqp)->eq_u32[1]); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore mutex_exit(&((_esbp)->esb_lock)); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore } while (B_FALSE)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore/*
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore * Guarantees 64bit aligned 64bit writes to write combined BAR mapping
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore * (required by PIO hardware)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore */
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_BAR_WC_WRITEQ(_esbp, _offset, _eqp) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore do { \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ASSERT(IS_P2ALIGNED(_offset, sizeof (efx_qword_t))); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore (void) (_esbp); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore /* FIXME: Perform a 64-bit write */ \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore EFSYS_ASSERT(0); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore } while (B_FALSE)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_BAR_WRITEO(_esbp, _offset, _eop, _lock) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore do { \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore uint32_t *addr; \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ASSERT(IS_P2ALIGNED(_offset, sizeof (efx_oword_t))); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore if (_lock) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore mutex_enter(&((_esbp)->esb_lock)); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore DTRACE_PROBE5(bar_writeo, unsigned int, (_offset), \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore uint32_t, (_eop)->eo_u32[3], \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore uint32_t, (_eop)->eo_u32[2], \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore uint32_t, (_eop)->eo_u32[1], \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore uint32_t, (_eop)->eo_u32[0]); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore addr = (void *)((_esbp)->esb_base + (_offset)); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ddi_put32((_esbp)->esb_handle, addr++, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore (_eop)->eo_u32[0]); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ddi_put32((_esbp)->esb_handle, addr++, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore (_eop)->eo_u32[1]); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ddi_put32((_esbp)->esb_handle, addr++, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore (_eop)->eo_u32[2]); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ddi_put32((_esbp)->esb_handle, addr, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore (_eop)->eo_u32[3]); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore if (_lock) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore mutex_exit(&((_esbp)->esb_lock)); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore } while (B_FALSE)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore/* Use the standard octo-word write for doorbell writes */
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_BAR_DOORBELL_WRITEO(_esbp, _offset, _eop) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore do { \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore EFSYS_BAR_WRITEO((_esbp), (_offset), (_eop), B_FALSE); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore } while (B_FALSE)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore/* SPIN */
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_SPIN(_us) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore drv_usecwait(_us)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore/* TODO: Perhaps this should use delay(9F)? */
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_SLEEP EFSYS_SPIN
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore/* BARRIERS */
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore/* Strict ordering guaranteed by devacc.devacc_attr_dataorder */
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_MEM_READ_BARRIER() membar_consumer()
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore/* TODO: Is ddi_put32() properly barriered? */
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_PIO_WRITE_BARRIER()
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore/* DMA SYNC */
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore/*
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore * It could be cheaper to sync entire map than calculate offset and
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore * size. If so, below macros should be updated to ignore these arguments
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore * and sync entire map.
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore */
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_DMA_SYNC_FOR_KERNEL(_esmp, _offset, _size) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore (void) ddi_dma_sync((_esmp)->esm_dma_handle, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore (_offset), (_size), DDI_DMA_SYNC_FORKERNEL)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_DMA_SYNC_FOR_DEVICE(_esmp, _offset, _size) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore (void) ddi_dma_sync((_esmp)->esm_dma_handle, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore (_offset), (_size), DDI_DMA_SYNC_FORDEV)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore/* TIMESTAMP */
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amoretypedef clock_t efsys_timestamp_t;
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore/* TODO: Arguably this could use gethrtime */
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_TIMESTAMP(_usp) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore do { \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore *(_usp) = drv_hztousec(ddi_get_lbolt()); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore } while (B_FALSE)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore/* KMEM */
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_KMEM_ALLOC(_esip, _size, _p) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore do { \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore (_esip) = (_esip); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore (_p) = kmem_zalloc((_size), KM_NOSLEEP); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore } while (B_FALSE)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_KMEM_FREE(_esip, _size, _p) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore do { \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore (_esip) = (_esip); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore kmem_free((_p), (_size)); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore } while (B_FALSE)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore/* LOCK */
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amoretypedef kmutex_t efsys_lock_t;
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_LOCK_MAGIC 0x000010c4
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_LOCK(_lockp, _state) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore do { \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore mutex_enter(_lockp); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore (_state) = EFSYS_LOCK_MAGIC; \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore } while (B_FALSE)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_UNLOCK(_lockp, _state) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore do { \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore if ((_state) != EFSYS_LOCK_MAGIC) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ASSERT(B_FALSE); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore mutex_exit(_lockp); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore } while (B_FALSE)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore/* STAT */
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amoretypedef kstat_named_t efsys_stat_t;
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_STAT_INCR(_knp, _delta) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore do { \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ((_knp)->value.ui64) += (_delta); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore } while (B_FALSE)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_STAT_DECR(_knp, _delta) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore do { \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ((_knp)->value.ui64) -= (_delta); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore } while (B_FALSE)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_STAT_SET(_knp, _val) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore do { \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ((_knp)->value.ui64) = (_val); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore } while (B_FALSE)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_STAT_SET_QWORD(_knp, _valp) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore do { \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ((_knp)->value.ui64) = LE_64((_valp)->eq_u64[0]); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore } while (B_FALSE)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_STAT_SET_DWORD(_knp, _valp) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore do { \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ((_knp)->value.ui64) = LE_32((_valp)->ed_u32[0]); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore } while (B_FALSE)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_STAT_INCR_QWORD(_knp, _valp) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore do { \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ((_knp)->value.ui64) += LE_64((_valp)->eq_u64[0]); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore } while (B_FALSE)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_STAT_SUBR_QWORD(_knp, _valp) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore do { \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ((_knp)->value.ui64) -= LE_64((_valp)->eq_u64[0]); \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _NOTE(CONSTANTCONDITION) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore } while (B_FALSE)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore/* ERR */
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amoreextern void sfxge_err(efsys_identifier_t *, unsigned int,
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore uint32_t, uint32_t);
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#if EFSYS_OPT_DECODE_INTR_FATAL
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_ERR(_esip, _code, _dword0, _dword1) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore sfxge_err((_esip), (_code), (_dword0), (_dword1))
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#endif
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore/* PROBE */
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_PROBE(_name) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore DTRACE_PROBE(_name)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_PROBE1(_name, _type1, _arg1) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore DTRACE_PROBE1(_name, _type1, _arg1)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_PROBE2(_name, _type1, _arg1, _type2, _arg2) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore DTRACE_PROBE2(_name, _type1, _arg1, _type2, _arg2)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_PROBE3(_name, _type1, _arg1, _type2, _arg2, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _type3, _arg3) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore DTRACE_PROBE3(_name, _type1, _arg1, _type2, _arg2, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _type3, _arg3)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_PROBE4(_name, _type1, _arg1, _type2, _arg2, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _type3, _arg3, _type4, _arg4) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore DTRACE_PROBE4(_name, _type1, _arg1, _type2, _arg2, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _type3, _arg3, _type4, _arg4)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_PROBE5(_name, _type1, _arg1, _type2, _arg2, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _type3, _arg3, _type4, _arg4, _type5, _arg5) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore DTRACE_PROBE5(_name, _type1, _arg1, _type2, _arg2, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _type3, _arg3, _type4, _arg4, _type5, _arg5)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_PROBE6(_name, _type1, _arg1, _type2, _arg2, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _type3, _arg3, _type4, _arg4, _type5, _arg5, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _type6, _arg6) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore DTRACE_PROBE6(_name, _type1, _arg1, _type2, _arg2, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _type3, _arg3, _type4, _arg4, _type5, _arg5, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _type6, _arg6)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_PROBE7(_name, _type1, _arg1, _type2, _arg2, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _type3, _arg3, _type4, _arg4, _type5, _arg5, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _type6, _arg6, _type7, _arg7) \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore DTRACE_PROBE7(_name, _type1, _arg1, _type2, _arg2, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _type3, _arg3, _type4, _arg4, _type5, _arg5, \
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore _type6, _arg6, _type7, _arg7)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore/* ASSERT */
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_ASSERT(_exp) ASSERT(_exp)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_ASSERT3U(_x, _op, _y) ASSERT3U(_x, _op, _y)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_ASSERT3S(_x, _op, _y) ASSERT3S(_x, _op, _y)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_ASSERT3P(_x, _op, _y) ASSERT3P(_x, _op, _y)
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore/* ROTATE */
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define EFSYS_HAS_ROTL_DWORD 0
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#ifdef __cplusplus
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore}
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#endif
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#endif /* _SYS_EFSYS_H */