mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-11-03 22:44:27 -05:00 
			
		
		
		
	remove the old broadcom wl driver for linux 2.4
SVN-Revision: 21947
This commit is contained in:
		
							parent
							
								
									cfbefb4b87
								
							
						
					
					
						commit
						c4f3caef75
					
				@ -1,202 +0,0 @@
 | 
				
			|||||||
#
 | 
					 | 
				
			||||||
# Copyright (C) 2006-2010 OpenWrt.org
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This is free software, licensed under the GNU General Public License v2.
 | 
					 | 
				
			||||||
# See /LICENSE for more information.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
include $(TOPDIR)/rules.mk
 | 
					 | 
				
			||||||
include $(INCLUDE_DIR)/kernel.mk
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
PKG_NAME:=broadcom-wl
 | 
					 | 
				
			||||||
PKG_VERSION:=4.150.10.5.3
 | 
					 | 
				
			||||||
PKG_RELEASE:=8
 | 
					 | 
				
			||||||
WLC_VERSION:=0.2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
 | 
					 | 
				
			||||||
PKG_SOURCE_URL:=http://downloads.openwrt.org/sources
 | 
					 | 
				
			||||||
PKG_MD5SUM:=cc615fd49719eea8bce5b2a8813783f3
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
WL_WEXT=1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
include $(INCLUDE_DIR)/package.mk
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
define Package/broadcom-wl-old/Default
 | 
					 | 
				
			||||||
  SECTION:=kernel
 | 
					 | 
				
			||||||
  CATEGORY:=Kernel modules
 | 
					 | 
				
			||||||
  DEPENDS:=@PACKAGE_kmod-brcm-wl-old||PACKAGE_kmod-brcm-wl-mimo-old
 | 
					 | 
				
			||||||
  SUBMENU:=Proprietary BCM43xx WiFi driver
 | 
					 | 
				
			||||||
  SUBMENUDEP:=@TARGET_brcm_2_4||@TARGET_brcm47xx
 | 
					 | 
				
			||||||
endef
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
define KernelPackage/brcm-wl-old/Default
 | 
					 | 
				
			||||||
  $(call Package/broadcom-wl-old/Default)
 | 
					 | 
				
			||||||
  SECTION:=kernel
 | 
					 | 
				
			||||||
  DEPENDS:=@TARGET_brcm_2_4 +wireless-tools
 | 
					 | 
				
			||||||
  TITLE:=Kernel driver for BCM43xx chipsets
 | 
					 | 
				
			||||||
  FILES:=$(PKG_BUILD_DIR)/driver/wl$(1).o
 | 
					 | 
				
			||||||
  AUTOLOAD:=$(call AutoLoad,30,wl$(1))
 | 
					 | 
				
			||||||
endef
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
define KernelPackage/brcm-wl-old/Default/description
 | 
					 | 
				
			||||||
 This package contains the proprietary wireless driver for the Broadcom 
 | 
					 | 
				
			||||||
 BCM43xx chipset.
 | 
					 | 
				
			||||||
endef
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
define KernelPackage/brcm-wl-old
 | 
					 | 
				
			||||||
$(call KernelPackage/brcm-wl-old/Default,)
 | 
					 | 
				
			||||||
  TITLE+= (normal version)
 | 
					 | 
				
			||||||
endef
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
define KernelPackage/brcm-wl-old/description
 | 
					 | 
				
			||||||
$(call KernelPackage/brcm-wl-old/Default/description)
 | 
					 | 
				
			||||||
endef
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
define KernelPackage/brcm-wl-mimo-old
 | 
					 | 
				
			||||||
$(call KernelPackage/brcm-wl-old/Default,_mimo)
 | 
					 | 
				
			||||||
  TITLE+= (MIMO version)
 | 
					 | 
				
			||||||
endef
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
define KernelPackage/brcm-wl-mimo-old/description
 | 
					 | 
				
			||||||
$(call KernelPackage/brcm-wl-old/Default/description)
 | 
					 | 
				
			||||||
endef
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
define KernelPackage/wlcompat/Default
 | 
					 | 
				
			||||||
  $(call KernelPackage/brcm-wl-old/Default,)
 | 
					 | 
				
			||||||
  TITLE:=Kernel driver for BCM43xx chipsets
 | 
					 | 
				
			||||||
  FILES:=$(PKG_BUILD_DIR)/wlcompat/wlcompat$(1).o
 | 
					 | 
				
			||||||
endef
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
define KernelPackage/wlcompat
 | 
					 | 
				
			||||||
$(call KernelPackage/wlcompat/Default,)
 | 
					 | 
				
			||||||
  AUTOLOAD:=$(call AutoLoad,50,wlcompat)
 | 
					 | 
				
			||||||
endef
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
define KernelPackage/wlcompat/description
 | 
					 | 
				
			||||||
 This package contains a wrapper module, that provides Wireless Extension 
 | 
					 | 
				
			||||||
 support for the proprietary Broadcom wl module.
 | 
					 | 
				
			||||||
endef
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
define KernelPackage/wlcompat-debug
 | 
					 | 
				
			||||||
$(call KernelPackage/wlcompat/Default,-debug)
 | 
					 | 
				
			||||||
  TITLE+= (debug)
 | 
					 | 
				
			||||||
  AUTOLOAD:=
 | 
					 | 
				
			||||||
endef
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
define KernelPackage/wlcompat-debug/description
 | 
					 | 
				
			||||||
$(call KernelPackage/wlcompat/description)
 | 
					 | 
				
			||||||
 This is the debugging version.
 | 
					 | 
				
			||||||
endef
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
define Package/wlc-old
 | 
					 | 
				
			||||||
$(call Package/broadcom-wl-old/Default)
 | 
					 | 
				
			||||||
  TITLE:=wl driver setup utility
 | 
					 | 
				
			||||||
endef
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
define Package/wlc-old/description
 | 
					 | 
				
			||||||
 This package contains an utility for initializing the proprietary Broadcom 
 | 
					 | 
				
			||||||
 wl driver.
 | 
					 | 
				
			||||||
endef
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
define Package/wl-old
 | 
					 | 
				
			||||||
$(call Package/broadcom-wl-old/Default)
 | 
					 | 
				
			||||||
  TITLE:=Proprietary Broadcom wl driver config utility
 | 
					 | 
				
			||||||
endef
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
define Package/wl-old/description
 | 
					 | 
				
			||||||
 This package contains the proprietary utility (wl) for configuring the 
 | 
					 | 
				
			||||||
 proprietary Broadcom wl driver.
 | 
					 | 
				
			||||||
endef
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
define Package/nas-old
 | 
					 | 
				
			||||||
$(call Package/broadcom-wl-old/Default)
 | 
					 | 
				
			||||||
  TITLE:=Proprietary Broadcom WPA/WPA2 authenticator
 | 
					 | 
				
			||||||
endef
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
define Package/nas-old/description
 | 
					 | 
				
			||||||
 This package contains the proprietary WPA/WPA2 authenticator (nas) for the 
 | 
					 | 
				
			||||||
 proprietary Broadcom wl driver.
 | 
					 | 
				
			||||||
endef
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
MAKE_KMOD := $(MAKE) -C "$(LINUX_DIR)" \
 | 
					 | 
				
			||||||
		CROSS_COMPILE="$(TARGET_CROSS)" \
 | 
					 | 
				
			||||||
		ARCH="$(LINUX_KARCH)" \
 | 
					 | 
				
			||||||
		PATH="$(TARGET_PATH)" \
 | 
					 | 
				
			||||||
		SUBDIRS="$(PKG_BUILD_DIR)/kmod"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
