summaryrefslogtreecommitdiff
path: root/packages/linux
diff options
context:
space:
mode:
authorFlorian Boor <florian.boor@kernelconcepts.de>2005-11-29 12:22:22 +0000
committerOpenEmbedded Project <openembedded-devel@lists.openembedded.org>2005-11-29 12:22:22 +0000
commita589c33513bd8f4860860b9803d8dc4fe5d6fde7 (patch)
tree559e3905101cbd21a32bb3021343e9c656d280fd /packages/linux
parente10c2a138dcf536f472a80c97cc47592e43989b2 (diff)
parentec5d818fc28befe7bd53cc77236eaf98b3f1bd0f (diff)
merge of 270dcdaefb593b358e63d5e0e0d535a802f790fd
and dac65a99f38ac6da3e7c8ece44938ffd7aad88c4
Diffstat (limited to 'packages/linux')
-rw-r--r--packages/linux/linux-openzaurus-2.6.14+2.6.15-rc2/defconfig-c7x03
-rw-r--r--packages/linux/linux-openzaurus-2.6.14+2.6.15-rc2/defconfig-cxx003
-rw-r--r--packages/linux/linux-openzaurus.inc2
-rw-r--r--packages/linux/linux-openzaurus_2.6.14+2.6.15-rc2.bb47
-rw-r--r--packages/linux/nslu2-kernel/2.6.14/defconfig18
-rw-r--r--packages/linux/nslu2-kernel/2.6.15/defconfig12
-rw-r--r--packages/linux/nslu2-kernel/2.6/91-maclist.patch377
-rw-r--r--packages/linux/nslu2-kernel/2.6/92-nslu2-maclist.patch80
-rw-r--r--packages/linux/nslu2-kernel_2.6.14.3.bb (renamed from packages/linux/nslu2-kernel_2.6.14.2.bb)4
-rw-r--r--packages/linux/nslu2-kernel_2.6.15-rc2.bb4
10 files changed, 516 insertions, 34 deletions
diff --git a/packages/linux/linux-openzaurus-2.6.14+2.6.15-rc2/defconfig-c7x0 b/packages/linux/linux-openzaurus-2.6.14+2.6.15-rc2/defconfig-c7x0
index 20b44b7197..0f42642e7f 100644
--- a/packages/linux/linux-openzaurus-2.6.14+2.6.15-rc2/defconfig-c7x0
+++ b/packages/linux/linux-openzaurus-2.6.14+2.6.15-rc2/defconfig-c7x0
@@ -228,7 +228,7 @@ CONFIG_BINFMT_MISC=m
# Power management options
#
CONFIG_PM=y
-CONFIG_PM_LEGACY=y
+# CONFIG_PM_LEGACY is not set
# CONFIG_PM_DEBUG is not set
CONFIG_APM=y
@@ -840,6 +840,7 @@ CONFIG_INPUT_KEYBOARD=y
# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_NEWTON is not set
CONFIG_KEYBOARD_CORGI=y
+# CONFIG_KEYBOARD_TOSA is not set
# CONFIG_KEYBOARD_SPITZ is not set
# CONFIG_INPUT_MOUSE is not set
# CONFIG_INPUT_JOYSTICK is not set
diff --git a/packages/linux/linux-openzaurus-2.6.14+2.6.15-rc2/defconfig-cxx00 b/packages/linux/linux-openzaurus-2.6.14+2.6.15-rc2/defconfig-cxx00
index b1748c9268..ad44de256e 100644
--- a/packages/linux/linux-openzaurus-2.6.14+2.6.15-rc2/defconfig-cxx00
+++ b/packages/linux/linux-openzaurus-2.6.14+2.6.15-rc2/defconfig-cxx00
@@ -216,7 +216,7 @@ CONFIG_BINFMT_MISC=m
# Power management options
#
CONFIG_PM=y
-CONFIG_PM_LEGACY=y
+# CONFIG_PM_LEGACY is not set
# CONFIG_PM_DEBUG is not set
CONFIG_APM=y
@@ -829,6 +829,7 @@ CONFIG_INPUT_KEYBOARD=y
# CONFIG_KEYBOARD_NEWTON is not set
# CONFIG_KEYBOARD_CORGI is not set
CONFIG_KEYBOARD_SPITZ=y
+# CONFIG_KEYBOARD_TOSA is not set
# CONFIG_INPUT_MOUSE is not set
# CONFIG_INPUT_JOYSTICK is not set
CONFIG_INPUT_TOUCHSCREEN=y
diff --git a/packages/linux/linux-openzaurus.inc b/packages/linux/linux-openzaurus.inc
index c95bc7396e..4bd71d7601 100644
--- a/packages/linux/linux-openzaurus.inc
+++ b/packages/linux/linux-openzaurus.inc
@@ -3,7 +3,7 @@ SECTION = "kernel"
MAINTAINER = "Richard Purdie <rpurdie@rpsys.net>, Michael 'Mickey' Lauer <mickey@vanille.de>"
LICENSE = "GPL"
-DOSRC = "http://www.do13.in-berlin.de/openzaurus/patches"
+DOSRC = "http://www.do13.de/openzaurus/patches"
RPSRC = "http://www.rpsys.net/openzaurus/patches"
JLSRC = "http://www.cs.wisc.edu/~lenz/zaurus/files"
BASRC = "http://www.orca.cx/zaurus/patches"
diff --git a/packages/linux/linux-openzaurus_2.6.14+2.6.15-rc2.bb b/packages/linux/linux-openzaurus_2.6.14+2.6.15-rc2.bb
index 31797313e5..3f90f81705 100644
--- a/packages/linux/linux-openzaurus_2.6.14+2.6.15-rc2.bb
+++ b/packages/linux/linux-openzaurus_2.6.14+2.6.15-rc2.bb
@@ -1,6 +1,6 @@
include linux-openzaurus.inc
-PR = "r1"
+PR = "r3"
#DEFAULT_PREFERENCE = "-1"
@@ -17,20 +17,25 @@ PR = "r1"
SRC_URI = "http://www.kernel.org/pub/linux/kernel/v2.6/testing/linux-2.6.15-rc2.tar.bz2 \
${RPSRC}/pxa_ohci_platform-r5.patch;patch=1 \
${RPSRC}/pxa_ohci_suspend-r5.patch;patch=1 \
+ ${RPSRC}/pxa_ohci_fixes-r0.patch;patch=1 \
${RPSRC}/spitz_ohci-r0.patch;patch=1 \
${RPSRC}/enable_iwmmxt-r0.patch;patch=1 \
${RPSRC}/pxa_i2c_fixes-r4.patch;patch=1 \
${RPSRC}/ide_not_removable-r0.patch;patch=1 \
- ${RPSRC}/led_core-r0.patch;patch=1 \
- ${RPSRC}/led_triggers-r0.patch;patch=1 \
+ ${RPSRC}/sharpsl_pm_move-r0.patch;patch=1 \
+ ${RPSRC}/led_core-r1.patch;patch=1 \
+ ${RPSRC}/led_triggers-r1.patch;patch=1 \
${RPSRC}/led_trig_timer-r0.patch;patch=1 \
- ${RPSRC}/led_zaurus-r0.patch;patch=1 \
- ${RPSRC}/led_locomo-r0.patch;patch=1 \
- ${RPSRC}/led_ide-r0.patch;patch=1 \
- ${RPSRC}/led_nand-r0.patch;patch=1 \
+ ${RPSRC}/led_trig_sharpsl_pm-r0.patch;patch=1 \
+ ${RPSRC}/led_zaurus-r2.patch;patch=1 \
+ ${RPSRC}/led_locomo-r1.patch;patch=1 \
+ ${RPSRC}/led_ide-r1.patch;patch=1 \
+ ${RPSRC}/led_nand-r1.patch;patch=1 \
${RPSRC}/pxa_timerfix-r0.patch;patch=1 \
${RPSRC}/pxa_rtc-r2.patch;patch=1 \
${RPSRC}/input_power-r4.patch;patch=1 \
+ ${RPSRC}/arm_apm_pm_legacy-r1.patch;patch=1 \
+ ${RPSRC}/collie_mtd_sharp-r0.patch;patch=1 \
${RPSRC}/jffs2_longfilename-r0.patch;patch=1 \
${RPSRC}/pxa25x_cpufreq-r0.patch;patch=1 \
${RPSRC}/ipaq/hx2750_base-r24.patch;patch=1 \
@@ -39,15 +44,23 @@ SRC_URI = "http://www.kernel.org/pub/linux/kernel/v2.6/testing/linux-2.6.15-rc2.
${RPSRC}/ipaq/pxa_keys-r5.patch;patch=1 \
${RPSRC}/ipaq/tsc2101-r12.patch;patch=1 \
${RPSRC}/ipaq/hx2750_test1-r3.patch;patch=1 \
- ${DOSRC}/tc6393-device-r5.patch;patch=1 \
- ${DOSRC}/tc6393_nand-r6.patch;patch=1 \
- ${DOSRC}/tosa-keyboard-r6.patch;patch=1 \
+ ${DOSRC}/tosa-platform-device-r0.patch;patch=1 \
+ ${DOSRC}/tc6393-device-r8.patch;patch=1 \
+ ${DOSRC}/tc6393_nand-r7.patch;patch=1 \
+ ${DOSRC}/tosa-keyboard-r9.patch;patch=1 \
+ ${DOSRC}/tosa-pxaac97-r5.patch;patch=1 \
+ ${DOSRC}/tosa-tc6393-r1.patch;patch=1 \
+ ${DOSRC}/tosa-power-r9.patch;patch=1 \
+ ${DOSRC}/tc6393fb-r9.patch;patch=1 \
+ ${DOSRC}/tosa-lcd-r6.patch;patch=1 \
+ ${DOSRC}/tosa-bl-r9.patch;patch=1 \
+ ${DOSRC}/tosa-bluetooth-r2.patch;patch=1 \
${RPSRC}/pcmcia_dev_ids-r2.patch;patch=1 \
${RPSRC}/mmc_timeout-r0.patch;patch=1 \
${RPSRC}/pxa_cf_initorder_hack-r1.patch;patch=1 \
${RPSRC}/alsa/alsa-soc-0.7.patch;patch=1 \
- ${RPSRC}/alsa_snd_corgi-r1.patch;patch=1 \
- ${RPSRC}/soc_platform_upd-r0.patch;patch=1 \
+ ${RPSRC}/alsa_snd_corgi-r2.patch;patch=1 \
+ ${RPSRC}/soc_platform_upd-r1.patch;patch=1 \
file://add-oz-release-string.patch;patch=1 \
file://pxa-serial-hack.patch;patch=1 \
${RPSRC}/jl1/pxa-linking-bug.patch;patch=1 \
@@ -76,14 +89,8 @@ SRC_URI = "http://www.kernel.org/pub/linux/kernel/v2.6/testing/linux-2.6.15-rc2.
# ${JLSRC}/zaurus-leds-2.6.11.diff.gz;patch=1 \
SRC_URI_append_tosa = "${DOSRC}/nand-readid-r1.patch;patch=1 \
- ${RPSRC}/temp/tc6393fb-r7.patch;patch=1 \
- ${DOSRC}/tosa-power-r6.patch;patch=1 \
- ${DOSRC}/tosa-lcd-r3.patch;patch=1 \
- ${RPSRC}/temp/tosa-bl-r7.patch;patch=1 \
- ${DOSRC}/pxa-ac97-suspend-r0.patch;patch=1 \
${DOSRC}/ac97codec-rename-revert-r0.patch;patch=1 \
- ${DOSRC}/wm9712-ts-r3.patch;patch=1 \
- ${DOSRC}/tosa-pxaac97-r4.patch;patch=1 \
- ${DOSRC}/tosa-bluetooth-r0.patch;patch=1 "
+ ${DOSRC}/wm97xx-touch-lg2-r0.patch;patch=1 \
+ ${DOSRC}/wm9712-pm-r0.patch;patch=1 "
S = "${WORKDIR}/linux-2.6.15-rc2"
diff --git a/packages/linux/nslu2-kernel/2.6.14/defconfig b/packages/linux/nslu2-kernel/2.6.14/defconfig
index 8d0d751738..83b25213ac 100644
--- a/packages/linux/nslu2-kernel/2.6.14/defconfig
+++ b/packages/linux/nslu2-kernel/2.6.14/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.14-rc4
-# Fri Oct 21 16:13:58 2005
+# Linux kernel version: 2.6.14
+# Mon Nov 28 18:53:25 2005
#
CONFIG_ARM=y
CONFIG_MMU=y
@@ -93,12 +93,12 @@ CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y
#
# IXP4xx Platforms
#
+CONFIG_MACH_NSLU2=y
# CONFIG_ARCH_AVILA is not set
# CONFIG_ARCH_ADI_COYOTE is not set
# CONFIG_ARCH_IXDP425 is not set
# CONFIG_MACH_IXDPG425 is not set
# CONFIG_MACH_IXDP465 is not set
-CONFIG_MACH_NSLU2=y
# CONFIG_ARCH_PRPMC1100 is not set
# CONFIG_MACH_GTWX5715 is not set
@@ -169,7 +169,6 @@ CONFIG_CMDLINE="root=/dev/mtdblock4 rw rootfstype=jffs2 mem=32M@0x00000000 init=
# At least one emulation must be selected
#
CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
# CONFIG_FPE_FASTFPE is not set
#
@@ -574,7 +573,13 @@ CONFIG_SCSI_MULTI_LUN=y
# CONFIG_SCSI_IPR is not set
# CONFIG_SCSI_QLOGIC_FC is not set
# CONFIG_SCSI_QLOGIC_1280 is not set
-CONFIG_SCSI_QLA2XXX=n
+CONFIG_SCSI_QLA2XXX=y
+# CONFIG_SCSI_QLA21XX is not set
+# CONFIG_SCSI_QLA22XX is not set
+# CONFIG_SCSI_QLA2300 is not set
+# CONFIG_SCSI_QLA2322 is not set
+# CONFIG_SCSI_QLA6312 is not set
+# CONFIG_SCSI_QLA24XX is not set
# CONFIG_SCSI_LPFC is not set
# CONFIG_SCSI_DC395x is not set
# CONFIG_SCSI_DC390T is not set
@@ -642,6 +647,7 @@ CONFIG_TUN=m
# Ethernet (10 or 100Mbit)
#
CONFIG_NET_ETHERNET=y
+CONFIG_MACLIST=y
CONFIG_MII=y
# CONFIG_HAPPYMEAL is not set
# CONFIG_SUNGEM is not set
@@ -1120,7 +1126,6 @@ CONFIG_USB=y
CONFIG_USB_DEVICEFS=y
# CONFIG_USB_BANDWIDTH is not set
# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
# CONFIG_USB_OTG is not set
#
@@ -1369,7 +1374,6 @@ CONFIG_RAMFS=y
#
# CONFIG_ADFS_FS is not set
# CONFIG_AFFS_FS is not set
-# CONFIG_ASFS_FS is not set
# CONFIG_HFS_FS is not set
# CONFIG_HFSPLUS_FS is not set
# CONFIG_BEFS_FS is not set
diff --git a/packages/linux/nslu2-kernel/2.6.15/defconfig b/packages/linux/nslu2-kernel/2.6.15/defconfig
index 9a9bc34c7d..7074421cd7 100644
--- a/packages/linux/nslu2-kernel/2.6.15/defconfig
+++ b/packages/linux/nslu2-kernel/2.6.15/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.15
-# Mon Nov 14 10:44:43 2005
+# Mon Nov 28 13:10:38 2005
#
CONFIG_ARM=y
CONFIG_MMU=y
@@ -411,6 +411,11 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_FW_LOADER=m
#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
# Memory Technology Devices (MTD)
#
CONFIG_MTD=y
@@ -673,6 +678,7 @@ CONFIG_TUN=m
# Ethernet (10 or 100Mbit)
#
CONFIG_NET_ETHERNET=y
+CONFIG_MACLIST=y
CONFIG_MII=y
# CONFIG_HAPPYMEAL is not set
# CONFIG_SUNGEM is not set
@@ -1029,6 +1035,8 @@ CONFIG_VIDEO_HEXIUM_GEMINI=m
CONFIG_VIDEO_CX88=m
# CONFIG_VIDEO_EM28XX is not set
CONFIG_VIDEO_OVCAMCHIP=m
+# CONFIG_VIDEO_AUDIO_DECODER is not set
+# CONFIG_VIDEO_DECODER is not set
#
# Radio Adapters
@@ -1273,6 +1281,7 @@ CONFIG_USB_NET_ZAURUS=m
CONFIG_USB_SERIAL=m
CONFIG_USB_SERIAL_GENERIC=y
# CONFIG_USB_SERIAL_AIRPRIME is not set
+# CONFIG_USB_SERIAL_ANYDATA is not set
CONFIG_USB_SERIAL_BELKIN=m
CONFIG_USB_SERIAL_WHITEHEAT=m
CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
@@ -1292,7 +1301,6 @@ CONFIG_USB_SERIAL_KEYSPAN_PDA=m
CONFIG_USB_SERIAL_KLSI=m
CONFIG_USB_SERIAL_KOBIL_SCT=m
CONFIG_USB_SERIAL_MCT_U232=m
-# CONFIG_USB_SERIAL_NOKIA_DKU2 is not set
CONFIG_USB_SERIAL_PL2303=m
# CONFIG_USB_SERIAL_HP4X is not set
CONFIG_USB_SERIAL_SAFE=m
diff --git a/packages/linux/nslu2-kernel/2.6/91-maclist.patch b/packages/linux/nslu2-kernel/2.6/91-maclist.patch
new file mode 100644
index 0000000000..27af1ea639
--- /dev/null
+++ b/packages/linux/nslu2-kernel/2.6/91-maclist.patch
@@ -0,0 +1,377 @@
+--- linux-2.6.15/include/net/maclist.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.15/include/net/maclist.h 1970-01-01 00:00:00.000000000 +0000
+@@ -0,0 +1,23 @@
++#ifndef _MACLIST_H
++#define _MACLIST_H 1
++/*
++ * Interfaces to the MAC repository
++ */
++/*
++ * Add a single entry, returns 0 on success else an error
++ * code. Must *not* be called from an interrupt handler.
++ */
++extern int maclist_add(const u8 id_to_add[6]);
++
++/*
++ * Return the current entry count (valid in any context).
++ */
++extern int maclist_count(void);
++
++/*
++ * Return the ID from the n'th entry (valid in any context),
++ * returns 0 on success, -EINVAL if 'n' is out of range.
++ */
++extern int maclist_read(u8 (*buffer_for_id)[6], int index_of_id_to_return);
++
++#endif /*_MACLIST_H*/
+--- linux-2.6.15/drivers/net/maclist.c 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.15/drivers/net/maclist.c 1970-01-01 00:00:00.000000000 +0000
+@@ -0,0 +1,314 @@
++/*
++ * drivers/net/maclist.c
++ *
++ * a simple driver to remember ethernet MAC values
++ *
++ * Some Ethernet hardware implementations have no built-in
++ * storage for allocated MAC values - an example is the Intel
++ * IXP420 chip which has support for Ethernet but no defined
++ * way of storing allocated MAC values. With such hardware
++ * different board level implementations store the allocated
++ * MAC (or MACs) in different ways. Rather than put board
++ * level code into a specific Ethernet driver this driver
++ * provides a generally accessible repository for the MACs
++ * which can be written by board level code and read by the
++ * driver.
++ *
++ * The implementation also allows user level programs to
++ * access the MAC information in /proc/net/maclist. This is
++ * useful as it allows user space code to use the MAC if it
++ * is not used by a built-in driver.
++ *
++ * Copyright (C) 2005 John Bowler
++ * Author: John Bowler <jbowler@acm.org>
++ * Maintainers: http://www.nslu2-linux.org/
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * version 2 as published by the Free Software Foundation.
++ *
++ * External interfaces:
++ * Interfaces to linux kernel (and modules)
++ * maclist_add: add a single MAC
++ * maclist_count: total number of MACs stored
++ * maclist_read: read a MAC 0..(maclist_count-1)
++ */
++#include <linux/module.h>
++#include <linux/moduleparam.h>
++#include <linux/etherdevice.h>
++#include <linux/proc_fs.h>
++#include <linux/errno.h>
++
++#include <net/maclist.h>
++
++#define MACLIST_NAME "maclist"
++
++MODULE_AUTHOR("John Bowler <jbowler@acm.org>");
++MODULE_DESCRIPTION("MAC list repository");
++MODULE_LICENSE("GPL");
++
++typedef struct maclist_entry {
++ struct maclist_entry *next; /* Linked list, first first */
++ u8 id[6]; /* 6 byte Ethernet MAC */
++} maclist_entry_t;
++
++/* Access to this list is possible at any time - entries in
++ * the list are never destroyed. Modification of the list is
++ * safe only from the init code (i.e. modification must be
++ * single threaded), but read from an interrupt at the same
++ * time is possible and safe.
++ */
++static maclist_entry_t *maclist_list = 0;
++
++/*
++ * External interfaces.
++ *
++ * Add a single entry, returns 0 on success else an error
++ * code. Must be single threaded.
++ */
++int maclist_add(const u8 new_id[6]) {
++ maclist_entry_t *new_entry, **tail;
++
++ if (new_id == 0 || !is_valid_ether_addr(new_id)) {
++ printk(KERN_ERR MACLIST_NAME ": invalid ethernet address\n");
++ return -EINVAL;
++ }
++ new_entry = kmalloc(sizeof *new_entry, GFP_KERNEL);
++ if (new_entry == 0)
++ return -ENOMEM;
++ new_entry->next = 0;
++ memcpy(new_entry->id, new_id, sizeof new_entry->id);
++
++ tail = &maclist_list;
++ while (*tail != 0)
++ tail = &(*tail)->next;
++ *tail = new_entry;
++ return 0;
++}
++EXPORT_SYMBOL(maclist_add);
++
++/*
++ * Return the current entry count (valid in any context).
++ */
++int maclist_count(void) {
++ maclist_entry_t *tail = maclist_list;
++ int count = 0;
++
++ while (tail != 0) {
++ tail = tail->next;
++ ++count;
++ }
++
++ return count;
++}
++EXPORT_SYMBOL(maclist_count);
++
++/*
++ * Return the ID from the n'th entry (valid in any context),
++ * returns 0 on success, -EINVAL if 'n' is out of range.
++ */
++int maclist_read(u8 (*id)[6], int n) {
++ maclist_entry_t *entry = maclist_list;
++
++ while (n > 0 && entry != 0) {
++ --n;
++ entry = entry->next;
++ }
++
++ if (n == 0 && entry != 0) {
++ memcpy(id, entry->id, sizeof *id);
++ return 0;
++ }
++
++ printk(KERN_ERR MACLIST_NAME ": id does not exist\n");
++ return -EINVAL;
++}
++EXPORT_SYMBOL(maclist_read);
++
++/*
++ * Parameter parsing. The option string is a list of MAC
++ * addresses, comma separated. (The parsing really should
++ * be somewhere central...)
++ */
++static int __init maclist_setup(char *param) {
++ int bytes = 0, seen_a_digit = 0;
++ u8 id[6];
++
++ memset(id, 0, sizeof id);
++
++ if (param) do {
++ int digit = -1;
++ switch (*param) {
++ case '0': digit = 0; break;
++ case '1': digit = 1; break;
++ case '2': digit = 2; break;
++ case '3': digit = 3; break;
++ case '4': digit = 4; break;
++ case '5': digit = 5; break;
++ case '6': digit = 6; break;
++ case '7': digit = 7; break;
++ case '8': digit = 8; break;
++ case '9': digit = 9; break;
++ case 'a': case 'A': digit = 10; break;
++ case 'b': case 'B': digit = 11; break;
++ case 'c': case 'C': digit = 12; break;
++ case 'd': case 'D': digit = 13; break;
++ case 'e': case 'E': digit = 14; break;
++ case 'f': case 'F': digit = 15; break;
++ case ':':
++ if (seen_a_digit)
++ bytes = (bytes+1) & ~1;
++ else
++ bytes += 2; /* i.e. ff::ff is ff:00:ff */
++ seen_a_digit = 0;
++ break;
++ case 0:
++ if (bytes == 0) /* nothing new seen so far */
++ return 0;
++ /*fall through*/
++ case ',': case ';':
++ if (bytes > 0)
++ bytes = 12; /* i.e. all trailing bytes 0 */
++ break;
++ default:
++ printk(KERN_ERR MACLIST_NAME ": invalid character <%c[%d]>\n",
++ *param, *param);
++ return -EINVAL;
++ }
++
++ if (digit >= 0) {
++ id[bytes>>1] = (id[bytes>>1] << 4) + digit; break;
++ ++bytes;
++ seen_a_digit = 1;
++ }
++
++ if (bytes >= 12) {
++ int rc = maclist_add(id);
++ if (rc)
++ return rc;
++ bytes = 0;
++ seen_a_digit = 0;
++ memset(id, 0, sizeof id);
++ if (*param == 0)
++ return 0;
++ }
++ ++param;
++ } while (1);
++
++ return 0;
++}
++
++/*
++ * procfs support, if compiled in.
++ */
++#ifdef CONFIG_PROC_FS
++/*
++ * Character device read
++ */
++static int maclist_getchar(off_t n) {
++ static char xdigit[16] = "0123456789abcdef";
++ maclist_entry_t *head = maclist_list;
++ int b;
++
++ do {
++ if (head == 0)
++ return -1;
++ if (n < 18)
++ break;
++ head = head->next;
++ n -= 18;
++ } while (1);
++
++ if (n == 17)
++ return '\n';
++
++ b = n/3;
++ switch (n - b*3) {
++ case 0: return xdigit[head->id[b] >> 4];
++ case 1: return xdigit[head->id[b] & 0xf];
++ default: return ':';
++ }
++}
++
++/*
++ * The extensively undocumented proc_read_t callback is implemented here.
++ * Go look in fs/proc/generic.c:
++ *
++ * Prototype:
++ * int f(char *buffer, char **start, off_t offset,
++ * int count, int *peof, void *dat)
++ *
++ * Assume that the buffer is "count" bytes in size.
++ *
++ * 2) Set *start = an address within the buffer.
++ * Put the data of the requested offset at *start.
++ * Return the number of bytes of data placed there.
++ * If this number is greater than zero and you
++ * didn't signal eof and the reader is prepared to
++ * take more data you will be called again with the
++ * requested offset advanced by the number of bytes
++ * absorbed.
++ */
++static int maclist_proc_read(char *buffer, char **start, off_t offset,
++ int count, int *peof, void *dat) {
++ int total;
++
++ *start = buffer;
++ total = 0;
++
++ while (total < count) {
++ int ch = maclist_getchar(offset++);
++ if (ch == -1) {
++ *peof = 1;
++ break;
++ }
++ *buffer++ = ch;
++ ++total;
++ }
++
++ return total;
++}
++#endif
++
++/*
++ * Finally, the init/exit functions.
++ */
++static void __exit maclist_exit(void)
++{
++ maclist_entry_t *list;
++
++ remove_proc_entry(MACLIST_NAME, proc_net);
++
++ list = maclist_list;
++ maclist_list = 0;
++
++ while (list != 0) {
++ maclist_entry_t *head = list;
++ list = head->next;
++ kfree(head);
++ }
++}
++
++#ifdef MODULE
++static char ids[256];
++module_param_string(ids, ids, sizeof ids, 0);
++MODULE_PARM_DESC(ids, "comma separated list of MAC ids\n");
++#else
++__setup("maclist_ids=", maclist_setup);
++#endif
++
++static int __init maclist_init(void)
++{
++# ifdef MODULE
++ if (ids[0])
++ maclist_setup(ids);
++# endif
++
++ /* Ignore failure, the module will still work. */
++ (void)create_proc_read_entry(MACLIST_NAME, S_IRUGO, proc_net, maclist_proc_read, NULL);
++
++ return 0;
++}
++
++module_init(maclist_init);
++module_exit(maclist_exit);
+--- linux-2.6.15/drivers/net/Makefile 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.15/drivers/net/Makefile 1970-01-01 00:00:00.000000000 +0000
+@@ -70,6 +70,7 @@ obj-$(CONFIG_RIONET) += rionet.o
+ # end link order section
+ #
+
++obj-$(CONFIG_MACLIST) += maclist.o
+ obj-$(CONFIG_MII) += mii.o
+ obj-$(CONFIG_PHYLIB) += phy/
+
+--- linux-2.6.15/drivers/net/Kconfig 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.15/drivers/net/Kconfig 1970-01-01 00:00:00.000000000 +0000
+@@ -166,6 +166,21 @@ config NET_ETHERNET
+ kernel: saying N will just cause the configurator to skip all
+ the questions about Ethernet network cards. If unsure, say N.
+
++config MACLIST
++ tristate "Ethernet MAC repository"
++ depends on NET_ETHERNET
++ help
++ Some ethernet controllers have no built-in way of obtaining an
++ appropriate Ethernet MAC address. Such controllers have to be
++ initialised in a board-specific way, depending on how the allocated
++ MAC is stored. The MAC repository provides a set of APIs and a
++ proc entry (/proc/net/maclist) to store MAC values from the board
++ so that such drivers can obtain a MAC address without board-specific
++ code. You do not need to enable this device - it will be selected
++ automatically by any device which requires it. It is only useful
++ to enable it manually when building a device driver independently
++ of the kernel build.
++
+ config MII
+ tristate "Generic Media Independent Interface device support"
+ depends on NET_ETHERNET
diff --git a/packages/linux/nslu2-kernel/2.6/92-nslu2-maclist.patch b/packages/linux/nslu2-kernel/2.6/92-nslu2-maclist.patch
new file mode 100644
index 0000000000..c8b8a9bede
--- /dev/null
+++ b/packages/linux/nslu2-kernel/2.6/92-nslu2-maclist.patch
@@ -0,0 +1,80 @@
+--- linux-2.6.15/arch/arm/mach-ixp4xx/Kconfig 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.15/arch/arm/mach-ixp4xx/Kconfig 1970-01-01 00:00:00.000000000 +0000
+@@ -11,8 +11,8 @@ comment "IXP4xx Platforms"
+ # This entry is placed on top because otherwise it would have
+ # been shown as a submenu.
+ config MACH_NSLU2
+- bool
+- prompt "NSLU2" if !(MACH_IXDP465 || MACH_IXDPG425 || ARCH_IXDP425 || ARCH_ADI_COYOTE || ARCH_AVILA || ARCH_IXCDP1100 || ARCH_PRPMC1100 || MACH_GTWX5715)
++ bool "NSLU2"
++ select MACLIST
+ help
+ Say 'Y' here if you want your kernel to support Linksys's
+ NSLU2 NAS device. For more information on this platform,
+--- linux-2.6.15/arch/arm/mach-ixp4xx/nslu2-setup.c 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.15/arch/arm/mach-ixp4xx/nslu2-setup.c 1970-01-01 00:00:00.000000000 +0000
+@@ -16,11 +16,14 @@
+ #include <linux/kernel.h>
+ #include <linux/serial.h>
+ #include <linux/serial_8250.h>
++#include <linux/mtd/mtd.h>
+
+ #include <asm/mach-types.h>
+ #include <asm/mach/arch.h>
+ #include <asm/mach/flash.h>
+
++#include <net/maclist.h>
++
+ static struct flash_platform_data nslu2_flash_data = {
+ .map_name = "cfi_probe",
+ .width = 2,
+@@ -112,6 +115,37 @@ static void nslu2_power_off(void)
+ gpio_line_set(NSLU2_PO_GPIO, IXP4XX_GPIO_HIGH);
+ }
+
++/*
++ * When the RedBoot partition is added the MAC address is read from
++ * it.
++ */
++void flash_add(struct mtd_info *mtd) {
++ if (strcmp(mtd->name, "RedBoot") == 0) {
++ size_t retlen;
++ u_char mac[6];
++
++ /* The MAC is at a known offset... */
++ if (mtd->read(mtd, 0x3FFB0, 6, &retlen, mac) == 0 && retlen == 6) {
++ printk(KERN_INFO "NSLU2 MAC: %.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n",
++ mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
++ maclist_add(mac);
++ } else {
++ printk(KERN_ERR "NSLU2 MAC: read failed\n");
++ }
++ }
++}
++
++/*
++ * Nothing to do on remove at present.
++ */
++void flash_remove(struct mtd_info *mtd) {
++}
++
++struct mtd_notifier flash_notifier = {
++ .add = flash_add,
++ .remove = flash_remove,
++};
++
+ static void __init nslu2_init(void)
+ {
+ /* The NSLU2 has a 33MHz crystal on board - 1.01% different
+@@ -119,6 +153,11 @@ static void __init nslu2_init(void)
+ */
+ ixp4xx_set_board_tick_rate(66000000);
+
++ /* The flash has an ethernet MAC embedded in it which we need,
++ * that is all this notifier does.
++ */
++ register_mtd_user(&flash_notifier);
++
+ ixp4xx_sys_init();
+
+ pm_power_off = nslu2_power_off;
diff --git a/packages/linux/nslu2-kernel_2.6.14.2.bb b/packages/linux/nslu2-kernel_2.6.14.3.bb
index 12b4bc7cb5..3868757ffb 100644
--- a/packages/linux/nslu2-kernel_2.6.14.2.bb
+++ b/packages/linux/nslu2-kernel_2.6.14.3.bb
@@ -8,7 +8,7 @@ PR_CONFIG = "0"
# Increment the number below (i.e. the digits after PR) when
# making changes within this file or for changes to the patches
# applied to the kernel.
-PR = "r1.${PR_CONFIG}"
+PR = "r2.${PR_CONFIG}"
include nslu2-kernel.inc
@@ -30,6 +30,8 @@ N2K_PATCHES = "\
file://75-nslu2-leds.patch;patch=1 \
file://90-pegasus.patch;patch=1 \
file://20-timer.patch;patch=1 \
+ file://91-maclist.patch;patch=1 \
+ file://92-nslu2-maclist.patch;patch=1 \
file://anonymiser.patch;patch=1 \
"
diff --git a/packages/linux/nslu2-kernel_2.6.15-rc2.bb b/packages/linux/nslu2-kernel_2.6.15-rc2.bb
index d2b55c8e7b..9bb7e75346 100644
--- a/packages/linux/nslu2-kernel_2.6.15-rc2.bb
+++ b/packages/linux/nslu2-kernel_2.6.15-rc2.bb
@@ -8,7 +8,7 @@ PR_CONFIG = "0"
# Increment the number below (i.e. the digits after PR) when
# making changes within this file or for changes to the patches
# applied to the kernel.
-PR = "r0.${PR_CONFIG}"
+PR = "r2.${PR_CONFIG}"
include nslu2-kernel.inc
@@ -25,6 +25,8 @@ N2K_PATCHES = "\
file://81-nslu2-class-device-create.patch;patch=1 \
file://90-ixp4xx-nslu2.patch;patch=1 \
file://20-timer.patch;patch=1 \
+ file://91-maclist.patch;patch=1 \
+ file://92-nslu2-maclist.patch;patch=1 \
file://anonymiser.patch;patch=1 \
"