lkml.org 
[lkml]   [2007]   [May]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [PATCH] pcmcia: ppc64 needs 64-bit ioaddr_t
    On Sat, 12 May 2007 09:31:05 -0500
    olof@lixom.net (Olof Johansson) wrote:

    > ppc64 really needs ioaddr_t to be 64-bit, since I/O addresses really
    > are MMIO addresses, and remapped to a high range.
    >
    > While the type is exported to userspace, there hasn't been any platforms
    > with PCMCIA on 64-bit powerpc until now, so changing it won't regress
    > any existing users.
    >
    >
    > Signed-off-by: Olof Johansson <olof@lixom.net>
    >
    > Index: 2.6.21/include/pcmcia/cs_types.h
    > ===================================================================
    > --- 2.6.21.orig/include/pcmcia/cs_types.h
    > +++ 2.6.21/include/pcmcia/cs_types.h
    > @@ -21,12 +21,17 @@
    > #include <sys/types.h>
    > #endif
    >
    > +#if defined(__powerpc64__)
    > +/* I/O addresses are really MMIO addresses on PPC, and can thus be 64 bits */
    > +typedef unsigned long ioaddr_t;
    > +#else
    > #if defined(__arm__) || defined(__mips__)
    > /* This (ioaddr_t) is exposed to userspace & hence cannot be changed. */
    > typedef u_int ioaddr_t;
    > #else
    > typedef u_short ioaddr_t;
    > #endif
    > +#endif
    > typedef unsigned long kio_addr_t;
    >
    > typedef u_short socket_t;

    Well that's some pretty sad code you've found there. The kernel surely has
    some appropriate type to use here without us having to invent a new one.
    But I suspect if we were to rationalise things in there it will get messy.

    I think your patch can be cast more neatly if we use #elif:

    --- a/include/pcmcia/cs_types.h~pcmcia-ppc64-needs-64-bit-ioaddr_t
    +++ a/include/pcmcia/cs_types.h
    @@ -21,12 +21,16 @@
    #include <sys/types.h>
    #endif

    -#if defined(__arm__) || defined(__mips__)
    +#if defined(__powerpc64__)
    +/* I/O addresses are really MMIO addresses on PPC, and can thus be 64 bits */
    +typedef unsigned long ioaddr_t;
    +#elif defined(__arm__) || defined(__mips__)
    /* This (ioaddr_t) is exposed to userspace & hence cannot be changed. */
    typedef u_int ioaddr_t;
    #else
    typedef u_short ioaddr_t;
    #endif
    +
    typedef unsigned long kio_addr_t;

    typedef u_short socket_t;
    _
    Also, I wonder if `unsigned long' is the correct type to use here. 32-bit
    userspace will treat it as 32-bit and 64-bit userspace will treat it as
    64-bit.

    Would it be better to use uint64_t here?

    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2007-05-15 00:11    [W:0.034 / U:29.696 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site