aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/hw/nes
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2010-08-07 20:08:02 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2010-08-07 20:08:02 -0400
commit3cc08fc35db75b059118626c30b60b0f56583802 (patch)
tree704d71199c8be8d5b822ca424675291e8cec7bde /drivers/infiniband/hw/nes
parentfaa38b5e0e092914764cdba9f83d31a3f794d182 (diff)
parent03b37ecdb3975f09832747600853d3818a50eda3 (diff)
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband: (42 commits) IB/qib: Add missing <linux/slab.h> include IB/ehca: Drop unnecessary NULL test RDMA/nes: Fix confusing if statement indentation IB/ehca: Init irq tasklet before irq can happen RDMA/nes: Fix misindented code RDMA/nes: Fix showing wqm_quanta RDMA/nes: Get rid of "set but not used" variables RDMA/nes: Read firmware version from correct place IB/srp: Export req_lim via sysfs IB/srp: Make receive buffer handling more robust IB/srp: Use print_hex_dump() IB: Rename RAW_ETY to RAW_ETHERTYPE RDMA/nes: Fix two sparse warnings RDMA/cxgb3: Make needlessly global iwch_l2t_send() static IB/iser: Make needlessly global iser_alloc_rx_descriptors() static RDMA/cxgb4: Add timeouts when waiting for FW responses IB/qib: Fix race between qib_error_qp() and receive packet processing IB/qib: Limit the number of packets processed per interrupt IB/qib: Allow writes to the diag_counters to be able to clear them IB/qib: Set cfgctxts to number of CPUs by default ...
Diffstat (limited to 'drivers/infiniband/hw/nes')
-rw-r--r--drivers/infiniband/hw/nes/nes.c37
-rw-r--r--drivers/infiniband/hw/nes/nes.h2
-rw-r--r--drivers/infiniband/hw/nes/nes_cm.c10
-rw-r--r--drivers/infiniband/hw/nes/nes_hw.c23
-rw-r--r--drivers/infiniband/hw/nes/nes_hw.h3
-rw-r--r--drivers/infiniband/hw/nes/nes_nic.c15
-rw-r--r--drivers/infiniband/hw/nes/nes_utils.c5
-rw-r--r--drivers/infiniband/hw/nes/nes_verbs.c21
8 files changed, 64 insertions, 52 deletions
diff --git a/drivers/infiniband/hw/nes/nes.c b/drivers/infiniband/hw/nes/nes.c
index de7b9d7166f3..0c9f0aa5d4ea 100644
--- a/drivers/infiniband/hw/nes/nes.c
+++ b/drivers/infiniband/hw/nes/nes.c
@@ -110,8 +110,8 @@ static unsigned int sysfs_nonidx_addr;
110static unsigned int sysfs_idx_addr; 110static unsigned int sysfs_idx_addr;
111 111
112static struct pci_device_id nes_pci_table[] = { 112static struct pci_device_id nes_pci_table[] = {
113 {PCI_VENDOR_ID_NETEFFECT, PCI_DEVICE_ID_NETEFFECT_NE020, PCI_ANY_ID, PCI_ANY_ID}, 113 { PCI_VDEVICE(NETEFFECT, PCI_DEVICE_ID_NETEFFECT_NE020), },
114 {PCI_VENDOR_ID_NETEFFECT, PCI_DEVICE_ID_NETEFFECT_NE020_KR, PCI_ANY_ID, PCI_ANY_ID}, 114 { PCI_VDEVICE(NETEFFECT, PCI_DEVICE_ID_NETEFFECT_NE020_KR), },
115 {0} 115 {0}
116}; 116};
117 117
@@ -259,13 +259,11 @@ static void nes_cqp_rem_ref_callback(struct nes_device *nesdev, struct nes_cqp_r
259 unsigned long flags; 259 unsigned long flags;
260 struct nes_qp *nesqp = cqp_request->cqp_callback_pointer; 260 struct nes_qp *nesqp = cqp_request->cqp_callback_pointer;
261 struct nes_adapter *nesadapter = nesdev->nesadapter; 261 struct nes_adapter *nesadapter = nesdev->nesadapter;
262 u32 qp_id;
263 262
264 atomic_inc(&qps_destroyed); 263 atomic_inc(&qps_destroyed);
265 264
266 /* Free the control structures */ 265 /* Free the control structures */
267 266
268 qp_id = nesqp->hwqp.qp_id;
269 if (nesqp->pbl_vbase) { 267 if (nesqp->pbl_vbase) {
270 pci_free_consistent(nesdev->pcidev, nesqp->qp_mem_size, 268 pci_free_consistent(nesdev->pcidev, nesqp->qp_mem_size,
271 nesqp->hwqp.q2_vbase, nesqp->hwqp.q2_pbase); 269 nesqp->hwqp.q2_vbase, nesqp->hwqp.q2_pbase);
@@ -441,7 +439,6 @@ static int __devinit nes_probe(struct pci_dev *pcidev, const struct pci_device_i
441 struct net_device *netdev = NULL; 439 struct net_device *netdev = NULL;
442 struct nes_device *nesdev = NULL; 440 struct nes_device *nesdev = NULL;
443 int ret = 0; 441 int ret = 0;
444 struct nes_vnic *nesvnic = NULL;
445 void __iomem *mmio_regs = NULL; 442 void __iomem *mmio_regs = NULL;
446 u8 hw_rev; 443 u8 hw_rev;
447 444
@@ -664,25 +661,21 @@ static int __devinit nes_probe(struct pci_dev *pcidev, const struct pci_device_i
664 nes_notifiers_registered++; 661 nes_notifiers_registered++;
665 662
666 /* Initialize network devices */ 663 /* Initialize network devices */
667 if ((netdev = nes_netdev_init(nesdev, mmio_regs)) == NULL) { 664 if ((netdev = nes_netdev_init(nesdev, mmio_regs)) == NULL)
668 goto bail7; 665 goto bail7;
669 }
670
671 /* Register network device */
672 ret = register_netdev(netdev);
673 if (ret) {
674 printk(KERN_ERR PFX "Unable to register netdev, ret = %d\n", ret);
675 nes_netdev_destroy(netdev);
676 goto bail7;
677 }
678 666
679 nes_print_macaddr(netdev); 667 /* Register network device */
680 /* create a CM core for this netdev */ 668 ret = register_netdev(netdev);
681 nesvnic = netdev_priv(netdev); 669 if (ret) {
670 printk(KERN_ERR PFX "Unable to register netdev, ret = %d\n", ret);
671 nes_netdev_destroy(netdev);
672 goto bail7;
673 }
682 674
683 nesdev->netdev_count++; 675 nes_print_macaddr(netdev);
684 nesdev->nesadapter->netdev_count++;
685 676
677 nesdev->netdev_count++;
678 nesdev->nesadapter->netdev_count++;
686 679
687 printk(KERN_ERR PFX "%s: NetEffect RNIC driver successfully loaded.\n", 680 printk(KERN_ERR PFX "%s: NetEffect RNIC driver successfully loaded.\n",
688 pci_name(pcidev)); 681 pci_name(pcidev));
@@ -1104,7 +1097,7 @@ static ssize_t nes_show_wqm_quanta(struct device_driver *ddp, char *buf)
1104 i++; 1097 i++;
1105 } 1098 }
1106 1099
1107 return snprintf(buf, PAGE_SIZE, "0x%X\n", wqm_quanta); 1100 return snprintf(buf, PAGE_SIZE, "0x%X\n", wqm_quanta_value);
1108} 1101}
1109 1102
1110 1103
diff --git a/drivers/infiniband/hw/nes/nes.h b/drivers/infiniband/hw/nes/nes.h
index cc78fee1dd51..b3d145e82b4c 100644
--- a/drivers/infiniband/hw/nes/nes.h
+++ b/drivers/infiniband/hw/nes/nes.h
@@ -262,6 +262,7 @@ struct nes_device {
262 u16 base_doorbell_index; 262 u16 base_doorbell_index;
263 u16 currcq_count; 263 u16 currcq_count;
264 u16 deepcq_count; 264 u16 deepcq_count;
265 u8 iw_status;
265 u8 msi_enabled; 266 u8 msi_enabled;
266 u8 netdev_count; 267 u8 netdev_count;
267 u8 napi_isr_ran; 268 u8 napi_isr_ran;
@@ -527,6 +528,7 @@ void nes_cm_disconn_worker(void *);
527int nes_hw_modify_qp(struct nes_device *, struct nes_qp *, u32, u32, u32); 528int nes_hw_modify_qp(struct nes_device *, struct nes_qp *, u32, u32, u32);
528int nes_modify_qp(struct ib_qp *, struct ib_qp_attr *, int, struct ib_udata *); 529int nes_modify_qp(struct ib_qp *, struct ib_qp_attr *, int, struct ib_udata *);
529struct nes_ib_device *nes_init_ofa_device(struct net_device *); 530struct nes_ib_device *nes_init_ofa_device(struct net_device *);
531void nes_port_ibevent(struct nes_vnic *nesvnic);
530void nes_destroy_ofa_device(struct nes_ib_device *); 532void nes_destroy_ofa_device(struct nes_ib_device *);
531int nes_register_ofa_device(struct nes_ib_device *); 533int nes_register_ofa_device(struct nes_ib_device *);
532 534
diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c
index d876d0435cd4..443cea55daac 100644
--- a/drivers/infiniband/hw/nes/nes_cm.c
+++ b/drivers/infiniband/hw/nes/nes_cm.c
@@ -1719,8 +1719,6 @@ static int handle_ack_pkt(struct nes_cm_node *cm_node, struct sk_buff *skb,
1719{ 1719{
1720 int datasize = 0; 1720 int datasize = 0;
1721 u32 inc_sequence; 1721 u32 inc_sequence;
1722 u32 rem_seq_ack;
1723 u32 rem_seq;
1724 int ret = 0; 1722 int ret = 0;
1725 int optionsize; 1723 int optionsize;
1726 optionsize = (tcph->doff << 2) - sizeof(struct tcphdr); 1724 optionsize = (tcph->doff << 2) - sizeof(struct tcphdr);
@@ -1730,8 +1728,6 @@ static int handle_ack_pkt(struct nes_cm_node *cm_node, struct sk_buff *skb,
1730 1728
1731 skb_pull(skb, tcph->doff << 2); 1729 skb_pull(skb, tcph->doff << 2);
1732 inc_sequence = ntohl(tcph->seq); 1730 inc_sequence = ntohl(tcph->seq);
1733 rem_seq = ntohl(tcph->seq);
1734 rem_seq_ack = ntohl(tcph->ack_seq);
1735 datasize = skb->len; 1731 datasize = skb->len;
1736 switch (cm_node->state) { 1732 switch (cm_node->state) {
1737 case NES_CM_STATE_SYN_RCVD: 1733 case NES_CM_STATE_SYN_RCVD:
@@ -2565,7 +2561,7 @@ static int nes_cm_disconn_true(struct nes_qp *nesqp)
2565 u16 last_ae; 2561 u16 last_ae;
2566 u8 original_hw_tcp_state; 2562 u8 original_hw_tcp_state;
2567 u8 original_ibqp_state; 2563 u8 original_ibqp_state;
2568 enum iw_cm_event_type disconn_status = IW_CM_EVENT_STATUS_OK; 2564 enum iw_cm_event_status disconn_status = IW_CM_EVENT_STATUS_OK;
2569 int issue_disconn = 0; 2565 int issue_disconn = 0;
2570 int issue_close = 0; 2566 int issue_close = 0;
2571 int issue_flush = 0; 2567 int issue_flush = 0;
@@ -3128,17 +3124,15 @@ int nes_create_listen(struct iw_cm_id *cm_id, int backlog)
3128 struct nes_vnic *nesvnic; 3124 struct nes_vnic *nesvnic;
3129 struct nes_cm_listener *cm_node; 3125 struct nes_cm_listener *cm_node;
3130 struct nes_cm_info cm_info; 3126 struct nes_cm_info cm_info;
3131 struct nes_adapter *adapter;
3132 int err; 3127 int err;
3133 3128
3134
3135 nes_debug(NES_DBG_CM, "cm_id = %p, local port = 0x%04X.\n", 3129 nes_debug(NES_DBG_CM, "cm_id = %p, local port = 0x%04X.\n",
3136 cm_id, ntohs(cm_id->local_addr.sin_port)); 3130 cm_id, ntohs(cm_id->local_addr.sin_port));
3137 3131
3138 nesvnic = to_nesvnic(cm_id->device); 3132 nesvnic = to_nesvnic(cm_id->device);
3139 if (!nesvnic) 3133 if (!nesvnic)
3140 return -EINVAL; 3134 return -EINVAL;
3141 adapter = nesvnic->nesdev->nesadapter; 3135
3142 nes_debug(NES_DBG_CM, "nesvnic=%p, netdev=%p, %s\n", 3136 nes_debug(NES_DBG_CM, "nesvnic=%p, netdev=%p, %s\n",
3143 nesvnic, nesvnic->netdev, nesvnic->netdev->name); 3137 nesvnic, nesvnic->netdev, nesvnic->netdev->name);
3144 3138
diff --git a/drivers/infiniband/hw/nes/nes_hw.c b/drivers/infiniband/hw/nes/nes_hw.c
index 57874a165083..f8233c851c69 100644
--- a/drivers/infiniband/hw/nes/nes_hw.c
+++ b/drivers/infiniband/hw/nes/nes_hw.c
@@ -1970,7 +1970,7 @@ void nes_destroy_nic_qp(struct nes_vnic *nesvnic)
1970 dev_kfree_skb( 1970 dev_kfree_skb(
1971 nesvnic->nic.tx_skb[nesvnic->nic.sq_tail]); 1971 nesvnic->nic.tx_skb[nesvnic->nic.sq_tail]);
1972 1972
1973 nesvnic->nic.sq_tail = (++nesvnic->nic.sq_tail) 1973 nesvnic->nic.sq_tail = (nesvnic->nic.sq_tail + 1)
1974 & (nesvnic->nic.sq_size - 1); 1974 & (nesvnic->nic.sq_size - 1);
1975 } 1975 }
1976 1976
@@ -2737,9 +2737,9 @@ void nes_nic_ce_handler(struct nes_device *nesdev, struct nes_hw_nic_cq *cq)
2737 nesnic->sq_tail &= nesnic->sq_size-1; 2737 nesnic->sq_tail &= nesnic->sq_size-1;
2738 if (sq_cqes > 128) { 2738 if (sq_cqes > 128) {
2739 barrier(); 2739 barrier();
2740 /* restart the queue if it had been stopped */ 2740 /* restart the queue if it had been stopped */
2741 if (netif_queue_stopped(nesvnic->netdev)) 2741 if (netif_queue_stopped(nesvnic->netdev))
2742 netif_wake_queue(nesvnic->netdev); 2742 netif_wake_queue(nesvnic->netdev);
2743 sq_cqes = 0; 2743 sq_cqes = 0;
2744 } 2744 }
2745 } else { 2745 } else {
@@ -2999,11 +2999,8 @@ static void nes_cqp_ce_handler(struct nes_device *nesdev, struct nes_hw_cq *cq)
2999 2999
3000static u8 *locate_mpa(u8 *pkt, u32 aeq_info) 3000static u8 *locate_mpa(u8 *pkt, u32 aeq_info)
3001{ 3001{
3002 u16 pkt_len;
3003
3004 if (aeq_info & NES_AEQE_Q2_DATA_ETHERNET) { 3002 if (aeq_info & NES_AEQE_Q2_DATA_ETHERNET) {
3005 /* skip over ethernet header */ 3003 /* skip over ethernet header */
3006 pkt_len = be16_to_cpu(*(u16 *)(pkt + ETH_HLEN - 2));
3007 pkt += ETH_HLEN; 3004 pkt += ETH_HLEN;
3008 3005
3009 /* Skip over IP and TCP headers */ 3006 /* Skip over IP and TCP headers */
@@ -3283,9 +3280,15 @@ static void nes_terminate_connection(struct nes_device *nesdev, struct nes_qp *n
3283 else 3280 else
3284 mod_qp_flags |= NES_CQP_QP_TERM_DONT_SEND_TERM_MSG; 3281 mod_qp_flags |= NES_CQP_QP_TERM_DONT_SEND_TERM_MSG;
3285 3282
3286 nes_terminate_start_timer(nesqp); 3283 if (!nesdev->iw_status) {
3287 nesqp->term_flags |= NES_TERM_SENT; 3284 nesqp->term_flags = NES_TERM_DONE;
3288 nes_hw_modify_qp(nesdev, nesqp, mod_qp_flags, termlen, 0); 3285 nes_hw_modify_qp(nesdev, nesqp, NES_CQP_QP_IWARP_STATE_ERROR, 0, 0);
3286 nes_cm_disconn(nesqp);
3287 } else {
3288 nes_terminate_start_timer(nesqp);
3289 nesqp->term_flags |= NES_TERM_SENT;
3290 nes_hw_modify_qp(nesdev, nesqp, mod_qp_flags, termlen, 0);
3291 }
3289} 3292}
3290 3293
3291static void nes_terminate_send_fin(struct nes_device *nesdev, 3294static void nes_terminate_send_fin(struct nes_device *nesdev,
diff --git a/drivers/infiniband/hw/nes/nes_hw.h b/drivers/infiniband/hw/nes/nes_hw.h
index bbbfe9fc5a5a..aa9183db32b1 100644
--- a/drivers/infiniband/hw/nes/nes_hw.h
+++ b/drivers/infiniband/hw/nes/nes_hw.h
@@ -1100,11 +1100,12 @@ struct nes_adapter {
1100 u32 wqm_wat; 1100 u32 wqm_wat;
1101 u32 core_clock; 1101 u32 core_clock;
1102 u32 firmware_version; 1102 u32 firmware_version;
1103 u32 eeprom_version;
1103 1104
1104 u32 nic_rx_eth_route_err; 1105 u32 nic_rx_eth_route_err;
1105 1106
1106 u32 et_rx_coalesce_usecs; 1107 u32 et_rx_coalesce_usecs;
1107 u32 et_rx_max_coalesced_frames; 1108 u32 et_rx_max_coalesced_frames;
1108 u32 et_rx_coalesce_usecs_irq; 1109 u32 et_rx_coalesce_usecs_irq;
1109 u32 et_rx_max_coalesced_frames_irq; 1110 u32 et_rx_max_coalesced_frames_irq;
1110 u32 et_pkt_rate_low; 1111 u32 et_pkt_rate_low;
diff --git a/drivers/infiniband/hw/nes/nes_nic.c b/drivers/infiniband/hw/nes/nes_nic.c
index 42e7aad1ec23..6dfdd49cdbcf 100644
--- a/drivers/infiniband/hw/nes/nes_nic.c
+++ b/drivers/infiniband/hw/nes/nes_nic.c
@@ -232,6 +232,13 @@ static int nes_netdev_open(struct net_device *netdev)
232 NES_MAC_INT_TX_UNDERFLOW | NES_MAC_INT_TX_ERROR)); 232 NES_MAC_INT_TX_UNDERFLOW | NES_MAC_INT_TX_ERROR));
233 first_nesvnic = nesvnic; 233 first_nesvnic = nesvnic;
234 } 234 }
235
236 if (nesvnic->of_device_registered) {
237 nesdev->iw_status = 1;
238 nesdev->nesadapter->send_term_ok = 1;
239 nes_port_ibevent(nesvnic);
240 }
241
235 if (first_nesvnic->linkup) { 242 if (first_nesvnic->linkup) {
236 /* Enable network packets */ 243 /* Enable network packets */
237 nesvnic->linkup = 1; 244 nesvnic->linkup = 1;
@@ -309,9 +316,9 @@ static int nes_netdev_stop(struct net_device *netdev)
309 316
310 317
311 if (nesvnic->of_device_registered) { 318 if (nesvnic->of_device_registered) {
312 nes_destroy_ofa_device(nesvnic->nesibdev); 319 nesdev->nesadapter->send_term_ok = 0;
313 nesvnic->nesibdev = NULL; 320 nesdev->iw_status = 0;
314 nesvnic->of_device_registered = 0; 321 nes_port_ibevent(nesvnic);
315 } 322 }
316 nes_destroy_nic_qp(nesvnic); 323 nes_destroy_nic_qp(nesvnic);
317 324
@@ -463,7 +470,6 @@ static int nes_netdev_start_xmit(struct sk_buff *skb, struct net_device *netdev)
463 u16 nhoffset; 470 u16 nhoffset;
464 u16 wqes_needed; 471 u16 wqes_needed;
465 u16 wqes_available; 472 u16 wqes_available;
466 u32 old_head;
467 u32 wqe_misc; 473 u32 wqe_misc;
468 474
469 /* 475 /*
@@ -503,7 +509,6 @@ sq_no_longer_full:
503 if (skb_is_gso(skb)) { 509 if (skb_is_gso(skb)) {
504 nesvnic->segmented_tso_requests++; 510 nesvnic->segmented_tso_requests++;
505 nesvnic->tso_requests++; 511 nesvnic->tso_requests++;
506 old_head = nesnic->sq_head;
507 /* Basically 4 fragments available per WQE with extended fragments */ 512 /* Basically 4 fragments available per WQE with extended fragments */
508 wqes_needed = nr_frags >> 2; 513 wqes_needed = nr_frags >> 2;
509 wqes_needed += (nr_frags&3)?1:0; 514 wqes_needed += (nr_frags&3)?1:0;
diff --git a/drivers/infiniband/hw/nes/nes_utils.c b/drivers/infiniband/hw/nes/nes_utils.c
index a9f5dd272f1a..f9c417c6b3b3 100644
--- a/drivers/infiniband/hw/nes/nes_utils.c
+++ b/drivers/infiniband/hw/nes/nes_utils.c
@@ -190,6 +190,11 @@ int nes_read_eeprom_values(struct nes_device *nesdev, struct nes_adapter *nesada
190 nesadapter->firmware_version = (((u32)(u8)(eeprom_data>>8)) << 16) + 190 nesadapter->firmware_version = (((u32)(u8)(eeprom_data>>8)) << 16) +
191 (u32)((u8)eeprom_data); 191 (u32)((u8)eeprom_data);
192 192
193 eeprom_data = nes_read16_eeprom(nesdev->regs, next_section_address + 10);
194 printk(PFX "EEPROM version %u.%u\n", (u8)(eeprom_data>>8), (u8)eeprom_data);
195 nesadapter->eeprom_version = (((u32)(u8)(eeprom_data>>8)) << 16) +
196 (u32)((u8)eeprom_data);
197
193no_fw_rev: 198no_fw_rev:
194 /* eeprom is valid */ 199 /* eeprom is valid */
195 eeprom_offset = nesadapter->software_eeprom_offset; 200 eeprom_offset = nesadapter->software_eeprom_offset;
diff --git a/drivers/infiniband/hw/nes/nes_verbs.c b/drivers/infiniband/hw/nes/nes_verbs.c
index 9bc2d744b2ea..9046e6675686 100644
--- a/drivers/infiniband/hw/nes/nes_verbs.c
+++ b/drivers/infiniband/hw/nes/nes_verbs.c
@@ -518,7 +518,7 @@ static int nes_query_device(struct ib_device *ibdev, struct ib_device_attr *prop
518 memset(props, 0, sizeof(*props)); 518 memset(props, 0, sizeof(*props));
519 memcpy(&props->sys_image_guid, nesvnic->netdev->dev_addr, 6); 519 memcpy(&props->sys_image_guid, nesvnic->netdev->dev_addr, 6);
520 520
521 props->fw_ver = nesdev->nesadapter->fw_ver; 521 props->fw_ver = nesdev->nesadapter->firmware_version;
522 props->device_cap_flags = nesdev->nesadapter->device_cap_flags; 522 props->device_cap_flags = nesdev->nesadapter->device_cap_flags;
523 props->vendor_id = nesdev->nesadapter->vendor_id; 523 props->vendor_id = nesdev->nesadapter->vendor_id;
524 props->vendor_part_id = nesdev->nesadapter->vendor_part_id; 524 props->vendor_part_id = nesdev->nesadapter->vendor_part_id;
@@ -1941,7 +1941,7 @@ static int nes_reg_mr(struct nes_device *nesdev, struct nes_pd *nespd,
1941 u8 use_256_pbls = 0; 1941 u8 use_256_pbls = 0;
1942 u8 use_4k_pbls = 0; 1942 u8 use_4k_pbls = 0;
1943 u16 use_two_level = (pbl_count_4k > 1) ? 1 : 0; 1943 u16 use_two_level = (pbl_count_4k > 1) ? 1 : 0;
1944 struct nes_root_vpbl new_root = {0, 0, 0}; 1944 struct nes_root_vpbl new_root = { 0, NULL, NULL };
1945 u32 opcode = 0; 1945 u32 opcode = 0;
1946 u16 major_code; 1946 u16 major_code;
1947 1947
@@ -2112,13 +2112,12 @@ static struct ib_mr *nes_reg_phys_mr(struct ib_pd *ib_pd,
2112 u32 driver_key = 0; 2112 u32 driver_key = 0;
2113 u32 root_pbl_index = 0; 2113 u32 root_pbl_index = 0;
2114 u32 cur_pbl_index = 0; 2114 u32 cur_pbl_index = 0;
2115 int err = 0, pbl_depth = 0; 2115 int err = 0;
2116 int ret = 0; 2116 int ret = 0;
2117 u16 pbl_count = 0; 2117 u16 pbl_count = 0;
2118 u8 single_page = 1; 2118 u8 single_page = 1;
2119 u8 stag_key = 0; 2119 u8 stag_key = 0;
2120 2120
2121 pbl_depth = 0;
2122 region_length = 0; 2121 region_length = 0;
2123 vpbl.pbl_vbase = NULL; 2122 vpbl.pbl_vbase = NULL;
2124 root_vpbl.pbl_vbase = NULL; 2123 root_vpbl.pbl_vbase = NULL;
@@ -2931,7 +2930,6 @@ int nes_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,
2931 int ret; 2930 int ret;
2932 u16 original_last_aeq; 2931 u16 original_last_aeq;
2933 u8 issue_modify_qp = 0; 2932 u8 issue_modify_qp = 0;
2934 u8 issue_disconnect = 0;
2935 u8 dont_wait = 0; 2933 u8 dont_wait = 0;
2936 2934
2937 nes_debug(NES_DBG_MOD_QP, "QP%u: QP State=%u, cur QP State=%u," 2935 nes_debug(NES_DBG_MOD_QP, "QP%u: QP State=%u, cur QP State=%u,"
@@ -3058,6 +3056,7 @@ int nes_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,
3058 nesqp->hte_added = 0; 3056 nesqp->hte_added = 0;
3059 } 3057 }
3060 if ((nesqp->hw_tcp_state > NES_AEQE_TCP_STATE_CLOSED) && 3058 if ((nesqp->hw_tcp_state > NES_AEQE_TCP_STATE_CLOSED) &&
3059 (nesdev->iw_status) &&
3061 (nesqp->hw_tcp_state != NES_AEQE_TCP_STATE_TIME_WAIT)) { 3060 (nesqp->hw_tcp_state != NES_AEQE_TCP_STATE_TIME_WAIT)) {
3062 next_iwarp_state |= NES_CQP_QP_RESET; 3061 next_iwarp_state |= NES_CQP_QP_RESET;
3063 } else { 3062 } else {
@@ -3082,7 +3081,6 @@ int nes_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,
3082 nesqp->iwarp_state = next_iwarp_state & NES_CQP_QP_IWARP_STATE_MASK; 3081 nesqp->iwarp_state = next_iwarp_state & NES_CQP_QP_IWARP_STATE_MASK;
3083 nes_debug(NES_DBG_MOD_QP, "Change nesqp->iwarp_state=%08x\n", 3082 nes_debug(NES_DBG_MOD_QP, "Change nesqp->iwarp_state=%08x\n",
3084 nesqp->iwarp_state); 3083 nesqp->iwarp_state);
3085 issue_disconnect = 1;
3086 } else { 3084 } else {
3087 nesqp->iwarp_state = next_iwarp_state & NES_CQP_QP_IWARP_STATE_MASK; 3085 nesqp->iwarp_state = next_iwarp_state & NES_CQP_QP_IWARP_STATE_MASK;
3088 nes_debug(NES_DBG_MOD_QP, "Change nesqp->iwarp_state=%08x\n", 3086 nes_debug(NES_DBG_MOD_QP, "Change nesqp->iwarp_state=%08x\n",
@@ -3936,6 +3934,17 @@ struct nes_ib_device *nes_init_ofa_device(struct net_device *netdev)
3936 return nesibdev; 3934 return nesibdev;
3937} 3935}
3938 3936
3937void nes_port_ibevent(struct nes_vnic *nesvnic)
3938{
3939 struct nes_ib_device *nesibdev = nesvnic->nesibdev;
3940 struct nes_device *nesdev = nesvnic->nesdev;
3941 struct ib_event event;
3942 event.device = &nesibdev->ibdev;
3943 event.element.port_num = nesvnic->logical_port + 1;
3944 event.event = nesdev->iw_status ? IB_EVENT_PORT_ACTIVE : IB_EVENT_PORT_ERR;
3945 ib_dispatch_event(&event);
3946}
3947
3939 3948
3940/** 3949/**
3941 * nes_destroy_ofa_device 3950 * nes_destroy_ofa_device