|
|
|
@ -33,43 +33,46 @@ long get_ram_size(long *base, long maxsize) |
|
|
|
|
long size; |
|
|
|
|
int i = 0; |
|
|
|
|
|
|
|
|
|
for (cnt = (maxsize / sizeof (long)) >> 1; cnt > 0; cnt >>= 1) { |
|
|
|
|
for (cnt = (maxsize / sizeof(long)) >> 1; cnt > 0; cnt >>= 1) { |
|
|
|
|
addr = base + cnt; /* pointer arith! */ |
|
|
|
|
sync (); |
|
|
|
|
sync(); |
|
|
|
|
save[i++] = *addr; |
|
|
|
|
sync (); |
|
|
|
|
sync(); |
|
|
|
|
*addr = ~cnt; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
addr = base; |
|
|
|
|
sync (); |
|
|
|
|
sync(); |
|
|
|
|
save[i] = *addr; |
|
|
|
|
sync (); |
|
|
|
|
sync(); |
|
|
|
|
*addr = 0; |
|
|
|
|
|
|
|
|
|
sync (); |
|
|
|
|
sync(); |
|
|
|
|
if ((val = *addr) != 0) { |
|
|
|
|
/* Restore the original data before leaving the function.
|
|
|
|
|
*/ |
|
|
|
|
sync (); |
|
|
|
|
/* Restore the original data before leaving the function. */ |
|
|
|
|
sync(); |
|
|
|
|
*addr = save[i]; |
|
|
|
|
for (cnt = 1; cnt < maxsize / sizeof(long); cnt <<= 1) { |
|
|
|
|
addr = base + cnt; |
|
|
|
|
sync (); |
|
|
|
|
sync(); |
|
|
|
|
*addr = save[--i]; |
|
|
|
|
} |
|
|
|
|
return (0); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for (cnt = 1; cnt < maxsize / sizeof (long); cnt <<= 1) { |
|
|
|
|
for (cnt = 1; cnt < maxsize / sizeof(long); cnt <<= 1) { |
|
|
|
|
addr = base + cnt; /* pointer arith! */ |
|
|
|
|
val = *addr; |
|
|
|
|
*addr = save[--i]; |
|
|
|
|
if (val != ~cnt) { |
|
|
|
|
size = cnt * sizeof (long); |
|
|
|
|
/* Restore the original data before leaving the function.
|
|
|
|
|
size = cnt * sizeof(long); |
|
|
|
|
/*
|
|
|
|
|
* Restore the original data |
|
|
|
|
* before leaving the function. |
|
|
|
|
*/ |
|
|
|
|
for (cnt <<= 1; cnt < maxsize / sizeof (long); cnt <<= 1) { |
|
|
|
|
for (cnt <<= 1; |
|
|
|
|
cnt < maxsize / sizeof(long); |
|
|
|
|
cnt <<= 1) { |
|
|
|
|
addr = base + cnt; |
|
|
|
|
*addr = save[--i]; |
|
|
|
|
} |
|
|
|
|