@@ -696,10 +696,10 @@ static void virtio_snd_cb(struct CNFADriver *dev,
696696}
697697
698698#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 )
703703{
704704    /* A control message uses at most 3 virtqueue descriptors, where 
705705     * the first descriptor contains: 
@@ -713,13 +713,14 @@ static int virtio_snd_desc_handler(virtio_snd_state_t *vsnd,
713713    /* Collect the descriptors */ 
714714    for  (int  i  =  0 ; i  <  VSND_DESC_CNT ; i ++ ) {
715715        /* 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 ];
717718
718719        /* 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 ; 
723724
724725        /* Leave the loop if next-flag is not set */ 
725726        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,
836837    int  cnt  =  0 ;
837838    for  (;;) {
838839        /* 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 ];
840842
841843        /* Retrieve the fields of current descriptor */ 
842844        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 ;
846848        list_push (& node -> q , & q );
847-         desc_idx  =  desc [ 3 ] >>  16 ;  /* vq_desc[desc_cnt]. next */ 
849+         desc_idx  =  desc -> next ; 
848850
849851        cnt ++ ;
850852
851853        /* 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 ))
853855            break ;
854856    }
855857
@@ -1088,7 +1090,7 @@ static bool virtio_snd_reg_write(virtio_snd_state_t *vsnd,
10881090            switch  (value ) {
10891091            case  VSND_QUEUE_CTRL :
10901092                virtio_queue_notify_handler (vsnd , value ,
1091-                                             virtio_snd_desc_handler );
1093+                                             virtio_snd_ctrl_desc_handler );
10921094                break ;
10931095            case  VSND_QUEUE_TX :
10941096                tx_ev_notify ++ ;
0 commit comments