7
7
#ifndef IO_H
8
8
#define IO_H
9
9
10
+ #include <types.h>
11
+
10
12
/* Definition of a IO port range */
11
13
struct vm_io_range {
12
14
uint16_t base ; /* IO port base */
@@ -61,19 +63,19 @@ static inline uint32_t io_read_long(uint16_t port)
61
63
62
64
static inline void io_write (uint32_t v , uint16_t addr , size_t sz )
63
65
{
64
- if (sz == 1 )
65
- io_write_byte (v , addr );
66
- else if (sz == 2 )
67
- io_write_word (v , addr );
66
+ if (sz == 1U )
67
+ io_write_byte (( uint8_t ) v , addr );
68
+ else if (sz == 2U )
69
+ io_write_word (( uint16_t ) v , addr );
68
70
else
69
71
io_write_long (v , addr );
70
72
}
71
73
72
74
static inline uint32_t io_read (uint16_t addr , size_t sz )
73
75
{
74
- if (sz == 1 )
76
+ if (sz == 1U )
75
77
return io_read_byte (addr );
76
- if (sz == 2 )
78
+ if (sz == 2U )
77
79
return io_read_word (addr );
78
80
return io_read_long (addr );
79
81
}
@@ -159,27 +161,30 @@ int dm_emulate_pio_post(struct vcpu *vcpu);
159
161
*/
160
162
static inline void mmio_write_long (uint32_t value , void * addr )
161
163
{
162
- * ((volatile int32_t * )addr ) = value ;
164
+ volatile uint32_t * addr32 = (volatile uint32_t * )addr ;
165
+ * addr32 = value ;
163
166
}
164
167
165
168
/** Writes a 16 bit value to a memory mapped IO device.
166
169
*
167
170
* @param value The 16 bit value to write.
168
171
* @param addr The memory address to write to.
169
172
*/
170
- static inline void mmio_write_word (uint32_t value , void * addr )
173
+ static inline void mmio_write_word (uint16_t value , void * addr )
171
174
{
172
- * ((volatile uint16_t * )addr ) = value ;
175
+ volatile uint16_t * addr16 = (volatile uint16_t * )addr ;
176
+ * addr16 = value ;
173
177
}
174
178
175
179
/** Writes an 8 bit value to a memory mapped IO device.
176
180
*
177
181
* @param value The 8 bit value to write.
178
182
* @param addr The memory address to write to.
179
183
*/
180
- static inline void mmio_write_byte (uint32_t value , void * addr )
184
+ static inline void mmio_write_byte (uint8_t value , void * addr )
181
185
{
182
- * ((volatile uint8_t * )addr ) = value ;
186
+ volatile uint8_t * addr8 = (volatile uint8_t * )addr ;
187
+ * addr8 = value ;
183
188
}
184
189
185
190
/** Reads a 32 bit value from a memory mapped IO device.
@@ -223,27 +228,30 @@ static inline uint8_t mmio_read_byte(void *addr)
223
228
*/
224
229
static inline void __mmio_write_long (uint32_t value , void * addr )
225
230
{
226
- * ((volatile uint32_t * )addr ) = value ;
231
+ volatile uint32_t * addr32 = (volatile uint32_t * )addr ;
232
+ * addr32 = value ;
227
233
}
228
234
229
235
/** Writes a 16 bit value to a memory mapped IO device (ROM code version).
230
236
*
231
237
* @param value The 16 bit value to write.
232
238
* @param addr The memory address to write to.
233
239
*/
234
- static inline void __mmio_write_word (uint32_t value , void * addr )
240
+ static inline void __mmio_write_word (uint16_t value , void * addr )
235
241
{
236
- * ((volatile uint16_t * )addr ) = value ;
242
+ volatile uint16_t * addr16 = (volatile uint16_t * )addr ;
243
+ * addr16 = value ;
237
244
}
238
245
239
246
/** Writes an 8 bit value to a memory mapped IO device (ROM code version).
240
247
*
241
248
* @param value The 8 bit value to write.
242
249
* @param addr The memory address to write to.
243
250
*/
244
- static inline void __mmio_write_byte (uint32_t value , void * addr )
251
+ static inline void __mmio_write_byte (uint8_t value , void * addr )
245
252
{
246
- * ((volatile uint8_t * )addr ) = value ;
253
+ volatile uint8_t * addr8 = (volatile uint8_t * )addr ;
254
+ * addr8 = value ;
247
255
}
248
256
249
257
/** Reads a 32 bit value from a memory mapped IO device (ROM code version).
@@ -299,7 +307,7 @@ static inline void setl(void *addr, uint32_t mask, uint32_t value)
299
307
* @param mask The mask to apply to the value read.
300
308
* @param value The 16 bit value to write.
301
309
*/
302
- static inline void setw (void * addr , uint32_t mask , uint32_t value )
310
+ static inline void setw (void * addr , uint16_t mask , uint16_t value )
303
311
{
304
312
mmio_write_word ((mmio_read_word (addr ) & ~mask ) | value , addr );
305
313
}
@@ -311,7 +319,7 @@ static inline void setw(void *addr, uint32_t mask, uint32_t value)
311
319
* @param mask The mask to apply to the value read.
312
320
* @param value The 8 bit value to write.
313
321
*/
314
- static inline void setb (void * addr , uint32_t mask , uint32_t value )
322
+ static inline void setb (void * addr , uint8_t mask , uint8_t value )
315
323
{
316
324
mmio_write_byte ((mmio_read_byte (addr ) & ~mask ) | value , addr );
317
325
}
0 commit comments