Print this page
NEX-1890 update oce from source provided by Emulex
        
*** 17,28 ****
   * information: Portions Copyright [yyyy] [name of copyright owner]
   *
   * CDDL HEADER END
   */
  
! /* Copyright © 2003-2011 Emulex. All rights reserved.  */
  
  /*
   * Driver specific data structures and function prototypes
   */
  
  #ifndef _OCE_IMPL_H_
--- 17,33 ----
   * information: Portions Copyright [yyyy] [name of copyright owner]
   *
   * CDDL HEADER END
   */
  
! /*
!  * Copyright (c) 2009-2012 Emulex. All rights reserved.
!  * Use is subject to license terms.
!  */
  
+ 
+ 
  /*
   * Driver specific data structures and function prototypes
   */
  
  #ifndef _OCE_IMPL_H_
*** 32,45 ****
--- 37,52 ----
  extern "C" {
  #endif
  
  #include <sys/types.h>
  #include <sys/dditypes.h>
+ #include <sys/sysmacros.h>
  #include <sys/kstat.h>
  #include <sys/ddi_intr.h>
  #include <sys/cmn_err.h>
  #include <sys/byteorder.h>
+ #include <netinet/ip6.h>
  #include <sys/mac_provider.h>
  #include <sys/mac_ether.h>
  #include <sys/gld.h>
  #include <sys/bitmap.h>
  #include <sys/ddidmareq.h>
*** 65,74 ****
--- 72,82 ----
  #include <oce_hw.h>
  #include <oce_hw_eth.h>
  #include <oce_io.h>
  #include <oce_buf.h>
  #include <oce_utils.h>
+ #include <oce_ring.h>
  #include <oce_version.h>
  
  #define SIZE_128        128
  #define SIZE_256        256
  #define SIZE_512        512
*** 77,148 ****
  #define SIZE_4K         (4 * 1024)
  #define SIZE_8K         (8 * 1024)
  
  #define END             0xdeadface
  
- #define MAX_DEVS                32
- #define MAX_RSS_PER_ADAPTER     2
- 
- #define OCE_MAX_ETH_FRAME_SIZE  1500
  #define OCE_MAX_JUMBO_FRAME_SIZE 9018
- #define OCE_MIN_ETH_FRAME_SIZE  64
- #define OCE_LLC_SNAP_HDR_LEN    8
  
  #define OCE_MIN_MTU     1500
  #define OCE_MAX_MTU     9000
  #define OCE_MAX_MCA     32
- #define OCE_RQ_MAX_FRAME_SZ 9018
  
! #define OCE_MAX_EQ      8
  #define OCE_MAX_CQ      1024
- #define OCE_MAX_WQ      8
- #define OCE_MAX_RQ      5
- #define OCE_MIN_RQ      1
  
  #define OCE_WQ_NUM_BUFFERS              2048
  #define OCE_WQ_BUF_SIZE                 2048
  #define OCE_LSO_MAX_SIZE                (64 * 1024)
  #define OCE_DEFAULT_TX_BCOPY_LIMIT      512
  #define OCE_DEFAULT_RX_BCOPY_LIMIT      128
  #define OCE_DEFAULT_WQ_EQD              16
  
! #define OCE_DEFAULT_TX_RING_SIZE        2048
! #define OCE_DEFAULT_RX_RING_SIZE        1024
  #define OCE_DEFAULT_WQS                 1
- #if defined(__sparc)
- #define OCE_DEFAULT_RQS                 OCE_MAX_RQ
- #else
- #define OCE_DEFAULT_RQS                 OCE_MIN_RQ
- #endif
  
! #define OCE_DEFAULT_RX_PKT_PER_INTR (OCE_DEFAULT_RX_RING_SIZE / 2)
! #define OCE_DEFAULT_TX_RECLAIM_THRESHOLD 1024
  #define OCE_MAX_RQ_POSTS                255
  #define OCE_RQ_NUM_BUFFERS              2048
! #define OCE_RQ_BUF_SIZE                 8192
! #define OCE_DEFAULT_RECHARGE_THRESHOLD  OCE_MAX_RQ_POSTS
! #define OCE_NUM_USED_VECTORS            2
  #define OCE_ITBL_SIZE                   64
  #define OCE_HKEY_SIZE                   40
! #define OCE_DMA_ALIGNMENT               0x1000ull
! 
  #define OCE_MIN_VECTORS                 1
  
! #define OCE_CAPAB_FLAGS (MBX_RX_IFACE_FLAGS_BROADCAST           | \
!                         MBX_RX_IFACE_FLAGS_PROMISCUOUS          | \
!                         MBX_RX_IFACE_FLAGS_UNTAGGED             | \
!                         MBX_RX_IFACE_FLAGS_MCAST_PROMISCUOUS    | \
!                         MBX_RX_IFACE_FLAGS_PASS_L3L4)
  
