@@ -669,7 +669,7 @@ static int rpmsg_virtio_ns_callback(struct rpmsg_endpoint *ept, void *data,
669669 */
670670 ept_to_release = _ept && _ept -> release_cb ;
671671
672- if (ns_msg -> flags & RPMSG_NS_DESTROY ) {
672+ if (ns_msg -> flags == RPMSG_NS_DESTROY ) {
673673 if (_ept )
674674 _ept -> dest_addr = RPMSG_ADDR_ANY ;
675675 if (ept_to_release )
@@ -684,7 +684,7 @@ static int rpmsg_virtio_ns_callback(struct rpmsg_endpoint *ept, void *data,
684684 rpmsg_ept_decref (_ept );
685685 metal_mutex_release (& rdev -> lock );
686686 }
687- } else {
687+ } else if ( ns_msg -> flags == RPMSG_NS_CREATE ) {
688688 if (!_ept ) {
689689 /*
690690 * send callback to application, that can
@@ -698,7 +698,15 @@ static int rpmsg_virtio_ns_callback(struct rpmsg_endpoint *ept, void *data,
698698 } else {
699699 _ept -> dest_addr = dest ;
700700 metal_mutex_release (& rdev -> lock );
701+ if (_ept -> name [0 ] && rdev -> support_ack )
702+ rpmsg_send_ns_message (_ept ,
703+ RPMSG_NS_CREATE_ACK );
701704 }
705+ } else { /* RPMSG_NS_CREATE_ACK */
706+ /* save the received destination address */
707+ if (_ept )
708+ _ept -> dest_addr = dest ;
709+ metal_mutex_release (& rdev -> lock );
702710 }
703711
704712 return RPMSG_SUCCESS ;
@@ -853,6 +861,7 @@ int rpmsg_init_vdev_with_config(struct rpmsg_virtio_device *rvdev,
853861#endif /*!VIRTIO_DRIVER_ONLY*/
854862 vdev -> features = rpmsg_virtio_get_features (rvdev );
855863 rdev -> support_ns = !!(vdev -> features & (1 << VIRTIO_RPMSG_F_NS ));
864+ rdev -> support_ack = !!(vdev -> features & (1 << VIRTIO_RPMSG_F_ACK ));
856865
857866#ifndef VIRTIO_DEVICE_ONLY
858867 if (role == RPMSG_HOST ) {
@@ -961,7 +970,7 @@ int rpmsg_init_vdev_with_config(struct rpmsg_virtio_device *rvdev,
961970 * Create name service announcement endpoint if device supports name
962971 * service announcement feature.
963972 */
964- if (rdev -> support_ns ) {
973+ if (rdev -> support_ns || rdev -> support_ack ) {
965974 rpmsg_register_endpoint (rdev , & rdev -> ns_ept , "NS" ,
966975 RPMSG_NS_EPT_ADDR , RPMSG_NS_EPT_ADDR ,
967976 rpmsg_virtio_ns_callback , NULL );
0 commit comments