liquidio: Consolidate common functionality
authorRaghu Vatsavayi <rvatsavayi@caviumnetworks.com>
Wed, 31 Aug 2016 18:03:20 +0000 (11:03 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 31 Aug 2016 21:12:46 +0000 (14:12 -0700)
Consolidate common functionality of various devices
from different files into lio_core.c/octeon_console.c.

Signed-off-by: Derek Chickles <derek.chickles@caviumnetworks.com>
Signed-off-by: Satanand Burla <satananda.burla@caviumnetworks.com>
Signed-off-by: Felix Manlunas <felix.manlunas@caviumnetworks.com>
Signed-off-by: Raghu Vatsavayi <raghu.vatsavayi@caviumnetworks.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
15 files changed:
drivers/net/ethernet/cavium/liquidio/Makefile
drivers/net/ethernet/cavium/liquidio/cn66xx_device.c
drivers/net/ethernet/cavium/liquidio/cn66xx_device.h
drivers/net/ethernet/cavium/liquidio/cn68xx_device.c
drivers/net/ethernet/cavium/liquidio/lio_core.c [new file with mode: 0644]
drivers/net/ethernet/cavium/liquidio/lio_ethtool.c
drivers/net/ethernet/cavium/liquidio/lio_main.c
drivers/net/ethernet/cavium/liquidio/octeon_console.c
drivers/net/ethernet/cavium/liquidio/octeon_device.c
drivers/net/ethernet/cavium/liquidio/octeon_device.h
drivers/net/ethernet/cavium/liquidio/octeon_main.h
drivers/net/ethernet/cavium/liquidio/octeon_mem_ops.c
drivers/net/ethernet/cavium/liquidio/octeon_network.h
drivers/net/ethernet/cavium/liquidio/octeon_nic.c
drivers/net/ethernet/cavium/liquidio/octeon_nic.h

index 2f366806835d730f39adc07060b0ec60d4a322d3..d44111df8452375c69c19fba8f448a5dbda7ab5b 100644 (file)
@@ -3,14 +3,15 @@
 #
 obj-$(CONFIG_LIQUIDIO) += liquidio.o
 
-liquidio-objs := lio_main.o  \
-             lio_ethtool.o      \
-             request_manager.o  \
-             response_manager.o \
-             octeon_device.o    \
-             cn66xx_device.o    \
-             cn68xx_device.o    \
-             octeon_mem_ops.o   \
-             octeon_droq.o      \
-             octeon_console.o   \
-             octeon_nic.o
+liquidio-$(CONFIG_LIQUIDIO) += lio_ethtool.o \
+                       lio_core.o         \
+                       request_manager.o  \
+                       response_manager.o \
+                       octeon_device.o    \
+                       cn66xx_device.o    \
+                       cn68xx_device.o    \
+                       octeon_mem_ops.o   \
+                       octeon_droq.o      \
+                       octeon_nic.o
+
+liquidio-objs := lio_main.o octeon_console.o $(liquidio-y)
index c03d37016a48db385b5797ad9550895687229c0b..dc5d14a7effae98518ab4099719769393b66c821 100644 (file)
@@ -418,36 +418,6 @@ void lio_cn6xxx_disable_io_queues(struct octeon_device *oct)
                octeon_write_csr(oct, CN6XXX_SLI_PKT_TIME_INT, d32);
 }
 
