From db7c7e9e4dbacd162184af473c229e18644245ca Mon Sep 17 00:00:00 2001
From: jow <jow@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Date: Thu, 1 Jul 2010 01:06:32 +0000
Subject: [PATCH] [package] broadcom-wl: 	- fix compilation against
 eglibc and glibc (#7521) 	- unbind device from b43 ssb bridge on boot
 (#7529)

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@22007 3c298f89-4303-0410-b956-a3cf2f4a3e73
---
 package/broadcom-wl/Makefile                  |  9 +++++-
 package/broadcom-wl/files/etc/init.d/wlunbind | 23 ++++++++++++++
 package/broadcom-wl/patches/002-ctype.patch   | 30 +++++++++++++++++++
 3 files changed, 61 insertions(+), 1 deletion(-)
 create mode 100755 package/broadcom-wl/files/etc/init.d/wlunbind
 create mode 100644 package/broadcom-wl/patches/002-ctype.patch

diff --git a/package/broadcom-wl/Makefile b/package/broadcom-wl/Makefile
index 2d4aacf14..ebf9b3861 100644
--- a/package/broadcom-wl/Makefile
+++ b/package/broadcom-wl/Makefile
@@ -126,7 +126,9 @@ define Build/Compile
 		$(PKG_BUILD_DIR)/nas_exe.o \
 		$(PKG_BUILD_DIR)/shared/libshared.a
 
-	$(TARGET_CC) -o $(PKG_BUILD_DIR)/wl $(PKG_BUILD_DIR)/wl_exe.o
+	$(TARGET_CC) -o $(PKG_BUILD_DIR)/wl \
+		$(PKG_BUILD_DIR)/wl_exe.o \
+		$(PKG_BUILD_DIR)/shared/libshared.a
 endef
 
 define Build/InstallDev
@@ -140,6 +142,11 @@ define Package/wlc/install
 	$(INSTALL_BIN) $(PKG_BUILD_DIR)/wlc $(1)/sbin/
 endef
 
+define Package/wlc/postinst
+#!/bin/sh
+[ -n "$${IPKG_INSTROOT}" ] || /etc/init.d/wlunbind enable || true
+endef
+
 define Package/wl/install
 	$(INSTALL_DIR) $(1)/usr/sbin
 	$(INSTALL_BIN) $(PKG_BUILD_DIR)/wl $(1)/usr/sbin/
diff --git a/package/broadcom-wl/files/etc/init.d/wlunbind b/package/broadcom-wl/files/etc/init.d/wlunbind
new file mode 100755
index 000000000..80a8f0e60
--- /dev/null
+++ b/package/broadcom-wl/files/etc/init.d/wlunbind
@@ -0,0 +1,23 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2010 OpenWrt.org
+
+START=09
+
+boot() {
+	local sysfs=/sys/bus/pci/drivers/b43-pci-bridge
+	if [ -d "$sysfs" ]; then
+		local lnk
+		for lnk in $sysfs/*; do
+			[ -h "$lnk" ] || continue
+			case "${lnk##*/}" in
+				*:*:*.*)
+					logger "Unbinding WL PCI device ${lnk##*/} from B43 SSB bridge"
+					echo -n "${lnk##*/}" > "$sysfs/unbind"
+				;;
+			esac
+		done
+	fi
+}
+
+start() { :; }
+stop() { :; }
diff --git a/package/broadcom-wl/patches/002-ctype.patch b/package/broadcom-wl/patches/002-ctype.patch
new file mode 100644
index 000000000..16d13df30
--- /dev/null
+++ b/package/broadcom-wl/patches/002-ctype.patch
@@ -0,0 +1,30 @@
+--- a/shared/Makefile
++++ b/shared/Makefile
+@@ -19,7 +19,7 @@ LDFLAGS += -L.
+ AR=ar
+ RANLIB=ranlib
+ 
+-OBJS := shutils.o wl.o wl_linux.o linux_timer.o
++OBJS := shutils.o wl.o wl_linux.o linux_timer.o ctype.o
+ all: libshared.a
+ 
+ clean:
+--- /dev/null
++++ b/shared/ctype.c
+@@ -0,0 +1,16 @@
++#include <features.h>
++
++#ifndef __UCLIBC__
++extern void **__ctype_b_loc();
++extern void **__ctype_tolower_loc();
++
++void *__ctype_b;
++void *__ctype_tolower;
++
++static void init(void) __attribute__((constructor));
++static void init(void)
++{
++    __ctype_b = *__ctype_b_loc();
++    __ctype_tolower = *__ctype_tolower_loc();
++}
++#endif
-- 
2.20.1