@@ -64,7 +64,7 @@ static void virtio_pci_select_virtq(struct virtio_pci_dev *dev)
6464
6565 if (select < config -> num_queues ) {
6666 uint64_t offset = offsetof(struct virtio_pci_common_cfg , queue_size );
67- memcpy ((void * ) config + offset , & dev -> vq [select ].info ,
67+ memcpy ((void * ) (( uintptr_t ) config + offset ) , & dev -> vq [select ].info ,
6868 sizeof (struct virtq_info ));
6969 } else {
7070 config -> queue_size = 0 ;
@@ -89,7 +89,7 @@ static void virtio_pci_space_write(struct virtio_pci_dev *dev,
8989 uint8_t size )
9090{
9191 if (offset < offsetof(struct virtio_pci_config , dev_cfg )) {
92- memcpy ((void * ) & dev -> config + offset , data , size );
92+ memcpy ((void * ) (( uintptr_t ) & dev -> config + offset ) , data , size );
9393 switch (offset ) {
9494 case VIRTIO_PCI_COMMON_DFSELECT :
9595 virtio_pci_select_device_feature (dev );
@@ -115,8 +115,9 @@ static void virtio_pci_space_write(struct virtio_pci_dev *dev,
115115 uint16_t select = dev -> config .common_cfg .queue_select ;
116116 uint64_t info_offset = offset - VIRTIO_PCI_COMMON_Q_SIZE ;
117117 if (select < dev -> config .common_cfg .num_queues )
118- memcpy ((void * ) & dev -> vq [select ].info + info_offset , data ,
119- size );
118+ memcpy ((void * ) ((uintptr_t ) & dev -> vq [select ].info +
119+ info_offset ),
120+ data , size );
120121 }
121122 /* guest notify buffer avail */
122123 else if (offset ==
@@ -129,7 +130,7 @@ static void virtio_pci_space_write(struct virtio_pci_dev *dev,
129130 }
130131 /* dev config write */
131132 uint64_t dev_offset = offset - offsetof(struct virtio_pci_config , dev_cfg );
132- memcpy ((void * ) dev -> config .dev_cfg + dev_offset , data , size );
133+ memcpy ((void * ) (( uintptr_t ) dev -> config .dev_cfg + dev_offset ) , data , size );
133134}
134135
135136static void virtio_pci_space_read (struct virtio_pci_dev * dev ,
@@ -138,15 +139,16 @@ static void virtio_pci_space_read(struct virtio_pci_dev *dev,
138139 uint8_t size )
139140{
140141 if (offset < offsetof(struct virtio_pci_config , dev_cfg )) {
141- memcpy (data , (void * ) & dev -> config + offset , size );
142+ memcpy (data , (void * ) (( uintptr_t ) & dev -> config + offset ) , size );
142143 if (offset == offsetof(struct virtio_pci_config , isr_cap )) {
143144 dev -> config .isr_cap .isr_status = 0 ;
144145 }
145146 } else {
146147 /* dev config read */
147148 uint64_t dev_offset =
148149 offset - offsetof(struct virtio_pci_config , dev_cfg );
149- memcpy (data , (void * ) dev -> config .dev_cfg + dev_offset , size );
150+ memcpy (data , (void * ) ((uintptr_t ) dev -> config .dev_cfg + dev_offset ),
151+ size );
150152 }
151153}
152154
@@ -169,7 +171,8 @@ static void virtio_pci_set_cap(struct virtio_pci_dev *dev, uint8_t next)
169171 struct virtio_pci_cap * caps [VIRTIO_PCI_CAP_NUM + 1 ];
170172
171173 for (int i = 1 ; i < VIRTIO_PCI_CAP_NUM + 1 ; i ++ ) {
172- caps [i ] = dev -> pci_dev .hdr + next ;
174+ caps [i ] =
175+ (struct virtio_pci_cap * ) ((uintptr_t ) dev -> pci_dev .hdr + next );
173176 * caps [i ] = (struct virtio_pci_cap ){
174177 .cap_vndr = PCI_CAP_ID_VNDR ,
175178 .cfg_type = i ,
@@ -280,4 +283,4 @@ void virtio_pci_enable(struct virtio_pci_dev *dev)
280283void virtio_pci_exit ()
281284{
282285 /* TODO: exit of the virtio pci device */
283- }
286+ }
0 commit comments