ibti_common.h revision 9c468ea9d266203f8dac0165f60fc9b92d8aead3
2N/A * The contents of this file are subject to the terms of the 2N/A * Common Development and Distribution License (the "License"). 2N/A * You may not use this file except in compliance with the License. 2N/A * See the License for the specific language governing permissions 2N/A * and limitations under the License. 2N/A * When distributing Covered Code, include this CDDL HEADER in each 2N/A * If applicable, add the following below this CDDL HEADER, with the 2N/A * fields enclosed by brackets "[]" replaced with your own identifying 2N/A * information: Portions Copyright [yyyy] [name of copyright owner] 2N/A * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 2N/A * Use is subject to license terms. 2N/A * Max number of paths that can be requested in an ibt_get_paths() call, 2N/A * if IBT_PATH_PERF or IBT_PATH_AVAIL flag (ibt_path_flags_t) is set. 2N/A * The name of DDI Event, generated when the properties of IOC device 2N/A * node properties were modified. 2N/A/* Transport Interface version */ 2N/A * Driver class type. Identifies a type of client driver so that 2N/A * "IBTF Policy" decisions can be made on a driver class basis. 2N/A * The last class should always be IBT_CLNT_NUM, and any new classes added 2N/A * must be defined before IBT_CLNT_NUM. The class values must be above 0. 2N/A * Any class values below or equal to 0 shall be invalid 2N/A /* client H/W, e.g., IPoIB */ 2N/A /* associated with client H/W */ 2N/A IBT_USER,
/* A user application IBT interface driver */ 2N/A * These are some special client classes which don't have a 'dip' hence have 2N/A * to be handled specially in ibt_attach, where we bypass the check for a valid 2N/A * dip if the client belongs to the class below. 2N/A * Event record & status returns for asynchronous events and errors. * IBT Client Callback function typedefs. * Pointer to an async event/error handler function. This function is * called when an async event/error is detected on a HCA that is being * used by the IBT client driver that registered the function. * IBT Client Memory Error Callback function typedefs. * Pointer to an memory event/error handler function. * Define a client module information structure. All clients MUST * define a global of type ibt_clnt_modinfo_t. A pointer to this global * is passed into the IBTF by a client when calling ibt_attach(). * This struct must persist during the life of the client. * The client's mi_async_handler is called when an async event/error is * detected on a HCA that is being used by this client. * Definitions for use with ibt_register_subnet_notices() * Qflags, used by ibt_resize_queues(). IBT_SEND_Q =
1 << 0,
/* Op applies to the Send Q */ IBT_RECV_Q =
1 <<
1 /* Op applies to the Recv Q */ * The IBTF will attempt to implement a coarse 3 level priority scheme * (IBT_CQ_LOW, IBT_CQ_MEDIUM, IBT_CQ_HIGH) based on the class of client * driver. The requested priority is not guaranteed. If a CI implementation * has the ability to implement priority CQs, then the IBTF will take advantage * of that when calling the CI to create a CQ by passing a priority indicator * Attributes when creating a Completion Queue Scheduling Handle. * Pointer to a work request completion handler function. This function * is called when a WR completes on a CQ that is being used by the IBTF * client driver that registered the function. /* default CQ handler ID */ * Service Data and flags. * (IBTA Spec Release 1.1, Vol-1 Ref: 15.2.5.14.4) * The ServiceData8.1 (sb_data8[0]) through ServiceData64.2 (sb_data64[1]) * components together constitutes a 64-byte area in which any data may be * placed. It is intended to be a convenient way for a service to provide its * clients with some initial data. * In addition, this 64-byte area is formally divided into a total of 30 * components, 16 8-bit (uint8_t) components, then 8 16-bit (uint16_t) * components, then 6 32-bit (uint32_t) components, then 2 64-bit (uint64_t) * components, thereby assigning ComponentMask bits (ibt_srv_data_flags_t) to * variously-sized segments of the data. All data are in host endian format. * This allows query operations (ibt_get_paths()) to be used which match * parts of the Service Data, making it possible, for example, for * service-specific parts of the ServiceData to serve as a binary-coded * extension to the ServiceName for purposes of lookup. * Path flags, used in ibt_get_paths() * The ibt_path_attr_t structure is used to specify required attributes in a * path from the requesting (source) node to a specified destination node. * Attributes that are don't care should be set to NULL or '0'. * A destination must be specified, where a destination can be defined as * o Service Name and Array of DGIDs. char *
pa_sname;
/* ASCII Service name */ * The ibt_get_paths() performs SA Path record lookups to select a path(s) to * a given destination(s), details of selected path(s) are returned in this * The ibt_path_info_t contains all the attributes of the best path(s), as * as determined by IBTL, to the specified destination(s), including the * local HCA and HCA port to use to access the fabric. * The Service ID (pi_sid) and Service Data (pi_sdata) are returned only for * lookups based on Service ID or/and Service Name. /* this record is invalid */ /* cep_hca_port_num is not */ * Optional Alternate Path attributes. * The ibt_alt_path_attr_t structure is used to specify additional optional * attributes when requesting an alternate path for an existing channel. * Attributes that are don't care should be set to NULL or '0'. * Path Information for Alternate Path - input to ibt_set_alt_path(). /* cep_hca_port_num is not */ * Open Channel flags, Used in ibt_open_rc_channel call * Arguments for ibt_open_rc_channel(). * oc_priv_data should be NULL or point to a buffer allocated by the caller, * the size of which should be in oc_priv_data_len, where oc_priv_data_len <= * When ibt_open_rc_channel returns with ibt_cm_reason_t of * IBT_CM_REDIRECT_PORT, the client can re-issue ibt_open_rc_channel setting * Set (ibt_chan_args_t)->oc_cm_cep_path = * original (ibt_chan_open_args_t)->oc_path->pi_prim_cep_path. * Set (ibt_chan_args_t)->oc_cm_pkt_lt = * original (ibt_chan_open_args_t)->oc_prim_pkt_lt. * Update (ibt_chan_args_t)->oc_path based on path information returned * from ibt_get_paths using the gid in the return data below: * (ibt_rc_returns_t)->rc_arej_info.ari_redirect_info.ari_gid. * Set flags to IBT_OCHAN_PORT_REDIRECTED. * Note : oc_cm_path is not used for any other scenario, and must be set for * IBT_OCHAN_PORT_REDIRECTED. * When ibt_open_rc_channel returns with ibt_cm_reason_t of * IBT_CM_REDIRECT_CM, the client can re-issue ibt_open_rc_channel setting * Update (ibt_chan_args_t)->oc_path based on path information returned * from ibt_get_paths using the return data in * (ibt_rc_returns_t)->rc_arej_info.ari_redirect_info. * Set (ibt_chan_args_t)->oc_cm_redirect_info = * Returned (ibt_rc_returns_t)->rc_arej_info.ari_redirect_info. * Set flags to IBT_OCHAN_REDIRECTED. * IBT_OCHAN_PORT_REDIRECTED flag cannot be used to specify a remote CM MAD * address, that is on a different subnet than the RC connection itself. * Not specified attributes should be set to "NULL" or "0". * Define an optional RC return arguments structure. This contains return * parameters from ibt_open_rc_channel() when called in BLOCKING mode. * rc_priv_data should be NULL or point to a buffer allocated by the caller, * the size of which should be in rc_priv_data_len, where rc_priv_data_len <= * Define a callback function that can be used in Non-Blocking calls to * Define an optional return arguments structure from ibt_set_alt_path() * This contains return parameters, when called in BLOCKING mode. * ap_priv_data should be NULL or point to a buffer allocated by the caller, * the size of which should be in ap_priv_data_len, where ap_priv_data_len <= * The private data from APR is returned in ap_priv_data. * The caller specifies amount of APR private data to be returned in * UD remote destination attributes. * ud_sid, ud_addr, ud_pkt_lt and ud_pkey_ix must be specified. * These values can be as returned in an ibt_path_info_t struct from an * ud_priv_data should be NULL or point to a buffer allocated by the caller, * the size of which is in ud_priv_data_len, where ud_priv_data_len <= * IBT_SIDR_REQ_PRIV_DATA_SZ. * Define an optional UD return arguments structure. * ud_priv_data should be NULL or point to a buffer allocated by the caller, * the size of which should be in ud_priv_data_len, where ud_priv_data_len <= * IBT_SIDR_REP_PRIV_DATA_SZ. * Multicast group attributes * Not specified attributes should be set to "NULL" or "0". * Used by ibt_join_mcg()/ibt_query_mcg(). * mc_qkey, mc_pkey, mc_flow, mc_tclass, mc_sl, mc_join_state are required for * create - ibt_join_mcg(). * Multicast group attributes. * returned by ibt_join_mcg()/ibt_query_mcg(). * Define a callback function that can be used in Non-Blocking calls to * Service Flags - sd_flags * IBT_SRV_PEER_TYPE_SID Peer-to-peer Service IDs. * Define a Service ID Registration structure. * Flag to indicate ibt_bind_service() to or NOT-to clean-up Stale matching * Local Service Records with SA prior to binding the new request. * Define a Service ID Binding structure (data for service records). char *
sb_name;
/* Service Name (up to 63 chars) */ /* matching local service records. */ * Refer to InfiniBand Architecture Release Volume 1 Rev 1.0a: * The payload for DDI events passed on IB_PROP_UPDATE_EVENT. * This is passed as the bus nexus data to event_handler(9e). * ibt_attach() and ibt_detach(): * These are the calls into IBTF used during client driver attach() and * The IBTF returns an ibt_clnt_hdl_t to the client. This handle is used * to identify this client device in all subsequent calls into the IBTF. * The ibt_detach() routine is called from a client driver's detach() * routine to deregister itself from the IBTF. * Returns the number of HCAs in a system and their node GUIDS. * If hca_list_p is not NULL then the memory for the array of GUIDs is * allocated by the IBTF and should be freed by the caller using * ibt_free_hca_list(). If hca_list_p is NULL then no memory is allocated * by ibt_get_hca_list and only the number of HCAs in a system is returned. * It is assumed that the caller can block in kmem_alloc. * Free the memory allocated by ibt_get_hca_list(). * ibt_close_hca() once. ibt_open_hca() takes a client's ibt handle * and a GUID and returns a unique IBT client HCA * These routines can not be called from interrupt context. * Returns the static attributes of the specified HCA * ibt_query_hca_ports_byguid() * ibt_query_hca_ports() allocates the memory required for the * ibt_hca_portinfo_t struct as well as the memory required for the SGID * and P_Key tables contained within that struct. * Frees the memory allocated for a specified ibt_hca_portinfo_t struct. * ibt_set_hca_private() - Set/get the client private data. * ibt_hca_handle_to_guid() * A helper function to retrieve HCA GUID for the specified handle. * Returns HCA GUID on which the specified Channel is allocated. Valid * if it is non-NULL on return. * ibt_hca_guid_to_handle() * A helper function to retrieve a hca handle from a HCA GUID. * Finds the best path to a specified destination (as determined by the * IBTL) that satisfies the requirements specified in an ibt_path_attr_t * Callback function that can be used in ibt_aget_paths(), a Non-Blocking * version of ibt_get_paths(). * Find path(s) to a given destination or service asynchronously. * ibt_aget_paths() is a Non-Blocking version of ibt_get_paths(). * Finds the best alternate path to a specified channel (as determined by * the IBTL) that satisfies the requirements specified in an * ibt_alt_path_attr_t struct. The specified channel must have been * previously opened successfully using ibt_open_rc_channel. * ibt_open_rc_channel() opens a previously allocated RC communication * channel. The IBTL initiates the channel establishment protocol. * Close the specified channel. Outstanding work requests are flushed * so that the client can do the associated clean up. After that, the * client will usually deregister the previously registered memory, * then free the channel by calling ibt_free_rc_channel(). * This function will reuse CM event Handler provided in * ibt_prime_close_rc_channel * Allocates resources required for a close rc channel operation. * Calling ibt_prime_close_rc_channel() allows a channel to be * subsequently closed in interrupt context. * A call is first made to ibt_prime_close_rc_channel in non-interrupt * context, followed by ibt_close_rc_channel in non-blocking mode from * ibt_prime_close_rc_channel() can only be called on a previously opened * Recycle a RC channel which has transitioned to Error state. The * ibt_recycle_rc() function transitions the channel from Error * state (IBT_STATE_ERROR) to the state ready for use by * ibt_open_rc_channel. Basically, this function is very similar to * ibt_alloc_rc_channel, but reuses an existing RC channel. * Clients are allowed to make resource clean up/free calls in the CM handler * Client(s) must not invoke blocking version (ie., func specified as NULL) of * ibt_recycle_rc from cm callback for IBT_CM_EVENT_CONN_CLOSED * Clients are strongly advised not to issue blocking calls from func, as this * would block the CM threads, and could delay or block other client connections * and ibtl related API invocations. * Recycle a UD channel which has transitioned to Error state. The * ibt_recycle_ud() function transitions the channel from Error * state (IBT_STATE_ERROR) to a usable state (IBT_STATE_RTS). * Basically, this function is very similar to ibt_alloc_ud_channel, * but reuses an existing UD channel. * MODIFY CHANNEL ATTRIBUTE FUNCTIONs. * Place the send queue of the specified channel into the send queue * Applicable for both RC and UD channels. * Applicable for both RC and UD channels. * Applicable for both RC and UD channels. * Applicable for RC channels only. * Change the number of resources to be used for incoming and outgoing * Change the primary physical port of an RC channel. (This is done only * if HCA supports this capability). Can only be called on a paused * Applicable for RC channels only. * SERVICE REGISTRATION FUNCTIONS * ibt_deregister_service() * ibt_unbind_all_services() * Bind a Service to a given port (GID), and optionally create * service record(s) with the SA for ibt_get_paths() to find. * extend its response time to a CM event. * Applicable for RC channels only. * An IBT client calls ibt_cm_proceed() to proceed with a connection that * previously deferred by the client returning IBT_CM_DEFER on a CM handler * callback. CM events that can be deferred and continued with ibt_cm_proceed() * are REQ_RCV, REP_RCV, LAP_RCV, and DREQ_RCV. * Typically CM completes processing of a client's CM handler return, with * IBT_CM_DEFER status, before processing of the corresponding ibt_cm_proceed() * is started. However a race exists where by CM may not have completed the * client's handler return processing when ibt_cm_proceed() is called by a * client. In this case ibt_cm_proceed() will block until processing of the * client's CM handler return is complete. * A client that returns IBT_CM_DEFER from the cm handler must * subsequently make a call to ibt_cm_proceed(). It is illegal to call * ibt_cm_proceed() on a channel that has not had the connection * establishment deferred. * Client cannot call ibt_cm_proceed from the cm handler. * An IBT client calls ibt_cm_ud_proceed() to proceed with an * IBT_CM_UD_EVENT_SIDR_REQ UD event that was previously deferred by the * client returning IBT_CM_DEFER on a CM UD handler callback. * Typically CM completes processing of a client's CM handler return, with * IBT_CM_DEFER status, before processing of the corresponding * ibt_cm_ud_proceed() is started. However a race exists where by CM may not * have completed the client's handler return processing when * ibt_cm_ud_proceed() is called by a client. In this case ibt_cm_ud_proceed() * will block until processing of the client's CM handler return is complete. * A client that returns IBT_CM_DEFER from the cm handler must * subsequently make a call to ibt_cm_ud_proceed(). It is illegal to call * ibt_cm_ud_proceed() on a channel that has not had the connection * establishment deferred. * Client cannot call ibt_cm_ud_proceed from the cm handler. * Reserve CQ scheduling class resources * Free CQ scheduling class resources * Allocate a completion queue. * Free allocated CQ resources. * Enable notification requests on the specified CQ. * Applicable for both RC and UD channels. * Completion notifications are disabled by setting the completion * handler to NULL by calling ibt_set_cq_handler(). * Register a work request completion handler with the IBTF. * Applicable for both RC and UD channels. * Completion notifications are disabled by setting the completion * handler to NULL. When setting the handler to NULL, no additional * calls to the CQ handler will be initiated. * This function does not otherwise change the state of previous * calls to ibt_enable_cq_notify(). * Poll the specified CQ for the completion of work requests (WRs). * If the CQ contains completed WRs, up to num_wc of them are returned. * Applicable for both RC and UD channels. * Return the total number of entries in the CQ. * Change the size of a CQ. * Change the interrupt moderation values of a CQ. * "count" is number of completions before interrupting. * "usec" is the number of microseconds before interrupting. * Set/get the client private data. * Memory Management Functions. * Applicable for both RC and UD channels. * Prepares a virtually addressed memory region for use by a HCA. A * description of the registered memory suitable for use in Work Requests * (WRs) is returned in the ibt_mr_desc_t parameter. * Prepares a memory region described by a buf(9S) struct for use by a * HCA. A description of the registered memory suitable for use in * Work Requests (WRs) is returned in the ibt_mr_desc_t parameter. * Retrieves information about a specified memory region. * Remove a memory region from a HCA translation table, and free all * resources associated with the memory region. * Modify the attributes of an existing memory region. * ibt_register_shared_mr() * Given an existing memory region, a new memory region associated with * the same physical locations is created. * Sync a memory region for either RDMA reads or RDMA writes * Allocate a memory window. * Retrieves information about a specified memory window. * De-allocate the Memory Window. * Allocates physical buffer list resources for use in memory * Applicable for both RC and UD channels. * Physical Memory Management Functions. * Applicable for both RC and UD channels. * Prepares a physically addressed memory region for use by a HCA. * ibt_reregister_phys_mr() * Modify the attributes of an existing memory region. * Translate a kernel virtual address range into HCA physical addresses. * A set of physical addresses, that can be used with "Reserved L_Key", * register physical, and "Fast Registration Work Request" operations * Un pin physical pages pinned during an ibt_map_mem_area() call. /* ibt_unmap_mem_iov() */ * Applicable for RC and UD channels. * Post send work requests to the specified channel. * Post receive work requests to the specified channel. * Alternate Path Migration Functions. * Applicable for RC channels only. * Finds the best alternate path to a specified channel (as determined by * the IBTL) that satisfies the requirements specified in an * ibt_alt_path_attr_t struct. The specified channel must have been * previously opened successfully using ibt_open_rc_channel. * This function also ensures that the service being accessed by the * channel is available at the selected alternate port. * Note: The apa_dgid must be on the same destination channel adapter, * Load the specified alternate path. Causes the CM to send an LAP message * to the remote node. If successful, the local channel is updated with * the new alternate path and the channel migration state is set to REARM. * Can only be called on a previously opened RC channel. The channel must * be either in RTS or paused state. * Force the CI to use the alternate path. The alternate path becomes * the primary path. A new alternate path should be loaded and enabled. * Multicast group Functions. * Applicable for UD channels only. * Attaches a UD channel to the specified multicast group. On successful * completion, this channel will be provided with a copy of every * multicast message addressed to the group specified by the MGID * (mcg_info->mc_adds_vect.av_dgid) and received on the HCA port with * which the channel is associated. * Detach the specified UD channel from the specified multicast group. * Join a multicast group. The first full member "join" causes the MCG * The port associated with the port GID shall be removed from the * multicast group specified by MGID (mc_gid) or from all the multicast * groups of which it is a member if the MGID (mc_gid) is not specified * (i.e. mc_gid.mgid_prefix must have 8-bits of 11111111 at the start of * the GID to identify this as being a multicast GID). * The last full member to leave causes the destruction of the Multicast * Request information on multicast groups that match the parameters * specified in mcg_attr. Information on each multicast group is returned * to the caller in the form of an array of ibt_mcg_info_t. * ibt_query_mcg() allocates the memory for this array and returns a * pointer to the array (mcgs_p) and the number of entries in the array * (entries_p). This memory should be freed by the client using * Free the memory allocated by successful ibt_query_mcg() * ibt_register_subnet_notices() * Register a handler to be called for subnet notifications. * Protection Domain Functions. * P_Key to P_Key Index conversion Functions. * ibt_pkey2index Convert a P_Key into a P_Key index. * ibt_index2pkey Convert a P_Key Index into a P_Key. * Pass CI specific userland data for CI objects to the CI. * Obtain CI specific userland data for CI objects. /* Node type : n_node_type */ * Retrieve node information for the specified GID. * Reprobe properties for IOC device node. * ibt_get_companion_port_gids() * Get list of GID's available on a companion port(s) of the specified * GID or list of GIDs available on a specified Node GUID/System Image * Allocate a shared receive queue. * Free allocated SRQ resources. * Query a shared receive queue. * Modify a shared receive queue. * Set/get the SRQ client private data. * Function to test for special case failures * ibt_hw_is_present() returns 0 when there is no IB hardware actively * running. This is primarily useful for modules like rpcmod which needs a * quick check to decide whether or not it should try to use InfiniBand. * Fast Memory Registration (FMR). * ibt_create_fmr_pool() verifies that the HCA supports FMR and allocates * and initializes an "FMR pool". This pool contains state specific to * this registration, including the watermark setting to determine when * to sync, and the total number of FMR regions available within this pool. * ibt_destroy_fmr_pool() deallocates all of the FMR regions in a specific * pool. All state and information regarding the pool are destroyed and * returned as free space once again. No more use of FMR regions in this * pool are possible without a subsequent call to ibt_create_fmr_pool(). * ibt_flush_fmr_pool forces a flush to occur. At the client's request, * any unmapped FMR regions (See 'ibt_deregister_mr())') are returned to * a free state. This function allows for an asynchronous cleanup of * formerly used FMR regions. Sync operation is also performed internally * by HCA driver, when 'watermark' settings for the number of free FMR * regions left in the "pool" is reached. * ibt_register_physical_fmr * ibt_register_physical_fmr() assigns a "free" entry from the FMR Pool. * It first consults the "FMR cache" to see if this is a duplicate memory * registration to something already in use. If not, then a free entry * in the "pool" is marked used. * The ibt_deregister_fmr un-maps the resources reserved from the FMR * pool by ibt_register_physical_fmr(). The ibt_deregister_fmr() will * mark the region as free in the FMR Pool. * Returns an array (or single) of paths and source IP addresses. In the * simplest form just the destination IP address is specified, and one path * is requested, then one ibt_path_info_t struct and one source IP. * More than one path can be requested to a single destination, in which case * the requested number of ibt_path_info_t's are returned, and the same * number of SRC IP address, with the first SRC IP address corrosponding * to the first ibt_path_info_t, etc. * Restrictions on the source end point can be specified, in the form of a * source IP address (this implicitly defines the HCA, HCA port and Pkey) * HCA, HCA port, and sgid (implicitly defines HCA and HCA port). * Combinations are allowed but they must be consistent. * Path attributes can also be specified, these can also affect local HCA * ibt_get_ip_paths() internally does (among other things): * o ibt_get_list_of_ibd_ipaddr_and_macaddr( OUT list_ipaddr_macaddr) * o extract_pkey_and_sgid(IN list_ipaddr_macaddr, OUT list_pkey_and_sgid) * o map_dst_ip_addr(IN dst_ip_addr, OUT dst_pkey, OUT dgid) - See Note * o filter_by_pkey(IN list_pkey_and_sgid, IN dst_pkey, OUT list_of_sgid) * o do_multipath_query(IN list_of_sgid, IN dst_pkey, IN dgid, OUT path_list) * o pick_a_good_path(IN path_list, OUT the_path) * o find_matching_src_ip(IN the_path, IN list_ipaddr_macaddr, OUT src_ip) * The ibd instance which got the ARP response is only on one P_Key * knowing the ibd instance (or which IPonIB MCG) got the ARP response * determins the P_Key associated with a dgid. If the proposedi "ip2mac()" * API is used to get an IP to GID translations, then returned 'sockaddr_dl' * contains the interface name and index. * ip_path_attr.ipa_dst_ip = dst_ip_addr; * ip_path_attr.ipa_ndst = 1; * ip_path_attr.ipa_max_paths = 1; * status = ibt_get_ip_paths(clnt_hdl, flags, &ip_path_attr, &paths, * &num_paths_p, &src_ip); * sid = ibt_get_ip_sid(protocol_num, dst_port); * ip_cm_info.dst_addr = dst_ip_addr; * ibt_format_ip_private_data(ip_cm_info, priv_data_len, &priv_data); * ibt_open_rc_channel(chan, private_data); * Callback function that can be used in ibt_aget_ip_paths(), a Non-Blocking * version of ibt_get_ip_paths(). * Find path(s) to a given destination or service asynchronously. * ibt_aget_ip_paths() is a Non-Blocking version of ibt_get_ip_paths(). * IP RDMA protocol functions * IBTF manages the port number space for non well known ports. If a ULP * is not using TCP/UDP and a well known port, then ibt_get_ip_sid() returns * an sid based on the IP protocol number '0' (reserved) and an IBTF assigned * port number. ibt_release_ip_sid() should be used to release the hold * of SID created by ibt_get_ip_sid(). * If a ULP is using IP addressing as defined by the RDMA IP CM Service IBTA * Annex 11, then it must always allocate a private data buffer for use in * the ibt_open_rc_channel(9F) call. The minimum size of the buffer is * IBT_IP_HDR_PRIV_DATA_SZ, if the ULP has no ULP specific private data. * This allows ibt_format_ip_private_data() to place the RDMA IP CM service * hello message in the private data of the REQ. If the ULP has some ULP * specific private data then it should allocate a buffer big enough to * contain that data plus an additional IBT_IP_HDR_PRIV_DATA_SZ bytes. * The ULP should place its ULP specific private data at offset * IBT_IP_HDR_PRIV_DATA_SZ in the allocated buffer before calling * ibt_format_ip_private_data(). * The ibt_alt_ip_path_attr_t structure is used to specify additional optional * attributes when requesting an alternate path for an existing channel. * Attributes that are don't care should be set to NULL or '0'. * CONTRACT PRIVATE ONLY INTERFACES * DO NOT USE THE FOLLOWING FUNCTIONS WITHOUT SIGNING THE CONTRACT /* Define an Address Record structure (data for ATS service records). */ * Query the SA for Address Records matching either GID/P_Key or Data. * ibt_modify_system_image() * ibt_modify_system_image_byguid() * Modify specified HCA's system image GUID. * ibt_modify_port_byguid() * Modify the specified port, or all ports attribute(s). * ibt_get_port_state_byguid() * Return the most commonly requested attributes of an HCA port. * If the link state is not IBT_PORT_ACTIVE, the other returned values * Allocate and deallocate dma-able memory. #
endif /* _SYS_IB_IBTL_IBTI_COMMON_H */