Hi,
While developing the wireless support for PS3, I'd noticed there were alignment
issues if we issued some wireless ioctl from 32bit userland to 64bit
kernel (ppc64 PS3 does have).
- IW_EV_LCP_LEN in 32bit userland and 64bit kernel differ
- offsetof(struct iw_point, length) differ
The former issue could be fixed if we added 'packed' attribute to
iw_event structure, but it would break existing 64bit userland. I have
no idea to resolve latter issue because the first member of struct
iw_point is a pointer.
Does anyone have idea to fix these issues?
(except compiling all userland apps in 64bit mode...)
The following is the output from a test code on my PS3.
> # cat test.c
> #include <stdio.h>
> #include <netdb.h>
> #include <linux/wireless.h>
> /* packed version */
> struct iw_event_p {
> __u16 len;
> __u16 cmd;
> union iwreq_data u;
> } __attribute__((packed));
>
> int main(void)
> {
> printf("IW_EV_LCP_LEN=%d offset=%d,%d\n",
> IW_EV_LCP_LEN,
> offsetof(struct iw_event, u),
> offsetof(struct iw_event_p, u));
> printf("iw_event=%d iw_event_p=%d iwreq_data=%d\n",
> sizeof(struct iw_event),
> sizeof(struct iw_event_p),
> sizeof(union iwreq_data));
>
> /* --- */
>
> printf("iw_point=%d length=%d flags=%d\n",
> sizeof(struct iw_point),
> offsetof(struct iw_point, length),
> offsetof(struct iw_point, flags));
> return 0;
> }
> # cc -m64 -o test_64 test.c; cc -o test_32 test.c
> # ./test_64
> IW_EV_LCP_LEN=8 offset=8,4
> iw_event=24 iw_event_p=20 iwreq_data=16
> iw_point=16 length=8 flags=10
> # ./test_32
> IW_EV_LCP_LEN=4 offset=4,4
> iw_event=20 iw_event_p=20 iwreq_data=16
> iw_point=8 length=4 flags=6
> #
regards
--
Masakazu MOKUNO
Hi,
> While developing the wireless support for PS3, I'd noticed there were alignment
> issues if we issued some wireless ioctl from 32bit userland to 64bit
> kernel (ppc64 PS3 does have).
>
> - IW_EV_LCP_LEN in 32bit userland and 64bit kernel differ
> - offsetof(struct iw_point, length) differ
Yeah, we're aware of them.
> The former issue could be fixed if we added 'packed' attribute to
> iw_event structure, but it would break existing 64bit userland. I have
> no idea to resolve latter issue because the first member of struct
> iw_point is a pointer.
>
> Does anyone have idea to fix these issues?
> (except compiling all userland apps in 64bit mode...)
Jean wants to fix them in userspace. In fact, if you upgrade your
userspace to the really latest version it *should* work. wpa_supplicant
still doesn't work, nor do most distribution's versions of network
manager because the fixes haven't been backported.
johannes
On Mon, Jul 09, 2007 at 02:03:23PM +0200, Johannes Berg wrote:
> Hi,
>
> > While developing the wireless support for PS3, I'd noticed there were alignment
> > issues if we issued some wireless ioctl from 32bit userland to 64bit
> > kernel (ppc64 PS3 does have).
> >
> > - IW_EV_LCP_LEN in 32bit userland and 64bit kernel differ
> > - offsetof(struct iw_point, length) differ
>
> Yeah, we're aware of them.
>
> > The former issue could be fixed if we added 'packed' attribute to
> > iw_event structure, but it would break existing 64bit userland. I have
> > no idea to resolve latter issue because the first member of struct
> > iw_point is a pointer.
> >
> > Does anyone have idea to fix these issues?
> > (except compiling all userland apps in 64bit mode...)
>
> Jean wants to fix them in userspace. In fact, if you upgrade your
> userspace to the really latest version it *should* work. wpa_supplicant
> still doesn't work, nor do most distribution's versions of network
> manager because the fixes haven't been backported.
You need :
Wireless Tools 29-pre20 or later
network manager 0.6.5 or later
Distro that have those versions :
Gentoo 2007.0
Debian unstable
Ubuntu Gutsy
OpenSuSE 10.3a5
We are getting there...
The situation with wpa_supplicant is most unfortunate,
fortunately x-supplicant should work properly, as it uses libiw.
> johannes
Thanks...
Jean
Hi
On Mon, 9 Jul 2007 09:46:32 -0700
Jean Tourrilhes <[email protected]> wrote:
> > Jean wants to fix them in userspace. In fact, if you upgrade your
> > userspace to the really latest version it *should* work. wpa_supplicant
> > still doesn't work, nor do most distribution's versions of network
> > manager because the fixes haven't been backported.
>
> You need :
> Wireless Tools 29-pre20 or later
I downloaded Wireless Tools 29 pre22 and its iwlist worked fine on my
PS3.
Thank you.
--
Masakazu MOKUNO