Don't assume that pointer and cell size are identical, part 1

On ppc64, cell size is 32 bits but pointers are 64-bit.
Thus, direct casts result in warnings, treated as errors.

Use [u]intptr_t cast or cell2pointer and pointer2cell macros as necessary.

v2:
* Drop changes related to physical addresses since physical addresses may be
  wider than pointers (e.g., 36 bits on sparc32, as pointed out by Blue).
* Drop changes to cell2pointer() and pointer2cell() for now.

Signed-off-by: Andreas Färber <andreas.faerber@web.de>


git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@922 f158a5a8-5612-0410-a976-696ce0be7e32
This commit is contained in:
Andreas Färber
2010-10-25 20:48:45 +00:00
committed by Andreas Färber
parent 28516584d1
commit 380cd335cc
27 changed files with 93 additions and 94 deletions

View File

@@ -556,7 +556,7 @@ static void keyboard_read(void)
char *addr;
int len, key, i;
len=POP();
addr=(char *)POP();
addr=(char *)cell2pointer(POP());
for (i = 0; i < len; i++) {
key = adb_kbd_read(my_adb_dev);

View File

@@ -137,7 +137,7 @@ escc_read(unsigned long *address)
int len;
len = POP();
addr = (char *)POP();
addr = (char *)cell2pointer(POP());
if (len < 1)
printk("escc_read: bad len, addr %x len %x\n", (unsigned int)addr, len);
@@ -158,7 +158,7 @@ escc_write(unsigned long *address)
int i, len;
len = POP();
addr = (unsigned char *)POP();
addr = (unsigned char *)cell2pointer(POP());
for (i = 0; i < len; i++) {
uart_putchar(*address, addr[i]);

View File

@@ -1190,7 +1190,7 @@ ob_ide_read_blocks(int *idx)
{
cell n = POP(), cnt=n;
ucell blk = POP();
unsigned char *dest = (unsigned char *)POP();
unsigned char *dest = (unsigned char *)cell2pointer(POP());
struct ide_drive *drive = *(struct ide_drive **)idx;
IDE_DPRINTF("ob_ide_read_blocks %lx block=%ld n=%ld\n",