9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi/*
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * This file and its contents are supplied under the terms of the
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * Common Development and Distribution License ("CDDL"), version 1.0.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * You may only use this file in accordance with the terms of version
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * 1.0 of the CDDL.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * A full copy of the text of the CDDL should have accompanied this
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * source. A copy of the CDDL is also available via the Internet at
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * http://www.illumos.org/license/CDDL.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi/*
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * Copyright 2015 OmniTI Computer Consulting, Inc. All rights reserved.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * Copyright 2016 Joyent, Inc.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#ifndef _I40E_OSDEP_H
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define _I40E_OSDEP_H
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#ifdef __cplusplus
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchiextern "C" {
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#endif
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#include <sys/types.h>
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#include <sys/ddi.h>
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#include <sys/sunddi.h>
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#include <sys/pci_cap.h>
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#include <sys/sysmacros.h>
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi/*
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * For the moment, we use this to basically deal with a few custom changes
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * particularly around the use of sprintf() in the common code. The DDI defines
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * sprintf() in a rather different way than the rest of the world expects it.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * This is currently necessary to indicate that we should use an alternate
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * behavior.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define I40E_ILLUMOS 1
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define DEBUGOUT(S) i40e_debug(NULL, 0, S)
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define DEBUGOUT1(S, A) i40e_debug(NULL, 0, S, A)
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define DEBUGOUT2(S, A, B) i40e_debug(NULL, 0, S, A, B)
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define DEBUGOUT3(S, A, B, C) i40e_debug(NULL, 0, S, A, B, C)
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define DEBUGOUT4(S, A, B, C, D) \
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_debug(NULL, 0, S, A, B, C, D)
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define DEBUGOUT5(S, A, B, C, D, E) \
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_debug(NULL, 0, S, A, B, C, D, E)
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define DEBUGOUT6(S, A, B, C, D, E, F) \
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_debug(NULL, 0, S, A, B, C, D, E, F)
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define DEBUGOUT7(S, A, B, C, D, E, F, G) \
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_debug(NULL, 0, S, A, B, C, D, E, F, G)
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define DEBUGFUNC(F) DEBUGOUT(F);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define UNREFERENCED_PARAMETER(x) _NOTE(ARGUNUSED(x))
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define UNREFERENCED_1PARAMETER(_p) UNREFERENCED_PARAMETER(_p)
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define UNREFERENCED_2PARAMETER(_p, _q) _NOTE(ARGUNUSED(_p, _q))
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define UNREFERENCED_3PARAMETER(_p, _q, _r) _NOTE(ARGUNUSED(_p, _q, _r))
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define UNREFERENCED_4PARAMETER(_p, _q, _r, _s) _NOTE(ARGUNUSED(_p, _q, _r, _s))
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define INLINE inline
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi/*
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * The mdb dmod needs to use this code as well, but mdb already defines TRUE and
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * FALSE in the module API. Thus we don't define these if we're building the
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * dmod, as indicated by _I40E_MDB_DMOD. However, if we don't define these, then
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * the shared code will be upset.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#ifndef _I40E_MDB_DMOD
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define FALSE B_FALSE
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define false B_FALSE
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define TRUE B_TRUE
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define true B_TRUE
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#endif /* _I40E_MDB_DMOD */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define CPU_TO_LE16(o) LE_16(o)
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define CPU_TO_LE32(s) LE_32(s)
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define CPU_TO_LE64(h) LE_64(h)
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define LE16_TO_CPU(a) LE_16(a)
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define LE32_TO_CPU(c) LE_32(c)
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define LE64_TO_CPU(k) LE_64(k)
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define I40E_NTOHS(a) ntohs(a)
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define I40E_NTOHL(a) ntohl(a)
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define I40E_HTONS(a) htons(a)
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define I40E_HTONL(a) htonl(a)
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define i40e_memset(a, b, c, d) memset((a), (b), (c))
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define i40e_memcpy(a, b, c, d) bcopy((b), (a), (c))
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define i40e_usec_delay(x) drv_usecwait(x)
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define i40e_msec_delay(x) drv_usecwait(1000 * (x))
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define FIELD_SIZEOF(x, y) (sizeof (((x*)0)->y))
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define BIT(a) (1UL << (a))
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define BIT_ULL(a) (1ULL << (a))
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchitypedef boolean_t bool;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchitypedef uint8_t u8;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchitypedef int8_t s8;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchitypedef uint16_t u16;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchitypedef int16_t s16;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchitypedef uint32_t u32;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchitypedef int32_t s32;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchitypedef uint64_t u64;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi/* long string relief */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchitypedef enum i40e_status_code i40e_status;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define __le16 u16
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define __le32 u32
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define __le64 u64
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define __be16 u16
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define __be32 u32
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define __be64 u64
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi/*
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * Most other systems use spin locks for interrupts. However, illumos always
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * uses a single kmutex_t for both and we decide what to do based on IPL (hint:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * it's not going to be a true spin lock, we'll use an adaptive mutex).
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchistruct i40e_spinlock {
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kmutex_t ispl_mutex;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi};
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi/*
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * Note, while prefetch is strictly not present on all architectures, (it's an
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * SSE extension on i386), it is expected that the platforms provide it.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define prefetch(x) prefetch_read_many(x)
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchistruct i40e_osdep {
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi off_t ios_reg_size;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ddi_acc_handle_t ios_reg_handle;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ddi_acc_handle_t ios_cfg_handle;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi struct i40e *ios_i40e;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi};
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi/*
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * This structure and its members are defined by the common code. This means we
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * cannot structure prefix it, even if we want to.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchistruct i40e_virt_mem {
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi void *va;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi u32 size;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi};
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi/*
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * The first three members of this structure are defined by the common code.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * This means we cannot structure prefix them, even if we wanted to.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchistruct i40e_dma_mem {
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi void *va; /* Virtual address. */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi u64 pa; /* Physical (DMA/Hardware) address. */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi size_t size; /* Buffer size. */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi /* illumos-private members */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ddi_acc_handle_t idm_acc_handle; /* Data access handle */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ddi_dma_handle_t idm_dma_handle; /* DMA handle */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi uint32_t idm_alignment; /* Requested alignment */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi};
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchistruct i40e_hw; /* forward decl */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define OS_DEP(hw) ((struct i40e_osdep *)((hw)->back))
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define i40e_read_pci_cfg(hw, reg) \
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi (pci_config_get16(OS_DEP(hw)->ios_cfg_handle, (reg)))
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define i40e_write_pci_cfg(hw, reg, value) \
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi (pci_config_put16(OS_DEP(hw)->ios_cfg_handle, (reg), (value)))
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi/*
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * Intel expects that the symbol wr32 and rd32 be defined to something which can
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * read and write the 32-bit register in PCI space.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * To make it easier for readers and satisfy the general agreement that macros
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * should be in all capitals, we use our own versions of these macros.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define wr32(hw, reg, value) \
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ddi_put32(OS_DEP(hw)->ios_reg_handle, \
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi (uint32_t *)((uintptr_t)(hw)->hw_addr + (reg)), (value))
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define rd32(hw, reg) \
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ddi_get32(OS_DEP(hw)->ios_reg_handle, \
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi (uint32_t *)((uintptr_t)(hw)->hw_addr + (reg)))
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define I40E_WRITE_REG wr32
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define I40E_READ_REG rd32
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi/*
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * The use of GLGEN_STAT presumes that we're only using this file for a PF
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * driver. If we end up doing a VF driver, then we'll want to logically change
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * this.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#define i40e_flush(hw) (void) rd32(hw, I40E_GLGEN_STAT)
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchiextern void i40e_debug(void *, u32, char *, ...);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchiextern boolean_t i40e_set_hw_bus_info(struct i40e_hw *);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#ifdef __cplusplus
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi}
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#endif
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#endif /* _I40E_OSDEP_H */