Compiling driver for Fedora Core 1 -- SOLUTION

Daniel Roesen <[email protected]>
Newsgroups gmane.linux.drivers.prism54.user
Message-ID <[email protected]>
Hi,

as many people know (suffer from), it's impossible to build the prism54
driver for a FC1 (Fedora Core 1) kernel since 2004-03-18. I've finally
was annoyed enough that I sat down and found the two root problems:

- FC1 kernels do have Wireless Extensions 15, but someone removed the
  compatibility workarounds in prism54 in CVS on 2004-03-18. This gives
  the "spy_data" breakage... WE15 doesn't have the iw_spy
  infrastructure.

- FC1 kernels are based on 2.4.22 but DO have stuff of later kernels, so
  Margit's prismcompat24.h has a workaround "too much" as it keyes off
  "LINUX_VERSION_CODE < KERNEL_VERSION(2,4,23)" which breaks in this
  special case.

I have attached a patch which fixes both problems -- it rips out the
iw_spy stuff to make prism54 compatible again with WE15, and removes
the redefinitions of free_netdev/pci_name/irqreturn_t of
prismcompat24.h. Driver now builds and works beautiful with "vanilla"
FC1 kernel kernel-2.4.22-1.2199.nptl here. Patch is against
prism54 1.2.

Also, I fetched Dag Wieers' SRPM and updated it to prism54 1.2 and
included the patch. You can find the SRPM and i686 RPMs here:

http://www.cluenet.de/people/dr/RPMS/fc1/kernel-module-prism54-1.2-1_2.4.22_1.2199.nptl.src.rpm
http://www.cluenet.de/people/dr/RPMS/fc1/kernel-module-prism54-1.2-1_2.4.22_1.2199.nptl.i686.rpm

I've submitted the changes to Dag... perhaps he will now re-start
building driver packages again.


Best regards,
Daniel

_______________________________________________
Prism54-users mailing list
[email protected]
http://prism54.org/mailman/listinfo/prism54-users
prism54-1.2-fc1.patch (text/plain, 4.3 KB)
diff -urN prism54-1.2.orig/ksrc/isl_ioctl.c prism54-1.2/ksrc/isl_ioctl.c
--- prism54-1.2.orig/ksrc/isl_ioctl.c	2004-05-29 17:06:49.000000000 +0200
+++ prism54-1.2/ksrc/isl_ioctl.c	2004-08-15 16:35:54.000000000 +0200
@@ -2006,31 +2006,6 @@
 	return (ret ? ret : -EINPROGRESS);
 }
 
-static int
-prism54_set_spy(struct net_device *ndev,
-		struct iw_request_info *info,
-		union iwreq_data *uwrq, char *extra)
-{
-	islpci_private *priv = netdev_priv(ndev);
-	u32 u, oid = OID_INL_CONFIG;
-
-	down_write(&priv->mib_sem);
-	mgt_get(priv, OID_INL_CONFIG, &u);
-
-	if ((uwrq->data.length == 0) && (priv->spy_data.spy_number > 0))
-		/* disable spy */
-		u &= ~INL_CONFIG_RXANNEX;
-	else if ((uwrq->data.length > 0) && (priv->spy_data.spy_number == 0))
-		/* enable spy */
-		u |= INL_CONFIG_RXANNEX;
-
-	mgt_set(priv, OID_INL_CONFIG, &u);
-	mgt_commit_list(priv, &oid, 1);
-	up_write(&priv->mib_sem);
-
-	return iw_handler_set_spy(ndev, info, uwrq, extra);
-}
-
 static const iw_handler prism54_handler[] = {
 	(iw_handler) prism54_commit,	/* SIOCSIWCOMMIT */
 	(iw_handler) prism54_get_name,	/* SIOCGIWNAME */
@@ -2048,10 +2023,10 @@
 	(iw_handler) NULL,	/* SIOCGIWPRIV */
 	(iw_handler) NULL,	/* SIOCSIWSTATS */
 	(iw_handler) NULL,	/* SIOCGIWSTATS */
-	prism54_set_spy,	/* SIOCSIWSPY */
-	iw_handler_get_spy,	/* SIOCGIWSPY */
-	iw_handler_set_thrspy,	/* SIOCSIWTHRSPY */
-	iw_handler_get_thrspy,	/* SIOCGIWTHRSPY */
+	(iw_handler) NULL,	/* SIOCSIWSPY */
+	(iw_handler) NULL,	/* SIOCGIWSPY */
+	(iw_handler) NULL,	/* SIOCSIWTHRSPY */
+	(iw_handler) NULL,	/* SIOCGIWTHRSPY */
 	(iw_handler) prism54_set_wap,	/* SIOCSIWAP */
 	(iw_handler) prism54_get_wap,	/* SIOCGIWAP */
 	(iw_handler) NULL,	/* -- hole -- */
@@ -2248,7 +2223,6 @@
 	.standard = (iw_handler *) prism54_handler,
 	.private = (iw_handler *) prism54_private_handler,
 	.private_args = (struct iw_priv_args *) prism54_private_args,
-	.spy_offset = offsetof(islpci_private, spy_data),
 };
 
 /* For ioctls that don't work with the new API */
