SOURCES: ipw2200-1.1.1-diversity.patch (NEW), ipw2200-1.1.1-fw_end...

arekm arekm at pld-linux.org
Sat Mar 25 14:23:51 CET 2006


Author: arekm                        Date: Sat Mar 25 13:23:51 2006 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- new

---- Files affected:
SOURCES:
   ipw2200-1.1.1-diversity.patch (NONE -> 1.1)  (NEW), ipw2200-1.1.1-fw_endian.patch (NONE -> 1.1)  (NEW), ipw2200-1.1.1-rtap_iface.patch (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/ipw2200-1.1.1-diversity.patch
diff -u /dev/null SOURCES/ipw2200-1.1.1-diversity.patch:1.1
--- /dev/null	Sat Mar 25 14:23:51 2006
+++ SOURCES/ipw2200-1.1.1-diversity.patch	Sat Mar 25 14:23:46 2006
@@ -0,0 +1,24 @@
+Fix problem with diversity algorithm causing disassocaition in 1.1.1
+
+In 1.1.1 a patch went in which enables the "slow diversity" algorithm.
+This algorithm forces one antenna or the other, if the background noise is
+significantly quieter in one than the other.  It favors the quieter
+antenna, and won't kick in unless the difference is significant.
+
+This is showing to be problematic in some environments and is reverted
+by this patch.
+
+Signed-off-by: James Ketrenos <jketreno at linux.intel.com>
+
+diff -Nupr ipw2200-1.1.1-orig/ipw2200.c ipw2200-1.1.1/ipw2200.c
+--- ipw2200-1.1.1-orig/ipw2200.c	2006-03-08 06:42:55.000000000 -0600
++++ ipw2200-1.1.1/ipw2200.c	2006-03-08 14:32:20.000000000 -0600
+@@ -10198,7 +10198,7 @@ static void init_sys_config(struct ipw_s
+ 	sys_config->disable_unicast_decryption = 1;
+ 	sys_config->exclude_multicast_unencrypted = 0;
+ 	sys_config->disable_multicast_decryption = 1;
+-	sys_config->antenna_diversity = CFG_SYS_ANTENNA_SLOW_DIV;
++	sys_config->antenna_diversity = CFG_SYS_ANTENNA_BOTH;
+ 	sys_config->pass_crc_to_host = 0;	/* TODO: See if 1 gives us FCS */
+ 	sys_config->dot11g_auto_detection = 0;
+ 	sys_config->enable_cts_to_self = 0;

================================================================
Index: SOURCES/ipw2200-1.1.1-fw_endian.patch
diff -u /dev/null SOURCES/ipw2200-1.1.1-fw_endian.patch:1.1
--- /dev/null	Sat Mar 25 14:23:51 2006
+++ SOURCES/ipw2200-1.1.1-fw_endian.patch	Sat Mar 25 14:23:46 2006
@@ -0,0 +1,75 @@
+ipw2200: Fix endian issues with v3.0 fw image format
+
+This patch corrects endian issues with the v3.0 fw image format.
+
+ ipw2200.c |   23 ++++++++++++-----------
+ 1 file changed, 12 insertions(+), 11 deletions(-)
+
+diff -Nupr ipw2200-1.1.1-orig/ipw2200.c ipw2200-1.1.1/ipw2200.c
+--- ipw2200-1.1.1-orig/ipw2200.c	2006-03-08 06:42:55.000000000 -0600
++++ ipw2200-1.1.1/ipw2200.c	2006-03-08 13:30:32.000000000 -0600
+@@ -3194,10 +3194,10 @@ static int ipw_reset_nic(struct ipw_priv
+ }
+ 
+ struct ipw_fw {
+-	u32 ver;
+-	u32 boot_size;
+-	u32 ucode_size;
+-	u32 fw_size;
++	__le32 ver;
++	__le32 boot_size;
++	__le32 ucode_size;
++	__le32 fw_size;
+ 	u8 data[0];
+ };
+ 
+@@ -3221,8 +3221,8 @@ static int ipw_get_fw(struct ipw_priv *p
+ 
+ 	fw = (void *)(*raw)->data;
+ 
+-	if ((*raw)->size < sizeof(*fw) +
+-	    fw->boot_size + fw->ucode_size + fw->fw_size) {
++	if ((*raw)->size < sizeof(*fw) + le32_to_cpu(fw->boot_size) +
++	    le32_to_cpu(fw->ucode_size) + le32_to_cpu(fw->fw_size)) {
+ 		IPW_ERROR("%s is too small or corrupt (%zd)\n",
+ 			  name, (*raw)->size);
+ 		return -EINVAL;
+@@ -3324,8 +3324,9 @@ static int ipw_load(struct ipw_priv *pri
+ 
+ 	fw = (void *)raw->data;
+ 	boot_img = &fw->data[0];
+-	ucode_img = &fw->data[fw->boot_size];
+-	fw_img = &fw->data[fw->boot_size + fw->ucode_size];
++	ucode_img = &fw->data[le32_to_cpu(fw->boot_size)];
++	fw_img = &fw->data[le32_to_cpu(fw->boot_size) +
++			   le32_to_cpu(fw->ucode_size)];
+ 
+ 	if (rc < 0)
+ 		goto error;
+@@ -3359,7 +3360,7 @@ static int ipw_load(struct ipw_priv *pri
+ 			IPW_NIC_SRAM_UPPER_BOUND - IPW_NIC_SRAM_LOWER_BOUND);
+ 
+ 	/* DMA the initial boot firmware into the device */
+-	rc = ipw_load_firmware(priv, boot_img, fw->boot_size);
++	rc = ipw_load_firmware(priv, boot_img, le32_to_cpu(fw->boot_size));
+ 	if (rc < 0) {
+ 		IPW_ERROR("Unable to load boot firmware: %d\n", rc);
+ 		goto error;
+@@ -3381,7 +3382,7 @@ static int ipw_load(struct ipw_priv *pri
+ 	ipw_write32(priv, IPW_INTA_RW, IPW_INTA_BIT_FW_INITIALIZATION_DONE);
+ 
+ 	/* DMA the ucode into the device */
+-	rc = ipw_load_ucode(priv, ucode_img, fw->ucode_size);
++	rc = ipw_load_ucode(priv, ucode_img, le32_to_cpu(fw->ucode_size));
+ 	if (rc < 0) {
+ 		IPW_ERROR("Unable to load ucode: %d\n", rc);
+ 		goto error;
+@@ -3391,7 +3392,7 @@ static int ipw_load(struct ipw_priv *pri
+ 	ipw_stop_nic(priv);
+ 
+ 	/* DMA bss firmware into the device */
+-	rc = ipw_load_firmware(priv, fw_img, fw->fw_size);
++	rc = ipw_load_firmware(priv, fw_img, le32_to_cpu(fw->fw_size));
+ 	if (rc < 0) {
+ 		IPW_ERROR("Unable to load firmware: %d\n", rc);
+ 		goto error;

================================================================
Index: SOURCES/ipw2200-1.1.1-rtap_iface.patch
diff -u /dev/null SOURCES/ipw2200-1.1.1-rtap_iface.patch:1.1
--- /dev/null	Sat Mar 25 14:23:51 2006
+++ SOURCES/ipw2200-1.1.1-rtap_iface.patch	Sat Mar 25 14:23:46 2006
@@ -0,0 +1,2584 @@
+Enable rtap interface for RF promiscuous mode while associated
+
+With this patch, a new promiscuous mode is enabled.  Once applied, 
+when you load the module with the rtap_iface=1 module parameter, two 
+interfaces will be created (instead of just one). 
+
+The second interface is prefixed 'rtap' and provides received 
+802.11 frames on the current channel to user space in a radiotap header 
+format.
+
+Example usage:
+
+	% modprobe ipw2200 rtap_iface=1
+	% iwconfig eth1 essid MyNetwork
+	% dhcpcd eth1
+	% tcpdump -i rtap0
+
+If you do not specify 'rtap_iface=1' then the rtap interface will 
+not be created and you will need to turn it on via:
+	
+	% echo 1 > /sys/bus/pci/drivers/ipw2200/*/rtap_iface
+
+You can filter out what type of information is passed to user space via 
+the rtap_filter sysfs entry.  Currently you can tell the driver to 
+transmit just the headers (which will provide the RADIOTAP and IEEE 
+802.11 header but not the payload), to filter based on frame control 
+type (Management, Control, or Data), and whether to report transmitted 
+frames, received frames, or both.
+
+The transmit frame reporting is based on a patch by Stefan Rompf.
+
+Example usage:
+
+First, see what filter bits are available:
+
+	% ./filters
+
+Now set the filter to only send headers (0x7), don't report Tx'd frames 
+(0x10), and don't report data frames (0x100):
+
+	% echo 0x117 > /sys/bus/pci/drivers/ipw2200/*/rtap_filter
+
+All your packets are belong to us:
+
+	% tethereal -n -i rtap0
+
+As a side note, you can see a sample user space application to pull the 
+packets in user space in the file ipwstats.c.  Check the start of that 
+file for information on building and running that utility.
+
+Signed-off-by: James Ketrenos <jketreno at linux.intel.com>
+
+---
+ Makefile                |   24 +
+ filters                 |   56 +++
+ in-tree/Kconfig.ipw2200 |   83 +++++
+ ipw2200.c               |  661 ++++++++++++++++++++++++++++++++++++++++--
+ ipw2200.h               |   83 +++++
+ ipwstats.c              |  752 ++++++++++++++++++++++++++++++++++++++++++++++++
+ ipwstats.cc             |  571 ++++++++++++++++++++++++++++++++++++
+ 7 files changed, 2192 insertions(+), 38 deletions(-)
+diff -Nupr ipw2200-1.1.1/Makefile ipw2200-1.1.1-rtap/Makefile
+--- ipw2200-1.1.1/Makefile	2006-03-08 06:42:54.000000000 -0600
++++ ipw2200-1.1.1-rtap/Makefile	2006-03-23 15:07:00.000000000 -0600
+@@ -28,7 +28,16 @@ CONFIG_IPW2200_MONITOR=y
+ 
+ # If you are interested in using radiotap headers in monitor mode,
+ # simply uncomment:
+-#CONFIG_IEEE80211_RADIOTAP=y
++#
++# NOTE:  To use RADIOTAP you must also enable MONITOR above.
++CONFIG_IEEE80211_RADIOTAP=y
++
++# The above monitor mode provides standard monitor mode.  The following
++# will create a new interface (named rtap%d) which will be sent all
++# 802.11 frames received on the interface
++#
++# NOTE:  To use PROMISCUOUS you must also enable MONITOR above.
++CONFIG_IPW2200_PROMISCUOUS=y
+ 
+ endif
+ 
+@@ -83,6 +92,9 @@ EXTRA_CFLAGS += -DCONFIG_IPW2200_MONITOR
+ ifdef CONFIG_IEEE80211_RADIOTAP
+ EXTRA_CFLAGS += -DCONFIG_IEEE80211_RADIOTAP=$(CONFIG_IEEE80211_RADIOTAP)
+ endif
++ifdef CONFIG_IPW2200_PROMISCUOUS
++EXTRA_CFLAGS += -DCONFIG_IPW2200_PROMISCUOUS=$(CONFIG_IPW2200_PROMISCUOUS)
++endif
+ endif
+ ifdef CONFIG_IPW_QOS
+ EXTRA_CFLAGS += -DCONFIG_IPW_QOS=$(CONFIG_IPW_QOS)
+@@ -132,7 +144,7 @@ check_inc:
+ 	@[ -e $(IEEE80211_INC)/net/ieee80211.h ]
+ 
+ clean:
+-	rm -f *.mod.c *.mod *.o *.ko .*.cmd .*.flags .lst *.lst
++	rm -f *.mod.c *.mod *.o *.ko .*.cmd .*.flags .lst *.lst ipwstats
+ 	rm -rf $(PWD)/tmp
+ 	for file in *.{c,h}; do \
+ 		sed -i -e "s:\ *$$::g" -e "s:\t*$$::g" $$file; \
+@@ -184,6 +196,7 @@ patch_kernel:
+ "obj-\$$(CONFIG_IPW2200)         += ipw2200.o" >> \
+ 		${KSRC}/drivers/net/wireless/Makefile)
+ 	@cp README.ipw2200 ${KSRC}/Documentation/networking
++	@cp ipw2200.{c,h} ${KSRC}/drivers/net/wireless
+ 	@cp in-tree/Kconfig.ipw2200 ${KSRC}/drivers/net/wireless
+ 	@(grep -q "Kconfig\.ipw2200" ${KSRC}/drivers/net/wireless/Kconfig || \
+ 	grep -q "IPW2200" ${KSRC}/drivers/net/wireless/Kconfig || \
+@@ -205,7 +218,7 @@ uninstall:
+ endif # End of internal build
+ 
+ 
+-.PHONY: TAGS tags check_inc
++.PHONY: TAGS tags check_inc apps
+ 
+ RCS_FIND_IGNORE := \( -name SCCS -o -name BitKeeper -o -name .svn -o -name CVS \) -prune -o
+ define all-sources
+@@ -219,3 +232,8 @@ tags:
+ 	CTAGSF=`ctags --version | grep -i exuberant >/dev/null && echo "-I __initdata,__exitdata,EXPORT_SYMBOL,EXPORT_SYMBOL_NOVERS"`; \
+ 	$(all-sources) | xargs ctags $$CTAGSF -a
+ 
++apps : ipwstats
++
++ipwstats : ipwstats.c
++	gcc -Wall -I/usr/src/linux/include/ -o $@ $^ $$(pkg-config gtk+-2.0 --cflags --libs)
++
+diff -Nupr ipw2200-1.1.1/filters ipw2200-1.1.1-rtap/filters
+--- ipw2200-1.1.1/filters	1969-12-31 18:00:00.000000000 -0600
++++ ipw2200-1.1.1-rtap/filters	2006-03-22 15:01:37.000000000 -0600
+@@ -0,0 +1,56 @@
++#!/bin/sh
++MODULE="ipw2200"
++FILTER_PATH="/sys/bus/pci/drivers/${MODULE}/*/rtap_filter"
++LEVEL=""
++
++function get_level()
++{
++	if [ ! -e ${FILTER_PATH} ]; then
++		LEVEL=""
++	else
++		LEVEL=`cat ${FILTER_PATH}`
++	fi
++}
++
++function bit()
++{
++	VAL=1
++	for ((i = 0; i < $2; i++)); do
++		VAL=$((VAL*2))
++	done
++	SET="$((VAL & $3))"
++	if [ "${SET}" = "0" ]; then
++		SET=" "
++	else
++		SET="*"
++	fi
++	printf "%-20s\t\t0x%08X [%s] %d\n" $1 $VAL "$SET" $VAL
++}
++
++IFS="
++"
++LEVELS=$(sed -ne "s#.*IPW_PROM_\(.*\)[ \t]*=[ \t]*(1[ \t]*<<[ \t]*\(.*\)).*#\1 \2#p" ipw2200.h)
++get_level
++
++if [ ! -z ${LEVEL} ]; then
++	LEV=$((LEVEL))
++else
++	LEV=0
++fi
++printf "%-20s\t\t%-10s Set Decimal\n" "Description" "Hex"
++for i in $LEVELS; do
++	IFS=" 
++"
++	bit $i ${LEV}
++done
++
++if [ ! -z ${LEVEL} ]; then
++	printf "rtap_filter = ${LEVEL} (* = enabled)\n"
++else
++	printf "${MODULE} not currently loaded.  rtap_filter not set.\n"
++fi
++cat << EOF
++Example usage:
++  \$((0x1 + 0x2 + 0x4 ...)) > /sys/bus/pci/drivers/ipw2200/*/rtap_filter
++EOF
++
+diff -Nupr ipw2200-1.1.1/in-tree/Kconfig.ipw2200 ipw2200-1.1.1-rtap/in-tree/Kconfig.ipw2200
+--- ipw2200-1.1.1/in-tree/Kconfig.ipw2200	1969-12-31 18:00:00.000000000 -0600
++++ ipw2200-1.1.1-rtap/in-tree/Kconfig.ipw2200	2006-03-21 09:19:58.000000000 -0600
+@@ -0,0 +1,83 @@
++config IPW2200
++	tristate "Intel PRO/Wireless 2200BG and 2915ABG Network Connection"
++	depends on IEEE80211 && PCI && NET_RADIO
++	select FW_LOADER
++	---help---
++          A driver for the Intel PRO/Wireless 2200BG and 2915ABG Network
++	  Connection adapters. 
++
++          See <file:Documentation/networking/README.ipw2200> for 
++	  information on the capabilities currently enabled in this 
++	  driver and for tips for debugging issues and problems.
++
++	  In order to use this driver, you will need a firmware image for it.
++          You can obtain the firmware from
++	  <http://ipw2200.sf.net/>.  See the above referenced README.ipw2200 
++	  for information on where to install the firmare images.
++
++          You will also very likely need the Wireless Tools in order to
++          configure your card:
++
++          <http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html>.
++ 
++          If you want to compile the driver as a module ( = code which can be
++          inserted in and remvoed from the running kernel whenever you want),
++          say M here and read <file:Documentation/modules.txt>.  The module
++          will be called ipw2200.ko.
++
++config IPW2200_DEBUG
++	bool "Enable full debugging output in IPW2200 module."
++	depends on IPW2200
++	---help---
++	  This option will enable debug tracing output for the IPW2200.  
++
++	  This will result in the kernel module being ~100k larger.  You can 
++	  control which debug output is sent to the kernel log by setting the 
++	  value in 
++
++	  /sys/bus/pci/drivers/ipw2200/debug_level
++
++	  This entry will only exist if this option is enabled.
++
++	  To set a value, simply echo an 8-byte hex value to the same file:
++
++	  % echo 0x00000FFO > /sys/bus/pci/drivers/ipw2200/debug_level
++
++	  You can find the list of debug mask values in 
++	  drivers/net/wireless/ipw2200.h
++
++	  If you are not trying to debug or develop the IPW2200 driver, you 
++	  most likely want to say N here.
++
++config IPW2200_MONITOR
++        bool "Enable RF monitor mode"
++        depends on IPW2200
++        ---help---
++	  Enables monitor (aka promiscuous) mode support for the ipw2200 
++	  driver.  With this feature compiled into the driver, you can 
++	  switch to monitor mode via the Wireless Tool's mode command.
++	  While in monitor mode, no packets can be sent.
++
++config IPW2200_PROMISCUOUS
++	bool "Enable creation of a RF radiotap promiscuous interface."
++	depends on IPW2200
++	select IEEE80211_RADIOTAP
++	---help---
++          Enables the creation of a second interface prefixed 'rtap'. 
++          This second interface will provide every received in radiotap
++	  format.
++
++          This is useful for performing wireless network analysis while
++          maintaining an active association.
++
++          Example usage:
++
++            % modprobe ipw2200 rtap_iface=1
++            % ifconfig rtap0 up
++            % tethereal -i rtap0
++
++          If you do not specify 'rtap_iface=1' as a module parameter then 
++          the rtap interface will not be created and you will need to turn 
++          it on via sysfs:
++	
++            % echo 1 > /sys/bus/pci/drivers/ipw2200/*/rtap_iface
+diff -Nupr ipw2200-1.1.1/ipw2200.c ipw2200-1.1.1-rtap/ipw2200.c
+--- ipw2200-1.1.1/ipw2200.c	2006-03-08 06:42:55.000000000 -0600
++++ ipw2200-1.1.1-rtap/ipw2200.c	2006-03-23 17:27:14.000000000 -0600
+@@ -33,7 +33,38 @@
+ #include "ipw2200.h"
+ #include <linux/version.h>
+ 
+-#define IPW2200_VERSION "1.1.1"
++
++#ifdef CONFIG_IPW2200_DEBUG
++#define VD "d"
++#else
++#define VD
++#endif
++
++#ifdef CONFIG_IPW2200_MONITOR
++#define VM "m"
++#else
++#define VM
++#endif
++
++#ifdef CONFIG_IPW2200_PROMISCUOUS
++#define VP "p"
++#else
++#define VP
++#endif
++
++#ifdef CONFIG_IEEE80211_RADIOTAP
++#define VR "r"
++#else
++#define VR
++#endif
++
++#ifdef CONFIG_IPW2200_QOS
++#define VQ "q"
++#else
++#define VQ
++#endif
++
++#define IPW2200_VERSION "1.1.1k" VD VM VP VR VQ
+ #define DRV_DESCRIPTION	"Intel(R) PRO/Wireless 2200/2915 Network Driver"
+ #define DRV_COPYRIGHT	"Copyright(c) 2003-2006 Intel Corporation"
+ #define DRV_VERSION     IPW2200_VERSION
+@@ -46,7 +77,9 @@ MODULE_AUTHOR(DRV_COPYRIGHT);
+ MODULE_LICENSE("GPL");
+ 
+ static int cmdlog = 0;
++#ifdef CONFIG_IPW2200_DEBUG
+ static int debug = 0;
++#endif
+ static int channel = 0;
+ static int mode = 0;
+ 
+@@ -62,6 +95,11 @@ static const char ipw_modes[] = {
+ 	'a', 'b', 'g', '?'
+ };
+ 
++#ifdef CONFIG_IPW2200_PROMISCUOUS
++static int rtap_iface = 0;     /* def: 0 -- do not create rtap interface */
++#endif
++
++
+ #ifdef CONFIG_IPW_QOS
+ static int qos_enable = 0;
+ static int qos_burst_enable = 0;
+@@ -1286,6 +1324,113 @@ static ssize_t show_cmd_log(struct devic
+ 
+ static DEVICE_ATTR(cmd_log, S_IRUGO, show_cmd_log, NULL);
+ 
++#ifdef CONFIG_IPW2200_PROMISCUOUS
++static void ipw_prom_free(struct ipw_priv *priv);
++static int ipw_prom_alloc(struct ipw_priv *priv);
++static ssize_t store_rtap_iface(struct device *d,
++#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,12)
++			 struct device_attribute *attr,
++#endif
++			 const char *buf, size_t count)
++{
++	struct ipw_priv *priv = dev_get_drvdata(d);
++	int rc = 0;
++
++	if (count < 1)
++		return -EINVAL;
++
++	switch (buf[0]) {
++	case '0':
++		if (!rtap_iface)
++			return count;
++
++		if (netif_running(priv->prom_net_dev)) {
++			IPW_WARNING("Interface is up.  Cannot unregister.\n");
++			return count;
++		}
++
++		ipw_prom_free(priv);
++		rtap_iface = 0;
++		break;
++
++	case '1':
++		if (rtap_iface)
++			return count;
++
++		rc = ipw_prom_alloc(priv);
++		if (!rc)
++			rtap_iface = 1;
++		break;
++
++	default:
++		return -EINVAL;
++	}
++
++	if (rc) {
++		IPW_ERROR("Failed to register promiscuous network "
++			  "device (error %d).\n", rc);
++	}
++
++	return count;
++}
++
++static ssize_t show_rtap_iface(struct device *d,
++#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,12)
++			struct device_attribute *attr,
++#endif
++			char *buf)
++{
++	struct ipw_priv *priv = dev_get_drvdata(d);
++	if (rtap_iface)
++		return sprintf(buf, "%s", priv->prom_net_dev->name);
++	else {
++		buf[0] = '-';
++		buf[1] = '1';
++		buf[2] = '\0';
++		return 3;
++	}
++}
++
++static DEVICE_ATTR(rtap_iface, S_IWUSR | S_IRUSR, show_rtap_iface,
++		   store_rtap_iface);
++
++static ssize_t store_rtap_filter(struct device *d,
++#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,12)
++			 struct device_attribute *attr,
++#endif
++			 const char *buf, size_t count)
++{
++	struct ipw_priv *priv = dev_get_drvdata(d);
++
++	if (!priv->prom_priv) {
++		IPW_ERROR("Attempting to set filter without "
++			  "rtap_iface enabled.\n");
++		return -EPERM;
++	}
++
++	priv->prom_priv->filter = simple_strtol(buf, NULL, 0);
++
++	IPW_DEBUG_INFO("Setting rtap filter to " BIT_FMT16 "\n",
++		       BIT_ARG16(priv->prom_priv->filter));
++
++	return count;
++}
++
++static ssize_t show_rtap_filter(struct device *d,
++#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,12)
++			struct device_attribute *attr,
++#endif
++			char *buf)
++{
++	struct ipw_priv *priv = dev_get_drvdata(d);
++	return sprintf(buf, "0x%04X",
++		       priv->prom_priv ? priv->prom_priv->filter : 0);
++}
++
++static DEVICE_ATTR(rtap_filter, S_IWUSR | S_IRUSR, show_rtap_filter,
++		   store_rtap_filter);
++#endif
++
+ static ssize_t show_scan_age(struct device *d,
+ #if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,12)
+ 			     struct device_attribute *attr,
+@@ -2117,16 +2262,11 @@ static int ipw_send_host_complete(struct
+ 	return ipw_send_cmd_simple(priv, IPW_CMD_HOST_COMPLETE);
+ }
+ 
+-static int ipw_send_system_config(struct ipw_priv *priv,
+-				  struct ipw_sys_config *config)
++static int ipw_send_system_config(struct ipw_priv *priv)
+ {
+-	if (!priv || !config) {
+-		IPW_ERROR("Invalid args\n");
+-		return -1;
+-	}
+-
+-	return ipw_send_cmd_pdu(priv, IPW_CMD_SYSTEM_CONFIG, sizeof(*config),
+-				config);
++	return ipw_send_cmd_pdu(priv, IPW_CMD_SYSTEM_CONFIG,
++				sizeof(priv->sys_config),
++				&priv->sys_config);
+ }
+ 
+ static int ipw_send_ssid(struct ipw_priv *priv, u8 * ssid, int len)
+@@ -3592,7 +3732,8 @@ static int ipw_queue_tx_init(struct ipw_
+  * @param txq
+  */
+ static void ipw_queue_tx_free_tfd(struct ipw_priv *priv,
+-				  struct clx2_tx_queue *txq)
++				  struct clx2_tx_queue *txq,
<<Diff was trimmed, longer than 597 lines>>


More information about the pld-cvs-commit mailing list