Skip to content

Commit 713bd91

Browse files
authored
Merge pull request #3352 from BsAtHome/fix_void-calculations
Avoid calculations with void pointers
2 parents 84ebd89 + b39d1dc commit 713bd91

8 files changed

Lines changed: 70 additions & 64 deletions

File tree

src/hal/drivers/hal_bb_gpio.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ int configure_gpio_port(int n) {
9696
return -errno;
9797
}
9898
// point at CM_PER_GPIOn_CLKCTRL register for port n
99-
regptr = cm_per + CM_PER_GPIO1_CLKCTRL_OFFSET + 4*(n-1);
99+
regptr = (void *)((char *)cm_per + CM_PER_GPIO1_CLKCTRL_OFFSET + 4*(n-1));
100100
regvalue = *regptr;
101101
// check for port enabled
102102
if ( (regvalue & CM_PER_GPIO_CLKCTRL_MODMODE_MASK ) != CM_PER_GPIO_CLKCTRL_MODMODE_ENABLED ) {
@@ -113,10 +113,10 @@ int configure_gpio_port(int n) {
113113
return -errno;
114114
}
115115

116-
gpio_ports[n]->oe_reg = gpio_ports[n]->gpio_addr + GPIO_OE;
117-
gpio_ports[n]->setdataout_reg = gpio_ports[n]->gpio_addr + GPIO_SETDATAOUT;
118-
gpio_ports[n]->clrdataout_reg = gpio_ports[n]->gpio_addr + GPIO_CLEARDATAOUT;
119-
gpio_ports[n]->datain_reg = gpio_ports[n]->gpio_addr + GPIO_DATAIN;
116+
gpio_ports[n]->oe_reg = (void *)((char *)gpio_ports[n]->gpio_addr + GPIO_OE);
117+
gpio_ports[n]->setdataout_reg = (void *)((char *)gpio_ports[n]->gpio_addr + GPIO_SETDATAOUT);
118+
gpio_ports[n]->clrdataout_reg = (void *)((char *)gpio_ports[n]->gpio_addr + GPIO_CLEARDATAOUT);
119+
gpio_ports[n]->datain_reg = (void *)((char *)gpio_ports[n]->gpio_addr + GPIO_DATAIN);
120120

121121

122122
rtapi_print("memmapped gpio port %d to %p, oe: %p, set: %p, clr: %p\n", n, gpio_ports[n]->gpio_addr, gpio_ports[n]->oe_reg, gpio_ports[n]->setdataout_reg, gpio_ports[n]->clrdataout_reg);
@@ -468,7 +468,7 @@ off_t start_addr_for_port(int port) {
468468

469469

470470
void configure_pin(bb_gpio_pin *pin, char mode) {
471-
volatile unsigned int *control_reg = control_module + pin->control_offset;
471+
volatile unsigned int *control_reg = (void *)((char *)control_module + pin->control_offset);
472472
pin->claimed = mode;
473473
switch(mode) {
474474
case 'O':

src/hal/drivers/hal_evoreg.c

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -169,15 +169,15 @@ int rtapi_app_main(void)
169169
outw(0x82c9,base); /* set indexregister */
170170

171171
/* Set all outputs to zero */
172-
writew(0, port_data_array->io_base + 0x20); /* digital out 0-15 */
173-
writew(0, port_data_array->io_base + 0x40); /* digital out 16-23 */
174-
writew(0, port_data_array->io_base + 0x60); /* DAC 1 */
175-
writew(0, port_data_array->io_base + 0x80); /* DAC 2 */
176-
writew(0, port_data_array->io_base + 0xa0); /* DAC 3 */
172+
writew(0, (char *)port_data_array->io_base + 0x20); /* digital out 0-15 */
173+
writew(0, (char *)port_data_array->io_base + 0x40); /* digital out 16-23 */
174+
writew(0, (char *)port_data_array->io_base + 0x60); /* DAC 1 */
175+
writew(0, (char *)port_data_array->io_base + 0x80); /* DAC 2 */
176+
writew(0, (char *)port_data_array->io_base + 0xa0); /* DAC 3 */
177177
/* Reset Encoder's */
178-
writew(0, port_data_array->io_base + 0x02); /* ENCODER 1 */
179-
writew(0, port_data_array->io_base + 0x0a); /* ENCODER 2 */
180-
writew(0, port_data_array->io_base + 0x12); /* ENCODER 3 */
178+
writew(0, (char *)port_data_array->io_base + 0x02); /* ENCODER 1 */
179+
writew(0, (char *)port_data_array->io_base + 0x0a); /* ENCODER 2 */
180+
writew(0, (char *)port_data_array->io_base + 0x12); /* ENCODER 3 */
181181

182182
/* STEP 3: export the pin(s) */
183183

@@ -289,14 +289,14 @@ static void update_port(void *arg, long period)
289289
port = arg;
290290

291291
/* write DAC's */
292-
writew((*(port->dac_out[0])/10 * 0x7fff), port->io_base + 0x60);
293-
writew((*(port->dac_out[1])/10 * 0x7fff), port->io_base + 0x80);
294-
writew((*(port->dac_out[2])/10 * 0x7fff), port->io_base + 0xa0);
292+
writew((*(port->dac_out[0])/10 * 0x7fff), (char *)port->io_base + 0x60);
293+
writew((*(port->dac_out[1])/10 * 0x7fff), (char *)port->io_base + 0x80);
294+
writew((*(port->dac_out[2])/10 * 0x7fff), (char *)port->io_base + 0xa0);
295295

296296
/* Read Encoders, improve the 16bit hardware counters to 32bit and scale the values */
297297
raw_counts[0] = (__u16) readw(port->io_base);
298-
raw_counts[1] = (__u16) readw(port->io_base + 0x08 );
299-
raw_counts[2] = (__u16) readw(port->io_base + 0x10 );
298+
raw_counts[1] = (__u16) readw((char *)port->io_base + 0x08 );
299+
raw_counts[2] = (__u16) readw((char *)port->io_base + 0x10 );
300300

301301
port->counts[0] += (__s16) (raw_counts[0] - port->raw_counts_old[0]);
302302
port->raw_counts_old[0] = raw_counts[0];
@@ -313,20 +313,20 @@ static void update_port(void *arg, long period)
313313

314314

315315
/* read digital inputs */
316-
tmp = readw(port->io_base + 0x20); /* digital input 0-15 */
316+
tmp = readw((char *)port->io_base + 0x20); /* digital input 0-15 */
317317
mask = 0x01;
318318
for (pin=0 ; pin < 16 ; pin++) {
319319
*port->digital_in[pin] = (tmp & mask) ? 1:0 ;
320320
mask <<= 1;
321321
}
322-
tmp = readw(port->io_base + 0x40); /* digital input 16-31 */
322+
tmp = readw((char *)port->io_base + 0x40); /* digital input 16-31 */
323323
mask = 0x01;
324324
for (pin=16 ; pin < 32 ; pin++) {
325325
*port->digital_in[pin] = (tmp & mask) ? 1:0 ;
326326
mask <<= 1;
327327
}
328328

329-
tmp = readw(port->io_base + 0x60); /* digital input 32-45 */
329+
tmp = readw((char *)port->io_base + 0x60); /* digital input 32-45 */
330330
mask = 0x01;
331331
for (pin=32 ; pin < 46 ; pin++) {
332332
*port->digital_in[pin] = (tmp & mask) ? 1:0 ;
@@ -343,7 +343,7 @@ static void update_port(void *arg, long period)
343343
mask <<= 1;
344344
}
345345
}
346-
writew( tmp, port->io_base + 0x20); /* digital output 0-15 */
346+
writew( tmp, (char *)port->io_base + 0x20); /* digital output 0-15 */
347347

348348

349349
tmp = 0x0;
@@ -354,6 +354,6 @@ static void update_port(void *arg, long period)
354354
mask <<= 1;
355355
}
356356
}
357-
writew( tmp, port->io_base + 0x40); /* digital output 16-23 */
357+
writew( tmp, (char *)port->io_base + 0x40); /* digital output 16-23 */
358358

359359
}

