be2net: get rid of be_ctrl_info struct/abstraction
Currently only the be_ctrl_info struct ptr (instead of adapter) is passed to all the routines in be_cmds.c. Instead pass be_adapter ptr to allow access to all its fields. Merge the contents of struct be_ctrl_info into be_adapter. The resulting code is simpler. Signed-off-by: Sathya Perla <sathyap@serverengines.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
2f6d7c1b34
commit
8788fdc2a5
@@ -16,6 +16,7 @@
|
||||
*/
|
||||
|
||||
#include "be.h"
|
||||
#include "be_cmds.h"
|
||||
#include <asm/div64.h>
|
||||
|
||||
MODULE_VERSION(DRV_VER);
|
||||
@@ -60,9 +61,9 @@ static int be_queue_alloc(struct be_adapter *adapter, struct be_queue_info *q,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void be_intr_set(struct be_ctrl_info *ctrl, bool enable)
|
||||
static void be_intr_set(struct be_adapter *adapter, bool enable)
|
||||
{
|
||||
u8 __iomem *addr = ctrl->pcicfg + PCICFG_MEMBAR_CTRL_INT_CTRL_OFFSET;
|
||||
u8 __iomem *addr = adapter->pcicfg + PCICFG_MEMBAR_CTRL_INT_CTRL_OFFSET;
|
||||
u32 reg = ioread32(addr);
|
||||
u32 enabled = reg & MEMBAR_CTRL_INT_CTRL_HOSTINTR_MASK;
|
||||
if (!enabled && enable) {
|
||||
@@ -77,23 +78,23 @@ static void be_intr_set(struct be_ctrl_info *ctrl, bool enable)
|
||||
iowrite32(reg, addr);
|
||||
}
|
||||
|
||||
static void be_rxq_notify(struct be_ctrl_info *ctrl, u16 qid, u16 posted)
|
||||
static void be_rxq_notify(struct be_adapter *adapter, u16 qid, u16 posted)
|
||||
{
|
||||
u32 val = 0;
|
||||
val |= qid & DB_RQ_RING_ID_MASK;
|
||||
val |= posted << DB_RQ_NUM_POSTED_SHIFT;
|
||||
iowrite32(val, ctrl->db + DB_RQ_OFFSET);
|
||||
iowrite32(val, adapter->db + DB_RQ_OFFSET);
|
||||
}
|
||||
|
||||
static void be_txq_notify(struct be_ctrl_info *ctrl, u16 qid, u16 posted)
|
||||
static void be_txq_notify(struct be_adapter *adapter, u16 qid, u16 posted)
|
||||
{
|
||||
u32 val = 0;
|
||||
val |= qid & DB_TXULP_RING_ID_MASK;
|
||||
val |= (posted & DB_TXULP_NUM_POSTED_MASK) << DB_TXULP_NUM_POSTED_SHIFT;
|
||||
iowrite32(val, ctrl->db + DB_TXULP1_OFFSET);
|
||||
iowrite32(val, adapter->db + DB_TXULP1_OFFSET);
|
||||
}
|
||||
|
||||
static void be_eq_notify(struct be_ctrl_info *ctrl, u16 qid,
|
||||
static void be_eq_notify(struct be_adapter *adapter, u16 qid,
|
||||
bool arm, bool clear_int, u16 num_popped)
|
||||
{
|
||||
u32 val = 0;
|
||||
@@ -104,18 +105,17 @@ static void be_eq_notify(struct be_ctrl_info *ctrl, u16 qid,
|
||||
val |= 1 << DB_EQ_CLR_SHIFT;
|
||||
val |= 1 << DB_EQ_EVNT_SHIFT;
|
||||
val |= num_popped << DB_EQ_NUM_POPPED_SHIFT;
|
||||
iowrite32(val, ctrl->db + DB_EQ_OFFSET);
|
||||
iowrite32(val, adapter->db + DB_EQ_OFFSET);
|
||||
}
|
||||
|
||||
void be_cq_notify(struct be_ctrl_info *ctrl, u16 qid,
|
||||
bool arm, u16 num_popped)
|
||||
void be_cq_notify(struct be_adapter *adapter, u16 qid, bool arm, u16 num_popped)
|
||||
{
|
||||
u32 val = 0;
|
||||
val |= qid & DB_CQ_RING_ID_MASK;
|
||||
if (arm)
|
||||
val |= 1 << DB_CQ_REARM_SHIFT;
|
||||
val |= num_popped << DB_CQ_NUM_POPPED_SHIFT;
|
||||
iowrite32(val, ctrl->db + DB_CQ_OFFSET);
|
||||
iowrite32(val, adapter->db + DB_CQ_OFFSET);
|
||||
}
|
||||
|
||||
|
||||
@@ -126,12 +126,12 @@ static int be_mac_addr_set(struct net_device *netdev, void *p)
|
||||
int status = 0;
|
||||
|
||||
if (netif_running(netdev)) {
|
||||
status = be_cmd_pmac_del(&adapter->ctrl, adapter->if_handle,
|
||||
status = be_cmd_pmac_del(adapter, adapter->if_handle,
|
||||
adapter->pmac_id);
|
||||
if (status)
|
||||
return status;
|
||||
|
||||
status = be_cmd_pmac_add(&adapter->ctrl, (u8 *)addr->sa_data,
|
||||
status = be_cmd_pmac_add(adapter, (u8 *)addr->sa_data,
|
||||
adapter->if_handle, &adapter->pmac_id);
|
||||
}
|
||||
|
||||
@@ -214,9 +214,8 @@ static void netdev_stats_update(struct be_adapter *adapter)
|
||||
dev_stats->tx_window_errors = 0;
|
||||
}
|
||||
|
||||
void be_link_status_update(void *ctxt, bool link_up)
|
||||
void be_link_status_update(struct be_adapter *adapter, bool link_up)
|
||||
{
|
||||
struct be_adapter *adapter = ctxt;
|
||||
struct net_device *netdev = adapter->netdev;
|
||||
|
||||
/* If link came up or went down */
|
||||
@@ -237,7 +236,6 @@ void be_link_status_update(void *ctxt, bool link_up)
|
||||
/* Update the EQ delay n BE based on the RX frags consumed / sec */
|
||||
static void be_rx_eqd_update(struct be_adapter *adapter)
|
||||
{
|
||||
struct be_ctrl_info *ctrl = &adapter->ctrl;
|
||||
struct be_eq_obj *rx_eq = &adapter->rx_eq;
|
||||
struct be_drvr_stats *stats = &adapter->stats.drvr_stats;
|
||||
ulong now = jiffies;
|
||||
@@ -270,7 +268,7 @@ static void be_rx_eqd_update(struct be_adapter *adapter)
|
||||
if (eqd < 10)
|
||||
eqd = 0;
|
||||
if (eqd != rx_eq->cur_eqd)
|
||||
be_cmd_modify_eqd(ctrl, rx_eq->q.id, eqd);
|
||||
be_cmd_modify_eqd(adapter, rx_eq->q.id, eqd);
|
||||
|
||||
rx_eq->cur_eqd = eqd;
|
||||
}
|
||||
@@ -412,8 +410,8 @@ static int make_tx_wrbs(struct be_adapter *adapter,
|
||||
struct skb_frag_struct *frag =
|
||||
&skb_shinfo(skb)->frags[i];
|
||||
busaddr = pci_map_page(pdev, frag->page,
|
||||
frag->page_offset,
|
||||
frag->size, PCI_DMA_TODEVICE);
|
||||
frag->page_offset,
|
||||
frag->size, PCI_DMA_TODEVICE);
|
||||
wrb = queue_head_node(txq);
|
||||
wrb_fill(wrb, busaddr, frag->size);
|
||||
be_dws_cpu_to_le(wrb, sizeof(*wrb));
|
||||
@@ -461,7 +459,7 @@ static int be_xmit(struct sk_buff *skb, struct net_device *netdev)
|
||||
stopped = true;
|
||||
}
|
||||
|
||||
be_txq_notify(&adapter->ctrl, txq->id, wrb_cnt);
|
||||
be_txq_notify(adapter, txq->id, wrb_cnt);
|
||||
|
||||
be_tx_stats_update(adapter, wrb_cnt, copied, stopped);
|
||||
return NETDEV_TX_OK;
|
||||
@@ -502,10 +500,10 @@ static void be_vid_config(struct net_device *netdev)
|
||||
ntags++;
|
||||
}
|
||||
}
|
||||
be_cmd_vlan_config(&adapter->ctrl, adapter->if_handle,
|
||||
be_cmd_vlan_config(adapter, adapter->if_handle,
|
||||
vtag, ntags, 1, 0);
|
||||
} else {
|
||||
be_cmd_vlan_config(&adapter->ctrl, adapter->if_handle,
|
||||
be_cmd_vlan_config(adapter, adapter->if_handle,
|
||||
NULL, 0, 1, 1);
|
||||
}
|
||||
}
|
||||
@@ -515,13 +513,12 @@ static void be_vlan_register(struct net_device *netdev, struct vlan_group *grp)
|
||||
struct be_adapter *adapter = netdev_priv(netdev);
|
||||
struct be_eq_obj *rx_eq = &adapter->rx_eq;
|
||||
struct be_eq_obj *tx_eq = &adapter->tx_eq;
|
||||
struct be_ctrl_info *ctrl = &adapter->ctrl;
|
||||
|
||||
be_eq_notify(ctrl, rx_eq->q.id, false, false, 0);
|
||||
be_eq_notify(ctrl, tx_eq->q.id, false, false, 0);
|
||||
be_eq_notify(adapter, rx_eq->q.id, false, false, 0);
|
||||
be_eq_notify(adapter, tx_eq->q.id, false, false, 0);
|
||||
adapter->vlan_grp = grp;
|
||||
be_eq_notify(ctrl, rx_eq->q.id, true, false, 0);
|
||||
be_eq_notify(ctrl, tx_eq->q.id, true, false, 0);
|
||||
be_eq_notify(adapter, rx_eq->q.id, true, false, 0);
|
||||
be_eq_notify(adapter, tx_eq->q.id, true, false, 0);
|
||||
}
|
||||
|
||||
static void be_vlan_add_vid(struct net_device *netdev, u16 vid)
|
||||
@@ -548,10 +545,9 @@ static void be_vlan_rem_vid(struct net_device *netdev, u16 vid)
|
||||
static void be_set_multicast_list(struct net_device *netdev)
|
||||
{
|
||||
struct be_adapter *adapter = netdev_priv(netdev);
|
||||
struct be_ctrl_info *ctrl = &adapter->ctrl;
|
||||
|
||||
if (netdev->flags & IFF_PROMISC) {
|
||||
be_cmd_promiscuous_config(ctrl, adapter->port_num, 1);
|
||||
be_cmd_promiscuous_config(adapter, adapter->port_num, 1);
|
||||
adapter->promiscuous = true;
|
||||
goto done;
|
||||
}
|
||||
@@ -559,15 +555,15 @@ static void be_set_multicast_list(struct net_device *netdev)
|
||||
/* BE was previously in promiscous mode; disable it */
|
||||
if (adapter->promiscuous) {
|
||||
adapter->promiscuous = false;
|
||||
be_cmd_promiscuous_config(ctrl, adapter->port_num, 0);
|
||||
be_cmd_promiscuous_config(adapter, adapter->port_num, 0);
|
||||
}
|
||||
|
||||
if (netdev->flags & IFF_ALLMULTI) {
|
||||
be_cmd_multicast_set(ctrl, adapter->if_handle, NULL, 0);
|
||||
be_cmd_multicast_set(adapter, adapter->if_handle, NULL, 0);
|
||||
goto done;
|
||||
}
|
||||
|
||||
be_cmd_multicast_set(ctrl, adapter->if_handle, netdev->mc_list,
|
||||
be_cmd_multicast_set(adapter, adapter->if_handle, netdev->mc_list,
|
||||
netdev->mc_count);
|
||||
done:
|
||||
return;
|
||||
@@ -942,7 +938,7 @@ static void be_post_rx_frags(struct be_adapter *adapter)
|
||||
|
||||
if (posted) {
|
||||
atomic_add(posted, &rxq->used);
|
||||
be_rxq_notify(&adapter->ctrl, rxq->id, posted);
|
||||
be_rxq_notify(adapter, rxq->id, posted);
|
||||
} else if (atomic_read(&rxq->used) == 0) {
|
||||
/* Let be_worker replenish when memory is available */
|
||||
adapter->rx_post_starved = true;
|
||||
@@ -1010,7 +1006,7 @@ static void be_rx_q_clean(struct be_adapter *adapter)
|
||||
while ((rxcp = be_rx_compl_get(adapter)) != NULL) {
|
||||
be_rx_compl_discard(adapter, rxcp);
|
||||
be_rx_compl_reset(rxcp);
|
||||
be_cq_notify(&adapter->ctrl, rx_cq->id, true, 1);
|
||||
be_cq_notify(adapter, rx_cq->id, true, 1);
|
||||
}
|
||||
|
||||
/* Then free posted rx buffer that were not used */
|
||||
@@ -1043,16 +1039,15 @@ static void be_tx_q_clean(struct be_adapter *adapter)
|
||||
static void be_mcc_queues_destroy(struct be_adapter *adapter)
|
||||
{
|
||||
struct be_queue_info *q;
|
||||
struct be_ctrl_info *ctrl = &adapter->ctrl;
|
||||
|
||||
q = &ctrl->mcc_obj.q;
|
||||
q = &adapter->mcc_obj.q;
|
||||
if (q->created)
|
||||
be_cmd_q_destroy(ctrl, q, QTYPE_MCCQ);
|
||||
be_cmd_q_destroy(adapter, q, QTYPE_MCCQ);
|
||||
be_queue_free(adapter, q);
|
||||
|
||||
q = &ctrl->mcc_obj.cq;
|
||||
q = &adapter->mcc_obj.cq;
|
||||
if (q->created)
|
||||
be_cmd_q_destroy(ctrl, q, QTYPE_CQ);
|
||||
be_cmd_q_destroy(adapter, q, QTYPE_CQ);
|
||||
be_queue_free(adapter, q);
|
||||
}
|
||||
|
||||
@@ -1060,25 +1055,24 @@ static void be_mcc_queues_destroy(struct be_adapter *adapter)
|
||||
static int be_mcc_queues_create(struct be_adapter *adapter)
|
||||
{
|
||||
struct be_queue_info *q, *cq;
|
||||
struct be_ctrl_info *ctrl = &adapter->ctrl;
|
||||
|
||||
/* Alloc MCC compl queue */
|
||||
cq = &ctrl->mcc_obj.cq;
|
||||
cq = &adapter->mcc_obj.cq;
|
||||
if (be_queue_alloc(adapter, cq, MCC_CQ_LEN,
|
||||
sizeof(struct be_mcc_cq_entry)))
|
||||
goto err;
|
||||
|
||||
/* Ask BE to create MCC compl queue; share TX's eq */
|
||||
if (be_cmd_cq_create(ctrl, cq, &adapter->tx_eq.q, false, true, 0))
|
||||
if (be_cmd_cq_create(adapter, cq, &adapter->tx_eq.q, false, true, 0))
|
||||
goto mcc_cq_free;
|
||||
|
||||
/* Alloc MCC queue */
|
||||
q = &ctrl->mcc_obj.q;
|
||||
q = &adapter->mcc_obj.q;
|
||||
if (be_queue_alloc(adapter, q, MCC_Q_LEN, sizeof(struct be_mcc_wrb)))
|
||||
goto mcc_cq_destroy;
|
||||
|
||||
/* Ask BE to create MCC queue */
|
||||
if (be_cmd_mccq_create(ctrl, q, cq))
|
||||
if (be_cmd_mccq_create(adapter, q, cq))
|
||||
goto mcc_q_free;
|
||||
|
||||
return 0;
|
||||
@@ -1086,7 +1080,7 @@ static int be_mcc_queues_create(struct be_adapter *adapter)
|
||||
mcc_q_free:
|
||||
be_queue_free(adapter, q);
|
||||
mcc_cq_destroy:
|
||||
be_cmd_q_destroy(ctrl, cq, QTYPE_CQ);
|
||||
be_cmd_q_destroy(adapter, cq, QTYPE_CQ);
|
||||
mcc_cq_free:
|
||||
be_queue_free(adapter, cq);
|
||||
err:
|
||||
@@ -1099,7 +1093,7 @@ static void be_tx_queues_destroy(struct be_adapter *adapter)
|
||||
|
||||
q = &adapter->tx_obj.q;
|
||||
if (q->created) {
|
||||
be_cmd_q_destroy(&adapter->ctrl, q, QTYPE_TXQ);
|
||||
be_cmd_q_destroy(adapter, q, QTYPE_TXQ);
|
||||
|
||||
/* No more tx completions can be rcvd now; clean up if there
|
||||
* are any pending completions or pending tx requests */
|
||||
@@ -1109,12 +1103,12 @@ static void be_tx_queues_destroy(struct be_adapter *adapter)
|
||||
|
||||
q = &adapter->tx_obj.cq;
|
||||
if (q->created)
|
||||
be_cmd_q_destroy(&adapter->ctrl, q, QTYPE_CQ);
|
||||
be_cmd_q_destroy(adapter, q, QTYPE_CQ);
|
||||
be_queue_free(adapter, q);
|
||||
|
||||
q = &adapter->tx_eq.q;
|
||||
if (q->created)
|
||||
be_cmd_q_destroy(&adapter->ctrl, q, QTYPE_EQ);
|
||||
be_cmd_q_destroy(adapter, q, QTYPE_EQ);
|
||||
be_queue_free(adapter, q);
|
||||
}
|
||||
|
||||
@@ -1132,7 +1126,7 @@ static int be_tx_queues_create(struct be_adapter *adapter)
|
||||
return -1;
|
||||
|
||||
/* Ask BE to create Tx Event queue */
|
||||
if (be_cmd_eq_create(&adapter->ctrl, eq, adapter->tx_eq.cur_eqd))
|
||||
if (be_cmd_eq_create(adapter, eq, adapter->tx_eq.cur_eqd))
|
||||
goto tx_eq_free;
|
||||
/* Alloc TX eth compl queue */
|
||||
cq = &adapter->tx_obj.cq;
|
||||
@@ -1141,7 +1135,7 @@ static int be_tx_queues_create(struct be_adapter *adapter)
|
||||
goto tx_eq_destroy;
|
||||
|
||||
/* Ask BE to create Tx eth compl queue */
|
||||
if (be_cmd_cq_create(&adapter->ctrl, cq, eq, false, false, 3))
|
||||
if (be_cmd_cq_create(adapter, cq, eq, false, false, 3))
|
||||
goto tx_cq_free;
|
||||
|
||||
/* Alloc TX eth queue */
|
||||
@@ -1150,18 +1144,18 @@ static int be_tx_queues_create(struct be_adapter *adapter)
|
||||
goto tx_cq_destroy;
|
||||
|
||||
/* Ask BE to create Tx eth queue */
|
||||
if (be_cmd_txq_create(&adapter->ctrl, q, cq))
|
||||
if (be_cmd_txq_create(adapter, q, cq))
|
||||
goto tx_q_free;
|
||||
return 0;
|
||||
|
||||
tx_q_free:
|
||||
be_queue_free(adapter, q);
|
||||
tx_cq_destroy:
|
||||
be_cmd_q_destroy(&adapter->ctrl, cq, QTYPE_CQ);
|
||||
be_cmd_q_destroy(adapter, cq, QTYPE_CQ);
|
||||
tx_cq_free:
|
||||
be_queue_free(adapter, cq);
|
||||
tx_eq_destroy:
|
||||
be_cmd_q_destroy(&adapter->ctrl, eq, QTYPE_EQ);
|
||||
be_cmd_q_destroy(adapter, eq, QTYPE_EQ);
|
||||
tx_eq_free:
|
||||
be_queue_free(adapter, eq);
|
||||
return -1;
|
||||
@@ -1173,19 +1167,19 @@ static void be_rx_queues_destroy(struct be_adapter *adapter)
|
||||
|
||||
q = &adapter->rx_obj.q;
|
||||
if (q->created) {
|
||||
be_cmd_q_destroy(&adapter->ctrl, q, QTYPE_RXQ);
|
||||
be_cmd_q_destroy(adapter, q, QTYPE_RXQ);
|
||||
be_rx_q_clean(adapter);
|
||||
}
|
||||
be_queue_free(adapter, q);
|
||||
|
||||
q = &adapter->rx_obj.cq;
|
||||
if (q->created)
|
||||
be_cmd_q_destroy(&adapter->ctrl, q, QTYPE_CQ);
|
||||
be_cmd_q_destroy(adapter, q, QTYPE_CQ);
|
||||
be_queue_free(adapter, q);
|
||||
|
||||
q = &adapter->rx_eq.q;
|
||||
if (q->created)
|
||||
be_cmd_q_destroy(&adapter->ctrl, q, QTYPE_EQ);
|
||||
be_cmd_q_destroy(adapter, q, QTYPE_EQ);
|
||||
be_queue_free(adapter, q);
|
||||
}
|
||||
|
||||
@@ -1208,7 +1202,7 @@ static int be_rx_queues_create(struct be_adapter *adapter)
|
||||
return rc;
|
||||
|
||||
/* Ask BE to create Rx Event queue */
|
||||
rc = be_cmd_eq_create(&adapter->ctrl, eq, adapter->rx_eq.cur_eqd);
|
||||
rc = be_cmd_eq_create(adapter, eq, adapter->rx_eq.cur_eqd);
|
||||
if (rc)
|
||||
goto rx_eq_free;
|
||||
|
||||
@@ -1220,7 +1214,7 @@ static int be_rx_queues_create(struct be_adapter *adapter)
|
||||
goto rx_eq_destroy;
|
||||
|
||||
/* Ask BE to create Rx eth compl queue */
|
||||
rc = be_cmd_cq_create(&adapter->ctrl, cq, eq, false, false, 3);
|
||||
rc = be_cmd_cq_create(adapter, cq, eq, false, false, 3);
|
||||
if (rc)
|
||||
goto rx_cq_free;
|
||||
|
||||
@@ -1231,7 +1225,7 @@ static int be_rx_queues_create(struct be_adapter *adapter)
|
||||
goto rx_cq_destroy;
|
||||
|
||||
/* Ask BE to create Rx eth queue */
|
||||
rc = be_cmd_rxq_create(&adapter->ctrl, q, cq->id, rx_frag_size,
|
||||
rc = be_cmd_rxq_create(adapter, q, cq->id, rx_frag_size,
|
||||
BE_MAX_JUMBO_FRAME_SIZE, adapter->if_handle, false);
|
||||
if (rc)
|
||||
goto rx_q_free;
|
||||
@@ -1240,11 +1234,11 @@ static int be_rx_queues_create(struct be_adapter *adapter)
|
||||
rx_q_free:
|
||||
be_queue_free(adapter, q);
|
||||
rx_cq_destroy:
|
||||
be_cmd_q_destroy(&adapter->ctrl, cq, QTYPE_CQ);
|
||||
be_cmd_q_destroy(adapter, cq, QTYPE_CQ);
|
||||
rx_cq_free:
|
||||
be_queue_free(adapter, cq);
|
||||
rx_eq_destroy:
|
||||
be_cmd_q_destroy(&adapter->ctrl, eq, QTYPE_EQ);
|
||||
be_cmd_q_destroy(adapter, eq, QTYPE_EQ);
|
||||
rx_eq_free:
|
||||
be_queue_free(adapter, eq);
|
||||
return rc;
|
||||
@@ -1264,8 +1258,7 @@ static bool event_get(struct be_eq_obj *eq_obj, u16 *rid)
|
||||
return true;
|
||||
}
|
||||
|
||||
static int event_handle(struct be_ctrl_info *ctrl,
|
||||
struct be_eq_obj *eq_obj)
|
||||
static int event_handle(struct be_adapter *adapter, struct be_eq_obj *eq_obj)
|
||||
{
|
||||
u16 rid = 0, num = 0;
|
||||
|
||||
@@ -1273,7 +1266,7 @@ static int event_handle(struct be_ctrl_info *ctrl,
|
||||
num++;
|
||||
|
||||
/* We can see an interrupt and no event */
|
||||
be_eq_notify(ctrl, eq_obj->q.id, true, true, num);
|
||||
be_eq_notify(adapter, eq_obj->q.id, true, true, num);
|
||||
if (num)
|
||||
napi_schedule(&eq_obj->napi);
|
||||
|
||||
@@ -1283,25 +1276,24 @@ static int event_handle(struct be_ctrl_info *ctrl,
|
||||
static irqreturn_t be_intx(int irq, void *dev)
|
||||
{
|
||||
struct be_adapter *adapter = dev;
|
||||
struct be_ctrl_info *ctrl = &adapter->ctrl;
|
||||
int isr;
|
||||
int isr;
|
||||
|
||||
isr = ioread32(ctrl->csr + CEV_ISR0_OFFSET +
|
||||
ctrl->pci_func * CEV_ISR_SIZE);
|
||||
isr = ioread32(adapter->csr + CEV_ISR0_OFFSET +
|
||||
adapter->pci_func * CEV_ISR_SIZE);
|
||||
if (!isr)
|
||||
return IRQ_NONE;
|
||||
return IRQ_NONE;
|
||||
|
||||
event_handle(ctrl, &adapter->tx_eq);
|
||||
event_handle(ctrl, &adapter->rx_eq);
|
||||
event_handle(adapter, &adapter->tx_eq);
|
||||
event_handle(adapter, &adapter->rx_eq);
|
||||
|
||||
return IRQ_HANDLED;
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
static irqreturn_t be_msix_rx(int irq, void *dev)
|
||||
{
|
||||
struct be_adapter *adapter = dev;
|
||||
|
||||
event_handle(&adapter->ctrl, &adapter->rx_eq);
|
||||
event_handle(adapter, &adapter->rx_eq);
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
@@ -1310,7 +1302,7 @@ static irqreturn_t be_msix_tx_mcc(int irq, void *dev)
|
||||
{
|
||||
struct be_adapter *adapter = dev;
|
||||
|
||||
event_handle(&adapter->ctrl, &adapter->tx_eq);
|
||||
event_handle(adapter, &adapter->tx_eq);
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
@@ -1356,10 +1348,10 @@ int be_poll_rx(struct napi_struct *napi, int budget)
|
||||
/* All consumed */
|
||||
if (work_done < budget) {
|
||||
napi_complete(napi);
|
||||
be_cq_notify(&adapter->ctrl, rx_cq->id, true, work_done);
|
||||
be_cq_notify(adapter, rx_cq->id, true, work_done);
|
||||
} else {
|
||||
/* More to be consumed; continue with interrupts disabled */
|
||||
be_cq_notify(&adapter->ctrl, rx_cq->id, false, work_done);
|
||||
be_cq_notify(adapter, rx_cq->id, false, work_done);
|
||||
}
|
||||
return work_done;
|
||||
}
|
||||
@@ -1380,7 +1372,7 @@ void be_process_tx(struct be_adapter *adapter)
|
||||
}
|
||||
|
||||
if (num_cmpl) {
|
||||
be_cq_notify(&adapter->ctrl, tx_cq->id, true, num_cmpl);
|
||||
be_cq_notify(adapter, tx_cq->id, true, num_cmpl);
|
||||
|
||||
/* As Tx wrbs have been freed up, wake up netdev queue if
|
||||
* it was stopped due to lack of tx wrbs.
|
||||
@@ -1408,7 +1400,7 @@ static int be_poll_tx_mcc(struct napi_struct *napi, int budget)
|
||||
|
||||
be_process_tx(adapter);
|
||||
|
||||
be_process_mcc(&adapter->ctrl);
|
||||
be_process_mcc(adapter);
|
||||
|
||||
return 1;
|
||||
}
|
||||
@@ -1420,7 +1412,7 @@ static void be_worker(struct work_struct *work)
|
||||
int status;
|
||||
|
||||
/* Get Stats */
|
||||
status = be_cmd_get_stats(&adapter->ctrl, &adapter->stats.cmd);
|
||||
status = be_cmd_get_stats(adapter, &adapter->stats.cmd);
|
||||
if (!status)
|
||||
netdev_stats_update(adapter);
|
||||
|
||||
@@ -1454,8 +1446,7 @@ static void be_msix_enable(struct be_adapter *adapter)
|
||||
|
||||
static inline int be_msix_vec_get(struct be_adapter *adapter, u32 eq_id)
|
||||
{
|
||||
return adapter->msix_entries[eq_id -
|
||||
8 * adapter->ctrl.pci_func].vector;
|
||||
return adapter->msix_entries[eq_id - 8 * adapter->pci_func].vector;
|
||||
}
|
||||
|
||||
static int be_msix_register(struct be_adapter *adapter)
|
||||
@@ -1540,7 +1531,6 @@ done:
|
||||
static int be_open(struct net_device *netdev)
|
||||
{
|
||||
struct be_adapter *adapter = netdev_priv(netdev);
|
||||
struct be_ctrl_info *ctrl = &adapter->ctrl;
|
||||
struct be_eq_obj *rx_eq = &adapter->rx_eq;
|
||||
struct be_eq_obj *tx_eq = &adapter->tx_eq;
|
||||
bool link_up;
|
||||
@@ -1554,16 +1544,16 @@ static int be_open(struct net_device *netdev)
|
||||
|
||||
be_irq_register(adapter);
|
||||
|
||||
be_intr_set(ctrl, true);
|
||||
be_intr_set(adapter, true);
|
||||
|
||||
/* The evt queues are created in unarmed state; arm them */
|
||||
be_eq_notify(ctrl, rx_eq->q.id, true, false, 0);
|
||||
be_eq_notify(ctrl, tx_eq->q.id, true, false, 0);
|
||||
be_eq_notify(adapter, rx_eq->q.id, true, false, 0);
|
||||
be_eq_notify(adapter, tx_eq->q.id, true, false, 0);
|
||||
|
||||
/* Rx compl queue may be in unarmed state; rearm it */
|
||||
be_cq_notify(ctrl, adapter->rx_obj.cq.id, true, 0);
|
||||
be_cq_notify(adapter, adapter->rx_obj.cq.id, true, 0);
|
||||
|
||||
status = be_cmd_link_status_query(ctrl, &link_up);
|
||||
status = be_cmd_link_status_query(adapter, &link_up);
|
||||
if (status)
|
||||
return status;
|
||||
be_link_status_update(adapter, link_up);
|
||||
@@ -1574,7 +1564,6 @@ static int be_open(struct net_device *netdev)
|
||||
|
||||
static int be_setup(struct be_adapter *adapter)
|
||||
{
|
||||
struct be_ctrl_info *ctrl = &adapter->ctrl;
|
||||
struct net_device *netdev = adapter->netdev;
|
||||
u32 if_flags;
|
||||
int status;
|
||||
@@ -1582,7 +1571,7 @@ static int be_setup(struct be_adapter *adapter)
|
||||
if_flags = BE_IF_FLAGS_BROADCAST | BE_IF_FLAGS_PROMISCUOUS |
|
||||
BE_IF_FLAGS_MCAST_PROMISCUOUS | BE_IF_FLAGS_UNTAGGED |
|
||||
BE_IF_FLAGS_PASS_L3L4_ERRORS;
|
||||
status = be_cmd_if_create(ctrl, if_flags, netdev->dev_addr,
|
||||
status = be_cmd_if_create(adapter, if_flags, netdev->dev_addr,
|
||||
false/* pmac_invalid */, &adapter->if_handle,
|
||||
&adapter->pmac_id);
|
||||
if (status != 0)
|
||||
@@ -1590,7 +1579,7 @@ static int be_setup(struct be_adapter *adapter)
|
||||
|
||||
be_vid_config(netdev);
|
||||
|
||||
status = be_cmd_set_flow_control(ctrl, true, true);
|
||||
status = be_cmd_set_flow_control(adapter, true, true);
|
||||
if (status != 0)
|
||||
goto if_destroy;
|
||||
|
||||
@@ -1613,19 +1602,17 @@ rx_qs_destroy:
|
||||
tx_qs_destroy:
|
||||
be_tx_queues_destroy(adapter);
|
||||
if_destroy:
|
||||
be_cmd_if_destroy(ctrl, adapter->if_handle);
|
||||
be_cmd_if_destroy(adapter, adapter->if_handle);
|
||||
do_none:
|
||||
return status;
|
||||
}
|
||||
|
||||
static int be_clear(struct be_adapter *adapter)
|
||||
{
|
||||
struct be_ctrl_info *ctrl = &adapter->ctrl;
|
||||
|
||||
be_rx_queues_destroy(adapter);
|
||||
be_tx_queues_destroy(adapter);
|
||||
|
||||
be_cmd_if_destroy(ctrl, adapter->if_handle);
|
||||
be_cmd_if_destroy(adapter, adapter->if_handle);
|
||||
|
||||
be_mcc_queues_destroy(adapter);
|
||||
return 0;
|
||||
@@ -1634,7 +1621,6 @@ static int be_clear(struct be_adapter *adapter)
|
||||
static int be_close(struct net_device *netdev)
|
||||
{
|
||||
struct be_adapter *adapter = netdev_priv(netdev);
|
||||
struct be_ctrl_info *ctrl = &adapter->ctrl;
|
||||
struct be_eq_obj *rx_eq = &adapter->rx_eq;
|
||||
struct be_eq_obj *tx_eq = &adapter->tx_eq;
|
||||
int vec;
|
||||
@@ -1645,7 +1631,7 @@ static int be_close(struct net_device *netdev)
|
||||
netif_carrier_off(netdev);
|
||||
adapter->link_up = false;
|
||||
|
||||
be_intr_set(ctrl, false);
|
||||
be_intr_set(adapter, false);
|
||||
|
||||
if (adapter->msix_enabled) {
|
||||
vec = be_msix_vec_get(adapter, tx_eq->q.id);
|
||||
@@ -1704,13 +1690,12 @@ static void be_netdev_init(struct net_device *netdev)
|
||||
|
||||
static void be_unmap_pci_bars(struct be_adapter *adapter)
|
||||
{
|
||||
struct be_ctrl_info *ctrl = &adapter->ctrl;
|
||||
if (ctrl->csr)
|
||||
iounmap(ctrl->csr);
|
||||
if (ctrl->db)
|
||||
iounmap(ctrl->db);
|
||||
if (ctrl->pcicfg)
|
||||
iounmap(ctrl->pcicfg);
|
||||
if (adapter->csr)
|
||||
iounmap(adapter->csr);
|
||||
if (adapter->db)
|
||||
iounmap(adapter->db);
|
||||
if (adapter->pcicfg)
|
||||
iounmap(adapter->pcicfg);
|
||||
}
|
||||
|
||||
static int be_map_pci_bars(struct be_adapter *adapter)
|
||||
@@ -1721,19 +1706,19 @@ static int be_map_pci_bars(struct be_adapter *adapter)
|
||||
pci_resource_len(adapter->pdev, 2));
|
||||
if (addr == NULL)
|
||||
return -ENOMEM;
|
||||
adapter->ctrl.csr = addr;
|
||||
adapter->csr = addr;
|
||||
|
||||
addr = ioremap_nocache(pci_resource_start(adapter->pdev, 4),
|
||||
128 * 1024);
|
||||
if (addr == NULL)
|
||||
goto pci_map_err;
|
||||
adapter->ctrl.db = addr;
|
||||
adapter->db = addr;
|
||||
|
||||
addr = ioremap_nocache(pci_resource_start(adapter->pdev, 1),
|
||||
pci_resource_len(adapter->pdev, 1));
|
||||
if (addr == NULL)
|
||||
goto pci_map_err;
|
||||
adapter->ctrl.pcicfg = addr;
|
||||
adapter->pcicfg = addr;
|
||||
|
||||
return 0;
|
||||
pci_map_err:
|
||||
@@ -1744,7 +1729,7 @@ pci_map_err:
|
||||
|
||||
static void be_ctrl_cleanup(struct be_adapter *adapter)
|
||||
{
|
||||
struct be_dma_mem *mem = &adapter->ctrl.mbox_mem_alloced;
|
||||
struct be_dma_mem *mem = &adapter->mbox_mem_alloced;
|
||||
|
||||
be_unmap_pci_bars(adapter);
|
||||
|
||||
@@ -1753,12 +1738,10 @@ static void be_ctrl_cleanup(struct be_adapter *adapter)
|
||||
mem->va, mem->dma);
|
||||
}
|
||||
|
||||
/* Initialize the mbox required to send cmds to BE */
|
||||
static int be_ctrl_init(struct be_adapter *adapter)
|
||||
{
|
||||
struct be_ctrl_info *ctrl = &adapter->ctrl;
|
||||
struct be_dma_mem *mbox_mem_alloc = &ctrl->mbox_mem_alloced;
|
||||
struct be_dma_mem *mbox_mem_align = &ctrl->mbox_mem;
|
||||
struct be_dma_mem *mbox_mem_alloc = &adapter->mbox_mem_alloced;
|
||||
struct be_dma_mem *mbox_mem_align = &adapter->mbox_mem;
|
||||
int status;
|
||||
u32 val;
|
||||
|
||||
@@ -1777,15 +1760,12 @@ static int be_ctrl_init(struct be_adapter *adapter)
|
||||
mbox_mem_align->va = PTR_ALIGN(mbox_mem_alloc->va, 16);
|
||||
mbox_mem_align->dma = PTR_ALIGN(mbox_mem_alloc->dma, 16);
|
||||
memset(mbox_mem_align->va, 0, sizeof(struct be_mcc_mailbox));
|
||||
spin_lock_init(&ctrl->mbox_lock);
|
||||
spin_lock_init(&ctrl->mcc_lock);
|
||||
spin_lock_init(&ctrl->mcc_cq_lock);
|
||||
spin_lock_init(&adapter->mbox_lock);
|
||||
spin_lock_init(&adapter->mcc_lock);
|
||||
spin_lock_init(&adapter->mcc_cq_lock);
|
||||
|
||||
ctrl->async_cb = be_link_status_update;
|
||||
ctrl->adapter_ctxt = adapter;
|
||||
|
||||
val = ioread32(ctrl->pcicfg + PCICFG_MEMBAR_CTRL_INT_CTRL_OFFSET);
|
||||
ctrl->pci_func = (val >> MEMBAR_CTRL_INT_CTRL_PFUNC_SHIFT) &
|
||||
val = ioread32(adapter->pcicfg + PCICFG_MEMBAR_CTRL_INT_CTRL_OFFSET);
|
||||
adapter->pci_func = (val >> MEMBAR_CTRL_INT_CTRL_PFUNC_SHIFT) &
|
||||
MEMBAR_CTRL_INT_CTRL_PFUNC_MASK;
|
||||
return 0;
|
||||
}
|
||||
@@ -1840,18 +1820,17 @@ static void __devexit be_remove(struct pci_dev *pdev)
|
||||
|
||||
static int be_hw_up(struct be_adapter *adapter)
|
||||
{
|
||||
struct be_ctrl_info *ctrl = &adapter->ctrl;
|
||||
int status;
|
||||
|
||||
status = be_cmd_POST(ctrl);
|
||||
status = be_cmd_POST(adapter);
|
||||
if (status)
|
||||
return status;
|
||||
|
||||
status = be_cmd_get_fw_ver(ctrl, adapter->fw_ver);
|
||||
status = be_cmd_get_fw_ver(adapter, adapter->fw_ver);
|
||||
if (status)
|
||||
return status;
|
||||
|
||||
status = be_cmd_query_fw_cfg(ctrl, &adapter->port_num);
|
||||
status = be_cmd_query_fw_cfg(adapter, &adapter->port_num);
|
||||
return status;
|
||||
}
|
||||
|
||||
@@ -1861,7 +1840,6 @@ static int __devinit be_probe(struct pci_dev *pdev,
|
||||
int status = 0;
|
||||
struct be_adapter *adapter;
|
||||
struct net_device *netdev;
|
||||
struct be_ctrl_info *ctrl;
|
||||
u8 mac[ETH_ALEN];
|
||||
|
||||
status = pci_enable_device(pdev);
|
||||
@@ -1896,7 +1874,6 @@ static int __devinit be_probe(struct pci_dev *pdev,
|
||||
}
|
||||
}
|
||||
|
||||
ctrl = &adapter->ctrl;
|
||||
status = be_ctrl_init(adapter);
|
||||
if (status)
|
||||
goto free_netdev;
|
||||
@@ -1909,7 +1886,7 @@ static int __devinit be_probe(struct pci_dev *pdev,
|
||||
if (status)
|
||||
goto stats_clean;
|
||||
|
||||
status = be_cmd_mac_addr_query(ctrl, mac, MAC_ADDRESS_TYPE_NETWORK,
|
||||
status = be_cmd_mac_addr_query(adapter, mac, MAC_ADDRESS_TYPE_NETWORK,
|
||||
true /* permanent */, 0);
|
||||
if (status)
|
||||
goto stats_clean;
|
||||
|
Reference in New Issue
Block a user