diff options
Diffstat (limited to 'include/rdma/ib_mad.h')
| -rw-r--r-- | include/rdma/ib_mad.h | 48 |
1 files changed, 30 insertions, 18 deletions
diff --git a/include/rdma/ib_mad.h b/include/rdma/ib_mad.h index 2c133506742b..51ab8eddb295 100644 --- a/include/rdma/ib_mad.h +++ b/include/rdma/ib_mad.h | |||
| @@ -33,7 +33,7 @@ | |||
| 33 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | 33 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
| 34 | * SOFTWARE. | 34 | * SOFTWARE. |
| 35 | * | 35 | * |
| 36 | * $Id: ib_mad.h 2775 2005-07-02 13:42:12Z halr $ | 36 | * $Id: ib_mad.h 5596 2006-03-03 01:00:07Z sean.hefty $ |
| 37 | */ | 37 | */ |
| 38 | 38 | ||
| 39 | #if !defined( IB_MAD_H ) | 39 | #if !defined( IB_MAD_H ) |
| @@ -208,15 +208,23 @@ struct ib_class_port_info | |||
| 208 | /** | 208 | /** |
| 209 | * ib_mad_send_buf - MAD data buffer and work request for sends. | 209 | * ib_mad_send_buf - MAD data buffer and work request for sends. |
| 210 | * @next: A pointer used to chain together MADs for posting. | 210 | * @next: A pointer used to chain together MADs for posting. |
| 211 | * @mad: References an allocated MAD data buffer. | 211 | * @mad: References an allocated MAD data buffer for MADs that do not have |
| 212 | * RMPP active. For MADs using RMPP, references the common and management | ||
| 213 | * class specific headers. | ||
| 212 | * @mad_agent: MAD agent that allocated the buffer. | 214 | * @mad_agent: MAD agent that allocated the buffer. |
| 213 | * @ah: The address handle to use when sending the MAD. | 215 | * @ah: The address handle to use when sending the MAD. |
| 214 | * @context: User-controlled context fields. | 216 | * @context: User-controlled context fields. |
| 217 | * @hdr_len: Indicates the size of the data header of the MAD. This length | ||
| 218 | * includes the common MAD, RMPP, and class specific headers. | ||
| 219 | * @data_len: Indicates the total size of user-transferred data. | ||
| 220 | * @seg_count: The number of RMPP segments allocated for this send. | ||
| 221 | * @seg_size: Size of each RMPP segment. | ||
| 215 | * @timeout_ms: Time to wait for a response. | 222 | * @timeout_ms: Time to wait for a response. |
| 216 | * @retries: Number of times to retry a request for a response. | 223 | * @retries: Number of times to retry a request for a response. |
| 217 | * | 224 | * |
| 218 | * Users are responsible for initializing the MAD buffer itself, with the | 225 | * Users are responsible for initializing the MAD buffer itself, with the |
| 219 | * exception of specifying the payload length field in any RMPP MAD. | 226 | * exception of any RMPP header. Additional segment buffer space allocated |
| 227 | * beyond data_len is padding. | ||
| 220 | */ | 228 | */ |
| 221 | struct ib_mad_send_buf { | 229 | struct ib_mad_send_buf { |
| 222 | struct ib_mad_send_buf *next; | 230 | struct ib_mad_send_buf *next; |
| @@ -224,6 +232,10 @@ struct ib_mad_send_buf { | |||
| 224 | struct ib_mad_agent *mad_agent; | 232 | struct ib_mad_agent *mad_agent; |
| 225 | struct ib_ah *ah; | 233 | struct ib_ah *ah; |
| 226 | void *context[2]; | 234 | void *context[2]; |
| 235 | int hdr_len; | ||
| 236 | int data_len; | ||
| 237 | int seg_count; | ||
| 238 | int seg_size; | ||
| 227 | int timeout_ms; | 239 | int timeout_ms; |
| 228 | int retries; | 240 | int retries; |
| 229 | }; | 241 | }; |
| @@ -299,7 +311,7 @@ typedef void (*ib_mad_snoop_handler)(struct ib_mad_agent *mad_agent, | |||
| 299 | * @mad_recv_wc: Received work completion information on the received MAD. | 311 | * @mad_recv_wc: Received work completion information on the received MAD. |
| 300 | * | 312 | * |
| 301 | * MADs received in response to a send request operation will be handed to | 313 | * MADs received in response to a send request operation will be handed to |
| 302 | * the user after the send operation completes. All data buffers given | 314 | * the user before the send operation completes. All data buffers given |
| 303 | * to registered agents through this routine are owned by the receiving | 315 | * to registered agents through this routine are owned by the receiving |
| 304 | * client, except for snooping agents. Clients snooping MADs should not | 316 | * client, except for snooping agents. Clients snooping MADs should not |
| 305 | * modify the data referenced by @mad_recv_wc. | 317 | * modify the data referenced by @mad_recv_wc. |
| @@ -485,17 +497,6 @@ int ib_unregister_mad_agent(struct ib_mad_agent *mad_agent); | |||
| 485 | int ib_post_send_mad(struct ib_mad_send_buf *send_buf, | 497 | int ib_post_send_mad(struct ib_mad_send_buf *send_buf, |
| 486 | struct ib_mad_send_buf **bad_send_buf); | 498 | struct ib_mad_send_buf **bad_send_buf); |
| 487 | 499 | ||
| 488 | /** | ||
| 489 | * ib_coalesce_recv_mad - Coalesces received MAD data into a single buffer. | ||
| 490 | * @mad_recv_wc: Work completion information for a received MAD. | ||
| 491 | * @buf: User-provided data buffer to receive the coalesced buffers. The | ||
| 492 | * referenced buffer should be at least the size of the mad_len specified | ||
| 493 | * by @mad_recv_wc. | ||
| 494 | * | ||
| 495 | * This call copies a chain of received MAD segments into a single data buffer, | ||
| 496 | * removing duplicated headers. | ||
| 497 | */ | ||
| 498 | void ib_coalesce_recv_mad(struct ib_mad_recv_wc *mad_recv_wc, void *buf); | ||
| 499 | 500 | ||
| 500 | /** | 501 | /** |
| 501 | * ib_free_recv_mad - Returns data buffers used to receive a MAD. | 502 | * ib_free_recv_mad - Returns data buffers used to receive a MAD. |
| @@ -590,9 +591,10 @@ int ib_process_mad_wc(struct ib_mad_agent *mad_agent, | |||
| 590 | * with an initialized work request structure. Users may modify the returned | 591 | * with an initialized work request structure. Users may modify the returned |
| 591 | * MAD data buffer before posting the send. | 592 | * MAD data buffer before posting the send. |
| 592 | * | 593 | * |
| 593 | * The returned data buffer will be cleared. Users are responsible for | 594 | * The returned MAD header, class specific headers, and any padding will be |
| 594 | * initializing the common MAD and any class specific headers. If @rmpp_active | 595 | * cleared. Users are responsible for initializing the common MAD header, |
| 595 | * is set, the RMPP header will be initialized for sending. | 596 | * any class specific header, and MAD data area. |
| 597 | * If @rmpp_active is set, the RMPP header will be initialized for sending. | ||
| 596 | */ | 598 | */ |
| 597 | struct ib_mad_send_buf * ib_create_send_mad(struct ib_mad_agent *mad_agent, | 599 | struct ib_mad_send_buf * ib_create_send_mad(struct ib_mad_agent *mad_agent, |
| 598 | u32 remote_qpn, u16 pkey_index, | 600 | u32 remote_qpn, u16 pkey_index, |
| @@ -601,6 +603,16 @@ struct ib_mad_send_buf * ib_create_send_mad(struct ib_mad_agent *mad_agent, | |||
| 601 | gfp_t gfp_mask); | 603 | gfp_t gfp_mask); |
| 602 | 604 | ||
| 603 | /** | 605 | /** |
| 606 | * ib_get_rmpp_segment - returns the data buffer for a given RMPP segment. | ||
| 607 | * @send_buf: Previously allocated send data buffer. | ||
| 608 | * @seg_num: number of segment to return | ||
| 609 | * | ||
| 610 | * This routine returns a pointer to the data buffer of an RMPP MAD. | ||
| 611 | * Users must provide synchronization to @send_buf around this call. | ||
| 612 | */ | ||
| 613 | void *ib_get_rmpp_segment(struct ib_mad_send_buf *send_buf, int seg_num); | ||
| 614 | |||
| 615 | /** | ||
| 604 | * ib_free_send_mad - Returns data buffers used to send a MAD. | 616 | * ib_free_send_mad - Returns data buffers used to send a MAD. |
| 605 | * @send_buf: Previously allocated send data buffer. | 617 | * @send_buf: Previously allocated send data buffer. |
| 606 | */ | 618 | */ |
