diff options
Diffstat (limited to 'package/linux')
7 files changed, 306 insertions, 0 deletions
| diff --git a/package/linux/kernel-patches/200-include_linux_netdevice_h.patch b/package/linux/kernel-patches/200-include_linux_netdevice_h.patch new file mode 100644 index 000000000..5e758f0ed --- /dev/null +++ b/package/linux/kernel-patches/200-include_linux_netdevice_h.patch @@ -0,0 +1,28 @@ +--- linux-mips-cvs-21012005/include/linux/netdevice.h	2004-11-19 01:28:51.000000000 +0100 ++++ linux-broadcom/include/linux/netdevice.h	2005-01-26 19:51:37.000000000 +0100 +@@ -297,7 +297,10 @@ + 	 * See <net/iw_handler.h> for details. Jean II */ + 	struct iw_handler_def *	wireless_handlers; +  ++#ifndef CONFIG_BCM4710 + 	struct ethtool_ops *ethtool_ops; ++#endif ++ +  + 	/* + 	 * This marks the end of the "visible" part of the structure. All +@@ -353,7 +356,14 @@ + 	struct Qdisc		*qdisc; + 	struct Qdisc		*qdisc_sleeping; + 	struct Qdisc		*qdisc_ingress; ++	/* ++	 * this is needed for the wlan driver binary blob from linksys ++	 */ ++#ifdef CONFIG_BCM4710 ++	struct Qdisc            *qdisc_list; ++#else + 	struct list_head	qdisc_list; ++#endif + 	unsigned long		tx_queue_len;	/* Max frames per queue allowed */ +  + 	/* hard_start_xmit synchronizer */ diff --git a/package/linux/kernel-patches/201-include_linux_skbuff_h.patch b/package/linux/kernel-patches/201-include_linux_skbuff_h.patch new file mode 100644 index 000000000..628eaeac4 --- /dev/null +++ b/package/linux/kernel-patches/201-include_linux_skbuff_h.patch @@ -0,0 +1,24 @@ +--- linux-mips-cvs-21012005/include/linux/skbuff.h	2005-01-31 12:56:47.000000000 +0100 ++++ linux-broadcom/include/linux/skbuff.h	2005-01-31 12:55:24.000000000 +0100 +@@ -135,10 +135,6 @@ + 	struct sock	*sk;			/* Socket we are owned by 			*/ + 	struct timeval	stamp;			/* Time we arrived				*/ + 	struct net_device	*dev;		/* Device we arrived on/are leaving by		*/ +-	struct net_device	*real_dev;	/* For support of point to point protocols  +-						   (e.g. 802.3ad) over bonding, we must save the +-						   physical device that got the packet before +-						   replacing skb->dev with the virtual device.  */ +  + 	/* Transport layer header */ + 	union +@@ -219,6 +215,10 @@ + #ifdef CONFIG_NET_SCHED +        __u32           tc_index;               /* traffic control index */ + #endif ++	struct net_device	*real_dev;	/* For support of point to point protocols  ++						   (e.g. 802.3ad) over bonding, we must save the ++						   physical device that got the packet before ++						   replacing skb->dev with the virtual device.  */ + }; +  + #ifdef __KERNEL__ diff --git a/package/linux/kernel-patches/202-net_core_Makefile.patch b/package/linux/kernel-patches/202-net_core_Makefile.patch new file mode 100644 index 000000000..8abeccce7 --- /dev/null +++ b/package/linux/kernel-patches/202-net_core_Makefile.patch @@ -0,0 +1,28 @@ +--- linux-mips-cvs-21012005/net/core/Makefile	2004-11-19 01:28:53.000000000 +0100 ++++ linux-broadcom/net/core/Makefile	2005-01-26 15:56:36.000000000 +0100 +@@ -9,7 +9,11 @@ +  + O_TARGET := core.o +  ++ifeq ($(CONFIG_BCM4710),y) ++export-objs := netfilter.o profile.o neighbour.o ++else + export-objs := netfilter.o profile.o ethtool.o neighbour.o ++endif +  + obj-y := sock.o skbuff.o iovec.o datagram.o scm.o +  +@@ -21,8 +25,13 @@ +  + obj-$(CONFIG_FILTER) += filter.o +  ++ifeq ($(CONFIG_BCM4710),y) ++obj-$(CONFIG_NET) +=	dev.o dev_mcast.o dst.o neighbour.o \ ++			rtnetlink.o utils.o ++else + obj-$(CONFIG_NET) +=	dev.o ethtool.o dev_mcast.o dst.o neighbour.o \ + 			rtnetlink.o utils.o ++endif +  + obj-$(CONFIG_NETFILTER) += netfilter.o + obj-$(CONFIG_NET_DIVERT) += dv.o diff --git a/package/linux/kernel-patches/203-net_core_dev_c.patch b/package/linux/kernel-patches/203-net_core_dev_c.patch new file mode 100644 index 000000000..b2ebccc17 --- /dev/null +++ b/package/linux/kernel-patches/203-net_core_dev_c.patch @@ -0,0 +1,18 @@ +--- linux-mips-cvs-21012005/net/core/dev.c	2004-04-16 05:14:21.000000000 +0200 ++++ linux-broadcom/net/core/dev.c	2005-01-26 20:06:32.000000000 +0100 +@@ -2295,6 +2295,7 @@ + 			} + 			return ret; +  ++#ifndef CONFIG_BCM4710 + 		case SIOCETHTOOL: + 			dev_load(ifr.ifr_name); + 			rtnl_lock(); +@@ -2308,6 +2309,7 @@ + 					ret = -EFAULT; + 			} + 			return ret; ++#endif +  + 		/* + 		 *	These ioctl calls: diff --git a/package/linux/kernel-patches/204-net_sched_sched_api_c.patch b/package/linux/kernel-patches/204-net_sched_sched_api_c.patch new file mode 100644 index 000000000..1f2371e50 --- /dev/null +++ b/package/linux/kernel-patches/204-net_sched_sched_api_c.patch @@ -0,0 +1,119 @@ +--- linux-2.4.30/net/sched/sch_api.c	2004-11-17 12:54:22.000000000 +0100 ++++ linux-2.4.30-wl/net/sched/sch_api.c	2005-04-24 18:56:03.000000000 +0200 +@@ -194,11 +194,12 @@ + { + 	struct Qdisc *q; +  +-	list_for_each_entry(q, &dev->qdisc_list, list) { ++        for (q = dev->qdisc_list; q; q = q->next) { + 		if (q->handle == handle) + 			return q; + 	} + 	return NULL; ++ + } +  + struct Qdisc *qdisc_leaf(struct Qdisc *p, u32 classid) +@@ -371,8 +372,6 @@ + 			unsigned long cl = cops->get(parent, classid); + 			if (cl) { + 				err = cops->graft(parent, cl, new, old); +-				if (new) +-					new->parent = classid; + 				cops->put(parent, cl); + 			} + 		} +@@ -427,7 +426,6 @@ +  + 	memset(sch, 0, size); +  +-	INIT_LIST_HEAD(&sch->list); + 	skb_queue_head_init(&sch->q); +  + 	if (handle == TC_H_INGRESS) +@@ -453,7 +451,8 @@ +  + 	if (!ops->init || (err = ops->init(sch, tca[TCA_OPTIONS-1])) == 0) { + 		write_lock(&qdisc_tree_lock); +-		list_add_tail(&sch->list, &dev->qdisc_list); ++		sch->next = dev->qdisc_list; ++		dev->qdisc_list = sch; + 		write_unlock(&qdisc_tree_lock); + #ifdef CONFIG_NET_ESTIMATOR + 		if (tca[TCA_RATE-1]) +@@ -808,19 +807,16 @@ + 		if (idx > s_idx) + 			s_q_idx = 0; + 		read_lock(&qdisc_tree_lock); +-		q_idx = 0; +-		list_for_each_entry(q, &dev->qdisc_list, list) { +-			if (q_idx < s_q_idx) { +-				q_idx++; +-				continue; +-			} +-			if (tc_fill_qdisc(skb, q, q->parent, NETLINK_CB(cb->skb).pid, +-					  cb->nlh->nlmsg_seq, NLM_F_MULTI, RTM_NEWQDISC) <= 0) { +-				read_unlock(&qdisc_tree_lock); +-				goto done; +-			} +-			q_idx++; +-		} ++                for (q = dev->qdisc_list, q_idx = 0; q; ++                     q = q->next, q_idx++) { ++                        if (q_idx < s_q_idx) ++                                continue; ++                        if (tc_fill_qdisc(skb, q, 0, NETLINK_CB(cb->skb).pid, ++                                          cb->nlh->nlmsg_seq, NLM_F_MULTI, RTM_NEWQDISC) <= 0) { ++                                read_unlock(&qdisc_tree_lock); ++                                goto done; ++                        } ++                } + 		read_unlock(&qdisc_tree_lock); + 	} +  +@@ -1033,27 +1029,24 @@ + 	t = 0; +  + 	read_lock(&qdisc_tree_lock); +-	list_for_each_entry(q, &dev->qdisc_list, list) { +-		if (t < s_t || !q->ops->cl_ops || +-		    (tcm->tcm_parent && +-		     TC_H_MAJ(tcm->tcm_parent) != q->handle)) { +-			t++; +-			continue; +-		} +-		if (t > s_t) +-			memset(&cb->args[1], 0, sizeof(cb->args)-sizeof(cb->args[0])); +-		arg.w.fn = qdisc_class_dump; +-		arg.skb = skb; +-		arg.cb = cb; +-		arg.w.stop  = 0; +-		arg.w.skip = cb->args[1]; +-		arg.w.count = 0; +-		q->ops->cl_ops->walk(q, &arg.w); +-		cb->args[1] = arg.w.count; +-		if (arg.w.stop) +-			break; +-		t++; +-	} ++        for (q=dev->qdisc_list, t=0; q; q = q->next, t++) { ++                if (t < s_t) continue; ++                if (!q->ops->cl_ops) continue; ++                if (tcm->tcm_parent && TC_H_MAJ(tcm->tcm_parent) != q->handle) ++                        continue; ++                if (t > s_t) ++                        memset(&cb->args[1], 0, sizeof(cb->args)-sizeof(cb->args[0])); ++                arg.w.fn = qdisc_class_dump; ++                arg.skb = skb; ++                arg.cb = cb; ++                arg.w.stop  = 0; ++                arg.w.skip = cb->args[1]; ++                arg.w.count = 0; ++                q->ops->cl_ops->walk(q, &arg.w); ++                cb->args[1] = arg.w.count; ++                if (arg.w.stop) ++                        break; ++        } + 	read_unlock(&qdisc_tree_lock); +  + 	cb->args[0] = t; diff --git a/package/linux/kernel-patches/205-net_sched_sched_generic_c.patch b/package/linux/kernel-patches/205-net_sched_sched_generic_c.patch new file mode 100644 index 000000000..9de11d38e --- /dev/null +++ b/package/linux/kernel-patches/205-net_sched_sched_generic_c.patch @@ -0,0 +1,64 @@ +--- linux-2.4.30/net/sched/sch_generic.c	2004-11-17 12:54:22.000000000 +0100 ++++ linux-2.4.30-wl/net/sched/sch_generic.c	2005-04-24 18:09:38.000000000 +0200 +@@ -392,7 +392,6 @@ + 		return NULL; + 	memset(sch, 0, size); +  +-	INIT_LIST_HEAD(&sch->list); + 	skb_queue_head_init(&sch->q); + 	sch->ops = ops; + 	sch->enqueue = ops->enqueue; +@@ -422,11 +421,22 @@ + void qdisc_destroy(struct Qdisc *qdisc) + { + 	struct Qdisc_ops *ops = qdisc->ops; ++	struct net_device *dev; +  + 	if (qdisc->flags&TCQ_F_BUILTIN || + 	    !atomic_dec_and_test(&qdisc->refcnt)) + 		return; +-	list_del(&qdisc->list); ++ ++	dev = qdisc->dev; ++	if (dev) { ++		struct Qdisc *q, **qp; ++		for (qp = &qdisc->dev->qdisc_list; (q=*qp) != NULL; qp = &q->next) { ++			if (q == qdisc) { ++				*qp = q->next; ++				break; ++			} ++		} ++	} + #ifdef CONFIG_NET_ESTIMATOR + 	qdisc_kill_estimator(&qdisc->stats); + #endif +@@ -455,9 +465,9 @@ + 				return; + 			} + 			write_lock(&qdisc_tree_lock); +-			list_add_tail(&qdisc->list, &dev->qdisc_list); ++			qdisc->next = dev->qdisc_list; ++			dev->qdisc_list = qdisc; + 			write_unlock(&qdisc_tree_lock); +- + 		} else { + 			qdisc =  &noqueue_qdisc; + 		} +@@ -501,7 +511,7 @@ + 	dev->qdisc = &noop_qdisc; + 	spin_unlock_bh(&dev->queue_lock); + 	dev->qdisc_sleeping = &noop_qdisc; +-	INIT_LIST_HEAD(&dev->qdisc_list); ++	dev->qdisc_list = NULL; + 	write_unlock(&qdisc_tree_lock); +  + 	dev_watchdog_init(dev); +@@ -523,7 +533,7 @@ + 		qdisc_destroy(qdisc); +         } + #endif +-	BUG_TRAP(list_empty(&dev->qdisc_list)); ++	BUG_TRAP(dev->qdisc_list == NULL); + 	BUG_TRAP(!timer_pending(&dev->watchdog_timer)); + 	spin_unlock_bh(&dev->queue_lock); + 	write_unlock(&qdisc_tree_lock); diff --git a/package/linux/kernel-patches/206-include_net_pkt_sched_h.patch b/package/linux/kernel-patches/206-include_net_pkt_sched_h.patch new file mode 100644 index 000000000..f6bd0143a --- /dev/null +++ b/package/linux/kernel-patches/206-include_net_pkt_sched_h.patch @@ -0,0 +1,25 @@ +--- linux-2.4.30/include/net/pkt_sched.h	2004-11-17 12:54:22.000000000 +0100 ++++ linux-2.4.30-wl/include/net/pkt_sched.h	2005-04-24 18:32:48.000000000 +0200 +@@ -59,7 +59,7 @@ + 	int 			(*enqueue)(struct sk_buff *, struct Qdisc *); + 	struct sk_buff *	(*dequeue)(struct Qdisc *); + 	int 			(*requeue)(struct sk_buff *, struct Qdisc *); +-	unsigned int		(*drop)(struct Qdisc *); ++	int			(*drop)(struct Qdisc *); +  + 	int			(*init)(struct Qdisc *, struct rtattr *arg); + 	void			(*reset)(struct Qdisc *); +@@ -80,12 +80,11 @@ + #define TCQ_F_THROTTLED	2 + #define TCQ_F_INGRESS	4 + 	struct Qdisc_ops	*ops; ++	struct Qdisc            *next; + 	u32			handle; +-	u32			parent; + 	atomic_t		refcnt; + 	struct sk_buff_head	q; + 	struct net_device	*dev; +-	struct list_head	list; +  + 	struct tc_stats		stats; + 	int			(*reshape_fail)(struct sk_buff *skb, struct Qdisc *q); | 
