@@ -566,13 +566,13 @@ static int rpmsg_virtio_ns_callback(struct rpmsg_endpoint *ept, void *data,
566
566
metal_mutex_acquire (& rdev -> lock );
567
567
_ept = rpmsg_get_endpoint (rdev , name , RPMSG_ADDR_ANY , dest );
568
568
569
- if (ns_msg -> flags & RPMSG_NS_DESTROY ) {
569
+ if (ns_msg -> flags == RPMSG_NS_DESTROY ) {
570
570
if (_ept )
571
571
_ept -> dest_addr = RPMSG_ADDR_ANY ;
572
572
metal_mutex_release (& rdev -> lock );
573
573
if (_ept && _ept -> ns_unbind_cb )
574
574
_ept -> ns_unbind_cb (_ept );
575
- } else {
575
+ } else if ( ns_msg -> flags == RPMSG_NS_CREATE ) {
576
576
if (!_ept ) {
577
577
/*
578
578
* send callback to application, that can
@@ -586,7 +586,14 @@ static int rpmsg_virtio_ns_callback(struct rpmsg_endpoint *ept, void *data,
586
586
} else {
587
587
_ept -> dest_addr = dest ;
588
588
metal_mutex_release (& rdev -> lock );
589
+ if (_ept -> name [0 ] && rdev -> support_ack )
590
+ rpmsg_send_ns_message (_ept , RPMSG_NS_CREATE_ACK );
589
591
}
592
+ } else { /* RPMSG_NS_CREATE_ACK */
593
+ /* save the received destination address */
594
+ if (_ept )
595
+ _ept -> dest_addr = dest ;
596
+ metal_mutex_release (& rdev -> lock );
590
597
}
591
598
592
599
return RPMSG_SUCCESS ;
@@ -667,6 +674,7 @@ int rpmsg_init_vdev_with_config(struct rpmsg_virtio_device *rvdev,
667
674
#endif /*!VIRTIO_MASTER_ONLY*/
668
675
vdev -> features = rpmsg_virtio_get_features (rvdev );
669
676
rdev -> support_ns = !!(vdev -> features & (1 << VIRTIO_RPMSG_F_NS ));
677
+ rdev -> support_ack = !!(vdev -> features & (1 << VIRTIO_RPMSG_F_ACK ));
670
678
671
679
#ifndef VIRTIO_SLAVE_ONLY
672
680
if (role == RPMSG_MASTER ) {
@@ -762,7 +770,7 @@ int rpmsg_init_vdev_with_config(struct rpmsg_virtio_device *rvdev,
762
770
* Create name service announcement endpoint if device supports name
763
771
* service announcement feature.
764
772
*/
765
- if (rdev -> support_ns ) {
773
+ if (rdev -> support_ns || rdev -> support_ack ) {
766
774
rpmsg_initialize_ept (& rdev -> ns_ept , "NS" ,
767
775
RPMSG_NS_EPT_ADDR , RPMSG_NS_EPT_ADDR ,
768
776
rpmsg_virtio_ns_callback , NULL );
0 commit comments