diff -urN prism54-1.2.orig/ksrc/islpci_dev.h prism54-1.2/ksrc/islpci_dev.h
--- prism54-1.2.orig/ksrc/islpci_dev.h	2004-05-29 17:06:49.000000000 +0200
+++ prism54-1.2/ksrc/islpci_dev.h	2004-08-15 16:35:40.000000000 +0200
@@ -98,8 +98,6 @@
 	struct iw_statistics local_iwstatistics;
 	struct iw_statistics iwstatistics;
 
-	struct iw_spy_data spy_data; /* iwspy support */
-
 	int monitor_type; /* ARPHRD_IEEE80211 or ARPHRD_IEEE80211_PRISM */
 
 	struct islpci_acl acl;
diff -urN prism54-1.2.orig/ksrc/islpci_eth.c prism54-1.2/ksrc/islpci_eth.c
--- prism54-1.2.orig/ksrc/islpci_eth.c	2004-05-29 17:06:49.000000000 +0200
+++ prism54-1.2/ksrc/islpci_eth.c	2004-08-15 16:47:21.000000000 +0200
@@ -384,29 +384,8 @@
 	/* take care of monitor mode and spy monitoring. */
 	if (unlikely(priv->iw_mode == IW_MODE_MONITOR))
 		discard = islpci_monitor_rx(priv, &skb);
-	else {
-		if (unlikely(skb->data[2 * ETH_ALEN] == 0)) {
-			/* The packet has a rx_annex. Read it for spy monitoring, Then
-			 * remove it, while keeping the 2 leading MAC addr.
-			 */
-			struct iw_quality wstats;
-			struct rx_annex_header *annex =
-			    (struct rx_annex_header *) skb->data;
-			wstats.level = annex->rfmon.rssi;
-			/* The noise value can be a bit outdated if nobody's 
-			 * reading wireless stats... */
-			wstats.noise = priv->local_iwstatistics.qual.noise;
-			wstats.qual = wstats.level - wstats.noise;
-			wstats.updated = 0x07;
-			/* Update spy records */
-			wireless_spy_update(ndev, annex->addr2, &wstats);
-
-			memcpy(skb->data + sizeof (struct rfmon_header),
-			       skb->data, 2 * ETH_ALEN);
-			skb_pull(skb, sizeof (struct rfmon_header));
-		}
+	else
 		skb->protocol = eth_type_trans(skb, ndev);
-	}
 	skb->ip_summed = CHECKSUM_NONE;
 	priv->statistics.rx_packets++;
 	priv->statistics.rx_bytes += size;
diff -urN prism54-1.2.orig/ksrc/prismcompat24.h prism54-1.2/ksrc/prismcompat24.h
--- prism54-1.2.orig/ksrc/prismcompat24.h	2004-05-29 17:06:49.000000000 +0200
+++ prism54-1.2/ksrc/prismcompat24.h	2004-08-15 16:24:16.000000000 +0200
@@ -36,15 +36,7 @@
 #include <linux/moduleparam.h>
 #endif
 
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,23)
-#define free_netdev(x)		kfree(x)
-#define pci_name(x)		x->slot_name
-#define irqreturn_t		void
-#define IRQ_HANDLED
-#define IRQ_NONE
-#else
 #include <linux/interrupt.h>
-#endif
 
 #define work_struct		tq_struct
 #define INIT_WORK		INIT_TQUEUE
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.