define Build/Prepare
 | 
					 | 
				
			||||||
	$(call Build/Prepare/Default)
 | 
					 | 
				
			||||||
	$(CP) src/* $(PKG_BUILD_DIR)/
 | 
					 | 
				
			||||||
endef
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
define Build/Compile
 | 
					 | 
				
			||||||
	# Compile the kernel part
 | 
					 | 
				
			||||||
	$(MAKE_KMOD) \
 | 
					 | 
				
			||||||
		SUBDIRS="$(PKG_BUILD_DIR)/driver" \
 | 
					 | 
				
			||||||
		modules
 | 
					 | 
				
			||||||
	$(MAKE_KMOD) \
 | 
					 | 
				
			||||||
		SUBDIRS="$(PKG_BUILD_DIR)/driver" \
 | 
					 | 
				
			||||||
		MOD_NAME="_mimo" \
 | 
					 | 
				
			||||||
		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
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	# NVRAM stub
 | 
					 | 
				
			||||||
	$(TARGET_CC) $(TARGET_CFLAGS) -c -o $(PKG_BUILD_DIR)/nvram/nvram_stub.o $(PKG_BUILD_DIR)/nvram/nvram_stub.c
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	# Compile wlc
 | 
					 | 
				
			||||||
	$(MAKE) -C $(PKG_BUILD_DIR)/wlc \
 | 
					 | 
				
			||||||
		$(TARGET_CONFIGURE_OPTS) \
 | 
					 | 
				
			||||||
		CFLAGS="$(TARGET_CFLAGS)" \
 | 
					 | 
				
			||||||
		all
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	# Compile libshared
 | 
					 | 
				
			||||||
	$(MAKE) -C $(PKG_BUILD_DIR)/router/shared \
 | 
					 | 
				
			||||||
		$(TARGET_CONFIGURE_OPTS) \
 | 
					 | 
				
			||||||
		CFLAGS="$(TARGET_CFLAGS) -I. -I$(PKG_BUILD_DIR)/include -Dlinux=1" \
 | 
					 | 
				
			||||||
		all
 | 
					 | 
				
			||||||
	$(TARGET_CC) -o $(PKG_BUILD_DIR)/nas \
 | 
					 | 
				
			||||||
		$(PKG_BUILD_DIR)/nas_exe.o \
 | 
					 | 
				
			||||||
		$(PKG_BUILD_DIR)/nvram/nvram_stub.o \
 | 
					 | 
				
			||||||
		$(TARGET_LDFLAGS) \
 | 
					 | 
				
			||||||
		$(PKG_BUILD_DIR)/router/shared/libshared.a
 | 
					 | 
				
			||||||
	$(TARGET_CC) -o $(PKG_BUILD_DIR)/wl $(PKG_BUILD_DIR)/wl_exe.o
 | 
					 | 
				
			||||||
endef
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
define Build/InstallDev
 | 
					 | 
				
			||||||
	$(INSTALL_DIR) $(1)/usr/lib
 | 
					 | 
				
			||||||
	$(CP) $(PKG_BUILD_DIR)/router/shared/libshared.a $(1)/usr/lib/
 | 
					 | 
				
			||||||
endef
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
define Package/wlc-old/install
 | 
					 | 
				
			||||||
	$(CP) ./files/* $(1)/
 | 
					 | 
				
			||||||
	$(INSTALL_DIR) $(1)/sbin
 | 
					 | 
				
			||||||
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/wlc/wlc $(1)/sbin/
 | 
					 | 
				
			||||||
endef
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
define Package/wl-old/install
 | 
					 | 
				
			||||||
	$(INSTALL_DIR) $(1)/usr/sbin
 | 
					 | 
				
			||||||
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/wl $(1)/usr/sbin/
 | 
					 | 
				
			||||||
endef
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
define Package/nas-old/install
 | 
					 | 
				
			||||||
	$(INSTALL_DIR) $(1)/usr/sbin
 | 
					 | 
				
			||||||
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/nas $(1)/usr/sbin/
 | 
					 | 
				
			||||||
	ln -sf nas $(1)/usr/sbin/nas4not
 | 
					 | 
				
			||||||
	ln -sf nas $(1)/usr/sbin/nas4wds
 | 
					 | 
				
			||||||
endef
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$(eval $(call KernelPackage,brcm-wl-old))
 | 
					 | 
				
			||||||
$(eval $(call KernelPackage,brcm-wl-mimo-old))
 | 
					 | 
				
			||||||
$(eval $(call KernelPackage,wlcompat))
 | 
					 | 
				
			||||||
$(eval $(call KernelPackage,wlcompat-debug))
 | 
					 | 
				
			||||||
$(eval $(call BuildPackage,wlc-old))
 | 
					 | 
				
			||||||
$(eval $(call BuildPackage,wl-old))
 | 
					 | 
				
			||||||
$(eval $(call BuildPackage,nas-old))
 | 
					 | 
				
			||||||
@ -1,59 +0,0 @@
 | 
				
			|||||||
include /lib/wifi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
setup_broadcom_wds() {
 | 
					 | 
				
			||||||
	local iface="$1"
 | 
					 | 
				
			||||||
	local remote="$(wlc ifname "$iface" wdsmac)"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	[ -z "$remote" ] && return
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	config_cb() {
 | 
					 | 
				
			||||||
		[ -z "$CONFIG_SECTION" ] && return
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
		config_get type "$CONFIG_SECTION" TYPE
 | 
					 | 
				
			||||||
		[ "$type" = "wifi-iface" ] || return
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		config_get network "$CONFIG_SECTION" network
 | 
					 | 
				
			||||||
		[ -z "$network" ] && return
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		config_get addr "$CONFIG_SECTION" bssid
 | 
					 | 
				
			||||||
		addr=$(echo "$addr" | tr 'A-F' 'a-f')
 | 
					 | 
				
			||||||
		[ "$addr" = "$remote" ] && {
 | 
					 | 
				
			||||||
			local cfg="$CONFIG_SECTION"
 | 
					 | 
				
			||||||
			
 | 
					 | 
				
			||||||
			include /lib/network
 | 
					 | 
				
			||||||
			scan_interfaces
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			setup_interface "$iface" "$network"
 | 
					 | 
				
			||||||
			
 | 
					 | 
				
			||||||
			config_get encryption "$cfg" encryption
 | 
					 | 
				
			||||||
			config_get key "$cfg" key
 | 
					 | 
				
			||||||
			config_get ssid "$cfg" ssid
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
			[ "$encryption" != "none" ] && {
 | 
					 | 
				
			||||||
				sleep 5
 | 
					 | 
				
			||||||
				case "$encryption" in
 | 
					 | 
				
			||||||
					psk|PSK)
 | 
					 | 
				
			||||||
						nas4not "$network" "$iface" up auto tkip psk "$key" "$ssid"
 | 
					 | 
				
			||||||
						;;
 | 
					 | 
				
			||||||
					psk2|PSK2)
 | 
					 | 
				
			||||||
						nas4not "$network" "$iface" up auto aes psk "$key" "$ssid"
 | 
					 | 
				
			||||||
						;;
 | 
					 | 
				
			||||||
					psk+psk2|psk2+psk|PSK+PSK2|PSK2+PSK)
 | 
					 | 
				
			||||||
						nas4not "$network" "$iface" up auto aes+tkip psk "$key" "$ssid"
 | 
					 | 
				
			||||||
						;;
 | 
					 | 
				
			||||||
					*)
 | 
					 | 
				
			||||||
						nas4not lan "$iface" up auto aes "$encryption" "$key" "$ssid"
 | 
					 | 
				
			||||||
						;;
 | 
					 | 
				
			||||||
					esac
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	config_load wireless
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
case "$ACTION" in
 | 
					 | 
				
			||||||
	add|register)
 | 
					 | 
				
			||||||
		[ "${INTERFACE%%0.*}" = wds ] && setup_broadcom_wds "$INTERFACE"
 | 
					 | 
				
			||||||
	;;
 | 
					 | 
				
			||||||
esac
 | 
					 | 
				
			||||||
@ -1,372 +0,0 @@
 | 
				
			|||||||
append DRIVERS "broadcom"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
scan_broadcom() {
 | 
					 | 
				
			||||||
	local device="$1"
 | 
					 | 
				
			||||||
	local wds
 | 
					 | 
				
			||||||
	local adhoc sta apmode mon
 | 
					 | 
				
			||||||
	local adhoc_if sta_if ap_if mon_if
 | 
					 | 
				
			||||||
	local _c=0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	config_get vifs "$device" vifs
 | 
					 | 
				
			||||||
	for vif in $vifs; do
 | 
					 | 
				
			||||||
		config_get mode "$vif" mode
 | 
					 | 
				
			||||||
		_c=$(($_c + 1))
 | 
					 | 
				
			||||||
		case "$mode" in
 | 
					 | 
				
			||||||
			adhoc)
 | 
					 | 
				
			||||||
				adhoc=1
 | 
					 | 
				
			||||||
				adhoc_if="$vif"
 | 
					 | 
				
			||||||
			;;
 | 
					 | 
				
			||||||
			sta)
 | 
					 | 
				
			||||||
				sta=1
 | 
					 | 
				
			||||||
				sta_if="$vif"
 | 
					 | 
				
			||||||
			;;
 | 
					 | 
				
			||||||
			ap)
 | 
					 | 
				
			||||||
				apmode=1
 | 
					 | 
				
			||||||
				ap_if="${ap_if:+$ap_if }$vif"
 | 
					 | 
				
			||||||
			;;
 | 
					 | 
				
			||||||
			wds)
 | 
					 | 
				
			||||||
				config_get addr "$vif" bssid
 | 
					 | 
				
			||||||
				[ -z "$addr" ] || {
 | 
					 | 
				
			||||||
					addr=$(echo "$addr" | tr 'A-F' 'a-f')
 | 
					 | 
				
			||||||
					append wds "$addr"
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			;;
 | 
					 | 
				
			||||||
			monitor)
 | 
					 | 
				
			||||||
				mon=1
 | 
					 | 
				
			||||||
				mon_if="$vif"
 | 
					 | 
				
			||||||
			;;
 | 
					 | 
				
			||||||
			*) echo "$device($vif): Invalid mode";;
 | 
					 | 
				
			||||||
		esac
 | 
					 | 
				
			||||||
	done
 | 
					 | 
				
			||||||
	config_set "$device" wds "$wds"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	local _c=
 | 
					 | 
				
			||||||
	for vif in ${adhoc_if:-$sta_if $ap_if $mon_if}; do
 | 
					 | 
				
			||||||
		config_set "$vif" ifname "${device}${_c:+.$_c}"
 | 
					 | 
				
			||||||
		_c=$((${_c:-0} + 1))
 | 
					 | 
				
			||||||
	done
 | 
					 | 
				
			||||||
	config_set "$device" vifs "${adhoc_if:-$sta_if $ap_if $mon_if}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	ifdown="down"
 | 
					 | 
				
			||||||
	for vif in 0 1 2 3; do
 | 
					 | 
				
			||||||
		append ifdown "vif $vif" "$N"
 | 
					 | 
				
			||||||
		append ifdown "enabled 0" "$N"
 | 
					 | 
				
			||||||
	done
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	ap=1
 | 
					 | 
				
			||||||
	infra=1
 | 
					 | 
				
			||||||
	if [ "$_c" -gt 1 ]; then
 | 
					 | 
				
			||||||
		mssid=1
 | 
					 | 
				
			||||||
	else
 | 
					 | 
				
			||||||
		mssid=
 | 
					 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
	apsta=0
 | 
					 | 
				
			||||||
	radio=1
 | 
					 | 
				
			||||||
	monitor=0
 | 
					 | 
				
			||||||
	passive=0
 | 
					 | 
				
			||||||
	case "$adhoc:$sta:$apmode:$mon" in
 | 
					 | 
				
			||||||
		1*)
 | 
					 | 
				
			||||||
			ap=0
 | 
					 | 
				
			||||||
			mssid=
 | 
					 | 
				
			||||||
			infra=0
 | 
					 | 
				
			||||||
		;;
 | 
					 | 
				
			||||||
		:1:1:)
 | 
					 | 
				
			||||||
			apsta=1
 | 
					 | 
				
			||||||
			wet=1
 | 
					 | 
				
			||||||
		;;
 | 
					 | 
				
			||||||
		:1::)
 | 
					 | 
				
			||||||
			wet=1
 | 
					 | 
				
			||||||
			ap=0
 | 
					 | 
				
			||||||
			mssid=
 | 
					 | 
				
			||||||
		;;
 | 
					 | 
				
			||||||
		:::1)
 | 
					 | 
				
			||||||
			wet=1
 | 
					 | 
				
			||||||
			ap=0
 | 
					 | 
				
			||||||
			mssid=
 | 
					 | 
				
			||||||
			monitor=1
 | 
					 | 
				
			||||||
			passive=1
 | 
					 | 
				
			||||||
		;;
 | 
					 | 
				
			||||||
		::)
 | 
					 | 
				
			||||||
			radio=0
 | 
					 | 
				
			||||||
		;;
 | 
					 | 
				
			||||||
	esac
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
disable_broadcom() {
 | 
					 | 
				
			||||||
	local device="$1"
 | 
					 | 
				
			||||||
	set_wifi_down "$device"
 | 
					 | 
				
			||||||
	wlc ifname "$device" down
 | 
					 | 
				
			||||||
	(
 | 
					 | 
				
			||||||
		include /lib/network
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		# make sure the interfaces are down and removed from all bridges
 | 
					 | 
				
			||||||
		for dev in $device ${device}.1 ${device}.2 ${device}.3; do
 | 
					 | 
				
			||||||
			ifconfig "$dev" down 2>/dev/null >/dev/null && {
 | 
					 | 
				
			||||||
				unbridge "$dev"
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		done
 | 
					 | 
				
			||||||
	)
 | 
					 | 
				
			||||||
	true
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
enable_broadcom() {
 | 
					 | 
				
			||||||
	local device="$1"
 | 
					 | 
				
			||||||
	local _c
 | 
					 | 
				
			||||||
	config_get channel "$device" channel
 | 
					 | 
				
			||||||
	config_get country "$device" country
 | 
					 | 
				
			||||||
	config_get maxassoc "$device" maxassoc
 | 
					 | 
				
			||||||
	config_get wds "$device" wds
 | 
					 | 
				
			||||||
	config_get vifs "$device" vifs
 | 
					 | 
				
			||||||
	config_get distance "$device" distance
 | 
					 | 
				
			||||||
	config_get slottime "$device" slottime
 | 
					 | 
				
			||||||
	config_get rxantenna "$device" rxantenna
 | 
					 | 
				
			||||||
	config_get txantenna "$device" txantenna
 | 
					 | 
				
			||||||
	config_get_bool frameburst "$device" frameburst
 | 
					 | 
				
			||||||
	config_get macfilter "$device" macfilter
 | 
					 | 
				
			||||||
	config_get maclist "$device" maclist
 | 
					 | 
				
			||||||
	config_get macaddr "$device" macaddr
 | 
					 | 
				
			||||||
	config_get txpower "$device" txpower
 | 
					 | 
				
			||||||
	config_get frag "$device" frag
 | 
					 | 
				
			||||||
	config_get rts "$device" rts
 | 
					 | 
				
			||||||
	config_get hwmode "$device" hwmode
 | 
					 | 
				
			||||||
	local vif_pre_up vif_post_up vif_do_up vif_txpower
 | 
					 | 
				
			||||||
	local doth=0
 | 
					 | 
				
			||||||
	local wmm=0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	_c=0
 | 
					 | 
				
			||||||
	nas="$(which nas)"
 | 
					 | 
				
			||||||
	nas_cmd=
 | 
					 | 
				
			||||||
	if_up=
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	[ -z "$slottime" ] && {
 | 
					 | 
				
			||||||
		[ -n "$distance" ] && {
 | 
					 | 
				
			||||||
			# slottime = 9 + (distance / 150) + (distance % 150 ? 1 : 0)
 | 
					 | 
				
			||||||
			slottime="$((9 + ($distance / 150) + 1 - (150 - ($distance % 150)) / 150 ))"
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	} || {
 | 
					 | 
				
			||||||
		slottime="${slottime:--1}"
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	case "$macfilter" in
 | 
					 | 
				
			||||||
		allow|2)
 | 
					 | 
				
			||||||
			macfilter=2;
 | 
					 | 
				
			||||||
		;;
 | 
					 | 
				
			||||||
		deny|1)
 | 
					 | 
				
			||||||
			macfilter=1;
 | 
					 | 
				
			||||||
		;;
 | 
					 | 
				
			||||||
		disable|none|0)
 | 
					 | 
				
			||||||
			macfilter=0;
 | 
					 | 
				
			||||||
		;;
 | 
					 | 
				
			||||||
	esac
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	case "$hwmode" in
 | 
					 | 
				
			||||||
		*b)   hwmode=0;;
 | 
					 | 
				
			||||||
		*bg)  hwmode=1;;
 | 
					 | 
				
			||||||
		*g)   hwmode=2;;
 | 
					 | 
				
			||||||
		*gst) hwmode=4;;
 | 
					 | 
				
			||||||
		*lrs) hwmode=5;;
 | 
					 | 
				
			||||||
		*)    hwmode=1;;
 | 
					 | 
				
			||||||
	esac
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	for vif in $vifs; do
 | 
					 | 
				
			||||||
		config_get vif_txpower "$vif" txpower
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		config_get mode "$vif" mode
 | 
					 | 
				
			||||||
		append vif_pre_up "vif $_c" "$N"
 | 
					 | 
				
			||||||
		append vif_post_up "vif $_c" "$N"
 | 
					 | 
				
			||||||
		append vif_do_up "vif $_c" "$N"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		config_get_bool wmm "$vif" wmm "$wmm"
 | 
					 | 
				
			||||||
		config_get_bool doth "$vif" doth "$doth"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		[ "$mode" = "sta" ] || {
 | 
					 | 
				
			||||||
			config_get_bool hidden "$vif" hidden 0
 | 
					 | 
				
			||||||
			append vif_pre_up "closed $hidden" "$N"
 | 
					 | 
				
			||||||
			config_get_bool isolate "$vif" isolate 0
 | 
					 | 
				
			||||||
			append vif_pre_up "ap_isolate $isolate" "$N"
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		wsec_r=0
 | 
					 | 
				
			||||||
		eap_r=0
 | 
					 | 
				
			||||||
		wsec=0
 | 
					 | 
				
			||||||
		auth=0
 | 
					 | 
				
			||||||
		nasopts=
 | 
					 | 
				
			||||||
		config_get enc "$vif" encryption
 | 
					 | 
				
			||||||
		case "$enc" in
 | 
					 | 
				
			||||||
			*WEP*|*wep*)
 | 
					 | 
				
			||||||
				wsec_r=1
 | 
					 | 
				
			||||||
				wsec=1
 | 
					 | 
				
			||||||
				defkey=1
 | 
					 | 
				
			||||||
				config_get key "$vif" key
 | 
					 | 
				
			||||||
				case "$enc" in
 | 
					 | 
				
			||||||
					*shared*) append vif_do_up "wepauth 1" "$N";;
 | 
					 | 
				
			||||||
					*) append vif_do_up "wepauth 0" "$N";;
 | 
					 | 
				
			||||||
				esac
 | 
					 | 
				
			||||||
				case "$key" in
 | 
					 | 
				
			||||||
					[1234])
 | 
					 | 
				
			||||||
						defkey="$key"
 | 
					 | 
				
			||||||
						for knr in 1 2 3 4; do
 | 
					 | 
				
			||||||
							config_get k "$vif" key$knr
 | 
					 | 
				
			||||||
							[ -n "$k" ] || continue
 | 
					 | 
				
			||||||
							[ "$defkey" = "$knr" ] && def="=" || def=""
 | 
					 | 
				
			||||||
							append vif_do_up "wepkey $def$knr,$k" "$N"
 | 
					 | 
				
			||||||
						done
 | 
					 | 
				
			||||||
					;;
 | 
					 | 
				
			||||||
					"");;
 | 
					 | 
				
			||||||
					*) append vif_do_up "wepkey =1,$key" "$N";;
 | 
					 | 
				
			||||||
				esac
 | 
					 | 
				
			||||||
			;;
 | 
					 | 
				
			||||||
			*psk*|*PSK*)
 | 
					 | 
				
			||||||
				wsec_r=1
 | 
					 | 
				
			||||||
				config_get key "$vif" key
 | 
					 | 
				
			||||||
				case "$enc" in
 | 
					 | 
				
			||||||
					wpa*+wpa2*|WPA*+WPA2*|*psk+*psk2|*PSK+*PSK2) auth=132; wsec=6;;
 | 
					 | 
				
			||||||
					wpa2*|WPA2*|*PSK2|*psk2) auth=128; wsec=4;;
 | 
					 | 
				
			||||||
					*aes|*AES) auth=4; wsec=4;;
 | 
					 | 
				
			||||||
					*) auth=4; wsec=2;;
 | 
					 | 
				
			||||||
				esac
 | 
					 | 
				
			||||||
				eval "${vif}_key=\"\$key\""
 | 
					 | 
				
			||||||
				nasopts="-k \"\$${vif}_key\""
 | 
					 | 
				
			||||||
			;;
 | 
					 | 
				
			||||||
			*wpa*|*WPA*)
 | 
					 | 
				
			||||||
				wsec_r=1
 | 
					 | 
				
			||||||
				eap_r=1
 | 
					 | 
				
			||||||
				config_get key "$vif" key
 | 
					 | 
				
			||||||
				config_get server "$vif" server
 | 
					 | 
				
			||||||
				config_get port "$vif" port
 | 
					 | 
				
			||||||
				case "$enc" in
 | 
					 | 
				
			||||||
					wpa*+wpa2*|WPA*+WPA2*) auth=66; wsec=6;;
 | 
					 | 
				
			||||||
					wpa2*|WPA2*) auth=64; wsec=4;;
 | 
					 | 
				
			||||||
					*) auth=2; wsec=2;;
 | 
					 | 
				
			||||||
				esac
 | 
					 | 
				
			||||||
				eval "${vif}_key=\"\$key\""
 | 
					 | 
				
			||||||
				nasopts="-r \"\$${vif}_key\" -h $server -p ${port:-1812}"
 | 
					 | 
				
			||||||
			;;
 | 
					 | 
				
			||||||
		esac
 | 
					 | 
				
			||||||
		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"
 | 
					 | 
				
			||||||
		append vif_do_up "ssid $ssid" "$N"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		[ "$mode" = "monitor" ] && {
 | 
					 | 
				
			||||||
			append vif_post_up "monitor $monitor" "$N"
 | 
					 | 
				
			||||||
			append vif_post_up "passive $passive" "$N"
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		[ "$mode" = "adhoc" ] && {
 | 
					 | 
				
			||||||
			config_get bssid "$vif" bssid
 | 
					 | 
				
			||||||
			[ -n "$bssid" ] && {
 | 
					 | 
				
			||||||
				append vif_pre_up "des_bssid $bssid" "$N"
 | 
					 | 
				
			||||||
				append vif_pre_up "allow_mode 1" "$N"
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		} || append vif_pre_up "allow_mode 0" "$N"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		append vif_post_up "enabled 1" "$N"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		config_get ifname "$vif" ifname
 | 
					 | 
				
			||||||
		#append if_up "ifconfig $ifname up" ";$N"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		local net_cfg bridge
 | 
					 | 
				
			||||||
		net_cfg="$(find_net_config "$vif")"
 | 
					 | 
				
			||||||
		[ -z "$net_cfg" ] || {
 | 
					 | 
				
			||||||
			bridge="$(bridge_interface "$net_cfg")"
 | 
					 | 
				
			||||||
			append if_up "set_wifi_up '$vif' '$ifname'" ";$N"
 | 
					 | 
				
			||||||
			append if_up "start_net '$ifname' '$net_cfg' \$(wlc ifname '$ifname' bssid)" ";$N"
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		[ -z "$nasopts" ] || {
 | 
					 | 
				
			||||||
			eval "${vif}_ssid=\"\$ssid\""
 | 
					 | 
				
			||||||
			nas_mode="-A"
 | 
					 | 
				
			||||||
			use_nas=1
 | 
					 | 
				
			||||||
			[ "$mode" = "sta" ] && {
 | 
					 | 
				
			||||||
				nas_mode="-S"
 | 
					 | 
				
			||||||
				[ -z "$bridge" ] || {
 | 
					 | 
				
			||||||
					append vif_post_up "supplicant 1" "$N"
 | 
					 | 
				
			||||||
					append vif_post_up "passphrase $key" "$N"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
					use_nas=0
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			[ -z "$nas" -o "$use_nas" = "0" ] || {
 | 
					 | 
				
			||||||
				nas_cmd="${nas_cmd:+$nas_cmd$N}start-stop-daemon -S -b -p /var/run/nas.$ifname.pid -x $nas -- -P /var/run/nas.$ifname.pid -H 34954 ${bridge:+ -l $bridge} -i $ifname $nas_mode -m $auth -w $wsec -s \"\$${vif}_ssid\" -g 3600 $nasopts"
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		_c=$(($_c + 1))
 | 
					 | 
				
			||||||
	done
 | 
					 | 
				
			||||||
	killall -KILL nas >&- 2>&-
 | 
					 | 
				
			||||||
	wlc ifname "$device" stdin <<EOF
 | 
					 | 
				
			||||||
$ifdown
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
gmode ${hwmode:-1}
 | 
					 | 
				
			||||||
apsta $apsta
 | 
					 | 
				
			||||||
ap $ap
 | 
					 | 
				
			||||||
${mssid:+mssid $mssid}
 | 
					 | 
				
			||||||
infra $infra
 | 
					 | 
				
			||||||
${wet:+wet 1}
 | 
					 | 
				
			||||||
802.11d 0
 | 
					 | 
				
			||||||
802.11h ${doth:-0}
 | 
					 | 
				
			||||||
wme ${wmm:-0}
 | 
					 | 
				
			||||||
rxant ${rxantenna:-3}
 | 
					 | 
				
			||||||
txant ${txantenna:-3}
 | 
					 | 
				
			||||||
fragthresh ${frag:-2346}
 | 
					 | 
				
			||||||
rtsthresh ${rts:-2347}
 | 
					 | 
				
			||||||
monitor ${monitor:-0}
 | 
					 | 
				
			||||||
passive ${passive:-0}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
radio ${radio:-1}
 | 
					 | 
				
			||||||
macfilter ${macfilter:-0}
 | 
					 | 
				
			||||||
maclist ${maclist:-none}
 | 
					 | 
				
			||||||
wds none
 | 
					 | 
				
			||||||
${wds:+wds $wds}
 | 
					 | 
				
			||||||
country ${country:-IL0}
 | 
					 | 
				
			||||||
${channel:+channel $channel}
 | 
					 | 
				
			||||||
maxassoc ${maxassoc:-128}
 | 
					 | 
				
			||||||
slottime ${slottime:--1}
 | 
					 | 
				
			||||||
${frameburst:+frameburst $frameburst}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$vif_pre_up
 | 
					 | 
				
			||||||
up
 | 
					 | 
				
			||||||
$vif_post_up
 | 
					 | 
				
			||||||
EOF
 | 
					 | 
				
			||||||
	eval "$if_up"
 | 
					 | 
				
			||||||
	wlc ifname "$device" stdin <<EOF
 | 
					 | 
				
			||||||
$vif_do_up
 | 
					 | 
				
			||||||
EOF
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	# use vif_txpower (from last wifi-iface) instead of txpower (from
 | 
					 | 
				
			||||||
	# wifi-device) if the latter does not exist
 | 
					 | 
				
			||||||
	txpower=${txpower:-$vif_txpower}
 | 
					 | 
				
			||||||
	[ -z "$txpower" ] || iwconfig $device txpower ${txpower}dBm
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	eval "$nas_cmd"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
detect_broadcom() {
 | 
					 | 
				
			||||||
	local i=-1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	while [ -f /proc/net/wl$((++i)) ]; do
 | 
					 | 
				
			||||||
		config_get type wl${i} type
 | 
					 | 
				
			||||||
		[ "$type" = broadcom ] && continue
 | 
					 | 
				
			||||||
		cat <<EOF
 | 
					 | 
				
			||||||
config wifi-device  wl${i}
 | 
					 | 
				
			||||||
	option type     broadcom
 | 
					 | 
				
			||||||
	option channel  5
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	# REMOVE THIS LINE TO ENABLE WIFI:
 | 
					 | 
				
			||||||
	option disabled 1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
config wifi-iface
 | 
					 | 
				
			||||||
	option device   wl${i}
 | 
					 | 
				
			||||||
	option network	lan
 | 
					 | 
				
			||||||
	option mode     ap
 | 
					 | 
				
			||||||
	option ssid     OpenWrt${i#0}
 | 
					 | 
				
			||||||
	option encryption none
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
EOF
 | 
					 | 
				
			||||||
	done
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,51 +0,0 @@
 | 
				
			|||||||
--- a/router/shared/linux_timer.c
 | 
					 | 
				
			||||||
+++ b/router/shared/linux_timer.c
 | 
					 | 
				
			||||||
@@ -94,6 +94,7 @@ typedef long uclock_t;
 | 
					 | 
				
			||||||
 #define TFLAG_NONE	0
 | 
					 | 
				
			||||||
 #define TFLAG_CANCELLED	(1<<0)
 | 
					 | 
				
			||||||
 #define TFLAG_DELETED	(1<<1)
 | 
					 | 
				
			||||||
+#define TFLAG_QUEUED	(1<<2)
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
 struct event {
 | 
					 | 
				
			||||||
     struct timeval it_interval;
 | 
					 | 
				
			||||||
@@ -207,6 +208,7 @@ int timer_create(
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
 	event_freelist = event->next;
 | 
					 | 
				
			||||||
 	event->next = NULL;
 | 
					 | 
				
			||||||
+	event->flags &= ~TFLAG_QUEUED;
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
 	check_event_queue();
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
@@ -387,6 +389,7 @@ int timer_settime
 | 
					 | 
				
			||||||
 	}
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
 	event->flags &= ~TFLAG_CANCELLED;
 | 
					 | 
				
			||||||
+	event->flags |= TFLAG_QUEUED;
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
 	unblock_timer();
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
@@ -502,7 +505,15 @@ static void alarm_handler(int i)
 | 
					 | 
				
			||||||
 		(*(event->func))((timer_t) event, (int)event->arg);
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
 		/* If the event has been cancelled, do NOT put it back on the queue. */
 | 
					 | 
				
			||||||
