iomem and ioports
Rajat Jain
rajatjain at juniper.net
Wed Feb 16 06:43:33 EST 2011
Hi,
This code says that there are 0x10000 possible ioports i.e. in the range (0 - 0xFFFF). To map these into iomemory, simply an address = (0x10000 + ioport num) is used. Thus this code:
>
> if (port > PIO_MASK) return NULL;
>
Checks that the ioport number is within the range of ioports.
>
> return (void __iomem *) (unsigned long) (port + PIO_OFFSET);
>
And if yes, offsets it by 0x10000 and returns the resulting address that shall be used as iomemory.
Thanks,
Rajat Jain
________________________________________
From: kernelnewbies-bounces at kernelnewbies.org [mailto:kernelnewbies-bounces at kernelnewbies.org] On Behalf Of prabhu
Sent: Wednesday, February 16, 2011 1:15 PM
To: kernelnewbies
Subject: iomem and ioports
HI All,
I started to understand output of /proc/oiports and /proc/iomem. I confused to relate these two's output.
Below is the kernel source for Mapping of io-port to io-mem. Could anyone please explain below code.
/* We encode the physical PIO addresses (0-0xffff) into the
(0-
* pointer by offsetting them with a constant (0x10000) and
* assuming that all the low addresses are always PIO. That means
means
* we can do some sanity checks on the low bits, and don't
* need to just take things for granted.
*/
#define PIO_OFFSET 0x10000UL
#define PIO_MASK 0x0ffffUL
#define PIO_RESERVED 0x40000UL
void __iomem *ioport_map(unsigned long port, unsigned int nr) {
__iomem
if (port > PIO_MASK) return NULL;
return (void __iomem *) (unsigned long) (port + PIO_OFFSET);
__iomem
}
Thanks,
Prabhu
More information about the Kernelnewbies
mailing list