@@ -656,7 +656,7 @@ static int rpmsg_virtio_ns_callback(struct rpmsg_endpoint *ept, void *data,
656656 */
657657 ept_to_release = _ept && _ept -> release_cb ;
658658
659- if (ns_msg -> flags & RPMSG_NS_DESTROY ) {
659+ if (ns_msg -> flags == RPMSG_NS_DESTROY ) {
660660 if (_ept )
661661 _ept -> dest_addr = RPMSG_ADDR_ANY ;
662662 if (ept_to_release )
@@ -671,7 +671,7 @@ static int rpmsg_virtio_ns_callback(struct rpmsg_endpoint *ept, void *data,
671671 rpmsg_ept_decref (_ept );
672672 metal_mutex_release (& rdev -> lock );
673673 }
674- } else {
674+ } else if ( ns_msg -> flags == RPMSG_NS_CREATE ) {
675675 if (!_ept ) {
676676 /*
677677 * send callback to application, that can
@@ -685,7 +685,15 @@ static int rpmsg_virtio_ns_callback(struct rpmsg_endpoint *ept, void *data,
685685 } else {
686686 _ept -> dest_addr = dest ;
687687 metal_mutex_release (& rdev -> lock );
688+ if (_ept -> name [0 ] && rdev -> support_ack )
689+ rpmsg_send_ns_message (_ept ,
690+ RPMSG_NS_CREATE_ACK );
688691 }
692+ } else { /* RPMSG_NS_CREATE_ACK */
693+ /* save the received destination address */
694+ if (_ept )
695+ _ept -> dest_addr = dest ;
696+ metal_mutex_release (& rdev -> lock );
689697 }
690698
691699 return RPMSG_SUCCESS ;
@@ -827,7 +835,9 @@ int rpmsg_init_vdev_with_config(struct rpmsg_virtio_device *rvdev,
827835 status = virtio_get_features (rvdev -> vdev , & features );
828836 if (status )
829837 return status ;
838+
830839 rdev -> support_ns = !!(features & (1 << VIRTIO_RPMSG_F_NS ));
840+ rdev -> support_ack = !!(features & (1 << VIRTIO_RPMSG_F_ACK ));
831841
832842 if (VIRTIO_ROLE_IS_DRIVER (rvdev -> vdev )) {
833843 /*
@@ -926,7 +936,7 @@ int rpmsg_init_vdev_with_config(struct rpmsg_virtio_device *rvdev,
926936 * Create name service announcement endpoint if device supports name
927937 * service announcement feature.
928938 */
929- if (rdev -> support_ns ) {
939+ if (rdev -> support_ns || rdev -> support_ack ) {
930940 rpmsg_register_endpoint (rdev , & rdev -> ns_ept , "NS" ,
931941 RPMSG_NS_EPT_ADDR , RPMSG_NS_EPT_ADDR ,
932942 rpmsg_virtio_ns_callback , NULL , rvdev );
0 commit comments