- #define OCE_CAPAB_ENABLE        (MBX_RX_IFACE_FLAGS_BROADCAST   | \
-                                 MBX_RX_IFACE_FLAGS_UNTAGGED     | \
-                                 MBX_RX_IFACE_FLAGS_PASS_L3L4)
- 
  #define OCE_FM_CAPABILITY       (DDI_FM_EREPORT_CAPABLE         | \
                                  DDI_FM_ACCCHK_CAPABLE           | \
                                  DDI_FM_DMACHK_CAPABLE)
- 
  #define OCE_DEFAULT_RSS_TYPE    (RSS_ENABLE_IPV4|RSS_ENABLE_TCP_IPV4)
  
  /* flow control definitions */
  #define OCE_FC_NONE     0x00000000
  #define OCE_FC_TX       0x00000001
--- 85,143 ----
  #define SIZE_4K         (4 * 1024)
  #define SIZE_8K         (8 * 1024)
  
  #define END             0xdeadface
  
  #define OCE_MAX_JUMBO_FRAME_SIZE 9018
  
  #define OCE_MIN_MTU     1500
  #define OCE_MAX_MTU     9000
  #define OCE_MAX_MCA     32
  
! #define OCE_MAX_EQ      16
  #define OCE_MAX_CQ      1024
  
  #define OCE_WQ_NUM_BUFFERS      2048
  #define OCE_WQ_BUF_SIZE 2048
  #define OCE_LSO_MAX_SIZE (64 * 1024)
  #define OCE_DEFAULT_TX_BCOPY_LIMIT      512
  #define OCE_DEFAULT_RX_BCOPY_LIMIT      128
  #define OCE_DEFAULT_WQ_EQD      16
  
! #define OCE_DEFAULT_RX_PKTS_PER_INTR 64
! #define OCE_DEFAULT_TX_RECLAIM_THRESHOLD 1024
! 
! #define OCE_MAX_RSS_RINGS               16
! #define OCE_MAX_RING_GROUPS             4
! #define OCE_MAX_RING_PER_GROUP  (OCE_MAX_RSS_RINGS+1)
! #define OCE_MIN_RING_PER_GROUP  1
! #define OCE_MAX_RQ                              (OCE_MAX_EQ+1)
! #define OCE_MAX_WQ                              OCE_MAX_EQ
! #define OCE_MIN_RQ                              1
! #define OCE_MIN_WQ                              1
! #define OCE_DEF_RING_PER_GROUP  OCE_MAX_RING_PER_GROUP
! #define OCE_DEFAULT_RQS                 5
  #define OCE_DEFAULT_WQS                 1
  
! #define OCE_MAX_SMAC_PER_DEV    128
! #define OCE_MAX_PMAC_PER_GRP    OCE_MAX_SMAC_PER_DEV
! 
  #define OCE_MAX_RQ_POSTS        255
  #define OCE_RQ_NUM_BUFFERS      2048
! #define OCE_RQ_BUF_SIZE         2048
! #define OCE_DEFAULT_RECHARGE_THRESHOLD  32
  #define OCE_ITBL_SIZE           64
  #define OCE_HKEY_SIZE           40
! #define OCE_DMA_ALIGNMENT       0x0000000000001000ull
  #define OCE_MIN_VECTORS         1
  
! #define OCE_DEFAULT_TX_RING_SIZE    2048
! #define OCE_DEFAULT_RX_RING_SIZE    1024
  
  #define OCE_FM_CAPABILITY               (DDI_FM_EREPORT_CAPABLE |       \
                                          DDI_FM_ACCCHK_CAPABLE   |       \
                                          DDI_FM_DMACHK_CAPABLE)
  #define OCE_DEFAULT_RSS_TYPE    (RSS_ENABLE_IPV4|RSS_ENABLE_TCP_IPV4)
  
  /* flow control definitions */
  #define OCE_FC_NONE     0x00000000
  #define OCE_FC_TX       0x00000001
*** 151,160 ****
--- 146,157 ----
  
  /* PCI Information */
  #define OCE_DEV_CFG_BAR 0x01
  #define OCE_PCI_CSR_BAR 0x02
  #define OCE_PCI_DB_BAR  0x03
