From: Felix Fietkau Date: Fri, 3 Nov 2006 21:58:08 +0000 (+0000) Subject: port new diag driver to kamikaze X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=c9dcbd5531225af936844b9a484dc384f688bebb;p=openwrt%2Fstaging%2Fansuel.git port new diag driver to kamikaze SVN-Revision: 5426 --- diff --git a/package/broadcom-diag/Makefile b/package/broadcom-diag/Makefile new file mode 100644 index 0000000000..9ab377a4f8 --- /dev/null +++ b/package/broadcom-diag/Makefile @@ -0,0 +1,43 @@ +# +# Copyright (C) 2006 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# +# $Id$ + +include $(TOPDIR)/rules.mk +include $(INCLUDE_DIR)/kernel.mk + +PKG_NAME:=broadcom-diag +PKG_RELEASE:=1 + +PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/$(PKG_NAME) + +include $(INCLUDE_DIR)/package.mk + +define KernelPackage/diag + SECTION:=kernel + CATEGORY:=Kernel drivers + DEFAULT:=y + DEPENDS:=@LINUX_2_4_BRCM||LINUX_2_6_BRCM + TITLE:=Driver for router LEDs and Buttons + VERSION:=$(PKG_RELEASE)+$(LINUX_VERSION)-$(BOARD)-$(LINUX_RELEASE) + FILES:=$(PKG_BUILD_DIR)/diag.$(LINUX_KMOD_SUFFIX) +endef + +define Build/Prepare + mkdir -p $(PKG_BUILD_DIR) + $(CP) ./src/* $(PKG_BUILD_DIR)/ +endef + +define Build/Compile + $(MAKE) -C "$(LINUX_DIR)" \ + CROSS_COMPILE="$(TARGET_CROSS)" \ + ARCH="$(LINUX_KARCH)" \ + SUBDIRS="$(PKG_BUILD_DIR)" \ + EXTRA_CFLAGS="-DBCMDRIVER -I$(LINUX_DIR)/arch/mips/bcm947xx/include" \ + modules +endef + +$(eval $(call KernelPackage,diag)) diff --git a/package/broadcom-diag/src/Makefile b/package/broadcom-diag/src/Makefile new file mode 100644 index 0000000000..a43f5f3043 --- /dev/null +++ b/package/broadcom-diag/src/Makefile @@ -0,0 +1,18 @@ +# $Id$ +# +# Makefile for diag driver +# +# Copyright (C) 2005 Felix Fietkau +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version +# 2 of the License, or (at your option) any later version. +# + +obj-m := diag.o + +ifeq ($(MAKING_MODULES),1) + +-include $(TOPDIR)/Rules.make +endif diff --git a/package/broadcom-diag/src/diag.c b/package/broadcom-diag/src/diag.c new file mode 100644 index 0000000000..b7c67314f7 --- /dev/null +++ b/package/broadcom-diag/src/diag.c @@ -0,0 +1,939 @@ +/* + * diag.c - GPIO interface driver for Broadcom boards + * + * Copyright (C) 2006 Mike Baker , + * Felix Fietkau + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * $Id:$ + */ +#include +#include +#include +#include +#include +#include +#include + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) +#include +#include +#define hotplug_path uevent_helper +#else +#include +#define INIT_WORK INIT_TQUEUE +#define schedule_work schedule_task +#define work_struct tq_struct +#define sbh bcm947xx_sbh +#define sbh_lock bcm947xx_sbh_lock +#endif + +#include +#include +#include +#include +#include +#include +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) +#include +#else +#include +#endif + +#define MODULE_NAME "diag" + +#define MAX_GPIO 8 +#define FLASH_TIME HZ/6 + +#define EXTIF_ADDR 0x1f000000 +#define EXTIF_UART (EXTIF_ADDR + 0x00800000) + +/* For LEDs */ +#define GPIO_TYPE_NORMAL (0x0 << 24) +#define GPIO_TYPE_EXTIF (0x1 << 24) +#define GPIO_TYPE_MASK (0xf << 24) + +static unsigned int gpiomask = 0; +module_param(gpiomask, int, 0644); + +enum polarity_t { + REVERSE = 0, + NORMAL = 1, +}; + +enum { + PROC_BUTTON, + PROC_LED, + PROC_MODEL, + PROC_GPIOMASK +}; + +struct prochandler_t { + int type; + void *ptr; +}; + +struct button_t { + struct prochandler_t proc; + char *name; + u16 gpio; + u8 polarity; + u8 pressed; + unsigned long seen; +}; + +struct led_t { + struct prochandler_t proc; + char *name; + u32 gpio; + u8 polarity; + u8 flash; + u8 state; +}; + +struct platform_t { + char *name; + struct button_t buttons[MAX_GPIO]; + struct led_t leds[MAX_GPIO]; +}; + +enum { + /* Linksys */ + WAP54GV1, + WAP54GV3, + WRT54GV1, + WRT54G, + WRTSL54GS, + WRT54G3G, + + /* ASUS */ + WLHDD, + WL300G, + WL500G, + WL500GD, + WL500GP, + ASUS_4702, + + /* Buffalo */ + WBR2_G54, + WHR_G54S, + WHR_HP_G54, + WHR2_A54G54, + WLA2_G54L, + BUFFALO_UNKNOWN, + BUFFALO_UNKNOWN_4710, + + /* Siemens */ + SE505V1, + SE505V2, + + /* US Robotics */ + USR5461, + + /* Dell */ + TM2300, + + /* Motorola */ + WE800G, + WR850GV1, + WR850GV2, + + /* Belkin */ + BELKIN_UNKNOWN, +}; + +static struct platform_t platforms[] = { + /* Linksys */ + [WAP54GV1] = { + .name = "Linksys WAP54G V1", + .buttons = { + { .name = "reset", .gpio = 1 << 0 }, + }, + .leds = { + { .name = "diag", .gpio = 1 << 3 }, + { .name = "wlan", .gpio = 1 << 4 }, + }, + }, + [WAP54GV3] = { + .name = "Linksys WAP54G V3", + .buttons = { + /* FIXME: verify this */ + { .name = "reset", .gpio = 1 << 7 }, + { .name = "ses", .gpio = 1 << 0 }, + }, + .leds = { + /* FIXME: diag? */ + { .name = "ses", .gpio = 1 << 1 }, + }, + }, + [WRT54GV1] = { + .name = "Linksys WRT54G V1.x", + .buttons = { + { .name = "reset", .gpio = 1 << 6 }, + }, + .leds = { + { .name = "diag", .gpio = 0x13 | GPIO_TYPE_EXTIF, .polarity = NORMAL }, + { .name = "dmz", .gpio = 0x12 | GPIO_TYPE_EXTIF, .polarity = NORMAL }, + }, + }, + [WRT54G] = { + .name = "Linksys WRT54G*", + .buttons = { + { .name = "reset", .gpio = 1 << 6 }, + { .name = "ses", .gpio = 1 << 4 }, + }, + .leds = { + { .name = "power", .gpio = 1 << 1, .polarity = NORMAL }, + { .name = "dmz", .gpio = 1 << 7, .polarity = REVERSE }, + { .name = "ses_white", .gpio = 1 << 2, .polarity = REVERSE }, + { .name = "ses_orange", .gpio = 1 << 3, .polarity = REVERSE }, + { .name = "wlan", .gpio = 1 << 0, .polarity = REVERSE }, + }, + }, + [WRTSL54GS] = { + .name = "Linksys WRTSL54GS", + .buttons = { + { .name = "reset", .gpio = 1 << 6 }, + { .name = "ses", .gpio = 1 << 4 }, + }, + .leds = { + { .name = "power", .gpio = 1 << 1, .polarity = NORMAL }, + { .name = "dmz", .gpio = 1 << 7, .polarity = REVERSE }, + { .name = "ses_white", .gpio = 1 << 5, .polarity = REVERSE }, + { .name = "ses_orange", .gpio = 1 << 7, .polarity = REVERSE }, + }, + }, + [WRT54G3G] = { + .name = "Linksys WRT54G3G", + .buttons = { + { .name = "reset", .gpio = 1 << 6 }, + { .name = "3g", .gpio = 1 << 4 }, + }, + .leds = { + { .name = "power", .gpio = 1 << 1, .polarity = NORMAL }, + { .name = "dmz", .gpio = 1 << 7, .polarity = REVERSE }, + { .name = "3g_green", .gpio = 1 << 2, .polarity = NORMAL }, + { .name = "3g_blue", .gpio = 1 << 3, .polarity = NORMAL }, + { .name = "3g_blink", .gpio = 1 << 5, .polarity = NORMAL }, + }, + }, + /* Asus */ + [WLHDD] = { + .name = "ASUS WL-HDD", + .buttons = { + { .name = "reset", .gpio = 1 << 6 }, + }, + .leds = { + { .name = "power", .gpio = 1 << 0, .polarity = REVERSE }, + }, + }, + [WL300G] = { + .name = "ASUS WL-500g", + .buttons = { + { .name = "reset", .gpio = 1 << 6 }, + }, + .leds = { + { .name = "power", .gpio = 1 << 0, .polarity = REVERSE }, + }, + }, + [WL500G] = { + .name = "ASUS WL-500g", + .buttons = { + { .name = "reset", .gpio = 1 << 6 }, + }, + .leds = { + { .name = "power", .gpio = 1 << 0, .polarity = REVERSE }, + }, + }, + [WL500GD] = { + .name = "ASUS WL-500g Deluxe", + .buttons = { + { .name = "reset", .gpio = 1 << 6 }, + }, + .leds = { + { .name = "power", .gpio = 1 << 0, .polarity = REVERSE }, + }, + }, + [WL500GP] = { + .name = "ASUS WL-500g Premium", + .buttons = { + { .name = "reset", .gpio = 1 << 0 }, + { .name = "ses", .gpio = 1 << 4 }, + }, + .leds = { + { .name = "power", .gpio = 1 << 1, .polarity = REVERSE }, + }, + }, + [ASUS_4702] = { + .name = "ASUS (unknown, BCM4702)", + .buttons = { + { .name = "reset", .gpio = 1 << 6 }, + }, + .leds = { + { .name = "power", .gpio = 1 << 0, .polarity = REVERSE }, + }, + }, + /* Buffalo */ + [WHR_G54S] = { + .name = "Buffalo WHR-G54S", + .buttons = { + { .name = "reset", .gpio = 1 << 4 }, + { .name = "ses", .gpio = 1 << 0 }, + }, + .leds = { + { .name = "diag", .gpio = 1 << 1, .polarity = REVERSE }, + { .name = "internal", .gpio = 1 << 3, .polarity = REVERSE }, + { .name = "ses", .gpio = 1 << 6, .polarity = REVERSE }, + }, + }, + [WBR2_G54] = { + .name = "Buffalo WBR2-G54", + /* FIXME: verify */ + .buttons = { + { .name = "reset", .gpio = 1 << 7 }, + }, + .leds = { + { .name = "diag", .gpio = 1 << 1, .polarity = REVERSE }, + }, + }, + [WHR_HP_G54] = { + .name = "Buffalo WHR-HP-G54", + .buttons = { + { .name = "reset", .gpio = 1 << 4 }, + { .name = "bridge", .gpio = 1 << 5 }, + { .name = "ses", .gpio = 1 << 0 }, + }, + .leds = { + { .name = "diag", .gpio = 1 << 7, .polarity = REVERSE }, + { .name = "bridge", .gpio = 1 << 1, .polarity = REVERSE }, + { .name = "ses", .gpio = 1 << 6, .polarity = REVERSE }, + }, + }, + [WHR2_A54G54] = { + .name = "Buffalo WHR2-A54G54", + .buttons = { + { .name = "reset", .gpio = 1 << 4 }, + }, + .leds = { + { .name = "diag", .gpio = 1 << 7, .polarity = REVERSE }, + }, + }, + [WLA2_G54L] = { + .name = "Buffalo WLA2-G54L", + /* FIXME: verify */ + .buttons = { + { .name = "reset", .gpio = 1 << 7 }, + }, + .leds = { + { .name = "diag", .gpio = 1 << 1, .polarity = REVERSE }, + }, + }, + [BUFFALO_UNKNOWN] = { + .name = "Buffalo (unknown)", + .buttons = { + { .name = "reset", .gpio = 1 << 7 }, + }, + .leds = { + { .name = "diag", .gpio = 1 << 1, .polarity = REVERSE }, + }, + }, + [BUFFALO_UNKNOWN_4710] = { + .name = "Buffalo (unknown, BCM4710)", + .buttons = { + { .name = "reset", .gpio = 1 << 4 }, + }, + .leds = { + { .name = "diag", .gpio = 1 << 1, .polarity = REVERSE }, + }, + }, + /* Siemens */ + [SE505V1] = { + .name = "Siemens SE505 V1", + .buttons = { + /* No usable buttons */ + }, + .leds = { + { .name = "dmz", .gpio = 1 << 4, .polarity = REVERSE }, + { .name = "wlan", .gpio = 1 << 3, .polarity = REVERSE }, + }, + }, + [SE505V2] = { + .name = "Siemens SE505 V2", + .buttons = { + /* No usable buttons */ + }, + .leds = { + { .name = "power", .gpio = 1 << 5, .polarity = REVERSE }, + { .name = "dmz", .gpio = 1 << 0, .polarity = REVERSE }, + { .name = "wlan", .gpio = 1 << 3, .polarity = REVERSE }, + }, + }, + /* US Robotics */ + [USR5461] = { + .name = "U.S. Robotics USR5461", + .buttons = { + /* No usable buttons */ + }, + .leds = { + { .name = "wlan", .gpio = 1 << 0, .polarity = REVERSE }, + { .name = "printer", .gpio = 1 << 1, .polarity = REVERSE }, + }, + }, + /* Dell */ + [TM2300] = { + .name = "Dell TrueMobile 2300", + .buttons = { + { .name = "reset", .gpio = 1 << 0 }, + }, + .leds = { + { .name = "diag", .gpio = 1 << 7, .polarity = REVERSE }, + }, + }, + /* Motorola */ + [WE800G] = { + .name = "Motorola WE800G", + .buttons = { + { .name = "reset", .gpio = 1 << 0 }, + }, + .leds = { + { .name = "power", .gpio = 1 << 4, .polarity = NORMAL }, + { .name = "diag", .gpio = 1 << 2, .polarity = REVERSE }, + { .name = "wlan_amber", .gpio = 1 << 1, .polarity = NORMAL }, + }, + }, + [WR850GV1] = { + .name = "Motorola WR850G V1", + .buttons = { + { .name = "reset", .gpio = 1 << 0 }, + }, + .leds = { + { .name = "power", .gpio = 1 << 4, .polarity = NORMAL }, + { .name = "diag", .gpio = 1 << 3, .polarity = REVERSE }, + { .name = "modem", .gpio = 1 << 6, .polarity = NORMAL }, + { .name = "wlan_red", .gpio = 1 << 5, .polarity = REVERSE }, + { .name = "wlan_green", .gpio = 1 << 7, .polarity = REVERSE }, + }, + }, + [WR850GV2] = { + .name = "Motorola WR850G V2", + .buttons = { + { .name = "reset", .gpio = 1 << 5 }, + }, + .leds = { + { .name = "diag", .gpio = 1 << 1, .polarity = REVERSE }, + { .name = "wlan", .gpio = 1 << 0, .polarity = NORMAL }, + { .name = "modem_green",.gpio = 1 << 6, .polarity = REVERSE }, + { .name = "modem_red", .gpio = 1 << 7, .polarity = REVERSE }, + }, + }, + /* Belkin */ + [BELKIN_UNKNOWN] = { + .name = "Belkin (unknown)", + /* FIXME: verify & add detection */ + .buttons = { + { .name = "reset", .gpio = 1 << 7 }, + }, + .leds = { + { .name = "power", .gpio = 1 << 5, .polarity = NORMAL }, + { .name = "wlan", .gpio = 1 << 3, .polarity = NORMAL }, + { .name = "connected", .gpio = 1 << 0, .polarity = NORMAL }, + }, + }, +}; + +extern void *sbh; +extern spinlock_t sbh_lock; +extern char *nvram_get(char *str); + +static struct proc_dir_entry *diag, *leds; +static struct platform_t platform; +static void led_flash(unsigned long dummy); + +#define getvar(str) (nvram_get(str)?:"") + +static void set_led_extif(struct led_t *led) +{ + volatile u8 *addr = (volatile u8 *) KSEG1ADDR(EXTIF_UART) + (led->gpio & ~GPIO_TYPE_MASK); + if (led->state) + *addr = 0xFF; + else + *addr; +} + +static struct platform_t __init *platform_detect(void) +{ + char *boardnum, *boardtype, *buf; + + boardnum = getvar("boardnum"); + boardtype = getvar("boardtype"); + if (strncmp(getvar("pmon_ver"), "CFE", 3) == 0) { + /* CFE based - newer hardware */ + if (!strcmp(boardnum, "42")) { /* Linksys */ + if (!strcmp(boardtype, "0x0101")) + return &platforms[WRT54G3G]; + + if (!strcmp(getvar("et1phyaddr"),"5") && !strcmp(getvar("et1mdcport"), "1")) + return &platforms[WRTSL54GS]; + + /* default to WRT54G */ + return &platforms[WRT54G]; + } + + if (!strcmp(boardnum, "45")) { /* ASUS */ + if (!strcmp(boardtype,"0x042f")) + return &platforms[WL500GP]; + else + return &platforms[WL500GD]; + } + + if (!strcmp(boardnum, "10496")) + return &platforms[USR5461]; + } else { /* PMON based - old stuff */ + if (!strncmp(boardtype, "bcm94710dev", 11)) { + if (!strcmp(boardnum, "42")) + return &platforms[WRT54GV1]; + if (simple_strtoul(boardnum, NULL, 9) == 2) + return &platforms[WAP54GV1]; + } + if (!strncmp(getvar("hardware_version"), "WL500-", 6)) + return &platforms[WL500G]; + if (!strncmp(getvar("hardware_version"), "WL300-", 6)) { + /* Either WL-300g or WL-HDD, do more extensive checks */ + if ((simple_strtoul(getvar("et0phyaddr"), NULL, 0) == 0) && + (simple_strtoul(getvar("et1phyaddr"), NULL, 9) == 1)) + return &platforms[WLHDD]; + if ((simple_strtoul(getvar("et0phyaddr"), NULL, 0) == 0) && + (simple_strtoul(getvar("et1phyaddr"), NULL, 9) == 10)) + return &platforms[WL300G]; + } + + /* unknown asus stuff, probably bcm4702 */ + if (!strncmp(boardnum, "asusX", 5)) + return &platforms[ASUS_4702]; + + if ((simple_strtoul(getvar("GemtekPmonVer"), NULL, 0) == 9) && + (simple_strtoul(getvar("et0phyaddr"), NULL, 0) == 30)) { + if (!strncmp(getvar("ModelId"),"WE800G", 6)) + return &platforms[WE800G]; + else + return &platforms[WR850GV1]; + } + } + + if ((buf = (nvram_get("melco_id") ?: nvram_get("buffalo_id")))) { + /* Buffalo hardware, check id for specific hardware matches */ + if (!strcmp(buf, "29bb0332")) + return &platforms[WBR2_G54]; + if (!strcmp(buf, "29129")) + return &platforms[WLA2_G54L]; + if (!strcmp(buf, "30189")) + return &platforms[WHR_HP_G54]; + if (!strcmp(buf, "30182")) + return &platforms[WHR_G54S]; + if (!strcmp(buf, "290441dd")) + return &platforms[WHR2_A54G54]; + } + + if (buf || !strcmp(boardnum, "00")) {/* probably buffalo */ + if (!strncmp(boardtype, "bcm94710ap", 10)) + return &platforms[BUFFALO_UNKNOWN_4710]; + else + return &platforms[BUFFALO_UNKNOWN]; + } + + if (!strcmp(getvar("CFEver"), "MotoWRv203")) + return &platforms[WR850GV2]; + + /* not found */ + return NULL; +} + +static ssize_t diag_proc_read(struct file *file, char *buf, size_t count, loff_t *ppos); +static ssize_t diag_proc_write(struct file *file, const char *buf, size_t count, void *data); +static struct file_operations diag_proc_fops = { + read: diag_proc_read, + write: diag_proc_write +}; + + + +static ssize_t diag_proc_read(struct file *file, char *buf, size_t count, loff_t *ppos) +{ +#ifdef LINUX_2_4 + struct inode *inode = file->f_dentry->d_inode; + struct proc_dir_entry *dent = inode->u.generic_ip; +#else + struct proc_dir_entry *dent = PDE(file->f_dentry->d_inode); +#endif + char *page; + int len = 0; + + if ((page = kmalloc(1024, GFP_KERNEL)) == NULL) + return -ENOBUFS; + + if (dent->data != NULL) { + struct prochandler_t *handler = (struct prochandler_t *) dent->data; + switch (handler->type) { + case PROC_LED: { + struct led_t * led = (struct led_t *) handler->ptr; + if (led->flash) { + len = sprintf(page, "f\n"); + } else { + if (led->gpio & GPIO_TYPE_EXTIF) { + len = sprintf(page, "%d\n", led->state); + } else { + int in = (sb_gpioin(sbh) & led->gpio ? 1 : 0); + int p = (led->polarity == NORMAL ? 0 : 1); + len = sprintf(page, "%d\n", ((in ^ p) ? 1 : 0)); + } + } + break; + } + case PROC_MODEL: + len = sprintf(page, "%s\n", platform.name); + break; + case PROC_GPIOMASK: + len = sprintf(page, "%d\n", gpiomask); + break; + } + } + len += 1; + + if (*ppos < len) { + len = min_t(int, len - *ppos, count); + if (copy_to_user(buf, (page + *ppos), len)) { + kfree(page); + return -EFAULT; + } + *ppos += len; + } else { + len = 0; + } + + return len; +} + + +static ssize_t diag_proc_write(struct file *file, const char *buf, size_t count, void *data) +{ +#ifdef LINUX_2_4 + struct inode *inode = file->f_dentry->d_inode; + struct proc_dir_entry *dent = inode->u.generic_ip; +#else + struct proc_dir_entry *dent = PDE(file->f_dentry->d_inode); +#endif + char *page; + int ret = -EINVAL; + + if ((page = kmalloc(count + 1, GFP_KERNEL)) == NULL) + return -ENOBUFS; + + if (copy_from_user(page, buf, count)) { + kfree(page); + return -EINVAL; + } + page[count] = 0; + + if (dent->data != NULL) { + struct prochandler_t *handler = (struct prochandler_t *) dent->data; + switch (handler->type) { + case PROC_LED: { + struct led_t *led = (struct led_t *) handler->ptr; + int p = (led->polarity == NORMAL ? 0 : 1); + + if (!(led->gpio & GPIO_TYPE_EXTIF) && (led->gpio & gpiomask)) + break; + + if (page[0] == 'f') { + led->flash = 1; + led_flash(0); + } else { + led->flash = 0; + if (led->gpio & GPIO_TYPE_EXTIF) { + led->state = p ^ ((page[0] == '1') ? 1 : 0); + set_led_extif(led); + } else { + sb_gpioouten(sbh, led->gpio, led->gpio, GPIO_DRV_PRIORITY); + sb_gpiocontrol(sbh, led->gpio, 0, GPIO_DRV_PRIORITY); + sb_gpioout(sbh, led->gpio, ((p ^ (page[0] == '1')) ? led->gpio : 0), GPIO_DRV_PRIORITY); + } + } + break; + } + case PROC_GPIOMASK: + gpiomask = simple_strtoul(page, NULL, 16); + break; + } + ret = count; + } + + kfree(page); + return ret; +} + +struct event_t { + struct work_struct tq; + char buf[256]; + char *argv[3]; + char *envp[6]; +}; + +static void hotplug_button(struct event_t *event) +{ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + call_usermodehelper (event->argv[0], event->argv, event->envp, 1); +#else + call_usermodehelper (event->argv[0], event->argv, event->envp); +#endif + kfree(event); +} + +static void set_irqenable(int enabled) +{ + unsigned int coreidx; + unsigned long flags; + chipcregs_t *cc; + + spin_lock_irqsave(sbh_lock, flags); + coreidx = sb_coreidx(sbh); + if ((cc = sb_setcore(sbh, SB_CC, 0))) { + int intmask; + + intmask = readl(&cc->intmask); + if (enabled) + intmask |= CI_GPIO; + else + intmask &= ~CI_GPIO; + writel(intmask, &cc->intmask); + } + sb_setcoreidx(sbh, coreidx); + spin_unlock_irqrestore(sbh_lock, flags); +} + + +static irqreturn_t button_handler(int irq, void *dev_id, struct pt_regs *regs) +{ + struct button_t *b; + int in = sb_gpioin(sbh); + struct event_t *event; + + set_irqenable(0); + for (b = platform.buttons; b->name; b++) { + if (b->gpio & gpiomask) + continue; + + if (b->polarity != (in & b->gpio)) { + b->pressed ^= 1; + + if ((event = (struct event_t *)kmalloc (sizeof(struct event_t), GFP_ATOMIC))) { + int i; + char *scratch = event->buf; + + i = 0; + event->argv[i++] = hotplug_path; + event->argv[i++] = "button"; + event->argv[i] = 0; + + i = 0; + event->envp[i++] = "HOME=/"; + event->envp[i++] = "PATH=/sbin:/bin:/usr/sbin:/usr/bin"; + event->envp[i++] = scratch; + scratch += sprintf (scratch, "ACTION=%s", b->pressed?"pressed":"released") + 1; + event->envp[i++] = scratch; + scratch += sprintf (scratch, "BUTTON=%s", b->name) + 1; + event->envp[i++] = scratch; + scratch += sprintf (scratch, "SEEN=%ld", (jiffies - b->seen)/HZ) + 1; + event->envp[i] = 0; + + INIT_WORK(&event->tq, (void *)(void *)hotplug_button, (void *)event); + schedule_work(&event->tq); + } + + b->seen = jiffies; + b->polarity ^= b->gpio; + sb_gpiointpolarity(sbh, b->gpio, b->polarity, GPIO_DRV_PRIORITY); + } + } + set_irqenable(1); + return IRQ_HANDLED; +} + +static struct timer_list led_timer = { + function: &led_flash +}; + +static void led_flash(unsigned long dummy) { + struct led_t *l; + unsigned mask = 0; + unsigned extif_blink = 0; + + for (l = platform.leds; l->name; l++) { + if (l->flash) { + if (l->gpio & GPIO_TYPE_EXTIF) { + extif_blink = 1; + l->state = !l->state; + set_led_extif(l); + } else { + mask |= l->gpio; + } + } + } + + mask &= ~gpiomask; + if (mask) { + unsigned val; + + val = ~sb_gpioin(sbh); + val &= mask; + + sb_gpioouten(sbh, mask, mask, GPIO_DRV_PRIORITY); + sb_gpiocontrol(sbh, mask, 0, GPIO_DRV_PRIORITY); + sb_gpioout(sbh, mask, val, GPIO_DRV_PRIORITY); + } + if (mask || extif_blink) { + mod_timer(&led_timer, jiffies + FLASH_TIME); + } +} + +static void __init register_buttons(struct button_t *b) +{ + int irq = sb_irq(sbh) + 2; + + request_irq(irq, button_handler, SA_SHIRQ | SA_SAMPLE_RANDOM, "gpio", button_handler); + + for (; b->name; b++) { + if (b->gpio & gpiomask) + continue; + + sb_gpioouten(sbh, b->gpio,0, GPIO_DRV_PRIORITY); + sb_gpiocontrol(sbh, b->gpio,0, GPIO_DRV_PRIORITY); + b->polarity = sb_gpioin(sbh) & b->gpio; + sb_gpiointpolarity(sbh, b->gpio, b->polarity, GPIO_DRV_PRIORITY); + sb_gpiointmask(sbh, b->gpio, b->gpio, GPIO_DRV_PRIORITY); + } + set_irqenable(1); +} + +static void __exit unregister_buttons(struct button_t *b) +{ + int irq = sb_irq(sbh) + 2; + + for (; b->name; b++) + sb_gpiointmask(sbh, b->gpio, 0, GPIO_DRV_PRIORITY); + + free_irq(irq, button_handler); +} + +static void __init register_leds(struct led_t *l) +{ + struct proc_dir_entry *p; + + leds = proc_mkdir("led", diag); + if (!leds) + return; + + for(; l->name; l++) { + if (l->gpio & gpiomask) + continue; + + if (l->gpio & GPIO_TYPE_EXTIF) { + l->state = 0; + set_led_extif(l); + } else { + sb_gpioouten(sbh, l->gpio, l->gpio, GPIO_DRV_PRIORITY); + sb_gpiocontrol(sbh, l->gpio, 0, GPIO_DRV_PRIORITY); + sb_gpioout(sbh, l->gpio, (l->polarity == NORMAL)?0:l->gpio, GPIO_DRV_PRIORITY); + } + + if ((p = create_proc_entry(l->name, S_IRUSR, leds))) { + l->proc.type = PROC_LED; + l->proc.ptr = l; + p->data = (void *) &l->proc; + p->proc_fops = &diag_proc_fops; + } + } +} + +static void __exit unregister_leds(struct led_t *l) +{ + for(; l->name; l++) + remove_proc_entry(l->name, leds); + + remove_proc_entry("led", diag); +} + +static void __exit diag_exit(void) +{ + + del_timer(&led_timer); + + if (platform.buttons) + unregister_buttons(platform.buttons); + + if (platform.leds) + unregister_leds(platform.leds); + + remove_proc_entry("model", diag); + remove_proc_entry("gpiomask", diag); + remove_proc_entry("diag", NULL); +} + +static struct prochandler_t proc_model = { .type = PROC_MODEL }; +static struct prochandler_t proc_gpiomask = { .type = PROC_GPIOMASK }; + +static int __init diag_init(void) +{ + static struct proc_dir_entry *p; + static struct platform_t *detected; + + detected = platform_detect(); + if (!detected) { + printk(MODULE_NAME ": Router model not detected.\n"); + return -ENODEV; + } + memcpy(&platform, detected, sizeof(struct platform_t)); + + printk(MODULE_NAME ": Detected '%s'\n", platform.name); + + if (!(diag = proc_mkdir("diag", NULL))) { + printk(MODULE_NAME ": proc_mkdir on /proc/diag failed\n"); + return -EINVAL; + } + + if ((p = create_proc_entry("model", S_IRUSR, diag))) { + p->data = (void *) &proc_model; + p->proc_fops = &diag_proc_fops; + } + + if ((p = create_proc_entry("gpiomask", S_IRUSR | S_IWUSR, diag))) { + p->data = (void *) &proc_gpiomask; + p->proc_fops = &diag_proc_fops; + } + + if (platform.buttons) + register_buttons(platform.buttons); + + if (platform.leds) + register_leds(platform.leds); + + return 0; +} + +module_init(diag_init); +module_exit(diag_exit); + +MODULE_AUTHOR("Mike Baker, Felix Fietkau / OpenWrt.org"); +MODULE_LICENSE("GPL"); diff --git a/package/diag/Makefile b/package/diag/Makefile deleted file mode 100644 index c182321cc1..0000000000 --- a/package/diag/Makefile +++ /dev/null @@ -1,48 +0,0 @@ -# -# Copyright (C) 2006 OpenWrt.org -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# -# $Id$ - -include $(TOPDIR)/rules.mk -include $(INCLUDE_DIR)/kernel.mk - -PKG_NAME:=kmod-diag -PKG_RELEASE:=1 - -PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/$(PKG_NAME) - -include $(INCLUDE_DIR)/package.mk - -define Package/kmod-diag - SECTION:=kernel - CATEGORY:=Kernel drivers - DEFAULT:=y - DEPENDS:=@LINUX_2_4_BRCM - TITLE:=Driver for router LEDs and Buttons - VERSION:=$(LINUX_VERSION)-$(BOARD)-$(PKG_RELEASE) -endef - -define Build/Prepare - mkdir -p $(PKG_BUILD_DIR) - $(CP) ./src/* $(PKG_BUILD_DIR)/ -endef - -define Build/Compile - $(MAKE) -C "$(LINUX_DIR)" \ - CROSS_COMPILE="$(TARGET_CROSS)" \ - ARCH="$(LINUX_KARCH)" \ - SUBDIRS="$(PKG_BUILD_DIR)" \ - EXTRA_CFLAGS="-DBCMDRIVER -I$(LINUX_DIR)/arch/mips/bcm947xx/include" \ - modules -endef - -define Package/kmod-diag/install - install -d -m0755 $(1)/lib/modules/$(LINUX_VERSION) - $(CP) $(PKG_BUILD_DIR)/diag.$(LINUX_KMOD_SUFFIX) \ - $(1)/lib/modules/$(LINUX_VERSION)/ -endef - -$(eval $(call BuildPackage,kmod-diag)) diff --git a/package/diag/src/Makefile b/package/diag/src/Makefile deleted file mode 100644 index 169f2e9725..0000000000 --- a/package/diag/src/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -# $Id$ -# -# Makefile for diag driver -# -# Copyright (C) 2005 Felix Fietkau -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version -# 2 of the License, or (at your option) any later version. -# - -obj-m := diag.o - -ifeq ($(MAKING_MODULES),1) -export-objs := diag.o - --include $(TOPDIR)/Rules.make -endif diff --git a/package/diag/src/diag.c b/package/diag/src/diag.c deleted file mode 100644 index d25f749df5..0000000000 --- a/package/diag/src/diag.c +++ /dev/null @@ -1,284 +0,0 @@ -/* - * diag_led.c - replacement diag module - * - * Copyright (C) 2004 Mike Baker, - * Imre Kaloz - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * $Id$ - */ - -/* - * ChangeLog: - * 2004/03/28 initial release - * 2004/08/26 asus & buffalo support added - * 2005/03/14 asus wl-500g deluxe and buffalo v2 support added - * 2005/04/13 added licensing informations - * 2005/04/18 base reset polarity off initial readings - * 2006/02/07 motorola wa840g/we800g support added - * 2006/08/18 asus power led support added - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -extern char * nvram_get(const char *name); -static void *sbh; - -// v2.x - - - - - -#define DIAG_GPIO (1<<1) -#define DMZ_GPIO (1<<7) - -static void set_gpio(uint32 mask, uint32 value) { - sb_gpiocontrol(sbh,mask, 0, GPIO_DRV_PRIORITY); - sb_gpioouten(sbh,mask,mask,GPIO_DRV_PRIORITY); - sb_gpioout(sbh,mask,value,GPIO_DRV_PRIORITY); -} - -static void v2_set_diag(u8 state) { - set_gpio(DIAG_GPIO,state); -} -static void v2_set_dmz(u8 state) { - set_gpio(DMZ_GPIO,state); -} - -// asus wl-500g (+deluxe) -#define ASUS_PWR_GPIO (1<<0) - -static void asus_set_pwr(u8 state) { - set_gpio(ASUS_PWR_GPIO,state); -} - -// v1.x - - - - - -#define LED_DIAG 0x13 -#define LED_DMZ 0x12 - -static void v1_set_diag(u8 state) { - if (!state) { - *(volatile u8*)(KSEG1ADDR(BCM4710_EUART)+LED_DIAG)=0xFF; - } else { - *(volatile u8*)(KSEG1ADDR(BCM4710_EUART)+LED_DIAG); - } -} -static void v1_set_dmz(u8 state) { - if (!state) { - *(volatile u8*)(KSEG1ADDR(BCM4710_EUART)+LED_DMZ)=0xFF; - } else { - *(volatile u8*)(KSEG1ADDR(BCM4710_EUART)+LED_DMZ); - } -} - -static void wap1_set_diag(u8 state) { - set_gpio(1<<3,state); -} -static void wap1_set_dmz(u8 state) { - set_gpio(1<<4,state); -} - -// - - - - - -static void ignore(u8 ignored) {}; - -// - - - - - -#define BIT_DMZ 0x01 -#define BIT_PWR 0x02 -#define BIT_DIAG 0x04 - -void (*set_diag)(u8 state); -void (*set_dmz)(u8 state); -void (*set_pwr)(u8 state); - -static unsigned int diag = 0x02; // default: diag off, pwr on, dmz off - -static void diag_change(void) -{ - set_diag(0xFF); // off - set_dmz(0xFF); // off - set_pwr(0xFF); // off - - if(diag & BIT_DIAG) - set_diag(0x00); // on - if(diag & BIT_DMZ) - set_dmz(0x00); // on - if (diag & BIT_PWR) - set_pwr(0x00); //on -} - -static int proc_diag(ctl_table *table, int write, struct file *filp, - void *buffer, size_t *lenp) -{ - int r; - r = proc_dointvec(table, write, filp, buffer, lenp); - if (write && !r) { - diag_change(); - } - return r; -} - -// - - - - - -static unsigned char reset_gpio = 0; -static unsigned char reset_polarity = 0; -static unsigned int reset = 0; - -static int proc_reset(ctl_table *table, int write, struct file *filp, - void *buffer, size_t *lenp) -{ - - if (reset_gpio) { - sb_gpiocontrol(sbh,reset_gpio,reset_gpio,GPIO_DRV_PRIORITY); - sb_gpioouten(sbh,reset_gpio,0,GPIO_DRV_PRIORITY); - reset=!(sb_gpioin(sbh)&reset_gpio); - - if (reset_polarity) reset=!reset; - } else { - reset=0; - } - - return proc_dointvec(table, write, filp, buffer, lenp); -} - -// - - - - - -static struct ctl_table_header *diag_sysctl_header; - -static ctl_table sys_diag[] = { - { - ctl_name: 2000, - procname: "diag", - data: &diag, - maxlen: sizeof(diag), - mode: 0644, - proc_handler: proc_diag - }, - { - ctl_name: 2001, - procname: "reset", - data: &reset, - maxlen: sizeof(reset), - mode: 0444, - proc_handler: proc_reset - }, - { 0 } -}; - -static int __init diag_init(void) -{ - char *buf; - u32 board_type; - sbh = (void *)sb_kattach(); - sb_gpiosetcore(sbh); - - board_type = sb_boardtype(sbh); - printk(KERN_INFO "diag boardtype: %08x\n",board_type); - - set_diag=ignore; - set_dmz=ignore; - set_pwr=ignore; - - buf=nvram_get("pmon_ver") ?: ""; - if (((board_type & 0xf00) == 0x400) && (strncmp(buf, "CFE", 3) != 0)) { - buf=nvram_get("boardtype")?:""; - if (!strncmp(buf,"bcm94710dev",11)) { - buf=nvram_get("boardnum")?:""; - if (!strcmp(buf,"42")) { - // wrt54g v1.x - set_diag=v1_set_diag; - set_dmz=v1_set_dmz; - reset_gpio=(1<<6); - } - if (simple_strtoul(buf, NULL, 0) == 2) { - // wap54g v1.0 - // do not use strcmp as PMON v5.3.22 has some built-in nvram - // defaults with trailing \r - set_diag=wap1_set_diag; - // no dmz led on wap54g, used green led - // labeled "WLAN Link" instead - set_dmz=wap1_set_dmz; - reset_gpio=(1<<0); - } - if (!strcmp(buf,"asusX")) { - //asus wl-500g - set_pwr=asus_set_pwr; - reset_gpio=(1<<6); - } - if (!strcmp(buf,"2")) { - //wa840g v1 / we800g v1 - reset_gpio=(1<<0); - } - } - if (!strcmp(buf,"bcm94710ap")) { - buf=nvram_get("boardnum")?:""; - if (!strcmp(buf,"42")) { - // buffalo - set_dmz=v2_set_dmz; - reset_gpio=(1<<4); - } - if (!strcmp(buf,"44")) { - //dell truemobile - set_dmz=v2_set_dmz; - reset_gpio=(1<<0); - } - } - } else { - buf=nvram_get("boardnum")?:""; - if (!strcmp(buf,"42")) { - //linksys - set_diag=v2_set_diag; - set_dmz=v2_set_dmz; - reset_gpio=(1<<6); - } - if (!strcmp(buf,"44")) { - //motorola - reset_gpio=(1<<5); - } - if (!strcmp(buf,"00")) { - //buffalo - reset_gpio=(1<<7); - } - if (!strcmp(buf,"45")) { - //wl-500g deluxe - set_pwr=asus_set_pwr; - reset_gpio=(1<<6); - } - } - - - sb_gpiocontrol(sbh,reset_gpio,reset_gpio,GPIO_DRV_PRIORITY); - sb_gpioouten(sbh,reset_gpio,0,GPIO_DRV_PRIORITY); - reset_polarity=!(sb_gpioin(sbh)&reset_gpio); - - diag_sysctl_header = register_sysctl_table(sys_diag, 0); - diag_change(); - - return 0; -} - -static void __exit diag_exit(void) -{ - unregister_sysctl_table(diag_sysctl_header); -} - -EXPORT_NO_SYMBOLS; -MODULE_AUTHOR("openwrt.org"); -MODULE_LICENSE("GPL"); - -module_init(diag_init); -module_exit(diag_exit); diff --git a/target/linux/brcm-2.4/patches/001-bcm47xx.patch b/target/linux/brcm-2.4/patches/001-bcm47xx.patch index 17e4bf9ef2..98195f55db 100644 --- a/target/linux/brcm-2.4/patches/001-bcm47xx.patch +++ b/target/linux/brcm-2.4/patches/001-bcm47xx.patch @@ -1743,7 +1743,7 @@ diff -urN linux.old/arch/mips/bcm947xx/compressed/Makefile linux.dev/arch/mips/b diff -urN linux.old/arch/mips/bcm947xx/export.c linux.dev/arch/mips/bcm947xx/export.c --- linux.old/arch/mips/bcm947xx/export.c 1970-01-01 01:00:00.000000000 +0100 +++ linux.dev/arch/mips/bcm947xx/export.c 2006-10-02 21:19:59.000000000 +0200 -@@ -0,0 +1,65 @@ +@@ -0,0 +1,70 @@ +#include + +#define _export(n) \ @@ -1772,17 +1772,21 @@ diff -urN linux.old/arch/mips/bcm947xx/export.c linux.dev/arch/mips/bcm947xx/exp +_export(sb_coreflags) +_export(sb_coreflagshi) +_export(sb_coreidx) ++_export(sb_coreregs) +_export(sb_corerev) +_export(sb_coreunit) +_export(sb_detach) +_export(sb_deviceremoved) +_export(sb_gpiosetcore) +_export(sb_gpiocontrol) ++_export(sb_gpiointmask) ++_export(sb_gpiointpolarity) +_export(sb_gpioled) +_export(sb_gpioin) +_export(sb_gpioout) +_export(sb_gpioouten) +_export(sb_gpiotimerval) ++_export(sb_irq) +_export(sb_iscoreup) +_export(sb_pci_setup) +_export(sb_pcirev) @@ -1790,6 +1794,7 @@ diff -urN linux.old/arch/mips/bcm947xx/export.c linux.dev/arch/mips/bcm947xx/exp +_export(sb_pcmciarev) +_export(sb_register_intr_callback) +_export(sb_setcore) ++_export(sb_setcoreidx) +_export(sb_war16165) +_export(sb_osh) + diff --git a/target/linux/brcm-2.6/patches/001-bcm947xx.patch b/target/linux/brcm-2.6/patches/001-bcm947xx.patch index 5e855be92f..8c077adce8 100644 --- a/target/linux/brcm-2.6/patches/001-bcm947xx.patch +++ b/target/linux/brcm-2.6/patches/001-bcm947xx.patch @@ -1,6 +1,6 @@ diff -urN linux.old/arch/mips/bcm947xx/broadcom/bcmsrom.c linux.dev/arch/mips/bcm947xx/broadcom/bcmsrom.c --- linux.old/arch/mips/bcm947xx/broadcom/bcmsrom.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/broadcom/bcmsrom.c 2006-10-15 23:29:14.000000000 +0200 ++++ linux.dev/arch/mips/bcm947xx/broadcom/bcmsrom.c 2006-11-03 21:10:13.000000000 +0100 @@ -0,0 +1,481 @@ +/* + * Misc useful routines to access NIC SROM/OTP . @@ -485,7 +485,7 @@ diff -urN linux.old/arch/mips/bcm947xx/broadcom/bcmsrom.c linux.dev/arch/mips/bc + diff -urN linux.old/arch/mips/bcm947xx/broadcom/bcmutils.c linux.dev/arch/mips/bcm947xx/broadcom/bcmutils.c --- linux.old/arch/mips/bcm947xx/broadcom/bcmutils.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/broadcom/bcmutils.c 2006-10-15 23:29:14.000000000 +0200 ++++ linux.dev/arch/mips/bcm947xx/broadcom/bcmutils.c 2006-11-03 21:10:13.000000000 +0100 @@ -0,0 +1,356 @@ +/* + * Misc useful OS-independent routines. @@ -845,7 +845,7 @@ diff -urN linux.old/arch/mips/bcm947xx/broadcom/bcmutils.c linux.dev/arch/mips/b +#endif diff -urN linux.old/arch/mips/bcm947xx/broadcom/cfe_env.c linux.dev/arch/mips/bcm947xx/broadcom/cfe_env.c --- linux.old/arch/mips/bcm947xx/broadcom/cfe_env.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/broadcom/cfe_env.c 2006-10-15 23:29:14.000000000 +0200 ++++ linux.dev/arch/mips/bcm947xx/broadcom/cfe_env.c 2006-11-03 21:10:13.000000000 +0100 @@ -0,0 +1,234 @@ +/* + * NVRAM variable manipulation (Linux kernel half) @@ -1083,7 +1083,7 @@ diff -urN linux.old/arch/mips/bcm947xx/broadcom/cfe_env.c linux.dev/arch/mips/bc + diff -urN linux.old/arch/mips/bcm947xx/broadcom/linux_osl.c linux.dev/arch/mips/bcm947xx/broadcom/linux_osl.c --- linux.old/arch/mips/bcm947xx/broadcom/linux_osl.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/broadcom/linux_osl.c 2006-10-15 23:29:14.000000000 +0200 ++++ linux.dev/arch/mips/bcm947xx/broadcom/linux_osl.c 2006-11-03 21:10:13.000000000 +0100 @@ -0,0 +1,102 @@ +/* + * Linux OS Independent Layer @@ -1189,7 +1189,7 @@ diff -urN linux.old/arch/mips/bcm947xx/broadcom/linux_osl.c linux.dev/arch/mips/ + diff -urN linux.old/arch/mips/bcm947xx/broadcom/Makefile linux.dev/arch/mips/bcm947xx/broadcom/Makefile --- linux.old/arch/mips/bcm947xx/broadcom/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/broadcom/Makefile 2006-10-15 23:29:14.000000000 +0200 ++++ linux.dev/arch/mips/bcm947xx/broadcom/Makefile 2006-11-03 21:10:13.000000000 +0100 @@ -0,0 +1,6 @@ +# +# Makefile for the BCM47xx specific kernel interface routines @@ -1199,7 +1199,7 @@ diff -urN linux.old/arch/mips/bcm947xx/broadcom/Makefile linux.dev/arch/mips/bcm +obj-y := sbutils.o linux_osl.o bcmsrom.o bcmutils.o sbmips.o sbpci.o sflash.o nvram.o cfe_env.o diff -urN linux.old/arch/mips/bcm947xx/broadcom/nvram.c linux.dev/arch/mips/bcm947xx/broadcom/nvram.c --- linux.old/arch/mips/bcm947xx/broadcom/nvram.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/broadcom/nvram.c 2006-10-15 23:29:14.000000000 +0200 ++++ linux.dev/arch/mips/bcm947xx/broadcom/nvram.c 2006-11-03 21:10:13.000000000 +0100 @@ -0,0 +1,192 @@ +/* + * NVRAM variable manipulation (Linux kernel half) @@ -1395,7 +1395,7 @@ diff -urN linux.old/arch/mips/bcm947xx/broadcom/nvram.c linux.dev/arch/mips/bcm9 +EXPORT_SYMBOL(nvram_get); diff -urN linux.old/arch/mips/bcm947xx/broadcom/sbmips.c linux.dev/arch/mips/bcm947xx/broadcom/sbmips.c --- linux.old/arch/mips/bcm947xx/broadcom/sbmips.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/broadcom/sbmips.c 2006-10-15 23:46:15.000000000 +0200 ++++ linux.dev/arch/mips/bcm947xx/broadcom/sbmips.c 2006-11-03 21:19:49.000000000 +0100 @@ -0,0 +1,1115 @@ +/* + * BCM47XX Sonics SiliconBackplane MIPS core routines @@ -2511,11 +2511,10 @@ diff -urN linux.old/arch/mips/bcm947xx/broadcom/sbmips.c linux.dev/arch/mips/bcm + return rate; +} + -+ - ++EXPORT_SYMBOL(sb_irq); diff -urN linux.old/arch/mips/bcm947xx/broadcom/sbpci.c linux.dev/arch/mips/bcm947xx/broadcom/sbpci.c --- linux.old/arch/mips/bcm947xx/broadcom/sbpci.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/broadcom/sbpci.c 2006-10-15 23:29:14.000000000 +0200 ++++ linux.dev/arch/mips/bcm947xx/broadcom/sbpci.c 2006-11-03 21:10:13.000000000 +0100 @@ -0,0 +1,534 @@ +/* + * Low-Level PCI and SB support for BCM47xx @@ -3053,8 +3052,8 @@ diff -urN linux.old/arch/mips/bcm947xx/broadcom/sbpci.c linux.dev/arch/mips/bcm9 + diff -urN linux.old/arch/mips/bcm947xx/broadcom/sbutils.c linux.dev/arch/mips/bcm947xx/broadcom/sbutils.c --- linux.old/arch/mips/bcm947xx/broadcom/sbutils.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/broadcom/sbutils.c 2006-10-15 23:29:14.000000000 +0200 -@@ -0,0 +1,2371 @@ ++++ linux.dev/arch/mips/bcm947xx/broadcom/sbutils.c 2006-11-03 21:22:22.000000000 +0100 +@@ -0,0 +1,2375 @@ +/* + * Misc utility routines for accessing chip-specific features + * of the SiliconBackplane-based Broadcom chips. @@ -5413,6 +5412,10 @@ diff -urN linux.old/arch/mips/bcm947xx/broadcom/sbutils.c linux.dev/arch/mips/bc + +EXPORT_SYMBOL(sb_boardtype); +EXPORT_SYMBOL(sb_boardvendor); ++EXPORT_SYMBOL(sb_corereg); ++EXPORT_SYMBOL(sb_coreidx); ++EXPORT_SYMBOL(sb_setcore); ++EXPORT_SYMBOL(sb_setcoreidx); +EXPORT_SYMBOL(sb_gpiocontrol); +EXPORT_SYMBOL(sb_gpioin); +EXPORT_SYMBOL(sb_gpiointmask); @@ -5428,7 +5431,7 @@ diff -urN linux.old/arch/mips/bcm947xx/broadcom/sbutils.c linux.dev/arch/mips/bc +EXPORT_SYMBOL(sb_kattach); diff -urN linux.old/arch/mips/bcm947xx/broadcom/sflash.c linux.dev/arch/mips/bcm947xx/broadcom/sflash.c --- linux.old/arch/mips/bcm947xx/broadcom/sflash.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/broadcom/sflash.c 2006-10-15 23:29:14.000000000 +0200 ++++ linux.dev/arch/mips/bcm947xx/broadcom/sflash.c 2006-11-03 21:10:13.000000000 +0100 @@ -0,0 +1,418 @@ +/* + * Broadcom SiliconBackplane chipcommon serial flash interface @@ -5850,7 +5853,7 @@ diff -urN linux.old/arch/mips/bcm947xx/broadcom/sflash.c linux.dev/arch/mips/bcm + diff -urN linux.old/arch/mips/bcm947xx/include/bcmdevs.h linux.dev/arch/mips/bcm947xx/include/bcmdevs.h --- linux.old/arch/mips/bcm947xx/include/bcmdevs.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/include/bcmdevs.h 2006-10-15 23:29:14.000000000 +0200 ++++ linux.dev/arch/mips/bcm947xx/include/bcmdevs.h 2006-11-03 21:10:13.000000000 +0100 @@ -0,0 +1,391 @@ +/* + * Broadcom device-specific manifest constants. @@ -6245,7 +6248,7 @@ diff -urN linux.old/arch/mips/bcm947xx/include/bcmdevs.h linux.dev/arch/mips/bcm +#endif /* _BCMDEVS_H */ diff -urN linux.old/arch/mips/bcm947xx/include/bcmendian.h linux.dev/arch/mips/bcm947xx/include/bcmendian.h --- linux.old/arch/mips/bcm947xx/include/bcmendian.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/include/bcmendian.h 2006-10-15 23:29:14.000000000 +0200 ++++ linux.dev/arch/mips/bcm947xx/include/bcmendian.h 2006-11-03 21:10:13.000000000 +0100 @@ -0,0 +1,152 @@ +/* + * local version of endian.h - byte order defines @@ -6401,7 +6404,7 @@ diff -urN linux.old/arch/mips/bcm947xx/include/bcmendian.h linux.dev/arch/mips/b +#endif /* _BCMENDIAN_H_ */ diff -urN linux.old/arch/mips/bcm947xx/include/bcmnvram.h linux.dev/arch/mips/bcm947xx/include/bcmnvram.h --- linux.old/arch/mips/bcm947xx/include/bcmnvram.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/include/bcmnvram.h 2006-10-15 23:29:14.000000000 +0200 ++++ linux.dev/arch/mips/bcm947xx/include/bcmnvram.h 2006-11-03 21:10:13.000000000 +0100 @@ -0,0 +1,95 @@ +/* + * NVRAM variable manipulation @@ -6500,7 +6503,7 @@ diff -urN linux.old/arch/mips/bcm947xx/include/bcmnvram.h linux.dev/arch/mips/bc +#endif /* _bcmnvram_h_ */ diff -urN linux.old/arch/mips/bcm947xx/include/bcmsrom.h linux.dev/arch/mips/bcm947xx/include/bcmsrom.h --- linux.old/arch/mips/bcm947xx/include/bcmsrom.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/include/bcmsrom.h 2006-10-15 23:29:14.000000000 +0200 ++++ linux.dev/arch/mips/bcm947xx/include/bcmsrom.h 2006-11-03 21:10:13.000000000 +0100 @@ -0,0 +1,23 @@ +/* + * Misc useful routines to access NIC local SROM/OTP . @@ -6527,7 +6530,7 @@ diff -urN linux.old/arch/mips/bcm947xx/include/bcmsrom.h linux.dev/arch/mips/bcm +#endif /* _bcmsrom_h_ */ diff -urN linux.old/arch/mips/bcm947xx/include/bcmutils.h linux.dev/arch/mips/bcm947xx/include/bcmutils.h --- linux.old/arch/mips/bcm947xx/include/bcmutils.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/include/bcmutils.h 2006-10-15 23:29:14.000000000 +0200 ++++ linux.dev/arch/mips/bcm947xx/include/bcmutils.h 2006-11-03 21:10:13.000000000 +0100 @@ -0,0 +1,308 @@ +/* + * Misc useful os-independent macros and functions. @@ -6839,7 +6842,7 @@ diff -urN linux.old/arch/mips/bcm947xx/include/bcmutils.h linux.dev/arch/mips/bc +#endif /* _bcmutils_h_ */ diff -urN linux.old/arch/mips/bcm947xx/include/bitfuncs.h linux.dev/arch/mips/bcm947xx/include/bitfuncs.h --- linux.old/arch/mips/bcm947xx/include/bitfuncs.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/include/bitfuncs.h 2006-10-15 23:29:14.000000000 +0200 ++++ linux.dev/arch/mips/bcm947xx/include/bitfuncs.h 2006-11-03 21:10:13.000000000 +0100 @@ -0,0 +1,85 @@ +/* + * bit manipulation utility functions @@ -6928,7 +6931,7 @@ diff -urN linux.old/arch/mips/bcm947xx/include/bitfuncs.h linux.dev/arch/mips/bc +#endif /* _BITFUNCS_H */ diff -urN linux.old/arch/mips/bcm947xx/include/flash.h linux.dev/arch/mips/bcm947xx/include/flash.h --- linux.old/arch/mips/bcm947xx/include/flash.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/include/flash.h 2006-10-15 23:29:14.000000000 +0200 ++++ linux.dev/arch/mips/bcm947xx/include/flash.h 2006-11-03 21:10:13.000000000 +0100 @@ -0,0 +1,188 @@ +/* + * flash.h: Common definitions for flash access. @@ -7120,7 +7123,7 @@ diff -urN linux.old/arch/mips/bcm947xx/include/flash.h linux.dev/arch/mips/bcm94 +#endif diff -urN linux.old/arch/mips/bcm947xx/include/flashutl.h linux.dev/arch/mips/bcm947xx/include/flashutl.h --- linux.old/arch/mips/bcm947xx/include/flashutl.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/include/flashutl.h 2006-10-15 23:29:14.000000000 +0200 ++++ linux.dev/arch/mips/bcm947xx/include/flashutl.h 2006-11-03 21:10:13.000000000 +0100 @@ -0,0 +1,27 @@ +/* + * BCM47XX FLASH driver interface @@ -7151,7 +7154,7 @@ diff -urN linux.old/arch/mips/bcm947xx/include/flashutl.h linux.dev/arch/mips/bc +#endif /* _flashutl_h_ */ diff -urN linux.old/arch/mips/bcm947xx/include/hndmips.h linux.dev/arch/mips/bcm947xx/include/hndmips.h --- linux.old/arch/mips/bcm947xx/include/hndmips.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/include/hndmips.h 2006-10-15 23:29:14.000000000 +0200 ++++ linux.dev/arch/mips/bcm947xx/include/hndmips.h 2006-11-03 21:10:13.000000000 +0100 @@ -0,0 +1,16 @@ +/* + * Alternate include file for HND sbmips.h since CFE also ships with @@ -7171,7 +7174,7 @@ diff -urN linux.old/arch/mips/bcm947xx/include/hndmips.h linux.dev/arch/mips/bcm +#include "sbmips.h" diff -urN linux.old/arch/mips/bcm947xx/include/linux_osl.h linux.dev/arch/mips/bcm947xx/include/linux_osl.h --- linux.old/arch/mips/bcm947xx/include/linux_osl.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/include/linux_osl.h 2006-10-15 23:29:14.000000000 +0200 ++++ linux.dev/arch/mips/bcm947xx/include/linux_osl.h 2006-11-03 21:10:13.000000000 +0100 @@ -0,0 +1,331 @@ +/* + * Linux OS Independent Layer @@ -7506,7 +7509,7 @@ diff -urN linux.old/arch/mips/bcm947xx/include/linux_osl.h linux.dev/arch/mips/b +#endif /* _linux_osl_h_ */ diff -urN linux.old/arch/mips/bcm947xx/include/linuxver.h linux.dev/arch/mips/bcm947xx/include/linuxver.h --- linux.old/arch/mips/bcm947xx/include/linuxver.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/include/linuxver.h 2006-10-15 23:29:14.000000000 +0200 ++++ linux.dev/arch/mips/bcm947xx/include/linuxver.h 2006-11-03 21:10:13.000000000 +0100 @@ -0,0 +1,389 @@ +/* + * Linux-specific abstractions to gain some independence from linux kernel versions. @@ -7899,7 +7902,7 @@ diff -urN linux.old/arch/mips/bcm947xx/include/linuxver.h linux.dev/arch/mips/bc +#endif /* _linuxver_h_ */ diff -urN linux.old/arch/mips/bcm947xx/include/mipsinc.h linux.dev/arch/mips/bcm947xx/include/mipsinc.h --- linux.old/arch/mips/bcm947xx/include/mipsinc.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/include/mipsinc.h 2006-10-15 23:29:14.000000000 +0200 ++++ linux.dev/arch/mips/bcm947xx/include/mipsinc.h 2006-11-03 21:10:13.000000000 +0100 @@ -0,0 +1,552 @@ +/* + * HND Run Time Environment for standalone MIPS programs. @@ -8455,7 +8458,7 @@ diff -urN linux.old/arch/mips/bcm947xx/include/mipsinc.h linux.dev/arch/mips/bcm +#endif /* _MISPINC_H */ diff -urN linux.old/arch/mips/bcm947xx/include/osl.h linux.dev/arch/mips/bcm947xx/include/osl.h --- linux.old/arch/mips/bcm947xx/include/osl.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/include/osl.h 2006-10-15 23:29:14.000000000 +0200 ++++ linux.dev/arch/mips/bcm947xx/include/osl.h 2006-11-03 21:10:13.000000000 +0100 @@ -0,0 +1,42 @@ +/* + * OS Abstraction Layer @@ -8501,7 +8504,7 @@ diff -urN linux.old/arch/mips/bcm947xx/include/osl.h linux.dev/arch/mips/bcm947x +#endif /* _osl_h_ */ diff -urN linux.old/arch/mips/bcm947xx/include/pcicfg.h linux.dev/arch/mips/bcm947xx/include/pcicfg.h --- linux.old/arch/mips/bcm947xx/include/pcicfg.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/include/pcicfg.h 2006-10-15 23:29:14.000000000 +0200 ++++ linux.dev/arch/mips/bcm947xx/include/pcicfg.h 2006-11-03 21:10:13.000000000 +0100 @@ -0,0 +1,398 @@ +/* + * pcicfg.h: PCI configuration constants and structures. @@ -8903,7 +8906,7 @@ diff -urN linux.old/arch/mips/bcm947xx/include/pcicfg.h linux.dev/arch/mips/bcm9 +#endif diff -urN linux.old/arch/mips/bcm947xx/include/proto/ethernet.h linux.dev/arch/mips/bcm947xx/include/proto/ethernet.h --- linux.old/arch/mips/bcm947xx/include/proto/ethernet.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/include/proto/ethernet.h 2006-10-15 23:29:14.000000000 +0200 ++++ linux.dev/arch/mips/bcm947xx/include/proto/ethernet.h 2006-11-03 21:10:13.000000000 +0100 @@ -0,0 +1,145 @@ +/******************************************************************************* + * $Id$ @@ -9052,7 +9055,7 @@ diff -urN linux.old/arch/mips/bcm947xx/include/proto/ethernet.h linux.dev/arch/m +#endif /* _NET_ETHERNET_H_ */ diff -urN linux.old/arch/mips/bcm947xx/include/s5.h linux.dev/arch/mips/bcm947xx/include/s5.h --- linux.old/arch/mips/bcm947xx/include/s5.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/include/s5.h 2006-10-15 23:29:14.000000000 +0200 ++++ linux.dev/arch/mips/bcm947xx/include/s5.h 2006-11-03 21:10:13.000000000 +0100 @@ -0,0 +1,103 @@ +#ifndef _S5_H_ +#define _S5_H_ @@ -9159,7 +9162,7 @@ diff -urN linux.old/arch/mips/bcm947xx/include/s5.h linux.dev/arch/mips/bcm947xx +#endif /*!_S5_H_ */ diff -urN linux.old/arch/mips/bcm947xx/include/sbchipc.h linux.dev/arch/mips/bcm947xx/include/sbchipc.h --- linux.old/arch/mips/bcm947xx/include/sbchipc.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/include/sbchipc.h 2006-10-15 23:29:14.000000000 +0200 ++++ linux.dev/arch/mips/bcm947xx/include/sbchipc.h 2006-11-03 21:10:13.000000000 +0100 @@ -0,0 +1,440 @@ +/* + * SiliconBackplane Chipcommon core hardware definitions. @@ -9603,7 +9606,7 @@ diff -urN linux.old/arch/mips/bcm947xx/include/sbchipc.h linux.dev/arch/mips/bcm +#endif /* _SBCHIPC_H */ diff -urN linux.old/arch/mips/bcm947xx/include/sbconfig.h linux.dev/arch/mips/bcm947xx/include/sbconfig.h --- linux.old/arch/mips/bcm947xx/include/sbconfig.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/include/sbconfig.h 2006-10-15 23:29:14.000000000 +0200 ++++ linux.dev/arch/mips/bcm947xx/include/sbconfig.h 2006-11-03 21:10:13.000000000 +0100 @@ -0,0 +1,342 @@ +/* + * Broadcom SiliconBackplane hardware register definitions. @@ -9949,7 +9952,7 @@ diff -urN linux.old/arch/mips/bcm947xx/include/sbconfig.h linux.dev/arch/mips/bc +#endif /* _SBCONFIG_H */ diff -urN linux.old/arch/mips/bcm947xx/include/sbextif.h linux.dev/arch/mips/bcm947xx/include/sbextif.h --- linux.old/arch/mips/bcm947xx/include/sbextif.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/include/sbextif.h 2006-10-15 23:29:14.000000000 +0200 ++++ linux.dev/arch/mips/bcm947xx/include/sbextif.h 2006-11-03 21:10:13.000000000 +0100 @@ -0,0 +1,242 @@ +/* + * Hardware-specific External Interface I/O core definitions @@ -10195,7 +10198,7 @@ diff -urN linux.old/arch/mips/bcm947xx/include/sbextif.h linux.dev/arch/mips/bcm +#endif /* _SBEXTIF_H */ diff -urN linux.old/arch/mips/bcm947xx/include/sbmemc.h linux.dev/arch/mips/bcm947xx/include/sbmemc.h --- linux.old/arch/mips/bcm947xx/include/sbmemc.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/include/sbmemc.h 2006-10-15 23:29:14.000000000 +0200 ++++ linux.dev/arch/mips/bcm947xx/include/sbmemc.h 2006-11-03 21:10:13.000000000 +0100 @@ -0,0 +1,148 @@ +/* + * BCM47XX Sonics SiliconBackplane DDR/SDRAM controller core hardware definitions. @@ -10347,7 +10350,7 @@ diff -urN linux.old/arch/mips/bcm947xx/include/sbmemc.h linux.dev/arch/mips/bcm9 +#endif /* _SBMEMC_H */ diff -urN linux.old/arch/mips/bcm947xx/include/sbmips.h linux.dev/arch/mips/bcm947xx/include/sbmips.h --- linux.old/arch/mips/bcm947xx/include/sbmips.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/include/sbmips.h 2006-10-15 23:37:15.000000000 +0200 ++++ linux.dev/arch/mips/bcm947xx/include/sbmips.h 2006-11-03 21:10:13.000000000 +0100 @@ -0,0 +1,63 @@ +/* + * Broadcom SiliconBackplane MIPS definitions @@ -10414,7 +10417,7 @@ diff -urN linux.old/arch/mips/bcm947xx/include/sbmips.h linux.dev/arch/mips/bcm9 +#endif /* _SBMIPS_H */ diff -urN linux.old/arch/mips/bcm947xx/include/sbpci.h linux.dev/arch/mips/bcm947xx/include/sbpci.h --- linux.old/arch/mips/bcm947xx/include/sbpci.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/include/sbpci.h 2006-10-15 23:29:14.000000000 +0200 ++++ linux.dev/arch/mips/bcm947xx/include/sbpci.h 2006-11-03 21:10:13.000000000 +0100 @@ -0,0 +1,122 @@ +/* + * BCM47XX Sonics SiliconBackplane PCI core hardware definitions. @@ -10540,7 +10543,7 @@ diff -urN linux.old/arch/mips/bcm947xx/include/sbpci.h linux.dev/arch/mips/bcm94 +#endif /* _SBPCI_H */ diff -urN linux.old/arch/mips/bcm947xx/include/sbsdram.h linux.dev/arch/mips/bcm947xx/include/sbsdram.h --- linux.old/arch/mips/bcm947xx/include/sbsdram.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/include/sbsdram.h 2006-10-15 23:29:14.000000000 +0200 ++++ linux.dev/arch/mips/bcm947xx/include/sbsdram.h 2006-11-03 21:10:13.000000000 +0100 @@ -0,0 +1,75 @@ +/* + * BCM47XX Sonics SiliconBackplane SDRAM controller core hardware definitions. @@ -10619,7 +10622,7 @@ diff -urN linux.old/arch/mips/bcm947xx/include/sbsdram.h linux.dev/arch/mips/bcm +#endif /* _SBSDRAM_H */ diff -urN linux.old/arch/mips/bcm947xx/include/sbutils.h linux.dev/arch/mips/bcm947xx/include/sbutils.h --- linux.old/arch/mips/bcm947xx/include/sbutils.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/include/sbutils.h 2006-10-15 23:29:14.000000000 +0200 ++++ linux.dev/arch/mips/bcm947xx/include/sbutils.h 2006-11-03 21:10:13.000000000 +0100 @@ -0,0 +1,136 @@ +/* + * Misc utility routines for accessing chip-specific features @@ -10759,7 +10762,7 @@ diff -urN linux.old/arch/mips/bcm947xx/include/sbutils.h linux.dev/arch/mips/bcm +#endif /* _sbutils_h_ */ diff -urN linux.old/arch/mips/bcm947xx/include/sflash.h linux.dev/arch/mips/bcm947xx/include/sflash.h --- linux.old/arch/mips/bcm947xx/include/sflash.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/include/sflash.h 2006-10-15 23:29:14.000000000 +0200 ++++ linux.dev/arch/mips/bcm947xx/include/sflash.h 2006-11-03 21:10:13.000000000 +0100 @@ -0,0 +1,36 @@ +/* + * Broadcom SiliconBackplane chipcommon serial flash interface @@ -10799,7 +10802,7 @@ diff -urN linux.old/arch/mips/bcm947xx/include/sflash.h linux.dev/arch/mips/bcm9 +#endif /* _sflash_h_ */ diff -urN linux.old/arch/mips/bcm947xx/include/trxhdr.h linux.dev/arch/mips/bcm947xx/include/trxhdr.h --- linux.old/arch/mips/bcm947xx/include/trxhdr.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/include/trxhdr.h 2006-10-15 23:29:14.000000000 +0200 ++++ linux.dev/arch/mips/bcm947xx/include/trxhdr.h 2006-11-03 21:10:13.000000000 +0100 @@ -0,0 +1,33 @@ +/* + * TRX image file header format. @@ -10836,7 +10839,7 @@ diff -urN linux.old/arch/mips/bcm947xx/include/trxhdr.h linux.dev/arch/mips/bcm9 +typedef struct trx_header TRXHDR, *PTRXHDR; diff -urN linux.old/arch/mips/bcm947xx/include/typedefs.h linux.dev/arch/mips/bcm947xx/include/typedefs.h --- linux.old/arch/mips/bcm947xx/include/typedefs.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/include/typedefs.h 2006-10-15 23:29:14.000000000 +0200 ++++ linux.dev/arch/mips/bcm947xx/include/typedefs.h 2006-11-03 21:10:13.000000000 +0100 @@ -0,0 +1,326 @@ +/* + * Copyright 2005, Broadcom Corporation @@ -11166,7 +11169,7 @@ diff -urN linux.old/arch/mips/bcm947xx/include/typedefs.h linux.dev/arch/mips/bc +#endif /* _TYPEDEFS_H_ */ diff -urN linux.old/arch/mips/bcm947xx/irq.c linux.dev/arch/mips/bcm947xx/irq.c --- linux.old/arch/mips/bcm947xx/irq.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/irq.c 2006-10-15 23:29:14.000000000 +0200 ++++ linux.dev/arch/mips/bcm947xx/irq.c 2006-11-03 21:10:13.000000000 +0100 @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2004 Florian Schirmer (jolt@tuxbox.org) @@ -11234,7 +11237,7 @@ diff -urN linux.old/arch/mips/bcm947xx/irq.c linux.dev/arch/mips/bcm947xx/irq.c +} diff -urN linux.old/arch/mips/bcm947xx/Makefile linux.dev/arch/mips/bcm947xx/Makefile --- linux.old/arch/mips/bcm947xx/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/Makefile 2006-10-15 23:29:14.000000000 +0200 ++++ linux.dev/arch/mips/bcm947xx/Makefile 2006-11-03 21:10:13.000000000 +0100 @@ -0,0 +1,6 @@ +# +# Makefile for the BCM47xx specific kernel interface routines @@ -11244,7 +11247,7 @@ diff -urN linux.old/arch/mips/bcm947xx/Makefile linux.dev/arch/mips/bcm947xx/Mak +obj-y := irq.o prom.o setup.o time.o pci.o diff -urN linux.old/arch/mips/bcm947xx/pci.c linux.dev/arch/mips/bcm947xx/pci.c --- linux.old/arch/mips/bcm947xx/pci.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/pci.c 2006-10-15 23:29:14.000000000 +0200 ++++ linux.dev/arch/mips/bcm947xx/pci.c 2006-11-03 21:10:13.000000000 +0100 @@ -0,0 +1,227 @@ +#include +#include @@ -11475,7 +11478,7 @@ diff -urN linux.old/arch/mips/bcm947xx/pci.c linux.dev/arch/mips/bcm947xx/pci.c +DECLARE_PCI_FIXUP_EARLY(PCI_ANY_ID, PCI_ANY_ID, bcm47xx_fixup_bridge); diff -urN linux.old/arch/mips/bcm947xx/prom.c linux.dev/arch/mips/bcm947xx/prom.c --- linux.old/arch/mips/bcm947xx/prom.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/prom.c 2006-10-15 23:29:14.000000000 +0200 ++++ linux.dev/arch/mips/bcm947xx/prom.c 2006-11-03 21:10:13.000000000 +0100 @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2004 Florian Schirmer (jolt@tuxbox.org) @@ -11538,7 +11541,7 @@ diff -urN linux.old/arch/mips/bcm947xx/prom.c linux.dev/arch/mips/bcm947xx/prom. +} diff -urN linux.old/arch/mips/bcm947xx/setup.c linux.dev/arch/mips/bcm947xx/setup.c --- linux.old/arch/mips/bcm947xx/setup.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/setup.c 2006-10-15 23:29:14.000000000 +0200 ++++ linux.dev/arch/mips/bcm947xx/setup.c 2006-11-03 21:10:13.000000000 +0100 @@ -0,0 +1,158 @@ +/* + * Copyright (C) 2004 Florian Schirmer (jolt@tuxbox.org) @@ -11700,7 +11703,7 @@ diff -urN linux.old/arch/mips/bcm947xx/setup.c linux.dev/arch/mips/bcm947xx/setu +EXPORT_SYMBOL(boardflags); diff -urN linux.old/arch/mips/bcm947xx/time.c linux.dev/arch/mips/bcm947xx/time.c --- linux.old/arch/mips/bcm947xx/time.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux.dev/arch/mips/bcm947xx/time.c 2006-10-15 23:38:36.000000000 +0200 ++++ linux.dev/arch/mips/bcm947xx/time.c 2006-11-03 21:10:13.000000000 +0100 @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2004 Florian Schirmer (jolt@tuxbox.org) @@ -11768,8 +11771,8 @@ diff -urN linux.old/arch/mips/bcm947xx/time.c linux.dev/arch/mips/bcm947xx/time. + setup_irq(7, irq); +} diff -urN linux.old/arch/mips/Kconfig linux.dev/arch/mips/Kconfig ---- linux.old/arch/mips/Kconfig 2006-10-15 23:32:44.000000000 +0200 -+++ linux.dev/arch/mips/Kconfig 2006-10-15 23:29:14.000000000 +0200 +--- linux.old/arch/mips/Kconfig 2006-11-03 21:16:21.000000000 +0100 ++++ linux.dev/arch/mips/Kconfig 2006-11-03 21:10:13.000000000 +0100 @@ -245,6 +245,17 @@ Members include the Acer PICA, MIPS Magnum 4000, MIPS Millenium and Olivetti M700-10 workstations. @@ -11789,8 +11792,8 @@ diff -urN linux.old/arch/mips/Kconfig linux.dev/arch/mips/Kconfig bool "LASAT Networks platforms" select DMA_NONCOHERENT diff -urN linux.old/arch/mips/kernel/cpu-probe.c linux.dev/arch/mips/kernel/cpu-probe.c ---- linux.old/arch/mips/kernel/cpu-probe.c 2006-10-15 23:32:44.000000000 +0200 -+++ linux.dev/arch/mips/kernel/cpu-probe.c 2006-10-15 23:29:14.000000000 +0200 +--- linux.old/arch/mips/kernel/cpu-probe.c 2006-11-03 21:16:21.000000000 +0100 ++++ linux.dev/arch/mips/kernel/cpu-probe.c 2006-11-03 21:10:13.000000000 +0100 @@ -691,6 +691,28 @@ } @@ -11831,8 +11834,8 @@ diff -urN linux.old/arch/mips/kernel/cpu-probe.c linux.dev/arch/mips/kernel/cpu- cpu_probe_sandcraft(c); break; diff -urN linux.old/arch/mips/kernel/head.S linux.dev/arch/mips/kernel/head.S ---- linux.old/arch/mips/kernel/head.S 2006-10-15 23:32:44.000000000 +0200 -+++ linux.dev/arch/mips/kernel/head.S 2006-10-15 23:29:14.000000000 +0200 +--- linux.old/arch/mips/kernel/head.S 2006-11-03 21:16:21.000000000 +0100 ++++ linux.dev/arch/mips/kernel/head.S 2006-11-03 21:10:13.000000000 +0100 @@ -133,6 +133,11 @@ j kernel_entry nop @@ -11846,8 +11849,8 @@ diff -urN linux.old/arch/mips/kernel/head.S linux.dev/arch/mips/kernel/head.S * Reserved space for exception handlers. * Necessary for machines which link their kernels at KSEG0. diff -urN linux.old/arch/mips/kernel/proc.c linux.dev/arch/mips/kernel/proc.c ---- linux.old/arch/mips/kernel/proc.c 2006-10-15 23:32:44.000000000 +0200 -+++ linux.dev/arch/mips/kernel/proc.c 2006-10-15 23:29:14.000000000 +0200 +--- linux.old/arch/mips/kernel/proc.c 2006-11-03 21:16:21.000000000 +0100 ++++ linux.dev/arch/mips/kernel/proc.c 2006-11-03 21:10:13.000000000 +0100 @@ -84,6 +84,8 @@ [CPU_VR4181] = "NEC VR4181", [CPU_VR4181A] = "NEC VR4181A", @@ -11858,8 +11861,8 @@ diff -urN linux.old/arch/mips/kernel/proc.c linux.dev/arch/mips/kernel/proc.c }; diff -urN linux.old/arch/mips/Makefile linux.dev/arch/mips/Makefile ---- linux.old/arch/mips/Makefile 2006-10-15 23:32:44.000000000 +0200 -+++ linux.dev/arch/mips/Makefile 2006-10-15 23:29:14.000000000 +0200 +--- linux.old/arch/mips/Makefile 2006-11-03 21:16:21.000000000 +0100 ++++ linux.dev/arch/mips/Makefile 2006-11-03 21:10:13.000000000 +0100 @@ -565,6 +565,13 @@ load-$(CONFIG_SIBYTE_BIGSUR) := 0xffffffff80100000 @@ -11875,8 +11878,8 @@ diff -urN linux.old/arch/mips/Makefile linux.dev/arch/mips/Makefile # core-$(CONFIG_SNI_RM200_PCI) += arch/mips/sni/ diff -urN linux.old/arch/mips/mm/tlbex.c linux.dev/arch/mips/mm/tlbex.c ---- linux.old/arch/mips/mm/tlbex.c 2006-10-15 23:32:44.000000000 +0200 -+++ linux.dev/arch/mips/mm/tlbex.c 2006-10-15 23:31:06.000000000 +0200 +--- linux.old/arch/mips/mm/tlbex.c 2006-11-03 21:16:21.000000000 +0100 ++++ linux.dev/arch/mips/mm/tlbex.c 2006-11-03 21:15:12.000000000 +0100 @@ -882,6 +882,8 @@ case CPU_4KSC: case CPU_20KC: @@ -11887,8 +11890,8 @@ diff -urN linux.old/arch/mips/mm/tlbex.c linux.dev/arch/mips/mm/tlbex.c break; diff -urN linux.old/include/asm-mips/bootinfo.h linux.dev/include/asm-mips/bootinfo.h ---- linux.old/include/asm-mips/bootinfo.h 2006-10-15 23:32:44.000000000 +0200 -+++ linux.dev/include/asm-mips/bootinfo.h 2006-10-15 23:29:14.000000000 +0200 +--- linux.old/include/asm-mips/bootinfo.h 2006-11-03 21:16:21.000000000 +0100 ++++ linux.dev/include/asm-mips/bootinfo.h 2006-11-03 21:10:13.000000000 +0100 @@ -218,6 +218,12 @@ #define MACH_GROUP_TITAN 22 /* PMC-Sierra Titan */ #define MACH_TITAN_YOSEMITE 1 /* PMC-Sierra Yosemite */ @@ -11903,8 +11906,8 @@ diff -urN linux.old/include/asm-mips/bootinfo.h linux.dev/include/asm-mips/booti const char *get_system_type(void); diff -urN linux.old/include/asm-mips/cpu.h linux.dev/include/asm-mips/cpu.h ---- linux.old/include/asm-mips/cpu.h 2006-10-15 23:32:44.000000000 +0200 -+++ linux.dev/include/asm-mips/cpu.h 2006-10-15 23:29:14.000000000 +0200 +--- linux.old/include/asm-mips/cpu.h 2006-11-03 21:16:21.000000000 +0100 ++++ linux.dev/include/asm-mips/cpu.h 2006-11-03 21:10:13.000000000 +0100 @@ -104,6 +104,13 @@ #define PRID_IMP_SR71000 0x0400 @@ -11931,8 +11934,8 @@ diff -urN linux.old/include/asm-mips/cpu.h linux.dev/include/asm-mips/cpu.h /* * ISA Level encodings diff -urN linux.old/include/linux/pci_ids.h linux.dev/include/linux/pci_ids.h ---- linux.old/include/linux/pci_ids.h 2006-10-15 23:32:44.000000000 +0200 -+++ linux.dev/include/linux/pci_ids.h 2006-10-15 23:29:14.000000000 +0200 +--- linux.old/include/linux/pci_ids.h 2006-11-03 21:16:21.000000000 +0100 ++++ linux.dev/include/linux/pci_ids.h 2006-11-03 21:10:13.000000000 +0100 @@ -1906,6 +1906,7 @@ #define PCI_DEVICE_ID_TIGON3_5901_2 0x170e #define PCI_DEVICE_ID_BCM4401 0x4401 @@ -11941,3 +11944,14 @@ diff -urN linux.old/include/linux/pci_ids.h linux.dev/include/linux/pci_ids.h #define PCI_VENDOR_ID_TOPIC 0x151f #define PCI_DEVICE_ID_TOPIC_TP560 0x0000 +diff -urN linux.old/lib/kobject_uevent.c linux.dev/lib/kobject_uevent.c +--- linux.old/lib/kobject_uevent.c 2006-06-18 03:49:35.000000000 +0200 ++++ linux.dev/lib/kobject_uevent.c 2006-11-03 21:44:56.000000000 +0100 +@@ -29,6 +29,7 @@ + u64 uevent_seqnum; + char uevent_helper[UEVENT_HELPER_PATH_LEN] = "/sbin/hotplug"; + static DEFINE_SPINLOCK(sequence_lock); ++EXPORT_SYMBOL(uevent_helper); + #if defined(CONFIG_NET) + static struct sock *uevent_sock; + #endif