I am trying to access specific memory locations and return the value at that location (read a status register). My code does not return the expected value when executed.

I am running this on a Linux 2.4.9 embedded computer.

My suspision is the data I am passing into the mmap() function is not correct.

This code compiled without errors.

The variable want_value is passed in as the address that I would like to view. The return value should be the data in that location.
Code:
unsigned long memory(unsigned long want_value)
{
int fd;
unsigned long *data, ret;

fd = open("/dev/mem", O_RDWR | O_SYNC); //file descriptor

data = mmap(((unsigned long *)want_value), 4, PROT_READ, MAP_SHARED, fd, 0); // returns actual memory address

ret = *((unsigned long *)(data));

munmap (((unsigned long *)want_value), 4);

close(fd);

return ret;
}
Thank you for any suggestions.
Matt