@@ -579,15 +579,15 @@ static int rpmsg_virtio_ns_callback(struct rpmsg_endpoint *ept, void *data,
579579 metal_mutex_acquire (& rdev -> lock );
580580 _ept = rpmsg_get_endpoint (rdev , name , RPMSG_ADDR_ANY , dest );
581581
582- if (ns_msg -> flags & RPMSG_NS_DESTROY ) {
582+ if (ns_msg -> flags == RPMSG_NS_DESTROY ) {
583583 if (_ept )
584584 _ept -> dest_addr = RPMSG_ADDR_ANY ;
585585 metal_mutex_release (& rdev -> lock );
586586 if (_ept && _ept -> ns_unbind_cb )
587587 _ept -> ns_unbind_cb (_ept );
588588 if (rdev -> ns_unbind_cb )
589589 rdev -> ns_unbind_cb (rdev , name , dest );
590- } else {
590+ } else if ( ns_msg -> flags == RPMSG_NS_CREATE ) {
591591 if (!_ept ) {
592592 /*
593593 * send callback to application, that can
@@ -601,7 +601,15 @@ static int rpmsg_virtio_ns_callback(struct rpmsg_endpoint *ept, void *data,
601601 } else {
602602 _ept -> dest_addr = dest ;
603603 metal_mutex_release (& rdev -> lock );
604+ if (_ept -> name [0 ] && rdev -> support_ack )
605+ rpmsg_send_ns_message (_ept ,
606+ RPMSG_NS_CREATE_ACK );
604607 }
608+ } else { /* RPMSG_NS_CREATE_ACK */
609+ /* save the received destination address */
610+ if (_ept )
611+ _ept -> dest_addr = dest ;
612+ metal_mutex_release (& rdev -> lock );
605613 }
606614
607615 return RPMSG_SUCCESS ;
@@ -682,6 +690,7 @@ int rpmsg_init_vdev_with_config(struct rpmsg_virtio_device *rvdev,
682690#endif /*!VIRTIO_DRIVER_ONLY*/
683691 vdev -> features = rpmsg_virtio_get_features (rvdev );
684692 rdev -> support_ns = !!(vdev -> features & (1 << VIRTIO_RPMSG_F_NS ));
693+ rdev -> support_ack = !!(vdev -> features & (1 << VIRTIO_RPMSG_F_ACK ));
685694
686695#ifndef VIRTIO_DEVICE_ONLY
687696 if (role == RPMSG_HOST ) {
@@ -777,7 +786,7 @@ int rpmsg_init_vdev_with_config(struct rpmsg_virtio_device *rvdev,
777786 * Create name service announcement endpoint if device supports name
778787 * service announcement feature.
779788 */
780- if (rdev -> support_ns ) {
789+ if (rdev -> support_ns || rdev -> support_ack ) {
781790 rpmsg_register_endpoint (rdev , & rdev -> ns_ept , "NS" ,
782791 RPMSG_NS_EPT_ADDR , RPMSG_NS_EPT_ADDR ,
783792 rpmsg_virtio_ns_callback , NULL );
0 commit comments