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@xxxxxxxxxxxxxxxxx [mailto:kernelnewbies-bounces@xxxxxxxxxxxxxxxxx] 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 _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies