@@ -696,10 +696,10 @@ static void virtio_snd_cb(struct CNFADriver *dev,
696
696
}
697
697
698
698
#define VSND_DESC_CNT 3
699
- static int virtio_snd_desc_handler (virtio_snd_state_t * vsnd ,
700
- const virtio_snd_queue_t * queue ,
701
- uint32_t desc_idx ,
702
- uint32_t * plen )
699
+ static int virtio_snd_ctrl_desc_handler (virtio_snd_state_t * vsnd ,
700
+ const virtio_snd_queue_t * queue ,
701
+ uint32_t desc_idx ,
702
+ uint32_t * plen )
703
703
{
704
704
/* A control message uses at most 3 virtqueue descriptors, where
705
705
* the first descriptor contains:
@@ -713,13 +713,14 @@ static int virtio_snd_desc_handler(virtio_snd_state_t *vsnd,
713
713
/* Collect the descriptors */
714
714
for (int i = 0 ; i < VSND_DESC_CNT ; i ++ ) {
715
715
/* The size of the `struct virtq_desc` is 4 words */
716
- const uint32_t * desc = & vsnd -> ram [queue -> QueueDesc + desc_idx * 4 ];
716
+ const struct virtq_desc * desc =
717
+ (struct virtq_desc * ) & vsnd -> ram [queue -> QueueDesc + desc_idx * 4 ];
717
718
718
719
/* Retrieve the fields of current descriptor */
719
- vq_desc [i ].addr = desc [ 0 ] ;
720
- vq_desc [i ].len = desc [ 2 ] ;
721
- vq_desc [i ].flags = desc [ 3 ] ;
722
- desc_idx = desc [ 3 ] >> 16 ; /* vq_desc[desc_cnt]. next */
720
+ vq_desc [i ].addr = desc -> addr ;
721
+ vq_desc [i ].len = desc -> len ;
722
+ vq_desc [i ].flags = desc -> flags ;
723
+ desc_idx = desc -> next ;
723
724
724
725
/* Leave the loop if next-flag is not set */
725
726
if (!(vq_desc [i ].flags & VIRTIO_DESC_F_NEXT ))
@@ -836,20 +837,21 @@ static int virtio_snd_tx_desc_handler(virtio_snd_state_t *vsnd,
836
837
int cnt = 0 ;
837
838
for (;;) {
838
839
/* The size of the `struct virtq_desc` is 4 words */
839
- const uint32_t * desc = & vsnd -> ram [queue -> QueueDesc + desc_idx * 4 ];
840
+ const struct virtq_desc * desc =
841
+ (struct virtq_desc * ) & vsnd -> ram [queue -> QueueDesc + desc_idx * 4 ];
840
842
841
843
/* Retrieve the fields of current descriptor */
842
844
node = (virtq_desc_queue_node_t * ) malloc (sizeof (* node ));
843
- node -> vq_desc .addr = desc [ 0 ] ;
844
- node -> vq_desc .len = desc [ 2 ] ;
845
- node -> vq_desc .flags = desc [ 3 ] ;
845
+ node -> vq_desc .addr = desc -> addr ;
846
+ node -> vq_desc .len = desc -> len ;
847
+ node -> vq_desc .flags = desc -> flags ;
846
848
list_push (& node -> q , & q );
847
- desc_idx = desc [ 3 ] >> 16 ; /* vq_desc[desc_cnt]. next */
849
+ desc_idx = desc -> next ;
848
850
849
851
cnt ++ ;
850
852
851
853
/* Leave the loop if next-flag is not set */
852
- if (!(desc [ 3 ] & VIRTIO_DESC_F_NEXT ))
854
+ if (!(desc -> flags & VIRTIO_DESC_F_NEXT ))
853
855
break ;
854
856
}
855
857
@@ -1088,7 +1090,7 @@ static bool virtio_snd_reg_write(virtio_snd_state_t *vsnd,
1088
1090
switch (value ) {
1089
1091
case VSND_QUEUE_CTRL :
1090
1092
virtio_queue_notify_handler (vsnd , value ,
1091
- virtio_snd_desc_handler );
1093
+ virtio_snd_ctrl_desc_handler );
1092
1094
break ;
1093
1095
case VSND_QUEUE_TX :
1094
1096
tx_ev_notify ++ ;
0 commit comments