Lines Matching +full:device +full:- +full:id
3 * Copyright (c) 2005-2006 Intel Corporation. All rights reserved.
15 * - Redistributions of source code must retain the above
19 * - Redistributions in binary form must reproduce the above
33 * $Id$
67 return -1; in ERR()
81 hdr->cmd = type; \
82 hdr->in = sizeof(*cmd); \
83 hdr->out = sizeof(*resp); \
88 cmd->response = (uintptr_t)resp;\
101 hdr->cmd = type; \
102 hdr->in = sizeof(*cmd); \
103 hdr->out = 0; \
108 struct ib_cm_id id; member
131 return -1; in check_abi_version()
157 return -1; in ucm_get_dev_index()
170 return -1; in ucm_get_dev_index()
182 index = ucm_get_dev_index(device_context->device->name); in ib_cm_open_device()
190 dev->device_context = device_context; in ib_cm_open_device()
196 dev->fd = open(dev_path, O_RDWR); in ib_cm_open_device()
197 if (dev->fd < 0) in ib_cm_open_device()
210 void ib_cm_close_device(struct ib_cm_device *device) in ib_cm_close_device() argument
212 close(device->fd); in ib_cm_close_device()
213 free(device); in ib_cm_close_device()
218 pthread_cond_destroy(&cm_id_priv->cond); in ib_cm_free_id()
219 pthread_mutex_destroy(&cm_id_priv->mut); in ib_cm_free_id()
223 static struct cm_id_private *ib_cm_alloc_id(struct ib_cm_device *device, in ib_cm_alloc_id() argument
233 cm_id_priv->id.device = device; in ib_cm_alloc_id()
234 cm_id_priv->id.context = context; in ib_cm_alloc_id()
235 if (pthread_mutex_init(&cm_id_priv->mut, NULL)) in ib_cm_alloc_id()
237 if (pthread_cond_init(&cm_id_priv->cond, NULL)) in ib_cm_alloc_id()
246 int ib_cm_create_id(struct ib_cm_device *device, in ib_cm_create_id() argument
256 cm_id_priv = ib_cm_alloc_id(device, context); in ib_cm_create_id()
261 cmd->uid = (uintptr_t) cm_id_priv; in ib_cm_create_id()
263 result = write(device->fd, msg, size); in ib_cm_create_id()
269 cm_id_priv->id.handle = resp->id; in ib_cm_create_id()
270 *cm_id = &cm_id_priv->id; in ib_cm_create_id()
287 cmd->id = cm_id->handle; in ib_cm_destroy_id()
289 result = write(cm_id->device->fd, msg, size); in ib_cm_destroy_id()
291 return (result >= 0) ? ERR(ENODATA) : -1; in ib_cm_destroy_id()
295 cm_id_priv = container_of(cm_id, struct cm_id_private, id); in ib_cm_destroy_id()
297 pthread_mutex_lock(&cm_id_priv->mut); in ib_cm_destroy_id()
298 while (cm_id_priv->events_completed < resp->events_reported) in ib_cm_destroy_id()
299 pthread_cond_wait(&cm_id_priv->cond, &cm_id_priv->mut); in ib_cm_destroy_id()
300 pthread_mutex_unlock(&cm_id_priv->mut); in ib_cm_destroy_id()
318 cmd->id = cm_id->handle; in ib_cm_attr_id()
320 result = write(cm_id->device->fd, msg, size); in ib_cm_attr_id()
322 return (result >= 0) ? ERR(ENODATA) : -1; in ib_cm_attr_id()
326 param->service_id = resp->service_id; in ib_cm_attr_id()
327 param->service_mask = resp->service_mask; in ib_cm_attr_id()
328 param->local_id = resp->local_id; in ib_cm_attr_id()
329 param->remote_id = resp->remote_id; in ib_cm_attr_id()
347 cmd->id = cm_id->handle; in ib_cm_init_qp_attr()
348 cmd->qp_state = qp_attr->qp_state; in ib_cm_init_qp_attr()
350 result = write(cm_id->device->fd, msg, size); in ib_cm_init_qp_attr()
356 *qp_attr_mask = resp->qp_attr_mask; in ib_cm_init_qp_attr()
372 cmd->id = cm_id->handle; in ib_cm_listen()
373 cmd->service_id = service_id; in ib_cm_listen()
374 cmd->service_mask = service_mask; in ib_cm_listen()
376 result = write(cm_id->device->fd, msg, size); in ib_cm_listen()
378 return (result >= 0) ? ERR(ENODATA) : -1; in ib_cm_listen()
392 if (!param || !param->primary_path) in ib_cm_send_req()
396 cmd->id = cm_id->handle; in ib_cm_send_req()
397 cmd->qpn = param->qp_num; in ib_cm_send_req()
398 cmd->qp_type = param->qp_type; in ib_cm_send_req()
399 cmd->psn = param->starting_psn; in ib_cm_send_req()
400 cmd->sid = param->service_id; in ib_cm_send_req()
401 cmd->peer_to_peer = param->peer_to_peer; in ib_cm_send_req()
402 cmd->responder_resources = param->responder_resources; in ib_cm_send_req()
403 cmd->initiator_depth = param->initiator_depth; in ib_cm_send_req()
404 cmd->remote_cm_response_timeout = param->remote_cm_response_timeout; in ib_cm_send_req()
405 cmd->flow_control = param->flow_control; in ib_cm_send_req()
406 cmd->local_cm_response_timeout = param->local_cm_response_timeout; in ib_cm_send_req()
407 cmd->retry_count = param->retry_count; in ib_cm_send_req()
408 cmd->rnr_retry_count = param->rnr_retry_count; in ib_cm_send_req()
409 cmd->max_cm_retries = param->max_cm_retries; in ib_cm_send_req()
410 cmd->srq = param->srq; in ib_cm_send_req()
412 ibv_copy_path_rec_to_kern(&p_path, param->primary_path); in ib_cm_send_req()
413 cmd->primary_path = (uintptr_t) &p_path; in ib_cm_send_req()
415 if (param->alternate_path) { in ib_cm_send_req()
420 ibv_copy_path_rec_to_kern(a_path, param->alternate_path); in ib_cm_send_req()
421 cmd->alternate_path = (uintptr_t) a_path; in ib_cm_send_req()
424 if (param->private_data && param->private_data_len) { in ib_cm_send_req()
425 cmd->data = (uintptr_t) param->private_data; in ib_cm_send_req()
426 cmd->len = param->private_data_len; in ib_cm_send_req()
429 result = write(cm_id->device->fd, msg, size); in ib_cm_send_req()
431 return (result >= 0) ? ERR(ENODATA) : -1; in ib_cm_send_req()
447 cmd->uid = (uintptr_t) container_of(cm_id, struct cm_id_private, id); in ib_cm_send_rep()
448 cmd->id = cm_id->handle; in ib_cm_send_rep()
449 cmd->qpn = param->qp_num; in ib_cm_send_rep()
450 cmd->psn = param->starting_psn; in ib_cm_send_rep()
451 cmd->responder_resources = param->responder_resources; in ib_cm_send_rep()
452 cmd->initiator_depth = param->initiator_depth; in ib_cm_send_rep()
453 cmd->target_ack_delay = param->target_ack_delay; in ib_cm_send_rep()
454 cmd->failover_accepted = param->failover_accepted; in ib_cm_send_rep()
455 cmd->flow_control = param->flow_control; in ib_cm_send_rep()
456 cmd->rnr_retry_count = param->rnr_retry_count; in ib_cm_send_rep()
457 cmd->srq = param->srq; in ib_cm_send_rep()
459 if (param->private_data && param->private_data_len) { in ib_cm_send_rep()
460 cmd->data = (uintptr_t) param->private_data; in ib_cm_send_rep()
461 cmd->len = param->private_data_len; in ib_cm_send_rep()
464 result = write(cm_id->device->fd, msg, size); in ib_cm_send_rep()
466 return (result >= 0) ? ERR(ENODATA) : -1; in ib_cm_send_rep()
482 cmd->id = cm_id->handle; in cm_send_private_data()
485 cmd->data = (uintptr_t) private_data; in cm_send_private_data()
486 cmd->len = private_data_len; in cm_send_private_data()
489 result = write(cm_id->device->fd, msg, size); in cm_send_private_data()
491 return (result >= 0) ? ERR(ENODATA) : -1; in cm_send_private_data()
527 __u32 id; in cm_establish() member
536 cmd->id = cm_id->handle; in cm_establish()
538 result = write(cm_id->device->fd, msg, size); in cm_establish()
540 return (result >= 0) ? ERR(ENODATA) : -1; in cm_establish()
560 cmd->id = cm_id->handle; in ib_cm_notify()
561 cmd->event = event; in ib_cm_notify()
563 result = write(cm_id->device->fd, msg, size); in ib_cm_notify()
565 return (result >= 0) ? ERR(ENODATA) : -1; in ib_cm_notify()
584 cmd->id = cm_id->handle; in cm_send_status()
585 cmd->status = status; in cm_send_status()
588 cmd->data = (uintptr_t) private_data; in cm_send_status()
589 cmd->data_len = private_data_len; in cm_send_status()
593 cmd->info = (uintptr_t) info; in cm_send_status()
594 cmd->info_len = info_length; in cm_send_status()
597 result = write(cm_id->device->fd, msg, size); in cm_send_status()
599 return (result >= 0) ? ERR(ENODATA) : -1; in cm_send_status()
639 cmd->id = cm_id->handle; in ib_cm_send_mra()
640 cmd->timeout = service_timeout; in ib_cm_send_mra()
643 cmd->data = (uintptr_t) private_data; in ib_cm_send_mra()
644 cmd->len = private_data_len; in ib_cm_send_mra()
647 result = write(cm_id->device->fd, msg, size); in ib_cm_send_mra()
666 cmd->id = cm_id->handle; in ib_cm_send_lap()
669 cmd->path = (uintptr_t) &abi_path; in ib_cm_send_lap()
672 cmd->data = (uintptr_t) private_data; in ib_cm_send_lap()
673 cmd->len = private_data_len; in ib_cm_send_lap()
676 result = write(cm_id->device->fd, msg, size); in ib_cm_send_lap()
678 return (result >= 0) ? ERR(ENODATA) : -1; in ib_cm_send_lap()
692 if (!param || !param->path) in ib_cm_send_sidr_req()
696 cmd->id = cm_id->handle; in ib_cm_send_sidr_req()
697 cmd->sid = param->service_id; in ib_cm_send_sidr_req()
698 cmd->timeout = param->timeout_ms; in ib_cm_send_sidr_req()
699 cmd->max_cm_retries = param->max_cm_retries; in ib_cm_send_sidr_req()
701 ibv_copy_path_rec_to_kern(&abi_path, param->path); in ib_cm_send_sidr_req()
702 cmd->path = (uintptr_t) &abi_path; in ib_cm_send_sidr_req()
704 if (param->private_data && param->private_data_len) { in ib_cm_send_sidr_req()
705 cmd->data = (uintptr_t) param->private_data; in ib_cm_send_sidr_req()
706 cmd->len = param->private_data_len; in ib_cm_send_sidr_req()
709 result = write(cm_id->device->fd, msg, size); in ib_cm_send_sidr_req()
728 cmd->id = cm_id->handle; in ib_cm_send_sidr_rep()
729 cmd->qpn = param->qp_num; in ib_cm_send_sidr_rep()
730 cmd->qkey = param->qkey; in ib_cm_send_sidr_rep()
731 cmd->status = param->status; in ib_cm_send_sidr_rep()
733 if (param->private_data && param->private_data_len) { in ib_cm_send_sidr_rep()
734 cmd->data = (uintptr_t) param->private_data; in ib_cm_send_sidr_rep()
735 cmd->data_len = param->private_data_len; in ib_cm_send_sidr_rep()
738 if (param->info && param->info_length) { in ib_cm_send_sidr_rep()
739 cmd->info = (uintptr_t) param->info; in ib_cm_send_sidr_rep()
740 cmd->info_len = param->info_length; in ib_cm_send_sidr_rep()
743 result = write(cm_id->device->fd, msg, size); in ib_cm_send_sidr_rep()
745 return (result >= 0) ? ERR(ENODATA) : -1; in ib_cm_send_sidr_rep()
753 ureq->remote_ca_guid = kreq->remote_ca_guid; in cm_event_req_get()
754 ureq->remote_qkey = kreq->remote_qkey; in cm_event_req_get()
755 ureq->remote_qpn = kreq->remote_qpn; in cm_event_req_get()
756 ureq->qp_type = kreq->qp_type; in cm_event_req_get()
757 ureq->starting_psn = kreq->starting_psn; in cm_event_req_get()
758 ureq->responder_resources = kreq->responder_resources; in cm_event_req_get()
759 ureq->initiator_depth = kreq->initiator_depth; in cm_event_req_get()
760 ureq->local_cm_response_timeout = kreq->local_cm_response_timeout; in cm_event_req_get()
761 ureq->flow_control = kreq->flow_control; in cm_event_req_get()
762 ureq->remote_cm_response_timeout = kreq->remote_cm_response_timeout; in cm_event_req_get()
763 ureq->retry_count = kreq->retry_count; in cm_event_req_get()
764 ureq->rnr_retry_count = kreq->rnr_retry_count; in cm_event_req_get()
765 ureq->srq = kreq->srq; in cm_event_req_get()
766 ureq->port = kreq->port; in cm_event_req_get()
768 ibv_copy_path_rec_from_kern(ureq->primary_path, &kreq->primary_path); in cm_event_req_get()
769 if (ureq->alternate_path) in cm_event_req_get()
770 ibv_copy_path_rec_from_kern(ureq->alternate_path, in cm_event_req_get()
771 &kreq->alternate_path); in cm_event_req_get()
777 urep->remote_ca_guid = krep->remote_ca_guid; in cm_event_rep_get()
778 urep->remote_qkey = krep->remote_qkey; in cm_event_rep_get()
779 urep->remote_qpn = krep->remote_qpn; in cm_event_rep_get()
780 urep->starting_psn = krep->starting_psn; in cm_event_rep_get()
781 urep->responder_resources = krep->responder_resources; in cm_event_rep_get()
782 urep->initiator_depth = krep->initiator_depth; in cm_event_rep_get()
783 urep->target_ack_delay = krep->target_ack_delay; in cm_event_rep_get()
784 urep->failover_accepted = krep->failover_accepted; in cm_event_rep_get()
785 urep->flow_control = krep->flow_control; in cm_event_rep_get()
786 urep->rnr_retry_count = krep->rnr_retry_count; in cm_event_rep_get()
787 urep->srq = krep->srq; in cm_event_rep_get()
793 urep->status = krep->status; in cm_event_sidr_rep_get()
794 urep->qkey = krep->qkey; in cm_event_sidr_rep_get()
795 urep->qpn = krep->qpn; in cm_event_sidr_rep_get()
798 int ib_cm_get_event(struct ib_cm_device *device, struct ib_cm_event **event) in ib_cm_get_event() argument
824 hdr->cmd = IB_USER_CM_CMD_EVENT; in ib_cm_get_event()
825 hdr->in = sizeof(*cmd); in ib_cm_get_event()
826 hdr->out = sizeof(*resp); in ib_cm_get_event()
834 cmd->response = (uintptr_t) resp; in ib_cm_get_event()
835 cmd->data_len = (uint8_t)(~0U); in ib_cm_get_event()
836 cmd->info_len = (uint8_t)(~0U); in ib_cm_get_event()
838 data = malloc(cmd->data_len); in ib_cm_get_event()
844 info = malloc(cmd->info_len); in ib_cm_get_event()
850 cmd->data = (uintptr_t) data; in ib_cm_get_event()
851 cmd->info = (uintptr_t) info; in ib_cm_get_event()
853 result = write(device->fd, msg, size); in ib_cm_get_event()
855 result = (result >= 0) ? ERR(ENODATA) : -1; in ib_cm_get_event()
870 evt->cm_id = (void *) (uintptr_t) resp->uid; in ib_cm_get_event()
871 evt->event = resp->event; in ib_cm_get_event()
873 if (resp->present & IB_UCM_PRES_PRIMARY) { in ib_cm_get_event()
881 if (resp->present & IB_UCM_PRES_ALTERNATE) { in ib_cm_get_event()
889 switch (evt->event) { in ib_cm_get_event()
891 evt->param.req_rcvd.listen_id = evt->cm_id; in ib_cm_get_event()
892 cm_id_priv = ib_cm_alloc_id(evt->cm_id->device, in ib_cm_get_event()
893 evt->cm_id->context); in ib_cm_get_event()
898 cm_id_priv->id.handle = resp->id; in ib_cm_get_event()
899 evt->cm_id = &cm_id_priv->id; in ib_cm_get_event()
900 evt->param.req_rcvd.primary_path = path_a; in ib_cm_get_event()
901 evt->param.req_rcvd.alternate_path = path_b; in ib_cm_get_event()
904 cm_event_req_get(&evt->param.req_rcvd, &resp->u.req_resp); in ib_cm_get_event()
907 cm_event_rep_get(&evt->param.rep_rcvd, &resp->u.rep_resp); in ib_cm_get_event()
910 evt->param.mra_rcvd.service_timeout = resp->u.mra_resp.timeout; in ib_cm_get_event()
913 evt->param.rej_rcvd.reason = resp->u.rej_resp.reason; in ib_cm_get_event()
914 evt->param.rej_rcvd.ari = info; in ib_cm_get_event()
918 evt->param.lap_rcvd.alternate_path = path_b; in ib_cm_get_event()
920 ibv_copy_path_rec_from_kern(evt->param.lap_rcvd.alternate_path, in ib_cm_get_event()
921 &resp->u.lap_resp.path); in ib_cm_get_event()
924 evt->param.apr_rcvd.ap_status = resp->u.apr_resp.status; in ib_cm_get_event()
925 evt->param.apr_rcvd.apr_info = info; in ib_cm_get_event()
929 evt->param.sidr_req_rcvd.listen_id = evt->cm_id; in ib_cm_get_event()
930 cm_id_priv = ib_cm_alloc_id(evt->cm_id->device, in ib_cm_get_event()
931 evt->cm_id->context); in ib_cm_get_event()
936 cm_id_priv->id.handle = resp->id; in ib_cm_get_event()
937 evt->cm_id = &cm_id_priv->id; in ib_cm_get_event()
938 evt->param.sidr_req_rcvd.pkey = resp->u.sidr_req_resp.pkey; in ib_cm_get_event()
939 evt->param.sidr_req_rcvd.port = resp->u.sidr_req_resp.port; in ib_cm_get_event()
942 cm_event_sidr_rep_get(&evt->param.sidr_rep_rcvd, in ib_cm_get_event()
943 &resp->u.sidr_rep_resp); in ib_cm_get_event()
944 evt->param.sidr_rep_rcvd.info = info; in ib_cm_get_event()
948 evt->param.send_status = resp->u.send_status; in ib_cm_get_event()
952 if (resp->present & IB_UCM_PRES_DATA) { in ib_cm_get_event()
953 evt->private_data = data; in ib_cm_get_event()
982 if (event->private_data) in ib_cm_ack_event()
983 free(event->private_data); in ib_cm_ack_event()
985 cm_id_priv = container_of(event->cm_id, struct cm_id_private, id); in ib_cm_ack_event()
987 switch (event->event) { in ib_cm_ack_event()
989 cm_id_priv = container_of(event->param.req_rcvd.listen_id, in ib_cm_ack_event()
990 struct cm_id_private, id); in ib_cm_ack_event()
991 free(event->param.req_rcvd.primary_path); in ib_cm_ack_event()
992 if (event->param.req_rcvd.alternate_path) in ib_cm_ack_event()
993 free(event->param.req_rcvd.alternate_path); in ib_cm_ack_event()
996 if (event->param.rej_rcvd.ari) in ib_cm_ack_event()
997 free(event->param.rej_rcvd.ari); in ib_cm_ack_event()
1000 free(event->param.lap_rcvd.alternate_path); in ib_cm_ack_event()
1003 if (event->param.apr_rcvd.apr_info) in ib_cm_ack_event()
1004 free(event->param.apr_rcvd.apr_info); in ib_cm_ack_event()
1007 cm_id_priv = container_of(event->param.sidr_req_rcvd.listen_id, in ib_cm_ack_event()
1008 struct cm_id_private, id); in ib_cm_ack_event()
1011 if (event->param.sidr_rep_rcvd.info) in ib_cm_ack_event()
1012 free(event->param.sidr_rep_rcvd.info); in ib_cm_ack_event()
1017 pthread_mutex_lock(&cm_id_priv->mut); in ib_cm_ack_event()
1018 cm_id_priv->events_completed++; in ib_cm_ack_event()
1019 pthread_cond_signal(&cm_id_priv->cond); in ib_cm_ack_event()
1020 pthread_mutex_unlock(&cm_id_priv->mut); in ib_cm_ack_event()