+ /* Lancer DB Bar */
+ #define OCE_PCI_LANCER_DB_BAR   0x01
  
  /* macros for device IO */
  #define OCE_READ_REG32(handle, addr) ddi_get32(handle, addr)
  #define OCE_WRITE_REG32(handle, addr, value) ddi_put32(handle, addr, value)
  
*** 185,232 ****
  #define OCE_PCI_FUNC(dev) \
          ((OCE_CFG_READ32(dev, PCICFG_INTR_CTRL) \
              >> HOSTINTR_PFUNC_SHIFT) & HOSTINTR_PFUNC_MASK)
  
  #define DEV_LOCK(dev)   mutex_enter(&dev->dev_lock)
- 
  #define DEV_UNLOCK(dev) mutex_exit(&dev->dev_lock)
  
  enum oce_ring_size {
          RING_SIZE_256  = 256,
          RING_SIZE_512  = 512,
          RING_SIZE_1024 = 1024,
          RING_SIZE_2048 = 2048
  };
  
! enum oce_driver_state {
!         STATE_INIT              = 0x2,
          STATE_MAC_STARTED       = 0x4,
!         STATE_QUIESCE           = 0x8,
!         STATE_MAC_STOPPING      = 0x10
  };
  
  struct oce_dev {
          kmutex_t bmbx_lock;             /* Bootstrap Lock */
          kmutex_t dev_lock;              /* lock for device */
  
          /* Queues relarted */
!         struct oce_wq *wq[OCE_MAX_WQ];  /* TXQ Array */
!         struct oce_rq *rq[OCE_MAX_RQ];  /* RXQ Array */
!         struct oce_cq *cq[OCE_MAX_CQ];  /* Completion Queues */
!         struct oce_eq *eq[OCE_MAX_EQ];  /* Event Queues */
          struct oce_mq *mq;              /* MQ ring */
  
          /* driver state  machine */
!         enum oce_driver_state state;    /* state */
          boolean_t suspended;            /* CPR */
          uint32_t attach_state;          /* attach progress */
  
!         oce_dma_buf_t *bmbx;            /* Bootstrap MailBox */
  
          uint32_t tx_bcopy_limit;        /* TX BCOPY Limit */
          uint32_t rx_bcopy_limit;        /* RX BCOPY Limit */
          uint32_t tx_reclaim_threshold;  /* Tx reclaim */
          uint32_t rx_pkt_per_intr;       /* Rx pkts processed per intr */
  
          /* BARS */
          int num_bars;
          ddi_acc_handle_t pci_cfg_handle; /* Config space handle */
--- 182,289 ----
  #define OCE_PCI_FUNC(dev) \
          ((OCE_CFG_READ32(dev, PCICFG_INTR_CTRL) \
              >> HOSTINTR_PFUNC_SHIFT) & HOSTINTR_PFUNC_MASK)
  
  #define DEV_LOCK(dev)   mutex_enter(&dev->dev_lock)
  #define DEV_UNLOCK(dev) mutex_exit(&dev->dev_lock)
  
  enum oce_ring_size {
          RING_SIZE_256  = 256,
          RING_SIZE_512  = 512,
          RING_SIZE_1024 = 1024,
          RING_SIZE_2048 = 2048
  };
  
! enum oce_device_state {
          STATE_MAC_STARTED       = 0x4,
!         STATE_INTR_ENABLED      = 0x8,
!         STATE_MAC_STOPPING      = 0x10,
!         STATE_INTR_ADJUST       = 0x20
  };
  
+ enum oce_group_state {
+         GROUP_INIT              = 0x01,
+         GROUP_MAC_STARTED       = 0x02,
+         GROUP_SUSPEND           = 0x04
+ };
+ 
+ #define ATTACH_DEV_INIT         0x1
+ #define ATTACH_FM_INIT          0x2
+ #define ATTACH_PCI_CFG          0x4
+ #define ATTACH_LOCK_INIT        0x8
+ #define ATTACH_PCI_INIT         0x10
+ #define ATTACH_HW_INIT          0x20
+ #define ATTACH_SETUP_INTR       0x100
+ #define ATTACH_STAT_INIT        0x200
+ #define ATTACH_MAC_REG          0x400
+ #define ATTACH_CB_REG           0x1000
+ #define ATTACH_ALLOC_QUEUES     0x2000
+ #define ATTACH_REG_INTR_HANDLE  0x4000
+ 
+ typedef union oce_ring_s {
+                 struct oce_rq *rx;
+                 struct oce_wq *tx;
+ } oce_ring_t;
+ 
+ 
+ typedef struct oce_group_s
+ {
+         kmutex_t grp_lock; /* lock for group data */
+         mac_ring_type_t grp_type; /* tx or rx ring group */
+         uint32_t grp_num; /* index into the group array */
+         mac_group_handle_t handle; /* ring handle used by framework */
+         boolean_t rss_enable; /* if rx, whether rss or not */
+         uint32_t if_id; /* unique to a group */
+         uint32_t num_pmac; /* number of pmacs in this group */
+         uint32_t pmac_ids[OCE_MAX_PMAC_PER_GRP]; /* pmac ids of added pmacs */
+         struct ether_addr mac_addr[OCE_MAX_PMAC_PER_GRP]; /* MAC Addresses */
+         uint32_t num_rings;
+         uint32_t eq_idx;
+         oce_ring_t ring[OCE_MAX_RING_PER_GROUP];
+         void *parent;
+         enum oce_group_state state;
+ 
+         uint16_t num_mca; /* MCA supported */
+         struct ether_addr multi_cast[OCE_MAX_MCA]; /* MC TABLE */
+ }oce_group_t;
+ 
  struct oce_dev {
          kmutex_t bmbx_lock; /* Bootstrap Lock */
          kmutex_t dev_lock; /* lock for device */
  
+         uint16_t QnQ_tag;
+         uint8_t QnQ_valid;
+         uint8_t QnQ_queried;
+ 
+         uint32_t rx_rings_per_group;
+         uint32_t num_rx_groups;
+         uint32_t num_tx_groups;
+         oce_group_t rx_group[OCE_MAX_RING_GROUPS];
+         /* ungrouped TX rings */
+         oce_ring_t default_tx_rings[OCE_MAX_WQ];
+         uint32_t rx_rings; /* total */
+         uint32_t tx_rings; /* total */
+         uint32_t rss_cnt;
+ 
          /* Queues relarted */
!         struct oce_wq *wq;      /* TXQ Array */
!         struct oce_rq *rq;      /* RXQ Array */
!         struct oce_cq **cq;     /* Completion Queues */
!         struct oce_eq *eq;      /* Event Queues */
          struct oce_mq *mq;      /* MQ ring */
  
          /* driver state  machine */
!         enum oce_device_state state;    /* state */
          boolean_t suspended;            /* CPR */
          uint32_t attach_state;          /* attach progress */
  
!         oce_dma_buf_t bmbx;             /* Bootstrap MailBox */
  
          uint32_t tx_bcopy_limit;        /* TX BCOPY Limit */
          uint32_t rx_bcopy_limit;        /* RX BCOPY Limit */
          uint32_t tx_reclaim_threshold;  /* Tx reclaim */
+         uint32_t tx_reclaim;            /* Tx reclaim */
          uint32_t rx_pkt_per_intr;       /* Rx pkts processed per intr */
  
          /* BARS */
          int num_bars;
          ddi_acc_handle_t pci_cfg_handle; /* Config space handle */
*** 239,258 ****
          ddi_acc_handle_t dev_cfg_handle; /* MMIO CONFIG SPACE */
          mac_handle_t mac_handle;        /* MAC HANDLE   */
  
          /* device stats */
          kstat_t *oce_kstats;            /* NIC STATS */
!         oce_dma_buf_t *stats_dbuf;      /* STATS BUFFER */
!         struct mbx_get_nic_stats *hw_stats;
          /* dev stats */
          uint32_t tx_errors;
          uint32_t tx_noxmtbuf;
  
          /* link status */
          link_state_t link_status;
          int32_t link_speed;             /* Link speed in Mbps */
  
          /* OS */
          uint32_t dev_id;        /* device ID or instance number */
          dev_info_t *dip;        /* device info structure for device tree node */
  
          /* Interrupt related */
--- 296,325 ----
          ddi_acc_handle_t dev_cfg_handle; /* MMIO CONFIG SPACE */
          mac_handle_t mac_handle;        /* MAC HANDLE   */
  
          /* device stats */
          kstat_t *oce_kstats;            /* NIC STATS */
!         oce_dma_buf_t stats_dbuf;       /* STATS BUFFER */
!         kmutex_t stat_lock;
! 
          /* dev stats */
          uint32_t tx_errors;
          uint32_t tx_noxmtbuf;
  
          /* link status */
          link_state_t link_status;
          int32_t link_speed;             /* Link speed in Mbps */
+         int32_t link_duplex;
+         uint16_t pvid;
+         uint16_t reco_priority; /* Recommended priority */
+         uint32_t vlan_prio_bmap; /* Available Vlan priorities bitmap */
  
+         /* watch dog timer related */
+         kmutex_t wd_lock;
+         boolean_t wd_enable;
+         timeout_id_t wd_id;
+ 
          /* OS */
          uint32_t dev_id;        /* device ID or instance number */
          dev_info_t *dip;        /* device info structure for device tree node */
  
          /* Interrupt related */
*** 260,290 ****
          int num_vectors;        /* number of vectors used */
          uint_t intr_pri;        /* interrupt priority */
          int intr_cap;
          ddi_intr_handle_t *htable;      /* intr handler table */
          int32_t hsize;
  
          /* device configuration */
          uint32_t rq_max_bufs;           /* maximum prealloced buffers */
          uint32_t rq_frag_size;          /* Rxq fragment size */
          enum oce_ring_size tx_ring_size;
          enum oce_ring_size rx_ring_size;
          uint32_t neqs;                  /* No of event queues */
          uint32_t nwqs;                  /* No of Work Queues */
          uint32_t nrqs;                  /* No of Receive Queues */
!         uint32_t nifs;                  /* No of interfaces created */
!         uint32_t tx_rings;
!         uint32_t rx_rings;
          uint32_t pmac_id;               /* used to add or remove mac */
          uint8_t unicast_addr[ETHERADDRL];
          uint32_t num_smac;
          uint32_t mtu;
          int32_t fm_caps;
-         boolean_t rss_enable;           /* RSS support */
          boolean_t lso_capable;          /* LSO */
          boolean_t promisc;              /* PROMISC MODE */
-         uint32_t if_cap_flags;          /* IF CAPAB */
          uint32_t flow_control;          /* flow control settings */
          uint8_t mac_addr[ETHERADDRL];   /* hardware mac address */
          uint16_t num_mca;               /* MCA supported */
          struct ether_addr multi_cast[OCE_MAX_MCA];      /* MC TABLE */
          uint32_t cookie;                /* used during fw download */
--- 327,355 ----
          int num_vectors;        /* number of vectors used */
          uint_t intr_pri;        /* interrupt priority */
          int intr_cap;
          ddi_intr_handle_t *htable;      /* intr handler table */
          int32_t hsize;
+         ddi_cb_handle_t cb_handle;      /* IRM: callback handle */
+         int max_vectors;                        /* IRM: max number of vectors */
  
          /* device configuration */
          uint32_t rq_max_bufs;           /* maximum prealloced buffers */
          uint32_t rq_frag_size;          /* Rxq fragment size */
          enum oce_ring_size tx_ring_size;
          enum oce_ring_size rx_ring_size;
          uint32_t neqs;                  /* No of event queues */
          uint32_t nwqs;                  /* No of Work Queues */
          uint32_t nrqs;                  /* No of Receive Queues */
!         uint32_t num_pmac;              /* Total pmacs on this port */
          uint32_t pmac_id;               /* used to add or remove mac */
          uint8_t unicast_addr[ETHERADDRL];
          uint32_t num_smac;
          uint32_t mtu;
          int32_t fm_caps;
          boolean_t lso_capable;          /* LSO */
          boolean_t promisc;              /* PROMISC MODE */
          uint32_t flow_control;          /* flow control settings */
          uint8_t mac_addr[ETHERADDRL];   /* hardware mac address */
          uint16_t num_mca;               /* MCA supported */
          struct ether_addr multi_cast[OCE_MAX_MCA];      /* MC TABLE */
          uint32_t cookie;                /* used during fw download */
*** 293,302 ****
--- 358,368 ----
          uint32_t config_number;
          uint32_t asic_revision;
          uint32_t port_id;
          uint32_t function_mode;
          uint32_t function_caps;
+         uint32_t drvfn_caps;
          uint32_t chip_rev;              /* Chip revision */
          uint32_t max_tx_rings;          /* Max Rx rings available */
          uint32_t max_rx_rings;          /* Max rx rings available */
          int32_t if_id;                  /* IF ID */
          uint8_t fn;                     /* function number */
*** 305,322 ****
          /* PCI related */
          uint16_t vendor_id;
          uint16_t device_id;
          uint16_t subsys_id;
          uint16_t subvendor_id;
-         uint8_t pci_bus;
-         uint8_t pci_device;
-         uint8_t pci_function;
-         uint8_t dev_list_index;
  
          /* Logging related */
          uint16_t mod_mask;              /* Log Mask */
          int16_t severity;               /* Log level */
  };
  
  /* GLD handler functions */
  int oce_m_start(void *arg);
  void oce_m_stop(void *arg);
--- 371,389 ----
          /* PCI related */
          uint16_t    vendor_id;
          uint16_t    device_id;
          uint16_t    subsys_id;
          uint16_t    subvendor_id;
  
          /* Logging related */
          uint16_t mod_mask;              /* Log Mask */
          int16_t severity;               /* Log level */
+ 
+         /* ue status */
+         uint32_t ue_mask_lo;
+         uint32_t ue_mask_hi;
+         uint32_t sli_family;
  };
  
  /* GLD handler functions */
  int oce_m_start(void *arg);
  void oce_m_stop(void *arg);
