diff options
author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2008-07-15 21:07:59 -0400 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2008-07-15 21:07:59 -0400 |
commit | 84c3d4aaec3338201b449034beac41635866bddf (patch) | |
tree | 3412951682fb2dd4feb8a5532f8efbaf8b345933 /include/rdma/ib_verbs.h | |
parent | 43d2548bb2ef7e6d753f91468a746784041e522d (diff) | |
parent | fafa3a3f16723997f039a0193997464d66dafd8f (diff) |
Merge commit 'origin/master'
Manual merge of:
arch/powerpc/Kconfig
arch/powerpc/kernel/stacktrace.c
arch/powerpc/mm/slice.c
arch/ppc/kernel/smp.c
Diffstat (limited to 'include/rdma/ib_verbs.h')
-rw-r--r-- | include/rdma/ib_verbs.h | 149 |
1 files changed, 141 insertions, 8 deletions
diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h index 31d30b1852e8..90b529f7a154 100644 --- a/include/rdma/ib_verbs.h +++ b/include/rdma/ib_verbs.h | |||
@@ -34,8 +34,6 @@ | |||
34 | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | 34 | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
35 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | 35 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
36 | * SOFTWARE. | 36 | * SOFTWARE. |
37 | * | ||
38 | * $Id: ib_verbs.h 1349 2004-12-16 21:09:43Z roland $ | ||
39 | */ | 37 | */ |
40 | 38 | ||
41 | #if !defined(IB_VERBS_H) | 39 | #if !defined(IB_VERBS_H) |
@@ -93,7 +91,7 @@ enum ib_device_cap_flags { | |||
93 | IB_DEVICE_RC_RNR_NAK_GEN = (1<<12), | 91 | IB_DEVICE_RC_RNR_NAK_GEN = (1<<12), |
94 | IB_DEVICE_SRQ_RESIZE = (1<<13), | 92 | IB_DEVICE_SRQ_RESIZE = (1<<13), |
95 | IB_DEVICE_N_NOTIFY_CQ = (1<<14), | 93 | IB_DEVICE_N_NOTIFY_CQ = (1<<14), |
96 | IB_DEVICE_ZERO_STAG = (1<<15), | 94 | IB_DEVICE_LOCAL_DMA_LKEY = (1<<15), |
97 | IB_DEVICE_RESERVED = (1<<16), /* old SEND_W_INV */ | 95 | IB_DEVICE_RESERVED = (1<<16), /* old SEND_W_INV */ |
98 | IB_DEVICE_MEM_WINDOW = (1<<17), | 96 | IB_DEVICE_MEM_WINDOW = (1<<17), |
99 | /* | 97 | /* |
@@ -105,6 +103,8 @@ enum ib_device_cap_flags { | |||
105 | */ | 103 | */ |
106 | IB_DEVICE_UD_IP_CSUM = (1<<18), | 104 | IB_DEVICE_UD_IP_CSUM = (1<<18), |
107 | IB_DEVICE_UD_TSO = (1<<19), | 105 | IB_DEVICE_UD_TSO = (1<<19), |
106 | IB_DEVICE_MEM_MGT_EXTENSIONS = (1<<21), | ||
107 | IB_DEVICE_BLOCK_MULTICAST_LOOPBACK = (1<<22), | ||
108 | }; | 108 | }; |
109 | 109 | ||
110 | enum ib_atomic_cap { | 110 | enum ib_atomic_cap { |
@@ -150,6 +150,7 @@ struct ib_device_attr { | |||
150 | int max_srq; | 150 | int max_srq; |
151 | int max_srq_wr; | 151 | int max_srq_wr; |
152 | int max_srq_sge; | 152 | int max_srq_sge; |
153 | unsigned int max_fast_reg_page_list_len; | ||
153 | u16 max_pkeys; | 154 | u16 max_pkeys; |
154 | u8 local_ca_ack_delay; | 155 | u8 local_ca_ack_delay; |
155 | }; | 156 | }; |
@@ -226,6 +227,57 @@ static inline int ib_width_enum_to_int(enum ib_port_width width) | |||
226 | } | 227 | } |
227 | } | 228 | } |
228 | 229 | ||
230 | struct ib_protocol_stats { | ||
231 | /* TBD... */ | ||
232 | }; | ||
233 | |||
234 | struct iw_protocol_stats { | ||
235 | u64 ipInReceives; | ||
236 | u64 ipInHdrErrors; | ||
237 | u64 ipInTooBigErrors; | ||
238 | u64 ipInNoRoutes; | ||
239 | u64 ipInAddrErrors; | ||
240 | u64 ipInUnknownProtos; | ||
241 | u64 ipInTruncatedPkts; | ||
242 | u64 ipInDiscards; | ||
243 | u64 ipInDelivers; | ||
244 | u64 ipOutForwDatagrams; | ||
245 | u64 ipOutRequests; | ||
246 | u64 ipOutDiscards; | ||
247 | u64 ipOutNoRoutes; | ||
248 | u64 ipReasmTimeout; | ||
249 | u64 ipReasmReqds; | ||
250 | u64 ipReasmOKs; | ||
251 | u64 ipReasmFails; | ||
252 | u64 ipFragOKs; | ||
253 | u64 ipFragFails; | ||
254 | u64 ipFragCreates; | ||
255 | u64 ipInMcastPkts; | ||
256 | u64 ipOutMcastPkts; | ||
257 | u64 ipInBcastPkts; | ||
258 | u64 ipOutBcastPkts; | ||
259 | |||
260 | u64 tcpRtoAlgorithm; | ||
261 | u64 tcpRtoMin; | ||
262 | u64 tcpRtoMax; | ||
263 | u64 tcpMaxConn; | ||
264 | u64 tcpActiveOpens; | ||
265 | u64 tcpPassiveOpens; | ||
266 | u64 tcpAttemptFails; | ||
267 | u64 tcpEstabResets; | ||
268 | u64 tcpCurrEstab; | ||
269 | u64 tcpInSegs; | ||
270 | u64 tcpOutSegs; | ||
271 | u64 tcpRetransSegs; | ||
272 | u64 tcpInErrs; | ||
273 | u64 tcpOutRsts; | ||
274 | }; | ||
275 | |||
276 | union rdma_protocol_stats { | ||
277 | struct ib_protocol_stats ib; | ||
278 | struct iw_protocol_stats iw; | ||
279 | }; | ||
280 | |||
229 | struct ib_port_attr { | 281 | struct ib_port_attr { |
230 | enum ib_port_state state; | 282 | enum ib_port_state state; |
231 | enum ib_mtu max_mtu; | 283 | enum ib_mtu max_mtu; |
@@ -413,6 +465,8 @@ enum ib_wc_opcode { | |||
413 | IB_WC_FETCH_ADD, | 465 | IB_WC_FETCH_ADD, |
414 | IB_WC_BIND_MW, | 466 | IB_WC_BIND_MW, |
415 | IB_WC_LSO, | 467 | IB_WC_LSO, |
468 | IB_WC_LOCAL_INV, | ||
469 | IB_WC_FAST_REG_MR, | ||
416 | /* | 470 | /* |
417 | * Set value of IB_WC_RECV so consumers can test if a completion is a | 471 | * Set value of IB_WC_RECV so consumers can test if a completion is a |
418 | * receive by testing (opcode & IB_WC_RECV). | 472 | * receive by testing (opcode & IB_WC_RECV). |
@@ -423,7 +477,8 @@ enum ib_wc_opcode { | |||
423 | 477 | ||
424 | enum ib_wc_flags { | 478 | enum ib_wc_flags { |
425 | IB_WC_GRH = 1, | 479 | IB_WC_GRH = 1, |
426 | IB_WC_WITH_IMM = (1<<1) | 480 | IB_WC_WITH_IMM = (1<<1), |
481 | IB_WC_WITH_INVALIDATE = (1<<2), | ||
427 | }; | 482 | }; |
428 | 483 | ||
429 | struct ib_wc { | 484 | struct ib_wc { |
@@ -433,7 +488,10 @@ struct ib_wc { | |||
433 | u32 vendor_err; | 488 | u32 vendor_err; |
434 | u32 byte_len; | 489 | u32 byte_len; |
435 | struct ib_qp *qp; | 490 | struct ib_qp *qp; |
436 | __be32 imm_data; | 491 | union { |
492 | __be32 imm_data; | ||
493 | u32 invalidate_rkey; | ||
494 | } ex; | ||
437 | u32 src_qp; | 495 | u32 src_qp; |
438 | int wc_flags; | 496 | int wc_flags; |
439 | u16 pkey_index; | 497 | u16 pkey_index; |
@@ -498,7 +556,8 @@ enum ib_qp_type { | |||
498 | }; | 556 | }; |
499 | 557 | ||
500 | enum ib_qp_create_flags { | 558 | enum ib_qp_create_flags { |
501 | IB_QP_CREATE_IPOIB_UD_LSO = 1 << 0, | 559 | IB_QP_CREATE_IPOIB_UD_LSO = 1 << 0, |
560 | IB_QP_CREATE_BLOCK_MULTICAST_LOOPBACK = 1 << 1, | ||
502 | }; | 561 | }; |
503 | 562 | ||
504 | struct ib_qp_init_attr { | 563 | struct ib_qp_init_attr { |
@@ -627,6 +686,9 @@ enum ib_wr_opcode { | |||
627 | IB_WR_ATOMIC_FETCH_AND_ADD, | 686 | IB_WR_ATOMIC_FETCH_AND_ADD, |
628 | IB_WR_LSO, | 687 | IB_WR_LSO, |
629 | IB_WR_SEND_WITH_INV, | 688 | IB_WR_SEND_WITH_INV, |
689 | IB_WR_RDMA_READ_WITH_INV, | ||
690 | IB_WR_LOCAL_INV, | ||
691 | IB_WR_FAST_REG_MR, | ||
630 | }; | 692 | }; |
631 | 693 | ||
632 | enum ib_send_flags { | 694 | enum ib_send_flags { |
@@ -643,6 +705,12 @@ struct ib_sge { | |||
643 | u32 lkey; | 705 | u32 lkey; |
644 | }; | 706 | }; |
645 | 707 | ||
708 | struct ib_fast_reg_page_list { | ||
709 | struct ib_device *device; | ||
710 | u64 *page_list; | ||
711 | unsigned int max_page_list_len; | ||
712 | }; | ||
713 | |||
646 | struct ib_send_wr { | 714 | struct ib_send_wr { |
647 | struct ib_send_wr *next; | 715 | struct ib_send_wr *next; |
648 | u64 wr_id; | 716 | u64 wr_id; |
@@ -675,6 +743,15 @@ struct ib_send_wr { | |||
675 | u16 pkey_index; /* valid for GSI only */ | 743 | u16 pkey_index; /* valid for GSI only */ |
676 | u8 port_num; /* valid for DR SMPs on switch only */ | 744 | u8 port_num; /* valid for DR SMPs on switch only */ |
677 | } ud; | 745 | } ud; |
746 | struct { | ||
747 | u64 iova_start; | ||
748 | struct ib_fast_reg_page_list *page_list; | ||
749 | unsigned int page_shift; | ||
750 | unsigned int page_list_len; | ||
751 | u32 length; | ||
752 | int access_flags; | ||
753 | u32 rkey; | ||
754 | } fast_reg; | ||
678 | } wr; | 755 | } wr; |
679 | }; | 756 | }; |
680 | 757 | ||
@@ -777,7 +854,7 @@ struct ib_cq { | |||
777 | struct ib_uobject *uobject; | 854 | struct ib_uobject *uobject; |
778 | ib_comp_handler comp_handler; | 855 | ib_comp_handler comp_handler; |
779 | void (*event_handler)(struct ib_event *, void *); | 856 | void (*event_handler)(struct ib_event *, void *); |
780 | void * cq_context; | 857 | void *cq_context; |
781 | int cqe; | 858 | int cqe; |
782 | atomic_t usecnt; /* count number of work queues */ | 859 | atomic_t usecnt; /* count number of work queues */ |
783 | }; | 860 | }; |
@@ -883,7 +960,7 @@ struct ib_dma_mapping_ops { | |||
883 | void (*sync_single_for_cpu)(struct ib_device *dev, | 960 | void (*sync_single_for_cpu)(struct ib_device *dev, |
884 | u64 dma_handle, | 961 | u64 dma_handle, |
885 | size_t size, | 962 | size_t size, |
886 | enum dma_data_direction dir); | 963 | enum dma_data_direction dir); |
887 | void (*sync_single_for_device)(struct ib_device *dev, | 964 | void (*sync_single_for_device)(struct ib_device *dev, |
888 | u64 dma_handle, | 965 | u64 dma_handle, |
889 | size_t size, | 966 | size_t size, |
@@ -919,6 +996,8 @@ struct ib_device { | |||
919 | 996 | ||
920 | struct iw_cm_verbs *iwcm; | 997 | struct iw_cm_verbs *iwcm; |
921 | 998 | ||
999 | int (*get_protocol_stats)(struct ib_device *device, | ||
1000 | union rdma_protocol_stats *stats); | ||
922 | int (*query_device)(struct ib_device *device, | 1001 | int (*query_device)(struct ib_device *device, |
923 | struct ib_device_attr *device_attr); | 1002 | struct ib_device_attr *device_attr); |
924 | int (*query_port)(struct ib_device *device, | 1003 | int (*query_port)(struct ib_device *device, |
@@ -1013,6 +1092,11 @@ struct ib_device { | |||
1013 | int (*query_mr)(struct ib_mr *mr, | 1092 | int (*query_mr)(struct ib_mr *mr, |
1014 | struct ib_mr_attr *mr_attr); | 1093 | struct ib_mr_attr *mr_attr); |
1015 | int (*dereg_mr)(struct ib_mr *mr); | 1094 | int (*dereg_mr)(struct ib_mr *mr); |
1095 | struct ib_mr * (*alloc_fast_reg_mr)(struct ib_pd *pd, | ||
1096 | int max_page_list_len); | ||
1097 | struct ib_fast_reg_page_list * (*alloc_fast_reg_page_list)(struct ib_device *device, | ||
1098 | int page_list_len); | ||
1099 | void (*free_fast_reg_page_list)(struct ib_fast_reg_page_list *page_list); | ||
1016 | int (*rereg_phys_mr)(struct ib_mr *mr, | 1100 | int (*rereg_phys_mr)(struct ib_mr *mr, |
1017 | int mr_rereg_mask, | 1101 | int mr_rereg_mask, |
1018 | struct ib_pd *pd, | 1102 | struct ib_pd *pd, |
@@ -1065,6 +1149,7 @@ struct ib_device { | |||
1065 | 1149 | ||
1066 | char node_desc[64]; | 1150 | char node_desc[64]; |
1067 | __be64 node_guid; | 1151 | __be64 node_guid; |
1152 | u32 local_dma_lkey; | ||
1068 | u8 node_type; | 1153 | u8 node_type; |
1069 | u8 phys_port_cnt; | 1154 | u8 phys_port_cnt; |
1070 | }; | 1155 | }; |
@@ -1807,6 +1892,54 @@ int ib_query_mr(struct ib_mr *mr, struct ib_mr_attr *mr_attr); | |||
1807 | int ib_dereg_mr(struct ib_mr *mr); | 1892 | int ib_dereg_mr(struct ib_mr *mr); |
1808 | 1893 | ||
1809 | /** | 1894 | /** |
1895 | * ib_alloc_fast_reg_mr - Allocates memory region usable with the | ||
1896 | * IB_WR_FAST_REG_MR send work request. | ||
1897 | * @pd: The protection domain associated with the region. | ||
1898 | * @max_page_list_len: requested max physical buffer list length to be | ||
1899 | * used with fast register work requests for this MR. | ||
1900 | */ | ||
1901 | struct ib_mr *ib_alloc_fast_reg_mr(struct ib_pd *pd, int max_page_list_len); | ||
1902 | |||
1903 | /** | ||
1904 | * ib_alloc_fast_reg_page_list - Allocates a page list array | ||
1905 | * @device - ib device pointer. | ||
1906 | * @page_list_len - size of the page list array to be allocated. | ||
1907 | * | ||
1908 | * This allocates and returns a struct ib_fast_reg_page_list * and a | ||
1909 | * page_list array that is at least page_list_len in size. The actual | ||
1910 | * size is returned in max_page_list_len. The caller is responsible | ||
1911 | * for initializing the contents of the page_list array before posting | ||
1912 | * a send work request with the IB_WC_FAST_REG_MR opcode. | ||
1913 | * | ||
1914 | * The page_list array entries must be translated using one of the | ||
1915 | * ib_dma_*() functions just like the addresses passed to | ||
1916 | * ib_map_phys_fmr(). Once the ib_post_send() is issued, the struct | ||
1917 | * ib_fast_reg_page_list must not be modified by the caller until the | ||
1918 | * IB_WC_FAST_REG_MR work request completes. | ||
1919 | */ | ||
1920 | struct ib_fast_reg_page_list *ib_alloc_fast_reg_page_list( | ||
1921 | struct ib_device *device, int page_list_len); | ||
1922 | |||
1923 | /** | ||
1924 | * ib_free_fast_reg_page_list - Deallocates a previously allocated | ||
1925 | * page list array. | ||
1926 | * @page_list - struct ib_fast_reg_page_list pointer to be deallocated. | ||
1927 | */ | ||
1928 | void ib_free_fast_reg_page_list(struct ib_fast_reg_page_list *page_list); | ||
1929 | |||
1930 | /** | ||
1931 | * ib_update_fast_reg_key - updates the key portion of the fast_reg MR | ||
1932 | * R_Key and L_Key. | ||
1933 | * @mr - struct ib_mr pointer to be updated. | ||
1934 | * @newkey - new key to be used. | ||
1935 | */ | ||
1936 | static inline void ib_update_fast_reg_key(struct ib_mr *mr, u8 newkey) | ||
1937 | { | ||
1938 | mr->lkey = (mr->lkey & 0xffffff00) | newkey; | ||
1939 | mr->rkey = (mr->rkey & 0xffffff00) | newkey; | ||
1940 | } | ||
1941 | |||
1942 | /** | ||
1810 | * ib_alloc_mw - Allocates a memory window. | 1943 | * ib_alloc_mw - Allocates a memory window. |
1811 | * @pd: The protection domain associated with the memory window. | 1944 | * @pd: The protection domain associated with the memory window. |
1812 | */ | 1945 | */ |