# Use the default kernel version if the Makefile doesn't override it
ifeq ($(KERNEL),2.4)
- LINUX_VERSION?=2.4.34
+ LINUX_VERSION?=2.4.35.4
else
LINUX_VERSION?=2.6.21.5
endif
ifeq ($(LINUX_VERSION),2.4.34)
LINUX_KERNEL_MD5SUM:=f59665540a7f3351ea416a0dad104b55
endif
+ifeq ($(LINUX_VERSION),2.4.35.4)
+ LINUX_KERNEL_MD5SUM:=34066faff3d8c042df1c7600b08b8070
+endif
ifeq ($(LINUX_VERSION),2.6.22.4)
LINUX_KERNEL_MD5SUM:=6cf83acf21e65dcea4a5170c0bbc7125
endif
include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=broadcom-wl
-PKG_VERSION:=4.80.53.0
+PKG_VERSION:=4.150.10.5
PKG_RELEASE:=1
WLC_VERSION:=0.1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=http://downloads.openwrt.org/sources
-PKG_MD5SUM:=a7d8dde3ce474c361143b83e1d9890b1
+PKG_MD5SUM:=0c6ba9687114c6b598e8019e262d9a60
+
+WL_WEXT=1
include $(INCLUDE_DIR)/package.mk
define Package/wl
$(call Package/broadcom-wl/Default)
TITLE:=Proprietary Broadcom wl driver config utility
- DEPENDS+=+brcm-compat-ldso
+# DEPENDS+=+brcm-compat-ldso
endef
define Package/wl/description
define Package/nas
$(call Package/broadcom-wl/Default)
DEPENDS+= +nvram
- DEPENDS+= +brcm-compat-ldso
+# DEPENDS+= +brcm-compat-ldso
TITLE:=Proprietary Broadcom WPA/WPA2 authenticator
endef
proprietary Broadcom wl driver.
endef
-
-define install_template
- $(INSTALL_DIR) $(1)/lib/modules/$(LINUX_VERSION)
- $(INSTALL_DATA) $(PKG_BUILD_DIR)/driver/wl$(2).o.patch $(1)/lib/modules/$(LINUX_VERSION)/
-endef
-
-define KernelPackage/brcm-wl/install
- $(call install_template,$(1),)
-endef
-
-define KernelPackage/brcm-wl_mimo/install
- $(call install_template,$(1),_mimo)
-endef
-
MAKE_KMOD := $(MAKE) -C "$(LINUX_DIR)" \
CROSS_COMPILE="$(TARGET_CROSS)" \
ARCH="$(LINUX_KARCH)" \
define Build/Prepare
$(call Build/Prepare/Default)
- mv $(PKG_BUILD_DIR)/kmod $(PKG_BUILD_DIR)/driver
$(CP) src/* $(PKG_BUILD_DIR)/
endef
modules
$(MAKE_KMOD) \
SUBDIRS="$(PKG_BUILD_DIR)/wlcompat" \
+ $(if $(WL_WEXT),WL_WEXT=1) \
modules
$(MAKE_KMOD) \
SUBDIRS="$(PKG_BUILD_DIR)/wlcompat" \
DEBUG=1 \
+ $(if $(WL_WEXT),WL_WEXT=1) \
modules
# Compile wlc
$(TARGET_CONFIGURE_OPTS) \
CFLAGS="$(TARGET_CFLAGS)" \
all
- $(NO_TRACE_MAKE) -C compat-ldso -f build.mk PKG_INSTALL_DIR="$(PKG_BUILD_DIR)" BUILD_DIR="$(PKG_BUILD_DIR)"
- $(SED) 's,ld-uClibc.so.0,ld-uClibc.brcm,' \
- $(PKG_BUILD_DIR)/wl \
- $(PKG_BUILD_DIR)/nas
+ $(TARGET_CC) -o $(PKG_BUILD_DIR)/nas $(PKG_BUILD_DIR)/nas_exe.o -L$(STAGING_DIR)/usr/lib -lnvram
+ $(TARGET_CC) -o $(PKG_BUILD_DIR)/wl $(PKG_BUILD_DIR)/wl_exe.o
+# $(NO_TRACE_MAKE) -C compat-ldso -f build.mk PKG_INSTALL_DIR="$(PKG_BUILD_DIR)"
+# $(SED) 's,ld-uClibc.so.0,ld-uClibc.brcm,' \
+# $(PKG_BUILD_DIR)/wl \
+# $(PKG_BUILD_DIR)/nas
endef
define Package/brcm-compat-ldso/install
endef
define Package/nas/install
- $(INSTALL_DIR) $(1)/usr/lib
- $(INSTALL_BIN) $(PKG_BUILD_DIR)/libbcmcrypto.so $(1)/usr/lib/
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/nas $(1)/usr/sbin/
ln -sf nas $(1)/usr/sbin/nas4not
$(eval $(call KernelPackage,brcm-wl))
$(eval $(call KernelPackage,brcm-wl-mimo))
-$(eval $(call BuildPackage,brcm-compat-ldso))
+#$(eval $(call BuildPackage,brcm-compat-ldso))
$(eval $(call KernelPackage,wlcompat))
$(eval $(call KernelPackage,wlcompat-debug))
$(eval $(call BuildPackage,wlc))
case "$adhoc:$sta:$apmode" in
1*)
ap=0
- mssid=0
+ mssid=
infra=0
;;
:1:1)
:1:)
wet=1
ap=0
- mssid=0
+ mssid=
;;
::)
radio=0
config_get k "$vif" key$knr
[ -n "$k" ] || continue
[ "$defkey" = "$knr" ] && def="=" || def=""
- append vif_pre_up "wepkey $def$knr,$k" "$N"
+ append vif_do_up "wepkey $def$knr,$k" "$N"
done
;;
"");;
- *) append vif_pre_up "wepkey =1,$key" "$N";;
+ *) append vif_do_up "wepkey =1,$key" "$N";;
esac
;;
*psk*|*PSK*)
nasopts="-r \"\$${vif}_key\" -h $server -p $port"
;;
esac
- append vif_post_up "wsec $wsec" "$N"
- append vif_post_up "wpa_auth $auth" "$N"
- append vif_post_up "wsec_restrict $wsec_r" "$N"
- append vif_post_up "eap_restrict $eap_r" "$N"
+ append vif_do_up "wsec $wsec" "$N"
+ append vif_do_up "wpa_auth $auth" "$N"
+ append vif_do_up "wsec_restrict $wsec_r" "$N"
+ append vif_do_up "eap_restrict $eap_r" "$N"
config_get ssid "$vif" ssid
append vif_post_up "vlan_mode 0" "$N"
append vif_post_up "ssid $ssid" "$N"
- case "$mode" in
- sta|adhoc) append vif_do_up "ssid $ssid" "$N";;
- esac
+ append vif_do_up "ssid $ssid" "$N"
append vif_post_up "enabled 1" "$N"
[ "$mode" = "sta" ] && {
nas_mode="-S"
[ -z "$bridge" ] || {
- append vif_pre_up "supplicant 1" "$N"
- append vif_pre_up "passphrase $key" "$N"
+ append vif_post_up "supplicant 1" "$N"
+ append vif_post_up "passphrase $key" "$N"
use_nas=0
}
$ifdown
ap $ap
-mssid $mssid
+${mssid:+mssid $mssid}
apsta $apsta
infra $infra
${wet:+wet 1}
wl_mod$(MOD_NAME).o: wl_apsta$(MOD_NAME).o
perl -ne 's,eth%d,wl%d\x00,g,print' < $< > $@
-wl$(MOD_NAME).o.patch: wl$(MOD_NAME).o
- $(OBJDUMP) -d $< | perl patchtable.pl > $@
-
-modules: wl$(MOD_NAME).o.patch
+modules: wl$(MOD_NAME).o
include $(TOPDIR)/Rules.make
/*
- * Misc useful OS-independent routines.
+ * Driver O/S-independent utility routines
*
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
* All Rights Reserved.
*
* THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
* KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
* SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
- * $Id: bcmutils.c,v 1.1.1.12 2006/02/27 03:43:16 honor Exp $
+ * $Id$
*/
#include <typedefs.h>
#include <bcmdefs.h>
#include <stdarg.h>
+#include "bcmutils.h"
#include <osl.h>
-#include "linux_osl.h"
-#include "pktq.h"
-#include <bcmutils.h>
#include <sbutils.h>
#include <bcmnvram.h>
#include <bcmendian.h>
#include <bcmdevs.h>
-#include "bcmip.h"
-
-#define ETHER_TYPE_8021Q 0x8100
-#define ETHER_TYPE_IP 0x0800
-#define VLAN_PRI_SHIFT 13
-#define VLAN_PRI_MASK 7
-
-
-struct ether_header {
- uint8 ether_dhost[6];
- uint8 ether_shost[6];
- uint16 ether_type;
-} __attribute__((packed));
-
-
-struct ethervlan_header {
- uint8 ether_dhost[6];
- uint8 ether_shost[6];
- uint16 vlan_type; /* 0x8100 */
- uint16 vlan_tag; /* priority, cfi and vid */
- uint16 ether_type;
-};
+#include "proto/ethernet.h"
+#include "proto/vlan.h"
+#include "proto/bcmip.h"
+#include "proto/bcmtcp.h"
+#include "proto/802.1d.h"
+
+#ifdef BCMPERFSTATS
+#include <bcmperf.h>
+#endif
+
+#if 0
+/* nvram vars cache */
+static char *nvram_vars = NULL;
+static int vars_len = -1;
+#endif
/* copy a pkt buffer chain into a buffer */
uint
-pktcopy(osl_t *osh, void *p, uint offset, int len, uchar *buf)
+pktcopy (osl_t * osh, void *p, uint offset, int len, uchar * buf)
{
- uint n, ret = 0;
-
- if (len < 0)
- len = 4096; /* "infinite" */
-
- /* skip 'offset' bytes */
- for (; p && offset; p = PKTNEXT(osh, p)) {
- if (offset < (uint)PKTLEN(osh, p))
- break;
- offset -= PKTLEN(osh, p);
- }
-
- if (!p)
- return 0;
-
- /* copy the data */
- for (; p && len; p = PKTNEXT(osh, p)) {
- n = MIN((uint)PKTLEN(osh, p) - offset, (uint)len);
- bcopy(PKTDATA(osh, p) + offset, buf, n);
- buf += n;
- len -= n;
- ret += n;
- offset = 0;
- }
-
- return ret;
+ uint n, ret = 0;
+
+ if (len < 0)
+ len = 4096; /* "infinite" */
+
+ /* skip 'offset' bytes */
+ for (; p && offset; p = PKTNEXT (osh, p))
+ {
+ if (offset < (uint) PKTLEN (osh, p))
+ break;
+ offset -= PKTLEN (osh, p);
+ }
+
+ if (!p)
+ return 0;
+
+ /* copy the data */
+ for (; p && len; p = PKTNEXT (osh, p))
+ {
+ n = MIN ((uint) PKTLEN (osh, p) - offset, (uint) len);
+ bcopy (PKTDATA (osh, p) + offset, buf, n);
+ buf += n;
+ len -= n;
+ ret += n;
+ offset = 0;
+ }
+
+ return ret;
}
/* return total length of buffer chain */
uint
-pkttotlen(osl_t *osh, void *p)
+pkttotlen (osl_t * osh, void *p)
{
- uint total;
+ uint total;
- total = 0;
- for (; p; p = PKTNEXT(osh, p))
- total += PKTLEN(osh, p);
- return (total);
+ total = 0;
+ for (; p; p = PKTNEXT (osh, p))
+ total += PKTLEN (osh, p);
+ return (total);
}
/* return the last buffer of chained pkt */
void *
-pktlast(osl_t *osh, void *p)
+pktlast (osl_t * osh, void *p)
{
- for (; PKTNEXT(osh, p); p = PKTNEXT(osh, p))
- ;
+ for (; PKTNEXT (osh, p); p = PKTNEXT (osh, p))
+ ;
- return (p);
+ return (p);
}
/*
* osl multiple-precedence packet queue
- * hi_prec is always >= the number of the highest non-empty queue
+ * hi_prec is always >= the number of the highest non-empty precedence
*/
void *
-pktq_penq(struct pktq *pq, int prec, void *p)
+pktq_penq (struct pktq *pq, int prec, void *p)
{
- struct pktq_prec *q;
+ struct pktq_prec *q;
- ASSERT(prec >= 0 && prec < pq->num_prec);
- ASSERT(PKTLINK(p) == NULL); /* queueing chains not allowed */
+ ASSERT (prec >= 0 && prec < pq->num_prec);
+ ASSERT (PKTLINK (p) == NULL); /* queueing chains not allowed */
- ASSERT(!pktq_full(pq));
- ASSERT(!pktq_pfull(pq, prec));
+ ASSERT (!pktq_full (pq));
+ ASSERT (!pktq_pfull (pq, prec));
- q = &pq->q[prec];
+ q = &pq->q[prec];
- if (q->head)
- PKTSETLINK(q->tail, p);
- else
- q->head = p;
+ if (q->head)
+ PKTSETLINK (q->tail, p);
+ else
+ q->head = p;
- q->tail = p;
- q->len++;
+ q->tail = p;
+ q->len++;
- pq->len++;
+ pq->len++;
- if (pq->hi_prec < prec)
- pq->hi_prec = (uint8)prec;
+ if (pq->hi_prec < prec)
+ pq->hi_prec = (uint8) prec;
- return p;
+ return p;
}
void *
-pktq_penq_head(struct pktq *pq, int prec, void *p)
+pktq_penq_head (struct pktq *pq, int prec, void *p)
{
- struct pktq_prec *q;
+ struct pktq_prec *q;
- ASSERT(prec >= 0 && prec < pq->num_prec);
- ASSERT(PKTLINK(p) == NULL); /* queueing chains not allowed */
+ ASSERT (prec >= 0 && prec < pq->num_prec);
+ ASSERT (PKTLINK (p) == NULL); /* queueing chains not allowed */
- ASSERT(!pktq_full(pq));
- ASSERT(!pktq_pfull(pq, prec));
+ ASSERT (!pktq_full (pq));
+ ASSERT (!pktq_pfull (pq, prec));
- q = &pq->q[prec];
+ q = &pq->q[prec];
- if (q->head == NULL)
- q->tail = p;
+ if (q->head == NULL)
+ q->tail = p;
- PKTSETLINK(p, q->head);
- q->head = p;
- q->len++;
+ PKTSETLINK (p, q->head);
+ q->head = p;
+ q->len++;
- pq->len++;
+ pq->len++;
- if (pq->hi_prec < prec)
- pq->hi_prec = (uint8)prec;
+ if (pq->hi_prec < prec)
+ pq->hi_prec = (uint8) prec;
- return p;
+ return p;
}
void *
-pktq_pdeq(struct pktq *pq, int prec)
+pktq_pdeq (struct pktq *pq, int prec)
{
- struct pktq_prec *q;
- void *p;
+ struct pktq_prec *q;
+ void *p;
- ASSERT(prec >= 0 && prec < pq->num_prec);
+ ASSERT (prec >= 0 && prec < pq->num_prec);
- q = &pq->q[prec];
+ q = &pq->q[prec];
- if ((p = q->head) == NULL)
- return NULL;
+ if ((p = q->head) == NULL)
+ return NULL;
- if ((q->head = PKTLINK(p)) == NULL)
- q->tail = NULL;
+ if ((q->head = PKTLINK (p)) == NULL)
+ q->tail = NULL;
- q->len--;
+ q->len--;
- pq->len--;
+ pq->len--;
- PKTSETLINK(p, NULL);
+ PKTSETLINK (p, NULL);
- return p;
+ return p;
}
void *
-pktq_pdeq_tail(struct pktq *pq, int prec)
+pktq_pdeq_tail (struct pktq *pq, int prec)
{
- struct pktq_prec *q;
- void *p, *prev;
+ struct pktq_prec *q;
+ void *p, *prev;
- ASSERT(prec >= 0 && prec < pq->num_prec);
+ ASSERT (prec >= 0 && prec < pq->num_prec);
- q = &pq->q[prec];
+ q = &pq->q[prec];
- if ((p = q->head) == NULL)
- return NULL;
+ if ((p = q->head) == NULL)
+ return NULL;
- for (prev = NULL; p != q->tail; p = PKTLINK(p))
- prev = p;
+ for (prev = NULL; p != q->tail; p = PKTLINK (p))
+ prev = p;
- if (prev)
- PKTSETLINK(prev, NULL);
- else
- q->head = NULL;
+ if (prev)
+ PKTSETLINK (prev, NULL);
+ else
+ q->head = NULL;
- q->tail = prev;
- q->len--;
+ q->tail = prev;
+ q->len--;
- pq->len--;
+ pq->len--;
- return p;
+ return p;
}
void
-pktq_pflush(osl_t *osh, struct pktq *pq, int prec, bool dir)
-{
- struct pktq_prec *q;
- void *p;
-
- q = &pq->q[prec];
- p = q->head;
- while (p) {
- q->head = PKTLINK(p);
- PKTSETLINK(p, NULL);
- PKTFREE(osh, p, dir);
- q->len--;
- pq->len--;
- p = q->head;
- }
- ASSERT(q->len == 0);
- q->tail = NULL;
+pktq_pflush (osl_t * osh, struct pktq *pq, int prec, bool dir)
+{
+ struct pktq_prec *q;
+ void *p;
+
+ q = &pq->q[prec];
+ p = q->head;
+ while (p)
+ {
+ q->head = PKTLINK (p);
+ PKTSETLINK (p, NULL);
+ PKTFREE (osh, p, dir);
+ q->len--;
+ pq->len--;
+ p = q->head;
+ }
+ ASSERT (q->len == 0);
+ q->tail = NULL;
}
+#if 0
bool
-pktq_pdel(struct pktq *pq, void *pktbuf, int prec)
+pktq_pdel (struct pktq *pq, void *pktbuf, int prec)
{
- struct pktq_prec *q;
- void *p;
-
- ASSERT(prec >= 0 && prec < pq->num_prec);
+ struct pktq_prec *q;
+ void *p;
- if (!pktbuf)
- return FALSE;
+ ASSERT (prec >= 0 && prec < pq->num_prec);
- q = &pq->q[prec];
+ if (!pktbuf)
+ return FALSE;
- if (q->head == pktbuf) {
- if ((q->head = PKTLINK(pktbuf)) == NULL)
- q->tail = NULL;
- } else {
- for (p = q->head; p && PKTLINK(p) != pktbuf; p = PKTLINK(p))
- ;
- if (p == NULL)
- return FALSE;
+ q = &pq->q[prec];
- PKTSETLINK(p, PKTLINK(pktbuf));
- if (q->tail == pktbuf)
- q->tail = p;
- }
+ if (q->head == pktbuf)
+ {
+ if ((q->head = PKTLINK (pktbuf)) == NULL)
+ q->tail = NULL;
+ }
+ else
+ {
+ for (p = q->head; p && PKTLINK (p) != pktbuf; p = PKTLINK (p))
+ ;
+ if (p == NULL)
+ return FALSE;
+
+ PKTSETLINK (p, PKTLINK (pktbuf));
+ if (q->tail == pktbuf)
+ q->tail = p;
+ }
- q->len--;
- pq->len--;
- PKTSETLINK(pktbuf, NULL);
- return TRUE;
+ q->len--;
+ pq->len--;
+ PKTSETLINK (pktbuf, NULL);
+ return TRUE;
}
+#endif
void
-pktq_init(struct pktq *pq, int num_prec, int max_len)
+pktq_init (struct pktq *pq, int num_prec, int max_len)
{
- int prec;
+ int prec;
- ASSERT(num_prec > 0 && num_prec <= PKTQ_MAX_PREC);
+ ASSERT (num_prec > 0 && num_prec <= PKTQ_MAX_PREC);
- bzero(pq, sizeof(*pq));
+ /* pq is variable size; only zero out what's requested */
+ bzero (pq,
+ OFFSETOF (struct pktq, q) + (sizeof (struct pktq_prec) * num_prec));
- pq->num_prec = (uint16)num_prec;
+ pq->num_prec = (uint16) num_prec;
- pq->max = (uint16)max_len;
+ pq->max = (uint16) max_len;
- for (prec = 0; prec < num_prec; prec++)
- pq->q[prec].max = pq->max;
+ for (prec = 0; prec < num_prec; prec++)
+ pq->q[prec].max = pq->max;
+}
+
+int
+pktq_setmax (struct pktq *pq, int max_len)
+{
+ int prec;
+
+ if (!max_len)
+ return pq->max;
+
+ pq->max = (uint16) max_len;
+ for (prec = 0; prec < pq->num_prec; prec++)
+ pq->q[prec].max = pq->max;
+
+ return pq->max;
}
void *
-pktq_deq(struct pktq *pq, int *prec_out)
+pktq_deq (struct pktq *pq, int *prec_out)
{
- struct pktq_prec *q;
- void *p;
- int prec;
+ struct pktq_prec *q;
+ void *p;
+ int prec;
- if (pq->len == 0)
- return NULL;
+ if (pq->len == 0)
+ return NULL;
- while ((prec = pq->hi_prec) > 0 && pq->q[prec].head == NULL)
- pq->hi_prec--;
+ while ((prec = pq->hi_prec) > 0 && pq->q[prec].head == NULL)
+ pq->hi_prec--;
- q = &pq->q[prec];
+ q = &pq->q[prec];
- if ((p = q->head) == NULL)
- return NULL;
+ if ((p = q->head) == NULL)
+ return NULL;
- if ((q->head = PKTLINK(p)) == NULL)
- q->tail = NULL;
+ if ((q->head = PKTLINK (p)) == NULL)
+ q->tail = NULL;
- q->len--;
+ q->len--;
- pq->len--;
+ pq->len--;
- if (prec_out)
- *prec_out = prec;
+ if (prec_out)
+ *prec_out = prec;
- PKTSETLINK(p, NULL);
+ PKTSETLINK (p, NULL);
- return p;
+ return p;
}
void *
-pktq_deq_tail(struct pktq *pq, int *prec_out)
+pktq_deq_tail (struct pktq *pq, int *prec_out)
{
- struct pktq_prec *q;
- void *p, *prev;
- int prec;
+ struct pktq_prec *q;
+ void *p, *prev;
+ int prec;
- if (pq->len == 0)
- return NULL;
+ if (pq->len == 0)
+ return NULL;
- for (prec = 0; prec < pq->hi_prec; prec++)
- if (pq->q[prec].head)
- break;
+ for (prec = 0; prec < pq->hi_prec; prec++)
+ if (pq->q[prec].head)
+ break;
- q = &pq->q[prec];
+ q = &pq->q[prec];
- if ((p = q->head) == NULL)
- return NULL;
+ if ((p = q->head) == NULL)
+ return NULL;
- for (prev = NULL; p != q->tail; p = PKTLINK(p))
- prev = p;
+ for (prev = NULL; p != q->tail; p = PKTLINK (p))
+ prev = p;
- if (prev)
- PKTSETLINK(prev, NULL);
- else
- q->head = NULL;
+ if (prev)
+ PKTSETLINK (prev, NULL);
+ else
+ q->head = NULL;
- q->tail = prev;
- q->len--;
+ q->tail = prev;
+ q->len--;
- pq->len--;
+ pq->len--;
- if (prec_out)
- *prec_out = prec;
+ if (prec_out)
+ *prec_out = prec;
- PKTSETLINK(p, NULL);
+ PKTSETLINK (p, NULL);
- return p;
+ return p;
}
+#if 0
void *
-pktq_peek(struct pktq *pq, int *prec_out)
+pktq_peek (struct pktq *pq, int *prec_out)
{
- int prec;
+ int prec;
- if (pq->len == 0)
- return NULL;
+ if (pq->len == 0)
+ return NULL;
- while ((prec = pq->hi_prec) > 0 && pq->q[prec].head == NULL)
- pq->hi_prec--;
+ while ((prec = pq->hi_prec) > 0 && pq->q[prec].head == NULL)
+ pq->hi_prec--;
- if (prec_out)
- *prec_out = prec;
+ if (prec_out)
+ *prec_out = prec;
- return (pq->q[prec].head);
+ return (pq->q[prec].head);
}
+#endif
void *
-pktq_peek_tail(struct pktq *pq, int *prec_out)
+pktq_peek_tail (struct pktq *pq, int *prec_out)
{
- int prec;
+ int prec;
- if (pq->len == 0)
- return NULL;
+ if (pq->len == 0)
+ return NULL;
- for (prec = 0; prec < pq->hi_prec; prec++)
- if (pq->q[prec].head)
- break;
+ for (prec = 0; prec < pq->hi_prec; prec++)
+ if (pq->q[prec].head)
+ break;
- if (prec_out)
- *prec_out = prec;
+ if (prec_out)
+ *prec_out = prec;
- return (pq->q[prec].tail);
+ return (pq->q[prec].tail);
}
void
-pktq_flush(osl_t *osh, struct pktq *pq, bool dir)
+pktq_flush (osl_t * osh, struct pktq *pq, bool dir)
{
- int prec;
- for (prec = 0; prec < pq->num_prec; prec++)
- pktq_pflush(osh, pq, prec, dir);
- ASSERT(pq->len == 0);
+ int prec;
+ for (prec = 0; prec < pq->num_prec; prec++)
+ pktq_pflush (osh, pq, prec, dir);
+ ASSERT (pq->len == 0);
}
/* Return sum of lengths of a specific set of precedences */
int
-pktq_mlen(struct pktq *pq, uint prec_bmp)
+pktq_mlen (struct pktq *pq, uint prec_bmp)
{
- int prec, len;
+ int prec, len;
- len = 0;
+ len = 0;
- for (prec = 0; prec <= pq->hi_prec; prec++)
- if (prec_bmp & (1 << prec))
- len += pq->q[prec].len;
+ for (prec = 0; prec <= pq->hi_prec; prec++)
+ if (prec_bmp & (1 << prec))
+ len += pq->q[prec].len;
- return len;
+ return len;
}
/* Priority dequeue from a specific set of precedences */
void *
-pktq_mdeq(struct pktq *pq, uint prec_bmp, int *prec_out)
+pktq_mdeq (struct pktq *pq, uint prec_bmp, int *prec_out)
{
- struct pktq_prec *q;
- void *p;
- int prec;
+ struct pktq_prec *q;
+ void *p;
+ int prec;
- if (pq->len == 0)
- return NULL;
+ if (pq->len == 0)
+ return NULL;
- while ((prec = pq->hi_prec) > 0 && pq->q[prec].head == NULL)
- pq->hi_prec--;
+ while ((prec = pq->hi_prec) > 0 && pq->q[prec].head == NULL)
+ pq->hi_prec--;
- while ((prec_bmp & (1 << prec)) == 0 || pq->q[prec].head == NULL)
- if (prec-- == 0)
- return NULL;
+ while ((prec_bmp & (1 << prec)) == 0 || pq->q[prec].head == NULL)
+ if (prec-- == 0)
+ return NULL;
- q = &pq->q[prec];
+ q = &pq->q[prec];
- if ((p = q->head) == NULL)
- return NULL;
+ if ((p = q->head) == NULL)
+ return NULL;
- if ((q->head = PKTLINK(p)) == NULL)
- q->tail = NULL;
+ if ((q->head = PKTLINK (p)) == NULL)
+ q->tail = NULL;
- q->len--;
+ q->len--;
- if (prec_out)
- *prec_out = prec;
+ if (prec_out)
+ *prec_out = prec;
- pq->len--;
+ pq->len--;
- PKTSETLINK(p, NULL);
+ PKTSETLINK (p, NULL);
- return p;
+ return p;
}
-char*
-bcmstrcat(char *dest, const char *src)
+const unsigned char bcm_ctype[] = {
+ _BCM_C, _BCM_C, _BCM_C, _BCM_C, _BCM_C, _BCM_C, _BCM_C, _BCM_C, /* 0-7 */
+ _BCM_C, _BCM_C | _BCM_S, _BCM_C | _BCM_S, _BCM_C | _BCM_S, _BCM_C | _BCM_S,
+ _BCM_C | _BCM_S, _BCM_C,
+ _BCM_C, /* 8-15 */
+ _BCM_C, _BCM_C, _BCM_C, _BCM_C, _BCM_C, _BCM_C, _BCM_C, _BCM_C, /* 16-23 */
+ _BCM_C, _BCM_C, _BCM_C, _BCM_C, _BCM_C, _BCM_C, _BCM_C, _BCM_C, /* 24-31 */
+ _BCM_S | _BCM_SP, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, /* 32-39 */
+ _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, /* 40-47 */
+ _BCM_D, _BCM_D, _BCM_D, _BCM_D, _BCM_D, _BCM_D, _BCM_D, _BCM_D, /* 48-55 */
+ _BCM_D, _BCM_D, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, /* 56-63 */
+ _BCM_P, _BCM_U | _BCM_X, _BCM_U | _BCM_X, _BCM_U | _BCM_X, _BCM_U | _BCM_X,
+ _BCM_U | _BCM_X,
+ _BCM_U | _BCM_X, _BCM_U, /* 64-71 */
+ _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, /* 72-79 */
+ _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, /* 80-87 */
+ _BCM_U, _BCM_U, _BCM_U, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, /* 88-95 */
+ _BCM_P, _BCM_L | _BCM_X, _BCM_L | _BCM_X, _BCM_L | _BCM_X, _BCM_L | _BCM_X,
+ _BCM_L | _BCM_X,
+ _BCM_L | _BCM_X, _BCM_L, /* 96-103 */
+ _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, /* 104-111 */
+ _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, /* 112-119 */
+ _BCM_L, _BCM_L, _BCM_L, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_C, /* 120-127 */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 128-143 */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 144-159 */
+ _BCM_S | _BCM_SP, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P,
+ _BCM_P, _BCM_P,
+ _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, /* 160-175 */
+ _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P,
+ _BCM_P, _BCM_P,
+ _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, /* 176-191 */
+ _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U,
+ _BCM_U, _BCM_U,
+ _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, /* 192-207 */
+ _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_P, _BCM_U,
+ _BCM_U, _BCM_U,
+ _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_L, /* 208-223 */
+ _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L,
+ _BCM_L, _BCM_L,
+ _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, /* 224-239 */
+ _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_P, _BCM_L,
+ _BCM_L, _BCM_L,
+ _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L /* 240-255 */
+};
+
+ulong BCMROMFN (bcm_strtoul) (char *cp, char **endp, uint base)
{
- strcpy(&dest[strlen(dest)], src);
- return (dest);
+ ulong result, value;
+ bool minus;
+
+ minus = FALSE;
+
+ while (bcm_isspace (*cp))
+ cp++;
+
+ if (cp[0] == '+')
+ cp++;
+ else if (cp[0] == '-')
+ {
+ minus = TRUE;
+ cp++;
+ }
+
+ if (base == 0)
+ {
+ if (cp[0] == '0')
+ {
+ if ((cp[1] == 'x') || (cp[1] == 'X'))
+ {
+ base = 16;
+ cp = &cp[2];
+ }
+ else
+ {
+ base = 8;
+ cp = &cp[1];
+ }
+ }
+ else
+ base = 10;
+ }
+ else if (base == 16 && (cp[0] == '0') && ((cp[1] == 'x') || (cp[1] == 'X')))
+ {
+ cp = &cp[2];
+ }
+
+ result = 0;
+
+ while (bcm_isxdigit (*cp) &&
+ (value =
+ bcm_isdigit (*cp) ? *cp - '0' : bcm_toupper (*cp) - 'A' + 10) <
+ base)
+ {
+ result = result * base + value;
+ cp++;
+ }
+
+ if (minus)
+ result = (ulong) (result * -1);
+
+ if (endp)
+ *endp = (char *) cp;
+
+ return (result);
}
-char*
-bcm_ether_ntoa(struct ether_addr *ea, char *buf)
+#if 0
+int BCMROMFN (bcm_atoi) (char *s)
{
- sprintf(buf, "%02x:%02x:%02x:%02x:%02x:%02x",
- ea->octet[0]&0xff, ea->octet[1]&0xff, ea->octet[2]&0xff,
- ea->octet[3]&0xff, ea->octet[4]&0xff, ea->octet[5]&0xff);
- return (buf);
+ return (int) bcm_strtoul (s, NULL, 10);
}
+/* return pointer to location of substring 'needle' in 'haystack' */
+char *BCMROMFN (bcmstrstr) (char *haystack, char *needle)
+{
+ int len, nlen;
+ int i;
+
+ if ((haystack == NULL) || (needle == NULL))
+ return (haystack);
+
+ nlen = strlen (needle);
+ len = strlen (haystack) - nlen + 1;
+
+ for (i = 0; i < len; i++)
+ if (memcmp (needle, &haystack[i], nlen) == 0)
+ return (&haystack[i]);
+ return (NULL);
+}
+
+char *BCMROMFN (bcmstrcat) (char *dest, const char *src)
+{
+ strcpy (&dest[strlen (dest)], src);
+ return (dest);
+}
+
+char *BCMROMFN (bcmstrncat) (char *dest, const char *src, uint size)
+{
+ char *endp;
+ char *p;
+
+ p = dest + strlen (dest);
+ endp = p + size;
+
+ while (p != endp && (*p++ = *src++) != '\0')
+ ;
+
+ return (dest);
+}
+#endif
+
/* parse a xx:xx:xx:xx:xx:xx format ethernet address */
+int BCMROMFN (bcm_ether_atoe) (char *p, struct ether_addr * ea)
+{
+ int i = 0;
+
+ for (;;)
+ {
+ ea->octet[i++] = (char) bcm_strtoul (p, &p, 16);
+ if (!*p++ || i == 6)
+ break;
+ }
+
+ return (i == 6);
+}
+
+#if defined(CONFIG_USBRNDIS_RETAIL) || defined(NDIS_MINIPORT_DRIVER)
+/* registry routine buffer preparation utility functions:
+ * parameter order is like strncpy, but returns count
+ * of bytes copied. Minimum bytes copied is null char(1)/wchar(2)
+ */
+ulong
+wchar2ascii (char *abuf, ushort * wbuf, ushort wbuflen, ulong abuflen)
+{
+ ulong copyct = 1;
+ ushort i;
+
+ if (abuflen == 0)
+ return 0;
+
+ /* wbuflen is in bytes */
+ wbuflen /= sizeof (ushort);
+
+ for (i = 0; i < wbuflen; ++i)
+ {
+ if (--abuflen == 0)
+ break;
+ *abuf++ = (char) *wbuf++;
+ ++copyct;
+ }
+ *abuf = '\0';
+
+ return copyct;
+}
+#endif /* CONFIG_USBRNDIS_RETAIL || NDIS_MINIPORT_DRIVER */
+
+#if 0
+char *
+bcm_ether_ntoa (struct ether_addr *ea, char *buf)
+{
+ snprintf (buf, 18, "%02x:%02x:%02x:%02x:%02x:%02x",
+ ea->octet[0] & 0xff, ea->octet[1] & 0xff, ea->octet[2] & 0xff,
+ ea->octet[3] & 0xff, ea->octet[4] & 0xff, ea->octet[5] & 0xff);
+ return (buf);
+}
+
+char *
+bcm_ip_ntoa (struct ipv4_addr *ia, char *buf)
+{
+ snprintf (buf, 16, "%d.%d.%d.%d",
+ ia->addr[0], ia->addr[1], ia->addr[2], ia->addr[3]);
+ return (buf);
+}
+void
+bcm_mdelay (uint ms)
+{
+ uint i;
+
+ for (i = 0; i < ms; i++)
+ {
+ OSL_DELAY (1000);
+ }
+}
+#endif
+
+#if 0
+
+/*
+ * Search the name=value vars for a specific one and return its value.
+ * Returns NULL if not found.
+ */
+char *
+getvar (char *vars, const char *name)
+{
+#ifdef _MINOSL_
+ return NULL;
+#else
+ char *s;
+ int len;
+
+ if (!name)
+ return NULL;
+
+ len = strlen (name);
+ if (len == 0)
+ return NULL;
+
+ /* first look in vars[] */
+ for (s = vars; s && *s;)
+ {
+ /* CSTYLED */
+ if ((bcmp (s, name, len) == 0) && (s[len] == '='))
+ return (&s[len + 1]);
+
+ while (*s++)
+ ;
+ }
+
+ /* then query nvram */
+ return (nvram_get (name));
+#endif /* _MINOSL_ */
+}
+
+/*
+ * Search the vars for a specific one and return its value as
+ * an integer. Returns 0 if not found.
+ */
int
-bcm_ether_atoe(char *p, struct ether_addr *ea)
+getintvar (char *vars, const char *name)
+{
+#ifdef _MINOSL_
+ return 0;
+#else
+ char *val;
+
+ if ((val = getvar (vars, name)) == NULL)
+ return (0);
+
+ return (bcm_strtoul (val, NULL, 0));
+#endif /* _MINOSL_ */
+}
+
+
+/* Search for token in comma separated token-string */
+static int
+findmatch (char *string, char *name)
{
- int i = 0;
+ uint len;
+ char *c;
+
+ len = strlen (name);
+ /* CSTYLED */
+ while ((c = strchr (string, ',')) != NULL)
+ {
+ if (len == (uint) (c - string) && !strncmp (string, name, len))
+ return 1;
+ string = c + 1;
+ }
+
+ return (!strcmp (string, name));
+}
- for (;;) {
- ea->octet[i++] = (char) bcm_strtoul(p, &p, 16);
- if (!*p++ || i == 6)
- break;
+/* Return gpio pin number assigned to the named pin
+ *
+ * Variable should be in format:
+ *
+ * gpio<N>=pin_name,pin_name
+ *
+ * This format allows multiple features to share the gpio with mutual
+ * understanding.
+ *
+ * 'def_pin' is returned if a specific gpio is not defined for the requested functionality
+ * and if def_pin is not used by others.
+ */
+uint
+getgpiopin (char *vars, char *pin_name, uint def_pin)
+{
+ char name[] = "gpioXXXX";
+ char *val;
+ uint pin;
+
+ /* Go thru all possibilities till a match in pin name */
+ for (pin = 0; pin < GPIO_NUMPINS; pin++)
+ {
+ snprintf (name, sizeof (name), "gpio%d", pin);
+ val = getvar (vars, name);
+ if (val && findmatch (val, pin_name))
+ return pin;
+ }
+
+ if (def_pin != GPIO_PIN_NOTDEFINED)
+ {
+ /* make sure the default pin is not used by someone else */
+ snprintf (name, sizeof (name), "gpio%d", def_pin);
+ if (getvar (vars, name))
+ {
+ def_pin = GPIO_PIN_NOTDEFINED;
}
+ }
+
+ return def_pin;
+}
+#endif
+
+#ifdef BCMPERFSTATS
- return (i == 6);
+#define LOGSIZE 256 /* should be power of 2 to avoid div below */
+static struct
+{
+ uint cycles;
+ char *fmt;
+ uint a1;
+ uint a2;
+} logtab[LOGSIZE];
+
+/* last entry logged */
+static uint logi = 0;
+/* next entry to read */
+static uint readi = 0;
+
+void
+bcm_perf_enable ()
+{
+ BCMPERF_ENABLE_INSTRCOUNT ();
+ BCMPERF_ENABLE_ICACHE_MISS ();
+ BCMPERF_ENABLE_ICACHE_HIT ();
}
-/* Takes an Ethernet frame and sets out-of-bound PKTPRIO
- * Also updates the inplace vlan tag if requested
+void
+bcmlog (char *fmt, uint a1, uint a2)
+{
+ static uint last = 0;
+ uint cycles, i;
+ OSL_GETCYCLES (cycles);
+
+ i = logi;
+
+ logtab[i].cycles = cycles - last;
+ logtab[i].fmt = fmt;
+ logtab[i].a1 = a1;
+ logtab[i].a2 = a2;
+
+ logi = (i + 1) % LOGSIZE;
+ last = cycles;
+}
+
+
+void
+bcmstats (char *fmt)
+{
+ static uint last = 0;
+ static uint32 ic_miss = 0;
+ static uint32 instr_count = 0;
+ uint32 ic_miss_cur;
+ uint32 instr_count_cur;
+ uint cycles, i;
+
+ OSL_GETCYCLES (cycles);
+ BCMPERF_GETICACHE_MISS (ic_miss_cur);
+ BCMPERF_GETINSTRCOUNT (instr_count_cur);
+
+ i = logi;
+
+ logtab[i].cycles = cycles - last;
+ logtab[i].a1 = ic_miss_cur - ic_miss;
+ logtab[i].a2 = instr_count_cur - instr_count;
+ logtab[i].fmt = fmt;
+
+ logi = (i + 1) % LOGSIZE;
+
+ last = cycles;
+ instr_count = instr_count_cur;
+ ic_miss = ic_miss_cur;
+}
+
+
+void
+bcmdumplog (char *buf, int size)
+{
+ char *limit, *line;
+ int j = 0;
+ int num;
+
+ limit = buf + size - 80;
+ *buf = '\0';
+
+ num = logi - readi;
+
+ if (num < 0)
+ num += LOGSIZE;
+
+ /* print in chronological order */
+
+ for (j = 0; j < num && (buf < limit); readi = (readi + 1) % LOGSIZE, j++)
+ {
+ if (logtab[readi].fmt == NULL)
+ continue;
+ line = buf;
+ buf += sprintf (buf, "%d\t", logtab[readi].cycles);
+ buf +=
+ sprintf (buf, logtab[readi].fmt, logtab[readi].a1, logtab[readi].a2);
+ buf += sprintf (buf, "\n");
+ }
+
+}
+
+
+/*
+ * Dump one log entry at a time.
+ * Return index of next entry or -1 when no more .
*/
+int
+bcmdumplogent (char *buf, uint i)
+{
+ bool hit;
+
+ /*
+ * If buf is NULL, return the starting index,
+ * interpreting i as the indicator of last 'i' entries to dump.
+ */
+ if (buf == NULL)
+ {
+ i = ((i > 0) && (i < (LOGSIZE - 1))) ? i : (LOGSIZE - 1);
+ return ((logi - i) % LOGSIZE);
+ }
+
+ *buf = '\0';
+
+ ASSERT (i < LOGSIZE);
+
+ if (i == logi)
+ return (-1);
+
+ hit = FALSE;
+ for (; (i != logi) && !hit; i = (i + 1) % LOGSIZE)
+ {
+ if (logtab[i].fmt == NULL)
+ continue;
+ buf += sprintf (buf, "%d: %d\t", i, logtab[i].cycles);
+ buf += sprintf (buf, logtab[i].fmt, logtab[i].a1, logtab[i].a2);
+ buf += sprintf (buf, "\n");
+ hit = TRUE;
+ }
+
+ return (i);
+}
+
+#endif /* BCMPERFSTATS */
+
+#ifdef BCMDBG
+/* pretty hex print a pkt buffer chain */
void
-pktsetprio(void *pkt, bool update_vtag)
+prpkt (const char *msg, osl_t * osh, void *p0)
{
- struct ether_header *eh;
- struct ethervlan_header *evh;
- uint8 *pktdata;
- int priority = 0;
+ void *p;
- pktdata = (uint8 *) PKTDATA(NULL, pkt);
- ASSERT(ISALIGNED((uintptr)pktdata, sizeof(uint16)));
+ if (msg && (msg[0] != '\0'))
+ printf ("%s:\n", msg);
- eh = (struct ether_header *) pktdata;
+ for (p = p0; p; p = PKTNEXT (osh, p))
+ prhex (NULL, PKTDATA (osh, p), PKTLEN (osh, p));
+}
+#endif /* BCMDBG */
- if (ntoh16(eh->ether_type) == ETHER_TYPE_8021Q) {
- uint16 vlan_tag;
- int vlan_prio, dscp_prio = 0;
+/* Takes an Ethernet frame and sets out-of-bound PKTPRIO.
+ * Also updates the inplace vlan tag if requested.
+ * For debugging, it returns an indication of what it did.
+ */
+uint
+pktsetprio (void *pkt, bool update_vtag)
+{
+ struct ether_header *eh;
+ struct ethervlan_header *evh;
+ uint8 *pktdata;
+ int priority = 0;
+ int rc = 0;
- evh = (struct ethervlan_header *)eh;
+ pktdata = (uint8 *) PKTDATA (NULL, pkt);
+ ASSERT (ISALIGNED ((uintptr) pktdata, sizeof (uint16)));
- vlan_tag = ntoh16(evh->vlan_tag);
- vlan_prio = (int) (vlan_tag >> VLAN_PRI_SHIFT) & VLAN_PRI_MASK;
+ eh = (struct ether_header *) pktdata;
- if (ntoh16(evh->ether_type) == ETHER_TYPE_IP) {
- uint8 *ip_body = pktdata + sizeof(struct ethervlan_header);
- uint8 tos_tc = IP_TOS(ip_body);
- dscp_prio = (int)(tos_tc >> IPV4_TOS_PREC_SHIFT);
- }
+ if (ntoh16 (eh->ether_type) == ETHER_TYPE_8021Q)
+ {
+ uint16 vlan_tag;
+ int vlan_prio, dscp_prio = 0;
+
+ evh = (struct ethervlan_header *) eh;
- /* DSCP priority gets precedence over 802.1P (vlan tag) */
- priority = (dscp_prio != 0) ? dscp_prio : vlan_prio;
-
- /*
- * If the DSCP priority is not the same as the VLAN priority,
- * then overwrite the priority field in the vlan tag, with the
- * DSCP priority value. This is required for Linux APs because
- * the VLAN driver on Linux, overwrites the skb->priority field
- * with the priority value in the vlan tag
- */
- if (update_vtag && (priority != vlan_prio)) {
- vlan_tag &= ~(VLAN_PRI_MASK << VLAN_PRI_SHIFT);
- vlan_tag |= (uint16)priority << VLAN_PRI_SHIFT;
- evh->vlan_tag = hton16(vlan_tag);
+ vlan_tag = ntoh16 (evh->vlan_tag);
+ vlan_prio = (int) (vlan_tag >> VLAN_PRI_SHIFT) & VLAN_PRI_MASK;
+
+ if (ntoh16 (evh->ether_type) == ETHER_TYPE_IP)
+ {
+ uint8 *ip_body = pktdata + sizeof (struct ethervlan_header);
+ uint8 tos_tc = IP_TOS (ip_body);
+ dscp_prio = (int) (tos_tc >> IPV4_TOS_PREC_SHIFT);
+ if ((IP_VER (ip_body) == IP_VER_4)
+ && (IPV4_PROT (ip_body) == IP_PROT_TCP))
+ {
+ int ip_len;
+ int src_port;
+ bool src_port_exc;
+ uint8 *tcp_hdr;
+
+ ip_len = IPV4_PAYLOAD_LEN (ip_body);
+ tcp_hdr = IPV4_NO_OPTIONS_PAYLOAD (ip_body);
+ src_port = TCP_SRC_PORT (tcp_hdr);
+ src_port_exc = (src_port == 10110) || (src_port == 10120) ||
+ (src_port == 10130) || (src_port == 10140);
+
+ if ((ip_len == 40) && src_port_exc && TCP_IS_ACK (tcp_hdr))
+ {
+ dscp_prio = 7;
}
- } else if (ntoh16(eh->ether_type) == ETHER_TYPE_IP) {
- uint8 *ip_body = pktdata + sizeof(struct ether_header);
- uint8 tos_tc = IP_TOS(ip_body);
- priority = (int)(tos_tc >> IPV4_TOS_PREC_SHIFT);
+ }
}
- ASSERT(priority >= 0 && priority <= MAXPRIO);
- PKTSETPRIO(pkt, priority);
+ /* DSCP priority gets precedence over 802.1P (vlan tag) */
+ if (dscp_prio != 0)
+ {
+ priority = dscp_prio;
+ rc |= PKTPRIO_VDSCP;
+ }
+ else
+ {
+ priority = vlan_prio;
+ rc |= PKTPRIO_VLAN;
+ }
+ /*
+ * If the DSCP priority is not the same as the VLAN priority,
+ * then overwrite the priority field in the vlan tag, with the
+ * DSCP priority value. This is required for Linux APs because
+ * the VLAN driver on Linux, overwrites the skb->priority field
+ * with the priority value in the vlan tag
+ */
+ if (update_vtag && (priority != vlan_prio))
+ {
+ vlan_tag &= ~(VLAN_PRI_MASK << VLAN_PRI_SHIFT);
+ vlan_tag |= (uint16) priority << VLAN_PRI_SHIFT;
+ evh->vlan_tag = hton16 (vlan_tag);
+ rc |= PKTPRIO_UPD;
+ }
+ }
+ else if (ntoh16 (eh->ether_type) == ETHER_TYPE_IP)
+ {
+ uint8 *ip_body = pktdata + sizeof (struct ether_header);
+ uint8 tos_tc = IP_TOS (ip_body);
+ priority = (int) (tos_tc >> IPV4_TOS_PREC_SHIFT);
+ rc |= PKTPRIO_DSCP;
+ if ((IP_VER (ip_body) == IP_VER_4)
+ && (IPV4_PROT (ip_body) == IP_PROT_TCP))
+ {
+ int ip_len;
+ int src_port;
+ bool src_port_exc;
+ uint8 *tcp_hdr;
+
+ ip_len = IPV4_PAYLOAD_LEN (ip_body);
+ tcp_hdr = IPV4_NO_OPTIONS_PAYLOAD (ip_body);
+ src_port = TCP_SRC_PORT (tcp_hdr);
+ src_port_exc = (src_port == 10110) || (src_port == 10120) ||
+ (src_port == 10130) || (src_port == 10140);
+
+ if ((ip_len == 40) && src_port_exc && TCP_IS_ACK (tcp_hdr))
+ {
+ priority = 7;
+ }
+ }
+ }
+
+ ASSERT (priority >= 0 && priority <= MAXPRIO);
+ PKTSETPRIO (pkt, priority);
+ return (rc | priority);
}
static char bcm_undeferrstr[BCME_STRLEN];
static const char *bcmerrorstrtable[] = BCMERRSTRINGTABLE;
-/* Convert the Error codes into related Error strings */
+/* Convert the error codes into related error strings */
const char *
-bcmerrorstr(int bcmerror)
+bcmerrorstr (int bcmerror)
+{
+ /* check if someone added a bcmerror code but forgot to add errorstring */
+ ASSERT (ABS (BCME_LAST) == (ARRAYSIZE (bcmerrorstrtable) - 1));
+
+ if (bcmerror > 0 || bcmerror < BCME_LAST)
+ {
+ snprintf (bcm_undeferrstr, BCME_STRLEN, "Undefined error %d", bcmerror);
+ return bcm_undeferrstr;
+ }
+
+ ASSERT (strlen (bcmerrorstrtable[-bcmerror]) < BCME_STRLEN);
+
+ return bcmerrorstrtable[-bcmerror];
+}
+
+#if 0
+static void BCMINITFN (bcm_nvram_refresh) (char *flash)
{
- int abs_bcmerror;
+ int i;
+ int ret = 0;
+
+ ASSERT (flash);
+
+ /* default "empty" vars cache */
+ bzero (flash, 2);
+
+ if ((ret = nvram_getall (flash, NVRAM_SPACE)))
+ return;
+
+ /* determine nvram length */
+ for (i = 0; i < NVRAM_SPACE; i++)
+ {
+ if (flash[i] == '\0' && flash[i + 1] == '\0')
+ break;
+ }
- abs_bcmerror = ABS(bcmerror);
+ if (i > 1)
+ vars_len = i + 2;
+ else
+ vars_len = 0;
+}
+#endif
+
+#ifdef BCMDBG_PKT /* pkt logging for debugging */
+/* Add a packet to the pktlist */
+void
+pktlist_add (pktlist_info_t * pktlist, void *pkt)
+{
+ uint i;
+ ASSERT (pktlist->count < PKTLIST_SIZE);
+
+ /* Verify the packet is not already part of the list */
+ for (i = 0; i < pktlist->count; i++)
+ {
+ if (pktlist->list[i] == pkt)
+ ASSERT (0);
+ }
+ pktlist->list[pktlist->count] = pkt;
+ pktlist->count++;
+ return;
+}
- /* check if someone added a bcmerror code but forgot to add errorstring */
- ASSERT(ABS(BCME_LAST) == (ARRAYSIZE(bcmerrorstrtable) - 1));
- if ((bcmerror > 0) || (abs_bcmerror > ABS(BCME_LAST))) {
- sprintf(bcm_undeferrstr, "undefined Error %d", bcmerror);
- return bcm_undeferrstr;
+/* Remove a packet from the pktlist */
+void
+pktlist_remove (pktlist_info_t * pktlist, void *pkt)
+{
+ uint i;
+ uint num = pktlist->count;
+
+ /* find the index where pkt exists */
+ for (i = 0; i < num; i++)
+ {
+ /* check for the existence of pkt in the list */
+ if (pktlist->list[i] == pkt)
+ {
+ /* replace with the last element */
+ pktlist->list[i] = pktlist->list[num - 1];
+ pktlist->count--;
+ return;
}
+ }
+ ASSERT (0);
+}
+
+/* Dump the pktlist (and the contents of each packet if 'data'
+ * is set). 'buf' should be large enough
+ */
+
+char *
+pktlist_dump (pktlist_info_t * pktlist, char *buf)
+{
+ char *obuf;
+ uint i;
+
+ obuf = buf;
+
+ buf += sprintf (buf, "Packet list dump:\n");
- ASSERT((strlen((char*)bcmerrorstrtable[abs_bcmerror])) < BCME_STRLEN);
+ for (i = 0; i < (pktlist->count); i++)
+ {
+ buf += sprintf (buf, "0x%p\t", pktlist->list[i]);
- return bcmerrorstrtable[abs_bcmerror];
+#ifdef NOTDEF /* Remove this ifdef to print pkttag and pktdata */
+ if (PKTTAG (pktlist->list[i]))
+ {
+ /* Print pkttag */
+ buf += sprintf (buf, "Pkttag(in hex): ");
+ buf +=
+ bcm_format_hex (buf, PKTTAG (pktlist->list[i]), OSL_PKTTAG_SZ);
+ }
+ buf += sprintf (buf, "Pktdata(in hex): ");
+ buf += bcm_format_hex (buf, PKTDATA (NULL, pktlist->list[i]),
+ PKTLEN (NULL, pktlist->list[i]));
+#endif /* NOTDEF */
+
+ buf += sprintf (buf, "\n");
+ }
+ return obuf;
}
+#endif /* BCMDBG_PKT */
+#if 0
+/* iovar table lookup */
+const bcm_iovar_t *
+bcm_iovar_lookup (const bcm_iovar_t * table, const char *name)
+{
+ const bcm_iovar_t *vi;
+ const char *lookup_name;
+
+ /* skip any ':' delimited option prefixes */
+ lookup_name = strrchr (name, ':');
+ if (lookup_name != NULL)
+ lookup_name++;
+ else
+ lookup_name = name;
+
+ ASSERT (table);
+
+ for (vi = table; vi->name; vi++)
+ {
+ if (!strcmp (vi->name, lookup_name))
+ return vi;
+ }
+ /* ran to end of table */
+
+ return NULL; /* var name not found */
+}
+#endif
int
-bcm_iovar_lencheck(const bcm_iovar_t *vi, void *arg, int len, bool set)
-{
- int bcmerror = 0;
-
- /* length check on io buf */
- switch (vi->type) {
- case IOVT_BOOL:
- case IOVT_INT8:
- case IOVT_INT16:
- case IOVT_INT32:
- case IOVT_UINT8:
- case IOVT_UINT16:
- case IOVT_UINT32:
- /* all integers are int32 sized args at the ioctl interface */
- if (len < (int)sizeof(int)) {
- bcmerror = BCME_BUFTOOSHORT;
- }
- break;
+bcm_iovar_lencheck (const bcm_iovar_t * vi, void *arg, int len, bool set)
+{
+ int bcmerror = 0;
+
+ /* length check on io buf */
+ switch (vi->type)
+ {
+ case IOVT_BOOL:
+ case IOVT_INT8:
+ case IOVT_INT16:
+ case IOVT_INT32:
+ case IOVT_UINT8:
+ case IOVT_UINT16:
+ case IOVT_UINT32:
+ /* all integers are int32 sized args at the ioctl interface */
+ if (len < (int) sizeof (int))
+ {
+ bcmerror = BCME_BUFTOOSHORT;
+ }
+ break;
- case IOVT_BUFFER:
- /* buffer must meet minimum length requirement */
- if (len < vi->minlen) {
- bcmerror = BCME_BUFTOOSHORT;
- }
- break;
-
- case IOVT_VOID:
- if (!set) {
- /* Cannot return nil... */
- bcmerror = BCME_UNSUPPORTED;
- } else if (len) {
- /* Set is an action w/o parameters */
- bcmerror = BCME_BUFTOOLONG;
- }
- break;
+ case IOVT_BUFFER:
+ /* buffer must meet minimum length requirement */
+ if (len < vi->minlen)
+ {
+ bcmerror = BCME_BUFTOOSHORT;
+ }
+ break;
- default:
- /* unknown type for length check in iovar info */
- ASSERT(0);
- bcmerror = BCME_UNSUPPORTED;
+ case IOVT_VOID:
+ if (!set)
+ {
+ /* Cannot return nil... */
+ bcmerror = BCME_UNSUPPORTED;
+ }
+ else if (len)
+ {
+ /* Set is an action w/o parameters */
+ bcmerror = BCME_BUFTOOLONG;
}
+ break;
+
+ default:
+ /* unknown type for length check in iovar info */
+ ASSERT (0);
+ bcmerror = BCME_UNSUPPORTED;
+ }
- return bcmerror;
+ return bcmerror;
}
#define CRC_INNER_LOOP(n, c, x) \
- (c) = ((c) >> 8) ^ crc##n##_table[((c) ^ (x)) & 0xff]
-
-static uint32 crc32_table[256] = {
- 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA,
- 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,
- 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,
- 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,
- 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,
- 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,
- 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC,
- 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,
- 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,
- 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
- 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940,
- 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,
- 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116,
- 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,
- 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,
- 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,
- 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A,
- 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
- 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818,
- 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
- 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,
- 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,
- 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C,
- 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,
- 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,
- 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,
- 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,
- 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,
- 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086,
- 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
- 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4,
- 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,
- 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,
- 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,
- 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,
- 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,
- 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE,
- 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,
- 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,
- 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,
- 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252,
- 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
- 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60,
- 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,
- 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,
- 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,
- 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04,
- 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,
- 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A,
- 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,
- 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,
- 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,
- 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E,
- 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,
- 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,
- 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,
- 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,
- 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,
- 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0,
- 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
- 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6,
- 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,
- 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,
- 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D
+ (c) = ((c) >> 8) ^ crc##n##_table[((c) ^ (x)) & 0xff]
+
+#if 0
+/*******************************************************************************
+ * crc8
+ *
+ * Computes a crc8 over the input data using the polynomial:
+ *
+ * x^8 + x^7 +x^6 + x^4 + x^2 + 1
+ *
+ * The caller provides the initial value (either CRC8_INIT_VALUE
+ * or the previous returned value) to allow for processing of
+ * discontiguous blocks of data. When generating the CRC the
+ * caller is responsible for complementing the final return value
+ * and inserting it into the byte stream. When checking, a final
+ * return value of CRC8_GOOD_VALUE indicates a valid CRC.
+ *
+ * Reference: Dallas Semiconductor Application Note 27
+ * Williams, Ross N., "A Painless Guide to CRC Error Detection Algorithms",
+ * ver 3, Aug 1993, ross@guest.adelaide.edu.au, Rocksoft Pty Ltd.,
+ * ftp://ftp.rocksoft.com/clients/rocksoft/papers/crc_v3.txt
+ *
+ * ****************************************************************************
+ */
+
+static const uint8 crc8_table[256] = {
+ 0x00, 0xF7, 0xB9, 0x4E, 0x25, 0xD2, 0x9C, 0x6B,
+ 0x4A, 0xBD, 0xF3, 0x04, 0x6F, 0x98, 0xD6, 0x21,
+ 0x94, 0x63, 0x2D, 0xDA, 0xB1, 0x46, 0x08, 0xFF,
+ 0xDE, 0x29, 0x67, 0x90, 0xFB, 0x0C, 0x42, 0xB5,
+ 0x7F, 0x88, 0xC6, 0x31, 0x5A, 0xAD, 0xE3, 0x14,
+ 0x35, 0xC2, 0x8C, 0x7B, 0x10, 0xE7, 0xA9, 0x5E,
+ 0xEB, 0x1C, 0x52, 0xA5, 0xCE, 0x39, 0x77, 0x80,
+ 0xA1, 0x56, 0x18, 0xEF, 0x84, 0x73, 0x3D, 0xCA,
+ 0xFE, 0x09, 0x47, 0xB0, 0xDB, 0x2C, 0x62, 0x95,
+ 0xB4, 0x43, 0x0D, 0xFA, 0x91, 0x66, 0x28, 0xDF,
+ 0x6A, 0x9D, 0xD3, 0x24, 0x4F, 0xB8, 0xF6, 0x01,
+ 0x20, 0xD7, 0x99, 0x6E, 0x05, 0xF2, 0xBC, 0x4B,
+ 0x81, 0x76, 0x38, 0xCF, 0xA4, 0x53, 0x1D, 0xEA,
+ 0xCB, 0x3C, 0x72, 0x85, 0xEE, 0x19, 0x57, 0xA0,
+ 0x15, 0xE2, 0xAC, 0x5B, 0x30, 0xC7, 0x89, 0x7E,
+ 0x5F, 0xA8, 0xE6, 0x11, 0x7A, 0x8D, 0xC3, 0x34,
+ 0xAB, 0x5C, 0x12, 0xE5, 0x8E, 0x79, 0x37, 0xC0,
+ 0xE1, 0x16, 0x58, 0xAF, 0xC4, 0x33, 0x7D, 0x8A,
+ 0x3F, 0xC8, 0x86, 0x71, 0x1A, 0xED, 0xA3, 0x54,
+ 0x75, 0x82, 0xCC, 0x3B, 0x50, 0xA7, 0xE9, 0x1E,
+ 0xD4, 0x23, 0x6D, 0x9A, 0xF1, 0x06, 0x48, 0xBF,
+ 0x9E, 0x69, 0x27, 0xD0, 0xBB, 0x4C, 0x02, 0xF5,
+ 0x40, 0xB7, 0xF9, 0x0E, 0x65, 0x92, 0xDC, 0x2B,
+ 0x0A, 0xFD, 0xB3, 0x44, 0x2F, 0xD8, 0x96, 0x61,
+ 0x55, 0xA2, 0xEC, 0x1B, 0x70, 0x87, 0xC9, 0x3E,
+ 0x1F, 0xE8, 0xA6, 0x51, 0x3A, 0xCD, 0x83, 0x74,
+ 0xC1, 0x36, 0x78, 0x8F, 0xE4, 0x13, 0x5D, 0xAA,
+ 0x8B, 0x7C, 0x32, 0xC5, 0xAE, 0x59, 0x17, 0xE0,
+ 0x2A, 0xDD, 0x93, 0x64, 0x0F, 0xF8, 0xB6, 0x41,
+ 0x60, 0x97, 0xD9, 0x2E, 0x45, 0xB2, 0xFC, 0x0B,
+ 0xBE, 0x49, 0x07, 0xF0, 0x9B, 0x6C, 0x22, 0xD5,
+ 0xF4, 0x03, 0x4D, 0xBA, 0xD1, 0x26, 0x68, 0x9F
};
-uint32
-hndcrc32(
- uint8 *pdata, /* pointer to array of data to process */
- uint nbytes, /* number of input data bytes to process */
- uint32 crc /* either CRC32_INIT_VALUE or previous return value */
-)
+uint8 BCMROMFN (hndcrc8) (uint8 * pdata, /* pointer to array of data to process */
+ uint nbytes, /* number of input data bytes to process */
+ uint8 crc /* either CRC8_INIT_VALUE or previous return value */
+ )
{
- uint8 *pend;
-#ifdef __mips__
- uint8 tmp[4];
- ulong *tptr = (ulong *)tmp;
-
- /* in case the beginning of the buffer isn't aligned */
- pend = (uint8 *)((uint)(pdata + 3) & 0xfffffffc);
- nbytes -= (pend - pdata);
- while (pdata < pend)
- CRC_INNER_LOOP(32, crc, *pdata++);
-
- /* handle bulk of data as 32-bit words */
- pend = pdata + (nbytes & 0xfffffffc);
- while (pdata < pend) {
- *tptr = *(ulong *)pdata;
- pdata += sizeof(ulong *);
- CRC_INNER_LOOP(32, crc, tmp[0]);
- CRC_INNER_LOOP(32, crc, tmp[1]);
- CRC_INNER_LOOP(32, crc, tmp[2]);
- CRC_INNER_LOOP(32, crc, tmp[3]);
- }
+ /* hard code the crc loop instead of using CRC_INNER_LOOP macro
+ * to avoid the undefined and unnecessary (uint8 >> 8) operation.
+ */
+ while (nbytes-- > 0)
+ crc = crc8_table[(crc ^ *pdata++) & 0xff];
+
+ return crc;
+}
- /* 1-3 bytes at end of buffer */
- pend = pdata + (nbytes & 0x03);
- while (pdata < pend)
- CRC_INNER_LOOP(32, crc, *pdata++);
+/*******************************************************************************
+ * crc16
+ *
+ * Computes a crc16 over the input data using the polynomial:
+ *
+ * x^16 + x^12 +x^5 + 1
+ *
+ * The caller provides the initial value (either CRC16_INIT_VALUE
+ * or the previous returned value) to allow for processing of
+ * discontiguous blocks of data. When generating the CRC the
+ * caller is responsible for complementing the final return value
+ * and inserting it into the byte stream. When checking, a final
+ * return value of CRC16_GOOD_VALUE indicates a valid CRC.
+ *
+ * Reference: Dallas Semiconductor Application Note 27
+ * Williams, Ross N., "A Painless Guide to CRC Error Detection Algorithms",
+ * ver 3, Aug 1993, ross@guest.adelaide.edu.au, Rocksoft Pty Ltd.,
+ * ftp://ftp.rocksoft.com/clients/rocksoft/papers/crc_v3.txt
+ *
+ * ****************************************************************************
+ */
+static const uint16 crc16_table[256] = {
+ 0x0000, 0x1189, 0x2312, 0x329B, 0x4624, 0x57AD, 0x6536, 0x74BF,
+ 0x8C48, 0x9DC1, 0xAF5A, 0xBED3, 0xCA6C, 0xDBE5, 0xE97E, 0xF8F7,
+ 0x1081, 0x0108, 0x3393, 0x221A, 0x56A5, 0x472C, 0x75B7, 0x643E,
+ 0x9CC9, 0x8D40, 0xBFDB, 0xAE52, 0xDAED, 0xCB64, 0xF9FF, 0xE876,
+ 0x2102, 0x308B, 0x0210, 0x1399, 0x6726, 0x76AF, 0x4434, 0x55BD,
+ 0xAD4A, 0xBCC3, 0x8E58, 0x9FD1, 0xEB6E, 0xFAE7, 0xC87C, 0xD9F5,
+ 0x3183, 0x200A, 0x1291, 0x0318, 0x77A7, 0x662E, 0x54B5, 0x453C,
+ 0xBDCB, 0xAC42, 0x9ED9, 0x8F50, 0xFBEF, 0xEA66, 0xD8FD, 0xC974,
+ 0x4204, 0x538D, 0x6116, 0x709F, 0x0420, 0x15A9, 0x2732, 0x36BB,
+ 0xCE4C, 0xDFC5, 0xED5E, 0xFCD7, 0x8868, 0x99E1, 0xAB7A, 0xBAF3,
+ 0x5285, 0x430C, 0x7197, 0x601E, 0x14A1, 0x0528, 0x37B3, 0x263A,
+ 0xDECD, 0xCF44, 0xFDDF, 0xEC56, 0x98E9, 0x8960, 0xBBFB, 0xAA72,
+ 0x6306, 0x728F, 0x4014, 0x519D, 0x2522, 0x34AB, 0x0630, 0x17B9,
+ 0xEF4E, 0xFEC7, 0xCC5C, 0xDDD5, 0xA96A, 0xB8E3, 0x8A78, 0x9BF1,
+ 0x7387, 0x620E, 0x5095, 0x411C, 0x35A3, 0x242A, 0x16B1, 0x0738,
+ 0xFFCF, 0xEE46, 0xDCDD, 0xCD54, 0xB9EB, 0xA862, 0x9AF9, 0x8B70,
+ 0x8408, 0x9581, 0xA71A, 0xB693, 0xC22C, 0xD3A5, 0xE13E, 0xF0B7,
+ 0x0840, 0x19C9, 0x2B52, 0x3ADB, 0x4E64, 0x5FED, 0x6D76, 0x7CFF,
+ 0x9489, 0x8500, 0xB79B, 0xA612, 0xD2AD, 0xC324, 0xF1BF, 0xE036,
+ 0x18C1, 0x0948, 0x3BD3, 0x2A5A, 0x5EE5, 0x4F6C, 0x7DF7, 0x6C7E,
+ 0xA50A, 0xB483, 0x8618, 0x9791, 0xE32E, 0xF2A7, 0xC03C, 0xD1B5,
+ 0x2942, 0x38CB, 0x0A50, 0x1BD9, 0x6F66, 0x7EEF, 0x4C74, 0x5DFD,
+ 0xB58B, 0xA402, 0x9699, 0x8710, 0xF3AF, 0xE226, 0xD0BD, 0xC134,
+ 0x39C3, 0x284A, 0x1AD1, 0x0B58, 0x7FE7, 0x6E6E, 0x5CF5, 0x4D7C,
+ 0xC60C, 0xD785, 0xE51E, 0xF497, 0x8028, 0x91A1, 0xA33A, 0xB2B3,
+ 0x4A44, 0x5BCD, 0x6956, 0x78DF, 0x0C60, 0x1DE9, 0x2F72, 0x3EFB,
+ 0xD68D, 0xC704, 0xF59F, 0xE416, 0x90A9, 0x8120, 0xB3BB, 0xA232,
+ 0x5AC5, 0x4B4C, 0x79D7, 0x685E, 0x1CE1, 0x0D68, 0x3FF3, 0x2E7A,
+ 0xE70E, 0xF687, 0xC41C, 0xD595, 0xA12A, 0xB0A3, 0x8238, 0x93B1,
+ 0x6B46, 0x7ACF, 0x4854, 0x59DD, 0x2D62, 0x3CEB, 0x0E70, 0x1FF9,
+ 0xF78F, 0xE606, 0xD49D, 0xC514, 0xB1AB, 0xA022, 0x92B9, 0x8330,
+ 0x7BC7, 0x6A4E, 0x58D5, 0x495C, 0x3DE3, 0x2C6A, 0x1EF1, 0x0F78
+};
+
+uint16 BCMROMFN (hndcrc16) (uint8 * pdata, /* pointer to array of data to process */
+ uint nbytes, /* number of input data bytes to process */
+ uint16 crc /* either CRC16_INIT_VALUE or previous return value */
+ )
+{
+ while (nbytes-- > 0)
+ CRC_INNER_LOOP (16, crc, *pdata++);
+ return crc;
+}
+#endif
+
+static const uint32 crc32_table[256] = {
+ 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA,
+ 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,
+ 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,
+ 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,
+ 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,
+ 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,
+ 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC,
+ 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,
+ 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,
+ 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
+ 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940,
+ 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,
+ 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116,
+ 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,
+ 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,
+ 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,
+ 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A,
+ 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
+ 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818,
+ 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
+ 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,
+ 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,
+ 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C,
+ 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,
+ 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,
+ 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,
+ 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,
+ 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,
+ 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086,
+ 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
+ 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4,
+ 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,
+ 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,
+ 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,
+ 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,
+ 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,
+ 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE,
+ 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,
+ 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,
+ 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,
+ 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252,
+ 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
+ 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60,
+ 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,
+ 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,
+ 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,
+ 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04,
+ 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,
+ 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A,
+ 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,
+ 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,
+ 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,
+ 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E,
+ 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,
+ 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,
+ 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,
+ 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,
+ 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,
+ 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0,
+ 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
+ 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6,
+ 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,
+ 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,
+ 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D
+};
+
+uint32 BCMROMFN (hndcrc32) (uint8 * pdata, /* pointer to array of data to process */
+ uint nbytes, /* number of input data bytes to process */
+ uint32 crc /* either CRC32_INIT_VALUE or previous return value */
+ )
+{
+ uint8 *pend;
+#ifdef __mips__
+ uint8 tmp[4];
+ ulong *tptr = (ulong *) tmp;
+
+ /* in case the beginning of the buffer isn't aligned */
+ pend = (uint8 *) ((uint) (pdata + 3) & 0xfffffffc);
+ nbytes -= (pend - pdata);
+ while (pdata < pend)
+ CRC_INNER_LOOP (32, crc, *pdata++);
+
+ /* handle bulk of data as 32-bit words */
+ pend = pdata + (nbytes & 0xfffffffc);
+ while (pdata < pend)
+ {
+ *tptr = *(ulong *) pdata;
+ pdata += sizeof (ulong *);
+ CRC_INNER_LOOP (32, crc, tmp[0]);
+ CRC_INNER_LOOP (32, crc, tmp[1]);
+ CRC_INNER_LOOP (32, crc, tmp[2]);
+ CRC_INNER_LOOP (32, crc, tmp[3]);
+ }
+
+ /* 1-3 bytes at end of buffer */
+ pend = pdata + (nbytes & 0x03);
+ while (pdata < pend)
+ CRC_INNER_LOOP (32, crc, *pdata++);
#else
- pend = pdata + nbytes;
- while (pdata < pend)
- CRC_INNER_LOOP(32, crc, *pdata++);
+ pend = pdata + nbytes;
+ while (pdata < pend)
+ CRC_INNER_LOOP (32, crc, *pdata++);
#endif /* __mips__ */
- return crc;
+ return crc;
}
+#ifdef notdef
+#define CLEN 1499 /* CRC Length */
+#define CBUFSIZ (CLEN+4)
+#define CNBUFS 5 /* # of bufs */
+
+void
+testcrc32 (void)
+{
+ uint j, k, l;
+ uint8 *buf;
+ uint len[CNBUFS];
+ uint32 crcr;
+ uint32 crc32tv[CNBUFS] =
+ { 0xd2cb1faa, 0xd385c8fa, 0xf5b4f3f3, 0x55789e20, 0x00343110 };
+
+ ASSERT ((buf = MALLOC (CBUFSIZ * CNBUFS)) != NULL);
+
+ /* step through all possible alignments */
+ for (l = 0; l <= 4; l++)
+ {
+ for (j = 0; j < CNBUFS; j++)
+ {
+ len[j] = CLEN;
+ for (k = 0; k < len[j]; k++)
+ *(buf + j * CBUFSIZ + (k + l)) = (j + k) & 0xff;
+ }
+
+ for (j = 0; j < CNBUFS; j++)
+ {
+ crcr = crc32 (buf + j * CBUFSIZ + l, len[j], CRC32_INIT_VALUE);
+ ASSERT (crcr == crc32tv[j]);
+ }
+ }
+
+ MFREE (buf, CBUFSIZ * CNBUFS);
+ return;
+}
+#endif /* notdef */
/*
* Advance from the current 1-byte tag/1-byte length/variable-length value
* If the current or next TLV is invalid (does not fit in given buffer length),
* NULL is returned.
* *buflen is not modified if the TLV elt parameter is invalid, or is decremented
- * by the TLV paramter's length if it is valid.
+ * by the TLV parameter's length if it is valid.
*/
-bcm_tlv_t *
-bcm_next_tlv(bcm_tlv_t *elt, int *buflen)
+bcm_tlv_t *BCMROMFN (bcm_next_tlv) (bcm_tlv_t * elt, int *buflen)
{
- int len;
+ int len;
- /* validate current elt */
- if (!bcm_valid_tlv(elt, *buflen))
- return NULL;
+ /* validate current elt */
+ if (!bcm_valid_tlv (elt, *buflen))
+ return NULL;
- /* advance to next elt */
- len = elt->len;
- elt = (bcm_tlv_t*)(elt->data + len);
- *buflen -= (2 + len);
+ /* advance to next elt */
+ len = elt->len;
+ elt = (bcm_tlv_t *) (elt->data + len);
+ *buflen -= (2 + len);
- /* validate next elt */
- if (!bcm_valid_tlv(elt, *buflen))
- return NULL;
+ /* validate next elt */
+ if (!bcm_valid_tlv (elt, *buflen))
+ return NULL;
- return elt;
+ return elt;
}
/*
* triples, returning a pointer to the substring whose first element
* matches tag
*/
-bcm_tlv_t *
-bcm_parse_tlvs(void *buf, int buflen, uint key)
+bcm_tlv_t *BCMROMFN (bcm_parse_tlvs) (void *buf, int buflen, uint key)
{
- bcm_tlv_t *elt;
- int totlen;
+ bcm_tlv_t *elt;
+ int totlen;
- elt = (bcm_tlv_t*)buf;
- totlen = buflen;
+ elt = (bcm_tlv_t *) buf;
+ totlen = buflen;
- /* find tagged parameter */
- while (totlen >= 2) {
- int len = elt->len;
+ /* find tagged parameter */
+ while (totlen >= 2)
+ {
+ int len = elt->len;
- /* validate remaining totlen */
- if ((elt->id == key) && (totlen >= (len + 2)))
- return (elt);
+ /* validate remaining totlen */
+ if ((elt->id == key) && (totlen >= (len + 2)))
+ return (elt);
- elt = (bcm_tlv_t*)((uint8*)elt + (len + 2));
- totlen -= (len + 2);
- }
+ elt = (bcm_tlv_t *) ((uint8 *) elt + (len + 2));
+ totlen -= (len + 2);
+ }
- return NULL;
+ return NULL;
}
+#if 0
/*
* Traverse a string of 1-byte tag/1-byte length/variable-length value
* triples, returning a pointer to the substring whose first element
* matches tag. Stop parsing when we see an element whose ID is greater
* than the target key.
*/
-bcm_tlv_t *
-bcm_parse_ordered_tlvs(void *buf, int buflen, uint key)
+bcm_tlv_t *BCMROMFN (bcm_parse_ordered_tlvs) (void *buf, int buflen, uint key)
{
- bcm_tlv_t *elt;
- int totlen;
+ bcm_tlv_t *elt;
+ int totlen;
+
+ elt = (bcm_tlv_t *) buf;
+ totlen = buflen;
+
+ /* find tagged parameter */
+ while (totlen >= 2)
+ {
+ uint id = elt->id;
+ int len = elt->len;
+
+ /* Punt if we start seeing IDs > than target key */
+ if (id > key)
+ return (NULL);
+
+ /* validate remaining totlen */
+ if ((id == key) && (totlen >= (len + 2)))
+ return (elt);
+
+ elt = (bcm_tlv_t *) ((uint8 *) elt + (len + 2));
+ totlen -= (len + 2);
+ }
+ return NULL;
+}
- elt = (bcm_tlv_t*)buf;
- totlen = buflen;
+#ifdef BCMDBG
+int
+bcm_format_flags (const bcm_bit_desc_t * bd, uint32 flags, char *buf, int len)
+{
+ int i;
+ char *p = buf;
+ char hexstr[16];
+ int slen = 0;
+ uint32 bit;
+ const char *name;
+
+ if (len < 2 || !buf)
+ return 0;
+
+ buf[0] = '\0';
+ len -= 1;
+
+ for (i = 0; flags != 0; i++)
+ {
+ bit = bd[i].bit;
+ name = bd[i].name;
+ if (bit == 0 && flags)
+ {
+ /* print any unnamed bits */
+ sprintf (hexstr, "0x%X", flags);
+ name = hexstr;
+ flags = 0; /* exit loop */
+ }
+ else if ((flags & bit) == 0)
+ continue;
+ slen += strlen (name);
+ if (len < slen)
+ break;
+ if (p != buf)
+ p += sprintf (p, " "); /* btwn flag space */
+ strcat (p, name);
+ p += strlen (name);
+ flags &= ~bit;
+ len -= slen;
+ slen = 1; /* account for btwn flag space */
+ }
+
+ /* indicate the str was too short */
+ if (flags != 0)
+ {
+ if (len == 0)
+ p--; /* overwrite last char */
+ p += sprintf (p, ">");
+ }
+
+ return (int) (p - buf);
+}
- /* find tagged parameter */
- while (totlen >= 2) {
- uint id = elt->id;
- int len = elt->len;
+void
+deadbeef (void *p, uint len)
+{
+ static uint8 meat[] = { 0xde, 0xad, 0xbe, 0xef };
- /* Punt if we start seeing IDs > than target key */
- if (id > key)
- return (NULL);
+ while (len-- > 0)
+ {
+ *(uint8 *) p = meat[((uintptr) p) & 3];
+ p = (uint8 *) p + 1;
+ }
+}
- /* validate remaining totlen */
- if ((id == key) && (totlen >= (len + 2)))
- return (elt);
+/* pretty hex print a contiguous buffer */
+void
+prhex (const char *msg, uchar * buf, uint nbytes)
+{
+ char line[128], *p;
+ uint i;
- elt = (bcm_tlv_t*)((uint8*)elt + (len + 2));
- totlen -= (len + 2);
+ if (msg && (msg[0] != '\0'))
+ printf ("%s:\n", msg);
+
+ p = line;
+ for (i = 0; i < nbytes; i++)
+ {
+ if (i % 16 == 0)
+ {
+ p += sprintf (p, " %04d: ", i); /* line prefix */
}
- return NULL;
+ p += sprintf (p, "%02x ", buf[i]);
+ if (i % 16 == 15)
+ {
+ printf ("%s\n", line); /* flush line */
+ p = line;
+ }
+ }
+
+ /* flush last partial line */
+ if (p != line)
+ printf ("%s\n", line);
+}
+
+/* print bytes formatted as hex to a string. return the resulting string length */
+int
+bcm_format_hex (char *str, const void *bytes, int len)
+{
+ int i;
+ char *p = str;
+ const uint8 *src = (const uint8 *) bytes;
+
+ for (i = 0; i < len; i++)
+ {
+ p += sprintf (p, "%02X", *src);
+ src++;
+ }
+ return (int) (p - str);
}
+#endif /* BCMDBG */
-/* Initialization of bcmstrbuf structure */
+/* Produce a human-readable string for boardrev */
+char *
+bcm_brev_str (uint16 brev, char *buf)
+{
+ if (brev < 0x100)
+ snprintf (buf, 8, "%d.%d", (brev & 0xf0) >> 4, brev & 0xf);
+ else
+ snprintf (buf, 8, "%c%03x", ((brev & 0xf000) == 0x1000) ? 'P' : 'A',
+ brev & 0xfff);
+
+ return (buf);
+}
+
+#define BUFSIZE_TODUMP_ATONCE 512 /* Buffer size */
+
+/* dump large strings to console */
void
-bcm_binit(struct bcmstrbuf *b, char *buf, uint size)
+printfbig (char *buf)
{
- b->origsize = b->size = size;
- b->origbuf = b->buf = buf;
+ uint len, max_len;
+ char c;
+
+ len = strlen (buf);
+
+ max_len = BUFSIZE_TODUMP_ATONCE;
+
+ while (len > max_len)
+ {
+ c = buf[max_len];
+ buf[max_len] = '\0';
+ printf ("%s", buf);
+ buf[max_len] = c;
+
+ buf += max_len;
+ len -= max_len;
+ }
+ /* print the remaining string */
+ printf ("%s\n", buf);
+ return;
}
-/* Buffer sprintf wrapper to guard against buffer overflow */
-int
-bcm_bprintf(struct bcmstrbuf *b, const char *fmt, ...)
+/* routine to dump fields in a fileddesc structure */
+uint
+bcmdumpfields (readreg_rtn read_rtn, void *arg0, void *arg1,
+ struct fielddesc * fielddesc_array, char *buf, uint32 bufsize)
+{
+ uint filled_len;
+ int len;
+ struct fielddesc *cur_ptr;
+
+ filled_len = 0;
+ cur_ptr = fielddesc_array;
+
+ while (bufsize > 1)
+ {
+ if (cur_ptr->nameandfmt == NULL)
+ break;
+ len = snprintf (buf, bufsize, cur_ptr->nameandfmt,
+ read_rtn (arg0, arg1, cur_ptr->offset));
+ /* check for snprintf overflow or error */
+ if (len < 0 || (uint32) len >= bufsize)
+ len = bufsize - 1;
+ buf += len;
+ bufsize -= len;
+ filled_len += len;
+ cur_ptr++;
+ }
+ return filled_len;
+}
+#endif
+
+uint
+bcm_mkiovar (char *name, char *data, uint datalen, char *buf, uint buflen)
{
- va_list ap;
- int r;
+ uint len;
- va_start(ap, fmt);
- r = vsnprintf(b->buf, b->size, fmt, ap);
+ len = strlen (name) + 1;
- /* Non Ansi C99 compliant returns -1,
- * Ansi compliant return r >= b->size,
- * bcmstdlib returns 0, handle all
- */
- if ((r == -1) || (r >= (int)b->size) || (r == 0))
- {
- b->size = 0;
- }
- else
+ if ((len + datalen) > buflen)
+ return 0;
+
+ strncpy (buf, name, buflen);
+
+ /* append data onto the end of the name string */
+ memcpy (&buf[len], data, datalen);
+ len += datalen;
+
+ return len;
+}
+
+/* Quarter dBm units to mW
+ * Table starts at QDBM_OFFSET, so the first entry is mW for qdBm=153
+ * Table is offset so the last entry is largest mW value that fits in
+ * a uint16.
+ */
+
+#define QDBM_OFFSET 153 /* Offset for first entry */
+#define QDBM_TABLE_LEN 40 /* Table size */
+
+/* Smallest mW value that will round up to the first table entry, QDBM_OFFSET.
+ * Value is ( mW(QDBM_OFFSET - 1) + mW(QDBM_OFFSET) ) / 2
+ */
+#define QDBM_TABLE_LOW_BOUND 6493 /* Low bound */
+
+/* Largest mW value that will round down to the last table entry,
+ * QDBM_OFFSET + QDBM_TABLE_LEN-1.
+ * Value is ( mW(QDBM_OFFSET + QDBM_TABLE_LEN - 1) + mW(QDBM_OFFSET + QDBM_TABLE_LEN) ) / 2.
+ */
+#define QDBM_TABLE_HIGH_BOUND 64938 /* High bound */
+
+static const uint16 nqdBm_to_mW_map[QDBM_TABLE_LEN] = {
+/* qdBm: +0 +1 +2 +3 +4 +5 +6 +7 */
+/* 153: */ 6683, 7079, 7499, 7943, 8414, 8913, 9441, 10000,
+/* 161: */ 10593, 11220, 11885, 12589, 13335, 14125, 14962, 15849,
+/* 169: */ 16788, 17783, 18836, 19953, 21135, 22387, 23714, 25119,
+/* 177: */ 26607, 28184, 29854, 31623, 33497, 35481, 37584, 39811,
+/* 185: */ 42170, 44668, 47315, 50119, 53088, 56234, 59566, 63096
+};
+
+uint16 BCMROMFN (bcm_qdbm_to_mw) (uint8 qdbm)
+{
+ uint factor = 1;
+ int idx = qdbm - QDBM_OFFSET;
+
+ if (idx > QDBM_TABLE_LEN)
+ {
+ /* clamp to max uint16 mW value */
+ return 0xFFFF;
+ }
+
+ /* scale the qdBm index up to the range of the table 0-40
+ * where an offset of 40 qdBm equals a factor of 10 mW.
+ */
+ while (idx < 0)
+ {
+ idx += 40;
+ factor *= 10;
+ }
+
+ /* return the mW value scaled down to the correct factor of 10,
+ * adding in factor/2 to get proper rounding.
+ */
+ return ((nqdBm_to_mW_map[idx] + factor / 2) / factor);
+}
+
+uint8 BCMROMFN (bcm_mw_to_qdbm) (uint16 mw)
+{
+ uint8 qdbm;
+ int offset;
+ uint mw_uint = mw;
+ uint boundary;
+
+ /* handle boundary case */
+ if (mw_uint <= 1)
+ return 0;
+
+ offset = QDBM_OFFSET;
+
+ /* move mw into the range of the table */
+ while (mw_uint < QDBM_TABLE_LOW_BOUND)
+ {
+ mw_uint *= 10;
+ offset -= 40;
+ }
+
+ for (qdbm = 0; qdbm < QDBM_TABLE_LEN - 1; qdbm++)
+ {
+ boundary = nqdBm_to_mW_map[qdbm] + (nqdBm_to_mW_map[qdbm + 1] -
+ nqdBm_to_mW_map[qdbm]) / 2;
+ if (mw_uint < boundary)
+ break;
+ }
+
+ qdbm += (uint8) offset;
+
+ return (qdbm);
+}
+
+
+uint BCMROMFN (bcm_bitcount) (uint8 * bitmap, uint length)
+{
+ uint bitcount = 0, i;
+ uint8 tmp;
+ for (i = 0; i < length; i++)
+ {
+ tmp = bitmap[i];
+ while (tmp)
{
- b->size -= r;
- b->buf += r;
+ bitcount++;
+ tmp &= (tmp - 1);
}
+ }
+ return bitcount;
+}
- va_end(ap);
- return r;
+/* Initialization of bcmstrbuf structure */
+void
+bcm_binit (struct bcmstrbuf *b, char *buf, uint size)
+{
+ b->origsize = b->size = size;
+ b->origbuf = b->buf = buf;
}
-uint
-bcm_bitcount(uint8 *bitmap, uint length)
-{
- uint bitcount = 0, i;
- uint8 tmp;
- for (i = 0; i < length; i++) {
- tmp = bitmap[i];
- while (tmp) {
- bitcount++;
- tmp &= (tmp - 1);
- }
- }
- return bitcount;
+/* Buffer sprintf wrapper to guard against buffer overflow */
+int
+bcm_bprintf (struct bcmstrbuf *b, const char *fmt, ...)
+{
+ va_list ap;
+ int r;
+
+ va_start (ap, fmt);
+ r = vsnprintf (b->buf, b->size, fmt, ap);
+
+ /* Non Ansi C99 compliant returns -1,
+ * Ansi compliant return r >= b->size,
+ * bcmstdlib returns 0, handle all
+ */
+ if ((r == -1) || (r >= (int) b->size) || (r == 0))
+ {
+ b->size = 0;
+ }
+ else
+ {
+ b->size -= r;
+ b->buf += r;
+ }
+
+ va_end (ap);
+
+ return r;
+}
+
+char *
+bcm_ether_ntoa (struct ether_addr *ea, char *buf)
+{
+ snprintf (buf, 18, "%02x:%02x:%02x:%02x:%02x:%02x",
+ ea->octet[0] & 0xff, ea->octet[1] & 0xff, ea->octet[2] & 0xff,
+ ea->octet[3] & 0xff, ea->octet[4] & 0xff, ea->octet[5] & 0xff);
+ return (buf);
}
--- /dev/null
+/*
+ * Misc useful os-independent macros and functions.
+ *
+ * Copyright 2007, Broadcom Corporation
+ * All Rights Reserved.
+ *
+ * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
+ * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
+ * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
+ * $Id$
+ */
+
+#ifndef _bcmutils_h_
+#define _bcmutils_h_
+#include "linux_osl.h"
+
+/* ctype replacement */
+#define _BCM_U 0x01 /* upper */
+#define _BCM_L 0x02 /* lower */
+#define _BCM_D 0x04 /* digit */
+#define _BCM_C 0x08 /* cntrl */
+#define _BCM_P 0x10 /* punct */
+#define _BCM_S 0x20 /* white space (space/lf/tab) */
+#define _BCM_X 0x40 /* hex digit */
+#define _BCM_SP 0x80 /* hard space (0x20) */
+
+extern const unsigned char bcm_ctype[];
+#define bcm_ismask(x) (bcm_ctype[(int)(unsigned char)(x)])
+
+#define bcm_isalnum(c) ((bcm_ismask(c)&(_BCM_U|_BCM_L|_BCM_D)) != 0)
+#define bcm_isalpha(c) ((bcm_ismask(c)&(_BCM_U|_BCM_L)) != 0)
+#define bcm_iscntrl(c) ((bcm_ismask(c)&(_BCM_C)) != 0)
+#define bcm_isdigit(c) ((bcm_ismask(c)&(_BCM_D)) != 0)
+#define bcm_isgraph(c) ((bcm_ismask(c)&(_BCM_P|_BCM_U|_BCM_L|_BCM_D)) != 0)
+#define bcm_islower(c) ((bcm_ismask(c)&(_BCM_L)) != 0)
+#define bcm_isprint(c) ((bcm_ismask(c)&(_BCM_P|_BCM_U|_BCM_L|_BCM_D|_BCM_SP)) != 0)
+#define bcm_ispunct(c) ((bcm_ismask(c)&(_BCM_P)) != 0)
+#define bcm_isspace(c) ((bcm_ismask(c)&(_BCM_S)) != 0)
+#define bcm_isupper(c) ((bcm_ismask(c)&(_BCM_U)) != 0)
+#define bcm_isxdigit(c) ((bcm_ismask(c)&(_BCM_D|_BCM_X)) != 0)
+#define bcm_tolower(c) (bcm_isupper((c)) ? ((c) + 'a' - 'A') : (c))
+#define bcm_toupper(c) (bcm_islower((c)) ? ((c) + 'A' - 'a') : (c))
+
+/* Buffer structure for collecting string-formatted data
+* using bcm_bprintf() API.
+* Use bcm_binit() to initialize before use
+*/
+
+struct bcmstrbuf {
+ char *buf; /* pointer to current position in origbuf */
+ unsigned int size; /* current (residual) size in bytes */
+ char *origbuf; /* unmodified pointer to orignal buffer */
+ unsigned int origsize; /* unmodified orignal buffer size in bytes */
+};
+
+/* ** driver-only section ** */
+#include <osl.h>
+
+#define GPIO_PIN_NOTDEFINED 0x20 /* Pin not defined */
+
+
+/* osl multi-precedence packet queue */
+#ifndef PKTQ_LEN_DEFAULT
+#define PKTQ_LEN_DEFAULT 128 /* Max 128 packets */
+#endif
+#ifndef PKTQ_MAX_PREC
+#define PKTQ_MAX_PREC 16 /* Maximum precedence levels */
+#endif
+
+typedef struct pktq_prec {
+ void *head; /* first packet to dequeue */
+ void *tail; /* last packet to dequeue */
+ uint16 len; /* number of queued packets */
+ uint16 max; /* maximum number of queued packets */
+} pktq_prec_t;
+
+
+/* multi-priority pkt queue */
+struct pktq {
+ uint16 num_prec; /* number of precedences in use */
+ uint16 hi_prec; /* rapid dequeue hint (>= highest non-empty prec) */
+ uint16 max; /* total max packets */
+ uint16 len; /* total number of packets */
+ /* q array must be last since # of elements can be either PKTQ_MAX_PREC or 1 */
+ struct pktq_prec q[PKTQ_MAX_PREC];
+};
+
+/* simple, non-priority pkt queue */
+struct spktq {
+ uint16 num_prec; /* number of precedences in use (always 1) */
+ uint16 hi_prec; /* rapid dequeue hint (>= highest non-empty prec) */
+ uint16 max; /* total max packets */
+ uint16 len; /* total number of packets */
+ /* q array must be last since # of elements can be either PKTQ_MAX_PREC or 1 */
+ struct pktq_prec q[1];
+};
+
+#define PKTQ_PREC_ITER(pq, prec) for (prec = (pq)->num_prec - 1; prec >= 0; prec--)
+
+/* forward definition of ether_addr structure used by some function prototypes */
+struct ether_addr;
+
+/* operations on a specific precedence in packet queue */
+
+#define pktq_psetmax(pq, prec, _max) ((pq)->q[prec].max = (_max))
+#define pktq_plen(pq, prec) ((pq)->q[prec].len)
+#define pktq_pavail(pq, prec) ((pq)->q[prec].max - (pq)->q[prec].len)
+#define pktq_pfull(pq, prec) ((pq)->q[prec].len >= (pq)->q[prec].max)
+#define pktq_pempty(pq, prec) ((pq)->q[prec].len == 0)
+
+#define pktq_ppeek(pq, prec) ((pq)->q[prec].head)
+#define pktq_ppeek_tail(pq, prec) ((pq)->q[prec].tail)
+
+extern void *pktq_penq(struct pktq *pq, int prec, void *p);
+extern void *pktq_penq_head(struct pktq *pq, int prec, void *p);
+extern void *pktq_pdeq(struct pktq *pq, int prec);
+extern void *pktq_pdeq_tail(struct pktq *pq, int prec);
+/* Empty the queue at particular precedence level */
+extern void pktq_pflush(osl_t *osh, struct pktq *pq, int prec, bool dir);
+/* Remove a specified packet from its queue */
+extern bool pktq_pdel(struct pktq *pq, void *p, int prec);
+
+/* operations on a set of precedences in packet queue */
+
+extern int pktq_mlen(struct pktq *pq, uint prec_bmp);
+extern void *pktq_mdeq(struct pktq *pq, uint prec_bmp, int *prec_out);
+
+/* operations on packet queue as a whole */
+
+#define pktq_len(pq) ((int)(pq)->len)
+#define pktq_max(pq) ((int)(pq)->max)
+#define pktq_avail(pq) ((int)((pq)->max - (pq)->len))
+#define pktq_full(pq) ((pq)->len >= (pq)->max)
+#define pktq_empty(pq) ((pq)->len == 0)
+
+/* operations for single precedence queues */
+#define pktenq(pq, p) pktq_penq(((struct pktq *)pq), 0, (p))
+#define pktenq_head(pq, p) pktq_penq_head(((struct pktq *)pq), 0, (p))
+#define pktdeq(pq) pktq_pdeq(((struct pktq *)pq), 0)
+#define pktdeq_tail(pq) pktq_pdeq_tail(((struct pktq *)pq), 0)
+#define pktqinit(pq, len) pktq_init(((struct pktq *)pq), 1, len)
+
+extern void pktq_init(struct pktq *pq, int num_prec, int max_len);
+/* prec_out may be NULL if caller is not interested in return value */
+extern void *pktq_deq(struct pktq *pq, int *prec_out);
+extern void *pktq_deq_tail(struct pktq *pq, int *prec_out);
+extern void *pktq_peek(struct pktq *pq, int *prec_out);
+extern void *pktq_peek_tail(struct pktq *pq, int *prec_out);
+extern void pktq_flush(osl_t *osh, struct pktq *pq, bool dir); /* Empty the entire queue */
+extern int pktq_setmax(struct pktq *pq, int max_len);
+
+/* externs */
+/* packet */
+extern uint pktcopy(osl_t *osh, void *p, uint offset, int len, uchar *buf);
+extern uint pkttotlen(osl_t *osh, void *p);
+extern void *pktlast(osl_t *osh, void *p);
+
+/* Get priority from a packet and pass it back in scb (or equiv) */
+extern uint pktsetprio(void *pkt, bool update_vtag);
+#define PKTPRIO_VDSCP 0x100 /* DSCP prio found after VLAN tag */
+#define PKTPRIO_VLAN 0x200 /* VLAN prio found */
+#define PKTPRIO_UPD 0x400 /* DSCP used to update VLAN prio */
+#define PKTPRIO_DSCP 0x800 /* DSCP prio found */
+
+/* string */
+extern int BCMROMFN(bcm_atoi)(char *s);
+extern ulong BCMROMFN(bcm_strtoul)(char *cp, char **endp, uint base);
+extern char *BCMROMFN(bcmstrstr)(char *haystack, char *needle);
+extern char *BCMROMFN(bcmstrcat)(char *dest, const char *src);
+extern char *BCMROMFN(bcmstrncat)(char *dest, const char *src, uint size);
+extern ulong wchar2ascii(char *abuf, ushort *wbuf, ushort wbuflen, ulong abuflen);
+/* ethernet address */
+extern char *bcm_ether_ntoa(struct ether_addr *ea, char *buf);
+extern int BCMROMFN(bcm_ether_atoe)(char *p, struct ether_addr *ea);
+
+/* ip address */
+struct ipv4_addr;
+extern char *bcm_ip_ntoa(struct ipv4_addr *ia, char *buf);
+
+/* delay */
+extern void bcm_mdelay(uint ms);
+/* variable access */
+extern char *getvar(char *vars, const char *name);
+extern int getintvar(char *vars, const char *name);
+extern uint getgpiopin(char *vars, char *pin_name, uint def_pin);
+#ifdef BCMDBG
+extern void prpkt(const char *msg, osl_t *osh, void *p0);
+#endif /* BCMDBG */
+#ifdef BCMPERFSTATS
+extern void bcm_perf_enable(void);
+extern void bcmstats(char *fmt);
+extern void bcmlog(char *fmt, uint a1, uint a2);
+extern void bcmdumplog(char *buf, int size);
+extern int bcmdumplogent(char *buf, uint idx);
+#else
+#define bcm_perf_enable()
+#define bcmstats(fmt)
+#define bcmlog(fmt, a1, a2)
+#define bcmdumplog(buf, size) *buf = '\0'
+#define bcmdumplogent(buf, idx) -1
+#endif /* BCMPERFSTATS */
+extern char *bcm_nvram_vars(uint *length);
+extern int bcm_nvram_cache(void *sbh);
+
+/* Support for sharing code across in-driver iovar implementations.
+ * The intent is that a driver use this structure to map iovar names
+ * to its (private) iovar identifiers, and the lookup function to
+ * find the entry. Macros are provided to map ids and get/set actions
+ * into a single number space for a switch statement.
+ */
+
+/* iovar structure */
+typedef struct bcm_iovar {
+ const char *name; /* name for lookup and display */
+ uint16 varid; /* id for switch */
+ uint16 flags; /* driver-specific flag bits */
+ uint16 type; /* base type of argument */
+ uint16 minlen; /* min length for buffer vars */
+} bcm_iovar_t;
+
+/* varid definitions are per-driver, may use these get/set bits */
+
+/* IOVar action bits for id mapping */
+#define IOV_GET 0 /* Get an iovar */
+#define IOV_SET 1 /* Set an iovar */
+
+/* Varid to actionid mapping */
+#define IOV_GVAL(id) ((id)*2)
+#define IOV_SVAL(id) (((id)*2)+IOV_SET)
+#define IOV_ISSET(actionid) ((actionid & IOV_SET) == IOV_SET)
+
+/* flags are per-driver based on driver attributes */
+
+extern const bcm_iovar_t *bcm_iovar_lookup(const bcm_iovar_t *table, const char *name);
+extern int bcm_iovar_lencheck(const bcm_iovar_t *table, void *arg, int len, bool set);
+
+/* Base type definitions */
+#define IOVT_VOID 0 /* no value (implictly set only) */
+#define IOVT_BOOL 1 /* any value ok (zero/nonzero) */
+#define IOVT_INT8 2 /* integer values are range-checked */
+#define IOVT_UINT8 3 /* unsigned int 8 bits */
+#define IOVT_INT16 4 /* int 16 bits */
+#define IOVT_UINT16 5 /* unsigned int 16 bits */
+#define IOVT_INT32 6 /* int 32 bits */
+#define IOVT_UINT32 7 /* unsigned int 32 bits */
+#define IOVT_BUFFER 8 /* buffer is size-checked as per minlen */
+#define BCM_IOVT_VALID(type) (((unsigned int)(type)) <= IOVT_BUFFER)
+
+/* Initializer for IOV type strings */
+#define BCM_IOV_TYPE_INIT { \
+ "void", \
+ "bool", \
+ "int8", \
+ "uint8", \
+ "int16", \
+ "uint16", \
+ "int32", \
+ "uint32", \
+ "buffer", \
+ "" }
+
+#define BCM_IOVT_IS_INT(type) (\
+ (type == IOVT_BOOL) || \
+ (type == IOVT_INT8) || \
+ (type == IOVT_UINT8) || \
+ (type == IOVT_INT16) || \
+ (type == IOVT_UINT16) || \
+ (type == IOVT_INT32) || \
+ (type == IOVT_UINT32))
+
+/* ** driver/apps-shared section ** */
+
+#define BCME_STRLEN 64 /* Max string length for BCM errors */
+#define VALID_BCMERROR(e) ((e <= 0) && (e >= BCME_LAST))
+
+
+/*
+ * error codes could be added but the defined ones shouldn't be changed/deleted
+ * these error codes are exposed to the user code
+ * when ever a new error code is added to this list
+ * please update errorstring table with the related error string and
+ * update osl files with os specific errorcode map
+*/
+
+#define BCME_OK 0 /* Success */
+#define BCME_ERROR -1 /* Error generic */
+#define BCME_BADARG -2 /* Bad Argument */
+#define BCME_BADOPTION -3 /* Bad option */
+#define BCME_NOTUP -4 /* Not up */
+#define BCME_NOTDOWN -5 /* Not down */
+#define BCME_NOTAP -6 /* Not AP */
+#define BCME_NOTSTA -7 /* Not STA */
+#define BCME_BADKEYIDX -8 /* BAD Key Index */
+#define BCME_RADIOOFF -9 /* Radio Off */
+#define BCME_NOTBANDLOCKED -10 /* Not band locked */
+#define BCME_NOCLK -11 /* No Clock */
+#define BCME_BADRATESET -12 /* BAD Rate valueset */
+#define BCME_BADBAND -13 /* BAD Band */
+#define BCME_BUFTOOSHORT -14 /* Buffer too short */
+#define BCME_BUFTOOLONG -15 /* Buffer too long */
+#define BCME_BUSY -16 /* Busy */
+#define BCME_NOTASSOCIATED -17 /* Not Associated */
+#define BCME_BADSSIDLEN -18 /* Bad SSID len */
+#define BCME_OUTOFRANGECHAN -19 /* Out of Range Channel */
+#define BCME_BADCHAN -20 /* Bad Channel */
+#define BCME_BADADDR -21 /* Bad Address */
+#define BCME_NORESOURCE -22 /* Not Enough Resources */
+#define BCME_UNSUPPORTED -23 /* Unsupported */
+#define BCME_BADLEN -24 /* Bad length */
+#define BCME_NOTREADY -25 /* Not Ready */
+#define BCME_EPERM -26 /* Not Permitted */
+#define BCME_NOMEM -27 /* No Memory */
+#define BCME_ASSOCIATED -28 /* Associated */
+#define BCME_RANGE -29 /* Not In Range */
+#define BCME_NOTFOUND -30 /* Not Found */
+#define BCME_WME_NOT_ENABLED -31 /* WME Not Enabled */
+#define BCME_TSPEC_NOTFOUND -32 /* TSPEC Not Found */
+#define BCME_ACM_NOTSUPPORTED -33 /* ACM Not Supported */
+#define BCME_NOT_WME_ASSOCIATION -34 /* Not WME Association */
+#define BCME_SDIO_ERROR -35 /* SDIO Bus Error */
+#define BCME_DONGLE_DOWN -36 /* Dongle Not Accessible */
+#define BCME_VERSION -37 /* Incorrect version */
+#define BCME_LAST BCME_VERSION
+
+/* These are collection of BCME Error strings */
+#define BCMERRSTRINGTABLE { \
+ "OK", \
+ "Undefined error", \
+ "Bad Argument", \
+ "Bad Option", \
+ "Not up", \
+ "Not down", \
+ "Not AP", \
+ "Not STA", \
+ "Bad Key Index", \
+ "Radio Off", \
+ "Not band locked", \
+ "No clock", \
+ "Bad Rate valueset", \
+ "Bad Band", \
+ "Buffer too short", \
+ "Buffer too long", \
+ "Busy", \
+ "Not Associated", \
+ "Bad SSID len", \
+ "Out of Range Channel", \
+ "Bad Channel", \
+ "Bad Address", \
+ "Not Enough Resources", \
+ "Unsupported", \
+ "Bad length", \
+ "Not Ready", \
+ "Not Permitted", \
+ "No Memory", \
+ "Associated", \
+ "Not In Range", \
+ "Not Found", \
+ "WME Not Enabled", \
+ "TSPEC Not Found", \
+ "ACM Not Supported", \
+ "Not WME Association", \
+ "SDIO Bus Error", \
+ "Dongle Not Accessible", \
+ "Incorrect version" \
+}
+
+#ifndef ABS
+#define ABS(a) (((a) < 0)?-(a):(a))
+#endif /* ABS */
+
+#ifndef MIN
+#define MIN(a, b) (((a) < (b))?(a):(b))
+#endif /* MIN */
+
+#ifndef MAX
+#define MAX(a, b) (((a) > (b))?(a):(b))
+#endif /* MAX */
+
+#define CEIL(x, y) (((x) + ((y)-1)) / (y))
+#define ROUNDUP(x, y) ((((x)+((y)-1))/(y))*(y))
+#define ISALIGNED(a, x) (((a) & ((x)-1)) == 0)
+#define ISPOWEROF2(x) ((((x)-1)&(x)) == 0)
+#define VALID_MASK(mask) !((mask) & ((mask) + 1))
+#ifndef OFFSETOF
+#define OFFSETOF(type, member) ((uint)(uintptr)&((type *)0)->member)
+#endif /* OFFSETOF */
+#ifndef ARRAYSIZE
+#define ARRAYSIZE(a) (sizeof(a)/sizeof(a[0]))
+#endif
+
+/* bit map related macros */
+#ifndef setbit
+#ifndef NBBY /* the BSD family defines NBBY */
+#define NBBY 8 /* 8 bits per byte */
+#endif /* #ifndef NBBY */
+#define setbit(a, i) (((uint8 *)a)[(i)/NBBY] |= 1<<((i)%NBBY))
+#define clrbit(a, i) (((uint8 *)a)[(i)/NBBY] &= ~(1<<((i)%NBBY)))
+#define isset(a, i) (((const uint8 *)a)[(i)/NBBY] & (1<<((i)%NBBY)))
+#define isclr(a, i) ((((const uint8 *)a)[(i)/NBBY] & (1<<((i)%NBBY))) == 0)
+#endif /* setbit */
+
+#define NBITS(type) (sizeof(type) * 8)
+#define NBITVAL(nbits) (1 << (nbits))
+#define MAXBITVAL(nbits) ((1 << (nbits)) - 1)
+#define NBITMASK(nbits) MAXBITVAL(nbits)
+#define MAXNBVAL(nbyte) MAXBITVAL((nbyte) * 8)
+
+/* basic mux operation - can be optimized on several architectures */
+#define MUX(pred, true, false) ((pred) ? (true) : (false))
+
+/* modulo inc/dec - assumes x E [0, bound - 1] */
+#define MODDEC(x, bound) MUX((x) == 0, (bound) - 1, (x) - 1)
+#define MODINC(x, bound) MUX((x) == (bound) - 1, 0, (x) + 1)
+
+/* modulo inc/dec, bound = 2^k */
+#define MODDEC_POW2(x, bound) (((x) - 1) & ((bound) - 1))
+#define MODINC_POW2(x, bound) (((x) + 1) & ((bound) - 1))
+
+/* modulo add/sub - assumes x, y E [0, bound - 1] */
+#define MODADD(x, y, bound) \
+ MUX((x) + (y) >= (bound), (x) + (y) - (bound), (x) + (y))
+#define MODSUB(x, y, bound) \
+ MUX(((int)(x)) - ((int)(y)) < 0, (x) - (y) + (bound), (x) - (y))
+
+/* module add/sub, bound = 2^k */
+#define MODADD_POW2(x, y, bound) (((x) + (y)) & ((bound) - 1))
+#define MODSUB_POW2(x, y, bound) (((x) - (y)) & ((bound) - 1))
+
+/* crc defines */
+#define CRC8_INIT_VALUE 0xff /* Initial CRC8 checksum value */
+#define CRC8_GOOD_VALUE 0x9f /* Good final CRC8 checksum value */
+#define CRC16_INIT_VALUE 0xffff /* Initial CRC16 checksum value */
+#define CRC16_GOOD_VALUE 0xf0b8 /* Good final CRC16 checksum value */
+#define CRC32_INIT_VALUE 0xffffffff /* Initial CRC32 checksum value */
+#define CRC32_GOOD_VALUE 0xdebb20e3 /* Good final CRC32 checksum value */
+
+/* bcm_format_flags() bit description structure */
+typedef struct bcm_bit_desc {
+ uint32 bit;
+ const char* name;
+} bcm_bit_desc_t;
+
+/* tag_ID/length/value_buffer tuple */
+typedef struct bcm_tlv {
+ uint8 id;
+ uint8 len;
+ uint8 data[1];
+} bcm_tlv_t;
+
+/* Check that bcm_tlv_t fits into the given buflen */
+#define bcm_valid_tlv(elt, buflen) ((buflen) >= 2 && (int)(buflen) >= (int)(2 + (elt)->len))
+
+/* buffer length for ethernet address from bcm_ether_ntoa() */
+#define ETHER_ADDR_STR_LEN 18 /* 18-bytes of Ethernet address buffer length */
+
+/* unaligned load and store macros */
+#ifdef IL_BIGENDIAN
+static INLINE uint32
+load32_ua(uint8 *a)
+{
+ return ((a[0] << 24) | (a[1] << 16) | (a[2] << 8) | a[3]);
+}
+
+static INLINE void
+store32_ua(uint8 *a, uint32 v)
+{
+ a[0] = (v >> 24) & 0xff;
+ a[1] = (v >> 16) & 0xff;
+ a[2] = (v >> 8) & 0xff;
+ a[3] = v & 0xff;
+}
+
+static INLINE uint16
+load16_ua(uint8 *a)
+{
+ return ((a[0] << 8) | a[1]);
+}
+
+static INLINE void
+store16_ua(uint8 *a, uint16 v)
+{
+ a[0] = (v >> 8) & 0xff;
+ a[1] = v & 0xff;
+}
+
+#else /* IL_BIGENDIAN */
+
+static INLINE uint32
+load32_ua(uint8 *a)
+{
+ return ((a[3] << 24) | (a[2] << 16) | (a[1] << 8) | a[0]);
+}
+
+static INLINE void
+store32_ua(uint8 *a, uint32 v)
+{
+ a[3] = (v >> 24) & 0xff;
+ a[2] = (v >> 16) & 0xff;
+ a[1] = (v >> 8) & 0xff;
+ a[0] = v & 0xff;
+}
+
+static INLINE uint16
+load16_ua(uint8 *a)
+{
+ return ((a[1] << 8) | a[0]);
+}
+
+static INLINE void
+store16_ua(uint8 *a, uint16 v)
+{
+ a[1] = (v >> 8) & 0xff;
+ a[0] = v & 0xff;
+}
+
+#endif /* IL_BIGENDIAN */
+
+/* externs */
+/* crc */
+extern uint8 BCMROMFN(hndcrc8)(uint8 *p, uint nbytes, uint8 crc);
+extern uint16 BCMROMFN(hndcrc16)(uint8 *p, uint nbytes, uint16 crc);
+extern uint32 BCMROMFN(hndcrc32)(uint8 *p, uint nbytes, uint32 crc);
+/* format/print */
+#ifdef BCMDBG
+extern int bcm_format_flags(const bcm_bit_desc_t *bd, uint32 flags, char* buf, int len);
+extern int bcm_format_hex(char *str, const void *bytes, int len);
+extern void deadbeef(void *p, uint len);
+extern void prhex(const char *msg, uchar *buf, uint len);
+#endif /* BCMDBG */
+extern char *bcm_brev_str(uint16 brev, char *buf);
+extern void printfbig(char *buf);
+
+/* IE parsing */
+extern bcm_tlv_t *BCMROMFN(bcm_next_tlv)(bcm_tlv_t *elt, int *buflen);
+extern bcm_tlv_t *BCMROMFN(bcm_parse_tlvs)(void *buf, int buflen, uint key);
+extern bcm_tlv_t *BCMROMFN(bcm_parse_ordered_tlvs)(void *buf, int buflen, uint key);
+
+/* bcmerror */
+extern const char *bcmerrorstr(int bcmerror);
+
+/* multi-bool data type: set of bools, mbool is true if any is set */
+typedef uint32 mbool;
+#define mboolset(mb, bit) ((mb) |= (bit)) /* set one bool */
+#define mboolclr(mb, bit) ((mb) &= ~(bit)) /* clear one bool */
+#define mboolisset(mb, bit) (((mb) & (bit)) != 0) /* TRUE if one bool is set */
+#define mboolmaskset(mb, mask, val) ((mb) = (((mb) & ~(mask)) | (val)))
+
+/* power conversion */
+extern uint16 BCMROMFN(bcm_qdbm_to_mw)(uint8 qdbm);
+extern uint8 BCMROMFN(bcm_mw_to_qdbm)(uint16 mw);
+
+/* generic datastruct to help dump routines */
+struct fielddesc {
+ const char *nameandfmt;
+ uint32 offset;
+ uint32 len;
+};
+
+extern void bcm_binit(struct bcmstrbuf *b, char *buf, uint size);
+extern int bcm_bprintf(struct bcmstrbuf *b, const char *fmt, ...);
+
+typedef uint32 (*readreg_rtn)(void *arg0, void *arg1, uint32 offset);
+extern uint bcmdumpfields(readreg_rtn func_ptr, void *arg0, void *arg1, struct fielddesc *str,
+ char *buf, uint32 bufsize);
+
+extern uint bcm_mkiovar(char *name, char *data, uint datalen, char *buf, uint len);
+extern uint BCMROMFN(bcm_bitcount)(uint8 *bitmap, uint bytelength);
+
+#ifdef BCMDBG_PKT /* pkt logging for debugging */
+#define PKTLIST_SIZE 1000
+typedef struct {
+ void *list[PKTLIST_SIZE]; /* List of pointers to packets */
+ uint count; /* Total count of the packets */
+} pktlist_info_t;
+
+extern void pktlist_add(pktlist_info_t *pktlist, void *p);
+extern void pktlist_remove(pktlist_info_t *pktlist, void *p);
+extern char* pktlist_dump(pktlist_info_t *pktlist, char *buf);
+#endif /* BCMDBG_PKT */
+
+#endif /* _bcmutils_h_ */
* Generic Broadcom Home Networking Division (HND) DMA module.
* This supports the following chips: BCM42xx, 44xx, 47xx .
*
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
* All Rights Reserved.
*
* THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
* SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
*
- * $Id: hnddma.c,v 1.11 2006/04/08 07:12:42 honor Exp $
+ * $Id$
*/
#include <typedefs.h>
#include "linux_osl.h"
#include <bcmendian.h>
#include <sbconfig.h>
-#include <bcmutils.h>
+#include "bcmutils.h"
#include <bcmdevs.h>
#include <sbutils.h>
#include "hnddma.h"
/* debug/trace */
+#ifdef BCMDBG
+#define DMA_ERROR(args) if (!(*di->msg_level & 1)); else printf args
+#define DMA_TRACE(args) if (!(*di->msg_level & 2)); else printf args
+#else
#define DMA_ERROR(args)
#define DMA_TRACE(args)
+#endif
/* default dma message level (if input msg_level pointer is null in dma_attach()) */
-static uint dma_msg_level =
- 0;
+static uint dma_msg_level = 0;
-#define MAXNAMEL 8 /* 8 char names */
+#define MAXNAMEL 8 /* 8 char names */
#define DI_INFO(dmah) (dma_info_t *)dmah
+typedef struct osl_dmainfo osldma_t;
/* dma engine software state */
-typedef struct dma_info {
- struct hnddma_pub hnddma; /* exported structure, don't use hnddma_t,
- * which could be const
- */
- uint *msg_level; /* message level pointer */
- char name[MAXNAMEL]; /* callers name for diag msgs */
-
- void *osh; /* os handle */
- sb_t *sbh; /* sb handle */
-
- bool dma64; /* dma64 enabled */
- bool addrext; /* this dma engine supports DmaExtendedAddrChanges */
-
- dma32regs_t *d32txregs; /* 32 bits dma tx engine registers */
- dma32regs_t *d32rxregs; /* 32 bits dma rx engine registers */
- dma64regs_t *d64txregs; /* 64 bits dma tx engine registers */
- dma64regs_t *d64rxregs; /* 64 bits dma rx engine registers */
-
- uint32 dma64align; /* either 8k or 4k depends on number of dd */
- dma32dd_t *txd32; /* pointer to dma32 tx descriptor ring */
- dma64dd_t *txd64; /* pointer to dma64 tx descriptor ring */
- uint ntxd; /* # tx descriptors tunable */
- uint txin; /* index of next descriptor to reclaim */
- uint txout; /* index of next descriptor to post */
- void **txp; /* pointer to parallel array of pointers to packets */
- osldma_t *tx_dmah; /* DMA TX descriptor ring handle */
- osldma_t **txp_dmah; /* DMA TX packet data handle */
- ulong txdpa; /* physical address of descriptor ring */
- uint txdalign; /* #bytes added to alloc'd mem to align txd */
- uint txdalloc; /* #bytes allocated for the ring */
-
- dma32dd_t *rxd32; /* pointer to dma32 rx descriptor ring */
- dma64dd_t *rxd64; /* pointer to dma64 rx descriptor ring */
- uint nrxd; /* # rx descriptors tunable */
- uint rxin; /* index of next descriptor to reclaim */
- uint rxout; /* index of next descriptor to post */
- void **rxp; /* pointer to parallel array of pointers to packets */
- osldma_t *rx_dmah; /* DMA RX descriptor ring handle */
- osldma_t **rxp_dmah; /* DMA RX packet data handle */
- ulong rxdpa; /* physical address of descriptor ring */
- uint rxdalign; /* #bytes added to alloc'd mem to align rxd */
- uint rxdalloc; /* #bytes allocated for the ring */
-
- /* tunables */
- uint rxbufsize; /* rx buffer size in bytes,
- not including the extra headroom
- */
- uint nrxpost; /* # rx buffers to keep posted */
- uint rxoffset; /* rxcontrol offset */
- uint ddoffsetlow; /* add to get dma address of descriptor ring, low 32 bits */
- uint ddoffsethigh; /* high 32 bits */
- uint dataoffsetlow; /* add to get dma address of data buffer, low 32 bits */
- uint dataoffsethigh; /* high 32 bits */
+typedef struct dma_info
+{
+ struct hnddma_pub hnddma; /* exported structure, don't use hnddma_t,
+ * which could be const
+ */
+ uint *msg_level; /* message level pointer */
+ char name[MAXNAMEL]; /* callers name for diag msgs */
+
+ void *osh; /* os handle */
+ sb_t *sbh; /* sb handle */
+
+ bool dma64; /* dma64 enabled */
+ bool addrext; /* this dma engine supports DmaExtendedAddrChanges */
+
+ dma32regs_t *d32txregs; /* 32 bits dma tx engine registers */
+ dma32regs_t *d32rxregs; /* 32 bits dma rx engine registers */
+ dma64regs_t *d64txregs; /* 64 bits dma tx engine registers */
+ dma64regs_t *d64rxregs; /* 64 bits dma rx engine registers */
+
+ uint32 dma64align; /* either 8k or 4k depends on number of dd */
+ dma32dd_t *txd32; /* pointer to dma32 tx descriptor ring */
+ dma64dd_t *txd64; /* pointer to dma64 tx descriptor ring */
+ uint ntxd; /* # tx descriptors tunable */
+ uint txin; /* index of next descriptor to reclaim */
+ uint txout; /* index of next descriptor to post */
+ void **txp; /* pointer to parallel array of pointers to packets */
+ osldma_t *tx_dmah; /* DMA TX descriptor ring handle */
+ osldma_t **txp_dmah; /* DMA TX packet data handle */
+ ulong txdpa; /* physical address of descriptor ring */
+ uint txdalign; /* #bytes added to alloc'd mem to align txd */
+ uint txdalloc; /* #bytes allocated for the ring */
+
+ dma32dd_t *rxd32; /* pointer to dma32 rx descriptor ring */
+ dma64dd_t *rxd64; /* pointer to dma64 rx descriptor ring */
+ uint nrxd; /* # rx descriptors tunable */
+ uint rxin; /* index of next descriptor to reclaim */
+ uint rxout; /* index of next descriptor to post */
+ void **rxp; /* pointer to parallel array of pointers to packets */
+ osldma_t *rx_dmah; /* DMA RX descriptor ring handle */
+ osldma_t **rxp_dmah; /* DMA RX packet data handle */
+ ulong rxdpa; /* physical address of descriptor ring */
+ uint rxdalign; /* #bytes added to alloc'd mem to align rxd */
+ uint rxdalloc; /* #bytes allocated for the ring */
+
+ /* tunables */
+ uint rxbufsize; /* rx buffer size in bytes,
+ not including the extra headroom
+ */
+ uint nrxpost; /* # rx buffers to keep posted */
+ uint rxoffset; /* rxcontrol offset */
+ uint ddoffsetlow; /* add to get dma address of descriptor ring, low 32 bits */
+ uint ddoffsethigh; /* high 32 bits */
+ uint dataoffsetlow; /* add to get dma address of data buffer, low 32 bits */
+ uint dataoffsethigh; /* high 32 bits */
} dma_info_t;
#ifdef BCMDMA64
#define I2B(index, type) ((index) * sizeof(type))
#define PCI32ADDR_HIGH 0xc0000000 /* address[31:30] */
-#define PCI32ADDR_HIGH_SHIFT 30 /* address[31:30] */
+#define PCI32ADDR_HIGH_SHIFT 30 /* address[31:30] */
/* common prototypes */
-static bool _dma_isaddrext(dma_info_t *di);
-static bool _dma_alloc(dma_info_t *di, uint direction);
-static void _dma_detach(dma_info_t *di);
-static void _dma_ddtable_init(dma_info_t *di, uint direction, ulong pa);
-static void _dma_rxinit(dma_info_t *di);
-static void *_dma_rx(dma_info_t *di);
-static void _dma_rxfill(dma_info_t *di);
-static void _dma_rxreclaim(dma_info_t *di);
-static void _dma_rxenable(dma_info_t *di);
-static void * _dma_getnextrxp(dma_info_t *di, bool forceall);
-
-static void _dma_txblock(dma_info_t *di);
-static void _dma_txunblock(dma_info_t *di);
-static uint _dma_txactive(dma_info_t *di);
-
-static void* _dma_peeknexttxp(dma_info_t *di);
-static uintptr _dma_getvar(dma_info_t *di, const char *name);
-static void _dma_counterreset(dma_info_t *di);
-static void _dma_fifoloopbackenable(dma_info_t *di);
+static bool _dma_isaddrext (dma_info_t * di);
+static bool _dma_alloc (dma_info_t * di, uint direction);
+static void _dma_detach (dma_info_t * di);
+static void _dma_ddtable_init (dma_info_t * di, uint direction, ulong pa);
+static void _dma_rxinit (dma_info_t * di);
+static void *_dma_rx (dma_info_t * di);
+static void _dma_rxfill (dma_info_t * di);
+static void _dma_rxreclaim (dma_info_t * di);
+static void _dma_rxenable (dma_info_t * di);
+static void *_dma_getnextrxp (dma_info_t * di, bool forceall);
+
+static void _dma_txblock (dma_info_t * di);
+static void _dma_txunblock (dma_info_t * di);
+static uint _dma_txactive (dma_info_t * di);
+
+static void *_dma_peeknexttxp (dma_info_t * di);
+static uintptr _dma_getvar (dma_info_t * di, const char *name);
+static void _dma_counterreset (dma_info_t * di);
+static void _dma_fifoloopbackenable (dma_info_t * di);
/* ** 32 bit DMA prototypes */
-static bool dma32_alloc(dma_info_t *di, uint direction);
-static bool dma32_txreset(dma_info_t *di);
-static bool dma32_rxreset(dma_info_t *di);
-static bool dma32_txsuspendedidle(dma_info_t *di);
-static int dma32_txfast(dma_info_t *di, void *p0, bool commit);
-static void *dma32_getnexttxp(dma_info_t *di, bool forceall);
-static void *dma32_getnextrxp(dma_info_t *di, bool forceall);
-static void dma32_txrotate(dma_info_t *di);
-static bool dma32_rxidle(dma_info_t *di);
-static void dma32_txinit(dma_info_t *di);
-static bool dma32_txenabled(dma_info_t *di);
-static void dma32_txsuspend(dma_info_t *di);
-static void dma32_txresume(dma_info_t *di);
-static bool dma32_txsuspended(dma_info_t *di);
-static void dma32_txreclaim(dma_info_t *di, bool forceall);
-static bool dma32_txstopped(dma_info_t *di);
-static bool dma32_rxstopped(dma_info_t *di);
-static bool dma32_rxenabled(dma_info_t *di);
-static bool _dma32_addrext(osl_t *osh, dma32regs_t *dma32regs);
+static bool dma32_alloc (dma_info_t * di, uint direction);
+static bool dma32_txreset (dma_info_t * di);
+static bool dma32_rxreset (dma_info_t * di);
+static bool dma32_txsuspendedidle (dma_info_t * di);
+static int dma32_txfast (dma_info_t * di, void *p0, bool commit);
+static void *dma32_getnexttxp (dma_info_t * di, bool forceall);
+static void *dma32_getnextrxp (dma_info_t * di, bool forceall);
+static void dma32_txrotate (dma_info_t * di);
+static bool dma32_rxidle (dma_info_t * di);
+static void dma32_txinit (dma_info_t * di);
+static bool dma32_txenabled (dma_info_t * di);
+static void dma32_txsuspend (dma_info_t * di);
+static void dma32_txresume (dma_info_t * di);
+static bool dma32_txsuspended (dma_info_t * di);
+static void dma32_txreclaim (dma_info_t * di, bool forceall);
+static bool dma32_txstopped (dma_info_t * di);
+static bool dma32_rxstopped (dma_info_t * di);
+static bool dma32_rxenabled (dma_info_t * di);
+static bool _dma32_addrext (osl_t * osh, dma32regs_t * dma32regs);
/* ** 64 bit DMA prototypes and stubs */
#ifdef BCMDMA64
-static bool dma64_alloc(dma_info_t *di, uint direction);
-static bool dma64_txreset(dma_info_t *di);
-static bool dma64_rxreset(dma_info_t *di);
-static bool dma64_txsuspendedidle(dma_info_t *di);
-static int dma64_txfast(dma_info_t *di, void *p0, bool commit);
-static void *dma64_getnexttxp(dma_info_t *di, bool forceall);
-static void *dma64_getnextrxp(dma_info_t *di, bool forceall);
-static void dma64_txrotate(dma_info_t *di);
-
-static bool dma64_rxidle(dma_info_t *di);
-static void dma64_txinit(dma_info_t *di);
-static bool dma64_txenabled(dma_info_t *di);
-static void dma64_txsuspend(dma_info_t *di);
-static void dma64_txresume(dma_info_t *di);
-static bool dma64_txsuspended(dma_info_t *di);
-static void dma64_txreclaim(dma_info_t *di, bool forceall);
-static bool dma64_txstopped(dma_info_t *di);
-static bool dma64_rxstopped(dma_info_t *di);
-static bool dma64_rxenabled(dma_info_t *di);
-static bool _dma64_addrext(osl_t *osh, dma64regs_t *dma64regs);
+static bool dma64_alloc (dma_info_t * di, uint direction);
+static bool dma64_txreset (dma_info_t * di);
+static bool dma64_rxreset (dma_info_t * di);
+static bool dma64_txsuspendedidle (dma_info_t * di);
+static int dma64_txfast (dma_info_t * di, void *p0, bool commit);
+static void *dma64_getnexttxp (dma_info_t * di, bool forceall);
+static void *dma64_getnextrxp (dma_info_t * di, bool forceall);
+static void dma64_txrotate (dma_info_t * di);
+
+static bool dma64_rxidle (dma_info_t * di);
+static void dma64_txinit (dma_info_t * di);
+static bool dma64_txenabled (dma_info_t * di);
+static void dma64_txsuspend (dma_info_t * di);
+static void dma64_txresume (dma_info_t * di);
+static bool dma64_txsuspended (dma_info_t * di);
+static void dma64_txreclaim (dma_info_t * di, bool forceall);
+static bool dma64_txstopped (dma_info_t * di);
+static bool dma64_rxstopped (dma_info_t * di);
+static bool dma64_rxenabled (dma_info_t * di);
+static bool _dma64_addrext (osl_t * osh, dma64regs_t * dma64regs);
#else
-static bool dma64_alloc(dma_info_t *di, uint direction) { return FALSE; }
-static bool dma64_txreset(dma_info_t *di) { return FALSE; }
-static bool dma64_rxreset(dma_info_t *di) { return FALSE; }
-static bool dma64_txsuspendedidle(dma_info_t *di) { return FALSE;}
-static int dma64_txfast(dma_info_t *di, void *p0, bool commit) { return 0; }
-static void *dma64_getnexttxp(dma_info_t *di, bool forceall) { return NULL; }
-static void *dma64_getnextrxp(dma_info_t *di, bool forceall) { return NULL; }
-static void dma64_txrotate(dma_info_t *di) { return; }
-
-static bool dma64_rxidle(dma_info_t *di) { return FALSE; }
-static void dma64_txinit(dma_info_t *di) { return; }
-static bool dma64_txenabled(dma_info_t *di) { return FALSE; }
-static void dma64_txsuspend(dma_info_t *di) { return; }
-static void dma64_txresume(dma_info_t *di) { return; }
-static bool dma64_txsuspended(dma_info_t *di) {return FALSE; }
-static void dma64_txreclaim(dma_info_t *di, bool forceall) { return; }
-static bool dma64_txstopped(dma_info_t *di) { return FALSE; }
-static bool dma64_rxstopped(dma_info_t *di) { return FALSE; }
-static bool dma64_rxenabled(dma_info_t *di) { return FALSE; }
-static bool _dma64_addrext(osl_t *osh, dma64regs_t *dma64regs) { return FALSE; }
-
-#endif /* BCMDMA64 */
+static bool
+dma64_alloc (dma_info_t * di, uint direction)
+{
+ return FALSE;
+}
+static bool
+dma64_txreset (dma_info_t * di)
+{
+ return FALSE;
+}
+static bool
+dma64_rxreset (dma_info_t * di)
+{
+ return FALSE;
+}
+static bool
+dma64_txsuspendedidle (dma_info_t * di)
+{
+ return FALSE;
+}
+static int
+dma64_txfast (dma_info_t * di, void *p0, bool commit)
+{
+ return 0;
+}
+static void *
+dma64_getnexttxp (dma_info_t * di, bool forceall)
+{
+ return NULL;
+}
+static void *
+dma64_getnextrxp (dma_info_t * di, bool forceall)
+{
+ return NULL;
+}
+static void
+dma64_txrotate (dma_info_t * di)
+{
+ return;
+}
+static bool
+dma64_rxidle (dma_info_t * di)
+{
+ return FALSE;
+}
+static void
+dma64_txinit (dma_info_t * di)
+{
+ return;
+}
+static bool
+dma64_txenabled (dma_info_t * di)
+{
+ return FALSE;
+}
+static void
+dma64_txsuspend (dma_info_t * di)
+{
+ return;
+}
+static void
+dma64_txresume (dma_info_t * di)
+{
+ return;
+}
+static bool
+dma64_txsuspended (dma_info_t * di)
+{
+ return FALSE;
+}
+static void
+dma64_txreclaim (dma_info_t * di, bool forceall)
+{
+ return;
+}
+static bool
+dma64_txstopped (dma_info_t * di)
+{
+ return FALSE;
+}
+static bool
+dma64_rxstopped (dma_info_t * di)
+{
+ return FALSE;
+}
+static bool
+dma64_rxenabled (dma_info_t * di)
+{
+ return FALSE;
+}
+static bool
+_dma64_addrext (osl_t * osh, dma64regs_t * dma64regs)
+{
+ return FALSE;
+}
+
+#endif /* BCMDMA64 */
+
+#ifdef BCMDBG
+static void dma32_dumpring (dma_info_t * di, struct bcmstrbuf *b,
+ dma32dd_t * ring, uint start, uint end,
+ uint max_num);
+static void dma32_dump (dma_info_t * di, struct bcmstrbuf *b, bool dumpring);
+static void dma32_dumptx (dma_info_t * di, struct bcmstrbuf *b,
+ bool dumpring);
+static void dma32_dumprx (dma_info_t * di, struct bcmstrbuf *b,
+ bool dumpring);
+
+static void dma64_dumpring (dma_info_t * di, struct bcmstrbuf *b,
+ dma64dd_t * ring, uint start, uint end,
+ uint max_num);
+static void dma64_dump (dma_info_t * di, struct bcmstrbuf *b, bool dumpring);
+static void dma64_dumptx (dma_info_t * di, struct bcmstrbuf *b,
+ bool dumpring);
+static void dma64_dumprx (dma_info_t * di, struct bcmstrbuf *b,
+ bool dumpring);
+#endif
static di_fcn_t dma64proc = {
- (di_detach_t)_dma_detach,
- (di_txinit_t)dma64_txinit,
- (di_txreset_t)dma64_txreset,
- (di_txenabled_t)dma64_txenabled,
- (di_txsuspend_t)dma64_txsuspend,
- (di_txresume_t)dma64_txresume,
- (di_txsuspended_t)dma64_txsuspended,
- (di_txsuspendedidle_t)dma64_txsuspendedidle,
- (di_txfast_t)dma64_txfast,
- (di_txstopped_t)dma64_txstopped,
- (di_txreclaim_t)dma64_txreclaim,
- (di_getnexttxp_t)dma64_getnexttxp,
- (di_peeknexttxp_t)_dma_peeknexttxp,
- (di_txblock_t)_dma_txblock,
- (di_txunblock_t)_dma_txunblock,
- (di_txactive_t)_dma_txactive,
- (di_txrotate_t)dma64_txrotate,
-
- (di_rxinit_t)_dma_rxinit,
- (di_rxreset_t)dma64_rxreset,
- (di_rxidle_t)dma64_rxidle,
- (di_rxstopped_t)dma64_rxstopped,
- (di_rxenable_t)_dma_rxenable,
- (di_rxenabled_t)dma64_rxenabled,
- (di_rx_t)_dma_rx,
- (di_rxfill_t)_dma_rxfill,
- (di_rxreclaim_t)_dma_rxreclaim,
- (di_getnextrxp_t)_dma_getnextrxp,
-
- (di_fifoloopbackenable_t)_dma_fifoloopbackenable,
- (di_getvar_t)_dma_getvar,
- (di_counterreset_t)_dma_counterreset,
-
- NULL,
- NULL,
- NULL,
- 34
+ (di_detach_t) _dma_detach,
+ (di_txinit_t) dma64_txinit,
+ (di_txreset_t) dma64_txreset,
+ (di_txenabled_t) dma64_txenabled,
+ (di_txsuspend_t) dma64_txsuspend,
+ (di_txresume_t) dma64_txresume,
+ (di_txsuspended_t) dma64_txsuspended,
+ (di_txsuspendedidle_t) dma64_txsuspendedidle,
+ (di_txfast_t) dma64_txfast,
+ (di_txstopped_t) dma64_txstopped,
+ (di_txreclaim_t) dma64_txreclaim,
+ (di_getnexttxp_t) dma64_getnexttxp,
+ (di_peeknexttxp_t) _dma_peeknexttxp,
+ (di_txblock_t) _dma_txblock,
+ (di_txunblock_t) _dma_txunblock,
+ (di_txactive_t) _dma_txactive,
+ (di_txrotate_t) dma64_txrotate,
+
+ (di_rxinit_t) _dma_rxinit,
+ (di_rxreset_t) dma64_rxreset,
+ (di_rxidle_t) dma64_rxidle,
+ (di_rxstopped_t) dma64_rxstopped,
+ (di_rxenable_t) _dma_rxenable,
+ (di_rxenabled_t) dma64_rxenabled,
+ (di_rx_t) _dma_rx,
+ (di_rxfill_t) _dma_rxfill,
+ (di_rxreclaim_t) _dma_rxreclaim,
+ (di_getnextrxp_t) _dma_getnextrxp,
+
+ (di_fifoloopbackenable_t) _dma_fifoloopbackenable,
+ (di_getvar_t) _dma_getvar,
+ (di_counterreset_t) _dma_counterreset,
+
+#ifdef BCMDBG
+ (di_dump_t) dma64_dump,
+ (di_dumptx_t) dma64_dumptx,
+ (di_dumprx_t) dma64_dumprx,
+#else
+ NULL,
+ NULL,
+ NULL,
+#endif
+ 34
};
static di_fcn_t dma32proc = {
- (di_detach_t)_dma_detach,
- (di_txinit_t)dma32_txinit,
- (di_txreset_t)dma32_txreset,
- (di_txenabled_t)dma32_txenabled,
- (di_txsuspend_t)dma32_txsuspend,
- (di_txresume_t)dma32_txresume,
- (di_txsuspended_t)dma32_txsuspended,
- (di_txsuspendedidle_t)dma32_txsuspendedidle,
- (di_txfast_t)dma32_txfast,
- (di_txstopped_t)dma32_txstopped,
- (di_txreclaim_t)dma32_txreclaim,
- (di_getnexttxp_t)dma32_getnexttxp,
- (di_peeknexttxp_t)_dma_peeknexttxp,
- (di_txblock_t)_dma_txblock,
- (di_txunblock_t)_dma_txunblock,
- (di_txactive_t)_dma_txactive,
- (di_txrotate_t)dma32_txrotate,
-
- (di_rxinit_t)_dma_rxinit,
- (di_rxreset_t)dma32_rxreset,
- (di_rxidle_t)dma32_rxidle,
- (di_rxstopped_t)dma32_rxstopped,
- (di_rxenable_t)_dma_rxenable,
- (di_rxenabled_t)dma32_rxenabled,
- (di_rx_t)_dma_rx,
- (di_rxfill_t)_dma_rxfill,
- (di_rxreclaim_t)_dma_rxreclaim,
- (di_getnextrxp_t)_dma_getnextrxp,
-
- (di_fifoloopbackenable_t)_dma_fifoloopbackenable,
- (di_getvar_t)_dma_getvar,
- (di_counterreset_t)_dma_counterreset,
-
- NULL,
- NULL,
- NULL,
- 34
+ (di_detach_t) _dma_detach,
+ (di_txinit_t) dma32_txinit,
+ (di_txreset_t) dma32_txreset,
+ (di_txenabled_t) dma32_txenabled,
+ (di_txsuspend_t) dma32_txsuspend,
+ (di_txresume_t) dma32_txresume,
+ (di_txsuspended_t) dma32_txsuspended,
+ (di_txsuspendedidle_t) dma32_txsuspendedidle,
+ (di_txfast_t) dma32_txfast,
+ (di_txstopped_t) dma32_txstopped,
+ (di_txreclaim_t) dma32_txreclaim,
+ (di_getnexttxp_t) dma32_getnexttxp,
+ (di_peeknexttxp_t) _dma_peeknexttxp,
+ (di_txblock_t) _dma_txblock,
+ (di_txunblock_t) _dma_txunblock,
+ (di_txactive_t) _dma_txactive,
+ (di_txrotate_t) dma32_txrotate,
+
+ (di_rxinit_t) _dma_rxinit,
+ (di_rxreset_t) dma32_rxreset,
+ (di_rxidle_t) dma32_rxidle,
+ (di_rxstopped_t) dma32_rxstopped,
+ (di_rxenable_t) _dma_rxenable,
+ (di_rxenabled_t) dma32_rxenabled,
+ (di_rx_t) _dma_rx,
+ (di_rxfill_t) _dma_rxfill,
+ (di_rxreclaim_t) _dma_rxreclaim,
+ (di_getnextrxp_t) _dma_getnextrxp,
+
+ (di_fifoloopbackenable_t) _dma_fifoloopbackenable,
+ (di_getvar_t) _dma_getvar,
+ (di_counterreset_t) _dma_counterreset,
+
+#ifdef BCMDBG
+ (di_dump_t) dma32_dump,
+ (di_dumptx_t) dma32_dumptx,
+ (di_dumprx_t) dma32_dumprx,
+#else
+ NULL,
+ NULL,
+ NULL,
+#endif
+ 34
};
hnddma_t *
-dma_attach(osl_t *osh, char *name, sb_t *sbh, void *dmaregstx, void *dmaregsrx,
- uint ntxd, uint nrxd, uint rxbufsize, uint nrxpost, uint rxoffset, uint *msg_level)
+dma_attach (osl_t * osh, char *name, sb_t * sbh, void *dmaregstx,
+ void *dmaregsrx, uint ntxd, uint nrxd, uint rxbufsize,
+ uint nrxpost, uint rxoffset, uint * msg_level)
{
- dma_info_t *di;
- uint size;
+ dma_info_t *di;
+ uint size;
+
+ /* allocate private info structure */
+ if ((di = MALLOC (osh, sizeof (dma_info_t))) == NULL)
+ {
+#ifdef BCMDBG
+ printf ("dma_attach: out of memory, malloced %d bytes\n",
+ MALLOCED (osh));
+#endif
+ return (NULL);
+ }
+ bzero ((char *) di, sizeof (dma_info_t));
- /* allocate private info structure */
- if ((di = MALLOC(osh, sizeof (dma_info_t))) == NULL) {
- return (NULL);
- }
- bzero((char *)di, sizeof(dma_info_t));
+ di->msg_level = msg_level ? msg_level : &dma_msg_level;
- di->msg_level = msg_level ? msg_level : &dma_msg_level;
+ /* old chips w/o sb is no longer supported */
+ ASSERT (sbh != NULL);
- /* old chips w/o sb is no longer supported */
- ASSERT(sbh != NULL);
-
- di->dma64 = ((sb_coreflagshi(sbh, 0, 0) & SBTMH_DMA64) == SBTMH_DMA64);
+ di->dma64 = ((sb_coreflagshi (sbh, 0, 0) & SBTMH_DMA64) == SBTMH_DMA64);
#ifndef BCMDMA64
- if (di->dma64) {
- DMA_ERROR(("dma_attach: driver doesn't have the capability to support "
- "64 bits DMA\n"));
- goto fail;
- }
+ if (di->dma64)
+ {
+ DMA_ERROR (("dma_attach: driver doesn't have the capability to support "
+ "64 bits DMA\n"));
+ goto fail;
+ }
#endif
- /* check arguments */
- ASSERT(ISPOWEROF2(ntxd));
- ASSERT(ISPOWEROF2(nrxd));
- if (nrxd == 0)
- ASSERT(dmaregsrx == NULL);
- if (ntxd == 0)
- ASSERT(dmaregstx == NULL);
-
-
- /* init dma reg pointer */
- if (di->dma64) {
- ASSERT(ntxd <= D64MAXDD);
- ASSERT(nrxd <= D64MAXDD);
- di->d64txregs = (dma64regs_t *)dmaregstx;
- di->d64rxregs = (dma64regs_t *)dmaregsrx;
-
- di->dma64align = D64RINGALIGN;
- if ((ntxd < D64MAXDD / 2) && (nrxd < D64MAXDD / 2)) {
- /* for smaller dd table, HW relax the alignment requirement */
- di->dma64align = D64RINGALIGN / 2;
- }
- } else {
- ASSERT(ntxd <= D32MAXDD);
- ASSERT(nrxd <= D32MAXDD);
- di->d32txregs = (dma32regs_t *)dmaregstx;
- di->d32rxregs = (dma32regs_t *)dmaregsrx;
+ /* check arguments */
+ ASSERT (ISPOWEROF2 (ntxd));
+ ASSERT (ISPOWEROF2 (nrxd));
+ if (nrxd == 0)
+ ASSERT (dmaregsrx == NULL);
+ if (ntxd == 0)
+ ASSERT (dmaregstx == NULL);
+
+
+ /* init dma reg pointer */
+ if (di->dma64)
+ {
+ ASSERT (ntxd <= D64MAXDD);
+ ASSERT (nrxd <= D64MAXDD);
+ di->d64txregs = (dma64regs_t *) dmaregstx;
+ di->d64rxregs = (dma64regs_t *) dmaregsrx;
+
+ di->dma64align = D64RINGALIGN;
+ if ((ntxd < D64MAXDD / 2) && (nrxd < D64MAXDD / 2))
+ {
+ /* for smaller dd table, HW relax the alignment requirement */
+ di->dma64align = D64RINGALIGN / 2;
}
-
- DMA_TRACE(("%s: dma_attach: %s osh %p ntxd %d nrxd %d rxbufsize %d nrxpost %d "
- "rxoffset %d dmaregstx %p dmaregsrx %p\n",
- name, (di->dma64 ? "DMA64" : "DMA32"), osh, ntxd, nrxd, rxbufsize,
- nrxpost, rxoffset, dmaregstx, dmaregsrx));
-
- /* make a private copy of our callers name */
- strncpy(di->name, name, MAXNAMEL);
- di->name[MAXNAMEL-1] = '\0';
-
- di->osh = osh;
- di->sbh = sbh;
-
- /* save tunables */
- di->ntxd = ntxd;
- di->nrxd = nrxd;
-
- /* the actual dma size doesn't include the extra headroom */
- if (rxbufsize > BCMEXTRAHDROOM)
- di->rxbufsize = rxbufsize - BCMEXTRAHDROOM;
- else
- di->rxbufsize = rxbufsize;
-
- di->nrxpost = nrxpost;
- di->rxoffset = rxoffset;
-
- /*
- * figure out the DMA physical address offset for dd and data
- * for old chips w/o sb, use zero
- * for new chips w sb,
- * PCI/PCIE: they map silicon backplace address to zero based memory, need offset
- * Other bus: use zero
- * SB_BUS BIGENDIAN kludge: use sdram swapped region for data buffer, not descriptor
- */
- di->ddoffsetlow = 0;
- di->dataoffsetlow = 0;
- /* for pci bus, add offset */
- if (sbh->bustype == PCI_BUS) {
- if ((sbh->buscoretype == SB_PCIE) && di->dma64) {
- /* pcie with DMA64 */
- di->ddoffsetlow = 0;
- di->ddoffsethigh = SB_PCIE_DMA_H32;
- } else {
- /* pci(DMA32/DMA64) or pcie with DMA32 */
- di->ddoffsetlow = SB_PCI_DMA;
- di->ddoffsethigh = 0;
- }
- di->dataoffsetlow = di->ddoffsetlow;
- di->dataoffsethigh = di->ddoffsethigh;
+ }
+ else
+ {
+ ASSERT (ntxd <= D32MAXDD);
+ ASSERT (nrxd <= D32MAXDD);
+ di->d32txregs = (dma32regs_t *) dmaregstx;
+ di->d32rxregs = (dma32regs_t *) dmaregsrx;
+ }
+
+ DMA_TRACE (("%s: dma_attach: %s osh %p ntxd %d nrxd %d rxbufsize %d nrxpost %d " "rxoffset %d dmaregstx %p dmaregsrx %p\n", name, (di->dma64 ? "DMA64" : "DMA32"), osh, ntxd, nrxd, rxbufsize, nrxpost, rxoffset, dmaregstx, dmaregsrx));
+
+ /* make a private copy of our callers name */
+ strncpy (di->name, name, MAXNAMEL);
+ di->name[MAXNAMEL - 1] = '\0';
+
+ di->osh = osh;
+ di->sbh = sbh;
+
+ /* save tunables */
+ di->ntxd = ntxd;
+ di->nrxd = nrxd;
+
+ /* the actual dma size doesn't include the extra headroom */
+ if (rxbufsize > BCMEXTRAHDROOM)
+ di->rxbufsize = rxbufsize - BCMEXTRAHDROOM;
+ else
+ di->rxbufsize = rxbufsize;
+
+ di->nrxpost = nrxpost;
+ di->rxoffset = rxoffset;
+
+ /*
+ * figure out the DMA physical address offset for dd and data
+ * for old chips w/o sb, use zero
+ * for new chips w sb,
+ * PCI/PCIE: they map silicon backplace address to zero based memory, need offset
+ * Other bus: use zero
+ * SB_BUS BIGENDIAN kludge: use sdram swapped region for data buffer, not descriptor
+ */
+ di->ddoffsetlow = 0;
+ di->dataoffsetlow = 0;
+ /* for pci bus, add offset */
+ if (sbh->bustype == PCI_BUS)
+ {
+ if ((sbh->buscoretype == SB_PCIE) && di->dma64)
+ {
+ /* pcie with DMA64 */
+ di->ddoffsetlow = 0;
+ di->ddoffsethigh = SB_PCIE_DMA_H32;
}
+ else
+ {
+ /* pci(DMA32/DMA64) or pcie with DMA32 */
+ di->ddoffsetlow = SB_PCI_DMA;
+ di->ddoffsethigh = 0;
+ }
+ di->dataoffsetlow = di->ddoffsetlow;
+ di->dataoffsethigh = di->ddoffsethigh;
+ }
#if defined(__mips__) && defined(IL_BIGENDIAN)
- di->dataoffsetlow = di->dataoffsetlow + SB_SDRAM_SWAPPED;
+ di->dataoffsetlow = di->dataoffsetlow + SB_SDRAM_SWAPPED;
#endif
- di->addrext = _dma_isaddrext(di);
-
- /* allocate tx packet pointer vector */
- if (ntxd) {
- size = ntxd * sizeof(void *);
- if ((di->txp = MALLOC(osh, size)) == NULL) {
- DMA_ERROR(("%s: dma_attach: out of tx memory, malloced %d bytes\n",
- di->name, MALLOCED(osh)));
- goto fail;
- }
- bzero((char *)di->txp, size);
+ di->addrext = _dma_isaddrext (di);
+
+ /* allocate tx packet pointer vector */
+ if (ntxd)
+ {
+ size = ntxd * sizeof (void *);
+ if ((di->txp = MALLOC (osh, size)) == NULL)
+ {
+ DMA_ERROR (("%s: dma_attach: out of tx memory, malloced %d bytes\n",
+ di->name, MALLOCED (osh)));
+ goto fail;
}
-
- /* allocate rx packet pointer vector */
- if (nrxd) {
- size = nrxd * sizeof(void *);
- if ((di->rxp = MALLOC(osh, size)) == NULL) {
- DMA_ERROR(("%s: dma_attach: out of rx memory, malloced %d bytes\n",
- di->name, MALLOCED(osh)));
- goto fail;
- }
- bzero((char *)di->rxp, size);
+ bzero ((char *) di->txp, size);
+ }
+
+ /* allocate rx packet pointer vector */
+ if (nrxd)
+ {
+ size = nrxd * sizeof (void *);
+ if ((di->rxp = MALLOC (osh, size)) == NULL)
+ {
+ DMA_ERROR (("%s: dma_attach: out of rx memory, malloced %d bytes\n",
+ di->name, MALLOCED (osh)));
+ goto fail;
}
-
- /* allocate transmit descriptor ring, only need ntxd descriptors but it must be aligned */
- if (ntxd) {
- if (!_dma_alloc(di, DMA_TX))
- goto fail;
- }
-
- /* allocate receive descriptor ring, only need nrxd descriptors but it must be aligned */
- if (nrxd) {
- if (!_dma_alloc(di, DMA_RX))
- goto fail;
- }
-
- if ((di->ddoffsetlow == SB_PCI_DMA) && (di->txdpa > SB_PCI_DMA_SZ) && !di->addrext) {
- DMA_ERROR(("%s: dma_attach: txdpa 0x%lx: addrext not supported\n",
- di->name, di->txdpa));
- goto fail;
- }
- if ((di->ddoffsetlow == SB_PCI_DMA) && (di->rxdpa > SB_PCI_DMA_SZ) && !di->addrext) {
- DMA_ERROR(("%s: dma_attach: rxdpa 0x%lx: addrext not supported\n",
- di->name, di->rxdpa));
- goto fail;
- }
-
- DMA_TRACE(("ddoffsetlow 0x%x ddoffsethigh 0x%x dataoffsetlow 0x%x dataoffsethigh "
- "0x%x addrext %d\n", di->ddoffsetlow, di->ddoffsethigh, di->dataoffsetlow,
- di->dataoffsethigh, di->addrext));
-
- /* allocate tx packet pointer vector and DMA mapping vectors */
- if (ntxd) {
-
- size = ntxd * sizeof(osldma_t **);
- if ((di->txp_dmah = (osldma_t **)MALLOC(osh, size)) == NULL)
- goto fail;
- bzero((char*)di->txp_dmah, size);
- }else
- di->txp_dmah = NULL;
-
- /* allocate rx packet pointer vector and DMA mapping vectors */
- if (nrxd) {
-
- size = nrxd * sizeof(osldma_t **);
- if ((di->rxp_dmah = (osldma_t **)MALLOC(osh, size)) == NULL)
- goto fail;
- bzero((char*)di->rxp_dmah, size);
-
- } else
- di->rxp_dmah = NULL;
-
- /* initialize opsvec of function pointers */
- di->hnddma.di_fn = DMA64_ENAB(di) ? dma64proc : dma32proc;
-
- return ((hnddma_t *)di);
+ bzero ((char *) di->rxp, size);
+ }
+
+ /* allocate transmit descriptor ring, only need ntxd descriptors but it must be aligned */
+ if (ntxd)
+ {
+ if (!_dma_alloc (di, DMA_TX))
+ goto fail;
+ }
+
+ /* allocate receive descriptor ring, only need nrxd descriptors but it must be aligned */
+ if (nrxd)
+ {
+ if (!_dma_alloc (di, DMA_RX))
+ goto fail;
+ }
+
+ if ((di->ddoffsetlow == SB_PCI_DMA) && (di->txdpa > SB_PCI_DMA_SZ)
+ && !di->addrext)
+ {
+ DMA_ERROR (("%s: dma_attach: txdpa 0x%lx: addrext not supported\n",
+ di->name, di->txdpa));
+ goto fail;
+ }
+ if ((di->ddoffsetlow == SB_PCI_DMA) && (di->rxdpa > SB_PCI_DMA_SZ)
+ && !di->addrext)
+ {
+ DMA_ERROR (("%s: dma_attach: rxdpa 0x%lx: addrext not supported\n",
+ di->name, di->rxdpa));
+ goto fail;
+ }
+
+ DMA_TRACE (("ddoffsetlow 0x%x ddoffsethigh 0x%x dataoffsetlow 0x%x dataoffsethigh " "0x%x addrext %d\n", di->ddoffsetlow, di->ddoffsethigh, di->dataoffsetlow, di->dataoffsethigh, di->addrext));
+
+ /* allocate tx packet pointer vector and DMA mapping vectors */
+ if (ntxd)
+ {
+
+ size = ntxd * sizeof (osldma_t **);
+ if ((di->txp_dmah = (osldma_t **) MALLOC (osh, size)) == NULL)
+ goto fail;
+ bzero ((char *) di->txp_dmah, size);
+ }
+ else
+ di->txp_dmah = NULL;
+
+ /* allocate rx packet pointer vector and DMA mapping vectors */
+ if (nrxd)
+ {
+
+ size = nrxd * sizeof (osldma_t **);
+ if ((di->rxp_dmah = (osldma_t **) MALLOC (osh, size)) == NULL)
+ goto fail;
+ bzero ((char *) di->rxp_dmah, size);
+
+ }
+ else
+ di->rxp_dmah = NULL;
+
+ /* initialize opsvec of function pointers */
+ di->hnddma.di_fn = DMA64_ENAB (di) ? dma64proc : dma32proc;
+
+ return ((hnddma_t *) di);
fail:
- _dma_detach(di);
- return (NULL);
+ _dma_detach (di);
+ return (NULL);
}
/* init the tx or rx descriptor */
static INLINE void
-dma32_dd_upd(dma_info_t *di, dma32dd_t *ddring, ulong pa, uint outidx, uint32 *flags,
- uint32 bufcount)
-{
- /* dma32 uses 32 bits control to fit both flags and bufcounter */
- *flags = *flags | (bufcount & CTRL_BC_MASK);
-
- if ((di->dataoffsetlow != SB_PCI_DMA) || !(pa & PCI32ADDR_HIGH)) {
- W_SM(&ddring[outidx].addr, BUS_SWAP32(pa + di->dataoffsetlow));
- W_SM(&ddring[outidx].ctrl, BUS_SWAP32(*flags));
- } else {
- /* address extension */
- uint32 ae;
- ASSERT(di->addrext);
- ae = (pa & PCI32ADDR_HIGH) >> PCI32ADDR_HIGH_SHIFT;
- pa &= ~PCI32ADDR_HIGH;
-
- *flags |= (ae << CTRL_AE_SHIFT);
- W_SM(&ddring[outidx].addr, BUS_SWAP32(pa + di->dataoffsetlow));
- W_SM(&ddring[outidx].ctrl, BUS_SWAP32(*flags));
- }
+dma32_dd_upd (dma_info_t * di, dma32dd_t * ddring, ulong pa, uint outidx,
+ uint32 * flags, uint32 bufcount)
+{
+ /* dma32 uses 32 bits control to fit both flags and bufcounter */
+ *flags = *flags | (bufcount & CTRL_BC_MASK);
+
+ if ((di->dataoffsetlow != SB_PCI_DMA) || !(pa & PCI32ADDR_HIGH))
+ {
+ W_SM (&ddring[outidx].addr, BUS_SWAP32 (pa + di->dataoffsetlow));
+ W_SM (&ddring[outidx].ctrl, BUS_SWAP32 (*flags));
+ }
+ else
+ {
+ /* address extension */
+ uint32 ae;
+ ASSERT (di->addrext);
+ ae = (pa & PCI32ADDR_HIGH) >> PCI32ADDR_HIGH_SHIFT;
+ pa &= ~PCI32ADDR_HIGH;
+
+ *flags |= (ae << CTRL_AE_SHIFT);
+ W_SM (&ddring[outidx].addr, BUS_SWAP32 (pa + di->dataoffsetlow));
+ W_SM (&ddring[outidx].ctrl, BUS_SWAP32 (*flags));
+ }
}
static INLINE void
-dma64_dd_upd(dma_info_t *di, dma64dd_t *ddring, ulong pa, uint outidx, uint32 *flags,
- uint32 bufcount)
-{
- uint32 ctrl2 = bufcount & D64_CTRL2_BC_MASK;
-
- /* PCI bus with big(>1G) physical address, use address extension */
- if ((di->dataoffsetlow != SB_PCI_DMA) || !(pa & PCI32ADDR_HIGH)) {
- W_SM(&ddring[outidx].addrlow, BUS_SWAP32(pa + di->dataoffsetlow));
- W_SM(&ddring[outidx].addrhigh, BUS_SWAP32(0 + di->dataoffsethigh));
- W_SM(&ddring[outidx].ctrl1, BUS_SWAP32(*flags));
- W_SM(&ddring[outidx].ctrl2, BUS_SWAP32(ctrl2));
- } else {
- /* address extension */
- uint32 ae;
- ASSERT(di->addrext);
-
- ae = (pa & PCI32ADDR_HIGH) >> PCI32ADDR_HIGH_SHIFT;
- pa &= ~PCI32ADDR_HIGH;
-
- ctrl2 |= (ae << D64_CTRL2_AE_SHIFT) & D64_CTRL2_AE;
- W_SM(&ddring[outidx].addrlow, BUS_SWAP32(pa + di->dataoffsetlow));
- W_SM(&ddring[outidx].addrhigh, BUS_SWAP32(0 + di->dataoffsethigh));
- W_SM(&ddring[outidx].ctrl1, BUS_SWAP32(*flags));
- W_SM(&ddring[outidx].ctrl2, BUS_SWAP32(ctrl2));
- }
+dma64_dd_upd (dma_info_t * di, dma64dd_t * ddring, ulong pa, uint outidx,
+ uint32 * flags, uint32 bufcount)
+{
+ uint32 ctrl2 = bufcount & D64_CTRL2_BC_MASK;
+
+ /* PCI bus with big(>1G) physical address, use address extension */
+ if ((di->dataoffsetlow != SB_PCI_DMA) || !(pa & PCI32ADDR_HIGH))
+ {
+ W_SM (&ddring[outidx].addrlow, BUS_SWAP32 (pa + di->dataoffsetlow));
+ W_SM (&ddring[outidx].addrhigh, BUS_SWAP32 (0 + di->dataoffsethigh));
+ W_SM (&ddring[outidx].ctrl1, BUS_SWAP32 (*flags));
+ W_SM (&ddring[outidx].ctrl2, BUS_SWAP32 (ctrl2));
+ }
+ else
+ {
+ /* address extension */
+ uint32 ae;
+ ASSERT (di->addrext);
+
+ ae = (pa & PCI32ADDR_HIGH) >> PCI32ADDR_HIGH_SHIFT;
+ pa &= ~PCI32ADDR_HIGH;
+
+ ctrl2 |= (ae << D64_CTRL2_AE_SHIFT) & D64_CTRL2_AE;
+ W_SM (&ddring[outidx].addrlow, BUS_SWAP32 (pa + di->dataoffsetlow));
+ W_SM (&ddring[outidx].addrhigh, BUS_SWAP32 (0 + di->dataoffsethigh));
+ W_SM (&ddring[outidx].ctrl1, BUS_SWAP32 (*flags));
+ W_SM (&ddring[outidx].ctrl2, BUS_SWAP32 (ctrl2));
+ }
}
static bool
-_dma32_addrext(osl_t *osh, dma32regs_t *dma32regs)
+_dma32_addrext (osl_t * osh, dma32regs_t * dma32regs)
{
- uint32 w;
+ uint32 w;
- OR_REG(osh, &dma32regs->control, XC_AE);
- w = R_REG(osh, &dma32regs->control);
- AND_REG(osh, &dma32regs->control, ~XC_AE);
- return ((w & XC_AE) == XC_AE);
+ OR_REG (osh, &dma32regs->control, XC_AE);
+ w = R_REG (osh, &dma32regs->control);
+ AND_REG (osh, &dma32regs->control, ~XC_AE);
+ return ((w & XC_AE) == XC_AE);
}
static bool
-_dma_alloc(dma_info_t *di, uint direction)
+_dma_alloc (dma_info_t * di, uint direction)
{
- if (DMA64_ENAB(di)) {
- return dma64_alloc(di, direction);
- } else {
- return dma32_alloc(di, direction);
- }
+ if (DMA64_ENAB (di))
+ {
+ return dma64_alloc (di, direction);
+ }
+ else
+ {
+ return dma32_alloc (di, direction);
+ }
}
/* !! may be called with core in reset */
static void
-_dma_detach(dma_info_t *di)
-{
- if (di == NULL)
- return;
-
- DMA_TRACE(("%s: dma_detach\n", di->name));
-
- /* shouldn't be here if descriptors are unreclaimed */
- ASSERT(di->txin == di->txout);
- ASSERT(di->rxin == di->rxout);
-
- /* free dma descriptor rings */
- if (DMA64_ENAB(di)) {
- if (di->txd64)
- DMA_FREE_CONSISTENT(di->osh, ((int8*)(uintptr)di->txd64 - di->txdalign),
- di->txdalloc, (di->txdpa - di->txdalign), &di->tx_dmah);
- if (di->rxd64)
- DMA_FREE_CONSISTENT(di->osh, ((int8*)(uintptr)di->rxd64 - di->rxdalign),
- di->rxdalloc, (di->rxdpa - di->rxdalign), &di->rx_dmah);
- } else {
- if (di->txd32)
- DMA_FREE_CONSISTENT(di->osh, ((int8*)(uintptr)di->txd32 - di->txdalign),
- di->txdalloc, (di->txdpa - di->txdalign), &di->tx_dmah);
- if (di->rxd32)
- DMA_FREE_CONSISTENT(di->osh, ((int8*)(uintptr)di->rxd32 - di->rxdalign),
- di->rxdalloc, (di->rxdpa - di->rxdalign), &di->rx_dmah);
- }
-
- /* free packet pointer vectors */
- if (di->txp)
- MFREE(di->osh, (void *)di->txp, (di->ntxd * sizeof(void *)));
- if (di->rxp)
- MFREE(di->osh, (void *)di->rxp, (di->nrxd * sizeof(void *)));
-
- /* free tx packet DMA handles */
- if (di->txp_dmah)
- MFREE(di->osh, (void *)di->txp_dmah, di->ntxd * sizeof(osldma_t **));
-
- /* free rx packet DMA handles */
- if (di->rxp_dmah)
- MFREE(di->osh, (void *)di->rxp_dmah, di->nrxd * sizeof(osldma_t **));
-
- /* free our private info structure */
- MFREE(di->osh, (void *)di, sizeof(dma_info_t));
+_dma_detach (dma_info_t * di)
+{
+ if (di == NULL)
+ return;
+
+ DMA_TRACE (("%s: dma_detach\n", di->name));
+
+ /* shouldn't be here if descriptors are unreclaimed */
+ ASSERT (di->txin == di->txout);
+ ASSERT (di->rxin == di->rxout);
+
+ /* free dma descriptor rings */
+ if (DMA64_ENAB (di))
+ {
+ if (di->txd64)
+ DMA_FREE_CONSISTENT (di->osh,
+ ((int8 *) (uintptr) di->txd64 - di->txdalign),
+ di->txdalloc, (di->txdpa - di->txdalign),
+ &di->tx_dmah);
+ if (di->rxd64)
+ DMA_FREE_CONSISTENT (di->osh,
+ ((int8 *) (uintptr) di->rxd64 - di->rxdalign),
+ di->rxdalloc, (di->rxdpa - di->rxdalign),
+ &di->rx_dmah);
+ }
+ else
+ {
+ if (di->txd32)
+ DMA_FREE_CONSISTENT (di->osh,
+ ((int8 *) (uintptr) di->txd32 - di->txdalign),
+ di->txdalloc, (di->txdpa - di->txdalign),
+ &di->tx_dmah);
+ if (di->rxd32)
+ DMA_FREE_CONSISTENT (di->osh,
+ ((int8 *) (uintptr) di->rxd32 - di->rxdalign),
+ di->rxdalloc, (di->rxdpa - di->rxdalign),
+ &di->rx_dmah);
+ }
+
+ /* free packet pointer vectors */
+ if (di->txp)
+ MFREE (di->osh, (void *) di->txp, (di->ntxd * sizeof (void *)));
+ if (di->rxp)
+ MFREE (di->osh, (void *) di->rxp, (di->nrxd * sizeof (void *)));
+
+ /* free tx packet DMA handles */
+ if (di->txp_dmah)
+ MFREE (di->osh, (void *) di->txp_dmah, di->ntxd * sizeof (osldma_t **));
+
+ /* free rx packet DMA handles */
+ if (di->rxp_dmah)
+ MFREE (di->osh, (void *) di->rxp_dmah, di->nrxd * sizeof (osldma_t **));
+
+ /* free our private info structure */
+ MFREE (di->osh, (void *) di, sizeof (dma_info_t));
}
/* return TRUE if this dma engine supports DmaExtendedAddrChanges, otherwise FALSE */
static bool
-_dma_isaddrext(dma_info_t *di)
-{
- if (DMA64_ENAB(di)) {
- /* DMA64 supports full 32 bits or 64 bits. AE is always valid */
-
- /* not all tx or rx channel are available */
- if (di->d64txregs != NULL) {
- if (!_dma64_addrext(di->osh, di->d64txregs)) {
- DMA_ERROR(("%s: _dma_isaddrext: DMA64 tx doesn't have AE set\n",
- di->name));
- ASSERT(0);
- }
- return TRUE;
- } else if (di->d64rxregs != NULL) {
- if (!_dma64_addrext(di->osh, di->d64rxregs)) {
- DMA_ERROR(("%s: _dma_isaddrext: DMA64 rx doesn't have AE set\n",
- di->name));
- ASSERT(0);
- }
- return TRUE;
- }
- return FALSE;
- } else if (di->d32txregs)
- return (_dma32_addrext(di->osh, di->d32txregs));
- else if (di->d32rxregs)
- return (_dma32_addrext(di->osh, di->d32rxregs));
- return FALSE;
+_dma_isaddrext (dma_info_t * di)
+{
+ if (DMA64_ENAB (di))
+ {
+ /* DMA64 supports full 32 bits or 64 bits. AE is always valid */
+
+ /* not all tx or rx channel are available */
+ if (di->d64txregs != NULL)
+ {
+ if (!_dma64_addrext (di->osh, di->d64txregs))
+ {
+ DMA_ERROR (("%s: _dma_isaddrext: DMA64 tx doesn't have AE set\n", di->name));
+ ASSERT (0);
+ }
+ return TRUE;
+ }
+ else if (di->d64rxregs != NULL)
+ {
+ if (!_dma64_addrext (di->osh, di->d64rxregs))
+ {
+ DMA_ERROR (("%s: _dma_isaddrext: DMA64 rx doesn't have AE set\n", di->name));
+ ASSERT (0);
+ }
+ return TRUE;
+ }
+ return FALSE;
+ }
+ else if (di->d32txregs)
+ return (_dma32_addrext (di->osh, di->d32txregs));
+ else if (di->d32rxregs)
+ return (_dma32_addrext (di->osh, di->d32rxregs));
+ return FALSE;
}
/* initialize descriptor table base address */
static void
-_dma_ddtable_init(dma_info_t *di, uint direction, ulong pa)
-{
- if (DMA64_ENAB(di)) {
-
- if ((di->ddoffsetlow != SB_PCI_DMA) || !(pa & PCI32ADDR_HIGH)) {
- if (direction == DMA_TX) {
- W_REG(di->osh, &di->d64txregs->addrlow, (pa + di->ddoffsetlow));
- W_REG(di->osh, &di->d64txregs->addrhigh, di->ddoffsethigh);
- } else {
- W_REG(di->osh, &di->d64rxregs->addrlow, (pa + di->ddoffsetlow));
- W_REG(di->osh, &di->d64rxregs->addrhigh, di->ddoffsethigh);
- }
- } else {
- /* DMA64 32bits address extension */
- uint32 ae;
- ASSERT(di->addrext);
-
- /* shift the high bit(s) from pa to ae */
- ae = (pa & PCI32ADDR_HIGH) >> PCI32ADDR_HIGH_SHIFT;
- pa &= ~PCI32ADDR_HIGH;
-
- if (direction == DMA_TX) {
- W_REG(di->osh, &di->d64txregs->addrlow, (pa + di->ddoffsetlow));
- W_REG(di->osh, &di->d64txregs->addrhigh, di->ddoffsethigh);
- SET_REG(di->osh, &di->d64txregs->control, D64_XC_AE,
- (ae << D64_XC_AE_SHIFT));
- } else {
- W_REG(di->osh, &di->d64rxregs->addrlow, (pa + di->ddoffsetlow));
- W_REG(di->osh, &di->d64rxregs->addrhigh, di->ddoffsethigh);
- SET_REG(di->osh, &di->d64rxregs->control, D64_RC_AE,
- (ae << D64_RC_AE_SHIFT));
- }
- }
-
- } else {
- if ((di->ddoffsetlow != SB_PCI_DMA) || !(pa & PCI32ADDR_HIGH)) {
- if (direction == DMA_TX)
- W_REG(di->osh, &di->d32txregs->addr, (pa + di->ddoffsetlow));
- else
- W_REG(di->osh, &di->d32rxregs->addr, (pa + di->ddoffsetlow));
- } else {
- /* dma32 address extension */
- uint32 ae;
- ASSERT(di->addrext);
-
- /* shift the high bit(s) from pa to ae */
- ae = (pa & PCI32ADDR_HIGH) >> PCI32ADDR_HIGH_SHIFT;
- pa &= ~PCI32ADDR_HIGH;
-
- if (direction == DMA_TX) {
- W_REG(di->osh, &di->d32txregs->addr, (pa + di->ddoffsetlow));
- SET_REG(di->osh, &di->d32txregs->control, XC_AE, ae <<XC_AE_SHIFT);
- } else {
- W_REG(di->osh, &di->d32rxregs->addr, (pa + di->ddoffsetlow));
- SET_REG(di->osh, &di->d32rxregs->control, RC_AE, ae <<RC_AE_SHIFT);
- }
- }
+_dma_ddtable_init (dma_info_t * di, uint direction, ulong pa)
+{
+ if (DMA64_ENAB (di))
+ {
+
+ if ((di->ddoffsetlow != SB_PCI_DMA) || !(pa & PCI32ADDR_HIGH))
+ {
+ if (direction == DMA_TX)
+ {
+ W_REG (di->osh, &di->d64txregs->addrlow,
+ (pa + di->ddoffsetlow));
+ W_REG (di->osh, &di->d64txregs->addrhigh, di->ddoffsethigh);
+ }
+ else
+ {
+ W_REG (di->osh, &di->d64rxregs->addrlow,
+ (pa + di->ddoffsetlow));
+ W_REG (di->osh, &di->d64rxregs->addrhigh, di->ddoffsethigh);
+ }
+ }
+ else
+ {
+ /* DMA64 32bits address extension */
+ uint32 ae;
+ ASSERT (di->addrext);
+
+ /* shift the high bit(s) from pa to ae */
+ ae = (pa & PCI32ADDR_HIGH) >> PCI32ADDR_HIGH_SHIFT;
+ pa &= ~PCI32ADDR_HIGH;
+
+ if (direction == DMA_TX)
+ {
+ W_REG (di->osh, &di->d64txregs->addrlow,
+ (pa + di->ddoffsetlow));
+ W_REG (di->osh, &di->d64txregs->addrhigh, di->ddoffsethigh);
+ SET_REG (di->osh, &di->d64txregs->control, D64_XC_AE,
+ (ae << D64_XC_AE_SHIFT));
+ }
+ else
+ {
+ W_REG (di->osh, &di->d64rxregs->addrlow,
+ (pa + di->ddoffsetlow));
+ W_REG (di->osh, &di->d64rxregs->addrhigh, di->ddoffsethigh);
+ SET_REG (di->osh, &di->d64rxregs->control, D64_RC_AE,
+ (ae << D64_RC_AE_SHIFT));
+ }
+ }
+
+ }
+ else
+ {
+ if ((di->ddoffsetlow != SB_PCI_DMA) || !(pa & PCI32ADDR_HIGH))
+ {
+ if (direction == DMA_TX)
+ W_REG (di->osh, &di->d32txregs->addr, (pa + di->ddoffsetlow));
+ else
+ W_REG (di->osh, &di->d32rxregs->addr, (pa + di->ddoffsetlow));
}
+ else
+ {
+ /* dma32 address extension */
+ uint32 ae;
+ ASSERT (di->addrext);
+
+ /* shift the high bit(s) from pa to ae */
+ ae = (pa & PCI32ADDR_HIGH) >> PCI32ADDR_HIGH_SHIFT;
+ pa &= ~PCI32ADDR_HIGH;
+
+ if (direction == DMA_TX)
+ {
+ W_REG (di->osh, &di->d32txregs->addr, (pa + di->ddoffsetlow));
+ SET_REG (di->osh, &di->d32txregs->control, XC_AE,
+ ae << XC_AE_SHIFT);
+ }
+ else
+ {
+ W_REG (di->osh, &di->d32rxregs->addr, (pa + di->ddoffsetlow));
+ SET_REG (di->osh, &di->d32rxregs->control, RC_AE,
+ ae << RC_AE_SHIFT);
+ }
+ }
+ }
}
static void
-_dma_fifoloopbackenable(dma_info_t *di)
+_dma_fifoloopbackenable (dma_info_t * di)
{
- DMA_TRACE(("%s: dma_fifoloopbackenable\n", di->name));
- if (DMA64_ENAB(di))
- OR_REG(di->osh, &di->d64txregs->control, D64_XC_LE);
- else
- OR_REG(di->osh, &di->d32txregs->control, XC_LE);
+ DMA_TRACE (("%s: dma_fifoloopbackenable\n", di->name));
+ if (DMA64_ENAB (di))
+ OR_REG (di->osh, &di->d64txregs->control, D64_XC_LE);
+ else
+ OR_REG (di->osh, &di->d32txregs->control, XC_LE);
}
static void
-_dma_rxinit(dma_info_t *di)
+_dma_rxinit (dma_info_t * di)
{
- DMA_TRACE(("%s: dma_rxinit\n", di->name));
+ DMA_TRACE (("%s: dma_rxinit\n", di->name));
- if (di->nrxd == 0)
- return;
+ if (di->nrxd == 0)
+ return;
- di->rxin = di->rxout = 0;
+ di->rxin = di->rxout = 0;
- /* clear rx descriptor ring */
- if (DMA64_ENAB(di)) {
- BZERO_SM((void *)(uintptr)di->rxd64, (di->nrxd * sizeof(dma64dd_t)));
- _dma_rxenable(di);
- _dma_ddtable_init(di, DMA_RX, di->rxdpa);
- } else {
- BZERO_SM((void *)(uintptr)di->rxd32, (di->nrxd * sizeof(dma32dd_t)));
- _dma_rxenable(di);
- _dma_ddtable_init(di, DMA_RX, di->rxdpa);
- }
+ /* clear rx descriptor ring */
+ if (DMA64_ENAB (di))
+ BZERO_SM ((void *) (uintptr) di->rxd64, (di->nrxd * sizeof (dma64dd_t)));
+ else
+ BZERO_SM ((void *) (uintptr) di->rxd32, (di->nrxd * sizeof (dma32dd_t)));
+
+ _dma_rxenable (di);
+ _dma_ddtable_init (di, DMA_RX, di->rxdpa);
}
static void
-_dma_rxenable(dma_info_t *di)
+_dma_rxenable (dma_info_t * di)
{
- DMA_TRACE(("%s: dma_rxenable\n", di->name));
-
- if (DMA64_ENAB(di))
- W_REG(di->osh, &di->d64rxregs->control,
- ((di->rxoffset << D64_RC_RO_SHIFT) | D64_RC_RE));
- else
- W_REG(di->osh, &di->d32rxregs->control, ((di->rxoffset << RC_RO_SHIFT) | RC_RE));
+ DMA_TRACE (("%s: dma_rxenable\n", di->name));
+
+ if (DMA64_ENAB (di))
+ W_REG (di->osh, &di->d64rxregs->control,
+ ((di->rxoffset << D64_RC_RO_SHIFT) | D64_RC_RE));
+ else
+ W_REG (di->osh, &di->d32rxregs->control,
+ ((di->rxoffset << RC_RO_SHIFT) | RC_RE));
}
/* !! rx entry routine, returns a pointer to the next frame received,
* or NULL if there are no more
*/
static void *
-_dma_rx(dma_info_t *di)
-{
- void *p;
- uint len;
- int skiplen = 0;
-
- while ((p = _dma_getnextrxp(di, FALSE))) {
- /* skip giant packets which span multiple rx descriptors */
- if (skiplen > 0) {
- skiplen -= di->rxbufsize;
- if (skiplen < 0)
- skiplen = 0;
- PKTFREE(di->osh, p, FALSE);
- continue;
- }
-
- len = ltoh16(*(uint16*)(PKTDATA(di->osh, p)));
- DMA_TRACE(("%s: dma_rx len %d\n", di->name, len));
-
- /* bad frame length check */
- if (len > (di->rxbufsize - di->rxoffset)) {
- DMA_ERROR(("%s: dma_rx: bad frame length (%d)\n", di->name, len));
- if (len > 0)
- skiplen = len - (di->rxbufsize - di->rxoffset);
- PKTFREE(di->osh, p, FALSE);
- di->hnddma.rxgiants++;
- continue;
- }
-
- /* set actual length */
- PKTSETLEN(di->osh, p, (di->rxoffset + len));
-
- break;
+_dma_rx (dma_info_t * di)
+{
+ void *p;
+ uint len;
+ int skiplen = 0;
+
+ while ((p = _dma_getnextrxp (di, FALSE)))
+ {
+ /* skip giant packets which span multiple rx descriptors */
+ if (skiplen > 0)
+ {
+ skiplen -= di->rxbufsize;
+ if (skiplen < 0)
+ skiplen = 0;
+ PKTFREE (di->osh, p, FALSE);
+ continue;
+ }
+
+ len = ltoh16 (*(uint16 *) (PKTDATA (di->osh, p)));
+ DMA_TRACE (("%s: dma_rx len %d\n", di->name, len));
+
+ /* bad frame length check */
+ if (len > (di->rxbufsize - di->rxoffset))
+ {
+ DMA_ERROR (("%s: dma_rx: bad frame length (%d)\n", di->name, len));
+ if (len > 0)
+ skiplen = len - (di->rxbufsize - di->rxoffset);
+ PKTFREE (di->osh, p, FALSE);
+ di->hnddma.rxgiants++;
+ continue;
}
- return (p);
+ /* set actual length */
+ PKTSETLEN (di->osh, p, (di->rxoffset + len));
+
+ break;
+ }
+
+ return (p);
}
/* post receive buffers */
static void
-_dma_rxfill(dma_info_t *di)
-{
- void *p;
- uint rxin, rxout;
- uint32 flags = 0;
- uint n;
- uint i;
- uint32 pa;
- uint extra_offset = 0;
-
- /*
- * Determine how many receive buffers we're lacking
- * from the full complement, allocate, initialize,
- * and post them, then update the chip rx lastdscr.
- */
-
- rxin = di->rxin;
- rxout = di->rxout;
-
- n = di->nrxpost - NRXDACTIVE(rxin, rxout);
-
- DMA_TRACE(("%s: dma_rxfill: post %d\n", di->name, n));
-
- if (di->rxbufsize > BCMEXTRAHDROOM)
- extra_offset = BCMEXTRAHDROOM;
-
- for (i = 0; i < n; i++) {
- /* the di->rxbufsize doesn't include the extra headroom, we need to add it to the
- size to be allocated
- */
- if ((p = PKTGET(di->osh, di->rxbufsize + extra_offset,
- FALSE)) == NULL) {
- DMA_ERROR(("%s: dma_rxfill: out of rxbufs\n", di->name));
- di->hnddma.rxnobuf++;
- break;
- }
- /* reserve an extra headroom, if applicable */
- if (extra_offset)
- PKTPULL(di->osh, p, extra_offset);
-
- /* Do a cached write instead of uncached write since DMA_MAP
- * will flush the cache.
- */
- *(uint32*)(PKTDATA(di->osh, p)) = 0;
-
- pa = (uint32) DMA_MAP(di->osh, PKTDATA(di->osh, p),
- di->rxbufsize, DMA_RX, p);
-
- ASSERT(ISALIGNED(pa, 4));
-
- /* save the free packet pointer */
- ASSERT(di->rxp[rxout] == NULL);
- di->rxp[rxout] = p;
-
- /* reset flags for each descriptor */
- flags = 0;
- if (DMA64_ENAB(di)) {
- if (rxout == (di->nrxd - 1))
- flags = D64_CTRL1_EOT;
-
- dma64_dd_upd(di, di->rxd64, pa, rxout, &flags, di->rxbufsize);
- } else {
- if (rxout == (di->nrxd - 1))
- flags = CTRL_EOT;
-
- dma32_dd_upd(di, di->rxd32, pa, rxout, &flags, di->rxbufsize);
- }
- rxout = NEXTRXD(rxout);
+_dma_rxfill (dma_info_t * di)
+{
+ void *p;
+ uint rxin, rxout;
+ uint32 flags = 0;
+ uint n;
+ uint i;
+ uint32 pa;
+ uint extra_offset = 0;
+
+ /*
+ * Determine how many receive buffers we're lacking
+ * from the full complement, allocate, initialize,
+ * and post them, then update the chip rx lastdscr.
+ */
+
+ rxin = di->rxin;
+ rxout = di->rxout;
+
+ n = di->nrxpost - NRXDACTIVE (rxin, rxout);
+
+ DMA_TRACE (("%s: dma_rxfill: post %d\n", di->name, n));
+
+ if (di->rxbufsize > BCMEXTRAHDROOM)
+ extra_offset = BCMEXTRAHDROOM;
+
+ for (i = 0; i < n; i++)
+ {
+ /* the di->rxbufsize doesn't include the extra headroom, we need to add it to the
+ size to be allocated
+ */
+ if ((p = PKTGET (di->osh, di->rxbufsize + extra_offset, FALSE)) == NULL)
+ {
+ DMA_ERROR (("%s: dma_rxfill: out of rxbufs\n", di->name));
+ di->hnddma.rxnobuf++;
+ break;
}
+ /* reserve an extra headroom, if applicable */
+ if (extra_offset)
+ PKTPULL (di->osh, p, extra_offset);
- di->rxout = rxout;
+ /* Do a cached write instead of uncached write since DMA_MAP
+ * will flush the cache.
+ */
+ *(uint32 *) (PKTDATA (di->osh, p)) = 0;
- /* update the chip lastdscr pointer */
- if (DMA64_ENAB(di)) {
- W_REG(di->osh, &di->d64rxregs->ptr, I2B(rxout, dma64dd_t));
- } else {
- W_REG(di->osh, &di->d32rxregs->ptr, I2B(rxout, dma32dd_t));
- }
-}
+ pa = (uint32) DMA_MAP (di->osh, PKTDATA (di->osh, p),
+ di->rxbufsize, DMA_RX, p, &di->rxp_dmah[rxout]);
-/* like getnexttxp but no reclaim */
-static void *
-_dma_peeknexttxp(dma_info_t *di)
-{
- uint end, i;
+ ASSERT (ISALIGNED (pa, 4));
+
+ /* save the free packet pointer */
+ ASSERT (di->rxp[rxout] == NULL);
+ di->rxp[rxout] = p;
- if (di->ntxd == 0)
- return (NULL);
+ /* reset flags for each descriptor */
+ flags = 0;
+ if (DMA64_ENAB (di))
+ {
+ if (rxout == (di->nrxd - 1))
+ flags = D64_CTRL1_EOT;
- if (DMA64_ENAB(di)) {
- end = B2I(R_REG(di->osh, &di->d64txregs->status0) & D64_XS0_CD_MASK, dma64dd_t);
- } else {
- end = B2I(R_REG(di->osh, &di->d32txregs->status) & XS_CD_MASK, dma32dd_t);
+ dma64_dd_upd (di, di->rxd64, pa, rxout, &flags, di->rxbufsize);
}
+ else
+ {
+ if (rxout == (di->nrxd - 1))
+ flags = CTRL_EOT;
- for (i = di->txin; i != end; i = NEXTTXD(i))
- if (di->txp[i])
- return (di->txp[i]);
+ dma32_dd_upd (di, di->rxd32, pa, rxout, &flags, di->rxbufsize);
+ }
+ rxout = NEXTRXD (rxout);
+ }
+
+ di->rxout = rxout;
+
+ /* update the chip lastdscr pointer */
+ if (DMA64_ENAB (di))
+ {
+ W_REG (di->osh, &di->d64rxregs->ptr, I2B (rxout, dma64dd_t));
+ }
+ else
+ {
+ W_REG (di->osh, &di->d32rxregs->ptr, I2B (rxout, dma32dd_t));
+ }
+}
- return (NULL);
+/* like getnexttxp but no reclaim */
+static void *
+_dma_peeknexttxp (dma_info_t * di)
+{
+ uint end, i;
+
+ if (di->ntxd == 0)
+ return (NULL);
+
+ if (DMA64_ENAB (di))
+ {
+ end =
+ B2I (R_REG (di->osh, &di->d64txregs->status0) & D64_XS0_CD_MASK,
+ dma64dd_t);
+ }
+ else
+ {
+ end =
+ B2I (R_REG (di->osh, &di->d32txregs->status) & XS_CD_MASK, dma32dd_t);
+ }
+
+ for (i = di->txin; i != end; i = NEXTTXD (i))
+ if (di->txp[i])
+ return (di->txp[i]);
+
+ return (NULL);
}
static void
-_dma_rxreclaim(dma_info_t *di)
+_dma_rxreclaim (dma_info_t * di)
{
- void *p;
+ void *p;
- /* "unused local" warning suppression for OSLs that
- * define PKTFREE() without using the di->osh arg
- */
- di = di;
+ /* "unused local" warning suppression for OSLs that
+ * define PKTFREE() without using the di->osh arg
+ */
+ di = di;
- DMA_TRACE(("%s: dma_rxreclaim\n", di->name));
+ DMA_TRACE (("%s: dma_rxreclaim\n", di->name));
- while ((p = _dma_getnextrxp(di, TRUE)))
- PKTFREE(di->osh, p, FALSE);
+ while ((p = _dma_getnextrxp (di, TRUE)))
+ PKTFREE (di->osh, p, FALSE);
}
static void *
-_dma_getnextrxp(dma_info_t *di, bool forceall)
+_dma_getnextrxp (dma_info_t * di, bool forceall)
{
- if (di->nrxd == 0)
- return (NULL);
-
- if (DMA64_ENAB(di)) {
- return dma64_getnextrxp(di, forceall);
- } else {
- return dma32_getnextrxp(di, forceall);
- }
+ if (di->nrxd == 0)
+ return (NULL);
+
+ if (DMA64_ENAB (di))
+ {
+ return dma64_getnextrxp (di, forceall);
+ }
+ else
+ {
+ return dma32_getnextrxp (di, forceall);
+ }
}
static void
-_dma_txblock(dma_info_t *di)
+_dma_txblock (dma_info_t * di)
{
- di->hnddma.txavail = 0;
+ di->hnddma.txavail = 0;
}
static void
-_dma_txunblock(dma_info_t *di)
+_dma_txunblock (dma_info_t * di)
{
- di->hnddma.txavail = di->ntxd - NTXDACTIVE(di->txin, di->txout) - 1;
+ di->hnddma.txavail = di->ntxd - NTXDACTIVE (di->txin, di->txout) - 1;
}
static uint
-_dma_txactive(dma_info_t *di)
+_dma_txactive (dma_info_t * di)
{
- return (NTXDACTIVE(di->txin, di->txout));
+ return (NTXDACTIVE (di->txin, di->txout));
}
static void
-_dma_counterreset(dma_info_t *di)
+_dma_counterreset (dma_info_t * di)
{
- /* reset all software counter */
- di->hnddma.rxgiants = 0;
- di->hnddma.rxnobuf = 0;
- di->hnddma.txnobuf = 0;
+ /* reset all software counter */
+ di->hnddma.rxgiants = 0;
+ di->hnddma.rxnobuf = 0;
+ di->hnddma.txnobuf = 0;
}
/* get the address of the var in order to change later */
static uintptr
-_dma_getvar(dma_info_t *di, const char *name)
+_dma_getvar (dma_info_t * di, const char *name)
{
- if (!strcmp(name, "&txavail"))
- return ((uintptr) &(di->hnddma.txavail));
- else {
- ASSERT(0);
- }
- return (0);
+ if (!strcmp (name, "&txavail"))
+ return ((uintptr) & (di->hnddma.txavail));
+ else
+ {
+ ASSERT (0);
+ }
+ return (0);
}
void
-dma_txpioloopback(osl_t *osh, dma32regs_t *regs)
+dma_txpioloopback (osl_t * osh, dma32regs_t * regs)
{
- OR_REG(osh, ®s->control, XC_LE);
+ OR_REG (osh, ®s->control, XC_LE);
}
+#ifdef BCMDBG
+static void
+dma32_dumpring (dma_info_t * di, struct bcmstrbuf *b, dma32dd_t * ring,
+ uint start, uint end, uint max_num)
+{
+ uint i;
+
+ for (i = start; i != end; i = XXD ((i + 1), max_num))
+ {
+ /* in the format of high->low 8 bytes */
+ bcm_bprintf (b, "ring index %d: 0x%x %x\n", i, ring[i].addr,
+ ring[i].ctrl);
+ }
+}
+
+static void
+dma32_dumptx (dma_info_t * di, struct bcmstrbuf *b, bool dumpring)
+{
+ if (di->ntxd == 0)
+ return;
+
+ bcm_bprintf (b, "DMA32: txd32 %p txdpa 0x%lx txp %p txin %d txout %d "
+ "txavail %d\n", di->txd32, di->txdpa, di->txp, di->txin,
+ di->txout, di->hnddma.txavail);
+
+ bcm_bprintf (b, "xmtcontrol 0x%x xmtaddr 0x%x xmtptr 0x%x xmtstatus 0x%x\n",
+ R_REG (di->osh, &di->d32txregs->control),
+ R_REG (di->osh, &di->d32txregs->addr),
+ R_REG (di->osh, &di->d32txregs->ptr),
+ R_REG (di->osh, &di->d32txregs->status));
+
+ if (dumpring && di->txd32)
+ dma32_dumpring (di, b, di->txd32, di->txin, di->txout, di->ntxd);
+}
+
+static void
+dma32_dumprx (dma_info_t * di, struct bcmstrbuf *b, bool dumpring)
+{
+ if (di->nrxd == 0)
+ return;
+
+ bcm_bprintf (b, "DMA32: rxd32 %p rxdpa 0x%lx rxp %p rxin %d rxout %d\n",
+ di->rxd32, di->rxdpa, di->rxp, di->rxin, di->rxout);
+
+ bcm_bprintf (b, "rcvcontrol 0x%x rcvaddr 0x%x rcvptr 0x%x rcvstatus 0x%x\n",
+ R_REG (di->osh, &di->d32rxregs->control),
+ R_REG (di->osh, &di->d32rxregs->addr),
+ R_REG (di->osh, &di->d32rxregs->ptr),
+ R_REG (di->osh, &di->d32rxregs->status));
+ if (di->rxd32 && dumpring)
+ dma32_dumpring (di, b, di->rxd32, di->rxin, di->rxout, di->nrxd);
+}
+
+static void
+dma32_dump (dma_info_t * di, struct bcmstrbuf *b, bool dumpring)
+{
+ dma32_dumptx (di, b, dumpring);
+ dma32_dumprx (di, b, dumpring);
+}
+
+static void
+dma64_dumpring (dma_info_t * di, struct bcmstrbuf *b, dma64dd_t * ring,
+ uint start, uint end, uint max_num)
+{
+ uint i;
+
+ for (i = start; i != end; i = XXD ((i + 1), max_num))
+ {
+ /* in the format of high->low 16 bytes */
+ bcm_bprintf (b, "ring index %d: 0x%x %x %x %x\n",
+ i, ring[i].addrhigh, ring[i].addrlow, ring[i].ctrl2,
+ ring[i].ctrl1);
+ }
+}
+
+static void
+dma64_dumptx (dma_info_t * di, struct bcmstrbuf *b, bool dumpring)
+{
+ if (di->ntxd == 0)
+ return;
+
+ bcm_bprintf (b, "DMA64: txd64 %p txdpa 0x%lx txp %p txin %d txout %d "
+ "txavail %d\n", di->txd64, di->txdpa, di->txp, di->txin,
+ di->txout, di->hnddma.txavail);
+
+ bcm_bprintf (b, "xmtcontrol 0x%x xmtaddrlow 0x%x xmtaddrhigh 0x%x "
+ "xmtptr 0x%x xmtstatus0 0x%x xmtstatus1 0x%x\n",
+ R_REG (di->osh, &di->d64txregs->control),
+ R_REG (di->osh, &di->d64txregs->addrlow),
+ R_REG (di->osh, &di->d64txregs->addrhigh),
+ R_REG (di->osh, &di->d64txregs->ptr),
+ R_REG (di->osh, &di->d64txregs->status0),
+ R_REG (di->osh, &di->d64txregs->status1));
+
+ if (dumpring && di->txd64)
+ {
+ dma64_dumpring (di, b, di->txd64, di->txin, di->txout, di->ntxd);
+ }
+}
+
+static void
+dma64_dumprx (dma_info_t * di, struct bcmstrbuf *b, bool dumpring)
+{
+ if (di->nrxd == 0)
+ return;
+
+ bcm_bprintf (b, "DMA64: rxd64 %p rxdpa 0x%lx rxp %p rxin %d rxout %d\n",
+ di->rxd64, di->rxdpa, di->rxp, di->rxin, di->rxout);
+
+ bcm_bprintf (b, "rcvcontrol 0x%x rcvaddrlow 0x%x rcvaddrhigh 0x%x rcvptr "
+ "0x%x rcvstatus0 0x%x rcvstatus1 0x%x\n",
+ R_REG (di->osh, &di->d64rxregs->control),
+ R_REG (di->osh, &di->d64rxregs->addrlow),
+ R_REG (di->osh, &di->d64rxregs->addrhigh),
+ R_REG (di->osh, &di->d64rxregs->ptr),
+ R_REG (di->osh, &di->d64rxregs->status0),
+ R_REG (di->osh, &di->d64rxregs->status1));
+ if (di->rxd64 && dumpring)
+ {
+ dma64_dumpring (di, b, di->rxd64, di->rxin, di->rxout, di->nrxd);
+ }
+}
+
+static void
+dma64_dump (dma_info_t * di, struct bcmstrbuf *b, bool dumpring)
+{
+ dma64_dumptx (di, b, dumpring);
+ dma64_dumprx (di, b, dumpring);
+}
+
+#endif /* BCMDBG */
/* 32 bits DMA functions */
static void
-dma32_txinit(dma_info_t *di)
+dma32_txinit (dma_info_t * di)
{
- DMA_TRACE(("%s: dma_txinit\n", di->name));
+ DMA_TRACE (("%s: dma_txinit\n", di->name));
- if (di->ntxd == 0)
- return;
+ if (di->ntxd == 0)
+ return;
- di->txin = di->txout = 0;
- di->hnddma.txavail = di->ntxd - 1;
+ di->txin = di->txout = 0;
+ di->hnddma.txavail = di->ntxd - 1;
- /* clear tx descriptor ring */
- BZERO_SM((void *)(uintptr)di->txd32, (di->ntxd * sizeof(dma32dd_t)));
- W_REG(di->osh, &di->d32txregs->control, XC_XE);
- _dma_ddtable_init(di, DMA_TX, di->txdpa);
+ /* clear tx descriptor ring */
+ BZERO_SM ((void *) (uintptr) di->txd32, (di->ntxd * sizeof (dma32dd_t)));
+ W_REG (di->osh, &di->d32txregs->control, XC_XE);
+ _dma_ddtable_init (di, DMA_TX, di->txdpa);
}
static bool
-dma32_txenabled(dma_info_t *di)
+dma32_txenabled (dma_info_t * di)
{
- uint32 xc;
+ uint32 xc;
- /* If the chip is dead, it is not enabled :-) */
- xc = R_REG(di->osh, &di->d32txregs->control);
- return ((xc != 0xffffffff) && (xc & XC_XE));
+ /* If the chip is dead, it is not enabled :-) */
+ xc = R_REG (di->osh, &di->d32txregs->control);
+ return ((xc != 0xffffffff) && (xc & XC_XE));
}
static void
-dma32_txsuspend(dma_info_t *di)
+dma32_txsuspend (dma_info_t * di)
{
- DMA_TRACE(("%s: dma_txsuspend\n", di->name));
+ DMA_TRACE (("%s: dma_txsuspend\n", di->name));
- if (di->ntxd == 0)
- return;
+ if (di->ntxd == 0)
+ return;
- OR_REG(di->osh, &di->d32txregs->control, XC_SE);
+ OR_REG (di->osh, &di->d32txregs->control, XC_SE);
}
static void
-dma32_txresume(dma_info_t *di)
+dma32_txresume (dma_info_t * di)
{
- DMA_TRACE(("%s: dma_txresume\n", di->name));
+ DMA_TRACE (("%s: dma_txresume\n", di->name));
- if (di->ntxd == 0)
- return;
+ if (di->ntxd == 0)
+ return;
- AND_REG(di->osh, &di->d32txregs->control, ~XC_SE);
+ AND_REG (di->osh, &di->d32txregs->control, ~XC_SE);
}
static bool
-dma32_txsuspended(dma_info_t *di)
+dma32_txsuspended (dma_info_t * di)
{
- return (di->ntxd == 0) || ((R_REG(di->osh, &di->d32txregs->control) & XC_SE) == XC_SE);
+ return (di->ntxd == 0)
+ || ((R_REG (di->osh, &di->d32txregs->control) & XC_SE) == XC_SE);
}
static void
-dma32_txreclaim(dma_info_t *di, bool forceall)
+dma32_txreclaim (dma_info_t * di, bool forceall)
{
- void *p;
+ void *p;
- DMA_TRACE(("%s: dma_txreclaim %s\n", di->name, forceall ? "all" : ""));
+ DMA_TRACE (("%s: dma_txreclaim %s\n", di->name, forceall ? "all" : ""));
- while ((p = dma32_getnexttxp(di, forceall)))
- PKTFREE(di->osh, p, TRUE);
+ while ((p = dma32_getnexttxp (di, forceall)))
+ PKTFREE (di->osh, p, TRUE);
}
static bool
-dma32_txstopped(dma_info_t *di)
+dma32_txstopped (dma_info_t * di)
{
- return ((R_REG(di->osh, &di->d32txregs->status) & XS_XS_MASK) == XS_XS_STOPPED);
+ return ((R_REG (di->osh, &di->d32txregs->status) & XS_XS_MASK) ==
+ XS_XS_STOPPED);
}
static bool
-dma32_rxstopped(dma_info_t *di)
+dma32_rxstopped (dma_info_t * di)
{
- return ((R_REG(di->osh, &di->d32rxregs->status) & RS_RS_MASK) == RS_RS_STOPPED);
+ return ((R_REG (di->osh, &di->d32rxregs->status) & RS_RS_MASK) ==
+ RS_RS_STOPPED);
}
static bool
-dma32_alloc(dma_info_t *di, uint direction)
-{
- uint size;
- uint ddlen;
- void *va;
-
- ddlen = sizeof(dma32dd_t);
-
- size = (direction == DMA_TX) ? (di->ntxd * ddlen) : (di->nrxd * ddlen);
-
- if (!ISALIGNED(DMA_CONSISTENT_ALIGN, D32RINGALIGN))
- size += D32RINGALIGN;
-
-
- if (direction == DMA_TX) {
- if ((va = DMA_ALLOC_CONSISTENT(di->osh, size, &di->txdpa, &di->tx_dmah)) == NULL) {
- DMA_ERROR(("%s: dma_attach: DMA_ALLOC_CONSISTENT(ntxd) failed\n",
- di->name));
- return FALSE;
- }
-
- di->txd32 = (dma32dd_t *) ROUNDUP((uintptr)va, D32RINGALIGN);
- di->txdalign = (uint)((int8*)(uintptr)di->txd32 - (int8*)va);
- di->txdpa += di->txdalign;
- di->txdalloc = size;
- ASSERT(ISALIGNED((uintptr)di->txd32, D32RINGALIGN));
- } else {
- if ((va = DMA_ALLOC_CONSISTENT(di->osh, size, &di->rxdpa, &di->rx_dmah)) == NULL) {
- DMA_ERROR(("%s: dma_attach: DMA_ALLOC_CONSISTENT(nrxd) failed\n",
- di->name));
- return FALSE;
- }
- di->rxd32 = (dma32dd_t *) ROUNDUP((uintptr)va, D32RINGALIGN);
- di->rxdalign = (uint)((int8*)(uintptr)di->rxd32 - (int8*)va);
- di->rxdpa += di->rxdalign;
- di->rxdalloc = size;
- ASSERT(ISALIGNED((uintptr)di->rxd32, D32RINGALIGN));
+dma32_alloc (dma_info_t * di, uint direction)
+{
+ uint size;
+ uint ddlen;
+ void *va;
+
+ ddlen = sizeof (dma32dd_t);
+
+ size = (direction == DMA_TX) ? (di->ntxd * ddlen) : (di->nrxd * ddlen);
+
+ if (!ISALIGNED (DMA_CONSISTENT_ALIGN, D32RINGALIGN))
+ size += D32RINGALIGN;
+
+
+ if (direction == DMA_TX)
+ {
+ if ((va =
+ DMA_ALLOC_CONSISTENT (di->osh, size, &di->txdpa,
+ &di->tx_dmah)) == NULL)
+ {
+ DMA_ERROR (("%s: dma_attach: DMA_ALLOC_CONSISTENT(ntxd) failed\n",
+ di->name));
+ return FALSE;
}
- return TRUE;
+ di->txd32 = (dma32dd_t *) ROUNDUP ((uintptr) va, D32RINGALIGN);
+ di->txdalign = (uint) ((int8 *) (uintptr) di->txd32 - (int8 *) va);
+ di->txdpa += di->txdalign;
+ di->txdalloc = size;
+ ASSERT (ISALIGNED ((uintptr) di->txd32, D32RINGALIGN));
+ }
+ else
+ {
+ if ((va =
+ DMA_ALLOC_CONSISTENT (di->osh, size, &di->rxdpa,
+ &di->rx_dmah)) == NULL)
+ {
+ DMA_ERROR (("%s: dma_attach: DMA_ALLOC_CONSISTENT(nrxd) failed\n",
+ di->name));
+ return FALSE;
+ }
+ di->rxd32 = (dma32dd_t *) ROUNDUP ((uintptr) va, D32RINGALIGN);
+ di->rxdalign = (uint) ((int8 *) (uintptr) di->rxd32 - (int8 *) va);
+ di->rxdpa += di->rxdalign;
+ di->rxdalloc = size;
+ ASSERT (ISALIGNED ((uintptr) di->rxd32, D32RINGALIGN));
+ }
+
+ return TRUE;
}
static bool
-dma32_txreset(dma_info_t *di)
+dma32_txreset (dma_info_t * di)
{
- uint32 status;
+ uint32 status;
- if (di->ntxd == 0)
- return TRUE;
+ if (di->ntxd == 0)
+ return TRUE;
- /* suspend tx DMA first */
- W_REG(di->osh, &di->d32txregs->control, XC_SE);
- SPINWAIT(((status = (R_REG(di->osh, &di->d32txregs->status) & XS_XS_MASK))
- != XS_XS_DISABLED) &&
- (status != XS_XS_IDLE) &&
- (status != XS_XS_STOPPED),
- (10000));
+ /* suspend tx DMA first */
+ W_REG (di->osh, &di->d32txregs->control, XC_SE);
+ SPINWAIT (((status = (R_REG (di->osh, &di->d32txregs->status) & XS_XS_MASK))
+ != XS_XS_DISABLED) &&
+ (status != XS_XS_IDLE) && (status != XS_XS_STOPPED), (10000));
- W_REG(di->osh, &di->d32txregs->control, 0);
- SPINWAIT(((status = (R_REG(di->osh,
- &di->d32txregs->status) & XS_XS_MASK)) != XS_XS_DISABLED),
- 10000);
+ W_REG (di->osh, &di->d32txregs->control, 0);
+ SPINWAIT (((status = (R_REG (di->osh,
+ &di->d32txregs->status) & XS_XS_MASK)) !=
+ XS_XS_DISABLED), 10000);
- /* wait for the last transaction to complete */
- OSL_DELAY(300);
+ /* wait for the last transaction to complete */
+ OSL_DELAY (300);
- return (status == XS_XS_DISABLED);
+ return (status == XS_XS_DISABLED);
}
static bool
-dma32_rxidle(dma_info_t *di)
+dma32_rxidle (dma_info_t * di)
{
- DMA_TRACE(("%s: dma_rxidle\n", di->name));
+ DMA_TRACE (("%s: dma_rxidle\n", di->name));
- if (di->nrxd == 0)
- return TRUE;
+ if (di->nrxd == 0)
+ return TRUE;
- return ((R_REG(di->osh, &di->d32rxregs->status) & RS_CD_MASK) ==
- R_REG(di->osh, &di->d32rxregs->ptr));
+ return ((R_REG (di->osh, &di->d32rxregs->status) & RS_CD_MASK) ==
+ R_REG (di->osh, &di->d32rxregs->ptr));
}
static bool
-dma32_rxreset(dma_info_t *di)
+dma32_rxreset (dma_info_t * di)
{
- uint32 status;
+ uint32 status;
- if (di->nrxd == 0)
- return TRUE;
+ if (di->nrxd == 0)
+ return TRUE;
- W_REG(di->osh, &di->d32rxregs->control, 0);
- SPINWAIT(((status = (R_REG(di->osh,
- &di->d32rxregs->status) & RS_RS_MASK)) != RS_RS_DISABLED),
- 10000);
+ W_REG (di->osh, &di->d32rxregs->control, 0);
+ SPINWAIT (((status = (R_REG (di->osh,
+ &di->d32rxregs->status) & RS_RS_MASK)) !=
+ RS_RS_DISABLED), 10000);
- return (status == RS_RS_DISABLED);
+ return (status == RS_RS_DISABLED);
}
static bool
-dma32_rxenabled(dma_info_t *di)
+dma32_rxenabled (dma_info_t * di)
{
- uint32 rc;
+ uint32 rc;
- rc = R_REG(di->osh, &di->d32rxregs->control);
- return ((rc != 0xffffffff) && (rc & RC_RE));
+ rc = R_REG (di->osh, &di->d32rxregs->control);
+ return ((rc != 0xffffffff) && (rc & RC_RE));
}
static bool
-dma32_txsuspendedidle(dma_info_t *di)
+dma32_txsuspendedidle (dma_info_t * di)
{
- if (di->ntxd == 0)
- return TRUE;
+ if (di->ntxd == 0)
+ return TRUE;
- if (!(R_REG(di->osh, &di->d32txregs->control) & XC_SE))
- return 0;
+ if (!(R_REG (di->osh, &di->d32txregs->control) & XC_SE))
+ return 0;
- if ((R_REG(di->osh, &di->d32txregs->status) & XS_XS_MASK) != XS_XS_IDLE)
- return 0;
+ if ((R_REG (di->osh, &di->d32txregs->status) & XS_XS_MASK) != XS_XS_IDLE)
+ return 0;
- OSL_DELAY(2);
- return ((R_REG(di->osh, &di->d32txregs->status) & XS_XS_MASK) == XS_XS_IDLE);
+ OSL_DELAY (2);
+ return ((R_REG (di->osh, &di->d32txregs->status) & XS_XS_MASK) ==
+ XS_XS_IDLE);
}
/* !! tx entry routine
* dma buffers can cross 4 Kbyte page boundaries.
*/
static int
-dma32_txfast(dma_info_t *di, void *p0, bool commit)
-{
- void *p, *next;
- uchar *data;
- uint len;
- uint txout;
- uint32 flags = 0;
- uint32 pa;
-
- DMA_TRACE(("%s: dma_txfast\n", di->name));
-
- txout = di->txout;
-
- /*
- * Walk the chain of packet buffers
- * allocating and initializing transmit descriptor entries.
- */
- for (p = p0; p; p = next) {
- data = PKTDATA(di->osh, p);
- len = PKTLEN(di->osh, p);
- next = PKTNEXT(di->osh, p);
-
- /* return nonzero if out of tx descriptors */
- if (NEXTTXD(txout) == di->txin)
- goto outoftxd;
-
- if (len == 0)
- continue;
-
- /* get physical address of buffer start */
- pa = (uint32) DMA_MAP(di->osh, data, len, DMA_TX, p);
-
- flags = 0;
- if (p == p0)
- flags |= CTRL_SOF;
- if (next == NULL)
- flags |= (CTRL_IOC | CTRL_EOF);
- if (txout == (di->ntxd - 1))
- flags |= CTRL_EOT;
-
- dma32_dd_upd(di, di->txd32, pa, txout, &flags, len);
- ASSERT(di->txp[txout] == NULL);
-
- txout = NEXTTXD(txout);
- }
+dma32_txfast (dma_info_t * di, void *p0, bool commit)
+{
+ void *p, *next;
+ uchar *data;
+ uint len;
+ uint txout;
+ uint32 flags = 0;
+ uint32 pa;
+
+ DMA_TRACE (("%s: dma_txfast\n", di->name));
+
+ txout = di->txout;
+
+ /*
+ * Walk the chain of packet buffers
+ * allocating and initializing transmit descriptor entries.
+ */
+ for (p = p0; p; p = next)
+ {
+ data = PKTDATA (di->osh, p);
+ len = PKTLEN (di->osh, p);
+ next = PKTNEXT (di->osh, p);
+
+ /* return nonzero if out of tx descriptors */
+ if (NEXTTXD (txout) == di->txin)
+ goto outoftxd;
+
+ if (len == 0)
+ continue;
+
+ /* get physical address of buffer start */
+ pa =
+ (uint32) DMA_MAP (di->osh, data, len, DMA_TX, p,
+ &di->txp_dmah[txout]);
+
+ flags = 0;
+ if (p == p0)
+ flags |= CTRL_SOF;
+ if (next == NULL)
+ flags |= (CTRL_IOC | CTRL_EOF);
+ if (txout == (di->ntxd - 1))
+ flags |= CTRL_EOT;
- /* if last txd eof not set, fix it */
- if (!(flags & CTRL_EOF))
- W_SM(&di->txd32[PREVTXD(txout)].ctrl, BUS_SWAP32(flags | CTRL_IOC | CTRL_EOF));
+ dma32_dd_upd (di, di->txd32, pa, txout, &flags, len);
+ ASSERT (di->txp[txout] == NULL);
- /* save the packet */
- di->txp[PREVTXD(txout)] = p0;
+ txout = NEXTTXD (txout);
+ }
- /* bump the tx descriptor index */
- di->txout = txout;
+ /* if last txd eof not set, fix it */
+ if (!(flags & CTRL_EOF))
+ W_SM (&di->txd32[PREVTXD (txout)].ctrl,
+ BUS_SWAP32 (flags | CTRL_IOC | CTRL_EOF));
- /* kick the chip */
- if (commit)
- W_REG(di->osh, &di->d32txregs->ptr, I2B(txout, dma32dd_t));
+ /* save the packet */
+ di->txp[PREVTXD (txout)] = p0;
- /* tx flow control */
- di->hnddma.txavail = di->ntxd - NTXDACTIVE(di->txin, di->txout) - 1;
+ /* bump the tx descriptor index */
+ di->txout = txout;
- return (0);
+ /* kick the chip */
+ if (commit)
+ W_REG (di->osh, &di->d32txregs->ptr, I2B (txout, dma32dd_t));
+
+ /* tx flow control */
+ di->hnddma.txavail = di->ntxd - NTXDACTIVE (di->txin, di->txout) - 1;
+
+ return (0);
outoftxd:
- DMA_ERROR(("%s: dma_txfast: out of txds\n", di->name));
- PKTFREE(di->osh, p0, TRUE);
- di->hnddma.txavail = 0;
- di->hnddma.txnobuf++;
- return (-1);
+ DMA_ERROR (("%s: dma_txfast: out of txds\n", di->name));
+ PKTFREE (di->osh, p0, TRUE);
+ di->hnddma.txavail = 0;
+ di->hnddma.txnobuf++;
+ return (-1);
}
/*
* regardless of the value of the hardware "curr" pointer.
*/
static void *
-dma32_getnexttxp(dma_info_t *di, bool forceall)
+dma32_getnexttxp (dma_info_t * di, bool forceall)
{
- uint start, end, i;
- void *txp;
+ uint start, end, i;
+ void *txp;
- DMA_TRACE(("%s: dma_getnexttxp %s\n", di->name, forceall ? "all" : ""));
+ DMA_TRACE (("%s: dma_getnexttxp %s\n", di->name, forceall ? "all" : ""));
- if (di->ntxd == 0)
- return (NULL);
+ if (di->ntxd == 0)
+ return (NULL);
- txp = NULL;
+ txp = NULL;
- start = di->txin;
- if (forceall)
- end = di->txout;
- else
- end = B2I(R_REG(di->osh, &di->d32txregs->status) & XS_CD_MASK, dma32dd_t);
+ start = di->txin;
+ if (forceall)
+ end = di->txout;
+ else
+ end =
+ B2I (R_REG (di->osh, &di->d32txregs->status) & XS_CD_MASK, dma32dd_t);
- if ((start == 0) && (end > di->txout))
- goto bogus;
+ if ((start == 0) && (end > di->txout))
+ goto bogus;
- for (i = start; i != end && !txp; i = NEXTTXD(i)) {
- DMA_UNMAP(di->osh, (BUS_SWAP32(R_SM(&di->txd32[i].addr)) - di->dataoffsetlow),
- (BUS_SWAP32(R_SM(&di->txd32[i].ctrl)) & CTRL_BC_MASK),
- DMA_TX, di->txp[i]);
+ for (i = start; i != end && !txp; i = NEXTTXD (i))
+ {
+ DMA_UNMAP (di->osh,
+ (BUS_SWAP32 (R_SM (&di->txd32[i].addr)) - di->dataoffsetlow),
+ (BUS_SWAP32 (R_SM (&di->txd32[i].ctrl)) & CTRL_BC_MASK),
+ DMA_TX, di->txp[i], &di->txp_dmah[i]);
- W_SM(&di->txd32[i].addr, 0xdeadbeef);
- txp = di->txp[i];
- di->txp[i] = NULL;
- }
+ W_SM (&di->txd32[i].addr, 0xdeadbeef);
+ txp = di->txp[i];
+ di->txp[i] = NULL;
+ }
- di->txin = i;
+ di->txin = i;
- /* tx flow control */
- di->hnddma.txavail = di->ntxd - NTXDACTIVE(di->txin, di->txout) - 1;
+ /* tx flow control */
+ di->hnddma.txavail = di->ntxd - NTXDACTIVE (di->txin, di->txout) - 1;
- return (txp);
+ return (txp);
bogus:
/*
DMA_ERROR(("dma_getnexttxp: bogus curr: start %d end %d txout %d force %d\n",
start, end, di->txout, forceall));
*/
- return (NULL);
+ return (NULL);
}
static void *
-dma32_getnextrxp(dma_info_t *di, bool forceall)
+dma32_getnextrxp (dma_info_t * di, bool forceall)
{
- uint i;
- void *rxp;
+ uint i;
+ void *rxp;
- /* if forcing, dma engine must be disabled */
- ASSERT(!forceall || !dma32_rxenabled(di));
+ /* if forcing, dma engine must be disabled */
+ ASSERT (!forceall || !dma32_rxenabled (di));
- i = di->rxin;
+ i = di->rxin;
- /* return if no packets posted */
- if (i == di->rxout)
- return (NULL);
+ /* return if no packets posted */
+ if (i == di->rxout)
+ return (NULL);
- /* ignore curr if forceall */
- if (!forceall && (i == B2I(R_REG(di->osh, &di->d32rxregs->status) & RS_CD_MASK, dma32dd_t)))
- return (NULL);
+ /* ignore curr if forceall */
+ if (!forceall
+ && (i ==
+ B2I (R_REG (di->osh, &di->d32rxregs->status) & RS_CD_MASK,
+ dma32dd_t)))
+ return (NULL);
- /* get the packet pointer that corresponds to the rx descriptor */
- rxp = di->rxp[i];
- ASSERT(rxp);
- di->rxp[i] = NULL;
+ /* get the packet pointer that corresponds to the rx descriptor */
+ rxp = di->rxp[i];
+ ASSERT (rxp);
+ di->rxp[i] = NULL;
- /* clear this packet from the descriptor ring */
- DMA_UNMAP(di->osh, (BUS_SWAP32(R_SM(&di->rxd32[i].addr)) - di->dataoffsetlow),
- di->rxbufsize, DMA_RX, rxp);
+ /* clear this packet from the descriptor ring */
+ DMA_UNMAP (di->osh,
+ (BUS_SWAP32 (R_SM (&di->rxd32[i].addr)) - di->dataoffsetlow),
+ di->rxbufsize, DMA_RX, rxp, &di->rxp_dmah[i]);
- W_SM(&di->rxd32[i].addr, 0xdeadbeef);
+ W_SM (&di->rxd32[i].addr, 0xdeadbeef);
- di->rxin = NEXTRXD(i);
+ di->rxin = NEXTRXD (i);
- return (rxp);
+ return (rxp);
}
/*
* Rotate all active tx dma ring entries "forward" by (ActiveDescriptor - txin).
*/
static void
-dma32_txrotate(dma_info_t *di)
+dma32_txrotate (dma_info_t * di)
{
- uint ad;
- uint nactive;
- uint rot;
- uint old, new;
- uint32 w;
- uint first, last;
-
- ASSERT(dma32_txsuspendedidle(di));
-
- nactive = _dma_txactive(di);
- ad = B2I(((R_REG(di->osh, &di->d32txregs->status) & XS_AD_MASK) >> XS_AD_SHIFT), dma32dd_t);
- rot = TXD(ad - di->txin);
-
- ASSERT(rot < di->ntxd);
-
- /* full-ring case is a lot harder - don't worry about this */
- if (rot >= (di->ntxd - nactive)) {
- DMA_ERROR(("%s: dma_txrotate: ring full - punt\n", di->name));
- return;
- }
-
- first = di->txin;
- last = PREVTXD(di->txout);
-
- /* move entries starting at last and moving backwards to first */
- for (old = last; old != PREVTXD(first); old = PREVTXD(old)) {
- new = TXD(old + rot);
-
- /*
- * Move the tx dma descriptor.
- * EOT is set only in the last entry in the ring.
- */
- w = BUS_SWAP32(R_SM(&di->txd32[old].ctrl)) & ~CTRL_EOT;
- if (new == (di->ntxd - 1))
- w |= CTRL_EOT;
- W_SM(&di->txd32[new].ctrl, BUS_SWAP32(w));
- W_SM(&di->txd32[new].addr, R_SM(&di->txd32[old].addr));
-
- /* zap the old tx dma descriptor address field */
- W_SM(&di->txd32[old].addr, BUS_SWAP32(0xdeadbeef));
-
- /* move the corresponding txp[] entry */
- ASSERT(di->txp[new] == NULL);
- di->txp[new] = di->txp[old];
- di->txp[old] = NULL;
- }
-
- /* update txin and txout */
- di->txin = ad;
- di->txout = TXD(di->txout + rot);
- di->hnddma.txavail = di->ntxd - NTXDACTIVE(di->txin, di->txout) - 1;
-
- /* kick the chip */
- W_REG(di->osh, &di->d32txregs->ptr, I2B(di->txout, dma32dd_t));
+ uint ad;
+ uint nactive;
+ uint rot;
+ uint old, new;
+ uint32 w;
+ uint first, last;
+
+ ASSERT (dma32_txsuspendedidle (di));
+
+ nactive = _dma_txactive (di);
+ ad =
+ B2I (((R_REG (di->osh, &di->d32txregs->status) & XS_AD_MASK) >>
+ XS_AD_SHIFT), dma32dd_t);
+ rot = TXD (ad - di->txin);
+
+ ASSERT (rot < di->ntxd);
+
+ /* full-ring case is a lot harder - don't worry about this */
+ if (rot >= (di->ntxd - nactive))
+ {
+ DMA_ERROR (("%s: dma_txrotate: ring full - punt\n", di->name));
+ return;
+ }
+
+ first = di->txin;
+ last = PREVTXD (di->txout);
+
+ /* move entries starting at last and moving backwards to first */
+ for (old = last; old != PREVTXD (first); old = PREVTXD (old))
+ {
+ new = TXD (old + rot);
+
+ /*
+ * Move the tx dma descriptor.
+ * EOT is set only in the last entry in the ring.
+ */
+ w = BUS_SWAP32 (R_SM (&di->txd32[old].ctrl)) & ~CTRL_EOT;
+ if (new == (di->ntxd - 1))
+ w |= CTRL_EOT;
+ W_SM (&di->txd32[new].ctrl, BUS_SWAP32 (w));
+ W_SM (&di->txd32[new].addr, R_SM (&di->txd32[old].addr));
+
+ /* zap the old tx dma descriptor address field */
+ W_SM (&di->txd32[old].addr, BUS_SWAP32 (0xdeadbeef));
+
+ /* move the corresponding txp[] entry */
+ ASSERT (di->txp[new] == NULL);
+ di->txp[new] = di->txp[old];
+ di->txp[old] = NULL;
+ }
+
+ /* update txin and txout */
+ di->txin = ad;
+ di->txout = TXD (di->txout + rot);
+ di->hnddma.txavail = di->ntxd - NTXDACTIVE (di->txin, di->txout) - 1;
+
+ /* kick the chip */
+ W_REG (di->osh, &di->d32txregs->ptr, I2B (di->txout, dma32dd_t));
}
/* 64 bits DMA functions */
#ifdef BCMDMA64
static void
-dma64_txinit(dma_info_t *di)
+dma64_txinit (dma_info_t * di)
{
- DMA_TRACE(("%s: dma_txinit\n", di->name));
+ DMA_TRACE (("%s: dma_txinit\n", di->name));
- if (di->ntxd == 0)
- return;
+ if (di->ntxd == 0)
+ return;
- di->txin = di->txout = 0;
- di->hnddma.txavail = di->ntxd - 1;
+ di->txin = di->txout = 0;
+ di->hnddma.txavail = di->ntxd - 1;
- /* clear tx descriptor ring */
- BZERO_SM((void *)(uintptr)di->txd64, (di->ntxd * sizeof(dma64dd_t)));
- W_REG(di->osh, &di->d64txregs->control, D64_XC_XE);
- _dma_ddtable_init(di, DMA_TX, di->txdpa);
+ /* clear tx descriptor ring */
+ BZERO_SM ((void *) (uintptr) di->txd64, (di->ntxd * sizeof (dma64dd_t)));
+ W_REG (di->osh, &di->d64txregs->control, D64_XC_XE);
+ _dma_ddtable_init (di, DMA_TX, di->txdpa);
}
static bool
-dma64_txenabled(dma_info_t *di)
+dma64_txenabled (dma_info_t * di)
{
- uint32 xc;
+ uint32 xc;
- /* If the chip is dead, it is not enabled :-) */
- xc = R_REG(di->osh, &di->d64txregs->control);
- return ((xc != 0xffffffff) && (xc & D64_XC_XE));
+ /* If the chip is dead, it is not enabled :-) */
+ xc = R_REG (di->osh, &di->d64txregs->control);
+ return ((xc != 0xffffffff) && (xc & D64_XC_XE));
}
static void
-dma64_txsuspend(dma_info_t *di)
+dma64_txsuspend (dma_info_t * di)
{
- DMA_TRACE(("%s: dma_txsuspend\n", di->name));
+ DMA_TRACE (("%s: dma_txsuspend\n", di->name));
- if (di->ntxd == 0)
- return;
+ if (di->ntxd == 0)
+ return;
- OR_REG(di->osh, &di->d64txregs->control, D64_XC_SE);
+ OR_REG (di->osh, &di->d64txregs->control, D64_XC_SE);
}
static void
-dma64_txresume(dma_info_t *di)
+dma64_txresume (dma_info_t * di)
{
- DMA_TRACE(("%s: dma_txresume\n", di->name));
+ DMA_TRACE (("%s: dma_txresume\n", di->name));
- if (di->ntxd == 0)
- return;
+ if (di->ntxd == 0)
+ return;
- AND_REG(di->osh, &di->d64txregs->control, ~D64_XC_SE);
+ AND_REG (di->osh, &di->d64txregs->control, ~D64_XC_SE);
}
static bool
-dma64_txsuspended(dma_info_t *di)
+dma64_txsuspended (dma_info_t * di)
{
- return (di->ntxd == 0) || ((R_REG(di->osh, &di->d64txregs->control) & D64_XC_SE)
- == D64_XC_SE);
+ return (di->ntxd == 0)
+ || ((R_REG (di->osh, &di->d64txregs->control) & D64_XC_SE) == D64_XC_SE);
}
static void
-dma64_txreclaim(dma_info_t *di, bool forceall)
+dma64_txreclaim (dma_info_t * di, bool forceall)
{
- void *p;
+ void *p;
- DMA_TRACE(("%s: dma_txreclaim %s\n", di->name, forceall ? "all" : ""));
+ DMA_TRACE (("%s: dma_txreclaim %s\n", di->name, forceall ? "all" : ""));
- while ((p = dma64_getnexttxp(di, forceall)))
- PKTFREE(di->osh, p, TRUE);
+ while ((p = dma64_getnexttxp (di, forceall)))
+ PKTFREE (di->osh, p, TRUE);
}
static bool
-dma64_txstopped(dma_info_t *di)
+dma64_txstopped (dma_info_t * di)
{
- return ((R_REG(di->osh, &di->d64txregs->status0) & D64_XS0_XS_MASK) == D64_XS0_XS_STOPPED);
+ return ((R_REG (di->osh, &di->d64txregs->status0) & D64_XS0_XS_MASK) ==
+ D64_XS0_XS_STOPPED);
}
static bool
-dma64_rxstopped(dma_info_t *di)
+dma64_rxstopped (dma_info_t * di)
{
- return ((R_REG(di->osh, &di->d64rxregs->status0) & D64_RS0_RS_MASK) == D64_RS0_RS_STOPPED);
+ return ((R_REG (di->osh, &di->d64rxregs->status0) & D64_RS0_RS_MASK) ==
+ D64_RS0_RS_STOPPED);
}
static bool
-dma64_alloc(dma_info_t *di, uint direction)
-{
- uint size;
- uint ddlen;
- uint32 alignbytes;
- void *va;
-
- ddlen = sizeof(dma64dd_t);
-
- size = (direction == DMA_TX) ? (di->ntxd * ddlen) : (di->nrxd * ddlen);
-
- alignbytes = di->dma64align;
-
- if (!ISALIGNED(DMA_CONSISTENT_ALIGN, alignbytes))
- size += alignbytes;
-
- if (direction == DMA_TX) {
- if ((va = DMA_ALLOC_CONSISTENT(di->osh, size, &di->txdpa, &di->tx_dmah)) == NULL) {
- DMA_ERROR(("%s: dma_attach: DMA_ALLOC_CONSISTENT(ntxd) failed\n",
- di->name));
- return FALSE;
- }
-
- di->txd64 = (dma64dd_t *) ROUNDUP((uintptr)va, alignbytes);
- di->txdalign = (uint)((int8*)(uintptr)di->txd64 - (int8*)va);
- di->txdpa += di->txdalign;
- di->txdalloc = size;
- ASSERT(ISALIGNED((uintptr)di->txd64, alignbytes));
- } else {
- if ((va = DMA_ALLOC_CONSISTENT(di->osh, size, &di->rxdpa, &di->rx_dmah)) == NULL) {
- DMA_ERROR(("%s: dma_attach: DMA_ALLOC_CONSISTENT(nrxd) failed\n",
- di->name));
- return FALSE;
- }
- di->rxd64 = (dma64dd_t *) ROUNDUP((uintptr)va, alignbytes);
- di->rxdalign = (uint)((int8*)(uintptr)di->rxd64 - (int8*)va);
- di->rxdpa += di->rxdalign;
- di->rxdalloc = size;
- ASSERT(ISALIGNED((uintptr)di->rxd64, alignbytes));
+dma64_alloc (dma_info_t * di, uint direction)
+{
+ uint size;
+ uint ddlen;
+ uint32 alignbytes;
+ void *va;
+
+ ddlen = sizeof (dma64dd_t);
+
+ size = (direction == DMA_TX) ? (di->ntxd * ddlen) : (di->nrxd * ddlen);
+
+ alignbytes = di->dma64align;
+
+ if (!ISALIGNED (DMA_CONSISTENT_ALIGN, alignbytes))
+ size += alignbytes;
+
+ if (direction == DMA_TX)
+ {
+ if ((va =
+ DMA_ALLOC_CONSISTENT (di->osh, size, &di->txdpa,
+ &di->tx_dmah)) == NULL)
+ {
+ DMA_ERROR (("%s: dma_attach: DMA_ALLOC_CONSISTENT(ntxd) failed\n",
+ di->name));
+ return FALSE;
}
- return TRUE;
+ di->txd64 = (dma64dd_t *) ROUNDUP ((uintptr) va, alignbytes);
+ di->txdalign = (uint) ((int8 *) (uintptr) di->txd64 - (int8 *) va);
+ di->txdpa += di->txdalign;
+ di->txdalloc = size;
+ ASSERT (ISALIGNED ((uintptr) di->txd64, alignbytes));
+ }
+ else
+ {
+ if ((va =
+ DMA_ALLOC_CONSISTENT (di->osh, size, &di->rxdpa,
+ &di->rx_dmah)) == NULL)
+ {
+ DMA_ERROR (("%s: dma_attach: DMA_ALLOC_CONSISTENT(nrxd) failed\n",
+ di->name));
+ return FALSE;
+ }
+ di->rxd64 = (dma64dd_t *) ROUNDUP ((uintptr) va, alignbytes);
+ di->rxdalign = (uint) ((int8 *) (uintptr) di->rxd64 - (int8 *) va);
+ di->rxdpa += di->rxdalign;
+ di->rxdalloc = size;
+ ASSERT (ISALIGNED ((uintptr) di->rxd64, alignbytes));
+ }
+
+ return TRUE;
}
static bool
-dma64_txreset(dma_info_t *di)
+dma64_txreset (dma_info_t * di)
{
- uint32 status;
+ uint32 status;
- if (di->ntxd == 0)
- return TRUE;
+ if (di->ntxd == 0)
+ return TRUE;
- /* suspend tx DMA first */
- W_REG(di->osh, &di->d64txregs->control, D64_XC_SE);
- SPINWAIT(((status = (R_REG(di->osh, &di->d64txregs->status0) & D64_XS0_XS_MASK)) !=
- D64_XS0_XS_DISABLED) &&
- (status != D64_XS0_XS_IDLE) &&
- (status != D64_XS0_XS_STOPPED),
- 10000);
+ /* suspend tx DMA first */
+ W_REG (di->osh, &di->d64txregs->control, D64_XC_SE);
+ SPINWAIT (((status =
+ (R_REG (di->osh, &di->d64txregs->status0) & D64_XS0_XS_MASK)) !=
+ D64_XS0_XS_DISABLED) && (status != D64_XS0_XS_IDLE)
+ && (status != D64_XS0_XS_STOPPED), 10000);
- W_REG(di->osh, &di->d64txregs->control, 0);
- SPINWAIT(((status = (R_REG(di->osh, &di->d64txregs->status0) & D64_XS0_XS_MASK)) !=
- D64_XS0_XS_DISABLED),
- 10000);
+ W_REG (di->osh, &di->d64txregs->control, 0);
+ SPINWAIT (((status =
+ (R_REG (di->osh, &di->d64txregs->status0) & D64_XS0_XS_MASK)) !=
+ D64_XS0_XS_DISABLED), 10000);
- /* wait for the last transaction to complete */
- OSL_DELAY(300);
+ /* wait for the last transaction to complete */
+ OSL_DELAY (300);
- return (status == D64_XS0_XS_DISABLED);
+ return (status == D64_XS0_XS_DISABLED);
}
static bool
-dma64_rxidle(dma_info_t *di)
+dma64_rxidle (dma_info_t * di)
{
- DMA_TRACE(("%s: dma_rxidle\n", di->name));
+ DMA_TRACE (("%s: dma_rxidle\n", di->name));
- if (di->nrxd == 0)
- return TRUE;
+ if (di->nrxd == 0)
+ return TRUE;
- return ((R_REG(di->osh, &di->d64rxregs->status0) & D64_RS0_CD_MASK) ==
- R_REG(di->osh, &di->d64rxregs->ptr));
+ return ((R_REG (di->osh, &di->d64rxregs->status0) & D64_RS0_CD_MASK) ==
+ R_REG (di->osh, &di->d64rxregs->ptr));
}
static bool
-dma64_rxreset(dma_info_t *di)
+dma64_rxreset (dma_info_t * di)
{
- uint32 status;
+ uint32 status;
- if (di->nrxd == 0)
- return TRUE;
+ if (di->nrxd == 0)
+ return TRUE;
- W_REG(di->osh, &di->d64rxregs->control, 0);
- SPINWAIT(((status = (R_REG(di->osh, &di->d64rxregs->status0) & D64_RS0_RS_MASK)) !=
- D64_RS0_RS_DISABLED),
- 10000);
+ W_REG (di->osh, &di->d64rxregs->control, 0);
+ SPINWAIT (((status =
+ (R_REG (di->osh, &di->d64rxregs->status0) & D64_RS0_RS_MASK)) !=
+ D64_RS0_RS_DISABLED), 10000);
- return (status == D64_RS0_RS_DISABLED);
+ return (status == D64_RS0_RS_DISABLED);
}
static bool
-dma64_rxenabled(dma_info_t *di)
+dma64_rxenabled (dma_info_t * di)
{
- uint32 rc;
+ uint32 rc;
- rc = R_REG(di->osh, &di->d64rxregs->control);
- return ((rc != 0xffffffff) && (rc & D64_RC_RE));
+ rc = R_REG (di->osh, &di->d64rxregs->control);
+ return ((rc != 0xffffffff) && (rc & D64_RC_RE));
}
static bool
-dma64_txsuspendedidle(dma_info_t *di)
+dma64_txsuspendedidle (dma_info_t * di)
{
- if (di->ntxd == 0)
- return TRUE;
+ if (di->ntxd == 0)
+ return TRUE;
- if (!(R_REG(di->osh, &di->d64txregs->control) & D64_XC_SE))
- return 0;
+ if (!(R_REG (di->osh, &di->d64txregs->control) & D64_XC_SE))
+ return 0;
- if ((R_REG(di->osh, &di->d64txregs->status0) & D64_XS0_XS_MASK) == D64_XS0_XS_IDLE)
- return 1;
+ if ((R_REG (di->osh, &di->d64txregs->status0) & D64_XS0_XS_MASK) ==
+ D64_XS0_XS_IDLE)
+ return 1;
- return 0;
+ return 0;
}
/* !! tx entry routine */
static int
-dma64_txfast(dma_info_t *di, void *p0, bool commit)
-{
- void *p, *next;
- uchar *data;
- uint len;
- uint txout;
- uint32 flags = 0;
- uint32 pa;
-
- DMA_TRACE(("%s: dma_txfast\n", di->name));
-
- txout = di->txout;
-
- /*
- * Walk the chain of packet buffers
- * allocating and initializing transmit descriptor entries.
- */
- for (p = p0; p; p = next) {
- data = PKTDATA(di->osh, p);
- len = PKTLEN(di->osh, p);
- next = PKTNEXT(di->osh, p);
-
- /* return nonzero if out of tx descriptors */
- if (NEXTTXD(txout) == di->txin)
- goto outoftxd;
-
- if (len == 0)
- continue;
-
- /* get physical address of buffer start */
- pa = (uint32) DMA_MAP(di->osh, data, len, DMA_TX, p);
-
- flags = 0;
- if (p == p0)
- flags |= D64_CTRL1_SOF;
- if (next == NULL)
- flags |= (D64_CTRL1_IOC | D64_CTRL1_EOF);
- if (txout == (di->ntxd - 1))
- flags |= D64_CTRL1_EOT;
-
- dma64_dd_upd(di, di->txd64, pa, txout, &flags, len);
- ASSERT(di->txp[txout] == NULL);
-
- txout = NEXTTXD(txout);
- }
+dma64_txfast (dma_info_t * di, void *p0, bool commit)
+{
+ void *p, *next;
+ uchar *data;
+ uint len;
+ uint txout;
+ uint32 flags = 0;
+ uint32 pa;
- /* if last txd eof not set, fix it */
- if (!(flags & D64_CTRL1_EOF))
- W_SM(&di->txd64[PREVTXD(txout)].ctrl1,
- BUS_SWAP32(flags | D64_CTRL1_IOC | D64_CTRL1_EOF));
+ DMA_TRACE (("%s: dma_txfast\n", di->name));
- /* save the packet */
- di->txp[PREVTXD(txout)] = p0;
+ txout = di->txout;
- /* bump the tx descriptor index */
- di->txout = txout;
+ /*
+ * Walk the chain of packet buffers
+ * allocating and initializing transmit descriptor entries.
+ */
+ for (p = p0; p; p = next)
+ {
+ data = PKTDATA (di->osh, p);
+ len = PKTLEN (di->osh, p);
+ next = PKTNEXT (di->osh, p);
- /* kick the chip */
- if (commit)
- W_REG(di->osh, &di->d64txregs->ptr, I2B(txout, dma64dd_t));
+ /* return nonzero if out of tx descriptors */
+ if (NEXTTXD (txout) == di->txin)
+ goto outoftxd;
- /* tx flow control */
- di->hnddma.txavail = di->ntxd - NTXDACTIVE(di->txin, di->txout) - 1;
+ if (len == 0)
+ continue;
- return (0);
+ /* get physical address of buffer start */
+ pa =
+ (uint32) DMA_MAP (di->osh, data, len, DMA_TX, p,
+ &di->txp_dmah[txout]);
+
+ flags = 0;
+ if (p == p0)
+ flags |= D64_CTRL1_SOF;
+ if (next == NULL)
+ flags |= (D64_CTRL1_IOC | D64_CTRL1_EOF);
+ if (txout == (di->ntxd - 1))
+ flags |= D64_CTRL1_EOT;
+
+ dma64_dd_upd (di, di->txd64, pa, txout, &flags, len);
+ ASSERT (di->txp[txout] == NULL);
+
+ txout = NEXTTXD (txout);
+ }
+
+ /* if last txd eof not set, fix it */
+ if (!(flags & D64_CTRL1_EOF))
+ W_SM (&di->txd64[PREVTXD (txout)].ctrl1,
+ BUS_SWAP32 (flags | D64_CTRL1_IOC | D64_CTRL1_EOF));
+
+ /* save the packet */
+ di->txp[PREVTXD (txout)] = p0;
+
+ /* bump the tx descriptor index */
+ di->txout = txout;
+
+ /* kick the chip */
+ if (commit)
+ W_REG (di->osh, &di->d64txregs->ptr, I2B (txout, dma64dd_t));
+
+ /* tx flow control */
+ di->hnddma.txavail = di->ntxd - NTXDACTIVE (di->txin, di->txout) - 1;
+
+ return (0);
outoftxd:
- DMA_ERROR(("%s: dma_txfast: out of txds\n", di->name));
- PKTFREE(di->osh, p0, TRUE);
- di->hnddma.txavail = 0;
- di->hnddma.txnobuf++;
- return (-1);
+ DMA_ERROR (("%s: dma_txfast: out of txds\n", di->name));
+ PKTFREE (di->osh, p0, TRUE);
+ di->hnddma.txavail = 0;
+ di->hnddma.txnobuf++;
+ return (-1);
}
/*
* regardless of the value of the hardware "curr" pointer.
*/
static void *
-dma64_getnexttxp(dma_info_t *di, bool forceall)
+dma64_getnexttxp (dma_info_t * di, bool forceall)
{
- uint start, end, i;
- void *txp;
+ uint start, end, i;
+ void *txp;
- DMA_TRACE(("%s: dma_getnexttxp %s\n", di->name, forceall ? "all" : ""));
+ DMA_TRACE (("%s: dma_getnexttxp %s\n", di->name, forceall ? "all" : ""));
- if (di->ntxd == 0)
- return (NULL);
+ if (di->ntxd == 0)
+ return (NULL);
- txp = NULL;
+ txp = NULL;
- start = di->txin;
- if (forceall)
- end = di->txout;
- else
- end = B2I(R_REG(di->osh, &di->d64txregs->status0) & D64_XS0_CD_MASK, dma64dd_t);
+ start = di->txin;
+ if (forceall)
+ end = di->txout;
+ else
+ end =
+ B2I (R_REG (di->osh, &di->d64txregs->status0) & D64_XS0_CD_MASK,
+ dma64dd_t);
- if ((start == 0) && (end > di->txout))
- goto bogus;
+ if ((start == 0) && (end > di->txout))
+ goto bogus;
- for (i = start; i != end && !txp; i = NEXTTXD(i)) {
- DMA_UNMAP(di->osh, (BUS_SWAP32(R_SM(&di->txd64[i].addrlow)) - di->dataoffsetlow),
- (BUS_SWAP32(R_SM(&di->txd64[i].ctrl2)) & D64_CTRL2_BC_MASK),
- DMA_TX, di->txp[i]);
+ for (i = start; i != end && !txp; i = NEXTTXD (i))
+ {
+ DMA_UNMAP (di->osh,
+ (BUS_SWAP32 (R_SM (&di->txd64[i].addrlow)) -
+ di->dataoffsetlow),
+ (BUS_SWAP32 (R_SM (&di->txd64[i].ctrl2)) &
+ D64_CTRL2_BC_MASK), DMA_TX, di->txp[i], &di->txp_dmah[i]);
- W_SM(&di->txd64[i].addrlow, 0xdeadbeef);
- W_SM(&di->txd64[i].addrhigh, 0xdeadbeef);
+ W_SM (&di->txd64[i].addrlow, 0xdeadbeef);
+ W_SM (&di->txd64[i].addrhigh, 0xdeadbeef);
- txp = di->txp[i];
- di->txp[i] = NULL;
- }
+ txp = di->txp[i];
+ di->txp[i] = NULL;
+ }
- di->txin = i;
+ di->txin = i;
- /* tx flow control */
- di->hnddma.txavail = di->ntxd - NTXDACTIVE(di->txin, di->txout) - 1;
+ /* tx flow control */
+ di->hnddma.txavail = di->ntxd - NTXDACTIVE (di->txin, di->txout) - 1;
- return (txp);
+ return (txp);
bogus:
/*
DMA_ERROR(("dma_getnexttxp: bogus curr: start %d end %d txout %d force %d\n",
start, end, di->txout, forceall));
*/
- return (NULL);
+ return (NULL);
}
static void *
-dma64_getnextrxp(dma_info_t *di, bool forceall)
+dma64_getnextrxp (dma_info_t * di, bool forceall)
{
- uint i;
- void *rxp;
+ uint i;
+ void *rxp;
- /* if forcing, dma engine must be disabled */
- ASSERT(!forceall || !dma64_rxenabled(di));
+ /* if forcing, dma engine must be disabled */
+ ASSERT (!forceall || !dma64_rxenabled (di));
- i = di->rxin;
+ i = di->rxin;
- /* return if no packets posted */
- if (i == di->rxout)
- return (NULL);
+ /* return if no packets posted */
+ if (i == di->rxout)
+ return (NULL);
- /* ignore curr if forceall */
- if (!forceall &&
- (i == B2I(R_REG(di->osh, &di->d64rxregs->status0) & D64_RS0_CD_MASK, dma64dd_t)))
- return (NULL);
+ /* ignore curr if forceall */
+ if (!forceall &&
+ (i ==
+ B2I (R_REG (di->osh, &di->d64rxregs->status0) & D64_RS0_CD_MASK,
+ dma64dd_t)))
+ return (NULL);
- /* get the packet pointer that corresponds to the rx descriptor */
- rxp = di->rxp[i];
- ASSERT(rxp);
- di->rxp[i] = NULL;
+ /* get the packet pointer that corresponds to the rx descriptor */
+ rxp = di->rxp[i];
+ ASSERT (rxp);
+ di->rxp[i] = NULL;
- /* clear this packet from the descriptor ring */
- DMA_UNMAP(di->osh, (BUS_SWAP32(R_SM(&di->rxd64[i].addrlow)) - di->dataoffsetlow),
- di->rxbufsize, DMA_RX, rxp);
+ /* clear this packet from the descriptor ring */
+ DMA_UNMAP (di->osh,
+ (BUS_SWAP32 (R_SM (&di->rxd64[i].addrlow)) - di->dataoffsetlow),
+ di->rxbufsize, DMA_RX, rxp, &di->rxp_dmah[i]);
- W_SM(&di->rxd64[i].addrlow, 0xdeadbeef);
- W_SM(&di->rxd64[i].addrhigh, 0xdeadbeef);
+ W_SM (&di->rxd64[i].addrlow, 0xdeadbeef);
+ W_SM (&di->rxd64[i].addrhigh, 0xdeadbeef);
- di->rxin = NEXTRXD(i);
+ di->rxin = NEXTRXD (i);
- return (rxp);
+ return (rxp);
}
static bool
-_dma64_addrext(osl_t *osh, dma64regs_t *dma64regs)
+_dma64_addrext (osl_t * osh, dma64regs_t * dma64regs)
{
- uint32 w;
- OR_REG(osh, &dma64regs->control, D64_XC_AE);
- w = R_REG(osh, &dma64regs->control);
- AND_REG(osh, &dma64regs->control, ~D64_XC_AE);
- return ((w & D64_XC_AE) == D64_XC_AE);
+ uint32 w;
+ OR_REG (osh, &dma64regs->control, D64_XC_AE);
+ w = R_REG (osh, &dma64regs->control);
+ AND_REG (osh, &dma64regs->control, ~D64_XC_AE);
+ return ((w & D64_XC_AE) == D64_XC_AE);
}
/*
* Rotate all active tx dma ring entries "forward" by (ActiveDescriptor - txin).
*/
static void
-dma64_txrotate(dma_info_t *di)
+dma64_txrotate (dma_info_t * di)
{
- uint ad;
- uint nactive;
- uint rot;
- uint old, new;
- uint32 w;
- uint first, last;
-
- ASSERT(dma64_txsuspendedidle(di));
-
- nactive = _dma_txactive(di);
- ad = B2I((R_REG(di->osh, &di->d64txregs->status1) & D64_XS1_AD_MASK), dma64dd_t);
- rot = TXD(ad - di->txin);
-
- ASSERT(rot < di->ntxd);
-
- /* full-ring case is a lot harder - don't worry about this */
- if (rot >= (di->ntxd - nactive)) {
- DMA_ERROR(("%s: dma_txrotate: ring full - punt\n", di->name));
- return;
- }
-
- first = di->txin;
- last = PREVTXD(di->txout);
-
- /* move entries starting at last and moving backwards to first */
- for (old = last; old != PREVTXD(first); old = PREVTXD(old)) {
- new = TXD(old + rot);
-
- /*
- * Move the tx dma descriptor.
- * EOT is set only in the last entry in the ring.
- */
- w = BUS_SWAP32(R_SM(&di->txd64[old].ctrl1)) & ~D64_CTRL1_EOT;
- if (new == (di->ntxd - 1))
- w |= D64_CTRL1_EOT;
- W_SM(&di->txd64[new].ctrl1, BUS_SWAP32(w));
-
- w = BUS_SWAP32(R_SM(&di->txd64[old].ctrl2));
- W_SM(&di->txd64[new].ctrl2, BUS_SWAP32(w));
-
- W_SM(&di->txd64[new].addrlow, R_SM(&di->txd64[old].addrlow));
- W_SM(&di->txd64[new].addrhigh, R_SM(&di->txd64[old].addrhigh));
-
- /* zap the old tx dma descriptor address field */
- W_SM(&di->txd64[old].addrlow, BUS_SWAP32(0xdeadbeef));
- W_SM(&di->txd64[old].addrhigh, BUS_SWAP32(0xdeadbeef));
-
- /* move the corresponding txp[] entry */
- ASSERT(di->txp[new] == NULL);
- di->txp[new] = di->txp[old];
- di->txp[old] = NULL;
- }
-
- /* update txin and txout */
- di->txin = ad;
- di->txout = TXD(di->txout + rot);
- di->hnddma.txavail = di->ntxd - NTXDACTIVE(di->txin, di->txout) - 1;
-
- /* kick the chip */
- W_REG(di->osh, &di->d64txregs->ptr, I2B(di->txout, dma64dd_t));
+ uint ad;
+ uint nactive;
+ uint rot;
+ uint old, new;
+ uint32 w;
+ uint first, last;
+
+ ASSERT (dma64_txsuspendedidle (di));
+
+ nactive = _dma_txactive (di);
+ ad =
+ B2I ((R_REG (di->osh, &di->d64txregs->status1) & D64_XS1_AD_MASK),
+ dma64dd_t);
+ rot = TXD (ad - di->txin);
+
+ ASSERT (rot < di->ntxd);
+
+ /* full-ring case is a lot harder - don't worry about this */
+ if (rot >= (di->ntxd - nactive))
+ {
+ DMA_ERROR (("%s: dma_txrotate: ring full - punt\n", di->name));
+ return;
+ }
+
+ first = di->txin;
+ last = PREVTXD (di->txout);
+
+ /* move entries starting at last and moving backwards to first */
+ for (old = last; old != PREVTXD (first); old = PREVTXD (old))
+ {
+ new = TXD (old + rot);
+
+ /*
+ * Move the tx dma descriptor.
+ * EOT is set only in the last entry in the ring.
+ */
+ w = BUS_SWAP32 (R_SM (&di->txd64[old].ctrl1)) & ~D64_CTRL1_EOT;
+ if (new == (di->ntxd - 1))
+ w |= D64_CTRL1_EOT;
+ W_SM (&di->txd64[new].ctrl1, BUS_SWAP32 (w));
+
+ w = BUS_SWAP32 (R_SM (&di->txd64[old].ctrl2));
+ W_SM (&di->txd64[new].ctrl2, BUS_SWAP32 (w));
+
+ W_SM (&di->txd64[new].addrlow, R_SM (&di->txd64[old].addrlow));
+ W_SM (&di->txd64[new].addrhigh, R_SM (&di->txd64[old].addrhigh));
+
+ /* zap the old tx dma descriptor address field */
+ W_SM (&di->txd64[old].addrlow, BUS_SWAP32 (0xdeadbeef));
+ W_SM (&di->txd64[old].addrhigh, BUS_SWAP32 (0xdeadbeef));
+
+ /* move the corresponding txp[] entry */
+ ASSERT (di->txp[new] == NULL);
+ di->txp[new] = di->txp[old];
+ di->txp[old] = NULL;
+ }
+
+ /* update txin and txout */
+ di->txin = ad;
+ di->txout = TXD (di->txout + rot);
+ di->hnddma.txavail = di->ntxd - NTXDACTIVE (di->txin, di->txout) - 1;
+
+ /* kick the chip */
+ W_REG (di->osh, &di->d64txregs->ptr, I2B (di->txout, dma64dd_t));
}
-#endif /* BCMDMA64 */
+#endif /* BCMDMA64 */
uint
-dma_addrwidth(sb_t *sbh, void *dmaregs)
-{
- dma32regs_t *dma32regs;
- osl_t *osh;
-
- osh = sb_osh(sbh);
-
- if (DMA64_CAP) {
- /* DMA engine is 64-bit capable */
- if (((sb_coreflagshi(sbh, 0, 0) & SBTMH_DMA64) == SBTMH_DMA64)) {
- /* backplane are 64 bits capable */
-#if 0
- if (sb_backplane64(sbh))
- /* If bus is System Backplane or PCIE then we can access 64-bits */
- if ((BUSTYPE(sbh->bustype) == SB_BUS) ||
- ((BUSTYPE(sbh->bustype) == PCI_BUS) &&
- sbh->buscoretype == SB_PCIE))
- return (DMADDRWIDTH_64);
-#endif
-
- /* DMA64 is always 32 bits capable, AE is always TRUE */
+dma_addrwidth (sb_t * sbh, void *dmaregs)
+{
+ dma32regs_t *dma32regs;
+ osl_t *osh;
+
+ osh = sb_osh (sbh);
+
+ if (DMA64_CAP)
+ {
+ /* DMA engine is 64-bit capable */
+ if (((sb_coreflagshi (sbh, 0, 0) & SBTMH_DMA64) == SBTMH_DMA64))
+ {
+ /* backplane are 64 bits capable */
+ if (sb_backplane64 (sbh))
+ /* If bus is System Backplane or PCIE then we can access 64-bits */
+ if ((BUSTYPE (sbh->bustype) == SB_BUS) ||
+ ((BUSTYPE (sbh->bustype) == PCI_BUS) &&
+ sbh->buscoretype == SB_PCIE))
+ return (DMADDRWIDTH_64);
+
+ /* DMA64 is always 32 bits capable, AE is always TRUE */
#ifdef BCMDMA64
- ASSERT(_dma64_addrext(osh, (dma64regs_t *)dmaregs));
+ ASSERT (_dma64_addrext (osh, (dma64regs_t *) dmaregs));
#endif
- return (DMADDRWIDTH_32);
- }
+ return (DMADDRWIDTH_32);
}
+ }
- /* Start checking for 32-bit / 30-bit addressing */
- dma32regs = (dma32regs_t *)dmaregs;
+ /* Start checking for 32-bit / 30-bit addressing */
+ dma32regs = (dma32regs_t *) dmaregs;
- /* For System Backplane, PCIE bus or addrext feature, 32-bits ok */
- if ((BUSTYPE(sbh->bustype) == SB_BUS) ||
- ((BUSTYPE(sbh->bustype) == PCI_BUS) && sbh->buscoretype == SB_PCIE) ||
- (_dma32_addrext(osh, dma32regs)))
- return (DMADDRWIDTH_32);
+ /* For System Backplane, PCIE bus or addrext feature, 32-bits ok */
+ if ((BUSTYPE (sbh->bustype) == SB_BUS) ||
+ ((BUSTYPE (sbh->bustype) == PCI_BUS) && sbh->buscoretype == SB_PCIE) ||
+ (_dma32_addrext (osh, dma32regs)))
+ return (DMADDRWIDTH_32);
- /* Fallthru */
- return (DMADDRWIDTH_30);
+ /* Fallthru */
+ return (DMADDRWIDTH_30);
}
* Generic Broadcom Home Networking Division (HND) DMA engine SW interface
* This supports the following chips: BCM42xx, 44xx, 47xx .
*
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
* All Rights Reserved.
*
* THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
* KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
* SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
- * $Id: hnddma.h,v 1.1.1.13 2006/04/08 06:13:39 honor Exp $
+ * $Id$
*/
#ifndef _hnddma_h_
typedef void (*di_rxfill_t)(hnddma_t *dmah);
typedef void (*di_txreclaim_t)(hnddma_t *dmah, bool forceall);
typedef void (*di_rxreclaim_t)(hnddma_t *dmah);
-typedef uintptr (*di_getvar_t)(hnddma_t *dmah, char *name);
+typedef uintptr (*di_getvar_t)(hnddma_t *dmah, const char *name);
typedef void* (*di_getnexttxp_t)(hnddma_t *dmah, bool forceall);
typedef void* (*di_getnextrxp_t)(hnddma_t *dmah, bool forceall);
typedef void* (*di_peeknexttxp_t)(hnddma_t *dmah);
#define dma_txactive(di) ((di)->di_fn.txactive(di))
#define dma_txrotate(di) ((di)->di_fn.txrotate(di))
#define dma_counterreset(di) ((di)->di_fn.counterreset(di))
+#ifdef BCMDBG
+#define dma_dump(di, buf, dumpring) ((di)->di_fn.dump(di, buf, dumpring))
+#define dma_dumptx(di, buf, dumpring) ((di)->di_fn.dumptx(di, buf, dumpring))
+#define dma_dumprx(di, buf, dumpring) ((di)->di_fn.dumprx(di, buf, dumpring))
+#endif
-#define DMA_DUMP_SIZE 2048
/* return addresswidth allowed
* This needs to be done after SB attach but before dma attach.
* SB attach provides ability to probe backplane and dma core capabilities
/*
* Linux OS Independent Layer
*
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
* All Rights Reserved.
*
* THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
* SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
*
- * $Id: linux_osl.c,v 1.1.1.14 2006/04/08 06:13:39 honor Exp $
+ * $Id$
*/
#define LINUX_OSL
#include <typedefs.h>
#include <bcmendian.h>
-#include <linux/module.h>
#include <linuxver.h>
#include <bcmdefs.h>
#include <osl.h>
#include "linux_osl.h"
-#include <bcmutils.h>
+#include "bcmutils.h"
#include <linux/delay.h>
#ifdef mips
#include <asm/paccess.h>
#endif /* mips */
#include <pcicfg.h>
-#define PCI_CFG_RETRY 10
+#define PCI_CFG_RETRY 10
#define OS_HANDLE_MAGIC 0x1234abcd /* Magic # to recognise osh */
-#define BCM_MEM_FILENAME_LEN 24 /* Mem. filename length */
-
-typedef struct bcm_mem_link {
- struct bcm_mem_link *prev;
- struct bcm_mem_link *next;
- uint size;
- int line;
- char file[BCM_MEM_FILENAME_LEN];
+#define BCM_MEM_FILENAME_LEN 24 /* Mem. filename length */
+
+typedef struct bcm_mem_link
+{
+ struct bcm_mem_link *prev;
+ struct bcm_mem_link *next;
+ uint size;
+ int line;
+ char file[BCM_MEM_FILENAME_LEN];
} bcm_mem_link_t;
-static int16 linuxbcmerrormap[] = \
-{ 0, /* 0 */
- -EINVAL, /* BCME_ERROR */
- -EINVAL, /* BCME_BADARG */
- -EINVAL, /* BCME_BADOPTION */
- -EINVAL, /* BCME_NOTUP */
- -EINVAL, /* BCME_NOTDOWN */
- -EINVAL, /* BCME_NOTAP */
- -EINVAL, /* BCME_NOTSTA */
- -EINVAL, /* BCME_BADKEYIDX */
- -EINVAL, /* BCME_RADIOOFF */
- -EINVAL, /* BCME_NOTBANDLOCKED */
- -EINVAL, /* BCME_NOCLK */
- -EINVAL, /* BCME_BADRATESET */
- -EINVAL, /* BCME_BADBAND */
- -E2BIG, /* BCME_BUFTOOSHORT */
- -E2BIG, /* BCME_BUFTOOLONG */
- -EBUSY, /* BCME_BUSY */
- -EINVAL, /* BCME_NOTASSOCIATED */
- -EINVAL, /* BCME_BADSSIDLEN */
- -EINVAL, /* BCME_OUTOFRANGECHAN */
- -EINVAL, /* BCME_BADCHAN */
- -EFAULT, /* BCME_BADADDR */
- -ENOMEM, /* BCME_NORESOURCE */
- -EOPNOTSUPP, /* BCME_UNSUPPORTED */
- -EMSGSIZE, /* BCME_BADLENGTH */
- -EINVAL, /* BCME_NOTREADY */
- -EPERM, /* BCME_NOTPERMITTED */
- -ENOMEM, /* BCME_NOMEM */
- -EINVAL, /* BCME_ASSOCIATED */
- -ERANGE, /* BCME_RANGE */
- -EINVAL, /* BCME_NOTFOUND */
- -EINVAL, /* BCME_WME_NOT_ENABLED */
- -EINVAL, /* BCME_TSPEC_NOTFOUND */
- -EINVAL, /* BCME_ACM_NOTSUPPORTED */
- -EINVAL, /* BCME_NOT_WME_ASSOCIATION */
- -EIO, /* BCME_SDIO_ERROR */
- -ENODEV /* BCME_DONGLE_DOWN */
+#if 0
+struct osl_info
+{
+ osl_pubinfo_t pub;
+ uint magic;
+ void *pdev;
+ uint malloced;
+ uint failed;
+ uint bustype;
+ bcm_mem_link_t *dbgmem_list;
+#ifdef BCMDBG_PKT /* pkt logging for debugging */
+ pktlist_info_t pktlist;
+#endif /* BCMDBG_PKT */
+};
+#endif
+
+static int16 linuxbcmerrormap[] = { 0, /* 0 */
+ -EINVAL, /* BCME_ERROR */
+ -EINVAL, /* BCME_BADARG */
+ -EINVAL, /* BCME_BADOPTION */
+ -EINVAL, /* BCME_NOTUP */
+ -EINVAL, /* BCME_NOTDOWN */
+ -EINVAL, /* BCME_NOTAP */
+ -EINVAL, /* BCME_NOTSTA */
+ -EINVAL, /* BCME_BADKEYIDX */
+ -EINVAL, /* BCME_RADIOOFF */
+ -EINVAL, /* BCME_NOTBANDLOCKED */
+ -EINVAL, /* BCME_NOCLK */
+ -EINVAL, /* BCME_BADRATESET */
+ -EINVAL, /* BCME_BADBAND */
+ -E2BIG, /* BCME_BUFTOOSHORT */
+ -E2BIG, /* BCME_BUFTOOLONG */
+ -EBUSY, /* BCME_BUSY */
+ -EINVAL, /* BCME_NOTASSOCIATED */
+ -EINVAL, /* BCME_BADSSIDLEN */
+ -EINVAL, /* BCME_OUTOFRANGECHAN */
+ -EINVAL, /* BCME_BADCHAN */
+ -EFAULT, /* BCME_BADADDR */
+ -ENOMEM, /* BCME_NORESOURCE */
+ -EOPNOTSUPP, /* BCME_UNSUPPORTED */
+ -EMSGSIZE, /* BCME_BADLENGTH */
+ -EINVAL, /* BCME_NOTREADY */
+ -EPERM, /* BCME_NOTPERMITTED */
+ -ENOMEM, /* BCME_NOMEM */
+ -EINVAL, /* BCME_ASSOCIATED */
+ -ERANGE, /* BCME_RANGE */
+ -EINVAL, /* BCME_NOTFOUND */
+ -EINVAL, /* BCME_WME_NOT_ENABLED */
+ -EINVAL, /* BCME_TSPEC_NOTFOUND */
+ -EINVAL, /* BCME_ACM_NOTSUPPORTED */
+ -EINVAL, /* BCME_NOT_WME_ASSOCIATION */
+ -EIO, /* BCME_SDIO_ERROR */
+ -ENODEV, /* BCME_DONGLE_DOWN */
+ -EINVAL /* BCME_VERSION */
+/* When an new error code is added to bcmutils.h, add os
+ * spcecific error translation here as well
+ */
+/* check if BCME_LAST changed since the last time this function was updated */
+#if BCME_LAST != -37
+#error "You need to add a OS error translation in the linuxbcmerrormap \
+ for new error code defined in bcmuitls.h"
+#endif /* BCME_LAST != -37 */
};
/* translate bcmerrors into linux errors */
int
-osl_error(int bcmerror)
+osl_error (int bcmerror)
{
- int abs_bcmerror;
- int array_size = ARRAYSIZE(linuxbcmerrormap);
+ if (bcmerror > 0)
+ bcmerror = 0;
+ else if (bcmerror < BCME_LAST)
+ bcmerror = BCME_ERROR;
- abs_bcmerror = ABS(bcmerror);
+ /* Array bounds covered by ASSERT in osl_attach */
+ return linuxbcmerrormap[-bcmerror];
+}
- if (bcmerror > 0)
- abs_bcmerror = 0;
+osl_t *
+osl_attach (void *pdev, uint bustype, bool pkttag)
+{
+ osl_t *osh;
+
+ osh = kmalloc (sizeof (osl_t), GFP_ATOMIC);
+ ASSERT (osh);
+
+ bzero (osh, sizeof (osl_t));
+
+ /* Check that error map has the right number of entries in it */
+ ASSERT (ABS (BCME_LAST) == (ARRAYSIZE (linuxbcmerrormap) - 1));
+
+ osh->magic = OS_HANDLE_MAGIC;
+ osh->malloced = 0;
+ osh->failed = 0;
+ osh->dbgmem_list = NULL;
+ osh->pdev = pdev;
+ osh->pub.pkttag = pkttag;
+ osh->bustype = bustype;
+
+ switch (bustype)
+ {
+ case PCI_BUS:
+ case SB_BUS:
+ case PCMCIA_BUS:
+ osh->pub.mmbus = TRUE;
+ break;
+ case JTAG_BUS:
+ case SDIO_BUS:
+ break;
+ default:
+ ASSERT (FALSE);
+ break;
+ }
+
+#ifdef BCMDBG
+ if (pkttag)
+ {
+ struct sk_buff *skb;
+ ASSERT (OSL_PKTTAG_SZ <= sizeof (skb->cb));
+ }
+#endif
+ return osh;
+}
- else if (abs_bcmerror >= array_size)
- abs_bcmerror = BCME_ERROR;
+void
+osl_detach (osl_t * osh)
+{
+ if (osh == NULL)
+ return;
- return linuxbcmerrormap[abs_bcmerror];
+ ASSERT (osh->magic == OS_HANDLE_MAGIC);
+ kfree (osh);
}
-osl_t *
-osl_attach(void *pdev, bool pkttag)
+/* Return a new packet. zero out pkttag */
+void *
+osl_pktget (osl_t * osh, uint len)
+{
+ struct sk_buff *skb;
+
+ if ((skb = dev_alloc_skb (len)))
+ {
+ skb_put (skb, len);
+ skb->priority = 0;
+
+#ifdef BCMDBG_PKT
+ pktlist_add (&(osh->pktlist), (void *) skb);
+#endif /* BCMDBG_PKT */
+
+ osh->pub.pktalloced++;
+ }
+
+ return ((void *) skb);
+}
+
+/* Free the driver packet. Free the tag if present */
+void
+osl_pktfree (osl_t * osh, void *p, bool send)
+{
+ struct sk_buff *skb, *nskb;
+
+ skb = (struct sk_buff *) p;
+
+ if (send && osh->pub.tx_fn)
+ osh->pub.tx_fn (osh->pub.tx_ctx, p, 0);
+
+ /* perversion: we use skb->next to chain multi-skb packets */
+ while (skb)
+ {
+ nskb = skb->next;
+ skb->next = NULL;
+
+#ifdef BCMDBG_PKT
+ pktlist_remove (&(osh->pktlist), (void *) skb);
+#endif /* BCMDBG_PKT */
+
+ if (skb->destructor)
+ {
+ /* cannot kfree_skb() on hard IRQ (net/core/skbuff.c) if destructor exists
+ */
+ dev_kfree_skb_any (skb);
+ }
+ else
+ {
+ /* can free immediately (even in_irq()) if destructor does not exist */
+ dev_kfree_skb (skb);
+ }
+
+ osh->pub.pktalloced--;
+
+ skb = nskb;
+ }
+}
+
+uint32
+osl_pci_read_config (osl_t * osh, uint offset, uint size)
{
- osl_t *osh;
+ uint val;
+ uint retry = PCI_CFG_RETRY;
- osh = kmalloc(sizeof(osl_t), GFP_ATOMIC);
- ASSERT(osh);
+ ASSERT ((osh && (osh->magic == OS_HANDLE_MAGIC)));
- bzero(osh, sizeof(osl_t));
+ /* only 4byte access supported */
+ ASSERT (size == 4);
- /*
- * check the cases where
- * 1.Error code Added to bcmerror table, but forgot to add it to the OS
- * dependent error code
- * 2. Error code is added to the bcmerror table, but forgot to add the
- * corresponding errorstring(dummy call to bcmerrorstr)
- */
- bcmerrorstr(0);
- ASSERT(ABS(BCME_LAST) == (ARRAYSIZE(linuxbcmerrormap) - 1));
+ do
+ {
+ pci_read_config_dword (osh->pdev, offset, &val);
+ if (val != 0xffffffff)
+ break;
+ }
+ while (retry--);
- osh->magic = OS_HANDLE_MAGIC;
- osh->malloced = 0;
- osh->failed = 0;
- osh->dbgmem_list = NULL;
- osh->pdev = pdev;
- osh->pub.pkttag = pkttag;
+#ifdef BCMDBG
+ if (retry < PCI_CFG_RETRY)
+ printk ("PCI CONFIG READ access to %d required %d retries\n", offset,
+ (PCI_CFG_RETRY - retry));
+#endif /* BCMDBG */
- return osh;
+ return (val);
}
void
-osl_detach(osl_t *osh)
+osl_pci_write_config (osl_t * osh, uint offset, uint size, uint val)
{
- if (osh == NULL)
- return;
+ uint retry = PCI_CFG_RETRY;
+
+ ASSERT ((osh && (osh->magic == OS_HANDLE_MAGIC)));
+
+ /* only 4byte access supported */
+ ASSERT (size == 4);
+
+ do
+ {
+ pci_write_config_dword (osh->pdev, offset, val);
+ if (offset != PCI_BAR0_WIN)
+ break;
+ if (osl_pci_read_config (osh, offset, size) == val)
+ break;
+ }
+ while (retry--);
+
+#ifdef BCMDBG
+ if (retry < PCI_CFG_RETRY)
+ printk ("PCI CONFIG WRITE access to %d required %d retries\n", offset,
+ (PCI_CFG_RETRY - retry));
+#endif /* BCMDBG */
+}
- ASSERT(osh->magic == OS_HANDLE_MAGIC);
- kfree(osh);
+/* return bus # for the pci device pointed by osh->pdev */
+uint
+osl_pci_bus (osl_t * osh)
+{
+ ASSERT (osh && (osh->magic == OS_HANDLE_MAGIC) && osh->pdev);
+
+ return ((struct pci_dev *) osh->pdev)->bus->number;
}
-/* Return a new packet. zero out pkttag */
-void*
-osl_pktget(osl_t *osh, uint len, bool send)
+/* return slot # for the pci device pointed by osh->pdev */
+uint
+osl_pci_slot (osl_t * osh)
{
- struct sk_buff *skb;
+ ASSERT (osh && (osh->magic == OS_HANDLE_MAGIC) && osh->pdev);
- if ((skb = dev_alloc_skb(len))) {
- skb_put(skb, len);
- skb->priority = 0;
+ return PCI_SLOT (((struct pci_dev *) osh->pdev)->devfn);
+}
-#ifdef BCMDBG_PKT
- pktlist_add(&(osh->pktlist), (void *) skb);
-#endif /* BCMDBG_PKT */
+static void
+osl_pcmcia_attr (osl_t * osh, uint offset, char *buf, int size, bool write)
+{
+}
- osh->pub.pktalloced++;
- }
+void
+osl_pcmcia_read_attr (osl_t * osh, uint offset, void *buf, int size)
+{
+ osl_pcmcia_attr (osh, offset, (char *) buf, size, FALSE);
+}
+
+void
+osl_pcmcia_write_attr (osl_t * osh, uint offset, void *buf, int size)
+{
+ osl_pcmcia_attr (osh, offset, (char *) buf, size, TRUE);
+}
+
+
+#ifdef BCMDBG_MEM
+
+void *
+osl_debug_malloc (osl_t * osh, uint size, int line, char *file)
+{
+ bcm_mem_link_t *p;
+ char *basename;
+
+ ASSERT (size);
- return ((void*) skb);
+ if ((p =
+ (bcm_mem_link_t *) osl_malloc (osh,
+ sizeof (bcm_mem_link_t) + size)) ==
+ NULL)
+ return (NULL);
+
+ p->size = size;
+ p->line = line;
+
+ basename = strrchr (file, '/');
+ /* skip the '/' */
+ if (basename)
+ basename++;
+
+ if (!basename)
+ basename = file;
+
+ strncpy (p->file, basename, BCM_MEM_FILENAME_LEN);
+ p->file[BCM_MEM_FILENAME_LEN - 1] = '\0';
+
+ /* link this block */
+ p->prev = NULL;
+ p->next = osh->dbgmem_list;
+ if (p->next)
+ p->next->prev = p;
+ osh->dbgmem_list = p;
+
+ return p + 1;
}
-typedef void (*pktfree_cb_fn_t)(void *ctx, void *pkt, uint16 status);
-/* Free the driver packet. Free the tag if present */
void
-osl_pktfree(osl_t *osh, void *p, bool send)
+osl_debug_mfree (osl_t * osh, void *addr, uint size, int line, char *file)
{
- struct sk_buff *skb, *nskb;
- pktfree_cb_fn_t tx_fn = osh->pub.tx_fn;
+ bcm_mem_link_t *p =
+ (bcm_mem_link_t *) ((int8 *) addr - sizeof (bcm_mem_link_t));
+
+ ASSERT ((osh && (osh->magic == OS_HANDLE_MAGIC)));
+
+ if (p->size == 0)
+ {
+ printk
+ ("osl_debug_mfree: double free on addr %p size %d at line %d file %s\n",
+ addr, size, line, file);
+ ASSERT (p->size);
+ return;
+ }
+
+ if (p->size != size)
+ {
+ printk
+ ("osl_debug_mfree: dealloc size %d does not match alloc size %d on addr %p"
+ " at line %d file %s\n", size, p->size, addr, line, file);
+ ASSERT (p->size == size);
+ return;
+ }
+
+ /* unlink this block */
+ if (p->prev)
+ p->prev->next = p->next;
+ if (p->next)
+ p->next->prev = p->prev;
+ if (osh->dbgmem_list == p)
+ osh->dbgmem_list = p->next;
+ p->next = p->prev = NULL;
+
+ osl_mfree (osh, p, size + sizeof (bcm_mem_link_t));
+}
- skb = (struct sk_buff*) p;
-
- if (send && tx_fn)
- tx_fn(osh->pub.tx_ctx, p, 0);
+int
+osl_debug_memdump (osl_t * osh, struct bcmstrbuf *b)
+{
+ bcm_mem_link_t *p;
- /* perversion: we use skb->next to chain multi-skb packets */
- while (skb) {
- nskb = skb->next;
- skb->next = NULL;
+ ASSERT ((osh && (osh->magic == OS_HANDLE_MAGIC)));
-#ifdef BCMDBG_PKT
- pktlist_remove(&(osh->pktlist), (void *) skb);
-#endif /* BCMDBG_PKT */
+ bcm_bprintf (b, " Address\tSize\tFile:line\n");
+ for (p = osh->dbgmem_list; p; p = p->next)
+ bcm_bprintf (b, "0x%08x\t%5d\t%s:%d\n",
+ (uintptr) p + sizeof (bcm_mem_link_t), p->size, p->file,
+ p->line);
- if (skb->destructor) {
- /* cannot kfree_skb() on hard IRQ (net/core/skbuff.c) if destructor exists
- */
- dev_kfree_skb_any(skb);
- } else {
- /* can free immediately (even in_irq()) if destructor does not exist */
- dev_kfree_skb(skb);
- }
+ return 0;
+}
- osh->pub.pktalloced--;
+#endif /* BCMDBG_MEM */
- skb = nskb;
- }
+void *
+osl_malloc (osl_t * osh, uint size)
+{
+ void *addr;
+
+ /* only ASSERT if osh is defined */
+ if (osh)
+ ASSERT (osh->magic == OS_HANDLE_MAGIC);
+
+ if ((addr = kmalloc (size, GFP_ATOMIC)) == NULL)
+ {
+ if (osh)
+ osh->failed++;
+ return (NULL);
+ }
+ if (osh)
+ osh->malloced += size;
+
+ return (addr);
}
-void*
-osl_malloc(osl_t *osh, uint size)
+void
+osl_mfree (osl_t * osh, void *addr, uint size)
{
- void *addr;
+ if (osh)
+ {
+ ASSERT (osh->magic == OS_HANDLE_MAGIC);
+ osh->malloced -= size;
+ }
+ kfree (addr);
+}
- /* only ASSERT if osh is defined */
- if (osh)
- ASSERT(osh->magic == OS_HANDLE_MAGIC);
+uint
+osl_malloced (osl_t * osh)
+{
+ ASSERT ((osh && (osh->magic == OS_HANDLE_MAGIC)));
+ return (osh->malloced);
+}
- if ((addr = kmalloc(size, GFP_ATOMIC)) == NULL) {
- if (osh)
- osh->failed++;
- return (NULL);
- }
- if (osh)
- osh->malloced += size;
+uint
+osl_malloc_failed (osl_t * osh)
+{
+ ASSERT ((osh && (osh->magic == OS_HANDLE_MAGIC)));
+ return (osh->failed);
+}
+
+void *
+osl_dma_alloc_consistent (osl_t * osh, uint size, ulong * pap)
+{
+ ASSERT ((osh && (osh->magic == OS_HANDLE_MAGIC)));
- return (addr);
+ return (pci_alloc_consistent (osh->pdev, size, (dma_addr_t *) pap));
}
void
-osl_mfree(osl_t *osh, void *addr, uint size)
+osl_dma_free_consistent (osl_t * osh, void *va, uint size, ulong pa)
{
- if (osh) {
- ASSERT(osh->magic == OS_HANDLE_MAGIC);
- osh->malloced -= size;
- }
- kfree(addr);
+ ASSERT ((osh && (osh->magic == OS_HANDLE_MAGIC)));
+
+ pci_free_consistent (osh->pdev, size, va, (dma_addr_t) pa);
}
uint
-osl_malloced(osl_t *osh)
+osl_dma_map (osl_t * osh, void *va, uint size, int direction)
{
- ASSERT((osh && (osh->magic == OS_HANDLE_MAGIC)));
- return (osh->malloced);
+ int dir;
+
+ ASSERT ((osh && (osh->magic == OS_HANDLE_MAGIC)));
+ dir = (direction == DMA_TX) ? PCI_DMA_TODEVICE : PCI_DMA_FROMDEVICE;
+ return (pci_map_single (osh->pdev, va, size, dir));
}
-uint osl_malloc_failed(osl_t *osh)
+void
+osl_dma_unmap (osl_t * osh, uint pa, uint size, int direction)
{
- ASSERT((osh && (osh->magic == OS_HANDLE_MAGIC)));
- return (osh->failed);
+ int dir;
+
+ ASSERT ((osh && (osh->magic == OS_HANDLE_MAGIC)));
+ dir = (direction == DMA_TX) ? PCI_DMA_TODEVICE : PCI_DMA_FROMDEVICE;
+ pci_unmap_single (osh->pdev, (uint32) pa, size, dir);
}
-#undef osl_delay
+#if defined(BINOSL) || defined(BCMDBG_ASSERT)
void
-osl_delay(uint usec)
+osl_assert (char *exp, char *file, int line)
{
- OSL_DELAY(usec);
+ char tempbuf[255];
+
+ sprintf (tempbuf, "assertion \"%s\" failed: file \"%s\", line %d\n", exp,
+ file, line);
+ panic (tempbuf);
+}
+#endif /* BCMDBG_ASSERT || BINOSL */
+
+void
+osl_delay (uint usec)
+{
+ uint d;
+
+ while (usec > 0)
+ {
+ d = MIN (usec, 1000);
+ udelay (d);
+ usec -= d;
+ }
}
/* Clone a packet.
* The pkttag contents are NOT cloned.
*/
void *
-osl_pktdup(osl_t *osh, void *skb)
+osl_pktdup (osl_t * osh, void *skb)
+{
+ void *p;
+
+ if ((p = skb_clone ((struct sk_buff *) skb, GFP_ATOMIC)) == NULL)
+ return NULL;
+
+ /* skb_clone copies skb->cb.. we don't want that */
+ if (osh->pub.pkttag)
+ bzero ((void *) ((struct sk_buff *) p)->cb, OSL_PKTTAG_SZ);
+
+ /* Increment the packet counter */
+ osh->pub.pktalloced++;
+#ifdef BCMDBG_PKT
+ pktlist_add (&(osh->pktlist), (void *) p);
+#endif /* BCMDBG_PKT */
+ return (p);
+}
+
+uint
+osl_pktalloced (osl_t * osh)
+{
+ return (osh->pub.pktalloced);
+}
+
+#ifdef BCMDBG_PKT
+char *
+osl_pktlist_dump (osl_t * osh, char *buf)
+{
+ pktlist_dump (&(osh->pktlist), buf);
+ return buf;
+}
+
+void
+osl_pktlist_add (osl_t * osh, void *p)
+{
+ pktlist_add (&(osh->pktlist), p);
+}
+
+void
+osl_pktlist_remove (osl_t * osh, void *p)
+{
+ pktlist_remove (&(osh->pktlist), p);
+}
+#endif /* BCMDBG_PKT */
+
+/*
+ * BINOSL selects the slightly slower function-call-based binary compatible osl.
+ */
+#ifdef BINOSL
+
+int
+osl_printf (const char *format, ...)
+{
+ va_list args;
+ char buf[1024];
+ int len;
+
+ /* sprintf into a local buffer because there *is* no "vprintk()".. */
+ va_start (args, format);
+ len = vsnprintf (buf, 1024, format, args);
+ va_end (args);
+
+ if (len > sizeof (buf))
+ {
+ printk ("osl_printf: buffer overrun\n");
+ return (0);
+ }
+
+ return (printk (buf));
+}
+
+int
+osl_sprintf (char *buf, const char *format, ...)
+{
+ va_list args;
+ int rc;
+
+ va_start (args, format);
+ rc = vsprintf (buf, format, args);
+ va_end (args);
+ return (rc);
+}
+
+int
+osl_strcmp (const char *s1, const char *s2)
+{
+ return (strcmp (s1, s2));
+}
+
+int
+osl_strncmp (const char *s1, const char *s2, uint n)
+{
+ return (strncmp (s1, s2, n));
+}
+
+int
+osl_strlen (const char *s)
+{
+ return (strlen (s));
+}
+
+char *
+osl_strcpy (char *d, const char *s)
+{
+ return (strcpy (d, s));
+}
+
+char *
+osl_strncpy (char *d, const char *s, uint n)
+{
+ return (strncpy (d, s, n));
+}
+
+void
+bcopy (const void *src, void *dst, int len)
+{
+ memcpy (dst, src, len);
+}
+
+int
+bcmp (const void *b1, const void *b2, int len)
+{
+ return (memcmp (b1, b2, len));
+}
+
+void
+bzero (void *b, int len)
+{
+ memset (b, '\0', len);
+}
+
+uint32
+osl_readl (volatile uint32 * r)
+{
+ return (readl (r));
+}
+
+uint16
+osl_readw (volatile uint16 * r)
+{
+ return (readw (r));
+}
+
+uint8
+osl_readb (volatile uint8 * r)
+{
+ return (readb (r));
+}
+
+void
+osl_writel (uint32 v, volatile uint32 * r)
+{
+ writel (v, r);
+}
+
+void
+osl_writew (uint16 v, volatile uint16 * r)
+{
+ writew (v, r);
+}
+
+void
+osl_writeb (uint8 v, volatile uint8 * r)
+{
+ writeb (v, r);
+}
+
+void *
+osl_uncached (void *va)
+{
+#ifdef mips
+ return ((void *) KSEG1ADDR (va));
+#else
+ return ((void *) va);
+#endif /* mips */
+}
+
+uint
+osl_getcycles (void)
{
- void * p;
+ uint cycles;
+
+#if defined(mips)
+ cycles = read_c0_count () * 2;
+#elif defined(__i386__)
+ rdtscl (cycles);
+#else
+ cycles = 0;
+#endif /* defined(mips) */
+ return cycles;
+}
- if ((p = skb_clone((struct sk_buff*)skb, GFP_ATOMIC)) == NULL)
- return NULL;
+void *
+osl_reg_map (uint32 pa, uint size)
+{
+ return (ioremap_nocache ((unsigned long) pa, (unsigned long) size));
+}
- /* skb_clone copies skb->cb.. we don't want that */
- if (osh->pub.pkttag)
- bzero((void*)((struct sk_buff *)p)->cb, OSL_PKTTAG_SZ);
+void
+osl_reg_unmap (void *va)
+{
+ iounmap (va);
+}
- /* Increment the packet counter */
- osh->pub.pktalloced++;
- return (p);
+int
+osl_busprobe (uint32 * val, uint32 addr)
+{
+#ifdef mips
+ return get_dbe (*val, (uint32 *) addr);
+#else
+ *val = readl ((uint32 *) (uintptr) addr);
+ return 0;
+#endif /* mips */
+}
+
+bool
+osl_pktshared (void *skb)
+{
+ return (((struct sk_buff *) skb)->cloned);
+}
+
+uchar *
+osl_pktdata (osl_t * osh, void *skb)
+{
+ return (((struct sk_buff *) skb)->data);
}
uint
-osl_pktalloced(osl_t *osh)
+osl_pktlen (osl_t * osh, void *skb)
+{
+ return (((struct sk_buff *) skb)->len);
+}
+
+uint
+osl_pktheadroom (osl_t * osh, void *skb)
+{
+ return (uint) skb_headroom ((struct sk_buff *) skb);
+}
+
+uint
+osl_pkttailroom (osl_t * osh, void *skb)
+{
+ return (uint) skb_tailroom ((struct sk_buff *) skb);
+}
+
+void *
+osl_pktnext (osl_t * osh, void *skb)
+{
+ return (((struct sk_buff *) skb)->next);
+}
+
+void
+osl_pktsetnext (void *skb, void *x)
+{
+ ((struct sk_buff *) skb)->next = (struct sk_buff *) x;
+}
+
+void
+osl_pktsetlen (osl_t * osh, void *skb, uint len)
+{
+ __skb_trim ((struct sk_buff *) skb, len);
+}
+
+uchar *
+osl_pktpush (osl_t * osh, void *skb, int bytes)
+{
+ return (skb_push ((struct sk_buff *) skb, bytes));
+}
+
+uchar *
+osl_pktpull (osl_t * osh, void *skb, int bytes)
+{
+ return (skb_pull ((struct sk_buff *) skb, bytes));
+}
+
+void *
+osl_pkttag (void *skb)
{
- return (osh->pub.pktalloced);
+ return ((void *) (((struct sk_buff *) skb)->cb));
+}
+
+void *
+osl_pktlink (void *skb)
+{
+ return (((struct sk_buff *) skb)->prev);
+}
+
+void
+osl_pktsetlink (void *skb, void *x)
+{
+ ((struct sk_buff *) skb)->prev = (struct sk_buff *) x;
+}
+
+uint
+osl_pktprio (void *skb)
+{
+ return (((struct sk_buff *) skb)->priority);
+}
+
+void
+osl_pktsetprio (void *skb, uint x)
+{
+ ((struct sk_buff *) skb)->priority = x;
+}
+
+/* Convert a driver packet to native(OS) packet
+ * In the process, packettag is zeroed out before sending up
+ * IP code depends on skb->cb to be setup correctly with various options
+ * In our case, that means it should be 0
+ */
+struct sk_buff *
+osl_pkt_tonative (osl_t * osh, void *pkt)
+{
+ struct sk_buff *nskb;
+
+ if (osh->pub.pkttag)
+ bzero ((void *) ((struct sk_buff *) pkt)->cb, OSL_PKTTAG_SZ);
+
+ /* Decrement the packet counter */
+ for (nskb = (struct sk_buff *) pkt; nskb; nskb = nskb->next)
+ {
+#ifdef BCMDBG_PKT
+ pktlist_remove (&(osh->pktlist), (void *) nskb);
+#endif /* BCMDBG_PKT */
+ osh->pub.pktalloced--;
+ }
+
+ return (struct sk_buff *) pkt;
+}
+
+/* Convert a native(OS) packet to driver packet.
+ * In the process, native packet is destroyed, there is no copying
+ * Also, a packettag is zeroed out
+ */
+void *
+osl_pkt_frmnative (osl_t * osh, struct sk_buff *skb)
+{
+ struct sk_buff *nskb;
+
+ if (osh->pub.pkttag)
+ bzero ((void *) skb->cb, OSL_PKTTAG_SZ);
+
+ /* Increment the packet counter */
+ for (nskb = skb; nskb; nskb = nskb->next)
+ {
+#ifdef BCMDBG_PKT
+ pktlist_add (&(osh->pktlist), (void *) nskb);
+#endif /* BCMDBG_PKT */
+ osh->pub.pktalloced++;
+ }
+
+ return (void *) skb;
}
+#endif /* BINOSL */
/*
* Linux OS Independent Layer
*
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
* All Rights Reserved.
*
* THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
* SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
*
- * $Id: linux_osl.h,v 1.1.1.13 2006/04/08 06:13:39 honor Exp $
+ * $Id$
*/
#ifndef _linux_osl_h_
#include <linuxver.h>
#include <osl.h>
-#define OSL_PKTTAG_SZ 32 /* Size of PktTag */
+#define OSL_PKTTAG_SZ 32 /* Size of PktTag */
-/* osl handle type forward declaration */
-typedef struct osl_dmainfo osldma_t;
+/* microsecond delay */
+extern void osl_delay(uint usec);
/* OSL initialization */
-extern osl_t *osl_attach(void *pdev, bool pkttag);
+extern osl_t *osl_attach(void *pdev, uint bustype, bool pkttag);
extern void osl_detach(osl_t *osh);
+#define PKTFREESETCB(osh, _tx_fn, _tx_ctx) \
+ do { \
+ ((osl_pubinfo_t*)osh)->tx_fn = _tx_fn; \
+ ((osl_pubinfo_t*)osh)->tx_ctx = _tx_ctx; \
+ } while (0)
+
/* host/bus architecture-specific byte swap */
#define BUS_SWAP32(v) (v)
+
+
#define MALLOC_FAILED(osh) osl_malloc_failed((osh))
extern void *osl_malloc(osl_t *osh, uint size);
extern uint osl_malloced(osl_t *osh);
extern uint osl_malloc_failed(osl_t *osh);
-/* API for DMA addressing capability */
-#define DMA_MAP(osh, va, size, direction, p) \
- osl_dma_map((osh), (va), (size), (direction))
-#define DMA_UNMAP(osh, pa, size, direction, p) \
- osl_dma_unmap((osh), (pa), (size), (direction))
-static inline uint
-osl_dma_map(void *osh, void *va, uint size, int direction)
-{
- int dir;
- struct pci_dev *dev;
-
- dev = (osh == NULL ? NULL : ((osl_t *)osh)->pdev);
- dir = (direction == DMA_TX)? PCI_DMA_TODEVICE: PCI_DMA_FROMDEVICE;
- return (pci_map_single(dev, va, size, dir));
-}
-
-static inline void
-osl_dma_unmap(void *osh, uint pa, uint size, int direction)
-{
- int dir;
- struct pci_dev *dev;
-
- dev = (osh == NULL ? NULL : ((osl_t *)osh)->pdev);
- dir = (direction == DMA_TX)? PCI_DMA_TODEVICE: PCI_DMA_FROMDEVICE;
- pci_unmap_single(dev, (uint32)pa, size, dir);
-}
-
-#define OSL_DMADDRWIDTH(osh, addrwidth) do {} while (0)
+/* allocate/free shared (dma-able) consistent memory */
#define DMA_CONSISTENT_ALIGN PAGE_SIZE
#define DMA_ALLOC_CONSISTENT(osh, size, pap, dmah) \
osl_dma_alloc_consistent((osh), (size), (pap))
#define DMA_FREE_CONSISTENT(osh, va, size, pa, dmah) \
osl_dma_free_consistent((osh), (void*)(va), (size), (pa))
-static inline void*
-osl_dma_alloc_consistent(osl_t *osh, uint size, ulong *pap)
-{
- return (pci_alloc_consistent(osh->pdev, size, (dma_addr_t*)pap));
-}
+extern void *osl_dma_alloc_consistent(osl_t *osh, uint size, ulong *pap);
+extern void osl_dma_free_consistent(osl_t *osh, void *va, uint size, ulong pa);
-static inline void
-osl_dma_free_consistent(osl_t *osh, void *va, uint size, ulong pa)
-{
- pci_free_consistent(osh->pdev, size, va, (dma_addr_t)pa);
-}
+/* map/unmap direction */
+#define DMA_TX 1 /* TX direction for DMA */
+#define DMA_RX 2 /* RX direction for DMA */
+
+/* map/unmap shared (dma-able) memory */
+#define DMA_MAP(osh, va, size, direction, p, dmah) \
+ osl_dma_map((osh), (va), (size), (direction))
+#define DMA_UNMAP(osh, pa, size, direction, p, dmah) \
+ osl_dma_unmap((osh), (pa), (size), (direction))
+extern uint osl_dma_map(osl_t *osh, void *va, uint size, int direction);
+extern void osl_dma_unmap(osl_t *osh, uint pa, uint size, int direction);
+/* API for DMA addressing capability */
+#define OSL_DMADDRWIDTH(osh, addrwidth) do {} while (0)
/* register access macros */
#if defined(BCMJTAG)
#include <bcmjtag.h>
-#define R_REG(osh, r) bcmjtag_read(NULL, (uint32)(r), sizeof(*(r)))
-#define W_REG(osh, r, v) bcmjtag_write(NULL, (uint32)(r), (uint32)(v), sizeof(*(r)))
-#endif /* defined(BCMSDIO) */
+#define OSL_WRITE_REG(osh, r, v) (bcmjtag_write(NULL, (uintptr)(r), (v), sizeof(*(r))))
+#define OSL_READ_REG(osh, r) (bcmjtag_read(NULL, (uintptr)(r), sizeof(*(r))))
+#endif
+
+#if defined(BCMJTAG)
+#define SELECT_BUS_WRITE(osh, mmap_op, bus_op) if (((osl_pubinfo_t*)(osh))->mmbus) \
+ mmap_op else bus_op
+#define SELECT_BUS_READ(osh, mmap_op, bus_op) (((osl_pubinfo_t*)(osh))->mmbus) ? \
+ mmap_op : bus_op
+#else
+#define SELECT_BUS_WRITE(osh, mmap_op, bus_op) mmap_op
+#define SELECT_BUS_READ(osh, mmap_op, bus_op) mmap_op
+#endif
+
+/*
+ * BINOSL selects the slightly slower function-call-based binary compatible osl.
+ * Macros expand to calls to functions defined in linux_osl.c .
+ */
+#ifndef BINOSL
+
+/* string library, kernel mode */
+#ifndef printf
+#define printf(fmt, args...) printk(fmt, ## args)
+#endif /* printf */
+#include <linux/kernel.h>
+#include <linux/string.h>
+
+/* register access macros */
+#define AND_REG(osh, r, v) W_REG(osh, (r), R_REG(osh, r) & (v))
+#define OR_REG(osh, r, v) W_REG(osh, (r), R_REG(osh, r) | (v))
+
+/* bcopy, bcmp, and bzero */
+#define bcopy(src, dst, len) memcpy((dst), (src), (len))
+#define bcmp(b1, b2, len) memcmp((b1), (b2), (len))
+#define bzero(b, len) memset((b), '\0', (len))
+
+/* uncached virtual address */
+#ifdef mips
+#define OSL_UNCACHED(va) KSEG1ADDR((va))
+#include <asm/addrspace.h>
+#else
+#define OSL_UNCACHED(va) (va)
+#endif /* mips */
+
+/* get processor cycle count */
+#if defined(mips)
+#define OSL_GETCYCLES(x) ((x) = read_c0_count() * 2)
+#elif defined(__i386__)
+#define OSL_GETCYCLES(x) rdtscl((x))
+#else
+#define OSL_GETCYCLES(x) ((x) = 0)
+#endif /* defined(mips) */
+
+/* dereference an address that may cause a bus exception */
+#ifdef mips
+#if defined(MODULE) && (LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 17))
+#define BUSPROBE(val, addr) panic("get_dbe() will not fixup a bus exception when compiled into"\
+ " a module")
+#else
+#define BUSPROBE(val, addr) get_dbe((val), (addr))
+#include <asm/paccess.h>
+#endif /* defined(MODULE) && (LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 17)) */
+#else
+#define BUSPROBE(val, addr) ({ (val) = R_REG(NULL, (addr)); 0; })
+#endif /* mips */
+
+/* map/unmap physical to virtual I/O */
+#define REG_MAP(pa, size) ioremap_nocache((unsigned long)(pa), (unsigned long)(size))
+#define REG_UNMAP(va) iounmap((void *)(va))
+
+/* shared (dma-able) memory access macros */
+#define R_SM(r) *(r)
+#define W_SM(r, v) (*(r) = (v))
+#define BZERO_SM(r, len) memset((r), '\0', (len))
/* packet primitives */
-#define PKTGET(osh, len, send) osl_pktget((osh), (len), (send))
+#define PKTGET(osh, len, send) osl_pktget((osh), (len))
#define PKTFREE(osh, skb, send) osl_pktfree((osh), (skb), (send))
#define PKTDATA(osh, skb) (((struct sk_buff*)(skb))->data)
#define PKTLEN(osh, skb) (((struct sk_buff*)(skb))->len)
#define PKTPULL(osh, skb, bytes) skb_pull((struct sk_buff*)(skb), (bytes))
#define PKTDUP(osh, skb) osl_pktdup((osh), (skb))
#define PKTTAG(skb) ((void*)(((struct sk_buff*)(skb))->cb))
-#define PKTALLOCED(osh) osl_pktalloced((osh))
+#define PKTALLOCED(osh) ((osl_pubinfo_t *)(osh))->pktalloced
+#ifdef BCMDBG_PKT /* pkt logging for debugging */
+#define PKTLIST_DUMP(osh, buf) osl_pktlist_dump(osh, buf)
+#else /* BCMDBG_PKT */
#define PKTLIST_DUMP(osh, buf)
+#endif /* BCMDBG_PKT */
+
+#ifdef BCMDBG_PKT /* pkt logging for debugging */
+extern void osl_pktlist_add(osl_t *osh, void *p);
+extern void osl_pktlist_remove(osl_t *osh, void *p);
+extern char *osl_pktlist_dump(osl_t *osh, char *buf);
+#endif /* BCMDBG_PKT */
/* Convert a native(OS) packet to driver packet.
* In the process, native packet is destroyed, there is no copying
* Also, a packettag is zeroed out
*/
static INLINE void *
-osl_pkt_frmnative(osl_pubinfo_t*osh, struct sk_buff *skb)
+osl_pkt_frmnative(osl_pubinfo_t *osh, struct sk_buff *skb)
{
struct sk_buff *nskb;
/* Increment the packet counter */
for (nskb = skb; nskb; nskb = nskb->next) {
+#ifdef BCMDBG_PKT
+ osl_pktlist_add((osl_t *)osh, (void *) nskb);
+#endif /* BCMDBG_PKT */
osh->pktalloced++;
}
return (void *)skb;
}
-#define PKTFRMNATIVE(osh, skb) osl_pkt_frmnative(((osl_pubinfo_t*)osh), \
- (struct sk_buff*)(skb))
+#define PKTFRMNATIVE(osh, skb) osl_pkt_frmnative(((osl_pubinfo_t *)osh), (struct sk_buff*)(skb))
/* Convert a driver packet to native(OS) packet
* In the process, packettag is zeroed out before sending up
* In our case, that means it should be 0
*/
static INLINE struct sk_buff *
-osl_pkt_tonative(osl_pubinfo_t*osh, void *pkt)
+osl_pkt_tonative(osl_pubinfo_t *osh, void *pkt)
{
struct sk_buff *nskb;
/* Decrement the packet counter */
for (nskb = (struct sk_buff *)pkt; nskb; nskb = nskb->next) {
+#ifdef BCMDBG_PKT
+ osl_pktlist_remove((osl_t *)osh, (void *) nskb);
+#endif /* BCMDBG_PKT */
osh->pktalloced--;
}
return (struct sk_buff *)pkt;
}
-#define PKTTONATIVE(osh, pkt) osl_pkt_tonative((osl_pubinfo_t*)(osh), (pkt))
+#define PKTTONATIVE(osh, pkt) osl_pkt_tonative((osl_pubinfo_t *)(osh), (pkt))
#define PKTLINK(skb) (((struct sk_buff*)(skb))->prev)
#define PKTSETLINK(skb, x) (((struct sk_buff*)(skb))->prev = (struct sk_buff*)(x))
#define PKTPRIO(skb) (((struct sk_buff*)(skb))->priority)
#define PKTSETPRIO(skb, x) (((struct sk_buff*)(skb))->priority = (x))
+#define PKTSUMNEEDED(skb) (((struct sk_buff*)(skb))->ip_summed == CHECKSUM_HW)
+#define PKTSETSUMGOOD(skb, x) (((struct sk_buff*)(skb))->ip_summed = \
+ ((x) ? CHECKSUM_UNNECESSARY : CHECKSUM_NONE))
+/* PKTSETSUMNEEDED and PKTSUMGOOD are not possible because skb->ip_summed is overloaded */
#define PKTSHARED(skb) (((struct sk_buff*)(skb))->cloned)
-extern void *osl_pktget(osl_t *osh, uint len, bool send);
+extern void *osl_pktget(osl_t *osh, uint len);
+extern void osl_pktfree(osl_t *osh, void *skb, bool send);
+extern void *osl_pktdup(osl_t *osh, void *skb);
+#else /* BINOSL */
+
+/* string library */
+#ifndef LINUX_OSL
+#undef printf
+#define printf(fmt, args...) osl_printf((fmt), ## args)
+#undef sprintf
+#define sprintf(buf, fmt, args...) osl_sprintf((buf), (fmt), ## args)
+#undef strcmp
+#define strcmp(s1, s2) osl_strcmp((s1), (s2))
+#undef strncmp
+#define strncmp(s1, s2, n) osl_strncmp((s1), (s2), (n))
+#undef strlen
+#define strlen(s) osl_strlen((s))
+#undef strcpy
+#define strcpy(d, s) osl_strcpy((d), (s))
+#undef strncpy
+#define strncpy(d, s, n) osl_strncpy((d), (s), (n))
+#endif /* LINUX_OSL */
+extern int osl_printf(const char *format, ...);
+extern int osl_sprintf(char *buf, const char *format, ...);
+extern int osl_strcmp(const char *s1, const char *s2);
+extern int osl_strncmp(const char *s1, const char *s2, uint n);
+extern int osl_strlen(const char *s);
+extern char* osl_strcpy(char *d, const char *s);
+extern char* osl_strncpy(char *d, const char *s, uint n);
+
+/* register access macros */
+#if !defined(BCMJTAG)
+#define R_REG(osh, r) (\
+ sizeof(*(r)) == sizeof(uint8) ? osl_readb((volatile uint8*)(r)) : \
+ sizeof(*(r)) == sizeof(uint16) ? osl_readw((volatile uint16*)(r)) : \
+ osl_readl((volatile uint32*)(r)) \
+)
+#define W_REG(osh, r, v) do { \
+ switch (sizeof(*(r))) { \
+ case sizeof(uint8): osl_writeb((uint8)(v), (volatile uint8*)(r)); break; \
+ case sizeof(uint16): osl_writew((uint16)(v), (volatile uint16*)(r)); break; \
+ case sizeof(uint32): osl_writel((uint32)(v), (volatile uint32*)(r)); break; \
+ } \
+} while (0)
+#endif
+
+#define AND_REG(osh, r, v) W_REG(osh, (r), R_REG(osh, r) & (v))
+#define OR_REG(osh, r, v) W_REG(osh, (r), R_REG(osh, r) | (v))
+extern uint8 osl_readb(volatile uint8 *r);
+extern uint16 osl_readw(volatile uint16 *r);
+extern uint32 osl_readl(volatile uint32 *r);
+extern void osl_writeb(uint8 v, volatile uint8 *r);
+extern void osl_writew(uint16 v, volatile uint16 *r);
+extern void osl_writel(uint32 v, volatile uint32 *r);
+
+/* bcopy, bcmp, and bzero */
+extern void bcopy(const void *src, void *dst, int len);
+extern int bcmp(const void *b1, const void *b2, int len);
+extern void bzero(void *b, int len);
+
+/* uncached virtual address */
+#define OSL_UNCACHED(va) osl_uncached((va))
+extern void *osl_uncached(void *va);
+
+/* get processor cycle count */
+#define OSL_GETCYCLES(x) ((x) = osl_getcycles())
+extern uint osl_getcycles(void);
+
+/* dereference an address that may target abort */
+#define BUSPROBE(val, addr) osl_busprobe(&(val), (addr))
+extern int osl_busprobe(uint32 *val, uint32 addr);
+
+/* map/unmap physical to virtual */
+#define REG_MAP(pa, size) osl_reg_map((pa), (size))
+#define REG_UNMAP(va) osl_reg_unmap((va))
+extern void *osl_reg_map(uint32 pa, uint size);
+extern void osl_reg_unmap(void *va);
+
+/* shared (dma-able) memory access macros */
+#define R_SM(r) *(r)
+#define W_SM(r, v) (*(r) = (v))
+#define BZERO_SM(r, len) bzero((r), (len))
+
+/* packet primitives */
+#define PKTGET(osh, len, send) osl_pktget((osh), (len))
+#define PKTFREE(osh, skb, send) osl_pktfree((osh), (skb), (send))
+#define PKTDATA(osh, skb) osl_pktdata((osh), (skb))
+#define PKTLEN(osh, skb) osl_pktlen((osh), (skb))
+#define PKTHEADROOM(osh, skb) osl_pktheadroom((osh), (skb))
+#define PKTTAILROOM(osh, skb) osl_pkttailroom((osh), (skb))
+#define PKTNEXT(osh, skb) osl_pktnext((osh), (skb))
+#define PKTSETNEXT(osh, skb, x) osl_pktsetnext((skb), (x))
+#define PKTSETLEN(osh, skb, len) osl_pktsetlen((osh), (skb), (len))
+#define PKTPUSH(osh, skb, bytes) osl_pktpush((osh), (skb), (bytes))
+#define PKTPULL(osh, skb, bytes) osl_pktpull((osh), (skb), (bytes))
+#define PKTDUP(osh, skb) osl_pktdup((osh), (skb))
+#define PKTTAG(skb) osl_pkttag((skb))
+#define PKTFRMNATIVE(osh, skb) osl_pkt_frmnative((osh), (struct sk_buff*)(skb))
+#define PKTTONATIVE(osh, pkt) osl_pkt_tonative((osh), (pkt))
+#define PKTLINK(skb) osl_pktlink((skb))
+#define PKTSETLINK(skb, x) osl_pktsetlink((skb), (x))
+#define PKTPRIO(skb) osl_pktprio((skb))
+#define PKTSETPRIO(skb, x) osl_pktsetprio((skb), (x))
+#define PKTSHARED(skb) osl_pktshared((skb))
+#define PKTALLOCED(osh) osl_pktalloced((osh))
+#ifdef BCMDBG_PKT
+#define PKTLIST_DUMP(osh, buf) osl_pktlist_dump(osh, buf)
+#else /* BCMDBG_PKT */
+#define PKTLIST_DUMP(osh, buf)
+#endif /* BCMDBG_PKT */
+
+extern void *osl_pktget(osl_t *osh, uint len);
extern void osl_pktfree(osl_t *osh, void *skb, bool send);
+extern uchar *osl_pktdata(osl_t *osh, void *skb);
+extern uint osl_pktlen(osl_t *osh, void *skb);
+extern uint osl_pktheadroom(osl_t *osh, void *skb);
+extern uint osl_pkttailroom(osl_t *osh, void *skb);
+extern void *osl_pktnext(osl_t *osh, void *skb);
+extern void osl_pktsetnext(void *skb, void *x);
+extern void osl_pktsetlen(osl_t *osh, void *skb, uint len);
+extern uchar *osl_pktpush(osl_t *osh, void *skb, int bytes);
+extern uchar *osl_pktpull(osl_t *osh, void *skb, int bytes);
extern void *osl_pktdup(osl_t *osh, void *skb);
+extern void *osl_pkttag(void *skb);
+extern void *osl_pktlink(void *skb);
+extern void osl_pktsetlink(void *skb, void *x);
+extern uint osl_pktprio(void *skb);
+extern void osl_pktsetprio(void *skb, uint x);
+extern void *osl_pkt_frmnative(osl_t *osh, struct sk_buff *skb);
+extern struct sk_buff *osl_pkt_tonative(osl_t *osh, void *pkt);
+extern bool osl_pktshared(void *skb);
extern uint osl_pktalloced(osl_t *osh);
+#ifdef BCMDBG_PKT /* pkt logging for debugging */
+extern char *osl_pktlist_dump(osl_t *osh, char *buf);
+extern void osl_pktlist_add(osl_t *osh, void *p);
+extern void osl_pktlist_remove(osl_t *osh, void *p);
+#endif /* BCMDBG_PKT */
+
+#endif /* BINOSL */
+
#define OSL_ERROR(bcmerror) osl_error(bcmerror)
extern int osl_error(int bcmerror);
+++ /dev/null
-#!/usr/bin/perl
-#
-# Copyright (C) 2006 OpenWrt.org
-# Copyright (C) 2006 Felix Fietkau
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-use strict;
-
-my $TABLE = pack("V", 0xbadc0ded);
-my $TABLE_SIZE = 512;
-my $SLT1 = "\x01\x00\x00\x00";
-my $SLT2 = "\x02\x00\x00\x00";
-my $ACKW = "\x03\x00\x00\x00";
-my $PTABLE_END = "\xff\xff\xff\xff";
-
-my $addr = "";
-my $opcode = "";
-my $function = "";
-
-sub add_entry {
- my $key = shift;
- my $value = shift;
- my $default = shift;
-
- $TABLE .= $key;
- $TABLE .= pack("V", $value);
- $TABLE .= pack("V", $default);
-}
-
-while (<>) {
- $addr = $opcode = "";
- /^\w{8}\s*<(.*)>:$/ and $function = $1;
- /^\s*(\w+):\s*(\w{8})\s*/ and do {
- $addr = $1;
- $opcode = $2;
- };
-
- ($function eq 'wlc_update_slot_timing') and do {
- # li a2,9 -- short slot time
- ($opcode eq '24060009') and add_entry($SLT1, hex($addr), hex($opcode));
- # li v0,519 -- 510 + short slot time
- ($opcode eq '24020207') and add_entry($SLT2, hex($addr), hex($opcode));
-
- # li a2,20 -- long slot time
- ($opcode eq '24060014') and add_entry($SLT1, hex($addr), hex($opcode));
- # li v0,530 -- 510 + long slot time
- ($opcode eq '24020212') and add_entry($SLT2, hex($addr), hex($opcode));
- };
- ($function eq 'wlc_d11hdrs') and do {
- # ori s6,s6,0x1 -- ack flag (new)
- ($opcode eq '36d60001') and add_entry($ACKW, hex($addr), hex($opcode));
- # ori s3,s3,0x1 -- ack flag (old)
- ($opcode eq '36730001') and add_entry($ACKW, hex($addr), hex($opcode));
- }
-}
-
-$TABLE .= $PTABLE_END;
-$TABLE .= ("\x00" x ($TABLE_SIZE - length($TABLE)));
-print $TABLE;
+++ /dev/null
-/*
- * Misc useful os-independent macros and functions.
- *
- * Copyright 2006, Broadcom Corporation
- * All Rights Reserved.
- *
- * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
- * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
- * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
- * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
- * $Id: bcmutils.h,v 1.1.1.16 2006/04/08 06:13:39 honor Exp $
- */
-
-#ifndef _pktq_h_
-#define _pktq_h_
-#include <osl.h>
-
-/* osl multi-precedence packet queue */
-
-#define PKTQ_LEN_DEFAULT 128 /* Max 128 packets */
-#define PKTQ_MAX_PREC 16 /* Maximum precedence levels */
-
-struct pktq {
- struct pktq_prec {
- void *head; /* first packet to dequeue */
- void *tail; /* last packet to dequeue */
- uint16 len; /* number of queued packets */
- uint16 max; /* maximum number of queued packets */
- } q[PKTQ_MAX_PREC];
- uint16 num_prec; /* number of precedences in use */
- uint16 hi_prec; /* rapid dequeue hint (>= highest non-empty prec) */
- uint16 max; /* total max packets */
- uint16 len; /* total number of packets */
-};
-
-#define PKTQ_PREC_ITER(pq, prec) for (prec = (pq)->num_prec - 1; prec >= 0; prec--)
-
-/* forward definition of ether_addr structure used by some function prototypes */
-
-struct ether_addr;
-
-/* operations on a specific precedence in packet queue */
-
-#define pktq_psetmax(pq, prec, _max) ((pq)->q[prec].max = (_max))
-#define pktq_plen(pq, prec) ((pq)->q[prec].len)
-#define pktq_pavail(pq, prec) ((pq)->q[prec].max - (pq)->q[prec].len)
-#define pktq_pfull(pq, prec) ((pq)->q[prec].len >= (pq)->q[prec].max)
-#define pktq_pempty(pq, prec) ((pq)->q[prec].len == 0)
-
-#define pktq_ppeek(pq, prec) ((pq)->q[prec].head)
-#define pktq_ppeek_tail(pq, prec) ((pq)->q[prec].tail)
-
-extern void *pktq_penq(struct pktq *pq, int prec, void *p);
-extern void *pktq_penq_head(struct pktq *pq, int prec, void *p);
-extern void *pktq_pdeq(struct pktq *pq, int prec);
-extern void *pktq_pdeq_tail(struct pktq *pq, int prec);
-/* Empty the queue at particular precedence level */
-extern void pktq_pflush(osl_t *osh, struct pktq *pq, int prec, bool dir);
-/* Remove a specified packet from its queue */
-extern bool pktq_pdel(struct pktq *pq, void *p, int prec);
-
-/* operations on a set of precedences in packet queue */
-
-extern int pktq_mlen(struct pktq *pq, uint prec_bmp);
-extern void *pktq_mdeq(struct pktq *pq, uint prec_bmp, int *prec_out);
-
-/* operations on packet queue as a whole */
-
-#define pktq_len(pq) ((int)(pq)->len)
-#define pktq_max(pq) ((int)(pq)->max)
-#define pktq_avail(pq) ((int)((pq)->max - (pq)->len))
-#define pktq_full(pq) ((pq)->len >= (pq)->max)
-#define pktq_empty(pq) ((pq)->len == 0)
-
-/* operations for single precedence queues */
-#define pktenq(pq, p) pktq_penq((pq), 0, (p))
-#define pktenq_head(pq, p) pktq_penq_head((pq), 0, (p))
-#define pktdeq(pq) pktq_pdeq((pq), 0)
-#define pktdeq_tail(pq) pktq_pdeq_tail((pq), 0)
-
-extern void pktq_init(struct pktq *pq, int num_prec, int max_len);
-/* prec_out may be NULL if caller is not interested in return value */
-extern void *pktq_deq(struct pktq *pq, int *prec_out);
-extern void *pktq_deq_tail(struct pktq *pq, int *prec_out);
-extern void *pktq_peek(struct pktq *pq, int *prec_out);
-extern void *pktq_peek_tail(struct pktq *pq, int *prec_out);
-extern void pktq_flush(osl_t *osh, struct pktq *pq, bool dir); /* Empty the entire queue */
-
-/* externs */
-/* packet */
-extern uint pktcopy(osl_t *osh, void *p, uint offset, int len, uchar *buf);
-extern uint pkttotlen(osl_t *osh, void *p);
-extern void *pktlast(osl_t *osh, void *p);
-
-extern void pktsetprio(void *pkt, bool update_vtag);
-
-#endif /* _pktq_h_ */
--- /dev/null
+/*
+ * Copyright 2007, Broadcom Corporation
+ * All Rights Reserved.
+ *
+ * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
+ * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
+ * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
+ *
+ * Fundamental types and constants relating to 802.11
+ *
+ * $Id$
+ */
+
+#ifndef _802_11_H_
+#define _802_11_H_
+
+#ifndef _TYPEDEFS_H_
+#include <typedefs.h>
+#endif
+
+#ifndef _NET_ETHERNET_H_
+#include <proto/ethernet.h>
+#endif
+
+#include <proto/wpa.h>
+
+/* enable structure packing */
+#if defined(__GNUC__)
+#define PACKED __attribute__((packed))
+#else
+#pragma pack(1)
+#define PACKED
+#endif
+
+#define DOT11_TU_TO_US 1024 /* 802.11 Time Unit is 1024 microseconds */
+
+/* Generic 802.11 frame constants */
+#define DOT11_A3_HDR_LEN 24 /* d11 header length with A3 */
+#define DOT11_A4_HDR_LEN 30 /* d11 header length with A4 */
+#define DOT11_MAC_HDR_LEN DOT11_A3_HDR_LEN /* MAC header length */
+#define DOT11_FCS_LEN 4 /* d11 FCS length */
+#define DOT11_ICV_LEN 4 /* d11 ICV length */
+#define DOT11_ICV_AES_LEN 8 /* d11 ICV/AES length */
+#define DOT11_QOS_LEN 2 /* d11 QoS length */
+#define DOT11_HTC_LEN 4 /* d11 HT Control field length */
+
+#define DOT11_KEY_INDEX_SHIFT 6 /* d11 key index shift */
+#define DOT11_IV_LEN 4 /* d11 IV length */
+#define DOT11_IV_TKIP_LEN 8 /* d11 IV TKIP length */
+#define DOT11_IV_AES_OCB_LEN 4 /* d11 IV/AES/OCB length */
+#define DOT11_IV_AES_CCM_LEN 8 /* d11 IV/AES/CCM length */
+#define DOT11_IV_MAX_LEN 8 /* maximum iv len for any encryption */
+
+/* Includes MIC */
+#define DOT11_MAX_MPDU_BODY_LEN 2304 /* max MPDU body length */
+/* A4 header + QoS + CCMP + PDU + ICV + FCS = 2352 */
+#define DOT11_MAX_MPDU_LEN (DOT11_A4_HDR_LEN + \
+ DOT11_QOS_LEN + \
+ DOT11_IV_AES_CCM_LEN + \
+ DOT11_MAX_MPDU_BODY_LEN + \
+ DOT11_ICV_LEN + \
+ DOT11_FCS_LEN) /* d11 max MPDU length */
+
+#define DOT11_MAX_SSID_LEN 32 /* d11 max ssid length */
+
+/* dot11RTSThreshold */
+#define DOT11_DEFAULT_RTS_LEN 2347 /* d11 default RTS length */
+#define DOT11_MAX_RTS_LEN 2347 /* d11 max RTS length */
+
+/* dot11FragmentationThreshold */
+#define DOT11_MIN_FRAG_LEN 256 /* d11 min fragmentation length */
+#define DOT11_MAX_FRAG_LEN 2346 /* Max frag is also limited by aMPDUMaxLength
+ * of the attached PHY
+ */
+#define DOT11_DEFAULT_FRAG_LEN 2346 /* d11 default fragmentation length */
+
+/* dot11BeaconPeriod */
+#define DOT11_MIN_BEACON_PERIOD 1 /* d11 min beacon period */
+#define DOT11_MAX_BEACON_PERIOD 0xFFFF /* d11 max beacon period */
+
+/* dot11DTIMPeriod */
+#define DOT11_MIN_DTIM_PERIOD 1 /* d11 min DTIM period */
+#define DOT11_MAX_DTIM_PERIOD 0xFF /* d11 max DTIM period */
+
+/* 802.2 LLC/SNAP header used by 802.11 per 802.1H */
+#define DOT11_LLC_SNAP_HDR_LEN 8 /* d11 LLC/SNAP header length */
+#define DOT11_OUI_LEN 3 /* d11 OUI length */
+struct dot11_llc_snap_header {
+ uint8 dsap; /* always 0xAA */
+ uint8 ssap; /* always 0xAA */
+ uint8 ctl; /* always 0x03 */
+ uint8 oui[DOT11_OUI_LEN]; /* RFC1042: 0x00 0x00 0x00
+ * Bridge-Tunnel: 0x00 0x00 0xF8
+ */
+ uint16 type; /* ethertype */
+} PACKED;
+
+/* RFC1042 header used by 802.11 per 802.1H */
+#define RFC1042_HDR_LEN (ETHER_HDR_LEN + DOT11_LLC_SNAP_HDR_LEN) /* RCF1042 header length */
+
+/* Generic 802.11 MAC header */
+/*
+ * N.B.: This struct reflects the full 4 address 802.11 MAC header.
+ * The fields are defined such that the shorter 1, 2, and 3
+ * address headers just use the first k fields.
+ */
+struct dot11_header {
+ uint16 fc; /* frame control */
+ uint16 durid; /* duration/ID */
+ struct ether_addr a1; /* address 1 */
+ struct ether_addr a2; /* address 2 */
+ struct ether_addr a3; /* address 3 */
+ uint16 seq; /* sequence control */
+ struct ether_addr a4; /* address 4 */
+} PACKED;
+
+/* Control frames */
+
+struct dot11_rts_frame {
+ uint16 fc; /* frame control */
+ uint16 durid; /* duration/ID */
+ struct ether_addr ra; /* receiver address */
+ struct ether_addr ta; /* transmitter address */
+} PACKED;
+#define DOT11_RTS_LEN 16 /* d11 RTS frame length */
+
+struct dot11_cts_frame {
+ uint16 fc; /* frame control */
+ uint16 durid; /* duration/ID */
+ struct ether_addr ra; /* receiver address */
+} PACKED;
+#define DOT11_CTS_LEN 10 /* d11 CTS frame length */
+
+struct dot11_ack_frame {
+ uint16 fc; /* frame control */
+ uint16 durid; /* duration/ID */
+ struct ether_addr ra; /* receiver address */
+} PACKED;
+#define DOT11_ACK_LEN 10 /* d11 ACK frame length */
+
+struct dot11_ps_poll_frame {
+ uint16 fc; /* frame control */
+ uint16 durid; /* AID */
+ struct ether_addr bssid; /* receiver address, STA in AP */
+ struct ether_addr ta; /* transmitter address */
+} PACKED;
+#define DOT11_PS_POLL_LEN 16 /* d11 PS poll frame length */
+
+struct dot11_cf_end_frame {
+ uint16 fc; /* frame control */
+ uint16 durid; /* duration/ID */
+ struct ether_addr ra; /* receiver address */
+ struct ether_addr bssid; /* transmitter address, STA in AP */
+} PACKED;
+#define DOT11_CS_END_LEN 16 /* d11 CF-END frame length */
+
+/* BA/BAR Control parameters */
+#define DOT11_BA_CTL_POLICY_NORMAL 0x0000 /* normal ack */
+#define DOT11_BA_CTL_POLICY_NOACK 0x0001 /* no ack */
+#define DOT11_BA_CTL_POLICY_MASK 0x0001 /* ack policy mask */
+
+#define DOT11_BA_CTL_MTID 0x0002 /* multi tid BA */
+#define DOT11_BA_CTL_COMPRESSED 0x0004 /* compressed bitmap */
+
+#define DOT11_BA_CTL_NUMMSDU_MASK 0x0FC0 /* num msdu in bitmap mask */
+#define DOT11_BA_CTL_NUMMSDU_SHIFT 6 /* num msdu in bitmap shift */
+
+#define DOT11_BA_CTL_TID_MASK 0xF000 /* tid mask */
+#define DOT11_BA_CTL_TID_SHIFT 12 /* tid shift */
+
+/* control frame header (BA/BAR) */
+struct dot11_ctl_header {
+ uint16 fc; /* frame control */
+ uint16 durid; /* duration/ID */
+ struct ether_addr ra; /* receiver address */
+ struct ether_addr ta; /* transmitter address */
+} PACKED;
+#define DOT11_CTL_HDR_LEN 16 /* control frame hdr len */
+
+/* BAR frame payload */
+struct dot11_bar {
+ uint16 bar_control; /* BAR Control */
+ uint16 seqnum; /* Starting Sequence control */
+} PACKED;
+#define DOT11_BAR_LEN 4 /* BAR frame payload length */
+
+#define DOT11_BA_BITMAP_LEN 128 /* bitmap length */
+#define DOT11_BA_CMP_BITMAP_LEN 8 /* compressed bitmap length */
+/* BA frame payload */
+struct dot11_ba {
+ uint16 ba_control; /* BA Control */
+ uint16 seqnum; /* Starting Sequence control */
+ uint8 bitmap[DOT11_BA_BITMAP_LEN]; /* Block Ack Bitmap */
+} PACKED;
+#define DOT11_BA_LEN 4 /* BA frame payload len (wo bitmap) */
+
+/* Management frame header */
+struct dot11_management_header {
+ uint16 fc; /* frame control */
+ uint16 durid; /* duration/ID */
+ struct ether_addr da; /* receiver address */
+ struct ether_addr sa; /* transmitter address */
+ struct ether_addr bssid; /* BSS ID */
+ uint16 seq; /* sequence control */
+} PACKED;
+#define DOT11_MGMT_HDR_LEN 24 /* d11 management header length */
+
+/* Management frame payloads */
+
+struct dot11_bcn_prb {
+ uint32 timestamp[2];
+ uint16 beacon_interval;
+ uint16 capability;
+} PACKED;
+#define DOT11_BCN_PRB_LEN 12 /* 802.11 beacon/probe frame fixed length */
+
+struct dot11_auth {
+ uint16 alg; /* algorithm */
+ uint16 seq; /* sequence control */
+ uint16 status; /* status code */
+} PACKED;
+#define DOT11_AUTH_FIXED_LEN 6 /* length of auth frame without challenge info
+ * elt
+ */
+
+struct dot11_assoc_req {
+ uint16 capability; /* capability information */
+ uint16 listen; /* listen interval */
+} PACKED;
+#define DOT11_ASSOC_REQ_FIXED_LEN 4 /* length of assoc frame without info elts */
+
+struct dot11_reassoc_req {
+ uint16 capability; /* capability information */
+ uint16 listen; /* listen interval */
+ struct ether_addr ap; /* Current AP address */
+} PACKED;
+#define DOT11_REASSOC_REQ_FIXED_LEN 10 /* length of assoc frame without info elts */
+
+struct dot11_assoc_resp {
+ uint16 capability; /* capability information */
+ uint16 status; /* status code */
+ uint16 aid; /* association ID */
+} PACKED;
+
+struct dot11_action_measure {
+ uint8 category;
+ uint8 action;
+ uint8 token;
+ uint8 data[1];
+} PACKED;
+#define DOT11_ACTION_MEASURE_LEN 3 /* d11 action measurement header length */
+
+struct dot11_action_ht_ch_width {
+ uint8 category;
+ uint8 action;
+ uint8 ch_width;
+} PACKED;
+
+struct dot11_action_ht_mimops {
+ uint8 category;
+ uint8 action;
+ uint8 control;
+} PACKED;
+
+#define SM_PWRSAVE_ENABLE 1
+#define SM_PWRSAVE_MODE 2
+
+struct dot11_action_ht_info_xchg {
+ uint8 category;
+ uint8 action;
+ uint8 info;
+} PACKED;
+
+#define DOT11_HT_INFO_XCHG_INFO_REQ 0x01
+#define DOT11_HT_INFO_XCHG_40MHZ_INTOLERANT 0x02
+#define DOT11_HT_INFO_XCHG_STA_CHAN_WIDTH 0x04
+
+
+/* ************* 802.11h related definitions. ************* */
+struct dot11_power_cnst {
+ uint8 id;
+ uint8 len;
+ uint8 power;
+} PACKED;
+typedef struct dot11_power_cnst dot11_power_cnst_t;
+
+struct dot11_power_cap {
+ uint8 min;
+ uint8 max;
+} PACKED;
+typedef struct dot11_power_cap dot11_power_cap_t;
+
+struct dot11_tpc_rep {
+ uint8 id;
+ uint8 len;
+ uint8 tx_pwr;
+ uint8 margin;
+} PACKED;
+typedef struct dot11_tpc_rep dot11_tpc_rep_t;
+#define DOT11_MNG_IE_TPC_REPORT_LEN 2 /* length of IE data, not including 2 byte header */
+
+struct dot11_supp_channels {
+ uint8 id;
+ uint8 len;
+ uint8 first_channel;
+ uint8 num_channels;
+} PACKED;
+typedef struct dot11_supp_channels dot11_supp_channels_t;
+
+/* Extension Channel Offset IE: 802.11n-D1.0 spec. added sideband
+ * offset for 40MHz operation. The possible 3 values are:
+ * 1 = above control channel
+ * 3 = below control channel
+ * 0 = no extension channel
+ */
+struct dot11_extch {
+ uint8 id; /* IE ID, 62, DOT11_MNG_EXT_CHANNEL_OFFSET */
+ uint8 len; /* IE length */
+ uint8 extch;
+} PACKED;
+typedef struct dot11_extch dot11_extch_ie_t;
+
+struct dot11_brcm_extch {
+ uint8 id; /* IE ID, 221, DOT11_MNG_PROPR_ID */
+ uint8 len; /* IE length */
+ uint8 oui[3]; /* Proprietary OUI, BRCM_OUI */
+ uint8 type; /* type inidicates what follows */
+ uint8 extch;
+} PACKED;
+typedef struct dot11_brcm_extch dot11_brcm_extch_ie_t;
+
+#define BRCM_EXTCH_IE_LEN 5
+#define BRCM_EXTCH_IE_TYPE 53 /* 802.11n ID not yet assigned */
+#define DOT11_EXTCH_IE_LEN 1
+#define DOT11_EXT_CH_MASK 0x03 /* extension channel mask */
+#define DOT11_EXT_CH_UPPER 0x01 /* ext. ch. on upper sb */
+#define DOT11_EXT_CH_LOWER 0x03 /* ext. ch. on lower sb */
+#define DOT11_EXT_CH_NONE 0x00 /* no extension ch. */
+
+struct dot11_action_frmhdr {
+ uint8 category;
+ uint8 action;
+ uint8 data[1];
+} PACKED;
+
+/* CSA IE data structure */
+struct dot11_channel_switch {
+ uint8 id; /* id DOT11_MNG_CHANNEL_SWITCH_ID */
+ uint8 len; /* length of IE */
+ uint8 mode; /* mode 0 or 1 */
+ uint8 channel; /* channel switch to */
+ uint8 count; /* number of beacons before switching */
+} PACKED;
+typedef struct dot11_channel_switch dot11_chan_switch_ie_t;
+
+#define DOT11_SWITCH_IE_LEN 3 /* length of IE data, not including 2 byte header */
+/* CSA mode - 802.11h-2003 $7.3.2.20 */
+#define DOT11_CSA_MODE_ADVISORY 0 /* no DOT11_CSA_MODE_NO_TX restriction imposed */
+#define DOT11_CSA_MODE_NO_TX 1 /* no transmission upon receiving CSA frame. */
+
+struct dot11_action_switch_channel {
+ uint8 category;
+ uint8 action;
+ dot11_chan_switch_ie_t chan_switch_ie; /* for switch IE */
+ dot11_brcm_extch_ie_t extch_ie; /* extension channel offset */
+} PACKED;
+
+/* 11n Extended Channel Switch IE data structure */
+struct dot11_ext_csa {
+ uint8 id; /* id DOT11_MNG_EXT_CHANNEL_SWITCH_ID */
+ uint8 len; /* length of IE */
+ uint8 mode; /* mode 0 or 1 */
+ uint8 reg; /* regulatory class */
+ uint8 channel; /* channel switch to */
+ uint8 count; /* number of beacons before switching */
+} PACKED;
+typedef struct dot11_ext_csa dot11_ext_csa_ie_t;
+#define DOT11_EXT_CSA_IE_LEN 4 /* length of extended channel switch IE body */
+
+struct dot11_action_ext_csa {
+ uint8 category;
+ uint8 action;
+ dot11_ext_csa_ie_t chan_switch_ie; /* for switch IE */
+} PACKED;
+
+/* 802.11h Measurement Request/Report IEs */
+/* Measurement Type field */
+#define DOT11_MEASURE_TYPE_BASIC 0 /* d11 measurement basic type */
+#define DOT11_MEASURE_TYPE_CCA 1 /* d11 measurement CCA type */
+#define DOT11_MEASURE_TYPE_RPI 2 /* d11 measurement PRI type */
+
+/* Measurement Request Modes */
+#define DOT11_MEASURE_MODE_ENABLE (1<<1) /* d11 measurement enable */
+#define DOT11_MEASURE_MODE_REQUEST (1<<2) /* d11 measurement request */
+#define DOT11_MEASURE_MODE_REPORT (1<<3) /* d11 measurement report */
+/* Measurement Report Modes */
+#define DOT11_MEASURE_MODE_LATE (1<<0) /* d11 measurement late */
+#define DOT11_MEASURE_MODE_INCAPABLE (1<<1) /* d11 measurement incapable */
+#define DOT11_MEASURE_MODE_REFUSED (1<<2) /* d11 measurement refuse */
+/* Basic Measurement Map bits */
+#define DOT11_MEASURE_BASIC_MAP_BSS ((uint8)(1<<0)) /* d11 measurement basic map BSS */
+#define DOT11_MEASURE_BASIC_MAP_OFDM ((uint8)(1<<1)) /* d11 measurement map OFDM */
+#define DOT11_MEASURE_BASIC_MAP_UKNOWN ((uint8)(1<<2)) /* d11 measurement map unknown */
+#define DOT11_MEASURE_BASIC_MAP_RADAR ((uint8)(1<<3)) /* d11 measurement map radar */
+#define DOT11_MEASURE_BASIC_MAP_UNMEAS ((uint8)(1<<4)) /* d11 measurement map unmeasuremnt */
+
+struct dot11_meas_req {
+ uint8 id;
+ uint8 len;
+ uint8 token;
+ uint8 mode;
+ uint8 type;
+ uint8 channel;
+ uint8 start_time[8];
+ uint16 duration;
+} PACKED;
+typedef struct dot11_meas_req dot11_meas_req_t;
+#define DOT11_MNG_IE_MREQ_LEN 14 /* d11 measurement request IE length */
+/* length of Measure Request IE data not including variable len */
+#define DOT11_MNG_IE_MREQ_FIXED_LEN 3 /* d11 measurement request IE fixed length */
+
+struct dot11_meas_rep {
+ uint8 id;
+ uint8 len;
+ uint8 token;
+ uint8 mode;
+ uint8 type;
+ union
+ {
+ struct {
+ uint8 channel;
+ uint8 start_time[8];
+ uint16 duration;
+ uint8 map;
+ } PACKED basic;
+ uint8 data[1];
+ } PACKED rep;
+} PACKED;
+typedef struct dot11_meas_rep dot11_meas_rep_t;
+
+/* length of Measure Report IE data not including variable len */
+#define DOT11_MNG_IE_MREP_FIXED_LEN 3 /* d11 measurement response IE fixed length */
+
+struct dot11_meas_rep_basic {
+ uint8 channel;
+ uint8 start_time[8];
+ uint16 duration;
+ uint8 map;
+} PACKED;
+typedef struct dot11_meas_rep_basic dot11_meas_rep_basic_t;
+#define DOT11_MEASURE_BASIC_REP_LEN 12 /* d11 measurement basic report length */
+
+struct dot11_quiet {
+ uint8 id;
+ uint8 len;
+ uint8 count; /* TBTTs until beacon interval in quiet starts */
+ uint8 period; /* Beacon intervals between periodic quiet periods ? */
+ uint16 duration; /* Length of quiet period, in TU's */
+ uint16 offset; /* TU's offset from TBTT in Count field */
+} PACKED;
+typedef struct dot11_quiet dot11_quiet_t;
+
+struct chan_map_tuple {
+ uint8 channel;
+ uint8 map;
+} PACKED;
+typedef struct chan_map_tuple chan_map_tuple_t;
+
+struct dot11_ibss_dfs {
+ uint8 id;
+ uint8 len;
+ uint8 eaddr[ETHER_ADDR_LEN];
+ uint8 interval;
+ chan_map_tuple_t map[1];
+} PACKED;
+typedef struct dot11_ibss_dfs dot11_ibss_dfs_t;
+
+/* WME Elements */
+#define WME_OUI "\x00\x50\xf2" /* WME OUI */
+#define WME_VER 1 /* WME version */
+#define WME_TYPE 2 /* WME type */
+#define WME_SUBTYPE_IE 0 /* Information Element */
+#define WME_SUBTYPE_PARAM_IE 1 /* Parameter Element */
+#define WME_SUBTYPE_TSPEC 2 /* Traffic Specification */
+
+/* WME Access Category Indices (ACIs) */
+#define AC_BE 0 /* Best Effort */
+#define AC_BK 1 /* Background */
+#define AC_VI 2 /* Video */
+#define AC_VO 3 /* Voice */
+#define AC_COUNT 4 /* number of ACs */
+
+typedef uint8 ac_bitmap_t; /* AC bitmap of (1 << AC_xx) */
+
+#define AC_BITMAP_NONE 0x0 /* No ACs */
+#define AC_BITMAP_ALL 0xf /* All ACs */
+#define AC_BITMAP_TST(ab, ac) (((ab) & (1 << (ac))) != 0)
+
+/* WME Information Element (IE) */
+struct wme_ie {
+ uint8 oui[3];
+ uint8 type;
+ uint8 subtype;
+ uint8 version;
+ uint8 qosinfo;
+} PACKED;
+typedef struct wme_ie wme_ie_t;
+#define WME_IE_LEN 7 /* WME IE length */
+
+struct edcf_acparam {
+ uint8 ACI;
+ uint8 ECW;
+ uint16 TXOP; /* stored in network order (ls octet first) */
+} PACKED;
+typedef struct edcf_acparam edcf_acparam_t;
+
+/* WME Parameter Element (PE) */
+struct wme_param_ie {
+ uint8 oui[3];
+ uint8 type;
+ uint8 subtype;
+ uint8 version;
+ uint8 qosinfo;
+ uint8 rsvd;
+ edcf_acparam_t acparam[AC_COUNT];
+} PACKED;
+typedef struct wme_param_ie wme_param_ie_t;
+#define WME_PARAM_IE_LEN 24 /* WME Parameter IE length */
+
+/* QoS Info field for IE as sent from AP */
+#define WME_QI_AP_APSD_MASK 0x80 /* U-APSD Supported mask */
+#define WME_QI_AP_APSD_SHIFT 7 /* U-APSD Supported shift */
+#define WME_QI_AP_COUNT_MASK 0x0f /* Parameter set count mask */
+#define WME_QI_AP_COUNT_SHIFT 0 /* Parameter set count shift */
+
+/* QoS Info field for IE as sent from STA */
+#define WME_QI_STA_MAXSPLEN_MASK 0x60 /* Max Service Period Length mask */
+#define WME_QI_STA_MAXSPLEN_SHIFT 5 /* Max Service Period Length shift */
+#define WME_QI_STA_APSD_ALL_MASK 0xf /* APSD all AC bits mask */
+#define WME_QI_STA_APSD_ALL_SHIFT 0 /* APSD all AC bits shift */
+#define WME_QI_STA_APSD_BE_MASK 0x8 /* APSD AC_BE mask */
+#define WME_QI_STA_APSD_BE_SHIFT 3 /* APSD AC_BE shift */
+#define WME_QI_STA_APSD_BK_MASK 0x4 /* APSD AC_BK mask */
+#define WME_QI_STA_APSD_BK_SHIFT 2 /* APSD AC_BK shift */
+#define WME_QI_STA_APSD_VI_MASK 0x2 /* APSD AC_VI mask */
+#define WME_QI_STA_APSD_VI_SHIFT 1 /* APSD AC_VI shift */
+#define WME_QI_STA_APSD_VO_MASK 0x1 /* APSD AC_VO mask */
+#define WME_QI_STA_APSD_VO_SHIFT 0 /* APSD AC_VO shift */
+
+/* ACI */
+#define EDCF_AIFSN_MIN 1 /* AIFSN minimum value */
+#define EDCF_AIFSN_MAX 15 /* AIFSN maximum value */
+#define EDCF_AIFSN_MASK 0x0f /* AIFSN mask */
+#define EDCF_ACM_MASK 0x10 /* ACM mask */
+#define EDCF_ACI_MASK 0x60 /* ACI mask */
+#define EDCF_ACI_SHIFT 5 /* ACI shift */
+
+/* ECW */
+#define EDCF_ECW_MIN 0 /* cwmin/cwmax exponent minimum value */
+#define EDCF_ECW_MAX 15 /* cwmin/cwmax exponent maximum value */
+#define EDCF_ECW2CW(exp) ((1 << (exp)) - 1)
+#define EDCF_ECWMIN_MASK 0x0f /* cwmin exponent form mask */
+#define EDCF_ECWMAX_MASK 0xf0 /* cwmax exponent form mask */
+#define EDCF_ECWMAX_SHIFT 4 /* cwmax exponent form shift */
+
+/* TXOP */
+#define EDCF_TXOP_MIN 0 /* TXOP minimum value */
+#define EDCF_TXOP_MAX 65535 /* TXOP maximum value */
+#define EDCF_TXOP2USEC(txop) ((txop) << 5)
+
+/* Default EDCF parameters that AP advertises for STA to use; WMM draft Table 12 */
+#define EDCF_AC_BE_ACI_STA 0x03 /* STA ACI value for best effort AC */
+#define EDCF_AC_BE_ECW_STA 0xA4 /* STA ECW value for best effort AC */
+#define EDCF_AC_BE_TXOP_STA 0x0000 /* STA TXOP value for best effort AC */
+#define EDCF_AC_BK_ACI_STA 0x27 /* STA ACI value for background AC */
+#define EDCF_AC_BK_ECW_STA 0xA4 /* STA ECW value for background AC */
+#define EDCF_AC_BK_TXOP_STA 0x0000 /* STA TXOP value for background AC */
+#define EDCF_AC_VI_ACI_STA 0x42 /* STA ACI value for video AC */
+#define EDCF_AC_VI_ECW_STA 0x43 /* STA ECW value for video AC */
+#define EDCF_AC_VI_TXOP_STA 0x005e /* STA TXOP value for video AC */
+#define EDCF_AC_VO_ACI_STA 0x62 /* STA ACI value for audio AC */
+#define EDCF_AC_VO_ECW_STA 0x32 /* STA ECW value for audio AC */
+#define EDCF_AC_VO_TXOP_STA 0x002f /* STA TXOP value for audio AC */
+
+/* Default EDCF parameters that AP uses; WMM draft Table 14 */
+#define EDCF_AC_BE_ACI_AP 0x03 /* AP ACI value for best effort AC */
+#define EDCF_AC_BE_ECW_AP 0x64 /* AP ECW value for best effort AC */
+#define EDCF_AC_BE_TXOP_AP 0x0000 /* AP TXOP value for best effort AC */
+#define EDCF_AC_BK_ACI_AP 0x27 /* AP ACI value for background AC */
+#define EDCF_AC_BK_ECW_AP 0xA4 /* AP ECW value for background AC */
+#define EDCF_AC_BK_TXOP_AP 0x0000 /* AP TXOP value for background AC */
+#define EDCF_AC_VI_ACI_AP 0x41 /* AP ACI value for video AC */
+#define EDCF_AC_VI_ECW_AP 0x43 /* AP ECW value for video AC */
+#define EDCF_AC_VI_TXOP_AP 0x005e /* AP TXOP value for video AC */
+#define EDCF_AC_VO_ACI_AP 0x61 /* AP ACI value for audio AC */
+#define EDCF_AC_VO_ECW_AP 0x32 /* AP ECW value for audio AC */
+#define EDCF_AC_VO_TXOP_AP 0x002f /* AP TXOP value for audio AC */
+
+struct dot11_qbss_load_ie {
+ uint8 id; /* 11, DOT11_MNG_QBSS_LOAD_ID */
+ uint8 length;
+ uint16 station_count; /* total number of STAs associated */
+ uint8 channel_utilization; /* % of time, normalized to 255, QAP sensed medium busy */
+ uint16 aac; /* available admission capacity */
+} PACKED;
+typedef struct dot11_qbss_load_ie dot11_qbss_load_ie_t;
+
+/* nom_msdu_size */
+#define FIXED_MSDU_SIZE 0x8000 /* MSDU size is fixed */
+#define MSDU_SIZE_MASK 0x7fff /* (Nominal or fixed) MSDU size */
+
+/* surplus_bandwidth */
+/* Represented as 3 bits of integer, binary point, 13 bits fraction */
+#define INTEGER_SHIFT 13 /* integer shift */
+#define FRACTION_MASK 0x1FFF /* fraction mask */
+
+/* Management Notification Frame */
+struct dot11_management_notification {
+ uint8 category; /* DOT11_ACTION_NOTIFICATION */
+ uint8 action;
+ uint8 token;
+ uint8 status;
+ uint8 data[1]; /* Elements */
+} PACKED;
+#define DOT11_MGMT_NOTIFICATION_LEN 4 /* Fixed length */
+
+/* WME Action Codes */
+#define WME_ADDTS_REQUEST 0 /* WME ADDTS request */
+#define WME_ADDTS_RESPONSE 1 /* WME ADDTS response */
+#define WME_DELTS_REQUEST 2 /* WME DELTS request */
+
+/* WME Setup Response Status Codes */
+#define WME_ADMISSION_ACCEPTED 0 /* WME admission accepted */
+#define WME_INVALID_PARAMETERS 1 /* WME invalide parameters */
+#define WME_ADMISSION_REFUSED 3 /* WME admission refused */
+
+/* Macro to take a pointer to a beacon or probe response
+ * body and return the char* pointer to the SSID info element
+ */
+#define BCN_PRB_SSID(body) ((char*)(body) + DOT11_BCN_PRB_LEN)
+
+/* Authentication frame payload constants */
+#define DOT11_OPEN_SYSTEM 0 /* d11 open authentication */
+#define DOT11_SHARED_KEY 1 /* d11 shared authentication */
+#define DOT11_CHALLENGE_LEN 128 /* d11 challenge text length */
+
+/* Frame control macros */
+#define FC_PVER_MASK 0x3 /* PVER mask */
+#define FC_PVER_SHIFT 0 /* PVER shift */
+#define FC_TYPE_MASK 0xC /* type mask */
+#define FC_TYPE_SHIFT 2 /* type shift */
+#define FC_SUBTYPE_MASK 0xF0 /* subtype mask */
+#define FC_SUBTYPE_SHIFT 4 /* subtype shift */
+#define FC_TODS 0x100 /* to DS */
+#define FC_TODS_SHIFT 8 /* to DS shift */
+#define FC_FROMDS 0x200 /* from DS */
+#define FC_FROMDS_SHIFT 9 /* from DS shift */
+#define FC_MOREFRAG 0x400 /* more frag. */
+#define FC_MOREFRAG_SHIFT 10 /* more frag. shift */
+#define FC_RETRY 0x800 /* retry */
+#define FC_RETRY_SHIFT 11 /* retry shift */
+#define FC_PM 0x1000 /* PM */
+#define FC_PM_SHIFT 12 /* PM shift */
+#define FC_MOREDATA 0x2000 /* more data */
+#define FC_MOREDATA_SHIFT 13 /* more data shift */
+#define FC_WEP 0x4000 /* WEP */
+#define FC_WEP_SHIFT 14 /* WEP shift */
+#define FC_ORDER 0x8000 /* order */
+#define FC_ORDER_SHIFT 15 /* order shift */
+
+/* sequence control macros */
+#define SEQNUM_SHIFT 4 /* seq. number shift */
+#define SEQNUM_MAX 0x1000 /* max seqnum + 1 */
+#define FRAGNUM_MASK 0xF /* frag. number mask */
+
+/* Frame Control type/subtype defs */
+
+/* FC Types */
+#define FC_TYPE_MNG 0 /* management type */
+#define FC_TYPE_CTL 1 /* control type */
+#define FC_TYPE_DATA 2 /* data type */
+
+/* Management Subtypes */
+#define FC_SUBTYPE_ASSOC_REQ 0 /* assoc. request */
+#define FC_SUBTYPE_ASSOC_RESP 1 /* assoc. response */
+#define FC_SUBTYPE_REASSOC_REQ 2 /* reassoc. request */
+#define FC_SUBTYPE_REASSOC_RESP 3 /* reassoc. response */
+#define FC_SUBTYPE_PROBE_REQ 4 /* probe request */
+#define FC_SUBTYPE_PROBE_RESP 5 /* probe response */
+#define FC_SUBTYPE_BEACON 8 /* beacon */
+#define FC_SUBTYPE_ATIM 9 /* ATIM */
+#define FC_SUBTYPE_DISASSOC 10 /* disassoc. */
+#define FC_SUBTYPE_AUTH 11 /* authentication */
+#define FC_SUBTYPE_DEAUTH 12 /* de-authentication */
+#define FC_SUBTYPE_ACTION 13 /* action */
+#define FC_SUBTYPE_ACTION_NOACK 14 /* action no-ack */
+
+/* Control Subtypes */
+#define FC_SUBTYPE_CTL_WRAPPER 7 /* Control Wrapper */
+#define FC_SUBTYPE_BLOCKACK_REQ 8 /* Block Ack Req */
+#define FC_SUBTYPE_BLOCKACK 9 /* Block Ack */
+#define FC_SUBTYPE_PS_POLL 10 /* PS poll */
+#define FC_SUBTYPE_RTS 11 /* RTS */
+#define FC_SUBTYPE_CTS 12 /* CTS */
+#define FC_SUBTYPE_ACK 13 /* ACK */
+#define FC_SUBTYPE_CF_END 14 /* CF-END */
+#define FC_SUBTYPE_CF_END_ACK 15 /* CF-END ACK */
+
+/* Data Subtypes */
+#define FC_SUBTYPE_DATA 0 /* Data */
+#define FC_SUBTYPE_DATA_CF_ACK 1 /* Data + CF-ACK */
+#define FC_SUBTYPE_DATA_CF_POLL 2 /* Data + CF-Poll */
+#define FC_SUBTYPE_DATA_CF_ACK_POLL 3 /* Data + CF-Ack + CF-Poll */
+#define FC_SUBTYPE_NULL 4 /* Null */
+#define FC_SUBTYPE_CF_ACK 5 /* CF-Ack */
+#define FC_SUBTYPE_CF_POLL 6 /* CF-Poll */
+#define FC_SUBTYPE_CF_ACK_POLL 7 /* CF-Ack + CF-Poll */
+#define FC_SUBTYPE_QOS_DATA 8 /* QoS Data */
+#define FC_SUBTYPE_QOS_DATA_CF_ACK 9 /* QoS Data + CF-Ack */
+#define FC_SUBTYPE_QOS_DATA_CF_POLL 10 /* QoS Data + CF-Poll */
+#define FC_SUBTYPE_QOS_DATA_CF_ACK_POLL 11 /* QoS Data + CF-Ack + CF-Poll */
+#define FC_SUBTYPE_QOS_NULL 12 /* QoS Null */
+#define FC_SUBTYPE_QOS_CF_POLL 14 /* QoS CF-Poll */
+#define FC_SUBTYPE_QOS_CF_ACK_POLL 15 /* QoS CF-Ack + CF-Poll */
+
+/* Data Subtype Groups */
+#define FC_SUBTYPE_ANY_QOS(s) (((s) & 8) != 0)
+#define FC_SUBTYPE_ANY_NULL(s) (((s) & 4) != 0)
+#define FC_SUBTYPE_ANY_CF_POLL(s) (((s) & 2) != 0)
+#define FC_SUBTYPE_ANY_CF_ACK(s) (((s) & 1) != 0)
+
+/* Type/Subtype Combos */
+#define FC_KIND_MASK (FC_TYPE_MASK | FC_SUBTYPE_MASK) /* FC kind mask */
+
+#define FC_KIND(t, s) (((t) << FC_TYPE_SHIFT) | ((s) << FC_SUBTYPE_SHIFT)) /* FC kind */
+
+#define FC_SUBTYPE(fc) (((fc) & FC_SUBTYPE_MASK) >> FC_SUBTYPE_SHIFT) /* Subtype from FC */
+#define FC_TYPE(fc) (((fc) & FC_TYPE_MASK) >> FC_TYPE_SHIFT) /* Type from FC */
+
+#define FC_ASSOC_REQ FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_ASSOC_REQ) /* assoc. request */
+#define FC_ASSOC_RESP FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_ASSOC_RESP) /* assoc. response */
+#define FC_REASSOC_REQ FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_REASSOC_REQ) /* reassoc. request */
+#define FC_REASSOC_RESP FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_REASSOC_RESP) /* reassoc. response */
+#define FC_PROBE_REQ FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_PROBE_REQ) /* probe request */
+#define FC_PROBE_RESP FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_PROBE_RESP) /* probe response */
+#define FC_BEACON FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_BEACON) /* beacon */
+#define FC_DISASSOC FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_DISASSOC) /* disassoc */
+#define FC_AUTH FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_AUTH) /* authentication */
+#define FC_DEAUTH FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_DEAUTH) /* deauthentication */
+#define FC_ACTION FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_ACTION) /* action */
+#define FC_ACTION_NOACK FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_ACTION_NOACK) /* action no-ack */
+
+#define FC_CTL_WRAPPER FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_CTL_WRAPPER) /* Control Wrapper */
+#define FC_BLOCKACK_REQ FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_BLOCKACK_REQ) /* Block Ack Req */
+#define FC_BLOCKACK FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_BLOCKACK) /* Block Ack */
+#define FC_PS_POLL FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_PS_POLL) /* PS poll */
+#define FC_RTS FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_RTS) /* RTS */
+#define FC_CTS FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_CTS) /* CTS */
+#define FC_ACK FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_ACK) /* ACK */
+#define FC_CF_END FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_CF_END) /* CF-END */
+#define FC_CF_END_ACK FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_CF_END_ACK) /* CF-END ACK */
+
+#define FC_DATA FC_KIND(FC_TYPE_DATA, FC_SUBTYPE_DATA) /* data */
+#define FC_NULL_DATA FC_KIND(FC_TYPE_DATA, FC_SUBTYPE_NULL) /* null data */
+#define FC_DATA_CF_ACK FC_KIND(FC_TYPE_DATA, FC_SUBTYPE_DATA_CF_ACK) /* data CF ACK */
+#define FC_QOS_DATA FC_KIND(FC_TYPE_DATA, FC_SUBTYPE_QOS_DATA) /* QoS data */
+#define FC_QOS_NULL FC_KIND(FC_TYPE_DATA, FC_SUBTYPE_QOS_NULL) /* QoS null */
+
+/* QoS Control Field */
+
+/* 802.1D Priority */
+#define QOS_PRIO_SHIFT 0 /* QoS priority shift */
+#define QOS_PRIO_MASK 0x0007 /* QoS priority mask */
+#define QOS_PRIO(qos) (((qos) & QOS_PRIO_MASK) >> QOS_PRIO_SHIFT) /* QoS priority */
+
+/* Traffic Identifier */
+#define QOS_TID_SHIFT 0 /* QoS TID shift */
+#define QOS_TID_MASK 0x000f /* QoS TID mask */
+#define QOS_TID(qos) (((qos) & QOS_TID_MASK) >> QOS_TID_SHIFT) /* QoS TID */
+
+/* End of Service Period (U-APSD) */
+#define QOS_EOSP_SHIFT 4 /* QoS End of Service Period shift */
+#define QOS_EOSP_MASK 0x0010 /* QoS End of Service Period mask */
+#define QOS_EOSP(qos) (((qos) & QOS_EOSP_MASK) >> QOS_EOSP_SHIFT) /* Qos EOSP */
+
+/* Ack Policy */
+#define QOS_ACK_NORMAL_ACK 0 /* Normal Ack */
+#define QOS_ACK_NO_ACK 1 /* No Ack (eg mcast) */
+#define QOS_ACK_NO_EXP_ACK 2 /* No Explicit Ack */
+#define QOS_ACK_BLOCK_ACK 3 /* Block Ack */
+#define QOS_ACK_SHIFT 5 /* QoS ACK shift */
+#define QOS_ACK_MASK 0x0060 /* QoS ACK mask */
+#define QOS_ACK(qos) (((qos) & QOS_ACK_MASK) >> QOS_ACK_SHIFT) /* QoS ACK */
+
+/* A-MSDU flag */
+#define QOS_AMSDU_SHIFT 7 /* AMSDU shift */
+#define QOS_AMSDU_MASK 0x0080 /* AMSDU mask */
+
+/* Management Frames */
+
+/* Management Frame Constants */
+
+/* Fixed fields */
+#define DOT11_MNG_AUTH_ALGO_LEN 2 /* d11 management auth. algo. length */
+#define DOT11_MNG_AUTH_SEQ_LEN 2 /* d11 management auth. seq. length */
+#define DOT11_MNG_BEACON_INT_LEN 2 /* d11 management beacon interval length */
+#define DOT11_MNG_CAP_LEN 2 /* d11 management cap. length */
+#define DOT11_MNG_AP_ADDR_LEN 6 /* d11 management AP address length */
+#define DOT11_MNG_LISTEN_INT_LEN 2 /* d11 management listen interval length */
+#define DOT11_MNG_REASON_LEN 2 /* d11 management reason length */
+#define DOT11_MNG_AID_LEN 2 /* d11 management AID length */
+#define DOT11_MNG_STATUS_LEN 2 /* d11 management status length */
+#define DOT11_MNG_TIMESTAMP_LEN 8 /* d11 management timestamp length */
+
+/* DUR/ID field in assoc resp is 0xc000 | AID */
+#define DOT11_AID_MASK 0x3fff /* d11 AID mask */
+
+/* Reason Codes */
+#define DOT11_RC_RESERVED 0 /* d11 RC reserved */
+#define DOT11_RC_UNSPECIFIED 1 /* Unspecified reason */
+#define DOT11_RC_AUTH_INVAL 2 /* Previous authentication no longer valid */
+#define DOT11_RC_DEAUTH_LEAVING 3 /* Deauthenticated because sending station
+ * is leaving (or has left) IBSS or ESS
+ */
+#define DOT11_RC_INACTIVITY 4 /* Disassociated due to inactivity */
+#define DOT11_RC_BUSY 5 /* Disassociated because AP is unable to handle
+ * all currently associated stations
+ */
+#define DOT11_RC_INVAL_CLASS_2 6 /* Class 2 frame received from
+ * nonauthenticated station
+ */
+#define DOT11_RC_INVAL_CLASS_3 7 /* Class 3 frame received from
+ * nonassociated station
+ */
+#define DOT11_RC_DISASSOC_LEAVING 8 /* Disassociated because sending station is
+ * leaving (or has left) BSS
+ */
+#define DOT11_RC_NOT_AUTH 9 /* Station requesting (re)association is not
+ * authenticated with responding station
+ */
+#define DOT11_RC_BAD_PC 10 /* Unacceptable power capability element */
+#define DOT11_RC_BAD_CHANNELS 11 /* Unacceptable supported channels element */
+/* 12 is unused */
+
+/* 32-39 are QSTA specific reasons added in 11e */
+#define DOT11_RC_UNSPECIFIED_QOS 32 /* unspecified QoS-related reason */
+#define DOT11_RC_INSUFFCIENT_BW 33 /* QAP lacks sufficient bandwidth */
+#define DOT11_RC_EXCESSIVE_FRAMES 34 /* excessive number of frames need ack */
+#define DOT11_RC_TX_OUTSIDE_TXOP 35 /* transmitting outside the limits of txop */
+#define DOT11_RC_LEAVING_QBSS 36 /* QSTA is leaving the QBSS (or restting) */
+#define DOT11_RC_BAD_MECHANISM 37 /* does not want to use the mechanism */
+#define DOT11_RC_SETUP_NEEDED 38 /* mechanism needs a setup */
+#define DOT11_RC_TIMEOUT 39 /* timeout */
+
+#define DOT11_RC_MAX 23 /* Reason codes > 23 are reserved */
+
+/* Status Codes */
+#define DOT11_SC_SUCCESS 0 /* Successful */
+#define DOT11_SC_FAILURE 1 /* Unspecified failure */
+#define DOT11_SC_CAP_MISMATCH 10 /* Cannot support all requested
+ * capabilities in the Capability
+ * Information field
+ */
+#define DOT11_SC_REASSOC_FAIL 11 /* Reassociation denied due to inability
+ * to confirm that association exists
+ */
+#define DOT11_SC_ASSOC_FAIL 12 /* Association denied due to reason
+ * outside the scope of this standard
+ */
+#define DOT11_SC_AUTH_MISMATCH 13 /* Responding station does not support
+ * the specified authentication
+ * algorithm
+ */
+#define DOT11_SC_AUTH_SEQ 14 /* Received an Authentication frame
+ * with authentication transaction
+ * sequence number out of expected
+ * sequence
+ */
+#define DOT11_SC_AUTH_CHALLENGE_FAIL 15 /* Authentication rejected because of
+ * challenge failure
+ */
+#define DOT11_SC_AUTH_TIMEOUT 16 /* Authentication rejected due to timeout
+ * waiting for next frame in sequence
+ */
+#define DOT11_SC_ASSOC_BUSY_FAIL 17 /* Association denied because AP is
+ * unable to handle additional
+ * associated stations
+ */
+#define DOT11_SC_ASSOC_RATE_MISMATCH 18 /* Association denied due to requesting
+ * station not supporting all of the
+ * data rates in the BSSBasicRateSet
+ * parameter
+ */
+#define DOT11_SC_ASSOC_SHORT_REQUIRED 19 /* Association denied due to requesting
+ * station not supporting the Short
+ * Preamble option
+ */
+#define DOT11_SC_ASSOC_PBCC_REQUIRED 20 /* Association denied due to requesting
+ * station not supporting the PBCC
+ * Modulation option
+ */
+#define DOT11_SC_ASSOC_AGILITY_REQUIRED 21 /* Association denied due to requesting
+ * station not supporting the Channel
+ * Agility option
+ */
+#define DOT11_SC_ASSOC_SPECTRUM_REQUIRED 22 /* Association denied because Spectrum
+ * Management capability is required.
+ */
+#define DOT11_SC_ASSOC_BAD_POWER_CAP 23 /* Association denied because the info
+ * in the Power Cap element is
+ * unacceptable.
+ */
+#define DOT11_SC_ASSOC_BAD_SUP_CHANNELS 24 /* Association denied because the info
+ * in the Supported Channel element is
+ * unacceptable
+ */
+#define DOT11_SC_ASSOC_SHORTSLOT_REQUIRED 25 /* Association denied due to requesting
+ * station not supporting the Short Slot
+ * Time option
+ */
+#define DOT11_SC_ASSOC_ERPBCC_REQUIRED 26 /* Association denied due to requesting
+ * station not supporting the ER-PBCC
+ * Modulation option
+ */
+#define DOT11_SC_ASSOC_DSSOFDM_REQUIRED 27 /* Association denied due to requesting
+ * station not supporting the DSS-OFDM
+ * option
+ */
+
+#define DOT11_SC_DECLINED 37 /* request declined */
+#define DOT11_SC_INVALID_PARAMS 38 /* One or more params have invalid values */
+
+/* Info Elts, length of INFORMATION portion of Info Elts */
+#define DOT11_MNG_DS_PARAM_LEN 1 /* d11 management DS parameter length */
+#define DOT11_MNG_IBSS_PARAM_LEN 2 /* d11 management IBSS parameter length */
+
+/* TIM Info element has 3 bytes fixed info in INFORMATION field,
+ * followed by 1 to 251 bytes of Partial Virtual Bitmap
+ */
+#define DOT11_MNG_TIM_FIXED_LEN 3 /* d11 management TIM fixed length */
+#define DOT11_MNG_TIM_DTIM_COUNT 0 /* d11 management DTIM count */
+#define DOT11_MNG_TIM_DTIM_PERIOD 1 /* d11 management DTIM period */
+#define DOT11_MNG_TIM_BITMAP_CTL 2 /* d11 management TIM BITMAP control */
+#define DOT11_MNG_TIM_PVB 3 /* d11 management TIM PVB */
+
+/* TLV defines */
+#define TLV_TAG_OFF 0 /* tag offset */
+#define TLV_LEN_OFF 1 /* length offset */
+#define TLV_HDR_LEN 2 /* header length */
+#define TLV_BODY_OFF 2 /* body offset */
+
+/* Management Frame Information Element IDs */
+#define DOT11_MNG_SSID_ID 0 /* d11 management SSID id */
+#define DOT11_MNG_RATES_ID 1 /* d11 management rates id */
+#define DOT11_MNG_FH_PARMS_ID 2 /* d11 management FH parameter id */
+#define DOT11_MNG_DS_PARMS_ID 3 /* d11 management DS parameter id */
+#define DOT11_MNG_CF_PARMS_ID 4 /* d11 management CF parameter id */
+#define DOT11_MNG_TIM_ID 5 /* d11 management TIM id */
+#define DOT11_MNG_IBSS_PARMS_ID 6 /* d11 management IBSS parameter id */
+#define DOT11_MNG_COUNTRY_ID 7 /* d11 management country id */
+#define DOT11_MNG_HOPPING_PARMS_ID 8 /* d11 management hopping parameter id */
+#define DOT11_MNG_HOPPING_TABLE_ID 9 /* d11 management hopping table id */
+#define DOT11_MNG_REQUEST_ID 10 /* d11 management request id */
+#define DOT11_MNG_QBSS_LOAD_ID 11 /* d11 management QBSS Load id */
+#define DOT11_MNG_CHALLENGE_ID 16 /* d11 management chanllenge id */
+#define DOT11_MNG_PWR_CONSTRAINT_ID 32 /* 11H PowerConstraint */
+#define DOT11_MNG_PWR_CAP_ID 33 /* 11H PowerCapability */
+#define DOT11_MNG_TPC_REQUEST_ID 34 /* 11H TPC Request */
+#define DOT11_MNG_TPC_REPORT_ID 35 /* 11H TPC Report */
+#define DOT11_MNG_SUPP_CHANNELS_ID 36 /* 11H Supported Channels */
+#define DOT11_MNG_CHANNEL_SWITCH_ID 37 /* 11H ChannelSwitch Announcement */
+#define DOT11_MNG_MEASURE_REQUEST_ID 38 /* 11H MeasurementRequest */
+#define DOT11_MNG_MEASURE_REPORT_ID 39 /* 11H MeasurementReport */
+#define DOT11_MNG_QUIET_ID 40 /* 11H Quiet */
+#define DOT11_MNG_IBSS_DFS_ID 41 /* 11H IBSS_DFS */
+#define DOT11_MNG_ERP_ID 42 /* d11 management ERP id */
+#define DOT11_MNG_TS_DELAY_ID 43 /* d11 management TS Delay id */
+#define DOT11_MNG_HT_CAP 45 /* d11 mgmt HT cap id */
+#define DOT11_MNG_NONERP_ID 47 /* d11 management NON-ERP id */
+#define DOT11_MNG_RSN_ID 48 /* d11 management RSN id */
+#define DOT11_MNG_EXT_RATES_ID 50 /* d11 management ext. rates id */
+#define DOT11_MNG_EXT_CSA_ID 60 /* d11 Extended CSA */
+#define DOT11_MNG_HT_ADD 61 /* d11 mgmt additional HT info */
+#define DOT11_MNG_EXT_CHANNEL_OFFSET 62 /* d11 mgmt ext channel offset */
+#define DOT11_MNG_EXT_CAP 127 /* d11 mgmt ext capability */
+#define DOT11_MNG_WPA_ID 221 /* d11 management WPA id */
+#define DOT11_MNG_PROPR_ID 221 /* d11 management proprietary id */
+
+/* Rate element Basic flag and rate mask */
+#define DOT11_RATE_BASIC 0x80 /* flag for a Basic Rate */
+#define DOT11_RATE_MASK 0x7F /* mask for numeric part of rate */
+
+/* ERP info element bit values */
+#define DOT11_MNG_ERP_LEN 1 /* ERP is currently 1 byte long */
+#define DOT11_MNG_NONERP_PRESENT 0x01 /* NonERP (802.11b) STAs are present
+ *in the BSS
+ */
+#define DOT11_MNG_USE_PROTECTION 0x02 /* Use protection mechanisms for
+ *ERP-OFDM frames
+ */
+#define DOT11_MNG_BARKER_PREAMBLE 0x04 /* Short Preambles: 0 == allowed,
+ * 1 == not allowed
+ */
+/* TS Delay element offset & size */
+#define DOT11_MGN_TS_DELAY_LEN 4 /* length of TS DELAY IE */
+#define TS_DELAY_FIELD_SIZE 4 /* TS DELAY field size */
+
+/* Capability Information Field */
+#define DOT11_CAP_ESS 0x0001 /* d11 cap. ESS */
+#define DOT11_CAP_IBSS 0x0002 /* d11 cap. IBSS */
+#define DOT11_CAP_POLLABLE 0x0004 /* d11 cap. pollable */
+#define DOT11_CAP_POLL_RQ 0x0008 /* d11 cap. poll request */
+#define DOT11_CAP_PRIVACY 0x0010 /* d11 cap. privacy */
+#define DOT11_CAP_SHORT 0x0020 /* d11 cap. short */
+#define DOT11_CAP_PBCC 0x0040 /* d11 cap. PBCC */
+#define DOT11_CAP_AGILITY 0x0080 /* d11 cap. agility */
+#define DOT11_CAP_SPECTRUM 0x0100 /* d11 cap. spectrum */
+#define DOT11_CAP_SHORTSLOT 0x0400 /* d11 cap. shortslot */
+#define DOT11_CAP_CCK_OFDM 0x2000 /* d11 cap. CCK/OFDM */
+
+/* Extended Capability Information Field */
+#define DOT11_EXT_CAP_HT_IE_SUPPORT 0x01 /* support for info xchg action frame */
+
+/* Action Frame Constants */
+#define DOT11_ACTION_HDR_LEN 2 /* action frame header length */
+#define DOT11_ACTION_CAT_ERR_MASK 0x80 /* d11 action category error mask */
+#define DOT11_ACTION_CAT_MASK 0x7F /* d11 action category mask */
+#define DOT11_ACTION_CAT_SPECT_MNG 0x00 /* d11 action category spectrum management */
+#define DOT11_ACTION_CAT_BLOCKACK 0x03 /* d11 action category block ack */
+#define DOT11_ACTION_CAT_HT 0x07 /* d11 action category for HT */
+#define DOT11_ACTION_NOTIFICATION 0x11 /* 17 */
+
+#define DOT11_ACTION_ID_M_REQ 0 /* d11 action measurement request */
+#define DOT11_ACTION_ID_M_REP 1 /* d11 action measurement response */
+#define DOT11_ACTION_ID_TPC_REQ 2 /* d11 action TPC request */
+#define DOT11_ACTION_ID_TPC_REP 3 /* d11 action TPC response */
+#define DOT11_ACTION_ID_CHANNEL_SWITCH 4 /* d11 action channel switch */
+#define DOT11_ACTION_ID_EXT_CSA 5 /* d11 extened CSA for 11n */
+
+/* HT action ids */
+#define DOT11_ACTION_ID_HT_CH_WIDTH 0 /* notify channel width action id */
+#define DOT11_ACTION_ID_HT_MIMO_PS 1 /* mimo ps action id */
+#define DOT11_ACTION_ID_HT_INFO_XCHG 8 /* HT Information Exchange action id */
+
+/* Block Ack action types */
+#define DOT11_BA_ACTION_ADDBA_REQ 0 /* ADDBA Req action frame type */
+#define DOT11_BA_ACTION_ADDBA_RESP 1 /* ADDBA Resp action frame type */
+#define DOT11_BA_ACTION_DELBA 2 /* DELBA action frame type */
+
+/* ADDBA action parameters */
+#define DOT11_ADDBA_PARAM_AMSDU_SUP 0x0001 /* AMSDU supported under BA */
+#define DOT11_ADDBA_PARAM_POLICY_MASK 0x0002 /* policy mask(ack vs delayed) */
+#define DOT11_ADDBA_PARAM_POLICY_SHIFT 1 /* policy shift */
+#define DOT11_ADDBA_PARAM_TID_MASK 0x003c /* tid mask */
+#define DOT11_ADDBA_PARAM_TID_SHIFT 2 /* tid shift */
+#define DOT11_ADDBA_PARAM_BSIZE_MASK 0xffc0 /* buffer size mask */
+#define DOT11_ADDBA_PARAM_BSIZE_SHIFT 6 /* buffer size shift */
+
+#define DOT11_ADDBA_POLICY_DELAYED 0 /* delayed BA policy */
+#define DOT11_ADDBA_POLICY_IMMEDIATE 1 /* immediate BA policy */
+
+struct dot11_addba_req {
+ uint8 category; /* category of action frame (3) */
+ uint8 action; /* action: addba req */
+ uint8 token; /* identifier */
+ uint16 addba_param_set; /* parameter set */
+ uint16 timeout; /* timeout in seconds */
+ uint16 start_seqnum; /* starting sequence number */
+}PACKED;
+typedef struct dot11_addba_req dot11_addba_req_t;
+#define DOT11_ADDBA_REQ_LEN 9 /* length of addba req frame */
+
+struct dot11_addba_resp {
+ uint8 category; /* category of action frame (3) */
+ uint8 action; /* action: addba resp */
+ uint8 token; /* identifier */
+ uint16 status; /* status of add request */
+ uint16 addba_param_set; /* negotiated parameter set */
+ uint16 timeout; /* negotiated timeout in seconds */
+}PACKED;
+typedef struct dot11_addba_resp dot11_addba_resp_t;
+#define DOT11_ADDBA_RESP_LEN 9 /* length of addba resp frame */
+
+/* DELBA action parameters */
+#define DOT11_DELBA_PARAM_INIT_MASK 0x0800 /* initiator mask */
+#define DOT11_DELBA_PARAM_INIT_SHIFT 11 /* initiator shift */
+#define DOT11_DELBA_PARAM_TID_MASK 0xf000 /* tid mask */
+#define DOT11_DELBA_PARAM_TID_SHIFT 12 /* tid shift */
+
+struct dot11_delba {
+ uint8 category; /* category of action frame (3) */
+ uint8 action; /* action: addba req */
+ uint16 delba_param_set; /* paarmeter set */
+ uint16 reason; /* reason for dellba */
+}PACKED;
+typedef struct dot11_delba dot11_delba_t;
+#define DOT11_DELBA_LEN 6 /* length of delba frame */
+
+/* MLME Enumerations */
+#define DOT11_BSSTYPE_INFRASTRUCTURE 0 /* d11 infrastructure */
+#define DOT11_BSSTYPE_INDEPENDENT 1 /* d11 independent */
+#define DOT11_BSSTYPE_ANY 2 /* d11 any BSS type */
+#define DOT11_SCANTYPE_ACTIVE 0 /* d11 scan active */
+#define DOT11_SCANTYPE_PASSIVE 1 /* d11 scan passive */
+
+/* 802.11 BRCM "Compromise" Pre N constants */
+#define PREN_PREAMBLE 24 /* green field preamble time */
+#define PREN_MM_EXT 8 /* extra mixed mode preamble time */
+#define PREN_PREAMBLE_EXT 4 /* extra preamble (multiply by unique_streams-1) */
+
+/* 802.11 N PHY constants */
+#define NPHY_RIFS_TIME 2 /* NPHY RIFS time */
+
+/* 802.11 A PHY constants */
+#define APHY_SLOT_TIME 9 /* APHY slot time */
+#define APHY_SIFS_TIME 16 /* APHY SIFS time */
+#define APHY_DIFS_TIME (APHY_SIFS_TIME + (2 * APHY_SLOT_TIME)) /* APHY DIFS time */
+#define APHY_PREAMBLE_TIME 16 /* APHY preamble time */
+#define APHY_SIGNAL_TIME 4 /* APHY signal time */
+#define APHY_SYMBOL_TIME 4 /* APHY symbol time */
+#define APHY_SERVICE_NBITS 16 /* APHY service nbits */
+#define APHY_TAIL_NBITS 6 /* APHY tail nbits */
+#define APHY_CWMIN 15 /* APHY cwmin */
+
+/* 802.11 B PHY constants */
+#define BPHY_SLOT_TIME 20 /* BPHY slot time */
+#define BPHY_SIFS_TIME 10 /* BPHY SIFS time */
+#define BPHY_DIFS_TIME 50 /* BPHY DIFS time */
+#define BPHY_PLCP_TIME 192 /* BPHY PLCP time */
+#define BPHY_PLCP_SHORT_TIME 96 /* BPHY PLCP short time */
+#define BPHY_CWMIN 31 /* BPHY cwmin */
+
+/* 802.11 G constants */
+#define DOT11_OFDM_SIGNAL_EXTENSION 6 /* d11 OFDM signal extension */
+
+#define PHY_CWMAX 1023 /* PHY cwmax */
+
+#define DOT11_MAXNUMFRAGS 16 /* max # fragments per MSDU */
+
+/* dot11Counters Table - 802.11 spec., Annex D */
+typedef struct d11cnt {
+ uint32 txfrag; /* dot11TransmittedFragmentCount */
+ uint32 txmulti; /* dot11MulticastTransmittedFrameCount */
+ uint32 txfail; /* dot11FailedCount */
+ uint32 txretry; /* dot11RetryCount */
+ uint32 txretrie; /* dot11MultipleRetryCount */
+ uint32 rxdup; /* dot11FrameduplicateCount */
+ uint32 txrts; /* dot11RTSSuccessCount */
+ uint32 txnocts; /* dot11RTSFailureCount */
+ uint32 txnoack; /* dot11ACKFailureCount */
+ uint32 rxfrag; /* dot11ReceivedFragmentCount */
+ uint32 rxmulti; /* dot11MulticastReceivedFrameCount */
+ uint32 rxcrc; /* dot11FCSErrorCount */
+ uint32 txfrmsnt; /* dot11TransmittedFrameCount */
+ uint32 rxundec; /* dot11WEPUndecryptableCount */
+} d11cnt_t;
+
+/* BRCM OUI */
+#define BRCM_OUI "\x00\x10\x18" /* Broadcom OUI */
+
+/* OUI for BRCM proprietary IE */
+#define BRCM_PROP_OUI "\x00\x90\x4C" /* Broadcom proprietary OUI */
+
+/* BRCM info element */
+struct brcm_ie {
+ uint8 id; /* IE ID, 221, DOT11_MNG_PROPR_ID */
+ uint8 len; /* IE length */
+ uint8 oui[3]; /* Proprietary OUI, BRCM_OUI */
+ uint8 ver; /* type/ver of this IE */
+ uint8 assoc; /* # of assoc STAs */
+ uint8 flags; /* misc flags */
+ uint8 flags1; /* misc flags */
+ uint16 amsdu_mtu_pref; /* preferred A-MSDU MTU */
+} PACKED;
+typedef struct brcm_ie brcm_ie_t;
+#define BRCM_IE_LEN 11 /* BRCM IE length */
+#define BRCM_IE_VER 2 /* BRCM IE version */
+#define BRCM_IE_LEGACY_AES_VER 1 /* BRCM IE legacy AES version */
+
+/* brcm_ie flags */
+#define BRF_ABCAP 0x1 /* afterburner capable */
+#define BRF_ABRQRD 0x2 /* afterburner requested */
+#define BRF_LZWDS 0x4 /* lazy wds enabled */
+#define BRF_BLOCKACK 0x8 /* BlockACK capable */
+#define BRF_ABCOUNTER_MASK 0xf0 /* afterburner wds "state" counter */
+#define BRF_ABCOUNTER_SHIFT 4 /* offset of afterburner wds "state" counter */
+
+/* brcm_ie flags1 */
+#define BRF1_AMSDU 0x1 /* A-MSDU capable */
+#define BRF1_DPT 0x2 /* DPT capable */
+
+#define AB_WDS_TIMEOUT_MAX 15 /* afterburner wds Max count indicating not
+ * locally capable
+ */
+#define AB_WDS_TIMEOUT_MIN 1 /* afterburner wds, use zero count as indicating
+ * "downrev"
+ */
+
+/* EWC definitions */
+#define MCSSET_LEN 16 /* 16-bits per 8-bit set to give 128-bits bitmap of MCS Index */
+#define MAX_MCS_NUM (128) /* max mcs number = 128 */
+
+struct ewc_cap_ie {
+ uint16 cap;
+ uint8 params;
+ uint8 supp_mcs[MCSSET_LEN];
+ uint16 ext_htcap;
+ uint32 txbf_cap;
+ uint8 as_cap;
+} PACKED;
+typedef struct ewc_cap_ie ewc_cap_ie_t;
+
+/* CAP IE: EWC 1.0 spec. simply stole a 802.11 IE, we use our prop. IE until this is resolved */
+/* the capability IE is primarily used to convey this nodes abilities */
+struct ewc_prop_cap_ie {
+ uint8 id; /* IE ID, 221, DOT11_MNG_PROPR_ID */
+ uint8 len; /* IE length */
+ uint8 oui[3]; /* Proprietary OUI, BRCM_PROP_OUI */
+ uint8 type; /* type inidicates what follows */
+ ewc_cap_ie_t cap_ie;
+} PACKED;
+typedef struct ewc_prop_cap_ie ewc_prop_cap_ie_t;
+#define EWC_PROP_IE_OVERHEAD 4 /* overhead bytes for prop oui ie */
+#define EWC_CAP_IE_LEN 26
+#define EWC_CAP_IE_TYPE 51
+
+#define EWC_CAP_LDPC_CODING 0x0001 /* Support for rx of LDPC coded pkts */
+#define EWC_CAP_40MHZ 0x0002 /* FALSE:20Mhz, TRUE:20/40MHZ supported */
+#define EWC_CAP_MIMO_PS_MASK 0x000C /* Mimo PS mask */
+#define EWC_CAP_MIMO_PS_SHIFT 0x0002 /* Mimo PS shift */
+#define EWC_CAP_MIMO_PS_OFF 0x0003 /* Mimo PS, no restriction */
+#define EWC_CAP_MIMO_PS_RTS 0x0001 /* Mimo PS, send RTS/CTS around MIMO frames */
+#define EWC_CAP_MIMO_PS_ON 0x0000 /* Mimo PS, MIMO disallowed */
+#define EWC_CAP_GF 0x0010 /* Greenfield preamble support */
+#define EWC_CAP_SHORT_GI_20 0x0020 /* 20MHZ short guard interval support */
+#define EWC_CAP_SHORT_GI_40 0x0040 /* 40Mhz short guard interval support */
+#define EWC_CAP_TX_STBC 0x0080 /* Tx STBC support */
+#define EWC_CAP_RX_STBC_MASK 0x0300 /* Rx STBC mask */
+#define EWC_CAP_RX_STBC_SHIFT 8 /* Rx STBC shift */
+#define EWC_CAP_DELAYED_BA 0x0400 /* delayed BA support */
+#define EWC_CAP_MAX_AMSDU 0x0800 /* Max AMSDU size in bytes , 0=3839, 1=7935 */
+#define EWC_CAP_DSSS_CCK 0x1000 /* DSSS/CCK supported by the BSS */
+#define EWC_CAP_PSMP 0x2000 /* Power Save Multi Poll support */
+#define EWC_CAP_40MHZ_INTOLERANT 0x4000 /* 40MHz Intolerant */
+#define EWC_CAP_LSIG_TXOP 0x8000 /* L-SIG TXOP protection support */
+
+#define EWC_CAP_RX_STBC_NO 0x0 /* no rx STBC support */
+#define EWC_CAP_RX_STBC_ONE_STREAM 0x1 /* rx STBC support of 1 spatial stream */
+#define EWC_CAP_RX_STBC_TWO_STREAM 0x2 /* rx STBC support of 1-2 spatial streams */
+#define EWC_CAP_RX_STBC_THREE_STREAM 0x3 /* rx STBC support of 1-3 spatial streams */
+
+#define EWC_MAX_AMSDU 7935 /* max amsdu size (bytes) per the EWC spec */
+#define EWC_MIN_AMSDU 3835 /* min amsdu size (bytes) per the EWC spec */
+
+#define EWC_PARAMS_RX_FACTOR_MASK 0x03 /* ampdu rcv factor mask */
+#define EWC_PARAMS_DENSITY_MASK 0x1C /* ampdu density mask */
+#define EWC_PARAMS_DENSITY_SHIFT 2 /* ampdu density shift */
+
+/* EWC/AMPDU specific define */
+#define AMPDU_MAX_MPDU_DENSITY 7 /* max mpdu density; in 1/8 usec units */
+#define AMPDU_MAX_RX_FACTOR 3 /* max rcv ampdu len (64kb) */
+#define AMPDU_RX_FACTOR_BASE 8*1024 /* ampdu factor base for rx len */
+#define AMPDU_DELIMITER_LEN 4 /* length of ampdu delimiter */
+
+struct ewc_add_ie {
+ uint8 ctl_ch; /* control channel number */
+ uint8 byte1; /* ext ch,rec. ch. width, RIFS support */
+ uint16 opmode; /* operation mode */
+ uint16 misc_bits; /* misc bits */
+ uint8 basic_mcs[MCSSET_LEN]; /* required MCS set */
+} PACKED;
+typedef struct ewc_add_ie ewc_add_ie_t;
+
+/* ADD IE: EWC 1.0 spec. simply stole a 802.11 IE, we use our prop. IE until this is resolved */
+/* the additional IE is primarily used to convey the current BSS configuration */
+struct ewc_prop_add_ie {
+ uint8 id; /* IE ID, 221, DOT11_MNG_PROPR_ID */
+ uint8 len; /* IE length */
+ uint8 oui[3]; /* Proprietary OUI, BRCM_PROP_OUI */
+ uint8 type; /* indicates what follows */
+ ewc_add_ie_t add_ie;
+} PACKED;
+typedef struct ewc_prop_add_ie ewc_prop_add_ie_t;
+
+#define EWC_ADD_IE_LEN 22
+#define EWC_ADD_IE_TYPE 52
+
+/* byte1 defn's */
+#define EWC_BW_ANY 0x04 /* set, STA can use 20 or 40MHz */
+#define EWC_RIFS_PERMITTED 0x08 /* RIFS allowed */
+
+/* opmode defn's */
+#define EWC_OPMODE_MASK 0x0003 /* protection mode mask */
+#define EWC_OPMODE_SHIFT 0 /* protection mode shift */
+#define EWC_OPMODE_PURE 0x0000 /* protection mode PURE */
+#define EWC_OPMODE_OPTIONAL 0x0001 /* protection mode optional */
+#define EWC_OPMODE_HT20IN40 0x0002 /* protection mode 20MHz HT in 40MHz BSS */
+#define EWC_OPMODE_MIXED 0x0003 /* protection mode Mixed Mode */
+#define EWC_OPMODE_NONGF 0x0004 /* protection mode non-GF */
+#define DOT11N_TXBURST 0x0008 /* Tx burst limit */
+#define DOT11N_OBSS_NONHT 0x0010 /* OBSS Non-HT STA present */
+
+/* misc_bites defn's */
+#define EWC_BASIC_STBC_MCS 0x007f /* basic STBC MCS */
+#define EWC_DUAL_STBC_PROT 0x0080 /* Dual STBC Protection */
+#define EWC_SECOND_BCN 0x0100 /* Secondary beacon support */
+#define EWC_LSIG_TXOP 0x0200 /* L-SIG TXOP Protection full support */
+#define EWC_PCO_ACTIVE 0x0400 /* PCO active */
+#define EWC_PCO_PHASE 0x0800 /* PCO phase */
+
+/* Tx Burst Limits */
+#define DOT11N_2G_TXBURST_LIMIT 6160 /* 2G band Tx burst limit per 802.11n Draft 1.10 (usec) */
+#define DOT11N_5G_TXBURST_LIMIT 3080 /* 5G band Tx burst limit per 802.11n Draft 1.10 (usec) */
+
+/* Macros for opmode */
+#define GET_EWC_OPMODE(add_ie) ((ltoh16_ua(&add_ie->opmode) & EWC_OPMODE_MASK) \
+ >> EWC_OPMODE_SHIFT)
+#define EWC_MIXEDMODE_PRESENT(add_ie) ((ltoh16_ua(&add_ie->opmode) & EWC_OPMODE_MASK) \
+ == EWC_OPMODE_MIXED) /* mixed mode present */
+#define EWC_HT20_PRESENT(add_ie) ((ltoh16_ua(&add_ie->opmode) & EWC_OPMODE_MASK) \
+ == EWC_OPMODE_HT20IN40) /* 20MHz HT present */
+#define EWC_OPTIONAL_PRESENT(add_ie) ((ltoh16_ua(&add_ie->opmode) & EWC_OPMODE_MASK) \
+ == EWC_OPMODE_OPTIONAL) /* Optional protection present */
+#define EWC_USE_PROTECTION(add_ie) (EWC_HT20_PRESENT((add_ie)) || \
+ EWC_MIXEDMODE_PRESENT((add_ie))) /* use protection */
+#define EWC_NONGF_PRESENT(add_ie) ((ltoh16_ua(&add_ie->opmode) & EWC_OPMODE_NONGF) \
+ == EWC_OPMODE_NONGF) /* non-GF present */
+#define DOT11N_TXBURST_PRESENT(add_ie) ((ltoh16_ua(&add_ie->opmode) & DOT11N_TXBURST) \
+ == DOT11N_TXBURST) /* Tx Burst present */
+#define DOT11N_OBSS_NONHT_PRESENT(add_ie) ((ltoh16_ua(&add_ie->opmode) & DOT11N_OBSS_NONHT) \
+ == DOT11N_OBSS_NONHT) /* OBSS Non-HT present */
+
+/* Vendor IE structure */
+struct vndr_ie {
+ uchar id;
+ uchar len;
+ uchar oui [3];
+ uchar data [1]; /* Variable size data */
+} PACKED;
+typedef struct vndr_ie vndr_ie_t;
+
+#define VNDR_IE_HDR_LEN 2 /* id + len field */
+#define VNDR_IE_MIN_LEN 3 /* size of the oui field */
+#define VNDR_IE_MAX_LEN 256 /* verdor IE max length */
+
+/* WPA definitions */
+#define WPA_VERSION 1 /* WPA version */
+#define WPA_OUI "\x00\x50\xF2" /* WPA OUI */
+
+#define WPA2_VERSION 1 /* WPA2 version */
+#define WPA2_VERSION_LEN 2 /* WAP2 version length */
+#define WPA2_OUI "\x00\x0F\xAC" /* WPA2 OUI */
+
+#define WPA_OUI_LEN 3 /* WPA OUI length */
+
+/* RSN authenticated key managment suite */
+#define RSN_AKM_NONE 0 /* None (IBSS) */
+#define RSN_AKM_UNSPECIFIED 1 /* Over 802.1x */
+#define RSN_AKM_PSK 2 /* Pre-shared Key */
+
+/* Key related defines */
+#define DOT11_MAX_DEFAULT_KEYS 4 /* number of default keys */
+#define DOT11_MAX_KEY_SIZE 32 /* max size of any key */
+#define DOT11_MAX_IV_SIZE 16 /* max size of any IV */
+#define DOT11_EXT_IV_FLAG (1<<5) /* flag to indicate IV is > 4 bytes */
+
+#define WEP1_KEY_SIZE 5 /* max size of any WEP key */
+#define WEP1_KEY_HEX_SIZE 10 /* size of WEP key in hex. */
+#define WEP128_KEY_SIZE 13 /* max size of any WEP key */
+#define WEP128_KEY_HEX_SIZE 26 /* size of WEP key in hex. */
+#define TKIP_MIC_SIZE 8 /* size of TKIP MIC */
+#define TKIP_EOM_SIZE 7 /* max size of TKIP EOM */
+#define TKIP_EOM_FLAG 0x5a /* TKIP EOM flag byte */
+#define TKIP_KEY_SIZE 32 /* size of any TKIP key */
+#define TKIP_MIC_AUTH_TX 16 /* offset to Authenticator MIC TX key */
+#define TKIP_MIC_AUTH_RX 24 /* offset to Authenticator MIC RX key */
+#define TKIP_MIC_SUP_RX TKIP_MIC_AUTH_TX /* offset to Supplicant MIC RX key */
+#define TKIP_MIC_SUP_TX TKIP_MIC_AUTH_RX /* offset to Supplicant MIC TX key */
+#define AES_KEY_SIZE 16 /* size of AES key */
+
+#undef PACKED
+#if !defined(__GNUC__)
+#pragma pack()
+#endif
+
+#endif /* _802_11_H_ */
--- /dev/null
+/*
+ * 802.11e protocol header file
+ *
+ * Copyright 2007, Broadcom Corporation
+ * All Rights Reserved.
+ *
+ * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
+ * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
+ * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
+ *
+ * $Id$
+ */
+
+#ifndef _802_11e_H_
+#define _802_11e_H_
+
+/* enable structure packing */
+#if defined(__GNUC__)
+#define PACKED __attribute__((packed))
+#else
+#pragma pack(1)
+#define PACKED
+#endif
+
+#ifdef BCMDBG
+extern const char *aci_names[];
+#endif /* BCMDBG */
+
+/* WME Traffic Specification (TSPEC) element */
+#define WME_TSPEC_HDR_LEN 2 /* WME TSPEC header length */
+#define WME_TSPEC_BODY_OFF 2 /* WME TSPEC body offset */
+
+#define WME_CATEGORY_CODE_OFFSET 0 /* WME Category code offset */
+#define WME_ACTION_CODE_OFFSET 1 /* WME Action code offset */
+#define WME_TOKEN_CODE_OFFSET 2 /* WME Token code offset */
+#define WME_STATUS_CODE_OFFSET 3 /* WME Status code offset */
+
+struct tsinfo {
+ uint8 octets[3];
+} PACKED;
+
+typedef struct tsinfo tsinfo_t;
+
+/* 802.11e TSPEC IE */
+typedef struct tspec {
+ uint8 oui[DOT11_OUI_LEN]; /* WME_OUI */
+ uint8 type; /* WME_TYPE */
+ uint8 subtype; /* WME_SUBTYPE_TSPEC */
+ uint8 version; /* WME_VERSION */
+ tsinfo_t tsinfo; /* TS Info bit field */
+ uint16 nom_msdu_size; /* (Nominal or fixed) MSDU Size (bytes) */
+ uint16 max_msdu_size; /* Maximum MSDU Size (bytes) */
+ uint32 min_srv_interval; /* Minimum Service Interval (us) */
+ uint32 max_srv_interval; /* Maximum Service Interval (us) */
+ uint32 inactivity_interval; /* Inactivity Interval (us) */
+ uint32 suspension_interval; /* Suspension Interval (us) */
+ uint32 srv_start_time; /* Service Start Time (us) */
+ uint32 min_data_rate; /* Minimum Data Rate (bps) */
+ uint32 mean_data_rate; /* Mean Data Rate (bps) */
+ uint32 peak_data_rate; /* Peak Data Rate (bps) */
+ uint32 max_burst_size; /* Maximum Burst Size (bytes) */
+ uint32 delay_bound; /* Delay Bound (us) */
+ uint32 min_phy_rate; /* Minimum PHY Rate (bps) */
+ uint16 surplus_bw; /* Surplus Bandwidth Allowance Factor */
+ uint16 medium_time; /* Medium Time (32 us/s periods) */
+} PACKED tspec_t;
+
+#define WME_TSPEC_LEN (sizeof(tspec_t)) /* not including 2-bytes of header */
+
+/* ts_info */
+/* 802.1D priority is duplicated - bits 13-11 AND bits 3-1 */
+#define TS_INFO_TID_SHIFT 1 /* TS info. TID shift */
+#define TS_INFO_TID_MASK (0xf << TS_INFO_TID_SHIFT) /* TS info. TID mask */
+#define TS_INFO_CONTENTION_SHIFT 7 /* TS info. contention shift */
+#define TS_INFO_CONTENTION_MASK (0x1 << TS_INFO_CONTENTION_SHIFT) /* TS info. contention mask */
+#define TS_INFO_DIRECTION_SHIFT 5 /* TS info. direction shift */
+#define TS_INFO_DIRECTION_MASK (0x3 << TS_INFO_DIRECTION_SHIFT) /* TS info. direction mask */
+#define TS_INFO_PSB_SHIFT 2 /* TS info. PSB bit Shift */
+#define TS_INFO_PSB_MASK (1 << TS_INFO_PSB_SHIFT) /* TS info. PSB mask */
+#define TS_INFO_UPLINK (0 << TS_INFO_DIRECTION_SHIFT) /* TS info. uplink */
+#define TS_INFO_DOWNLINK (1 << TS_INFO_DIRECTION_SHIFT) /* TS info. downlink */
+#define TS_INFO_BIDIRECTIONAL (3 << TS_INFO_DIRECTION_SHIFT) /* TS info. bidirectional */
+#define TS_INFO_USER_PRIO_SHIFT 3 /* TS info. user priority shift */
+/* TS info. user priority mask */
+#define TS_INFO_USER_PRIO_MASK (0x7 << TS_INFO_USER_PRIO_SHIFT)
+
+/* Macro to get/set bit(s) field in TSINFO */
+#define WLC_CAC_GET_TID(pt) ((((pt).octets[0]) & TS_INFO_TID_MASK) >> TS_INFO_TID_SHIFT)
+#define WLC_CAC_GET_DIR(pt) ((((pt).octets[0]) & \
+ TS_INFO_DIRECTION_MASK) >> TS_INFO_DIRECTION_SHIFT)
+#define WLC_CAC_GET_PSB(pt) ((((pt).octets[1]) & WLC_CAC_PSB_MASK) >> WLC_CAC_PSB_SHIFT)
+#define WLC_CAC_GET_USER_PRIO(pt) ((((pt).octets[1]) & \
+ TS_INFO_USER_PRIO_MASK) >> TS_INFO_USER_PRIO_SHIFT)
+
+#define WLC_CAC_SET_TID(pt, id) ((((pt).octets[0]) & (~TS_INFO_TID_MASK)) | \
+ ((id) << TS_INFO_TID_SHIFT))
+#define WLC_CAC_SET_USER_PRIO(pt, prio) ((((pt).octets[0]) & (~TS_INFO_USER_PRIO_MASK)) | \
+ ((prio) << TS_INFO_USER_PRIO_SHIFT))
+
+/* 802.11e QBSS Load IE */
+#define QBSS_LOAD_IE_LEN 5 /* QBSS Load IE length */
+#define QBSS_LOAD_AAC_OFF 3 /* AAC offset in IE */
+
+#define CAC_ADDTS_RESP_TIMEOUT 300 /* default ADDTS response timeout in ms */
+
+/* 802.11e ADDTS status code */
+#define DOT11E_STATUS_ADMISSION_ACCEPTED 0 /* TSPEC Admission accepted status */
+#define DOT11E_STATUS_ADDTS_INVALID_PARAM 1 /* TSPEC invalid parameter status */
+#define DOT11E_STATUS_ADDTS_REFUSED_NSBW 3 /* ADDTS refused (non-sufficient BW) */
+
+/* 802.11e DELTS status code */
+#define DOT11E_STATUS_QSTA_LEAVE_QBSS 36 /* STA leave QBSS */
+#define DOT11E_STATUS_END_TS 37 /* END TS */
+#define DOT11E_STATUS_UNKNOWN_TS 38 /* UNKNOWN TS */
+#define DOT11E_STATUS_QSTA_REQ_TIMEOUT 39 /* STA ADDTS request timeout */
+
+#undef PACKED
+#if !defined(__GNUC__)
+#pragma pack()
+#endif
+
+#endif /* _802_11e_CAC_H_ */
--- /dev/null
+/*
+ * Copyright 2007, Broadcom Corporation
+ * All Rights Reserved.
+ *
+ * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
+ * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
+ * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
+ *
+ * Fundamental types and constants relating to 802.1D
+ *
+ * $Id$
+ */
+
+#ifndef _802_1_D_
+#define _802_1_D_
+
+/* 802.1D priority defines */
+#define PRIO_8021D_NONE 2 /* None = - */
+#define PRIO_8021D_BK 1 /* BK - Background */
+#define PRIO_8021D_BE 0 /* BE - Best-effort */
+#define PRIO_8021D_EE 3 /* EE - Excellent-effort */
+#define PRIO_8021D_CL 4 /* CL - Controlled Load */
+#define PRIO_8021D_VI 5 /* Vi - Video */
+#define PRIO_8021D_VO 6 /* Vo - Voice */
+#define PRIO_8021D_NC 7 /* NC - Network Control */
+#define MAXPRIO 7 /* 0-7 */
+#define NUMPRIO (MAXPRIO + 1)
+
+#define ALLPRIO -1 /* All prioirty */
+
+/* Converts prio to precedence since the numerical value of
+ * PRIO_8021D_BE and PRIO_8021D_NONE are swapped.
+ */
+#define PRIO2PREC(prio) \
+ (((prio) == PRIO_8021D_NONE || (prio) == PRIO_8021D_BE) ? ((prio^2)) : (prio))
+
+#endif /* _802_1_D__ */
--- /dev/null
+/*
+ * Copyright 2007, Broadcom Corporation
+ * All Rights Reserved.
+ *
+ * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Broadcom Corporation;
+ * the contents of this file may not be disclosed to third parties, copied
+ * or duplicated in any form, in whole or in part, without the prior
+ * written permission of Broadcom Corporation.
+ *
+ * Fundamental constants relating to 802.3
+ *
+ * $Id$
+ */
+
+#ifndef _802_3_h_
+#define _802_3_h_
+
+#define SNAP_HDR_LEN 6 /* 802.3 LLC/SNAP header length */
+
+#endif /* #ifndef _802_3_h_ */
--- /dev/null
+/*
+ * Copyright 2007, Broadcom Corporation
+ * All Rights Reserved.
+ *
+ * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Broadcom Corporation;
+ * the contents of this file may not be disclosed to third parties, copied
+ * or duplicated in any form, in whole or in part, without the prior
+ * written permission of Broadcom Corporation.
+ *
+ * Fundamental constants relating to ARP Protocol
+ *
+ * $Id$
+ */
+
+#ifndef _bcmarp_h_
+#define _bcmarp_h_
+
+/* enable structure packing */
+#if defined(__GNUC__)
+#define PACKED __attribute__((packed))
+#else
+#pragma pack(1)
+#define PACKED
+#endif
+
+#define ARP_OPC_OFFSET 6 /* option code offset */
+#define ARP_SRC_ETH_OFFSET 8 /* src h/w address offset */
+#define ARP_SRC_IP_OFFSET 14 /* src IP address offset */
+#define ARP_TGT_ETH_OFFSET 18 /* target h/w address offset */
+#define ARP_TGT_IP_OFFSET 24 /* target IP address offset */
+
+#define ARP_OPC_REQUEST 1 /* ARP request */
+#define ARP_OPC_REPLY 2 /* ARP reply */
+
+#define ARP_DATA_LEN 28 /* ARP data length */
+
+struct bcmarp {
+ uint16 htype; /* Header type (1 = ethernet) */
+ uint16 ptype; /* Protocol type (0x800 = IP) */
+ uint8 hlen; /* Hardware address length (Eth = 6) */
+ uint8 plen; /* Protocol address length (IP = 4) */
+ uint16 oper; /* ARP_OPC_... */
+ uint8 src_eth[ETHER_ADDR_LEN]; /* Source hardware address */
+ uint8 src_ip[IPV4_ADDR_LEN]; /* Source protocol address (not aligned) */
+ uint8 dst_eth[ETHER_ADDR_LEN]; /* Destination hardware address */
+ uint8 dst_ip[IPV4_ADDR_LEN]; /* Destination protocol address */
+} PACKED;
+
+/* Ethernet header + Arp message */
+struct bcmetharp {
+ struct ether_header eh;
+ struct bcmarp arp;
+} PACKED;
+
+#undef PACKED
+#if !defined(__GNUC__)
+#pragma pack()
+#endif
+
+#endif /* !defined(_bcmarp_h_) */
--- /dev/null
+/*
+ * Copyright 2007, Broadcom Corporation
+ * All Rights Reserved.
+ *
+ * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Broadcom Corporation;
+ * the contents of this file may not be disclosed to third parties, copied
+ * or duplicated in any form, in whole or in part, without the prior
+ * written permission of Broadcom Corporation.
+ *
+ * Fundamental constants relating to DHCP Protocol
+ *
+ * $Id$
+ */
+
+#ifndef _bcmdhcp_h_
+#define _bcmdhcp_h_
+
+/* DHCP params */
+#define DHCP_TYPE_OFFSET 0 /* DHCP type (request|reply) offset */
+#define DHCP_FLAGS_OFFSET 10 /* DHCP flags offset */
+#define DHCP_CIADDR_OFFSET 12 /* DHCP client IP address offset */
+#define DHCP_YIADDR_OFFSET 16 /* DHCP your IP address offset */
+#define DHCP_GIADDR_OFFSET 24 /* DHCP relay agent IP address offset */
+#define DHCP_CHADDR_OFFSET 28 /* DHCP client h/w address offset */
+
+#define DHCP_TYPE_REQUEST 1 /* DHCP request (discover|request) */
+#define DHCP_TYPE_REPLY 2 /* DHCP reply (offset|ack) */
+
+#define DHCP_PORT_SERVER 67 /* DHCP server UDP port */
+#define DHCP_PORT_CLIENT 68 /* DHCP client UDP port */
+
+#define DHCP_FLAG_BCAST 0x8000 /* DHCP broadcast flag */
+
+#define DHCP_FLAGS_LEN 2 /* DHCP flags field length */
+
+#endif /* #ifndef _bcmdhcp_h_ */
--- /dev/null
+/*
+ * Broadcom Ethernettype protocol definitions
+ *
+ * Copyright 2007, Broadcom Corporation
+ * All Rights Reserved.
+ *
+ * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
+ * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
+ * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
+ *
+ * $Id$
+ */
+
+/*
+ * Broadcom Ethernet protocol defines
+ */
+
+#ifndef _BCMETH_H_
+#define _BCMETH_H_
+
+/* enable structure packing */
+#if defined(__GNUC__)
+#define PACKED __attribute__((packed))
+#else
+#pragma pack(1)
+#define PACKED
+#endif
+
+/* ETHER_TYPE_BRCM is defined in ethernet.h */
+
+/*
+ * Following the 2byte BRCM ether_type is a 16bit BRCM subtype field
+ * in one of two formats: (only subtypes 32768-65535 are in use now)
+ *
+ * subtypes 0-32767:
+ * 8 bit subtype (0-127)
+ * 8 bit length in bytes (0-255)
+ *
+ * subtypes 32768-65535:
+ * 16 bit big-endian subtype
+ * 16 bit big-endian length in bytes (0-65535)
+ *
+ * length is the number of additional bytes beyond the 4 or 6 byte header
+ *
+ * Reserved values:
+ * 0 reserved
+ * 5-15 reserved for iLine protocol assignments
+ * 17-126 reserved, assignable
+ * 127 reserved
+ * 32768 reserved
+ * 32769-65534 reserved, assignable
+ * 65535 reserved
+ */
+
+/*
+ * While adding the subtypes and their specific processing code make sure
+ * bcmeth_bcm_hdr_t is the first data structure in the user specific data structure definition
+ */
+
+#define BCMILCP_SUBTYPE_RATE 1
+#define BCMILCP_SUBTYPE_LINK 2
+#define BCMILCP_SUBTYPE_CSA 3
+#define BCMILCP_SUBTYPE_LARQ 4
+#define BCMILCP_SUBTYPE_VENDOR 5
+#define BCMILCP_SUBTYPE_FLH 17
+
+#define BCMILCP_SUBTYPE_VENDOR_LONG 32769
+#define BCMILCP_SUBTYPE_CERT 32770
+#define BCMILCP_SUBTYPE_SES 32771
+
+
+#define BCMILCP_BCM_SUBTYPE_RESERVED 0
+#define BCMILCP_BCM_SUBTYPE_EVENT 1
+#define BCMILCP_BCM_SUBTYPE_SES 2
+/*
+ * The EAPOL type is not used anymore. Instead EAPOL messages are now embedded
+ * within BCMILCP_BCM_SUBTYPE_EVENT type messages
+ */
+/* #define BCMILCP_BCM_SUBTYPE_EAPOL 3 */
+
+#define BCMILCP_BCM_SUBTYPEHDR_MINLENGTH 8
+#define BCMILCP_BCM_SUBTYPEHDR_VERSION 0
+
+/* These fields are stored in network order */
+typedef struct bcmeth_hdr
+{
+ uint16 subtype; /* Vendor specific..32769 */
+ uint16 length;
+ uint8 version; /* Version is 0 */
+ uint8 oui[3]; /* Broadcom OUI */
+ /* user specific Data */
+ uint16 usr_subtype;
+} PACKED bcmeth_hdr_t;
+
+#undef PACKED
+#if !defined(__GNUC__)
+#pragma pack()
+#endif
+
+#endif /* _BCMETH_H_ */
--- /dev/null
+/*
+ * Broadcom Event protocol definitions
+ *
+ * Copyright 2007, Broadcom Corporation
+ * All Rights Reserved.
+ *
+ * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
+ * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
+ * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
+ *
+ *
+ * Dependencies: proto/bcmeth.h
+ *
+ * $Id$
+ *
+ */
+
+/*
+ * Broadcom Ethernet Events protocol defines
+ *
+ */
+
+#ifndef _BCMEVENT_H_
+#define _BCMEVENT_H_
+
+/* enable structure packing */
+#if defined(__GNUC__)
+#define PACKED __attribute__((packed))
+#else
+#pragma pack(1)
+#define PACKED
+#endif /* defined(__GNUC__) */
+
+#define BCM_EVENT_MSG_VERSION 1 /* wl_event_msg_t struct version */
+#define BCM_MSG_IFNAME_MAX 16 /* max length of interface name */
+
+/* flags */
+#define WLC_EVENT_MSG_LINK 0x01 /* link is up */
+#define WLC_EVENT_MSG_FLUSHTXQ 0x02 /* flush tx queue on MIC error */
+#define WLC_EVENT_MSG_GROUP 0x04 /* group MIC error */
+
+/* these fields are stored in network order */
+typedef struct
+{
+ uint16 version;
+ uint16 flags; /* see flags below */
+ uint32 event_type; /* Message (see below) */
+ uint32 status; /* Status code (see below) */
+ uint32 reason; /* Reason code (if applicable) */
+ uint32 auth_type; /* WLC_E_AUTH */
+ uint32 datalen; /* data buf */
+ struct ether_addr addr; /* Station address (if applicable) */
+ char ifname[BCM_MSG_IFNAME_MAX]; /* name of the packet incoming interface */
+} PACKED wl_event_msg_t;
+
+/* used by driver msgs */
+typedef struct bcm_event {
+ struct ether_header eth;
+ bcmeth_hdr_t bcm_hdr;
+ wl_event_msg_t event;
+ /* data portion follows */
+} PACKED bcm_event_t;
+
+#define BCM_MSG_LEN (sizeof(bcm_event_t) - sizeof(bcmeth_hdr_t) - sizeof(struct ether_header))
+
+/* Event messages */
+#define WLC_E_SET_SSID 0 /* indicates status of set SSID */
+#define WLC_E_JOIN 1 /* differentiates join IBSS from found (WLC_E_START) IBSS */
+#define WLC_E_START 2 /* STA founded an IBSS or AP started a BSS */
+#define WLC_E_AUTH 3 /* 802.11 AUTH request */
+#define WLC_E_AUTH_IND 4 /* 802.11 AUTH indication */
+#define WLC_E_DEAUTH 5 /* 802.11 DEAUTH request */
+#define WLC_E_DEAUTH_IND 6 /* 802.11 DEAUTH indication */
+#define WLC_E_ASSOC 7 /* 802.11 ASSOC request */
+#define WLC_E_ASSOC_IND 8 /* 802.11 ASSOC indication */
+#define WLC_E_REASSOC 9 /* 802.11 REASSOC request */
+#define WLC_E_REASSOC_IND 10 /* 802.11 REASSOC indication */
+#define WLC_E_DISASSOC 11 /* 802.11 DISASSOC request */
+#define WLC_E_DISASSOC_IND 12 /* 802.11 DISASSOC indication */
+#define WLC_E_QUIET_START 13 /* 802.11h Quiet period started */
+#define WLC_E_QUIET_END 14 /* 802.11h Quiet period ended */
+#define WLC_E_BEACON_RX 15 /* BEACONS received/lost indication */
+#define WLC_E_LINK 16 /* generic link indication */
+#define WLC_E_MIC_ERROR 17 /* TKIP MIC error occurred */
+#define WLC_E_NDIS_LINK 18 /* NDIS style link indication */
+#define WLC_E_ROAM 19 /* roam attempt occurred: indicate status & reason */
+#define WLC_E_TXFAIL 20 /* change in dot11FailedCount (txfail) */
+#define WLC_E_PMKID_CACHE 21 /* WPA2 pmkid cache indication */
+#define WLC_E_RETROGRADE_TSF 22 /* current AP's TSF value went backward */
+#define WLC_E_PRUNE 23 /* AP was pruned from join list for reason */
+#define WLC_E_AUTOAUTH 24 /* report AutoAuth table entry match for join attempt */
+#define WLC_E_EAPOL_MSG 25 /* Event encapsulating an EAPOL message */
+#define WLC_E_SCAN_COMPLETE 26 /* Scan results are ready or scan was aborted */
+#define WLC_E_ADDTS_IND 27 /* indicate to host addts fail/success */
+#define WLC_E_DELTS_IND 28 /* indicate to host delts fail/success */
+#define WLC_E_BCNSENT_IND 29 /* indicate to host of beacon transmit */
+#define WLC_E_BCNRX_MSG 30 /* Send the received beacon up to the host */
+#define WLC_E_BCNLOST_MSG 31 /* indicate to host loss of beacon */
+#define WLC_E_ROAM_PREP 32 /* before attempting to roam */
+#define WLC_E_PFN_NET_FOUND 33 /* PFN network found event */
+#define WLC_E_PFN_NET_LOST 34 /* PFN network lost event */
+
+#ifdef EXT_STA
+#define WLC_E_RESET_COMPLETE 35
+#define WLC_E_JOIN_START 36
+#define WLC_E_ROAM_START 37
+#define WLC_E_ASSOC_START 38
+#define WLC_E_IBSS_ASSOC 39
+#define WLC_E_RADIO 40
+#define WLC_E_LAST 41 /* highest val + 1 for range checking */
+#else /* EXT_STA */
+#define WLC_E_LAST 35 /* highest val + 1 for range checking */
+#endif /* EXT_STA */
+
+/* Event status codes */
+#define WLC_E_STATUS_SUCCESS 0 /* operation was successful */
+#define WLC_E_STATUS_FAIL 1 /* operation failed */
+#define WLC_E_STATUS_TIMEOUT 2 /* operation timed out */
+#define WLC_E_STATUS_NO_NETWORKS 3 /* failed due to no matching network found */
+#define WLC_E_STATUS_ABORT 4 /* operation was aborted */
+#define WLC_E_STATUS_NO_ACK 5 /* protocol failure: packet not ack'd */
+#define WLC_E_STATUS_UNSOLICITED 6 /* AUTH or ASSOC packet was unsolicited */
+#define WLC_E_STATUS_ATTEMPT 7 /* attempt to assoc to an auto auth configuration */
+#define WLC_E_STATUS_PARTIAL 8 /* scan results are incomplete */
+#define WLC_E_STATUS_NEWSCAN 9 /* scan aborted by another scan */
+#define WLC_E_STATUS_NEWASSOC 10 /* scan aborted due to assoc in progress */
+#define WLC_E_STATUS_11HQUIET 11 /* 802.11h quiet period started */
+#define WLC_E_STATUS_SUPPRESS 12 /* user disabled scanning (WLC_SET_SCANSUPPRESS) */
+#define WLC_E_STATUS_NOCHANS 13 /* no allowable channels to scan */
+#define WLC_E_STATUS_CCXFASTRM 14 /* scan aborted due to CCX fast roam */
+
+/* roam reason codes */
+#define WLC_E_REASON_INITIAL_ASSOC 0 /* initial assoc */
+#define WLC_E_REASON_LOW_RSSI 1 /* roamed due to low RSSI */
+#define WLC_E_REASON_DEAUTH 2 /* roamed due to DEAUTH indication */
+#define WLC_E_REASON_DISASSOC 3 /* roamed due to DISASSOC indication */
+#define WLC_E_REASON_BCNS_LOST 4 /* roamed due to lost beacons */
+#define WLC_E_REASON_FAST_ROAM_FAILED 5 /* roamed due to fast roam failure */
+#define WLC_E_REASON_DIRECTED_ROAM 6 /* roamed due to request by AP */
+#define WLC_E_REASON_TSPEC_REJECTED 7 /* roamed due to TSPEC rejection */
+#define WLC_E_REASON_BETTER_AP 8 /* roamed due to finding better AP */
+
+/* prune reason codes */
+#define WLC_E_PRUNE_ENCR_MISMATCH 1 /* encryption mismatch */
+#define WLC_E_PRUNE_BCAST_BSSID 2 /* AP uses a broadcast BSSID */
+#define WLC_E_PRUNE_MAC_DENY 3 /* STA's MAC addr is in AP's MAC deny list */
+#define WLC_E_PRUNE_MAC_NA 4 /* STA's MAC addr is not in AP's MAC allow list */
+#define WLC_E_PRUNE_REG_PASSV 5 /* AP not allowed due to regulatory restriction */
+#define WLC_E_PRUNE_SPCT_MGMT 6 /* AP does not support STA locale spectrum mgmt */
+#define WLC_E_PRUNE_RADAR 7 /* AP is on a radar channel of STA locale */
+#define WLC_E_RSN_MISMATCH 8 /* STA does not support AP's RSN */
+#define WLC_E_PRUNE_NO_COMMON_RATES 9 /* No rates in common with AP */
+#define WLC_E_PRUNE_BASIC_RATES 10 /* STA does not support all basic rates of BSS */
+#define WLC_E_PRUNE_CIPHER_NA 12 /* BSS's cipher not supported */
+#define WLC_E_PRUNE_KNOWN_STA 13 /* AP is already known to us as a STA */
+#define WLC_E_PRUNE_WDS_PEER 15 /* AP is already known to us as a WDS peer */
+#define WLC_E_PRUNE_QBSS_LOAD 16 /* QBSS LOAD - AAC is too low */
+#define WLC_E_PRUNE_HOME_AP 17 /* prune home AP */
+
+#undef PACKED
+#if !defined(__GNUC__)
+#pragma pack()
+#endif /* PACKED */
+
+#endif /* _BCMEVENT_H_ */
--- /dev/null
+/*
+ * Copyright 2007, Broadcom Corporation
+ * All Rights Reserved.
+ *
+ * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
+ * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
+ * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
+ *
+ * Fundamental constants relating to IP Protocol
+ *
+ * $Id$
+ */
+
+#ifndef _bcmip_h_
+#define _bcmip_h_
+
+/* enable structure packing */
+#if defined(__GNUC__)
+#define PACKED __attribute__((packed))
+#else
+#pragma pack(1)
+#define PACKED
+#endif
+
+
+/* IPV4 and IPV6 common */
+#define IP_VER_OFFSET 0x0 /* offset to version field */
+#define IP_VER_MASK 0xf0 /* version mask */
+#define IP_VER_SHIFT 4 /* version shift */
+#define IP_VER_4 4 /* version number for IPV4 */
+#define IP_VER_6 6 /* version number for IPV6 */
+
+#define IP_VER(ip_body) \
+ ((((uint8 *)(ip_body))[IP_VER_OFFSET] & IP_VER_MASK) >> IP_VER_SHIFT)
+
+#define IP_PROT_ICMP 0x1 /* ICMP protocol */
+#define IP_PROT_TCP 0x6 /* TCP protocol */
+#define IP_PROT_UDP 0x11 /* UDP protocol type */
+
+/* IPV4 field offsets */
+#define IPV4_VER_HL_OFFSET 0 /* version and ihl byte offset */
+#define IPV4_TOS_OFFSET 1 /* type of service offset */
+#define IPV4_PKTLEN_OFFSET 2 /* packet length offset */
+#define IPV4_PKTFLAG_OFFSET 6 /* more-frag,dont-frag flag offset */
+#define IPV4_PROT_OFFSET 9 /* protocol type offset */
+#define IPV4_CHKSUM_OFFSET 10 /* IP header checksum offset */
+#define IPV4_SRC_IP_OFFSET 12 /* src IP addr offset */
+#define IPV4_DEST_IP_OFFSET 16 /* dest IP addr offset */
+#define IPV4_OPTIONS_OFFSET 20 /* IP options offset */
+
+/* IPV4 field decodes */
+#define IPV4_VER_MASK 0xf0 /* IPV4 version mask */
+#define IPV4_VER_SHIFT 4 /* IPV4 version shift */
+
+#define IPV4_HLEN_MASK 0x0f /* IPV4 header length mask */
+#define IPV4_HLEN(ipv4_body) (4 * (((uint8 *)(ipv4_body))[IPV4_VER_HL_OFFSET] & IPV4_HLEN_MASK))
+
+#define IPV4_ADDR_LEN 4 /* IPV4 address length */
+
+#define IPV4_ADDR_NULL(a) ((((uint8 *)(a))[0] | ((uint8 *)(a))[1] | \
+ ((uint8 *)(a))[2] | ((uint8 *)(a))[3]) == 0)
+
+#define IPV4_ADDR_BCAST(a) ((((uint8 *)(a))[0] & ((uint8 *)(a))[1] & \
+ ((uint8 *)(a))[2] & ((uint8 *)(a))[3]) == 0xff)
+
+#define IPV4_TOS_DSCP_MASK 0xfc /* DiffServ codepoint mask */
+#define IPV4_TOS_DSCP_SHIFT 2 /* DiffServ codepoint shift */
+
+#define IPV4_TOS(ipv4_body) (((uint8 *)(ipv4_body))[IPV4_TOS_OFFSET])
+
+#define IPV4_TOS_PREC_MASK 0xe0 /* Historical precedence mask */
+#define IPV4_TOS_PREC_SHIFT 5 /* Historical precedence shift */
+
+#define IPV4_TOS_LOWDELAY 0x10 /* Lowest delay requested */
+#define IPV4_TOS_THROUGHPUT 0x8 /* Best throughput requested */
+#define IPV4_TOS_RELIABILITY 0x4 /* Most reliable delivery requested */
+
+#define IPV4_PROT(ipv4_body) (((uint8 *)(ipv4_body))[IPV4_PROT_OFFSET])
+
+#define IPV4_FRAG_RESV 0x8000 /* Reserved */
+#define IPV4_FRAG_DONT 0x4000 /* Don't fragment */
+#define IPV4_FRAG_MORE 0x2000 /* More fragments */
+#define IPV4_FRAG_OFFSET_MASK 0x1fff /* Fragment offset */
+
+#define IPV4_ADDR_STR_LEN 16 /* Max IP address length in string format */
+
+/* IPv4, no options only. */
+#define IPV4_NO_OPTIONS_HDR_LEN 20
+#define IPV4_NO_OPTIONS_PAYLOAD(ip_hdr) (&(((uint8 *)(ip_hdr))[IPV4_NO_OPTIONS_HDR_LEN]))
+
+#define IPV4_PAYLOAD_LEN(ip_body) \
+ (((int)(((uint8 *)(ip_body))[IPV4_PKTLEN_OFFSET + 0]) << 8) | \
+ ((uint8 *)(ip_body))[IPV4_PKTLEN_OFFSET + 1])
+
+/* IPV4 packet formats */
+struct ipv4_addr {
+ uint8 addr[IPV4_ADDR_LEN];
+} PACKED;
+
+struct ipv4_hdr {
+ uint8 version_ihl; /* Version and Internet Header Length */
+ uint8 tos; /* Type Of Service */
+ uint16 tot_len; /* Number of bytes in packet (max 65535) */
+ uint16 id;
+ uint16 frag; /* 3 flag bits and fragment offset */
+ uint8 ttl; /* Time To Live */
+ uint8 prot; /* Protocol */
+ uint16 hdr_chksum; /* IP header checksum */
+ uint8 src_ip[IPV4_ADDR_LEN]; /* Source IP Address */
+ uint8 dst_ip[IPV4_ADDR_LEN]; /* Destination IP Address */
+} PACKED;
+
+/* IPV6 field offsets */
+#define IPV6_PAYLOAD_LEN_OFFSET 4 /* payload length offset */
+#define IPV6_NEXT_HDR_OFFSET 6 /* next header/protocol offset */
+#define IPV6_HOP_LIMIT_OFFSET 7 /* hop limit offset */
+#define IPV6_SRC_IP_OFFSET 8 /* src IP addr offset */
+#define IPV6_DEST_IP_OFFSET 24 /* dst IP addr offset */
+
+/* IPV6 field decodes */
+#define IPV6_TRAFFIC_CLASS(ipv6_body) \
+ (((((uint8 *)(ipv6_body))[0] & 0x0f) << 4) | \
+ ((((uint8 *)(ipv6_body))[1] & 0xf0) >> 4))
+
+#define IPV6_FLOW_LABEL(ipv6_body) \
+ (((((uint8 *)(ipv6_body))[1] & 0x0f) << 16) | \
+ (((uint8 *)(ipv6_body))[2] << 8) | \
+ (((uint8 *)(ipv6_body))[3]))
+
+#define IPV6_PAYLOAD_LEN(ipv6_body) \
+ ((((uint8 *)(ipv6_body))[IPV6_PAYLOAD_LEN_OFFSET + 0] << 8) | \
+ ((uint8 *)(ipv6_body))[IPV6_PAYLOAD_LEN_OFFSET + 1])
+
+#define IPV6_NEXT_HDR(ipv6_body) \
+ (((uint8 *)(ipv6_body))[IPV6_NEXT_HDR_OFFSET])
+
+#define IPV6_PROT(ipv6_body) IPV6_NEXT_HDR(ipv6_body)
+
+#define IPV6_ADDR_LEN 16 /* IPV6 address length */
+
+/* IPV4 TOS or IPV6 Traffic Classifier or 0 */
+#define IP_TOS(ip_body) \
+ (IP_VER(ip_body) == IP_VER_4 ? IPV4_TOS(ip_body) : \
+ IP_VER(ip_body) == IP_VER_6 ? IPV6_TRAFFIC_CLASS(ip_body) : 0)
+
+#undef PACKED
+#if !defined(__GNUC__)
+#pragma pack()
+#endif
+
+#endif /* _bcmip_h_ */
--- /dev/null
+/*
+ * Copyright 2007, Broadcom Corporation
+ * All Rights Reserved.
+ *
+ * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
+ * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
+ * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
+ *
+ * Fundamental constants relating to TCP Protocol
+ *
+ * $Id$
+ */
+
+#ifndef _bcmtcp_h_
+#define _bcmtcp_h_
+
+/* enable structure packing */
+#if defined(__GNUC__)
+#define PACKED __attribute__((packed))
+#else
+#pragma pack(1)
+#define PACKED
+#endif
+
+#define TCP_SRC_PORT_OFFSET 0 /* TCP source port offset */
+#define TCP_DEST_PORT_OFFSET 2 /* TCP dest port offset */
+#define TCP_CHKSUM_OFFSET 16 /* TCP body checksum offset */
+
+/* These fields are stored in network order */
+struct bcmtcp_hdr
+{
+ uint16 src_port; /* Source Port Address */
+ uint16 dst_port; /* Destination Port Address */
+ uint32 seq_num; /* TCP Sequence Number */
+ uint32 ack_num; /* TCP Sequence Number */
+ uint16 hdrlen_rsvd_flags; /* Header length, reserved bits and flags */
+ uint16 tcpwin; /* TCP window */
+ uint16 chksum; /* Segment checksum with pseudoheader */
+ uint16 urg_ptr; /* Points to seq-num of byte following urg data */
+} PACKED;
+
+#undef PACKED
+#if !defined(__GNUC__)
+#pragma pack()
+#endif
+
+/* Byte offset of flags in TCP header */
+#define TCP_FLAGS_OFFSET 13
+
+#define TCP_FLAGS_FIN 0x01
+#define TCP_FLAGS_SYN 0x02
+#define TCP_FLAGS_RST 0x03
+#define TCP_FLAGS_PSH 0x04
+#define TCP_FLAGS_ACK 0x10
+#define TCP_FLAGS_URG 0x20
+#define TCP_FLAGS_ECN 0x40
+#define TCP_FLAGS_CWR 0x80
+
+#define TCP_FLAGS(tcp_hdr) (((uint8 *)(tcp_hdr))[TCP_FLAGS_OFFSET])
+#define TCP_IS_ACK(tcp_hdr) (TCP_FLAGS(tcp_hdr) & TCP_FLAGS_ACK)
+
+#define TCP_SRC_PORT(tcp_hdr) (ntoh16(((struct bcmtcp_hdr*)(tcp_hdr))->src_port))
+#define TCP_DST_PORT(tcp_hdr) (ntoh16(((struct bcmtcp_hdr*)(tcp_hdr))->dst_port))
+#define TCP_SEQ_NUM(tcp_hdr) (ntoh32(((struct bcmtcp_hdr*)(tcp_hdr))->seq_num))
+#define TCP_ACK_NUM(tcp_hdr) (ntoh32(((struct bcmtcp_hdr*)(tcp_hdr))->ack_num))
+
+#endif /* #ifndef _bcmtcp_h_ */
--- /dev/null
+/*
+ * Copyright 2007, Broadcom Corporation
+ * All Rights Reserved.
+ *
+ * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Broadcom Corporation;
+ * the contents of this file may not be disclosed to third parties, copied
+ * or duplicated in any form, in whole or in part, without the prior
+ * written permission of Broadcom Corporation.
+ *
+ * Fundamental constants relating to UDP Protocol
+ *
+ * $Id$
+ */
+
+#ifndef _bcmudp_h_
+#define _bcmudp_h_
+
+/* enable structure packing */
+#if defined(__GNUC__)
+#define PACKED __attribute__((packed))
+#else
+#pragma pack(1)
+#define PACKED
+#endif
+
+/* UDP header */
+#define UDP_DEST_PORT_OFFSET 2 /* UDP dest port offset */
+#define UDP_LEN_OFFSET 4 /* UDP length offset */
+#define UDP_CHKSUM_OFFSET 6 /* UDP body checksum offset */
+
+#define UDP_HDR_LEN 8 /* UDP header length */
+#define UDP_PORT_LEN 2 /* UDP port length */
+
+/* These fields are stored in network order */
+struct bcmudp_hdr
+{
+ uint16 src_port; /* Source Port Address */
+ uint16 dst_port; /* Destination Port Address */
+ uint16 len; /* Number of bytes in datagram including header */
+ uint16 chksum; /* entire datagram checksum with pseudoheader */
+} PACKED;
+
+#undef PACKED
+#if !defined(__GNUC__)
+#pragma pack()
+#endif
+
+#endif /* #ifndef _bcmudp_h_ */
--- /dev/null
+/*
+ * Extensible Authentication Protocol (EAP) definitions
+ *
+ * See
+ * RFC 2284: PPP Extensible Authentication Protocol (EAP)
+ *
+ * Copyright (C) 2002 Broadcom Corporation
+ *
+ * $Id$
+ */
+
+#ifndef _eap_h_
+#define _eap_h_
+
+/* EAP packet format */
+typedef struct {
+ unsigned char code; /* EAP code */
+ unsigned char id; /* Current request ID */
+ unsigned short length; /* Length including header */
+ unsigned char type; /* EAP type (optional) */
+ unsigned char data[1]; /* Type data (optional) */
+} eap_header_t;
+
+#define EAP_HEADER_LEN 4
+
+/* EAP codes */
+#define EAP_REQUEST 1
+#define EAP_RESPONSE 2
+#define EAP_SUCCESS 3
+#define EAP_FAILURE 4
+
+/* EAP types */
+#define EAP_IDENTITY 1
+#define EAP_NOTIFICATION 2
+#define EAP_NAK 3
+#define EAP_MD5 4
+#define EAP_OTP 5
+#define EAP_GTC 6
+#define EAP_TLS 13
+#define EAP_EXPANDED 254
+#define BCM_EAP_SES 10
+#define BCM_EAP_EXP_LEN 12 /* EAP_LEN 5 + 3 bytes for SMI ID + 4 bytes for ven type */
+#define BCM_SMI_ID 0x113d
+
+#endif /* _eap_h_ */
--- /dev/null
+/*
+ * 802.1x EAPOL definitions
+ *
+ * See
+ * IEEE Std 802.1X-2001
+ * IEEE 802.1X RADIUS Usage Guidelines
+ *
+ * Copyright (C) 2002 Broadcom Corporation
+ *
+ * $Id$
+ */
+
+#ifndef _eapol_h_
+#define _eapol_h_
+
+/* enable structure packing */
+#if defined(__GNUC__)
+#define PACKED __attribute__((packed))
+#else
+#pragma pack(1)
+#define PACKED
+#endif
+
+#include <bcmcrypto/aeskeywrap.h>
+
+/* EAPOL for 802.3/Ethernet */
+typedef struct {
+ struct ether_header eth; /* 802.3/Ethernet header */
+ unsigned char version; /* EAPOL protocol version */
+ unsigned char type; /* EAPOL type */
+ unsigned short length; /* Length of body */
+ unsigned char body[1]; /* Body (optional) */
+} eapol_header_t;
+
+#define EAPOL_HEADER_LEN 18
+
+/* EAPOL version */
+#define WPA2_EAPOL_VERSION 2
+#define WPA_EAPOL_VERSION 1
+#define LEAP_EAPOL_VERSION 1
+#define SES_EAPOL_VERSION 1
+
+/* EAPOL types */
+#define EAP_PACKET 0
+#define EAPOL_START 1
+#define EAPOL_LOGOFF 2
+#define EAPOL_KEY 3
+#define EAPOL_ASF 4
+
+/* EAPOL-Key types */
+#define EAPOL_RC4_KEY 1
+#ifdef BCMWPA2
+#define EAPOL_WPA2_KEY 2 /* 802.11i/WPA2 */
+#endif
+#define EAPOL_WPA_KEY 254 /* WPA */
+
+/* RC4 EAPOL-Key header field sizes */
+#define EAPOL_KEY_REPLAY_LEN 8
+#define EAPOL_KEY_IV_LEN 16
+#define EAPOL_KEY_SIG_LEN 16
+
+/* RC4 EAPOL-Key */
+typedef struct {
+ unsigned char type; /* Key Descriptor Type */
+ unsigned short length; /* Key Length (unaligned) */
+ unsigned char replay[EAPOL_KEY_REPLAY_LEN]; /* Replay Counter */
+ unsigned char iv[EAPOL_KEY_IV_LEN]; /* Key IV */
+ unsigned char index; /* Key Flags & Index */
+ unsigned char signature[EAPOL_KEY_SIG_LEN]; /* Key Signature */
+ unsigned char key[1]; /* Key (optional) */
+} PACKED eapol_key_header_t;
+
+#define EAPOL_KEY_HEADER_LEN 44
+
+/* RC4 EAPOL-Key flags */
+#define EAPOL_KEY_FLAGS_MASK 0x80
+#define EAPOL_KEY_BROADCAST 0
+#define EAPOL_KEY_UNICAST 0x80
+
+/* RC4 EAPOL-Key index */
+#define EAPOL_KEY_INDEX_MASK 0x7f
+
+/* WPA/802.11i/WPA2 EAPOL-Key header field sizes */
+#define EAPOL_WPA_KEY_REPLAY_LEN 8
+#define EAPOL_WPA_KEY_NONCE_LEN 32
+#define EAPOL_WPA_KEY_IV_LEN 16
+#define EAPOL_WPA_KEY_RSC_LEN 8
+#define EAPOL_WPA_KEY_ID_LEN 8
+#define EAPOL_WPA_KEY_MIC_LEN 16
+#define EAPOL_WPA_KEY_DATA_LEN (EAPOL_WPA_MAX_KEY_SIZE + AKW_BLOCK_LEN)
+#define EAPOL_WPA_MAX_KEY_SIZE 32
+
+/* WPA EAPOL-Key */
+typedef struct {
+ unsigned char type; /* Key Descriptor Type */
+ unsigned short key_info; /* Key Information (unaligned) */
+ unsigned short key_len; /* Key Length (unaligned) */
+ unsigned char replay[EAPOL_WPA_KEY_REPLAY_LEN]; /* Replay Counter */
+ unsigned char nonce[EAPOL_WPA_KEY_NONCE_LEN]; /* Nonce */
+ unsigned char iv[EAPOL_WPA_KEY_IV_LEN]; /* Key IV */
+ unsigned char rsc[EAPOL_WPA_KEY_RSC_LEN]; /* Key RSC */
+ unsigned char id[EAPOL_WPA_KEY_ID_LEN]; /* WPA:Key ID, 802.11i/WPA2: Reserved */
+ unsigned char mic[EAPOL_WPA_KEY_MIC_LEN]; /* Key MIC */
+ unsigned short data_len; /* Key Data Length */
+ unsigned char data[EAPOL_WPA_KEY_DATA_LEN]; /* Key data */
+} PACKED eapol_wpa_key_header_t;
+
+#define EAPOL_WPA_KEY_LEN 95
+
+/* WPA/802.11i/WPA2 KEY KEY_INFO bits */
+#define WPA_KEY_DESC_V1 0x01
+#define WPA_KEY_DESC_V2 0x02
+#define WPA_KEY_PAIRWISE 0x08
+#define WPA_KEY_INSTALL 0x40
+#define WPA_KEY_ACK 0x80
+#define WPA_KEY_MIC 0x100
+#define WPA_KEY_SECURE 0x200
+#define WPA_KEY_ERROR 0x400
+#define WPA_KEY_REQ 0x800
+
+/* WPA-only KEY KEY_INFO bits */
+#define WPA_KEY_INDEX_0 0x00
+#define WPA_KEY_INDEX_1 0x10
+#define WPA_KEY_INDEX_2 0x20
+#define WPA_KEY_INDEX_3 0x30
+#define WPA_KEY_INDEX_MASK 0x30
+#define WPA_KEY_INDEX_SHIFT 0x04
+
+#ifdef BCMWPA2
+/* 802.11i/WPA2-only KEY KEY_INFO bits */
+#define WPA_KEY_ENCRYPTED_DATA 0x1000
+
+/* Key Data encapsulation */
+typedef struct {
+ uint8 type;
+ uint8 length;
+ uint8 oui[3];
+ uint8 subtype;
+ uint8 data[1];
+} PACKED eapol_wpa2_encap_data_t;
+
+#define EAPOL_WPA2_ENCAP_DATA_HDR_LEN 6
+
+#define WPA2_KEY_DATA_SUBTYPE_GTK 1
+#define WPA2_KEY_DATA_SUBTYPE_STAKEY 2
+#define WPA2_KEY_DATA_SUBTYPE_MAC 3
+#define WPA2_KEY_DATA_SUBTYPE_PMKID 4
+
+/* GTK encapsulation */
+typedef struct {
+ uint8 flags;
+ uint8 reserved;
+ uint8 gtk[EAPOL_WPA_MAX_KEY_SIZE];
+} PACKED eapol_wpa2_key_gtk_encap_t;
+
+#define EAPOL_WPA2_KEY_GTK_ENCAP_HDR_LEN 2
+
+#define WPA2_GTK_INDEX_MASK 0x03
+#define WPA2_GTK_INDEX_SHIFT 0x00
+
+#define WPA2_GTK_TRANSMIT 0x04
+
+/* STAKey encapsulation */
+typedef struct {
+ uint8 reserved[2];
+ uint8 mac[ETHER_ADDR_LEN];
+ uint8 stakey[EAPOL_WPA_MAX_KEY_SIZE];
+} PACKED eapol_wpa2_key_stakey_encap_t;
+
+#define WPA2_KEY_DATA_PAD 0xdd
+
+#endif /* BCMWPA2 */
+
+#undef PACKED
+#if !defined(__GNUC__)
+#pragma pack()
+#endif
+
+#endif /* _eapol_h_ */
--- /dev/null
+/*
+ * From FreeBSD 2.2.7: Fundamental constants relating to ethernet.
+ *
+ * Copyright 2007, Broadcom Corporation
+ * All Rights Reserved.
+ *
+ * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
+ * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
+ * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
+ *
+ * $Id$
+ */
+
+#ifndef _NET_ETHERNET_H_ /* use native BSD ethernet.h when available */
+#define _NET_ETHERNET_H_
+
+#ifndef _TYPEDEFS_H_
+#include "typedefs.h"
+#endif
+
+/* enable structure packing */
+#if defined(__GNUC__)
+#define PACKED __attribute__((packed))
+#else
+#pragma pack(1)
+#define PACKED
+#endif
+
+/*
+ * The number of bytes in an ethernet (MAC) address.
+ */
+#define ETHER_ADDR_LEN 6
+
+/*
+ * The number of bytes in the type field.
+ */
+#define ETHER_TYPE_LEN 2
+
+/*
+ * The number of bytes in the trailing CRC field.
+ */
+#define ETHER_CRC_LEN 4
+
+/*
+ * The length of the combined header.
+ */
+#define ETHER_HDR_LEN (ETHER_ADDR_LEN * 2 + ETHER_TYPE_LEN)
+
+/*
+ * The minimum packet length.
+ */
+#define ETHER_MIN_LEN 64
+
+/*
+ * The minimum packet user data length.
+ */
+#define ETHER_MIN_DATA 46
+
+/*
+ * The maximum packet length.
+ */
+#define ETHER_MAX_LEN 1518
+
+/*
+ * The maximum packet user data length.
+ */
+#define ETHER_MAX_DATA 1500
+
+/* ether types */
+#define ETHER_TYPE_MIN 0x0600 /* Anything less than MIN is a length */
+#define ETHER_TYPE_IP 0x0800 /* IP */
+#define ETHER_TYPE_ARP 0x0806 /* ARP */
+#define ETHER_TYPE_8021Q 0x8100 /* 802.1Q */
+#define ETHER_TYPE_BRCM 0x886c /* Broadcom Corp. */
+#define ETHER_TYPE_802_1X 0x888e /* 802.1x */
+#ifdef BCMWPA2
+#define ETHER_TYPE_802_1X_PREAUTH 0x88c7 /* 802.1x preauthentication */
+#endif
+
+/* Broadcom subtype follows ethertype; First 2 bytes are reserved; Next 2 are subtype; */
+#define ETHER_BRCM_SUBTYPE_LEN 4 /* Broadcom 4 byte subtype */
+#define ETHER_BRCM_CRAM 0x1 /* Broadcom subtype cram protocol */
+
+/* ether header */
+#define ETHER_DEST_OFFSET (0 * ETHER_ADDR_LEN) /* dest address offset */
+#define ETHER_SRC_OFFSET (1 * ETHER_ADDR_LEN) /* src address offset */
+#define ETHER_TYPE_OFFSET (2 * ETHER_ADDR_LEN) /* ether type offset */
+
+/*
+ * A macro to validate a length with
+ */
+#define ETHER_IS_VALID_LEN(foo) \
+ ((foo) >= ETHER_MIN_LEN && (foo) <= ETHER_MAX_LEN)
+
+
+#ifndef __INCif_etherh /* Quick and ugly hack for VxWorks */
+/*
+ * Structure of a 10Mb/s Ethernet header.
+ */
+struct ether_header {
+ uint8 ether_dhost[ETHER_ADDR_LEN];
+ uint8 ether_shost[ETHER_ADDR_LEN];
+ uint16 ether_type;
+} PACKED;
+
+/*
+ * Structure of a 48-bit Ethernet address.
+ */
+#ifndef NOETHREQ /* Quick and ugly hack for VxWorks */
+struct ether_addr {
+ uint8 octet[ETHER_ADDR_LEN];
+} PACKED;
+#endif
+#endif /* !__INCif_etherh Quick and ugly hack for VxWorks */
+
+/*
+ * Takes a pointer, set, test, clear, toggle locally admininistered
+ * address bit in the 48-bit Ethernet address.
+ */
+#define ETHER_SET_LOCALADDR(ea) (((uint8 *)(ea))[0] = (((uint8 *)(ea))[0] | 2))
+#define ETHER_IS_LOCALADDR(ea) (((uint8 *)(ea))[0] & 2)
+#define ETHER_CLR_LOCALADDR(ea) (((uint8 *)(ea))[0] = (((uint8 *)(ea))[0] & 0xd))
+#define ETHER_TOGGLE_LOCALADDR(ea) (((uint8 *)(ea))[0] = (((uint8 *)(ea))[0] ^ 2))
+
+/* Takes a pointer, marks unicast address bit in the MAC address */
+#define ETHER_SET_UNICAST(ea) (((uint8 *)(ea))[0] = (((uint8 *)(ea))[0] & ~1))
+
+/*
+ * Takes a pointer, returns true if a 48-bit multicast address
+ * (including broadcast, since it is all ones)
+ */
+#define ETHER_ISMULTI(ea) (((const uint8 *)(ea))[0] & 1)
+
+
+/* compare two ethernet addresses - assumes the pointers can be referenced as shorts */
+#define ether_cmp(a, b) (!(((short*)a)[0] == ((short*)b)[0]) | \
+ !(((short*)a)[1] == ((short*)b)[1]) | \
+ !(((short*)a)[2] == ((short*)b)[2]))
+
+/* copy an ethernet address - assumes the pointers can be referenced as shorts */
+#define ether_copy(s, d) { \
+ ((short*)d)[0] = ((short*)s)[0]; \
+ ((short*)d)[1] = ((short*)s)[1]; \
+ ((short*)d)[2] = ((short*)s)[2]; }
+
+/*
+ * Takes a pointer, returns true if a 48-bit broadcast (all ones)
+ */
+#define ETHER_ISBCAST(ea) ((((uint8 *)(ea))[0] & \
+ ((uint8 *)(ea))[1] & \
+ ((uint8 *)(ea))[2] & \
+ ((uint8 *)(ea))[3] & \
+ ((uint8 *)(ea))[4] & \
+ ((uint8 *)(ea))[5]) == 0xff)
+
+static const struct ether_addr ether_bcast = {{255, 255, 255, 255, 255, 255}};
+static const struct ether_addr ether_null = {{0, 0, 0, 0, 0, 0}};
+
+/*
+ * Takes a pointer, returns true if a 48-bit null address (all zeros)
+ */
+#define ETHER_ISNULLADDR(ea) ((((uint8 *)(ea))[0] | \
+ ((uint8 *)(ea))[1] | \
+ ((uint8 *)(ea))[2] | \
+ ((uint8 *)(ea))[3] | \
+ ((uint8 *)(ea))[4] | \
+ ((uint8 *)(ea))[5]) == 0)
+
+#undef PACKED
+#if !defined(__GNUC__)
+#pragma pack()
+#endif
+
+#endif /* _NET_ETHERNET_H_ */
--- /dev/null
+/*
+ * 802.1Q VLAN protocol definitions
+ *
+ * Copyright 2007, Broadcom Corporation
+ * All Rights Reserved.
+ *
+ * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
+ * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
+ * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
+ *
+ * $Id$
+ */
+
+#ifndef _vlan_h_
+#define _vlan_h_
+
+/* enable structure packing */
+#if defined(__GNUC__)
+#define PACKED __attribute__((packed))
+#else
+#pragma pack(1)
+#define PACKED
+#endif
+
+#define VLAN_VID_MASK 0xfff /* low 12 bits are vlan id */
+#define VLAN_CFI_SHIFT 12 /* canonical format indicator bit */
+#define VLAN_PRI_SHIFT 13 /* user priority */
+
+#define VLAN_PRI_MASK 7 /* 3 bits of priority */
+
+#define VLAN_TAG_LEN 4
+#define VLAN_TAG_OFFSET (2 * ETHER_ADDR_LEN) /* offset in Ethernet II packet only */
+
+#define VLAN_TPID 0x8100 /* VLAN ethertype/Tag Protocol ID */
+
+struct ethervlan_header {
+ uint8 ether_dhost[ETHER_ADDR_LEN];
+ uint8 ether_shost[ETHER_ADDR_LEN];
+ uint16 vlan_type; /* 0x8100 */
+ uint16 vlan_tag; /* priority, cfi and vid */
+ uint16 ether_type;
+};
+
+#define ETHERVLAN_HDR_LEN (ETHER_HDR_LEN + VLAN_TAG_LEN)
+
+#undef PACKED
+#if !defined(__GNUC__)
+#pragma pack()
+#endif
+
+#endif /* _vlan_h_ */
--- /dev/null
+/*
+ * Fundamental types and constants relating to WPA
+ *
+ * Copyright 2007, Broadcom Corporation
+ * All Rights Reserved.
+ *
+ * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
+ * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
+ * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
+ *
+ * $Id$
+ */
+
+#ifndef _proto_wpa_h_
+#define _proto_wpa_h_
+
+#include <typedefs.h>
+#include <proto/ethernet.h>
+
+/* enable structure packing */
+#if defined(__GNUC__)
+#define PACKED __attribute__((packed))
+#else
+#pragma pack(1)
+#define PACKED
+#endif
+
+/* Reason Codes */
+
+/* 13 through 23 taken from IEEE Std 802.11i-2004 */
+#define DOT11_RC_INVALID_WPA_IE 13 /* Invalid info. element */
+#define DOT11_RC_MIC_FAILURE 14 /* Michael failure */
+#define DOT11_RC_4WH_TIMEOUT 15 /* 4-way handshake timeout */
+#define DOT11_RC_GTK_UPDATE_TIMEOUT 16 /* Group key update timeout */
+#define DOT11_RC_WPA_IE_MISMATCH 17 /* WPA IE in 4-way handshake differs from
+ * (re-)assoc. request/probe response
+ */
+#define DOT11_RC_INVALID_MC_CIPHER 18 /* Invalid multicast cipher */
+#define DOT11_RC_INVALID_UC_CIPHER 19 /* Invalid unicast cipher */
+#define DOT11_RC_INVALID_AKMP 20 /* Invalid authenticated key management protocol */
+#define DOT11_RC_BAD_WPA_VERSION 21 /* Unsupported WPA version */
+#define DOT11_RC_INVALID_WPA_CAP 22 /* Invalid WPA IE capabilities */
+#define DOT11_RC_8021X_AUTH_FAIL 23 /* 802.1X authentication failure */
+
+#define WPA2_PMKID_LEN 16
+
+/* WPA IE fixed portion */
+typedef struct
+{
+ uint8 tag; /* TAG */
+ uint8 length; /* TAG length */
+ uint8 oui[3]; /* IE OUI */
+ uint8 oui_type; /* OUI type */
+ struct {
+ uint8 low;
+ uint8 high;
+ } PACKED version; /* IE version */
+} PACKED wpa_ie_fixed_t;
+#define WPA_IE_OUITYPE_LEN 4
+#define WPA_IE_FIXED_LEN 8
+#define WPA_IE_TAG_FIXED_LEN 6
+
+#ifdef BCMWPA2
+typedef struct {
+ uint8 tag; /* TAG */
+ uint8 length; /* TAG length */
+ struct {
+ uint8 low;
+ uint8 high;
+ } PACKED version; /* IE version */
+} PACKED wpa_rsn_ie_fixed_t;
+#define WPA_RSN_IE_FIXED_LEN 4
+#define WPA_RSN_IE_TAG_FIXED_LEN 2
+typedef uint8 wpa_pmkid_t[WPA2_PMKID_LEN];
+#endif
+
+/* WPA suite/multicast suite */
+typedef struct
+{
+ uint8 oui[3];
+ uint8 type;
+} PACKED wpa_suite_t, wpa_suite_mcast_t;
+#define WPA_SUITE_LEN 4
+
+/* WPA unicast suite list/key management suite list */
+typedef struct
+{
+ struct {
+ uint8 low;
+ uint8 high;
+ } PACKED count;
+ wpa_suite_t list[1];
+} PACKED wpa_suite_ucast_t, wpa_suite_auth_key_mgmt_t;
+#define WPA_IE_SUITE_COUNT_LEN 2
+#ifdef BCMWPA2
+typedef struct
+{
+ struct {
+ uint8 low;
+ uint8 high;
+ } PACKED count;
+ wpa_pmkid_t list[1];
+} PACKED wpa_pmkid_list_t;
+#endif
+
+/* WPA cipher suites */
+#define WPA_CIPHER_NONE 0 /* None */
+#define WPA_CIPHER_WEP_40 1 /* WEP (40-bit) */
+#define WPA_CIPHER_TKIP 2 /* TKIP: default for WPA */
+#define WPA_CIPHER_AES_OCB 3 /* AES (OCB) */
+#define WPA_CIPHER_AES_CCM 4 /* AES (CCM) */
+#define WPA_CIPHER_WEP_104 5 /* WEP (104-bit) */
+
+#define IS_WPA_CIPHER(cipher) ((cipher) == WPA_CIPHER_NONE || \
+ (cipher) == WPA_CIPHER_WEP_40 || \
+ (cipher) == WPA_CIPHER_WEP_104 || \
+ (cipher) == WPA_CIPHER_TKIP || \
+ (cipher) == WPA_CIPHER_AES_OCB || \
+ (cipher) == WPA_CIPHER_AES_CCM)
+
+/* WPA TKIP countermeasures parameters */
+#define WPA_TKIP_CM_DETECT 60 /* multiple MIC failure window (seconds) */
+#define WPA_TKIP_CM_BLOCK 60 /* countermeasures active window (seconds) */
+
+/* RSN IE defines */
+#define RSN_CAP_LEN 2 /* Length of RSN capabilities field (2 octets) */
+
+/* RSN Capabilities defined in 802.11i */
+#define RSN_CAP_PREAUTH 0x0001
+#define RSN_CAP_NOPAIRWISE 0x0002
+#define RSN_CAP_PTK_REPLAY_CNTR_MASK 0x000C
+#define RSN_CAP_PTK_REPLAY_CNTR_SHIFT 2
+#define RSN_CAP_GTK_REPLAY_CNTR_MASK 0x0030
+#define RSN_CAP_GTK_REPLAY_CNTR_SHIFT 4
+#define RSN_CAP_1_REPLAY_CNTR 0
+#define RSN_CAP_2_REPLAY_CNTRS 1
+#define RSN_CAP_4_REPLAY_CNTRS 2
+#define RSN_CAP_16_REPLAY_CNTRS 3
+
+/* WPA capabilities defined in 802.11i */
+#define WPA_CAP_4_REPLAY_CNTRS RSN_CAP_4_REPLAY_CNTRS
+#define WPA_CAP_16_REPLAY_CNTRS RSN_CAP_16_REPLAY_CNTRS
+#define WPA_CAP_REPLAY_CNTR_SHIFT RSN_CAP_PTK_REPLAY_CNTR_SHIFT
+#define WPA_CAP_REPLAY_CNTR_MASK RSN_CAP_PTK_REPLAY_CNTR_MASK
+
+/* WPA Specific defines */
+#define WPA_CAP_LEN RSN_CAP_LEN /* Length of RSN capabilities in RSN IE (2 octets) */
+
+#define WPA_CAP_WPA2_PREAUTH RSN_CAP_PREAUTH
+
+
+#undef PACKED
+#if !defined(__GNUC__)
+#pragma pack()
+#endif
+
+#endif /* _proto_wpa_h_ */
* Generic Broadcom Home Networking Division (HND) DMA engine HW interface
* This supports the following chips: BCM42xx, 44xx, 47xx .
*
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
* All Rights Reserved.
*
* THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
* SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
*
- * $Id: sbhnddma.h,v 1.1.1.2 2006/02/27 03:43:16 honor Exp $
+ * $Id$
*/
#ifndef _sbhnddma_h_
static char wlbuf[8192];
static char interface[16] = "wl0";
-static unsigned long ptable[128];
static unsigned long kmem_offset = 0;
static int vif = 0, debug = 1, fromstdin = 0;
ea[0], ea[1], ea[2], ea[3], ea[4], ea[5]);
}
-/*
- * find the starting point of wl.o in memory
- * by reading /proc/ksyms
- */
-static inline void wlc_get_mem_offset(void)
-{
- FILE *f;
- char s[64];
-
- /* yes, i'm lazy ;) */
- f = popen("grep '\\[wl]' /proc/ksyms | sort", "r");
- if (fgets(s, 64, f) == 0)
- return;
-
- pclose(f);
-
- s[8] = 0;
- kmem_offset = strtoul(s, NULL, 16);
-
- /* sanity check */
- if (kmem_offset < 0xc0000000)
- kmem_offset = 0;
-}
-
-
-static int ptable_init(void)
-{
- glob_t globbuf;
- struct stat statbuf;
- int fd;
-
- if (ptable[0] == PTABLE_MAGIC)
- return 0;
-
- glob("/lib/modules/2.4.*/wl.o.patch", 0, NULL, &globbuf);
-
- if (globbuf.gl_pathv[0] == NULL)
- return -1;
-
- if ((fd = open(globbuf.gl_pathv[0], O_RDONLY)) < 0)
- return -1;
-
- if (fstat(fd, &statbuf) < 0)
- goto failed;
-
- if (statbuf.st_size < 512)
- goto failed;
-
- if (read(fd, ptable, 512) < 512)
- goto failed;
-
- if (ptable[0] != PTABLE_MAGIC)
- goto failed;
-
- close(fd);
-
- wlc_get_mem_offset();
- if (kmem_offset == 0)
- return -1;
-
- return 0;
-
-failed:
- close(fd);
-
- return -1;
-}
-
-static inline unsigned long wlc_kmem_read(unsigned long offset)
-{
- int fd;
- unsigned long ret;
-
- if ((fd = open("/dev/kmem", O_RDONLY )) < 0)
- return -1;
-
- lseek(fd, 0x70000000, SEEK_SET);
- lseek(fd, (kmem_offset - 0x70000000) + offset, SEEK_CUR);
- read(fd, &ret, 4);
- close(fd);
-
- return ret;
-}
-
-static inline void wlc_kmem_write(unsigned long offset, unsigned long value)
-{
- int fd;
-
- if ((fd = open("/dev/kmem", O_WRONLY )) < 0)
- return;
-
- lseek(fd, 0x70000000, SEEK_SET);
- lseek(fd, (kmem_offset - 0x70000000) + offset, SEEK_CUR);
- write(fd, &value, 4);
- close(fd);
-}
-
-static int wlc_patcher_getval(unsigned long key, unsigned long *val)
-{
- unsigned long *pt = &ptable[1];
- unsigned long tmp;
-
- if (ptable_init() < 0) {
- fprintf(stderr, "Could not load the ptable\n");
- return -1;
- }
-
- while (*pt != PTABLE_END) {
- if (*pt == key) {
- tmp = wlc_kmem_read(pt[1]);
-
- if (tmp == pt[2])
- *val = 0xffffffff;
- else
- *val = tmp;
-
- return 0;
- }
- pt += 3;
- }
-
- return -1;
-}
-
-static int wlc_patcher_setval(unsigned long key, unsigned long val)
-{
- unsigned long *pt = &ptable[1];
-
- if (ptable_init() < 0) {
- fprintf(stderr, "Could not load the ptable\n");
- return -1;
- }
-
- if (val != 0xffffffff)
- val = (pt[2] & ~(0xffff)) | (val & 0xffff);
-
- while (*pt != PTABLE_END) {
- if (*pt == key) {
- if (val == 0xffffffff) /* default */
- val = pt[2];
-
- wlc_kmem_write(pt[1], val);
- }
- pt += 3;
- }
-
- return 0;
-}
-
-static int wlc_slottime(wlc_param param, void *data, void *value)
-{
- int *val = (int *) value;
- int ret = 0;
-
- if ((param & PARAM_MODE) == SET) {
- wlc_patcher_setval(PTABLE_SLT1, *val);
- wlc_patcher_setval(PTABLE_SLT2, ((*val == -1) ? *val : *val + 510));
- } else if ((param & PARAM_MODE) == GET) {
- ret = wlc_patcher_getval(PTABLE_SLT1, (unsigned long *) val);
- if (*val != 0xffffffff)
- *val &= 0xffff;
- }
-
- return ret;
-}
-
-static int wlc_noack(wlc_param param, void *data, void *value)
-{
- int *val = (int *) value;
- int ret = 0;
-
- if ((param & PARAM_MODE) == SET) {
- wlc_patcher_setval(PTABLE_ACKW, ((*val) ? 1 : 0));
- } else if ((param & PARAM_MODE) == GET) {
- ret = wlc_patcher_getval(PTABLE_ACKW, (unsigned long *) val);
- *val &= 0xffff;
- *val = (*val ? 1 : 0);
- }
-
- return ret;
-}
-
-static int wlc_ibss_merge(wlc_param param, void *data, void *value)
-{
- int *val = (int *) value;
- int ret = 0;
-
- if ((param & PARAM_MODE) == SET) {
- /* overwrite the instruction with 'lui v0,0x0' - fake a return
- * status of 0 for wlc_bcn_tsf_later */
- wlc_patcher_setval(PTABLE_ACKW, ((*val) ? -1 : 0x3c020000));
- } else if ((param & PARAM_MODE) == GET) {
- ret = wlc_patcher_getval(PTABLE_ACKW, (unsigned long *) val);
- *val = ((*val == -1) ? 1 : 0);
- }
-
- return ret;
-}
-
static int wlc_ioctl(wlc_param param, void *data, void *value)
{
unsigned int *var = ((unsigned int *) data);
.data.str = "rtsthresh",
.desc = "RTS threshold"
},
+ {
+ .name = "slottime",
+ .param = INT,
+ .handler = wlc_iovar,
+ .data.str = "acktiming",
+ .desc = "Slot time"
+ },
{
.name = "rxant",
.param = INT,
.handler = wlc_afterburner,
.desc = "Broadcom Afterburner"
},
- {
- .name = "slottime",
- .param = INT,
- .handler = wlc_slottime,
- .desc = "Slot time (-1 = auto)"
- },
- {
- .name = "txack",
- .param = INT,
- .handler = wlc_noack,
- .desc = "Tx ACK enabled flag"
- },
- {
- .name = "ibss_merge",
- .param = INT,
- .handler = wlc_ibss_merge,
- .desc = "Allow IBSS merge in Ad-Hoc mode"
- }
};
#define wlc_calls_size (sizeof(wlc_calls) / sizeof(struct wlc_call))
EXTRA_CFLAGS += -DDEBUG=1
_D=-debug
endif
+ifneq ($(WL_WEXT),)
+ EXTRA_CFLAGS += -DWL_WEXT=1
+endif
obj-m := wlcompat$(_D).o
modules: wlcompat$(_D).o
#include <linux/wireless.h>
#include <linux/timer.h>
#include <linux/delay.h>
+#include <linux/random.h>
#include <net/iw_handler.h>
#include <asm/uaccess.h>
#include <bcmutils.h>
#include <wlioctl.h>
+char buf[WLC_IOCTL_MAXLEN];
static struct net_device *dev;
-static struct iw_statistics wstats;
#ifndef DEBUG
static int random = 1;
#endif
+#ifndef WL_WEXT
+static struct iw_statistics wstats;
static int last_mode = -1;
static int scan_cur = 0;
-char buf[WLC_IOCTL_MAXLEN];
/* The frequency of each channel in MHz */
const long channel_frequency[] = {
2447, 2452, 2457, 2462, 2467, 2472, 2484
};
#define NUM_CHANNELS ( sizeof(channel_frequency) / sizeof(channel_frequency[0]) )
+#endif
#define SCAN_RETRY_MAX 5
#define RNG_POLL_FREQ 1
return ret;
}
+#if !defined(DEBUG) || !defined(WL_WEXT)
static int
wl_iovar_getbuf(struct net_device *dev, char *iovar, void *param, int paramlen, void *bufptr, int buflen)
{
return err;
}
#endif
+#endif
+
+#ifndef WL_WEXT
int get_primary_key(struct net_device *dev)
{
.num_standard = sizeof(wlcompat_handler)/sizeof(iw_handler),
};
+#endif
#ifdef DEBUG
void print_buffer(int len, unsigned char *buf) {
static int (*old_ioctl)(struct net_device *dev, struct ifreq *ifr, int cmd);
static int new_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) {
int ret = 0;
- struct iwreq *iwr = (struct iwreq *) ifr;
- struct iw_request_info info;
#ifdef DEBUG
printk("dev: %s ioctl: 0x%04x\n",dev->name,cmd);
{
int found = 0, i;
char devname[4] = "wl0";
-
+
while (!found && (dev = dev_get_by_name(devname))) {
- if ((dev->wireless_handlers == NULL) && ((wl_ioctl(dev, WLC_GET_MAGIC, &i, sizeof(i)) == 0) && i == WLC_IOCTL_MAGIC))
+ if ((wl_ioctl(dev, WLC_GET_MAGIC, &i, sizeof(i)) == 0) && (i == WLC_IOCTL_MAGIC))
found = 1;
devname[2]++;
}
-
+
+
if (!found) {
printk("No Broadcom devices found.\n");
return -ENODEV;
}
-
old_ioctl = dev->do_ioctl;
dev->do_ioctl = new_ioctl;
+#ifndef WL_WEXT
dev->wireless_handlers = (struct iw_handler_def *)&wlcompat_handler_def;
dev->get_wireless_stats = wlcompat_get_wireless_stats;
+#endif
#ifndef DEBUG
if (random) {
if (random)
del_timer(&rng_timer);
#endif
+#ifndef WL_WEXT
dev->get_wireless_stats = NULL;
dev->wireless_handlers = NULL;
+#endif
dev->do_ioctl = old_ioctl;
return;
}
+++ /dev/null
-# CONFIG_60XX_WDT is not set
-# CONFIG_6PACK is not set
-# CONFIG_8139CP is not set
-# CONFIG_8139TOO is not set
-# CONFIG_8139TOO_8129 is not set
-# CONFIG_8139TOO_PIO is not set
-# CONFIG_8139TOO_TUNE_TWISTER is not set
-# CONFIG_8139_OLD_RX_RESET is not set
-# CONFIG_ACQUIRE_WDT is not set
-# CONFIG_ADAPTEC_STARFIRE is not set
-# CONFIG_ADVANTECH_WDT is not set
-# CONFIG_AIRO is not set
-# CONFIG_AIRO_CS is not set
-# CONFIG_ALIM1535_WDT is not set
-# CONFIG_ALIM7101_WDT is not set
-# CONFIG_AMD74XX_OVERRIDE is not set
-# CONFIG_AMD8111_ETH is not set
-# CONFIG_APRICOT is not set
-# CONFIG_ATM is not set
-CONFIG_AX25=m
-# CONFIG_AX25_DAMA_SLAVE is not set
-CONFIG_B44=y
-# CONFIG_BAYCOM_EPP is not set
-# CONFIG_BAYCOM_PAR is not set
-# CONFIG_BAYCOM_SER_FDX is not set
-# CONFIG_BAYCOM_SER_HDX is not set
-CONFIG_BCM4310=y
-CONFIG_BCM4704=y
-CONFIG_BCM4710=y
-CONFIG_BCM5365=y
-CONFIG_BCM947XX=y
-# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-# CONFIG_BLK_DEV_ADMA100 is not set
-CONFIG_BLK_DEV_AEC62XX=m
-# CONFIG_BLK_DEV_ALI15X3 is not set
-# CONFIG_BLK_DEV_AMD74XX is not set
-# CONFIG_BLK_DEV_ATARAID is not set
-# CONFIG_BLK_DEV_ATARAID_HPT is not set
-# CONFIG_BLK_DEV_ATARAID_MEDLEY is not set
-# CONFIG_BLK_DEV_ATARAID_PDC is not set
-# CONFIG_BLK_DEV_ATARAID_SII is not set
-# CONFIG_BLK_DEV_ATIIXP is not set
-# CONFIG_BLK_DEV_CMD640 is not set
-# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
-# CONFIG_BLK_DEV_CMD64X is not set
-# CONFIG_BLK_DEV_CS5530 is not set
-# CONFIG_BLK_DEV_CY82C693 is not set
-# CONFIG_BLK_DEV_DELKIN is not set
-# CONFIG_BLK_DEV_GENERIC is not set
-# CONFIG_BLK_DEV_HD_IDE is not set
-# CONFIG_BLK_DEV_HPT34X is not set
-# CONFIG_BLK_DEV_HPT366 is not set
-CONFIG_BLK_DEV_IDE=m
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDECS is not set
-CONFIG_BLK_DEV_IDEDISK=m
-CONFIG_BLK_DEV_IDEDMA=y
-# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
-CONFIG_BLK_DEV_IDEDMA_PCI=y
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-CONFIG_BLK_DEV_IDEPCI=y
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDE_SATA is not set
-# CONFIG_BLK_DEV_ISAPNP is not set
-# CONFIG_BLK_DEV_NS87415 is not set
-CONFIG_BLK_DEV_OFFBOARD=y
-# CONFIG_BLK_DEV_OPTI621 is not set
-CONFIG_BLK_DEV_PDC202XX=y
-# CONFIG_BLK_DEV_PDC202XX_NEW is not set
-CONFIG_BLK_DEV_PDC202XX_OLD=m
-# CONFIG_BLK_DEV_PIIX is not set
-# CONFIG_BLK_DEV_RZ1000 is not set
-# CONFIG_BLK_DEV_SC1200 is not set
-# CONFIG_BLK_DEV_SIIMAGE is not set
-# CONFIG_BLK_DEV_SIS5513 is not set
-# CONFIG_BLK_DEV_SLC90E66 is not set
-# CONFIG_BLK_DEV_SVWKS is not set
-# CONFIG_BLK_DEV_TRIFLEX is not set
-# CONFIG_BLK_DEV_TRM290 is not set
-# CONFIG_BLK_DEV_VIA82CXXX is not set
-CONFIG_BLUEZ=m
-CONFIG_BLUEZ_BNEP=m
-CONFIG_BLUEZ_BNEP_MC_FILTER=y
-CONFIG_BLUEZ_BNEP_PROTO_FILTER=y
-# CONFIG_BLUEZ_HCIBFUSB is not set
-# CONFIG_BLUEZ_HCIBLUECARD is not set
-# CONFIG_BLUEZ_HCIBT3C is not set
-# CONFIG_BLUEZ_HCIBTUART is not set
-# CONFIG_BLUEZ_HCIDTL1 is not set
-CONFIG_BLUEZ_HCIUART=m
-CONFIG_BLUEZ_HCIUART_BCSP=y
-CONFIG_BLUEZ_HCIUART_BCSP_TXCRC=y
-CONFIG_BLUEZ_HCIUART_H4=y
-CONFIG_BLUEZ_HCIUSB=m
-CONFIG_BLUEZ_HCIUSB_SCO=y
-# CONFIG_BLUEZ_HCIVHCI is not set
-CONFIG_BLUEZ_L2CAP=m
-CONFIG_BLUEZ_RFCOMM=m
-CONFIG_BLUEZ_RFCOMM_TTY=y
-CONFIG_BLUEZ_SCO=m
-# CONFIG_BPQETHER is not set
-CONFIG_CARDBUS=y
-CONFIG_CMDLINE="root=/dev/mtdblock2 rootfstype=squashfs,jffs2 init=/etc/preinit noinitrd console=ttyS0,115200"
-# CONFIG_CMDLINE_BOOL is not set
-CONFIG_CRC32=y
-# CONFIG_CS89x0 is not set
-# CONFIG_DE4X5 is not set
-# CONFIG_DGRS is not set
-# CONFIG_DM9102 is not set
-# CONFIG_DMA_NONPCI is not set
-# CONFIG_E100 is not set
-# CONFIG_EEPRO100 is not set
-# CONFIG_EEPRO100_PIO is not set
-# CONFIG_EPIC100 is not set
-# CONFIG_ES3210 is not set
-# CONFIG_EUROTECH_WDT is not set
-# CONFIG_FEALNX is not set
-CONFIG_FILTER=y
-# CONFIG_FORCEDETH is not set
-CONFIG_HAMRADIO=y
-# CONFIG_HAPPYMEAL is not set
-# CONFIG_HP100 is not set
-# CONFIG_HPT34X_AUTODMA is not set
-# CONFIG_I2C_PARPORT is not set
-# CONFIG_I2O is not set
-# CONFIG_I2O_BLOCK is not set
-# CONFIG_I2O_LAN is not set
-# CONFIG_I2O_PCI is not set
-# CONFIG_I2O_PROC is not set
-# CONFIG_I2O_SCSI is not set
-# CONFIG_I810_TCO is not set
-# CONFIG_I82092 is not set
-# CONFIG_I82365 is not set
-# CONFIG_IB700_WDT is not set
-CONFIG_IDE=m
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_IDEDISK_STROKE=y
-CONFIG_IDEDMA_AUTO=y
-CONFIG_IDEDMA_IVB=y
-# CONFIG_IDEDMA_ONLYDISK is not set
-CONFIG_IDEDMA_PCI_AUTO=y
-# CONFIG_IDEDMA_PCI_WIP is not set
-# CONFIG_IDEPCI_SHARE_IRQ is not set
-# CONFIG_IDE_CHIPSETS is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-# CONFIG_IEEE1394 is not set
-CONFIG_IP6_NF_MATCH_LIMIT=m
-CONFIG_IP_VS=m
-# CONFIG_IP_VS_DEBUG is not set
-CONFIG_IP_VS_DH=m
-CONFIG_IP_VS_FTP=m
-CONFIG_IP_VS_LBLC=m
-CONFIG_IP_VS_LBLCR=m
-CONFIG_IP_VS_LC=m
-CONFIG_IP_VS_NQ=m
-CONFIG_IP_VS_RR=m
-CONFIG_IP_VS_SED=m
-CONFIG_IP_VS_SH=m
-CONFIG_IP_VS_TAB_BITS=12
-CONFIG_IP_VS_WLC=m
-CONFIG_IP_VS_WRR=m
-# CONFIG_LAN_SAA9730 is not set
-# CONFIG_LNE390 is not set
-CONFIG_LOG_BUF_SHIFT=0
-# CONFIG_LP_CONSOLE is not set
-# CONFIG_MACHZ_WDT is not set
-# CONFIG_MIDI_EMU10K1 is not set
-# CONFIG_MIDI_VIA82CXXX is not set
-CONFIG_MINIX_FS=m
-CONFIG_MIPS_BRCM=y
-# CONFIG_MIXCOMWD is not set
-CONFIG_MKISS=m
-CONFIG_MSDOS_FS=m
-CONFIG_MTD_BCM947XX=y
-CONFIG_MTD_CFI_SSTSTD=y
-CONFIG_MTD_SFLASH=y
-# CONFIG_NATSEMI is not set
-# CONFIG_NE2K_PCI is not set
-# CONFIG_NE3210 is not set
-# CONFIG_NETROM is not set
-CONFIG_NET_PCI=y
-# CONFIG_NET_PCMCIA is not set
-CONFIG_NET_SCH_ESFQ=m
-CONFIG_NET_WIRELESS=y
-CONFIG_NEW_IRQ=y
-CONFIG_NEW_TIME_C=y
-CONFIG_NLS=y
-CONFIG_PARPORT=m
-# CONFIG_PARPORT_1284 is not set
-# CONFIG_PARPORT_AMIGA is not set
-# CONFIG_PARPORT_ATARI is not set
-# CONFIG_PARPORT_GSC is not set
-# CONFIG_PARPORT_IP22 is not set
-# CONFIG_PARPORT_MFC3 is not set
-# CONFIG_PARPORT_OTHER is not set
-# CONFIG_PARPORT_PC is not set
-CONFIG_PARPORT_SPLINK=m
-# CONFIG_PARPORT_SUNBPP is not set
-CONFIG_PCI=y
-CONFIG_PCI_AUTO=y
-# CONFIG_PCI_HERMES is not set
-# CONFIG_PCI_NAMES is not set
-# CONFIG_PCI_NEW is not set
-CONFIG_PCMCIA=m
-# CONFIG_PCMCIA_ATMEL is not set
-# CONFIG_PCMCIA_HERMES is not set
-CONFIG_PCMCIA_SERIAL_CS=m
-# CONFIG_PCNET32 is not set
-# CONFIG_PCWATCHDOG is not set
-CONFIG_PDC202XX_BURST=y
-# CONFIG_PDC202XX_FORCE is not set
-# CONFIG_PLX_HERMES is not set
-CONFIG_PPDEV=m
-CONFIG_PRINTER=m
-# CONFIG_RADIO_GEMTEK_PCI is not set
-# CONFIG_RADIO_MAESTRO is not set
-# CONFIG_RADIO_MAXIRADIO is not set
-# CONFIG_RADIO_MIROPCM20 is not set
-# CONFIG_REMOTE_DEBUG is not set
-# CONFIG_ROSE is not set
-# CONFIG_SC1200_WDT is not set
-# CONFIG_SC520_WDT is not set
-# CONFIG_SCC_DELAY is not set
-# CONFIG_SCC_TRXECHO is not set
-# CONFIG_SCSI_CPQFCTS is not set
-# CONFIG_SCSI_DC390T is not set
-# CONFIG_SCSI_IMM is not set
-# CONFIG_SCSI_NCR53C8XX is not set
-# CONFIG_SCSI_PCMCIA is not set
-# CONFIG_SCSI_PPA is not set
-# CONFIG_SCSI_QLOGIC_1280 is not set
-# CONFIG_SCSI_QLOGIC_FC is not set
-# CONFIG_SCSI_QLOGIC_ISP is not set
-# CONFIG_SCSI_SYM53C8XX is not set
-# CONFIG_SCSI_SYM53C8XX_2 is not set
-# CONFIG_SCx200_WDT is not set
-# CONFIG_SIS900 is not set
-CONFIG_SOFT_WATCHDOG=m
-CONFIG_SOUND=m
-# CONFIG_SOUNDMODEM is not set
-# CONFIG_SOUND_AD1980 is not set
-# CONFIG_SOUND_ALI5455 is not set
-# CONFIG_SOUND_BT878 is not set
-# CONFIG_SOUND_CMPCI is not set
-# CONFIG_SOUND_CS4281 is not set
-# CONFIG_SOUND_EMU10K1 is not set
-# CONFIG_SOUND_ES1370 is not set
-# CONFIG_SOUND_ES1371 is not set
-# CONFIG_SOUND_ESSSOLO1 is not set
-# CONFIG_SOUND_FORTE is not set
-# CONFIG_SOUND_FUSION is not set
-# CONFIG_SOUND_ICH is not set
-# CONFIG_SOUND_MAESTRO is not set
-# CONFIG_SOUND_MAESTRO3 is not set
-# CONFIG_SOUND_MSNDCLAS is not set
-# CONFIG_SOUND_MSNDPIN is not set
-# CONFIG_SOUND_OSS is not set
-# CONFIG_SOUND_RME96XX is not set
-# CONFIG_SOUND_SONICVIBES is not set
-# CONFIG_SOUND_TRIDENT is not set
-# CONFIG_SOUND_TVMIXER is not set
-# CONFIG_SOUND_VIA82CXXX is not set
-# CONFIG_SOUND_WM97XX is not set
-# CONFIG_SUNDANCE is not set
-# CONFIG_SUNDANCE_MMIO is not set
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_TCIC is not set
-# CONFIG_TIPAR is not set
-# CONFIG_TLAN is not set
-# CONFIG_TMD_HERMES is not set
-# CONFIG_TULIP is not set
-# CONFIG_TUNER_3036 is not set
-CONFIG_USB=m
-CONFIG_USB_ACM=m
-# CONFIG_USB_AIPTEK is not set
-CONFIG_USB_AUDIO=m
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_BRLVGER is not set
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_CDCETHER is not set
-# CONFIG_USB_DABUSB is not set
-# CONFIG_USB_DC2XX is not set
-# CONFIG_USB_DEBUG is not set
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_DSBR is not set
-CONFIG_USB_EHCI_HCD=m
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_HID is not set
-# CONFIG_USB_HIDDEV is not set
-# CONFIG_USB_HIDINPUT is not set
-# CONFIG_USB_HPUSBSCSI is not set
-# CONFIG_USB_IBMCAM is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_KBD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_KONICAWC is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-# CONFIG_USB_MIDI is not set
-# CONFIG_USB_MOUSE is not set
-CONFIG_USB_OHCI=m
-# CONFIG_USB_OV511 is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_POWERMATE is not set
-CONFIG_USB_PRINTER=m
-CONFIG_USB_PWC=m
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_SCANNER is not set
-# CONFIG_USB_SE401 is not set
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_BELKIN=m
-# CONFIG_USB_SERIAL_CYBERJACK is not set
-# CONFIG_USB_SERIAL_DEBUG is not set
-# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
-# CONFIG_USB_SERIAL_EDGEPORT is not set
-# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
-# CONFIG_USB_SERIAL_EMPEG is not set
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_IPAQ is not set
-# CONFIG_USB_SERIAL_IR is not set
-CONFIG_USB_SERIAL_KEYSPAN=m
-CONFIG_USB_SERIAL_KEYSPAN_MPR=y
-# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
-CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
-CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
-CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
-# CONFIG_USB_SERIAL_KLSI is not set
-# CONFIG_USB_SERIAL_KOBIL_SCT is not set
-CONFIG_USB_SERIAL_MCT_U232=m
-# CONFIG_USB_SERIAL_OMNINET is not set
-CONFIG_USB_SERIAL_PL2303=m
-CONFIG_USB_SERIAL_VISOR=m
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-# CONFIG_USB_SERIAL_XIRCOM is not set
-CONFIG_USB_STORAGE=m
-CONFIG_USB_STORAGE_DATAFAB=y
-# CONFIG_USB_STORAGE_DEBUG is not set
-CONFIG_USB_STORAGE_DPCM=y
-CONFIG_USB_STORAGE_FREECOM=y
-CONFIG_USB_STORAGE_HP8200e=y
-# CONFIG_USB_STORAGE_ISD200 is not set
-CONFIG_USB_STORAGE_JUMPSHOT=y
-CONFIG_USB_STORAGE_SDDR09=y
-CONFIG_USB_STORAGE_SDDR55=y
-# CONFIG_USB_STV680 is not set
-# CONFIG_USB_TIGL is not set
-CONFIG_USB_UHCI=m
-CONFIG_USB_UHCI_ALT=m
-# CONFIG_USB_USS720 is not set
-# CONFIG_USB_VICAM is not set
-# CONFIG_USB_W9968CF is not set
-# CONFIG_USB_WACOM is not set
-# CONFIG_VIA_RHINE is not set
-# CONFIG_VIA_RHINE_MMIO is not set
-# CONFIG_VIDEO_BT848 is not set
-# CONFIG_VIDEO_BWQCAM is not set
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_CQCAM is not set
-CONFIG_VIDEO_DEV=m
-# CONFIG_VIDEO_MEYE is not set
-# CONFIG_VIDEO_PMS is not set
-CONFIG_VIDEO_PROC_FS=y
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_VIDEO_STRADIS is not set
-# CONFIG_VIDEO_ZORAN is not set
-# CONFIG_VIDEO_ZORAN_BUZ is not set
-# CONFIG_VIDEO_ZORAN_DC10 is not set
-# CONFIG_VIDEO_ZORAN_LML33 is not set
-# CONFIG_VIDEO_ZR36120 is not set
-# CONFIG_W83877F_WDT is not set
-# CONFIG_WAFER_WDT is not set
-# CONFIG_WDC_ALI15X3 is not set
-# CONFIG_WDT is not set
-# CONFIG_WDTPCI is not set
-# CONFIG_WINBOND_840 is not set
-# CONFIG_YAM is not set
-CONFIG_USB_BLUETOOTH=n
--- /dev/null
+# CONFIG_60XX_WDT is not set
+# CONFIG_6PACK is not set
+# CONFIG_8139CP is not set
+# CONFIG_8139TOO is not set
+# CONFIG_8139TOO_8129 is not set
+# CONFIG_8139TOO_PIO is not set
+# CONFIG_8139TOO_TUNE_TWISTER is not set
+# CONFIG_8139_OLD_RX_RESET is not set
+# CONFIG_ACQUIRE_WDT is not set
+# CONFIG_ADAPTEC_STARFIRE is not set
+# CONFIG_ADVANTECH_WDT is not set
+# CONFIG_AIRO is not set
+# CONFIG_AIRO_CS is not set
+# CONFIG_ALIM1535_WDT is not set
+# CONFIG_ALIM7101_WDT is not set
+# CONFIG_AMD74XX_OVERRIDE is not set
+# CONFIG_AMD8111_ETH is not set
+# CONFIG_APRICOT is not set
+# CONFIG_ATM is not set
+CONFIG_AX25=m
+# CONFIG_AX25_DAMA_SLAVE is not set
+CONFIG_B44=y
+# CONFIG_BAYCOM_EPP is not set
+# CONFIG_BAYCOM_PAR is not set
+# CONFIG_BAYCOM_SER_FDX is not set
+# CONFIG_BAYCOM_SER_HDX is not set
+CONFIG_BCM4310=y
+CONFIG_BCM4704=y
+CONFIG_BCM4710=y
+CONFIG_BCM5365=y
+CONFIG_BCM947XX=y
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_BLK_DEV_ADMA100 is not set
+CONFIG_BLK_DEV_AEC62XX=m
+# CONFIG_BLK_DEV_ALI15X3 is not set
+# CONFIG_BLK_DEV_AMD74XX is not set
+# CONFIG_BLK_DEV_ATARAID is not set
+# CONFIG_BLK_DEV_ATARAID_HPT is not set
+# CONFIG_BLK_DEV_ATARAID_MEDLEY is not set
+# CONFIG_BLK_DEV_ATARAID_PDC is not set
+# CONFIG_BLK_DEV_ATARAID_SII is not set
+# CONFIG_BLK_DEV_ATIIXP is not set
+# CONFIG_BLK_DEV_CMD640 is not set
+# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
+# CONFIG_BLK_DEV_CMD64X is not set
+# CONFIG_BLK_DEV_CS5530 is not set
+# CONFIG_BLK_DEV_CY82C693 is not set
+# CONFIG_BLK_DEV_DELKIN is not set
+# CONFIG_BLK_DEV_GENERIC is not set
+# CONFIG_BLK_DEV_HD_IDE is not set
+# CONFIG_BLK_DEV_HPT34X is not set
+# CONFIG_BLK_DEV_HPT366 is not set
+CONFIG_BLK_DEV_IDE=m
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDECS is not set
+CONFIG_BLK_DEV_IDEDISK=m
+CONFIG_BLK_DEV_IDEDMA=y
+# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
+CONFIG_BLK_DEV_IDEDMA_PCI=y
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+CONFIG_BLK_DEV_IDEPCI=y
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDE_SATA is not set
+# CONFIG_BLK_DEV_ISAPNP is not set
+# CONFIG_BLK_DEV_NS87415 is not set
+CONFIG_BLK_DEV_OFFBOARD=y
+# CONFIG_BLK_DEV_OPTI621 is not set
+CONFIG_BLK_DEV_PDC202XX=y
+# CONFIG_BLK_DEV_PDC202XX_NEW is not set
+CONFIG_BLK_DEV_PDC202XX_OLD=m
+# CONFIG_BLK_DEV_PIIX is not set
+# CONFIG_BLK_DEV_RZ1000 is not set
+# CONFIG_BLK_DEV_SC1200 is not set
+# CONFIG_BLK_DEV_SIIMAGE is not set
+# CONFIG_BLK_DEV_SIS5513 is not set
+# CONFIG_BLK_DEV_SLC90E66 is not set
+# CONFIG_BLK_DEV_SVWKS is not set
+# CONFIG_BLK_DEV_TRIFLEX is not set
+# CONFIG_BLK_DEV_TRM290 is not set
+# CONFIG_BLK_DEV_VIA82CXXX is not set
+CONFIG_BLUEZ=m
+CONFIG_BLUEZ_BNEP=m
+CONFIG_BLUEZ_BNEP_MC_FILTER=y
+CONFIG_BLUEZ_BNEP_PROTO_FILTER=y
+# CONFIG_BLUEZ_HCIBFUSB is not set
+# CONFIG_BLUEZ_HCIBLUECARD is not set
+# CONFIG_BLUEZ_HCIBT3C is not set
+# CONFIG_BLUEZ_HCIBTUART is not set
+# CONFIG_BLUEZ_HCIDTL1 is not set
+CONFIG_BLUEZ_HCIUART=m
+CONFIG_BLUEZ_HCIUART_BCSP=y
+CONFIG_BLUEZ_HCIUART_BCSP_TXCRC=y
+CONFIG_BLUEZ_HCIUART_H4=y
+CONFIG_BLUEZ_HCIUSB=m
+CONFIG_BLUEZ_HCIUSB_SCO=y
+# CONFIG_BLUEZ_HCIVHCI is not set
+CONFIG_BLUEZ_L2CAP=m
+CONFIG_BLUEZ_RFCOMM=m
+CONFIG_BLUEZ_RFCOMM_TTY=y
+CONFIG_BLUEZ_SCO=m
+# CONFIG_BPQETHER is not set
+# CONFIG_BRIDGE_EBT_802_3 is not set
+# CONFIG_BRIDGE_EBT_AMONG is not set
+# CONFIG_BRIDGE_EBT_ARPF is not set
+# CONFIG_BRIDGE_EBT_ARPREPLY is not set
+# CONFIG_BRIDGE_EBT_BROUTE is not set
+# CONFIG_BRIDGE_EBT_DNAT is not set
+# CONFIG_BRIDGE_EBT_IPF is not set
+# CONFIG_BRIDGE_EBT_LIMIT is not set
+# CONFIG_BRIDGE_EBT_LOG is not set
+# CONFIG_BRIDGE_EBT_MARKF is not set
+# CONFIG_BRIDGE_EBT_MARK_T is not set
+# CONFIG_BRIDGE_EBT_PKTTYPE is not set
+# CONFIG_BRIDGE_EBT_REDIRECT is not set
+# CONFIG_BRIDGE_EBT_SNAT is not set
+# CONFIG_BRIDGE_EBT_STP is not set
+# CONFIG_BRIDGE_EBT_T_FILTER is not set
+# CONFIG_BRIDGE_EBT_T_NAT is not set
+# CONFIG_BRIDGE_EBT_VLANF is not set
+# CONFIG_BRIDGE_NF_EBTABLES is not set
+CONFIG_CARDBUS=y
+CONFIG_CMDLINE="root=/dev/mtdblock2 rootfstype=squashfs,jffs2 init=/etc/preinit noinitrd console=ttyS0,115200"
+# CONFIG_CMDLINE_BOOL is not set
+CONFIG_CRC32=y
+# CONFIG_CS89x0 is not set
+# CONFIG_DE4X5 is not set
+# CONFIG_DGRS is not set
+# CONFIG_DM9102 is not set
+# CONFIG_DMA_NONPCI is not set
+# CONFIG_E100 is not set
+# CONFIG_EEPRO100 is not set
+# CONFIG_EEPRO100_PIO is not set
+# CONFIG_EPIC100 is not set
+# CONFIG_ES3210 is not set
+# CONFIG_EUROTECH_WDT is not set
+# CONFIG_FEALNX is not set
+CONFIG_FILTER=y
+# CONFIG_FORCEDETH is not set
+CONFIG_HAMRADIO=y
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_HP100 is not set
+# CONFIG_HPT34X_AUTODMA is not set
+# CONFIG_I2C_PARPORT is not set
+# CONFIG_I2O is not set
+# CONFIG_I2O_BLOCK is not set
+# CONFIG_I2O_LAN is not set
+# CONFIG_I2O_PCI is not set
+# CONFIG_I2O_PROC is not set
+# CONFIG_I2O_SCSI is not set
+# CONFIG_I810_TCO is not set
+# CONFIG_I82092 is not set
+# CONFIG_I82365 is not set
+# CONFIG_IB700_WDT is not set
+CONFIG_IDE=m
+# CONFIG_IDEDISK_MULTI_MODE is not set
+CONFIG_IDEDISK_STROKE=y
+CONFIG_IDEDMA_AUTO=y
+CONFIG_IDEDMA_IVB=y
+# CONFIG_IDEDMA_ONLYDISK is not set
+CONFIG_IDEDMA_PCI_AUTO=y
+# CONFIG_IDEDMA_PCI_WIP is not set
+# CONFIG_IDEPCI_SHARE_IRQ is not set
+# CONFIG_IDE_CHIPSETS is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+# CONFIG_IEEE1394 is not set
+CONFIG_IP6_NF_MATCH_LIMIT=m
+# CONFIG_IP_NF_MATCH_PHYSDEV is not set
+CONFIG_IP_VS=m
+# CONFIG_IP_VS_DEBUG is not set
+CONFIG_IP_VS_DH=m
+CONFIG_IP_VS_FTP=m
+CONFIG_IP_VS_LBLC=m
+CONFIG_IP_VS_LBLCR=m
+CONFIG_IP_VS_LC=m
+CONFIG_IP_VS_NQ=m
+CONFIG_IP_VS_RR=m
+CONFIG_IP_VS_SED=m
+CONFIG_IP_VS_SH=m
+CONFIG_IP_VS_TAB_BITS=12
+CONFIG_IP_VS_WLC=m
+CONFIG_IP_VS_WRR=m
+# CONFIG_LAN_SAA9730 is not set
+# CONFIG_LNE390 is not set
+CONFIG_LOG_BUF_SHIFT=0
+# CONFIG_LP_CONSOLE is not set
+# CONFIG_MACHZ_WDT is not set
+# CONFIG_MIDI_EMU10K1 is not set
+# CONFIG_MIDI_VIA82CXXX is not set
+CONFIG_MINIX_FS=m
+CONFIG_MIPS_BRCM=y
+# CONFIG_MIXCOMWD is not set
+CONFIG_MKISS=m
+CONFIG_MSDOS_FS=m
+CONFIG_MTD_BCM947XX=y
+CONFIG_MTD_CFI_SSTSTD=y
+CONFIG_MTD_SFLASH=y
+# CONFIG_NATSEMI is not set
+# CONFIG_NE2K_PCI is not set
+# CONFIG_NE3210 is not set
+# CONFIG_NETROM is not set
+CONFIG_NET_PCI=y
+# CONFIG_NET_PCMCIA is not set
+CONFIG_NET_SCH_ESFQ=m
+CONFIG_NET_WIRELESS=y
+CONFIG_NEW_IRQ=y
+CONFIG_NEW_TIME_C=y
+CONFIG_NLS=y
+CONFIG_PARPORT=m
+# CONFIG_PARPORT_1284 is not set
+# CONFIG_PARPORT_AMIGA is not set
+# CONFIG_PARPORT_ATARI is not set
+# CONFIG_PARPORT_GSC is not set
+# CONFIG_PARPORT_IP22 is not set
+# CONFIG_PARPORT_MFC3 is not set
+# CONFIG_PARPORT_OTHER is not set
+# CONFIG_PARPORT_PC is not set
+CONFIG_PARPORT_SPLINK=m
+# CONFIG_PARPORT_SUNBPP is not set
+CONFIG_PCI=y
+CONFIG_PCI_AUTO=y
+# CONFIG_PCI_HERMES is not set
+# CONFIG_PCI_NAMES is not set
+# CONFIG_PCI_NEW is not set
+CONFIG_PCMCIA=m
+# CONFIG_PCMCIA_ATMEL is not set
+# CONFIG_PCMCIA_HERMES is not set
+CONFIG_PCMCIA_SERIAL_CS=m
+# CONFIG_PCNET32 is not set
+# CONFIG_PCWATCHDOG is not set
+CONFIG_PDC202XX_BURST=y
+# CONFIG_PDC202XX_FORCE is not set
+# CONFIG_PLX_HERMES is not set
+CONFIG_PPDEV=m
+CONFIG_PRINTER=m
+# CONFIG_RADIO_GEMTEK_PCI is not set
+# CONFIG_RADIO_MAESTRO is not set
+# CONFIG_RADIO_MAXIRADIO is not set
+# CONFIG_RADIO_MIROPCM20 is not set
+# CONFIG_REMOTE_DEBUG is not set
+# CONFIG_ROSE is not set
+# CONFIG_SC1200_WDT is not set
+# CONFIG_SC520_WDT is not set
+# CONFIG_SCC_DELAY is not set
+# CONFIG_SCC_TRXECHO is not set
+# CONFIG_SCSI_CPQFCTS is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_IMM is not set
+# CONFIG_SCSI_NCR53C8XX is not set
+# CONFIG_SCSI_PCMCIA is not set
+# CONFIG_SCSI_PPA is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_QLOGIC_FC is not set
+# CONFIG_SCSI_QLOGIC_ISP is not set
+# CONFIG_SCSI_SYM53C8XX is not set
+# CONFIG_SCSI_SYM53C8XX_2 is not set
+# CONFIG_SCx200_WDT is not set
+# CONFIG_SIS900 is not set
+CONFIG_SOFT_WATCHDOG=m
+CONFIG_SOUND=m
+# CONFIG_SOUNDMODEM is not set
+# CONFIG_SOUND_AD1980 is not set
+# CONFIG_SOUND_ALI5455 is not set
+# CONFIG_SOUND_BT878 is not set
+# CONFIG_SOUND_CMPCI is not set
+# CONFIG_SOUND_CS4281 is not set
+# CONFIG_SOUND_EMU10K1 is not set
+# CONFIG_SOUND_ES1370 is not set
+# CONFIG_SOUND_ES1371 is not set
+# CONFIG_SOUND_ESSSOLO1 is not set
+# CONFIG_SOUND_FORTE is not set
+# CONFIG_SOUND_FUSION is not set
+# CONFIG_SOUND_ICH is not set
+# CONFIG_SOUND_MAESTRO is not set
+# CONFIG_SOUND_MAESTRO3 is not set
+# CONFIG_SOUND_MSNDCLAS is not set
+# CONFIG_SOUND_MSNDPIN is not set
+# CONFIG_SOUND_OSS is not set
+# CONFIG_SOUND_RME96XX is not set
+# CONFIG_SOUND_SONICVIBES is not set
+# CONFIG_SOUND_TRIDENT is not set
+# CONFIG_SOUND_TVMIXER is not set
+# CONFIG_SOUND_VIA82CXXX is not set
+# CONFIG_SOUND_WM97XX is not set
+# CONFIG_SUNDANCE is not set
+# CONFIG_SUNDANCE_MMIO is not set
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_TCIC is not set
+# CONFIG_TIPAR is not set
+# CONFIG_TLAN is not set
+# CONFIG_TMD_HERMES is not set
+# CONFIG_TULIP is not set
+# CONFIG_TUNER_3036 is not set
+CONFIG_USB=m
+CONFIG_USB_ACM=m
+# CONFIG_USB_AIPTEK is not set
+CONFIG_USB_AUDIO=m
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_BRLVGER is not set
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_CDCETHER is not set
+# CONFIG_USB_DABUSB is not set
+# CONFIG_USB_DC2XX is not set
+# CONFIG_USB_DEBUG is not set
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_DSBR is not set
+CONFIG_USB_EHCI_HCD=m
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_HID is not set
+# CONFIG_USB_HIDDEV is not set
+# CONFIG_USB_HIDINPUT is not set
+# CONFIG_USB_HPUSBSCSI is not set
+# CONFIG_USB_IBMCAM is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_KONICAWC is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+# CONFIG_USB_MIDI is not set
+# CONFIG_USB_MOUSE is not set
+CONFIG_USB_OHCI=m
+# CONFIG_USB_OV511 is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_POWERMATE is not set
+CONFIG_USB_PRINTER=m
+CONFIG_USB_PWC=m
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_SCANNER is not set
+# CONFIG_USB_SE401 is not set
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_BELKIN=m
+# CONFIG_USB_SERIAL_CYBERJACK is not set
+# CONFIG_USB_SERIAL_DEBUG is not set
+# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
+# CONFIG_USB_SERIAL_EDGEPORT is not set
+# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
+# CONFIG_USB_SERIAL_EMPEG is not set
+CONFIG_USB_SERIAL_FTDI_SIO=m
+CONFIG_USB_SERIAL_GENERIC=y
+# CONFIG_USB_SERIAL_IPAQ is not set
+# CONFIG_USB_SERIAL_IR is not set
+CONFIG_USB_SERIAL_KEYSPAN=m
+CONFIG_USB_SERIAL_KEYSPAN_MPR=y
+# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
+CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
+# CONFIG_USB_SERIAL_KLSI is not set
+# CONFIG_USB_SERIAL_KOBIL_SCT is not set
+CONFIG_USB_SERIAL_MCT_U232=m
+# CONFIG_USB_SERIAL_OMNINET is not set
+CONFIG_USB_SERIAL_PL2303=m
+CONFIG_USB_SERIAL_VISOR=m
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+# CONFIG_USB_SERIAL_XIRCOM is not set
+CONFIG_USB_STORAGE=m
+CONFIG_USB_STORAGE_DATAFAB=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+CONFIG_USB_STORAGE_DPCM=y
+CONFIG_USB_STORAGE_FREECOM=y
+CONFIG_USB_STORAGE_HP8200e=y
+# CONFIG_USB_STORAGE_ISD200 is not set
+CONFIG_USB_STORAGE_JUMPSHOT=y
+CONFIG_USB_STORAGE_SDDR09=y
+CONFIG_USB_STORAGE_SDDR55=y
+# CONFIG_USB_STV680 is not set
+# CONFIG_USB_TIGL is not set
+CONFIG_USB_UHCI=m
+CONFIG_USB_UHCI_ALT=m
+# CONFIG_USB_USS720 is not set
+# CONFIG_USB_VICAM is not set
+# CONFIG_USB_W9968CF is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_VIA_RHINE is not set
+# CONFIG_VIA_RHINE_MMIO is not set
+# CONFIG_VIDEO_BT848 is not set
+# CONFIG_VIDEO_BWQCAM is not set
+# CONFIG_VIDEO_CPIA is not set
+# CONFIG_VIDEO_CQCAM is not set
+CONFIG_VIDEO_DEV=m
+# CONFIG_VIDEO_MEYE is not set
+# CONFIG_VIDEO_PMS is not set
+CONFIG_VIDEO_PROC_FS=y
+# CONFIG_VIDEO_SAA5249 is not set
+# CONFIG_VIDEO_STRADIS is not set
+# CONFIG_VIDEO_ZORAN is not set
+# CONFIG_VIDEO_ZORAN_BUZ is not set
+# CONFIG_VIDEO_ZORAN_DC10 is not set
+# CONFIG_VIDEO_ZORAN_LML33 is not set
+# CONFIG_VIDEO_ZR36120 is not set
+# CONFIG_W83877F_WDT is not set
+# CONFIG_WAFER_WDT is not set
+# CONFIG_WDC_ALI15X3 is not set
+# CONFIG_WDT is not set
+# CONFIG_WDTPCI is not set
+# CONFIG_WINBOND_840 is not set
+# CONFIG_YAM is not set
export-objs := export.o
obj-y := prom.o setup.o time.o sbmips.o gpio.o
-obj-y += nvram.o nvram_linux.o sflash.o
-obj-y += sbutils.o bcmutils.o bcmsrom.o hndchipc.o
+obj-y += nvram.o nvram_linux.o cfe_env.o hndpmu.o
+obj-y += sbutils.o utils.o bcmsrom.o hndchipc.o
obj-$(CONFIG_PCI) += sbpci.o pcibios.o
obj-y += export.o
/*
- * Misc useful routines to access NIC SROM/OTP .
+ * Routines to access SPROM and to parse SROM/CIS variables.
*
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
* All Rights Reserved.
*
* THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
* KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
* SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
- * $Id: bcmsrom.c,v 1.1.1.14 2006/04/15 01:28:25 michael Exp $
+ * $Id$
*/
#include <typedefs.h>
#include <bcmdefs.h>
#include <osl.h>
-#include <bcmutils.h>
-#include <bcmsrom.h>
+#include <stdarg.h>
+#include <sbchipc.h>
#include <bcmdevs.h>
#include <bcmendian.h>
#include <sbpcmcia.h>
#include <pcicfg.h>
+#include <sbconfig.h>
#include <sbutils.h>
+#include <bcmsrom.h>
#include <bcmnvram.h>
+#include "utils.h"
/* debug/trace */
#if defined(WLTEST)
#define BS_ERROR(args) printf args
#else
#define BS_ERROR(args)
-#endif /* BCMDBG_ERR || WLTEST */
-
-#define VARS_MAX 4096 /* should be reduced */
+#endif
#define WRITE_ENABLE_DELAY 500 /* 500 ms after write enable/disable toggle */
#define WRITE_WORD_DELAY 20 /* 20 ms between each word write */
-static int initvars_srom_pci(void *sbh, void *curmap, char **vars, uint *count);
-static int initvars_cis_pcmcia(void *sbh, osl_t *osh, char **vars, uint *count);
-static int initvars_flash_sb(void *sbh, char **vars, uint *count);
-static int srom_parsecis(osl_t *osh, uint8 **pcis, uint ciscnt, char **vars, uint *count);
-static int sprom_cmd_pcmcia(osl_t *osh, uint8 cmd);
-static int sprom_read_pcmcia(osl_t *osh, uint16 addr, uint16 *data);
-static int sprom_write_pcmcia(osl_t *osh, uint16 addr, uint16 data);
-static int sprom_read_pci(osl_t *osh, uint16 *sprom, uint wordoff, uint16 *buf, uint nwords,
- bool check_crc);
+typedef struct varbuf
+{
+ char *buf; /* pointer to current position */
+ unsigned int size; /* current (residual) size in bytes */
+} varbuf_t;
+
+static int initvars_srom_sb (sb_t * sbh, osl_t * osh, void *curmap,
+ char **vars, uint * count);
+static void _initvars_srom_pci (uint8 sromrev, uint16 * srom, uint off,
+ varbuf_t * b);
+static int initvars_srom_pci (sb_t * sbh, void *curmap, char **vars,
+ uint * count);
+static int initvars_cis_pcmcia (sb_t * sbh, osl_t * osh, char **vars,
+ uint * count);
+#if !defined(BCMUSBDEV) && !defined(BCMSDIODEV)
+static int initvars_flash_sb (sb_t * sbh, char **vars, uint * count);
+#endif /* !BCMUSBDEV && !BCMSDIODEV */
+static int sprom_cmd_pcmcia (osl_t * osh, uint8 cmd);
+static int sprom_read_pcmcia (osl_t * osh, uint16 addr, uint16 * data);
+static int sprom_write_pcmcia (osl_t * osh, uint16 addr, uint16 data);
+static int sprom_read_pci (osl_t * osh, uint16 * sprom, uint wordoff,
+ uint16 * buf, uint nwords, bool check_crc);
+
+static int initvars_table (osl_t * osh, char *start, char *end, char **vars,
+ uint * count);
+static int initvars_flash (sb_t * sbh, osl_t * osh, char **vp, uint len);
+
+#ifdef BCMUSBDEV
+static int get_sb_pcmcia_srom (sb_t * sbh, osl_t * osh, uint8 * pcmregs,
+ uint boff, uint16 * srom, uint bsz);
+static int set_sb_pcmcia_srom (sb_t * sbh, osl_t * osh, uint8 * pcmregs,
+ uint boff, uint16 * srom, uint bsz);
+static uint srom_size (sb_t * sbh, osl_t * osh);
+#endif /* def BCMUSBDEV */
+
+/* Initialization of varbuf structure */
+static void
+varbuf_init (varbuf_t * b, char *buf, uint size)
+{
+ b->size = size;
+ b->buf = buf;
+}
-static int initvars_table(osl_t *osh, char *start, char *end, char **vars, uint *count);
-static int initvars_flash(osl_t *osh, char **vp, uint len, char *devpath);
+/* append a null terminated var=value string */
+static int
+varbuf_append (varbuf_t * b, const char *fmt, ...)
+{
+ va_list ap;
+ int r;
+
+ if (b->size < 2)
+ return 0;
+
+ va_start (ap, fmt);
+ r = vsnprintf (b->buf, b->size, fmt, ap);
+ va_end (ap);
+
+ /* C99 snprintf behavior returns r >= size on overflow,
+ * others return -1 on overflow.
+ * All return -1 on format error.
+ * We need to leave room for 2 null terminations, one for the current var
+ * string, and one for final null of the var table. So check that the
+ * strlen written, r, leaves room for 2 chars.
+ */
+ if ((r == -1) || (r > (int) (b->size - 2)))
+ {
+ b->size = 0;
+ return 0;
+ }
+
+ /* skip over this string's null termination */
+ r++;
+ b->size -= r;
+ b->buf += r;
+
+ return r;
+}
/*
* Initialize local vars from the right source for this platform.
* Return 0 on success, nonzero on error.
*/
int
-srom_var_init(void *sbh, uint bustype, void *curmap, osl_t *osh, char **vars, uint *count)
+BCMINITFN (srom_var_init) (sb_t * sbh, uint bustype, void *curmap,
+ osl_t * osh, char **vars, uint * count)
{
- ASSERT(bustype == BUSTYPE(bustype));
- if (vars == NULL || count == NULL)
- return (0);
+ ASSERT (bustype == BUSTYPE (bustype));
+ if (vars == NULL || count == NULL)
+ return (0);
- switch (BUSTYPE(bustype)) {
- case SB_BUS:
- case JTAG_BUS:
- return initvars_flash_sb(sbh, vars, count);
+ *vars = NULL;
+ *count = 0;
- case PCI_BUS:
- ASSERT(curmap); /* can not be NULL */
- return initvars_srom_pci(sbh, curmap, vars, count);
+ switch (BUSTYPE (bustype))
+ {
+ case SB_BUS:
+ case JTAG_BUS:
+ return initvars_srom_sb (sbh, osh, curmap, vars, count);
- case PCMCIA_BUS:
- return initvars_cis_pcmcia(sbh, osh, vars, count);
+ case PCI_BUS:
+ ASSERT (curmap); /* can not be NULL */
+ return initvars_srom_pci (sbh, curmap, vars, count);
+ case PCMCIA_BUS:
+ return initvars_cis_pcmcia (sbh, osh, vars, count);
- default:
- ASSERT(0);
- }
- return (-1);
+
+ default:
+ ASSERT (0);
+ }
+ return (-1);
}
/* support only 16-bit word read from srom */
int
-srom_read(uint bustype, void *curmap, osl_t *osh, uint byteoff, uint nbytes, uint16 *buf)
+srom_read (sb_t * sbh, uint bustype, void *curmap, osl_t * osh,
+ uint byteoff, uint nbytes, uint16 * buf)
{
- void *srom;
- uint i, off, nw;
-
- ASSERT(bustype == BUSTYPE(bustype));
-
- /* check input - 16-bit access only */
- if (byteoff & 1 || nbytes & 1 || (byteoff + nbytes) > (SPROM_SIZE * 2))
- return 1;
-
- off = byteoff / 2;
- nw = nbytes / 2;
-
- if (BUSTYPE(bustype) == PCI_BUS) {
- if (!curmap)
- return 1;
- srom = (uchar*)curmap + PCI_BAR0_SPROM_OFFSET;
- if (sprom_read_pci(osh, srom, off, buf, nw, FALSE))
- return 1;
- } else if (BUSTYPE(bustype) == PCMCIA_BUS) {
- for (i = 0; i < nw; i++) {
- if (sprom_read_pcmcia(osh, (uint16)(off + i), (uint16*)(buf + i)))
- return 1;
- }
- } else {
- return 1;
+ void *srom;
+ uint i, off, nw;
+
+ ASSERT (bustype == BUSTYPE (bustype));
+
+ /* check input - 16-bit access only */
+ if (byteoff & 1 || nbytes & 1 || (byteoff + nbytes) > (SPROM_SIZE * 2))
+ return 1;
+
+ off = byteoff / 2;
+ nw = nbytes / 2;
+
+ if (BUSTYPE (bustype) == PCI_BUS)
+ {
+ if (!curmap)
+ return 1;
+ srom = (uchar *) curmap + PCI_BAR0_SPROM_OFFSET;
+ if (sprom_read_pci (osh, srom, off, buf, nw, FALSE))
+ return 1;
+ }
+ else if (BUSTYPE (bustype) == PCMCIA_BUS)
+ {
+ for (i = 0; i < nw; i++)
+ {
+ if (sprom_read_pcmcia
+ (osh, (uint16) (off + i), (uint16 *) (buf + i)))
+ return 1;
}
+ }
+ else if (BUSTYPE (bustype) == SB_BUS)
+ {
+#ifdef BCMUSBDEV
+ if (SPROMBUS == PCMCIA_BUS)
+ {
+ uint origidx;
+ void *regs;
+ int rc;
+ bool wasup;
+
+ origidx = sb_coreidx (sbh);
+ regs = sb_setcore (sbh, SB_PCMCIA, 0);
+ ASSERT (regs != NULL);
+
+ if (!(wasup = sb_iscoreup (sbh)))
+ sb_core_reset (sbh, 0, 0);
+
+ rc = get_sb_pcmcia_srom (sbh, osh, regs, byteoff, buf, nbytes);
+
+ if (!wasup)
+ sb_core_disable (sbh, 0);
+
+ sb_setcoreidx (sbh, origidx);
+ return rc;
+ }
+#endif /* def BCMUSBDEV */
- return 0;
+ return 1;
+ }
+ else
+ {
+ return 1;
+ }
+
+ return 0;
}
/* support only 16-bit word write into srom */
int
-srom_write(uint bustype, void *curmap, osl_t *osh, uint byteoff, uint nbytes, uint16 *buf)
+srom_write (sb_t * sbh, uint bustype, void *curmap, osl_t * osh,
+ uint byteoff, uint nbytes, uint16 * buf)
{
- uint16 *srom;
- uint i, nw, crc_range;
- uint16 image[SPROM_SIZE];
- uint8 crc;
- volatile uint32 val32;
-
- ASSERT(bustype == BUSTYPE(bustype));
-
- /* check input - 16-bit access only */
- if (byteoff & 1 || nbytes & 1 || (byteoff + nbytes) > (SPROM_SIZE * 2))
- return 1;
-
- /* Are we writing the whole thing at once? */
- if ((byteoff == 0) &&
- ((nbytes == SPROM_SIZE) ||
- (nbytes == (SPROM_CRC_RANGE * 2)) ||
- (nbytes == (SROM4_WORDS * 2)))) {
- crc_range = nbytes;
- bcopy((void*)buf, (void*)image, nbytes);
- nw = nbytes / 2;
- } else {
- if ((BUSTYPE(bustype) == PCMCIA_BUS) || (BUSTYPE(bustype) == SDIO_BUS))
- crc_range = SPROM_SIZE;
- else
- crc_range = SPROM_CRC_RANGE * 2; /* Tentative */
-
- nw = crc_range / 2;
- /* read first 64 words from srom */
- if (srom_read(bustype, curmap, osh, 0, crc_range, image))
- return 1;
- if (image[SROM4_SIGN] == SROM4_SIGNATURE) {
- crc_range = SROM4_WORDS;
- nw = crc_range / 2;
- if (srom_read(bustype, curmap, osh, 0, crc_range, image))
- return 1;
- }
- /* make changes */
- bcopy((void*)buf, (void*)&image[byteoff / 2], nbytes);
+ uint16 *srom;
+ uint i, nw, crc_range;
+ uint16 image[SPROM_SIZE];
+ uint8 crc;
+ volatile uint32 val32;
+
+ ASSERT (bustype == BUSTYPE (bustype));
+
+ /* check input - 16-bit access only */
+ if ((byteoff & 1) || (nbytes & 1))
+ return 1;
+
+ if (byteoff == 0x55aa)
+ {
+ /* Erase request */
+ crc_range = 0;
+ memset ((void *) image, 0xff, nbytes);
+ nw = nbytes / 2;
+ }
+ else if ((byteoff == 0) &&
+ ((nbytes == SPROM_SIZE * 2) ||
+ (nbytes == (SPROM_CRC_RANGE * 2)) ||
+ (nbytes == (SROM4_WORDS * 2))))
+ {
+ /* Are we writing the whole thing at once? */
+ crc_range = nbytes;
+ bcopy ((void *) buf, (void *) image, nbytes);
+ nw = nbytes / 2;
+ }
+ else
+ {
+ if ((byteoff + nbytes) > (SPROM_SIZE * 2))
+ return 1;
+
+ if (BUSTYPE (bustype) == PCMCIA_BUS)
+ {
+ crc_range = SPROM_SIZE * 2;
+ }
+ else
+ {
+ crc_range = SPROM_CRC_RANGE * 2; /* Tentative */
}
- /* calculate crc */
- htol16_buf(image, crc_range);
- crc = ~hndcrc8((uint8 *)image, crc_range - 1, CRC8_INIT_VALUE);
- ltoh16_buf(image, crc_range);
- image[(crc_range / 2) - 1] = (crc << 8) | (image[(crc_range / 2) - 1] & 0xff);
-
- if (BUSTYPE(bustype) == PCI_BUS) {
- srom = (uint16*)((uchar*)curmap + PCI_BAR0_SPROM_OFFSET);
- /* enable writes to the SPROM */
- val32 = OSL_PCI_READ_CONFIG(osh, PCI_SPROM_CONTROL, sizeof(uint32));
- val32 |= SPROM_WRITEEN;
- OSL_PCI_WRITE_CONFIG(osh, PCI_SPROM_CONTROL, sizeof(uint32), val32);
- bcm_mdelay(WRITE_ENABLE_DELAY);
- /* write srom */
- for (i = 0; i < nw; i++) {
- W_REG(osh, &srom[i], image[i]);
- bcm_mdelay(WRITE_WORD_DELAY);
- }
- /* disable writes to the SPROM */
- OSL_PCI_WRITE_CONFIG(osh, PCI_SPROM_CONTROL, sizeof(uint32), val32 &
- ~SPROM_WRITEEN);
- } else if (BUSTYPE(bustype) == PCMCIA_BUS) {
- /* enable writes to the SPROM */
- if (sprom_cmd_pcmcia(osh, SROM_WEN))
- return 1;
- bcm_mdelay(WRITE_ENABLE_DELAY);
- /* write srom */
- for (i = 0; i < nw; i++) {
- sprom_write_pcmcia(osh, (uint16)(i), image[i]);
- bcm_mdelay(WRITE_WORD_DELAY);
- }
- /* disable writes to the SPROM */
- if (sprom_cmd_pcmcia(osh, SROM_WDS))
- return 1;
- } else {
- return 1;
+ nw = crc_range / 2;
+ /* read first 64 words from srom */
+ if (srom_read (sbh, bustype, curmap, osh, 0, crc_range, image))
+ return 1;
+ if (image[SROM4_SIGN] == SROM4_SIGNATURE)
+ {
+ nw = SROM4_WORDS;
+ crc_range = nw * 2;
+ if (srom_read (sbh, bustype, curmap, osh, 0, crc_range, image))
+ return 1;
+ }
+ /* make changes */
+ bcopy ((void *) buf, (void *) &image[byteoff / 2], nbytes);
+ }
+
+ if (crc_range)
+ {
+ /* calculate crc */
+ htol16_buf (image, crc_range);
+ crc = ~hndcrc8 ((uint8 *) image, crc_range - 1, 0xff);
+ ltoh16_buf (image, crc_range);
+ image[nw - 1] = (crc << 8) | (image[nw - 1] & 0xff);
+ }
+
+ if (BUSTYPE (bustype) == PCI_BUS)
+ {
+ srom = (uint16 *) ((uchar *) curmap + PCI_BAR0_SPROM_OFFSET);
+ /* enable writes to the SPROM */
+ val32 = OSL_PCI_READ_CONFIG (osh, PCI_SPROM_CONTROL, sizeof (uint32));
+ val32 |= SPROM_WRITEEN;
+ OSL_PCI_WRITE_CONFIG (osh, PCI_SPROM_CONTROL, sizeof (uint32), val32);
+ bcm_mdelay (WRITE_ENABLE_DELAY);
+ /* write srom */
+ for (i = 0; i < nw; i++)
+ {
+ W_REG (osh, &srom[i], image[i]);
+ bcm_mdelay (WRITE_WORD_DELAY);
+ }
+ /* disable writes to the SPROM */
+ OSL_PCI_WRITE_CONFIG (osh, PCI_SPROM_CONTROL, sizeof (uint32), val32 &
+ ~SPROM_WRITEEN);
+ }
+ else if (BUSTYPE (bustype) == PCMCIA_BUS)
+ {
+ /* enable writes to the SPROM */
+ if (sprom_cmd_pcmcia (osh, SROM_WEN))
+ return 1;
+ bcm_mdelay (WRITE_ENABLE_DELAY);
+ /* write srom */
+ for (i = 0; i < nw; i++)
+ {
+ sprom_write_pcmcia (osh, (uint16) (i), image[i]);
+ bcm_mdelay (WRITE_WORD_DELAY);
}
+ /* disable writes to the SPROM */
+ if (sprom_cmd_pcmcia (osh, SROM_WDS))
+ return 1;
+ }
+ else if (BUSTYPE (bustype) == SB_BUS)
+ {
+#ifdef BCMUSBDEV
+ if (SPROMBUS == PCMCIA_BUS)
+ {
+ uint origidx;
+ void *regs;
+ int rc;
+ bool wasup;
+
+ origidx = sb_coreidx (sbh);
+ regs = sb_setcore (sbh, SB_PCMCIA, 0);
+ ASSERT (regs != NULL);
+
+ if (!(wasup = sb_iscoreup (sbh)))
+ sb_core_reset (sbh, 0, 0);
+
+ rc = set_sb_pcmcia_srom (sbh, osh, regs, byteoff, buf, nbytes);
+
+ if (!wasup)
+ sb_core_disable (sbh, 0);
+
+ sb_setcoreidx (sbh, origidx);
+ return rc;
+ }
+#endif /* def BCMUSBDEV */
+ return 1;
+ }
+ else
+ {
+ return 1;
+ }
+
+ bcm_mdelay (WRITE_ENABLE_DELAY);
+ return 0;
+}
+
+#ifdef BCMUSBDEV
+#define SB_PCMCIA_READ(osh, regs, fcr) \
+ R_REG(osh, (volatile uint8 *)(regs) + 0x600 + (fcr) - 0x700 / 2)
+#define SB_PCMCIA_WRITE(osh, regs, fcr, v) \
+ W_REG(osh, (volatile uint8 *)(regs) + 0x600 + (fcr) - 0x700 / 2, v)
+
+/* set PCMCIA srom command register */
+static int
+srom_cmd_sb_pcmcia (osl_t * osh, uint8 * pcmregs, uint8 cmd)
+{
+ uint8 status = 0;
+ uint wait_cnt = 0;
+
+ /* write srom command register */
+ SB_PCMCIA_WRITE (osh, pcmregs, SROM_CS, cmd);
- bcm_mdelay(WRITE_ENABLE_DELAY);
+ /* wait status */
+ while (++wait_cnt < 1000000)
+ {
+ status = SB_PCMCIA_READ (osh, pcmregs, SROM_CS);
+ if (status & SROM_DONE)
return 0;
+ OSL_DELAY (1);
+ }
+
+ BS_ERROR (("sr_cmd: Give up after %d tries, stat = 0x%x\n", wait_cnt,
+ status));
+ return 1;
}
+/* read a word from the PCMCIA srom over SB */
+static int
+srom_read_sb_pcmcia (osl_t * osh, uint8 * pcmregs, uint16 addr, uint16 * data)
+{
+ uint8 addr_l, addr_h, data_l, data_h;
+
+ addr_l = (uint8) ((addr * 2) & 0xff);
+ addr_h = (uint8) (((addr * 2) >> 8) & 0xff);
+
+ /* set address */
+ SB_PCMCIA_WRITE (osh, pcmregs, SROM_ADDRH, addr_h);
+ SB_PCMCIA_WRITE (osh, pcmregs, SROM_ADDRL, addr_l);
+ /* do read */
+ if (srom_cmd_sb_pcmcia (osh, pcmregs, SROM_READ))
+ return 1;
+
+ /* read data */
+ data_h = SB_PCMCIA_READ (osh, pcmregs, SROM_DATAH);
+ data_l = SB_PCMCIA_READ (osh, pcmregs, SROM_DATAL);
+ *data = ((uint16) data_h << 8) | data_l;
+
+ return 0;
+}
+
+/* write a word to the PCMCIA srom over SB */
static int
-srom_parsecis(osl_t *osh, uint8 **pcis, uint ciscnt, char **vars, uint *count)
+srom_write_sb_pcmcia (osl_t * osh, uint8 * pcmregs, uint16 addr, uint16 data)
{
- char eabuf[32];
- char *vp, *base;
- uint8 *cis, tup, tlen, sromrev = 1;
- int i, j;
- uint varsize;
- bool ag_init = FALSE;
- uint32 w32;
-
- ASSERT(vars);
- ASSERT(count);
-
- base = vp = MALLOC(osh, VARS_MAX);
- ASSERT(vp);
- if (!vp)
- return -2;
-
- while (ciscnt--) {
- cis = *pcis++;
- i = 0;
- do {
- tup = cis[i++];
- tlen = cis[i++];
- if ((i + tlen) >= CIS_SIZE)
- break;
-
- switch (tup) {
- case CISTPL_MANFID:
- vp += sprintf(vp, "manfid=%d", (cis[i + 1] << 8) + cis[i]);
- vp++;
- vp += sprintf(vp, "prodid=%d", (cis[i + 3] << 8) + cis[i + 2]);
- vp++;
- break;
-
- case CISTPL_FUNCE:
- switch (cis[i]) {
- case LAN_NID:
- ASSERT(cis[i + 1] == 6);
- bcm_ether_ntoa((struct ether_addr *)&cis[i + 2], eabuf);
- vp += sprintf(vp, "il0macaddr=%s", eabuf);
- vp++;
- break;
- case 1: /* SDIO Extended Data */
- vp += sprintf(vp, "sdmaxblk=%d",
- (cis[i + 13] << 8) | cis[i + 12]);
- vp++;
- break;
- }
- break;
-
- case CISTPL_CFTABLE:
- vp += sprintf(vp, "regwindowsz=%d", (cis[i + 7] << 8) | cis[i + 6]);
- vp++;
- break;
-
- case CISTPL_BRCM_HNBU:
- switch (cis[i]) {
- case HNBU_SROMREV:
- sromrev = cis[i + 1];
- break;
-
- case HNBU_CHIPID:
- vp += sprintf(vp, "vendid=%d", (cis[i + 2] << 8) +
- cis[i + 1]);
- vp++;
- vp += sprintf(vp, "devid=%d", (cis[i + 4] << 8) +
- cis[i + 3]);
- vp++;
- if (tlen == 7) {
- vp += sprintf(vp, "chiprev=%d",
- (cis[i + 6] << 8) + cis[i + 5]);
- vp++;
- }
- break;
-
- case HNBU_BOARDREV:
- vp += sprintf(vp, "boardrev=%d", cis[i + 1]);
- vp++;
- break;
-
- case HNBU_AA:
- vp += sprintf(vp, "aa2g=%d", cis[i + 1]);
- vp++;
- break;
-
- case HNBU_AG:
- vp += sprintf(vp, "ag0=%d", cis[i + 1]);
- vp++;
- ag_init = TRUE;
- break;
-
- case HNBU_CC:
- ASSERT(sromrev == 1);
- vp += sprintf(vp, "cc=%d", cis[i + 1]);
- vp++;
- break;
-
- case HNBU_PAPARMS:
- if (tlen == 2) {
- ASSERT(sromrev == 1);
- vp += sprintf(vp, "pa0maxpwr=%d", cis[i + 1]);
- vp++;
- } else if (tlen >= 9) {
- if (tlen == 10) {
- ASSERT(sromrev == 2);
- vp += sprintf(vp, "opo=%d", cis[i + 9]);
- vp++;
- } else
- ASSERT(tlen == 9);
-
- for (j = 0; j < 3; j++) {
- vp += sprintf(vp, "pa0b%d=%d", j,
- (cis[i + (j * 2) + 2] << 8) +
- cis[i + (j * 2) + 1]);
- vp++;
- }
- vp += sprintf(vp, "pa0itssit=%d", cis[i + 7]);
- vp++;
- vp += sprintf(vp, "pa0maxpwr=%d", cis[i + 8]);
- vp++;
- } else
- ASSERT(tlen >= 9);
- break;
-
- case HNBU_OEM:
- ASSERT(sromrev == 1);
- vp += sprintf(vp, "oem=%02x%02x%02x%02x%02x%02x%02x%02x",
- cis[i + 1], cis[i + 2],
- cis[i + 3], cis[i + 4],
- cis[i + 5], cis[i + 6],
- cis[i + 7], cis[i + 8]);
- vp++;
- break;
-
- case HNBU_BOARDFLAGS:
- w32 = (cis[i + 2] << 8) + cis[i + 1];
- if (tlen == 5)
- w32 |= (cis[i + 4] << 24) + (cis[i + 3] << 16);
- vp += sprintf(vp, "boardflags=0x%x", w32);
- vp++;
- break;
-
- case HNBU_LEDS:
- if (cis[i + 1] != 0xff) {
- vp += sprintf(vp, "ledbh0=%d", cis[i + 1]);
- vp++;
- }
- if (cis[i + 2] != 0xff) {
- vp += sprintf(vp, "ledbh1=%d", cis[i + 2]);
- vp++;
- }
- if (cis[i + 3] != 0xff) {
- vp += sprintf(vp, "ledbh2=%d", cis[i + 3]);
- vp++;
- }
- if (cis[i + 4] != 0xff) {
- vp += sprintf(vp, "ledbh3=%d", cis[i + 4]);
- vp++;
- }
- break;
-
- case HNBU_CCODE:
- {
- char str[3];
- ASSERT(sromrev > 1);
- str[0] = cis[i + 1];
- str[1] = cis[i + 2];
- str[2] = 0;
- vp += sprintf(vp, "ccode=%s", str);
- vp++;
- vp += sprintf(vp, "cctl=0x%x", cis[i + 3]);
- vp++;
- break;
- }
-
- case HNBU_CCKPO:
- ASSERT(sromrev > 2);
- vp += sprintf(vp, "cckpo=0x%x",
- (cis[i + 2] << 8) | cis[i + 1]);
- vp++;
- break;
-
- case HNBU_OFDMPO:
- ASSERT(sromrev > 2);
- vp += sprintf(vp, "ofdmpo=0x%x",
- (cis[i + 4] << 24) |
- (cis[i + 3] << 16) |
- (cis[i + 2] << 8) |
- cis[i + 1]);
- vp++;
- break;
- }
- break;
+ uint8 addr_l, addr_h, data_l, data_h;
+ int rc;
- }
- i += tlen;
- } while (tup != 0xff);
+ addr_l = (uint8) ((addr * 2) & 0xff);
+ addr_h = (uint8) (((addr * 2) >> 8) & 0xff);
+
+ /* set address */
+ SB_PCMCIA_WRITE (osh, pcmregs, SROM_ADDRH, addr_h);
+ SB_PCMCIA_WRITE (osh, pcmregs, SROM_ADDRL, addr_l);
+
+ data_l = (uint8) (data & 0xff);
+ data_h = (uint8) ((data >> 8) & 0xff);
+
+ /* write data */
+ SB_PCMCIA_WRITE (osh, pcmregs, SROM_DATAH, data_h);
+ SB_PCMCIA_WRITE (osh, pcmregs, SROM_DATAL, data_l);
+
+ /* do write */
+ rc = srom_cmd_sb_pcmcia (osh, pcmregs, SROM_WRITE);
+ OSL_DELAY (20000);
+ return rc;
+}
+
+/*
+ * Read the srom for the pcmcia-srom over sb case.
+ * Return 0 on success, nonzero on error.
+ */
+static int
+get_sb_pcmcia_srom (sb_t * sbh, osl_t * osh, uint8 * pcmregs,
+ uint boff, uint16 * srom, uint bsz)
+{
+ uint i, nw, woff, wsz;
+ int err = 0;
+
+ /* read must be at word boundary */
+ ASSERT ((boff & 1) == 0 && (bsz & 1) == 0);
+
+ /* read sprom size and validate the parms */
+ if ((nw = srom_size (sbh, osh)) == 0)
+ {
+ BS_ERROR (("get_sb_pcmcia_srom: sprom size unknown\n"));
+ err = -1;
+ goto out;
+ }
+ if (boff + bsz > 2 * nw)
+ {
+ BS_ERROR (("get_sb_pcmcia_srom: sprom size exceeded\n"));
+ err = -2;
+ goto out;
+ }
+
+ /* read in sprom contents */
+ for (woff = boff / 2, wsz = bsz / 2, i = 0;
+ woff < nw && i < wsz; woff++, i++)
+ {
+ if (srom_read_sb_pcmcia (osh, pcmregs, (uint16) woff, &srom[i]))
+ {
+ BS_ERROR (("get_sb_pcmcia_srom: sprom read failed\n"));
+ err = -3;
+ goto out;
}
+ }
- /* Set the srom version */
- vp += sprintf(vp, "sromrev=%d", sromrev);
- vp++;
+out:
+ return err;
+}
- /* if there is no antenna gain field, set default */
- if (ag_init == FALSE) {
- ASSERT(sromrev == 1);
- vp += sprintf(vp, "ag0=%d", 0xff);
- vp++;
+/*
+ * Write the srom for the pcmcia-srom over sb case.
+ * Return 0 on success, nonzero on error.
+ */
+static int
+set_sb_pcmcia_srom (sb_t * sbh, osl_t * osh, uint8 * pcmregs,
+ uint boff, uint16 * srom, uint bsz)
+{
+ uint i, nw, woff, wsz;
+ uint16 word;
+ uint8 crc;
+ int err = 0;
+
+ /* write must be at word boundary */
+ ASSERT ((boff & 1) == 0 && (bsz & 1) == 0);
+
+ /* read sprom size and validate the parms */
+ if ((nw = srom_size (sbh, osh)) == 0)
+ {
+ BS_ERROR (("set_sb_pcmcia_srom: sprom size unknown\n"));
+ err = -1;
+ goto out;
+ }
+ if (boff + bsz > 2 * nw)
+ {
+ BS_ERROR (("set_sb_pcmcia_srom: sprom size exceeded\n"));
+ err = -2;
+ goto out;
+ }
+
+ /* enable write */
+ if (srom_cmd_sb_pcmcia (osh, pcmregs, SROM_WEN))
+ {
+ BS_ERROR (("set_sb_pcmcia_srom: sprom wen failed\n"));
+ err = -3;
+ goto out;
+ }
+
+ /* write buffer to sprom */
+ for (woff = boff / 2, wsz = bsz / 2, i = 0;
+ woff < nw && i < wsz; woff++, i++)
+ {
+ if (srom_write_sb_pcmcia (osh, pcmregs, (uint16) woff, srom[i]))
+ {
+ BS_ERROR (("set_sb_pcmcia_srom: sprom write failed\n"));
+ err = -4;
+ goto out;
+ }
+ }
+
+ /* fix crc */
+ crc = 0xff;
+ for (woff = 0; woff < nw; woff++)
+ {
+ if (srom_read_sb_pcmcia (osh, pcmregs, (uint16) woff, &word))
+ {
+ BS_ERROR (("set_sb_pcmcia_srom: sprom fix crc read failed\n"));
+ err = -5;
+ goto out;
}
+ word = htol16 (word);
+ crc = hndcrc8 ((uint8 *) & word, woff != nw - 1 ? 2 : 1, crc);
+ }
+ word = (~crc << 8) + (ltoh16 (word) & 0xff);
+ if (srom_write_sb_pcmcia (osh, pcmregs, (uint16) (woff - 1), word))
+ {
+ BS_ERROR (("set_sb_pcmcia_srom: sprom fix crc write failed\n"));
+ err = -6;
+ goto out;
+ }
+
+ /* disable write */
+ if (srom_cmd_sb_pcmcia (osh, pcmregs, SROM_WDS))
+ {
+ BS_ERROR (("set_sb_pcmcia_srom: sprom wds failed\n"));
+ err = -7;
+ goto out;
+ }
+
+out:
+ return err;
+}
+#endif /* def BCMUSBDEV */
- /* final nullbyte terminator */
- *vp++ = '\0';
- varsize = (uint)(vp - base);
-
- ASSERT((vp - base) < VARS_MAX);
-
- if (varsize == VARS_MAX) {
- *vars = base;
- } else {
- vp = MALLOC(osh, varsize);
- ASSERT(vp);
- if (vp)
- bcopy(base, vp, varsize);
- MFREE(osh, base, VARS_MAX);
- *vars = vp;
- if (!vp) {
- *count = 0;
- return -2;
+int
+srom_parsecis (osl_t * osh, uint8 * pcis[], uint ciscnt, char **vars,
+ uint * count)
+{
+ char eabuf[32];
+ char *base;
+ varbuf_t b;
+ uint8 *cis, tup, tlen, sromrev = 1;
+ int i, j;
+ uint varsize;
+ bool ag_init = FALSE;
+ uint32 w32;
+ uint funcid;
+ uint cisnum;
+ int32 boardnum = -1;
+
+ ASSERT (vars);
+ ASSERT (count);
+
+ base = MALLOC (osh, MAXSZ_NVRAM_VARS);
+ ASSERT (base);
+ if (!base)
+ return -2;
+
+ varbuf_init (&b, base, MAXSZ_NVRAM_VARS);
+
+ eabuf[0] = '\0';
+ for (cisnum = 0; cisnum < ciscnt; cisnum++)
+ {
+ cis = *pcis++;
+ i = 0;
+ funcid = 0;
+ do
+ {
+ tup = cis[i++];
+ tlen = cis[i++];
+ if ((i + tlen) >= CIS_SIZE)
+ break;
+
+ switch (tup)
+ {
+ case CISTPL_VERS_1:
+ /* assume the strings are good if the version field checks out */
+ if (((cis[i + 1] << 8) + cis[i]) >= 0x0008)
+ {
+ varbuf_append (&b, "manf=%s", &cis[i + 2]);
+ varbuf_append (&b, "productname=%s",
+ &cis[i + 3 + strlen ((char *) &cis[i + 2])]);
+ break;
}
+
+ case CISTPL_MANFID:
+ varbuf_append (&b, "manfid=0x%x", (cis[i + 1] << 8) + cis[i]);
+ varbuf_append (&b, "prodid=0x%x",
+ (cis[i + 3] << 8) + cis[i + 2]);
+ break;
+
+ case CISTPL_FUNCID:
+ funcid = cis[i];
+ break;
+
+ case CISTPL_FUNCE:
+ switch (funcid)
+ {
+ default:
+ /* set macaddr if HNBU_MACADDR not seen yet */
+ if (eabuf[0] == '\0' && cis[i] == LAN_NID)
+ {
+ ASSERT (cis[i + 1] == ETHER_ADDR_LEN);
+ bcm_ether_ntoa ((struct ether_addr *) &cis[i + 2],
+ eabuf);
+ }
+ /* set boardnum if HNBU_BOARDNUM not seen yet */
+ if (boardnum == -1)
+ boardnum = (cis[i + 6] << 8) + cis[i + 7];
+ break;
+ }
+ break;
+
+ case CISTPL_CFTABLE:
+ varbuf_append (&b, "regwindowsz=%d",
+ (cis[i + 7] << 8) | cis[i + 6]);
+ break;
+
+ case CISTPL_BRCM_HNBU:
+ switch (cis[i])
+ {
+ case HNBU_SROMREV:
+ sromrev = cis[i + 1];
+ varbuf_append (&b, "sromrev=%d", sromrev);
+ break;
+
+ case HNBU_CHIPID:
+ varbuf_append (&b, "vendid=0x%x", (cis[i + 2] << 8) +
+ cis[i + 1]);
+ varbuf_append (&b, "devid=0x%x", (cis[i + 4] << 8) +
+ cis[i + 3]);
+ if (tlen >= 7)
+ {
+ varbuf_append (&b, "chiprev=%d",
+ (cis[i + 6] << 8) + cis[i + 5]);
+ }
+ if (tlen >= 9)
+ {
+ varbuf_append (&b, "subvendid=0x%x",
+ (cis[i + 8] << 8) + cis[i + 7]);
+ }
+ if (tlen >= 11)
+ {
+ varbuf_append (&b, "subdevid=0x%x",
+ (cis[i + 10] << 8) + cis[i + 9]);
+ /* subdevid doubles for boardtype */
+ varbuf_append (&b, "boardtype=0x%x",
+ (cis[i + 10] << 8) + cis[i + 9]);
+ }
+ break;
+
+ case HNBU_BOARDREV:
+ varbuf_append (&b, "boardrev=0x%x", cis[i + 1]);
+ break;
+
+ case HNBU_AA:
+ varbuf_append (&b, "aa2g=%d", cis[i + 1]);
+ break;
+
+ case HNBU_AG:
+ varbuf_append (&b, "ag0=%d", cis[i + 1]);
+ ag_init = TRUE;
+ break;
+
+ case HNBU_ANT5G:
+ varbuf_append (&b, "aa5g=%d", cis[i + 1]);
+ varbuf_append (&b, "ag1=%d", cis[i + 2]);
+ break;
+
+ case HNBU_CC:
+ ASSERT (sromrev == 1);
+ varbuf_append (&b, "cc=%d", cis[i + 1]);
+ break;
+
+ case HNBU_PAPARMS:
+ if (tlen == 2)
+ {
+ ASSERT (sromrev == 1);
+ varbuf_append (&b, "pa0maxpwr=%d", cis[i + 1]);
+ }
+ else if (tlen >= 9)
+ {
+ if (tlen == 10)
+ {
+ ASSERT (sromrev >= 2);
+ varbuf_append (&b, "opo=%d", cis[i + 9]);
+ }
+ else
+ ASSERT (tlen == 9);
+
+ for (j = 0; j < 3; j++)
+ {
+ varbuf_append (&b, "pa0b%d=%d", j,
+ (cis[i + (j * 2) + 2] << 8) +
+ cis[i + (j * 2) + 1]);
+ }
+ varbuf_append (&b, "pa0itssit=%d", cis[i + 7]);
+ varbuf_append (&b, "pa0maxpwr=%d", cis[i + 8]);
+ }
+ else
+ ASSERT (tlen >= 9);
+ break;
+
+ case HNBU_PAPARMS5G:
+ ASSERT ((sromrev == 2) || (sromrev == 3));
+ for (j = 0; j < 3; j++)
+ {
+ varbuf_append (&b, "pa1b%d=%d", j,
+ (cis[i + (j * 2) + 2] << 8) +
+ cis[i + (j * 2) + 1]);
+ }
+ for (j = 3; j < 6; j++)
+ {
+ varbuf_append (&b, "pa1lob%d=%d", j - 3,
+ (cis[i + (j * 2) + 2] << 8) +
+ cis[i + (j * 2) + 1]);
+ }
+ for (j = 6; j < 9; j++)
+ {
+ varbuf_append (&b, "pa1hib%d=%d", j - 6,
+ (cis[i + (j * 2) + 2] << 8) +
+ cis[i + (j * 2) + 1]);
+ }
+ varbuf_append (&b, "pa1itssit=%d", cis[i + 19]);
+ varbuf_append (&b, "pa1maxpwr=%d", cis[i + 20]);
+ varbuf_append (&b, "pa1lomaxpwr=%d", cis[i + 21]);
+ varbuf_append (&b, "pa1himaxpwr=%d", cis[i + 22]);
+ break;
+
+ case HNBU_OEM:
+ ASSERT (sromrev == 1);
+ varbuf_append (&b, "oem=%02x%02x%02x%02x%02x%02x%02x%02x",
+ cis[i + 1], cis[i + 2],
+ cis[i + 3], cis[i + 4],
+ cis[i + 5], cis[i + 6],
+ cis[i + 7], cis[i + 8]);
+ break;
+
+ case HNBU_BOARDFLAGS:
+ w32 = (cis[i + 2] << 8) + cis[i + 1];
+ if (tlen == 5)
+ w32 |= (cis[i + 4] << 24) + (cis[i + 3] << 16);
+ varbuf_append (&b, "boardflags=0x%x", w32);
+ break;
+
+ case HNBU_LEDS:
+ if (cis[i + 1] != 0xff)
+ {
+ varbuf_append (&b, "ledbh0=%d", cis[i + 1]);
+ }
+ if (cis[i + 2] != 0xff)
+ {
+ varbuf_append (&b, "ledbh1=%d", cis[i + 2]);
+ }
+ if (cis[i + 3] != 0xff)
+ {
+ varbuf_append (&b, "ledbh2=%d", cis[i + 3]);
+ }
+ if (cis[i + 4] != 0xff)
+ {
+ varbuf_append (&b, "ledbh3=%d", cis[i + 4]);
+ }
+ break;
+
+ case HNBU_CCODE:
+ ASSERT (sromrev > 1);
+ if ((cis[i + 1] == 0) || (cis[i + 2] == 0))
+ varbuf_append (&b, "ccode=");
+ else
+ varbuf_append (&b, "ccode=%c%c", cis[i + 1], cis[i + 2]);
+ varbuf_append (&b, "cctl=0x%x", cis[i + 3]);
+ break;
+
+ case HNBU_CCKPO:
+ ASSERT (sromrev > 2);
+ varbuf_append (&b, "cckpo=0x%x",
+ (cis[i + 2] << 8) | cis[i + 1]);
+ break;
+
+ case HNBU_OFDMPO:
+ ASSERT (sromrev > 2);
+ varbuf_append (&b, "ofdmpo=0x%x",
+ (cis[i + 4] << 24) |
+ (cis[i + 3] << 16) |
+ (cis[i + 2] << 8) | cis[i + 1]);
+ break;
+
+ case HNBU_RDLID:
+ varbuf_append (&b, "rdlid=0x%x",
+ (cis[i + 2] << 8) | cis[i + 1]);
+ break;
+
+ case HNBU_RDLRNDIS:
+ varbuf_append (&b, "rdlrndis=%d", cis[i + 1]);
+ break;
+
+ case HNBU_RDLRWU:
+ varbuf_append (&b, "rdlrwu=%d", cis[i + 1]);
+ break;
+
+ case HNBU_RDLSN:
+ varbuf_append (&b, "rdlsn=%d",
+ (cis[i + 2] << 8) | cis[i + 1]);
+ break;
+
+ case HNBU_XTALFREQ:
+ varbuf_append (&b, "xtalfreq=%d",
+ (cis[i + 4] << 24) |
+ (cis[i + 3] << 16) |
+ (cis[i + 2] << 8) | cis[i + 1]);
+ break;
+
+ case HNBU_RSSISMBXA2G:
+ ASSERT (sromrev == 3);
+ varbuf_append (&b, "rssismf2g=%d", cis[i + 1] & 0xf);
+ varbuf_append (&b, "rssismc2g=%d", (cis[i + 1] >> 4) & 0xf);
+ varbuf_append (&b, "rssisav2g=%d", cis[i + 2] & 0x7);
+ varbuf_append (&b, "bxa2g=%d", (cis[i + 2] >> 3) & 0x3);
+ break;
+
+ case HNBU_RSSISMBXA5G:
+ ASSERT (sromrev == 3);
+ varbuf_append (&b, "rssismf5g=%d", cis[i + 1] & 0xf);
+ varbuf_append (&b, "rssismc5g=%d", (cis[i + 1] >> 4) & 0xf);
+ varbuf_append (&b, "rssisav5g=%d", cis[i + 2] & 0x7);
+ varbuf_append (&b, "bxa5g=%d", (cis[i + 2] >> 3) & 0x3);
+ break;
+
+ case HNBU_TRI2G:
+ ASSERT (sromrev == 3);
+ varbuf_append (&b, "tri2g=%d", cis[i + 1]);
+ break;
+
+ case HNBU_TRI5G:
+ ASSERT (sromrev == 3);
+ varbuf_append (&b, "tri5gl=%d", cis[i + 1]);
+ varbuf_append (&b, "tri5g=%d", cis[i + 2]);
+ varbuf_append (&b, "tri5gh=%d", cis[i + 3]);
+ break;
+
+ case HNBU_RXPO2G:
+ ASSERT (sromrev == 3);
+ varbuf_append (&b, "rxpo2g=%d", cis[i + 1]);
+ break;
+
+ case HNBU_RXPO5G:
+ ASSERT (sromrev == 3);
+ varbuf_append (&b, "rxpo5g=%d", cis[i + 1]);
+ break;
+
+ case HNBU_BOARDNUM:
+ boardnum = (cis[i + 2] << 8) + cis[i + 1];
+ break;
+
+ case HNBU_MACADDR:
+ bcm_ether_ntoa ((struct ether_addr *) &cis[i + 1], eabuf);
+ break;
+
+ case HNBU_BOARDTYPE:
+ varbuf_append (&b, "boardtype=0x%x",
+ (cis[i + 2] << 8) + cis[i + 1]);
+ break;
+
+#if defined(BCMCCISSR3)
+ case HNBU_SROM3SWRGN:
+ {
+ uint16 srom[35];
+ uint8 srev = cis[i + 1 + 70];
+ ASSERT (srev == 3);
+ /* make tuple value 16-bit aligned and parse it */
+ bcopy (&cis[i + 1], srom, sizeof (srom));
+ _initvars_srom_pci (srev, srom, SROM3_SWRGN_OFF, &b);
+ /* create extra variables */
+ varbuf_append (&b, "vendid=0x%x",
+ (cis[i + 1 + 73] << 8) + cis[i + 1 + 72]);
+ varbuf_append (&b, "devid=0x%x",
+ (cis[i + 1 + 75] << 8) + cis[i + 1 + 74]);
+ varbuf_append (&b, "xtalfreq=%d",
+ (cis[i + 1 + 77] << 8) + cis[i + 1 + 76]);
+ /* 2.4G antenna gain is included in SROM */
+ ag_init = TRUE;
+ /* Ethernet MAC address is included in SROM */
+ eabuf[0] = 0;
+ boardnum = -1;
+ break;
+ }
+#endif
+ }
+ break;
+ }
+ i += tlen;
}
- *count = varsize;
+ while (tup != CISTPL_END);
+ }
+
+ if (boardnum != -1)
+ {
+ varbuf_append (&b, "boardnum=%d", boardnum);
+ }
+
+ if (eabuf[0])
+ {
+ varbuf_append (&b, "macaddr=%s", eabuf);
+ }
+
+ /* if there is no antenna gain field, set default */
+ if (ag_init == FALSE)
+ {
+ varbuf_append (&b, "ag0=%d", 0xff);
+ }
+
+ /* final nullbyte terminator */
+ ASSERT (b.size >= 1);
+ *b.buf++ = '\0';
+ varsize = (uint) (b.buf - base);
+ ASSERT (varsize < MAXSZ_NVRAM_VARS);
+ if (varsize < MAXSZ_NVRAM_VARS)
+ {
+ char *new_buf;
+ new_buf = (char *) MALLOC (osh, varsize);
+ ASSERT (new_buf);
+ if (new_buf)
+ {
+ bcopy (base, new_buf, varsize);
+ MFREE (osh, base, MAXSZ_NVRAM_VARS);
+ base = new_buf;
+ }
+ }
+
+ *vars = base;
+ *count = varsize;
- return (0);
+ return (0);
}
/* set PCMCIA sprom command register */
static int
-sprom_cmd_pcmcia(osl_t *osh, uint8 cmd)
+sprom_cmd_pcmcia (osl_t * osh, uint8 cmd)
{
- uint8 status = 0;
- uint wait_cnt = 1000;
+ uint8 status = 0;
+ uint wait_cnt = 1000;
- /* write sprom command register */
- OSL_PCMCIA_WRITE_ATTR(osh, SROM_CS, &cmd, 1);
+ /* write sprom command register */
+ OSL_PCMCIA_WRITE_ATTR (osh, SROM_CS, &cmd, 1);
- /* wait status */
- while (wait_cnt--) {
- OSL_PCMCIA_READ_ATTR(osh, SROM_CS, &status, 1);
- if (status & SROM_DONE)
- return 0;
- }
+ /* wait status */
+ while (wait_cnt--)
+ {
+ OSL_PCMCIA_READ_ATTR (osh, SROM_CS, &status, 1);
+ if (status & SROM_DONE)
+ return 0;
+ }
- return 1;
+ return 1;
}
/* read a word from the PCMCIA srom */
static int
-sprom_read_pcmcia(osl_t *osh, uint16 addr, uint16 *data)
+sprom_read_pcmcia (osl_t * osh, uint16 addr, uint16 * data)
{
- uint8 addr_l, addr_h, data_l, data_h;
+ uint8 addr_l, addr_h, data_l, data_h;
- addr_l = (uint8)((addr * 2) & 0xff);
- addr_h = (uint8)(((addr * 2) >> 8) & 0xff);
+ addr_l = (uint8) ((addr * 2) & 0xff);
+ addr_h = (uint8) (((addr * 2) >> 8) & 0xff);
- /* set address */
- OSL_PCMCIA_WRITE_ATTR(osh, SROM_ADDRH, &addr_h, 1);
- OSL_PCMCIA_WRITE_ATTR(osh, SROM_ADDRL, &addr_l, 1);
+ /* set address */
+ OSL_PCMCIA_WRITE_ATTR (osh, SROM_ADDRH, &addr_h, 1);
+ OSL_PCMCIA_WRITE_ATTR (osh, SROM_ADDRL, &addr_l, 1);
- /* do read */
- if (sprom_cmd_pcmcia(osh, SROM_READ))
- return 1;
+ /* do read */
+ if (sprom_cmd_pcmcia (osh, SROM_READ))
+ return 1;
- /* read data */
- data_h = data_l = 0;
- OSL_PCMCIA_READ_ATTR(osh, SROM_DATAH, &data_h, 1);
- OSL_PCMCIA_READ_ATTR(osh, SROM_DATAL, &data_l, 1);
+ /* read data */
+ data_h = data_l = 0;
+ OSL_PCMCIA_READ_ATTR (osh, SROM_DATAH, &data_h, 1);
+ OSL_PCMCIA_READ_ATTR (osh, SROM_DATAL, &data_l, 1);
- *data = (data_h << 8) | data_l;
- return 0;
+ *data = (data_h << 8) | data_l;
+ return 0;
}
/* write a word to the PCMCIA srom */
static int
-sprom_write_pcmcia(osl_t *osh, uint16 addr, uint16 data)
+sprom_write_pcmcia (osl_t * osh, uint16 addr, uint16 data)
{
- uint8 addr_l, addr_h, data_l, data_h;
+ uint8 addr_l, addr_h, data_l, data_h;
- addr_l = (uint8)((addr * 2) & 0xff);
- addr_h = (uint8)(((addr * 2) >> 8) & 0xff);
- data_l = (uint8)(data & 0xff);
- data_h = (uint8)((data >> 8) & 0xff);
+ addr_l = (uint8) ((addr * 2) & 0xff);
+ addr_h = (uint8) (((addr * 2) >> 8) & 0xff);
+ data_l = (uint8) (data & 0xff);
+ data_h = (uint8) ((data >> 8) & 0xff);
- /* set address */
- OSL_PCMCIA_WRITE_ATTR(osh, SROM_ADDRH, &addr_h, 1);
- OSL_PCMCIA_WRITE_ATTR(osh, SROM_ADDRL, &addr_l, 1);
+ /* set address */
+ OSL_PCMCIA_WRITE_ATTR (osh, SROM_ADDRH, &addr_h, 1);
+ OSL_PCMCIA_WRITE_ATTR (osh, SROM_ADDRL, &addr_l, 1);
- /* write data */
- OSL_PCMCIA_WRITE_ATTR(osh, SROM_DATAH, &data_h, 1);
- OSL_PCMCIA_WRITE_ATTR(osh, SROM_DATAL, &data_l, 1);
+ /* write data */
+ OSL_PCMCIA_WRITE_ATTR (osh, SROM_DATAH, &data_h, 1);
+ OSL_PCMCIA_WRITE_ATTR (osh, SROM_DATAL, &data_l, 1);
- /* do write */
- return sprom_cmd_pcmcia(osh, SROM_WRITE);
+ /* do write */
+ return sprom_cmd_pcmcia (osh, SROM_WRITE);
}
/*
* Return 0 on success, nonzero on error.
*/
static int
-sprom_read_pci(osl_t *osh, uint16 *sprom, uint wordoff, uint16 *buf, uint nwords, bool check_crc)
+sprom_read_pci (osl_t * osh, uint16 * sprom, uint wordoff, uint16 * buf,
+ uint nwords, bool check_crc)
{
- int err = 0;
- uint i;
-
- /* read the sprom */
- for (i = 0; i < nwords; i++)
- buf[i] = R_REG(osh, &sprom[wordoff + i]);
-
- if (check_crc) {
- /* fixup the endianness so crc8 will pass */
- htol16_buf(buf, nwords * 2);
- if (hndcrc8((uint8*)buf, nwords * 2, CRC8_INIT_VALUE) != CRC8_GOOD_VALUE)
- err = 1;
- /* now correct the endianness of the byte array */
- ltoh16_buf(buf, nwords * 2);
+ int err = 0;
+ uint i;
+
+ /* read the sprom */
+ for (i = 0; i < nwords; i++)
+ {
+#ifdef BCMQT
+ buf[i] = R_REG (osh, &sprom[wordoff + i]);
+#endif
+ buf[i] = R_REG (osh, &sprom[wordoff + i]);
+ }
+
+ if (check_crc)
+ {
+ if (buf[0] == 0xffff)
+ {
+ /* The hardware thinks that an srom that starts with 0xffff
+ * is blank, regardless of the rest of the content, so declare
+ * it bad.
+ */
+ BS_ERROR (("%s: buf[0] = 0x%x, returning bad-crc\n", __FUNCTION__,
+ buf[0]));
+ return 1;
}
- return err;
+ /* fixup the endianness so crc8 will pass */
+ htol16_buf (buf, nwords * 2);
+ if (hndcrc8 ((uint8 *) buf, nwords * 2, 0xff) != 0x9f)
+ err = 1;
+ /* now correct the endianness of the byte array */
+ ltoh16_buf (buf, nwords * 2);
+ }
+
+ return err;
}
/*
* Return 0 on success, nonzero on error.
*/
static int
-initvars_table(osl_t *osh, char *start, char *end, char **vars, uint *count)
+BCMINITFN (initvars_table) (osl_t * osh, char *start, char *end, char **vars,
+ uint * count)
{
- int c = (int)(end - start);
-
- /* do it only when there is more than just the null string */
- if (c > 1) {
- char *vp = MALLOC(osh, c);
- ASSERT(vp);
- if (!vp)
- return BCME_NOMEM;
- bcopy(start, vp, c);
- *vars = vp;
- *count = c;
- }
- else {
- *vars = NULL;
- *count = 0;
- }
-
- return 0;
+ int c = (int) (end - start);
+
+ /* do it only when there is more than just the null string */
+ if (c > 1)
+ {
+ char *vp = MALLOC (osh, c);
+ ASSERT (vp);
+ if (!vp)
+ return BCME_NOMEM;
+ bcopy (start, vp, c);
+ *vars = vp;
+ *count = c;
+ }
+ else
+ {
+ *vars = NULL;
+ *count = 0;
+ }
+
+ return 0;
}
/*
* Return 0 on success, nonzero on error.
*/
static int
-initvars_flash(osl_t *osh, char **base, uint len, char *devpath)
+initvars_flash (sb_t * sbh, osl_t * osh, char **base, uint len)
{
- char *vp = *base;
- char *flash;
- int err;
- char *s;
- uint l, dl, copy_len;
-
- /* allocate memory and read in flash */
- if (!(flash = MALLOC(osh, NVRAM_SPACE)))
- return BCME_NOMEM;
- if ((err = nvram_getall(flash, NVRAM_SPACE)))
- goto exit;
-
- /* grab vars with the <devpath> prefix in name */
- dl = strlen(devpath);
- for (s = flash; s && *s; s += l + 1) {
- l = strlen(s);
-
- /* skip non-matching variable */
- if (strncmp(s, devpath, dl))
- continue;
-
- /* is there enough room to copy? */
- copy_len = l - dl + 1;
- if (len < copy_len) {
- err = BCME_BUFTOOSHORT;
- goto exit;
- }
-
- /* no prefix, just the name=value */
- strcpy(vp, &s[dl]);
- vp += copy_len;
- len -= copy_len;
+ char *vp = *base;
+ char *flash;
+ int err;
+ char *s;
+ uint l, dl, copy_len;
+ char devpath[SB_DEVPATH_BUFSZ];
+
+ /* allocate memory and read in flash */
+ if (!(flash = MALLOC (osh, NVRAM_SPACE)))
+ return BCME_NOMEM;
+ if ((err = nvram_getall (flash, NVRAM_SPACE)))
+ goto exit;
+
+ sb_devpath (sbh, devpath, sizeof (devpath));
+
+ /* grab vars with the <devpath> prefix in name */
+ dl = strlen (devpath);
+ for (s = flash; s && *s; s += l + 1)
+ {
+ l = strlen (s);
+
+ /* skip non-matching variable */
+ if (strncmp (s, devpath, dl))
+ continue;
+
+ /* is there enough room to copy? */
+ copy_len = l - dl + 1;
+ if (len < copy_len)
+ {
+ err = BCME_BUFTOOSHORT;
+ goto exit;
}
- /* add null string as terminator */
- if (len < 1) {
- err = BCME_BUFTOOSHORT;
- goto exit;
- }
- *vp++ = '\0';
+ /* no prefix, just the name=value */
+ strncpy (vp, &s[dl], copy_len);
+ vp += copy_len;
+ len -= copy_len;
+ }
+
+ /* add null string as terminator */
+ if (len < 1)
+ {
+ err = BCME_BUFTOOSHORT;
+ goto exit;
+ }
+ *vp++ = '\0';
- *base = vp;
+ *base = vp;
-exit: MFREE(osh, flash, NVRAM_SPACE);
- return err;
+exit:MFREE (osh, flash, NVRAM_SPACE);
+ return err;
}
+#if !defined(BCMUSBDEV) && !defined(BCMSDIODEV)
/*
* Initialize nonvolatile variable table from flash.
* Return 0 on success, nonzero on error.
*/
static int
-initvars_flash_sb(void *sbh, char **vars, uint *count)
+initvars_flash_sb (sb_t * sbh, char **vars, uint * count)
{
- osl_t *osh = sb_osh(sbh);
- char devpath[SB_DEVPATH_BUFSZ];
- char *vp, *base;
- int err;
+ osl_t *osh = sb_osh (sbh);
+ char *vp, *base;
+ int err;
- ASSERT(vars);
- ASSERT(count);
+ ASSERT (vars);
+ ASSERT (count);
- if ((err = sb_devpath(sbh, devpath, sizeof(devpath))))
- return err;
+ base = vp = MALLOC (osh, MAXSZ_NVRAM_VARS);
+ ASSERT (vp);
+ if (!vp)
+ return BCME_NOMEM;
- base = vp = MALLOC(osh, VARS_MAX);
- ASSERT(vp);
- if (!vp)
- return BCME_NOMEM;
+ if ((err = initvars_flash (sbh, osh, &vp, MAXSZ_NVRAM_VARS)) == 0)
+ err = initvars_table (osh, base, vp, vars, count);
- if ((err = initvars_flash(osh, &vp, VARS_MAX, devpath)))
- goto err;
+ MFREE (osh, base, MAXSZ_NVRAM_VARS);
- err = initvars_table(osh, base, vp, vars, count);
-
-err: MFREE(osh, base, VARS_MAX);
- return err;
+ return err;
}
+#endif /* !BCMUSBDEV && !BCMSDIODEV */
#ifdef WLTEST
char mfgsromvars[256];
char *defaultsromvars = "il0macaddr=00:11:22:33:44:51\0"
- "et0macaddr=00:11:22:33:44:52\0"
- "et1macaddr=00:11:22:33:44:53\0"
- "boardtype=0xffff\0"
- "boardrev=0x10\0"
- "boardflags=8\0"
- "sromrev=2\0"
- "aa2g=3";
-#define MFGSROM_DEFVARSLEN 147 /* default srom len */
+ "et0macaddr=00:11:22:33:44:52\0"
+ "et1macaddr=00:11:22:33:44:53\0"
+ "boardtype=0xffff\0"
+ "boardrev=0x10\0" "boardflags=8\0" "sromrev=2\0" "aa2g=3\0" "\0";
+#define MFGSROM_DEFVARSLEN 149 /* default srom len */
#endif /* WL_TEST */
/*
* Initialize nonvolatile variable table from sprom.
* Return 0 on success, nonzero on error.
*/
-static int
-initvars_srom_pci(void *sbh, void *curmap, char **vars, uint *count)
-{
- uint16 w, *b;
- uint8 sromrev = 0;
- struct ether_addr ea;
- char eabuf[32];
- uint32 w32;
- int woff, i;
- char *vp, *base;
- osl_t *osh = sb_osh(sbh);
- bool flash = FALSE;
- char name[SB_DEVPATH_BUFSZ+16], *value;
- char devpath[SB_DEVPATH_BUFSZ];
- int err;
-
- /*
- * Apply CRC over SROM content regardless SROM is present or not,
- * and use variable <devpath>sromrev's existance in flash to decide
- * if we should return an error when CRC fails or read SROM variables
- * from flash.
- */
- b = MALLOC(osh, SROM_MAX);
- ASSERT(b);
- if (!b)
- return -2;
-
- err = sprom_read_pci(osh, (void*)((int8*)curmap + PCI_BAR0_SPROM_OFFSET), 0, b,
- 64, TRUE);
- if (b[SROM4_SIGN] == SROM4_SIGNATURE) {
- /* sromrev >= 4, read more */
- err = sprom_read_pci(osh, (void*)((int8*)curmap + PCI_BAR0_SPROM_OFFSET), 0, b, SROM4_WORDS, TRUE);
- sromrev = b[SROM4_WORDS - 1] & 0xff;
- } else if (err == 0) {
- /* srom is good and is rev < 4 */
- /* top word of sprom contains version and crc8 */
- sromrev = b[63] & 0xff;
- /* bcm4401 sroms misprogrammed */
- if (sromrev == 0x10)
- sromrev = 1;
- }
-
- if (err) {
-#ifdef WLTEST
- BS_ERROR(("SROM Crc Error, so see if we could use a default\n"));
- w32 = OSL_PCI_READ_CONFIG(osh, PCI_SPROM_CONTROL, sizeof(uint32));
- if (w32 & SPROM_OTPIN_USE) {
- BS_ERROR(("srom crc failed with OTP, use default vars....\n"));
- vp = base = mfgsromvars;
- if (sb_chip(sbh) == BCM4311_CHIP_ID) {
- BS_ERROR(("setting the devid to be 4311\n"));
- vp += sprintf(vp, "devid=0x4311");
- vp++;
- }
- bcopy(defaultsromvars, vp, MFGSROM_DEFVARSLEN);
- vp += MFGSROM_DEFVARSLEN;
- goto varsdone;
- } else {
- BS_ERROR(("srom crc failed with SPROM....\n"));
-#endif /* WLTEST */
- if ((err = sb_devpath(sbh, devpath, sizeof(devpath))))
- return err;
- sprintf(name, "%ssromrev", devpath);
- if (!(value = getvar(NULL, name)))
- return (-1);
- sromrev = (uint8)bcm_strtoul(value, NULL, 0);
- flash = TRUE;
-#ifdef WLTEST
- }
-#endif /* WLTEST */
- }
- /* srom version check */
- if (sromrev > 4)
- return (-2);
-
- ASSERT(vars);
- ASSERT(count);
-
- base = vp = MALLOC(osh, VARS_MAX);
- ASSERT(vp);
- if (!vp)
- return -2;
-
- /* read variables from flash */
- if (flash) {
- if ((err = initvars_flash(osh, &vp, VARS_MAX, devpath)))
- goto err;
- goto varsdone;
- }
-
- vp += sprintf(vp, "sromrev=%d", sromrev);
- vp++;
-
- if (sromrev >= 4) {
- uint path, pathbase;
- const uint pathbases[MAX_PATH] = {SROM4_PATH0, SROM4_PATH1,
- SROM4_PATH2, SROM4_PATH3};
-
- vp += sprintf(vp, "boardrev=%d", b[SROM4_BREV]);
- vp++;
-
- vp += sprintf(vp, "boardflags=%d", (b[SROM4_BFL1] << 16) | b[SROM4_BFL0]);
- vp++;
-
- vp += sprintf(vp, "boardflags2=%d", (b[SROM4_BFL3] << 16) | b[SROM4_BFL2]);
- vp++;
-
- /* The macaddr */
- ea.octet[0] = (b[SROM4_MACHI] >> 8) & 0xff;
- ea.octet[1] = b[SROM4_MACHI] & 0xff;
- ea.octet[2] = (b[SROM4_MACMID] >> 8) & 0xff;
- ea.octet[3] = b[SROM4_MACMID] & 0xff;
- ea.octet[4] = (b[SROM4_MACLO] >> 8) & 0xff;
- ea.octet[5] = b[SROM4_MACLO] & 0xff;
- bcm_ether_ntoa(&ea, eabuf);
- vp += sprintf(vp, "macaddr=%s", eabuf);
- vp++;
-
- w = b[SROM4_CCODE];
- if (w == 0)
- vp += sprintf(vp, "ccode=");
- else
- vp += sprintf(vp, "ccode=%c%c", (w >> 8), (w & 0xff));
- vp++;
- vp += sprintf(vp, "regrev=%d", b[SROM4_REGREV]);
- vp++;
-
- w = b[SROM4_LEDBH10];
- if ((w != 0) && (w != 0xffff)) {
- /* ledbh0 */
- vp += sprintf(vp, "ledbh0=%d", (w & 0xff));
- vp++;
-
- /* ledbh1 */
- vp += sprintf(vp, "ledbh1=%d", (w >> 8) & 0xff);
- vp++;
- }
- w = b[SROM4_LEDBH32];
- if ((w != 0) && (w != 0xffff)) {
- /* ledbh2 */
- vp += sprintf(vp, "ledbh2=%d", w & 0xff);
- vp++;
-
- /* ledbh3 */
- vp += sprintf(vp, "ledbh3=%d", (w >> 8) & 0xff);
- vp++;
- }
- /* LED Powersave duty cycle (oncount >> 24) (offcount >> 8) */
- if (w != 0xffff) {
- w = b[SROM4_LEDDC];
- w32 = ((uint32)((unsigned char)(w >> 8) & 0xff) << 24) | /* oncount */
- ((uint32)((unsigned char)(w & 0xff)) << 8); /* offcount */
- vp += sprintf(vp, "leddc=%d", w32);
- vp++;
- }
-
- w = b[SROM4_AA];
- vp += sprintf(vp, "aa2g=%d", w & SROM4_AA2G_MASK);
- vp++;
- vp += sprintf(vp, "aa5g=%d", w >> SROM4_AA5G_SHIFT);
- vp++;
-
- w = b[SROM4_AG10];
- vp += sprintf(vp, "ag0=%d", w & 0xff);
- vp++;
- vp += sprintf(vp, "ag1=%d", (w >> 8) & 0xff);
- vp++;
- w = b[SROM4_AG32];
- vp += sprintf(vp, "ag2=%d", w & 0xff);
- vp++;
- vp += sprintf(vp, "ag3=%d", (w >> 8) & 0xff);
- vp++;
-
- /* Fixed power indices when power control is disabled */
- for (i = 0; i < 2; i++) {
- w = b[SROM4_TXPID2G + i];
- vp += sprintf(vp, "txpid2ga%d=%d", 2 * i, w & 0xff);
- vp++;
- vp += sprintf(vp, "txpid2ga%d=%d", (2 * i) + 1, (w >> 8) & 0xff);
- vp++;
- w = b[SROM4_TXPID5G + i];
- vp += sprintf(vp, "txpid5ga%d=%d", 2 * i, w & 0xff);
- vp++;
- vp += sprintf(vp, "txpid5ga%d=%d", (2 * i) + 1, (w >> 8) & 0xff);
- vp++;
- w = b[SROM4_TXPID5GL + i];
- vp += sprintf(vp, "txpid5gla%d=%d", 2 * i, w & 0xff);
- vp++;
- vp += sprintf(vp, "txpid5gla%d=%d", (2 * i) + 1, (w >> 8) & 0xff);
- vp++;
- w = b[SROM4_TXPID5GH + i];
- vp += sprintf(vp, "txpid5gha%d=%d", 2 * i, w & 0xff);
- vp++;
- vp += sprintf(vp, "txpid5gha%d=%d", (2 * i) + 1, (w >> 8) & 0xff);
- vp++;
- }
+typedef struct
+{
+ const char *name;
+ uint32 revmask;
+ uint32 flags;
+ uint16 off;
+ uint16 mask;
+} sromvar_t;
+
+#define SRFL_MORE 1 /* value continues as described by the next entry */
+#define SRFL_NOFFS 2 /* value bits can't be all one's */
+#define SRFL_PRHEX 4 /* value is in hexdecimal format */
+#define SRFL_PRSIGN 8 /* value is in signed decimal format */
+#define SRFL_CCODE 0x10 /* value is in country code format */
+#define SRFL_ETHADDR 0x20 /* value is an Ethernet address */
+#define SRFL_LEDDC 0x40 /* value is an LED duty cycle */
+
+/* Assumptions:
+ * - Ethernet address spins across 3 consective words
+ *
+ * Table rules:
+ * - Add multiple entries next to each other if a value spins across multiple words
+ * (even multiple fields in the same word) with each entry except the last having
+ * it's SRFL_MORE bit set.
+ * - Ethernet address entry does not follow above rule and must not have SRFL_MORE
+ * bit set. Its SRFL_ETHADDR bit implies it takes multiple words.
+ * - The last entry's name field must be NULL to indicate the end of the table. Other
+ * entries must have non-NULL name.
+ */
- /* Per path variables */
- for (path = 0; path < MAX_PATH; path++) {
- pathbase = pathbases[path];
- w = b[pathbase + SROM4_2G_ITT_MAXP];
- vp += sprintf(vp, "itt2ga%d=%d", path, w >> B2G_ITT_SHIFT);
- vp++;
- vp += sprintf(vp, "maxp2ga%d=%d", path, w & B2G_MAXP_MASK);
- vp++;
-
- for (i = 0; i < 4; i++) {
- vp += sprintf(vp, "pa2gw%da%d=%d", i, path,
- b[pathbase + SROM4_2G_PA + i]);
- vp++;
- }
+static const sromvar_t pci_sromvars[] = {
+ {"boardrev", 0x0000000e, SRFL_PRHEX, SROM_AABREV, SROM_BR_MASK},
+ {"boardrev", 0x000000f0, SRFL_PRHEX, SROM4_BREV, 0xffff},
+ {"boardrev", 0xffffff00, SRFL_PRHEX, SROM8_BREV, 0xffff},
+ {"boardflags", 0x00000002, SRFL_PRHEX, SROM_BFL, 0xffff},
+ {"boardflags", 0x00000004, SRFL_PRHEX | SRFL_MORE, SROM_BFL, 0xffff},
+ {"", 0, 0, SROM_BFL2, 0xffff},
+ {"boardflags", 0x00000008, SRFL_PRHEX | SRFL_MORE, SROM_BFL, 0xffff},
+ {"", 0, 0, SROM3_BFL2, 0xffff},
+ {"boardflags", 0x00000010, SRFL_PRHEX | SRFL_MORE, SROM4_BFL0, 0xffff},
+ {"", 0, 0, SROM4_BFL1, 0xffff},
+ {"boardflags", 0x000000e0, SRFL_PRHEX | SRFL_MORE, SROM5_BFL0, 0xffff},
+ {"", 0, 0, SROM5_BFL1, 0xffff},
+ {"boardflags", 0xffffff00, SRFL_PRHEX | SRFL_MORE, SROM8_BFL0, 0xffff},
+ {"", 0, 0, SROM8_BFL1, 0xffff},
+ {"boardflags2", 0x00000010, SRFL_PRHEX | SRFL_MORE, SROM4_BFL2, 0xffff},
+ {"", 0, 0, SROM4_BFL3, 0xffff},
+ {"boardflags2", 0x000000e0, SRFL_PRHEX | SRFL_MORE, SROM5_BFL2, 0xffff},
+ {"", 0, 0, SROM5_BFL3, 0xffff},
+ {"boardflags2", 0xffffff00, SRFL_PRHEX | SRFL_MORE, SROM8_BFL2, 0xffff},
+ {"", 0, 0, SROM8_BFL3, 0xffff},
+ {"boardtype", 0xfffffffc, SRFL_PRHEX, SROM_SSID, 0xffff},
+ {"boardnum", 0x00000006, 0, SROM_MACLO_IL0, 0xffff},
+ {"boardnum", 0x00000008, 0, SROM3_MACLO, 0xffff},
+ {"boardnum", 0x00000010, 0, SROM4_MACLO, 0xffff},
+ {"boardnum", 0x000000e0, 0, SROM5_MACLO, 0xffff},
+ {"boardnum", 0xffffff00, 0, SROM8_MACLO, 0xffff},
+ {"cc", 0x00000002, 0, SROM_AABREV, SROM_CC_MASK},
+ {"regrev", 0x00000008, 0, SROM_OPO, 0xff00},
+ {"regrev", 0x00000010, 0, SROM4_REGREV, 0xff},
+ {"regrev", 0x000000e0, 0, SROM5_REGREV, 0xff},
+ {"regrev", 0xffffff00, 0, SROM8_REGREV, 0xff},
+ {"ledbh0", 0x0000000e, SRFL_NOFFS, SROM_LEDBH10, 0xff},
+ {"ledbh1", 0x0000000e, SRFL_NOFFS, SROM_LEDBH10, 0xff00},
+ {"ledbh2", 0x0000000e, SRFL_NOFFS, SROM_LEDBH32, 0xff},
+ {"ledbh3", 0x0000000e, SRFL_NOFFS, SROM_LEDBH32, 0xff00},
+ {"ledbh0", 0x00000010, SRFL_NOFFS, SROM4_LEDBH10, 0xff},
+ {"ledbh1", 0x00000010, SRFL_NOFFS, SROM4_LEDBH10, 0xff00},
+ {"ledbh2", 0x00000010, SRFL_NOFFS, SROM4_LEDBH32, 0xff},
+ {"ledbh3", 0x00000010, SRFL_NOFFS, SROM4_LEDBH32, 0xff00},
+ {"ledbh0", 0x000000e0, SRFL_NOFFS, SROM5_LEDBH10, 0xff},
+ {"ledbh1", 0x000000e0, SRFL_NOFFS, SROM5_LEDBH10, 0xff00},
+ {"ledbh2", 0x000000e0, SRFL_NOFFS, SROM5_LEDBH32, 0xff},
+ {"ledbh3", 0x000000e0, SRFL_NOFFS, SROM5_LEDBH32, 0xff00},
+ {"ledbh0", 0xffffff00, SRFL_NOFFS, SROM8_LEDBH10, 0xff},
+ {"ledbh1", 0xffffff00, SRFL_NOFFS, SROM8_LEDBH10, 0xff00},
+ {"ledbh2", 0xffffff00, SRFL_NOFFS, SROM8_LEDBH32, 0xff},
+ {"ledbh3", 0xffffff00, SRFL_NOFFS, SROM8_LEDBH32, 0xff00},
+ {"pa0b0", 0x0000000e, SRFL_PRHEX, SROM_WL0PAB0, 0xffff},
+ {"pa0b1", 0x0000000e, SRFL_PRHEX, SROM_WL0PAB1, 0xffff},
+ {"pa0b2", 0x0000000e, SRFL_PRHEX, SROM_WL0PAB2, 0xffff},
+ {"pa0itssit", 0x0000000e, 0, SROM_ITT, 0xff},
+ {"pa0maxpwr", 0x0000000e, 0, SROM_WL10MAXP, 0xff},
+ {"pa0b0", 0xffffff00, SRFL_PRHEX, SROM8_W0_PAB0, 0xffff},
+ {"pa0b1", 0xffffff00, SRFL_PRHEX, SROM8_W0_PAB1, 0xffff},
+ {"pa0b2", 0xffffff00, SRFL_PRHEX, SROM8_W0_PAB2, 0xffff},
+ {"pa0itssit", 0xffffff00, 0, SROM8_W0_ITTMAXP, 0xff00},
+ {"pa0maxpwr", 0xffffff00, 0, SROM8_W0_ITTMAXP, 0xff},
+ {"opo", 0x0000000c, 0, SROM_OPO, 0xff},
+ {"opo", 0xffffff00, 0, SROM8_2G_OFDMPO, 0xff},
+ {"aa2g", 0x0000000e, 0, SROM_AABREV, SROM_AA0_MASK},
+ {"aa2g", 0x000000f0, 0, SROM4_AA, 0xff},
+ {"aa2g", 0xffffff00, 0, SROM8_AA, 0xff},
+ {"aa5g", 0x0000000e, 0, SROM_AABREV, SROM_AA1_MASK},
+ {"aa5g", 0x000000f0, 0, SROM4_AA, 0xff00},
+ {"aa5g", 0xffffff00, 0, SROM8_AA, 0xff00},
+ {"ag0", 0x0000000e, 0, SROM_AG10, 0xff},
+ {"ag1", 0x0000000e, 0, SROM_AG10, 0xff00},
+ {"ag0", 0x000000f0, 0, SROM4_AG10, 0xff},
+ {"ag1", 0x000000f0, 0, SROM4_AG10, 0xff00},
+ {"ag2", 0x000000f0, 0, SROM4_AG32, 0xff},
+ {"ag3", 0x000000f0, 0, SROM4_AG32, 0xff00},
+ {"ag0", 0xffffff00, 0, SROM8_AG10, 0xff},
+ {"ag1", 0xffffff00, 0, SROM8_AG10, 0xff00},
+ {"ag2", 0xffffff00, 0, SROM8_AG32, 0xff},
+ {"ag3", 0xffffff00, 0, SROM8_AG32, 0xff00},
+ {"pa1b0", 0x0000000e, SRFL_PRHEX, SROM_WL1PAB0, 0xffff},
+ {"pa1b1", 0x0000000e, SRFL_PRHEX, SROM_WL1PAB1, 0xffff},
+ {"pa1b2", 0x0000000e, SRFL_PRHEX, SROM_WL1PAB2, 0xffff},
+ {"pa1lob0", 0x0000000c, SRFL_PRHEX, SROM_WL1LPAB0, 0xffff},
+ {"pa1lob1", 0x0000000c, SRFL_PRHEX, SROM_WL1LPAB1, 0xffff},
+ {"pa1lob2", 0x0000000c, SRFL_PRHEX, SROM_WL1LPAB2, 0xffff},
+ {"pa1hib0", 0x0000000c, SRFL_PRHEX, SROM_WL1HPAB0, 0xffff},
+ {"pa1hib1", 0x0000000c, SRFL_PRHEX, SROM_WL1HPAB1, 0xffff},
+ {"pa1hib2", 0x0000000c, SRFL_PRHEX, SROM_WL1HPAB2, 0xffff},
+ {"pa1itssit", 0x0000000e, 0, SROM_ITT, 0xff00},
+ {"pa1maxpwr", 0x0000000e, 0, SROM_WL10MAXP, 0xff00},
+ {"pa1lomaxpwr", 0x0000000c, 0, SROM_WL1LHMAXP, 0xff00},
+ {"pa1himaxpwr", 0x0000000c, 0, SROM_WL1LHMAXP, 0xff},
+ {"pa1b0", 0xffffff00, SRFL_PRHEX, SROM8_W1_PAB0, 0xffff},
+ {"pa1b1", 0xffffff00, SRFL_PRHEX, SROM8_W1_PAB1, 0xffff},
+ {"pa1b2", 0xffffff00, SRFL_PRHEX, SROM8_W1_PAB2, 0xffff},
+ {"pa1lob0", 0xffffff00, SRFL_PRHEX, SROM8_W1_PAB0_LC, 0xffff},
+ {"pa1lob1", 0xffffff00, SRFL_PRHEX, SROM8_W1_PAB1_LC, 0xffff},
+ {"pa1lob2", 0xffffff00, SRFL_PRHEX, SROM8_W1_PAB2_LC, 0xffff},
+ {"pa1hib0", 0xffffff00, SRFL_PRHEX, SROM8_W1_PAB0_HC, 0xffff},
+ {"pa1hib1", 0xffffff00, SRFL_PRHEX, SROM8_W1_PAB1_HC, 0xffff},
+ {"pa1hib2", 0xffffff00, SRFL_PRHEX, SROM8_W1_PAB2_HC, 0xffff},
+ {"pa1itssit", 0xffffff00, 0, SROM8_W1_ITTMAXP, 0xff00},
+ {"pa1maxpwr", 0xffffff00, 0, SROM8_W1_ITTMAXP, 0xff},
+ {"pa1lomaxpwr", 0xffffff00, 0, SROM8_W1_MAXP_LCHC, 0xff00},
+ {"pa1himaxpwr", 0xffffff00, 0, SROM8_W1_MAXP_LCHC, 0xff},
+ {"bxa2g", 0x00000008, 0, SROM_BXARSSI2G, 0x1800},
+ {"rssisav2g", 0x00000008, 0, SROM_BXARSSI2G, 0x0700},
+ {"rssismc2g", 0x00000008, 0, SROM_BXARSSI2G, 0x00f0},
+ {"rssismf2g", 0x00000008, 0, SROM_BXARSSI2G, 0x000f},
+ {"bxa2g", 0xffffff00, 0, SROM8_BXARSSI2G, 0x1800},
+ {"rssisav2g", 0xffffff00, 0, SROM8_BXARSSI2G, 0x0700},
+ {"rssismc2g", 0xffffff00, 0, SROM8_BXARSSI2G, 0x00f0},
+ {"rssismf2g", 0xffffff00, 0, SROM8_BXARSSI2G, 0x000f},
+ {"bxa5g", 0x00000008, 0, SROM_BXARSSI5G, 0x1800},
+ {"rssisav5g", 0x00000008, 0, SROM_BXARSSI5G, 0x0700},
+ {"rssismc5g", 0x00000008, 0, SROM_BXARSSI5G, 0x00f0},
+ {"rssismf5g", 0x00000008, 0, SROM_BXARSSI5G, 0x000f},
+ {"bxa5g", 0xffffff00, 0, SROM8_BXARSSI5G, 0x1800},
+ {"rssisav5g", 0xffffff00, 0, SROM8_BXARSSI5G, 0x0700},
+ {"rssismc5g", 0xffffff00, 0, SROM8_BXARSSI5G, 0x00f0},
+ {"rssismf5g", 0xffffff00, 0, SROM8_BXARSSI5G, 0x000f},
+ {"tri2g", 0x00000008, 0, SROM_TRI52G, 0xff},
+ {"tri5g", 0x00000008, 0, SROM_TRI52G, 0xff00},
+ {"tri5gl", 0x00000008, 0, SROM_TRI5GHL, 0xff},
+ {"tri5gh", 0x00000008, 0, SROM_TRI5GHL, 0xff00},
+ {"tri2g", 0xffffff00, 0, SROM8_TRI52G, 0xff},
+ {"tri5g", 0xffffff00, 0, SROM8_TRI52G, 0xff00},
+ {"tri5gl", 0xffffff00, 0, SROM8_TRI5GHL, 0xff},
+ {"tri5gh", 0xffffff00, 0, SROM8_TRI5GHL, 0xff00},
+ {"rxpo2g", 0x00000008, SRFL_PRSIGN, SROM_RXPO52G, 0xff},
+ {"rxpo5g", 0x00000008, SRFL_PRSIGN, SROM_RXPO52G, 0xff00},
+ {"rxpo2g", 0xffffff00, SRFL_PRSIGN, SROM8_RXPO52G, 0xff},
+ {"rxpo5g", 0xffffff00, SRFL_PRSIGN, SROM8_RXPO52G, 0xff00},
+ {"txchain", 0x000000f0, SRFL_NOFFS, SROM4_TXRXC, SROM4_TXCHAIN_MASK},
+ {"rxchain", 0x000000f0, SRFL_NOFFS, SROM4_TXRXC, SROM4_RXCHAIN_MASK},
+ {"antswitch", 0x000000f0, SRFL_NOFFS, SROM4_TXRXC, SROM4_SWITCH_MASK},
+ {"txchain", 0xffffff00, SRFL_NOFFS, SROM8_TXRXC, SROM4_TXCHAIN_MASK},
+ {"rxchain", 0xffffff00, SRFL_NOFFS, SROM8_TXRXC, SROM4_RXCHAIN_MASK},
+ {"antswitch", 0xffffff00, SRFL_NOFFS, SROM8_TXRXC, SROM4_SWITCH_MASK},
+ {"txpid2ga0", 0x000000f0, 0, SROM4_TXPID2G, 0xff},
+ {"txpid2ga1", 0x000000f0, 0, SROM4_TXPID2G, 0xff00},
+ {"txpid2ga2", 0x000000f0, 0, SROM4_TXPID2G + 1, 0xff},
+ {"txpid2ga3", 0x000000f0, 0, SROM4_TXPID2G + 1, 0xff00},
+ {"txpid5ga0", 0x000000f0, 0, SROM4_TXPID5G, 0xff},
+ {"txpid5ga1", 0x000000f0, 0, SROM4_TXPID5G, 0xff00},
+ {"txpid5ga2", 0x000000f0, 0, SROM4_TXPID5G + 1, 0xff},
+ {"txpid5ga3", 0x000000f0, 0, SROM4_TXPID5G + 1, 0xff00},
+ {"txpid5gla0", 0x000000f0, 0, SROM4_TXPID5GL, 0xff},
+ {"txpid5gla1", 0x000000f0, 0, SROM4_TXPID5GL, 0xff00},
+ {"txpid5gla2", 0x000000f0, 0, SROM4_TXPID5GL + 1, 0xff},
+ {"txpid5gla3", 0x000000f0, 0, SROM4_TXPID5GL + 1, 0xff00},
+ {"txpid5gha0", 0x000000f0, 0, SROM4_TXPID5GH, 0xff},
+ {"txpid5gha1", 0x000000f0, 0, SROM4_TXPID5GH, 0xff00},
+ {"txpid5gha2", 0x000000f0, 0, SROM4_TXPID5GH + 1, 0xff},
+ {"txpid5gha3", 0x000000f0, 0, SROM4_TXPID5GH + 1, 0xff00},
+ {"cck2gpo", 0x000000f0, 0, SROM4_2G_CCKPO, 0xffff},
+ {"cck2gpo", 0xffffff00, 0, SROM8_2G_CCKPO, 0xffff},
+ {"ofdm2gpo", 0x000000f0, SRFL_MORE, SROM4_2G_OFDMPO, 0xffff},
+ {"", 0, 0, SROM4_2G_OFDMPO + 1, 0xffff},
+ {"ofdm5gpo", 0x000000f0, SRFL_MORE, SROM4_5G_OFDMPO, 0xffff},
+ {"", 0, 0, SROM4_5G_OFDMPO + 1, 0xffff},
+ {"ofdm5glpo", 0x000000f0, SRFL_MORE, SROM4_5GL_OFDMPO, 0xffff},
+ {"", 0, 0, SROM4_5GL_OFDMPO + 1, 0xffff},
+ {"ofdm5ghpo", 0x000000f0, SRFL_MORE, SROM4_5GH_OFDMPO, 0xffff},
+ {"", 0, 0, SROM4_5GH_OFDMPO + 1, 0xffff},
+ {"ofdm2gpo", 0xffffff00, SRFL_MORE, SROM8_2G_OFDMPO, 0xffff},
+ {"", 0, 0, SROM8_2G_OFDMPO + 1, 0xffff},
+ {"ofdm5gpo", 0xffffff00, SRFL_MORE, SROM8_5G_OFDMPO, 0xffff},
+ {"", 0, 0, SROM8_5G_OFDMPO + 1, 0xffff},
+ {"ofdm5glpo", 0xffffff00, SRFL_MORE, SROM8_5GL_OFDMPO, 0xffff},
+ {"", 0, 0, SROM8_5GL_OFDMPO + 1, 0xffff},
+ {"ofdm5ghpo", 0xffffff00, SRFL_MORE, SROM8_5GH_OFDMPO, 0xffff},
+ {"", 0, 0, SROM8_5GH_OFDMPO + 1, 0xffff},
+ {"mcs2gpo0", 0x000000f0, 0, SROM4_2G_MCSPO, 0xffff},
+ {"mcs2gpo1", 0x000000f0, 0, SROM4_2G_MCSPO + 1, 0xffff},
+ {"mcs2gpo2", 0x000000f0, 0, SROM4_2G_MCSPO + 2, 0xffff},
+ {"mcs2gpo3", 0x000000f0, 0, SROM4_2G_MCSPO + 3, 0xffff},
+ {"mcs2gpo4", 0x000000f0, 0, SROM4_2G_MCSPO + 4, 0xffff},
+ {"mcs2gpo5", 0x000000f0, 0, SROM4_2G_MCSPO + 5, 0xffff},
+ {"mcs2gpo6", 0x000000f0, 0, SROM4_2G_MCSPO + 6, 0xffff},
+ {"mcs2gpo7", 0x000000f0, 0, SROM4_2G_MCSPO + 7, 0xffff},
+ {"mcs5gpo0", 0x000000f0, 0, SROM4_5G_MCSPO, 0xffff},
+ {"mcs5gpo1", 0x000000f0, 0, SROM4_5G_MCSPO + 1, 0xffff},
+ {"mcs5gpo2", 0x000000f0, 0, SROM4_5G_MCSPO + 2, 0xffff},
+ {"mcs5gpo3", 0x000000f0, 0, SROM4_5G_MCSPO + 3, 0xffff},
+ {"mcs5gpo4", 0x000000f0, 0, SROM4_5G_MCSPO + 4, 0xffff},
+ {"mcs5gpo5", 0x000000f0, 0, SROM4_5G_MCSPO + 5, 0xffff},
+ {"mcs5gpo6", 0x000000f0, 0, SROM4_5G_MCSPO + 6, 0xffff},
+ {"mcs5gpo7", 0x000000f0, 0, SROM4_5G_MCSPO + 7, 0xffff},
+ {"mcs5glpo0", 0x000000f0, 0, SROM4_5GL_MCSPO, 0xffff},
+ {"mcs5glpo1", 0x000000f0, 0, SROM4_5GL_MCSPO + 1, 0xffff},
+ {"mcs5glpo2", 0x000000f0, 0, SROM4_5GL_MCSPO + 2, 0xffff},
+ {"mcs5glpo3", 0x000000f0, 0, SROM4_5GL_MCSPO + 3, 0xffff},
+ {"mcs5glpo4", 0x000000f0, 0, SROM4_5GL_MCSPO + 4, 0xffff},
+ {"mcs5glpo5", 0x000000f0, 0, SROM4_5GL_MCSPO + 5, 0xffff},
+ {"mcs5glpo6", 0x000000f0, 0, SROM4_5GL_MCSPO + 6, 0xffff},
+ {"mcs5glpo7", 0x000000f0, 0, SROM4_5GL_MCSPO + 7, 0xffff},
+ {"mcs5ghpo0", 0x000000f0, 0, SROM4_5GH_MCSPO, 0xffff},
+ {"mcs5ghpo1", 0x000000f0, 0, SROM4_5GH_MCSPO + 1, 0xffff},
+ {"mcs5ghpo2", 0x000000f0, 0, SROM4_5GH_MCSPO + 2, 0xffff},
+ {"mcs5ghpo3", 0x000000f0, 0, SROM4_5GH_MCSPO + 3, 0xffff},
+ {"mcs5ghpo4", 0x000000f0, 0, SROM4_5GH_MCSPO + 4, 0xffff},
+ {"mcs5ghpo5", 0x000000f0, 0, SROM4_5GH_MCSPO + 5, 0xffff},
+ {"mcs5ghpo6", 0x000000f0, 0, SROM4_5GH_MCSPO + 6, 0xffff},
+ {"mcs5ghpo7", 0x000000f0, 0, SROM4_5GH_MCSPO + 7, 0xffff},
+ {"mcs2gpo0", 0xffffff00, 0, SROM8_2G_MCSPO, 0xffff},
+ {"mcs2gpo1", 0xffffff00, 0, SROM8_2G_MCSPO + 1, 0xffff},
+ {"mcs2gpo2", 0xffffff00, 0, SROM8_2G_MCSPO + 2, 0xffff},
+ {"mcs2gpo3", 0xffffff00, 0, SROM8_2G_MCSPO + 3, 0xffff},
+ {"mcs2gpo4", 0xffffff00, 0, SROM8_2G_MCSPO + 4, 0xffff},
+ {"mcs2gpo5", 0xffffff00, 0, SROM8_2G_MCSPO + 5, 0xffff},
+ {"mcs2gpo6", 0xffffff00, 0, SROM8_2G_MCSPO + 6, 0xffff},
+ {"mcs2gpo7", 0xffffff00, 0, SROM8_2G_MCSPO + 7, 0xffff},
+ {"mcs5gpo0", 0xffffff00, 0, SROM8_5G_MCSPO, 0xffff},
+ {"mcs5gpo1", 0xffffff00, 0, SROM8_5G_MCSPO + 1, 0xffff},
+ {"mcs5gpo2", 0xffffff00, 0, SROM8_5G_MCSPO + 2, 0xffff},
+ {"mcs5gpo3", 0xffffff00, 0, SROM8_5G_MCSPO + 3, 0xffff},
+ {"mcs5gpo4", 0xffffff00, 0, SROM8_5G_MCSPO + 4, 0xffff},
+ {"mcs5gpo5", 0xffffff00, 0, SROM8_5G_MCSPO + 5, 0xffff},
+ {"mcs5gpo6", 0xffffff00, 0, SROM8_5G_MCSPO + 6, 0xffff},
+ {"mcs5gpo7", 0xffffff00, 0, SROM8_5G_MCSPO + 7, 0xffff},
+ {"mcs5glpo0", 0xffffff00, 0, SROM8_5GL_MCSPO, 0xffff},
+ {"mcs5glpo1", 0xffffff00, 0, SROM8_5GL_MCSPO + 1, 0xffff},
+ {"mcs5glpo2", 0xffffff00, 0, SROM8_5GL_MCSPO + 2, 0xffff},
+ {"mcs5glpo3", 0xffffff00, 0, SROM8_5GL_MCSPO + 3, 0xffff},
+ {"mcs5glpo4", 0xffffff00, 0, SROM8_5GL_MCSPO + 4, 0xffff},
+ {"mcs5glpo5", 0xffffff00, 0, SROM8_5GL_MCSPO + 5, 0xffff},
+ {"mcs5glpo6", 0xffffff00, 0, SROM8_5GL_MCSPO + 6, 0xffff},
+ {"mcs5glpo7", 0xffffff00, 0, SROM8_5GL_MCSPO + 7, 0xffff},
+ {"mcs5ghpo0", 0xffffff00, 0, SROM8_5GH_MCSPO, 0xffff},
+ {"mcs5ghpo1", 0xffffff00, 0, SROM8_5GH_MCSPO + 1, 0xffff},
+ {"mcs5ghpo2", 0xffffff00, 0, SROM8_5GH_MCSPO + 2, 0xffff},
+ {"mcs5ghpo3", 0xffffff00, 0, SROM8_5GH_MCSPO + 3, 0xffff},
+ {"mcs5ghpo4", 0xffffff00, 0, SROM8_5GH_MCSPO + 4, 0xffff},
+ {"mcs5ghpo5", 0xffffff00, 0, SROM8_5GH_MCSPO + 5, 0xffff},
+ {"mcs5ghpo6", 0xffffff00, 0, SROM8_5GH_MCSPO + 6, 0xffff},
+ {"mcs5ghpo7", 0xffffff00, 0, SROM8_5GH_MCSPO + 7, 0xffff},
+ {"cddpo", 0x000000f0, 0, SROM4_CDDPO, 0xffff},
+ {"stbcpo", 0x000000f0, 0, SROM4_STBCPO, 0xffff},
+ {"bw40po", 0x000000f0, 0, SROM4_BW40PO, 0xffff},
+ {"bwduppo", 0x000000f0, 0, SROM4_BWDUPPO, 0xffff},
+ {"cddpo", 0xffffff00, 0, SROM8_CDDPO, 0xffff},
+ {"stbcpo", 0xffffff00, 0, SROM8_STBCPO, 0xffff},
+ {"bw40po", 0xffffff00, 0, SROM8_BW40PO, 0xffff},
+ {"bwduppo", 0xffffff00, 0, SROM8_BWDUPPO, 0xffff},
+ {"ccode", 0x0000000f, SRFL_CCODE, SROM_CCODE, 0xffff},
+ {"ccode", 0x00000010, SRFL_CCODE, SROM4_CCODE, 0xffff},
+ {"ccode", 0x000000e0, SRFL_CCODE, SROM5_CCODE, 0xffff},
+ {"ccode", 0xffffff00, SRFL_CCODE, SROM8_CCODE, 0xffff},
+ {"macaddr", 0xffffff00, SRFL_ETHADDR, SROM8_MACHI, 0xffff},
+ {"macaddr", 0x000000e0, SRFL_ETHADDR, SROM5_MACHI, 0xffff},
+ {"macaddr", 0x00000010, SRFL_ETHADDR, SROM4_MACHI, 0xffff},
+ {"macaddr", 0x00000008, SRFL_ETHADDR, SROM3_MACHI, 0xffff},
+ {"il0macaddr", 0x00000007, SRFL_ETHADDR, SROM_MACHI_IL0, 0xffff},
+ {"et1macaddr", 0x00000007, SRFL_ETHADDR, SROM_MACHI_ET1, 0xffff},
+ {"leddc", 0xffffff00, SRFL_NOFFS | SRFL_LEDDC, SROM8_LEDDC, 0xffff},
+ {"leddc", 0x000000e0, SRFL_NOFFS | SRFL_LEDDC, SROM5_LEDDC, 0xffff},
+ {"leddc", 0x00000010, SRFL_NOFFS | SRFL_LEDDC, SROM4_LEDDC, 0xffff},
+ {"leddc", 0x00000008, SRFL_NOFFS | SRFL_LEDDC, SROM3_LEDDC, 0xffff},
+ {NULL, 0, 0, 0, 0}
+};
+
+static const sromvar_t perpath_pci_sromvars[] = {
+ {"maxp2ga", 0x000000f0, 0, SROM4_2G_ITT_MAXP, 0xff},
+ {"itt2ga", 0x000000f0, 0, SROM4_2G_ITT_MAXP, 0xff00},
+ {"itt5ga", 0x000000f0, 0, SROM4_5G_ITT_MAXP, 0xff00},
+ {"pa2gw0a", 0x000000f0, SRFL_PRHEX, SROM4_2G_PA, 0xffff},
+ {"pa2gw1a", 0x000000f0, SRFL_PRHEX, SROM4_2G_PA + 1, 0xffff},
+ {"pa2gw2a", 0x000000f0, SRFL_PRHEX, SROM4_2G_PA + 2, 0xffff},
+ {"pa2gw3a", 0x000000f0, SRFL_PRHEX, SROM4_2G_PA + 3, 0xffff},
+ {"maxp5ga", 0x000000f0, 0, SROM4_5G_ITT_MAXP, 0xff},
+ {"maxp5gha", 0x000000f0, 0, SROM4_5GLH_MAXP, 0xff},
+ {"maxp5gla", 0x000000f0, 0, SROM4_5GLH_MAXP, 0xff00},
+ {"pa5gw0a", 0x000000f0, SRFL_PRHEX, SROM4_5G_PA, 0xffff},
+ {"pa5gw1a", 0x000000f0, SRFL_PRHEX, SROM4_5G_PA + 1, 0xffff},
+ {"pa5gw2a", 0x000000f0, SRFL_PRHEX, SROM4_5G_PA + 2, 0xffff},
+ {"pa5gw3a", 0x000000f0, SRFL_PRHEX, SROM4_5G_PA + 3, 0xffff},
+ {"pa5glw0a", 0x000000f0, SRFL_PRHEX, SROM4_5GL_PA, 0xffff},
+ {"pa5glw1a", 0x000000f0, SRFL_PRHEX, SROM4_5GL_PA + 1, 0xffff},
+ {"pa5glw2a", 0x000000f0, SRFL_PRHEX, SROM4_5GL_PA + 2, 0xffff},
+ {"pa5glw3a", 0x000000f0, SRFL_PRHEX, SROM4_5GL_PA + 3, 0xffff},
+ {"pa5ghw0a", 0x000000f0, SRFL_PRHEX, SROM4_5GH_PA, 0xffff},
+ {"pa5ghw1a", 0x000000f0, SRFL_PRHEX, SROM4_5GH_PA + 1, 0xffff},
+ {"pa5ghw2a", 0x000000f0, SRFL_PRHEX, SROM4_5GH_PA + 2, 0xffff},
+ {"pa5ghw3a", 0x000000f0, SRFL_PRHEX, SROM4_5GH_PA + 3, 0xffff},
+ {"maxp2ga", 0xffffff00, 0, SROM8_2G_ITT_MAXP, 0xff},
+ {"itt2ga", 0xffffff00, 0, SROM8_2G_ITT_MAXP, 0xff00},
+ {"itt5ga", 0xffffff00, 0, SROM8_5G_ITT_MAXP, 0xff00},
+ {"pa2gw0a", 0xffffff00, SRFL_PRHEX, SROM8_2G_PA, 0xffff},
+ {"pa2gw1a", 0xffffff00, SRFL_PRHEX, SROM8_2G_PA + 1, 0xffff},
+ {"pa2gw2a", 0xffffff00, SRFL_PRHEX, SROM8_2G_PA + 2, 0xffff},
+ {"maxp5ga", 0xffffff00, 0, SROM8_5G_ITT_MAXP, 0xff},
+ {"maxp5gha", 0xffffff00, 0, SROM8_5GLH_MAXP, 0xff},
+ {"maxp5gla", 0xffffff00, 0, SROM8_5GLH_MAXP, 0xff00},
+ {"pa5gw0a", 0xffffff00, SRFL_PRHEX, SROM8_5G_PA, 0xffff},
+ {"pa5gw1a", 0xffffff00, SRFL_PRHEX, SROM8_5G_PA + 1, 0xffff},
+ {"pa5gw2a", 0xffffff00, SRFL_PRHEX, SROM8_5G_PA + 2, 0xffff},
+ {"pa5glw0a", 0xffffff00, SRFL_PRHEX, SROM8_5GL_PA, 0xffff},
+ {"pa5glw1a", 0xffffff00, SRFL_PRHEX, SROM8_5GL_PA + 1, 0xffff},
+ {"pa5glw2a", 0xffffff00, SRFL_PRHEX, SROM8_5GL_PA + 2, 0xffff},
+ {"pa5ghw0a", 0xffffff00, SRFL_PRHEX, SROM8_5GH_PA, 0xffff},
+ {"pa5ghw1a", 0xffffff00, SRFL_PRHEX, SROM8_5GH_PA + 1, 0xffff},
+ {"pa5ghw2a", 0xffffff00, SRFL_PRHEX, SROM8_5GH_PA + 2, 0xffff},
+ {NULL, 0, 0, 0, 0}
+};
+
+/* Parse SROM and create name=value pairs. 'srom' points to
+ * the SROM word array. 'off' specifies the offset of the
+ * first word 'srom' points to, which should be either 0 or
+ * SROM3_SWRG_OFF (full SROM or software region).
+ */
- w = b[pathbase + SROM4_5G_ITT_MAXP];
- vp += sprintf(vp, "itt5ga%d=%d", path, w >> B5G_ITT_SHIFT);
- vp++;
- vp += sprintf(vp, "maxp5ga%d=%d", path, w & B5G_MAXP_MASK);
- vp++;
-
- w = b[pathbase + SROM4_5GLH_MAXP];
- vp += sprintf(vp, "maxp5lga%d=%d", path, w >> B5GL_MAXP_SHIFT);
- vp++;
- vp += sprintf(vp, "maxp5gha%d=%d", path, w & B5GH_MAXP_MASK);
- vp++;
-
- for (i = 0; i < 4; i++) {
- vp += sprintf(vp, "pa5gw%da%d=%d", i, path,
- b[pathbase + SROM4_5G_PA + i]);
- vp++;
- vp += sprintf(vp, "pa5glw%da%d=%d", i, path,
- b[pathbase + SROM4_5GL_PA + i]);
- vp++;
- vp += sprintf(vp, "pa5hgw%da%d=%d", i, path,
- b[pathbase + SROM4_5GH_PA + i]);
- vp++;
- }
- }
+static uint
+mask_shift (uint16 mask)
+{
+ uint i;
+ for (i = 0; i < (sizeof (mask) << 3); i++)
+ {
+ if (mask & (1 << i))
+ return i;
+ }
+ ASSERT (mask);
+ return 0;
+}
- vp += sprintf(vp, "cck2gpo=%d", b[SROM4_2G_CCKPO]);
- vp++;
-
- w32 = ((uint32)b[SROM4_2G_OFDMPO + 1] << 16) | b[SROM4_2G_OFDMPO];
- vp += sprintf(vp, "ofdm2gpo=%d", w32);
- vp++;
-
- w32 = ((uint32)b[SROM4_5G_OFDMPO + 1] << 16) | b[SROM4_5G_OFDMPO];
- vp += sprintf(vp, "ofdm5gpo=%d", w32);
- vp++;
-
- w32 = ((uint32)b[SROM4_5GL_OFDMPO + 1] << 16) | b[SROM4_5GL_OFDMPO];
- vp += sprintf(vp, "ofdm5glpo=%d", w32);
- vp++;
-
- w32 = ((uint32)b[SROM4_5GH_OFDMPO + 1] << 16) | b[SROM4_5GH_OFDMPO];
- vp += sprintf(vp, "ofdm5ghpo=%d", w32);
- vp++;
-
- for (i = 0; i < 8; i++) {
- vp += sprintf(vp, "mcs2gpo%d=%d", i, b[SROM4_2G_MCSPO]);
- vp++;
- vp += sprintf(vp, "mcs5gpo%d=%d", i, b[SROM4_5G_MCSPO]);
- vp++;
- vp += sprintf(vp, "mcs5glpo%d=%d", i, b[SROM4_5GL_MCSPO]);
- vp++;
- vp += sprintf(vp, "mcs5ghpo%d=%d", i, b[SROM4_5GH_MCSPO]);
- vp++;
- }
+static uint
+mask_width (uint16 mask)
+{
+ int i;
+ for (i = (sizeof (mask) << 3) - 1; i >= 0; i--)
+ {
+ if (mask & (1 << i))
+ return (uint) (i - mask_shift (mask) + 1);
+ }
+ ASSERT (mask);
+ return 0;
+}
- vp += sprintf(vp, "ccdpo%d=%d", i, b[SROM4_CCDPO]);
- vp++;
- vp += sprintf(vp, "stbcpo%d=%d", i, b[SROM4_STBCPO]);
- vp++;
- vp += sprintf(vp, "bw40po%d=%d", i, b[SROM4_BW40PO]);
- vp++;
- vp += sprintf(vp, "bwduppo%d=%d", i, b[SROM4_BWDUPPO]);
- vp++;
+#ifdef BCMDBG_ASSERT
+static bool
+mask_valid (uint16 mask)
+{
+ uint shift = mask_shift (mask);
+ uint width = mask_width (mask);
+ return mask == ((~0 << shift) & ~(~0 << (shift + width)));
+}
+#endif
- goto done;
+static void
+_initvars_srom_pci (uint8 sromrev, uint16 * srom, uint off, varbuf_t * b)
+{
+ uint16 w;
+ uint32 val;
+ const sromvar_t *srv;
+ uint width;
+ uint flags;
+ uint32 sr = (1 << sromrev);
+
+ varbuf_append (b, "sromrev=%d", sromrev);
+
+ for (srv = pci_sromvars; srv->name != NULL; srv++)
+ {
+ const char *name;
+
+ if ((srv->revmask & sr) == 0)
+ continue;
+
+ if (srv->off < off)
+ continue;
+
+ flags = srv->flags;
+ name = srv->name;
+
+ if (flags & SRFL_ETHADDR)
+ {
+ char eabuf[ETHER_ADDR_STR_LEN];
+ struct ether_addr ea;
+
+ ea.octet[0] = (srom[srv->off - off] >> 8) & 0xff;
+ ea.octet[1] = srom[srv->off - off] & 0xff;
+ ea.octet[2] = (srom[srv->off + 1 - off] >> 8) & 0xff;
+ ea.octet[3] = srom[srv->off + 1 - off] & 0xff;
+ ea.octet[4] = (srom[srv->off + 2 - off] >> 8) & 0xff;
+ ea.octet[5] = srom[srv->off + 2 - off] & 0xff;
+ bcm_ether_ntoa (&ea, eabuf);
+
+ varbuf_append (b, "%s=%s", name, eabuf);
}
- if (sromrev >= 3) {
- /* New section takes over the 3th hardware function space */
-
- /* Words 22+23 are 11a (mid) ofdm power offsets */
- w32 = ((uint32)b[23] << 16) | b[22];
- vp += sprintf(vp, "ofdmapo=%d", w32);
- vp++;
-
- /* Words 24+25 are 11a (low) ofdm power offsets */
- w32 = ((uint32)b[25] << 16) | b[24];
- vp += sprintf(vp, "ofdmalpo=%d", w32);
- vp++;
-
- /* Words 26+27 are 11a (high) ofdm power offsets */
- w32 = ((uint32)b[27] << 16) | b[26];
- vp += sprintf(vp, "ofdmahpo=%d", w32);
- vp++;
-
- /* LED Powersave duty cycle (oncount >> 24) (offcount >> 8) */
- w32 = ((uint32)((unsigned char)(b[21] >> 8) & 0xff) << 24) | /* oncount */
- ((uint32)((unsigned char)(b[21] & 0xff)) << 8); /* offcount */
- vp += sprintf(vp, "leddc=%d", w32);
-
- vp++;
+ else
+ {
+ ASSERT (mask_valid (srv->mask));
+ ASSERT (mask_width (srv->mask));
+
+ w = srom[srv->off - off];
+ val = (w & srv->mask) >> mask_shift (srv->mask);
+ width = mask_width (srv->mask);
+
+ while (srv->flags & SRFL_MORE)
+ {
+ srv++;
+ ASSERT (srv->name);
+
+ if (srv->off == 0 || srv->off < off)
+ continue;
+
+ ASSERT (mask_valid (srv->mask));
+ ASSERT (mask_width (srv->mask));
+
+ w = srom[srv->off - off];
+ val += ((w & srv->mask) >> mask_shift (srv->mask)) << width;
+ width += mask_width (srv->mask);
+ }
+
+ if ((flags & SRFL_NOFFS) && ((int) val == (1 << width) - 1))
+ continue;
+
+ if (flags & SRFL_CCODE)
+ {
+ if (val == 0)
+ varbuf_append (b, "ccode=");
+ else
+ varbuf_append (b, "ccode=%c%c", (val >> 8), (val & 0xff));
+ }
+ /* LED Powersave duty cycle has to be scaled:
+ *(oncount >> 24) (offcount >> 8)
+ */
+ else if (flags & SRFL_LEDDC)
+ {
+ uint32 w32 = (((val >> 8) & 0xff) << 24) | /* oncount */
+ (((val & 0xff)) << 8); /* offcount */
+ varbuf_append (b, "leddc=%d", w32);
+ }
+ else if (flags & SRFL_PRHEX)
+ varbuf_append (b, "%s=0x%x", name, val);
+ else if ((flags & SRFL_PRSIGN) && (val & (1 << (width - 1))))
+ varbuf_append (b, "%s=%d", name, (int) (val | (~0 << width)));
+ else
+ varbuf_append (b, "%s=%u", name, val);
}
+ }
- if (sromrev >= 2) {
- /* New section takes over the 4th hardware function space */
-
- /* Word 29 is max power 11a high/low */
- w = b[29];
- vp += sprintf(vp, "pa1himaxpwr=%d", w & 0xff);
- vp++;
- vp += sprintf(vp, "pa1lomaxpwr=%d", (w >> 8) & 0xff);
- vp++;
-
- /* Words 30-32 set the 11alow pa settings,
- * 33-35 are the 11ahigh ones.
- */
- for (i = 0; i < 3; i++) {
- vp += sprintf(vp, "pa1lob%d=%d", i, b[30 + i]);
- vp++;
- vp += sprintf(vp, "pa1hib%d=%d", i, b[33 + i]);
- vp++;
- }
- w = b[59];
- if (w == 0)
- vp += sprintf(vp, "ccode=");
- else
- vp += sprintf(vp, "ccode=%c%c", (w >> 8), (w & 0xff));
- vp++;
+ if (sromrev >= 4)
+ {
+ /* Do per-path variables */
+ uint p, pb, psz;
+ if (sromrev >= 8)
+ {
+ pb = SROM8_PATH0;
+ psz = SROM8_PATH1 - SROM8_PATH0;
}
-
- /* parameter section of sprom starts at byte offset 72 */
- woff = 72/2;
-
- /* first 6 bytes are il0macaddr */
- ea.octet[0] = (b[woff] >> 8) & 0xff;
- ea.octet[1] = b[woff] & 0xff;
- ea.octet[2] = (b[woff+1] >> 8) & 0xff;
- ea.octet[3] = b[woff+1] & 0xff;
- ea.octet[4] = (b[woff+2] >> 8) & 0xff;
- ea.octet[5] = b[woff+2] & 0xff;
- woff += 3;
- bcm_ether_ntoa(&ea, eabuf);
- vp += sprintf(vp, "il0macaddr=%s", eabuf);
- vp++;
-
- /* next 6 bytes are et0macaddr */
- ea.octet[0] = (b[woff] >> 8) & 0xff;
- ea.octet[1] = b[woff] & 0xff;
- ea.octet[2] = (b[woff+1] >> 8) & 0xff;
- ea.octet[3] = b[woff+1] & 0xff;
- ea.octet[4] = (b[woff+2] >> 8) & 0xff;
- ea.octet[5] = b[woff+2] & 0xff;
- woff += 3;
- bcm_ether_ntoa(&ea, eabuf);
- vp += sprintf(vp, "et0macaddr=%s", eabuf);
- vp++;
-
- /* next 6 bytes are et1macaddr */
- ea.octet[0] = (b[woff] >> 8) & 0xff;
- ea.octet[1] = b[woff] & 0xff;
- ea.octet[2] = (b[woff+1] >> 8) & 0xff;
- ea.octet[3] = b[woff+1] & 0xff;
- ea.octet[4] = (b[woff+2] >> 8) & 0xff;
- ea.octet[5] = b[woff+2] & 0xff;
- woff += 3;
- bcm_ether_ntoa(&ea, eabuf);
- vp += sprintf(vp, "et1macaddr=%s", eabuf);
- vp++;
-
- /*
- * Enet phy settings one or two singles or a dual
- * Bits 4-0 : MII address for enet0 (0x1f for not there)
- * Bits 9-5 : MII address for enet1 (0x1f for not there)
- * Bit 14 : Mdio for enet0
- * Bit 15 : Mdio for enet1
- */
- w = b[woff];
- vp += sprintf(vp, "et0phyaddr=%d", (w & 0x1f));
- vp++;
- vp += sprintf(vp, "et1phyaddr=%d", ((w >> 5) & 0x1f));
- vp++;
- vp += sprintf(vp, "et0mdcport=%d", ((w >> 14) & 0x1));
- vp++;
- vp += sprintf(vp, "et1mdcport=%d", ((w >> 15) & 0x1));
- vp++;
-
- /* Word 46 has board rev, antennas 0/1 & Country code/control */
- w = b[46];
- vp += sprintf(vp, "boardrev=%d", w & 0xff);
- vp++;
-
- if (sromrev > 1)
- vp += sprintf(vp, "cctl=%d", (w >> 8) & 0xf);
- else
- vp += sprintf(vp, "cc=%d", (w >> 8) & 0xf);
- vp++;
-
- vp += sprintf(vp, "aa2g=%d", (w >> 12) & 0x3);
- vp++;
-
- vp += sprintf(vp, "aa5g=%d", (w >> 14) & 0x3);
- vp++;
-
- /* Words 47-49 set the (wl) pa settings */
- woff = 47;
-
- for (i = 0; i < 3; i++) {
- vp += sprintf(vp, "pa0b%d=%d", i, b[woff+i]);
- vp++;
- vp += sprintf(vp, "pa1b%d=%d", i, b[woff+i+6]);
- vp++;
+ else
+ {
+ pb = SROM4_PATH0;
+ psz = SROM4_PATH1 - SROM4_PATH0;
}
- /*
- * Words 50-51 set the customer-configured wl led behavior.
- * 8 bits/gpio pin. High bit: activehi=0, activelo=1;
- * LED behavior values defined in wlioctl.h .
- */
- w = b[50];
- if ((w != 0) && (w != 0xffff)) {
- /* ledbh0 */
- vp += sprintf(vp, "ledbh0=%d", (w & 0xff));
- vp++;
-
- /* ledbh1 */
- vp += sprintf(vp, "ledbh1=%d", (w >> 8) & 0xff);
- vp++;
- }
- w = b[51];
- if ((w != 0) && (w != 0xffff)) {
- /* ledbh2 */
- vp += sprintf(vp, "ledbh2=%d", w & 0xff);
- vp++;
-
- /* ledbh */
- vp += sprintf(vp, "ledbh3=%d", (w >> 8) & 0xff);
- vp++;
+ for (p = 0; p < MAX_PATH; p++)
+ {
+ for (srv = perpath_pci_sromvars; srv->name != NULL; srv++)
+ {
+ if ((srv->revmask & sr) == 0)
+ continue;
+
+ if (pb + srv->off < off)
+ continue;
+
+ w = srom[pb + srv->off - off];
+ ASSERT (mask_valid (srv->mask));
+ val = (w & srv->mask) >> mask_shift (srv->mask);
+ width = mask_width (srv->mask);
+
+ /* Cheating: no per-path var is more than 1 word */
+
+ if ((srv->flags & SRFL_NOFFS)
+ && ((int) val == (1 << width) - 1))
+ continue;
+
+ if (srv->flags & SRFL_PRHEX)
+ varbuf_append (b, "%s%d=0x%x", srv->name, p, val);
+ else
+ varbuf_append (b, "%s%d=%d", srv->name, p, val);
+ }
+ pb += psz;
}
+ }
+}
- /* Word 52 is max power 0/1 */
- w = b[52];
- vp += sprintf(vp, "pa0maxpwr=%d", w & 0xff);
- vp++;
- vp += sprintf(vp, "pa1maxpwr=%d", (w >> 8) & 0xff);
- vp++;
-
- /* Word 56 is idle tssi target 0/1 */
- w = b[56];
- vp += sprintf(vp, "pa0itssit=%d", w & 0xff);
- vp++;
- vp += sprintf(vp, "pa1itssit=%d", (w >> 8) & 0xff);
- vp++;
-
- /* Word 57 is boardflags, if not programmed make it zero */
- w32 = (uint32)b[57];
- if (w32 == 0xffff) w32 = 0;
- if (sromrev > 1) {
- /* Word 28 is the high bits of boardflags */
- w32 |= (uint32)b[28] << 16;
+static int
+initvars_srom_pci (sb_t * sbh, void *curmap, char **vars, uint * count)
+{
+ uint16 *srom;
+ uint8 sromrev = 0;
+ uint32 sr;
+ varbuf_t b;
+ char *vp, *base = NULL;
+ osl_t *osh = sb_osh (sbh);
+ bool flash = FALSE;
+ char *value;
+ int err;
+
+ /*
+ * Apply CRC over SROM content regardless SROM is present or not,
+ * and use variable <devpath>sromrev's existance in flash to decide
+ * if we should return an error when CRC fails or read SROM variables
+ * from flash.
+ */
+ srom = MALLOC (osh, SROM_MAX);
+ ASSERT (srom);
+ if (!srom)
+ return -2;
+
+ err =
+ sprom_read_pci (osh, (void *) ((int8 *) curmap + PCI_BAR0_SPROM_OFFSET),
+ 0, srom, SROM_WORDS, TRUE);
+
+ if ((srom[SROM4_SIGN] == SROM4_SIGNATURE) ||
+ ((sbh->buscoretype == SB_PCIE) && (sbh->buscorerev >= 6)))
+ {
+ /* sromrev >= 4, read more */
+ err =
+ sprom_read_pci (osh,
+ (void *) ((int8 *) curmap + PCI_BAR0_SPROM_OFFSET), 0,
+ srom, SROM4_WORDS, TRUE);
+ sromrev = srom[SROM4_CRCREV] & 0xff;
+ }
+ else if (err == 0)
+ {
+ /* srom is good and is rev < 4 */
+ /* top word of sprom contains version and crc8 */
+ sromrev = srom[SROM_CRCREV] & 0xff;
+ /* bcm4401 sroms misprogrammed */
+ if (sromrev == 0x10)
+ sromrev = 1;
+ }
+
+ if (err)
+ {
+#ifdef WLTEST
+ uint32 val;
+
+ BS_ERROR (("SROM Crc Error, so see if we could use a default\n"));
+ val = OSL_PCI_READ_CONFIG (osh, PCI_SPROM_CONTROL, sizeof (uint32));
+ if (val & SPROM_OTPIN_USE)
+ {
+ BS_ERROR (("srom crc failed with OTP, use default vars....\n"));
+ vp = base = mfgsromvars;
+ if (sb_chip (sbh) == BCM4311_CHIP_ID)
+ {
+ const char *devid = "devid=0x4311";
+ const size_t devid_strlen = strlen (devid);
+ BS_ERROR (("setting the devid to be 4311\n"));
+ bcopy (devid, vp, devid_strlen + 1);
+ vp += devid_strlen + 1;
+ }
+ bcopy (defaultsromvars, vp, MFGSROM_DEFVARSLEN);
+ vp += MFGSROM_DEFVARSLEN;
+ goto varsdone;
}
- vp += sprintf(vp, "boardflags=%d", w32);
- vp++;
-
- /* Word 58 is antenna gain 0/1 */
- w = b[58];
- vp += sprintf(vp, "ag0=%d", w & 0xff);
- vp++;
-
- vp += sprintf(vp, "ag1=%d", (w >> 8) & 0xff);
- vp++;
-
- if (sromrev == 1) {
- /* set the oem string */
- vp += sprintf(vp, "oem=%02x%02x%02x%02x%02x%02x%02x%02x",
- ((b[59] >> 8) & 0xff), (b[59] & 0xff),
- ((b[60] >> 8) & 0xff), (b[60] & 0xff),
- ((b[61] >> 8) & 0xff), (b[61] & 0xff),
- ((b[62] >> 8) & 0xff), (b[62] & 0xff));
- vp++;
- } else if (sromrev == 2) {
- /* Word 60 OFDM tx power offset from CCK level */
- /* OFDM Power Offset - opo */
- vp += sprintf(vp, "opo=%d", b[60] & 0xff);
- vp++;
- } else {
- /* Word 60: cck power offsets */
- vp += sprintf(vp, "cckpo=%d", b[60]);
- vp++;
-
- /* Words 61+62: 11g ofdm power offsets */
- w32 = ((uint32)b[62] << 16) | b[61];
- vp += sprintf(vp, "ofdmgpo=%d", w32);
- vp++;
+ else
+ {
+#endif /* WLTEST */
+ BS_ERROR (("srom crc failed with SPROM....\n"));
+ if (!(value = sb_getdevpathvar (sbh, "sromrev")))
+ {
+ err = -1;
+ goto errout;
+ }
+ sromrev = (uint8) simple_strtoul (value, NULL, 0);
+ flash = TRUE;
+#ifdef WLTEST
}
-
- /* final nullbyte terminator */
-done: *vp++ = '\0';
-
- ASSERT((vp - base) <= VARS_MAX);
+#endif /* WLTEST */
+ }
+
+ /* Bitmask for the sromrev */
+ sr = 1 << sromrev;
+
+ /* srom version check
+ * Current valid versions: 1, 2, 3, 4, 5, 8
+ */
+ if ((sr & 0x13e) == 0)
+ {
+ err = -2;
+ goto errout;
+ }
+
+ ASSERT (vars);
+ ASSERT (count);
+
+ base = vp = MALLOC (osh, MAXSZ_NVRAM_VARS);
+ ASSERT (vp);
+ if (!vp)
+ {
+ err = -2;
+ goto errout;
+ }
+
+ /* read variables from flash */
+ if (flash)
+ {
+ if ((err = initvars_flash (sbh, osh, &vp, MAXSZ_NVRAM_VARS)))
+ goto errout;
+ goto varsdone;
+ }
+
+ varbuf_init (&b, base, MAXSZ_NVRAM_VARS);
+
+ /* parse SROM into name=value pairs. */
+ _initvars_srom_pci (sromrev, srom, 0, &b);
+
+ /* final nullbyte terminator */
+ ASSERT (b.size >= 1);
+ vp = b.buf;
+ *vp++ = '\0';
+
+ ASSERT ((vp - base) <= MAXSZ_NVRAM_VARS);
varsdone:
- err = initvars_table(osh, base, vp, vars, count);
+ err = initvars_table (osh, base, vp, vars, count);
-err:
+errout:
#ifdef WLTEST
- if (base != mfgsromvars)
+ if (base && (base != mfgsromvars))
+#else
+ if (base)
#endif
- MFREE(osh, base, VARS_MAX);
- MFREE(osh, b, SROM_MAX);
- return err;
+ MFREE (osh, base, MAXSZ_NVRAM_VARS);
+
+ MFREE (osh, srom, SROM_MAX);
+ return err;
}
/*
* Return 0 on success, nonzero on error.
*/
static int
-initvars_cis_pcmcia(void *sbh, osl_t *osh, char **vars, uint *count)
+initvars_cis_pcmcia (sb_t * sbh, osl_t * osh, char **vars, uint * count)
{
- uint8 *cis = NULL;
- int rc;
- uint data_sz;
+ uint8 *cis = NULL;
+ int rc;
+ uint data_sz;
+
+ data_sz = (sb_pcmciarev (sbh) == 1) ? (SPROM_SIZE * 2) : CIS_SIZE;
+
+ if ((cis = MALLOC (osh, data_sz)) == NULL)
+ return (-2);
+
+ if (sb_pcmciarev (sbh) == 1)
+ {
+ if (srom_read
+ (sbh, PCMCIA_BUS, (void *) NULL, osh, 0, data_sz, (uint16 *) cis))
+ {
+ MFREE (osh, cis, data_sz);
+ return (-1);
+ }
+ /* fix up endianess for 16-bit data vs 8-bit parsing */
+ htol16_buf ((uint16 *) cis, data_sz);
+ }
+ else
+ OSL_PCMCIA_READ_ATTR (osh, 0, cis, data_sz);
+
+ rc = srom_parsecis (osh, &cis, 1, vars, count);
- data_sz = (sb_pcmciarev(sbh) == 1) ? (SPROM_SIZE * 2) : CIS_SIZE;
+ MFREE (osh, cis, data_sz);
- if ((cis = MALLOC(osh, data_sz)) == NULL)
- return (-2);
+ return (rc);
+}
+
+
+static int
+BCMINITFN (initvars_srom_sb) (sb_t * sbh, osl_t * osh, void *curmap,
+ char **vars, uint * varsz)
+{
+#if defined(BCMSDIODEV)
+ /* CIS is read and supplied by the host */
+ return BCME_OK;
+#elif defined(BCMUSBDEV)
+ static bool srvars = FALSE; /* Use OTP/SPROM as global variables */
+
+ int sel = 0; /* where to read the srom. 0 - nowhere, 1 - otp, 2 - sprom */
+ uint sz = 0; /* srom size in bytes */
+ void *oh = NULL;
+ int rc = BCME_OK;
+
+ /* Bail out if we've dealt with OTP/SPROM before! */
+ if (srvars)
+ return 0;
+
+#if defined(BCM4328)
+ if (sbh->chip == BCM4328_CHIP_ID)
+ {
+ /* Access the SPROM if it is present */
+ if ((sz = srom_size (sbh, osh)) != 0)
+ {
+ sz <<= 1;
+ sel = 2;
+ }
+ }
+#endif
+#if defined(BCM4325)
+ if (sbh->chip == BCM4325_CHIP_ID)
+ {
+ uint32 cst = sbh->chipst & CST4325_SPROM_OTP_SEL_MASK;
+
+ /* Access OTP if it is present, powered on, and programmed */
+ if ((oh = otp_init (sbh)) != NULL && (otp_status (oh) & OTPS_GUP_SW))
+ {
+ sz = otp_size (oh);
+ sel = 1;
+ }
+ /* Access the SPROM if it is present and allow to be accessed */
+ else if ((cst == CST4325_OTP_PWRDN || cst == CST4325_SPROM_SEL) &&
+ (sz = srom_size (sbh, osh)) != 0)
+ {
+ sz <<= 1;
+ sel = 2;
+ }
+ }
+#endif /* BCM4325 */
+
+ /* Read CIS in OTP/SPROM */
+ if (sel != 0)
+ {
+ uint16 *srom;
+ uint8 *body = NULL;
+
+ ASSERT (sz);
+
+ /* Allocate memory */
+ if ((srom = (uint16 *) MALLOC (osh, sz)) == NULL)
+ return BCME_NOMEM;
+
+ /* Read CIS */
+ switch (sel)
+ {
+ case 1:
+ rc = otp_read_region (oh, OTP_SW_RGN, srom, sz);
+ body = (uint8 *) srom;
+ break;
+ case 2:
+ rc = srom_read (sbh, SB_BUS, curmap, osh, 0, sz, srom);
+ /* sprom has 8 byte h/w header */
+ body = (uint8 *) srom + SBSDIO_SPROM_CIS_OFFSET;
+ break;
+ default:
+ /* impossible to come here */
+ ASSERT (0);
+ break;
+ }
- if (sb_pcmciarev(sbh) == 1) {
- if (srom_read(PCMCIA_BUS, (void *)NULL, osh, 0, data_sz, (uint16 *)cis)) {
- MFREE(osh, cis, data_sz);
- return (-1);
+ /* Parse CIS */
+ if (rc == BCME_OK)
+ {
+ uint i, tpls = 0xffffffff;
+ /* # sdiod fns + common + extra */
+ uint8 *cis[SBSDIO_NUM_FUNCTION + 2];
+ uint ciss = 0;
+
+ /* each word is in host endian */
+ htol16_buf ((uint8 *) srom, sz);
+
+ ASSERT (body);
+
+ /* count cis tuple chains */
+ for (i = 0; i < sz && ciss < ARRAYSIZE (cis) && tpls != 0; i++)
+ {
+ cis[ciss++] = &body[i];
+ for (tpls = 0; i < sz - 1; tpls++)
+ {
+ if (body[i++] == CISTPL_END)
+ break;
+ i += body[i] + 1;
}
- /* fix up endianess for 16-bit data vs 8-bit parsing */
- ltoh16_buf((uint16 *)cis, data_sz);
- } else
- OSL_PCMCIA_READ_ATTR(osh, 0, cis, data_sz);
+ }
- rc = srom_parsecis(osh, &cis, 1, vars, count);
+ /* call parser routine only when there are tuple chains */
+ if (ciss > 1)
+ rc = srom_parsecis (osh, cis, ciss, vars, varsz);
+ }
+
+ /* Clean up */
+ MFREE (osh, srom, sz);
- MFREE(osh, cis, data_sz);
+ /* Make SROM variables global */
+ if (rc == BCME_OK)
+ {
+ rc = nvram_append ((void *) sbh, *vars, *varsz);
+ srvars = TRUE;
- return (rc);
+ /* Tell the caller there is no individual SROM variables */
+ *vars = NULL;
+ *varsz = 0;
+ }
+ }
+
+ return rc;
+#else /* !BCMUSBDEV && !BCMSDIODEV */
+ /* Search flash nvram section for srom variables */
+ return initvars_flash_sb (sbh, vars, varsz);
+#endif /* !BCMUSBDEV && !BCMSDIODEV */
}
+#ifdef BCMUSBDEV
+/* Return sprom size in 16-bit words */
+static uint
+srom_size (sb_t * sbh, osl_t * osh)
+{
+ uint size = 0;
+ if (SPROMBUS == PCMCIA_BUS)
+ {
+ uint32 origidx;
+ sdpcmd_regs_t *pcmregs;
+ bool wasup;
+
+ origidx = sb_coreidx (sbh);
+ pcmregs = sb_setcore (sbh, SB_PCMCIA, 0);
+ ASSERT (pcmregs);
+
+ if (!(wasup = sb_iscoreup (sbh)))
+ sb_core_reset (sbh, 0, 0);
+
+ /* not worry about earlier core revs */
+ if (sb_corerev (sbh) < 8)
+ goto done;
+
+ /* SPROM is accessible only in PCMCIA mode unless there is SDIO clock */
+ if (!(R_REG (osh, &pcmregs->corestatus) & CS_PCMCIAMODE))
+ goto done;
+
+ switch (SB_PCMCIA_READ (osh, pcmregs, SROM_INFO) & SRI_SZ_MASK)
+ {
+ case 1:
+ size = 256; /* SROM_INFO == 1 means 4kbit */
+ break;
+ case 2:
+ size = 1024; /* SROM_INFO == 2 means 16kbit */
+ break;
+ default:
+ break;
+ }
+
+ done:
+ if (!wasup)
+ sb_core_disable (sbh, 0);
+
+ sb_setcoreidx (sbh, origidx);
+ }
+ return size;
+}
+#endif /* def BCMUSBDEV */
+++ /dev/null
-/*
- * Misc useful OS-independent routines.
- *
- * Copyright 2006, Broadcom Corporation
- * All Rights Reserved.
- *
- * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
- * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
- * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
- * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
- * $Id: bcmutils.c,v 1.1.1.12 2006/02/27 03:43:16 honor Exp $
- */
-
-#include <typedefs.h>
-#include <bcmdefs.h>
-#include <stdarg.h>
-#include <bcmutils.h>
-#include <osl.h>
-#include <sbutils.h>
-#include <bcmnvram.h>
-#include <bcmendian.h>
-#include <bcmdevs.h>
-
-unsigned char bcm_ctype[] = {
- _BCM_C,_BCM_C,_BCM_C,_BCM_C,_BCM_C,_BCM_C,_BCM_C,_BCM_C, /* 0-7 */
- _BCM_C, _BCM_C|_BCM_S, _BCM_C|_BCM_S, _BCM_C|_BCM_S, _BCM_C|_BCM_S, _BCM_C|_BCM_S, _BCM_C,
- _BCM_C, /* 8-15 */
- _BCM_C,_BCM_C,_BCM_C,_BCM_C,_BCM_C,_BCM_C,_BCM_C,_BCM_C, /* 16-23 */
- _BCM_C,_BCM_C,_BCM_C,_BCM_C,_BCM_C,_BCM_C,_BCM_C,_BCM_C, /* 24-31 */
- _BCM_S|_BCM_SP,_BCM_P,_BCM_P,_BCM_P,_BCM_P,_BCM_P,_BCM_P,_BCM_P, /* 32-39 */
- _BCM_P,_BCM_P,_BCM_P,_BCM_P,_BCM_P,_BCM_P,_BCM_P,_BCM_P, /* 40-47 */
- _BCM_D,_BCM_D,_BCM_D,_BCM_D,_BCM_D,_BCM_D,_BCM_D,_BCM_D, /* 48-55 */
- _BCM_D,_BCM_D,_BCM_P,_BCM_P,_BCM_P,_BCM_P,_BCM_P,_BCM_P, /* 56-63 */
- _BCM_P, _BCM_U|_BCM_X, _BCM_U|_BCM_X, _BCM_U|_BCM_X, _BCM_U|_BCM_X, _BCM_U|_BCM_X,
- _BCM_U|_BCM_X, _BCM_U, /* 64-71 */
- _BCM_U,_BCM_U,_BCM_U,_BCM_U,_BCM_U,_BCM_U,_BCM_U,_BCM_U, /* 72-79 */
- _BCM_U,_BCM_U,_BCM_U,_BCM_U,_BCM_U,_BCM_U,_BCM_U,_BCM_U, /* 80-87 */
- _BCM_U,_BCM_U,_BCM_U,_BCM_P,_BCM_P,_BCM_P,_BCM_P,_BCM_P, /* 88-95 */
- _BCM_P, _BCM_L|_BCM_X, _BCM_L|_BCM_X, _BCM_L|_BCM_X, _BCM_L|_BCM_X, _BCM_L|_BCM_X,
- _BCM_L|_BCM_X, _BCM_L, /* 96-103 */
- _BCM_L,_BCM_L,_BCM_L,_BCM_L,_BCM_L,_BCM_L,_BCM_L,_BCM_L, /* 104-111 */
- _BCM_L,_BCM_L,_BCM_L,_BCM_L,_BCM_L,_BCM_L,_BCM_L,_BCM_L, /* 112-119 */
- _BCM_L,_BCM_L,_BCM_L,_BCM_P,_BCM_P,_BCM_P,_BCM_P,_BCM_C, /* 120-127 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 128-143 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 144-159 */
- _BCM_S|_BCM_SP, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P,
- _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, /* 160-175 */
- _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P,
- _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, /* 176-191 */
- _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U,
- _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, /* 192-207 */
- _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_P, _BCM_U, _BCM_U, _BCM_U,
- _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_L, /* 208-223 */
- _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L,
- _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, /* 224-239 */
- _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_P, _BCM_L, _BCM_L, _BCM_L,
- _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L /* 240-255 */
-};
-
-
-ulong
-bcm_strtoul(char *cp, char **endp, uint base)
-{
- ulong result, value;
- bool minus;
-
- minus = FALSE;
-
- while (bcm_isspace(*cp))
- cp++;
-
- if (cp[0] == '+')
- cp++;
- else if (cp[0] == '-') {
- minus = TRUE;
- cp++;
- }
-
- if (base == 0) {
- if (cp[0] == '0') {
- if ((cp[1] == 'x') || (cp[1] == 'X')) {
- base = 16;
- cp = &cp[2];
- } else {
- base = 8;
- cp = &cp[1];
- }
- } else
- base = 10;
- } else if (base == 16 && (cp[0] == '0') && ((cp[1] == 'x') || (cp[1] == 'X'))) {
- cp = &cp[2];
- }
-
- result = 0;
-
- while (bcm_isxdigit(*cp) &&
- (value = bcm_isdigit(*cp) ? *cp-'0' : bcm_toupper(*cp)-'A'+10) < base) {
- result = result*base + value;
- cp++;
- }
-
- if (minus)
- result = (ulong)(result * -1);
-
- if (endp)
- *endp = (char *)cp;
-
- return (result);
-}
-
-uchar
-bcm_toupper(uchar c)
-{
- if (bcm_islower(c))
- c -= 'a'-'A';
- return (c);
-}
-
-char*
-bcm_ether_ntoa(struct ether_addr *ea, char *buf)
-{
- sprintf(buf, "%02x:%02x:%02x:%02x:%02x:%02x",
- ea->octet[0]&0xff, ea->octet[1]&0xff, ea->octet[2]&0xff,
- ea->octet[3]&0xff, ea->octet[4]&0xff, ea->octet[5]&0xff);
- return (buf);
-}
-
-
-/*
- * Search the name=value vars for a specific one and return its value.
- * Returns NULL if not found.
- */
-char*
-getvar(char *vars, char *name)
-{
- char *s;
- int len;
-
- len = strlen(name);
-
- /* first look in vars[] */
- for (s = vars; s && *s;) {
- /* CSTYLED */
- if ((memcmp(s, name, len) == 0) && (s[len] == '='))
- return (&s[len+1]);
-
- while (*s++)
- ;
- }
-
- /* then query nvram */
- return (nvram_get(name));
-}
-
-/*
- * Search the vars for a specific one and return its value as
- * an integer. Returns 0 if not found.
- */
-int
-getintvar(char *vars, char *name)
-{
- char *val;
-
- if ((val = getvar(vars, name)) == NULL)
- return (0);
-
- return (bcm_strtoul(val, NULL, 0));
-}
-
-
-/*******************************************************************************
- * crc8
- *
- * Computes a crc8 over the input data using the polynomial:
- *
- * x^8 + x^7 +x^6 + x^4 + x^2 + 1
- *
- * The caller provides the initial value (either CRC8_INIT_VALUE
- * or the previous returned value) to allow for processing of
- * discontiguous blocks of data. When generating the CRC the
- * caller is responsible for complementing the final return value
- * and inserting it into the byte stream. When checking, a final
- * return value of CRC8_GOOD_VALUE indicates a valid CRC.
- *
- * Reference: Dallas Semiconductor Application Note 27
- * Williams, Ross N., "A Painless Guide to CRC Error Detection Algorithms",
- * ver 3, Aug 1993, ross@guest.adelaide.edu.au, Rocksoft Pty Ltd.,
- * ftp://ftp.rocksoft.com/clients/rocksoft/papers/crc_v3.txt
- *
- * ****************************************************************************
- */
-
-static uint8 crc8_table[256] = {
- 0x00, 0xF7, 0xB9, 0x4E, 0x25, 0xD2, 0x9C, 0x6B,
- 0x4A, 0xBD, 0xF3, 0x04, 0x6F, 0x98, 0xD6, 0x21,
- 0x94, 0x63, 0x2D, 0xDA, 0xB1, 0x46, 0x08, 0xFF,
- 0xDE, 0x29, 0x67, 0x90, 0xFB, 0x0C, 0x42, 0xB5,
- 0x7F, 0x88, 0xC6, 0x31, 0x5A, 0xAD, 0xE3, 0x14,
- 0x35, 0xC2, 0x8C, 0x7B, 0x10, 0xE7, 0xA9, 0x5E,
- 0xEB, 0x1C, 0x52, 0xA5, 0xCE, 0x39, 0x77, 0x80,
- 0xA1, 0x56, 0x18, 0xEF, 0x84, 0x73, 0x3D, 0xCA,
- 0xFE, 0x09, 0x47, 0xB0, 0xDB, 0x2C, 0x62, 0x95,
- 0xB4, 0x43, 0x0D, 0xFA, 0x91, 0x66, 0x28, 0xDF,
- 0x6A, 0x9D, 0xD3, 0x24, 0x4F, 0xB8, 0xF6, 0x01,
- 0x20, 0xD7, 0x99, 0x6E, 0x05, 0xF2, 0xBC, 0x4B,
- 0x81, 0x76, 0x38, 0xCF, 0xA4, 0x53, 0x1D, 0xEA,
- 0xCB, 0x3C, 0x72, 0x85, 0xEE, 0x19, 0x57, 0xA0,
- 0x15, 0xE2, 0xAC, 0x5B, 0x30, 0xC7, 0x89, 0x7E,
- 0x5F, 0xA8, 0xE6, 0x11, 0x7A, 0x8D, 0xC3, 0x34,
- 0xAB, 0x5C, 0x12, 0xE5, 0x8E, 0x79, 0x37, 0xC0,
- 0xE1, 0x16, 0x58, 0xAF, 0xC4, 0x33, 0x7D, 0x8A,
- 0x3F, 0xC8, 0x86, 0x71, 0x1A, 0xED, 0xA3, 0x54,
- 0x75, 0x82, 0xCC, 0x3B, 0x50, 0xA7, 0xE9, 0x1E,
- 0xD4, 0x23, 0x6D, 0x9A, 0xF1, 0x06, 0x48, 0xBF,
- 0x9E, 0x69, 0x27, 0xD0, 0xBB, 0x4C, 0x02, 0xF5,
- 0x40, 0xB7, 0xF9, 0x0E, 0x65, 0x92, 0xDC, 0x2B,
- 0x0A, 0xFD, 0xB3, 0x44, 0x2F, 0xD8, 0x96, 0x61,
- 0x55, 0xA2, 0xEC, 0x1B, 0x70, 0x87, 0xC9, 0x3E,
- 0x1F, 0xE8, 0xA6, 0x51, 0x3A, 0xCD, 0x83, 0x74,
- 0xC1, 0x36, 0x78, 0x8F, 0xE4, 0x13, 0x5D, 0xAA,
- 0x8B, 0x7C, 0x32, 0xC5, 0xAE, 0x59, 0x17, 0xE0,
- 0x2A, 0xDD, 0x93, 0x64, 0x0F, 0xF8, 0xB6, 0x41,
- 0x60, 0x97, 0xD9, 0x2E, 0x45, 0xB2, 0xFC, 0x0B,
- 0xBE, 0x49, 0x07, 0xF0, 0x9B, 0x6C, 0x22, 0xD5,
- 0xF4, 0x03, 0x4D, 0xBA, 0xD1, 0x26, 0x68, 0x9F
-};
-
-#define CRC_INNER_LOOP(n, c, x) \
- (c) = ((c) >> 8) ^ crc##n##_table[((c) ^ (x)) & 0xff]
-
-uint8
-hndcrc8(
- uint8 *pdata, /* pointer to array of data to process */
- uint nbytes, /* number of input data bytes to process */
- uint8 crc /* either CRC8_INIT_VALUE or previous return value */
-)
-{
- /* hard code the crc loop instead of using CRC_INNER_LOOP macro
- * to avoid the undefined and unnecessary (uint8 >> 8) operation.
- */
- while (nbytes-- > 0)
- crc = crc8_table[(crc ^ *pdata++) & 0xff];
-
- return crc;
-}
-
-
--- /dev/null
+/*
+ * NVRAM variable manipulation (Linux kernel half)
+ *
+ * Copyright 2001-2003, Broadcom Corporation
+ * All Rights Reserved.
+ *
+ * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
+ * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
+ * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
+ *
+ * $Id$
+ */
+
+#include <linux/config.h>
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/string.h>
+#include <asm/io.h>
+#include <asm/uaccess.h>
+
+#include <typedefs.h>
+#include <osl.h>
+#include <bcmendian.h>
+
+#define NVRAM_SIZE (0x1ff0)
+static char _nvdata[NVRAM_SIZE] __initdata;
+static char _valuestr[256] __initdata;
+
+/*
+ * TLV types. These codes are used in the "type-length-value"
+ * encoding of the items stored in the NVRAM device (flash or EEPROM)
+ *
+ * The layout of the flash/nvram is as follows:
+ *
+ * <type> <length> <data ...> <type> <length> <data ...> <type_end>
+ *
+ * The type code of "ENV_TLV_TYPE_END" marks the end of the list.
+ * The "length" field marks the length of the data section, not
+ * including the type and length fields.
+ *
+ * Environment variables are stored as follows:
+ *
+ * <type_env> <length> <flags> <name> = <value>
+ *
+ * If bit 0 (low bit) is set, the length is an 8-bit value.
+ * If bit 0 (low bit) is clear, the length is a 16-bit value
+ *
+ * Bit 7 set indicates "user" TLVs. In this case, bit 0 still
+ * indicates the size of the length field.
+ *
+ * Flags are from the constants below:
+ *
+ */
+#define ENV_LENGTH_16BITS 0x00 /* for low bit */
+#define ENV_LENGTH_8BITS 0x01
+
+#define ENV_TYPE_USER 0x80
+
+#define ENV_CODE_SYS(n,l) (((n)<<1)|(l))
+#define ENV_CODE_USER(n,l) ((((n)<<1)|(l)) | ENV_TYPE_USER)
+
+/*
+ * The actual TLV types we support
+ */
+
+#define ENV_TLV_TYPE_END 0x00
+#define ENV_TLV_TYPE_ENV ENV_CODE_SYS(0,ENV_LENGTH_8BITS)
+
+/*
+ * Environment variable flags
+ */
+
+#define ENV_FLG_NORMAL 0x00 /* normal read/write */
+#define ENV_FLG_BUILTIN 0x01 /* builtin - not stored in flash */
+#define ENV_FLG_READONLY 0x02 /* read-only - cannot be changed */
+
+#define ENV_FLG_MASK 0xFF /* mask of attributes we keep */
+#define ENV_FLG_ADMIN 0x100 /* lets us internally override permissions */
+
+
+/* *********************************************************************
+ * _nvram_read(buffer,offset,length)
+ *
+ * Read data from the NVRAM device
+ *
+ * Input parameters:
+ * buffer - destination buffer
+ * offset - offset of data to read
+ * length - number of bytes to read
+ *
+ * Return value:
+ * number of bytes read, or <0 if error occured
+ ********************************************************************* */
+static int
+_nvram_read(unsigned char *nv_buf, unsigned char *buffer, int offset, int length)
+{
+ int i;
+ if (offset > NVRAM_SIZE)
+ return -1;
+
+ for ( i = 0; i < length; i++) {
+ buffer[i] = ((volatile unsigned char*)nv_buf)[offset + i];
+ }
+ return length;
+}
+
+
+static char*
+_strnchr(const char *dest,int c,size_t cnt)
+{
+ while (*dest && (cnt > 0)) {
+ if (*dest == c) return (char *) dest;
+ dest++;
+ cnt--;
+ }
+ return NULL;
+}
+
+
+
+/*
+ * Core support API: Externally visible.
+ */
+
+/*
+ * Get the value of an NVRAM variable
+ * @param name name of variable to get
+ * @return value of variable or NULL if undefined
+ */
+
+char*
+cfe_env_get(unsigned char *nv_buf, char* name)
+{
+ int size;
+ unsigned char *buffer;
+ unsigned char *ptr;
+ unsigned char *envval;
+ unsigned int reclen;
+ unsigned int rectype;
+ int offset;
+ int flg;
+
+ size = NVRAM_SIZE;
+ buffer = &_nvdata[0];
+
+ ptr = buffer;
+ offset = 0;
+
+ /* Read the record type and length */
+ if (_nvram_read(nv_buf, ptr,offset,1) != 1) {
+ goto error;
+ }
+
+ while ((*ptr != ENV_TLV_TYPE_END) && (size > 1)) {
+
+ /* Adjust pointer for TLV type */
+ rectype = *(ptr);
+ offset++;
+ size--;
+
+ /*
+ * Read the length. It can be either 1 or 2 bytes
+ * depending on the code
+ */
+ if (rectype & ENV_LENGTH_8BITS) {
+ /* Read the record type and length - 8 bits */
+ if (_nvram_read(nv_buf, ptr,offset,1) != 1) {
+ goto error;
+ }
+ reclen = *(ptr);
+ size--;
+ offset++;
+ }
+ else {
+ /* Read the record type and length - 16 bits, MSB first */
+ if (_nvram_read(nv_buf, ptr,offset,2) != 2) {
+ goto error;
+ }
+ reclen = (((unsigned int) *(ptr)) << 8) + (unsigned int) *(ptr+1);
+ size -= 2;
+ offset += 2;
+ }
+
+ if (reclen > size)
+ break; /* should not happen, bad NVRAM */
+
+ switch (rectype) {
+ case ENV_TLV_TYPE_ENV:
+ /* Read the TLV data */
+ if (_nvram_read(nv_buf, ptr,offset,reclen) != reclen)
+ goto error;
+ flg = *ptr++;
+ envval = (unsigned char *) _strnchr(ptr,'=',(reclen-1));
+ if (envval) {
+ *envval++ = '\0';
+ memcpy(_valuestr,envval,(reclen-1)-(envval-ptr));
+ _valuestr[(reclen-1)-(envval-ptr)] = '\0';
+#if 0
+ printk(KERN_INFO "NVRAM:%s=%s\n", ptr, _valuestr);
+#endif
+ if(!strcmp(ptr, name)){
+ return _valuestr;
+ }
+ if((strlen(ptr) > 1) && !strcmp(&ptr[1], name))
+ return _valuestr;
+ }
+ break;
+
+ default:
+ /* Unknown TLV type, skip it. */
+ break;
+ }
+
+ /*
+ * Advance to next TLV
+ */
+
+ size -= (int)reclen;
+ offset += reclen;
+
+ /* Read the next record type */
+ ptr = buffer;
+ if (_nvram_read(nv_buf, ptr,offset,1) != 1)
+ goto error;
+ }
+
+error:
+ return NULL;
+
+}
+
+++ /dev/null
-#
-# Makefile for Broadcom BCM947XX boards
-#
-# Copyright 2001-2003, Broadcom Corporation
-# All Rights Reserved.
-#
-# THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
-# KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
-# SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
-# FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
-#
-# $Id: Makefile,v 1.2 2005/04/02 12:12:57 wbx Exp $
-#
-
-OBJCOPY_ARGS = -O binary -R .reginfo -R .note -R .comment -R .mdebug -S
-SYSTEM ?= $(TOPDIR)/vmlinux
-
-all: vmlinuz
-
-# Don't build dependencies, this may die if $(CC) isn't gcc
-dep:
-
-# Create a gzipped version named vmlinuz for compatibility
-vmlinuz: piggy
- gzip -c9 $< > $@
-
-piggy: $(SYSTEM)
- $(OBJCOPY) $(OBJCOPY_ARGS) $< $@
-
-mrproper: clean
-
-clean:
- rm -f vmlinuz piggy
_export(bcm947xx_sbh)
+_export(sb_alp_clock)
_export(sb_attach)
_export(sb_kattach)
+_export(sb_backplane64)
_export(sb_boardtype)
_export(sb_boardvendor)
_export(sb_btcgpiowar)
_export(sb_core_reset)
_export(sb_core_tofixup)
_export(sb_coreflags)
+_export(sb_coreflags_wo)
_export(sb_coreflagshi)
_export(sb_coreidx)
_export(sb_coreregs)
_export(sb_gpioin)
_export(sb_gpioout)
_export(sb_gpioouten)
+_export(sb_gpiopull)
_export(sb_gpiotimerval)
_export(sb_irq)
_export(sb_iscoreup)
_export(sb_pci_setup)
+_export(sb_pci_sleep)
+_export(sb_pci_down)
+_export(sb_pci_up)
_export(sb_pcirev)
_export(sb_pcmcia_init)
_export(sb_pcmciarev)
+_export(sb_pmu_paref_ldo_enable)
+_export(sb_pmu_rcal)
+_export(sb_pmu_set_ldo_voltage)
+_export(sb_deregister_intr_callback)
_export(sb_register_intr_callback)
_export(sb_setcore)
_export(sb_setcoreidx)
_export(sb_war16165)
-_export(sb_war32414_forceHT)
+_export(sb_war42780_clkreq)
_export(sb_osh)
-
+
_export(getvar)
_export(getintvar)
-_export(bcm_strtoul)
-_export(bcm_ctype)
-_export(bcm_toupper)
-_export(bcm_ether_ntoa)
_export(nvram_get)
_export(nvram_getall)
#include <typedefs.h>
#include <osl.h>
-#include <bcmutils.h>
#include <sbutils.h>
#include <bcmdevs.h>
{
int i;
- if (!(gpio_sbh = sb_kattach()))
+ if (!(gpio_sbh = sb_kattach(SB_OSH)))
return -ENODEV;
sb_gpiosetcore(gpio_sbh);
/*
- * BCM47XX support code for some chipcommon (old extif) facilities (uart)
+ * BCM47XX support code for some chipcommon facilities (uart, jtagm)
*
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
* All Rights Reserved.
*
* THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
* SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
*
- * $Id: hndchipc.c,v 1.1.1.1 2006/02/27 03:43:16 honor Exp $
+ * $Id$
*/
#include <typedefs.h>
#include <bcmdefs.h>
#include <osl.h>
-#include <bcmutils.h>
#include <sbutils.h>
#include <bcmdevs.h>
#include <bcmnvram.h>
#include <sbconfig.h>
-#include <sbextif.h>
#include <sbchipc.h>
+#include <sbextif.h>
+#include <hndchipc.h>
#include <hndcpu.h>
-/*
- * Returns TRUE if an external UART exists at the given base
- * register.
+/* debug/trace */
+#define CC_ERROR(args)
+
+#ifdef BCMDBG
+#define CC_MSG(args) printf args
+#else
+#define CC_MSG(args)
+#endif /* BCMDBG */
+
+/* interested chipcommon interrupt source
+ * - GPIO
+ * - EXTIF
+ * - ECI
+ * - PMU
+ * - UART
*/
-static bool
-BCMINITFN(serial_exists)(osl_t *osh, uint8 *regs)
-{
+#define MAX_CC_INT_SOURCE 5
+
+/* chipc secondary isr info */
+typedef struct {
+ uint intmask; /* int mask */
+ cc_isr_fn isr; /* secondary isr handler */
+ void *cbdata; /* pointer to private data */
+} cc_isr_info_t;
+
+static cc_isr_info_t cc_isr_desc[MAX_CC_INT_SOURCE];
+
+/* chip common intmask */
+static uint32 cc_intmask = 0;
+
+static bool BCMINITFN(serial_exists) (osl_t * osh, uint8 * regs) {
uint8 save_mcr, status1;
save_mcr = R_REG(osh, ®s[UART_MCR]);
return (status1 == 0x90);
}
+static void __init sb_extif_serial_init(sb_t * sbh, void *regs,
+ sb_serial_init_fn add)
+{
+ osl_t *osh = sb_osh(sbh);
+ extifregs_t *eir = (extifregs_t *) regs;
+ sbconfig_t *sb;
+ ulong base;
+ uint irq;
+ int i, n;
+
+ /* Determine external UART register base */
+ sb = (sbconfig_t *) ((ulong) eir + SBCONFIGOFF);
+ base = EXTIF_CFGIF_BASE(sb_base(R_REG(osh, &sb->sbadmatch1)));
+
+ /* Determine IRQ */
+ irq = sb_irq(sbh);
+
+ /* Disable GPIO interrupt initially */
+ W_REG(osh, &eir->gpiointpolarity, 0);
+ W_REG(osh, &eir->gpiointmask, 0);
+
+ /* Search for external UARTs */
+ n = 2;
+ for (i = 0; i < 2; i++) {
+ regs = (void *)REG_MAP(base + (i * 8), 8);
+ if (serial_exists(osh, regs)) {
+ /* Set GPIO 1 to be the external UART IRQ */
+ W_REG(osh, &eir->gpiointmask, 2);
+ /* XXXDetermine external UART clock */
+ if (add)
+ add(regs, irq, 13500000, 0);
+ }
+ }
+
+ /* Add internal UART if enabled */
+ if (R_REG(osh, &eir->corecontrol) & CC_UE)
+ if (add)
+ add((void *)&eir->uartdata, irq, sb_clock(sbh), 2);
+}
+
/*
* Initializes UART access. The callback function will be called once
* per found UART.
*/
-void
-BCMINITFN(sb_serial_init)(sb_t *sbh, void (*add)(void *regs, uint irq, uint baud_base,
- uint reg_shift))
-{
+void BCMINITFN(sb_serial_init) (sb_t * sbh, sb_serial_init_fn add) {
osl_t *osh;
void *regs;
- ulong base;
+ chipcregs_t *cc;
+ uint32 rev, cap, pll, baud_base, div;
uint irq;
int i, n;
osh = sb_osh(sbh);
- if ((regs = sb_setcore(sbh, SB_EXTIF, 0))) {
- extifregs_t *eir = (extifregs_t *) regs;
- sbconfig_t *sb;
-
- /* Determine external UART register base */
- sb = (sbconfig_t *)((ulong) eir + SBCONFIGOFF);
- base = EXTIF_CFGIF_BASE(sb_base(R_REG(osh, &sb->sbadmatch1)));
-
- /* Determine IRQ */
- irq = sb_irq(sbh);
-
- /* Disable GPIO interrupt initially */
- W_REG(osh, &eir->gpiointpolarity, 0);
- W_REG(osh, &eir->gpiointmask, 0);
-
- /* Search for external UARTs */
- n = 2;
- for (i = 0; i < 2; i++) {
- regs = (void *) REG_MAP(base + (i * 8), 8);
- if (serial_exists(osh, regs)) {
- /* Set GPIO 1 to be the external UART IRQ */
- W_REG(osh, &eir->gpiointmask, 2);
- /* XXXDetermine external UART clock */
- if (add)
- add(regs, irq, 13500000, 0);
- }
- }
+ regs = sb_setcore(sbh, SB_EXTIF, 0);
+ if (regs) {
+ sb_extif_serial_init(sbh, regs, add);
+ return;
+ }
- /* Add internal UART if enabled */
- if (R_REG(osh, &eir->corecontrol) & CC_UE)
- if (add)
- add((void *) &eir->uartdata, irq, sb_clock(sbh), 2);
- } else if ((regs = sb_setcore(sbh, SB_CC, 0))) {
- chipcregs_t *cc = (chipcregs_t *) regs;
- uint32 rev, cap, pll, baud_base, div;
+ cc = (chipcregs_t *) sb_setcore(sbh, SB_CC, 0);
+ ASSERT(cc);
- /* Determine core revision and capabilities */
- rev = sb_corerev(sbh);
- cap = R_REG(osh, &cc->capabilities);
- pll = cap & CAP_PLL_MASK;
+ /* Determine core revision and capabilities */
+ rev = sbh->ccrev;
+ cap = sbh->cccaps;
+ pll = cap & CC_CAP_PLL_MASK;
- /* Determine IRQ */
- irq = sb_irq(sbh);
+ /* Determine IRQ */
+ irq = sb_irq(sbh);
- if (pll == PLL_TYPE1) {
- /* PLL clock */
- baud_base = sb_clock_rate(pll,
- R_REG(osh, &cc->clockcontrol_n),
- R_REG(osh, &cc->clockcontrol_m2));
- div = 1;
- } else {
+ if (pll == PLL_TYPE1) {
+ /* PLL clock */
+ baud_base = sb_clock_rate(pll,
+ R_REG(osh, &cc->clockcontrol_n),
+ R_REG(osh, &cc->clockcontrol_m2));
+ div = 1;
+ } else {
+ /* 5354 chip common uart uses a constant clock
+ * frequency of 25MHz */
+ if (sb_corerev(sbh) == 20) {
+ /* Set the override bit so we don't divide it */
+ W_REG(osh, &cc->corecontrol, CC_UARTCLKO);
+ baud_base = 25000000;
+ } else if (rev >= 11 && rev != 15) {
/* Fixed ALP clock */
- if (rev >= 11 && rev != 15) {
- baud_base = 20000000;
- div = 1;
- /* Set the override bit so we don't divide it */
- W_REG(osh, &cc->corecontrol, CC_UARTCLKO);
- }
+ baud_base = sb_alp_clock(sbh);
+ div = 1;
+ /* Turn off UART clock before switching clock source */
+ if (rev >= 21)
+ AND_REG(osh, &cc->corecontrol, ~CC_UARTCLKEN);
+ /* Set the override bit so we don't divide it */
+ OR_REG(osh, &cc->corecontrol, CC_UARTCLKO);
+ if (rev >= 21)
+ OR_REG(osh, &cc->corecontrol, CC_UARTCLKEN);
+ } else if (rev >= 3) {
/* Internal backplane clock */
- else if (rev >= 3) {
- baud_base = sb_clock(sbh);
- div = 2; /* Minimum divisor */
- W_REG(osh, &cc->clkdiv,
- ((R_REG(osh, &cc->clkdiv) & ~CLKD_UART) | div));
- }
+ baud_base = sb_clock(sbh);
+ div = 2; /* Minimum divisor */
+ W_REG(osh, &cc->clkdiv,
+ ((R_REG(osh, &cc->clkdiv) & ~CLKD_UART) | div));
+ } else {
/* Fixed internal backplane clock */
- else {
- baud_base = 88000000;
- div = 48;
- }
+ baud_base = 88000000;
+ div = 48;
+ }
- /* Clock source depends on strapping if UartClkOverride is unset */
- if ((rev > 0) &&
- ((R_REG(osh, &cc->corecontrol) & CC_UARTCLKO) == 0)) {
- if ((cap & CAP_UCLKSEL) == CAP_UINTCLK) {
- /* Internal divided backplane clock */
- baud_base /= div;
- } else {
- /* Assume external clock of 1.8432 MHz */
- baud_base = 1843200;
- }
+ /* Clock source depends on strapping if UartClkOverride is unset */
+ if ((rev > 0)
+ && ((R_REG(osh, &cc->corecontrol) & CC_UARTCLKO) == 0)) {
+ if ((cap & CC_CAP_UCLKSEL) == CC_CAP_UINTCLK) {
+ /* Internal divided backplane clock */
+ baud_base /= div;
+ } else {
+ /* Assume external clock of 1.8432 MHz */
+ baud_base = 1843200;
}
}
+ }
- /* Add internal UARTs */
- n = cap & CAP_UARTS_MASK;
- for (i = 0; i < n; i++) {
- /* Register offset changed after revision 0 */
- if (rev)
- regs = (void *)((ulong) &cc->uart0data + (i * 256));
- else
- regs = (void *)((ulong) &cc->uart0data + (i * 8));
+ /* Add internal UARTs */
+ n = cap & CC_CAP_UARTS_MASK;
+ for (i = 0; i < n; i++) {
+ /* Register offset changed after revision 0 */
+ if (rev)
+ regs = (void *)((ulong) & cc->uart0data + (i * 256));
+ else
+ regs = (void *)((ulong) & cc->uart0data + (i * 8));
- if (add)
- add(regs, irq, baud_base, 0);
+ if (add)
+ add(regs, irq, baud_base, 0);
+ }
+}
+
+#if 0
+/*
+ * Initialize jtag master and return handle for
+ * jtag_rwreg. Returns NULL on failure.
+ */
+void *sb_jtagm_init(sb_t * sbh, uint clkd, bool exttap)
+{
+ void *regs;
+
+ if ((regs = sb_setcore(sbh, SB_CC, 0)) != NULL) {
+ chipcregs_t *cc = (chipcregs_t *) regs;
+ uint32 tmp;
+
+ /*
+ * Determine jtagm availability from
+ * core revision and capabilities.
+ */
+
+ /*
+ * Corerev 10 has jtagm, but the only chip
+ * with it does not have a mips, and
+ * the layout of the jtagcmd register is
+ * different. We'll only accept >= 11.
+ */
+ if (sbh->ccrev < 11)
+ return (NULL);
+
+ if ((sbh->cccaps & CC_CAP_JTAGP) == 0)
+ return (NULL);
+
+ /* Set clock divider if requested */
+ if (clkd != 0) {
+ tmp = R_REG(osh, &cc->clkdiv);
+ tmp =
+ (tmp & ~CLKD_JTAG) | ((clkd << CLKD_JTAG_SHIFT) &
+ CLKD_JTAG);
+ W_REG(osh, &cc->clkdiv, tmp);
}
+
+ /* Enable jtagm */
+ tmp = JCTRL_EN | (exttap ? JCTRL_EXT_EN : 0);
+ W_REG(osh, &cc->jtagctrl, tmp);
}
+
+ return (regs);
+}
+
+void sb_jtagm_disable(osl_t * osh, void *h)
+{
+ chipcregs_t *cc = (chipcregs_t *) h;
+
+ W_REG(osh, &cc->jtagctrl, R_REG(osh, &cc->jtagctrl) & ~JCTRL_EN);
}
+/*
+ * Read/write a jtag register. Assumes a target with
+ * 8 bit IR and 32 bit DR.
+ */
+#define IRWIDTH 8 /* Default Instruction Register width */
+#define DRWIDTH 32 /* Default Data Register width */
+
+uint32 jtag_rwreg(osl_t * osh, void *h, uint32 ir, uint32 dr)
+{
+ chipcregs_t *cc = (chipcregs_t *) h;
+ uint32 tmp;
+
+ W_REG(osh, &cc->jtagir, ir);
+ W_REG(osh, &cc->jtagdr, dr);
+ tmp = JCMD_START | JCMD_ACC_IRDR |
+ ((IRWIDTH - 1) << JCMD_IRW_SHIFT) | (DRWIDTH - 1);
+ W_REG(osh, &cc->jtagcmd, tmp);
+ while (((tmp = R_REG(osh, &cc->jtagcmd)) & JCMD_BUSY) == JCMD_BUSY) {
+ /* OSL_DELAY(1); */
+ }
+
+ tmp = R_REG(osh, &cc->jtagdr);
+ return (tmp);
+}
+#endif
+
+/*
+ * Interface to register chipc secondary isr
+ */
+bool
+BCMINITFN(sb_cc_register_isr) (sb_t * sbh, cc_isr_fn isr, uint32 ccintmask,
+ void *cbdata) {
+ bool done = FALSE;
+ chipcregs_t *regs;
+ uint origidx;
+ uint i;
+
+ /* Save the current core index */
+ origidx = sb_coreidx(sbh);
+ regs = sb_setcore(sbh, SB_CC, 0);
+ ASSERT(regs);
+
+ for (i = 0; i < MAX_CC_INT_SOURCE; i++) {
+ if (cc_isr_desc[i].isr == NULL) {
+ cc_isr_desc[i].isr = isr;
+ cc_isr_desc[i].cbdata = cbdata;
+ cc_isr_desc[i].intmask = ccintmask;
+ done = TRUE;
+ break;
+ }
+ }
+
+ if (done) {
+ cc_intmask = R_REG(sb_osh(sbh), ®s->intmask);
+ cc_intmask |= ccintmask;
+ W_REG(sb_osh(sbh), ®s->intmask, cc_intmask);
+ }
+
+ /* restore original coreidx */
+ sb_setcoreidx(sbh, origidx);
+ return done;
+}
+
+/*
+ * chipc primary interrupt handler
+ */
+void sb_cc_isr(sb_t * sbh, chipcregs_t * regs)
+{
+ uint32 ccintstatus;
+ uint32 intstatus;
+ uint32 i;
+
+ /* prior to rev 21 chipc interrupt means uart and gpio */
+ if (sbh->ccrev >= 21)
+ ccintstatus = R_REG(sb_osh(sbh), ®s->intstatus) & cc_intmask;
+ else
+ ccintstatus = (CI_UART | CI_GPIO);
+
+ for (i = 0; i < MAX_CC_INT_SOURCE; i++) {
+ if ((cc_isr_desc[i].isr != NULL) &&
+ (intstatus = (cc_isr_desc[i].intmask & ccintstatus))) {
+ (cc_isr_desc[i].isr) (cc_isr_desc[i].cbdata, intstatus);
+ }
+ }
+}
--- /dev/null
+/*
+ * Misc utility routines for accessing PMU corerev specific features
+ * of the SiliconBackplane-based Broadcom chips.
+ *
+ * Copyright 2007, Broadcom Corporation
+ * All Rights Reserved.
+ *
+ * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
+ * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
+ * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
+ * $Id$
+ */
+
+#include <typedefs.h>
+#include <bcmdefs.h>
+#include <osl.h>
+#include <sbutils.h>
+#include <bcmdevs.h>
+#include <sbconfig.h>
+#include <sbchipc.h>
+#include <hndpmu.h>
+
+/* debug/trace */
+#define PMU_ERROR(args)
+
+#ifdef BCMDBG
+#define PMU_MSG(args) printf args
+#else
+#define PMU_MSG(args)
+#endif /* BCMDBG */
+
+/* PMU & control */
+/* PMU rev 0 pll control for BCM4328 and BCM5354 */
+static void sb_pmu0_pllinit0 (sb_t * sbh, osl_t * osh, chipcregs_t * cc,
+ uint32 xtal);
+static uint32 sb_pmu0_alpclk0 (sb_t * sbh, osl_t * osh, chipcregs_t * cc);
+static uint32 sb_pmu0_cpuclk0 (sb_t * sbh, osl_t * osh, chipcregs_t * cc);
+/* PMU rev 0 pll control for BCM4325 BCM4329 */
+static void sb_pmu1_pllinit0 (sb_t * sbh, osl_t * osh, chipcregs_t * cc,
+ uint32 xtal);
+static uint32 sb_pmu1_cpuclk0 (sb_t * sbh, osl_t * osh, chipcregs_t * cc);
+static uint32 sb_pmu1_alpclk0 (sb_t * sbh, osl_t * osh, chipcregs_t * cc);
+
+/* Setup switcher voltage */
+void
+BCMINITFN (sb_pmu_set_switcher_voltage) (sb_t * sbh, osl_t * osh,
+ uint8 bb_voltage, uint8 rf_voltage)
+{
+ chipcregs_t *cc;
+ uint origidx;
+
+ ASSERT (sbh->cccaps & CC_CAP_PMU);
+
+ /* Remember original core before switch to chipc */
+ origidx = sb_coreidx (sbh);
+ cc = sb_setcore (sbh, SB_CC, 0);
+ ASSERT (cc);
+
+ W_REG (osh, &cc->regcontrol_addr, 0x01);
+ W_REG (osh, &cc->regcontrol_data, (uint32) (bb_voltage & 0x1f) << 22);
+
+ W_REG (osh, &cc->regcontrol_addr, 0x00);
+ W_REG (osh, &cc->regcontrol_data, (uint32) (rf_voltage & 0x1f) << 14);
+
+ /* Return to original core */
+ sb_setcoreidx (sbh, origidx);
+}
+
+void
+sb_pmu_set_ldo_voltage (sb_t * sbh, osl_t * osh, uint8 ldo, uint8 voltage)
+{
+ uint8 sr_cntl_shift, rc_shift, shift, mask;
+ uint32 addr;
+
+ ASSERT (sbh->cccaps & CC_CAP_PMU);
+
+ switch (sbh->chip)
+ {
+ case BCM4328_CHIP_ID:
+ case BCM5354_CHIP_ID:
+ switch (ldo)
+ {
+ case SET_LDO_VOLTAGE_LDO1:
+ addr = 2;
+ sr_cntl_shift = 8;
+ rc_shift = 17;
+ mask = 0xf;
+ break;
+ case SET_LDO_VOLTAGE_LDO2:
+ addr = 3;
+ sr_cntl_shift = 0;
+ rc_shift = 1;
+ mask = 0xf;
+ break;
+ case SET_LDO_VOLTAGE_LDO3:
+ addr = 3;
+ sr_cntl_shift = 0;
+ rc_shift = 9;
+ mask = 0xf;
+ break;
+ case SET_LDO_VOLTAGE_PAREF:
+ addr = 3;
+ sr_cntl_shift = 0;
+ rc_shift = 17;
+ mask = 0x3f;
+ break;
+ default:
+ ASSERT (FALSE);
+ return;
+ }
+ break;
+ case BCM4312_CHIP_ID:
+ switch (ldo)
+ {
+ case SET_LDO_VOLTAGE_PAREF:
+ addr = 0;
+ sr_cntl_shift = 0;
+ rc_shift = 21;
+ mask = 0x3f;
+ break;
+ default:
+ ASSERT (FALSE);
+ return;
+ }
+ break;
+ default:
+ ASSERT (FALSE);
+ return;
+ }
+
+ shift = sr_cntl_shift + rc_shift;
+
+ sb_corereg (sbh, SB_CC_IDX, OFFSETOF (chipcregs_t, regcontrol_addr),
+ ~0, addr);
+ sb_corereg (sbh, SB_CC_IDX, OFFSETOF (chipcregs_t, regcontrol_data),
+ mask << shift, (voltage & mask) << shift);
+}
+
+void
+sb_pmu_paref_ldo_enable (sb_t * sbh, osl_t * osh, bool enable)
+{
+ uint ldo = 0;
+
+ ASSERT (sbh->cccaps & CC_CAP_PMU);
+
+ switch (sbh->chip)
+ {
+ case BCM4328_CHIP_ID:
+ ldo = RES4328_PA_REF_LDO;
+ break;
+ case BCM5354_CHIP_ID:
+ ldo = RES5354_PA_REF_LDO;
+ break;
+ case BCM4312_CHIP_ID:
+ ldo = RES4312_PA_REF_LDO;
+ break;
+ default:
+ return;
+ }
+
+ sb_corereg (sbh, SB_CC_IDX, OFFSETOF (chipcregs_t, min_res_mask),
+ PMURES_BIT (ldo), enable ? PMURES_BIT (ldo) : 0);
+}
+
+uint16 BCMINITFN (sb_pmu_fast_pwrup_delay) (sb_t * sbh, osl_t * osh)
+{
+ uint16 delay = PMU_MAX_TRANSITION_DLY;
+
+ ASSERT (sbh->cccaps & CC_CAP_PMU);
+
+ switch (sbh->chip)
+ {
+ case BCM4328_CHIP_ID:
+ delay = 7000;
+ break;
+
+ case BCM4325_CHIP_ID:
+ case BCM4312_CHIP_ID:
+#ifdef BCMQT
+ delay = 70;
+#else
+ delay = 2800;
+#endif
+ break;
+
+ default:
+ PMU_MSG (("No PMU fast power up delay specified "
+ "for chip %x rev %d, using default %d us\n",
+ sbh->chip, sbh->chiprev, delay));
+ break;
+ }
+
+ return delay;
+}
+
+uint32 BCMINITFN (sb_pmu_force_ilp) (sb_t * sbh, osl_t * osh, bool force)
+{
+ chipcregs_t *cc;
+ uint origidx;
+ uint32 oldpmucontrol;
+
+ ASSERT (sbh->cccaps & CC_CAP_PMU);
+
+ /* Remember original core before switch to chipc */
+ origidx = sb_coreidx (sbh);
+ cc = sb_setcore (sbh, SB_CC, 0);
+ ASSERT (cc);
+
+ oldpmucontrol = R_REG (osh, &cc->pmucontrol);
+ if (force)
+ W_REG (osh, &cc->pmucontrol, oldpmucontrol &
+ ~(PCTL_HT_REQ_EN | PCTL_ALP_REQ_EN));
+ else
+ W_REG (osh, &cc->pmucontrol, oldpmucontrol |
+ (PCTL_HT_REQ_EN | PCTL_ALP_REQ_EN));
+
+ /* Return to original core */
+ sb_setcoreidx (sbh, origidx);
+
+ return oldpmucontrol;
+}
+
+/* Setup min/max resources and up/down timers */
+typedef struct
+{
+ uint8 resnum;
+ uint16 updown;
+} pmu_res_updown_t;
+
+typedef struct
+{
+ uint8 resnum;
+ int8 action; /* 0 - set, 1 - add, -1 - remove */
+ uint32 depend_mask;
+} pmu_res_depend_t;
+
+static const pmu_res_updown_t
+BCMINITDATA (bcm4328a0_res_updown)[] =
+{
+ {
+ RES4328_EXT_SWITCHER_PWM, 0x0101},
+ {
+ RES4328_BB_SWITCHER_PWM, 0x1f01},
+ {
+ RES4328_BB_SWITCHER_BURST, 0x010f},
+ {
+ RES4328_BB_EXT_SWITCHER_BURST, 0x0101},
+ {
+ RES4328_ILP_REQUEST, 0x0202},
+ {
+ RES4328_RADIO_SWITCHER_PWM, 0x0f01},
+ {
+ RES4328_RADIO_SWITCHER_BURST, 0x0f01},
+ {
+ RES4328_ROM_SWITCH, 0x0101},
+ {
+ RES4328_PA_REF_LDO, 0x0f01},
+ {
+ RES4328_RADIO_LDO, 0x0f01},
+ {
+ RES4328_AFE_LDO, 0x0f01},
+ {
+ RES4328_PLL_LDO, 0x0f01},
+ {
+ RES4328_BG_FILTBYP, 0x0101},
+ {
+ RES4328_TX_FILTBYP, 0x0101},
+ {
+ RES4328_RX_FILTBYP, 0x0101},
+ {
+ RES4328_XTAL_PU, 0x0101},
+ {
+ RES4328_XTAL_EN, 0xa001},
+ {
+ RES4328_BB_PLL_FILTBYP, 0x0101},
+ {
+ RES4328_RF_PLL_FILTBYP, 0x0101},
+ {
+ RES4328_BB_PLL_PU, 0x0701}
+};
+
+static const pmu_res_depend_t
+BCMINITDATA (bcm4328a0_res_depend)[] =
+{
+ /* Adjust ILP request resource not to force ext/BB switchers into burst mode */
+ {
+ RES4328_ILP_REQUEST, 0,
+ PMURES_BIT (RES4328_EXT_SWITCHER_PWM) |
+ PMURES_BIT (RES4328_BB_SWITCHER_PWM)}
+};
+
+#ifdef BCMQT /* for power save on slow QT/small beacon interval */
+static const pmu_res_updown_t
+BCMINITDATA (bcm4325a0_res_updown_qt)[] =
+{
+ {
+ RES4325_HT_AVAIL, 0x0300},
+ {
+ RES4325_BBPLL_PWRSW_PU, 0x0101},
+ {
+ RES4325_RFPLL_PWRSW_PU, 0x0101},
+ {
+ RES4325_ALP_AVAIL, 0x0100},
+ {
+ RES4325_XTAL_PU, 0x1000},
+ {
+ RES4325_LNLDO1_PU, 0x0800},
+ {
+ RES4325_CLDO_CBUCK_PWM, 0x0101},
+ {
+ RES4325_CBUCK_PWM, 0x0803}
+};
+#else
+static const pmu_res_updown_t
+BCMINITDATA (bcm4325a0_res_updown)[] =
+{
+ {
+ RES4325_XTAL_PU, 0x1501}
+};
+#endif /* !BCMQT */
+
+static const pmu_res_depend_t
+BCMINITDATA (bcm4325a0_res_depend)[] =
+{
+ /* Adjust HT Avail resource dependencies */
+ {
+ RES4325_HT_AVAIL, 1,
+ PMURES_BIT (RES4325_RX_PWRSW_PU) | PMURES_BIT (RES4325_TX_PWRSW_PU) |
+ PMURES_BIT (RES4325_LOGEN_PWRSW_PU) | PMURES_BIT (RES4325_AFE_PWRSW_PU)}
+};
+
+void BCMINITFN (sb_pmu_res_init) (sb_t * sbh, osl_t * osh)
+{
+ chipcregs_t *cc;
+ uint origidx;
+ const pmu_res_updown_t *pmu_res_updown_table = NULL;
+ int pmu_res_updown_table_sz = 0;
+ const pmu_res_depend_t *pmu_res_depend_table = NULL;
+ int pmu_res_depend_table_sz = 0;
+ uint32 min_mask = 0, max_mask = 0;
+
+ ASSERT (sbh->cccaps & CC_CAP_PMU);
+
+ /* Remember original core before switch to chipc */
+ origidx = sb_coreidx (sbh);
+ cc = sb_setcore (sbh, SB_CC, 0);
+ ASSERT (cc);
+
+ switch (sbh->chip)
+ {
+ case BCM4328_CHIP_ID:
+ /* Down to ILP request excluding ROM */
+ min_mask = PMURES_BIT (RES4328_EXT_SWITCHER_PWM) |
+ PMURES_BIT (RES4328_BB_SWITCHER_PWM) | PMURES_BIT (RES4328_XTAL_EN);
+#ifdef BCMROMOFFLOAD
+ /* Including ROM */
+ min_mask |= PMURES_BIT (RES4328_ROM_SWITCH);
+#endif
+ /* Allow (but don't require) PLL to turn on */
+ max_mask = 0xfffff;
+ pmu_res_updown_table = bcm4328a0_res_updown;
+ pmu_res_updown_table_sz = ARRAYSIZE (bcm4328a0_res_updown);
+ pmu_res_depend_table = bcm4328a0_res_depend;
+ pmu_res_depend_table_sz = ARRAYSIZE (bcm4328a0_res_depend);
+ break;
+ case BCM4312_CHIP_ID:
+ /* keep default
+ * min_mask = 0xcbb; max_mask = 0x7ffff;
+ * pmu_res_updown_table_sz = 0;
+ * pmu_res_depend_table_sz = 0;
+ */
+ break;
+ case BCM5354_CHIP_ID:
+ /* Allow (but don't require) PLL to turn on */
+ max_mask = 0xfffff;
+ break;
+
+ case BCM4325_CHIP_ID:
+ /* Leave OTP powered up and power it down later. */
+ min_mask =
+ PMURES_BIT (RES4325_CBUCK_BURST) | PMURES_BIT (RES4325_LNLDO2_PU);
+ if (((sbh->chipst & CST4325_PMUTOP_2B_MASK) >>
+ CST4325_PMUTOP_2B_SHIFT) == 1)
+ min_mask |= PMURES_BIT (RES4325_CLDO_CBUCK_BURST);
+ /* Allow (but don't require) PLL to turn on */
+ max_mask = 0x3fffff;
+#ifdef BCMQT
+ pmu_res_updown_table = bcm4325a0_res_updown_qt;
+ pmu_res_updown_table_sz = ARRAYSIZE (bcm4325a0_res_updown_qt);
+#else
+ pmu_res_updown_table = bcm4325a0_res_updown;
+ pmu_res_updown_table_sz = ARRAYSIZE (bcm4325a0_res_updown);
+ pmu_res_depend_table = bcm4325a0_res_depend;
+ pmu_res_depend_table_sz = ARRAYSIZE (bcm4325a0_res_depend);
+#endif
+ break;
+
+ default:
+ break;
+ }
+
+ /* Program up/down timers */
+ while (pmu_res_updown_table_sz--)
+ {
+ ASSERT (pmu_res_updown_table);
+ W_REG (osh, &cc->res_table_sel,
+ pmu_res_updown_table[pmu_res_updown_table_sz].resnum);
+ W_REG (osh, &cc->res_updn_timer,
+ pmu_res_updown_table[pmu_res_updown_table_sz].updown);
+ }
+
+ /* Program resource dependencies table */
+ while (pmu_res_depend_table_sz--)
+ {
+ ASSERT (pmu_res_depend_table);
+ W_REG (osh, &cc->res_table_sel,
+ pmu_res_depend_table[pmu_res_depend_table_sz].resnum);
+ switch (pmu_res_depend_table[pmu_res_depend_table_sz].action)
+ {
+ case 0:
+ W_REG (osh, &cc->res_dep_mask,
+ pmu_res_depend_table[pmu_res_depend_table_sz].depend_mask);
+ break;
+ case 1:
+ OR_REG (osh, &cc->res_dep_mask,
+ pmu_res_depend_table[pmu_res_depend_table_sz].depend_mask);
+ break;
+ case -1:
+ AND_REG (osh, &cc->res_dep_mask,
+ ~pmu_res_depend_table[pmu_res_depend_table_sz].
+ depend_mask);
+ break;
+ default:
+ ASSERT (0);
+ break;
+ }
+ }
+
+ /* program min resource mask */
+ if (min_mask)
+ {
+ PMU_MSG (("Changing min_res_mask to 0x%x\n", min_mask));
+ W_REG (osh, &cc->min_res_mask, min_mask);
+ }
+ /* program max resource mask */
+ if (max_mask)
+ {
+ PMU_MSG (("Changing max_res_mask to 0x%x\n", max_mask));
+ W_REG (osh, &cc->max_res_mask, max_mask);
+ }
+
+ /* Return to original core */
+ sb_setcoreidx (sbh, origidx);
+}
+
+/* setup pll and query clock speed */
+typedef struct
+{
+ uint16 freq;
+ uint8 xf;
+ uint8 wbint;
+ uint32 wbfrac;
+} pmu0_xtaltab0_t;
+
+/* the following table is based on 880Mhz Fvco */
+#define PMU0_PLL0_FVCO 880000 /* Fvco 880Mhz */
+static const pmu0_xtaltab0_t
+BCMINITDATA (pmu0_xtaltab0)[] =
+{
+ {
+ 12000, 1, 73, 349525},
+ {
+ 13000, 2, 67, 725937},
+ {
+ 14400, 3, 61, 116508},
+ {
+ 15360, 4, 57, 305834},
+ {
+ 16200, 5, 54, 336579},
+ {
+ 16800, 6, 52, 399457},
+ {
+ 19200, 7, 45, 873813},
+ {
+ 19800, 8, 44, 466033},
+ {
+ 20000, 9, 44, 0},
+ {
+ 25000, 10, 70, 419430},
+ {
+ 26000, 11, 67, 725937},
+ {
+ 30000, 12, 58, 699050},
+ {
+ 38400, 13, 45, 873813},
+ {
+ 40000, 14, 45, 0},
+ {
+ 0, 0, 0, 0}
+};
+
+#ifdef BCMUSBDEV
+#define PMU0_XTAL0_DEFAULT 11
+#else
+#define PMU0_XTAL0_DEFAULT 8
+#endif
+
+#ifdef BCMUSBDEV
+/*
+ * Set new backplane PLL clock frequency
+ */
+static void BCMINITFN (sb_pmu0_sbclk4328) (sb_t * sbh, int freq)
+{
+ uint32 tmp, oldmax, oldmin, origidx;
+ chipcregs_t *cc;
+
+ /* Remember original core before switch to chipc */
+ origidx = sb_coreidx (sbh);
+ cc = sb_setcore (sbh, SB_CC, 0);
+ ASSERT (cc);
+
+ /* Set new backplane PLL clock */
+ W_REG (osh, &cc->pllcontrol_addr, PMU0_PLL0_PLLCTL0);
+ tmp = R_REG (osh, &cc->pllcontrol_data);
+ tmp &= ~(PMU0_PLL0_PC0_DIV_ARM_MASK);
+ tmp |= freq << PMU0_PLL0_PC0_DIV_ARM_SHIFT;
+ W_REG (osh, &cc->pllcontrol_data, tmp);
+
+ /* Power cycle BB_PLL_PU by disabling/enabling it to take on new freq */
+ /* Disable PLL */
+ oldmin = R_REG (osh, &cc->min_res_mask);
+ oldmax = R_REG (osh, &cc->max_res_mask);
+ W_REG (osh, &cc->min_res_mask, oldmin & ~PMURES_BIT (RES4328_BB_PLL_PU));
+ W_REG (osh, &cc->max_res_mask, oldmax & ~PMURES_BIT (RES4328_BB_PLL_PU));
+
+ /* It takes over several hundred usec to re-enable the PLL since the
+ * sequencer state machines run on ILP clock. Set delay at 450us to be safe.
+ *
+ * Be sure PLL is powered down first before re-enabling it.
+ */
+
+ OSL_DELAY (PLL_DELAY);
+ SPINWAIT ((R_REG (osh, &cc->res_state) & PMURES_BIT (RES4328_BB_PLL_PU)),
+ PLL_DELAY * 3);
+
+ if (R_REG (osh, &cc->res_state) & PMURES_BIT (RES4328_BB_PLL_PU))
+ {
+ /* If BB_PLL not powered down yet, new backplane PLL clock
+ * may not take effect.
+ *
+ * Still early during bootup so no serial output here.
+ */
+ PMU_ERROR (("Fatal: BB_PLL not power down yet!\n"));
+ ASSERT (!
+ (R_REG (osh, &cc->res_state) & PMURES_BIT (RES4328_BB_PLL_PU)));
+ }
+
+ /* Enable PLL */
+ W_REG (osh, &cc->max_res_mask, oldmax);
+
+ /* Return to original core */
+ sb_setcoreidx (sbh, origidx);
+}
+#endif /* BCMUSBDEV */
+
+/* Set up PLL registers in the PMU as per the crystal speed.
+ * Uses xtalfreq variable, or passed-in default.
+ */
+static void
+BCMINITFN (sb_pmu0_pllinit0) (sb_t * sbh, osl_t * osh, chipcregs_t * cc,
+ uint32 xtal)
+{
+ uint32 tmp;
+ const pmu0_xtaltab0_t *xt;
+
+ if ((sb_chip (sbh) == BCM5354_CHIP_ID) && (xtal == 0))
+ {
+ /* 5354 has xtal freq of 25MHz */
+ xtal = 25000;
+ }
+
+ /* Find the frequency in the table */
+ for (xt = pmu0_xtaltab0; xt->freq; xt++)
+ if (xt->freq == xtal)
+ break;
+ if (xt->freq == 0)
+ xt = &pmu0_xtaltab0[PMU0_XTAL0_DEFAULT];
+
+ PMU_MSG (("XTAL %d (%d)\n", xtal, xt->xf));
+
+ /* Check current PLL state */
+ tmp = (R_REG (osh, &cc->pmucontrol) & PCTL_XTALFREQ_MASK) >>
+ PCTL_XTALFREQ_SHIFT;
+ if (tmp == xt->xf)
+ {
+ PMU_MSG (("PLL already programmed for %d.%d MHz\n",
+ (xt->freq / 1000), (xt->freq % 1000)));
+
+#ifdef BCMUSBDEV
+ if (sbh->chip == BCM4328_CHIP_ID)
+ sb_pmu0_sbclk4328 (sbh, PMU0_PLL0_PC0_DIV_ARM_88MHZ);
+#endif
+ return;
+ }
+
+ if (tmp)
+ {
+ PMU_MSG (("Reprogramming PLL for %d.%d MHz (was %d.%dMHz)\n",
+ (xt->freq / 1000), (xt->freq % 1000),
+ (pmu0_xtaltab0[tmp - 1].freq / 1000),
+ (pmu0_xtaltab0[tmp - 1].freq % 1000)));
+ }
+ else
+ {
+ PMU_MSG (("Programming PLL for %d.%d MHz\n", (xt->freq / 1000),
+ (xt->freq % 1000)));
+ }
+
+ /* Make sure the PLL is off */
+ switch (sbh->chip)
+ {
+ case BCM4328_CHIP_ID:
+ AND_REG (osh, &cc->min_res_mask, ~PMURES_BIT (RES4328_BB_PLL_PU));
+ AND_REG (osh, &cc->max_res_mask, ~PMURES_BIT (RES4328_BB_PLL_PU));
+ break;
+ case BCM5354_CHIP_ID:
+ AND_REG (osh, &cc->min_res_mask, ~PMURES_BIT (RES5354_BB_PLL_PU));
+ AND_REG (osh, &cc->max_res_mask, ~PMURES_BIT (RES5354_BB_PLL_PU));
+ break;
+ default:
+ ASSERT (0);
+ }
+ SPINWAIT (R_REG (osh, &cc->clk_ctl_st) & CCS0_HTAVAIL,
+ PMU_MAX_TRANSITION_DLY);
+ ASSERT (!(R_REG (osh, &cc->clk_ctl_st) & CCS0_HTAVAIL));
+
+ PMU_MSG (("Done masking\n"));
+
+ /* Write PDIV in pllcontrol[0] */
+ W_REG (osh, &cc->pllcontrol_addr, PMU0_PLL0_PLLCTL0);
+ tmp = R_REG (osh, &cc->pllcontrol_data);
+ if (xt->freq >= PMU0_PLL0_PC0_PDIV_FREQ)
+ tmp |= PMU0_PLL0_PC0_PDIV_MASK;
+ else
+ tmp &= ~PMU0_PLL0_PC0_PDIV_MASK;
+ W_REG (osh, &cc->pllcontrol_data, tmp);
+
+ /* Write WILD in pllcontrol[1] */
+ W_REG (osh, &cc->pllcontrol_addr, PMU0_PLL0_PLLCTL1);
+ tmp = R_REG (osh, &cc->pllcontrol_data);
+ tmp =
+ ((tmp & ~(PMU0_PLL0_PC1_WILD_INT_MASK | PMU0_PLL0_PC1_WILD_FRAC_MASK)) |
+ (((xt->
+ wbint << PMU0_PLL0_PC1_WILD_INT_SHIFT) & PMU0_PLL0_PC1_WILD_INT_MASK)
+ | ((xt->wbfrac << PMU0_PLL0_PC1_WILD_FRAC_SHIFT) &
+ PMU0_PLL0_PC1_WILD_FRAC_MASK)));
+ if (xt->wbfrac == 0)
+ tmp |= PMU0_PLL0_PC1_STOP_MOD;
+ else
+ tmp &= ~PMU0_PLL0_PC1_STOP_MOD;
+ W_REG (osh, &cc->pllcontrol_data, tmp);
+
+ /* Write WILD in pllcontrol[2] */
+ W_REG (osh, &cc->pllcontrol_addr, PMU0_PLL0_PLLCTL2);
+ tmp = R_REG (osh, &cc->pllcontrol_data);
+ tmp = ((tmp & ~PMU0_PLL0_PC2_WILD_INT_MASK) |
+ ((xt->wbint >> PMU0_PLL0_PC2_WILD_INT_SHIFT) &
+ PMU0_PLL0_PC2_WILD_INT_MASK));
+ W_REG (osh, &cc->pllcontrol_data, tmp);
+
+ PMU_MSG (("Done pll\n"));
+
+ /* Write XtalFreq. Set the divisor also. */
+ tmp = R_REG (osh, &cc->pmucontrol);
+ tmp = ((tmp & ~PCTL_ILP_DIV_MASK) |
+ (((((xt->freq + 127) / 128) - 1) << PCTL_ILP_DIV_SHIFT) &
+ PCTL_ILP_DIV_MASK));
+ tmp = ((tmp & ~PCTL_XTALFREQ_MASK) |
+ ((xt->xf << PCTL_XTALFREQ_SHIFT) & PCTL_XTALFREQ_MASK));
+ W_REG (osh, &cc->pmucontrol, tmp);
+}
+
+static uint32
+BCMINITFN (sb_pmu0_alpclk0) (sb_t * sbh, osl_t * osh, chipcregs_t * cc)
+{
+ const pmu0_xtaltab0_t *xt;
+ uint32 xf;
+
+ /* Find the frequency in the table */
+ xf = (R_REG (osh, &cc->pmucontrol) & PCTL_XTALFREQ_MASK) >>
+ PCTL_XTALFREQ_SHIFT;
+ for (xt = pmu0_xtaltab0; xt->freq; xt++)
+ if (xt->xf == xf)
+ break;
+ if (xt->freq == 0)
+ xt = &pmu0_xtaltab0[PMU0_XTAL0_DEFAULT];
+
+ return xt->freq * 1000;
+}
+
+static uint32
+BCMINITFN (sb_pmu0_cpuclk0) (sb_t * sbh, osl_t * osh, chipcregs_t * cc)
+{
+ const pmu0_xtaltab0_t *xt;
+ uint32 xf, tmp, divarm;
+#ifdef BCMDBG
+ uint32 pdiv, wbint, wbfrac, fvco;
+#endif
+
+ if (sb_chip (sbh) == BCM5354_CHIP_ID)
+ {
+ /* 5354 gets sb clock of 120MHz from main pll */
+ return 120000000;
+ }
+
+ /* Find the xtal frequency in the table */
+ xf = (R_REG (osh, &cc->pmucontrol) & PCTL_XTALFREQ_MASK) >>
+ PCTL_XTALFREQ_SHIFT;
+ for (xt = pmu0_xtaltab0; xt->freq; xt++)
+ if (xt->xf == xf)
+ break;
+ if (xt->freq == 0)
+ xt = &pmu0_xtaltab0[PMU0_XTAL0_DEFAULT];
+
+ /* Read divarm from pllcontrol[0] */
+ W_REG (osh, &cc->pllcontrol_addr, PMU0_PLL0_PLLCTL0);
+ tmp = R_REG (osh, &cc->pllcontrol_data);
+ divarm = (tmp & PMU0_PLL0_PC0_DIV_ARM_MASK) >> PMU0_PLL0_PC0_DIV_ARM_SHIFT;
+
+#ifdef BCMDBG
+ /* Calculate Fvco based on xtal freq, pdiv, and wild */
+ pdiv = tmp & PMU0_PLL0_PC0_PDIV_MASK;
+
+ W_REG (osh, &cc->pllcontrol_addr, PMU0_PLL0_PLLCTL1);
+ tmp = R_REG (osh, &cc->pllcontrol_data);
+ wbfrac =
+ (tmp & PMU0_PLL0_PC1_WILD_FRAC_MASK) >> PMU0_PLL0_PC1_WILD_FRAC_SHIFT;
+ wbint = (tmp & PMU0_PLL0_PC1_WILD_INT_MASK) >> PMU0_PLL0_PC1_WILD_INT_SHIFT;
+
+ W_REG (osh, &cc->pllcontrol_addr, PMU0_PLL0_PLLCTL2);
+ tmp = R_REG (osh, &cc->pllcontrol_data);
+ wbint +=
+ (tmp & PMU0_PLL0_PC2_WILD_INT_MASK) << PMU0_PLL0_PC2_WILD_INT_SHIFT;
+
+ fvco = (xt->freq * wbint) << 8;
+ fvco += (xt->freq * (wbfrac >> 10)) >> 2;
+ fvco += (xt->freq * (wbfrac & 0x3ff)) >> 10;
+ fvco >>= 8;
+ fvco >>= pdiv;
+ fvco /= 1000;
+ fvco *= 1000;
+
+ PMU_MSG (("sb_pmu0_cpuclk0: wbint %u wbfrac %u fvco %u\n",
+ wbint, wbfrac, fvco));
+ ASSERT (fvco == PMU0_PLL0_FVCO);
+#endif /* BCMDBG */
+
+ /* Return ARM/SB clock */
+ return PMU0_PLL0_FVCO / (divarm + PMU0_PLL0_PC0_DIV_ARM_BASE) * 1000;
+}
+
+/* PMU corerev 1 pll programming for BCM4325 */
+/* setup pll and query clock speed */
+typedef struct
+{
+ uint16 fref;
+ uint8 xf;
+ uint8 p1div;
+ uint8 p2div;
+ uint8 ndiv_int;
+ uint32 ndiv_frac;
+} pmu1_xtaltab0_t;
+
+/* the following table is based on 880Mhz Fvco */
+#define PMU1_PLL0_FVCO 880000 /* Fvco 880Mhz */
+static const pmu1_xtaltab0_t
+BCMINITDATA (pmu1_xtaltab0)[] =
+{
+ {
+ 12000, 1, 3, 22, 0x9, 0xFFFFEF},
+ {
+ 13000, 2, 1, 6, 0xb, 0x483483},
+ {
+ 14400, 3, 1, 10, 0xa, 0x1C71C7},
+ {
+ 15360, 4, 1, 5, 0xb, 0x755555},
+ {
+ 16200, 5, 1, 10, 0x5, 0x6E9E06},
+ {
+ 16800, 6, 1, 10, 0x5, 0x3Cf3Cf},
+ {
+ 19200, 7, 1, 9, 0x5, 0x17B425},
+ {
+ 19800, 8, 1, 11, 0x4, 0xA57EB},
+ {
+ 20000, 9, 1, 11, 0x4, 0x0},
+ {
+ 24000, 10, 3, 11, 0xa, 0x0},
+ {
+ 25000, 11, 5, 16, 0xb, 0x0},
+ {
+ 26000, 12, 1, 2, 0x10, 0xEC4EC4},
+ {
+ 30000, 13, 3, 8, 0xb, 0x0},
+ {
+ 38400, 14, 1, 5, 0x4, 0x955555},
+ {
+ 40000, 15, 1, 2, 0xb, 0},
+ {
+ 0, 0, 0, 0, 0, 0}
+};
+
+/* Default to 15360Khz crystal */
+#define PMU1_XTAL0_DEFAULT 3
+
+static uint32
+BCMINITFN (sb_pmu1_alpclk0) (sb_t * sbh, osl_t * osh, chipcregs_t * cc)
+{
+ const pmu1_xtaltab0_t *xt;
+ uint32 xf;
+
+ /* Find the frequency in the table */
+ xf = (R_REG (osh, &cc->pmucontrol) & PCTL_XTALFREQ_MASK) >>
+ PCTL_XTALFREQ_SHIFT;
+ for (xt = pmu1_xtaltab0; xt->fref; xt++)
+ if (xt->xf == xf)
+ break;
+ if (xt->fref == 0)
+ xt = &pmu1_xtaltab0[PMU1_XTAL0_DEFAULT];
+
+ return xt->fref * 1000;
+}
+
+/* Set up PLL registers in the PMU as per the crystal speed.
+ * Uses xtalfreq variable, or passed-in default.
+ */
+static void
+BCMINITFN (sb_pmu1_pllinit0) (sb_t * sbh, osl_t * osh, chipcregs_t * cc,
+ uint32 xtal)
+{
+ const pmu1_xtaltab0_t *xt;
+ uint32 tmp;
+ uint32 buf_strength = 0;
+
+ /* 4312: assume default works */
+ if (sbh->chip == BCM4312_CHIP_ID)
+ return;
+
+ /* Find the frequency in the table */
+ for (xt = pmu1_xtaltab0; xt->fref; xt++)
+ if (xt->fref == xtal)
+ break;
+ if (xt->fref == 0)
+ xt = &pmu1_xtaltab0[PMU1_XTAL0_DEFAULT];
+
+ PMU_MSG (("XTAL %d (%d)\n", xtal, xt->xf));
+
+ /* Check current PLL state */
+ if (((R_REG (osh, &cc->pmucontrol) & PCTL_XTALFREQ_MASK) >>
+ PCTL_XTALFREQ_SHIFT) == xt->xf)
+ {
+ PMU_MSG (("PLL already programmed for %d.%d MHz\n",
+ (xt->fref / 1000), (xt->fref % 1000)));
+ return;
+ }
+
+ PMU_MSG (("Programming PLL for %d.%d MHz\n", (xt->fref / 1000),
+ (xt->fref % 1000)));
+
+ /* Make sure the PLL is off */
+ switch (sbh->chip)
+ {
+ case BCM4325_CHIP_ID:
+ AND_REG (osh, &cc->min_res_mask,
+ ~(PMURES_BIT (RES4325_BBPLL_PWRSW_PU) |
+ PMURES_BIT (RES4325_HT_AVAIL)));
+ AND_REG (osh, &cc->max_res_mask,
+ ~(PMURES_BIT (RES4325_BBPLL_PWRSW_PU) |
+ PMURES_BIT (RES4325_HT_AVAIL)));
+
+ /* Change the BBPLL drive strength to 2 for all channels */
+ buf_strength = 0x222222;
+ break;
+ default:
+ ASSERT (0);
+ }
+ SPINWAIT (R_REG (osh, &cc->clk_ctl_st) & CCS_HTAVAIL,
+ PMU_MAX_TRANSITION_DLY);
+ ASSERT (!(R_REG (osh, &cc->clk_ctl_st) & CCS_HTAVAIL));
+
+ PMU_MSG (("Done masking\n"));
+
+ /* Write p1div and p2div to pllcontrol[0] */
+ W_REG (osh, &cc->pllcontrol_addr, PMU1_PLL0_PLLCTL0);
+ tmp = R_REG (osh, &cc->pllcontrol_data) &
+ ~(PMU1_PLL0_PC0_P1DIV_MASK | PMU1_PLL0_PC0_P2DIV_MASK);
+ tmp |=
+ ((xt->
+ p1div << PMU1_PLL0_PC0_P1DIV_SHIFT) & PMU1_PLL0_PC0_P1DIV_MASK) | ((xt->
+ p2div
+ <<
+ PMU1_PLL0_PC0_P2DIV_SHIFT)
+ &
+ PMU1_PLL0_PC0_P2DIV_MASK);
+ W_REG (osh, &cc->pllcontrol_data, tmp);
+
+ /* Write ndiv_int and ndiv_mode to pllcontrol[2] */
+ W_REG (osh, &cc->pllcontrol_addr, PMU1_PLL0_PLLCTL2);
+ tmp = R_REG (osh, &cc->pllcontrol_data) &
+ ~(PMU1_PLL0_PC2_NDIV_INT_MASK | PMU1_PLL0_PC2_NDIV_MODE_MASK);
+ tmp |=
+ ((xt->
+ ndiv_int << PMU1_PLL0_PC2_NDIV_INT_SHIFT) & PMU1_PLL0_PC2_NDIV_INT_MASK)
+ | ((1 << PMU1_PLL0_PC2_NDIV_MODE_SHIFT) & PMU1_PLL0_PC2_NDIV_MODE_MASK);
+ W_REG (osh, &cc->pllcontrol_data, tmp);
+
+ /* Write ndiv_frac to pllcontrol[3] */
+ W_REG (osh, &cc->pllcontrol_addr, PMU1_PLL0_PLLCTL3);
+ tmp = R_REG (osh, &cc->pllcontrol_data) & ~PMU1_PLL0_PC3_NDIV_FRAC_MASK;
+ tmp |= ((xt->ndiv_frac << PMU1_PLL0_PC3_NDIV_FRAC_SHIFT) &
+ PMU1_PLL0_PC3_NDIV_FRAC_MASK);
+ W_REG (osh, &cc->pllcontrol_data, tmp);
+
+ if (buf_strength)
+ {
+ PMU_MSG (("Adjusting PLL buffer drive strength: %x\n", buf_strength));
+
+ W_REG (osh, &cc->pllcontrol_addr, PMU1_PLL0_PLLCTL5);
+ tmp = R_REG (osh, &cc->pllcontrol_data) & ~PMU1_PLL0_PC5_CLK_DRV_MASK;
+ tmp |= (buf_strength << PMU1_PLL0_PC5_CLK_DRV_SHIFT);
+ W_REG (osh, &cc->pllcontrol_data, tmp);
+ }
+
+ PMU_MSG (("Done pll\n"));
+
+ /* Write XtalFreq. Set the divisor also. */
+ tmp = R_REG (osh, &cc->pmucontrol) &
+ ~(PCTL_ILP_DIV_MASK | PCTL_XTALFREQ_MASK);
+ tmp |= (((((xt->fref + 127) / 128) - 1) << PCTL_ILP_DIV_SHIFT) &
+ PCTL_ILP_DIV_MASK) |
+ ((xt->xf << PCTL_XTALFREQ_SHIFT) & PCTL_XTALFREQ_MASK);
+ W_REG (osh, &cc->pmucontrol, tmp);
+}
+
+
+static uint32
+BCMINITFN (sb_pmu1_cpuclk0) (sb_t * sbh, osl_t * osh, chipcregs_t * cc)
+{
+ const pmu1_xtaltab0_t *xt;
+ uint32 xf, tmp, m1div;
+#ifdef BCMDBG
+ uint32 ndiv_int, ndiv_frac, p2div, p1div, fvco;
+#endif
+
+ /* Find the xtal frequency in the table */
+ xf = (R_REG (osh, &cc->pmucontrol) & PCTL_XTALFREQ_MASK) >>
+ PCTL_XTALFREQ_SHIFT;
+ for (xt = pmu1_xtaltab0; xt->fref; xt++)
+ if (xt->xf == xf)
+ break;
+ if (xt->fref == 0)
+ xt = &pmu1_xtaltab0[PMU1_XTAL0_DEFAULT];
+
+ /* Read m1div from pllcontrol[1] */
+ W_REG (osh, &cc->pllcontrol_addr, PMU1_PLL0_PLLCTL1);
+ tmp = R_REG (osh, &cc->pllcontrol_data);
+ m1div = (tmp & PMU1_PLL0_PC1_M1DIV_MASK) >> PMU1_PLL0_PC1_M1DIV_SHIFT;
+
+#ifdef BCMDBG
+ /* Read p2div/p1div from pllcontrol[0] */
+ W_REG (osh, &cc->pllcontrol_addr, PMU1_PLL0_PLLCTL0);
+ tmp = R_REG (osh, &cc->pllcontrol_data);
+ p2div = (tmp & PMU1_PLL0_PC0_P2DIV_MASK) >> PMU1_PLL0_PC0_P2DIV_SHIFT;
+ p1div = (tmp & PMU1_PLL0_PC0_P1DIV_MASK) >> PMU1_PLL0_PC0_P1DIV_SHIFT;
+
+ /* Calculate Fvco based on xtal freq and ndiv and pdiv */
+ W_REG (osh, &cc->pllcontrol_addr, PMU1_PLL0_PLLCTL2);
+ tmp = R_REG (osh, &cc->pllcontrol_data);
+ ndiv_int =
+ (tmp & PMU1_PLL0_PC2_NDIV_INT_MASK) >> PMU1_PLL0_PC2_NDIV_INT_SHIFT;
+
+ W_REG (osh, &cc->pllcontrol_addr, PMU1_PLL0_PLLCTL3);
+ tmp = R_REG (osh, &cc->pllcontrol_data);
+ ndiv_frac =
+ (tmp & PMU1_PLL0_PC3_NDIV_FRAC_MASK) >> PMU1_PLL0_PC3_NDIV_FRAC_SHIFT;
+
+ fvco = (xt->fref * ndiv_int) << 8;
+ fvco += (xt->fref * (ndiv_frac >> 12)) >> 4;
+ fvco += (xt->fref * (ndiv_frac & 0xfff)) >> 12;
+ fvco >>= 8;
+ fvco *= p2div;
+ fvco /= p1div;
+ fvco /= 1000;
+ fvco *= 1000;
+
+ PMU_MSG (("sb_pmu0_cpuclk0: ndiv_int %u ndiv_frac %u "
+ "p2div %u p1div %u fvco %u\n",
+ ndiv_int, ndiv_frac, p2div, p1div, fvco));
+ ASSERT (fvco == PMU1_PLL0_FVCO);
+#endif /* BCMDBG */
+
+ /* Return ARM/SB clock */
+ return PMU1_PLL0_FVCO / m1div * 1000;
+}
+
+void BCMINITFN (sb_pmu_pll_init) (sb_t * sbh, osl_t * osh, uint xtalfreq)
+{
+ chipcregs_t *cc;
+ uint origidx;
+
+ ASSERT (sbh->cccaps & CC_CAP_PMU);
+
+ /* Remember original core before switch to chipc */
+ origidx = sb_coreidx (sbh);
+ cc = sb_setcore (sbh, SB_CC, 0);
+ ASSERT (cc);
+
+ switch (sbh->chip)
+ {
+ case BCM4328_CHIP_ID:
+ sb_pmu0_pllinit0 (sbh, osh, cc, xtalfreq);
+ break;
+ case BCM5354_CHIP_ID:
+ sb_pmu0_pllinit0 (sbh, osh, cc, xtalfreq);
+ break;
+ case BCM4325_CHIP_ID:
+ sb_pmu1_pllinit0 (sbh, osh, cc, xtalfreq);
+ break;
+ case BCM4312_CHIP_ID:
+ sb_pmu1_pllinit0 (sbh, osh, cc, xtalfreq);
+ break;
+ default:
+ PMU_MSG (("No PLL init done for chip %x rev %d pmurev %d\n",
+ sbh->chip, sbh->chiprev, sbh->pmurev));
+ break;
+ }
+
+ /* Return to original core */
+ sb_setcoreidx (sbh, origidx);
+}
+
+uint32 BCMINITFN (sb_pmu_alp_clock) (sb_t * sbh, osl_t * osh)
+{
+ chipcregs_t *cc;
+ uint origidx;
+ uint32 clock = ALP_CLOCK;
+
+ ASSERT (sbh->cccaps & CC_CAP_PMU);
+
+ /* Remember original core before switch to chipc */
+ origidx = sb_coreidx (sbh);
+ cc = sb_setcore (sbh, SB_CC, 0);
+ ASSERT (cc);
+
+ switch (sbh->chip)
+ {
+ case BCM4328_CHIP_ID:
+ clock = sb_pmu0_alpclk0 (sbh, osh, cc);
+ break;
+ case BCM5354_CHIP_ID:
+ clock = sb_pmu0_alpclk0 (sbh, osh, cc);
+ break;
+ case BCM4325_CHIP_ID:
+ clock = sb_pmu1_alpclk0 (sbh, osh, cc);
+ break;
+ case BCM4312_CHIP_ID:
+ clock = sb_pmu1_alpclk0 (sbh, osh, cc);
+ /* always 20Mhz */
+ clock = 20000 * 1000;
+ break;
+ default:
+ PMU_MSG (("No ALP clock specified "
+ "for chip %x rev %d pmurev %d, using default %d Hz\n",
+ sbh->chip, sbh->chiprev, sbh->pmurev, clock));
+ break;
+ }
+
+ /* Return to original core */
+ sb_setcoreidx (sbh, origidx);
+ return clock;
+}
+
+uint BCMINITFN (sb_pmu_cpu_clock) (sb_t * sbh, osl_t * osh)
+{
+ chipcregs_t *cc;
+ uint origidx;
+ uint32 clock = HT_CLOCK;
+
+ ASSERT (sbh->cccaps & CC_CAP_PMU);
+
+ /* Remember original core before switch to chipc */
+ origidx = sb_coreidx (sbh);
+ cc = sb_setcore (sbh, SB_CC, 0);
+ ASSERT (cc);
+
+ switch (sbh->chip)
+ {
+ case BCM4328_CHIP_ID:
+ clock = sb_pmu0_cpuclk0 (sbh, osh, cc);
+ break;
+ case BCM5354_CHIP_ID:
+ clock = sb_pmu0_cpuclk0 (sbh, osh, cc);
+ break;
+ case BCM4325_CHIP_ID:
+ clock = sb_pmu1_cpuclk0 (sbh, osh, cc);
+ break;
+ case BCM4312_CHIP_ID:
+ clock = sb_pmu1_cpuclk0 (sbh, osh, cc);
+ break;
+ default:
+ PMU_MSG (("No CPU clock specified "
+ "for chip %x rev %d pmurev %d, using default %d Hz\n",
+ sbh->chip, sbh->chiprev, sbh->pmurev, clock));
+ break;
+ }
+
+ /* Return to original core */
+ sb_setcoreidx (sbh, origidx);
+ return clock;
+}
+
+void BCMINITFN (sb_pmu_init) (sb_t * sbh, osl_t * osh)
+{
+ chipcregs_t *cc;
+ uint origidx;
+
+ ASSERT (sbh->cccaps & CC_CAP_PMU);
+
+ /* Remember original core before switch to chipc */
+ origidx = sb_coreidx (sbh);
+ cc = sb_setcore (sbh, SB_CC, 0);
+ ASSERT (cc);
+
+ if (sbh->pmurev >= 1)
+ {
+ if (sbh->chip == BCM4325_CHIP_ID && sbh->chiprev <= 1)
+ AND_REG (osh, &cc->pmucontrol, ~PCTL_NOILP_ON_WAIT);
+ else
+ OR_REG (osh, &cc->pmucontrol, PCTL_NOILP_ON_WAIT);
+ }
+
+ /* Return to original core */
+ sb_setcoreidx (sbh, origidx);
+}
+
+void BCMINITFN (sb_pmu_otp_power) (sb_t * sbh, osl_t * osh, bool on)
+{
+ chipcregs_t *cc;
+ uint origidx;
+
+ ASSERT (sbh->cccaps & CC_CAP_PMU);
+
+ /* Remember original core before switch to chipc */
+ origidx = sb_coreidx (sbh);
+ cc = sb_setcore (sbh, SB_CC, 0);
+ ASSERT (cc);
+
+ switch (sbh->chip)
+ {
+ case BCM4325_CHIP_ID:
+ if (on)
+ {
+ OR_REG (osh, &cc->min_res_mask, PMURES_BIT (RES4325_LNLDO2_PU));
+ if (sbh->boardflags & BFL_BUCKBOOST)
+ AND_REG (osh, &cc->min_res_mask,
+ ~PMURES_BIT (RES4325_BUCK_BOOST_PWM));
+ OSL_DELAY (500);
+ }
+ else
+ {
+ if (sbh->boardflags & BFL_BUCKBOOST)
+ OR_REG (osh, &cc->min_res_mask,
+ PMURES_BIT (RES4325_BUCK_BOOST_PWM));
+ AND_REG (osh, &cc->min_res_mask, ~PMURES_BIT (RES4325_LNLDO2_PU));
+ }
+ break;
+ default:
+ break;
+ }
+
+ /* Return to original core */
+ sb_setcoreidx (sbh, origidx);
+}
+
+void
+sb_pmu_rcal (sb_t * sbh, osl_t * osh)
+{
+ chipcregs_t *cc;
+ uint origidx;
+
+ ASSERT (sbh->cccaps & CC_CAP_PMU);
+
+ /* Remember original core before switch to chipc */
+ origidx = sb_coreidx (sbh);
+ cc = sb_setcore (sbh, SB_CC, 0);
+ ASSERT (cc);
+
+ switch (sbh->chip)
+ {
+ case BCM4325_CHIP_ID:
+ {
+ uint8 rcal_code;
+ uint32 val;
+
+ /* Kick RCal */
+ W_REG (osh, &cc->chipcontrol_addr, 1);
+ AND_REG (osh, &cc->chipcontrol_data, ~0x04);
+ OR_REG (osh, &cc->chipcontrol_data, 0x04);
+
+ /* Wait for completion */
+ SPINWAIT (0 == (R_REG (osh, &cc->chipstatus) & 0x08),
+ 10 * 1000 * 1000);
+ ASSERT (R_REG (osh, &cc->chipstatus) & 0x08);
+
+ /* Drop the LSB to convert from 5 bit code to 4 bit code */
+ rcal_code = (uint8) (R_REG (osh, &cc->chipstatus) >> 5) & 0x0f;
+ PMU_MSG (("RCal completed, status 0x%x, code 0x%x\n",
+ R_REG (osh, &cc->chipstatus), rcal_code));
+
+ /* Write RCal code into pmu_vreg_ctrl[32:29] */
+ W_REG (osh, &cc->regcontrol_addr, 0);
+ val = R_REG (osh, &cc->regcontrol_data) & ~((uint32) 0x07 << 29);
+ val |= (uint32) (rcal_code & 0x07) << 29;
+ W_REG (osh, &cc->regcontrol_data, val);
+ W_REG (osh, &cc->regcontrol_addr, 1);
+ val = R_REG (osh, &cc->regcontrol_data) & ~(uint32) 0x01;
+ val |= (uint32) ((rcal_code >> 3) & 0x01);
+ W_REG (osh, &cc->regcontrol_data, val);
+
+ /* Write RCal code into pmu_chip_ctrl[33:30] */
+ W_REG (osh, &cc->chipcontrol_addr, 0);
+ val = R_REG (osh, &cc->chipcontrol_data) & ~((uint32) 0x03 << 30);
+ val |= (uint32) (rcal_code & 0x03) << 30;
+ W_REG (osh, &cc->chipcontrol_data, val);
+ W_REG (osh, &cc->chipcontrol_addr, 1);
+ val = R_REG (osh, &cc->chipcontrol_data) & ~(uint32) 0x03;
+ val |= (uint32) ((rcal_code >> 2) & 0x03);
+ W_REG (osh, &cc->chipcontrol_data, val);
+
+ /* Set override in pmu_chip_ctrl[29] */
+ W_REG (osh, &cc->chipcontrol_addr, 0);
+ OR_REG (osh, &cc->chipcontrol_data, (0x01 << 29));
+
+ /* Power off RCal block */
+ W_REG (osh, &cc->chipcontrol_addr, 1);
+ AND_REG (osh, &cc->chipcontrol_data, ~0x04);
+
+ break;
+ }
+ default:
+ break;
+ }
+
+ /* Return to original core */
+ sb_setcoreidx (sbh, origidx);
+}
*/
#define BCMDONGLEHDRSZ 8
+/* Max. nvram variable table size */
+#define MAXSZ_NVRAM_VARS 4096
#endif /* _bcmdefs_h_ */
/*
* Broadcom device-specific manifest constants.
*
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
* All Rights Reserved.
*
* THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
* KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
* SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
- * $Id: bcmdevs.h,v 1.1.1.17 2006/04/15 01:29:08 michael Exp $
+ * $Id$
*/
#ifndef _BCMDEVS_H
#define _BCMDEVS_H
-#include "bcm4710.h"
-
-/* Known PCI vendor Id's */
+/* PCI vendor IDs */
#define VENDOR_EPIGRAM 0xfeda
#define VENDOR_BROADCOM 0x14e4
#define VENDOR_3COM 0x10b7
#define VENDOR_DELL 0x1028
#define VENDOR_HP 0x0e11
#define VENDOR_APPLE 0x106b
+#define VENDOR_SI_IMAGE 0x1095 /* Silicon Image, used by Arasan SDIO Host */
+#define VENDOR_BUFFALO 0x1154 /* Buffalo vendor id */
+#define VENDOR_TI 0x104c /* Texas Instruments */
+
+/* PCMCIA vendor IDs */
+#define VENDOR_BROADCOM_PCMCIA 0x02d0
+
+/* SDIO vendor IDs */
+#define VENDOR_BROADCOM_SDIO 0x00BF
-/* PCI Device Id's */
+/* PCI Device IDs */
#define BCM4210_DEVICE_ID 0x1072 /* never used */
-#define BCM4211_DEVICE_ID 0x4211
#define BCM4230_DEVICE_ID 0x1086 /* never used */
+#define BCM4401_ENET_ID 0x170c /* 4401b0 production enet cards */
+#define BCM3352_DEVICE_ID 0x3352 /* bcm3352 device id */
+#define BCM3360_DEVICE_ID 0x3360 /* bcm3360 device id */
+#define BCM4211_DEVICE_ID 0x4211
#define BCM4231_DEVICE_ID 0x4231
-
+#define BCM4303_D11B_ID 0x4303 /* 4303 802.11b */
+#define BCM4311_D11G_ID 0x4311 /* 4311 802.11b/g id */
+#define BCM4311_D11DUAL_ID 0x4312 /* 4311 802.11a/b/g id */
+#define BCM4311_D11A_ID 0x4313 /* 4311 802.11a id */
+#define BCM4328_D11DUAL_ID 0x4314 /* 4328 802.11a/g id */
+#define BCM4328_D11G_ID 0x4315 /* 4328 802.11g 2.4Ghz band id */
+#define BCM4328_D11A_ID 0x4316 /* 4328 802.11a 5Ghz band id */
+#define BCM4318_D11G_ID 0x4318 /* 4318 802.11b/g id */
+#define BCM4318_D11DUAL_ID 0x4319 /* 4318 802.11a/b/g id */
+#define BCM4318_D11A_ID 0x431a /* 4318 802.11a id */
+#define BCM4325_D11DUAL_ID 0x431b /* 4325 802.11a/g id */
+#define BCM4325_D11G_ID 0x431c /* 4325 802.11g 2.4Ghz band id */
+#define BCM4325_D11A_ID 0x431d /* 4325 802.11a 5Ghz band id */
+#define BCM4306_D11G_ID 0x4320 /* 4306 802.11g */
+#define BCM4306_D11A_ID 0x4321 /* 4306 802.11a */
+#define BCM4306_UART_ID 0x4322 /* 4306 uart */
+#define BCM4306_V90_ID 0x4323 /* 4306 v90 codec */
+#define BCM4306_D11DUAL_ID 0x4324 /* 4306 dual A+B */
+#define BCM4306_D11G_ID2 0x4325
+#define BCM4321_D11N_ID 0x4328 /* 4321 802.11n dualband id */
+#define BCM4321_D11N2G_ID 0x4329 /* 4321 802.11n 2.4Ghz band id */
+#define BCM4321_D11N5G_ID 0x432a /* 4321 802.11n 5Ghz band id */
+#define BCMGPRS_UART_ID 0x4333 /* Uart id used by 4306/gprs card */
+#define BCMGPRS2_UART_ID 0x4344 /* Uart id used by 4306/gprs card */
+#define FPGA_JTAGM_ID 0x43f0 /* FPGA jtagm device id */
+#define BCM_JTAGM_ID 0x43f1 /* BCM jtagm device id */
+#define SDIOH_FPGA_ID 0x43f2 /* sdio host fpga */
+#define BCM_SDIOH_ID 0x43f3 /* BCM sdio host id */
+#define SDIOD_FPGA_ID 0x43f4 /* sdio device fpga */
+#define SPIH_FPGA_ID 0x43f5 /* PCI SPI Host Controller FPGA */
+#define MIMO_FPGA_ID 0x43f8 /* FPGA mimo minimacphy device id */
+#define BCM4402_ENET_ID 0x4402 /* 4402 enet */
+#define BCM4402_V90_ID 0x4403 /* 4402 v90 codec */
#define BCM4410_DEVICE_ID 0x4410 /* bcm44xx family pci iline */
-#define BCM4430_DEVICE_ID 0x4430 /* bcm44xx family cardbus iline */
#define BCM4412_DEVICE_ID 0x4412 /* bcm44xx family pci enet */
+#define BCM4430_DEVICE_ID 0x4430 /* bcm44xx family cardbus iline */
#define BCM4432_DEVICE_ID 0x4432 /* bcm44xx family cardbus enet */
-
-#define BCM3352_DEVICE_ID 0x3352 /* bcm3352 device id */
-#define BCM3360_DEVICE_ID 0x3360 /* bcm3360 device id */
-
-#define EPI41210_DEVICE_ID 0xa0fa /* bcm4210 */
-#define EPI41230_DEVICE_ID 0xa10e /* bcm4230 */
-
+#define BCM4704_ENET_ID 0x4706 /* 4704 enet (Use 47XX_ENET_ID instead!) */
+#define BCM4710_DEVICE_ID 0x4710 /* 4710 primary function 0 */
#define BCM47XX_ILINE_ID 0x4711 /* 47xx iline20 */
#define BCM47XX_V90_ID 0x4712 /* 47xx v90 codec */
#define BCM47XX_ENET_ID 0x4713 /* 47xx enet */
#define BCM47XX_ATA100_ID 0x471d /* 47xx parallel ATA */
#define BCM47XX_SATAXOR_ID 0x471e /* 47xx serial ATA & XOR DMA */
#define BCM47XX_GIGETH_ID 0x471f /* 47xx GbE (5700) */
-
+#define BCM4712_MIPS_ID 0x4720 /* 4712 base devid */
#define BCM47XX_SMBUS_EMU_ID 0x47fe /* 47xx emulated SMBus device */
#define BCM47XX_XOR_EMU_ID 0x47ff /* 47xx emulated XOR engine */
+#define EPI41210_DEVICE_ID 0xa0fa /* bcm4210 */
+#define EPI41230_DEVICE_ID 0xa10e /* bcm4230 */
+#define JINVANI_SDIOH_ID 0x4743 /* Jinvani SDIO Gold Host */
+#define BCM27XX_SDIOH_ID 0x2702 /* BCM27xx Standard SDIO Host */
+#define PCIXX21_FLASHMEDIA_ID 0x803b /* TI PCI xx21 Standard Host Controller */
+#define PCIXX21_SDIOH_ID 0x803c /* TI PCI xx21 Standard Host Controller */
+/* Chip IDs */
#define BCM4710_CHIP_ID 0x4710 /* 4710 chipid returned by sb_chip() */
-#define BCM4710_DEVICE_ID 0x4710 /* 4710 primary function 0 */
-
#define BCM4402_CHIP_ID 0x4402 /* 4402 chipid */
-#define BCM4402_ENET_ID 0x4402 /* 4402 enet */
-#define BCM4402_V90_ID 0x4403 /* 4402 v90 codec */
-#define BCM4401_ENET_ID 0x170c /* 4401b0 production enet cards */
-
#define BCM4306_CHIP_ID 0x4306 /* 4306 chipcommon chipid */
-#define BCM4306_D11G_ID 0x4320 /* 4306 802.11g */
-#define BCM4306_D11G_ID2 0x4325
-#define BCM4306_D11A_ID 0x4321 /* 4306 802.11a */
-#define BCM4306_UART_ID 0x4322 /* 4306 uart */
-#define BCM4306_V90_ID 0x4323 /* 4306 v90 codec */
-#define BCM4306_D11DUAL_ID 0x4324 /* 4306 dual A+B */
-
-#define BCM4309_PKG_ID 1 /* 4309 package id */
-
#define BCM4311_CHIP_ID 0x4311 /* 4311 PCIe 802.11a/b/g */
-#define BCM4311_D11G_ID 0x4311 /* 4311 802.11b/g id */
-#define BCM4311_D11DUAL_ID 0x4312 /* 4311 802.11a/b/g id */
-#define BCM4311_D11A_ID 0x4313 /* 4311 802.11a id */
-
-#define BCM4303_D11B_ID 0x4303 /* 4303 802.11b */
-#define BCM4303_PKG_ID 2 /* 4303 package id */
-
-#define BCMGPRS_UART_ID 0x4333 /* Uart id used by 4306/gprs card */
-#define BCMGPRS2_UART_ID 0x4344 /* Uart id used by 4306/gprs card */
-
#define BCM4704_CHIP_ID 0x4704 /* 4704 chipcommon chipid */
-#define BCM4704_ENET_ID 0x4706 /* 4704 enet (Use 47XX_ENET_ID instead!) */
-
+#define BCM4312_CHIP_ID 0x4312 /* 4312 chip common chipid */
#define BCM4318_CHIP_ID 0x4318 /* 4318 chip common chipid */
-#define BCM4318_D11G_ID 0x4318 /* 4318 802.11b/g id */
-#define BCM4318_D11DUAL_ID 0x4319 /* 4318 802.11a/b/g id */
-#define BCM4318_D11A_ID 0x431a /* 4318 802.11a id */
-
#define BCM4321_CHIP_ID 0x4321 /* 4321 chip common chipid */
-#define BCM4321_D11N_ID 0x4328 /* 4321 802.11n dualband id */
-#define BCM4321_D11N2G_ID 0x4329 /* 4321 802.11n 2.4Hgz band id */
-#define BCM4321_D11N5G_ID 0x432a /* 4321 802.11n 5Ghz band id */
-
-#define BCM4331_CHIP_ID 0x4331 /* 4331 chip common chipid */
-#define BCM4331_D11N2G_ID 0x4330 /* 4331 802.11n 2.4Ghz band id */
-#define BCM4331_D11N_ID 0x4331 /* 4331 802.11n dualband id */
-#define BCM4331_D11N5G_ID 0x4332 /* 4331 802.11n 5Ghz band id */
-
-#define HDLSIM5350_PKG_ID 1 /* HDL simulator package id for a 5350 */
-#define HDLSIM_PKG_ID 14 /* HDL simulator package id */
-#define HWSIM_PKG_ID 15 /* Hardware simulator package id */
-
+#define BCM4328_CHIP_ID 0x4328 /* 4328 chip common chipid */
+#define BCM4325_CHIP_ID 0x4325 /* 4325 chip common chipid */
#define BCM4712_CHIP_ID 0x4712 /* 4712 chipcommon chipid */
-#define BCM4712_MIPS_ID 0x4720 /* 4712 base devid */
-#define BCM4712LARGE_PKG_ID 0 /* 340pin 4712 package id */
-#define BCM4712SMALL_PKG_ID 1 /* 200pin 4712 package id */
-#define BCM4712MID_PKG_ID 2 /* 225pin 4712 package id */
-
#define BCM5365_CHIP_ID 0x5365 /* 5365 chipcommon chipid */
#define BCM5350_CHIP_ID 0x5350 /* bcm5350 chipcommon chipid */
#define BCM5352_CHIP_ID 0x5352 /* bcm5352 chipcommon chipid */
-
+#define BCM5354_CHIP_ID 0x5354 /* bcm5354 chipcommon chipid */
#define BCM4320_CHIP_ID 0x4320 /* bcm4320 chipcommon chipid */
-
-#define BCM4328_CHIP_ID 0x4328 /* bcm4328 chipcommon chipid */
-
-#define FPGA_JTAGM_ID 0x43f0 /* FPGA jtagm device id */
-#define BCM43XX_JTAGM_ID 0x43f1 /* 43xx jtagm device id */
-#define BCM43XXOLD_JTAGM_ID 0x4331 /* 43xx old jtagm device id */
-
-#define SDIOH_FPGA_ID 0x43f2 /* sdio host fpga */
-#define SDIOD_FPGA_ID 0x43f4 /* sdio device fpga */
-
-#define MIMO_FPGA_ID 0x43f8 /* FPGA mimo minimacphy device id */
-
#define BCM4785_CHIP_ID 0x4785 /* 4785 chipcommon chipid */
-/* PCMCIA vendor Id's */
-
-#define VENDOR_BROADCOM_PCMCIA 0x02d0
-
-/* SDIO vendor Id's */
-#define VENDOR_BROADCOM_SDIO 0x00BF
-
+/* Package IDs */
+#define BCM4303_PKG_ID 2 /* 4303 package id */
+#define BCM4309_PKG_ID 1 /* 4309 package id */
+#define BCM4712LARGE_PKG_ID 0 /* 340pin 4712 package id */
+#define BCM4712SMALL_PKG_ID 1 /* 200pin 4712 package id */
+#define BCM4712MID_PKG_ID 2 /* 225pin 4712 package id */
+#define BCM4328USBD11G_PKG_ID 2 /* 4328 802.11g USB package id */
+#define BCM4328USBDUAL_PKG_ID 3 /* 4328 802.11a/g USB package id */
+#define BCM4328SDIOD11G_PKG_ID 4 /* 4328 802.11g SDIO package id */
+#define BCM4328SDIODUAL_PKG_ID 5 /* 4328 802.11a/g SDIO package id */
+#define BCM5354E_PKG_ID 1 /* 5354E package id */
+#define HDLSIM5350_PKG_ID 1 /* HDL simulator package id for a 5350 */
+#define HDLSIM_PKG_ID 14 /* HDL simulator package id */
+#define HWSIM_PKG_ID 15 /* Hardware simulator package id */
+#define PCIXX21_FLASHMEDIA0_ID 0x8033 /* TI PCI xx21 Standard Host Controller */
+#define PCIXX21_SDIOH0_ID 0x8034 /* TI PCI xx21 Standard Host Controller */
/* boardflags */
-#define BFL_BTCOEXIST 0x0001 /* This board implements Bluetooth coexistance */
-#define BFL_PACTRL 0x0002 /* This board has gpio 9 controlling the PA */
-#define BFL_AIRLINEMODE 0x0004 /* This board implements gpio13 radio disable indication */
-#define BFL_ENETROBO 0x0010 /* This board has robo switch or core */
-#define BFL_CCKHIPWR 0x0040 /* Can do high-power CCK transmission */
-#define BFL_ENETADM 0x0080 /* This board has ADMtek switch */
-#define BFL_ENETVLAN 0x0100 /* This board has vlan capability */
-#define BFL_AFTERBURNER 0x0200 /* This board supports Afterburner mode */
-#define BFL_NOPCI 0x0400 /* This board leaves PCI floating */
-#define BFL_FEM 0x0800 /* This board supports the Front End Module */
-#define BFL_EXTLNA 0x1000 /* This board has an external LNA */
-#define BFL_HGPA 0x2000 /* This board has a high gain PA */
-#define BFL_BTCMOD 0x4000 /* This board' BTCOEXIST is in the alternate gpios */
-#define BFL_ALTIQ 0x8000 /* Alternate I/Q settings */
-
+#define BFL_BTCOEXIST 0x00000001 /* This board implements Bluetooth coexistance */
+#define BFL_PACTRL 0x00000002 /* This board has gpio 9 controlling the PA */
+#define BFL_AIRLINEMODE 0x00000004 /* This board implements gpio13 radio disable indication */
+#define BFL_ADCDIV 0x00000008 /* This board has the rssi ADC divider */
+#define BFL_ENETROBO 0x00000010 /* This board has robo switch or core */
+#define BFL_NOPLLDOWN 0x00000020 /* Not ok to power down the chip pll and oscillator */
+#define BFL_CCKHIPWR 0x00000040 /* Can do high-power CCK transmission */
+#define BFL_ENETADM 0x00000080 /* This board has ADMtek switch */
+#define BFL_ENETVLAN 0x00000100 /* This board has vlan capability */
+#define BFL_AFTERBURNER 0x00000200 /* This board supports Afterburner mode */
+#define BFL_NOPCI 0x00000400 /* This board leaves PCI floating */
+#define BFL_FEM 0x00000800 /* This board supports the Front End Module */
+#define BFL_EXTLNA 0x00001000 /* This board has an external LNA */
+#define BFL_HGPA 0x00002000 /* This board has a high gain PA */
+#define BFL_BTCMOD 0x00004000 /* This board' BTCOEXIST is in the alternate gpios */
+#define BFL_ALTIQ 0x00008000 /* Alternate I/Q settings */
+#define BFL_NOPA 0x00010000 /* This board has no PA */
+#define BFL_RSSIINV 0x00020000 /* This board's RSSI uses positive slope */
+#define BFL_PAREF 0x00040000 /* This board uses the PARef LDO */
+#define BFL_3TSWITCH 0x00080000 /* This board uses a triple throw switch shared with BT */
+#define BFL_PHASESHIFTER 0x00100000 /* This board can support phase shifter */
+#define BFL_BUCKBOOST 0x00200000 /* This board has buck/booster */
/* boardflags2 */
#define BFL2_RXBB_INT_REG_DIS 0x00000001 /* This board has an external rxbb regulator */
-#define BFL2_SSWITCH_AVAIL 0x00000002 /* This board has a superswitch for > 2 antennas */
-#define BFL2_TXPWRCTRL_EN 0x00000004 /* This board permits TX Power Control to be enabled */
+#define BFL2_DEPRECIATED_STUB 0x00000002 /* This board flag is depreciated */
+#define BFL2_TXPWRCTRL_EN 0x00000004 /* This board permits enabling TX Power Control */
+#define BFL2_2X4_DIV 0x00000008 /* This board supports the 2X4 diversity switch */
+#define BFL2_5G_PWRGAIN 0x00000010 /* This board supports 5G band power gain */
+#define BFL2_PCIEWAR_OVR 0x00000020 /* This board overrides ASPM and Clkreq settings */
+#define BFL2_CAESERS_BRD 0x00000040 /* This board is Dell Caeser's brd (unused by sw) */
/* board specific GPIO assignment, gpio 0-3 are also customer-configurable led */
#define BOARD_GPIO_BTCMOD_IN 0x010 /* bit 4 is the alternate BT Coexistance Input */
#define BOARD_GPIO_BTC_IN 0x080 /* bit 7 is BT Coexistance Input */
#define BOARD_GPIO_BTC_OUT 0x100 /* bit 8 is BT Coexistance Out */
#define BOARD_GPIO_PACTRL 0x200 /* bit 9 controls the PA on new 4306 boards */
+#define BOARD_GPIO_ANT0_SEL 0x100 /* With BFL2_2X4_DIV */
+#define BOARD_GPIO_ANT1_SEL 0x200 /* With BFL2_2X4_DIV */
+
#define PCI_CFG_GPIO_SCS 0x10 /* PCI config space bit 4 for 4306c0 slow clock source */
#define PCI_CFG_GPIO_HWRAD 0x20 /* PCI config space GPIO 13 for hw radio disable */
#define PCI_CFG_GPIO_XTAL 0x40 /* PCI config space GPIO 14 for Xtal powerup */
#define XTAL_ON_DELAY 1000 /* us crystal power-on delay */
/* Reference Board Types */
-
#define BU4710_BOARD 0x0400
#define VSIM4710_BOARD 0x0401
#define QT4710_BOARD 0x0402
/* BCM63XX boards */
#define BCM96338_BOARD 0x6338
#define BCM96348_BOARD 0x6348
+#define BCM96358_BOARD 0x6358
/* Another mp4306 with SiGe */
#define BCM94306P_BOARD 0x044c
#define CB2_4321_BOARD 0x046d
#define MC4321_BOARD 0x046e
+/* 4328 boards */
+#define BU4328_BOARD 0x0481
+#define BCM4328SDG_BOARD 0x0482
+#define BCM4328SDAG_BOARD 0x0483
+#define BCM4328UG_BOARD 0x0484
+#define BCM4328UAG_BOARD 0x0485
+#define BCM4328PC_BOARD 0x0486
+#define BCM4328CF_BOARD 0x0487
+
+/* 4325 boards */
+#define BU4325_BOARD 0x0490
+
/* # of GPIO pins */
#define GPIO_NUMPINS 16
#define BCM2062_IDCODE 0x02062000
#define BCM2062A0_IDCODE 0x0206217f
+#define BCM2063_ID 0x2063
+#define BCM2063_IDCODE 0x02063000
+#define BCM2063A0_IDCODE 0x0206317f
+
/* parts of an idcode: */
#define IDCODE_MFG_MASK 0x00000fff
#define IDCODE_MFG_SHIFT 0
/*
* local version of endian.h - byte order defines
*
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
* All Rights Reserved.
*
* THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
* SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
*
- * $Id: bcmendian.h,v 1.1.1.10 2006/02/27 03:43:16 honor Exp $
+ * $Id$
*/
#ifndef _BCMENDIAN_H_
/*
* NVRAM variable manipulation
*
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
* All Rights Reserved.
*
* THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
* SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
*
- * $Id: bcmnvram.h,v 1.17 2006/03/02 12:33:44 honor Exp $
+ * $Id$
*/
#ifndef _bcmnvram_h_
};
/*
- * Initialize NVRAM access. May be unnecessary or undefined on certain
- * platforms.
+ * Get default value for an NVRAM variable
+ */
+extern char *nvram_default_get(const char *name);
+
+/*
+ * Append a chunk of nvram variables to the global list
+ */
+extern int nvram_append(void *sb, char *vars, uint varsz);
+
+/*
+ * Check for reset button press for restoring factory defaults.
*/
-extern int nvram_init(void *sbh);
+extern bool nvram_reset(void *sbh);
/*
* Disable NVRAM access. May be unnecessary or undefined on certain
* as input
*/
extern int BCMINITFN(nvram_resetgpio_init)(void *sbh);
-extern int BCMINITFN(nvram_gpio_init)(const char *name, void *sbh);
-extern int BCMINITFN(nvram_gpio_set)(const char *name, void *sbh, int type);
/*
* Get the value of an NVRAM variable.
*/
#define nvram_safe_get(name) (nvram_get(name) ? : "")
-#define nvram_safe_unset(name) ({ \
- if(nvram_get(name)) \
- nvram_unset(name); \
-})
-
-#define nvram_safe_set(name, value) ({ \
- if(!nvram_get(name) || strcmp(nvram_get(name), value)) \
- nvram_set(name, value); \
-})
-
/*
* Match an NVRAM variable.
* @param name name of variable to match
* @param count size of buffer in bytes
* @return 0 on success and errno on failure
*/
-extern int nvram_getall(char *buf, int count);
+extern int nvram_getall(char *nvram_buf, int count);
-extern int file2nvram(char *filename, char *varname);
-extern int nvram2file(char *varname, char *filename);
+/*
+ * returns the crc value of the nvram
+ * @param nvh nvram header pointer
+ */
+extern uint8 nvram_calc_crc(struct nvram_header * nvh);
+
+extern char* getvar(char *vars, const char *name);
+extern int getintvar(char *vars, const char *name);
#endif /* _LANGUAGE_ASSEMBLY */
+/* The NVRAM version number stored as an NVRAM variable */
+#define NVRAM_SOFTWARE_VERSION "1"
+
#define NVRAM_MAGIC 0x48534C46 /* 'FLSH' */
-#define NVRAM_CLEAR_MAGIC 0x0
+#define NVRAM_CLEAR_MAGIC 0x0
#define NVRAM_INVALID_MAGIC 0xFFFFFFFF
#define NVRAM_VERSION 1
#define NVRAM_HEADER_SIZE 20
#define NVRAM_MAX_VALUE_LEN 255
#define NVRAM_MAX_PARAM_LEN 64
+#define NVRAM_CRC_START_POSITION 9 /* magic, len, crc8 to be skipped */
+#define NVRAM_CRC_VER_MASK 0xffffff00 /* for crc_ver_init */
+
#endif /* _bcmnvram_h_ */
/*
* Misc useful routines to access NIC local SROM/OTP .
*
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
* All Rights Reserved.
*
* THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
* SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
*
- * $Id: bcmsrom.h,v 1.1.1.13 2006/04/15 01:29:08 michael Exp $
+ * $Id$
*/
#ifndef _bcmsrom_h_
#define _bcmsrom_h_
/* Maximum srom: 4 Kilobits == 512 bytes */
-#define SROM_MAX 512
+#define SROM_MAX 512
+
+
+#define SROM_WORDS 64
+
+#define SROM3_SWRGN_OFF 28 /* s/w region offset in words */
+
+#define SROM_SSID 2
+
+#define SROM_WL1LHMAXP 29
+
+#define SROM_WL1LPAB0 30
+#define SROM_WL1LPAB1 31
+#define SROM_WL1LPAB2 32
+
+#define SROM_WL1HPAB0 33
+#define SROM_WL1HPAB1 34
+#define SROM_WL1HPAB2 35
+
+#define SROM_MACHI_IL0 36
+#define SROM_MACMID_IL0 37
+#define SROM_MACLO_IL0 38
+#define SROM_MACHI_ET0 39
+#define SROM_MACMID_ET0 40
+#define SROM_MACLO_ET0 41
+#define SROM_MACHI_ET1 42
+#define SROM_MACMID_ET1 43
+#define SROM_MACLO_ET1 44
+#define SROM3_MACHI 37
+#define SROM3_MACMID 38
+#define SROM3_MACLO 39
+
+#define SROM_BXARSSI2G 40
+#define SROM_BXARSSI5G 41
+
+#define SROM_TRI52G 42
+#define SROM_TRI5GHL 43
+
+#define SROM_RXPO52G 45
+
+#define SROM2_ENETPHY 45
+
+#define SROM_AABREV 46
+/* Fields in AABREV */
+#define SROM_BR_MASK 0x00ff
+#define SROM_CC_MASK 0x0f00
+#define SROM_CC_SHIFT 8
+#define SROM_AA0_MASK 0x3000
+#define SROM_AA0_SHIFT 12
+#define SROM_AA1_MASK 0xc000
+#define SROM_AA1_SHIFT 14
+
+#define SROM_WL0PAB0 47
+#define SROM_WL0PAB1 48
+#define SROM_WL0PAB2 49
+
+#define SROM_LEDBH10 50
+#define SROM_LEDBH32 51
+
+#define SROM_WL10MAXP 52
+
+#define SROM_WL1PAB0 53
+#define SROM_WL1PAB1 54
+#define SROM_WL1PAB2 55
+
+#define SROM_ITT 56
+
+#define SROM_BFL 57
+#define SROM_BFL2 28
+#define SROM3_BFL2 61
+
+#define SROM_AG10 58
+
+#define SROM_CCODE 59
+
+#define SROM_OPO 60
+
+#define SROM3_LEDDC 62
+
+#define SROM_CRCREV 63
/* SROM Rev 4: Reallocate the software part of the srom to accomodate
* MIMO features. It assumes up to two PCIE functions and 440 bytes
#define SROM4_BFL1 35
#define SROM4_BFL2 36
#define SROM4_BFL3 37
+#define SROM5_BFL0 37
+#define SROM5_BFL1 38
+#define SROM5_BFL2 39
+#define SROM5_BFL3 40
#define SROM4_MACHI 38
#define SROM4_MACMID 39
#define SROM4_MACLO 40
+#define SROM5_MACHI 41
+#define SROM5_MACMID 42
+#define SROM5_MACLO 43
#define SROM4_CCODE 41
#define SROM4_REGREV 42
+#define SROM5_CCODE 34
+#define SROM5_REGREV 35
#define SROM4_LEDBH10 43
#define SROM4_LEDBH32 44
+#define SROM5_LEDBH10 59
+#define SROM5_LEDBH32 60
#define SROM4_LEDDC 45
+#define SROM5_LEDDC 45
#define SROM4_AA 46
#define SROM4_AA2G_MASK 0x00ff
#define SROM4_TXPID5GL 53
#define SROM4_TXPID5GH 55
+#define SROM4_TXRXC 61
+#define SROM4_TXCHAIN_MASK 0x000f
+#define SROM4_TXCHAIN_SHIFT 0
+#define SROM4_RXCHAIN_MASK 0x00f0
+#define SROM4_RXCHAIN_SHIFT 4
+#define SROM4_SWITCH_MASK 0xff00
+#define SROM4_SWITCH_SHIFT 8
+
/* Per-path fields */
#define MAX_PATH 4
#define SROM4_PATH0 64
#define SROM4_5G_MCSPO 173
#define SROM4_5GL_MCSPO 181
#define SROM4_5GH_MCSPO 189
-#define SROM4_CCDPO 197
+#define SROM4_CDDPO 197
#define SROM4_STBCPO 198
#define SROM4_BW40PO 199
#define SROM4_BWDUPPO 200
-extern int srom_var_init(void *sbh, uint bus, void *curmap, osl_t *osh, char **vars, uint *count);
+#define SROM4_CRCREV 219
+
+
+/*SROM Rev 8: Make space for a 48word hardware header for PCIe rev >= 6.
+ * This is acombined srom for both MIMO and SISO boards, usable in
+ * the .130 4Kilobit OTP with hardware redundancy.
+ */
+
+#define SROM8_SIGN 64
+
+#define SROM8_BREV 65
+
+#define SROM8_BFL0 66
+#define SROM8_BFL1 67
+#define SROM8_BFL2 68
+#define SROM8_BFL3 69
+
+#define SROM8_MACHI 70
+#define SROM8_MACMID 71
+#define SROM8_MACLO 72
+
+#define SROM8_CCODE 73
+#define SROM8_REGREV 74
+
+#define SROM8_LEDBH10 75
+#define SROM8_LEDBH32 76
+
+#define SROM8_LEDDC 77
+
+#define SROM8_AA 78
+
+#define SROM8_AG10 79
+#define SROM8_AG32 80
+
+#define SROM8_TXRXC 81
+
+#define SROM8_BXARSSI2G 82
+#define SROM8_BXARSSI5G 83
+#define SROM8_TRI52G 84
+#define SROM8_TRI5GHL 85
+#define SROM8_RXPO52G 86
+
+/* Per-path offsets & fields */
+#define SROM8_PATH0 96
+#define SROM8_PATH1 112
+#define SROM8_PATH2 128
+#define SROM8_PATH3 144
+
+#define SROM8_2G_ITT_MAXP 0
+#define SROM8_2G_PA 1
+#define SROM8_5G_ITT_MAXP 4
+#define SROM8_5GLH_MAXP 5
+#define SROM8_5G_PA 6
+#define SROM8_5GL_PA 9
+#define SROM8_5GH_PA 12
+
+/* All the miriad power offsets */
+#define SROM8_2G_CCKPO 160
+
+#define SROM8_2G_OFDMPO 161
+#define SROM8_5G_OFDMPO 163
+#define SROM8_5GL_OFDMPO 165
+#define SROM8_5GH_OFDMPO 167
+
+#define SROM8_2G_MCSPO 169
+#define SROM8_5G_MCSPO 177
+#define SROM8_5GL_MCSPO 185
+#define SROM8_5GH_MCSPO 193
+
+#define SROM8_CDDPO 201
+#define SROM8_STBCPO 202
+#define SROM8_BW40PO 203
+#define SROM8_BWDUPPO 204
+
+/* SISO PA parameters are in the path0 spaces */
+#define SROM8_SISO 96
+
+/* Legacy names for SISO PA paramters */
+#define SROM8_W0_ITTMAXP (SROM8_SISO + SROM8_2G_ITT_MAXP)
+#define SROM8_W0_PAB0 (SROM8_SISO + SROM8_2G_PA)
+#define SROM8_W0_PAB1 (SROM8_SISO + SROM8_2G_PA + 1)
+#define SROM8_W0_PAB2 (SROM8_SISO + SROM8_2G_PA + 2)
+#define SROM8_W1_ITTMAXP (SROM8_SISO + SROM8_5G_ITT_MAXP)
+#define SROM8_W1_MAXP_LCHC (SROM8_SISO + SROM8_5GLH_MAXP)
+#define SROM8_W1_PAB0 (SROM8_SISO + SROM8_5G_PA)
+#define SROM8_W1_PAB1 (SROM8_SISO + SROM8_5G_PA + 1)
+#define SROM8_W1_PAB2 (SROM8_SISO + SROM8_5G_PA + 2)
+#define SROM8_W1_PAB0_LC (SROM8_SISO + SROM8_5GL_PA)
+#define SROM8_W1_PAB1_LC (SROM8_SISO + SROM8_5GL_PA + 1)
+#define SROM8_W1_PAB2_LC (SROM8_SISO + SROM8_5GL_PA + 2)
+#define SROM8_W1_PAB0_HC (SROM8_SISO + SROM8_5GH_PA)
+#define SROM8_W1_PAB1_HC (SROM8_SISO + SROM8_5GH_PA + 1)
+#define SROM8_W1_PAB2_HC (SROM8_SISO + SROM8_5GH_PA + 2)
+
+#define SROM8_CRCREV 219
+
+/* Prototypes */
+extern int srom_var_init(sb_t *sbh, uint bus, void *curmap, osl_t *osh,
+ char **vars, uint *count);
+
+extern int srom_read(sb_t *sbh, uint bus, void *curmap, osl_t *osh,
+ uint byteoff, uint nbytes, uint16 *buf);
+extern int srom_write(sb_t *sbh, uint bus, void *curmap, osl_t *osh,
+ uint byteoff, uint nbytes, uint16 *buf);
-extern int srom_read(uint bus, void *curmap, osl_t *osh, uint byteoff, uint nbytes, uint16 *buf);
-extern int srom_write(uint bus, void *curmap, osl_t *osh, uint byteoff, uint nbytes, uint16 *buf);
+extern int srom_parsecis(osl_t *osh, uint8 **pcis, uint ciscnt,
+ char **vars, uint *count);
#endif /* _bcmsrom_h_ */
+++ /dev/null
-/*
- * Misc useful os-independent macros and functions.
- *
- * Copyright 2006, Broadcom Corporation
- * All Rights Reserved.
- *
- * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
- * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
- * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
- * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
- * $Id: bcmutils.h,v 1.1.1.16 2006/04/08 06:13:39 honor Exp $
- */
-
-#ifndef _bcmutils_h_
-#define _bcmutils_h_
-
-/* ** driver-only section ** */
-#ifdef BCMDRIVER
-
-#define _BCM_U 0x01 /* upper */
-#define _BCM_L 0x02 /* lower */
-#define _BCM_D 0x04 /* digit */
-#define _BCM_C 0x08 /* cntrl */
-#define _BCM_P 0x10 /* punct */
-#define _BCM_S 0x20 /* white space (space/lf/tab) */
-#define _BCM_X 0x40 /* hex digit */
-#define _BCM_SP 0x80 /* hard space (0x20) */
-
-#define GPIO_PIN_NOTDEFINED 0x20 /* Pin not defined */
-
-extern unsigned char bcm_ctype[];
-#define bcm_ismask(x) (bcm_ctype[(int)(unsigned char)(x)])
-
-#define bcm_isalnum(c) ((bcm_ismask(c)&(_BCM_U|_BCM_L|_BCM_D)) != 0)
-#define bcm_isalpha(c) ((bcm_ismask(c)&(_BCM_U|_BCM_L)) != 0)
-#define bcm_iscntrl(c) ((bcm_ismask(c)&(_BCM_C)) != 0)
-#define bcm_isdigit(c) ((bcm_ismask(c)&(_BCM_D)) != 0)
-#define bcm_isgraph(c) ((bcm_ismask(c)&(_BCM_P|_BCM_U|_BCM_L|_BCM_D)) != 0)
-#define bcm_islower(c) ((bcm_ismask(c)&(_BCM_L)) != 0)
-#define bcm_isprint(c) ((bcm_ismask(c)&(_BCM_P|_BCM_U|_BCM_L|_BCM_D|_BCM_SP)) != 0)
-#define bcm_ispunct(c) ((bcm_ismask(c)&(_BCM_P)) != 0)
-#define bcm_isspace(c) ((bcm_ismask(c)&(_BCM_S)) != 0)
-#define bcm_isupper(c) ((bcm_ismask(c)&(_BCM_U)) != 0)
-#define bcm_isxdigit(c) ((bcm_ismask(c)&(_BCM_D|_BCM_X)) != 0)
-
-/*
- * Spin at most 'us' microseconds while 'exp' is true.
- * Caller should explicitly test 'exp' when this completes
- * and take appropriate error action if 'exp' is still true.
- */
-#define SPINWAIT(exp, us) { \
- uint countdown = (us) + 9; \
- while ((exp) && (countdown >= 10)) {\
- OSL_DELAY(10); \
- countdown -= 10; \
- } \
-}
-
-struct ether_addr {
- uint8 octet[6];
-} __attribute__((packed));
-
-/* string */
-extern uchar bcm_toupper(uchar c);
-extern ulong bcm_strtoul(char *cp, char **endp, uint base);
-extern char *bcmstrstr(char *haystack, char *needle);
-extern char *bcmstrcat(char *dest, const char *src);
-extern ulong wchar2ascii(char *abuf, ushort *wbuf, ushort wbuflen, ulong abuflen);
-/* ethernet address */
-extern char *bcm_ether_ntoa(struct ether_addr *ea, char *buf);
-/* variable access */
-extern char *getvar(char *vars, char *name);
-extern int getintvar(char *vars, char *name);
-extern uint getgpiopin(char *vars, char *pin_name, uint def_pin);
-#ifdef BCMPERFSTATS
-extern void bcm_perf_enable(void);
-extern void bcmstats(char *fmt);
-extern void bcmlog(char *fmt, uint a1, uint a2);
-extern void bcmdumplog(char *buf, int size);
-extern int bcmdumplogent(char *buf, uint idx);
-#else
-#define bcm_perf_enable()
-#define bcmstats(fmt)
-#define bcmlog(fmt, a1, a2)
-#define bcmdumplog(buf, size) *buf = '\0'
-#define bcmdumplogent(buf, idx) -1
-#endif /* BCMPERFSTATS */
-extern char *bcm_nvram_vars(uint *length);
-extern int bcm_nvram_cache(void *sbh);
-
-/* Support for sharing code across in-driver iovar implementations.
- * The intent is that a driver use this structure to map iovar names
- * to its (private) iovar identifiers, and the lookup function to
- * find the entry. Macros are provided to map ids and get/set actions
- * into a single number space for a switch statement.
- */
-
-/* iovar structure */
-typedef struct bcm_iovar {
- const char *name; /* name for lookup and display */
- uint16 varid; /* id for switch */
- uint16 flags; /* driver-specific flag bits */
- uint16 type; /* base type of argument */
- uint16 minlen; /* min length for buffer vars */
-} bcm_iovar_t;
-
-/* varid definitions are per-driver, may use these get/set bits */
-
-/* IOVar action bits for id mapping */
-#define IOV_GET 0 /* Get an iovar */
-#define IOV_SET 1 /* Set an iovar */
-
-/* Varid to actionid mapping */
-#define IOV_GVAL(id) ((id)*2)
-#define IOV_SVAL(id) (((id)*2)+IOV_SET)
-#define IOV_ISSET(actionid) ((actionid & IOV_SET) == IOV_SET)
-
-/* flags are per-driver based on driver attributes */
-
-/* Base type definitions */
-#define IOVT_VOID 0 /* no value (implictly set only) */
-#define IOVT_BOOL 1 /* any value ok (zero/nonzero) */
-#define IOVT_INT8 2 /* integer values are range-checked */
-#define IOVT_UINT8 3 /* unsigned int 8 bits */
-#define IOVT_INT16 4 /* int 16 bits */
-#define IOVT_UINT16 5 /* unsigned int 16 bits */
-#define IOVT_INT32 6 /* int 32 bits */
-#define IOVT_UINT32 7 /* unsigned int 32 bits */
-#define IOVT_BUFFER 8 /* buffer is size-checked as per minlen */
-
-extern const bcm_iovar_t *bcm_iovar_lookup(const bcm_iovar_t *table, const char *name);
-extern int bcm_iovar_lencheck(const bcm_iovar_t *table, void *arg, int len, bool set);
-
-#endif /* #ifdef BCMDRIVER */
-
-/* ** driver/apps-shared section ** */
-
-#define BCME_STRLEN 64 /* Max string length for BCM errors */
-#define VALID_BCMERROR(e) ((e <= 0) && (e >= BCME_LAST))
-
-
-/*
- * error codes could be added but the defined ones shouldn't be changed/deleted
- * these error codes are exposed to the user code
- * when ever a new error code is added to this list
- * please update errorstring table with the related error string and
- * update osl files with os specific errorcode map
-*/
-
-#define BCME_OK 0 /* Success */
-#define BCME_ERROR -1 /* Error generic */
-#define BCME_BADARG -2 /* Bad Argument */
-#define BCME_BADOPTION -3 /* Bad option */
-#define BCME_NOTUP -4 /* Not up */
-#define BCME_NOTDOWN -5 /* Not down */
-#define BCME_NOTAP -6 /* Not AP */
-#define BCME_NOTSTA -7 /* Not STA */
-#define BCME_BADKEYIDX -8 /* BAD Key Index */
-#define BCME_RADIOOFF -9 /* Radio Off */
-#define BCME_NOTBANDLOCKED -10 /* Not band locked */
-#define BCME_NOCLK -11 /* No Clock */
-#define BCME_BADRATESET -12 /* BAD Rate valueset */
-#define BCME_BADBAND -13 /* BAD Band */
-#define BCME_BUFTOOSHORT -14 /* Buffer too short */
-#define BCME_BUFTOOLONG -15 /* Buffer too long */
-#define BCME_BUSY -16 /* Busy */
-#define BCME_NOTASSOCIATED -17 /* Not Associated */
-#define BCME_BADSSIDLEN -18 /* Bad SSID len */
-#define BCME_OUTOFRANGECHAN -19 /* Out of Range Channel */
-#define BCME_BADCHAN -20 /* Bad Channel */
-#define BCME_BADADDR -21 /* Bad Address */
-#define BCME_NORESOURCE -22 /* Not Enough Resources */
-#define BCME_UNSUPPORTED -23 /* Unsupported */
-#define BCME_BADLEN -24 /* Bad length */
-#define BCME_NOTREADY -25 /* Not Ready */
-#define BCME_EPERM -26 /* Not Permitted */
-#define BCME_NOMEM -27 /* No Memory */
-#define BCME_ASSOCIATED -28 /* Associated */
-#define BCME_RANGE -29 /* Not In Range */
-#define BCME_NOTFOUND -30 /* Not Found */
-#define BCME_WME_NOT_ENABLED -31 /* WME Not Enabled */
-#define BCME_TSPEC_NOTFOUND -32 /* TSPEC Not Found */
-#define BCME_ACM_NOTSUPPORTED -33 /* ACM Not Supported */
-#define BCME_NOT_WME_ASSOCIATION -34 /* Not WME Association */
-#define BCME_SDIO_ERROR -35 /* SDIO Bus Error */
-#define BCME_DONGLE_DOWN -36 /* Dongle Not Accessible */
-#define BCME_LAST BCME_DONGLE_DOWN
-
-/* These are collection of BCME Error strings */
-#define BCMERRSTRINGTABLE { \
- "OK", \
- "Undefined error", \
- "Bad Argument", \
- "Bad Option", \
- "Not up", \
- "Not down", \
- "Not AP", \
- "Not STA", \
- "Bad Key Index", \
- "Radio Off", \
- "Not band locked", \
- "No clock", \
- "Bad Rate valueset", \
- "Bad Band", \
- "Buffer too short", \
- "Buffer too long", \
- "Busy", \
- "Not Associated", \
- "Bad SSID len", \
- "Out of Range Channel", \
- "Bad Channel", \
- "Bad Address", \
- "Not Enough Resources", \
- "Unsupported", \
- "Bad length", \
- "Not Ready", \
- "Not Permitted", \
- "No Memory", \
- "Associated", \
- "Not In Range", \
- "Not Found", \
- "WME Not Enabled", \
- "TSPEC Not Found", \
- "ACM Not Supported", \
- "Not WME Association", \
- "SDIO Bus Error", \
- "Dongle Not Accessible" \
-}
-
-#ifndef ABS
-#define ABS(a) (((a) < 0)?-(a):(a))
-#endif /* ABS */
-
-#ifndef MIN
-#define MIN(a, b) (((a) < (b))?(a):(b))
-#endif /* MIN */
-
-#ifndef MAX
-#define MAX(a, b) (((a) > (b))?(a):(b))
-#endif /* MAX */
-
-#define CEIL(x, y) (((x) + ((y)-1)) / (y))
-#define ROUNDUP(x, y) ((((x)+((y)-1))/(y))*(y))
-#define ISALIGNED(a, x) (((a) & ((x)-1)) == 0)
-#define ISPOWEROF2(x) ((((x)-1)&(x)) == 0)
-#define VALID_MASK(mask) !((mask) & ((mask) + 1))
-#define OFFSETOF(type, member) ((uint)(uintptr)&((type *)0)->member)
-#define ARRAYSIZE(a) (sizeof(a)/sizeof(a[0]))
-
-/* bit map related macros */
-#ifndef setbit
-#ifndef NBBY /* the BSD family defines NBBY */
-#define NBBY 8 /* 8 bits per byte */
-#endif /* #ifndef NBBY */
-#define setbit(a, i) (((uint8 *)a)[(i)/NBBY] |= 1<<((i)%NBBY))
-#define clrbit(a, i) (((uint8 *)a)[(i)/NBBY] &= ~(1<<((i)%NBBY)))
-#define isset(a, i) (((uint8 *)a)[(i)/NBBY] & (1<<((i)%NBBY)))
-#define isclr(a, i) ((((uint8 *)a)[(i)/NBBY] & (1<<((i)%NBBY))) == 0)
-#endif /* setbit */
-
-#define NBITS(type) (sizeof(type) * 8)
-#define NBITVAL(nbits) (1 << (nbits))
-#define MAXBITVAL(nbits) ((1 << (nbits)) - 1)
-#define NBITMASK(nbits) MAXBITVAL(nbits)
-#define MAXNBVAL(nbyte) MAXBITVAL((nbyte) * 8)
-
-/* basic mux operation - can be optimized on several architectures */
-#define MUX(pred, true, false) ((pred) ? (true) : (false))
-
-/* modulo inc/dec - assumes x E [0, bound - 1] */
-#define MODDEC(x, bound) MUX((x) == 0, (bound) - 1, (x) - 1)
-#define MODINC(x, bound) MUX((x) == (bound) - 1, 0, (x) + 1)
-
-/* modulo inc/dec, bound = 2^k */
-#define MODDEC_POW2(x, bound) (((x) - 1) & ((bound) - 1))
-#define MODINC_POW2(x, bound) (((x) + 1) & ((bound) - 1))
-
-/* modulo add/sub - assumes x, y E [0, bound - 1] */
-#define MODADD(x, y, bound) \
- MUX((x) + (y) >= (bound), (x) + (y) - (bound), (x) + (y))
-#define MODSUB(x, y, bound) \
- MUX(((int)(x)) - ((int)(y)) < 0, (x) - (y) + (bound), (x) - (y))
-
-/* module add/sub, bound = 2^k */
-#define MODADD_POW2(x, y, bound) (((x) + (y)) & ((bound) - 1))
-#define MODSUB_POW2(x, y, bound) (((x) - (y)) & ((bound) - 1))
-
-/* crc defines */
-#define CRC8_INIT_VALUE 0xff /* Initial CRC8 checksum value */
-#define CRC8_GOOD_VALUE 0x9f /* Good final CRC8 checksum value */
-#define CRC16_INIT_VALUE 0xffff /* Initial CRC16 checksum value */
-#define CRC16_GOOD_VALUE 0xf0b8 /* Good final CRC16 checksum value */
-#define CRC32_INIT_VALUE 0xffffffff /* Initial CRC32 checksum value */
-#define CRC32_GOOD_VALUE 0xdebb20e3 /* Good final CRC32 checksum value */
-
-/* bcm_format_flags() bit description structure */
-typedef struct bcm_bit_desc {
- uint32 bit;
- char* name;
-} bcm_bit_desc_t;
-
-/* tag_ID/length/value_buffer tuple */
-typedef struct bcm_tlv {
- uint8 id;
- uint8 len;
- uint8 data[1];
-} bcm_tlv_t;
-
-/* Check that bcm_tlv_t fits into the given buflen */
-#define bcm_valid_tlv(elt, buflen) ((buflen) >= 2 && (int)(buflen) >= (int)(2 + (elt)->len))
-
-/* buffer length for ethernet address from bcm_ether_ntoa() */
-#define ETHER_ADDR_STR_LEN 18 /* 18-bytes of Ethernet address buffer length */
-
-/* unaligned load and store macros */
-#ifdef IL_BIGENDIAN
-static INLINE uint32
-load32_ua(uint8 *a)
-{
- return ((a[0] << 24) | (a[1] << 16) | (a[2] << 8) | a[3]);
-}
-
-static INLINE void
-store32_ua(uint8 *a, uint32 v)
-{
- a[0] = (v >> 24) & 0xff;
- a[1] = (v >> 16) & 0xff;
- a[2] = (v >> 8) & 0xff;
- a[3] = v & 0xff;
-}
-
-static INLINE uint16
-load16_ua(uint8 *a)
-{
- return ((a[0] << 8) | a[1]);
-}
-
-static INLINE void
-store16_ua(uint8 *a, uint16 v)
-{
- a[0] = (v >> 8) & 0xff;
- a[1] = v & 0xff;
-}
-
-#else
-
-static INLINE uint32
-load32_ua(uint8 *a)
-{
- return ((a[3] << 24) | (a[2] << 16) | (a[1] << 8) | a[0]);
-}
-
-static INLINE void
-store32_ua(uint8 *a, uint32 v)
-{
- a[3] = (v >> 24) & 0xff;
- a[2] = (v >> 16) & 0xff;
- a[1] = (v >> 8) & 0xff;
- a[0] = v & 0xff;
-}
-
-static INLINE uint16
-load16_ua(uint8 *a)
-{
- return ((a[1] << 8) | a[0]);
-}
-
-static INLINE void
-store16_ua(uint8 *a, uint16 v)
-{
- a[1] = (v >> 8) & 0xff;
- a[0] = v & 0xff;
-}
-
-#endif /* IL_BIGENDIAN */
-
-/* externs */
-/* crc */
-extern uint8 hndcrc8(uint8 *p, uint nbytes, uint8 crc);
-extern uint16 hndcrc16(uint8 *p, uint nbytes, uint16 crc);
-extern uint32 hndcrc32(uint8 *p, uint nbytes, uint32 crc);
-/* format/print */
-extern void printfbig(char *buf);
-
-/* IE parsing */
-extern bcm_tlv_t *bcm_next_tlv(bcm_tlv_t *elt, int *buflen);
-extern bcm_tlv_t *bcm_parse_tlvs(void *buf, int buflen, uint key);
-extern bcm_tlv_t *bcm_parse_ordered_tlvs(void *buf, int buflen, uint key);
-
-/* bcmerror */
-extern const char *bcmerrorstr(int bcmerror);
-
-/* multi-bool data type: set of bools, mbool is true if any is set */
-typedef uint32 mbool;
-#define mboolset(mb, bit) (mb |= bit) /* set one bool */
-#define mboolclr(mb, bit) (mb &= ~bit) /* clear one bool */
-#define mboolisset(mb, bit) ((mb & bit) != 0) /* TRUE if one bool is set */
-#define mboolmaskset(mb, mask, val) ((mb) = (((mb) & ~(mask)) | (val)))
-
-/* power conversion */
-extern uint16 bcm_qdbm_to_mw(uint8 qdbm);
-extern uint8 bcm_mw_to_qdbm(uint16 mw);
-
-/* generic datastruct to help dump routines */
-struct fielddesc {
- char *nameandfmt;
- uint32 offset;
- uint32 len;
-};
-
-/* Buffer structure for collecting string-formatted data
-* using bcm_bprintf() API.
-* Use bcm_binit() to initialize before use
-*/
-struct bcmstrbuf
-{
- char *buf; /* pointer to current position in origbuf */
- uint size; /* current (residual) size in bytes */
- char *origbuf; /* unmodified pointer to orignal buffer */
- uint origsize; /* unmodified orignal buffer size in bytes */
-};
-
-extern void bcm_binit(struct bcmstrbuf *b, char *buf, uint size);
-extern int bcm_bprintf(struct bcmstrbuf *b, const char *fmt, ...);
-
-typedef uint32 (*readreg_rtn)(void *arg0, void *arg1, uint32 offset);
-extern uint bcmdumpfields(readreg_rtn func_ptr, void *arg0, void *arg1, struct fielddesc *str,
- char *buf, uint32 bufsize);
-
-extern uint bcm_mkiovar(char *name, char *data, uint datalen, char *buf, uint len);
-extern uint bcm_bitcount(uint8 *bitmap, uint bytelength);
-
-#endif /* _bcmutils_h_ */
--- /dev/null
+/*
+ * HND SiliconBackplane chipcommon support.
+ *
+ * Copyright 2007, Broadcom Corporation
+ * All Rights Reserved.
+ *
+ * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
+ * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
+ * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
+ *
+ * $Id$
+ */
+
+#ifndef _hndchipc_h_
+#define _hndchipc_h_
+
+typedef void (*sb_serial_init_fn)(void *regs, uint irq, uint baud_base, uint reg_shift);
+
+extern void sb_serial_init(sb_t *sbh, sb_serial_init_fn add);
+
+extern void *sb_jtagm_init(sb_t *sbh, uint clkd, bool exttap);
+extern void sb_jtagm_disable(osl_t *osh, void *h);
+extern uint32 jtag_rwreg(osl_t *osh, void *h, uint32 ir, uint32 dr);
+
+typedef void (*cc_isr_fn)(void* cbdata, uint32 ccintst);
+
+extern bool sb_cc_register_isr(sb_t *sbh, cc_isr_fn isr, uint32 ccintmask, void *cbdata);
+extern void sb_cc_isr(sb_t *sbh, chipcregs_t *regs);
+
+#endif /* _hndchipc_h_ */
/*
* HND SiliconBackplane MIPS/ARM cores software interface.
*
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
* All Rights Reserved.
*
* THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
* SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
*
- * $Id: hndcpu.h,v 1.1.1.1 2006/02/27 03:43:16 honor Exp $
+ * $Id$
*/
#ifndef _hndcpu_h_
#if defined(mips)
#include <hndmips.h>
-#elif defined(__ARM_ARCH_4T__)
+#elif defined(__arm__) || defined(__thumb__) || defined(__thumb2__)
#include <hndarm.h>
#endif
extern uint sb_irq(sb_t *sbh);
extern uint32 sb_cpu_clock(sb_t *sbh);
-extern void sb_cpu_wait(void);
+extern void hnd_cpu_wait(sb_t *sbh);
+extern void hnd_cpu_jumpto(void *addr);
+extern void hnd_cpu_reset(sb_t *sbh);
#endif /* _hndcpu_h_ */
/*
* HND SiliconBackplane MIPS core software interface.
*
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
* All Rights Reserved.
*
* THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
* SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
*
- * $Id: hndmips.h,v 1.1.1.8 2006/02/27 03:43:16 honor Exp $
+ * $Id$
*/
#ifndef _hndmips_h_
#if defined(BCMPERFSTATS)
/* enable counting - exclusive version. Only one set of counters allowed at a time */
+extern void hndmips_perf_cyclecount_enable(void);
extern void hndmips_perf_instrcount_enable(void);
extern void hndmips_perf_icachecount_enable(void);
extern void hndmips_perf_dcachecount_enable(void);
extern uint32 hndmips_perf_read_instrcount(void);
extern uint32 hndmips_perf_read_cache_miss(void);
extern uint32 hndmips_perf_read_cache_hit(void);
-#endif /* defined(BCMINTERNAL) || defined (BCMPERFSTATS) */
+#endif
#endif /* _hndmips_h_ */
/*
* HND SiliconBackplane PCI core software interface.
*
- * $Id: hndpci.h,v 1.1.1.1 2006/02/27 03:43:16 honor Exp $
- * Copyright 2006, Broadcom Corporation
+ * $Id$
+ * Copyright 2007, Broadcom Corporation
* All Rights Reserved.
*
* THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
extern void sbpci_ban(uint16 core);
extern int sbpci_init(sb_t *sbh);
extern int sbpci_init_pci(sb_t *sbh);
-extern void sbpci_check(sb_t *sbh);
+extern void sbpci_init_cores(sb_t *sbh);
+extern void sbpci_arb_park(sb_t *sbh, uint parkid);
+
+#define PCI_PARK_NVRAM 0xff
#endif /* _hndpci_h_ */
--- /dev/null
+/*
+ * HND SiliconBackplane PMU support.
+ *
+ * Copyright 2007, Broadcom Corporation
+ * All Rights Reserved.
+ *
+ * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
+ * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
+ * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
+ *
+ * $Id$
+ */
+
+#ifndef _hndpmu_h_
+#define _hndpmu_h_
+
+#define SET_LDO_VOLTAGE_LDO1 1
+#define SET_LDO_VOLTAGE_LDO2 2
+#define SET_LDO_VOLTAGE_LDO3 3
+#define SET_LDO_VOLTAGE_PAREF 4
+
+extern void sb_pmu_init(sb_t *sbh, osl_t *osh);
+extern void sb_pmu_pll_init(sb_t *sbh, osl_t *osh, uint32 xtalfreq);
+extern void sb_pmu_res_init(sb_t *sbh, osl_t *osh);
+extern uint32 sb_pmu_force_ilp(sb_t *sbh, osl_t *osh, bool force);
+extern uint32 sb_pmu_cpu_clock(sb_t *sbh, osl_t *osh);
+extern uint32 sb_pmu_alp_clock(sb_t *sbh, osl_t *osh);
+
+extern void sb_pmu_set_switcher_voltage(sb_t *sbh, osl_t *osh, uint8 bb_voltage, uint8 rf_voltage);
+extern void sb_pmu_set_ldo_voltage(sb_t *sbh, osl_t *osh, uint8 ldo, uint8 voltage);
+extern void sb_pmu_paref_ldo_enable(sb_t *sbh, osl_t *osh, bool enable);
+extern uint16 sb_pmu_fast_pwrup_delay(sb_t *sbh, osl_t *osh);
+extern void sb_pmu_otp_power(sb_t *sbh, osl_t *osh, bool on);
+extern void sb_pmu_rcal(sb_t *sbh, osl_t *osh);
+
+#endif /* _hndpmu_h_ */
--- /dev/null
+/*
+ * Linux Broadcom BCM47xx GPIO char driver
+ *
+ * Copyright 2007, Broadcom Corporation
+ * All Rights Reserved.
+ *
+ * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
+ * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
+ * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
+ *
+ * $Id$
+ */
+
+#ifndef _linux_gpio_h_
+#define _linux_gpio_h_
+
+struct gpio_ioctl {
+ uint32 mask;
+ uint32 val;
+};
+
+#define GPIO_IOC_MAGIC 'G'
+
+/* reserve/release a gpio to the caller */
+#define GPIO_IOC_RESERVE _IOWR(GPIO_IOC_MAGIC, 1, struct gpio_ioctl)
+#define GPIO_IOC_RELEASE _IOWR(GPIO_IOC_MAGIC, 2, struct gpio_ioctl)
+/* ioctls to read/write the gpio registers */
+#define GPIO_IOC_OUT _IOWR(GPIO_IOC_MAGIC, 3, struct gpio_ioctl)
+#define GPIO_IOC_IN _IOWR(GPIO_IOC_MAGIC, 4, struct gpio_ioctl)
+#define GPIO_IOC_OUTEN _IOWR(GPIO_IOC_MAGIC, 5, struct gpio_ioctl)
+
+#endif /* _linux_gpio_h_ */
* Linux-specific abstractions to gain some independence from linux kernel versions.
* Pave over some 2.2 versus 2.4 versus 2.6 kernel differences.
*
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
* All Rights Reserved.
*
* THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
* SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
*
- * $Id: linuxver.h,v 1.1.1.10 2006/02/27 03:43:16 honor Exp $
+ * $Id$
*/
#ifndef _linuxver_h_
#define _linuxver_h_
-#include <linux/config.h>
#include <linux/version.h>
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0))
+#include <linux/config.h>
+#else
+#include <linux/autoconf.h>
+#endif
+#include <linux/module.h>
#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 3, 0))
/* __NO_VERSION__ must be defined for all linkables except one in 2.2 */
#endif
#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2, 3, 0) */
-#if defined(MODULE) && defined(MODVERSIONS)
-#include <linux/modversions.h>
-#endif
-
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 0)
-#include <linux/moduleparam.h>
-#endif
-
-
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 0)
#define module_param(_name_, _type_, _perm_) MODULE_PARM(_name_, "i")
#define module_param_string(_name_, _string_, _size_, _perm_) \
#endif
#endif /* LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 41) */
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 20)
+#define MY_INIT_WORK(_work, _func, _data) INIT_WORK(_work, _func)
+#else
+#define MY_INIT_WORK(_work, _func, _data) INIT_WORK(_work, _func, _data)
+typedef void (*work_func_t)(void *work);
+#endif /* < 2.6.20 */
+
#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0))
/* Some distributions have their own 2.6.x compatibility layers */
#ifndef IRQ_NONE
}
#endif
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 15))
+
+typedef struct pcmcia_device dev_link_t;
+
+#endif
+
#endif /* CONFIG_PCMCIA */
#ifndef __exit
#define af_packet_priv data
#endif
+/* suspend args */
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11)
+#define DRV_SUSPEND_STATE_TYPE pm_message_t
+#else
+#define DRV_SUSPEND_STATE_TYPE uint32
+#endif
+
#endif /* _linuxver_h_ */
/*
* HND Run Time Environment for standalone MIPS programs.
*
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
* All Rights Reserved.
*
* THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
* SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
*
- * $Id: mipsinc.h,v 1.1.1.5 2006/02/27 03:43:16 honor Exp $
+ * $Id$
*/
#ifndef _MISPINC_H
#define C0_CTEXT $4
#define C0_PGMASK $5
#define C0_WIRED $6
+#define C0_INFO $7
#define C0_BADVADDR $8
#define C0_COUNT $9
#define C0_TLBHI $10
#define C0_CTEXT 4 /* CP0: Context */
#define C0_PGMASK 5 /* CP0: TLB PageMask */
#define C0_WIRED 6 /* CP0: TLB Wired */
+#define C0_INFO 7 /* CP0: Info */
#define C0_BADVADDR 8 /* CP0: Bad Virtual Address */
#define C0_COUNT 9 /* CP0: Count */
#define C0_TLBHI 10 /* CP0: TLB EntryHi */
#include <linux/delay.h>
#include <typedefs.h>
#include <linuxver.h>
-#include <bcmutils.h>
#include <pcicfg.h>
#define ASSERT(n)
+#ifndef ABS
+#define ABS(a) (((a) < 0)?-(a):(a))
+#endif /* ABS */
+
+#ifndef MIN
+#define MIN(a, b) (((a) < (b))?(a):(b))
+#endif /* MIN */
+
+#ifndef MAX
+#define MAX(a, b) (((a) > (b))?(a):(b))
+#endif /* MAX */
+
+#define CEIL(x, y) (((x) + ((y)-1)) / (y))
+#define ROUNDUP(x, y) ((((x)+((y)-1))/(y))*(y))
+#define ISALIGNED(a, x) (((a) & ((x)-1)) == 0)
+#define ISPOWEROF2(x) ((((x)-1)&(x)) == 0)
+#define VALID_MASK(mask) !((mask) & ((mask) + 1))
+#ifndef OFFSETOF
+#define OFFSETOF(type, member) ((uint)(uintptr)&((type *)0)->member)
+#endif /* OFFSETOF */
+#ifndef ARRAYSIZE
+#define ARRAYSIZE(a) (sizeof(a)/sizeof(a[0]))
+#endif
+
+/*
+ * Spin at most 'us' microseconds while 'exp' is true.
+ * Caller should explicitly test 'exp' when this completes
+ * and take appropriate error action if 'exp' is still true.
+ */
+#define SPINWAIT(exp, us) { \
+ uint countdown = (us) + 9; \
+ while ((exp) && (countdown >= 10)) {\
+ OSL_DELAY(10); \
+ countdown -= 10; \
+ } \
+}
+
+
+typedef void (*pktfree_cb_fn_t)(void *ctx, void *pkt, unsigned int status);
/* Pkttag flag should be part of public information */
typedef struct {
bool pkttag;
- uint pktalloced; /* Number of allocated packet buffers */
- void *tx_fn;
- void *tx_ctx;
+ uint pktalloced; /* Number of allocated packet buffers */
+ bool mmbus; /* Bus supports memory-mapped register accesses */
+ pktfree_cb_fn_t tx_fn; /* Callback function for PKTFREE */
+ void *tx_ctx; /* Context to the callback function */
} osl_pubinfo_t;
struct osl_info {
- osl_pubinfo_t pub;
- uint magic;
- void *pdev;
- uint malloced;
- uint failed;
- void *dbgmem_list;
+ osl_pubinfo_t pub;
+ uint magic;
+ void *pdev;
+ uint malloced;
+ uint failed;
+ uint bustype;
+ void *dbgmem_list;
};
typedef struct osl_info osl_t;
#define MFREE(osh, addr, size) kfree((addr))
#define MALLOCED(osh) (0)
-#define osl_delay OSL_DELAY
-static inline void OSL_DELAY(uint usec)
+#define OSL_DELAY _osl_delay
+static inline void _osl_delay(uint usec)
{
uint d;
#define OSL_PCMCIA_WRITE_ATTR(osh, offset, buf, size)
#define OSL_PCI_READ_CONFIG(osh, offset, size) \
- osl_pci_read_config((osh), (offset), (size))
+ _osl_pci_read_config((osh), (offset), (size))
static inline uint32
-osl_pci_read_config(osl_t *osh, uint offset, uint size)
+_osl_pci_read_config(osl_t *osh, uint offset, uint size)
{
uint val;
uint retry = PCI_CFG_RETRY;
}
#define OSL_PCI_WRITE_CONFIG(osh, offset, size, val) \
- osl_pci_write_config((osh), (offset), (size), (val))
+ _osl_pci_write_config((osh), (offset), (size), (val))
static inline void
-osl_pci_write_config(osl_t *osh, uint offset, uint size, uint val)
+_osl_pci_write_config(osl_t *osh, uint offset, uint size, uint val)
{
uint retry = PCI_CFG_RETRY;
pci_write_config_dword(osh->pdev, offset, val);
if (offset != PCI_BAR0_WIN)
break;
- if (osl_pci_read_config(osh, offset, size) == val)
+ if (_osl_pci_read_config(osh, offset, size) == val)
break;
} while (retry--);
}
/* return bus # for the pci device pointed by osh->pdev */
-#define OSL_PCI_BUS(osh) osl_pci_bus(osh)
+#define OSL_PCI_BUS(osh) _osl_pci_bus(osh)
static inline uint
-osl_pci_bus(osl_t *osh)
+_osl_pci_bus(osl_t *osh)
{
return ((struct pci_dev *)osh->pdev)->bus->number;
}
/* return slot # for the pci device pointed by osh->pdev */
-#define OSL_PCI_SLOT(osh) osl_pci_slot(osh)
+#define OSL_PCI_SLOT(osh) _osl_pci_slot(osh)
static inline uint
-osl_pci_slot(osl_t *osh)
+_osl_pci_slot(osl_t *osh)
{
return PCI_SLOT(((struct pci_dev *)osh->pdev)->devfn);
}
/*
* pcicfg.h: PCI configuration constants and structures.
*
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
* All Rights Reserved.
*
* THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
* SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
*
- * $Id: pcicfg.h,v 1.1.1.11 2006/04/08 06:13:40 honor Exp $
+ * $Id$
*/
#ifndef _h_pcicfg_
#undef PCI_CLASS_DOCK
#endif /* __NetBSD__ */
+#ifdef EFI
+#undef PCI_CLASS_BRIDGE
+#undef PCI_CLASS_OLD
+#undef PCI_CLASS_DISPLAY
+#undef PCI_CLASS_SERIAL
+#undef PCI_CLASS_SATELLITE
+#endif /* EFI */
+
/* Classes and subclasses */
typedef enum {
unsigned char data;
} pciconfig_cap_pwrmgmt;
+#define PME_CAP_PM_STATES (0x1f << 27) /* Bits 31:27 states that can generate PME */
+#define PME_CSR_OFFSET 0x4 /* 4-bytes offset */
+#define PME_CSR_PME_EN (1 << 8) /* Bit 8 Enable generating of PME */
+#define PME_CSR_PME_STAT (1 << 15) /* Bit 15 PME got asserted */
+
/* Data structure to define the PCIE capability */
typedef struct _pciconfig_cap_pcie {
unsigned char capID;
* 8KB window, so their address is the "regular"
* address plus 4K
*/
-#define PCI_BAR0_WINSZ 8192 /* bar0 window size */
+#define PCI_BAR0_WINSZ (16 * 1024) /* bar0 window size Match with corerev 13 */
/* On pci corerev >= 13 and all pcie, the bar0 is now 16KB and it maps: */
#define PCI_16KB0_PCIREGS_OFFSET (8 * 1024) /* bar0 + 8K accesses pci/pcie core registers */
* jtag, 0/1/2 uarts, clock frequency control, a watchdog interrupt timer,
* gpio interface, extbus, and support for serial and parallel flashes.
*
- * $Id: sbchipc.h,v 1.1.1.14 2006/04/15 01:29:08 michael Exp $
- * Copyright 2006, Broadcom Corporation
+ * $Id$
+ * Copyright 2007, Broadcom Corporation
* All Rights Reserved.
*
* THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
#ifndef _SBCHIPC_H
#define _SBCHIPC_H
-
#ifndef _LANGUAGE_ASSEMBLY
/* cpp contortions to concatenate w/arg prescan */
#define PAD _XSTR(__LINE__)
#endif /* PAD */
+
typedef volatile struct {
uint32 chipid; /* 0x0 */
uint32 capabilities;
/* Silicon backplane configuration broadcast control */
uint32 broadcastaddress; /* 0x50 */
uint32 broadcastdata;
- uint32 PAD[2];
/* gpio - cleared only by power-on-reset */
+ uint32 gpiopullup; /* 0x58, corerev >= 20 */
+ uint32 gpiopulldown; /* 0x5c, corerev >= 20 */
uint32 gpioin; /* 0x60 */
uint32 gpioout;
uint32 gpioouten;
uint32 gpiocontrol;
uint32 gpiointpolarity;
uint32 gpiointmask;
- uint32 PAD[2];
+
+ /* GPIO events corerev >= 11 */
+ uint32 gpioevent;
+ uint32 gpioeventintmask;
/* Watchdog timer */
uint32 watchdog; /* 0x80 */
- uint32 PAD[1];
+
+ /* GPIO events corerev >= 11 */
+ uint32 gpioeventintpolarity;
/* GPIO based LED powersave registers corerev >= 16 */
uint32 gpiotimerval; /* 0x88 */
uint32 prog_waitcount;
uint32 flash_config;
uint32 flash_waitcount;
- uint32 PAD[44];
-
- /* Clock control and hardware workarounds */
- uint32 clk_ctl_st;
+ uint32 PAD[4];
+
+ /* Enhanced Coexistance Interface (ECI) registers (corerev >= 21) */
+ uint32 eci_output; /* 0x140 */
+ uint32 eci_control;
+ uint32 eci_inputlo;
+ uint32 eci_inputmi;
+ uint32 eci_inputhi;
+ uint32 eci_inputintpolaritylo;
+ uint32 eci_inputintpolaritymi;
+ uint32 eci_inputintpolarityhi;
+ uint32 eci_intmasklo;
+ uint32 eci_intmaskmi;
+ uint32 eci_intmaskhi;
+ uint32 eci_eventlo;
+ uint32 eci_eventmi;
+ uint32 eci_eventhi;
+ uint32 eci_eventmasklo;
+ uint32 eci_eventmaskmi;
+ uint32 eci_eventmaskhi;
+ uint32 PAD[23];
+
+
+ /* Clock control and hardware workarounds (corerev >= 20) */
+ uint32 clk_ctl_st; /* 0x1e0 */
uint32 hw_war;
uint32 PAD[70];
uint8 uart1lsr;
uint8 uart1msr;
uint8 uart1scratch;
+ uint32 PAD[126];
+
+ /* PMU registers (corerev >= 20) */
+ uint32 pmucontrol; /* 0x600 */
+ uint32 pmucapabilities;
+ uint32 pmustatus;
+ uint32 res_state;
+ uint32 res_pending;
+ uint32 pmutimer;
+ uint32 min_res_mask;
+ uint32 max_res_mask;
+ uint32 res_table_sel;
+ uint32 res_dep_mask;
+ uint32 res_updn_timer;
+ uint32 res_timer;
+ uint32 clkstretch;
+ uint32 pmuwatchdog;
+ uint32 PAD[2];
+ uint32 res_req_timer_sel;
+ uint32 res_req_timer;
+ uint32 res_req_mask;
+ uint32 PAD;
+ uint32 chipcontrol_addr;
+ uint32 chipcontrol_data;
+ uint32 regcontrol_addr;
+ uint32 regcontrol_data;
+ uint32 pllcontrol_addr;
+ uint32 pllcontrol_data;
+ uint32 PAD[102];
+ uint16 otp[512];
} chipcregs_t;
#endif /* _LANGUAGE_ASSEMBLY */
+/* corecontrol */
+#define CC_UE (1 << 0) /* uart enable */
+
#define CC_CHIPID 0
#define CC_CAPABILITIES 4
+#define CC_OTPST 0x10
+#define CC_CHIPST 0x2c
#define CC_JTAGCMD 0x30
#define CC_JTAGIR 0x34
#define CC_JTAGDR 0x38
#define CC_CLKC_M3 0xa0
#define CC_CLKDIV 0xa4
#define CC_SYS_CLK_CTL 0xc0
-#define CC_OTP 0x800
+#define CC_CLK_CTL_ST SB_CLK_CTL_ST
+#define PMU_CTL 0x600
+#define PMU_CAP 0x604
+#define PMU_ST 0x608
+#define PMU_TIMER 0x614
+#define PMU_MIN_RES_MASK 0x618
+#define PMU_MAX_RES_MASK 0x61c
+#define PMU_REG_CONTROL_ADDR 0x658
+#define PMU_REG_CONTROL_DATA 0x65C
+#define PMU_PLL_CONTROL_ADDR 0x660
+#define PMU_PLL_CONTROL_DATA 0x664
+#define CC_OTP 0x800 /* OTP address space */
/* chipid */
#define CID_ID_MASK 0x0000ffff /* Chip Id mask */
#define CID_CC_SHIFT 24
/* capabilities */
-#define CAP_UARTS_MASK 0x00000003 /* Number of uarts */
-#define CAP_MIPSEB 0x00000004 /* MIPS is in big-endian mode */
-#define CAP_UCLKSEL 0x00000018 /* UARTs clock select */
-#define CAP_UINTCLK 0x00000008 /* UARTs are driven by internal divided clock */
-#define CAP_UARTGPIO 0x00000020 /* UARTs own Gpio's 15:12 */
-#define CAP_EXTBUS_MASK 0x000000c0 /* External bus mask */
-#define CAP_EXTBUS_NONE 0x00000000 /* No ExtBus present */
-#define CAP_EXTBUS_FULL 0x00000040 /* ExtBus: PCMCIA, IDE & Prog */
-#define CAP_EXTBUS_PROG 0x00000080 /* ExtBus: ProgIf only */
-#define CAP_FLASH_MASK 0x00000700 /* Type of flash */
-#define CAP_PLL_MASK 0x00038000 /* Type of PLL */
-#define CAP_PWR_CTL 0x00040000 /* Power control */
-#define CAP_OTPSIZE 0x00380000 /* OTP Size (0 = none) */
-#define CAP_OTPSIZE_SHIFT 19 /* OTP Size shift */
-#define CAP_OTPSIZE_BASE 5 /* OTP Size base */
-#define CAP_JTAGP 0x00400000 /* JTAG Master Present */
-#define CAP_ROM 0x00800000 /* Internal boot rom active */
-#define CAP_BKPLN64 0x08000000 /* 64-bit backplane */
+#define CC_CAP_UARTS_MASK 0x00000003 /* Number of uarts */
+#define CC_CAP_MIPSEB 0x00000004 /* MIPS is in big-endian mode */
+#define CC_CAP_UCLKSEL 0x00000018 /* UARTs clock select */
+#define CC_CAP_UINTCLK 0x00000008 /* UARTs are driven by internal divided clock */
+#define CC_CAP_UARTGPIO 0x00000020 /* UARTs own Gpio's 15:12 */
+#define CC_CAP_EXTBUS_MASK 0x000000c0 /* External bus mask */
+#define CC_CAP_EXTBUS_NONE 0x00000000 /* No ExtBus present */
+#define CC_CAP_EXTBUS_FULL 0x00000040 /* ExtBus: PCMCIA, IDE & Prog */
+#define CC_CAP_EXTBUS_PROG 0x00000080 /* ExtBus: ProgIf only */
+#define CC_CAP_FLASH_MASK 0x00000700 /* Type of flash */
+#define CC_CAP_PLL_MASK 0x00038000 /* Type of PLL */
+#define CC_CAP_PWR_CTL 0x00040000 /* Power control */
+#define CC_CAP_OTPSIZE 0x00380000 /* OTP Size (0 = none) */
+#define CC_CAP_OTPSIZE_SHIFT 19 /* OTP Size shift */
+#define CC_CAP_OTPSIZE_BASE 5 /* OTP Size base */
+#define CC_CAP_JTAGP 0x00400000 /* JTAG Master Present */
+#define CC_CAP_ROM 0x00800000 /* Internal boot rom active */
+#define CC_CAP_BKPLN64 0x08000000 /* 64-bit backplane */
+#define CC_CAP_PMU 0x10000000 /* PMU Present, rev >= 20 */
+#define CC_CAP_ECI 0x20000000 /* ECI Present, rev >= 21 */
/* PLL type */
#define PLL_NONE 0x00000000
#define PLL_TYPE6 0x00028000 /* 100/200 or 120/240 only */
#define PLL_TYPE7 0x00038000 /* 25Mhz, 4 dividers */
+/* ALP clock on pre-PMU chips */
+#define ALP_CLOCK 20000000
+
+/* HT clock */
+#define HT_CLOCK 80000000
+
+/* watchdog clock */
+#define WATCHDOG_CLOCK_5354 32000 /* Hz */
+
/* corecontrol */
#define CC_UARTCLKO 0x00000001 /* Drive UART with internal clock */
#define CC_SE 0x00000002 /* sync clk out enable (corerev >= 3) */
+#define CC_UARTCLKEN 0x00000008 /* enable UART Clock (corerev > = 21 */
/* chipcontrol */
#define CHIPCTRL_4321A0_DEFAULT 0x3a4
#define CHIPCTRL_4321A1_DEFAULT 0x0a4
-/* Fields in the otpstatus register */
-#define OTPS_PROGFAIL 0x80000000
-#define OTPS_PROTECT 0x00000007
-#define OTPS_HW_PROTECT 0x00000001
-#define OTPS_SW_PROTECT 0x00000002
-#define OTPS_CID_PROTECT 0x00000004
-
-/* Fields in the otpcontrol register */
-#define OTPC_RECWAIT 0xff000000
-#define OTPC_PROGWAIT 0x00ffff00
-#define OTPC_PRW_SHIFT 8
-#define OTPC_MAXFAIL 0x00000038
-#define OTPC_VSEL 0x00000006
-#define OTPC_SELVL 0x00000001
-
-/* Fields in otpprog */
-#define OTPP_COL_MASK 0x000000ff
-#define OTPP_ROW_MASK 0x0000ff00
-#define OTPP_ROW_SHIFT 8
-#define OTPP_READERR 0x10000000
-#define OTPP_VALUE 0x20000000
-#define OTPP_VALUE_SHIFT 29
-#define OTPP_READ 0x40000000
-#define OTPP_START 0x80000000
-#define OTPP_BUSY 0x80000000
+/* Fields in the otpstatus register in rev >= 21 */
+#define OTPS_OL_MASK 0x000000ff
+#define OTPS_OL_MFG 0x00000001 /* manuf row is locked */
+#define OTPS_OL_OR1 0x00000002 /* otp redundancy row 1 is locked */
+#define OTPS_OL_OR2 0x00000004 /* otp redundancy row 2 is locked */
+#define OTPS_OL_GU 0x00000008 /* general use region is locked */
+#define OTPS_GUP_MASK 0x00000f00
+#define OTPS_GUP_SHIFT 8
+#define OTPS_GUP_HW 0x00000100 /* h/w subregion is programmed */
+#define OTPS_GUP_SW 0x00000200 /* s/w subregion is programmed */
+#define OTPS_GUP_CI 0x00000400 /* chipid/pkgopt subregion is programmed */
+#define OTPS_GUP_FUSE 0x00000800 /* fuse subregion is programmed */
+#define OTPS_READY 0x00001000
+#define OTPS_RV(x) (1 << (16 + (x)))
+
+/* Fields in the otpcontrol register in rev >= 21 */
+#define OTPC_PROGSEL 0x00000001
+#define OTPC_PCOUNT_MASK 0x0000000e
+#define OTPC_PCOUNT_SHIFT 1
+#define OTPC_VSEL_MASK 0x000000f0
+#define OTPC_VSEL_SHIFT 4
+#define OTPC_TMM_MASK 0x00000700
+#define OTPC_TMM_SHIFT 8
+#define OTPC_ODM 0x00000800
+#define OTPC_PROGEN 0x80000000
+
+/* Fields in otpprog in rev >= 21 */
+#define OTPP_COL_MASK 0x000000ff
+#define OTPP_COL_SHIFT 0
+#define OTPP_ROW_MASK 0x0000ff00
+#define OTPP_ROW_SHIFT 8
+#define OTPP_OC_MASK 0x0f000000
+#define OTPP_OC_SHIFT 24
+#define OTPP_READERR 0x10000000
+#define OTPP_VALUE_MASK 0x20000000
+#define OTPP_VALUE_SHIFT 29
+#define OTPP_START_BUSY 0x80000000
+
+/* Opcodes for OTPP_OC field */
+#define OTPPOC_READ 0
+#define OTPPOC_BIT_PROG 1
+#define OTPPOC_VERIFY 3
+#define OTPPOC_INIT 4
+#define OTPPOC_SET 5
+#define OTPPOC_RESET 6
+#define OTPPOC_OCST 7
+#define OTPPOC_ROW_LOCK 8
+#define OTPPOC_PRESCN_TEST 9
/* jtagcmd */
#define JCMD_START 0x80000000
/* intstatus/intmask */
#define CI_GPIO 0x00000001 /* gpio intr */
-#define CI_EI 0x00000002 /* ro: ext intr pin (corerev >= 3) */
+#define CI_EI 0x00000002 /* extif intr (corerev >= 3) */
+#define CI_TEMP 0x00000004 /* temp. ctrl intr (corerev >= 15) */
+#define CI_SIRQ 0x00000008 /* serial IRQ intr (corerev >= 15) */
+#define CI_ECI 0x00000010 /* eci intr (corerev >= 21) */
+#define CI_PMU 0x00000020 /* pmu intr (corerev >= 21) */
+#define CI_UART 0x00000040 /* uart intr (corerev >= 21) */
#define CI_WDRESET 0x80000000 /* watchdog reset occurred */
/* slow_clk_ctl */
#define SYCC_CD_MASK 0xffff0000 /* ClkDiv (ILP = 1/(4 * (divisor + 1)) */
#define SYCC_CD_SHIFT 16
+/* pcmcia_iowait */
+#define PI_W0_MASK 0x0000003f /* waitcount0 */
+#define PI_W1_MASK 0x00001f00 /* waitcount1 */
+#define PI_W1_SHIFT 8
+#define PI_W2_MASK 0x001f0000 /* waitcount2 */
+#define PI_W2_SHIFT 16
+#define PI_W3_MASK 0x1f000000 /* waitcount3 */
+#define PI_W3_SHIFT 24
+
+/* prog_waitcount */
+#define PW_W0_MASK 0x0000001f /* waitcount0 */
+#define PW_W1_MASK 0x00001f00 /* waitcount1 */
+#define PW_W1_SHIFT 8
+#define PW_W2_MASK 0x001f0000 /* waitcount2 */
+#define PW_W2_SHIFT 16
+#define PW_W3_MASK 0x1f000000 /* waitcount3 */
+#define PW_W3_SHIFT 24
+
+#define PW_W0 0x0000000c
+#define PW_W1 0x00000a00
+#define PW_W2 0x00020000
+#define PW_W3 0x01000000
+
+/* watchdog */
+#define WATCHDOG_CLOCK 48000000 /* Hz */
+
+/* Fields in pmucontrol */
+#define PCTL_ILP_DIV_MASK 0xffff0000
+#define PCTL_ILP_DIV_SHIFT 16
+#define PCTL_NOILP_ON_WAIT 0x00000200
+#define PCTL_HT_REQ_EN 0x00000100
+#define PCTL_ALP_REQ_EN 0x00000080
+#define PCTL_XTALFREQ_MASK 0x0000007c
+#define PCTL_XTALFREQ_SHIFT 2
+#define PCTL_ILP_DIV_EN 0x00000002
+#define PCTL_LPO_SEL 0x00000001
+
/* gpiotimerval */
#define GPIO_ONTIME_SHIFT 16
#define CC_CFG_EM_PCMCIA 0x0004 /* PCMCIA */
#define CC_CFG_EM_IDE 0x0006 /* IDE */
#define CC_CFG_DS 0x0010 /* Data size, 0=8bit, 1=16bit */
-#define CC_CFG_CD_MASK 0x0060 /* Sync: Clock divisor */
-#define CC_CFG_CE 0x0080 /* Sync: Clock enable */
-#define CC_CFG_SB 0x0100 /* Sync: Size/Bytestrobe */
+#define CC_CFG_CD_MASK 0x00e0 /* Sync: Clock divisor, rev >= 20 */
+#define CC_CFG_CE 0x0100 /* Sync: Clock enable, rev >= 20 */
+#define CC_CFG_SB 0x0200 /* Sync: Size/Bytestrobe, rev >= 20 */
+#define CC_CFG_IS 0x0400 /* Extif Sync Clk Select, rev >= 20 */
/* ExtBus address space */
#define CC_EB_BASE 0x1a000000 /* Chipc ExtBus base address */
/* Start/busy bit in flashcontrol */
#define SFLASH_OPCODE 0x000000ff
#define SFLASH_ACTION 0x00000700
+#define SFLASH_CS_ACTIVE 0x00001000 /* Chip Select Active, rev >= 20 */
#define SFLASH_START 0x80000000
#define SFLASH_BUSY SFLASH_START
#define SFLASH_ST_BE 0x00c7 /* Bulk Erase */
#define SFLASH_ST_DP 0x00b9 /* Deep Power-down */
#define SFLASH_ST_RES 0x03ab /* Read Electronic Signature */
+#define SFLASH_ST_CSA 0x1000 /* Keep chip select asserted */
/* Status register bits for ST flashes */
#define SFLASH_ST_WIP 0x01 /* Write In Progress */
#define SFLASH_AT_ID_MASK 0x38
#define SFLASH_AT_ID_SHIFT 3
-/* OTP regions */
-#define OTP_HW_REGION OTPS_HW_PROTECT
-#define OTP_SW_REGION OTPS_SW_PROTECT
-#define OTP_CID_REGION OTPS_CID_PROTECT
-
-/* OTP regions (Byte offsets from otp size) */
-#define OTP_SWLIM_OFF (-8)
-#define OTP_CIDBASE_OFF 0
-#define OTP_CIDLIM_OFF 8
-
-/* Predefined OTP words (Word offset from otp size) */
-#define OTP_BOUNDARY_OFF (-4)
-#define OTP_HWSIGN_OFF (-3)
-#define OTP_SWSIGN_OFF (-2)
-#define OTP_CIDSIGN_OFF (-1)
-
-#define OTP_CID_OFF 0
-#define OTP_PKG_OFF 1
-#define OTP_FID_OFF 2
-#define OTP_RSV_OFF 3
-#define OTP_LIM_OFF 4
-
-#define OTP_SIGNATURE 0x578a
-#define OTP_MAGIC 0x4e56
-
/*
* These are the UART port assignments, expressed as offsets from the base
* register. These assignments should hold for any serial port based on
#define UART_LSR_RXRDY 0x01 /* Receiver ready */
#define UART_FCR_FIFO_ENABLE 1 /* FIFO control register bit controlling FIFO enable/disable */
+/* Interrupt Identity Register (IIR) bits */
+#define UART_IIR_FIFO_MASK 0xc0 /* IIR FIFO disable/enabled mask */
+#define UART_IIR_INT_MASK 0xf /* IIR interrupt ID source */
+#define UART_IIR_MDM_CHG 0x0 /* Modem status changed */
+#define UART_IIR_NOINT 0x1 /* No interrupt pending */
+#define UART_IIR_THRE 0x2 /* THR empty */
+#define UART_IIR_RCVD_DATA 0x4 /* Received data available */
+#define UART_IIR_RCVR_STATUS 0x6 /* Receiver status */
+#define UART_IIR_CHAR_TIME 0xc /* Character time */
+
/* Interrupt Enable Register (IER) bits */
#define UART_IER_EDSSI 8 /* enable modem status interrupt */
#define UART_IER_ELSI 4 /* enable receiver line status interrupt */
#define UART_IER_ETBEI 2 /* enable transmitter holding register empty interrupt */
#define UART_IER_ERBFI 1 /* enable data available interrupt */
+/* pmustatus */
+#define PST_INTPEND 0x0040
+#define PST_SBCLKST 0x0030
+#define PST_ALPAVAIL 0x0008
+#define PST_HTAVAIL 0x0004
+#define PST_RESINIT 0x0003
+
+/* pmucapabilities */
+#define PCAP_REV_MASK 0x000000ff
+
+/* PMU Resource Request Timer registers */
+/* This is based on PmuRev0 */
+#define PRRT_TIME_MASK 0x03ff
+#define PRRT_INTEN 0x0400
+#define PRRT_REQ_ACTIVE 0x0800
+#define PRRT_ALP_REQ 0x1000
+#define PRRT_HT_REQ 0x2000
+
+/* PMU resource bit position */
+#define PMURES_BIT(bit) (1 << (bit))
+
+/* PMU corerev and chip specific PLL controls.
+ * PMU<rev>_PLL<num>_XXXX where <rev> is PMU corerev and <num> is an arbitary number
+ * to differentiate different PLLs controlled by the same PMU rev.
+ */
+/* pllcontrol registers */
+/* PDIV, div_phy, div_arm, div_adc, dith_sel, ioff, kpd_scale, lsb_sel, mash_sel, lf_c & lf_r */
+#define PMU0_PLL0_PLLCTL0 0
+#define PMU0_PLL0_PC0_PDIV_MASK 1
+#define PMU0_PLL0_PC0_PDIV_FREQ 25000
+#define PMU0_PLL0_PC0_DIV_ARM_MASK 0x00000038
+#define PMU0_PLL0_PC0_DIV_ARM_SHIFT 3
+#define PMU0_PLL0_PC0_DIV_ARM_BASE 8
+
+/* PC0_DIV_ARM for PLLOUT_ARM */
+#define PMU0_PLL0_PC0_DIV_ARM_110MHZ 0
+#define PMU0_PLL0_PC0_DIV_ARM_97_7MHZ 1
+#define PMU0_PLL0_PC0_DIV_ARM_88MHZ 2
+#define PMU0_PLL0_PC0_DIV_ARM_80MHZ 3 /* Default */
+#define PMU0_PLL0_PC0_DIV_ARM_73_3MHZ 4
+#define PMU0_PLL0_PC0_DIV_ARM_67_7MHZ 5
+#define PMU0_PLL0_PC0_DIV_ARM_62_9MHZ 6
+#define PMU0_PLL0_PC0_DIV_ARM_58_6MHZ 7
+
+/* Wildcard base, stop_mod, en_lf_tp, en_cal & lf_r2 */
+#define PMU0_PLL0_PLLCTL1 1
+#define PMU0_PLL0_PC1_WILD_INT_MASK 0xf0000000
+#define PMU0_PLL0_PC1_WILD_INT_SHIFT 28
+#define PMU0_PLL0_PC1_WILD_FRAC_MASK 0x0fffff00
+#define PMU0_PLL0_PC1_WILD_FRAC_SHIFT 8
+#define PMU0_PLL0_PC1_STOP_MOD 0x00000040
+
+/* Wildcard base, vco_calvar, vco_swc, vco_var_selref, vso_ical & vco_sel_avdd */
+#define PMU0_PLL0_PLLCTL2 2
+#define PMU0_PLL0_PC2_WILD_INT_MASK 0xf
+#define PMU0_PLL0_PC2_WILD_INT_SHIFT 4
+
+/* Chip specific PMU resources. */
+#define RES4328_EXT_SWITCHER_PWM 0 /* 0x00001 */
+#define RES4328_BB_SWITCHER_PWM 1 /* 0x00002 */
+#define RES4328_BB_SWITCHER_BURST 2 /* 0x00004 */
+#define RES4328_BB_EXT_SWITCHER_BURST 3 /* 0x00008 */
+#define RES4328_ILP_REQUEST 4 /* 0x00010 */
+#define RES4328_RADIO_SWITCHER_PWM 5 /* 0x00020 */
+#define RES4328_RADIO_SWITCHER_BURST 6 /* 0x00040 */
+#define RES4328_ROM_SWITCH 7 /* 0x00080 */
+#define RES4328_PA_REF_LDO 8 /* 0x00100 */
+#define RES4328_RADIO_LDO 9 /* 0x00200 */
+#define RES4328_AFE_LDO 10 /* 0x00400 */
+#define RES4328_PLL_LDO 11 /* 0x00800 */
+#define RES4328_BG_FILTBYP 12 /* 0x01000 */
+#define RES4328_TX_FILTBYP 13 /* 0x02000 */
+#define RES4328_RX_FILTBYP 14 /* 0x04000 */
+#define RES4328_XTAL_PU 15 /* 0x08000 */
+#define RES4328_XTAL_EN 16 /* 0x10000 */
+#define RES4328_BB_PLL_FILTBYP 17 /* 0x20000 */
+#define RES4328_RF_PLL_FILTBYP 18 /* 0x40000 */
+#define RES4328_BB_PLL_PU 19 /* 0x80000 */
+
+#define RES5354_EXT_SWITCHER_PWM 0 /* 0x00001 */
+#define RES5354_BB_SWITCHER_PWM 1 /* 0x00002 */
+#define RES5354_BB_SWITCHER_BURST 2 /* 0x00004 */
+#define RES5354_BB_EXT_SWITCHER_BURST 3 /* 0x00008 */
+#define RES5354_ILP_REQUEST 4 /* 0x00010 */
+#define RES5354_RADIO_SWITCHER_PWM 5 /* 0x00020 */
+#define RES5354_RADIO_SWITCHER_BURST 6 /* 0x00040 */
+#define RES5354_ROM_SWITCH 7 /* 0x00080 */
+#define RES5354_PA_REF_LDO 8 /* 0x00100 */
+#define RES5354_RADIO_LDO 9 /* 0x00200 */
+#define RES5354_AFE_LDO 10 /* 0x00400 */
+#define RES5354_PLL_LDO 11 /* 0x00800 */
+#define RES5354_BG_FILTBYP 12 /* 0x01000 */
+#define RES5354_TX_FILTBYP 13 /* 0x02000 */
+#define RES5354_RX_FILTBYP 14 /* 0x04000 */
+#define RES5354_XTAL_PU 15 /* 0x08000 */
+#define RES5354_XTAL_EN 16 /* 0x10000 */
+#define RES5354_BB_PLL_FILTBYP 17 /* 0x20000 */
+#define RES5354_RF_PLL_FILTBYP 18 /* 0x40000 */
+#define RES5354_BB_PLL_PU 19 /* 0x80000 */
+
+/* pllcontrol registers */
+/* ndiv_pwrdn, pwrdn_ch<x>, refcomp_pwrdn, dly_ch<x>, p1div, p2div, _bypsss_sdmod */
+#define PMU1_PLL0_PLLCTL0 0
+#define PMU1_PLL0_PC0_P1DIV_MASK 0x00f00000
+#define PMU1_PLL0_PC0_P1DIV_SHIFT 20
+#define PMU1_PLL0_PC0_P2DIV_MASK 0x0f000000
+#define PMU1_PLL0_PC0_P2DIV_SHIFT 24
+
+/* m<x>div */
+#define PMU1_PLL0_PLLCTL1 1
+#define PMU1_PLL0_PC1_M1DIV_MASK 0x000000ff
+#define PMU1_PLL0_PC1_M1DIV_SHIFT 0
+#define PMU1_PLL0_PC1_M2DIV_MASK 0x0000ff00
+#define PMU1_PLL0_PC1_M2DIV_SHIFT 8
+#define PMU1_PLL0_PC1_M3DIV_MASK 0x00ff0000
+#define PMU1_PLL0_PC1_M3DIV_SHIFT 16
+#define PMU1_PLL0_PC1_M4DIV_MASK 0xff000000
+#define PMU1_PLL0_PC1_M4DIV_SHIFT 24
+
+/* m<x>div, ndiv_dither_mfb, ndiv_mode, ndiv_int */
+#define PMU1_PLL0_PLLCTL2 2
+#define PMU1_PLL0_PC2_M5DIV_MASK 0x000000ff
+#define PMU1_PLL0_PC2_M5DIV_SHIFT 0
+#define PMU1_PLL0_PC2_M6DIV_MASK 0x0000ff00
+#define PMU1_PLL0_PC2_M6DIV_SHIFT 8
+#define PMU1_PLL0_PC2_NDIV_MODE_MASK 0x000e0000
+#define PMU1_PLL0_PC2_NDIV_MODE_SHIFT 17
+#define PMU1_PLL0_PC2_NDIV_INT_MASK 0x1ff00000
+#define PMU1_PLL0_PC2_NDIV_INT_SHIFT 20
+
+/* ndiv_frac */
+#define PMU1_PLL0_PLLCTL3 3
+#define PMU1_PLL0_PC3_NDIV_FRAC_MASK 0x00ffffff
+#define PMU1_PLL0_PC3_NDIV_FRAC_SHIFT 0
+
+/* pll_ctrl */
+#define PMU1_PLL0_PLLCTL4 4
+
+/* pll_ctrl, vco_rng, clkdrive_ch<x> */
+#define PMU1_PLL0_PLLCTL5 5
+#define PMU1_PLL0_PC5_CLK_DRV_MASK 0xffffff00
+#define PMU1_PLL0_PC5_CLK_DRV_SHIFT 8
+
+#define RES4325_BUCK_BOOST_BURST 0 /* 0x00000001 */
+#define RES4325_CBUCK_BURST 1 /* 0x00000002 */
+#define RES4325_CBUCK_PWM 2 /* 0x00000004 */
+#define RES4325_CLDO_CBUCK_BURST 3 /* 0x00000008 */
+#define RES4325_CLDO_CBUCK_PWM 4 /* 0x00000010 */
+#define RES4325_BUCK_BOOST_PWM 5 /* 0x00000020 */
+#define RES4325_ILP_REQUEST 6 /* 0x00000040 */
+#define RES4325_ABUCK_BURST 7 /* 0x00000080 */
+#define RES4325_ABUCK_PWM 8 /* 0x00000100 */
+#define RES4325_LNLDO1_PU 9 /* 0x00000200 */
+#define RES4325_LNLDO2_PU 10 /* 0x00000400 */
+#define RES4325_LNLDO3_PU 11 /* 0x00000800 */
+#define RES4325_LNLDO4_PU 12 /* 0x00001000 */
+#define RES4325_XTAL_PU 13 /* 0x00002000 */
+#define RES4325_ALP_AVAIL 14 /* 0x00004000 */
+#define RES4325_RX_PWRSW_PU 15 /* 0x00008000 */
+#define RES4325_TX_PWRSW_PU 16 /* 0x00010000 */
+#define RES4325_RFPLL_PWRSW_PU 17 /* 0x00020000 */
+#define RES4325_LOGEN_PWRSW_PU 18 /* 0x00040000 */
+#define RES4325_AFE_PWRSW_PU 19 /* 0x00080000 */
+#define RES4325_BBPLL_PWRSW_PU 20 /* 0x00100000 */
+#define RES4325_HT_AVAIL 21 /* 0x00200000 */
+
+/* Chip specific ChipStatus register bits */
+#define CST4325_SPROM_OTP_SEL_MASK 0x00000003
+#define CST4325_DEFCIS_SEL 0 /* OTP is powered up, use def. CIS, no SPROM */
+#define CST4325_SPROM_SEL 1 /* OTP is powered up, SPROM is present */
+#define CST4325_OTP_SEL 2 /* OTP is powered up, no SPROM */
+#define CST4325_OTP_PWRDN 3 /* OTP is powered down, SPROM is present */
+#define CST4325_SDIO_USB_MODE_MASK 0x00000004
+#define CST4325_SDIO_USB_MODE_SHIFT 2
+#define CST4325_RCAL_VALID_MASK 0x00000008
+#define CST4325_RCAL_VALID_SHIFT 3
+#define CST4325_RCAL_VALUE_MASK 0x000001f0
+#define CST4325_RCAL_VALUE_SHIFT 4
+#define CST4325_PMUTOP_2B_MASK 0x00000200 /* 1 for 2b, 0 for to 2a */
+#define CST4325_PMUTOP_2B_SHIFT 9
+
+#define RES4312_SWITCHER_BURST 0 /* 0x00000001 */
+#define RES4312_SWITCHER_PWM 1 /* 0x00000002 */
+#define RES4312_PA_REF_LDO 2 /* 0x00000004 */
+#define RES4312_CORE_LDO_BURST 3 /* 0x00000008 */
+#define RES4312_CORE_LDO_PWM 4 /* 0x00000010 */
+#define RES4312_RADIO_LDO 5 /* 0x00000020 */
+#define RES4312_ILP_REQUEST 6 /* 0x00000040 */
+#define RES4312_BG_FILTBYP 7 /* 0x00000080 */
+#define RES4312_TX_FILTBYP 8 /* 0x00000100 */
+#define RES4312_RX_FILTBYP 9 /* 0x00000200 */
+#define RES4312_XTAL_PU 10 /* 0x00000400 */
+#define RES4312_ALP_AVAIL 11 /* 0x00000800 */
+#define RES4312_BB_PLL_FILTBYP 12 /* 0x00001000 */
+#define RES4312_RF_PLL_FILTBYP 13 /* 0x00002000 */
+#define RES4312_HT_AVAIL 14 /* 0x00004000 */
+
+/*
+* Maximum delay for the PMU state transition.
+* This is an upper bound intended for spinwaits etc.
+*/
+#define PMU_MAX_TRANSITION_DLY 15000
+
#endif /* _SBCHIPC_H */
/*
* Broadcom SiliconBackplane hardware register definitions.
*
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
* All Rights Reserved.
*
* THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
* SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
*
- * $Id: sbconfig.h,v 1.1.1.11 2006/02/27 03:43:16 honor Exp $
+ * $Id$
*/
#ifndef _SBCONFIG_H
#define _SBCONFIG_H
+#include "linuxver.h"
/* cpp contortions to concatenate w/arg prescan */
#ifndef PAD
#define SB_FLASH2 0x1c000000 /* Flash Region 2 (region 1 shadowed here) */
#define SB_FLASH2_SZ 0x02000000 /* Size of Flash Region 2 */
-
#define SB_EXTIF_BASE 0x1f000000 /* External Interface region base address */
+#define SB_ARMCM3_ROM 0x1e000000 /* ARM Cortex-M3 ROM */
#define SB_FLASH1 0x1fc00000 /* MIPS Flash Region 1 */
#define SB_FLASH1_SZ 0x00400000 /* MIPS Size of Flash Region 1 */
-
-#define SB_ROM 0x20000000 /* ARM ROM */
-#define SB_SRAM2 0x80000000 /* ARM SRAM Region 2 */
+#define SB_ARM7S_ROM 0x20000000 /* ARM7TDMI-S ROM */
+#define SB_ARMCM3_SRAM2 0x60000000 /* ARM Cortex-M3 SRAM Region 2 */
+#define SB_ARM7S_SRAM2 0x80000000 /* ARM7TDMI-S SRAM Region 2 */
#define SB_ARM_FLASH1 0xffff0000 /* ARM Flash Region 1 */
#define SB_ARM_FLASH1_SZ 0x00010000 /* ARM Size of Flash Region 1 */
#define SBTMH_INT 0x2 /* interrupt */
#define SBTMH_BUSY 0x4 /* busy */
#define SBTMH_TO 0x00000020 /* timeout (sonics >= 2.3) */
-#define SBTMH_FL_MASK 0x1fff0000 /* core-specific flags */
+#define SBTMH_FL_MASK 0x0fff0000 /* core-specific flags */
#define SBTMH_DMA64 0x10000000 /* supports DMA with 64-bit addresses */
#define SBTMH_GCR 0x20000000 /* gated clock request */
#define SBTMH_BISTF 0x40000000 /* bist failed */
#define SB_ILINE100 0x80a /* iline100 core */
#define SB_IPSEC 0x80b /* ipsec core */
#define SB_PCMCIA 0x80d /* pcmcia core */
-#define SB_SDIOD SB_PCMCIA /* pcmcia core has sdio device */
#define SB_SOCRAM 0x80e /* internal memory core */
#define SB_MEMC 0x80f /* memc sdram core */
#define SB_EXTIF 0x811 /* external interface core */
#define SB_MIMO 0x821 /* MIMO phy core */
#define SB_SRAMC 0x822 /* SRAM controller core */
#define SB_MINIMAC 0x823 /* MINI MAC/phy core */
-#define SB_ARM11 0x824 /* ARM 1176 core */
-#define SB_ARM7 0x825 /* ARM 7tdmi core */
+#define SB_ARM7S 0x825 /* ARM7tdmi-s core */
+#define SB_SDIOD 0x829 /* SDIO device core */
+#define SB_ARMCM3 0x82a /* ARM Cortex M3 core */
+#define SB_OCP 0x830 /* OCP2OCP bridge core */
+#define SB_SC 0x831 /* shared common core */
+#define SB_AHB 0x832 /* OCP2AHB bridge core */
#define SB_CC_IDX 0 /* chipc, when present, is always core 0 */
+/* Not an enumeration space register, but common to all cores to
+ * communicate w/PMU regarding Silicon Backplane clocking.
+ */
+#define SB_CLK_CTL_ST 0x1e0 /* clock control and status */
+
+/* clk_ctl_st register */
+#define CCS_FORCEALP 0x00000001 /* force ALP request */
+#define CCS_FORCEHT 0x00000002 /* force HT request */
+#define CCS_FORCEILP 0x00000004 /* force ILP request */
+#define CCS_ALPAREQ 0x00000008 /* ALP Avail Request */
+#define CCS_HTAREQ 0x00000010 /* HT Avail Request */
+#define CCS_FORCEHWREQOFF 0x00000020 /* Force HW Clock Request Off */
+#define CCS_ALPAVAIL 0x00010000 /* ALP is available */
+#define CCS_HTAVAIL 0x00020000 /* HT is available */
+#define CCS0_HTAVAIL 0x00010000 /* HT avail in chipc and pcmcia on 4328a0 */
+#define CCS0_ALPAVAIL 0x00020000 /* ALP avail in chipc and pcmcia on 4328a0 */
+
/* Not really related to Silicon Backplane, but a couple of software
* conventions for the use the flash space:
*/
#define BISZ_MAGIC 0x4249535a /* Marked with this value: 'BISZ' */
#define BISZ_MAGIC_IDX 0 /* Word 0: magic */
#define BISZ_TXTST_IDX 1 /* 1: text start */
-#define BISZ_TXTEND_IDX 2 /* 2: text start */
-#define BISZ_DATAST_IDX 3 /* 3: text start */
-#define BISZ_DATAEND_IDX 4 /* 4: text start */
-#define BISZ_BSSST_IDX 5 /* 5: text start */
-#define BISZ_BSSEND_IDX 6 /* 6: text start */
+#define BISZ_TXTEND_IDX 2 /* 2: text end */
+#define BISZ_DATAST_IDX 3 /* 3: data start */
+#define BISZ_DATAEND_IDX 4 /* 4: data end */
+#define BISZ_BSSST_IDX 5 /* 5: bss start */
+#define BISZ_BSSEND_IDX 6 /* 6: bss end */
#define BISZ_SIZE 7 /* descriptor size in 32-bit intergers */
#endif /* _SBCONFIG_H */
#define PA_W3_MASK 0x1f000000 /* waitcount3 */
#define PA_W3_SHIFT 24
-/* pcmcia_iowait */
-#define PI_W0_MASK 0x3f /* waitcount0 */
-#define PI_W1_MASK 0x1f00 /* waitcount1 */
-#define PI_W1_SHIFT 8
-#define PI_W2_MASK 0x1f0000 /* waitcount2 */
-#define PI_W2_SHIFT 16
-#define PI_W3_MASK 0x1f000000 /* waitcount3 */
-#define PI_W3_SHIFT 24
-
/* prog_waitcount */
#define PW_W0_MASK 0x0000001f /* waitcount0 */
#define PW_W1_MASK 0x00001f00 /* waitcount1 */
* interface. The core revision is stored in the SB ID register in SB
* configuration space.
*
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
* All Rights Reserved.
*
* THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
* SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
*
- * $Id: sbhndmips.h,v 1.1.1.1 2006/02/27 03:43:16 honor Exp $
+ * $Id$
*/
#ifndef _sbhndmips_h_
/*
* BCM47XX Sonics SiliconBackplane DDR/SDRAM controller core hardware definitions.
*
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
* All Rights Reserved.
*
* THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
* SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
*
- * $Id: sbmemc.h,v 1.6 2006/03/02 12:33:44 honor Exp $
+ * $Id$
*/
#ifndef _SBMEMC_H
/*
* HND SiliconBackplane PCI core hardware definitions.
*
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
* All Rights Reserved.
*
* THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
* SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
*
- * $Id: sbpci.h,v 1.1.1.11 2006/02/27 03:43:16 honor Exp $
+ * $Id$
*/
#ifndef _sbpci_h_
#define PCI_PARKID_EXT0 0 /* External master 0 */
#define PCI_PARKID_EXT1 1 /* External master 1 */
#define PCI_PARKID_EXT2 2 /* External master 2 */
-#define PCI_PARKID_INT 3 /* Internal master */
-#define PCI_PARKID_LAST 4 /* Last active master */
+#define PCI_PARKID_EXT3 3 /* External master 3 (rev >= 11) */
+#define PCI_PARKID_INT 3 /* Internal master (rev < 11) */
+#define PCI11_PARKID_INT 4 /* Internal master (rev >= 11) */
+#define PCI_PARKID_LAST 4 /* Last active master (rev < 11) */
+#define PCI11_PARKID_LAST 5 /* Last active master (rev >= 11) */
/* Interrupt status/mask */
#define PCI_INTA 0x01 /* PCI INTA# is asserted */
/*
* BCM43XX SiliconBackplane PCIE core hardware definitions.
*
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
* All Rights Reserved.
*
* THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
* SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
*
- * $Id: sbpcie.h,v 1.1.1.2 2006/02/27 03:43:16 honor Exp $
+ * $Id$
*/
#ifndef _SBPCIE_H
#define PCIE_BAR0_PCIECORE_OFFSET 0x2000
#define PCIE_BAR0_CCCOREREG_OFFSET 0x3000
+/* different register spaces to access thr'u pcie indirect access */
+#define PCIE_CONFIGREGS 1 /* Access to config space */
+#define PCIE_PCIEREGS 2 /* Access to pcie registers */
+
/* SB side: PCIE core and host control registers */
typedef struct sbpcieregs {
uint32 PAD[3];
uint32 biststatus; /* bist Status: 0x00C */
- uint32 PAD[6];
+ uint32 gpiosel; /* PCIE gpio sel: 0x010 */
+ uint32 gpioouten; /* PCIE gpio outen: 0x14 */
+ uint32 PAD[4];
uint32 sbtopcimailbox; /* sb to pcie mailbox: 0x028 */
uint32 PAD[54];
uint32 sbtopcie0; /* sb to pcie translation 0: 0x100 */
uint32 mdiocontrol; /* controls the mdio access: 0x128 */
uint32 mdiodata; /* Data to the mdio access: 0x12c */
- /* pcie protocol phy/dllp/tlp register access mechanism */
- uint32 pcieaddr; /* address of the internal registeru: 0x130 */
- uint32 pciedata; /* Data to/from the internal regsiter: 0x134 */
+ /* pcie protocol phy/dllp/tlp register indirect access mechanism */
+ uint32 pcieindaddr; /* indirect access to the internal register: 0x130 */
+ uint32 pcieinddata; /* Data to/from the internal regsiter: 0x134 */
- uint32 PAD[434];
+ uint32 clkreqenctrl; /* >= rev 6, Clkreq rdma control : 0x138 */
+ uint32 PAD[433];
uint16 sprom[36]; /* SPROM shadow Area */
} sbpcieregs_t;
#define PCIE_DLLP_NAKRXCTRREG 0x148 /* NAK Received Counter */
#define PCIE_DLLP_TESTREG 0x14C /* Test */
#define PCIE_DLLP_PKTBIST 0x150 /* Packet BIST */
+#define PCIE_DLLP_PCIE11 0x154 /* DLLP PCIE 1.1 reg */
/* PCIE protocol TLP diagnostic registers */
#define PCIE_TLP_CONFIGREG 0x000 /* Configuration */
#define MDIODATA_DEV_TX 0x1e /* SERDES TX Dev */
#define MDIODATA_DEV_RX 0x1f /* SERDES RX Dev */
-/* SERDES registers */
+/* SERDES RX registers */
+#define SERDES_RX_CTRL 1 /* Rx cntrl */
#define SERDES_RX_TIMER1 2 /* Rx Timer1 */
#define SERDES_RX_CDR 6 /* CDR */
#define SERDES_RX_CDRBW 7 /* CDR BW */
+/* SERDES RX control register */
+#define SERDES_RX_CTRL_FORCE 0x80 /* rxpolarity_force */
+#define SERDES_RX_CTRL_POLARITY 0x40 /* rxpolarity_value */
+
+/* SERDES PLL registers */
+#define SERDES_PLL_CTRL 1 /* PLL control reg */
+#define PLL_CTRL_FREQDET_EN 0x4000 /* bit 14 is FREQDET on */
+
+#define PCIE_L1THRESHOLDTIME_MASK 0xFF00 /* bits 8 - 15 */
+#define PCIE_L1THRESHOLDTIME_SHIFT 8 /* PCIE_L1THRESHOLDTIME_SHIFT */
+#define PCIE_L1THRESHOLD_WARVAL 0x72 /* WAR value */
+
+/* SPROM offsets */
+#define SRSH_ASPM_OFFSET 4 /* word 4 */
+#define SRSH_ASPM_ENB 0x18 /* bit 3, 4 */
+#define SRSH_CLKREQ_OFFSET 20 /* word 20 */
+#define SRSH_CLKREQ_ENB 0x0800 /* bit 11 */
+
+/* Linkcontrol reg offset in PCIE Cap */
+#define PCIE_CAP_LINKCTRL_OFFSET 16 /* linkctrl offset in pcie cap */
+#define PCIE_CAP_LCREG_ASPML0s 0x01 /* ASPM L0s in linkctrl */
+#define PCIE_CAP_LCREG_ASPML1 0x02 /* ASPM L1 in linkctrl */
+#define PCIE_ASPM_ENAB 0x03 /* ASPM L0s & L1 in linkctrl */
+#define PCIE_CLKREQ_ENAB 0x100 /* CLKREQ Enab in linkctrl */
+
+/* Status reg PCIE_PLP_STATUSREG */
+#define PCIE_PLP_POLARITYINV_STAT 0x10
+
#endif /* _SBPCIE_H */
/*
* BCM43XX Sonics SiliconBackplane PCMCIA core hardware definitions.
*
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
* All Rights Reserved.
*
* THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
* SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
*
- * $Id: sbpcmcia.h,v 1.1.1.9 2006/02/27 03:43:16 honor Exp $
+ * $Id$
*/
#ifndef _SBPCMCIA_H
#define SROM_DATAH (0x073a / 2)
#define SROM_ADDRL (0x073c / 2)
#define SROM_ADDRH (0x073e / 2)
+#define SROM_INFO2 (0x0772 / 2) /* Corerev >= 2 && <= 5 */
+#define SROM_INFO (0x07be / 2) /* Corerev >= 6 */
/* Values for srom_cs: */
#define SROM_IDLE 0
#define SROM_WDS 7
#define SROM_DONE 8
+/* Fields in srom_info: */
+#define SRI_SZ_MASK 0x03
+#define SRI_BLANK 0x04
+#define SRI_OTP 0x80
+
/* CIS stuff */
/* The CIS stops where the FCRs start */
#define CIS_SIZE PCMCIA_FCR
+/* CIS tuple length field max */
+#define CIS_TUPLE_LEN_MAX 0xff
+
/* Standard tuples we know about */
+#define CISTPL_VERS_1 0x15 /* CIS ver, manf, dev & ver strings */
#define CISTPL_MANFID 0x20 /* Manufacturer and device id */
+#define CISTPL_FUNCID 0x21 /* Function identification */
#define CISTPL_FUNCE 0x22 /* Function extensions */
#define CISTPL_CFTABLE 0x1b /* Config table entry */
+#define CISTPL_END 0xff /* End of the CIS tuple chain */
+
+/* Function identifier provides context for the function extentions tuple */
+
/* Function extensions for LANs */
#define HNBU_CCKPO 0x0b /* 2 byte cck power offsets in rev 3 */
#define HNBU_OFDMPO 0x0c /* 4 byte 11g ofdm power offsets in rev 3 */
#define HNBU_GPIOTIMER 0x0d /* 2 bytes with on/off values in rev 3 */
-
+#define HNBU_PAPARMS5G 0x0e /* 5G PA params */
+#define HNBU_ANT5G 0x0f /* 4328 5G antennas available/gain */
+#define HNBU_RDLID 0x10 /* 2 byte USB remote downloader (RDL) product Id */
+#define HNBU_RSSISMBXA2G 0x11 /* 4328 2G RSSI mid pt sel & board switch arch,
+ * 2 bytes, rev 3.
+ */
+#define HNBU_RSSISMBXA5G 0x12 /* 4328 5G RSSI mid pt sel & board switch arch,
+ * 2 bytes, rev 3.
+ */
+#define HNBU_XTALFREQ 0x13 /* 4 byte Crystal frequency in kilohertz */
+#define HNBU_TRI2G 0x14 /* 4328 2G TR isolation, 1 byte */
+#define HNBU_TRI5G 0x15 /* 4328 5G TR isolation, 3 bytes */
+#define HNBU_RXPO2G 0x16 /* 4328 2G RX power offset, 1 byte */
+#define HNBU_RXPO5G 0x17 /* 4328 5G RX power offset, 1 byte */
+#define HNBU_BOARDNUM 0x18 /* board serial number, independent of mac addr */
+#define HNBU_MACADDR 0x19 /* mac addr override for the standard CIS LAN_NID */
+#define HNBU_RDLSN 0x1a /* 2 bytes; serial # advertised in USB descriptor */
+#define HNBU_BOARDTYPE 0x1b /* 2 bytes; boardtype */
+#define HNBU_RDLRNDIS 0x20 /* 1 byte; 1 = RDL advertises RNDIS config */
+#define HNBU_RDLRWU 0x30 /* 1 byte; 1 = RDL advertises Remote Wake-up */
+#define HNBU_SROM3SWRGN 0x80 /* 78 bytes; srom rev 3 s/w region without crc8
+ * plus extra info appended.
+ */
/* sbtmstatelow */
#define SBTML_INT_ACK 0x40000 /* ack the sb interrupt */
/*
* BCM47XX Sonics SiliconBackplane SDRAM controller core hardware definitions.
*
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
* All Rights Reserved.
*
* THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
* SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
*
- * $Id: sbsdram.h,v 1.1.1.9 2006/03/02 13:03:52 honor Exp $
+ * $Id$
*/
#ifndef _SBSDRAM_H
uint32 pad2;
} sbsdramregs_t;
-/* SDRAM simulation */
-#ifdef RAMSZ
-#define SDRAMSZ RAMSZ
-#else
-#define SDRAMSZ (4 * 1024 * 1024)
-#endif
-
-extern uchar sdrambuf[SDRAMSZ];
-
-#endif /* _LANGUAGE_ASSEMBLY */
+#endif /* !_LANGUAGE_ASSEMBLY */
/* SDRAM initialization control (initcontrol) register bits */
#define SDRAM_CBR 0x0001 /* Writing 1 generates refresh cycle and toggles bit */
/*
* BCM47XX Sonics SiliconBackplane embedded ram core
*
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
* All Rights Reserved.
*
* THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
* SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
*
- * $Id: sbsocram.h,v 1.1.1.3 2006/02/27 03:43:16 honor Exp $
+ * $Id$
*/
#ifndef _SBSOCRAM_H
#define _SBSOCRAM_H
-#define SR_COREINFO 0x00
-#define SR_BWALLOC 0x04
-#define SR_BISTSTAT 0x0c
-#define SR_BANKINDEX 0x10
-#define SR_BANKSTBYCTL 0x14
-
-
#ifndef _LANGUAGE_ASSEMBLY
+/* cpp contortions to concatenate w/arg prescan */
+#ifndef PAD
+#define _PADLINE(line) pad ## line
+#define _XSTR(line) _PADLINE(line)
+#define PAD _XSTR(__LINE__)
+#endif /* PAD */
+
/* Memcsocram core registers */
typedef volatile struct sbsocramregs {
uint32 coreinfo;
uint32 biststat;
uint32 bankidx;
uint32 standbyctrl;
+ uint32 PAD[116];
+ uint32 pwrctl; /* corerev >= 2 */
} sbsocramregs_t;
-#endif
+#endif /* _LANGUAGE_ASSEMBLY */
+
+/* Register offsets */
+#define SR_COREINFO 0x00
+#define SR_BWALLOC 0x04
+#define SR_BISTSTAT 0x0c
+#define SR_BANKINDEX 0x10
+#define SR_BANKSTBYCTL 0x14
+#define SR_PWRCTL 0x1e8
/* Coreinfo register */
-#define SRCI_PT_MASK 0x30000
+#define SRCI_PT_MASK 0x00030000
#define SRCI_PT_SHIFT 16
+/* corerev >= 3 */
+#define SRCI_LSS_MASK 0x00f00000
+#define SRCI_LSS_SHIFT 20
+#define SRCI_LRS_MASK 0x0f000000
+#define SRCI_LRS_SHIFT 24
/* In corerev 0, the memory size is 2 to the power of the
* base plus 16 plus to the contents of the memsize field plus 1.
#define SRCI_SRBSZ_SHIFT 0
#define SR_BSZ_BASE 14
+
+/* Standby control register */
+#define SRSC_SBYOVR_MASK 0x80000000
+#define SRSC_SBYOVR_SHIFT 31
+#define SRSC_SBYOVRVAL_MASK 0x60000000
+#define SRSC_SBYOVRVAL_SHIFT 29
+
#endif /* _SBSOCRAM_H */
--- /dev/null
+/*
+ * SPROM format definitions for the Broadcom 47xx and 43xx chip family.
+ *
+ * $Id$
+ * Copyright(c) 2002 Broadcom Corporation
+ */
+
+#ifndef _SBSPROM_H
+#define _SBSPROM_H
+
+#include "typedefs.h"
+#include "bcmdevs.h"
+
+/* A word is this many bytes */
+#define SRW 2
+
+/* offset into PCI config space for write enable bit */
+#define CFG_SROM_WRITABLE_OFFSET 0x88
+#define SROM_WRITEABLE 0x10
+
+/* enumeration space consists of N contiguous 4Kbyte core register sets */
+#define SBCORES_BASE 0x18000000
+#define SBCORES_EACH 0x1000
+
+/* offset from BAR0 for srom space */
+#define SROM_BASE 4096
+
+/* number of 2-byte words in srom */
+#define SROM_SIZE 64
+
+#define SROM_BYTES (SROM_SIZE * SRW)
+
+#define MAX_FN 4
+
+/* Word 0, Hardware control */
+#define SROM_HWCTL 0
+#define HW_FUNMSK 0x000f
+#define HW_FCLK 0x0200
+#define HW_CBM 0x0400
+#define HW_PIMSK 0xf000
+#define HW_PISHIFT 12
+#define HW_4301PISHIFT 13
+#define HW_PI4402 0x2
+#define HW_FUN4401 0x0001
+#define HW_FCLK4402 0x0000
+
+/* Word 1, common-power/boot-rom */
+#define SROM_COMMPW 1
+/* boot rom present bit */
+#define BR_PRESSHIFT 8
+/* 15:9 for n; boot rom size is 2^(14 + n) bytes */
+#define BR_SIZESHIFT 9
+
+/* Word 2, SubsystemId */
+#define SROM_SSID 2
+
+/* Word 3, VendorId */
+#define SROM_VID 3
+
+/* Function 0 info, function info length */
+#define SROM_FN0 4
+#define SROM_FNSZ 8
+
+/* Within each function: */
+/* Word 0, deviceID */
+#define SRFN_DID 0
+
+/* Words 1-2, ClassCode */
+#define SRFN_CCL 1
+/* Word 2, D0 Power */
+#define SRFN_CCHD0 2
+
+/* Word 3, PME and D1D2D3 power */
+#define SRFN_PMED123 3
+
+#define PME_IL 0
+#define PME_ENET0 1
+#define PME_ENET1 2
+#define PME_CODEC 3
+
+#define PME_4402_ENET 0
+#define PME_4402_CODEC 1
+#define PME_4301_WL 2
+#define PMEREP_4402_ENET (PMERD3CV | PMERD3CA | PMERD3H | PMERD2 | PMERD1 | PMERD0 | PME)
+
+/* Word 4, Bar1 enable, pme reports */
+#define SRFN_B1PMER 4
+#define B1E 1
+#define B1SZMSK 0xe
+#define B1SZSH 1
+#define PMERMSK 0x0ff0
+#define PME 0x0010
+#define PMERD0 0x0020
+#define PMERD1 0x0040
+#define PMERD2 0x0080
+#define PMERD3H 0x0100
+#define PMERD3CA 0x0200
+#define PMERD3CV 0x0400
+#define IGNCLKRR 0x0800
+#define B0LMSK 0xf000
+
+/* Words 4-5, Bar0 Sonics value */
+#define SRFN_B0H 5
+/* Words 6-7, CIS Pointer */
+#define SRFN_CISL 6
+#define SRFN_CISH 7
+
+/* Words 36-38: iLine MAC address */
+#define SROM_I_MACHI 36
+#define SROM_I_MACMID 37
+#define SROM_I_MACLO 38
+
+/* Words 36-38: wireless0 MAC address on 43xx */
+#define SROM_W0_MACHI 36
+#define SROM_W0_MACMID 37
+#define SROM_W0_MACLO 38
+
+/* Words 39-41: enet0 MAC address */
+#define SROM_E0_MACHI 39
+#define SROM_E0_MACMID 40
+#define SROM_E0_MACLO 41
+
+/* Words 42-44: enet1 MAC address */
+#define SROM_E1_MACHI 42
+#define SROM_E1_MACMID 43
+#define SROM_E1_MACLO 44
+
+/* Words 42-44: wireless1 MAC address on 4309 */
+#define SROM_W1_MACHI 42
+#define SROM_W1_MACMID 43
+#define SROM_W1_MACLO 44
+
+#define SROM_EPHY 45
+
+/* Word 46: BdRev & Antennas0/1 & ccLock for 430x */
+#define SROM_REV_AA_LOCK 46
+
+/* Words 47-51 wl0 PA bx */
+#define SROM_WL0_PAB0 47
+#define SROM_WL0_PAB1 48
+#define SROM_WL0_PAB2 49
+#define SROM_WL0_PAB3 50
+#define SROM_WL0_PAB4 51
+
+/* Word 52: wl0/wl1 MaxPower */
+#define SROM_WL_MAXPWR 52
+
+/* Words 53-55 wl1 PA bx */
+#define SROM_WL1_PAB0 53
+#define SROM_WL1_PAB1 54
+#define SROM_WL1_PAB2 55
+
+/* Woprd 56: itt */
+#define SROM_ITT 56
+
+/* Words 59-62: OEM Space */
+#define SROM_WL_OEM 59
+#define SROM_OEM_SIZE 4
+
+/* Contents for the srom */
+
+#define BU4710_SSID 0x0400
+#define VSIM4710_SSID 0x0401
+#define QT4710_SSID 0x0402
+
+#define BU4610_SSID 0x0403
+#define VSIM4610_SSID 0x0404
+
+#define BU4307_SSID 0x0405
+#define BCM94301CB_SSID 0x0406
+#define BCM94301MP_SSID 0x0407
+#define BCM94307MP_SSID 0x0408
+#define AP4307_SSID 0x0409
+
+#define BU4309_SSID 0x040a
+#define BCM94309CB_SSID 0x040b
+#define BCM94309MP_SSID 0x040c
+#define AP4309_SSID 0x040d
+
+#define BU4402_SSID 0x4402
+
+#define CLASS_OTHER 0x8000
+#define CLASS_ETHER 0x0000
+#define CLASS_NET 0x0002
+#define CLASS_COMM 0x0007
+#define CLASS_MODEM 0x0300
+#define CLASS_MIPS 0x3000
+#define CLASS_PROC 0x000b
+#define CLASS_FLASH 0x0100
+#define CLASS_MEM 0x0005
+#define CLASS_SERIALBUS 0x000c
+#define CLASS_OHCI 0x0310
+
+/* Broadcom IEEE MAC addresses are 00:90:4c:xx:xx:xx */
+#define MACHI 0x90
+
+#define MACMID_BU4710I 0x4c17
+#define MACMID_BU4710E0 0x4c18
+#define MACMID_BU4710E1 0x4c19
+
+#define MACMID_94710R1I 0x4c1a
+#define MACMID_94710R1E0 0x4c1b
+#define MACMID_94710R1E1 0x4c1c
+
+#define MACMID_94710R4I 0x4c1d
+#define MACMID_94710R4E0 0x4c1e
+#define MACMID_94710R4E1 0x4c1f
+
+#define MACMID_94710DEVI 0x4c20
+#define MACMID_94710DEVE0 0x4c21
+#define MACMID_94710DEVE1 0x4c22
+
+#define MACMID_BU4402 0x4c23
+
+#define MACMID_BU4610I 0x4c24
+#define MACMID_BU4610E0 0x4c25
+#define MACMID_BU4610E1 0x4c26
+
+#define MACMID_BU4307W 0x4c27
+#define MACMID_BU4307E 0x4c28
+
+#define MACMID_94301CB 0x4c29
+
+#define MACMID_94301MP 0x4c2a
+
+#define MACMID_94307MPW 0x4c2b
+#define MACMID_94307MPE 0x4c2c
+
+#define MACMID_AP4307W 0x4c2d
+#define MACMID_AP4307E 0x4c2e
+
+#define MACMID_BU4309W0 0x4c2f
+#define MACMID_BU4309W1 0x4c30
+#define MACMID_BU4309E 0x4c31
+
+#define MACMID_94309CBW0 0x4c32
+#define MACMID_94309CBW1 0x4c33
+
+#define MACMID_94309MPW0 0x4c34
+#define MACMID_94309MPW1 0x4c35
+#define MACMID_94309MPE 0x4c36
+
+#define MACMID_BU4401 0x4c37
+
+/* Enet phy settings one or two singles or a dual */
+/* Bits 4-0 : MII address for enet0 (0x1f for not there */
+/* Bits 9-5 : MII address for enet1 (0x1f for not there */
+/* Bit 14 : Mdio for enet0 */
+/* Bit 15 : Mdio for enet1 */
+
+/* bu4710 with only one phy on enet1 with address 7: */
+#define SROM_EPHY_ONE 0x80ff
+
+/* bu4710 with two individual phys, at 6 and 7, */
+/* each mdio connected to its own mac: */
+#define SROM_EPHY_TWO 0x80e6
+
+/* bu4710 with a dual phy addresses 0 & 1, mdio-connected to enet0 */
+#define SROM_EPHY_DUAL 0x0001
+
+/* r1 board with a dual phy at 0, 1 (NOT swapped and mdc0 */
+#define SROM_EPHY_R1 0x0010
+
+/* r4 board with a single phy on enet0 at address 5 and a switch */
+/* chip on enet1 (speciall case: 0x1e */
+#define SROM_EPHY_R4 0x83e5
+
+/* 4402 uses an internal phy at phyaddr 1; want mdcport == coreunit == 0 */
+#define SROM_EPHY_INTERNAL 0x0001
+
+/* 4307 uses an external phy at phyaddr 0; want mdcport == coreunit == 0 */
+#define SROM_EPHY_ZERO 0x0000
+
+#define SROM_VERS 0x0001
+
+
+#endif /* _SBSPROM_H */
* Misc utility routines for accessing chip-specific features
* of Broadcom HNBU SiliconBackplane-based chips.
*
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
* All Rights Reserved.
*
* THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
* SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
*
- * $Id: sbutils.h,v 1.4 2006/04/08 07:12:42 honor Exp $
+ * $Id$
*/
#ifndef _sbutils_h_
#define _sbutils_h_
/*
- * Datastructure to export all chip specific common variables
+ * Data structure to export all chip specific common variables
* public (read-only) portion of sbutils handle returned by
* sb_attach()/sb_kattach()
*/
uint buscorerev; /* buscore rev */
uint buscoreidx; /* buscore index */
int ccrev; /* chip common core rev */
+ uint32 cccaps; /* chip common capabilities */
+ int pmurev; /* pmu core rev */
+ uint32 pmucaps; /* pmu capabilities */
uint boardtype; /* board type */
uint boardvendor; /* board vendor */
+ uint boardflags; /* board flags */
uint chip; /* chip number */
uint chiprev; /* chip revision */
uint chippkg; /* chip package option */
+ uint32 chipst; /* chip status */
uint sonicsrev; /* sonics backplane rev */
+ bool pr42780; /* whether PCIE 42780 WAR applies to this chip */
+ bool pr32414; /* whether 432414 WAR applis to the chip */
};
-typedef const struct sb_pub sb_t;
+typedef const struct sb_pub sb_t;
/*
* Many of the routines below take an 'sbh' handle as their first arg.
*/
#define SB_OSH NULL /* Use for sb_kattach when no osh is available */
+
/* exported externs */
extern sb_t *sb_attach(uint pcidev, osl_t *osh, void *regs, uint bustype,
void *sdh, char **vars, uint *varsz);
-extern sb_t *sb_kattach(void);
+extern sb_t *sb_kattach(osl_t *osh);
extern void sb_detach(sb_t *sbh);
extern uint sb_chip(sb_t *sbh);
extern uint sb_chiprev(sb_t *sbh);
extern uint sb_buscorerev(sb_t *sbh);
extern uint sb_corelist(sb_t *sbh, uint coreid[]);
extern uint sb_coreid(sb_t *sbh);
+extern uint sb_flag(sb_t *sbh);
extern uint sb_coreidx(sb_t *sbh);
extern uint sb_coreunit(sb_t *sbh);
extern uint sb_corevendor(sb_t *sbh);
extern uint sb_corerev(sb_t *sbh);
extern void *sb_osh(sb_t *sbh);
extern void sb_setosh(sb_t *sbh, osl_t *osh);
+extern uint sb_corereg(sb_t *sbh, uint coreidx, uint regoff, uint mask, uint val);
extern void *sb_coreregs(sb_t *sbh);
extern uint32 sb_coreflags(sb_t *sbh, uint32 mask, uint32 val);
+extern void sb_coreflags_wo(sb_t *sbh, uint32 mask, uint32 val);
extern uint32 sb_coreflagshi(sb_t *sbh, uint32 mask, uint32 val);
extern bool sb_iscoreup(sb_t *sbh);
+extern uint sb_findcoreidx(sb_t *sbh, uint coreid, uint coreunit);
extern void *sb_setcoreidx(sb_t *sbh, uint coreidx);
extern void *sb_setcore(sb_t *sbh, uint coreid, uint coreunit);
extern int sb_corebist(sb_t *sbh);
extern void sb_core_disable(sb_t *sbh, uint32 bits);
extern uint32 sb_clock_rate(uint32 pll_type, uint32 n, uint32 m);
extern uint32 sb_clock(sb_t *sbh);
+extern uint32 sb_alp_clock(sb_t *sbh);
extern void sb_pci_setup(sb_t *sbh, uint coremask);
extern void sb_pcmcia_init(sb_t *sbh);
extern void sb_watchdog(sb_t *sbh, uint ticks);
extern uint32 sb_gpioled(sb_t *sbh, uint32 mask, uint32 val);
extern uint32 sb_gpioreserve(sb_t *sbh, uint32 gpio_num, uint8 priority);
extern uint32 sb_gpiorelease(sb_t *sbh, uint32 gpio_num, uint8 priority);
+extern uint32 sb_gpiopull(sb_t *sbh, bool updown, uint32 mask, uint32 val);
+extern uint32 sb_gpioevent(sb_t *sbh, uint regtype, uint32 mask, uint32 val);
+extern uint32 sb_gpio_int_enable(sb_t *sbh, bool enable);
+
+/* GPIO event handlers */
+typedef void (*gpio_handler_t)(uint32 stat, void *arg);
+
+extern void *sb_gpio_handler_register(sb_t *sbh, uint32 event,
+ bool level, gpio_handler_t cb, void *arg);
+extern void sb_gpio_handler_unregister(sb_t *sbh, void* gpioh);
+extern void sb_gpio_handler_process(sb_t *sbh);
extern void sb_clkctl_init(sb_t *sbh);
extern uint16 sb_clkctl_fast_pwrup_delay(sb_t *sbh);
extern int sb_clkctl_xtal(sb_t *sbh, uint what, bool on);
extern void sb_register_intr_callback(sb_t *sbh, void *intrsoff_fn, void *intrsrestore_fn,
void *intrsenabled_fn, void *intr_arg);
-extern uint32 sb_set_initiator_to(sb_t *sbh, uint32 to);
+extern void sb_deregister_intr_callback(sb_t *sbh);
+extern uint32 sb_set_initiator_to(sb_t *sbh, uint32 to, uint idx);
+extern uint16 sb_d11_devid(sb_t *sbh);
extern int sb_corepciid(sb_t *sbh, uint func, uint16 *pcivendor, uint16 *pcidevice,
uint8 *pciclass, uint8 *pcisubclass, uint8 *pciprogif,
uint8 *pciheader);
extern void sb_btcgpiowar(sb_t *sbh);
+#if defined(BCMDBG_ASSERT)
+extern bool sb_taclear(sb_t *sbh);
+#endif
+#ifdef BCMDBG
+extern void sb_dump(sb_t *sbh, struct bcmstrbuf *b);
+extern void sb_dumpregs(sb_t *sbh, struct bcmstrbuf *b);
+extern void sb_view(sb_t *sbh);
+extern void sb_viewall(sb_t *sbh);
+extern void sb_clkctl_dump(sb_t *sbh, struct bcmstrbuf *b);
+extern uint8 sb_pcieL1plldown(sb_t *sbh);
+extern uint32 sb_pcielcreg(sb_t *sbh, uint32 mask, uint32 val);
+#endif
extern bool sb_deviceremoved(sb_t *sbh);
extern uint32 sb_socram_size(sb_t *sbh);
* Return 0 on success, nonzero otherwise.
*/
extern int sb_devpath(sb_t *sbh, char *path, int size);
+/* Read variable with prepending the devpath to the name */
+extern char *sb_getdevpathvar(sb_t *sbh, const char *name);
+extern int sb_getdevpathintvar(sb_t *sbh, const char *name);
+
+extern uint8 sb_pcieclkreq(sb_t *sbh, uint32 mask, uint32 val);
+extern void sb_war42780_clkreq(sb_t *sbh, bool clkreq);
+extern void sb_pci_sleep(sb_t *sbh);
+extern void sb_pci_down(sb_t *sbh);
+extern void sb_pci_up(sb_t *sbh);
+
+/* Wake-on-wireless-LAN (WOWL) */
+extern bool sb_pci_pmecap(sb_t *sbh);
+extern bool sb_pci_pmeclr(sb_t *sbh);
+extern void sb_pci_pmeen(sb_t *sbh);
/* clkctl xtal what flags */
#define XTAL 0x1 /* primary crystal oscillator (2050) */
/* GPIO usage priorities */
#define GPIO_DRV_PRIORITY 0 /* Driver */
#define GPIO_APP_PRIORITY 1 /* Application */
-#define GPIO_HI_PRIORITY 2 /* Highest priority. Ignore GPIO reservation */
+#define GPIO_HI_PRIORITY 2 /* Highest priority. Ignore GPIO reservation */
+
+/* GPIO pull up/down */
+#define GPIO_PULLUP 0
+#define GPIO_PULLDN 1
+
+/* GPIO event regtype */
+#define GPIO_REGEVT 0 /* GPIO register event */
+#define GPIO_REGEVT_INTMSK 1 /* GPIO register event int mask */
+#define GPIO_REGEVT_INTPOL 2 /* GPIO register event int polarity */
/* device path */
#define SB_DEVPATH_BUFSZ 16 /* min buffer size in bytes */
/*
* Broadcom SiliconBackplane chipcommon serial flash interface
*
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
* All Rights Reserved.
*
* THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
* SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
*
- * $Id: sflash.h,v 1.1.1.8 2006/02/27 03:43:16 honor Exp $
+ * $Id$
*/
#ifndef _sflash_h_
#include <typedefs.h>
#include <sbchipc.h>
+#include <sbutils.h>
struct sflash {
uint blocksize; /* Block size */
};
/* Utility functions */
-extern int sflash_poll(chipcregs_t *cc, uint offset);
-extern int sflash_read(chipcregs_t *cc, uint offset, uint len, uchar *buf);
-extern int sflash_write(chipcregs_t *cc, uint offset, uint len, const uchar *buf);
-extern int sflash_erase(chipcregs_t *cc, uint offset);
-extern int sflash_commit(chipcregs_t *cc, uint offset, uint len, const uchar *buf);
-extern struct sflash * sflash_init(chipcregs_t *cc);
+extern int sflash_poll(sb_t *sbh, chipcregs_t *cc, uint offset);
+extern int sflash_read(sb_t *sbh, chipcregs_t *cc,
+ uint offset, uint len, uchar *buf);
+extern int sflash_write(sb_t *sbh, chipcregs_t *cc,
+ uint offset, uint len, const uchar *buf);
+extern int sflash_erase(sb_t *sbh, chipcregs_t *cc, uint offset);
+extern int sflash_commit(sb_t *sbh, chipcregs_t *cc,
+ uint offset, uint len, const uchar *buf);
+extern struct sflash *sflash_init(sb_t *sbh, chipcregs_t *cc);
#endif /* _sflash_h_ */
/*
* TRX image file header format.
*
- * Copyright 2005, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
* All Rights Reserved.
*
* THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
* FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
*
* $Id$
- */
+ */
#include <typedefs.h>
#define TRX_MAGIC 0x30524448 /* "HDR0" */
-#define TRX_VERSION 1
-#define TRX_MAX_LEN 0x3A0000
-#define TRX_NO_HEADER 1 /* Do not write TRX header */
+#define TRX_VERSION 1 /* Version 1 */
+#define TRX_MAX_LEN 0x7A0000 /* Max length */
+#define TRX_NO_HEADER 1 /* Do not write TRX header */
#define TRX_GZ_FILES 0x2 /* Contains up to TRX_MAX_OFFSET individual gzip files */
-#define TRX_MAX_OFFSET 3
+#define TRX_MAX_OFFSET 3 /* Max number of individual files */
struct trx_header {
uint32 magic; /* "HDR0" */
/*
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
* All Rights Reserved.
*
* THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
* KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
* SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
- * $Id: typedefs.h,v 1.1.1.12 2006/04/08 06:13:40 honor Exp $
+ * $Id$
*/
#ifndef _TYPEDEFS_H_
#endif /* ! __cplusplus */
/* use the Windows ULONG_PTR type when compiling for 64 bit */
-#if defined(_WIN64)
+#if defined(_WIN64) && !defined(EFI)
#include <basetsd.h>
#define TYPEDEF_UINTPTR
-typedef ULONG_PTR uintptr;
+typedef ULONG_PTR uintptr;
+#elif defined(__x86_64__)
+#define TYPEDEF_UINTPTR
+typedef unsigned long long int uintptr;
#endif
#define _NEED_SIZE_T_
#endif
+#if defined(EFI) && !defined(_WIN64)
+#define _NEED_SIZE_T_
+#endif
+
#if defined(_NEED_SIZE_T_)
typedef long unsigned int size_t;
#endif
#endif
-#if defined(linux)
+#ifdef linux
#define TYPEDEF_UINT
#define TYPEDEF_USHORT
#define TYPEDEF_ULONG
-#endif
+#ifdef __KERNEL__
+#include <linux/version.h>
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19))
+#define TYPEDEF_BOOL
+#endif /* >= 2.6.19 */
+#endif /* __KERNEL__ */
+#endif /* linux */
#if !defined(linux) && !defined(_WIN32) && !defined(_CFE_) && \
- !defined(_HNDRTE_) && !defined(_MINOSL_) && !defined(__DJGPP__)
+ !defined(_HNDRTE_) && !defined(_MINOSL_) && !defined(__DJGPP__) && !defined(__IOPOS__)
#define TYPEDEF_UINT
#define TYPEDEF_USHORT
#endif
#endif /* __ICL */
#if !defined(_WIN32) && !defined(_CFE_) && !defined(_MINOSL_) && \
- !defined(__DJGPP__)
+ !defined(__DJGPP__) && !defined(__IOPOS__)
/* pick up ushort & uint from standard types.h */
#if defined(linux) && defined(__KERNEL__)
#endif
-#endif /* !_WIN32 && !PMON && !_CFE_ && !_HNDRTE_ && !_MINOSL_ && !__DJGPP__ */
+#endif
#if defined(MACOSX)
#define INLINE __inline
-#elif __GNUC__
+#elif defined(__GNUC__)
#define INLINE __inline__
#endif /* USE_TYPEDEF_DEFAULTS */
/*
- * Including the bcmdefs.h here, to make sure everyone including typedefs.h
- * gets this automatically
+ * Including the bcmdefs.h here, to make sure everyone including typedefs.h
+ * gets this automatically
*/
#include "bcmdefs.h"
#include <osl.h>
#include <bcmendian.h>
#include <bcmnvram.h>
-#include <bcmutils.h>
#include <sbsdram.h>
extern struct nvram_tuple * BCMINIT(_nvram_realloc)(struct nvram_tuple *t, const char *name, const char *value);
header->config_refresh |= SDRAM_REFRESH << 16;
header->config_ncdl = 0;
} else {
- header->crc_ver_init |= (bcm_strtoul(init, NULL, 0) & 0xffff) << 16;
- header->config_refresh = bcm_strtoul(config, NULL, 0) & 0xffff;
- header->config_refresh |= (bcm_strtoul(refresh, NULL, 0) & 0xffff) << 16;
- header->config_ncdl = bcm_strtoul(ncdl, NULL, 0);
+ header->crc_ver_init |= (simple_strtoul(init, NULL, 0) & 0xffff) << 16;
+ header->config_refresh = simple_strtoul(config, NULL, 0) & 0xffff;
+ header->config_refresh |= (simple_strtoul(refresh, NULL, 0) & 0xffff) << 16;
+ header->config_ncdl = simple_strtoul(ncdl, NULL, 0);
}
/* Clear data area */
tmp.crc_ver_init = htol32(header->crc_ver_init);
tmp.config_refresh = htol32(header->config_refresh);
tmp.config_ncdl = htol32(header->config_ncdl);
- crc = hndcrc8((char *) &tmp + 9, sizeof(struct nvram_header) - 9, CRC8_INIT_VALUE);
+ crc = hndcrc8((char *) &tmp + 9, sizeof(struct nvram_header) - 9, 0xff);
/* Continue CRC8 over data bytes */
crc = hndcrc8((char *) &header[1], header->len - sizeof(struct nvram_header), crc);
{
BCMINIT(nvram_free)();
}
+
+/*
+ * Search the name=value vars for a specific one and return its value.
+ * Returns NULL if not found.
+ */
+char*
+getvar(char *vars, const char *name)
+{
+ char *s;
+ int len;
+
+ len = strlen(name);
+
+ /* first look in vars[] */
+ for (s = vars; s && *s;) {
+ /* CSTYLED */
+ if ((memcmp(s, name, len) == 0) && (s[len] == '='))
+ return (&s[len+1]);
+
+ while (*s++)
+ ;
+ }
+
+ /* then query nvram */
+ return (nvram_get(name));
+}
+
+/*
+ * Search the vars for a specific one and return its value as
+ * an integer. Returns 0 if not found.
+ */
+int
+getintvar(char *vars, const char *name)
+{
+ char *val;
+
+ if ((val = getvar(vars, name)) == NULL)
+ return (0);
+
+ return (simple_strtoul(val, NULL, 0));
+}
+
+
#include <osl.h>
#include <bcmendian.h>
#include <bcmnvram.h>
-#include <bcmutils.h>
#include <sbconfig.h>
#include <sbchipc.h>
#include <sbutils.h>
extern void *bcm947xx_sbh;
extern spinlock_t bcm947xx_sbh_lock;
+static int cfe_env;
+extern char *cfe_env_get(char *nv_buf, const char *name);
+
/* Convenience */
#define sbh bcm947xx_sbh
#define sbh_lock bcm947xx_sbh_lock
if ((cc = sb_setcore(sbh, SB_CC, 0)) != NULL) {
base = KSEG1ADDR(SB_FLASH2);
- switch (readl(&cc->capabilities) & CAP_FLASH_MASK) {
+ switch (readl(&cc->capabilities) & CC_CAP_FLASH_MASK) {
case PFLASH:
lim = SB_FLASH2_SZ;
break;
case SFLASH_ST:
case SFLASH_AT:
- if ((info = sflash_init(cc)) == NULL)
+ if ((info = sflash_init(sbh,cc)) == NULL)
return;
lim = info->size;
break;
break;
*dst++ = *src++;
}
+ cfe_env = 1;
return;
}
if (!nvram_buf[0])
early_nvram_init();
+ if (cfe_env)
+ return cfe_env_get(nvram_buf, name);
+
/* Look for name=value and return value */
var = &nvram_buf[sizeof(struct nvram_header)];
end = nvram_buf + sizeof(nvram_buf) - 2;
#include <typedefs.h>
#include <osl.h>
-#include <bcmutils.h>
#include <sbconfig.h>
#include <sbutils.h>
#include <hndpci.h>
{
ulong flags;
- if (!(sbh = sb_kattach()))
+ if (!(sbh = sb_kattach(SB_OSH)))
panic("sb_kattach failed");
spin_lock_init(&sbh_lock);
writel(0x7FF, (ulong)regs + 0x200);
udelay(1);
}
+ /* PRxxxx: War for 5354 failures. */
+ if (sb_corerev(sbh) == 1) {
+ uint32 tmp;
+
+ /* Change Flush control reg */
+ tmp = readl((uintptr)regs + 0x400);
+ tmp &= ~8;
+ writel(tmp, (uintptr)regs + 0x400);
+ tmp = readl((uintptr)regs + 0x400);
+ printk("USB20H fcr: 0x%x\n", tmp);
+
+ /* Change Shim control reg */
+ tmp = readl((uintptr)regs + 0x304);
+ tmp &= ~0x100;
+ writel(tmp, (uintptr)regs + 0x304);
+ tmp = readl((uintptr)regs + 0x304);
+ printk("USB20H shim cr: 0x%x\n", tmp);
+ }
+
} else
sb_core_reset(sbh, 0, 0);
/*
* BCM47XX Sonics SiliconBackplane MIPS core routines
*
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
* All Rights Reserved.
*
* THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
* SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
*
- * $Id: hndmips.c,v 1.1.1.1 2006/02/27 03:43:16 honor Exp $
+ * $Id$
*/
#include <typedefs.h>
#include <bcmdefs.h>
#include <osl.h>
-#include <bcmutils.h>
#include <sbutils.h>
#include <bcmdevs.h>
#include <bcmnvram.h>
#include <sbconfig.h>
-#include <sbextif.h>
#include <sbchipc.h>
+#include <sbextif.h>
#include <sbmemc.h>
#include <mipsinc.h>
#include <sbhndmips.h>
#include <hndcpu.h>
+#include <hndmips.h>
/* sbipsflag register format, indexed by irq. */
static const uint32 sbips_int_mask[] = {
- 0, /* placeholder */
+ 0, /* placeholder */
SBIPS_INT1_MASK,
SBIPS_INT2_MASK,
SBIPS_INT3_MASK,
};
static const uint32 sbips_int_shift[] = {
- 0, /* placeholder */
+ 0, /* placeholder */
SBIPS_INT1_SHIFT,
SBIPS_INT2_SHIFT,
SBIPS_INT3_SHIFT,
static uint shirq_map_base = 0;
/* Returns the SB interrupt flag of the current core. */
-static uint32
-sb_getflag(sb_t *sbh)
+static uint32 sb_getflag(sb_t * sbh)
{
osl_t *osh;
void *regs;
osh = sb_osh(sbh);
regs = sb_coreregs(sbh);
- sb = (sbconfig_t *)((ulong) regs + SBCONFIGOFF);
+ sb = (sbconfig_t *) ((ulong) regs + SBCONFIGOFF);
return (R_REG(osh, &sb->sbtpsflag) & SBTPS_NUM0_MASK);
}
* Returns the MIPS IRQ assignment of the current core. If unassigned,
* 0 is returned.
*/
-uint
-sb_irq(sb_t *sbh)
+uint sb_irq(sb_t * sbh)
{
osl_t *osh;
uint idx;
if ((regs = sb_setcore(sbh, SB_MIPS, 0)) ||
(regs = sb_setcore(sbh, SB_MIPS33, 0))) {
- sb = (sbconfig_t *)((ulong) regs + SBCONFIGOFF);
+ sb = (sbconfig_t *) ((ulong) regs + SBCONFIGOFF);
/* sbipsflag specifies which core is routed to interrupts 1 to 4 */
sbipsflag = R_REG(osh, &sb->sbipsflag);
for (irq = 1; irq <= 4; irq++) {
- if (((sbipsflag & sbips_int_mask[irq]) >> sbips_int_shift[irq]) == flag)
+ if (((sbipsflag & sbips_int_mask[irq]) >>
+ sbips_int_shift[irq]) == flag)
break;
}
if (irq == 5)
}
/* Clears the specified MIPS IRQ. */
-static void
-BCMINITFN(sb_clearirq)(sb_t *sbh, uint irq)
-{
+static void BCMINITFN(sb_clearirq) (sb_t * sbh, uint irq) {
osl_t *osh;
void *regs;
sbconfig_t *sb;
if (!(regs = sb_setcore(sbh, SB_MIPS, 0)) &&
!(regs = sb_setcore(sbh, SB_MIPS33, 0)))
ASSERT(regs);
- sb = (sbconfig_t *)((ulong) regs + SBCONFIGOFF);
+ sb = (sbconfig_t *) ((ulong) regs + SBCONFIGOFF);
if (irq == 0)
W_REG(osh, &sb->sbintvec, 0);
* The old assignment to the specified core is removed first.
*/
static void
-BCMINITFN(sb_setirq)(sb_t *sbh, uint irq, uint coreid, uint coreunit)
-{
+BCMINITFN(sb_setirq) (sb_t * sbh, uint irq, uint coreid, uint coreunit) {
osl_t *osh;
void *regs;
sbconfig_t *sb;
if (!(regs = sb_setcore(sbh, SB_MIPS, 0)) &&
!(regs = sb_setcore(sbh, SB_MIPS33, 0)))
ASSERT(regs);
- sb = (sbconfig_t *)((ulong) regs + SBCONFIGOFF);
+ sb = (sbconfig_t *) ((ulong) regs + SBCONFIGOFF);
if (!oldirq)
AND_REG(osh, &sb->sbintvec, ~(1 << flag));
*
* 'shirqmap' enables virtual dedicated OS IRQ mapping if non-zero.
*/
-void
-BCMINITFN(sb_mips_init)(sb_t *sbh, uint shirqmap)
-{
+void BCMINITFN(sb_mips_init) (sb_t * sbh, uint shirqmap) {
osl_t *osh;
ulong hz, ns, tmp;
extifregs_t *eir;
/* Set timing for the flash */
tmp = CEIL(10, ns) << FW_W3_SHIFT; /* W3 = 10nS */
- tmp = tmp | (CEIL(40, ns) << FW_W1_SHIFT); /* W1 = 40nS */
- tmp = tmp | CEIL(120, ns); /* W0 = 120nS */
+ tmp = tmp | (CEIL(40, ns) << FW_W1_SHIFT); /* W1 = 40nS */
+ tmp = tmp | CEIL(120, ns); /* W0 = 120nS */
W_REG(osh, &eir->prog_waitcount, tmp); /* 0x01020a0c for a 100Mhz clock */
/* Set programmable interface timing for external uart */
tmp = CEIL(10, ns) << FW_W3_SHIFT; /* W3 = 10nS */
- tmp = tmp | (CEIL(20, ns) << FW_W2_SHIFT); /* W2 = 20nS */
- tmp = tmp | (CEIL(100, ns) << FW_W1_SHIFT); /* W1 = 100nS */
- tmp = tmp | CEIL(120, ns); /* W0 = 120nS */
+ tmp = tmp | (CEIL(20, ns) << FW_W2_SHIFT); /* W2 = 20nS */
+ tmp = tmp | (CEIL(100, ns) << FW_W1_SHIFT); /* W1 = 100nS */
+ tmp = tmp | CEIL(120, ns); /* W0 = 120nS */
W_REG(osh, &eir->prog_waitcount, tmp); /* 0x01020a0c for a 100Mhz clock */
} else if ((cc = sb_setcore(sbh, SB_CC, 0))) {
/* Set timing for the flash */
tmp = CEIL(10, ns) << FW_W3_SHIFT; /* W3 = 10nS */
tmp |= CEIL(10, ns) << FW_W1_SHIFT; /* W1 = 10nS */
- tmp |= CEIL(120, ns); /* W0 = 120nS */
- if ((sb_corerev(sbh) < 9) ||
- (BCMINIT(sb_chip)(sbh) == 0x5365))
+ tmp |= CEIL(120, ns); /* W0 = 120nS */
+ if ((sb_corerev(sbh) < 9) || (sb_chip(sbh) == 0x5365))
W_REG(osh, &cc->flash_waitcount, tmp);
if ((sb_corerev(sbh) < 9) ||
- ((sb_chip(sbh) == BCM5350_CHIP_ID) && sb_chiprev(sbh) == 0) ||
- (BCMINIT(sb_chip)(sbh) == 0x5365)) {
+ ((sb_chip(sbh) == BCM5350_CHIP_ID) && sb_chiprev(sbh) == 0)
+ || (sb_chip(sbh) == 0x5365)) {
W_REG(osh, &cc->pcmcia_memwait, tmp);
}
n = R_REG(osh, &eir->clockcontrol_n);
m = R_REG(osh, &eir->clockcontrol_sb);
} else if ((cc = (chipcregs_t *) sb_setcore(sbh, SB_CC, 0))) {
- pll_type = R_REG(osh, &cc->capabilities) & CAP_PLL_MASK;
+ /* 5354 chip uses a non programmable PLL of frequency 240MHz */
+ if (sb_chip(sbh) == BCM5354_CHIP_ID) {
+ rate = 240000000;
+ goto out;
+ }
+ pll_type = R_REG(osh, &cc->capabilities) & CC_CAP_PLL_MASK;
n = R_REG(osh, &cc->clockcontrol_n);
if ((pll_type == PLL_TYPE2) ||
(pll_type == PLL_TYPE4) ||
- (pll_type == PLL_TYPE6) ||
- (pll_type == PLL_TYPE7))
+ (pll_type == PLL_TYPE6) || (pll_type == PLL_TYPE7))
m = R_REG(osh, &cc->clockcontrol_m3);
else if (pll_type == PLL_TYPE5) {
rate = 200000000;
goto out;
- }
- else if (pll_type == PLL_TYPE3) {
+ } else if (pll_type == PLL_TYPE3) {
if (sb_chip(sbh) == BCM5365_CHIP_ID) {
rate = 200000000;
goto out;
} else
goto out;
-
/* calculate rate */
- if (BCMINIT(sb_chip)(sbh) == 0x5365)
+ if (sb_chip(sbh) == 0x5365)
rate = 100000000;
else
rate = sb_clock_rate(pll_type, n, m);
if (pll_type == PLL_TYPE6)
rate = SB2MIPS_T6(rate);
-out:
+ out:
/* switch back to previous core */
sb_setcoreidx(sbh, idx);
#define ALLINTS (IE_IRQ0 | IE_IRQ1 | IE_IRQ2 | IE_IRQ3 | IE_IRQ4)
-static void
-BCMINITFN(handler)(void)
-{
- __asm__(
- ".set\tmips32\n\t"
- "ssnop\n\t"
- "ssnop\n\t"
- /* Disable interrupts */
- /* MTC0(C0_STATUS, 0, MFC0(C0_STATUS, 0) & ~(ALLINTS | STO_IE)); */
+static void BCMINITFN(handler) (void) {
+ __asm__(".set\tmips32\n\t" "ssnop\n\t" "ssnop\n\t"
+ /* Disable interrupts */
+ /* MTC0(C0_STATUS, 0, MFC0(C0_STATUS, 0) & ~(ALLINTS | STO_IE)); */
"mfc0 $15, $12\n\t"
- /* Just a Hack to not to use reg 'at' which was causing problems on 4704 A2 */
+ /* Just a Hack to not to use reg 'at' which was causing problems on 4704 A2 */
"li $14, -31746\n\t"
"and $15, $15, $14\n\t"
- "mtc0 $15, $12\n\t"
- "eret\n\t"
- "nop\n\t"
- "nop\n\t"
+ "mtc0 $15, $12\n\t" "eret\n\t" "nop\n\t" "nop\n\t"
".set\tmips0");
}
/* The following MUST come right after handler() */
-static void
-BCMINITFN(afterhandler)(void)
-{
+static void BCMINITFN(afterhandler) (void) {
}
/*
* core rev. 15 to a DLL inside the MIPS core in 4785.
*/
bool
-BCMINITFN(sb_mips_setclock)(sb_t *sbh, uint32 mipsclock, uint32 sbclock, uint32 pciclock)
-{
+BCMINITFN(sb_mips_setclock) (sb_t * sbh, uint32 mipsclock, uint32 sbclock,
+ uint32 pciclock) {
extifregs_t *eir = NULL;
chipcregs_t *cc = NULL;
mipsregs_t *mipsr = NULL;
- volatile uint32 *clockcontrol_n, *clockcontrol_sb, *clockcontrol_pci, *clockcontrol_m2;
- uint32 orig_n, orig_sb, orig_pci, orig_m2, orig_mips, orig_ratio_parm, orig_ratio_cfg;
+ volatile uint32 *clockcontrol_n, *clockcontrol_sb, *clockcontrol_pci,
+ *clockcontrol_m2;
+ uint32 orig_n, orig_sb, orig_pci, orig_m2, orig_mips, orig_ratio_parm,
+ orig_ratio_cfg;
uint32 pll_type, sync_mode;
uint ic_size, ic_lsize;
uint idx, i;
} n3m_table_t;
static n3m_table_t BCMINITDATA(type1_table)[] = {
/* 96.000 32.000 24.000 */
- { 96000000, 0x0303, 0x04020011, 0x11030011, 0x11050011 },
- /* 100.000 33.333 25.000 */
- { 100000000, 0x0009, 0x04020011, 0x11030011, 0x11050011 },
- /* 104.000 31.200 24.960 */
- { 104000000, 0x0802, 0x04020011, 0x11050009, 0x11090009 },
- /* 108.000 32.400 24.923 */
- { 108000000, 0x0403, 0x04020011, 0x11050009, 0x02000802 },
- /* 112.000 32.000 24.889 */
- { 112000000, 0x0205, 0x04020011, 0x11030021, 0x02000403 },
- /* 115.200 32.000 24.000 */
- { 115200000, 0x0303, 0x04020009, 0x11030011, 0x11050011 },
- /* 120.000 30.000 24.000 */
- { 120000000, 0x0011, 0x04020011, 0x11050011, 0x11090011 },
- /* 124.800 31.200 24.960 */
- { 124800000, 0x0802, 0x04020009, 0x11050009, 0x11090009 },
- /* 128.000 32.000 24.000 */
- { 128000000, 0x0305, 0x04020011, 0x11050011, 0x02000305 },
- /* 132.000 33.000 24.750 */
- { 132000000, 0x0603, 0x04020011, 0x11050011, 0x02000305 },
- /* 136.000 32.640 24.727 */
- { 136000000, 0x0c02, 0x04020011, 0x11090009, 0x02000603 },
- /* 140.000 30.000 24.706 */
- { 140000000, 0x0021, 0x04020011, 0x11050021, 0x02000c02 },
- /* 144.000 30.857 24.686 */
- { 144000000, 0x0405, 0x04020011, 0x01020202, 0x11090021 },
- /* 150.857 33.000 24.000 */
- { 150857142, 0x0605, 0x04020021, 0x02000305, 0x02000605 },
- /* 152.000 32.571 24.000 */
- { 152000000, 0x0e02, 0x04020011, 0x11050021, 0x02000e02 },
- /* 156.000 31.200 24.960 */
- { 156000000, 0x0802, 0x04020005, 0x11050009, 0x11090009 },
- /* 160.000 32.000 24.000 */
- { 160000000, 0x0309, 0x04020011, 0x11090011, 0x02000309 },
- /* 163.200 32.640 24.727 */
- { 163200000, 0x0c02, 0x04020009, 0x11090009, 0x02000603 },
- /* 168.000 32.000 24.889 */
- { 168000000, 0x0205, 0x04020005, 0x11030021, 0x02000403 },
- /* 176.000 33.000 24.000 */
- { 176000000, 0x0602, 0x04020003, 0x11050005, 0x02000602 },
- };
+ {
+ 96000000, 0x0303, 0x04020011, 0x11030011, 0x11050011},
+ /* 100.000 33.333 25.000 */
+ {
+ 100000000, 0x0009, 0x04020011, 0x11030011, 0x11050011},
+ /* 104.000 31.200 24.960 */
+ {
+ 104000000, 0x0802, 0x04020011, 0x11050009, 0x11090009},
+ /* 108.000 32.400 24.923 */
+ {
+ 108000000, 0x0403, 0x04020011, 0x11050009, 0x02000802},
+ /* 112.000 32.000 24.889 */
+ {
+ 112000000, 0x0205, 0x04020011, 0x11030021, 0x02000403},
+ /* 115.200 32.000 24.000 */
+ {
+ 115200000, 0x0303, 0x04020009, 0x11030011, 0x11050011},
+ /* 120.000 30.000 24.000 */
+ {
+ 120000000, 0x0011, 0x04020011, 0x11050011, 0x11090011},
+ /* 124.800 31.200 24.960 */
+ {
+ 124800000, 0x0802, 0x04020009, 0x11050009, 0x11090009},
+ /* 128.000 32.000 24.000 */
+ {
+ 128000000, 0x0305, 0x04020011, 0x11050011, 0x02000305},
+ /* 132.000 33.000 24.750 */
+ {
+ 132000000, 0x0603, 0x04020011, 0x11050011, 0x02000305},
+ /* 136.000 32.640 24.727 */
+ {
+ 136000000, 0x0c02, 0x04020011, 0x11090009, 0x02000603},
+ /* 140.000 30.000 24.706 */
+ {
+ 140000000, 0x0021, 0x04020011, 0x11050021, 0x02000c02},
+ /* 144.000 30.857 24.686 */
+ {
+ 144000000, 0x0405, 0x04020011, 0x01020202, 0x11090021},
+ /* 150.857 33.000 24.000 */
+ {
+ 150857142, 0x0605, 0x04020021, 0x02000305, 0x02000605},
+ /* 152.000 32.571 24.000 */
+ {
+ 152000000, 0x0e02, 0x04020011, 0x11050021, 0x02000e02},
+ /* 156.000 31.200 24.960 */
+ {
+ 156000000, 0x0802, 0x04020005, 0x11050009, 0x11090009},
+ /* 160.000 32.000 24.000 */
+ {
+ 160000000, 0x0309, 0x04020011, 0x11090011, 0x02000309},
+ /* 163.200 32.640 24.727 */
+ {
+ 163200000, 0x0c02, 0x04020009, 0x11090009, 0x02000603},
+ /* 168.000 32.000 24.889 */
+ {
+ 168000000, 0x0205, 0x04020005, 0x11030021, 0x02000403},
+ /* 176.000 33.000 24.000 */
+ {
+ 176000000, 0x0602, 0x04020003, 0x11050005, 0x02000602},};
/* PLL configuration: type 3 */
typedef struct {
uint32 mipsclock;
uint16 n;
- uint32 m2; /* that is the clockcontrol_m2 */
+ uint32 m2; /* that is the clockcontrol_m2 */
} type3_table_t;
static type3_table_t type3_table[] = {
/* for 5350, mips clock is always double sb clock */
- { 150000000, 0x311, 0x4020005 },
- { 200000000, 0x311, 0x4020003 },
- };
+ {150000000, 0x311, 0x4020005},
+ {200000000, 0x311, 0x4020003},
+ };
/* PLL configuration: type 2, 4, 7 */
typedef struct {
uint32 mipsclock;
uint32 sbclock;
+ uint32 pciclock;
uint16 n;
uint32 sb;
uint32 pci33;
uint32 d11_r2;
} n4m_table_t;
static n4m_table_t BCMINITDATA(type2_table)[] = {
- { 120000000, 60000000, 0x0303, 0x01000200, 0x01000600, 0x01000200, 0x05000200, 11,
- 0x0aaa0555, 8 /* ratio 4/8 */, 0x00aa0055 },
- { 150000000, 75000000, 0x0303, 0x01000100, 0x01000600, 0x01000100, 0x05000100, 11,
- 0x0aaa0555, 8 /* ratio 4/8 */, 0x00aa0055 },
- { 180000000, 80000000, 0x0403, 0x01010000, 0x01020300, 0x01020600, 0x05000100, 8,
- 0x012a00a9, 9 /* ratio 4/9 */, 0x012a00a9 },
- { 180000000, 90000000, 0x0403, 0x01000100, 0x01020300, 0x01000100, 0x05000100, 11,
- 0x0aaa0555, 8 /* ratio 4/8 */, 0x00aa0055 },
- { 200000000, 100000000, 0x0303, 0x02010000, 0x02040001, 0x02010000, 0x06000001, 11,
- 0x0aaa0555, 8 /* ratio 4/8 */, 0x00aa0055 },
- { 211200000, 105600000, 0x0902, 0x01000200, 0x01030400, 0x01000200, 0x05000200, 11,
- 0x0aaa0555, 8 /* ratio 4/8 */, 0x00aa0055 },
- { 220800000, 110400000, 0x1500, 0x01000200, 0x01030400, 0x01000200, 0x05000200, 11,
- 0x0aaa0555, 8 /* ratio 4/8 */, 0x00aa0055 },
- { 230400000, 115200000, 0x0604, 0x01000200, 0x01020600, 0x01000200, 0x05000200, 11,
- 0x0aaa0555, 8 /* ratio 4/8 */, 0x00aa0055 },
- { 234000000, 104000000, 0x0b01, 0x01010000, 0x01010700, 0x01020600, 0x05000100, 8,
- 0x012a00a9, 9 /* ratio 4/9 */, 0x012a00a9 },
- { 240000000, 120000000, 0x0803, 0x01000200, 0x01020600, 0x01000200, 0x05000200, 11,
- 0x0aaa0555, 8 /* ratio 4/8 */, 0x00aa0055 },
- { 252000000, 126000000, 0x0504, 0x01000100, 0x01020500, 0x01000100, 0x05000100, 11,
- 0x0aaa0555, 8 /* ratio 4/8 */, 0x00aa0055 },
- { 264000000, 132000000, 0x0903, 0x01000200, 0x01020700, 0x01000200, 0x05000200, 11,
- 0x0aaa0555, 8 /* ratio 4/8 */, 0x00aa0055 },
- { 270000000, 120000000, 0x0703, 0x01010000, 0x01030400, 0x01020600, 0x05000100, 8,
- 0x012a00a9, 9 /* ratio 4/9 */, 0x012a00a9 },
- { 276000000, 122666666, 0x1500, 0x01010000, 0x01030400, 0x01020600, 0x05000100, 8,
- 0x012a00a9, 9 /* ratio 4/9 */, 0x012a00a9 },
- { 280000000, 140000000, 0x0503, 0x01000000, 0x01010600, 0x01000000, 0x05000000, 11,
- 0x0aaa0555, 8 /* ratio 4/8 */, 0x00aa0055 },
- { 288000000, 128000000, 0x0604, 0x01010000, 0x01030400, 0x01020600, 0x05000100, 8,
- 0x012a00a9, 9 /* ratio 4/9 */, 0x012a00a9 },
- { 288000000, 144000000, 0x0404, 0x01000000, 0x01010600, 0x01000000, 0x05000000, 11,
- 0x0aaa0555, 8 /* ratio 4/8 */, 0x00aa0055 },
- { 300000000, 133333333, 0x0803, 0x01010000, 0x01020600, 0x01010100, 0x05000100, 8,
- 0x012a00a9, 9 /* ratio 4/9 */, 0x012a00a9 },
- { 300000000, 150000000, 0x0803, 0x01000100, 0x01020600, 0x01010100, 0x05000100, 11,
- 0x0aaa0555, 8 /* ratio 4/8 */, 0x00aa0055 },
- { 330000000, 132000000, 0x0903, 0x01000200, 0x00020200, 0x01010100, 0x05000100, 0,
- 0, 10 /* ratio 4/10 */, 0x02520129 },
- { 330000000, 146666666, 0x0903, 0x01010000, 0x00020200, 0x01010100, 0x05000100, 0,
- 0, 9 /* ratio 4/9 */, 0x012a00a9 },
- { 330000000, 165000000, 0x0903, 0x01000100, 0x00020200, 0x01010100, 0x05000100, 0,
- 0, 8 /* ratio 4/8 */, 0x00aa0055 },
- { 360000000, 120000000, 0x0a03, 0x01000300, 0x00010201, 0x01010200, 0x05000100, 0,
- 0, 12 /* ratio 4/12 */, 0x04920492 },
- { 360000000, 144000000, 0x0a03, 0x01000200, 0x00010201, 0x01010200, 0x05000100, 0,
- 0, 10 /* ratio 4/10 */, 0x02520129 },
- { 360000000, 160000000, 0x0a03, 0x01010000, 0x00010201, 0x01010200, 0x05000100, 0,
- 0, 9 /* ratio 4/9 */, 0x012a00a9 },
- { 360000000, 180000000, 0x0a03, 0x01000100, 0x00010201, 0x01010200, 0x05000100, 0,
- 0, 8 /* ratio 4/8 */, 0x00aa0055 },
- { 390000000, 130000000, 0x0b03, 0x01010100, 0x00020101, 0x01020100, 0x05000100, 0,
- 0, 12 /* ratio 4/12 */, 0x04920492 },
- { 390000000, 156000000, 0x0b03, 0x01000200, 0x00020101, 0x01020100, 0x05000100, 0,
- 0, 10 /* ratio 4/10 */, 0x02520129 },
- { 390000000, 173000000, 0x0b03, 0x01010000, 0x00020101, 0x01020100, 0x05000100, 0,
- 0, 9 /* ratio 4/9 */, 0x012a00a9 },
- { 390000000, 195000000, 0x0b03, 0x01000100, 0x00020101, 0x01020100, 0x05000100, 0,
- 0, 8 /* ratio 4/8 */, 0x00aa0055 },
+ {
+ 120000000, 60000000, 32000000, 0x0303, 0x01000200,
+ 0x01000600, 0x01000200, 0x05000200, 11, 0x0aaa0555,
+ 8 /* ratio 4/8 */ ,
+ 0x00aa0055}, {
+ 150000000, 75000000, 33333333, 0x0303, 0x01000100,
+ 0x01000600, 0x01000100, 0x05000100, 11, 0x0aaa0555,
+ 8 /* ratio 4/8 */ ,
+ 0x00aa0055}, {
+ 180000000, 80000000, 30000000, 0x0403, 0x01010000,
+ 0x01020300, 0x01020600, 0x05000100, 8, 0x012a00a9,
+ 9 /* ratio 4/9 */ ,
+ 0x012a00a9}, {
+ 180000000, 90000000, 30000000, 0x0403, 0x01000100,
+ 0x01020300, 0x01000100, 0x05000100, 11, 0x0aaa0555,
+ 8 /* ratio 4/8 */ ,
+ 0x00aa0055}, {
+ 200000000, 100000000, 33333333, 0x0303, 0x02010000,
+ 0x02040001, 0x02010000, 0x06000001, 11, 0x0aaa0555,
+ 8 /* ratio 4/8 */ ,
+ 0x00aa0055}, {
+ 211200000, 105600000, 30171428, 0x0902, 0x01000200,
+ 0x01030400, 0x01000200, 0x05000200, 11, 0x0aaa0555,
+ 8 /* ratio 4/8 */ ,
+ 0x00aa0055}, {
+ 220800000, 110400000, 31542857, 0x1500, 0x01000200,
+ 0x01030400, 0x01000200, 0x05000200, 11, 0x0aaa0555,
+ 8 /* ratio 4/8 */ ,
+ 0x00aa0055}, {
+ 230400000, 115200000, 32000000, 0x0604, 0x01000200,
+ 0x01020600, 0x01000200, 0x05000200, 11, 0x0aaa0555,
+ 8 /* ratio 4/8 */ ,
+ 0x00aa0055}, {
+ 234000000, 104000000, 31200000, 0x0b01, 0x01010000,
+ 0x01010700, 0x01020600, 0x05000100, 8, 0x012a00a9,
+ 9 /* ratio 4/9 */ ,
+ 0x012a00a9}, {
+ 240000000, 120000000, 33333333, 0x0803, 0x01000200,
+ 0x01020600, 0x01000200, 0x05000200, 11, 0x0aaa0555,
+ 8 /* ratio 4/8 */ ,
+ 0x00aa0055}, {
+ 252000000, 126000000, 33333333, 0x0504, 0x01000100,
+ 0x01020500, 0x01000100, 0x05000100, 11, 0x0aaa0555,
+ 8 /* ratio 4/8 */ ,
+ 0x00aa0055}, {
+ 264000000, 132000000, 33000000, 0x0903, 0x01000200,
+ 0x01020700, 0x01000200, 0x05000200, 11, 0x0aaa0555,
+ 8 /* ratio 4/8 */ ,
+ 0x00aa0055}, {
+ 270000000, 120000000, 30000000, 0x0703, 0x01010000,
+ 0x01030400, 0x01020600, 0x05000100, 8, 0x012a00a9,
+ 9 /* ratio 4/9 */ ,
+ 0x012a00a9}, {
+ 276000000, 122666666, 31542857, 0x1500, 0x01010000,
+ 0x01030400, 0x01020600, 0x05000100, 8, 0x012a00a9,
+ 9 /* ratio 4/9 */ ,
+ 0x012a00a9}, {
+ 280000000, 140000000, 31111111, 0x0503, 0x01000000,
+ 0x01010600, 0x01000000, 0x05000000, 11, 0x0aaa0555,
+ 8 /* ratio 4/8 */ ,
+ 0x00aa0055}, {
+ 288000000, 128000000, 32914285, 0x0604, 0x01010000,
+ 0x01030400, 0x01020600, 0x05000100, 8, 0x012a00a9,
+ 9 /* ratio 4/9 */ ,
+ 0x012a00a9}, {
+ 288000000, 144000000, 32000000, 0x0404, 0x01000000,
+ 0x01010600, 0x01000000, 0x05000000, 11, 0x0aaa0555,
+ 8 /* ratio 4/8 */ ,
+ 0x00aa0055}, {
+ 300000000, 133333333, 33333333, 0x0803, 0x01010000,
+ 0x01020600, 0x01010100, 0x05000100, 8, 0x012a00a9,
+ 9 /* ratio 4/9 */ ,
+ 0x012a00a9}, {
+ 300000000, 133333333, 37500000, 0x0803, 0x01010000,
+ 0x01020500, 0x01010100, 0x05000100, 8, 0x012a00a9,
+ 9 /* ratio 4/9 */ ,
+ 0x012a00a9}, {
+ 300000000, 133333333, 42857142, 0x0803, 0x01010000,
+ 0x01020400, 0x01010100, 0x05000100, 8, 0x012a00a9,
+ 9 /* ratio 4/9 */ ,
+ 0x012a00a9}, {
+ 300000000, 133333333, 50000000, 0x0803, 0x01010000,
+ 0x01020300, 0x01010100, 0x05000100, 8, 0x012a00a9,
+ 9 /* ratio 4/9 */ ,
+ 0x012a00a9}, {
+ 300000000, 133333333, 60000000, 0x0803, 0x01010000,
+ 0x01020200, 0x01010100, 0x05000100, 8, 0x012a00a9,
+ 9 /* ratio 4/9 */ ,
+ 0x012a00a9}, {
+ 300000000, 150000000, 33333333, 0x0803, 0x01000100,
+ 0x01020600, 0x01010100, 0x05000100, 11, 0x0aaa0555,
+ 8 /* ratio 4/8 */ ,
+ 0x00aa0055}, {
+ 300000000, 150000000, 37500000, 0x0803, 0x01000100,
+ 0x01020500, 0x01010100, 0x05000100, 11, 0x0aaa0555,
+ 8 /* ratio 4/8 */ ,
+ 0x00aa0055}, {
+ 300000000, 150000000, 42857142, 0x0803, 0x01000100,
+ 0x01020400, 0x01010100, 0x05000100, 11, 0x0aaa0555,
+ 8 /* ratio 4/8 */ ,
+ 0x00aa0055}, {
+ 300000000, 150000000, 50000000, 0x0803, 0x01000100,
+ 0x01020300, 0x01010100, 0x05000100, 11, 0x0aaa0555,
+ 8 /* ratio 4/8 */ ,
+ 0x00aa0055}, {
+ 300000000, 150000000, 60000000, 0x0803, 0x01000100,
+ 0x01020200, 0x01010100, 0x05000100, 11, 0x0aaa0555,
+ 8 /* ratio 4/8 */ ,
+ 0x00aa0055}, {
+ 330000000, 132000000, 33000000, 0x0903, 0x01000200,
+ 0x00020200, 0x01010100, 0x05000100, 0, 0,
+ 10 /* ratio 4/10 */ , 0x02520129},
+ {
+ 330000000, 146666666, 33000000, 0x0903, 0x01010000,
+ 0x00020200, 0x01010100, 0x05000100, 0, 0,
+ 9 /* ratio 4/9 */ , 0x012a00a9},
+ {
+ 330000000, 165000000, 33000000, 0x0903, 0x01000100,
+ 0x00020200, 0x01010100, 0x05000100, 0, 0,
+ 8 /* ratio 4/8 */ , 0x00aa0055},
+ {
+ 330000000, 165000000, 41250000, 0x0903, 0x01000100,
+ 0x00020100, 0x01010100, 0x05000100, 0, 0,
+ 8 /* ratio 4/8 */ , 0x00aa0055},
+ {
+ 330000000, 165000000, 55000000, 0x0903, 0x01000100,
+ 0x00020000, 0x01010100, 0x05000100, 0, 0,
+ 8 /* ratio 4/8 */ , 0x00aa0055},
+ {
+ 360000000, 120000000, 32000000, 0x0a03, 0x01000300,
+ 0x00010201, 0x01010200, 0x05000100, 0, 0,
+ 12 /* ratio 4/12 */ , 0x04920492},
+ {
+ 360000000, 144000000, 32000000, 0x0a03, 0x01000200,
+ 0x00010201, 0x01010200, 0x05000100, 0, 0,
+ 10 /* ratio 4/10 */ , 0x02520129},
+ {
+ 360000000, 160000000, 32000000, 0x0a03, 0x01010000,
+ 0x00010201, 0x01010200, 0x05000100, 0, 0,
+ 9 /* ratio 4/9 */ , 0x012a00a9},
+ {
+ 360000000, 180000000, 32000000, 0x0a03, 0x01000100,
+ 0x00010201, 0x01010200, 0x05000100, 0, 0,
+ 8 /* ratio 4/8 */ , 0x00aa0055},
+ {
+ 360000000, 180000000, 40000000, 0x0a03, 0x01000100,
+ 0x00010101, 0x01010200, 0x05000100, 0, 0,
+ 8 /* ratio 4/8 */ , 0x00aa0055},
+ {
+ 360000000, 180000000, 53333333, 0x0a03, 0x01000100,
+ 0x00010001, 0x01010200, 0x05000100, 0, 0,
+ 8 /* ratio 4/8 */ , 0x00aa0055},
+ {
+ 390000000, 130000000, 32500000, 0x0b03, 0x01010100,
+ 0x00020101, 0x01020100, 0x05000100, 0, 0,
+ 12 /* ratio 4/12 */ , 0x04920492},
+ {
+ 390000000, 156000000, 32500000, 0x0b03, 0x01000200,
+ 0x00020101, 0x01020100, 0x05000100, 0, 0,
+ 10 /* ratio 4/10 */ , 0x02520129},
+ {
+ 390000000, 173000000, 32500000, 0x0b03, 0x01010000,
+ 0x00020101, 0x01020100, 0x05000100, 0, 0,
+ 9 /* ratio 4/9 */ , 0x012a00a9},
+ {
+ 390000000, 195000000, 32500000, 0x0b03, 0x01000100,
+ 0x00020101, 0x01020100, 0x05000100, 0, 0,
+ 8 /* ratio 4/8 */ , 0x00aa0055},
};
static n4m_table_t BCMINITDATA(type4_table)[] = {
- { 120000000, 60000000, 0x0009, 0x11020009, 0x01030203, 0x11020009, 0x04000009, 11,
- 0x0aaa0555 },
- { 150000000, 75000000, 0x0009, 0x11050002, 0x01030203, 0x11050002, 0x04000005, 11,
- 0x0aaa0555 },
- { 192000000, 96000000, 0x0702, 0x04000011, 0x11030011, 0x04000011, 0x04000003, 11,
- 0x0aaa0555 },
- { 198000000, 99000000, 0x0603, 0x11020005, 0x11030011, 0x11020005, 0x04000005, 11,
- 0x0aaa0555 },
- { 200000000, 100000000, 0x0009, 0x04020011, 0x11030011, 0x04020011, 0x04020003, 11,
- 0x0aaa0555 },
- { 204000000, 102000000, 0x0c02, 0x11020005, 0x01030303, 0x11020005, 0x04000005, 11,
- 0x0aaa0555 },
- { 208000000, 104000000, 0x0802, 0x11030002, 0x11090005, 0x11030002, 0x04000003, 11,
- 0x0aaa0555 },
- { 210000000, 105000000, 0x0209, 0x11020005, 0x01030303, 0x11020005, 0x04000005, 11,
- 0x0aaa0555 },
- { 216000000, 108000000, 0x0111, 0x11020005, 0x01030303, 0x11020005, 0x04000005, 11,
- 0x0aaa0555 },
- { 224000000, 112000000, 0x0205, 0x11030002, 0x02002103, 0x11030002, 0x04000003, 11,
- 0x0aaa0555 },
- { 228000000, 101333333, 0x0e02, 0x11030003, 0x11210005, 0x01030305, 0x04000005, 8,
- 0x012a00a9 },
- { 228000000, 114000000, 0x0e02, 0x11020005, 0x11210005, 0x11020005, 0x04000005, 11,
- 0x0aaa0555 },
- { 240000000, 102857143, 0x0109, 0x04000021, 0x01050203, 0x11030021, 0x04000003, 13,
- 0x254a14a9 },
- { 240000000, 120000000, 0x0109, 0x11030002, 0x01050203, 0x11030002, 0x04000003, 11,
- 0x0aaa0555 },
- { 252000000, 100800000, 0x0203, 0x04000009, 0x11050005, 0x02000209, 0x04000002, 9,
- 0x02520129 },
- { 252000000, 126000000, 0x0203, 0x04000005, 0x11050005, 0x04000005, 0x04000002, 11,
- 0x0aaa0555 },
- { 264000000, 132000000, 0x0602, 0x04000005, 0x11050005, 0x04000005, 0x04000002, 11,
- 0x0aaa0555 },
- { 272000000, 116571428, 0x0c02, 0x04000021, 0x02000909, 0x02000221, 0x04000003, 13,
- 0x254a14a9 },
- { 280000000, 120000000, 0x0209, 0x04000021, 0x01030303, 0x02000221, 0x04000003, 13,
- 0x254a14a9 },
- { 288000000, 123428571, 0x0111, 0x04000021, 0x01030303, 0x02000221, 0x04000003, 13,
- 0x254a14a9 },
- { 300000000, 120000000, 0x0009, 0x04000009, 0x01030203, 0x02000902, 0x04000002, 9,
- 0x02520129 },
- { 300000000, 150000000, 0x0009, 0x04000005, 0x01030203, 0x04000005, 0x04000002, 11,
- 0x0aaa0555 }
+ {
+ 120000000, 60000000, 0, 0x0009, 0x11020009, 0x01030203,
+ 0x11020009, 0x04000009, 11, 0x0aaa0555}, {
+ 150000000, 75000000, 0, 0x0009, 0x11050002, 0x01030203,
+ 0x11050002, 0x04000005, 11, 0x0aaa0555}, {
+ 192000000, 96000000, 0, 0x0702, 0x04000011, 0x11030011,
+ 0x04000011, 0x04000003, 11, 0x0aaa0555}, {
+ 198000000, 99000000, 0, 0x0603, 0x11020005, 0x11030011,
+ 0x11020005, 0x04000005, 11, 0x0aaa0555}, {
+ 200000000, 100000000, 0, 0x0009, 0x04020011, 0x11030011,
+ 0x04020011, 0x04020003, 11, 0x0aaa0555}, {
+ 204000000, 102000000, 0, 0x0c02, 0x11020005, 0x01030303,
+ 0x11020005, 0x04000005, 11, 0x0aaa0555}, {
+ 208000000, 104000000, 0, 0x0802, 0x11030002, 0x11090005,
+ 0x11030002, 0x04000003, 11, 0x0aaa0555}, {
+ 210000000, 105000000, 0, 0x0209, 0x11020005, 0x01030303,
+ 0x11020005, 0x04000005, 11, 0x0aaa0555}, {
+ 216000000, 108000000, 0, 0x0111, 0x11020005, 0x01030303,
+ 0x11020005, 0x04000005, 11, 0x0aaa0555}, {
+ 224000000, 112000000, 0, 0x0205, 0x11030002, 0x02002103,
+ 0x11030002, 0x04000003, 11, 0x0aaa0555}, {
+ 228000000, 101333333, 0, 0x0e02, 0x11030003, 0x11210005,
+ 0x01030305, 0x04000005, 8, 0x012a00a9}, {
+ 228000000, 114000000, 0, 0x0e02, 0x11020005, 0x11210005,
+ 0x11020005, 0x04000005, 11, 0x0aaa0555}, {
+ 240000000, 102857143, 0, 0x0109, 0x04000021, 0x01050203,
+ 0x11030021, 0x04000003, 13, 0x254a14a9}, {
+ 240000000, 120000000, 0, 0x0109, 0x11030002, 0x01050203,
+ 0x11030002, 0x04000003, 11, 0x0aaa0555}, {
+ 252000000, 100800000, 0, 0x0203, 0x04000009, 0x11050005,
+ 0x02000209, 0x04000002, 9, 0x02520129}, {
+ 252000000, 126000000, 0, 0x0203, 0x04000005, 0x11050005,
+ 0x04000005, 0x04000002, 11, 0x0aaa0555}, {
+ 264000000, 132000000, 0, 0x0602, 0x04000005, 0x11050005,
+ 0x04000005, 0x04000002, 11, 0x0aaa0555}, {
+ 272000000, 116571428, 0, 0x0c02, 0x04000021, 0x02000909,
+ 0x02000221, 0x04000003, 13, 0x254a14a9}, {
+ 280000000, 120000000, 0, 0x0209, 0x04000021, 0x01030303,
+ 0x02000221, 0x04000003, 13, 0x254a14a9}, {
+ 288000000, 123428571, 0, 0x0111, 0x04000021, 0x01030303,
+ 0x02000221, 0x04000003, 13, 0x254a14a9}, {
+ 300000000, 120000000, 0, 0x0009, 0x04000009, 0x01030203,
+ 0x02000902, 0x04000002, 9, 0x02520129}, {
+ 300000000, 150000000, 0, 0x0009, 0x04000005, 0x01030203,
+ 0x04000005, 0x04000002, 11, 0x0aaa0555}
};
static n4m_table_t BCMINITDATA(type7_table)[] = {
- { 183333333, 91666666, 0x0605, 0x04000011, 0x11030011, 0x04000011, 0x04000003, 11,
- 0x0aaa0555 },
- { 187500000, 93750000, 0x0a03, 0x04000011, 0x11030011, 0x04000011, 0x04000003, 11,
- 0x0aaa0555 },
- { 196875000, 98437500, 0x1003, 0x11020005, 0x11050011, 0x11020005, 0x04000005, 11,
- 0x0aaa0555 },
- { 200000000, 100000000, 0x0311, 0x04000011, 0x11030011, 0x04000009, 0x04000003, 11,
- 0x0aaa0555 },
- { 200000000, 100000000, 0x0311, 0x04020011, 0x11030011, 0x04020011, 0x04020003, 11,
- 0x0aaa0555 },
- { 206250000, 103125000, 0x1103, 0x11020005, 0x11050011, 0x11020005, 0x04000005, 11,
- 0x0aaa0555 },
- { 212500000, 106250000, 0x0c05, 0x11020005, 0x01030303, 0x11020005, 0x04000005, 11,
- 0x0aaa0555 },
- { 215625000, 107812500, 0x1203, 0x11090009, 0x11050005, 0x11020005, 0x04000005, 11,
- 0x0aaa0555 },
- { 216666666, 108333333, 0x0805, 0x11020003, 0x11030011, 0x11020003, 0x04000003, 11,
- 0x0aaa0555 },
- { 225000000, 112500000, 0x0d03, 0x11020003, 0x11030011, 0x11020003, 0x04000003, 11,
- 0x0aaa0555 },
- { 233333333, 116666666, 0x0905, 0x11020003, 0x11030011, 0x11020003, 0x04000003, 11,
- 0x0aaa0555 },
- { 237500000, 118750000, 0x0e05, 0x11020005, 0x11210005, 0x11020005, 0x04000005, 11,
- 0x0aaa0555 },
- { 240000000, 120000000, 0x0b11, 0x11020009, 0x11210009, 0x11020009, 0x04000009, 11,
- 0x0aaa0555 },
- { 250000000, 125000000, 0x0f03, 0x11020003, 0x11210003, 0x11020003, 0x04000003, 11,
- 0x0aaa0555 }
+ {
+ 183333333, 91666666, 0, 0x0605, 0x04000011, 0x11030011,
+ 0x04000011, 0x04000003, 11, 0x0aaa0555}, {
+ 187500000, 93750000, 0, 0x0a03, 0x04000011, 0x11030011,
+ 0x04000011, 0x04000003, 11, 0x0aaa0555}, {
+ 196875000, 98437500, 0, 0x1003, 0x11020005, 0x11050011,
+ 0x11020005, 0x04000005, 11, 0x0aaa0555}, {
+ 200000000, 100000000, 0, 0x0311, 0x04000011, 0x11030011,
+ 0x04000009, 0x04000003, 11, 0x0aaa0555}, {
+ 200000000, 100000000, 0, 0x0311, 0x04020011, 0x11030011,
+ 0x04020011, 0x04020003, 11, 0x0aaa0555}, {
+ 206250000, 103125000, 0, 0x1103, 0x11020005, 0x11050011,
+ 0x11020005, 0x04000005, 11, 0x0aaa0555}, {
+ 212500000, 106250000, 0, 0x0c05, 0x11020005, 0x01030303,
+ 0x11020005, 0x04000005, 11, 0x0aaa0555}, {
+ 215625000, 107812500, 0, 0x1203, 0x11090009, 0x11050005,
+ 0x11020005, 0x04000005, 11, 0x0aaa0555}, {
+ 216666666, 108333333, 0, 0x0805, 0x11020003, 0x11030011,
+ 0x11020003, 0x04000003, 11, 0x0aaa0555}, {
+ 225000000, 112500000, 0, 0x0d03, 0x11020003, 0x11030011,
+ 0x11020003, 0x04000003, 11, 0x0aaa0555}, {
+ 233333333, 116666666, 0, 0x0905, 0x11020003, 0x11030011,
+ 0x11020003, 0x04000003, 11, 0x0aaa0555}, {
+ 237500000, 118750000, 0, 0x0e05, 0x11020005, 0x11210005,
+ 0x11020005, 0x04000005, 11, 0x0aaa0555}, {
+ 240000000, 120000000, 0, 0x0b11, 0x11020009, 0x11210009,
+ 0x11020009, 0x04000009, 11, 0x0aaa0555}, {
+ 250000000, 125000000, 0, 0x0f03, 0x11020003, 0x11210003,
+ 0x11020003, 0x04000003, 11, 0x0aaa0555}
};
ulong start, end, dst;
idx = sb_coreidx(sbh);
clockcontrol_m2 = NULL;
+ /* switch to chipc core */
/* switch to extif or chipc core */
if ((eir = (extifregs_t *) sb_setcore(sbh, SB_EXTIF, 0))) {
pll_type = PLL_TYPE1;
clockcontrol_pci = &eir->clockcontrol_pci;
clockcontrol_m2 = &cc->clockcontrol_m2;
} else if ((cc = (chipcregs_t *) sb_setcore(sbh, SB_CC, 0))) {
- pll_type = R_REG(osh, &cc->capabilities) & CAP_PLL_MASK;
+ /* 5354 chipcommon pll setting can't be changed.
+ * The PMU on power up comes up with the default clk frequency
+ * of 240MHz
+ */
+ if (sb_chip(sbh) == BCM5354_CHIP_ID) {
+ ret = TRUE;
+ goto done;
+ }
+ pll_type = R_REG(osh, &cc->capabilities) & CC_CAP_PLL_MASK;
if (pll_type == PLL_TYPE6) {
clockcontrol_n = NULL;
clockcontrol_sb = NULL;
if (pll_type == PLL_TYPE1) {
/* Keep the current PCI clock if not specified */
if (pciclock == 0) {
- pciclock = sb_clock_rate(pll_type, R_REG(osh, clockcontrol_n),
- R_REG(osh, clockcontrol_pci));
+ pciclock =
+ sb_clock_rate(pll_type, R_REG(osh, clockcontrol_n),
+ R_REG(osh, clockcontrol_pci));
pciclock = (pciclock <= 25000000) ? 25000000 : 33000000;
}
for (i = 0; i < ARRAYSIZE(type1_table); i++) {
ASSERT(type1_table[i].mipsclock ==
sb_clock_rate(pll_type, type1_table[i].n,
- type1_table[i].sb));
+ type1_table[i].sb));
if (type1_table[i].mipsclock > mipsclock)
break;
}
/* Reset */
sb_watchdog(sbh, 1);
- while (1);
+ while (1) ;
} else if (pll_type == PLL_TYPE3) {
/* 5350 */
if (sb_chip(sbh) != BCM5365_CHIP_ID) {
/* No PLL change */
orig_m2 = R_REG(osh, &cc->clockcontrol_m2);
- if ((orig_n == type3_table[i].n) &&
- (orig_m2 == type3_table[i].m2)) {
+ if ((orig_n == type3_table[i].n)
+ && (orig_m2 == type3_table[i].m2)) {
goto done;
}
/* Reset */
sb_watchdog(sbh, 1);
- while (1);
+ while (1) ;
}
} else if ((pll_type == PLL_TYPE2) ||
- (pll_type == PLL_TYPE4) ||
- (pll_type == PLL_TYPE6) ||
- (pll_type == PLL_TYPE7)) {
+ (pll_type == PLL_TYPE4) ||
+ (pll_type == PLL_TYPE6) || (pll_type == PLL_TYPE7)) {
n4m_table_t *table = NULL, *te;
uint tabsz = 0;
orig_mips = R_REG(osh, &cc->clockcontrol_m3);
switch (pll_type) {
- case PLL_TYPE6: {
- uint32 new_mips = 0;
+ case PLL_TYPE6:
+ {
+ uint32 new_mips = 0;
- ret = TRUE;
- if (mipsclock <= SB2MIPS_T6(CC_T6_M1))
- new_mips = CC_T6_MMASK;
+ ret = TRUE;
+ if (mipsclock <= SB2MIPS_T6(CC_T6_M1))
+ new_mips = CC_T6_MMASK;
- if (orig_mips == new_mips)
- goto done;
+ if (orig_mips == new_mips)
+ goto done;
- W_REG(osh, &cc->clockcontrol_m3, new_mips);
- goto end_fill;
- }
+ W_REG(osh, &cc->clockcontrol_m3, new_mips);
+ goto end_fill;
+ }
case PLL_TYPE2:
table = type2_table;
tabsz = ARRAYSIZE(type2_table);
if ((orig_n == table[i].n) &&
(orig_sb == table[i].sb) &&
(orig_pci == table[i].pci33) &&
- (orig_m2 == table[i].m2) &&
- (orig_mips == table[i].m3)) {
+ (orig_m2 == table[i].m2)
+ && (orig_mips == table[i].m3)) {
orig_ratio_parm = table[i].ratio_parm;
orig_ratio_cfg = table[i].ratio_cfg;
break;
/* Search for the closest MIPS clock greater or equal to a preferred value */
for (i = 0; i < tabsz; i++) {
ASSERT(table[i].mipsclock ==
- sb_clock_rate(pll_type, table[i].n, table[i].m3));
- if ((mipsclock <= table[i].mipsclock) &&
- ((sbclock == 0) || (sbclock <= table[i].sbclock)))
+ sb_clock_rate(pll_type, table[i].n,
+ table[i].m3));
+ if ((mipsclock <= table[i].mipsclock)
+ && ((sbclock == 0) || (sbclock <= table[i].sbclock))
+ && ((pciclock == 0)
+ || (pciclock <= table[i].pciclock)))
break;
}
if (i == tabsz) {
if ((orig_n == te->n) &&
(orig_sb == te->sb) &&
(orig_pci == te->pci33) &&
- (orig_m2 == te->m2) &&
- (orig_mips == te->m3))
+ (orig_m2 == te->m2) && (orig_mips == te->m3))
goto done;
/* Set the PLL controls */
/* Preload the code into the cache */
icache_probe(MFC0(C0_CONFIG, 1), &ic_size, &ic_lsize);
if (sb_chip(sbh) == BCM4785_CHIP_ID) {
- start = ((ulong) &&start_fill_4785) & ~(ic_lsize - 1);
- end = ((ulong) &&end_fill_4785 + (ic_lsize - 1)) & ~(ic_lsize - 1);
- }
- else {
- start = ((ulong) &&start_fill) & ~(ic_lsize - 1);
- end = ((ulong) &&end_fill + (ic_lsize - 1)) & ~(ic_lsize - 1);
+ start = ((ulong) && start_fill_4785) & ~(ic_lsize - 1);
+ end = ((ulong)
+ && end_fill_4785 + (ic_lsize - 1)) & ~(ic_lsize -
+ 1);
+ } else {
+ start = ((ulong) && start_fill) & ~(ic_lsize - 1);
+ end = ((ulong)
+ && end_fill + (ic_lsize - 1)) & ~(ic_lsize - 1);
}
while (start < end) {
cache_op(start, Fill_I);
start += ic_lsize;
}
- /* Copy the handler */
- start = (ulong) &handler;
- end = (ulong) &afterhandler;
- dst = KSEG1ADDR(0x180);
- for (i = 0; i < (end - start); i += 4)
- *((ulong *)(dst + i)) = *((ulong *)(start + i));
-
- /* Preload the handler into the cache one line at a time */
- for (i = 0; i < (end - start); i += ic_lsize)
- cache_op(dst + i, Fill_I);
-
- /* Clear BEV bit */
- MTC0(C0_STATUS, 0, MFC0(C0_STATUS, 0) & ~ST0_BEV);
-
- /* Enable interrupts */
- MTC0(C0_STATUS, 0, MFC0(C0_STATUS, 0) | (ALLINTS | ST0_IE));
-
/* 4785 clock freq change procedures */
if (sb_chip(sbh) == BCM4785_CHIP_ID) {
- start_fill_4785:
+ start_fill_4785:
/* Switch to async */
MTC0(C0_BROADCOM, 4, (1 << 22));
*dll_r1 = *dll_r1 | 0xc0000000;
/* Set active cfg */
- MTC0(C0_BROADCOM, 2, MFC0(C0_BROADCOM, 2) | (1 << 3) | 1);
+ MTC0(C0_BROADCOM, 2,
+ MFC0(C0_BROADCOM, 2) | (1 << 3) | 1);
/* Fake soft reset (clock cfg registers not reset) */
MTC0(C0_BROADCOM, 5, MFC0(C0_BROADCOM, 5) | (1 << 2));
/* set watchdog timer */
W_REG(osh, &cc->watchdog, 20);
- (void) R_REG(osh, &cc->chipid);
+ (void)R_REG(osh, &cc->chipid);
/* wait for timer interrupt */
- __asm__ __volatile__(
- ".set\tmips3\n\t"
- "sync\n\t"
- "wait\n\t"
- ".set\tmips0");
- end_fill_4785:
- while (1);
+ __asm__ __volatile__(".set\tmips3\n\t"
+ "sync\n\t" "wait\n\t"
+ ".set\tmips0");
+ end_fill_4785:
+ while (1) ;
}
/* Generic clock freq change procedures */
else {
+ /* Copy the handler */
+ start = (ulong) & handler;
+ end = (ulong) & afterhandler;
+ dst = KSEG1ADDR(0x180);
+ for (i = 0; i < (end - start); i += 4)
+ *((ulong *) (dst + i)) =
+ *((ulong *) (start + i));
+
+ /* Preload the handler into the cache one line at a time */
+ for (i = 0; i < (end - start); i += ic_lsize)
+ cache_op(dst + i, Fill_I);
+
+ /* Clear BEV bit */
+ MTC0(C0_STATUS, 0, MFC0(C0_STATUS, 0) & ~ST0_BEV);
+
+ /* Enable interrupts */
+ MTC0(C0_STATUS, 0,
+ MFC0(C0_STATUS, 0) | (ALLINTS | ST0_IE));
+
/* Enable MIPS timer interrupt */
if (!(mipsr = sb_setcore(sbh, SB_MIPS, 0)) &&
!(mipsr = sb_setcore(sbh, SB_MIPS33, 0)))
ASSERT(mipsr);
W_REG(osh, &mipsr->intmask, 1);
- start_fill:
+ start_fill:
/* step 1, set clock ratios */
MTC0(C0_BROADCOM, 3, te->ratio_parm);
MTC0(C0_BROADCOM, 1, te->ratio_cfg);
/* step 2: program timer intr */
W_REG(osh, &mipsr->timer, 100);
- (void) R_REG(osh, &mipsr->timer);
+ (void)R_REG(osh, &mipsr->timer);
/* step 3, switch to async */
sync_mode = MFC0(C0_BROADCOM, 4);
MTC0(C0_BROADCOM, 2, (1 << 3) | 1);
/* steps 5 & 6 */
- __asm__ __volatile__(
- ".set\tmips3\n\t"
- "wait\n\t"
- ".set\tmips0");
+ __asm__ __volatile__(".set\tmips3\n\t" "wait\n\t"
+ ".set\tmips0");
/* step 7, clear cfg active */
MTC0(C0_BROADCOM, 2, 0);
/* step 8, fake soft reset */
MTC0(C0_BROADCOM, 5, MFC0(C0_BROADCOM, 5) | (1 << 2));
- end_fill:
+ end_fill:
/* set watchdog timer */
W_REG(osh, &cc->watchdog, 20);
- (void) R_REG(osh, &cc->chipid);
+ (void)R_REG(osh, &cc->chipid);
/* wait for timer interrupt */
- __asm__ __volatile__(
- ".set\tmips3\n\t"
- "sync\n\t"
- "wait\n\t"
- ".set\tmips0");
- while (1);
+ __asm__ __volatile__(".set\tmips3\n\t"
+ "sync\n\t" "wait\n\t"
+ ".set\tmips0");
+ while (1) ;
}
}
-done:
+ done:
/* Enable 4785 DLL */
if (sb_chip(sbh) == BCM4785_CHIP_ID) {
uint32 tmp;
*dll_ctrl |= 0x00000080;
/* wait for lock flag to clear */
- while ((*dll_ctrl & 0x2) == 0);
+ while ((*dll_ctrl & 0x2) == 0) ;
/* clear sticky flags (clear on write 1) */
tmp = *dll_ctrl;
return ret;
}
-void
-BCMINITFN(enable_pfc)(uint32 mode)
-{
+void BCMINITFN(enable_pfc) (uint32 mode) {
ulong start, end;
uint ic_size, ic_lsize;
/* enable prefetch cache if available */
if (MFC0(C0_BROADCOM, 0) & BRCM_PFC_AVAIL) {
- start = ((ulong) &&setpfc_start) & ~(ic_lsize - 1);
- end = ((ulong) &&setpfc_end + (ic_lsize - 1)) & ~(ic_lsize - 1);
+ start = ((ulong) && setpfc_start) & ~(ic_lsize - 1);
+ end = ((ulong)
+ && setpfc_end + (ic_lsize - 1)) & ~(ic_lsize - 1);
/* Preload setpfc code into the cache one line at a time */
while (start < end) {
}
/* Now set the pfc */
- setpfc_start:
+ setpfc_start:
/* write range */
*(volatile uint32 *)PFC_CR1 = 0xffff0000;
/* enable */
*(volatile uint32 *)PFC_CR0 = mode;
- setpfc_end:
+ setpfc_end:
/* Compiler foder */
ic_size = 0;
}
}
/* returns the ncdl value to be programmed into sdram_ncdl for calibration */
-uint32
-BCMINITFN(sb_memc_get_ncdl)(sb_t *sbh)
-{
+uint32 BCMINITFN(sb_memc_get_ncdl) (sb_t * sbh) {
osl_t *osh;
sbmemcregs_t *memc;
uint32 ret = 0;
idx = sb_coreidx(sbh);
- memc = (sbmemcregs_t *)sb_setcore(sbh, SB_MEMC, 0);
+ memc = (sbmemcregs_t *) sb_setcore(sbh, SB_MEMC, 0);
if (memc == 0)
goto out;
if (rev > 0)
cd = rd;
else
- cd = (rd == MEMC_CD_THRESHOLD) ? rd : (wr + MEMC_CD_THRESHOLD);
+ cd = (rd ==
+ MEMC_CD_THRESHOLD) ? rd : (wr +
+ MEMC_CD_THRESHOLD);
sm = (misc & MEMC_MISC_SM_MASK) >> MEMC_MISC_SM_SHIFT;
sd = (misc & MEMC_MISC_SD_MASK) >> MEMC_MISC_SD_SHIFT;
ret = (sm << 16) | (sd << 8) | cd;
}
-out:
+ out:
/* switch back to previous core */
sb_setcoreidx(sbh, idx);
return ret;
}
+void hnd_cpu_reset(sb_t * sbh)
+{
+ if (sb_chip(sbh) == BCM4785_CHIP_ID)
+ MTC0(C0_BROADCOM, 4, (1 << 22));
+ sb_watchdog(sbh, 1);
+ if (sb_chip(sbh) == BCM4785_CHIP_ID) {
+ __asm__ __volatile__(".set\tmips3\n\t"
+ "sync\n\t" "wait\n\t" ".set\tmips0");
+ }
+ while (1) ;
+}
+
#if defined(BCMPERFSTATS)
/*
* CP0 Register 25 supports 4 semi-independent 32bit performance counters.
*/
/* enable and start instruction counting */
-void
-hndmips_perf_instrcount_enable()
+void hndmips_perf_cyclecount_enable(void)
{
MTC0(C0_PERFORMANCE, 6, 0x80000200); /* global enable perf counters */
- MTC0(C0_PERFORMANCE, 4,
- 0x8044 | MFC0(C0_PERFORMANCE, 4)); /* enable instruction counting for counter 0 */
- MTC0(C0_PERFORMANCE, 0, 0); /* zero counter zero */
+ MTC0(C0_PERFORMANCE, 4, 0x8048 | MFC0(C0_PERFORMANCE, 4)); /* enable cycles counting for counter 0 */
+ MTC0(C0_PERFORMANCE, 0, 0); /* zero counter zero */
+}
+
+void hndmips_perf_instrcount_enable(void)
+{
+ MTC0(C0_PERFORMANCE, 6, 0x80000200); /* global enable perf counters */
+ MTC0(C0_PERFORMANCE, 4, 0x8044 | MFC0(C0_PERFORMANCE, 4)); /* enable instructions counting for counter 0 */
+ MTC0(C0_PERFORMANCE, 0, 0); /* zero counter zero */
}
/* enable and start I$ hit and I$ miss counting */
-void
-hndmips_perf_icachecount_enable(void)
+void hndmips_perf_icachecount_enable(void)
{
MTC0(C0_PERFORMANCE, 6, 0x80000218); /* enable I$ counting */
MTC0(C0_PERFORMANCE, 4, 0x80148018); /* count I$ hits in cntr 0 and misses in cntr 1 */
- MTC0(C0_PERFORMANCE, 0, 0); /* zero counter 0 - # I$ hits */
- MTC0(C0_PERFORMANCE, 1, 0); /* zero counter 1 - # I$ misses */
+ MTC0(C0_PERFORMANCE, 0, 0); /* zero counter 0 - # I$ hits */
+ MTC0(C0_PERFORMANCE, 1, 0); /* zero counter 1 - # I$ misses */
}
/* enable and start D$ hit and I$ miss counting */
-void
-hndmips_perf_dcachecount_enable(void)
+void hndmips_perf_dcachecount_enable(void)
{
MTC0(C0_PERFORMANCE, 6, 0x80000211); /* enable D$ counting */
MTC0(C0_PERFORMANCE, 4, 0x80248028); /* count D$ hits in cntr 0 and misses in cntr 1 */
- MTC0(C0_PERFORMANCE, 0, 0); /* zero counter 0 - # D$ hits */
- MTC0(C0_PERFORMANCE, 1, 0); /* zero counter 1 - # D$ misses */
+ MTC0(C0_PERFORMANCE, 0, 0); /* zero counter 0 - # D$ hits */
+ MTC0(C0_PERFORMANCE, 1, 0); /* zero counter 1 - # D$ misses */
}
-void
-hndmips_perf_icache_miss_enable()
+void hndmips_perf_icache_miss_enable()
{
- MTC0(C0_PERFORMANCE, 4,
- 0x80140000 | MFC0(C0_PERFORMANCE, 4)); /* enable cache misses counting for counter 1 */
- MTC0(C0_PERFORMANCE, 1, 0); /* zero counter one */
+ MTC0(C0_PERFORMANCE, 4, 0x80140000 | MFC0(C0_PERFORMANCE, 4)); /* enable cache misses counting for counter 1 */
+ MTC0(C0_PERFORMANCE, 1, 0); /* zero counter one */
}
-
-void
-hndmips_perf_icache_hit_enable()
+void hndmips_perf_icache_hit_enable()
{
MTC0(C0_PERFORMANCE, 5, 0x8018 | MFC0(C0_PERFORMANCE, 5));
/* enable cache hits counting for counter 2 */
- MTC0(C0_PERFORMANCE, 2, 0); /* zero counter 2 */
+ MTC0(C0_PERFORMANCE, 2, 0); /* zero counter 2 */
}
-uint32
-hndmips_perf_read_instrcount()
+uint32 hndmips_perf_read_instrcount()
{
return -(long)(MFC0(C0_PERFORMANCE, 0));
}
-uint32
-hndmips_perf_read_cache_miss()
+uint32 hndmips_perf_read_cache_miss()
{
return -(long)(MFC0(C0_PERFORMANCE, 1));
}
-uint32
-hndmips_perf_read_cache_hit()
+uint32 hndmips_perf_read_cache_hit()
{
return -(long)(MFC0(C0_PERFORMANCE, 2));
}
-#endif /* BCMINTERNAL | BCMPERFSTATS */
+#endif
#include <pcicfg.h>
#include <bcmdevs.h>
#include <sbconfig.h>
-#include <bcmutils.h>
#include <sbutils.h>
#include <sbpci.h>
#include <bcmendian.h>
#define PCI_MSG(args) printf args
#else
#define PCI_MSG(args)
-#endif /* BCMDBG_PCI */
+#endif /* BCMDBG_PCI */
/* Can free sbpci_init() memory after boot */
#ifndef linux
/* Emulated configuration space */
typedef struct {
- int n;
- uint size0;
- uint size1;
- uint size2;
- uint size3;
+ int n;
+ uint size0;
+ uint size1;
+ uint size2;
+ uint size3;
} sb_bar_cfg_t;
static pci_config_regs sb_config_regs[SB_MAXCORES];
static sb_bar_cfg_t sb_bar_cfg[SB_MAXCORES];
*/
/* Assume one-hot slot wiring */
-#define PCI_SLOT_MAX 16 /* Max. PCI Slots */
+#define PCI_SLOT_MAX 16 /* Max. PCI Slots */
-static uint32
-config_cmd(sb_t *sbh, uint bus, uint dev, uint func, uint off)
+static uint32 config_cmd(sb_t * sbh, uint bus, uint dev, uint func, uint off)
{
uint coreidx;
sbpciregs_t *regs;
uint32 win;
/* Slide the PCI window to the appropriate slot */
- win = (SBTOPCI_CFG0 | ((1 << (dev + PCI_SLOTAD_MAP)) & SBTOPCI1_MASK));
+ win =
+ (SBTOPCI_CFG0 |
+ ((1 << (dev + PCI_SLOTAD_MAP)) & SBTOPCI1_MASK));
W_REG(osh, ®s->sbtopci1, win);
addr = SB_PCI_CFG |
- ((1 << (dev + PCI_SLOTAD_MAP)) & ~SBTOPCI1_MASK) |
- (func << PCICFG_FUN_SHIFT) |
- (off & ~3);
+ ((1 << (dev + PCI_SLOTAD_MAP)) & ~SBTOPCI1_MASK) |
+ (func << PCICFG_FUN_SHIFT) | (off & ~3);
}
} else {
/* Type 1 transaction */
W_REG(osh, ®s->sbtopci1, SBTOPCI_CFG1);
addr = SB_PCI_CFG |
- (bus << PCICFG_BUS_SHIFT) |
- (dev << PCICFG_SLOT_SHIFT) |
- (func << PCICFG_FUN_SHIFT) |
- (off & ~3);
+ (bus << PCICFG_BUS_SHIFT) |
+ (dev << PCICFG_SLOT_SHIFT) |
+ (func << PCICFG_FUN_SHIFT) | (off & ~3);
}
sb_setcoreidx(sbh, coreidx);
* the register address where value in 'val' is read.
*/
static bool
-sb_pcihb_read_config(sb_t *sbh, uint bus, uint dev, uint func, uint off,
- uint32 **addr, uint32 *val)
+sb_pcihb_read_config(sb_t * sbh, uint bus, uint dev, uint func, uint off,
+ uint32 ** addr, uint32 * val)
{
sbpciregs_t *regs;
osl_t *osh;
/* read pci config when core rev >= 8 */
coreidx = sb_coreidx(sbh);
- regs = (sbpciregs_t *)sb_setcore(sbh, SB_PCI, 0);
+ regs = (sbpciregs_t *) sb_setcore(sbh, SB_PCI, 0);
if (regs && sb_corerev(sbh) >= PCI_HBSBCFG_REV) {
- *addr = (uint32 *)®s->pcicfg[func][off >> 2];
+ *addr = (uint32 *) & regs->pcicfg[func][off >> 2];
*val = R_REG(osh, *addr);
ret = TRUE;
}
}
int
-extpci_read_config(sb_t *sbh, uint bus, uint dev, uint func, uint off, void *buf, int len)
+extpci_read_config(sb_t * sbh, uint bus, uint dev, uint func, uint off,
+ void *buf, int len)
{
uint32 addr = 0, *reg = NULL, val;
int ret = 0;
/*
* Set value to -1 when:
- * flag 'pci_disabled' is true;
- * value of 'addr' is zero;
- * REG_MAP() fails;
- * BUSPROBE() fails;
+ * flag 'pci_disabled' is true;
+ * value of 'addr' is zero;
+ * REG_MAP() fails;
+ * BUSPROBE() fails;
*/
if (pci_disabled)
val = 0xffffffff;
else if (bus == 1 && dev == pci_hbslot && func == 0 &&
- sb_pcihb_read_config(sbh, bus, dev, func, off, ®, &val))
- ;
+ sb_pcihb_read_config(sbh, bus, dev, func, off, ®, &val)) ;
else if (((addr = config_cmd(sbh, bus, dev, func, off)) == 0) ||
- ((reg = (uint32 *)REG_MAP(addr, len)) == 0) ||
- (BUSPROBE(val, reg) != 0))
+ ((reg = (uint32 *) REG_MAP(addr, len)) == 0) ||
+ (BUSPROBE(val, reg) != 0))
val = 0xffffffff;
PCI_MSG(("%s: 0x%x <= 0x%p(0x%x), len %d, off 0x%x, buf 0x%p\n",
- __FUNCTION__, val, reg, addr, len, off, buf));
+ __FUNCTION__, val, reg, addr, len, off, buf));
val >>= 8 * (off & 3);
if (len == 4)
}
int
-extpci_write_config(sb_t *sbh, uint bus, uint dev, uint func, uint off, void *buf, int len)
+extpci_write_config(sb_t * sbh, uint bus, uint dev, uint func, uint off,
+ void *buf, int len)
{
osl_t *osh;
uint32 addr = 0, *reg = NULL, val;
/*
* Ignore write attempt when:
- * flag 'pci_disabled' is true;
- * value of 'addr' is zero;
- * REG_MAP() fails;
- * BUSPROBE() fails;
+ * flag 'pci_disabled' is true;
+ * value of 'addr' is zero;
+ * REG_MAP() fails;
+ * BUSPROBE() fails;
*/
if (pci_disabled)
return 0;
else if (bus == 1 && dev == pci_hbslot && func == 0 &&
- sb_pcihb_read_config(sbh, bus, dev, func, off, ®, &val))
- ;
+ sb_pcihb_read_config(sbh, bus, dev, func, off, ®, &val)) ;
else if (((addr = config_cmd(sbh, bus, dev, func, off)) == 0) ||
- ((reg = (uint32 *) REG_MAP(addr, len)) == 0) ||
- (BUSPROBE(val, reg) != 0))
+ ((reg = (uint32 *) REG_MAP(addr, len)) == 0) ||
+ (BUSPROBE(val, reg) != 0))
goto done;
if (len == 4)
W_REG(osh, reg, val);
-done:
+ done:
if (reg && addr)
REG_UNMAP(reg);
/* Sync the emulation registers and the real PCI config registers. */
static void
-sb_pcid_read_config(sb_t *sbh, uint coreidx, sb_pci_cfg_t *cfg,
- uint off, uint len)
+sb_pcid_read_config(sb_t * sbh, uint coreidx, sb_pci_cfg_t * cfg,
+ uint off, uint len)
{
osl_t *osh;
uint oldidx;
sb_setcoreidx(sbh, coreidx);
if (sb_iscoreup(sbh)) {
if (len == 4)
- *(uint32 *)((ulong)cfg->emu + off) =
- htol32(R_REG(osh, (uint32 *)((ulong)cfg->pci + off)));
+ *(uint32 *) ((ulong) cfg->emu + off) =
+ htol32(R_REG
+ (osh, (uint32 *) ((ulong) cfg->pci + off)));
else if (len == 2)
- *(uint16 *)((ulong)cfg->emu + off) =
- htol16(R_REG(osh, (uint16 *)((ulong)cfg->pci + off)));
+ *(uint16 *) ((ulong) cfg->emu + off) =
+ htol16(R_REG
+ (osh, (uint16 *) ((ulong) cfg->pci + off)));
else if (len == 1)
- *(uint8 *)((ulong)cfg->emu + off) =
- R_REG(osh, (uint8 *)((ulong)cfg->pci + off));
+ *(uint8 *) ((ulong) cfg->emu + off) =
+ R_REG(osh, (uint8 *) ((ulong) cfg->pci + off));
}
sb_setcoreidx(sbh, oldidx);
}
static void
-sb_pcid_write_config(sb_t *sbh, uint coreidx, sb_pci_cfg_t *cfg,
- uint off, uint len)
+sb_pcid_write_config(sb_t * sbh, uint coreidx, sb_pci_cfg_t * cfg,
+ uint off, uint len)
{
osl_t *osh;
uint oldidx;
sb_setcoreidx(sbh, coreidx);
if (sb_iscoreup(sbh)) {
if (len == 4)
- W_REG(osh, (uint32 *)((ulong)cfg->pci + off),
- ltoh32(*(uint32 *)((ulong)cfg->emu + off)));
+ W_REG(osh, (uint32 *) ((ulong) cfg->pci + off),
+ ltoh32(*(uint32 *) ((ulong) cfg->emu + off)));
else if (len == 2)
- W_REG(osh, (uint16 *)((ulong)cfg->pci + off),
- ltoh16(*(uint16 *)((ulong)cfg->emu + off)));
+ W_REG(osh, (uint16 *) ((ulong) cfg->pci + off),
+ ltoh16(*(uint16 *) ((ulong) cfg->emu + off)));
else if (len == 1)
- W_REG(osh, (uint8 *)((ulong)cfg->pci + off),
- *(uint8 *)((ulong)cfg->emu + off));
+ W_REG(osh, (uint8 *) ((ulong) cfg->pci + off),
+ *(uint8 *) ((ulong) cfg->emu + off));
}
sb_setcoreidx(sbh, oldidx);
}
* Functions for accessing translated SB configuration space
*/
static int
-sb_read_config(sb_t *sbh, uint bus, uint dev, uint func, uint off, void *buf, int len)
+sb_read_config(sb_t * sbh, uint bus, uint dev, uint func, uint off, void *buf,
+ int len)
{
pci_config_regs *cfg;
- if (dev >= SB_MAXCORES || func >= MAXFUNCS || (off + len) > sizeof(pci_config_regs))
+ if (dev >= SB_MAXCORES || func >= MAXFUNCS
+ || (off + len) > sizeof(pci_config_regs))
return -1;
cfg = sb_pci_cfg[dev][func].emu;
ASSERT(ISALIGNED(off, len));
- ASSERT(ISALIGNED((uintptr)buf, len));
+ ASSERT(ISALIGNED((uintptr) buf, len));
/* use special config space if the device does not exist */
if (!cfg)
sb_pcid_read_config(sbh, dev, &sb_pci_cfg[dev][func], off, len);
if (len == 4)
- *((uint32 *) buf) = ltoh32(*((uint32 *)((ulong) cfg + off)));
+ *((uint32 *) buf) = ltoh32(*((uint32 *) ((ulong) cfg + off)));
else if (len == 2)
- *((uint16 *) buf) = ltoh16(*((uint16 *)((ulong) cfg + off)));
+ *((uint16 *) buf) = ltoh16(*((uint16 *) ((ulong) cfg + off)));
else if (len == 1)
- *((uint8 *) buf) = *((uint8 *)((ulong) cfg + off));
+ *((uint8 *) buf) = *((uint8 *) ((ulong) cfg + off));
else
return -1;
}
static int
-sb_write_config(sb_t *sbh, uint bus, uint dev, uint func, uint off, void *buf, int len)
+sb_write_config(sb_t * sbh, uint bus, uint dev, uint func, uint off, void *buf,
+ int len)
{
uint coreidx;
void *regs;
osl_t *osh;
sb_bar_cfg_t *bar;
- if (dev >= SB_MAXCORES || func >= MAXFUNCS || (off + len) > sizeof(pci_config_regs))
+ if (dev >= SB_MAXCORES || func >= MAXFUNCS
+ || (off + len) > sizeof(pci_config_regs))
return -1;
cfg = sb_pci_cfg[dev][func].emu;
if (!cfg)
return -1;
ASSERT(ISALIGNED(off, len));
- ASSERT(ISALIGNED((uintptr)buf, len));
+ ASSERT(ISALIGNED((uintptr) buf, len));
osh = sb_osh(sbh);
/* Highest numbered address match register */
if (off == OFFSETOF(pci_config_regs, base[0]))
cfg->base[0] = ~(bar->size0 - 1);
- else if (off == OFFSETOF(pci_config_regs, base[1]) && bar->n >= 1)
+ else if (off == OFFSETOF(pci_config_regs, base[1])
+ && bar->n >= 1)
cfg->base[1] = ~(bar->size1 - 1);
- else if (off == OFFSETOF(pci_config_regs, base[2]) && bar->n >= 2)
+ else if (off == OFFSETOF(pci_config_regs, base[2])
+ && bar->n >= 2)
cfg->base[2] = ~(bar->size2 - 1);
- else if (off == OFFSETOF(pci_config_regs, base[3]) && bar->n >= 3)
+ else if (off == OFFSETOF(pci_config_regs, base[3])
+ && bar->n >= 3)
cfg->base[3] = ~(bar->size3 - 1);
}
sb_setcoreidx(sbh, coreidx);
- }
- else if (len == 4)
- *((uint32 *)((ulong) cfg + off)) = htol32(*((uint32 *) buf));
+ } else if (len == 4)
+ *((uint32 *) ((ulong) cfg + off)) = htol32(*((uint32 *) buf));
else if (len == 2)
- *((uint16 *)((ulong) cfg + off)) = htol16(*((uint16 *) buf));
+ *((uint16 *) ((ulong) cfg + off)) = htol16(*((uint16 *) buf));
else if (len == 1)
- *((uint8 *)((ulong) cfg + off)) = *((uint8 *) buf);
+ *((uint8 *) ((ulong) cfg + off)) = *((uint8 *) buf);
else
return -1;
/* sync emulation with real PCI config if necessary */
if (sb_pci_cfg[dev][func].pci)
- sb_pcid_write_config(sbh, dev, &sb_pci_cfg[dev][func], off, len);
+ sb_pcid_write_config(sbh, dev, &sb_pci_cfg[dev][func], off,
+ len);
return 0;
}
int
-sbpci_read_config(sb_t *sbh, uint bus, uint dev, uint func, uint off, void *buf, int len)
+sbpci_read_config(sb_t * sbh, uint bus, uint dev, uint func, uint off,
+ void *buf, int len)
{
if (bus == 0)
return sb_read_config(sbh, bus, dev, func, off, buf, len);
}
int
-sbpci_write_config(sb_t *sbh, uint bus, uint dev, uint func, uint off, void *buf, int len)
+sbpci_write_config(sb_t * sbh, uint bus, uint dev, uint func, uint off,
+ void *buf, int len)
{
if (bus == 0)
return sb_write_config(sbh, bus, dev, func, off, buf, len);
return extpci_write_config(sbh, bus, dev, func, off, buf, len);
}
-void
-sbpci_ban(uint16 core)
+void sbpci_ban(uint16 core)
{
if (pci_banned < ARRAYSIZE(pci_ban))
pci_ban[pci_banned++] = core;
* Otherwise return -1 to indicate there is no PCI core and return 1
* to indicate PCI core is disabled.
*/
-int __init
-sbpci_init_pci(sb_t *sbh)
+int __init sbpci_init_pci(sb_t * sbh)
{
uint chip, chiprev, chippkg, host;
uint32 boardflags;
if ((chip == 0x4310) && (chiprev == 0))
pci_disabled = TRUE;
-
- sb = (sbconfig_t *)((ulong) pci + SBCONFIGOFF);
+
+ sb = (sbconfig_t *) ((ulong) pci + SBCONFIGOFF);
boardflags = (uint32) getintvar(NULL, "boardflags");
*/
if (((chip == BCM4712_CHIP_ID) &&
((chippkg == BCM4712SMALL_PKG_ID) ||
- (chippkg == BCM4712MID_PKG_ID))) ||
- (boardflags & BFL_NOPCI))
+ (chippkg == BCM4712MID_PKG_ID))) || (boardflags & BFL_NOPCI))
pci_disabled = TRUE;
/* Enable the core */
}
/* Reset the external PCI bus and enable the clock */
- W_REG(osh, &pci->control, 0x5); /* enable the tristate drivers */
- W_REG(osh, &pci->control, 0xd); /* enable the PCI clock */
- OSL_DELAY(150); /* delay > 100 us */
- W_REG(osh, &pci->control, 0xf); /* deassert PCI reset */
+ W_REG(osh, &pci->control, 0x5); /* enable the tristate drivers */
+ W_REG(osh, &pci->control, 0xd); /* enable the PCI clock */
+ OSL_DELAY(150); /* delay > 100 us */
+ W_REG(osh, &pci->control, 0xf); /* deassert PCI reset */
/* Use internal arbiter and park REQ/GRNT at external master 0 */
W_REG(osh, &pci->arbcontrol, PCI_INT_ARB);
- OSL_DELAY(1); /* delay 1 us */
+ OSL_DELAY(1); /* delay 1 us */
if (sb_corerev(sbh) >= 8) {
val = getintvar(NULL, "parkid");
ASSERT(val <= PCI_PARKID_LAST);
/* GPIO 1 resets the CardBus device on bcm94710ap */
sb_gpioout(sbh, 1, 1, GPIO_DRV_PRIORITY);
sb_gpioouten(sbh, 1, 1, GPIO_DRV_PRIORITY);
- W_REG(osh, &pci->sprom[0], R_REG(osh, &pci->sprom[0]) | 0x400);
+ W_REG(osh, &pci->sprom[0],
+ R_REG(osh, &pci->sprom[0]) | 0x400);
}
/* 64 MB I/O access window */
/* Host bridge slot # nvram overwrite */
if ((hbslot = nvram_get("pcihbslot"))) {
- pci_hbslot = bcm_strtoul(hbslot, NULL, 0);
+ pci_hbslot = simple_strtoul(hbslot, NULL, 0);
ASSERT(pci_hbslot < PCI_MAX_DEVICES);
}
/* Enable PCI bridge BAR0 prefetch and burst */
val = 6;
- sbpci_write_config(sbh, 1, pci_hbslot, 0, PCI_CFG_CMD, &val, sizeof(val));
+ sbpci_write_config(sbh, 1, pci_hbslot, 0, PCI_CFG_CMD, &val,
+ sizeof(val));
/* Enable PCI interrupts */
W_REG(osh, &pci->intmask, PCI_INTA);
* Get the PCI region address and size information.
*/
static void __init
-sbpci_init_regions(sb_t *sbh, uint func, pci_config_regs *cfg, sb_bar_cfg_t *bar)
+sbpci_init_regions(sb_t * sbh, uint func, pci_config_regs * cfg,
+ sb_bar_cfg_t * bar)
{
osl_t *osh;
uint16 coreid;
sbconfig_t *sb;
uint32 base;
- osh = sb_osh(sbh);
- coreid = sb_coreid(sbh);
- regs = sb_coreregs(sbh);
- sb = (sbconfig_t *)((ulong) regs + SBCONFIGOFF);
+ osh = sb_osh(sbh);
+ coreid = sb_coreid(sbh);
+ regs = sb_coreregs(sbh);
+ sb = (sbconfig_t *) ((ulong) regs + SBCONFIGOFF);
switch (coreid) {
case SB_USB20H:
base = htol32(sb_base(R_REG(osh, &sb->sbadmatch0)));
- cfg->base[0] = func == 0 ? base : base + 0x800; /* OHCI/EHCI */
+ cfg->base[0] = func == 0 ? base : base + 0x800; /* OHCI/EHCI */
cfg->base[1] = 0;
cfg->base[2] = 0;
cfg->base[3] = 0;
cfg->base[4] = 0;
cfg->base[5] = 0;
- bar->n = 1;
- bar->size0 = func == 0 ? 0x200 : 0x100; /* OHCI/EHCI */
- bar->size1 = 0;
- bar->size2 = 0;
- bar->size3 = 0;
+ bar->n = 1;
+ bar->size0 = func == 0 ? 0x200 : 0x100; /* OHCI/EHCI */
+ bar->size1 = 0;
+ bar->size2 = 0;
+ bar->size3 = 0;
break;
default:
cfg->base[0] = htol32(sb_base(R_REG(osh, &sb->sbadmatch0)));
cfg->base[3] = htol32(sb_base(R_REG(osh, &sb->sbadmatch3)));
cfg->base[4] = 0;
cfg->base[5] = 0;
- bar->n = (R_REG(osh, &sb->sbidlow) & SBIDL_AR_MASK) >> SBIDL_AR_SHIFT;
- bar->size0 = sb_size(R_REG(osh, &sb->sbadmatch0));
- bar->size1 = sb_size(R_REG(osh, &sb->sbadmatch1));
- bar->size2 = sb_size(R_REG(osh, &sb->sbadmatch2));
- bar->size3 = sb_size(R_REG(osh, &sb->sbadmatch3));
+ bar->n =
+ (R_REG(osh, &sb->sbidlow) & SBIDL_AR_MASK) >>
+ SBIDL_AR_SHIFT;
+ bar->size0 = sb_size(R_REG(osh, &sb->sbadmatch0));
+ bar->size1 = sb_size(R_REG(osh, &sb->sbadmatch1));
+ bar->size2 = sb_size(R_REG(osh, &sb->sbadmatch2));
+ bar->size3 = sb_size(R_REG(osh, &sb->sbadmatch3));
break;
}
}
* Construct PCI config spaces for SB cores so that they
* can be accessed as if they were PCI devices.
*/
-static void __init
-sbpci_init_cores(sb_t *sbh)
+static void __init sbpci_init_cores(sb_t * sbh)
{
uint chiprev, coreidx, i;
sbconfig_t *sb;
memset(&sb_pci_null, -1, sizeof(sb_pci_null));
cfg = sb_config_regs;
bar = sb_bar_cfg;
- for (dev = 0; dev < SB_MAXCORES; dev ++) {
+ for (dev = 0; dev < SB_MAXCORES; dev++) {
/* Check if the core exists */
if (!(regs = sb_setcoreidx(sbh, dev)))
continue;
- sb = (sbconfig_t *)((ulong) regs + SBCONFIGOFF);
+ sb = (sbconfig_t *) ((ulong) regs + SBCONFIGOFF);
/* Check if this core is banned */
coreid = sb_coreid(sbh);
}
/* Convert core id to pci id */
- if (sb_corepciid(sbh, func, &vendor, &device, &class, &subclass,
- &progif, &header))
+ if (sb_corepciid
+ (sbh, func, &vendor, &device, &class, &subclass,
+ &progif, &header))
continue;
/*
*/
switch (device) {
case BCM47XX_GIGETH_ID:
- pci = (pci_config_regs *)((uint32)regs + 0x800);
+ pci =
+ (pci_config_regs *) ((uint32) regs + 0x800);
break;
case BCM47XX_SATAXOR_ID:
- pci = (pci_config_regs *)((uint32)regs + 0x400);
+ pci =
+ (pci_config_regs *) ((uint32) regs + 0x400);
break;
case BCM47XX_ATA100_ID:
- pci = (pci_config_regs *)((uint32)regs + 0x800);
+ pci =
+ (pci_config_regs *) ((uint32) regs + 0x800);
break;
default:
pci = NULL;
cfg->header_type = header;
sbpci_init_regions(sbh, func, cfg, bar);
/* Save core interrupt flag */
- cfg->int_pin = R_REG(osh, &sb->sbtpsflag) & SBTPS_NUM0_MASK;
+ cfg->int_pin =
+ R_REG(osh, &sb->sbtpsflag) & SBTPS_NUM0_MASK;
/* Save core interrupt assignment */
cfg->int_line = sb_irq(sbh);
/* Indicate there is no SROM */
- *((uint32 *) &cfg->sprom_control) = 0xffffffff;
+ *((uint32 *) & cfg->sprom_control) = 0xffffffff;
/* Point to the PCI config spaces */
sb_pci_cfg[dev][func].emu = cfg;
sb_pci_cfg[dev][func].pci = pci;
sb_pci_cfg[dev][func].bar = bar;
- cfg ++;
- bar ++;
+ cfg++;
+ bar++;
}
}
-done:
+ done:
sb_setcoreidx(sbh, coreidx);
}
* Must propagate sbpci_init_pci() return value to the caller to let
* them know the PCI core initialization status.
*/
-int __init
-sbpci_init(sb_t *sbh)
+int __init sbpci_init(sb_t * sbh)
{
int status = sbpci_init_pci(sbh);
sbpci_init_cores(sbh);
return status;
}
-
* Misc utility routines for accessing chip-specific features
* of the SiliconBackplane-based Broadcom chips.
*
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
* All Rights Reserved.
*
* THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
* KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
* SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
- * $Id: sbutils.c,v 1.10 2006/04/08 07:12:42 honor Exp $
+ * $Id$
*/
#include <typedefs.h>
#include <bcmdefs.h>
#include <osl.h>
-#include <bcmutils.h>
#include <sbutils.h>
#include <bcmdevs.h>
#include <sbconfig.h>
#include <sbchipc.h>
+#include <sbextif.h>
#include <sbpci.h>
#include <sbpcie.h>
#include <pcicfg.h>
#include <sbpcmcia.h>
-#include <sbextif.h>
#include <sbsocram.h>
+#include <bcmnvram.h>
#include <bcmsrom.h>
-#ifdef __mips__
-#include <mipsinc.h>
-#endif /* __mips__ */
+#include <hndpmu.h>
/* debug/trace */
#define SB_ERROR(args)
-typedef uint32 (*sb_intrsoff_t)(void *intr_arg);
-typedef void (*sb_intrsrestore_t)(void *intr_arg, uint32 arg);
-typedef bool (*sb_intrsenabled_t)(void *intr_arg);
+#ifdef BCMDBG
+#define SB_MSG(args) printf args
+#else
+#define SB_MSG(args)
+#endif /* BCMDBG */
+
+typedef uint32(*sb_intrsoff_t) (void *intr_arg);
+typedef void (*sb_intrsrestore_t) (void *intr_arg, uint32 arg);
+typedef bool(*sb_intrsenabled_t) (void *intr_arg);
+
+typedef struct gpioh_item {
+ void *arg;
+ bool level;
+ gpio_handler_t handler;
+ uint32 event;
+ struct gpioh_item *next;
+} gpioh_item_t;
/* misc sb info needed by some of the routines */
typedef struct sb_info {
- struct sb_pub sb; /* back plane public state (must be first field) */
+ struct sb_pub sb; /* back plane public state (must be first field) */
+
+ void *osh; /* osl os handle */
+ void *sdh; /* bcmsdh handle */
+
+ void *curmap; /* current regs va */
+ void *regs[SB_MAXCORES]; /* other regs va */
+
+ uint curidx; /* current core index */
+ uint dev_coreid; /* the core provides driver functions */
- void *osh; /* osl os handle */
- void *sdh; /* bcmsdh handle */
+ bool memseg; /* flag to toggle MEM_SEG register */
- void *curmap; /* current regs va */
- void *regs[SB_MAXCORES]; /* other regs va */
+ uint gpioidx; /* gpio control core index */
+ uint gpioid; /* gpio control coretype */
- uint curidx; /* current core index */
- uint dev_coreid; /* the core provides driver functions */
+ uint numcores; /* # discovered cores */
+ uint coreid[SB_MAXCORES]; /* id of each core */
- bool memseg; /* flag to toggle MEM_SEG register */
+ void *intr_arg; /* interrupt callback function arg */
+ sb_intrsoff_t intrsoff_fn; /* turns chip interrupts off */
+ sb_intrsrestore_t intrsrestore_fn; /* restore chip interrupts */
+ sb_intrsenabled_t intrsenabled_fn; /* check if interrupts are enabled */
- uint gpioidx; /* gpio control core index */
- uint gpioid; /* gpio control coretype */
+ uint8 pciecap_lcreg_offset; /* PCIE capability LCreg offset in the config space */
+ bool pr42767_war;
+ uint8 pcie_polarity;
+ bool pcie_war_ovr; /* Override ASPM/Clkreq settings */
- uint numcores; /* # discovered cores */
- uint coreid[SB_MAXCORES]; /* id of each core */
+ uint8 pmecap_offset; /* PM Capability offset in the config space */
+ bool pmecap; /* Capable of generating PME */
- void *intr_arg; /* interrupt callback function arg */
- sb_intrsoff_t intrsoff_fn; /* turns chip interrupts off */
- sb_intrsrestore_t intrsrestore_fn; /* restore chip interrupts */
- sb_intrsenabled_t intrsenabled_fn; /* check if interrupts are enabled */
+ gpioh_item_t *gpioh_head; /* GPIO event handlers list */
+ char *vars;
+ uint varsz;
} sb_info_t;
/* local prototypes */
-static sb_info_t * sb_doattach(sb_info_t *si, uint devid, osl_t *osh, void *regs,
- uint bustype, void *sdh, char **vars, uint *varsz);
-static void sb_scan(sb_info_t *si);
-static uint sb_corereg(sb_info_t *si, uint coreidx, uint regoff, uint mask, uint val);
-static uint _sb_coreidx(sb_info_t *si);
-static uint sb_findcoreidx(sb_info_t *si, uint coreid, uint coreunit);
+static sb_info_t *sb_doattach(sb_info_t * si, uint devid, osl_t * osh,
+ void *regs, uint bustype, void *sdh,
+ char **vars, uint * varsz);
+static void sb_scan(sb_info_t * si);
+static uint _sb_coreidx(sb_info_t * si);
static uint sb_pcidev2chip(uint pcidev);
static uint sb_chip2numcores(uint chip);
-static bool sb_ispcie(sb_info_t *si);
-static bool sb_find_pci_capability(sb_info_t *si, uint8 req_cap_id, uchar *buf, uint32 *buflen);
-static int sb_pci_fixcfg(sb_info_t *si);
-
+static bool sb_ispcie(sb_info_t * si);
+static uint8 sb_find_pci_capability(sb_info_t * si, uint8 req_cap_id,
+ uchar * buf, uint32 * buflen);
+static int sb_pci_fixcfg(sb_info_t * si);
/* routines to access mdio slave device registers */
-static int sb_pcie_mdiowrite(sb_info_t *si, uint physmedia, uint readdr, uint val);
-static void sb_war30841(sb_info_t *si);
+static int sb_pcie_mdiowrite(sb_info_t * si, uint physmedia, uint readdr,
+ uint val);
+static int sb_pcie_mdioread(sb_info_t * si, uint physmedia, uint readdr,
+ uint * ret_val);
+
+/* dev path concatenation util */
+static char *sb_devpathvar(sb_t * sbh, char *var, int len, const char *name);
+
+/* WARs */
+static void sb_war43448(sb_t * sbh);
+static void sb_war43448_aspm(sb_t * sbh);
+static void sb_war32414_forceHT(sb_t * sbh, bool forceHT);
+static void sb_war30841(sb_info_t * si);
+static void sb_war42767(sb_t * sbh);
+static void sb_war42767_clkreq(sb_t * sbh);
/* delay needed between the mdio control/ mdiodata register data access */
#define PR28829_DELAY() OSL_DELAY(10)
/* global variable to indicate reservation/release of gpio's */
static uint32 sb_gpioreservation = 0;
-#define SB_INFO(sbh) (sb_info_t*)sbh
+/* global flag to prevent shared resources from being initialized multiple times in sb_attach() */
+static bool sb_onetimeinit = FALSE;
+
+#define SB_INFO(sbh) (sb_info_t*)(uintptr)sbh
#define SET_SBREG(si, r, mask, val) \
W_SBREG((si), (r), ((R_SBREG((si), (r)) & ~(mask)) | (val)))
-#define GOODCOREADDR(x) (((x) >= SB_ENUM_BASE) && ((x) <= SB_ENUM_LIM) && \
+#define GOODCOREADDR(x) (((x) >= SB_ENUM_BASE) && ((x) <= SB_ENUM_LIM) && \
ISALIGNED((x), SB_CORE_SIZE))
#define GOODREGS(regs) ((regs) && ISALIGNED((uintptr)(regs), SB_CORE_SIZE))
#define REGS2SB(va) (sbconfig_t*) ((int8*)(va) + SBCONFIGOFF)
+#define BADCOREADDR 0
#define GOODIDX(idx) (((uint)idx) < SB_MAXCORES)
#define BADIDX (SB_MAXCORES+1)
-#define NOREV -1 /* Invalid rev */
+#define NOREV -1 /* Invalid rev */
#define PCI(si) ((BUSTYPE(si->sb.bustype) == PCI_BUS) && (si->sb.buscoretype == SB_PCI))
#define PCIE(si) ((BUSTYPE(si->sb.bustype) == PCI_BUS) && (si->sb.buscoretype == SB_PCIE))
+#define PCMCIA(si) ((BUSTYPE(si->sb.bustype) == PCMCIA_BUS) && (si->memseg == TRUE))
/* sonicsrev */
#define SONICS_2_2 (SBIDL_RV_2_2 >> SBIDL_RV_SHIFT)
(*(si)->intrsrestore_fn)((si)->intr_arg, intr_val); }
/* dynamic clock control defines */
-#define LPOMINFREQ 25000 /* low power oscillator min */
-#define LPOMAXFREQ 43000 /* low power oscillator max */
+#define LPOMINFREQ 25000 /* low power oscillator min */
+#define LPOMAXFREQ 43000 /* low power oscillator max */
#define XTALMINFREQ 19800000 /* 20 MHz - 1% */
#define XTALMAXFREQ 20200000 /* 20 MHz + 1% */
#define PCIMINFREQ 25000000 /* 25 MHz */
#define PCIMAXFREQ 34000000 /* 33 MHz + fudge */
-#define ILP_DIV_5MHZ 0 /* ILP = 5 MHz */
-#define ILP_DIV_1MHZ 4 /* ILP = 1 MHz */
-
-/* different register spaces to access thr'u pcie indirect access */
-#define PCIE_CONFIGREGS 1 /* Access to config space */
-#define PCIE_PCIEREGS 2 /* Access to pcie registers */
+#define ILP_DIV_5MHZ 0 /* ILP = 5 MHz */
+#define ILP_DIV_1MHZ 4 /* ILP = 1 MHz */
/* force HT war check */
-#define FORCEHT_WAR32414(si) \
- ((PCIE(si)) && (((si->sb.chip == BCM4311_CHIP_ID) && (si->sb.chiprev == 1)) || \
- ((si->sb.chip == BCM4321_CHIP_ID) && (si->sb.chiprev <= 3))))
+#define FORCEHT_WAR32414(si) \
+ (((PCIE(si)) && (si->sb.chip == BCM4311_CHIP_ID) && ((si->sb.chiprev <= 1))) || \
+ ((PCI(si) || PCIE(si)) && (si->sb.chip == BCM4321_CHIP_ID) && (si->sb.chiprev <= 3)))
+
+#define PCIE_ASPMWARS(si) \
+ ((PCIE(si)) && ((si->sb.buscorerev >= 3) && (si->sb.buscorerev <= 5)))
/* GPIO Based LED powersave defines */
-#define DEFAULT_GPIO_ONTIME 10 /* Default: 10% on */
-#define DEFAULT_GPIO_OFFTIME 90 /* Default: 10% on */
+#define DEFAULT_GPIO_ONTIME 10 /* Default: 10% on */
+#define DEFAULT_GPIO_OFFTIME 90 /* Default: 10% on */
#define DEFAULT_GPIOTIMERVAL ((DEFAULT_GPIO_ONTIME << GPIO_ONTIME_SHIFT) | DEFAULT_GPIO_OFFTIME)
-static uint32
-sb_read_sbreg(sb_info_t *si, volatile uint32 *sbr)
+static uint32 sb_read_sbreg(sb_info_t * si, volatile uint32 * sbr)
{
uint8 tmp;
uint32 val, intr_val = 0;
-
/*
* compact flash only has 11 bits address, while we needs 12 bits address.
* MEM_SEG will be OR'd with other 11 bits address in hardware,
* so we program MEM_SEG with 12th bit when necessary(access sb regsiters).
* For normal PCMCIA bus(CFTable_regwinsz > 2k), do nothing special
*/
- if (si->memseg) {
+ if (PCMCIA(si)) {
INTR_OFF(si, intr_val);
tmp = 1;
OSL_PCMCIA_WRITE_ATTR(si->osh, MEM_SEG, &tmp, 1);
- sbr = (volatile uint32 *)((uintptr)sbr & ~(1 << 11)); /* mask out bit 11 */
+ sbr = (volatile uint32 *)((uintptr) sbr & ~(1 << 11)); /* mask out bit 11 */
}
val = R_REG(si->osh, sbr);
- if (si->memseg) {
+ if (PCMCIA(si)) {
tmp = 0;
OSL_PCMCIA_WRITE_ATTR(si->osh, MEM_SEG, &tmp, 1);
INTR_RESTORE(si, intr_val);
return (val);
}
-static void
-sb_write_sbreg(sb_info_t *si, volatile uint32 *sbr, uint32 v)
+static void sb_write_sbreg(sb_info_t * si, volatile uint32 * sbr, uint32 v)
{
uint8 tmp;
volatile uint32 dummy;
uint32 intr_val = 0;
-
/*
* compact flash only has 11 bits address, while we needs 12 bits address.
* MEM_SEG will be OR'd with other 11 bits address in hardware,
* so we program MEM_SEG with 12th bit when necessary(access sb regsiters).
* For normal PCMCIA bus(CFTable_regwinsz > 2k), do nothing special
*/
- if (si->memseg) {
+ if (PCMCIA(si)) {
INTR_OFF(si, intr_val);
tmp = 1;
OSL_PCMCIA_WRITE_ATTR(si->osh, MEM_SEG, &tmp, 1);
- sbr = (volatile uint32 *)((uintptr)sbr & ~(1 << 11)); /* mask out bit 11 */
+ sbr = (volatile uint32 *)((uintptr) sbr & ~(1 << 11)); /* mask out bit 11 */
}
if (BUSTYPE(si->sb.bustype) == PCMCIA_BUS) {
#ifdef IL_BIGENDIAN
dummy = R_REG(si->osh, sbr);
- W_REG(si->osh, ((volatile uint16 *)sbr + 1), (uint16)((v >> 16) & 0xffff));
+ W_REG(si->osh, ((volatile uint16 *)sbr + 1),
+ (uint16) ((v >> 16) & 0xffff));
dummy = R_REG(si->osh, sbr);
- W_REG(si->osh, (volatile uint16 *)sbr, (uint16)(v & 0xffff));
+ W_REG(si->osh, (volatile uint16 *)sbr, (uint16) (v & 0xffff));
#else
dummy = R_REG(si->osh, sbr);
- W_REG(si->osh, (volatile uint16 *)sbr, (uint16)(v & 0xffff));
+ W_REG(si->osh, (volatile uint16 *)sbr, (uint16) (v & 0xffff));
dummy = R_REG(si->osh, sbr);
- W_REG(si->osh, ((volatile uint16 *)sbr + 1), (uint16)((v >> 16) & 0xffff));
-#endif /* IL_BIGENDIAN */
+ W_REG(si->osh, ((volatile uint16 *)sbr + 1),
+ (uint16) ((v >> 16) & 0xffff));
+#endif /* IL_BIGENDIAN */
} else
W_REG(si->osh, sbr, v);
- if (si->memseg) {
+ if (PCMCIA(si)) {
tmp = 0;
OSL_PCMCIA_WRITE_ATTR(si->osh, MEM_SEG, &tmp, 1);
INTR_RESTORE(si, intr_val);
* vars - pointer to a pointer area for "environment" variables
* varsz - pointer to int to return the size of the vars
*/
-sb_t *
-BCMINITFN(sb_attach)(uint devid, osl_t *osh, void *regs,
- uint bustype, void *sdh, char **vars, uint *varsz)
-{
+sb_t *sb_attach(uint devid, osl_t * osh, void *regs,
+ uint bustype, void *sdh, char **vars,
+ uint * varsz) {
sb_info_t *si;
/* alloc sb_info_t */
- if ((si = MALLOC(osh, sizeof (sb_info_t))) == NULL) {
- SB_ERROR(("sb_attach: malloc failed! malloced %d bytes\n", MALLOCED(osh)));
+ if ((si = MALLOC(osh, sizeof(sb_info_t))) == NULL) {
+ SB_ERROR(("sb_attach: malloc failed! malloced %d bytes\n",
+ MALLOCED(osh)));
return (NULL);
}
- if (sb_doattach(si, devid, osh, regs, bustype, sdh, vars, (uint*)varsz) == NULL) {
+ if (sb_doattach(si, devid, osh, regs, bustype, sdh, vars, varsz) ==
+ NULL) {
MFREE(osh, si, sizeof(sb_info_t));
return (NULL);
}
+ si->vars = vars ? *vars : NULL;
+ si->varsz = varsz ? *varsz : 0;
- return (sb_t *)si;
+ return (sb_t *) si;
}
/* Using sb_kattach depends on SB_BUS support, either implicit */
/* global kernel resource */
static sb_info_t ksi;
-static bool ksi_attached = FALSE;
/* generic kernel variant of sb_attach() */
-sb_t *
-BCMINITFN(sb_kattach)(void)
-{
- osl_t *osh = NULL;
+sb_t *BCMINITFN(sb_kattach) (osl_t * osh) {
+ static bool ksi_attached = FALSE;
uint32 *regs;
if (!ksi_attached) {
uint32 cid;
- regs = (uint32 *)REG_MAP(SB_ENUM_BASE, SB_CORE_SIZE);
- cid = R_REG(osh, (uint32 *)regs);
+ regs = (uint32 *) REG_MAP(SB_ENUM_BASE, SB_CORE_SIZE);
+ cid = R_REG(osh, (uint32 *) regs);
if (((cid & CID_ID_MASK) == BCM4712_CHIP_ID) &&
((cid & CID_PKG_MASK) != BCM4712LARGE_PKG_ID) &&
((cid & CID_REV_MASK) <= (3 << CID_REV_SHIFT))) {
uint32 *scc, val;
- scc = (uint32 *)((uchar*)regs + OFFSETOF(chipcregs_t, slow_clk_ctl));
+ scc =
+ (uint32 *) ((uchar *) regs +
+ OFFSETOF(chipcregs_t, slow_clk_ctl));
val = R_REG(osh, scc);
SB_ERROR((" initial scc = 0x%x\n", val));
val |= SCC_SS_XTAL;
W_REG(osh, scc, val);
}
- if (sb_doattach(&ksi, BCM4710_DEVICE_ID, osh, (void*)regs,
- SB_BUS, NULL, NULL, NULL) == NULL) {
+ if (sb_doattach(&ksi, BCM4710_DEVICE_ID, osh, (void *)regs, SB_BUS, NULL,
+ osh != SB_OSH ? &ksi.vars : NULL,
+ osh != SB_OSH ? &ksi.varsz : NULL) == NULL)
return NULL;
- }
- else
- ksi_attached = TRUE;
+ ksi_attached = TRUE;
}
- return (sb_t *)&ksi;
-}
-#endif /* !BCMBUSTYPE || (BCMBUSTYPE == SB_BUS) */
-
-void
-BCMINITFN(sb_war32414_forceHT)(sb_t *sbh, bool forceHT)
-{
- sb_info_t *si;
-
- si = SB_INFO(sbh);
-
-
- if (FORCEHT_WAR32414(si)) {
- uint32 val = 0;
- if (forceHT)
- val = SYCC_HR;
- sb_corereg((void*)si, SB_CC_IDX, OFFSETOF(chipcregs_t, system_clk_ctl),
- SYCC_HR, val);
- }
+ return &ksi.sb;
}
+#endif /* !BCMBUSTYPE || (BCMBUSTYPE == SB_BUS) */
-static sb_info_t *
-BCMINITFN(sb_doattach)(sb_info_t *si, uint devid, osl_t *osh, void *regs,
- uint bustype, void *sdh, char **vars, uint *varsz)
-{
+static sb_info_t *BCMINITFN(sb_doattach) (sb_info_t * si, uint devid,
+ osl_t * osh, void *regs,
+ uint bustype, void *sdh,
+ char **vars, uint * varsz) {
uint origidx;
chipcregs_t *cc;
sbconfig_t *sb;
uint32 w;
+ char *pvars;
ASSERT(GOODREGS(regs));
- bzero((uchar*)si, sizeof(sb_info_t));
-
+ bzero((uchar *) si, sizeof(sb_info_t));
si->sb.buscoreidx = si->gpioidx = BADIDX;
si->curmap = regs;
/* check to see if we are a sb core mimic'ing a pci core */
if (bustype == PCI_BUS) {
- if (OSL_PCI_READ_CONFIG(si->osh, PCI_SPROM_CONTROL, sizeof(uint32)) == 0xffffffff) {
- SB_ERROR(("%s: incoming bus is PCI but it's a lie, switching to SB "
- "devid:0x%x\n", __FUNCTION__, devid));
+ if (OSL_PCI_READ_CONFIG
+ (si->osh, PCI_SPROM_CONTROL,
+ sizeof(uint32)) == 0xffffffff) {
+ SB_ERROR(("%s: incoming bus is PCI but it's a lie, switching to SB " "devid:0x%x\n", __FUNCTION__, devid));
bustype = SB_BUS;
}
}
-
si->sb.bustype = bustype;
if (si->sb.bustype != BUSTYPE(si->sb.bustype)) {
- SB_ERROR(("sb_doattach: bus type %d does not match configured bus type %d\n",
- si->sb.bustype, BUSTYPE(si->sb.bustype)));
+ SB_ERROR(("sb_doattach: bus type %d does not match configured bus type %d\n", si->sb.bustype, BUSTYPE(si->sb.bustype)));
return NULL;
}
si->memseg = TRUE;
/* kludge to enable the clock on the 4306 which lacks a slowclock */
- if (BUSTYPE(si->sb.bustype) == PCI_BUS)
- sb_clkctl_xtal(&si->sb, XTAL|PLL, ON);
+ if (BUSTYPE(si->sb.bustype) == PCI_BUS && !sb_ispcie(si))
+ sb_clkctl_xtal(&si->sb, XTAL | PLL, ON);
if (BUSTYPE(si->sb.bustype) == PCI_BUS) {
w = OSL_PCI_READ_CONFIG(si->osh, PCI_BAR0_WIN, sizeof(uint32));
if (!GOODCOREADDR(w))
- OSL_PCI_WRITE_CONFIG(si->osh, PCI_BAR0_WIN, sizeof(uint32), SB_ENUM_BASE);
+ OSL_PCI_WRITE_CONFIG(si->osh, PCI_BAR0_WIN,
+ sizeof(uint32), SB_ENUM_BASE);
}
/* initialize current core index value */
}
/* get sonics backplane revision */
- sb = REGS2SB(si->curmap);
- si->sb.sonicsrev = (R_SBREG(si, &sb->sbidlow) & SBIDL_RV_MASK) >> SBIDL_RV_SHIFT;
-
+ sb = REGS2SB(regs);
+ si->sb.sonicsrev =
+ (R_SBREG(si, &sb->sbidlow) & SBIDL_RV_MASK) >> SBIDL_RV_SHIFT;
/* keep and reuse the initial register mapping */
origidx = si->curidx;
if (BUSTYPE(si->sb.bustype) == SB_BUS)
/* is core-0 a chipcommon core? */
si->numcores = 1;
- cc = (chipcregs_t*) sb_setcoreidx(&si->sb, 0);
+ cc = (chipcregs_t *) sb_setcoreidx(&si->sb, 0);
if (sb_coreid(&si->sb) != SB_CC)
cc = NULL;
if (cc) {
/* chip common core found! */
si->sb.chip = R_REG(si->osh, &cc->chipid) & CID_ID_MASK;
- si->sb.chiprev = (R_REG(si->osh, &cc->chipid) & CID_REV_MASK) >> CID_REV_SHIFT;
- si->sb.chippkg = (R_REG(si->osh, &cc->chipid) & CID_PKG_MASK) >> CID_PKG_SHIFT;
+ si->sb.chiprev =
+ (R_REG(si->osh, &cc->chipid) & CID_REV_MASK) >>
+ CID_REV_SHIFT;
+ si->sb.chippkg =
+ (R_REG(si->osh, &cc->chipid) & CID_PKG_MASK) >>
+ CID_PKG_SHIFT;
} else {
/* no chip common core -- must convert device id to chip id */
if ((si->sb.chip = sb_pcidev2chip(devid)) == 0) {
/* get chipcommon rev */
si->sb.ccrev = cc ? (int)sb_corerev(&si->sb) : NOREV;
+ /* get chipcommon capabilites */
+ si->sb.cccaps = cc ? R_REG(si->osh, &cc->capabilities) : 0;
+
/* determine numcores */
if (cc && ((si->sb.ccrev == 4) || (si->sb.ccrev >= 6)))
- si->numcores = (R_REG(si->osh, &cc->chipid) & CID_CC_MASK) >> CID_CC_SHIFT;
+ si->numcores =
+ (R_REG(si->osh, &cc->chipid) & CID_CC_MASK) >> CID_CC_SHIFT;
else
si->numcores = sb_chip2numcores(si->sb.chip);
sb_scan(si);
/* fixup necessary chip/core configurations */
- if (BUSTYPE(si->sb.bustype) == PCI_BUS) {
- if (sb_pci_fixcfg(si)) {
- SB_ERROR(("sb_doattach: sb_pci_fixcfg failed\n"));
- return NULL;
- }
+ if (BUSTYPE(si->sb.bustype) == PCI_BUS && sb_pci_fixcfg(si)) {
+ SB_ERROR(("sb_doattach: sb_pci_fixcfg failed\n"));
+ return NULL;
}
- /* srom_var_init() depends on sb_scan() info */
- if (srom_var_init(si, si->sb.bustype, si->curmap, si->osh, vars, varsz)) {
+ /* Init nvram from sprom/otp if they exist */
+ if (srom_var_init
+ (&si->sb, BUSTYPE(si->sb.bustype), regs, si->osh, vars, varsz)) {
SB_ERROR(("sb_doattach: srom_var_init failed: bad srom\n"));
return (NULL);
}
-
+ pvars = vars ? *vars : NULL;
+
+ /* PMU specific initializations */
+ if ((si->sb.cccaps & CC_CAP_PMU) && !sb_onetimeinit) {
+ sb_pmu_init(&si->sb, si->osh);
+ /* Find out Crystal frequency and init PLL */
+ sb_pmu_pll_init(&si->sb, si->osh, getintvar(pvars, "xtalfreq"));
+ /* Initialize PMU resources (up/dn timers, dep masks, etc.) */
+ sb_pmu_res_init(&si->sb, si->osh);
+ }
if (cc == NULL) {
/*
* The chip revision number is hardwired into all
ASSERT(vars);
si->sb.chiprev = getintvar(*vars, "chiprev");
} else if (BUSTYPE(si->sb.bustype) == PCI_BUS) {
- w = OSL_PCI_READ_CONFIG(si->osh, PCI_CFG_REV, sizeof(uint32));
+ w = OSL_PCI_READ_CONFIG(si->osh, PCI_CFG_REV,
+ sizeof(uint32));
si->sb.chiprev = w & 0xff;
} else
si->sb.chiprev = 0;
}
if (BUSTYPE(si->sb.bustype) == PCMCIA_BUS) {
- w = getintvar(*vars, "regwindowsz");
+ w = getintvar(pvars, "regwindowsz");
si->memseg = (w <= CFTABLE_REGWIN_2K) ? TRUE : FALSE;
}
-
/* gpio control core is required */
if (!GOODIDX(si->gpioidx)) {
SB_ERROR(("sb_doattach: gpio control core not found\n"));
case PCI_BUS:
/* do a pci config read to get subsystem id and subvendor id */
w = OSL_PCI_READ_CONFIG(si->osh, PCI_CFG_SVID, sizeof(uint32));
- si->sb.boardvendor = w & 0xffff;
- si->sb.boardtype = (w >> 16) & 0xffff;
+ /* Let nvram variables override subsystem Vend/ID */
+ if ((si->sb.boardvendor =
+ (uint16) sb_getdevpathintvar(&si->sb, "boardvendor")) == 0)
+ si->sb.boardvendor = w & 0xffff;
+ else
+ SB_ERROR(("Overriding boardvendor: 0x%x instead of 0x%x\n", si->sb.boardvendor, w & 0xffff));
+ if ((si->sb.boardtype =
+ (uint16) sb_getdevpathintvar(&si->sb, "boardtype")) == 0)
+ si->sb.boardtype = (w >> 16) & 0xffff;
+ else
+ SB_ERROR(("Overriding boardtype: 0x%x instead of 0x%x\n", si->sb.boardtype, (w >> 16) & 0xffff));
break;
case PCMCIA_BUS:
- case SDIO_BUS:
- si->sb.boardvendor = getintvar(*vars, "manfid");
- si->sb.boardtype = getintvar(*vars, "prodid");
+ si->sb.boardvendor = getintvar(pvars, "manfid");
+ si->sb.boardtype = getintvar(pvars, "prodid");
break;
case SB_BUS:
case JTAG_BUS:
si->sb.boardvendor = VENDOR_BROADCOM;
- if ((si->sb.boardtype = getintvar(NULL, "boardtype")) == 0)
- si->sb.boardtype = 0xffff;
+ if (pvars == NULL
+ || ((si->sb.boardtype = getintvar(pvars, "prodid")) == 0))
+ if ((si->sb.boardtype =
+ getintvar(NULL, "boardtype")) == 0)
+ si->sb.boardtype = 0xffff;
break;
}
ASSERT(si->sb.boardtype);
}
+ si->sb.boardflags = getintvar(pvars, "boardflags");
+
/* setup the GPIO based LED powersave register */
if (si->sb.ccrev >= 16) {
- if ((vars == NULL) || ((w = getintvar(*vars, "leddc")) == 0))
+ if ((pvars == NULL) || ((w = getintvar(pvars, "leddc")) == 0))
w = DEFAULT_GPIOTIMERVAL;
- sb_corereg(si, 0, OFFSETOF(chipcregs_t, gpiotimerval), ~0, w);
+ sb_corereg(&si->sb, SB_CC_IDX,
+ OFFSETOF(chipcregs_t, gpiotimerval), ~0, w);
+ }
+
+ /* Determine if this board needs override */
+ if (PCIE(si) && (si->sb.chip == BCM4321_CHIP_ID))
+ si->pcie_war_ovr = ((si->sb.boardvendor == VENDOR_APPLE) &&
+ ((uint8) getintvar(pvars, "sromrev") == 4)
+ && ((uint8) getintvar(pvars, "boardrev") <=
+ 0x71))
+ || ((uint32) getintvar(pvars, "boardflags2") &
+ BFL2_PCIEWAR_OVR);
+
+ if (PCIE_ASPMWARS(si)) {
+ sb_war43448_aspm((void *)si);
+ sb_war42767_clkreq((void *)si);
}
+
if (FORCEHT_WAR32414(si)) {
- /* set proper clk setup delays before forcing HT */
- sb_clkctl_init((void *)si);
- sb_war32414_forceHT((void *)si, 1);
+ si->sb.pr32414 = TRUE;
+ sb_clkctl_init(&si->sb);
+ sb_war32414_forceHT(&si->sb, 1);
+ }
+
+ if (PCIE(si) && ((si->sb.buscorerev == 6) || (si->sb.buscorerev == 7)))
+ si->sb.pr42780 = TRUE;
+
+ if (PCIE_ASPMWARS(si))
+ sb_pcieclkreq(&si->sb, 1, 0);
+
+ if (PCIE(si) &&
+ (((si->sb.chip == BCM4311_CHIP_ID) && (si->sb.chiprev == 2)) ||
+ ((si->sb.chip == BCM4312_CHIP_ID) && (si->sb.chiprev == 0))))
+ sb_set_initiator_to(&si->sb, 0x3,
+ sb_findcoreidx(&si->sb, SB_D11, 0));
+
+ /* Disable gpiopullup and gpiopulldown */
+ if (!sb_onetimeinit && si->sb.ccrev >= 20) {
+ cc = (chipcregs_t *) sb_setcore(&si->sb, SB_CC, 0);
+ W_REG(osh, &cc->gpiopullup, 0);
+ W_REG(osh, &cc->gpiopulldown, 0);
+ sb_setcoreidx(&si->sb, origidx);
}
+#ifdef BCMDBG
+ /* clear any previous epidiag-induced target abort */
+ sb_taclear(&si->sb);
+#endif /* BCMDBG */
+#ifdef HNDRTE
+ sb_onetimeinit = TRUE;
+#endif
return (si);
}
+/* Enable/Disable clkreq for PCIE (4311B0/4321B1) */
+void sb_war42780_clkreq(sb_t * sbh, bool clkreq) {
+ sb_info_t *si;
+
+ si = SB_INFO(sbh);
+
+ /* Don't change clkreq value if serdespll war has not yet been applied */
+ if (!si->pr42767_war && PCIE_ASPMWARS(si))
+ return;
+
+ sb_pcieclkreq(sbh, 1, (int32) clkreq);
+}
+
+static void BCMINITFN(sb_war43448) (sb_t * sbh) {
+ sb_info_t *si;
+
+ si = SB_INFO(sbh);
+
+ /* if not pcie bus, we're done */
+ if (!PCIE(si) || !PCIE_ASPMWARS(si))
+ return;
+
+ /* Restore the polarity */
+ if (si->pcie_polarity != 0)
+ sb_pcie_mdiowrite((void *)(uintptr) & si->sb, MDIODATA_DEV_RX,
+ SERDES_RX_CTRL, si->pcie_polarity);
+}
+
+static void BCMINITFN(sb_war43448_aspm) (sb_t * sbh) {
+ uint32 w;
+ uint16 val16, *reg16;
+ sbpcieregs_t *pcieregs;
+ sb_info_t *si;
+
+ si = SB_INFO(sbh);
+
+ /* if not pcie bus, we're done */
+ if (!PCIE(si) || !PCIE_ASPMWARS(si))
+ return;
+
+ /* no ASPM stuff on QT or VSIM */
+ if (si->sb.chippkg == HDLSIM_PKG_ID || si->sb.chippkg == HWSIM_PKG_ID)
+ return;
+
+ pcieregs = (sbpcieregs_t *) sb_setcoreidx(sbh, si->sb.buscoreidx);
+
+ /* Enable ASPM in the shadow SROM and Link control */
+ reg16 = &pcieregs->sprom[SRSH_ASPM_OFFSET];
+ val16 = R_REG(si->osh, reg16);
+ if (!si->pcie_war_ovr)
+ val16 |= SRSH_ASPM_ENB;
+ else
+ val16 &= ~SRSH_ASPM_ENB;
+ W_REG(si->osh, reg16, val16);
+
+ w = OSL_PCI_READ_CONFIG(si->osh, si->pciecap_lcreg_offset,
+ sizeof(uint32));
+ if (!si->pcie_war_ovr)
+ w |= PCIE_ASPM_ENAB;
+ else
+ w &= ~PCIE_ASPM_ENAB;
+ OSL_PCI_WRITE_CONFIG(si->osh, si->pciecap_lcreg_offset, sizeof(uint32),
+ w);
+}
+
+static void BCMINITFN(sb_war32414_forceHT) (sb_t * sbh, bool forceHT) {
+ sb_info_t *si;
+ uint32 val = 0;
+
+ si = SB_INFO(sbh);
+
+ ASSERT(FORCEHT_WAR32414(si));
-uint
-sb_coreid(sb_t *sbh)
+ if (forceHT)
+ val = SYCC_HR;
+ sb_corereg(sbh, SB_CC_IDX, OFFSETOF(chipcregs_t, system_clk_ctl),
+ SYCC_HR, val);
+}
+
+uint sb_coreid(sb_t * sbh)
{
sb_info_t *si;
sbconfig_t *sb;
return ((R_SBREG(si, &sb->sbidhigh) & SBIDH_CC_MASK) >> SBIDH_CC_SHIFT);
}
-uint
-sb_coreidx(sb_t *sbh)
+uint sb_flag(sb_t * sbh)
+{
+ sb_info_t *si;
+ sbconfig_t *sb;
+
+ si = SB_INFO(sbh);
+ sb = REGS2SB(si->curmap);
+
+ return R_SBREG(si, &sb->sbtpsflag) & SBTPS_NUM0_MASK;
+}
+
+uint sb_coreidx(sb_t * sbh)
{
sb_info_t *si;
return (si->curidx);
}
-/* return current index of core */
-static uint
-_sb_coreidx(sb_info_t *si)
+static uint _sb_coreidx(sb_info_t * si)
{
+
sbconfig_t *sb;
uint32 sbaddr = 0;
break;
case PCI_BUS:
- sbaddr = OSL_PCI_READ_CONFIG(si->osh, PCI_BAR0_WIN, sizeof(uint32));
+ sbaddr =
+ OSL_PCI_READ_CONFIG(si->osh, PCI_BAR0_WIN, sizeof(uint32));
break;
- case PCMCIA_BUS: {
- uint8 tmp = 0;
+ case PCMCIA_BUS:{
+ uint8 tmp = 0;
- OSL_PCMCIA_READ_ATTR(si->osh, PCMCIA_ADDR0, &tmp, 1);
- sbaddr = (uint)tmp << 12;
- OSL_PCMCIA_READ_ATTR(si->osh, PCMCIA_ADDR1, &tmp, 1);
- sbaddr |= (uint)tmp << 16;
- OSL_PCMCIA_READ_ATTR(si->osh, PCMCIA_ADDR2, &tmp, 1);
- sbaddr |= (uint)tmp << 24;
- break;
- }
+ OSL_PCMCIA_READ_ATTR(si->osh, PCMCIA_ADDR0, &tmp, 1);
+ sbaddr = (uint) tmp << 12;
+ OSL_PCMCIA_READ_ATTR(si->osh, PCMCIA_ADDR1, &tmp, 1);
+ sbaddr |= (uint) tmp << 16;
+ OSL_PCMCIA_READ_ATTR(si->osh, PCMCIA_ADDR2, &tmp, 1);
+ sbaddr |= (uint) tmp << 24;
+ break;
+ }
#ifdef BCMJTAG
case JTAG_BUS:
- sbaddr = (uint32)si->curmap;
+ sbaddr = (uint32) si->curmap;
break;
-#endif /* BCMJTAG */
+#endif /* BCMJTAG */
default:
ASSERT(0);
return ((sbaddr - SB_ENUM_BASE) / SB_CORE_SIZE);
}
-uint
-sb_corevendor(sb_t *sbh)
+uint sb_corevendor(sb_t * sbh)
{
sb_info_t *si;
sbconfig_t *sb;
return ((R_SBREG(si, &sb->sbidhigh) & SBIDH_VC_MASK) >> SBIDH_VC_SHIFT);
}
-uint
-sb_corerev(sb_t *sbh)
+uint sb_corerev(sb_t * sbh)
{
sb_info_t *si;
sbconfig_t *sb;
return (SBCOREREV(sbidh));
}
-void *
-sb_osh(sb_t *sbh)
+void *sb_osh(sb_t * sbh)
{
sb_info_t *si;
return si->osh;
}
-void
-sb_setosh(sb_t *sbh, osl_t *osh)
+void sb_setosh(sb_t * sbh, osl_t * osh)
{
sb_info_t *si;
si->osh = osh;
}
+/* set sbtmstatelow core-specific flags */
+void sb_coreflags_wo(sb_t * sbh, uint32 mask, uint32 val)
+{
+ sb_info_t *si;
+ sbconfig_t *sb;
+ uint32 w;
+
+ si = SB_INFO(sbh);
+ sb = REGS2SB(si->curmap);
+
+ ASSERT((val & ~mask) == 0);
+
+ /* mask and set */
+ w = (R_SBREG(si, &sb->sbtmstatelow) & ~mask) | val;
+ W_SBREG(si, &sb->sbtmstatelow, w);
+}
+
/* set/clear sbtmstatelow core-specific flags */
-uint32
-sb_coreflags(sb_t *sbh, uint32 mask, uint32 val)
+uint32 sb_coreflags(sb_t * sbh, uint32 mask, uint32 val)
{
sb_info_t *si;
sbconfig_t *sb;
W_SBREG(si, &sb->sbtmstatelow, w);
}
- /* return the new value */
+ /* return the new value
+ * for write operation, the following readback ensures the completion of write opration.
+ */
return (R_SBREG(si, &sb->sbtmstatelow));
}
/* set/clear sbtmstatehigh core-specific flags */
-uint32
-sb_coreflagshi(sb_t *sbh, uint32 mask, uint32 val)
+uint32 sb_coreflagshi(sb_t * sbh, uint32 mask, uint32 val)
{
sb_info_t *si;
sbconfig_t *sb;
}
/* return the new value */
- return (R_SBREG(si, &sb->sbtmstatehigh) & SBTMH_FL_MASK);
+ return (R_SBREG(si, &sb->sbtmstatehigh));
}
/* Run bist on current core. Caller needs to take care of core-specific bist hazards */
-int
-sb_corebist(sb_t *sbh)
+int sb_corebist(sb_t * sbh)
{
uint32 sblo;
sb_info_t *si;
sblo = R_SBREG(si, &sb->sbtmstatelow);
W_SBREG(si, &sb->sbtmstatelow, (sblo | SBTML_FGC | SBTML_BE));
- SPINWAIT(((R_SBREG(si, &sb->sbtmstatehigh) & SBTMH_BISTD) == 0), 100000);
+ SPINWAIT(((R_SBREG(si, &sb->sbtmstatehigh) & SBTMH_BISTD) == 0),
+ 100000);
if (R_SBREG(si, &sb->sbtmstatehigh) & SBTMH_BISTF)
- result = BCME_ERROR;
+ result = -1;
W_SBREG(si, &sb->sbtmstatelow, sblo);
return result;
}
-bool
-sb_iscoreup(sb_t *sbh)
+bool sb_iscoreup(sb_t * sbh)
{
sb_info_t *si;
sbconfig_t *sb;
sb = REGS2SB(si->curmap);
return ((R_SBREG(si, &sb->sbtmstatelow) &
- (SBTML_RESET | SBTML_REJ_MASK | SBTML_CLK)) == SBTML_CLK);
+ (SBTML_RESET | SBTML_REJ_MASK | SBTML_CLK)) == SBTML_CLK);
}
/*
* Also, when using pci/pcie, we can optimize away the core switching for pci registers
* and (on newer pci cores) chipcommon registers.
*/
-static uint
-sb_corereg(sb_info_t *si, uint coreidx, uint regoff, uint mask, uint val)
+uint sb_corereg(sb_t * sbh, uint coreidx, uint regoff, uint mask, uint val)
{
uint origidx = 0;
uint32 *r = NULL;
uint w;
uint intr_val = 0;
bool fast = FALSE;
+ sb_info_t *si;
+
+ si = SB_INFO(sbh);
ASSERT(GOODIDX(coreidx));
ASSERT(regoff < SB_CORE_SIZE);
ASSERT((val & ~mask) == 0);
-#ifdef notyet
- if (si->sb.bustype == SB_BUS) {
+#if 0
+ if (BUSTYPE(si->sb.bustype) == SB_BUS) {
/* If internal bus, we can always get at everything */
fast = TRUE;
- r = (uint32 *)((uchar *)si->regs[coreidx] + regoff);
- } else if (si->sb.bustype == PCI_BUS) {
+ /* map if does not exist */
+ if (!si->regs[coreidx]) {
+ si->regs[coreidx] =
+ (void *)REG_MAP(si->coresba[coreidx], SB_CORE_SIZE);
+ ASSERT(GOODREGS(si->regs[coreidx]));
+ }
+ r = (uint32 *) ((uchar *) si->regs[coreidx] + regoff);
+ } else if (BUSTYPE(si->sb.bustype) == PCI_BUS) {
/* If pci/pcie, we can get at pci/pcie regs and on newer cores to chipc */
if ((si->coreid[coreidx] == SB_CC) &&
- ((si->sb.buscoretype == SB_PCIE) ||
- (si->sb.buscorerev >= 13))) {
+ ((si->sb.buscoretype == SB_PCIE)
+ || (si->sb.buscorerev >= 13))) {
/* Chipc registers are mapped at 12KB */
fast = TRUE;
- r = (uint32 *)((char *)si->curmap + PCI_16KB0_CCREGS_OFFSET + regoff);
+ r = (uint32 *) ((char *)si->curmap +
+ PCI_16KB0_CCREGS_OFFSET + regoff);
} else if (si->sb.buscoreidx == coreidx) {
/* pci registers are at either in the last 2KB of an 8KB window
* or, in pcie and pci rev 13 at 8KB
*/
fast = TRUE;
- if ((si->sb.buscoretype == SB_PCIE) ||
- (si->sb.buscorerev >= 13))
- r = (uint32 *)((char *)si->curmap +
- PCI_16KB0_PCIREGS_OFFSET + regoff);
+ if ((si->sb.buscoretype == SB_PCIE)
+ || (si->sb.buscorerev >= 13))
+ r = (uint32 *) ((char *)si->curmap +
+ PCI_16KB0_PCIREGS_OFFSET +
+ regoff);
else
- r = (uint32 *)((char *)si->curmap +
- ((regoff >= SBCONFIGOFF) ?
- PCI_BAR0_PCISBR_OFFSET : PCI_BAR0_PCIREGS_OFFSET) +
- regoff);
+ r = (uint32 *) ((char *)si->curmap +
+ ((regoff >= SBCONFIGOFF) ?
+ PCI_BAR0_PCISBR_OFFSET :
+ PCI_BAR0_PCIREGS_OFFSET)
+ + regoff);
}
}
-#endif /* notyet */
+#endif
if (!fast) {
INTR_OFF(si, intr_val);
origidx = sb_coreidx(&si->sb);
/* switch core */
- r = (uint32*) ((uchar*) sb_setcoreidx(&si->sb, coreidx) + regoff);
+ r = (uint32 *) ((uchar *) sb_setcoreidx(&si->sb, coreidx) +
+ regoff);
}
ASSERT(r);
/* readback */
if (regoff >= SBCONFIGOFF)
w = R_SBREG(si, r);
- else
- w = R_REG(si->osh, r);
+ else {
+ if ((si->sb.chip == BCM5354_CHIP_ID) &&
+ (coreidx == SB_CC_IDX) &&
+ (regoff == OFFSETOF(chipcregs_t, watchdog))) {
+ w = val;
+ } else
+ w = R_REG(si->osh, r);
+ }
if (!fast) {
/* restore core index */
#define read_pci_cfg_word(a) \
(WORD_VAL(OSL_PCI_READ_CONFIG(si->osh, DWORD_ALIGN(a), 4), a) & 0xffff)
-
-/* return TRUE if requested capability exists in the PCI config space */
-static bool
-sb_find_pci_capability(sb_info_t *si, uint8 req_cap_id, uchar *buf, uint32 *buflen)
+/* return cap_offset if requested capability exists in the PCI config space */
+static uint8
+sb_find_pci_capability(sb_info_t * si, uint8 req_cap_id, uchar * buf,
+ uint32 * buflen)
{
uint8 cap_id;
- uint8 cap_ptr;
- uint32 bufsize;
+ uint8 cap_ptr = 0;
+ uint32 bufsize;
uint8 byte_val;
if (BUSTYPE(si->sb.bustype) != PCI_BUS)
- return FALSE;
+ goto end;
/* check for Header type 0 */
byte_val = read_pci_cfg_byte(PCI_CFG_HDR);
if ((byte_val & 0x7f) != PCI_HEADER_NORMAL)
- return FALSE;
+ goto end;
/* check if the capability pointer field exists */
byte_val = read_pci_cfg_byte(PCI_CFG_STAT);
if (!(byte_val & PCI_CAPPTR_PRESENT))
- return FALSE;
+ goto end;
cap_ptr = read_pci_cfg_byte(PCI_CFG_CAPPTR);
/* check if the capability pointer is 0x00 */
if (cap_ptr == 0x00)
- return FALSE;
-
+ goto end;
/* loop thr'u the capability list and see if the pcie capabilty exists */
cap_id = read_pci_cfg_byte(cap_ptr);
while (cap_id != req_cap_id) {
- cap_ptr = read_pci_cfg_byte((cap_ptr+1));
- if (cap_ptr == 0x00) break;
+ cap_ptr = read_pci_cfg_byte((cap_ptr + 1));
+ if (cap_ptr == 0x00)
+ break;
cap_id = read_pci_cfg_byte(cap_ptr);
}
if (cap_id != req_cap_id) {
- return FALSE;
+ goto end;
}
/* found the caller requested capability */
if ((buf != NULL) && (buflen != NULL)) {
+ uint8 cap_data;
+
bufsize = *buflen;
- if (!bufsize) goto end;
+ if (!bufsize)
+ goto end;
*buflen = 0;
/* copy the cpability data excluding cap ID and next ptr */
- cap_ptr += 2;
- if ((bufsize + cap_ptr) > SZPCR)
- bufsize = SZPCR - cap_ptr;
+ cap_data = cap_ptr + 2;
+ if ((bufsize + cap_data) > SZPCR)
+ bufsize = SZPCR - cap_data;
*buflen = bufsize;
while (bufsize--) {
- *buf = read_pci_cfg_byte(cap_ptr);
- cap_ptr++;
+ *buf = read_pci_cfg_byte(cap_data);
+ cap_data++;
buf++;
}
}
-end:
+ end:
+ return cap_ptr;
+}
+
+uint8 sb_pcieclkreq(sb_t * sbh, uint32 mask, uint32 val)
+{
+ sb_info_t *si;
+ uint32 reg_val;
+ uint8 offset;
+
+ si = SB_INFO(sbh);
+
+ offset = si->pciecap_lcreg_offset;
+ if (!offset)
+ return 0;
+
+ reg_val = OSL_PCI_READ_CONFIG(si->osh, offset, sizeof(uint32));
+ /* set operation */
+ if (mask) {
+ if (val)
+ reg_val |= PCIE_CLKREQ_ENAB;
+ else
+ reg_val &= ~PCIE_CLKREQ_ENAB;
+ OSL_PCI_WRITE_CONFIG(si->osh, offset, sizeof(uint32), reg_val);
+ reg_val = OSL_PCI_READ_CONFIG(si->osh, offset, sizeof(uint32));
+ }
+ if (reg_val & PCIE_CLKREQ_ENAB)
+ return 1;
+ else
+ return 0;
+}
+
+#ifdef BCMDBG
+
+uint32 sb_pcielcreg(sb_t * sbh, uint32 mask, uint32 val)
+{
+ sb_info_t *si;
+ uint32 reg_val;
+ uint8 offset;
+
+ si = SB_INFO(sbh);
+
+ if (!PCIE(si))
+ return 0;
+
+ offset = si->pciecap_lcreg_offset;
+ if (!offset)
+ return 0;
+
+ /* set operation */
+ if (mask)
+ OSL_PCI_WRITE_CONFIG(si->osh, offset, sizeof(uint32), val);
+
+ reg_val = OSL_PCI_READ_CONFIG(si->osh, offset, sizeof(uint32));
+
+ return reg_val;
+}
+
+uint8 sb_pcieL1plldown(sb_t * sbh)
+{
+ sb_info_t *si;
+ uint intr_val = 0;
+ uint origidx;
+ uint32 reg_val;
+
+ si = SB_INFO(sbh);
+
+ if (!PCIE(si))
+ return 0;
+ if (!((si->sb.buscorerev == 3) || (si->sb.buscorerev == 4)))
+ return 0;
+
+ if (!sb_pcieclkreq((void *)(uintptr) sbh, 0, 0)) {
+ SB_ERROR(("PCIEL1PLLDOWN requires Clkreq be enabled, so enable it\n"));
+ sb_pcieclkreq((void *)(uintptr) sbh, 1, 1);
+ }
+ reg_val = sb_pcielcreg((void *)(uintptr) sbh, 0, 0);
+ if (reg_val & PCIE_CAP_LCREG_ASPML0s) {
+ SB_ERROR(("PCIEL1PLLDOWN requires L0s to be disabled\n"));
+ reg_val &= ~PCIE_CAP_LCREG_ASPML0s;
+ sb_pcielcreg((void *)(uintptr) sbh, 1, reg_val);
+ } else
+ SB_ERROR(("PCIEL1PLLDOWN: L0s is already disabled\n"));
+
+ /* turnoff intrs, change core, set original back, turn on intrs back on */
+ origidx = si->curidx;
+ INTR_OFF(si, intr_val);
+ sb_setcore(sbh, SB_PCIE, 0);
+
+ sb_pcie_writereg((void *)(uintptr) sbh, (void *)PCIE_PCIEREGS,
+ PCIE_DLLP_PCIE11, 0);
+
+ sb_setcoreidx(sbh, origidx);
+ INTR_RESTORE(si, intr_val);
+ return 1;
+}
+#endif /* BCMDBG */
+
+/* return TRUE if PCIE capability exists in the pci config space */
+static bool sb_ispcie(sb_info_t * si)
+{
+ uint8 cap_ptr;
+
+ cap_ptr = sb_find_pci_capability(si, PCI_CAP_PCIECAP_ID, NULL, NULL);
+ if (!cap_ptr)
+ return FALSE;
+
+ si->pciecap_lcreg_offset = cap_ptr + PCIE_CAP_LINKCTRL_OFFSET;
+
return TRUE;
}
-/* return TRUE if PCIE capability exists the pci config space */
-static inline bool
-sb_ispcie(sb_info_t *si)
+/* Wake-on-wireless-LAN (WOWL) support functions */
+/* return TRUE if PM capability exists in the pci config space */
+bool sb_pci_pmecap(sb_t * sbh)
+{
+ uint8 cap_ptr;
+ uint32 pmecap;
+ sb_info_t *si;
+
+ si = SB_INFO(sbh);
+
+ if (si == NULL || !(PCI(si) || PCIE(si)))
+ return FALSE;
+
+ if (!si->pmecap_offset) {
+ cap_ptr =
+ sb_find_pci_capability(si, PCI_CAP_POWERMGMTCAP_ID, NULL,
+ NULL);
+ if (!cap_ptr)
+ return FALSE;
+
+ si->pmecap_offset = cap_ptr;
+
+ pmecap =
+ OSL_PCI_READ_CONFIG(si->osh, si->pmecap_offset,
+ sizeof(uint32));
+
+ /* At least one state can generate PME */
+ si->pmecap = (pmecap & PME_CAP_PM_STATES) != 0;
+ }
+
+ return (si->pmecap);
+}
+
+/* Enable PME generation and disable clkreq */
+void sb_pci_pmeen(sb_t * sbh)
{
- return (sb_find_pci_capability(si, PCI_CAP_PCIECAP_ID, NULL, NULL));
+ sb_info_t *si;
+ uint32 w;
+ si = SB_INFO(sbh);
+
+ /* if not pmecapable return */
+ if (!sb_pci_pmecap(sbh))
+ return;
+
+ w = OSL_PCI_READ_CONFIG(si->osh, si->pmecap_offset + PME_CSR_OFFSET,
+ sizeof(uint32));
+ w |= (PME_CSR_PME_EN);
+ OSL_PCI_WRITE_CONFIG(si->osh, si->pmecap_offset + PME_CSR_OFFSET,
+ sizeof(uint32), w);
+
+ /* Disable clkreq */
+ if (si->pr42767_war) {
+ sb_pcieclkreq(sbh, 1, 0);
+ si->pr42767_war = FALSE;
+ } else if (si->sb.pr42780) {
+ sb_pcieclkreq(sbh, 1, 1);
+ }
}
-/* scan the sb enumerated space to identify all cores */
-static void
-BCMINITFN(sb_scan)(sb_info_t *si)
+/* Disable PME generation, clear the PME status bit if set and
+ * return TRUE if PME status set
+ */
+bool sb_pci_pmeclr(sb_t * sbh)
{
+ sb_info_t *si;
+ uint32 w;
+ bool ret = FALSE;
+
+ si = SB_INFO(sbh);
+
+ if (!sb_pci_pmecap(sbh))
+ return ret;
+
+ w = OSL_PCI_READ_CONFIG(si->osh, si->pmecap_offset + PME_CSR_OFFSET,
+ sizeof(uint32));
+
+ SB_ERROR(("sb_pci_pmeclr PMECSR : 0x%x\n", w));
+ ret = (w & PME_CSR_PME_STAT) == PME_CSR_PME_STAT;
+
+ /* PMESTAT is cleared by writing 1 to it */
+ w &= ~(PME_CSR_PME_EN);
+
+ OSL_PCI_WRITE_CONFIG(si->osh, si->pmecap_offset + PME_CSR_OFFSET,
+ sizeof(uint32), w);
+
+ return ret;
+}
+
+/* use pci dev id to determine chip id for chips not having a chipcommon core */
+static uint BCMINITFN(sb_pcidev2chip) (uint pcidev) {
+ if ((pcidev >= BCM4710_DEVICE_ID) && (pcidev <= BCM47XX_USB_ID))
+ return (BCM4710_CHIP_ID);
+ if ((pcidev >= BCM4402_ENET_ID) && (pcidev <= BCM4402_V90_ID))
+ return (BCM4402_CHIP_ID);
+ if (pcidev == BCM4401_ENET_ID)
+ return (BCM4402_CHIP_ID);
+ if (pcidev == SDIOH_FPGA_ID)
+ return (SDIOH_FPGA_ID);
+
+ return (0);
+}
+
+/* Scan the enumeration space to find all cores starting from the given
+ * bus 'sbba'. Append coreid and other info to the lists in 'si'. 'sba'
+ * is the default core address at chip POR time and 'regs' is the virtual
+ * address that the default core is mapped at. 'ncores' is the number of
+ * cores expected on bus 'sbba'. It returns the total number of cores
+ * starting from bus 'sbba', inclusive.
+ */
+
+static void BCMINITFN(sb_scan) (sb_info_t * si) {
+ sb_t *sbh;
uint origidx;
uint i;
bool pci;
uint pcirev;
uint pcierev;
+ sbh = (sb_t *) si;
/* numcores should already be set */
ASSERT((si->numcores > 0) && (si->numcores <= SB_MAXCORES));
* - else if there's a pci core (rev >= 2) - use that
* - else there had better be an extif core (4710 only)
*/
- if (GOODIDX(sb_findcoreidx(si, SB_CC, 0))) {
- si->gpioidx = sb_findcoreidx(si, SB_CC, 0);
+ if (GOODIDX(sb_findcoreidx(sbh, SB_CC, 0))) {
+ si->gpioidx = sb_findcoreidx(sbh, SB_CC, 0);
si->gpioid = SB_CC;
} else if (PCI(si) && (si->sb.buscorerev >= 2)) {
si->gpioidx = si->sb.buscoreidx;
si->gpioid = SB_PCI;
- } else if (sb_findcoreidx(si, SB_EXTIF, 0)) {
- si->gpioidx = sb_findcoreidx(si, SB_EXTIF, 0);
+ } else if (sb_findcoreidx(sbh, SB_EXTIF, 0)) {
+ si->gpioidx = sb_findcoreidx(sbh, SB_EXTIF, 0);
si->gpioid = SB_EXTIF;
} else
ASSERT(si->gpioidx != BADIDX);
}
/* may be called with core in reset */
-void
-sb_detach(sb_t *sbh)
+void sb_detach(sb_t * sbh)
{
sb_info_t *si;
uint idx;
}
#if !defined(BCMBUSTYPE) || (BCMBUSTYPE == SB_BUS)
if (si != &ksi)
-#endif /* !BCMBUSTYPE || (BCMBUSTYPE == SB_BUS) */
+#endif /* !BCMBUSTYPE || (BCMBUSTYPE == SB_BUS) */
MFREE(si->osh, si, sizeof(sb_info_t));
-
}
-/* use pci dev id to determine chip id for chips not having a chipcommon core */
-static uint
-BCMINITFN(sb_pcidev2chip)(uint pcidev)
-{
- if ((pcidev >= BCM4710_DEVICE_ID) && (pcidev <= BCM47XX_USB_ID))
- return (BCM4710_CHIP_ID);
- if ((pcidev >= BCM4402_ENET_ID) && (pcidev <= BCM4402_V90_ID))
- return (BCM4402_CHIP_ID);
- if (pcidev == BCM4401_ENET_ID)
- return (BCM4402_CHIP_ID);
-
- return (0);
-}
/* convert chip number to number of i/o cores */
-static uint
-BCMINITFN(sb_chip2numcores)(uint chip)
-{
+static uint BCMINITFN(sb_chip2numcores) (uint chip) {
if (chip == BCM4710_CHIP_ID)
return (9);
if (chip == BCM4402_CHIP_ID)
return (9);
if (chip == BCM5365_CHIP_ID)
return (7);
+ if (chip == SDIOH_FPGA_ID)
+ return (2);
SB_ERROR(("sb_chip2numcores: unsupported chip 0x%x\n", chip));
ASSERT(0);
}
/* return index of coreid or BADIDX if not found */
-static uint
-sb_findcoreidx(sb_info_t *si, uint coreid, uint coreunit)
+uint sb_findcoreidx(sb_t * sbh, uint coreid, uint coreunit)
{
+ sb_info_t *si;
uint found;
uint i;
+ si = SB_INFO(sbh);
+
found = 0;
for (i = 0; i < si->numcores; i++)
* must be called with interrupt off.
* Moreover, callers should keep interrupts off during switching out of and back to d11 core
*/
-void*
-sb_setcoreidx(sb_t *sbh, uint coreidx)
+void *sb_setcoreidx(sb_t * sbh, uint coreidx)
{
sb_info_t *si;
uint32 sbaddr;
* If the user has provided an interrupt mask enabled function,
* then assert interrupts are disabled before switching the core.
*/
- ASSERT((si->intrsenabled_fn == NULL) || !(*(si)->intrsenabled_fn)((si)->intr_arg));
+ ASSERT((si->intrsenabled_fn == NULL)
+ || !(*(si)->intrsenabled_fn) ((si)->intr_arg));
sbaddr = SB_ENUM_BASE + (coreidx * SB_CORE_SIZE);
case SB_BUS:
/* map new one */
if (!si->regs[coreidx]) {
- si->regs[coreidx] = (void*)REG_MAP(sbaddr, SB_CORE_SIZE);
+ si->regs[coreidx] =
+ (void *)REG_MAP(sbaddr, SB_CORE_SIZE);
ASSERT(GOODREGS(si->regs[coreidx]));
}
si->curmap = si->regs[coreidx];
}
si->curmap = si->regs[coreidx];
break;
-#endif /* BCMJTAG */
+#endif /* BCMJTAG */
}
si->curidx = coreidx;
* must be called with interrupt off.
* Moreover, callers should keep interrupts off during switching out of and back to d11 core
*/
-void*
-sb_setcore(sb_t *sbh, uint coreid, uint coreunit)
+void *sb_setcore(sb_t * sbh, uint coreid, uint coreunit)
{
- sb_info_t *si;
uint idx;
- si = SB_INFO(sbh);
- idx = sb_findcoreidx(si, coreid, coreunit);
+ idx = sb_findcoreidx(sbh, coreid, coreunit);
if (!GOODIDX(idx))
return (NULL);
}
/* return chip number */
-uint
-sb_chip(sb_t *sbh)
-{
+uint BCMINITFN(sb_chip) (sb_t * sbh) {
sb_info_t *si;
si = SB_INFO(sbh);
}
/* return chip revision number */
-uint
-sb_chiprev(sb_t *sbh)
-{
+uint BCMINITFN(sb_chiprev) (sb_t * sbh) {
sb_info_t *si;
si = SB_INFO(sbh);
}
/* return chip common revision number */
-uint
-sb_chipcrev(sb_t *sbh)
-{
+uint BCMINITFN(sb_chipcrev) (sb_t * sbh) {
sb_info_t *si;
si = SB_INFO(sbh);
}
/* return chip package option */
-uint
-sb_chippkg(sb_t *sbh)
-{
+uint BCMINITFN(sb_chippkg) (sb_t * sbh) {
sb_info_t *si;
si = SB_INFO(sbh);
}
/* return PCI core rev. */
-uint
-sb_pcirev(sb_t *sbh)
-{
+uint BCMINITFN(sb_pcirev) (sb_t * sbh) {
sb_info_t *si;
si = SB_INFO(sbh);
return (si->sb.buscorerev);
}
-bool
-BCMINITFN(sb_war16165)(sb_t *sbh)
-{
+bool BCMINITFN(sb_war16165) (sb_t * sbh) {
sb_info_t *si;
si = SB_INFO(sbh);
return (PCI(si) && (si->sb.buscorerev <= 10));
}
-static void
-BCMINITFN(sb_war30841)(sb_info_t *si)
-{
+static void BCMINITFN(sb_war30841) (sb_info_t * si) {
sb_pcie_mdiowrite(si, MDIODATA_DEV_RX, SERDES_RX_TIMER1, 0x8128);
sb_pcie_mdiowrite(si, MDIODATA_DEV_RX, SERDES_RX_CDR, 0x0100);
sb_pcie_mdiowrite(si, MDIODATA_DEV_RX, SERDES_RX_CDRBW, 0x1466);
}
/* return PCMCIA core rev. */
-uint
-BCMINITFN(sb_pcmciarev)(sb_t *sbh)
-{
+uint BCMINITFN(sb_pcmciarev) (sb_t * sbh) {
sb_info_t *si;
si = SB_INFO(sbh);
}
/* return board vendor id */
-uint
-sb_boardvendor(sb_t *sbh)
-{
+uint BCMINITFN(sb_boardvendor) (sb_t * sbh) {
sb_info_t *si;
si = SB_INFO(sbh);
}
/* return boardtype */
-uint
-sb_boardtype(sb_t *sbh)
-{
+uint BCMINITFN(sb_boardtype) (sb_t * sbh) {
sb_info_t *si;
char *var;
si->sb.boardtype = getintvar(NULL, "boardtype");
/* backward compatibility for older boardtype string format */
- if ((si->sb.boardtype == 0) && (var = getvar(NULL, "boardtype"))) {
+ if ((si->sb.boardtype == 0)
+ && (var = getvar(NULL, "boardtype"))) {
if (!strcmp(var, "bcm94710dev"))
si->sb.boardtype = BCM94710D_BOARD;
else if (!strcmp(var, "bcm94710ap"))
}
/* return bus type of sbh device */
-uint
-sb_bus(sb_t *sbh)
+uint sb_bus(sb_t * sbh)
{
sb_info_t *si;
}
/* return bus core type */
-uint
-sb_buscoretype(sb_t *sbh)
+uint sb_buscoretype(sb_t * sbh)
{
sb_info_t *si;
}
/* return bus core revision */
-uint
-sb_buscorerev(sb_t *sbh)
+uint sb_buscorerev(sb_t * sbh)
{
sb_info_t *si;
si = SB_INFO(sbh);
}
/* return list of found cores */
-uint
-sb_corelist(sb_t *sbh, uint coreid[])
+uint sb_corelist(sb_t * sbh, uint coreid[])
{
sb_info_t *si;
si = SB_INFO(sbh);
- bcopy((uchar*)si->coreid, (uchar*)coreid, (si->numcores * sizeof(uint)));
+ bcopy((uchar *) si->coreid, (uchar *) coreid,
+ (si->numcores * sizeof(uint)));
return (si->numcores);
}
/* return current register mapping */
-void *
-sb_coreregs(sb_t *sbh)
+void *sb_coreregs(sb_t * sbh)
{
sb_info_t *si;
return (si->curmap);
}
+#if defined(BCMDBG_ASSERT)
+/* traverse all cores to find and clear source of serror */
+static void sb_serr_clear(sb_info_t * si)
+{
+ sbconfig_t *sb;
+ uint origidx;
+ uint i, intr_val = 0;
+ void *corereg = NULL;
+
+ INTR_OFF(si, intr_val);
+ origidx = sb_coreidx(&si->sb);
+
+ for (i = 0; i < si->numcores; i++) {
+ corereg = sb_setcoreidx(&si->sb, i);
+ if (NULL != corereg) {
+ sb = REGS2SB(corereg);
+ if ((R_SBREG(si, &sb->sbtmstatehigh)) & SBTMH_SERR) {
+ AND_SBREG(si, &sb->sbtmstatehigh, ~SBTMH_SERR);
+ SB_ERROR(("sb_serr_clear: SError at core 0x%x\n", sb_coreid(&si->sb)));
+ }
+ }
+ }
+
+ sb_setcoreidx(&si->sb, origidx);
+ INTR_RESTORE(si, intr_val);
+}
+
+/*
+ * Check if any inband, outband or timeout errors has happened and clear them.
+ * Must be called with chip clk on !
+ */
+bool sb_taclear(sb_t * sbh)
+{
+ sb_info_t *si;
+ sbconfig_t *sb;
+ uint origidx;
+ uint intr_val = 0;
+ bool rc = FALSE;
+ uint32 inband = 0, serror = 0, timeout = 0;
+ void *corereg = NULL;
+ volatile uint32 imstate, tmstate;
+
+ si = SB_INFO(sbh);
+
+ if (BUSTYPE(si->sb.bustype) == PCI_BUS) {
+ volatile uint32 stcmd;
+
+ /* inband error is Target abort for PCI */
+ stcmd =
+ OSL_PCI_READ_CONFIG(si->osh, PCI_CFG_CMD, sizeof(uint32));
+ inband = stcmd & PCI_CFG_CMD_STAT_TA;
+ if (inband) {
+#ifdef BCMDBG
+ SB_ERROR(("inband:\n"));
+ sb_viewall((void *)si);
+#endif
+ OSL_PCI_WRITE_CONFIG(si->osh, PCI_CFG_CMD,
+ sizeof(uint32), stcmd);
+ }
+
+ /* serror */
+ stcmd =
+ OSL_PCI_READ_CONFIG(si->osh, PCI_INT_STATUS,
+ sizeof(uint32));
+ serror = stcmd & PCI_SBIM_STATUS_SERR;
+ if (serror) {
+#ifdef BCMDBG
+ SB_ERROR(("serror:\n"));
+ sb_viewall((void *)si);
+#endif
+ sb_serr_clear(si);
+ OSL_PCI_WRITE_CONFIG(si->osh, PCI_INT_STATUS,
+ sizeof(uint32), stcmd);
+ }
+
+ /* timeout */
+ imstate = sb_corereg(sbh, si->sb.buscoreidx,
+ SBCONFIGOFF + OFFSETOF(sbconfig_t,
+ sbimstate), 0, 0);
+ if ((imstate != 0xffffffff) && (imstate & (SBIM_IBE | SBIM_TO))) {
+ sb_corereg(sbh, si->sb.buscoreidx,
+ SBCONFIGOFF + OFFSETOF(sbconfig_t,
+ sbimstate), ~0,
+ (imstate & ~(SBIM_IBE | SBIM_TO)));
+ /* inband = imstate & SBIM_IBE; same as TA above */
+ timeout = imstate & SBIM_TO;
+ if (timeout) {
+#ifdef BCMDBG
+ SB_ERROR(("timeout:\n"));
+ sb_viewall((void *)si);
+#endif
+ }
+ }
+
+ if (inband) {
+ /* dump errlog for sonics >= 2.3 */
+ if (si->sb.sonicsrev == SONICS_2_2) ;
+ else {
+ uint32 imerrlog, imerrloga;
+ imerrlog =
+ sb_corereg(sbh, si->sb.buscoreidx,
+ SBIMERRLOG, 0, 0);
+ if (imerrlog & SBTMEL_EC) {
+ imerrloga =
+ sb_corereg(sbh, si->sb.buscoreidx,
+ SBIMERRLOGA, 0, 0);
+ /* clear errlog */
+ sb_corereg(sbh, si->sb.buscoreidx,
+ SBIMERRLOG, ~0, 0);
+ SB_ERROR(("sb_taclear: ImErrLog 0x%x, ImErrLogA 0x%x\n", imerrlog, imerrloga));
+ }
+ }
+ }
+
+ } else if (BUSTYPE(si->sb.bustype) == PCMCIA_BUS) {
+
+ INTR_OFF(si, intr_val);
+ origidx = sb_coreidx(sbh);
+
+ corereg = sb_setcore(sbh, SB_PCMCIA, 0);
+ if (NULL != corereg) {
+ sb = REGS2SB(corereg);
+
+ imstate = R_SBREG(si, &sb->sbimstate);
+ /* handle surprise removal */
+ if ((imstate != 0xffffffff)
+ && (imstate & (SBIM_IBE | SBIM_TO))) {
+ AND_SBREG(si, &sb->sbimstate,
+ ~(SBIM_IBE | SBIM_TO));
+ inband = imstate & SBIM_IBE;
+ timeout = imstate & SBIM_TO;
+ }
+ tmstate = R_SBREG(si, &sb->sbtmstatehigh);
+ if ((tmstate != 0xffffffff)
+ && (tmstate & SBTMH_INT_STATUS)) {
+ if (!inband) {
+ serror = 1;
+ sb_serr_clear(si);
+ }
+ OR_SBREG(si, &sb->sbtmstatelow, SBTML_INT_ACK);
+ AND_SBREG(si, &sb->sbtmstatelow,
+ ~SBTML_INT_ACK);
+ }
+ }
+ sb_setcoreidx(sbh, origidx);
+ INTR_RESTORE(si, intr_val);
+
+ }
+
+ if (inband | timeout | serror) {
+ rc = TRUE;
+ SB_ERROR(("sb_taclear: inband 0x%x, serror 0x%x, timeout 0x%x!\n", inband, serror, timeout));
+ }
+
+ return (rc);
+}
+#endif /* BCMDBG */
/* do buffered registers update */
-void
-sb_commit(sb_t *sbh)
+void sb_commit(sb_t * sbh)
{
sb_info_t *si;
uint origidx;
/* switch over to chipcommon core if there is one, else use pci */
if (si->sb.ccrev != NOREV) {
- chipcregs_t *ccregs = (chipcregs_t *)sb_setcore(sbh, SB_CC, 0);
+ chipcregs_t *ccregs = (chipcregs_t *) sb_setcore(sbh, SB_CC, 0);
/* do the buffer registers update */
W_REG(si->osh, &ccregs->broadcastaddress, SB_COMMIT);
W_REG(si->osh, &ccregs->broadcastdata, 0x0);
} else if (PCI(si)) {
- sbpciregs_t *pciregs = (sbpciregs_t *)sb_setcore(sbh, SB_PCI, 0);
+ sbpciregs_t *pciregs =
+ (sbpciregs_t *) sb_setcore(sbh, SB_PCI, 0);
/* do the buffer registers update */
W_REG(si->osh, &pciregs->bcastaddr, SB_COMMIT);
* bits - core specific bits that are set during and after reset sequence
* resetbits - core specific bits that are set only during reset sequence
*/
-void
-sb_core_reset(sb_t *sbh, uint32 bits, uint32 resetbits)
+void sb_core_reset(sb_t * sbh, uint32 bits, uint32 resetbits)
{
sb_info_t *si;
sbconfig_t *sb;
*/
/* set reset while enabling the clock and forcing them on throughout the core */
- W_SBREG(si, &sb->sbtmstatelow, (SBTML_FGC | SBTML_CLK | SBTML_RESET | bits | resetbits));
+ W_SBREG(si, &sb->sbtmstatelow,
+ (SBTML_FGC | SBTML_CLK | SBTML_RESET | bits | resetbits));
dummy = R_SBREG(si, &sb->sbtmstatelow);
OSL_DELAY(1);
OSL_DELAY(1);
}
-void
-sb_core_tofixup(sb_t *sbh)
+void sb_core_tofixup(sb_t * sbh)
{
sb_info_t *si;
sbconfig_t *sb;
if (BUSTYPE(si->sb.bustype) == SB_BUS) {
SET_SBREG(si, &sb->sbimconfiglow,
- SBIMCL_RTO_MASK | SBIMCL_STO_MASK,
- (0x5 << SBIMCL_RTO_SHIFT) | 0x3);
+ SBIMCL_RTO_MASK | SBIMCL_STO_MASK,
+ (0x5 << SBIMCL_RTO_SHIFT) | 0x3);
} else {
if (sb_coreid(sbh) == SB_PCI) {
SET_SBREG(si, &sb->sbimconfiglow,
- SBIMCL_RTO_MASK | SBIMCL_STO_MASK,
- (0x3 << SBIMCL_RTO_SHIFT) | 0x2);
+ SBIMCL_RTO_MASK | SBIMCL_STO_MASK,
+ (0x3 << SBIMCL_RTO_SHIFT) | 0x2);
} else {
- SET_SBREG(si, &sb->sbimconfiglow, (SBIMCL_RTO_MASK | SBIMCL_STO_MASK), 0);
+ SET_SBREG(si, &sb->sbimconfiglow,
+ (SBIMCL_RTO_MASK | SBIMCL_STO_MASK), 0);
}
}
#define TO_MASK (SBIMCL_RTO_MASK | SBIMCL_STO_MASK)
-uint32
-sb_set_initiator_to(sb_t *sbh, uint32 to)
+uint32 sb_set_initiator_to(sb_t * sbh, uint32 to, uint idx)
{
sb_info_t *si;
- uint origidx, idx;
+ uint origidx;
uint intr_val = 0;
uint32 tmp, ret = 0xffffffff;
sbconfig_t *sb;
return ret;
/* Figure out the master core */
- idx = BADIDX;
- switch (BUSTYPE(si->sb.bustype)) {
- case PCI_BUS:
- idx = si->sb.buscoreidx;
- break;
- case JTAG_BUS:
- idx = SB_CC_IDX;
- break;
- case PCMCIA_BUS:
- case SDIO_BUS:
- idx = sb_findcoreidx(si, SB_PCMCIA, 0);
- break;
- case SB_BUS:
- if ((idx = sb_findcoreidx(si, SB_MIPS33, 0)) == BADIDX)
- idx = sb_findcoreidx(si, SB_MIPS, 0);
- break;
- default:
- ASSERT(0);
+ if (idx == BADIDX) {
+ switch (BUSTYPE(si->sb.bustype)) {
+ case PCI_BUS:
+ idx = si->sb.buscoreidx;
+ break;
+ case JTAG_BUS:
+ idx = SB_CC_IDX;
+ break;
+ case PCMCIA_BUS:
+ case SDIO_BUS:
+ idx = sb_findcoreidx(sbh, SB_PCMCIA, 0);
+ break;
+ case SB_BUS:
+ if ((idx = sb_findcoreidx(sbh, SB_MIPS33, 0)) == BADIDX)
+ idx = sb_findcoreidx(sbh, SB_MIPS, 0);
+ break;
+ default:
+ ASSERT(0);
+ }
+ if (idx == BADIDX)
+ return ret;
}
- if (idx == BADIDX)
- return ret;
INTR_OFF(si, intr_val);
origidx = sb_coreidx(sbh);
return ret;
}
-void
-sb_core_disable(sb_t *sbh, uint32 bits)
+void sb_core_disable(sb_t * sbh, uint32 bits)
{
sb_info_t *si;
volatile uint32 dummy;
}
/* set reset and reject while enabling the clocks */
- W_SBREG(si, &sb->sbtmstatelow, (bits | SBTML_FGC | SBTML_CLK | rej | SBTML_RESET));
+ W_SBREG(si, &sb->sbtmstatelow,
+ (bits | SBTML_FGC | SBTML_CLK | rej | SBTML_RESET));
dummy = R_SBREG(si, &sb->sbtmstatelow);
OSL_DELAY(10);
if (R_SBREG(si, &sb->sbidlow) & SBIDL_INIT)
AND_SBREG(si, &sb->sbimstate, ~SBIM_RJ);
-disable:
+ disable:
/* leave reset and reject asserted */
W_SBREG(si, &sb->sbtmstatelow, (bits | rej | SBTML_RESET));
OSL_DELAY(1);
}
/* set chip watchdog reset timer to fire in 'ticks' backplane cycles */
-void
-sb_watchdog(sb_t *sbh, uint ticks)
+void sb_watchdog(sb_t * sbh, uint ticks)
{
sb_info_t *si = SB_INFO(sbh);
- /* make sure we come up in fast clock mode */
- sb_clkctl_clk(sbh, CLK_FAST);
+ /* make sure we come up in fast clock mode; or if clearing, clear clock */
+ if (ticks)
+ sb_clkctl_clk(sbh, CLK_FAST);
+ else
+ sb_clkctl_clk(sbh, CLK_DYNAMIC);
+
+ if (sbh->chip == BCM4328_CHIP_ID && ticks != 0)
+ sb_corereg(sbh, SB_CC_IDX, OFFSETOF(chipcregs_t, min_res_mask),
+ PMURES_BIT(RES4328_ROM_SWITCH),
+ PMURES_BIT(RES4328_ROM_SWITCH));
/* instant NMI */
switch (si->gpioid) {
case SB_CC:
-#ifdef __mips__
- if (sb_chip(sbh) == BCM4785_CHIP_ID && ticks <= 1)
- MTC0(C0_BROADCOM, 4, (1 << 22));
-#endif /* __mips__ */
- sb_corereg(si, 0, OFFSETOF(chipcregs_t, watchdog), ~0, ticks);
-#ifdef __mips__
- if (sb_chip(sbh) == BCM4785_CHIP_ID && ticks <= 1) {
- __asm__ __volatile__ (
- ".set\tmips3\n\t"
- "sync\n\t"
- "wait\n\t"
- ".set\tmips0"
- );
- while (1);
- }
-#endif /* __mips__ */
+ sb_corereg(sbh, SB_CC_IDX, OFFSETOF(chipcregs_t, watchdog), ~0,
+ ticks);
break;
case SB_EXTIF:
- sb_corereg(si, si->gpioidx, OFFSETOF(extifregs_t, watchdog), ~0, ticks);
+ sb_corereg(sbh, si->gpioidx, OFFSETOF(extifregs_t, watchdog),
+ ~0, ticks);
break;
}
}
/* initialize the pcmcia core */
-void
-sb_pcmcia_init(sb_t *sbh)
+void sb_pcmcia_init(sb_t * sbh)
{
sb_info_t *si;
uint8 cor = 0;
}
+void BCMINITFN(sb_pci_up) (sb_t * sbh) {
+ sb_info_t *si = SB_INFO(sbh);
+ if (si->gpioid == SB_EXTIF)
+ return;
+
+ /* if not pci bus, we're done */
+ if (BUSTYPE(si->sb.bustype) != PCI_BUS)
+ return;
+
+ if (FORCEHT_WAR32414(si))
+ sb_war32414_forceHT(sbh, 1);
+
+ if (PCIE_ASPMWARS(si) || si->sb.pr42780)
+ sb_pcieclkreq(sbh, 1, 0);
+
+ if (PCIE(si) &&
+ (((si->sb.chip == BCM4311_CHIP_ID) && (si->sb.chiprev == 2)) ||
+ ((si->sb.chip == BCM4312_CHIP_ID) && (si->sb.chiprev == 0))))
+ sb_set_initiator_to((void *)si, 0x3,
+ sb_findcoreidx((void *)si, SB_D11, 0));
+}
+
+/* Unconfigure and/or apply various WARs when system is going to sleep mode */
+void BCMUNINITFN(sb_pci_sleep) (sb_t * sbh) {
+ sb_info_t *si = SB_INFO(sbh);
+ if (si->gpioid == SB_EXTIF)
+ return;
+ uint32 w;
+
+ /* if not pci bus, we're done */
+ if (!PCIE(si) || !PCIE_ASPMWARS(si))
+ return;
+
+ w = OSL_PCI_READ_CONFIG(si->osh, si->pciecap_lcreg_offset,
+ sizeof(uint32));
+ w &= ~PCIE_CAP_LCREG_ASPML1;
+ OSL_PCI_WRITE_CONFIG(si->osh, si->pciecap_lcreg_offset, sizeof(uint32),
+ w);
+}
+
+/* Unconfigure and/or apply various WARs when going down */
+void BCMINITFN(sb_pci_down) (sb_t * sbh) {
+ sb_info_t *si = SB_INFO(sbh);
+ if (si->gpioid == SB_EXTIF)
+ return;
+
+ /* if not pci bus, we're done */
+ if (BUSTYPE(si->sb.bustype) != PCI_BUS)
+ return;
+
+ if (FORCEHT_WAR32414(si))
+ sb_war32414_forceHT(sbh, 0);
+
+ if (si->pr42767_war) {
+ sb_pcieclkreq(sbh, 1, 1);
+ si->pr42767_war = FALSE;
+ } else if (si->sb.pr42780) {
+ sb_pcieclkreq(sbh, 1, 1);
+ }
+}
+
+static void BCMINITFN(sb_war42767_clkreq) (sb_t * sbh) {
+ sbpcieregs_t *pcieregs;
+ uint16 val16, *reg16;
+ sb_info_t *si;
+
+ si = SB_INFO(sbh);
+
+ /* if not pcie bus, we're done */
+ if (!PCIE(si) || !PCIE_ASPMWARS(si))
+ return;
+
+ pcieregs = (sbpcieregs_t *) sb_setcoreidx(sbh, si->sb.buscoreidx);
+ reg16 = &pcieregs->sprom[SRSH_CLKREQ_OFFSET];
+ val16 = R_REG(si->osh, reg16);
+ /* if clockreq is not advertized advertize it */
+ if (!si->pcie_war_ovr) {
+ val16 |= SRSH_CLKREQ_ENB;
+ si->pr42767_war = TRUE;
+
+ si->sb.pr42780 = TRUE;
+ } else
+ val16 &= ~SRSH_CLKREQ_ENB;
+ W_REG(si->osh, reg16, val16);
+}
+
+static void BCMINITFN(sb_war42767) (sb_t * sbh) {
+ uint32 w = 0;
+ sb_info_t *si;
+
+ si = SB_INFO(sbh);
+
+ /* if not pcie bus, we're done */
+ if (!PCIE(si) || !PCIE_ASPMWARS(si))
+ return;
+
+ sb_pcie_mdioread(si, MDIODATA_DEV_PLL, SERDES_PLL_CTRL, &w);
+ if (w & PLL_CTRL_FREQDET_EN) {
+ w &= ~PLL_CTRL_FREQDET_EN;
+ sb_pcie_mdiowrite(si, MDIODATA_DEV_PLL, SERDES_PLL_CTRL, w);
+ }
+}
/*
* Configure the pci core for pci client (NIC) action
* coremask is the bitvec of cores by index to be enabled.
*/
-void
-BCMINITFN(sb_pci_setup)(sb_t *sbh, uint coremask)
-{
+void BCMINITFN(sb_pci_setup) (sb_t * sbh, uint coremask) {
sb_info_t *si;
sbconfig_t *sb;
sbpciregs_t *pciregs;
uint32 sbflag;
uint32 w;
uint idx;
- int reg_val;
si = SB_INFO(sbh);
sbflag = R_SBREG(si, &sb->sbtpsflag) & SBTPS_NUM0_MASK;
/* switch over to pci core */
- pciregs = (sbpciregs_t*) sb_setcoreidx(sbh, si->sb.buscoreidx);
+ pciregs = (sbpciregs_t *) sb_setcoreidx(sbh, si->sb.buscoreidx);
sb = REGS2SB(pciregs);
/*
}
if (PCI(si)) {
- OR_REG(si->osh, &pciregs->sbtopci2, (SBTOPCI_PREF|SBTOPCI_BURST));
+ OR_REG(si->osh, &pciregs->sbtopci2,
+ (SBTOPCI_PREF | SBTOPCI_BURST));
if (si->sb.buscorerev >= 11)
- OR_REG(si->osh, &pciregs->sbtopci2, SBTOPCI_RC_READMULTI);
+ OR_REG(si->osh, &pciregs->sbtopci2,
+ SBTOPCI_RC_READMULTI);
if (si->sb.buscorerev < 5) {
- SET_SBREG(si, &sb->sbimconfiglow, SBIMCL_RTO_MASK | SBIMCL_STO_MASK,
- (0x3 << SBIMCL_RTO_SHIFT) | 0x2);
+ SET_SBREG(si, &sb->sbimconfiglow,
+ SBIMCL_RTO_MASK | SBIMCL_STO_MASK,
+ (0x3 << SBIMCL_RTO_SHIFT) | 0x2);
sb_commit(sbh);
}
}
-#ifdef PCIE_SUPPOER
/* PCIE workarounds */
if (PCIE(si)) {
if ((si->sb.buscorerev == 0) || (si->sb.buscorerev == 1)) {
- reg_val = sb_pcie_readreg((void *)sbh, (void *)PCIE_PCIEREGS,
- PCIE_TLP_WORKAROUNDSREG);
- reg_val |= 0x8;
- sb_pcie_writereg((void *)sbh, (void *)PCIE_PCIEREGS,
- PCIE_TLP_WORKAROUNDSREG, reg_val);
+ w = sb_pcie_readreg((void *)(uintptr) sbh,
+ (void *)(uintptr) PCIE_PCIEREGS,
+ PCIE_TLP_WORKAROUNDSREG);
+ w |= 0x8;
+ sb_pcie_writereg((void *)(uintptr) sbh,
+ (void *)(uintptr) PCIE_PCIEREGS,
+ PCIE_TLP_WORKAROUNDSREG, w);
}
if (si->sb.buscorerev == 1) {
- reg_val = sb_pcie_readreg((void *)sbh, (void *)PCIE_PCIEREGS,
- PCIE_DLLP_LCREG);
- reg_val |= (0x40);
- sb_pcie_writereg(sbh, (void *)PCIE_PCIEREGS, PCIE_DLLP_LCREG, reg_val);
+ w = sb_pcie_readreg((void *)(uintptr) sbh,
+ (void *)(uintptr) PCIE_PCIEREGS,
+ PCIE_DLLP_LCREG);
+ w |= (0x40);
+ sb_pcie_writereg((void *)(uintptr) sbh,
+ (void *)(uintptr) PCIE_PCIEREGS,
+ PCIE_DLLP_LCREG, w);
}
if (si->sb.buscorerev == 0)
sb_war30841(si);
+
+ if ((si->sb.buscorerev >= 3) && (si->sb.buscorerev <= 5)) {
+ w = sb_pcie_readreg((void *)(uintptr) sbh,
+ (void *)(uintptr) PCIE_PCIEREGS,
+ PCIE_DLLP_PMTHRESHREG);
+ w &= ~(PCIE_L1THRESHOLDTIME_MASK);
+ w |= (PCIE_L1THRESHOLD_WARVAL <<
+ PCIE_L1THRESHOLDTIME_SHIFT);
+ sb_pcie_writereg((void *)(uintptr) sbh,
+ (void *)(uintptr) PCIE_PCIEREGS,
+ PCIE_DLLP_PMTHRESHREG, w);
+
+ sb_war43448(sbh);
+
+ sb_war42767(sbh);
+
+ sb_war43448_aspm(sbh);
+ sb_war42767_clkreq(sbh);
+ }
}
-#endif
/* switch back to previous core */
sb_setcoreidx(sbh, idx);
}
-uint32
-sb_base(uint32 admatch)
+uint32 sb_base(uint32 admatch)
{
uint32 base;
uint type;
return (base);
}
-uint32
-sb_size(uint32 admatch)
+uint32 sb_size(uint32 admatch)
{
uint32 size;
uint type;
size = 0;
if (type == 0) {
- size = 1 << (((admatch & SBAM_ADINT0_MASK) >> SBAM_ADINT0_SHIFT) + 1);
+ size =
+ 1 << (((admatch & SBAM_ADINT0_MASK) >> SBAM_ADINT0_SHIFT) +
+ 1);
} else if (type == 1) {
ASSERT(!(admatch & SBAM_ADNEG)); /* neg not supported */
- size = 1 << (((admatch & SBAM_ADINT1_MASK) >> SBAM_ADINT1_SHIFT) + 1);
+ size =
+ 1 << (((admatch & SBAM_ADINT1_MASK) >> SBAM_ADINT1_SHIFT) +
+ 1);
} else if (type == 2) {
ASSERT(!(admatch & SBAM_ADNEG)); /* neg not supported */
- size = 1 << (((admatch & SBAM_ADINT2_MASK) >> SBAM_ADINT2_SHIFT) + 1);
+ size =
+ 1 << (((admatch & SBAM_ADINT2_MASK) >> SBAM_ADINT2_SHIFT) +
+ 1);
}
return (size);
}
/* return the core-type instantiation # of the current core */
-uint
-sb_coreunit(sb_t *sbh)
+uint sb_coreunit(sb_t * sbh)
{
sb_info_t *si;
uint idx;
return (coreunit);
}
-static INLINE uint32
-factor6(uint32 x)
-{
+static uint32 BCMINITFN(factor6) (uint32 x) {
switch (x) {
- case CC_F6_2: return 2;
- case CC_F6_3: return 3;
- case CC_F6_4: return 4;
- case CC_F6_5: return 5;
- case CC_F6_6: return 6;
- case CC_F6_7: return 7;
- default: return 0;
+ case CC_F6_2:
+ return 2;
+ case CC_F6_3:
+ return 3;
+ case CC_F6_4:
+ return 4;
+ case CC_F6_5:
+ return 5;
+ case CC_F6_6:
+ return 6;
+ case CC_F6_7:
+ return 7;
+ default:
+ return 0;
}
}
/* calculate the speed the SB would run at given a set of clockcontrol values */
-uint32
-sb_clock_rate(uint32 pll_type, uint32 n, uint32 m)
-{
+uint32 BCMINITFN(sb_clock_rate) (uint32 pll_type, uint32 n, uint32 m) {
uint32 n1, n2, clock, m1, m2, m3, mc;
n1 = n & CN_N1_MASK;
else
return CC_T6_M0;
} else if ((pll_type == PLL_TYPE1) ||
- (pll_type == PLL_TYPE3) ||
- (pll_type == PLL_TYPE4) ||
- (pll_type == PLL_TYPE7)) {
+ (pll_type == PLL_TYPE3) ||
+ (pll_type == PLL_TYPE4) || (pll_type == PLL_TYPE7)) {
n1 = factor6(n1);
n2 += CC_F5_BIAS;
} else if (pll_type == PLL_TYPE2) {
} else
ASSERT(0);
/* PLL types 3 and 7 use BASE2 (25Mhz) */
- if ((pll_type == PLL_TYPE3) ||
- (pll_type == PLL_TYPE7)) {
- clock = CC_CLOCK_BASE2 * n1 * n2;
+ if ((pll_type == PLL_TYPE3) || (pll_type == PLL_TYPE7)) {
+ clock = CC_CLOCK_BASE2 * n1 * n2;
} else
clock = CC_CLOCK_BASE1 * n1 * n2;
if ((pll_type == PLL_TYPE1) ||
(pll_type == PLL_TYPE3) ||
- (pll_type == PLL_TYPE4) ||
- (pll_type == PLL_TYPE7)) {
+ (pll_type == PLL_TYPE4) || (pll_type == PLL_TYPE7)) {
m1 = factor6(m1);
if ((pll_type == PLL_TYPE1) || (pll_type == PLL_TYPE3))
m2 += CC_F5_BIAS;
m3 = factor6(m3);
switch (mc) {
- case CC_MC_BYPASS: return (clock);
- case CC_MC_M1: return (clock / m1);
- case CC_MC_M1M2: return (clock / (m1 * m2));
- case CC_MC_M1M2M3: return (clock / (m1 * m2 * m3));
- case CC_MC_M1M3: return (clock / (m1 * m3));
- default: return (0);
+ case CC_MC_BYPASS:
+ return (clock);
+ case CC_MC_M1:
+ return (clock / m1);
+ case CC_MC_M1M2:
+ return (clock / (m1 * m2));
+ case CC_MC_M1M2M3:
+ return (clock / (m1 * m2 * m3));
+ case CC_MC_M1M3:
+ return (clock / (m1 * m3));
+ default:
+ return (0);
}
} else {
ASSERT(pll_type == PLL_TYPE2);
}
/* returns the current speed the SB is running at */
-uint32
-sb_clock(sb_t *sbh)
-{
+uint32 BCMINITFN(sb_clock) (sb_t * sbh) {
sb_info_t *si;
extifregs_t *eir;
chipcregs_t *cc;
uint32 n, m;
uint idx;
- uint32 pll_type, rate;
+ uint32 cap, pll_type, rate;
uint intr_val = 0;
si = SB_INFO(sbh);
n = R_REG(si->osh, &eir->clockcontrol_n);
m = R_REG(si->osh, &eir->clockcontrol_sb);
} else if ((cc = (chipcregs_t *) sb_setcore(sbh, SB_CC, 0))) {
- pll_type = R_REG(si->osh, &cc->capabilities) & CAP_PLL_MASK;
+
+ cap = R_REG(si->osh, &cc->capabilities);
+
+ if (cap & CC_CAP_PMU) {
+
+ if (sb_chip(sbh) == BCM5354_CHIP_ID) {
+ /* 5354 has a constant sb clock of 120MHz */
+ rate = 120000000;
+ goto end;
+ } else
+ if (sb_chip(sbh) == BCM4328_CHIP_ID) {
+ rate = 80000000;
+ goto end;
+ } else
+ ASSERT(0);
+ }
+
+ pll_type = cap & CC_CAP_PLL_MASK;
if (pll_type == PLL_NONE) {
INTR_RESTORE(si, intr_val);
return 80000000;
n = R_REG(si->osh, &cc->clockcontrol_n);
if (pll_type == PLL_TYPE6)
m = R_REG(si->osh, &cc->clockcontrol_m3);
- else if ((pll_type == PLL_TYPE3) && !(BCMINIT(sb_chip)(sbh) == 0x5365))
+ else if (pll_type == PLL_TYPE3
+ && !(BCMINIT(sb_chip) (sbh) == 0x5365))
m = R_REG(si->osh, &cc->clockcontrol_m2);
else
m = R_REG(si->osh, &cc->clockcontrol_sb);
}
/* calculate rate */
- if (BCMINIT(sb_chip)(sbh) == 0x5365)
+ if (BCMINIT(sb_chip) (sbh) == 0x5365)
rate = 100000000;
else {
rate = sb_clock_rate(pll_type, n, m);
rate = rate / 2;
}
+ end:
/* switch back to previous core */
sb_setcoreidx(sbh, idx);
return rate;
}
+uint32 BCMINITFN(sb_alp_clock) (sb_t * sbh) {
+ uint32 clock = ALP_CLOCK;
+
+ if (sbh->cccaps & CC_CAP_PMU)
+ clock = sb_pmu_alp_clock(sbh, sb_osh(sbh));
+
+ return clock;
+}
+
/* change logical "focus" to the gpio core for optimized access */
-void*
-sb_gpiosetcore(sb_t *sbh)
+void *sb_gpiosetcore(sb_t * sbh)
{
sb_info_t *si;
}
/* mask&set gpiocontrol bits */
-uint32
-sb_gpiocontrol(sb_t *sbh, uint32 mask, uint32 val, uint8 priority)
+uint32 sb_gpiocontrol(sb_t * sbh, uint32 mask, uint32 val, uint8 priority)
{
sb_info_t *si;
uint regoff;
si = SB_INFO(sbh);
regoff = 0;
- priority = GPIO_DRV_PRIORITY; /* compatibility hack */
-
- /* gpios could be shared on router platforms */
- if ((BUSTYPE(si->sb.bustype) == SB_BUS) && (val || mask)) {
+ /* gpios could be shared on router platforms
+ * ignore reservation if it's high priority (e.g., test apps)
+ */
+ if ((priority != GPIO_HI_PRIORITY) &&
+ (BUSTYPE(si->sb.bustype) == SB_BUS) && (val || mask)) {
mask = priority ? (sb_gpioreservation & mask) :
- ((sb_gpioreservation | mask) & ~(sb_gpioreservation));
+ ((sb_gpioreservation | mask) & ~(sb_gpioreservation));
val &= mask;
}
return (0);
}
- return (sb_corereg(si, si->gpioidx, regoff, mask, val));
+ return (sb_corereg(sbh, si->gpioidx, regoff, mask, val));
}
/* mask&set gpio output enable bits */
-uint32
-sb_gpioouten(sb_t *sbh, uint32 mask, uint32 val, uint8 priority)
+uint32 sb_gpioouten(sb_t * sbh, uint32 mask, uint32 val, uint8 priority)
{
sb_info_t *si;
uint regoff;
si = SB_INFO(sbh);
regoff = 0;
- priority = GPIO_DRV_PRIORITY; /* compatibility hack */
-
- /* gpios could be shared on router platforms */
- if ((BUSTYPE(si->sb.bustype) == SB_BUS) && (val || mask)) {
+ /* gpios could be shared on router platforms
+ * ignore reservation if it's high priority (e.g., test apps)
+ */
+ if ((priority != GPIO_HI_PRIORITY) &&
+ (BUSTYPE(si->sb.bustype) == SB_BUS) && (val || mask)) {
mask = priority ? (sb_gpioreservation & mask) :
- ((sb_gpioreservation | mask) & ~(sb_gpioreservation));
+ ((sb_gpioreservation | mask) & ~(sb_gpioreservation));
val &= mask;
}
break;
}
- return (sb_corereg(si, si->gpioidx, regoff, mask, val));
+ return (sb_corereg(sbh, si->gpioidx, regoff, mask, val));
}
/* mask&set gpio output bits */
-uint32
-sb_gpioout(sb_t *sbh, uint32 mask, uint32 val, uint8 priority)
+uint32 sb_gpioout(sb_t * sbh, uint32 mask, uint32 val, uint8 priority)
{
sb_info_t *si;
uint regoff;
si = SB_INFO(sbh);
regoff = 0;
- priority = GPIO_DRV_PRIORITY; /* compatibility hack */
-
- /* gpios could be shared on router platforms */
- if ((BUSTYPE(si->sb.bustype) == SB_BUS) && (val || mask)) {
+ /* gpios could be shared on router platforms
+ * ignore reservation if it's high priority (e.g., test apps)
+ */
+ if ((priority != GPIO_HI_PRIORITY) &&
+ (BUSTYPE(si->sb.bustype) == SB_BUS) && (val || mask)) {
mask = priority ? (sb_gpioreservation & mask) :
- ((sb_gpioreservation | mask) & ~(sb_gpioreservation));
+ ((sb_gpioreservation | mask) & ~(sb_gpioreservation));
val &= mask;
}
break;
}
- return (sb_corereg(si, si->gpioidx, regoff, mask, val));
+ return (sb_corereg(sbh, si->gpioidx, regoff, mask, val));
}
/* reserve one gpio */
-uint32
-sb_gpioreserve(sb_t *sbh, uint32 gpio_bitmask, uint8 priority)
+uint32 sb_gpioreserve(sb_t * sbh, uint32 gpio_bitmask, uint8 priority)
{
sb_info_t *si;
si = SB_INFO(sbh);
- priority = GPIO_DRV_PRIORITY; /* compatibility hack */
-
/* only cores on SB_BUS share GPIO's and only applcation users need to
* reserve/release GPIO
*/
- if ((BUSTYPE(si->sb.bustype) != SB_BUS) || (!priority)) {
+ if ((BUSTYPE(si->sb.bustype) != SB_BUS) || (!priority)) {
ASSERT((BUSTYPE(si->sb.bustype) == SB_BUS) && (priority));
return -1;
}
/* make sure only one bit is set */
if ((!gpio_bitmask) || ((gpio_bitmask) & (gpio_bitmask - 1))) {
- ASSERT((gpio_bitmask) && !((gpio_bitmask) & (gpio_bitmask - 1)));
+ ASSERT((gpio_bitmask)
+ && !((gpio_bitmask) & (gpio_bitmask - 1)));
return -1;
}
* persists till some one overwrites it
*/
-uint32
-sb_gpiorelease(sb_t *sbh, uint32 gpio_bitmask, uint8 priority)
+uint32 sb_gpiorelease(sb_t * sbh, uint32 gpio_bitmask, uint8 priority)
{
sb_info_t *si;
si = SB_INFO(sbh);
- priority = GPIO_DRV_PRIORITY; /* compatibility hack */
-
/* only cores on SB_BUS share GPIO's and only applcation users need to
* reserve/release GPIO
*/
- if ((BUSTYPE(si->sb.bustype) != SB_BUS) || (!priority)) {
+ if ((BUSTYPE(si->sb.bustype) != SB_BUS) || (!priority)) {
ASSERT((BUSTYPE(si->sb.bustype) == SB_BUS) && (priority));
return -1;
}
/* make sure only one bit is set */
if ((!gpio_bitmask) || ((gpio_bitmask) & (gpio_bitmask - 1))) {
- ASSERT((gpio_bitmask) && !((gpio_bitmask) & (gpio_bitmask - 1)));
+ ASSERT((gpio_bitmask)
+ && !((gpio_bitmask) & (gpio_bitmask - 1)));
return -1;
}
}
/* return the current gpioin register value */
-uint32
-sb_gpioin(sb_t *sbh)
+uint32 sb_gpioin(sb_t * sbh)
{
sb_info_t *si;
uint regoff;
break;
}
- return (sb_corereg(si, si->gpioidx, regoff, 0, 0));
+ return (sb_corereg(sbh, si->gpioidx, regoff, 0, 0));
}
/* mask&set gpio interrupt polarity bits */
-uint32
-sb_gpiointpolarity(sb_t *sbh, uint32 mask, uint32 val, uint8 priority)
+uint32 sb_gpiointpolarity(sb_t * sbh, uint32 mask, uint32 val, uint8 priority)
{
sb_info_t *si;
uint regoff;
si = SB_INFO(sbh);
regoff = 0;
- priority = GPIO_DRV_PRIORITY; /* compatibility hack */
-
/* gpios could be shared on router platforms */
if ((BUSTYPE(si->sb.bustype) == SB_BUS) && (val || mask)) {
mask = priority ? (sb_gpioreservation & mask) :
- ((sb_gpioreservation | mask) & ~(sb_gpioreservation));
+ ((sb_gpioreservation | mask) & ~(sb_gpioreservation));
val &= mask;
}
break;
}
- return (sb_corereg(si, si->gpioidx, regoff, mask, val));
+ return (sb_corereg(sbh, si->gpioidx, regoff, mask, val));
}
/* mask&set gpio interrupt mask bits */
-uint32
-sb_gpiointmask(sb_t *sbh, uint32 mask, uint32 val, uint8 priority)
+uint32 sb_gpiointmask(sb_t * sbh, uint32 mask, uint32 val, uint8 priority)
{
sb_info_t *si;
uint regoff;
si = SB_INFO(sbh);
regoff = 0;
- priority = GPIO_DRV_PRIORITY; /* compatibility hack */
-
/* gpios could be shared on router platforms */
if ((BUSTYPE(si->sb.bustype) == SB_BUS) && (val || mask)) {
mask = priority ? (sb_gpioreservation & mask) :
- ((sb_gpioreservation | mask) & ~(sb_gpioreservation));
+ ((sb_gpioreservation | mask) & ~(sb_gpioreservation));
val &= mask;
}
break;
}
- return (sb_corereg(si, si->gpioidx, regoff, mask, val));
+ return (sb_corereg(sbh, si->gpioidx, regoff, mask, val));
}
/* assign the gpio to an led */
-uint32
-sb_gpioled(sb_t *sbh, uint32 mask, uint32 val)
+uint32 sb_gpioled(sb_t * sbh, uint32 mask, uint32 val)
{
sb_info_t *si;
return -1;
/* gpio led powersave reg */
- return (sb_corereg(si, 0, OFFSETOF(chipcregs_t, gpiotimeroutmask), mask, val));
+ return (sb_corereg
+ (sbh, SB_CC_IDX, OFFSETOF(chipcregs_t, gpiotimeroutmask), mask,
+ val));
}
-/* mask & set gpio timer val */
-uint32
-sb_gpiotimerval(sb_t *sbh, uint32 mask, uint32 gpiotimerval)
+/* mask&set gpio timer val */
+uint32 sb_gpiotimerval(sb_t * sbh, uint32 mask, uint32 gpiotimerval)
{
sb_info_t *si;
si = SB_INFO(sbh);
if (si->sb.ccrev < 16)
return -1;
- return (sb_corereg(si, 0, OFFSETOF(chipcregs_t, gpiotimerval), mask, gpiotimerval));
+ return (sb_corereg(sbh, SB_CC_IDX,
+ OFFSETOF(chipcregs_t, gpiotimerval), mask,
+ gpiotimerval));
}
-
-/* return the slow clock source - LPO, XTAL, or PCI */
-static uint
-sb_slowclk_src(sb_info_t *si)
+uint32 sb_gpiopull(sb_t * sbh, bool updown, uint32 mask, uint32 val)
{
- chipcregs_t *cc;
-
+ sb_info_t *si;
+ uint offs;
- ASSERT(sb_coreid(&si->sb) == SB_CC);
+ si = SB_INFO(sbh);
+ if (si->sb.ccrev < 20)
+ return -1;
- if (si->sb.ccrev < 6) {
- if ((BUSTYPE(si->sb.bustype) == PCI_BUS) &&
- (OSL_PCI_READ_CONFIG(si->osh, PCI_GPIO_OUT, sizeof(uint32)) &
- PCI_CFG_GPIO_SCS))
- return (SCC_SS_PCI);
- else
- return (SCC_SS_XTAL);
- } else if (si->sb.ccrev < 10) {
- cc = (chipcregs_t*) sb_setcoreidx(&si->sb, si->curidx);
- return (R_REG(si->osh, &cc->slow_clk_ctl) & SCC_SS_MASK);
- } else /* Insta-clock */
- return (SCC_SS_XTAL);
+ offs =
+ (updown ? OFFSETOF(chipcregs_t, gpiopulldown) :
+ OFFSETOF(chipcregs_t, gpiopullup));
+ return (sb_corereg(sbh, SB_CC_IDX, offs, mask, val));
}
-/* return the ILP (slowclock) min or max frequency */
-static uint
-sb_slowclk_freq(sb_info_t *si, bool max)
+uint32 sb_gpioevent(sb_t * sbh, uint regtype, uint32 mask, uint32 val)
{
- chipcregs_t *cc;
- uint32 slowclk;
- uint div;
+ sb_info_t *si;
+ uint offs;
+ si = SB_INFO(sbh);
+ if (si->sb.ccrev < 11)
+ return -1;
- ASSERT(sb_coreid(&si->sb) == SB_CC);
+ if (regtype == GPIO_REGEVT)
+ offs = OFFSETOF(chipcregs_t, gpioevent);
+ else if (regtype == GPIO_REGEVT_INTMSK)
+ offs = OFFSETOF(chipcregs_t, gpioeventintmask);
+ else if (regtype == GPIO_REGEVT_INTPOL)
+ offs = OFFSETOF(chipcregs_t, gpioeventintpolarity);
+ else
+ return -1;
- cc = (chipcregs_t*) sb_setcoreidx(&si->sb, si->curidx);
+ return (sb_corereg(sbh, SB_CC_IDX, offs, mask, val));
+}
- /* shouldn't be here unless we've established the chip has dynamic clk control */
- ASSERT(R_REG(si->osh, &cc->capabilities) & CAP_PWR_CTL);
+void *BCMINITFN(sb_gpio_handler_register) (sb_t * sbh, uint32 event,
+ bool level, gpio_handler_t cb,
+ void *arg) {
+ sb_info_t *si;
+ gpioh_item_t *gi;
- slowclk = sb_slowclk_src(si);
- if (si->sb.ccrev < 6) {
- if (slowclk == SCC_SS_PCI)
- return (max? (PCIMAXFREQ/64) : (PCIMINFREQ/64));
- else
- return (max? (XTALMAXFREQ/32) : (XTALMINFREQ/32));
- } else if (si->sb.ccrev < 10) {
- div = 4 * (((R_REG(si->osh, &cc->slow_clk_ctl) & SCC_CD_MASK) >> SCC_CD_SHIFT) + 1);
- if (slowclk == SCC_SS_LPO)
- return (max? LPOMAXFREQ : LPOMINFREQ);
- else if (slowclk == SCC_SS_XTAL)
- return (max? (XTALMAXFREQ/div) : (XTALMINFREQ/div));
- else if (slowclk == SCC_SS_PCI)
- return (max? (PCIMAXFREQ/div) : (PCIMINFREQ/div));
- else
- ASSERT(0);
- } else {
- /* Chipc rev 10 is InstaClock */
- div = R_REG(si->osh, &cc->system_clk_ctl) >> SYCC_CD_SHIFT;
- div = 4 * (div + 1);
- return (max ? XTALMAXFREQ : (XTALMINFREQ/div));
- }
- return (0);
-}
+ ASSERT(event);
+ ASSERT(cb);
-static void
-BCMINITFN(sb_clkctl_setdelay)(sb_info_t *si, void *chipcregs)
-{
- chipcregs_t * cc;
- uint slowmaxfreq, pll_delay, slowclk;
+ si = SB_INFO(sbh);
+ if (si->sb.ccrev < 11)
+ return NULL;
+
+ if ((gi = MALLOC(si->osh, sizeof(gpioh_item_t))) == NULL)
+ return NULL;
+
+ bzero(gi, sizeof(gpioh_item_t));
+ gi->event = event;
+ gi->handler = cb;
+ gi->arg = arg;
+ gi->level = level;
+
+ gi->next = si->gpioh_head;
+ si->gpioh_head = gi;
+
+ return (void *)(gi);
+}
+
+void BCMINITFN(sb_gpio_handler_unregister) (sb_t * sbh, void *gpioh) {
+ sb_info_t *si;
+ gpioh_item_t *p, *n;
+
+ si = SB_INFO(sbh);
+ if (si->sb.ccrev < 11)
+ return;
+
+ ASSERT(si->gpioh_head);
+ if ((void *)si->gpioh_head == gpioh) {
+ si->gpioh_head = si->gpioh_head->next;
+ MFREE(si->osh, gpioh, sizeof(gpioh_item_t));
+ return;
+ } else {
+ p = si->gpioh_head;
+ n = p->next;
+ while (n) {
+ if ((void *)n == gpioh) {
+ p->next = n->next;
+ MFREE(si->osh, gpioh, sizeof(gpioh_item_t));
+ return;
+ }
+ p = n;
+ n = n->next;
+ }
+ }
+
+ ASSERT(0); /* Not found in list */
+}
+
+void sb_gpio_handler_process(sb_t * sbh)
+{
+ sb_info_t *si;
+ gpioh_item_t *h;
+ uint32 status;
+ uint32 level = sb_gpioin(sbh);
+ uint32 edge = sb_gpioevent(sbh, GPIO_REGEVT, 0, 0);
+
+ si = SB_INFO(sbh);
+ for (h = si->gpioh_head; h != NULL; h = h->next) {
+ if (h->handler) {
+ status = (h->level ? level : edge);
+
+ if (status & h->event)
+ h->handler(status, h->arg);
+ }
+ }
+
+ sb_gpioevent(sbh, GPIO_REGEVT, edge, edge); /* clear edge-trigger status */
+}
+
+uint32 sb_gpio_int_enable(sb_t * sbh, bool enable)
+{
+ sb_info_t *si;
+ uint offs;
+
+ si = SB_INFO(sbh);
+ if (si->sb.ccrev < 11)
+ return -1;
+
+ offs = OFFSETOF(chipcregs_t, intmask);
+ return (sb_corereg
+ (sbh, SB_CC_IDX, offs, CI_GPIO, (enable ? CI_GPIO : 0)));
+}
+
+#ifdef BCMDBG
+void sb_dump(sb_t * sbh, struct bcmstrbuf *b)
+{
+ sb_info_t *si;
+ uint i;
+
+ si = SB_INFO(sbh);
+
+ bcm_bprintf(b,
+ "si %p chip 0x%x chiprev 0x%x boardtype 0x%x boardvendor 0x%x bus %d\n",
+ si, si->sb.chip, si->sb.chiprev, si->sb.boardtype,
+ si->sb.boardvendor, si->sb.bustype);
+ bcm_bprintf(b, "osh %p curmap %p\n", si->osh, si->curmap);
+ bcm_bprintf(b,
+ "sonicsrev %d ccrev %d buscoretype 0x%x buscorerev %d curidx %d\n",
+ si->sb.sonicsrev, si->sb.ccrev, si->sb.buscoretype,
+ si->sb.buscorerev, si->curidx);
+
+ bcm_bprintf(b, "forceHT %d ASPM overflowPR42780 %d pcie_polarity %d\n",
+ si->sb.pr32414, si->sb.pr42780, si->pcie_polarity);
+
+ bcm_bprintf(b, "cores: ");
+ for (i = 0; i < si->numcores; i++)
+ bcm_bprintf(b, "0x%x ", si->coreid[i]);
+ bcm_bprintf(b, "\n");
+}
+
+/* print interesting sbconfig registers */
+void sb_dumpregs(sb_t * sbh, struct bcmstrbuf *b)
+{
+ sb_info_t *si;
+ sbconfig_t *sb;
+ uint origidx;
+ uint curidx, i, intr_val = 0;
+
+ si = SB_INFO(sbh);
+ origidx = si->curidx;
+
+ INTR_OFF(si, intr_val);
+ curidx = si->curidx;
+
+ for (i = 0; i < si->numcores; i++) {
+ sb = REGS2SB(sb_setcoreidx(sbh, i));
+
+ bcm_bprintf(b, "core 0x%x: \n", si->coreid[i]);
+ bcm_bprintf(b,
+ "sbtmstatelow 0x%x sbtmstatehigh 0x%x sbidhigh 0x%x "
+ "sbimstate 0x%x\n sbimconfiglow 0x%x sbimconfighigh 0x%x\n",
+ R_SBREG(si, &sb->sbtmstatelow), R_SBREG(si,
+ &sb->
+ sbtmstatehigh),
+ R_SBREG(si, &sb->sbidhigh), R_SBREG(si,
+ &sb->sbimstate),
+ R_SBREG(si, &sb->sbimconfiglow), R_SBREG(si,
+ &sb->
+ sbimconfighigh));
+ }
+
+ sb_setcoreidx(sbh, origidx);
+ INTR_RESTORE(si, intr_val);
+}
+
+void sb_view(sb_t * sbh)
+{
+ sb_info_t *si;
+ sbconfig_t *sb;
+
+ si = SB_INFO(sbh);
+ sb = REGS2SB(si->curmap);
+
+ if (si->sb.sonicsrev > SONICS_2_2)
+ SB_ERROR(("sbimerrlog 0x%x sbimerrloga 0x%x\n",
+ sb_corereg(sbh, sb_coreidx(&si->sb), SBIMERRLOG, 0,
+ 0), sb_corereg(sbh, sb_coreidx(&si->sb),
+ SBIMERRLOGA, 0, 0)));
+
+ SB_ERROR(("sbipsflag 0x%x sbtpsflag 0x%x sbtmerrloga 0x%x sbtmerrlog 0x%x\n", R_SBREG(si, &sb->sbipsflag), R_SBREG(si, &sb->sbtpsflag), R_SBREG(si, &sb->sbtmerrloga), R_SBREG(si, &sb->sbtmerrlog)));
+ SB_ERROR(("sbadmatch3 0x%x sbadmatch2 0x%x sbadmatch1 0x%x\n",
+ R_SBREG(si, &sb->sbadmatch3), R_SBREG(si, &sb->sbadmatch2),
+ R_SBREG(si, &sb->sbadmatch1)));
+ SB_ERROR(("sbimstate 0x%x sbintvec 0x%x sbtmstatelow 0x%x sbtmstatehigh 0x%x\n", R_SBREG(si, &sb->sbimstate), R_SBREG(si, &sb->sbintvec), R_SBREG(si, &sb->sbtmstatelow), R_SBREG(si, &sb->sbtmstatehigh)));
+ SB_ERROR(("sbbwa0 0x%x sbimconfiglow 0x%x sbimconfighigh 0x%x sbadmatch0 0x%x\n", R_SBREG(si, &sb->sbbwa0), R_SBREG(si, &sb->sbimconfiglow), R_SBREG(si, &sb->sbimconfighigh), R_SBREG(si, &sb->sbadmatch0)));
+ SB_ERROR(("sbtmconfiglow 0x%x sbtmconfighigh 0x%x sbbconfig 0x%x sbbstate 0x%x\n", R_SBREG(si, &sb->sbtmconfiglow), R_SBREG(si, &sb->sbtmconfighigh), R_SBREG(si, &sb->sbbconfig), R_SBREG(si, &sb->sbbstate)));
+ SB_ERROR(("sbactcnfg 0x%x sbflagst 0x%x sbidlow 0x%x sbidhigh 0x%x\n",
+ R_SBREG(si, &sb->sbactcnfg), R_SBREG(si, &sb->sbflagst),
+ R_SBREG(si, &sb->sbidlow), R_SBREG(si, &sb->sbidhigh)));
+}
+
+void sb_viewall(sb_t * sbh)
+{
+ sb_info_t *si;
+ uint curidx, i;
+ uint intr_val = 0;
+
+ si = SB_INFO(sbh);
+ curidx = si->curidx;
+
+ for (i = 0; i < si->numcores; i++) {
+ INTR_OFF(si, intr_val);
+ sb_setcoreidx(sbh, i);
+ sb_view(sbh);
+ INTR_RESTORE(si, intr_val);
+ }
+
+ sb_setcoreidx(sbh, curidx);
+}
+#endif /* BCMDBG */
+
+/* return the slow clock source - LPO, XTAL, or PCI */
+static uint sb_slowclk_src(sb_info_t * si)
+{
+ chipcregs_t *cc;
+
+ ASSERT(sb_coreid(&si->sb) == SB_CC);
+
+ if (si->sb.ccrev < 6) {
+ if ((BUSTYPE(si->sb.bustype) == PCI_BUS) &&
+ (OSL_PCI_READ_CONFIG(si->osh, PCI_GPIO_OUT, sizeof(uint32))
+ & PCI_CFG_GPIO_SCS))
+ return (SCC_SS_PCI);
+ else
+ return (SCC_SS_XTAL);
+ } else if (si->sb.ccrev < 10) {
+ cc = (chipcregs_t *) sb_setcoreidx(&si->sb, si->curidx);
+ return (R_REG(si->osh, &cc->slow_clk_ctl) & SCC_SS_MASK);
+ } else /* Insta-clock */
+ return (SCC_SS_XTAL);
+}
+
+/* return the ILP (slowclock) min or max frequency */
+static uint sb_slowclk_freq(sb_info_t * si, bool max_freq)
+{
+ chipcregs_t *cc;
+ uint32 slowclk;
+ uint div;
+
+ ASSERT(sb_coreid(&si->sb) == SB_CC);
+
+ cc = (chipcregs_t *) sb_setcoreidx(&si->sb, si->curidx);
+
+ /* shouldn't be here unless we've established the chip has dynamic clk control */
+ ASSERT(R_REG(si->osh, &cc->capabilities) & CC_CAP_PWR_CTL);
+
+ slowclk = sb_slowclk_src(si);
+ if (si->sb.ccrev < 6) {
+ if (slowclk == SCC_SS_PCI)
+ return (max_freq ? (PCIMAXFREQ / 64)
+ : (PCIMINFREQ / 64));
+ else
+ return (max_freq ? (XTALMAXFREQ / 32)
+ : (XTALMINFREQ / 32));
+ } else if (si->sb.ccrev < 10) {
+ div =
+ 4 *
+ (((R_REG(si->osh, &cc->slow_clk_ctl) & SCC_CD_MASK) >>
+ SCC_CD_SHIFT)
+ + 1);
+ if (slowclk == SCC_SS_LPO)
+ return (max_freq ? LPOMAXFREQ : LPOMINFREQ);
+ else if (slowclk == SCC_SS_XTAL)
+ return (max_freq ? (XTALMAXFREQ / div)
+ : (XTALMINFREQ / div));
+ else if (slowclk == SCC_SS_PCI)
+ return (max_freq ? (PCIMAXFREQ / div)
+ : (PCIMINFREQ / div));
+ else
+ ASSERT(0);
+ } else {
+ /* Chipc rev 10 is InstaClock */
+ div = R_REG(si->osh, &cc->system_clk_ctl) >> SYCC_CD_SHIFT;
+ div = 4 * (div + 1);
+ return (max_freq ? XTALMAXFREQ : (XTALMINFREQ / div));
+ }
+ return (0);
+}
+
+static void BCMINITFN(sb_clkctl_setdelay) (sb_info_t * si, void *chipcregs) {
+ chipcregs_t *cc;
+ uint slowmaxfreq, pll_delay, slowclk;
uint pll_on_delay, fref_sel_delay;
pll_delay = PLL_DELAY;
pll_on_delay = ((slowmaxfreq * pll_delay) + 999999) / 1000000;
fref_sel_delay = ((slowmaxfreq * FREF_DELAY) + 999999) / 1000000;
- cc = (chipcregs_t *)chipcregs;
+ cc = (chipcregs_t *) chipcregs;
W_REG(si->osh, &cc->pll_on_delay, pll_on_delay);
W_REG(si->osh, &cc->fref_sel_delay, fref_sel_delay);
}
/* initialize power control delay registers */
-void
-BCMINITFN(sb_clkctl_init)(sb_t *sbh)
-{
+void BCMINITFN(sb_clkctl_init) (sb_t * sbh) {
sb_info_t *si;
uint origidx;
chipcregs_t *cc;
origidx = si->curidx;
- if ((cc = (chipcregs_t*) sb_setcore(sbh, SB_CC, 0)) == NULL)
+ if ((cc = (chipcregs_t *) sb_setcore(sbh, SB_CC, 0)) == NULL)
return;
if ((si->sb.chip == BCM4321_CHIP_ID) && (si->sb.chiprev < 2))
W_REG(si->osh, &cc->chipcontrol,
- (si->sb.chiprev == 0) ? CHIPCTRL_4321A0_DEFAULT : CHIPCTRL_4321A1_DEFAULT);
+ (si->sb.chiprev ==
+ 0) ? CHIPCTRL_4321A0_DEFAULT : CHIPCTRL_4321A1_DEFAULT);
- if (!(R_REG(si->osh, &cc->capabilities) & CAP_PWR_CTL))
+ if (!(R_REG(si->osh, &cc->capabilities) & CC_CAP_PWR_CTL))
goto done;
/* set all Instaclk chip ILP to 1 MHz */
- else if (si->sb.ccrev >= 10)
+ if (si->sb.ccrev >= 10)
SET_REG(si->osh, &cc->system_clk_ctl, SYCC_CD_MASK,
- (ILP_DIV_1MHZ << SYCC_CD_SHIFT));
+ (ILP_DIV_1MHZ << SYCC_CD_SHIFT));
- sb_clkctl_setdelay(si, (void *)cc);
+ sb_clkctl_setdelay(si, (void *)(uintptr) cc);
-done:
+ done:
sb_setcoreidx(sbh, origidx);
}
/* return the value suitable for writing to the dot11 core FAST_PWRUP_DELAY register */
-uint16
-sb_clkctl_fast_pwrup_delay(sb_t *sbh)
-{
+uint16 BCMINITFN(sb_clkctl_fast_pwrup_delay) (sb_t * sbh) {
sb_info_t *si;
uint origidx;
chipcregs_t *cc;
INTR_OFF(si, intr_val);
- if ((cc = (chipcregs_t*) sb_setcore(sbh, SB_CC, 0)) == NULL)
+ if ((cc = (chipcregs_t *) sb_setcore(sbh, SB_CC, 0)) == NULL)
goto done;
- if (!(R_REG(si->osh, &cc->capabilities) & CAP_PWR_CTL))
+ if (sbh->cccaps & CC_CAP_PMU) {
+ fpdelay = sb_pmu_fast_pwrup_delay(sbh, si->osh);
+ goto done;
+ }
+
+ if (!(sbh->cccaps & CC_CAP_PWR_CTL))
goto done;
slowminfreq = sb_slowclk_freq(si, FALSE);
fpdelay = (((R_REG(si->osh, &cc->pll_on_delay) + 2) * 1000000) +
- (slowminfreq - 1)) / slowminfreq;
+ (slowminfreq - 1)) / slowminfreq;
-done:
+ done:
sb_setcoreidx(sbh, origidx);
INTR_RESTORE(si, intr_val);
return (fpdelay);
}
/* turn primary xtal and/or pll off/on */
-int
-sb_clkctl_xtal(sb_t *sbh, uint what, bool on)
+int sb_clkctl_xtal(sb_t * sbh, uint what, bool on)
{
sb_info_t *si;
uint32 in, out, outen;
switch (BUSTYPE(si->sb.bustype)) {
+ case PCMCIA_BUS:
+ return (0);
- case PCMCIA_BUS:
- return (0);
-
-
- case PCI_BUS:
+ case PCI_BUS:
- /* pcie core doesn't have any mapping to control the xtal pu */
- if (PCIE(si))
- return -1;
+ /* pcie core doesn't have any mapping to control the xtal pu */
+ if (PCIE(si))
+ return -1;
- in = OSL_PCI_READ_CONFIG(si->osh, PCI_GPIO_IN, sizeof(uint32));
- out = OSL_PCI_READ_CONFIG(si->osh, PCI_GPIO_OUT, sizeof(uint32));
- outen = OSL_PCI_READ_CONFIG(si->osh, PCI_GPIO_OUTEN, sizeof(uint32));
+ in = OSL_PCI_READ_CONFIG(si->osh, PCI_GPIO_IN, sizeof(uint32));
+ out =
+ OSL_PCI_READ_CONFIG(si->osh, PCI_GPIO_OUT, sizeof(uint32));
+ outen =
+ OSL_PCI_READ_CONFIG(si->osh, PCI_GPIO_OUTEN,
+ sizeof(uint32));
- /*
- * Avoid glitching the clock if GPRS is already using it.
- * We can't actually read the state of the PLLPD so we infer it
- * by the value of XTAL_PU which *is* readable via gpioin.
- */
- if (on && (in & PCI_CFG_GPIO_XTAL))
- return (0);
+ /*
+ * Avoid glitching the clock if GPRS is already using it.
+ * We can't actually read the state of the PLLPD so we infer it
+ * by the value of XTAL_PU which *is* readable via gpioin.
+ */
+ if (on && (in & PCI_CFG_GPIO_XTAL))
+ return (0);
- if (what & XTAL)
- outen |= PCI_CFG_GPIO_XTAL;
- if (what & PLL)
- outen |= PCI_CFG_GPIO_PLL;
-
- if (on) {
- /* turn primary xtal on */
- if (what & XTAL) {
- out |= PCI_CFG_GPIO_XTAL;
- if (what & PLL)
- out |= PCI_CFG_GPIO_PLL;
- OSL_PCI_WRITE_CONFIG(si->osh, PCI_GPIO_OUT,
- sizeof(uint32), out);
- OSL_PCI_WRITE_CONFIG(si->osh, PCI_GPIO_OUTEN,
- sizeof(uint32), outen);
- OSL_DELAY(XTAL_ON_DELAY);
- }
+ if (what & XTAL)
+ outen |= PCI_CFG_GPIO_XTAL;
+ if (what & PLL)
+ outen |= PCI_CFG_GPIO_PLL;
- /* turn pll on */
- if (what & PLL) {
- out &= ~PCI_CFG_GPIO_PLL;
- OSL_PCI_WRITE_CONFIG(si->osh, PCI_GPIO_OUT,
- sizeof(uint32), out);
- OSL_DELAY(2000);
- }
- } else {
- if (what & XTAL)
- out &= ~PCI_CFG_GPIO_XTAL;
+ if (on) {
+ /* turn primary xtal on */
+ if (what & XTAL) {
+ out |= PCI_CFG_GPIO_XTAL;
if (what & PLL)
out |= PCI_CFG_GPIO_PLL;
- OSL_PCI_WRITE_CONFIG(si->osh, PCI_GPIO_OUT, sizeof(uint32), out);
- OSL_PCI_WRITE_CONFIG(si->osh, PCI_GPIO_OUTEN, sizeof(uint32),
- outen);
+ OSL_PCI_WRITE_CONFIG(si->osh, PCI_GPIO_OUT,
+ sizeof(uint32), out);
+ OSL_PCI_WRITE_CONFIG(si->osh, PCI_GPIO_OUTEN,
+ sizeof(uint32), outen);
+ OSL_DELAY(XTAL_ON_DELAY);
}
- default:
- return (-1);
+ /* turn pll on */
+ if (what & PLL) {
+ out &= ~PCI_CFG_GPIO_PLL;
+ OSL_PCI_WRITE_CONFIG(si->osh, PCI_GPIO_OUT,
+ sizeof(uint32), out);
+ OSL_DELAY(2000);
+ }
+ } else {
+ if (what & XTAL)
+ out &= ~PCI_CFG_GPIO_XTAL;
+ if (what & PLL)
+ out |= PCI_CFG_GPIO_PLL;
+ OSL_PCI_WRITE_CONFIG(si->osh, PCI_GPIO_OUT,
+ sizeof(uint32), out);
+ OSL_PCI_WRITE_CONFIG(si->osh, PCI_GPIO_OUTEN,
+ sizeof(uint32), outen);
+ }
+
+ default:
+ return (-1);
}
return (0);
/* set dynamic clk control mode (forceslow, forcefast, dynamic) */
/* returns true if we are forcing fast clock */
-bool
-sb_clkctl_clk(sb_t *sbh, uint mode)
+bool sb_clkctl_clk(sb_t * sbh, uint mode)
{
sb_info_t *si;
uint origidx;
if (si->sb.ccrev < 6)
return (FALSE);
-
/* Chips with ccrev 10 are EOL and they don't have SYCC_HR which we use below */
ASSERT(si->sb.ccrev != 10);
(BUSTYPE(si->sb.bustype) == SB_BUS) && (si->sb.ccrev >= 10))
goto done;
- /* PR32414WAR "Force HT clock on" all the time, no dynamic clk ctl */
- if ((si->sb.chip == BCM4311_CHIP_ID) && (si->sb.chiprev <= 1))
+ if (FORCEHT_WAR32414(si))
goto done;
- cc = (chipcregs_t*) sb_setcore(sbh, SB_CC, 0);
+ cc = (chipcregs_t *) sb_setcore(sbh, SB_CC, 0);
ASSERT(cc != NULL);
- if (!(R_REG(si->osh, &cc->capabilities) & CAP_PWR_CTL))
+ if (!(R_REG(si->osh, &cc->capabilities) & CC_CAP_PWR_CTL)
+ && (si->sb.ccrev < 20))
goto done;
switch (mode) {
- case CLK_FAST: /* force fast (pll) clock */
+ case CLK_FAST: /* force fast (pll) clock */
if (si->sb.ccrev < 10) {
/* don't forget to force xtal back on before we clear SCC_DYN_XTAL.. */
sb_clkctl_xtal(&si->sb, XTAL, ON);
- SET_REG(si->osh, &cc->slow_clk_ctl, (SCC_XC | SCC_FS | SCC_IP), SCC_IP);
- } else
+ SET_REG(si->osh, &cc->slow_clk_ctl,
+ (SCC_XC | SCC_FS | SCC_IP), SCC_IP);
+ } else if (si->sb.ccrev < 20) {
OR_REG(si->osh, &cc->system_clk_ctl, SYCC_HR);
+ } else {
+ OR_REG(si->osh, &cc->clk_ctl_st, CCS_FORCEHT);
+ }
+
/* wait for the PLL */
- OSL_DELAY(PLL_DELAY);
+ if (R_REG(si->osh, &cc->capabilities) & CC_CAP_PMU) {
+ SPINWAIT(((R_REG(si->osh, &cc->clk_ctl_st) &
+ CCS_HTAVAIL) == 0), PMU_MAX_TRANSITION_DLY);
+ ASSERT(R_REG(si->osh, &cc->clk_ctl_st) & CCS_HTAVAIL);
+ } else {
+ OSL_DELAY(PLL_DELAY);
+ }
break;
case CLK_DYNAMIC: /* enable dynamic clock control */
-
if (si->sb.ccrev < 10) {
scc = R_REG(si->osh, &cc->slow_clk_ctl);
scc &= ~(SCC_FS | SCC_IP | SCC_XC);
/* for dynamic control, we have to release our xtal_pu "force on" */
if (scc & SCC_XC)
sb_clkctl_xtal(&si->sb, XTAL, OFF);
- } else {
+ } else if (si->sb.ccrev < 20) {
/* Instaclock */
AND_REG(si->osh, &cc->system_clk_ctl, ~SYCC_HR);
+ } else {
+ AND_REG(si->osh, &cc->clk_ctl_st, ~CCS_FORCEHT);
}
break;
ASSERT(0);
}
-done:
+ done:
sb_setcoreidx(sbh, origidx);
INTR_RESTORE(si, intr_val);
return (mode == CLK_FAST);
/* register driver interrupt disabling and restoring callback functions */
void
-sb_register_intr_callback(sb_t *sbh, void *intrsoff_fn, void *intrsrestore_fn,
- void *intrsenabled_fn, void *intr_arg)
+sb_register_intr_callback(sb_t * sbh, void *intrsoff_fn,
+ void *intrsrestore_fn, void *intrsenabled_fn,
+ void *intr_arg)
{
sb_info_t *si;
si = SB_INFO(sbh);
si->intr_arg = intr_arg;
- si->intrsoff_fn = (sb_intrsoff_t)intrsoff_fn;
- si->intrsrestore_fn = (sb_intrsrestore_t)intrsrestore_fn;
- si->intrsenabled_fn = (sb_intrsenabled_t)intrsenabled_fn;
+ si->intrsoff_fn = (sb_intrsoff_t) intrsoff_fn;
+ si->intrsrestore_fn = (sb_intrsrestore_t) intrsrestore_fn;
+ si->intrsenabled_fn = (sb_intrsenabled_t) intrsenabled_fn;
/* save current core id. when this function called, the current core
* must be the core which provides driver functions(il, et, wl, etc.)
*/
si->dev_coreid = si->coreid[si->curidx];
}
+void sb_deregister_intr_callback(sb_t * sbh)
+{
+ sb_info_t *si;
-int
-sb_corepciid(sb_t *sbh, uint func, uint16 *pcivendor, uint16 *pcidevice,
- uint8 *pciclass, uint8 *pcisubclass, uint8 *pciprogif,
- uint8 *pciheader)
+ si = SB_INFO(sbh);
+ si->intrsoff_fn = NULL;
+}
+
+#ifdef BCMDBG
+/* dump dynamic clock control related registers */
+void sb_clkctl_dump(sb_t * sbh, struct bcmstrbuf *b)
{
- uint16 vendor = 0xffff, device = 0xffff;
- uint core, unit;
- uint chip, chippkg;
- uint nfunc;
- char varname[SB_DEVPATH_BUFSZ + 8];
- uint8 class, subclass, progif;
- char devpath[SB_DEVPATH_BUFSZ];
- uint8 header;
+ sb_info_t *si;
+ chipcregs_t *cc;
+ uint origidx;
+ uint intr_val = 0;
+
+ si = SB_INFO(sbh);
+
+ INTR_OFF(si, intr_val);
+
+ origidx = si->curidx;
+
+ if ((cc = (chipcregs_t *) sb_setcore(sbh, SB_CC, 0)) == NULL) {
+ INTR_RESTORE(si, intr_val);
+ return;
+ }
+
+ if (!(R_REG(si->osh, &cc->capabilities) & CC_CAP_PWR_CTL))
+ goto done;
+
+ bcm_bprintf(b, "pll_on_delay 0x%x fref_sel_delay 0x%x ",
+ cc->pll_on_delay, cc->fref_sel_delay);
+ if ((si->sb.ccrev >= 6) && (si->sb.ccrev < 10))
+ bcm_bprintf(b, "slow_clk_ctl 0x%x ", cc->slow_clk_ctl);
+ if (si->sb.ccrev >= 10) {
+ bcm_bprintf(b, "system_clk_ctl 0x%x ", cc->system_clk_ctl);
+ bcm_bprintf(b, "clkstatestretch 0x%x ", cc->clkstatestretch);
+ }
+ if (BUSTYPE(si->sb.bustype) == PCI_BUS)
+ bcm_bprintf(b, "gpioout 0x%x gpioouten 0x%x ",
+ OSL_PCI_READ_CONFIG(si->osh, PCI_GPIO_OUT,
+ sizeof(uint32)),
+ OSL_PCI_READ_CONFIG(si->osh, PCI_GPIO_OUTEN,
+ sizeof(uint32)));
+ bcm_bprintf(b, "\n");
+
+ done:
+ sb_setcoreidx(sbh, origidx);
+ INTR_RESTORE(si, intr_val);
+}
+#endif /* BCMDBG */
- core = sb_coreid(sbh);
- unit = sb_coreunit(sbh);
+uint16 BCMINITFN(sb_d11_devid) (sb_t * sbh) {
+ sb_info_t *si = SB_INFO(sbh);
+ uint16 device;
+
+#if defined(BCM4328)
+ /* Fix device id for dual band BCM4328 */
+ if (sbh->chip == BCM4328_CHIP_ID &&
+ (sbh->chippkg == BCM4328USBDUAL_PKG_ID
+ || sbh->chippkg == BCM4328SDIODUAL_PKG_ID))
+ device = BCM4328_D11DUAL_ID;
+ else
+#endif /* BCM4328 */
+ /* Let an nvram variable with devpath override devid */
+ if ((device = (uint16) sb_getdevpathintvar(sbh, "devid")) != 0) ;
+ /* Get devid from OTP/SPROM depending on where the SROM is read */
+ else if ((device = (uint16) getintvar(si->vars, "devid")) != 0) ;
+ /*
+ * no longer support wl0id, but keep the code
+ * here for backward compatibility.
+ */
+ else if ((device = (uint16) getintvar(si->vars, "wl0id")) != 0) ;
+ /* Chip specific conversion */
+ else if (sbh->chip == BCM4712_CHIP_ID) {
+ if (sbh->chippkg == BCM4712SMALL_PKG_ID)
+ device = BCM4306_D11G_ID;
+ else
+ device = BCM4306_D11DUAL_ID;
+ }
+ /* ignore it */
+ else
+ device = 0xffff;
- chip = sb_chip(sbh);
- chippkg = sb_chippkg(sbh);
+ return device;
+}
- progif = 0;
- header = PCI_HEADER_NORMAL;
+int
+BCMINITFN(sb_corepciid) (sb_t * sbh, uint func, uint16 * pcivendor,
+ uint16 * pcidevice, uint8 * pciclass,
+ uint8 * pcisubclass, uint8 * pciprogif,
+ uint8 * pciheader) {
+ uint16 vendor = 0xffff, device = 0xffff;
+ uint8 class, subclass, progif = 0;
+ uint8 header = PCI_HEADER_NORMAL;
+ uint32 core = sb_coreid(sbh);
/* Verify whether the function exists for the core */
- nfunc = (core == SB_USB20H) ? 2 : 1;
- if (func >= nfunc)
- return BCME_ERROR;
+ if (func >= (uint) (core == SB_USB20H ? 2 : 1))
+ return -1;
/* Known vendor translations */
switch (sb_corevendor(sbh)) {
vendor = VENDOR_BROADCOM;
break;
default:
- return BCME_ERROR;
+ return -1;
}
/* Determine class based on known core codes */
case SB_MEMC:
class = PCI_CLASS_MEMORY;
subclass = PCI_MEMORY_RAM;
- device = (uint16)core;
+ device = (uint16) core;
break;
case SB_PCI:
case SB_PCIE:
class = PCI_CLASS_BRIDGE;
subclass = PCI_BRIDGE_PCI;
- device = (uint16)core;
+ device = (uint16) core;
header = PCI_HEADER_BRIDGE;
break;
case SB_MIPS:
case SB_MIPS33:
class = PCI_CLASS_CPU;
subclass = PCI_CPU_MIPS;
- device = (uint16)core;
+ device = (uint16) core;
break;
case SB_CODEC:
class = PCI_CLASS_COMM;
case SB_USB:
class = PCI_CLASS_SERIAL;
subclass = PCI_SERIAL_USB;
- progif = 0x10; /* OHCI */
+ progif = 0x10; /* OHCI */
device = BCM47XX_USB_ID;
break;
case SB_USB11H:
class = PCI_CLASS_SERIAL;
subclass = PCI_SERIAL_USB;
- progif = 0x10; /* OHCI */
+ progif = 0x10; /* OHCI */
device = BCM47XX_USBH_ID;
break;
case SB_USB20H:
class = PCI_CLASS_SERIAL;
subclass = PCI_SERIAL_USB;
- progif = func == 0 ? 0x10 : 0x20; /* OHCI/EHCI */
+ progif = func == 0 ? 0x10 : 0x20; /* OHCI/EHCI */
device = BCM47XX_USB20H_ID;
- header = 0x80; /* multifunction */
- break;
- case SB_USB11D:
- class = PCI_CLASS_SERIAL;
- subclass = PCI_SERIAL_USB;
- device = BCM47XX_USBD_ID;
- break;
- case SB_USB20D:
- class = PCI_CLASS_SERIAL;
- subclass = PCI_SERIAL_USB;
- device = BCM47XX_USB20D_ID;
+ header = 0x80; /* multifunction */
break;
case SB_IPSEC:
class = PCI_CLASS_CRYPT;
case SB_CC:
class = PCI_CLASS_MEMORY;
subclass = PCI_MEMORY_FLASH;
- device = (uint16)core;
- break;
- case SB_D11:
- class = PCI_CLASS_NET;
- subclass = PCI_NET_OTHER;
- /* Let nvram variable override core ID */
- sb_devpath(sbh, devpath, sizeof(devpath));
- sprintf(varname, "%sdevid", devpath);
- if ((device = (uint16)getintvar(NULL, varname)))
- break;
- /*
- * no longer support wl%did, but keep the code
- * here for backward compatibility.
- */
- sprintf(varname, "wl%did", unit);
- if ((device = (uint16)getintvar(NULL, varname)))
- break;
- /* Chip specific conversion */
- if (chip == BCM4712_CHIP_ID) {
- if (chippkg == BCM4712SMALL_PKG_ID)
- device = BCM4306_D11G_ID;
- else
- device = BCM4306_D11DUAL_ID;
- break;
- }
- /* ignore it */
- device = 0xffff;
+ device = (uint16) core;
break;
case SB_SATAXOR:
class = PCI_CLASS_XOR;
subclass = PCI_DASDI_IDE;
device = BCM47XX_ATA100_ID;
break;
+ case SB_USB11D:
+ class = PCI_CLASS_SERIAL;
+ subclass = PCI_SERIAL_USB;
+ device = BCM47XX_USBD_ID;
+ break;
+ case SB_USB20D:
+ class = PCI_CLASS_SERIAL;
+ subclass = PCI_SERIAL_USB;
+ device = BCM47XX_USB20D_ID;
+ break;
+ case SB_D11:
+ class = PCI_CLASS_NET;
+ subclass = PCI_NET_OTHER;
+ device = sb_d11_devid(sbh);
+ break;
default:
class = subclass = progif = 0xff;
- device = (uint16)core;
+ device = (uint16) core;
break;
}
return 0;
}
+/* use the mdio interface to read from mdio slaves */
+static int
+sb_pcie_mdioread(sb_info_t * si, uint physmedia, uint regaddr, uint * regval)
+{
+ uint mdiodata;
+ uint i = 0;
+ sbpcieregs_t *pcieregs;
+
+ pcieregs = (sbpcieregs_t *) sb_setcoreidx(&si->sb, si->sb.buscoreidx);
+ ASSERT(pcieregs);
+
+ /* enable mdio access to SERDES */
+ W_REG(si->osh, (&pcieregs->mdiocontrol),
+ MDIOCTL_PREAM_EN | MDIOCTL_DIVISOR_VAL);
+
+ mdiodata = MDIODATA_START | MDIODATA_READ |
+ (physmedia << MDIODATA_DEVADDR_SHF) |
+ (regaddr << MDIODATA_REGADDR_SHF) | MDIODATA_TA;
+
+ W_REG(si->osh, &pcieregs->mdiodata, mdiodata);
+
+ PR28829_DELAY();
+
+ /* retry till the transaction is complete */
+ while (i < 10) {
+ if (R_REG(si->osh, &(pcieregs->mdiocontrol)) &
+ MDIOCTL_ACCESS_DONE) {
+ PR28829_DELAY();
+ *regval =
+ (R_REG(si->osh, &(pcieregs->mdiodata)) &
+ MDIODATA_MASK);
+ /* Disable mdio access to SERDES */
+ W_REG(si->osh, (&pcieregs->mdiocontrol), 0);
+ return 0;
+ }
+ OSL_DELAY(1000);
+ i++;
+ }
+ SB_ERROR(("sb_pcie_mdioread: timed out\n"));
+ /* Disable mdio access to SERDES */
+ W_REG(si->osh, (&pcieregs->mdiocontrol), 0);
+ return 1;
+}
/* use the mdio interface to write to mdio slaves */
static int
-sb_pcie_mdiowrite(sb_info_t *si, uint physmedia, uint regaddr, uint val)
+sb_pcie_mdiowrite(sb_info_t * si, uint physmedia, uint regaddr, uint val)
{
uint mdiodata;
uint i = 0;
sbpcieregs_t *pcieregs;
- pcieregs = (sbpcieregs_t*) sb_setcoreidx(&si->sb, si->sb.buscoreidx);
+ pcieregs = (sbpcieregs_t *) sb_setcoreidx(&si->sb, si->sb.buscoreidx);
ASSERT(pcieregs);
/* enable mdio access to SERDES */
- W_REG(si->osh, (&pcieregs->mdiocontrol), MDIOCTL_PREAM_EN | MDIOCTL_DIVISOR_VAL);
+ W_REG(si->osh, (&pcieregs->mdiocontrol),
+ MDIOCTL_PREAM_EN | MDIOCTL_DIVISOR_VAL);
mdiodata = MDIODATA_START | MDIODATA_WRITE |
- (physmedia << MDIODATA_DEVADDR_SHF) |
- (regaddr << MDIODATA_REGADDR_SHF) | MDIODATA_TA | val;
+ (physmedia << MDIODATA_DEVADDR_SHF) |
+ (regaddr << MDIODATA_REGADDR_SHF) | MDIODATA_TA | val;
W_REG(si->osh, (&pcieregs->mdiodata), mdiodata);
/* retry till the transaction is complete */
while (i < 10) {
- if (R_REG(si->osh, &(pcieregs->mdiocontrol)) & MDIOCTL_ACCESS_DONE) {
+ if (R_REG(si->osh, &(pcieregs->mdiocontrol)) &
+ MDIOCTL_ACCESS_DONE) {
/* Disable mdio access to SERDES */
W_REG(si->osh, (&pcieregs->mdiocontrol), 0);
return 0;
SB_ERROR(("sb_pcie_mdiowrite: timed out\n"));
/* Disable mdio access to SERDES */
W_REG(si->osh, (&pcieregs->mdiocontrol), 0);
- ASSERT(0);
return 1;
}
/* indirect way to read pcie config regs */
-uint
-sb_pcie_readreg(void *sb, void* arg1, uint offset)
+uint sb_pcie_readreg(void *sb, void *arg1, uint offset)
{
sb_info_t *si;
- sb_t *sbh;
+ sb_t *sbh;
uint retval = 0xFFFFFFFF;
sbpcieregs_t *pcieregs;
uint addrtype;
- sbh = (sb_t *)sb;
+ sbh = (sb_t *) sb;
si = SB_INFO(sbh);
ASSERT(PCIE(si));
- pcieregs = (sbpcieregs_t *)sb_setcore(sbh, SB_PCIE, 0);
+ pcieregs = (sbpcieregs_t *) sb_setcore(sbh, SB_PCIE, 0);
ASSERT(pcieregs);
- addrtype = (uint)((uintptr)arg1);
+ addrtype = (uint) ((uintptr) arg1);
switch (addrtype) {
- case PCIE_CONFIGREGS:
- W_REG(si->osh, (&pcieregs->configaddr), offset);
- retval = R_REG(si->osh, &(pcieregs->configdata));
- break;
- case PCIE_PCIEREGS:
- W_REG(si->osh, &(pcieregs->pcieaddr), offset);
- retval = R_REG(si->osh, &(pcieregs->pciedata));
- break;
- default:
- ASSERT(0);
- break;
+ case PCIE_CONFIGREGS:
+ W_REG(si->osh, (&pcieregs->configaddr), offset);
+ retval = R_REG(si->osh, &(pcieregs->configdata));
+ break;
+ case PCIE_PCIEREGS:
+ W_REG(si->osh, &(pcieregs->pcieindaddr), offset);
+ retval = R_REG(si->osh, &(pcieregs->pcieinddata));
+ break;
+ default:
+ ASSERT(0);
+ break;
}
return retval;
}
/* indirect way to write pcie config/mdio/pciecore regs */
-uint
-sb_pcie_writereg(sb_t *sbh, void *arg1, uint offset, uint val)
+uint sb_pcie_writereg(sb_t * sbh, void *arg1, uint offset, uint val)
{
sb_info_t *si;
sbpcieregs_t *pcieregs;
si = SB_INFO(sbh);
ASSERT(PCIE(si));
- pcieregs = (sbpcieregs_t *)sb_setcore(sbh, SB_PCIE, 0);
+ pcieregs = (sbpcieregs_t *) sb_setcore(sbh, SB_PCIE, 0);
ASSERT(pcieregs);
- addrtype = (uint)((uintptr)arg1);
+ addrtype = (uint) ((uintptr) arg1);
switch (addrtype) {
- case PCIE_CONFIGREGS:
- W_REG(si->osh, (&pcieregs->configaddr), offset);
- W_REG(si->osh, (&pcieregs->configdata), val);
- break;
- case PCIE_PCIEREGS:
- W_REG(si->osh, (&pcieregs->pcieaddr), offset);
- W_REG(si->osh, (&pcieregs->pciedata), val);
- break;
- default:
- ASSERT(0);
- break;
+ case PCIE_CONFIGREGS:
+ W_REG(si->osh, (&pcieregs->configaddr), offset);
+ W_REG(si->osh, (&pcieregs->configdata), val);
+ break;
+ case PCIE_PCIEREGS:
+ W_REG(si->osh, (&pcieregs->pcieindaddr), offset);
+ W_REG(si->osh, (&pcieregs->pcieinddata), val);
+ break;
+ default:
+ ASSERT(0);
+ break;
}
return 0;
}
/* Build device path. Support SB, PCI, and JTAG for now. */
-int
-sb_devpath(sb_t *sbh, char *path, int size)
-{
+int BCMINITFN(sb_devpath) (sb_t * sbh, char *path, int size) {
+ int slen;
ASSERT(path);
ASSERT(size >= SB_DEVPATH_BUFSZ);
+ if (!path || size <= 0)
+ return -1;
+
switch (BUSTYPE((SB_INFO(sbh))->sb.bustype)) {
case SB_BUS:
case JTAG_BUS:
- sprintf(path, "sb/%u/", sb_coreidx(sbh));
+ slen = snprintf(path, (size_t) size, "sb/%u/", sb_coreidx(sbh));
break;
case PCI_BUS:
ASSERT((SB_INFO(sbh))->osh);
- sprintf(path, "pci/%u/%u/", OSL_PCI_BUS((SB_INFO(sbh))->osh),
- OSL_PCI_SLOT((SB_INFO(sbh))->osh));
+ slen = snprintf(path, (size_t) size, "pci/%u/%u/",
+ OSL_PCI_BUS((SB_INFO(sbh))->osh),
+ OSL_PCI_SLOT((SB_INFO(sbh))->osh));
break;
case PCMCIA_BUS:
SB_ERROR(("sb_devpath: OSL_PCMCIA_BUS() not implemented, bus 1 assumed\n"));
SB_ERROR(("sb_devpath: OSL_PCMCIA_SLOT() not implemented, slot 1 assumed\n"));
- sprintf(path, "pc/%u/%u/", 1, 1);
- break;
- case SDIO_BUS:
- SB_ERROR(("sb_devpath: device 0 assumed\n"));
- sprintf(path, "sd/%u/", sb_coreidx(sbh));
+ slen = snprintf(path, (size_t) size, "pc/1/1/");
break;
default:
+ slen = -1;
ASSERT(0);
break;
}
+ if (slen < 0 || slen >= size) {
+ path[0] = '\0';
+ return -1;
+ }
+
return 0;
}
+/* Get a variable, but only if it has a devpath prefix */
+char *BCMINITFN(sb_getdevpathvar) (sb_t * sbh, const char *name) {
+ char varname[SB_DEVPATH_BUFSZ + 32];
+
+ sb_devpathvar(sbh, varname, sizeof(varname), name);
+
+ return (getvar(NULL, varname));
+}
+
+/* Get a variable, but only if it has a devpath prefix */
+int BCMINITFN(sb_getdevpathintvar) (sb_t * sbh, const char *name) {
+ char varname[SB_DEVPATH_BUFSZ + 32];
+
+ sb_devpathvar(sbh, varname, sizeof(varname), name);
+
+ return (getintvar(NULL, varname));
+}
+
+/* Concatenate the dev path with a varname into the given 'var' buffer
+ * and return the 'var' pointer.
+ * Nothing is done to the arguments if len == 0 or var is NULL, var is still returned.
+ * On overflow, the first char will be set to '\0'.
+ */
+static char *BCMINITFN(sb_devpathvar) (sb_t * sbh, char *var, int len,
+ const char *name) {
+ uint path_len;
+
+ if (!var || len <= 0)
+ return var;
+
+ if (sb_devpath(sbh, var, len) == 0) {
+ path_len = strlen(var);
+
+ if (strlen(name) + 1 > (uint) (len - path_len))
+ var[0] = '\0';
+ else
+ strncpy(var + path_len, name, len - path_len - 1);
+ }
+
+ return var;
+}
+
/*
* Fixup SROMless PCI device's configuration.
* The current core may be changed upon return.
*/
-static int
-sb_pci_fixcfg(sb_info_t *si)
+static int sb_pci_fixcfg(sb_info_t * si)
{
uint origidx, pciidx;
sbpciregs_t *pciregs;
- sbpcieregs_t *pcieregs;
+ sbpcieregs_t *pcieregs = NULL;
uint16 val16, *reg16;
- char name[SB_DEVPATH_BUFSZ+16], *value;
- char devpath[SB_DEVPATH_BUFSZ];
+ uint32 w;
ASSERT(BUSTYPE(si->sb.bustype) == PCI_BUS);
/* check 'pi' is correct and fix it if not */
if (si->sb.buscoretype == SB_PCIE) {
- pcieregs = (sbpcieregs_t *)sb_setcore(&si->sb, SB_PCIE, 0);
+ pcieregs = (sbpcieregs_t *) sb_setcore(&si->sb, SB_PCIE, 0);
ASSERT(pcieregs);
reg16 = &pcieregs->sprom[SRSH_PI_OFFSET];
} else if (si->sb.buscoretype == SB_PCI) {
- pciregs = (sbpciregs_t *)sb_setcore(&si->sb, SB_PCI, 0);
+ pciregs = (sbpciregs_t *) sb_setcore(&si->sb, SB_PCI, 0);
ASSERT(pciregs);
reg16 = &pciregs->sprom[SRSH_PI_OFFSET];
} else {
}
pciidx = sb_coreidx(&si->sb);
val16 = R_REG(si->osh, reg16);
- if (((val16 & SRSH_PI_MASK) >> SRSH_PI_SHIFT) != (uint16)pciidx) {
- val16 = (uint16)(pciidx << SRSH_PI_SHIFT) | (val16 & ~SRSH_PI_MASK);
+ if (((val16 & SRSH_PI_MASK) >> SRSH_PI_SHIFT) != (uint16) pciidx) {
+ val16 =
+ (uint16) (pciidx << SRSH_PI_SHIFT) | (val16 &
+ ~SRSH_PI_MASK);
W_REG(si->osh, reg16, val16);
}
- /* restore the original index */
- sb_setcoreidx(&si->sb, origidx);
+ if (PCIE_ASPMWARS(si)) {
+ w = sb_pcie_readreg((void *)(uintptr) & si->sb,
+ (void *)PCIE_PCIEREGS, PCIE_PLP_STATUSREG);
- /*
- * Fixup bar0window in PCI config space to make the core indicated
- * by the nvram variable the current core.
- * !Do it last, it may change the current core!
- */
- if (sb_devpath(&si->sb, devpath, sizeof(devpath)))
- return -1;
- sprintf(name, "%sb0w", devpath);
- if ((value = getvar(NULL, name))) {
- OSL_PCI_WRITE_CONFIG(si->osh, PCI_BAR0_WIN, sizeof(uint32),
- bcm_strtoul(value, NULL, 16));
- /* update curidx since the current core is changed */
- si->curidx = _sb_coreidx(si);
- if (si->curidx == BADIDX) {
- SB_ERROR(("sb_pci_fixcfg: bad core index\n"));
- return -1;
+ /* Detect the current polarity at attach and force that polarity and
+ * disable changing the polarity
+ */
+ if ((w & PCIE_PLP_POLARITYINV_STAT) == 0) {
+ si->pcie_polarity = (SERDES_RX_CTRL_FORCE);
+ } else {
+ si->pcie_polarity = (SERDES_RX_CTRL_FORCE |
+ SERDES_RX_CTRL_POLARITY);
}
- }
- return 0;
-}
+ w = OSL_PCI_READ_CONFIG(si->osh, si->pciecap_lcreg_offset,
+ sizeof(uint32));
+ if (w & PCIE_CLKREQ_ENAB) {
+ reg16 = &pcieregs->sprom[SRSH_CLKREQ_OFFSET];
+ val16 = R_REG(si->osh, reg16);
+ /* if clockreq is not advertized clkreq should not be enabled */
+ if (!(val16 & SRSH_CLKREQ_ENB))
+ SB_ERROR(("WARNING: CLK REQ enabled already 0x%x\n", w));
+ }
-static uint
-sb_chipc_capability(sb_t *sbh)
-{
- sb_info_t *si;
+ sb_war43448(&si->sb);
- si = SB_INFO(sbh);
+ sb_war42767(&si->sb);
+
+ }
+
+ /* restore the original index */
+ sb_setcoreidx(&si->sb, origidx);
- /* Make sure that there is ChipCommon core present */
- if (si->coreid[SB_CC_IDX] == SB_CC)
- return (sb_corereg(si, SB_CC_IDX, OFFSETOF(chipcregs_t, capabilities),
- 0, 0));
return 0;
}
/* Return ADDR64 capability of the backplane */
-bool
-sb_backplane64(sb_t *sbh)
+bool sb_backplane64(sb_t * sbh)
{
- return ((sb_chipc_capability(sbh) & CAP_BKPLN64) != 0);
+ sb_info_t *si;
+
+ si = SB_INFO(sbh);
+ return ((si->sb.cccaps & CC_CAP_BKPLN64) != 0);
}
-void
-sb_btcgpiowar(sb_t *sbh)
+void sb_btcgpiowar(sb_t * sbh)
{
sb_info_t *si;
uint origidx;
/* Make sure that there is ChipCommon core present &&
* UART_TX is strapped to 1
*/
- if (!(sb_chipc_capability(sbh) & CAP_UARTGPIO))
+ if (!(si->sb.cccaps & CC_CAP_UARTGPIO))
return;
/* sb_corereg cannot be used as we have to guarantee 8-bit read/writes */
origidx = sb_coreidx(sbh);
- cc = (chipcregs_t *)sb_setcore(sbh, SB_CC, 0);
- if (cc == NULL)
- goto end;
+ cc = (chipcregs_t *) sb_setcore(sbh, SB_CC, 0);
+ ASSERT(cc);
W_REG(si->osh, &cc->uart0mcr, R_REG(si->osh, &cc->uart0mcr) | 0x04);
-end:
/* restore the original index */
sb_setcoreidx(sbh, origidx);
}
/* check if the device is removed */
-bool
-sb_deviceremoved(sb_t *sbh)
+bool sb_deviceremoved(sb_t * sbh)
{
uint32 w;
sb_info_t *si;
return FALSE;
}
+#if 0
/* Return the RAM size of the SOCRAM core */
-uint32
-sb_socram_size(sb_t *sbh)
-{
+uint32 BCMINITFN(sb_socram_size) (sb_t * sbh) {
sb_info_t *si;
uint origidx;
uint intr_val = 0;
coreinfo = R_REG(si->osh, ®s->coreinfo);
/* Calculate size from coreinfo based on rev */
- switch (corerev) {
- case 0:
+ if (corerev == 0)
memsize = 1 << (16 + (coreinfo & SRCI_MS0_MASK));
- break;
- default: /* rev >= 1 */
+ else if (corerev < 3) {
memsize = 1 << (SR_BSZ_BASE + (coreinfo & SRCI_SRBSZ_MASK));
memsize *= (coreinfo & SRCI_SRNB_MASK) >> SRCI_SRNB_SHIFT;
- break;
+ } else {
+ uint nb = (coreinfo & SRCI_SRNB_MASK) >> SRCI_SRNB_SHIFT;
+ uint bsz = (coreinfo & SRCI_SRBSZ_MASK);
+ uint lss = (coreinfo & SRCI_LSS_MASK) >> SRCI_LSS_SHIFT;
+ if (lss != 0)
+ nb--;
+ memsize = nb * (1 << (bsz + SR_BSZ_BASE));
+ if (lss != 0)
+ memsize += (1 << ((lss - 1) + SR_BSZ_BASE));
}
-
/* Return to previous state and core */
if (!wasup)
sb_core_disable(sbh, 0);
sb_setcoreidx(sbh, origidx);
-done:
+ done:
INTR_RESTORE(si, intr_val);
return memsize;
}
-
+#endif
#include <typedefs.h>
#include <osl.h>
#include <sbutils.h>
-#include <bcmutils.h>
#include <bcmnvram.h>
#include <sbhndmips.h>
#include <hndmips.h>
char *value;
/* Get global SB handle */
- sbh = sb_kattach();
+ sbh = sb_kattach(SB_OSH);
/* Initialize clocks and interrupts */
sb_mips_init(sbh, SBMIPS_VIRTIRQ_BASE);
+++ /dev/null
-/*
- * Broadcom SiliconBackplane chipcommon serial flash interface
- *
- * Copyright 2006, Broadcom Corporation
- * All Rights Reserved.
- *
- * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
- * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
- * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
- * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
- *
- * $Id: sflash.c,v 1.1.1.13 2006/02/27 03:43:16 honor Exp $
- */
-
-#include <osl.h>
-#include <typedefs.h>
-#include <sbconfig.h>
-#include <sbchipc.h>
-#include <mipsinc.h>
-#include <bcmutils.h>
-#include <bcmdevs.h>
-#include <sflash.h>
-
-/* Private global state */
-static struct sflash sflash;
-
-/* Issue a serial flash command */
-static INLINE void
-sflash_cmd(chipcregs_t *cc, uint opcode)
-{
- W_REG(NULL, &cc->flashcontrol, SFLASH_START | opcode);
- while (R_REG(NULL, &cc->flashcontrol) & SFLASH_BUSY);
-}
-
-/* Initialize serial flash access */
-struct sflash *
-sflash_init(chipcregs_t *cc)
-{
- uint32 id, id2;
-
- bzero(&sflash, sizeof(sflash));
-
- sflash.type = R_REG(NULL, &cc->capabilities) & CAP_FLASH_MASK;
-
- switch (sflash.type) {
- case SFLASH_ST:
- /* Probe for ST chips */
- sflash_cmd(cc, SFLASH_ST_DP);
- sflash_cmd(cc, SFLASH_ST_RES);
- id = R_REG(NULL, &cc->flashdata);
- switch (id) {
- case 0x11:
- /* ST M25P20 2 Mbit Serial Flash */
- sflash.blocksize = 64 * 1024;
- sflash.numblocks = 4;
- break;
- case 0x12:
- /* ST M25P40 4 Mbit Serial Flash */
- sflash.blocksize = 64 * 1024;
- sflash.numblocks = 8;
- break;
- case 0x13:
- /* ST M25P80 8 Mbit Serial Flash */
- sflash.blocksize = 64 * 1024;
- sflash.numblocks = 16;
- break;
- case 0x14:
- /* ST M25P16 16 Mbit Serial Flash */
- sflash.blocksize = 64 * 1024;
- sflash.numblocks = 32;
- break;
- case 0x15:
- /* ST M25P32 32 Mbit Serial Flash */
- sflash.blocksize = 64 * 1024;
- sflash.numblocks = 64;
- break;
- case 0x16:
- /* ST M25P64 64 Mbit Serial Flash */
- sflash.blocksize = 64 * 1024;
- sflash.numblocks = 128;
- break;
- case 0xbf:
- W_REG(NULL, &cc->flashaddress, 1);
- sflash_cmd(cc, SFLASH_ST_RES);
- id2 = R_REG(NULL, &cc->flashdata);
- if (id2 == 0x44) {
- /* SST M25VF80 4 Mbit Serial Flash */
- sflash.blocksize = 64 * 1024;
- sflash.numblocks = 8;
- }
- break;
- }
- break;
-
- case SFLASH_AT:
- /* Probe for Atmel chips */
- sflash_cmd(cc, SFLASH_AT_STATUS);
- id = R_REG(NULL, &cc->flashdata) & 0x3c;
- switch (id) {
- case 0xc:
- /* Atmel AT45DB011 1Mbit Serial Flash */
- sflash.blocksize = 256;
- sflash.numblocks = 512;
- break;
- case 0x14:
- /* Atmel AT45DB021 2Mbit Serial Flash */
- sflash.blocksize = 256;
- sflash.numblocks = 1024;
- break;
- case 0x1c:
- /* Atmel AT45DB041 4Mbit Serial Flash */
- sflash.blocksize = 256;
- sflash.numblocks = 2048;
- break;
- case 0x24:
- /* Atmel AT45DB081 8Mbit Serial Flash */
- sflash.blocksize = 256;
- sflash.numblocks = 4096;
- break;
- case 0x2c:
- /* Atmel AT45DB161 16Mbit Serial Flash */
- sflash.blocksize = 512;
- sflash.numblocks = 4096;
- break;
- case 0x34:
- /* Atmel AT45DB321 32Mbit Serial Flash */
- sflash.blocksize = 512;
- sflash.numblocks = 8192;
- break;
- case 0x3c:
- /* Atmel AT45DB642 64Mbit Serial Flash */
- sflash.blocksize = 1024;
- sflash.numblocks = 8192;
- break;
- }
- break;
- }
-
- sflash.size = sflash.blocksize * sflash.numblocks;
- return sflash.size ? &sflash : NULL;
-}
-
-/* Read len bytes starting at offset into buf. Returns number of bytes read. */
-int
-sflash_read(chipcregs_t *cc, uint offset, uint len, uchar *buf)
-{
- int cnt;
- uint32 *from, *to;
-
- if (!len)
- return 0;
-
- if ((offset + len) > sflash.size)
- return -22;
-
- if ((len >= 4) && (offset & 3))
- cnt = 4 - (offset & 3);
- else if ((len >= 4) && ((uint32)buf & 3))
- cnt = 4 - ((uint32)buf & 3);
- else
- cnt = len;
-
- from = (uint32 *)KSEG1ADDR(SB_FLASH2 + offset);
- to = (uint32 *)buf;
-
- if (cnt < 4) {
- bcopy(from, to, cnt);
- return cnt;
- }
-
- while (cnt >= 4) {
- *to++ = *from++;
- cnt -= 4;
- }
-
- return (len - cnt);
-}
-
-/* Poll for command completion. Returns zero when complete. */
-int
-sflash_poll(chipcregs_t *cc, uint offset)
-{
- if (offset >= sflash.size)
- return -22;
-
- switch (sflash.type) {
- case SFLASH_ST:
- /* Check for ST Write In Progress bit */
- sflash_cmd(cc, SFLASH_ST_RDSR);
- return R_REG(NULL, &cc->flashdata) & SFLASH_ST_WIP;
- case SFLASH_AT:
- /* Check for Atmel Ready bit */
- sflash_cmd(cc, SFLASH_AT_STATUS);
- return !(R_REG(NULL, &cc->flashdata) & SFLASH_AT_READY);
- }
-
- return 0;
-}
-
-/* Write len bytes starting at offset into buf. Returns number of bytes
- * written. Caller should poll for completion.
- */
-int
-sflash_write(chipcregs_t *cc, uint offset, uint len, const uchar *buf)
-{
- struct sflash *sfl;
- int ret = 0;
- bool is4712b0;
- uint32 page, byte, mask;
-
- if (!len)
- return 0;
-
- if ((offset + len) > sflash.size)
- return -22;
-
- sfl = &sflash;
- switch (sfl->type) {
- case SFLASH_ST:
- mask = R_REG(NULL, &cc->chipid);
- is4712b0 = (((mask & CID_ID_MASK) == BCM4712_CHIP_ID) &&
- ((mask & CID_REV_MASK) == (3 << CID_REV_SHIFT)));
- /* Enable writes */
- sflash_cmd(cc, SFLASH_ST_WREN);
- if (is4712b0) {
- mask = 1 << 14;
- W_REG(NULL, &cc->flashaddress, offset);
- W_REG(NULL, &cc->flashdata, *buf++);
- /* Set chip select */
- OR_REG(NULL, &cc->gpioout, mask);
- /* Issue a page program with the first byte */
- sflash_cmd(cc, SFLASH_ST_PP);
- ret = 1;
- offset++;
- len--;
- while (len > 0) {
- if ((offset & 255) == 0) {
- /* Page boundary, drop cs and return */
- AND_REG(NULL, &cc->gpioout, ~mask);
- if (!sflash_poll(cc, offset)) {
- /* Flash rejected command */
- return -11;
- }
- return ret;
- } else {
- /* Write single byte */
- sflash_cmd(cc, *buf++);
- }
- ret++;
- offset++;
- len--;
- }
- /* All done, drop cs if needed */
- if ((offset & 255) != 1) {
- /* Drop cs */
- AND_REG(NULL, &cc->gpioout, ~mask);
- if (!sflash_poll(cc, offset)) {
- /* Flash rejected command */
- return -12;
- }
- }
- } else {
- ret = 1;
- W_REG(NULL, &cc->flashaddress, offset);
- W_REG(NULL, &cc->flashdata, *buf);
- /* Page program */
- sflash_cmd(cc, SFLASH_ST_PP);
- }
- break;
- case SFLASH_AT:
- mask = sfl->blocksize - 1;
- page = (offset & ~mask) << 1;
- byte = offset & mask;
- /* Read main memory page into buffer 1 */
- if (byte || (len < sfl->blocksize)) {
- W_REG(NULL, &cc->flashaddress, page);
- sflash_cmd(cc, SFLASH_AT_BUF1_LOAD);
- /* 250 us for AT45DB321B */
- SPINWAIT(sflash_poll(cc, offset), 1000);
- ASSERT(!sflash_poll(cc, offset));
- }
- /* Write into buffer 1 */
- for (ret = 0; (ret < (int)len) && (byte < sfl->blocksize); ret++) {
- W_REG(NULL, &cc->flashaddress, byte++);
- W_REG(NULL, &cc->flashdata, *buf++);
- sflash_cmd(cc, SFLASH_AT_BUF1_WRITE);
- }
- /* Write buffer 1 into main memory page */
- W_REG(NULL, &cc->flashaddress, page);
- sflash_cmd(cc, SFLASH_AT_BUF1_PROGRAM);
- break;
- }
-
- return ret;
-}
-
-/* Erase a region. Returns number of bytes scheduled for erasure.
- * Caller should poll for completion.
- */
-int
-sflash_erase(chipcregs_t *cc, uint offset)
-{
- struct sflash *sfl;
-
- if (offset >= sflash.size)
- return -22;
-
- sfl = &sflash;
- switch (sfl->type) {
- case SFLASH_ST:
- sflash_cmd(cc, SFLASH_ST_WREN);
- W_REG(NULL, &cc->flashaddress, offset);
- sflash_cmd(cc, SFLASH_ST_SE);
- return sfl->blocksize;
- case SFLASH_AT:
- W_REG(NULL, &cc->flashaddress, offset << 1);
- sflash_cmd(cc, SFLASH_AT_PAGE_ERASE);
- return sfl->blocksize;
- }
-
- return 0;
-}
-
-/*
- * writes the appropriate range of flash, a NULL buf simply erases
- * the region of flash
- */
-int
-sflash_commit(chipcregs_t *cc, uint offset, uint len, const uchar *buf)
-{
- struct sflash *sfl;
- uchar *block = NULL, *cur_ptr, *blk_ptr;
- uint blocksize = 0, mask, cur_offset, cur_length, cur_retlen, remainder;
- uint blk_offset, blk_len, copied;
- int bytes, ret = 0;
-
- /* Check address range */
- if (len <= 0)
- return 0;
-
- sfl = &sflash;
- if ((offset + len) > sfl->size)
- return -1;
-
- blocksize = sfl->blocksize;
- mask = blocksize - 1;
-
- /* Allocate a block of mem */
- if (!(block = MALLOC(NULL, blocksize)))
- return -1;
-
- while (len) {
- /* Align offset */
- cur_offset = offset & ~mask;
- cur_length = blocksize;
- cur_ptr = block;
-
- remainder = blocksize - (offset & mask);
- if (len < remainder)
- cur_retlen = len;
- else
- cur_retlen = remainder;
-
- /* buf == NULL means erase only */
- if (buf) {
- /* Copy existing data into holding block if necessary */
- if ((offset & mask) || (len < blocksize)) {
- blk_offset = cur_offset;
- blk_len = cur_length;
- blk_ptr = cur_ptr;
-
- /* Copy entire block */
- while (blk_len) {
- copied = sflash_read(cc, blk_offset, blk_len, blk_ptr);
- blk_offset += copied;
- blk_len -= copied;
- blk_ptr += copied;
- }
- }
-
- /* Copy input data into holding block */
- memcpy(cur_ptr + (offset & mask), buf, cur_retlen);
- }
-
- /* Erase block */
- if ((ret = sflash_erase(cc, (uint) cur_offset)) < 0)
- goto done;
- while (sflash_poll(cc, (uint) cur_offset));
-
- /* buf == NULL means erase only */
- if (!buf) {
- offset += cur_retlen;
- len -= cur_retlen;
- continue;
- }
-
- /* Write holding block */
- while (cur_length > 0) {
- if ((bytes = sflash_write(cc,
- (uint) cur_offset,
- (uint) cur_length,
- (uchar *) cur_ptr)) < 0) {
- ret = bytes;
- goto done;
- }
- while (sflash_poll(cc, (uint) cur_offset));
- cur_offset += bytes;
- cur_length -= bytes;
- cur_ptr += bytes;
- }
-
- offset += cur_retlen;
- len -= cur_retlen;
- buf += cur_retlen;
- }
-
- ret = len;
-done:
- if (block)
- MFREE(NULL, block, blocksize);
- return ret;
-}
#include <osl.h>
#include <bcmnvram.h>
#include <sbconfig.h>
-#include <sbextif.h>
#include <sbutils.h>
+#include <sbchipc.h>
#include <hndmips.h>
#include <mipsinc.h>
#include <hndcpu.h>
+#include <bcmdevs.h>
/* Global SB handle */
extern void *bcm947xx_sbh;
extern int panic_timeout;
static int watchdog = 0;
-static u8 *mcr = NULL;
void __init
bcm947xx_time_init(void)
{
unsigned int hz;
- extifregs_t *eir;
/*
* Use deterministic values for initial counter interrupt
timer_interrupt(irq, dev_id, regs);
/* Set the watchdog timer to reset after the specified number of ms */
- if (watchdog > 0)
- sb_watchdog(sbh, WATCHDOG_CLOCK / 1000 * watchdog);
+ if (watchdog > 0) {
+ if (sb_chip(sbh) == BCM5354_CHIP_ID)
+ sb_watchdog(sbh, WATCHDOG_CLOCK_5354 / 1000 * watchdog);
+ else
+ sb_watchdog(sbh, WATCHDOG_CLOCK / 1000 * watchdog);
+ }
+
}
static struct irqaction bcm947xx_timer_irqaction = {
--- /dev/null
+/*
+ * Driver O/S-independent utility routines
+ *
+ * Copyright 2007, Broadcom Corporation
+ * All Rights Reserved.
+ *
+ * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
+ * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
+ * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
+ * $Id$
+ */
+
+#include <typedefs.h>
+#include <bcmdefs.h>
+#include <stdarg.h>
+#include <osl.h>
+#include <sbutils.h>
+#include <bcmendian.h>
+#include "utils.h"
+
+/*******************************************************************************
+ * crc8
+ *
+ * Computes a crc8 over the input data using the polynomial:
+ *
+ * x^8 + x^7 +x^6 + x^4 + x^2 + 1
+ *
+ * The caller provides the initial value (either CRC8_INIT_VALUE
+ * or the previous returned value) to allow for processing of
+ * discontiguous blocks of data. When generating the CRC the
+ * caller is responsible for complementing the final return value
+ * and inserting it into the byte stream. When checking, a final
+ * return value of CRC8_GOOD_VALUE indicates a valid CRC.
+ *
+ * Reference: Dallas Semiconductor Application Note 27
+ * Williams, Ross N., "A Painless Guide to CRC Error Detection Algorithms",
+ * ver 3, Aug 1993, ross@guest.adelaide.edu.au, Rocksoft Pty Ltd.,
+ * ftp://ftp.rocksoft.com/clients/rocksoft/papers/crc_v3.txt
+ *
+ * ****************************************************************************
+ */
+
+static const uint8 crc8_table[256] = {
+ 0x00, 0xF7, 0xB9, 0x4E, 0x25, 0xD2, 0x9C, 0x6B,
+ 0x4A, 0xBD, 0xF3, 0x04, 0x6F, 0x98, 0xD6, 0x21,
+ 0x94, 0x63, 0x2D, 0xDA, 0xB1, 0x46, 0x08, 0xFF,
+ 0xDE, 0x29, 0x67, 0x90, 0xFB, 0x0C, 0x42, 0xB5,
+ 0x7F, 0x88, 0xC6, 0x31, 0x5A, 0xAD, 0xE3, 0x14,
+ 0x35, 0xC2, 0x8C, 0x7B, 0x10, 0xE7, 0xA9, 0x5E,
+ 0xEB, 0x1C, 0x52, 0xA5, 0xCE, 0x39, 0x77, 0x80,
+ 0xA1, 0x56, 0x18, 0xEF, 0x84, 0x73, 0x3D, 0xCA,
+ 0xFE, 0x09, 0x47, 0xB0, 0xDB, 0x2C, 0x62, 0x95,
+ 0xB4, 0x43, 0x0D, 0xFA, 0x91, 0x66, 0x28, 0xDF,
+ 0x6A, 0x9D, 0xD3, 0x24, 0x4F, 0xB8, 0xF6, 0x01,
+ 0x20, 0xD7, 0x99, 0x6E, 0x05, 0xF2, 0xBC, 0x4B,
+ 0x81, 0x76, 0x38, 0xCF, 0xA4, 0x53, 0x1D, 0xEA,
+ 0xCB, 0x3C, 0x72, 0x85, 0xEE, 0x19, 0x57, 0xA0,
+ 0x15, 0xE2, 0xAC, 0x5B, 0x30, 0xC7, 0x89, 0x7E,
+ 0x5F, 0xA8, 0xE6, 0x11, 0x7A, 0x8D, 0xC3, 0x34,
+ 0xAB, 0x5C, 0x12, 0xE5, 0x8E, 0x79, 0x37, 0xC0,
+ 0xE1, 0x16, 0x58, 0xAF, 0xC4, 0x33, 0x7D, 0x8A,
+ 0x3F, 0xC8, 0x86, 0x71, 0x1A, 0xED, 0xA3, 0x54,
+ 0x75, 0x82, 0xCC, 0x3B, 0x50, 0xA7, 0xE9, 0x1E,
+ 0xD4, 0x23, 0x6D, 0x9A, 0xF1, 0x06, 0x48, 0xBF,
+ 0x9E, 0x69, 0x27, 0xD0, 0xBB, 0x4C, 0x02, 0xF5,
+ 0x40, 0xB7, 0xF9, 0x0E, 0x65, 0x92, 0xDC, 0x2B,
+ 0x0A, 0xFD, 0xB3, 0x44, 0x2F, 0xD8, 0x96, 0x61,
+ 0x55, 0xA2, 0xEC, 0x1B, 0x70, 0x87, 0xC9, 0x3E,
+ 0x1F, 0xE8, 0xA6, 0x51, 0x3A, 0xCD, 0x83, 0x74,
+ 0xC1, 0x36, 0x78, 0x8F, 0xE4, 0x13, 0x5D, 0xAA,
+ 0x8B, 0x7C, 0x32, 0xC5, 0xAE, 0x59, 0x17, 0xE0,
+ 0x2A, 0xDD, 0x93, 0x64, 0x0F, 0xF8, 0xB6, 0x41,
+ 0x60, 0x97, 0xD9, 0x2E, 0x45, 0xB2, 0xFC, 0x0B,
+ 0xBE, 0x49, 0x07, 0xF0, 0x9B, 0x6C, 0x22, 0xD5,
+ 0xF4, 0x03, 0x4D, 0xBA, 0xD1, 0x26, 0x68, 0x9F
+};
+
+#define CRC_INNER_LOOP(n, c, x) \
+ (c) = ((c) >> 8) ^ crc##n##_table[((c) ^ (x)) & 0xff]
+
+
+uint8 hndcrc8 (uint8 * pdata, /* pointer to array of data to process */
+ uint nbytes, /* number of input data bytes to process */
+ uint8 crc /* either CRC8_INIT_VALUE or previous return value */
+ )
+{
+ /* hard code the crc loop instead of using CRC_INNER_LOOP macro
+ * to avoid the undefined and unnecessary (uint8 >> 8) operation.
+ */
+ while (nbytes-- > 0)
+ crc = crc8_table[(crc ^ *pdata++) & 0xff];
+
+ return crc;
+}
+
+char *
+bcm_ether_ntoa (struct ether_addr *ea, char *buf)
+{
+ snprintf (buf, 18, "%02x:%02x:%02x:%02x:%02x:%02x",
+ ea->octet[0] & 0xff, ea->octet[1] & 0xff, ea->octet[2] & 0xff,
+ ea->octet[3] & 0xff, ea->octet[4] & 0xff, ea->octet[5] & 0xff);
+ return (buf);
+}
+
--- /dev/null
+#ifndef __bcm_utils_h
+#define __bcm_utils_h
+
+#define BCME_STRLEN 64 /* Max string length for BCM errors */
+#define VALID_BCMERROR(e) ((e <= 0) && (e >= BCME_LAST))
+
+/*
+ * error codes could be added but the defined ones shouldn't be changed/deleted
+ * these error codes are exposed to the user code
+ * when ever a new error code is added to this list
+ * please update errorstring table with the related error string and
+ * update osl files with os specific errorcode map
+*/
+
+#define BCME_OK 0 /* Success */
+#define BCME_ERROR -1 /* Error generic */
+#define BCME_BADARG -2 /* Bad Argument */
+#define BCME_BADOPTION -3 /* Bad option */
+#define BCME_NOTUP -4 /* Not up */
+#define BCME_NOTDOWN -5 /* Not down */
+#define BCME_NOTAP -6 /* Not AP */
+#define BCME_NOTSTA -7 /* Not STA */
+#define BCME_BADKEYIDX -8 /* BAD Key Index */
+#define BCME_RADIOOFF -9 /* Radio Off */
+#define BCME_NOTBANDLOCKED -10 /* Not band locked */
+#define BCME_NOCLK -11 /* No Clock */
+#define BCME_BADRATESET -12 /* BAD Rate valueset */
+#define BCME_BADBAND -13 /* BAD Band */
+#define BCME_BUFTOOSHORT -14 /* Buffer too short */
+#define BCME_BUFTOOLONG -15 /* Buffer too long */
+#define BCME_BUSY -16 /* Busy */
+#define BCME_NOTASSOCIATED -17 /* Not Associated */
+#define BCME_BADSSIDLEN -18 /* Bad SSID len */
+#define BCME_OUTOFRANGECHAN -19 /* Out of Range Channel */
+#define BCME_BADCHAN -20 /* Bad Channel */
+#define BCME_BADADDR -21 /* Bad Address */
+#define BCME_NORESOURCE -22 /* Not Enough Resources */
+#define BCME_UNSUPPORTED -23 /* Unsupported */
+#define BCME_BADLEN -24 /* Bad length */
+#define BCME_NOTREADY -25 /* Not Ready */
+#define BCME_EPERM -26 /* Not Permitted */
+#define BCME_NOMEM -27 /* No Memory */
+#define BCME_ASSOCIATED -28 /* Associated */
+#define BCME_RANGE -29 /* Not In Range */
+#define BCME_NOTFOUND -30 /* Not Found */
+#define BCME_WME_NOT_ENABLED -31 /* WME Not Enabled */
+#define BCME_TSPEC_NOTFOUND -32 /* TSPEC Not Found */
+#define BCME_ACM_NOTSUPPORTED -33 /* ACM Not Supported */
+#define BCME_NOT_WME_ASSOCIATION -34 /* Not WME Association */
+#define BCME_SDIO_ERROR -35 /* SDIO Bus Error */
+#define BCME_DONGLE_DOWN -36 /* Dongle Not Accessible */
+#define BCME_VERSION -37 /* Incorrect version */
+#define BCME_LAST BCME_VERSION
+
+/* buffer length for ethernet address from bcm_ether_ntoa() */
+#define ETHER_ADDR_STR_LEN 18 /* 18-bytes of Ethernet address buffer length */
+
+struct ether_addr {
+ unsigned char octet[6];
+};
+
+extern uint8 hndcrc8(uint8 *p, uint nbytes, uint8 crc);
+
+#endif /* __bcm_utils_h */
+
/*
* Broadcom SiliconBackplane chipcommon serial flash interface
*
- * Copyright 2001-2003, Broadcom Corporation
- * All Rights Reserved.
- *
- * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
- * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
- * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
- * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
+ * Copyright 2007, Broadcom Corporation
+ * All Rights Reserved.
+ *
+ * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
+ * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
+ * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
*
- * $Id: sflash.c,v 1.1.1.3 2003/11/10 17:43:38 hyin Exp $
+ * $Id$
*/
-#include <linux/config.h>
-#include <linux/module.h>
-#include <linux/slab.h>
-#include <linux/ioport.h>
-#include <linux/mtd/compatmac.h>
-#include <linux/mtd/mtd.h>
-#include <linux/mtd/partitions.h>
-#include <linux/errno.h>
-#include <linux/pci.h>
-#include <linux/delay.h>
-#include <asm/io.h>
-
-#ifdef CONFIG_MTD_PARTITIONS
-#include <linux/mtd/mtd.h>
-#include <linux/mtd/partitions.h>
-#include <linux/minix_fs.h>
-#include <linux/ext2_fs.h>
-#include <linux/romfs_fs.h>
-#include <linux/cramfs_fs.h>
-#include <linux/jffs2.h>
-#endif
-
#include <typedefs.h>
-#include <bcmdevs.h>
-#include <bcmutils.h>
#include <osl.h>
-#include <bcmutils.h>
-#include <bcmnvram.h>
+#include <sbutils.h>
#include <sbconfig.h>
#include <sbchipc.h>
+#include <bcmdevs.h>
#include <sflash.h>
-#include <trxhdr.h>
-
-#ifdef CONFIG_MTD_PARTITIONS
-extern struct mtd_partition * init_mtd_partitions(struct mtd_info *mtd, size_t size);
-#endif
-
-struct sflash_mtd {
- chipcregs_t *cc;
- struct semaphore lock;
- struct mtd_info mtd;
- struct mtd_erase_region_info regions[1];
-};
/* Private global state */
-static struct sflash_mtd sflash;
+static struct sflash sflash;
-static int
-sflash_mtd_poll(struct sflash_mtd *sflash, unsigned int offset, int timeout)
+/* Issue a serial flash command */
+static INLINE void
+sflash_cmd (osl_t * osh, chipcregs_t * cc, uint opcode)
{
- int now = jiffies;
- int ret = 0;
+ W_REG (osh, &cc->flashcontrol, SFLASH_START | opcode);
+ while (R_REG (osh, &cc->flashcontrol) & SFLASH_BUSY);
+}
- for (;;) {
- if (!sflash_poll(sflash->cc, offset)) {
- ret = 0;
- break;
- }
- if (time_after(jiffies, now + timeout)) {
- printk(KERN_ERR "sflash: timeout\n");
- ret = -ETIMEDOUT;
- break;
- }
- if (current->need_resched) {
- set_current_state(TASK_UNINTERRUPTIBLE);
- schedule_timeout(timeout / 10);
- } else
- udelay(1);
+/* Initialize serial flash access */
+struct sflash *
+sflash_init (sb_t * sbh, chipcregs_t * cc)
+{
+ uint32 id, id2;
+ osl_t *osh;
+
+ ASSERT (sbh);
+
+ osh = sb_osh (sbh);
+
+ bzero (&sflash, sizeof (sflash));
+
+ sflash.type = sbh->cccaps & CC_CAP_FLASH_MASK;
+
+ switch (sflash.type)
+ {
+ case SFLASH_ST:
+ /* Probe for ST chips */
+ sflash_cmd (osh, cc, SFLASH_ST_DP);
+ sflash_cmd (osh, cc, SFLASH_ST_RES);
+ id = R_REG (osh, &cc->flashdata);
+ switch (id)
+ {
+ case 0x11:
+ /* ST M25P20 2 Mbit Serial Flash */
+ sflash.blocksize = 64 * 1024;
+ sflash.numblocks = 4;
+ break;
+ case 0x12:
+ /* ST M25P40 4 Mbit Serial Flash */
+ sflash.blocksize = 64 * 1024;
+ sflash.numblocks = 8;
+ break;
+ case 0x13:
+ /* ST M25P80 8 Mbit Serial Flash */
+ sflash.blocksize = 64 * 1024;
+ sflash.numblocks = 16;
+ break;
+ case 0x14:
+ /* ST M25P16 16 Mbit Serial Flash */
+ sflash.blocksize = 64 * 1024;
+ sflash.numblocks = 32;
+ break;
+ case 0x15:
+ /* ST M25P32 32 Mbit Serial Flash */
+ sflash.blocksize = 64 * 1024;
+ sflash.numblocks = 64;
+ break;
+ case 0x16:
+ /* ST M25P64 64 Mbit Serial Flash */
+ sflash.blocksize = 64 * 1024;
+ sflash.numblocks = 128;
+ break;
+ case 0xbf:
+ W_REG (osh, &cc->flashaddress, 1);
+ sflash_cmd (osh, cc, SFLASH_ST_RES);
+ id2 = R_REG (osh, &cc->flashdata);
+ if (id2 == 0x44)
+ {
+ /* SST M25VF80 4 Mbit Serial Flash */
+ sflash.blocksize = 64 * 1024;
+ sflash.numblocks = 8;
+ }
+ break;
}
+ break;
+
+ case SFLASH_AT:
+ /* Probe for Atmel chips */
+ sflash_cmd (osh, cc, SFLASH_AT_STATUS);
+ id = R_REG (osh, &cc->flashdata) & 0x3c;
+ switch (id)
+ {
+ case 0xc:
+ /* Atmel AT45DB011 1Mbit Serial Flash */
+ sflash.blocksize = 256;
+ sflash.numblocks = 512;
+ break;
+ case 0x14:
+ /* Atmel AT45DB021 2Mbit Serial Flash */
+ sflash.blocksize = 256;
+ sflash.numblocks = 1024;
+ break;
+ case 0x1c:
+ /* Atmel AT45DB041 4Mbit Serial Flash */
+ sflash.blocksize = 256;
+ sflash.numblocks = 2048;
+ break;
+ case 0x24:
+ /* Atmel AT45DB081 8Mbit Serial Flash */
+ sflash.blocksize = 256;
+ sflash.numblocks = 4096;
+ break;
+ case 0x2c:
+ /* Atmel AT45DB161 16Mbit Serial Flash */
+ sflash.blocksize = 512;
+ sflash.numblocks = 4096;
+ break;
+ case 0x34:
+ /* Atmel AT45DB321 32Mbit Serial Flash */
+ sflash.blocksize = 512;
+ sflash.numblocks = 8192;
+ break;
+ case 0x3c:
+ /* Atmel AT45DB642 64Mbit Serial Flash */
+ sflash.blocksize = 1024;
+ sflash.numblocks = 8192;
+ break;
+ }
+ break;
+ }
- return ret;
+ sflash.size = sflash.blocksize * sflash.numblocks;
+ return sflash.size ? &sflash : NULL;
}
-static int
-sflash_mtd_read(struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf)
+/* Read len bytes starting at offset into buf. Returns number of bytes read. */
+int
+sflash_read (sb_t * sbh, chipcregs_t * cc, uint offset, uint len, uchar * buf)
{
- struct sflash_mtd *sflash = (struct sflash_mtd *) mtd->priv;
- int bytes, ret = 0;
-
- /* Check address range */
- if (!len)
- return 0;
- if ((from + len) > mtd->size)
- return -EINVAL;
-
- down(&sflash->lock);
-
- *retlen = 0;
- while (len) {
- if ((bytes = sflash_read(sflash->cc, (uint) from, len, buf)) < 0) {
- ret = bytes;
- break;
- }
- from += (loff_t) bytes;
- len -= bytes;
- buf += bytes;
- *retlen += bytes;
- }
+ uint8 *from, *to;
+ int cnt, i;
+ osl_t *osh;
- up(&sflash->lock);
+ ASSERT (sbh);
- return ret;
-}
+ if (!len)
+ return 0;
-static int
-sflash_mtd_write(struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf)
-{
- struct sflash_mtd *sflash = (struct sflash_mtd *) mtd->priv;
- int bytes, ret = 0;
-
- /* Check address range */
- if (!len)
- return 0;
- if ((to + len) > mtd->size)
- return -EINVAL;
-
- down(&sflash->lock);
-
- *retlen = 0;
- while (len) {
- if ((bytes = sflash_write(sflash->cc, (uint) to, len, buf)) < 0) {
- ret = bytes;
- break;
- }
- if ((ret = sflash_mtd_poll(sflash, (unsigned int) to, HZ / 10)))
- break;
- to += (loff_t) bytes;
- len -= bytes;
- buf += bytes;
- *retlen += bytes;
- }
+ if ((offset + len) > sflash.size)
+ return -22;
+
+ if ((len >= 4) && (offset & 3))
+ cnt = 4 - (offset & 3);
+ else if ((len >= 4) && ((uintptr) buf & 3))
+ cnt = 4 - ((uintptr) buf & 3);
+ else
+ cnt = len;
+
+ osh = sb_osh (sbh);
- up(&sflash->lock);
+ from = (uint8 *) (uintptr) OSL_UNCACHED (SB_FLASH2 + offset);
+ to = (uint8 *) buf;
- return ret;
+ if (cnt < 4)
+ {
+ for (i = 0; i < cnt; i++)
+ {
+ *to = R_REG (osh, from);
+ from++;
+ to++;
+ }
+ return cnt;
+ }
+
+ while (cnt >= 4)
+ {
+ *(uint32 *) to = R_REG (osh, (uint32 *) from);
+ from += 4;
+ to += 4;
+ cnt -= 4;
+ }
+
+ return (len - cnt);
}
-static int
-sflash_mtd_erase(struct mtd_info *mtd, struct erase_info *erase)
+/* Poll for command completion. Returns zero when complete. */
+int
+sflash_poll (sb_t * sbh, chipcregs_t * cc, uint offset)
{
- struct sflash_mtd *sflash = (struct sflash_mtd *) mtd->priv;
- int i, j, ret = 0;
- unsigned int addr, len;
-
- /* Check address range */
- if (!erase->len)
- return 0;
- if ((erase->addr + erase->len) > mtd->size)
- return -EINVAL;
-
- addr = erase->addr;
- len = erase->len;
-
- down(&sflash->lock);
-
- /* Ensure that requested region is aligned */
- for (i = 0; i < mtd->numeraseregions; i++) {
- for (j = 0; j < mtd->eraseregions[i].numblocks; j++) {
- if (addr == mtd->eraseregions[i].offset + mtd->eraseregions[i].erasesize * j &&
- len >= mtd->eraseregions[i].erasesize) {
- if ((ret = sflash_erase(sflash->cc, addr)) < 0)
- break;
- if ((ret = sflash_mtd_poll(sflash, addr, 10 * HZ)))
- break;
- addr += mtd->eraseregions[i].erasesize;
- len -= mtd->eraseregions[i].erasesize;
- }
- }
- if (ret)
- break;
- }
+ osl_t *osh;
- up(&sflash->lock);
+ ASSERT (sbh);
- /* Set erase status */
- if (ret)
- erase->state = MTD_ERASE_FAILED;
- else
- erase->state = MTD_ERASE_DONE;
+ osh = sb_osh (sbh);
- /* Call erase callback */
- if (erase->callback)
- erase->callback(erase);
+ if (offset >= sflash.size)
+ return -22;
- return ret;
-}
+ switch (sflash.type)
+ {
+ case SFLASH_ST:
+ /* Check for ST Write In Progress bit */
+ sflash_cmd (osh, cc, SFLASH_ST_RDSR);
+ return R_REG (osh, &cc->flashdata) & SFLASH_ST_WIP;
+ case SFLASH_AT:
+ /* Check for Atmel Ready bit */
+ sflash_cmd (osh, cc, SFLASH_AT_STATUS);
+ return !(R_REG (osh, &cc->flashdata) & SFLASH_AT_READY);
+ }
-#if LINUX_VERSION_CODE < 0x20212 && defined(MODULE)
-#define sflash_mtd_init init_module
-#define sflash_mtd_exit cleanup_module
-#endif
+ return 0;
+}
-mod_init_t
-sflash_mtd_init(void)
+/* Write len bytes starting at offset into buf. Returns number of bytes
+ * written. Caller should poll for completion.
+ */
+int
+sflash_write (sb_t * sbh, chipcregs_t * cc, uint offset, uint len,
+ const uchar * buf)
{
- struct pci_dev *pdev;
- int ret = 0;
- struct sflash *info;
- uint bank, i;
-#ifdef CONFIG_MTD_PARTITIONS
- struct mtd_partition *parts;
-#endif
-
- if (!(pdev = pci_find_device(VENDOR_BROADCOM, SB_CC, NULL))) {
- printk(KERN_ERR "sflash: chipcommon not found\n");
- return -ENODEV;
+ struct sflash *sfl;
+ int ret = 0;
+ bool is4712b0;
+ uint32 page, byte, mask;
+ osl_t *osh;
+
+ ASSERT (sbh);
+
+ osh = sb_osh (sbh);
+
+ if (!len)
+ return 0;
+
+ if ((offset + len) > sflash.size)
+ return -22;
+
+ sfl = &sflash;
+ switch (sfl->type)
+ {
+ case SFLASH_ST:
+ is4712b0 = (sbh->chip == BCM4712_CHIP_ID) && (sbh->chiprev == 3);
+ /* Enable writes */
+ sflash_cmd (osh, cc, SFLASH_ST_WREN);
+ if (is4712b0)
+ {
+ mask = 1 << 14;
+ W_REG (osh, &cc->flashaddress, offset);
+ W_REG (osh, &cc->flashdata, *buf++);
+ /* Set chip select */
+ OR_REG (osh, &cc->gpioout, mask);
+ /* Issue a page program with the first byte */
+ sflash_cmd (osh, cc, SFLASH_ST_PP);
+ ret = 1;
+ offset++;
+ len--;
+ while (len > 0)
+ {
+ if ((offset & 255) == 0)
+ {
+ /* Page boundary, drop cs and return */
+ AND_REG (osh, &cc->gpioout, ~mask);
+ if (!sflash_poll (sbh, cc, offset))
+ {
+ /* Flash rejected command */
+ return -11;
+ }
+ return ret;
+ }
+ else
+ {
+ /* Write single byte */
+ sflash_cmd (osh, cc, *buf++);
+ }
+ ret++;
+ offset++;
+ len--;
+ }
+ /* All done, drop cs if needed */
+ if ((offset & 255) != 1)
+ {
+ /* Drop cs */
+ AND_REG (osh, &cc->gpioout, ~mask);
+ if (!sflash_poll (sbh, cc, offset))
+ {
+ /* Flash rejected command */
+ return -12;
+ }
+ }
+ }
+ else if (sbh->ccrev >= 20)
+ {
+ W_REG (NULL, &cc->flashaddress, offset);
+ W_REG (NULL, &cc->flashdata, *buf++);
+ /* Issue a page program with CSA bit set */
+ sflash_cmd (osh, cc, SFLASH_ST_CSA | SFLASH_ST_PP);
+ ret = 1;
+ offset++;
+ len--;
+ while (len > 0)
+ {
+ if ((offset & 255) == 0)
+ {
+ /* Page boundary, poll droping cs and return */
+ W_REG (NULL, &cc->flashcontrol, 0);
+ if (!sflash_poll (sbh, cc, offset))
+ {
+ /* Flash rejected command */
+ return -11;
+ }
+ return ret;
+ }
+ else
+ {
+ /* Write single byte */
+ sflash_cmd (osh, cc, SFLASH_ST_CSA | *buf++);
+ }
+ ret++;
+ offset++;
+ len--;
+ }
+ /* All done, drop cs if needed */
+ if ((offset & 255) != 1)
+ {
+ /* Drop cs, poll */
+ W_REG (NULL, &cc->flashcontrol, 0);
+ if (!sflash_poll (sbh, cc, offset))
+ {
+ /* Flash rejected command */
+ return -12;
+ }
+ }
+ }
+ else
+ {
+ ret = 1;
+ W_REG (osh, &cc->flashaddress, offset);
+ W_REG (osh, &cc->flashdata, *buf);
+ /* Page program */
+ sflash_cmd (osh, cc, SFLASH_ST_PP);
+ }
+ break;
+ case SFLASH_AT:
+ mask = sfl->blocksize - 1;
+ page = (offset & ~mask) << 1;
+ byte = offset & mask;
+ /* Read main memory page into buffer 1 */
+ if (byte || (len < sfl->blocksize))
+ {
+ W_REG (osh, &cc->flashaddress, page);
+ sflash_cmd (osh, cc, SFLASH_AT_BUF1_LOAD);
+ /* 250 us for AT45DB321B */
+ SPINWAIT (sflash_poll (sbh, cc, offset), 1000);
+ ASSERT (!sflash_poll (sbh, cc, offset));
}
+ /* Write into buffer 1 */
+ for (ret = 0; (ret < (int) len) && (byte < sfl->blocksize); ret++)
+ {
+ W_REG (osh, &cc->flashaddress, byte++);
+ W_REG (osh, &cc->flashdata, *buf++);
+ sflash_cmd (osh, cc, SFLASH_AT_BUF1_WRITE);
+ }
+ /* Write buffer 1 into main memory page */
+ W_REG (osh, &cc->flashaddress, page);
+ sflash_cmd (osh, cc, SFLASH_AT_BUF1_PROGRAM);
+ break;
+ }
- memset(&sflash, 0, sizeof(struct sflash_mtd));
- init_MUTEX(&sflash.lock);
+ return ret;
+}
- /* Map registers and flash base */
- if (!(sflash.cc = ioremap_nocache(pci_resource_start(pdev, 0),
- pci_resource_len(pdev, 0)))) {
- printk(KERN_ERR "sflash: error mapping registers\n");
- ret = -EIO;
- goto fail;
- }
+/* Erase a region. Returns number of bytes scheduled for erasure.
+ * Caller should poll for completion.
+ */
+int
+sflash_erase (sb_t * sbh, chipcregs_t * cc, uint offset)
+{
+ struct sflash *sfl;
+ osl_t *osh;
+
+ ASSERT (sbh);
+
+ osh = sb_osh (sbh);
+
+ if (offset >= sflash.size)
+ return -22;
+
+ sfl = &sflash;
+ switch (sfl->type)
+ {
+ case SFLASH_ST:
+ sflash_cmd (osh, cc, SFLASH_ST_WREN);
+ W_REG (osh, &cc->flashaddress, offset);
+ sflash_cmd (osh, cc, SFLASH_ST_SE);
+ return sfl->blocksize;
+ case SFLASH_AT:
+ W_REG (osh, &cc->flashaddress, offset << 1);
+ sflash_cmd (osh, cc, SFLASH_AT_PAGE_ERASE);
+ return sfl->blocksize;
+ }
+
+ return 0;
+}
- /* Initialize serial flash access */
- info = sflash_init(sflash.cc);
+/*
+ * writes the appropriate range of flash, a NULL buf simply erases
+ * the region of flash
+ */
+int
+sflash_commit (sb_t * sbh, chipcregs_t * cc, uint offset, uint len,
+ const uchar * buf)
+{
+ struct sflash *sfl;
+ uchar *block = NULL, *cur_ptr, *blk_ptr;
+ uint blocksize = 0, mask, cur_offset, cur_length, cur_retlen, remainder;
+ uint blk_offset, blk_len, copied;
+ int bytes, ret = 0;
+ osl_t *osh;
+
+ ASSERT (sbh);
+
+ osh = sb_osh (sbh);
+
+ /* Check address range */
+ if (len <= 0)
+ return 0;
+
+ sfl = &sflash;
+ if ((offset + len) > sfl->size)
+ return -1;
+
+ blocksize = sfl->blocksize;
+ mask = blocksize - 1;
+
+ /* Allocate a block of mem */
+ if (!(block = MALLOC (osh, blocksize)))
+ return -1;
+
+ while (len)
+ {
+ /* Align offset */
+ cur_offset = offset & ~mask;
+ cur_length = blocksize;
+ cur_ptr = block;
+
+ remainder = blocksize - (offset & mask);
+ if (len < remainder)
+ cur_retlen = len;
+ else
+ cur_retlen = remainder;
+
+ /* buf == NULL means erase only */
+ if (buf)
+ {
+ /* Copy existing data into holding block if necessary */
+ if ((offset & mask) || (len < blocksize))
+ {
+ blk_offset = cur_offset;
+ blk_len = cur_length;
+ blk_ptr = cur_ptr;
+
+ /* Copy entire block */
+ while (blk_len)
+ {
+ copied =
+ sflash_read (sbh, cc, blk_offset, blk_len, blk_ptr);
+ blk_offset += copied;
+ blk_len -= copied;
+ blk_ptr += copied;
+ }
+ }
- if (!info) {
- printk(KERN_ERR "sflash: found no supported devices\n");
- ret = -ENODEV;
- goto fail;
+ /* Copy input data into holding block */
+ memcpy (cur_ptr + (offset & mask), buf, cur_retlen);
}
- /* Setup banks */
- sflash.regions[0].offset = 0;
- sflash.regions[0].erasesize = info->blocksize;
- sflash.regions[0].numblocks = info->numblocks;
- if (sflash.regions[0].erasesize > sflash.mtd.erasesize)
- sflash.mtd.erasesize = sflash.regions[0].erasesize;
- if (sflash.regions[0].erasesize * sflash.regions[0].numblocks) {
- sflash.mtd.size += sflash.regions[0].erasesize * sflash.regions[0].numblocks;
- }
- sflash.mtd.numeraseregions = 1;
- ASSERT(sflash.mtd.size == info->size);
-
- /* Register with MTD */
- sflash.mtd.name = "sflash";
- sflash.mtd.type = MTD_NORFLASH;
- sflash.mtd.flags = MTD_CAP_NORFLASH;
- sflash.mtd.eraseregions = sflash.regions;
- sflash.mtd.module = THIS_MODULE;
- sflash.mtd.erase = sflash_mtd_erase;
- sflash.mtd.read = sflash_mtd_read;
- sflash.mtd.write = sflash_mtd_write;
- sflash.mtd.priv = &sflash;
-
-#ifdef CONFIG_MTD_PARTITIONS
- parts = init_mtd_partitions(&sflash.mtd, sflash.mtd.size);
- for (i = 0; parts[i].name; i++);
- ret = add_mtd_partitions(&sflash.mtd, parts, i);
-#else
- ret = add_mtd_device(&sflash.mtd);
-#endif
- if (ret) {
- printk(KERN_ERR "sflash: add_mtd failed\n");
- goto fail;
+ /* Erase block */
+ if ((ret = sflash_erase (sbh, cc, (uint) cur_offset)) < 0)
+ goto done;
+ while (sflash_poll (sbh, cc, (uint) cur_offset));
+
+ /* buf == NULL means erase only */
+ if (!buf)
+ {
+ offset += cur_retlen;
+ len -= cur_retlen;
+ continue;
}
- return 0;
+ /* Write holding block */
+ while (cur_length > 0)
+ {
+ if ((bytes = sflash_write (sbh, cc,
+ (uint) cur_offset,
+ (uint) cur_length,
+ (uchar *) cur_ptr)) < 0)
+ {
+ ret = bytes;
+ goto done;
+ }
+ while (sflash_poll (sbh, cc, (uint) cur_offset));
+ cur_offset += bytes;
+ cur_length -= bytes;
+ cur_ptr += bytes;
+ }
- fail:
- if (sflash.cc)
- iounmap((void *) sflash.cc);
- return ret;
-}
+ offset += cur_retlen;
+ len -= cur_retlen;
+ buf += cur_retlen;
+ }
-mod_exit_t
-sflash_mtd_exit(void)
-{
-#ifdef CONFIG_MTD_PARTITIONS
- del_mtd_partitions(&sflash.mtd);
-#else
- del_mtd_device(&sflash.mtd);
-#endif
- iounmap((void *) sflash.cc);
+ ret = len;
+done:
+ if (block)
+ MFREE (osh, block, blocksize);
+ return ret;
}
-
-module_init(sflash_mtd_init);
-module_exit(sflash_mtd_exit);
#include <typedefs.h>
#include <osl.h>
#include <bcmnvram.h>
-#include <bcmutils.h>
#include <sbconfig.h>
#include <sbchipc.h>
#include <sbutils.h>
/* Check strapping option if chipcommon exists */
if ((cc = sb_setcore(sbh, SB_CC, 0))) {
- fltype = readl(&cc->capabilities) & CAP_FLASH_MASK;
+ fltype = readl(&cc->capabilities) & CC_CAP_FLASH_MASK;
if (fltype == PFLASH) {
bcm947xx_map.map_priv_2 = 1;
window_addr = 0x1c000000;
-diff -urN linux.old/arch/mips/config-shared.in linux.dev/arch/mips/config-shared.in
---- linux.old/arch/mips/config-shared.in 2006-10-02 21:23:10.000000000 +0200
-+++ linux.dev/arch/mips/config-shared.in 2006-10-02 21:19:59.000000000 +0200
+Index: linux-2.4.35.4/arch/mips/config-shared.in
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/config-shared.in 2007-12-15 05:19:53.151449966 +0100
++++ linux-2.4.35.4/arch/mips/config-shared.in 2007-12-15 05:20:13.936634447 +0100
@@ -208,6 +208,14 @@
fi
define_bool CONFIG_MIPS_RTC y
dep_bool ' Console output to GDB' CONFIG_GDB_CONSOLE $CONFIG_KGDB
if [ "$CONFIG_KGDB" = "y" ]; then
define_bool CONFIG_DEBUG_INFO y
-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-02 21:23:10.000000000 +0200
-+++ linux.dev/arch/mips/kernel/cpu-probe.c 2006-10-02 21:19:59.000000000 +0200
+Index: linux-2.4.35.4/arch/mips/kernel/cpu-probe.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/kernel/cpu-probe.c 2007-12-15 05:19:44.862977633 +0100
++++ linux-2.4.35.4/arch/mips/kernel/cpu-probe.c 2007-12-15 05:20:13.944634901 +0100
@@ -162,7 +162,7 @@
static inline void cpu_probe_legacy(struct cpuinfo_mips *c)
case PRID_COMP_SIBYTE:
cpu_probe_sibyte(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-02 21:23:10.000000000 +0200
-+++ linux.dev/arch/mips/kernel/head.S 2006-10-02 21:19:59.000000000 +0200
+Index: linux-2.4.35.4/arch/mips/kernel/head.S
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/kernel/head.S 2007-12-15 05:19:44.866977862 +0100
++++ linux-2.4.35.4/arch/mips/kernel/head.S 2007-12-15 05:20:13.944634901 +0100
@@ -28,12 +28,20 @@
#include <asm/mipsregs.h>
#include <asm/stackframe.h>
/* The following two symbols are used for kernel profiling. */
EXPORT(stext)
-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-02 21:23:10.000000000 +0200
-+++ linux.dev/arch/mips/kernel/proc.c 2006-10-02 21:19:59.000000000 +0200
+Index: linux-2.4.35.4/arch/mips/kernel/proc.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/kernel/proc.c 2007-12-15 05:19:36.358492990 +0100
++++ linux-2.4.35.4/arch/mips/kernel/proc.c 2007-12-15 05:20:13.944634901 +0100
@@ -78,9 +78,10 @@
[CPU_AU1550] "Au1550",
[CPU_24K] "MIPS 24K",
static int show_cpuinfo(struct seq_file *m, void *v)
{
unsigned int version = current_cpu_data.processor_id;
-diff -urN linux.old/arch/mips/kernel/setup.c linux.dev/arch/mips/kernel/setup.c
---- linux.old/arch/mips/kernel/setup.c 2006-10-02 21:23:10.000000000 +0200
-+++ linux.dev/arch/mips/kernel/setup.c 2006-10-02 21:19:59.000000000 +0200
+Index: linux-2.4.35.4/arch/mips/kernel/setup.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/kernel/setup.c 2007-12-15 05:19:44.866977862 +0100
++++ linux-2.4.35.4/arch/mips/kernel/setup.c 2007-12-15 05:20:13.944634901 +0100
@@ -493,6 +493,7 @@
void swarm_setup(void);
void hp_setup(void);
default:
panic("Unsupported architecture");
}
-diff -urN linux.old/arch/mips/kernel/traps.c linux.dev/arch/mips/kernel/traps.c
---- linux.old/arch/mips/kernel/traps.c 2006-10-02 21:23:10.000000000 +0200
-+++ linux.dev/arch/mips/kernel/traps.c 2006-10-02 21:19:59.000000000 +0200
+Index: linux-2.4.35.4/arch/mips/kernel/traps.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/kernel/traps.c 2007-12-15 05:19:44.870978088 +0100
++++ linux-2.4.35.4/arch/mips/kernel/traps.c 2007-12-15 05:20:13.944634901 +0100
@@ -920,6 +920,7 @@
void __init trap_init(void)
{
if (cpu_has_fpu && !cpu_has_nofpuex)
set_except_vector(15, handle_fpe);
-diff -urN linux.old/arch/mips/Makefile linux.dev/arch/mips/Makefile
---- linux.old/arch/mips/Makefile 2006-10-02 21:23:10.000000000 +0200
-+++ linux.dev/arch/mips/Makefile 2006-10-02 21:19:59.000000000 +0200
+Index: linux-2.4.35.4/arch/mips/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/Makefile 2007-12-15 05:19:51.215339635 +0100
++++ linux-2.4.35.4/arch/mips/Makefile 2007-12-15 05:20:13.948635130 +0100
@@ -726,6 +726,19 @@
endif
# Choosing incompatible machines durings configuration will result in
# error messages during linking. Select a default linkscript if
# none has been choosen above.
-@@ -778,6 +791,7 @@
+@@ -779,6 +792,7 @@
$(MAKE) -C arch/$(ARCH)/tools clean
$(MAKE) -C arch/mips/baget clean
$(MAKE) -C arch/mips/lasat clean
archmrproper:
@$(MAKEBOOT) mrproper
-diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c
---- linux.old/arch/mips/mm/c-r4k.c 2006-10-02 21:23:10.000000000 +0200
-+++ linux.dev/arch/mips/mm/c-r4k.c 2006-10-02 21:19:59.000000000 +0200
-@@ -1166,3 +1166,47 @@
+Index: linux-2.4.35.4/arch/mips/mm/c-r4k.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/mm/c-r4k.c 2007-12-15 05:19:44.874978317 +0100
++++ linux-2.4.35.4/arch/mips/mm/c-r4k.c 2007-12-15 05:20:13.948635130 +0100
+@@ -1118,3 +1118,47 @@
build_clear_page();
build_copy_page();
}
+}
+
+
-diff -urN linux.old/arch/mips/pci/Makefile linux.dev/arch/mips/pci/Makefile
---- linux.old/arch/mips/pci/Makefile 2006-10-02 21:23:10.000000000 +0200
-+++ linux.dev/arch/mips/pci/Makefile 2006-10-02 21:19:59.000000000 +0200
+Index: linux-2.4.35.4/arch/mips/pci/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/pci/Makefile 2007-12-15 05:19:36.398495270 +0100
++++ linux-2.4.35.4/arch/mips/pci/Makefile 2007-12-15 05:20:13.948635130 +0100
@@ -13,7 +13,9 @@
obj-$(CONFIG_MIPS_MSC) += ops-msc.o
obj-$(CONFIG_MIPS_NILE4) += ops-nile4.o
obj-$(CONFIG_PCI_AUTO) += pci_auto.o
include $(TOPDIR)/Rules.make
-diff -urN linux.old/drivers/char/serial.c linux.dev/drivers/char/serial.c
---- linux.old/drivers/char/serial.c 2006-10-02 21:23:10.000000000 +0200
-+++ linux.dev/drivers/char/serial.c 2006-10-02 21:19:59.000000000 +0200
+Index: linux-2.4.35.4/drivers/char/serial.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/char/serial.c 2007-12-15 05:20:00.539871010 +0100
++++ linux-2.4.35.4/drivers/char/serial.c 2007-12-15 05:20:13.952635360 +0100
@@ -444,6 +444,10 @@
return inb(info->port+1);
#endif
cval = cflag & (CSIZE | CSTOPB);
#if defined(__powerpc__) || defined(__alpha__)
cval >>= 8;
-diff -urN linux.old/drivers/net/Makefile linux.dev/drivers/net/Makefile
---- linux.old/drivers/net/Makefile 2006-10-02 21:23:10.000000000 +0200
-+++ linux.dev/drivers/net/Makefile 2006-10-02 21:19:59.000000000 +0200
+Index: linux-2.4.35.4/drivers/net/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/drivers/net/Makefile 2007-12-15 05:20:10.804455954 +0100
++++ linux-2.4.35.4/drivers/net/Makefile 2007-12-15 05:20:13.952635360 +0100
@@ -3,6 +3,8 @@
# Makefile for the Linux network (ethercard) device drivers.
#
obj-y :=
obj-m :=
obj-n :=
-diff -urN linux.old/drivers/parport/Config.in linux.dev/drivers/parport/Config.in
---- linux.old/drivers/parport/Config.in 2006-10-02 21:23:10.000000000 +0200
-+++ linux.dev/drivers/parport/Config.in 2006-10-02 21:19:59.000000000 +0200
+Index: linux-2.4.35.4/drivers/parport/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/drivers/parport/Config.in 2007-12-15 05:19:36.422496639 +0100
++++ linux-2.4.35.4/drivers/parport/Config.in 2007-12-15 05:20:13.956635587 +0100
@@ -11,6 +11,7 @@
tristate 'Parallel port support' CONFIG_PARPORT
if [ "$CONFIG_PARPORT" != "n" ]; then
if [ "$CONFIG_PARPORT_PC" != "n" -a "$CONFIG_SERIAL" != "n" ]; then
if [ "$CONFIG_SERIAL" = "m" ]; then
define_tristate CONFIG_PARPORT_PC_CML1 m
-diff -urN linux.old/drivers/parport/Makefile linux.dev/drivers/parport/Makefile
---- linux.old/drivers/parport/Makefile 2006-10-02 21:23:10.000000000 +0200
-+++ linux.dev/drivers/parport/Makefile 2006-10-02 21:19:59.000000000 +0200
+Index: linux-2.4.35.4/drivers/parport/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/drivers/parport/Makefile 2007-12-15 05:19:36.430497094 +0100
++++ linux-2.4.35.4/drivers/parport/Makefile 2007-12-15 05:20:13.956635587 +0100
@@ -22,6 +22,7 @@
obj-$(CONFIG_PARPORT) += parport.o
obj-$(CONFIG_PARPORT_PC_PCMCIA) += parport_cs.o
obj-$(CONFIG_PARPORT_AMIGA) += parport_amiga.o
obj-$(CONFIG_PARPORT_MFC3) += parport_mfc3.o
-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-02 21:23:10.000000000 +0200
-+++ linux.dev/include/asm-mips/bootinfo.h 2006-10-02 21:19:59.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips/bootinfo.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/bootinfo.h 2007-12-15 05:19:45.026986980 +0100
++++ linux-2.4.35.4/include/asm-mips/bootinfo.h 2007-12-15 05:20:13.956635587 +0100
@@ -37,6 +37,7 @@
#define MACH_GROUP_HP_LJ 20 /* Hewlett Packard LaserJet */
#define MACH_GROUP_LASAT 21
* Valid machtype for group TITAN
*/
#define MACH_TITAN_YOSEMITE 1 /* PMC-Sierra Yosemite */
-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-02 21:23:10.000000000 +0200
-+++ linux.dev/include/asm-mips/cpu.h 2006-10-02 21:19:59.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips/cpu.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/cpu.h 2007-12-15 05:19:36.442497779 +0100
++++ linux-2.4.35.4/include/asm-mips/cpu.h 2007-12-15 05:20:13.956635587 +0100
@@ -22,6 +22,11 @@
spec.
*/
/*
* ISA Level encodings
-diff -urN linux.old/include/asm-mips/r4kcache.h linux.dev/include/asm-mips/r4kcache.h
---- linux.old/include/asm-mips/r4kcache.h 2006-10-02 21:23:10.000000000 +0200
-+++ linux.dev/include/asm-mips/r4kcache.h 2006-10-02 21:19:59.000000000 +0200
-@@ -658,4 +658,17 @@
+Index: linux-2.4.35.4/include/asm-mips/r4kcache.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/r4kcache.h 2007-12-15 05:19:36.450498234 +0100
++++ linux-2.4.35.4/include/asm-mips/r4kcache.h 2007-12-15 05:20:13.960635812 +0100
+@@ -567,4 +567,17 @@
cache128_unroll32(addr|ws,Index_Writeback_Inv_SD);
}
+}
+
#endif /* __ASM_R4KCACHE_H */
-diff -urN linux.old/include/asm-mips/serial.h linux.dev/include/asm-mips/serial.h
---- linux.old/include/asm-mips/serial.h 2006-10-02 21:23:10.000000000 +0200
-+++ linux.dev/include/asm-mips/serial.h 2006-10-02 21:19:59.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips/serial.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/serial.h 2007-12-15 05:19:36.458498689 +0100
++++ linux-2.4.35.4/include/asm-mips/serial.h 2007-12-15 05:20:13.960635812 +0100
@@ -223,6 +223,13 @@
#define TXX927_SERIAL_PORT_DEFNS
#endif
COBALT_SERIAL_PORT_DEFNS \
DDB5477_SERIAL_PORT_DEFNS \
EV96100_SERIAL_PORT_DEFNS \
-diff -urN linux.old/init/do_mounts.c linux.dev/init/do_mounts.c
---- linux.old/init/do_mounts.c 2006-10-02 21:23:10.000000000 +0200
-+++ linux.dev/init/do_mounts.c 2006-10-02 21:19:59.000000000 +0200
+Index: linux-2.4.35.4/init/do_mounts.c
+===================================================================
+--- linux-2.4.35.4.orig/init/do_mounts.c 2007-12-15 05:19:48.667194423 +0100
++++ linux-2.4.35.4/init/do_mounts.c 2007-12-15 05:20:13.960635812 +0100
@@ -254,7 +254,13 @@
{ "ftlb", 0x2c08 },
{ "ftlc", 0x2c10 },
+++ /dev/null
-diff -urN linux.old/include/linux/netdevice.h linux.dev/include/linux/netdevice.h
---- linux.old/include/linux/netdevice.h 2006-03-19 06:32:22.000000000 +0100
-+++ linux.dev/include/linux/netdevice.h 2006-03-19 06:33:21.000000000 +0100
-@@ -296,10 +296,7 @@
- /* List of functions to handle Wireless Extensions (instead of ioctl).
- * See <net/iw_handler.h> for details. Jean II */
- const struct iw_handler_def * wireless_handlers;
-- /* Instance data managed by the core of Wireless Extensions. */
-- struct iw_public_data * wireless_data;
-
-- struct ethtool_ops *ethtool_ops;
-
- /*
- * This marks the end of the "visible" part of the structure. All
-@@ -354,8 +351,8 @@
-
- struct Qdisc *qdisc;
- struct Qdisc *qdisc_sleeping;
-+ struct Qdisc *qdisc_list;
- struct Qdisc *qdisc_ingress;
-- struct list_head qdisc_list;
- unsigned long tx_queue_len; /* Max frames per queue allowed */
-
- /* hard_start_xmit synchronizer */
-@@ -455,6 +452,10 @@
- /* this will get initialized at each interface type init routine */
- struct divert_blk *divert;
- #endif /* CONFIG_NET_DIVERT */
-+ struct ethtool_ops *ethtool_ops;
-+
-+ /* Instance data managed by the core of Wireless Extensions. */
-+ struct iw_public_data * wireless_data;
- };
-
- /* 2.6 compatibility */
-diff -urN linux.old/include/linux/skbuff.h linux.dev/include/linux/skbuff.h
---- linux.old/include/linux/skbuff.h 2006-03-19 06:32:22.000000000 +0100
-+++ linux.dev/include/linux/skbuff.h 2006-03-19 06:29:41.000000000 +0100
-@@ -138,10 +138,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
-@@ -225,6 +221,10 @@
- #if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
- struct nf_info *nf_info;
- #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 -urN linux.old/include/net/pkt_sched.h linux.dev/include/net/pkt_sched.h
---- linux.old/include/net/pkt_sched.h 2006-03-19 06:32:22.000000000 +0100
-+++ linux.dev/include/net/pkt_sched.h 2006-03-19 06:29:41.000000000 +0100
-@@ -63,8 +63,11 @@
- 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 *);
--
-+#ifdef CONFIG_BCM4710
-+ int (*drop)(struct Qdisc *);
-+#else
-+ unsigned int (*drop)(struct Qdisc *);
-+#endif
- int (*init)(struct Qdisc *, struct rtattr *arg);
- void (*reset)(struct Qdisc *);
- void (*destroy)(struct Qdisc *);
-@@ -84,12 +87,19 @@
- #define TCQ_F_THROTTLED 2
- #define TCQ_F_INGRESS 4
- struct Qdisc_ops *ops;
-+#ifdef CONFIG_BCM4710
-+ struct Qdisc *next;
-+#endif
- u32 handle;
-- u32 parent;
-+#ifndef CONFIG_BCM4710
-+ u32 parent;
-+#endif
- atomic_t refcnt;
- struct sk_buff_head q;
- struct net_device *dev;
-- struct list_head list;
-+#ifndef CONFIG_BCM4710
-+ struct list_head list;
-+#endif
-
- struct tc_stats stats;
- int (*reshape_fail)(struct sk_buff *skb, struct Qdisc *q);
-diff -urN linux.old/net/core/Makefile linux.dev/net/core/Makefile
---- linux.old/net/core/Makefile 2006-03-19 06:32:22.000000000 +0100
-+++ linux.dev/net/core/Makefile 2006-03-19 06:29:41.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 -urN linux.old/net/core/dev.c linux.dev/net/core/dev.c
---- linux.old/net/core/dev.c 2006-03-19 06:32:22.000000000 +0100
-+++ linux.dev/net/core/dev.c 2006-03-19 06:29:41.000000000 +0100
-@@ -2232,6 +2232,7 @@
- cmd == SIOCGMIIPHY ||
- cmd == SIOCGMIIREG ||
- cmd == SIOCSMIIREG ||
-+ cmd == SIOCETHTOOL ||
- cmd == SIOCWANDEV) {
- if (dev->do_ioctl) {
- if (!netif_device_present(dev))
-@@ -2324,6 +2325,7 @@
- }
- return ret;
-
-+#ifndef CONFIG_BCM4710
- case SIOCETHTOOL:
- dev_load(ifr.ifr_name);
- rtnl_lock();
-@@ -2337,6 +2339,7 @@
- ret = -EFAULT;
- }
- return ret;
-+#endif
-
- /*
- * These ioctl calls:
-@@ -2412,6 +2415,7 @@
-
- default:
- if (cmd == SIOCWANDEV ||
-+ (cmd == SIOCETHTOOL) ||
- (cmd >= SIOCDEVPRIVATE &&
- cmd <= SIOCDEVPRIVATE + 15)) {
- dev_load(ifr.ifr_name);
-diff -urN linux.old/net/sched/sch_api.c linux.dev/net/sched/sch_api.c
---- linux.old/net/sched/sch_api.c 2006-03-19 06:32:22.000000000 +0100
-+++ linux.dev/net/sched/sch_api.c 2006-03-19 06:29:41.000000000 +0100
-@@ -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 -urN linux.old/net/sched/sch_generic.c linux.dev/net/sched/sch_generic.c
---- linux.old/net/sched/sch_generic.c 2006-03-19 06:32:22.000000000 +0100
-+++ linux.dev/net/sched/sch_generic.c 2006-03-19 06:29:41.000000000 +0100
-@@ -399,7 +399,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;
-@@ -429,11 +428,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
-@@ -462,9 +472,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;
- }
-@@ -508,7 +518,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);
-@@ -530,7 +540,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 -urN linux.old/arch/mips/kernel/entry.S linux.dev/arch/mips/kernel/entry.S
---- linux.old/arch/mips/kernel/entry.S 2005-07-05 16:46:49.000000000 +0200
-+++ linux.dev/arch/mips/kernel/entry.S 2005-07-06 11:23:55.000000000 +0200
+Index: linux-2.4.35.4/arch/mips/kernel/entry.S
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/kernel/entry.S 2007-12-15 05:19:36.266487747 +0100
++++ linux-2.4.35.4/arch/mips/kernel/entry.S 2007-12-15 05:20:14.372659296 +0100
@@ -100,6 +100,10 @@
* and R4400 SC and MC versions.
*/
#if R5432_CP0_INTERRUPT_WAR
mfc0 k0, CP0_INDEX
#endif
-diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c
---- linux.old/arch/mips/mm/c-r4k.c 2005-07-05 16:46:49.000000000 +0200
-+++ linux.dev/arch/mips/mm/c-r4k.c 2005-07-06 11:23:55.000000000 +0200
+Index: linux-2.4.35.4/arch/mips/mm/c-r4k.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/mm/c-r4k.c 2007-12-15 05:20:13.948635130 +0100
++++ linux-2.4.35.4/arch/mips/mm/c-r4k.c 2007-12-15 05:20:14.376659523 +0100
@@ -14,6 +14,12 @@
#include <linux/mm.h>
#include <linux/bitops.h>
#include <asm/bcache.h>
#include <asm/bootinfo.h>
#include <asm/cacheops.h>
-@@ -40,6 +46,8 @@
+@@ -40,6 +46,7 @@
.bc_inv = (void *)no_sc_noop
};
+int bcm4710 = 0;
-+EXPORT_SYMBOL(bcm4710);
struct bcache_ops *bcops = &no_sc_ops;
#define cpu_is_r4600_v1_x() ((read_c0_prid() & 0xfffffff0) == 0x2010)
-@@ -64,8 +72,10 @@
+@@ -64,8 +71,10 @@
static inline void r4k_blast_dcache_page_setup(void)
{
unsigned long dc_lsize = current_cpu_data.dcache.linesz;
r4k_blast_dcache_page = blast_dcache16_page;
else if (dc_lsize == 32)
r4k_blast_dcache_page = r4k_blast_dcache_page_dc32;
-@@ -77,7 +87,9 @@
+@@ -77,7 +86,9 @@
{
unsigned long dc_lsize = current_cpu_data.dcache.linesz;
r4k_blast_dcache_page_indexed = blast_dcache16_page_indexed;
else if (dc_lsize == 32)
r4k_blast_dcache_page_indexed = blast_dcache32_page_indexed;
-@@ -89,7 +101,9 @@
+@@ -89,7 +100,9 @@
{
unsigned long dc_lsize = current_cpu_data.dcache.linesz;
r4k_blast_dcache = blast_dcache16;
else if (dc_lsize == 32)
r4k_blast_dcache = blast_dcache32;
-@@ -266,6 +280,7 @@
+@@ -266,6 +279,7 @@
r4k_blast_dcache();
r4k_blast_icache();
switch (current_cpu_data.cputype) {
case CPU_R4000SC:
case CPU_R4000MC:
-@@ -304,10 +319,10 @@
+@@ -304,10 +318,10 @@
* Kludge alert. For obscure reasons R4000SC and R4400SC go nuts if we
* only flush the primary caches but R10000 and R12000 behave sane ...
*/
r4k_blast_scache();
}
-@@ -383,12 +398,15 @@
+@@ -383,12 +397,15 @@
unsigned long ic_lsize = current_cpu_data.icache.linesz;
unsigned long addr, aend;
while (1) {
/* Hit_Writeback_Inv_D */
-@@ -403,8 +421,6 @@
+@@ -403,8 +420,6 @@
if (end - start > icache_size)
r4k_blast_icache();
else {
while (1) {
/* Hit_Invalidate_I */
protected_flush_icache_line(addr);
-@@ -413,6 +429,9 @@
+@@ -413,6 +428,9 @@
addr += ic_lsize;
}
}
}
/*
-@@ -443,7 +462,8 @@
+@@ -443,7 +461,8 @@
if (cpu_has_subset_pcaches) {
unsigned long addr = (unsigned long) page_address(page);
ClearPageDcacheDirty(page);
return;
-@@ -451,6 +471,7 @@
+@@ -451,6 +470,7 @@
if (!cpu_has_ic_fills_f_dc) {
unsigned long addr = (unsigned long) page_address(page);
r4k_blast_dcache_page(addr);
ClearPageDcacheDirty(page);
}
-@@ -477,7 +498,7 @@
+@@ -477,7 +497,7 @@
/* Catch bad driver code */
BUG_ON(size == 0);
unsigned long sc_lsize = current_cpu_data.scache.linesz;
if (size >= scache_size) {
-@@ -509,6 +530,8 @@
+@@ -509,6 +529,8 @@
R4600_HIT_CACHEOP_WAR_IMPL;
a = addr & ~(dc_lsize - 1);
end = (addr + size - 1) & ~(dc_lsize - 1);
while (1) {
flush_dcache_line(a); /* Hit_Writeback_Inv_D */
if (a == end)
-@@ -527,7 +550,7 @@
+@@ -527,7 +549,7 @@
/* Catch bad driver code */
BUG_ON(size == 0);
unsigned long sc_lsize = current_cpu_data.scache.linesz;
if (size >= scache_size) {
-@@ -554,6 +577,8 @@
+@@ -554,6 +576,8 @@
R4600_HIT_CACHEOP_WAR_IMPL;
a = addr & ~(dc_lsize - 1);
end = (addr + size - 1) & ~(dc_lsize - 1);
while (1) {
flush_dcache_line(a); /* Hit_Writeback_Inv_D */
if (a == end)
-@@ -577,6 +602,8 @@
+@@ -577,6 +601,8 @@
unsigned long dc_lsize = current_cpu_data.dcache.linesz;
R4600_HIT_CACHEOP_WAR_IMPL;
protected_writeback_dcache_line(addr & ~(dc_lsize - 1));
protected_flush_icache_line(addr & ~(ic_lsize - 1));
if (MIPS4K_ICACHE_REFILL_WAR) {
-@@ -986,10 +1013,12 @@
+@@ -986,10 +1012,12 @@
case CPU_R4000MC:
case CPU_R4400SC:
case CPU_R4400MC:
break;
case CPU_R10000:
-@@ -1041,6 +1070,19 @@
+@@ -1041,6 +1069,19 @@
static inline void coherency_setup(void)
{
change_c0_config(CONF_CM_CMASK, CONF_CM_DEFAULT);
/*
* c0_status.cu=0 specifies that updates by the sc instruction use
-@@ -1073,6 +1115,12 @@
+@@ -1073,6 +1114,12 @@
memcpy((void *)(KSEG0 + 0x100), &except_vec2_generic, 0x80);
memcpy((void *)(KSEG1 + 0x100), &except_vec2_generic, 0x80);
probe_pcache();
setup_scache();
-diff -urN linux.old/arch/mips/mm/tlbex-mips32.S linux.dev/arch/mips/mm/tlbex-mips32.S
---- linux.old/arch/mips/mm/tlbex-mips32.S 2005-07-05 16:46:49.000000000 +0200
-+++ linux.dev/arch/mips/mm/tlbex-mips32.S 2005-07-06 11:23:56.000000000 +0200
+Index: linux-2.4.35.4/arch/mips/mm/tlbex-mips32.S
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/mm/tlbex-mips32.S 2007-12-15 05:19:44.874978317 +0100
++++ linux-2.4.35.4/arch/mips/mm/tlbex-mips32.S 2007-12-15 05:20:14.380659748 +0100
@@ -90,6 +90,9 @@
.set noat
LEAF(except_vec0_r4000)
#ifdef CONFIG_SMP
mfc0 k1, CP0_CONTEXT
la k0, pgd_current
-diff -urN linux.old/include/asm-mips/r4kcache.h linux.dev/include/asm-mips/r4kcache.h
---- linux.old/include/asm-mips/r4kcache.h 2005-07-05 16:46:49.000000000 +0200
-+++ linux.dev/include/asm-mips/r4kcache.h 2005-07-06 12:52:57.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips/r4kcache.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/r4kcache.h 2007-12-15 05:20:13.960635812 +0100
++++ linux-2.4.35.4/include/asm-mips/r4kcache.h 2007-12-15 05:20:14.384659977 +0100
@@ -15,6 +15,18 @@
#include <asm/asm.h>
#include <asm/cacheops.h>
do {
cache64_unroll32(start,Hit_Invalidate_I);
start += 0x800;
-diff -urN linux.old/include/asm-mips/stackframe.h linux.dev/include/asm-mips/stackframe.h
---- linux.old/include/asm-mips/stackframe.h 2005-07-05 16:46:49.000000000 +0200
-+++ linux.dev/include/asm-mips/stackframe.h 2005-07-06 11:23:56.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips/stackframe.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/stackframe.h 2007-12-15 05:19:36.298489571 +0100
++++ linux-2.4.35.4/include/asm-mips/stackframe.h 2007-12-15 05:20:14.388660206 +0100
@@ -209,6 +209,20 @@
#endif
#define RESTORE_SP \
lw sp, PT_R29(sp); \
-diff -urN linux.old/mm/memory.c linux.dev/mm/memory.c
---- linux.old/mm/memory.c 2005-04-04 03:42:20.000000000 +0200
-+++ linux.dev/mm/memory.c 2005-07-06 11:23:56.000000000 +0200
-@@ -925,6 +925,7 @@
+Index: linux-2.4.35.4/mm/memory.c
+===================================================================
+--- linux-2.4.35.4.orig/mm/memory.c 2007-12-15 05:19:36.306490026 +0100
++++ linux-2.4.35.4/mm/memory.c 2007-12-15 05:20:14.388660206 +0100
+@@ -927,6 +927,7 @@
flush_page_to_ram(new_page);
flush_cache_page(vma, address);
establish_pte(vma, address, page_table, pte_mkwrite(pte_mkdirty(mk_pte(new_page, vma->vm_page_prot))));
-diff -urN linux.old/drivers/mtd/devices/Config.in linux.dev/drivers/mtd/devices/Config.in
---- linux.old/drivers/mtd/devices/Config.in 2006-06-22 17:35:39.000000000 +0200
-+++ linux.dev/drivers/mtd/devices/Config.in 2006-06-21 21:41:24.000000000 +0200
+Index: linux-2.4.35.4/drivers/mtd/devices/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/drivers/mtd/devices/Config.in 2007-12-15 05:19:36.210484556 +0100
++++ linux-2.4.35.4/drivers/mtd/devices/Config.in 2007-12-15 05:20:14.656675480 +0100
@@ -5,6 +5,7 @@
mainmenu_option next_comment
dep_tristate ' Ramix PMC551 PCI Mezzanine RAM card support' CONFIG_MTD_PMC551 $CONFIG_MTD $CONFIG_PCI
if [ "$CONFIG_MTD_PMC551" = "y" -o "$CONFIG_MTD_PMC551" = "m" ]; then
bool ' PMC551 256M DRAM Bugfix' CONFIG_MTD_PMC551_BUGFIX
-diff -urN linux.old/drivers/mtd/devices/Makefile linux.dev/drivers/mtd/devices/Makefile
---- linux.old/drivers/mtd/devices/Makefile 2006-06-22 17:35:39.000000000 +0200
-+++ linux.dev/drivers/mtd/devices/Makefile 2006-06-21 21:41:24.000000000 +0200
+Index: linux-2.4.35.4/drivers/mtd/devices/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/drivers/mtd/devices/Makefile 2007-12-15 05:19:36.218485012 +0100
++++ linux-2.4.35.4/drivers/mtd/devices/Makefile 2007-12-15 05:20:14.660675705 +0100
@@ -3,6 +3,8 @@
#
# $Id: Makefile,v 1.4 2001/06/26 21:10:05 spse Exp $
obj-$(CONFIG_MTD_DOC1000) += doc1000.o
obj-$(CONFIG_MTD_DOC2000) += doc2000.o
obj-$(CONFIG_MTD_DOC2001) += doc2001.o
-diff -urN linux.old/drivers/mtd/maps/Config.in linux.dev/drivers/mtd/maps/Config.in
---- linux.old/drivers/mtd/maps/Config.in 2006-06-22 17:35:39.000000000 +0200
-+++ linux.dev/drivers/mtd/maps/Config.in 2006-06-21 21:41:24.000000000 +0200
+Index: linux-2.4.35.4/drivers/mtd/maps/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/drivers/mtd/maps/Config.in 2007-12-15 05:19:44.950982647 +0100
++++ linux-2.4.35.4/drivers/mtd/maps/Config.in 2007-12-15 05:20:14.664675934 +0100
@@ -48,6 +48,7 @@
fi
dep_tristate ' Pb1000 MTD support' CONFIG_MTD_PB1000 $CONFIG_MIPS_PB1000
dep_tristate ' Pb1500 MTD support' CONFIG_MTD_PB1500 $CONFIG_MIPS_PB1500
dep_tristate ' Pb1100 MTD support' CONFIG_MTD_PB1100 $CONFIG_MIPS_PB1100
-diff -urN linux.old/drivers/mtd/maps/Makefile linux.dev/drivers/mtd/maps/Makefile
---- linux.old/drivers/mtd/maps/Makefile 2006-06-22 17:35:39.000000000 +0200
-+++ linux.dev/drivers/mtd/maps/Makefile 2006-06-21 21:41:24.000000000 +0200
+Index: linux-2.4.35.4/drivers/mtd/maps/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/drivers/mtd/maps/Makefile 2007-12-15 05:19:44.954982876 +0100
++++ linux-2.4.35.4/drivers/mtd/maps/Makefile 2007-12-15 05:20:14.664675934 +0100
@@ -3,6 +3,8 @@
#
# $Id: Makefile,v 1.37 2003/01/24 14:26:38 dwmw2 Exp $
---- linux-2.4.30/drivers/bluetooth/hci_usb.c 2004-08-08 01:26:04.000000000 +0200
-+++ linux-2.4.30/drivers/bluetooth/hci_usb.c 2005-07-25 20:12:11.000000000 +0200
+Index: linux-2.4.35.4/drivers/bluetooth/hci_usb.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/bluetooth/hci_usb.c 2007-12-15 05:19:36.182482961 +0100
++++ linux-2.4.35.4/drivers/bluetooth/hci_usb.c 2007-12-15 05:20:14.964693031 +0100
@@ -259,6 +259,9 @@
void *buf;
-diff -urN linux.old/arch/mips/lib/ide-std.c linux.dev/arch/mips/lib/ide-std.c
---- linux.old/arch/mips/lib/ide-std.c 2003-08-25 13:44:40.000000000 +0200
-+++ linux.dev/arch/mips/lib/ide-std.c 2005-08-12 23:55:23.886963936 +0200
+Index: linux-2.4.35.4/arch/mips/lib/ide-std.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/lib/ide-std.c 2007-12-15 05:19:36.146480908 +0100
++++ linux-2.4.35.4/arch/mips/lib/ide-std.c 2007-12-15 05:20:15.796740447 +0100
@@ -31,12 +31,14 @@
static ide_ioreg_t std_ide_default_io_base(int index)
{
-diff -urN linux.old/drivers/net/b44.c linux.dev/drivers/net/b44.c
---- linux.old/drivers/net/b44.c 2006-02-12 13:49:59.000000000 +0100
-+++ linux.dev/drivers/net/b44.c 2006-03-06 22:37:14.000000000 +0100
+Index: linux-2.4.35.4/drivers/net/b44.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/net/b44.c 2007-12-15 05:19:36.094477944 +0100
++++ linux-2.4.35.4/drivers/net/b44.c 2007-12-15 05:20:16.020753214 +0100
@@ -1,7 +1,9 @@
/* b44.c: Broadcom 4400 device driver.
*
*
* Distribute under GPL.
*/
-@@ -25,6 +27,41 @@
+@@ -25,6 +27,39 @@
#include "b44.h"
+#include <typedefs.h>
+#include <bcmdevs.h>
-+#include <bcmutils.h>
+#include <osl.h>
-+#include <bcmutils.h>
+#include <bcmnvram.h>
+#include <sbconfig.h>
+#include <sbchipc.h>
bw32(B44_MDIO_CTRL, (MDIO_CTRL_PREAMBLE |
(0x0d & MDIO_CTRL_MAXF_MASK)));
br32(B44_MDIO_CTRL);
-@@ -1215,6 +1357,8 @@
+@@ -1216,6 +1358,8 @@
struct b44 *bp = dev->priv;
int err;
err = b44_alloc_consistent(bp);
if (err)
return err;
-@@ -1235,9 +1379,10 @@
+@@ -1236,9 +1380,10 @@
bp->timer.expires = jiffies + HZ;
bp->timer.data = (unsigned long) bp;
bp->timer.function = b44_timer;
return 0;
-@@ -1628,7 +1773,7 @@
+@@ -1638,7 +1783,7 @@
u32 mii_regval;
spin_lock_irq(&bp->lock);
spin_unlock_irq(&bp->lock);
data->val_out = mii_regval;
-@@ -1641,7 +1786,7 @@
+@@ -1651,7 +1796,7 @@
return -EPERM;
spin_lock_irq(&bp->lock);
spin_unlock_irq(&bp->lock);
return err;
-@@ -1668,21 +1813,52 @@
+@@ -1678,21 +1823,52 @@
static int __devinit b44_get_invariants(struct b44 *bp)
{
u8 eeprom[128];
/* With this, plus the rx_header prepended to the data by the
* hardware, we'll land the ethernet header on a 2-byte boundary.
-@@ -1692,13 +1868,12 @@
+@@ -1702,13 +1878,12 @@
bp->imask = IMASK_DEF;
bp->core_unit = ssb_core_unit(bp);
}
static int __devinit b44_init_one(struct pci_dev *pdev,
-@@ -1710,6 +1885,10 @@
+@@ -1720,6 +1895,10 @@
struct b44 *bp;
int err, i;
if (b44_version_printed++ == 0)
printk(KERN_INFO "%s", version);
-@@ -1819,11 +1998,17 @@
-
- pci_save_state(bp->pdev, bp->pci_cfg_state);
+@@ -1834,11 +2013,17 @@
+ */
+ b44_chip_reset(bp);
- printk(KERN_INFO "%s: Broadcom 4400 10/100BaseT Ethernet ", dev->name);
+ printk(KERN_INFO "%s: Broadcom %s 10/100BaseT Ethernet ", dev->name,
return 0;
err_out_iounmap:
-diff -urN linux.old/drivers/net/b44.h linux.dev/drivers/net/b44.h
---- linux.old/drivers/net/b44.h 2006-02-12 13:49:59.000000000 +0100
-+++ linux.dev/drivers/net/b44.h 2006-01-24 20:52:08.000000000 +0100
+Index: linux-2.4.35.4/drivers/net/b44.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/net/b44.h 2007-12-15 05:19:36.102478402 +0100
++++ linux-2.4.35.4/drivers/net/b44.h 2007-12-15 05:20:16.028753670 +0100
@@ -229,8 +229,6 @@
#define SBIPSFLAG_IMASK4 0x3f000000 /* Which sbflags --> mips interrupt 4 */
#define SBIPSFLAG_ISHIFT4 24
/* SW copy of device statistics, kept up to date by periodic timer
* which probes HW values. Must have same relative layout as HW
-diff -urN linux.old/include/linux/pci_ids.h linux.dev/include/linux/pci_ids.h
---- linux.old/include/linux/pci_ids.h 2006-02-12 13:49:59.000000000 +0100
-+++ linux.dev/include/linux/pci_ids.h 2006-01-24 20:52:08.000000000 +0100
-@@ -1735,6 +1735,7 @@
+Index: linux-2.4.35.4/include/linux/pci_ids.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/pci_ids.h 2007-12-15 05:19:36.114479084 +0100
++++ linux-2.4.35.4/include/linux/pci_ids.h 2007-12-15 05:20:16.032753896 +0100
+@@ -1756,6 +1756,7 @@
#define PCI_DEVICE_ID_TIGON3_5901_2 0x170e
#define PCI_DEVICE_ID_BCM4401 0x4401
#define PCI_DEVICE_ID_BCM4401B0 0x4402
-diff -urN linux.old/drivers/pcmcia/yenta.c linux.dev/drivers/pcmcia/yenta.c
---- linux.old/drivers/pcmcia/yenta.c 2004-11-17 12:54:21.000000000 +0100
-+++ linux.dev/drivers/pcmcia/yenta.c 2006-04-11 17:47:45.000000000 +0200
+Index: linux-2.4.35.4/drivers/pcmcia/yenta.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/pcmcia/yenta.c 2007-12-15 05:19:36.066476349 +0100
++++ linux-2.4.35.4/drivers/pcmcia/yenta.c 2007-12-15 05:20:16.268767348 +0100
@@ -543,6 +543,9 @@
* Probe for usable interrupts using the force
* register to generate bogus card status events.
---- linux-2.4.32.orig/drivers/net/b44.h 2006-09-19 19:56:03.000000000 +0200
-+++ linux-2.4.32/drivers/net/b44.h 2006-09-19 19:58:01.000000000 +0200
+Index: linux-2.4.35.4/drivers/net/b44.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/net/b44.h 2007-12-15 05:20:16.028753670 +0100
++++ linux-2.4.35.4/drivers/net/b44.h 2007-12-15 05:20:16.480779429 +0100
@@ -122,6 +122,7 @@
#define RXCONFIG_FLOW 0x00000020 /* Flow Control Enable */
#define RXCONFIG_FLOW_ACCEPT 0x00000040 /* Accept Unicast Flow Control Frame */
#define B44_RXMAXLEN 0x0404UL /* EMAC RX Max Packet Length */
#define B44_TXMAXLEN 0x0408UL /* EMAC TX Max Packet Length */
#define B44_MDIO_CTRL 0x0410UL /* EMAC MDIO Control */
---- linux-2.4.32.orig/drivers/net/b44.c 2006-09-19 19:56:03.000000000 +0200
-+++ linux-2.4.32/drivers/net/b44.c 2006-09-19 20:08:22.000000000 +0200
+Index: linux-2.4.35.4/drivers/net/b44.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/net/b44.c 2007-12-15 05:20:16.020753214 +0100
++++ linux-2.4.35.4/drivers/net/b44.c 2007-12-15 05:20:16.480779429 +0100
@@ -1301,6 +1301,7 @@
{
struct b44 *bp = dev->priv;
spin_unlock_irq(&bp->lock);
return 0;
-@@ -1488,7 +1493,7 @@
+@@ -1495,7 +1500,7 @@
val = br32(B44_RXCONFIG);
val &= ~(RXCONFIG_PROMISC | RXCONFIG_ALLMULTI);
---- linux.old/net/sched/sch_generic.c 2006-11-24 02:42:23.000000000 +0100
-+++ linux.dev/net/sched/sch_generic.c 2006-11-24 02:36:58.000000000 +0100
+Index: linux-2.4.35.4/net/sched/sch_generic.c
+===================================================================
+--- linux-2.4.35.4.orig/net/sched/sch_generic.c 2007-12-15 05:20:10.816456638 +0100
++++ linux-2.4.35.4/net/sched/sch_generic.c 2007-12-15 05:20:16.704792197 +0100
@@ -84,6 +84,11 @@
struct sk_buff *skb;
---- linux-2.4.34/drivers/ide/pci/aec62xx.c.old 2006-12-23 22:34:20.000000000 +0200
-+++ linux-2.4.34/drivers/ide/pci/aec62xx.c 2007-01-14 12:06:05.000000000 +0200
+Index: linux-2.4.35.4/drivers/ide/pci/aec62xx.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/ide/pci/aec62xx.c 2007-12-15 05:19:35.958470194 +0100
++++ linux-2.4.35.4/drivers/ide/pci/aec62xx.c 2007-12-15 05:20:16.928804961 +0100
@@ -3,6 +3,8 @@
*
* Copyright (C) 1999-2002 Andre Hedrick <andre@linux-ide.org>
ide_hwif_t *hwif = HWIF(drive);
struct hd_driveid *id = drive->id;
-- if ((id->capability & 1) && drive->autodma) {
+#ifndef CONFIG_BCM947XX
-+ if ((id->capability & 1) && drive->autodma) {
+ if ((id->capability & 1) && drive->autodma) {
+#else
+ if (1) {
+#endif
/* Consult the list of known "bad" drives */
if (hwif->ide_dma_bad_drive(drive))
goto fast_ata_pio;
-@@ -414,10 +416,60 @@
+@@ -414,10 +420,60 @@
{
int bus_speed = system_bus_clock();
#if defined(DISPLAY_AEC62XX_TIMINGS) && defined(CONFIG_PROC_FS)
aec_devs[n_aec_devs++] = dev;
-@@ -500,6 +552,7 @@
+@@ -500,6 +556,7 @@
static void __init init_setup_aec6x80 (struct pci_dev *dev, ide_pci_device_t *d)
{
unsigned long bar4reg = pci_resource_start(dev, 4);
if (inb(bar4reg+2) & 0x10) {
-@@ -512,6 +565,7 @@
+@@ -512,6 +569,7 @@
strcpy(d->name, "AEC6280R");
}
---- linux.old/drivers/ide/pci/pdc202xx_old.c 2006-12-23 21:34:20.000000000 +0100
-+++ linux.dev/drivers/ide/pci/pdc202xx_old.c 2007-01-24 18:03:28.000000000 +0100
+Index: linux-2.4.35.4/drivers/ide/pci/pdc202xx_old.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/ide/pci/pdc202xx_old.c 2007-12-15 05:19:35.922468144 +0100
++++ linux-2.4.35.4/drivers/ide/pci/pdc202xx_old.c 2007-12-15 05:20:17.136816813 +0100
@@ -253,23 +253,23 @@
pci_read_config_byte(dev, (drive_pci)|0x03, &DP);
switch(dev->device) {
case PCI_DEVICE_ID_PROMISE_20267:
case PCI_DEVICE_ID_PROMISE_20265:
-
+++ /dev/null
---- a/arch/mips/bcm947xx/include/sbchipc.h 2007-11-23 12:12:01.000000000 -0500
-+++ b/arch/mips/bcm947xx/include/sbchipc.h 2007-11-25 06:16:42.000000000 -0500
-@@ -188,6 +188,7 @@
- #define CAP_JTAGP 0x00400000 /* JTAG Master Present */
- #define CAP_ROM 0x00800000 /* Internal boot rom active */
- #define CAP_BKPLN64 0x08000000 /* 64-bit backplane */
-+#define CAP_PMU 0x10000000 /* PMU Present, rev >= 20 */
-
- /* PLL type */
- #define PLL_NONE 0x00000000
-@@ -199,6 +200,9 @@
- #define PLL_TYPE6 0x00028000 /* 100/200 or 120/240 only */
- #define PLL_TYPE7 0x00038000 /* 25Mhz, 4 dividers */
-
-+/* watchdog clock */
-+#define WATCHDOG_CLOCK_5354 32000 /* Hz */
-+
- /* corecontrol */
- #define CC_UARTCLKO 0x00000001 /* Drive UART with internal clock */
- #define CC_SE 0x00000002 /* sync clk out enable (corerev >= 3) */
---- a/arch/mips/bcm947xx/include/bcmdevs.h 2007-11-23 12:12:01.000000000 -0500
-+++ b/arch/mips/bcm947xx/include/bcmdevs.h 2007-11-25 05:58:20.000000000 -0500
-@@ -121,6 +121,7 @@
- #define BCM5365_CHIP_ID 0x5365 /* 5365 chipcommon chipid */
- #define BCM5350_CHIP_ID 0x5350 /* bcm5350 chipcommon chipid */
- #define BCM5352_CHIP_ID 0x5352 /* bcm5352 chipcommon chipid */
-+#define BCM5354_CHIP_ID 0x5354 /* bcm5354 chipcommon chipid */
-
- #define BCM4320_CHIP_ID 0x4320 /* bcm4320 chipcommon chipid */
-
---- a/arch/mips/bcm947xx/sbmips.c 2007-11-23 12:12:02.000000000 -0500
-+++ b/arch/mips/bcm947xx/sbmips.c 2007-11-25 05:40:40.000000000 -0500
-@@ -290,6 +290,12 @@
- n = R_REG(osh, &eir->clockcontrol_n);
- m = R_REG(osh, &eir->clockcontrol_sb);
- } else if ((cc = (chipcregs_t *) sb_setcore(sbh, SB_CC, 0))) {
-+ /* 5354 chip uses a non programmable PLL of frequency 240MHz */
-+ if (sb_chip(sbh) == BCM5354_CHIP_ID) {
-+ rate = 240000000;
-+ goto out;
-+ }
-+
- pll_type = R_REG(osh, &cc->capabilities) & CAP_PLL_MASK;
- n = R_REG(osh, &cc->clockcontrol_n);
- if ((pll_type == PLL_TYPE2) ||
-@@ -612,6 +618,15 @@
- clockcontrol_pci = &eir->clockcontrol_pci;
- clockcontrol_m2 = &cc->clockcontrol_m2;
- } else if ((cc = (chipcregs_t *) sb_setcore(sbh, SB_CC, 0))) {
-+
-+ /* 5354 chipcommon pll setting can't be changed.
-+ * The PMU on power up comes up with the default clk frequency
-+ * of 240MHz
-+ */
-+ if (sb_chip(sbh) == BCM5354_CHIP_ID) {
-+ ret = TRUE;
-+ goto done;
-+ }
- pll_type = R_REG(osh, &cc->capabilities) & CAP_PLL_MASK;
- if (pll_type == PLL_TYPE6) {
- clockcontrol_n = NULL;
---- a/arch/mips/bcm947xx/sbutils.c 2007-11-23 12:12:02.000000000 -0500
-+++ b/arch/mips/bcm947xx/sbutils.c 2007-11-25 06:22:43.000000000 -0500
-@@ -791,8 +791,14 @@
- /* readback */
- if (regoff >= SBCONFIGOFF)
- w = R_SBREG(si, r);
-- else
-+ else {
-+ if ((si->sb.chip == BCM5354_CHIP_ID) &&
-+ (coreidx == SB_CC_IDX) &&
-+ (regoff == OFFSETOF(chipcregs_t, watchdog))) {
-+ w = val;
-+ } else
- w = R_REG(si->osh, r);
-+ }
-
- if (!fast) {
- /* restore core index */
-@@ -1902,6 +1908,15 @@
- n = R_REG(si->osh, &eir->clockcontrol_n);
- m = R_REG(si->osh, &eir->clockcontrol_sb);
- } else if ((cc = (chipcregs_t *) sb_setcore(sbh, SB_CC, 0))) {
-+
-+ if (R_REG(si->osh, &cc->capabilities) & CAP_PMU) {
-+ if (sb_chip(sbh) == BCM5354_CHIP_ID) {
-+ /* 5354 has a constant sb clock of 120MHz */
-+ rate = 120000000;
-+ goto end;
-+ } else
-+ ASSERT(0);
-+ }
- pll_type = R_REG(si->osh, &cc->capabilities) & CAP_PLL_MASK;
- if (pll_type == PLL_NONE) {
- INTR_RESTORE(si, intr_val);
-@@ -1929,6 +1944,7 @@
- rate = rate / 2;
- }
-
-+end:
- /* switch back to previous core */
- sb_setcoreidx(sbh, idx);
-
---- a/arch/mips/bcm947xx/hndchipc.c 2007-11-23 12:12:02.000000000 -0500
-+++ b/arch/mips/bcm947xx/hndchipc.c 2007-11-25 06:31:15.000000000 -0500
-@@ -93,6 +93,9 @@
- chipcregs_t *cc = (chipcregs_t *) regs;
- uint32 rev, cap, pll, baud_base, div;
-
-+ /* Default value */
-+ div = 48;
-+
- /* Determine core revision and capabilities */
- rev = sb_corerev(sbh);
- cap = R_REG(osh, &cc->capabilities);
-@@ -108,22 +111,29 @@
- R_REG(osh, &cc->clockcontrol_m2));
- div = 1;
- } else {
-- /* Fixed ALP clock */
-- if (rev >= 11 && rev != 15) {
-- baud_base = 20000000;
-+/* 5354 chip common uart uses a constant clock
-+ * frequency of 25MHz */
-+ if (sb_corerev(sbh) == 20) {
-+ /* Set the override bit so we don't divide it */
-+ W_REG(osh, &cc->corecontrol, CC_UARTCLKO);
-+ baud_base = 25000000;
-+ } else if (rev >= 11 && rev != 15) {
-+ /* Fixed ALP clock */
-+// baud_base = sb_alp_clock(sbh);
-+ baud_base = 20000000;
- div = 1;
- /* Set the override bit so we don't divide it */
- W_REG(osh, &cc->corecontrol, CC_UARTCLKO);
-- }
-+
- /* Internal backplane clock */
-- else if (rev >= 3) {
-- baud_base = sb_clock(sbh);
-- div = 2; /* Minimum divisor */
-- W_REG(osh, &cc->clkdiv,
-+ } else if (rev >= 3) {
-+ baud_base = sb_clock(sbh);
-+ div = 2; /* Minimum divisor */
-+ W_REG(osh, &cc->clkdiv,
- ((R_REG(osh, &cc->clkdiv) & ~CLKD_UART) | div));
-- }
-+
- /* Fixed internal backplane clock */
-- else {
-+ } else {
- baud_base = 88000000;
- div = 48;
- }
CONFIG_SHAPER=m
# CONFIG_SIBYTE_SB1xxx_SOC is not set
# CONFIG_SK98LIN is not set
+# CONFIG_SKGE is not set
+# CONFIG_SKY2 is not set
# CONFIG_SLIP is not set
# CONFIG_SMB_FS is not set
# CONFIG_SMB_NLS is not set
CONFIG_WATCHDOG=y
CONFIG_WATCHDOG_NOWAYOUT=y
# CONFIG_WAVELAN is not set
+# CONFIG_WDT_W83627 is not set
# CONFIG_X25 is not set
# CONFIG_XFS_DEBUG is not set
CONFIG_XFS_FS=m
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/common/au1xxx_irqmap.c linux-2.4.32-rc1.mips/arch/mips/au1000/common/au1xxx_irqmap.c
---- linux-2.4.32-rc1/arch/mips/au1000/common/au1xxx_irqmap.c 2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/common/au1xxx_irqmap.c 2005-01-30 09:01:27.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/common/au1xxx_irqmap.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/common/au1xxx_irqmap.c 2007-12-15 05:19:42.862863653 +0100
++++ linux-2.4.35.4/arch/mips/au1000/common/au1xxx_irqmap.c 2007-12-15 05:19:44.782973074 +0100
@@ -172,14 +172,14 @@
{ AU1550_PSC1_INT, INTC_INT_HIGH_LEVEL, 0},
{ AU1550_PSC2_INT, INTC_INT_HIGH_LEVEL, 0},
{ AU1200_NAND_INT, INTC_INT_RISE_EDGE, 0},
{ AU1200_USB_INT, INTC_INT_HIGH_LEVEL, 0 },
{ AU1200_LCD_INT, INTC_INT_HIGH_LEVEL, 0},
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/common/cputable.c linux-2.4.32-rc1.mips/arch/mips/au1000/common/cputable.c
---- linux-2.4.32-rc1/arch/mips/au1000/common/cputable.c 2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/common/cputable.c 2005-01-30 09:01:27.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/common/cputable.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/common/cputable.c 2007-12-15 05:19:42.870864109 +0100
++++ linux-2.4.35.4/arch/mips/au1000/common/cputable.c 2007-12-15 05:19:44.786973303 +0100
@@ -39,7 +39,8 @@
{ 0xffffffff, 0x02030203, "Au1100 BD", 0, 1 },
{ 0xffffffff, 0x02030204, "Au1100 BE", 0, 1 },
{ 0x00000000, 0x00000000, "Unknown Au1xxx", 1, 0 },
};
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/common/dbdma.c linux-2.4.32-rc1.mips/arch/mips/au1000/common/dbdma.c
---- linux-2.4.32-rc1/arch/mips/au1000/common/dbdma.c 2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/common/dbdma.c 2005-02-08 07:28:37.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/common/dbdma.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/common/dbdma.c 2007-12-15 05:19:42.878864567 +0100
++++ linux-2.4.35.4/arch/mips/au1000/common/dbdma.c 2007-12-15 05:19:44.786973303 +0100
@@ -41,6 +41,8 @@
#include <asm/au1xxx_dbdma.h>
#include <asm/system.h>
+
#endif /* defined(CONFIG_SOC_AU1550) || defined(CONFIG_SOC_AU1200) */
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/common/gpio.c linux-2.4.32-rc1.mips/arch/mips/au1000/common/gpio.c
---- linux-2.4.32-rc1/arch/mips/au1000/common/gpio.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/common/gpio.c 2005-01-30 09:01:27.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/common/gpio.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/au1000/common/gpio.c 2007-12-15 05:19:44.786973303 +0100
@@ -0,0 +1,118 @@
+/*
+ * This program is free software; you can redistribute it and/or modify it
+EXPORT_SYMBOL(au1xxx_gpio_tristate);
+EXPORT_SYMBOL(au1xxx_gpio_write);
+EXPORT_SYMBOL(au1xxx_gpio_read);
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/common/irq.c linux-2.4.32-rc1.mips/arch/mips/au1000/common/irq.c
---- linux-2.4.32-rc1/arch/mips/au1000/common/irq.c 2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/common/irq.c 2005-03-13 08:56:57.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/common/irq.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/common/irq.c 2007-12-15 05:19:42.890865248 +0100
++++ linux-2.4.35.4/arch/mips/au1000/common/irq.c 2007-12-15 05:19:44.786973303 +0100
@@ -303,8 +303,30 @@
};
}
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/common/Makefile linux-2.4.32-rc1.mips/arch/mips/au1000/common/Makefile
---- linux-2.4.32-rc1/arch/mips/au1000/common/Makefile 2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/common/Makefile 2005-01-30 09:01:27.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/common/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/common/Makefile 2007-12-15 05:19:42.898865706 +0100
++++ linux-2.4.35.4/arch/mips/au1000/common/Makefile 2007-12-15 05:19:44.786973303 +0100
@@ -19,9 +19,9 @@
export-objs = prom.o clocks.o power.o usbdev.o
obj-$(CONFIG_AU1X00_USB_DEVICE) += usbdev.o
obj-$(CONFIG_KGDB) += dbg_io.o
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/common/pci_fixup.c linux-2.4.32-rc1.mips/arch/mips/au1000/common/pci_fixup.c
---- linux-2.4.32-rc1/arch/mips/au1000/common/pci_fixup.c 2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/common/pci_fixup.c 2004-12-03 09:00:32.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/common/pci_fixup.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/common/pci_fixup.c 2007-12-15 05:19:42.906866162 +0100
++++ linux-2.4.35.4/arch/mips/au1000/common/pci_fixup.c 2007-12-15 05:19:44.790973529 +0100
@@ -75,9 +75,13 @@
#ifdef CONFIG_NONCOHERENT_IO
printk("Non-coherent PCI accesses enabled\n");
#endif
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/common/pci_ops.c linux-2.4.32-rc1.mips/arch/mips/au1000/common/pci_ops.c
---- linux-2.4.32-rc1/arch/mips/au1000/common/pci_ops.c 2004-02-18 14:36:30.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/common/pci_ops.c 2005-02-27 23:14:24.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/common/pci_ops.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/common/pci_ops.c 2007-12-15 05:19:42.910866388 +0100
++++ linux-2.4.35.4/arch/mips/au1000/common/pci_ops.c 2007-12-15 05:19:44.790973529 +0100
@@ -162,6 +162,7 @@
static int config_access(unsigned char access_type, struct pci_dev *dev,
unsigned char where, u32 * data)
}
#endif
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/common/power.c linux-2.4.32-rc1.mips/arch/mips/au1000/common/power.c
---- linux-2.4.32-rc1/arch/mips/au1000/common/power.c 2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/common/power.c 2005-04-07 02:37:19.000000000 +0200
+Index: linux-2.4.35.4/arch/mips/au1000/common/power.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/common/power.c 2007-12-15 05:19:42.918866846 +0100
++++ linux-2.4.35.4/arch/mips/au1000/common/power.c 2007-12-15 05:19:44.790973529 +0100
@@ -50,7 +50,6 @@
static void calibrate_delay(void);
{0}
};
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/common/reset.c linux-2.4.32-rc1.mips/arch/mips/au1000/common/reset.c
---- linux-2.4.32-rc1/arch/mips/au1000/common/reset.c 2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/common/reset.c 2005-03-19 08:17:51.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/common/reset.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/common/reset.c 2007-12-15 05:19:42.926867302 +0100
++++ linux-2.4.35.4/arch/mips/au1000/common/reset.c 2007-12-15 05:19:44.790973529 +0100
@@ -37,8 +37,6 @@
#include <asm/system.h>
#include <asm/au1000.h>
+ /* If board can't power-off, spin forever */
au1000_halt();
}
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/common/setup.c linux-2.4.32-rc1.mips/arch/mips/au1000/common/setup.c
---- linux-2.4.32-rc1/arch/mips/au1000/common/setup.c 2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/common/setup.c 2005-01-30 09:01:27.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/common/setup.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/common/setup.c 2007-12-15 05:19:42.934867757 +0100
++++ linux-2.4.35.4/arch/mips/au1000/common/setup.c 2007-12-15 05:19:44.794973758 +0100
@@ -174,6 +174,40 @@
initrd_end = (unsigned long)&__rd_end;
#endif
if ((ide_ops == NULL) || (ide_ops == &no_ide_ops))
ide_ops = &std_ide_ops;
#endif
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/common/sleeper.S linux-2.4.32-rc1.mips/arch/mips/au1000/common/sleeper.S
---- linux-2.4.32-rc1/arch/mips/au1000/common/sleeper.S 2004-02-18 14:36:30.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/common/sleeper.S 2005-01-30 09:01:27.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/common/sleeper.S
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/common/sleeper.S 2007-12-15 05:19:42.938867986 +0100
++++ linux-2.4.35.4/arch/mips/au1000/common/sleeper.S 2007-12-15 05:19:44.794973758 +0100
@@ -15,17 +15,48 @@
#include <asm/addrspace.h>
#include <asm/regdef.h>
+ .set reorder
END(save_and_sleep)
+
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/common/time.c linux-2.4.32-rc1.mips/arch/mips/au1000/common/time.c
---- linux-2.4.32-rc1/arch/mips/au1000/common/time.c 2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/common/time.c 2005-04-08 10:33:17.000000000 +0200
+Index: linux-2.4.35.4/arch/mips/au1000/common/time.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/common/time.c 2007-12-15 05:19:42.946868441 +0100
++++ linux-2.4.35.4/arch/mips/au1000/common/time.c 2007-12-15 05:19:44.794973758 +0100
@@ -50,7 +50,6 @@
#include <linux/mc146818rtc.h>
#include <linux/timex.h>
}
#else
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/db1x00/board_setup.c linux-2.4.32-rc1.mips/arch/mips/au1000/db1x00/board_setup.c
---- linux-2.4.32-rc1/arch/mips/au1000/db1x00/board_setup.c 2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/db1x00/board_setup.c 2005-03-19 08:17:51.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/db1x00/board_setup.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/db1x00/board_setup.c 2007-12-15 05:19:42.954868897 +0100
++++ linux-2.4.35.4/arch/mips/au1000/db1x00/board_setup.c 2007-12-15 05:19:44.794973758 +0100
@@ -46,10 +46,22 @@
#include <asm/au1000.h>
#include <asm/db1x00.h>
#ifdef CONFIG_MIPS_DB1000
printk("AMD Alchemy Au1000/Db1000 Board\n");
#endif
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/db1x00/irqmap.c linux-2.4.32-rc1.mips/arch/mips/au1000/db1x00/irqmap.c
---- linux-2.4.32-rc1/arch/mips/au1000/db1x00/irqmap.c 2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/db1x00/irqmap.c 2005-01-30 09:06:19.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/db1x00/irqmap.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/db1x00/irqmap.c 2007-12-15 05:19:42.962869352 +0100
++++ linux-2.4.35.4/arch/mips/au1000/db1x00/irqmap.c 2007-12-15 05:19:44.794973758 +0100
@@ -53,6 +53,7 @@
#ifdef CONFIG_MIPS_DB1550
{ AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, // PCMCIA Card 0 IRQ#
#else
{ AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, // PCMCIA Card 0 Fully_Interted#
{ AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, // PCMCIA Card 0 STSCHG#
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/db1x00/Makefile linux-2.4.32-rc1.mips/arch/mips/au1000/db1x00/Makefile
---- linux-2.4.32-rc1/arch/mips/au1000/db1x00/Makefile 2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/db1x00/Makefile 2005-01-30 09:06:19.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/db1x00/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/db1x00/Makefile 2007-12-15 05:19:42.970869808 +0100
++++ linux-2.4.35.4/arch/mips/au1000/db1x00/Makefile 2007-12-15 05:19:44.794973758 +0100
@@ -17,4 +17,11 @@
obj-y := init.o board_setup.o irqmap.o
obj-$(CONFIG_WM97XX_COMODULE) += mirage_ts.o
+endif
+
include $(TOPDIR)/Rules.make
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/db1x00/mmc_support.c linux-2.4.32-rc1.mips/arch/mips/au1000/db1x00/mmc_support.c
---- linux-2.4.32-rc1/arch/mips/au1000/db1x00/mmc_support.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/db1x00/mmc_support.c 2005-01-30 09:07:01.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/db1x00/mmc_support.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/au1000/db1x00/mmc_support.c 2007-12-15 05:19:44.798973987 +0100
@@ -0,0 +1,126 @@
+/*
+ * BRIEF MODULE DESCRIPTION
+EXPORT_SYMBOL(mmc_power_on);
+EXPORT_SYMBOL(mmc_power_off);
+
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/ficmmp/au1200_ibutton.c linux-2.4.32-rc1.mips/arch/mips/au1000/ficmmp/au1200_ibutton.c
---- linux-2.4.32-rc1/arch/mips/au1000/ficmmp/au1200_ibutton.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/ficmmp/au1200_ibutton.c 2005-02-03 07:35:29.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/ficmmp/au1200_ibutton.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/au1000/ficmmp/au1200_ibutton.c 2007-12-15 05:19:44.798973987 +0100
@@ -0,0 +1,270 @@
+/* ----------------------------------------------------------------------
+ * mtwilson_keys.c
+MODULE_AUTHOR( DRIVER_AUTHOR );
+MODULE_DESCRIPTION( DRIVER_DESC );
+MODULE_LICENSE("GPL");
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/ficmmp/au1xxx_dock.c linux-2.4.32-rc1.mips/arch/mips/au1000/ficmmp/au1xxx_dock.c
---- linux-2.4.32-rc1/arch/mips/au1000/ficmmp/au1xxx_dock.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/ficmmp/au1xxx_dock.c 2005-01-30 09:01:27.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/ficmmp/au1xxx_dock.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/au1000/ficmmp/au1xxx_dock.c 2007-12-15 05:19:44.798973987 +0100
@@ -0,0 +1,261 @@
+/*
+ * Copyright (C) 2003 Metrowerks, All Rights Reserved.
+
+module_init(au1xxx_dock_init);
+module_exit(au1xxx_dock_exit);
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/ficmmp/board_setup.c linux-2.4.32-rc1.mips/arch/mips/au1000/ficmmp/board_setup.c
---- linux-2.4.32-rc1/arch/mips/au1000/ficmmp/board_setup.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/ficmmp/board_setup.c 2005-03-19 08:17:51.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/ficmmp/board_setup.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/au1000/ficmmp/board_setup.c 2007-12-15 05:19:44.798973987 +0100
@@ -0,0 +1,226 @@
+/*
+ *
+ return 0;
+}
+
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/ficmmp/init.c linux-2.4.32-rc1.mips/arch/mips/au1000/ficmmp/init.c
---- linux-2.4.32-rc1/arch/mips/au1000/ficmmp/init.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/ficmmp/init.c 2005-01-30 09:01:27.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/ficmmp/init.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/au1000/ficmmp/init.c 2007-12-15 05:19:44.802974213 +0100
@@ -0,0 +1,76 @@
+/*
+ *
+ return 0;
+}
+
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/ficmmp/irqmap.c linux-2.4.32-rc1.mips/arch/mips/au1000/ficmmp/irqmap.c
---- linux-2.4.32-rc1/arch/mips/au1000/ficmmp/irqmap.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/ficmmp/irqmap.c 2005-01-30 09:01:27.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/ficmmp/irqmap.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/au1000/ficmmp/irqmap.c 2007-12-15 05:19:44.802974213 +0100
@@ -0,0 +1,61 @@
+/*
+ * BRIEF MODULE DESCRIPTION
+
+int au1xxx_nr_irqs = sizeof(au1xxx_irq_map)/sizeof(au1xxx_irq_map_t);
+
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/ficmmp/Makefile linux-2.4.32-rc1.mips/arch/mips/au1000/ficmmp/Makefile
---- linux-2.4.32-rc1/arch/mips/au1000/ficmmp/Makefile 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/ficmmp/Makefile 2005-01-30 09:01:27.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/ficmmp/Makefile
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/au1000/ficmmp/Makefile 2007-12-15 05:19:44.802974213 +0100
@@ -0,0 +1,25 @@
+#
+# Copyright 2000 MontaVista Software Inc.
+
+
+include $(TOPDIR)/Rules.make
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/hydrogen3/board_setup.c linux-2.4.32-rc1.mips/arch/mips/au1000/hydrogen3/board_setup.c
---- linux-2.4.32-rc1/arch/mips/au1000/hydrogen3/board_setup.c 2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/hydrogen3/board_setup.c 2005-03-19 08:17:51.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/hydrogen3/board_setup.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/hydrogen3/board_setup.c 2007-12-15 05:19:43.014872316 +0100
++++ linux-2.4.35.4/arch/mips/au1000/hydrogen3/board_setup.c 2007-12-15 05:19:44.802974213 +0100
@@ -51,12 +51,19 @@
{
}
#ifdef CONFIG_AU1X00_USB_DEVICE
// 2nd USB port is USB device
pin_func = au_readl(SYS_PINFUNC) & (u32)(~0x8000);
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/hydrogen3/buttons.c linux-2.4.32-rc1.mips/arch/mips/au1000/hydrogen3/buttons.c
---- linux-2.4.32-rc1/arch/mips/au1000/hydrogen3/buttons.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/hydrogen3/buttons.c 2005-02-11 22:09:55.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/hydrogen3/buttons.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/au1000/hydrogen3/buttons.c 2007-12-15 05:19:44.802974213 +0100
@@ -0,0 +1,308 @@
+/*
+ * Copyright (C) 2003 Metrowerks, All Rights Reserved.
+
+module_init(hydrogen3_buttons_init);
+module_exit(hydrogen3_buttons_exit);
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/hydrogen3/Makefile linux-2.4.32-rc1.mips/arch/mips/au1000/hydrogen3/Makefile
---- linux-2.4.32-rc1/arch/mips/au1000/hydrogen3/Makefile 2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/hydrogen3/Makefile 2005-02-11 22:09:55.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/hydrogen3/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/hydrogen3/Makefile 2007-12-15 05:19:43.026873001 +0100
++++ linux-2.4.35.4/arch/mips/au1000/hydrogen3/Makefile 2007-12-15 05:19:44.802974213 +0100
@@ -14,6 +14,11 @@
O_TARGET := hydrogen3.o
+endif
include $(TOPDIR)/Rules.make
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/hydrogen3/mmc_support.c linux-2.4.32-rc1.mips/arch/mips/au1000/hydrogen3/mmc_support.c
---- linux-2.4.32-rc1/arch/mips/au1000/hydrogen3/mmc_support.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/hydrogen3/mmc_support.c 2005-02-02 05:27:06.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/hydrogen3/mmc_support.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/au1000/hydrogen3/mmc_support.c 2007-12-15 05:19:44.802974213 +0100
@@ -0,0 +1,89 @@
+/*
+ * BRIEF MODULE DESCRIPTION
+EXPORT_SYMBOL(mmc_power_on);
+EXPORT_SYMBOL(mmc_power_off);
+
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/mtx-1/board_setup.c linux-2.4.32-rc1.mips/arch/mips/au1000/mtx-1/board_setup.c
---- linux-2.4.32-rc1/arch/mips/au1000/mtx-1/board_setup.c 2004-02-18 14:36:30.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/mtx-1/board_setup.c 2004-11-26 09:37:16.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/mtx-1/board_setup.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/mtx-1/board_setup.c 2007-12-15 05:19:43.038873685 +0100
++++ linux-2.4.35.4/arch/mips/au1000/mtx-1/board_setup.c 2007-12-15 05:19:44.806974443 +0100
@@ -48,6 +48,12 @@
extern struct rtc_ops no_rtc_ops;
void __init board_setup(void)
{
rtc_ops = &no_rtc_ops;
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/mtx-1/irqmap.c linux-2.4.32-rc1.mips/arch/mips/au1000/mtx-1/irqmap.c
---- linux-2.4.32-rc1/arch/mips/au1000/mtx-1/irqmap.c 2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/mtx-1/irqmap.c 2004-11-26 09:37:16.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/mtx-1/irqmap.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/mtx-1/irqmap.c 2007-12-15 05:19:43.046874140 +0100
++++ linux-2.4.35.4/arch/mips/au1000/mtx-1/irqmap.c 2007-12-15 05:19:44.806974443 +0100
@@ -72,10 +72,10 @@
* A B C D
*/
};
const long min_idsel = 0, max_idsel = 3, irqs_per_slot = 4;
return PCI_IRQ_TABLE_LOOKUP;
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/pb1000/board_setup.c linux-2.4.32-rc1.mips/arch/mips/au1000/pb1000/board_setup.c
---- linux-2.4.32-rc1/arch/mips/au1000/pb1000/board_setup.c 2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/pb1000/board_setup.c 2005-03-19 08:17:51.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/pb1000/board_setup.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/pb1000/board_setup.c 2007-12-15 05:19:43.054874596 +0100
++++ linux-2.4.35.4/arch/mips/au1000/pb1000/board_setup.c 2007-12-15 05:19:44.806974443 +0100
@@ -58,6 +58,10 @@
{
}
void __init board_setup(void)
{
u32 pin_func, static_cfg0;
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/pb1100/board_setup.c linux-2.4.32-rc1.mips/arch/mips/au1000/pb1100/board_setup.c
---- linux-2.4.32-rc1/arch/mips/au1000/pb1100/board_setup.c 2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/pb1100/board_setup.c 2005-03-19 08:17:51.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/pb1100/board_setup.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/pb1100/board_setup.c 2007-12-15 05:19:43.062875051 +0100
++++ linux-2.4.35.4/arch/mips/au1000/pb1100/board_setup.c 2007-12-15 05:19:44.806974443 +0100
@@ -62,6 +62,10 @@
au_writel(0x00000000, 0xAE00001C);
}
void __init board_setup(void)
{
u32 pin_func;
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/pb1100/Makefile linux-2.4.32-rc1.mips/arch/mips/au1000/pb1100/Makefile
---- linux-2.4.32-rc1/arch/mips/au1000/pb1100/Makefile 2003-08-25 13:44:39.000000000 +0200
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/pb1100/Makefile 2005-01-30 09:10:29.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/pb1100/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/pb1100/Makefile 2007-12-15 05:19:43.070875507 +0100
++++ linux-2.4.35.4/arch/mips/au1000/pb1100/Makefile 2007-12-15 05:19:44.806974443 +0100
@@ -16,4 +16,10 @@
obj-y := init.o board_setup.o irqmap.o
+endif
+
include $(TOPDIR)/Rules.make
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/pb1100/mmc_support.c linux-2.4.32-rc1.mips/arch/mips/au1000/pb1100/mmc_support.c
---- linux-2.4.32-rc1/arch/mips/au1000/pb1100/mmc_support.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/pb1100/mmc_support.c 2005-01-30 09:10:29.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/pb1100/mmc_support.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/au1000/pb1100/mmc_support.c 2007-12-15 05:19:44.806974443 +0100
@@ -0,0 +1,126 @@
+/*
+ * BRIEF MODULE DESCRIPTION
+EXPORT_SYMBOL(mmc_power_on);
+EXPORT_SYMBOL(mmc_power_off);
+
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/pb1200/board_setup.c linux-2.4.32-rc1.mips/arch/mips/au1000/pb1200/board_setup.c
---- linux-2.4.32-rc1/arch/mips/au1000/pb1200/board_setup.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/pb1200/board_setup.c 2005-03-19 08:17:51.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/pb1200/board_setup.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/au1000/pb1200/board_setup.c 2007-12-15 05:19:44.810974669 +0100
@@ -0,0 +1,221 @@
+/*
+ *
+ return 0;
+}
+
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/pb1200/init.c linux-2.4.32-rc1.mips/arch/mips/au1000/pb1200/init.c
---- linux-2.4.32-rc1/arch/mips/au1000/pb1200/init.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/pb1200/init.c 2005-01-30 09:01:28.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/pb1200/init.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/au1000/pb1200/init.c 2007-12-15 05:19:44.810974669 +0100
@@ -0,0 +1,72 @@
+/*
+ *
+ return 0;
+}
+
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/pb1200/irqmap.c linux-2.4.32-rc1.mips/arch/mips/au1000/pb1200/irqmap.c
---- linux-2.4.32-rc1/arch/mips/au1000/pb1200/irqmap.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/pb1200/irqmap.c 2005-01-30 09:01:28.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/pb1200/irqmap.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/au1000/pb1200/irqmap.c 2007-12-15 05:19:44.810974669 +0100
@@ -0,0 +1,180 @@
+/*
+ * BRIEF MODULE DESCRIPTION
+ request of any source attached to the cascade */
+}
+
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/pb1200/Makefile linux-2.4.32-rc1.mips/arch/mips/au1000/pb1200/Makefile
---- linux-2.4.32-rc1/arch/mips/au1000/pb1200/Makefile 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/pb1200/Makefile 2005-01-30 09:01:27.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/pb1200/Makefile
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/au1000/pb1200/Makefile 2007-12-15 05:19:44.810974669 +0100
@@ -0,0 +1,25 @@
+#
+# Copyright 2000 MontaVista Software Inc.
+
+
+include $(TOPDIR)/Rules.make
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/pb1200/mmc_support.c linux-2.4.32-rc1.mips/arch/mips/au1000/pb1200/mmc_support.c
---- linux-2.4.32-rc1/arch/mips/au1000/pb1200/mmc_support.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/pb1200/mmc_support.c 2005-01-30 09:01:28.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/pb1200/mmc_support.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/au1000/pb1200/mmc_support.c 2007-12-15 05:19:44.810974669 +0100
@@ -0,0 +1,141 @@
+/*
+ * BRIEF MODULE DESCRIPTION
+EXPORT_SYMBOL(mmc_power_on);
+EXPORT_SYMBOL(mmc_power_off);
+
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/pb1500/board_setup.c linux-2.4.32-rc1.mips/arch/mips/au1000/pb1500/board_setup.c
---- linux-2.4.32-rc1/arch/mips/au1000/pb1500/board_setup.c 2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/pb1500/board_setup.c 2005-03-19 08:17:51.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/pb1500/board_setup.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/pb1500/board_setup.c 2007-12-15 05:19:43.110877786 +0100
++++ linux-2.4.35.4/arch/mips/au1000/pb1500/board_setup.c 2007-12-15 05:19:44.810974669 +0100
@@ -62,6 +62,10 @@
au_writel(0x00000000, 0xAE00001C);
}
void __init board_setup(void)
{
u32 pin_func;
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/pb1550/board_setup.c linux-2.4.32-rc1.mips/arch/mips/au1000/pb1550/board_setup.c
---- linux-2.4.32-rc1/arch/mips/au1000/pb1550/board_setup.c 2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/pb1550/board_setup.c 2005-03-19 08:17:51.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/pb1550/board_setup.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/pb1550/board_setup.c 2007-12-15 05:19:43.118878244 +0100
++++ linux-2.4.35.4/arch/mips/au1000/pb1550/board_setup.c 2007-12-15 05:19:44.814974898 +0100
@@ -48,12 +48,31 @@
extern struct rtc_ops no_rtc_ops;
+#endif
printk("AMD Alchemy Pb1550 Board\n");
}
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/pb1550/irqmap.c linux-2.4.32-rc1.mips/arch/mips/au1000/pb1550/irqmap.c
---- linux-2.4.32-rc1/arch/mips/au1000/pb1550/irqmap.c 2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/pb1550/irqmap.c 2005-01-30 09:01:28.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/pb1550/irqmap.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/pb1550/irqmap.c 2007-12-15 05:19:43.126878700 +0100
++++ linux-2.4.35.4/arch/mips/au1000/pb1550/irqmap.c 2007-12-15 05:19:44.814974898 +0100
@@ -50,6 +50,9 @@
au1xxx_irq_map_t au1xxx_irq_map[] = {
{ AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 },
};
int au1xxx_nr_irqs = sizeof(au1xxx_irq_map)/sizeof(au1xxx_irq_map_t);
-diff -Nur linux-2.4.32-rc1/arch/mips/config-shared.in linux-2.4.32-rc1.mips/arch/mips/config-shared.in
---- linux-2.4.32-rc1/arch/mips/config-shared.in 2005-01-19 15:09:27.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/config-shared.in 2005-01-30 09:01:26.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/config-shared.in
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/config-shared.in 2007-12-15 05:19:43.134879155 +0100
++++ linux-2.4.35.4/arch/mips/config-shared.in 2007-12-15 05:19:44.814974898 +0100
@@ -21,16 +21,19 @@
comment 'Machine selection'
dep_bool 'Support for Acer PICA 1 chipset (EXPERIMENTAL)' CONFIG_ACER_PICA_61 $CONFIG_EXPERIMENTAL
"$CONFIG_NEC_OSPREY" = "y" -o \
"$CONFIG_NEC_EAGLE" = "y" -o \
"$CONFIG_NINO" = "y" -o \
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig linux-2.4.32-rc1.mips/arch/mips/defconfig
---- linux-2.4.32-rc1/arch/mips/defconfig 2005-01-19 15:09:27.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig 2007-12-15 05:19:43.142879610 +0100
++++ linux-2.4.35.4/arch/mips/defconfig 2007-12-15 05:19:44.814974898 +0100
@@ -30,8 +30,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-atlas linux-2.4.32-rc1.mips/arch/mips/defconfig-atlas
---- linux-2.4.32-rc1/arch/mips/defconfig-atlas 2005-01-19 15:09:27.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-atlas 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-atlas
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-atlas 2007-12-15 05:19:43.150880066 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-atlas 2007-12-15 05:19:44.818975127 +0100
@@ -28,8 +28,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-bosporus linux-2.4.32-rc1.mips/arch/mips/defconfig-bosporus
---- linux-2.4.32-rc1/arch/mips/defconfig-bosporus 2005-01-19 15:09:27.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-bosporus 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-bosporus
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-bosporus 2007-12-15 05:19:43.158880524 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-bosporus 2007-12-15 05:19:44.818975127 +0100
@@ -30,8 +30,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-capcella linux-2.4.32-rc1.mips/arch/mips/defconfig-capcella
---- linux-2.4.32-rc1/arch/mips/defconfig-capcella 2005-01-19 15:09:27.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-capcella 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-capcella
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-capcella 2007-12-15 05:19:43.162880750 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-capcella 2007-12-15 05:19:44.818975127 +0100
@@ -30,8 +30,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
# CONFIG_VR41XX_KIU is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-cobalt linux-2.4.32-rc1.mips/arch/mips/defconfig-cobalt
---- linux-2.4.32-rc1/arch/mips/defconfig-cobalt 2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-cobalt 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-cobalt
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-cobalt 2007-12-15 05:19:43.170881205 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-cobalt 2007-12-15 05:19:44.818975127 +0100
@@ -28,8 +28,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=16
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-csb250 linux-2.4.32-rc1.mips/arch/mips/defconfig-csb250
---- linux-2.4.32-rc1/arch/mips/defconfig-csb250 2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-csb250 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-csb250
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-csb250 2007-12-15 05:19:43.178881664 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-csb250 2007-12-15 05:19:44.818975127 +0100
@@ -30,8 +30,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-db1000 linux-2.4.32-rc1.mips/arch/mips/defconfig-db1000
---- linux-2.4.32-rc1/arch/mips/defconfig-db1000 2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-db1000 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-db1000
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-db1000 2007-12-15 05:19:43.186882119 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-db1000 2007-12-15 05:19:44.822975353 +0100
@@ -30,8 +30,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-db1100 linux-2.4.32-rc1.mips/arch/mips/defconfig-db1100
---- linux-2.4.32-rc1/arch/mips/defconfig-db1100 2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-db1100 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-db1100
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-db1100 2007-12-15 05:19:43.190882345 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-db1100 2007-12-15 05:19:44.822975353 +0100
@@ -30,8 +30,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
# CONFIG_FB_IT8181 is not set
# CONFIG_FB_VIRTUAL is not set
CONFIG_FBCON_ADVANCED=y
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-db1200 linux-2.4.32-rc1.mips/arch/mips/defconfig-db1200
---- linux-2.4.32-rc1/arch/mips/defconfig-db1200 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-db1200 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-db1200
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/defconfig-db1200 2007-12-15 05:19:44.822975353 +0100
@@ -0,0 +1,1032 @@
+#
+# Automatically generated make config: don't edit
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+# CONFIG_FW_LOADER is not set
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-db1500 linux-2.4.32-rc1.mips/arch/mips/defconfig-db1500
---- linux-2.4.32-rc1/arch/mips/defconfig-db1500 2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-db1500 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-db1500
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-db1500 2007-12-15 05:19:43.202883030 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-db1500 2007-12-15 05:19:44.826975582 +0100
@@ -30,8 +30,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-db1550 linux-2.4.32-rc1.mips/arch/mips/defconfig-db1550
---- linux-2.4.32-rc1/arch/mips/defconfig-db1550 2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-db1550 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-db1550
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-db1550 2007-12-15 05:19:43.210883485 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-db1550 2007-12-15 05:19:44.826975582 +0100
@@ -30,8 +30,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-ddb5476 linux-2.4.32-rc1.mips/arch/mips/defconfig-ddb5476
---- linux-2.4.32-rc1/arch/mips/defconfig-ddb5476 2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-ddb5476 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-ddb5476
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-ddb5476 2007-12-15 05:19:43.218883943 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-ddb5476 2007-12-15 05:19:44.826975582 +0100
@@ -28,8 +28,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-ddb5477 linux-2.4.32-rc1.mips/arch/mips/defconfig-ddb5477
---- linux-2.4.32-rc1/arch/mips/defconfig-ddb5477 2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-ddb5477 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-ddb5477
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-ddb5477 2007-12-15 05:19:43.226884399 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-ddb5477 2007-12-15 05:19:44.826975582 +0100
@@ -28,8 +28,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-decstation linux-2.4.32-rc1.mips/arch/mips/defconfig-decstation
---- linux-2.4.32-rc1/arch/mips/defconfig-decstation 2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-decstation 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-decstation
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-decstation 2007-12-15 05:19:43.234884854 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-decstation 2007-12-15 05:19:44.826975582 +0100
@@ -30,8 +30,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-e55 linux-2.4.32-rc1.mips/arch/mips/defconfig-e55
---- linux-2.4.32-rc1/arch/mips/defconfig-e55 2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-e55 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-e55
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-e55 2007-12-15 05:19:43.242885309 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-e55 2007-12-15 05:19:44.830975809 +0100
@@ -30,8 +30,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
# CONFIG_VR41XX_KIU is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-eagle linux-2.4.32-rc1.mips/arch/mips/defconfig-eagle
---- linux-2.4.32-rc1/arch/mips/defconfig-eagle 2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-eagle 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-eagle
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-eagle 2007-12-15 05:19:43.246885538 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-eagle 2007-12-15 05:19:44.830975809 +0100
@@ -30,8 +30,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
# CONFIG_VR41XX_KIU is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-ev64120 linux-2.4.32-rc1.mips/arch/mips/defconfig-ev64120
---- linux-2.4.32-rc1/arch/mips/defconfig-ev64120 2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-ev64120 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-ev64120
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-ev64120 2007-12-15 05:19:43.254885994 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-ev64120 2007-12-15 05:19:44.830975809 +0100
@@ -30,8 +30,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-ev96100 linux-2.4.32-rc1.mips/arch/mips/defconfig-ev96100
---- linux-2.4.32-rc1/arch/mips/defconfig-ev96100 2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-ev96100 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-ev96100
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-ev96100 2007-12-15 05:19:43.262886449 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-ev96100 2007-12-15 05:19:44.830975809 +0100
@@ -30,8 +30,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-ficmmp linux-2.4.32-rc1.mips/arch/mips/defconfig-ficmmp
---- linux-2.4.32-rc1/arch/mips/defconfig-ficmmp 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-ficmmp 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-ficmmp
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/defconfig-ficmmp 2007-12-15 05:19:44.834976038 +0100
@@ -0,0 +1,862 @@
+#
+# Automatically generated make config: don't edit
+# CONFIG_CRC32 is not set
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-hp-lj linux-2.4.32-rc1.mips/arch/mips/defconfig-hp-lj
---- linux-2.4.32-rc1/arch/mips/defconfig-hp-lj 2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-hp-lj 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-hp-lj
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-hp-lj 2007-12-15 05:19:43.274887133 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-hp-lj 2007-12-15 05:19:44.834976038 +0100
@@ -30,8 +30,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
# CONFIG_UNIX98_PTYS is not set
#
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-hydrogen3 linux-2.4.32-rc1.mips/arch/mips/defconfig-hydrogen3
---- linux-2.4.32-rc1/arch/mips/defconfig-hydrogen3 2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-hydrogen3 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-hydrogen3
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-hydrogen3 2007-12-15 05:19:43.282887589 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-hydrogen3 2007-12-15 05:19:44.834976038 +0100
@@ -30,8 +30,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
# CONFIG_FB_IT8181 is not set
# CONFIG_FB_VIRTUAL is not set
CONFIG_FBCON_ADVANCED=y
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-ip22 linux-2.4.32-rc1.mips/arch/mips/defconfig-ip22
---- linux-2.4.32-rc1/arch/mips/defconfig-ip22 2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-ip22 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-ip22
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-ip22 2007-12-15 05:19:43.290888044 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-ip22 2007-12-15 05:19:44.834976038 +0100
@@ -30,8 +30,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-it8172 linux-2.4.32-rc1.mips/arch/mips/defconfig-it8172
---- linux-2.4.32-rc1/arch/mips/defconfig-it8172 2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-it8172 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-it8172
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-it8172 2007-12-15 05:19:43.294888273 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-it8172 2007-12-15 05:19:44.838976267 +0100
@@ -30,8 +30,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-ivr linux-2.4.32-rc1.mips/arch/mips/defconfig-ivr
---- linux-2.4.32-rc1/arch/mips/defconfig-ivr 2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-ivr 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-ivr
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-ivr 2007-12-15 05:19:43.302888729 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-ivr 2007-12-15 05:19:44.838976267 +0100
@@ -30,8 +30,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-jmr3927 linux-2.4.32-rc1.mips/arch/mips/defconfig-jmr3927
---- linux-2.4.32-rc1/arch/mips/defconfig-jmr3927 2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-jmr3927 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-jmr3927
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-jmr3927 2007-12-15 05:19:43.310889184 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-jmr3927 2007-12-15 05:19:44.838976267 +0100
@@ -28,8 +28,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
# CONFIG_UNIX98_PTYS is not set
#
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-lasat linux-2.4.32-rc1.mips/arch/mips/defconfig-lasat
---- linux-2.4.32-rc1/arch/mips/defconfig-lasat 2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-lasat 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-lasat
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-lasat 2007-12-15 05:19:43.318889642 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-lasat 2007-12-15 05:19:44.838976267 +0100
@@ -30,8 +30,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-malta linux-2.4.32-rc1.mips/arch/mips/defconfig-malta
---- linux-2.4.32-rc1/arch/mips/defconfig-malta 2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-malta 2005-04-19 14:19:34.000000000 +0200
+Index: linux-2.4.35.4/arch/mips/defconfig-malta
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-malta 2007-12-15 05:19:43.322889868 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-malta 2007-12-15 05:19:44.842976493 +0100
@@ -22,16 +22,19 @@
#
# CONFIG_ACER_PICA_61 is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-mirage linux-2.4.32-rc1.mips/arch/mips/defconfig-mirage
---- linux-2.4.32-rc1/arch/mips/defconfig-mirage 2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-mirage 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-mirage
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-mirage 2007-12-15 05:19:43.330890324 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-mirage 2007-12-15 05:19:44.842976493 +0100
@@ -30,8 +30,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-mpc30x linux-2.4.32-rc1.mips/arch/mips/defconfig-mpc30x
---- linux-2.4.32-rc1/arch/mips/defconfig-mpc30x 2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-mpc30x 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-mpc30x
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-mpc30x 2007-12-15 05:19:43.338890782 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-mpc30x 2007-12-15 05:19:44.842976493 +0100
@@ -30,8 +30,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
# CONFIG_VR41XX_KIU is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-mtx-1 linux-2.4.32-rc1.mips/arch/mips/defconfig-mtx-1
---- linux-2.4.32-rc1/arch/mips/defconfig-mtx-1 2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-mtx-1 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-mtx-1
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-mtx-1 2007-12-15 05:19:43.346891237 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-mtx-1 2007-12-15 05:19:44.842976493 +0100
@@ -30,8 +30,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-nino linux-2.4.32-rc1.mips/arch/mips/defconfig-nino
---- linux-2.4.32-rc1/arch/mips/defconfig-nino 2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-nino 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-nino
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-nino 2007-12-15 05:19:43.354891693 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-nino 2007-12-15 05:19:44.846976722 +0100
@@ -30,8 +30,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
# CONFIG_UNIX98_PTYS is not set
#
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-ocelot linux-2.4.32-rc1.mips/arch/mips/defconfig-ocelot
---- linux-2.4.32-rc1/arch/mips/defconfig-ocelot 2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-ocelot 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-ocelot
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-ocelot 2007-12-15 05:19:43.358891922 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-ocelot 2007-12-15 05:19:44.846976722 +0100
@@ -28,8 +28,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-osprey linux-2.4.32-rc1.mips/arch/mips/defconfig-osprey
---- linux-2.4.32-rc1/arch/mips/defconfig-osprey 2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-osprey 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-osprey
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-osprey 2007-12-15 05:19:43.366892377 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-osprey 2007-12-15 05:19:44.846976722 +0100
@@ -30,8 +30,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
# CONFIG_VR41XX_KIU is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-pb1000 linux-2.4.32-rc1.mips/arch/mips/defconfig-pb1000
---- linux-2.4.32-rc1/arch/mips/defconfig-pb1000 2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-pb1000 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-pb1000
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-pb1000 2007-12-15 05:19:43.374892832 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-pb1000 2007-12-15 05:19:44.846976722 +0100
@@ -30,8 +30,8 @@
CONFIG_MIPS_PB1000=y
# CONFIG_MIPS_PB1100 is not set
# CONFIG_TS_AU1X00_ADS7846 is not set
#
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-pb1100 linux-2.4.32-rc1.mips/arch/mips/defconfig-pb1100
---- linux-2.4.32-rc1/arch/mips/defconfig-pb1100 2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-pb1100 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-pb1100
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-pb1100 2007-12-15 05:19:43.382893288 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-pb1100 2007-12-15 05:19:44.850976948 +0100
@@ -30,8 +30,8 @@
# CONFIG_MIPS_PB1000 is not set
CONFIG_MIPS_PB1100=y
# CONFIG_FB_IT8181 is not set
# CONFIG_FB_VIRTUAL is not set
CONFIG_FBCON_ADVANCED=y
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-pb1200 linux-2.4.32-rc1.mips/arch/mips/defconfig-pb1200
---- linux-2.4.32-rc1/arch/mips/defconfig-pb1200 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-pb1200 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-pb1200
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/defconfig-pb1200 2007-12-15 05:19:44.850976948 +0100
@@ -0,0 +1,1060 @@
+#
+# Automatically generated make config: don't edit
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+# CONFIG_FW_LOADER is not set
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-pb1500 linux-2.4.32-rc1.mips/arch/mips/defconfig-pb1500
---- linux-2.4.32-rc1/arch/mips/defconfig-pb1500 2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-pb1500 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-pb1500
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-pb1500 2007-12-15 05:19:43.394893972 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-pb1500 2007-12-15 05:19:44.850976948 +0100
@@ -30,8 +30,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-pb1550 linux-2.4.32-rc1.mips/arch/mips/defconfig-pb1550
---- linux-2.4.32-rc1/arch/mips/defconfig-pb1550 2005-01-19 15:09:29.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-pb1550 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-pb1550
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-pb1550 2007-12-15 05:19:43.402894428 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-pb1550 2007-12-15 05:19:44.854977177 +0100
@@ -30,8 +30,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-rbtx4927 linux-2.4.32-rc1.mips/arch/mips/defconfig-rbtx4927
---- linux-2.4.32-rc1/arch/mips/defconfig-rbtx4927 2005-01-19 15:09:29.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-rbtx4927 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-rbtx4927
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-rbtx4927 2007-12-15 05:19:43.406894657 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-rbtx4927 2007-12-15 05:19:44.854977177 +0100
@@ -28,8 +28,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
# CONFIG_UNIX98_PTYS is not set
#
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-rm200 linux-2.4.32-rc1.mips/arch/mips/defconfig-rm200
---- linux-2.4.32-rc1/arch/mips/defconfig-rm200 2005-01-19 15:09:29.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-rm200 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-rm200
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-rm200 2007-12-15 05:19:43.414895112 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-rm200 2007-12-15 05:19:44.854977177 +0100
@@ -30,8 +30,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-sb1250-swarm linux-2.4.32-rc1.mips/arch/mips/defconfig-sb1250-swarm
---- linux-2.4.32-rc1/arch/mips/defconfig-sb1250-swarm 2005-01-19 15:09:29.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-sb1250-swarm 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-sb1250-swarm
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-sb1250-swarm 2007-12-15 05:19:43.422895567 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-sb1250-swarm 2007-12-15 05:19:44.854977177 +0100
@@ -30,8 +30,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-sead linux-2.4.32-rc1.mips/arch/mips/defconfig-sead
---- linux-2.4.32-rc1/arch/mips/defconfig-sead 2005-01-19 15:09:29.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-sead 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-sead
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-sead 2007-12-15 05:19:43.430896023 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-sead 2007-12-15 05:19:44.854977177 +0100
@@ -28,8 +28,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
# CONFIG_UNIX98_PTYS is not set
#
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-stretch linux-2.4.32-rc1.mips/arch/mips/defconfig-stretch
---- linux-2.4.32-rc1/arch/mips/defconfig-stretch 2005-01-19 15:09:29.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-stretch 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-stretch
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-stretch 2007-12-15 05:19:43.438896481 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-stretch 2007-12-15 05:19:44.858977407 +0100
@@ -30,8 +30,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-tb0226 linux-2.4.32-rc1.mips/arch/mips/defconfig-tb0226
---- linux-2.4.32-rc1/arch/mips/defconfig-tb0226 2005-01-19 15:09:29.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-tb0226 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-tb0226
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-tb0226 2007-12-15 05:19:43.442896707 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-tb0226 2007-12-15 05:19:44.858977407 +0100
@@ -30,8 +30,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
# CONFIG_VR41XX_KIU is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-tb0229 linux-2.4.32-rc1.mips/arch/mips/defconfig-tb0229
---- linux-2.4.32-rc1/arch/mips/defconfig-tb0229 2005-01-19 15:09:29.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-tb0229 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-tb0229
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-tb0229 2007-12-15 05:19:43.450897163 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-tb0229 2007-12-15 05:19:44.858977407 +0100
@@ -30,8 +30,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
# CONFIG_VR41XX_KIU is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-ti1500 linux-2.4.32-rc1.mips/arch/mips/defconfig-ti1500
---- linux-2.4.32-rc1/arch/mips/defconfig-ti1500 2005-01-19 15:09:29.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-ti1500 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-ti1500
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-ti1500 2007-12-15 05:19:43.458897621 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-ti1500 2007-12-15 05:19:44.858977407 +0100
@@ -30,8 +30,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-workpad linux-2.4.32-rc1.mips/arch/mips/defconfig-workpad
---- linux-2.4.32-rc1/arch/mips/defconfig-workpad 2005-01-19 15:09:29.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-workpad 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-workpad
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-workpad 2007-12-15 05:19:43.466898076 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-workpad 2007-12-15 05:19:44.862977633 +0100
@@ -30,8 +30,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
# CONFIG_VR41XX_KIU is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-xxs1500 linux-2.4.32-rc1.mips/arch/mips/defconfig-xxs1500
---- linux-2.4.32-rc1/arch/mips/defconfig-xxs1500 2005-01-19 15:09:29.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-xxs1500 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-xxs1500
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-xxs1500 2007-12-15 05:19:43.474898531 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-xxs1500 2007-12-15 05:19:44.862977633 +0100
@@ -30,8 +30,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-yosemite linux-2.4.32-rc1.mips/arch/mips/defconfig-yosemite
---- linux-2.4.32-rc1/arch/mips/defconfig-yosemite 2005-01-19 15:09:29.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-yosemite 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-yosemite
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-yosemite 2007-12-15 05:19:43.478898761 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-yosemite 2007-12-15 05:19:44.862977633 +0100
@@ -30,8 +30,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/kernel/cpu-probe.c linux-2.4.32-rc1.mips/arch/mips/kernel/cpu-probe.c
---- linux-2.4.32-rc1/arch/mips/kernel/cpu-probe.c 2005-01-19 15:09:29.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/kernel/cpu-probe.c 2005-05-25 15:33:22.000000000 +0200
+Index: linux-2.4.35.4/arch/mips/kernel/cpu-probe.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/kernel/cpu-probe.c 2007-12-15 05:19:43.486899216 +0100
++++ linux-2.4.35.4/arch/mips/kernel/cpu-probe.c 2007-12-15 05:19:44.862977633 +0100
@@ -34,21 +34,16 @@
".set\tmips0");
}
default:
printk(" unavailable.\n");
break;
-diff -Nur linux-2.4.32-rc1/arch/mips/kernel/head.S linux-2.4.32-rc1.mips/arch/mips/kernel/head.S
---- linux-2.4.32-rc1/arch/mips/kernel/head.S 2005-01-19 15:09:29.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/kernel/head.S 2004-11-22 14:38:23.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/kernel/head.S
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/kernel/head.S 2007-12-15 05:19:43.494899671 +0100
++++ linux-2.4.35.4/arch/mips/kernel/head.S 2007-12-15 05:19:44.866977862 +0100
@@ -43,9 +43,9 @@
/* Cache Error */
END(smp_bootstrap)
#endif
-diff -Nur linux-2.4.32-rc1/arch/mips/kernel/process.c linux-2.4.32-rc1.mips/arch/mips/kernel/process.c
---- linux-2.4.32-rc1/arch/mips/kernel/process.c 2003-08-25 13:44:40.000000000 +0200
-+++ linux-2.4.32-rc1.mips/arch/mips/kernel/process.c 2005-04-14 12:41:44.000000000 +0200
+Index: linux-2.4.35.4/arch/mips/kernel/process.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/kernel/process.c 2007-12-15 05:19:43.502900127 +0100
++++ linux-2.4.35.4/arch/mips/kernel/process.c 2007-12-15 05:19:44.866977862 +0100
@@ -128,6 +128,26 @@
return 1;
}
/*
* Create a kernel thread
*/
-diff -Nur linux-2.4.32-rc1/arch/mips/kernel/scall_o32.S linux-2.4.32-rc1.mips/arch/mips/kernel/scall_o32.S
---- linux-2.4.32-rc1/arch/mips/kernel/scall_o32.S 2005-01-19 15:09:29.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/kernel/scall_o32.S 2005-02-07 22:21:53.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/kernel/scall_o32.S
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/kernel/scall_o32.S 2007-12-15 05:19:43.506900356 +0100
++++ linux-2.4.35.4/arch/mips/kernel/scall_o32.S 2007-12-15 05:19:44.866977862 +0100
@@ -121,15 +121,14 @@
trace_a_syscall:
li t0, -EMAXERRNO - 1 # error?
sltu t0, t0, v0
-diff -Nur linux-2.4.32-rc1/arch/mips/kernel/setup.c linux-2.4.32-rc1.mips/arch/mips/kernel/setup.c
---- linux-2.4.32-rc1/arch/mips/kernel/setup.c 2005-01-19 15:09:29.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/kernel/setup.c 2005-01-13 22:15:57.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/kernel/setup.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/kernel/setup.c 2007-12-15 05:19:43.514900811 +0100
++++ linux-2.4.35.4/arch/mips/kernel/setup.c 2007-12-15 05:19:44.866977862 +0100
@@ -5,7 +5,7 @@
*
* Copyright (C) 1995 Linus Torvalds
start_kernel();
}
-diff -Nur linux-2.4.32-rc1/arch/mips/kernel/traps.c linux-2.4.32-rc1.mips/arch/mips/kernel/traps.c
---- linux-2.4.32-rc1/arch/mips/kernel/traps.c 2005-01-19 15:09:29.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/kernel/traps.c 2005-04-12 22:25:34.000000000 +0200
+Index: linux-2.4.35.4/arch/mips/kernel/traps.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/kernel/traps.c 2007-12-15 05:19:43.522901266 +0100
++++ linux-2.4.35.4/arch/mips/kernel/traps.c 2007-12-15 05:19:44.870978088 +0100
@@ -452,9 +452,10 @@
}
ll_task = current;
- TLBMISS_HANDLER_SETUP();
+ per_cpu_trap_init();
}
-diff -Nur linux-2.4.32-rc1/arch/mips/lib/rtc-no.c linux-2.4.32-rc1.mips/arch/mips/lib/rtc-no.c
---- linux-2.4.32-rc1/arch/mips/lib/rtc-no.c 2004-02-18 14:36:30.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/lib/rtc-no.c 2005-01-13 22:15:57.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/lib/rtc-no.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/lib/rtc-no.c 2007-12-15 05:19:43.530901722 +0100
++++ linux-2.4.35.4/arch/mips/lib/rtc-no.c 2007-12-15 05:19:44.870978088 +0100
@@ -6,10 +6,9 @@
* Stub RTC routines to keep Linux from crashing on machine which don't
* have a RTC chip.
};
-
-EXPORT_SYMBOL(rtc_ops);
-diff -Nur linux-2.4.32-rc1/arch/mips/lib/rtc-std.c linux-2.4.32-rc1.mips/arch/mips/lib/rtc-std.c
---- linux-2.4.32-rc1/arch/mips/lib/rtc-std.c 2004-02-18 14:36:30.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/lib/rtc-std.c 2005-01-13 22:15:57.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/lib/rtc-std.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/lib/rtc-std.c 2007-12-15 05:19:43.538902180 +0100
++++ linux-2.4.35.4/arch/mips/lib/rtc-std.c 2007-12-15 05:19:44.870978088 +0100
@@ -5,9 +5,8 @@
*
* RTC routines for PC style attached Dallas chip.
};
-
-EXPORT_SYMBOL(rtc_ops);
-diff -Nur linux-2.4.32-rc1/arch/mips/Makefile linux-2.4.32-rc1.mips/arch/mips/Makefile
---- linux-2.4.32-rc1/arch/mips/Makefile 2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/Makefile 2005-01-30 09:01:26.000000000 +0100
-@@ -211,7 +211,7 @@
+Index: linux-2.4.35.4/arch/mips/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/Makefile 2007-12-15 05:19:43.546902635 +0100
++++ linux-2.4.35.4/arch/mips/Makefile 2007-12-15 05:19:44.870978088 +0100
+@@ -209,7 +209,7 @@
endif
#
#
ifdef CONFIG_MIPS_PB1000
LIBS += arch/mips/au1000/pb1000/pb1000.o \
-@@ -220,9 +220,6 @@
+@@ -218,9 +218,6 @@
LOADADDR := 0x80100000
endif
ifdef CONFIG_MIPS_PB1100
LIBS += arch/mips/au1000/pb1100/pb1100.o \
arch/mips/au1000/common/au1000.o
-@@ -230,9 +227,6 @@
+@@ -228,9 +225,6 @@
LOADADDR += 0x80100000
endif
ifdef CONFIG_MIPS_PB1500
LIBS += arch/mips/au1000/pb1500/pb1500.o \
arch/mips/au1000/common/au1000.o
-@@ -240,9 +234,6 @@
+@@ -238,9 +232,6 @@
LOADADDR := 0x80100000
endif
ifdef CONFIG_MIPS_DB1000
LIBS += arch/mips/au1000/db1x00/db1x00.o \
arch/mips/au1000/common/au1000.o
-@@ -313,6 +304,27 @@
+@@ -311,6 +302,27 @@
LOADADDR += 0x80100000
endif
#
# Cogent CSB250
-diff -Nur linux-2.4.32-rc1/arch/mips/mm/cerr-sb1.c linux-2.4.32-rc1.mips/arch/mips/mm/cerr-sb1.c
---- linux-2.4.32-rc1/arch/mips/mm/cerr-sb1.c 2004-02-18 14:36:30.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/mm/cerr-sb1.c 2004-12-13 18:37:23.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/mm/cerr-sb1.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/mm/cerr-sb1.c 2007-12-15 05:19:43.554903091 +0100
++++ linux-2.4.35.4/arch/mips/mm/cerr-sb1.c 2007-12-15 05:19:44.870978088 +0100
@@ -252,14 +252,14 @@
/* Masks to select bits for Hamming parity, mask_72_64[i] for bit[i] */
if (way == 0) {
lru = (taghi >> 14) & 0xff;
prom_printf("[Bank %d Set 0x%02x] LRU > %d %d %d %d > MRU\n",
-diff -Nur linux-2.4.32-rc1/arch/mips/mm/c-r4k.c linux-2.4.32-rc1.mips/arch/mips/mm/c-r4k.c
---- linux-2.4.32-rc1/arch/mips/mm/c-r4k.c 2005-01-19 15:09:29.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/mm/c-r4k.c 2005-02-06 22:55:42.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/mm/c-r4k.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/mm/c-r4k.c 2007-12-15 05:19:43.558903320 +0100
++++ linux-2.4.35.4/arch/mips/mm/c-r4k.c 2007-12-15 05:19:44.874978317 +0100
@@ -867,9 +867,16 @@
* normally they'd suffer from aliases but magic in the hardware deals
* with that for us so we don't need to take care ourselves.
r4k_blast_dcache_page_setup();
r4k_blast_dcache_page_indexed_setup();
r4k_blast_dcache_setup();
-diff -Nur linux-2.4.32-rc1/arch/mips/mm/tlbex-mips32.S linux-2.4.32-rc1.mips/arch/mips/mm/tlbex-mips32.S
---- linux-2.4.32-rc1/arch/mips/mm/tlbex-mips32.S 2004-02-18 14:36:30.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/mm/tlbex-mips32.S 2004-11-29 00:33:15.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/mm/tlbex-mips32.S
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/mm/tlbex-mips32.S 2007-12-15 05:19:43.566903775 +0100
++++ linux-2.4.35.4/arch/mips/mm/tlbex-mips32.S 2007-12-15 05:19:44.874978317 +0100
@@ -196,7 +196,7 @@
.set noat; \
SAVE_ALL; \
.set at; \
move a0, sp; \
jal do_page_fault; \
-diff -Nur linux-2.4.32-rc1/arch/mips/mm/tlbex-r4k.S linux-2.4.32-rc1.mips/arch/mips/mm/tlbex-r4k.S
---- linux-2.4.32-rc1/arch/mips/mm/tlbex-r4k.S 2004-02-18 14:36:30.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/mm/tlbex-r4k.S 2005-06-06 16:46:22.000000000 +0200
+Index: linux-2.4.35.4/arch/mips/mm/tlbex-r4k.S
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/mm/tlbex-r4k.S 2007-12-15 05:19:43.574904230 +0100
++++ linux-2.4.35.4/arch/mips/mm/tlbex-r4k.S 2007-12-15 05:19:44.874978317 +0100
@@ -184,13 +184,10 @@
P_MTC0 k0, CP0_ENTRYLO0 # load it
PTE_SRL k1, k1, 6 # convert to entrylo1
.set mips3
eret
.set mips0
-diff -Nur linux-2.4.32-rc1/arch/mips/mm/tlb-r4k.c linux-2.4.32-rc1.mips/arch/mips/mm/tlb-r4k.c
---- linux-2.4.32-rc1/arch/mips/mm/tlb-r4k.c 2005-01-19 15:09:29.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/mm/tlb-r4k.c 2004-11-25 23:18:38.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/mm/tlb-r4k.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/mm/tlb-r4k.c 2007-12-15 05:19:43.582904686 +0100
++++ linux-2.4.35.4/arch/mips/mm/tlb-r4k.c 2007-12-15 05:19:44.874978317 +0100
@@ -3,17 +3,12 @@
* License. See the file "COPYING" in the main directory of this archive
* for more details.
/*
* You should never change this register:
-diff -Nur linux-2.4.32-rc1/arch/mips64/defconfig linux-2.4.32-rc1.mips/arch/mips64/defconfig
---- linux-2.4.32-rc1/arch/mips64/defconfig 2005-01-19 15:09:30.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/defconfig 2005-03-18 13:13:23.000000000 +0100
+Index: linux-2.4.35.4/arch/mips64/defconfig
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/defconfig 2007-12-15 05:19:43.590905141 +0100
++++ linux-2.4.35.4/arch/mips64/defconfig 2007-12-15 05:19:44.874978317 +0100
@@ -30,8 +30,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips64/defconfig-atlas linux-2.4.32-rc1.mips/arch/mips64/defconfig-atlas
---- linux-2.4.32-rc1/arch/mips64/defconfig-atlas 2005-01-19 15:09:30.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/defconfig-atlas 2005-03-18 13:13:23.000000000 +0100
+Index: linux-2.4.35.4/arch/mips64/defconfig-atlas
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/defconfig-atlas 2007-12-15 05:19:43.598905599 +0100
++++ linux-2.4.35.4/arch/mips64/defconfig-atlas 2007-12-15 05:19:44.878978546 +0100
@@ -28,8 +28,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips64/defconfig-decstation linux-2.4.32-rc1.mips/arch/mips64/defconfig-decstation
---- linux-2.4.32-rc1/arch/mips64/defconfig-decstation 2005-01-19 15:09:30.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/defconfig-decstation 2005-03-18 13:13:23.000000000 +0100
+Index: linux-2.4.35.4/arch/mips64/defconfig-decstation
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/defconfig-decstation 2007-12-15 05:19:43.606906055 +0100
++++ linux-2.4.35.4/arch/mips64/defconfig-decstation 2007-12-15 05:19:44.878978546 +0100
@@ -28,8 +28,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips64/defconfig-ip22 linux-2.4.32-rc1.mips/arch/mips64/defconfig-ip22
---- linux-2.4.32-rc1/arch/mips64/defconfig-ip22 2005-01-19 15:09:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/defconfig-ip22 2005-03-18 13:13:23.000000000 +0100
+Index: linux-2.4.35.4/arch/mips64/defconfig-ip22
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/defconfig-ip22 2007-12-15 05:19:43.610906281 +0100
++++ linux-2.4.35.4/arch/mips64/defconfig-ip22 2007-12-15 05:19:44.878978546 +0100
@@ -30,8 +30,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips64/defconfig-ip27 linux-2.4.32-rc1.mips/arch/mips64/defconfig-ip27
---- linux-2.4.32-rc1/arch/mips64/defconfig-ip27 2005-01-19 15:09:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/defconfig-ip27 2005-03-18 13:13:23.000000000 +0100
+Index: linux-2.4.35.4/arch/mips64/defconfig-ip27
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/defconfig-ip27 2007-12-15 05:19:43.618906739 +0100
++++ linux-2.4.35.4/arch/mips64/defconfig-ip27 2007-12-15 05:19:44.878978546 +0100
@@ -30,8 +30,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips64/defconfig-jaguar linux-2.4.32-rc1.mips/arch/mips64/defconfig-jaguar
---- linux-2.4.32-rc1/arch/mips64/defconfig-jaguar 2005-01-19 15:09:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/defconfig-jaguar 2005-03-18 13:13:23.000000000 +0100
+Index: linux-2.4.35.4/arch/mips64/defconfig-jaguar
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/defconfig-jaguar 2007-12-15 05:19:43.626907195 +0100
++++ linux-2.4.35.4/arch/mips64/defconfig-jaguar 2007-12-15 05:19:44.882978773 +0100
@@ -30,8 +30,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips64/defconfig-malta linux-2.4.32-rc1.mips/arch/mips64/defconfig-malta
---- linux-2.4.32-rc1/arch/mips64/defconfig-malta 2005-01-19 15:09:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/defconfig-malta 2005-04-19 14:19:34.000000000 +0200
+Index: linux-2.4.35.4/arch/mips64/defconfig-malta
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/defconfig-malta 2007-12-15 05:19:43.634907650 +0100
++++ linux-2.4.35.4/arch/mips64/defconfig-malta 2007-12-15 05:19:44.882978773 +0100
@@ -22,16 +22,19 @@
#
# CONFIG_ACER_PICA_61 is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips64/defconfig-ocelotc linux-2.4.32-rc1.mips/arch/mips64/defconfig-ocelotc
---- linux-2.4.32-rc1/arch/mips64/defconfig-ocelotc 2005-01-19 15:09:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/defconfig-ocelotc 2005-03-18 13:13:23.000000000 +0100
+Index: linux-2.4.35.4/arch/mips64/defconfig-ocelotc
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/defconfig-ocelotc 2007-12-15 05:19:43.638907879 +0100
++++ linux-2.4.35.4/arch/mips64/defconfig-ocelotc 2007-12-15 05:19:44.882978773 +0100
@@ -30,8 +30,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips64/defconfig-sb1250-swarm linux-2.4.32-rc1.mips/arch/mips64/defconfig-sb1250-swarm
---- linux-2.4.32-rc1/arch/mips64/defconfig-sb1250-swarm 2005-01-19 15:09:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/defconfig-sb1250-swarm 2005-03-18 13:13:23.000000000 +0100
+Index: linux-2.4.35.4/arch/mips64/defconfig-sb1250-swarm
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/defconfig-sb1250-swarm 2007-12-15 05:19:43.646908334 +0100
++++ linux-2.4.35.4/arch/mips64/defconfig-sb1250-swarm 2007-12-15 05:19:44.882978773 +0100
@@ -30,8 +30,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips64/defconfig-sead linux-2.4.32-rc1.mips/arch/mips64/defconfig-sead
---- linux-2.4.32-rc1/arch/mips64/defconfig-sead 2005-01-19 15:09:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/defconfig-sead 2005-03-18 13:13:23.000000000 +0100
+Index: linux-2.4.35.4/arch/mips64/defconfig-sead
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/defconfig-sead 2007-12-15 05:19:43.654908790 +0100
++++ linux-2.4.35.4/arch/mips64/defconfig-sead 2007-12-15 05:19:44.886979002 +0100
@@ -28,8 +28,8 @@
# CONFIG_MIPS_PB1000 is not set
# CONFIG_MIPS_PB1100 is not set
# CONFIG_UNIX98_PTYS is not set
#
-diff -Nur linux-2.4.32-rc1/arch/mips64/kernel/binfmt_elfn32.c linux-2.4.32-rc1.mips/arch/mips64/kernel/binfmt_elfn32.c
---- linux-2.4.32-rc1/arch/mips64/kernel/binfmt_elfn32.c 2003-08-25 13:44:40.000000000 +0200
-+++ linux-2.4.32-rc1.mips/arch/mips64/kernel/binfmt_elfn32.c 2005-01-26 03:40:47.000000000 +0100
+Index: linux-2.4.35.4/arch/mips64/kernel/binfmt_elfn32.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/kernel/binfmt_elfn32.c 2007-12-15 05:19:43.662909245 +0100
++++ linux-2.4.35.4/arch/mips64/kernel/binfmt_elfn32.c 2007-12-15 05:19:44.894979457 +0100
@@ -116,4 +116,7 @@
#undef MODULE_DESCRIPTION
#undef MODULE_AUTHOR
+#define TASK_SIZE TASK_SIZE32
+
#include "../../../fs/binfmt_elf.c"
-diff -Nur linux-2.4.32-rc1/arch/mips64/kernel/binfmt_elfo32.c linux-2.4.32-rc1.mips/arch/mips64/kernel/binfmt_elfo32.c
---- linux-2.4.32-rc1/arch/mips64/kernel/binfmt_elfo32.c 2003-08-25 13:44:40.000000000 +0200
-+++ linux-2.4.32-rc1.mips/arch/mips64/kernel/binfmt_elfo32.c 2005-01-26 03:40:47.000000000 +0100
+Index: linux-2.4.35.4/arch/mips64/kernel/binfmt_elfo32.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/kernel/binfmt_elfo32.c 2007-12-15 05:19:43.670909700 +0100
++++ linux-2.4.35.4/arch/mips64/kernel/binfmt_elfo32.c 2007-12-15 05:19:44.898979686 +0100
@@ -137,4 +137,7 @@
#undef MODULE_DESCRIPTION
#undef MODULE_AUTHOR
+#define TASK_SIZE TASK_SIZE32
+
#include "../../../fs/binfmt_elf.c"
-diff -Nur linux-2.4.32-rc1/arch/mips64/kernel/head.S linux-2.4.32-rc1.mips/arch/mips64/kernel/head.S
---- linux-2.4.32-rc1/arch/mips64/kernel/head.S 2004-02-18 14:36:30.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/kernel/head.S 2004-11-22 14:38:26.000000000 +0100
+Index: linux-2.4.35.4/arch/mips64/kernel/head.S
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/kernel/head.S 2007-12-15 05:19:43.674909929 +0100
++++ linux-2.4.35.4/arch/mips64/kernel/head.S 2007-12-15 05:19:44.898979686 +0100
@@ -91,6 +91,21 @@
__INIT
END(smp_bootstrap)
#endif /* CONFIG_SMP */
-diff -Nur linux-2.4.32-rc1/arch/mips64/kernel/ioctl32.c linux-2.4.32-rc1.mips/arch/mips64/kernel/ioctl32.c
---- linux-2.4.32-rc1/arch/mips64/kernel/ioctl32.c 2005-01-19 15:09:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/kernel/ioctl32.c 2005-01-26 03:36:17.000000000 +0100
+Index: linux-2.4.35.4/arch/mips64/kernel/ioctl32.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/kernel/ioctl32.c 2007-12-15 05:19:43.682910385 +0100
++++ linux-2.4.35.4/arch/mips64/kernel/ioctl32.c 2007-12-15 05:19:44.898979686 +0100
@@ -2352,7 +2352,7 @@
IOCTL32_HANDLER(AUTOFS_IOC_SETTIMEOUT32, ioc_settimeout),
IOCTL32_DEFAULT(AUTOFS_IOC_EXPIRE),
IOCTL32_DEFAULT(AUTOFS_IOC_ASKREGHOST),
IOCTL32_DEFAULT(AUTOFS_IOC_TOGGLEREGHOST),
IOCTL32_DEFAULT(AUTOFS_IOC_ASKUMOUNT),
-diff -Nur linux-2.4.32-rc1/arch/mips64/kernel/linux32.c linux-2.4.32-rc1.mips/arch/mips64/kernel/linux32.c
---- linux-2.4.32-rc1/arch/mips64/kernel/linux32.c 2005-04-04 03:42:19.000000000 +0200
-+++ linux-2.4.32-rc1.mips/arch/mips64/kernel/linux32.c 2005-04-22 15:01:00.000000000 +0200
+Index: linux-2.4.35.4/arch/mips64/kernel/linux32.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/kernel/linux32.c 2007-12-15 05:19:43.690910840 +0100
++++ linux-2.4.35.4/arch/mips64/kernel/linux32.c 2007-12-15 05:19:44.902979912 +0100
@@ -1101,6 +1101,7 @@
* specially as they have atomicity guarantees and can handle
* iovec's natively
/*
* Ooo, nasty. We need here to frob 32-bit unsigned longs to
* 64-bit unsigned longs.
-diff -Nur linux-2.4.32-rc1/arch/mips64/kernel/process.c linux-2.4.32-rc1.mips/arch/mips64/kernel/process.c
---- linux-2.4.32-rc1/arch/mips64/kernel/process.c 2003-08-25 13:44:40.000000000 +0200
-+++ linux-2.4.32-rc1.mips/arch/mips64/kernel/process.c 2005-04-14 12:41:44.000000000 +0200
+Index: linux-2.4.35.4/arch/mips64/kernel/process.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/kernel/process.c 2007-12-15 05:19:43.698911298 +0100
++++ linux-2.4.35.4/arch/mips64/kernel/process.c 2007-12-15 05:19:44.902979912 +0100
@@ -125,6 +125,25 @@
return 1;
}
/*
* Create a kernel thread
*/
-diff -Nur linux-2.4.32-rc1/arch/mips64/kernel/scall_64.S linux-2.4.32-rc1.mips/arch/mips64/kernel/scall_64.S
---- linux-2.4.32-rc1/arch/mips64/kernel/scall_64.S 2005-01-19 15:09:32.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/kernel/scall_64.S 2005-02-07 22:21:54.000000000 +0100
+Index: linux-2.4.35.4/arch/mips64/kernel/scall_64.S
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/kernel/scall_64.S 2007-12-15 05:19:43.702911525 +0100
++++ linux-2.4.35.4/arch/mips64/kernel/scall_64.S 2007-12-15 05:19:44.902979912 +0100
@@ -102,15 +102,14 @@
trace_a_syscall:
li t0, -EMAXERRNO - 1 # error?
sltu t0, t0, v0
-diff -Nur linux-2.4.32-rc1/arch/mips64/kernel/scall_n32.S linux-2.4.32-rc1.mips/arch/mips64/kernel/scall_n32.S
---- linux-2.4.32-rc1/arch/mips64/kernel/scall_n32.S 2005-01-19 15:09:32.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/kernel/scall_n32.S 2005-02-07 22:21:54.000000000 +0100
+Index: linux-2.4.35.4/arch/mips64/kernel/scall_n32.S
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/kernel/scall_n32.S 2007-12-15 05:19:43.710911980 +0100
++++ linux-2.4.35.4/arch/mips64/kernel/scall_n32.S 2007-12-15 05:19:44.902979912 +0100
@@ -106,15 +106,14 @@
trace_a_syscall:
li t0, -EMAXERRNO - 1 # error?
sltu t0, t0, v0
-diff -Nur linux-2.4.32-rc1/arch/mips64/kernel/scall_o32.S linux-2.4.32-rc1.mips/arch/mips64/kernel/scall_o32.S
---- linux-2.4.32-rc1/arch/mips64/kernel/scall_o32.S 2005-01-19 15:09:32.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/kernel/scall_o32.S 2005-02-14 04:52:57.000000000 +0100
+Index: linux-2.4.35.4/arch/mips64/kernel/scall_o32.S
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/kernel/scall_o32.S 2007-12-15 05:19:43.718912438 +0100
++++ linux-2.4.35.4/arch/mips64/kernel/scall_o32.S 2007-12-15 05:19:44.906980142 +0100
@@ -118,9 +118,8 @@
sd a6, PT_R10(sp)
sd a7, PT_R11(sp)
.macro sys function, nargs
.byte \nargs
.endm
-diff -Nur linux-2.4.32-rc1/arch/mips64/kernel/setup.c linux-2.4.32-rc1.mips/arch/mips64/kernel/setup.c
---- linux-2.4.32-rc1/arch/mips64/kernel/setup.c 2005-01-19 15:09:32.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/kernel/setup.c 2004-11-22 14:38:26.000000000 +0100
+Index: linux-2.4.35.4/arch/mips64/kernel/setup.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/kernel/setup.c 2007-12-15 05:19:43.726912894 +0100
++++ linux-2.4.35.4/arch/mips64/kernel/setup.c 2007-12-15 05:19:44.906980142 +0100
@@ -129,14 +129,6 @@
*/
load_mmu();
start_kernel();
}
-diff -Nur linux-2.4.32-rc1/arch/mips64/kernel/signal_n32.c linux-2.4.32-rc1.mips/arch/mips64/kernel/signal_n32.c
---- linux-2.4.32-rc1/arch/mips64/kernel/signal_n32.c 2005-01-19 15:09:33.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/kernel/signal_n32.c 2005-02-07 22:10:53.000000000 +0100
+Index: linux-2.4.35.4/arch/mips64/kernel/signal_n32.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/kernel/signal_n32.c 2007-12-15 05:19:43.730913120 +0100
++++ linux-2.4.35.4/arch/mips64/kernel/signal_n32.c 2007-12-15 05:19:44.906980142 +0100
@@ -68,7 +68,7 @@
};
asmlinkage void sysn32_rt_sigreturn(abi64_no_regargs, struct pt_regs regs)
{
-diff -Nur linux-2.4.32-rc1/arch/mips64/kernel/traps.c linux-2.4.32-rc1.mips/arch/mips64/kernel/traps.c
---- linux-2.4.32-rc1/arch/mips64/kernel/traps.c 2005-01-19 15:09:33.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/kernel/traps.c 2005-04-12 22:25:34.000000000 +0200
+Index: linux-2.4.35.4/arch/mips64/kernel/traps.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/kernel/traps.c 2007-12-15 05:19:43.738913578 +0100
++++ linux-2.4.35.4/arch/mips64/kernel/traps.c 2007-12-15 05:19:44.906980142 +0100
@@ -462,9 +462,10 @@
}
ll_task = current;
- current->active_mm = &init_mm;
+ per_cpu_trap_init();
}
-diff -Nur linux-2.4.32-rc1/arch/mips64/mm/cerr-sb1.c linux-2.4.32-rc1.mips/arch/mips64/mm/cerr-sb1.c
---- linux-2.4.32-rc1/arch/mips64/mm/cerr-sb1.c 2004-02-18 14:36:30.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/mm/cerr-sb1.c 2004-12-13 18:37:26.000000000 +0100
+Index: linux-2.4.35.4/arch/mips64/mm/cerr-sb1.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/mm/cerr-sb1.c 2007-12-15 05:19:43.746914033 +0100
++++ linux-2.4.35.4/arch/mips64/mm/cerr-sb1.c 2007-12-15 05:19:44.906980142 +0100
@@ -252,14 +252,14 @@
/* Masks to select bits for Hamming parity, mask_72_64[i] for bit[i] */
if (way == 0) {
lru = (taghi >> 14) & 0xff;
prom_printf("[Bank %d Set 0x%02x] LRU > %d %d %d %d > MRU\n",
-diff -Nur linux-2.4.32-rc1/arch/mips64/mm/c-r4k.c linux-2.4.32-rc1.mips/arch/mips64/mm/c-r4k.c
---- linux-2.4.32-rc1/arch/mips64/mm/c-r4k.c 2005-01-19 15:09:33.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/mm/c-r4k.c 2005-02-06 22:55:42.000000000 +0100
+Index: linux-2.4.35.4/arch/mips64/mm/c-r4k.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/mm/c-r4k.c 2007-12-15 05:19:43.754914488 +0100
++++ linux-2.4.35.4/arch/mips64/mm/c-r4k.c 2007-12-15 05:19:44.910980368 +0100
@@ -867,9 +867,16 @@
* normally they'd suffer from aliases but magic in the hardware deals
* with that for us so we don't need to take care ourselves.
r4k_blast_dcache_page_setup();
r4k_blast_dcache_page_indexed_setup();
r4k_blast_dcache_setup();
-diff -Nur linux-2.4.32-rc1/arch/mips64/mm/tlbex-r4k.S linux-2.4.32-rc1.mips/arch/mips64/mm/tlbex-r4k.S
---- linux-2.4.32-rc1/arch/mips64/mm/tlbex-r4k.S 2004-02-18 14:36:30.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/mm/tlbex-r4k.S 2005-06-06 16:46:22.000000000 +0200
+Index: linux-2.4.35.4/arch/mips64/mm/tlbex-r4k.S
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/mm/tlbex-r4k.S 2007-12-15 05:19:43.762914944 +0100
++++ linux-2.4.35.4/arch/mips64/mm/tlbex-r4k.S 2007-12-15 05:19:44.910980368 +0100
@@ -125,6 +125,33 @@
nop
END(except_vec1_r4k)
eret
END(handle_vec1_r10k)
-diff -Nur linux-2.4.32-rc1/arch/mips64/mm/tlb-r4k.c linux-2.4.32-rc1.mips/arch/mips64/mm/tlb-r4k.c
---- linux-2.4.32-rc1/arch/mips64/mm/tlb-r4k.c 2005-01-19 15:09:33.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/mm/tlb-r4k.c 2004-11-25 23:18:38.000000000 +0100
+Index: linux-2.4.35.4/arch/mips64/mm/tlb-r4k.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/mm/tlb-r4k.c 2007-12-15 05:19:43.770915399 +0100
++++ linux-2.4.35.4/arch/mips64/mm/tlb-r4k.c 2007-12-15 05:19:44.910980368 +0100
@@ -1,24 +1,12 @@
/*
- * Carsten Langgaard, carstenl@mips.com
probe_tlb(config);
write_c0_pagemask(PM_DEFAULT_MASK);
write_c0_wired(0);
-diff -Nur linux-2.4.32-rc1/drivers/char/au1000_gpio.c linux-2.4.32-rc1.mips/drivers/char/au1000_gpio.c
---- linux-2.4.32-rc1/drivers/char/au1000_gpio.c 2003-08-25 13:44:41.000000000 +0200
-+++ linux-2.4.32-rc1.mips/drivers/char/au1000_gpio.c 2003-12-20 14:18:51.000000000 +0100
+Index: linux-2.4.35.4/drivers/char/au1000_gpio.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/char/au1000_gpio.c 2007-12-15 05:19:43.778915857 +0100
++++ linux-2.4.35.4/drivers/char/au1000_gpio.c 2007-12-15 05:19:44.910980368 +0100
@@ -246,7 +246,7 @@
static struct miscdevice au1000gpio_miscdev =
"au1000_gpio",
&au1000gpio_fops
};
-diff -Nur linux-2.4.32-rc1/drivers/char/au1550_psc_spi.c linux-2.4.32-rc1.mips/drivers/char/au1550_psc_spi.c
---- linux-2.4.32-rc1/drivers/char/au1550_psc_spi.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/char/au1550_psc_spi.c 2005-02-11 21:37:24.000000000 +0100
+Index: linux-2.4.35.4/drivers/char/au1550_psc_spi.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/char/au1550_psc_spi.c 2007-12-15 05:19:44.914980597 +0100
@@ -0,0 +1,466 @@
+/*
+ * Driver for Alchemy Au1550 SPI on the PSC.
+
+module_init(au1550spi_init);
+module_exit(au1550spi_exit);
-diff -Nur linux-2.4.32-rc1/drivers/char/Config.in linux-2.4.32-rc1.mips/drivers/char/Config.in
---- linux-2.4.32-rc1/drivers/char/Config.in 2004-08-08 01:26:04.000000000 +0200
-+++ linux-2.4.32-rc1.mips/drivers/char/Config.in 2005-02-11 22:09:56.000000000 +0100
-@@ -313,14 +313,11 @@
+Index: linux-2.4.35.4/drivers/char/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/drivers/char/Config.in 2007-12-15 05:19:43.790916539 +0100
++++ linux-2.4.35.4/drivers/char/Config.in 2007-12-15 05:19:44.914980597 +0100
+@@ -314,14 +314,11 @@
if [ "$CONFIG_OBSOLETE" = "y" -a "$CONFIG_ALPHA_BOOK1" = "y" ]; then
bool 'Tadpole ANA H8 Support (OBSOLETE)' CONFIG_H8
fi
fi
if [ "$CONFIG_TOSHIBA_RBTX4927" = "y" -o "$CONFIG_TOSHIBA_JMR3927" = "y" ]; then
tristate 'Dallas DS1742 RTC support' CONFIG_DS1742
-@@ -383,6 +380,11 @@
+@@ -384,6 +381,11 @@
source drivers/char/drm/Config.in
fi
fi
endmenu
if [ "$CONFIG_HOTPLUG" = "y" -a "$CONFIG_PCMCIA" != "n" ]; then
-@@ -391,6 +393,7 @@
+@@ -392,6 +394,7 @@
if [ "$CONFIG_SOC_AU1X00" = "y" ]; then
tristate ' Alchemy Au1x00 GPIO device support' CONFIG_AU1X00_GPIO
tristate ' Au1000/ADS7846 touchscreen support' CONFIG_TS_AU1X00_ADS7846
fi
if [ "$CONFIG_MIPS_ITE8172" = "y" ]; then
tristate ' ITE GPIO' CONFIG_ITE_GPIO
-diff -Nur linux-2.4.32-rc1/drivers/char/decserial.c linux-2.4.32-rc1.mips/drivers/char/decserial.c
---- linux-2.4.32-rc1/drivers/char/decserial.c 2003-08-25 13:44:41.000000000 +0200
-+++ linux-2.4.32-rc1.mips/drivers/char/decserial.c 2004-09-28 02:53:01.000000000 +0200
+Index: linux-2.4.35.4/drivers/char/decserial.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/char/decserial.c 2007-12-15 05:19:43.798916997 +0100
++++ linux-2.4.35.4/drivers/char/decserial.c 2007-12-15 05:19:44.914980597 +0100
@@ -3,95 +3,105 @@
* choose the right serial device at boot time
*
#endif
}
-diff -Nur linux-2.4.32-rc1/drivers/char/ds1286.c linux-2.4.32-rc1.mips/drivers/char/ds1286.c
---- linux-2.4.32-rc1/drivers/char/ds1286.c 2004-02-18 14:36:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/char/ds1286.c 2004-01-10 06:21:39.000000000 +0100
+Index: linux-2.4.35.4/drivers/char/ds1286.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/char/ds1286.c 2007-12-15 05:19:43.806917453 +0100
++++ linux-2.4.35.4/drivers/char/ds1286.c 2007-12-15 05:19:44.914980597 +0100
@@ -1,6 +1,10 @@
/*
* DS1286 Real Time Clock interface for Linux
+
+MODULE_AUTHOR("Ralf Baechle");
+MODULE_LICENSE("GPL");
-diff -Nur linux-2.4.32-rc1/drivers/char/ds1742.c linux-2.4.32-rc1.mips/drivers/char/ds1742.c
---- linux-2.4.32-rc1/drivers/char/ds1742.c 2004-02-18 14:36:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/char/ds1742.c 2004-01-09 20:27:16.000000000 +0100
+Index: linux-2.4.35.4/drivers/char/ds1742.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/char/ds1742.c 2007-12-15 05:19:43.814917908 +0100
++++ linux-2.4.35.4/drivers/char/ds1742.c 2007-12-15 05:19:44.918980826 +0100
@@ -142,6 +142,7 @@
CMOS_WRITE(RTC_WRITE, RTC_CONTROL);
to_tm(curr_time, &rtc_tm);
rtc_tm.tm_year -= 1900;
return copy_to_user((void *) arg, &rtc_tm, sizeof(rtc_tm)) ?
-diff -Nur linux-2.4.32-rc1/drivers/char/dummy_keyb.c linux-2.4.32-rc1.mips/drivers/char/dummy_keyb.c
---- linux-2.4.32-rc1/drivers/char/dummy_keyb.c 2003-08-25 13:44:41.000000000 +0200
-+++ linux-2.4.32-rc1.mips/drivers/char/dummy_keyb.c 2004-01-09 09:53:08.000000000 +0100
-@@ -140,3 +140,7 @@
+Index: linux-2.4.35.4/drivers/char/dummy_keyb.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/char/dummy_keyb.c 2007-12-15 05:19:43.822918363 +0100
++++ linux-2.4.35.4/drivers/char/dummy_keyb.c 2007-12-15 05:19:44.918980826 +0100
+@@ -141,3 +141,7 @@
{
printk("Dummy keyboard driver installed.\n");
}
+unsigned char kbd_sysrq_key;
+unsigned char kbd_sysrq_xlate[128];
+#endif
-diff -Nur linux-2.4.32-rc1/drivers/char/dz.c linux-2.4.32-rc1.mips/drivers/char/dz.c
---- linux-2.4.32-rc1/drivers/char/dz.c 2005-01-19 15:09:44.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/char/dz.c 2004-12-27 05:13:42.000000000 +0100
+Index: linux-2.4.35.4/drivers/char/dz.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/char/dz.c 2007-12-15 05:19:43.826918593 +0100
++++ linux-2.4.35.4/drivers/char/dz.c 2007-12-15 05:19:44.918980826 +0100
@@ -1,11 +1,13 @@
/*
- * dz.c: Serial port driver for DECStations equiped
};
void __init dz_serial_console_init(void)
-diff -Nur linux-2.4.32-rc1/drivers/char/dz.h linux-2.4.32-rc1.mips/drivers/char/dz.h
---- linux-2.4.32-rc1/drivers/char/dz.h 2002-08-03 02:39:43.000000000 +0200
-+++ linux-2.4.32-rc1.mips/drivers/char/dz.h 2004-09-28 02:53:01.000000000 +0200
+Index: linux-2.4.35.4/drivers/char/dz.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/char/dz.h 2007-12-15 05:19:43.834919048 +0100
++++ linux-2.4.35.4/drivers/char/dz.h 2007-12-15 05:19:44.918980826 +0100
@@ -10,6 +10,8 @@
#ifndef DZ_SERIAL_H
#define DZ_SERIAL_H
-#endif
-
#endif /* DZ_SERIAL_H */
-diff -Nur linux-2.4.32-rc1/drivers/char/ibm_workpad_keymap.map linux-2.4.32-rc1.mips/drivers/char/ibm_workpad_keymap.map
---- linux-2.4.32-rc1/drivers/char/ibm_workpad_keymap.map 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/char/ibm_workpad_keymap.map 2003-12-20 15:20:44.000000000 +0100
+Index: linux-2.4.35.4/drivers/char/ibm_workpad_keymap.map
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/char/ibm_workpad_keymap.map 2007-12-15 05:19:44.922981052 +0100
@@ -0,0 +1,343 @@
+# Keymap for IBM Workpad z50
+# US Mapping
+keycode 93 = AltGr
+keycode 94 = ShiftR
+ shift keycode 94 = Caps_Lock
-diff -Nur linux-2.4.32-rc1/drivers/char/indydog.c linux-2.4.32-rc1.mips/drivers/char/indydog.c
---- linux-2.4.32-rc1/drivers/char/indydog.c 2003-08-25 13:44:41.000000000 +0200
-+++ linux-2.4.32-rc1.mips/drivers/char/indydog.c 2004-06-22 17:32:07.000000000 +0200
+Index: linux-2.4.35.4/drivers/char/indydog.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/char/indydog.c 2007-12-15 05:19:43.846919732 +0100
++++ linux-2.4.35.4/drivers/char/indydog.c 2007-12-15 05:19:44.922981052 +0100
@@ -1,5 +1,5 @@
/*
- * IndyDog 0.2 A Hardware Watchdog Device for SGI IP22
+MODULE_AUTHOR("Guido Guenther <agx@sigxcpu.org>");
+MODULE_DESCRIPTION("Hardware Watchdog Device for SGI IP22");
MODULE_LICENSE("GPL");
-diff -Nur linux-2.4.32-rc1/drivers/char/ip27-rtc.c linux-2.4.32-rc1.mips/drivers/char/ip27-rtc.c
---- linux-2.4.32-rc1/drivers/char/ip27-rtc.c 2004-02-18 14:36:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/char/ip27-rtc.c 2004-04-06 03:35:30.000000000 +0200
+Index: linux-2.4.35.4/drivers/char/ip27-rtc.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/char/ip27-rtc.c 2007-12-15 05:19:43.854920187 +0100
++++ linux-2.4.35.4/drivers/char/ip27-rtc.c 2007-12-15 05:19:44.922981052 +0100
@@ -44,6 +44,7 @@
#include <asm/sn/klconfig.h>
#include <asm/sn/sn0/ip27.h>
+MODULE_AUTHOR("Ralf Baechle <ralf@linux-mips.org>");
+MODULE_DESCRIPTION("SGI IP27 M48T35 RTC driver");
+MODULE_LICENSE("GPL");
-diff -Nur linux-2.4.32-rc1/drivers/char/Makefile linux-2.4.32-rc1.mips/drivers/char/Makefile
---- linux-2.4.32-rc1/drivers/char/Makefile 2004-08-08 01:26:04.000000000 +0200
-+++ linux-2.4.32-rc1.mips/drivers/char/Makefile 2005-02-11 22:09:56.000000000 +0100
+Index: linux-2.4.35.4/drivers/char/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/drivers/char/Makefile 2007-12-15 05:19:43.862920643 +0100
++++ linux-2.4.35.4/drivers/char/Makefile 2007-12-15 05:19:44.922981052 +0100
@@ -48,7 +48,12 @@
KEYBD =
endif
obj-$(CONFIG_AU1X00_USB_TTY) += au1000_usbtty.o
obj-$(CONFIG_AU1X00_USB_RAW) += au1000_usbraw.o
obj-$(CONFIG_COBALT_LCD) += lcd.o
-@@ -353,3 +359,9 @@
+@@ -355,3 +361,9 @@
qtronixmap.c: qtronixmap.map
set -e ; loadkeys --mktable $< | sed -e 's/^static *//' > $@
+
+victor_mpc30x_keymap.c: victor_mpc30x_keymap.map
+ set -e ; loadkeys --mktable $< | sed -e 's/^static *//' > $@
-diff -Nur linux-2.4.32-rc1/drivers/char/mips_rtc.c linux-2.4.32-rc1.mips/drivers/char/mips_rtc.c
---- linux-2.4.32-rc1/drivers/char/mips_rtc.c 2004-01-05 14:53:56.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/char/mips_rtc.c 2004-06-28 14:54:53.000000000 +0200
+Index: linux-2.4.35.4/drivers/char/mips_rtc.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/char/mips_rtc.c 2007-12-15 05:19:43.870921098 +0100
++++ linux-2.4.35.4/drivers/char/mips_rtc.c 2007-12-15 05:19:44.926981281 +0100
@@ -53,14 +53,6 @@
#include <asm/io.h>
#include <asm/uaccess.h>
#include <asm/time.h>
static unsigned long rtc_status = 0; /* bitmapped status byte. */
-diff -Nur linux-2.4.32-rc1/drivers/char/sb1250_duart.c linux-2.4.32-rc1.mips/drivers/char/sb1250_duart.c
---- linux-2.4.32-rc1/drivers/char/sb1250_duart.c 2004-02-18 14:36:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/char/sb1250_duart.c 2004-09-17 01:25:44.000000000 +0200
+Index: linux-2.4.35.4/drivers/char/sb1250_duart.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/char/sb1250_duart.c 2007-12-15 05:19:43.874921327 +0100
++++ linux-2.4.35.4/drivers/char/sb1250_duart.c 2007-12-15 05:19:44.930981508 +0100
@@ -328,10 +328,11 @@
if (c <= 0) break;
break;
case TIOCSSERIAL:
printk("Ignoring TIOCSSERIAL\n");
-diff -Nur linux-2.4.32-rc1/drivers/char/serial.c linux-2.4.32-rc1.mips/drivers/char/serial.c
---- linux-2.4.32-rc1/drivers/char/serial.c 2005-10-24 11:33:29.000000000 +0200
-+++ linux-2.4.32-rc1.mips/drivers/char/serial.c 2005-09-23 22:41:22.000000000 +0200
+Index: linux-2.4.35.4/drivers/char/serial.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/char/serial.c 2007-12-15 05:19:43.882921783 +0100
++++ linux-2.4.35.4/drivers/char/serial.c 2007-12-15 05:19:44.934981737 +0100
@@ -62,6 +62,12 @@
* Robert Schwebel <robert@schwebel.de>,
* Juergen Beisert <jbeisert@eurodsn.de>,
/*
* We used to support using pause I/O for certain machines. We
-diff -Nur linux-2.4.32-rc1/drivers/char/victor_mpc30x_keymap.map linux-2.4.32-rc1.mips/drivers/char/victor_mpc30x_keymap.map
---- linux-2.4.32-rc1/drivers/char/victor_mpc30x_keymap.map 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/char/victor_mpc30x_keymap.map 2004-02-05 18:04:42.000000000 +0100
+Index: linux-2.4.35.4/drivers/char/victor_mpc30x_keymap.map
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/char/victor_mpc30x_keymap.map 2007-12-15 05:19:44.934981737 +0100
@@ -0,0 +1,102 @@
+# Victor Interlink MP-C303/304 keyboard keymap
+#
+ alt keycode 31 = PageDown
+keycode 47 = Right
+ alt keycode 47 = End
-diff -Nur linux-2.4.32-rc1/drivers/char/vr41xx_keyb.c linux-2.4.32-rc1.mips/drivers/char/vr41xx_keyb.c
---- linux-2.4.32-rc1/drivers/char/vr41xx_keyb.c 2004-02-18 14:36:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/char/vr41xx_keyb.c 2004-02-17 13:08:55.000000000 +0100
+Index: linux-2.4.35.4/drivers/char/vr41xx_keyb.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/char/vr41xx_keyb.c 2007-12-15 05:19:43.894922467 +0100
++++ linux-2.4.35.4/drivers/char/vr41xx_keyb.c 2007-12-15 05:19:44.938981966 +0100
@@ -308,7 +308,7 @@
if (found != 0) {
kiu_base = VRC4173_KIU_OFFSET;
kiu_writew(KIURST_KIURST, KIURST);
-diff -Nur linux-2.4.32-rc1/drivers/i2c/Config.in linux-2.4.32-rc1.mips/drivers/i2c/Config.in
---- linux-2.4.32-rc1/drivers/i2c/Config.in 2004-04-14 15:05:29.000000000 +0200
-+++ linux-2.4.32-rc1.mips/drivers/i2c/Config.in 2005-02-11 20:49:04.000000000 +0100
+Index: linux-2.4.35.4/drivers/i2c/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/drivers/i2c/Config.in 2007-12-15 05:19:43.902922923 +0100
++++ linux-2.4.35.4/drivers/i2c/Config.in 2007-12-15 05:19:44.938981966 +0100
@@ -57,6 +57,10 @@
if [ "$CONFIG_SGI_IP22" = "y" ]; then
dep_tristate 'I2C SGI interfaces' CONFIG_I2C_ALGO_SGI $CONFIG_I2C
# This is needed for automatic patch generation: sensors code starts here
# This is needed for automatic patch generation: sensors code ends here
-diff -Nur linux-2.4.32-rc1/drivers/i2c/i2c-algo-au1550.c linux-2.4.32-rc1.mips/drivers/i2c/i2c-algo-au1550.c
---- linux-2.4.32-rc1/drivers/i2c/i2c-algo-au1550.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/i2c/i2c-algo-au1550.c 2005-02-11 20:49:04.000000000 +0100
+Index: linux-2.4.35.4/drivers/i2c/i2c-algo-au1550.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/i2c/i2c-algo-au1550.c 2007-12-15 05:19:44.938981966 +0100
@@ -0,0 +1,340 @@
+/*
+ * i2c-algo-au1550.c: SMBus (i2c) driver algorithms for Alchemy PSC interface
+MODULE_AUTHOR("Dan Malek <dan@embeddededge.com>");
+MODULE_DESCRIPTION("SMBus Au1550 algorithm");
+MODULE_LICENSE("GPL");
-diff -Nur linux-2.4.32-rc1/drivers/i2c/i2c-au1550.c linux-2.4.32-rc1.mips/drivers/i2c/i2c-au1550.c
---- linux-2.4.32-rc1/drivers/i2c/i2c-au1550.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/i2c/i2c-au1550.c 2005-02-11 20:49:04.000000000 +0100
+Index: linux-2.4.35.4/drivers/i2c/i2c-au1550.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/i2c/i2c-au1550.c 2007-12-15 05:19:44.938981966 +0100
@@ -0,0 +1,154 @@
+/*
+ * i2c-au1550.c: SMBus (i2c) adapter for Alchemy PSC interface
+{
+ i2c_au1550_del_bus(&pb1550_board_adapter);
+}
-diff -Nur linux-2.4.32-rc1/drivers/i2c/i2c-core.c linux-2.4.32-rc1.mips/drivers/i2c/i2c-core.c
---- linux-2.4.32-rc1/drivers/i2c/i2c-core.c 2005-06-01 02:56:56.000000000 +0200
-+++ linux-2.4.32-rc1.mips/drivers/i2c/i2c-core.c 2005-05-23 14:12:30.000000000 +0200
-@@ -1280,6 +1280,9 @@
+Index: linux-2.4.35.4/drivers/i2c/i2c-core.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/i2c/i2c-core.c 2007-12-15 05:19:43.922924062 +0100
++++ linux-2.4.35.4/drivers/i2c/i2c-core.c 2007-12-15 05:19:44.938981966 +0100
+@@ -1277,6 +1277,9 @@
#ifdef CONFIG_I2C_MAX1617
extern int i2c_max1617_init(void);
#endif
#ifdef CONFIG_I2C_PROC
extern int sensors_init(void);
-@@ -1335,6 +1338,10 @@
+@@ -1332,6 +1335,10 @@
i2c_max1617_init();
#endif
/* -------------- proc interface ---- */
#ifdef CONFIG_I2C_PROC
sensors_init();
-diff -Nur linux-2.4.32-rc1/drivers/i2c/Makefile linux-2.4.32-rc1.mips/drivers/i2c/Makefile
---- linux-2.4.32-rc1/drivers/i2c/Makefile 2004-02-18 14:36:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/i2c/Makefile 2005-02-11 20:49:04.000000000 +0100
+Index: linux-2.4.35.4/drivers/i2c/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/drivers/i2c/Makefile 2007-12-15 05:19:43.930924518 +0100
++++ linux-2.4.35.4/drivers/i2c/Makefile 2007-12-15 05:19:44.942982192 +0100
@@ -6,7 +6,7 @@
export-objs := i2c-core.o i2c-algo-bit.o i2c-algo-pcf.o \
# This is needed for automatic patch generation: sensors code starts here
# This is needed for automatic patch generation: sensors code ends here
-diff -Nur linux-2.4.32-rc1/drivers/media/video/indycam.c linux-2.4.32-rc1.mips/drivers/media/video/indycam.c
---- linux-2.4.32-rc1/drivers/media/video/indycam.c 2004-02-18 14:36:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/media/video/indycam.c 2004-12-09 21:32:05.000000000 +0100
+Index: linux-2.4.35.4/drivers/media/video/indycam.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/media/video/indycam.c 2007-12-15 05:19:43.934924747 +0100
++++ linux-2.4.35.4/drivers/media/video/indycam.c 2007-12-15 05:19:44.942982192 +0100
@@ -50,13 +50,14 @@
0x80, /* INDYCAM_GAMMA */
};
MOD_INC_USE_COUNT;
return 0;
-diff -Nur linux-2.4.32-rc1/drivers/media/video/vino.c linux-2.4.32-rc1.mips/drivers/media/video/vino.c
---- linux-2.4.32-rc1/drivers/media/video/vino.c 2004-02-18 14:36:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/media/video/vino.c 2004-12-10 05:02:54.000000000 +0100
+Index: linux-2.4.35.4/drivers/media/video/vino.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/media/video/vino.c 2007-12-15 05:19:43.946925431 +0100
++++ linux-2.4.35.4/drivers/media/video/vino.c 2007-12-15 05:19:44.950982647 +0100
@@ -5,6 +5,8 @@
* License version 2 as published by the Free Software Foundation.
*
}
static int vino_grab(struct vino_device *v, int frame)
-diff -Nur linux-2.4.32-rc1/drivers/mtd/devices/docprobe.c linux-2.4.32-rc1.mips/drivers/mtd/devices/docprobe.c
---- linux-2.4.32-rc1/drivers/mtd/devices/docprobe.c 2003-06-13 16:51:34.000000000 +0200
-+++ linux-2.4.32-rc1.mips/drivers/mtd/devices/docprobe.c 2003-06-16 01:42:21.000000000 +0200
+Index: linux-2.4.35.4/drivers/mtd/devices/docprobe.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/mtd/devices/docprobe.c 2007-12-15 05:19:43.954925886 +0100
++++ linux-2.4.35.4/drivers/mtd/devices/docprobe.c 2007-12-15 05:19:44.950982647 +0100
@@ -89,10 +89,10 @@
0xe4000000,
#elif defined(CONFIG_MOMENCO_OCELOT)
#warning Unknown architecture for DiskOnChip. No default probe locations defined
#endif
0 };
-diff -Nur linux-2.4.32-rc1/drivers/mtd/devices/ms02-nv.c linux-2.4.32-rc1.mips/drivers/mtd/devices/ms02-nv.c
---- linux-2.4.32-rc1/drivers/mtd/devices/ms02-nv.c 2003-06-13 16:51:34.000000000 +0200
-+++ linux-2.4.32-rc1.mips/drivers/mtd/devices/ms02-nv.c 2004-07-30 12:22:40.000000000 +0200
+Index: linux-2.4.35.4/drivers/mtd/devices/ms02-nv.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/mtd/devices/ms02-nv.c 2007-12-15 05:19:43.958926116 +0100
++++ linux-2.4.35.4/drivers/mtd/devices/ms02-nv.c 2007-12-15 05:19:44.950982647 +0100
@@ -1,10 +1,10 @@
/*
- * Copyright (c) 2001 Maciej W. Rozycki
csr = (volatile u32 *)KN03_MCR_BASE;
if (*csr & KN03_MCR_BNK32M)
stride = 2;
-diff -Nur linux-2.4.32-rc1/drivers/mtd/devices/ms02-nv.h linux-2.4.32-rc1.mips/drivers/mtd/devices/ms02-nv.h
---- linux-2.4.32-rc1/drivers/mtd/devices/ms02-nv.h 2002-11-29 00:53:13.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/mtd/devices/ms02-nv.h 2004-07-30 12:22:40.000000000 +0200
+Index: linux-2.4.35.4/drivers/mtd/devices/ms02-nv.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/mtd/devices/ms02-nv.h 2007-12-15 05:19:43.966926571 +0100
++++ linux-2.4.35.4/drivers/mtd/devices/ms02-nv.h 2007-12-15 05:19:44.950982647 +0100
@@ -1,32 +1,96 @@
/*
- * Copyright (c) 2001 Maciej W. Rozycki
typedef volatile u32 ms02nv_uint;
struct ms02nv_private {
-diff -Nur linux-2.4.32-rc1/drivers/mtd/maps/Config.in linux-2.4.32-rc1.mips/drivers/mtd/maps/Config.in
---- linux-2.4.32-rc1/drivers/mtd/maps/Config.in 2003-06-13 16:51:34.000000000 +0200
-+++ linux-2.4.32-rc1.mips/drivers/mtd/maps/Config.in 2004-02-26 01:46:35.000000000 +0100
+Index: linux-2.4.35.4/drivers/mtd/maps/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/drivers/mtd/maps/Config.in 2007-12-15 05:19:43.974927026 +0100
++++ linux-2.4.35.4/drivers/mtd/maps/Config.in 2007-12-15 05:19:44.950982647 +0100
@@ -51,11 +51,26 @@
dep_tristate ' Pb1000 MTD support' CONFIG_MTD_PB1000 $CONFIG_MIPS_PB1000
dep_tristate ' Pb1500 MTD support' CONFIG_MTD_PB1500 $CONFIG_MIPS_PB1500
dep_tristate ' Flash chip mapping on ITE QED-4N-S01B, Globespan IVR or custom board' CONFIG_MTD_CSTM_MIPS_IXX $CONFIG_MTD_CFI $CONFIG_MTD_JEDEC $CONFIG_MTD_PARTITIONS
if [ "$CONFIG_MTD_CSTM_MIPS_IXX" = "y" -o "$CONFIG_MTD_CSTM_MIPS_IXX" = "m" ]; then
hex ' Physical start address of flash mapping' CONFIG_MTD_CSTM_MIPS_IXX_START 0x8000000
-diff -Nur linux-2.4.32-rc1/drivers/mtd/maps/db1x00-flash.c linux-2.4.32-rc1.mips/drivers/mtd/maps/db1x00-flash.c
---- linux-2.4.32-rc1/drivers/mtd/maps/db1x00-flash.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/mtd/maps/db1x00-flash.c 2005-02-03 07:35:29.000000000 +0100
+Index: linux-2.4.35.4/drivers/mtd/maps/db1x00-flash.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/mtd/maps/db1x00-flash.c 2007-12-15 05:19:44.950982647 +0100
@@ -0,0 +1,283 @@
+/*
+ * Flash memory access on Alchemy Db1xxx boards
+MODULE_AUTHOR("Pete Popov");
+MODULE_DESCRIPTION("Db1x00 mtd map driver");
+MODULE_LICENSE("GPL");
-diff -Nur linux-2.4.32-rc1/drivers/mtd/maps/hydrogen3-flash.c linux-2.4.32-rc1.mips/drivers/mtd/maps/hydrogen3-flash.c
---- linux-2.4.32-rc1/drivers/mtd/maps/hydrogen3-flash.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/mtd/maps/hydrogen3-flash.c 2004-01-10 23:40:18.000000000 +0100
+Index: linux-2.4.35.4/drivers/mtd/maps/hydrogen3-flash.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/mtd/maps/hydrogen3-flash.c 2007-12-15 05:19:44.954982876 +0100
@@ -0,0 +1,189 @@
+/*
+ * Flash memory access on Alchemy HydrogenIII boards
+MODULE_AUTHOR("Pete Popov");
+MODULE_DESCRIPTION("HydrogenIII mtd map driver");
+MODULE_LICENSE("GPL");
-diff -Nur linux-2.4.32-rc1/drivers/mtd/maps/lasat.c linux-2.4.32-rc1.mips/drivers/mtd/maps/lasat.c
---- linux-2.4.32-rc1/drivers/mtd/maps/lasat.c 2003-06-13 16:51:34.000000000 +0200
-+++ linux-2.4.32-rc1.mips/drivers/mtd/maps/lasat.c 2003-08-18 04:59:02.000000000 +0200
+Index: linux-2.4.35.4/drivers/mtd/maps/lasat.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/mtd/maps/lasat.c 2007-12-15 05:19:43.994928166 +0100
++++ linux-2.4.35.4/drivers/mtd/maps/lasat.c 2007-12-15 05:19:44.954982876 +0100
@@ -1,15 +1,6 @@
/*
* Flash device on lasat 100 and 200 boards
}
}
-diff -Nur linux-2.4.32-rc1/drivers/mtd/maps/Makefile linux-2.4.32-rc1.mips/drivers/mtd/maps/Makefile
---- linux-2.4.32-rc1/drivers/mtd/maps/Makefile 2003-06-13 16:51:34.000000000 +0200
-+++ linux-2.4.32-rc1.mips/drivers/mtd/maps/Makefile 2004-02-26 01:46:35.000000000 +0100
+Index: linux-2.4.35.4/drivers/mtd/maps/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/drivers/mtd/maps/Makefile 2007-12-15 05:19:43.998928395 +0100
++++ linux-2.4.35.4/drivers/mtd/maps/Makefile 2007-12-15 05:19:44.954982876 +0100
@@ -52,7 +52,13 @@
obj-$(CONFIG_MTD_PB1000) += pb1xxx-flash.o
obj-$(CONFIG_MTD_PB1100) += pb1xxx-flash.o
+obj-$(CONFIG_MTD_MIRAGE) += mirage-flash.o
include $(TOPDIR)/Rules.make
-diff -Nur linux-2.4.32-rc1/drivers/mtd/maps/mirage-flash.c linux-2.4.32-rc1.mips/drivers/mtd/maps/mirage-flash.c
---- linux-2.4.32-rc1/drivers/mtd/maps/mirage-flash.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/mtd/maps/mirage-flash.c 2003-12-22 04:37:22.000000000 +0100
+Index: linux-2.4.35.4/drivers/mtd/maps/mirage-flash.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/mtd/maps/mirage-flash.c 2007-12-15 05:19:44.954982876 +0100
@@ -0,0 +1,194 @@
+/*
+ * Flash memory access on AMD Mirage board.
+MODULE_AUTHOR("Embedded Edge");
+MODULE_DESCRIPTION("Mirage mtd map driver");
+MODULE_LICENSE("GPL");
-diff -Nur linux-2.4.32-rc1/drivers/mtd/maps/mtx-1.c linux-2.4.32-rc1.mips/drivers/mtd/maps/mtx-1.c
---- linux-2.4.32-rc1/drivers/mtd/maps/mtx-1.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/mtd/maps/mtx-1.c 2003-06-27 02:04:35.000000000 +0200
+Index: linux-2.4.35.4/drivers/mtd/maps/mtx-1.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/mtd/maps/mtx-1.c 2007-12-15 05:19:44.954982876 +0100
@@ -0,0 +1,181 @@
+/*
+ * Flash memory access on 4G Systems MTX-1 board
+MODULE_AUTHOR("Pete Popov");
+MODULE_DESCRIPTION("MTX-1 CFI map driver");
+MODULE_LICENSE("GPL");
-diff -Nur linux-2.4.32-rc1/drivers/mtd/maps/pb1550-flash.c linux-2.4.32-rc1.mips/drivers/mtd/maps/pb1550-flash.c
---- linux-2.4.32-rc1/drivers/mtd/maps/pb1550-flash.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/mtd/maps/pb1550-flash.c 2004-02-26 01:48:48.000000000 +0100
+Index: linux-2.4.35.4/drivers/mtd/maps/pb1550-flash.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/mtd/maps/pb1550-flash.c 2007-12-15 05:19:44.958983106 +0100
@@ -0,0 +1,270 @@
+/*
+ * Flash memory access on Alchemy Pb1550 board
+MODULE_AUTHOR("Embedded Edge, LLC");
+MODULE_DESCRIPTION("Pb1550 mtd map driver");
+MODULE_LICENSE("GPL");
-diff -Nur linux-2.4.32-rc1/drivers/mtd/maps/pb1xxx-flash.c linux-2.4.32-rc1.mips/drivers/mtd/maps/pb1xxx-flash.c
---- linux-2.4.32-rc1/drivers/mtd/maps/pb1xxx-flash.c 2003-06-13 16:51:34.000000000 +0200
-+++ linux-2.4.32-rc1.mips/drivers/mtd/maps/pb1xxx-flash.c 2003-05-19 08:27:22.000000000 +0200
+Index: linux-2.4.35.4/drivers/mtd/maps/pb1xxx-flash.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/mtd/maps/pb1xxx-flash.c 2007-12-15 05:19:44.026929991 +0100
++++ linux-2.4.35.4/drivers/mtd/maps/pb1xxx-flash.c 2007-12-15 05:19:44.958983106 +0100
@@ -192,6 +192,34 @@
#else
#error MTD_PB1500 define combo error /* should never happen */
#else
#error Unsupported board
#endif
-diff -Nur linux-2.4.32-rc1/drivers/mtd/maps/xxs1500.c linux-2.4.32-rc1.mips/drivers/mtd/maps/xxs1500.c
---- linux-2.4.32-rc1/drivers/mtd/maps/xxs1500.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/mtd/maps/xxs1500.c 2003-08-02 04:06:01.000000000 +0200
+Index: linux-2.4.35.4/drivers/mtd/maps/xxs1500.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/mtd/maps/xxs1500.c 2007-12-15 05:19:44.958983106 +0100
@@ -0,0 +1,186 @@
+/*
+ * Flash memory access on MyCable XXS1500 board
+MODULE_AUTHOR("Pete Popov");
+MODULE_DESCRIPTION("XXS1500 CFI map driver");
+MODULE_LICENSE("GPL");
-diff -Nur linux-2.4.32-rc1/drivers/net/defxx.c linux-2.4.32-rc1.mips/drivers/net/defxx.c
---- linux-2.4.32-rc1/drivers/net/defxx.c 2004-11-17 12:54:21.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/net/defxx.c 2004-11-19 01:28:39.000000000 +0100
+Index: linux-2.4.35.4/drivers/net/defxx.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/net/defxx.c 2007-12-15 05:19:44.042930901 +0100
++++ linux-2.4.35.4/drivers/net/defxx.c 2007-12-15 05:19:44.962983332 +0100
@@ -10,24 +10,18 @@
*
* Abstract:
MODULE_LICENSE("GPL");
\f
-diff -Nur linux-2.4.32-rc1/drivers/net/defxx.h linux-2.4.32-rc1.mips/drivers/net/defxx.h
---- linux-2.4.32-rc1/drivers/net/defxx.h 2001-02-13 22:15:05.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/net/defxx.h 2004-10-03 20:06:48.000000000 +0200
+Index: linux-2.4.35.4/drivers/net/defxx.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/net/defxx.h 2007-12-15 05:19:44.050931357 +0100
++++ linux-2.4.35.4/drivers/net/defxx.h 2007-12-15 05:19:44.962983332 +0100
@@ -12,17 +12,11 @@
* Contains all definitions specified by port specification and required
* by the defxx.c driver.
struct pci_dev * pci_dev;
u32 full_duplex_enb; /* FDDI Full Duplex enable (1 == on, 2 == off) */
u32 req_ttrt; /* requested TTRT value (in 80ns units) */
-diff -Nur linux-2.4.32-rc1/drivers/net/hamradio/hdlcdrv.c linux-2.4.32-rc1.mips/drivers/net/hamradio/hdlcdrv.c
---- linux-2.4.32-rc1/drivers/net/hamradio/hdlcdrv.c 2002-02-25 20:37:59.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/net/hamradio/hdlcdrv.c 2004-05-04 14:04:27.000000000 +0200
+Index: linux-2.4.35.4/drivers/net/hamradio/hdlcdrv.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/net/hamradio/hdlcdrv.c 2007-12-15 05:19:44.058931815 +0100
++++ linux-2.4.35.4/drivers/net/hamradio/hdlcdrv.c 2007-12-15 05:19:44.962983332 +0100
@@ -587,6 +587,8 @@
return -EINVAL;
s = (struct hdlcdrv_state *)dev->priv;
if (s->ops && s->ops->close)
i = s->ops->close(dev);
if (s->skb)
-diff -Nur linux-2.4.32-rc1/drivers/net/irda/au1k_ir.c linux-2.4.32-rc1.mips/drivers/net/irda/au1k_ir.c
---- linux-2.4.32-rc1/drivers/net/irda/au1k_ir.c 2004-02-18 14:36:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/net/irda/au1k_ir.c 2005-02-03 07:35:29.000000000 +0100
+Index: linux-2.4.35.4/drivers/net/irda/au1k_ir.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/net/irda/au1k_ir.c 2007-12-15 05:19:44.066932270 +0100
++++ linux-2.4.35.4/drivers/net/irda/au1k_ir.c 2007-12-15 05:19:44.966983561 +0100
@@ -81,10 +81,6 @@
#define RUN_AT(x) (jiffies + (x))
static spinlock_t ir_lock = SPIN_LOCK_UNLOCKED;
/*
-diff -Nur linux-2.4.32-rc1/drivers/net/sgiseeq.c linux-2.4.32-rc1.mips/drivers/net/sgiseeq.c
---- linux-2.4.32-rc1/drivers/net/sgiseeq.c 2005-01-19 15:09:56.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/net/sgiseeq.c 2005-09-23 16:35:27.000000000 +0200
+Index: linux-2.4.35.4/drivers/net/sgiseeq.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/net/sgiseeq.c 2007-12-15 05:19:44.074932725 +0100
++++ linux-2.4.35.4/drivers/net/sgiseeq.c 2007-12-15 05:19:44.966983561 +0100
@@ -24,16 +24,16 @@
#include <asm/io.h>
#include <asm/system.h>
+MODULE_DESCRIPTION("SGI Seeq 8003 driver");
+MODULE_AUTHOR("David S. Miller");
MODULE_LICENSE("GPL");
-diff -Nur linux-2.4.32-rc1/drivers/pci/pci.c linux-2.4.32-rc1.mips/drivers/pci/pci.c
---- linux-2.4.32-rc1/drivers/pci/pci.c 2004-11-17 12:54:21.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/pci/pci.c 2004-11-19 01:28:41.000000000 +0100
+Index: linux-2.4.35.4/drivers/pci/pci.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/pci/pci.c 2007-12-15 05:19:44.082933181 +0100
++++ linux-2.4.35.4/drivers/pci/pci.c 2007-12-15 05:19:44.966983561 +0100
@@ -1281,11 +1281,17 @@
{
unsigned int buses;
sprintf(child->name, (is_cardbus ? "PCI CardBus #%02x" : "PCI Bus #%02x"), child->number);
return max;
}
-diff -Nur linux-2.4.32-rc1/drivers/pcmcia/au1000_db1x00.c linux-2.4.32-rc1.mips/drivers/pcmcia/au1000_db1x00.c
---- linux-2.4.32-rc1/drivers/pcmcia/au1000_db1x00.c 2005-01-19 15:09:57.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/pcmcia/au1000_db1x00.c 2005-02-03 07:35:30.000000000 +0100
+Index: linux-2.4.35.4/drivers/pcmcia/au1000_db1x00.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/pcmcia/au1000_db1x00.c 2007-12-15 05:19:44.090933636 +0100
++++ linux-2.4.35.4/drivers/pcmcia/au1000_db1x00.c 2007-12-15 05:19:44.970983787 +0100
@@ -1,6 +1,6 @@
/*
*
return 0;
}
-diff -Nur linux-2.4.32-rc1/drivers/pcmcia/Config.in linux-2.4.32-rc1.mips/drivers/pcmcia/Config.in
---- linux-2.4.32-rc1/drivers/pcmcia/Config.in 2004-02-18 14:36:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/pcmcia/Config.in 2004-02-22 06:21:34.000000000 +0100
+Index: linux-2.4.35.4/drivers/pcmcia/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/drivers/pcmcia/Config.in 2007-12-15 05:19:44.098934094 +0100
++++ linux-2.4.35.4/drivers/pcmcia/Config.in 2007-12-15 05:19:44.974984016 +0100
@@ -30,16 +30,14 @@
dep_tristate ' M8xx support' CONFIG_PCMCIA_M8XX $CONFIG_PCMCIA
fi
if [ "$CONFIG_VRC4173" = "y" -o "$CONFIG_VRC4173" = "m" ]; then
dep_tristate ' NEC VRC4173 CARDU support' CONFIG_PCMCIA_VRC4173 $CONFIG_PCMCIA
fi
-diff -Nur linux-2.4.32-rc1/drivers/pcmcia/Makefile linux-2.4.32-rc1.mips/drivers/pcmcia/Makefile
---- linux-2.4.32-rc1/drivers/pcmcia/Makefile 2004-02-18 14:36:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/pcmcia/Makefile 2005-02-03 07:35:30.000000000 +0100
+Index: linux-2.4.35.4/drivers/pcmcia/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/drivers/pcmcia/Makefile 2007-12-15 05:19:44.106934550 +0100
++++ linux-2.4.35.4/drivers/pcmcia/Makefile 2007-12-15 05:19:44.974984016 +0100
@@ -61,9 +61,18 @@
obj-$(CONFIG_PCMCIA_AU1X00) += au1x00_ss.o
obj-$(CONFIG_PCMCIA_VRC4173) += vrc4173_cardu.o
include $(TOPDIR)/Rules.make
-diff -Nur linux-2.4.32-rc1/drivers/pcmcia/vrc4171_card.c linux-2.4.32-rc1.mips/drivers/pcmcia/vrc4171_card.c
---- linux-2.4.32-rc1/drivers/pcmcia/vrc4171_card.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/pcmcia/vrc4171_card.c 2004-01-19 16:54:58.000000000 +0100
+Index: linux-2.4.35.4/drivers/pcmcia/vrc4171_card.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/pcmcia/vrc4171_card.c 2007-12-15 05:19:44.978984245 +0100
@@ -0,0 +1,886 @@
+/*
+ * vrc4171_card.c, NEC VRC4171 Card Controller driver for Socket Services.
+
+module_init(vrc4171_card_init);
+module_exit(vrc4171_card_exit);
-diff -Nur linux-2.4.32-rc1/drivers/scsi/NCR53C9x.h linux-2.4.32-rc1.mips/drivers/scsi/NCR53C9x.h
---- linux-2.4.32-rc1/drivers/scsi/NCR53C9x.h 2004-02-18 14:36:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/scsi/NCR53C9x.h 2003-12-15 19:19:51.000000000 +0100
+Index: linux-2.4.35.4/drivers/scsi/NCR53C9x.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/scsi/NCR53C9x.h 2007-12-15 05:19:44.122935460 +0100
++++ linux-2.4.35.4/drivers/scsi/NCR53C9x.h 2007-12-15 05:19:44.978984245 +0100
@@ -144,12 +144,7 @@
#ifndef MULTIPLE_PAD_SIZES
#define esp_read(__reg) (__reg)
struct ESP_regs {
-diff -Nur linux-2.4.32-rc1/drivers/sound/au1550_i2s.c linux-2.4.32-rc1.mips/drivers/sound/au1550_i2s.c
---- linux-2.4.32-rc1/drivers/sound/au1550_i2s.c 2005-01-19 15:10:04.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/sound/au1550_i2s.c 2005-02-08 08:07:50.000000000 +0100
+Index: linux-2.4.35.4/drivers/sound/au1550_i2s.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/sound/au1550_i2s.c 2007-12-15 05:19:44.126935690 +0100
++++ linux-2.4.35.4/drivers/sound/au1550_i2s.c 2007-12-15 05:19:44.982984472 +0100
@@ -41,6 +41,7 @@
* 675 Mass Ave, Cambridge, MA 02139, USA.
*
err_dev1:
au1xxx_dbdma_chan_free(s->dma_adc.dmanr);
err_dma2:
-diff -Nur linux-2.4.32-rc1/drivers/sound/au1550_psc.c linux-2.4.32-rc1.mips/drivers/sound/au1550_psc.c
---- linux-2.4.32-rc1/drivers/sound/au1550_psc.c 2005-01-19 15:10:04.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/sound/au1550_psc.c 2005-01-30 09:01:28.000000000 +0100
+Index: linux-2.4.35.4/drivers/sound/au1550_psc.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/sound/au1550_psc.c 2007-12-15 05:19:44.134936145 +0100
++++ linux-2.4.35.4/drivers/sound/au1550_psc.c 2007-12-15 05:19:44.982984472 +0100
@@ -30,6 +30,7 @@
* 675 Mass Ave, Cambridge, MA 02139, USA.
*
return 0;
err_dev3:
-diff -Nur linux-2.4.32-rc1/drivers/sound/Config.in linux-2.4.32-rc1.mips/drivers/sound/Config.in
---- linux-2.4.32-rc1/drivers/sound/Config.in 2005-01-19 15:10:04.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/sound/Config.in 2005-04-21 07:53:07.000000000 +0200
+Index: linux-2.4.35.4/drivers/sound/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/drivers/sound/Config.in 2007-12-15 05:19:44.142936600 +0100
++++ linux-2.4.35.4/drivers/sound/Config.in 2007-12-15 05:19:44.982984472 +0100
@@ -72,10 +72,15 @@
if [ "$CONFIG_DDB5477" = "y" ]; then
dep_tristate ' NEC Vrc5477 AC97 sound' CONFIG_SOUND_VRC5477 $CONFIG_SOUND
fi
dep_tristate ' Trident 4DWave DX/NX, SiS 7018 or ALi 5451 PCI Audio Core' CONFIG_SOUND_TRIDENT $CONFIG_SOUND $CONFIG_PCI
-diff -Nur linux-2.4.32-rc1/drivers/tc/lk201.c linux-2.4.32-rc1.mips/drivers/tc/lk201.c
---- linux-2.4.32-rc1/drivers/tc/lk201.c 2004-02-18 14:36:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/tc/lk201.c 2004-09-28 02:53:04.000000000 +0200
+Index: linux-2.4.35.4/drivers/tc/lk201.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/tc/lk201.c 2007-12-15 05:19:44.150937056 +0100
++++ linux-2.4.35.4/drivers/tc/lk201.c 2007-12-15 05:19:44.986984701 +0100
@@ -5,7 +5,7 @@
* for more details.
*
+ if (!register_dec_serial_hook(keyb_line, &lk201_hook))
+ unregister_dec_serial_hook(keyb_line);
}
-diff -Nur linux-2.4.32-rc1/drivers/tc/zs.c linux-2.4.32-rc1.mips/drivers/tc/zs.c
---- linux-2.4.32-rc1/drivers/tc/zs.c 2005-01-19 15:10:05.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/tc/zs.c 2004-12-27 05:13:50.000000000 +0100
+Index: linux-2.4.35.4/drivers/tc/zs.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/tc/zs.c 2007-12-15 05:19:44.158937514 +0100
++++ linux-2.4.35.4/drivers/tc/zs.c 2007-12-15 05:19:44.986984701 +0100
@@ -68,6 +68,8 @@
#include <asm/bitops.h>
#include <asm/uaccess.h>
}
void __init zs_kgdb_hook(int tty_num)
-diff -Nur linux-2.4.32-rc1/drivers/tc/zs.h linux-2.4.32-rc1.mips/drivers/tc/zs.h
---- linux-2.4.32-rc1/drivers/tc/zs.h 2004-02-18 14:36:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/tc/zs.h 2004-07-01 15:28:54.000000000 +0200
+Index: linux-2.4.35.4/drivers/tc/zs.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/tc/zs.h 2007-12-15 05:19:44.166937969 +0100
++++ linux-2.4.35.4/drivers/tc/zs.h 2007-12-15 05:19:44.986984701 +0100
@@ -1,14 +1,18 @@
/*
- * macserial.h: Definitions for the Macintosh Z8530 serial driver.
unsigned char *xmit_buf;
int xmit_head;
int xmit_tail;
-diff -Nur linux-2.4.32-rc1/drivers/video/au1200fb.c linux-2.4.32-rc1.mips/drivers/video/au1200fb.c
---- linux-2.4.32-rc1/drivers/video/au1200fb.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/video/au1200fb.c 2005-03-13 09:04:16.000000000 +0100
+Index: linux-2.4.35.4/drivers/video/au1200fb.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/video/au1200fb.c 2007-12-15 05:19:44.990984927 +0100
@@ -0,0 +1,1564 @@
+/*
+ * BRIEF MODULE DESCRIPTION
+#endif /* MODULE */
+
+
-diff -Nur linux-2.4.32-rc1/drivers/video/au1200fb.h linux-2.4.32-rc1.mips/drivers/video/au1200fb.h
---- linux-2.4.32-rc1/drivers/video/au1200fb.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/video/au1200fb.h 2005-02-11 22:16:44.000000000 +0100
+Index: linux-2.4.35.4/drivers/video/au1200fb.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/video/au1200fb.h 2007-12-15 05:19:44.990984927 +0100
@@ -0,0 +1,288 @@
+/*
+ * BRIEF MODULE DESCRIPTION
+
+/********************************************************************/
+#endif /* _AU1200LCD_H */
-diff -Nur linux-2.4.32-rc1/drivers/video/Config.in linux-2.4.32-rc1.mips/drivers/video/Config.in
---- linux-2.4.32-rc1/drivers/video/Config.in 2004-02-18 14:36:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/video/Config.in 2005-02-11 22:16:44.000000000 +0100
+Index: linux-2.4.35.4/drivers/video/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/drivers/video/Config.in 2007-12-15 05:19:44.186939109 +0100
++++ linux-2.4.35.4/drivers/video/Config.in 2007-12-15 05:19:44.990984927 +0100
@@ -87,8 +87,8 @@
if [ "$CONFIG_HP300" = "y" ]; then
define_bool CONFIG_FB_HP300 y
fi
fi
fi
-diff -Nur linux-2.4.32-rc1/drivers/video/fbmem.c linux-2.4.32-rc1.mips/drivers/video/fbmem.c
---- linux-2.4.32-rc1/drivers/video/fbmem.c 2005-06-01 02:56:56.000000000 +0200
-+++ linux-2.4.32-rc1.mips/drivers/video/fbmem.c 2005-05-25 19:14:24.000000000 +0200
+Index: linux-2.4.35.4/drivers/video/fbmem.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/video/fbmem.c 2007-12-15 05:19:44.194939564 +0100
++++ linux-2.4.35.4/drivers/video/fbmem.c 2007-12-15 05:19:44.994985156 +0100
@@ -139,6 +139,8 @@
extern int e1356fb_setup(char*);
extern int au1100fb_init(void);
#ifdef CONFIG_FB_IT8181
{ "it8181fb", it8181fb_init, it8181fb_setup },
#endif
-diff -Nur linux-2.4.32-rc1/drivers/video/ims332.h linux-2.4.32-rc1.mips/drivers/video/ims332.h
---- linux-2.4.32-rc1/drivers/video/ims332.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/video/ims332.h 2003-12-22 17:02:20.000000000 +0100
+Index: linux-2.4.35.4/drivers/video/ims332.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/video/ims332.h 2007-12-15 05:19:44.994985156 +0100
@@ -0,0 +1,275 @@
+/*
+ * linux/drivers/video/ims332.h
+ IMS332_CTRL_A_BOOT_ENABLE_VTG);
+ printk("\n");
+}
-diff -Nur linux-2.4.32-rc1/drivers/video/Makefile linux-2.4.32-rc1.mips/drivers/video/Makefile
---- linux-2.4.32-rc1/drivers/video/Makefile 2004-02-18 14:36:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/video/Makefile 2005-02-11 22:16:44.000000000 +0100
+Index: linux-2.4.35.4/drivers/video/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/drivers/video/Makefile 2007-12-15 05:19:44.206940249 +0100
++++ linux-2.4.35.4/drivers/video/Makefile 2007-12-15 05:19:44.994985156 +0100
@@ -87,6 +87,7 @@
obj-$(CONFIG_FB_MAXINE) += maxinefb.o
obj-$(CONFIG_FB_TX3912) += tx3912fb.o
obj-$(CONFIG_FB_IT8181) += it8181fb.o fbgen.o
subdir-$(CONFIG_STI_CONSOLE) += sti
-diff -Nur linux-2.4.32-rc1/drivers/video/maxinefb.h linux-2.4.32-rc1.mips/drivers/video/maxinefb.h
---- linux-2.4.32-rc1/drivers/video/maxinefb.h 2003-08-25 13:44:42.000000000 +0200
-+++ linux-2.4.32-rc1.mips/drivers/video/maxinefb.h 1970-01-01 01:00:00.000000000 +0100
+Index: linux-2.4.35.4/drivers/video/maxinefb.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/video/maxinefb.h 2007-12-15 05:19:44.214940704 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
@@ -1,38 +0,0 @@
-/*
- * linux/drivers/video/maxinefb.h
-#define IMS332_REG_COLOR_PALETTE 0x100 /* color palette, 256 entries */
-#define IMS332_REG_CURSOR_COLOR_PALETTE 0x0a1 /* cursor color palette, */
- /* 3 entries */
-diff -Nur linux-2.4.32-rc1/drivers/video/newport_con.c linux-2.4.32-rc1.mips/drivers/video/newport_con.c
---- linux-2.4.32-rc1/drivers/video/newport_con.c 2003-08-25 13:44:42.000000000 +0200
-+++ linux-2.4.32-rc1.mips/drivers/video/newport_con.c 2004-09-23 15:32:29.000000000 +0200
+Index: linux-2.4.35.4/drivers/video/newport_con.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/video/newport_con.c 2007-12-15 05:19:44.222941159 +0100
++++ linux-2.4.35.4/drivers/video/newport_con.c 2007-12-15 05:19:45.002985611 +0100
@@ -22,6 +22,7 @@
#include <linux/module.h>
#include <linux/slab.h>
}
module_init(newport_console_init);
-diff -Nur linux-2.4.32-rc1/drivers/video/tgafb.c linux-2.4.32-rc1.mips/drivers/video/tgafb.c
---- linux-2.4.32-rc1/drivers/video/tgafb.c 2001-11-14 23:52:20.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/video/tgafb.c 2004-10-30 01:15:02.000000000 +0200
+Index: linux-2.4.35.4/drivers/video/tgafb.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/video/tgafb.c 2007-12-15 05:19:44.230941615 +0100
++++ linux-2.4.35.4/drivers/video/tgafb.c 2007-12-15 05:19:45.002985611 +0100
@@ -45,6 +45,15 @@
#include <linux/console.h>
#include <asm/io.h>
return 0;
}
-diff -Nur linux-2.4.32-rc1/drivers/video/tgafb.h linux-2.4.32-rc1.mips/drivers/video/tgafb.h
---- linux-2.4.32-rc1/drivers/video/tgafb.h 2000-04-12 18:47:28.000000000 +0200
-+++ linux-2.4.32-rc1.mips/drivers/video/tgafb.h 2004-10-30 01:15:02.000000000 +0200
+Index: linux-2.4.35.4/drivers/video/tgafb.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/video/tgafb.h 2007-12-15 05:19:44.238942073 +0100
++++ linux-2.4.35.4/drivers/video/tgafb.h 2007-12-15 05:19:45.002985611 +0100
@@ -36,6 +36,7 @@
#define TGA_RASTEROP_REG 0x0034
#define TGA_PIXELSHIFT_REG 0x0038
#define TGA_PIXELMASK_REG 0x005c
#define TGA_CURSOR_BASE_REG 0x0060
#define TGA_HORIZ_REG 0x0064
-diff -Nur linux-2.4.32-rc1/fs/binfmt_elf.c linux-2.4.32-rc1.mips/fs/binfmt_elf.c
---- linux-2.4.32-rc1/fs/binfmt_elf.c 2005-06-01 02:56:56.000000000 +0200
-+++ linux-2.4.32-rc1.mips/fs/binfmt_elf.c 2005-05-23 14:12:31.000000000 +0200
-@@ -660,6 +660,9 @@
+Index: linux-2.4.35.4/fs/binfmt_elf.c
+===================================================================
+--- linux-2.4.35.4.orig/fs/binfmt_elf.c 2007-12-15 05:19:44.246942528 +0100
++++ linux-2.4.35.4/fs/binfmt_elf.c 2007-12-15 05:19:45.006985841 +0100
+@@ -665,6 +665,9 @@
bprm->argc++;
}
}
}
/* Flush all traces of the currently running executable */
-@@ -1211,7 +1214,11 @@
+@@ -1225,7 +1228,11 @@
elf.e_entry = 0;
elf.e_phoff = sizeof(elf);
elf.e_shoff = 0;
elf.e_ehsize = sizeof(elf);
elf.e_phentsize = sizeof(struct elf_phdr);
elf.e_phnum = segs+1; /* Include notes */
-diff -Nur linux-2.4.32-rc1/fs/partitions/sgi.c linux-2.4.32-rc1.mips/fs/partitions/sgi.c
---- linux-2.4.32-rc1/fs/partitions/sgi.c 2001-10-02 05:03:26.000000000 +0200
-+++ linux-2.4.32-rc1.mips/fs/partitions/sgi.c 2004-08-11 22:30:07.000000000 +0200
+Index: linux-2.4.35.4/fs/partitions/sgi.c
+===================================================================
+--- linux-2.4.35.4.orig/fs/partitions/sgi.c 2007-12-15 05:19:44.254942983 +0100
++++ linux-2.4.35.4/fs/partitions/sgi.c 2007-12-15 05:19:45.006985841 +0100
@@ -17,6 +17,11 @@
#include "check.h"
#include "sgi.h"
current_minor++;
}
printk("\n");
-diff -Nur linux-2.4.32-rc1/fs/proc/array.c linux-2.4.32-rc1.mips/fs/proc/array.c
---- linux-2.4.32-rc1/fs/proc/array.c 2005-01-19 15:10:11.000000000 +0100
-+++ linux-2.4.32-rc1.mips/fs/proc/array.c 2004-11-29 18:47:18.000000000 +0100
+Index: linux-2.4.35.4/fs/proc/array.c
+===================================================================
+--- linux-2.4.35.4.orig/fs/proc/array.c 2007-12-15 05:19:44.262943439 +0100
++++ linux-2.4.35.4/fs/proc/array.c 2007-12-15 05:19:45.006985841 +0100
@@ -368,15 +368,15 @@
task->cmin_flt,
task->maj_flt,
return len;
}
-diff -Nur linux-2.4.32-rc1/fs/proc/proc_misc.c linux-2.4.32-rc1.mips/fs/proc/proc_misc.c
---- linux-2.4.32-rc1/fs/proc/proc_misc.c 2004-08-08 01:26:06.000000000 +0200
-+++ linux-2.4.32-rc1.mips/fs/proc/proc_misc.c 2004-08-14 20:39:01.000000000 +0200
+Index: linux-2.4.35.4/fs/proc/proc_misc.c
+===================================================================
+--- linux-2.4.35.4.orig/fs/proc/proc_misc.c 2007-12-15 05:19:44.270943894 +0100
++++ linux-2.4.35.4/fs/proc/proc_misc.c 2007-12-15 05:19:45.006985841 +0100
@@ -308,16 +308,16 @@
{
int i, len = 0;
+ kstat.per_cpu_nice[cpu_logical_map(i)] \
+ kstat.per_cpu_system[cpu_logical_map(i)]));
proc_sprintf(page, &off, &len,
-diff -Nur linux-2.4.32-rc1/include/asm-alpha/param.h linux-2.4.32-rc1.mips/include/asm-alpha/param.h
---- linux-2.4.32-rc1/include/asm-alpha/param.h 2000-11-08 08:37:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-alpha/param.h 2000-11-28 04:59:03.000000000 +0100
+Index: linux-2.4.35.4/include/asm-alpha/param.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-alpha/param.h 2007-12-15 05:19:44.278944352 +0100
++++ linux-2.4.35.4/include/asm-alpha/param.h 2007-12-15 05:19:45.010986067 +0100
@@ -13,6 +13,9 @@
# else
# define HZ 1200
#endif
#define EXEC_PAGESIZE 8192
-diff -Nur linux-2.4.32-rc1/include/asm-i386/param.h linux-2.4.32-rc1.mips/include/asm-i386/param.h
---- linux-2.4.32-rc1/include/asm-i386/param.h 2000-10-27 20:04:43.000000000 +0200
-+++ linux-2.4.32-rc1.mips/include/asm-i386/param.h 2000-11-23 03:00:55.000000000 +0100
+Index: linux-2.4.35.4/include/asm-i386/param.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-i386/param.h 2007-12-15 05:19:44.290945034 +0100
++++ linux-2.4.35.4/include/asm-i386/param.h 2007-12-15 05:19:45.010986067 +0100
@@ -3,6 +3,9 @@
#ifndef HZ
#endif
#define EXEC_PAGESIZE 4096
-diff -Nur linux-2.4.32-rc1/include/asm-ia64/param.h linux-2.4.32-rc1.mips/include/asm-ia64/param.h
---- linux-2.4.32-rc1/include/asm-ia64/param.h 2004-04-14 15:05:40.000000000 +0200
-+++ linux-2.4.32-rc1.mips/include/asm-ia64/param.h 2004-04-16 05:14:20.000000000 +0200
+Index: linux-2.4.35.4/include/asm-ia64/param.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-ia64/param.h 2007-12-15 05:19:44.298945492 +0100
++++ linux-2.4.35.4/include/asm-ia64/param.h 2007-12-15 05:19:45.010986067 +0100
@@ -7,9 +7,15 @@
* Based on <asm-i386/param.h>.
*
#define EXEC_PAGESIZE 65536
#ifndef NGROUPS
-diff -Nur linux-2.4.32-rc1/include/asm-m68k/param.h linux-2.4.32-rc1.mips/include/asm-m68k/param.h
---- linux-2.4.32-rc1/include/asm-m68k/param.h 2001-01-04 22:00:55.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-m68k/param.h 2001-01-11 05:02:45.000000000 +0100
+Index: linux-2.4.35.4/include/asm-m68k/param.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-m68k/param.h 2007-12-15 05:19:44.306945948 +0100
++++ linux-2.4.35.4/include/asm-m68k/param.h 2007-12-15 05:19:45.010986067 +0100
@@ -3,6 +3,9 @@
#ifndef HZ
#endif
#define EXEC_PAGESIZE 8192
-diff -Nur linux-2.4.32-rc1/include/asm-mips/au1000_gpio.h linux-2.4.32-rc1.mips/include/asm-mips/au1000_gpio.h
---- linux-2.4.32-rc1/include/asm-mips/au1000_gpio.h 2002-11-29 00:53:15.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips/au1000_gpio.h 2005-01-30 09:01:28.000000000 +0100
+Index: linux-2.4.35.4/include/asm-mips/au1000_gpio.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/au1000_gpio.h 2007-12-15 05:19:44.314946403 +0100
++++ linux-2.4.35.4/include/asm-mips/au1000_gpio.h 2007-12-15 05:19:45.014986296 +0100
@@ -30,6 +30,13 @@
* 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#endif
#endif
-diff -Nur linux-2.4.32-rc1/include/asm-mips/au1000.h linux-2.4.32-rc1.mips/include/asm-mips/au1000.h
---- linux-2.4.32-rc1/include/asm-mips/au1000.h 2005-01-19 15:10:11.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips/au1000.h 2005-01-30 09:01:28.000000000 +0100
+Index: linux-2.4.35.4/include/asm-mips/au1000.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/au1000.h 2007-12-15 05:19:44.322946858 +0100
++++ linux-2.4.35.4/include/asm-mips/au1000.h 2007-12-15 05:19:45.018986525 +0100
@@ -160,28 +160,356 @@
#define ALLINTS (IE_IRQ0 | IE_IRQ1 | IE_IRQ2 | IE_IRQ3 | IE_IRQ4 | IE_IRQ5)
#endif
+
+#endif
+
-diff -Nur linux-2.4.32-rc1/include/asm-mips/au1000_pcmcia.h linux-2.4.32-rc1.mips/include/asm-mips/au1000_pcmcia.h
---- linux-2.4.32-rc1/include/asm-mips/au1000_pcmcia.h 2005-01-19 15:10:11.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips/au1000_pcmcia.h 2005-01-30 09:01:28.000000000 +0100
+Index: linux-2.4.35.4/include/asm-mips/au1000_pcmcia.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/au1000_pcmcia.h 2007-12-15 05:19:44.330947314 +0100
++++ linux-2.4.35.4/include/asm-mips/au1000_pcmcia.h 2007-12-15 05:19:45.022986751 +0100
@@ -38,16 +38,41 @@
#define AU1X_SOCK0_PHYS_MEM 0xF80000000
#endif
struct pcmcia_state {
-diff -Nur linux-2.4.32-rc1/include/asm-mips/au1100_mmc.h linux-2.4.32-rc1.mips/include/asm-mips/au1100_mmc.h
---- linux-2.4.32-rc1/include/asm-mips/au1100_mmc.h 2005-01-19 15:10:11.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips/au1100_mmc.h 2005-01-30 09:01:28.000000000 +0100
+Index: linux-2.4.35.4/include/asm-mips/au1100_mmc.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/au1100_mmc.h 2007-12-15 05:19:44.338947772 +0100
++++ linux-2.4.35.4/include/asm-mips/au1100_mmc.h 2007-12-15 05:19:45.022986751 +0100
@@ -39,16 +39,22 @@
#define __ASM_AU1100_MMC_H
+
#endif /* __ASM_AU1100_MMC_H */
-diff -Nur linux-2.4.32-rc1/include/asm-mips/au1xxx_dbdma.h linux-2.4.32-rc1.mips/include/asm-mips/au1xxx_dbdma.h
---- linux-2.4.32-rc1/include/asm-mips/au1xxx_dbdma.h 2005-01-19 15:10:11.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips/au1xxx_dbdma.h 2005-01-30 09:01:28.000000000 +0100
+Index: linux-2.4.35.4/include/asm-mips/au1xxx_dbdma.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/au1xxx_dbdma.h 2007-12-15 05:19:44.342947998 +0100
++++ linux-2.4.35.4/include/asm-mips/au1xxx_dbdma.h 2007-12-15 05:19:45.022986751 +0100
@@ -43,7 +43,7 @@
#define DDMA_GLOBAL_BASE 0xb4003000
#define DDMA_CHANNEL_BASE 0xb4002000
+
#endif /* _LANGUAGE_ASSEMBLY */
#endif /* _AU1000_DBDMA_H_ */
-diff -Nur linux-2.4.32-rc1/include/asm-mips/au1xxx_gpio.h linux-2.4.32-rc1.mips/include/asm-mips/au1xxx_gpio.h
---- linux-2.4.32-rc1/include/asm-mips/au1xxx_gpio.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips/au1xxx_gpio.h 2005-01-30 09:01:28.000000000 +0100
+Index: linux-2.4.35.4/include/asm-mips/au1xxx_gpio.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/asm-mips/au1xxx_gpio.h 2007-12-15 05:19:45.022986751 +0100
@@ -0,0 +1,22 @@
+
+
+} AU1X00_GPIO2;
+
+#endif //__AU1XXX_GPIO_H
-diff -Nur linux-2.4.32-rc1/include/asm-mips/au1xxx_psc.h linux-2.4.32-rc1.mips/include/asm-mips/au1xxx_psc.h
---- linux-2.4.32-rc1/include/asm-mips/au1xxx_psc.h 2005-01-19 15:10:11.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips/au1xxx_psc.h 2005-01-30 09:01:28.000000000 +0100
+Index: linux-2.4.35.4/include/asm-mips/au1xxx_psc.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/au1xxx_psc.h 2007-12-15 05:19:44.358948912 +0100
++++ linux-2.4.35.4/include/asm-mips/au1xxx_psc.h 2007-12-15 05:19:45.022986751 +0100
@@ -41,6 +41,11 @@
#define PSC3_BASE_ADDR 0xb0d00000
#endif
#define PSC_I2SCFG_WI (1 << 15)
#define PSC_I2SCFG_DIV_MASK (3 << 13)
-diff -Nur linux-2.4.32-rc1/include/asm-mips/bootinfo.h linux-2.4.32-rc1.mips/include/asm-mips/bootinfo.h
---- linux-2.4.32-rc1/include/asm-mips/bootinfo.h 2004-02-18 14:36:32.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips/bootinfo.h 2005-01-30 09:01:28.000000000 +0100
+Index: linux-2.4.35.4/include/asm-mips/bootinfo.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/bootinfo.h 2007-12-15 05:19:44.366949367 +0100
++++ linux-2.4.35.4/include/asm-mips/bootinfo.h 2007-12-15 05:19:45.026986980 +0100
@@ -180,6 +180,9 @@
#define MACH_MTX1 7 /* 4G MTX-1 Au1500-based board */
#define MACH_CSB250 8 /* Cogent Au1500 */
/*
* Valid machtype for group NEC_VR41XX
-diff -Nur linux-2.4.32-rc1/include/asm-mips/db1200.h linux-2.4.32-rc1.mips/include/asm-mips/db1200.h
---- linux-2.4.32-rc1/include/asm-mips/db1200.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips/db1200.h 2005-01-30 09:02:45.000000000 +0100
+Index: linux-2.4.35.4/include/asm-mips/db1200.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/asm-mips/db1200.h 2007-12-15 05:19:45.026986980 +0100
@@ -0,0 +1,214 @@
+/*
+ * AMD Alchemy DB1200 Referrence Board
+
+#endif /* __ASM_DB1200_H */
+
-diff -Nur linux-2.4.32-rc1/include/asm-mips/db1x00.h linux-2.4.32-rc1.mips/include/asm-mips/db1x00.h
---- linux-2.4.32-rc1/include/asm-mips/db1x00.h 2005-01-19 15:10:11.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips/db1x00.h 2005-01-30 09:06:19.000000000 +0100
+Index: linux-2.4.35.4/include/asm-mips/db1x00.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/db1x00.h 2007-12-15 05:19:44.378950051 +0100
++++ linux-2.4.35.4/include/asm-mips/db1x00.h 2007-12-15 05:19:45.026986980 +0100
@@ -1,5 +1,5 @@
/*
- * AMD Alchemy DB1x00 Reference Boards
#endif /* __ASM_DB1X00_H */
-diff -Nur linux-2.4.32-rc1/include/asm-mips/elf.h linux-2.4.32-rc1.mips/include/asm-mips/elf.h
---- linux-2.4.32-rc1/include/asm-mips/elf.h 2004-02-18 14:36:32.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips/elf.h 2005-04-14 12:41:44.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips/elf.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/elf.h 2007-12-15 05:19:44.386950507 +0100
++++ linux-2.4.35.4/include/asm-mips/elf.h 2007-12-15 05:19:45.026986980 +0100
@@ -66,9 +66,10 @@
#define USE_ELF_CORE_DUMP
#define ELF_EXEC_PAGESIZE PAGE_SIZE
/* This yields a mask that user programs can use to figure out what
instruction set this cpu supports. This could be done in userspace,
-diff -Nur linux-2.4.32-rc1/include/asm-mips/ficmmp.h linux-2.4.32-rc1.mips/include/asm-mips/ficmmp.h
---- linux-2.4.32-rc1/include/asm-mips/ficmmp.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips/ficmmp.h 2005-01-30 09:01:28.000000000 +0100
+Index: linux-2.4.35.4/include/asm-mips/ficmmp.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/asm-mips/ficmmp.h 2007-12-15 05:19:45.026986980 +0100
@@ -0,0 +1,156 @@
+/*
+ * FIC MMP
+
+#endif /* __ASM_FICMMP_H */
+
-diff -Nur linux-2.4.32-rc1/include/asm-mips/hazards.h linux-2.4.32-rc1.mips/include/asm-mips/hazards.h
---- linux-2.4.32-rc1/include/asm-mips/hazards.h 2004-02-18 14:36:32.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips/hazards.h 2005-06-06 16:46:22.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips/hazards.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/hazards.h 2007-12-15 05:19:44.398951191 +0100
++++ linux-2.4.35.4/include/asm-mips/hazards.h 2007-12-15 05:19:45.030987207 +0100
@@ -3,7 +3,7 @@
* License. See the file "COPYING" in the main directory of this archive
* for more details.
+#endif /* __ASSEMBLY__ */
+
#endif /* _ASM_HAZARDS_H */
-diff -Nur linux-2.4.32-rc1/include/asm-mips/ide.h linux-2.4.32-rc1.mips/include/asm-mips/ide.h
---- linux-2.4.32-rc1/include/asm-mips/ide.h 2003-08-25 13:44:43.000000000 +0200
-+++ linux-2.4.32-rc1.mips/include/asm-mips/ide.h 2005-04-19 14:26:53.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips/ide.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/ide.h 2007-12-15 05:19:44.406951647 +0100
++++ linux-2.4.35.4/include/asm-mips/ide.h 2007-12-15 05:19:45.030987207 +0100
@@ -32,12 +32,12 @@
extern struct ide_ops *ide_ops;
#endif /* __KERNEL__ */
-diff -Nur linux-2.4.32-rc1/include/asm-mips/io.h linux-2.4.32-rc1.mips/include/asm-mips/io.h
---- linux-2.4.32-rc1/include/asm-mips/io.h 2003-08-25 13:44:43.000000000 +0200
-+++ linux-2.4.32-rc1.mips/include/asm-mips/io.h 2005-04-19 14:24:16.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips/io.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/io.h 2007-12-15 05:19:44.414952102 +0100
++++ linux-2.4.35.4/include/asm-mips/io.h 2007-12-15 05:19:45.030987207 +0100
@@ -392,7 +392,8 @@
return __ioswab32(__val);
}
{
while (count--) {
outl(*(u32 *)addr, port);
-diff -Nur linux-2.4.32-rc1/include/asm-mips/mipsregs.h linux-2.4.32-rc1.mips/include/asm-mips/mipsregs.h
---- linux-2.4.32-rc1/include/asm-mips/mipsregs.h 2005-01-19 15:10:12.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips/mipsregs.h 2005-02-06 22:24:22.000000000 +0100
+Index: linux-2.4.35.4/include/asm-mips/mipsregs.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/mipsregs.h 2007-12-15 05:19:44.422952557 +0100
++++ linux-2.4.35.4/include/asm-mips/mipsregs.h 2007-12-15 05:19:45.038987665 +0100
@@ -757,10 +757,18 @@
#define read_c0_config1() __read_32bit_c0_register($16, 1)
#define read_c0_config2() __read_32bit_c0_register($16, 2)
}
/*
-diff -Nur linux-2.4.32-rc1/include/asm-mips/mmu_context.h linux-2.4.32-rc1.mips/include/asm-mips/mmu_context.h
---- linux-2.4.32-rc1/include/asm-mips/mmu_context.h 2005-01-19 15:10:12.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips/mmu_context.h 2004-11-22 14:38:29.000000000 +0100
+Index: linux-2.4.35.4/include/asm-mips/mmu_context.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/mmu_context.h 2007-12-15 05:19:44.430953013 +0100
++++ linux-2.4.35.4/include/asm-mips/mmu_context.h 2007-12-15 05:19:45.038987665 +0100
@@ -27,7 +27,7 @@
#define TLBMISS_HANDLER_SETUP_PGD(pgd) \
pgd_current[smp_processor_id()] = (unsigned long)(pgd)
TLBMISS_HANDLER_SETUP_PGD(swapper_pg_dir)
extern unsigned long pgd_current[];
-diff -Nur linux-2.4.32-rc1/include/asm-mips/pb1100.h linux-2.4.32-rc1.mips/include/asm-mips/pb1100.h
---- linux-2.4.32-rc1/include/asm-mips/pb1100.h 2003-08-25 13:44:44.000000000 +0200
-+++ linux-2.4.32-rc1.mips/include/asm-mips/pb1100.h 2005-01-30 09:10:29.000000000 +0100
+Index: linux-2.4.35.4/include/asm-mips/pb1100.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/pb1100.h 2007-12-15 05:19:44.438953471 +0100
++++ linux-2.4.35.4/include/asm-mips/pb1100.h 2007-12-15 05:19:45.038987665 +0100
@@ -1,5 +1,5 @@
/*
- * Alchemy Semi PB1100 Referrence Board
#endif /* __ASM_PB1100_H */
+
-diff -Nur linux-2.4.32-rc1/include/asm-mips/pb1200.h linux-2.4.32-rc1.mips/include/asm-mips/pb1200.h
---- linux-2.4.32-rc1/include/asm-mips/pb1200.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips/pb1200.h 2005-01-30 09:01:28.000000000 +0100
+Index: linux-2.4.35.4/include/asm-mips/pb1200.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/asm-mips/pb1200.h 2007-12-15 05:19:45.038987665 +0100
@@ -0,0 +1,244 @@
+/*
+ * AMD Alchemy PB1200 Referrence Board
+
+#endif /* __ASM_PB1200_H */
+
-diff -Nur linux-2.4.32-rc1/include/asm-mips/pb1550.h linux-2.4.32-rc1.mips/include/asm-mips/pb1550.h
---- linux-2.4.32-rc1/include/asm-mips/pb1550.h 2005-01-19 15:10:12.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips/pb1550.h 2005-01-30 09:01:28.000000000 +0100
+Index: linux-2.4.35.4/include/asm-mips/pb1550.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/pb1550.h 2007-12-15 05:19:44.450954152 +0100
++++ linux-2.4.35.4/include/asm-mips/pb1550.h 2007-12-15 05:19:45.042987891 +0100
@@ -30,13 +30,11 @@
#define DBDMA_AC97_TX_CHAN DSCR_CMD0_PSC1_TX
+#define AU1XXX_SMC91111_IRQ AU1000_GPIO_3
#endif /* __ASM_PB1550_H */
-diff -Nur linux-2.4.32-rc1/include/asm-mips/reg.h linux-2.4.32-rc1.mips/include/asm-mips/reg.h
---- linux-2.4.32-rc1/include/asm-mips/reg.h 2002-08-03 02:39:45.000000000 +0200
-+++ linux-2.4.32-rc1.mips/include/asm-mips/reg.h 2005-04-14 12:41:44.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips/reg.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/reg.h 2007-12-15 05:19:44.458954611 +0100
++++ linux-2.4.35.4/include/asm-mips/reg.h 2007-12-15 05:19:45.042987891 +0100
@@ -45,6 +45,9 @@
/*
* k0/k1 unsaved
#define EF_SIZE 180 /* size in bytes */
-diff -Nur linux-2.4.32-rc1/include/asm-mips/sgi/hpc3.h linux-2.4.32-rc1.mips/include/asm-mips/sgi/hpc3.h
---- linux-2.4.32-rc1/include/asm-mips/sgi/hpc3.h 2003-08-25 13:44:44.000000000 +0200
-+++ linux-2.4.32-rc1.mips/include/asm-mips/sgi/hpc3.h 2005-09-23 16:35:27.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips/sgi/hpc3.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/sgi/hpc3.h 2007-12-15 05:19:44.466955066 +0100
++++ linux-2.4.35.4/include/asm-mips/sgi/hpc3.h 2007-12-15 05:19:45.042987891 +0100
@@ -128,26 +128,26 @@
volatile u32 rx_gfptr; /* current GIO fifo ptr */
volatile u32 rx_dfptr; /* current device fifo ptr */
* It is possible to have two HPC3's within the address space on
* one machine, though only having one is more likely on an Indy.
*/
-diff -Nur linux-2.4.32-rc1/include/asm-mips/tx4927/tx4927.h linux-2.4.32-rc1.mips/include/asm-mips/tx4927/tx4927.h
---- linux-2.4.32-rc1/include/asm-mips/tx4927/tx4927.h 2003-08-25 13:44:44.000000000 +0200
-+++ linux-2.4.32-rc1.mips/include/asm-mips/tx4927/tx4927.h 2004-11-22 19:02:10.000000000 +0100
+Index: linux-2.4.35.4/include/asm-mips/tx4927/tx4927.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/tx4927/tx4927.h 2007-12-15 05:19:44.474955521 +0100
++++ linux-2.4.35.4/include/asm-mips/tx4927/tx4927.h 2007-12-15 05:19:45.042987891 +0100
@@ -88,8 +88,8 @@
#define TX4927_ACLC_ACSEMAPH 0xf720
#define TX4927_ACLC_ACGPIDAT 0xf740
#define TX4927_ACLC_ACGPODAT 0xf744
-diff -Nur linux-2.4.32-rc1/include/asm-mips/unistd.h linux-2.4.32-rc1.mips/include/asm-mips/unistd.h
---- linux-2.4.32-rc1/include/asm-mips/unistd.h 2005-01-19 15:10:12.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips/unistd.h 2004-11-24 21:30:06.000000000 +0100
+Index: linux-2.4.35.4/include/asm-mips/unistd.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/unistd.h 2007-12-15 05:19:44.482955977 +0100
++++ linux-2.4.35.4/include/asm-mips/unistd.h 2007-12-15 05:19:45.046988120 +0100
@@ -760,7 +760,7 @@
if (__a3 == 0) \
return (type) __v0; \
}
#endif /* (_MIPS_SIM == _MIPS_SIM_NABI32) || (_MIPS_SIM == _MIPS_SIM_ABI64) */
-diff -Nur linux-2.4.32-rc1/include/asm-mips64/checksum.h linux-2.4.32-rc1.mips/include/asm-mips64/checksum.h
---- linux-2.4.32-rc1/include/asm-mips64/checksum.h 2005-01-19 15:10:12.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips64/checksum.h 2005-09-20 12:58:50.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips64/checksum.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips64/checksum.h 2007-12-15 05:19:44.490956432 +0100
++++ linux-2.4.35.4/include/asm-mips64/checksum.h 2007-12-15 05:19:45.046988120 +0100
@@ -144,7 +144,7 @@
"daddu\t%0, %4\n\t"
"dsll32\t$1, %0, 0\n\t"
".set\tat"
: "=&r" (sum)
: "0" (daddr), "r"(saddr),
-diff -Nur linux-2.4.32-rc1/include/asm-mips64/elf.h linux-2.4.32-rc1.mips/include/asm-mips64/elf.h
---- linux-2.4.32-rc1/include/asm-mips64/elf.h 2004-02-18 14:36:32.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips64/elf.h 2005-04-14 12:41:44.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips64/elf.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips64/elf.h 2007-12-15 05:19:44.498956890 +0100
++++ linux-2.4.35.4/include/asm-mips64/elf.h 2007-12-15 05:19:45.046988120 +0100
@@ -64,9 +64,10 @@
#define USE_ELF_CORE_DUMP
#define ELF_EXEC_PAGESIZE PAGE_SIZE
/* This yields a mask that user programs can use to figure out what
instruction set this cpu supports. This could be done in userspace,
-diff -Nur linux-2.4.32-rc1/include/asm-mips64/hazards.h linux-2.4.32-rc1.mips/include/asm-mips64/hazards.h
---- linux-2.4.32-rc1/include/asm-mips64/hazards.h 2004-02-18 14:36:32.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips64/hazards.h 2005-06-06 16:46:22.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips64/hazards.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips64/hazards.h 2007-12-15 05:19:44.506957346 +0100
++++ linux-2.4.35.4/include/asm-mips64/hazards.h 2007-12-15 05:19:45.046988120 +0100
@@ -3,7 +3,7 @@
* License. See the file "COPYING" in the main directory of this archive
* for more details.
+#endif /* __ASSEMBLY__ */
+
#endif /* _ASM_HAZARDS_H */
-diff -Nur linux-2.4.32-rc1/include/asm-mips64/ide.h linux-2.4.32-rc1.mips/include/asm-mips64/ide.h
---- linux-2.4.32-rc1/include/asm-mips64/ide.h 2003-08-25 13:44:44.000000000 +0200
-+++ linux-2.4.32-rc1.mips/include/asm-mips64/ide.h 2005-04-19 14:26:53.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips64/ide.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips64/ide.h 2007-12-15 05:19:44.514957801 +0100
++++ linux-2.4.35.4/include/asm-mips64/ide.h 2007-12-15 05:19:45.050988346 +0100
@@ -32,12 +32,12 @@
extern struct ide_ops *ide_ops;
#endif /* __KERNEL__ */
-diff -Nur linux-2.4.32-rc1/include/asm-mips64/io.h linux-2.4.32-rc1.mips/include/asm-mips64/io.h
---- linux-2.4.32-rc1/include/asm-mips64/io.h 2004-02-18 14:36:32.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips64/io.h 2005-04-19 14:24:53.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips64/io.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips64/io.h 2007-12-15 05:19:44.522958256 +0100
++++ linux-2.4.35.4/include/asm-mips64/io.h 2007-12-15 05:19:45.050988346 +0100
@@ -414,7 +414,8 @@
return __ioswab32(__val);
}
{
while (count--) {
outl(*(u32 *)addr, port);
-diff -Nur linux-2.4.32-rc1/include/asm-mips64/mipsregs.h linux-2.4.32-rc1.mips/include/asm-mips64/mipsregs.h
---- linux-2.4.32-rc1/include/asm-mips64/mipsregs.h 2005-01-19 15:10:12.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips64/mipsregs.h 2005-02-06 22:24:22.000000000 +0100
+Index: linux-2.4.35.4/include/asm-mips64/mipsregs.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips64/mipsregs.h 2007-12-15 05:19:44.530958712 +0100
++++ linux-2.4.35.4/include/asm-mips64/mipsregs.h 2007-12-15 05:19:45.050988346 +0100
@@ -757,10 +757,18 @@
#define read_c0_config1() __read_32bit_c0_register($16, 1)
#define read_c0_config2() __read_32bit_c0_register($16, 2)
}
/*
-diff -Nur linux-2.4.32-rc1/include/asm-mips64/reg.h linux-2.4.32-rc1.mips/include/asm-mips64/reg.h
---- linux-2.4.32-rc1/include/asm-mips64/reg.h 2003-08-25 13:44:44.000000000 +0200
-+++ linux-2.4.32-rc1.mips/include/asm-mips64/reg.h 2005-04-14 12:41:44.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips64/reg.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips64/reg.h 2007-12-15 05:19:44.538959170 +0100
++++ linux-2.4.35.4/include/asm-mips64/reg.h 2007-12-15 05:19:45.050988346 +0100
@@ -46,6 +46,9 @@
/*
* k0/k1 unsaved
#define EF_REG28 28
#define EF_REG29 29
#define EF_REG30 30
-diff -Nur linux-2.4.32-rc1/include/asm-mips64/sgi/hpc3.h linux-2.4.32-rc1.mips/include/asm-mips64/sgi/hpc3.h
---- linux-2.4.32-rc1/include/asm-mips64/sgi/hpc3.h 2003-08-25 13:44:44.000000000 +0200
-+++ linux-2.4.32-rc1.mips/include/asm-mips64/sgi/hpc3.h 2005-09-23 16:35:27.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips64/sgi/hpc3.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips64/sgi/hpc3.h 2007-12-15 05:19:44.546959625 +0100
++++ linux-2.4.35.4/include/asm-mips64/sgi/hpc3.h 2007-12-15 05:19:45.050988346 +0100
@@ -128,26 +128,26 @@
volatile u32 rx_gfptr; /* current GIO fifo ptr */
volatile u32 rx_dfptr; /* current device fifo ptr */
* It is possible to have two HPC3's within the address space on
* one machine, though only having one is more likely on an Indy.
*/
-diff -Nur linux-2.4.32-rc1/include/asm-mips64/sn/nmi.h linux-2.4.32-rc1.mips/include/asm-mips64/sn/nmi.h
---- linux-2.4.32-rc1/include/asm-mips64/sn/nmi.h 2002-11-29 00:53:15.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips64/sn/nmi.h 2002-08-06 01:53:40.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips64/sn/nmi.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips64/sn/nmi.h 2007-12-15 05:19:44.554960080 +0100
++++ linux-2.4.35.4/include/asm-mips64/sn/nmi.h 2007-12-15 05:19:45.054988575 +0100
@@ -8,7 +8,7 @@
#ifndef __ASM_SN_NMI_H
#define __ASM_SN_NMI_H
#include <asm/sn/addrs.h>
-diff -Nur linux-2.4.32-rc1/include/asm-mips64/unistd.h linux-2.4.32-rc1.mips/include/asm-mips64/unistd.h
---- linux-2.4.32-rc1/include/asm-mips64/unistd.h 2005-01-19 15:10:12.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips64/unistd.h 2004-11-24 21:30:06.000000000 +0100
+Index: linux-2.4.35.4/include/asm-mips64/unistd.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips64/unistd.h 2007-12-15 05:19:44.562960536 +0100
++++ linux-2.4.35.4/include/asm-mips64/unistd.h 2007-12-15 05:19:45.054988575 +0100
@@ -760,7 +760,7 @@
if (__a3 == 0) \
return (type) __v0; \
}
#endif /* (_MIPS_SIM == _MIPS_SIM_NABI32) || (_MIPS_SIM == _MIPS_SIM_ABI64) */
-diff -Nur linux-2.4.32-rc1/include/asm-ppc/param.h linux-2.4.32-rc1.mips/include/asm-ppc/param.h
---- linux-2.4.32-rc1/include/asm-ppc/param.h 2003-06-13 16:51:38.000000000 +0200
-+++ linux-2.4.32-rc1.mips/include/asm-ppc/param.h 2003-07-05 05:23:46.000000000 +0200
+Index: linux-2.4.35.4/include/asm-ppc/param.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-ppc/param.h 2007-12-15 05:19:44.570960991 +0100
++++ linux-2.4.35.4/include/asm-ppc/param.h 2007-12-15 05:19:45.054988575 +0100
@@ -3,6 +3,9 @@
#ifndef HZ
#endif
#define EXEC_PAGESIZE 4096
-diff -Nur linux-2.4.32-rc1/include/asm-s390/param.h linux-2.4.32-rc1.mips/include/asm-s390/param.h
---- linux-2.4.32-rc1/include/asm-s390/param.h 2001-02-13 23:13:44.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-s390/param.h 2001-03-09 21:34:48.000000000 +0100
+Index: linux-2.4.35.4/include/asm-s390/param.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-s390/param.h 2007-12-15 05:19:44.578961449 +0100
++++ linux-2.4.35.4/include/asm-s390/param.h 2007-12-15 05:19:45.054988575 +0100
@@ -11,6 +11,9 @@
#ifndef HZ
#endif
#define EXEC_PAGESIZE 4096
-diff -Nur linux-2.4.32-rc1/include/asm-sh/param.h linux-2.4.32-rc1.mips/include/asm-sh/param.h
---- linux-2.4.32-rc1/include/asm-sh/param.h 2001-01-04 22:19:13.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-sh/param.h 2001-01-11 05:02:45.000000000 +0100
+Index: linux-2.4.35.4/include/asm-sh/param.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-sh/param.h 2007-12-15 05:19:44.590962131 +0100
++++ linux-2.4.35.4/include/asm-sh/param.h 2007-12-15 05:19:45.054988575 +0100
@@ -3,6 +3,9 @@
#ifndef HZ
#endif
#define EXEC_PAGESIZE 4096
-diff -Nur linux-2.4.32-rc1/include/asm-sparc/param.h linux-2.4.32-rc1.mips/include/asm-sparc/param.h
---- linux-2.4.32-rc1/include/asm-sparc/param.h 2000-10-30 23:34:12.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-sparc/param.h 2000-11-23 03:00:56.000000000 +0100
+Index: linux-2.4.35.4/include/asm-sparc/param.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-sparc/param.h 2007-12-15 05:19:44.598962589 +0100
++++ linux-2.4.35.4/include/asm-sparc/param.h 2007-12-15 05:19:45.058988805 +0100
@@ -4,6 +4,9 @@
#ifndef HZ
#endif
#define EXEC_PAGESIZE 8192 /* Thanks for sun4's we carry baggage... */
-diff -Nur linux-2.4.32-rc1/include/asm-sparc64/param.h linux-2.4.32-rc1.mips/include/asm-sparc64/param.h
---- linux-2.4.32-rc1/include/asm-sparc64/param.h 2000-10-30 23:34:12.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-sparc64/param.h 2000-11-23 03:00:56.000000000 +0100
+Index: linux-2.4.35.4/include/asm-sparc64/param.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-sparc64/param.h 2007-12-15 05:19:44.606963045 +0100
++++ linux-2.4.35.4/include/asm-sparc64/param.h 2007-12-15 05:19:45.058988805 +0100
@@ -4,6 +4,9 @@
#ifndef HZ
#endif
#define EXEC_PAGESIZE 8192 /* Thanks for sun4's we carry baggage... */
-diff -Nur linux-2.4.32-rc1/include/linux/i2c-algo-au1550.h linux-2.4.32-rc1.mips/include/linux/i2c-algo-au1550.h
---- linux-2.4.32-rc1/include/linux/i2c-algo-au1550.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/linux/i2c-algo-au1550.h 2004-07-07 02:38:02.000000000 +0200
+Index: linux-2.4.35.4/include/linux/i2c-algo-au1550.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/i2c-algo-au1550.h 2007-12-15 05:19:45.058988805 +0100
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2004 Embedded Edge, LLC <dan@embeddededge.com>
+int i2c_au1550_del_bus(struct i2c_adapter *);
+
+#endif /* I2C_ALGO_AU1550_H */
-diff -Nur linux-2.4.32-rc1/include/linux/i2c-id.h linux-2.4.32-rc1.mips/include/linux/i2c-id.h
---- linux-2.4.32-rc1/include/linux/i2c-id.h 2004-02-18 14:36:32.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/linux/i2c-id.h 2004-07-07 02:38:02.000000000 +0200
-@@ -156,6 +156,8 @@
-
- #define I2C_ALGO_SGI 0x130000 /* SGI algorithm */
+Index: linux-2.4.35.4/include/linux/i2c-id.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/i2c-id.h 2007-12-15 05:19:44.618963729 +0100
++++ linux-2.4.35.4/include/linux/i2c-id.h 2007-12-15 05:19:45.062989031 +0100
+@@ -155,6 +155,8 @@
+ #define I2C_ALGO_SIBYTE 0x150000 /* Broadcom SiByte SOCs */
+ #define I2C_ALGO_SGI 0x160000 /* SGI algorithm */
+#define I2C_ALGO_AU1550 0x140000 /* Alchemy Au1550 PSC */
+
#define I2C_ALGO_EXP 0x800000 /* experimental */
#define I2C_ALGO_MASK 0xff0000 /* Mask for algorithms */
-@@ -204,6 +206,9 @@
+@@ -203,6 +205,9 @@
#define I2C_HW_SGI_VINO 0x00
#define I2C_HW_SGI_MACE 0x01
/* --- SMBus only adapters */
#define I2C_HW_SMBUS_PIIX4 0x00
#define I2C_HW_SMBUS_ALI15X3 0x01
-diff -Nur linux-2.4.32-rc1/include/linux/sched.h linux-2.4.32-rc1.mips/include/linux/sched.h
---- linux-2.4.32-rc1/include/linux/sched.h 2005-01-19 15:10:12.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/linux/sched.h 2004-11-29 18:47:18.000000000 +0100
+Index: linux-2.4.35.4/include/linux/sched.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/sched.h 2007-12-15 05:19:44.626964184 +0100
++++ linux-2.4.35.4/include/linux/sched.h 2007-12-15 05:19:45.066989260 +0100
@@ -617,6 +617,10 @@
extern int in_group_p(gid_t);
extern int in_egroup_p(gid_t);
extern void proc_caches_init(void);
extern void flush_signals(struct task_struct *);
extern void flush_signal_handlers(struct task_struct *);
-diff -Nur linux-2.4.32-rc1/include/linux/serial.h linux-2.4.32-rc1.mips/include/linux/serial.h
---- linux-2.4.32-rc1/include/linux/serial.h 2002-08-03 02:39:45.000000000 +0200
-+++ linux-2.4.32-rc1.mips/include/linux/serial.h 2004-07-31 02:17:57.000000000 +0200
+Index: linux-2.4.35.4/include/linux/serial.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/serial.h 2007-12-15 05:19:44.634964640 +0100
++++ linux-2.4.35.4/include/linux/serial.h 2007-12-15 05:19:45.066989260 +0100
@@ -75,7 +75,8 @@
#define PORT_16654 11
#define PORT_16850 12
#define SERIAL_IO_PORT 0
#define SERIAL_IO_HUB6 1
-diff -Nur linux-2.4.32-rc1/include/linux/swap.h linux-2.4.32-rc1.mips/include/linux/swap.h
---- linux-2.4.32-rc1/include/linux/swap.h 2005-01-19 15:10:12.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/linux/swap.h 2004-11-29 18:47:18.000000000 +0100
+Index: linux-2.4.35.4/include/linux/swap.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/swap.h 2007-12-15 05:19:44.642965095 +0100
++++ linux-2.4.35.4/include/linux/swap.h 2007-12-15 05:19:45.066989260 +0100
@@ -1,6 +1,12 @@
#ifndef _LINUX_SWAP_H
#define _LINUX_SWAP_H
/*
* Max bad pages in the new format..
*/
-diff -Nur linux-2.4.32-rc1/include/video/newport.h linux-2.4.32-rc1.mips/include/video/newport.h
---- linux-2.4.32-rc1/include/video/newport.h 2001-04-12 21:20:31.000000000 +0200
-+++ linux-2.4.32-rc1.mips/include/video/newport.h 2004-09-23 15:32:29.000000000 +0200
+Index: linux-2.4.35.4/include/video/newport.h
+===================================================================
+--- linux-2.4.35.4.orig/include/video/newport.h 2007-12-15 05:19:44.650965550 +0100
++++ linux-2.4.35.4/include/video/newport.h 2007-12-15 05:19:45.066989260 +0100
@@ -291,8 +291,6 @@
unsigned int _unused2[0x1ef];
struct newport_cregs cgo;
while ((rex->set.dcbdata0.bybytes.b3 & 3) != XM9_FIFO_EMPTY)
;
-diff -Nur linux-2.4.32-rc1/init/main.c linux-2.4.32-rc1.mips/init/main.c
---- linux-2.4.32-rc1/init/main.c 2004-11-17 12:54:22.000000000 +0100
-+++ linux-2.4.32-rc1.mips/init/main.c 2004-11-19 01:28:52.000000000 +0100
+Index: linux-2.4.35.4/init/main.c
+===================================================================
+--- linux-2.4.35.4.orig/init/main.c 2007-12-15 05:19:44.662966235 +0100
++++ linux-2.4.35.4/init/main.c 2007-12-15 05:19:45.070989486 +0100
@@ -296,7 +296,6 @@
unsigned long wait_init_idle;
-diff -Nur linux-2.4.32-rc1/kernel/exit.c linux-2.4.32-rc1.mips/kernel/exit.c
---- linux-2.4.32-rc1/kernel/exit.c 2002-11-29 00:53:15.000000000 +0100
-+++ linux-2.4.32-rc1.mips/kernel/exit.c 2003-01-11 18:53:18.000000000 +0100
+Index: linux-2.4.35.4/kernel/exit.c
+===================================================================
+--- linux-2.4.35.4.orig/kernel/exit.c 2007-12-15 05:19:44.666966464 +0100
++++ linux-2.4.35.4/kernel/exit.c 2007-12-15 05:19:45.070989486 +0100
@@ -26,7 +26,7 @@
int getrusage(struct task_struct *, int, struct rusage *);
{
if (p != current) {
#ifdef CONFIG_SMP
-diff -Nur linux-2.4.32-rc1/kernel/signal.c linux-2.4.32-rc1.mips/kernel/signal.c
---- linux-2.4.32-rc1/kernel/signal.c 2004-02-18 14:36:32.000000000 +0100
-+++ linux-2.4.32-rc1.mips/kernel/signal.c 2004-01-20 16:10:34.000000000 +0100
+Index: linux-2.4.35.4/kernel/signal.c
+===================================================================
+--- linux-2.4.35.4.orig/kernel/signal.c 2007-12-15 05:19:44.674966919 +0100
++++ linux-2.4.35.4/kernel/signal.c 2007-12-15 05:19:45.070989486 +0100
@@ -14,6 +14,7 @@
#include <linux/init.h>
#include <linux/sched.h>
status = tsk->exit_code & 0x7f;
why = SI_KERNEL; /* shouldn't happen */
-diff -Nur linux-2.4.32-rc1/kernel/sys.c linux-2.4.32-rc1.mips/kernel/sys.c
---- linux-2.4.32-rc1/kernel/sys.c 2003-11-28 19:26:21.000000000 +0100
-+++ linux-2.4.32-rc1.mips/kernel/sys.c 2003-11-17 02:07:47.000000000 +0100
+Index: linux-2.4.35.4/kernel/sys.c
+===================================================================
+--- linux-2.4.35.4.orig/kernel/sys.c 2007-12-15 05:19:44.682967375 +0100
++++ linux-2.4.35.4/kernel/sys.c 2007-12-15 05:19:45.074989715 +0100
@@ -801,16 +801,23 @@
asmlinkage long sys_times(struct tms * tbuf)
}
/*
-diff -Nur linux-2.4.32-rc1/lib/Makefile linux-2.4.32-rc1.mips/lib/Makefile
---- linux-2.4.32-rc1/lib/Makefile 2004-04-14 15:05:40.000000000 +0200
-+++ linux-2.4.32-rc1.mips/lib/Makefile 2004-04-16 05:14:21.000000000 +0200
+Index: linux-2.4.35.4/lib/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/lib/Makefile 2007-12-15 05:19:44.694968059 +0100
++++ linux-2.4.35.4/lib/Makefile 2007-12-15 05:19:45.074989715 +0100
@@ -27,6 +27,7 @@
subdir-$(CONFIG_ZLIB_INFLATE) += zlib_inflate
subdir-$(CONFIG_ZLIB_DEFLATE) += zlib_deflate
include $(TOPDIR)/drivers/net/Makefile.lib
include $(TOPDIR)/drivers/usb/Makefile.lib
include $(TOPDIR)/drivers/bluetooth/Makefile.lib
-diff -Nur linux-2.4.32-rc1/Makefile linux-2.4.32-rc1.mips/Makefile
---- linux-2.4.32-rc1/Makefile 2005-10-24 11:33:30.000000000 +0200
-+++ linux-2.4.32-rc1.mips/Makefile 2005-09-23 22:41:15.000000000 +0200
-@@ -462,10 +462,11 @@
+Index: linux-2.4.35.4/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/Makefile 2007-12-15 05:19:44.702968514 +0100
++++ linux-2.4.35.4/Makefile 2007-12-15 05:19:45.074989715 +0100
+@@ -469,10 +469,11 @@
$(MAKE) -C Documentation/DocBook mrproper
distclean: mrproper
backup: mrproper
cd .. && tar cf - linux/ | gzip -9 > backup.gz
-@@ -492,7 +493,7 @@
+@@ -499,7 +500,7 @@
$(MAKE) -C Documentation/DocBook man
sums:
-diff --new-file -urp linux-2.4.32/fs/Config.in linux-2.4.32-squashfs3.0/fs/Config.in
---- linux-2.4.32/fs/Config.in 2004-11-17 11:54:21.000000000 +0000
-+++ linux-2.4.32-squashfs3.0/fs/Config.in 2006-03-07 21:12:36.000000000 +0000
-@@ -51,6 +51,14 @@ if [ "$CONFIG_JFFS2_FS" = "y" -o "$CONFI
+Index: linux-2.4.35.4/fs/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/fs/Config.in 2007-12-15 05:19:42.758857728 +0100
++++ linux-2.4.35.4/fs/Config.in 2007-12-15 05:19:48.635192599 +0100
+@@ -51,6 +51,14 @@
int 'JFFS2 debugging verbosity (0 = quiet, 2 = noisy)' CONFIG_JFFS2_FS_DEBUG 0
fi
tristate 'Compressed ROM file system support' CONFIG_CRAMFS
bool 'Virtual memory file system support (former shm fs)' CONFIG_TMPFS
define_bool CONFIG_RAMFS y
-diff --new-file -urp linux-2.4.32/fs/Makefile linux-2.4.32-squashfs3.0/fs/Makefile
---- linux-2.4.32/fs/Makefile 2004-02-18 13:36:31.000000000 +0000
-+++ linux-2.4.32-squashfs3.0/fs/Makefile 2006-03-07 21:12:36.000000000 +0000
-@@ -65,6 +65,7 @@ subdir-$(CONFIG_REISERFS_FS) += reiserfs
+Index: linux-2.4.35.4/fs/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/fs/Makefile 2007-12-15 05:19:42.766858183 +0100
++++ linux-2.4.35.4/fs/Makefile 2007-12-15 05:19:48.639192828 +0100
+@@ -65,6 +65,7 @@
subdir-$(CONFIG_DEVPTS_FS) += devpts
subdir-$(CONFIG_SUN_OPENPROMFS) += openpromfs
subdir-$(CONFIG_BEFS_FS) += befs
subdir-$(CONFIG_JFS_FS) += jfs
subdir-$(CONFIG_XFS_FS) += xfs
-diff --new-file -urp linux-2.4.32/fs/squashfs/inode.c linux-2.4.32-squashfs3.0/fs/squashfs/inode.c
---- linux-2.4.32/fs/squashfs/inode.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-squashfs3.0/fs/squashfs/inode.c 2006-03-07 21:12:36.000000000 +0000
+Index: linux-2.4.35.4/fs/squashfs/inode.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/squashfs/inode.c 2007-12-15 05:19:48.647193283 +0100
@@ -0,0 +1,2028 @@
+/*
+ * Squashfs - a compressed read only filesystem for Linux
+MODULE_DESCRIPTION("squashfs, a compressed read-only filesystem");
+MODULE_AUTHOR("Phillip Lougher <phillip@lougher.org.uk>");
+MODULE_LICENSE("GPL");
-diff --new-file -urp linux-2.4.32/fs/squashfs/Makefile linux-2.4.32-squashfs3.0/fs/squashfs/Makefile
---- linux-2.4.32/fs/squashfs/Makefile 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-squashfs3.0/fs/squashfs/Makefile 2006-03-07 21:12:36.000000000 +0000
+Index: linux-2.4.35.4/fs/squashfs/Makefile
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/squashfs/Makefile 2007-12-15 05:19:48.651193513 +0100
@@ -0,0 +1,11 @@
+#
+# Makefile for the linux squashfs routines.
+obj-m := $(O_TARGET)
+
+include $(TOPDIR)/Rules.make
-diff --new-file -urp linux-2.4.32/fs/squashfs/squashfs2_0.c linux-2.4.32-squashfs3.0/fs/squashfs/squashfs2_0.c
---- linux-2.4.32/fs/squashfs/squashfs2_0.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-squashfs3.0/fs/squashfs/squashfs2_0.c 2006-03-07 21:12:36.000000000 +0000
+Index: linux-2.4.35.4/fs/squashfs/squashfs2_0.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/squashfs/squashfs2_0.c 2007-12-15 05:19:48.655193739 +0100
@@ -0,0 +1,751 @@
+/*
+ * Squashfs - a compressed read only filesystem for Linux
+
+ return 1;
+}
-diff --new-file -urp linux-2.4.32/fs/squashfs/squashfs.h linux-2.4.32-squashfs3.0/fs/squashfs/squashfs.h
---- linux-2.4.32/fs/squashfs/squashfs.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-squashfs3.0/fs/squashfs/squashfs.h 2006-03-07 21:12:36.000000000 +0000
+Index: linux-2.4.35.4/fs/squashfs/squashfs.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/squashfs/squashfs.h 2007-12-15 05:19:48.659193968 +0100
@@ -0,0 +1,85 @@
+/*
+ * Squashfs - a compressed read only filesystem for Linux
+ return 0;
+}
+#endif
-diff --new-file -urp linux-2.4.32/include/linux/fs.h linux-2.4.32-squashfs3.0/include/linux/fs.h
---- linux-2.4.32/include/linux/fs.h 2005-04-04 02:42:20.000000000 +0100
-+++ linux-2.4.32-squashfs3.0/include/linux/fs.h 2006-03-07 21:12:36.000000000 +0000
-@@ -324,6 +324,7 @@ extern void set_bh_page(struct buffer_he
+Index: linux-2.4.35.4/include/linux/fs.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/fs.h 2007-12-15 05:19:42.794859778 +0100
++++ linux-2.4.35.4/include/linux/fs.h 2007-12-15 05:19:48.663194197 +0100
+@@ -324,6 +324,7 @@
#include <linux/usbdev_fs_i.h>
#include <linux/jffs2_fs_i.h>
#include <linux/cramfs_fs_sb.h>
/*
* Attribute flags. These should be or-ed together to figure out what
-@@ -519,6 +520,7 @@ struct inode {
+@@ -519,6 +520,7 @@
struct socket socket_i;
struct usbdev_inode_info usbdev_i;
struct jffs2_inode_info jffs2_i;
void *generic_ip;
} u;
};
-@@ -734,6 +736,7 @@ struct nameidata {
+@@ -734,6 +736,7 @@
#include <linux/usbdev_fs_sb.h>
#include <linux/cramfs_fs_sb.h>
#include <linux/jffs2_fs_sb.h>
extern struct list_head super_blocks;
extern spinlock_t sb_lock;
-@@ -793,6 +796,7 @@ struct super_block {
+@@ -793,6 +796,7 @@
struct usbdev_sb_info usbdevfs_sb;
struct jffs2_sb_info jffs2_sb;
struct cramfs_sb_info cramfs_sb;
void *generic_sbp;
} u;
/*
-diff --new-file -urp linux-2.4.32/include/linux/squashfs_fs.h linux-2.4.32-squashfs3.0/include/linux/squashfs_fs.h
---- linux-2.4.32/include/linux/squashfs_fs.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-squashfs3.0/include/linux/squashfs_fs.h 2006-03-07 21:12:36.000000000 +0000
+Index: linux-2.4.35.4/include/linux/squashfs_fs.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/squashfs_fs.h 2007-12-15 05:19:48.663194197 +0100
@@ -0,0 +1,915 @@
+#ifndef SQUASHFS_FS
+#define SQUASHFS_FS
+
+#endif
+#endif
-diff --new-file -urp linux-2.4.32/include/linux/squashfs_fs_i.h linux-2.4.32-squashfs3.0/include/linux/squashfs_fs_i.h
---- linux-2.4.32/include/linux/squashfs_fs_i.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-squashfs3.0/include/linux/squashfs_fs_i.h 2006-03-07 21:12:36.000000000 +0000
+Index: linux-2.4.35.4/include/linux/squashfs_fs_i.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/squashfs_fs_i.h 2007-12-15 05:19:48.663194197 +0100
@@ -0,0 +1,44 @@
+#ifndef SQUASHFS_FS_I
+#define SQUASHFS_FS_I
+ } u;
+};
+#endif
-diff --new-file -urp linux-2.4.32/include/linux/squashfs_fs_sb.h linux-2.4.32-squashfs3.0/include/linux/squashfs_fs_sb.h
---- linux-2.4.32/include/linux/squashfs_fs_sb.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-squashfs3.0/include/linux/squashfs_fs_sb.h 2006-03-07 21:12:36.000000000 +0000
+Index: linux-2.4.35.4/include/linux/squashfs_fs_sb.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/squashfs_fs_sb.h 2007-12-15 05:19:48.667194423 +0100
@@ -0,0 +1,74 @@
+#ifndef SQUASHFS_FS_SB
+#define SQUASHFS_FS_SB
+ int (*read_fragment_index_table)(struct super_block *s);
+};
+#endif
-diff --new-file -urp linux-2.4.32/init/do_mounts.c linux-2.4.32-squashfs3.0/init/do_mounts.c
---- linux-2.4.32/init/do_mounts.c 2003-11-28 18:26:21.000000000 +0000
-+++ linux-2.4.32-squashfs3.0/init/do_mounts.c 2006-03-07 21:12:36.000000000 +0000
+Index: linux-2.4.35.4/init/do_mounts.c
+===================================================================
+--- linux-2.4.35.4.orig/init/do_mounts.c 2007-12-15 05:19:42.822861373 +0100
++++ linux-2.4.35.4/init/do_mounts.c 2007-12-15 05:19:48.667194423 +0100
@@ -15,6 +15,7 @@
#include <linux/minix_fs.h>
#include <linux/ext2_fs.h>
#include <linux/cramfs_fs.h>
#define BUILD_CRAMDISK
-@@ -476,6 +477,7 @@ static int __init crd_load(int in_fd, in
+@@ -476,6 +477,7 @@
* minix
* ext2
* romfs
* cramfs
* gzip
*/
-@@ -486,6 +488,7 @@ identify_ramdisk_image(int fd, int start
+@@ -486,6 +488,7 @@
struct minix_super_block *minixsb;
struct ext2_super_block *ext2sb;
struct romfs_super_block *romfsb;
struct cramfs_super *cramfsb;
int nblocks = -1;
unsigned char *buf;
-@@ -497,6 +500,7 @@ identify_ramdisk_image(int fd, int start
+@@ -497,6 +500,7 @@
minixsb = (struct minix_super_block *) buf;
ext2sb = (struct ext2_super_block *) buf;
romfsb = (struct romfs_super_block *) buf;
cramfsb = (struct cramfs_super *) buf;
memset(buf, 0xe5, size);
-@@ -535,6 +539,15 @@ identify_ramdisk_image(int fd, int start
+@@ -535,6 +539,15 @@
goto done;
}
/*
* Read block 1 to test for minix and ext2 superblock
*/
-diff --new-file -urp linux-2.4.32/lib/Config.in linux-2.4.32-squashfs3.0/lib/Config.in
---- linux-2.4.32/lib/Config.in 2003-11-28 18:26:21.000000000 +0000
-+++ linux-2.4.32-squashfs3.0/lib/Config.in 2006-03-07 21:12:36.000000000 +0000
-@@ -10,6 +10,7 @@ tristate 'CRC32 functions' CONFIG_CRC32
+Index: linux-2.4.35.4/lib/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/lib/Config.in 2007-12-15 05:19:42.830861829 +0100
++++ linux-2.4.35.4/lib/Config.in 2007-12-15 05:19:48.667194423 +0100
+@@ -10,6 +10,7 @@
# Do we need the compression support?
#
if [ "$CONFIG_CRAMFS" = "y" -o \
"$CONFIG_PPP_DEFLATE" = "y" -o \
"$CONFIG_CRYPTO_DEFLATE" = "y" -o \
"$CONFIG_JFFS2_FS" = "y" -o \
-@@ -17,6 +18,7 @@ if [ "$CONFIG_CRAMFS" = "y" -o \
+@@ -17,6 +18,7 @@
define_tristate CONFIG_ZLIB_INFLATE y
else
if [ "$CONFIG_CRAMFS" = "m" -o \
-diff -Nur linux-2.4.32/fs/squashfs/inode.c linux-2.4.32-owrt/fs/squashfs/inode.c
---- linux-2.4.32/fs/squashfs/inode.c 2006-03-21 13:06:10.000000000 +0100
-+++ linux-2.4.32-owrt/fs/squashfs/inode.c 2006-03-21 13:12:07.000000000 +0100
+Index: linux-2.4.35.4/fs/squashfs/inode.c
+===================================================================
+--- linux-2.4.35.4.orig/fs/squashfs/inode.c 2007-12-15 05:19:48.647193283 +0100
++++ linux-2.4.35.4/fs/squashfs/inode.c 2007-12-15 05:19:49.015214255 +0100
@@ -4,6 +4,9 @@
* Copyright (c) 2002, 2003, 2004, 2005, 2006
* Phillip Lougher <phillip@lougher.org.uk>
unregister_filesystem(&squashfs_fs_type);
}
-diff -Nur linux-2.4.32/fs/squashfs/LzmaDecode.c linux-2.4.32-owrt/fs/squashfs/LzmaDecode.c
---- linux-2.4.32/fs/squashfs/LzmaDecode.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-owrt/fs/squashfs/LzmaDecode.c 2006-03-21 13:06:33.000000000 +0100
+Index: linux-2.4.35.4/fs/squashfs/LzmaDecode.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/squashfs/LzmaDecode.c 2007-12-15 05:19:49.019214484 +0100
@@ -0,0 +1,663 @@
+/*
+ LzmaDecode.c
+ *outSizeProcessed = nowPos;
+ return LZMA_RESULT_OK;
+}
-diff -Nur linux-2.4.32/fs/squashfs/LzmaDecode.h linux-2.4.32-owrt/fs/squashfs/LzmaDecode.h
---- linux-2.4.32/fs/squashfs/LzmaDecode.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-owrt/fs/squashfs/LzmaDecode.h 2006-03-21 13:06:33.000000000 +0100
+Index: linux-2.4.35.4/fs/squashfs/LzmaDecode.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/squashfs/LzmaDecode.h 2007-12-15 05:19:49.027214939 +0100
@@ -0,0 +1,100 @@
+/*
+ LzmaDecode.h
+ UInt32 *outSizeProcessed);
+
+#endif
-diff -Nur linux-2.4.32/fs/squashfs/Makefile linux-2.4.32-owrt/fs/squashfs/Makefile
---- linux-2.4.32/fs/squashfs/Makefile 2006-03-21 13:06:10.000000000 +0100
-+++ linux-2.4.32-owrt/fs/squashfs/Makefile 2006-03-21 13:12:39.000000000 +0100
+Index: linux-2.4.35.4/fs/squashfs/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/fs/squashfs/Makefile 2007-12-15 05:19:48.651193513 +0100
++++ linux-2.4.35.4/fs/squashfs/Makefile 2007-12-15 05:19:49.031215169 +0100
@@ -4,7 +4,7 @@
O_TARGET := squashfs.o
-diff -Nur linux-mips-cvs/Documentation/Configure.help linux-mips/Documentation/Configure.help
---- linux-mips-cvs/Documentation/Configure.help 2005-01-20 03:19:21.000000000 +0100
-+++ linux-mips/Documentation/Configure.help 2005-02-07 05:08:35.000000000 +0100
-@@ -17528,6 +17528,32 @@
+Index: linux-2.4.35.4/Documentation/Configure.help
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/Configure.help 2007-12-15 05:19:42.546845646 +0100
++++ linux-2.4.35.4/Documentation/Configure.help 2007-12-15 05:19:49.287229757 +0100
+@@ -17580,6 +17580,32 @@
If reporting bugs, please try to have available a full dump of the
messages at debug level 1 while the misbehaviour was occurring.
JFFS stats available in /proc filesystem
CONFIG_JFFS_PROC_FS
Enabling this option will cause statistics from mounted JFFS file systems
-diff -Nur linux-mips-cvs/fs/Config.in linux-mips/fs/Config.in
---- linux-mips-cvs/fs/Config.in 2004-11-19 01:28:47.000000000 +0100
-+++ linux-mips/fs/Config.in 2005-02-07 05:08:34.000000000 +0100
+Index: linux-2.4.35.4/fs/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/fs/Config.in 2007-12-15 05:19:48.635192599 +0100
++++ linux-2.4.35.4/fs/Config.in 2007-12-15 05:19:49.287229757 +0100
@@ -50,6 +50,12 @@
if [ "$CONFIG_JFFS2_FS" = "y" -o "$CONFIG_JFFS2_FS" = "m" ] ; then
int 'JFFS2 debugging verbosity (0 = quiet, 2 = noisy)' CONFIG_JFFS2_FS_DEBUG 0
+dep_mbool ' LZSS compression support for BBC (EXPERIMENTAL)' CONFIG_JFFS2_BBC_LZSS $CONFIG_JFFS2_FS
+
tristate 'Compressed ROM file system support' CONFIG_CRAMFS
- bool 'Virtual memory file system support (former shm fs)' CONFIG_TMPFS
- define_bool CONFIG_RAMFS y
-diff -Nur linux-mips-cvs/fs/jffs2/Config.in.bbc.inc linux-mips/fs/jffs2/Config.in.bbc.inc
---- linux-mips-cvs/fs/jffs2/Config.in.bbc.inc 1970-01-01 01:00:00.000000000 +0100
-+++ linux-mips/fs/jffs2/Config.in.bbc.inc 2005-02-07 05:08:34.000000000 +0100
+ tristate 'Squashed file system support' CONFIG_SQUASHFS
+ if [ "$CONFIG_SQUASHFS" = "y" -o "$CONFIG_SQUASHFS" = "m" ] ; then
+Index: linux-2.4.35.4/fs/jffs2/Config.in.bbc.inc
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/jffs2/Config.in.bbc.inc 2007-12-15 05:19:49.295230212 +0100
@@ -0,0 +1,5 @@
+dep_mbool ' ARMLIB compression support for BBC (EXPERIMENTAL)' CONFIG_JFFS2_BBC_ARMLIB $CONFIG_JFFS2_FS
+dep_mbool ' LZO1X-* compression support for BBC (EXPERIMENTAL)' CONFIG_JFFS2_BBC_LZO $CONFIG_JFFS2_FS
+dep_mbool ' LZARI compression support for BBC (EXPERIMENTAL)' CONFIG_JFFS2_BBC_LZARI $CONFIG_JFFS2_FS
+dep_mbool ' LZHD compression support for BBC (EXPERIMENTAL)' CONFIG_JFFS2_BBC_LZHD $CONFIG_JFFS2_FS
+dep_mbool ' LZSS compression support for BBC (EXPERIMENTAL)' CONFIG_JFFS2_BBC_LZSS $CONFIG_JFFS2_FS
-diff -Nur linux-mips-cvs/fs/jffs2/Configure.help.bbc.inc linux-mips/fs/jffs2/Configure.help.bbc.inc
---- linux-mips-cvs/fs/jffs2/Configure.help.bbc.inc 1970-01-01 01:00:00.000000000 +0100
-+++ linux-mips/fs/jffs2/Configure.help.bbc.inc 2005-02-07 05:08:34.000000000 +0100
+Index: linux-2.4.35.4/fs/jffs2/Configure.help.bbc.inc
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/jffs2/Configure.help.bbc.inc 2007-12-15 05:19:49.299230441 +0100
@@ -0,0 +1,25 @@
+ARMLIB compression support for BBC (EXPERIMENTAL)
+CONFIG_JFFS2_BBC_ARMLIB
+ This enables simple LempelZiv-Storer-Szymanski compression for BBC
+ (faster than LZHD, and, and has a not-so-good compression ratio,
+ was included just for testing)
-diff -Nur linux-mips-cvs/fs/jffs2/Kconfig.bbc.inc linux-mips/fs/jffs2/Kconfig.bbc.inc
---- linux-mips-cvs/fs/jffs2/Kconfig.bbc.inc 1970-01-01 01:00:00.000000000 +0100
-+++ linux-mips/fs/jffs2/Kconfig.bbc.inc 2005-02-07 05:08:34.000000000 +0100
+Index: linux-2.4.35.4/fs/jffs2/Kconfig.bbc.inc
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/jffs2/Kconfig.bbc.inc 2007-12-15 05:19:49.303230670 +0100
@@ -0,0 +1,40 @@
+config JFFS2_BBC_ARMLIB
+ bool "ARMLIB compression support for BBC (EXPERIMENTAL)"
+ This enables simple LempelZiv-Storer-Szymanski compression for BBC
+ (faster than LZHD, and, and has a not-so-good compression ratio,
+ was included just for testing)
-diff -Nur linux-mips-cvs/fs/jffs2/Makefile linux-mips/fs/jffs2/Makefile
---- linux-mips-cvs/fs/jffs2/Makefile 2003-08-13 19:19:25.000000000 +0200
-+++ linux-mips/fs/jffs2/Makefile 2005-02-07 05:08:34.000000000 +0100
+Index: linux-2.4.35.4/fs/jffs2/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/fs/jffs2/Makefile 2007-12-15 05:19:42.578847470 +0100
++++ linux-2.4.35.4/fs/jffs2/Makefile 2007-12-15 05:19:49.307230896 +0100
@@ -10,9 +10,23 @@
# Note 2! The CFLAGS definitions are now in the main makefile...
read.o nodemgmt.o readinode.o super.o write.o scan.o gc.o \
symlink.o build.o erase.o background.o
-diff -Nur linux-mips-cvs/fs/jffs2/Makefile.bbc.inc linux-mips/fs/jffs2/Makefile.bbc.inc
---- linux-mips-cvs/fs/jffs2/Makefile.bbc.inc 1970-01-01 01:00:00.000000000 +0100
-+++ linux-mips/fs/jffs2/Makefile.bbc.inc 2005-02-07 05:08:34.000000000 +0100
+Index: linux-2.4.35.4/fs/jffs2/Makefile.bbc.inc
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/jffs2/Makefile.bbc.inc 2007-12-15 05:19:49.307230896 +0100
@@ -0,0 +1,12 @@
+JFFS2_BBC_KERNEL_OBJS-y = jffs2_bbc_framework.o jffs2_bbc_fs.o
+
+
+JFFS2_BBC_MKFS_OBJS = jffs2_bbc_mkfs.o jffs2_bbc_framework.o jffs2_bbc_armlib_comp.o jffs2_bbc_lzo_comp.o\
+ jffs2_bbc_lzss_comp.o jffs2_bbc_lzari_comp.o jffs2_bbc_lzhd_comp.o
-diff -Nur linux-mips-cvs/fs/jffs2/compr_zlib.c linux-mips/fs/jffs2/compr_zlib.c
---- linux-mips-cvs/fs/jffs2/compr_zlib.c 2003-01-11 18:53:17.000000000 +0100
-+++ linux-mips/fs/jffs2/compr_zlib.c 2005-02-07 05:08:35.000000000 +0100
+Index: linux-2.4.35.4/fs/jffs2/compr_zlib.c
+===================================================================
+--- linux-2.4.35.4.orig/fs/jffs2/compr_zlib.c 2007-12-15 05:19:42.590848151 +0100
++++ linux-2.4.35.4/fs/jffs2/compr_zlib.c 2007-12-15 05:19:49.307230896 +0100
@@ -85,7 +85,7 @@
vfree(inflate_workspace);
}
+ jffs2_zlib_decompress(data_in,cpage_out,srclen,destlen);
+}
+
-diff -Nur linux-mips-cvs/fs/jffs2/file.c linux-mips/fs/jffs2/file.c
---- linux-mips-cvs/fs/jffs2/file.c 2003-11-17 02:07:44.000000000 +0100
-+++ linux-mips/fs/jffs2/file.c 2005-02-07 05:08:35.000000000 +0100
+Index: linux-2.4.35.4/fs/jffs2/file.c
+===================================================================
+--- linux-2.4.35.4.orig/fs/jffs2/file.c 2007-12-15 05:19:42.594848380 +0100
++++ linux-2.4.35.4/fs/jffs2/file.c 2007-12-15 05:19:49.307230896 +0100
@@ -35,6 +35,7 @@
*
*/
comprtype = jffs2_compress(page_address(pg)+ (file_ofs & (PAGE_CACHE_SIZE-1)), comprbuf, &datalen, &cdatalen);
}
if (comprtype == JFFS2_COMPR_NONE) {
-diff -Nur linux-mips-cvs/fs/jffs2/gc.c linux-mips/fs/jffs2/gc.c
---- linux-mips-cvs/fs/jffs2/gc.c 2003-11-17 02:07:44.000000000 +0100
-+++ linux-mips/fs/jffs2/gc.c 2005-02-07 05:08:35.000000000 +0100
+Index: linux-2.4.35.4/fs/jffs2/gc.c
+===================================================================
+--- linux-2.4.35.4.orig/fs/jffs2/gc.c 2007-12-15 05:19:42.602848836 +0100
++++ linux-2.4.35.4/fs/jffs2/gc.c 2007-12-15 05:19:49.311231126 +0100
@@ -35,6 +35,7 @@
*
*/
comprtype = jffs2_compress(writebuf, comprbuf, &datalen, &cdatalen);
}
if (comprtype) {
-diff -Nur linux-mips-cvs/fs/jffs2/hpatch linux-mips/fs/jffs2/hpatch
---- linux-mips-cvs/fs/jffs2/hpatch 1970-01-01 01:00:00.000000000 +0100
-+++ linux-mips/fs/jffs2/hpatch 2005-02-07 05:08:34.000000000 +0100
+Index: linux-2.4.35.4/fs/jffs2/hpatch
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/jffs2/hpatch 2007-12-15 05:19:49.311231126 +0100
@@ -0,0 +1,191 @@
+#!/usr/bin/perl
+# A patch-like utility
+}
+file_end();
+close(CMD);
-diff -Nur linux-mips-cvs/fs/jffs2/jffs2_bbc_armlib_comp.c linux-mips/fs/jffs2/jffs2_bbc_armlib_comp.c
---- linux-mips-cvs/fs/jffs2/jffs2_bbc_armlib_comp.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-mips/fs/jffs2/jffs2_bbc_armlib_comp.c 2005-02-07 05:08:34.000000000 +0100
+Index: linux-2.4.35.4/fs/jffs2/jffs2_bbc_armlib_comp.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/jffs2/jffs2_bbc_armlib_comp.c 2007-12-15 05:19:49.311231126 +0100
@@ -0,0 +1,2224 @@
+/*
+ * JFFS2-BBC: armlib compressor plugin
+}
+
+/*END OF ARMLIB*/
-diff -Nur linux-mips-cvs/fs/jffs2/jffs2_bbc_framework.c linux-mips/fs/jffs2/jffs2_bbc_framework.c
---- linux-mips-cvs/fs/jffs2/jffs2_bbc_framework.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-mips/fs/jffs2/jffs2_bbc_framework.c 2005-02-07 05:08:34.000000000 +0100
+Index: linux-2.4.35.4/fs/jffs2/jffs2_bbc_framework.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/jffs2/jffs2_bbc_framework.c 2007-12-15 05:19:49.315231352 +0100
@@ -0,0 +1,1324 @@
+/*
+ * JFFS2-BBC: Compression Framework
+}
+
+#endif
-diff -Nur linux-mips-cvs/fs/jffs2/jffs2_bbc_framework.h linux-mips/fs/jffs2/jffs2_bbc_framework.h
---- linux-mips-cvs/fs/jffs2/jffs2_bbc_framework.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-mips/fs/jffs2/jffs2_bbc_framework.h 2005-02-07 05:08:34.000000000 +0100
+Index: linux-2.4.35.4/fs/jffs2/jffs2_bbc_framework.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/jffs2/jffs2_bbc_framework.h 2007-12-15 05:19:49.315231352 +0100
@@ -0,0 +1,202 @@
+/*
+ * JFFS2-BBC: Compression Framework - headers
+int jffs2_bbc_get_memory_counter(void);
+
+#endif
-diff -Nur linux-mips-cvs/fs/jffs2/jffs2_bbc_fs.c linux-mips/fs/jffs2/jffs2_bbc_fs.c
---- linux-mips-cvs/fs/jffs2/jffs2_bbc_fs.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-mips/fs/jffs2/jffs2_bbc_fs.c 2005-02-07 05:08:34.000000000 +0100
+Index: linux-2.4.35.4/fs/jffs2/jffs2_bbc_fs.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/jffs2/jffs2_bbc_fs.c 2007-12-15 05:19:49.315231352 +0100
@@ -0,0 +1,331 @@
+/*
+ * JFFS2-BBC: File System Extension for Linux Kernel
+ jffs2_bbc_compressor_deinit();
+ remove_proc_entry("jffs2_bbc", NULL);
+}
-diff -Nur linux-mips-cvs/fs/jffs2/jffs2_bbc_fs.h linux-mips/fs/jffs2/jffs2_bbc_fs.h
---- linux-mips-cvs/fs/jffs2/jffs2_bbc_fs.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-mips/fs/jffs2/jffs2_bbc_fs.h 2005-02-07 05:08:34.000000000 +0100
+Index: linux-2.4.35.4/fs/jffs2/jffs2_bbc_fs.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/jffs2/jffs2_bbc_fs.h 2007-12-15 05:19:49.315231352 +0100
@@ -0,0 +1,30 @@
+/*
+ * JFFS2 BBC: File System Extension for Linux Kernel - headers
+
+void jffs2_bbc_proc_init(void);
+void jffs2_bbc_proc_deinit(void);
-diff -Nur linux-mips-cvs/fs/jffs2/jffs2_bbc_lzari_comp.c linux-mips/fs/jffs2/jffs2_bbc_lzari_comp.c
---- linux-mips-cvs/fs/jffs2/jffs2_bbc_lzari_comp.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-mips/fs/jffs2/jffs2_bbc_lzari_comp.c 2005-02-07 05:08:34.000000000 +0100
+Index: linux-2.4.35.4/fs/jffs2/jffs2_bbc_lzari_comp.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/jffs2/jffs2_bbc_lzari_comp.c 2007-12-15 05:19:49.319231581 +0100
@@ -0,0 +1,788 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
+
+{
+ jffs2_bbc_unregister_compressor (&jffs2_bbc_lzari);
+}
-diff -Nur linux-mips-cvs/fs/jffs2/jffs2_bbc_lzhd_comp.c linux-mips/fs/jffs2/jffs2_bbc_lzhd_comp.c
---- linux-mips-cvs/fs/jffs2/jffs2_bbc_lzhd_comp.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-mips/fs/jffs2/jffs2_bbc_lzhd_comp.c 2005-02-07 05:08:34.000000000 +0100
+Index: linux-2.4.35.4/fs/jffs2/jffs2_bbc_lzhd_comp.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/jffs2/jffs2_bbc_lzhd_comp.c 2007-12-15 05:19:49.319231581 +0100
@@ -0,0 +1,747 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
+
+{
+ jffs2_bbc_unregister_compressor (&jffs2_bbc_lzhd);
+}
-diff -Nur linux-mips-cvs/fs/jffs2/jffs2_bbc_lzo_comp.c linux-mips/fs/jffs2/jffs2_bbc_lzo_comp.c
---- linux-mips-cvs/fs/jffs2/jffs2_bbc_lzo_comp.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-mips/fs/jffs2/jffs2_bbc_lzo_comp.c 2005-02-07 05:08:34.000000000 +0100
+Index: linux-2.4.35.4/fs/jffs2/jffs2_bbc_lzo_comp.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/jffs2/jffs2_bbc_lzo_comp.c 2007-12-15 05:19:49.323231810 +0100
@@ -0,0 +1,2435 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
+
+{
+ jffs2_bbc_unregister_compressor (&jffs2_bbc_lzo);
+}
-diff -Nur linux-mips-cvs/fs/jffs2/jffs2_bbc_lzss_comp.c linux-mips/fs/jffs2/jffs2_bbc_lzss_comp.c
---- linux-mips-cvs/fs/jffs2/jffs2_bbc_lzss_comp.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-mips/fs/jffs2/jffs2_bbc_lzss_comp.c 2005-02-07 05:08:34.000000000 +0100
+Index: linux-2.4.35.4/fs/jffs2/jffs2_bbc_lzss_comp.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/jffs2/jffs2_bbc_lzss_comp.c 2007-12-15 05:19:49.323231810 +0100
@@ -0,0 +1,385 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
+
+{
+ jffs2_bbc_unregister_compressor (&jffs2_bbc_lzss);
+}
-diff -Nur linux-mips-cvs/fs/jffs2/linux-2.4.25.hpatch linux-mips/fs/jffs2/linux-2.4.25.hpatch
---- linux-mips-cvs/fs/jffs2/linux-2.4.25.hpatch 1970-01-01 01:00:00.000000000 +0100
-+++ linux-mips/fs/jffs2/linux-2.4.25.hpatch 2005-02-07 05:08:34.000000000 +0100
+Index: linux-2.4.35.4/fs/jffs2/linux-2.4.25.hpatch
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/jffs2/linux-2.4.25.hpatch 2007-12-15 05:19:49.323231810 +0100
@@ -0,0 +1,97 @@
+FMakefile
+=BBC insertion
+?{
++ jffs2_bbc_proc_deinit(); /**BBC**/
++
-diff -Nur linux-mips-cvs/fs/jffs2/read.c linux-mips/fs/jffs2/read.c
---- linux-mips-cvs/fs/jffs2/read.c 2003-11-17 02:07:44.000000000 +0100
-+++ linux-mips/fs/jffs2/read.c 2005-02-07 05:08:35.000000000 +0100
+Index: linux-2.4.35.4/fs/jffs2/read.c
+===================================================================
+--- linux-2.4.35.4.orig/fs/jffs2/read.c 2007-12-15 05:19:42.666852484 +0100
++++ linux-2.4.35.4/fs/jffs2/read.c 2007-12-15 05:19:49.323231810 +0100
@@ -35,6 +35,7 @@
*
*/
ret = jffs2_decompress(ri->compr, readbuf, decomprbuf, ri->csize, ri->dsize);
if (ret) {
printk(KERN_WARNING "Error: jffs2_decompress returned %d\n", ret);
-diff -Nur linux-mips-cvs/fs/jffs2/super.c linux-mips/fs/jffs2/super.c
---- linux-mips-cvs/fs/jffs2/super.c 2003-01-11 18:53:17.000000000 +0100
-+++ linux-mips/fs/jffs2/super.c 2005-02-07 05:08:35.000000000 +0100
+Index: linux-2.4.35.4/fs/jffs2/super.c
+===================================================================
+--- linux-2.4.35.4.orig/fs/jffs2/super.c 2007-12-15 05:19:42.678853169 +0100
++++ linux-2.4.35.4/fs/jffs2/super.c 2007-12-15 05:19:49.323231810 +0100
@@ -35,6 +35,7 @@
*
*/
---- linux.old/include/asm-mips/param.h 2005-01-19 15:10:12.000000000 +0100
-+++ linux.dev/include/asm-mips/param.h 2005-05-30 02:42:06.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips/param.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/param.h 2007-12-15 05:19:42.518844050 +0100
++++ linux-2.4.35.4/include/asm-mips/param.h 2007-12-15 05:19:49.823260305 +0100
@@ -55,7 +55,7 @@
#endif /* defined(__KERNEL__) */
#endif /* defined(HZ) */
-diff -Nur linux-2.4.30/drivers/mtd/chips/Config.in linux-2.4.30.openwrt/drivers/mtd/chips/Config.in
---- linux-2.4.30/drivers/mtd/chips/Config.in 2003-06-13 16:51:34.000000000 +0200
-+++ linux-2.4.30.openwrt/drivers/mtd/chips/Config.in 2005-06-28 11:26:26.000000000 +0200
+Index: linux-2.4.35.4/drivers/mtd/chips/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/drivers/mtd/chips/Config.in 2007-12-15 05:19:42.454840402 +0100
++++ linux-2.4.35.4/drivers/mtd/chips/Config.in 2007-12-15 05:19:50.035272385 +0100
@@ -45,6 +45,7 @@
dep_tristate ' Support for Intel/Sharp flash chips' CONFIG_MTD_CFI_INTELEXT $CONFIG_MTD_GEN_PROBE
dep_tristate ' Support for AMD/Fujitsu flash chips' CONFIG_MTD_CFI_AMDSTD $CONFIG_MTD_GEN_PROBE
dep_tristate ' Support for RAM chips in bus mapping' CONFIG_MTD_RAM $CONFIG_MTD
dep_tristate ' Support for ROM chips in bus mapping' CONFIG_MTD_ROM $CONFIG_MTD
-diff -Nur linux-2.4.30/drivers/mtd/chips/Makefile linux-2.4.30.openwrt/drivers/mtd/chips/Makefile
---- linux-2.4.30/drivers/mtd/chips/Makefile 2003-06-13 16:51:34.000000000 +0200
-+++ linux-2.4.30.openwrt/drivers/mtd/chips/Makefile 2005-06-28 11:26:26.000000000 +0200
+Index: linux-2.4.35.4/drivers/mtd/chips/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/drivers/mtd/chips/Makefile 2007-12-15 05:19:42.462840857 +0100
++++ linux-2.4.35.4/drivers/mtd/chips/Makefile 2007-12-15 05:19:50.039272613 +0100
@@ -18,6 +18,7 @@
obj-$(CONFIG_MTD_AMDSTD) += amd_flash.o
obj-$(CONFIG_MTD_CFI) += cfi_probe.o
obj-$(CONFIG_MTD_CFI_AMDSTD) += cfi_cmdset_0002.o
obj-$(CONFIG_MTD_CFI_INTELEXT) += cfi_cmdset_0001.o
obj-$(CONFIG_MTD_GEN_PROBE) += gen_probe.o
-diff -Nur linux-2.4.30/drivers/mtd/chips/cfi_cmdset_0701.c linux-2.4.30.openwrt/drivers/mtd/chips/cfi_cmdset_0701.c
---- linux-2.4.30/drivers/mtd/chips/cfi_cmdset_0701.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.30.openwrt/drivers/mtd/chips/cfi_cmdset_0701.c 2005-06-28 11:26:26.000000000 +0200
+Index: linux-2.4.35.4/drivers/mtd/chips/cfi_cmdset_0701.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/mtd/chips/cfi_cmdset_0701.c 2007-12-15 05:19:50.047273069 +0100
@@ -0,0 +1,855 @@
+/*
+ * Common Flash Interface support:
+module_init(cfi_sststd_init);
+module_exit(cfi_sststd_exit);
+
-diff -Nur linux-2.4.30/drivers/mtd/chips/cfi_probe.c linux-2.4.30.openwrt/drivers/mtd/chips/cfi_probe.c
---- linux-2.4.30/drivers/mtd/chips/cfi_probe.c 2003-06-13 16:51:34.000000000 +0200
-+++ linux-2.4.30.openwrt/drivers/mtd/chips/cfi_probe.c 2005-06-28 11:26:26.000000000 +0200
+Index: linux-2.4.35.4/drivers/mtd/chips/cfi_probe.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/mtd/chips/cfi_probe.c 2007-12-15 05:19:42.474841541 +0100
++++ linux-2.4.35.4/drivers/mtd/chips/cfi_probe.c 2007-12-15 05:19:50.051273298 +0100
@@ -67,8 +67,15 @@
cfi_send_gen_cmd(0xF0, 0, base, map, cfi, cfi->device_type, NULL);
cfi_send_gen_cmd(0x98, 0x55, base, map, cfi, cfi->device_type, NULL);
if (!cfi->numchips) {
/* This is the first time we're called. Set up the CFI
-diff -Nur linux-2.4.30/drivers/mtd/chips/gen_probe.c linux-2.4.30.openwrt/drivers/mtd/chips/gen_probe.c
---- linux-2.4.30/drivers/mtd/chips/gen_probe.c 2003-08-25 13:44:42.000000000 +0200
-+++ linux-2.4.30.openwrt/drivers/mtd/chips/gen_probe.c 2005-06-28 11:29:23.000000000 +0200
+Index: linux-2.4.35.4/drivers/mtd/chips/gen_probe.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/mtd/chips/gen_probe.c 2007-12-15 05:19:42.482841997 +0100
++++ linux-2.4.35.4/drivers/mtd/chips/gen_probe.c 2007-12-15 05:19:50.055273524 +0100
@@ -328,13 +328,18 @@
return cfi_cmdset_0001(map, primary);
#endif
-diff -urN linux.old/drivers/mtd/chips/cfi_cmdset_0001.c linux.dev/drivers/mtd/chips/cfi_cmdset_0001.c
---- linux.old/drivers/mtd/chips/cfi_cmdset_0001.c 2004-11-17 12:54:21.000000000 +0100
-+++ linux.dev/drivers/mtd/chips/cfi_cmdset_0001.c 2006-03-16 17:25:04.000000000 +0100
+Index: linux-2.4.35.4/drivers/mtd/chips/cfi_cmdset_0001.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/mtd/chips/cfi_cmdset_0001.c 2007-12-15 05:19:42.414838122 +0100
++++ linux-2.4.35.4/drivers/mtd/chips/cfi_cmdset_0001.c 2007-12-15 05:19:50.315288342 +0100
@@ -28,10 +28,18 @@
#include <linux/slab.h>
#include <linux/delay.h>
return mtd;
setup_err:
-@@ -1960,10 +1972,40 @@
+@@ -1961,10 +1973,40 @@
}
}
kfree(cfi->cmdset_priv);
kfree(cfi->cfiq);
kfree(cfi);
-diff -urN linux.old/include/linux/mtd/mtd.h linux.dev/include/linux/mtd/mtd.h
---- linux.old/include/linux/mtd/mtd.h 2003-08-25 13:44:44.000000000 +0200
-+++ linux.dev/include/linux/mtd/mtd.h 2006-03-16 17:00:10.000000000 +0100
+Index: linux-2.4.35.4/include/linux/mtd/mtd.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/mtd/mtd.h 2007-12-15 05:19:42.422838578 +0100
++++ linux-2.4.35.4/include/linux/mtd/mtd.h 2007-12-15 05:19:50.315288342 +0100
@@ -10,6 +10,7 @@
#include <linux/version.h>
#include <linux/types.h>
---- linux.old/drivers/mtd/mtdchar.c 2006-11-23 18:48:56.000000000 +0100
-+++ linux.dev/drivers/mtd/mtdchar.c 2006-11-23 18:49:11.000000000 +0100
-@@ -564,7 +564,7 @@
+Index: linux-2.4.35.4/drivers/mtd/mtdchar.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/mtd/mtdchar.c 2007-12-15 05:19:42.370835614 +0100
++++ linux-2.4.35.4/drivers/mtd/mtdchar.c 2007-12-15 05:19:50.539301109 +0100
+@@ -558,13 +558,13 @@
+ sprintf(name, "%d", mtd->index);
+ devfs_rw_handle[mtd->index] = devfs_register(devfs_dir_handle, name,
+ DEVFS_FL_DEFAULT, MTD_CHAR_MAJOR, mtd->index*2,
+- S_IFCHR | S_IRUGO | S_IWUGO,
++ S_IFCHR | S_IRUSR | S_IWUSR,
+ &mtd_fops, NULL);
+
sprintf(name, "%dro", mtd->index);
devfs_ro_handle[mtd->index] = devfs_register(devfs_dir_handle, name,
DEVFS_FL_DEFAULT, MTD_CHAR_MAJOR, mtd->index*2+1,
&mtd_fops, NULL);
}
---- linux-2.4.30/drivers/mtd/mtdblock.c.orig 2006-03-26 06:38:36 -05:00
-+++ linux-2.4.30/drivers/mtd/mtdblock.c 2006-03-26 06:38:54 -05:00
+Index: linux-2.4.35.4/drivers/mtd/mtdblock.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/mtd/mtdblock.c 2007-12-15 05:19:42.378836072 +0100
++++ linux-2.4.35.4/drivers/mtd/mtdblock.c 2007-12-15 05:19:50.539301109 +0100
@@ -601,7 +601,7 @@
sprintf(name, "%d", mtd->index);
devfs_rw_handle[mtd->index] = devfs_register(devfs_dir_handle, name,
&mtd_fops, NULL);
}
---- linux-2.4.30/drivers/mtd/mtdchar.c.orig 2006-03-26 06:42:23 -05:00
-+++ linux-2.4.30/drivers/mtd/mtdchar.c 2006-03-26 06:42:41 -05:00
-@@ -558,7 +558,7 @@
- sprintf(name, "%d", mtd->index);
- devfs_rw_handle[mtd->index] = devfs_register(devfs_dir_handle, name,
- DEVFS_FL_DEFAULT, MTD_CHAR_MAJOR, mtd->index*2,
-- S_IFCHR | S_IRUGO | S_IWUGO,
-+ S_IFCHR | S_IRUSR | S_IWUSR,
- &mtd_fops, NULL);
-
- sprintf(name, "%dro", mtd->index);
-diff -Nur linux-2.4.32/fs/squashfs/Makefile linux-2.4.32-owrt/fs/squashfs/Makefile
---- linux-2.4.32/fs/squashfs/Makefile 2006-03-21 13:47:50.000000000 +0100
-+++ linux-2.4.32-owrt/fs/squashfs/Makefile 2006-03-21 13:48:49.000000000 +0100
+Index: linux-2.4.35.4/fs/squashfs/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/fs/squashfs/Makefile 2007-12-15 05:19:49.031215169 +0100
++++ linux-2.4.35.4/fs/squashfs/Makefile 2007-12-15 05:19:50.759313646 +0100
@@ -4,7 +4,7 @@
O_TARGET := squashfs.o
obj-m := $(O_TARGET)
-diff -Nur linux-2.4.32/fs/squashfs/squashfs.h linux-2.4.32-owrt/fs/squashfs/squashfs.h
---- linux-2.4.32/fs/squashfs/squashfs.h 2006-03-21 13:06:10.000000000 +0100
-+++ linux-2.4.32-owrt/fs/squashfs/squashfs.h 2006-03-21 13:48:36.000000000 +0100
+Index: linux-2.4.35.4/fs/squashfs/squashfs.h
+===================================================================
+--- linux-2.4.35.4.orig/fs/squashfs/squashfs.h 2007-12-15 05:19:48.659193968 +0100
++++ linux-2.4.35.4/fs/squashfs/squashfs.h 2007-12-15 05:19:50.767314102 +0100
@@ -24,6 +24,9 @@
#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
#undef CONFIG_SQUASHFS_1_0_COMPATIBILITY
-diff -ur linux-2.4.32/arch/mips/Makefile linux-2.4.32-openwrt/arch/mips/Makefile
---- linux-2.4.32/arch/mips/Makefile 2005-12-15 13:53:59.000000000 +0100
-+++ linux-2.4.32-openwrt/arch/mips/Makefile 2005-12-15 14:02:33.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/Makefile 2007-12-15 05:19:44.870978088 +0100
++++ linux-2.4.35.4/arch/mips/Makefile 2007-12-15 05:19:50.987326639 +0100
@@ -44,10 +44,10 @@
GCCFLAGS := -I $(TOPDIR)/include/asm/gcc
GCCFLAGS += -G 0 -mno-abicalls -fno-pic -pipe
CFLAGS += $(GCCFLAGS)
LD += -m $(ld-emul)
-diff -ur linux-2.4.32/Makefile linux-2.4.32-openwrt/Makefile
---- linux-2.4.32/Makefile 2005-12-15 13:53:59.000000000 +0100
-+++ linux-2.4.32-openwrt/Makefile 2005-12-15 13:59:30.000000000 +0100
+Index: linux-2.4.35.4/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/Makefile 2007-12-15 05:19:45.074989715 +0100
++++ linux-2.4.35.4/Makefile 2007-12-15 05:19:50.995327098 +0100
@@ -17,7 +17,7 @@
FINDHPATH = $(HPATH)/asm $(HPATH)/linux $(HPATH)/scsi $(HPATH)/net $(HPATH)/math-emu
-CFLAGS := $(CPPFLAGS) -Wall -Wstrict-prototypes -Wno-trigraphs -O2 \
+CFLAGS := $(CPPFLAGS) -Wall -Wstrict-prototypes -Wno-trigraphs -Os \
-fno-strict-aliasing -fno-common
- CFLAGS += -fno-builtin-sprintf
+ CFLAGS += -fno-builtin-strpbrk -fno-builtin-sprintf
ifndef CONFIG_FRAME_POINTER
-@@ -104,6 +103,8 @@
+@@ -105,6 +104,8 @@
# disable pointer signedness warnings in gcc 4.0
CFLAGS += $(call check_gcc,-Wno-pointer-sign,)
---- linux-2.4.32/arch/mips/Makefile.old 2006-10-18 21:11:18.110720000 +0200
-+++ linux-2.4.32/arch/mips/Makefile 2006-10-18 21:12:32.570720000 +0200
-@@ -752,6 +752,7 @@
+Index: linux-2.4.35.4/arch/mips/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/Makefile 2007-12-15 05:19:50.987326639 +0100
++++ linux-2.4.35.4/arch/mips/Makefile 2007-12-15 05:19:51.215339635 +0100
+@@ -739,6 +739,7 @@
HEAD := arch/mips/kernel/head.o arch/mips/kernel/init_task.o
SUBDIRS := $(addprefix arch/mips/, tools) $(SUBDIRS) $(addprefix arch/mips/, kernel mm lib)
CORE_FILES := arch/mips/kernel/kernel.o arch/mips/mm/mm.o $(CORE_FILES)
LIBS := arch/mips/lib/lib.a $(LIBS)
-@@ -799,7 +800,7 @@
+@@ -785,7 +786,7 @@
$(MAKE) -C arch/$(ARCH)/tools mrproper
archdep:
---- linux.old/Makefile Tue Oct 10 22:24:41 2006
-+++ linux.dev/Makefile Tue Oct 10 22:26:19 2006
-@@ -427,17 +427,8 @@
+Index: linux-2.4.35.4/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/Makefile 2007-12-15 05:19:50.995327098 +0100
++++ linux-2.4.35.4/Makefile 2007-12-15 05:19:51.427351715 +0100
+@@ -428,18 +428,9 @@
depmod_opts := -b $(INSTALL_MOD_PATH) -r
endif
.PHONY: _modinst_post
-_modinst_post: _modinst_post_pcmcia
+_modinst_post:
if [ -r System.map ]; then $(DEPMOD) -ae -F System.map $(depmod_opts) $(KERNELRELEASE); fi
--
+
-# Backwards compatibilty symlinks for people still using old versions
-# of pcmcia-cs with hard coded pathnames on insmod. Remove
-# _modinst_post_pcmcia for kernel 2.4.1.
- cd $(MODLIB); \
- mkdir -p pcmcia; \
- find kernel -path '*/pcmcia/*' -name '*.o' | xargs -i -r ln -sf ../{} pcmcia
-
+-
.PHONY: $(patsubst %, _modinst_%, $(SUBDIRS))
$(patsubst %, _modinst_%, $(SUBDIRS)) :
+ $(MAKE) -C $(patsubst _modinst_%, %, $@) modules_install
-diff -Nur linux-2.4.32/include/linux/netdevice.h linux-2.4.32-we/include/linux/netdevice.h
---- linux-2.4.32/include/linux/netdevice.h 2004-11-17 12:54:22.000000000 +0100
-+++ linux-2.4.32-we/include/linux/netdevice.h 2006-03-13 12:10:57.000000000 +0100
+Index: linux-2.4.35.4/include/linux/netdevice.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/netdevice.h 2007-12-15 05:19:42.162823760 +0100
++++ linux-2.4.35.4/include/linux/netdevice.h 2007-12-15 05:19:51.635363571 +0100
@@ -295,7 +295,9 @@
/* List of functions to handle Wireless Extensions (instead of ioctl).
struct ethtool_ops *ethtool_ops;
-diff -Nur linux-2.4.32/include/linux/wireless.h linux-2.4.32-we/include/linux/wireless.h
---- linux-2.4.32/include/linux/wireless.h 2003-11-28 19:26:21.000000000 +0100
-+++ linux-2.4.32-we/include/linux/wireless.h 2006-03-13 12:11:02.000000000 +0100
+Index: linux-2.4.35.4/include/linux/wireless.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/wireless.h 2007-12-15 05:19:42.170824216 +0100
++++ linux-2.4.35.4/include/linux/wireless.h 2007-12-15 05:19:51.643364027 +0100
@@ -1,10 +1,10 @@
/*
* This file define a set of standard wireless extensions
};
/*
-diff -Nur linux-2.4.32/include/net/iw_handler.h linux-2.4.32-we/include/net/iw_handler.h
---- linux-2.4.32/include/net/iw_handler.h 2003-11-28 19:26:21.000000000 +0100
-+++ linux-2.4.32-we/include/net/iw_handler.h 2006-03-13 12:10:57.000000000 +0100
+Index: linux-2.4.35.4/include/net/iw_handler.h
+===================================================================
+--- linux-2.4.35.4.orig/include/net/iw_handler.h 2007-12-15 05:19:42.178824671 +0100
++++ linux-2.4.35.4/include/net/iw_handler.h 2007-12-15 05:19:51.647364253 +0100
@@ -1,10 +1,10 @@
/*
* This file define the new driver API for Wireless Extensions
};
/**************************** PROTOTYPES ****************************/
-diff -Nur linux-2.4.32/net/core/dev.c linux-2.4.32-we/net/core/dev.c
---- linux-2.4.32/net/core/dev.c 2005-04-04 03:42:20.000000000 +0200
-+++ linux-2.4.32-we/net/core/dev.c 2006-03-13 12:10:57.000000000 +0100
+Index: linux-2.4.35.4/net/core/dev.c
+===================================================================
+--- linux-2.4.35.4.orig/net/core/dev.c 2007-12-15 05:19:42.186825129 +0100
++++ linux-2.4.35.4/net/core/dev.c 2007-12-15 05:19:51.651364482 +0100
@@ -2426,7 +2426,7 @@
/* Follow me in net/core/wireless.c */
ret = wireless_process_ioctl(&ifr, cmd);
copy_to_user(arg, &ifr, sizeof(struct ifreq)))
return -EFAULT;
return ret;
-diff -Nur linux-2.4.32/net/core/wireless.c linux-2.4.32-we/net/core/wireless.c
---- linux-2.4.32/net/core/wireless.c 2003-11-28 19:26:21.000000000 +0100
-+++ linux-2.4.32-we/net/core/wireless.c 2006-03-13 12:11:02.000000000 +0100
+Index: linux-2.4.35.4/net/core/wireless.c
+===================================================================
+--- linux-2.4.35.4.orig/net/core/wireless.c 2007-12-15 05:19:42.194825585 +0100
++++ linux-2.4.35.4/net/core/wireless.c 2007-12-15 05:19:51.655364711 +0100
@@ -2,7 +2,7 @@
* This file implement the Wireless Extensions APIs.
*
http://www.polbox.com/h/hs001/linux-2.4.29-mppe-mppc-1.3.patch.gz
-diff -ruN linux-2.4.29.orig/Documentation/Configure.help linux-2.4.29/Documentation/Configure.help
---- linux-2.4.29.orig/Documentation/Configure.help 2005-02-02 22:18:18.000000000 +0100
-+++ linux-2.4.29/Documentation/Configure.help 2005-02-02 22:26:37.000000000 +0100
-@@ -9969,6 +9969,28 @@
+Index: linux-2.4.35.4/Documentation/Configure.help
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/Configure.help 2007-12-15 05:19:49.287229757 +0100
++++ linux-2.4.35.4/Documentation/Configure.help 2007-12-15 05:19:51.927380210 +0100
+@@ -9974,6 +9974,28 @@
module; it is called bsd_comp.o and will show up in the directory
modules once you have said "make modules". If unsure, say N.
PPP over Ethernet
CONFIG_PPPOE
Support for PPP over Ethernet.
-diff -ruN linux-2.4.29.orig/crypto/Config.in linux-2.4.29/crypto/Config.in
---- linux-2.4.29.orig/crypto/Config.in 2005-02-02 22:18:14.000000000 +0100
-+++ linux-2.4.29/crypto/Config.in 2005-02-02 22:26:37.000000000 +0100
+Index: linux-2.4.35.4/crypto/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/crypto/Config.in 2007-12-15 05:19:42.094819886 +0100
++++ linux-2.4.35.4/crypto/Config.in 2007-12-15 05:19:51.927380210 +0100
@@ -11,7 +11,9 @@
"$CONFIG_INET6_AH" = "y" -o \
"$CONFIG_INET6_AH" = "m" -o \
if [ "$CONFIG_INET_IPCOMP" = "y" -o \
"$CONFIG_INET_IPCOMP" = "m" -o \
"$CONFIG_INET6_IPCOMP" = "y" -o \
-diff -ruN linux-2.4.29.orig/drivers/net/Config.in linux-2.4.29/drivers/net/Config.in
---- linux-2.4.29.orig/drivers/net/Config.in 2005-02-02 22:17:31.000000000 +0100
-+++ linux-2.4.29/drivers/net/Config.in 2005-02-02 22:26:37.000000000 +0100
-@@ -332,6 +332,7 @@
+Index: linux-2.4.35.4/drivers/net/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/drivers/net/Config.in 2007-12-15 05:19:42.102820341 +0100
++++ linux-2.4.35.4/drivers/net/Config.in 2007-12-15 05:19:51.931380439 +0100
+@@ -336,6 +336,7 @@
dep_tristate ' PPP support for sync tty ports' CONFIG_PPP_SYNC_TTY $CONFIG_PPP
dep_tristate ' PPP Deflate compression' CONFIG_PPP_DEFLATE $CONFIG_PPP
dep_tristate ' PPP BSD-Compress compression' CONFIG_PPP_BSDCOMP $CONFIG_PPP
if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
dep_tristate ' PPP over Ethernet (EXPERIMENTAL)' CONFIG_PPPOE $CONFIG_PPP
fi
-diff -ruN linux-2.4.29.orig/drivers/net/Makefile linux-2.4.29/drivers/net/Makefile
---- linux-2.4.29.orig/drivers/net/Makefile 2005-02-02 22:17:23.000000000 +0100
-+++ linux-2.4.29/drivers/net/Makefile 2005-02-02 22:26:37.000000000 +0100
-@@ -163,6 +163,7 @@
+Index: linux-2.4.35.4/drivers/net/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/drivers/net/Makefile 2007-12-15 05:19:42.110820796 +0100
++++ linux-2.4.35.4/drivers/net/Makefile 2007-12-15 05:19:51.931380439 +0100
+@@ -166,6 +166,7 @@
obj-$(CONFIG_PPP_SYNC_TTY) += ppp_synctty.o
obj-$(CONFIG_PPP_DEFLATE) += ppp_deflate.o
obj-$(CONFIG_PPP_BSDCOMP) += bsd_comp.o
obj-$(CONFIG_PPPOE) += pppox.o pppoe.o
obj-$(CONFIG_SLIP) += slip.o
-diff -ruN linux-2.4.29.orig/drivers/net/ppp_generic.c linux-2.4.29/drivers/net/ppp_generic.c
---- linux-2.4.29.orig/drivers/net/ppp_generic.c 2005-02-02 22:17:24.000000000 +0100
-+++ linux-2.4.29/drivers/net/ppp_generic.c 2005-02-02 22:26:37.000000000 +0100
+Index: linux-2.4.35.4/drivers/net/ppp_generic.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/net/ppp_generic.c 2007-12-15 05:19:42.114821025 +0100
++++ linux-2.4.35.4/drivers/net/ppp_generic.c 2007-12-15 05:19:51.931380439 +0100
@@ -19,7 +19,7 @@
* PPP driver, written by Michael Callahan and Al Longyear, and
* subsequently hacked by Paul Mackerras.
init_ppp_file(&ppp->file, INTERFACE);
ppp->file.hdrlen = PPP_HDRLEN - 2; /* don't count proto bytes */
for (i = 0; i < NUM_NP; ++i)
-diff -ruN linux-2.4.29.orig/drivers/net/ppp_mppe_mppc.c linux-2.4.29/drivers/net/ppp_mppe_mppc.c
---- linux-2.4.29.orig/drivers/net/ppp_mppe_mppc.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/drivers/net/ppp_mppe_mppc.c 2005-02-02 23:07:40.000000000 +0100
+Index: linux-2.4.35.4/drivers/net/ppp_mppe_mppc.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/net/ppp_mppe_mppc.c 2007-12-15 05:19:51.935380668 +0100
@@ -0,0 +1,1312 @@
+/*
+ * ppp_mppe_mppc.c - MPPC/MPPE "compressor/decompressor" module.
+MODULE_AUTHOR("Jan Dubiec <jdx@slackware.pl>");
+MODULE_DESCRIPTION("MPPE/MPPC encryption/compression module for Linux");
+MODULE_LICENSE("Dual BSD/GPL");
-diff -ruN linux-2.4.29.orig/include/linux/ppp-comp.h linux-2.4.29/include/linux/ppp-comp.h
---- linux-2.4.29.orig/include/linux/ppp-comp.h 2005-02-02 22:18:25.000000000 +0100
-+++ linux-2.4.29/include/linux/ppp-comp.h 2005-02-02 22:41:01.000000000 +0100
+Index: linux-2.4.35.4/include/linux/ppp-comp.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/ppp-comp.h 2007-12-15 05:19:42.134822165 +0100
++++ linux-2.4.35.4/include/linux/ppp-comp.h 2007-12-15 05:19:51.935380668 +0100
@@ -28,7 +28,7 @@
*/
-diff -urN linux-2.4.29.old/Documentation/Configure.help linux-2.4.29/Documentation/Configure.help
---- linux-2.4.29.old/Documentation/Configure.help 2005-03-21 19:30:22.000000000 +0100
-+++ linux-2.4.29/Documentation/Configure.help 2005-03-21 19:36:51.000000000 +0100
-@@ -17943,6 +17943,34 @@
+Index: linux-2.4.35.4/Documentation/Configure.help
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/Configure.help 2007-12-15 05:19:51.927380210 +0100
++++ linux-2.4.35.4/Documentation/Configure.help 2007-12-15 05:19:52.251398675 +0100
+@@ -17995,6 +17995,34 @@
If you don't know what all this is about, say N.
SMB file system support (to mount Windows shares etc.)
CONFIG_SMB_FS
SMB (Server Message Block) is the protocol Windows for Workgroups
-diff -urN linux-2.4.29.old/Documentation/filesystems/00-INDEX linux-2.4.29/Documentation/filesystems/00-INDEX
---- linux-2.4.29.old/Documentation/filesystems/00-INDEX 2004-02-18 14:36:30.000000000 +0100
-+++ linux-2.4.29/Documentation/filesystems/00-INDEX 2005-03-21 19:36:51.000000000 +0100
+Index: linux-2.4.35.4/Documentation/filesystems/00-INDEX
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/filesystems/00-INDEX 2007-12-15 05:19:41.822804384 +0100
++++ linux-2.4.35.4/Documentation/filesystems/00-INDEX 2007-12-15 05:19:52.255398905 +0100
@@ -10,6 +10,8 @@
- info for the BeOS file system (BFS)
bfs.txt
coda.txt
- description of the CODA filesystem.
cramfs.txt
-diff -urN linux-2.4.29.old/Documentation/filesystems/cifs.txt linux-2.4.29/Documentation/filesystems/cifs.txt
---- linux-2.4.29.old/Documentation/filesystems/cifs.txt 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/Documentation/filesystems/cifs.txt 2005-03-21 19:36:51.000000000 +0100
+Index: linux-2.4.35.4/Documentation/filesystems/cifs.txt
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/Documentation/filesystems/cifs.txt 2007-12-15 05:19:52.259399131 +0100
@@ -0,0 +1,51 @@
+ This is the client VFS module for the Common Internet File System
+ (CIFS) protocol which is the successor to the Server Message Block
+ or the Samba site:
+
+ http://www.samba.org
-diff -urN linux-2.4.29.old/fs/cifs/asn1.c linux-2.4.29/fs/cifs/asn1.c
---- linux-2.4.29.old/fs/cifs/asn1.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/asn1.c 2004-07-14 00:25:04.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/asn1.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/asn1.c 2007-12-15 05:19:52.263399360 +0100
@@ -0,0 +1,614 @@
+/*
+ * The ASB.1/BER parsing code is derived from ip_nat_snmp_basic.c which was in
+
+ return 1;
+}
-diff -urN linux-2.4.29.old/fs/cifs/AUTHORS linux-2.4.29/fs/cifs/AUTHORS
---- linux-2.4.29.old/fs/cifs/AUTHORS 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/AUTHORS 2004-07-14 00:25:04.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/AUTHORS
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/AUTHORS 2007-12-15 05:19:52.267399586 +0100
@@ -0,0 +1,37 @@
+Original Author
+===============
+
+And thanks to the IBM LTC and Power test teams and SuSE testers for
+finding multiple bugs during excellent stress test runs.
-diff -urN linux-2.4.29.old/fs/cifs/CHANGES linux-2.4.29/fs/cifs/CHANGES
---- linux-2.4.29.old/fs/cifs/CHANGES 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/CHANGES 2004-07-14 00:25:04.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/CHANGES
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/CHANGES 2007-12-15 05:19:52.271399815 +0100
@@ -0,0 +1,572 @@
+Version 1.20
+------------
+-----------
+Initial drop
+
-diff -urN linux-2.4.29.old/fs/cifs/cifs_debug.c linux-2.4.29/fs/cifs/cifs_debug.c
---- linux-2.4.29.old/fs/cifs/cifs_debug.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/cifs_debug.c 2004-07-14 00:25:04.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/cifs_debug.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/cifs_debug.c 2007-12-15 05:19:52.275400045 +0100
@@ -0,0 +1,797 @@
+/*
+ * fs/cifs_debug.c
+
+
+#endif
-diff -urN linux-2.4.29.old/fs/cifs/cifs_debug.h linux-2.4.29/fs/cifs/cifs_debug.h
---- linux-2.4.29.old/fs/cifs/cifs_debug.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/cifs_debug.h 2004-07-14 00:25:04.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/cifs_debug.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/cifs_debug.h 2007-12-15 05:19:52.279400271 +0100
@@ -0,0 +1,66 @@
+/*
+ *
+#endif /* _CIFS_DEBUG */
+
+#endif /* _H_CIFS_DEBUG */
-diff -urN linux-2.4.29.old/fs/cifs/cifsencrypt.c linux-2.4.29/fs/cifs/cifsencrypt.c
---- linux-2.4.29.old/fs/cifs/cifsencrypt.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/cifsencrypt.c 2004-07-14 00:25:04.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/cifsencrypt.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/cifsencrypt.c 2007-12-15 05:19:52.279400271 +0100
@@ -0,0 +1,204 @@
+/*
+ * fs/cifs/cifsencrypt.c
+
+ hmac_md5_final(v2_session_response,&context);
+}
-diff -urN linux-2.4.29.old/fs/cifs/cifserr.c linux-2.4.29/fs/cifs/cifserr.c
---- linux-2.4.29.old/fs/cifs/cifserr.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/cifserr.c 2004-07-14 00:25:04.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/cifserr.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/cifserr.c 2007-12-15 05:19:52.279400271 +0100
@@ -0,0 +1,70 @@
+/*
+ * fs/cifserr.c
+{
+ return map_cifs_error(error_class, error_code, FALSE);
+}
-diff -urN linux-2.4.29.old/fs/cifs/cifsfs.c linux-2.4.29/fs/cifs/cifsfs.c
---- linux-2.4.29.old/fs/cifs/cifsfs.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/cifsfs.c 2004-07-14 00:25:04.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/cifsfs.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/cifsfs.c 2007-12-15 05:19:52.279400271 +0100
@@ -0,0 +1,769 @@
+/*
+ * fs/cifs/cifsfs.c
+ ("VFS to access servers complying with the SNIA CIFS Specification e.g. Samba and Windows");
+module_init(init_cifs)
+module_exit(exit_cifs)
-diff -urN linux-2.4.29.old/fs/cifs/cifsfs.h linux-2.4.29/fs/cifs/cifsfs.h
---- linux-2.4.29.old/fs/cifs/cifsfs.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/cifsfs.h 2004-07-14 00:25:04.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/cifsfs.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/cifsfs.h 2007-12-15 05:19:52.279400271 +0100
@@ -0,0 +1,97 @@
+/*
+ * fs/cifs/cifsfs.h
+extern ssize_t cifs_listxattr(struct dentry *, char *, size_t);
+#define CIFS_VERSION "1.20"
+#endif /* _CIFSFS_H */
-diff -urN linux-2.4.29.old/fs/cifs/cifs_fs_sb.h linux-2.4.29/fs/cifs/cifs_fs_sb.h
---- linux-2.4.29.old/fs/cifs/cifs_fs_sb.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/cifs_fs_sb.h 2004-07-14 00:25:04.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/cifs_fs_sb.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/cifs_fs_sb.h 2007-12-15 05:19:52.283400500 +0100
@@ -0,0 +1,32 @@
+/*
+ * fs/cifs/cifs_fs_sb.h
+ mode_t mnt_dir_mode;
+};
+#endif /* _CIFS_FS_SB_H */
-diff -urN linux-2.4.29.old/fs/cifs/cifsglob.h linux-2.4.29/fs/cifs/cifsglob.h
---- linux-2.4.29.old/fs/cifs/cifsglob.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/cifsglob.h 2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/cifsglob.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/cifsglob.h 2007-12-15 05:19:52.283400500 +0100
@@ -0,0 +1,413 @@
+/*
+ * fs/cifs/cifsglob.h
+GLOBAL_EXTERN unsigned int sign_CIFS_PDUs; /* enable smb packet signing */
+GLOBAL_EXTERN unsigned int linuxExtEnabled; /* enable Linux/Unix CIFS extensions */
+
-diff -urN linux-2.4.29.old/fs/cifs/cifspdu.h linux-2.4.29/fs/cifs/cifspdu.h
---- linux-2.4.29.old/fs/cifs/cifspdu.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/cifspdu.h 2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/cifspdu.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/cifspdu.h 2007-12-15 05:19:52.283400500 +0100
@@ -0,0 +1,1793 @@
+/*
+ * fs/cifs/cifspdu.h
+#pragma pack() /* resume default structure packing */
+
+#endif /* _CIFSPDU_H */
-diff -urN linux-2.4.29.old/fs/cifs/cifsproto.h linux-2.4.29/fs/cifs/cifsproto.h
---- linux-2.4.29.old/fs/cifs/cifsproto.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/cifsproto.h 2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/cifsproto.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/cifsproto.h 2007-12-15 05:19:52.287400726 +0100
@@ -0,0 +1,254 @@
+/*
+ * fs/cifs/cifsproto.h
+ char * EAData, size_t size,
+ const struct nls_table *nls_codepage);
+#endif /* _CIFSPROTO_H */
-diff -urN linux-2.4.29.old/fs/cifs/cifssmb.c linux-2.4.29/fs/cifs/cifssmb.c
---- linux-2.4.29.old/fs/cifs/cifssmb.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/cifssmb.c 2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/cifssmb.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/cifssmb.c 2007-12-15 05:19:52.287400726 +0100
@@ -0,0 +1,3016 @@
+/*
+ * fs/cifs/cifssmb.c
+ return rc;
+}
+#endif
-diff -urN linux-2.4.29.old/fs/cifs/cifs_unicode.c linux-2.4.29/fs/cifs/cifs_unicode.c
---- linux-2.4.29.old/fs/cifs/cifs_unicode.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/cifs_unicode.c 2004-07-14 00:25:04.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/cifs_unicode.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/cifs_unicode.c 2007-12-15 05:19:52.291400955 +0100
@@ -0,0 +1,87 @@
+/*
+ * fs/cifs/cifs_unicode.c
+ return i;
+}
+
-diff -urN linux-2.4.29.old/fs/cifs/cifs_unicode.h linux-2.4.29/fs/cifs/cifs_unicode.h
---- linux-2.4.29.old/fs/cifs/cifs_unicode.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/cifs_unicode.h 2004-07-14 00:25:04.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/cifs_unicode.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/cifs_unicode.h 2007-12-15 05:19:52.291400955 +0100
@@ -0,0 +1,353 @@
+/*
+ * cifs_unicode: Unicode kernel case support
+}
+
+#endif
-diff -urN linux-2.4.29.old/fs/cifs/cifs_uniupr.h linux-2.4.29/fs/cifs/cifs_uniupr.h
---- linux-2.4.29.old/fs/cifs/cifs_uniupr.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/cifs_uniupr.h 2004-07-14 00:25:04.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/cifs_uniupr.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/cifs_uniupr.h 2007-12-15 05:19:52.291400955 +0100
@@ -0,0 +1,253 @@
+/*
+ * Copyright (c) International Business Machines Corp., 2000,2002
+ 0, 0, 0
+};
+#endif
-diff -urN linux-2.4.29.old/fs/cifs/connect.c linux-2.4.29/fs/cifs/connect.c
---- linux-2.4.29.old/fs/cifs/connect.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/connect.c 2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/connect.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/connect.c 2007-12-15 05:19:52.295401184 +0100
@@ -0,0 +1,2924 @@
+/*
+ * fs/cifs/connect.c
+ return rc;
+}
+
-diff -urN linux-2.4.29.old/fs/cifs/dir.c linux-2.4.29/fs/cifs/dir.c
---- linux-2.4.29.old/fs/cifs/dir.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/dir.c 2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/dir.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/dir.c 2007-12-15 05:19:52.295401184 +0100
@@ -0,0 +1,425 @@
+/*
+ * fs/cifs/dir.c
+/* d_delete: cifs_d_delete, *//* not needed except for debugging */
+ /* no need for d_hash, d_compare, d_release, d_iput ... yet. BB confirm this BB */
+};
-diff -urN linux-2.4.29.old/fs/cifs/file.c linux-2.4.29/fs/cifs/file.c
---- linux-2.4.29.old/fs/cifs/file.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/file.c 2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/file.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/file.c 2007-12-15 05:19:52.299401411 +0100
@@ -0,0 +1,2185 @@
+/*
+ * fs/cifs/file.c
+ .sync_page = cifs_sync_page,
+ /*.direct_IO = */
+};
-diff -urN linux-2.4.29.old/fs/cifs/inode.c linux-2.4.29/fs/cifs/inode.c
---- linux-2.4.29.old/fs/cifs/inode.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/inode.c 2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/inode.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/inode.c 2007-12-15 05:19:52.299401411 +0100
@@ -0,0 +1,1079 @@
+/*
+ * fs/cifs/inode.c
+ /* may have to add back in if and when safe distributed caching of
+ directories added e.g. via FindNotify */
+}
-diff -urN linux-2.4.29.old/fs/cifs/link.c linux-2.4.29/fs/cifs/link.c
---- linux-2.4.29.old/fs/cifs/link.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/link.c 2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/link.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/link.c 2007-12-15 05:19:52.299401411 +0100
@@ -0,0 +1,328 @@
+/*
+ * fs/cifs/link.c
+ FreeXid(xid);
+ return rc;
+}
-diff -urN linux-2.4.29.old/fs/cifs/Makefile linux-2.4.29/fs/cifs/Makefile
---- linux-2.4.29.old/fs/cifs/Makefile 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/Makefile 2004-07-14 00:25:04.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/Makefile
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/Makefile 2007-12-15 05:19:52.303401640 +0100
@@ -0,0 +1,10 @@
+#
+# Makefile for Linux CIFS VFS client
+obj-m := $(O_TARGET)
+
+include $(TOPDIR)/Rules.make
-diff -urN linux-2.4.29.old/fs/cifs/md4.c linux-2.4.29/fs/cifs/md4.c
---- linux-2.4.29.old/fs/cifs/md4.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/md4.c 2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/md4.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/md4.c 2007-12-15 05:19:52.303401640 +0100
@@ -0,0 +1,203 @@
+/*
+ Unix SMB/Netbios implementation.
+
+ A = B = C = D = 0;
+}
-diff -urN linux-2.4.29.old/fs/cifs/md5.c linux-2.4.29/fs/cifs/md5.c
---- linux-2.4.29.old/fs/cifs/md5.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/md5.c 2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/md5.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/md5.c 2007-12-15 05:19:52.303401640 +0100
@@ -0,0 +1,363 @@
+/*
+ * This code implements the MD5 message-digest algorithm.
+ }
+ hmac_md5_final(digest, &ctx);
+}
-diff -urN linux-2.4.29.old/fs/cifs/md5.h linux-2.4.29/fs/cifs/md5.h
---- linux-2.4.29.old/fs/cifs/md5.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/md5.h 2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/md5.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/md5.h 2007-12-15 05:19:52.303401640 +0100
@@ -0,0 +1,38 @@
+#ifndef MD5_H
+#define MD5_H
+void hmac_md5_final(unsigned char *digest, struct HMACMD5Context *ctx);
+void hmac_md5(unsigned char key[16], unsigned char *data, int data_len,
+ unsigned char *digest);
-diff -urN linux-2.4.29.old/fs/cifs/misc.c linux-2.4.29/fs/cifs/misc.c
---- linux-2.4.29.old/fs/cifs/misc.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/misc.c 2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/misc.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/misc.c 2007-12-15 05:19:52.307401866 +0100
@@ -0,0 +1,463 @@
+/*
+ * fs/cifs/misc.c
+ printk( " | %s\n", debug_line);
+ return;
+}
-diff -urN linux-2.4.29.old/fs/cifs/netmisc.c linux-2.4.29/fs/cifs/netmisc.c
---- linux-2.4.29.old/fs/cifs/netmisc.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/netmisc.c 2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/netmisc.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/netmisc.c 2007-12-15 05:19:52.307401866 +0100
@@ -0,0 +1,905 @@
+/*
+ * fs/cifs/netmisc.c
+ dce_time += NTFS_TIME_OFFSET;
+ return dce_time;
+}
-diff -urN linux-2.4.29.old/fs/cifs/nterr.c linux-2.4.29/fs/cifs/nterr.c
---- linux-2.4.29.old/fs/cifs/nterr.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/nterr.c 2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/nterr.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/nterr.c 2007-12-15 05:19:52.307401866 +0100
@@ -0,0 +1,687 @@
+/*
+ * Unix SMB/Netbios implementation.
+ {"STATUS_SOME_UNMAPPED", STATUS_SOME_UNMAPPED},
+ {NULL, 0}
+};
-diff -urN linux-2.4.29.old/fs/cifs/nterr.h linux-2.4.29/fs/cifs/nterr.h
---- linux-2.4.29.old/fs/cifs/nterr.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/nterr.h 2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/nterr.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/nterr.h 2007-12-15 05:19:52.311402095 +0100
@@ -0,0 +1,556 @@
+/*
+ Unix SMB/Netbios implementation.
+#define NT_STATUS_NO_SUCH_JOB 0xC0000000 | 0xEDE /* scheduler */
+
+#endif /* _NTERR_H */
-diff -urN linux-2.4.29.old/fs/cifs/ntlmssp.h linux-2.4.29/fs/cifs/ntlmssp.h
---- linux-2.4.29.old/fs/cifs/ntlmssp.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/ntlmssp.h 2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/ntlmssp.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/ntlmssp.h 2007-12-15 05:19:52.311402095 +0100
@@ -0,0 +1,101 @@
+/*
+ * fs/cifs/ntlmssp.h
+} AUTHENTICATE_MESSAGE, *PAUTHENTICATE_MESSAGE;
+
+#pragma pack() /* resume default structure packing */
-diff -urN linux-2.4.29.old/fs/cifs/README linux-2.4.29/fs/cifs/README
---- linux-2.4.29.old/fs/cifs/README 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/README 2004-07-14 00:25:04.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/README
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/README 2007-12-15 05:19:52.311402095 +0100
@@ -0,0 +1,356 @@
+The CIFS VFS support for Linux supports many advanced network filesystem
+features such as heirarchical dfs like namespace, hardlinks, locking and more.
+Windows 2000 server or Samba since it does not usually send "raw NTLMSSP"
+(instead it sends NTLMSSP encapsulated in SPNEGO/GSSAPI, which support is not
+complete in the CIFS VFS yet).
-diff -urN linux-2.4.29.old/fs/cifs/rfc1002pdu.h linux-2.4.29/fs/cifs/rfc1002pdu.h
---- linux-2.4.29.old/fs/cifs/rfc1002pdu.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/rfc1002pdu.h 2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/rfc1002pdu.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/rfc1002pdu.h 2007-12-15 05:19:52.311402095 +0100
@@ -0,0 +1,79 @@
+/*
+ * fs/cifs/rfc1002pdu.h
+
+#pragma pack() /* resume default structure packing */
+
-diff -urN linux-2.4.29.old/fs/cifs/smbdes.c linux-2.4.29/fs/cifs/smbdes.c
---- linux-2.4.29.old/fs/cifs/smbdes.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/smbdes.c 2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/smbdes.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/smbdes.c 2007-12-15 05:19:52.315402324 +0100
@@ -0,0 +1,408 @@
+/*
+ Unix SMB/Netbios implementation.
+ key2[0] = key[7];
+ smbhash(out + 8, in + 8, key2, forw);
+}
-diff -urN linux-2.4.29.old/fs/cifs/smbencrypt.c linux-2.4.29/fs/cifs/smbencrypt.c
---- linux-2.4.29.old/fs/cifs/smbencrypt.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/smbencrypt.c 2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/smbencrypt.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/smbencrypt.c 2007-12-15 05:19:52.315402324 +0100
@@ -0,0 +1,295 @@
+/*
+ Unix SMB/Netbios implementation.
+{
+ mdfour((unsigned char *) sess_key, (unsigned char *) kr, 16);
+}
-diff -urN linux-2.4.29.old/fs/cifs/smberr.c linux-2.4.29/fs/cifs/smberr.c
---- linux-2.4.29.old/fs/cifs/smberr.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/smberr.c 2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/smberr.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/smberr.c 2007-12-15 05:19:52.315402324 +0100
@@ -0,0 +1,240 @@
+/*
+ Unix SMB/Netbios implementation.
+ NTSTATUS status = map_nt_error_from_unix(error);
+ return ntstatus_to_werror(status);
+}
-diff -urN linux-2.4.29.old/fs/cifs/smberr.h linux-2.4.29/fs/cifs/smberr.h
---- linux-2.4.29.old/fs/cifs/smberr.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/smberr.h 2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/smberr.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/smberr.h 2007-12-15 05:19:52.315402324 +0100
@@ -0,0 +1,113 @@
+/*
+ * fs/cifs/smberr.h
+#define ERRpasswordExpired 2242
+#define ERRnetlogonNotStarted 2455
+#define ERRnosupport 0xFFFF
-diff -urN linux-2.4.29.old/fs/cifs/TODO linux-2.4.29/fs/cifs/TODO
---- linux-2.4.29.old/fs/cifs/TODO 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/TODO 2004-07-14 00:25:04.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/TODO
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/TODO 2007-12-15 05:19:52.315402324 +0100
@@ -0,0 +1,106 @@
+version 1.16 May 27, 2004
+
+4) More exhaustively test the recently added NT4 support against various
+NT4 service pack levels.
+
-diff -urN linux-2.4.29.old/fs/cifs/transport.c linux-2.4.29/fs/cifs/transport.c
---- linux-2.4.29.old/fs/cifs/transport.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/transport.c 2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/transport.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/transport.c 2007-12-15 05:19:52.319402550 +0100
@@ -0,0 +1,434 @@
+/*
+ * fs/cifs/transport.c
+
+ return rc;
+}
-diff -urN linux-2.4.29.old/fs/Config.in linux-2.4.29/fs/Config.in
---- linux-2.4.29.old/fs/Config.in 2005-03-21 19:30:22.000000000 +0100
-+++ linux-2.4.29/fs/Config.in 2005-03-21 19:36:51.000000000 +0100
-@@ -146,6 +146,10 @@
+Index: linux-2.4.35.4/fs/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/fs/Config.in 2007-12-15 05:19:49.287229757 +0100
++++ linux-2.4.35.4/fs/Config.in 2007-12-15 05:19:52.319402550 +0100
+@@ -153,6 +153,10 @@
define_bool CONFIG_LOCKD_V4 y
fi
dep_tristate 'SMB file system support (to mount Windows shares etc.)' CONFIG_SMB_FS $CONFIG_INET
if [ "$CONFIG_SMB_FS" != "n" ]; then
bool ' Use a default NLS' CONFIG_SMB_NLS_DEFAULT
-diff -urN linux-2.4.29.old/fs/Makefile linux-2.4.29/fs/Makefile
---- linux-2.4.29.old/fs/Makefile 2005-03-21 19:30:22.000000000 +0100
-+++ linux-2.4.29/fs/Makefile 2005-03-21 19:36:51.000000000 +0100
+Index: linux-2.4.35.4/fs/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/fs/Makefile 2007-12-15 05:19:48.639192828 +0100
++++ linux-2.4.35.4/fs/Makefile 2007-12-15 05:19:52.319402550 +0100
@@ -37,6 +37,7 @@
subdir-$(CONFIG_VFAT_FS) += vfat
subdir-$(CONFIG_BFS_FS) += bfs
subdir-$(CONFIG_DEVFS_FS) += devfs
subdir-$(CONFIG_HFSPLUS_FS) += hfsplus # Before hfs to find wrapped HFS+
subdir-$(CONFIG_HFS_FS) += hfs
-diff -urN linux-2.4.29.old/fs/nls/Config.in linux-2.4.29/fs/nls/Config.in
---- linux-2.4.29.old/fs/nls/Config.in 2003-08-25 13:44:43.000000000 +0200
-+++ linux-2.4.29/fs/nls/Config.in 2005-03-21 19:36:51.000000000 +0100
+Index: linux-2.4.35.4/fs/nls/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/fs/nls/Config.in 2007-12-15 05:19:42.058817832 +0100
++++ linux-2.4.35.4/fs/nls/Config.in 2007-12-15 05:19:52.319402550 +0100
@@ -11,6 +11,7 @@
# msdos and Joliet want NLS
-diff -urPX nopatch linux-2.4.26/Documentation/Configure.help linux/Documentation/Configure.help
---- linux-2.4.26/Documentation/Configure.help Sat Apr 17 02:10:25 2004
-+++ linux/Documentation/Configure.help Sat Apr 17 02:13:54 2004
-@@ -4622,6 +4622,12 @@
- will be called binfmt_elf.o. Saying M or N here is dangerous because
- some crucial programs on your system might be in ELF format.
+Index: linux-2.4.35.4/Documentation/Configure.help
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/Configure.help 2007-12-15 05:19:52.251398675 +0100
++++ linux-2.4.35.4/Documentation/Configure.help 2007-12-15 05:19:53.139449282 +0100
+@@ -4690,6 +4690,12 @@
+ ld.so (check the file <file:Documentation/Changes> for location and
+ latest version).
+ELF binaries with a.out format interpreters or a.out libraries
+CONFIG_BINFMT_ELF_AOUT
Kernel support for a.out binaries
CONFIG_BINFMT_AOUT
A.out (Assembler.OUTput) is a set of formats for libraries and
-@@ -4635,13 +4641,11 @@
+@@ -4703,13 +4709,11 @@
warrant removing support. However its removal is a good idea if you
wish to ensure that absolutely none of your programs will use this
older executable format. If you don't know what to answer at this
OSF/1 v4 readv/writev compatibility
CONFIG_OSF4_COMPAT
-diff -urPX nopatch linux-2.4.26/arch/alpha/config.in linux/arch/alpha/config.in
---- linux-2.4.26/arch/alpha/config.in Fri Feb 20 10:07:20 2004
-+++ linux/arch/alpha/config.in Sat Apr 17 02:13:54 2004
+Index: linux-2.4.35.4/arch/alpha/config.in
+===================================================================
+--- linux-2.4.35.4.orig/arch/alpha/config.in 2007-12-15 05:19:41.518787058 +0100
++++ linux-2.4.35.4/arch/alpha/config.in 2007-12-15 05:19:53.143449511 +0100
@@ -315,6 +315,9 @@
fi
tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
tristate 'Kernel support for Linux/Intel ELF binaries' CONFIG_BINFMT_EM86
source drivers/parport/Config.in
-diff -urPX nopatch linux-2.4.26/arch/alpha/defconfig linux/arch/alpha/defconfig
---- linux-2.4.26/arch/alpha/defconfig Fri Feb 20 10:07:20 2004
-+++ linux/arch/alpha/defconfig Sat Apr 17 02:13:54 2004
+Index: linux-2.4.35.4/arch/alpha/defconfig
+===================================================================
+--- linux-2.4.35.4.orig/arch/alpha/defconfig 2007-12-15 05:19:41.526787516 +0100
++++ linux-2.4.35.4/arch/alpha/defconfig 2007-12-15 05:19:53.143449511 +0100
@@ -72,6 +72,7 @@
# CONFIG_KCORE_AOUT is not set
# CONFIG_BINFMT_AOUT is not set
# CONFIG_BINFMT_MISC is not set
# CONFIG_BINFMT_EM86 is not set
-diff -urPX nopatch linux-2.4.26/arch/arm/config.in linux/arch/arm/config.in
---- linux-2.4.26/arch/arm/config.in Fri Feb 20 10:07:20 2004
-+++ linux/arch/arm/config.in Sat Apr 17 02:13:54 2004
+Index: linux-2.4.35.4/arch/arm/config.in
+===================================================================
+--- linux-2.4.35.4.orig/arch/arm/config.in 2007-12-15 05:19:41.534787971 +0100
++++ linux-2.4.35.4/arch/arm/config.in 2007-12-15 05:19:53.143449511 +0100
@@ -499,6 +499,9 @@
A.OUT CONFIG_KCORE_AOUT" ELF
tristate 'Kernel support for a.out binaries' CONFIG_BINFMT_AOUT
tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
dep_bool 'Power Management support (experimental)' CONFIG_PM $CONFIG_EXPERIMENTAL
dep_tristate 'RISC OS personality' CONFIG_ARTHUR $CONFIG_CPU_32
-diff -urPX nopatch linux-2.4.26/arch/arm/defconfig linux/arch/arm/defconfig
---- linux-2.4.26/arch/arm/defconfig Fri Feb 20 10:07:21 2004
-+++ linux/arch/arm/defconfig Sat Apr 17 02:13:54 2004
+Index: linux-2.4.35.4/arch/arm/defconfig
+===================================================================
+--- linux-2.4.35.4.orig/arch/arm/defconfig 2007-12-15 05:19:41.542788427 +0100
++++ linux-2.4.35.4/arch/arm/defconfig 2007-12-15 05:19:53.143449511 +0100
@@ -83,8 +83,9 @@
CONFIG_NWFPE=y
CONFIG_KCORE_ELF=y
# CONFIG_BINFMT_MISC is not set
# CONFIG_PM is not set
# CONFIG_ARTHUR is not set
-diff -urPX nopatch linux-2.4.26/arch/cris/config.in linux/arch/cris/config.in
---- linux-2.4.26/arch/cris/config.in Fri Feb 20 10:07:21 2004
-+++ linux/arch/cris/config.in Sat Apr 17 02:13:54 2004
+Index: linux-2.4.35.4/arch/cris/config.in
+===================================================================
+--- linux-2.4.35.4.orig/arch/cris/config.in 2007-12-15 05:19:41.550788882 +0100
++++ linux-2.4.35.4/arch/cris/config.in 2007-12-15 05:19:53.143449511 +0100
@@ -31,6 +31,9 @@
bool 'Sysctl support' CONFIG_SYSCTL
string 'Kernel command line' CONFIG_ETRAX_CMDLINE "root=/dev/mtdblock3"
-diff -urPX nopatch linux-2.4.26/arch/cris/defconfig linux/arch/cris/defconfig
---- linux-2.4.26/arch/cris/defconfig Fri Feb 20 10:07:21 2004
-+++ linux/arch/cris/defconfig Sat Apr 17 02:13:54 2004
+Index: linux-2.4.35.4/arch/cris/defconfig
+===================================================================
+--- linux-2.4.35.4.orig/arch/cris/defconfig 2007-12-15 05:19:41.554789111 +0100
++++ linux-2.4.35.4/arch/cris/defconfig 2007-12-15 05:19:53.147449737 +0100
@@ -18,6 +18,7 @@
# CONFIG_BSD_PROCESS_ACCT is not set
# CONFIG_SYSCTL is not set
# CONFIG_ETRAX_KGDB is not set
# CONFIG_ETRAX_WATCHDOG is not set
-diff -urPX nopatch linux-2.4.26/arch/i386/config.in linux/arch/i386/config.in
---- linux-2.4.26/arch/i386/config.in Fri Feb 20 10:07:21 2004
-+++ linux/arch/i386/config.in Sat Apr 17 02:13:54 2004
-@@ -327,6 +327,9 @@
+Index: linux-2.4.35.4/arch/i386/config.in
+===================================================================
+--- linux-2.4.35.4.orig/arch/i386/config.in 2007-12-15 05:19:41.562789566 +0100
++++ linux-2.4.35.4/arch/i386/config.in 2007-12-15 05:19:53.147449737 +0100
+@@ -329,6 +329,9 @@
fi
tristate 'Kernel support for a.out binaries' CONFIG_BINFMT_AOUT
bool 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF
tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
bool 'Select task to kill on out of memory condition' CONFIG_OOM_KILLER
-diff -urPX nopatch linux-2.4.26/arch/i386/defconfig linux/arch/i386/defconfig
---- linux-2.4.26/arch/i386/defconfig Sat Apr 17 02:10:25 2004
-+++ linux/arch/i386/defconfig Sat Apr 17 02:23:27 2004
-@@ -110,9 +110,10 @@
+Index: linux-2.4.35.4/arch/i386/defconfig
+===================================================================
+--- linux-2.4.35.4.orig/arch/i386/defconfig 2007-12-15 05:19:41.570790022 +0100
++++ linux-2.4.35.4/arch/i386/defconfig 2007-12-15 05:19:53.147449737 +0100
+@@ -115,9 +115,10 @@
CONFIG_SYSCTL=y
CONFIG_KCORE_ELF=y
# CONFIG_KCORE_AOUT is not set
# CONFIG_OOM_KILLER is not set
CONFIG_PM=y
# CONFIG_APM is not set
-diff -urPX nopatch linux-2.4.26/arch/ia64/config.in linux/arch/ia64/config.in
---- linux-2.4.26/arch/ia64/config.in Fri Feb 20 10:07:21 2004
-+++ linux/arch/ia64/config.in Sat Apr 17 02:13:54 2004
+Index: linux-2.4.35.4/arch/ia64/config.in
+===================================================================
+--- linux-2.4.35.4.orig/arch/ia64/config.in 2007-12-15 05:19:41.578790477 +0100
++++ linux-2.4.35.4/arch/ia64/config.in 2007-12-15 05:19:53.147449737 +0100
@@ -124,6 +124,9 @@
bool 'BSD Process Accounting' CONFIG_BSD_PROCESS_ACCT
bool 'Sysctl support' CONFIG_SYSCTL
tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
if [ "$CONFIG_IA64_HP_SIM" = "n" ]; then
-diff -urPX nopatch linux-2.4.26/arch/ia64/defconfig linux/arch/ia64/defconfig
---- linux-2.4.26/arch/ia64/defconfig Fri Feb 20 10:07:21 2004
-+++ linux/arch/ia64/defconfig Sat Apr 17 02:13:54 2004
+Index: linux-2.4.35.4/arch/ia64/defconfig
+===================================================================
+--- linux-2.4.35.4.orig/arch/ia64/defconfig 2007-12-15 05:19:41.586790935 +0100
++++ linux-2.4.35.4/arch/ia64/defconfig 2007-12-15 05:19:53.151449966 +0100
@@ -60,6 +60,7 @@
# CONFIG_BSD_PROCESS_ACCT is not set
CONFIG_SYSCTL=y
# CONFIG_BINFMT_MISC is not set
CONFIG_ACPI=y
CONFIG_ACPI_EFI=y
-diff -urPX nopatch linux-2.4.26/arch/m68k/config.in linux/arch/m68k/config.in
---- linux-2.4.26/arch/m68k/config.in Fri Feb 20 10:07:22 2004
-+++ linux/arch/m68k/config.in Sat Apr 17 02:13:55 2004
+Index: linux-2.4.35.4/arch/m68k/config.in
+===================================================================
+--- linux-2.4.35.4.orig/arch/m68k/config.in 2007-12-15 05:19:41.594791391 +0100
++++ linux-2.4.35.4/arch/m68k/config.in 2007-12-15 05:19:53.151449966 +0100
@@ -99,6 +99,9 @@
fi
tristate 'Kernel support for a.out binaries' CONFIG_BINFMT_AOUT
tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
if [ "$CONFIG_AMIGA" = "y" ]; then
-diff -urPX nopatch linux-2.4.26/arch/m68k/defconfig linux/arch/m68k/defconfig
---- linux-2.4.26/arch/m68k/defconfig Fri Feb 20 10:07:22 2004
-+++ linux/arch/m68k/defconfig Sat Apr 17 02:13:55 2004
+Index: linux-2.4.35.4/arch/m68k/defconfig
+===================================================================
+--- linux-2.4.35.4.orig/arch/m68k/defconfig 2007-12-15 05:19:41.602791846 +0100
++++ linux-2.4.35.4/arch/m68k/defconfig 2007-12-15 05:19:53.151449966 +0100
@@ -44,8 +44,9 @@
CONFIG_SYSCTL=y
CONFIG_KCORE_ELF=y
# CONFIG_BINFMT_MISC is not set
CONFIG_ZORRO=y
# CONFIG_AMIGA_PCMCIA is not set
-diff -urPX nopatch linux-2.4.26/arch/mips/config-shared.in linux/arch/mips/config-shared.in
---- linux-2.4.26/arch/mips/config-shared.in Fri Feb 20 10:07:22 2004
-+++ linux/arch/mips/config-shared.in Sat Apr 17 02:13:55 2004
-@@ -944,6 +944,9 @@
+Index: linux-2.4.35.4/arch/mips/config-shared.in
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/config-shared.in 2007-12-15 05:19:44.814974898 +0100
++++ linux-2.4.35.4/arch/mips/config-shared.in 2007-12-15 05:19:53.151449966 +0100
+@@ -873,6 +873,9 @@
define_bool CONFIG_KCORE_AOUT n
define_bool CONFIG_BINFMT_AOUT n
bool 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF
dep_bool 'Kernel support for Linux/MIPS 32-bit binary compatibility' CONFIG_MIPS32_COMPAT $CONFIG_MIPS64
dep_bool 'Kernel support for o32 binaries' CONFIG_MIPS32_O32 $CONFIG_MIPS32_COMPAT
dep_bool 'Kernel support for n32 binaries' CONFIG_MIPS32_N32 $CONFIG_MIPS32_COMPAT
-diff -urPX nopatch linux-2.4.26/arch/mips/defconfig linux/arch/mips/defconfig
---- linux-2.4.26/arch/mips/defconfig Fri Feb 20 10:07:22 2004
-+++ linux/arch/mips/defconfig Sat Apr 17 02:13:55 2004
-@@ -139,6 +139,7 @@
+Index: linux-2.4.35.4/arch/mips/defconfig
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig 2007-12-15 05:19:44.814974898 +0100
++++ linux-2.4.35.4/arch/mips/defconfig 2007-12-15 05:19:53.155450196 +0100
+@@ -143,6 +143,7 @@
# CONFIG_KCORE_AOUT is not set
# CONFIG_BINFMT_AOUT is not set
CONFIG_BINFMT_ELF=y
# CONFIG_MIPS32_COMPAT is not set
# CONFIG_MIPS32_O32 is not set
# CONFIG_MIPS32_N32 is not set
-diff -urPX nopatch linux-2.4.26/arch/mips/kernel/irixelf.c linux/arch/mips/kernel/irixelf.c
---- linux-2.4.26/arch/mips/kernel/irixelf.c Mon Aug 25 11:44:40 2003
-+++ linux/arch/mips/kernel/irixelf.c Sat Apr 17 02:13:55 2004
+Index: linux-2.4.35.4/arch/mips/kernel/irixelf.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/kernel/irixelf.c 2007-12-15 05:19:41.626793215 +0100
++++ linux-2.4.35.4/arch/mips/kernel/irixelf.c 2007-12-15 05:19:53.155450196 +0100
@@ -8,6 +8,7 @@
* Copyright 1993, 1994: Eric Youngdale (ericy@cais.com).
*/
irix_core_dump, PAGE_SIZE
};
-@@ -787,6 +793,7 @@
+@@ -794,6 +800,7 @@
goto out;
}
/* This is really simpleminded and specialized - we are loading an
* a.out library that is given an ELF header.
*/
-@@ -863,6 +870,7 @@
+@@ -873,6 +880,7 @@
kfree(elf_phdata);
return 0;
}
/* Called through irix_syssgi() to map an elf image given an FD,
* a phdr ptr USER_PHDRP in userspace, and a count CNT telling how many
-diff -urPX nopatch linux-2.4.26/arch/mips64/defconfig linux/arch/mips64/defconfig
---- linux-2.4.26/arch/mips64/defconfig Fri Feb 20 10:07:24 2004
-+++ linux/arch/mips64/defconfig Sat Apr 17 02:13:55 2004
-@@ -137,6 +137,7 @@
+Index: linux-2.4.35.4/arch/mips64/defconfig
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/defconfig 2007-12-15 05:19:44.874978317 +0100
++++ linux-2.4.35.4/arch/mips64/defconfig 2007-12-15 05:19:53.155450196 +0100
+@@ -147,6 +147,7 @@
# CONFIG_KCORE_AOUT is not set
# CONFIG_BINFMT_AOUT is not set
CONFIG_BINFMT_ELF=y
CONFIG_MIPS32_COMPAT=y
CONFIG_MIPS32_O32=y
# CONFIG_MIPS32_N32 is not set
-diff -urPX nopatch linux-2.4.26/arch/parisc/config.in linux/arch/parisc/config.in
---- linux-2.4.26/arch/parisc/config.in Fri Feb 20 10:07:25 2004
-+++ linux/arch/parisc/config.in Sat Apr 17 02:13:55 2004
+Index: linux-2.4.35.4/arch/parisc/config.in
+===================================================================
+--- linux-2.4.35.4.orig/arch/parisc/config.in 2007-12-15 05:19:41.638793897 +0100
++++ linux-2.4.35.4/arch/parisc/config.in 2007-12-15 05:19:53.155450196 +0100
@@ -89,6 +89,9 @@
bool 'Sysctl support' CONFIG_SYSCTL
define_bool CONFIG_KCORE_ELF y
tristate 'Kernel support for SOM binaries' CONFIG_BINFMT_SOM
tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
-diff -urPX nopatch linux-2.4.26/arch/parisc/defconfig linux/arch/parisc/defconfig
---- linux-2.4.26/arch/parisc/defconfig Fri Feb 20 10:07:25 2004
-+++ linux/arch/parisc/defconfig Sat Apr 17 02:13:55 2004
+Index: linux-2.4.35.4/arch/parisc/defconfig
+===================================================================
+--- linux-2.4.35.4.orig/arch/parisc/defconfig 2007-12-15 05:19:41.646794355 +0100
++++ linux-2.4.35.4/arch/parisc/defconfig 2007-12-15 05:19:53.159450422 +0100
@@ -56,6 +56,7 @@
CONFIG_SYSCTL=y
CONFIG_KCORE_ELF=y
CONFIG_BINFMT_SOM=y
# CONFIG_BINFMT_MISC is not set
# CONFIG_PM is not set
-diff -urPX nopatch linux-2.4.26/arch/ppc/config.in linux/arch/ppc/config.in
---- linux-2.4.26/arch/ppc/config.in Sat Apr 17 02:10:25 2004
-+++ linux/arch/ppc/config.in Sat Apr 17 02:13:55 2004
+Index: linux-2.4.35.4/arch/ppc/config.in
+===================================================================
+--- linux-2.4.35.4.orig/arch/ppc/config.in 2007-12-15 05:19:41.654794810 +0100
++++ linux-2.4.35.4/arch/ppc/config.in 2007-12-15 05:19:53.159450422 +0100
@@ -384,6 +384,7 @@
fi
define_bool CONFIG_BINFMT_ELF y
tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
bool 'Select task to kill on out of memory condition' CONFIG_OOM_KILLER
-diff -urPX nopatch linux-2.4.26/arch/ppc/defconfig linux/arch/ppc/defconfig
---- linux-2.4.26/arch/ppc/defconfig Fri Feb 20 10:07:25 2004
-+++ linux/arch/ppc/defconfig Sat Apr 17 02:13:55 2004
+Index: linux-2.4.35.4/arch/ppc/defconfig
+===================================================================
+--- linux-2.4.35.4.orig/arch/ppc/defconfig 2007-12-15 05:19:41.662795265 +0100
++++ linux-2.4.35.4/arch/ppc/defconfig 2007-12-15 05:19:53.159450422 +0100
@@ -59,7 +59,8 @@
CONFIG_KCORE_ELF=y
CONFIG_BINFMT_ELF=y
# CONFIG_OOM_KILLER is not set
CONFIG_PCI_NAMES=y
CONFIG_HOTPLUG=y
-diff -urPX nopatch linux-2.4.26/arch/ppc64/config.in linux/arch/ppc64/config.in
---- linux-2.4.26/arch/ppc64/config.in Fri Feb 20 10:07:25 2004
-+++ linux/arch/ppc64/config.in Sat Apr 17 02:13:55 2004
+Index: linux-2.4.35.4/arch/ppc64/config.in
+===================================================================
+--- linux-2.4.35.4.orig/arch/ppc64/config.in 2007-12-15 05:19:41.670795721 +0100
++++ linux-2.4.35.4/arch/ppc64/config.in 2007-12-15 05:19:53.159450422 +0100
@@ -82,6 +82,9 @@
fi
tristate 'Kernel support for 32 bit ELF binaries' CONFIG_BINFMT_ELF32
-diff -urPX nopatch linux-2.4.26/arch/ppc64/defconfig linux/arch/ppc64/defconfig
---- linux-2.4.26/arch/ppc64/defconfig Fri Feb 20 10:07:25 2004
-+++ linux/arch/ppc64/defconfig Sat Apr 17 02:13:55 2004
+Index: linux-2.4.35.4/arch/ppc64/defconfig
+===================================================================
+--- linux-2.4.35.4.orig/arch/ppc64/defconfig 2007-12-15 05:19:41.678796176 +0100
++++ linux-2.4.35.4/arch/ppc64/defconfig 2007-12-15 05:19:53.163450651 +0100
@@ -56,6 +56,7 @@
# CONFIG_BSD_PROCESS_ACCT is not set
CONFIG_KCORE_ELF=y
CONFIG_BINFMT_ELF32=y
# CONFIG_BINFMT_MISC is not set
CONFIG_PCI_NAMES=y
-diff -urPX nopatch linux-2.4.26/arch/s390/config.in linux/arch/s390/config.in
---- linux-2.4.26/arch/s390/config.in Fri Nov 28 18:26:19 2003
-+++ linux/arch/s390/config.in Sat Apr 17 02:13:55 2004
+Index: linux-2.4.35.4/arch/s390/config.in
+===================================================================
+--- linux-2.4.35.4.orig/arch/s390/config.in 2007-12-15 05:19:41.686796634 +0100
++++ linux-2.4.35.4/arch/s390/config.in 2007-12-15 05:19:53.163450651 +0100
@@ -58,6 +58,9 @@
bool 'Sysctl support' CONFIG_SYSCTL
define_bool CONFIG_KCORE_ELF y
tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
bool 'Show crashed user process info' CONFIG_PROCESS_DEBUG
bool 'Pseudo page fault support' CONFIG_PFAULT
-diff -urPX nopatch linux-2.4.26/arch/s390/defconfig linux/arch/s390/defconfig
---- linux-2.4.26/arch/s390/defconfig Fri Feb 20 10:07:26 2004
-+++ linux/arch/s390/defconfig Sat Apr 17 02:13:55 2004
+Index: linux-2.4.35.4/arch/s390/defconfig
+===================================================================
+--- linux-2.4.35.4.orig/arch/s390/defconfig 2007-12-15 05:19:41.694797090 +0100
++++ linux-2.4.35.4/arch/s390/defconfig 2007-12-15 05:19:53.163450651 +0100
@@ -46,6 +46,7 @@
CONFIG_SYSCTL=y
CONFIG_KCORE_ELF=y
# CONFIG_BINFMT_MISC is not set
# CONFIG_PROCESS_DEBUG is not set
CONFIG_PFAULT=y
-diff -urPX nopatch linux-2.4.26/arch/s390x/config.in linux/arch/s390x/config.in
---- linux-2.4.26/arch/s390x/config.in Fri Nov 28 18:26:19 2003
-+++ linux/arch/s390x/config.in Sat Apr 17 02:13:55 2004
+Index: linux-2.4.35.4/arch/s390x/config.in
+===================================================================
+--- linux-2.4.35.4.orig/arch/s390x/config.in 2007-12-15 05:19:41.698797316 +0100
++++ linux-2.4.35.4/arch/s390x/config.in 2007-12-15 05:19:53.163450651 +0100
@@ -61,6 +61,9 @@
bool 'Sysctl support' CONFIG_SYSCTL
define_bool CONFIG_KCORE_ELF y
tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
bool 'Show crashed user process info' CONFIG_PROCESS_DEBUG
bool 'Pseudo page fault support' CONFIG_PFAULT
-diff -urPX nopatch linux-2.4.26/arch/s390x/defconfig linux/arch/s390x/defconfig
---- linux-2.4.26/arch/s390x/defconfig Fri Feb 20 10:07:26 2004
-+++ linux/arch/s390x/defconfig Sat Apr 17 02:13:55 2004
+Index: linux-2.4.35.4/arch/s390x/defconfig
+===================================================================
+--- linux-2.4.35.4.orig/arch/s390x/defconfig 2007-12-15 05:19:41.706797774 +0100
++++ linux-2.4.35.4/arch/s390x/defconfig 2007-12-15 05:19:53.163450651 +0100
@@ -47,6 +47,7 @@
CONFIG_SYSCTL=y
CONFIG_KCORE_ELF=y
# CONFIG_BINFMT_MISC is not set
# CONFIG_PROCESS_DEBUG is not set
CONFIG_PFAULT=y
-diff -urPX nopatch linux-2.4.26/arch/sh/config.in linux/arch/sh/config.in
---- linux-2.4.26/arch/sh/config.in Fri Feb 20 10:07:26 2004
-+++ linux/arch/sh/config.in Sat Apr 17 02:13:55 2004
+Index: linux-2.4.35.4/arch/sh/config.in
+===================================================================
+--- linux-2.4.35.4.orig/arch/sh/config.in 2007-12-15 05:19:41.714798229 +0100
++++ linux-2.4.35.4/arch/sh/config.in 2007-12-15 05:19:53.163450651 +0100
@@ -283,6 +283,9 @@
A.OUT CONFIG_KCORE_AOUT" ELF
fi
tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
bool 'Select task to kill on out of memory condition' CONFIG_OOM_KILLER
-diff -urPX nopatch linux-2.4.26/arch/sh/defconfig linux/arch/sh/defconfig
---- linux-2.4.26/arch/sh/defconfig Fri Feb 20 10:07:26 2004
-+++ linux/arch/sh/defconfig Sat Apr 17 02:13:55 2004
+Index: linux-2.4.35.4/arch/sh/defconfig
+===================================================================
+--- linux-2.4.35.4.orig/arch/sh/defconfig 2007-12-15 05:19:41.722798685 +0100
++++ linux-2.4.35.4/arch/sh/defconfig 2007-12-15 05:19:53.167450880 +0100
@@ -48,6 +48,7 @@
CONFIG_KCORE_ELF=y
# CONFIG_KCORE_AOUT is not set
# CONFIG_BINFMT_MISC is not set
#
-diff -urPX nopatch linux-2.4.26/arch/sparc/config.in linux/arch/sparc/config.in
---- linux-2.4.26/arch/sparc/config.in Fri Feb 20 10:07:26 2004
-+++ linux/arch/sparc/config.in Sat Apr 17 02:13:55 2004
+Index: linux-2.4.35.4/arch/sparc/config.in
+===================================================================
+--- linux-2.4.35.4.orig/arch/sparc/config.in 2007-12-15 05:19:41.730799140 +0100
++++ linux-2.4.35.4/arch/sparc/config.in 2007-12-15 05:19:53.167450880 +0100
@@ -74,6 +74,9 @@
fi
tristate 'Kernel support for a.out binaries' CONFIG_BINFMT_AOUT
tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
bool 'SunOS binary emulation' CONFIG_SUNOS_EMUL
bool 'Select task to kill on out of memory condition' CONFIG_OOM_KILLER
-diff -urPX nopatch linux-2.4.26/arch/sparc/defconfig linux/arch/sparc/defconfig
---- linux-2.4.26/arch/sparc/defconfig Sat Apr 17 02:10:25 2004
-+++ linux/arch/sparc/defconfig Sat Apr 17 02:13:55 2004
+Index: linux-2.4.35.4/arch/sparc/defconfig
+===================================================================
+--- linux-2.4.35.4.orig/arch/sparc/defconfig 2007-12-15 05:19:41.738799596 +0100
++++ linux-2.4.35.4/arch/sparc/defconfig 2007-12-15 05:19:53.167450880 +0100
@@ -49,9 +49,10 @@
# CONFIG_BSD_PROCESS_ACCT is not set
CONFIG_SYSCTL=y
CONFIG_SUNOS_EMUL=y
# CONFIG_OOM_KILLER is not set
-diff -urPX nopatch linux-2.4.26/arch/sparc64/config.in linux/arch/sparc64/config.in
---- linux-2.4.26/arch/sparc64/config.in Fri Feb 20 10:07:26 2004
-+++ linux/arch/sparc64/config.in Sat Apr 17 02:13:55 2004
-@@ -77,6 +77,9 @@
+Index: linux-2.4.35.4/arch/sparc64/config.in
+===================================================================
+--- linux-2.4.35.4.orig/arch/sparc64/config.in 2007-12-15 05:19:41.742799824 +0100
++++ linux-2.4.35.4/arch/sparc64/config.in 2007-12-15 05:19:53.167450880 +0100
+@@ -79,6 +79,9 @@
bool ' Kernel support for 32-bit (ie. SunOS) a.out binaries' CONFIG_BINFMT_AOUT32
fi
bool 'Kernel support for 64-bit ELF binaries' CONFIG_BINFMT_ELF
tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
bool 'SunOS binary emulation' CONFIG_SUNOS_EMUL
if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
-diff -urPX nopatch linux-2.4.26/arch/sparc64/defconfig linux/arch/sparc64/defconfig
---- linux-2.4.26/arch/sparc64/defconfig Sat Apr 17 02:10:26 2004
-+++ linux/arch/sparc64/defconfig Sat Apr 17 02:13:55 2004
-@@ -56,7 +56,8 @@
+Index: linux-2.4.35.4/arch/sparc64/defconfig
+===================================================================
+--- linux-2.4.35.4.orig/arch/sparc64/defconfig 2007-12-15 05:19:41.750800280 +0100
++++ linux-2.4.35.4/arch/sparc64/defconfig 2007-12-15 05:19:53.167450880 +0100
+@@ -70,7 +70,8 @@
CONFIG_BINFMT_ELF32=y
# CONFIG_BINFMT_AOUT32 is not set
CONFIG_BINFMT_ELF=y
# CONFIG_SUNOS_EMUL is not set
CONFIG_SOLARIS_EMUL=m
# CONFIG_OOM_KILLER is not set
-diff -urPX nopatch linux-2.4.26/arch/x86_64/config.in linux/arch/x86_64/config.in
---- linux-2.4.26/arch/x86_64/config.in Sat Apr 17 02:10:26 2004
-+++ linux/arch/x86_64/config.in Sat Apr 17 02:13:55 2004
+Index: linux-2.4.35.4/arch/x86_64/config.in
+===================================================================
+--- linux-2.4.35.4.orig/arch/x86_64/config.in 2007-12-15 05:19:41.758800735 +0100
++++ linux-2.4.35.4/arch/x86_64/config.in 2007-12-15 05:19:53.171451107 +0100
@@ -118,6 +118,9 @@
fi
#tristate 'Kernel support for a.out binaries' CONFIG_BINFMT_AOUT
tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
bool 'Power Management support' CONFIG_PM
-diff -urPX nopatch linux-2.4.26/arch/x86_64/defconfig linux/arch/x86_64/defconfig
---- linux-2.4.26/arch/x86_64/defconfig Sat Apr 17 02:10:26 2004
-+++ linux/arch/x86_64/defconfig Sat Apr 17 02:13:55 2004
+Index: linux-2.4.35.4/arch/x86_64/defconfig
+===================================================================
+--- linux-2.4.35.4.orig/arch/x86_64/defconfig 2007-12-15 05:19:41.766801193 +0100
++++ linux-2.4.35.4/arch/x86_64/defconfig 2007-12-15 05:19:53.171451107 +0100
@@ -67,6 +67,7 @@
CONFIG_SYSCTL=y
CONFIG_KCORE_ELF=y
# CONFIG_BINFMT_MISC is not set
CONFIG_PM=y
CONFIG_IA32_EMULATION=y
-diff -urPX nopatch linux-2.4.26/fs/binfmt_elf.c linux/fs/binfmt_elf.c
---- linux-2.4.26/fs/binfmt_elf.c Sat Apr 17 02:10:31 2004
-+++ linux/fs/binfmt_elf.c Sat Apr 17 02:13:55 2004
+Index: linux-2.4.35.4/fs/binfmt_elf.c
+===================================================================
+--- linux-2.4.35.4.orig/fs/binfmt_elf.c 2007-12-15 05:19:45.006985841 +0100
++++ linux-2.4.35.4/fs/binfmt_elf.c 2007-12-15 05:19:53.171451107 +0100
@@ -9,6 +9,7 @@
* Copyright 1993, 1994: Eric Youngdale (ericy@cais.com).
*/
static unsigned long elf_map (struct file *, unsigned long, struct elf_phdr *, int, int);
extern int dump_fpu (struct pt_regs *, elf_fpregset_t *);
extern void dump_thread(struct pt_regs *, struct user *);
-@@ -73,8 +76,14 @@
- #define ELF_PAGEOFFSET(_v) ((_v) & (ELF_MIN_ALIGN-1))
+@@ -74,7 +77,13 @@
#define ELF_PAGEALIGN(_v) (((_v) + ELF_MIN_ALIGN - 1) & ~(ELF_MIN_ALIGN - 1))
--static struct linux_binfmt elf_format = {
+ static struct linux_binfmt elf_format = {
- NULL, THIS_MODULE, load_elf_binary, load_elf_library, elf_core_dump, ELF_EXEC_PAGESIZE
-+static struct linux_binfmt elf_format = {
+ NULL, THIS_MODULE, load_elf_binary,
+#ifdef CONFIG_BINFMT_ELF_AOUT
+ load_elf_library,
+ elf_core_dump, ELF_EXEC_PAGESIZE
};
- #define BAD_ADDR(x) ((unsigned long)(x) > TASK_SIZE)
-@@ -369,6 +378,7 @@
+ #define BAD_ADDR(x) ((unsigned long)(x) >= TASK_SIZE)
+@@ -404,6 +413,7 @@
return error;
}
static unsigned long load_aout_interp(struct exec * interp_ex,
struct file * interpreter)
{
-@@ -413,6 +423,7 @@
+@@ -451,6 +461,7 @@
out:
return elf_entry;
}
/*
* These are the functions used to load ELF style executables and shared
-@@ -420,7 +431,9 @@
+@@ -458,7 +469,9 @@
*/
#define INTERPRETER_NONE 0
#define INTERPRETER_ELF 2
-@@ -444,7 +457,9 @@
+@@ -482,7 +495,9 @@
struct elfhdr elf_ex;
struct elfhdr interp_elf_ex;
struct exec interp_ex;
struct files_struct *files;
/* Get the exec-header */
-@@ -556,6 +571,7 @@
+@@ -612,6 +627,7 @@
/* Some simple consistency checks for the interpreter */
if (elf_interpreter) {
interpreter_type = INTERPRETER_ELF | INTERPRETER_AOUT;
/* Now figure out which format our binary is */
-@@ -563,6 +579,9 @@
+@@ -619,6 +635,9 @@
(N_MAGIC(interp_ex) != ZMAGIC) &&
(N_MAGIC(interp_ex) != QMAGIC))
interpreter_type = INTERPRETER_ELF;
if (memcmp(interp_elf_ex.e_ident, ELFMAG, SELFMAG) != 0)
interpreter_type &= ~INTERPRETER_ELF;
-@@ -571,6 +590,7 @@
+@@ -627,6 +646,7 @@
if (!interpreter_type)
goto out_free_dentry;
/* Make sure only one type was selected */
if ((interpreter_type & INTERPRETER_ELF) &&
interpreter_type != INTERPRETER_ELF) {
-@@ -578,6 +598,7 @@
+@@ -634,6 +654,7 @@
// printk(KERN_WARNING "ELF: Ambiguous type, using ELF\n");
interpreter_type = INTERPRETER_ELF;
}
/* Verify the interpreter has a valid arch */
if ((interpreter_type == INTERPRETER_ELF) &&
!elf_check_arch(&interp_elf_ex))
-@@ -590,6 +611,7 @@
+@@ -651,6 +672,7 @@
/* OK, we are done with that, now set up the arg stuff,
and then start this sucker up */
if (!bprm->sh_bang) {
char * passed_p;
-@@ -605,6 +627,7 @@
- }
- }
+@@ -669,6 +691,7 @@
+ /* Executables without an interpreter also need a personality */
+ SET_PERSONALITY(elf_ex, ibcs2_interpreter);
}
+#endif
/* Flush all traces of the currently running executable */
retval = flush_old_exec(bprm);
-@@ -721,10 +744,12 @@
- end_data += load_bias;
+@@ -817,10 +840,12 @@
+ padzero(elf_bss);
if (elf_interpreter) {
+#ifdef CONFIG_BINFMT_ELF_AOUT
elf_entry = load_elf_interp(&interp_elf_ex,
interpreter,
&interp_load_addr);
-@@ -743,7 +768,9 @@
+@@ -849,7 +874,9 @@
kfree(elf_phdata);
sys_close(elf_exec_fileno);
set_binfmt(&elf_format);
-@@ -757,10 +784,14 @@
+@@ -863,10 +890,14 @@
&elf_ex,
load_addr, load_bias,
interp_load_addr,
current->mm->start_brk = current->mm->brk = elf_brk;
current->mm->end_code = end_code;
current->mm->start_code = start_code;
-@@ -838,9 +869,9 @@
+@@ -937,9 +968,9 @@
goto out;
}
static int load_elf_library(struct file *file)
{
struct elf_phdr *elf_phdata;
-@@ -911,6 +942,7 @@
+@@ -1016,6 +1047,7 @@
out:
return error;
}
/*
* Note that some platforms still use traditional core dumps and not
-diff -urPX nopatch linux-2.4.26/fs/exec.c linux/fs/exec.c
---- linux-2.4.26/fs/exec.c Fri Feb 20 10:07:36 2004
-+++ linux/fs/exec.c Sat Apr 17 02:13:55 2004
+Index: linux-2.4.35.4/fs/exec.c
+===================================================================
+--- linux-2.4.35.4.orig/fs/exec.c 2007-12-15 05:19:41.786802333 +0100
++++ linux-2.4.35.4/fs/exec.c 2007-12-15 05:19:53.175451333 +0100
@@ -109,6 +109,7 @@
*/
asmlinkage long sys_uselib(const char * library)
packaging/utils/nattpatch 2.4
---- linux/include/net/sock.h 2002/02/06 15:25:10 1.1
-+++ linux/include/net/sock.h 2002/05/22 12:14:56
+Index: linux-2.4.35.4/include/net/sock.h
+===================================================================
+--- linux-2.4.35.4.orig/include/net/sock.h 2007-12-15 05:19:41.462783867 +0100
++++ linux-2.4.35.4/include/net/sock.h 2007-12-15 05:19:53.815487806 +0100
@@ -488,7 +488,13 @@
} bictcp;
};
} tp_pinfo;
---- linux/net/Config.in.orig Fri Feb 9 14:34:13 2001
-+++ linux/net/Config.in Thu Feb 22 19:40:08 2001
-@@ -88,3 +88,5 @@
+Index: linux-2.4.35.4/net/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/Config.in 2007-12-15 05:19:41.470784323 +0100
++++ linux-2.4.35.4/net/Config.in 2007-12-15 05:19:53.819488035 +0100
+@@ -104,4 +104,6 @@
+ dep_tristate 'Packet Generator (USE WITH CAUTION)' CONFIG_NET_PKTGEN $CONFIG_PROC_FS
endmenu
+bool 'IPSEC NAT-Traversal' CONFIG_IPSEC_NAT_TRAVERSAL
+
endmenu
---- linux/net/ipv4/udp.c.1 Wed Jan 28 15:57:05 2004
-+++ linux/net/ipv4/udp.c Wed Jan 28 15:58:56 2004
-@@ -787,6 +787,9 @@
+Index: linux-2.4.35.4/net/ipv4/udp.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/udp.c 2007-12-15 05:19:41.482785007 +0100
++++ linux-2.4.35.4/net/ipv4/udp.c 2007-12-15 05:19:53.823488264 +0100
+@@ -860,6 +860,9 @@
static int udp_queue_rcv_skb(struct sock * sk, struct sk_buff *skb)
{
/*
* Charge it to the socket, dropping if the queue is full.
*/
-@@ -804,6 +807,40 @@
+@@ -877,6 +880,40 @@
}
#endif
if (sock_queue_rcv_skb(sk,skb)<0) {
UDP_INC_STATS_BH(UdpInErrors);
IP_INC_STATS_BH(IpInDiscards);
-@@ -1027,13 +1064,49 @@
+@@ -1100,13 +1137,49 @@
return len;
}
-diff -urN linux-2.4.26-pre5/Documentation/Configure.help linux-2.4.26-pre5-netdev-core/Documentation/Configure.help
---- linux-2.4.26-pre5/Documentation/Configure.help Sat Mar 20 10:08:18 2004
-+++ linux-2.4.26-pre5-netdev-core/Documentation/Configure.help Sun Mar 21 10:16:14 2004
-@@ -10419,6 +10419,20 @@
+Index: linux-2.4.35.4/Documentation/Configure.help
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/Configure.help 2007-12-15 05:19:53.139449282 +0100
++++ linux-2.4.35.4/Documentation/Configure.help 2007-12-15 05:19:54.063501941 +0100
+@@ -10675,6 +10675,20 @@
If you don't know what to use this for, you don't need it.
Ethertap network tap (OBSOLETE)
CONFIG_ETHERTAP
If you say Y here (and have said Y to "Kernel/User network link
-diff -urN linux-2.4.26-pre5/drivers/net/Config.in linux-2.4.26-pre5-netdev-core/drivers/net/Config.in
---- linux-2.4.26-pre5/drivers/net/Config.in Sat Mar 20 10:08:18 2004
-+++ linux-2.4.26-pre5-netdev-core/drivers/net/Config.in Sun Mar 21 10:16:14 2004
+Index: linux-2.4.35.4/drivers/net/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/drivers/net/Config.in 2007-12-15 05:19:51.931380439 +0100
++++ linux-2.4.35.4/drivers/net/Config.in 2007-12-15 05:19:54.067502171 +0100
@@ -8,6 +8,7 @@
tristate 'Bonding driver support' CONFIG_BONDING
tristate 'EQL (serial line load balancing) support' CONFIG_EQUALIZER
if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
tristate 'Ethertap network tap (OBSOLETE)' CONFIG_ETHERTAP
fi
-diff -urN linux-2.4.26-pre5/include/asm-alpha/signal.h linux-2.4.26-pre5-netdev-core/include/asm-alpha/signal.h
---- linux-2.4.26-pre5/include/asm-alpha/signal.h Sat Dec 1 18:27:14 2001
-+++ linux-2.4.26-pre5-netdev-core/include/asm-alpha/signal.h Sun Mar 21 10:16:14 2004
-@@ -121,7 +121,14 @@
+Index: linux-2.4.35.4/include/asm-alpha/signal.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-alpha/signal.h 2007-12-15 05:19:41.318775660 +0100
++++ linux-2.4.35.4/include/asm-alpha/signal.h 2007-12-15 05:19:54.067502171 +0100
+@@ -121,8 +121,15 @@
#define SA_PROBE SA_ONESHOT
#define SA_SAMPLE_RANDOM SA_RESTART
#define SA_SHIRQ 0x40000000
+#else
+#define SA_NET_RANDOM 0
#endif
-+
-+#endif /* __KERNEL__ */
++#endif /* __KERNEL__ */
++
#define SIG_BLOCK 1 /* for blocking signals */
#define SIG_UNBLOCK 2 /* for unblocking signals */
-diff -urN linux-2.4.26-pre5/include/asm-arm/signal.h linux-2.4.26-pre5-netdev-core/include/asm-arm/signal.h
---- linux-2.4.26-pre5/include/asm-arm/signal.h Sat Sep 13 07:57:29 2003
-+++ linux-2.4.26-pre5-netdev-core/include/asm-arm/signal.h Sun Mar 21 10:16:14 2004
-@@ -125,7 +125,14 @@
+ #define SIG_SETMASK 3 /* for setting the signal mask */
+Index: linux-2.4.35.4/include/asm-arm/signal.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-arm/signal.h 2007-12-15 05:19:41.326776118 +0100
++++ linux-2.4.35.4/include/asm-arm/signal.h 2007-12-15 05:19:54.067502171 +0100
+@@ -125,8 +125,15 @@
#define SA_PROBE 0x80000000
#define SA_SAMPLE_RANDOM 0x10000000
#define SA_SHIRQ 0x04000000
+#else
+#define SA_NET_RANDOM 0
#endif
-+
-+#endif /* __KERNEL__ */
++#endif /* __KERNEL__ */
++
#define SIG_BLOCK 0 /* for blocking signals */
#define SIG_UNBLOCK 1 /* for unblocking signals */
-diff -urN linux-2.4.26-pre5/include/asm-cris/signal.h linux-2.4.26-pre5-netdev-core/include/asm-cris/signal.h
---- linux-2.4.26-pre5/include/asm-cris/signal.h Sat Dec 1 18:27:14 2001
-+++ linux-2.4.26-pre5-netdev-core/include/asm-cris/signal.h Sun Mar 21 10:16:14 2004
-@@ -120,7 +120,14 @@
+ #define SIG_SETMASK 2 /* for setting the signal mask */
+Index: linux-2.4.35.4/include/asm-cris/signal.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-cris/signal.h 2007-12-15 05:19:41.334776573 +0100
++++ linux-2.4.35.4/include/asm-cris/signal.h 2007-12-15 05:19:54.071502397 +0100
+@@ -120,8 +120,15 @@
#define SA_PROBE SA_ONESHOT
#define SA_SAMPLE_RANDOM SA_RESTART
#define SA_SHIRQ 0x04000000
+#else
+#define SA_NET_RANDOM 0
#endif
-+
-+#endif /* __KERNEL__ */
++#endif /* __KERNEL__ */
++
#define SIG_BLOCK 0 /* for blocking signals */
#define SIG_UNBLOCK 1 /* for unblocking signals */
-diff -urN linux-2.4.26-pre5/include/asm-i386/signal.h linux-2.4.26-pre5-netdev-core/include/asm-i386/signal.h
---- linux-2.4.26-pre5/include/asm-i386/signal.h Sun Mar 21 00:00:43 2004
-+++ linux-2.4.26-pre5-netdev-core/include/asm-i386/signal.h Sun Mar 21 10:16:14 2004
-@@ -119,7 +119,14 @@
+ #define SIG_SETMASK 2 /* for setting the signal mask */
+Index: linux-2.4.35.4/include/asm-i386/signal.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-i386/signal.h 2007-12-15 05:19:41.338776800 +0100
++++ linux-2.4.35.4/include/asm-i386/signal.h 2007-12-15 05:19:54.071502397 +0100
+@@ -119,8 +119,15 @@
#define SA_PROBE SA_ONESHOT
#define SA_SAMPLE_RANDOM SA_RESTART
#define SA_SHIRQ 0x04000000
+#else
+#define SA_NET_RANDOM 0
#endif
-+
-+#endif /* __KERNEL__ */
++#endif /* __KERNEL__ */
++
#define SIG_BLOCK 0 /* for blocking signals */
#define SIG_UNBLOCK 1 /* for unblocking signals */
-diff -urN linux-2.4.26-pre5/include/asm-ia64/signal.h linux-2.4.26-pre5-netdev-core/include/asm-ia64/signal.h
---- linux-2.4.26-pre5/include/asm-ia64/signal.h Sat Mar 20 10:08:20 2004
-+++ linux-2.4.26-pre5-netdev-core/include/asm-ia64/signal.h Sun Mar 21 10:16:14 2004
+ #define SIG_SETMASK 2 /* for setting the signal mask */
+Index: linux-2.4.35.4/include/asm-ia64/signal.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-ia64/signal.h 2007-12-15 05:19:41.350777484 +0100
++++ linux-2.4.35.4/include/asm-ia64/signal.h 2007-12-15 05:19:54.071502397 +0100
@@ -117,6 +117,12 @@
#define SA_SHIRQ 0x04000000
#define SA_PERCPU_IRQ 0x02000000
#endif /* __KERNEL__ */
#define SIG_BLOCK 0 /* for blocking signals */
-diff -urN linux-2.4.26-pre5/include/asm-m68k/signal.h linux-2.4.26-pre5-netdev-core/include/asm-m68k/signal.h
---- linux-2.4.26-pre5/include/asm-m68k/signal.h Fri Feb 20 07:38:33 2004
-+++ linux-2.4.26-pre5-netdev-core/include/asm-m68k/signal.h Sun Mar 21 10:16:14 2004
-@@ -116,7 +116,14 @@
+Index: linux-2.4.35.4/include/asm-m68k/signal.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-m68k/signal.h 2007-12-15 05:19:41.358777939 +0100
++++ linux-2.4.35.4/include/asm-m68k/signal.h 2007-12-15 05:19:54.071502397 +0100
+@@ -116,8 +116,15 @@
#define SA_PROBE SA_ONESHOT
#define SA_SAMPLE_RANDOM SA_RESTART
#define SA_SHIRQ 0x04000000
+#else
+#define SA_NET_RANDOM 0
#endif
-+
-+#endif /* __KERNEL__ */
++#endif /* __KERNEL__ */
++
#define SIG_BLOCK 0 /* for blocking signals */
#define SIG_UNBLOCK 1 /* for unblocking signals */
-diff -urN linux-2.4.26-pre5/include/asm-mips/signal.h linux-2.4.26-pre5-netdev-core/include/asm-mips/signal.h
---- linux-2.4.26-pre5/include/asm-mips/signal.h Sat Sep 13 07:57:31 2003
-+++ linux-2.4.26-pre5-netdev-core/include/asm-mips/signal.h Sun Mar 21 10:16:14 2004
+ #define SIG_SETMASK 2 /* for setting the signal mask */
+Index: linux-2.4.35.4/include/asm-mips/signal.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/signal.h 2007-12-15 05:19:41.366778397 +0100
++++ linux-2.4.35.4/include/asm-mips/signal.h 2007-12-15 05:19:54.075502626 +0100
@@ -111,6 +111,12 @@
#define SA_SAMPLE_RANDOM SA_RESTART
#define SA_SHIRQ 0x02000000
#endif /* __KERNEL__ */
#define SIG_BLOCK 1 /* for blocking signals */
-diff -urN linux-2.4.26-pre5/include/asm-mips64/signal.h linux-2.4.26-pre5-netdev-core/include/asm-mips64/signal.h
---- linux-2.4.26-pre5/include/asm-mips64/signal.h Sat Sep 13 07:57:32 2003
-+++ linux-2.4.26-pre5-netdev-core/include/asm-mips64/signal.h Sun Mar 21 10:16:14 2004
+Index: linux-2.4.35.4/include/asm-mips64/signal.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips64/signal.h 2007-12-15 05:19:41.374778853 +0100
++++ linux-2.4.35.4/include/asm-mips64/signal.h 2007-12-15 05:19:54.075502626 +0100
@@ -119,6 +119,12 @@
#define SA_SAMPLE_RANDOM SA_RESTART
#define SA_SHIRQ 0x02000000
#endif /* __KERNEL__ */
#define SIG_BLOCK 1 /* for blocking signals */
-diff -urN linux-2.4.26-pre5/include/asm-parisc/signal.h linux-2.4.26-pre5-netdev-core/include/asm-parisc/signal.h
---- linux-2.4.26-pre5/include/asm-parisc/signal.h Sun Jan 11 18:48:21 2004
-+++ linux-2.4.26-pre5-netdev-core/include/asm-parisc/signal.h Sun Mar 21 10:16:14 2004
+Index: linux-2.4.35.4/include/asm-parisc/signal.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-parisc/signal.h 2007-12-15 05:19:41.382779308 +0100
++++ linux-2.4.35.4/include/asm-parisc/signal.h 2007-12-15 05:19:54.075502626 +0100
@@ -100,6 +100,12 @@
#define SA_SAMPLE_RANDOM SA_RESTART
#define SA_SHIRQ 0x04000000
#endif /* __KERNEL__ */
#define SIG_BLOCK 0 /* for blocking signals */
-diff -urN linux-2.4.26-pre5/include/asm-ppc/signal.h linux-2.4.26-pre5-netdev-core/include/asm-ppc/signal.h
---- linux-2.4.26-pre5/include/asm-ppc/signal.h Sat Sep 13 07:57:32 2003
-+++ linux-2.4.26-pre5-netdev-core/include/asm-ppc/signal.h Sun Mar 21 10:16:14 2004
+Index: linux-2.4.35.4/include/asm-ppc/signal.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-ppc/signal.h 2007-12-15 05:19:41.390779764 +0100
++++ linux-2.4.35.4/include/asm-ppc/signal.h 2007-12-15 05:19:54.075502626 +0100
@@ -111,6 +111,13 @@
#define SA_PROBE SA_ONESHOT
#define SA_SAMPLE_RANDOM SA_RESTART
#endif /* __KERNEL__ */
#define SIG_BLOCK 0 /* for blocking signals */
-diff -urN linux-2.4.26-pre5/include/asm-s390/signal.h linux-2.4.26-pre5-netdev-core/include/asm-s390/signal.h
---- linux-2.4.26-pre5/include/asm-s390/signal.h Fri Feb 20 07:38:34 2004
-+++ linux-2.4.26-pre5-netdev-core/include/asm-s390/signal.h Sun Mar 21 10:16:14 2004
-@@ -129,7 +129,14 @@
+Index: linux-2.4.35.4/include/asm-s390/signal.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-s390/signal.h 2007-12-15 05:19:41.398780219 +0100
++++ linux-2.4.35.4/include/asm-s390/signal.h 2007-12-15 05:19:54.075502626 +0100
+@@ -129,8 +129,15 @@
#define SA_SHIRQ 0x04000000
#define SA_DOPATHGROUP 0x00100000
#define SA_FORCE 0x00200000
+#else
+#define SA_NET_RANDOM 0
#endif
-+
-+#endif /* __KERNEL__ */
++#endif /* __KERNEL__ */
++
#define SIG_BLOCK 0 /* for blocking signals */
#define SIG_UNBLOCK 1 /* for unblocking signals */
-diff -urN linux-2.4.26-pre5/include/asm-s390x/signal.h linux-2.4.26-pre5-netdev-core/include/asm-s390x/signal.h
---- linux-2.4.26-pre5/include/asm-s390x/signal.h Fri Feb 20 07:38:34 2004
-+++ linux-2.4.26-pre5-netdev-core/include/asm-s390x/signal.h Sun Mar 21 10:16:14 2004
-@@ -129,7 +129,14 @@
+ #define SIG_SETMASK 2 /* for setting the signal mask */
+Index: linux-2.4.35.4/include/asm-s390x/signal.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-s390x/signal.h 2007-12-15 05:19:41.406780677 +0100
++++ linux-2.4.35.4/include/asm-s390x/signal.h 2007-12-15 05:19:54.079502852 +0100
+@@ -129,8 +129,15 @@
#define SA_SHIRQ 0x04000000
#define SA_DOPATHGROUP 0x00100000
#define SA_FORCE 0x00200000
+#else
+#define SA_NET_RANDOM 0
#endif
-+
-+#endif /* __KERNEL__ */
++#endif /* __KERNEL__ */
++
#define SIG_BLOCK 0 /* for blocking signals */
#define SIG_UNBLOCK 1 /* for unblocking signals */
-diff -urN linux-2.4.26-pre5/include/asm-sh/signal.h linux-2.4.26-pre5-netdev-core/include/asm-sh/signal.h
---- linux-2.4.26-pre5/include/asm-sh/signal.h Sat Dec 1 18:27:13 2001
-+++ linux-2.4.26-pre5-netdev-core/include/asm-sh/signal.h Sun Mar 21 10:16:14 2004
-@@ -107,7 +107,14 @@
+ #define SIG_SETMASK 2 /* for setting the signal mask */
+Index: linux-2.4.35.4/include/asm-sh/signal.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-sh/signal.h 2007-12-15 05:19:41.414781133 +0100
++++ linux-2.4.35.4/include/asm-sh/signal.h 2007-12-15 05:19:54.079502852 +0100
+@@ -107,8 +107,15 @@
#define SA_PROBE SA_ONESHOT
#define SA_SAMPLE_RANDOM SA_RESTART
#define SA_SHIRQ 0x04000000
+#else
+#define SA_NET_RANDOM 0
#endif
-+
-+#endif /* __KERNEL__ */
++#endif /* __KERNEL__ */
++
#define SIG_BLOCK 0 /* for blocking signals */
#define SIG_UNBLOCK 1 /* for unblocking signals */
-diff -urN linux-2.4.26-pre5/include/asm-sparc/signal.h linux-2.4.26-pre5-netdev-core/include/asm-sparc/signal.h
---- linux-2.4.26-pre5/include/asm-sparc/signal.h Sat Dec 1 18:27:14 2001
-+++ linux-2.4.26-pre5-netdev-core/include/asm-sparc/signal.h Sun Mar 21 10:16:14 2004
-@@ -176,7 +176,14 @@
+ #define SIG_SETMASK 2 /* for setting the signal mask */
+Index: linux-2.4.35.4/include/asm-sparc/signal.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-sparc/signal.h 2007-12-15 05:19:41.422781588 +0100
++++ linux-2.4.35.4/include/asm-sparc/signal.h 2007-12-15 05:19:54.079502852 +0100
+@@ -176,8 +176,15 @@
#define SA_PROBE SA_ONESHOT
#define SA_SAMPLE_RANDOM SA_RESTART
#define SA_STATIC_ALLOC 0x80
+#else
+#define SA_NET_RANDOM 0
#endif
-+
-+#endif /* __KERNEL__ */
++#endif /* __KERNEL__ */
++
/* Type of a signal handler. */
#ifdef __KERNEL__
-diff -urN linux-2.4.26-pre5/include/asm-sparc64/signal.h linux-2.4.26-pre5-netdev-core/include/asm-sparc64/signal.h
---- linux-2.4.26-pre5/include/asm-sparc64/signal.h Sat Dec 1 18:27:14 2001
-+++ linux-2.4.26-pre5-netdev-core/include/asm-sparc64/signal.h Sun Mar 21 10:16:14 2004
-@@ -192,7 +192,14 @@
+ typedef void (*__sighandler_t)(int, int, struct sigcontext *, char *);
+Index: linux-2.4.35.4/include/asm-sparc64/signal.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-sparc64/signal.h 2007-12-15 05:19:41.430782043 +0100
++++ linux-2.4.35.4/include/asm-sparc64/signal.h 2007-12-15 05:19:54.079502852 +0100
+@@ -192,8 +192,15 @@
#define SA_PROBE SA_ONESHOT
#define SA_SAMPLE_RANDOM SA_RESTART
#define SA_STATIC_ALLOC 0x80
+#else
+#define SA_NET_RANDOM 0
#endif
-+
-+#endif /* __KERNEL__ */
++#endif /* __KERNEL__ */
++
/* Type of a signal handler. */
#ifdef __KERNEL__
+ typedef void (*__sighandler_t)(int, struct sigcontext *);
---- linux.old/net/core/dev.c 2005-07-05 16:42:36.000000000 +0200
-+++ linux.dev/net/core/dev.c 2005-07-08 19:32:46.000000000 +0200
+Index: linux-2.4.35.4/net/core/dev.c
+===================================================================
+--- linux-2.4.35.4.orig/net/core/dev.c 2007-12-15 05:19:51.651364482 +0100
++++ linux-2.4.35.4/net/core/dev.c 2007-12-15 05:19:54.483525877 +0100
@@ -1289,6 +1289,19 @@
local_irq_save(flags);
-diff -Nur linux.old/arch/mips/kernel/mips_ksyms.c linux.dev/arch/mips/kernel/mips_ksyms.c
---- linux.old/arch/mips/kernel/mips_ksyms.c 2004-02-18 14:36:30.000000000 +0100
-+++ linux.dev/arch/mips/kernel/mips_ksyms.c 2005-10-24 14:21:53.702396250 +0200
+Index: linux-2.4.35.4/arch/mips/kernel/mips_ksyms.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/kernel/mips_ksyms.c 2007-12-15 05:19:41.186768139 +0100
++++ linux-2.4.35.4/arch/mips/kernel/mips_ksyms.c 2007-12-15 05:19:54.695537960 +0100
@@ -30,6 +30,10 @@
#include <asm/floppy.h>
#endif
/* Networking helper routines. */
EXPORT_SYMBOL(csum_partial_copy);
-diff -Nur linux.old/arch/mips/lib/Makefile linux.dev/arch/mips/lib/Makefile
---- linux.old/arch/mips/lib/Makefile 2004-02-18 14:36:30.000000000 +0100
-+++ linux.dev/arch/mips/lib/Makefile 2005-10-24 14:21:53.774400750 +0200
+Index: linux-2.4.35.4/arch/mips/lib/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/lib/Makefile 2007-12-15 05:19:41.194768595 +0100
++++ linux-2.4.35.4/arch/mips/lib/Makefile 2007-12-15 05:19:54.699538186 +0100
@@ -9,7 +9,8 @@
obj-y += csum_partial.o csum_partial_copy.o \
promlib.o rtc-std.o rtc-no.o memcpy.o \
export-objs := rtc-std.o rtc-no.o
-diff -Nur linux.old/arch/mips/lib/ashldi3.c linux.dev/arch/mips/lib/ashldi3.c
---- linux.old/arch/mips/lib/ashldi3.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/arch/mips/lib/ashldi3.c 2005-10-24 14:21:53.774400750 +0200
+Index: linux-2.4.35.4/arch/mips/lib/ashldi3.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/lib/ashldi3.c 2007-12-15 05:19:54.707538644 +0100
@@ -0,0 +1,62 @@
+/* ashrdi3.c extracted from gcc-2.95.2/libgcc2.c which is: */
+/* Copyright (C) 1989, 92-98, 1999 Free Software Foundation, Inc.
+
+ return w.ll;
+}
-diff -Nur linux.old/arch/mips/lib/ashrdi3.c linux.dev/arch/mips/lib/ashrdi3.c
---- linux.old/arch/mips/lib/ashrdi3.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/arch/mips/lib/ashrdi3.c 2005-10-24 14:21:53.774400750 +0200
+Index: linux-2.4.35.4/arch/mips/lib/ashrdi3.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/lib/ashrdi3.c 2007-12-15 05:19:54.711538870 +0100
@@ -0,0 +1,63 @@
+/* ashrdi3.c extracted from gcc-2.7.2/libgcc2.c which is: */
+/* Copyright (C) 1989, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
+
+ return w.ll;
+}
-diff -Nur linux.old/arch/mips/lib/lshrdi3.c linux.dev/arch/mips/lib/lshrdi3.c
---- linux.old/arch/mips/lib/lshrdi3.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/arch/mips/lib/lshrdi3.c 2005-10-24 14:21:53.774400750 +0200
+Index: linux-2.4.35.4/arch/mips/lib/lshrdi3.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/lib/lshrdi3.c 2007-12-15 05:19:54.715539100 +0100
@@ -0,0 +1,62 @@
+/* lshrdi3.c extracted from gcc-2.7.2/libgcc2.c which is: */
+/* Copyright (C) 1989, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
+
+ return w.ll;
+}
-diff -Nur linux.old/arch/mips/lib/muldi3.c linux.dev/arch/mips/lib/muldi3.c
---- linux.old/arch/mips/lib/muldi3.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/arch/mips/lib/muldi3.c 2005-10-24 14:21:53.774400750 +0200
+Index: linux-2.4.35.4/arch/mips/lib/muldi3.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/lib/muldi3.c 2007-12-15 05:19:54.715539100 +0100
@@ -0,0 +1,63 @@
+/* muldi3.c extracted from gcc-2.7.2.3/libgcc2.c and
+ gcc-2.7.2.3/longlong.h which is: */
+
+ return w.ll;
+}
-diff -Nur linux.old/fs/cifs/cifsfs.c linux.dev/fs/cifs/cifsfs.c
---- linux.old/fs/cifs/cifsfs.c 2005-10-24 13:48:27.599659000 +0200
-+++ linux.dev/fs/cifs/cifsfs.c 2005-10-24 14:25:06.526447000 +0200
+Index: linux-2.4.35.4/fs/cifs/cifsfs.c
+===================================================================
+--- linux-2.4.35.4.orig/fs/cifs/cifsfs.c 2007-12-15 05:19:52.279400271 +0100
++++ linux-2.4.35.4/fs/cifs/cifsfs.c 2007-12-15 05:19:54.715539100 +0100
@@ -50,8 +50,6 @@
static struct quotactl_ops cifs_quotactl_ops;
#endif
int cifsFYI = 0;
int cifsERROR = 1;
int traceSMB = 0;
-diff -Nur linux.old/include/asm-mips/uaccess.h linux.dev/include/asm-mips/uaccess.h
---- linux.old/include/asm-mips/uaccess.h 2005-01-19 15:10:12.000000000 +0100
-+++ linux.dev/include/asm-mips/uaccess.h 2005-10-24 14:11:48.563214250 +0200
+Index: linux-2.4.35.4/include/asm-mips/uaccess.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/uaccess.h 2007-12-15 05:19:41.238771101 +0100
++++ linux-2.4.35.4/include/asm-mips/uaccess.h 2007-12-15 05:19:54.715539100 +0100
@@ -149,7 +149,7 @@
* Returns zero on success, or -EFAULT on error.
*/
-diff -urN linux.old/arch/mips/kernel/time.c linux.dev/arch/mips/kernel/time.c
---- linux.old/arch/mips/kernel/time.c 2005-11-14 11:06:38.661262000 +0100
-+++ linux.dev/arch/mips/kernel/time.c 2005-11-15 20:02:50.059676750 +0100
+Index: linux-2.4.35.4/arch/mips/kernel/time.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/kernel/time.c 2007-12-15 05:19:41.138765402 +0100
++++ linux-2.4.35.4/arch/mips/kernel/time.c 2007-12-15 05:19:55.011555967 +0100
@@ -151,6 +151,27 @@
unsigned int (*mips_hpt_read)(void);
void (*mips_hpt_init)(unsigned int);
EXPORT_SYMBOL(rtc_get_time);
+EXPORT_SYMBOL(get_htscl);
+EXPORT_SYMBOL(get_tscll);
-diff -urN linux.old/include/asm-mips/timex.h linux.dev/include/asm-mips/timex.h
---- linux.old/include/asm-mips/timex.h 2005-11-14 11:06:38.685263500 +0100
-+++ linux.dev/include/asm-mips/timex.h 2005-11-14 11:02:21.069163500 +0100
+Index: linux-2.4.35.4/include/asm-mips/timex.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/timex.h 2007-12-15 05:19:41.146765860 +0100
++++ linux-2.4.35.4/include/asm-mips/timex.h 2007-12-15 05:19:55.015556197 +0100
@@ -31,6 +31,19 @@
return read_c0_count();
}
#define vxtime_lock() do {} while (0)
#define vxtime_unlock() do {} while (0)
-diff -urN linux.old/include/net/pkt_sched.h linux.dev/include/net/pkt_sched.h
---- linux.old/include/net/pkt_sched.h 2005-11-14 11:06:38.709265000 +0100
-+++ linux.dev/include/net/pkt_sched.h 2005-11-14 11:02:21.069163500 +0100
+Index: linux-2.4.35.4/include/net/pkt_sched.h
+===================================================================
+--- linux-2.4.35.4.orig/include/net/pkt_sched.h 2007-12-15 05:19:41.154766315 +0100
++++ linux-2.4.35.4/include/net/pkt_sched.h 2007-12-15 05:19:55.023556652 +0100
@@ -5,7 +5,11 @@
#define PSCHED_JIFFIES 2
#define PSCHED_CPU 3
#include <linux/config.h>
#include <linux/types.h>
-@@ -271,7 +275,7 @@
+@@ -261,7 +265,7 @@
#define PSCHED_US2JIFFIE(delay) (((delay)+psched_clock_per_hz-1)/psched_clock_per_hz)
#define PSCHED_JIFFIE2US(delay) ((delay)*psched_clock_per_hz)
---- linux.old/arch/mips/kernel/branch.c 2006-12-23 21:34:20.000000000 +0100
-+++ linux.dev/arch/mips/kernel/branch.c 2007-01-24 18:05:34.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/kernel/branch.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/kernel/branch.c 2007-12-15 05:19:41.102763351 +0100
++++ linux-2.4.35.4/arch/mips/kernel/branch.c 2007-12-15 05:19:55.259570100 +0100
@@ -170,7 +170,7 @@
bit = (insn.i_format.rt >> 2);
bit += (bit != 0);
-diff -rNu linux-2.4.29.old/Documentation/isdn/CREDITS linux-2.4.29/Documentation/isdn/CREDITS
---- linux-2.4.29.old/Documentation/isdn/CREDITS 2005-03-22 14:48:26.000000000 +0100
-+++ linux-2.4.29/Documentation/isdn/CREDITS 2005-03-22 15:06:50.246454160 +0100
+Index: linux-2.4.35.4/Documentation/isdn/CREDITS
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/isdn/CREDITS 2007-12-15 05:19:39.346663275 +0100
++++ linux-2.4.35.4/Documentation/isdn/CREDITS 2007-12-15 05:19:55.467581957 +0100
@@ -37,7 +37,7 @@
Andreas Kool (akool@Kool.f.EUnet.de)
For contribution of the isdnlog/isdnrep-tool
For lot of new ideas and the pcbit driver.
Eberhard Moenkeberg (emoenke@gwdg.de)
-diff -rNu linux-2.4.29.old/Documentation/isdn/HiSax.cert linux-2.4.29/Documentation/isdn/HiSax.cert
---- linux-2.4.29.old/Documentation/isdn/HiSax.cert 2005-03-22 14:48:26.000000000 +0100
-+++ linux-2.4.29/Documentation/isdn/HiSax.cert 2005-03-22 15:06:50.264451424 +0100
+Index: linux-2.4.35.4/Documentation/isdn/HiSax.cert
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/isdn/HiSax.cert 2007-12-15 05:19:39.354663733 +0100
++++ linux-2.4.35.4/Documentation/isdn/HiSax.cert 2007-12-15 05:19:55.471582183 +0100
@@ -68,6 +68,8 @@
drivers/isdn/hisax/elsa.c
drivers/isdn/hisax/diva.c
Please send any changes, bugfixes and patches to me rather than implementing
them directly into the HiSax sources.
-diff -rNu linux-2.4.29.old/Documentation/isdn/INTERFACE linux-2.4.29/Documentation/isdn/INTERFACE
---- linux-2.4.29.old/Documentation/isdn/INTERFACE 2005-03-22 14:48:26.000000000 +0100
-+++ linux-2.4.29/Documentation/isdn/INTERFACE 2005-03-22 15:06:50.288447776 +0100
+Index: linux-2.4.35.4/Documentation/isdn/INTERFACE
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/isdn/INTERFACE 2007-12-15 05:19:39.362664189 +0100
++++ linux-2.4.35.4/Documentation/isdn/INTERFACE 2007-12-15 05:19:55.479582638 +0100
@@ -1,4 +1,4 @@
-$Id: INTERFACE,v 1.1.4.1 2001/11/20 14:19:33 kai Exp $
+$Id: INTERFACE,v 1.17 2002/01/31 13:26:35 keil Exp $
+ command = ISDN_STAT_PROCEED
+ arg = channel-number, locally to the driver. (starting with 0)
+
-diff -rNu linux-2.4.29.old/Documentation/isdn/INTERFACE.fax linux-2.4.29/Documentation/isdn/INTERFACE.fax
---- linux-2.4.29.old/Documentation/isdn/INTERFACE.fax 2005-03-22 14:48:26.000000000 +0100
-+++ linux-2.4.29/Documentation/isdn/INTERFACE.fax 2005-03-22 15:06:50.312444128 +0100
+Index: linux-2.4.35.4/Documentation/isdn/INTERFACE.fax
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/isdn/INTERFACE.fax 2007-12-15 05:19:39.366664415 +0100
++++ linux-2.4.35.4/Documentation/isdn/INTERFACE.fax 2007-12-15 05:19:55.483582867 +0100
@@ -1,4 +1,4 @@
-$Id: INTERFACE.fax,v 1.1.4.1 2001/11/20 14:19:33 kai Exp $
+$Id: INTERFACE.fax,v 1.2 2000/08/06 09:22:50 armin Exp $
Description of the fax-subinterface between linklevel and hardwarelevel of
-diff -rNu linux-2.4.29.old/Documentation/isdn/README linux-2.4.29/Documentation/isdn/README
---- linux-2.4.29.old/Documentation/isdn/README 2005-03-22 14:48:26.000000000 +0100
-+++ linux-2.4.29/Documentation/isdn/README 2005-03-22 15:06:50.340439872 +0100
+Index: linux-2.4.35.4/Documentation/isdn/README
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/isdn/README 2007-12-15 05:19:39.374664873 +0100
++++ linux-2.4.35.4/Documentation/isdn/README 2007-12-15 05:19:55.487583097 +0100
@@ -278,6 +278,12 @@
1 = Add CPN to FCON message on
Bit 2: 0 = Add CDN to RING/FCON message off
Last but not least a (at the moment fairly primitive) device to request
the line-status (/dev/isdninfo) is made available.
-diff -rNu linux-2.4.29.old/Documentation/isdn/README.HiSax linux-2.4.29/Documentation/isdn/README.HiSax
---- linux-2.4.29.old/Documentation/isdn/README.HiSax 2005-03-22 14:48:26.000000000 +0100
-+++ linux-2.4.29/Documentation/isdn/README.HiSax 2005-03-22 15:06:50.372435008 +0100
+Index: linux-2.4.35.4/Documentation/isdn/README.HiSax
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/isdn/README.HiSax 2007-12-15 05:19:39.382665329 +0100
++++ linux-2.4.35.4/Documentation/isdn/README.HiSax 2007-12-15 05:19:55.487583097 +0100
@@ -41,10 +41,9 @@
ELSA Quickstep 3000PCI
ELSA PCMCIA
Running the driver
------------------
-diff -rNu linux-2.4.29.old/Documentation/isdn/README.act2000 linux-2.4.29/Documentation/isdn/README.act2000
---- linux-2.4.29.old/Documentation/isdn/README.act2000 2005-03-22 14:48:26.000000000 +0100
-+++ linux-2.4.29/Documentation/isdn/README.act2000 2005-03-22 15:06:50.388432576 +0100
+Index: linux-2.4.35.4/Documentation/isdn/README.act2000
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/isdn/README.act2000 2007-12-15 05:19:39.390665784 +0100
++++ linux-2.4.35.4/Documentation/isdn/README.act2000 2007-12-15 05:19:55.487583097 +0100
@@ -1,4 +1,4 @@
-$Id: README.act2000,v 1.1.4.1 2001/11/20 14:19:33 kai Exp $
+$Id: README.act2000,v 1.3 2000/08/06 09:22:51 armin Exp $
This document describes the ACT2000 driver for the
IBM Active 2000 ISDN card.
-diff -rNu linux-2.4.29.old/Documentation/isdn/README.audio linux-2.4.29/Documentation/isdn/README.audio
---- linux-2.4.29.old/Documentation/isdn/README.audio 2005-03-22 14:48:26.000000000 +0100
-+++ linux-2.4.29/Documentation/isdn/README.audio 2005-03-22 15:06:50.404430144 +0100
+Index: linux-2.4.35.4/Documentation/isdn/README.audio
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/isdn/README.audio 2007-12-15 05:19:39.394666013 +0100
++++ linux-2.4.35.4/Documentation/isdn/README.audio 2007-12-15 05:19:55.487583097 +0100
@@ -1,4 +1,4 @@
-$Id: README.audio,v 1.1.4.1 2001/11/20 14:19:33 kai Exp $
+$Id: README.audio,v 1.8 1999/07/11 17:17:29 armin Exp $
ISDN subsystem for Linux.
Description of audio mode.
-diff -rNu linux-2.4.29.old/Documentation/isdn/README.eicon linux-2.4.29/Documentation/isdn/README.eicon
---- linux-2.4.29.old/Documentation/isdn/README.eicon 2005-03-22 14:48:26.000000000 +0100
-+++ linux-2.4.29/Documentation/isdn/README.eicon 2005-03-22 15:06:50.479418744 +0100
+Index: linux-2.4.35.4/Documentation/isdn/README.eicon
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/isdn/README.eicon 2007-12-15 05:19:39.402666468 +0100
++++ linux-2.4.35.4/Documentation/isdn/README.eicon 2007-12-15 05:19:55.487583097 +0100
@@ -1,4 +1,4 @@
-$Id: README.eicon,v 1.1.4.1 2001/11/20 14:19:33 kai Exp $
+$Id: README.eicon,v 1.10 2000/08/13 12:19:15 armin Exp $
(c) 1999,2000 Armin Schindler (mac@melware.de)
(c) 1999,2000 Cytronics & Melware (info@melware.de)
-diff -rNu linux-2.4.29.old/Documentation/isdn/README.hysdn linux-2.4.29/Documentation/isdn/README.hysdn
---- linux-2.4.29.old/Documentation/isdn/README.hysdn 2005-03-22 14:48:26.000000000 +0100
-+++ linux-2.4.29/Documentation/isdn/README.hysdn 2005-03-22 15:06:50.522412208 +0100
+Index: linux-2.4.35.4/Documentation/isdn/README.hysdn
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/isdn/README.hysdn 2007-12-15 05:19:39.410666924 +0100
++++ linux-2.4.35.4/Documentation/isdn/README.hysdn 2007-12-15 05:19:55.491583323 +0100
@@ -1,4 +1,4 @@
-$Id: README.hysdn,v 1.1.4.1 2001/11/20 14:19:33 kai Exp $
+$Id: README.hysdn,v 1.3.6.1 2001/02/10 14:41:19 kai Exp $
The hysdn driver has been written by
by Werner Cornelius (werner@isdn4linux.de or werner@titro.de)
for Hypercope GmbH Aachen Germany. Hypercope agreed to publish this driver
-diff -rNu linux-2.4.29.old/Documentation/isdn/README.icn linux-2.4.29/Documentation/isdn/README.icn
---- linux-2.4.29.old/Documentation/isdn/README.icn 2005-03-22 14:48:26.000000000 +0100
-+++ linux-2.4.29/Documentation/isdn/README.icn 2005-03-22 15:06:50.550407952 +0100
+Index: linux-2.4.35.4/Documentation/isdn/README.icn
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/isdn/README.icn 2007-12-15 05:19:39.418667379 +0100
++++ linux-2.4.35.4/Documentation/isdn/README.icn 2007-12-15 05:19:55.491583323 +0100
@@ -1,4 +1,4 @@
-$Id: README.icn,v 1.1.4.1 2001/11/20 14:19:33 kai Exp $
+$Id: README.icn,v 1.7 2000/08/06 09:22:51 armin Exp $
You can get the ICN-ISDN-card from:
-diff -rNu linux-2.4.29.old/Documentation/isdn/README.pcbit linux-2.4.29/Documentation/isdn/README.pcbit
---- linux-2.4.29.old/Documentation/isdn/README.pcbit 2005-03-22 14:48:26.000000000 +0100
-+++ linux-2.4.29/Documentation/isdn/README.pcbit 2005-03-22 15:06:50.567405368 +0100
+Index: linux-2.4.35.4/Documentation/isdn/README.pcbit
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/isdn/README.pcbit 2007-12-15 05:19:39.422667608 +0100
++++ linux-2.4.35.4/Documentation/isdn/README.pcbit 2007-12-15 05:19:55.491583323 +0100
@@ -37,4 +37,4 @@
regards,
Pedro.
-<pedro_m@yahoo.com>
+<roque@di.fc.ul.pt>
-diff -rNu linux-2.4.29.old/Documentation/isdn/abcext_kernel.help linux-2.4.29/Documentation/isdn/abcext_kernel.help
---- linux-2.4.29.old/Documentation/isdn/abcext_kernel.help 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/Documentation/isdn/abcext_kernel.help 2005-03-22 15:06:50.600400352 +0100
+Index: linux-2.4.35.4/Documentation/isdn/abcext_kernel.help
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/Documentation/isdn/abcext_kernel.help 2007-12-15 05:19:55.491583323 +0100
@@ -0,0 +1,166 @@
+
+ISDN-ABC-DW Extension
+ See "linux/Documentation/isdn/dw-abc-extension-howto.txt"
+ for more Information
+
-diff -rNu linux-2.4.29.old/drivers/isdn/Config.in linux-2.4.29/drivers/isdn/Config.in
---- linux-2.4.29.old/drivers/isdn/Config.in 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/Config.in 2005-03-22 15:06:44.259364336 +0100
+Index: linux-2.4.35.4/drivers/isdn/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/Config.in 2007-12-15 05:19:39.438668519 +0100
++++ linux-2.4.35.4/drivers/isdn/Config.in 2007-12-15 05:19:55.491583323 +0100
@@ -4,11 +4,9 @@
# only included if CONFIG_ISDN != n
fi
endmenu
-diff -rNu linux-2.4.29.old/drivers/isdn/Makefile linux-2.4.29/drivers/isdn/Makefile
---- linux-2.4.29.old/drivers/isdn/Makefile 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/Makefile 2005-03-22 15:06:44.277361600 +0100
+Index: linux-2.4.35.4/drivers/isdn/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/Makefile 2007-12-15 05:19:39.446668974 +0100
++++ linux-2.4.35.4/drivers/isdn/Makefile 2007-12-15 05:19:55.495583552 +0100
@@ -2,7 +2,7 @@
# The target object and module list name.
subdir-$(CONFIG_ISDN_DRV_ICN) += icn
subdir-$(CONFIG_ISDN_DRV_PCBIT) += pcbit
subdir-$(CONFIG_ISDN_DRV_SC) += sc
-diff -rNu linux-2.4.29.old/drivers/isdn/act2000/act2000.h linux-2.4.29/drivers/isdn/act2000/act2000.h
---- linux-2.4.29.old/drivers/isdn/act2000/act2000.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/act2000/act2000.h 2005-03-22 15:06:44.103388048 +0100
+Index: linux-2.4.35.4/drivers/isdn/act2000/act2000.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/act2000/act2000.h 2007-12-15 05:19:39.450669203 +0100
++++ linux-2.4.35.4/drivers/isdn/act2000/act2000.h 2007-12-15 05:19:55.495583552 +0100
@@ -1,4 +1,4 @@
-/* $Id: act2000.h,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id$
{
queue_task(&card->poll_tq, &tq_immediate);
mark_bh(IMMEDIATE_BH);
-diff -rNu linux-2.4.29.old/drivers/isdn/act2000/act2000_isa.c linux-2.4.29/drivers/isdn/act2000/act2000_isa.c
---- linux-2.4.29.old/drivers/isdn/act2000/act2000_isa.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/act2000/act2000_isa.c 2005-03-22 15:06:44.135383184 +0100
+Index: linux-2.4.35.4/drivers/isdn/act2000/act2000_isa.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/act2000/act2000_isa.c 2007-12-15 05:19:39.458669659 +0100
++++ linux-2.4.35.4/drivers/isdn/act2000/act2000_isa.c 2007-12-15 05:19:55.495583552 +0100
@@ -1,4 +1,4 @@
-/* $Id: act2000_isa.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id$
}
}
-diff -rNu linux-2.4.29.old/drivers/isdn/act2000/act2000_isa.h linux-2.4.29/drivers/isdn/act2000/act2000_isa.h
---- linux-2.4.29.old/drivers/isdn/act2000/act2000_isa.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/act2000/act2000_isa.h 2005-03-22 15:06:44.152380600 +0100
+Index: linux-2.4.35.4/drivers/isdn/act2000/act2000_isa.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/act2000/act2000_isa.h 2007-12-15 05:19:39.466670114 +0100
++++ linux-2.4.35.4/drivers/isdn/act2000/act2000_isa.h 2007-12-15 05:19:55.495583552 +0100
@@ -1,4 +1,4 @@
-/* $Id: act2000_isa.h,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id$
*
* ISDN lowlevel-module for the IBM ISDN-S0 Active 2000 (ISA-Version).
*
-diff -rNu linux-2.4.29.old/drivers/isdn/act2000/capi.c linux-2.4.29/drivers/isdn/act2000/capi.c
---- linux-2.4.29.old/drivers/isdn/act2000/capi.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/act2000/capi.c 2005-03-22 15:06:44.172377560 +0100
+Index: linux-2.4.35.4/drivers/isdn/act2000/capi.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/act2000/capi.c 2007-12-15 05:19:39.474670572 +0100
++++ linux-2.4.35.4/drivers/isdn/act2000/capi.c 2007-12-15 05:19:55.495583552 +0100
@@ -1,4 +1,4 @@
-/* $Id: capi.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id$
#endif
{{ 0x00, 0x00}, NULL},
};
-diff -rNu linux-2.4.29.old/drivers/isdn/act2000/capi.h linux-2.4.29/drivers/isdn/act2000/capi.h
---- linux-2.4.29.old/drivers/isdn/act2000/capi.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/act2000/capi.h 2005-03-22 15:06:44.187375280 +0100
+Index: linux-2.4.35.4/drivers/isdn/act2000/capi.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/act2000/capi.h 2007-12-15 05:19:39.478670799 +0100
++++ linux-2.4.35.4/drivers/isdn/act2000/capi.h 2007-12-15 05:19:55.499583778 +0100
@@ -1,4 +1,4 @@
-/* $Id: capi.h,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id$
actcapi_nextsmsg(act2000_card *card)
{
unsigned long flags;
-diff -rNu linux-2.4.29.old/drivers/isdn/act2000/module.c linux-2.4.29/drivers/isdn/act2000/module.c
---- linux-2.4.29.old/drivers/isdn/act2000/module.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/act2000/module.c 2005-03-22 15:06:44.202373000 +0100
+Index: linux-2.4.35.4/drivers/isdn/act2000/module.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/act2000/module.c 2007-12-15 05:19:39.486671254 +0100
++++ linux-2.4.35.4/drivers/isdn/act2000/module.c 2007-12-15 05:19:55.499583778 +0100
@@ -1,4 +1,4 @@
-/* $Id: module.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id$
module_init(act2000_init);
module_exit(act2000_exit);
-diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/avm_cs.c linux-2.4.29/drivers/isdn/avmb1/avm_cs.c
---- linux-2.4.29.old/drivers/isdn/avmb1/avm_cs.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/avmb1/avm_cs.c 2005-03-22 15:06:44.696297912 +0100
+Index: linux-2.4.35.4/drivers/isdn/avmb1/avm_cs.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/avmb1/avm_cs.c 2007-12-15 05:19:39.494671712 +0100
++++ linux-2.4.35.4/drivers/isdn/avmb1/avm_cs.c 2007-12-15 05:19:55.499583778 +0100
@@ -1,4 +1,4 @@
-/* $Id: avm_cs.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id: avm_cs.c,v 1.6 2001/09/24 13:22:44 kai Exp $
*
* A PCMCIA client driver for AVM B1/M1/M2
*
-diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/avmcard.h linux-2.4.29/drivers/isdn/avmb1/avmcard.h
---- linux-2.4.29.old/drivers/isdn/avmb1/avmcard.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/avmb1/avmcard.h 2005-03-22 15:06:44.711295632 +0100
+Index: linux-2.4.35.4/drivers/isdn/avmb1/avmcard.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/avmb1/avmcard.h 2007-12-15 05:19:39.502672167 +0100
++++ linux-2.4.35.4/drivers/isdn/avmb1/avmcard.h 2007-12-15 05:19:55.499583778 +0100
@@ -1,4 +1,4 @@
-/* $Id: avmcard.h,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id: avmcard.h,v 1.12 2001/09/24 13:22:44 kai Exp $
*
* Copyright 1999 by Carsten Paeth <calle@calle.de>
*
-diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/b1.c linux-2.4.29/drivers/isdn/avmb1/b1.c
---- linux-2.4.29.old/drivers/isdn/avmb1/b1.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/avmb1/b1.c 2005-03-22 15:06:44.733292288 +0100
+Index: linux-2.4.35.4/drivers/isdn/avmb1/b1.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/avmb1/b1.c 2007-12-15 05:19:39.510672623 +0100
++++ linux-2.4.35.4/drivers/isdn/avmb1/b1.c 2007-12-15 05:19:55.503584007 +0100
@@ -1,4 +1,4 @@
-/* $Id: b1.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id: b1.c,v 1.26 2001/09/24 13:22:44 kai Exp $
/* ------------------------------------------------------------- */
-diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/b1dma.c linux-2.4.29/drivers/isdn/avmb1/b1dma.c
---- linux-2.4.29.old/drivers/isdn/avmb1/b1dma.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/avmb1/b1dma.c 2005-03-22 15:06:44.750289704 +0100
+Index: linux-2.4.35.4/drivers/isdn/avmb1/b1dma.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/avmb1/b1dma.c 2007-12-15 05:19:39.514672852 +0100
++++ linux-2.4.35.4/drivers/isdn/avmb1/b1dma.c 2007-12-15 05:19:55.503584007 +0100
@@ -1,4 +1,4 @@
-/* $Id: b1dma.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id: b1dma.c,v 1.18 2001/09/24 13:22:44 kai Exp $
rxlen = b1dmainmeml(card->mbase+0x28);
csr = b1dmainmeml(card->mbase+AMCC_INTCSR);
-diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/b1isa.c linux-2.4.29/drivers/isdn/avmb1/b1isa.c
---- linux-2.4.29.old/drivers/isdn/avmb1/b1isa.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/avmb1/b1isa.c 2005-03-22 15:06:44.766287272 +0100
+Index: linux-2.4.35.4/drivers/isdn/avmb1/b1isa.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/avmb1/b1isa.c 2007-12-15 05:19:39.522673307 +0100
++++ linux-2.4.35.4/drivers/isdn/avmb1/b1isa.c 2007-12-15 05:19:55.503584007 +0100
@@ -1,4 +1,4 @@
-/* $Id: b1isa.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id: b1isa.c,v 1.14 2001/09/24 13:22:44 kai Exp $
/* ------------------------------------------------------------- */
-diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/b1pci.c linux-2.4.29/drivers/isdn/avmb1/b1pci.c
---- linux-2.4.29.old/drivers/isdn/avmb1/b1pci.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/avmb1/b1pci.c 2005-03-22 15:06:44.781284992 +0100
+Index: linux-2.4.35.4/drivers/isdn/avmb1/b1pci.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/avmb1/b1pci.c 2007-12-15 05:19:39.530673763 +0100
++++ linux-2.4.35.4/drivers/isdn/avmb1/b1pci.c 2007-12-15 05:19:55.503584007 +0100
@@ -1,4 +1,4 @@
-/* $Id: b1pci.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id: b1pci.c,v 1.40 2001/09/24 13:22:44 kai Exp $
printk(KERN_INFO
"%s: PCI BIOS reports AVM-B1 at i/o %#x, irq %d\n",
-diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/b1pcmcia.c linux-2.4.29/drivers/isdn/avmb1/b1pcmcia.c
---- linux-2.4.29.old/drivers/isdn/avmb1/b1pcmcia.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/avmb1/b1pcmcia.c 2005-03-22 15:06:44.796282712 +0100
+Index: linux-2.4.35.4/drivers/isdn/avmb1/b1pcmcia.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/avmb1/b1pcmcia.c 2007-12-15 05:19:39.538674218 +0100
++++ linux-2.4.35.4/drivers/isdn/avmb1/b1pcmcia.c 2007-12-15 05:19:55.503584007 +0100
@@ -1,4 +1,4 @@
-/* $Id: b1pcmcia.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id: b1pcmcia.c,v 1.17 2001/09/24 13:22:44 kai Exp $
/* ------------------------------------------------------------- */
-diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/c4.c linux-2.4.29/drivers/isdn/avmb1/c4.c
---- linux-2.4.29.old/drivers/isdn/avmb1/c4.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/avmb1/c4.c 2005-03-22 15:06:44.812280280 +0100
+Index: linux-2.4.35.4/drivers/isdn/avmb1/c4.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/avmb1/c4.c 2007-12-15 05:19:39.542674447 +0100
++++ linux-2.4.35.4/drivers/isdn/avmb1/c4.c 2007-12-15 05:19:55.507584236 +0100
@@ -1,4 +1,4 @@
-/* $Id: c4.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id: c4.c,v 1.38 2001/09/24 13:22:44 kai Exp $
#include <linux/capi.h>
#include <linux/kernelcapi.h>
#include <linux/init.h>
-@@ -29,7 +30,7 @@
+@@ -30,7 +31,7 @@
#include "capilli.h"
#include "avmcard.h"
#undef CONFIG_C4_DEBUG
#undef CONFIG_C4_POLLDEBUG
-@@ -38,6 +39,7 @@
+@@ -39,6 +40,7 @@
static int suppress_pollack;
static struct pci_device_id c4_pci_tbl[] __initdata = {
{ PCI_VENDOR_ID_DEC,PCI_DEVICE_ID_DEC_21285, PCI_VENDOR_ID_AVM, PCI_DEVICE_ID_AVM_C4 },
{ PCI_VENDOR_ID_DEC,PCI_DEVICE_ID_DEC_21285, PCI_VENDOR_ID_AVM, PCI_DEVICE_ID_AVM_C2 },
-@@ -45,6 +47,7 @@
+@@ -46,6 +48,7 @@
};
MODULE_DEVICE_TABLE(pci, c4_pci_tbl);
MODULE_DESCRIPTION("CAPI4Linux: Driver for AVM C2/C4 cards");
MODULE_AUTHOR("Carsten Paeth");
MODULE_LICENSE("GPL");
-@@ -1328,9 +1331,9 @@
+@@ -1332,9 +1335,9 @@
}
pci_set_master(dev);
printk(KERN_INFO
"%s: PCI BIOS reports AVM-C%d at i/o %#x, irq %d, mem %#x\n",
-diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/capi.c linux-2.4.29/drivers/isdn/avmb1/capi.c
---- linux-2.4.29.old/drivers/isdn/avmb1/capi.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/avmb1/capi.c 2005-03-22 15:06:44.849274656 +0100
+Index: linux-2.4.35.4/drivers/isdn/avmb1/capi.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/avmb1/capi.c 2007-12-15 05:19:39.550674902 +0100
++++ linux-2.4.35.4/drivers/isdn/avmb1/capi.c 2007-12-15 05:19:55.507584236 +0100
@@ -1,4 +1,4 @@
-/* $Id: capi.c,v 1.1.4.2 2001/12/09 18:45:13 kai Exp $
+/* $Id: capi.c,v 1.59 2001/11/07 22:35:48 kai Exp $
(void) detach_capi_interface(&cuser);
printk(KERN_NOTICE "capi: Rev %s: unloaded\n", rev);
}
-diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/capicmd.h linux-2.4.29/drivers/isdn/avmb1/capicmd.h
---- linux-2.4.29.old/drivers/isdn/avmb1/capicmd.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/avmb1/capicmd.h 2005-03-22 15:06:44.865272224 +0100
+Index: linux-2.4.35.4/drivers/isdn/avmb1/capicmd.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/avmb1/capicmd.h 2007-12-15 05:19:39.558675358 +0100
++++ linux-2.4.35.4/drivers/isdn/avmb1/capicmd.h 2007-12-15 05:19:55.507584236 +0100
@@ -1,4 +1,4 @@
-/* $Id: capicmd.h,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id: capicmd.h,v 1.4 2001/09/24 13:22:44 kai Exp $
*
* CAPI 2.0 Interface for Linux
*
-diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/capidev.h linux-2.4.29/drivers/isdn/avmb1/capidev.h
---- linux-2.4.29.old/drivers/isdn/avmb1/capidev.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/avmb1/capidev.h 2005-03-22 15:06:44.880269944 +0100
+Index: linux-2.4.35.4/drivers/isdn/avmb1/capidev.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/avmb1/capidev.h 2007-12-15 05:19:39.566675816 +0100
++++ linux-2.4.35.4/drivers/isdn/avmb1/capidev.h 2007-12-15 05:19:55.511584462 +0100
@@ -1,4 +1,4 @@
-/* $Id: capidev.h,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id: capidev.h,v 1.8 2001/09/24 13:22:44 kai Exp $
*
* CAPI 2.0 Interface for Linux
*
-diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/capidrv.c linux-2.4.29/drivers/isdn/avmb1/capidrv.c
---- linux-2.4.29.old/drivers/isdn/avmb1/capidrv.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/avmb1/capidrv.c 2005-03-22 15:06:44.918264168 +0100
+Index: linux-2.4.35.4/drivers/isdn/avmb1/capidrv.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/avmb1/capidrv.c 2007-12-15 05:19:39.570676042 +0100
++++ linux-2.4.35.4/drivers/isdn/avmb1/capidrv.c 2007-12-15 05:19:55.511584462 +0100
@@ -1,4 +1,4 @@
-/* $Id: capidrv.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id: capidrv.c,v 1.45 2001/09/24 13:22:44 kai Exp $
kfree(card->bchans);
card->bchans = 0;
-diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/capidrv.h linux-2.4.29/drivers/isdn/avmb1/capidrv.h
---- linux-2.4.29.old/drivers/isdn/avmb1/capidrv.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/avmb1/capidrv.h 2005-03-22 15:06:44.935261584 +0100
+Index: linux-2.4.35.4/drivers/isdn/avmb1/capidrv.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/avmb1/capidrv.h 2007-12-15 05:19:39.578676498 +0100
++++ linux-2.4.35.4/drivers/isdn/avmb1/capidrv.h 2007-12-15 05:19:55.511584462 +0100
@@ -1,4 +1,4 @@
-/* $Id: capidrv.h,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id: capidrv.h,v 1.4 2001/09/24 13:22:44 kai Exp $
*
* ISDN4Linux Driver, using capi20 interface (kernelcapi)
*
-diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/capifs.c linux-2.4.29/drivers/isdn/avmb1/capifs.c
---- linux-2.4.29.old/drivers/isdn/avmb1/capifs.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/avmb1/capifs.c 2005-03-22 15:06:44.950259304 +0100
+Index: linux-2.4.35.4/drivers/isdn/avmb1/capifs.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/avmb1/capifs.c 2007-12-15 05:19:39.586676956 +0100
++++ linux-2.4.35.4/drivers/isdn/avmb1/capifs.c 2007-12-15 05:19:55.511584462 +0100
@@ -1,4 +1,4 @@
-/* $Id: capifs.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id: capifs.c,v 1.22 2001/09/24 13:22:44 kai Exp $
}
}
}
-diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/capifs.h linux-2.4.29/drivers/isdn/avmb1/capifs.h
---- linux-2.4.29.old/drivers/isdn/avmb1/capifs.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/avmb1/capifs.h 2005-03-22 15:06:44.965257024 +0100
+Index: linux-2.4.35.4/drivers/isdn/avmb1/capifs.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/avmb1/capifs.h 2007-12-15 05:19:39.594677411 +0100
++++ linux-2.4.35.4/drivers/isdn/avmb1/capifs.h 2007-12-15 05:19:55.515584692 +0100
@@ -1,4 +1,4 @@
-/* $Id: capifs.h,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id: capifs.h,v 1.4 2001/09/24 13:22:44 kai Exp $
*
* Copyright 2000 by Carsten Paeth <calle@calle.de>
*
-diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/capilli.h linux-2.4.29/drivers/isdn/avmb1/capilli.h
---- linux-2.4.29.old/drivers/isdn/avmb1/capilli.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/avmb1/capilli.h 2005-03-22 15:06:44.980254744 +0100
+Index: linux-2.4.35.4/drivers/isdn/avmb1/capilli.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/avmb1/capilli.h 2007-12-15 05:19:39.598677637 +0100
++++ linux-2.4.35.4/drivers/isdn/avmb1/capilli.h 2007-12-15 05:19:55.515584692 +0100
@@ -1,4 +1,4 @@
-/* $Id: capilli.h,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id: capilli.h,v 1.5 2001/09/24 13:22:44 kai Exp $
*
* Kernel CAPI 2.0 Driver Interface for Linux
*
-diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/capiutil.c linux-2.4.29/drivers/isdn/avmb1/capiutil.c
---- linux-2.4.29.old/drivers/isdn/avmb1/capiutil.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/avmb1/capiutil.c 2005-03-22 15:06:44.997252160 +0100
+Index: linux-2.4.35.4/drivers/isdn/avmb1/capiutil.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/avmb1/capiutil.c 2007-12-15 05:19:39.606678095 +0100
++++ linux-2.4.35.4/drivers/isdn/avmb1/capiutil.c 2007-12-15 05:19:55.515584692 +0100
@@ -1,4 +1,4 @@
-/* $Id: capiutil.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id: capiutil.c,v 1.16 2001/09/24 13:22:44 kai Exp $
#include "capiutil.h"
MODULE_DESCRIPTION("CAPI4Linux: CAPI message conversion support");
-diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/capiutil.h linux-2.4.29/drivers/isdn/avmb1/capiutil.h
---- linux-2.4.29.old/drivers/isdn/avmb1/capiutil.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/avmb1/capiutil.h 2005-03-22 15:06:45.040245624 +0100
+Index: linux-2.4.35.4/drivers/isdn/avmb1/capiutil.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/avmb1/capiutil.h 2007-12-15 05:19:39.614678551 +0100
++++ linux-2.4.35.4/drivers/isdn/avmb1/capiutil.h 2007-12-15 05:19:55.515584692 +0100
@@ -1,4 +1,4 @@
-/* $Id: capiutil.h,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id: capiutil.h,v 1.7 2001/09/24 13:22:44 kai Exp $
*
* CAPI 2.0 defines & types
*
-diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/kcapi.c linux-2.4.29/drivers/isdn/avmb1/kcapi.c
---- linux-2.4.29.old/drivers/isdn/avmb1/kcapi.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/avmb1/kcapi.c 2005-03-22 15:06:45.062242280 +0100
+Index: linux-2.4.35.4/drivers/isdn/avmb1/kcapi.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/avmb1/kcapi.c 2007-12-15 05:19:39.622679006 +0100
++++ linux-2.4.35.4/drivers/isdn/avmb1/kcapi.c 2007-12-15 05:19:55.519584918 +0100
@@ -1,4 +1,4 @@
-/* $Id: kcapi.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id: kcapi.c,v 1.28 2001/09/24 13:22:44 kai Exp $
printk(KERN_NOTICE "kcapi: card %d \"%s\" ready.\n",
CARDNR(card), card->name);
-diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/t1isa.c linux-2.4.29/drivers/isdn/avmb1/t1isa.c
---- linux-2.4.29.old/drivers/isdn/avmb1/t1isa.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/avmb1/t1isa.c 2005-03-22 15:06:45.078239848 +0100
+Index: linux-2.4.35.4/drivers/isdn/avmb1/t1isa.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/avmb1/t1isa.c 2007-12-15 05:19:39.626679235 +0100
++++ linux-2.4.35.4/drivers/isdn/avmb1/t1isa.c 2007-12-15 05:19:55.519584918 +0100
@@ -1,4 +1,4 @@
-/* $Id: t1isa.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id: t1isa.c,v 1.22 2001/09/24 13:22:44 kai Exp $
/* ------------------------------------------------------------- */
-diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/t1pci.c linux-2.4.29/drivers/isdn/avmb1/t1pci.c
---- linux-2.4.29.old/drivers/isdn/avmb1/t1pci.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/avmb1/t1pci.c 2005-03-22 15:06:45.094237416 +0100
+Index: linux-2.4.35.4/drivers/isdn/avmb1/t1pci.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/avmb1/t1pci.c 2007-12-15 05:19:39.634679691 +0100
++++ linux-2.4.35.4/drivers/isdn/avmb1/t1pci.c 2007-12-15 05:19:55.519584918 +0100
@@ -1,4 +1,4 @@
-/* $Id: t1pci.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id: t1pci.c,v 1.25 2001/09/24 13:22:44 kai Exp $
printk(KERN_INFO
"%s: PCI BIOS reports AVM-T1-PCI at i/o %#x, irq %d, mem %#x\n",
-diff -rNu linux-2.4.29.old/drivers/isdn/divert/divert_procfs.c linux-2.4.29/drivers/isdn/divert/divert_procfs.c
---- linux-2.4.29.old/drivers/isdn/divert/divert_procfs.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/divert/divert_procfs.c 2005-03-22 15:06:45.158227688 +0100
+Index: linux-2.4.35.4/drivers/isdn/divert/divert_procfs.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/divert/divert_procfs.c 2007-12-15 05:19:39.642680146 +0100
++++ linux-2.4.35.4/drivers/isdn/divert/divert_procfs.c 2007-12-15 05:19:55.519584918 +0100
@@ -1,4 +1,4 @@
-/* $Id: divert_procfs.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
+/* $Id$
#endif /* CONFIG_PROC_FS */
return (0);
-diff -rNu linux-2.4.29.old/drivers/isdn/divert/isdn_divert.c linux-2.4.29/drivers/isdn/divert/isdn_divert.c
---- linux-2.4.29.old/drivers/isdn/divert/isdn_divert.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/divert/isdn_divert.c 2005-03-22 15:06:45.173225408 +0100
+Index: linux-2.4.35.4/drivers/isdn/divert/isdn_divert.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/divert/isdn_divert.c 2007-12-15 05:19:39.650680601 +0100
++++ linux-2.4.35.4/drivers/isdn/divert/isdn_divert.c 2007-12-15 05:19:55.523585147 +0100
@@ -1,4 +1,4 @@
-/* $Id: isdn_divert.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
+/* $Id$
break;
default:
-diff -rNu linux-2.4.29.old/drivers/isdn/divert/isdn_divert.h linux-2.4.29/drivers/isdn/divert/isdn_divert.h
---- linux-2.4.29.old/drivers/isdn/divert/isdn_divert.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/divert/isdn_divert.h 2005-03-22 15:06:45.189222976 +0100
+Index: linux-2.4.35.4/drivers/isdn/divert/isdn_divert.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/divert/isdn_divert.h 2007-12-15 05:19:39.658681057 +0100
++++ linux-2.4.35.4/drivers/isdn/divert/isdn_divert.h 2007-12-15 05:19:55.523585147 +0100
@@ -1,4 +1,4 @@
-/* $Id: isdn_divert.h,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
+/* $Id$
actions 1-2 only take place if interface is opened
*/
u_char waittime; /* maximum wait time for proceeding */
-diff -rNu linux-2.4.29.old/drivers/isdn/eicon/Divas_mod.c linux-2.4.29/drivers/isdn/eicon/Divas_mod.c
---- linux-2.4.29.old/drivers/isdn/eicon/Divas_mod.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/eicon/Divas_mod.c 2005-03-22 15:06:45.229216896 +0100
+Index: linux-2.4.35.4/drivers/isdn/eicon/Divas_mod.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/eicon/Divas_mod.c 2007-12-15 05:19:39.666681515 +0100
++++ linux-2.4.35.4/drivers/isdn/eicon/Divas_mod.c 2007-12-15 05:19:55.523585147 +0100
@@ -20,6 +20,7 @@
#include "adapter.h"
#include "uxio.h"
MODULE_DESCRIPTION("ISDN4Linux: Driver for Eicon Diva Server cards");
MODULE_AUTHOR("Armin Schindler");
-diff -rNu linux-2.4.29.old/drivers/isdn/eicon/common.c linux-2.4.29/drivers/isdn/eicon/common.c
---- linux-2.4.29.old/drivers/isdn/eicon/common.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/eicon/common.c 2005-03-22 15:06:45.301205952 +0100
+Index: linux-2.4.35.4/drivers/isdn/eicon/common.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/eicon/common.c 2007-12-15 05:19:39.670681741 +0100
++++ linux-2.4.35.4/drivers/isdn/eicon/common.c 2007-12-15 05:19:55.523585147 +0100
@@ -808,9 +808,7 @@
while(i--)
}
}
-diff -rNu linux-2.4.29.old/drivers/isdn/eicon/eicon.h linux-2.4.29/drivers/isdn/eicon/eicon.h
---- linux-2.4.29.old/drivers/isdn/eicon/eicon.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/eicon/eicon.h 2005-03-22 15:06:45.371195312 +0100
+Index: linux-2.4.35.4/drivers/isdn/eicon/eicon.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/eicon/eicon.h 2007-12-15 05:19:39.678682197 +0100
++++ linux-2.4.35.4/drivers/isdn/eicon/eicon.h 2007-12-15 05:19:55.523585147 +0100
@@ -1,4 +1,4 @@
-/* $Id: eicon.h,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
+/* $Id: eicon.h,v 1.26 2001/09/24 13:22:47 kai Exp $
*
* ISDN low-level module for Eicon active ISDN-Cards.
*
-@@ -348,19 +348,19 @@
+@@ -347,19 +347,19 @@
extern char *eicon_ctype_name[];
{
queue_task(&card->ack_tq, &tq_immediate);
mark_bh(IMMEDIATE_BH);
-diff -rNu linux-2.4.29.old/drivers/isdn/eicon/eicon_dsp.h linux-2.4.29/drivers/isdn/eicon/eicon_dsp.h
---- linux-2.4.29.old/drivers/isdn/eicon/eicon_dsp.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/eicon/eicon_dsp.h 2005-03-22 15:06:45.386193032 +0100
+Index: linux-2.4.35.4/drivers/isdn/eicon/eicon_dsp.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/eicon/eicon_dsp.h 2007-12-15 05:19:39.686682655 +0100
++++ linux-2.4.35.4/drivers/isdn/eicon/eicon_dsp.h 2007-12-15 05:19:55.523585147 +0100
@@ -1,4 +1,4 @@
-/* $Id: eicon_dsp.h,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
+/* $Id: eicon_dsp.h,v 1.8 2001/09/24 13:22:47 kai Exp $
*
* ISDN lowlevel-module for Eicon active cards.
* DSP definitions
-diff -rNu linux-2.4.29.old/drivers/isdn/eicon/eicon_idi.c linux-2.4.29/drivers/isdn/eicon/eicon_idi.c
---- linux-2.4.29.old/drivers/isdn/eicon/eicon_idi.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/eicon/eicon_idi.c 2005-03-22 15:06:45.421187712 +0100
+Index: linux-2.4.35.4/drivers/isdn/eicon/eicon_idi.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/eicon/eicon_idi.c 2007-12-15 05:19:39.694683110 +0100
++++ linux-2.4.35.4/drivers/isdn/eicon/eicon_idi.c 2007-12-15 05:19:55.527585376 +0100
@@ -1,4 +1,4 @@
-/* $Id: eicon_idi.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
+/* $Id: eicon_idi.c,v 1.45 2001/11/07 22:35:48 kai Exp $
chan->statectrl &= ~WAITING_FOR_HANGUP;
chan->statectrl &= ~IN_HOLD;
if (chan->statectrl & HAVE_CONN_REQ) {
-diff -rNu linux-2.4.29.old/drivers/isdn/eicon/eicon_idi.h linux-2.4.29/drivers/isdn/eicon/eicon_idi.h
---- linux-2.4.29.old/drivers/isdn/eicon/eicon_idi.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/eicon/eicon_idi.h 2005-03-22 15:06:45.437185280 +0100
+Index: linux-2.4.35.4/drivers/isdn/eicon/eicon_idi.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/eicon/eicon_idi.h 2007-12-15 05:19:39.698683336 +0100
++++ linux-2.4.35.4/drivers/isdn/eicon/eicon_idi.h 2007-12-15 05:19:55.527585376 +0100
@@ -1,4 +1,4 @@
-/* $Id: eicon_idi.h,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
+/* $Id: eicon_idi.h,v 1.12 2001/09/24 13:22:47 kai Exp $
*
* ISDN lowlevel-module for the Eicon active cards.
* IDI-Interface
-diff -rNu linux-2.4.29.old/drivers/isdn/eicon/eicon_io.c linux-2.4.29/drivers/isdn/eicon/eicon_io.c
---- linux-2.4.29.old/drivers/isdn/eicon/eicon_io.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/eicon/eicon_io.c 2005-03-22 15:06:45.453182848 +0100
+Index: linux-2.4.35.4/drivers/isdn/eicon/eicon_io.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/eicon/eicon_io.c 2007-12-15 05:19:39.706683794 +0100
++++ linux-2.4.35.4/drivers/isdn/eicon/eicon_io.c 2007-12-15 05:19:55.531585602 +0100
@@ -1,4 +1,4 @@
-/* $Id: eicon_io.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
+/* $Id: eicon_io.c,v 1.15 2001/09/24 13:22:47 kai Exp $
*
* ISDN low-level module for Eicon active ISDN-Cards.
* Code for communicating with hardware.
-diff -rNu linux-2.4.29.old/drivers/isdn/eicon/eicon_isa.c linux-2.4.29/drivers/isdn/eicon/eicon_isa.c
---- linux-2.4.29.old/drivers/isdn/eicon/eicon_isa.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/eicon/eicon_isa.c 2005-03-22 15:06:45.469180416 +0100
+Index: linux-2.4.35.4/drivers/isdn/eicon/eicon_isa.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/eicon/eicon_isa.c 2007-12-15 05:19:39.714684250 +0100
++++ linux-2.4.35.4/drivers/isdn/eicon/eicon_isa.c 2007-12-15 05:19:55.531585602 +0100
@@ -1,4 +1,4 @@
-/* $Id: eicon_isa.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
+/* $Id: eicon_isa.c,v 1.18 2001/11/07 22:35:48 kai Exp $
#ifdef EICON_MCA_DEBUG
printk(KERN_INFO "eicon_isa_boot: card->ramsize = %d.\n", card->ramsize);
#endif
-diff -rNu linux-2.4.29.old/drivers/isdn/eicon/eicon_isa.h linux-2.4.29/drivers/isdn/eicon/eicon_isa.h
---- linux-2.4.29.old/drivers/isdn/eicon/eicon_isa.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/eicon/eicon_isa.h 2005-03-22 15:06:45.485177984 +0100
+Index: linux-2.4.35.4/drivers/isdn/eicon/eicon_isa.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/eicon/eicon_isa.h 2007-12-15 05:19:39.722684705 +0100
++++ linux-2.4.35.4/drivers/isdn/eicon/eicon_isa.h 2007-12-15 05:19:55.531585602 +0100
@@ -1,4 +1,4 @@
-/* $Id: eicon_isa.h,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
+/* $Id: eicon_isa.h,v 1.11 2001/09/24 13:22:47 kai Exp $
*
* ISDN low-level module for Eicon active ISDN-Cards.
*
-diff -rNu linux-2.4.29.old/drivers/isdn/eicon/eicon_mod.c linux-2.4.29/drivers/isdn/eicon/eicon_mod.c
---- linux-2.4.29.old/drivers/isdn/eicon/eicon_mod.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/eicon/eicon_mod.c 2005-03-22 15:06:45.505174944 +0100
+Index: linux-2.4.35.4/drivers/isdn/eicon/eicon_mod.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/eicon/eicon_mod.c 2007-12-15 05:19:39.726684934 +0100
++++ linux-2.4.35.4/drivers/isdn/eicon/eicon_mod.c 2007-12-15 05:19:55.531585602 +0100
@@ -1,4 +1,4 @@
-/* $Id: eicon_mod.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
+/* $Id: eicon_mod.c,v 1.44 2001/11/20 09:48:25 armin Exp $
#endif /* MODULE */
-diff -rNu linux-2.4.29.old/drivers/isdn/eicon/eicon_pci.c linux-2.4.29/drivers/isdn/eicon/eicon_pci.c
---- linux-2.4.29.old/drivers/isdn/eicon/eicon_pci.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/eicon/eicon_pci.c 2005-03-22 15:06:45.522172360 +0100
+Index: linux-2.4.35.4/drivers/isdn/eicon/eicon_pci.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/eicon/eicon_pci.c 2007-12-15 05:19:39.734685390 +0100
++++ linux-2.4.35.4/drivers/isdn/eicon/eicon_pci.c 2007-12-15 05:19:55.535585832 +0100
@@ -1,4 +1,4 @@
-/* $Id: eicon_pci.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
+/* $Id: eicon_pci.c,v 1.18 2001/09/24 13:22:47 kai Exp $
#if CONFIG_PCI /* intire stuff is only for PCI */
#ifdef CONFIG_ISDN_DRV_EICON_PCI
-diff -rNu linux-2.4.29.old/drivers/isdn/eicon/eicon_pci.h linux-2.4.29/drivers/isdn/eicon/eicon_pci.h
---- linux-2.4.29.old/drivers/isdn/eicon/eicon_pci.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/eicon/eicon_pci.h 2005-03-22 15:06:45.538169928 +0100
+Index: linux-2.4.35.4/drivers/isdn/eicon/eicon_pci.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/eicon/eicon_pci.h 2007-12-15 05:19:39.742685845 +0100
++++ linux-2.4.35.4/drivers/isdn/eicon/eicon_pci.h 2007-12-15 05:19:55.535585832 +0100
@@ -1,4 +1,4 @@
-/* $Id: eicon_pci.h,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
+/* $Id: eicon_pci.h,v 1.7 2001/09/24 13:22:47 kai Exp $
*
* ISDN low-level module for Eicon active ISDN-Cards (PCI part).
*
-diff -rNu linux-2.4.29.old/drivers/isdn/eicon/fourbri.c linux-2.4.29/drivers/isdn/eicon/fourbri.c
---- linux-2.4.29.old/drivers/isdn/eicon/fourbri.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/eicon/fourbri.c 2005-03-22 15:06:45.553167648 +0100
+Index: linux-2.4.35.4/drivers/isdn/eicon/fourbri.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/eicon/fourbri.c 2007-12-15 05:19:39.750686300 +0100
++++ linux-2.4.35.4/drivers/isdn/eicon/fourbri.c 2007-12-15 05:19:55.535585832 +0100
@@ -337,8 +337,7 @@
static int diva_server_4bri_start(card_t *card, byte *channels)
{
int adapter_num;
DPRINTF(("divas: start Diva Server 4BRI"));
-diff -rNu linux-2.4.29.old/drivers/isdn/eicon/kprintf.c linux-2.4.29/drivers/isdn/eicon/kprintf.c
---- linux-2.4.29.old/drivers/isdn/eicon/kprintf.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/eicon/kprintf.c 2005-03-22 15:06:45.601160352 +0100
+Index: linux-2.4.35.4/drivers/isdn/eicon/kprintf.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/eicon/kprintf.c 2007-12-15 05:19:39.754686529 +0100
++++ linux-2.4.35.4/drivers/isdn/eicon/kprintf.c 2007-12-15 05:19:55.535585832 +0100
@@ -18,6 +18,468 @@
#include "divalog.h"
#include "uxio.h"
va_end(argptr);
-diff -rNu linux-2.4.29.old/drivers/isdn/eicon/lincfg.c linux-2.4.29/drivers/isdn/eicon/lincfg.c
---- linux-2.4.29.old/drivers/isdn/eicon/lincfg.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/eicon/lincfg.c 2005-03-22 15:06:45.620157464 +0100
+Index: linux-2.4.35.4/drivers/isdn/eicon/lincfg.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/eicon/lincfg.c 2007-12-15 05:19:39.762686985 +0100
++++ linux-2.4.35.4/drivers/isdn/eicon/lincfg.c 2007-12-15 05:19:55.535585832 +0100
@@ -26,6 +26,9 @@
#include "uxio.h"
#include <linux/kernel.h>
#include <linux/ioport.h>
-diff -rNu linux-2.4.29.old/drivers/isdn/eicon/linchr.c linux-2.4.29/drivers/isdn/eicon/linchr.c
---- linux-2.4.29.old/drivers/isdn/eicon/linchr.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/eicon/linchr.c 2005-03-22 15:06:45.635155184 +0100
+Index: linux-2.4.35.4/drivers/isdn/eicon/linchr.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/eicon/linchr.c 2007-12-15 05:19:39.770687440 +0100
++++ linux-2.4.35.4/drivers/isdn/eicon/linchr.c 2007-12-15 05:19:55.539586058 +0100
@@ -154,17 +154,17 @@
klog_t *pHeadItem;
kfree(pHeadItem);
return sizeof(klog_t);
}
-diff -rNu linux-2.4.29.old/drivers/isdn/eicon/linio.c linux-2.4.29/drivers/isdn/eicon/linio.c
---- linux-2.4.29.old/drivers/isdn/eicon/linio.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/eicon/linio.c 2005-03-22 15:06:45.651152752 +0100
+Index: linux-2.4.35.4/drivers/isdn/eicon/linio.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/eicon/linio.c 2007-12-15 05:19:39.778687896 +0100
++++ linux-2.4.35.4/drivers/isdn/eicon/linio.c 2007-12-15 05:19:55.539586058 +0100
@@ -15,6 +15,7 @@
#include <linux/slab.h>
#include <linux/pci.h>
#undef N_DATA
#include "uxio.h"
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/Makefile linux-2.4.29/drivers/isdn/hisax/Makefile
---- linux-2.4.29.old/drivers/isdn/hisax/Makefile 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/Makefile 2005-03-22 15:06:45.819127216 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/Makefile 2007-12-15 05:19:39.786688354 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/Makefile 2007-12-15 05:19:55.539586058 +0100
@@ -4,20 +4,17 @@
O_TARGET := vmlinux-obj.o
CERT := $(shell md5sum -c md5sums.asc >> /dev/null;echo $$?)
CFLAGS_cert.o := -DCERTIFICATION=$(CERT)
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/amd7930.c linux-2.4.29/drivers/isdn/hisax/amd7930.c
---- linux-2.4.29.old/drivers/isdn/hisax/amd7930.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/amd7930.c 2005-03-22 15:06:45.837124480 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/amd7930.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/isdn/hisax/amd7930.c 2007-12-15 05:19:55.539586058 +0100
@@ -0,0 +1,755 @@
+/* $Id: amd7930.c,v 1.8 2001/09/24 13:22:55 kai Exp $
+ *
+
+ return (1);
+}
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/arcofi.c linux-2.4.29/drivers/isdn/hisax/arcofi.c
---- linux-2.4.29.old/drivers/isdn/hisax/arcofi.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/arcofi.c 2005-03-22 15:06:45.852122200 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/arcofi.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/arcofi.c 2007-12-15 05:19:39.798689035 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/arcofi.c 2007-12-15 05:19:55.539586058 +0100
@@ -1,4 +1,4 @@
-/* $Id: arcofi.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
+/* $Id: arcofi.c,v 1.14 2001/09/24 13:22:55 kai Exp $
*
* Ansteuerung ARCOFI 2165
*
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/arcofi.h linux-2.4.29/drivers/isdn/hisax/arcofi.h
---- linux-2.4.29.old/drivers/isdn/hisax/arcofi.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/arcofi.h 2005-03-22 15:06:45.872119160 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/arcofi.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/arcofi.h 2007-12-15 05:19:39.802689264 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/arcofi.h 2007-12-15 05:19:55.543586286 +0100
@@ -1,4 +1,4 @@
-/* $Id: arcofi.h,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
+/* $Id$
*
* Ansteuerung ARCOFI 2165
*
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/asuscom.c linux-2.4.29/drivers/isdn/hisax/asuscom.c
---- linux-2.4.29.old/drivers/isdn/hisax/asuscom.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/asuscom.c 2005-03-22 15:06:45.889116576 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/asuscom.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/asuscom.c 2007-12-15 05:19:39.810689720 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/asuscom.c 2007-12-15 05:19:55.543586286 +0100
@@ -1,4 +1,4 @@
-/* $Id: asuscom.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
+/* $Id: asuscom.c,v 1.14 2001/09/24 13:22:55 kai Exp $
bytecnt = 8;
cs->hw.asus.cfg_reg = card->para[1];
cs->irq = card->para[0];
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/avm_a1.c linux-2.4.29/drivers/isdn/hisax/avm_a1.c
---- linux-2.4.29.old/drivers/isdn/hisax/avm_a1.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/avm_a1.c 2005-03-22 15:06:45.904114296 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/avm_a1.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/avm_a1.c 2007-12-15 05:19:39.818690175 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/avm_a1.c 2007-12-15 05:19:55.543586286 +0100
@@ -1,4 +1,4 @@
-/* $Id: avm_a1.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
+/* $Id: avm_a1.c,v 2.15 2001/09/24 13:22:55 kai Exp $
#define AVM_A1_STAT_ISAC 0x01
#define AVM_A1_STAT_HSCX 0x02
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/avm_a1p.c linux-2.4.29/drivers/isdn/hisax/avm_a1p.c
---- linux-2.4.29.old/drivers/isdn/hisax/avm_a1p.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/avm_a1p.c 2005-03-22 15:06:45.919112016 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/avm_a1p.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/avm_a1p.c 2007-12-15 05:19:39.826690633 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/avm_a1p.c 2007-12-15 05:19:55.543586286 +0100
@@ -1,4 +1,4 @@
-/* $Id: avm_a1p.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
+/* $Id: avm_a1p.c,v 2.9 2001/09/24 13:22:55 kai Exp $
static inline u_char
ReadISAC(struct IsdnCardState *cs, u_char offset)
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/avm_pci.c linux-2.4.29/drivers/isdn/hisax/avm_pci.c
---- linux-2.4.29.old/drivers/isdn/hisax/avm_pci.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/avm_pci.c 2005-03-22 15:06:45.945108064 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/avm_pci.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/avm_pci.c 2007-12-15 05:19:39.830690859 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/avm_pci.c 2007-12-15 05:19:55.543586286 +0100
@@ -1,4 +1,4 @@
-/* $Id: avm_pci.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
+/* $Id: avm_pci.c,v 1.29 2001/09/24 13:22:55 kai Exp $
cs->hw.avm.isac = cs->hw.avm.cfg_reg + 0x10;
if (check_region((cs->hw.avm.cfg_reg), 32)) {
printk(KERN_WARNING
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/bkm_a4t.c linux-2.4.29/drivers/isdn/hisax/bkm_a4t.c
---- linux-2.4.29.old/drivers/isdn/hisax/bkm_a4t.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/bkm_a4t.c 2005-03-22 15:06:45.962105480 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/bkm_a4t.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/bkm_a4t.c 2007-12-15 05:19:39.838691315 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/bkm_a4t.c 2007-12-15 05:19:55.547586516 +0100
@@ -1,4 +1,4 @@
-/* $Id: bkm_a4t.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
+/* $Id: bkm_a4t.c,v 1.22 2001/09/24 13:22:55 kai Exp $
cs->irq = dev_a4t->irq;
break;
}
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/bkm_a8.c linux-2.4.29/drivers/isdn/hisax/bkm_a8.c
---- linux-2.4.29.old/drivers/isdn/hisax/bkm_a8.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/bkm_a8.c 2005-03-22 15:06:45.982102440 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/bkm_a8.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/bkm_a8.c 2007-12-15 05:19:39.846691773 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/bkm_a8.c 2007-12-15 05:19:55.547586516 +0100
@@ -1,4 +1,4 @@
-/* $Id: bkm_a8.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
+/* $Id: bkm_a8.c,v 1.22 2001/09/24 13:22:55 kai Exp $
}
#endif /* End HACK */
}
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/bkm_ax.h linux-2.4.29/drivers/isdn/hisax/bkm_ax.h
---- linux-2.4.29.old/drivers/isdn/hisax/bkm_ax.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/bkm_ax.h 2005-03-22 15:06:46.010098184 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/bkm_ax.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/bkm_ax.h 2007-12-15 05:19:39.854692228 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/bkm_ax.h 2007-12-15 05:19:55.547586516 +0100
@@ -1,4 +1,4 @@
-/* $Id: bkm_ax.h,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
+/* $Id$
*
* low level decls for T-Berkom cards A4T and Scitel Quadro (4*S0, passive)
*
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/callc.c linux-2.4.29/drivers/isdn/hisax/callc.c
---- linux-2.4.29.old/drivers/isdn/hisax/callc.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/callc.c 2005-03-22 15:06:46.027095600 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/callc.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/callc.c 2007-12-15 05:19:39.862692684 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/callc.c 2007-12-15 05:19:55.547586516 +0100
@@ -1,4 +1,4 @@
-/* $Id: callc.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
+/* $Id: callc.c,v 2.59 2002/02/09 21:19:11 keil Exp $
case (CC_PROGRESS | INDICATION):
case (CC_NOTIFY | INDICATION):
break;
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/cert.c linux-2.4.29/drivers/isdn/hisax/cert.c
---- linux-2.4.29.old/drivers/isdn/hisax/cert.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/cert.c 2005-03-22 15:06:46.042093320 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/cert.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/cert.c 2007-12-15 05:19:39.866692913 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/cert.c 2007-12-15 05:19:55.551586742 +0100
@@ -1,4 +1,4 @@
-/* $Id: cert.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
+/* $Id: cert.c,v 2.6 2001/09/24 13:22:56 kai Exp $
*
* Author Karsten Keil
* Copyright by Karsten Keil <keil@isdn4linux.de>
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/config.c linux-2.4.29/drivers/isdn/hisax/config.c
---- linux-2.4.29.old/drivers/isdn/hisax/config.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/config.c 2005-03-22 15:06:46.077088000 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/config.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/config.c 2007-12-15 05:19:39.874693368 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/config.c 2007-12-15 05:19:55.551586742 +0100
@@ -1,4 +1,4 @@
-/* $Id: config.c,v 1.1.4.5 2001/12/09 19:19:26 kai Exp $
+/* $Id: config.c,v 2.84 2002/08/13 09:55:29 keil Exp $
-EXPORT_SYMBOL(FsmInitTimer);
-EXPORT_SYMBOL(FsmDelTimer);
-EXPORT_SYMBOL(FsmRestartTimer);
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/diva.c linux-2.4.29/drivers/isdn/hisax/diva.c
---- linux-2.4.29.old/drivers/isdn/hisax/diva.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/diva.c 2005-03-22 15:06:46.106083592 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/diva.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/diva.c 2007-12-15 05:19:39.882693823 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/diva.c 2007-12-15 05:19:55.551586742 +0100
@@ -1,4 +1,4 @@
-/* $Id: diva.c,v 1.1.4.2 2002/08/30 11:21:00 keil Exp $
+/* $Id: diva.c,v 1.33 2001/09/24 13:22:56 kai Exp $
} else { /* DIVA 2.0 */
cs->hw.diva.tl.function = (void *) diva_led_handler;
cs->hw.diva.tl.data = (long) cs;
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/elsa.c linux-2.4.29/drivers/isdn/hisax/elsa.c
---- linux-2.4.29.old/drivers/isdn/hisax/elsa.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/elsa.c 2005-03-22 15:06:46.123081008 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/elsa.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/elsa.c 2007-12-15 05:19:39.890694279 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/elsa.c 2007-12-15 05:19:55.555586971 +0100
@@ -1,4 +1,4 @@
-/* $Id: elsa.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
+/* $Id: elsa.c,v 2.32 2001/09/24 13:22:56 kai Exp $
case ELSA_QS3000PCI:
bytecnt = 16;
break;
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/elsa_cs.c linux-2.4.29/drivers/isdn/hisax/elsa_cs.c
---- linux-2.4.29.old/drivers/isdn/hisax/elsa_cs.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/elsa_cs.c 2005-03-22 15:06:46.138078728 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/elsa_cs.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/elsa_cs.c 2007-12-15 05:19:39.894694508 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/elsa_cs.c 2007-12-15 05:19:55.555586971 +0100
@@ -72,7 +72,7 @@
MODULE_PARM(pc_debug, "i");
#define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args);
#else
#define DEBUG(n, args...)
#endif
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/elsa_ser.c linux-2.4.29/drivers/isdn/hisax/elsa_ser.c
---- linux-2.4.29.old/drivers/isdn/hisax/elsa_ser.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/elsa_ser.c 2005-03-22 15:06:46.158075688 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/elsa_ser.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/elsa_ser.c 2007-12-15 05:19:39.902694963 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/elsa_ser.c 2007-12-15 05:19:55.555586971 +0100
@@ -1,4 +1,4 @@
-/* $Id: elsa_ser.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
+/* $Id: elsa_ser.c,v 2.14 2001/09/24 13:22:56 kai Exp $
static void rs_interrupt_elsa(int irq, struct IsdnCardState *cs)
{
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/fsm.c linux-2.4.29/drivers/isdn/hisax/fsm.c
---- linux-2.4.29.old/drivers/isdn/hisax/fsm.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/fsm.c 2005-03-22 15:06:46.174073256 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/fsm.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/fsm.c 2007-12-15 05:19:39.910695419 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/fsm.c 2007-12-15 05:19:55.555586971 +0100
@@ -1,4 +1,4 @@
-/* $Id: fsm.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
+/* $Id$
int __init
FsmNew(struct Fsm *fsm, struct FsmNode *fnlist, int fncount)
{
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/fsm.h linux-2.4.29/drivers/isdn/hisax/fsm.h
---- linux-2.4.29.old/drivers/isdn/hisax/fsm.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/fsm.h 2005-03-22 15:06:46.189070976 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/fsm.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/fsm.h 2007-12-15 05:19:39.918695874 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/fsm.h 2007-12-15 05:19:55.555586971 +0100
@@ -1,4 +1,4 @@
-/* $Id: fsm.h,v 1.1.2.1 2001/11/20 14:19:35 kai Exp $
+/* $Id$
*
* Finite state machine
*
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/gazel.c linux-2.4.29/drivers/isdn/hisax/gazel.c
---- linux-2.4.29.old/drivers/isdn/hisax/gazel.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/gazel.c 2005-03-22 15:06:46.205068544 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/gazel.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/gazel.c 2007-12-15 05:19:39.922696103 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/gazel.c 2007-12-15 05:19:55.559587200 +0100
@@ -1,4 +1,4 @@
-/* $Id: gazel.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
+/* $Id: gazel.c,v 2.19 2001/09/24 13:22:56 kai Exp $
found = 1;
}
if (found)
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hfc_2bds0.c linux-2.4.29/drivers/isdn/hisax/hfc_2bds0.c
---- linux-2.4.29.old/drivers/isdn/hisax/hfc_2bds0.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hfc_2bds0.c 2005-03-22 15:06:46.221066112 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hfc_2bds0.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/hfc_2bds0.c 2007-12-15 05:19:39.930696558 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/hfc_2bds0.c 2007-12-15 05:19:55.559587200 +0100
@@ -1,4 +1,4 @@
-/* $Id: hfc_2bds0.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
+/* $Id: hfc_2bds0.c,v 1.18 2001/09/24 13:22:56 kai Exp $
}
unsigned int __init
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hfc_2bds0.h linux-2.4.29/drivers/isdn/hisax/hfc_2bds0.h
---- linux-2.4.29.old/drivers/isdn/hisax/hfc_2bds0.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hfc_2bds0.h 2005-03-22 15:06:46.236063832 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hfc_2bds0.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/hfc_2bds0.h 2007-12-15 05:19:39.938697014 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/hfc_2bds0.h 2007-12-15 05:19:55.559587200 +0100
@@ -1,4 +1,4 @@
-/* $Id: hfc_2bds0.h,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
+/* $Id: hfc_2bds0.h,v 1.6 2001/09/24 13:22:56 kai Exp $
*
* specific defines for CCD's HFC 2BDS0
*
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hfc_2bs0.c linux-2.4.29/drivers/isdn/hisax/hfc_2bs0.c
---- linux-2.4.29.old/drivers/isdn/hisax/hfc_2bs0.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hfc_2bs0.c 2005-03-22 15:06:46.272058360 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hfc_2bs0.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/hfc_2bs0.c 2007-12-15 05:19:39.946697472 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/hfc_2bs0.c 2007-12-15 05:19:55.559587200 +0100
@@ -1,4 +1,4 @@
-/* $Id: hfc_2bs0.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
+/* $Id: hfc_2bs0.c,v 1.20 2001/09/24 13:22:56 kai Exp $
*
* specific routines for CCD's HFC 2BS0
*
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hfc_2bs0.h linux-2.4.29/drivers/isdn/hisax/hfc_2bs0.h
---- linux-2.4.29.old/drivers/isdn/hisax/hfc_2bs0.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hfc_2bs0.h 2005-03-22 15:06:46.288055928 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hfc_2bs0.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/hfc_2bs0.h 2007-12-15 05:19:39.954697927 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/hfc_2bs0.h 2007-12-15 05:19:55.563587427 +0100
@@ -1,4 +1,4 @@
-/* $Id: hfc_2bs0.h,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
+/* $Id: hfc_2bs0.h,v 1.5 2001/09/24 13:22:56 kai Exp $
*
* specific defines for CCD's HFC 2BS0
*
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hfc_pci.c linux-2.4.29/drivers/isdn/hisax/hfc_pci.c
---- linux-2.4.29.old/drivers/isdn/hisax/hfc_pci.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hfc_pci.c 2005-03-22 15:06:46.305053344 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hfc_pci.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/hfc_pci.c 2007-12-15 05:19:39.958698154 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/hfc_pci.c 2007-12-15 05:19:55.567587653 +0100
@@ -1,4 +1,4 @@
-/* $Id: hfc_pci.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
+/* $Id: hfc_pci.c,v 1.48 2001/09/24 13:22:56 kai Exp $
(((ulong) cs->hw.hfcpci.share_start) & ~0x7FFF) + 0x8000;
pcibios_write_config_dword(cs->hw.hfcpci.pci_bus,
cs->hw.hfcpci.pci_device_fn, 0x80,
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hfc_pci.h linux-2.4.29/drivers/isdn/hisax/hfc_pci.h
---- linux-2.4.29.old/drivers/isdn/hisax/hfc_pci.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hfc_pci.h 2005-03-22 15:06:46.320051064 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hfc_pci.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/hfc_pci.h 2007-12-15 05:19:39.966698612 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/hfc_pci.h 2007-12-15 05:19:55.571587882 +0100
@@ -1,4 +1,4 @@
-/* $Id: hfc_pci.h,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
+/* $Id: hfc_pci.h,v 1.10 2001/09/24 13:22:56 kai Exp $
*
* specific defines for CCD's HFC 2BDS0 PCI chips
*
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hfc_sx.c linux-2.4.29/drivers/isdn/hisax/hfc_sx.c
---- linux-2.4.29.old/drivers/isdn/hisax/hfc_sx.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hfc_sx.c 2005-03-22 15:06:46.350046504 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hfc_sx.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/hfc_sx.c 2007-12-15 05:19:39.974699067 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/hfc_sx.c 2007-12-15 05:19:55.571587882 +0100
@@ -1,4 +1,4 @@
-/* $Id: hfc_sx.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
+/* $Id: hfc_sx.c,v 1.12 2001/09/24 13:22:56 kai Exp $
+
+
+
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hfc_sx.h linux-2.4.29/drivers/isdn/hisax/hfc_sx.h
---- linux-2.4.29.old/drivers/isdn/hisax/hfc_sx.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hfc_sx.h 2005-03-22 15:06:46.365044224 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hfc_sx.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/hfc_sx.h 2007-12-15 05:19:39.982699522 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/hfc_sx.h 2007-12-15 05:19:55.571587882 +0100
@@ -1,4 +1,4 @@
-/* $Id: hfc_sx.h,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
+/* $Id$
*
* specific defines for CCD's HFC 2BDS0 S+,SP chips
*
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hfc_usb.c linux-2.4.29/drivers/isdn/hisax/hfc_usb.c
---- linux-2.4.29.old/drivers/isdn/hisax/hfc_usb.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hfc_usb.c 2005-03-22 15:06:46.381041792 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hfc_usb.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/isdn/hisax/hfc_usb.c 2007-12-15 05:19:55.575588111 +0100
@@ -0,0 +1,1189 @@
+/* $Id: hfc_usb.c,v 2.3 2001/07/06 21:30:11 werner Exp $
+ *
+
+module_init(hfc_usb_init);
+module_exit(hfc_usb_exit);
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hfc_usbr.c linux-2.4.29/drivers/isdn/hisax/hfc_usbr.c
---- linux-2.4.29.old/drivers/isdn/hisax/hfc_usbr.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hfc_usbr.c 2005-03-22 15:06:46.397039360 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hfc_usbr.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/isdn/hisax/hfc_usbr.c 2007-12-15 05:19:55.575588111 +0100
@@ -0,0 +1,471 @@
+/* $Id: hfc_usbr.c,v 2.5 2001/07/06 21:30:11 werner Exp $
+
+ cs->cardmsg = &hfcusb_card_msg;
+ return (1); /* success */
+}
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hfcscard.c linux-2.4.29/drivers/isdn/hisax/hfcscard.c
---- linux-2.4.29.old/drivers/isdn/hisax/hfcscard.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hfcscard.c 2005-03-22 15:06:46.412037080 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hfcscard.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/hfcscard.c 2007-12-15 05:19:39.998700433 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/hfcscard.c 2007-12-15 05:19:55.575588111 +0100
@@ -1,4 +1,4 @@
-/* $Id: hfcscard.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
+/* $Id: hfcscard.c,v 1.10 2001/09/24 13:22:56 kai Exp $
cs->hw.hfcD.addr = card->para[1] & 0xfffe;
cs->irq = card->para[0];
cs->hw.hfcD.cip = 0;
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hisax.h linux-2.4.29/drivers/isdn/hisax/hisax.h
---- linux-2.4.29.old/drivers/isdn/hisax/hisax.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hisax.h 2005-03-22 15:06:46.431034192 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hisax.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/hisax.h 2007-12-15 05:19:40.006700891 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/hisax.h 2007-12-15 05:19:55.579588340 +0100
@@ -1,4 +1,4 @@
-/* $Id: hisax.h,v 1.1.4.2 2001/12/09 19:15:28 kai Exp $
+/* $Id: hisax.h,v 2.64 2001/09/24 13:22:56 kai Exp $
#define TEI_PER_CARD 1
/* L1 Debug */
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hisax_debug.h linux-2.4.29/drivers/isdn/hisax/hisax_debug.h
---- linux-2.4.29.old/drivers/isdn/hisax/hisax_debug.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hisax_debug.h 2005-03-22 15:06:46.452031000 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hisax_debug.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/hisax_debug.h 2007-12-15 05:19:40.014701347 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/hisax_debug.h 2007-12-15 05:19:55.579588340 +0100
@@ -28,7 +28,7 @@
#define DBG(level, format, arg...) do { \
} while (0)
#define DBG_PACKET(level,data,count) \
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hisax_fcpcipnp.c linux-2.4.29/drivers/isdn/hisax/hisax_fcpcipnp.c
---- linux-2.4.29.old/drivers/isdn/hisax/hisax_fcpcipnp.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hisax_fcpcipnp.c 2005-03-22 15:06:46.468028568 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hisax_fcpcipnp.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/hisax_fcpcipnp.c 2007-12-15 05:19:40.018701573 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/hisax_fcpcipnp.c 2007-12-15 05:19:55.579588340 +0100
@@ -20,22 +20,19 @@
*
* o POWER PC
+#ifdef __ISAPNP__
+#include "hisax_isapnp.c"
+#endif
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hisax_fcpcipnp.h linux-2.4.29/drivers/isdn/hisax/hisax_fcpcipnp.h
---- linux-2.4.29.old/drivers/isdn/hisax/hisax_fcpcipnp.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hisax_fcpcipnp.h 2005-03-22 15:06:46.484026136 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hisax_fcpcipnp.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/hisax_fcpcipnp.h 2007-12-15 05:19:40.026702031 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/hisax_fcpcipnp.h 2007-12-15 05:19:55.579588340 +0100
@@ -43,10 +43,12 @@
};
struct isac isac;
struct fritz_bcs bcs[2];
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hisax_isac.c linux-2.4.29/drivers/isdn/hisax/hisax_isac.c
---- linux-2.4.29.old/drivers/isdn/hisax/hisax_isac.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hisax_isac.c 2005-03-22 15:06:46.543017168 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hisax_isac.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/hisax_isac.c 2007-12-15 05:19:40.034702487 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/hisax_isac.c 2007-12-15 05:19:55.583588567 +0100
@@ -34,7 +34,7 @@
static int debug = 1;
MODULE_PARM(debug, "i");
module_init(hisax_isac_init);
module_exit(hisax_isac_exit);
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hisax_isac.h linux-2.4.29/drivers/isdn/hisax/hisax_isac.h
---- linux-2.4.29.old/drivers/isdn/hisax/hisax_isac.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hisax_isac.h 2005-03-22 15:06:46.559014736 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hisax_isac.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/hisax_isac.h 2007-12-15 05:19:40.042702942 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/hisax_isac.h 2007-12-15 05:19:55.583588567 +0100
@@ -8,7 +8,7 @@
#define TIMER3_VALUE 7000
#define MAX_DFRAME_LEN_L1 300
+void isacsx_interrupt(struct isac *isac);
#endif
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hisax_isapnp.c linux-2.4.29/drivers/isdn/hisax/hisax_isapnp.c
---- linux-2.4.29.old/drivers/isdn/hisax/hisax_isapnp.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hisax_isapnp.c 2005-03-22 15:06:46.576012152 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hisax_isapnp.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/isdn/hisax/hisax_isapnp.c 2007-12-15 05:19:55.583588567 +0100
@@ -0,0 +1,105 @@
+// FIXME copied
+static const struct isapnp_device_id *
+ }
+}
+
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hisax_isapnp.h linux-2.4.29/drivers/isdn/hisax/hisax_isapnp.h
---- linux-2.4.29.old/drivers/isdn/hisax/hisax_isapnp.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hisax_isapnp.h 2005-03-22 15:06:46.590010024 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hisax_isapnp.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/isdn/hisax/hisax_isapnp.h 2007-12-15 05:19:55.583588567 +0100
@@ -0,0 +1,33 @@
+#ifndef __HISAX_ISAPNP_H__
+#define __HISAX_ISAPNP_H__
+#endif
+
+#endif
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hisax_loadable.h linux-2.4.29/drivers/isdn/hisax/hisax_loadable.h
---- linux-2.4.29.old/drivers/isdn/hisax/hisax_loadable.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hisax_loadable.h 2005-03-22 15:06:46.606007592 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hisax_loadable.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/isdn/hisax/hisax_loadable.h 2007-12-15 05:19:55.583588567 +0100
@@ -0,0 +1,74 @@
+/* $Id: hisax_loadable.h,v 2.1 2001/06/08 22:19:16 werner Exp $
+ *
+/* definition of the register function */
+/***************************************/
+extern int hisax_register_hfcusb(struct hisax_drvreg *l1drv);
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hscx.c linux-2.4.29/drivers/isdn/hisax/hscx.c
---- linux-2.4.29.old/drivers/isdn/hisax/hscx.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hscx.c 2005-03-22 15:06:46.621005312 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hscx.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/hscx.c 2007-12-15 05:19:40.066704311 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/hscx.c 2007-12-15 05:19:55.583588567 +0100
@@ -1,4 +1,4 @@
-/* $Id: hscx.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id: hscx.c,v 1.24 2001/09/24 13:22:56 kai Exp $
*
* HSCX specific routines
*
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hscx.h linux-2.4.29/drivers/isdn/hisax/hscx.h
---- linux-2.4.29.old/drivers/isdn/hisax/hscx.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hscx.h 2005-03-22 15:06:46.640002424 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hscx.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/hscx.h 2007-12-15 05:19:40.070704537 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/hscx.h 2007-12-15 05:19:55.587588793 +0100
@@ -1,4 +1,4 @@
-/* $Id: hscx.h,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id: hscx.h,v 1.8 2001/09/24 13:22:56 kai Exp $
*
* HSCX specific defines
*
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hscx_irq.c linux-2.4.29/drivers/isdn/hisax/hscx_irq.c
---- linux-2.4.29.old/drivers/isdn/hisax/hscx_irq.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hscx_irq.c 2005-03-22 15:06:46.655999992 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hscx_irq.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/hscx_irq.c 2007-12-15 05:19:40.078704992 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/hscx_irq.c 2007-12-15 05:19:55.587588793 +0100
@@ -1,4 +1,4 @@
-/* $Id: hscx_irq.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id: hscx_irq.c,v 1.18 2001/09/24 13:22:56 kai Exp $
*
* low level b-channel stuff for Siemens HSCX
*
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/icc.c linux-2.4.29/drivers/isdn/hisax/icc.c
---- linux-2.4.29.old/drivers/isdn/hisax/icc.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/icc.c 2005-03-22 15:06:46.672997408 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/icc.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/icc.c 2007-12-15 05:19:40.086705450 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/icc.c 2007-12-15 05:19:55.587588793 +0100
@@ -1,4 +1,4 @@
-/* $Id: icc.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id: icc.c,v 1.8 2001/09/24 13:22:56 kai Exp $
*
* ICC specific routines
*
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/icc.h linux-2.4.29/drivers/isdn/hisax/icc.h
---- linux-2.4.29.old/drivers/isdn/hisax/icc.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/icc.h 2005-03-22 15:06:46.687995128 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/icc.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/icc.h 2007-12-15 05:19:40.094705906 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/icc.h 2007-12-15 05:19:55.587588793 +0100
@@ -1,4 +1,4 @@
-/* $Id: icc.h,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id: icc.h,v 1.4 2001/09/24 13:22:56 kai Exp $
*
* ICC specific routines
*
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/ipac.h linux-2.4.29/drivers/isdn/hisax/ipac.h
---- linux-2.4.29.old/drivers/isdn/hisax/ipac.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/ipac.h 2005-03-22 15:06:46.702992848 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/ipac.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/ipac.h 2007-12-15 05:19:40.098706132 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/ipac.h 2007-12-15 05:19:55.587588793 +0100
@@ -1,4 +1,4 @@
-/* $Id: ipac.h,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id: ipac.h,v 1.7 2001/09/24 13:22:56 kai Exp $
*
* IPAC specific defines
*
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/isac.c linux-2.4.29/drivers/isdn/hisax/isac.c
---- linux-2.4.29.old/drivers/isdn/hisax/isac.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/isac.c 2005-03-22 15:06:46.844971264 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/isac.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/isac.c 2007-12-15 05:19:40.106706590 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/isac.c 2007-12-15 05:19:55.591589021 +0100
@@ -1,4 +1,4 @@
-/* $Id: isac.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id: isac.c,v 1.31 2001/09/24 13:22:56 kai Exp $
*
* ISAC specific routines
*
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/isac.h linux-2.4.29/drivers/isdn/hisax/isac.h
---- linux-2.4.29.old/drivers/isdn/hisax/isac.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/isac.h 2005-03-22 15:06:47.111930680 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/isac.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/isac.h 2007-12-15 05:19:40.118707272 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/isac.h 2007-12-15 05:19:55.591589021 +0100
@@ -1,4 +1,4 @@
-/* $Id: isac.h,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id: isac.h,v 1.9 2001/09/24 13:22:56 kai Exp $
*
* ISAC specific defines
*
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/isar.c linux-2.4.29/drivers/isdn/hisax/isar.c
---- linux-2.4.29.old/drivers/isdn/hisax/isar.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/isar.c 2005-03-22 15:06:47.302901648 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/isar.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/isar.c 2007-12-15 05:19:40.130707956 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/isar.c 2007-12-15 05:19:55.595589250 +0100
@@ -1,4 +1,4 @@
-/* $Id: isar.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id: isar.c,v 1.22 2001/09/23 12:00:05 keil Exp $
default:
printk(KERN_DEBUG "HiSax: invalid ioctl %d\n",
(int) ic->arg);
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/isar.h linux-2.4.29/drivers/isdn/hisax/isar.h
---- linux-2.4.29.old/drivers/isdn/hisax/isar.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/isar.h 2005-03-22 15:06:47.457878088 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/isar.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/isar.h 2007-12-15 05:19:40.138708412 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/isar.h 2007-12-15 05:19:55.615590390 +0100
@@ -1,4 +1,4 @@
-/* $Id: isar.h,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id: isar.h,v 1.11 2001/09/24 13:22:56 kai Exp $
extern int ISARVersion(struct IsdnCardState *cs, char *s);
extern void isar_int_main(struct IsdnCardState *cs);
extern void initisar(struct IsdnCardState *cs);
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/isdnl1.c linux-2.4.29/drivers/isdn/hisax/isdnl1.c
---- linux-2.4.29.old/drivers/isdn/hisax/isdnl1.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/isdnl1.c 2005-03-22 15:06:47.582859088 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/isdnl1.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/isdnl1.c 2007-12-15 05:19:40.150709096 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/isdnl1.c 2007-12-15 05:19:55.615590390 +0100
@@ -1,4 +1,4 @@
-/* $Id: isdnl1.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id: isdnl1.c,v 2.46 2001/09/24 13:22:56 kai Exp $
#define __NO_VERSION__
#include <linux/init.h>
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/isdnl1.h linux-2.4.29/drivers/isdn/hisax/isdnl1.h
---- linux-2.4.29.old/drivers/isdn/hisax/isdnl1.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/isdnl1.h 2005-03-22 15:06:47.615854072 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/isdnl1.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/isdnl1.h 2007-12-15 05:19:40.154709325 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/isdnl1.h 2007-12-15 05:19:55.619590620 +0100
@@ -1,4 +1,4 @@
-/* $Id: isdnl1.h,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id: isdnl1.h,v 2.12 2001/09/24 13:22:56 kai Exp $
*
* Layer 1 defines
*
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/isdnl2.c linux-2.4.29/drivers/isdn/hisax/isdnl2.c
---- linux-2.4.29.old/drivers/isdn/hisax/isdnl2.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/isdnl2.c 2005-03-22 15:06:47.631851640 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/isdnl2.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/isdnl2.c 2007-12-15 05:19:40.162709781 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/isdnl2.c 2007-12-15 05:19:55.619590620 +0100
@@ -1,4 +1,4 @@
-/* $Id: isdnl2.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id: isdnl2.c,v 2.30 2001/09/24 13:22:56 kai Exp $
}
static void
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/isdnl2.h linux-2.4.29/drivers/isdn/hisax/isdnl2.h
---- linux-2.4.29.old/drivers/isdn/hisax/isdnl2.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/isdnl2.h 2005-03-22 15:06:47.647849208 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/isdnl2.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/isdnl2.h 2007-12-15 05:19:40.170710236 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/isdnl2.h 2007-12-15 05:19:55.619590620 +0100
@@ -1,4 +1,4 @@
-/* $Id: isdnl2.h,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id$
*
* Layer 2 defines
*
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/isdnl3.c linux-2.4.29/drivers/isdn/hisax/isdnl3.c
---- linux-2.4.29.old/drivers/isdn/hisax/isdnl3.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/isdnl3.c 2005-03-22 15:06:47.663846776 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/isdnl3.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/isdnl3.c 2007-12-15 05:19:40.178710691 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/isdnl3.c 2007-12-15 05:19:55.619590620 +0100
@@ -1,4 +1,4 @@
-/* $Id: isdnl3.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id: isdnl3.c,v 2.22 2001/09/24 13:22:56 kai Exp $
static struct Fsm l3fsm;
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/isdnl3.h linux-2.4.29/drivers/isdn/hisax/isdnl3.h
---- linux-2.4.29.old/drivers/isdn/hisax/isdnl3.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/isdnl3.h 2005-03-22 15:06:47.679844344 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/isdnl3.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/isdnl3.h 2007-12-15 05:19:40.182710920 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/isdnl3.h 2007-12-15 05:19:55.623590846 +0100
@@ -1,4 +1,4 @@
-/* $Id: isdnl3.h,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id$
*
* This software may be used and distributed according to the terms
* of the GNU General Public License, incorporated herein by reference.
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/isurf.c linux-2.4.29/drivers/isdn/hisax/isurf.c
---- linux-2.4.29.old/drivers/isdn/hisax/isurf.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/isurf.c 2005-03-22 15:06:47.699841304 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/isurf.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/isurf.c 2007-12-15 05:19:40.190711376 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/isurf.c 2007-12-15 05:19:55.623590846 +0100
@@ -1,4 +1,4 @@
-/* $Id: isurf.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id: isurf.c,v 1.12 2001/09/24 13:22:56 kai Exp $
printk(KERN_INFO
"ISurf: defined at 0x%x 0x%lx IRQ %d\n",
cs->hw.isurf.reset,
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/ix1_micro.c linux-2.4.29/drivers/isdn/hisax/ix1_micro.c
---- linux-2.4.29.old/drivers/isdn/hisax/ix1_micro.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/ix1_micro.c 2005-03-22 15:06:47.714839024 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/ix1_micro.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/ix1_micro.c 2007-12-15 05:19:40.198711831 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/ix1_micro.c 2007-12-15 05:19:55.623590846 +0100
@@ -1,4 +1,4 @@
-/* $Id: ix1_micro.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id: ix1_micro.c,v 2.12 2001/09/24 13:22:56 kai Exp $
/* IO-Ports */
cs->hw.ix1.isac_ale = card->para[1] + ISAC_COMMAND_OFFSET;
cs->hw.ix1.hscx_ale = card->para[1] + HSCX_COMMAND_OFFSET;
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/jade.c linux-2.4.29/drivers/isdn/hisax/jade.c
---- linux-2.4.29.old/drivers/isdn/hisax/jade.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/jade.c 2005-03-22 15:06:47.729836744 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/jade.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/jade.c 2007-12-15 05:19:40.206712289 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/jade.c 2007-12-15 05:19:55.623590846 +0100
@@ -1,4 +1,4 @@
-/* $Id: jade.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id: jade.c,v 1.9 2001/09/24 13:22:56 kai Exp $
*
* JADE stuff (derived from original hscx.c)
*
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/jade.h linux-2.4.29/drivers/isdn/hisax/jade.h
---- linux-2.4.29.old/drivers/isdn/hisax/jade.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/jade.h 2005-03-22 15:06:47.745834312 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/jade.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/jade.h 2007-12-15 05:19:40.214712745 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/jade.h 2007-12-15 05:19:55.623590846 +0100
@@ -1,4 +1,4 @@
-/* $Id: jade.h,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id: jade.h,v 1.5 2001/09/24 13:22:56 kai Exp $
*
* JADE specific defines
*
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/jade_irq.c linux-2.4.29/drivers/isdn/hisax/jade_irq.c
---- linux-2.4.29.old/drivers/isdn/hisax/jade_irq.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/jade_irq.c 2005-03-22 15:06:47.760832032 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/jade_irq.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/jade_irq.c 2007-12-15 05:19:40.218712971 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/jade_irq.c 2007-12-15 05:19:55.627591072 +0100
@@ -1,4 +1,4 @@
-/* $Id: jade_irq.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id: jade_irq.c,v 1.7 2001/09/24 13:22:56 kai Exp $
*
* Low level JADE IRQ stuff (derived from original hscx_irq.c)
*
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/l3_1tr6.c linux-2.4.29/drivers/isdn/hisax/l3_1tr6.c
---- linux-2.4.29.old/drivers/isdn/hisax/l3_1tr6.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/l3_1tr6.c 2005-03-22 15:06:47.777829448 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/l3_1tr6.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/l3_1tr6.c 2007-12-15 05:19:40.226713429 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/l3_1tr6.c 2007-12-15 05:19:55.627591072 +0100
@@ -1,4 +1,4 @@
-/* $Id: l3_1tr6.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id: l3_1tr6.c,v 2.15 2001/09/24 13:22:56 kai Exp $
#define MsgHead(ptr, cref, mty, dis) \
*ptr++ = dis; \
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/l3_1tr6.h linux-2.4.29/drivers/isdn/hisax/l3_1tr6.h
---- linux-2.4.29.old/drivers/isdn/hisax/l3_1tr6.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/l3_1tr6.h 2005-03-22 15:06:47.796826560 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/l3_1tr6.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/l3_1tr6.h 2007-12-15 05:19:40.234713885 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/l3_1tr6.h 2007-12-15 05:19:55.627591072 +0100
@@ -1,4 +1,4 @@
-/* $Id: l3_1tr6.h,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id$
*
* German 1TR6 D-channel protocol defines
*
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/l3dss1.c linux-2.4.29/drivers/isdn/hisax/l3dss1.c
---- linux-2.4.29.old/drivers/isdn/hisax/l3dss1.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/l3dss1.c 2005-03-22 15:06:47.822822608 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/l3dss1.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/l3dss1.c 2007-12-15 05:19:40.242714340 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/l3dss1.c 2007-12-15 05:19:55.635591530 +0100
@@ -1,4 +1,4 @@
-/* $Id: l3dss1.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id: l3dss1.c,v 2.32 2001/09/24 13:22:56 kai Exp $
#define EXT_BEARER_CAPS 1
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/l3dss1.h linux-2.4.29/drivers/isdn/hisax/l3dss1.h
---- linux-2.4.29.old/drivers/isdn/hisax/l3dss1.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/l3dss1.h 2005-03-22 15:06:47.842819568 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/l3dss1.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/l3dss1.h 2007-12-15 05:19:40.250714795 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/l3dss1.h 2007-12-15 05:19:55.635591530 +0100
@@ -1,4 +1,4 @@
-/* $Id: l3dss1.h,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id$
*
* DSS1 (Euro) D-channel protocol defines
*
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/l3ni1.c linux-2.4.29/drivers/isdn/hisax/l3ni1.c
---- linux-2.4.29.old/drivers/isdn/hisax/l3ni1.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/l3ni1.c 2005-03-22 15:06:47.859816984 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/l3ni1.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/l3ni1.c 2007-12-15 05:19:40.254715024 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/l3ni1.c 2007-12-15 05:19:55.635591530 +0100
@@ -1,4 +1,4 @@
-/* $Id: l3ni1.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id: l3ni1.c,v 2.8 2001/09/24 13:22:56 kai Exp $
#define EXT_BEARER_CAPS 1
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/l3ni1.h linux-2.4.29/drivers/isdn/hisax/l3ni1.h
---- linux-2.4.29.old/drivers/isdn/hisax/l3ni1.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/l3ni1.h 2005-03-22 15:06:47.877814248 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/l3ni1.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/l3ni1.h 2007-12-15 05:19:40.262715480 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/l3ni1.h 2007-12-15 05:19:55.635591530 +0100
@@ -1,4 +1,4 @@
-/* $Id: l3ni1.h,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id$
*
* NI1 D-channel protocol
*
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/lmgr.c linux-2.4.29/drivers/isdn/hisax/lmgr.c
---- linux-2.4.29.old/drivers/isdn/hisax/lmgr.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/lmgr.c 2005-03-22 15:06:47.895811512 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/lmgr.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/lmgr.c 2007-12-15 05:19:40.270715935 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/lmgr.c 2007-12-15 05:19:55.639591759 +0100
@@ -1,4 +1,4 @@
-/* $Id: lmgr.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id$
*
* Layermanagement module
*
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/md5sums.asc linux-2.4.29/drivers/isdn/hisax/md5sums.asc
---- linux-2.4.29.old/drivers/isdn/hisax/md5sums.asc 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/md5sums.asc 2005-03-22 15:06:47.910809232 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/md5sums.asc
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/md5sums.asc 2007-12-15 05:19:40.278716390 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/md5sums.asc 2007-12-15 05:19:55.639591759 +0100
@@ -1,33 +1,22 @@
------BEGIN PGP SIGNED MESSAGE-----
-Hash: SHA1
-GIKgAEdRLzERmpt/bCCwAbY=
-=FaHw
------END PGP SIGNATURE-----
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/mic.c linux-2.4.29/drivers/isdn/hisax/mic.c
---- linux-2.4.29.old/drivers/isdn/hisax/mic.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/mic.c 2005-03-22 15:06:47.926806800 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/mic.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/mic.c 2007-12-15 05:19:40.282716619 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/mic.c 2007-12-15 05:19:55.639591759 +0100
@@ -1,4 +1,4 @@
-/* $Id: mic.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id: mic.c,v 1.12 2001/09/24 13:22:56 kai Exp $
#define byteout(addr,val) outb(val,addr)
#define bytein(addr) inb(addr)
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/netjet.c linux-2.4.29/drivers/isdn/hisax/netjet.c
---- linux-2.4.29.old/drivers/isdn/hisax/netjet.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/netjet.c 2005-03-22 15:06:47.941804520 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/netjet.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/netjet.c 2007-12-15 05:19:40.290717075 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/netjet.c 2007-12-15 05:19:55.639591759 +0100
@@ -1,4 +1,4 @@
-/* $Id: netjet.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id: netjet.c,v 1.29 2001/09/24 13:22:56 kai Exp $
l1_msg_b(st, pr, arg);
break;
case (PH_DEACTIVATE | CONFIRM):
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/netjet.h linux-2.4.29/drivers/isdn/hisax/netjet.h
---- linux-2.4.29.old/drivers/isdn/hisax/netjet.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/netjet.h 2005-03-22 15:06:47.956802240 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/netjet.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/netjet.h 2007-12-15 05:19:40.298717530 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/netjet.h 2007-12-15 05:19:55.639591759 +0100
@@ -1,4 +1,4 @@
-/* $Id: netjet.h,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id: netjet.h,v 2.8 2001/09/24 13:22:56 kai Exp $
*
* NETjet common header file
*
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/niccy.c linux-2.4.29/drivers/isdn/hisax/niccy.c
---- linux-2.4.29.old/drivers/isdn/hisax/niccy.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/niccy.c 2005-03-22 15:06:47.977799048 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/niccy.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/niccy.c 2007-12-15 05:19:40.306717988 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/niccy.c 2007-12-15 05:19:55.643591986 +0100
@@ -1,4 +1,4 @@
-/* $Id: niccy.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id: niccy.c,v 1.21 2001/10/20 22:05:00 kai Exp $
if (!pci_ioaddr) {
printk(KERN_WARNING "Niccy: No IO-Adr for PCI card found\n");
return(0);
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/nj_s.c linux-2.4.29/drivers/isdn/hisax/nj_s.c
---- linux-2.4.29.old/drivers/isdn/hisax/nj_s.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/nj_s.c 2005-03-22 15:06:47.993796616 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/nj_s.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/nj_s.c 2007-12-15 05:19:40.314718444 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/nj_s.c 2007-12-15 05:19:55.643591986 +0100
@@ -1,4 +1,4 @@
-/* $Id: nj_s.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id: nj_s.c,v 2.13 2001/09/24 13:22:56 kai Exp $
cs->readisac = &NETjet_ReadIC;
cs->writeisac = &NETjet_WriteIC;
cs->readisacfifo = &NETjet_ReadICfifo;
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/nj_u.c linux-2.4.29/drivers/isdn/hisax/nj_u.c
---- linux-2.4.29.old/drivers/isdn/hisax/nj_u.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/nj_u.c 2005-03-22 15:06:48.008794336 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/nj_u.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/nj_u.c 2007-12-15 05:19:40.318718670 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/nj_u.c 2007-12-15 05:19:55.643591986 +0100
@@ -1,4 +1,4 @@
-/* $Id: nj_u.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id: nj_u.c,v 2.14 2001/09/24 13:22:56 kai Exp $
if (!cs->hw.njet.base) {
printk(KERN_WARNING "NETspider-U: No IO-Adr for PCI card found\n");
return(0);
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/q931.c linux-2.4.29/drivers/isdn/hisax/q931.c
---- linux-2.4.29.old/drivers/isdn/hisax/q931.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/q931.c 2005-03-22 15:06:48.032790688 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/q931.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/q931.c 2007-12-15 05:19:40.326719128 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/q931.c 2007-12-15 05:19:55.647592212 +0100
@@ -1,4 +1,4 @@
-/* $Id: q931.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id: q931.c,v 1.12 2001/09/24 13:22:56 kai Exp $
static int
prbits(char *dest, u_char b, int start, int len)
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/rawhdlc.c linux-2.4.29/drivers/isdn/hisax/rawhdlc.c
---- linux-2.4.29.old/drivers/isdn/hisax/rawhdlc.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/rawhdlc.c 2005-03-22 15:06:48.047788408 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/rawhdlc.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/isdn/hisax/rawhdlc.c 2007-12-15 05:19:55.647592212 +0100
@@ -0,0 +1,543 @@
+/* $Id: rawhdlc.c,v 1.7 2001/09/24 13:22:57 kai Exp $
+ *
+}
+
+#endif
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/rawhdlc.h linux-2.4.29/drivers/isdn/hisax/rawhdlc.h
---- linux-2.4.29.old/drivers/isdn/hisax/rawhdlc.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/rawhdlc.h 2005-03-22 15:06:48.076784000 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/rawhdlc.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/isdn/hisax/rawhdlc.h 2007-12-15 05:19:55.647592212 +0100
@@ -0,0 +1,28 @@
+/* $Id: rawhdlc.h,v 1.5 2001/09/24 13:22:57 kai Exp $
+ *
+ u_char *src, u_int slen, u_char *dst, u_int dsize);
+#define RAWHDLC_H
+#endif
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/s0box.c linux-2.4.29/drivers/isdn/hisax/s0box.c
---- linux-2.4.29.old/drivers/isdn/hisax/s0box.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/s0box.c 2005-03-22 15:06:48.092781568 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/s0box.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/s0box.c 2007-12-15 05:19:40.346720268 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/s0box.c 2007-12-15 05:19:55.647592212 +0100
@@ -1,4 +1,4 @@
-/* $Id: s0box.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id: s0box.c,v 2.6 2001/09/24 13:22:57 kai Exp $
static inline void
writereg(unsigned int padr, signed int addr, u_char off, u_char val) {
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/saphir.c linux-2.4.29/drivers/isdn/hisax/saphir.c
---- linux-2.4.29.old/drivers/isdn/hisax/saphir.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/saphir.c 2005-03-22 15:06:48.107779288 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/saphir.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/saphir.c 2007-12-15 05:19:40.350720494 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/saphir.c 2007-12-15 05:19:55.647592212 +0100
@@ -1,4 +1,4 @@
-/* $Id: saphir.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id: saphir.c,v 1.10 2001/09/24 13:22:57 kai Exp $
#define byteout(addr,val) outb(val,addr)
#define bytein(addr) inb(addr)
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/sedlbauer.c linux-2.4.29/drivers/isdn/hisax/sedlbauer.c
---- linux-2.4.29.old/drivers/isdn/hisax/sedlbauer.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/sedlbauer.c 2005-03-22 15:06:48.123776856 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/sedlbauer.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/sedlbauer.c 2007-12-15 05:19:40.358720950 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/sedlbauer.c 2007-12-15 05:19:55.651592441 +0100
@@ -1,4 +1,4 @@
-/* $Id: sedlbauer.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id: sedlbauer.c,v 1.34 2002/02/09 21:00:57 keil Exp $
/* In case of the sedlbauer pcmcia card, this region is in use,
* reserved for us by the card manager. So we do not check it
* here, it would fail.
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/sportster.c linux-2.4.29/drivers/isdn/hisax/sportster.c
---- linux-2.4.29.old/drivers/isdn/hisax/sportster.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/sportster.c 2005-03-22 15:06:48.169769864 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/sportster.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/sportster.c 2007-12-15 05:19:40.366721408 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/sportster.c 2007-12-15 05:19:55.651592441 +0100
@@ -1,4 +1,4 @@
-/* $Id: sportster.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id: sportster.c,v 1.16 2001/09/24 13:22:57 kai Exp $
#define byteout(addr,val) outb(val,addr)
#define bytein(addr) inb(addr)
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/st5481-debug.h linux-2.4.29/drivers/isdn/hisax/st5481-debug.h
---- linux-2.4.29.old/drivers/isdn/hisax/st5481-debug.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/st5481-debug.h 2005-03-22 15:06:48.184767584 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/st5481-debug.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/isdn/hisax/st5481-debug.h 2007-12-15 05:19:55.651592441 +0100
@@ -0,0 +1,103 @@
+#define ST5481_DEBUG 0x0
+
+
+
+
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/st5481.h linux-2.4.29/drivers/isdn/hisax/st5481.h
---- linux-2.4.29.old/drivers/isdn/hisax/st5481.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/st5481.h 2005-03-22 15:06:48.201765000 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/st5481.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/st5481.h 2007-12-15 05:19:40.378722089 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/st5481.h 2007-12-15 05:19:55.651592441 +0100
@@ -219,15 +219,15 @@
#define L1_EVENT_COUNT (EV_TIMER3 + 1)
{
int i,j;
int len,ofs;
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/st5481_b.c linux-2.4.29/drivers/isdn/hisax/st5481_b.c
---- linux-2.4.29.old/drivers/isdn/hisax/st5481_b.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/st5481_b.c 2005-03-22 15:06:48.216762720 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/st5481_b.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/st5481_b.c 2007-12-15 05:19:40.386722547 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/st5481_b.c 2007-12-15 05:19:55.651592441 +0100
@@ -67,28 +67,24 @@
bytes_sent = buf_size - len;
if (skb->len < bytes_sent)
{
DBG(4,"");
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/st5481_d.c linux-2.4.29/drivers/isdn/hisax/st5481_d.c
---- linux-2.4.29.old/drivers/isdn/hisax/st5481_d.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/st5481_d.c 2005-03-22 15:06:48.231760440 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/st5481_d.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/st5481_d.c 2007-12-15 05:19:40.394723003 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/st5481_d.c 2007-12-15 05:19:55.655592670 +0100
@@ -162,8 +162,8 @@
{ST_L1_F8, EV_TIMER3, l1_timer3},
{ST_L1_F8, EV_IND_DP, l1_go_f3},
{
DBG(2,"");
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/st5481_init.c linux-2.4.29/drivers/isdn/hisax/st5481_init.c
---- linux-2.4.29.old/drivers/isdn/hisax/st5481_init.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/st5481_init.c 2005-03-22 15:06:48.268754816 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/st5481_init.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/st5481_init.c 2007-12-15 05:19:40.398723229 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/st5481_init.c 2007-12-15 05:19:55.655592670 +0100
@@ -14,6 +14,7 @@
* TODO:
*
id_table: st5481_ids,
};
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/st5481_usb.c linux-2.4.29/drivers/isdn/hisax/st5481_usb.c
---- linux-2.4.29.old/drivers/isdn/hisax/st5481_usb.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/st5481_usb.c 2005-03-22 15:06:48.284752384 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/st5481_usb.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/st5481_usb.c 2007-12-15 05:19:40.406723687 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/st5481_usb.c 2007-12-15 05:19:55.655592670 +0100
@@ -41,9 +41,9 @@
(unsigned char *)&ctrl->msg_fifo.data[r_index];
st5481_usb_device_ctrl_msg(in->adapter, in->counter,
in->packet_size,
NULL, NULL);
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/tei.c linux-2.4.29/drivers/isdn/hisax/tei.c
---- linux-2.4.29.old/drivers/isdn/hisax/tei.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/tei.c 2005-03-22 15:06:48.316747520 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/tei.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/tei.c 2007-12-15 05:19:40.414724143 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/tei.c 2007-12-15 05:19:55.655592670 +0100
@@ -1,4 +1,4 @@
-/* $Id: tei.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id: tei.c,v 2.20 2001/09/24 13:22:57 kai Exp $
#define ID_REQUEST 1
#define ID_ASSIGNED 2
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/teleint.c linux-2.4.29/drivers/isdn/hisax/teleint.c
---- linux-2.4.29.old/drivers/isdn/hisax/teleint.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/teleint.c 2005-03-22 15:06:48.330745392 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/teleint.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/teleint.c 2007-12-15 05:19:40.422724598 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/teleint.c 2007-12-15 05:19:55.659592899 +0100
@@ -1,4 +1,4 @@
-/* $Id: teleint.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id: teleint.c,v 1.16 2001/09/24 13:22:57 kai Exp $
#define byteout(addr,val) outb(val,addr)
#define bytein(addr) inb(addr)
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/teles0.c linux-2.4.29/drivers/isdn/hisax/teles0.c
---- linux-2.4.29.old/drivers/isdn/hisax/teles0.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/teles0.c 2005-03-22 15:06:48.348742656 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/teles0.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/teles0.c 2007-12-15 05:19:40.430725053 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/teles0.c 2007-12-15 05:19:55.659592899 +0100
@@ -1,4 +1,4 @@
-/* $Id: teles0.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id: teles0.c,v 2.15 2001/09/24 13:22:57 kai Exp $
printk(KERN_INFO
"HiSax: %s config irq:%d mem:0x%lX cfg:0x%X\n",
CardType[cs->typ], cs->irq,
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/teles3.c linux-2.4.29/drivers/isdn/hisax/teles3.c
---- linux-2.4.29.old/drivers/isdn/hisax/teles3.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/teles3.c 2005-03-22 15:06:48.367739768 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/teles3.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/teles3.c 2007-12-15 05:19:40.434725282 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/teles3.c 2007-12-15 05:19:55.659592899 +0100
@@ -1,4 +1,4 @@
-/* $Id: teles3.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id: teles3.c,v 2.19 2001/09/24 13:22:57 kai Exp $
if (cs->typ == ISDN_CTYPE_16_3) {
cs->hw.teles3.cfg_reg = card->para[1];
switch (cs->hw.teles3.cfg_reg) {
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/telespci.c linux-2.4.29/drivers/isdn/hisax/telespci.c
---- linux-2.4.29.old/drivers/isdn/hisax/telespci.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/telespci.c 2005-03-22 15:06:48.382737488 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/telespci.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/telespci.c 2007-12-15 05:19:40.442725738 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/telespci.c 2007-12-15 05:19:55.659592899 +0100
@@ -1,4 +1,4 @@
-/* $Id: telespci.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id: telespci.c,v 2.23 2001/09/24 13:22:57 kai Exp $
} else {
printk(KERN_WARNING "TelesPCI: No PCI card found\n");
return(0);
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/w6692.c linux-2.4.29/drivers/isdn/hisax/w6692.c
---- linux-2.4.29.old/drivers/isdn/hisax/w6692.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/w6692.c 2005-03-22 15:06:48.398735056 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/w6692.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/w6692.c 2007-12-15 05:19:40.450726193 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/w6692.c 2007-12-15 05:19:55.659592899 +0100
@@ -1,4 +1,4 @@
-/* $Id: w6692.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id: w6692.c,v 1.18 2001/09/24 13:22:57 kai Exp $
cs->hw.w6692.iobase);
cs->readW6692 = &ReadW6692;
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/w6692.h linux-2.4.29/drivers/isdn/hisax/w6692.h
---- linux-2.4.29.old/drivers/isdn/hisax/w6692.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/w6692.h 2005-03-22 15:06:48.414732624 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/w6692.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/w6692.h 2007-12-15 05:19:40.458726649 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/w6692.h 2007-12-15 05:19:55.663593126 +0100
@@ -1,4 +1,4 @@
-/* $Id: w6692.h,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
+/* $Id: w6692.h,v 1.4 2001/09/24 13:22:57 kai Exp $
*
* Winbond W6692 specific defines
*
-diff -rNu linux-2.4.29.old/drivers/isdn/hysdn/boardergo.c linux-2.4.29/drivers/isdn/hysdn/boardergo.c
---- linux-2.4.29.old/drivers/isdn/hysdn/boardergo.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hysdn/boardergo.c 2005-03-22 15:06:48.468724416 +0100
+Index: linux-2.4.35.4/drivers/isdn/hysdn/boardergo.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hysdn/boardergo.c 2007-12-15 05:19:40.466727107 +0100
++++ linux-2.4.35.4/drivers/isdn/hysdn/boardergo.c 2007-12-15 05:19:55.667593352 +0100
@@ -1,27 +1,41 @@
-/* $Id: boardergo.c,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
- *
set_current_state(TASK_INTERRUPTIBLE);
schedule_timeout((50 * HZ) / 1000); /* Timeout 50ms */
} /* wait until timeout */
-diff -rNu linux-2.4.29.old/drivers/isdn/hysdn/boardergo.h linux-2.4.29/drivers/isdn/hysdn/boardergo.h
---- linux-2.4.29.old/drivers/isdn/hysdn/boardergo.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hysdn/boardergo.h 2005-03-22 15:06:48.485721832 +0100
+Index: linux-2.4.35.4/drivers/isdn/hysdn/boardergo.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hysdn/boardergo.h 2007-12-15 05:19:40.470727333 +0100
++++ linux-2.4.35.4/drivers/isdn/hysdn/boardergo.h 2007-12-15 05:19:55.667593352 +0100
@@ -1,4 +1,4 @@
-/* $Id: boardergo.h,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
+/* $Id$
/************************************************/
/* defines for the dual port memory of the card */
-diff -rNu linux-2.4.29.old/drivers/isdn/hysdn/hycapi.c linux-2.4.29/drivers/isdn/hysdn/hycapi.c
---- linux-2.4.29.old/drivers/isdn/hysdn/hycapi.c 2005-03-22 14:47:57.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hysdn/hycapi.c 2005-03-22 15:06:48.500719552 +0100
+Index: linux-2.4.35.4/drivers/isdn/hysdn/hycapi.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hysdn/hycapi.c 2007-12-15 05:19:40.478727788 +0100
++++ linux-2.4.35.4/drivers/isdn/hysdn/hycapi.c 2007-12-15 05:19:55.671593581 +0100
@@ -1,4 +1,4 @@
-/* $Id: hycapi.c,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
+/* $Id$
unsigned int hycapi_enable = 0xffffffff;
MODULE_PARM(hycapi_enable, "i");
-diff -rNu linux-2.4.29.old/drivers/isdn/hysdn/hysdn_boot.c linux-2.4.29/drivers/isdn/hysdn/hysdn_boot.c
---- linux-2.4.29.old/drivers/isdn/hysdn/hysdn_boot.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hysdn/hysdn_boot.c 2005-03-22 15:06:48.516717120 +0100
+Index: linux-2.4.35.4/drivers/isdn/hysdn/hysdn_boot.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hysdn/hysdn_boot.c 2007-12-15 05:19:40.486728246 +0100
++++ linux-2.4.35.4/drivers/isdn/hysdn/hysdn_boot.c 2007-12-15 05:19:55.671593581 +0100
@@ -1,4 +1,4 @@
-/* $Id: hysdn_boot.c,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
+/* $Id$
return (boot->last_error); /* error writing data */
if (boot->pof_recoffset + datlen >= boot->pof_reclen)
-diff -rNu linux-2.4.29.old/drivers/isdn/hysdn/hysdn_defs.h linux-2.4.29/drivers/isdn/hysdn/hysdn_defs.h
---- linux-2.4.29.old/drivers/isdn/hysdn/hysdn_defs.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hysdn/hysdn_defs.h 2005-03-22 15:06:48.533714536 +0100
+Index: linux-2.4.35.4/drivers/isdn/hysdn/hysdn_defs.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hysdn/hysdn_defs.h 2007-12-15 05:19:40.494728702 +0100
++++ linux-2.4.35.4/drivers/isdn/hysdn/hysdn_defs.h 2007-12-15 05:19:55.671593581 +0100
@@ -1,4 +1,4 @@
-/* $Id: hysdn_defs.h,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
+/* $Id: hysdn_defs.h,v 1.10 2001/09/24 13:23:03 kai Exp $
/* boot process */
void *boot; /* pointer to boot private data */
-diff -rNu linux-2.4.29.old/drivers/isdn/hysdn/hysdn_init.c linux-2.4.29/drivers/isdn/hysdn/hysdn_init.c
---- linux-2.4.29.old/drivers/isdn/hysdn/hysdn_init.c 2005-03-22 14:47:57.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hysdn/hysdn_init.c 2005-03-22 15:06:48.551711800 +0100
+Index: linux-2.4.35.4/drivers/isdn/hysdn/hysdn_init.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hysdn/hysdn_init.c 2007-12-15 05:19:40.502729157 +0100
++++ linux-2.4.35.4/drivers/isdn/hysdn/hysdn_init.c 2007-12-15 05:19:55.671593581 +0100
@@ -1,4 +1,4 @@
-/* $Id: hysdn_init.c,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
+/* $Id$
card->brdtype = BD_NONE; /* unknown */
card->debug_flags = DEF_DEB_FLAGS; /* set default debug */
card->faxchans = 0; /* default no fax channels */
-diff -rNu linux-2.4.29.old/drivers/isdn/hysdn/hysdn_net.c linux-2.4.29/drivers/isdn/hysdn/hysdn_net.c
---- linux-2.4.29.old/drivers/isdn/hysdn/hysdn_net.c 2005-03-22 14:47:57.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hysdn/hysdn_net.c 2005-03-22 15:06:48.567709368 +0100
+Index: linux-2.4.35.4/drivers/isdn/hysdn/hysdn_net.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hysdn/hysdn_net.c 2007-12-15 05:19:40.506729386 +0100
++++ linux-2.4.35.4/drivers/isdn/hysdn/hysdn_net.c 2007-12-15 05:19:55.675593810 +0100
@@ -1,4 +1,4 @@
-/* $Id: hysdn_net.c,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
+/* $Id$
unregister_netdev(dev); /* release the device */
kfree(dev); /* release the memory allocated */
-diff -rNu linux-2.4.29.old/drivers/isdn/hysdn/hysdn_pof.h linux-2.4.29/drivers/isdn/hysdn/hysdn_pof.h
---- linux-2.4.29.old/drivers/isdn/hysdn/hysdn_pof.h 2005-03-22 14:47:57.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hysdn/hysdn_pof.h 2005-03-22 15:06:48.583706936 +0100
+Index: linux-2.4.35.4/drivers/isdn/hysdn/hysdn_pof.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hysdn/hysdn_pof.h 2007-12-15 05:19:40.514729842 +0100
++++ linux-2.4.35.4/drivers/isdn/hysdn/hysdn_pof.h 2007-12-15 05:19:55.675593810 +0100
@@ -1,4 +1,4 @@
-/* $Id: hysdn_pof.h,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
+/* $Id$
*
* Linux driver for HYSDN cards, definitions used for handling pof-files.
*
-diff -rNu linux-2.4.29.old/drivers/isdn/hysdn/hysdn_procconf.c linux-2.4.29/drivers/isdn/hysdn/hysdn_procconf.c
---- linux-2.4.29.old/drivers/isdn/hysdn/hysdn_procconf.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hysdn/hysdn_procconf.c 2005-03-22 15:06:48.598704656 +0100
+Index: linux-2.4.35.4/drivers/isdn/hysdn/hysdn_procconf.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hysdn/hysdn_procconf.c 2007-12-15 05:19:40.522730297 +0100
++++ linux-2.4.35.4/drivers/isdn/hysdn/hysdn_procconf.c 2007-12-15 05:19:55.675593810 +0100
@@ -1,4 +1,4 @@
-/* $Id: hysdn_procconf.c,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
+/* $Id$
hysdn_proclog_init(card); /* init the log file entry */
}
card = card->next; /* next entry */
-diff -rNu linux-2.4.29.old/drivers/isdn/hysdn/hysdn_proclog.c linux-2.4.29/drivers/isdn/hysdn/hysdn_proclog.c
---- linux-2.4.29.old/drivers/isdn/hysdn/hysdn_proclog.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hysdn/hysdn_proclog.c 2005-03-22 15:06:48.613702376 +0100
+Index: linux-2.4.35.4/drivers/isdn/hysdn/hysdn_proclog.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hysdn/hysdn_proclog.c 2007-12-15 05:19:40.530730752 +0100
++++ linux-2.4.35.4/drivers/isdn/hysdn/hysdn_proclog.c 2007-12-15 05:19:55.675593810 +0100
@@ -1,4 +1,4 @@
-/* $Id: hysdn_proclog.c,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
+/* $Id$
}
init_waitqueue_head(&(pd->rd_queue));
-diff -rNu linux-2.4.29.old/drivers/isdn/hysdn/hysdn_sched.c linux-2.4.29/drivers/isdn/hysdn/hysdn_sched.c
---- linux-2.4.29.old/drivers/isdn/hysdn/hysdn_sched.c 2005-03-22 14:47:57.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hysdn/hysdn_sched.c 2005-03-22 15:06:48.630699792 +0100
+Index: linux-2.4.35.4/drivers/isdn/hysdn/hysdn_sched.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hysdn/hysdn_sched.c 2007-12-15 05:19:40.538731208 +0100
++++ linux-2.4.35.4/drivers/isdn/hysdn/hysdn_sched.c 2007-12-15 05:19:55.679594039 +0100
@@ -1,4 +1,4 @@
-/* $Id: hysdn_sched.c,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
+/* $Id: hysdn_sched.c,v 1.9 2001/09/24 13:23:03 kai Exp $
if (card->debug_flags & LOG_SCHED_ASYN)
hysdn_addlog(card, "async tx-cfg data send");
-diff -rNu linux-2.4.29.old/drivers/isdn/icn/icn.c linux-2.4.29/drivers/isdn/icn/icn.c
---- linux-2.4.29.old/drivers/isdn/icn/icn.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/icn/icn.c 2005-03-22 15:06:48.722685808 +0100
+Index: linux-2.4.35.4/drivers/isdn/icn/icn.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/icn/icn.c 2007-12-15 05:19:40.546731666 +0100
++++ linux-2.4.35.4/drivers/isdn/icn/icn.c 2007-12-15 05:19:55.679594039 +0100
@@ -1,4 +1,4 @@
-/* $Id: icn.c,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
+/* $Id$
#endif /* MODULE */
static int __init icn_init(void)
-diff -rNu linux-2.4.29.old/drivers/isdn/icn/icn.h linux-2.4.29/drivers/isdn/icn/icn.h
---- linux-2.4.29.old/drivers/isdn/icn/icn.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/icn/icn.h 2005-03-22 15:06:48.752681248 +0100
+Index: linux-2.4.35.4/drivers/isdn/icn/icn.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/icn/icn.h 2007-12-15 05:19:40.554732121 +0100
++++ linux-2.4.35.4/drivers/isdn/icn/icn.h 2007-12-15 05:19:55.679594039 +0100
@@ -1,4 +1,4 @@
-/* $Id: icn.h,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
+/* $Id$
*
* ISDN lowlevel-module for the ICN active ISDN-Card.
*
-diff -rNu linux-2.4.29.old/drivers/isdn/isdn_audio.c linux-2.4.29/drivers/isdn/isdn_audio.c
---- linux-2.4.29.old/drivers/isdn/isdn_audio.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdn_audio.c 2005-03-22 15:06:44.306357192 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdn_audio.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/isdn_audio.c 2007-12-15 05:19:40.562732576 +0100
++++ linux-2.4.35.4/drivers/isdn/isdn_audio.c 2007-12-15 05:19:55.679594039 +0100
@@ -1,9 +1,9 @@
-/* $Id: isdn_audio.c,v 1.1.4.1 2001/11/20 14:19:33 kai Exp $
+/* $Id: isdn_audio.c,v 1.24 2002/08/13 09:57:26 keil Exp $
what = '.';
}
if ((what != s->last) && (what != ' ') && (what != '.')) {
-diff -rNu linux-2.4.29.old/drivers/isdn/isdn_audio.h linux-2.4.29/drivers/isdn/isdn_audio.h
---- linux-2.4.29.old/drivers/isdn/isdn_audio.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdn_audio.h 2005-03-22 15:06:44.321354912 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdn_audio.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/isdn_audio.h 2007-12-15 05:19:40.566732806 +0100
++++ linux-2.4.35.4/drivers/isdn/isdn_audio.h 2007-12-15 05:19:55.683594266 +0100
@@ -1,4 +1,4 @@
-/* $Id: isdn_audio.h,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id: isdn_audio.h,v 1.10 2001/09/24 13:22:42 kai Exp $
int idx;
int buf[DTMF_NPOINTS];
} dtmf_state;
-diff -rNu linux-2.4.29.old/drivers/isdn/isdn_bsdcomp.c linux-2.4.29/drivers/isdn/isdn_bsdcomp.c
---- linux-2.4.29.old/drivers/isdn/isdn_bsdcomp.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdn_bsdcomp.c 2005-03-22 15:06:44.339352176 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdn_bsdcomp.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/isdn_bsdcomp.c 2007-12-15 05:19:40.574733261 +0100
++++ linux-2.4.35.4/drivers/isdn/isdn_bsdcomp.c 2007-12-15 05:19:55.683594266 +0100
@@ -105,6 +105,14 @@
#define DEBUG 1
return skb_out->len;
}
-diff -rNu linux-2.4.29.old/drivers/isdn/isdn_common.c linux-2.4.29/drivers/isdn/isdn_common.c
---- linux-2.4.29.old/drivers/isdn/isdn_common.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdn_common.c 2005-03-22 15:06:44.359349136 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdn_common.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/isdn_common.c 2007-12-15 05:19:40.582733716 +0100
++++ linux-2.4.35.4/drivers/isdn/isdn_common.c 2007-12-15 05:19:55.687594492 +0100
@@ -1,4 +1,4 @@
-/* $Id: isdn_common.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id: isdn_common.c,v 1.137 2002/02/09 21:19:11 keil Exp $
if (dev->drv[drvidx]->interface->readstat) {
if (count > dev->drv[drvidx]->stavail)
count = dev->drv[drvidx]->stavail;
-@@ -1061,6 +1216,9 @@
+@@ -1065,6 +1220,9 @@
} else {
len = 0;
}
save_flags(flags);
cli();
if (len)
-@@ -1068,7 +1226,7 @@
+@@ -1072,7 +1230,7 @@
else
dev->drv[drvidx]->stavail = 0;
restore_flags(flags);
retval = len;
goto out;
}
-@@ -1080,7 +1238,9 @@
+@@ -1084,7 +1242,9 @@
#endif
retval = -ENODEV;
out:
return retval;
}
-@@ -1092,15 +1252,18 @@
+@@ -1096,15 +1256,18 @@
int chidx;
int retval;
if (minor <= ISDN_MINOR_BMAX) {
printk(KERN_WARNING "isdn_write minor %d obsolete!\n", minor);
drvidx = isdn_minor2drv(minor);
-@@ -1145,7 +1308,9 @@
+@@ -1149,7 +1312,9 @@
#endif
retval = -ENODEV;
out:
return retval;
}
-@@ -1156,15 +1321,12 @@
+@@ -1160,15 +1325,12 @@
unsigned int minor = MINOR(file->f_dentry->d_inode->i_rdev);
int drvidx = isdn_minor2drv(minor - ISDN_MINOR_CTRL);
if (minor >= ISDN_MINOR_CTRL && minor <= ISDN_MINOR_CTRLMAX) {
if (drvidx < 0) {
/* driver deregistered while file open */
-@@ -1186,7 +1348,9 @@
+@@ -1190,7 +1352,9 @@
#endif
mask = POLLERR;
out:
return mask;
}
-@@ -1216,42 +1380,9 @@
+@@ -1220,42 +1384,9 @@
#define phone iocpar.phone
#define cfg iocpar.cfg
if (!dev->drivers)
return -ENODEV;
if (minor <= ISDN_MINOR_BMAX) {
-@@ -1273,11 +1404,34 @@
+@@ -1277,11 +1408,34 @@
*/
switch (cmd) {
case IIOCNETDWRSET:
#ifdef CONFIG_NETDEVICES
case IIOCNETAIF:
/* Add a network-interface */
-@@ -1650,22 +1804,12 @@
+@@ -1654,22 +1808,12 @@
int chidx;
int retval = -ENODEV;
}
if (!dev->channels)
goto out;
-@@ -1688,6 +1832,9 @@
+@@ -1692,6 +1836,9 @@
if (drvidx < 0)
goto out;
isdn_lock_drivers();
retval = 0;
goto out;
}
-@@ -1700,6 +1847,10 @@
+@@ -1704,6 +1851,10 @@
}
#endif
out:
return retval;
}
-@@ -1708,25 +1859,11 @@
+@@ -1712,25 +1863,11 @@
{
uint minor = MINOR(ino->i_rdev);
}
isdn_unlock_drivers();
if (minor <= ISDN_MINOR_BMAX)
-@@ -1734,6 +1871,12 @@
+@@ -1738,6 +1875,12 @@
if (minor <= ISDN_MINOR_CTRLMAX) {
if (dev->profd == current)
dev->profd = NULL;
goto out;
}
#ifdef CONFIG_ISDN_PPP
-@@ -1742,13 +1885,19 @@
+@@ -1746,13 +1889,19 @@
#endif
out:
llseek: no_llseek,
read: isdn_read,
write: isdn_write,
-@@ -1801,6 +1950,15 @@
+@@ -1805,6 +1954,15 @@
if (USG_NONE(dev->usage[i]) &&
(dev->drvmap[i] != -1)) {
int d = dev->drvmap[i];
if ((dev->usage[i] & ISDN_USAGE_EXCLUSIVE) &&
((pre_dev != d) || (pre_chan != dev->chanmap[i])))
continue;
-@@ -1819,7 +1977,11 @@
+@@ -1823,7 +1981,11 @@
restore_flags(flags);
return i;
} else {
dev->usage[i] &= ISDN_USAGE_EXCLUSIVE;
dev->usage[i] |= usage;
isdn_info_update();
-@@ -2006,7 +2168,7 @@
+@@ -2010,7 +2172,7 @@
if ((adding) && (d->rcverr))
kfree(d->rcverr);
printk(KERN_WARNING "register_isdn: Could not alloc rcverr\n");
return -1;
}
-@@ -2014,7 +2176,7 @@
+@@ -2018,7 +2180,7 @@
if ((adding) && (d->rcvcount))
kfree(d->rcvcount);
printk(KERN_WARNING "register_isdn: Could not alloc rcvcount\n");
if (!adding) kfree(d->rcverr);
return -1;
-@@ -2026,7 +2188,8 @@
+@@ -2030,7 +2192,8 @@
skb_queue_purge(&d->rpqueue[j]);
kfree(d->rpqueue);
}
printk(KERN_WARNING "register_isdn: Could not alloc rpqueue\n");
if (!adding) {
kfree(d->rcvcount);
-@@ -2040,7 +2203,8 @@
+@@ -2044,7 +2207,8 @@
if ((adding) && (d->rcv_waitq))
kfree(d->rcv_waitq);
if (!d->rcv_waitq) {
printk(KERN_WARNING "register_isdn: Could not alloc rcv_waitq\n");
if (!adding) {
-@@ -2064,7 +2228,9 @@
+@@ -2068,7 +2232,9 @@
if (dev->chanmap[k] < 0) {
dev->chanmap[k] = j;
dev->drvmap[k] = drvidx;
break;
}
restore_flags(flags);
-@@ -2128,6 +2294,7 @@
+@@ -2132,6 +2298,7 @@
i_div->ll_cmd = isdn_command; /* set command function */
i_div->drv_to_name = map_drvname;
i_div->name_to_drv = map_namedrv;
MOD_INC_USE_COUNT;
divert_if = i_div; /* remember interface */
return(DIVERT_NO_ERR);
-@@ -2165,7 +2332,7 @@
+@@ -2169,7 +2336,7 @@
printk(KERN_WARNING "register_isdn: No write routine given.\n");
return 0;
}
printk(KERN_WARNING "register_isdn: Could not alloc driver-struct\n");
return 0;
}
-@@ -2225,6 +2392,7 @@
+@@ -2229,6 +2396,7 @@
return rev;
}
#ifdef CONFIG_DEVFS_FS
static devfs_handle_t devfs_handle;
-@@ -2314,6 +2482,7 @@
+@@ -2318,6 +2486,7 @@
}
#endif /* CONFIG_DEVFS_FS */
/*
* Allocate and initialize all data, register modem-devices
-@@ -2331,7 +2500,6 @@
+@@ -2335,7 +2504,6 @@
init_timer(&dev->timer);
dev->timer.function = isdn_timer_funct;
init_MUTEX(&dev->sem);
for (i = 0; i < ISDN_MAX_CHANNELS; i++) {
dev->drvmap[i] = -1;
dev->chanmap[i] = -1;
-@@ -2345,7 +2513,9 @@
+@@ -2349,7 +2517,9 @@
vfree(dev);
return -EIO;
}
if ((i = isdn_tty_modem_init()) < 0) {
printk(KERN_WARNING "isdn: Could not register tty devices\n");
if (i == -3)
-@@ -2353,7 +2523,9 @@
+@@ -2357,7 +2527,9 @@
if (i <= -2)
tty_unregister_driver(&dev->mdm.tty_modem);
vfree(dev);
devfs_unregister_chrdev(ISDN_MAJOR, "isdn");
return -EIO;
}
-@@ -2364,7 +2536,9 @@
+@@ -2368,7 +2540,9 @@
tty_unregister_driver(&dev->mdm.cua_modem);
for (i = 0; i < ISDN_MAX_CHANNELS; i++)
kfree(dev->mdm.info[i].xmit_buf - 4);
devfs_unregister_chrdev(ISDN_MAJOR, "isdn");
vfree(dev);
return -EIO;
-@@ -2390,6 +2564,9 @@
+@@ -2394,6 +2568,9 @@
printk("\n");
#endif
isdn_info_update();
return 0;
}
-@@ -2398,7 +2575,7 @@
+@@ -2402,7 +2579,7 @@
*/
static void __exit isdn_exit(void)
{
int i;
#ifdef CONFIG_ISDN_PPP
-@@ -2432,13 +2609,18 @@
+@@ -2436,13 +2613,18 @@
printk(KERN_WARNING "isdn: controldevice busy, remove cancelled\n");
restore_flags(flags);
} else {
}
module_init(isdn_init);
-diff -rNu linux-2.4.29.old/drivers/isdn/isdn_common.h linux-2.4.29/drivers/isdn/isdn_common.h
---- linux-2.4.29.old/drivers/isdn/isdn_common.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdn_common.h 2005-03-22 15:06:44.374346856 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdn_common.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/isdn_common.h 2007-12-15 05:19:40.590734172 +0100
++++ linux-2.4.35.4/drivers/isdn/isdn_common.h 2007-12-15 05:19:55.687594492 +0100
@@ -1,4 +1,4 @@
-/* $Id: isdn_common.h,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id: isdn_common.h,v 1.22 2001/09/24 13:22:42 kai Exp $
/* Prototypes */
extern void isdn_MOD_INC_USE_COUNT(void);
extern void isdn_MOD_DEC_USE_COUNT(void);
-diff -rNu linux-2.4.29.old/drivers/isdn/isdn_concap.c linux-2.4.29/drivers/isdn/isdn_concap.c
---- linux-2.4.29.old/drivers/isdn/isdn_concap.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdn_concap.c 2005-03-22 15:06:44.389344576 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdn_concap.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/isdn_concap.c 2007-12-15 05:19:40.598734627 +0100
++++ linux-2.4.35.4/drivers/isdn/isdn_concap.c 2007-12-15 05:19:55.687594492 +0100
@@ -1,4 +1,4 @@
-/* $Id: isdn_concap.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id: isdn_concap.c,v 1.9 2001/09/24 13:22:42 kai Exp $
*
* Linux ISDN subsystem, protocol encapsulation
*
-diff -rNu linux-2.4.29.old/drivers/isdn/isdn_concap.h linux-2.4.29/drivers/isdn/isdn_concap.h
---- linux-2.4.29.old/drivers/isdn/isdn_concap.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdn_concap.h 2005-03-22 15:06:44.405342144 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdn_concap.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/isdn_concap.h 2007-12-15 05:19:40.606735085 +0100
++++ linux-2.4.35.4/drivers/isdn/isdn_concap.h 2007-12-15 05:19:55.687594492 +0100
@@ -1,4 +1,4 @@
-/* $Id: isdn_concap.h,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id: isdn_concap.h,v 1.4 2001/09/24 13:22:42 kai Exp $
*
* Linux ISDN subsystem, protocol encapsulation
*
-diff -rNu linux-2.4.29.old/drivers/isdn/isdn_dwabc.c linux-2.4.29/drivers/isdn/isdn_dwabc.c
---- linux-2.4.29.old/drivers/isdn/isdn_dwabc.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdn_dwabc.c 2005-03-22 15:06:44.421339712 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdn_dwabc.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/isdn/isdn_dwabc.c 2007-12-15 05:19:55.695594949 +0100
@@ -0,0 +1,1053 @@
+
+/* $Id: isdn_dwabc.c,v 1.27 2001/12/01 23:18:21 detabc Exp $
+{ return(skb); }
+#endif
+#endif
-diff -rNu linux-2.4.29.old/drivers/isdn/isdn_net.c linux-2.4.29/drivers/isdn/isdn_net.c
---- linux-2.4.29.old/drivers/isdn/isdn_net.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdn_net.c 2005-03-22 15:06:44.447335760 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdn_net.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/isdn_net.c 2007-12-15 05:19:40.618735767 +0100
++++ linux-2.4.35.4/drivers/isdn/isdn_net.c 2007-12-15 05:19:55.699595179 +0100
@@ -1,4 +1,4 @@
-/* $Id: isdn_net.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id: isdn_net.c,v 1.153 2002/08/17 18:35:23 detabc Exp $
restore_flags(flags);
kfree(p->local);
kfree(p);
-diff -rNu linux-2.4.29.old/drivers/isdn/isdn_net.h linux-2.4.29/drivers/isdn/isdn_net.h
---- linux-2.4.29.old/drivers/isdn/isdn_net.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdn_net.h 2005-03-22 15:06:44.463333328 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdn_net.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/isdn_net.h 2007-12-15 05:19:40.626736225 +0100
++++ linux-2.4.35.4/drivers/isdn/isdn_net.h 2007-12-15 05:19:55.699595179 +0100
@@ -1,4 +1,4 @@
-/* $Id: isdn_net.h,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id: isdn_net.h,v 1.23 2001/11/07 22:35:48 kai Exp $
spin_unlock_irqrestore(&master_lp->netdev->queue_lock, flags);
}
-diff -rNu linux-2.4.29.old/drivers/isdn/isdn_ppp.c linux-2.4.29/drivers/isdn/isdn_ppp.c
---- linux-2.4.29.old/drivers/isdn/isdn_ppp.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdn_ppp.c 2005-03-22 15:06:44.481330592 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdn_ppp.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/isdn_ppp.c 2007-12-15 05:19:40.634736680 +0100
++++ linux-2.4.35.4/drivers/isdn/isdn_ppp.c 2007-12-15 05:19:55.703595405 +0100
@@ -1,4 +1,4 @@
-/* $Id: isdn_ppp.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id: isdn_ppp.c,v 1.94 2001/11/07 22:35:48 kai Exp $
if (lp->p_encap != ISDN_NET_ENCAP_SYNCPPP)
return -EINVAL;
-@@ -2431,7 +2249,7 @@
+@@ -2432,7 +2250,7 @@
return;
}
rs->state = CCPResetSentReq;
know better */
rs->expra = 1;
rs->dlen = 0;
-@@ -2582,7 +2400,13 @@
+@@ -2583,7 +2401,13 @@
}
if(type) { /* type=1 => Link compression */
}
else {
if(!master) {
-@@ -2630,31 +2454,18 @@
+@@ -2631,31 +2455,18 @@
static void isdn_ppp_receive_ccp(isdn_net_dev *net_dev, isdn_net_local *lp,
struct sk_buff *skb,int proto)
{
mis = is;
switch(skb->data[0]) {
-@@ -2806,18 +2617,13 @@
+@@ -2807,18 +2618,13 @@
static void isdn_ppp_send_ccp(isdn_net_dev *net_dev, isdn_net_local *lp, struct sk_buff *skb)
{
/* Daemon may send with or without address and control field comp */
data = skb->data;
if(!(is->pppcfg & SC_COMP_AC) && data[0] == 0xff && data[1] == 0x03) {
-@@ -2833,17 +2639,12 @@
+@@ -2834,17 +2640,12 @@
printk(KERN_DEBUG "Received CCP frame from daemon:\n");
isdn_ppp_frame_log("ccp-xmit", skb->data, skb->len, 32, is->unit,lp->ppp_slot);
printk(KERN_DEBUG "isdn_ppp: Ouch! Master CCP sends on slave slot!\n");
switch(data[2]) {
-diff -rNu linux-2.4.29.old/drivers/isdn/isdn_ppp.h linux-2.4.29/drivers/isdn/isdn_ppp.h
---- linux-2.4.29.old/drivers/isdn/isdn_ppp.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdn_ppp.h 2005-03-22 15:06:44.497328160 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdn_ppp.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/isdn_ppp.h 2007-12-15 05:19:40.642737136 +0100
++++ linux-2.4.35.4/drivers/isdn/isdn_ppp.h 2007-12-15 05:19:55.703595405 +0100
@@ -1,4 +1,4 @@
-/* $Id: isdn_ppp.h,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id: isdn_ppp.h,v 1.18 2001/09/24 13:22:42 kai Exp $
extern int isdn_ppp_xmit(struct sk_buff *, struct net_device *);
extern void isdn_ppp_receive(isdn_net_dev *, isdn_net_local *, struct sk_buff *);
extern int isdn_ppp_dev_ioctl(struct net_device *, struct ifreq *, int);
-diff -rNu linux-2.4.29.old/drivers/isdn/isdn_tty.c linux-2.4.29/drivers/isdn/isdn_tty.c
---- linux-2.4.29.old/drivers/isdn/isdn_tty.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdn_tty.c 2005-03-22 15:06:44.524324056 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdn_tty.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/isdn_tty.c 2007-12-15 05:19:40.646737365 +0100
++++ linux-2.4.35.4/drivers/isdn/isdn_tty.c 2007-12-15 05:19:55.703595405 +0100
@@ -1,4 +1,4 @@
-/* $Id: isdn_tty.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id: isdn_tty.c,v 1.104 2002/02/09 21:19:11 keil Exp $
if (dev->global_features &
ISDN_FEATURE_L3_FCLASS2)
strcat(rs, "2,");
-diff -rNu linux-2.4.29.old/drivers/isdn/isdn_tty.h linux-2.4.29/drivers/isdn/isdn_tty.h
---- linux-2.4.29.old/drivers/isdn/isdn_tty.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdn_tty.h 2005-03-22 15:06:44.545320864 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdn_tty.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/isdn_tty.h 2007-12-15 05:19:40.654737820 +0100
++++ linux-2.4.35.4/drivers/isdn/isdn_tty.h 2007-12-15 05:19:55.707595631 +0100
@@ -1,4 +1,4 @@
-/* $Id: isdn_tty.h,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id: isdn_tty.h,v 1.25 2002/02/09 21:19:11 keil Exp $
#define TTY_IS_FCLASS2(info) \
((info->emu.mdmreg[REG_L2PROT] == ISDN_PROTO_L2_FAX) && \
(info->emu.mdmreg[REG_L3PROT] == ISDN_PROTO_L3_FCLASS2))
-diff -rNu linux-2.4.29.old/drivers/isdn/isdn_ttyfax.c linux-2.4.29/drivers/isdn/isdn_ttyfax.c
---- linux-2.4.29.old/drivers/isdn/isdn_ttyfax.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdn_ttyfax.c 2005-03-22 15:06:44.561318432 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdn_ttyfax.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/isdn_ttyfax.c 2007-12-15 05:19:40.662738275 +0100
++++ linux-2.4.35.4/drivers/isdn/isdn_ttyfax.c 2007-12-15 05:19:55.711595860 +0100
@@ -1,4 +1,4 @@
-/* $Id: isdn_ttyfax.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id: isdn_ttyfax.c,v 1.9 2001/09/24 13:22:43 kai Exp $
+#endif
PARSE_ERROR1;
}
-diff -rNu linux-2.4.29.old/drivers/isdn/isdn_ttyfax.h linux-2.4.29/drivers/isdn/isdn_ttyfax.h
---- linux-2.4.29.old/drivers/isdn/isdn_ttyfax.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdn_ttyfax.h 2005-03-22 15:06:44.576316152 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdn_ttyfax.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/isdn_ttyfax.h 2007-12-15 05:19:40.670738731 +0100
++++ linux-2.4.35.4/drivers/isdn/isdn_ttyfax.h 2007-12-15 05:19:55.711595860 +0100
@@ -1,4 +1,4 @@
-/* $Id: isdn_ttyfax.h,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id: isdn_ttyfax.h,v 1.3 2001/09/24 13:22:43 kai Exp $
*
* header for Linux ISDN subsystem, tty_fax related functions (linklevel).
*
-diff -rNu linux-2.4.29.old/drivers/isdn/isdn_v110.c linux-2.4.29/drivers/isdn/isdn_v110.c
---- linux-2.4.29.old/drivers/isdn/isdn_v110.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdn_v110.c 2005-03-22 15:06:44.593313568 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdn_v110.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/isdn_v110.c 2007-12-15 05:19:40.678739186 +0100
++++ linux-2.4.35.4/drivers/isdn/isdn_v110.c 2007-12-15 05:19:55.711595860 +0100
@@ -1,4 +1,4 @@
-/* $Id: isdn_v110.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id: isdn_v110.c,v 1.8 2001/09/24 13:22:43 kai Exp $
#endif
kfree(v->encodebuf);
kfree(v);
-diff -rNu linux-2.4.29.old/drivers/isdn/isdn_v110.h linux-2.4.29/drivers/isdn/isdn_v110.h
---- linux-2.4.29.old/drivers/isdn/isdn_v110.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdn_v110.h 2005-03-22 15:06:44.608311288 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdn_v110.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/isdn_v110.h 2007-12-15 05:19:40.686739644 +0100
++++ linux-2.4.35.4/drivers/isdn/isdn_v110.h 2007-12-15 05:19:55.715596089 +0100
@@ -1,4 +1,4 @@
-/* $Id: isdn_v110.h,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id: isdn_v110.h,v 1.5 2001/09/24 13:22:43 kai Exp $
*
* Linux ISDN subsystem, V.110 related functions (linklevel).
*
-diff -rNu linux-2.4.29.old/drivers/isdn/isdn_x25iface.c linux-2.4.29/drivers/isdn/isdn_x25iface.c
---- linux-2.4.29.old/drivers/isdn/isdn_x25iface.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdn_x25iface.c 2005-03-22 15:06:44.626308552 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdn_x25iface.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/isdn_x25iface.c 2007-12-15 05:19:40.694740100 +0100
++++ linux-2.4.35.4/drivers/isdn/isdn_x25iface.c 2007-12-15 05:19:55.715596089 +0100
@@ -1,4 +1,4 @@
-/* $Id: isdn_x25iface.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id: isdn_x25iface.c,v 1.10 2001/09/24 13:22:43 kai Exp $
*
* Linux ISDN subsystem, X.25 related functions
*
-diff -rNu linux-2.4.29.old/drivers/isdn/isdn_x25iface.h linux-2.4.29/drivers/isdn/isdn_x25iface.h
---- linux-2.4.29.old/drivers/isdn/isdn_x25iface.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdn_x25iface.h 2005-03-22 15:06:44.645305664 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdn_x25iface.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/isdn_x25iface.h 2007-12-15 05:19:40.702740555 +0100
++++ linux-2.4.35.4/drivers/isdn/isdn_x25iface.h 2007-12-15 05:19:55.715596089 +0100
@@ -1,4 +1,4 @@
-/* $Id: isdn_x25iface.h,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
+/* $Id: isdn_x25iface.h,v 1.4 2001/09/24 13:22:43 kai Exp $
*
* header for Linux ISDN subsystem, x.25 related functions
*
-diff -rNu linux-2.4.29.old/drivers/isdn/isdnloop/isdnloop.c linux-2.4.29/drivers/isdn/isdnloop/isdnloop.c
---- linux-2.4.29.old/drivers/isdn/isdnloop/isdnloop.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdnloop/isdnloop.c 2005-03-22 15:06:48.813671976 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdnloop/isdnloop.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/isdnloop/isdnloop.c 2007-12-15 05:19:40.706740784 +0100
++++ linux-2.4.35.4/drivers/isdn/isdnloop/isdnloop.c 2007-12-15 05:19:55.715596089 +0100
@@ -1,4 +1,4 @@
-/* $Id: isdnloop.c,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
+/* $Id: isdnloop.c,v 1.17 2001/08/30 10:45:42 kai Exp $
}
static void __exit
-diff -rNu linux-2.4.29.old/drivers/isdn/isdnloop/isdnloop.h linux-2.4.29/drivers/isdn/isdnloop/isdnloop.h
---- linux-2.4.29.old/drivers/isdn/isdnloop/isdnloop.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdnloop/isdnloop.h 2005-03-22 15:06:48.834668784 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdnloop/isdnloop.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/isdnloop/isdnloop.h 2007-12-15 05:19:40.714741240 +0100
++++ linux-2.4.35.4/drivers/isdn/isdnloop/isdnloop.h 2007-12-15 05:19:55.719596319 +0100
@@ -1,4 +1,4 @@
-/* $Id: isdnloop.h,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
+/* $Id$
*
* Loopback lowlevel module for testing of linklevel.
*
-diff -rNu linux-2.4.29.old/drivers/isdn/pcbit/callbacks.c linux-2.4.29/drivers/isdn/pcbit/callbacks.c
---- linux-2.4.29.old/drivers/isdn/pcbit/callbacks.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/pcbit/callbacks.c 2005-03-22 15:06:48.909657384 +0100
+Index: linux-2.4.35.4/drivers/isdn/pcbit/callbacks.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/pcbit/callbacks.c 2007-12-15 05:19:40.722741695 +0100
++++ linux-2.4.35.4/drivers/isdn/pcbit/callbacks.c 2007-12-15 05:19:55.719596319 +0100
@@ -3,7 +3,7 @@
*
* Copyright (C) 1996 Universidade de Lisboa
*
* This software may be used and distributed according to the terms of
* the GNU General Public License, incorporated herein by reference.
-diff -rNu linux-2.4.29.old/drivers/isdn/pcbit/callbacks.h linux-2.4.29/drivers/isdn/pcbit/callbacks.h
---- linux-2.4.29.old/drivers/isdn/pcbit/callbacks.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/pcbit/callbacks.h 2005-03-22 15:06:48.953650696 +0100
+Index: linux-2.4.35.4/drivers/isdn/pcbit/callbacks.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/pcbit/callbacks.h 2007-12-15 05:19:40.730742150 +0100
++++ linux-2.4.35.4/drivers/isdn/pcbit/callbacks.h 2007-12-15 05:19:55.719596319 +0100
@@ -3,7 +3,7 @@
*
* Copyright (C) 1996 Universidade de Lisboa
*
* This software may be used and distributed according to the terms of
* the GNU General Public License, incorporated herein by reference.
-diff -rNu linux-2.4.29.old/drivers/isdn/pcbit/capi.c linux-2.4.29/drivers/isdn/pcbit/capi.c
---- linux-2.4.29.old/drivers/isdn/pcbit/capi.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/pcbit/capi.c 2005-03-22 15:06:49.042637168 +0100
+Index: linux-2.4.35.4/drivers/isdn/pcbit/capi.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/pcbit/capi.c 2007-12-15 05:19:40.738742606 +0100
++++ linux-2.4.35.4/drivers/isdn/pcbit/capi.c 2007-12-15 05:19:55.719596319 +0100
@@ -4,7 +4,7 @@
*
* Copyright (C) 1996 Universidade de Lisboa
*
* This software may be used and distributed according to the terms of
* the GNU General Public License, incorporated herein by reference.
-diff -rNu linux-2.4.29.old/drivers/isdn/pcbit/capi.h linux-2.4.29/drivers/isdn/pcbit/capi.h
---- linux-2.4.29.old/drivers/isdn/pcbit/capi.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/pcbit/capi.h 2005-03-22 15:06:49.071632760 +0100
+Index: linux-2.4.35.4/drivers/isdn/pcbit/capi.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/pcbit/capi.h 2007-12-15 05:19:40.746743064 +0100
++++ linux-2.4.35.4/drivers/isdn/pcbit/capi.h 2007-12-15 05:19:55.719596319 +0100
@@ -3,7 +3,7 @@
*
* Copyright (C) 1996 Universidade de Lisboa
capi_channel(struct pcbit_dev *dev, struct sk_buff *skb)
{
ushort callref;
-diff -rNu linux-2.4.29.old/drivers/isdn/pcbit/drv.c linux-2.4.29/drivers/isdn/pcbit/drv.c
---- linux-2.4.29.old/drivers/isdn/pcbit/drv.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/pcbit/drv.c 2005-03-22 15:06:49.091629720 +0100
+Index: linux-2.4.35.4/drivers/isdn/pcbit/drv.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/pcbit/drv.c 2007-12-15 05:19:40.754743519 +0100
++++ linux-2.4.35.4/drivers/isdn/pcbit/drv.c 2007-12-15 05:19:55.723596545 +0100
@@ -3,7 +3,7 @@
*
* Copyright (C) 1996 Universidade de Lisboa
if (capi_decode_conn_conf(chan, skb, &complete)) {
printk(KERN_DEBUG "conn_conf indicates error\n");
pcbit_fsm_event(dev, chan, EV_ERROR, NULL);
-diff -rNu linux-2.4.29.old/drivers/isdn/pcbit/edss1.c linux-2.4.29/drivers/isdn/pcbit/edss1.c
---- linux-2.4.29.old/drivers/isdn/pcbit/edss1.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/pcbit/edss1.c 2005-03-22 15:06:49.119625464 +0100
+Index: linux-2.4.35.4/drivers/isdn/pcbit/edss1.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/pcbit/edss1.c 2007-12-15 05:19:40.762743974 +0100
++++ linux-2.4.35.4/drivers/isdn/pcbit/edss1.c 2007-12-15 05:19:55.723596545 +0100
@@ -4,7 +4,7 @@
*
* Copyright (C) 1996 Universidade de Lisboa
*
* This software may be used and distributed according to the terms of
* the GNU General Public License, incorporated herein by reference.
-diff -rNu linux-2.4.29.old/drivers/isdn/pcbit/edss1.h linux-2.4.29/drivers/isdn/pcbit/edss1.h
---- linux-2.4.29.old/drivers/isdn/pcbit/edss1.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/pcbit/edss1.h 2005-03-22 15:06:49.161619080 +0100
+Index: linux-2.4.35.4/drivers/isdn/pcbit/edss1.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/pcbit/edss1.h 2007-12-15 05:19:40.770744430 +0100
++++ linux-2.4.35.4/drivers/isdn/pcbit/edss1.h 2007-12-15 05:19:55.723596545 +0100
@@ -3,7 +3,7 @@
*
* Copyright (C) 1996 Universidade de Lisboa
*
* This software may be used and distributed according to the terms of
* the GNU General Public License, incorporated herein by reference.
-diff -rNu linux-2.4.29.old/drivers/isdn/pcbit/layer2.c linux-2.4.29/drivers/isdn/pcbit/layer2.c
---- linux-2.4.29.old/drivers/isdn/pcbit/layer2.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/pcbit/layer2.c 2005-03-22 15:06:49.195613912 +0100
+Index: linux-2.4.35.4/drivers/isdn/pcbit/layer2.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/pcbit/layer2.c 2007-12-15 05:19:40.774744659 +0100
++++ linux-2.4.35.4/drivers/isdn/pcbit/layer2.c 2007-12-15 05:19:55.723596545 +0100
@@ -3,7 +3,7 @@
*
* Copyright (C) 1996 Universidade de Lisboa
return;
}
-diff -rNu linux-2.4.29.old/drivers/isdn/pcbit/layer2.h linux-2.4.29/drivers/isdn/pcbit/layer2.h
---- linux-2.4.29.old/drivers/isdn/pcbit/layer2.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/pcbit/layer2.h 2005-03-22 15:06:49.228608896 +0100
+Index: linux-2.4.35.4/drivers/isdn/pcbit/layer2.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/pcbit/layer2.h 2007-12-15 05:19:40.782745114 +0100
++++ linux-2.4.35.4/drivers/isdn/pcbit/layer2.h 2007-12-15 05:19:55.731597000 +0100
@@ -3,7 +3,7 @@
*
* Copyright (C) 1996 Universidade de Lisboa
*
* This software may be used and distributed according to the terms of
* the GNU General Public License, incorporated herein by reference.
-diff -rNu linux-2.4.29.old/drivers/isdn/pcbit/module.c linux-2.4.29/drivers/isdn/pcbit/module.c
---- linux-2.4.29.old/drivers/isdn/pcbit/module.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/pcbit/module.c 2005-03-22 15:06:49.251605400 +0100
+Index: linux-2.4.35.4/drivers/isdn/pcbit/module.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/pcbit/module.c 2007-12-15 05:19:40.790745570 +0100
++++ linux-2.4.35.4/drivers/isdn/pcbit/module.c 2007-12-15 05:19:55.731597000 +0100
@@ -3,7 +3,7 @@
*
* Copyright (C) 1996 Universidade de Lisboa
#endif
module_init(pcbit_init);
-diff -rNu linux-2.4.29.old/drivers/isdn/pcbit/pcbit.h linux-2.4.29/drivers/isdn/pcbit/pcbit.h
---- linux-2.4.29.old/drivers/isdn/pcbit/pcbit.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/pcbit/pcbit.h 2005-03-22 15:06:49.284600384 +0100
+Index: linux-2.4.35.4/drivers/isdn/pcbit/pcbit.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/pcbit/pcbit.h 2007-12-15 05:19:40.798746025 +0100
++++ linux-2.4.35.4/drivers/isdn/pcbit/pcbit.h 2007-12-15 05:19:55.731597000 +0100
@@ -3,7 +3,7 @@
*
* Copyright (C) 1996 Universidade de Lisboa
*
* This software may be used and distributed according to the terms of
* the GNU General Public License, incorporated herein by reference.
-diff -rNu linux-2.4.29.old/drivers/isdn/sc/card.h linux-2.4.29/drivers/isdn/sc/card.h
---- linux-2.4.29.old/drivers/isdn/sc/card.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/sc/card.h 2005-03-22 15:06:49.333592936 +0100
+Index: linux-2.4.35.4/drivers/isdn/sc/card.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/sc/card.h 2007-12-15 05:19:40.806746483 +0100
++++ linux-2.4.35.4/drivers/isdn/sc/card.h 2007-12-15 05:19:55.731597000 +0100
@@ -1,4 +1,4 @@
-/* $Id: card.h,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
+/* $Id$
*
* Driver parameters for SpellCaster ISA ISDN adapters
*
-diff -rNu linux-2.4.29.old/drivers/isdn/sc/command.c linux-2.4.29/drivers/isdn/sc/command.c
---- linux-2.4.29.old/drivers/isdn/sc/command.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/sc/command.c 2005-03-22 15:06:49.348590656 +0100
+Index: linux-2.4.35.4/drivers/isdn/sc/command.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/sc/command.c 2007-12-15 05:19:40.814746939 +0100
++++ linux-2.4.35.4/drivers/isdn/sc/command.c 2007-12-15 05:19:55.735597229 +0100
@@ -1,4 +1,4 @@
-/* $Id: command.c,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
+/* $Id$
}
/*
-diff -rNu linux-2.4.29.old/drivers/isdn/sc/debug.c linux-2.4.29/drivers/isdn/sc/debug.c
---- linux-2.4.29.old/drivers/isdn/sc/debug.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/sc/debug.c 2005-03-22 15:06:49.363588376 +0100
+Index: linux-2.4.35.4/drivers/isdn/sc/debug.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/sc/debug.c 2007-12-15 05:19:40.822747394 +0100
++++ linux-2.4.35.4/drivers/isdn/sc/debug.c 2007-12-15 05:19:55.735597229 +0100
@@ -1,4 +1,4 @@
-/* $Id: debug.c,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
+/* $Id$
*
* Copyright (C) 1996 SpellCaster Telecommunications Inc.
*
-diff -rNu linux-2.4.29.old/drivers/isdn/sc/debug.h linux-2.4.29/drivers/isdn/sc/debug.h
---- linux-2.4.29.old/drivers/isdn/sc/debug.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/sc/debug.h 2005-03-22 15:06:49.378586096 +0100
+Index: linux-2.4.35.4/drivers/isdn/sc/debug.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/sc/debug.h 2007-12-15 05:19:40.830747849 +0100
++++ linux-2.4.35.4/drivers/isdn/sc/debug.h 2007-12-15 05:19:55.735597229 +0100
@@ -1,4 +1,4 @@
-/* $Id: debug.h,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
+/* $Id$
*
* Copyright (C) 1996 SpellCaster Telecommunications Inc.
*
-diff -rNu linux-2.4.29.old/drivers/isdn/sc/event.c linux-2.4.29/drivers/isdn/sc/event.c
---- linux-2.4.29.old/drivers/isdn/sc/event.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/sc/event.c 2005-03-22 15:06:49.394583664 +0100
+Index: linux-2.4.35.4/drivers/isdn/sc/event.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/sc/event.c 2007-12-15 05:19:40.838748305 +0100
++++ linux-2.4.35.4/drivers/isdn/sc/event.c 2007-12-15 05:19:55.735597229 +0100
@@ -1,4 +1,4 @@
-/* $Id: event.c,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
+/* $Id$
*
* Copyright (C) 1996 SpellCaster Telecommunications Inc.
*
-diff -rNu linux-2.4.29.old/drivers/isdn/sc/init.c linux-2.4.29/drivers/isdn/sc/init.c
---- linux-2.4.29.old/drivers/isdn/sc/init.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/sc/init.c 2005-03-22 15:06:49.432577888 +0100
+Index: linux-2.4.35.4/drivers/isdn/sc/init.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/sc/init.c 2007-12-15 05:19:40.846748763 +0100
++++ linux-2.4.35.4/drivers/isdn/sc/init.c 2007-12-15 05:19:55.735597229 +0100
@@ -514,6 +514,15 @@
schedule_timeout(HZ);
sig = readl(rambase + SIG_OFFSET);
if(sig == SIGNATURE)
return BRI_BOARD;
-diff -rNu linux-2.4.29.old/drivers/isdn/sc/interrupt.c linux-2.4.29/drivers/isdn/sc/interrupt.c
---- linux-2.4.29.old/drivers/isdn/sc/interrupt.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/sc/interrupt.c 2005-03-22 15:06:49.447575608 +0100
+Index: linux-2.4.35.4/drivers/isdn/sc/interrupt.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/sc/interrupt.c 2007-12-15 05:19:40.850748989 +0100
++++ linux-2.4.35.4/drivers/isdn/sc/interrupt.c 2007-12-15 05:19:55.739597458 +0100
@@ -1,4 +1,4 @@
-/* $Id: interrupt.c,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
+/* $Id$
*
* Copyright (C) 1996 SpellCaster Telecommunications Inc.
*
-diff -rNu linux-2.4.29.old/drivers/isdn/sc/ioctl.c linux-2.4.29/drivers/isdn/sc/ioctl.c
---- linux-2.4.29.old/drivers/isdn/sc/ioctl.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/sc/ioctl.c 2005-03-22 15:06:49.463573176 +0100
+Index: linux-2.4.35.4/drivers/isdn/sc/ioctl.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/sc/ioctl.c 2007-12-15 05:19:40.858749445 +0100
++++ linux-2.4.35.4/drivers/isdn/sc/ioctl.c 2007-12-15 05:19:55.739597458 +0100
@@ -23,6 +23,9 @@
extern board *adapter[];
int GetStatus(int card, boardInfo *);
-diff -rNu linux-2.4.29.old/drivers/isdn/sc/message.c linux-2.4.29/drivers/isdn/sc/message.c
---- linux-2.4.29.old/drivers/isdn/sc/message.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/sc/message.c 2005-03-22 15:06:49.478570896 +0100
+Index: linux-2.4.35.4/drivers/isdn/sc/message.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/sc/message.c 2007-12-15 05:19:40.866749903 +0100
++++ linux-2.4.35.4/drivers/isdn/sc/message.c 2007-12-15 05:19:55.739597458 +0100
@@ -1,4 +1,4 @@
-/* $Id: message.c,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
+/* $Id$
*
* functions for sending and receiving control messages
*
-diff -rNu linux-2.4.29.old/drivers/isdn/sc/message.h linux-2.4.29/drivers/isdn/sc/message.h
---- linux-2.4.29.old/drivers/isdn/sc/message.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/sc/message.h 2005-03-22 15:06:49.495568312 +0100
+Index: linux-2.4.35.4/drivers/isdn/sc/message.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/sc/message.h 2007-12-15 05:19:40.874750358 +0100
++++ linux-2.4.35.4/drivers/isdn/sc/message.h 2007-12-15 05:19:55.739597458 +0100
@@ -1,4 +1,4 @@
-/* $Id: message.h,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
+/* $Id$
*
* Copyright (C) 1996 SpellCaster Telecommunications Inc.
*
-diff -rNu linux-2.4.29.old/drivers/isdn/sc/packet.c linux-2.4.29/drivers/isdn/sc/packet.c
---- linux-2.4.29.old/drivers/isdn/sc/packet.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/sc/packet.c 2005-03-22 15:06:49.514565424 +0100
+Index: linux-2.4.35.4/drivers/isdn/sc/packet.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/sc/packet.c 2007-12-15 05:19:40.882750813 +0100
++++ linux-2.4.35.4/drivers/isdn/sc/packet.c 2007-12-15 05:19:55.739597458 +0100
@@ -1,4 +1,4 @@
-/* $Id: packet.c,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
+/* $Id$
*
* Copyright (C) 1996 SpellCaster Telecommunications Inc.
*
-diff -rNu linux-2.4.29.old/drivers/isdn/sc/shmem.c linux-2.4.29/drivers/isdn/sc/shmem.c
---- linux-2.4.29.old/drivers/isdn/sc/shmem.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/sc/shmem.c 2005-03-22 15:06:49.560558432 +0100
+Index: linux-2.4.35.4/drivers/isdn/sc/shmem.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/sc/shmem.c 2007-12-15 05:19:40.890751269 +0100
++++ linux-2.4.35.4/drivers/isdn/sc/shmem.c 2007-12-15 05:19:55.743597685 +0100
@@ -1,4 +1,4 @@
-/* $Id: shmem.c,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
+/* $Id$
*
* Copyright (C) 1996 SpellCaster Telecommunications Inc.
*
-diff -rNu linux-2.4.29.old/drivers/isdn/sc/timer.c linux-2.4.29/drivers/isdn/sc/timer.c
---- linux-2.4.29.old/drivers/isdn/sc/timer.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/sc/timer.c 2005-03-22 15:06:49.575556152 +0100
+Index: linux-2.4.35.4/drivers/isdn/sc/timer.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/sc/timer.c 2007-12-15 05:19:40.898751724 +0100
++++ linux-2.4.35.4/drivers/isdn/sc/timer.c 2007-12-15 05:19:55.743597685 +0100
@@ -1,4 +1,4 @@
-/* $Id: timer.c,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
+/* $Id$
*
* Copyright (C) 1996 SpellCaster Telecommunications Inc.
*
-diff -rNu linux-2.4.29.old/drivers/isdn/tpam/tpam.h linux-2.4.29/drivers/isdn/tpam/tpam.h
---- linux-2.4.29.old/drivers/isdn/tpam/tpam.h 2005-03-22 14:47:57.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/tpam/tpam.h 2005-03-22 15:06:49.648545056 +0100
+Index: linux-2.4.35.4/drivers/isdn/tpam/tpam.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/tpam/tpam.h 2007-12-15 05:19:40.906752182 +0100
++++ linux-2.4.35.4/drivers/isdn/tpam/tpam.h 2007-12-15 05:19:55.743597685 +0100
@@ -1,4 +1,4 @@
-/* $Id: tpam.h,v 1.1.2.1 2001/11/20 14:19:37 kai Exp $
+/* $Id: tpam.h,v 1.3 2001/09/24 13:23:12 kai Exp $
*
* Turbo PAM ISDN driver for Linux. (Kernel Driver)
*
-diff -rNu linux-2.4.29.old/drivers/isdn/tpam/tpam_commands.c linux-2.4.29/drivers/isdn/tpam/tpam_commands.c
---- linux-2.4.29.old/drivers/isdn/tpam/tpam_commands.c 2005-03-22 14:47:57.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/tpam/tpam_commands.c 2005-03-22 15:06:49.664542624 +0100
+Index: linux-2.4.35.4/drivers/isdn/tpam/tpam_commands.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/tpam/tpam_commands.c 2007-12-15 05:19:40.914752638 +0100
++++ linux-2.4.35.4/drivers/isdn/tpam/tpam_commands.c 2007-12-15 05:19:55.743597685 +0100
@@ -1,4 +1,4 @@
-/* $Id: tpam_commands.c,v 1.1.2.1 2001/11/20 14:19:37 kai Exp $
+/* $Id: tpam_commands.c,v 1.3 2001/09/24 13:23:12 kai Exp $
*
* Turbo PAM ISDN driver for Linux. (Kernel Driver - ISDN commands)
*
-diff -rNu linux-2.4.29.old/drivers/isdn/tpam/tpam_crcpc.c linux-2.4.29/drivers/isdn/tpam/tpam_crcpc.c
---- linux-2.4.29.old/drivers/isdn/tpam/tpam_crcpc.c 2005-03-22 14:47:57.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/tpam/tpam_crcpc.c 2005-03-22 15:06:49.681540040 +0100
+Index: linux-2.4.35.4/drivers/isdn/tpam/tpam_crcpc.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/tpam/tpam_crcpc.c 2007-12-15 05:19:40.922753093 +0100
++++ linux-2.4.35.4/drivers/isdn/tpam/tpam_crcpc.c 2007-12-15 05:19:55.747597911 +0100
@@ -1,4 +1,4 @@
-/* $Id: tpam_crcpc.c,v 1.1.2.1 2001/11/20 14:19:37 kai Exp $
+/* $Id$
*
* Turbo PAM ISDN driver for Linux. (Kernel Driver - CRC encoding)
*
-diff -rNu linux-2.4.29.old/drivers/isdn/tpam/tpam_hdlc.c linux-2.4.29/drivers/isdn/tpam/tpam_hdlc.c
---- linux-2.4.29.old/drivers/isdn/tpam/tpam_hdlc.c 2005-03-22 14:47:57.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/tpam/tpam_hdlc.c 2005-03-22 15:06:49.702536848 +0100
+Index: linux-2.4.35.4/drivers/isdn/tpam/tpam_hdlc.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/tpam/tpam_hdlc.c 2007-12-15 05:19:40.926753322 +0100
++++ linux-2.4.35.4/drivers/isdn/tpam/tpam_hdlc.c 2007-12-15 05:19:55.747597911 +0100
@@ -1,4 +1,4 @@
-/* $Id: tpam_hdlc.c,v 1.1.2.1 2001/11/20 14:19:37 kai Exp $
+/* $Id: tpam_hdlc.c,v 1.3 2001/09/24 13:23:12 kai Exp $
*
* Turbo PAM ISDN driver for Linux. (Kernel Driver - HDLC encoding)
*
-diff -rNu linux-2.4.29.old/drivers/isdn/tpam/tpam_main.c linux-2.4.29/drivers/isdn/tpam/tpam_main.c
---- linux-2.4.29.old/drivers/isdn/tpam/tpam_main.c 2005-03-22 14:47:57.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/tpam/tpam_main.c 2005-03-22 15:06:49.717534568 +0100
+Index: linux-2.4.35.4/drivers/isdn/tpam/tpam_main.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/tpam/tpam_main.c 2007-12-15 05:19:40.934753777 +0100
++++ linux-2.4.35.4/drivers/isdn/tpam/tpam_main.c 2007-12-15 05:19:55.747597911 +0100
@@ -1,4 +1,4 @@
-/* $Id: tpam_main.c,v 1.1.2.2 2001/12/09 18:45:14 kai Exp $
+/* $Id$
};
static int __init tpam_init(void) {
-diff -rNu linux-2.4.29.old/drivers/isdn/tpam/tpam_memory.c linux-2.4.29/drivers/isdn/tpam/tpam_memory.c
---- linux-2.4.29.old/drivers/isdn/tpam/tpam_memory.c 2005-03-22 14:47:57.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/tpam/tpam_memory.c 2005-03-22 15:06:49.734531984 +0100
+Index: linux-2.4.35.4/drivers/isdn/tpam/tpam_memory.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/tpam/tpam_memory.c 2007-12-15 05:19:40.942754233 +0100
++++ linux-2.4.35.4/drivers/isdn/tpam/tpam_memory.c 2007-12-15 05:19:55.747597911 +0100
@@ -1,4 +1,4 @@
-/* $Id: tpam_memory.c,v 1.1.2.1 2001/11/20 14:19:37 kai Exp $
+/* $Id$
*
* Turbo PAM ISDN driver for Linux. (Kernel Driver - Board Memory Access)
*
-diff -rNu linux-2.4.29.old/drivers/isdn/tpam/tpam_nco.c linux-2.4.29/drivers/isdn/tpam/tpam_nco.c
---- linux-2.4.29.old/drivers/isdn/tpam/tpam_nco.c 2005-03-22 14:47:57.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/tpam/tpam_nco.c 2005-03-22 15:06:49.749529704 +0100
+Index: linux-2.4.35.4/drivers/isdn/tpam/tpam_nco.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/tpam/tpam_nco.c 2007-12-15 05:19:40.950754688 +0100
++++ linux-2.4.35.4/drivers/isdn/tpam/tpam_nco.c 2007-12-15 05:19:55.751598140 +0100
@@ -1,4 +1,4 @@
-/* $Id: tpam_nco.c,v 1.1.2.1 2001/11/20 14:19:37 kai Exp $
+/* $Id$
*
* Turbo PAM ISDN driver for Linux.
* (Kernel Driver - Low Level NCO Manipulation)
-diff -rNu linux-2.4.29.old/drivers/isdn/tpam/tpam_queues.c linux-2.4.29/drivers/isdn/tpam/tpam_queues.c
---- linux-2.4.29.old/drivers/isdn/tpam/tpam_queues.c 2005-03-22 14:47:57.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/tpam/tpam_queues.c 2005-03-22 15:06:49.764527424 +0100
+Index: linux-2.4.35.4/drivers/isdn/tpam/tpam_queues.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/tpam/tpam_queues.c 2007-12-15 05:19:40.962755372 +0100
++++ linux-2.4.35.4/drivers/isdn/tpam/tpam_queues.c 2007-12-15 05:19:55.751598140 +0100
@@ -1,4 +1,4 @@
-/* $Id: tpam_queues.c,v 1.1.2.1 2001/11/20 14:19:37 kai Exp $
+/* $Id$
spin_unlock(&card->lock);
printk(KERN_ERR "TurboPAM(tpam_irq): "
"waiting too long...\n");
-diff -rNu linux-2.4.29.old/include/linux/b1lli.h linux-2.4.29/include/linux/b1lli.h
---- linux-2.4.29.old/include/linux/b1lli.h 2005-03-22 14:47:32.000000000 +0100
-+++ linux-2.4.29/include/linux/b1lli.h 2005-03-22 15:06:49.881509640 +0100
+Index: linux-2.4.35.4/include/linux/b1lli.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/b1lli.h 2007-12-15 05:19:40.966755602 +0100
++++ linux-2.4.35.4/include/linux/b1lli.h 2007-12-15 05:19:55.751598140 +0100
@@ -1,4 +1,4 @@
-/* $Id: b1lli.h,v 1.8.8.3 2001/09/23 22:25:05 kai Exp $
+/* $Id$
*
* ISDN lowlevel-module for AVM B1-card.
*
-diff -rNu linux-2.4.29.old/include/linux/b1pcmcia.h linux-2.4.29/include/linux/b1pcmcia.h
---- linux-2.4.29.old/include/linux/b1pcmcia.h 2005-03-22 14:47:32.000000000 +0100
-+++ linux-2.4.29/include/linux/b1pcmcia.h 2005-03-22 15:06:49.862512528 +0100
+Index: linux-2.4.35.4/include/linux/b1pcmcia.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/b1pcmcia.h 2007-12-15 05:19:40.974756057 +0100
++++ linux-2.4.35.4/include/linux/b1pcmcia.h 2007-12-15 05:19:55.751598140 +0100
@@ -1,4 +1,4 @@
-/* $Id: b1pcmcia.h,v 1.1.8.2 2001/09/23 22:25:05 kai Exp $
+/* $Id$
*
* Exported functions of module b1pcmcia to be called by
* avm_cs card services module.
-diff -rNu linux-2.4.29.old/include/linux/capi.h linux-2.4.29/include/linux/capi.h
---- linux-2.4.29.old/include/linux/capi.h 2005-03-22 14:47:32.000000000 +0100
-+++ linux-2.4.29/include/linux/capi.h 2005-03-22 15:06:49.922503408 +0100
+Index: linux-2.4.35.4/include/linux/capi.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/capi.h 2007-12-15 05:19:40.982756512 +0100
++++ linux-2.4.35.4/include/linux/capi.h 2007-12-15 05:19:55.751598140 +0100
@@ -1,4 +1,4 @@
-/* $Id: capi.h,v 1.1.4.1 2001/11/20 14:19:38 kai Exp $
+/* $Id$
*
* CAPI 2.0 Interface for Linux
*
-diff -rNu linux-2.4.29.old/include/linux/concap.h linux-2.4.29/include/linux/concap.h
---- linux-2.4.29.old/include/linux/concap.h 2005-03-22 14:47:32.000000000 +0100
-+++ linux-2.4.29/include/linux/concap.h 2005-03-22 15:06:49.906505840 +0100
+Index: linux-2.4.35.4/include/linux/concap.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/concap.h 2007-12-15 05:19:40.990756968 +0100
++++ linux-2.4.35.4/include/linux/concap.h 2007-12-15 05:19:55.755598369 +0100
@@ -1,4 +1,4 @@
-/* $Id: concap.h,v 1.2.8.1 2001/09/23 22:25:05 kai Exp $
+/* $Id: concap.h,v 1.3 2001/09/24 13:23:13 kai Exp $
/* Stuff to support encapsulation protocols genericly. The encapsulation
protocol is processed at the uppermost layer of the network interface.
-diff -rNu linux-2.4.29.old/include/linux/hysdn_if.h linux-2.4.29/include/linux/hysdn_if.h
---- linux-2.4.29.old/include/linux/hysdn_if.h 2005-03-22 14:47:32.000000000 +0100
-+++ linux-2.4.29/include/linux/hysdn_if.h 2005-03-22 15:06:49.974495504 +0100
+Index: linux-2.4.35.4/include/linux/hysdn_if.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/hysdn_if.h 2007-12-15 05:19:40.998757423 +0100
++++ linux-2.4.35.4/include/linux/hysdn_if.h 2007-12-15 05:19:55.755598369 +0100
@@ -1,4 +1,4 @@
-/* $Id: hysdn_if.h,v 1.1.8.3 2001/09/23 22:25:05 kai Exp $
+/* $Id$
*
* Linux driver for HYSDN cards
* ioctl definitions shared by hynetmgr and driver.
-diff -rNu linux-2.4.29.old/include/linux/isdn/tpam.h linux-2.4.29/include/linux/isdn/tpam.h
---- linux-2.4.29.old/include/linux/isdn/tpam.h 2005-03-22 14:47:32.000000000 +0100
-+++ linux-2.4.29/include/linux/isdn/tpam.h 2005-03-22 15:06:49.947499608 +0100
+Index: linux-2.4.35.4/include/linux/isdn/tpam.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/isdn/tpam.h 2007-12-15 05:19:41.006757881 +0100
++++ linux-2.4.35.4/include/linux/isdn/tpam.h 2007-12-15 05:19:55.755598369 +0100
@@ -1,4 +1,4 @@
-/* $Id: tpam.h,v 1.1.2.1 2001/11/20 14:19:38 kai Exp $
+/* $Id$
*
* Turbo PAM ISDN driver for Linux. (Kernel Driver)
*
-diff -rNu linux-2.4.29.old/include/linux/isdn.h linux-2.4.29/include/linux/isdn.h
---- linux-2.4.29.old/include/linux/isdn.h 2005-03-22 14:47:31.000000000 +0100
-+++ linux-2.4.29/include/linux/isdn.h 2005-03-22 15:06:50.001491400 +0100
+Index: linux-2.4.35.4/include/linux/isdn.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/isdn.h 2007-12-15 05:19:41.014758337 +0100
++++ linux-2.4.35.4/include/linux/isdn.h 2007-12-15 05:19:55.755598369 +0100
@@ -1,4 +1,4 @@
-/* $Id: isdn.h,v 1.1.4.1 2001/11/20 14:19:38 kai Exp $
+/* $Id: isdn.h,v 1.125 2001/12/01 23:18:21 detabc Exp $
#endif /* __KERNEL__ */
-diff -rNu linux-2.4.29.old/include/linux/isdn_compat.h linux-2.4.29/include/linux/isdn_compat.h
---- linux-2.4.29.old/include/linux/isdn_compat.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/include/linux/isdn_compat.h 2005-03-22 15:06:50.017488968 +0100
+Index: linux-2.4.35.4/include/linux/isdn_compat.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/isdn_compat.h 2007-12-15 05:19:55.755598369 +0100
@@ -0,0 +1,261 @@
+/* $Id: isdn_compat.h,v 1.53 2001/09/24 13:23:13 kai Exp $
+ *
+
+#endif /* __KERNEL__ */
+#endif /* _LINUX_ISDN_COMPAT_H */
-diff -rNu linux-2.4.29.old/include/linux/isdn_divertif.h linux-2.4.29/include/linux/isdn_divertif.h
---- linux-2.4.29.old/include/linux/isdn_divertif.h 2005-03-22 14:47:32.000000000 +0100
-+++ linux-2.4.29/include/linux/isdn_divertif.h 2005-03-22 15:06:50.032486688 +0100
+Index: linux-2.4.35.4/include/linux/isdn_divertif.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/isdn_divertif.h 2007-12-15 05:19:41.026759021 +0100
++++ linux-2.4.35.4/include/linux/isdn_divertif.h 2007-12-15 05:19:55.759598598 +0100
@@ -1,4 +1,4 @@
-/* $Id: isdn_divertif.h,v 1.1.4.1 2001/11/20 14:19:38 kai Exp $
+/* $Id$
} isdn_divert_if;
/*********************/
-diff -rNu linux-2.4.29.old/include/linux/isdn_dwabc.h linux-2.4.29/include/linux/isdn_dwabc.h
---- linux-2.4.29.old/include/linux/isdn_dwabc.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/include/linux/isdn_dwabc.h 2005-03-22 15:06:50.048484256 +0100
+Index: linux-2.4.35.4/include/linux/isdn_dwabc.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/isdn_dwabc.h 2007-12-15 05:19:55.759598598 +0100
@@ -0,0 +1,84 @@
+/* $Id: isdn_dwabc.h,v 1.9 2001/09/26 20:32:08 detabc Exp $
+ *
+};
+
+#endif
-diff -rNu linux-2.4.29.old/include/linux/isdn_lzscomp.h linux-2.4.29/include/linux/isdn_lzscomp.h
---- linux-2.4.29.old/include/linux/isdn_lzscomp.h 2005-03-22 14:47:32.000000000 +0100
-+++ linux-2.4.29/include/linux/isdn_lzscomp.h 2005-03-22 15:06:50.089478024 +0100
+Index: linux-2.4.35.4/include/linux/isdn_lzscomp.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/isdn_lzscomp.h 2007-12-15 05:19:41.042759932 +0100
++++ linux-2.4.35.4/include/linux/isdn_lzscomp.h 2007-12-15 05:19:55.759598598 +0100
@@ -1,4 +1,4 @@
-/* $Id: isdn_lzscomp.h,v 1.1.4.1 2001/11/20 14:19:38 kai Exp $
+/* $Id$
*
* Header for isdn_lzscomp.c
* Concentrated here to not mess up half a dozen kernel headers with code
-diff -rNu linux-2.4.29.old/include/linux/isdn_ppp.h linux-2.4.29/include/linux/isdn_ppp.h
---- linux-2.4.29.old/include/linux/isdn_ppp.h 2005-03-22 14:47:31.000000000 +0100
-+++ linux-2.4.29/include/linux/isdn_ppp.h 2005-03-22 15:06:50.116473920 +0100
+Index: linux-2.4.35.4/include/linux/isdn_ppp.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/isdn_ppp.h 2007-12-15 05:19:41.046760161 +0100
++++ linux-2.4.35.4/include/linux/isdn_ppp.h 2007-12-15 05:19:55.759598598 +0100
@@ -8,6 +8,7 @@
#ifndef _LINUX_ISDN_PPP_H
#define _LINUX_ISDN_PPP_H
unsigned long debug;
struct isdn_ppp_compressor *compressor,*decompressor;
struct isdn_ppp_compressor *link_compressor,*link_decompressor;
-diff -rNu linux-2.4.29.old/include/linux/isdnif.h linux-2.4.29/include/linux/isdnif.h
---- linux-2.4.29.old/include/linux/isdnif.h 2005-03-22 14:47:31.000000000 +0100
-+++ linux-2.4.29/include/linux/isdnif.h 2005-03-22 15:06:50.132471488 +0100
+Index: linux-2.4.35.4/include/linux/isdnif.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/isdnif.h 2007-12-15 05:19:41.054760616 +0100
++++ linux-2.4.35.4/include/linux/isdnif.h 2007-12-15 05:19:55.759598598 +0100
@@ -1,4 +1,4 @@
-/* $Id: isdnif.h,v 1.1.4.1 2001/11/20 14:19:38 kai Exp $
+/* $Id: isdnif.h,v 1.43 2002/02/09 21:19:11 keil Exp $
/*
* Audio commands
-diff -rNu linux-2.4.29.old/include/linux/kernelcapi.h linux-2.4.29/include/linux/kernelcapi.h
---- linux-2.4.29.old/include/linux/kernelcapi.h 2005-03-22 14:47:32.000000000 +0100
-+++ linux-2.4.29/include/linux/kernelcapi.h 2005-03-22 15:06:50.147469208 +0100
+Index: linux-2.4.35.4/include/linux/kernelcapi.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/kernelcapi.h 2007-12-15 05:19:41.066761301 +0100
++++ linux-2.4.35.4/include/linux/kernelcapi.h 2007-12-15 05:19:55.759598598 +0100
@@ -1,12 +1,10 @@
-/* $Id: kernelcapi.h,v 1.1.4.2 2002/01/28 18:25:10 kai Exp $
+/*
-diff -rNu linux-2.4.29.old/drivers/Makefile linux-2.4.29/drivers/Makefile
---- linux-2.4.29.old/drivers/Makefile 2005-03-22 14:47:41.000000000 +0100
-+++ linux-2.4.29/drivers/Makefile 2005-03-22 15:15:20.012957872 +0100
+Index: linux-2.4.35.4/drivers/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/drivers/Makefile 2007-12-15 05:19:39.306660996 +0100
++++ linux-2.4.35.4/drivers/Makefile 2007-12-15 05:19:59.111789629 +0100
@@ -38,7 +38,7 @@
subdir-$(CONFIG_MD) += md
subdir-$(CONFIG_IEEE1394) += ieee1394
subdir-$(CONFIG_ATM) += atm
subdir-$(CONFIG_FC4) += fc4
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hfc_usb.c linux-2.4.29/drivers/isdn/hisax/hfc_usb.c
---- linux-2.4.29.old/drivers/isdn/hisax/hfc_usb.c 2005-03-22 15:13:58.233390256 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hfc_usb.c 2005-03-22 15:14:57.475384104 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hfc_usb.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/hfc_usb.c 2007-12-15 05:19:55.575588111 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/hfc_usb.c 2007-12-15 05:19:59.115789855 +0100
@@ -1,13 +1,11 @@
-/* $Id: hfc_usb.c,v 2.3 2001/07/06 21:30:11 werner Exp $
+/*
-diff -ur linux-2.4.32/drivers/usb/serial/pl2303.c linux-2.4.32.openwrt/drivers/usb/serial/pl2303.c
---- linux-2.4.32/drivers/usb/serial/pl2303.c 2005-06-01 02:56:56.000000000 +0200
-+++ linux-2.4.32.openwrt/drivers/usb/serial/pl2303.c 2005-11-18 12:22:23.000000000 +0100
+Index: linux-2.4.35.4/drivers/usb/serial/pl2303.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/usb/serial/pl2303.c 2007-12-15 05:19:39.266658716 +0100
++++ linux-2.4.35.4/drivers/usb/serial/pl2303.c 2007-12-15 05:19:59.351803306 +0100
@@ -78,6 +78,11 @@
{ USB_DEVICE(RADIOSHACK_VENDOR_ID, RADIOSHACK_PRODUCT_ID) },
{ USB_DEVICE(DCU10_VENDOR_ID, DCU10_PRODUCT_ID) },
{ } /* Terminating entry */
};
-diff -ur linux-2.4.32/drivers/usb/serial/pl2303.h linux-2.4.32.openwrt/drivers/usb/serial/pl2303.h
---- linux-2.4.32/drivers/usb/serial/pl2303.h 2004-02-18 14:36:31.000000000 +0100
-+++ linux-2.4.32.openwrt/drivers/usb/serial/pl2303.h 2005-11-18 12:23:38.000000000 +0100
+Index: linux-2.4.35.4/drivers/usb/serial/pl2303.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/usb/serial/pl2303.h 2007-12-15 05:19:39.278659401 +0100
++++ linux-2.4.35.4/drivers/usb/serial/pl2303.h 2007-12-15 05:19:59.355803533 +0100
@@ -41,3 +41,21 @@
#define SITECOM_VENDOR_ID 0x6189
-diff -urN linux-2.4.30.old/fs/hfsplus/super.c linux-2.4.30.dev/fs/hfsplus/super.c
---- linux-2.4.30.old/fs/hfsplus/super.c 2003-08-25 13:44:43.000000000 +0200
-+++ linux-2.4.30.dev/fs/hfsplus/super.c 2005-04-27 19:54:40.000000000 +0200
+Index: linux-2.4.35.4/fs/hfsplus/super.c
+===================================================================
+--- linux-2.4.35.4.orig/fs/hfsplus/super.c 2007-12-15 05:19:39.238657121 +0100
++++ linux-2.4.35.4/fs/hfsplus/super.c 2007-12-15 05:19:59.575816071 +0100
@@ -240,8 +240,7 @@
if (!(*flags & MS_RDONLY)) {
struct hfsplus_vh *vhdr = HFSPLUS_SB(sb).s_vhdr;
-diff -Nur linux-2.4.30/arch/mips/kernel/signal.c linux-2.4.30.openwrt/arch/mips/kernel/signal.c
---- linux-2.4.30/arch/mips/kernel/signal.c 2005-07-02 13:00:13.000000000 +0200
-+++ linux-2.4.30.openwrt/arch/mips/kernel/signal.c 2005-07-02 13:00:49.000000000 +0200
+Index: linux-2.4.35.4/arch/mips/kernel/signal.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/kernel/signal.c 2007-12-15 05:19:39.146651877 +0100
++++ linux-2.4.35.4/arch/mips/kernel/signal.c 2007-12-15 05:19:59.787828152 +0100
@@ -6,8 +6,10 @@
* Copyright (C) 1991, 1992 Linus Torvalds
* Copyright (C) 1994 - 1999 Ralf Baechle
{
sigset_t *unewset, saveset, newset;
size_t sigsetsize;
-diff -Nur linux-2.4.30/arch/mips/kernel/syscall.c linux-2.4.30.openwrt/arch/mips/kernel/syscall.c
---- linux-2.4.30/arch/mips/kernel/syscall.c 2005-07-02 13:00:13.000000000 +0200
-+++ linux-2.4.30.openwrt/arch/mips/kernel/syscall.c 2005-07-02 13:00:49.000000000 +0200
+Index: linux-2.4.35.4/arch/mips/kernel/syscall.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/kernel/syscall.c 2007-12-15 05:19:39.154652335 +0100
++++ linux-2.4.35.4/arch/mips/kernel/syscall.c 2007-12-15 05:19:59.795828608 +0100
@@ -5,6 +5,7 @@
*
* Copyright (C) 1995 - 2000 by Ralf Baechle
{
unsigned long clone_flags;
unsigned long newsp;
-diff -Nur linux-2.4.30/arch/mips/ld.script.in linux-2.4.30.openwrt/arch/mips/ld.script.in
---- linux-2.4.30/arch/mips/ld.script.in 2005-07-02 13:00:22.000000000 +0200
-+++ linux-2.4.30.openwrt/arch/mips/ld.script.in 2005-07-02 13:00:42.000000000 +0200
+Index: linux-2.4.35.4/arch/mips/ld.script.in
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/ld.script.in 2007-12-15 05:19:39.162652791 +0100
++++ linux-2.4.35.4/arch/mips/ld.script.in 2007-12-15 05:19:59.799828834 +0100
@@ -9,6 +9,7 @@
{
_ftext = . ;
*(.rodata)
*(.rodata.*)
*(.rodata1)
-diff -Nur linux-2.4.30/arch/mips64/kernel/signal.c linux-2.4.30.openwrt/arch/mips64/kernel/signal.c
---- linux-2.4.30/arch/mips64/kernel/signal.c 2005-07-02 13:00:13.000000000 +0200
-+++ linux-2.4.30.openwrt/arch/mips64/kernel/signal.c 2005-07-02 13:00:49.000000000 +0200
+Index: linux-2.4.35.4/arch/mips64/kernel/signal.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/kernel/signal.c 2007-12-15 05:19:39.170653246 +0100
++++ linux-2.4.35.4/arch/mips64/kernel/signal.c 2007-12-15 05:19:59.803829063 +0100
@@ -6,8 +6,10 @@
* Copyright (C) 1991, 1992 Linus Torvalds
* Copyright (C) 1994 - 2000 Ralf Baechle
{
sigset_t *unewset, saveset, newset;
size_t sigsetsize;
-diff -Nur linux-2.4.30/arch/mips64/kernel/signal32.c linux-2.4.30.openwrt/arch/mips64/kernel/signal32.c
---- linux-2.4.30/arch/mips64/kernel/signal32.c 2005-07-02 13:00:13.000000000 +0200
-+++ linux-2.4.30.openwrt/arch/mips64/kernel/signal32.c 2005-07-02 13:00:49.000000000 +0200
+Index: linux-2.4.35.4/arch/mips64/kernel/signal32.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/kernel/signal32.c 2007-12-15 05:19:39.174653475 +0100
++++ linux-2.4.35.4/arch/mips64/kernel/signal32.c 2007-12-15 05:19:59.807829292 +0100
@@ -6,7 +6,9 @@
* Copyright (C) 1991, 1992 Linus Torvalds
* Copyright (C) 1994 - 2000 Ralf Baechle
{
sigset32_t *uset;
sigset_t newset, saveset;
-diff -Nur linux-2.4.30/arch/mips64/kernel/syscall.c linux-2.4.30.openwrt/arch/mips64/kernel/syscall.c
---- linux-2.4.30/arch/mips64/kernel/syscall.c 2005-07-02 13:00:13.000000000 +0200
-+++ linux-2.4.30.openwrt/arch/mips64/kernel/syscall.c 2005-07-02 13:00:49.000000000 +0200
+Index: linux-2.4.35.4/arch/mips64/kernel/syscall.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/kernel/syscall.c 2007-12-15 05:19:39.186654157 +0100
++++ linux-2.4.35.4/arch/mips64/kernel/syscall.c 2007-12-15 05:19:59.811829522 +0100
@@ -6,7 +6,9 @@
* Copyright (C) 1995 - 2000, 2001 by Ralf Baechle
* Copyright (C) 1999, 2000 Silicon Graphics, Inc.
{
unsigned long clone_flags;
unsigned long newsp;
-diff -Nur linux-2.4.30/include/asm-mips/ptrace.h linux-2.4.30.openwrt/include/asm-mips/ptrace.h
---- linux-2.4.30/include/asm-mips/ptrace.h 2005-07-02 13:00:13.000000000 +0200
-+++ linux-2.4.30.openwrt/include/asm-mips/ptrace.h 2005-07-02 13:00:49.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips/ptrace.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/ptrace.h 2007-12-15 05:19:39.194654615 +0100
++++ linux-2.4.35.4/include/asm-mips/ptrace.h 2007-12-15 05:19:59.815829748 +0100
@@ -4,6 +4,7 @@
* for more details.
*
#endif /* !__ASSEMBLY__ */
/* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */
-diff -Nur linux-2.4.30/include/asm-mips64/ptrace.h linux-2.4.30.openwrt/include/asm-mips64/ptrace.h
---- linux-2.4.30/include/asm-mips64/ptrace.h 2005-07-02 13:00:13.000000000 +0200
-+++ linux-2.4.30.openwrt/include/asm-mips64/ptrace.h 2005-07-02 13:00:49.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips64/ptrace.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips64/ptrace.h 2007-12-15 05:19:39.202655071 +0100
++++ linux-2.4.35.4/include/asm-mips64/ptrace.h 2007-12-15 05:19:59.815829748 +0100
@@ -5,6 +5,7 @@
*
* Copyright (C) 1994, 95, 96, 97, 98, 99, 2000 by Ralf Baechle
-diff -ur linux-2.4.30.dev/drivers/usb/host/ehci-q.c linux-tmp/drivers/usb/host/ehci-q.c
---- linux-2.4.30.dev/drivers/usb/host/ehci-q.c 2005-01-19 15:10:07.000000000 +0100
-+++ linux-tmp/drivers/usb/host/ehci-q.c 2005-03-30 05:11:12.000000000 +0200
-@@ -783,6 +765,11 @@
+Index: linux-2.4.35.4/drivers/usb/host/ehci-q.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/usb/host/ehci-q.c 2007-12-15 05:19:39.114650056 +0100
++++ linux-2.4.35.4/drivers/usb/host/ehci-q.c 2007-12-15 05:20:00.107846389 +0100
+@@ -782,6 +782,11 @@
if (!(cmd & CMD_ASE)) {
/* in case a clear of CMD_ASE didn't take yet */
(void) handshake (&ehci->regs->status, STS_ASS, 0, 150);
-diff -urN linux.old/Makefile linux.dev/Makefile
---- linux.old/Makefile 2005-08-26 13:41:41.689634168 +0200
-+++ linux.dev/Makefile 2005-08-26 13:44:34.233403528 +0200
-@@ -354,7 +354,7 @@
+Index: linux-2.4.35.4/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/Makefile 2007-12-15 05:19:51.427351715 +0100
++++ linux-2.4.35.4/Makefile 2007-12-15 05:20:00.315858242 +0100
+@@ -362,7 +362,7 @@
@rm -f .ver1
include/linux/version.h: ./Makefile
(echo KERNELRELEASE \"$(KERNELRELEASE)\" exceeds $(uts_len) characters >&2; false)
@echo \#define UTS_RELEASE \"$(KERNELRELEASE)\" > .ver
@echo \#define LINUX_VERSION_CODE `expr $(VERSION) \\* 65536 + $(PATCHLEVEL) \\* 256 + $(SUBLEVEL)` >> .ver
-@@ -509,7 +509,7 @@
+@@ -500,7 +500,7 @@
ifdef CONFIG_MODVERSIONS
$(MAKE) update-modverfile
endif
scripts/mkdep -- init/*.c > .depend
ifdef CONFIG_MODVERSIONS
---- linux.old/Rules.make 2005-08-31 00:37:34.363109288 +0200
-+++ linux.dev/Rules.make 2005-08-31 13:59:20.140676296 +0200
+Index: linux-2.4.35.4/Rules.make
+===================================================================
+--- linux-2.4.35.4.orig/Rules.make 2007-12-15 05:19:39.078648003 +0100
++++ linux-2.4.35.4/Rules.make 2007-12-15 05:20:00.315858242 +0100
@@ -126,7 +126,7 @@
# This make dependencies quickly
#
---- linux-2.4.30/drivers/char/serial.c 2005-06-29 20:44:46.000000000 +0200
-+++ linux-2.4.30.serial/drivers/char/serial.c 2005-06-29 21:15:12.000000000 +0200
-@@ -5455,18 +5455,6 @@
+Index: linux-2.4.35.4/drivers/char/serial.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/char/serial.c 2007-12-15 05:19:44.934981737 +0100
++++ linux-2.4.35.4/drivers/char/serial.c 2007-12-15 05:20:00.539871010 +0100
+@@ -5458,18 +5458,6 @@
sizeof(struct rs_multiport_struct));
#endif
}
---- linux.old/net/sched/sch_htb.c 2005-11-15 14:09:41.548066000 +0100
-+++ linux.dev/net/sched/sch_htb.c 2005-11-15 14:08:34.000000000 +0100
+Index: linux-2.4.35.4/net/sched/sch_htb.c
+===================================================================
+--- linux-2.4.35.4.orig/net/sched/sch_htb.c 2007-12-15 05:19:39.010644128 +0100
++++ linux-2.4.35.4/net/sched/sch_htb.c 2007-12-15 05:20:00.751883092 +0100
@@ -369,7 +369,7 @@
struct list_head *l;
list_for_each (l,q->hash+i) {
---- linux.old/net/sched/sch_htb.c 2005-11-15 14:09:41.548066000 +0100
-+++ linux.dev/net/sched/sch_htb.c 2005-11-15 14:08:34.000000000 +0100
+Index: linux-2.4.35.4/net/sched/sch_htb.c
+===================================================================
+--- linux-2.4.35.4.orig/net/sched/sch_htb.c 2007-12-15 05:20:00.751883092 +0100
++++ linux-2.4.35.4/net/sched/sch_htb.c 2007-12-15 05:20:00.959894945 +0100
@@ -74,7 +74,7 @@
#define HTB_EWMAC 2 /* rate average over HTB_EWMAC*HTB_HSIZE sec */
#define HTB_DEBUG 1 /* compile debugging support (activated by tc tool) */
-diff -rNu linux-2.4.30/drivers/sound/sound_core.c linux-2.4.30.new/drivers/sound/sound_core.c
---- linux-2.4.30/drivers/sound/sound_core.c 2001-10-01 05:26:08.000000000 +1000
-+++ linux-2.4.30.new/drivers/sound/sound_core.c 2005-08-27 22:52:55.061719968 +1000
+Index: linux-2.4.35.4/drivers/sound/sound_core.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/sound/sound_core.c 2007-12-15 05:19:38.946640480 +0100
++++ linux-2.4.35.4/drivers/sound/sound_core.c 2007-12-15 05:20:01.199908622 +0100
@@ -174,9 +174,9 @@
}
-diff -urN linux.old/include/linux/atmdev.h linux.dev/include/linux/atmdev.h
---- linux.old/include/linux/atmdev.h 2005-11-17 12:51:55.883585000 +0100
-+++ linux.dev/include/linux/atmdev.h 2005-11-17 13:49:22.012671000 +0100
-@@ -408,6 +408,7 @@
+Index: linux-2.4.35.4/include/linux/atmdev.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/atmdev.h 2007-12-15 05:19:38.898637744 +0100
++++ linux-2.4.35.4/include/linux/atmdev.h 2007-12-15 05:20:02.816000717 +0100
+@@ -400,6 +400,7 @@
struct atm_dev *atm_dev_register(const char *type,const struct atmdev_ops *ops,
int number,atm_dev_flags_t *flags); /* number == -1: pick first available */
struct atm_dev *atm_dev_lookup(int number);
void atm_dev_deregister(struct atm_dev *dev);
void shutdown_atm_dev(struct atm_dev *dev);
void vcc_insert_socket(struct sock *sk);
-diff -urN linux.old/net/atm/resources.c linux.dev/net/atm/resources.c
---- linux.old/net/atm/resources.c 2003-11-28 19:26:21.000000000 +0100
-+++ linux.dev/net/atm/resources.c 2005-11-17 14:27:26.514267750 +0100
+Index: linux-2.4.35.4/net/atm/resources.c
+===================================================================
+--- linux-2.4.35.4.orig/net/atm/resources.c 2007-12-15 05:19:38.910638429 +0100
++++ linux-2.4.35.4/net/atm/resources.c 2007-12-15 05:20:02.824001175 +0100
@@ -10,6 +10,7 @@
#include <linux/sonet.h>
#include <linux/kernel.h> /* for barrier */
-diff -ruN linux-2.4.32-old/lib/string.c linux-2.4.32-new/lib/string.c
---- linux-2.4.32-old/lib/string.c 2004-11-17 12:54:22.000000000 +0100
-+++ linux-2.4.32-new/lib/string.c 2006-01-17 14:41:17.000000000 +0100
+Index: linux-2.4.35.4/lib/string.c
+===================================================================
+--- linux-2.4.35.4.orig/lib/string.c 2007-12-15 05:19:38.866635920 +0100
++++ linux-2.4.35.4/lib/string.c 2007-12-15 05:20:03.080015763 +0100
@@ -50,6 +50,7 @@
}
return (int)c1 - (int)c2;
-diff -urN linux-2.4.32/net/atm/br2684.c linux-2.4.32.new/net/atm/br2684.c
---- linux-2.4.32/net/atm/br2684.c 2004-08-08 01:26:06.000000000 +0200
-+++ linux-2.4.32.new/net/atm/br2684.c 2006-02-06 18:59:40.000000000 +0100
+Index: linux-2.4.35.4/net/atm/br2684.c
+===================================================================
+--- linux-2.4.35.4.orig/net/atm/br2684.c 2007-12-15 05:19:38.818633185 +0100
++++ linux-2.4.35.4/net/atm/br2684.c 2007-12-15 05:20:03.656048591 +0100
@@ -55,36 +55,55 @@
#define skb_debug(skb) do {} while (0)
#endif
while (!list_empty(&br2684_devs)) {
brdev = list_entry_brdev(br2684_devs.next);
unregister_netdev(&brdev->net_dev);
-diff -urN linux-2.4.32/net/atm/common.c linux-2.4.32.new/net/atm/common.c
---- linux-2.4.32/net/atm/common.c 2004-02-18 14:36:32.000000000 +0100
-+++ linux-2.4.32.new/net/atm/common.c 2006-02-06 17:26:52.000000000 +0100
+Index: linux-2.4.35.4/net/atm/common.c
+===================================================================
+--- linux-2.4.35.4.orig/net/atm/common.c 2007-12-15 05:19:38.826633641 +0100
++++ linux-2.4.35.4/net/atm/common.c 2007-12-15 05:20:03.656048591 +0100
@@ -158,6 +158,7 @@
}
#ifdef CONFIG_ATM_BR2684_MODULE
#endif
#endif
---- linux-2.4.32/include/linux/atmbr2684.h 2002-08-03 02:39:45.000000000 +0200
-+++ linux-2.4.32.new/include/linux/atmbr2684.h 2006-02-06 19:01:24.000000000 +0100
+Index: linux-2.4.35.4/include/linux/atmbr2684.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/atmbr2684.h 2007-12-15 05:19:38.838634325 +0100
++++ linux-2.4.35.4/include/linux/atmbr2684.h 2007-12-15 05:20:03.668049273 +0100
@@ -3,6 +3,7 @@
#include <linux/atm.h>
-diff -ur linux.old/fs/jffs2/build.c linux.dev/fs/jffs2/build.c
---- linux.old/fs/jffs2/build.c 2003-06-13 16:51:37.000000000 +0200
-+++ linux.dev/fs/jffs2/build.c 2006-06-23 22:15:21.000000000 +0200
+Index: linux-2.4.35.4/fs/jffs2/build.c
+===================================================================
+--- linux-2.4.35.4.orig/fs/jffs2/build.c 2007-12-15 05:19:38.778630906 +0100
++++ linux-2.4.35.4/fs/jffs2/build.c 2007-12-15 05:20:03.936064549 +0100
@@ -31,6 +31,10 @@
* provisions above, a recipient may use your version of this file
* under either the RHEPL or the GPL.
D1(printk(KERN_DEBUG "Scanned flash completely\n"));
/* Now build the data map for each inode, marking obsoleted nodes
as such, and also increase nlink of any children. */
-diff -ur linux.old/fs/jffs2/scan.c linux.dev/fs/jffs2/scan.c
---- linux.old/fs/jffs2/scan.c 2006-06-23 21:57:32.000000000 +0200
-+++ linux.dev/fs/jffs2/scan.c 2006-06-23 22:01:35.000000000 +0200
+Index: linux-2.4.35.4/fs/jffs2/scan.c
+===================================================================
+--- linux-2.4.35.4.orig/fs/jffs2/scan.c 2007-12-15 05:19:38.786631361 +0100
++++ linux-2.4.35.4/fs/jffs2/scan.c 2007-12-15 05:20:03.948065230 +0100
@@ -31,6 +31,10 @@
* provisions above, a recipient may use your version of this file
* under either the RHEPL or the GPL.
-diff -ur linux.old/drivers/scsi/hosts.c linux.dev/drivers/scsi/hosts.c
---- linux.old/drivers/scsi/hosts.c 2003-06-13 16:51:36.000000000 +0200
-+++ linux.dev/drivers/scsi/hosts.c 2006-07-30 12:34:30.000000000 +0200
+Index: linux-2.4.35.4/drivers/scsi/hosts.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/scsi/hosts.c 2007-12-15 05:19:38.686625662 +0100
++++ linux-2.4.35.4/drivers/scsi/hosts.c 2007-12-15 05:20:04.720109227 +0100
@@ -107,8 +107,21 @@
if (shn) shn->host_registered = 0;
/* else {} : This should not happen, we should panic here... */
kfree((char *) sh);
}
-diff -ur linux.old/drivers/usb/hcd.c linux.dev/drivers/usb/hcd.c
---- linux.old/drivers/usb/hcd.c 2004-04-14 15:05:32.000000000 +0200
-+++ linux.dev/drivers/usb/hcd.c 2006-07-30 11:49:06.000000000 +0200
+Index: linux-2.4.35.4/drivers/usb/hcd.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/usb/hcd.c 2007-12-15 05:19:38.694626120 +0100
++++ linux-2.4.35.4/drivers/usb/hcd.c 2007-12-15 05:20:04.724109453 +0100
@@ -1105,7 +1105,8 @@
break;
case PIPE_BULK:
urb->transfer_dma = pci_map_single (
hcd->pdev,
urb->transfer_buffer,
-diff -ur linux.old/drivers/usb/host/ehci-hcd.c linux.dev/drivers/usb/host/ehci-hcd.c
---- linux.old/drivers/usb/host/ehci-hcd.c 2006-07-30 11:31:57.000000000 +0200
-+++ linux.dev/drivers/usb/host/ehci-hcd.c 2006-07-30 11:48:14.000000000 +0200
+Index: linux-2.4.35.4/drivers/usb/host/ehci-hcd.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/usb/host/ehci-hcd.c 2007-12-15 05:19:38.702626576 +0100
++++ linux-2.4.35.4/drivers/usb/host/ehci-hcd.c 2007-12-15 05:20:04.728109682 +0100
@@ -399,6 +399,27 @@
ehci_mem_cleanup (ehci);
return retval;
writel (INTR_MASK, &ehci->regs->intr_enable);
writel (ehci->periodic_dma, &ehci->regs->frame_list);
-diff -ur linux.old/drivers/usb/host/ehci-q.c linux.dev/drivers/usb/host/ehci-q.c
---- linux.old/drivers/usb/host/ehci-q.c 2006-07-30 11:31:57.000000000 +0200
-+++ linux.dev/drivers/usb/host/ehci-q.c 2006-07-30 12:10:15.000000000 +0200
+Index: linux-2.4.35.4/drivers/usb/host/ehci-q.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/usb/host/ehci-q.c 2007-12-15 05:20:00.107846389 +0100
++++ linux-2.4.35.4/drivers/usb/host/ehci-q.c 2007-12-15 05:20:04.728109682 +0100
@@ -791,6 +791,8 @@
writel (cmd, &ehci->regs->command);
ehci->hcd.state = USB_STATE_RUNNING;
}
}
-diff -ur linux.old/drivers/usb/host/usb-uhci.c linux.dev/drivers/usb/host/usb-uhci.c
---- linux.old/drivers/usb/host/usb-uhci.c 2004-11-17 12:54:21.000000000 +0100
-+++ linux.dev/drivers/usb/host/usb-uhci.c 2006-07-30 12:10:16.000000000 +0200
+Index: linux-2.4.35.4/drivers/usb/host/usb-uhci.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/usb/host/usb-uhci.c 2007-12-15 05:19:38.714627260 +0100
++++ linux-2.4.35.4/drivers/usb/host/usb-uhci.c 2007-12-15 05:20:04.728109682 +0100
@@ -3034,6 +3034,21 @@
pci_set_master(dev);
/* Search for the IO base address.. */
for (i = 0; i < 6; i++) {
-diff -ur linux.old/drivers/usb/storage/transport.c linux.dev/drivers/usb/storage/transport.c
---- linux.old/drivers/usb/storage/transport.c 2005-04-04 03:42:19.000000000 +0200
-+++ linux.dev/drivers/usb/storage/transport.c 2006-07-30 12:22:56.000000000 +0200
+Index: linux-2.4.35.4/drivers/usb/storage/transport.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/usb/storage/transport.c 2007-12-15 05:19:38.722627715 +0100
++++ linux-2.4.35.4/drivers/usb/storage/transport.c 2007-12-15 05:20:04.732109911 +0100
@@ -54,6 +54,22 @@
#include <linux/sched.h>
#include <linux/errno.h>
}
}
else
-diff -ur linux.old/drivers/usb/storage/transport.h linux.dev/drivers/usb/storage/transport.h
---- linux.old/drivers/usb/storage/transport.h 2003-08-25 13:44:42.000000000 +0200
-+++ linux.dev/drivers/usb/storage/transport.h 2006-07-30 12:10:16.000000000 +0200
+Index: linux-2.4.35.4/drivers/usb/storage/transport.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/usb/storage/transport.h 2007-12-15 05:19:38.730628171 +0100
++++ linux-2.4.35.4/drivers/usb/storage/transport.h 2007-12-15 05:20:04.732109911 +0100
@@ -127,6 +127,16 @@
#define US_BULK_TRANSFER_ABORTED 3 /* transfer canceled */
* Transport return codes
*/
-diff -ur linux.old/drivers/usb/storage/usb.h linux.dev/drivers/usb/storage/usb.h
---- linux.old/drivers/usb/storage/usb.h 2005-04-04 03:42:20.000000000 +0200
-+++ linux.dev/drivers/usb/storage/usb.h 2006-07-30 12:11:06.000000000 +0200
+Index: linux-2.4.35.4/drivers/usb/storage/usb.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/usb/storage/usb.h 2007-12-15 05:19:38.738628626 +0100
++++ linux-2.4.35.4/drivers/usb/storage/usb.h 2007-12-15 05:20:04.736110140 +0100
@@ -111,6 +111,60 @@
typedef void (*proto_cmnd)(Scsi_Cmnd*, struct us_data*);
typedef void (*extra_data_destructor)(void *); /* extra data destructor */
/* the semaphore for sleeping the control thread */
struct semaphore sema; /* to sleep thread on */
-diff -ur linux.old/include/linux/usb.h linux.dev/include/linux/usb.h
---- linux.old/include/linux/usb.h 2004-11-17 12:54:22.000000000 +0100
-+++ linux.dev/include/linux/usb.h 2006-07-30 12:19:19.000000000 +0200
+Index: linux-2.4.35.4/include/linux/usb.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/usb.h 2007-12-15 05:19:38.750629310 +0100
++++ linux-2.4.35.4/include/linux/usb.h 2007-12-15 05:20:04.740110367 +0100
@@ -483,6 +483,8 @@
#define URB_NO_INTERRUPT 0x0080 /* HINT: no non-error interrupt needed */
/* ... less overhead for QUEUE_BULK */
---- linux-2.4.32/drivers/net/tun.c 2006-10-28 18:21:45.000000000 +0100
-+++ new.linux-2.4.32/drivers/net/tun.c 2006-10-28 18:50:53.000000000 +0100
-@@ -185,22 +185,31 @@
- {
- struct tun_pi pi = { 0, __constant_htons(ETH_P_IP) };
- struct sk_buff *skb;
-- size_t len = count;
-+ size_t len = count, align = 0;
-
- if (!(tun->flags & TUN_NO_PI)) {
- if ((len -= sizeof(pi)) > count)
- return -EINVAL;
-
-- memcpy_fromiovec((void *)&pi, iv, sizeof(pi));
-+ if(memcpy_fromiovec((void *)&pi, iv, sizeof(pi)))
-+ return -EFAULT;
- }
--
-- if (!(skb = alloc_skb(len + 2, GFP_KERNEL))) {
-+
-+ if ((tun->flags & TUN_TYPE_MASK) == TUN_TAP_DEV)
-+ align = NET_IP_ALIGN;
-+
-+ if (!(skb = alloc_skb(len + align, GFP_KERNEL))) {
- tun->stats.rx_dropped++;
- return -ENOMEM;
- }
-
-- skb_reserve(skb, 2);
-- memcpy_fromiovec(skb_put(skb, len), iv, len);
-+ if (align)
-+ skb_reserve(skb, align);
-+ if (memcpy_fromiovec(skb_put(skb, len), iv, len)) {
-+ tun->stats.rx_dropped++;
-+ kfree_skb(skb);
-+ return -EFAULT;
-+ }
-
- skb->dev = &tun->dev;
- switch (tun->flags & TUN_TYPE_MASK) {
-@@ -271,7 +271,8 @@
- pi.flags |= TUN_PKT_STRIP;
- }
-
-- memcpy_toiovec(iv, (void *) &pi, sizeof(pi));
-+ if(memcpy_toiovec(iv, (void *) &pi, sizeof(pi)))
-+ return -EFAULT;
- total += sizeof(pi);
- }
-
---- linux-2.4.32/include/linux/skbuff.h 2006-10-28 19:31:31.000000000 +0100
-+++ new.linux-2.4.32/include/linux/skbuff.h 2006-10-28 19:29:27.000000000 +0100
-@@ -918,6 +918,49 @@
+Index: linux-2.4.35.4/include/linux/skbuff.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/skbuff.h 2007-12-15 05:19:38.654623841 +0100
++++ linux-2.4.35.4/include/linux/skbuff.h 2007-12-15 05:20:05.060128604 +0100
+@@ -912,6 +912,49 @@
skb->tail+=len;
}
extern int ___pskb_trim(struct sk_buff *skb, unsigned int len, int realloc);
static inline void __skb_trim(struct sk_buff *skb, unsigned int len)
+Index: linux-2.4.35.4/drivers/net/tun.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/net/tun.c 2007-12-15 05:19:38.642623156 +0100
++++ linux-2.4.35.4/drivers/net/tun.c 2007-12-15 05:20:05.056128377 +0100
+@@ -185,22 +185,31 @@
+ {
+ struct tun_pi pi = { 0, __constant_htons(ETH_P_IP) };
+ struct sk_buff *skb;
+- size_t len = count;
++ size_t len = count, align = 0;
+
+ if (!(tun->flags & TUN_NO_PI)) {
+ if ((len -= sizeof(pi)) > count)
+ return -EINVAL;
+
+- memcpy_fromiovec((void *)&pi, iv, sizeof(pi));
++ if(memcpy_fromiovec((void *)&pi, iv, sizeof(pi)))
++ return -EFAULT;
+ }
+-
+- if (!(skb = alloc_skb(len + 2, GFP_KERNEL))) {
++
++ if ((tun->flags & TUN_TYPE_MASK) == TUN_TAP_DEV)
++ align = NET_IP_ALIGN;
++
++ if (!(skb = alloc_skb(len + align, GFP_KERNEL))) {
+ tun->stats.rx_dropped++;
+ return -ENOMEM;
+ }
+
+- skb_reserve(skb, 2);
+- memcpy_fromiovec(skb_put(skb, len), iv, len);
++ if (align)
++ skb_reserve(skb, align);
++ if (memcpy_fromiovec(skb_put(skb, len), iv, len)) {
++ tun->stats.rx_dropped++;
++ kfree_skb(skb);
++ return -EFAULT;
++ }
+
+ skb->dev = &tun->dev;
+ switch (tun->flags & TUN_TYPE_MASK) {
+@@ -271,7 +280,8 @@
+ pi.flags |= TUN_PKT_STRIP;
+ }
+
+- memcpy_toiovec(iv, (void *) &pi, sizeof(pi));
++ if(memcpy_toiovec(iv, (void *) &pi, sizeof(pi)))
++ return -EFAULT;
+ total += sizeof(pi);
+ }
+
-diff -urN linux.old/fs/Config.in linux.dev/fs/Config.in
---- linux.old/fs/Config.in 2006-10-30 03:44:06.000000000 +0100
-+++ linux.dev/fs/Config.in 2006-10-30 03:42:09.000000000 +0100
-@@ -70,6 +70,7 @@
+Index: linux-2.4.35.4/fs/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/fs/Config.in 2007-12-15 05:19:52.319402550 +0100
++++ linux-2.4.35.4/fs/Config.in 2007-12-15 05:20:05.284141367 +0100
+@@ -77,6 +77,7 @@
dep_mbool ' JFS statistics' CONFIG_JFS_STATISTICS $CONFIG_JFS_FS
tristate 'Minix fs support' CONFIG_MINIX_FS
tristate 'FreeVxFS file system support (VERITAS VxFS(TM) compatible)' CONFIG_VXFS_FS
tristate 'NTFS file system support (read only)' CONFIG_NTFS_FS
-diff -urN linux.old/fs/Makefile linux.dev/fs/Makefile
---- linux.old/fs/Makefile 2006-10-30 03:44:06.000000000 +0100
-+++ linux.dev/fs/Makefile 2006-10-30 03:42:09.000000000 +0100
+Index: linux-2.4.35.4/fs/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/fs/Makefile 2007-12-15 05:19:52.319402550 +0100
++++ linux-2.4.35.4/fs/Makefile 2007-12-15 05:20:05.288141596 +0100
@@ -31,6 +31,7 @@
subdir-$(CONFIG_CODA_FS) += coda
subdir-$(CONFIG_INTERMEZZO_FS) += intermezzo
subdir-$(CONFIG_FAT_FS) += fat
subdir-$(CONFIG_UMSDOS_FS) += umsdos
subdir-$(CONFIG_MSDOS_FS) += msdos
-diff -urN linux.old/fs/mini_fo/aux.c linux.dev/fs/mini_fo/aux.c
---- linux.old/fs/mini_fo/aux.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/fs/mini_fo/aux.c 2006-10-30 03:42:09.000000000 +0100
+Index: linux-2.4.35.4/fs/mini_fo/aux.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/mini_fo/aux.c 2007-12-15 05:20:05.296142055 +0100
@@ -0,0 +1,580 @@
+/*
+ * Copyright (c) 1997-2003 Erez Zadok
+
+#endif /* unused */
+
-diff -urN linux.old/fs/mini_fo/ChangeLog linux.dev/fs/mini_fo/ChangeLog
---- linux.old/fs/mini_fo/ChangeLog 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/fs/mini_fo/ChangeLog 2006-10-30 03:42:09.000000000 +0100
+Index: linux-2.4.35.4/fs/mini_fo/ChangeLog
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/mini_fo/ChangeLog 2007-12-15 05:20:05.296142055 +0100
@@ -0,0 +1,281 @@
+2006-01-24 Markus Klotzbuecher <mk@mary.denx.de>
+
+ * Implementation of mini_fo_mknod and mini_fo_rename, support
+ for device files.
+
-diff -urN linux.old/fs/mini_fo/dentry.c linux.dev/fs/mini_fo/dentry.c
---- linux.old/fs/mini_fo/dentry.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/fs/mini_fo/dentry.c 2006-10-30 03:42:09.000000000 +0100
+Index: linux-2.4.35.4/fs/mini_fo/dentry.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/mini_fo/dentry.c 2007-12-15 05:20:05.296142055 +0100
@@ -0,0 +1,244 @@
+/*
+ * Copyright (c) 1997-2003 Erez Zadok
+ d_delete: mini_fo_d_delete,
+ d_iput: mini_fo_d_iput,
+};
-diff -urN linux.old/fs/mini_fo/file.c linux.dev/fs/mini_fo/file.c
---- linux.old/fs/mini_fo/file.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/fs/mini_fo/file.c 2006-10-30 03:42:09.000000000 +0100
+Index: linux-2.4.35.4/fs/mini_fo/file.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/mini_fo/file.c 2007-12-15 05:20:05.300142281 +0100
@@ -0,0 +1,717 @@
+/*
+ * Copyright (c) 1997-2003 Erez Zadok
+ /* not implemented: sendpage */
+ /* not implemented: get_unmapped_area */
+ };
-diff -urN linux.old/fs/mini_fo/fist.h linux.dev/fs/mini_fo/fist.h
---- linux.old/fs/mini_fo/fist.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/fs/mini_fo/fist.h 2006-10-30 03:42:09.000000000 +0100
+Index: linux-2.4.35.4/fs/mini_fo/fist.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/mini_fo/fist.h 2007-12-15 05:20:05.300142281 +0100
@@ -0,0 +1,248 @@
+/*
+ * Copyright (c) 1997-2003 Erez Zadok
+# define FIST_IOCTL_SET_DEBUG_VALUE _IOW(0x15, 2, int)
+
+#endif /* not __FIST_H_ */
-diff -urN linux.old/fs/mini_fo/inode.c linux.dev/fs/mini_fo/inode.c
---- linux.old/fs/mini_fo/inode.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/fs/mini_fo/inode.c 2006-10-30 03:55:42.000000000 +0100
+Index: linux-2.4.35.4/fs/mini_fo/inode.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/mini_fo/inode.c 2007-12-15 05:20:05.300142281 +0100
@@ -0,0 +1,1573 @@
+/*
+ * Copyright (c) 1997-2003 Erez Zadok
+ removexattr: mini_fo_removexattr
+# endif /* XATTR && LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20) */
+ };
-diff -urN linux.old/fs/mini_fo/main.c linux.dev/fs/mini_fo/main.c
---- linux.old/fs/mini_fo/main.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/fs/mini_fo/main.c 2006-10-30 03:42:09.000000000 +0100
+Index: linux-2.4.35.4/fs/mini_fo/main.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/mini_fo/main.c 2007-12-15 05:20:05.300142281 +0100
@@ -0,0 +1,414 @@
+/*
+ * Copyright (c) 1997-2003 Erez Zadok
+
+module_init(init_mini_fo_fs)
+module_exit(exit_mini_fo_fs)
-diff -urN linux.old/fs/mini_fo/Makefile linux.dev/fs/mini_fo/Makefile
---- linux.old/fs/mini_fo/Makefile 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/fs/mini_fo/Makefile 2006-10-30 03:42:09.000000000 +0100
+Index: linux-2.4.35.4/fs/mini_fo/Makefile
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/mini_fo/Makefile 2007-12-15 05:20:05.304142507 +0100
@@ -0,0 +1,22 @@
+#
+# Makefile for mini_fo 2.4 and 2.6 Linux kernels
+# dependencies
+${mini_fo-objs}: mini_fo.h fist.h
+
-diff -urN linux.old/fs/mini_fo/meta.c linux.dev/fs/mini_fo/meta.c
---- linux.old/fs/mini_fo/meta.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/fs/mini_fo/meta.c 2006-10-30 03:42:09.000000000 +0100
+Index: linux-2.4.35.4/fs/mini_fo/meta.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/mini_fo/meta.c 2007-12-15 05:20:05.304142507 +0100
@@ -0,0 +1,1000 @@
+/*
+ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
+ return 0;
+}
+
-diff -urN linux.old/fs/mini_fo/mini_fo.h linux.dev/fs/mini_fo/mini_fo.h
---- linux.old/fs/mini_fo/mini_fo.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/fs/mini_fo/mini_fo.h 2006-10-30 03:42:09.000000000 +0100
+Index: linux-2.4.35.4/fs/mini_fo/mini_fo.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/mini_fo/mini_fo.h 2007-12-15 05:20:05.304142507 +0100
@@ -0,0 +1,503 @@
+/*
+ * Copyright (c) 1997-2003 Erez Zadok
+/* ioctls */
+
+#endif /* not __MINI_FO_H_ */
-diff -urN linux.old/fs/mini_fo/mini_fo-merge linux.dev/fs/mini_fo/mini_fo-merge
---- linux.old/fs/mini_fo/mini_fo-merge 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/fs/mini_fo/mini_fo-merge 2006-10-30 03:42:09.000000000 +0100
+Index: linux-2.4.35.4/fs/mini_fo/mini_fo-merge
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/mini_fo/mini_fo-merge 2007-12-15 05:20:05.304142507 +0100
@@ -0,0 +1,180 @@
+#!/bin/bash
+#
+#rm $TMP/$SKIP_DEL_LIST
+
+echo "Done!"
-diff -urN linux.old/fs/mini_fo/mini_fo-overlay linux.dev/fs/mini_fo/mini_fo-overlay
---- linux.old/fs/mini_fo/mini_fo-overlay 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/fs/mini_fo/mini_fo-overlay 2006-10-30 03:42:09.000000000 +0100
+Index: linux-2.4.35.4/fs/mini_fo/mini_fo-overlay
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/mini_fo/mini_fo-overlay 2007-12-15 05:20:05.308142736 +0100
@@ -0,0 +1,130 @@
+#!/bin/bash
+#
+if [ $? -ne 0 ]; then
+ echo "Error, mounting failed, maybe no permisson to mount?"
+fi
-diff -urN linux.old/fs/mini_fo/mmap.c linux.dev/fs/mini_fo/mmap.c
---- linux.old/fs/mini_fo/mmap.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/fs/mini_fo/mmap.c 2006-10-30 03:42:09.000000000 +0100
+Index: linux-2.4.35.4/fs/mini_fo/mmap.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/mini_fo/mmap.c 2007-12-15 05:20:05.316143195 +0100
@@ -0,0 +1,637 @@
+/*
+ * Copyright (c) 1997-2003 Erez Zadok
+ print_exit_status(err);
+ return err;
+}
-diff -urN linux.old/fs/mini_fo/README linux.dev/fs/mini_fo/README
---- linux.old/fs/mini_fo/README 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/fs/mini_fo/README 2006-10-30 03:42:09.000000000 +0100
+Index: linux-2.4.35.4/fs/mini_fo/README
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/mini_fo/README 2007-12-15 05:20:05.316143195 +0100
@@ -0,0 +1,163 @@
+README for the mini_fo overlay file system
+=========================================
+2 of the License, or (at your option) any later version.
+
+
-diff -urN linux.old/fs/mini_fo/RELEASE_NOTES linux.dev/fs/mini_fo/RELEASE_NOTES
---- linux.old/fs/mini_fo/RELEASE_NOTES 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/fs/mini_fo/RELEASE_NOTES 2006-10-30 03:42:09.000000000 +0100
+Index: linux-2.4.35.4/fs/mini_fo/RELEASE_NOTES
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/mini_fo/RELEASE_NOTES 2007-12-15 05:20:05.316143195 +0100
@@ -0,0 +1,111 @@
+Release: mini_fo-0.6.1 (v0-6-1)
+Date: 21.09.2005
+original state. I hope to fix this someday. Please note that this does
+not effect the special hard links '.' and '..', that are handled
+seperately by the lower fs.
-diff -urN linux.old/fs/mini_fo/state.c linux.dev/fs/mini_fo/state.c
---- linux.old/fs/mini_fo/state.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/fs/mini_fo/state.c 2006-10-30 03:42:09.000000000 +0100
+Index: linux-2.4.35.4/fs/mini_fo/state.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/mini_fo/state.c 2007-12-15 05:20:05.316143195 +0100
@@ -0,0 +1,620 @@
+/*
+ * Copyright (C) 2005 Markus Klotzbuecher <mk@creamnet.de>
+ return err;
+}
+
-diff -urN linux.old/fs/mini_fo/super.c linux.dev/fs/mini_fo/super.c
---- linux.old/fs/mini_fo/super.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/fs/mini_fo/super.c 2006-10-30 03:42:09.000000000 +0100
+Index: linux-2.4.35.4/fs/mini_fo/super.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/mini_fo/super.c 2007-12-15 05:20:05.316143195 +0100
@@ -0,0 +1,259 @@
+/*
+ * Copyright (c) 1997-2003 Erez Zadok
-diff -urN linux.old/include/linux/netfilter_ipv4/ipt_ipp2p.h linux.dev/include/linux/netfilter_ipv4/ipt_ipp2p.h
---- linux.old/include/linux/netfilter_ipv4/ipt_ipp2p.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/include/linux/netfilter_ipv4/ipt_ipp2p.h 2006-03-23 14:37:56.000000000 +0100
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_ipp2p.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_ipp2p.h 2007-12-15 05:20:05.756168270 +0100
@@ -0,0 +1,31 @@
+#ifndef __IPT_IPP2P_H
+#define __IPT_IPP2P_H
+#define IPP2P_MUTE (1 << 14)
+#define IPP2P_WASTE (1 << 15)
+#define IPP2P_XDCC (1 << 16)
-diff -urN linux.old/net/ipv4/netfilter/Config.in linux.dev/net/ipv4/netfilter/Config.in
---- linux.old/net/ipv4/netfilter/Config.in 2006-03-23 14:35:20.000000000 +0100
-+++ linux.dev/net/ipv4/netfilter/Config.in 2006-03-23 14:35:58.000000000 +0100
-@@ -29,6 +29,7 @@
+Index: linux-2.4.35.4/net/ipv4/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Config.in 2007-12-15 05:19:38.466613124 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Config.in 2007-12-15 05:20:05.764168722 +0100
+@@ -26,6 +26,7 @@
dep_tristate ' TOS match support' CONFIG_IP_NF_MATCH_TOS $CONFIG_IP_NF_IPTABLES
dep_tristate ' recent match support' CONFIG_IP_NF_MATCH_RECENT $CONFIG_IP_NF_IPTABLES
dep_tristate ' ECN match support' CONFIG_IP_NF_MATCH_ECN $CONFIG_IP_NF_IPTABLES
dep_tristate ' DSCP match support' CONFIG_IP_NF_MATCH_DSCP $CONFIG_IP_NF_IPTABLES
-diff -urN linux.old/net/ipv4/netfilter/Makefile linux.dev/net/ipv4/netfilter/Makefile
---- linux.old/net/ipv4/netfilter/Makefile 2006-03-23 14:35:20.000000000 +0100
-+++ linux.dev/net/ipv4/netfilter/Makefile 2006-03-23 14:35:58.000000000 +0100
-@@ -76,6 +76,7 @@
+Index: linux-2.4.35.4/net/ipv4/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Makefile 2007-12-15 05:19:38.474613582 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Makefile 2007-12-15 05:20:05.764168722 +0100
+@@ -67,6 +67,7 @@
obj-$(CONFIG_IP_NF_MATCH_LIMIT) += ipt_limit.o
obj-$(CONFIG_IP_NF_MATCH_MARK) += ipt_mark.o
obj-$(CONFIG_IP_NF_MATCH_MAC) += ipt_mac.o
obj-$(CONFIG_IP_NF_MATCH_PKTTYPE) += ipt_pkttype.o
obj-$(CONFIG_IP_NF_MATCH_MULTIPORT) += ipt_multiport.o
-diff -urN linux.old/net/ipv4/netfilter/ipt_ipp2p.c linux.dev/net/ipv4/netfilter/ipt_ipp2p.c
---- linux.old/net/ipv4/netfilter/ipt_ipp2p.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/net/ipv4/netfilter/ipt_ipp2p.c 2006-03-23 14:37:18.000000000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ipt_ipp2p.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ipt_ipp2p.c 2007-12-15 05:20:05.764168722 +0100
@@ -0,0 +1,868 @@
+#if defined(MODVERSIONS)
+#include <linux/modversions.h>
-diff -urN linux.old/Documentation/Configure.help linux.dev/Documentation/Configure.help
---- linux.old/Documentation/Configure.help 2006-01-31 16:55:22.467939000 +0100
-+++ linux.dev/Documentation/Configure.help 2006-01-31 16:58:24.751331500 +0100
-@@ -29151,6 +29151,18 @@
+Index: linux-2.4.35.4/Documentation/Configure.help
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/Configure.help 2007-12-15 05:19:54.063501941 +0100
++++ linux-2.4.35.4/Documentation/Configure.help 2007-12-15 05:20:06.024183543 +0100
+@@ -29207,6 +29207,18 @@
If unsure, say N.
#
# A couple of things I keep forgetting:
# capitalize: AppleTalk, Ethernet, DOS, DMA, FAT, FTP, Internet,
-diff -urN linux.old/include/linux/netfilter_ipv4/ip_conntrack.h linux.dev/include/linux/netfilter_ipv4/ip_conntrack.h
---- linux.old/include/linux/netfilter_ipv4/ip_conntrack.h 2005-11-16 20:12:54.000000000 +0100
-+++ linux.dev/include/linux/netfilter_ipv4/ip_conntrack.h 2006-01-31 16:58:24.775333000 +0100
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/netfilter_ipv4/ip_conntrack.h 2007-12-15 05:19:38.358606970 +0100
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack.h 2007-12-15 05:20:06.024183543 +0100
@@ -207,6 +207,17 @@
} nat;
#endif /* CONFIG_IP_NF_NAT_NEEDED */
};
/* get master conntrack via master expectation */
-diff -urN linux.old/include/linux/netfilter_ipv4/ipt_layer7.h linux.dev/include/linux/netfilter_ipv4/ipt_layer7.h
---- linux.old/include/linux/netfilter_ipv4/ipt_layer7.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/include/linux/netfilter_ipv4/ipt_layer7.h 2006-01-31 19:29:03.774017500 +0100
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_layer7.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_layer7.h 2007-12-15 05:20:06.032183998 +0100
@@ -0,0 +1,27 @@
+/*
+ By Matthew Strait <quadong@users.sf.net>, Dec 2003.
+};
+
+#endif /* _IPT_LAYER7_H */
-diff -urN linux.old/net/ipv4/netfilter/Config.in linux.dev/net/ipv4/netfilter/Config.in
---- linux.old/net/ipv4/netfilter/Config.in 2006-01-31 16:55:32.364558000 +0100
-+++ linux.dev/net/ipv4/netfilter/Config.in 2006-01-31 16:58:24.803334750 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Config.in 2007-12-15 05:20:05.764168722 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Config.in 2007-12-15 05:20:06.036184227 +0100
@@ -44,6 +44,9 @@
if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
dep_tristate ' Unclean match support (EXPERIMENTAL)' CONFIG_IP_NF_MATCH_UNCLEAN $CONFIG_IP_NF_IPTABLES
fi
# The targets
dep_tristate ' Packet filtering' CONFIG_IP_NF_FILTER $CONFIG_IP_NF_IPTABLES
-diff -urN linux.old/net/ipv4/netfilter/Makefile linux.dev/net/ipv4/netfilter/Makefile
---- linux.old/net/ipv4/netfilter/Makefile 2006-01-31 16:55:32.372558000 +0100
-+++ linux.dev/net/ipv4/netfilter/Makefile 2006-01-31 16:58:24.803334750 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Makefile 2007-12-15 05:20:05.764168722 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Makefile 2007-12-15 05:20:06.036184227 +0100
@@ -87,6 +87,7 @@
obj-$(CONFIG_IP_NF_MATCH_CONNTRACK) += ipt_conntrack.o
obj-$(CONFIG_IP_NF_MATCH_UNCLEAN) += ipt_unclean.o
# targets
obj-$(CONFIG_IP_NF_TARGET_REJECT) += ipt_REJECT.o
-diff -urN linux.old/net/ipv4/netfilter/ip_conntrack_core.c linux.dev/net/ipv4/netfilter/ip_conntrack_core.c
---- linux.old/net/ipv4/netfilter/ip_conntrack_core.c 2005-04-04 03:42:20.000000000 +0200
-+++ linux.dev/net/ipv4/netfilter/ip_conntrack_core.c 2006-01-31 16:58:24.811335250 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_core.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/ip_conntrack_core.c 2007-12-15 05:19:38.386608565 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_core.c 2007-12-15 05:20:06.036184227 +0100
@@ -346,6 +346,14 @@
}
kfree(ct->master);
WRITE_UNLOCK(&ip_conntrack_lock);
if (master)
-diff -urN linux.old/net/ipv4/netfilter/ip_conntrack_standalone.c linux.dev/net/ipv4/netfilter/ip_conntrack_standalone.c
---- linux.old/net/ipv4/netfilter/ip_conntrack_standalone.c 2005-04-04 03:42:20.000000000 +0200
-+++ linux.dev/net/ipv4/netfilter/ip_conntrack_standalone.c 2006-01-31 16:58:24.815335500 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_standalone.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/ip_conntrack_standalone.c 2007-12-15 05:19:38.394609023 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_standalone.c 2007-12-15 05:20:06.036184227 +0100
@@ -107,6 +107,13 @@
len += sprintf(buffer + len, "[ASSURED] ");
len += sprintf(buffer + len, "use=%u ",
len += sprintf(buffer + len, "\n");
return len;
-diff -urN linux.old/net/ipv4/netfilter/ipt_layer7.c linux.dev/net/ipv4/netfilter/ipt_layer7.c
---- linux.old/net/ipv4/netfilter/ipt_layer7.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/net/ipv4/netfilter/ipt_layer7.c 2006-01-31 19:31:38.591693000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ipt_layer7.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ipt_layer7.c 2007-12-15 05:20:06.040184453 +0100
@@ -0,0 +1,595 @@
+/*
+ Kernel module to match application layer (OSI layer 7)
+
+module_init(init);
+module_exit(fini);
-diff -urN linux.old/net/ipv4/netfilter/regexp/regexp.c linux.dev/net/ipv4/netfilter/regexp/regexp.c
---- linux.old/net/ipv4/netfilter/regexp/regexp.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/net/ipv4/netfilter/regexp/regexp.c 2006-01-31 16:58:24.819335750 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/regexp/regexp.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/regexp/regexp.c 2007-12-15 05:20:06.040184453 +0100
@@ -0,0 +1,1195 @@
+/*
+ * regcomp and regexec -- regsub and regerror are elsewhere
+#endif
+
+
-diff -urN linux.old/net/ipv4/netfilter/regexp/regexp.h linux.dev/net/ipv4/netfilter/regexp/regexp.h
---- linux.old/net/ipv4/netfilter/regexp/regexp.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/net/ipv4/netfilter/regexp/regexp.h 2006-01-31 16:58:24.819335750 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/regexp/regexp.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/regexp/regexp.h 2007-12-15 05:20:06.040184453 +0100
@@ -0,0 +1,40 @@
+/*
+ * Definitions etc. for regexp(3) routines.
+void regerror(char *s);
+
+#endif
-diff -urN linux.old/net/ipv4/netfilter/regexp/regmagic.h linux.dev/net/ipv4/netfilter/regexp/regmagic.h
---- linux.old/net/ipv4/netfilter/regexp/regmagic.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/net/ipv4/netfilter/regexp/regmagic.h 2006-01-31 16:58:24.823336000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/regexp/regmagic.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/regexp/regmagic.h 2007-12-15 05:20:06.040184453 +0100
@@ -0,0 +1,5 @@
+/*
+ * The first byte of the regexp internal "program" is actually this magic
+ * number; the start node begins in the second byte.
+ */
+#define MAGIC 0234
-diff -urN linux.old/net/ipv4/netfilter/regexp/regsub.c linux.dev/net/ipv4/netfilter/regexp/regsub.c
---- linux.old/net/ipv4/netfilter/regexp/regsub.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/net/ipv4/netfilter/regexp/regsub.c 2006-01-31 16:58:24.823336000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/regexp/regsub.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/regexp/regsub.c 2007-12-15 05:20:06.044184683 +0100
@@ -0,0 +1,95 @@
+/*
+ * regsub
-diff -urN linux-2.4.29-old/include/linux/netfilter_ipv4/ip_conntrack.h linux-2.4.29-dev/include/linux/netfilter_ipv4/ip_conntrack.h
---- linux-2.4.29-old/include/linux/netfilter_ipv4/ip_conntrack.h 2005-04-02 19:04:11.000000000 +0200
-+++ linux-2.4.29-dev/include/linux/netfilter_ipv4/ip_conntrack.h 2005-04-02 19:41:05.000000000 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/netfilter_ipv4/ip_conntrack.h 2007-12-15 05:20:06.024183543 +0100
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack.h 2007-12-15 05:20:06.392204515 +0100
@@ -50,16 +50,19 @@
#include <linux/netfilter_ipv4/ip_conntrack_tcp.h>
};
#endif
-diff -urN linux-2.4.29-old/include/linux/netfilter_ipv4/ip_conntrack_pptp.h linux-2.4.29-dev/include/linux/netfilter_ipv4/ip_conntrack_pptp.h
---- linux-2.4.29-old/include/linux/netfilter_ipv4/ip_conntrack_pptp.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29-dev/include/linux/netfilter_ipv4/ip_conntrack_pptp.h 2005-04-02 19:09:07.000000000 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack_pptp.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack_pptp.h 2007-12-15 05:20:06.400204969 +0100
@@ -0,0 +1,313 @@
+/* PPTP constants and structs */
+#ifndef _CONNTRACK_PPTP_H
+
+#endif /* __KERNEL__ */
+#endif /* _CONNTRACK_PPTP_H */
-diff -urN linux-2.4.29-old/include/linux/netfilter_ipv4/ip_conntrack_proto_gre.h linux-2.4.29-dev/include/linux/netfilter_ipv4/ip_conntrack_proto_gre.h
---- linux-2.4.29-old/include/linux/netfilter_ipv4/ip_conntrack_proto_gre.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29-dev/include/linux/netfilter_ipv4/ip_conntrack_proto_gre.h 2005-04-02 19:10:45.000000000 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack_proto_gre.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack_proto_gre.h 2007-12-15 05:20:06.400204969 +0100
@@ -0,0 +1,123 @@
+#ifndef _CONNTRACK_PROTO_GRE_H
+#define _CONNTRACK_PROTO_GRE_H
+#endif /* __KERNEL__ */
+
+#endif /* _CONNTRACK_PROTO_GRE_H */
-diff -urN linux-2.4.29-old/include/linux/netfilter_ipv4/ip_conntrack_tuple.h linux-2.4.29-dev/include/linux/netfilter_ipv4/ip_conntrack_tuple.h
---- linux-2.4.29-old/include/linux/netfilter_ipv4/ip_conntrack_tuple.h 2003-11-28 19:26:21.000000000 +0100
-+++ linux-2.4.29-dev/include/linux/netfilter_ipv4/ip_conntrack_tuple.h 2005-04-02 19:07:18.000000000 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack_tuple.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/netfilter_ipv4/ip_conntrack_tuple.h 2007-12-15 05:19:38.250600816 +0100
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack_tuple.h 2007-12-15 05:20:06.400204969 +0100
@@ -14,7 +14,7 @@
union ip_conntrack_manip_proto
{
#define CTINFO2DIR(ctinfo) ((ctinfo) >= IP_CT_IS_REPLY ? IP_CT_DIR_REPLY : IP_CT_DIR_ORIGINAL)
-diff -urN linux-2.4.29-old/include/linux/netfilter_ipv4/ip_nat_pptp.h linux-2.4.29-dev/include/linux/netfilter_ipv4/ip_nat_pptp.h
---- linux-2.4.29-old/include/linux/netfilter_ipv4/ip_nat_pptp.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29-dev/include/linux/netfilter_ipv4/ip_nat_pptp.h 2005-04-02 19:07:18.000000000 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_nat_pptp.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_nat_pptp.h 2007-12-15 05:20:06.400204969 +0100
@@ -0,0 +1,11 @@
+/* PPTP constants and structs */
+#ifndef _NAT_PPTP_H
+};
+
+#endif /* _NAT_PPTP_H */
-diff -urN linux-2.4.29-old/net/ipv4/netfilter/Config.in linux-2.4.29-dev/net/ipv4/netfilter/Config.in
---- linux-2.4.29-old/net/ipv4/netfilter/Config.in 2005-04-02 19:04:11.000000000 +0200
-+++ linux-2.4.29-dev/net/ipv4/netfilter/Config.in 2005-04-02 19:07:18.000000000 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Config.in 2007-12-15 05:20:06.036184227 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Config.in 2007-12-15 05:20:06.400204969 +0100
@@ -10,6 +10,8 @@
dep_tristate ' Amanda protocol support' CONFIG_IP_NF_AMANDA $CONFIG_IP_NF_CONNTRACK
dep_tristate ' TFTP protocol support' CONFIG_IP_NF_TFTP $CONFIG_IP_NF_CONNTRACK
fi
if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
-@@ -67,6 +69,20 @@
+@@ -63,6 +65,20 @@
define_bool CONFIG_IP_NF_NAT_NEEDED y
dep_tristate ' MASQUERADE target support' CONFIG_IP_NF_TARGET_MASQUERADE $CONFIG_IP_NF_NAT
dep_tristate ' REDIRECT target support' CONFIG_IP_NF_TARGET_REDIRECT $CONFIG_IP_NF_NAT
if [ "$CONFIG_IP_NF_AMANDA" = "m" ]; then
define_tristate CONFIG_IP_NF_NAT_AMANDA m
else
-diff -urN linux-2.4.29-old/net/ipv4/netfilter/ip_conntrack_core.c linux-2.4.29-dev/net/ipv4/netfilter/ip_conntrack_core.c
---- linux-2.4.29-old/net/ipv4/netfilter/ip_conntrack_core.c 2005-04-02 19:04:11.000000000 +0200
-+++ linux-2.4.29-dev/net/ipv4/netfilter/ip_conntrack_core.c 2005-04-02 19:07:18.000000000 +0200
-@@ -142,6 +142,8 @@
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_core.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/ip_conntrack_core.c 2007-12-15 05:20:06.036184227 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_core.c 2007-12-15 05:20:06.404205198 +0100
+@@ -143,6 +143,8 @@
tuple->dst.ip = iph->daddr;
tuple->dst.protonum = iph->protocol;
ret = protocol->pkt_to_tuple((u_int32_t *)iph + iph->ihl,
len - 4*iph->ihl,
tuple);
-@@ -157,6 +159,8 @@
+@@ -158,6 +160,8 @@
inverse->dst.ip = orig->src.ip;
inverse->dst.protonum = orig->dst.protonum;
return protocol->invert_tuple(inverse, orig);
}
-@@ -954,8 +958,8 @@
+@@ -970,8 +974,8 @@
* so there is no need to use the tuple lock too */
DEBUGP("ip_conntrack_expect_related %p\n", related_to);
old = LIST_FIND(&ip_conntrack_expect_list, resent_expect,
struct ip_conntrack_expect *, &expect->tuple,
-@@ -1072,15 +1076,14 @@
+@@ -1089,15 +1093,14 @@
MUST_BE_READ_LOCKED(&ip_conntrack_lock);
WRITE_LOCK(&ip_conntrack_expect_tuple_lock);
&& LIST_FIND(&ip_conntrack_expect_list, expect_clash,
struct ip_conntrack_expect *, newtuple, &expect->mask)) {
/* Force NAT to find an unused tuple */
-diff -urN linux-2.4.29-old/net/ipv4/netfilter/ip_conntrack_pptp_priv.h linux-2.4.29-dev/net/ipv4/netfilter/ip_conntrack_pptp_priv.h
---- linux-2.4.29-old/net/ipv4/netfilter/ip_conntrack_pptp_priv.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29-dev/net/ipv4/netfilter/ip_conntrack_pptp_priv.h 2005-04-02 19:14:10.000000000 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_pptp_priv.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_pptp_priv.h 2007-12-15 05:20:06.404205198 +0100
@@ -0,0 +1,24 @@
+#ifndef _IP_CT_PPTP_PRIV_H
+#define _IP_CT_PPTP_PRIV_H
+};
+
+#endif
-diff -urN linux-2.4.29-old/net/ipv4/netfilter/ip_conntrack_proto_gre.c linux-2.4.29-dev/net/ipv4/netfilter/ip_conntrack_proto_gre.c
---- linux-2.4.29-old/net/ipv4/netfilter/ip_conntrack_proto_gre.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29-dev/net/ipv4/netfilter/ip_conntrack_proto_gre.c 2005-04-02 19:14:31.000000000 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_proto_gre.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_proto_gre.c 2007-12-15 05:20:06.404205198 +0100
@@ -0,0 +1,333 @@
+/*
+ * ip_conntrack_proto_gre.c - Version 1.2
+
+module_init(init);
+module_exit(fini);
-diff -urN linux-2.4.29-old/net/ipv4/netfilter/ip_nat_core.c linux-2.4.29-dev/net/ipv4/netfilter/ip_nat_core.c
---- linux-2.4.29-old/net/ipv4/netfilter/ip_nat_core.c 2005-01-19 15:10:13.000000000 +0100
-+++ linux-2.4.29-dev/net/ipv4/netfilter/ip_nat_core.c 2005-04-02 19:07:18.000000000 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_nat_core.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/ip_nat_core.c 2007-12-15 05:19:38.290603095 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_nat_core.c 2007-12-15 05:20:06.404205198 +0100
@@ -424,7 +424,7 @@
*tuple = *orig_tuple;
while ((rptr = find_best_ips_proto_fast(tuple, mr, conntrack, hooknum))
#endif
/* We now have two tuples (SRCIP/SRCPT/DSTIP/DSTPT):
-diff -urN linux-2.4.29-old/net/ipv4/netfilter/ip_nat_pptp.c linux-2.4.29-dev/net/ipv4/netfilter/ip_nat_pptp.c
---- linux-2.4.29-old/net/ipv4/netfilter/ip_nat_pptp.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29-dev/net/ipv4/netfilter/ip_nat_pptp.c 2005-04-02 19:14:52.000000000 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_nat_pptp.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_nat_pptp.c 2007-12-15 05:20:06.408205428 +0100
@@ -0,0 +1,482 @@
+/*
+ * ip_nat_pptp.c - Version 1.5
+
+module_init(init);
+module_exit(fini);
-diff -urN linux-2.4.29-old/net/ipv4/netfilter/ip_nat_proto_gre.c linux-2.4.29-dev/net/ipv4/netfilter/ip_nat_proto_gre.c
---- linux-2.4.29-old/net/ipv4/netfilter/ip_nat_proto_gre.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29-dev/net/ipv4/netfilter/ip_nat_proto_gre.c 2005-04-02 19:15:10.000000000 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_nat_proto_gre.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_nat_proto_gre.c 2007-12-15 05:20:06.408205428 +0100
@@ -0,0 +1,202 @@
+/*
+ * ip_nat_proto_gre.c - Version 1.2
+
+module_init(init);
+module_exit(fini);
-diff -urN linux-2.4.29-old/net/ipv4/netfilter/Makefile linux-2.4.29-dev/net/ipv4/netfilter/Makefile
---- linux-2.4.29-old/net/ipv4/netfilter/Makefile 2005-04-02 19:04:11.000000000 +0200
-+++ linux-2.4.29-dev/net/ipv4/netfilter/Makefile 2005-04-02 19:07:18.000000000 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Makefile 2007-12-15 05:20:06.036184227 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Makefile 2007-12-15 05:20:06.408205428 +0100
@@ -36,23 +36,32 @@
ifdef CONFIG_IP_NF_AMANDA
export-objs += ip_conntrack_amanda.o
# generic IP tables
obj-$(CONFIG_IP_NF_IPTABLES) += ip_tables.o
---- linux-2.4.32/net/ipv4/netfilter/ip_conntrack_pptp.c 1970-01-01 01:00:00.000000000 +0100
-+++ /home/florian//openwrt/trunk/openwrt/build_mipsel/linux/net/ipv4/netfilter/ip_conntrack_pptp.c 2006-02-04 18:23:27.000000000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_pptp.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_pptp.c 2007-12-15 05:20:06.408205428 +0100
@@ -0,0 +1,635 @@
+/*
+ * ip_conntrack_pptp.c - Version 1.9
---- ../../buildroot-unpacked/build_mipsel/linux/net/ipv4/netfilter/ip_conntrack_core.c 2004-11-28 22:59:36.000000000 -0500
-+++ linux/net/ipv4/netfilter/ip_conntrack_core.c 2004-11-30 05:05:32.000000000 -0500
-@@ -1386,7 +1386,7 @@
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_core.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/ip_conntrack_core.c 2007-12-15 05:20:06.404205198 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_core.c 2007-12-15 05:20:06.772226171 +0100
+@@ -1410,7 +1410,7 @@
nf_unregister_sockopt(&so_getorigdst);
}
MODULE_PARM(hashsize, "i");
int __init ip_conntrack_init(void)
-@@ -1407,7 +1407,7 @@
+@@ -1431,7 +1431,7 @@
if (ip_conntrack_htable_size < 16)
ip_conntrack_htable_size = 16;
}
-diff -urN linux-2.4.30.old/Documentation/Configure.help linux-2.4.30.dev/Documentation/Configure.help
---- linux-2.4.30.old/Documentation/Configure.help 2005-04-27 11:35:46.000000000 +0200
-+++ linux-2.4.30.dev/Documentation/Configure.help 2005-04-27 11:43:49.000000000 +0200
+Index: linux-2.4.35.4/Documentation/Configure.help
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/Configure.help 2007-12-15 05:20:06.024183543 +0100
++++ linux-2.4.35.4/Documentation/Configure.help 2007-12-15 05:20:06.996238934 +0100
@@ -3209,6 +3209,15 @@
If you want to compile it as a module, say M here and read
<file:Documentation/modules.txt>. If unsure, say `N'.
ipchains (2.2-style) support
CONFIG_IP_NF_COMPAT_IPCHAINS
This option places ipchains (with masquerading and redirection
-diff -urN linux-2.4.30.old/include/linux/netfilter_ipv4/ipt_TTL.h linux-2.4.30.dev/include/linux/netfilter_ipv4/ipt_TTL.h
---- linux-2.4.30.old/include/linux/netfilter_ipv4/ipt_TTL.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.30.dev/include/linux/netfilter_ipv4/ipt_TTL.h 2005-04-27 11:43:49.000000000 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_TTL.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_TTL.h 2007-12-15 05:20:07.000239163 +0100
@@ -0,0 +1,21 @@
+/* TTL modification module for IP tables
+ * (C) 2000 by Harald Welte <laforge@gnumonks.org> */
+
+
+#endif
-diff -urN linux-2.4.30.old/net/ipv4/netfilter/Config.in linux-2.4.30.dev/net/ipv4/netfilter/Config.in
---- linux-2.4.30.old/net/ipv4/netfilter/Config.in 2005-04-27 11:35:45.000000000 +0200
-+++ linux-2.4.30.dev/net/ipv4/netfilter/Config.in 2005-04-27 11:43:49.000000000 +0200
-@@ -129,6 +129,7 @@
+Index: linux-2.4.35.4/net/ipv4/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Config.in 2007-12-15 05:20:06.400204969 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Config.in 2007-12-15 05:20:07.000239163 +0100
+@@ -125,6 +125,7 @@
dep_tristate ' MARK target support' CONFIG_IP_NF_TARGET_MARK $CONFIG_IP_NF_MANGLE
fi
dep_tristate ' LOG target support' CONFIG_IP_NF_TARGET_LOG $CONFIG_IP_NF_IPTABLES
dep_tristate ' ULOG target support' CONFIG_IP_NF_TARGET_ULOG $CONFIG_IP_NF_IPTABLES
dep_tristate ' TCPMSS target support' CONFIG_IP_NF_TARGET_TCPMSS $CONFIG_IP_NF_IPTABLES
fi
-diff -urN linux-2.4.30.old/net/ipv4/netfilter/ipt_TTL.c linux-2.4.30.dev/net/ipv4/netfilter/ipt_TTL.c
---- linux-2.4.30.old/net/ipv4/netfilter/ipt_TTL.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.30.dev/net/ipv4/netfilter/ipt_TTL.c 2005-04-27 11:43:49.000000000 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ipt_TTL.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ipt_TTL.c 2007-12-15 05:20:07.000239163 +0100
@@ -0,0 +1,110 @@
+/* TTL modification target for IP tables
+ * (C) 2000 by Harald Welte <laforge@gnumonks.org>
+
+module_init(init);
+module_exit(fini);
-diff -urN linux-2.4.30.old/net/ipv4/netfilter/Makefile linux-2.4.30.dev/net/ipv4/netfilter/Makefile
---- linux-2.4.30.old/net/ipv4/netfilter/Makefile 2005-04-27 11:35:45.000000000 +0200
-+++ linux-2.4.30.dev/net/ipv4/netfilter/Makefile 2005-04-27 11:43:49.000000000 +0200
-@@ -112,6 +112,7 @@
+Index: linux-2.4.35.4/net/ipv4/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Makefile 2007-12-15 05:20:06.408205428 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Makefile 2007-12-15 05:20:07.000239163 +0100
+@@ -109,6 +109,7 @@
obj-$(CONFIG_IP_NF_TARGET_REDIRECT) += ipt_REDIRECT.o
obj-$(CONFIG_IP_NF_NAT_SNMP_BASIC) += ip_nat_snmp_basic.o
obj-$(CONFIG_IP_NF_TARGET_LOG) += ipt_LOG.o
-diff -urN linux-2.4.30.orig/Documentation/Configure.help linux-2.4.30/Documentation/Configure.help
---- linux-2.4.30.orig/Documentation/Configure.help 2005-07-01 02:06:36.000000000 +0200
-+++ linux-2.4.30/Documentation/Configure.help 2005-07-01 00:41:09.000000000 +0200
+Index: linux-2.4.35.4/Documentation/Configure.help
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/Configure.help 2007-12-15 05:20:06.996238934 +0100
++++ linux-2.4.35.4/Documentation/Configure.help 2007-12-15 05:20:07.284255349 +0100
@@ -3086,6 +3086,17 @@
If you want to compile it as a module, say M here and read
<file:Documentation/modules.txt>. If unsure, say `N'.
Packet mangling
CONFIG_IP_NF_MANGLE
This option adds a `mangle' table to iptables: see the man page for
-diff -urN linux-2.4.30.orig/net/ipv4/netfilter/Config.in linux-2.4.30/net/ipv4/netfilter/Config.in
---- linux-2.4.30.orig/net/ipv4/netfilter/Config.in 2005-07-01 02:06:35.000000000 +0200
-+++ linux-2.4.30/net/ipv4/netfilter/Config.in 2005-07-01 00:41:09.000000000 +0200
-@@ -69,6 +69,7 @@
+Index: linux-2.4.35.4/net/ipv4/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Config.in 2007-12-15 05:20:07.000239163 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Config.in 2007-12-15 05:20:07.284255349 +0100
+@@ -65,6 +65,7 @@
define_bool CONFIG_IP_NF_NAT_NEEDED y
dep_tristate ' MASQUERADE target support' CONFIG_IP_NF_TARGET_MASQUERADE $CONFIG_IP_NF_NAT
dep_tristate ' REDIRECT target support' CONFIG_IP_NF_TARGET_REDIRECT $CONFIG_IP_NF_NAT
if [ "$CONFIG_IP_NF_PPTP" = "m" ]; then
define_tristate CONFIG_IP_NF_NAT_PPTP m
else
-diff -urN linux-2.4.30.orig/net/ipv4/netfilter/ipt_NETMAP.c linux-2.4.30/net/ipv4/netfilter/ipt_NETMAP.c
---- linux-2.4.30.orig/net/ipv4/netfilter/ipt_NETMAP.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.30/net/ipv4/netfilter/ipt_NETMAP.c 2005-07-01 00:41:09.000000000 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ipt_NETMAP.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ipt_NETMAP.c 2007-12-15 05:20:07.284255349 +0100
@@ -0,0 +1,112 @@
+/* NETMAP - static NAT mapping of IP network addresses (1:1).
+ The mapping can be applied to source (POSTROUTING),
+
+module_init(init);
+module_exit(fini);
-diff -urN linux-2.4.30.orig/net/ipv4/netfilter/Makefile linux-2.4.30/net/ipv4/netfilter/Makefile
---- linux-2.4.30.orig/net/ipv4/netfilter/Makefile 2005-07-01 02:06:35.000000000 +0200
-+++ linux-2.4.30/net/ipv4/netfilter/Makefile 2005-07-01 00:41:09.000000000 +0200
-@@ -110,6 +110,7 @@
+Index: linux-2.4.35.4/net/ipv4/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Makefile 2007-12-15 05:20:07.000239163 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Makefile 2007-12-15 05:20:07.288255579 +0100
+@@ -107,6 +107,7 @@
obj-$(CONFIG_IP_NF_TARGET_MARK) += ipt_MARK.o
obj-$(CONFIG_IP_NF_TARGET_MASQUERADE) += ipt_MASQUERADE.o
obj-$(CONFIG_IP_NF_TARGET_REDIRECT) += ipt_REDIRECT.o
-diff -urN linux.old/include/linux/netfilter_ipv4/ip_conntrack.h linux.dev/include/linux/netfilter_ipv4/ip_conntrack.h
---- linux.old/include/linux/netfilter_ipv4/ip_conntrack.h 2005-08-20 20:02:06.619827000 +0200
-+++ linux.dev/include/linux/netfilter_ipv4/ip_conntrack.h 2005-08-20 20:19:23.302029232 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/netfilter_ipv4/ip_conntrack.h 2007-12-15 05:20:06.392204515 +0100
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack.h 2007-12-15 05:20:07.552270623 +0100
@@ -226,6 +226,9 @@
unsigned int app_data_len;
} layer7;
};
/* get master conntrack via master expectation */
-diff -urN linux.old/include/linux/netfilter_ipv4/ipt_CONNMARK.h linux.dev/include/linux/netfilter_ipv4/ipt_CONNMARK.h
---- linux.old/include/linux/netfilter_ipv4/ipt_CONNMARK.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/include/linux/netfilter_ipv4/ipt_CONNMARK.h 2005-08-20 20:19:41.058329864 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_CONNMARK.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_CONNMARK.h 2007-12-15 05:20:07.556270849 +0100
@@ -0,0 +1,25 @@
+#ifndef _IPT_CONNMARK_H_target
+#define _IPT_CONNMARK_H_target
+};
+
+#endif /*_IPT_CONNMARK_H_target*/
-diff -urN linux.old/include/linux/netfilter_ipv4/ipt_connmark.h linux.dev/include/linux/netfilter_ipv4/ipt_connmark.h
---- linux.old/include/linux/netfilter_ipv4/ipt_connmark.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/include/linux/netfilter_ipv4/ipt_connmark.h 2005-08-20 20:19:41.058329864 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_connmark.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_connmark.h 2007-12-15 05:20:07.564271306 +0100
@@ -0,0 +1,18 @@
+#ifndef _IPT_CONNMARK_H
+#define _IPT_CONNMARK_H
+};
+
+#endif /*_IPT_CONNMARK_H*/
-diff -urN linux.old/net/ipv4/netfilter/Config.in linux.dev/net/ipv4/netfilter/Config.in
---- linux.old/net/ipv4/netfilter/Config.in 2005-08-20 20:02:09.325416000 +0200
-+++ linux.dev/net/ipv4/netfilter/Config.in 2005-08-20 20:29:11.546602464 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Config.in 2007-12-15 05:20:07.284255349 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Config.in 2007-12-15 05:20:07.568271536 +0100
@@ -6,7 +6,8 @@
tristate 'Connection tracking (required for masq/NAT)' CONFIG_IP_NF_CONNTRACK
dep_tristate ' LOG target support' CONFIG_IP_NF_TARGET_LOG $CONFIG_IP_NF_IPTABLES
dep_tristate ' TTL target support' CONFIG_IP_NF_TARGET_TTL $CONFIG_IP_NF_IPTABLES
dep_tristate ' ULOG target support' CONFIG_IP_NF_TARGET_ULOG $CONFIG_IP_NF_IPTABLES
-diff -urN linux.old/net/ipv4/netfilter/Makefile linux.dev/net/ipv4/netfilter/Makefile
---- linux.old/net/ipv4/netfilter/Makefile 2005-08-20 20:02:09.326416000 +0200
-+++ linux.dev/net/ipv4/netfilter/Makefile 2005-08-20 20:29:54.081136232 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Makefile 2007-12-15 05:20:07.288255579 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Makefile 2007-12-15 05:20:07.568271536 +0100
@@ -93,6 +93,7 @@
obj-$(CONFIG_IP_NF_MATCH_TTL) += ipt_ttl.o
obj-$(CONFIG_IP_NF_MATCH_UNCLEAN) += ipt_unclean.o
obj-$(CONFIG_IP_NF_MATCH_TCPMSS) += ipt_tcpmss.o
@@ -110,6 +111,7 @@
- obj-$(CONFIG_IP_NF_TARGET_REDIRECT) += ipt_REDIRECT.o
+ obj-$(CONFIG_IP_NF_TARGET_NETMAP) += ipt_NETMAP.o
obj-$(CONFIG_IP_NF_NAT_SNMP_BASIC) += ip_nat_snmp_basic.o
obj-$(CONFIG_IP_NF_TARGET_LOG) += ipt_LOG.o
+obj-$(CONFIG_IP_NF_TARGET_CONNMARK) += ipt_CONNMARK.o
obj-$(CONFIG_IP_NF_TARGET_TTL) += ipt_TTL.o
obj-$(CONFIG_IP_NF_TARGET_ULOG) += ipt_ULOG.o
obj-$(CONFIG_IP_NF_TARGET_TCPMSS) += ipt_TCPMSS.o
-diff -urN linux.old/net/ipv4/netfilter/ip_conntrack_core.c linux.dev/net/ipv4/netfilter/ip_conntrack_core.c
---- linux.old/net/ipv4/netfilter/ip_conntrack_core.c 2005-08-20 20:02:06.828795000 +0200
-+++ linux.dev/net/ipv4/netfilter/ip_conntrack_core.c 2005-08-20 20:33:23.308328864 +0200
-@@ -755,6 +755,9 @@
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_core.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/ip_conntrack_core.c 2007-12-15 05:20:06.772226171 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_core.c 2007-12-15 05:20:07.568271536 +0100
+@@ -754,6 +754,9 @@
__set_bit(IPS_EXPECTED_BIT, &conntrack->status);
conntrack->master = expected;
expected->sibling = conntrack;
LIST_DELETE(&ip_conntrack_expect_list, expected);
expected->expectant->expecting--;
nf_conntrack_get(&master_ct(conntrack)->infos[0]);
-diff -urN linux.old/net/ipv4/netfilter/ip_conntrack_standalone.c linux.dev/net/ipv4/netfilter/ip_conntrack_standalone.c
---- linux.old/net/ipv4/netfilter/ip_conntrack_standalone.c 2005-08-20 20:02:06.583833000 +0200
-+++ linux.dev/net/ipv4/netfilter/ip_conntrack_standalone.c 2005-08-20 20:32:15.364657872 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_standalone.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/ip_conntrack_standalone.c 2007-12-15 05:20:06.036184227 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_standalone.c 2007-12-15 05:20:07.568271536 +0100
@@ -107,6 +107,9 @@
len += sprintf(buffer + len, "[ASSURED] ");
len += sprintf(buffer + len, "use=%u ",
#if defined(CONFIG_IP_NF_MATCH_LAYER7) || defined(CONFIG_IP_NF_MATCH_LAYER7_MODULE)
if(conntrack->layer7.app_proto)
-diff -urN linux.old/net/ipv4/netfilter/ipt_CONNMARK.c linux.dev/net/ipv4/netfilter/ipt_CONNMARK.c
---- linux.old/net/ipv4/netfilter/ipt_CONNMARK.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/net/ipv4/netfilter/ipt_CONNMARK.c 2005-08-20 20:21:28.666970864 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ipt_CONNMARK.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ipt_CONNMARK.c 2007-12-15 05:20:07.568271536 +0100
@@ -0,0 +1,118 @@
+/* This kernel module is used to modify the connection mark values, or
+ * to optionally restore the skb nfmark from the connection mark
+
+module_init(init);
+module_exit(fini);
-diff -urN linux.old/net/ipv4/netfilter/ipt_connmark.c linux.dev/net/ipv4/netfilter/ipt_connmark.c
---- linux.old/net/ipv4/netfilter/ipt_connmark.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/net/ipv4/netfilter/ipt_connmark.c 2005-08-20 20:21:28.666970864 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ipt_connmark.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ipt_connmark.c 2007-12-15 05:20:07.572271763 +0100
@@ -0,0 +1,83 @@
+/* This kernel module matches connection mark values set by the
+ * CONNMARK target
-diff -Naur linux-old/Documentation/Configure.help linux-new/Documentation/Configure.help
---- linux-old/Documentation/Configure.help 2005-07-23 23:34:46.000000000 +0200
-+++ linux-new/Documentation/Configure.help 2005-08-10 22:13:01.000000000 +0200
-@@ -3209,6 +3209,75 @@
+Index: linux-2.4.35.4/Documentation/Configure.help
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/Configure.help 2007-12-15 05:20:07.284255349 +0100
++++ linux-2.4.35.4/Documentation/Configure.help 2007-12-15 05:20:07.880289314 +0100
+@@ -3220,6 +3220,75 @@
If you want to compile it as a module, say M here and read
<file:Documentation/modules.txt>. If unsure, say `N'.
TTL target support
CONFIG_IP_NF_TARGET_TTL
This option adds a `TTL' target, which enables the user to set
-diff -Naur linux-old/include/linux/netfilter_ipv4/ip_set.h linux-new/include/linux/netfilter_ipv4/ip_set.h
---- linux-old/include/linux/netfilter_ipv4/ip_set.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-new/include/linux/netfilter_ipv4/ip_set.h 2005-08-10 22:13:00.000000000 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set.h 2007-12-15 05:20:07.884289543 +0100
@@ -0,0 +1,489 @@
+#ifndef _IP_SET_H
+#define _IP_SET_H
+#endif /* __KERNEL__ */
+
+#endif /*_IP_SET_H*/
-diff -Naur linux-old/include/linux/netfilter_ipv4/ip_set_iphash.h linux-new/include/linux/netfilter_ipv4/ip_set_iphash.h
---- linux-old/include/linux/netfilter_ipv4/ip_set_iphash.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-new/include/linux/netfilter_ipv4/ip_set_iphash.h 2005-08-10 22:13:00.000000000 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set_iphash.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set_iphash.h 2007-12-15 05:20:07.884289543 +0100
@@ -0,0 +1,30 @@
+#ifndef __IP_SET_IPHASH_H
+#define __IP_SET_IPHASH_H
+};
+
+#endif /* __IP_SET_IPHASH_H */
-diff -Naur linux-old/include/linux/netfilter_ipv4/ip_set_ipmap.h linux-new/include/linux/netfilter_ipv4/ip_set_ipmap.h
---- linux-old/include/linux/netfilter_ipv4/ip_set_ipmap.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-new/include/linux/netfilter_ipv4/ip_set_ipmap.h 2005-08-10 22:13:00.000000000 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set_ipmap.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set_ipmap.h 2007-12-15 05:20:07.884289543 +0100
@@ -0,0 +1,56 @@
+#ifndef __IP_SET_IPMAP_H
+#define __IP_SET_IPMAP_H
+}
+
+#endif /* __IP_SET_IPMAP_H */
-diff -Naur linux-old/include/linux/netfilter_ipv4/ip_set_iptree.h linux-new/include/linux/netfilter_ipv4/ip_set_iptree.h
---- linux-old/include/linux/netfilter_ipv4/ip_set_iptree.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-new/include/linux/netfilter_ipv4/ip_set_iptree.h 2005-08-10 22:13:00.000000000 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set_iptree.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set_iptree.h 2007-12-15 05:20:07.884289543 +0100
@@ -0,0 +1,39 @@
+#ifndef __IP_SET_IPTREE_H
+#define __IP_SET_IPTREE_H
+};
+
+#endif /* __IP_SET_IPTREE_H */
-diff -Naur linux-old/include/linux/netfilter_ipv4/ip_set_jhash.h linux-new/include/linux/netfilter_ipv4/ip_set_jhash.h
---- linux-old/include/linux/netfilter_ipv4/ip_set_jhash.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-new/include/linux/netfilter_ipv4/ip_set_jhash.h 2005-08-10 22:13:00.000000000 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set_jhash.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set_jhash.h 2007-12-15 05:20:07.884289543 +0100
@@ -0,0 +1,148 @@
+#ifndef _LINUX_IPSET_JHASH_H
+#define _LINUX_IPSET_JHASH_H
+}
+
+#endif /* _LINUX_IPSET_JHASH_H */
-diff -Naur linux-old/include/linux/netfilter_ipv4/ip_set_macipmap.h linux-new/include/linux/netfilter_ipv4/ip_set_macipmap.h
---- linux-old/include/linux/netfilter_ipv4/ip_set_macipmap.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-new/include/linux/netfilter_ipv4/ip_set_macipmap.h 2005-08-10 22:13:00.000000000 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set_macipmap.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set_macipmap.h 2007-12-15 05:20:07.884289543 +0100
@@ -0,0 +1,38 @@
+#ifndef __IP_SET_MACIPMAP_H
+#define __IP_SET_MACIPMAP_H
+};
+
+#endif /* __IP_SET_MACIPMAP_H */
-diff -Naur linux-old/include/linux/netfilter_ipv4/ip_set_malloc.h linux-new/include/linux/netfilter_ipv4/ip_set_malloc.h
---- linux-old/include/linux/netfilter_ipv4/ip_set_malloc.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-new/include/linux/netfilter_ipv4/ip_set_malloc.h 2005-08-10 22:13:00.000000000 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set_malloc.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set_malloc.h 2007-12-15 05:20:07.888289773 +0100
@@ -0,0 +1,27 @@
+#ifndef _IP_SET_MALLOC_H
+#define _IP_SET_MALLOC_H
+#endif /* __KERNEL__ */
+
+#endif /*_IP_SET_MALLOC_H*/
-diff -Naur linux-old/include/linux/netfilter_ipv4/ip_set_nethash.h linux-new/include/linux/netfilter_ipv4/ip_set_nethash.h
---- linux-old/include/linux/netfilter_ipv4/ip_set_nethash.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-new/include/linux/netfilter_ipv4/ip_set_nethash.h 2005-08-10 22:13:00.000000000 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set_nethash.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set_nethash.h 2007-12-15 05:20:07.888289773 +0100
@@ -0,0 +1,55 @@
+#ifndef __IP_SET_NETHASH_H
+#define __IP_SET_NETHASH_H
+}
+
+#endif /* __IP_SET_NETHASH_H */
-diff -Naur linux-old/include/linux/netfilter_ipv4/ip_set_portmap.h linux-new/include/linux/netfilter_ipv4/ip_set_portmap.h
---- linux-old/include/linux/netfilter_ipv4/ip_set_portmap.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-new/include/linux/netfilter_ipv4/ip_set_portmap.h 2005-08-10 22:13:00.000000000 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set_portmap.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set_portmap.h 2007-12-15 05:20:07.888289773 +0100
@@ -0,0 +1,25 @@
+#ifndef __IP_SET_PORTMAP_H
+#define __IP_SET_PORTMAP_H
+};
+
+#endif /* __IP_SET_PORTMAP_H */
-diff -Naur linux-old/include/linux/netfilter_ipv4/ip_set_prime.h linux-new/include/linux/netfilter_ipv4/ip_set_prime.h
---- linux-old/include/linux/netfilter_ipv4/ip_set_prime.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-new/include/linux/netfilter_ipv4/ip_set_prime.h 2005-08-10 22:13:00.000000000 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set_prime.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set_prime.h 2007-12-15 05:20:07.888289773 +0100
@@ -0,0 +1,34 @@
+#ifndef __IP_SET_PRIME_H
+#define __IP_SET_PRIME_H
+}
+
+#endif /* __IP_SET_PRIME_H */
-diff -Naur linux-old/include/linux/netfilter_ipv4/ipt_set.h linux-new/include/linux/netfilter_ipv4/ipt_set.h
---- linux-old/include/linux/netfilter_ipv4/ipt_set.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-new/include/linux/netfilter_ipv4/ipt_set.h 2005-08-10 22:13:00.000000000 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_set.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_set.h 2007-12-15 05:20:07.888289773 +0100
@@ -0,0 +1,21 @@
+#ifndef _IPT_SET_H
+#define _IPT_SET_H
+};
+
+#endif /*_IPT_SET_H*/
-diff -Naur linux-old/net/ipv4/netfilter/Config.in linux-new/net/ipv4/netfilter/Config.in
---- linux-old/net/ipv4/netfilter/Config.in 2005-07-23 23:34:46.000000000 +0200
-+++ linux-new/net/ipv4/netfilter/Config.in 2005-08-10 22:13:01.000000000 +0200
-@@ -21,6 +21,20 @@
+Index: linux-2.4.35.4/net/ipv4/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Config.in 2007-12-15 05:20:07.568271536 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Config.in 2007-12-15 05:20:07.892290000 +0100
+@@ -22,6 +22,20 @@
if [ "$CONFIG_IP_NF_IPTABLES" != "n" ]; then
# The simple matches.
dep_tristate ' limit match support' CONFIG_IP_NF_MATCH_LIMIT $CONFIG_IP_NF_IPTABLES
dep_tristate ' MAC address match support' CONFIG_IP_NF_MATCH_MAC $CONFIG_IP_NF_IPTABLES
dep_tristate ' Packet type match support' CONFIG_IP_NF_MATCH_PKTTYPE $CONFIG_IP_NF_IPTABLES
dep_tristate ' netfilter MARK match support' CONFIG_IP_NF_MATCH_MARK $CONFIG_IP_NF_IPTABLES
-diff -Naur linux-old/net/ipv4/netfilter/ip_set.c linux-new/net/ipv4/netfilter/ip_set.c
---- linux-old/net/ipv4/netfilter/ip_set.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-new/net/ipv4/netfilter/ip_set.c 2005-08-10 22:13:00.000000000 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_set.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_set.c 2007-12-15 05:20:07.892290000 +0100
@@ -0,0 +1,2002 @@
+/* Copyright (C) 2000-2002 Joakim Axelsson <gozem@linux.nu>
+ * Patrick Schaaf <bof@bof.de>
+
+module_init(init);
+module_exit(fini);
-diff -Naur linux-old/net/ipv4/netfilter/ip_set_iphash.c linux-new/net/ipv4/netfilter/ip_set_iphash.c
---- linux-old/net/ipv4/netfilter/ip_set_iphash.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-new/net/ipv4/netfilter/ip_set_iphash.c 2005-08-10 22:13:00.000000000 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_set_iphash.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_set_iphash.c 2007-12-15 05:20:07.896290225 +0100
@@ -0,0 +1,379 @@
+/* Copyright (C) 2003-2004 Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
+ *
+
+module_init(init);
+module_exit(fini);
-diff -Naur linux-old/net/ipv4/netfilter/ip_set_ipmap.c linux-new/net/ipv4/netfilter/ip_set_ipmap.c
---- linux-old/net/ipv4/netfilter/ip_set_ipmap.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-new/net/ipv4/netfilter/ip_set_ipmap.c 2005-08-10 22:13:00.000000000 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_set_ipmap.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_set_ipmap.c 2007-12-15 05:20:07.896290225 +0100
@@ -0,0 +1,314 @@
+/* Copyright (C) 2000-2002 Joakim Axelsson <gozem@linux.nu>
+ * Patrick Schaaf <bof@bof.de>
+
+module_init(init);
+module_exit(fini);
-diff -Naur linux-old/net/ipv4/netfilter/ip_set_iptree.c linux-new/net/ipv4/netfilter/ip_set_iptree.c
---- linux-old/net/ipv4/netfilter/ip_set_iptree.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-new/net/ipv4/netfilter/ip_set_iptree.c 2005-08-10 22:13:00.000000000 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_set_iptree.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_set_iptree.c 2007-12-15 05:20:07.896290225 +0100
@@ -0,0 +1,511 @@
+/* Copyright (C) 2005 Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
+ *
+
+module_init(init);
+module_exit(fini);
-diff -Naur linux-old/net/ipv4/netfilter/ip_set_macipmap.c linux-new/net/ipv4/netfilter/ip_set_macipmap.c
---- linux-old/net/ipv4/netfilter/ip_set_macipmap.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-new/net/ipv4/netfilter/ip_set_macipmap.c 2005-08-10 22:13:00.000000000 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_set_macipmap.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_set_macipmap.c 2007-12-15 05:20:07.896290225 +0100
@@ -0,0 +1,340 @@
+/* Copyright (C) 2000-2002 Joakim Axelsson <gozem@linux.nu>
+ * Patrick Schaaf <bof@bof.de>
+
+module_init(init);
+module_exit(fini);
-diff -Naur linux-old/net/ipv4/netfilter/ip_set_nethash.c linux-new/net/ipv4/netfilter/ip_set_nethash.c
---- linux-old/net/ipv4/netfilter/ip_set_nethash.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-new/net/ipv4/netfilter/ip_set_nethash.c 2005-08-10 22:13:00.000000000 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_set_nethash.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_set_nethash.c 2007-12-15 05:20:07.900290454 +0100
@@ -0,0 +1,450 @@
+/* Copyright (C) 2003-2004 Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
+ *
+
+module_init(init);
+module_exit(fini);
-diff -Naur linux-old/net/ipv4/netfilter/ip_set_portmap.c linux-new/net/ipv4/netfilter/ip_set_portmap.c
---- linux-old/net/ipv4/netfilter/ip_set_portmap.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-new/net/ipv4/netfilter/ip_set_portmap.c 2005-08-10 22:13:00.000000000 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_set_portmap.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_set_portmap.c 2007-12-15 05:20:07.900290454 +0100
@@ -0,0 +1,321 @@
+/* Copyright (C) 2003-2004 Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
+ *
+
+module_init(init);
+module_exit(fini);
-diff -Naur linux-old/net/ipv4/netfilter/ipt_set.c linux-new/net/ipv4/netfilter/ipt_set.c
---- linux-old/net/ipv4/netfilter/ipt_set.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-new/net/ipv4/netfilter/ipt_set.c 2005-08-10 22:13:00.000000000 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ipt_set.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ipt_set.c 2007-12-15 05:20:07.900290454 +0100
@@ -0,0 +1,114 @@
+/* Copyright (C) 2000-2002 Joakim Axelsson <gozem@linux.nu>
+ * Patrick Schaaf <bof@bof.de>
+
+module_init(init);
+module_exit(fini);
-diff -Naur linux-old/net/ipv4/netfilter/ipt_SET.c linux-new/net/ipv4/netfilter/ipt_SET.c
---- linux-old/net/ipv4/netfilter/ipt_SET.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-new/net/ipv4/netfilter/ipt_SET.c 2005-08-10 22:13:00.000000000 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ipt_SET.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ipt_SET.c 2007-12-15 05:20:07.900290454 +0100
@@ -0,0 +1,127 @@
+/* Copyright (C) 2000-2002 Joakim Axelsson <gozem@linux.nu>
+ * Patrick Schaaf <bof@bof.de>
+
+module_init(init);
+module_exit(fini);
-diff -Naur linux-old/net/ipv4/netfilter/Makefile linux-new/net/ipv4/netfilter/Makefile
---- linux-old/net/ipv4/netfilter/Makefile 2005-07-23 23:34:46.000000000 +0200
-+++ linux-new/net/ipv4/netfilter/Makefile 2005-08-10 22:13:01.000000000 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Makefile 2007-12-15 05:20:07.568271536 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Makefile 2007-12-15 05:20:07.900290454 +0100
@@ -75,6 +75,18 @@
obj-$(CONFIG_IP_NF_MATCH_HELPER) += ipt_helper.o
obj-$(CONFIG_IP_NF_MATCH_LIMIT) += ipt_limit.o
-diff -urN linux.old/include/linux/netfilter_ipv4/ipt_string.h linux.dev/include/linux/netfilter_ipv4/ipt_string.h
---- linux.old/include/linux/netfilter_ipv4/ipt_string.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/include/linux/netfilter_ipv4/ipt_string.h 2006-11-13 23:33:31.000000000 +0100
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_string.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_string.h 2007-12-15 05:20:08.388318268 +0100
@@ -0,0 +1,18 @@
+#ifndef _IPT_STRING_H
+#define _IPT_STRING_H
+};
+
+#endif /*_IPT_STRING_H*/
-diff -urN linux.old/net/ipv4/netfilter/Config.in linux.dev/net/ipv4/netfilter/Config.in
---- linux.old/net/ipv4/netfilter/Config.in 2006-11-13 23:43:38.000000000 +0100
-+++ linux.dev/net/ipv4/netfilter/Config.in 2006-11-13 23:33:31.000000000 +0100
-@@ -52,6 +52,7 @@
+Index: linux-2.4.35.4/net/ipv4/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Config.in 2007-12-15 05:20:07.892290000 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Config.in 2007-12-15 05:20:08.396318720 +0100
+@@ -63,6 +63,7 @@
fi
if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
dep_tristate ' Unclean match support (EXPERIMENTAL)' CONFIG_IP_NF_MATCH_UNCLEAN $CONFIG_IP_NF_IPTABLES
dep_tristate ' Owner match support (EXPERIMENTAL)' CONFIG_IP_NF_MATCH_OWNER $CONFIG_IP_NF_IPTABLES
dep_tristate ' Layer 7 match support (EXPERIMENTAL)' CONFIG_IP_NF_MATCH_LAYER7 $CONFIG_IP_NF_CONNTRACK
dep_mbool ' Layer 7 debugging output (EXPERIMENTAL)' CONFIG_IP_NF_MATCH_LAYER7_DEBUG $CONFIG_IP_NF_MATCH_LAYER7
-diff -urN linux.old/net/ipv4/netfilter/ipt_string.c linux.dev/net/ipv4/netfilter/ipt_string.c
---- linux.old/net/ipv4/netfilter/ipt_string.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/net/ipv4/netfilter/ipt_string.c 2006-11-14 02:26:03.000000000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ipt_string.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ipt_string.c 2007-12-15 05:20:08.400318949 +0100
@@ -0,0 +1,99 @@
+/* String matching match for iptables
+ *
+
+module_init(init);
+module_exit(fini);
-diff -urN linux.old/net/ipv4/netfilter/Makefile linux.dev/net/ipv4/netfilter/Makefile
---- linux.old/net/ipv4/netfilter/Makefile 2006-11-13 23:43:38.000000000 +0100
-+++ linux.dev/net/ipv4/netfilter/Makefile 2006-11-13 23:33:31.000000000 +0100
-@@ -107,6 +107,7 @@
+Index: linux-2.4.35.4/net/ipv4/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Makefile 2007-12-15 05:20:07.900290454 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Makefile 2007-12-15 05:20:08.400318949 +0100
+@@ -108,6 +108,7 @@
obj-$(CONFIG_IP_NF_MATCH_CONNMARK) += ipt_connmark.o
obj-$(CONFIG_IP_NF_MATCH_CONNTRACK) += ipt_conntrack.o
obj-$(CONFIG_IP_NF_MATCH_UNCLEAN) += ipt_unclean.o
+obj-$(CONFIG_IP_NF_MATCH_STRING) += ipt_string.o
obj-$(CONFIG_IP_NF_MATCH_TCPMSS) += ipt_tcpmss.o
obj-$(CONFIG_IP_NF_MATCH_LAYER7) += ipt_layer7.o
- obj-$(CONFIG_IP_NF_MATCH_CONNBYTES) += ipt_connbytes.o
-diff -urN linux.old/net/ipv4/netfilter/textsearch/textsearch.c linux.dev/net/ipv4/netfilter/textsearch/textsearch.c
---- linux.old/net/ipv4/netfilter/textsearch/textsearch.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/net/ipv4/netfilter/textsearch/textsearch.c 2006-11-14 02:31:47.000000000 +0100
+
+Index: linux-2.4.35.4/net/ipv4/netfilter/textsearch/textsearch.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/textsearch/textsearch.c 2007-12-15 05:20:08.400318949 +0100
@@ -0,0 +1,305 @@
+/*
+ * lib/textsearch.c Generic text search interface
+ kfree(conf);
+}
+
-diff -urN linux.old/net/ipv4/netfilter/textsearch/textsearch.h linux.dev/net/ipv4/netfilter/textsearch/textsearch.h
---- linux.old/net/ipv4/netfilter/textsearch/textsearch.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/net/ipv4/netfilter/textsearch/textsearch.h 2006-11-14 02:11:59.000000000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/textsearch/textsearch.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/textsearch/textsearch.h 2007-12-15 05:20:08.400318949 +0100
@@ -0,0 +1,182 @@
+#ifndef __LINUX_TEXTSEARCH_H
+#define __LINUX_TEXTSEARCH_H
+#endif /* __KERNEL__ */
+
+#endif
-diff -urN linux.old/net/ipv4/netfilter/textsearch/ts_bm.c linux.dev/net/ipv4/netfilter/textsearch/ts_bm.c
---- linux.old/net/ipv4/netfilter/textsearch/ts_bm.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/net/ipv4/netfilter/textsearch/ts_bm.c 2006-11-14 02:22:20.000000000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/textsearch/ts_bm.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/textsearch/ts_bm.c 2007-12-15 05:20:08.400318949 +0100
@@ -0,0 +1,190 @@
+/*
+ * lib/ts_bm.c Boyer-Moore text search implementation
+{
+ textsearch_unregister(&bm_ops);
+}
-diff -urN linux.old/net/ipv4/netfilter/textsearch/ts_kmp.c linux.dev/net/ipv4/netfilter/textsearch/ts_kmp.c
---- linux.old/net/ipv4/netfilter/textsearch/ts_kmp.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/net/ipv4/netfilter/textsearch/ts_kmp.c 2006-11-14 02:22:04.000000000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/textsearch/ts_kmp.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/textsearch/ts_kmp.c 2007-12-15 05:20:08.404319178 +0100
@@ -0,0 +1,141 @@
+/*
+ * lib/ts_kmp.c Knuth-Morris-Pratt text search implementation
---- linux/net/ipv4/netfilter/Config.in.org 2005-11-13 15:53:59.457222512 +0100
-+++ linux/net/ipv4/netfilter/Config.in 2005-11-13 15:56:25.241060000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Config.in 2007-12-15 05:20:08.396318720 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Config.in 2007-12-15 05:20:08.692335591 +0100
@@ -11,6 +11,8 @@
dep_tristate ' Amanda protocol support' CONFIG_IP_NF_AMANDA $CONFIG_IP_NF_CONNTRACK
dep_tristate ' TFTP protocol support' CONFIG_IP_NF_TFTP $CONFIG_IP_NF_CONNTRACK
dep_tristate ' GRE protocol support' CONFIG_IP_NF_CT_PROTO_GRE $CONFIG_IP_NF_CONNTRACK
dep_tristate ' PPTP protocol support' CONFIG_IP_NF_PPTP $CONFIG_IP_NF_CT_PROTO_GRE
fi
---- linux/net/ipv4/netfilter/Makefile.org 2005-11-12 16:48:38.000000000 +0100
-+++ linux/net/ipv4/netfilter/Makefile 2005-11-13 15:56:38.663019552 +0100
-@@ -94,6 +94,7 @@
+Index: linux-2.4.35.4/net/ipv4/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Makefile 2007-12-15 05:20:08.400318949 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Makefile 2007-12-15 05:20:08.696335817 +0100
+@@ -106,6 +106,7 @@
obj-$(CONFIG_IP_NF_MATCH_TTL) += ipt_ttl.o
obj-$(CONFIG_IP_NF_MATCH_STATE) += ipt_state.o
obj-$(CONFIG_IP_NF_MATCH_CONNMARK) += ipt_connmark.o
+obj-$(CONFIG_IP_NF_MATCH_CONNBYTES) += ipt_connbytes.o
obj-$(CONFIG_IP_NF_MATCH_CONNTRACK) += ipt_conntrack.o
obj-$(CONFIG_IP_NF_MATCH_UNCLEAN) += ipt_unclean.o
- obj-$(CONFIG_IP_NF_MATCH_TCPMSS) += ipt_tcpmss.o
---- linux/net/ipv4/netfilter/ip_conntrack_amanda.c.org 2004-02-18 14:36:32.000000000 +0100
-+++ linux/net/ipv4/netfilter/ip_conntrack_amanda.c 2005-11-13 15:40:00.000000000 +0100
+ obj-$(CONFIG_IP_NF_MATCH_STRING) += ipt_string.o
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_amanda.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/ip_conntrack_amanda.c 2007-12-15 05:19:37.650566622 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_amanda.c 2007-12-15 05:20:08.700336046 +0100
@@ -75,7 +75,7 @@
/* increase the UDP timeout of the master connection as replies from
/* Search for "CONNECT " string */
do {
---- linux/net/ipv4/netfilter/ip_conntrack_proto_tcp.c.org 2003-11-28 19:26:21.000000000 +0100
-+++ linux/net/ipv4/netfilter/ip_conntrack_proto_tcp.c 2005-11-13 15:45:41.045992536 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_proto_tcp.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/ip_conntrack_proto_tcp.c 2007-12-15 05:19:37.658567077 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_proto_tcp.c 2007-12-15 05:20:08.700336046 +0100
@@ -211,7 +211,7 @@
set_bit(IPS_ASSURED_BIT, &conntrack->status);
}
return NF_ACCEPT;
---- linux/net/ipv4/netfilter/ip_conntrack_proto_udp.c.org 2003-11-28 19:26:21.000000000 +0100
-+++ linux/net/ipv4/netfilter/ip_conntrack_proto_udp.c 2005-11-13 15:47:38.348159896 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_proto_udp.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/ip_conntrack_proto_udp.c 2007-12-15 05:19:37.666567533 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_proto_udp.c 2007-12-15 05:20:08.700336046 +0100
@@ -47,16 +47,16 @@
/* Returns verdict for packet, and may modify conntracktype */
static int udp_packet(struct ip_conntrack *conntrack,
return NF_ACCEPT;
}
---- linux/net/ipv4/netfilter/ip_conntrack_standalone.c.org 2005-11-12 16:48:38.000000000 +0100
-+++ linux/net/ipv4/netfilter/ip_conntrack_standalone.c 2005-11-13 15:51:07.608347512 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_standalone.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/ip_conntrack_standalone.c 2007-12-15 05:20:07.568271536 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_standalone.c 2007-12-15 05:20:08.700336046 +0100
@@ -79,6 +79,18 @@
return len;
}
EXPORT_SYMBOL(ip_ct_find_proto);
EXPORT_SYMBOL(__ip_ct_find_proto);
EXPORT_SYMBOL(ip_ct_find_helper);
---- linux/net/ipv4/netfilter/ip_conntrack_proto_generic.c.org 2003-11-28 19:26:21.000000000 +0100
-+++ linux/net/ipv4/netfilter/ip_conntrack_proto_generic.c 2005-11-13 15:44:20.734201784 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_proto_generic.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/ip_conntrack_proto_generic.c 2007-12-15 05:19:37.682568446 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_proto_generic.c 2007-12-15 05:20:08.700336046 +0100
@@ -41,9 +41,9 @@
/* Returns verdict for packet, or -1 for invalid. */
static int established(struct ip_conntrack *conntrack,
return NF_ACCEPT;
}
---- linux/net/ipv4/netfilter/ip_conntrack_proto_icmp.c.org 2003-11-28 19:26:21.000000000 +0100
-+++ linux/net/ipv4/netfilter/ip_conntrack_proto_icmp.c 2005-11-13 15:44:50.733641176 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_proto_icmp.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/ip_conntrack_proto_icmp.c 2007-12-15 05:19:37.686568672 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_proto_icmp.c 2007-12-15 05:20:08.704336275 +0100
@@ -82,7 +82,7 @@
ct->timeout.function((unsigned long)ct);
} else {
}
return NF_ACCEPT;
---- linux/net/ipv4/netfilter/ip_conntrack_core.c.org 2005-11-12 16:48:38.000000000 +0100
-+++ linux/net/ipv4/netfilter/ip_conntrack_core.c 2005-11-13 15:43:23.882844504 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_core.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/ip_conntrack_core.c 2007-12-15 05:20:07.568271536 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_core.c 2007-12-15 05:20:08.704336275 +0100
@@ -1196,22 +1196,40 @@
MOD_DEC_USE_COUNT;
}
WRITE_UNLOCK(&ip_conntrack_lock);
}
---- linux/include/linux/netfilter_ipv4/ip_conntrack.h.org 2005-11-12 16:48:38.000000000 +0100
-+++ linux/include/linux/netfilter_ipv4/ip_conntrack.h 2005-11-13 15:39:04.000000000 +0100
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/netfilter_ipv4/ip_conntrack.h 2007-12-15 05:20:07.552270623 +0100
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack.h 2007-12-15 05:20:08.704336275 +0100
@@ -164,6 +164,12 @@
union ip_conntrack_expect_help help;
};
/* These are for NAT. Icky. */
/* Call me when a conntrack is destroyed. */
---- linux/net/ipv4/netfilter/ipt_connbytes.c.org 1970-01-01 01:00:00.000000000 +0100
-+++ linux/net/ipv4/netfilter/ipt_connbytes.c 2005-11-13 16:22:02.021433872 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ipt_connbytes.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ipt_connbytes.c 2007-12-15 05:20:08.704336275 +0100
@@ -0,0 +1,163 @@
+/* Kernel module to match connection tracking byte counter.
+ * GPL (C) 2002 Martin Devera (devik@cdi.cz).
+module_init(init);
+module_exit(fini);
+MODULE_LICENSE("GPL");
---- linux/include/linux/netfilter_ipv4/ipt_connbytes.h.org 1970-01-01 01:00:00.000000000 +0100
-+++ linux/include/linux/netfilter_ipv4/ipt_connbytes.h 2005-11-13 16:11:24.567341624 +0100
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_connbytes.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_connbytes.h 2007-12-15 05:20:08.708336505 +0100
@@ -0,0 +1,25 @@
+#ifndef _IPT_CONNBYTES_H
+#define _IPT_CONNBYTES_H
+};
+
+#endif
---- linux-2.4.32/net/ipv4/netfilter/ip_conntrack_proto_gre.c 2006-02-04 19:16:25.000000000 +0100
-+++ /home/florian//openwrt/trunk/openwrt/build_mipsel/linux/net/ipv4/netfilter/ip_conntrack_proto_gre.c 2006-02-04 18:19:08.000000000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_proto_gre.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/ip_conntrack_proto_gre.c 2007-12-15 05:20:06.404205198 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_proto_gre.c 2007-12-15 05:20:08.708336505 +0100
@@ -237,16 +237,16 @@
/* Returns verdict for packet, and may modify conntrack */
static int gre_packet(struct ip_conntrack *ct,
-diff -ruN linux-2.4.30-old/Documentation/Configure.help linux-2.4.30-new/Documentation/Configure.help
---- linux-2.4.30-old/Documentation/Configure.help 2005-11-13 21:52:27.000000000 +0100
-+++ linux-2.4.30-new/Documentation/Configure.help 2005-11-13 22:20:15.000000000 +0100
+Index: linux-2.4.35.4/Documentation/Configure.help
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/Configure.help 2007-12-15 05:20:07.880289314 +0100
++++ linux-2.4.35.4/Documentation/Configure.help 2007-12-15 05:20:09.280369103 +0100
@@ -2979,6 +2979,14 @@
If you want to compile it as a module, say M here and read
<file:Documentation/modules.txt>. If unsure, say `N'.
Multiple port match support
CONFIG_IP6_NF_MATCH_MULTIPORT
Multiport matching allows you to match TCP or UDP packets based on
-diff -ruN linux-2.4.30-old/include/linux/netfilter_ipv4/ipt_condition.h linux-2.4.30-new/include/linux/netfilter_ipv4/ipt_condition.h
---- linux-2.4.30-old/include/linux/netfilter_ipv4/ipt_condition.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.30-new/include/linux/netfilter_ipv4/ipt_condition.h 2005-11-13 22:20:14.000000000 +0100
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_condition.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_condition.h 2007-12-15 05:20:09.296370013 +0100
@@ -0,0 +1,11 @@
+#ifndef __IPT_CONDITION_MATCH__
+#define __IPT_CONDITION_MATCH__
+};
+
+#endif
-diff -ruN linux-2.4.30-old/include/linux/netfilter_ipv6/ip6t_condition.h linux-2.4.30-new/include/linux/netfilter_ipv6/ip6t_condition.h
---- linux-2.4.30-old/include/linux/netfilter_ipv6/ip6t_condition.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.30-new/include/linux/netfilter_ipv6/ip6t_condition.h 2005-11-13 22:20:14.000000000 +0100
+Index: linux-2.4.35.4/include/linux/netfilter_ipv6/ip6t_condition.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv6/ip6t_condition.h 2007-12-15 05:20:09.300370243 +0100
@@ -0,0 +1,11 @@
+#ifndef __IP6T_CONDITION_MATCH__
+#define __IP6T_CONDITION_MATCH__
+};
+
+#endif
-diff -ruN linux-2.4.30-old/net/ipv4/netfilter/Config.in linux-2.4.30-new/net/ipv4/netfilter/Config.in
---- linux-2.4.30-old/net/ipv4/netfilter/Config.in 2005-11-13 21:52:27.000000000 +0100
-+++ linux-2.4.30-new/net/ipv4/netfilter/Config.in 2005-11-13 22:20:15.000000000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Config.in 2007-12-15 05:20:08.692335591 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Config.in 2007-12-15 05:20:09.300370243 +0100
@@ -43,6 +43,7 @@
dep_tristate ' netfilter MARK match support' CONFIG_IP_NF_MATCH_MARK $CONFIG_IP_NF_IPTABLES
dep_tristate ' Multiple port match support' CONFIG_IP_NF_MATCH_MULTIPORT $CONFIG_IP_NF_IPTABLES
dep_tristate ' recent match support' CONFIG_IP_NF_MATCH_RECENT $CONFIG_IP_NF_IPTABLES
dep_tristate ' ECN match support' CONFIG_IP_NF_MATCH_ECN $CONFIG_IP_NF_IPTABLES
dep_tristate ' peer to peer traffic match support' CONFIG_IP_NF_MATCH_IPP2P $CONFIG_IP_NF_IPTABLES
-diff -ruN linux-2.4.30-old/net/ipv4/netfilter/Makefile linux-2.4.30-new/net/ipv4/netfilter/Makefile
---- linux-2.4.30-old/net/ipv4/netfilter/Makefile 2005-11-13 21:52:27.000000000 +0100
-+++ linux-2.4.30-new/net/ipv4/netfilter/Makefile 2005-11-13 22:20:15.000000000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Makefile 2007-12-15 05:20:08.696335817 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Makefile 2007-12-15 05:20:09.300370243 +0100
@@ -94,6 +94,7 @@
obj-$(CONFIG_IP_NF_MATCH_MULTIPORT) += ipt_multiport.o
obj-$(CONFIG_IP_NF_MATCH_OWNER) += ipt_owner.o
obj-$(CONFIG_IP_NF_MATCH_RECENT) += ipt_recent.o
-diff -ruN linux-2.4.30-old/net/ipv4/netfilter/ipt_condition.c linux-2.4.30-new/net/ipv4/netfilter/ipt_condition.c
---- linux-2.4.30-old/net/ipv4/netfilter/ipt_condition.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.30-new/net/ipv4/netfilter/ipt_condition.c 2005-11-13 22:20:14.000000000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ipt_condition.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ipt_condition.c 2007-12-15 05:20:09.300370243 +0100
@@ -0,0 +1,256 @@
+/*-------------------------------------------*\
+| Netfilter Condition Module |
+
+module_init(init);
+module_exit(fini);
-diff -ruN linux-2.4.30-old/net/ipv6/netfilter/Config.in linux-2.4.30-new/net/ipv6/netfilter/Config.in
---- linux-2.4.30-old/net/ipv6/netfilter/Config.in 2003-06-13 16:51:39.000000000 +0200
-+++ linux-2.4.30-new/net/ipv6/netfilter/Config.in 2005-11-13 22:20:15.000000000 +0100
+Index: linux-2.4.35.4/net/ipv6/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv6/netfilter/Config.in 2007-12-15 05:19:37.590563202 +0100
++++ linux-2.4.35.4/net/ipv6/netfilter/Config.in 2007-12-15 05:20:09.300370243 +0100
@@ -17,6 +17,7 @@
if [ "$CONFIG_IP6_NF_IPTABLES" != "n" ]; then
# The simple matches.
dep_tristate ' MAC address match support' CONFIG_IP6_NF_MATCH_MAC $CONFIG_IP6_NF_IPTABLES
if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
dep_tristate ' Routing header match support (EXPERIMENTAL)' CONFIG_IP6_NF_MATCH_RT $CONFIG_IP6_NF_IPTABLES
-diff -ruN linux-2.4.30-old/net/ipv6/netfilter/Makefile linux-2.4.30-new/net/ipv6/netfilter/Makefile
---- linux-2.4.30-old/net/ipv6/netfilter/Makefile 2003-06-13 16:51:39.000000000 +0200
-+++ linux-2.4.30-new/net/ipv6/netfilter/Makefile 2005-11-13 22:20:15.000000000 +0100
+Index: linux-2.4.35.4/net/ipv6/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv6/netfilter/Makefile 2007-12-15 05:19:37.598563658 +0100
++++ linux-2.4.35.4/net/ipv6/netfilter/Makefile 2007-12-15 05:20:09.304370470 +0100
@@ -14,6 +14,7 @@
# Link order matters here.
obj-$(CONFIG_IP6_NF_IPTABLES) += ip6_tables.o
obj-$(CONFIG_IP6_NF_MATCH_MARK) += ip6t_mark.o
obj-$(CONFIG_IP6_NF_MATCH_LENGTH) += ip6t_length.o
obj-$(CONFIG_IP6_NF_MATCH_MAC) += ip6t_mac.o
-diff -ruN linux-2.4.30-old/net/ipv6/netfilter/ip6t_condition.c linux-2.4.30-new/net/ipv6/netfilter/ip6t_condition.c
---- linux-2.4.30-old/net/ipv6/netfilter/ip6t_condition.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.30-new/net/ipv6/netfilter/ip6t_condition.c 2005-11-13 22:20:14.000000000 +0100
+Index: linux-2.4.35.4/net/ipv6/netfilter/ip6t_condition.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv6/netfilter/ip6t_condition.c 2007-12-15 05:20:09.304370470 +0100
@@ -0,0 +1,254 @@
+/*-------------------------------------------*\
+| Netfilter Condition Module for IPv6 |
-diff -ruN linux-2.4.30-old/Documentation/Configure.help linux-2.4.30-new/Documentation/Configure.help
---- linux-2.4.30-old/Documentation/Configure.help 2005-11-13 22:30:42.000000000 +0100
-+++ linux-2.4.30-new/Documentation/Configure.help 2005-11-13 22:31:17.000000000 +0100
+Index: linux-2.4.35.4/Documentation/Configure.help
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/Configure.help 2007-12-15 05:20:09.280369103 +0100
++++ linux-2.4.35.4/Documentation/Configure.help 2007-12-15 05:20:09.632389161 +0100
@@ -2888,6 +2888,13 @@
If you want to compile it as a module, say M here and read
<file:Documentation/modules.txt>. If unsure, say `N'.
skb->pkt_type packet match support
CONFIG_IP_NF_MATCH_PKTTYPE
This patch allows you to match packet in accrodance
-diff -ruN linux-2.4.30-old/include/linux/netfilter_ipv4/ipt_quota.h linux-2.4.30-new/include/linux/netfilter_ipv4/ipt_quota.h
---- linux-2.4.30-old/include/linux/netfilter_ipv4/ipt_quota.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.30-new/include/linux/netfilter_ipv4/ipt_quota.h 2005-11-13 22:31:17.000000000 +0100
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_quota.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_quota.h 2007-12-15 05:20:09.636389390 +0100
@@ -0,0 +1,12 @@
+#ifndef _IPT_QUOTA_H
+#define _IPT_QUOTA_H
+};
+
+#endif /*_IPT_QUOTA_H*/
-diff -ruN linux-2.4.30-old/net/ipv4/netfilter/Config.in linux-2.4.30-new/net/ipv4/netfilter/Config.in
---- linux-2.4.30-old/net/ipv4/netfilter/Config.in 2005-11-13 22:30:42.000000000 +0100
-+++ linux-2.4.30-new/net/ipv4/netfilter/Config.in 2005-11-13 22:31:17.000000000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Config.in 2007-12-15 05:20:09.300370243 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Config.in 2007-12-15 05:20:09.644389846 +0100
@@ -24,6 +24,7 @@
if [ "$CONFIG_IP_NF_IPTABLES" != "n" ]; then
# The simple matches.
dep_tristate ' IP set support' CONFIG_IP_NF_SET $CONFIG_IP_NF_IPTABLES
if [ "$CONFIG_IP_NF_SET" != "n" ]; then
-diff -ruN linux-2.4.30-old/net/ipv4/netfilter/Makefile linux-2.4.30-new/net/ipv4/netfilter/Makefile
---- linux-2.4.30-old/net/ipv4/netfilter/Makefile 2005-11-13 22:30:42.000000000 +0100
-+++ linux-2.4.30-new/net/ipv4/netfilter/Makefile 2005-11-13 22:31:17.000000000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Makefile 2007-12-15 05:20:09.300370243 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Makefile 2007-12-15 05:20:09.644389846 +0100
@@ -74,6 +74,7 @@
# matches
obj-$(CONFIG_IP_NF_MATCH_HELPER) += ipt_helper.o
obj-$(CONFIG_IP_NF_MATCH_MARK) += ipt_mark.o
obj-$(CONFIG_IP_NF_MATCH_SET) += ipt_set.o
obj-$(CONFIG_IP_NF_TARGET_SET) += ipt_SET.o
-diff -ruN linux-2.4.30-old/net/ipv4/netfilter/ipt_quota.c linux-2.4.30-new/net/ipv4/netfilter/ipt_quota.c
---- linux-2.4.30-old/net/ipv4/netfilter/ipt_quota.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.30-new/net/ipv4/netfilter/ipt_quota.c 2005-11-13 22:31:17.000000000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ipt_quota.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ipt_quota.c 2007-12-15 05:20:09.644389846 +0100
@@ -0,0 +1,88 @@
+/*
+ * netfilter module to enforce network quotas
-diff -urN linux-2.4.32/net/ipv4/netfilter/Config.in linux-2.4.32.new/net/ipv4/netfilter/Config.in
---- linux-2.4.32/net/ipv4/netfilter/Config.in 2006-03-01 00:49:36.652505800 +0100
-+++ linux-2.4.32.new/net/ipv4/netfilter/Config.in 2006-03-01 00:50:18.692114808 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Config.in 2007-12-15 05:20:09.644389846 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Config.in 2007-12-15 05:20:09.916405347 +0100
@@ -15,6 +15,7 @@
dep_tristate ' Connection byte counter support' CONFIG_IP_NF_MATCH_CONNBYTES $CONFIG_IP_NF_CT_ACCT $CONFIG_IP_NF_CONNTRACK $CONFIG_IP_NF_IPTABLES
dep_tristate ' GRE protocol support' CONFIG_IP_NF_CT_PROTO_GRE $CONFIG_IP_NF_CONNTRACK
fi
if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
-@@ -111,6 +112,13 @@
+@@ -110,6 +111,13 @@
define_tristate CONFIG_IP_NF_NAT_AMANDA $CONFIG_IP_NF_NAT
fi
fi
if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
dep_tristate ' Basic SNMP-ALG support (EXPERIMENTAL)' CONFIG_IP_NF_NAT_SNMP_BASIC $CONFIG_IP_NF_NAT
fi
-diff -urN linux-2.4.32/net/ipv4/netfilter/Makefile linux-2.4.32.new/net/ipv4/netfilter/Makefile
---- linux-2.4.32/net/ipv4/netfilter/Makefile 2006-03-01 00:49:36.654505496 +0100
-+++ linux-2.4.32.new/net/ipv4/netfilter/Makefile 2006-03-01 00:50:18.693114656 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Makefile 2007-12-15 05:20:09.644389846 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Makefile 2007-12-15 05:20:09.916405347 +0100
@@ -53,6 +53,10 @@
ifdef CONFIG_IP_NF_NAT_PPTP
export-objs += ip_conntrack_pptp.o
# generic IP tables
obj-$(CONFIG_IP_NF_IPTABLES) += ip_tables.o
-diff -urN linux-2.4.32/net/ipv4/netfilter/ip_conntrack_h323.c linux-2.4.32.new/net/ipv4/netfilter/ip_conntrack_h323.c
---- linux-2.4.32/net/ipv4/netfilter/ip_conntrack_h323.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32.new/net/ipv4/netfilter/ip_conntrack_h323.c 2006-03-01 00:50:18.694114504 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_h323.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_h323.c 2007-12-15 05:20:09.920405577 +0100
@@ -0,0 +1,302 @@
+/*
+ * H.323 'brute force' extension for H.323 connection tracking.
+
+module_init(init);
+module_exit(fini);
-diff -urN linux-2.4.32/net/ipv4/netfilter/ip_nat_h323.c linux-2.4.32.new/net/ipv4/netfilter/ip_nat_h323.c
---- linux-2.4.32/net/ipv4/netfilter/ip_nat_h323.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32.new/net/ipv4/netfilter/ip_nat_h323.c 2006-03-01 00:50:18.698113896 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_nat_h323.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_nat_h323.c 2007-12-15 05:20:09.920405577 +0100
@@ -0,0 +1,403 @@
+/*
+ * H.323 'brute force' extension for NAT alteration.
+
+module_init(init);
+module_exit(fini);
-diff -urN linux-2.4.32/include/linux/netfilter_ipv4/ip_conntrack.h linux-2.4.32.new/include/linux/netfilter_ipv4/ip_conntrack.h
---- linux-2.4.32/include/linux/netfilter_ipv4/ip_conntrack.h 2006-03-01 00:49:36.474532856 +0100
-+++ linux-2.4.32.new/include/linux/netfilter_ipv4/ip_conntrack.h 2006-03-01 00:50:18.699113744 +0100
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/netfilter_ipv4/ip_conntrack.h 2007-12-15 05:20:08.704336275 +0100
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack.h 2007-12-15 05:20:09.920405577 +0100
@@ -71,6 +71,7 @@
#include <linux/netfilter_ipv4/ip_conntrack_ftp.h>
#include <linux/netfilter_ipv4/ip_conntrack_irc.h>
};
#ifdef CONFIG_IP_NF_NAT_NEEDED
-diff -urN linux-2.4.32/include/linux/netfilter_ipv4/ip_conntrack_h323.h linux-2.4.32.new/include/linux/netfilter_ipv4/ip_conntrack_h323.h
---- linux-2.4.32/include/linux/netfilter_ipv4/ip_conntrack_h323.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32.new/include/linux/netfilter_ipv4/ip_conntrack_h323.h 2006-03-01 00:50:18.700113592 +0100
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack_h323.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack_h323.h 2007-12-15 05:20:09.920405577 +0100
@@ -0,0 +1,30 @@
+#ifndef _IP_CONNTRACK_H323_H
+#define _IP_CONNTRACK_H323_H
-diff -urN linux-2.4.32/net/ipv4/netfilter/Config.in linux-2.4.32.new/net/ipv4/netfilter/Config.in
---- linux-2.4.32/net/ipv4/netfilter/Config.in 2006-03-01 00:53:57.884792456 +0100
-+++ linux-2.4.32.new/net/ipv4/netfilter/Config.in 2006-03-01 00:55:14.462150928 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Config.in 2007-12-15 05:20:09.916405347 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Config.in 2007-12-15 05:20:10.196421304 +0100
@@ -16,6 +16,7 @@
dep_tristate ' GRE protocol support' CONFIG_IP_NF_CT_PROTO_GRE $CONFIG_IP_NF_CONNTRACK
dep_tristate ' PPTP protocol support' CONFIG_IP_NF_PPTP $CONFIG_IP_NF_CT_PROTO_GRE
fi
if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
-@@ -119,6 +120,13 @@
+@@ -118,6 +119,13 @@
define_tristate CONFIG_IP_NF_NAT_H323 $CONFIG_IP_NF_NAT
fi
fi
if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
dep_tristate ' Basic SNMP-ALG support (EXPERIMENTAL)' CONFIG_IP_NF_NAT_SNMP_BASIC $CONFIG_IP_NF_NAT
fi
-diff -urN linux-2.4.32/net/ipv4/netfilter/Makefile linux-2.4.32.new/net/ipv4/netfilter/Makefile
---- linux-2.4.32/net/ipv4/netfilter/Makefile 2006-03-01 00:53:57.886792152 +0100
-+++ linux-2.4.32.new/net/ipv4/netfilter/Makefile 2006-03-01 00:55:14.463150776 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Makefile 2007-12-15 05:20:09.916405347 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Makefile 2007-12-15 05:20:10.196421304 +0100
@@ -57,6 +57,11 @@
ifdef CONFIG_IP_NF_NAT_H323
export-objs += ip_conntrack_h323.o
# generic IP tables
obj-$(CONFIG_IP_NF_IPTABLES) += ip_tables.o
-diff -urN linux-2.4.32/net/ipv4/netfilter/ip_conntrack_rtsp.c linux-2.4.32.new/net/ipv4/netfilter/ip_conntrack_rtsp.c
---- linux-2.4.32/net/ipv4/netfilter/ip_conntrack_rtsp.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32.new/net/ipv4/netfilter/ip_conntrack_rtsp.c 2006-03-01 00:55:14.465150472 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_rtsp.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_rtsp.c 2007-12-15 05:20:10.200421534 +0100
@@ -0,0 +1,507 @@
+/*
+ * RTSP extension for IP connection tracking
+
+module_init(init);
+module_exit(fini);
-diff -urN linux-2.4.32/net/ipv4/netfilter/ip_nat_rtsp.c linux-2.4.32.new/net/ipv4/netfilter/ip_nat_rtsp.c
---- linux-2.4.32/net/ipv4/netfilter/ip_nat_rtsp.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32.new/net/ipv4/netfilter/ip_nat_rtsp.c 2006-03-01 00:55:14.467150168 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_nat_rtsp.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_nat_rtsp.c 2007-12-15 05:20:10.200421534 +0100
@@ -0,0 +1,621 @@
+/*
+ * RTSP extension for TCP NAT alteration
+
+module_init(init);
+module_exit(fini);
---- linux-2.4.32/arch/mips/kernel/mips_ksyms.c 2006-03-01 00:49:34.142887320 +0100
-+++ linux-2.4.32.new/arch/mips/kernel/mips_ksyms.c 2006-03-01 00:55:14.469149864 +0100
+Index: linux-2.4.35.4/arch/mips/kernel/mips_ksyms.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/kernel/mips_ksyms.c 2007-12-15 05:19:54.695537960 +0100
++++ linux-2.4.35.4/arch/mips/kernel/mips_ksyms.c 2007-12-15 05:20:10.200421534 +0100
@@ -52,6 +52,7 @@
/*
* String functions
EXPORT_SYMBOL_NOVERS(memcmp);
EXPORT_SYMBOL_NOVERS(memset);
EXPORT_SYMBOL_NOVERS(memcpy);
-diff -urN linux-2.4.32/include/linux/netfilter_helpers.h linux-2.4.32.new/include/linux/netfilter_helpers.h
---- linux-2.4.32/include/linux/netfilter_helpers.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32.new/include/linux/netfilter_helpers.h 2006-03-01 00:55:14.470149712 +0100
+Index: linux-2.4.35.4/include/linux/netfilter_helpers.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_helpers.h 2007-12-15 05:20:10.200421534 +0100
@@ -0,0 +1,133 @@
+/*
+ * Helpers for netfiler modules. This file provides implementations for basic
+#endif /* __KERNEL__ */
+
+#endif /* _NETFILTER_HELPERS_H */
-diff -urN linux-2.4.32/include/linux/netfilter_ipv4/ip_conntrack_rtsp.h linux-2.4.32.new/include/linux/netfilter_ipv4/ip_conntrack_rtsp.h
---- linux-2.4.32/include/linux/netfilter_ipv4/ip_conntrack_rtsp.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32.new/include/linux/netfilter_ipv4/ip_conntrack_rtsp.h 2006-03-01 00:55:14.472149408 +0100
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack_rtsp.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack_rtsp.h 2007-12-15 05:20:10.200421534 +0100
@@ -0,0 +1,68 @@
+/*
+ * RTSP extension for IP connection tracking.
+#endif /* __KERNEL__ */
+
+#endif /* _IP_CONNTRACK_RTSP_H */
-diff -urN linux-2.4.32/include/linux/netfilter_mime.h linux-2.4.32.new/include/linux/netfilter_mime.h
---- linux-2.4.32/include/linux/netfilter_mime.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32.new/include/linux/netfilter_mime.h 2006-03-01 00:55:14.473149256 +0100
+Index: linux-2.4.35.4/include/linux/netfilter_mime.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_mime.h 2007-12-15 05:20:10.204421761 +0100
@@ -0,0 +1,90 @@
+/*
+ * MIME functions for netfilter modules. This file provides implementations
+#endif /* __KERNEL__ */
+
+#endif /* _NETFILTER_MIME_H */
---- linux-2.4.32/include/linux/netfilter_ipv4/ip_conntrack.h 2006-03-01 00:53:57.889791696 +0100
-+++ linux-2.4.32.new/include/linux/netfilter_ipv4/ip_conntrack.h 2006-03-01 01:06:32.178122440 +0100
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/netfilter_ipv4/ip_conntrack.h 2007-12-15 05:20:09.920405577 +0100
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack.h 2007-12-15 05:20:10.204421761 +0100
@@ -72,6 +72,7 @@
#include <linux/netfilter_ipv4/ip_conntrack_irc.h>
#include <linux/netfilter_ipv4/ip_conntrack_pptp.h>
-diff -urN linux-2.4.32/net/ipv4/netfilter/Config.in linux-2.4.32.new/net/ipv4/netfilter/Config.in
---- linux-2.4.32/net/ipv4/netfilter/Config.in 2006-03-01 01:12:48.268947944 +0100
-+++ linux-2.4.32.new/net/ipv4/netfilter/Config.in 2006-03-01 01:14:53.455916632 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Config.in 2007-12-15 05:20:10.196421304 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Config.in 2007-12-15 05:20:10.504438857 +0100
@@ -17,6 +17,7 @@
dep_tristate ' PPTP protocol support' CONFIG_IP_NF_PPTP $CONFIG_IP_NF_CT_PROTO_GRE
dep_tristate ' H.323 (netmeeting) support' CONFIG_IP_NF_H323 $CONFIG_IP_NF_CONNTRACK
fi
if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
-@@ -127,6 +128,13 @@
+@@ -126,6 +127,13 @@
define_tristate CONFIG_IP_NF_NAT_RTSP $CONFIG_IP_NF_NAT
fi
fi
if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
dep_tristate ' Basic SNMP-ALG support (EXPERIMENTAL)' CONFIG_IP_NF_NAT_SNMP_BASIC $CONFIG_IP_NF_NAT
fi
-diff -urN linux-2.4.32/net/ipv4/netfilter/Makefile linux-2.4.32.new/net/ipv4/netfilter/Makefile
---- linux-2.4.32/net/ipv4/netfilter/Makefile 2006-03-01 01:12:48.270947640 +0100
-+++ linux-2.4.32.new/net/ipv4/netfilter/Makefile 2006-03-01 01:15:25.263081208 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Makefile 2007-12-15 05:20:10.196421304 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Makefile 2007-12-15 05:20:10.508439083 +0100
@@ -61,6 +61,10 @@
ifdef CONFIG_IP_NF_NAT_RTSP
export-objs += ip_conntrack_rtsp.o
# generic IP tables
obj-$(CONFIG_IP_NF_IPTABLES) += ip_tables.o
-diff -urN linux-2.4.32/net/ipv4/netfilter/ip_conntrack_mms.c linux-2.4.32.new/net/ipv4/netfilter/ip_conntrack_mms.c
---- linux-2.4.32/net/ipv4/netfilter/ip_conntrack_mms.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32.new/net/ipv4/netfilter/ip_conntrack_mms.c 2006-03-01 01:13:32.991149136 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_mms.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_mms.c 2007-12-15 05:20:10.516439541 +0100
@@ -0,0 +1,292 @@
+/* MMS extension for IP connection tracking
+ * (C) 2002 by Filip Sneppe <filip.sneppe@cronos.be>
+
+module_init(init);
+module_exit(fini);
-diff -urN linux-2.4.32/net/ipv4/netfilter/ip_nat_mms.c linux-2.4.32.new/net/ipv4/netfilter/ip_nat_mms.c
---- linux-2.4.32/net/ipv4/netfilter/ip_nat_mms.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32.new/net/ipv4/netfilter/ip_nat_mms.c 2006-03-01 01:13:32.992148984 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_nat_mms.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_nat_mms.c 2007-12-15 05:20:10.516439541 +0100
@@ -0,0 +1,330 @@
+/* MMS extension for TCP NAT alteration.
+ * (C) 2002 by Filip Sneppe <filip.sneppe@cronos.be>
+
+module_init(init);
+module_exit(fini);
-diff -urN linux-2.4.32/include/linux/netfilter_ipv4/ip_conntrack.h linux-2.4.32.new/include/linux/netfilter_ipv4/ip_conntrack.h
---- linux-2.4.32/include/linux/netfilter_ipv4/ip_conntrack.h 2006-03-01 01:12:47.910002512 +0100
-+++ linux-2.4.32.new/include/linux/netfilter_ipv4/ip_conntrack.h 2006-03-01 01:16:16.710260048 +0100
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/netfilter_ipv4/ip_conntrack.h 2007-12-15 05:20:10.204421761 +0100
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack.h 2007-12-15 05:20:10.516439541 +0100
@@ -73,6 +73,7 @@
#include <linux/netfilter_ipv4/ip_conntrack_pptp.h>
#include <linux/netfilter_ipv4/ip_conntrack_h323.h>
};
#ifdef CONFIG_IP_NF_NAT_NEEDED
-diff -urN linux-2.4.32/include/linux/netfilter_ipv4/ip_conntrack_mms.h linux-2.4.32.new/include/linux/netfilter_ipv4/ip_conntrack_mms.h
---- linux-2.4.32/include/linux/netfilter_ipv4/ip_conntrack_mms.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32.new/include/linux/netfilter_ipv4/ip_conntrack_mms.h 2006-03-01 01:13:32.993148832 +0100
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack_mms.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack_mms.h 2007-12-15 05:20:10.516439541 +0100
@@ -0,0 +1,31 @@
+#ifndef _IP_CONNTRACK_MMS_H
+#define _IP_CONNTRACK_MMS_H
-diff -aurN linux-2.4.28-orig/Documentation/Configure.help linux-2.4.28/Documentation/Configure.help
---- linux-2.4.28-orig/Documentation/Configure.help 2004-11-17 11:54:20.000000000 +0000
-+++ linux-2.4.28/Documentation/Configure.help 2004-12-14 11:43:42.000000000 +0000
-@@ -3147,6 +3147,22 @@
+Index: linux-2.4.35.4/Documentation/Configure.help
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/Configure.help 2007-12-15 05:20:09.632389161 +0100
++++ linux-2.4.35.4/Documentation/Configure.help 2007-12-15 05:20:10.792455269 +0100
+@@ -3160,6 +3160,22 @@
If you want to compile it as a module, say M here and read
<file:Documentation/modules.txt>. If unsure, say `N'.
MARK target support
CONFIG_IP_NF_TARGET_MARK
This option adds a `MARK' target, which allows you to create rules
-@@ -9799,6 +9815,20 @@
+@@ -9919,6 +9935,20 @@
say M here and read <file:Documentation/modules.txt>. The module
will be called bonding.o.
SLIP (serial line) support
CONFIG_SLIP
Say Y if you intend to use SLIP or CSLIP (compressed SLIP) to
-diff -aurN linux-2.4.28-orig/drivers/net/Config.in linux-2.4.28/drivers/net/Config.in
---- linux-2.4.28-orig/drivers/net/Config.in 2004-08-07 23:26:04.000000000 +0000
-+++ linux-2.4.28/drivers/net/Config.in 2004-12-14 11:43:42.000000000 +0000
+Index: linux-2.4.35.4/drivers/net/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/drivers/net/Config.in 2007-12-15 05:19:54.067502171 +0100
++++ linux-2.4.35.4/drivers/net/Config.in 2007-12-15 05:20:10.796455498 +0100
@@ -7,6 +7,11 @@
tristate 'Dummy net driver support' CONFIG_DUMMY
tristate 'Bonding driver support' CONFIG_BONDING
+ comment 'IMQ needs CONFIG_NETFILTER enabled'
+fi
tristate 'Universal TUN/TAP device driver support' CONFIG_TUN
+ bool 'Allow Net Devices to contribute to /dev/random' CONFIG_NET_RANDOM
if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
- tristate 'Ethertap network tap (OBSOLETE)' CONFIG_ETHERTAP
-diff -aurN linux-2.4.28-orig/drivers/net/Makefile linux-2.4.28/drivers/net/Makefile
---- linux-2.4.28-orig/drivers/net/Makefile 2004-08-07 23:26:04.000000000 +0000
-+++ linux-2.4.28/drivers/net/Makefile 2004-12-14 11:43:42.000000000 +0000
-@@ -170,6 +170,7 @@
+Index: linux-2.4.35.4/drivers/net/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/drivers/net/Makefile 2007-12-15 05:19:51.931380439 +0100
++++ linux-2.4.35.4/drivers/net/Makefile 2007-12-15 05:20:10.804455954 +0100
+@@ -176,6 +176,7 @@
obj-$(CONFIG_STRIP) += strip.o
obj-$(CONFIG_DUMMY) += dummy.o
obj-$(CONFIG_DE600) += de600.o
obj-$(CONFIG_DE620) += de620.o
obj-$(CONFIG_AT1500) += lance.o
-diff -aurN linux-2.4.28-orig/drivers/net/imq.c linux-2.4.28/drivers/net/imq.c
---- linux-2.4.28-orig/drivers/net/imq.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.4.28/drivers/net/imq.c 2004-12-14 11:43:42.000000000 +0000
+Index: linux-2.4.35.4/drivers/net/imq.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/net/imq.c 2007-12-15 05:20:10.808456180 +0100
@@ -0,0 +1,321 @@
+/*
+ * Pseudo-driver for the intermediate queue device.
+module_init(imq_init_module);
+module_exit(imq_cleanup_module);
+MODULE_LICENSE("GPL");
-diff -aurN linux-2.4.28-orig/include/linux/imq.h linux-2.4.28/include/linux/imq.h
---- linux-2.4.28-orig/include/linux/imq.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.4.28/include/linux/imq.h 2004-12-14 11:43:42.000000000 +0000
+Index: linux-2.4.35.4/include/linux/imq.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/imq.h 2007-12-15 05:20:10.808456180 +0100
@@ -0,0 +1,9 @@
+#ifndef _IMQ_H
+#define _IMQ_H
+#define IMQ_F_ENQUEUE 0x80
+
+#endif /* _IMQ_H */
-diff -aurN linux-2.4.28-orig/include/linux/netfilter_ipv4/ipt_IMQ.h linux-2.4.28/include/linux/netfilter_ipv4/ipt_IMQ.h
---- linux-2.4.28-orig/include/linux/netfilter_ipv4/ipt_IMQ.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.4.28/include/linux/netfilter_ipv4/ipt_IMQ.h 2004-12-14 11:43:42.000000000 +0000
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_IMQ.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_IMQ.h 2007-12-15 05:20:10.808456180 +0100
@@ -0,0 +1,8 @@
+#ifndef _IPT_IMQ_H
+#define _IPT_IMQ_H
+};
+
+#endif /* _IPT_IMQ_H */
-diff -aurN linux-2.4.28-orig/include/linux/netfilter_ipv6/ip6t_IMQ.h linux-2.4.28/include/linux/netfilter_ipv6/ip6t_IMQ.h
---- linux-2.4.28-orig/include/linux/netfilter_ipv6/ip6t_IMQ.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.4.28/include/linux/netfilter_ipv6/ip6t_IMQ.h 2004-12-14 11:43:42.000000000 +0000
+Index: linux-2.4.35.4/include/linux/netfilter_ipv6/ip6t_IMQ.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv6/ip6t_IMQ.h 2007-12-15 05:20:10.808456180 +0100
@@ -0,0 +1,8 @@
+#ifndef _IP6T_IMQ_H
+#define _IP6T_IMQ_H
+};
+
+#endif /* _IP6T_IMQ_H */
-diff -aurN linux-2.4.28-orig/include/linux/skbuff.h linux-2.4.28/include/linux/skbuff.h
---- linux-2.4.28-orig/include/linux/skbuff.h 2004-08-07 23:26:06.000000000 +0000
-+++ linux-2.4.28/include/linux/skbuff.h 2004-12-14 11:43:42.000000000 +0000
+Index: linux-2.4.35.4/include/linux/skbuff.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/skbuff.h 2007-12-15 05:20:05.060128604 +0100
++++ linux-2.4.35.4/include/linux/skbuff.h 2007-12-15 05:20:10.808456180 +0100
@@ -93,6 +93,9 @@
struct nf_conntrack *master;
};
};
#ifdef __KERNEL__
-diff -aurN linux-2.4.28-orig/net/core/skbuff.c linux-2.4.28/net/core/skbuff.c
---- linux-2.4.28-orig/net/core/skbuff.c 2003-08-25 11:44:44.000000000 +0000
-+++ linux-2.4.28/net/core/skbuff.c 2004-12-14 11:43:42.000000000 +0000
+Index: linux-2.4.35.4/net/core/skbuff.c
+===================================================================
+--- linux-2.4.35.4.orig/net/core/skbuff.c 2007-12-15 05:19:37.174539496 +0100
++++ linux-2.4.35.4/net/core/skbuff.c 2007-12-15 05:20:10.812456409 +0100
@@ -202,6 +202,10 @@
/* Set up other state */
skb->len = 0;
}
/**
-diff -aurN linux-2.4.28-orig/net/ipv4/netfilter/Config.in linux-2.4.28/net/ipv4/netfilter/Config.in
---- linux-2.4.28-orig/net/ipv4/netfilter/Config.in 2003-08-25 11:44:44.000000000 +0000
-+++ linux-2.4.28/net/ipv4/netfilter/Config.in 2004-12-14 11:43:43.000000000 +0000
-@@ -104,6 +104,7 @@
+Index: linux-2.4.35.4/net/ipv4/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Config.in 2007-12-15 05:20:10.504438857 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Config.in 2007-12-15 05:20:10.812456409 +0100
+@@ -171,6 +171,7 @@
dep_tristate ' DSCP target support' CONFIG_IP_NF_TARGET_DSCP $CONFIG_IP_NF_MANGLE
dep_tristate ' MARK target support' CONFIG_IP_NF_TARGET_MARK $CONFIG_IP_NF_MANGLE
+ dep_tristate ' IMQ target support' CONFIG_IP_NF_TARGET_IMQ $CONFIG_IP_NF_MANGLE
fi
- dep_tristate ' LOG target support' CONFIG_IP_NF_TARGET_LOG $CONFIG_IP_NF_IPTABLES
- dep_tristate ' ULOG target support' CONFIG_IP_NF_TARGET_ULOG $CONFIG_IP_NF_IPTABLES
-diff -aurN linux-2.4.28-orig/net/ipv4/netfilter/Makefile linux-2.4.28/net/ipv4/netfilter/Makefile
---- linux-2.4.28-orig/net/ipv4/netfilter/Makefile 2003-08-25 11:44:44.000000000 +0000
-+++ linux-2.4.28/net/ipv4/netfilter/Makefile 2004-12-14 11:43:43.000000000 +0000
-@@ -94,6 +94,7 @@
+ if [ "$CONFIG_IP_NF_CONNTRACK_MARK" != "n" ]; then
+ dep_tristate ' CONNMARK target support' CONFIG_IP_NF_TARGET_CONNMARK $CONFIG_IP_NF_IPTABLES
+Index: linux-2.4.35.4/net/ipv4/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Makefile 2007-12-15 05:20:10.508439083 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Makefile 2007-12-15 05:20:10.812456409 +0100
+@@ -138,6 +138,7 @@
obj-$(CONFIG_IP_NF_TARGET_ECN) += ipt_ECN.o
obj-$(CONFIG_IP_NF_TARGET_DSCP) += ipt_DSCP.o
obj-$(CONFIG_IP_NF_TARGET_MARK) += ipt_MARK.o
+obj-$(CONFIG_IP_NF_TARGET_IMQ) += ipt_IMQ.o
obj-$(CONFIG_IP_NF_TARGET_MASQUERADE) += ipt_MASQUERADE.o
obj-$(CONFIG_IP_NF_TARGET_REDIRECT) += ipt_REDIRECT.o
- obj-$(CONFIG_IP_NF_NAT_SNMP_BASIC) += ip_nat_snmp_basic.o
-diff -aurN linux-2.4.28-orig/net/ipv4/netfilter/ipt_IMQ.c linux-2.4.28/net/ipv4/netfilter/ipt_IMQ.c
---- linux-2.4.28-orig/net/ipv4/netfilter/ipt_IMQ.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.4.28/net/ipv4/netfilter/ipt_IMQ.c 2004-12-14 11:43:43.000000000 +0000
+ obj-$(CONFIG_IP_NF_TARGET_NETMAP) += ipt_NETMAP.o
+Index: linux-2.4.35.4/net/ipv4/netfilter/ipt_IMQ.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ipt_IMQ.c 2007-12-15 05:20:10.812456409 +0100
@@ -0,0 +1,78 @@
+/* This target marks packets to be enqueued to an imq device */
+#include <linux/module.h>
+module_init(init);
+module_exit(fini);
+MODULE_LICENSE("GPL");
-diff -aurN linux-2.4.28-orig/net/ipv6/netfilter/Config.in linux-2.4.28/net/ipv6/netfilter/Config.in
---- linux-2.4.28-orig/net/ipv6/netfilter/Config.in 2003-06-13 14:51:39.000000000 +0000
-+++ linux-2.4.28/net/ipv6/netfilter/Config.in 2004-12-14 11:43:43.000000000 +0000
-@@ -71,6 +71,7 @@
+Index: linux-2.4.35.4/net/ipv6/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv6/netfilter/Config.in 2007-12-15 05:20:09.300370243 +0100
++++ linux-2.4.35.4/net/ipv6/netfilter/Config.in 2007-12-15 05:20:10.816456638 +0100
+@@ -72,6 +72,7 @@
if [ "$CONFIG_IP6_NF_MANGLE" != "n" ]; then
# dep_tristate ' TOS target support' CONFIG_IP6_NF_TARGET_TOS $CONFIG_IP_NF_MANGLE
dep_tristate ' MARK target support' CONFIG_IP6_NF_TARGET_MARK $CONFIG_IP6_NF_MANGLE
fi
#dep_tristate ' LOG target support' CONFIG_IP6_NF_TARGET_LOG $CONFIG_IP6_NF_IPTABLES
fi
-diff -aurN linux-2.4.28-orig/net/ipv6/netfilter/Makefile linux-2.4.28/net/ipv6/netfilter/Makefile
---- linux-2.4.28-orig/net/ipv6/netfilter/Makefile 2003-06-13 14:51:39.000000000 +0000
-+++ linux-2.4.28/net/ipv6/netfilter/Makefile 2004-12-14 11:43:43.000000000 +0000
-@@ -28,6 +28,7 @@
+Index: linux-2.4.35.4/net/ipv6/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv6/netfilter/Makefile 2007-12-15 05:20:09.304370470 +0100
++++ linux-2.4.35.4/net/ipv6/netfilter/Makefile 2007-12-15 05:20:10.816456638 +0100
+@@ -29,6 +29,7 @@
obj-$(CONFIG_IP6_NF_FILTER) += ip6table_filter.o
obj-$(CONFIG_IP6_NF_MANGLE) += ip6table_mangle.o
obj-$(CONFIG_IP6_NF_TARGET_MARK) += ip6t_MARK.o
obj-$(CONFIG_IP6_NF_QUEUE) += ip6_queue.o
obj-$(CONFIG_IP6_NF_TARGET_LOG) += ip6t_LOG.o
obj-$(CONFIG_IP6_NF_MATCH_HL) += ip6t_hl.o
-diff -aurN linux-2.4.28-orig/net/ipv6/netfilter/ip6t_IMQ.c linux-2.4.28/net/ipv6/netfilter/ip6t_IMQ.c
---- linux-2.4.28-orig/net/ipv6/netfilter/ip6t_IMQ.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.4.28/net/ipv6/netfilter/ip6t_IMQ.c 2004-12-14 11:43:43.000000000 +0000
+Index: linux-2.4.35.4/net/ipv6/netfilter/ip6t_IMQ.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv6/netfilter/ip6t_IMQ.c 2007-12-15 05:20:10.816456638 +0100
@@ -0,0 +1,78 @@
+/* This target marks packets to be enqueued to an imq device */
+#include <linux/module.h>
+module_init(init);
+module_exit(fini);
+MODULE_LICENSE("GPL");
-diff -aurN linux-2.4.28-orig/net/sched/sch_generic.c linux-2.4.28/net/sched/sch_generic.c
---- linux-2.4.28-orig/net/sched/sch_generic.c 2004-11-17 11:54:22.000000000 +0000
-+++ linux-2.4.28/net/sched/sch_generic.c 2004-12-14 11:44:27.000000000 +0000
+Index: linux-2.4.35.4/net/sched/sch_generic.c
+===================================================================
+--- linux-2.4.35.4.orig/net/sched/sch_generic.c 2007-12-15 05:19:37.226542457 +0100
++++ linux-2.4.35.4/net/sched/sch_generic.c 2007-12-15 05:20:10.816456638 +0100
@@ -29,6 +29,9 @@
#include <linux/skbuff.h>
#include <linux/rtnetlink.h>
-diff -urN linux-2.4.32.orig/net/ipv4/netfilter/Config.in linux-2.4.32/net/ipv4/netfilter/Config.in
---- linux-2.4.32.orig/net/ipv4/netfilter/Config.in 2006-01-07 12:11:37.000000000 +0100
-+++ linux-2.4.32/net/ipv4/netfilter/Config.in 2006-01-07 12:15:45.000000000 +0100
-@@ -48,6 +48,7 @@
+Index: linux-2.4.35.4/net/ipv4/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Config.in 2007-12-15 05:20:10.812456409 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Config.in 2007-12-15 05:20:11.208478976 +0100
+@@ -47,6 +47,7 @@
dep_tristate ' netfilter MARK match support' CONFIG_IP_NF_MATCH_MARK $CONFIG_IP_NF_IPTABLES
dep_tristate ' Multiple port match support' CONFIG_IP_NF_MATCH_MULTIPORT $CONFIG_IP_NF_IPTABLES
dep_tristate ' TOS match support' CONFIG_IP_NF_MATCH_TOS $CONFIG_IP_NF_IPTABLES
dep_tristate ' condition match support' CONFIG_IP_NF_MATCH_CONDITION $CONFIG_IP_NF_IPTABLES
dep_tristate ' recent match support' CONFIG_IP_NF_MATCH_RECENT $CONFIG_IP_NF_IPTABLES
dep_tristate ' ECN match support' CONFIG_IP_NF_MATCH_ECN $CONFIG_IP_NF_IPTABLES
-diff -urN linux-2.4.32.orig/net/ipv4/netfilter/ipt_time.c linux-2.4.32/net/ipv4/netfilter/ipt_time.c
---- linux-2.4.32.orig/net/ipv4/netfilter/ipt_time.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32/net/ipv4/netfilter/ipt_time.c 2006-01-07 12:14:32.000000000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ipt_time.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ipt_time.c 2007-12-15 05:20:11.212479205 +0100
@@ -0,0 +1,193 @@
+/*
+ This is a module which is used for time matching
+ r->tm_mon=i;
+ r->tm_mday=work-__spm[i]+1;
+}
-diff -urN linux-2.4.32.orig/net/ipv4/netfilter/Makefile linux-2.4.32/net/ipv4/netfilter/Makefile
---- linux-2.4.32.orig/net/ipv4/netfilter/Makefile 2006-01-07 12:11:37.000000000 +0100
-+++ linux-2.4.32/net/ipv4/netfilter/Makefile 2006-01-07 12:16:07.000000000 +0100
-@@ -118,6 +118,7 @@
+Index: linux-2.4.35.4/net/ipv4/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Makefile 2007-12-15 05:20:10.812456409 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Makefile 2007-12-15 05:20:11.216479434 +0100
+@@ -111,6 +111,7 @@
obj-$(CONFIG_IP_NF_MATCH_MULTIPORT) += ipt_multiport.o
obj-$(CONFIG_IP_NF_MATCH_OWNER) += ipt_owner.o
obj-$(CONFIG_IP_NF_MATCH_TOS) += ipt_tos.o
obj-$(CONFIG_IP_NF_MATCH_CONDITION) += ipt_condition.o
obj-$(CONFIG_IP_NF_MATCH_RECENT) += ipt_recent.o
-diff -urN linux-2.4.32.orig/include/linux/netfilter_ipv4/ipt_time.h linux-2.4.32/include/linux/netfilter_ipv4/ipt_time.h
---- linux-2.4.32.orig/include/linux/netfilter_ipv4/ipt_time.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32/include/linux/netfilter_ipv4/ipt_time.h 2006-01-07 12:16:42.000000000 +0100
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_time.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_time.h 2007-12-15 05:20:11.216479434 +0100
@@ -0,0 +1,15 @@
+#ifndef __ipt_time_h_included__
+#define __ipt_time_h_included__
-diff -urN linux.old/include/linux/netfilter_ipv4/ipt_multiport.h linux.dev/include/linux/netfilter_ipv4/ipt_multiport.h
---- linux.old/include/linux/netfilter_ipv4/ipt_multiport.h 2000-12-11 22:31:30.000000000 +0100
-+++ linux.dev/include/linux/netfilter_ipv4/ipt_multiport.h 2006-02-04 05:23:54.318518250 +0100
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_multiport.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/netfilter_ipv4/ipt_multiport.h 2007-12-15 05:19:37.022530833 +0100
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_multiport.h 2007-12-15 05:20:11.456493111 +0100
@@ -11,11 +11,12 @@
#define IPT_MULTI_PORTS 15
+ u_int8_t invert; /* Invert flag */
};
#endif /*_IPT_MULTIPORT_H*/
-diff -urN linux.old/net/ipv4/netfilter/ipt_multiport.c linux.dev/net/ipv4/netfilter/ipt_multiport.c
---- linux.old/net/ipv4/netfilter/ipt_multiport.c 2003-06-13 16:51:39.000000000 +0200
-+++ linux.dev/net/ipv4/netfilter/ipt_multiport.c 2006-02-04 05:34:27.362081000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ipt_multiport.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/ipt_multiport.c 2007-12-15 05:19:37.030531288 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/ipt_multiport.c 2007-12-15 05:20:11.464493568 +0100
@@ -1,5 +1,14 @@
/* Kernel module to match one of a list of TCP/UDP ports: ports are in
the same place so we can treat them as equal. */
-diff -uprN linux-2.4.32.reference/include/linux/netfilter_ipv4/ipt_CLASSIFY.h linux-2.4.32/include/linux/netfilter_ipv4/ipt_CLASSIFY.h
---- linux-2.4.32.reference/include/linux/netfilter_ipv4/ipt_CLASSIFY.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32/include/linux/netfilter_ipv4/ipt_CLASSIFY.h 2006-08-17 12:33:08.000000000 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_CLASSIFY.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_CLASSIFY.h 2007-12-15 05:20:11.684506105 +0100
@@ -0,0 +1,8 @@
+#ifndef _IPT_CLASSIFY_H
+#define _IPT_CLASSIFY_H
+};
+
+#endif /*_IPT_CLASSIFY_H */
-diff -uprN linux-2.4.32.reference/net/ipv4/netfilter/Config.in linux-2.4.32/net/ipv4/netfilter/Config.in
---- linux-2.4.32.reference/net/ipv4/netfilter/Config.in 2006-08-17 12:28:16.000000000 +0200
-+++ linux-2.4.32/net/ipv4/netfilter/Config.in 2006-08-17 12:33:08.000000000 +0200
-@@ -172,6 +172,7 @@ if [ "$CONFIG_IP_NF_IPTABLES" != "n" ];
+Index: linux-2.4.35.4/net/ipv4/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Config.in 2007-12-15 05:20:11.208478976 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Config.in 2007-12-15 05:20:11.688506331 +0100
+@@ -172,6 +172,7 @@
dep_tristate ' DSCP target support' CONFIG_IP_NF_TARGET_DSCP $CONFIG_IP_NF_MANGLE
dep_tristate ' MARK target support' CONFIG_IP_NF_TARGET_MARK $CONFIG_IP_NF_MANGLE
dep_tristate ' IMQ target support' CONFIG_IP_NF_TARGET_IMQ $CONFIG_IP_NF_MANGLE
fi
if [ "$CONFIG_IP_NF_CONNTRACK_MARK" != "n" ]; then
-diff -uprN linux-2.4.32.reference/net/ipv4/netfilter/ipt_CLASSIFY.c linux-2.4.32/net/ipv4/netfilter/ipt_CLASSIFY.c
---- linux-2.4.32.reference/net/ipv4/netfilter/ipt_CLASSIFY.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32/net/ipv4/netfilter/ipt_CLASSIFY.c 2006-08-17 12:33:08.000000000 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ipt_CLASSIFY.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ipt_CLASSIFY.c 2007-12-15 05:20:11.696506789 +0100
@@ -0,0 +1,82 @@
+/*
+ * This is a module which is used for setting the skb->priority field
+
+module_init(init);
+module_exit(fini);
-diff -uprN linux-2.4.32.reference/net/ipv4/netfilter/Makefile linux-2.4.32/net/ipv4/netfilter/Makefile
---- linux-2.4.32.reference/net/ipv4/netfilter/Makefile 2006-08-17 12:28:16.000000000 +0200
-+++ linux-2.4.32/net/ipv4/netfilter/Makefile 2006-08-17 12:33:08.000000000 +0200
-@@ -134,6 +134,7 @@ obj-$(CONFIG_IP_NF_MATCH_LAYER7) += ipt_
+Index: linux-2.4.35.4/net/ipv4/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Makefile 2007-12-15 05:20:11.216479434 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Makefile 2007-12-15 05:20:11.696506789 +0100
+@@ -134,6 +134,7 @@
# targets
obj-$(CONFIG_IP_NF_TARGET_REJECT) += ipt_REJECT.o
-diff -ruaN linux-2.4.34.orig/Documentation/Configure.help linux-2.4.34/Documentation/Configure.help
---- linux-2.4.34.orig/Documentation/Configure.help 2007-06-01 12:17:16.000000000 +0100
-+++ linux-2.4.34/Documentation/Configure.help 2007-06-01 12:20:20.000000000 +0100
+Index: linux-2.4.35.4/Documentation/Configure.help
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/Configure.help 2007-12-15 05:20:10.792455269 +0100
++++ linux-2.4.35.4/Documentation/Configure.help 2007-12-15 05:20:11.948521148 +0100
@@ -2986,6 +2986,14 @@
If you want to compile it as a module, say M here and read
<file:Documentation/modules.txt>. If unsure, say `N'.
Condition variable match support
CONFIG_IP_NF_MATCH_CONDITION
This option allows you to match firewall rules against condition
-diff -ruaN linux-2.4.34.orig/include/linux/netfilter_ipv4/ipt_iprange.h linux-2.4.34/include/linux/netfilter_ipv4/ipt_iprange.h
---- linux-2.4.34.orig/include/linux/netfilter_ipv4/ipt_iprange.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.34/include/linux/netfilter_ipv4/ipt_iprange.h 2007-06-01 12:20:20.000000000 +0100
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_iprange.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_iprange.h 2007-12-15 05:20:11.952521377 +0100
@@ -0,0 +1,23 @@
+#ifndef _IPT_IPRANGE_H
+#define _IPT_IPRANGE_H
+};
+
+#endif /* _IPT_IPRANGE_H */
-diff -ruaN linux-2.4.34.orig/net/ipv4/netfilter/Config.in linux-2.4.34/net/ipv4/netfilter/Config.in
---- linux-2.4.34.orig/net/ipv4/netfilter/Config.in 2007-06-01 12:17:17.000000000 +0100
-+++ linux-2.4.34/net/ipv4/netfilter/Config.in 2007-06-01 12:20:20.000000000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Config.in 2007-12-15 05:20:11.688506331 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Config.in 2007-12-15 05:20:11.960521836 +0100
@@ -27,6 +27,7 @@
if [ "$CONFIG_IP_NF_IPTABLES" != "n" ]; then
# The simple matches.
dep_tristate ' quota match support' CONFIG_IP_NF_MATCH_QUOTA $CONFIG_IP_NF_IPTABLES
dep_tristate ' IP set support' CONFIG_IP_NF_SET $CONFIG_IP_NF_IPTABLES
-diff -ruaN linux-2.4.34.orig/net/ipv4/netfilter/ipt_iprange.c linux-2.4.34/net/ipv4/netfilter/ipt_iprange.c
---- linux-2.4.34.orig/net/ipv4/netfilter/ipt_iprange.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.34/net/ipv4/netfilter/ipt_iprange.c 2007-06-01 12:20:20.000000000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ipt_iprange.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ipt_iprange.c 2007-12-15 05:20:11.964522063 +0100
@@ -0,0 +1,101 @@
+/*
+ * iptables module to match IP address ranges
+
+module_init(init);
+module_exit(fini);
-diff -ruaN linux-2.4.34.orig/net/ipv4/netfilter/Makefile linux-2.4.34/net/ipv4/netfilter/Makefile
---- linux-2.4.34.orig/net/ipv4/netfilter/Makefile 2007-06-01 12:17:17.000000000 +0100
-+++ linux-2.4.34/net/ipv4/netfilter/Makefile 2007-06-01 12:20:20.000000000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Makefile 2007-12-15 05:20:11.696506789 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Makefile 2007-12-15 05:20:11.976522746 +0100
@@ -90,6 +90,7 @@
# matches
obj-$(CONFIG_IP_NF_MATCH_HELPER) += ipt_helper.o
-diff -Naurp linux-2.4.34/Documentation/Configure.help linux-2.4.34.patched/Documentation/Configure.help
---- linux-2.4.34/Documentation/Configure.help 2007-07-08 05:01:42.000000000 +0200
-+++ linux-2.4.34.patched/Documentation/Configure.help 2007-07-08 05:02:26.000000000 +0200
-@@ -2914,6 +2914,15 @@ CONFIG_IP_NF_MATCH_MAC
+Index: linux-2.4.35.4/Documentation/Configure.help
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/Configure.help 2007-12-15 05:20:11.948521148 +0100
++++ linux-2.4.35.4/Documentation/Configure.help 2007-12-15 05:20:12.260538930 +0100
+@@ -2914,6 +2914,15 @@
If you want to compile it as a module, say M here and read
<file:Documentation/modules.txt>. If unsure, say `N'.
Netfilter MARK match support
CONFIG_IP_NF_MATCH_MARK
Netfilter mark matching allows you to match packets based on the
-@@ -3221,6 +3230,7 @@ CONFIG_IP_NF_MATCH_HELPER
+@@ -3229,6 +3238,7 @@
If you want to compile it as a module, say M here and read
Documentation/modules.txt. If unsure, say `Y'.
TCPMSS match support
CONFIG_IP_NF_MATCH_TCPMSS
This option adds a `tcpmss' match, which allows you to examine the
-@@ -3299,6 +3309,14 @@ CONFIG_IP6_NF_MATCH_MAC
+@@ -3376,6 +3386,14 @@
If you want to compile it as a module, say M here and read
<file:Documentation/modules.txt>. If unsure, say `N'.
length match support
CONFIG_IP6_NF_MATCH_LENGTH
This option allows you to match the length of a packet against a
-diff -Naurp linux-2.4.34/include/linux/netfilter_ipv4/ipt_random.h linux-2.4.34.patched/include/linux/netfilter_ipv4/ipt_random.h
---- linux-2.4.34/include/linux/netfilter_ipv4/ipt_random.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.34.patched/include/linux/netfilter_ipv4/ipt_random.h 2007-07-08 05:02:26.000000000 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_random.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_random.h 2007-12-15 05:20:12.264539159 +0100
@@ -0,0 +1,11 @@
+#ifndef _IPT_RAND_H
+#define _IPT_RAND_H
+};
+
+#endif /*_IPT_RAND_H*/
-diff -Naurp linux-2.4.34/include/linux/netfilter_ipv6/ip6t_random.h linux-2.4.34.patched/include/linux/netfilter_ipv6/ip6t_random.h
---- linux-2.4.34/include/linux/netfilter_ipv6/ip6t_random.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.34.patched/include/linux/netfilter_ipv6/ip6t_random.h 2007-07-08 05:02:26.000000000 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv6/ip6t_random.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv6/ip6t_random.h 2007-12-15 05:20:12.272539617 +0100
@@ -0,0 +1,11 @@
+#ifndef _IP6T_RAND_H
+#define _IP6T_RAND_H
+};
+
+#endif /*_IP6T_RAND_H*/
-diff -Naurp linux-2.4.34/net/ipv4/netfilter/Config.in linux-2.4.34.patched/net/ipv4/netfilter/Config.in
---- linux-2.4.34/net/ipv4/netfilter/Config.in 2007-07-08 05:01:42.000000000 +0200
-+++ linux-2.4.34.patched/net/ipv4/netfilter/Config.in 2007-07-08 05:03:32.000000000 +0200
-@@ -32,6 +32,7 @@ if [ "$CONFIG_IP_NF_IPTABLES" != "n" ];
+Index: linux-2.4.35.4/net/ipv4/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Config.in 2007-12-15 05:20:11.960521836 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Config.in 2007-12-15 05:20:12.276539844 +0100
+@@ -48,6 +48,7 @@
dep_tristate ' netfilter MARK match support' CONFIG_IP_NF_MATCH_MARK $CONFIG_IP_NF_IPTABLES
dep_tristate ' Multiple port match support' CONFIG_IP_NF_MATCH_MULTIPORT $CONFIG_IP_NF_IPTABLES
dep_tristate ' TOS match support' CONFIG_IP_NF_MATCH_TOS $CONFIG_IP_NF_IPTABLES
dep_tristate ' TIME match support (EXPERIMENTAL)' CONFIG_IP_NF_MATCH_TIME $CONFIG_IP_NF_IPTABLES
dep_tristate ' condition match support' CONFIG_IP_NF_MATCH_CONDITION $CONFIG_IP_NF_IPTABLES
dep_tristate ' recent match support' CONFIG_IP_NF_MATCH_RECENT $CONFIG_IP_NF_IPTABLES
-diff -Naurp linux-2.4.34/net/ipv4/netfilter/ipt_random.c linux-2.4.34.patched/net/ipv4/netfilter/ipt_random.c
---- linux-2.4.34/net/ipv4/netfilter/ipt_random.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.34.patched/net/ipv4/netfilter/ipt_random.c 2007-07-08 05:02:26.000000000 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ipt_random.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ipt_random.c 2007-12-15 05:20:12.276539844 +0100
@@ -0,0 +1,96 @@
+/*
+ This is a module which is used for a "random" match support.
+
+module_init(init);
+module_exit(fini);
-diff -Naurp linux-2.4.34/net/ipv4/netfilter/Makefile linux-2.4.34.patched/net/ipv4/netfilter/Makefile
---- linux-2.4.34/net/ipv4/netfilter/Makefile 2007-07-08 05:01:42.000000000 +0200
-+++ linux-2.4.34.patched/net/ipv4/netfilter/Makefile 2007-07-08 05:02:26.000000000 +0200
-@@ -102,6 +102,8 @@ obj-$(CONFIG_IP_NF_MATCH_TOS) += ipt_tos
+Index: linux-2.4.35.4/net/ipv4/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Makefile 2007-12-15 05:20:11.976522746 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Makefile 2007-12-15 05:20:12.276539844 +0100
+@@ -115,6 +115,8 @@
obj-$(CONFIG_IP_NF_MATCH_TIME) += ipt_time.o
obj-$(CONFIG_IP_NF_MATCH_CONDITION) += ipt_condition.o
obj-$(CONFIG_IP_NF_MATCH_RECENT) += ipt_recent.o
obj-$(CONFIG_IP_NF_MATCH_ECN) += ipt_ecn.o
-diff -Naurp linux-2.4.34/net/ipv6/netfilter/Config.in linux-2.4.34.patched/net/ipv6/netfilter/Config.in
---- linux-2.4.34/net/ipv6/netfilter/Config.in 2007-07-08 05:01:42.000000000 +0200
-+++ linux-2.4.34.patched/net/ipv6/netfilter/Config.in 2007-07-08 05:02:26.000000000 +0200
-@@ -19,6 +19,7 @@ if [ "$CONFIG_IP6_NF_IPTABLES" != "n" ];
+Index: linux-2.4.35.4/net/ipv6/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv6/netfilter/Config.in 2007-12-15 05:20:10.816456638 +0100
++++ linux-2.4.35.4/net/ipv6/netfilter/Config.in 2007-12-15 05:20:12.276539844 +0100
+@@ -19,6 +19,7 @@
dep_tristate ' limit match support' CONFIG_IP6_NF_MATCH_LIMIT $CONFIG_IP6_NF_IPTABLES
dep_tristate ' condition match support' CONFIG_IP6_NF_MATCH_CONDITION $CONFIG_IP6_NF_IPTABLES
dep_tristate ' MAC address match support' CONFIG_IP6_NF_MATCH_MAC $CONFIG_IP6_NF_IPTABLES
if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
dep_tristate ' Routing header match support (EXPERIMENTAL)' CONFIG_IP6_NF_MATCH_RT $CONFIG_IP6_NF_IPTABLES
fi
-diff -Naurp linux-2.4.34/net/ipv6/netfilter/ip6t_random.c linux-2.4.34.patched/net/ipv6/netfilter/ip6t_random.c
---- linux-2.4.34/net/ipv6/netfilter/ip6t_random.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.34.patched/net/ipv6/netfilter/ip6t_random.c 2007-07-08 05:02:26.000000000 +0200
+Index: linux-2.4.35.4/net/ipv6/netfilter/ip6t_random.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv6/netfilter/ip6t_random.c 2007-12-15 05:20:12.276539844 +0100
@@ -0,0 +1,97 @@
+/*
+ This is a module which is used for a "random" match support.
+
+module_init(init);
+module_exit(fini);
-diff -Naurp linux-2.4.34/net/ipv6/netfilter/Makefile linux-2.4.34.patched/net/ipv6/netfilter/Makefile
---- linux-2.4.34/net/ipv6/netfilter/Makefile 2007-07-08 05:01:42.000000000 +0200
-+++ linux-2.4.34.patched/net/ipv6/netfilter/Makefile 2007-07-08 05:02:26.000000000 +0200
-@@ -32,6 +32,7 @@ obj-$(CONFIG_IP6_NF_TARGET_MARK) += ip6t
+Index: linux-2.4.35.4/net/ipv6/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv6/netfilter/Makefile 2007-12-15 05:20:10.816456638 +0100
++++ linux-2.4.35.4/net/ipv6/netfilter/Makefile 2007-12-15 05:20:12.280540069 +0100
+@@ -32,6 +32,7 @@
obj-$(CONFIG_IP6_NF_TARGET_IMQ) += ip6t_IMQ.o
obj-$(CONFIG_IP6_NF_QUEUE) += ip6_queue.o
obj-$(CONFIG_IP6_NF_TARGET_LOG) += ip6t_LOG.o
-diff -urN linux-2.4.34/Documentation/Configure.help linux-2.4.34/Documentation/Configure.help
---- linux-2.4.34/Documentation/Configure.help 2007-05-10 19:37:42.000000000 -0400
-+++ linux-2.4.34/Documentation/Configure.help 2007-05-10 19:49:49.000000000 -0400
-@@ -11127,6 +11127,24 @@
+Index: linux-2.4.35.4/Documentation/Configure.help
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/Configure.help 2007-12-15 05:20:12.260538930 +0100
++++ linux-2.4.35.4/Documentation/Configure.help 2007-12-15 05:20:12.604558535 +0100
+@@ -11153,6 +11153,24 @@
whenever you want). If you want to compile it as a module, say M
here and read <file:Documentation/modules.txt>.
CSZ packet scheduler
CONFIG_NET_SCH_CSZ
Say Y here if you want to use the Clark-Shenker-Zhang (CSZ) packet
-diff -urN linux-2.4.34/include/linux/pkt_sched.h linux-2.4.34/include/linux/pkt_sched.h
---- linux-2.4.34/include/linux/pkt_sched.h 2007-05-10 19:38:19.000000000 -0400
-+++ linux-2.4.34/include/linux/pkt_sched.h 2007-05-10 19:53:59.000000000 -0400
+Index: linux-2.4.35.4/include/linux/pkt_sched.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/pkt_sched.h 2007-12-15 05:19:36.750515331 +0100
++++ linux-2.4.35.4/include/linux/pkt_sched.h 2007-12-15 05:20:12.608558764 +0100
@@ -173,8 +173,36 @@
*
* The only reason for this is efficiency, it is possible
/* RED section */
enum
-diff -urN linux-2.4.34/net/sched/Config.in linux-2.4.34/net/sched/Config.in
---- linux-2.4.34/net/sched/Config.in 2007-05-10 19:38:31.000000000 -0400
-+++ linux-2.4.34/net/sched/Config.in 2007-05-10 19:54:45.000000000 -0400
+Index: linux-2.4.35.4/net/sched/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/sched/Config.in 2007-12-15 05:19:36.758515786 +0100
++++ linux-2.4.35.4/net/sched/Config.in 2007-12-15 05:20:12.608558764 +0100
@@ -12,6 +12,7 @@
tristate ' The simplest PRIO pseudoscheduler' CONFIG_NET_SCH_PRIO
tristate ' RED queue' CONFIG_NET_SCH_RED
tristate ' TEQL queue' CONFIG_NET_SCH_TEQL
tristate ' TBF queue' CONFIG_NET_SCH_TBF
tristate ' GRED queue' CONFIG_NET_SCH_GRED
-diff -urN linux-2.4.34/net/sched/Makefile linux-2.4.34/net/sched/Makefile
---- linux-2.4.34/net/sched/Makefile 2007-05-10 19:38:31.000000000 -0400
-+++ linux-2.4.34/net/sched/Makefile 2007-05-10 19:55:13.000000000 -0400
+Index: linux-2.4.35.4/net/sched/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/sched/Makefile 2007-12-15 05:19:36.766516242 +0100
++++ linux-2.4.35.4/net/sched/Makefile 2007-12-15 05:20:12.608558764 +0100
@@ -19,6 +19,7 @@
obj-$(CONFIG_NET_SCH_HFSC) += sch_hfsc.o
obj-$(CONFIG_NET_SCH_HTB) += sch_htb.o
obj-$(CONFIG_NET_SCH_RED) += sch_red.o
obj-$(CONFIG_NET_SCH_TBF) += sch_tbf.o
obj-$(CONFIG_NET_SCH_PRIO) += sch_prio.o
-diff -urN linux-2.4.34/net/sched/sch_esfq.c linux-2.4.34/net/sched/sch_esfq.c
---- linux-2.4.34/net/sched/sch_esfq.c 1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.4.34/net/sched/sch_esfq.c 2007-05-10 19:57:15.000000000 -0400
+Index: linux-2.4.35.4/net/sched/sch_esfq.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/sched/sch_esfq.c 2007-12-15 05:20:12.608558764 +0100
@@ -0,0 +1,649 @@
+/*
+ * net/sched/sch_esfq.c Extended Stochastic Fairness Queueing discipline.
-diff -ruN linux-2.4.34.orig/include/linux/netfilter_ipv4/ip_set_ipporthash.h linux-2.4.34/include/linux/netfilter_ipv4/ip_set_ipporthash.h
---- linux-2.4.34.orig/include/linux/netfilter_ipv4/ip_set_ipporthash.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.34/include/linux/netfilter_ipv4/ip_set_ipporthash.h 2006-12-31 18:32:57.183171722 +0100
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set_ipporthash.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set_ipporthash.h 2007-12-15 05:20:12.884574492 +0100
@@ -0,0 +1,34 @@
+#ifndef __IP_SET_IPPORTHASH_H
+#define __IP_SET_IPPORTHASH_H
-diff -ur v2.4.29/linux/include/linux/netfilter_ipv4/ip_nat.h linux/include/linux/netfilter_ipv4/ip_nat.h
---- v2.4.29/linux/include/linux/netfilter_ipv4/ip_nat.h 2005-01-20 09:25:34.000000000 +0200
-+++ linux/include/linux/netfilter_ipv4/ip_nat.h 2005-01-20 09:55:46.998651976 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_nat.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/netfilter_ipv4/ip_nat.h 2007-12-15 05:19:36.574505299 +0100
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_nat.h 2007-12-15 05:20:13.092586349 +0100
@@ -121,5 +121,13 @@
extern u_int16_t ip_nat_cheat_check(u_int32_t oldvalinv,
u_int32_t newval,
+
#endif /*__KERNEL__*/
#endif
-diff -ur v2.4.29/linux/include/linux/rtnetlink.h linux/include/linux/rtnetlink.h
---- v2.4.29/linux/include/linux/rtnetlink.h 2004-08-08 10:56:48.000000000 +0300
-+++ linux/include/linux/rtnetlink.h 2005-01-20 09:55:33.431714464 +0200
+Index: linux-2.4.35.4/include/linux/rtnetlink.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/rtnetlink.h 2007-12-15 05:19:36.582505757 +0100
++++ linux-2.4.35.4/include/linux/rtnetlink.h 2007-12-15 05:20:13.092586349 +0100
@@ -234,6 +234,8 @@
#define RTNH_F_DEAD 1 /* Nexthop is dead (used by multipath) */
#define RTNH_F_PERVASIVE 2 /* Do recursive gateway lookup */
/* Macros to handle hexthops */
-diff -ur v2.4.29/linux/include/net/ip_fib.h linux/include/net/ip_fib.h
---- v2.4.29/linux/include/net/ip_fib.h 2001-11-13 03:24:05.000000000 +0200
-+++ linux/include/net/ip_fib.h 2005-01-20 09:55:33.432714312 +0200
+Index: linux-2.4.35.4/include/net/ip_fib.h
+===================================================================
+--- linux-2.4.35.4.orig/include/net/ip_fib.h 2007-12-15 05:19:36.590506213 +0100
++++ linux-2.4.35.4/include/net/ip_fib.h 2007-12-15 05:20:13.100586801 +0100
@@ -162,7 +162,8 @@
static inline void fib_select_default(const struct rt_key *key, struct fib_result *res)
+extern rwlock_t fib_nhflags_lock;
#endif /* _NET_FIB_H */
-diff -ur v2.4.29/linux/include/net/route.h linux/include/net/route.h
---- v2.4.29/linux/include/net/route.h 2003-08-25 22:06:13.000000000 +0300
-+++ linux/include/net/route.h 2005-01-20 09:55:46.999651824 +0200
+Index: linux-2.4.35.4/include/net/route.h
+===================================================================
+--- linux-2.4.35.4.orig/include/net/route.h 2007-12-15 05:19:36.598506668 +0100
++++ linux-2.4.35.4/include/net/route.h 2007-12-15 05:20:13.104587030 +0100
@@ -49,6 +49,8 @@
{
__u32 dst;
static inline void ip_rt_put(struct rtable * rt)
{
if (rt)
-diff -ur v2.4.29/linux/net/ipv4/fib_frontend.c linux/net/ipv4/fib_frontend.c
---- v2.4.29/linux/net/ipv4/fib_frontend.c 2003-08-25 22:06:13.000000000 +0300
-+++ linux/net/ipv4/fib_frontend.c 2005-01-20 09:55:46.999651824 +0200
+Index: linux-2.4.35.4/net/ipv4/fib_frontend.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/fib_frontend.c 2007-12-15 05:19:36.606507123 +0100
++++ linux-2.4.35.4/net/ipv4/fib_frontend.c 2007-12-15 05:20:13.108587259 +0100
@@ -54,6 +54,8 @@
struct fib_table *local_table;
struct fib_table *main_table;
rt_cache_flush(-1);
break;
case NETDEV_DOWN:
-diff -ur v2.4.29/linux/net/ipv4/fib_hash.c linux/net/ipv4/fib_hash.c
---- v2.4.29/linux/net/ipv4/fib_hash.c 2003-08-25 22:06:13.000000000 +0300
-+++ linux/net/ipv4/fib_hash.c 2005-01-20 09:55:47.000651672 +0200
+Index: linux-2.4.35.4/net/ipv4/fib_hash.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/fib_hash.c 2007-12-15 05:19:36.614507579 +0100
++++ linux-2.4.35.4/net/ipv4/fib_hash.c 2007-12-15 05:20:13.108587259 +0100
@@ -71,6 +71,7 @@
struct fib_info *fn_info;
#define FIB_INFO(f) ((f)->fn_info)
new_f->fn_key = key;
#ifdef CONFIG_IP_ROUTE_TOS
new_f->fn_tos = tos;
-diff -ur v2.4.29/linux/net/ipv4/fib_rules.c linux/net/ipv4/fib_rules.c
---- v2.4.29/linux/net/ipv4/fib_rules.c 2004-02-19 00:23:39.000000000 +0200
-+++ linux/net/ipv4/fib_rules.c 2005-01-20 09:55:33.433714160 +0200
+Index: linux-2.4.35.4/net/ipv4/fib_rules.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/fib_rules.c 2007-12-15 05:19:36.618507808 +0100
++++ linux-2.4.35.4/net/ipv4/fib_rules.c 2007-12-15 05:20:13.108587259 +0100
@@ -307,6 +307,11 @@
}
}
struct fib_table *tb;
if ((tb = fib_get_table(res->r->r_table)) != NULL)
tb->tb_select_default(tb, key, res);
-diff -ur v2.4.29/linux/net/ipv4/fib_semantics.c linux/net/ipv4/fib_semantics.c
---- v2.4.29/linux/net/ipv4/fib_semantics.c 2003-08-25 22:06:13.000000000 +0300
-+++ linux/net/ipv4/fib_semantics.c 2005-01-20 09:55:47.000651672 +0200
+Index: linux-2.4.35.4/net/ipv4/fib_semantics.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/fib_semantics.c 2007-12-15 05:19:36.626508263 +0100
++++ linux-2.4.35.4/net/ipv4/fib_semantics.c 2007-12-15 05:20:13.112587489 +0100
@@ -48,6 +48,7 @@
static struct fib_info *fib_info_list;
static rwlock_t fib_info_lock = RW_LOCK_UNLOCKED;
}
nh->nh_dev = in_dev->dev;
dev_hold(nh->nh_dev);
-@@ -603,8 +635,12 @@
+@@ -606,8 +638,12 @@
for_nexthops(fi) {
if (nh->nh_flags&RTNH_F_DEAD)
continue;
}
#ifdef CONFIG_IP_ROUTE_MULTIPATH
if (nhsel < fi->fib_nhs) {
-@@ -870,22 +906,35 @@
+@@ -873,22 +909,35 @@
if (local && fi->fib_prefsrc == local) {
fi->fib_flags |= RTNH_F_DEAD;
ret++;
}
#ifdef CONFIG_IP_ROUTE_MULTIPATH
if (force > 1 && nh->nh_dev == dev) {
-@@ -903,37 +952,55 @@
+@@ -906,37 +955,55 @@
return ret;
}
} endfor_nexthops(fi)
if (alive > 0) {
-@@ -941,9 +1008,13 @@
+@@ -944,9 +1011,13 @@
ret++;
}
} endfor_fib_info();
/*
The algorithm is suboptimal, but it provides really
fair weighted route distribution.
-@@ -952,24 +1023,45 @@
+@@ -955,24 +1026,45 @@
void fib_select_multipath(const struct rt_key *key, struct fib_result *res)
{
struct fib_info *fi = res->fi;
}
-@@ -979,20 +1071,40 @@
+@@ -982,20 +1074,40 @@
w = jiffies % fi->fib_power;
spin_unlock_bh(&fib_multipath_lock);
}
#endif
-diff -ur v2.4.29/linux/net/ipv4/ip_nat_dumb.c linux/net/ipv4/ip_nat_dumb.c
---- v2.4.29/linux/net/ipv4/ip_nat_dumb.c 2001-11-13 03:25:26.000000000 +0200
-+++ linux/net/ipv4/ip_nat_dumb.c 2005-01-20 09:55:47.001651520 +0200
+Index: linux-2.4.35.4/net/ipv4/ip_nat_dumb.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/ip_nat_dumb.c 2007-12-15 05:19:36.634508719 +0100
++++ linux-2.4.35.4/net/ipv4/ip_nat_dumb.c 2007-12-15 05:20:13.112587489 +0100
@@ -124,6 +124,7 @@
key.dst = ciph->saddr;
key.iif = skb->dev->ifindex;
#ifdef CONFIG_IP_ROUTE_TOS
key.tos = RT_TOS(ciph->tos);
#endif
-diff -ur v2.4.29/linux/net/ipv4/netfilter/ip_fw_compat_masq.c linux/net/ipv4/netfilter/ip_fw_compat_masq.c
---- v2.4.29/linux/net/ipv4/netfilter/ip_fw_compat_masq.c 2005-01-20 09:25:34.000000000 +0200
-+++ linux/net/ipv4/netfilter/ip_fw_compat_masq.c 2005-01-20 09:55:47.001651520 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_fw_compat_masq.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/ip_fw_compat_masq.c 2007-12-15 05:19:36.642509177 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_fw_compat_masq.c 2007-12-15 05:20:13.112587489 +0100
@@ -41,6 +41,10 @@
enum ip_conntrack_info ctinfo;
struct ip_conntrack *ct;
}
void
-diff -ur v2.4.29/linux/net/ipv4/netfilter/ip_nat_core.c linux/net/ipv4/netfilter/ip_nat_core.c
---- v2.4.29/linux/net/ipv4/netfilter/ip_nat_core.c 2005-01-20 09:25:34.000000000 +0200
-+++ linux/net/ipv4/netfilter/ip_nat_core.c 2005-01-20 09:55:47.002651368 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_nat_core.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/ip_nat_core.c 2007-12-15 05:20:06.404205198 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_nat_core.c 2007-12-15 05:20:13.112587489 +0100
@@ -994,6 +994,60 @@
return NF_ACCEPT;
}
int __init ip_nat_init(void)
{
size_t i;
-diff -ur v2.4.29/linux/net/ipv4/netfilter/ip_nat_standalone.c linux/net/ipv4/netfilter/ip_nat_standalone.c
---- v2.4.29/linux/net/ipv4/netfilter/ip_nat_standalone.c 2005-01-20 09:25:34.000000000 +0200
-+++ linux/net/ipv4/netfilter/ip_nat_standalone.c 2005-01-20 09:55:47.002651368 +0200
-@@ -241,6 +241,9 @@
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_nat_standalone.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/ip_nat_standalone.c 2007-12-15 05:19:36.654509858 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_nat_standalone.c 2007-12-15 05:20:13.112587489 +0100
+@@ -245,6 +245,9 @@
/* Before packet filtering, change destination */
static struct nf_hook_ops ip_nat_in_ops
= { { NULL, NULL }, ip_nat_in, PF_INET, NF_IP_PRE_ROUTING, NF_IP_PRI_NAT_DST };
/* After packet filtering, change source */
static struct nf_hook_ops ip_nat_out_ops
= { { NULL, NULL }, ip_nat_out, PF_INET, NF_IP_POST_ROUTING, NF_IP_PRI_NAT_SRC};
-@@ -309,10 +312,15 @@
+@@ -313,10 +316,15 @@
printk("ip_nat_init: can't register in hook.\n");
goto cleanup_nat;
}
}
ret = nf_register_hook(&ip_nat_local_out_ops);
if (ret < 0) {
-@@ -332,6 +340,8 @@
+@@ -336,6 +344,8 @@
nf_unregister_hook(&ip_nat_local_out_ops);
cleanup_outops:
nf_unregister_hook(&ip_nat_out_ops);
cleanup_inops:
nf_unregister_hook(&ip_nat_in_ops);
cleanup_nat:
-diff -ur v2.4.29/linux/net/ipv4/netfilter/ipt_MASQUERADE.c linux/net/ipv4/netfilter/ipt_MASQUERADE.c
---- v2.4.29/linux/net/ipv4/netfilter/ipt_MASQUERADE.c 2005-01-20 09:25:34.000000000 +0200
-+++ linux/net/ipv4/netfilter/ipt_MASQUERADE.c 2005-01-20 09:55:47.003651216 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ipt_MASQUERADE.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/ipt_MASQUERADE.c 2007-12-15 05:19:36.662510316 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/ipt_MASQUERADE.c 2007-12-15 05:20:13.116587715 +0100
@@ -87,7 +87,8 @@
key.dst = (*pskb)->nh.iph->daddr;
key.src = 0; /* Unknown: that's what we're trying to establish */
newsrc = rt->rt_src;
DEBUGP("newsrc = %u.%u.%u.%u\n", NIPQUAD(newsrc));
-diff -ur v2.4.29/linux/net/ipv4/route.c linux/net/ipv4/route.c
---- v2.4.29/linux/net/ipv4/route.c 2004-11-18 08:30:33.000000000 +0200
-+++ linux/net/ipv4/route.c 2005-01-20 09:55:47.004651064 +0200
+Index: linux-2.4.35.4/net/ipv4/route.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/route.c 2007-12-15 05:19:36.670510772 +0100
++++ linux-2.4.35.4/net/ipv4/route.c 2007-12-15 05:20:13.116587715 +0100
@@ -919,6 +919,7 @@
/* Gateway is different ... */
#ifdef CONFIG_IP_ROUTE_FWMARK
rth->key.fwmark == key->fwmark &&
#endif
-diff -ur v2.4.29/linux/net/netsyms.c linux/net/netsyms.c
---- v2.4.29/linux/net/netsyms.c 2005-01-20 09:25:34.000000000 +0200
-+++ linux/net/netsyms.c 2005-01-20 09:55:47.005650912 +0200
+Index: linux-2.4.35.4/net/netsyms.c
+===================================================================
+--- linux-2.4.35.4.orig/net/netsyms.c 2007-12-15 05:19:36.678511227 +0100
++++ linux-2.4.35.4/net/netsyms.c 2007-12-15 05:20:13.120587941 +0100
@@ -260,6 +260,7 @@
EXPORT_SYMBOL(inet_unregister_protosw);
EXPORT_SYMBOL(ip_route_output_key);
---- linux-2.4.34-old/drivers/usb/serial/usbserial.c 2007-08-27 15:32:14.000000000 +0200
-+++ linux-2.4.34-new/drivers/usb/serial/usbserial.c 2007-09-02 14:10:52.000000000 +0200
+Index: linux-2.4.35.4/drivers/usb/serial/usbserial.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/usb/serial/usbserial.c 2007-12-15 05:19:36.542503478 +0100
++++ linux-2.4.35.4/drivers/usb/serial/usbserial.c 2007-12-15 05:20:13.496609372 +0100
@@ -331,6 +331,7 @@
#ifdef CONFIG_USB_SERIAL_GENERIC
static __u16 vendor = 0x05f9;
static __u16 product = 0xffff;
+static int maxSize = 0;
- static struct usb_device_id generic_device_ids[9]; /* Initially all zeroes. */
+ static struct usb_device_id generic_device_ids[2]; /* Initially all zeroes. */
@@ -1557,7 +1558,11 @@
err("No free urbs available");
port->bulk_in_endpointAddress = endpoint->bEndpointAddress;
port->bulk_in_buffer = kmalloc (buffer_size, GFP_KERNEL);
if (!port->bulk_in_buffer) {
-@@ -1945,4 +1950,7 @@
+@@ -1921,4 +1926,7 @@
MODULE_PARM(product, "h");
MODULE_PARM_DESC(product, "User specified USB idProduct");
---- linux/drivers/usb/serial/usbserial.c.old 2006-05-15 18:16:55.000000000 +0300
-+++ linux/drivers/usb/serial/usbserial.c 2006-05-15 18:19:06.000000000 +0300
-@@ -332,7 +332,7 @@
- static __u16 vendor = 0x05f9;
+Index: linux-2.4.35.4/drivers/usb/serial/usbserial.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/usb/serial/usbserial.c 2007-12-15 05:20:13.496609372 +0100
++++ linux-2.4.35.4/drivers/usb/serial/usbserial.c 2007-12-15 05:20:13.708621453 +0100
+@@ -333,7 +333,7 @@
static __u16 product = 0xffff;
+ static int maxSize = 0;
-static struct usb_device_id generic_device_ids[2]; /* Initially all zeroes. */
+static struct usb_device_id generic_device_ids[10]; /* Initially all zeroes. */
/* All of the device info needed for the Generic Serial Converter */
static struct usb_serial_device_type generic_device = {
-@@ -1793,6 +1793,34 @@
+@@ -1836,6 +1836,34 @@
generic_device_ids[0].idVendor = vendor;
generic_device_ids[0].idProduct = product;
generic_device_ids[0].match_flags = USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_PRODUCT;