src/hal/drivers/mesa-hostmot2/hm2_7i43.c

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -201,17 +201,18 @@ static void hm2_7i43_nanosleep(unsigned long int nanoseconds) {
201201
int hm2_7i43_read(hm2_lowlevel_io_t *this, rtapi_u32 addr, void *buffer, int size) {
202202
int bytes_remaining = size;
203203
hm2_7i43_t *board = this->private;
204+
char *cptr = buffer;
204205

205206
hm2_7i43_epp_addr16(addr | HM2_7I43_ADDR_AUTOINCREMENT, board);
206207

207208
for (; bytes_remaining > 3; bytes_remaining -= 4) {
208-
*((rtapi_u32*)buffer) = hm2_7i43_epp_read32(board);
209-
buffer += 4;
209+
*((rtapi_u32*)cptr) = hm2_7i43_epp_read32(board);
210+
cptr += 4;
210211
}
211212

212213
for ( ; bytes_remaining > 0; bytes_remaining --) {
213-
*((rtapi_u8*)buffer) = hm2_7i43_epp_read(board);
214-
buffer ++;
214+
*((rtapi_u8*)cptr) = hm2_7i43_epp_read(board);
215+
cptr++;
215216
}
216217

217218
if (hm2_7i43_epp_check_for_timeout(board)) {
@@ -231,17 +232,18 @@ int hm2_7i43_read(hm2_lowlevel_io_t *this, rtapi_u32 addr, void *buffer, int siz
231232
int hm2_7i43_write(hm2_lowlevel_io_t *this, rtapi_u32 addr, const void *buffer, int size) {
232233
int bytes_remaining = size;
233234
hm2_7i43_t *board = this->private;
235+
const char *cptr = buffer;
234236

235237
hm2_7i43_epp_addr16(addr | HM2_7I43_ADDR_AUTOINCREMENT, board);
236238

237239
for (; bytes_remaining > 3; bytes_remaining -= 4) {
238-
hm2_7i43_epp_write32(*((rtapi_u32*)buffer), board);
239-
buffer += 4;
240+
hm2_7i43_epp_write32(*((rtapi_u32*)cptr), board);
241+
cptr += 4;
240242
}
241243

242244
for ( ; bytes_remaining > 0; bytes_remaining --) {
243-
hm2_7i43_epp_write(*((rtapi_u8*)buffer), board);
244-
buffer ++;
245+
hm2_7i43_epp_write(*((rtapi_u8*)cptr), board);
246+
cptr++;
245247
}
246248

247249
if (hm2_7i43_epp_check_for_timeout(board)) {

src/hal/drivers/mesa-hostmot2/hm2_7i90.c

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -197,17 +197,18 @@ static void hm2_7i90_nanosleep(unsigned long int nanoseconds) {
197197
int hm2_7i90_read(hm2_lowlevel_io_t *this, rtapi_u32 addr, void *buffer, int size) {
198198
int bytes_remaining = size;
199199
hm2_7i90_t *board = this->private;
200+
char *cptr = buffer;
200201

201202
hm2_7i90_epp_addr16(addr | HM2_7I90_ADDR_AUTOINCREMENT, board);
202203

203204
for (; bytes_remaining > 3; bytes_remaining -= 4) {
204-
*((rtapi_u32*)buffer) = hm2_7i90_epp_read32(board);
205-
buffer += 4;
205+
*((rtapi_u32*)cptr) = hm2_7i90_epp_read32(board);
206+
cptr += 4;
206207
}
207208

208209
for ( ; bytes_remaining > 0; bytes_remaining --) {
209-
*((rtapi_u8*)buffer) = hm2_7i90_epp_read(board);
210-
buffer ++;
210+
*((rtapi_u8*)cptr) = hm2_7i90_epp_read(board);
211+
cptr++;
211212
}
212213

213214
if (hm2_7i90_epp_check_for_timeout(board)) {
@@ -227,17 +228,18 @@ int hm2_7i90_read(hm2_lowlevel_io_t *this, rtapi_u32 addr, void *buffer, int siz
227228
int hm2_7i90_write(hm2_lowlevel_io_t *this, rtapi_u32 addr, const void *buffer, int size) {
228229
int bytes_remaining = size;
229230
hm2_7i90_t *board = this->private;
231+
const char *cptr = buffer;
230232

231233
hm2_7i90_epp_addr16(addr | HM2_7I90_ADDR_AUTOINCREMENT, board);
232234

233235
for (; bytes_remaining > 3; bytes_remaining -= 4) {
234-
hm2_7i90_epp_write32(*((rtapi_u32*)buffer), board);
235-
buffer += 4;
236+
hm2_7i90_epp_write32(*((rtapi_u32*)cptr), board);
237+
cptr += 4;
236238
}
237239

238240
for ( ; bytes_remaining > 0; bytes_remaining --) {
239-
hm2_7i90_epp_write(*((rtapi_u8*)buffer), board);
240-
buffer ++;
241+
hm2_7i90_epp_write(*((rtapi_u8*)cptr), board);
242+
cptr++;
241243
}
242244

243245
if (hm2_7i90_epp_check_for_timeout(board)) {

src/hal/drivers/mesa-hostmot2/hm2_pci.c

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -213,12 +213,13 @@ MODULE_DEVICE_TABLE(pci, hm2_pci_tbl);
213213

214214
static int hm2_pci_read(hm2_lowlevel_io_t *this, rtapi_u32 addr, void *buffer, int size) {
215215
hm2_pci_t *board = this->private;
216-
void *src = board->base + addr;
216+
char *src = (char *)board->base + addr;
217+
char *dst = buffer;
217218

218219
while (size > 0) {
219-
*(rtapi_u32*)buffer = *(rtapi_u32*)src;
220+
*(rtapi_u32*)dst = *(rtapi_u32*)src;
220221
src += 4;
221-
buffer += 4;
222+
dst += 4;
222223
size -=4;
223224
}
224225

@@ -227,12 +228,13 @@ static int hm2_pci_read(hm2_lowlevel_io_t *this, rtapi_u32 addr, void *buffer, i
227228

228229
static int hm2_pci_write(hm2_lowlevel_io_t *this, rtapi_u32 addr, const void *buffer, int size) {
229230
hm2_pci_t *board = this->private;
230-
void *dest = board->base + addr;
231+
char *dest = (char *)board->base + addr;
232+
const char *src = buffer;
231233

232234
while (size > 0) {
233-
*(rtapi_u32*)dest = *(rtapi_u32*)buffer;
235+
*(rtapi_u32*)dest = *(rtapi_u32*)src;
234236
dest += 4;
235-
buffer += 4;
237+
src += 4;
236238
size -=4;
237239
}
238240

src/hal/drivers/mesa-hostmot2/spix_rpi3.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -425,9 +425,9 @@ static int peripheral_map(uintptr_t membase, size_t memsize)
425425
// the wild.
426426
// Lets just say, when somebody decides to change the world, then we'll
427427
// fix all this code too.
428-
gpio = (bcm2835_gpio_t *)(peripheralmem + (BCM2835_GPIO_OFFSET / sizeof(*peripheralmem)));
429-
spi = (bcm2835_spi_t *)(peripheralmem + (BCM2835_SPI_OFFSET / sizeof(*peripheralmem)));
430-
aux = (bcm2835_aux_t *)(peripheralmem + (BCM2835_AUX_OFFSET / sizeof(*peripheralmem)));
428+
gpio = (bcm2835_gpio_t *)((char *)peripheralmem + BCM2835_GPIO_OFFSET);
429+
spi = (bcm2835_spi_t *)((char *)peripheralmem + BCM2835_SPI_OFFSET);
430+
aux = (bcm2835_aux_t *)((char *)peripheralmem + BCM2835_AUX_OFFSET);
431431

432432
LL_INFO("Mapped peripherals from 0x%p (size 0x%08x) to gpio:0x%p, spi:0x%p, aux:0x%p\n",
433433
(void *)membase, (uint32_t)peripheralsize, gpio, spi, aux);

src/hal/hal_lib.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -798,7 +798,7 @@ int hal_pin_new(const char *name, hal_type_t type, hal_pin_dir_t dir,
798798
memset(&new->dummysig, 0, sizeof(hal_data_u));
799799
rtapi_snprintf(new->name, sizeof(new->name), "%s", name);
800800
/* make 'data_ptr' point to dummy signal */
801-
*data_ptr_addr = comp->shmem_base + SHMOFF(&(new->dummysig));
801+
*data_ptr_addr = (char *)comp->shmem_base + SHMOFF(&(new->dummysig));
802802
/* search list for 'name' and insert new structure */
803803
prev = &(hal_data->pin_list_ptr);
804804
next = *prev;
@@ -1246,7 +1246,7 @@ int hal_link(const char *pin_name, const char *sig_name)
12461246
/* everything is OK, make the new link */
12471247
data_ptr_addr = SHMPTR(pin->data_ptr_addr);
12481248
comp = SHMPTR(pin->owner_ptr);
1249-
data_addr = comp->shmem_base + sig->data_ptr;
1249+
data_addr = (char *)comp->shmem_base + sig->data_ptr;
12501250
*data_ptr_addr = data_addr;
12511251

12521252
/* if the pin is a HAL_PORT the buffer belongs to the signal, port pins not linked
@@ -3483,7 +3483,7 @@ static void unlink_pin(hal_pin_t * pin)
34833483
/* make pin's 'data_ptr' point to its dummy signal */
34843484
data_ptr_addr = SHMPTR(pin->data_ptr_addr);
34853485
comp = SHMPTR(pin->owner_ptr);
3486-
dummy_addr = comp->shmem_base + SHMOFF(&(pin->dummysig));
3486+
dummy_addr = (void *)((char *)comp->shmem_base + SHMOFF(&(pin->dummysig)));
34873487
*data_ptr_addr = dummy_addr;
34883488

34893489
/* copy current signal value to dummy */

src/hal/utils/upci.c

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -541,7 +541,7 @@ __u8 upci_read_u8(int rd, __u32 offset)
541541
data = inb(port);
542542
} else {
543543
/* region is memory */
544-
ptr = (__u8 *)(reg->mapped_ptr + offset);
544+
ptr = (__u8 *)reg->mapped_ptr + offset;
545545
data = *ptr;
546546
}
547547
return data;
@@ -561,7 +561,7 @@ __s8 upci_read_s8(int rd, __u32 offset)
561561
port = reg->base_addr + offset;
562562
data = inb(port);
563563
} else {
564-
ptr = (__s8 *)(reg->mapped_ptr + offset);
564+
ptr = (__s8 *)reg->mapped_ptr + offset;
565565
data = *ptr;
566566
}
567567
return data;
@@ -581,7 +581,7 @@ __u16 upci_read_u16(int rd, __u32 offset)
581581
port = reg->base_addr + offset;
582582
data = inw(port);
583583
} else {
584-
ptr = (__u16 *)(reg->mapped_ptr + offset);
584+
ptr = (__u16 *)((__u8 *)reg->mapped_ptr + offset);
585585
data = *ptr;
586586
}
587587
return data;
@@ -601,7 +601,7 @@ __s16 upci_read_s16(int rd, __u32 offset)
601601
port = reg->base_addr + offset;
602602
data = inw(port);
603603
} else {
604-
ptr = (__s16 *)(reg->mapped_ptr + offset);
604+
ptr = (__s16 *)((__u8 *)reg->mapped_ptr + offset);
605605
data = *ptr;
606606
}
607607
return data;
@@ -621,7 +621,7 @@ __u32 upci_read_u32(int rd, __u32 offset)
621621
port = reg->base_addr + offset;
622622
data = inl(port);
623623
} else {
624-
ptr = (__u32 *)(reg->mapped_ptr + offset);
624+
ptr = (__u32 *)((__u8 *)reg->mapped_ptr + offset);
625625
data = *ptr;
626626
}
627627
return data;
@@ -641,7 +641,7 @@ __s32 upci_read_s32(int rd, __u32 offset)
641641
port = reg->base_addr + offset;
642642
data = inl(port);
643643
} else {
644-
ptr = (__s32 *)(reg->mapped_ptr + offset);
644+
ptr = (__s32 *)((__u8 *)reg->mapped_ptr + offset);
645645
data = *ptr;
646646
}
647647
return data;
@@ -663,7 +663,7 @@ void upci_write_u8(int rd, __u32 offset, __u8 data)
663663
outb(data, port);
664664
} else {
665665
/* region is memory */
666-
ptr = (__u8 *)(reg->mapped_ptr + offset);
666+
ptr = (__u8 *)reg->mapped_ptr + offset;
667667
*ptr = data;
668668
}
669669
return;
@@ -683,7 +683,7 @@ void upci_write_s8(int rd, __u32 offset, __s8 data)
683683
port = reg->base_addr + offset;
684684
outb(data, port);
685685
} else {
686-
ptr = (__s8 *)(reg->mapped_ptr + offset);
686+
ptr = (__s8 *)reg->mapped_ptr + offset;
687687
*ptr = data;
688688
}
689689
return;
@@ -703,7 +703,7 @@ void upci_write_u16(int rd, __u32 offset, __u16 data)
703703
port = reg->base_addr + offset;
704704
outw(data, port);
705705
} else {
706-
ptr = (__u16 *)(reg->mapped_ptr + offset);
706+
ptr = (__u16 *)((__u8 *)reg->mapped_ptr + offset);
707707
*ptr = data;
708708
}
709709
return;
@@ -723,7 +723,7 @@ void upci_write_s16(int rd, __u32 offset, __s16 data)
723723
port = reg->base_addr + offset;
724724
outw(data, port);
725725
} else {
726-
ptr = (__s16 *)(reg->mapped_ptr + offset);
726+
ptr = (__s16 *)((__u8 *)reg->mapped_ptr + offset);
727727
*ptr = data;
728728
}
729729
return;
@@ -743,7 +743,7 @@ void upci_write_u32(int rd, __u32 offset, __u32 data)
743743
port = reg->base_addr + offset;
744744
outl(data, port);
745745
} else {
746-
ptr = (__u32 *)(reg->mapped_ptr + offset);
746+
ptr = (__u32 *)((__u8 *)reg->mapped_ptr + offset);
747747
*ptr = data;
748748
}
749749
return;
@@ -763,7 +763,7 @@ void upci_write_s32(int rd, __u32 offset, __s32 data)
763763
port = reg->base_addr + offset;
764764
outl(data, port);
765765
} else {
766-
ptr = (__s32 *)(reg->mapped_ptr + offset);
766+
ptr = (__s32 *)((__u8 *)reg->mapped_ptr + offset);
767767
*ptr = data;
768768
}
769769
return;

0 commit comments

Comments
 (0)