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