*** 337,347 ****
  
  /* Hardware start/stop functions */
  int oce_start(struct oce_dev *dev);
  void oce_stop(struct oce_dev *dev);
  int oce_identify_hw(struct oce_dev *dev);
- int oce_get_bdf(struct oce_dev *dev);
  
  /* FMA support Functions */
  void oce_fm_init(struct oce_dev *dev);
  void oce_fm_fini(struct oce_dev *dev);
  void oce_set_dma_fma_flags(int fm_caps);
--- 404,413 ----
*** 356,376 ****
  /* Interrupt handling */
  int oce_setup_intr(struct oce_dev *dev);
  int oce_teardown_intr(struct oce_dev *dev);
  int oce_setup_handlers(struct oce_dev *dev);
  void oce_remove_handler(struct oce_dev *dev);
! void oce_ei(struct oce_dev *dev);
! void oce_di(struct oce_dev *dev);
  void oce_chip_ei(struct oce_dev *dev);
  void oce_chip_di(struct oce_dev *dev);
  
  /* HW initialisation */
  int oce_hw_init(struct oce_dev *dev);
  void oce_hw_fini(struct oce_dev *dev);
! int oce_setup_adapter(struct oce_dev *dev);
! void oce_unsetup_adapter(struct oce_dev *dev);
  
  #ifdef __cplusplus
  }
  #endif
  
  #endif /* _OCE_IMPL_H_ */