-		if (!(event->flags & TFLAG_CANCELLED)) {
 | 
					 | 
				
			||||||
+		/* Check for TFLAG_QUEUED is to avoid pathologic case, when after
 | 
					 | 
				
			||||||
+		 * dequeueing event handler deletes its own timer and allocates new one
 | 
					 | 
				
			||||||
+		 * which (at least in some cases) gets the same pointer and thus its
 | 
					 | 
				
			||||||
+		 * 'flags' will be rewritten, most notably TFLAG_CANCELLED, and, to
 | 
					 | 
				
			||||||
+		 * complete the disaster, it will be queued. alarm_handler tries to
 | 
					 | 
				
			||||||
+		 * enqueue 'event' (which is on the same memory position as newly
 | 
					 | 
				
			||||||
+		 * allocated timer), which results in queueing the same pointer once
 | 
					 | 
				
			||||||
+		 * more. And this way, loop in event queue is created. */
 | 
					 | 
				
			||||||
+		if ( !(event->flags & TFLAG_CANCELLED) && !(event->flags & TFLAG_QUEUED) ) {
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
 			/* if the event is a recurring event, reset the timer and
 | 
					 | 
				
			||||||
 			 * find its correct place in the sorted list of events.
 | 
					 | 
				
			||||||
@@ -545,6 +556,7 @@ static void alarm_handler(int i)
 | 
					 | 
				
			||||||
 				/* link our new event into the pending event queue. */
 | 
					 | 
				
			||||||
 				event->next = *ppevent;
 | 
					 | 
				
			||||||
 				*ppevent = event;
 | 
					 | 
				
			||||||
+				event->flags |= TFLAG_QUEUED;
 | 
					 | 
				
			||||||
 			} else {
 | 
					 | 
				
			||||||
 				/* there is no interval, so recycle the event structure.
 | 
					 | 
				
			||||||
 				 * timer_delete((timer_t) event);
 | 
					 | 
				
			||||||
@ -1,27 +0,0 @@
 | 
				
			|||||||
#
 | 
					 | 
				
			||||||
# Makefile for the Broadcom wl driver
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Copyright 2004, 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.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
EXTRA_CFLAGS += -I$(TOPDIR)/arch/mips/bcm947xx/include -DBCMDRIVER=1 -DBCMDMA64=1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
O_TARGET	:= wl$(MOD_NAME).o
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
obj-y		:= wl_mod$(MOD_NAME).o
 | 
					 | 
				
			||||||
obj-y		+= bcmutils.o hnddma.o linux_osl.o
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
obj-m		:= $(O_TARGET)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
wl_mod$(MOD_NAME).o: wl_apsta$(MOD_NAME).o
 | 
					 | 
				
			||||||
	perl -ne 's,eth%d,wl%d\x00,g,print' < $< > $@
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
modules: wl$(MOD_NAME).o
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
include $(TOPDIR)/Rules.make
 | 
					 | 
				
			||||||
@ -1,100 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * 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.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Fundamental constants relating to IP Protocol
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef _bcmip_h_
 | 
					 | 
				
			||||||
#define _bcmip_h_
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* 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_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 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* 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_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_ADDR_STR_LEN	16	/* Max IP address length in string format */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* 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)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif	/* _bcmip_h_ */
 | 
					 | 
				
			||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -1,581 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * 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.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#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_ */
 | 
					 | 
				
			||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -1,159 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * Generic Broadcom Home Networking Division (HND) DMA engine SW interface
 | 
					 | 
				
			||||||
 * This supports the following chips: BCM42xx, 44xx, 47xx .
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * 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.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef	_hnddma_h_
 | 
					 | 
				
			||||||
#define	_hnddma_h_
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
typedef const struct hnddma_pub hnddma_t;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* dma function type */
 | 
					 | 
				
			||||||
typedef void (*di_detach_t)(hnddma_t *dmah);
 | 
					 | 
				
			||||||
typedef bool (*di_txreset_t)(hnddma_t *dmah);
 | 
					 | 
				
			||||||
typedef bool (*di_rxreset_t)(hnddma_t *dmah);
 | 
					 | 
				
			||||||
typedef bool (*di_rxidle_t)(hnddma_t *dmah);
 | 
					 | 
				
			||||||
typedef void (*di_txinit_t)(hnddma_t *dmah);
 | 
					 | 
				
			||||||
typedef bool (*di_txenabled_t)(hnddma_t *dmah);
 | 
					 | 
				
			||||||
typedef void (*di_rxinit_t)(hnddma_t *dmah);
 | 
					 | 
				
			||||||
typedef void (*di_txsuspend_t)(hnddma_t *dmah);
 | 
					 | 
				
			||||||
typedef void (*di_txresume_t)(hnddma_t *dmah);
 | 
					 | 
				
			||||||
typedef bool (*di_txsuspended_t)(hnddma_t *dmah);
 | 
					 | 
				
			||||||
typedef bool (*di_txsuspendedidle_t)(hnddma_t *dmah);
 | 
					 | 
				
			||||||
typedef int (*di_txfast_t)(hnddma_t *dmah, void *p, bool commit);
 | 
					 | 
				
			||||||
typedef void (*di_fifoloopbackenable_t)(hnddma_t *dmah);
 | 
					 | 
				
			||||||
typedef bool  (*di_txstopped_t)(hnddma_t *dmah);
 | 
					 | 
				
			||||||
typedef bool  (*di_rxstopped_t)(hnddma_t *dmah);
 | 
					 | 
				
			||||||
typedef bool  (*di_rxenable_t)(hnddma_t *dmah);
 | 
					 | 
				
			||||||
typedef bool  (*di_rxenabled_t)(hnddma_t *dmah);
 | 
					 | 
				
			||||||
typedef void* (*di_rx_t)(hnddma_t *dmah);
 | 
					 | 
				
			||||||
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, 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);
 | 
					 | 
				
			||||||
typedef void (*di_txblock_t)(hnddma_t *dmah);
 | 
					 | 
				
			||||||
typedef void (*di_txunblock_t)(hnddma_t *dmah);
 | 
					 | 
				
			||||||
typedef uint (*di_txactive_t)(hnddma_t *dmah);
 | 
					 | 
				
			||||||
typedef void (*di_txrotate_t)(hnddma_t *dmah);
 | 
					 | 
				
			||||||
typedef void (*di_counterreset_t)(hnddma_t *dmah);
 | 
					 | 
				
			||||||
typedef char* (*di_dump_t)(hnddma_t *dmah, struct bcmstrbuf *b, bool dumpring);
 | 
					 | 
				
			||||||