-void lio_cn6xxx_reinit_regs(struct octeon_device *oct)
-{
-       int i;
-
-       for (i = 0; i < MAX_OCTEON_INSTR_QUEUES(oct); i++) {
-               if (!(oct->io_qmask.iq & (1ULL << i)))
-                       continue;
-               oct->fn_list.setup_iq_regs(oct, i);
-       }
-
-       for (i = 0; i < MAX_OCTEON_OUTPUT_QUEUES(oct); i++) {
-               if (!(oct->io_qmask.oq & (1ULL << i)))
-                       continue;
-               oct->fn_list.setup_oq_regs(oct, i);
-       }
-
-       oct->fn_list.setup_device_regs(oct);
-
-       oct->fn_list.enable_interrupt(oct->chip);
-
-       oct->fn_list.enable_io_queues(oct);
-
-       /* for (i = 0; i < oct->num_oqs; i++) { */
-       for (i = 0; i < MAX_OCTEON_OUTPUT_QUEUES(oct); i++) {
-               if (!(oct->io_qmask.oq & (1ULL << i)))
-                       continue;
-               writel(oct->droq[i]->max_count, oct->droq[i]->pkts_credit_reg);
-       }
-}
-
 void
 lio_cn6xxx_bar1_idx_setup(struct octeon_device *oct,
                          u64 core_addr,
@@ -714,7 +684,6 @@ int lio_setup_cn66xx_octeon_device(struct octeon_device *oct)
 
        oct->fn_list.soft_reset = lio_cn6xxx_soft_reset;
        oct->fn_list.setup_device_regs = lio_cn6xxx_setup_device_regs;
-       oct->fn_list.reinit_regs = lio_cn6xxx_reinit_regs;
        oct->fn_list.update_iq_read_idx = lio_cn6xxx_update_read_index;
 
        oct->fn_list.bar1_idx_setup = lio_cn6xxx_bar1_idx_setup;
index 28c47224221a64e26f461847f4a85a6724dd90e2..2e4bc25065f081059b6a36dd90edea766225c812 100644 (file)
@@ -83,7 +83,6 @@ void lio_cn6xxx_setup_oq_regs(struct octeon_device *oct, u32 oq_no);
 void lio_cn6xxx_enable_io_queues(struct octeon_device *oct);
 void lio_cn6xxx_disable_io_queues(struct octeon_device *oct);
 irqreturn_t lio_cn6xxx_process_interrupt_regs(void *dev);
-void lio_cn6xxx_reinit_regs(struct octeon_device *oct);
 void lio_cn6xxx_bar1_idx_setup(struct octeon_device *oct, u64 core_addr,
                               u32 idx, int valid);
 void lio_cn6xxx_bar1_idx_write(struct octeon_device *oct, u32 idx, u32 mask);
index 29755bc68f1202200f0805548c71ebb74054fa60..dbf3566ead538110d1c18ce21d75856a07393046 100644 (file)
@@ -148,7 +148,6 @@ int lio_setup_cn68xx_octeon_device(struct octeon_device *oct)
        oct->fn_list.process_interrupt_regs = lio_cn6xxx_process_interrupt_regs;
        oct->fn_list.soft_reset = lio_cn68xx_soft_reset;
        oct->fn_list.setup_device_regs = lio_cn68xx_setup_device_regs;
-       oct->fn_list.reinit_regs = lio_cn6xxx_reinit_regs;
        oct->fn_list.update_iq_read_idx = lio_cn6xxx_update_read_index;
 
        oct->fn_list.bar1_idx_setup = lio_cn6xxx_bar1_idx_setup;
diff --git a/drivers/net/ethernet/cavium/liquidio/lio_core.c b/drivers/net/ethernet/cavium/liquidio/lio_core.c
new file mode 100644 (file)
index 0000000..809179c
--- /dev/null
@@ -0,0 +1,261 @@
+/**********************************************************************
+* Author: Cavium, Inc.
+*
+* Contact: support@cavium.com
+*          Please include "LiquidIO" in the subject.
+*
+* Copyright (c) 2003-2015 Cavium, Inc.
+*
+* This file is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License, Version 2, as
+* published by the Free Software Foundation.
+*
+* This file is distributed in the hope that it will be useful, but
+* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
+* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
+* NONINFRINGEMENT.  See the GNU General Public License for more
+* details.
+*
+* This file may also be available under a different license from Cavium.
+* Contact Cavium, Inc. for more information
+**********************************************************************/
+#include <linux/pci.h>
+#include <linux/if_vlan.h>
+#include "liquidio_common.h"
+#include "octeon_droq.h"
+#include "octeon_iq.h"
+#include "response_manager.h"
+#include "octeon_device.h"
+#include "octeon_nic.h"
+#include "octeon_main.h"
+#include "octeon_network.h"
+
+int liquidio_set_feature(struct net_device *netdev, int cmd, u16 param1)
+{
+       struct lio *lio = GET_LIO(netdev);
+       struct octeon_device *oct = lio->oct_dev;
+       struct octnic_ctrl_pkt nctrl;
+       int ret = 0;
+
+       memset(&nctrl, 0, sizeof(struct octnic_ctrl_pkt));
+
+       nctrl.ncmd.u64 = 0;
+       nctrl.ncmd.s.cmd = cmd;
+       nctrl.ncmd.s.param1 = param1;
+       nctrl.iq_no = lio->linfo.txpciq[0].s.q_no;
+       nctrl.wait_time = 100;
+       nctrl.netpndev = (u64)netdev;
+       nctrl.cb_fn = liquidio_link_ctrl_cmd_completion;
+
+       ret = octnet_send_nic_ctrl_pkt(lio->oct_dev, &nctrl);
+       if (ret < 0) {
+               dev_err(&oct->pci_dev->dev, "Feature change failed in core (ret: 0x%x)\n",
+                       ret);
+       }
+       return ret;
+}
+
+void octeon_report_tx_completion_to_bql(void *txq, unsigned int pkts_compl,
+                                       unsigned int bytes_compl)
+{
+       struct netdev_queue *netdev_queue = txq;
+
+       netdev_tx_completed_queue(netdev_queue, pkts_compl, bytes_compl);
+}
+
+void octeon_update_tx_completion_counters(void *buf, int reqtype,
+                                         unsigned int *pkts_compl,
+                                         unsigned int *bytes_compl)
+{
+       struct octnet_buf_free_info *finfo;
+       struct sk_buff *skb = NULL;
+       struct octeon_soft_command *sc;
+
+       switch (reqtype) {
+       case REQTYPE_NORESP_NET:
+       case REQTYPE_NORESP_NET_SG:
+               finfo = buf;
+               skb = finfo->skb;
+               break;
+
+       case REQTYPE_RESP_NET_SG:
+       case REQTYPE_RESP_NET:
+               sc = buf;
+               skb = sc->callback_arg;
+               break;
+
+       default:
+               return;
+       }
+
+       (*pkts_compl)++;
+/*TODO, Use some other pound define to suggest
+ * the fact that iqs are not tied to netdevs
+ * and can take traffic from different netdevs
+ * hence bql reporting is done per packet
+ * than in bulk. Usage of NO_NAPI in txq completion is
+ * a little confusing
+ */
+       *bytes_compl += skb->len;
+}
+
+void octeon_report_sent_bytes_to_bql(void *buf, int reqtype)
+{
+       struct octnet_buf_free_info *finfo;
+       struct sk_buff *skb;
+       struct octeon_soft_command *sc;
+       struct netdev_queue *txq;
+
+       switch (reqtype) {
+       case REQTYPE_NORESP_NET:
+       case REQTYPE_NORESP_NET_SG:
+               finfo = buf;
+               skb = finfo->skb;
+               break;
+
+       case REQTYPE_RESP_NET_SG:
+       case REQTYPE_RESP_NET:
+               sc = buf;
+               skb = sc->callback_arg;
+               break;
+
+       default:
+               return;
+       }
+
+       txq = netdev_get_tx_queue(skb->dev, skb_get_queue_mapping(skb));
+       netdev_tx_sent_queue(txq, skb->len);
+}
+
+void liquidio_link_ctrl_cmd_completion(void *nctrl_ptr)
+{
+       struct octnic_ctrl_pkt *nctrl = (struct octnic_ctrl_pkt *)nctrl_ptr;
+       struct net_device *netdev = (struct net_device *)nctrl->netpndev;
+       struct lio *lio = GET_LIO(netdev);
+       struct octeon_device *oct = lio->oct_dev;
+       u8 *mac;
+
+       switch (nctrl->ncmd.s.cmd) {
+       case OCTNET_CMD_CHANGE_DEVFLAGS:
+       case OCTNET_CMD_SET_MULTI_LIST:
+               break;
+
+       case OCTNET_CMD_CHANGE_MACADDR:
+               mac = ((u8 *)&nctrl->udd[0]) + 2;
+               netif_info(lio, probe, lio->netdev,
+                          "MACAddr changed to %2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x\n",
+                          mac[0], mac[1],
+                          mac[2], mac[3],
+                          mac[4], mac[5]);
+               break;
+
+       case OCTNET_CMD_CHANGE_MTU:
+               /* If command is successful, change the MTU. */
+               netif_info(lio, probe, lio->netdev, "MTU Changed from %d to %d\n",
+                          netdev->mtu, nctrl->ncmd.s.param1);
+               dev_info(&oct->pci_dev->dev, "%s MTU Changed from %d to %d\n",
+                        netdev->name, netdev->mtu,
+                        nctrl->ncmd.s.param1);
+               rtnl_lock();
+               netdev->mtu = nctrl->ncmd.s.param1;
+               call_netdevice_notifiers(NETDEV_CHANGEMTU, netdev);
+               rtnl_unlock();
+               break;
+
+       case OCTNET_CMD_GPIO_ACCESS:
+               netif_info(lio, probe, lio->netdev, "LED Flashing visual identification\n");
+               break;
+
+       case OCTNET_CMD_LRO_ENABLE:
+               dev_info(&oct->pci_dev->dev, "%s LRO Enabled\n", netdev->name);
+               break;
+
+       case OCTNET_CMD_LRO_DISABLE:
+               dev_info(&oct->pci_dev->dev, "%s LRO Disabled\n",
+                        netdev->name);
+               break;
+
+       case OCTNET_CMD_VERBOSE_ENABLE:
+               dev_info(&oct->pci_dev->dev, "%s Firmware debug enabled\n",
+                        netdev->name);
+               break;
+
+       case OCTNET_CMD_VERBOSE_DISABLE:
+               dev_info(&oct->pci_dev->dev, "%s Firmware debug disabled\n",
+                        netdev->name);
+               break;
+
+       case OCTNET_CMD_ENABLE_VLAN_FILTER:
+               dev_info(&oct->pci_dev->dev, "%s VLAN filter enabled\n",
+                        netdev->name);
+               break;
+
+       case OCTNET_CMD_ADD_VLAN_FILTER:
+               dev_info(&oct->pci_dev->dev, "%s VLAN filter %d added\n",
+                        netdev->name, nctrl->ncmd.s.param1);
+               break;
+
+       case OCTNET_CMD_DEL_VLAN_FILTER:
+               dev_info(&oct->pci_dev->dev, "%s VLAN filter %d removed\n",
+                        netdev->name, nctrl->ncmd.s.param1);
+               break;
+
+       case OCTNET_CMD_SET_SETTINGS:
+               dev_info(&oct->pci_dev->dev, "%s settings changed\n",
+                        netdev->name);
+
+               break;
+
+       /* Case to handle "OCTNET_CMD_TNL_RX_CSUM_CTL"
+        * Command passed by NIC driver
+        */
+       case OCTNET_CMD_TNL_RX_CSUM_CTL:
+               if (nctrl->ncmd.s.param1 == OCTNET_CMD_RXCSUM_ENABLE) {
+                       netif_info(lio, probe, lio->netdev,
+                                  "RX Checksum Offload Enabled\n");
+               } else if (nctrl->ncmd.s.param1 ==
+                          OCTNET_CMD_RXCSUM_DISABLE) {
+                       netif_info(lio, probe, lio->netdev,
+                                  "RX Checksum Offload Disabled\n");
+               }
+               break;
+
+               /* Case to handle "OCTNET_CMD_TNL_TX_CSUM_CTL"
+                * Command passed by NIC driver
+                */
+       case OCTNET_CMD_TNL_TX_CSUM_CTL:
+               if (nctrl->ncmd.s.param1 == OCTNET_CMD_TXCSUM_ENABLE) {
+                       netif_info(lio, probe, lio->netdev,
+                                  "TX Checksum Offload Enabled\n");
+               } else if (nctrl->ncmd.s.param1 ==
+                          OCTNET_CMD_TXCSUM_DISABLE) {
+                       netif_info(lio, probe, lio->netdev,
+                                  "TX Checksum Offload Disabled\n");
+               }
+               break;
+
+               /* Case to handle "OCTNET_CMD_VXLAN_PORT_CONFIG"
+                * Command passed by NIC driver
+                */
+       case OCTNET_CMD_VXLAN_PORT_CONFIG:
+               if (nctrl->ncmd.s.more == OCTNET_CMD_VXLAN_PORT_ADD) {
+                       netif_info(lio, probe, lio->netdev,
+                                  "VxLAN Destination UDP PORT:%d ADDED\n",
+                                  nctrl->ncmd.s.param1);
+               } else if (nctrl->ncmd.s.more ==
+                          OCTNET_CMD_VXLAN_PORT_DEL) {
+                       netif_info(lio, probe, lio->netdev,
+                                  "VxLAN Destination UDP PORT:%d DELETED\n",
+                                  nctrl->ncmd.s.param1);
+               }
+               break;
+
+       case OCTNET_CMD_SET_FLOW_CTL:
+               netif_info(lio, probe, lio->netdev, "Set RX/TX flow control parameters\n");
+               break;
+
+       default:
+               dev_err(&oct->pci_dev->dev, "%s Unknown cmd %d\n", __func__,
+                       nctrl->ncmd.s.cmd);
+       }
+}
index 289eb890792267c96d6319e4e7461c22e1692cdc..f3ce7441cb5f1e0dccdb9ea5c56b3888ed8fbbf5 100644 (file)
@@ -290,18 +290,16 @@ lio_get_eeprom(struct net_device *netdev, struct ethtool_eeprom *eeprom,
        struct lio *lio = GET_LIO(netdev);
        struct octeon_device *oct_dev = lio->oct_dev;
        struct octeon_board_info *board_info;
-       int len;
 
-       if (eeprom->offset != 0)
+       if (eeprom->offset)
                return -EINVAL;
 
        eeprom->magic = oct_dev->pci_dev->vendor;
        board_info = (struct octeon_board_info *)(&oct_dev->boardinfo);
-       len =
-               sprintf((char *)bytes,
-                       "boardname:%s serialnum:%s maj:%lld min:%lld\n",
-                       board_info->name, board_info->serial_number,
-                       board_info->major, board_info->minor);
+       sprintf((char *)bytes,
+               "boardname:%s serialnum:%s maj:%lld min:%lld\n",
+               board_info->name, board_info->serial_number,
+               board_info->major, board_info->minor);
 
        return 0;
 }
@@ -406,7 +404,7 @@ octnet_mdio45_access(struct lio *lio, int op, int loc, int *value)
                dev_err(&oct_dev->pci_dev->dev,
                        "octnet_mdio45_access instruction failed status: %x\n",
                        retval);
-               retval =  -EBUSY;
+               retval = -EBUSY;
        } else {
                /* Sleep on a wait queue till the cond flag indicates that the
                 * response arrived
@@ -1320,8 +1318,8 @@ oct_cfg_rx_intrcnt(struct lio *lio, struct ethtool_coalesce *intr_coal)
        return 0;
 }
 
-static int oct_cfg_rx_intrtime(struct lio *lio, struct ethtool_coalesce
-                              *intr_coal)
+static int oct_cfg_rx_intrtime(struct lio *lio,
+                              struct ethtool_coalesce *intr_coal)
 {
        struct octeon_device *oct = lio->oct_dev;
        u32 time_threshold, rx_coalesce_usecs;
index f659a95ffc945d7283c20e55760f274213722da2..2abc110eaef844c1899cc28f10b5c81900b77c4e 100644 (file)
@@ -21,8 +21,6 @@
 **********************************************************************/
 #include <linux/version.h>
 #include <linux/pci.h>
-#include <linux/net_tstamp.h>
-#include <linux/if_vlan.h>
 #include <linux/firmware.h>
 #include <linux/ptp_clock_kernel.h>
 #include <net/vxlan.h>
@@ -52,11 +50,6 @@ module_param(ddr_timeout, int, 0644);
 MODULE_PARM_DESC(ddr_timeout,
                 "Number of milliseconds to wait for DDR initialization. 0 waits for ddr_timeout to be set to non-zero value before starting to check");
 
-static u32 console_bitmask;
-module_param(console_bitmask, int, 0644);
-MODULE_PARM_DESC(console_bitmask,
-                "Bitmask indicating which consoles have debug output redirected to syslog.");
-
 #define DEFAULT_MSG_ENABLE (NETIF_MSG_DRV | NETIF_MSG_PROBE | NETIF_MSG_LINK)
 
 #define INCR_INSTRQUEUE_PKT_COUNT(octeon_dev_ptr, iq_no, field, count)  \
@@ -162,27 +155,6 @@ struct octnic_gather {
        u64 sg_dma_ptr;
 };
 
-/** This structure is used by NIC driver to store information required
- * to free the sk_buff when the packet has been fetched by Octeon.
- * Bytes offset below assume worst-case of a 64-bit system.
- */
-struct octnet_buf_free_info {
-       /** Bytes 1-8.  Pointer to network device private structure. */
-       struct lio *lio;
-
-       /** Bytes 9-16.  Pointer to sk_buff. */
-       struct sk_buff *skb;
-
-       /** Bytes 17-24.  Pointer to gather list. */
-       struct octnic_gather *g;
-
-       /** Bytes 25-32. Physical address of skb->data or gather list. */
-       u64 dptr;
-
-       /** Bytes 33-47. Piggybacked soft command, if any */
-       struct octeon_soft_command *sc;
-};
-
 struct handshake {
        struct completion init;
        struct completion started;
@@ -198,6 +170,7 @@ struct octeon_device_priv {
 };
 
 static int octeon_device_init(struct octeon_device *);
+static int liquidio_stop(struct net_device *netdev);
 static void liquidio_remove(struct pci_dev *pdev);
 static int liquidio_probe(struct pci_dev *pdev,
                          const struct pci_device_id *ent);
@@ -252,76 +225,6 @@ static int lio_wait_for_oq_pkts(struct octeon_device *oct)
        return pkt_cnt;
 }
 
-void octeon_report_tx_completion_to_bql(void *txq, unsigned int pkts_compl,
-                                       unsigned int bytes_compl)
-{
-       struct netdev_queue *netdev_queue = txq;
-
-       netdev_tx_completed_queue(netdev_queue, pkts_compl, bytes_compl);
-}
-
-void octeon_update_tx_completion_counters(void *buf, int reqtype,
-                                         unsigned int *pkts_compl,
-                                         unsigned int *bytes_compl)
-{
-       struct octnet_buf_free_info *finfo;
-       struct sk_buff *skb = NULL;
-       struct octeon_soft_command *sc;
-
-       switch (reqtype) {
-       case REQTYPE_NORESP_NET:
-       case REQTYPE_NORESP_NET_SG:
-               finfo = buf;
-               skb = finfo->skb;
-               break;
-
-       case REQTYPE_RESP_NET_SG:
-       case REQTYPE_RESP_NET:
-               sc = buf;
-               skb = sc->callback_arg;
-               break;
-
-       default:
-               return;
-       }
-
-       (*pkts_compl)++;
-       *bytes_compl += skb->len;
-}
-
-void octeon_report_sent_bytes_to_bql(void *buf, int reqtype)
-{
-       struct octnet_buf_free_info *finfo;
-       struct sk_buff *skb;
-       struct octeon_soft_command *sc;
-       struct netdev_queue *txq;
-
-       switch (reqtype) {
-       case REQTYPE_NORESP_NET:
-       case REQTYPE_NORESP_NET_SG:
-               finfo = buf;
-               skb = finfo->skb;
-               break;
-
-       case REQTYPE_RESP_NET_SG:
-       case REQTYPE_RESP_NET:
-               sc = buf;
-               skb = sc->callback_arg;
-               break;
-
-       default:
-               return;
-       }
-
-       txq = netdev_get_tx_queue(skb->dev, skb_get_queue_mapping(skb));
-       netdev_tx_sent_queue(txq, skb->len);
-}
-
-int octeon_console_debug_enabled(u32 console)
-{
-       return (console_bitmask >> (console)) & 0x1;
-}
-
 /**
  * \brief Forces all IO queues off on a given device
  * @param oct Pointer to Octeon device
@@ -2173,7 +2076,7 @@ static inline int setup_io_queues(struct octeon_device *octeon_dev,
                                                   lio->ifidx), NULL);
                if (retval) {
                        dev_err(&octeon_dev->pci_dev->dev,
-                               " %s : Runtime DROQ(RxQ) creation failed.\n",
+                               "%s : Runtime DROQ(RxQ) creation failed.\n",
                                __func__);
                        return 1;
                }
@@ -2340,143 +2243,6 @@ static int liquidio_stop(struct net_device *netdev)
        return 0;
 }
 
-void liquidio_link_ctrl_cmd_completion(void *nctrl_ptr)
-{
-       struct octnic_ctrl_pkt *nctrl = (struct octnic_ctrl_pkt *)nctrl_ptr;
-       struct net_device *netdev = (struct net_device *)nctrl->netpndev;
-       struct lio *lio = GET_LIO(netdev);
-       struct octeon_device *oct = lio->oct_dev;
-       u8 *mac;
-
-       switch (nctrl->ncmd.s.cmd) {
-       case OCTNET_CMD_CHANGE_DEVFLAGS:
-       case OCTNET_CMD_SET_MULTI_LIST:
-               break;
-
-       case OCTNET_CMD_CHANGE_MACADDR:
-               mac = ((u8 *)&nctrl->udd[0]) + 2;
-               netif_info(lio, probe, lio->netdev,
-                          "%s %2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x\n",
-                          "MACAddr changed to", mac[0], mac[1],
-                          mac[2], mac[3], mac[4], mac[5]);
-               break;
-
-       case OCTNET_CMD_CHANGE_MTU:
-               /* If command is successful, change the MTU. */
-               netif_info(lio, probe, lio->netdev, " MTU Changed from %d to %d\n",
-                          netdev->mtu, nctrl->ncmd.s.param1);
-               dev_info(&oct->pci_dev->dev, "%s MTU Changed from %d to %d\n",
-                        netdev->name, netdev->mtu,
-                        nctrl->ncmd.s.param1);
-               rtnl_lock();
-               netdev->mtu = nctrl->ncmd.s.param1;
-               call_netdevice_notifiers(NETDEV_CHANGEMTU, netdev);
-               rtnl_unlock();
-               break;
-
-       case OCTNET_CMD_GPIO_ACCESS:
-               netif_info(lio, probe, lio->netdev, "LED Flashing visual identification\n");
-
-               break;
-
-       case OCTNET_CMD_LRO_ENABLE:
-               dev_info(&oct->pci_dev->dev, "%s LRO Enabled\n", netdev->name);
-               break;
-
-       case OCTNET_CMD_LRO_DISABLE:
-               dev_info(&oct->pci_dev->dev, "%s LRO Disabled\n",
-                        netdev->name);
-               break;
-
-       case OCTNET_CMD_VERBOSE_ENABLE:
-               dev_info(&oct->pci_dev->dev, "%s LRO Enabled\n", netdev->name);
-               break;
-
-       case OCTNET_CMD_VERBOSE_DISABLE:
-               dev_info(&oct->pci_dev->dev, "%s LRO Disabled\n",
-                        netdev->name);
-               break;
-
-       case OCTNET_CMD_ENABLE_VLAN_FILTER:
-               dev_info(&oct->pci_dev->dev, "%s VLAN filter enabled\n",
-                        netdev->name);
-               break;
-
-       case OCTNET_CMD_ADD_VLAN_FILTER:
-               dev_info(&oct->pci_dev->dev, "%s VLAN filter %d added\n",
-                        netdev->name, nctrl->ncmd.s.param1);
-               break;
-
-       case OCTNET_CMD_DEL_VLAN_FILTER:
-               dev_info(&oct->pci_dev->dev, "%s VLAN filter %d removed\n",
-                        netdev->name, nctrl->ncmd.s.param1);
-               break;
-
-       case OCTNET_CMD_SET_SETTINGS:
-               dev_info(&oct->pci_dev->dev, "%s settings changed\n",
-                        netdev->name);
-
-               break;
-               /* Case to handle "OCTNET_CMD_TNL_RX_CSUM_CTL"
-                * Command passed by NIC driver
-                */
-       case OCTNET_CMD_TNL_RX_CSUM_CTL:
-               if (nctrl->ncmd.s.param1 == OCTNET_CMD_RXCSUM_ENABLE) {
-                       netif_info(lio, probe, lio->netdev,
-                                  "%s RX Checksum Offload Enabled\n",
-                                  netdev->name);
-               } else if (nctrl->ncmd.s.param1 ==
-                          OCTNET_CMD_RXCSUM_DISABLE) {
-                       netif_info(lio, probe, lio->netdev,
-                                  "%s RX Checksum Offload Disabled\n",
-                                  netdev->name);
-               }
-               break;
-
-               /* Case to handle "OCTNET_CMD_TNL_TX_CSUM_CTL"
-                * Command passed by NIC driver
-                */
-       case OCTNET_CMD_TNL_TX_CSUM_CTL:
-               if (nctrl->ncmd.s.param1 == OCTNET_CMD_TXCSUM_ENABLE) {
-                       netif_info(lio, probe, lio->netdev,
-                                  "%s TX Checksum Offload Enabled\n",
-                                  netdev->name);
-               } else if (nctrl->ncmd.s.param1 ==
-                          OCTNET_CMD_TXCSUM_DISABLE) {
-                       netif_info(lio, probe, lio->netdev,
-                                  "%s TX Checksum Offload Disabled\n",
-                                  netdev->name);
-               }
-               break;
-
-               /* Case to handle "OCTNET_CMD_VXLAN_PORT_CONFIG"
-                * Command passed by NIC driver
-                */
-       case OCTNET_CMD_VXLAN_PORT_CONFIG:
-               if (nctrl->ncmd.s.more == OCTNET_CMD_VXLAN_PORT_ADD) {
-                       netif_info(lio, probe, lio->netdev,
-                                  "%s VxLAN Destination UDP PORT:%d ADDED\n",
-                                  netdev->name,
-                                  nctrl->ncmd.s.param1);
-               } else if (nctrl->ncmd.s.more ==
-                          OCTNET_CMD_VXLAN_PORT_DEL) {
-                       netif_info(lio, probe, lio->netdev,
-                                  "%s VxLAN Destination UDP PORT:%d DELETED\n",
-                                  netdev->name,
-                                  nctrl->ncmd.s.param1);
-               }
-               break;
-
-       case OCTNET_CMD_SET_FLOW_CTL:
-               netif_info(lio, probe, lio->netdev, "Set RX/TX flow control parameters\n");
-               break;
-
-       default:
-               dev_err(&oct->pci_dev->dev, "%s Unknown cmd %d\n", __func__,
-                       nctrl->ncmd.s.cmd);
-       }
-}
-
 /**
  * \brief Converts a mask based on net device flags
  * @param netdev network device
@@ -2817,8 +2583,7 @@ static void handle_timestamp(struct octeon_device *oct,
  */
 static inline int send_nic_timestamp_pkt(struct octeon_device *oct,
                                         struct octnic_data_pkt *ndata,
-                                        struct octnet_buf_free_info *finfo,
-                                        int xmit_more)
+                                        struct octnet_buf_free_info *finfo)
 {
        int retval;
        struct octeon_soft_command *sc;
@@ -2848,7 +2613,7 @@ static inline int send_nic_timestamp_pkt(struct octeon_device *oct,
 
        len = (u32)((struct octeon_instr_ih2 *)(&sc->cmd.cmd2.ih2))->dlengsz;
 
-       ring_doorbell = !xmit_more;
+       ring_doorbell = 1;
        retval = octeon_send_command(oct, sc->iq_no, ring_doorbell, &sc->cmd,
                                     sc, len, ndata->reqtype);
 
@@ -2881,7 +2646,7 @@ static int liquidio_xmit(struct sk_buff *skb, struct net_device *netdev)
        union tx_info *tx_info;
        int status = 0;
        int q_idx = 0, iq_no = 0;
-       int xmit_more, j;
+       int j;
        u64 dptr = 0;
        u32 tag = 0;
 
@@ -3077,12 +2842,10 @@ static int liquidio_xmit(struct sk_buff *skb, struct net_device *netdev)
                irh->vlan = skb_vlan_tag_get(skb) & 0xfff;
        }
 
-       xmit_more = skb->xmit_more;
-
        if (unlikely(cmdsetup.s.timestamp))
-               status = send_nic_timestamp_pkt(oct, &ndata, finfo, xmit_more);
+               status = send_nic_timestamp_pkt(oct, &ndata, finfo);
        else
-               status = octnet_send_nic_data_pkt(oct, &ndata, xmit_more);
+               status = octnet_send_nic_data_pkt(oct, &ndata);
        if (status == IQ_SEND_FAILED)
                goto lio_xmit_failed;
 
@@ -3249,31 +3012,6 @@ static int liquidio_vxlan_port_command(struct net_device *netdev, int command,
        return ret;
 }
 
-int liquidio_set_feature(struct net_device *netdev, int cmd, u16 param1)
-{
-       struct lio *lio = GET_LIO(netdev);
-       struct octeon_device *oct = lio->oct_dev;
-       struct octnic_ctrl_pkt nctrl;
-       int ret = 0;
-
-       memset(&nctrl, 0, sizeof(struct octnic_ctrl_pkt));
-
-       nctrl.ncmd.u64 = 0;
-       nctrl.ncmd.s.cmd = cmd;
-       nctrl.ncmd.s.param1 = param1;
-       nctrl.iq_no = lio->linfo.txpciq[0].s.q_no;
-       nctrl.wait_time = 100;
-       nctrl.netpndev = (u64)netdev;
-       nctrl.cb_fn = liquidio_link_ctrl_cmd_completion;
-
-       ret = octnet_send_nic_ctrl_pkt(lio->oct_dev, &nctrl);
-       if (ret < 0) {
-               dev_err(&oct->pci_dev->dev, "Feature change failed in core (ret: 0x%x)\n",
-                       ret);
-       }
-       return ret;
-}
-
 /** \brief Net device fix features
  * @param netdev  pointer to network device
  * @param request features requested
index bbb50ea66f165066b5f09c59806087d0fe3b0228..01a50f3b0c8e28a342cd03828be7bf60906d41df 100644 (file)
  */
 #include <linux/pci.h>
 #include <linux/netdevice.h>
+#include <linux/crc32.h>
 #include "liquidio_common.h"
 #include "octeon_droq.h"
 #include "octeon_iq.h"
 #include "response_manager.h"
 #include "octeon_device.h"
-#include "octeon_main.h"
+#include "liquidio_image.h"
 #include "octeon_mem_ops.h"
 
 static void octeon_remote_lock(void);
@@ -40,6 +41,10 @@ static u64 cvmx_bootmem_phy_named_block_find(struct octeon_device *oct,
                                             u32 flags);
 static int octeon_console_read(struct octeon_device *oct, u32 console_num,
                               char *buffer, u32 buf_size);
+static u32 console_bitmask;
+module_param(console_bitmask, int, 0644);
+MODULE_PARM_DESC(console_bitmask,
+                "Bitmask indicating which consoles have debug output redirected to syslog.");
 
 #define MIN(a, b) min((a), (b))
 #define CAST_ULL(v) ((u64)(v))
@@ -177,6 +182,15 @@ struct octeon_pci_console_desc {
        __cvmx_bootmem_desc_get(oct, addr,                               \
                offsetof(struct cvmx_bootmem_named_block_desc, field),   \
                SIZEOF_FIELD(struct cvmx_bootmem_named_block_desc, field))
+/**
+ * \brief determines if a given console has debug enabled.
+ * @param console console to check
+ * @returns  1 = enabled. 0 otherwise
+ */
+static int octeon_console_debug_enabled(u32 console)
+{
+       return (console_bitmask >> (console)) & 0x1;
+}
 
 /**
  * This function is the implementation of the get macros defined
@@ -709,3 +723,104 @@ static int octeon_console_read(struct octeon_device *oct, u32 console_num,
 
        return bytes_to_read;
 }
+
+#define FBUF_SIZE      (4 * 1024 * 1024)
+u8 fbuf[FBUF_SIZE];
+
+int octeon_download_firmware(struct octeon_device *oct, const u8 *data,
+                            size_t size)
+{
+       int ret = 0;
+       u8 *p = fbuf;
+       u32 crc32_result;
+       u64 load_addr;
+       u32 image_len;
+       struct octeon_firmware_file_header *h;
+       u32 i, rem;
+
+       if (size < sizeof(struct octeon_firmware_file_header)) {
+               dev_err(&oct->pci_dev->dev, "Firmware file too small (%d < %d).\n",
+                       (u32)size,
+                       (u32)sizeof(struct octeon_firmware_file_header));
+               return -EINVAL;
+       }
+
+       h = (struct octeon_firmware_file_header *)data;
+
+       if (be32_to_cpu(h->magic) != LIO_NIC_MAGIC) {
+               dev_err(&oct->pci_dev->dev, "Unrecognized firmware file.\n");
+               return -EINVAL;
+       }
+
+       crc32_result = crc32((unsigned int)~0, data,
+                            sizeof(struct octeon_firmware_file_header) -
+                            sizeof(u32)) ^ ~0U;
+       if (crc32_result != be32_to_cpu(h->crc32)) {
+               dev_err(&oct->pci_dev->dev, "Firmware CRC mismatch (0x%08x != 0x%08x).\n",
+                       crc32_result, be32_to_cpu(h->crc32));
+               return -EINVAL;
+       }
+
+       if (strncmp(LIQUIDIO_PACKAGE, h->version, strlen(LIQUIDIO_PACKAGE))) {
+               dev_err(&oct->pci_dev->dev, "Unmatched firmware package type. Expected %s, got %s.\n",
+                       LIQUIDIO_PACKAGE, h->version);
+               return -EINVAL;
+       }
+
+       if (memcmp(LIQUIDIO_BASE_VERSION, h->version + strlen(LIQUIDIO_PACKAGE),
+                  strlen(LIQUIDIO_BASE_VERSION))) {
+               dev_err(&oct->pci_dev->dev, "Unmatched firmware version. Expected %s.x, got %s.\n",
+                       LIQUIDIO_BASE_VERSION,
+                       h->version + strlen(LIQUIDIO_PACKAGE));
+               return -EINVAL;
+       }
+
+       if (be32_to_cpu(h->num_images) > LIO_MAX_IMAGES) {
+               dev_err(&oct->pci_dev->dev, "Too many images in firmware file (%d).\n",
+                       be32_to_cpu(h->num_images));
+               return -EINVAL;
+       }
+
+       dev_info(&oct->pci_dev->dev, "Firmware version: %s\n", h->version);
+       snprintf(oct->fw_info.liquidio_firmware_version, 32, "LIQUIDIO: %s",
+                h->version);
+
+       data += sizeof(struct octeon_firmware_file_header);
+
+       dev_info(&oct->pci_dev->dev, "%s: Loading %d images\n", __func__,
+                be32_to_cpu(h->num_images));
+       /* load all images */
+       for (i = 0; i < be32_to_cpu(h->num_images); i++) {
+               load_addr = be64_to_cpu(h->desc[i].addr);
+               image_len = be32_to_cpu(h->desc[i].len);
+
+               dev_info(&oct->pci_dev->dev, "Loading firmware %d at %llx\n",
+                        image_len, load_addr);
+
+               /* Write in 4MB chunks*/
+               rem = image_len;
+
+               while (rem) {
+                       if (rem < FBUF_SIZE)
+                               size = rem;
+                       else
+                               size = FBUF_SIZE;
+
+                       memcpy(p, data, size);
+
+                       /* download the image */
+                       octeon_pci_write_core_mem(oct, load_addr, p, (u32)size);
+
+                       data += size;
+                       rem -= (u32)size;
+                       load_addr += size;
+               }
+       }
+       dev_info(&oct->pci_dev->dev, "Writing boot command: %s\n",
+                h->bootcmd);
+
+       /* Invoke the bootcmd */
+       ret = octeon_console_send_cmd(oct, h->bootcmd, 50);
+
+       return 0;
+}
index 0eb504a4379a6f4b413e2f4505902a1a81ed943f..cff845ce8625cee5869790bb04228fb1ca142472 100644 (file)
@@ -20,7 +20,6 @@
 * Contact Cavium, Inc. for more information
 **********************************************************************/
 #include <linux/pci.h>
-#include <linux/crc32.h>
 #include <linux/netdevice.h>
 #include <linux/vmalloc.h>
 #include "liquidio_common.h"
@@ -32,8 +31,6 @@
 #include "octeon_network.h"
 #include "cn66xx_regs.h"
 #include "cn66xx_device.h"
-#include "liquidio_image.h"
-#include "octeon_mem_ops.h"
 
 /** Default configuration
  *  for CN66XX OCTEON Models.
@@ -541,107 +538,6 @@ static char *get_oct_app_string(u32 app_mode)
        return oct_dev_app_str[CVM_DRV_INVALID_APP - CVM_DRV_APP_START];
 }
 
-u8 fbuf[4 * 1024 * 1024];
-
-int octeon_download_firmware(struct octeon_device *oct, const u8 *data,
-                            size_t size)
-{
-       int ret = 0;
-       u8 *p = fbuf;
-       u32 crc32_result;
-       u64 load_addr;
-       u32 image_len;
-       struct octeon_firmware_file_header *h;
-       u32 i, rem, base_len = strlen(LIQUIDIO_BASE_VERSION);
-       char *base;
-
-       if (size < sizeof(struct octeon_firmware_file_header)) {
-               dev_err(&oct->pci_dev->dev, "Firmware file too small (%d < %d).\n",
-                       (u32)size,
-                       (u32)sizeof(struct octeon_firmware_file_header));
-               return -EINVAL;
-       }
-
-       h = (struct octeon_firmware_file_header *)data;
-
-       if (be32_to_cpu(h->magic) != LIO_NIC_MAGIC) {
-               dev_err(&oct->pci_dev->dev, "Unrecognized firmware file.\n");
-               return -EINVAL;
-       }
-
-       crc32_result = crc32((unsigned int)~0, data,
-                            sizeof(struct octeon_firmware_file_header) -
-                            sizeof(u32)) ^ ~0U;
-       if (crc32_result != be32_to_cpu(h->crc32)) {
-               dev_err(&oct->pci_dev->dev, "Firmware CRC mismatch (0x%08x != 0x%08x).\n",
-                       crc32_result, be32_to_cpu(h->crc32));
-               return -EINVAL;
-       }
-
-       if (strncmp(LIQUIDIO_PACKAGE, h->version, strlen(LIQUIDIO_PACKAGE))) {
-               dev_err(&oct->pci_dev->dev, "Unmatched firmware package type. Expected %s, got %s.\n",
-                       LIQUIDIO_PACKAGE, h->version);
-               return -EINVAL;
-       }
-
-       base = h->version + strlen(LIQUIDIO_PACKAGE);
-       ret = memcmp(LIQUIDIO_BASE_VERSION, base, base_len);
-       if (ret) {
-               dev_err(&oct->pci_dev->dev, "Unmatched firmware version. Expected %s.x, got %s.\n",
-                       LIQUIDIO_BASE_VERSION, base);
-               return -EINVAL;
-       }
-
-       if (be32_to_cpu(h->num_images) > LIO_MAX_IMAGES) {
-               dev_err(&oct->pci_dev->dev, "Too many images in firmware file (%d).\n",
-                       be32_to_cpu(h->num_images));
-               return -EINVAL;
-       }
-
-       dev_info(&oct->pci_dev->dev, "Firmware version: %s\n", h->version);
-       snprintf(oct->fw_info.liquidio_firmware_version, 32, "LIQUIDIO: %s",
-                h->version);
-
-       data += sizeof(struct octeon_firmware_file_header);
-
-       dev_info(&oct->pci_dev->dev, "%s: Loading %d images\n", __func__,
-                be32_to_cpu(h->num_images));
-       /* load all images */
-       for (i = 0; i < be32_to_cpu(h->num_images); i++) {
-               load_addr = be64_to_cpu(h->desc[i].addr);
-               image_len = be32_to_cpu(h->desc[i].len);
-
-               dev_info(&oct->pci_dev->dev, "Loading firmware %d at %llx\n",
-                        image_len, load_addr);
-
-               /* Write in 4MB chunks*/
-               rem = image_len;
-
-               while (rem) {
-                       if (rem < (4 * 1024 * 1024))
-                               size = rem;
-                       else
-                               size = 4 * 1024 * 1024;
-
-                       memcpy(p, data, size);
-
-                       /* download the image */
-                       octeon_pci_write_core_mem(oct, load_addr, p, (u32)size);
-
-                       data += size;
-                       rem -= (u32)size;
-                       load_addr += size;
-               }
-       }
-       dev_info(&oct->pci_dev->dev, "Writing boot command: %s\n",
-                h->bootcmd);
-
-       /* Invoke the bootcmd */
-       ret = octeon_console_send_cmd(oct, h->bootcmd, 50);
-
-       return 0;
-}
-
 void octeon_free_device_mem(struct octeon_device *oct)
 {
        int i;
index 01edfb404346cadae746c777b70e4ebc1f66815f..d1251f4c55ded0b72a2355aa5789a21561f13909 100644 (file)
@@ -200,7 +200,6 @@ struct octeon_fn_list {
        irqreturn_t (*process_interrupt_regs)(void *);
        int (*soft_reset)(struct octeon_device *);
        int (*setup_device_regs)(struct octeon_device *);
-       void (*reinit_regs)(struct octeon_device *);
        void (*bar1_idx_setup)(struct octeon_device *, u64, u32, int);
        void (*bar1_idx_write)(struct octeon_device *, u32, u32);
        u32 (*bar1_idx_read)(struct octeon_device *, u32);
index bc14e4c273326b677cdc0309930eecb6afd436fe..ebeef95ed9b09b9cd6a5731a6e0ea0f6ab980a68 100644 (file)
 
 #define DRV_NAME "LiquidIO"
 
-/**
- * \brief determines if a given console has debug enabled.
- * @param console console to check
- * @returns  1 = enabled. 0 otherwise
+/** This structure is used by NIC driver to store information required
+ * to free the sk_buff when the packet has been fetched by Octeon.
+ * Bytes offset below assume worst-case of a 64-bit system.
  */
-int octeon_console_debug_enabled(u32 console);
+struct octnet_buf_free_info {
+       /** Bytes 1-8.  Pointer to network device private structure. */
+       struct lio *lio;
+
+       /** Bytes 9-16.  Pointer to sk_buff. */
+       struct sk_buff *skb;
+
+       /** Bytes 17-24.  Pointer to gather list. */
+       struct octnic_gather *g;
+
+       /** Bytes 25-32. Physical address of skb->data or gather list. */
+       u64 dptr;
+
+       /** Bytes 33-47. Piggybacked soft command, if any */
+       struct octeon_soft_command *sc;
+};
 
 /* BQL-related functions */
 void octeon_report_sent_bytes_to_bql(void *buf, int reqtype);
index 95a4bbedf55757f39cd7f2c7d6874a7021e5e8b9..0dc081a99b3078547cfd0d66a233ee7db7fa7e54 100644 (file)
@@ -19,7 +19,6 @@
  * This file may also be available under a different license from Cavium.
  * Contact Cavium, Inc. for more information
  **********************************************************************/
-#include <linux/pci.h>
 #include <linux/netdevice.h>
 #include "liquidio_common.h"
 #include "octeon_droq.h"
index fb820dc7fcb7f960b158d2621a3e260c6119645c..7cfbdf9b039cc1f76301965a88122de46ccf6cff 100644 (file)
@@ -26,8 +26,6 @@
 
 #ifndef __OCTEON_NETWORK_H__
 #define __OCTEON_NETWORK_H__
-#include <linux/version.h>
-#include <linux/dma-mapping.h>
 #include <linux/ptp_clock_kernel.h>
 
 #define LIO_MAX_MTU_SIZE (OCTNET_MAX_FRM_SIZE - OCTNET_FRM_HEADER_SIZE)
index 166727be928f97f607ca2a041e272562fc48f689..0c4013de599a8d3b01bd26e84b24917cb9adb57f 100644 (file)
@@ -19,7 +19,6 @@
  * This file may also be available under a different license from Cavium.
  * Contact Cavium, Inc. for more information
  **********************************************************************/
-#include <linux/interrupt.h>
 #include <linux/pci.h>
 #include <linux/netdevice.h>
 #include "liquidio_common.h"
@@ -73,12 +72,9 @@ octeon_alloc_soft_command_resp(struct octeon_device    *oct,
 }
 
 int octnet_send_nic_data_pkt(struct octeon_device *oct,
-                            struct octnic_data_pkt *ndata,
-                            u32 xmit_more)
+                            struct octnic_data_pkt *ndata)
 {
-       int ring_doorbell;
-
-       ring_doorbell = !xmit_more;
+       int ring_doorbell = 1;
 
        return octeon_send_command(oct, ndata->q_no, ring_doorbell, &ndata->cmd,
                                   ndata->buf, ndata->datasize,
index b71a2bbe4bee4a3537f5e09b779842e876e2633d..e55400c915748870c30b001a0af3bc3c38bf1016 100644 (file)
@@ -278,7 +278,7 @@ octeon_alloc_soft_command_resp(struct octeon_device    *oct,
  * queue should be stopped, and IQ_SEND_OK if it sent okay.
  */
 int octnet_send_nic_data_pkt(struct octeon_device *oct,
-                            struct octnic_data_pkt *ndata, u32 xmit_more);
+                            struct octnic_data_pkt *ndata);
 
 /** Send a NIC control packet to the device
  * @param oct - octeon device pointer