4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan/*
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan * CDDL HEADER START
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan *
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan * The contents of this file are subject to the terms of the
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan * Common Development and Distribution License (the "License").
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan * You may not use this file except in compliance with the License.
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan *
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan * or http://www.opensolaris.org/os/licensing.
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan * See the License for the specific language governing permissions
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan * and limitations under the License.
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan *
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan * When distributing Covered Code, include this CDDL HEADER in each
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan * If applicable, add the following below this CDDL HEADER, with the
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan * fields enclosed by brackets "[]" replaced with your own identifying
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan * information: Portions Copyright [yyyy] [name of copyright owner]
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan *
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan * CDDL HEADER END
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan */
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan
3abb112f8485b33b6b9b52b340bede0a333c10bfGarrett D'Amore/* Copyright © 2003-2011 Emulex. All rights reserved. */
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan/*
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan * Driver specific data structures and function prototypes
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan */
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#ifndef _OCE_IMPL_H_
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#define _OCE_IMPL_H_
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#ifdef __cplusplus
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathanextern "C" {
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#endif
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#include <sys/types.h>
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#include <sys/dditypes.h>
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#include <sys/kstat.h>
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#include <sys/ddi_intr.h>
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#include <sys/cmn_err.h>
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#include <sys/byteorder.h>
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#include <sys/mac_provider.h>
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#include <sys/mac_ether.h>
3abb112f8485b33b6b9b52b340bede0a333c10bfGarrett D'Amore#include <sys/gld.h>
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#include <sys/bitmap.h>
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#include <sys/ddidmareq.h>
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#include <sys/kmem.h>
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#include <sys/ddi.h>
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#include <sys/sunddi.h>
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#include <sys/modctl.h>
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#include <sys/devops.h>
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#include <sys/systm.h>
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#include <sys/conf.h>
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#include <sys/dlpi.h>
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#include <sys/ethernet.h>
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#include <sys/strsun.h>
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#include <sys/pattr.h>
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#include <sys/strsubr.h>
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#include <sys/ddifm.h>
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#include <sys/fm/protocol.h>
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#include <sys/fm/util.h>
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#include <sys/fm/io/ddi.h>
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#include <sys/note.h>
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan#include <sys/pci.h>
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan#include <sys/random.h>
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#include <oce_hw.h>
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#include <oce_hw_eth.h>
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#include <oce_io.h>
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#include <oce_buf.h>
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#include <oce_utils.h>
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#include <oce_version.h>
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan#define SIZE_128 128
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan#define SIZE_256 256
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan#define SIZE_512 512
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan#define SIZE_1K 1024
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan#define SIZE_2K (2 * 1024)
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan#define SIZE_4K (4 * 1024)
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan#define SIZE_8K (8 * 1024)
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan#define END 0xdeadface
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan
3abb112f8485b33b6b9b52b340bede0a333c10bfGarrett D'Amore#define MAX_DEVS 32
3abb112f8485b33b6b9b52b340bede0a333c10bfGarrett D'Amore#define MAX_RSS_PER_ADAPTER 2
3abb112f8485b33b6b9b52b340bede0a333c10bfGarrett D'Amore
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan#define OCE_MAX_ETH_FRAME_SIZE 1500
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan#define OCE_MAX_JUMBO_FRAME_SIZE 9018
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan#define OCE_MIN_ETH_FRAME_SIZE 64
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan#define OCE_LLC_SNAP_HDR_LEN 8
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#define OCE_MIN_MTU 1500
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#define OCE_MAX_MTU 9000
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#define OCE_MAX_MCA 32
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#define OCE_RQ_MAX_FRAME_SZ 9018
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#define OCE_MAX_EQ 8
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#define OCE_MAX_CQ 1024
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#define OCE_MAX_WQ 8
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan#define OCE_MAX_RQ 5
3abb112f8485b33b6b9b52b340bede0a333c10bfGarrett D'Amore#define OCE_MIN_RQ 1
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan#define OCE_WQ_NUM_BUFFERS 2048
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan#define OCE_WQ_BUF_SIZE 2048
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan#define OCE_LSO_MAX_SIZE (64 * 1024)
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan#define OCE_DEFAULT_TX_BCOPY_LIMIT 512
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan#define OCE_DEFAULT_RX_BCOPY_LIMIT 128
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan#define OCE_DEFAULT_WQ_EQD 16
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan#define OCE_DEFAULT_TX_RING_SIZE 2048
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan#define OCE_DEFAULT_RX_RING_SIZE 1024
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan#define OCE_DEFAULT_WQS 1
3abb112f8485b33b6b9b52b340bede0a333c10bfGarrett D'Amore#if defined(__sparc)
3abb112f8485b33b6b9b52b340bede0a333c10bfGarrett D'Amore#define OCE_DEFAULT_RQS OCE_MAX_RQ
3abb112f8485b33b6b9b52b340bede0a333c10bfGarrett D'Amore#else
3abb112f8485b33b6b9b52b340bede0a333c10bfGarrett D'Amore#define OCE_DEFAULT_RQS OCE_MIN_RQ
3abb112f8485b33b6b9b52b340bede0a333c10bfGarrett D'Amore#endif
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan#define OCE_DEFAULT_RX_PKT_PER_INTR (OCE_DEFAULT_RX_RING_SIZE / 2)
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan#define OCE_DEFAULT_TX_RECLAIM_THRESHOLD 1024
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan#define OCE_MAX_RQ_POSTS 255
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan#define OCE_RQ_NUM_BUFFERS 2048
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan#define OCE_RQ_BUF_SIZE 8192
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#define OCE_DEFAULT_RECHARGE_THRESHOLD OCE_MAX_RQ_POSTS
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan#define OCE_NUM_USED_VECTORS 2
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan#define OCE_ITBL_SIZE 64
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan#define OCE_HKEY_SIZE 40
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan#define OCE_DMA_ALIGNMENT 0x1000ull
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan#define OCE_MIN_VECTORS 1
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan#define OCE_CAPAB_FLAGS (MBX_RX_IFACE_FLAGS_BROADCAST | \
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan MBX_RX_IFACE_FLAGS_PROMISCUOUS | \
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan MBX_RX_IFACE_FLAGS_UNTAGGED | \
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan MBX_RX_IFACE_FLAGS_MCAST_PROMISCUOUS | \
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan MBX_RX_IFACE_FLAGS_PASS_L3L4)
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan#define OCE_CAPAB_ENABLE (MBX_RX_IFACE_FLAGS_BROADCAST | \
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan MBX_RX_IFACE_FLAGS_UNTAGGED | \
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan MBX_RX_IFACE_FLAGS_PASS_L3L4)
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan
3abb112f8485b33b6b9b52b340bede0a333c10bfGarrett D'Amore#define OCE_FM_CAPABILITY (DDI_FM_EREPORT_CAPABLE | \
3abb112f8485b33b6b9b52b340bede0a333c10bfGarrett D'Amore DDI_FM_ACCCHK_CAPABLE | \
3abb112f8485b33b6b9b52b340bede0a333c10bfGarrett D'Amore DDI_FM_DMACHK_CAPABLE)
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan#define OCE_DEFAULT_RSS_TYPE (RSS_ENABLE_IPV4|RSS_ENABLE_TCP_IPV4)
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan/* flow control definitions */
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#define OCE_FC_NONE 0x00000000
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#define OCE_FC_TX 0x00000001
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#define OCE_FC_RX 0x00000002
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#define OCE_DEFAULT_FLOW_CONTROL (OCE_FC_TX | OCE_FC_RX)
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan/* PCI Information */
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#define OCE_DEV_CFG_BAR 0x01
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#define OCE_PCI_CSR_BAR 0x02
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#define OCE_PCI_DB_BAR 0x03
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan/* macros for device IO */
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#define OCE_READ_REG32(handle, addr) ddi_get32(handle, addr)
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#define OCE_WRITE_REG32(handle, addr, value) ddi_put32(handle, addr, value)
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#define OCE_CSR_READ32(dev, offset) \
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan OCE_READ_REG32((dev)->csr_handle, \
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan (uint32_t *)(void *)((dev)->csr_addr + offset))
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#define OCE_CSR_WRITE32(dev, offset, value) \
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan OCE_WRITE_REG32((dev)->csr_handle, \
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan (uint32_t *)(void *)((dev)->csr_addr + offset), value)
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#define OCE_DB_READ32(dev, offset) \
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan OCE_READ_REG32((dev)->db_handle, \
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan (uint32_t *)(void *)((dev)->db_addr + offset))
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#define OCE_DB_WRITE32(dev, offset, value) \
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan OCE_WRITE_REG32((dev)->db_handle, \
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan (uint32_t *)(void *)((dev)->db_addr + offset), value)
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#define OCE_CFG_READ32(dev, offset) \
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan OCE_READ_REG32((dev)->dev_cfg_handle, \
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan (uint32_t *)(void *)((dev)->dev_cfg_addr + offset))
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#define OCE_CFG_WRITE32(dev, offset, value) \
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan OCE_WRITE_REG32((dev)->dev_cfg_handle, \
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan (uint32_t *)(void *)((dev)->dev_cfg_addr + offset), value)
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#define OCE_PCI_FUNC(dev) \
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan ((OCE_CFG_READ32(dev, PCICFG_INTR_CTRL) \
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan >> HOSTINTR_PFUNC_SHIFT) & HOSTINTR_PFUNC_MASK)
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan
8d738d7d1f42180d941afa8b9a7310a2a437d17cSukumar Swaminathan#define DEV_LOCK(dev) mutex_enter(&dev->dev_lock)
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan
8d738d7d1f42180d941afa8b9a7310a2a437d17cSukumar Swaminathan#define DEV_UNLOCK(dev) mutex_exit(&dev->dev_lock)
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathanenum oce_ring_size {
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan RING_SIZE_256 = 256,
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan RING_SIZE_512 = 512,
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan RING_SIZE_1024 = 1024,
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan RING_SIZE_2048 = 2048
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan};
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathanenum oce_driver_state {
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan STATE_INIT = 0x2,
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan STATE_MAC_STARTED = 0x4,
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan STATE_QUIESCE = 0x8,
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan STATE_MAC_STOPPING = 0x10
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan};
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathanstruct oce_dev {
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan kmutex_t bmbx_lock; /* Bootstrap Lock */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan kmutex_t dev_lock; /* lock for device */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan /* Queues relarted */
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan struct oce_wq *wq[OCE_MAX_WQ]; /* TXQ Array */
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan struct oce_rq *rq[OCE_MAX_RQ]; /* RXQ Array */
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan struct oce_cq *cq[OCE_MAX_CQ]; /* Completion Queues */
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan struct oce_eq *eq[OCE_MAX_EQ]; /* Event Queues */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan struct oce_mq *mq; /* MQ ring */
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan /* driver state machine */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan enum oce_driver_state state; /* state */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan boolean_t suspended; /* CPR */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan uint32_t attach_state; /* attach progress */
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan oce_dma_buf_t *bmbx; /* Bootstrap MailBox */
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan uint32_t tx_bcopy_limit; /* TX BCOPY Limit */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan uint32_t rx_bcopy_limit; /* RX BCOPY Limit */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan uint32_t tx_reclaim_threshold; /* Tx reclaim */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan uint32_t rx_pkt_per_intr; /* Rx pkts processed per intr */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan /* BARS */
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan int num_bars;
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan ddi_acc_handle_t pci_cfg_handle; /* Config space handle */
8d738d7d1f42180d941afa8b9a7310a2a437d17cSukumar Swaminathan ddi_acc_handle_t cfg_handle; /* MMIO PCI Config Space Regs */
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan ddi_acc_handle_t csr_handle; /* MMIO Control Status Regs */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan caddr_t csr_addr;
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan caddr_t db_addr;
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan caddr_t dev_cfg_addr;
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan ddi_acc_handle_t db_handle; /* MMIO DoorBell Area */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan ddi_acc_handle_t dev_cfg_handle; /* MMIO CONFIG SPACE */
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan mac_handle_t mac_handle; /* MAC HANDLE */
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan /* device stats */
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan kstat_t *oce_kstats; /* NIC STATS */
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan oce_dma_buf_t *stats_dbuf; /* STATS BUFFER */
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan struct mbx_get_nic_stats *hw_stats;
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan /* dev stats */
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan uint32_t tx_errors;
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan uint32_t tx_noxmtbuf;
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan /* link status */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan link_state_t link_status;
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan int32_t link_speed; /* Link speed in Mbps */
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan /* OS */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan uint32_t dev_id; /* device ID or instance number */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan dev_info_t *dip; /* device info structure for device tree node */
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan /* Interrupt related */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan int intr_type; /* INTR TYPE USED */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan int num_vectors; /* number of vectors used */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan uint_t intr_pri; /* interrupt priority */
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan int intr_cap;
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan ddi_intr_handle_t *htable; /* intr handler table */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan int32_t hsize;
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan /* device configuration */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan uint32_t rq_max_bufs; /* maximum prealloced buffers */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan uint32_t rq_frag_size; /* Rxq fragment size */
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan enum oce_ring_size tx_ring_size;
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan enum oce_ring_size rx_ring_size;
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan uint32_t neqs; /* No of event queues */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan uint32_t nwqs; /* No of Work Queues */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan uint32_t nrqs; /* No of Receive Queues */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan uint32_t nifs; /* No of interfaces created */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan uint32_t tx_rings;
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan uint32_t rx_rings;
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan uint32_t pmac_id; /* used to add or remove mac */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan uint8_t unicast_addr[ETHERADDRL];
3abb112f8485b33b6b9b52b340bede0a333c10bfGarrett D'Amore uint32_t num_smac;
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan uint32_t mtu;
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan int32_t fm_caps;
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan boolean_t rss_enable; /* RSS support */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan boolean_t lso_capable; /* LSO */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan boolean_t promisc; /* PROMISC MODE */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan uint32_t if_cap_flags; /* IF CAPAB */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan uint32_t flow_control; /* flow control settings */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan uint8_t mac_addr[ETHERADDRL]; /* hardware mac address */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan uint16_t num_mca; /* MCA supported */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan struct ether_addr multi_cast[OCE_MAX_MCA]; /* MC TABLE */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan uint32_t cookie; /* used during fw download */
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan /* fw config: only relevant fields */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan uint32_t config_number;
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan uint32_t asic_revision;
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan uint32_t port_id;
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan uint32_t function_mode;
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan uint32_t function_caps;
3abb112f8485b33b6b9b52b340bede0a333c10bfGarrett D'Amore uint32_t chip_rev; /* Chip revision */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan uint32_t max_tx_rings; /* Max Rx rings available */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan uint32_t max_rx_rings; /* Max rx rings available */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan int32_t if_id; /* IF ID */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan uint8_t fn; /* function number */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan uint8_t fw_version[32]; /* fw version string */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan
3abb112f8485b33b6b9b52b340bede0a333c10bfGarrett D'Amore /* PCI related */
3abb112f8485b33b6b9b52b340bede0a333c10bfGarrett D'Amore uint16_t vendor_id;
3abb112f8485b33b6b9b52b340bede0a333c10bfGarrett D'Amore uint16_t device_id;
3abb112f8485b33b6b9b52b340bede0a333c10bfGarrett D'Amore uint16_t subsys_id;
3abb112f8485b33b6b9b52b340bede0a333c10bfGarrett D'Amore uint16_t subvendor_id;
3abb112f8485b33b6b9b52b340bede0a333c10bfGarrett D'Amore uint8_t pci_bus;
3abb112f8485b33b6b9b52b340bede0a333c10bfGarrett D'Amore uint8_t pci_device;
3abb112f8485b33b6b9b52b340bede0a333c10bfGarrett D'Amore uint8_t pci_function;
3abb112f8485b33b6b9b52b340bede0a333c10bfGarrett D'Amore uint8_t dev_list_index;
3abb112f8485b33b6b9b52b340bede0a333c10bfGarrett D'Amore
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan /* Logging related */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan uint16_t mod_mask; /* Log Mask */
5b9d3151a4426af9ad6ef2c2a178f13476b884b3Sukumar Swaminathan int16_t severity; /* Log level */
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan};
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan/* GLD handler functions */
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathanint oce_m_start(void *arg);
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathanvoid oce_m_stop(void *arg);
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathanmblk_t *oce_m_send(void *arg, mblk_t *pkt);
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathanint oce_m_promiscuous(void *arg, boolean_t enable);
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathanint oce_m_multicast(void *arg, boolean_t add, const uint8_t *mca);
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathanint oce_m_unicast(void *arg, const uint8_t *uca);
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathanboolean_t oce_m_getcap(void *arg, mac_capab_t cap, void *data);
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathanvoid oce_m_ioctl(void *arg, queue_t *wq, mblk_t *mp);
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathanint oce_m_setprop(void *arg, const char *name, mac_prop_id_t id,
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan uint_t size, const void *val);
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathanint oce_m_getprop(void *arg, const char *name, mac_prop_id_t id,
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer uint_t size, void *val);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyervoid oce_m_propinfo(void *arg, const char *pr_name, mac_prop_id_t pr_num,
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer mac_prop_info_handle_t prh);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathanint oce_m_stat(void *arg, uint_t stat, uint64_t *val);
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan/* Hardware start/stop functions */
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathanint oce_start(struct oce_dev *dev);
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathanvoid oce_stop(struct oce_dev *dev);
3abb112f8485b33b6b9b52b340bede0a333c10bfGarrett D'Amoreint oce_identify_hw(struct oce_dev *dev);
3abb112f8485b33b6b9b52b340bede0a333c10bfGarrett D'Amoreint oce_get_bdf(struct oce_dev *dev);
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan/* FMA support Functions */
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathanvoid oce_fm_init(struct oce_dev *dev);
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathanvoid oce_fm_fini(struct oce_dev *dev);
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathanvoid oce_set_dma_fma_flags(int fm_caps);
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathanvoid oce_set_reg_fma_flags(int fm_caps);
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathanvoid oce_set_tx_map_dma_fma_flags(int fm_caps);
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathanvoid oce_fm_ereport(struct oce_dev *dev, char *detail);
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathanint oce_fm_check_acc_handle(struct oce_dev *dev,
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan ddi_acc_handle_t acc_handle);
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathanint oce_fm_check_dma_handle(struct oce_dev *dev,
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan ddi_dma_handle_t dma_handle);
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan/* Interrupt handling */
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathanint oce_setup_intr(struct oce_dev *dev);
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathanint oce_teardown_intr(struct oce_dev *dev);
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathanint oce_setup_handlers(struct oce_dev *dev);
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathanvoid oce_remove_handler(struct oce_dev *dev);
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathanvoid oce_ei(struct oce_dev *dev);
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathanvoid oce_di(struct oce_dev *dev);
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathanvoid oce_chip_ei(struct oce_dev *dev);
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathanvoid oce_chip_di(struct oce_dev *dev);
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan
8d738d7d1f42180d941afa8b9a7310a2a437d17cSukumar Swaminathan/* HW initialisation */
8d738d7d1f42180d941afa8b9a7310a2a437d17cSukumar Swaminathanint oce_hw_init(struct oce_dev *dev);
8d738d7d1f42180d941afa8b9a7310a2a437d17cSukumar Swaminathanvoid oce_hw_fini(struct oce_dev *dev);
8d738d7d1f42180d941afa8b9a7310a2a437d17cSukumar Swaminathanint oce_setup_adapter(struct oce_dev *dev);
8d738d7d1f42180d941afa8b9a7310a2a437d17cSukumar Swaminathanvoid oce_unsetup_adapter(struct oce_dev *dev);
8d738d7d1f42180d941afa8b9a7310a2a437d17cSukumar Swaminathan
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#ifdef __cplusplus
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan}
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#endif
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan
4d0e50075058332ce0cd62bc2669a8a4dea45da0Sukumar Swaminathan#endif /* _OCE_IMPL_H_ */