typedef char* (*di_dumptx_t)(hnddma_t *dmah, struct bcmstrbuf *b, bool dumpring);
 | 
					 | 
				
			||||||
typedef char* (*di_dumprx_t)(hnddma_t *dmah, struct bcmstrbuf *b, bool dumpring);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* dma opsvec */
 | 
					 | 
				
			||||||
typedef struct di_fcn_s {
 | 
					 | 
				
			||||||
	di_detach_t		detach;
 | 
					 | 
				
			||||||
	di_txinit_t             txinit;
 | 
					 | 
				
			||||||
	di_txreset_t		txreset;
 | 
					 | 
				
			||||||
	di_txenabled_t          txenabled;
 | 
					 | 
				
			||||||
	di_txsuspend_t          txsuspend;
 | 
					 | 
				
			||||||
	di_txresume_t           txresume;
 | 
					 | 
				
			||||||
	di_txsuspended_t        txsuspended;
 | 
					 | 
				
			||||||
	di_txsuspendedidle_t    txsuspendedidle;
 | 
					 | 
				
			||||||
	di_txfast_t             txfast;
 | 
					 | 
				
			||||||
	di_txstopped_t		txstopped;
 | 
					 | 
				
			||||||
	di_txreclaim_t          txreclaim;
 | 
					 | 
				
			||||||
	di_getnexttxp_t         getnexttxp;
 | 
					 | 
				
			||||||
	di_peeknexttxp_t        peeknexttxp;
 | 
					 | 
				
			||||||
	di_txblock_t            txblock;
 | 
					 | 
				
			||||||
	di_txunblock_t          txunblock;
 | 
					 | 
				
			||||||
	di_txactive_t           txactive;
 | 
					 | 
				
			||||||
	di_txrotate_t           txrotate;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	di_rxinit_t             rxinit;
 | 
					 | 
				
			||||||
	di_rxreset_t            rxreset;
 | 
					 | 
				
			||||||
	di_rxidle_t             rxidle;
 | 
					 | 
				
			||||||
	di_rxstopped_t		rxstopped;
 | 
					 | 
				
			||||||
	di_rxenable_t		rxenable;
 | 
					 | 
				
			||||||
	di_rxenabled_t		rxenabled;
 | 
					 | 
				
			||||||
	di_rx_t                 rx;
 | 
					 | 
				
			||||||
	di_rxfill_t             rxfill;
 | 
					 | 
				
			||||||
	di_rxreclaim_t          rxreclaim;
 | 
					 | 
				
			||||||
	di_getnextrxp_t         getnextrxp;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	di_fifoloopbackenable_t fifoloopbackenable;
 | 
					 | 
				
			||||||
	di_getvar_t             d_getvar;
 | 
					 | 
				
			||||||
	di_counterreset_t       counterreset;
 | 
					 | 
				
			||||||
	di_dump_t		dump;
 | 
					 | 
				
			||||||
	di_dumptx_t		dumptx;
 | 
					 | 
				
			||||||
	di_dumprx_t		dumprx;
 | 
					 | 
				
			||||||
	uint			endnum;
 | 
					 | 
				
			||||||
} di_fcn_t;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * Exported data structure (read-only)
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
/* export structure */
 | 
					 | 
				
			||||||
struct hnddma_pub {
 | 
					 | 
				
			||||||
	di_fcn_t	di_fn;		/* DMA function pointers */
 | 
					 | 
				
			||||||
	uint		txavail;	/* # free tx descriptors */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* rx error counters */
 | 
					 | 
				
			||||||
	uint		rxgiants;	/* rx giant frames */
 | 
					 | 
				
			||||||
	uint		rxnobuf;	/* rx out of dma descriptors */
 | 
					 | 
				
			||||||
	/* tx error counters */
 | 
					 | 
				
			||||||
	uint		txnobuf;	/* tx out of dma descriptors */
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
extern 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);
 | 
					 | 
				
			||||||
#define dma_detach(di)			((di)->di_fn.detach(di))
 | 
					 | 
				
			||||||
#define dma_txreset(di)			((di)->di_fn.txreset(di))
 | 
					 | 
				
			||||||
#define dma_rxreset(di)			((di)->di_fn.rxreset(di))
 | 
					 | 
				
			||||||
#define dma_rxidle(di)			((di)->di_fn.rxidle(di))
 | 
					 | 
				
			||||||
#define dma_txinit(di)                  ((di)->di_fn.txinit(di))
 | 
					 | 
				
			||||||
#define dma_txenabled(di)               ((di)->di_fn.txenabled(di))
 | 
					 | 
				
			||||||
#define dma_rxinit(di)                  ((di)->di_fn.rxinit(di))
 | 
					 | 
				
			||||||
#define dma_txsuspend(di)               ((di)->di_fn.txsuspend(di))
 | 
					 | 
				
			||||||
#define dma_txresume(di)                ((di)->di_fn.txresume(di))
 | 
					 | 
				
			||||||
#define dma_txsuspended(di)             ((di)->di_fn.txsuspended(di))
 | 
					 | 
				
			||||||
#define dma_txsuspendedidle(di)         ((di)->di_fn.txsuspendedidle(di))
 | 
					 | 
				
			||||||
#define dma_txfast(di, p, commit)	((di)->di_fn.txfast(di, p, commit))
 | 
					 | 
				
			||||||
#define dma_fifoloopbackenable(di)      ((di)->di_fn.fifoloopbackenable(di))
 | 
					 | 
				
			||||||
#define dma_txstopped(di)               ((di)->di_fn.txstopped(di))
 | 
					 | 
				
			||||||
#define dma_rxstopped(di)               ((di)->di_fn.rxstopped(di))
 | 
					 | 
				
			||||||
#define dma_rxenable(di)                ((di)->di_fn.rxenable(di))
 | 
					 | 
				
			||||||
#define dma_rxenabled(di)               ((di)->di_fn.rxenabled(di))
 | 
					 | 
				
			||||||
#define dma_rx(di)                      ((di)->di_fn.rx(di))
 | 
					 | 
				
			||||||
#define dma_rxfill(di)                  ((di)->di_fn.rxfill(di))
 | 
					 | 
				
			||||||
#define dma_txreclaim(di, forceall)	((di)->di_fn.txreclaim(di, forceall))
 | 
					 | 
				
			||||||
#define dma_rxreclaim(di)               ((di)->di_fn.rxreclaim(di))
 | 
					 | 
				
			||||||
#define dma_getvar(di, name)		((di)->di_fn.d_getvar(di, name))
 | 
					 | 
				
			||||||
#define dma_getnexttxp(di, forceall)    ((di)->di_fn.getnexttxp(di, forceall))
 | 
					 | 
				
			||||||
#define dma_getnextrxp(di, forceall)    ((di)->di_fn.getnextrxp(di, forceall))
 | 
					 | 
				
			||||||
#define dma_peeknexttxp(di)             ((di)->di_fn.peeknexttxp(di))
 | 
					 | 
				
			||||||
#define dma_txblock(di)                 ((di)->di_fn.txblock(di))
 | 
					 | 
				
			||||||
#define dma_txunblock(di)               ((di)->di_fn.txunblock(di))
 | 
					 | 
				
			||||||
#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
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* 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
 | 
					 | 
				
			||||||
 * This info is needed by DMA_ALLOC_CONSISTENT in dma attach
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
extern uint dma_addrwidth(sb_t *sbh, void *dmaregs);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* pio helpers */
 | 
					 | 
				
			||||||
void dma_txpioloopback(osl_t *osh, dma32regs_t *);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif	/* _hnddma_h_ */
 | 
					 | 
				
			||||||
@ -1,889 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * Linux OS Independent Layer
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * 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.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define LINUX_OSL
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <typedefs.h>
 | 
					 | 
				
			||||||
#include <bcmendian.h>
 | 
					 | 
				
			||||||
#include <linuxver.h>
 | 
					 | 
				
			||||||
#include <bcmdefs.h>
 | 
					 | 
				
			||||||
#include <osl.h>
 | 
					 | 
				
			||||||
#include "linux_osl.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 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];
 | 
					 | 
				
			||||||
} bcm_mem_link_t;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#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)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  if (bcmerror > 0)
 | 
					 | 
				
			||||||
    bcmerror = 0;
 | 
					 | 
				
			||||||
  else if (bcmerror < BCME_LAST)
 | 
					 | 
				
			||||||
    bcmerror = BCME_ERROR;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  /* Array bounds covered by ASSERT in osl_attach */
 | 
					 | 
				
			||||||
  return linuxbcmerrormap[-bcmerror];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void
 | 
					 | 
				
			||||||
osl_detach (osl_t * osh)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  if (osh == NULL)
 | 
					 | 
				
			||||||
    return;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  ASSERT (osh->magic == OS_HANDLE_MAGIC);
 | 
					 | 
				
			||||||
  kfree (osh);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* 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)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  uint val;
 | 
					 | 
				
			||||||
  uint retry = PCI_CFG_RETRY;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  ASSERT ((osh && (osh->magic == OS_HANDLE_MAGIC)));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  /* only 4byte access supported */
 | 
					 | 
				
			||||||
  ASSERT (size == 4);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  do
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      pci_read_config_dword (osh->pdev, offset, &val);
 | 
					 | 
				
			||||||
      if (val != 0xffffffff)
 | 
					 | 
				
			||||||
	break;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  while (retry--);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#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 (val);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void
 | 
					 | 
				
			||||||
osl_pci_write_config (osl_t * osh, uint offset, uint size, uint val)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  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 */
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* 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 slot # for the pci device pointed by osh->pdev */
 | 
					 | 
				
			||||||
uint
 | 
					 | 
				
			||||||
osl_pci_slot (osl_t * osh)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  ASSERT (osh && (osh->magic == OS_HANDLE_MAGIC) && osh->pdev);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  return PCI_SLOT (((struct pci_dev *) osh->pdev)->devfn);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static void
 | 
					 | 
				
			||||||
osl_pcmcia_attr (osl_t * osh, uint offset, char *buf, int size, bool write)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  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;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void
 | 
					 | 
				
			||||||
osl_debug_mfree (osl_t * osh, void *addr, uint size, int line, char *file)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  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));
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int
 | 
					 | 
				
			||||||
osl_debug_memdump (osl_t * osh, struct bcmstrbuf *b)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  bcm_mem_link_t *p;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  ASSERT ((osh && (osh->magic == OS_HANDLE_MAGIC)));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  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);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif /* BCMDBG_MEM */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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_mfree (osl_t * osh, void *addr, uint size)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  if (osh)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      ASSERT (osh->magic == OS_HANDLE_MAGIC);
 | 
					 | 
				
			||||||
      osh->malloced -= size;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  kfree (addr);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
uint
 | 
					 | 
				
			||||||
osl_malloced (osl_t * osh)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  ASSERT ((osh && (osh->magic == OS_HANDLE_MAGIC)));
 | 
					 | 
				
			||||||
  return (osh->malloced);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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 (pci_alloc_consistent (osh->pdev, size, (dma_addr_t *) pap));
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void
 | 
					 | 
				
			||||||
osl_dma_free_consistent (osl_t * osh, void *va, uint size, ulong pa)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  ASSERT ((osh && (osh->magic == OS_HANDLE_MAGIC)));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  pci_free_consistent (osh->pdev, size, va, (dma_addr_t) pa);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
uint
 | 
					 | 
				
			||||||
osl_dma_map (osl_t * osh, void *va, uint size, int direction)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  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));
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void
 | 
					 | 
				
			||||||
osl_dma_unmap (osl_t * osh, uint pa, uint size, int direction)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  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);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#if defined(BINOSL) || defined(BCMDBG_ASSERT)
 | 
					 | 
				
			||||||
void
 | 
					 | 
				
			||||||
osl_assert (char *exp, char *file, int line)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  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)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  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)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  uint cycles;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#if defined(mips)
 | 
					 | 
				
			||||||
  cycles = read_c0_count () * 2;
 | 
					 | 
				
			||||||
#elif defined(__i386__)
 | 
					 | 
				
			||||||
  rdtscl (cycles);
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
  cycles = 0;
 | 
					 | 
				
			||||||
#endif /* defined(mips) */
 | 
					 | 
				
			||||||
  return cycles;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void *
 | 
					 | 
				
			||||||
osl_reg_map (uint32 pa, uint size)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  return (ioremap_nocache ((unsigned long) pa, (unsigned long) size));
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void
 | 
					 | 
				
			||||||
osl_reg_unmap (void *va)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  iounmap (va);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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_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 ((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 */
 | 
					 | 
				
			||||||
@ -1,382 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * Linux OS Independent Layer
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * 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.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef _linux_osl_h_
 | 
					 | 
				
			||||||
#define _linux_osl_h_
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <typedefs.h>
 | 
					 | 
				
			||||||
#include <linuxver.h>
 | 
					 | 
				
			||||||
#include <osl.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define OSL_PKTTAG_SZ      32 /* Size of PktTag */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* microsecond delay */
 | 
					 | 
				
			||||||
extern void osl_delay(uint usec);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* OSL initialization */
 | 
					 | 
				
			||||||
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 void osl_mfree(osl_t *osh, void *addr, uint size);
 | 
					 | 
				
			||||||
extern uint osl_malloced(osl_t *osh);
 | 
					 | 
				
			||||||
extern uint osl_malloc_failed(osl_t *osh);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* 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))
 | 
					 | 
				
			||||||
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);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* 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 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))
 | 
					 | 
				
			||||||
#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 PKTHEADROOM(osh, skb)		(PKTDATA(osh, skb)-(((struct sk_buff*)(skb))->head))
 | 
					 | 
				
			||||||
#define PKTTAILROOM(osh, skb) ((((struct sk_buff*)(skb))->end)-(((struct sk_buff*)(skb))->tail))
 | 
					 | 
				
			||||||
#define	PKTNEXT(osh, skb)		(((struct sk_buff*)(skb))->next)
 | 
					 | 
				
			||||||
#define	PKTSETNEXT(osh, skb, x)		(((struct sk_buff*)(skb))->next = (struct sk_buff*)(x))
 | 
					 | 
				
			||||||
#define	PKTSETLEN(osh, skb, len)	__skb_trim((struct sk_buff*)(skb), (len))
 | 
					 | 
				
			||||||
#define	PKTPUSH(osh, skb, bytes)	skb_push((struct sk_buff*)(skb), (bytes))
 | 
					 | 
				
			||||||
#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_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)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	struct sk_buff *nskb;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (osh->pkttag)
 | 
					 | 
				
			||||||
		bzero((void*)skb->cb, OSL_PKTTAG_SZ);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* 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))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* 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
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
static INLINE struct sk_buff *
 | 
					 | 
				
			||||||