--- 422,462 ----
  /* Interrupt handling */
  int oce_setup_intr(struct oce_dev *dev);
  int oce_teardown_intr(struct oce_dev *dev);
  int oce_setup_handlers(struct oce_dev *dev);
  void oce_remove_handler(struct oce_dev *dev);
! int oce_ei(struct oce_dev *dev);
! int oce_di(struct oce_dev *dev);
  void oce_chip_ei(struct oce_dev *dev);
  void oce_chip_di(struct oce_dev *dev);
  
  /* HW initialisation */
  int oce_hw_init(struct oce_dev *dev);
  void oce_hw_fini(struct oce_dev *dev);
! int oce_create_group(struct oce_dev *dev, oce_group_t *grp, uint32_t mode);
! void oce_delete_group(struct oce_dev *dev, oce_group_t *grp);
! void oce_delete_nw_interface(struct oce_dev *dev, oce_group_t *grp,
!     uint32_t mode);
! int oce_create_nw_interface(struct oce_dev *dev, oce_group_t *grp,
!     uint32_t mode);
! int oce_rq_init(struct oce_dev *dev, struct oce_rq *, uint32_t q_len,
!     uint32_t frag_size, uint32_t mtu);
! void oce_rq_fini(struct oce_dev *dev, struct oce_rq *rq);
  
+ /* Timer related */
+ void oce_enable_wd_timer(struct oce_dev  *dev);
+ void oce_disable_wd_timer(struct oce_dev *dev);
+ boolean_t oce_check_ue(struct oce_dev *dev);
+ boolean_t oce_tx_stall_check(struct oce_dev *dev);
+ 
+ /* Helper functions for crossbow ring groups */
+ int oce_start_group(oce_group_t *, boolean_t);
+ void oce_stop_group(oce_group_t *, boolean_t);
+ int oce_resume_group_rings(oce_group_t *);
+ void oce_suspend_group_rings(oce_group_t *);
+ void oce_group_create_itbl(oce_group_t *, char *);
+ 
  #ifdef __cplusplus
  }
  #endif
  
  #endif /* _OCE_IMPL_H_ */