@@ -2032,6 +2032,7 @@ pci_emul_diow(struct vmctx *ctx, int vcpu, struct pci_vdev *dev, int baridx,
2032
2032
uint64_t offset , int size , uint64_t value )
2033
2033
{
2034
2034
int i ;
2035
+ void * offset_ptr ;
2035
2036
struct pci_emul_dummy * dummy = dev -> arg ;
2036
2037
2037
2038
if (baridx == 0 ) {
@@ -2041,12 +2042,13 @@ pci_emul_diow(struct vmctx *ctx, int vcpu, struct pci_vdev *dev, int baridx,
2041
2042
return ;
2042
2043
}
2043
2044
2045
+ offset_ptr = (void * ) & dummy -> ioregs [offset ];
2044
2046
if (size == 1 )
2045
- dummy -> ioregs [ offset ] = value & 0xff ;
2047
+ * ( uint8_t * ) offset_ptr = value & 0xff ;
2046
2048
else if (size == 2 )
2047
- * (uint16_t * )& dummy -> ioregs [ offset ] = value & 0xffff ;
2049
+ * (uint16_t * )offset_ptr = value & 0xffff ;
2048
2050
else if (size == 4 )
2049
- * (uint32_t * )& dummy -> ioregs [ offset ] = value ;
2051
+ * (uint32_t * )offset = value ;
2050
2052
else
2051
2053
printf ("diow: iow unknown size %d\n" , size );
2052
2054
@@ -2071,14 +2073,15 @@ pci_emul_diow(struct vmctx *ctx, int vcpu, struct pci_vdev *dev, int baridx,
2071
2073
2072
2074
i = baridx - 1 ; /* 'memregs' index */
2073
2075
2076
+ offset_ptr = (void * ) & dummy -> memregs [i ][offset ];
2074
2077
if (size == 1 )
2075
- dummy -> memregs [ i ][ offset ] = value ;
2078
+ * ( uint8_t * ) offset_ptr = value ;
2076
2079
else if (size == 2 )
2077
- * (uint16_t * )& dummy -> memregs [ i ][ offset ] = value ;
2080
+ * (uint16_t * )offset_ptr = value ;
2078
2081
else if (size == 4 )
2079
- * (uint32_t * )& dummy -> memregs [ i ][ offset ] = value ;
2082
+ * (uint32_t * )offset_ptr = value ;
2080
2083
else if (size == 8 )
2081
- * (uint64_t * )& dummy -> memregs [ i ][ offset ] = value ;
2084
+ * (uint64_t * )offset_ptr = value ;
2082
2085
else
2083
2086
printf ("diow: memw unknown size %d\n" , size );
2084
2087
@@ -2098,6 +2101,7 @@ pci_emul_dior(struct vmctx *ctx, int vcpu, struct pci_vdev *dev, int baridx,
2098
2101
struct pci_emul_dummy * dummy = dev -> arg ;
2099
2102
uint32_t value = 0 ;
2100
2103
int i ;
2104
+ void * offset_ptr ;
2101
2105
2102
2106
if (baridx == 0 ) {
2103
2107
if (offset + size > DIOSZ ) {
@@ -2107,12 +2111,13 @@ pci_emul_dior(struct vmctx *ctx, int vcpu, struct pci_vdev *dev, int baridx,
2107
2111
}
2108
2112
2109
2113
value = 0 ;
2114
+ offset_ptr = (void * ) & dummy -> ioregs [offset ];
2110
2115
if (size == 1 )
2111
- value = dummy -> ioregs [ offset ] ;
2116
+ value = * ( uint8_t * ) offset_ptr ;
2112
2117
else if (size == 2 )
2113
- value = * (uint16_t * ) & dummy -> ioregs [ offset ] ;
2118
+ value = * (uint16_t * )offset_ptr ;
2114
2119
else if (size == 4 )
2115
- value = * (uint32_t * ) & dummy -> ioregs [ offset ] ;
2120
+ value = * (uint32_t * )offset_ptr ;
2116
2121
else
2117
2122
printf ("dior: ior unknown size %d\n" , size );
2118
2123
}
@@ -2126,14 +2131,15 @@ pci_emul_dior(struct vmctx *ctx, int vcpu, struct pci_vdev *dev, int baridx,
2126
2131
2127
2132
i = baridx - 1 ; /* 'memregs' index */
2128
2133
2134
+ offset_ptr = (void * ) & dummy -> memregs [i ][offset ];
2129
2135
if (size == 1 )
2130
- value = dummy -> memregs [ i ][ offset ] ;
2136
+ value = * ( uint8_t * ) offset_ptr ;
2131
2137
else if (size == 2 )
2132
- value = * (uint16_t * ) & dummy -> memregs [ i ][ offset ] ;
2138
+ value = * (uint16_t * )offset_ptr ;
2133
2139
else if (size == 4 )
2134
- value = * (uint32_t * ) & dummy -> memregs [ i ][ offset ] ;
2140
+ value = * (uint32_t * )offset_ptr ;
2135
2141
else if (size == 8 )
2136
- value = * (uint64_t * ) & dummy -> memregs [ i ][ offset ] ;
2142
+ value = * (uint64_t * )offset_ptr ;
2137
2143
else
2138
2144
printf ("dior: ior unknown size %d\n" , size );
2139
2145
}
0 commit comments