diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-08-07 20:08:02 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-08-07 20:08:02 -0400 |
commit | 3cc08fc35db75b059118626c30b60b0f56583802 (patch) | |
tree | 704d71199c8be8d5b822ca424675291e8cec7bde /drivers/infiniband/hw/nes | |
parent | faa38b5e0e092914764cdba9f83d31a3f794d182 (diff) | |
parent | 03b37ecdb3975f09832747600853d3818a50eda3 (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.c | 37 | ||||
-rw-r--r-- | drivers/infiniband/hw/nes/nes.h | 2 | ||||
-rw-r--r-- | drivers/infiniband/hw/nes/nes_cm.c | 10 | ||||
-rw-r--r-- | drivers/infiniband/hw/nes/nes_hw.c | 23 | ||||
-rw-r--r-- | drivers/infiniband/hw/nes/nes_hw.h | 3 | ||||
-rw-r--r-- | drivers/infiniband/hw/nes/nes_nic.c | 15 | ||||
-rw-r--r-- | drivers/infiniband/hw/nes/nes_utils.c | 5 | ||||
-rw-r--r-- | drivers/infiniband/hw/nes/nes_verbs.c | 21 |
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; | |||
110 | static unsigned int sysfs_idx_addr; | 110 | static unsigned int sysfs_idx_addr; |
111 | 111 | ||
112 | static struct pci_device_id nes_pci_table[] = { | 112 | static 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 *); | |||
527 | int nes_hw_modify_qp(struct nes_device *, struct nes_qp *, u32, u32, u32); | 528 | int nes_hw_modify_qp(struct nes_device *, struct nes_qp *, u32, u32, u32); |
528 | int nes_modify_qp(struct ib_qp *, struct ib_qp_attr *, int, struct ib_udata *); | 529 | int nes_modify_qp(struct ib_qp *, struct ib_qp_attr *, int, struct ib_udata *); |
529 | struct nes_ib_device *nes_init_ofa_device(struct net_device *); | 530 | struct nes_ib_device *nes_init_ofa_device(struct net_device *); |
531 | void nes_port_ibevent(struct nes_vnic *nesvnic); | ||
530 | void nes_destroy_ofa_device(struct nes_ib_device *); | 532 | void nes_destroy_ofa_device(struct nes_ib_device *); |
531 | int nes_register_ofa_device(struct nes_ib_device *); | 533 | int 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 | ||
3000 | static u8 *locate_mpa(u8 *pkt, u32 aeq_info) | 3000 | static 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 | ||
3291 | static void nes_terminate_send_fin(struct nes_device *nesdev, | 3294 | static 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 | |||
193 | no_fw_rev: | 198 | no_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 | ||
3937 | void 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 |