<br><br>
<div class="gmail_quote">On Wed, Feb 16, 2011 at 5:13 PM, Rajat Jain <span dir="ltr">&lt;<a href="mailto:rajatjain@juniper.net">rajatjain@juniper.net</a>&gt;</span> wrote:<br>
<blockquote style="BORDER-LEFT: #ccc 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" class="gmail_quote"><br>Hi,<br><br>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:<br>

<div class="im"><br>&gt;<br>&gt; if (port &gt; PIO_MASK) return NULL;<br>&gt;<br></div>Checks that the ioport number is within the range of ioports.<br>
<div class="im"><br>&gt;<br>&gt; return (void __iomem *) (unsigned long) (port + PIO_OFFSET);<br>&gt;<br></div>And if yes, offsets it by 0x10000 and returns the resulting address that shall be used as iomemory.<br></blockquote>

<div>Some places i have seen that directly IO port is typecasted to  (__iomem * ) and used as it is i.e. returned value is given to ioread and iowrite functions.Kindly explain why in some cases we dont add offset and in some cases we add??<br>
</div>
<div>Is it because in some board we need to memory map the port number and then read/write and in some boards we don&#39;t need to do that as we can directly access the port using arch specific functions??</div>
<div> </div>
<blockquote style="BORDER-LEFT: #ccc 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" class="gmail_quote"><br>Thanks,<br><br>Rajat Jain<br><br>________________________________________<br>From: <a href="mailto:kernelnewbies-bounces@kernelnewbies.org">kernelnewbies-bounces@kernelnewbies.org</a> [mailto:<a href="mailto:kernelnewbies-bounces@kernelnewbies.org">kernelnewbies-bounces@kernelnewbies.org</a>] On Behalf Of prabhu<br>
Sent: Wednesday, February 16, 2011 1:15 PM<br>To: kernelnewbies<br>Subject: iomem and ioports<br>
<div>
<div></div>
<div class="h5"><br>HI All,<br><br>I started to understand output of /proc/oiports and /proc/iomem. I confused to relate these two&#39;s output. <br><br>Below is the kernel source for Mapping of io-port to io-mem. Could anyone please explain below code.<br>
<br>/* We encode the physical PIO addresses (0-0xffff) into the<br>                                           (0-<br> * pointer by offsetting them with a constant (0x10000) and<br> * assuming that all the low addresses are always PIO. That means<br>
                                                            means<br> * we can do some sanity checks on the low bits, and don&#39;t<br> * need to just take things for granted.<br> */<br>#define PIO_OFFSET              0x10000UL<br>
#define PIO_MASK                0x0ffffUL<br>#define PIO_RESERVED            0x40000UL<br>void __iomem *ioport_map(unsigned long port, unsigned int nr) {<br>     __iomem<br>           if (port &gt; PIO_MASK) return NULL;<br>
           return (void __iomem *) (unsigned long) (port + PIO_OFFSET);<br>                        __iomem<br>}<br><br>Thanks,<br>Prabhu<br><br></div></div>_______________________________________________<br>Kernelnewbies mailing list<br>
<a href="mailto:Kernelnewbies@kernelnewbies.org">Kernelnewbies@kernelnewbies.org</a><br><a href="http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies" target="_blank">http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies</a><br>
</blockquote></div><br>