datum *
memTestDevice(volatile datum * baseAddress, unsigned long nBytes)
{
unsigned long offset;
unsigned long nWords = nBytes / sizeof(datum);
datum pattern;
datum antipattern;
/*
* Fill memory with a known pattern.
*/
for (pattern = 1, offset = 0; offset
<
nWords; pattern++, offset++)
{
baseAddress[offset] = pattern;
}
/*
* Check each location and invert it for
the second pass.
*/
for (pattern = 1, offset = 0; offset
<
nWords; pattern++, offset++)
{
if (baseAddress[offset] != pattern)
{
return ((datum *) &baseAddress[offset]);
}
antipattern = ~pattern;
baseAddress[offset] = antipattern;
}
/*
* Check each location for the inverted pattern and zero it.
*/
for (pattern = 1, offset = 0; offset
<
nWords; pattern++, offset++)
{
antipattern = ~pattern;
if
(baseAddress[offset] != antipattern)
{
return ((datum *) &baseAddress[offset]);
}
baseAddress[offset] = 0;
}
return (NULL);
} /* memTestDevice() */
|