aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Marciniszyn <mike.marciniszyn@intel.com>2016-09-06 07:35:05 -0400
committerDoug Ledford <dledford@redhat.com>2016-10-02 08:42:06 -0400
commit261a4351844bcacb622d6d498a1bc98242b2db9e (patch)
tree36e9595c4c797be4f53822fdf0e3d49bfd989154
parent7368ef023515ce5affb44fa3fd4935c70e6a573f (diff)
IB/qib,IB/hfi: Use core common header file
Use common header file structs, defines, and accessors in the drivers. The old declarations are removed. The repositioning of the includes allows for the removal of hfi1_message_header and replaces its use with ib_header. Also corrected are two issues with set_armed_to_active(): - The "packet" parameter is now a pointer as it should have been - The etype is validated to insure that the header is correct Reviewed-by: Dennis Dalessandro <dennis.dalessandro@intel.com> Reviewed-by: Don Hiatt <don.hiatt@intel.com> Signed-off-by: Mike Marciniszyn <mike.marciniszyn@intel.com> Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
-rw-r--r--drivers/infiniband/hw/hfi1/chip.c6
-rw-r--r--drivers/infiniband/hw/hfi1/chip.h2
-rw-r--r--drivers/infiniband/hw/hfi1/common.h8
-rw-r--r--drivers/infiniband/hw/hfi1/driver.c35
-rw-r--r--drivers/infiniband/hw/hfi1/hfi.h7
-rw-r--r--drivers/infiniband/hw/hfi1/rc.c87
-rw-r--r--drivers/infiniband/hw/hfi1/ruc.c4
-rw-r--r--drivers/infiniband/hw/hfi1/trace.c27
-rw-r--r--drivers/infiniband/hw/hfi1/trace_ibhdrs.h14
-rw-r--r--drivers/infiniband/hw/hfi1/trace_rx.h4
-rw-r--r--drivers/infiniband/hw/hfi1/uc.c6
-rw-r--r--drivers/infiniband/hw/hfi1/ud.c12
-rw-r--r--drivers/infiniband/hw/hfi1/verbs.c14
-rw-r--r--drivers/infiniband/hw/hfi1/verbs.h90
-rw-r--r--drivers/infiniband/hw/qib/qib.h1
-rw-r--r--drivers/infiniband/hw/qib/qib_driver.c4
-rw-r--r--drivers/infiniband/hw/qib/qib_iba7322.c2
-rw-r--r--drivers/infiniband/hw/qib/qib_rc.c61
-rw-r--r--drivers/infiniband/hw/qib/qib_ruc.c4
-rw-r--r--drivers/infiniband/hw/qib/qib_uc.c6
-rw-r--r--drivers/infiniband/hw/qib/qib_ud.c6
-rw-r--r--drivers/infiniband/hw/qib/qib_verbs.c14
-rw-r--r--drivers/infiniband/hw/qib/qib_verbs.h94
23 files changed, 162 insertions, 346 deletions
diff --git a/drivers/infiniband/hw/hfi1/chip.c b/drivers/infiniband/hw/hfi1/chip.c
index cc38004cea42..8e657dbd5ee8 100644
--- a/drivers/infiniband/hw/hfi1/chip.c
+++ b/drivers/infiniband/hw/hfi1/chip.c
@@ -9718,12 +9718,12 @@ void hfi1_clear_tids(struct hfi1_ctxtdata *rcd)
9718 hfi1_put_tid(dd, i, PT_INVALID, 0, 0); 9718 hfi1_put_tid(dd, i, PT_INVALID, 0, 0);
9719} 9719}
9720 9720
9721struct hfi1_message_header *hfi1_get_msgheader( 9721struct ib_header *hfi1_get_msgheader(
9722 struct hfi1_devdata *dd, __le32 *rhf_addr) 9722 struct hfi1_devdata *dd, __le32 *rhf_addr)
9723{ 9723{
9724 u32 offset = rhf_hdrq_offset(rhf_to_cpu(rhf_addr)); 9724 u32 offset = rhf_hdrq_offset(rhf_to_cpu(rhf_addr));
9725 9725
9726 return (struct hfi1_message_header *) 9726 return (struct ib_header *)
9727 (rhf_addr - dd->rhf_offset + offset); 9727 (rhf_addr - dd->rhf_offset + offset);
9728} 9728}
9729 9729
diff --git a/drivers/infiniband/hw/hfi1/chip.h b/drivers/infiniband/hw/hfi1/chip.h
index e29573769efc..35a78553236b 100644
--- a/drivers/infiniband/hw/hfi1/chip.h
+++ b/drivers/infiniband/hw/hfi1/chip.h
@@ -1336,7 +1336,7 @@ enum {
1336u64 get_all_cpu_total(u64 __percpu *cntr); 1336u64 get_all_cpu_total(u64 __percpu *cntr);
1337void hfi1_start_cleanup(struct hfi1_devdata *dd); 1337void hfi1_start_cleanup(struct hfi1_devdata *dd);
1338void hfi1_clear_tids(struct hfi1_ctxtdata *rcd); 1338void hfi1_clear_tids(struct hfi1_ctxtdata *rcd);
1339struct hfi1_message_header *hfi1_get_msgheader( 1339struct ib_header *hfi1_get_msgheader(
1340 struct hfi1_devdata *dd, __le32 *rhf_addr); 1340 struct hfi1_devdata *dd, __le32 *rhf_addr);
1341int hfi1_init_ctxt(struct send_context *sc); 1341int hfi1_init_ctxt(struct send_context *sc);
1342void hfi1_put_tid(struct hfi1_devdata *dd, u32 index, 1342void hfi1_put_tid(struct hfi1_devdata *dd, u32 index,
diff --git a/drivers/infiniband/hw/hfi1/common.h b/drivers/infiniband/hw/hfi1/common.h
index fcc9c217a97a..da7be21bedb4 100644
--- a/drivers/infiniband/hw/hfi1/common.h
+++ b/drivers/infiniband/hw/hfi1/common.h
@@ -320,14 +320,6 @@ struct diag_pkt {
320/* RHF receive type error - bypass packet errors */ 320/* RHF receive type error - bypass packet errors */
321#define RHF_RTE_BYPASS_NO_ERR 0x0 321#define RHF_RTE_BYPASS_NO_ERR 0x0
322 322
323/*
324 * This structure contains the first field common to all protocols
325 * that employ this chip.
326 */
327struct hfi1_message_header {
328 __be16 lrh[4];
329};
330
331/* IB - LRH header constants */ 323/* IB - LRH header constants */
332#define HFI1_LRH_GRH 0x0003 /* 1. word of IB LRH - next header: GRH */ 324#define HFI1_LRH_GRH 0x0003 /* 1. word of IB LRH - next header: GRH */
333#define HFI1_LRH_BTH 0x0002 /* 1. word of IB LRH - next header: BTH */ 325#define HFI1_LRH_BTH 0x0002 /* 1. word of IB LRH - next header: BTH */
diff --git a/drivers/infiniband/hw/hfi1/driver.c b/drivers/infiniband/hw/hfi1/driver.c
index 303f10555729..6563e4d38b80 100644
--- a/drivers/infiniband/hw/hfi1/driver.c
+++ b/drivers/infiniband/hw/hfi1/driver.c
@@ -276,7 +276,7 @@ inline int hfi1_rcvbuf_validate(u32 size, u8 type, u16 *encoded)
276static void rcv_hdrerr(struct hfi1_ctxtdata *rcd, struct hfi1_pportdata *ppd, 276static void rcv_hdrerr(struct hfi1_ctxtdata *rcd, struct hfi1_pportdata *ppd,
277 struct hfi1_packet *packet) 277 struct hfi1_packet *packet)
278{ 278{
279 struct hfi1_message_header *rhdr = packet->hdr; 279 struct ib_header *rhdr = packet->hdr;
280 u32 rte = rhf_rcv_type_err(packet->rhf); 280 u32 rte = rhf_rcv_type_err(packet->rhf);
281 int lnh = be16_to_cpu(rhdr->lrh[0]) & 3; 281 int lnh = be16_to_cpu(rhdr->lrh[0]) & 3;
282 struct hfi1_ibport *ibp = &ppd->ibport_data; 282 struct hfi1_ibport *ibp = &ppd->ibport_data;
@@ -288,10 +288,9 @@ static void rcv_hdrerr(struct hfi1_ctxtdata *rcd, struct hfi1_pportdata *ppd,
288 288
289 if (packet->rhf & RHF_TID_ERR) { 289 if (packet->rhf & RHF_TID_ERR) {
290 /* For TIDERR and RC QPs preemptively schedule a NAK */ 290 /* For TIDERR and RC QPs preemptively schedule a NAK */
291 struct hfi1_ib_header *hdr = (struct hfi1_ib_header *)rhdr; 291 struct ib_other_headers *ohdr = NULL;
292 struct hfi1_other_headers *ohdr = NULL;
293 u32 tlen = rhf_pkt_len(packet->rhf); /* in bytes */ 292 u32 tlen = rhf_pkt_len(packet->rhf); /* in bytes */
294 u16 lid = be16_to_cpu(hdr->lrh[1]); 293 u16 lid = be16_to_cpu(rhdr->lrh[1]);
295 u32 qp_num; 294 u32 qp_num;
296 u32 rcv_flags = 0; 295 u32 rcv_flags = 0;
297 296
@@ -301,14 +300,14 @@ static void rcv_hdrerr(struct hfi1_ctxtdata *rcd, struct hfi1_pportdata *ppd,
301 300
302 /* Check for GRH */ 301 /* Check for GRH */
303 if (lnh == HFI1_LRH_BTH) { 302 if (lnh == HFI1_LRH_BTH) {
304 ohdr = &hdr->u.oth; 303 ohdr = &rhdr->u.oth;
305 } else if (lnh == HFI1_LRH_GRH) { 304 } else if (lnh == HFI1_LRH_GRH) {
306 u32 vtf; 305 u32 vtf;
307 306
308 ohdr = &hdr->u.l.oth; 307 ohdr = &rhdr->u.l.oth;
309 if (hdr->u.l.grh.next_hdr != IB_GRH_NEXT_HDR) 308 if (rhdr->u.l.grh.next_hdr != IB_GRH_NEXT_HDR)
310 goto drop; 309 goto drop;
311 vtf = be32_to_cpu(hdr->u.l.grh.version_tclass_flow); 310 vtf = be32_to_cpu(rhdr->u.l.grh.version_tclass_flow);
312 if ((vtf >> IB_GRH_VERSION_SHIFT) != IB_GRH_VERSION) 311 if ((vtf >> IB_GRH_VERSION_SHIFT) != IB_GRH_VERSION)
313 goto drop; 312 goto drop;
314 rcv_flags |= HFI1_HAS_GRH; 313 rcv_flags |= HFI1_HAS_GRH;
@@ -344,7 +343,7 @@ static void rcv_hdrerr(struct hfi1_ctxtdata *rcd, struct hfi1_pportdata *ppd,
344 case IB_QPT_RC: 343 case IB_QPT_RC:
345 hfi1_rc_hdrerr( 344 hfi1_rc_hdrerr(
346 rcd, 345 rcd,
347 hdr, 346 rhdr,
348 rcv_flags, 347 rcv_flags,
349 qp); 348 qp);
350 break; 349 break;
@@ -452,8 +451,8 @@ void hfi1_process_ecn_slowpath(struct rvt_qp *qp, struct hfi1_packet *pkt,
452 bool do_cnp) 451 bool do_cnp)
453{ 452{
454 struct hfi1_ibport *ibp = to_iport(qp->ibqp.device, qp->port_num); 453 struct hfi1_ibport *ibp = to_iport(qp->ibqp.device, qp->port_num);
455 struct hfi1_ib_header *hdr = pkt->hdr; 454 struct ib_header *hdr = pkt->hdr;
456 struct hfi1_other_headers *ohdr = pkt->ohdr; 455 struct ib_other_headers *ohdr = pkt->ohdr;
457 struct ib_grh *grh = NULL; 456 struct ib_grh *grh = NULL;
458 u32 rqpn = 0, bth1; 457 u32 rqpn = 0, bth1;
459 u16 rlid, dlid = be16_to_cpu(hdr->lrh[1]); 458 u16 rlid, dlid = be16_to_cpu(hdr->lrh[1]);
@@ -487,7 +486,7 @@ void hfi1_process_ecn_slowpath(struct rvt_qp *qp, struct hfi1_packet *pkt,
487 return; 486 return;
488 } 487 }
489 488
490 sc = hdr2sc((struct hfi1_message_header *)hdr, pkt->rhf); 489 sc = hdr2sc(hdr, pkt->rhf);
491 490
492 bth1 = be32_to_cpu(ohdr->bth[1]); 491 bth1 = be32_to_cpu(ohdr->bth[1]);
493 if (do_cnp && (bth1 & HFI1_FECN_SMASK)) { 492 if (do_cnp && (bth1 & HFI1_FECN_SMASK)) {
@@ -599,8 +598,8 @@ static void __prescan_rxq(struct hfi1_packet *packet)
599 __le32 *rhf_addr = (__le32 *)rcd->rcvhdrq + mdata.ps_head + 598 __le32 *rhf_addr = (__le32 *)rcd->rcvhdrq + mdata.ps_head +
600 dd->rhf_offset; 599 dd->rhf_offset;
601 struct rvt_qp *qp; 600 struct rvt_qp *qp;
602 struct hfi1_ib_header *hdr; 601 struct ib_header *hdr;
603 struct hfi1_other_headers *ohdr; 602 struct ib_other_headers *ohdr;
604 struct rvt_dev_info *rdi = &dd->verbs_dev.rdi; 603 struct rvt_dev_info *rdi = &dd->verbs_dev.rdi;
605 u64 rhf = rhf_to_cpu(rhf_addr); 604 u64 rhf = rhf_to_cpu(rhf_addr);
606 u32 etype = rhf_rcv_type(rhf), qpn, bth1; 605 u32 etype = rhf_rcv_type(rhf), qpn, bth1;
@@ -616,8 +615,8 @@ static void __prescan_rxq(struct hfi1_packet *packet)
616 if (etype != RHF_RCV_TYPE_IB) 615 if (etype != RHF_RCV_TYPE_IB)
617 goto next; 616 goto next;
618 617
619 hdr = (struct hfi1_ib_header *) 618 hdr = hfi1_get_msgheader(dd, rhf_addr);
620 hfi1_get_msgheader(dd, rhf_addr); 619
621 lnh = be16_to_cpu(hdr->lrh[0]) & 3; 620 lnh = be16_to_cpu(hdr->lrh[0]) & 3;
622 621
623 if (lnh == HFI1_LRH_BTH) 622 if (lnh == HFI1_LRH_BTH)
@@ -892,8 +891,8 @@ static inline int set_armed_to_active(struct hfi1_ctxtdata *rcd,
892 struct hfi1_devdata *dd) 891 struct hfi1_devdata *dd)
893{ 892{
894 struct work_struct *lsaw = &rcd->ppd->linkstate_active_work; 893 struct work_struct *lsaw = &rcd->ppd->linkstate_active_work;
895 struct hfi1_message_header *hdr = hfi1_get_msgheader(packet->rcd->dd, 894 struct ib_header *hdr = hfi1_get_msgheader(packet->rcd->dd,
896 packet->rhf_addr); 895 packet->rhf_addr);
897 u8 etype = rhf_rcv_type(packet->rhf); 896 u8 etype = rhf_rcv_type(packet->rhf);
898 897
899 if (etype == RHF_RCV_TYPE_IB && hdr2sc(hdr, packet->rhf) != 0xf) { 898 if (etype == RHF_RCV_TYPE_IB && hdr2sc(hdr, packet->rhf) != 0xf) {
diff --git a/drivers/infiniband/hw/hfi1/hfi.h b/drivers/infiniband/hw/hfi1/hfi.h
index 325ec211370f..791d7a23297d 100644
--- a/drivers/infiniband/hw/hfi1/hfi.h
+++ b/drivers/infiniband/hw/hfi1/hfi.h
@@ -64,6 +64,7 @@
64#include <linux/kthread.h> 64#include <linux/kthread.h>
65#include <linux/i2c.h> 65#include <linux/i2c.h>
66#include <linux/i2c-algo-bit.h> 66#include <linux/i2c-algo-bit.h>
67#include <rdma/ib_hdrs.h>
67#include <rdma/rdma_vt.h> 68#include <rdma/rdma_vt.h>
68 69
69#include "chip_registers.h" 70#include "chip_registers.h"
@@ -350,7 +351,7 @@ struct hfi1_packet {
350 struct hfi1_ctxtdata *rcd; 351 struct hfi1_ctxtdata *rcd;
351 __le32 *rhf_addr; 352 __le32 *rhf_addr;
352 struct rvt_qp *qp; 353 struct rvt_qp *qp;
353 struct hfi1_other_headers *ohdr; 354 struct ib_other_headers *ohdr;
354 u64 rhf; 355 u64 rhf;
355 u32 maxcnt; 356 u32 maxcnt;
356 u32 rhqoff; 357 u32 rhqoff;
@@ -1268,7 +1269,7 @@ static inline u32 driver_lstate(struct hfi1_pportdata *ppd)
1268void receive_interrupt_work(struct work_struct *work); 1269void receive_interrupt_work(struct work_struct *work);
1269 1270
1270/* extract service channel from header and rhf */ 1271/* extract service channel from header and rhf */
1271static inline int hdr2sc(struct hfi1_message_header *hdr, u64 rhf) 1272static inline int hdr2sc(struct ib_header *hdr, u64 rhf)
1272{ 1273{
1273 return ((be16_to_cpu(hdr->lrh[0]) >> 12) & 0xf) | 1274 return ((be16_to_cpu(hdr->lrh[0]) >> 12) & 0xf) |
1274 ((!!(rhf_dc_info(rhf))) << 4); 1275 ((!!(rhf_dc_info(rhf))) << 4);
@@ -1603,7 +1604,7 @@ void hfi1_process_ecn_slowpath(struct rvt_qp *qp, struct hfi1_packet *pkt,
1603static inline bool process_ecn(struct rvt_qp *qp, struct hfi1_packet *pkt, 1604static inline bool process_ecn(struct rvt_qp *qp, struct hfi1_packet *pkt,
1604 bool do_cnp) 1605 bool do_cnp)
1605{ 1606{
1606 struct hfi1_other_headers *ohdr = pkt->ohdr; 1607 struct ib_other_headers *ohdr = pkt->ohdr;
1607 u32 bth1; 1608 u32 bth1;
1608 1609
1609 bth1 = be32_to_cpu(ohdr->bth[1]); 1610 bth1 = be32_to_cpu(ohdr->bth[1]);
diff --git a/drivers/infiniband/hw/hfi1/rc.c b/drivers/infiniband/hw/hfi1/rc.c
index acf0eb87ed2a..9f7900f15627 100644
--- a/drivers/infiniband/hw/hfi1/rc.c
+++ b/drivers/infiniband/hw/hfi1/rc.c
@@ -216,7 +216,7 @@ static u32 restart_sge(struct rvt_sge_state *ss, struct rvt_swqe *wqe,
216 * Note the QP s_lock must be held. 216 * Note the QP s_lock must be held.
217 */ 217 */
218static int make_rc_ack(struct hfi1_ibdev *dev, struct rvt_qp *qp, 218static int make_rc_ack(struct hfi1_ibdev *dev, struct rvt_qp *qp,
219 struct hfi1_other_headers *ohdr, 219 struct ib_other_headers *ohdr,
220 struct hfi1_pkt_state *ps) 220 struct hfi1_pkt_state *ps)
221{ 221{
222 struct rvt_ack_entry *e; 222 struct rvt_ack_entry *e;
@@ -299,10 +299,7 @@ static int make_rc_ack(struct hfi1_ibdev *dev, struct rvt_qp *qp,
299 len = 0; 299 len = 0;
300 qp->s_ack_state = OP(ATOMIC_ACKNOWLEDGE); 300 qp->s_ack_state = OP(ATOMIC_ACKNOWLEDGE);
301 ohdr->u.at.aeth = hfi1_compute_aeth(qp); 301 ohdr->u.at.aeth = hfi1_compute_aeth(qp);
302 ohdr->u.at.atomic_ack_eth[0] = 302 ib_u64_put(e->atomic_data, &ohdr->u.at.atomic_ack_eth);
303 cpu_to_be32(e->atomic_data >> 32);
304 ohdr->u.at.atomic_ack_eth[1] =
305 cpu_to_be32(e->atomic_data);
306 hwords += sizeof(ohdr->u.at) / sizeof(u32); 303 hwords += sizeof(ohdr->u.at) / sizeof(u32);
307 bth2 = mask_psn(e->psn); 304 bth2 = mask_psn(e->psn);
308 e->sent = 1; 305 e->sent = 1;
@@ -390,7 +387,7 @@ int hfi1_make_rc_req(struct rvt_qp *qp, struct hfi1_pkt_state *ps)
390{ 387{
391 struct hfi1_qp_priv *priv = qp->priv; 388 struct hfi1_qp_priv *priv = qp->priv;
392 struct hfi1_ibdev *dev = to_idev(qp->ibqp.device); 389 struct hfi1_ibdev *dev = to_idev(qp->ibqp.device);
393 struct hfi1_other_headers *ohdr; 390 struct ib_other_headers *ohdr;
394 struct rvt_sge_state *ss; 391 struct rvt_sge_state *ss;
395 struct rvt_swqe *wqe; 392 struct rvt_swqe *wqe;
396 /* header size in 32-bit words LRH+BTH = (8+12)/4. */ 393 /* header size in 32-bit words LRH+BTH = (8+12)/4. */
@@ -566,8 +563,9 @@ int hfi1_make_rc_req(struct rvt_qp *qp, struct hfi1_pkt_state *ps)
566 qp->s_flags |= RVT_S_WAIT_SSN_CREDIT; 563 qp->s_flags |= RVT_S_WAIT_SSN_CREDIT;
567 goto bail; 564 goto bail;
568 } 565 }
569 ohdr->u.rc.reth.vaddr = 566 put_ib_reth_vaddr(
570 cpu_to_be64(wqe->rdma_wr.remote_addr); 567 wqe->rdma_wr.remote_addr,
568 &ohdr->u.rc.reth);
571 ohdr->u.rc.reth.rkey = 569 ohdr->u.rc.reth.rkey =
572 cpu_to_be32(wqe->rdma_wr.rkey); 570 cpu_to_be32(wqe->rdma_wr.rkey);
573 ohdr->u.rc.reth.length = cpu_to_be32(len); 571 ohdr->u.rc.reth.length = cpu_to_be32(len);
@@ -608,8 +606,9 @@ int hfi1_make_rc_req(struct rvt_qp *qp, struct hfi1_pkt_state *ps)
608 if (!(qp->s_flags & RVT_S_UNLIMITED_CREDIT)) 606 if (!(qp->s_flags & RVT_S_UNLIMITED_CREDIT))
609 qp->s_lsn++; 607 qp->s_lsn++;
610 } 608 }
611 ohdr->u.rc.reth.vaddr = 609 put_ib_reth_vaddr(
612 cpu_to_be64(wqe->rdma_wr.remote_addr); 610 wqe->rdma_wr.remote_addr,
611 &ohdr->u.rc.reth);
613 ohdr->u.rc.reth.rkey = 612 ohdr->u.rc.reth.rkey =
614 cpu_to_be32(wqe->rdma_wr.rkey); 613 cpu_to_be32(wqe->rdma_wr.rkey);
615 ohdr->u.rc.reth.length = cpu_to_be32(len); 614 ohdr->u.rc.reth.length = cpu_to_be32(len);
@@ -640,20 +639,18 @@ int hfi1_make_rc_req(struct rvt_qp *qp, struct hfi1_pkt_state *ps)
640 } 639 }
641 if (wqe->wr.opcode == IB_WR_ATOMIC_CMP_AND_SWP) { 640 if (wqe->wr.opcode == IB_WR_ATOMIC_CMP_AND_SWP) {
642 qp->s_state = OP(COMPARE_SWAP); 641 qp->s_state = OP(COMPARE_SWAP);
643 ohdr->u.atomic_eth.swap_data = cpu_to_be64( 642 put_ib_ateth_swap(wqe->atomic_wr.swap,
644 wqe->atomic_wr.swap); 643 &ohdr->u.atomic_eth);
645 ohdr->u.atomic_eth.compare_data = cpu_to_be64( 644 put_ib_ateth_compare(wqe->atomic_wr.compare_add,
646 wqe->atomic_wr.compare_add); 645 &ohdr->u.atomic_eth);
647 } else { 646 } else {
648 qp->s_state = OP(FETCH_ADD); 647 qp->s_state = OP(FETCH_ADD);
649 ohdr->u.atomic_eth.swap_data = cpu_to_be64( 648 put_ib_ateth_swap(wqe->atomic_wr.compare_add,
650 wqe->atomic_wr.compare_add); 649 &ohdr->u.atomic_eth);
651 ohdr->u.atomic_eth.compare_data = 0; 650 put_ib_ateth_compare(0, &ohdr->u.atomic_eth);
652 } 651 }
653 ohdr->u.atomic_eth.vaddr[0] = cpu_to_be32( 652 put_ib_ateth_vaddr(wqe->atomic_wr.remote_addr,
654 wqe->atomic_wr.remote_addr >> 32); 653 &ohdr->u.atomic_eth);
655 ohdr->u.atomic_eth.vaddr[1] = cpu_to_be32(
656 wqe->atomic_wr.remote_addr);
657 ohdr->u.atomic_eth.rkey = cpu_to_be32( 654 ohdr->u.atomic_eth.rkey = cpu_to_be32(
658 wqe->atomic_wr.rkey); 655 wqe->atomic_wr.rkey);
659 hwords += sizeof(struct ib_atomic_eth) / sizeof(u32); 656 hwords += sizeof(struct ib_atomic_eth) / sizeof(u32);
@@ -779,8 +776,9 @@ int hfi1_make_rc_req(struct rvt_qp *qp, struct hfi1_pkt_state *ps)
779 * See restart_rc(). 776 * See restart_rc().
780 */ 777 */
781 len = (delta_psn(qp->s_psn, wqe->psn)) * pmtu; 778 len = (delta_psn(qp->s_psn, wqe->psn)) * pmtu;
782 ohdr->u.rc.reth.vaddr = 779 put_ib_reth_vaddr(
783 cpu_to_be64(wqe->rdma_wr.remote_addr + len); 780 wqe->rdma_wr.remote_addr + len,
781 &ohdr->u.rc.reth);
784 ohdr->u.rc.reth.rkey = 782 ohdr->u.rc.reth.rkey =
785 cpu_to_be32(wqe->rdma_wr.rkey); 783 cpu_to_be32(wqe->rdma_wr.rkey);
786 ohdr->u.rc.reth.length = cpu_to_be32(wqe->length - len); 784 ohdr->u.rc.reth.length = cpu_to_be32(wqe->length - len);
@@ -856,8 +854,8 @@ void hfi1_send_rc_ack(struct hfi1_ctxtdata *rcd, struct rvt_qp *qp,
856 u32 vl, plen; 854 u32 vl, plen;
857 struct send_context *sc; 855 struct send_context *sc;
858 struct pio_buf *pbuf; 856 struct pio_buf *pbuf;
859 struct hfi1_ib_header hdr; 857 struct ib_header hdr;
860 struct hfi1_other_headers *ohdr; 858 struct ib_other_headers *ohdr;
861 unsigned long flags; 859 unsigned long flags;
862 860
863 /* Don't send ACK or NAK if a RDMA read or atomic is pending. */ 861 /* Don't send ACK or NAK if a RDMA read or atomic is pending. */
@@ -1141,9 +1139,9 @@ static void reset_sending_psn(struct rvt_qp *qp, u32 psn)
1141/* 1139/*
1142 * This should be called with the QP s_lock held and interrupts disabled. 1140 * This should be called with the QP s_lock held and interrupts disabled.
1143 */ 1141 */
1144void hfi1_rc_send_complete(struct rvt_qp *qp, struct hfi1_ib_header *hdr) 1142void hfi1_rc_send_complete(struct rvt_qp *qp, struct ib_header *hdr)
1145{ 1143{
1146 struct hfi1_other_headers *ohdr; 1144 struct ib_other_headers *ohdr;
1147 struct rvt_swqe *wqe; 1145 struct rvt_swqe *wqe;
1148 struct ib_wc wc; 1146 struct ib_wc wc;
1149 unsigned i; 1147 unsigned i;
@@ -1595,7 +1593,7 @@ static void rdma_seq_err(struct rvt_qp *qp, struct hfi1_ibport *ibp, u32 psn,
1595 * Called at interrupt level. 1593 * Called at interrupt level.
1596 */ 1594 */
1597static void rc_rcv_resp(struct hfi1_ibport *ibp, 1595static void rc_rcv_resp(struct hfi1_ibport *ibp,
1598 struct hfi1_other_headers *ohdr, 1596 struct ib_other_headers *ohdr,
1599 void *data, u32 tlen, struct rvt_qp *qp, 1597 void *data, u32 tlen, struct rvt_qp *qp,
1600 u32 opcode, u32 psn, u32 hdrsize, u32 pmtu, 1598 u32 opcode, u32 psn, u32 hdrsize, u32 pmtu,
1601 struct hfi1_ctxtdata *rcd) 1599 struct hfi1_ctxtdata *rcd)
@@ -1649,14 +1647,10 @@ static void rc_rcv_resp(struct hfi1_ibport *ibp,
1649 case OP(ATOMIC_ACKNOWLEDGE): 1647 case OP(ATOMIC_ACKNOWLEDGE):
1650 case OP(RDMA_READ_RESPONSE_FIRST): 1648 case OP(RDMA_READ_RESPONSE_FIRST):
1651 aeth = be32_to_cpu(ohdr->u.aeth); 1649 aeth = be32_to_cpu(ohdr->u.aeth);
1652 if (opcode == OP(ATOMIC_ACKNOWLEDGE)) { 1650 if (opcode == OP(ATOMIC_ACKNOWLEDGE))
1653 __be32 *p = ohdr->u.at.atomic_ack_eth; 1651 val = ib_u64_get(&ohdr->u.at.atomic_ack_eth);
1654 1652 else
1655 val = ((u64)be32_to_cpu(p[0]) << 32) |
1656 be32_to_cpu(p[1]);
1657 } else {
1658 val = 0; 1653 val = 0;
1659 }
1660 if (!do_rc_ack(qp, aeth, psn, opcode, val, rcd) || 1654 if (!do_rc_ack(qp, aeth, psn, opcode, val, rcd) ||
1661 opcode != OP(RDMA_READ_RESPONSE_FIRST)) 1655 opcode != OP(RDMA_READ_RESPONSE_FIRST))
1662 goto ack_done; 1656 goto ack_done;
@@ -1814,7 +1808,7 @@ static inline void rc_cancel_ack(struct rvt_qp *qp)
1814 * Return 1 if no more processing is needed; otherwise return 0 to 1808 * Return 1 if no more processing is needed; otherwise return 0 to
1815 * schedule a response to be sent. 1809 * schedule a response to be sent.
1816 */ 1810 */
1817static noinline int rc_rcv_error(struct hfi1_other_headers *ohdr, void *data, 1811static noinline int rc_rcv_error(struct ib_other_headers *ohdr, void *data,
1818 struct rvt_qp *qp, u32 opcode, u32 psn, 1812 struct rvt_qp *qp, u32 opcode, u32 psn,
1819 int diff, struct hfi1_ctxtdata *rcd) 1813 int diff, struct hfi1_ctxtdata *rcd)
1820{ 1814{
@@ -1922,7 +1916,7 @@ static noinline int rc_rcv_error(struct hfi1_other_headers *ohdr, void *data,
1922 } 1916 }
1923 if (len != 0) { 1917 if (len != 0) {
1924 u32 rkey = be32_to_cpu(reth->rkey); 1918 u32 rkey = be32_to_cpu(reth->rkey);
1925 u64 vaddr = be64_to_cpu(reth->vaddr); 1919 u64 vaddr = get_ib_reth_vaddr(reth);
1926 int ok; 1920 int ok;
1927 1921
1928 ok = rvt_rkey_ok(qp, &e->rdma_sge, len, vaddr, rkey, 1922 ok = rvt_rkey_ok(qp, &e->rdma_sge, len, vaddr, rkey,
@@ -2122,13 +2116,13 @@ void process_becn(struct hfi1_pportdata *ppd, u8 sl, u16 rlid, u32 lqpn,
2122void hfi1_rc_rcv(struct hfi1_packet *packet) 2116void hfi1_rc_rcv(struct hfi1_packet *packet)
2123{ 2117{
2124 struct hfi1_ctxtdata *rcd = packet->rcd; 2118 struct hfi1_ctxtdata *rcd = packet->rcd;
2125 struct hfi1_ib_header *hdr = packet->hdr; 2119 struct ib_header *hdr = packet->hdr;
2126 u32 rcv_flags = packet->rcv_flags; 2120 u32 rcv_flags = packet->rcv_flags;
2127 void *data = packet->ebuf; 2121 void *data = packet->ebuf;
2128 u32 tlen = packet->tlen; 2122 u32 tlen = packet->tlen;
2129 struct rvt_qp *qp = packet->qp; 2123 struct rvt_qp *qp = packet->qp;
2130 struct hfi1_ibport *ibp = to_iport(qp->ibqp.device, qp->port_num); 2124 struct hfi1_ibport *ibp = to_iport(qp->ibqp.device, qp->port_num);
2131 struct hfi1_other_headers *ohdr = packet->ohdr; 2125 struct ib_other_headers *ohdr = packet->ohdr;
2132 u32 bth0, opcode; 2126 u32 bth0, opcode;
2133 u32 hdrsize = packet->hlen; 2127 u32 hdrsize = packet->hlen;
2134 u32 psn; 2128 u32 psn;
@@ -2341,7 +2335,7 @@ send_last:
2341 qp->r_sge.sg_list = NULL; 2335 qp->r_sge.sg_list = NULL;
2342 if (qp->r_len != 0) { 2336 if (qp->r_len != 0) {
2343 u32 rkey = be32_to_cpu(reth->rkey); 2337 u32 rkey = be32_to_cpu(reth->rkey);
2344 u64 vaddr = be64_to_cpu(reth->vaddr); 2338 u64 vaddr = get_ib_reth_vaddr(reth);
2345 int ok; 2339 int ok;
2346 2340
2347 /* Check rkey & NAK */ 2341 /* Check rkey & NAK */
@@ -2396,7 +2390,7 @@ send_last:
2396 len = be32_to_cpu(reth->length); 2390 len = be32_to_cpu(reth->length);
2397 if (len) { 2391 if (len) {
2398 u32 rkey = be32_to_cpu(reth->rkey); 2392 u32 rkey = be32_to_cpu(reth->rkey);
2399 u64 vaddr = be64_to_cpu(reth->vaddr); 2393 u64 vaddr = get_ib_reth_vaddr(reth);
2400 int ok; 2394 int ok;
2401 2395
2402 /* Check rkey & NAK */ 2396 /* Check rkey & NAK */
@@ -2468,8 +2462,7 @@ send_last:
2468 e->rdma_sge.mr = NULL; 2462 e->rdma_sge.mr = NULL;
2469 } 2463 }
2470 ateth = &ohdr->u.atomic_eth; 2464 ateth = &ohdr->u.atomic_eth;
2471 vaddr = ((u64)be32_to_cpu(ateth->vaddr[0]) << 32) | 2465 vaddr = get_ib_ateth_vaddr(ateth);
2472 be32_to_cpu(ateth->vaddr[1]);
2473 if (unlikely(vaddr & (sizeof(u64) - 1))) 2466 if (unlikely(vaddr & (sizeof(u64) - 1)))
2474 goto nack_inv_unlck; 2467 goto nack_inv_unlck;
2475 rkey = be32_to_cpu(ateth->rkey); 2468 rkey = be32_to_cpu(ateth->rkey);
@@ -2480,11 +2473,11 @@ send_last:
2480 goto nack_acc_unlck; 2473 goto nack_acc_unlck;
2481 /* Perform atomic OP and save result. */ 2474 /* Perform atomic OP and save result. */
2482 maddr = (atomic64_t *)qp->r_sge.sge.vaddr; 2475 maddr = (atomic64_t *)qp->r_sge.sge.vaddr;
2483 sdata = be64_to_cpu(ateth->swap_data); 2476 sdata = get_ib_ateth_swap(ateth);
2484 e->atomic_data = (opcode == OP(FETCH_ADD)) ? 2477 e->atomic_data = (opcode == OP(FETCH_ADD)) ?
2485 (u64)atomic64_add_return(sdata, maddr) - sdata : 2478 (u64)atomic64_add_return(sdata, maddr) - sdata :
2486 (u64)cmpxchg((u64 *)qp->r_sge.sge.vaddr, 2479 (u64)cmpxchg((u64 *)qp->r_sge.sge.vaddr,
2487 be64_to_cpu(ateth->compare_data), 2480 get_ib_ateth_compare(ateth),
2488 sdata); 2481 sdata);
2489 rvt_put_mr(qp->r_sge.sge.mr); 2482 rvt_put_mr(qp->r_sge.sge.mr);
2490 qp->r_sge.num_sge = 0; 2483 qp->r_sge.num_sge = 0;
@@ -2574,12 +2567,12 @@ send_ack:
2574 2567
2575void hfi1_rc_hdrerr( 2568void hfi1_rc_hdrerr(
2576 struct hfi1_ctxtdata *rcd, 2569 struct hfi1_ctxtdata *rcd,
2577 struct hfi1_ib_header *hdr, 2570 struct ib_header *hdr,
2578 u32 rcv_flags, 2571 u32 rcv_flags,
2579 struct rvt_qp *qp) 2572 struct rvt_qp *qp)
2580{ 2573{
2581 int has_grh = rcv_flags & HFI1_HAS_GRH; 2574 int has_grh = rcv_flags & HFI1_HAS_GRH;
2582 struct hfi1_other_headers *ohdr; 2575 struct ib_other_headers *ohdr;
2583 struct hfi1_ibport *ibp = to_iport(qp->ibqp.device, qp->port_num); 2576 struct hfi1_ibport *ibp = to_iport(qp->ibqp.device, qp->port_num);
2584 int diff; 2577 int diff;
2585 u32 opcode; 2578 u32 opcode;
diff --git a/drivers/infiniband/hw/hfi1/ruc.c b/drivers/infiniband/hw/hfi1/ruc.c
index 48d5094f98e2..7ce2b3c347fd 100644
--- a/drivers/infiniband/hw/hfi1/ruc.c
+++ b/drivers/infiniband/hw/hfi1/ruc.c
@@ -262,7 +262,7 @@ static int gid_ok(union ib_gid *gid, __be64 gid_prefix, __be64 id)
262 * 262 *
263 * The s_lock will be acquired around the hfi1_migrate_qp() call. 263 * The s_lock will be acquired around the hfi1_migrate_qp() call.
264 */ 264 */
265int hfi1_ruc_check_hdr(struct hfi1_ibport *ibp, struct hfi1_ib_header *hdr, 265int hfi1_ruc_check_hdr(struct hfi1_ibport *ibp, struct ib_header *hdr,
266 int has_grh, struct rvt_qp *qp, u32 bth0) 266 int has_grh, struct rvt_qp *qp, u32 bth0)
267{ 267{
268 __be64 guid; 268 __be64 guid;
@@ -765,7 +765,7 @@ static inline void build_ahg(struct rvt_qp *qp, u32 npsn)
765 } 765 }
766} 766}
767 767
768void hfi1_make_ruc_header(struct rvt_qp *qp, struct hfi1_other_headers *ohdr, 768void hfi1_make_ruc_header(struct rvt_qp *qp, struct ib_other_headers *ohdr,
769 u32 bth0, u32 bth2, int middle, 769 u32 bth0, u32 bth2, int middle,
770 struct hfi1_pkt_state *ps) 770 struct hfi1_pkt_state *ps)
771{ 771{
diff --git a/drivers/infiniband/hw/hfi1/trace.c b/drivers/infiniband/hw/hfi1/trace.c
index 4cfb13771897..4a0221f9650c 100644
--- a/drivers/infiniband/hw/hfi1/trace.c
+++ b/drivers/infiniband/hw/hfi1/trace.c
@@ -47,9 +47,9 @@
47#define CREATE_TRACE_POINTS 47#define CREATE_TRACE_POINTS
48#include "trace.h" 48#include "trace.h"
49 49
50u8 ibhdr_exhdr_len(struct hfi1_ib_header *hdr) 50u8 ibhdr_exhdr_len(struct ib_header *hdr)
51{ 51{
52 struct hfi1_other_headers *ohdr; 52 struct ib_other_headers *ohdr;
53 u8 opcode; 53 u8 opcode;
54 u8 lnh = (u8)(be16_to_cpu(hdr->lrh[0]) & 3); 54 u8 lnh = (u8)(be16_to_cpu(hdr->lrh[0]) & 3);
55 55
@@ -72,11 +72,6 @@ u8 ibhdr_exhdr_len(struct hfi1_ib_header *hdr)
72 72
73#define OP(transport, op) IB_OPCODE_## transport ## _ ## op 73#define OP(transport, op) IB_OPCODE_## transport ## _ ## op
74 74
75static u64 ib_u64_get(__be32 *p)
76{
77 return ((u64)be32_to_cpu(p[0]) << 32) | be32_to_cpu(p[1]);
78}
79
80static const char *parse_syndrome(u8 syndrome) 75static const char *parse_syndrome(u8 syndrome)
81{ 76{
82 switch (syndrome >> 5) { 77 switch (syndrome >> 5) {
@@ -113,8 +108,7 @@ const char *parse_everbs_hdrs(
113 case OP(RC, RDMA_WRITE_ONLY_WITH_IMMEDIATE): 108 case OP(RC, RDMA_WRITE_ONLY_WITH_IMMEDIATE):
114 case OP(UC, RDMA_WRITE_ONLY_WITH_IMMEDIATE): 109 case OP(UC, RDMA_WRITE_ONLY_WITH_IMMEDIATE):
115 trace_seq_printf(p, RETH_PRN " " IMM_PRN, 110 trace_seq_printf(p, RETH_PRN " " IMM_PRN,
116 (unsigned long long)ib_u64_get( 111 get_ib_reth_vaddr(&eh->rc.reth),
117 (__be32 *)&eh->rc.reth.vaddr),
118 be32_to_cpu(eh->rc.reth.rkey), 112 be32_to_cpu(eh->rc.reth.rkey),
119 be32_to_cpu(eh->rc.reth.length), 113 be32_to_cpu(eh->rc.reth.length),
120 be32_to_cpu(eh->rc.imm_data)); 114 be32_to_cpu(eh->rc.imm_data));
@@ -126,8 +120,7 @@ const char *parse_everbs_hdrs(
126 case OP(RC, RDMA_WRITE_ONLY): 120 case OP(RC, RDMA_WRITE_ONLY):
127 case OP(UC, RDMA_WRITE_ONLY): 121 case OP(UC, RDMA_WRITE_ONLY):
128 trace_seq_printf(p, RETH_PRN, 122 trace_seq_printf(p, RETH_PRN,
129 (unsigned long long)ib_u64_get( 123 get_ib_reth_vaddr(&eh->rc.reth),
130 (__be32 *)&eh->rc.reth.vaddr),
131 be32_to_cpu(eh->rc.reth.rkey), 124 be32_to_cpu(eh->rc.reth.rkey),
132 be32_to_cpu(eh->rc.reth.length)); 125 be32_to_cpu(eh->rc.reth.length));
133 break; 126 break;
@@ -145,20 +138,16 @@ const char *parse_everbs_hdrs(
145 be32_to_cpu(eh->at.aeth) >> 24, 138 be32_to_cpu(eh->at.aeth) >> 24,
146 parse_syndrome(be32_to_cpu(eh->at.aeth) >> 24), 139 parse_syndrome(be32_to_cpu(eh->at.aeth) >> 24),
147 be32_to_cpu(eh->at.aeth) & HFI1_MSN_MASK, 140 be32_to_cpu(eh->at.aeth) & HFI1_MSN_MASK,
148 (unsigned long long) 141 ib_u64_get(&eh->at.atomic_ack_eth));
149 ib_u64_get(eh->at.atomic_ack_eth));
150 break; 142 break;
151 /* atomiceth */ 143 /* atomiceth */
152 case OP(RC, COMPARE_SWAP): 144 case OP(RC, COMPARE_SWAP):
153 case OP(RC, FETCH_ADD): 145 case OP(RC, FETCH_ADD):
154 trace_seq_printf(p, ATOMICETH_PRN, 146 trace_seq_printf(p, ATOMICETH_PRN,
155 (unsigned long long)ib_u64_get( 147 get_ib_ateth_vaddr(&eh->atomic_eth),
156 eh->atomic_eth.vaddr),
157 eh->atomic_eth.rkey, 148 eh->atomic_eth.rkey,
158 (unsigned long long)ib_u64_get( 149 get_ib_ateth_swap(&eh->atomic_eth),
159 (__be32 *)&eh->atomic_eth.swap_data), 150 get_ib_ateth_compare(&eh->atomic_eth));
160 (unsigned long long)ib_u64_get(
161 (__be32 *)&eh->atomic_eth.compare_data));
162 break; 151 break;
163 /* deth */ 152 /* deth */
164 case OP(UD, SEND_ONLY): 153 case OP(UD, SEND_ONLY):
diff --git a/drivers/infiniband/hw/hfi1/trace_ibhdrs.h b/drivers/infiniband/hw/hfi1/trace_ibhdrs.h
index c3e41aed0034..382fcda3a5f6 100644
--- a/drivers/infiniband/hw/hfi1/trace_ibhdrs.h
+++ b/drivers/infiniband/hw/hfi1/trace_ibhdrs.h
@@ -55,7 +55,7 @@
55#undef TRACE_SYSTEM 55#undef TRACE_SYSTEM
56#define TRACE_SYSTEM hfi1_ibhdrs 56#define TRACE_SYSTEM hfi1_ibhdrs
57 57
58u8 ibhdr_exhdr_len(struct hfi1_ib_header *hdr); 58u8 ibhdr_exhdr_len(struct ib_header *hdr);
59const char *parse_everbs_hdrs(struct trace_seq *p, u8 opcode, void *ehdrs); 59const char *parse_everbs_hdrs(struct trace_seq *p, u8 opcode, void *ehdrs);
60 60
61#define __parse_ib_ehdrs(op, ehdrs) parse_everbs_hdrs(p, op, ehdrs) 61#define __parse_ib_ehdrs(op, ehdrs) parse_everbs_hdrs(p, op, ehdrs)
@@ -74,7 +74,7 @@ __print_symbolic(lrh, \
74 74
75DECLARE_EVENT_CLASS(hfi1_ibhdr_template, 75DECLARE_EVENT_CLASS(hfi1_ibhdr_template,
76 TP_PROTO(struct hfi1_devdata *dd, 76 TP_PROTO(struct hfi1_devdata *dd,
77 struct hfi1_ib_header *hdr), 77 struct ib_header *hdr),
78 TP_ARGS(dd, hdr), 78 TP_ARGS(dd, hdr),
79 TP_STRUCT__entry( 79 TP_STRUCT__entry(
80 DD_DEV_ENTRY(dd) 80 DD_DEV_ENTRY(dd)
@@ -102,7 +102,7 @@ DECLARE_EVENT_CLASS(hfi1_ibhdr_template,
102 __dynamic_array(u8, ehdrs, ibhdr_exhdr_len(hdr)) 102 __dynamic_array(u8, ehdrs, ibhdr_exhdr_len(hdr))
103 ), 103 ),
104 TP_fast_assign( 104 TP_fast_assign(
105 struct hfi1_other_headers *ohdr; 105 struct ib_other_headers *ohdr;
106 106
107 DD_DEV_ASSIGN(dd); 107 DD_DEV_ASSIGN(dd);
108 /* LRH */ 108 /* LRH */
@@ -185,19 +185,19 @@ DECLARE_EVENT_CLASS(hfi1_ibhdr_template,
185); 185);
186 186
187DEFINE_EVENT(hfi1_ibhdr_template, input_ibhdr, 187DEFINE_EVENT(hfi1_ibhdr_template, input_ibhdr,
188 TP_PROTO(struct hfi1_devdata *dd, struct hfi1_ib_header *hdr), 188 TP_PROTO(struct hfi1_devdata *dd, struct ib_header *hdr),
189 TP_ARGS(dd, hdr)); 189 TP_ARGS(dd, hdr));
190 190
191DEFINE_EVENT(hfi1_ibhdr_template, pio_output_ibhdr, 191DEFINE_EVENT(hfi1_ibhdr_template, pio_output_ibhdr,
192 TP_PROTO(struct hfi1_devdata *dd, struct hfi1_ib_header *hdr), 192 TP_PROTO(struct hfi1_devdata *dd, struct ib_header *hdr),
193 TP_ARGS(dd, hdr)); 193 TP_ARGS(dd, hdr));
194 194
195DEFINE_EVENT(hfi1_ibhdr_template, ack_output_ibhdr, 195DEFINE_EVENT(hfi1_ibhdr_template, ack_output_ibhdr,
196 TP_PROTO(struct hfi1_devdata *dd, struct hfi1_ib_header *hdr), 196 TP_PROTO(struct hfi1_devdata *dd, struct ib_header *hdr),
197 TP_ARGS(dd, hdr)); 197 TP_ARGS(dd, hdr));
198 198
199DEFINE_EVENT(hfi1_ibhdr_template, sdma_output_ibhdr, 199DEFINE_EVENT(hfi1_ibhdr_template, sdma_output_ibhdr,
200 TP_PROTO(struct hfi1_devdata *dd, struct hfi1_ib_header *hdr), 200 TP_PROTO(struct hfi1_devdata *dd, struct ib_header *hdr),
201 TP_ARGS(dd, hdr)); 201 TP_ARGS(dd, hdr));
202 202
203#endif /* __HFI1_TRACE_IBHDRS_H */ 203#endif /* __HFI1_TRACE_IBHDRS_H */
diff --git a/drivers/infiniband/hw/hfi1/trace_rx.h b/drivers/infiniband/hw/hfi1/trace_rx.h
index 9ba1f615ec95..11e02b228922 100644
--- a/drivers/infiniband/hw/hfi1/trace_rx.h
+++ b/drivers/infiniband/hw/hfi1/trace_rx.h
@@ -260,7 +260,7 @@ TRACE_EVENT(hfi1_mmu_invalidate,
260TRACE_EVENT(snoop_capture, 260TRACE_EVENT(snoop_capture,
261 TP_PROTO(struct hfi1_devdata *dd, 261 TP_PROTO(struct hfi1_devdata *dd,
262 int hdr_len, 262 int hdr_len,
263 struct hfi1_ib_header *hdr, 263 struct ib_header *hdr,
264 int data_len, 264 int data_len,
265 void *data), 265 void *data),
266 TP_ARGS(dd, hdr_len, hdr, data_len, data), 266 TP_ARGS(dd, hdr_len, hdr, data_len, data),
@@ -279,7 +279,7 @@ TRACE_EVENT(snoop_capture,
279 __dynamic_array(u8, raw_pkt, data_len) 279 __dynamic_array(u8, raw_pkt, data_len)
280 ), 280 ),
281 TP_fast_assign( 281 TP_fast_assign(
282 struct hfi1_other_headers *ohdr; 282 struct ib_other_headers *ohdr;
283 283
284 __entry->lnh = (u8)(be16_to_cpu(hdr->lrh[0]) & 3); 284 __entry->lnh = (u8)(be16_to_cpu(hdr->lrh[0]) & 3);
285 if (__entry->lnh == HFI1_LRH_BTH) 285 if (__entry->lnh == HFI1_LRH_BTH)
diff --git a/drivers/infiniband/hw/hfi1/uc.c b/drivers/infiniband/hw/hfi1/uc.c
index a726d96d185f..e7fa176f8dfc 100644
--- a/drivers/infiniband/hw/hfi1/uc.c
+++ b/drivers/infiniband/hw/hfi1/uc.c
@@ -70,7 +70,7 @@ const u32 uc_only_opcode =
70int hfi1_make_uc_req(struct rvt_qp *qp, struct hfi1_pkt_state *ps) 70int hfi1_make_uc_req(struct rvt_qp *qp, struct hfi1_pkt_state *ps)
71{ 71{
72 struct hfi1_qp_priv *priv = qp->priv; 72 struct hfi1_qp_priv *priv = qp->priv;
73 struct hfi1_other_headers *ohdr; 73 struct ib_other_headers *ohdr;
74 struct rvt_swqe *wqe; 74 struct rvt_swqe *wqe;
75 u32 hwords = 5; 75 u32 hwords = 5;
76 u32 bth0 = 0; 76 u32 bth0 = 0;
@@ -304,12 +304,12 @@ bail_no_tx:
304void hfi1_uc_rcv(struct hfi1_packet *packet) 304void hfi1_uc_rcv(struct hfi1_packet *packet)
305{ 305{
306 struct hfi1_ibport *ibp = &packet->rcd->ppd->ibport_data; 306 struct hfi1_ibport *ibp = &packet->rcd->ppd->ibport_data;
307 struct hfi1_ib_header *hdr = packet->hdr; 307 struct ib_header *hdr = packet->hdr;
308 u32 rcv_flags = packet->rcv_flags; 308 u32 rcv_flags = packet->rcv_flags;
309 void *data = packet->ebuf; 309 void *data = packet->ebuf;
310 u32 tlen = packet->tlen; 310 u32 tlen = packet->tlen;
311 struct rvt_qp *qp = packet->qp; 311 struct rvt_qp *qp = packet->qp;
312 struct hfi1_other_headers *ohdr = packet->ohdr; 312 struct ib_other_headers *ohdr = packet->ohdr;
313 u32 bth0, opcode; 313 u32 bth0, opcode;
314 u32 hdrsize = packet->hlen; 314 u32 hdrsize = packet->hlen;
315 u32 psn; 315 u32 psn;
diff --git a/drivers/infiniband/hw/hfi1/ud.c b/drivers/infiniband/hw/hfi1/ud.c
index f01e8e1d62d3..090e71657d16 100644
--- a/drivers/infiniband/hw/hfi1/ud.c
+++ b/drivers/infiniband/hw/hfi1/ud.c
@@ -271,7 +271,7 @@ drop:
271int hfi1_make_ud_req(struct rvt_qp *qp, struct hfi1_pkt_state *ps) 271int hfi1_make_ud_req(struct rvt_qp *qp, struct hfi1_pkt_state *ps)
272{ 272{
273 struct hfi1_qp_priv *priv = qp->priv; 273 struct hfi1_qp_priv *priv = qp->priv;
274 struct hfi1_other_headers *ohdr; 274 struct ib_other_headers *ohdr;
275 struct ib_ah_attr *ah_attr; 275 struct ib_ah_attr *ah_attr;
276 struct hfi1_pportdata *ppd; 276 struct hfi1_pportdata *ppd;
277 struct hfi1_ibport *ibp; 277 struct hfi1_ibport *ibp;
@@ -510,8 +510,8 @@ void return_cnp(struct hfi1_ibport *ibp, struct rvt_qp *qp, u32 remote_qpn,
510 u32 bth0, plen, vl, hwords = 5; 510 u32 bth0, plen, vl, hwords = 5;
511 u16 lrh0; 511 u16 lrh0;
512 u8 sl = ibp->sc_to_sl[sc5]; 512 u8 sl = ibp->sc_to_sl[sc5];
513 struct hfi1_ib_header hdr; 513 struct ib_header hdr;
514 struct hfi1_other_headers *ohdr; 514 struct ib_other_headers *ohdr;
515 struct pio_buf *pbuf; 515 struct pio_buf *pbuf;
516 struct send_context *ctxt = qp_to_send_context(qp, sc5); 516 struct send_context *ctxt = qp_to_send_context(qp, sc5);
517 struct hfi1_pportdata *ppd = ppd_from_ibp(ibp); 517 struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
@@ -665,7 +665,7 @@ static int opa_smp_check(struct hfi1_ibport *ibp, u16 pkey, u8 sc5,
665 */ 665 */
666void hfi1_ud_rcv(struct hfi1_packet *packet) 666void hfi1_ud_rcv(struct hfi1_packet *packet)
667{ 667{
668 struct hfi1_other_headers *ohdr = packet->ohdr; 668 struct ib_other_headers *ohdr = packet->ohdr;
669 int opcode; 669 int opcode;
670 u32 hdrsize = packet->hlen; 670 u32 hdrsize = packet->hlen;
671 struct ib_wc wc; 671 struct ib_wc wc;
@@ -675,13 +675,13 @@ void hfi1_ud_rcv(struct hfi1_packet *packet)
675 int mgmt_pkey_idx = -1; 675 int mgmt_pkey_idx = -1;
676 struct hfi1_ibport *ibp = &packet->rcd->ppd->ibport_data; 676 struct hfi1_ibport *ibp = &packet->rcd->ppd->ibport_data;
677 struct hfi1_pportdata *ppd = ppd_from_ibp(ibp); 677 struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
678 struct hfi1_ib_header *hdr = packet->hdr; 678 struct ib_header *hdr = packet->hdr;
679 u32 rcv_flags = packet->rcv_flags; 679 u32 rcv_flags = packet->rcv_flags;
680 void *data = packet->ebuf; 680 void *data = packet->ebuf;
681 u32 tlen = packet->tlen; 681 u32 tlen = packet->tlen;
682 struct rvt_qp *qp = packet->qp; 682 struct rvt_qp *qp = packet->qp;
683 bool has_grh = rcv_flags & HFI1_HAS_GRH; 683 bool has_grh = rcv_flags & HFI1_HAS_GRH;
684 u8 sc5 = hdr2sc((struct hfi1_message_header *)hdr, packet->rhf); 684 u8 sc5 = hdr2sc(hdr, packet->rhf);
685 u32 bth1; 685 u32 bth1;
686 u8 sl_from_sc, sl; 686 u8 sl_from_sc, sl;
687 u16 slid; 687 u16 slid;
diff --git a/drivers/infiniband/hw/hfi1/verbs.c b/drivers/infiniband/hw/hfi1/verbs.c
index 92a61c47dedc..d502ba0d743a 100644
--- a/drivers/infiniband/hw/hfi1/verbs.c
+++ b/drivers/infiniband/hw/hfi1/verbs.c
@@ -567,7 +567,7 @@ static inline opcode_handler qp_ok(int opcode, struct hfi1_packet *packet)
567void hfi1_ib_rcv(struct hfi1_packet *packet) 567void hfi1_ib_rcv(struct hfi1_packet *packet)
568{ 568{
569 struct hfi1_ctxtdata *rcd = packet->rcd; 569 struct hfi1_ctxtdata *rcd = packet->rcd;
570 struct hfi1_ib_header *hdr = packet->hdr; 570 struct ib_header *hdr = packet->hdr;
571 u32 tlen = packet->tlen; 571 u32 tlen = packet->tlen;
572 struct hfi1_pportdata *ppd = rcd->ppd; 572 struct hfi1_pportdata *ppd = rcd->ppd;
573 struct hfi1_ibport *ibp = &ppd->ibport_data; 573 struct hfi1_ibport *ibp = &ppd->ibport_data;
@@ -719,7 +719,7 @@ static void verbs_sdma_complete(
719 if (tx->wqe) { 719 if (tx->wqe) {
720 hfi1_send_complete(qp, tx->wqe, IB_WC_SUCCESS); 720 hfi1_send_complete(qp, tx->wqe, IB_WC_SUCCESS);
721 } else if (qp->ibqp.qp_type == IB_QPT_RC) { 721 } else if (qp->ibqp.qp_type == IB_QPT_RC) {
722 struct hfi1_ib_header *hdr; 722 struct ib_header *hdr;
723 723
724 hdr = &tx->phdr.hdr; 724 hdr = &tx->phdr.hdr;
725 hfi1_rc_send_complete(qp, hdr); 725 hfi1_rc_send_complete(qp, hdr);
@@ -1200,7 +1200,7 @@ static inline send_routine get_send_routine(struct rvt_qp *qp,
1200{ 1200{
1201 struct hfi1_devdata *dd = dd_from_ibdev(qp->ibqp.device); 1201 struct hfi1_devdata *dd = dd_from_ibdev(qp->ibqp.device);
1202 struct hfi1_qp_priv *priv = qp->priv; 1202 struct hfi1_qp_priv *priv = qp->priv;
1203 struct hfi1_ib_header *h = &tx->phdr.hdr; 1203 struct ib_header *h = &tx->phdr.hdr;
1204 1204
1205 if (unlikely(!(dd->flags & HFI1_HAS_SEND_DMA))) 1205 if (unlikely(!(dd->flags & HFI1_HAS_SEND_DMA)))
1206 return dd->process_pio_send; 1206 return dd->process_pio_send;
@@ -1244,8 +1244,8 @@ int hfi1_verbs_send(struct rvt_qp *qp, struct hfi1_pkt_state *ps)
1244{ 1244{
1245 struct hfi1_devdata *dd = dd_from_ibdev(qp->ibqp.device); 1245 struct hfi1_devdata *dd = dd_from_ibdev(qp->ibqp.device);
1246 struct hfi1_qp_priv *priv = qp->priv; 1246 struct hfi1_qp_priv *priv = qp->priv;
1247 struct hfi1_other_headers *ohdr; 1247 struct ib_other_headers *ohdr;
1248 struct hfi1_ib_header *hdr; 1248 struct ib_header *hdr;
1249 send_routine sr; 1249 send_routine sr;
1250 int ret; 1250 int ret;
1251 u8 lnh; 1251 u8 lnh;
@@ -1754,7 +1754,7 @@ void hfi1_cnp_rcv(struct hfi1_packet *packet)
1754{ 1754{
1755 struct hfi1_ibport *ibp = &packet->rcd->ppd->ibport_data; 1755 struct hfi1_ibport *ibp = &packet->rcd->ppd->ibport_data;
1756 struct hfi1_pportdata *ppd = ppd_from_ibp(ibp); 1756 struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
1757 struct hfi1_ib_header *hdr = packet->hdr; 1757 struct ib_header *hdr = packet->hdr;
1758 struct rvt_qp *qp = packet->qp; 1758 struct rvt_qp *qp = packet->qp;
1759 u32 lqpn, rqpn = 0; 1759 u32 lqpn, rqpn = 0;
1760 u16 rlid = 0; 1760 u16 rlid = 0;
@@ -1781,7 +1781,7 @@ void hfi1_cnp_rcv(struct hfi1_packet *packet)
1781 return; 1781 return;
1782 } 1782 }
1783 1783
1784 sc5 = hdr2sc((struct hfi1_message_header *)hdr, packet->rhf); 1784 sc5 = hdr2sc(hdr, packet->rhf);
1785 sl = ibp->sc_to_sl[sc5]; 1785 sl = ibp->sc_to_sl[sc5];
1786 lqpn = qp->ibqp.qp_num; 1786 lqpn = qp->ibqp.qp_num;
1787 1787
diff --git a/drivers/infiniband/hw/hfi1/verbs.h b/drivers/infiniband/hw/hfi1/verbs.h
index d1b101c54828..0dd65eb46ebe 100644
--- a/drivers/infiniband/hw/hfi1/verbs.h
+++ b/drivers/infiniband/hw/hfi1/verbs.h
@@ -60,6 +60,7 @@
60#include <rdma/ib_pack.h> 60#include <rdma/ib_pack.h>
61#include <rdma/ib_user_verbs.h> 61#include <rdma/ib_user_verbs.h>
62#include <rdma/ib_mad.h> 62#include <rdma/ib_mad.h>
63#include <rdma/ib_hdrs.h>
63#include <rdma/rdma_vt.h> 64#include <rdma/rdma_vt.h>
64#include <rdma/rdmavt_qp.h> 65#include <rdma/rdmavt_qp.h>
65#include <rdma/rdmavt_cq.h> 66#include <rdma/rdmavt_cq.h>
@@ -80,16 +81,6 @@ struct hfi1_packet;
80 */ 81 */
81#define HFI1_UVERBS_ABI_VERSION 2 82#define HFI1_UVERBS_ABI_VERSION 2
82 83
83#define IB_SEQ_NAK (3 << 29)
84
85/* AETH NAK opcode values */
86#define IB_RNR_NAK 0x20
87#define IB_NAK_PSN_ERROR 0x60
88#define IB_NAK_INVALID_REQUEST 0x61
89#define IB_NAK_REMOTE_ACCESS_ERROR 0x62
90#define IB_NAK_REMOTE_OPERATIONAL_ERROR 0x63
91#define IB_NAK_INVALID_RD_REQUEST 0x64
92
93/* IB Performance Manager status values */ 84/* IB Performance Manager status values */
94#define IB_PMA_SAMPLE_STATUS_DONE 0x00 85#define IB_PMA_SAMPLE_STATUS_DONE 0x00
95#define IB_PMA_SAMPLE_STATUS_STARTED 0x01 86#define IB_PMA_SAMPLE_STATUS_STARTED 0x01
@@ -104,19 +95,6 @@ struct hfi1_packet;
104 95
105#define HFI1_VENDOR_IPG cpu_to_be16(0xFFA0) 96#define HFI1_VENDOR_IPG cpu_to_be16(0xFFA0)
106 97
107#define IB_BTH_REQ_ACK BIT(31)
108#define IB_BTH_SOLICITED BIT(23)
109#define IB_BTH_MIG_REQ BIT(22)
110
111#define IB_GRH_VERSION 6
112#define IB_GRH_VERSION_MASK 0xF
113#define IB_GRH_VERSION_SHIFT 28
114#define IB_GRH_TCLASS_MASK 0xFF
115#define IB_GRH_TCLASS_SHIFT 20
116#define IB_GRH_FLOW_MASK 0xFFFFF
117#define IB_GRH_FLOW_SHIFT 0
118#define IB_GRH_NEXT_HDR 0x1B
119
120#define IB_DEFAULT_GID_PREFIX cpu_to_be64(0xfe80000000000000ULL) 98#define IB_DEFAULT_GID_PREFIX cpu_to_be64(0xfe80000000000000ULL)
121 99
122/* flags passed by hfi1_ib_rcv() */ 100/* flags passed by hfi1_ib_rcv() */
@@ -124,60 +102,6 @@ enum {
124 HFI1_HAS_GRH = (1 << 0), 102 HFI1_HAS_GRH = (1 << 0),
125}; 103};
126 104
127struct ib_reth {
128 __be64 vaddr;
129 __be32 rkey;
130 __be32 length;
131} __packed;
132
133struct ib_atomic_eth {
134 __be32 vaddr[2]; /* unaligned so access as 2 32-bit words */
135 __be32 rkey;
136 __be64 swap_data;
137 __be64 compare_data;
138} __packed;
139
140union ib_ehdrs {
141 struct {
142 __be32 deth[2];
143 __be32 imm_data;
144 } ud;
145 struct {
146 struct ib_reth reth;
147 __be32 imm_data;
148 } rc;
149 struct {
150 __be32 aeth;
151 __be32 atomic_ack_eth[2];
152 } at;
153 __be32 imm_data;
154 __be32 aeth;
155 __be32 ieth;
156 struct ib_atomic_eth atomic_eth;
157} __packed;
158
159struct hfi1_other_headers {
160 __be32 bth[3];
161 union ib_ehdrs u;
162} __packed;
163
164/*
165 * Note that UD packets with a GRH header are 8+40+12+8 = 68 bytes
166 * long (72 w/ imm_data). Only the first 56 bytes of the IB header
167 * will be in the eager header buffer. The remaining 12 or 16 bytes
168 * are in the data buffer.
169 */
170struct hfi1_ib_header {
171 __be16 lrh[4];
172 union {
173 struct {
174 struct ib_grh grh;
175 struct hfi1_other_headers oth;
176 } l;
177 struct hfi1_other_headers oth;
178 } u;
179} __packed;
180
181struct hfi1_ahg_info { 105struct hfi1_ahg_info {
182 u32 ahgdesc[2]; 106 u32 ahgdesc[2];
183 u16 tx_flags; 107 u16 tx_flags;
@@ -187,7 +111,7 @@ struct hfi1_ahg_info {
187 111
188struct hfi1_sdma_header { 112struct hfi1_sdma_header {
189 __le64 pbc; 113 __le64 pbc;
190 struct hfi1_ib_header hdr; 114 struct ib_header hdr;
191} __packed; 115} __packed;
192 116
193/* 117/*
@@ -386,7 +310,7 @@ void hfi1_rc_rcv(struct hfi1_packet *packet);
386 310
387void hfi1_rc_hdrerr( 311void hfi1_rc_hdrerr(
388 struct hfi1_ctxtdata *rcd, 312 struct hfi1_ctxtdata *rcd,
389 struct hfi1_ib_header *hdr, 313 struct ib_header *hdr,
390 u32 rcv_flags, 314 u32 rcv_flags,
391 struct rvt_qp *qp); 315 struct rvt_qp *qp);
392 316
@@ -400,7 +324,7 @@ void hfi1_rc_timeout(unsigned long arg);
400void hfi1_del_timers_sync(struct rvt_qp *qp); 324void hfi1_del_timers_sync(struct rvt_qp *qp);
401void hfi1_stop_rc_timers(struct rvt_qp *qp); 325void hfi1_stop_rc_timers(struct rvt_qp *qp);
402 326
403void hfi1_rc_send_complete(struct rvt_qp *qp, struct hfi1_ib_header *hdr); 327void hfi1_rc_send_complete(struct rvt_qp *qp, struct ib_header *hdr);
404 328
405void hfi1_rc_error(struct rvt_qp *qp, enum ib_wc_status err); 329void hfi1_rc_error(struct rvt_qp *qp, enum ib_wc_status err);
406 330
@@ -423,7 +347,7 @@ int hfi1_check_send_wqe(struct rvt_qp *qp, struct rvt_swqe *wqe);
423extern const u32 rc_only_opcode; 347extern const u32 rc_only_opcode;
424extern const u32 uc_only_opcode; 348extern const u32 uc_only_opcode;
425 349
426static inline u8 get_opcode(struct hfi1_ib_header *h) 350static inline u8 get_opcode(struct ib_header *h)
427{ 351{
428 u16 lnh = be16_to_cpu(h->lrh[0]) & 3; 352 u16 lnh = be16_to_cpu(h->lrh[0]) & 3;
429 353
@@ -433,13 +357,13 @@ static inline u8 get_opcode(struct hfi1_ib_header *h)
433 return be32_to_cpu(h->u.l.oth.bth[0]) >> 24; 357 return be32_to_cpu(h->u.l.oth.bth[0]) >> 24;
434} 358}
435 359
436int hfi1_ruc_check_hdr(struct hfi1_ibport *ibp, struct hfi1_ib_header *hdr, 360int hfi1_ruc_check_hdr(struct hfi1_ibport *ibp, struct ib_header *hdr,
437 int has_grh, struct rvt_qp *qp, u32 bth0); 361 int has_grh, struct rvt_qp *qp, u32 bth0);
438 362
439u32 hfi1_make_grh(struct hfi1_ibport *ibp, struct ib_grh *hdr, 363u32 hfi1_make_grh(struct hfi1_ibport *ibp, struct ib_grh *hdr,
440 struct ib_global_route *grh, u32 hwords, u32 nwords); 364 struct ib_global_route *grh, u32 hwords, u32 nwords);
441 365
442void hfi1_make_ruc_header(struct rvt_qp *qp, struct hfi1_other_headers *ohdr, 366void hfi1_make_ruc_header(struct rvt_qp *qp, struct ib_other_headers *ohdr,
443 u32 bth0, u32 bth2, int middle, 367 u32 bth0, u32 bth2, int middle,
444 struct hfi1_pkt_state *ps); 368 struct hfi1_pkt_state *ps);
445 369
diff --git a/drivers/infiniband/hw/qib/qib.h b/drivers/infiniband/hw/qib/qib.h
index bbf0a163aeab..bebc9a5d80cd 100644
--- a/drivers/infiniband/hw/qib/qib.h
+++ b/drivers/infiniband/hw/qib/qib.h
@@ -52,6 +52,7 @@
52#include <linux/kref.h> 52#include <linux/kref.h>
53#include <linux/sched.h> 53#include <linux/sched.h>
54#include <linux/kthread.h> 54#include <linux/kthread.h>
55#include <rdma/ib_hdrs.h>
55#include <rdma/rdma_vt.h> 56#include <rdma/rdma_vt.h>
56 57
57#include "qib_common.h" 58#include "qib_common.h"
diff --git a/drivers/infiniband/hw/qib/qib_driver.c b/drivers/infiniband/hw/qib/qib_driver.c
index df77d5f6bb3a..728e0a030d2e 100644
--- a/drivers/infiniband/hw/qib/qib_driver.c
+++ b/drivers/infiniband/hw/qib/qib_driver.c
@@ -319,8 +319,8 @@ static u32 qib_rcv_hdrerr(struct qib_ctxtdata *rcd, struct qib_pportdata *ppd,
319 ret = 1; 319 ret = 1;
320 else if (eflags == QLOGIC_IB_RHF_H_TIDERR) { 320 else if (eflags == QLOGIC_IB_RHF_H_TIDERR) {
321 /* For TIDERR and RC QPs premptively schedule a NAK */ 321 /* For TIDERR and RC QPs premptively schedule a NAK */
322 struct qib_ib_header *hdr = (struct qib_ib_header *) rhdr; 322 struct ib_header *hdr = (struct ib_header *)rhdr;
323 struct qib_other_headers *ohdr = NULL; 323 struct ib_other_headers *ohdr = NULL;
324 struct qib_ibport *ibp = &ppd->ibport_data; 324 struct qib_ibport *ibp = &ppd->ibport_data;
325 struct qib_devdata *dd = ppd->dd; 325 struct qib_devdata *dd = ppd->dd;
326 struct rvt_dev_info *rdi = &dd->verbs_dev.rdi; 326 struct rvt_dev_info *rdi = &dd->verbs_dev.rdi;
diff --git a/drivers/infiniband/hw/qib/qib_iba7322.c b/drivers/infiniband/hw/qib/qib_iba7322.c
index ce4034071f9c..ded27172320e 100644
--- a/drivers/infiniband/hw/qib/qib_iba7322.c
+++ b/drivers/infiniband/hw/qib/qib_iba7322.c
@@ -1415,7 +1415,7 @@ static void flush_fifo(struct qib_pportdata *ppd)
1415 u32 *hdr; 1415 u32 *hdr;
1416 u64 pbc; 1416 u64 pbc;
1417 const unsigned hdrwords = 7; 1417 const unsigned hdrwords = 7;
1418 static struct qib_ib_header ibhdr = { 1418 static struct ib_header ibhdr = {
1419 .lrh[0] = cpu_to_be16(0xF000 | QIB_LRH_BTH), 1419 .lrh[0] = cpu_to_be16(0xF000 | QIB_LRH_BTH),
1420 .lrh[1] = IB_LID_PERMISSIVE, 1420 .lrh[1] = IB_LID_PERMISSIVE,
1421 .lrh[2] = cpu_to_be16(hdrwords + SIZE_OF_CRC), 1421 .lrh[2] = cpu_to_be16(hdrwords + SIZE_OF_CRC),
diff --git a/drivers/infiniband/hw/qib/qib_rc.c b/drivers/infiniband/hw/qib/qib_rc.c
index 38cd87135b19..2097512e75aa 100644
--- a/drivers/infiniband/hw/qib/qib_rc.c
+++ b/drivers/infiniband/hw/qib/qib_rc.c
@@ -75,7 +75,7 @@ static void start_timer(struct rvt_qp *qp)
75 * Note the QP s_lock must be held. 75 * Note the QP s_lock must be held.
76 */ 76 */
77static int qib_make_rc_ack(struct qib_ibdev *dev, struct rvt_qp *qp, 77static int qib_make_rc_ack(struct qib_ibdev *dev, struct rvt_qp *qp,
78 struct qib_other_headers *ohdr, u32 pmtu) 78 struct ib_other_headers *ohdr, u32 pmtu)
79{ 79{
80 struct rvt_ack_entry *e; 80 struct rvt_ack_entry *e;
81 u32 hwords; 81 u32 hwords;
@@ -154,10 +154,7 @@ static int qib_make_rc_ack(struct qib_ibdev *dev, struct rvt_qp *qp,
154 len = 0; 154 len = 0;
155 qp->s_ack_state = OP(ATOMIC_ACKNOWLEDGE); 155 qp->s_ack_state = OP(ATOMIC_ACKNOWLEDGE);
156 ohdr->u.at.aeth = qib_compute_aeth(qp); 156 ohdr->u.at.aeth = qib_compute_aeth(qp);
157 ohdr->u.at.atomic_ack_eth[0] = 157 ib_u64_put(e->atomic_data, &ohdr->u.at.atomic_ack_eth);
158 cpu_to_be32(e->atomic_data >> 32);
159 ohdr->u.at.atomic_ack_eth[1] =
160 cpu_to_be32(e->atomic_data);
161 hwords += sizeof(ohdr->u.at) / sizeof(u32); 158 hwords += sizeof(ohdr->u.at) / sizeof(u32);
162 bth2 = e->psn & QIB_PSN_MASK; 159 bth2 = e->psn & QIB_PSN_MASK;
163 e->sent = 1; 160 e->sent = 1;
@@ -234,7 +231,7 @@ int qib_make_rc_req(struct rvt_qp *qp, unsigned long *flags)
234{ 231{
235 struct qib_qp_priv *priv = qp->priv; 232 struct qib_qp_priv *priv = qp->priv;
236 struct qib_ibdev *dev = to_idev(qp->ibqp.device); 233 struct qib_ibdev *dev = to_idev(qp->ibqp.device);
237 struct qib_other_headers *ohdr; 234 struct ib_other_headers *ohdr;
238 struct rvt_sge_state *ss; 235 struct rvt_sge_state *ss;
239 struct rvt_swqe *wqe; 236 struct rvt_swqe *wqe;
240 u32 hwords; 237 u32 hwords;
@@ -444,20 +441,18 @@ int qib_make_rc_req(struct rvt_qp *qp, unsigned long *flags)
444 } 441 }
445 if (wqe->atomic_wr.wr.opcode == IB_WR_ATOMIC_CMP_AND_SWP) { 442 if (wqe->atomic_wr.wr.opcode == IB_WR_ATOMIC_CMP_AND_SWP) {
446 qp->s_state = OP(COMPARE_SWAP); 443 qp->s_state = OP(COMPARE_SWAP);
447 ohdr->u.atomic_eth.swap_data = cpu_to_be64( 444 put_ib_ateth_swap(wqe->atomic_wr.swap,
448 wqe->atomic_wr.swap); 445 &ohdr->u.atomic_eth);
449 ohdr->u.atomic_eth.compare_data = cpu_to_be64( 446 put_ib_ateth_swap(wqe->atomic_wr.compare_add,
450 wqe->atomic_wr.compare_add); 447 &ohdr->u.atomic_eth);
451 } else { 448 } else {
452 qp->s_state = OP(FETCH_ADD); 449 qp->s_state = OP(FETCH_ADD);
453 ohdr->u.atomic_eth.swap_data = cpu_to_be64( 450 put_ib_ateth_swap(wqe->atomic_wr.compare_add,
454 wqe->atomic_wr.compare_add); 451 &ohdr->u.atomic_eth);
455 ohdr->u.atomic_eth.compare_data = 0; 452 put_ib_ateth_swap(0, &ohdr->u.atomic_eth);
456 } 453 }
457 ohdr->u.atomic_eth.vaddr[0] = cpu_to_be32( 454 put_ib_ateth_vaddr(wqe->atomic_wr.remote_addr,
458 wqe->atomic_wr.remote_addr >> 32); 455 &ohdr->u.atomic_eth);
459 ohdr->u.atomic_eth.vaddr[1] = cpu_to_be32(
460 wqe->atomic_wr.remote_addr);
461 ohdr->u.atomic_eth.rkey = cpu_to_be32( 456 ohdr->u.atomic_eth.rkey = cpu_to_be32(
462 wqe->atomic_wr.rkey); 457 wqe->atomic_wr.rkey);
463 hwords += sizeof(struct ib_atomic_eth) / sizeof(u32); 458 hwords += sizeof(struct ib_atomic_eth) / sizeof(u32);
@@ -632,8 +627,8 @@ void qib_send_rc_ack(struct rvt_qp *qp)
632 u32 hwords; 627 u32 hwords;
633 u32 pbufn; 628 u32 pbufn;
634 u32 __iomem *piobuf; 629 u32 __iomem *piobuf;
635 struct qib_ib_header hdr; 630 struct ib_header hdr;
636 struct qib_other_headers *ohdr; 631 struct ib_other_headers *ohdr;
637 u32 control; 632 u32 control;
638 unsigned long flags; 633 unsigned long flags;
639 634
@@ -942,9 +937,9 @@ static void reset_sending_psn(struct rvt_qp *qp, u32 psn)
942/* 937/*
943 * This should be called with the QP s_lock held and interrupts disabled. 938 * This should be called with the QP s_lock held and interrupts disabled.
944 */ 939 */
945void qib_rc_send_complete(struct rvt_qp *qp, struct qib_ib_header *hdr) 940void qib_rc_send_complete(struct rvt_qp *qp, struct ib_header *hdr)
946{ 941{
947 struct qib_other_headers *ohdr; 942 struct ib_other_headers *ohdr;
948 struct rvt_swqe *wqe; 943 struct rvt_swqe *wqe;
949 struct ib_wc wc; 944 struct ib_wc wc;
950 unsigned i; 945 unsigned i;
@@ -1383,7 +1378,7 @@ static void rdma_seq_err(struct rvt_qp *qp, struct qib_ibport *ibp, u32 psn,
1383 * Called at interrupt level. 1378 * Called at interrupt level.
1384 */ 1379 */
1385static void qib_rc_rcv_resp(struct qib_ibport *ibp, 1380static void qib_rc_rcv_resp(struct qib_ibport *ibp,
1386 struct qib_other_headers *ohdr, 1381 struct ib_other_headers *ohdr,
1387 void *data, u32 tlen, 1382 void *data, u32 tlen,
1388 struct rvt_qp *qp, 1383 struct rvt_qp *qp,
1389 u32 opcode, 1384 u32 opcode,
@@ -1463,12 +1458,9 @@ static void qib_rc_rcv_resp(struct qib_ibport *ibp,
1463 case OP(ATOMIC_ACKNOWLEDGE): 1458 case OP(ATOMIC_ACKNOWLEDGE):
1464 case OP(RDMA_READ_RESPONSE_FIRST): 1459 case OP(RDMA_READ_RESPONSE_FIRST):
1465 aeth = be32_to_cpu(ohdr->u.aeth); 1460 aeth = be32_to_cpu(ohdr->u.aeth);
1466 if (opcode == OP(ATOMIC_ACKNOWLEDGE)) { 1461 if (opcode == OP(ATOMIC_ACKNOWLEDGE))
1467 __be32 *p = ohdr->u.at.atomic_ack_eth; 1462 val = ib_u64_get(&ohdr->u.at.atomic_ack_eth);
1468 1463 else
1469 val = ((u64) be32_to_cpu(p[0]) << 32) |
1470 be32_to_cpu(p[1]);
1471 } else
1472 val = 0; 1464 val = 0;
1473 if (!do_rc_ack(qp, aeth, psn, opcode, val, rcd) || 1465 if (!do_rc_ack(qp, aeth, psn, opcode, val, rcd) ||
1474 opcode != OP(RDMA_READ_RESPONSE_FIRST)) 1466 opcode != OP(RDMA_READ_RESPONSE_FIRST))
@@ -1608,7 +1600,7 @@ bail:
1608 * Return 1 if no more processing is needed; otherwise return 0 to 1600 * Return 1 if no more processing is needed; otherwise return 0 to
1609 * schedule a response to be sent. 1601 * schedule a response to be sent.
1610 */ 1602 */
1611static int qib_rc_rcv_error(struct qib_other_headers *ohdr, 1603static int qib_rc_rcv_error(struct ib_other_headers *ohdr,
1612 void *data, 1604 void *data,
1613 struct rvt_qp *qp, 1605 struct rvt_qp *qp,
1614 u32 opcode, 1606 u32 opcode,
@@ -1848,11 +1840,11 @@ static inline void qib_update_ack_queue(struct rvt_qp *qp, unsigned n)
1848 * for the given QP. 1840 * for the given QP.
1849 * Called at interrupt level. 1841 * Called at interrupt level.
1850 */ 1842 */
1851void qib_rc_rcv(struct qib_ctxtdata *rcd, struct qib_ib_header *hdr, 1843void qib_rc_rcv(struct qib_ctxtdata *rcd, struct ib_header *hdr,
1852 int has_grh, void *data, u32 tlen, struct rvt_qp *qp) 1844 int has_grh, void *data, u32 tlen, struct rvt_qp *qp)
1853{ 1845{
1854 struct qib_ibport *ibp = &rcd->ppd->ibport_data; 1846 struct qib_ibport *ibp = &rcd->ppd->ibport_data;
1855 struct qib_other_headers *ohdr; 1847 struct ib_other_headers *ohdr;
1856 u32 opcode; 1848 u32 opcode;
1857 u32 hdrsize; 1849 u32 hdrsize;
1858 u32 psn; 1850 u32 psn;
@@ -2177,8 +2169,7 @@ send_last:
2177 e->rdma_sge.mr = NULL; 2169 e->rdma_sge.mr = NULL;
2178 } 2170 }
2179 ateth = &ohdr->u.atomic_eth; 2171 ateth = &ohdr->u.atomic_eth;
2180 vaddr = ((u64) be32_to_cpu(ateth->vaddr[0]) << 32) | 2172 vaddr = get_ib_ateth_vaddr(ateth);
2181 be32_to_cpu(ateth->vaddr[1]);
2182 if (unlikely(vaddr & (sizeof(u64) - 1))) 2173 if (unlikely(vaddr & (sizeof(u64) - 1)))
2183 goto nack_inv_unlck; 2174 goto nack_inv_unlck;
2184 rkey = be32_to_cpu(ateth->rkey); 2175 rkey = be32_to_cpu(ateth->rkey);
@@ -2189,11 +2180,11 @@ send_last:
2189 goto nack_acc_unlck; 2180 goto nack_acc_unlck;
2190 /* Perform atomic OP and save result. */ 2181 /* Perform atomic OP and save result. */
2191 maddr = (atomic64_t *) qp->r_sge.sge.vaddr; 2182 maddr = (atomic64_t *) qp->r_sge.sge.vaddr;
2192 sdata = be64_to_cpu(ateth->swap_data); 2183 sdata = get_ib_ateth_swap(ateth);
2193 e->atomic_data = (opcode == OP(FETCH_ADD)) ? 2184 e->atomic_data = (opcode == OP(FETCH_ADD)) ?
2194 (u64) atomic64_add_return(sdata, maddr) - sdata : 2185 (u64) atomic64_add_return(sdata, maddr) - sdata :
2195 (u64) cmpxchg((u64 *) qp->r_sge.sge.vaddr, 2186 (u64) cmpxchg((u64 *) qp->r_sge.sge.vaddr,
2196 be64_to_cpu(ateth->compare_data), 2187 get_ib_ateth_compare(ateth),
2197 sdata); 2188 sdata);
2198 rvt_put_mr(qp->r_sge.sge.mr); 2189 rvt_put_mr(qp->r_sge.sge.mr);
2199 qp->r_sge.num_sge = 0; 2190 qp->r_sge.num_sge = 0;
diff --git a/drivers/infiniband/hw/qib/qib_ruc.c b/drivers/infiniband/hw/qib/qib_ruc.c
index b67779256297..de1bde5950f5 100644
--- a/drivers/infiniband/hw/qib/qib_ruc.c
+++ b/drivers/infiniband/hw/qib/qib_ruc.c
@@ -265,7 +265,7 @@ static int gid_ok(union ib_gid *gid, __be64 gid_prefix, __be64 id)
265 * 265 *
266 * The s_lock will be acquired around the qib_migrate_qp() call. 266 * The s_lock will be acquired around the qib_migrate_qp() call.
267 */ 267 */
268int qib_ruc_check_hdr(struct qib_ibport *ibp, struct qib_ib_header *hdr, 268int qib_ruc_check_hdr(struct qib_ibport *ibp, struct ib_header *hdr,
269 int has_grh, struct rvt_qp *qp, u32 bth0) 269 int has_grh, struct rvt_qp *qp, u32 bth0)
270{ 270{
271 __be64 guid; 271 __be64 guid;
@@ -680,7 +680,7 @@ u32 qib_make_grh(struct qib_ibport *ibp, struct ib_grh *hdr,
680 return sizeof(struct ib_grh) / sizeof(u32); 680 return sizeof(struct ib_grh) / sizeof(u32);
681} 681}
682 682
683void qib_make_ruc_header(struct rvt_qp *qp, struct qib_other_headers *ohdr, 683void qib_make_ruc_header(struct rvt_qp *qp, struct ib_other_headers *ohdr,
684 u32 bth0, u32 bth2) 684 u32 bth0, u32 bth2)
685{ 685{
686 struct qib_qp_priv *priv = qp->priv; 686 struct qib_qp_priv *priv = qp->priv;
diff --git a/drivers/infiniband/hw/qib/qib_uc.c b/drivers/infiniband/hw/qib/qib_uc.c
index 1d61bd04f449..5b2d483451ad 100644
--- a/drivers/infiniband/hw/qib/qib_uc.c
+++ b/drivers/infiniband/hw/qib/qib_uc.c
@@ -48,7 +48,7 @@
48int qib_make_uc_req(struct rvt_qp *qp, unsigned long *flags) 48int qib_make_uc_req(struct rvt_qp *qp, unsigned long *flags)
49{ 49{
50 struct qib_qp_priv *priv = qp->priv; 50 struct qib_qp_priv *priv = qp->priv;
51 struct qib_other_headers *ohdr; 51 struct ib_other_headers *ohdr;
52 struct rvt_swqe *wqe; 52 struct rvt_swqe *wqe;
53 u32 hwords; 53 u32 hwords;
54 u32 bth0; 54 u32 bth0;
@@ -236,10 +236,10 @@ bail:
236 * for the given QP. 236 * for the given QP.
237 * Called at interrupt level. 237 * Called at interrupt level.
238 */ 238 */
239void qib_uc_rcv(struct qib_ibport *ibp, struct qib_ib_header *hdr, 239void qib_uc_rcv(struct qib_ibport *ibp, struct ib_header *hdr,
240 int has_grh, void *data, u32 tlen, struct rvt_qp *qp) 240 int has_grh, void *data, u32 tlen, struct rvt_qp *qp)
241{ 241{
242 struct qib_other_headers *ohdr; 242 struct ib_other_headers *ohdr;
243 u32 opcode; 243 u32 opcode;
244 u32 hdrsize; 244 u32 hdrsize;
245 u32 psn; 245 u32 psn;
diff --git a/drivers/infiniband/hw/qib/qib_ud.c b/drivers/infiniband/hw/qib/qib_ud.c
index 10d062561bd9..f45cad1198b0 100644
--- a/drivers/infiniband/hw/qib/qib_ud.c
+++ b/drivers/infiniband/hw/qib/qib_ud.c
@@ -245,7 +245,7 @@ drop:
245int qib_make_ud_req(struct rvt_qp *qp, unsigned long *flags) 245int qib_make_ud_req(struct rvt_qp *qp, unsigned long *flags)
246{ 246{
247 struct qib_qp_priv *priv = qp->priv; 247 struct qib_qp_priv *priv = qp->priv;
248 struct qib_other_headers *ohdr; 248 struct ib_other_headers *ohdr;
249 struct ib_ah_attr *ah_attr; 249 struct ib_ah_attr *ah_attr;
250 struct qib_pportdata *ppd; 250 struct qib_pportdata *ppd;
251 struct qib_ibport *ibp; 251 struct qib_ibport *ibp;
@@ -435,10 +435,10 @@ static unsigned qib_lookup_pkey(struct qib_ibport *ibp, u16 pkey)
435 * for the given QP. 435 * for the given QP.
436 * Called at interrupt level. 436 * Called at interrupt level.
437 */ 437 */
438void qib_ud_rcv(struct qib_ibport *ibp, struct qib_ib_header *hdr, 438void qib_ud_rcv(struct qib_ibport *ibp, struct ib_header *hdr,
439 int has_grh, void *data, u32 tlen, struct rvt_qp *qp) 439 int has_grh, void *data, u32 tlen, struct rvt_qp *qp)
440{ 440{
441 struct qib_other_headers *ohdr; 441 struct ib_other_headers *ohdr;
442 int opcode; 442 int opcode;
443 u32 hdrsize; 443 u32 hdrsize;
444 u32 pad; 444 u32 pad;
diff --git a/drivers/infiniband/hw/qib/qib_verbs.c b/drivers/infiniband/hw/qib/qib_verbs.c
index fd1dfbce5539..c12ec8f4b9ce 100644
--- a/drivers/infiniband/hw/qib/qib_verbs.c
+++ b/drivers/infiniband/hw/qib/qib_verbs.c
@@ -313,7 +313,7 @@ static void qib_copy_from_sge(void *data, struct rvt_sge_state *ss, u32 length)
313 * for the given QP. 313 * for the given QP.
314 * Called at interrupt level. 314 * Called at interrupt level.
315 */ 315 */
316static void qib_qp_rcv(struct qib_ctxtdata *rcd, struct qib_ib_header *hdr, 316static void qib_qp_rcv(struct qib_ctxtdata *rcd, struct ib_header *hdr,
317 int has_grh, void *data, u32 tlen, struct rvt_qp *qp) 317 int has_grh, void *data, u32 tlen, struct rvt_qp *qp)
318{ 318{
319 struct qib_ibport *ibp = &rcd->ppd->ibport_data; 319 struct qib_ibport *ibp = &rcd->ppd->ibport_data;
@@ -366,10 +366,10 @@ void qib_ib_rcv(struct qib_ctxtdata *rcd, void *rhdr, void *data, u32 tlen)
366{ 366{
367 struct qib_pportdata *ppd = rcd->ppd; 367 struct qib_pportdata *ppd = rcd->ppd;
368 struct qib_ibport *ibp = &ppd->ibport_data; 368 struct qib_ibport *ibp = &ppd->ibport_data;
369 struct qib_ib_header *hdr = rhdr; 369 struct ib_header *hdr = rhdr;
370 struct qib_devdata *dd = ppd->dd; 370 struct qib_devdata *dd = ppd->dd;
371 struct rvt_dev_info *rdi = &dd->verbs_dev.rdi; 371 struct rvt_dev_info *rdi = &dd->verbs_dev.rdi;
372 struct qib_other_headers *ohdr; 372 struct ib_other_headers *ohdr;
373 struct rvt_qp *qp; 373 struct rvt_qp *qp;
374 u32 qp_num; 374 u32 qp_num;
375 int lnh; 375 int lnh;
@@ -841,7 +841,7 @@ static void sdma_complete(struct qib_sdma_txreq *cookie, int status)
841 if (tx->wqe) 841 if (tx->wqe)
842 qib_send_complete(qp, tx->wqe, IB_WC_SUCCESS); 842 qib_send_complete(qp, tx->wqe, IB_WC_SUCCESS);
843 else if (qp->ibqp.qp_type == IB_QPT_RC) { 843 else if (qp->ibqp.qp_type == IB_QPT_RC) {
844 struct qib_ib_header *hdr; 844 struct ib_header *hdr;
845 845
846 if (tx->txreq.flags & QIB_SDMA_TXREQ_F_FREEBUF) 846 if (tx->txreq.flags & QIB_SDMA_TXREQ_F_FREEBUF)
847 hdr = &tx->align_buf->hdr; 847 hdr = &tx->align_buf->hdr;
@@ -889,7 +889,7 @@ static int wait_kmem(struct qib_ibdev *dev, struct rvt_qp *qp)
889 return ret; 889 return ret;
890} 890}
891 891
892static int qib_verbs_send_dma(struct rvt_qp *qp, struct qib_ib_header *hdr, 892static int qib_verbs_send_dma(struct rvt_qp *qp, struct ib_header *hdr,
893 u32 hdrwords, struct rvt_sge_state *ss, u32 len, 893 u32 hdrwords, struct rvt_sge_state *ss, u32 len,
894 u32 plen, u32 dwords) 894 u32 plen, u32 dwords)
895{ 895{
@@ -1025,7 +1025,7 @@ static int no_bufs_available(struct rvt_qp *qp)
1025 return ret; 1025 return ret;
1026} 1026}
1027 1027
1028static int qib_verbs_send_pio(struct rvt_qp *qp, struct qib_ib_header *ibhdr, 1028static int qib_verbs_send_pio(struct rvt_qp *qp, struct ib_header *ibhdr,
1029 u32 hdrwords, struct rvt_sge_state *ss, u32 len, 1029 u32 hdrwords, struct rvt_sge_state *ss, u32 len,
1030 u32 plen, u32 dwords) 1030 u32 plen, u32 dwords)
1031{ 1031{
@@ -1133,7 +1133,7 @@ done:
1133 * Return zero if packet is sent or queued OK. 1133 * Return zero if packet is sent or queued OK.
1134 * Return non-zero and clear qp->s_flags RVT_S_BUSY otherwise. 1134 * Return non-zero and clear qp->s_flags RVT_S_BUSY otherwise.
1135 */ 1135 */
1136int qib_verbs_send(struct rvt_qp *qp, struct qib_ib_header *hdr, 1136int qib_verbs_send(struct rvt_qp *qp, struct ib_header *hdr,
1137 u32 hdrwords, struct rvt_sge_state *ss, u32 len) 1137 u32 hdrwords, struct rvt_sge_state *ss, u32 len)
1138{ 1138{
1139 struct qib_devdata *dd = dd_from_ibdev(qp->ibqp.device); 1139 struct qib_devdata *dd = dd_from_ibdev(qp->ibqp.device);
diff --git a/drivers/infiniband/hw/qib/qib_verbs.h b/drivers/infiniband/hw/qib/qib_verbs.h
index 736ced684842..94fd30fdedac 100644
--- a/drivers/infiniband/hw/qib/qib_verbs.h
+++ b/drivers/infiniband/hw/qib/qib_verbs.h
@@ -45,6 +45,7 @@
45#include <linux/completion.h> 45#include <linux/completion.h>
46#include <rdma/ib_pack.h> 46#include <rdma/ib_pack.h>
47#include <rdma/ib_user_verbs.h> 47#include <rdma/ib_user_verbs.h>
48#include <rdma/ib_hdrs.h>
48#include <rdma/rdma_vt.h> 49#include <rdma/rdma_vt.h>
49#include <rdma/rdmavt_cq.h> 50#include <rdma/rdmavt_cq.h>
50 51
@@ -63,16 +64,6 @@ struct qib_verbs_txreq;
63 */ 64 */
64#define QIB_UVERBS_ABI_VERSION 2 65#define QIB_UVERBS_ABI_VERSION 2
65 66
66#define IB_SEQ_NAK (3 << 29)
67
68/* AETH NAK opcode values */
69#define IB_RNR_NAK 0x20
70#define IB_NAK_PSN_ERROR 0x60
71#define IB_NAK_INVALID_REQUEST 0x61
72#define IB_NAK_REMOTE_ACCESS_ERROR 0x62
73#define IB_NAK_REMOTE_OPERATIONAL_ERROR 0x63
74#define IB_NAK_INVALID_RD_REQUEST 0x64
75
76/* IB Performance Manager status values */ 67/* IB Performance Manager status values */
77#define IB_PMA_SAMPLE_STATUS_DONE 0x00 68#define IB_PMA_SAMPLE_STATUS_DONE 0x00
78#define IB_PMA_SAMPLE_STATUS_STARTED 0x01 69#define IB_PMA_SAMPLE_STATUS_STARTED 0x01
@@ -87,22 +78,9 @@ struct qib_verbs_txreq;
87 78
88#define QIB_VENDOR_IPG cpu_to_be16(0xFFA0) 79#define QIB_VENDOR_IPG cpu_to_be16(0xFFA0)
89 80
90#define IB_BTH_REQ_ACK (1 << 31)
91#define IB_BTH_SOLICITED (1 << 23)
92#define IB_BTH_MIG_REQ (1 << 22)
93
94/* XXX Should be defined in ib_verbs.h enum ib_port_cap_flags */ 81/* XXX Should be defined in ib_verbs.h enum ib_port_cap_flags */
95#define IB_PORT_OTHER_LOCAL_CHANGES_SUP (1 << 26) 82#define IB_PORT_OTHER_LOCAL_CHANGES_SUP (1 << 26)
96 83
97#define IB_GRH_VERSION 6
98#define IB_GRH_VERSION_MASK 0xF
99#define IB_GRH_VERSION_SHIFT 28
100#define IB_GRH_TCLASS_MASK 0xFF
101#define IB_GRH_TCLASS_SHIFT 20
102#define IB_GRH_FLOW_MASK 0xFFFFF
103#define IB_GRH_FLOW_SHIFT 0
104#define IB_GRH_NEXT_HDR 0x1B
105
106#define IB_DEFAULT_GID_PREFIX cpu_to_be64(0xfe80000000000000ULL) 84#define IB_DEFAULT_GID_PREFIX cpu_to_be64(0xfe80000000000000ULL)
107 85
108/* Values for set/get portinfo VLCap OperationalVLs */ 86/* Values for set/get portinfo VLCap OperationalVLs */
@@ -129,61 +107,9 @@ static inline int qib_num_vls(int vls)
129 } 107 }
130} 108}
131 109
132struct ib_reth {
133 __be64 vaddr;
134 __be32 rkey;
135 __be32 length;
136} __packed;
137
138struct ib_atomic_eth {
139 __be32 vaddr[2]; /* unaligned so access as 2 32-bit words */
140 __be32 rkey;
141 __be64 swap_data;
142 __be64 compare_data;
143} __packed;
144
145struct qib_other_headers {
146 __be32 bth[3];
147 union {
148 struct {
149 __be32 deth[2];
150 __be32 imm_data;
151 } ud;
152 struct {
153 struct ib_reth reth;
154 __be32 imm_data;
155 } rc;
156 struct {
157 __be32 aeth;
158 __be32 atomic_ack_eth[2];
159 } at;
160 __be32 imm_data;
161 __be32 aeth;
162 __be32 ieth;
163 struct ib_atomic_eth atomic_eth;
164 } u;
165} __packed;
166
167/*
168 * Note that UD packets with a GRH header are 8+40+12+8 = 68 bytes
169 * long (72 w/ imm_data). Only the first 56 bytes of the IB header
170 * will be in the eager header buffer. The remaining 12 or 16 bytes
171 * are in the data buffer.
172 */
173struct qib_ib_header {
174 __be16 lrh[4];
175 union {
176 struct {
177 struct ib_grh grh;
178 struct qib_other_headers oth;
179 } l;
180 struct qib_other_headers oth;
181 } u;
182} __packed;
183
184struct qib_pio_header { 110struct qib_pio_header {
185 __le32 pbc[2]; 111 __le32 pbc[2];
186 struct qib_ib_header hdr; 112 struct ib_header hdr;
187} __packed; 113} __packed;
188 114
189/* 115/*
@@ -191,7 +117,7 @@ struct qib_pio_header {
191 * is made common. 117 * is made common.
192 */ 118 */
193struct qib_qp_priv { 119struct qib_qp_priv {
194 struct qib_ib_header *s_hdr; /* next packet header to send */ 120 struct ib_header *s_hdr; /* next packet header to send */
195 struct list_head iowait; /* link for wait PIO buf */ 121 struct list_head iowait; /* link for wait PIO buf */
196 atomic_t s_dma_busy; 122 atomic_t s_dma_busy;
197 struct qib_verbs_txreq *s_tx; 123 struct qib_verbs_txreq *s_tx;
@@ -376,7 +302,7 @@ void qib_verbs_sdma_desc_avail(struct qib_pportdata *ppd, unsigned avail);
376 302
377void qib_put_txreq(struct qib_verbs_txreq *tx); 303void qib_put_txreq(struct qib_verbs_txreq *tx);
378 304
379int qib_verbs_send(struct rvt_qp *qp, struct qib_ib_header *hdr, 305int qib_verbs_send(struct rvt_qp *qp, struct ib_header *hdr,
380 u32 hdrwords, struct rvt_sge_state *ss, u32 len); 306 u32 hdrwords, struct rvt_sge_state *ss, u32 len);
381 307
382void qib_copy_sge(struct rvt_sge_state *ss, void *data, u32 length, 308void qib_copy_sge(struct rvt_sge_state *ss, void *data, u32 length,
@@ -384,10 +310,10 @@ void qib_copy_sge(struct rvt_sge_state *ss, void *data, u32 length,
384 310
385void qib_skip_sge(struct rvt_sge_state *ss, u32 length, int release); 311void qib_skip_sge(struct rvt_sge_state *ss, u32 length, int release);
386 312
387void qib_uc_rcv(struct qib_ibport *ibp, struct qib_ib_header *hdr, 313void qib_uc_rcv(struct qib_ibport *ibp, struct ib_header *hdr,
388 int has_grh, void *data, u32 tlen, struct rvt_qp *qp); 314 int has_grh, void *data, u32 tlen, struct rvt_qp *qp);
389 315
390void qib_rc_rcv(struct qib_ctxtdata *rcd, struct qib_ib_header *hdr, 316void qib_rc_rcv(struct qib_ctxtdata *rcd, struct ib_header *hdr,
391 int has_grh, void *data, u32 tlen, struct rvt_qp *qp); 317 int has_grh, void *data, u32 tlen, struct rvt_qp *qp);
392 318
393int qib_check_ah(struct ib_device *ibdev, struct ib_ah_attr *ah_attr); 319int qib_check_ah(struct ib_device *ibdev, struct ib_ah_attr *ah_attr);
@@ -398,13 +324,13 @@ struct ib_ah *qib_create_qp0_ah(struct qib_ibport *ibp, u16 dlid);
398 324
399void qib_rc_rnr_retry(unsigned long arg); 325void qib_rc_rnr_retry(unsigned long arg);
400 326
401void qib_rc_send_complete(struct rvt_qp *qp, struct qib_ib_header *hdr); 327void qib_rc_send_complete(struct rvt_qp *qp, struct ib_header *hdr);
402 328
403void qib_rc_error(struct rvt_qp *qp, enum ib_wc_status err); 329void qib_rc_error(struct rvt_qp *qp, enum ib_wc_status err);
404 330
405int qib_post_ud_send(struct rvt_qp *qp, struct ib_send_wr *wr); 331int qib_post_ud_send(struct rvt_qp *qp, struct ib_send_wr *wr);
406 332
407void qib_ud_rcv(struct qib_ibport *ibp, struct qib_ib_header *hdr, 333void qib_ud_rcv(struct qib_ibport *ibp, struct ib_header *hdr,
408 int has_grh, void *data, u32 tlen, struct rvt_qp *qp); 334 int has_grh, void *data, u32 tlen, struct rvt_qp *qp);
409 335
410void mr_rcu_callback(struct rcu_head *list); 336void mr_rcu_callback(struct rcu_head *list);
@@ -413,13 +339,13 @@ int qib_get_rwqe(struct rvt_qp *qp, int wr_id_only);
413 339
414void qib_migrate_qp(struct rvt_qp *qp); 340void qib_migrate_qp(struct rvt_qp *qp);
415 341
416int qib_ruc_check_hdr(struct qib_ibport *ibp, struct qib_ib_header *hdr, 342int qib_ruc_check_hdr(struct qib_ibport *ibp, struct ib_header *hdr,
417 int has_grh, struct rvt_qp *qp, u32 bth0); 343 int has_grh, struct rvt_qp *qp, u32 bth0);
418 344
419u32 qib_make_grh(struct qib_ibport *ibp, struct ib_grh *hdr, 345u32 qib_make_grh(struct qib_ibport *ibp, struct ib_grh *hdr,
420 struct ib_global_route *grh, u32 hwords, u32 nwords); 346 struct ib_global_route *grh, u32 hwords, u32 nwords);
421 347
422void qib_make_ruc_header(struct rvt_qp *qp, struct qib_other_headers *ohdr, 348void qib_make_ruc_header(struct rvt_qp *qp, struct ib_other_headers *ohdr,
423 u32 bth0, u32 bth2); 349 u32 bth0, u32 bth2);
424 350
425void _qib_do_send(struct work_struct *work); 351void _qib_do_send(struct work_struct *work);