diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-04-18 11:20:06 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-04-18 11:20:06 -0400 |
commit | 75e98b34155264d943aa53edce465e87f3ccbadf (patch) | |
tree | 08d100a14ab9f5314c393286ce8c5436ef387d75 /include | |
parent | 30bc94566e396b432b72e2f3518e19225dc2672d (diff) | |
parent | 0a22ab92f51478796d5f3997f4f5922409c98b10 (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: (104 commits)
IB/iser: Don't change itt endianness
IB/mlx4: Update module version and release date
IPoIB: Handle case when P_Key is deleted and re-added at same index
IB/iser: Release connection resources on RDMA_CM_EVENT_DEVICE_REMOVAL event
IB/mlx4: Fix incorrect comment
IB/mlx4: Fix race when detaching a QP from a multicast group
IB/ehca: Support all ibv_devinfo values in query_device() and query_port()
RDMA/nes: Free IRQ before killing tasklet
IB/mthca: Update module version and release date
IB/mlx4: Update QP state if query QP succeeds
IB/mthca: Update QP state if query QP succeeds
RDMA/amso1100: Add check for NULL reply_msg in c2_intr()
IB/mlx4: Add support for resizing CQs
IB/mlx4: Add support for modifying CQ moderation parameters
IPoIB: Support modifying IPoIB CQ event moderation
IB/core: Add support for modify CQ
IPoIB: Add basic ethtool support
mlx4_core: Increase max number of QPs to 128K
RDMA/amso1100: Add support for "send with invalidate" work requests
IB/core: Add support for "send with invalidate" work requests
...
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/mlx4/cmd.h | 2 | ||||
-rw-r--r-- | include/linux/mlx4/cq.h | 19 | ||||
-rw-r--r-- | include/linux/mlx4/device.h | 1 | ||||
-rw-r--r-- | include/linux/mlx4/driver.h | 3 | ||||
-rw-r--r-- | include/linux/mlx4/qp.h | 15 | ||||
-rw-r--r-- | include/rdma/ib_user_verbs.h | 5 | ||||
-rw-r--r-- | include/rdma/ib_verbs.h | 35 |
7 files changed, 66 insertions, 14 deletions
diff --git a/include/linux/mlx4/cmd.h b/include/linux/mlx4/cmd.h index 7d1eaa97de13..77323a72dd3c 100644 --- a/include/linux/mlx4/cmd.h +++ b/include/linux/mlx4/cmd.h | |||
@@ -81,7 +81,7 @@ enum { | |||
81 | MLX4_CMD_SW2HW_CQ = 0x16, | 81 | MLX4_CMD_SW2HW_CQ = 0x16, |
82 | MLX4_CMD_HW2SW_CQ = 0x17, | 82 | MLX4_CMD_HW2SW_CQ = 0x17, |
83 | MLX4_CMD_QUERY_CQ = 0x18, | 83 | MLX4_CMD_QUERY_CQ = 0x18, |
84 | MLX4_CMD_RESIZE_CQ = 0x2c, | 84 | MLX4_CMD_MODIFY_CQ = 0x2c, |
85 | 85 | ||
86 | /* SRQ commands */ | 86 | /* SRQ commands */ |
87 | MLX4_CMD_SW2HW_SRQ = 0x35, | 87 | MLX4_CMD_SW2HW_SRQ = 0x35, |
diff --git a/include/linux/mlx4/cq.h b/include/linux/mlx4/cq.h index 0181e0a57cbf..071cf96cf01f 100644 --- a/include/linux/mlx4/cq.h +++ b/include/linux/mlx4/cq.h | |||
@@ -45,11 +45,11 @@ struct mlx4_cqe { | |||
45 | u8 sl; | 45 | u8 sl; |
46 | u8 reserved1; | 46 | u8 reserved1; |
47 | __be16 rlid; | 47 | __be16 rlid; |
48 | u32 reserved2; | 48 | __be32 ipoib_status; |
49 | __be32 byte_cnt; | 49 | __be32 byte_cnt; |
50 | __be16 wqe_index; | 50 | __be16 wqe_index; |
51 | __be16 checksum; | 51 | __be16 checksum; |
52 | u8 reserved3[3]; | 52 | u8 reserved2[3]; |
53 | u8 owner_sr_opcode; | 53 | u8 owner_sr_opcode; |
54 | }; | 54 | }; |
55 | 55 | ||
@@ -85,6 +85,16 @@ enum { | |||
85 | MLX4_CQE_SYNDROME_REMOTE_ABORTED_ERR = 0x22, | 85 | MLX4_CQE_SYNDROME_REMOTE_ABORTED_ERR = 0x22, |
86 | }; | 86 | }; |
87 | 87 | ||
88 | enum { | ||
89 | MLX4_CQE_IPOIB_STATUS_IPV4 = 1 << 22, | ||
90 | MLX4_CQE_IPOIB_STATUS_IPV4F = 1 << 23, | ||
91 | MLX4_CQE_IPOIB_STATUS_IPV6 = 1 << 24, | ||
92 | MLX4_CQE_IPOIB_STATUS_IPV4OPT = 1 << 25, | ||
93 | MLX4_CQE_IPOIB_STATUS_TCP = 1 << 26, | ||
94 | MLX4_CQE_IPOIB_STATUS_UDP = 1 << 27, | ||
95 | MLX4_CQE_IPOIB_STATUS_IPOK = 1 << 28, | ||
96 | }; | ||
97 | |||
88 | static inline void mlx4_cq_arm(struct mlx4_cq *cq, u32 cmd, | 98 | static inline void mlx4_cq_arm(struct mlx4_cq *cq, u32 cmd, |
89 | void __iomem *uar_page, | 99 | void __iomem *uar_page, |
90 | spinlock_t *doorbell_lock) | 100 | spinlock_t *doorbell_lock) |
@@ -120,4 +130,9 @@ enum { | |||
120 | MLX4_CQ_DB_REQ_NOT = 2 << 24 | 130 | MLX4_CQ_DB_REQ_NOT = 2 << 24 |
121 | }; | 131 | }; |
122 | 132 | ||
133 | int mlx4_cq_modify(struct mlx4_dev *dev, struct mlx4_cq *cq, | ||
134 | u16 count, u16 period); | ||
135 | int mlx4_cq_resize(struct mlx4_dev *dev, struct mlx4_cq *cq, | ||
136 | int entries, struct mlx4_mtt *mtt); | ||
137 | |||
123 | #endif /* MLX4_CQ_H */ | 138 | #endif /* MLX4_CQ_H */ |
diff --git a/include/linux/mlx4/device.h b/include/linux/mlx4/device.h index 6cdf813cd478..ff7df1a2222f 100644 --- a/include/linux/mlx4/device.h +++ b/include/linux/mlx4/device.h | |||
@@ -186,6 +186,7 @@ struct mlx4_caps { | |||
186 | u32 flags; | 186 | u32 flags; |
187 | u16 stat_rate_support; | 187 | u16 stat_rate_support; |
188 | u8 port_width_cap[MLX4_MAX_PORTS + 1]; | 188 | u8 port_width_cap[MLX4_MAX_PORTS + 1]; |
189 | int max_gso_sz; | ||
189 | }; | 190 | }; |
190 | 191 | ||
191 | struct mlx4_buf_list { | 192 | struct mlx4_buf_list { |
diff --git a/include/linux/mlx4/driver.h b/include/linux/mlx4/driver.h index 1b835ca49df1..53c5fdb6eac4 100644 --- a/include/linux/mlx4/driver.h +++ b/include/linux/mlx4/driver.h | |||
@@ -48,8 +48,7 @@ struct mlx4_interface { | |||
48 | void * (*add) (struct mlx4_dev *dev); | 48 | void * (*add) (struct mlx4_dev *dev); |
49 | void (*remove)(struct mlx4_dev *dev, void *context); | 49 | void (*remove)(struct mlx4_dev *dev, void *context); |
50 | void (*event) (struct mlx4_dev *dev, void *context, | 50 | void (*event) (struct mlx4_dev *dev, void *context, |
51 | enum mlx4_dev_event event, int subtype, | 51 | enum mlx4_dev_event event, int port); |
52 | int port); | ||
53 | struct list_head list; | 52 | struct list_head list; |
54 | }; | 53 | }; |
55 | 54 | ||
diff --git a/include/linux/mlx4/qp.h b/include/linux/mlx4/qp.h index 09a2230923f2..a5e43febee4f 100644 --- a/include/linux/mlx4/qp.h +++ b/include/linux/mlx4/qp.h | |||
@@ -158,10 +158,12 @@ struct mlx4_qp_context { | |||
158 | #define MLX4_FW_VER_WQE_CTRL_NEC mlx4_fw_ver(2, 2, 232) | 158 | #define MLX4_FW_VER_WQE_CTRL_NEC mlx4_fw_ver(2, 2, 232) |
159 | 159 | ||
160 | enum { | 160 | enum { |
161 | MLX4_WQE_CTRL_NEC = 1 << 29, | 161 | MLX4_WQE_CTRL_NEC = 1 << 29, |
162 | MLX4_WQE_CTRL_FENCE = 1 << 6, | 162 | MLX4_WQE_CTRL_FENCE = 1 << 6, |
163 | MLX4_WQE_CTRL_CQ_UPDATE = 3 << 2, | 163 | MLX4_WQE_CTRL_CQ_UPDATE = 3 << 2, |
164 | MLX4_WQE_CTRL_SOLICITED = 1 << 1, | 164 | MLX4_WQE_CTRL_SOLICITED = 1 << 1, |
165 | MLX4_WQE_CTRL_IP_CSUM = 1 << 4, | ||
166 | MLX4_WQE_CTRL_TCP_UDP_CSUM = 1 << 5, | ||
165 | }; | 167 | }; |
166 | 168 | ||
167 | struct mlx4_wqe_ctrl_seg { | 169 | struct mlx4_wqe_ctrl_seg { |
@@ -217,6 +219,11 @@ struct mlx4_wqe_datagram_seg { | |||
217 | __be32 reservd[2]; | 219 | __be32 reservd[2]; |
218 | }; | 220 | }; |
219 | 221 | ||
222 | struct mlx4_lso_seg { | ||
223 | __be32 mss_hdr_size; | ||
224 | __be32 header[0]; | ||
225 | }; | ||
226 | |||
220 | struct mlx4_wqe_bind_seg { | 227 | struct mlx4_wqe_bind_seg { |
221 | __be32 flags1; | 228 | __be32 flags1; |
222 | __be32 flags2; | 229 | __be32 flags2; |
diff --git a/include/rdma/ib_user_verbs.h b/include/rdma/ib_user_verbs.h index 64a721fcbc1c..8d65bf0a625b 100644 --- a/include/rdma/ib_user_verbs.h +++ b/include/rdma/ib_user_verbs.h | |||
@@ -533,7 +533,10 @@ struct ib_uverbs_send_wr { | |||
533 | __u32 num_sge; | 533 | __u32 num_sge; |
534 | __u32 opcode; | 534 | __u32 opcode; |
535 | __u32 send_flags; | 535 | __u32 send_flags; |
536 | __u32 imm_data; | 536 | union { |
537 | __u32 imm_data; | ||
538 | __u32 invalidate_rkey; | ||
539 | } ex; | ||
537 | union { | 540 | union { |
538 | struct { | 541 | struct { |
539 | __u64 remote_addr; | 542 | __u64 remote_addr; |
diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h index 701e7b40560a..95bf4bac44cb 100644 --- a/include/rdma/ib_verbs.h +++ b/include/rdma/ib_verbs.h | |||
@@ -94,7 +94,7 @@ enum ib_device_cap_flags { | |||
94 | IB_DEVICE_SRQ_RESIZE = (1<<13), | 94 | IB_DEVICE_SRQ_RESIZE = (1<<13), |
95 | IB_DEVICE_N_NOTIFY_CQ = (1<<14), | 95 | IB_DEVICE_N_NOTIFY_CQ = (1<<14), |
96 | IB_DEVICE_ZERO_STAG = (1<<15), | 96 | IB_DEVICE_ZERO_STAG = (1<<15), |
97 | IB_DEVICE_SEND_W_INV = (1<<16), | 97 | IB_DEVICE_RESERVED = (1<<16), /* old SEND_W_INV */ |
98 | IB_DEVICE_MEM_WINDOW = (1<<17), | 98 | IB_DEVICE_MEM_WINDOW = (1<<17), |
99 | /* | 99 | /* |
100 | * Devices should set IB_DEVICE_UD_IP_SUM if they support | 100 | * Devices should set IB_DEVICE_UD_IP_SUM if they support |
@@ -104,6 +104,8 @@ enum ib_device_cap_flags { | |||
104 | * IPoIB driver may set NETIF_F_IP_CSUM for datagram mode. | 104 | * IPoIB driver may set NETIF_F_IP_CSUM for datagram mode. |
105 | */ | 105 | */ |
106 | IB_DEVICE_UD_IP_CSUM = (1<<18), | 106 | IB_DEVICE_UD_IP_CSUM = (1<<18), |
107 | IB_DEVICE_UD_TSO = (1<<19), | ||
108 | IB_DEVICE_SEND_W_INV = (1<<21), | ||
107 | }; | 109 | }; |
108 | 110 | ||
109 | enum ib_atomic_cap { | 111 | enum ib_atomic_cap { |
@@ -411,6 +413,7 @@ enum ib_wc_opcode { | |||
411 | IB_WC_COMP_SWAP, | 413 | IB_WC_COMP_SWAP, |
412 | IB_WC_FETCH_ADD, | 414 | IB_WC_FETCH_ADD, |
413 | IB_WC_BIND_MW, | 415 | IB_WC_BIND_MW, |
416 | IB_WC_LSO, | ||
414 | /* | 417 | /* |
415 | * Set value of IB_WC_RECV so consumers can test if a completion is a | 418 | * Set value of IB_WC_RECV so consumers can test if a completion is a |
416 | * receive by testing (opcode & IB_WC_RECV). | 419 | * receive by testing (opcode & IB_WC_RECV). |
@@ -495,6 +498,10 @@ enum ib_qp_type { | |||
495 | IB_QPT_RAW_ETY | 498 | IB_QPT_RAW_ETY |
496 | }; | 499 | }; |
497 | 500 | ||
501 | enum ib_qp_create_flags { | ||
502 | IB_QP_CREATE_IPOIB_UD_LSO = 1 << 0, | ||
503 | }; | ||
504 | |||
498 | struct ib_qp_init_attr { | 505 | struct ib_qp_init_attr { |
499 | void (*event_handler)(struct ib_event *, void *); | 506 | void (*event_handler)(struct ib_event *, void *); |
500 | void *qp_context; | 507 | void *qp_context; |
@@ -504,6 +511,7 @@ struct ib_qp_init_attr { | |||
504 | struct ib_qp_cap cap; | 511 | struct ib_qp_cap cap; |
505 | enum ib_sig_type sq_sig_type; | 512 | enum ib_sig_type sq_sig_type; |
506 | enum ib_qp_type qp_type; | 513 | enum ib_qp_type qp_type; |
514 | enum ib_qp_create_flags create_flags; | ||
507 | u8 port_num; /* special QP types only */ | 515 | u8 port_num; /* special QP types only */ |
508 | }; | 516 | }; |
509 | 517 | ||
@@ -617,7 +625,9 @@ enum ib_wr_opcode { | |||
617 | IB_WR_SEND_WITH_IMM, | 625 | IB_WR_SEND_WITH_IMM, |
618 | IB_WR_RDMA_READ, | 626 | IB_WR_RDMA_READ, |
619 | IB_WR_ATOMIC_CMP_AND_SWP, | 627 | IB_WR_ATOMIC_CMP_AND_SWP, |
620 | IB_WR_ATOMIC_FETCH_AND_ADD | 628 | IB_WR_ATOMIC_FETCH_AND_ADD, |
629 | IB_WR_LSO, | ||
630 | IB_WR_SEND_WITH_INV, | ||
621 | }; | 631 | }; |
622 | 632 | ||
623 | enum ib_send_flags { | 633 | enum ib_send_flags { |
@@ -641,7 +651,10 @@ struct ib_send_wr { | |||
641 | int num_sge; | 651 | int num_sge; |
642 | enum ib_wr_opcode opcode; | 652 | enum ib_wr_opcode opcode; |
643 | int send_flags; | 653 | int send_flags; |
644 | __be32 imm_data; | 654 | union { |
655 | __be32 imm_data; | ||
656 | u32 invalidate_rkey; | ||
657 | } ex; | ||
645 | union { | 658 | union { |
646 | struct { | 659 | struct { |
647 | u64 remote_addr; | 660 | u64 remote_addr; |
@@ -655,6 +668,9 @@ struct ib_send_wr { | |||
655 | } atomic; | 668 | } atomic; |
656 | struct { | 669 | struct { |
657 | struct ib_ah *ah; | 670 | struct ib_ah *ah; |
671 | void *header; | ||
672 | int hlen; | ||
673 | int mss; | ||
658 | u32 remote_qpn; | 674 | u32 remote_qpn; |
659 | u32 remote_qkey; | 675 | u32 remote_qkey; |
660 | u16 pkey_index; /* valid for GSI only */ | 676 | u16 pkey_index; /* valid for GSI only */ |
@@ -730,7 +746,7 @@ struct ib_uobject { | |||
730 | struct ib_ucontext *context; /* associated user context */ | 746 | struct ib_ucontext *context; /* associated user context */ |
731 | void *object; /* containing object */ | 747 | void *object; /* containing object */ |
732 | struct list_head list; /* link to context's list */ | 748 | struct list_head list; /* link to context's list */ |
733 | u32 id; /* index into kernel idr */ | 749 | int id; /* index into kernel idr */ |
734 | struct kref ref; | 750 | struct kref ref; |
735 | struct rw_semaphore mutex; /* protects .live */ | 751 | struct rw_semaphore mutex; /* protects .live */ |
736 | int live; | 752 | int live; |
@@ -971,6 +987,8 @@ struct ib_device { | |||
971 | int comp_vector, | 987 | int comp_vector, |
972 | struct ib_ucontext *context, | 988 | struct ib_ucontext *context, |
973 | struct ib_udata *udata); | 989 | struct ib_udata *udata); |
990 | int (*modify_cq)(struct ib_cq *cq, u16 cq_count, | ||
991 | u16 cq_period); | ||
974 | int (*destroy_cq)(struct ib_cq *cq); | 992 | int (*destroy_cq)(struct ib_cq *cq); |
975 | int (*resize_cq)(struct ib_cq *cq, int cqe, | 993 | int (*resize_cq)(struct ib_cq *cq, int cqe, |
976 | struct ib_udata *udata); | 994 | struct ib_udata *udata); |
@@ -1376,6 +1394,15 @@ struct ib_cq *ib_create_cq(struct ib_device *device, | |||
1376 | int ib_resize_cq(struct ib_cq *cq, int cqe); | 1394 | int ib_resize_cq(struct ib_cq *cq, int cqe); |
1377 | 1395 | ||
1378 | /** | 1396 | /** |
1397 | * ib_modify_cq - Modifies moderation params of the CQ | ||
1398 | * @cq: The CQ to modify. | ||
1399 | * @cq_count: number of CQEs that will trigger an event | ||
1400 | * @cq_period: max period of time in usec before triggering an event | ||
1401 | * | ||
1402 | */ | ||
1403 | int ib_modify_cq(struct ib_cq *cq, u16 cq_count, u16 cq_period); | ||
1404 | |||
1405 | /** | ||
1379 | * ib_destroy_cq - Destroys the specified CQ. | 1406 | * ib_destroy_cq - Destroys the specified CQ. |
1380 | * @cq: The CQ to destroy. | 1407 | * @cq: The CQ to destroy. |
1381 | */ | 1408 | */ |