Thread (1 message) 1 message, 1 author, 2008-01-21

Re: : Emit event stream compat iw_point objects correctly.

From: Masakazu Mokuno <hidden>
Date: 2008-01-21 11:23:15
Also in: linux-wireless

Possibly related (same subject, not in this thread)

	Hi

Sorry for my intermittent posts.

On Thu, 10 Jan 2008 01:16:02 -0800 (PST)
David Miller [off-list ref] wrote:
From: Masakazu Mokuno <redacted>
Date: Thu, 27 Dec 2007 18:24:40 +0900
quoted
On ppc64 (PS3), IW_EV_LCP_LEN is 8, not 4.

include/linux/wireless.h:

#define IW_EV_LCP_LEN   (sizeof(struct iw_event) - sizeof(union iwreq_data))

where sizeof(struct iw_event) == 24, sizeof(union iwreq_data) == 16 on
PS3.
Here is a new version of the last patch (#12), it should handle
all of these cases properly now.

Let me know if you spot any more errors.

Thanks!

[WEXT]: Emit event stream entries correctly when compat.

Three major portions to this change:

1) Add IW_EV_COMPAT_LCP_LEN, IW_EV_COMPAT_POINT_OFF,
   and IW_EV_COMPAT_POINT_LEN helper defines.

2) Delete iw_stream_check_add_*(), they are unused.

3) Add iw_request_info argument to iwe_stream_add_*(), and use it to
   size the event and pointer lengths correctly depending upon whether
   IW_REQUEST_FLAG_COMPAT is set or not.

4) The mechanical transformations to the drivers and wireless stack
   bits to get the iw_request_info passed down into the routines
   modified in #3.

With help from Masakazu Mokuno

Signed-off-by: David S. Miller <davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org>
---
 drivers/net/wireless/airo.c                |   39 +++++---
 drivers/net/wireless/atmel.c               |   24 ++++-
 drivers/net/wireless/hostap/hostap.h       |    3 +-
 drivers/net/wireless/hostap/hostap_ap.c    |   32 +++---
 drivers/net/wireless/hostap/hostap_ioctl.c |   54 ++++++-----
 drivers/net/wireless/libertas/scan.c       |   35 ++++---
 drivers/net/wireless/orinoco.c             |   30 ++++--
 drivers/net/wireless/prism54/isl_ioctl.c   |   45 +++++----
 drivers/net/wireless/wl3501_cs.c           |   10 +-
 drivers/net/wireless/zd1201.c              |   21 +++--
 include/linux/wireless.h                   |   16 +++
 include/net/iw_handler.h                   |  150 ++++++++--------------------
 net/ieee80211/ieee80211_wx.c               |   44 +++++----
 net/mac80211/ieee80211_i.h                 |    5 +-
 net/mac80211/ieee80211_ioctl.c             |    2 +-
 net/mac80211/ieee80211_sta.c               |   59 ++++++-----
 16 files changed, 293 insertions(+), 276 deletions(-)
<snip>
quoted hunk
diff --git a/drivers/net/wireless/prism54/isl_ioctl.c b/drivers/net/wireless/prism54/isl_ioctl.c
index 6d80ca4..4dc0b5e 100644
--- a/drivers/net/wireless/prism54/isl_ioctl.c
+++ b/drivers/net/wireless/prism54/isl_ioctl.c
@@ -572,8 +572,9 @@ prism54_set_scan(struct net_device *dev, struct iw_request_info *info,
  */
 
 static char *
-prism54_translate_bss(struct net_device *ndev, char *current_ev,
-		      char *end_buf, struct obj_bss *bss, char noise)
+prism54_translate_bss(struct net_device *ndev, struct iw_request_info *info,
+		      char *current_ev, char *end_buf, struct obj_bss *bss,
+		      char noise)
 {
 	struct iw_event iwe;	/* Temporary buffer */
 	short cap;
<snip>
quoted hunk
@@ -2728,9 +2730,12 @@ prism2_ioctl_scan_req(struct net_device *ndev,
 	rvalue |= mgt_get_request(priv, DOT11_OID_BSSLIST, 0, NULL, &r);
 	bsslist = r.ptr;
 
+	info.cmd = PRISM54_HOSTAPD;
+	info.flags = 0;
+
 	/* ok now, scan the list and translate its info */
 	for (i = 0; i < min(IW_MAX_AP, (int) bsslist->nr); i++)
-		current_ev = prism54_translate_bss(ndev, current_ev,
+		current_ev = prism54_translate_bss(ndev, current_ev, &info,
The order of the arguments is wrong.

current_ev = prism54_translate_bss(ndev, &info, current_ev,
 						   extra + IW_SCAN_MAX_DATA,
 						   &(bsslist->bsslist[i]),
 						   noise);
-- 
Masakazu MOKUNO
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help