aboutsummaryrefslogtreecommitdiffstats
path: root/package/broadcom-wl/src/driver/patchtable.pl
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2007-11-10 19:00:53 +0000
committerFelix Fietkau <nbd@openwrt.org>2007-11-10 19:00:53 +0000
commit2ab260e917ee2ffa4d215aac2c7be093d48f76d2 (patch)
treea26d476a214d27594df0180d204337fbd9f067a0 /package/broadcom-wl/src/driver/patchtable.pl
parent4db640a50331fff2b661a4109b430ad056ccbcdc (diff)
downloadupstream-2ab260e917ee2ffa4d215aac2c7be093d48f76d2.tar.gz
upstream-2ab260e917ee2ffa4d215aac2c7be093d48f76d2.tar.bz2
upstream-2ab260e917ee2ffa4d215aac2c7be093d48f76d2.zip
move wlcompat to the broadcom-wl package
SVN-Revision: 9528
Diffstat (limited to 'package/broadcom-wl/src/driver/patchtable.pl')
-rw-r--r--package/broadcom-wl/src/driver/patchtable.pl61
1 files changed, 61 insertions, 0 deletions
diff --git a/package/broadcom-wl/src/driver/patchtable.pl b/package/broadcom-wl/src/driver/patchtable.pl
new file mode 100644
index 0000000000..6999735125
--- /dev/null
+++ b/package/broadcom-wl/src/driver/patchtable.pl
@@ -0,0 +1,61 @@
+#!/usr/bin/perl
+#
+# Copyright (C) 2006 OpenWrt.org
+# Copyright (C) 2006 Felix Fietkau
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+use strict;
+
+my $TABLE = pack("V", 0xbadc0ded);
+my $TABLE_SIZE = 512;
+my $SLT1 = "\x01\x00\x00\x00";
+my $SLT2 = "\x02\x00\x00\x00";
+my $ACKW = "\x03\x00\x00\x00";
+my $PTABLE_END = "\xff\xff\xff\xff";
+
+my $addr = "";
+my $opcode = "";
+my $function = "";
+
+sub add_entry {
+ my $key = shift;
+ my $value = shift;
+ my $default = shift;
+
+ $TABLE .= $key;
+ $TABLE .= pack("V", $value);
+ $TABLE .= pack("V", $default);
+}
+
+while (<>) {
+ $addr = $opcode = "";
+ /^\w{8}\s*<(.*)>:$/ and $function = $1;
+ /^\s*(\w+):\s*(\w{8})\s*/ and do {
+ $addr = $1;
+ $opcode = $2;
+ };
+
+ ($function eq 'wlc_update_slot_timing') and do {
+ # li a2,9 -- short slot time
+ ($opcode eq '24060009') and add_entry($SLT1, hex($addr), hex($opcode));
+ # li v0,519 -- 510 + short slot time
+ ($opcode eq '24020207') and add_entry($SLT2, hex($addr), hex($opcode));
+
+ # li a2,20 -- long slot time
+ ($opcode eq '24060014') and add_entry($SLT1, hex($addr), hex($opcode));
+ # li v0,530 -- 510 + long slot time
+ ($opcode eq '24020212') and add_entry($SLT2, hex($addr), hex($opcode));
+ };
+ ($function eq 'wlc_d11hdrs') and do {
+ # ori s6,s6,0x1 -- ack flag (new)
+ ($opcode eq '36d60001') and add_entry($ACKW, hex($addr), hex($opcode));
+ # ori s3,s3,0x1 -- ack flag (old)
+ ($opcode eq '36730001') and add_entry($ACKW, hex($addr), hex($opcode));
+ }
+}
+
+$TABLE .= $PTABLE_END;
+$TABLE .= ("\x00" x ($TABLE_SIZE - length($TABLE)));
+print $TABLE;