osl_pkt_tonative(osl_pubinfo_t *osh, void *pkt)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	struct sk_buff *nskb;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (osh->pkttag)
 | 
					 | 
				
			||||||
		bzero(((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
 | 
					 | 
				
			||||||
		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	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);
 | 
					 | 
				
			||||||
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);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* the largest reasonable packet buffer driver uses for ethernet MTU in bytes */
 | 
					 | 
				
			||||||
#define	PKTBUFSZ	2048   /* largest reasonable packet buffer, driver uses for ethernet MTU */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif	/* _linux_osl_h_ */
 | 
					 | 
				
			||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -1,122 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * 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.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#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_ */
 | 
					 | 
				
			||||||
@ -1,37 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * 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
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#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__ */
 | 
					 | 
				
			||||||
@ -1,19 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * 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
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef _802_3_h_
 | 
					 | 
				
			||||||
#define _802_3_h_
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define SNAP_HDR_LEN	6	/* 802.3 LLC/SNAP header length */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif	/* #ifndef _802_3_h_ */
 | 
					 | 
				
			||||||
@ -1,59 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * 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
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#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_) */
 | 
					 | 
				
			||||||
@ -1,35 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * 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
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#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_ */
 | 
					 | 
				
			||||||
@ -1,100 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * 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.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * 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_ */
 | 
					 | 
				
			||||||
@ -1,165 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * 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
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * 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_ */
 | 
					 | 
				
			||||||
@ -1,151 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * 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
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#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_ */
 | 
					 | 
				
			||||||
@ -1,67 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * 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
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#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_ */
 | 
					 | 
				
			||||||
@ -1,47 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * 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
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#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_ */
 | 
					 | 
				
			||||||
@ -1,44 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * Extensible Authentication Protocol (EAP) definitions
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * See
 | 
					 | 
				
			||||||
 * RFC 2284: PPP Extensible Authentication Protocol (EAP)
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Copyright (C) 2002 Broadcom Corporation
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#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_ */
 | 
					 | 
				
			||||||
@ -1,178 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * 802.1x EAPOL definitions
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * See
 | 
					 | 
				
			||||||
 * IEEE Std 802.1X-2001
 | 
					 | 
				
			||||||
 * IEEE 802.1X RADIUS Usage Guidelines
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Copyright (C) 2002 Broadcom Corporation
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#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_ */
 | 
					 | 
				
			||||||
@ -1,174 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * 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.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#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_ */
 | 
					 | 
				
			||||||
@ -1,51 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * 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.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#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_ */
 | 
					 | 
				
			||||||
@ -1,157 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * 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.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#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_ */
 | 
					 | 
				
			||||||
@ -1,283 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * Generic Broadcom Home Networking Division (HND) DMA engine HW interface
 | 
					 | 
				
			||||||
 * This supports the following chips: BCM42xx, 44xx, 47xx .
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * 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.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef	_sbhnddma_h_
 | 
					 | 
				
			||||||
#define	_sbhnddma_h_
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* DMA structure:
 | 
					 | 
				
			||||||
 *  support two DMA engines: 32 bits address or 64 bit addressing
 | 
					 | 
				
			||||||
 *  basic DMA register set is per channel(transmit or receive)
 | 
					 | 
				
			||||||
 *  a pair of channels is defined for convenience
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* 32 bits addressing */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* dma registers per channel(xmt or rcv) */
 | 
					 | 
				
			||||||
typedef volatile struct {
 | 
					 | 
				
			||||||
	uint32	control;		/* enable, et al */
 | 
					 | 
				
			||||||
	uint32	addr;			/* descriptor ring base address (4K aligned) */
 | 
					 | 
				
			||||||
	uint32	ptr;			/* last descriptor posted to chip */
 | 
					 | 
				
			||||||
	uint32	status;			/* current active descriptor, et al */
 | 
					 | 
				
			||||||
} dma32regs_t;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
typedef volatile struct {
 | 
					 | 
				
			||||||
	dma32regs_t	xmt;		/* dma tx channel */
 | 
					 | 
				
			||||||
	dma32regs_t	rcv;		/* dma rx channel */
 | 
					 | 
				
			||||||
} dma32regp_t;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
typedef volatile struct {	/* diag access */
 | 
					 | 
				
			||||||
	uint32	fifoaddr;		/* diag address */
 | 
					 | 
				
			||||||
	uint32	fifodatalow;		/* low 32bits of data */
 | 
					 | 
				
			||||||
	uint32	fifodatahigh;		/* high 32bits of data */
 | 
					 | 
				
			||||||
	uint32	pad;			/* reserved */
 | 
					 | 
				
			||||||
} dma32diag_t;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * DMA Descriptor
 | 
					 | 
				
			||||||
 * Descriptors are only read by the hardware, never written back.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
typedef volatile struct {
 | 
					 | 
				
			||||||
	uint32	ctrl;		/* misc control bits & bufcount */
 | 
					 | 
				
			||||||
	uint32	addr;		/* data buffer address */
 | 
					 | 
				
			||||||
} dma32dd_t;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * Each descriptor ring must be 4096byte aligned, and fit within a single 4096byte page.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#define	D32MAXRINGSZ	4096
 | 
					 | 
				
			||||||
#define	D32RINGALIGN	4096
 | 
					 | 
				
			||||||
#define	D32MAXDD	(D32MAXRINGSZ / sizeof (dma32dd_t))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* transmit channel control */
 | 
					 | 
				
			||||||
#define	XC_XE		((uint32)1 << 0)	/* transmit enable */
 | 
					 | 
				
			||||||
#define	XC_SE		((uint32)1 << 1)	/* transmit suspend request */
 | 
					 | 
				
			||||||
#define	XC_LE		((uint32)1 << 2)	/* loopback enable */
 | 
					 | 
				
			||||||
#define	XC_FL		((uint32)1 << 4)	/* flush request */
 | 
					 | 
				
			||||||
#define	XC_AE		((uint32)3 << 16)	/* address extension bits */
 | 
					 | 
				
			||||||
#define	XC_AE_SHIFT	16
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* transmit descriptor table pointer */
 | 
					 | 
				
			||||||
#define	XP_LD_MASK	0xfff			/* last valid descriptor */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* transmit channel status */
 | 
					 | 
				
			||||||
#define	XS_CD_MASK	0x0fff			/* current descriptor pointer */
 | 
					 | 
				
			||||||
#define	XS_XS_MASK	0xf000			/* transmit state */
 | 
					 | 
				
			||||||
#define	XS_XS_SHIFT	12
 | 
					 | 
				
			||||||
#define	XS_XS_DISABLED	0x0000			/* disabled */
 | 
					 | 
				
			||||||
#define	XS_XS_ACTIVE	0x1000			/* active */
 | 
					 | 
				
			||||||
#define	XS_XS_IDLE	0x2000			/* idle wait */
 | 
					 | 
				
			||||||
#define	XS_XS_STOPPED	0x3000			/* stopped */
 | 
					 | 
				
			||||||
#define	XS_XS_SUSP	0x4000			/* suspend pending */
 | 
					 | 
				
			||||||
#define	XS_XE_MASK	0xf0000			/* transmit errors */
 | 
					 | 
				
			||||||
#define	XS_XE_SHIFT	16
 | 
					 | 
				
			||||||
#define	XS_XE_NOERR	0x00000			/* no error */
 | 
					 | 
				
			||||||
#define	XS_XE_DPE	0x10000			/* descriptor protocol error */
 | 
					 | 
				
			||||||
#define	XS_XE_DFU	0x20000			/* data fifo underrun */
 | 
					 | 
				
			||||||
#define	XS_XE_BEBR	0x30000			/* bus error on buffer read */
 | 
					 | 
				
			||||||
#define	XS_XE_BEDA	0x40000			/* bus error on descriptor access */
 | 
					 | 
				
			||||||
#define	XS_AD_MASK	0xfff00000		/* active descriptor */
 | 
					 | 
				
			||||||
#define	XS_AD_SHIFT	20
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* receive channel control */
 | 
					 | 
				
			||||||
#define	RC_RE		((uint32)1 << 0)	/* receive enable */
 | 
					 | 
				
			||||||
#define	RC_RO_MASK	0xfe			/* receive frame offset */
 | 
					 | 
				
			||||||
#define	RC_RO_SHIFT	1
 | 
					 | 
				
			||||||
#define	RC_FM		((uint32)1 << 8)	/* direct fifo receive (pio) mode */
 | 
					 | 
				
			||||||
#define	RC_AE		((uint32)3 << 16)	/* address extension bits */
 | 
					 | 
				
			||||||
#define	RC_AE_SHIFT	16
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* receive descriptor table pointer */
 | 
					 | 
				
			||||||
#define	RP_LD_MASK	0xfff			/* last valid descriptor */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* receive channel status */
 | 
					 | 
				
			||||||
#define	RS_CD_MASK	0x0fff			/* current descriptor pointer */
 | 
					 | 
				
			||||||
#define	RS_RS_MASK	0xf000			/* receive state */
 | 
					 | 
				
			||||||
#define	RS_RS_SHIFT	12
 | 
					 | 
				
			||||||
#define	RS_RS_DISABLED	0x0000			/* disabled */
 | 
					 | 
				
			||||||
#define	RS_RS_ACTIVE	0x1000			/* active */
 | 
					 | 
				
			||||||
#define	RS_RS_IDLE	0x2000			/* idle wait */
 | 
					 | 
				
			||||||
#define	RS_RS_STOPPED	0x3000			/* reserved */
 | 
					 | 
				
			||||||
#define	RS_RE_MASK	0xf0000			/* receive errors */
 | 
					 | 
				
			||||||
#define	RS_RE_SHIFT	16
 | 
					 | 
				
			||||||
#define	RS_RE_NOERR	0x00000			/* no error */
 | 
					 | 
				
			||||||
#define	RS_RE_DPE	0x10000			/* descriptor protocol error */
 | 
					 | 
				
			||||||
#define	RS_RE_DFO	0x20000			/* data fifo overflow */
 | 
					 | 
				
			||||||
#define	RS_RE_BEBW	0x30000			/* bus error on buffer write */
 | 
					 | 
				
			||||||
#define	RS_RE_BEDA	0x40000			/* bus error on descriptor access */
 | 
					 | 
				
			||||||
#define	RS_AD_MASK	0xfff00000		/* active descriptor */
 | 
					 | 
				
			||||||
#define	RS_AD_SHIFT	20
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* fifoaddr */
 | 
					 | 
				
			||||||
#define	FA_OFF_MASK	0xffff			/* offset */
 | 
					 | 
				
			||||||
#define	FA_SEL_MASK	0xf0000			/* select */
 | 
					 | 
				
			||||||
#define	FA_SEL_SHIFT	16
 | 
					 | 
				
			||||||
#define	FA_SEL_XDD	0x00000			/* transmit dma data */
 | 
					 | 
				
			||||||
#define	FA_SEL_XDP	0x10000			/* transmit dma pointers */
 | 
					 | 
				
			||||||
#define	FA_SEL_RDD	0x40000			/* receive dma data */
 | 
					 | 
				
			||||||
#define	FA_SEL_RDP	0x50000			/* receive dma pointers */
 | 
					 | 
				
			||||||
#define	FA_SEL_XFD	0x80000			/* transmit fifo data */
 | 
					 | 
				
			||||||
#define	FA_SEL_XFP	0x90000			/* transmit fifo pointers */
 | 
					 | 
				
			||||||
#define	FA_SEL_RFD	0xc0000			/* receive fifo data */
 | 
					 | 
				
			||||||
#define	FA_SEL_RFP	0xd0000			/* receive fifo pointers */
 | 
					 | 
				
			||||||
#define	FA_SEL_RSD	0xe0000			/* receive frame status data */
 | 
					 | 
				
			||||||
#define	FA_SEL_RSP	0xf0000			/* receive frame status pointers */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* descriptor control flags */
 | 
					 | 
				
			||||||
#define	CTRL_BC_MASK	0x1fff			/* buffer byte count */
 | 
					 | 
				
			||||||
#define	CTRL_AE		((uint32)3 << 16)	/* address extension bits */
 | 
					 | 
				
			||||||
#define	CTRL_AE_SHIFT	16
 | 
					 | 
				
			||||||
#define	CTRL_EOT	((uint32)1 << 28)	/* end of descriptor table */
 | 
					 | 
				
			||||||
#define	CTRL_IOC	((uint32)1 << 29)	/* interrupt on completion */
 | 
					 | 
				
			||||||
#define	CTRL_EOF	((uint32)1 << 30)	/* end of frame */
 | 
					 | 
				
			||||||
#define	CTRL_SOF	((uint32)1 << 31)	/* start of frame */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* control flags in the range [27:20] are core-specific and not defined here */
 | 
					 | 
				
			||||||
#define	CTRL_CORE_MASK	0x0ff00000
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* 64 bits addressing */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* dma registers per channel(xmt or rcv) */
 | 
					 | 
				
			||||||
typedef volatile struct {
 | 
					 | 
				
			||||||
	uint32	control;		/* enable, et al */
 | 
					 | 
				
			||||||
	uint32	ptr;			/* last descriptor posted to chip */
 | 
					 | 
				
			||||||
	uint32	addrlow;		/* descriptor ring base address low 32-bits (8K aligned) */
 | 
					 | 
				
			||||||
	uint32	addrhigh;		/* descriptor ring base address bits 63:32 (8K aligned) */
 | 
					 | 
				
			||||||
	uint32	status0;		/* current descriptor, xmt state */
 | 
					 | 
				
			||||||
	uint32	status1;		/* active descriptor, xmt error */
 | 
					 | 
				
			||||||
} dma64regs_t;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
typedef volatile struct {
 | 
					 | 
				
			||||||
	dma64regs_t	tx;		/* dma64 tx channel */
 | 
					 | 
				
			||||||
	dma64regs_t	rx;		/* dma64 rx channel */
 | 
					 | 
				
			||||||
} dma64regp_t;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
typedef volatile struct {		/* diag access */
 | 
					 | 
				
			||||||
	uint32	fifoaddr;		/* diag address */
 | 
					 | 
				
			||||||
	uint32	fifodatalow;		/* low 32bits of data */
 | 
					 | 
				
			||||||
	uint32	fifodatahigh;		/* high 32bits of data */
 | 
					 | 
				
			||||||
	uint32	pad;			/* reserved */
 | 
					 | 
				
			||||||
} dma64diag_t;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * DMA Descriptor
 | 
					 | 
				
			||||||
 * Descriptors are only read by the hardware, never written back.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
typedef volatile struct {
 | 
					 | 
				
			||||||
	uint32	ctrl1;		/* misc control bits & bufcount */
 | 
					 | 
				
			||||||
	uint32	ctrl2;		/* buffer count and address extension */
 | 
					 | 
				
			||||||
	uint32	addrlow;	/* memory address of the date buffer, bits 31:0 */
 | 
					 | 
				
			||||||
	uint32	addrhigh;	/* memory address of the date buffer, bits 63:32 */
 | 
					 | 
				
			||||||
} dma64dd_t;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * Each descriptor ring must be 8kB aligned, and fit within a contiguous 8kB physical addresss.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#define	D64MAXRINGSZ	8192
 | 
					 | 
				
			||||||
#define	D64RINGALIGN	8192
 | 
					 | 
				
			||||||
#define	D64MAXDD	(D64MAXRINGSZ / sizeof (dma64dd_t))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* transmit channel control */
 | 
					 | 
				
			||||||
#define	D64_XC_XE		0x00000001	/* transmit enable */
 | 
					 | 
				
			||||||
#define	D64_XC_SE		0x00000002	/* transmit suspend request */
 | 
					 | 
				
			||||||
#define	D64_XC_LE		0x00000004	/* loopback enable */
 | 
					 | 
				
			||||||
#define	D64_XC_FL		0x00000010	/* flush request */
 | 
					 | 
				
			||||||
#define	D64_XC_AE		0x00030000	/* address extension bits */
 | 
					 | 
				
			||||||
#define	D64_XC_AE_SHIFT		16
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* transmit descriptor table pointer */
 | 
					 | 
				
			||||||
#define	D64_XP_LD_MASK		0x00000fff	/* last valid descriptor */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* transmit channel status */
 | 
					 | 
				
			||||||
#define	D64_XS0_CD_MASK		0x00001fff	/* current descriptor pointer */
 | 
					 | 
				
			||||||
#define	D64_XS0_XS_MASK		0xf0000000     	/* transmit state */
 | 
					 | 
				
			||||||
#define	D64_XS0_XS_SHIFT		28
 | 
					 | 
				
			||||||
#define	D64_XS0_XS_DISABLED	0x00000000	/* disabled */
 | 
					 | 
				
			||||||
#define	D64_XS0_XS_ACTIVE	0x10000000	/* active */
 | 
					 | 
				
			||||||
#define	D64_XS0_XS_IDLE		0x20000000	/* idle wait */
 | 
					 | 
				
			||||||
#define	D64_XS0_XS_STOPPED	0x30000000	/* stopped */
 | 
					 | 
				
			||||||
#define	D64_XS0_XS_SUSP		0x40000000	/* suspend pending */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define	D64_XS1_AD_MASK		0x0001ffff	/* active descriptor */
 | 
					 | 
				
			||||||
#define	D64_XS1_XE_MASK		0xf0000000     	/* transmit errors */
 | 
					 | 
				
			||||||
#define	D64_XS1_XE_SHIFT		28
 | 
					 | 
				
			||||||
#define	D64_XS1_XE_NOERR	0x00000000	/* no error */
 | 
					 | 
				
			||||||
#define	D64_XS1_XE_DPE		0x10000000	/* descriptor protocol error */
 | 
					 | 
				
			||||||
#define	D64_XS1_XE_DFU		0x20000000	/* data fifo underrun */
 | 
					 | 
				
			||||||
#define	D64_XS1_XE_DTE		0x30000000	/* data transfer error */
 | 
					 | 
				
			||||||
#define	D64_XS1_XE_DESRE	0x40000000	/* descriptor read error */
 | 
					 | 
				
			||||||
#define	D64_XS1_XE_COREE	0x50000000	/* core error */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* receive channel control */
 | 
					 | 
				
			||||||
#define	D64_RC_RE		0x00000001	/* receive enable */
 | 
					 | 
				
			||||||
#define	D64_RC_RO_MASK		0x000000fe	/* receive frame offset */
 | 
					 | 
				
			||||||
#define	D64_RC_RO_SHIFT		1
 | 
					 | 
				
			||||||
#define	D64_RC_FM		0x00000100	/* direct fifo receive (pio) mode */
 | 
					 | 
				
			||||||
#define	D64_RC_AE		0x00030000	/* address extension bits */
 | 
					 | 
				
			||||||
#define	D64_RC_AE_SHIFT		16
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* receive descriptor table pointer */
 | 
					 | 
				
			||||||
#define	D64_RP_LD_MASK		0x00000fff	/* last valid descriptor */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* receive channel status */
 | 
					 | 
				
			||||||
#define	D64_RS0_CD_MASK		0x00001fff	/* current descriptor pointer */
 | 
					 | 
				
			||||||
#define	D64_RS0_RS_MASK		0xf0000000     	/* receive state */
 | 
					 | 
				
			||||||
#define	D64_RS0_RS_SHIFT		28
 | 
					 | 
				
			||||||
#define	D64_RS0_RS_DISABLED	0x00000000	/* disabled */
 | 
					 | 
				
			||||||
#define	D64_RS0_RS_ACTIVE	0x10000000	/* active */
 | 
					 | 
				
			||||||
#define	D64_RS0_RS_IDLE		0x20000000	/* idle wait */
 | 
					 | 
				
			||||||
#define	D64_RS0_RS_STOPPED	0x30000000	/* stopped */
 | 
					 | 
				
			||||||
#define	D64_RS0_RS_SUSP		0x40000000	/* suspend pending */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define	D64_RS1_AD_MASK		0x0001ffff	/* active descriptor */
 | 
					 | 
				
			||||||
#define	D64_RS1_RE_MASK		0xf0000000     	/* receive errors */
 | 
					 | 
				
			||||||
#define	D64_RS1_RE_SHIFT		28
 | 
					 | 
				
			||||||
#define	D64_RS1_RE_NOERR	0x00000000	/* no error */
 | 
					 | 
				
			||||||
#define	D64_RS1_RE_DPO		0x10000000	/* descriptor protocol error */
 | 
					 | 
				
			||||||
#define	D64_RS1_RE_DFU		0x20000000	/* data fifo overflow */
 | 
					 | 
				
			||||||
#define	D64_RS1_RE_DTE		0x30000000	/* data transfer error */
 | 
					 | 
				
			||||||
#define	D64_RS1_RE_DESRE	0x40000000	/* descriptor read error */
 | 
					 | 
				
			||||||
#define	D64_RS1_RE_COREE	0x50000000	/* core error */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* fifoaddr */
 | 
					 | 
				
			||||||
#define	D64_FA_OFF_MASK		0xffff		/* offset */
 | 
					 | 
				
			||||||
#define	D64_FA_SEL_MASK		0xf0000		/* select */
 | 
					 | 
				
			||||||
#define	D64_FA_SEL_SHIFT	16
 | 
					 | 
				
			||||||
#define	D64_FA_SEL_XDD		0x00000		/* transmit dma data */
 | 
					 | 
				
			||||||
#define	D64_FA_SEL_XDP		0x10000		/* transmit dma pointers */
 | 
					 | 
				
			||||||
#define	D64_FA_SEL_RDD		0x40000		/* receive dma data */
 | 
					 | 
				
			||||||
#define	D64_FA_SEL_RDP		0x50000		/* receive dma pointers */
 | 
					 | 
				
			||||||
#define	D64_FA_SEL_XFD		0x80000		/* transmit fifo data */
 | 
					 | 
				
			||||||
#define	D64_FA_SEL_XFP		0x90000		/* transmit fifo pointers */
 | 
					 | 
				
			||||||
#define	D64_FA_SEL_RFD		0xc0000		/* receive fifo data */
 | 
					 | 
				
			||||||
#define	D64_FA_SEL_RFP		0xd0000		/* receive fifo pointers */
 | 
					 | 
				
			||||||
#define	D64_FA_SEL_RSD		0xe0000		/* receive frame status data */
 | 
					 | 
				
			||||||
#define	D64_FA_SEL_RSP		0xf0000		/* receive frame status pointers */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* descriptor control flags 1 */
 | 
					 | 
				
			||||||
#define	D64_CTRL1_EOT		((uint32)1 << 28)	/* end of descriptor table */
 | 
					 | 
				
			||||||
#define	D64_CTRL1_IOC		((uint32)1 << 29)	/* interrupt on completion */
 | 
					 | 
				
			||||||
#define	D64_CTRL1_EOF		((uint32)1 << 30)	/* end of frame */
 | 
					 | 
				
			||||||
#define	D64_CTRL1_SOF		((uint32)1 << 31)	/* start of frame */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* descriptor control flags 2 */
 | 
					 | 
				
			||||||
#define	D64_CTRL2_BC_MASK	0x00007fff	/* buffer byte count mask */
 | 
					 | 
				
			||||||
#define	D64_CTRL2_AE		0x00030000	/* address extension bits */
 | 
					 | 
				
			||||||
#define	D64_CTRL2_AE_SHIFT	16
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* control flags in the range [27:20] are core-specific and not defined here */
 | 
					 | 
				
			||||||
#define	D64_CTRL_CORE_MASK	0x0ff00000
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif	/* _sbhnddma_h_ */
 | 
					 | 
				
			||||||
@ -1,105 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * Misc system wide definitions
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * 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.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef	_bcmdefs_h_
 | 
					 | 
				
			||||||
#define	_bcmdefs_h_
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * One doesn't need to include this file explicitly, gets included automatically if
 | 
					 | 
				
			||||||
 * typedefs.h is included.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* Reclaiming text and data :
 | 
					 | 
				
			||||||
 * The following macros specify special linker sections that can be reclaimed
 | 
					 | 
				
			||||||
 * after a system is considered 'up'.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#if defined(__GNUC__) && defined(BCMRECLAIM)
 | 
					 | 
				
			||||||
extern bool	bcmreclaimed;
 | 
					 | 
				
			||||||
#define BCMINITDATA(_data)	__attribute__ ((__section__ (".dataini." #_data))) _data
 | 
					 | 
				
			||||||
#define BCMINITFN(_fn)		__attribute__ ((__section__ (".textini." #_fn))) _fn
 | 
					 | 
				
			||||||
#else /* #if defined(__GNUC__) && defined(BCMRECLAIM) */
 | 
					 | 
				
			||||||
#define BCMINITDATA(_data)	_data
 | 
					 | 
				
			||||||
#define BCMINITFN(_fn)		_fn
 | 
					 | 
				
			||||||
#define bcmreclaimed		0
 | 
					 | 
				
			||||||
#endif /* #if defined(__GNUC__) && defined(BCMRECLAIM) */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* Reclaim uninit functions if BCMNODOWN is defined		*/
 | 
					 | 
				
			||||||
/* and if they are not already removed by -gc-sections	*/
 | 
					 | 
				
			||||||
#ifdef BCMNODOWN
 | 
					 | 
				
			||||||
#define BCMUNINITFN(_fn)		BCMINITFN(_fn)
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
#define BCMUNINITFN(_fn)		_fn
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef BCMRECLAIM
 | 
					 | 
				
			||||||
#define CONST
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
#define CONST	const
 | 
					 | 
				
			||||||
#endif /* BCMRECLAIM */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* Compatibility with old-style BCMRECLAIM */
 | 
					 | 
				
			||||||
#define BCMINIT(_id)		_id
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* Put some library data/code into ROM to reduce RAM requirements */
 | 
					 | 
				
			||||||
#if defined(__GNUC__) && defined(BCMROMOFFLOAD)
 | 
					 | 
				
			||||||
#define BCMROMDATA(_data)	__attribute__ ((__section__ (".datarom." #_data))) _data
 | 
					 | 
				
			||||||
#define BCMROMFN(_fn)		__attribute__ ((__section__ (".textrom." #_fn))) _fn
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
#define BCMROMDATA(_data)	_data
 | 
					 | 
				
			||||||
#define BCMROMFN(_fn)		_fn
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* Bus types */
 | 
					 | 
				
			||||||
#define	SB_BUS			0	/* Silicon Backplane */
 | 
					 | 
				
			||||||
#define	PCI_BUS			1	/* PCI target */
 | 
					 | 
				
			||||||
#define	PCMCIA_BUS		2	/* PCMCIA target */
 | 
					 | 
				
			||||||
#define SDIO_BUS		3	/* SDIO target */
 | 
					 | 
				
			||||||
#define JTAG_BUS		4	/* JTAG */
 | 
					 | 
				
			||||||
#define NO_BUS			0xFF	/* Bus that does not support R/W REG */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* Allows optimization for single-bus support */
 | 
					 | 
				
			||||||
#ifdef BCMBUSTYPE
 | 
					 | 
				
			||||||
#define BUSTYPE(bus) (BCMBUSTYPE)
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
#define BUSTYPE(bus) (bus)
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* Defines for DMA Address Width - Shared between OSL and HNDDMA */
 | 
					 | 
				
			||||||
#define DMADDR_MASK_32 0x0		/* Address mask for 32-bits */
 | 
					 | 
				
			||||||
#define DMADDR_MASK_30 0xc0000000	/* Address mask for 30-bits */
 | 
					 | 
				
			||||||
#define DMADDR_MASK_0  0xffffffff	/* Address mask for 0-bits (hi-part) */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define	DMADDRWIDTH_30  30 /* 30-bit addressing capability */
 | 
					 | 
				
			||||||
#define	DMADDRWIDTH_32  32 /* 32-bit addressing capability */
 | 
					 | 
				
			||||||
#define	DMADDRWIDTH_63  63 /* 64-bit addressing capability */
 | 
					 | 
				
			||||||
#define	DMADDRWIDTH_64  64 /* 64-bit addressing capability */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* packet headroom necessary to accomodate the largest header in the system, (i.e TXOFF).
 | 
					 | 
				
			||||||
 * By doing, we avoid the need  to allocate an extra buffer for the header when bridging to WL.
 | 
					 | 
				
			||||||
 * There is a compile time check in wlc.c which ensure that this value is at least as big
 | 
					 | 
				
			||||||
 * as TXOFF. This value is used in dma_rxfill (hnddma.c).
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#define BCMEXTRAHDROOM 160
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* Headroom required for dongle-to-host communication.  Packets allocated
 | 
					 | 
				
			||||||
 * locally in the dongle (e.g. for CDC ioctls or RNDIS messages) should
 | 
					 | 
				
			||||||
 * leave this much room in front for low-level message headers which may
 | 
					 | 
				
			||||||
 * be needed to get across the dongle bus to the host.  (These messages
 | 
					 | 
				
			||||||
 * don't go over the network, so room for the full WL header above would
 | 
					 | 
				
			||||||
 * be a waste.)
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#define BCMDONGLEHDRSZ 8
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif /* _bcmdefs_h_ */
 | 
					 | 
				
			||||||
@ -1,257 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * 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.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef	_bcmutils_h_
 | 
					 | 
				
			||||||
#define	_bcmutils_h_
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* ** 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 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif	/* _bcmutils_h_ */
 | 
					 | 
				
			||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -1,100 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * Broadcom Ethernettype  protocol definitions
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * 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.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * 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_ */
 | 
					 | 
				
			||||||
@ -1,151 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * Broadcom Event  protocol definitions
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * 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.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Dependencies: proto/bcmeth.h
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * 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 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* theses 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_LAST		31	/* highest val + 1 for range checking */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* 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 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* 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	/* ecryption 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_CCXFAST_PREVAP	11	/* CCX FAST ROAM: prune previous AP */
 | 
					 | 
				
			||||||
#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_CCXFAST_DROAM	14	/* CCX FAST ROAM: prune unqulified AP */
 | 
					 | 
				
			||||||
#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 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* WLC_SET_CALLBACK data type */
 | 
					 | 
				
			||||||
typedef struct wlc_event_cb {
 | 
					 | 
				
			||||||
	void (*fn)(void *, bcm_event_t *);	/* Callback function */
 | 
					 | 
				
			||||||
	void *context;				/* Passed to callback function */
 | 
					 | 
				
			||||||
} wlc_event_cb_t;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#undef PACKED
 | 
					 | 
				
			||||||
#if !defined(__GNUC__)
 | 
					 | 
				
			||||||
#pragma pack()
 | 
					 | 
				
			||||||
#endif /* PACKED */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif /* _BCMEVENT_H_ */
 | 
					 | 
				
			||||||
@ -1,164 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * From FreeBSD 2.2.7: Fundamental constants relating to ethernet.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * 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.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef __NET_ETHERNET_H
 | 
					 | 
				
			||||||
#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_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		/* dest address offset */
 | 
					 | 
				
			||||||
#define ETHER_SRC_OFFSET	6		/* src address offset */
 | 
					 | 
				
			||||||
#define ETHER_TYPE_OFFSET	12		/* 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.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
struct	ether_addr {
 | 
					 | 
				
			||||||
	uint8 octet[ETHER_ADDR_LEN];
 | 
					 | 
				
			||||||
} PACKED;
 | 
					 | 
				
			||||||
#endif	/* !__INCif_etherh Quick and ugly hack for VxWorks */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * Takes a pointer, sets locally admininistered
 | 
					 | 
				
			||||||
 * address bit in the 48-bit Ethernet address.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#define ETHER_SET_LOCALADDR(ea)	(((uint8 *)(ea))[0] = (((uint8 *)(ea))[0] | 2))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * Takes a pointer, returns true if a 48-bit multicast address
 | 
					 | 
				
			||||||
 * (including broadcast, since it is all ones)
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#define ETHER_ISMULTI(ea) (((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}};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * 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 */
 | 
					 | 
				
			||||||
@ -1,147 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * Fundamental types and constants relating to WPA
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * 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.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#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 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* 10 and 11 are from TGh. */
 | 
					 | 
				
			||||||
#define DOT11_RC_BAD_PC			10	/* Unacceptable power capability element */
 | 
					 | 
				
			||||||
#define DOT11_RC_BAD_CHANNELS		11	/* Unacceptable supported channels element */
 | 
					 | 
				
			||||||
/* 12 is unused */
 | 
					 | 
				
			||||||
/* 13 through 23 taken from P802.11i/D3.0, November 2002 */
 | 
					 | 
				
			||||||
#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) */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* WPA capabilities defined in 802.11i */
 | 
					 | 
				
			||||||
#define WPA_CAP_4_REPLAY_CNTRS		2
 | 
					 | 
				
			||||||
#define WPA_CAP_16_REPLAY_CNTRS		3
 | 
					 | 
				
			||||||
#define WPA_CAP_REPLAY_CNTR_SHIFT	2
 | 
					 | 
				
			||||||
#define WPA_CAP_REPLAY_CNTR_MASK	0x000c
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* WPA Specific defines */
 | 
					 | 
				
			||||||
#define WPA_CAP_LEN	2	/* Length of RSN capabilities in RSN IE (2 octets) */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef BCMWPA2
 | 
					 | 
				
			||||||
#define	WPA_CAP_WPA2_PREAUTH		1
 | 
					 | 
				
			||||||
#endif /* BCMWPA2 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#undef PACKED
 | 
					 | 
				
			||||||
#if !defined(__GNUC__)
 | 
					 | 
				
			||||||
#pragma pack()
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif /* _proto_wpa_h_ */
 | 
					 | 
				
			||||||
@ -1,229 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * 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.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef _TYPEDEFS_H_
 | 
					 | 
				
			||||||
#define _TYPEDEFS_H_
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * Inferred Typedefs
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* Infer the compile environment based on preprocessor symbols and pramas.
 | 
					 | 
				
			||||||
 * Override type definitions as needed, and include configuration dependent
 | 
					 | 
				
			||||||
 * header files to define types.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef __cplusplus
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define TYPEDEF_BOOL
 | 
					 | 
				
			||||||
#ifndef FALSE
 | 
					 | 
				
			||||||
#define FALSE	false
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
#ifndef TRUE
 | 
					 | 
				
			||||||
#define TRUE	true
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif	/* __cplusplus */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#if defined(_NEED_SIZE_T_)
 | 
					 | 
				
			||||||
typedef long unsigned int size_t;
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define TYPEDEF_UINT
 | 
					 | 
				
			||||||
#define TYPEDEF_USHORT
 | 
					 | 
				
			||||||
#define TYPEDEF_ULONG
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* Do not support the (u)int64 types with strict ansi for GNU C */
 | 
					 | 
				
			||||||
#if defined(__GNUC__) && defined(__STRICT_ANSI__)
 | 
					 | 
				
			||||||
#define TYPEDEF_INT64
 | 
					 | 
				
			||||||
#define TYPEDEF_UINT64
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* pick up ushort & uint from standard types.h */
 | 
					 | 
				
			||||||
#if defined(linux) && defined(__KERNEL__)
 | 
					 | 
				
			||||||
#include <linux/types.h>	/* sys/types.h and linux/types.h are oil and water */
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
#include <sys/types.h>
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* use the default typedefs in the next section of this file */
 | 
					 | 
				
			||||||
#define USE_TYPEDEF_DEFAULTS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * Default Typedefs
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef USE_TYPEDEF_DEFAULTS
 | 
					 | 
				
			||||||
#undef USE_TYPEDEF_DEFAULTS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef TYPEDEF_BOOL
 | 
					 | 
				
			||||||
typedef	/* @abstract@ */ unsigned char	bool;
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* define uchar, ushort, uint, ulong */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef TYPEDEF_UCHAR
 | 
					 | 
				
			||||||
typedef unsigned char	uchar;
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef TYPEDEF_USHORT
 | 
					 | 
				
			||||||
typedef unsigned short	ushort;
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef TYPEDEF_UINT
 | 
					 | 
				
			||||||
typedef unsigned int	uint;
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef TYPEDEF_ULONG
 | 
					 | 
				
			||||||
typedef unsigned long	ulong;
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* define [u]int8/16/32/64, uintptr */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef TYPEDEF_UINT8
 | 
					 | 
				
			||||||
typedef unsigned char	uint8;
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef TYPEDEF_UINT16
 | 
					 | 
				
			||||||
typedef unsigned short	uint16;
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef TYPEDEF_UINT32
 | 
					 | 
				
			||||||
typedef unsigned int	uint32;
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef TYPEDEF_UINT64
 | 
					 | 
				
			||||||
typedef unsigned long long uint64;
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef TYPEDEF_UINTPTR
 | 
					 | 
				
			||||||
typedef unsigned int	uintptr;
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef TYPEDEF_INT8
 | 
					 | 
				
			||||||
typedef signed char	int8;
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef TYPEDEF_INT16
 | 
					 | 
				
			||||||
typedef signed short	int16;
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef TYPEDEF_INT32
 | 
					 | 
				
			||||||
typedef signed int	int32;
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef TYPEDEF_INT64
 | 
					 | 
				
			||||||
typedef signed long long int64;
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* define float32/64, float_t */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef TYPEDEF_FLOAT32
 | 
					 | 
				
			||||||
typedef float		float32;
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef TYPEDEF_FLOAT64
 | 
					 | 
				
			||||||
typedef double		float64;
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * abstracted floating point type allows for compile time selection of
 | 
					 | 
				
			||||||
 * single or double precision arithmetic.  Compiling with -DFLOAT32
 | 
					 | 
				
			||||||
 * selects single precision; the default is double precision.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef TYPEDEF_FLOAT_T
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#if defined(FLOAT32)
 | 
					 | 
				
			||||||
typedef float32 float_t;
 | 
					 | 
				
			||||||
#else /* default to double precision floating point */
 | 
					 | 
				
			||||||
typedef float64 float_t;
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif /* TYPEDEF_FLOAT_T */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* define macro values */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef FALSE
 | 
					 | 
				
			||||||
#define FALSE	0
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef TRUE
 | 
					 | 
				
			||||||
#define TRUE	1  /* TRUE */
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef NULL
 | 
					 | 
				
			||||||
#define	NULL	0
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef OFF
 | 
					 | 
				
			||||||
#define	OFF	0
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef ON
 | 
					 | 
				
			||||||
#define	ON	1  /* ON = 1 */
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define	AUTO	(-1) /* Auto = -1 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* define PTRSZ, INLINE */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef PTRSZ
 | 
					 | 
				
			||||||
#define	PTRSZ	sizeof(char*)
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef INLINE
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef _MSC_VER
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define INLINE __inline
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#elif __GNUC__
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define INLINE __inline__
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define INLINE
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif /* _MSC_VER */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif /* INLINE */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#undef TYPEDEF_BOOL
 | 
					 | 
				
			||||||
#undef TYPEDEF_UCHAR
 | 
					 | 
				
			||||||
#undef TYPEDEF_USHORT
 | 
					 | 
				
			||||||
#undef TYPEDEF_UINT
 | 
					 | 
				
			||||||
#undef TYPEDEF_ULONG
 | 
					 | 
				
			||||||
#undef TYPEDEF_UINT8
 | 
					 | 
				
			||||||
#undef TYPEDEF_UINT16
 | 
					 | 
				
			||||||
#undef TYPEDEF_UINT32
 | 
					 | 
				
			||||||
#undef TYPEDEF_UINT64
 | 
					 | 
				
			||||||
#undef TYPEDEF_UINTPTR
 | 
					 | 
				
			||||||
#undef TYPEDEF_INT8
 | 
					 | 
				
			||||||
#undef TYPEDEF_INT16
 | 
					 | 
				
			||||||
#undef TYPEDEF_INT32
 | 
					 | 
				
			||||||
#undef TYPEDEF_INT64
 | 
					 | 
				
			||||||
#undef TYPEDEF_FLOAT32
 | 
					 | 
				
			||||||
#undef TYPEDEF_FLOAT64
 | 
					 | 
				
			||||||
#undef TYPEDEF_FLOAT_T
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif /* USE_TYPEDEF_DEFAULTS */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* 
 | 
					 | 
				
			||||||
 * Including the bcmdefs.h here, to make sure everyone including typedefs.h 
 | 
					 | 
				
			||||||
 * gets this automatically 
 | 
					 | 
				
			||||||
*/
 | 
					 | 
				
			||||||
#include <bcmdefs.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif /* _TYPEDEFS_H_ */
 | 
					 | 
				
			||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -1,101 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * Broadcom wireless network adapter utility 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.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef _wlutils_h_
 | 
					 | 
				
			||||||
#define _wlutils_h_
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <typedefs.h>
 | 
					 | 
				
			||||||
#include <wlioctl.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * Pass a wlioctl request to the specified interface.
 | 
					 | 
				
			||||||
 * @param	name	interface name
 | 
					 | 
				
			||||||
 * @param	cmd	WLC_GET_MAGIC <= cmd < WLC_LAST
 | 
					 | 
				
			||||||
 * @param	buf	buffer for passing in and/or receiving data
 | 
					 | 
				
			||||||
 * @param	len	length of buf
 | 
					 | 
				
			||||||
 * @return	>= 0 if successful or < 0 otherwise
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
extern int wl_ioctl(char *name, int cmd, void *buf, int len);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * Probe the specified interface.
 | 
					 | 
				
			||||||
 * @param	name	interface name
 | 
					 | 
				
			||||||
 * @return	>= 0 if a Broadcom wireless device or < 0 otherwise
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
extern int wl_probe(char *name);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
extern int wl_iovar_set(char *ifname, char *iovar, void *param, int paramlen);
 | 
					 | 
				
			||||||
extern int wl_iovar_get(char *ifname, char *iovar, void *bufptr, int buflen);
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * Set/Get named variable.
 | 
					 | 
				
			||||||
 * @param	ifname		interface name
 | 
					 | 
				
			||||||
 * @param	iovar		variable name
 | 
					 | 
				
			||||||
 * @param	param		input param value/buffer
 | 
					 | 
				
			||||||
 * @param	paramlen	input param value/buffer length
 | 
					 | 
				
			||||||
 * @param	bufptr		io buffer
 | 
					 | 
				
			||||||
 * @param	buflen		io buffer length
 | 
					 | 
				
			||||||
 * @param	val		val or val pointer for int routines
 | 
					 | 
				
			||||||
 * @return	success == 0, failure != 0
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * set named driver variable to int value
 | 
					 | 
				
			||||||
 * calling example: wl_iovar_setint(ifname, "arate", rate)
 | 
					 | 
				
			||||||
*/
 | 
					 | 
				
			||||||
static inline int
 | 
					 | 
				
			||||||
wl_iovar_setint(char *ifname, char *iovar, int val)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	return wl_iovar_set(ifname, iovar, &val, sizeof(val));
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * get named driver variable to int value and return error indication
 | 
					 | 
				
			||||||
 * calling example: wl_iovar_getint(ifname, "arate", &rate)
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
static inline int
 | 
					 | 
				
			||||||
wl_iovar_getint(char *ifname, char *iovar, int *val)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	return wl_iovar_get(ifname, iovar, val, sizeof(int));
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * Set/Get named variable indexed by BSS Configuration
 | 
					 | 
				
			||||||
 * @param	ifname		interface name
 | 
					 | 
				
			||||||
 * @param	iovar		variable name
 | 
					 | 
				
			||||||
 * @param	bssidx		bsscfg index
 | 
					 | 
				
			||||||
 * @param	param		input param value/buffer
 | 
					 | 
				
			||||||
 * @param	paramlen	input param value/buffer length
 | 
					 | 
				
			||||||
 * @param	bufptr		io buffer
 | 
					 | 
				
			||||||
 * @param	buflen		io buffer length
 | 
					 | 
				
			||||||
 * @param	val		val or val pointer for int routines
 | 
					 | 
				
			||||||
 * @return	success == 0, failure != 0
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
extern int wl_bssiovar_get(char *ifname, char *iovar, int bssidx, void *outbuf, int len);
 | 
					 | 
				
			||||||
extern int wl_bssiovar_set(char *ifname, char *iovar, int bssidx, void *param, int paramlen);
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * set named & bss indexed driver variable to int value
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
static inline int
 | 
					 | 
				
			||||||
wl_bssiovar_setint(char *ifname, char *iovar, int bssidx, int val)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	return wl_bssiovar_set(ifname, iovar, bssidx, &val, sizeof(int));
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static inline int
 | 
					 | 
				
			||||||
wl_bssiovar_getint(char *ifname, char *iovar, int bssidx, int *val)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	return wl_bssiovar_get(ifname, iovar, bssidx, val, sizeof(int));
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
extern int wl_bssiovar_setint(char *ifname, char *iovar, int bssidx, int val);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif /* _wlutils_h_ */
 | 
					 | 
				
			||||||
@ -1,16 +0,0 @@
 | 
				
			|||||||
#include <stdlib.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int nvram_set(const char *name, const char *value)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	return -1;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
char *nvram_get(const char *name)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	return NULL;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int nvram_unset(const char *name)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	return -1;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,9 +0,0 @@
 | 
				
			|||||||
all: wlc
 | 
					 | 
				
			||||||
clean:
 | 
					 | 
				
			||||||
	rm -f *.o wlc
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
wlc: wlc.o ioctl.o
 | 
					 | 
				
			||||||
%.o: %.c
 | 
					 | 
				
			||||||
	$(CC) $(CFLAGS) -I../include -Wall -c -o $@ $<
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.PHONY: all clean
 | 
					 | 
				
			||||||
@ -1,297 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * Wireless network adapter utilities
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * 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.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#include <stdio.h>
 | 
					 | 
				
			||||||
#include <unistd.h>
 | 
					 | 
				
			||||||
#include <string.h>
 | 
					 | 
				
			||||||
#include <errno.h>
 | 
					 | 
				
			||||||
#include <sys/ioctl.h>
 | 
					 | 
				
			||||||
#include <net/if.h>
 | 
					 | 
				
			||||||
#include <linux/types.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
typedef u_int64_t u64;
 | 
					 | 
				
			||||||
typedef u_int32_t u32;
 | 
					 | 
				
			||||||
typedef u_int16_t u16;
 | 
					 | 
				
			||||||
typedef u_int8_t u8;
 | 
					 | 
				
			||||||
#include <linux/sockios.h>
 | 
					 | 
				
			||||||
#include <linux/ethtool.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <typedefs.h>
 | 
					 | 
				
			||||||
#include <wlioctl.h>
 | 
					 | 
				
			||||||
#include <bcmutils.h>
 | 
					 | 
				
			||||||
#include <wlutils.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int
 | 
					 | 
				
			||||||
wl_ioctl(char *name, int cmd, void *buf, int len)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	struct ifreq ifr;
 | 
					 | 
				
			||||||
	wl_ioctl_t ioc;
 | 
					 | 
				
			||||||
	int ret = 0;
 | 
					 | 
				
			||||||
	int s;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* open socket to kernel */
 | 
					 | 
				
			||||||
	if ((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
 | 
					 | 
				
			||||||
		perror("socket");
 | 
					 | 
				
			||||||
		return errno;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* do it */
 | 
					 | 
				
			||||||
	ioc.cmd = cmd;
 | 
					 | 
				
			||||||
	ioc.buf = buf;
 | 
					 | 
				
			||||||
	ioc.len = len;
 | 
					 | 
				
			||||||
	strncpy(ifr.ifr_name, name, IFNAMSIZ);
 | 
					 | 
				
			||||||
	ifr.ifr_data = (caddr_t) &ioc;
 | 
					 | 
				
			||||||
	if ((ret = ioctl(s, SIOCDEVPRIVATE, &ifr)) < 0)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* cleanup */
 | 
					 | 
				
			||||||
	close(s);
 | 
					 | 
				
			||||||
	return ret;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static inline int
 | 
					 | 
				
			||||||
wl_get_dev_type(char *name, void *buf, int len)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	int s;
 | 
					 | 
				
			||||||
	int ret;
 | 
					 | 
				
			||||||
	struct ifreq ifr;
 | 
					 | 
				
			||||||
	struct ethtool_drvinfo info;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* open socket to kernel */
 | 
					 | 
				
			||||||
	if ((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
 | 
					 | 
				
			||||||
		perror("socket");
 | 
					 | 
				
			||||||
		return -1;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* get device type */
 | 
					 | 
				
			||||||
	memset(&info, 0, sizeof(info));
 | 
					 | 
				
			||||||
	info.cmd = ETHTOOL_GDRVINFO;
 | 
					 | 
				
			||||||
	ifr.ifr_data = (caddr_t)&info;
 | 
					 | 
				
			||||||
	strncpy(ifr.ifr_name, name, IFNAMSIZ);
 | 
					 | 
				
			||||||
	if ((ret = ioctl(s, SIOCETHTOOL, &ifr)) < 0) {
 | 
					 | 
				
			||||||
		*(char *)buf = '\0';
 | 
					 | 
				
			||||||
	} else
 | 
					 | 
				
			||||||
		strncpy(buf, info.driver, len);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	close(s);
 | 
					 | 
				
			||||||
	return ret;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int
 | 
					 | 
				
			||||||
wl_probe(char *name)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	int ret, val;
 | 
					 | 
				
			||||||
	char buf[3];
 | 
					 | 
				
			||||||
	if ((ret = wl_get_dev_type(name, buf, 3)) < 0)
 | 
					 | 
				
			||||||
		return ret;
 | 
					 | 
				
			||||||
	/* Check interface */
 | 
					 | 
				
			||||||
	if (strncmp(buf, "wl", 2))
 | 
					 | 
				
			||||||
		return -1;
 | 
					 | 
				
			||||||
	if ((ret = wl_ioctl(name, WLC_GET_VERSION, &val, sizeof(val))))
 | 
					 | 
				
			||||||
		return ret;
 | 
					 | 
				
			||||||
	if (val > WLC_IOCTL_VERSION)
 | 
					 | 
				
			||||||
		return -1;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return ret;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static int
 | 
					 | 
				
			||||||
wl_iovar_getbuf(char *ifname, char *iovar, void *param, int paramlen, void *bufptr, int buflen)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	int err;
 | 
					 | 
				
			||||||
	uint namelen;
 | 
					 | 
				
			||||||
	uint iolen;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	namelen = strlen(iovar) + 1;	 /* length of iovar name plus null */
 | 
					 | 
				
			||||||
	iolen = namelen + paramlen;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* check for overflow */
 | 
					 | 
				
			||||||
	if (iolen > buflen)
 | 
					 | 
				
			||||||
		return (BCME_BUFTOOSHORT);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	memcpy(bufptr, iovar, namelen);	/* copy iovar name including null */
 | 
					 | 
				
			||||||
	memcpy((int8*)bufptr + namelen, param, paramlen);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	err = wl_ioctl(ifname, WLC_GET_VAR, bufptr, buflen);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return (err);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static int
 | 
					 | 
				
			||||||
wl_iovar_setbuf(char *ifname, char *iovar, void *param, int paramlen, void *bufptr, int buflen)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	uint namelen;
 | 
					 | 
				
			||||||
	uint iolen;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	namelen = strlen(iovar) + 1;	 /* length of iovar name plus null */
 | 
					 | 
				
			||||||
	iolen = namelen + paramlen;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* check for overflow */
 | 
					 | 
				
			||||||
	if (iolen > buflen)
 | 
					 | 
				
			||||||
		return (BCME_BUFTOOSHORT);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	memcpy(bufptr, iovar, namelen);	/* copy iovar name including null */
 | 
					 | 
				
			||||||
	memcpy((int8*)bufptr + namelen, param, paramlen);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return wl_ioctl(ifname, WLC_SET_VAR, bufptr, iolen);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int
 | 
					 | 
				
			||||||
wl_iovar_set(char *ifname, char *iovar, void *param, int paramlen)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	char smbuf[WLC_IOCTL_SMLEN];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return wl_iovar_setbuf(ifname, iovar, param, paramlen, smbuf, sizeof(smbuf));
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int
 | 
					 | 
				
			||||||
wl_iovar_get(char *ifname, char *iovar, void *bufptr, int buflen)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	char smbuf[WLC_IOCTL_SMLEN];
 | 
					 | 
				
			||||||
	int ret;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* use the return buffer if it is bigger than what we have on the stack */
 | 
					 | 
				
			||||||
	if (buflen > sizeof(smbuf)) {
 | 
					 | 
				
			||||||
		ret = wl_iovar_getbuf(ifname, iovar, NULL, 0, bufptr, buflen);
 | 
					 | 
				
			||||||
	} else {
 | 
					 | 
				
			||||||
		ret = wl_iovar_getbuf(ifname, iovar, NULL, 0, smbuf, sizeof(smbuf));
 | 
					 | 
				
			||||||
		if (ret == 0)
 | 
					 | 
				
			||||||
			memcpy(bufptr, smbuf, buflen);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return ret;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * format a bsscfg indexed iovar buffer
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
static int
 | 
					 | 
				
			||||||
wl_bssiovar_mkbuf(char *iovar, int bssidx, void *param, int paramlen, void *bufptr, int buflen,
 | 
					 | 
				
			||||||
                  int *plen)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	char *prefix = "bsscfg:";
 | 
					 | 
				
			||||||
	int8* p;
 | 
					 | 
				
			||||||
	uint prefixlen;
 | 
					 | 
				
			||||||
	uint namelen;
 | 
					 | 
				
			||||||
	uint iolen;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	prefixlen = strlen(prefix);	/* length of bsscfg prefix */
 | 
					 | 
				
			||||||
	namelen = strlen(iovar) + 1;	/* length of iovar name + null */
 | 
					 | 
				
			||||||
	iolen = prefixlen + namelen + sizeof(int) + paramlen;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* check for overflow */
 | 
					 | 
				
			||||||
	if (buflen < 0 || iolen > (uint)buflen) {
 | 
					 | 
				
			||||||
		*plen = 0;
 | 
					 | 
				
			||||||
		return BCME_BUFTOOSHORT;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	p = (int8*)bufptr;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* copy prefix, no null */
 | 
					 | 
				
			||||||
	memcpy(p, prefix, prefixlen);
 | 
					 | 
				
			||||||
	p += prefixlen;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* copy iovar name including null */
 | 
					 | 
				
			||||||
	memcpy(p, iovar, namelen);
 | 
					 | 
				
			||||||
	p += namelen;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* bss config index as first param */
 | 
					 | 
				
			||||||
	memcpy(p, &bssidx, sizeof(int32));
 | 
					 | 
				
			||||||
	p += sizeof(int32);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* parameter buffer follows */
 | 
					 | 
				
			||||||
	if (paramlen)
 | 
					 | 
				
			||||||
		memcpy(p, param, paramlen);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	*plen = iolen;
 | 
					 | 
				
			||||||
	return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * set named & bss indexed driver variable to buffer value
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
static int
 | 
					 | 
				
			||||||
wl_bssiovar_setbuf(char *ifname, char *iovar, int bssidx, void *param, int paramlen, void *bufptr,
 | 
					 | 
				
			||||||
                   int buflen)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	int err;
 | 
					 | 
				
			||||||
	int iolen;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	err = wl_bssiovar_mkbuf(iovar, bssidx, param, paramlen, bufptr, buflen, &iolen);
 | 
					 | 
				
			||||||
	if (err)
 | 
					 | 
				
			||||||
		return err;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return wl_ioctl(ifname, WLC_SET_VAR, bufptr, iolen);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * get named & bss indexed driver variable buffer value
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
static int
 | 
					 | 
				
			||||||
wl_bssiovar_getbuf(char *ifname, char *iovar, int bssidx, void *param, int paramlen, void *bufptr,
 | 
					 | 
				
			||||||
                   int buflen)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	int err;
 | 
					 | 
				
			||||||
	int iolen;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	err = wl_bssiovar_mkbuf(iovar, bssidx, param, paramlen, bufptr, buflen, &iolen);
 | 
					 | 
				
			||||||
	if (err)
 | 
					 | 
				
			||||||
		return err;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return wl_ioctl(ifname, WLC_GET_VAR, bufptr, buflen);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * set named & bss indexed driver variable to buffer value
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
int
 | 
					 | 
				
			||||||
wl_bssiovar_set(char *ifname, char *iovar, int bssidx, void *param, int paramlen)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	char smbuf[WLC_IOCTL_SMLEN];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return wl_bssiovar_setbuf(ifname, iovar, bssidx, param, paramlen, smbuf, sizeof(smbuf));
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * get named & bss indexed driver variable buffer value
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
int
 | 
					 | 
				
			||||||
wl_bssiovar_get(char *ifname, char *iovar, int bssidx, void *outbuf, int len)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	char smbuf[WLC_IOCTL_SMLEN];
 | 
					 | 
				
			||||||
	int err;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* use the return buffer if it is bigger than what we have on the stack */
 | 
					 | 
				
			||||||
	if (len > (int)sizeof(smbuf)) {
 | 
					 | 
				
			||||||
		err = wl_bssiovar_getbuf(ifname, iovar, bssidx, NULL, 0, outbuf, len);
 | 
					 | 
				
			||||||
	} else {
 | 
					 | 
				
			||||||
		memset(smbuf, 0, sizeof(smbuf));
 | 
					 | 
				
			||||||
		err = wl_bssiovar_getbuf(ifname, iovar, bssidx, NULL, 0, smbuf, sizeof(smbuf));
 | 
					 | 
				
			||||||
		if (err == 0)
 | 
					 | 
				
			||||||
			memcpy(outbuf, smbuf, len);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return err;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void
 | 
					 | 
				
			||||||
wl_printlasterror(char *name)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	char err_buf[WLC_IOCTL_SMLEN];
 | 
					 | 
				
			||||||
	strcpy(err_buf, "bcmerrstr");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	fprintf(stderr, "Error: ");
 | 
					 | 
				
			||||||
	if ( wl_ioctl(name, WLC_GET_VAR, err_buf, sizeof (err_buf)) != 0)
 | 
					 | 
				
			||||||
		fprintf(stderr, "Error getting the Errorstring from driver\n");
 | 
					 | 
				
			||||||
	else
 | 
					 | 
				
			||||||
		fprintf(stderr, err_buf);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -1,27 +0,0 @@
 | 
				
			|||||||
#
 | 
					 | 
				
			||||||
# Makefile for wlcompat
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Copyright (C) 2005-2007 Felix Fietkau <nbd@openwrt.org>
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This program is free software; you can redistribute it and/or
 | 
					 | 
				
			||||||
# modify it under the terms of the GNU General Public License
 | 
					 | 
				
			||||||
# as published by the Free Software Foundation; either version
 | 
					 | 
				
			||||||
# 2 of the License, or (at your option) any later version.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
EXTRA_CFLAGS += -DBCMDRIVER=1 -DBCMDMA64=1 -I../include
 | 
					 | 
				
			||||||
ifneq ($(DEBUG),)
 | 
					 | 
				
			||||||
  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
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
wlcompat$(_D).o: wlcompat.c
 | 
					 | 
				
			||||||
	$(CC) $(CFLAGS) $(EXTRA_CFLAGS_nostdinc) -DKBUILD_BASENAME=$(subst $(comma),_,$(subst -,_,$(*F))) $(CFLAGS_$@) -c -o $@ $<
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-include $(TOPDIR)/Rules.make
 | 
					 | 
				
			||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Loading…
	
		Reference in New Issue
	
	Block a user