ASR_BASE
Change-Id: Icf3719cc0afe3eeb3edc7fa80a2eb5199ca9dda1
diff --git a/package/kernel/realtek-wl/src/Users/wireless_tools.25/Android.mk b/package/kernel/realtek-wl/src/Users/wireless_tools.25/Android.mk
new file mode 100644
index 0000000..39a29bc
--- /dev/null
+++ b/package/kernel/realtek-wl/src/Users/wireless_tools.25/Android.mk
@@ -0,0 +1,35 @@
+LOCAL_PATH := $(call my-dir)
+
+#########################
+
+LIBS= -lm
+CFLAGS := -W -Wall -Wstrict-prototypes $(CFLAGS)
+CFLAGS += $(EXTRA_CFLAGS)
+
+ifeq ($(SLINK),1)
+CFLAGS += -ffunction-sections -fdata-sections
+LDFLAGS += --static -s -Wl,--gc-sections
+endif
+
+########################
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := optional
+LOCAL_PRELINK_MODULE := false
+LOCAL_SRC_FILES := iwlib.c
+LOCAL_MODULE := libiw
+LOCAL_CFLAGS := -Os -Wall $(CFLAGS) -D__ANDROID__
+LOCAL_SHARED_LIBRARIES := libc
+include $(BUILD_SHARED_LIBRARY)
+
+#########################
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := optional
+LOCAL_SRC_FILES := iwpriv.c
+LOCAL_MODULE := iwpriv
+LOCAL_SHARED_LIBRARIES := libc libiw
+LOCAL_CFLAGS := -Os -Wall $(CFLAGS) -D__ANDROID__
+#LOCAL_C_INCLUDES:= $(KERNEL_HEADERS) $(INCS) $(LOCAL_PATH)/../../include
+include $(BUILD_EXECUTABLE)
+
diff --git a/package/kernel/realtek-wl/src/Users/wireless_tools.25/CHANGELOG.h b/package/kernel/realtek-wl/src/Users/wireless_tools.25/CHANGELOG.h
new file mode 100644
index 0000000..b1944a0
--- /dev/null
+++ b/package/kernel/realtek-wl/src/Users/wireless_tools.25/CHANGELOG.h
@@ -0,0 +1,342 @@
+/*
+ * Wireless Tools
+ *
+ * Jean II - HPLB 97->99 - HPL 99->02
+ *
+ * The changelog...
+ *
+ * This files is released under the GPL license.
+ * Copyright (c) 1997-2002 Jean Tourrilhes <jt@hpl.hp.com>
+ */
+
+/* --------------------------- HISTORY --------------------------- */
+/*
+ * wireless 16 : (Jean Tourrilhes)
+ * -----------
+ * o iwconfig, iwpriv & iwspy
+ *
+ * wireless 17 : (Justin Seger)
+ * -----------
+ * o Compile under glibc fix
+ * o merge iwpriv in iwconfig
+ * o Add Wavelan roaming support
+ * o Update man page of iwconfig
+ *
+ * wireless 18 :
+ * -----------
+ * (From Andreas Neuhaus <andy@fasta.fh-dortmund.de>)
+ * o Many fix to remove "core dumps" in iwconfig
+ * o Remove useless headers in iwconfig
+ * o CHAR wide private ioctl
+ * (From Jean Tourrilhes)
+ * o Create iwcommon.h and iwcommon.c
+ * o Separate iwpriv again for user interface issues
+ * The folllowing didn't make sense and crashed :
+ * iwconfig eth0 priv sethisto 12 15 nwid 100
+ * o iwspy no longer depend on net-tools-1.2.0
+ * o Reorganisation of the code, cleanup
+ * o Add ESSID stuff in iwconfig
+ * o Add display of level & noise in dBm (stats in iwconfig)
+ * o Update man page of iwconfig and iwpriv
+ * o Add xwireless (didn't check if it compiles)
+ * (From Dean W. Gehnert <deang@tpi.com>)
+ * o Minor fixes
+ * (Jan Rafaj <rafaj@cedric.vabo.cz>)
+ * o Cosmetic changes (sensitivity relative, freq list)
+ * o Frequency computation on double
+ * o Compile clean on libc5
+ * (From Jean Tourrilhes)
+ * o Move listing of frequencies to iwspy
+ * o Add AP address stuff in iwconfig
+ * o Add AP list stuff in iwspy
+ *
+ * wireless 19 :
+ * -----------
+ * (From Jean Tourrilhes)
+ * o Allow for sensitivity in dBm (if < 0) [iwconfig]
+ * o Formatting changes in displaying ap address in [iwconfig]
+ * o Slightly improved man pages and usage display
+ * o Add channel number for each frequency in list [iwspy]
+ * o Add nickname... [iwconfig]
+ * o Add "port" private ioctl shortcut [iwpriv]
+ * o If signal level = 0, no range or dBms [iwconfig]
+ * o I think I now got set/get char strings right in [iwpriv]
+ * (From Thomas Ekstrom <tomeck@thelogic.com>)
+ * o Fix a very obscure bug in [iwspy]
+ *
+ * wireless 20 :
+ * -----------
+ * (From Jean Tourrilhes)
+ * o Remove all #ifdef WIRELESS ugliness, but add a #error :
+ * we require Wireless Extensions 9 or nothing ! [all]
+ * o Switch to new 'nwid' definition (specific -> iw_param) [iwconfig]
+ * o Rewriten totally the encryption support [iwconfig]
+ * - Multiple keys, through key index
+ * - Flexible/multiple key size, and remove 64bits upper limit
+ * - Open/Restricted modes
+ * - Enter keys as ASCII strings
+ * o List key sizes supported and all keys in [iwspy]
+ * o Mode of operation support (ad-hoc, managed...) [iwconfig]
+ * o Use '=' to indicate fixed instead of ugly '(f)' [iwconfig]
+ * o Ability to disable RTS & frag (off), now the right way [iwconfig]
+ * o Auto as an input modifier for bitrate [iwconfig]
+ * o Power Management support [iwconfig]
+ * - set timeout or period and its value
+ * - Reception mode (unicast/multicast/all)
+ * o Updated man pages with all that ;-)
+ *
+ * wireless 21 :
+ * -----------
+ * (from Alan McReynolds <alan_mcreynolds@hpl.hp.com>)
+ * o Use proper macros for compilation directives [Makefile]
+ * (From Jean Tourrilhes)
+ * o Put licensing info everywhere (almost). Yes, it's GPL !
+ * o Document the use of /etc/pcmcia/wireless.opts [PCMCIA]
+ * o Add min/max modifiers to power management parameters [iwconfig]
+ * -> requested by Lee Keyser-Allen for the Spectrum24 driver
+ * o Optionally output a second power management parameter [iwconfig]
+ * ---
+ * o Common subroutines to display stats & power saving info [iwcommon]
+ * o Display all power management info, capability and values [iwspy]
+ * ---
+ * o Optional index for ESSID (for Aironet driver) [iwcommon]
+ * o IW_ENCODE_NOKEY for write only keys [iwconfig/iwspy]
+ * o Common subrouting to print encoding keys [iwspy]
+ * ---
+ * o Transmit Power stuff (dBm + mW) [iwconfig/iwspy]
+ * o Cleaner formatting algorithm when displaying params [iwconfig]
+ * ---
+ * o Fix get_range_info() and use it everywhere - Should fix core dumps.
+ * o Catch WE version differences between tools and driver and
+ * warn user. Thanks to Tobias Ringstrom for the tip... [iwcommon]
+ * o Add Retry limit and lifetime support. [iwconfig/iwlist]
+ * o Display "Cell:" instead of "Access Point:" in ad-hoc mode [iwconfig]
+ * o Header fix for glibc2.2 by Ross G. Miller <Ross_Miller@baylor.edu>
+ * o Move header selection flags in Makefile [iwcommon/Makefile]
+ * o Spin-off iwlist.c from iwspy.c. iwspy is now much smaller
+ * After moving this bit of code all over the place, from iwpriv
+ * to iwconfig to iwspy, it now has a home of its own... [iwspy/iwlist]
+ * o Wrote quick'n'dirty iwgetid.
+ * o Remove output of second power management parameter [iwconfig]
+ * Please use iwlist, I don't want to bloat iwconfig
+ * ---
+ * o Fix bug in display ints - "Allen Miu" <aklmiu@mit.edu> [iwpriv]
+ *
+ * wireless 22 :
+ * -----------
+ * (From Jim Kaba <jkaba@sarnoff.com>)
+ * o Fix socket_open to not open all types of sockets [iwcommon]
+ * (From Michael Tokarev <mjt@tls.msk.ru>)
+ * o Rewrite main (top level) + command line parsing of [iwlist]
+ * (From Jean Tourrilhes)
+ * o Set commands should return proper success flag [iwspy/iwpriv]
+ * requested by Michael Tokarev
+ * ---
+ * (From Torgeir Hansen <torgeir@trenger.ro>)
+ * o Replace "strcpy(wrq.ifr_name," with strncpy to avoid buffer
+ * overflows. This is OK because the kernel use strncmp...
+ * ---
+ * o Move operation_mode in iwcommon and add NUM_OPER_MODE [iwconfig]
+ * o print_stats, print_key, ... use char * instead if FILE * [iwcommon]
+ * o Add `iw_' prefix to avoid namespace pollution [iwcommon]
+ * o Add iw_get_basic_config() and iw_set_basic_config() [iwcommon]
+ * o Move iw_getstats from iwconfig to iwcommon [iwcommon]
+ * o Move changelog to CHANGELOG.h [iwcommon]
+ * o Rename iwcommon.* into iwlib.* [iwcommon->iwlib]
+ * o Compile iwlib. as a dynamic or static library [Makefile]
+ * o Allow the tools to be compiled with the dynamic library [Makefile]
+ * --- Update to Wireless Extension 12 ---
+ * o Show typical/average quality in iwspy [iwspy]
+ * o Get Wireless Stats through ioctl instead of /proc [iwlib]
+ *
+ * wireless 23 :
+ * -----------
+ * o Split iw_check_addr_type() into two functions mac/if [iwlib]
+ * o iw_in_addr() does appropriate iw_check_xxx itself [iwlib]
+ * o Allow iwspy on MAC address even if IP doesn't check [iwspy]
+ * o Allow iwconfig ap on MAC address even if IP doesn't check [iwconfig]
+ * ---
+ * o Fix iwlist man page about extra commands [iwlist]
+ * ---
+ * o Fix Makefile rules for library compile (more generic) [Makefile]
+ * ---
+ * o Set max length for all GET request with a iw_point [various]
+ * o Fix set IW_PRIV_TYPE_BYTE to be endian/align clean [iwpriv]
+ * ---
+ * (From Kernel Jake <kerneljake@hotmail.com>)
+ * o Add '/' at the end of directories to create them [Makefile]
+ * (From Pavel Roskin <proski@gnu.org>)
+ * o Replace "cp" with "install" to get permissions proper [Makefile]
+ * o Install Man-Pages at the proper location [Makefile]
+ * o Add automatic header selection based on libc/kernel [iwlib.h]
+ * ---
+ * o Add "commit" to force parameters on the card [iwconfig]
+ * o Wrap ioctl() in iw_set/get_ext() wrappers [all]
+ * o Beautify set request error messages [iwconfig]
+ *
+ * wireless 24 :
+ * -----------
+ * o Added common function to display frequency [iwlib]
+ * o Added handler to parse Wireless Events [iwlib]
+ * o Added tool to display Wireless Events [iwevent]
+ * o Pass command line to subroutines [iwlist]
+ * o Scanning support through SIOCSIWSCAN [iwlist]
+ * ---
+ * o Added common function to display bitrate [iwlib]
+ * o Add bitrate/encoding scanning support [iwlist]
+ * o Allow to read scan results for non-root users [iwlist]
+ * o Set 5s timeout on waiting for scan results [iwlist]
+ * o Cleanup iwgetid & support ap+scheme display [iwgetid]
+ * o iwevent man page [iwevent]
+ * (From Guus Sliepen <guus@warande3094.warande.uu.nl>)
+ * o iwgetid man page [iwgetid]
+ * ---
+ * o Add "#define WIRELESS_EXT > 13" around event code [iwlib]
+ * o Move iw_enum_devices() from iwlist.c to iwlib.c [iwlib]
+ * o Use iw_enum_devices() everywhere [iwconfig/iwspy/iwpriv]
+ * (From Pavel Roskin <proski@gnu.org>, rewrite by me)
+ * o Return proper error message on non existent interfaces [iwconfig]
+ * o Read interface list in /proc/net/wireless and not SIOCGIFCONF [iwlib]
+ * ---
+ * (From Pavel Roskin <proski@gnu.org> - again !!!)
+ * o Don't loose flags when setting encryption key [iwconfig]
+ * o Add <time.h> [iwevent]
+ * ---
+ * (From Casey Carter <Casey@Carter.net>)
+ * o Improved compilations directives, stricter warnings [Makefile]
+ * o Fix strict warnings (static func, unused args...) [various]
+ * o New routines to display/input Ethernet MAC addresses [iwlib]
+ * o Correct my english & spelling [various]
+ * o Get macaddr to compile [macaddr]
+ * o Fix range checking in max number of args [iwlist]
+ * ---
+ * o Display time when we receive event [iwevent]
+ * ---
+ * o Display time before event, easier to read [iwevent]
+ * (From "Dr. Michael Rietz" <rietz@mail.amps.de>)
+ * o Use a generic set of header, may end header mess [iwlib]
+ * (From Casey Carter <Casey@Carter.net>)
+ * o Zillions cleanups, small fixes and code reorg [all over]
+ * o Proper usage/help printout [iwevent, iwgetid, ...]
+ * ---
+ * o Send broadcast address for iwconfig ethX ap auto/any [iwconfig]
+ * ---
+ * o Send NULL address for iwconfig ethX ap off [iwconfig]
+ * o Add iw_in_key() helper (and use it) [iwlib]
+ * o Create symbolink link libiw.so to libiw.so.XX [Makefile]
+ * (From Javier Achirica <achirica@ttd.net>)
+ * o Always send TxPower flags to the driver [iwconfig]
+ * (From John M. Choi <johnchoi@its.caltech.edu>)
+ * o Header definition for Slackware (kernel 2.2/glibc 2.2) [iwlib]
+ *
+ * wireless 25 :
+ * -----------
+ * o Remove library symbolic link before creating it [Makefile]
+ * o Display error and exit if WE < 14 [iwevent]
+ * (From Sander Jonkers <sander@grachtzicht.cjb.net>)
+ * o Fix iwconfig usage display to show "enc off" [iwconfig]
+ * (From Pavel Roskin <proski@gnu.org>)
+ * o Formating : add spaces after cell/ap addr [iwconfig]
+ * ---
+ * o Do driver WE source version verification [iwlib]
+ * (From Pavel Roskin <proski@gnu.org>)
+ * o Cleanup user configurable options [Makefile]
+ * o add FORCE_WEXT_VERSION [Makefile]
+ * o Add uninstall directived [Makefile]
+ * o Cleanup version warnings [iwlib]
+ * o Fix iwconfig usage display to show "mode MODE" [iwconfig]
+ * o Replace "rm -f + ln -s" with "ln -sfn" in install [Makefile]
+ * ---
+ * o Add various documentation in source code of [iwpriv]
+ * o Allow to get more than 16 private ioctl description [iwlib]
+ * o Ignore ioctl descriptions with null name [iwpriv]
+ * o Implement sub-ioctls (simple/iw_point) [iwpriv]
+ * ---
+ * o Add DISTRIBUTIONS file with call for help [README]
+ * o Change iw_byte_size in iw_get_priv_size [iwlib]
+ * o Document various bugs of new driver API with priv ioctls [iwpriv]
+ * o Implement float/addr priv data types [iwpriv]
+ * o Fix off-by-one bug (priv_size <= IFNAMSIZ) [iwpriv]
+ * o Reformat/beautify ioctl list display [iwpriv]
+ * o Add "-a" command line to dump all read-only priv ioctls [iwpriv]
+ * o Add a sample showing new priv features [sample_priv_addr.c]
+ * o Update other samples with new driver API [sample_enc.c/sample_pm.c]
+ * ---
+ * o Fix "iwpriv -a" to not call ioctls not returning anything [iwpriv]
+ * o Use IW_MAX_GET_SPY in increase number of addresses read [iwspy]
+ * o Finish fixing the mess of off-by-one on IW_ESSID_MAX_SIZE [iwconfig]
+ * o Do interface enumeration using /proc/net/dev [iwlib]
+ * ---
+ * o Display various --version information [iwlib, iwconfig, iwlist]
+ * o Filled in Debian 2.3 & Red-Hat 7.3 sections in [DISTRIBUTIONS]
+ * o Filled in Red-Hat 7.2, Mandrake 8.2 and SuSE 8.0 in [DISTRIBUTIONS]
+ * o Display current freq/channel after the iwrange list [iwlist]
+ * o Display current rate after the iwrange list [iwlist]
+ * o Display current txpower after the iwrange list [iwlist]
+ * o Add BUILD_NOLIBM to build without libm [Makefile]
+ * o Fix infinite loop on unknown events/scan elements [iwlib]
+ * o Add IWEVCUSTOM support [iwevent, iwlist]
+ * o Add IWEVREGISTERED & IWEVEXPIRED support [iwevent]
+ * (From Pavel Roskin <proski@gnu.org>)
+ * o Make $(DYNAMIC_LINK) relative (and not absolute) [Makefile]
+ * ---
+ * o Replace all float occurence with double [iwlib, iwlist]
+ * o Implement iwgetid --mode [iwgetid]
+ * o Convert frequency to channel [iwlist, iwlib]
+ * (Suggested by Pavel Roskin <proski@gnu.org> - always him !)
+ * o Implement --version across the board [iwspy, iwevent, iwpriv]
+ * o Implement iwgetid --freq [iwgetid]
+ * o Display "Access Point/Cell" [iwgetid]
+ * ---
+ * o New manpage about configuration (placeholder) [wireless.7]
+ * o Catch properly invalid arg to "iwconfig ethX key" [iwconfig]
+ * o Put placeholder for Passphrase to key conversion [iwlib]
+ * o Allow args of "iwconfig ethX key" in any order [iwconfig]
+ * o Implement token index for private commands [iwpriv]
+ * o Add IW_MODE_MONITOR for passive monitoring [iwlib]
+ * I wonder why nobody bothered to ask for it before ;-)
+ * o Mention distribution specific document in [PCMCIA]
+ * o Create directories before installing stuff in it [Makefile]
+ * ---
+ * o Add Debian 3.0 and PCMCIA in [wireless.7]
+ * o Add iw_protocol_compare() in [iwlib]
+ * ---
+ * o Complain about version mistmatch at runtime only once [iwlib]
+ * o Fix IWNAME null termination [iwconfig, iwlib]
+ * o "iwgetid -p" to display protocol name and check WE support [iwgetid]
+ */
+
+/* ----------------------------- TODO ----------------------------- */
+/*
+ * One day, maybe...
+ *
+ * iwconfig :
+ * --------
+ * Make disable a per encryption key modifier if some hardware
+ * requires it.
+ *
+ * iwpriv :
+ * ------
+ * Remove 'port' and 'roam' cruft now that we have mode in iwconfig
+ *
+ * iwspy :
+ * -----
+ * Add an "auto" flag to have the driver cache the last n results
+ *
+ * iwlist :
+ * ------
+ * Add scanning command line modifiers
+ * More scan types support
+ *
+ * iwevent :
+ * -------
+ * Make it non root-only
+ *
+ * Doc & man pages :
+ * ---------------
+ * Update main doc.
+ *
+ * Other :
+ * -----
+ * What about some graphical tools ?
+ */
diff --git a/package/kernel/realtek-wl/src/Users/wireless_tools.25/COPYING b/package/kernel/realtek-wl/src/Users/wireless_tools.25/COPYING
new file mode 100644
index 0000000..d60c31a
--- /dev/null
+++ b/package/kernel/realtek-wl/src/Users/wireless_tools.25/COPYING
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/package/kernel/realtek-wl/src/Users/wireless_tools.25/INSTALL b/package/kernel/realtek-wl/src/Users/wireless_tools.25/INSTALL
new file mode 100644
index 0000000..fa39d77
--- /dev/null
+++ b/package/kernel/realtek-wl/src/Users/wireless_tools.25/INSTALL
@@ -0,0 +1,65 @@
+Very important note :
+-------------------
+ This release of the Wireless Tools is not compatible with Wireless
+ Extensions earlier than 9.
+ Kernels that support this version of the Wireless Tools are listed
+ below. For all kernels before that, please use the version v19 of
+ the Wireless Tools.
+ You might have headers troubles and it doesn't compile, see below...
+
+You need :
+--------
+ o Compiler and development environment
+ o A kernel supporting wireless extensions version 9 or higher
+ -> from 2.2.14 onward
+ -> from 2.3.24 onward
+ Note : CONFIG_NET_RADIO must be enabled
+ o (Optional) A Pcmcia package supporting Wireless Extension
+ o A driver supporting wireless extensions
+ -> Check my web pages for latest list of drivers,
+ otherwise patch your favourite driver...
+ Note : more recent kernels and drivers are likely to support
+ more wireless extension features...
+
+Compile wireless tools :
+----------------------
+ In theory, a "make" should suffice to create the tools.
+ In practice, there is big troubles with the kernel
+headers. See below for how to fix that.
+ Note : as some internal data structures change from kernel to
+kernel, you are advised to not use the precompiled version of the
+tools but to recompile your own.
+
+Installation :
+------------
+ If I were you, I would not trust a "make install". If you feel
+courageous, just do "make install". It may even do the right
+thing. Actually, with the various bugfixes that happened over the
+time, it nowadays tend to do the right thing.
+ I advise to copy the executable (iwconfig, iwspy and iwpriv)
+in /usr/local/sbin or /usr/sbin. The man pages (iwconfig.8, iwspy.8
+and iwpriv.8) should be copied in /usr/local/man/man8 or
+/usr/man/man8.
+ In fact, if you want to use Pcmcia wireless.opts, this step is
+mandatory...
+
+Kernel headers (why it doesn't compile) :
+---------------------------------------
+ Some changes in the kernel headers and glibc headers are
+making my life difficult. We now have a mechanism to automatically
+select the proper header based on various bits of information (libc
+version & kernel version), but it may fail to do the right thing.
+ You may also see the message :
+ "Your kernel/libc combination is not supported"
+ If this happens to you, you will need to hack the rules at the
+top of iwlib.h and send me the patch.
+
+ The second issue is that some distributions install some
+independant kernel headers in /usr/include. If you upgrade your
+kernel, those headers become out of sync and you don't benefit from
+the latest Wireless Extensions. Even worse, it can sometimes prevent
+the tools from compiling.
+ The trick is to copy the file .../include/linux/wireless.h
+from the kernel to the /usr/include headers.
+
+ Jean <jt@hpl.hp.com>
diff --git a/package/kernel/realtek-wl/src/Users/wireless_tools.25/Makefile b/package/kernel/realtek-wl/src/Users/wireless_tools.25/Makefile
new file mode 100644
index 0000000..cbc0d65
--- /dev/null
+++ b/package/kernel/realtek-wl/src/Users/wireless_tools.25/Makefile
@@ -0,0 +1,182 @@
+##
+## Please check the configurion parameters below
+##
+
+## Installation directory. By default, go in /usr/local
+## Distributions should probably use /usr, but they probably know better...
+PREFIX = /usr/local
+
+## Compiler to use
+#CC = gcc
+#CONFIG_PC :=n
+#CROSS_COMPILE ?=
+#CROSS_COMPILE=mips-wrs-linux-gnu-mips_74k_softfp-glibc_small-
+
+#CROSS_COMPILE=mips-wrs-linux-gnu-mips_74k_softfp-glibc_small-
+CC = $(CROSS_COMPILE)gcc
+
+## Uncomment this to build against this kernel
+# KERNEL_SRC = /usr/src/linux
+
+## Uncomment this to force a particular version of wireless extensions.
+## This would use private copy of Wireless Extension definition instead
+## of the system wide one in /usr/include/linux. Use with care.
+## Can be used to create multiple versions of the tools on the same system
+## for multiple kernels or get around broken distributions.
+# FORCE_WEXT_VERSION = 14
+
+## Uncomment this to build tools using dynamic version of the library
+# BUILD_SHARED = y
+
+## Uncomment this to build without using libm (less efficient)
+## This is mostly useful for embedded platforms
+BUILD_NOLIBM = y
+
+# ***************************************************************************
+# ***** Most users should not need to change anything beyond this point *****
+# ***************************************************************************
+
+# Targets to build
+STATIC=libiw.a
+DYNAMIC=libiw.so.25
+PROGS= iwconfig iwlist iwpriv iwspy iwgetid iwevent
+MANPAGES8=iwconfig.8 iwlist.8 iwpriv.8 iwspy.8 iwgetid.8 iwevent.8
+MANPAGES7=wireless.7
+
+# Composition of the library :
+OBJS = iwlib.o
+
+# Select library to link tool with
+ifdef BUILD_SHARED
+ IWLIB=$(DYNAMIC)
+else
+ IWLIB=$(STATIC)
+endif
+
+# Standard name for dynamic library so that the dynamic linker can pick it.
+# We will just create a symbolic link to the real thing.
+DYNAMIC_LINK= libiw.so
+
+# Install directories
+INSTALL_DIR= $(PREFIX)/sbin/
+INSTALL_LIB= $(PREFIX)/lib/
+INSTALL_INC= $(PREFIX)/include/
+INSTALL_MAN= $(PREFIX)/man/
+
+# Use local header if the version of wireless extensions is specified
+ifdef FORCE_WEXT_VERSION
+ WEXT_FLAG = -DWEXT_HEADER=\"wireless.$(FORCE_WEXT_VERSION).h\"
+endif
+
+RM = rm -f
+
+RM_CMD = $(RM) *.BAK *.bak *.o *.so ,* *~ *.a *.orig *.rej
+
+ifdef KERNEL_SRC
+ KERNEL_INCLUDES = -I $(KERNEL_SRC)/include
+endif
+
+RTK_INCLUDE = -I$(TOP_USERS_DIR)/include
+
+# Do we want to build with or without libm ?
+ifdef BUILD_NOLIBM
+ LIBS=
+ WELIB_FLAG = -DWE_NOLIBM=y
+else
+ LIBS= -lm
+endif
+
+#CFLAGS=-O2 -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Werror
+CFLAGS := -Os -W -Wall -Wstrict-prototypes $(CFLAGS)
+CFLAGS += $(EXTRA_CFLAGS)
+ifeq ($(SLINK),1)
+CFLAGS += -ffunction-sections -fdata-sections
+LDFLAGS += --static -s -Wl,--gc-sections
+endif
+
+XCFLAGS=$(CFLAGS) $(WARN) $(HEADERS) $(WEXT_FLAG) $(WELIB_FLAG) $(KERNEL_INCLUDES) $(RTK_INCLUDE)
+
+ifeq ($(CONFIG_PC),y)
+XCFLAGS+=-D__PC__
+endif
+
+PICFLAG=-fPIC
+
+all:: $(STATIC) $(DYNAMIC) $(PROGS)
+
+%: %.o
+ $(CC) $(XCFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS)
+ $(CROSS_COMPILE)strip $@
+%.o: %.c
+ $(CC) $(XCFLAGS) -c $<
+%.so: %.c
+ $(CC) $(XCFLAGS) $(PICFLAG) -c -o $@ $<
+
+iwconfig: iwconfig.o $(IWLIB)
+
+iwlist: iwlist.o $(IWLIB)
+
+iwpriv: iwpriv.o $(IWLIB)
+
+iwspy: iwspy.o $(IWLIB)
+
+iwgetid: iwgetid.o
+
+iwevent: iwevent.o $(IWLIB)
+
+macaddr: macaddr.o $(IWLIB)
+
+# Compilation of the dynamic library
+$(DYNAMIC): $(OBJS:.o=.so)
+ $(CC) -shared -o $@ -Wl,-soname,$@ -lc $^
+
+# Compilation of the static library
+$(STATIC): $(OBJS)
+ $(RM) $@
+ ar cru $@ $^
+ ranlib $@
+
+# So crude but so effective ;-)
+# Less crude thanks to many contributions ;-)
+install::
+ install -m 755 -d $(INSTALL_DIR)
+ install -m 755 $(PROGS) $(INSTALL_DIR)
+ install -m 755 -d $(INSTALL_LIB)
+ install -m 644 $(STATIC) $(INSTALL_LIB)
+ install -m 755 $(DYNAMIC) $(INSTALL_LIB)
+ ln -sfn $(DYNAMIC) $(INSTALL_LIB)/$(DYNAMIC_LINK)
+ echo "Don't forget to add $(INSTALL_LIB) to /etc/ld.so.conf, and run ldconfig."
+ install -m 755 -d $(INSTALL_INC)
+ install -m 644 iwlib.h $(INSTALL_INC)
+ install -m 755 -d $(INSTALL_MAN)/man8/
+ install -m 644 $(MANPAGES8) $(INSTALL_MAN)/man8/
+ install -m 755 -d $(INSTALL_MAN)/man7/
+ install -m 644 $(MANPAGES7) $(INSTALL_MAN)/man7/
+
+clean::
+ $(RM_CMD) $(STATIC) $(DYNAMIC) $(PROGS)
+
+realclean::
+ $(RM_CMD)
+ $(RM) $(STATIC) $(DYNAMIC) $(PROGS) macaddr
+
+uninstall::
+ for f in $(PROGS); do \
+ $(RM) $(INSTALL_DIR)/$$f; \
+ done
+ $(RM) $(INSTALL_LIB)/$(STATIC)
+ $(RM) $(INSTALL_LIB)/$(DYNAMIC)
+ $(RM) $(INSTALL_LIB)/$(DYNAMIC_LINK)
+ $(RM) $(INSTALL_INC)/iwlib.h
+ for f in $(MANPAGES8); do \
+ $(RM) $(INSTALL_MAN)/man8/$$f; \
+ for f in $(MANPAGES7); do \
+ $(RM) $(INSTALL_MAN)/man7/$$f; \
+ done
+
+romfs:
+ $(ROMFSINST) iwpriv /bin/iwpriv
+
+depend::
+ makedepend -s "# DO NOT DELETE" -- $(INCLUDES) -- $(SRCS)
+# DO NOT DELETE
diff --git a/package/kernel/realtek-wl/src/Users/wireless_tools.25/README b/package/kernel/realtek-wl/src/Users/wireless_tools.25/README
new file mode 100644
index 0000000..e1ab782
--- /dev/null
+++ b/package/kernel/realtek-wl/src/Users/wireless_tools.25/README
@@ -0,0 +1,121 @@
+ Wireless Tools
+ --------------
+
+ This package contain the Wireless tools, used to manipulate
+the Wireless Extensions. The Wireless Extension is an interface
+allowing you to set Wireless LAN specific parameters and get the
+specific stats.
+
+web page
+--------
+ You'll find a lot of useful info on :
+ http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html
+ http://web.hpl.hp.com/personal/Jean_Tourrilhes/Linux/
+
+INSTALL
+-------
+ This file contains installation instruction and requirements.
+ A *must* read.
+
+PCMCIA.txt
+----------
+ This file describes how to use Pcmcia init script to configure
+Wireless Extensions and how to use Pcmcia schemes.
+
+DISTRIBUTION
+------------
+ This file will document the specifics of Wireless Extensions
+with a few different distributions. I need your help to complete this
+file.
+
+man pages (iwconfig.8, iwlist.8, iwpriv.8, iwspy.8)
+---------
+ VERY IMPORTANT : I try to keep the man page up to date, so
+you'd better read them before asking questions.
+ ALSO IMPORTANT : Those man pages describe the capacity of the
+tools, no device implement the full range (and drivers usually
+implement even less).
+
+ As far as I know, the man pages are the most complete, up to
+date and accurate documentation of the wireless tools. An update of
+the web page related to Wireless Extension is long overdue. Send
+feedback to me.
+ The man pages can either be copied in a location where the
+command "man" will find them, such as /usr/local/man/man8, or can be
+read locally with the command :
+ nroff -man xxx.8 | less
+
+iwconfig.c
+----------
+ The main wireless tool. Used for device configuration and to see
+the most common wireless parameters.
+
+iwlist.c
+--------
+ Display some large chunk of information not displayed by iwconfig.
+ For example, all bit rates, all frequencies, all keys...
+
+iwspy.c
+-------
+ Mobile IP support test and allow get get stats per MAC address
+(instead of globally). Also, for some driver/device, this is the only
+way to get stats in Ad-Hoc mode.
+
+iwpriv.c
+--------
+ Manipulate driver private ioctls : all parameters that are
+specific to a driver or a device and therefore not part of iwconfig.
+
+iwgetid.c
+---------
+ Output the ESSID or NWID of the specified device.
+ Can also output it in a form that can be used as a Pcmcia Scheme.
+
+iwevent.c
+---------
+ Display Wireless Events. This is new, so there is not much support
+in drivers for it yet...
+
+iwlib.c
+-------
+ The Wireless Tools helper library. May be usefull if you want
+to create your own applications using Wireless Extensions.
+
+Changelog, contributions
+------------------------
+ See CHANGELOG.h
+
+wireless.h
+----------
+ Definition of the Wireless Extensions. Remember that the
+definition used by the drivers and the tools must match, otherwise
+funny things may happen. The tools try to check for that.
+ Since Wireless Extensions v12, you can no longer drop this
+file in your kernel headers to update the Wireless Extensions, you
+need to use the full patches available on my web page. So, the use is
+more if you plan to do some cross compile or something similar.
+ Just for your enjoyement, there is various release of it. If
+your kernel/drivers are old, you may want to try the older releases...
+
+sample_xxx.c :
+------------
+ Various samples of code showing how to implement some of the
+more tricky feature of Wireless Extensions in your driver.
+ Note that there is no guarantee that this code compile, let
+alone work, but it should point you in the proper direction.
+ Also, have a look at existing drivers in the Linux kernel.
+
+Other tools :
+-----------
+ My web page list many other tools using Wireless
+Extensions that you may find useful...
+ http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html#links
+
+Other questions :
+---------------
+ You have the source, and it is documented. In 99% of the case,
+you will find your answer there.
+
+ Good luck...
+
+ Jean <jt@hpl.hp.com>
diff --git a/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwconfig.8 b/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwconfig.8
new file mode 100644
index 0000000..377a3f2
--- /dev/null
+++ b/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwconfig.8
@@ -0,0 +1,457 @@
+.\" Jean II - HPLB - 96
+.\" iwconfig.8
+.\"
+.TH IWCONFIG 8 "31 October 1996" "net-tools" "Linux Programmer's Manual"
+.\"
+.\" NAME part
+.\"
+.SH NAME
+iwconfig \- configure a wireless network interface
+.\"
+.\" SYNOPSIS part
+.\"
+.SH SYNOPSIS
+.BI "iwconfig [" interface ]
+.br
+.BI "iwconfig " interface " [essid " X "] [nwid " N "] [freq " F "] [channel " C ]
+.br
+.BI " [sens " S "] [mode " M "] [ap " A "] [nick " NN ]
+.br
+.BI " [rate " R "] [rts " RT "] [frag " FT "] [txpower " T ]
+.br
+.BI " [enc " E "] [key " K "] [power " P "] [retry " R ]
+.br
+.BI " [commit]
+.br
+.BI "iwconfig --help"
+.br
+.BI "iwconfig --version"
+.\"
+.\" DESCRIPTION part
+.\"
+.SH DESCRIPTION
+.B Iwconfig
+is similar to
+.IR ifconfig (8),
+but is dedicated to the wireless interfaces. It is used to set the
+parameters of the network interface which are specific to the wireless
+operation (for example : the frequency).
+.B Iwconfig
+may also be used to display those parameters, and the wireless
+statistics (extracted from
+.IR /proc/net/wireless ).
+.PP
+All these parameters and statistics are device dependant. Each driver
+will provide only some of them depending on the hardware support, and
+the range of value may change. Please refer to the man page of each
+device for details.
+.\"
+.\" PARAMETER part
+.\"
+.SH PARAMETERS
+.TP
+.B essid
+Set the ESSID (or Network Name - in some products it may also called
+Domain ID). The ESSID is used to identify cells which are part of the
+same virtual network.
+.br
+As opposed to the NWID which defines a single cell, the ESSID defines
+a group of cell connected via repeaters or infrastructure, where the
+user may roam. With some card, you may disable the ESSID checking
+(ESSID promiscuous) with
+.IR off " or " any " (and " on
+to reenable it).
+.br
+.B Examples :
+.br
+.I " iwconfig eth0 essid any"
+.br
+.I " iwconfig eth0 essid ""My Network""
+.TP
+.BR nwid / domain
+Set the Network ID (in some products it is also called Domain ID). As
+all adjacent wireless networks share the same medium, this parameter
+is used to differenciate them (create logical colocated networks) and
+identify nodes belonguing to the same cell. With some card, you may
+disable the Network ID checking (NWID promiscuous) with
+.IR off " (and " on
+to reenable it).
+.br
+.B Examples :
+.br
+.I " iwconfig eth0 nwid AB34
+.br
+.I " iwconfig eth0 nwid off"
+.TP
+.BR freq / channel
+Set the operating frequency or channel in the device. Value below 1000
+are the channel number, value over this is the frequency in Hz. You
+must append the suffix k, M or G to the value (for example, "2.46G"
+for 2.46 GHz frequency), or add enough '0'.
+.br
+Channels are usually numbered starting at 1,
+and you may use
+.IR iwpriv (8)
+to get the total number of channels and list the available
+frequencies. Depending on regulations, some frequencies/channels may
+not be available.
+.br
+.B Examples :
+.br
+.I " iwconfig eth0 freq 2.422G"
+.br
+.I " iwconfig eth0 channel 3"
+.TP
+.B sens
+Set the sensitivity threshold. This is the lowest signal level for
+which we attempt a packet reception, signal lower than this are not
+received. This is used to avoid receiving background noise, so you
+should set it according to the average noise level. Positive values
+are assumed to be the raw value used by the hardware or a percentage,
+negative values are assumed to be dBm.
+.br
+With some hardware, this parameter also control the defer threshold
+(lowest signal level for which we consider the channel busy) and the
+handover threshold (lowest signal level where we stay associated with
+the current access point).
+.br
+.B Example :
+.br
+.I " iwconfig eth0 sens -80"
+.TP
+.B mode
+Set the operating mode of the device, which depends on the network
+topology. The mode can be
+.I Ad-hoc
+(network composed of only one cell and without Access Point),
+.I Managed
+(node connects to a network composed of many Access Points, with roaming),
+.I Master
+(the node is the synchronisation master or act as an Access Point),
+.I Repeater
+(the node forward packets between other wireless nodes),
+.I Secondary
+(the node act as a backup master/repeater),
+.I Monitor
+(the node act as a passive monitor and only receives packets) or
+.IR Auto .
+.br
+.B Example :
+.br
+.I " iwconfig eth0 mode Managed"
+.br
+.I " iwconfig eth0 mode Ad-Hoc"
+.TP
+.B ap
+Force the card to register to the Access Point given by the address,
+if it is possible. When the quality of the connection goes too low,
+the driver may revert back to automatic mode (the card finds the best
+Access Point in range).
+.br
+You may also use
+.I off
+to re-enable automatic mode without changing the current Access Point,
+or you may use
+.I any
+or
+.I auto
+to force the card to reassociate with the current best Access Point.
+.br
+.B Example :
+.br
+.I " iwconfig eth0 ap 00:60:1D:01:23:45"
+.br
+.I " iwconfig eth0 ap any"
+.br
+.I " iwconfig eth0 ap off"
+.TP
+.BR nick [name]
+Set the nickname, or the station name. Most 802.11 products do define
+it, but this is not used as far as the protocols (MAC, IP, TCP) are
+concerned and completely accessory as far as configuration goes. In
+fact only some diagnostic tools may use it.
+.br
+.B Example :
+.br
+.I " iwconfig eth0 nickname ""My Linux Node""
+.TP
+.BR rate / bit [rate]
+For cards supporting multiple bit rates, set the bit-rate in b/s. The
+bit-rate is the speed at which bits are transmitted over the medium,
+the user speed of the link is lower due to medium sharing and
+overhead.
+.br
+You must append the suffix k, M or G to the value (decimal multiplier
+: 10^3, 10^6 and 10^9 b/s), or add enough '0'. Values below 1000 are
+card specific, usually an index in the bit-rate list. Use
+.I auto
+to select the automatic bit-rate mode (fallback to lower rate on noisy
+channels), which is the default for most cards, and
+.I fixed
+to revert back to fixed setting. If you specify a bit-rate value and append
+.IR auto ,
+the driver will use all bit lower and equal than this value.
+.br
+.B Examples :
+.br
+.I " iwconfig eth0 rate 11M"
+.br
+.I " iwconfig eth0 rate auto"
+.br
+.I " iwconfig eth0 rate 5.5M auto"
+.TP
+.BR rts [_threshold]
+RTS/CTS adds a handshake before each packet transmission to make sure
+that the channel is clear. This adds overhead, but increase
+performance in case of hidden nodes or large number of active
+nodes. This parameters set the size of the smallest packet for which
+the node sends RTS, a value equal to the maximum packet size disable
+the scheme. You may also set this parameter to
+.IR auto ", " fixed " or " off .
+.br
+.B Examples :
+.br
+.I " iwconfig eth0 rts 250"
+.br
+.I " iwconfig eth0 rts off"
+.TP
+.BR frag [mentation_threshold]
+Fragmentation allow to split a IP packet in a burst of smaller
+fragments transmitted on the medium. In most cases this adds overhead,
+but in very noisy environment this reduce the error penalty. This
+parameter set the maximum fragment size, a value equal to the maximum
+packet size disable the scheme. You may also set this parameter to
+.IR auto ", " fixed " or " off .
+.br
+.B Examples :
+.br
+.I " iwconfig eth0 frag 512"
+.br
+.I " iwconfig eth0 frag off"
+.TP
+.BR key / enc [ryption]
+Used to manipulate encryption or scrambling keys and encryption mode.
+.br
+To set the current encryption key, just enter the key in hex digits as
+.IR XXXX-XXXX-XXXX-XXXX " or " XXXXXXXX .
+To set a key other than the current key, prepend or append
+.I [index]
+to the key itself (this won't change which is the active key). You can
+also enter the key as an ASCII string by using the
+.I s:
+prefix. Passphrase is currently not supported.
+.br
+To change which key is the current active key, just enter
+.I [index]
+(without entering any key value).
+.br
+.IR off " and " on
+disable and reenable encryption,
+.I open
+set the system in open mode (accept non-encrypted packets) and
+.I restricted
+discard non-encrypted packets.
+.br
+If you need to set multiple keys, or set a key and change the active
+key, you need to use multiple
+.B key
+directives. Arguments can be put in any order, the last one will take
+precendence.
+.br
+.B Examples :
+.br
+.I " iwconfig eth0 key 0123-4567-89"
+.br
+.I " iwconfig eth0 key s:password [2]"
+.br
+.I " iwconfig eth0 key [2] open"
+.br
+.I " iwconfig eth0 key off"
+.br
+.I " iwconfig eth0 key restricted [3] 0123456789"
+.br
+.I " iwconfig eth0 key 01-23 key 45-67 [4] key [4]"
+.TP
+.BR power
+Used to manipulate power management scheme parameters and mode.
+.br
+To set the period between wake up, enter
+.IR "period `value'" .
+To set the timeout before going back to sleep, enter
+.IR "timeout `value'" .
+You can also add the
+.IR min " and " max
+modifiers. By defaults, those values are in seconds, append the
+suffix m or u to specify values un milliseconds or
+microseconds. Sometimes, those values are without units (number of
+dwell or the like).
+.br
+.IR off " and " on
+disable and reenable power management. Finally, you may set the power
+management mode to
+.I all
+(receive all packets),
+.I unicast
+(receive unicast packets only, discard multicast and broadcast) and
+.I multicast
+(receive multicast and broadcast only, discard unicast packets).
+.br
+.B Examples :
+.br
+.I " iwconfig eth0 power period 2"
+.br
+.I " iwconfig eth0 power 500m unicast"
+.br
+.I " iwconfig eth0 power timeout 300u all"
+.br
+.I " iwconfig eth0 power off"
+.br
+.I " iwconfig eth0 power min period 2 power max period 4"
+.TP
+.BR txpower
+For cards supporting multiple transmit powers, set the transmit power in dBm. If
+.I W
+is the power in Watt, the power in dBm is
+.IR "P = 30 + 10.log(W)" .
+If the value is postfixed by
+.IR mW ,
+it will be automatically converted to dBm.
+.br
+In addition,
+.IR on " and " off
+enable and disable the radio, and
+.IR auto " and " fixed
+enable and disable power control (if those features are available).
+.br
+.B Examples :
+.br
+.I " iwconfig eth0 txpower 15"
+.br
+.I " iwconfig eth0 txpower 30mW"
+.br
+.I " iwconfig eth0 txpower auto"
+.br
+.I " iwconfig eth0 txpower off"
+.TP
+.BR retry
+Most cards have MAC retransmissions, and some allow to set the
+behaviour of the retry mechanism.
+.br
+To set the maximum number of retries, enter
+.IR "limit `value'" .
+This is an absolute value (without unit).
+The set the maximum length of time the MAC should retry, enter
+.IR "lifetime `value'" .
+By defaults, this value in in seconds, append the suffix m or u to
+specify values un milliseconds or microseconds.
+.br
+You can also add the
+.IR min " and " max
+modifiers. If the card support automatic mode, they define the bounds
+of the limit or lifetime. Some other cards define different values
+depending on packet size, for example in 802.11
+.I min limit
+is the short retry limit (non RTS/CTS packets).
+.br
+.B Examples :
+.br
+.I " iwconfig eth0 retry 16"
+.br
+.I " iwconfig eth0 retry lifetime 300m"
+.br
+.I " iwconfig eth0 retry min limit 8"
+.TP
+.BR commit
+Some cards may not apply changes done through Wireless Extensions
+immediately (they may wait to agregate the changes or apply it only
+when the card is brought up via ifconfig). This command (when
+available) force the card to apply all pending changes.
+.br
+This is normally not needed, because the card will eventually apply
+the changes, but can be usefull for debugging.
+.\"
+.\" DISPLAY part
+.\"
+.SH DISPLAY
+For each device which support wireless extensions,
+.I iwconfig
+will display the name of the
+.B MAC protocol
+used (name of device for proprietary protocols), the
+.B ESSID
+(Network Name), the
+.BR NWID ,
+the
+.B frequency
+(or channel), the
+.BR sensitivity ,
+the
+.B mode
+of operation, the
+.B Access Point
+address, the
+.B bit-rate
+the
+.BR "RTS threshold" ", the " "fragmentation threshold" ,
+the
+.B encryption key
+and the
+.B power management
+settings (depending on availability).
+.br
+See above for explanations of what these parameters mean.
+.br
+If the label for bitrate is followed by
+.RB ` = ',
+it means that the parameter is fixed and forced to that value, if it
+is followed by
+.RB ` : '
+it is only the current value (device in normal auto mode).
+.PP
+If
+.I /proc/net/wireless
+exists,
+.I iwconfig
+will also display its content :
+.TP
+.B Link quality
+Quality of the link or the modulation (what is the level of contention
+or interference, or how good the received signal is).
+.TP
+.B Signal level
+Received signal strength (how strong the received signal is).
+.TP
+.B Noise level
+Background noise level (when no packet is transmited).
+.TP
+.B invalid nwid
+Number of packets received with a different NWID. Used to detect
+configuration problems or adjacent network existence.
+.TP
+.B invalid crypt
+Number of packets that the hardware was unable to decrypt.
+.TP
+.B invalid misc
+Other packets lost in relation with specific wireless operations.
+.\"
+.\" AUTHOR part
+.\"
+.SH AUTHOR
+Jean Tourrilhes \- jt@hpl.hp.com
+.\"
+.\" FILES part
+.\"
+.SH FILES
+.I /proc/net/wireless
+.\"
+.\" SEE ALSO part
+.\"
+.SH SEE ALSO
+.BR ifconfig (8),
+.BR iwspy (8),
+.BR iwlist (8),
+.BR iwpriv (8),
+.BR wavelan (4),
+.BR wavelan_cs (4),
+.BR wvlan_cs (4),
+.BR netwave_cs (4).
diff --git a/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwconfig.c b/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwconfig.c
new file mode 100644
index 0000000..a81ee9f
--- /dev/null
+++ b/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwconfig.c
@@ -0,0 +1,1379 @@
+/*
+ * Wireless Tools
+ *
+ * Jean II - HPLB 97->99 - HPL 99->01
+ *
+ * Main code for "iwconfig". This is the generic tool for most
+ * manipulations...
+ * You need to link this code against "iwlib.c" and "-lm".
+ *
+ * This file is released under the GPL license.
+ * Copyright (c) 1997-2002 Jean Tourrilhes <jt@hpl.hp.com>
+ */
+
+#include "iwlib.h" /* Header */
+
+/************************* MISC SUBROUTINES **************************/
+
+/*------------------------------------------------------------------*/
+/*
+ * Print usage string
+ */
+static void
+iw_usage(void)
+{
+ fprintf(stderr, "Usage: iwconfig interface [essid {NN|on|off}]\n");
+ fprintf(stderr, " [nwid {NN|on|off}]\n");
+ fprintf(stderr, " [mode {managed|ad-hoc|...}\n");
+ fprintf(stderr, " [freq N.NNNN[k|M|G]]\n");
+ fprintf(stderr, " [channel N]\n");
+ fprintf(stderr, " [sens N]\n");
+ fprintf(stderr, " [nick N]\n");
+ fprintf(stderr, " [rate {N|auto|fixed}]\n");
+ fprintf(stderr, " [rts {N|auto|fixed|off}]\n");
+ fprintf(stderr, " [frag {N|auto|fixed|off}]\n");
+ fprintf(stderr, " [enc {NNNN-NNNN|off}]\n");
+ fprintf(stderr, " [power {period N|timeout N}]\n");
+ fprintf(stderr, " [txpower N {mW|dBm}]\n");
+ fprintf(stderr, " [commit]\n");
+ fprintf(stderr, " Check man pages for more details.\n\n");
+}
+
+
+/************************* DISPLAY ROUTINES **************************/
+
+/*------------------------------------------------------------------*/
+/*
+ * Get wireless informations & config from the device driver
+ * We will call all the classical wireless ioctl on the driver through
+ * the socket to know what is supported and to get the settings...
+ */
+static int
+get_info(int skfd,
+ char * ifname,
+ struct wireless_info * info)
+{
+ struct iwreq wrq;
+
+ memset((char *) info, 0, sizeof(struct wireless_info));
+
+ /* Get wireless name */
+ if(iw_get_ext(skfd, ifname, SIOCGIWNAME, &wrq) < 0)
+ {
+ /* If no wireless name : no wireless extensions */
+ /* But let's check if the interface exists at all */
+ struct ifreq ifr;
+
+ strcpy(ifr.ifr_name, ifname);
+ if(ioctl(skfd, SIOCGIFFLAGS, &ifr) < 0)
+ return(-ENODEV);
+ else
+ return(-ENOTSUP);
+ }
+ else
+ {
+ strncpy(info->name, wrq.u.name, IFNAMSIZ);
+ info->name[IFNAMSIZ] = '\0';
+ }
+
+ /* Get ranges */
+ if(iw_get_range_info(skfd, ifname, &(info->range)) >= 0)
+ info->has_range = 1;
+
+ /* Get network ID */
+ if(iw_get_ext(skfd, ifname, SIOCGIWNWID, &wrq) >= 0)
+ {
+ info->has_nwid = 1;
+ memcpy(&(info->nwid), &(wrq.u.nwid), sizeof(iwparam));
+ }
+
+ /* Get frequency / channel */
+ if(iw_get_ext(skfd, ifname, SIOCGIWFREQ, &wrq) >= 0)
+ {
+ info->has_freq = 1;
+ info->freq = iw_freq2float(&(wrq.u.freq));
+ }
+
+ /* Get sensitivity */
+ if(iw_get_ext(skfd, ifname, SIOCGIWSENS, &wrq) >= 0)
+ {
+ info->has_sens = 1;
+ memcpy(&(info->sens), &(wrq.u.sens), sizeof(iwparam));
+ }
+
+ /* Get encryption information */
+ wrq.u.data.pointer = (caddr_t) info->key;
+ wrq.u.data.length = IW_ENCODING_TOKEN_MAX;
+ wrq.u.data.flags = 0;
+ if(iw_get_ext(skfd, ifname, SIOCGIWENCODE, &wrq) >= 0)
+ {
+ info->has_key = 1;
+ info->key_size = wrq.u.data.length;
+ info->key_flags = wrq.u.data.flags;
+ }
+
+ /* Get ESSID */
+ wrq.u.essid.pointer = (caddr_t) info->essid;
+ wrq.u.essid.length = IW_ESSID_MAX_SIZE + 1;
+ wrq.u.essid.flags = 0;
+ if(iw_get_ext(skfd, ifname, SIOCGIWESSID, &wrq) >= 0)
+ {
+ info->has_essid = 1;
+ info->essid_on = wrq.u.data.flags;
+ }
+
+ /* Get AP address */
+ if(iw_get_ext(skfd, ifname, SIOCGIWAP, &wrq) >= 0)
+ {
+ info->has_ap_addr = 1;
+ memcpy(&(info->ap_addr), &(wrq.u.ap_addr), sizeof (sockaddr));
+ }
+
+ /* Get NickName */
+ wrq.u.essid.pointer = (caddr_t) info->nickname;
+ wrq.u.essid.length = IW_ESSID_MAX_SIZE + 1;
+ wrq.u.essid.flags = 0;
+ if(iw_get_ext(skfd, ifname, SIOCGIWNICKN, &wrq) >= 0)
+ if(wrq.u.data.length > 1)
+ info->has_nickname = 1;
+
+ /* Get bit rate */
+ if(iw_get_ext(skfd, ifname, SIOCGIWRATE, &wrq) >= 0)
+ {
+ info->has_bitrate = 1;
+ memcpy(&(info->bitrate), &(wrq.u.bitrate), sizeof(iwparam));
+ }
+
+ /* Get RTS threshold */
+ if(iw_get_ext(skfd, ifname, SIOCGIWRTS, &wrq) >= 0)
+ {
+ info->has_rts = 1;
+ memcpy(&(info->rts), &(wrq.u.rts), sizeof(iwparam));
+ }
+
+ /* Get fragmentation threshold */
+ if(iw_get_ext(skfd, ifname, SIOCGIWFRAG, &wrq) >= 0)
+ {
+ info->has_frag = 1;
+ memcpy(&(info->frag), &(wrq.u.frag), sizeof(iwparam));
+ }
+
+ /* Get operation mode */
+ if(iw_get_ext(skfd, ifname, SIOCGIWMODE, &wrq) >= 0)
+ {
+ info->mode = wrq.u.mode;
+ if((info->mode < IW_NUM_OPER_MODE) && (info->mode >= 0))
+ info->has_mode = 1;
+ }
+
+ /* Get Power Management settings */
+ wrq.u.power.flags = 0;
+ if(iw_get_ext(skfd, ifname, SIOCGIWPOWER, &wrq) >= 0)
+ {
+ info->has_power = 1;
+ memcpy(&(info->power), &(wrq.u.power), sizeof(iwparam));
+ }
+
+#if WIRELESS_EXT > 9
+ /* Get Transmit Power */
+ if(iw_get_ext(skfd, ifname, SIOCGIWTXPOW, &wrq) >= 0)
+ {
+ info->has_txpower = 1;
+ memcpy(&(info->txpower), &(wrq.u.txpower), sizeof(iwparam));
+ }
+#endif
+
+#if WIRELESS_EXT > 10
+ /* Get retry limit/lifetime */
+ if(iw_get_ext(skfd, ifname, SIOCGIWRETRY, &wrq) >= 0)
+ {
+ info->has_retry = 1;
+ memcpy(&(info->retry), &(wrq.u.retry), sizeof(iwparam));
+ }
+#endif /* WIRELESS_EXT > 10 */
+
+ /* Get stats */
+ if(iw_get_stats(skfd, ifname, &(info->stats)) >= 0)
+ {
+ info->has_stats = 1;
+ }
+
+ return(0);
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Print on the screen in a neat fashion all the info we have collected
+ * on a device.
+ */
+static void
+display_info(struct wireless_info * info,
+ char * ifname)
+{
+ char buffer[128]; /* Temporary buffer */
+
+ /* One token is more of less 5 characters, 14 tokens per line */
+ int tokens = 3; /* For name */
+
+ /* Display device name and wireless name (name of the protocol used) */
+ printf("%-8.8s %s ", ifname, info->name);
+
+ /* Display ESSID (extended network), if any */
+ if(info->has_essid)
+ {
+ if(info->essid_on)
+ {
+ /* Does it have an ESSID index ? */
+ if((info->essid_on & IW_ENCODE_INDEX) > 1)
+ printf("ESSID:\"%s\" [%d] ", info->essid,
+ (info->essid_on & IW_ENCODE_INDEX));
+ else
+ printf("ESSID:\"%s\" ", info->essid);
+ }
+ else
+ printf("ESSID:off/any ");
+ }
+
+ /* Display NickName (station name), if any */
+ if(info->has_nickname)
+ printf("Nickname:\"%s\"", info->nickname);
+
+ /* Formatting */
+ if(info->has_essid || info->has_nickname)
+ {
+ printf("\n ");
+ tokens = 0;
+ }
+
+ /* Display Network ID */
+ if(info->has_nwid)
+ {
+ /* Note : should display proper number of digit according to info
+ * in range structure */
+ if(info->nwid.disabled)
+ printf("NWID:off/any ");
+ else
+ printf("NWID:%X ", info->nwid.value);
+ tokens +=2;
+ }
+
+ /* Display the current mode of operation */
+ if(info->has_mode)
+ {
+ printf("Mode:%s ", iw_operation_mode[info->mode]);
+ tokens +=3;
+ }
+
+ /* Display frequency / channel */
+ if(info->has_freq)
+ {
+ iw_print_freq(buffer, info->freq);
+ printf("%s ", buffer);
+ tokens +=4;
+ }
+
+ /* Display the address of the current Access Point */
+ if(info->has_ap_addr)
+ {
+ /* A bit of clever formatting */
+ if(tokens > 8)
+ {
+ printf("\n ");
+ tokens = 0;
+ }
+ tokens +=6;
+
+ /* Oups ! No Access Point in Ad-Hoc mode */
+ if((info->has_mode) && (info->mode == IW_MODE_ADHOC))
+ printf("Cell:");
+ else
+ printf("Access Point:");
+ printf(" %s ", iw_pr_ether(buffer, (unsigned char *)info->ap_addr.sa_data));
+ }
+
+ /* Display the currently used/set bit-rate */
+ if(info->has_bitrate)
+ {
+ /* A bit of clever formatting */
+ if(tokens > 11)
+ {
+ printf("\n ");
+ tokens = 0;
+ }
+ tokens +=3;
+
+ /* Display it */
+ iw_print_bitrate(buffer, info->bitrate.value);
+ printf("Bit Rate%c%s ", (info->bitrate.fixed ? '=' : ':'), buffer);
+ }
+
+#if WIRELESS_EXT > 9
+ /* Display the Transmit Power */
+ if(info->has_txpower)
+ {
+ /* A bit of clever formatting */
+ if(tokens > 11)
+ {
+ printf("\n ");
+ tokens = 0;
+ }
+ tokens +=3;
+
+ /* Disabled ? */
+ if(info->txpower.disabled)
+ printf("Tx-Power:off ");
+ else
+ {
+ int dbm;
+
+ /* Fixed ? */
+ if(info->txpower.fixed)
+ printf("Tx-Power=");
+ else
+ printf("Tx-Power:");
+
+ /* Convert everything to dBm */
+ if(info->txpower.flags & IW_TXPOW_MWATT)
+ dbm = iw_mwatt2dbm(info->txpower.value);
+ else
+ dbm = info->txpower.value;
+
+ /* Display */
+ printf("%d dBm ", dbm);
+ }
+ }
+#endif
+
+ /* Display sensitivity */
+ if(info->has_sens)
+ {
+ /* A bit of clever formatting */
+ if(tokens > 10)
+ {
+ printf("\n ");
+ tokens = 0;
+ }
+ tokens +=4;
+
+ /* Fixed ? */
+ if(info->sens.fixed)
+ printf("Sensitivity=");
+ else
+ printf("Sensitivity:");
+
+ if(info->has_range)
+ /* Display in dBm ? */
+ if(info->sens.value < 0)
+ printf("%d dBm ", info->sens.value);
+ else
+ printf("%d/%d ", info->sens.value, info->range.sensitivity);
+ else
+ printf("%d ", info->sens.value);
+ }
+
+ printf("\n ");
+ tokens = 0;
+
+#if WIRELESS_EXT > 10
+ /* Display retry limit/lifetime information */
+ if(info->has_retry)
+ {
+ printf("Retry");
+ /* Disabled ? */
+ if(info->retry.disabled)
+ printf(":off");
+ else
+ {
+ /* Let's check the value and its type */
+ if(info->retry.flags & IW_RETRY_TYPE)
+ {
+ iw_print_retry_value(buffer,
+ info->retry.value, info->retry.flags);
+ printf("%s", buffer);
+ }
+
+ /* Let's check if nothing (simply on) */
+ if(info->retry.flags == IW_RETRY_ON)
+ printf(":on");
+ }
+ printf(" ");
+ tokens += 5; /* Between 3 and 5, depend on flags */
+ }
+#endif /* WIRELESS_EXT > 10 */
+
+ /* Display the RTS threshold */
+ if(info->has_rts)
+ {
+ /* Disabled ? */
+ if(info->rts.disabled)
+ printf("RTS thr:off ");
+ else
+ {
+ /* Fixed ? */
+ if(info->rts.fixed)
+ printf("RTS thr=");
+ else
+ printf("RTS thr:");
+
+ printf("%d B ", info->rts.value);
+ }
+ tokens += 3;
+ }
+
+ /* Display the fragmentation threshold */
+ if(info->has_frag)
+ {
+ /* A bit of clever formatting */
+ if(tokens > 10)
+ {
+ printf("\n ");
+ tokens = 0;
+ }
+ tokens +=4;
+
+ /* Disabled ? */
+ if(info->frag.disabled)
+ printf("Fragment thr:off");
+ else
+ {
+ /* Fixed ? */
+ if(info->frag.fixed)
+ printf("Fragment thr=");
+ else
+ printf("Fragment thr:");
+
+ printf("%d B ", info->frag.value);
+ }
+ }
+
+ /* Formating */
+ if(tokens > 0)
+ printf("\n ");
+
+ /* Display encryption information */
+ /* Note : we display only the "current" key, use iwlist to list all keys */
+ if(info->has_key)
+ {
+ printf("Encryption key:");
+ if((info->key_flags & IW_ENCODE_DISABLED) || (info->key_size == 0))
+ printf("off\n ");
+ else
+ {
+ /* Display the key */
+ iw_print_key(buffer, info->key, info->key_size, info->key_flags);
+ printf("%s", buffer);
+
+ /* Other info... */
+ if((info->key_flags & IW_ENCODE_INDEX) > 1)
+ printf(" [%d]", info->key_flags & IW_ENCODE_INDEX);
+ if(info->key_flags & IW_ENCODE_RESTRICTED)
+ printf(" Encryption mode:restricted");
+ if(info->key_flags & IW_ENCODE_OPEN)
+ printf(" Encryption mode:open");
+ printf("\n ");
+ }
+ }
+
+ /* Display Power Management information */
+ /* Note : we display only one parameter, period or timeout. If a device
+ * (such as HiperLan) has both, the user need to use iwlist... */
+ if(info->has_power) /* I hope the device has power ;-) */
+ {
+ printf("Power Management");
+ /* Disabled ? */
+ if(info->power.disabled)
+ printf(":off\n ");
+ else
+ {
+ /* Let's check the value and its type */
+ if(info->power.flags & IW_POWER_TYPE)
+ {
+ iw_print_pm_value(buffer, info->power.value, info->power.flags);
+ printf("%s ", buffer);
+ }
+
+ /* Let's check the mode */
+ iw_print_pm_mode(buffer, info->power.flags);
+ printf("%s", buffer);
+
+ /* Let's check if nothing (simply on) */
+ if(info->power.flags == IW_POWER_ON)
+ printf(":on");
+ printf("\n ");
+ }
+ }
+
+ /* Display statistics */
+ if(info->has_stats)
+ {
+ info->stats.qual.updated = 0x0; /* Not that reliable, disable */
+ iw_print_stats(buffer, &info->stats.qual, &info->range, info->has_range);
+ printf("Link %s\n", buffer);
+
+#if WIRELESS_EXT > 11
+ printf(" Rx invalid nwid:%d Rx invalid crypt:%d Rx invalid frag:%d\n Tx excessive retries:%d Invalid misc:%d Missed beacon:%d\n",
+ info->stats.discard.nwid,
+ info->stats.discard.code,
+ info->stats.discard.fragment,
+ info->stats.discard.retries,
+ info->stats.discard.misc,
+ info->stats.miss.beacon);
+#else /* WIRELESS_EXT > 11 */
+ printf(" Rx invalid nwid:%d invalid crypt:%d invalid misc:%d\n",
+ info->stats.discard.nwid,
+ info->stats.discard.code,
+ info->stats.discard.misc);
+#endif /* WIRELESS_EXT > 11 */
+ }
+
+ printf("\n");
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Print on the screen in a neat fashion all the info we have collected
+ * on a device.
+ */
+static int
+print_info(int skfd,
+ char * ifname,
+ char * args[],
+ int count)
+{
+ struct wireless_info info;
+ int rc;
+
+ /* Avoid "Unused parameter" warning */
+ args = args; count = count;
+
+ rc = get_info(skfd, ifname, &info);
+ switch(rc)
+ {
+ case 0: /* Success */
+ /* Display it ! */
+ display_info(&info, ifname);
+ break;
+
+ case -ENOTSUP:
+ fprintf(stderr, "%-8.8s no wireless extensions.\n\n",
+ ifname);
+ break;
+
+ default:
+ fprintf(stderr, "%-8.8s %s\n\n", ifname, strerror(-rc));
+ }
+ return(rc);
+}
+
+/************************* SETTING ROUTINES **************************/
+
+/*------------------------------------------------------------------*/
+/*
+ * Macro to handle errors when setting WE
+ * Print a nice error message and exit...
+ * We define them as macro so that "return" do the right thing.
+ * The "do {...} while(0)" is a standard trick
+ */
+#define ERR_SET_EXT(rname, request) \
+ fprintf(stderr, "Error for wireless request \"%s\" (%X) :\n", \
+ rname, request)
+
+#define ABORT_ARG_NUM(rname, request) \
+ do { \
+ ERR_SET_EXT(rname, request); \
+ fprintf(stderr, " too few arguments.\n"); \
+ return(-1); \
+ } while(0)
+
+#define ABORT_ARG_TYPE(rname, request, arg) \
+ do { \
+ ERR_SET_EXT(rname, request); \
+ fprintf(stderr, " invalid argument \"%s\".\n", arg); \
+ return(-2); \
+ } while(0)
+
+#define ABORT_ARG_SIZE(rname, request, max) \
+ do { \
+ ERR_SET_EXT(rname, request); \
+ fprintf(stderr, " argument too big (max %d)\n", max); \
+ return(-3); \
+ } while(0)
+
+/*------------------------------------------------------------------*/
+/*
+ * Wrapper to push some Wireless Parameter in the driver
+ * Use standard wrapper and add pretty error message if fail...
+ */
+#define IW_SET_EXT_ERR(skfd, ifname, request, wrq, rname) \
+ do { \
+ if(iw_set_ext(skfd, ifname, request, wrq) < 0) { \
+ ERR_SET_EXT(rname, request); \
+ fprintf(stderr, " SET failed on device %-1.8s ; %s.\n", \
+ ifname, strerror(errno)); \
+ return(-5); \
+ } } while(0)
+
+/*------------------------------------------------------------------*/
+/*
+ * Wrapper to extract some Wireless Parameter out of the driver
+ * Use standard wrapper and add pretty error message if fail...
+ */
+#define IW_GET_EXT_ERR(skfd, ifname, request, wrq, rname) \
+ do { \
+ if(iw_get_ext(skfd, ifname, request, wrq) < 0) { \
+ ERR_SET_EXT(rname, request); \
+ fprintf(stderr, " GET failed on device %-1.8s ; %s.\n", \
+ ifname, strerror(errno)); \
+ return(-6); \
+ } } while(0)
+
+/*------------------------------------------------------------------*/
+/*
+ * Set the wireless options requested on command line
+ * This function is too long and probably should be split,
+ * because it look like the perfect definition of spaghetti code,
+ * but I'm way to lazy
+ */
+static int
+set_info(int skfd, /* The socket */
+ char * args[], /* Command line args */
+ int count, /* Args count */
+ char * ifname) /* Dev name */
+{
+ struct iwreq wrq;
+ int i;
+
+ /* if nothing after the device name - will never happen */
+ if(count < 1)
+ {
+ fprintf(stderr, "Error : too few arguments.\n");
+ return(-1);
+ }
+
+ /* The other args on the line specify options to be set... */
+ for(i = 0; i < count; i++)
+ {
+ /* ---------- Commit changes to driver ---------- */
+ if(!strncmp(args[i], "commit", 6))
+ {
+ /* No args */
+ IW_SET_EXT_ERR(skfd, ifname, SIOCSIWCOMMIT, &wrq,
+ "Commit changes");
+ continue;
+ }
+
+ /* ---------- Set network ID ---------- */
+ if((!strcasecmp(args[i], "nwid")) ||
+ (!strcasecmp(args[i], "domain")))
+ {
+ i++;
+ if(i >= count)
+ ABORT_ARG_NUM("Set NWID", SIOCSIWNWID);
+ if((!strcasecmp(args[i], "off")) ||
+ (!strcasecmp(args[i], "any")))
+ wrq.u.nwid.disabled = 1;
+ else
+ if(!strcasecmp(args[i], "on"))
+ {
+ /* Get old nwid */
+ IW_GET_EXT_ERR(skfd, ifname, SIOCGIWNWID, &wrq,
+ "Set NWID");
+ wrq.u.nwid.disabled = 0;
+ }
+ else
+ if(sscanf(args[i], "%lX", (unsigned long *) &(wrq.u.nwid.value))
+ != 1)
+ ABORT_ARG_TYPE("Set NWID", SIOCSIWNWID, args[i]);
+ else
+ wrq.u.nwid.disabled = 0;
+ wrq.u.nwid.fixed = 1;
+
+ /* Set new nwid */
+ IW_SET_EXT_ERR(skfd, ifname, SIOCSIWNWID, &wrq,
+ "Set NWID");
+ continue;
+ }
+
+ /* ---------- Set frequency / channel ---------- */
+ if((!strncmp(args[i], "freq", 4)) ||
+ (!strcmp(args[i], "channel")))
+ {
+ double freq;
+
+ if(++i >= count)
+ ABORT_ARG_NUM("Set Frequency", SIOCSIWFREQ);
+ if(sscanf(args[i], "%lg", &(freq)) != 1)
+ ABORT_ARG_TYPE("Set Frequency", SIOCSIWFREQ, args[i]);
+ if(index(args[i], 'G')) freq *= GIGA;
+ if(index(args[i], 'M')) freq *= MEGA;
+ if(index(args[i], 'k')) freq *= KILO;
+
+ iw_float2freq(freq, &(wrq.u.freq));
+
+ IW_SET_EXT_ERR(skfd, ifname, SIOCSIWFREQ, &wrq,
+ "Set Frequency");
+ continue;
+ }
+
+ /* ---------- Set sensitivity ---------- */
+ if(!strncmp(args[i], "sens", 4))
+ {
+ if(++i >= count)
+ ABORT_ARG_NUM("Set Sensitivity", SIOCSIWSENS);
+ if(sscanf(args[i], "%d", &(wrq.u.sens.value)) != 1)
+ ABORT_ARG_TYPE("Set Sensitivity", SIOCSIWSENS, args[i]);
+
+ IW_SET_EXT_ERR(skfd, ifname, SIOCSIWSENS, &wrq,
+ "Set Sensitivity");
+ continue;
+ }
+
+ /* ---------- Set encryption stuff ---------- */
+ if((!strncmp(args[i], "enc", 3)) ||
+ (!strcmp(args[i], "key")))
+ {
+ unsigned char key[IW_ENCODING_TOKEN_MAX];
+
+ if(++i >= count)
+ ABORT_ARG_NUM("Set Encode", SIOCSIWENCODE);
+
+ if(!strcasecmp(args[i], "on"))
+ {
+ /* Get old encryption information */
+ wrq.u.data.pointer = (caddr_t) key;
+ wrq.u.data.length = 0;
+ wrq.u.data.flags = 0;
+ IW_GET_EXT_ERR(skfd, ifname, SIOCGIWENCODE, &wrq,
+ "Set Encode");
+ wrq.u.data.flags &= ~IW_ENCODE_DISABLED; /* Enable */
+ }
+ else
+ {
+ int gotone = 0;
+ int oldone;
+ int keylen;
+ int temp;
+
+ wrq.u.data.pointer = (caddr_t) NULL;
+ wrq.u.data.flags = 0;
+ wrq.u.data.length = 0;
+
+ /* Allow arguments in any order (it's safe) */
+ do
+ {
+ oldone = gotone;
+
+ /* -- Check for the key -- */
+ if(i < count)
+ {
+ keylen = iw_in_key(args[i], key);
+ if(keylen > 0)
+ {
+ wrq.u.data.length = keylen;
+ wrq.u.data.pointer = (caddr_t) key;
+ ++i;
+ gotone++;
+ }
+ }
+
+ /* -- Check for token index -- */
+ if((i < count) &&
+ (sscanf(args[i], "[%d]", &temp) == 1) &&
+ (temp > 0) && (temp < IW_ENCODE_INDEX))
+ {
+ wrq.u.encoding.flags |= temp;
+ ++i;
+ gotone++;
+ }
+
+ /* -- Check the various flags -- */
+ if((i < count) && (!strcasecmp(args[i], "off")))
+ {
+ wrq.u.data.flags |= IW_ENCODE_DISABLED;
+ ++i;
+ gotone++;
+ }
+ if((i < count) && (!strcasecmp(args[i], "open")))
+ {
+ wrq.u.data.flags |= IW_ENCODE_OPEN;
+ ++i;
+ gotone++;
+ }
+ if((i < count) && (!strncasecmp(args[i], "restricted", 5)))
+ {
+ wrq.u.data.flags |= IW_ENCODE_RESTRICTED;
+ ++i;
+ gotone++;
+ }
+ }
+ while(gotone != oldone);
+
+ /* Pointer is absent in new API */
+ if(wrq.u.data.pointer == NULL)
+ wrq.u.data.flags |= IW_ENCODE_NOKEY;
+
+ /* Check if we have any invalid argument */
+ if(!gotone)
+ ABORT_ARG_TYPE("Set Encode", SIOCSIWENCODE, args[i]);
+ /* Get back to last processed argument */
+ --i;
+ }
+
+ IW_SET_EXT_ERR(skfd, ifname, SIOCSIWENCODE, &wrq,
+ "Set Encode");
+ continue;
+ }
+
+ /* ---------- Set ESSID ---------- */
+ if(!strcasecmp(args[i], "essid"))
+ {
+ char essid[IW_ESSID_MAX_SIZE + 1];
+
+ i++;
+ if(i >= count)
+ ABORT_ARG_NUM("Set ESSID", SIOCSIWESSID);
+ if((!strcasecmp(args[i], "off")) ||
+ (!strcasecmp(args[i], "any")))
+ {
+ wrq.u.essid.flags = 0;
+ essid[0] = '\0';
+ }
+ else
+ if(!strcasecmp(args[i], "on"))
+ {
+ /* Get old essid */
+ wrq.u.essid.pointer = (caddr_t) essid;
+ wrq.u.essid.length = 0;
+ wrq.u.essid.flags = 0;
+ IW_GET_EXT_ERR(skfd, ifname, SIOCGIWESSID, &wrq,
+ "Set ESSID");
+ wrq.u.essid.flags = 1;
+ }
+ else
+ /* Check the size of what the user passed us to avoid
+ * buffer overflows */
+ if(strlen(args[i]) > IW_ESSID_MAX_SIZE)
+ ABORT_ARG_SIZE("Set ESSID", SIOCSIWESSID, IW_ESSID_MAX_SIZE);
+ else
+ {
+ int temp;
+
+ wrq.u.essid.flags = 1;
+ strcpy(essid, args[i]); /* Size checked, all clear */
+
+ /* Check for ESSID index */
+ if(((i+1) < count) &&
+ (sscanf(args[i+1], "[%d]", &temp) == 1) &&
+ (temp > 0) && (temp < IW_ENCODE_INDEX))
+ {
+ wrq.u.essid.flags = temp;
+ ++i;
+ }
+ }
+
+ wrq.u.essid.pointer = (caddr_t) essid;
+ wrq.u.essid.length = strlen(essid) + 1;
+ IW_SET_EXT_ERR(skfd, ifname, SIOCSIWESSID, &wrq,
+ "Set ESSID");
+ continue;
+ }
+
+ /* ---------- Set AP address ---------- */
+ if(!strcasecmp(args[i], "ap"))
+ {
+ if(++i >= count)
+ ABORT_ARG_NUM("Set AP Address", SIOCSIWAP);
+
+ if((!strcasecmp(args[i], "auto")) ||
+ (!strcasecmp(args[i], "any")))
+ {
+ /* Send a broadcast address */
+ iw_broad_ether(&(wrq.u.ap_addr));
+ }
+ else
+ {
+ if(!strcasecmp(args[i], "off"))
+ {
+ /* Send a NULL address */
+ iw_null_ether(&(wrq.u.ap_addr));
+ }
+ else
+ {
+ /* Get the address and check if the interface supports it */
+ if(iw_in_addr(skfd, ifname, args[i++], &(wrq.u.ap_addr)) < 0)
+ ABORT_ARG_TYPE("Set AP Address", SIOCSIWAP, args[i-1]);
+ }
+ }
+
+ IW_SET_EXT_ERR(skfd, ifname, SIOCSIWAP, &wrq,
+ "Set AP Address");
+ continue;
+ }
+
+ /* ---------- Set NickName ---------- */
+ if(!strncmp(args[i], "nick", 4))
+ {
+ i++;
+ if(i >= count)
+ ABORT_ARG_NUM("Set Nickname", SIOCSIWNICKN);
+ if(strlen(args[i]) > IW_ESSID_MAX_SIZE)
+ ABORT_ARG_SIZE("Set Nickname", SIOCSIWNICKN, IW_ESSID_MAX_SIZE);
+
+ wrq.u.essid.pointer = (caddr_t) args[i];
+ wrq.u.essid.length = strlen(args[i]) + 1;
+ IW_SET_EXT_ERR(skfd, ifname, SIOCSIWNICKN, &wrq,
+ "Set Nickname");
+ continue;
+ }
+
+ /* ---------- Set Bit-Rate ---------- */
+ if((!strncmp(args[i], "bit", 3)) ||
+ (!strcmp(args[i], "rate")))
+ {
+ if(++i >= count)
+ ABORT_ARG_NUM("Set Bit Rate", SIOCSIWRATE);
+ if(!strcasecmp(args[i], "auto"))
+ {
+ wrq.u.bitrate.value = -1;
+ wrq.u.bitrate.fixed = 0;
+ }
+ else
+ {
+ if(!strcasecmp(args[i], "fixed"))
+ {
+ /* Get old bitrate */
+ IW_GET_EXT_ERR(skfd, ifname, SIOCGIWRATE, &wrq,
+ "Set Bit Rate");
+ wrq.u.bitrate.fixed = 1;
+ }
+ else /* Should be a numeric value */
+ {
+ double brate;
+
+ if(sscanf(args[i], "%lg", &(brate)) != 1)
+ ABORT_ARG_TYPE("Set Bit Rate", SIOCSIWRATE, args[i]);
+ if(index(args[i], 'G')) brate *= GIGA;
+ if(index(args[i], 'M')) brate *= MEGA;
+ if(index(args[i], 'k')) brate *= KILO;
+ wrq.u.bitrate.value = (long) brate;
+ wrq.u.bitrate.fixed = 1;
+
+ /* Check for an additional argument */
+ if(((i+1) < count) &&
+ (!strcasecmp(args[i+1], "auto")))
+ {
+ wrq.u.bitrate.fixed = 0;
+ ++i;
+ }
+ if(((i+1) < count) &&
+ (!strcasecmp(args[i+1], "fixed")))
+ {
+ wrq.u.bitrate.fixed = 1;
+ ++i;
+ }
+ }
+ }
+
+ IW_SET_EXT_ERR(skfd, ifname, SIOCSIWRATE, &wrq,
+ "Set Bit Rate");
+ continue;
+ }
+
+ /* ---------- Set RTS threshold ---------- */
+ if(!strncasecmp(args[i], "rts", 3))
+ {
+ i++;
+ if(i >= count)
+ ABORT_ARG_NUM("Set RTS Threshold", SIOCSIWRTS);
+ wrq.u.rts.value = -1;
+ wrq.u.rts.fixed = 1;
+ wrq.u.rts.disabled = 0;
+ if(!strcasecmp(args[i], "off"))
+ wrq.u.rts.disabled = 1; /* i.e. max size */
+ else
+ if(!strcasecmp(args[i], "auto"))
+ wrq.u.rts.fixed = 0;
+ else
+ {
+ if(!strcasecmp(args[i], "fixed"))
+ {
+ /* Get old RTS threshold */
+ IW_GET_EXT_ERR(skfd, ifname, SIOCGIWRTS, &wrq,
+ "Set RTS Threshold");
+ wrq.u.rts.fixed = 1;
+ }
+ else /* Should be a numeric value */
+ if(sscanf(args[i], "%ld", (unsigned long *) &(wrq.u.rts.value))
+ != 1)
+ ABORT_ARG_TYPE("Set RTS Threshold", SIOCSIWRTS, args[i]);
+ }
+
+ IW_SET_EXT_ERR(skfd, ifname, SIOCSIWRTS, &wrq,
+ "Set RTS Threshold");
+ continue;
+ }
+
+ /* ---------- Set fragmentation threshold ---------- */
+ if(!strncmp(args[i], "frag", 4))
+ {
+ i++;
+ if(i >= count)
+ ABORT_ARG_NUM("Set Fragmentation Threshold", SIOCSIWFRAG);
+ wrq.u.frag.value = -1;
+ wrq.u.frag.fixed = 1;
+ wrq.u.frag.disabled = 0;
+ if(!strcasecmp(args[i], "off"))
+ wrq.u.frag.disabled = 1; /* i.e. max size */
+ else
+ if(!strcasecmp(args[i], "auto"))
+ wrq.u.frag.fixed = 0;
+ else
+ {
+ if(!strcasecmp(args[i], "fixed"))
+ {
+ /* Get old fragmentation threshold */
+ IW_GET_EXT_ERR(skfd, ifname, SIOCGIWFRAG, &wrq,
+ "Set Fragmentation Threshold");
+ wrq.u.frag.fixed = 1;
+ }
+ else /* Should be a numeric value */
+ if(sscanf(args[i], "%ld",
+ (unsigned long *) &(wrq.u.frag.value))
+ != 1)
+ ABORT_ARG_TYPE("Set Fragmentation Threshold", SIOCSIWFRAG,
+ args[i]);
+ }
+
+ IW_SET_EXT_ERR(skfd, ifname, SIOCSIWFRAG, &wrq,
+ "Set Fragmentation Threshold");
+ continue;
+ }
+
+ /* ---------- Set operation mode ---------- */
+ if(!strcmp(args[i], "mode"))
+ {
+ int k;
+
+ i++;
+ if(i >= count)
+ ABORT_ARG_NUM("Set Mode", SIOCSIWMODE);
+
+ if(sscanf(args[i], "%d", &k) != 1)
+ {
+ k = 0;
+ while((k < IW_NUM_OPER_MODE) &&
+ strncasecmp(args[i], iw_operation_mode[k], 3))
+ k++;
+ }
+ if((k >= IW_NUM_OPER_MODE) || (k < 0))
+ ABORT_ARG_TYPE("Set Mode", SIOCSIWMODE, args[i]);
+
+ wrq.u.mode = k;
+ IW_SET_EXT_ERR(skfd, ifname, SIOCSIWMODE, &wrq,
+ "Set Mode");
+ continue;
+ }
+
+ /* ---------- Set Power Management ---------- */
+ if(!strncmp(args[i], "power", 3))
+ {
+ if(++i >= count)
+ ABORT_ARG_NUM("Set Power Management", SIOCSIWPOWER);
+
+ if(!strcasecmp(args[i], "off"))
+ wrq.u.power.disabled = 1; /* i.e. max size */
+ else
+ if(!strcasecmp(args[i], "on"))
+ {
+ /* Get old Power info */
+ IW_GET_EXT_ERR(skfd, ifname, SIOCGIWPOWER, &wrq,
+ "Set Power Management");
+ wrq.u.power.disabled = 0;
+ }
+ else
+ {
+ double temp;
+ int gotone = 0;
+ /* Default - nope */
+ wrq.u.power.flags = IW_POWER_ON;
+ wrq.u.power.disabled = 0;
+
+ /* Check value modifier */
+ if(!strcasecmp(args[i], "min"))
+ {
+ wrq.u.power.flags |= IW_POWER_MIN;
+ if(++i >= count)
+ ABORT_ARG_NUM("Set Power Management", SIOCSIWPOWER);
+ }
+ else
+ if(!strcasecmp(args[i], "max"))
+ {
+ wrq.u.power.flags |= IW_POWER_MAX;
+ if(++i >= count)
+ ABORT_ARG_NUM("Set Power Management", SIOCSIWPOWER);
+ }
+
+ /* Check value type */
+ if(!strcasecmp(args[i], "period"))
+ {
+ wrq.u.power.flags |= IW_POWER_PERIOD;
+ if(++i >= count)
+ ABORT_ARG_NUM("Set Power Management", SIOCSIWPOWER);
+ }
+ else
+ if(!strcasecmp(args[i], "timeout"))
+ {
+ wrq.u.power.flags |= IW_POWER_TIMEOUT;
+ if(++i >= count)
+ ABORT_ARG_NUM("Set Power Management", SIOCSIWPOWER);
+ }
+
+ /* Is there any value to grab ? */
+ if(sscanf(args[i], "%lg", &(temp)) == 1)
+ {
+ temp *= MEGA; /* default = s */
+ if(index(args[i], 'u')) temp /= MEGA;
+ if(index(args[i], 'm')) temp /= KILO;
+ wrq.u.power.value = (long) temp;
+ if((wrq.u.power.flags & IW_POWER_TYPE) == 0)
+ wrq.u.power.flags |= IW_POWER_PERIOD;
+ ++i;
+ gotone = 1;
+ }
+
+ /* Now, check the mode */
+ if(i < count)
+ {
+ if(!strcasecmp(args[i], "all"))
+ wrq.u.power.flags |= IW_POWER_ALL_R;
+ if(!strncasecmp(args[i], "unicast", 4))
+ wrq.u.power.flags |= IW_POWER_UNICAST_R;
+ if(!strncasecmp(args[i], "multicast", 5))
+ wrq.u.power.flags |= IW_POWER_MULTICAST_R;
+ if(!strncasecmp(args[i], "force", 5))
+ wrq.u.power.flags |= IW_POWER_FORCE_S;
+ if(!strcasecmp(args[i], "repeat"))
+ wrq.u.power.flags |= IW_POWER_REPEATER;
+ if(wrq.u.power.flags & IW_POWER_MODE)
+ {
+ ++i;
+ gotone = 1;
+ }
+ }
+ if(!gotone)
+ ABORT_ARG_TYPE("Set Power Management", SIOCSIWPOWER,
+ args[i]);
+ --i;
+ }
+
+ IW_SET_EXT_ERR(skfd, ifname, SIOCSIWPOWER, &wrq,
+ "Set Power Management");
+ continue;
+ }
+
+#if WIRELESS_EXT > 9
+ /* ---------- Set Transmit-Power ---------- */
+ if(!strncmp(args[i], "txpower", 3))
+ {
+ struct iw_range range;
+
+ if(++i >= count)
+ ABORT_ARG_NUM("Set Tx Power", SIOCSIWTXPOW);
+
+ /* Extract range info */
+ if(iw_get_range_info(skfd, ifname, &range) < 0)
+ memset(&range, 0, sizeof(range));
+
+ /* Prepare the request */
+ wrq.u.txpower.value = -1;
+ wrq.u.txpower.fixed = 1;
+ wrq.u.txpower.disabled = 0;
+ wrq.u.data.flags = IW_TXPOW_DBM;
+ if(!strcasecmp(args[i], "off"))
+ wrq.u.txpower.disabled = 1; /* i.e. turn radio off */
+ else
+ if(!strcasecmp(args[i], "auto"))
+ wrq.u.txpower.fixed = 0; /* i.e. use power control */
+ else
+ {
+ if(!strcasecmp(args[i], "fixed"))
+ {
+ /* Get old tx-power */
+ IW_GET_EXT_ERR(skfd, ifname, SIOCGIWTXPOW, &wrq,
+ "Set Tx Power");
+ wrq.u.txpower.fixed = 1;
+ }
+ else /* Should be a numeric value */
+ {
+ int power;
+ int ismwatt = 0;
+
+ /* Get the value */
+ if(sscanf(args[i], "%ld",
+ (unsigned long *) &(power)) != 1)
+ ABORT_ARG_TYPE("Set Tx Power", SIOCSIWTXPOW, args[i]);
+
+ /* Check if milliwatt */
+ ismwatt = (index(args[i], 'm') != NULL);
+
+ /* Convert */
+ if(range.txpower_capa & IW_TXPOW_MWATT)
+ {
+ if(!ismwatt)
+ power = iw_dbm2mwatt(power);
+ wrq.u.data.flags = IW_TXPOW_MWATT;
+ }
+ else
+ {
+ if(ismwatt)
+ power = iw_mwatt2dbm(power);
+ wrq.u.data.flags = IW_TXPOW_DBM;
+ }
+ wrq.u.bitrate.value = power;
+
+ /* Check for an additional argument */
+ if(((i+1) < count) &&
+ (!strcasecmp(args[i+1], "auto")))
+ {
+ wrq.u.txpower.fixed = 0;
+ ++i;
+ }
+ if(((i+1) < count) &&
+ (!strcasecmp(args[i+1], "fixed")))
+ {
+ wrq.u.txpower.fixed = 1;
+ ++i;
+ }
+ }
+ }
+
+ IW_SET_EXT_ERR(skfd, ifname, SIOCSIWTXPOW, &wrq,
+ "Set Tx Power");
+ continue;
+ }
+#endif
+
+#if WIRELESS_EXT > 10
+ /* ---------- Set Retry limit ---------- */
+ if(!strncmp(args[i], "retry", 3))
+ {
+ double temp;
+ int gotone = 0;
+
+ if(++i >= count)
+ ABORT_ARG_NUM("Set Retry Limit", SIOCSIWRETRY);
+
+ /* Default - nope */
+ wrq.u.retry.flags = IW_RETRY_LIMIT;
+ wrq.u.retry.disabled = 0;
+
+ /* Check value modifier */
+ if(!strcasecmp(args[i], "min"))
+ {
+ wrq.u.retry.flags |= IW_RETRY_MIN;
+ if(++i >= count)
+ ABORT_ARG_NUM("Set Retry Limit", SIOCSIWRETRY);
+ }
+ else
+ if(!strcasecmp(args[i], "max"))
+ {
+ wrq.u.retry.flags |= IW_RETRY_MAX;
+ if(++i >= count)
+ ABORT_ARG_NUM("Set Retry Limit", SIOCSIWRETRY);
+ }
+
+ /* Check value type */
+ if(!strcasecmp(args[i], "limit"))
+ {
+ wrq.u.retry.flags |= IW_RETRY_LIMIT;
+ if(++i >= count)
+ ABORT_ARG_NUM("Set Retry Limit", SIOCSIWRETRY);
+ }
+ else
+ if(!strncasecmp(args[i], "lifetime", 4))
+ {
+ wrq.u.retry.flags |= IW_RETRY_LIFETIME;
+ if(++i >= count)
+ ABORT_ARG_NUM("Set Retry Limit", SIOCSIWRETRY);
+ }
+
+ /* Is there any value to grab ? */
+ if(sscanf(args[i], "%lg", &(temp)) == 1)
+ {
+ /* Limit is absolute, on the other hand lifetime is seconds */
+ if(!(wrq.u.retry.flags & IW_RETRY_LIMIT))
+ {
+ /* Normalise lifetime */
+ temp *= MEGA; /* default = s */
+ if(index(args[i], 'u')) temp /= MEGA;
+ if(index(args[i], 'm')) temp /= KILO;
+ }
+ wrq.u.retry.value = (long) temp;
+ ++i;
+ gotone = 1;
+ }
+
+ if(!gotone)
+ ABORT_ARG_TYPE("Set Retry Limit", SIOCSIWRETRY, args[i]);
+ --i;
+
+ IW_SET_EXT_ERR(skfd, ifname, SIOCSIWRETRY, &wrq,
+ "Set Retry Limit");
+ continue;
+ }
+
+#endif /* WIRELESS_EXT > 10 */
+
+ /* ---------- Other ---------- */
+ /* Here we have an unrecognised arg... */
+ fprintf(stderr, "Error : unrecognised wireless request \"%s\"\n",
+ args[i]);
+ return(-1);
+ } /* for(index ... */
+ return(0);
+}
+
+/******************************* MAIN ********************************/
+
+/*------------------------------------------------------------------*/
+/*
+ * The main !
+ */
+int
+main(int argc,
+ char ** argv)
+{
+ int skfd; /* generic raw socket desc. */
+ int goterr = 0;
+
+ /* Create a channel to the NET kernel. */
+ if((skfd = iw_sockets_open()) < 0)
+ {
+ perror("socket");
+ exit(-1);
+ }
+
+ /* No argument : show the list of all device + info */
+ if(argc == 1)
+ iw_enum_devices(skfd, &print_info, NULL, 0);
+ else
+ /* Special case for help... */
+ if((!strcmp(argv[1], "-h")) || (!strcmp(argv[1], "--help")))
+ iw_usage();
+ else
+ /* Special case for version... */
+ if (!strcmp(argv[1], "-v") || !strcmp(argv[1], "--version"))
+ goterr = iw_print_version_info("iwconfig");
+ else
+ /* The device name must be the first argument */
+ if(argc == 2)
+ print_info(skfd, argv[1], NULL, 0);
+ else
+ /* The other args on the line specify options to be set... */
+ goterr = set_info(skfd, argv + 2, argc - 2, argv[1]);
+
+ /* Close the socket. */
+ close(skfd);
+
+ return(goterr);
+}
diff --git a/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwevent.8 b/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwevent.8
new file mode 100644
index 0000000..719e131
--- /dev/null
+++ b/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwevent.8
@@ -0,0 +1,103 @@
+.\" Jean Tourrilhes - HPL - 2002
+.\" iwevent.8
+.\"
+.TH IWEVENT 8 "25 January 2002" "net-tools" "Linux Programmer's Manual"
+.\"
+.\" NAME part
+.\"
+.SH NAME
+iwevent \- Display Wireless Events generated by drivers and setting changes
+.\"
+.\" SYNOPSIS part
+.\"
+.SH SYNOPSIS
+.BI "iwevent "
+.br
+.\"
+.\" DESCRIPTION part
+.\"
+.SH DESCRIPTION
+.B iwevent
+display Wireless Events received through the RTNetlink socket. Each
+line display the specific Wireless Event which describe what has
+happened on the specified wireless interface.
+.br
+This command doesn't take any arguments.
+.\"
+.\" DISPLAY part
+.\"
+.SH DISPLAY
+There is two classes of Wireless Events.
+.PP
+The first class is events related to a change of wireless settings on
+the interface (typically done through
+.B iwconfig
+or a script calling
+.BR iwconfig ).
+Only settings that could result in a disruption of connectivity are
+reported. The events currently reported are changing one of the
+following setting :
+.br
+.I " Network ID"
+.br
+.I " ESSID"
+.br
+.I " Frequency"
+.br
+.I " Mode"
+.br
+.I " Encryption"
+.br
+All those events will be generated on all wireless interfaces by the
+kernel wireless subsystem (but only if the driver has been converted
+to the new driver API).
+.PP
+The second class of events are events generated by the hardware, when
+something happens or a task has been finished. Those events include :
+.TP
+.B New Access Point/Cell address
+The interface has joined a new Access Point or Ad-Hoc Cell, or lost
+its association with it. This is the same MAC address that is reported
+by
+.BR iwconfig .
+.TP
+.B Scan request completed
+A scanning request has been completed, results of the scan are
+available (see
+.BR iwlist ).
+.TP
+.B Tx packet dropped
+A packet directed at this address has been dropped because the
+interface believes this node doesn't answer anymore. An early
+indication that the node may have left the cell or gone out of range.
+.TP
+.B Custom driver event
+Event specific to the driver. Please check the driver documentation.
+.TP
+.B Registered node
+The interface has successfully registered a new wireless
+client/peer. Will be generated mostly when the interface act as an
+Access Point (mode master).
+.TP
+.B Expired node
+The registration of the client/peer on this interface has
+expired. Will be generated mostly when the interface act as an Access
+Point (mode master).
+.PP
+Only some of those events will be generated on some wireless
+interfaces by the wireless driver, and their support depend on the
+specific hardware/driver combination. Please refer to driver
+documentation for details.
+.\"
+.\" AUTHOR part
+.\"
+.SH AUTHOR
+Jean Tourrilhes \- jt@hpl.hp.com
+.\"
+.\" SEE ALSO part
+.\"
+.SH SEE ALSO
+.BR iwconfig (8),
+.BR ifconfig (8),
+.BR iwspy (8),
+.BR iwpriv (8).
diff --git a/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwevent.c b/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwevent.c
new file mode 100644
index 0000000..efe96f5
--- /dev/null
+++ b/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwevent.c
@@ -0,0 +1,571 @@
+/*
+ * Wireless Tools
+ *
+ * Jean II - HPL 99->01
+ *
+ * Main code for "iwevent". This listent for wireless events on rtnetlink.
+ * You need to link this code against "iwcommon.c" and "-lm".
+ *
+ * Part of this code is from Alexey Kuznetsov, part is from Casey Carter,
+ * I've just put the pieces together...
+ * By the way, if you know a way to remove the root restrictions, tell me
+ * about it...
+ *
+ * This file is released under the GPL license.
+ * Copyright (c) 1997-2002 Jean Tourrilhes <jt@hpl.hp.com>
+ */
+
+/***************************** INCLUDES *****************************/
+
+#include "iwlib.h" /* Header */
+
+#include <linux/netlink.h>
+#include <linux/rtnetlink.h>
+
+#include <getopt.h>
+#include <time.h>
+#include <sys/time.h>
+//#define MSG_DONTWAIT 0x40
+/************************ RTNETLINK HELPERS ************************/
+/*
+ * The following code is extracted from :
+ * ----------------------------------------------
+ * libnetlink.c RTnetlink service routines.
+ *
+ * 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.
+ *
+ * Authors: Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
+ * -----------------------------------------------
+ */
+
+struct rtnl_handle
+{
+ int fd;
+ struct sockaddr_nl local;
+ struct sockaddr_nl peer;
+ __u32 seq;
+ __u32 dump;
+};
+
+static inline void rtnl_close(struct rtnl_handle *rth)
+{
+ close(rth->fd);
+}
+
+static inline int rtnl_open(struct rtnl_handle *rth, unsigned subscriptions)
+{
+ socklen_t addr_len;
+
+ memset(rth, 0, sizeof(rth));
+
+ rth->fd = socket(PF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
+ if (rth->fd < 0) {
+ perror("Cannot open netlink socket");
+ return -1;
+ }
+
+ memset(&rth->local, 0, sizeof(rth->local));
+ rth->local.nl_family = AF_NETLINK;
+ rth->local.nl_groups = subscriptions;
+
+ if (bind(rth->fd, (struct sockaddr*)&rth->local, sizeof(rth->local)) < 0) {
+ perror("Cannot bind netlink socket");
+ return -1;
+ }
+ addr_len = sizeof(rth->local);
+ if (getsockname(rth->fd, (struct sockaddr*)&rth->local, &addr_len) < 0) {
+ perror("Cannot getsockname");
+ return -1;
+ }
+ if (addr_len != sizeof(rth->local)) {
+ fprintf(stderr, "Wrong address length %d\n", addr_len);
+ return -1;
+ }
+ if (rth->local.nl_family != AF_NETLINK) {
+ fprintf(stderr, "Wrong address family %d\n", rth->local.nl_family);
+ return -1;
+ }
+ rth->seq = time(NULL);
+ return 0;
+}
+
+/********************* WIRELESS EVENT DECODING *********************/
+/*
+ * This is the bit I wrote...
+ */
+
+#if WIRELESS_EXT > 13
+/*------------------------------------------------------------------*/
+/*
+ * Print one element from the scanning results
+ */
+static inline int
+print_event_token(struct iw_event * event, /* Extracted token */
+ struct iw_range * iwrange, /* Range info */
+ int has_range)
+{
+ char buffer[128]; /* Temporary buffer */
+
+ /* Now, let's decode the event */
+ switch(event->cmd)
+ {
+ /* ----- set events ----- */
+ /* Events that result from a "SET XXX" operation by the user */
+ case SIOCSIWNWID:
+ if(event->u.nwid.disabled)
+ printf("NWID:off/any\n");
+ else
+ printf("NWID:%X\n", event->u.nwid.value);
+ break;
+ case SIOCSIWFREQ:
+ {
+ float freq; /* Frequency/channel */
+ freq = iw_freq2float(&(event->u.freq));
+ iw_print_freq(buffer, freq);
+ printf("%s\n", buffer);
+ }
+ break;
+ case SIOCSIWMODE:
+ printf("Mode:%s\n",
+ iw_operation_mode[event->u.mode]);
+ break;
+ case SIOCSIWESSID:
+ {
+ char essid[IW_ESSID_MAX_SIZE+1];
+ if((event->u.essid.pointer) && (event->u.essid.length))
+ memcpy(essid, event->u.essid.pointer, event->u.essid.length);
+ essid[event->u.essid.length] = '\0';
+ if(event->u.essid.flags)
+ {
+ /* Does it have an ESSID index ? */
+ if((event->u.essid.flags & IW_ENCODE_INDEX) > 1)
+ printf("ESSID:\"%s\" [%d]\n", essid,
+ (event->u.essid.flags & IW_ENCODE_INDEX));
+ else
+ printf("ESSID:\"%s\"\n", essid);
+ }
+ else
+ printf("ESSID:off/any\n");
+ }
+ break;
+ case SIOCSIWENCODE:
+ {
+ unsigned char key[IW_ENCODING_TOKEN_MAX];
+ if(event->u.data.pointer)
+ memcpy(key, event->u.essid.pointer, event->u.data.length);
+ else
+ event->u.data.flags |= IW_ENCODE_NOKEY;
+ printf("Encryption key:");
+ if(event->u.data.flags & IW_ENCODE_DISABLED)
+ printf("off\n");
+ else
+ {
+ /* Display the key */
+ iw_print_key(buffer, key, event->u.data.length,
+ event->u.data.flags);
+ printf("%s", buffer);
+
+ /* Other info... */
+ if((event->u.data.flags & IW_ENCODE_INDEX) > 1)
+ printf(" [%d]", event->u.data.flags & IW_ENCODE_INDEX);
+ if(event->u.data.flags & IW_ENCODE_RESTRICTED)
+ printf(" Encryption mode:restricted");
+ if(event->u.data.flags & IW_ENCODE_OPEN)
+ printf(" Encryption mode:open");
+ printf("\n");
+ }
+ }
+ break;
+ /* ----- driver events ----- */
+ /* Events generated by the driver when something important happens */
+ case SIOCGIWAP:
+ printf("New Access Point/Cell address:%s\n",
+ iw_pr_ether(buffer, (unsigned char *)event->u.ap_addr.sa_data));
+ break;
+ case SIOCGIWSCAN:
+ printf("Scan request completed\n");
+ break;
+ case IWEVTXDROP:
+ printf("Tx packet dropped:%s\n",
+ iw_pr_ether(buffer, (unsigned char *)event->u.addr.sa_data));
+ break;
+#if WIRELESS_EXT > 14
+ case IWEVCUSTOM:
+ {
+ char custom[IW_CUSTOM_MAX+1];
+ if((event->u.data.pointer) && (event->u.data.length))
+ memcpy(custom, event->u.data.pointer, event->u.data.length);
+ custom[event->u.data.length] = '\0';
+ printf("Custom driver event:%s\n", custom);
+ }
+ break;
+ case IWEVREGISTERED:
+ printf("Registered node:%s\n",
+ iw_pr_ether(buffer, (unsigned char *)event->u.addr.sa_data));
+ break;
+ case IWEVEXPIRED:
+ printf("Expired node:%s\n",
+ iw_pr_ether(buffer, (unsigned char *)event->u.addr.sa_data));
+ break;
+#endif /* WIRELESS_EXT > 14 */
+ /* ----- junk ----- */
+ /* other junk not currently in use */
+ case SIOCGIWRATE:
+ iw_print_bitrate(buffer, event->u.bitrate.value);
+ printf("Bit Rate:%s\n", buffer);
+ break;
+ case IWEVQUAL:
+ {
+ event->u.qual.updated = 0x0; /* Not that reliable, disable */
+ iw_print_stats(buffer, &event->u.qual, iwrange, has_range);
+ printf("Link %s\n", buffer);
+ break;
+ }
+ default:
+ printf("(Unknown Wireless event 0x%04X)\n", event->cmd);
+ } /* switch(event->cmd) */
+
+ return(0);
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Print out all Wireless Events part of the RTNetlink message
+ * Most often, there will be only one event per message, but
+ * just make sure we read everything...
+ */
+static inline int
+print_event_stream(char * ifname,
+ char * data,
+ int len)
+{
+ struct iw_event iwe;
+ struct stream_descr stream;
+ int i = 0;
+ int ret;
+ char buffer[64];
+ struct timeval recv_time;
+#if 0
+ struct iw_range range;
+ int has_range;
+#endif
+
+#if 0
+ has_range = (iw_get_range_info(skfd, ifname, &range) < 0);
+#endif
+
+ /* In readable form */
+ gettimeofday(&recv_time, NULL);
+ iw_print_timeval(buffer, &recv_time);
+
+ iw_init_event_stream(&stream, data, len);
+ do
+ {
+ /* Extract an event and print it */
+ ret = iw_extract_event_stream(&stream, &iwe);
+ if(ret != 0)
+ {
+ if(i++ == 0)
+ printf("%s %-8.8s ", buffer, ifname);
+ else
+ printf(" ");
+ if(ret > 0)
+ print_event_token(&iwe, NULL, 0);
+ else
+ printf("(Invalid event)\n");
+ }
+ }
+ while(ret > 0);
+
+ return(0);
+}
+#endif /* WIRELESS_EXT > 13 */
+
+/*********************** RTNETLINK EVENT DUMP***********************/
+/*
+ * Dump the events we receive from rtnetlink
+ * This code is mostly from Casey
+ */
+
+/*------------------------------------------------------------------*/
+/*
+ * Respond to a single RTM_NEWLINK event from the rtnetlink socket.
+ */
+static inline int
+index2name(int index, char *name)
+{
+ int skfd = -1; /* generic raw socket desc. */
+ struct ifreq irq;
+ int ret = 0;
+
+ memset(name, 0, IFNAMSIZ + 1);
+
+ /* Create a channel to the NET kernel. */
+ if((skfd = iw_sockets_open()) < 0)
+ {
+ perror("socket");
+ exit(-1);
+ }
+
+ /* Get interface name */
+ irq.ifr_ifindex = index;
+ if(ioctl(skfd, SIOCGIFNAME, &irq) < 0)
+ ret = -1;
+ else
+ strncpy(name, irq.ifr_name, IFNAMSIZ);
+
+ close(skfd);
+ return(ret);
+}
+
+
+/*------------------------------------------------------------------*/
+/*
+ * Respond to a single RTM_NEWLINK event from the rtnetlink socket.
+ */
+static int
+LinkCatcher(struct nlmsghdr *nlh)
+{
+ struct ifinfomsg* ifi;
+ char ifname[IFNAMSIZ + 1];
+
+#if 0
+ fprintf(stderr, "nlmsg_type = %d.\n", nlh->nlmsg_type);
+#endif
+
+ if(nlh->nlmsg_type != RTM_NEWLINK)
+ return 0;
+
+ ifi = NLMSG_DATA(nlh);
+
+ /* Get a name... */
+ index2name(ifi->ifi_index, ifname);
+
+#if WIRELESS_EXT > 13
+ /* Code is ugly, but sort of works - Jean II */
+
+ /* Check for attributes */
+ if (nlh->nlmsg_len > NLMSG_ALIGN(sizeof(struct ifinfomsg))) {
+ int attrlen = nlh->nlmsg_len - NLMSG_ALIGN(sizeof(struct ifinfomsg));
+ struct rtattr *attr = (void*)ifi + NLMSG_ALIGN(sizeof(struct ifinfomsg));
+
+ while (RTA_OK(attr, attrlen)) {
+ /* Check if the Wireless kind */
+ if(attr->rta_type == IFLA_WIRELESS) {
+ /* Go to display it */
+ print_event_stream(ifname,
+ (void *)attr + RTA_ALIGN(sizeof(struct rtattr)),
+ attr->rta_len - RTA_ALIGN(sizeof(struct rtattr)));
+ }
+ attr = RTA_NEXT(attr, attrlen);
+ }
+ }
+#endif /* WIRELESS_EXT > 13 */
+
+ return 0;
+}
+
+/* ---------------------------------------------------------------- */
+/*
+ * We must watch the rtnelink socket for events.
+ * This routine handles those events (i.e., call this when rth.fd
+ * is ready to read).
+ */
+static inline void
+handle_netlink_events(struct rtnl_handle * rth)
+{
+ while(1)
+ {
+ struct sockaddr_nl sanl;
+ socklen_t sanllen;
+
+ struct nlmsghdr *h;
+ int amt;
+ char buf[8192];
+
+ amt = recvfrom(rth->fd, buf, sizeof(buf), MSG_DONTWAIT, (struct sockaddr*)&sanl, &sanllen);
+ if(amt < 0)
+ {
+ if(errno != EINTR && errno != EAGAIN)
+ {
+ fprintf(stderr, "%s: error reading netlink: %s.\n",
+ __PRETTY_FUNCTION__, strerror(errno));
+ }
+ return;
+ }
+
+ if(amt == 0)
+ {
+ fprintf(stderr, "%s: EOF on netlink??\n", __PRETTY_FUNCTION__);
+ return;
+ }
+
+ h = (struct nlmsghdr*)buf;
+ while(amt >= (int)sizeof(*h))
+ {
+ int len = h->nlmsg_len;
+ int l = len - sizeof(*h);
+
+ if(l < 0 || len > amt)
+ {
+ fprintf(stderr, "%s: malformed netlink message: len=%d\n", __PRETTY_FUNCTION__, len);
+ break;
+ }
+
+ switch(h->nlmsg_type)
+ {
+ case RTM_NEWLINK:
+ LinkCatcher(h);
+ break;
+ default:
+#if 0
+ fprintf(stderr, "%s: got nlmsg of type %#x.\n", __PRETTY_FUNCTION__, h->nlmsg_type);
+#endif
+ break;
+ }
+
+ len = NLMSG_ALIGN(len);
+ amt -= len;
+ h = (struct nlmsghdr*)((char*)h + len);
+ }
+
+ if(amt > 0)
+ fprintf(stderr, "%s: remnant of size %d on netlink\n", __PRETTY_FUNCTION__, amt);
+ }
+}
+
+/**************************** MAIN LOOP ****************************/
+
+/* ---------------------------------------------------------------- */
+/*
+ * Wait until we get an event
+ */
+static inline int
+wait_for_event(struct rtnl_handle * rth)
+{
+#if 0
+ struct timeval tv; /* Select timeout */
+#endif
+
+ /* Forever */
+ while(1)
+ {
+ fd_set rfds; /* File descriptors for select */
+ int last_fd; /* Last fd */
+ int ret;
+
+ /* Guess what ? We must re-generate rfds each time */
+ FD_ZERO(&rfds);
+ FD_SET(rth->fd, &rfds);
+ last_fd = rth->fd;
+
+ /* Wait until something happens */
+ ret = select(last_fd + 1, &rfds, NULL, NULL, NULL);
+
+ /* Check if there was an error */
+ if(ret < 0)
+ {
+ if(errno == EAGAIN || errno == EINTR)
+ continue;
+ fprintf(stderr, "Unhandled signal - exiting...\n");
+ break;
+ }
+
+ /* Check if there was a timeout */
+ if(ret == 0)
+ {
+ continue;
+ }
+
+ /* Check for interface discovery events. */
+ if(FD_ISSET(rth->fd, &rfds))
+ handle_netlink_events(rth);
+ }
+
+ return(0);
+}
+
+/******************************* MAIN *******************************/
+
+/* ---------------------------------------------------------------- */
+/*
+ * helper ;-)
+ */
+static void
+iw_usage(int status)
+{
+ fputs("Usage: iwevent [OPTIONS]\n"
+ " Monitors and displays Wireless Events.\n"
+ " Options are:\n"
+ " -h,--help Print this message.\n"
+ " -v,--version Show version of this program.\n",
+ status ? stderr : stdout);
+ exit(status);
+}
+/* Command line options */
+static const struct option long_opts[] = {
+ { "help", no_argument, NULL, 'h' },
+ { "version", no_argument, NULL, 'v' },
+ { NULL, 0, NULL, 0 }
+};
+
+/* ---------------------------------------------------------------- */
+/*
+ * main body of the program
+ */
+int
+main(int argc,
+ char * argv[])
+{
+ struct rtnl_handle rth;
+ int opt;
+
+ /* Check command line options */
+ while((opt = getopt_long(argc, argv, "hv", long_opts, NULL)) > 0)
+ {
+ switch(opt)
+ {
+ case 'h':
+ iw_usage(0);
+ break;
+
+ case 'v':
+ return(iw_print_version_info("iwevent"));
+ break;
+
+ default:
+ iw_usage(1);
+ break;
+ }
+ }
+ if(optind < argc)
+ {
+ fputs("Too many arguments.\n", stderr);
+ iw_usage(1);
+ }
+
+ /* Open netlink channel */
+ if(rtnl_open(&rth, RTMGRP_LINK) < 0)
+ {
+ perror("Can't initialize rtnetlink socket");
+ return(1);
+ }
+
+#if WIRELESS_EXT > 13
+ fprintf(stderr, "Waiting for Wireless Events...\n");
+#else /* WIRELESS_EXT > 13 */
+ fprintf(stderr, "Unsupported in Wireless Extensions <= 14 :-(\n");
+ return(-1);
+#endif /* WIRELESS_EXT > 13 */
+
+ /* Do what we have to do */
+ wait_for_event(&rth);
+
+ /* Cleanup - only if you are pedantic */
+ rtnl_close(&rth);
+
+ return(0);
+}
diff --git a/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwgetid.8 b/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwgetid.8
new file mode 100644
index 0000000..30c8890
--- /dev/null
+++ b/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwgetid.8
@@ -0,0 +1,94 @@
+.\" Guus Sliepen - 2001
+.\" Completed and fixed up by Jean Tourrilhes - 2002
+.\" iwgetid.8
+.\"
+.TH IWGETID 8 "7 August 2001" "net-tools" "Linux Programmer's Manual"
+.\"
+.\" NAME part
+.\"
+.SH NAME
+iwgetid \- Report ESSID, NWID or AP/Cell Address of wireless network
+.\"
+.\" SYNOPSIS part
+.\"
+.SH SYNOPSIS
+.BI "iwgetid " [interface] " [--scheme] [--ap] [--freq] [--mode]"
+.br
+.BI " [--protocol]
+.br
+.\"
+.\" DESCRIPTION part
+.\"
+.SH DESCRIPTION
+.B iwgetid
+is used to find out the NWID, ESSID or AP/Cell Address of the wireless
+network that is currently used. The information reported is the same
+as the one shown by
+.BR iwconfig ", but " iwgetid
+is easier to integrate in various scripts.
+.br
+By default,
+.B iwgetid
+will print the
+.I ESSID
+of the device, and if the device doesn't have any ESSID it will print
+its
+.IR NWID .
+.\"
+.\" OPTIONS part
+.\"
+.SH OPTIONS
+.TP
+.B --scheme
+This option disables pretty-printing of the information, only the raw
+ESSID (or NWID, or AP Address) is printed. Also, characters that are
+not alphanumerics (like space, punctuation and control characters) are
+skipped.
+.br
+The resulting output is a valid Pcmcia scheme identifier (that may be
+used as an argument of the command
+.BR "cardctl scheme" ).
+This format is also ideal when using the result of iwgetid as a
+variable in
+.I Shell
+or
+.I Perl
+scripts.
+.TP
+.B --ap
+Display the MAC address of the Wireless
+.I Access Point
+or the
+.IR Cell .
+.TP
+.B --freq
+Display the current
+.I frequency
+or
+.I channel
+used by the interface.
+.TP
+.B --mode
+Display the current
+.I mode
+of the interface.
+.TP
+.B --protocol
+Display the
+.I protocol name
+of the interface. This allow to identify all the cards that are
+compatible with each other and accept the same type of
+configuration.
+.br
+This can also be used to
+.I check Wireless Extension support
+on the interface, as this is the only attribute that all drivers
+supporting Wireless Extension are mandated to support.
+.\"
+.\" SEE ALSO part
+.\"
+.SH SEE ALSO
+.BR iwconfig (8),
+.BR ifconfig (8),
+.BR iwspy (8),
+.BR iwpriv (8).
diff --git a/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwgetid.c b/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwgetid.c
new file mode 100644
index 0000000..1d74910
--- /dev/null
+++ b/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwgetid.c
@@ -0,0 +1,600 @@
+/*
+ * Wireless Tools
+ *
+ * Jean II - HPL '01
+ *
+ * Just print the ESSID or NWID...
+ *
+ * This file is released under the GPL license.
+ * Copyright (c) 1997-2002 Jean Tourrilhes <jt@hpl.hp.com>
+ */
+
+#include "iwlib.h" /* Header */
+
+#include <getopt.h>
+
+#define FORMAT_DEFAULT 0 /* Nice looking display for the user */
+#define FORMAT_SCHEME 1 /* To be used as a Pcmcia Scheme */
+#define WTYPE_ESSID 0 /* Display ESSID or NWID */
+#define WTYPE_AP 1 /* Display AP/Cell Address */
+#define WTYPE_FREQ 2 /* Display frequency/channel */
+#define WTYPE_MODE 3 /* Display mode */
+#define WTYPE_PROTO 4 /* Display protocol name */
+
+/*
+ * Note on Pcmcia Schemes :
+ * ----------------------
+ * The purpose of this tool is to use the ESSID discovery mechanism
+ * to select the appropriate Pcmcia Scheme. The card tell us which
+ * ESSID it has found, and we can then select the appropriate Pcmcia
+ * Scheme for this ESSID (Wireless config (encrypt keys) and IP config).
+ * The way to do it is as follows :
+ * cardctl scheme "essidany"
+ * delay 100
+ * $scheme = iwgetid --scheme
+ * cardctl scheme $scheme
+ * Of course, you need to add a scheme called "essidany" with the
+ * following setting :
+ * essidany,*,*,*)
+ * ESSID="any"
+ * IPADDR="10.0.0.1"
+ *
+ * This can also be integrated int he Pcmcia scripts.
+ * Some drivers don't activate the card up to "ifconfig up".
+ * Therefore, they wont scan ESSID up to this point, so we can't
+ * read it reliably in Pcmcia scripts.
+ * I guess the proper way to write the network script is as follows :
+ * if($scheme == "iwgetid") {
+ * iwconfig $name essid any
+ * iwconfig $name nwid any
+ * ifconfig $name up
+ * delay 100
+ * $scheme = iwgetid $name --scheme
+ * ifconfig $name down
+ * }
+ *
+ * This is pseudo code, but you get an idea...
+ * The "ifconfig up" activate the card.
+ * The "delay" is necessary to let time for the card scan the
+ * frequencies and associate with the AP.
+ * The "ifconfig down" is necessary to allow the driver to optimise
+ * the wireless parameters setting (minimise number of card resets).
+ *
+ * Another cute idea is to have a list of Pcmcia Schemes to try
+ * and to keep the first one that associate (AP address != 0). This
+ * would be necessary for closed networks and cards that can't
+ * discover essid...
+ *
+ * Jean II - 29/3/01
+ */
+
+/*************************** SUBROUTINES ***************************/
+/*
+ * Just for the heck of it, let's try to not link with iwlib.
+ * This will keep the binary small and tiny...
+ *
+ * Note : maybe it's time to admit that we have lost the battle
+ * and we start using iwlib ? Maybe we should default to dynamic
+ * lib first...
+ */
+
+/*------------------------------------------------------------------*/
+/*
+ * Open a socket.
+ * Depending on the protocol present, open the right socket. The socket
+ * will allow us to talk to the driver.
+ */
+int
+iw_sockets_open(void)
+{
+ int ipx_sock = -1; /* IPX socket */
+ int ax25_sock = -1; /* AX.25 socket */
+ int inet_sock = -1; /* INET socket */
+ int ddp_sock = -1; /* Appletalk DDP socket */
+
+ /*
+ * Now pick any (exisiting) useful socket family for generic queries
+ * Note : don't open all the socket, only returns when one matches,
+ * all protocols might not be valid.
+ * Workaround by Jim Kaba <jkaba@sarnoff.com>
+ * Note : in 99% of the case, we will just open the inet_sock.
+ * The remaining 1% case are not fully correct...
+ */
+ inet_sock=socket(AF_INET, SOCK_DGRAM, 0);
+ if(inet_sock!=-1)
+ return inet_sock;
+ ipx_sock=socket(AF_IPX, SOCK_DGRAM, 0);
+ if(ipx_sock!=-1)
+ return ipx_sock;
+ ax25_sock=socket(AF_AX25, SOCK_DGRAM, 0);
+ if(ax25_sock!=-1)
+ return ax25_sock;
+ ddp_sock=socket(AF_APPLETALK, SOCK_DGRAM, 0);
+ /*
+ * If this is -1 we have no known network layers and its time to jump.
+ */
+ return ddp_sock;
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Display an Ethernet address in readable format.
+ */
+void
+iw_ether_ntop(const struct ether_addr* eth, char* buf)
+{
+ sprintf(buf, "%02X:%02X:%02X:%02X:%02X:%02X",
+ eth->ether_addr_octet[0], eth->ether_addr_octet[1],
+ eth->ether_addr_octet[2], eth->ether_addr_octet[3],
+ eth->ether_addr_octet[4], eth->ether_addr_octet[5]);
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Convert our internal representation of frequencies to a floating point.
+ */
+double
+iw_freq2float(iwfreq * in)
+{
+#ifdef WE_NOLIBM
+ /* Version without libm : slower */
+ int i;
+ double res = (double) in->m;
+ for(i = 0; i < in->e; i++)
+ res *= 10;
+ return(res);
+#else /* WE_NOLIBM */
+ /* Version with libm : faster */
+ return ((double) in->m) * pow(10,in->e);
+#endif /* WE_NOLIBM */
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Output a frequency with proper scaling
+ */
+void
+iw_print_freq(char * buffer,
+ double freq)
+{
+ if(freq < KILO)
+ sprintf(buffer, "Channel:%g", freq);
+ else
+ {
+ if(freq >= GIGA)
+ sprintf(buffer, "Frequency:%gGHz", freq / GIGA);
+ else
+ {
+ if(freq >= MEGA)
+ sprintf(buffer, "Frequency:%gMHz", freq / MEGA);
+ else
+ sprintf(buffer, "Frequency:%gkHz", freq / KILO);
+ }
+ }
+}
+
+/*------------------------------------------------------------------*/
+const char * const iw_operation_mode[] = { "Auto",
+ "Ad-Hoc",
+ "Managed",
+ "Master",
+ "Repeater",
+ "Secondary",
+ "Monitor" };
+
+/************************ DISPLAY ESSID/NWID ************************/
+
+/*------------------------------------------------------------------*/
+/*
+ * Display the ESSID if possible
+ */
+static int
+print_essid(int skfd,
+ const char * ifname,
+ int format)
+{
+ struct iwreq wrq;
+ char essid[IW_ESSID_MAX_SIZE + 1]; /* ESSID */
+ char pessid[IW_ESSID_MAX_SIZE + 1]; /* Pcmcia format */
+ unsigned int i;
+ unsigned int j;
+
+ /* Get ESSID */
+ strncpy(wrq.ifr_name, ifname, IFNAMSIZ);
+ wrq.u.essid.pointer = (caddr_t) essid;
+ wrq.u.essid.length = IW_ESSID_MAX_SIZE + 1;
+ wrq.u.essid.flags = 0;
+ if(ioctl(skfd, SIOCGIWESSID, &wrq) < 0)
+ return(-1);
+
+ switch(format)
+ {
+ case FORMAT_SCHEME:
+ /* Strip all white space and stuff */
+ j = 0;
+ for(i = 0; i < strlen(essid); i++)
+ if(isalnum(essid[i]))
+ pessid[j++] = essid[i];
+ pessid[j] = '\0';
+ if((j == 0) || (j > 32))
+ return(-2);
+ printf("%s\n", pessid);
+ break;
+ default:
+ printf("%-8.8s ESSID:\"%s\"\n", ifname, essid);
+ break;
+ }
+
+ return(0);
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Display the NWID if possible
+ */
+static int
+print_nwid(int skfd,
+ const char * ifname,
+ int format)
+{
+ struct iwreq wrq;
+
+ /* Get network ID */
+ strncpy(wrq.ifr_name, ifname, IFNAMSIZ);
+ if(ioctl(skfd, SIOCGIWNWID, &wrq) < 0)
+ return(-1);
+
+ switch(format)
+ {
+ case FORMAT_SCHEME:
+ /* Prefix with nwid to avoid name space collisions */
+ printf("nwid%X\n", wrq.u.nwid.value);
+ break;
+ default:
+ printf("%-8.8s NWID:%X\n", ifname, wrq.u.nwid.value);
+ break;
+ }
+
+ return(0);
+}
+
+/**************************** AP ADDRESS ****************************/
+
+/*------------------------------------------------------------------*/
+/*
+ * Display the AP Address if possible
+ */
+static int
+print_ap(int skfd,
+ const char * ifname,
+ int format)
+{
+ struct iwreq wrq;
+ char buffer[64];
+
+ /* Get AP Address */
+ strncpy(wrq.ifr_name, ifname, IFNAMSIZ);
+ if(ioctl(skfd, SIOCGIWAP, &wrq) < 0)
+ return(-1);
+
+ /* Print */
+ iw_ether_ntop((const struct ether_addr *) wrq.u.ap_addr.sa_data, buffer);
+ switch(format)
+ {
+ case FORMAT_SCHEME:
+ /* I think ':' are not problematic, because Pcmcia scripts
+ * seem to handle them properly... */
+ printf("%s\n", buffer);
+ break;
+ default:
+ printf("%-8.8s Access Point/Cell: %s\n", ifname, buffer);
+ break;
+ }
+
+ return(0);
+}
+
+/****************************** OTHER ******************************/
+
+/*------------------------------------------------------------------*/
+/*
+ * Display the frequency (or channel) if possible
+ */
+static int
+print_freq(int skfd,
+ const char * ifname,
+ int format)
+{
+ struct iwreq wrq;
+ double freq;
+ char buffer[64];
+
+ /* Get frequency / channel */
+ strncpy(wrq.ifr_name, ifname, IFNAMSIZ);
+ if(ioctl(skfd, SIOCGIWFREQ, &wrq) < 0)
+ return(-1);
+
+ /* Print */
+ freq = iw_freq2float(&(wrq.u.freq));
+ switch(format)
+ {
+ case FORMAT_SCHEME:
+ printf("%g\n", freq);
+ break;
+ default:
+ iw_print_freq(buffer, freq);
+ printf("%-8.8s %s\n", ifname, buffer);
+ break;
+ }
+
+ return(0);
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Display the mode if possible
+ */
+static int
+print_mode(int skfd,
+ const char * ifname,
+ int format)
+{
+ struct iwreq wrq;
+
+ /* Get frequency / channel */
+ strncpy(wrq.ifr_name, ifname, IFNAMSIZ);
+ if(ioctl(skfd, SIOCGIWMODE, &wrq) < 0)
+ return(-1);
+ if(wrq.u.mode >= IW_NUM_OPER_MODE)
+ return(-2);
+
+ /* Print */
+ switch(format)
+ {
+ case FORMAT_SCHEME:
+ printf("%d\n", wrq.u.mode);
+ break;
+ default:
+ printf("%-8.8s Mode:%s\n", ifname, iw_operation_mode[wrq.u.mode]);
+ break;
+ }
+
+ return(0);
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Display the ESSID if possible
+ */
+static int
+print_protocol(int skfd,
+ const char * ifname,
+ int format)
+{
+ struct iwreq wrq;
+ char proto[IFNAMSIZ + 1]; /* Protocol */
+ char pproto[IFNAMSIZ + 1]; /* Pcmcia format */
+ unsigned int i;
+ unsigned int j;
+
+ /* Get Protocol name */
+ strncpy(wrq.ifr_name, ifname, IFNAMSIZ);
+ if(ioctl(skfd, SIOCGIWNAME, &wrq) < 0)
+ return(-1);
+ strncpy(proto, wrq.u.name, IFNAMSIZ);
+ proto[IFNAMSIZ] = '\0';
+
+ switch(format)
+ {
+ case FORMAT_SCHEME:
+ /* Strip all white space and stuff */
+ j = 0;
+ for(i = 0; i < strlen(proto); i++)
+ if(isalnum(proto[i]))
+ pproto[j++] = proto[i];
+ pproto[j] = '\0';
+ if((j == 0) || (j > 32))
+ return(-2);
+ printf("%s\n", pproto);
+ break;
+ default:
+ printf("%-8.8s Protocol Name:\"%s\"\n", ifname, proto);
+ break;
+ }
+
+ return(0);
+}
+
+/******************************* MAIN ********************************/
+
+/*------------------------------------------------------------------*/
+/*
+ * Check options and call the proper handler
+ */
+static int
+print_one_device(int skfd,
+ int format,
+ int wtype,
+ const char* ifname)
+{
+ int ret;
+
+ /* Check wtype */
+ switch(wtype)
+ {
+ case WTYPE_AP:
+ /* Try to print an AP */
+ ret = print_ap(skfd, ifname, format);
+ break;
+
+ case WTYPE_FREQ:
+ /* Try to print frequency */
+ ret = print_freq(skfd, ifname, format);
+ break;
+
+ case WTYPE_MODE:
+ /* Try to print the mode */
+ ret = print_mode(skfd, ifname, format);
+ break;
+
+ case WTYPE_PROTO:
+ /* Try to print the protocol */
+ ret = print_protocol(skfd, ifname, format);
+ break;
+
+ default:
+ /* Try to print an ESSID */
+ ret = print_essid(skfd, ifname, format);
+ if(ret < 0)
+ {
+ /* Try to print a nwid */
+ ret = print_nwid(skfd, ifname, format);
+ }
+ }
+
+ return(ret);
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Try the various devices until one return something we can use
+ */
+static int
+scan_devices(int skfd,
+ int format,
+ int wtype)
+{
+ char buff[1024];
+ struct ifconf ifc;
+ struct ifreq *ifr;
+ int i;
+
+ /* Get list of active devices */
+ ifc.ifc_len = sizeof(buff);
+ ifc.ifc_buf = buff;
+ if(ioctl(skfd, SIOCGIFCONF, &ifc) < 0)
+ {
+ perror("SIOCGIFCONF");
+ return(-1);
+ }
+ ifr = ifc.ifc_req;
+
+ /* Print the first match */
+ for(i = ifc.ifc_len / sizeof(struct ifreq); --i >= 0; ifr++)
+ {
+ if(print_one_device(skfd, format, wtype, ifr->ifr_name) >= 0)
+ return 0;
+ }
+ return(-1);
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * helper
+ */
+static void
+iw_usage(int status)
+{
+ fputs("Usage iwgetid [OPTIONS] [ifname]\n"
+ " Options are:\n"
+ " -a,--ap Print the access point address\n"
+ " -f,--freq Print the current frequency\n"
+ " -m,--mode Print the current mode\n"
+ " -p,--protocol Print the protocol name\n"
+ " -s,--scheme Format the output as a PCMCIA scheme identifier\n"
+ " -h,--help Print this message\n",
+ status ? stderr : stdout);
+ exit(status);
+}
+
+static const struct option long_opts[] = {
+ { "ap", no_argument, NULL, 'a' },
+ { "freq", no_argument, NULL, 'f' },
+ { "mode", no_argument, NULL, 'm' },
+ { "protocol", no_argument, NULL, 'p' },
+ { "help", no_argument, NULL, 'h' },
+ { "scheme", no_argument, NULL, 's' },
+ { NULL, 0, NULL, 0 }
+};
+
+/*------------------------------------------------------------------*/
+/*
+ * The main !
+ */
+int
+main(int argc,
+ char ** argv)
+{
+ int skfd; /* generic raw socket desc. */
+ int format = FORMAT_DEFAULT;
+ int wtype = WTYPE_ESSID;
+ int opt;
+ int ret = -1;
+
+ /* Check command line arguments */
+ while((opt = getopt_long(argc, argv, "afhmps", long_opts, NULL)) > 0)
+ {
+ switch(opt)
+ {
+ case 'a':
+ /* User wants AP/Cell Address */
+ wtype = WTYPE_AP;
+ break;
+
+ case 'f':
+ /* User wants frequency/channel */
+ wtype = WTYPE_FREQ;
+ break;
+
+ case 'm':
+ /* User wants the mode */
+ wtype = WTYPE_MODE;
+ break;
+
+ case 'p':
+ /* User wants the protocol */
+ wtype = WTYPE_PROTO;
+ break;
+
+ case 'h':
+ iw_usage(0);
+ break;
+
+ case 's':
+ /* User wants a Scheme format */
+ format = FORMAT_SCHEME;
+ break;
+
+ default:
+ iw_usage(1);
+ break;
+ }
+ }
+ if(optind + 1 < argc) {
+ fputs("Too many arguments.\n", stderr);
+ iw_usage(1);
+ }
+
+ /* Create a channel to the NET kernel. */
+ if((skfd = iw_sockets_open()) < 0)
+ {
+ perror("socket");
+ return(-1);
+ }
+
+ /* Check if first argument is a device name */
+ if(optind < argc)
+ {
+ /* Yes : query only this device */
+ ret = print_one_device(skfd, format, wtype, argv[optind]);
+ }
+ else
+ {
+ /* No : query all devices and print first found */
+ ret = scan_devices(skfd, format, wtype);
+ }
+
+ fflush(stdout);
+ close(skfd);
+ return(ret);
+}
diff --git a/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwlib.c b/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwlib.c
new file mode 100644
index 0000000..b1bf7d3
--- /dev/null
+++ b/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwlib.c
@@ -0,0 +1,1720 @@
+/*
+ * Wireless Tools
+ *
+ * Jean II - HPLB 97->99 - HPL 99->01
+ *
+ * Common subroutines to all the wireless tools...
+ *
+ * This file is released under the GPL license.
+ * Copyright (c) 1997-2002 Jean Tourrilhes <jt@hpl.hp.com>
+ */
+
+/***************************** INCLUDES *****************************/
+
+#include "iwlib.h" /* Header */
+
+#ifdef __ANDROID__
+#include <sys/endian.h>
+#endif
+
+/************************ CONSTANTS & MACROS ************************/
+
+/* Various versions information */
+/* Recommended Wireless Extension version */
+#define WE_VERSION 15
+/* Version of Wireless Tools */
+#define WT_VERSION 25
+
+/*
+ * Verify a few things about Wireless Extensions.
+ * I try to maximise backward and forward compatibility, but things are
+ * tricky because I'm fixing bugs and adding new features.
+ * Wireless Tools *must* be compiled with the same version of WE
+ * as the driver. Sometime, the size or layout of some structure changes,
+ * and might produce interesting results.
+ * Wireless Tools will usually compile properly against different
+ * versions of WE, thanks to the zillions of #ifdefs in my code.
+ * Jean II
+ */
+#if WIRELESS_EXT < 9
+#error "Wireless Extension v9 or newer required :-("
+#error "Use Wireless Tools v19 or update your kernel headers !"
+#endif
+#if WIRELESS_EXT < WE_VERSION && !defined(WEXT_HEADER)
+#warning "Wireless Extension earlier than v15 detected,"
+#warning "Not all tools features will be compiled in !"
+#warning "No worry, I'll try to make the best of it ;-)"
+#endif
+#if WIRELESS_EXT > WE_VERSION && !defined(WEXT_HEADER)
+#warning "Wireless Extension later than v15 detected,"
+#warning "Maybe you should get a more recent version"
+#warning "of the Wireless Tools package !"
+#endif
+
+/**************************** VARIABLES ****************************/
+
+const char * const iw_operation_mode[] = { "Auto",
+ "Ad-Hoc",
+ "Managed",
+ "Master",
+ "Repeater",
+ "Secondary",
+ "Monitor" };
+
+/* Disable runtime version warning in iw_get_range_info() */
+int iw_ignore_version = 0;
+
+/************************ SOCKET SUBROUTINES *************************/
+
+/*------------------------------------------------------------------*/
+/*
+ * Open a socket.
+ * Depending on the protocol present, open the right socket. The socket
+ * will allow us to talk to the driver.
+ */
+int
+iw_sockets_open(void)
+{
+ static const int families[] = {
+ AF_INET, AF_IPX, AF_AX25, AF_APPLETALK
+ };
+ unsigned int i;
+ int sock;
+
+ /*
+ * Now pick any (exisiting) useful socket family for generic queries
+ * Note : don't open all the socket, only returns when one matches,
+ * all protocols might not be valid.
+ * Workaround by Jim Kaba <jkaba@sarnoff.com>
+ * Note : in 99% of the case, we will just open the inet_sock.
+ * The remaining 1% case are not fully correct...
+ */
+
+ /* Try all families we support */
+ for(i = 0; i < sizeof(families)/sizeof(int); ++i)
+ {
+ /* Try to open the socket, if success returns it */
+ sock = socket(families[i], SOCK_DGRAM, 0);
+ if(sock >= 0)
+ return sock;
+ }
+
+ return -1;
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Extract the interface name out of /proc/net/wireless or /proc/net/dev.
+ */
+static inline char *
+iw_get_ifname(char * name, /* Where to store the name */
+ int nsize, /* Size of name buffer */
+ char * buf) /* Current position in buffer */
+{
+ char * end;
+
+ /* Skip leading spaces */
+ while(isspace(*buf))
+ buf++;
+
+#ifndef IW_RESTRIC_ENUM
+ /* Get name up to the last ':'. Aliases may contain ':' in them,
+ * but the last one should be the separator */
+ end = strrchr(buf, ':');
+#else
+ /* Get name up to ": "
+ * Note : we compare to ": " to make sure to process aliased interfaces
+ * properly. Doesn't work on /proc/net/dev, because it doesn't guarantee
+ * a ' ' after the ':'*/
+ end = strstr(buf, ": ");
+#endif
+
+ /* Not found ??? To big ??? */
+ if((end == NULL) || (((end - buf) + 1) > nsize))
+ return(NULL);
+
+ /* Copy */
+ memcpy(name, buf, (end - buf));
+ name[end - buf] = '\0';
+
+ return(end + 2);
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Enumerate devices and call specified routine
+ * The new way just use /proc/net/wireless, so get all wireless interfaces,
+ * whether configured or not. This is the default if available.
+ * The old way use SIOCGIFCONF, so get only configured interfaces (wireless
+ * or not).
+ */
+void
+iw_enum_devices(int skfd,
+ iw_enum_handler fn,
+ char * args[],
+ int count)
+{
+ char buff[1024];
+ FILE * fh;
+ struct ifconf ifc;
+ struct ifreq *ifr;
+ int i;
+
+#ifndef IW_RESTRIC_ENUM
+ /* Check if /proc/net/wireless is available */
+ fh = fopen(PROC_NET_DEV, "r");
+#else
+ /* Check if /proc/net/wireless is available */
+ fh = fopen(PROC_NET_WIRELESS, "r");
+#endif
+
+ if(fh != NULL)
+ {
+ /* Success : use data from /proc/net/wireless */
+
+ /* Eat 2 lines of header */
+ fgets(buff, sizeof(buff), fh);
+ fgets(buff, sizeof(buff), fh);
+
+ /* Read each device line */
+ while(fgets(buff, sizeof(buff), fh))
+ {
+ char name[IFNAMSIZ + 1];
+ char *s;
+
+ /* Extract interface name */
+ s = iw_get_ifname(name, sizeof(name), buff);
+
+ if(!s)
+ /* Failed to parse, complain and continue */
+ fprintf(stderr, "Cannot parse " PROC_NET_WIRELESS "\n");
+ else
+ /* Got it, print info about this interface */
+ (*fn)(skfd, name, args, count);
+ }
+
+ fclose(fh);
+ }
+ else
+ {
+ /* Get list of configured devices using "traditional" way */
+ ifc.ifc_len = sizeof(buff);
+ ifc.ifc_buf = buff;
+ if(ioctl(skfd, SIOCGIFCONF, &ifc) < 0)
+ {
+ fprintf(stderr, "SIOCGIFCONF: %s\n", strerror(errno));
+ return;
+ }
+ ifr = ifc.ifc_req;
+
+ /* Print them */
+ for(i = ifc.ifc_len / sizeof(struct ifreq); --i >= 0; ifr++)
+ (*fn)(skfd, ifr->ifr_name, args, count);
+ }
+}
+
+/*********************** WIRELESS SUBROUTINES ************************/
+
+/*------------------------------------------------------------------*/
+/*
+ * Get the range information out of the driver
+ */
+int
+iw_get_range_info(int skfd,
+ char * ifname,
+ iwrange * range)
+{
+ struct iwreq wrq;
+ char buffer[sizeof(iwrange) * 2]; /* Large enough */
+
+ /* Cleanup */
+ memset(buffer, 0, sizeof(buffer));
+
+ wrq.u.data.pointer = (caddr_t) buffer;
+ wrq.u.data.length = sizeof(buffer);
+ wrq.u.data.flags = 0;
+ if(iw_get_ext(skfd, ifname, SIOCGIWRANGE, &wrq) < 0)
+ return(-1);
+
+ /* Copy stuff at the right place, ignore extra */
+ memcpy((char *) range, buffer, sizeof(iwrange));
+
+ /* Lots of people have driver and tools out of sync as far as Wireless
+ * Extensions are concerned. It's because /usr/include/linux/wireless.h
+ * and /usr/src/linux/include/linux/wireless.h are different.
+ * We try to catch this stuff here... */
+ if(!iw_ignore_version)
+ {
+ /* For new versions, we can check the version directly, for old versions
+ * we use magic. 300 bytes is a also magic number, don't touch... */
+ if((WIRELESS_EXT > 10) && (wrq.u.data.length >= 300))
+ {
+#if WIRELESS_EXT > 10
+ /* Version verification - for new versions */
+ if(range->we_version_compiled != WIRELESS_EXT)
+ {
+ fprintf(stderr, "Warning: Driver for device %s has been compiled with version %d\n", ifname, range->we_version_compiled);
+ fprintf(stderr, "of Wireless Extension, while this program is using version %d.\n", WIRELESS_EXT);
+ fprintf(stderr, "Some things may be broken...\n\n");
+ }
+ /* Driver version verification */
+ if(range->we_version_compiled < range->we_version_source)
+ {
+ fprintf(stderr, "Warning: Driver for device %s recommend version %d of Wireless Extension,\n", ifname, range->we_version_source);
+ fprintf(stderr, "but has been compiled with version %d, therefore some driver features\n", range->we_version_compiled);
+ fprintf(stderr, "may not be available...\n\n");
+ }
+#endif /* WIRELESS_EXT > 10 */
+ }
+ else
+ {
+ /* Version verification - for old versions */
+ if(wrq.u.data.length != sizeof(iwrange))
+ {
+ fprintf(stderr, "Warning: Driver for device %s has been compiled with an ancient version\n", ifname);
+ fprintf(stderr, "of Wireless Extension, while this program is using version %d.\n", WIRELESS_EXT);
+ fprintf(stderr, "Some things may be broken...\n\n");
+ }
+ }
+ }
+ /* Don't complain twice.
+ * In theory, the test apply to each individual driver, but usually
+ * all drivers are compiled from the same kernel, and most often
+ * problem is the system/glibc headers. */
+ iw_ignore_version = 1;
+
+ /* Note : we are only trying to catch compile difference, not source.
+ * If the driver source has not been updated to the latest, it doesn't
+ * matter because the new fields are set to zero */
+
+ return(0);
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Print the WE versions of the interface.
+ */
+static int
+print_iface_version_info(int skfd,
+ char * ifname,
+ char * args[], /* Command line args */
+ int count) /* Args count */
+{
+ struct iwreq wrq;
+ char buffer[sizeof(iwrange) * 2]; /* Large enough */
+ struct iw_range * range;
+
+ /* Avoid "Unused parameter" warning */
+ args = args; count = count;
+
+ /* Cleanup */
+ memset(buffer, 0, sizeof(buffer));
+
+ wrq.u.data.pointer = (caddr_t) buffer;
+ wrq.u.data.length = sizeof(buffer);
+ wrq.u.data.flags = 0;
+ if(iw_get_ext(skfd, ifname, SIOCGIWRANGE, &wrq) < 0)
+ return(-1);
+
+ /* Copy stuff at the right place, ignore extra */
+ range = (struct iw_range *) buffer;
+
+ /* For new versions, we can check the version directly, for old versions
+ * we use magic. 300 bytes is a also magic number, don't touch... */
+ if((WIRELESS_EXT > 10) && (wrq.u.data.length >= 300))
+ {
+#if WIRELESS_EXT > 10
+ printf("%-8.8s Recommend Wireless Extension v%d or later,\n",
+ ifname, range->we_version_source);
+ printf(" Currently compiled with Wireless Extension v%d.\n\n",
+ range->we_version_compiled);
+#endif /* WIRELESS_EXT > 10 */
+ }
+ else
+ {
+#if 0
+ fprintf(stderr, "%-8.8s no Wireless Extension version information.\n\n",
+ ifname);
+#endif
+ }
+
+
+ return(0);
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Print the WE versions of the tools.
+ */
+int
+iw_print_version_info(char * toolname)
+{
+ int skfd; /* generic raw socket desc. */
+
+ /* Create a channel to the NET kernel. */
+ if((skfd = iw_sockets_open()) < 0)
+ {
+ perror("socket");
+ return -1;
+ }
+
+ /* Information about the tools themselves */
+ if(toolname != NULL)
+ printf("%-8.8s Version %d\n", toolname, WT_VERSION);
+ printf(" Compatible with Wireless Extension v%d or earlier,\n",
+ WE_VERSION);
+ printf(" Currently compiled with Wireless Extension v%d.\n\n",
+ WIRELESS_EXT);
+
+ /* Version for each device */
+ iw_enum_devices(skfd, &print_iface_version_info, NULL, 0);
+
+ close(skfd);
+
+ return 0;
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Get information about what private ioctls are supported by the driver
+ */
+int
+iw_get_priv_info(int skfd,
+ char * ifname,
+ iwprivargs * priv,
+ int maxpriv)
+{
+ struct iwreq wrq;
+
+ /* Ask the driver */
+ wrq.u.data.pointer = (caddr_t) priv;
+ wrq.u.data.length = maxpriv;
+ wrq.u.data.flags = 0;
+
+ //printf("iw_get_priv_info pointer=%08x length=%d\n",wrq.u.data.pointer,wrq.u.data.length);
+
+ if(iw_get_ext(skfd, ifname, SIOCGIWPRIV, &wrq) < 0)
+ return(-1);
+
+ //printf("iw_get_priv_info wrq.u.data.length=%d\n",wrq.u.data.length);
+
+ /* Return the number of ioctls */
+ return(wrq.u.data.length);
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Get essential wireless config from the device driver
+ * We will call all the classical wireless ioctl on the driver through
+ * the socket to know what is supported and to get the settings...
+ * Note : compare to the version in iwconfig, we extract only
+ * what's *really* needed to configure a device...
+ */
+int
+iw_get_basic_config(int skfd,
+ char * ifname,
+ wireless_config * info)
+{
+ struct iwreq wrq;
+
+ memset((char *) info, 0, sizeof(struct wireless_config));
+
+ /* Get wireless name */
+ if(iw_get_ext(skfd, ifname, SIOCGIWNAME, &wrq) < 0)
+ /* If no wireless name : no wireless extensions */
+ return(-1);
+ else
+ {
+ strncpy(info->name, wrq.u.name, IFNAMSIZ);
+ info->name[IFNAMSIZ] = '\0';
+ }
+
+ /* Get network ID */
+ if(iw_get_ext(skfd, ifname, SIOCGIWNWID, &wrq) >= 0)
+ {
+ info->has_nwid = 1;
+ memcpy(&(info->nwid), &(wrq.u.nwid), sizeof(iwparam));
+ }
+
+ /* Get frequency / channel */
+ if(iw_get_ext(skfd, ifname, SIOCGIWFREQ, &wrq) >= 0)
+ {
+ info->has_freq = 1;
+ info->freq = iw_freq2float(&(wrq.u.freq));
+ }
+
+ /* Get encryption information */
+ wrq.u.data.pointer = (caddr_t) info->key;
+ wrq.u.data.length = IW_ENCODING_TOKEN_MAX;
+ wrq.u.data.flags = 0;
+ if(iw_get_ext(skfd, ifname, SIOCGIWENCODE, &wrq) >= 0)
+ {
+ info->has_key = 1;
+ info->key_size = wrq.u.data.length;
+ info->key_flags = wrq.u.data.flags;
+ }
+
+ /* Get ESSID */
+ wrq.u.essid.pointer = (caddr_t) info->essid;
+ wrq.u.essid.length = IW_ESSID_MAX_SIZE + 1;
+ wrq.u.essid.flags = 0;
+ if(iw_get_ext(skfd, ifname, SIOCGIWESSID, &wrq) >= 0)
+ {
+ info->has_essid = 1;
+ info->essid_on = wrq.u.data.flags;
+ }
+
+ /* Get operation mode */
+ if(iw_get_ext(skfd, ifname, SIOCGIWMODE, &wrq) >= 0)
+ {
+ info->mode = wrq.u.mode;
+ if((info->mode < 6) && (info->mode >= 0))
+ info->has_mode = 1;
+ }
+
+ return(0);
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Set essential wireless config in the device driver
+ * We will call all the classical wireless ioctl on the driver through
+ * the socket to know what is supported and to set the settings...
+ * We support only the restricted set as above...
+ */
+int
+iw_set_basic_config(int skfd,
+ char * ifname,
+ wireless_config * info)
+{
+ struct iwreq wrq;
+ int ret = 0;
+
+ /* Get wireless name (check if interface is valid) */
+ if(iw_get_ext(skfd, ifname, SIOCGIWNAME, &wrq) < 0)
+ /* If no wireless name : no wireless extensions */
+ return(-2);
+
+ /* Set Network ID, if available (this is for non-802.11 cards) */
+ if(info->has_nwid)
+ {
+ memcpy(&(wrq.u.nwid), &(info->nwid), sizeof(iwparam));
+ wrq.u.nwid.fixed = 1; /* Hum... When in Rome... */
+
+ if(iw_set_ext(skfd, ifname, SIOCSIWNWID, &wrq) < 0)
+ {
+ fprintf(stderr, "SIOCSIWNWID: %s\n", strerror(errno));
+ ret = -1;
+ }
+ }
+
+ /* Set frequency / channel */
+ if(info->has_freq)
+ {
+ iw_float2freq(info->freq, &(wrq.u.freq));
+
+ if(iw_set_ext(skfd, ifname, SIOCSIWFREQ, &wrq) < 0)
+ {
+ fprintf(stderr, "SIOCSIWFREQ: %s\n", strerror(errno));
+ ret = -1;
+ }
+ }
+
+ /* Set encryption information */
+ if(info->has_key)
+ {
+ int flags = info->key_flags;
+
+ /* Check if there is a key index */
+ if((flags & IW_ENCODE_INDEX) > 0)
+ {
+ /* Set the index */
+ wrq.u.data.pointer = (caddr_t) NULL;
+ wrq.u.data.flags = (flags & (IW_ENCODE_INDEX)) | IW_ENCODE_NOKEY;
+ wrq.u.data.length = 0;
+
+ if(iw_set_ext(skfd, ifname, SIOCSIWENCODE, &wrq) < 0)
+ {
+ fprintf(stderr, "SIOCSIWENCODE(%d): %s\n",
+ errno, strerror(errno));
+ ret = -1;
+ }
+ }
+
+ /* Mask out index to minimise probability of reject when setting key */
+ flags = flags & (~IW_ENCODE_INDEX);
+
+ /* Set the key itself (set current key in this case) */
+ wrq.u.data.pointer = (caddr_t) info->key;
+ wrq.u.data.length = info->key_size;
+ wrq.u.data.flags = flags;
+
+ if(iw_set_ext(skfd, ifname, SIOCSIWENCODE, &wrq) < 0)
+ {
+ fprintf(stderr, "SIOCSIWENCODE(%d): %s\n",
+ errno, strerror(errno));
+ ret = -1;
+ }
+ }
+
+ /* Set ESSID (extended network), if available */
+ if(info->has_essid)
+ {
+ wrq.u.essid.pointer = (caddr_t) info->essid;
+ wrq.u.essid.length = strlen(info->essid) + 1;
+ wrq.u.data.flags = info->essid_on;
+
+ if(iw_set_ext(skfd, ifname, SIOCSIWESSID, &wrq) < 0)
+ {
+ fprintf(stderr, "SIOCSIWESSID: %s\n", strerror(errno));
+ ret = -1;
+ }
+ }
+
+ /* Set the current mode of operation */
+ if(info->has_mode)
+ {
+ strncpy(wrq.ifr_name, ifname, IFNAMSIZ-1);
+ wrq.ifr_name[IFNAMSIZ-1] = '\0';
+ wrq.u.mode = info->mode;
+
+ if(iw_get_ext(skfd, ifname, SIOCSIWMODE, &wrq) < 0)
+ {
+ fprintf(stderr, "SIOCSIWMODE: %s\n", strerror(errno));
+ ret = -1;
+ }
+ }
+
+ return(ret);
+}
+
+/*********************** PROTOCOL SUBROUTINES ***********************/
+/*
+ * Fun stuff with protocol identifiers (SIOCGIWNAME).
+ * We assume that drivers are returning sensible values in there,
+ * which is not always the case :-(
+ */
+
+/*------------------------------------------------------------------*/
+/*
+ * Compare protocol identifiers.
+ * We don't want to know if the two protocols are the exactly same,
+ * but if they interoperate at some level, and also if they accept the
+ * same type of config (ESSID vs NWID, freq...).
+ * This is supposed to work around the alphabet soup.
+ * Return 1 if protocols are compatible
+ */
+int
+iw_protocol_compare(char * protocol1,
+ char * protocol2)
+{
+ char * dot11 = "IEEE 802.11";
+ char * dot11_ds = "Dbg";
+
+ /* If the strings are the same -> easy */
+ if(!strncmp(protocol1, protocol2, IFNAMSIZ))
+ return(1);
+
+ /* Are we dealing with one of the 802.11 variant ? */
+ if( (!strncmp(protocol1, dot11, strlen(dot11))) &&
+ (!strncmp(protocol2, dot11, strlen(dot11))) )
+ {
+ char * sub1 = protocol1 + strlen(dot11);
+ char * sub2 = protocol2 + strlen(dot11);
+
+ /* Skip optional separator */
+ if(*sub1 == '-')
+ sub1++;
+ if(*sub2 == '-')
+ sub2++;
+
+ /* Check if they are both 2.4 GHz Direct Sequence compatible */
+ if( (strchr(dot11_ds, *sub1) != NULL) &&
+ (strchr(dot11_ds, *sub2) != NULL) )
+ return(1);
+ }
+ /* Not compatible */
+ return(0);
+}
+
+/********************** FREQUENCY SUBROUTINES ***********************/
+/*
+ * Note : the two functions below are the cause of troubles on
+ * various embeeded platforms, as they are the reason we require
+ * libm (math library).
+ * In this case, please use enable BUILD_NOLIBM in the makefile
+ *
+ * FIXME : check negative mantissa and exponent
+ */
+
+/*------------------------------------------------------------------*/
+/*
+ * Convert a floating point the our internal representation of
+ * frequencies.
+ * The kernel doesn't want to hear about floating point, so we use
+ * this custom format instead.
+ */
+void
+iw_float2freq(double in,
+ iwfreq * out)
+{
+ /* Version without libm : slower */
+ out->e = 0;
+ while(in > 1e9)
+ {
+ in /= 10;
+ out->e++;
+ }
+ out->m = (long) in;
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Convert our internal representation of frequencies to a floating point.
+ */
+double
+iw_freq2float(iwfreq * in)
+{
+ /* Version without libm : slower */
+ int i;
+ double res = (double) in->m;
+ for(i = 0; i < in->e; i++)
+ res *= 10;
+ return(res);
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Output a frequency with proper scaling
+ */
+void
+iw_print_freq(char * buffer,
+ double freq)
+{
+ if(freq < KILO)
+ sprintf(buffer, "Channel:%g", freq);
+ else
+ {
+ if(freq >= GIGA)
+ sprintf(buffer, "Frequency:%gGHz", freq / GIGA);
+ else
+ {
+ if(freq >= MEGA)
+ sprintf(buffer, "Frequency:%gMHz", freq / MEGA);
+ else
+ sprintf(buffer, "Frequency:%gkHz", freq / KILO);
+ }
+ }
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Convert a frequency to a channel (negative -> error)
+ */
+int
+iw_freq_to_channel(double freq,
+ struct iw_range * range)
+{
+ double ref_freq;
+ int k;
+
+ /* Check if it's a frequency or not already a channel */
+ if(freq < KILO)
+ return(-1);
+
+ /* We compare the frequencies as double to ignore differences
+ * in encoding. Slower, but safer... */
+ for(k = 0; k < range->num_frequency; k++)
+ {
+ ref_freq = iw_freq2float(&(range->freq[k]));
+ if(freq == ref_freq)
+ return(range->freq[k].i);
+ }
+ /* Not found */
+ return(-2);
+}
+
+/*********************** BITRATE SUBROUTINES ***********************/
+
+/*------------------------------------------------------------------*/
+/*
+ * Output a bitrate with proper scaling
+ */
+void
+iw_print_bitrate(char * buffer,
+ int bitrate)
+{
+ double rate = bitrate;
+
+ if(rate >= GIGA)
+ sprintf(buffer, "%gGb/s", rate / GIGA);
+ else
+ if(rate >= MEGA)
+ sprintf(buffer, "%gMb/s", rate / MEGA);
+ else
+ sprintf(buffer, "%gkb/s", rate / KILO);
+}
+
+/************************ POWER SUBROUTINES *************************/
+
+/*------------------------------------------------------------------*/
+#ifndef __ANDROID__
+/*
+ * Convert a value in dBm to a value in milliWatt.
+ */
+int
+iw_dbm2mwatt(int in)
+{
+ //return((int) (floor(pow(10.0, (((double) in) / 10.0)))));
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Convert a value in milliWatt to a value in dBm.
+ */
+int
+iw_mwatt2dbm(int in)
+{
+// return((int) (ceil(10.0 * log10((double) in))));
+}
+#endif
+/********************** STATISTICS SUBROUTINES **********************/
+
+/*------------------------------------------------------------------*/
+/*
+ * Read /proc/net/wireless to get the latest statistics
+ */
+int
+iw_get_stats(int skfd,
+ char * ifname,
+ iwstats * stats)
+{
+#if WIRELESS_EXT > 11
+ struct iwreq wrq;
+ wrq.u.data.pointer = (caddr_t) stats;
+ wrq.u.data.length = 0;
+ wrq.u.data.flags = 1; /* Clear updated flag */
+ strncpy(wrq.ifr_name, ifname, IFNAMSIZ-1);
+ wrq.ifr_name[IFNAMSIZ-1] = '\0';
+ if(iw_get_ext(skfd, ifname, SIOCGIWSTATS, &wrq) < 0)
+ return(-1);
+
+ return(0);
+#else /* WIRELESS_EXT > 11 */
+ FILE * f = fopen(PROC_NET_WIRELESS, "r");
+ char buf[256];
+ char * bp;
+ int t;
+ if(f==NULL)
+ return -1;
+ /* Loop on all devices */
+ while(fgets(buf,255,f))
+ {
+ bp=buf;
+ while(*bp&&isspace(*bp))
+ bp++;
+ /* Is it the good device ? */
+ if(strncmp(bp,ifname,strlen(ifname))==0 && bp[strlen(ifname)]==':')
+ {
+ /* Skip ethX: */
+ bp=strchr(bp,':');
+ bp++;
+ /* -- status -- */
+ bp = strtok(bp, " ");
+ sscanf(bp, "%X", &t);
+ stats->status = (unsigned short) t;
+ /* -- link quality -- */
+ bp = strtok(NULL, " ");
+ if(strchr(bp,'.') != NULL)
+ stats->qual.updated |= 1;
+ sscanf(bp, "%d", &t);
+ stats->qual.qual = (unsigned char) t;
+ /* -- signal level -- */
+ bp = strtok(NULL, " ");
+ if(strchr(bp,'.') != NULL)
+ stats->qual.updated |= 2;
+ sscanf(bp, "%d", &t);
+ stats->qual.level = (unsigned char) t;
+ /* -- noise level -- */
+ bp = strtok(NULL, " ");
+ if(strchr(bp,'.') != NULL)
+ stats->qual.updated += 4;
+ sscanf(bp, "%d", &t);
+ stats->qual.noise = (unsigned char) t;
+ /* -- discarded packets -- */
+ bp = strtok(NULL, " ");
+ sscanf(bp, "%d", &stats->discard.nwid);
+ bp = strtok(NULL, " ");
+ sscanf(bp, "%d", &stats->discard.code);
+ bp = strtok(NULL, " ");
+ sscanf(bp, "%d", &stats->discard.misc);
+ fclose(f);
+ return 0;
+ }
+ }
+ fclose(f);
+ return -1;
+#endif /* WIRELESS_EXT > 11 */
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Output the link statistics, taking care of formating
+ */
+void
+iw_print_stats(char * buffer,
+ iwqual * qual,
+ iwrange * range,
+ int has_range)
+{
+ /* Just do it */
+ if(has_range && (qual->level != 0))
+ {
+ /* If the statistics are in dBm */
+ if(qual->level > range->max_qual.level)
+ {
+ /* Statistics are in dBm (absolute power measurement) */
+ sprintf(buffer,
+ "Quality:%d/%d Signal level:%d dBm Noise level:%d dBm%s",
+ qual->qual, range->max_qual.qual,
+ qual->level - 0x100, qual->noise - 0x100,
+ (qual->updated & 0x7) ? " (updated)" : "");
+ }
+ else
+ {
+ /* Statistics are relative values (0 -> max) */
+ sprintf(buffer,
+ "Quality:%d/%d Signal level:%d/%d Noise level:%d/%d%s",
+ qual->qual, range->max_qual.qual,
+ qual->level, range->max_qual.level,
+ qual->noise, range->max_qual.noise,
+ (qual->updated & 0x7) ? " (updated)" : "");
+ }
+ }
+ else
+ {
+ /* We can't read the range, so we don't know... */
+ sprintf(buffer, "Quality:%d Signal level:%d Noise level:%d%s",
+ qual->qual, qual->level, qual->noise,
+ (qual->updated & 0x7) ? " (updated)" : "");
+ }
+}
+
+/*********************** ENCODING SUBROUTINES ***********************/
+
+/*------------------------------------------------------------------*/
+/*
+ * Output the encoding key, with a nice formating
+ */
+void
+iw_print_key(char * buffer,
+ unsigned char * key,
+ int key_size,
+ int key_flags)
+{
+ int i;
+
+ /* Is the key present ??? */
+ if(key_flags & IW_ENCODE_NOKEY)
+ {
+ /* Nope : print on or dummy */
+ if(key_size <= 0)
+ strcpy(buffer, "on");
+ else
+ {
+ strcpy(buffer, "**");
+ buffer +=2;
+ for(i = 1; i < key_size; i++)
+ {
+ if((i & 0x1) == 0)
+ strcpy(buffer++, "-");
+ strcpy(buffer, "**");
+ buffer +=2;
+ }
+ }
+ }
+ else
+ {
+ /* Yes : print the key */
+ sprintf(buffer, "%.2X", key[0]);
+ buffer +=2;
+ for(i = 1; i < key_size; i++)
+ {
+ if((i & 0x1) == 0)
+ strcpy(buffer++, "-");
+ sprintf(buffer, "%.2X", key[i]);
+ buffer +=2;
+ }
+ }
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Convert a passphrase into a key
+ * ### NOT IMPLEMENTED ###
+ * Return size of the key, or 0 (no key) or -1 (error)
+ */
+int
+iw_pass_key(char * input,
+ unsigned char * key)
+{
+ input = input; key = key;
+ fprintf(stderr, "Error: Passphrase not implemented\n");
+ return(-1);
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Parse a key from the command line.
+ * Return size of the key, or 0 (no key) or -1 (error)
+ */
+int
+iw_in_key(char * input,
+ unsigned char * key)
+{
+ int keylen = 0;
+ char * buff;
+ char * p;
+ int temp;
+
+ /* Check the type of key */
+ if(!strncmp(input, "s:", 2))
+ {
+ /* First case : as an ASCII string (Lucent/Agere cards) */
+ keylen = strlen(input + 2); /* skip "s:" */
+ if(keylen > IW_ENCODING_TOKEN_MAX)
+ keylen = IW_ENCODING_TOKEN_MAX;
+ strncpy((char *)key, input + 2, keylen);
+ }
+ else
+ if(!strncmp(input, "p:", 2))
+ {
+ /* Second case : as a passphrase (PrismII cards) */
+ return(iw_pass_key(input + 2, key)); /* skip "p:" */
+ }
+ else
+ {
+ /* Third case : as hexadecimal digits */
+ buff = malloc(strlen(input) + 1);
+ if(buff == NULL)
+ {
+ fprintf(stderr, "Malloc failed (string too long ?)\n");
+ return(-1);
+ }
+ /* Preserve original buffer */
+ strcpy(buff, input);
+
+ /* Parse */
+ p = strtok(buff, "-:;.,");
+ while((p != (char *) NULL) && (keylen < IW_ENCODING_TOKEN_MAX))
+ {
+ if(sscanf(p, "%2X", &temp) != 1)
+ return(-1); /* Error */
+ key[keylen++] = (unsigned char) (temp & 0xFF);
+ if(strlen(p) > 2) /* Token not finished yet */
+ p += 2;
+ else
+ p = strtok((char *) NULL, "-:;.,");
+ }
+ free(buff);
+ }
+
+ return(keylen);
+}
+
+/******************* POWER MANAGEMENT SUBROUTINES *******************/
+
+/*------------------------------------------------------------------*/
+/*
+ * Output a power management value with all attributes...
+ */
+void
+iw_print_pm_value(char * buffer,
+ int value,
+ int flags)
+{
+ /* Modifiers */
+ if(flags & IW_POWER_MIN)
+ {
+ strcpy(buffer, " min");
+ buffer += 4;
+ }
+ if(flags & IW_POWER_MAX)
+ {
+ strcpy(buffer, " max");
+ buffer += 4;
+ }
+
+ /* Type */
+ if(flags & IW_POWER_TIMEOUT)
+ {
+ strcpy(buffer, " timeout:");
+ buffer += 9;
+ }
+ else
+ {
+ strcpy(buffer, " period:");
+ buffer += 8;
+ }
+
+ /* Display value without units */
+ if(flags & IW_POWER_RELATIVE)
+ sprintf(buffer, "%g", ((double) value) / MEGA);
+ else
+ {
+ /* Display value with units */
+ if(value >= (int) MEGA)
+ sprintf(buffer, "%gs", ((double) value) / MEGA);
+ else
+ if(value >= (int) KILO)
+ sprintf(buffer, "%gms", ((double) value) / KILO);
+ else
+ sprintf(buffer, "%dus", value);
+ }
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Output a power management mode
+ */
+void
+iw_print_pm_mode(char * buffer,
+ int flags)
+{
+ /* Print the proper mode... */
+ switch(flags & IW_POWER_MODE)
+ {
+ case IW_POWER_UNICAST_R:
+ strcpy(buffer, "mode:Unicast only received");
+ break;
+ case IW_POWER_MULTICAST_R:
+ strcpy(buffer, "mode:Multicast only received");
+ break;
+ case IW_POWER_ALL_R:
+ strcpy(buffer, "mode:All packets received");
+ break;
+ case IW_POWER_FORCE_S:
+ strcpy(buffer, "mode:Force sending");
+ break;
+ case IW_POWER_REPEATER:
+ strcpy(buffer, "mode:Repeat multicasts");
+ break;
+ default:
+ break;
+ }
+}
+
+/***************** RETRY LIMIT/LIFETIME SUBROUTINES *****************/
+
+#if WIRELESS_EXT > 10
+/*------------------------------------------------------------------*/
+/*
+ * Output a retry value with all attributes...
+ */
+void
+iw_print_retry_value(char * buffer,
+ int value,
+ int flags)
+{
+ /* Modifiers */
+ if(flags & IW_RETRY_MIN)
+ {
+ strcpy(buffer, " min");
+ buffer += 4;
+ }
+ if(flags & IW_RETRY_MAX)
+ {
+ strcpy(buffer, " max");
+ buffer += 4;
+ }
+
+ /* Type lifetime of limit */
+ if(flags & IW_RETRY_LIFETIME)
+ {
+ strcpy(buffer, " lifetime:");
+ buffer += 10;
+
+ /* Display value without units */
+ if(flags & IW_POWER_RELATIVE)
+ sprintf(buffer, "%g", ((double) value) / MEGA);
+ else
+ {
+ /* Display value with units */
+ if(value >= (int) MEGA)
+ sprintf(buffer, "%gs", ((double) value) / MEGA);
+ else
+ if(value >= (int) KILO)
+ sprintf(buffer, "%gms", ((double) value) / KILO);
+ else
+ sprintf(buffer, "%dus", value);
+ }
+ }
+ else
+ sprintf(buffer, " limit:%d", value);
+}
+#endif /* WIRELESS_EXT > 10 */
+
+/************************* TIME SUBROUTINES *************************/
+
+/*------------------------------------------------------------------*/
+/*
+ * Print timestamps
+ * Inspired from irdadump...
+ */
+void
+iw_print_timeval(char * buffer,
+ const struct timeval * time)
+{
+ int s;
+
+ s = (time->tv_sec) % 86400;
+ sprintf(buffer, "%02d:%02d:%02d.%06u ",
+ s / 3600, (s % 3600) / 60,
+ s % 60, (u_int32_t) time->tv_usec);
+}
+
+/*********************** ADDRESS SUBROUTINES ************************/
+/*
+ * This section is mostly a cut & past from net-tools-1.2.0
+ * manage address display and input...
+ */
+
+/*------------------------------------------------------------------*/
+/*
+ * Check if interface support the right MAC address type...
+ */
+int
+iw_check_mac_addr_type(int skfd,
+ char * ifname)
+{
+ struct ifreq ifr;
+
+ /* Get the type of hardware address */
+ strncpy(ifr.ifr_name, ifname, IFNAMSIZ-1);
+ ifr.ifr_name[IFNAMSIZ-1] = '\0';
+ if((ioctl(skfd, SIOCGIFHWADDR, &ifr) < 0) ||
+ (ifr.ifr_hwaddr.sa_family != ARPHRD_ETHER))
+ {
+ /* Deep trouble... */
+ fprintf(stderr, "Interface %s doesn't support MAC addresses\n",
+ ifname);
+ return(-1);
+ }
+
+#ifdef DEBUG
+ printf("Hardware : %d - %s\n", ifr.ifr_hwaddr.sa_family,
+ iw_ether_ntoa((struct ether_addr *) ifr.ifr_hwaddr.sa_data));
+#endif
+
+ return(0);
+}
+
+
+/*------------------------------------------------------------------*/
+/*
+ * Check if interface support the right interface address type...
+ */
+int
+iw_check_if_addr_type(int skfd,
+ char * ifname)
+{
+ struct ifreq ifr;
+
+ /* Get the type of interface address */
+ strncpy(ifr.ifr_name, ifname, IFNAMSIZ-1);
+ ifr.ifr_name[IFNAMSIZ-1] = '\0';
+ if((ioctl(skfd, SIOCGIFADDR, &ifr) < 0) ||
+ (ifr.ifr_addr.sa_family != AF_INET))
+ {
+ /* Deep trouble... */
+ fprintf(stderr, "Interface %s doesn't support IP addresses\n", ifname);
+ return(-1);
+ }
+
+#ifdef DEBUG
+ printf("Interface : %d - 0x%lX\n", ifr.ifr_addr.sa_family,
+ *((unsigned long *) ifr.ifr_addr.sa_data));
+#endif
+
+ return(0);
+}
+
+#if 0
+/*------------------------------------------------------------------*/
+/*
+ * Check if interface support the right address types...
+ */
+int
+iw_check_addr_type(int skfd,
+ char * ifname)
+{
+ /* Check the interface address type */
+ if(iw_check_if_addr_type(skfd, ifname) < 0)
+ return(-1);
+
+ /* Check the interface address type */
+ if(iw_check_mac_addr_type(skfd, ifname) < 0)
+ return(-1);
+
+ return(0);
+}
+#endif
+
+/*------------------------------------------------------------------*/
+/*
+ * Display an Ethernet address in readable format.
+ */
+void
+iw_ether_ntop(const struct ether_addr* eth, char* buf)
+{
+ sprintf(buf, "%02X:%02X:%02X:%02X:%02X:%02X",
+ eth->ether_addr_octet[0], eth->ether_addr_octet[1],
+ eth->ether_addr_octet[2], eth->ether_addr_octet[3],
+ eth->ether_addr_octet[4], eth->ether_addr_octet[5]);
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Display an Ethernet address in readable format.
+ * Same with a static buffer
+ */
+char *
+iw_ether_ntoa(const struct ether_addr* eth)
+{
+ static char buf[20];
+ iw_ether_ntop(eth, buf);
+ return buf;
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Input an Ethernet address and convert to binary.
+ */
+int
+iw_ether_aton(const char *orig, struct ether_addr *eth)
+{
+ const char *bufp;
+ int i;
+
+ i = 0;
+ for(bufp = orig; *bufp != '\0'; ++bufp) {
+ unsigned int val;
+ unsigned char c = *bufp++;
+ if (isdigit(c)) val = c - '0';
+ else if (c >= 'a' && c <= 'f') val = c - 'a' + 10;
+ else if (c >= 'A' && c <= 'F') val = c - 'A' + 10;
+ else break;
+
+ val <<= 4;
+ c = *bufp++;
+ if (isdigit(c)) val |= c - '0';
+ else if (c >= 'a' && c <= 'f') val |= c - 'a' + 10;
+ else if (c >= 'A' && c <= 'F') val |= c - 'A' + 10;
+ else break;
+
+ eth->ether_addr_octet[i] = (unsigned char) (val & 0377);
+ if(++i == ETH_ALEN) {
+ /* That's it. Any trailing junk? */
+ if (*bufp != '\0') {
+#ifdef DEBUG
+ fprintf(stderr, "iw_ether_aton(%s): trailing junk!\n", orig);
+ errno = EINVAL;
+ return(0);
+#endif
+ }
+#ifdef DEBUG
+ fprintf(stderr, "iw_ether_aton(%s): %s\n",
+ orig, ether_ntoa(eth));
+#endif
+ return(1);
+ }
+ if (*bufp != ':')
+ break;
+ }
+
+#ifdef DEBUG
+ fprintf(stderr, "iw_ether_aton(%s): invalid ether address!\n", orig);
+#endif
+ errno = EINVAL;
+ return(0);
+}
+
+
+/*------------------------------------------------------------------*/
+/*
+ * Input an Internet address and convert to binary.
+ */
+int
+iw_in_inet(char *name, struct sockaddr *sap)
+{
+ struct hostent *hp;
+ struct netent *np;
+ struct sockaddr_in *sin = (struct sockaddr_in *) sap;
+
+ /* Grmpf. -FvK */
+ sin->sin_family = AF_INET;
+ sin->sin_port = 0;
+
+ /* Default is special, meaning 0.0.0.0. */
+ if (!strcmp(name, "default")) {
+ sin->sin_addr.s_addr = INADDR_ANY;
+ return(1);
+ }
+
+ /* Try the NETWORKS database to see if this is a known network. */
+ if ((np = getnetbyname(name)) != (struct netent *)NULL) {
+ sin->sin_addr.s_addr = htonl(np->n_net);
+ strcpy(name, np->n_name);
+ return(1);
+ }
+
+ /* Always use the resolver (DNS name + IP addresses) */
+ if ((hp = gethostbyname(name)) == (struct hostent *)NULL) {
+ errno = h_errno;
+ return(-1);
+ }
+ memcpy((char *) &sin->sin_addr, (char *) hp->h_addr_list[0], hp->h_length);
+ strcpy(name, hp->h_name);
+ return(0);
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Input an address and convert to binary.
+ */
+int
+iw_in_addr(int skfd,
+ char * ifname,
+ char * bufp,
+ struct sockaddr *sap)
+{
+ /* Check if it is a hardware or IP address */
+ if(index(bufp, ':') == NULL)
+ {
+ struct sockaddr if_address;
+ struct arpreq arp_query;
+
+ /* Check if we have valid interface address type */
+ if(iw_check_if_addr_type(skfd, ifname) < 0)
+ {
+ fprintf(stderr, "%-8.8s Interface doesn't support IP addresses\n", ifname);
+ return(-1);
+ }
+
+ /* Read interface address */
+ if(iw_in_inet(bufp, &if_address) < 0)
+ {
+ fprintf(stderr, "Invalid interface address %s\n", bufp);
+ return(-1);
+ }
+
+ /* Translate IP addresses to MAC addresses */
+ memcpy((char *) &(arp_query.arp_pa),
+ (char *) &if_address,
+ sizeof(struct sockaddr));
+ arp_query.arp_ha.sa_family = 0;
+ arp_query.arp_flags = 0;
+ /* The following restrict the search to the interface only */
+ /* For old kernels which complain, just comment it... */
+ strncpy(arp_query.arp_dev, ifname, IFNAMSIZ-1);
+ arp_query.arp_dev[IFNAMSIZ-1] = '\0';
+ if((ioctl(skfd, SIOCGARP, &arp_query) < 0) ||
+ !(arp_query.arp_flags & ATF_COM))
+ {
+ fprintf(stderr, "Arp failed for %s on %s... (%d)\nTry to ping the address before setting it.\n",
+ bufp, ifname, errno);
+ return(-1);
+ }
+
+ /* Store new MAC address */
+ memcpy((char *) sap,
+ (char *) &(arp_query.arp_ha),
+ sizeof(struct sockaddr));
+
+#ifdef DEBUG
+ printf("IP Address %s => Hw Address = %s\n",
+ bufp, iw_ether_ntoa((struct ether_addr *) sap->sa_data));
+#endif
+ }
+ else /* If it's an hardware address */
+ {
+ /* Check if we have valid mac address type */
+ if(iw_check_mac_addr_type(skfd, ifname) < 0)
+ {
+ fprintf(stderr, "%-8.8s Interface doesn't support MAC addresses\n", ifname);
+ return(-1);
+ }
+
+ /* Get the hardware address */
+ if(iw_in_ether(bufp, sap) < 0)
+ {
+ fprintf(stderr, "Invalid hardware address %s\n", bufp);
+ return(-1);
+ }
+ }
+
+#ifdef DEBUG
+ printf("Hw Address = %s\n", iw_ether_ntoa((struct ether_addr *) sap->sa_data));
+#endif
+
+ return(0);
+}
+
+/************************* MISC SUBROUTINES **************************/
+
+/* Size (in bytes) of various events */
+static const int priv_type_size[] = {
+ 0, /* IW_PRIV_TYPE_NONE */
+ 1, /* IW_PRIV_TYPE_BYTE */
+ 1, /* IW_PRIV_TYPE_CHAR */
+ 0, /* Not defined */
+ sizeof(__u32), /* IW_PRIV_TYPE_INT */
+ sizeof(struct iw_freq), /* IW_PRIV_TYPE_FLOAT */
+ sizeof(struct sockaddr), /* IW_PRIV_TYPE_ADDR */
+ 0, /* Not defined */
+};
+
+/*------------------------------------------------------------------*/
+/*
+ * Max size in bytes of an private argument.
+ */
+int
+iw_get_priv_size(int args)
+{
+ int num = args & IW_PRIV_SIZE_MASK;
+ int type = (args & IW_PRIV_TYPE_MASK) >> 12;
+
+ return(num * priv_type_size[type]);
+}
+
+/************************ EVENT SUBROUTINES ************************/
+/*
+ * The Wireless Extension API 14 and greater define Wireless Events,
+ * that are used for various events and scanning.
+ * Those functions help the decoding of events, so are needed only in
+ * this case.
+ */
+#if WIRELESS_EXT > 13
+
+/* Type of headers we know about (basically union iwreq_data) */
+#define IW_HEADER_TYPE_NULL 0 /* Not available */
+#define IW_HEADER_TYPE_CHAR 2 /* char [IFNAMSIZ] */
+#define IW_HEADER_TYPE_UINT 4 /* __u32 */
+#define IW_HEADER_TYPE_FREQ 5 /* struct iw_freq */
+#define IW_HEADER_TYPE_ADDR 6 /* struct sockaddr */
+#define IW_HEADER_TYPE_POINT 8 /* struct iw_point */
+#define IW_HEADER_TYPE_PARAM 9 /* struct iw_param */
+#define IW_HEADER_TYPE_QUAL 10 /* struct iw_quality */
+
+/* Headers for the various requests */
+static const char standard_ioctl_hdr[] = {
+ IW_HEADER_TYPE_NULL, /* SIOCSIWCOMMIT */
+ IW_HEADER_TYPE_CHAR, /* SIOCGIWNAME */
+ IW_HEADER_TYPE_PARAM, /* SIOCSIWNWID */
+ IW_HEADER_TYPE_PARAM, /* SIOCGIWNWID */
+ IW_HEADER_TYPE_FREQ, /* SIOCSIWFREQ */
+ IW_HEADER_TYPE_FREQ, /* SIOCGIWFREQ */
+ IW_HEADER_TYPE_UINT, /* SIOCSIWMODE */
+ IW_HEADER_TYPE_UINT, /* SIOCGIWMODE */
+ IW_HEADER_TYPE_PARAM, /* SIOCSIWSENS */
+ IW_HEADER_TYPE_PARAM, /* SIOCGIWSENS */
+ IW_HEADER_TYPE_NULL, /* SIOCSIWRANGE */
+ IW_HEADER_TYPE_POINT, /* SIOCGIWRANGE */
+ IW_HEADER_TYPE_NULL, /* SIOCSIWPRIV */
+ IW_HEADER_TYPE_POINT, /* SIOCGIWPRIV */
+ IW_HEADER_TYPE_NULL, /* SIOCSIWSTATS */
+ IW_HEADER_TYPE_POINT, /* SIOCGIWSTATS */
+ IW_HEADER_TYPE_POINT, /* SIOCSIWSPY */
+ IW_HEADER_TYPE_POINT, /* SIOCGIWSPY */
+ IW_HEADER_TYPE_NULL, /* -- hole -- */
+ IW_HEADER_TYPE_NULL, /* -- hole -- */
+ IW_HEADER_TYPE_ADDR, /* SIOCSIWAP */
+ IW_HEADER_TYPE_ADDR, /* SIOCGIWAP */
+ IW_HEADER_TYPE_NULL, /* -- hole -- */
+ IW_HEADER_TYPE_POINT, /* SIOCGIWAPLIST */
+ IW_HEADER_TYPE_PARAM, /* SIOCSIWSCAN */
+ IW_HEADER_TYPE_POINT, /* SIOCGIWSCAN */
+ IW_HEADER_TYPE_POINT, /* SIOCSIWESSID */
+ IW_HEADER_TYPE_POINT, /* SIOCGIWESSID */
+ IW_HEADER_TYPE_POINT, /* SIOCSIWNICKN */
+ IW_HEADER_TYPE_POINT, /* SIOCGIWNICKN */
+ IW_HEADER_TYPE_NULL, /* -- hole -- */
+ IW_HEADER_TYPE_NULL, /* -- hole -- */
+ IW_HEADER_TYPE_PARAM, /* SIOCSIWRATE */
+ IW_HEADER_TYPE_PARAM, /* SIOCGIWRATE */
+ IW_HEADER_TYPE_PARAM, /* SIOCSIWRTS */
+ IW_HEADER_TYPE_PARAM, /* SIOCGIWRTS */
+ IW_HEADER_TYPE_PARAM, /* SIOCSIWFRAG */
+ IW_HEADER_TYPE_PARAM, /* SIOCGIWFRAG */
+ IW_HEADER_TYPE_PARAM, /* SIOCSIWTXPOW */
+ IW_HEADER_TYPE_PARAM, /* SIOCGIWTXPOW */
+ IW_HEADER_TYPE_PARAM, /* SIOCSIWRETRY */
+ IW_HEADER_TYPE_PARAM, /* SIOCGIWRETRY */
+ IW_HEADER_TYPE_POINT, /* SIOCSIWENCODE */
+ IW_HEADER_TYPE_POINT, /* SIOCGIWENCODE */
+ IW_HEADER_TYPE_PARAM, /* SIOCSIWPOWER */
+ IW_HEADER_TYPE_PARAM, /* SIOCGIWPOWER */
+};
+static const unsigned int standard_ioctl_num = sizeof(standard_ioctl_hdr);
+
+/*
+ * Meta-data about all the additional standard Wireless Extension events
+ * we know about.
+ */
+static const char standard_event_hdr[] = {
+ IW_HEADER_TYPE_ADDR, /* IWEVTXDROP */
+ IW_HEADER_TYPE_QUAL, /* IWEVQUAL */
+ IW_HEADER_TYPE_POINT, /* IWEVCUSTOM */
+ IW_HEADER_TYPE_ADDR, /* IWEVREGISTERED */
+ IW_HEADER_TYPE_ADDR, /* IWEVEXPIRED */
+};
+static const unsigned int standard_event_num = sizeof(standard_event_hdr);
+
+/* Size (in bytes) of various events */
+static const int event_type_size[] = {
+ IW_EV_LCP_LEN, /* IW_HEADER_TYPE_NULL */
+ 0,
+ IW_EV_CHAR_LEN, /* IW_HEADER_TYPE_CHAR */
+ 0,
+ IW_EV_UINT_LEN, /* IW_HEADER_TYPE_UINT */
+ IW_EV_FREQ_LEN, /* IW_HEADER_TYPE_FREQ */
+ IW_EV_ADDR_LEN, /* IW_HEADER_TYPE_ADDR */
+ 0,
+ IW_EV_POINT_LEN, /* Without variable payload */
+ IW_EV_PARAM_LEN, /* IW_HEADER_TYPE_PARAM */
+ IW_EV_QUAL_LEN, /* IW_HEADER_TYPE_QUAL */
+};
+
+/*------------------------------------------------------------------*/
+/*
+ * Initialise the struct stream_descr so that we can extract
+ * individual events from the event stream.
+ */
+void
+iw_init_event_stream(struct stream_descr * stream, /* Stream of events */
+ char * data,
+ int len)
+{
+ /* Cleanup */
+ memset((char *) stream, '\0', sizeof(struct stream_descr));
+
+ /* Set things up */
+ stream->current = data;
+ stream->end = data + len;
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Extract the next event from the event stream.
+ */
+int
+iw_extract_event_stream(struct stream_descr * stream, /* Stream of events */
+ struct iw_event * iwe) /* Extracted event */
+{
+ int event_type = 0;
+ unsigned int event_len = 1; /* Invalid */
+ char * pointer;
+ /* Don't "optimise" the following variable, it will crash */
+ unsigned cmd_index; /* *MUST* be unsigned */
+
+ /* Check for end of stream */
+ if((stream->current + IW_EV_LCP_LEN) > stream->end)
+ return(0);
+
+#if 0
+ printf("DBG - stream->current = %p, stream->value = %p, stream->end = %p\n",
+ stream->current, stream->value, stream->end);
+#endif
+
+ /* Extract the event header (to get the event id).
+ * Note : the event may be unaligned, therefore copy... */
+ memcpy((char *) iwe, stream->current, IW_EV_LCP_LEN);
+
+#if 0
+ printf("DBG - iwe->cmd = 0x%X, iwe->len = %d\n",
+ iwe->cmd, iwe->len);
+#endif
+
+ /* Check invalid events */
+ if(iwe->len <= IW_EV_LCP_LEN)
+ return(-1);
+
+ /* Get the type and length of that event */
+ if(iwe->cmd <= SIOCIWLAST)
+ {
+ cmd_index = iwe->cmd - SIOCIWFIRST;
+ if(cmd_index < standard_ioctl_num)
+ event_type = standard_ioctl_hdr[cmd_index];
+ }
+ else
+ {
+ cmd_index = iwe->cmd - IWEVFIRST;
+ if(cmd_index < standard_event_num)
+ event_type = standard_event_hdr[cmd_index];
+ }
+ /* Unknown events -> event_type=0 => IW_EV_LCP_LEN */
+ event_len = event_type_size[event_type];
+
+ /* Check if we know about this event */
+ if(event_len <= IW_EV_LCP_LEN)
+ {
+ /* Skip to next event */
+ stream->current += iwe->len;
+ return(2);
+ }
+ event_len -= IW_EV_LCP_LEN;
+
+ /* Set pointer on data */
+ if(stream->value != NULL)
+ pointer = stream->value; /* Next value in event */
+ else
+ pointer = stream->current + IW_EV_LCP_LEN; /* First value in event */
+
+#if 0
+ printf("DBG - event_type = %d, event_len = %d, pointer = %p\n",
+ event_type, event_len, pointer);
+#endif
+
+ /* Copy the rest of the event (at least, fixed part) */
+ if((pointer + event_len) > stream->end)
+ {
+ /* Go to next event */
+ stream->current += iwe->len;
+ return(-2);
+ }
+ memcpy((char *) iwe + IW_EV_LCP_LEN, pointer, event_len);
+
+ /* Skip event in the stream */
+ pointer += event_len;
+
+ /* Special processing for iw_point events */
+ if(event_type == IW_HEADER_TYPE_POINT)
+ {
+ /* Check the length of the payload */
+ if((iwe->len - (event_len + IW_EV_LCP_LEN)) > 0)
+ /* Set pointer on variable part (warning : non aligned) */
+ iwe->u.data.pointer = pointer;
+ else
+ /* No data */
+ iwe->u.data.pointer = NULL;
+
+ /* Go to next event */
+ stream->current += iwe->len;
+ }
+ else
+ {
+ /* Is there more value in the event ? */
+ if((pointer + event_len) <= (stream->current + iwe->len))
+ /* Go to next value */
+ stream->value = pointer;
+ else
+ {
+ /* Go to next event */
+ stream->value = NULL;
+ stream->current += iwe->len;
+ }
+ }
+ return(1);
+}
+
+#endif /* WIRELESS_EXT > 13 */
diff --git a/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwlib.h b/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwlib.h
new file mode 100644
index 0000000..88894c0
--- /dev/null
+++ b/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwlib.h
@@ -0,0 +1,490 @@
+/*
+ * Wireless Tools
+ *
+ * Jean II - HPLB 97->99 - HPL 99->02
+ *
+ * Common header for the Wireless Extension library...
+ *
+ * This file is released under the GPL license.
+ * Copyright (c) 1997-2002 Jean Tourrilhes <jt@hpl.hp.com>
+ */
+
+#ifndef IWLIB_H
+#define IWLIB_H
+
+/*#include "CHANGELOG.h"*/
+
+/***************************** INCLUDES *****************************/
+
+/* Standard headers */
+#include <sys/types.h>
+#include <sys/ioctl.h>
+#include <stdio.h>
+#include <math.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <netdb.h> /* gethostbyname, getnetbyname */
+//#include <net/ethernet.h> /* struct ether_addr */
+#if defined(__GLIBC__) && (__GLIBC__)
+#include <netinet/if_ether.h>
+#else
+#include <linux/if_ether.h>
+#ifdef __ANDROID__
+#include <net/if_ether.h>
+#endif
+#endif
+#include <sys/time.h> /* struct timeval */
+#include <unistd.h>
+
+/* This is our header selection. Try to hide the mess and the misery :-(
+ * Don't look, you would go blind ;-) */
+
+#ifndef LINUX_VERSION_CODE
+#include <linux/version.h>
+#endif
+
+/* Kernel headers 2.4.X + Glibc 2.2 - Mandrake 8.0, Debian 2.3, RH 7.1
+ * Kernel headers 2.2.X + Glibc 2.2 - Slackware 8.0 */
+#if defined(__GLIBC__) \
+ && __GLIBC__ == 2 \
+ && __GLIBC_MINOR__ >= 2 \
+ && LINUX_VERSION_CODE >= KERNEL_VERSION(2,2,0)
+//#define GLIBC22_HEADERS
+#define GENERIC_HEADERS
+
+/* Kernel headers 2.4.X + Glibc 2.1 - Debian 2.2 upgraded, RH 7.0
+ * Kernel headers 2.2.X + Glibc 2.1 - Debian 2.2, RH 6.1 */
+#elif defined(__GLIBC__) \
+ && __GLIBC__ == 2 \
+ && __GLIBC_MINOR__ == 1 \
+ && LINUX_VERSION_CODE >= KERNEL_VERSION(2,2,0)
+//#define GLIBC_HEADERS
+#define GENERIC_HEADERS
+
+/* Kernel headers 2.2.X + Glibc 2.0 - Debian 2.1 */
+#elif defined(__GLIBC__) \
+ && __GLIBC__ == 2 \
+ && __GLIBC_MINOR__ == 0 \
+ && LINUX_VERSION_CODE >= KERNEL_VERSION(2,0,0) \
+ && LINUX_VERSION_CODE < KERNEL_VERSION(2,1,0)
+#define GLIBC_HEADERS
+#define KLUDGE_HEADERS
+
+/* Note : is it really worth supporting kernel 2.0.X, knowing that
+ * we require WE v9, which is only available in 2.2.X and higher ?
+ * I guess one could use 2.0.x with an upgraded wireless.h... */
+
+/* Kernel headers 2.0.X + Glibc 2.0 - Debian 2.0, RH 5 */
+#elif defined(__GLIBC__) \
+ && __GLIBC__ == 2 \
+ && __GLIBC_MINOR__ == 0 \
+ && LINUX_VERSION_CODE < KERNEL_VERSION(2,1,0) \
+ && LINUX_VERSION_CODE >= KERNEL_VERSION(2,0,0)
+#define GLIBC_HEADERS
+
+/* Kernel headers 2.0.X + libc5 - old systems */
+#elif defined(_LINUX_C_LIB_VERSION_MAJOR) \
+ && _LINUX_C_LIB_VERSION_MAJOR == 5 \
+ && LINUX_VERSION_CODE >= KERNEL_VERSION(2,0,0) \
+ && LINUX_VERSION_CODE < KERNEL_VERSION(2,1,0)
+#define LIBC5_HEADERS
+
+/* Unsupported combination */
+#elif defined(__ANDROID__)
+#define GLIBC_HEADERS
+#else
+#error "Your kernel/libc combination is not supported"
+#endif
+
+#ifdef GENERIC_HEADERS
+/* Proposed by Dr. Michael Rietz <rietz@mail.amps.de>, 27.3.2 */
+/* If this works for all, it might be more stable on the long term - Jean II */
+#include <net/if_arp.h> /* For ARPHRD_ETHER */
+#include <sys/socket.h> /* For AF_INET & struct sockaddr */
+#include <netinet/in.h> /* For struct sockaddr_in */
+#include <netinet/if_ether.h>
+#endif /* GENERIC_HEADERS */
+
+#ifdef GLIBC22_HEADERS
+/* Added by Ross G. Miller <Ross_Miller@baylor.edu>, 3/28/01 */
+#include <linux/if_arp.h> /* For ARPHRD_ETHER */
+#include <linux/socket.h> /* For AF_INET & struct sockaddr */
+#include <sys/socket.h>
+#endif /* GLIBC22_HEADERS */
+
+#ifdef KLUDGE_HEADERS
+#include <socketbits.h>
+#endif /* KLUDGE_HEADERS */
+
+#ifdef GLIBC_HEADERS
+#include <linux/if_arp.h> /* For ARPHRD_ETHER */
+#include <linux/socket.h> /* For AF_INET & struct sockaddr */
+#include <linux/in.h> /* For struct sockaddr_in */
+#endif /* KLUDGE_HEADERS || GLIBC_HEADERS */
+
+#ifdef LIBC5_HEADERS
+#include <sys/socket.h> /* For AF_INET & struct sockaddr & socket() */
+#include <linux/if_arp.h> /* For ARPHRD_ETHER */
+#include <linux/in.h> /* For struct sockaddr_in */
+#endif /* LIBC5_HEADERS */
+
+#ifdef WEXT_HEADER
+/* Private copy of Wireless extensions */
+#include WEXT_HEADER
+#else /* !WEXT_HEADER */
+/* System wide Wireless extensions */
+#include <linux/if.h>
+#include <linux/wireless.h>
+#endif /* !WEXT_HEADER */
+
+/****************************** DEBUG ******************************/
+
+
+/************************ CONSTANTS & MACROS ************************/
+
+/* Paths */
+#define PROC_NET_WIRELESS "/proc/net/wireless"
+#define PROC_NET_DEV "/proc/net/dev"
+
+/* Some usefull constants */
+#define KILO 1e3
+#define MEGA 1e6
+#define GIGA 1e9
+
+/* Backward compatibility for Wireless Extension 9 */
+#ifndef IW_POWER_MODIFIER
+#define IW_POWER_MODIFIER 0x000F /* Modify a parameter */
+#define IW_POWER_MIN 0x0001 /* Value is a minimum */
+#define IW_POWER_MAX 0x0002 /* Value is a maximum */
+#define IW_POWER_RELATIVE 0x0004 /* Value is not in seconds/ms/us */
+#endif /* IW_POWER_MODIFIER */
+
+#ifndef IW_ENCODE_NOKEY
+#define IW_ENCODE_NOKEY 0x0800 /* Key is write only, so not here */
+#define IW_ENCODE_MODE 0xF000 /* Modes defined below */
+#endif /* IW_ENCODE_NOKEY */
+
+/* More backward compatibility */
+#ifndef SIOCSIWCOMMIT
+#define SIOCSIWCOMMIT SIOCSIWNAME
+#endif /* SIOCSIWCOMMIT */
+
+/****************************** TYPES ******************************/
+
+/* Shortcuts */
+typedef struct iw_statistics iwstats;
+typedef struct iw_range iwrange;
+typedef struct iw_param iwparam;
+typedef struct iw_freq iwfreq;
+typedef struct iw_quality iwqual;
+typedef struct iw_priv_args iwprivargs;
+typedef struct sockaddr sockaddr;
+
+/* Structure for storing all wireless information for each device
+ * This is pretty exhaustive... */
+typedef struct wireless_info
+{
+ char name[IFNAMSIZ + 1]; /* Wireless/protocol name */
+ int has_nwid;
+ iwparam nwid; /* Network ID */
+ int has_freq;
+ double freq; /* Frequency/channel */
+ int has_sens;
+ iwparam sens; /* sensitivity */
+ int has_key;
+ unsigned char key[IW_ENCODING_TOKEN_MAX]; /* Encoding key used */
+ int key_size; /* Number of bytes */
+ int key_flags; /* Various flags */
+ int has_essid;
+ int essid_on;
+ char essid[IW_ESSID_MAX_SIZE + 1]; /* ESSID (extended network) */
+ int has_nickname;
+ char nickname[IW_ESSID_MAX_SIZE + 1]; /* NickName */
+ int has_ap_addr;
+ sockaddr ap_addr; /* Access point address */
+ int has_bitrate;
+ iwparam bitrate; /* Bit rate in bps */
+ int has_rts;
+ iwparam rts; /* RTS threshold in bytes */
+ int has_frag;
+ iwparam frag; /* Fragmentation threshold in bytes */
+ int has_mode;
+ int mode; /* Operation mode */
+ int has_power;
+ iwparam power; /* Power management parameters */
+ int has_txpower;
+ iwparam txpower; /* Transmit Power in dBm */
+ int has_retry;
+ iwparam retry; /* Retry limit or lifetime */
+
+ /* Stats */
+ iwstats stats;
+ int has_stats;
+ iwrange range;
+ int has_range;
+} wireless_info;
+
+/* Structure for storing all wireless information for each device
+ * This is a cut down version of the one above, containing only
+ * the things *truly* needed to configure a card.
+ * Don't add other junk, I'll remove it... */
+typedef struct wireless_config
+{
+ char name[IFNAMSIZ + 1]; /* Wireless/protocol name */
+ int has_nwid;
+ iwparam nwid; /* Network ID */
+ int has_freq;
+ double freq; /* Frequency/channel */
+ int has_key;
+ unsigned char key[IW_ENCODING_TOKEN_MAX]; /* Encoding key used */
+ int key_size; /* Number of bytes */
+ int key_flags; /* Various flags */
+ int has_essid;
+ int essid_on;
+ char essid[IW_ESSID_MAX_SIZE + 1]; /* ESSID (extended network) */
+ int has_mode;
+ int mode; /* Operation mode */
+} wireless_config;
+
+typedef struct stream_descr
+{
+ char * end; /* End of the stream */
+ char * current; /* Current event in stream of events */
+ char * value; /* Current value in event */
+} stream_descr;
+
+/* Prototype for handling display of each single interface on the
+ * system - see iw_enum_devices() */
+typedef int (*iw_enum_handler)(int skfd,
+ char * ifname,
+ char * args[],
+ int count);
+
+/**************************** PROTOTYPES ****************************/
+/*
+ * All the functions in iwcommon.c
+ */
+/* ---------------------- SOCKET SUBROUTINES -----------------------*/
+int
+ iw_sockets_open(void);
+void
+ iw_enum_devices(int skfd,
+ iw_enum_handler fn,
+ char * args[],
+ int count);
+/* --------------------- WIRELESS SUBROUTINES ----------------------*/
+int
+ iw_get_range_info(int skfd,
+ char * ifname,
+ iwrange * range);
+int
+ iw_print_version_info(char * toolname);
+int
+ iw_get_priv_info(int skfd,
+ char * ifname,
+ iwprivargs * priv,
+ int maxpriv);
+int
+ iw_get_basic_config(int skfd,
+ char * ifname,
+ wireless_config * info);
+int
+ iw_set_basic_config(int skfd,
+ char * ifname,
+ wireless_config * info);
+/* --------------------- PROTOCOL SUBROUTINES --------------------- */
+int
+ iw_protocol_compare(char * protocol1,
+ char * protocol2);
+/* -------------------- FREQUENCY SUBROUTINES --------------------- */
+void
+ iw_float2freq(double in,
+ iwfreq * out);
+double
+ iw_freq2float(iwfreq * in);
+void
+ iw_print_freq(char * buffer,
+ double freq);
+int
+ iw_freq_to_channel(double freq,
+ struct iw_range * range);
+void
+ iw_print_bitrate(char * buffer,
+ int bitrate);
+/* ---------------------- POWER SUBROUTINES ----------------------- */
+int
+ iw_dbm2mwatt(int in);
+int
+ iw_mwatt2dbm(int in);
+/* -------------------- STATISTICS SUBROUTINES -------------------- */
+int
+ iw_get_stats(int skfd,
+ char * ifname,
+ iwstats * stats);
+void
+ iw_print_stats(char * buffer,
+ iwqual * qual,
+ iwrange * range,
+ int has_range);
+/* --------------------- ENCODING SUBROUTINES --------------------- */
+void
+ iw_print_key(char * buffer,
+ unsigned char * key,
+ int key_size,
+ int key_flags);
+int
+ iw_in_key(char * input,
+ unsigned char * key);
+/* ----------------- POWER MANAGEMENT SUBROUTINES ----------------- */
+void
+ iw_print_pm_value(char * buffer,
+ int value,
+ int flags);
+void
+ iw_print_pm_mode(char * buffer,
+ int flags);
+/* --------------- RETRY LIMIT/LIFETIME SUBROUTINES --------------- */
+#if WIRELESS_EXT > 10
+void
+ iw_print_retry_value(char * buffer,
+ int value,
+ int flags);
+#endif
+/* ----------------------- TIME SUBROUTINES ----------------------- */
+void
+ iw_print_timeval(char * buffer,
+ const struct timeval * time);
+/* --------------------- ADDRESS SUBROUTINES ---------------------- */
+int
+ iw_check_mac_addr_type(int skfd,
+ char * ifname);
+int
+ iw_check_if_addr_type(int skfd,
+ char * ifname);
+#if 0
+int
+ iw_check_addr_type(int skfd,
+ char * ifname);
+#endif
+void
+ iw_ether_ntop(const struct ether_addr* eth, char* buf);
+char*
+ iw_ether_ntoa(const struct ether_addr* eth);
+int
+ iw_ether_aton(const char* bufp, struct ether_addr* eth);
+int
+ iw_in_inet(char *bufp, struct sockaddr *sap);
+int
+ iw_in_addr(int skfd,
+ char * ifname,
+ char * bufp,
+ struct sockaddr * sap);
+/* ----------------------- MISC SUBROUTINES ------------------------ */
+int
+ iw_get_priv_size(int args);
+
+#if WIRELESS_EXT > 13
+/* ---------------------- EVENT SUBROUTINES ---------------------- */
+void
+ iw_init_event_stream(struct stream_descr * stream,
+ char * data,
+ int len);
+int
+ iw_extract_event_stream(struct stream_descr * stream,
+ struct iw_event * iwe);
+#endif /* WIRELESS_EXT > 13 */
+
+/**************************** VARIABLES ****************************/
+
+extern const char * const iw_operation_mode[];
+#define IW_NUM_OPER_MODE 7
+
+/************************* INLINE FUNTIONS *************************/
+/*
+ * Functions that are so simple that it's more efficient inlining them
+ */
+
+/*
+ * Note : I've defined wrapper for the ioctl request so that
+ * it will be easier to migrate to other kernel API if needed
+ */
+
+/*------------------------------------------------------------------*/
+/*
+ * Wrapper to push some Wireless Parameter in the driver
+ */
+static inline int
+iw_set_ext(int skfd, /* Socket to the kernel */
+ char * ifname, /* Device name */
+ int request, /* WE ID */
+ struct iwreq * pwrq) /* Fixed part of the request */
+{
+ /* Set device name */
+ strncpy(pwrq->ifr_name, ifname, IFNAMSIZ-1);
+ pwrq->ifr_name[IFNAMSIZ-1] = '\0';
+ /* Do the request */
+ return(ioctl(skfd, request, pwrq));
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Wrapper to extract some Wireless Parameter out of the driver
+ */
+static inline int
+iw_get_ext(int skfd, /* Socket to the kernel */
+ char * ifname, /* Device name */
+ int request, /* WE ID */
+ struct iwreq * pwrq) /* Fixed part of the request */
+{
+ /* Set device name */
+ strncpy(pwrq->ifr_name, ifname, IFNAMSIZ-1);
+ pwrq->ifr_name[IFNAMSIZ-1] = '\0';
+ /* Do the request */
+ return(ioctl(skfd, request, pwrq));
+}
+
+/*------------------------------------------------------------------*/
+/* Backwards compatability
+ * Actually, those form are much easier to use when dealing with
+ * struct sockaddr... */
+static inline char*
+iw_pr_ether(char* bufp, const unsigned char* addr)
+{
+ iw_ether_ntop((const struct ether_addr *) addr, bufp);
+ return bufp;
+}
+/* Backwards compatability */
+static inline int
+iw_in_ether(const char *bufp, struct sockaddr *sap)
+{
+ sap->sa_family = ARPHRD_ETHER;
+ return iw_ether_aton(bufp, (struct ether_addr *) sap->sa_data) ? 0 : -1;
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Create an Ethernet broadcast address
+ */
+static inline void
+iw_broad_ether(struct sockaddr *sap)
+{
+ sap->sa_family = ARPHRD_ETHER;
+ memset((char *) sap->sa_data, 0xFF, ETH_ALEN);
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Create an Ethernet NULL address
+ */
+static inline void
+iw_null_ether(struct sockaddr *sap)
+{
+ sap->sa_family = ARPHRD_ETHER;
+ memset((char *) sap->sa_data, 0x00, ETH_ALEN);
+}
+
+#endif /* IWLIB_H */
diff --git a/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwlist.8 b/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwlist.8
new file mode 100644
index 0000000..3623626
--- /dev/null
+++ b/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwlist.8
@@ -0,0 +1,105 @@
+.\" Jean II - HPLB - 96
+.\" iwlist.8
+.\"
+.TH IWLIST 8 "31 October 1996" "net-tools" "Linux Programmer's Manual"
+.\"
+.\" NAME part
+.\"
+.SH NAME
+iwlist \- Get wireless statistics from specific nodes
+.\"
+.\" SYNOPSIS part
+.\"
+.SH SYNOPSIS
+.BI "iwlist " interface " freq"
+.br
+.BI "iwlist " interface " ap"
+.br
+.BI "iwlist " interface " scan"
+.br
+.BI "iwlist " interface " rate"
+.br
+.BI "iwlist " interface " key"
+.br
+.BI "iwlist " interface " power"
+.br
+.BI "iwlist " interface " txpower"
+.br
+.BI "iwlist " interface " retry"
+.br
+.BI "iwlist --help"
+.br
+.BI "iwlist --version"
+.\"
+.\" DESCRIPTION part
+.\"
+.SH DESCRIPTION
+.B Iwlist
+is used to display some large chunk of information from a wireless
+network interface that is not displayed by iwconfig. This is typically
+list of parameters.
+.\"
+.\" PARAMETER part
+.\"
+.SH PARAMETERS
+.TP
+.BR freq / channel
+Give the list of available frequencies in the device and the number of
+defined channels. Please note that usually the driver returns the
+total number of channels and only the frequencies available in the
+present locale, so there is no one to one mapping between frequencies
+displayed and channel numbers.
+.TP
+.BR ap / accesspoint
+Give the list of Access Points in range, and optionally the quality of
+link to them. This feature is obsolte and now deprecated in favor of
+scanning support (below), and it will disappear in the future.
+.TP
+.BR scan [ning]
+Give the list of Access Points and Ad-Hoc cells in range, and
+optionally a whole bunch of information about them (ESSID, Quality,
+Frequency, Mode...). The type of information returned depend on what
+the card support.
+.br
+Triggering scanning is a priviledged operation
+.RI ( root
+only) and normal users can only read letf-over scan results. By
+default, the way scanning is done (the scope of the scan) will be
+impacted by the current setting of the driver. Also, this command is
+supposed to take extra arguments to control the scanning behaviour,
+but this is currently not implemented.
+.TP
+.BR rate / bit [rate]
+List the bit-rates supported by the device.
+.TP
+.BR key / enc [ryption]
+List the encryption key sizes supported and display all the encryption
+keys availables in the device.
+.TP
+.B power
+List the various Power Management attributes and modes of the device.
+.TP
+.B txpower
+List the various Transmit Power available on the device.
+.TP
+.B retry
+List the transmit retry limits and retry lifetime on the device.
+.TP
+.B --version
+Display the version of the tools, as well as the recommended and
+current Wireless Extensions version for the tool and the various
+wireless interfaces.
+.\"
+.\" FILES part
+.\"
+.SH FILES
+.I /proc/net/wireless
+.\"
+.\" SEE ALSO part
+.\"
+.SH SEE ALSO
+.BR iwconfig (8),
+.BR ifconfig (8),
+.BR iwspy (8).
+.BR iwpriv (8).
+
diff --git a/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwlist.c b/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwlist.c
new file mode 100644
index 0000000..c5de308
--- /dev/null
+++ b/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwlist.c
@@ -0,0 +1,1143 @@
+/*
+ * Wireless Tools
+ *
+ * Jean II - HPLB '99 - HPL 99->01
+ *
+ * This tool can access various piece of information on the card
+ * not part of iwconfig...
+ * You need to link this code against "iwlist.c" and "-lm".
+ *
+ * This file is released under the GPL license.
+ * Copyright (c) 1997-2002 Jean Tourrilhes <jt@hpl.hp.com>
+ */
+
+#include "iwlib.h" /* Header */
+#include <sys/time.h>
+
+/*********************** FREQUENCIES/CHANNELS ***********************/
+
+/*------------------------------------------------------------------*/
+/*
+ * Print the number of channels and available frequency for the device
+ */
+static int
+print_freq_info(int skfd,
+ char * ifname,
+ char * args[], /* Command line args */
+ int count) /* Args count */
+{
+ struct iwreq wrq;
+ struct iw_range range;
+ double freq;
+ int k;
+ int channel;
+ char buffer[128]; /* Temporary buffer */
+
+ /* Avoid "Unused parameter" warning */
+ args = args; count = count;
+
+ /* Get list of frequencies / channels */
+ if(iw_get_range_info(skfd, ifname, &range) < 0)
+ fprintf(stderr, "%-8.8s no frequency information.\n\n",
+ ifname);
+ else
+ {
+ if(range.num_frequency > 0)
+ {
+ printf("%-8.8s %d channels in total; available frequencies :\n",
+ ifname, range.num_channels);
+ /* Print them all */
+ for(k = 0; k < range.num_frequency; k++)
+ {
+ printf(" Channel %.2d : ", range.freq[k].i);
+ freq = iw_freq2float(&(range.freq[k]));
+ if(freq >= GIGA)
+ printf("%g GHz\n", freq / GIGA);
+ else
+ if(freq >= MEGA)
+ printf("%g MHz\n", freq / MEGA);
+ else
+ printf("%g kHz\n", freq / KILO);
+ }
+ }
+ else
+ printf("%-8.8s %d channels\n",
+ ifname, range.num_channels);
+
+ /* Get current frequency / channel and display it */
+ if(iw_get_ext(skfd, ifname, SIOCGIWFREQ, &wrq) >= 0)
+ {
+ freq = iw_freq2float(&(wrq.u.freq));
+ iw_print_freq(buffer, freq);
+ channel = iw_freq_to_channel(freq, &range);
+ if(channel >= 0)
+ printf(" Current %s (channel %.2d)\n\n", buffer, channel);
+ else
+ printf(" Current %s\n\n", buffer);
+ }
+ }
+ return(0);
+}
+
+/************************ ACCESS POINT LIST ************************/
+/*
+ * Note : now that we have scanning support, this is depracted and
+ * won't survive long. Actually, next version it's out !
+ */
+
+/*------------------------------------------------------------------*/
+/*
+ * Display the list of ap addresses and the associated stats
+ * Exacly the same as the spy list, only with different IOCTL and messages
+ */
+static int
+print_ap_info(int skfd,
+ char * ifname,
+ char * args[], /* Command line args */
+ int count) /* Args count */
+{
+ struct iwreq wrq;
+ char buffer[(sizeof(struct iw_quality) +
+ sizeof(struct sockaddr)) * IW_MAX_AP];
+ char temp[128];
+ struct sockaddr * hwa;
+ struct iw_quality * qual;
+ iwrange range;
+ int has_range = 0;
+ int has_qual = 0;
+ int n;
+ int i;
+
+ /* Avoid "Unused parameter" warning */
+ args = args; count = count;
+
+ /* Collect stats */
+ wrq.u.data.pointer = (caddr_t) buffer;
+ wrq.u.data.length = IW_MAX_AP;
+ wrq.u.data.flags = 0;
+ if(iw_get_ext(skfd, ifname, SIOCGIWAPLIST, &wrq) < 0)
+ {
+ fprintf(stderr, "%-8.8s Interface doesn't have a list of Access Points\n\n", ifname);
+ return(-1);
+ }
+
+ /* Number of addresses */
+ n = wrq.u.data.length;
+ has_qual = wrq.u.data.flags;
+
+ /* The two lists */
+ hwa = (struct sockaddr *) buffer;
+ qual = (struct iw_quality *) (buffer + (sizeof(struct sockaddr) * n));
+
+ /* Check if we have valid mac address type */
+ if(iw_check_mac_addr_type(skfd, ifname) < 0)
+ {
+ fprintf(stderr, "%-8.8s Interface doesn't support MAC addresses\n\n", ifname);
+ return(-2);
+ }
+
+ /* Get range info if we can */
+ if(iw_get_range_info(skfd, ifname, &(range)) >= 0)
+ has_range = 1;
+
+ /* Display it */
+ if(n == 0)
+ printf("%-8.8s No Access Point in range\n", ifname);
+ else
+ printf("%-8.8s Access Points in range:\n", ifname);
+ for(i = 0; i < n; i++)
+ {
+ if(has_qual)
+ {
+ /* Print stats for this address */
+ printf(" %s : ", iw_pr_ether(temp, (unsigned char *)hwa[i].sa_data));
+ iw_print_stats(temp, &qual[i], &range, has_range);
+ printf("%s\n", temp);
+ }
+ else
+ /* Only print the address */
+ printf(" %s\n", iw_pr_ether(temp, (unsigned char *)hwa[i].sa_data));
+ }
+ printf("\n");
+ return(0);
+}
+
+/***************************** BITRATES *****************************/
+
+/*------------------------------------------------------------------*/
+/*
+ * Print the number of available bitrates for the device
+ */
+static int
+print_bitrate_info(int skfd,
+ char * ifname,
+ char * args[], /* Command line args */
+ int count) /* Args count */
+{
+ struct iwreq wrq;
+ struct iw_range range;
+ int k;
+ char buffer[128];
+
+ /* Avoid "Unused parameter" warning */
+ args = args; count = count;
+
+ /* Extract range info */
+ if(iw_get_range_info(skfd, ifname, &range) < 0)
+ fprintf(stderr, "%-8.8s no bit-rate information.\n\n",
+ ifname);
+ else
+ {
+ if((range.num_bitrates > 0) && (range.num_bitrates < IW_MAX_BITRATES))
+ {
+ printf("%-8.8s %d available bit-rates :\n",
+ ifname, range.num_bitrates);
+ /* Print them all */
+ for(k = 0; k < range.num_bitrates; k++)
+ {
+ iw_print_bitrate(buffer, range.bitrate[k]);
+ /* Maybe this should be %10s */
+ printf("\t %s\n", buffer);
+ }
+ }
+ else
+ printf("%-8.8s No bit-rates ? Please update driver...\n", ifname);
+
+ /* Get current bit rate */
+ if(iw_get_ext(skfd, ifname, SIOCGIWRATE, &wrq) >= 0)
+ {
+ iw_print_bitrate(buffer, wrq.u.bitrate.value);
+ printf(" Current Bit Rate%c%s\n\n",
+ (wrq.u.bitrate.fixed ? '=' : ':'), buffer);
+ }
+ }
+ return(0);
+}
+
+/************************* ENCRYPTION KEYS *************************/
+
+/*------------------------------------------------------------------*/
+/*
+ * Print the number of available encryption key for the device
+ */
+static int
+print_keys_info(int skfd,
+ char * ifname,
+ char * args[], /* Command line args */
+ int count) /* Args count */
+{
+ struct iwreq wrq;
+ struct iw_range range;
+ unsigned char key[IW_ENCODING_TOKEN_MAX];
+ int k;
+ char buffer[128];
+
+ /* Avoid "Unused parameter" warning */
+ args = args; count = count;
+
+ /* Extract range info */
+ if(iw_get_range_info(skfd, ifname, &range) < 0)
+ fprintf(stderr, "%-8.8s no encryption keys information.\n\n",
+ ifname);
+ else
+ {
+ printf("%-8.8s ", ifname);
+ /* Print key sizes */
+ if((range.num_encoding_sizes > 0) &&
+ (range.num_encoding_sizes < IW_MAX_ENCODING_SIZES))
+ {
+ printf("%d key sizes : %d", range.num_encoding_sizes,
+ range.encoding_size[0] * 8);
+ /* Print them all */
+ for(k = 1; k < range.num_encoding_sizes; k++)
+ printf(", %d", range.encoding_size[k] * 8);
+ printf("bits\n ");
+ }
+ /* Print the keys and associate mode */
+ printf("%d keys available :\n", range.max_encoding_tokens);
+ for(k = 1; k <= range.max_encoding_tokens; k++)
+ {
+ wrq.u.data.pointer = (caddr_t) key;
+ wrq.u.data.length = IW_ENCODING_TOKEN_MAX;
+ wrq.u.data.flags = k;
+ if(iw_get_ext(skfd, ifname, SIOCGIWENCODE, &wrq) < 0)
+ {
+ fprintf(stderr, "SIOCGIWENCODE: %s\n", strerror(errno));
+ break;
+ }
+ if((wrq.u.data.flags & IW_ENCODE_DISABLED) ||
+ (wrq.u.data.length == 0))
+ printf("\t\t[%d]: off\n", k);
+ else
+ {
+ /* Display the key */
+ iw_print_key(buffer, key, wrq.u.data.length, wrq.u.data.flags);
+ printf("\t\t[%d]: %s", k, buffer);
+
+ /* Other info... */
+ printf(" (%d bits)", wrq.u.data.length * 8);
+ printf("\n");
+ }
+ }
+ /* Print current key and mode */
+ wrq.u.data.pointer = (caddr_t) key;
+ wrq.u.data.length = IW_ENCODING_TOKEN_MAX;
+ wrq.u.data.flags = 0; /* Set index to zero to get current */
+ if(iw_get_ext(skfd, ifname, SIOCGIWENCODE, &wrq) < 0)
+ {
+ fprintf(stderr, "SIOCGIWENCODE: %s\n", strerror(errno));
+ return(-1);
+ }
+ printf(" Current Transmit Key: [%d]\n",
+ wrq.u.data.flags & IW_ENCODE_INDEX);
+ if(wrq.u.data.flags & IW_ENCODE_RESTRICTED)
+ printf(" Encryption mode:restricted\n");
+ if(wrq.u.data.flags & IW_ENCODE_OPEN)
+ printf(" Encryption mode:open\n");
+
+ printf("\n\n");
+ }
+ return(0);
+}
+
+/************************* POWER MANAGEMENT *************************/
+
+/*------------------------------------------------------------------*/
+/*
+ * Print Power Management info for each device
+ */
+static inline int
+get_pm_value(int skfd,
+ char * ifname,
+ struct iwreq * pwrq,
+ int flags,
+ char * buffer)
+{
+ /* Get Another Power Management value */
+ pwrq->u.power.flags = flags;
+ if(iw_get_ext(skfd, ifname, SIOCGIWPOWER, pwrq) >= 0)
+ {
+ /* Let's check the value and its type */
+ if(pwrq->u.power.flags & IW_POWER_TYPE)
+ {
+ iw_print_pm_value(buffer, pwrq->u.power.value, pwrq->u.power.flags);
+ printf("\n %s", buffer);
+ }
+ }
+ return(pwrq->u.power.flags);
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Print Power Management info for each device
+ */
+static int
+print_pm_info(int skfd,
+ char * ifname,
+ char * args[], /* Command line args */
+ int count) /* Args count */
+{
+ struct iwreq wrq;
+ struct iw_range range;
+ char buffer[128];
+
+ /* Avoid "Unused parameter" warning */
+ args = args; count = count;
+
+ /* Extract range info */
+ if(iw_get_range_info(skfd, ifname, &range) < 0)
+ fprintf(stderr, "%-8.8s no power management information.\n\n",
+ ifname);
+ else
+ {
+ printf("%-8.8s ", ifname);
+#if WIRELESS_EXT > 9
+ /* Display modes availables */
+ if(range.pm_capa & IW_POWER_MODE)
+ {
+ printf("Supported modes :\n ");
+ if(range.pm_capa & (IW_POWER_UNICAST_R | IW_POWER_MULTICAST_R))
+ printf("\t\to Receive all packets (unicast & multicast)\n ");
+ if(range.pm_capa & IW_POWER_UNICAST_R)
+ printf("\t\to Receive Unicast only (discard multicast)\n ");
+ if(range.pm_capa & IW_POWER_MULTICAST_R)
+ printf("\t\to Receive Multicast only (discard unicast)\n ");
+ if(range.pm_capa & IW_POWER_FORCE_S)
+ printf("\t\to Force sending using Power Management\n ");
+ if(range.pm_capa & IW_POWER_REPEATER)
+ printf("\t\to Repeat multicast\n ");
+ }
+ /* Display min/max period availables */
+ if(range.pmp_flags & IW_POWER_PERIOD)
+ {
+ int flags = (range.pmp_flags & ~(IW_POWER_MIN | IW_POWER_MAX));
+ /* Display if auto or fixed */
+ if(range.pmp_flags & IW_POWER_MIN)
+ printf("Auto period ; ");
+ else
+ printf("Fixed period ; ");
+ /* Print the range */
+ iw_print_pm_value(buffer, range.min_pmp, flags | IW_POWER_MIN);
+ printf("%s\n ", buffer);
+ iw_print_pm_value(buffer, range.max_pmp, flags | IW_POWER_MAX);
+ printf("%s\n ", buffer);
+
+ }
+ /* Display min/max timeout availables */
+ if(range.pmt_flags & IW_POWER_TIMEOUT)
+ {
+ int flags = (range.pmt_flags & ~(IW_POWER_MIN | IW_POWER_MAX));
+ /* Display if auto or fixed */
+ if(range.pmt_flags & IW_POWER_MIN)
+ printf("Auto timeout ; ");
+ else
+ printf("Fixed timeout ; ");
+ /* Print the range */
+ iw_print_pm_value(buffer, range.min_pmt, flags | IW_POWER_MIN);
+ printf("%s\n ", buffer);
+ iw_print_pm_value(buffer, range.max_pmt, flags | IW_POWER_MAX);
+ printf("%s\n ", buffer);
+
+ }
+#endif /* WIRELESS_EXT > 9 */
+
+ /* Get current Power Management settings */
+ wrq.u.power.flags = 0;
+ if(iw_get_ext(skfd, ifname, SIOCGIWPOWER, &wrq) >= 0)
+ {
+ int flags = wrq.u.power.flags;
+
+ /* Is it disabled ? */
+ if(wrq.u.power.disabled)
+ printf("Current mode:off\n ");
+ else
+ {
+ int pm_mask = 0;
+
+ /* Let's check the mode */
+ iw_print_pm_mode(buffer, flags);
+ printf("Current %s", buffer);
+
+ /* Let's check if nothing (simply on) */
+ if((flags & IW_POWER_MODE) == IW_POWER_ON)
+ printf("mode:on");
+ printf("\n ");
+
+ /* Let's check the value and its type */
+ if(wrq.u.power.flags & IW_POWER_TYPE)
+ {
+ iw_print_pm_value(buffer,
+ wrq.u.power.value, wrq.u.power.flags);
+ printf("%s", buffer);
+ }
+
+ /* If we have been returned a MIN value, ask for the MAX */
+ if(flags & IW_POWER_MIN)
+ pm_mask = IW_POWER_MAX;
+ /* If we have been returned a MAX value, ask for the MIN */
+ if(flags & IW_POWER_MAX)
+ pm_mask = IW_POWER_MIN;
+ /* If we have something to ask for... */
+ if(pm_mask)
+ get_pm_value(skfd, ifname, &wrq, pm_mask, buffer);
+
+#if WIRELESS_EXT > 9
+ /* And if we have both a period and a timeout, ask the other */
+ pm_mask = (range.pm_capa & (~(wrq.u.power.flags) &
+ IW_POWER_TYPE));
+ if(pm_mask)
+ {
+ int base_mask = pm_mask;
+ flags = get_pm_value(skfd, ifname, &wrq, pm_mask, buffer);
+ pm_mask = 0;
+
+ /* If we have been returned a MIN value, ask for the MAX */
+ if(flags & IW_POWER_MIN)
+ pm_mask = IW_POWER_MAX | base_mask;
+ /* If we have been returned a MAX value, ask for the MIN */
+ if(flags & IW_POWER_MAX)
+ pm_mask = IW_POWER_MIN | base_mask;
+ /* If we have something to ask for... */
+ if(pm_mask)
+ get_pm_value(skfd, ifname, &wrq, pm_mask, buffer);
+ }
+#endif /* WIRELESS_EXT > 9 */
+ }
+ }
+ printf("\n");
+ }
+ return(0);
+}
+
+/************************** TRANSMIT POWER **************************/
+
+/*------------------------------------------------------------------*/
+/*
+ * Print the number of available transmit powers for the device
+ */
+static int
+print_txpower_info(int skfd,
+ char * ifname,
+ char * args[], /* Command line args */
+ int count) /* Args count */
+{
+ struct iwreq wrq;
+ struct iw_range range;
+ int dbm;
+ int mwatt;
+ int k;
+
+ /* Avoid "Unused parameter" warning */
+ args = args; count = count;
+
+#if WIRELESS_EXT > 9
+ /* Extract range info */
+ if(iw_get_range_info(skfd, ifname, &range) < 0)
+ fprintf(stderr, "%-8.8s no transmit-power information.\n\n",
+ ifname);
+ else
+ {
+ if((range.num_txpower <= 0) || (range.num_txpower > IW_MAX_TXPOWER))
+ printf("%-8.8s No transmit-powers ? Please update driver...\n\n", ifname);
+ else
+ {
+ printf("%-8.8s %d available transmit-powers :\n",
+ ifname, range.num_txpower);
+ /* Print them all */
+ for(k = 0; k < range.num_txpower; k++)
+ {
+ if(range.txpower_capa & IW_TXPOW_MWATT)
+ {
+ dbm = iw_mwatt2dbm(range.txpower[k]);
+ mwatt = range.txpower[k];
+ }
+ else
+ {
+ dbm = range.txpower[k];
+ mwatt = iw_dbm2mwatt(range.txpower[k]);
+ }
+ printf("\t %d dBm \t(%d mW)\n", dbm, mwatt);
+ }
+
+ /* Get current Transmit Power */
+ if(iw_get_ext(skfd, ifname, SIOCGIWTXPOW, &wrq) >= 0)
+ {
+ printf(" Current Tx-Power");
+ /* Disabled ? */
+ if(wrq.u.txpower.disabled)
+ printf(":off\n\n");
+ else
+ {
+ /* Fixed ? */
+ if(wrq.u.txpower.fixed)
+ printf("=");
+ else
+ printf(":");
+ if(wrq.u.txpower.flags & IW_TXPOW_MWATT)
+ {
+ dbm = iw_mwatt2dbm(wrq.u.txpower.value);
+ mwatt = wrq.u.txpower.value;
+ }
+ else
+ {
+ dbm = wrq.u.txpower.value;
+ mwatt = iw_dbm2mwatt(wrq.u.txpower.value);
+ }
+ printf("%d dBm \t(%d mW)\n\n", dbm, mwatt);
+ }
+ }
+ }
+ }
+#endif /* WIRELESS_EXT > 9 */
+ return(0);
+}
+
+/*********************** RETRY LIMIT/LIFETIME ***********************/
+
+#if WIRELESS_EXT > 10
+/*------------------------------------------------------------------*/
+/*
+ * Print one retry value
+ */
+static inline int
+get_retry_value(int skfd,
+ char * ifname,
+ struct iwreq * pwrq,
+ int flags,
+ char * buffer)
+{
+ /* Get Another retry value */
+ pwrq->u.retry.flags = flags;
+ if(iw_get_ext(skfd, ifname, SIOCGIWRETRY, pwrq) >= 0)
+ {
+ /* Let's check the value and its type */
+ if(pwrq->u.retry.flags & IW_RETRY_TYPE)
+ {
+ iw_print_retry_value(buffer,
+ pwrq->u.retry.value, pwrq->u.retry.flags);
+ printf("%s\n ", buffer);
+ }
+ }
+ return(pwrq->u.retry.flags);
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Print Retry info for each device
+ */
+static int
+print_retry_info(int skfd,
+ char * ifname,
+ char * args[], /* Command line args */
+ int count) /* Args count */
+{
+ struct iwreq wrq;
+ struct iw_range range;
+ char buffer[128];
+
+ /* Avoid "Unused parameter" warning */
+ args = args; count = count;
+
+ /* Extract range info */
+ if(iw_get_range_info(skfd, ifname, &range) < 0)
+ fprintf(stderr, "%-8.8s no retry limit/lifetime information.\n\n",
+ ifname);
+ else
+ {
+ printf("%-8.8s ", ifname);
+
+ /* Display min/max limit availables */
+ if(range.retry_flags & IW_RETRY_LIMIT)
+ {
+ int flags = (range.retry_flags & ~(IW_RETRY_MIN | IW_RETRY_MAX));
+ /* Display if auto or fixed */
+ if(range.retry_flags & IW_RETRY_MIN)
+ printf("Auto limit ; ");
+ else
+ printf("Fixed limit ; ");
+ /* Print the range */
+ iw_print_retry_value(buffer, range.min_retry, flags | IW_RETRY_MIN);
+ printf("%s\n ", buffer);
+ iw_print_retry_value(buffer, range.max_retry, flags | IW_RETRY_MAX);
+ printf("%s\n ", buffer);
+
+ }
+ /* Display min/max lifetime availables */
+ if(range.r_time_flags & IW_RETRY_LIFETIME)
+ {
+ int flags = (range.r_time_flags & ~(IW_RETRY_MIN | IW_RETRY_MAX));
+ /* Display if auto or fixed */
+ if(range.r_time_flags & IW_RETRY_MIN)
+ printf("Auto lifetime ; ");
+ else
+ printf("Fixed lifetime ; ");
+ /* Print the range */
+ iw_print_retry_value(buffer, range.min_r_time, flags | IW_RETRY_MIN);
+ printf("%s\n ", buffer);
+ iw_print_retry_value(buffer, range.max_r_time, flags | IW_RETRY_MAX);
+ printf("%s\n ", buffer);
+
+ }
+
+ /* Get current retry settings */
+ wrq.u.retry.flags = 0;
+ if(iw_get_ext(skfd, ifname, SIOCGIWRETRY, &wrq) >= 0)
+ {
+ int flags = wrq.u.retry.flags;
+
+ /* Is it disabled ? */
+ if(wrq.u.retry.disabled)
+ printf("Current mode:off\n ");
+ else
+ {
+ int retry_mask = 0;
+
+ /* Let's check the mode */
+ printf("Current mode:on\n ");
+
+ /* Let's check the value and its type */
+ if(wrq.u.retry.flags & IW_RETRY_TYPE)
+ {
+ iw_print_retry_value(buffer,
+ wrq.u.retry.value, wrq.u.retry.flags);
+ printf("%s", buffer);
+ }
+
+ /* If we have been returned a MIN value, ask for the MAX */
+ if(flags & IW_RETRY_MIN)
+ retry_mask = IW_RETRY_MAX;
+ /* If we have been returned a MAX value, ask for the MIN */
+ if(flags & IW_RETRY_MAX)
+ retry_mask = IW_RETRY_MIN;
+ /* If we have something to ask for... */
+ if(retry_mask)
+ get_retry_value(skfd, ifname, &wrq, retry_mask, buffer);
+
+ /* And if we have both a period and a timeout, ask the other */
+ retry_mask = (range.retry_capa & (~(wrq.u.retry.flags) &
+ IW_RETRY_TYPE));
+ if(retry_mask)
+ {
+ int base_mask = retry_mask;
+ flags = get_retry_value(skfd, ifname, &wrq, retry_mask,
+ buffer);
+ retry_mask = 0;
+
+ /* If we have been returned a MIN value, ask for the MAX */
+ if(flags & IW_RETRY_MIN)
+ retry_mask = IW_RETRY_MAX | base_mask;
+ /* If we have been returned a MAX value, ask for the MIN */
+ if(flags & IW_RETRY_MAX)
+ retry_mask = IW_RETRY_MIN | base_mask;
+ /* If we have something to ask for... */
+ if(retry_mask)
+ get_retry_value(skfd, ifname, &wrq, retry_mask, buffer);
+ }
+ }
+ }
+ printf("\n");
+ }
+ return(0);
+}
+
+#endif /* WIRELESS_EXT > 10 */
+
+/***************************** SCANNING *****************************/
+/*
+ * This one behave quite differently from the others
+ */
+#if WIRELESS_EXT > 13
+/*------------------------------------------------------------------*/
+/*
+ * Print one element from the scanning results
+ */
+static inline int
+print_scanning_token(struct iw_event * event, /* Extracted token */
+ int ap_num, /* AP number */
+ struct iw_range * iwrange, /* Range info */
+ int has_range)
+{
+ char buffer[128]; /* Temporary buffer */
+
+ /* Now, let's decode the event */
+ switch(event->cmd)
+ {
+ case SIOCGIWAP:
+ printf(" Cell %02d - Address: %s\n", ap_num,
+ iw_pr_ether(buffer, (unsigned char *)event->u.ap_addr.sa_data));
+ ap_num++;
+ break;
+ case SIOCGIWNWID:
+ if(event->u.nwid.disabled)
+ printf(" NWID:off/any\n");
+ else
+ printf(" NWID:%X\n", event->u.nwid.value);
+ break;
+ case SIOCGIWFREQ:
+ {
+ double freq; /* Frequency/channel */
+ freq = iw_freq2float(&(event->u.freq));
+ iw_print_freq(buffer, freq);
+ printf(" %s\n", buffer);
+ }
+ break;
+ case SIOCGIWMODE:
+ printf(" Mode:%s\n",
+ iw_operation_mode[event->u.mode]);
+ break;
+ case SIOCGIWESSID:
+ {
+ char essid[IW_ESSID_MAX_SIZE+1];
+ if((event->u.essid.pointer) && (event->u.essid.length))
+ memcpy(essid, event->u.essid.pointer, event->u.essid.length);
+ essid[event->u.essid.length] = '\0';
+ if(event->u.essid.flags)
+ {
+ /* Does it have an ESSID index ? */
+ if((event->u.essid.flags & IW_ENCODE_INDEX) > 1)
+ printf(" ESSID:\"%s\" [%d]\n", essid,
+ (event->u.essid.flags & IW_ENCODE_INDEX));
+ else
+ printf(" ESSID:\"%s\"\n", essid);
+ }
+ else
+ printf(" ESSID:off/any\n");
+ }
+ break;
+ case SIOCGIWENCODE:
+ {
+ unsigned char key[IW_ENCODING_TOKEN_MAX];
+ if(event->u.data.pointer)
+ memcpy(key, event->u.essid.pointer, event->u.data.length);
+ else
+ event->u.data.flags |= IW_ENCODE_NOKEY;
+ printf(" Encryption key:");
+ if(event->u.data.flags & IW_ENCODE_DISABLED)
+ printf("off\n");
+ else
+ {
+ /* Display the key */
+ iw_print_key(buffer, key, event->u.data.length,
+ event->u.data.flags);
+ printf("%s", buffer);
+
+ /* Other info... */
+ if((event->u.data.flags & IW_ENCODE_INDEX) > 1)
+ printf(" [%d]", event->u.data.flags & IW_ENCODE_INDEX);
+ if(event->u.data.flags & IW_ENCODE_RESTRICTED)
+ printf(" Encryption mode:restricted");
+ if(event->u.data.flags & IW_ENCODE_OPEN)
+ printf(" Encryption mode:open");
+ printf("\n");
+ }
+ }
+ break;
+ case SIOCGIWRATE:
+ iw_print_bitrate(buffer, event->u.bitrate.value);
+ printf(" Bit Rate:%s\n", buffer);
+ break;
+ case IWEVQUAL:
+ {
+ event->u.qual.updated = 0x0; /* Not that reliable, disable */
+ iw_print_stats(buffer, &event->u.qual, iwrange, has_range);
+ printf(" %s\n", buffer);
+ break;
+ }
+#if WIRELESS_EXT > 14
+ case IWEVCUSTOM:
+ {
+ char custom[IW_CUSTOM_MAX+1];
+ if((event->u.data.pointer) && (event->u.data.length))
+ memcpy(custom, event->u.data.pointer, event->u.data.length);
+ custom[event->u.data.length] = '\0';
+ printf(" Extra:%s\n", custom);
+ }
+ break;
+#endif /* WIRELESS_EXT > 14 */
+ default:
+ printf(" (Unknown Wireless Token 0x%04X)\n",
+ event->cmd);
+ } /* switch(event->cmd) */
+
+ /* May have changed */
+ return(ap_num);
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Perform a scanning on one device
+ */
+static int
+print_scanning_info(int skfd,
+ char * ifname,
+ char * args[], /* Command line args */
+ int count) /* Args count */
+{
+ struct iwreq wrq;
+ unsigned char buffer[IW_SCAN_MAX_DATA]; /* Results */
+ struct timeval tv; /* Select timeout */
+ int timeout = 5000000; /* 5s */
+
+ /* Avoid "Unused parameter" warning */
+ args = args; count = count;
+
+ /* Init timeout value -> 250ms*/
+ tv.tv_sec = 0;
+ tv.tv_usec = 250000;
+
+ /*
+ * Here we should look at the command line args and set the IW_SCAN_ flags
+ * properly
+ */
+ wrq.u.param.flags = IW_SCAN_DEFAULT;
+ wrq.u.param.value = 0; /* Later */
+
+ /* Initiate Scanning */
+ if(iw_set_ext(skfd, ifname, SIOCSIWSCAN, &wrq) < 0)
+ {
+ if(errno != EPERM)
+ {
+ fprintf(stderr, "%-8.8s Interface doesn't support scanning : %s\n\n",
+ ifname, strerror(errno));
+ return(-1);
+ }
+ /* If we don't have the permission to initiate the scan, we may
+ * still have permission to read left-over results.
+ * But, don't wait !!! */
+#if 0
+ /* Not cool, it display for non wireless interfaces... */
+ fprintf(stderr, "%-8.8s (Could not trigger scanning, just reading left-over results)\n", ifname);
+#endif
+ tv.tv_usec = 0;
+ }
+ timeout -= tv.tv_usec;
+
+ /* Forever */
+ while(1)
+ {
+ fd_set rfds; /* File descriptors for select */
+ int last_fd; /* Last fd */
+ int ret;
+
+ /* Guess what ? We must re-generate rfds each time */
+ FD_ZERO(&rfds);
+ last_fd = -1;
+
+ /* In here, add the rtnetlink fd in the list */
+
+ /* Wait until something happens */
+ ret = select(last_fd + 1, &rfds, NULL, NULL, &tv);
+
+ /* Check if there was an error */
+ if(ret < 0)
+ {
+ if(errno == EAGAIN || errno == EINTR)
+ continue;
+ fprintf(stderr, "Unhandled signal - exiting...\n");
+ return(-1);
+ }
+
+ /* Check if there was a timeout */
+ if(ret == 0)
+ {
+ /* Try to read the results */
+ wrq.u.data.pointer = buffer;
+ wrq.u.data.flags = 0;
+ wrq.u.data.length = sizeof(buffer);
+ if(iw_get_ext(skfd, ifname, SIOCGIWSCAN, &wrq) < 0)
+ {
+ /* Check if results not available yet */
+ if(errno == EAGAIN)
+ {
+ /* Restart timer for only 100ms*/
+ tv.tv_sec = 0;
+ tv.tv_usec = 100000;
+ timeout -= tv.tv_usec;
+ if(timeout > 0)
+ continue; /* Try again later */
+ }
+
+ /* Bad error */
+ fprintf(stderr, "%-8.8s Failed to read scan data : %s\n\n",
+ ifname, strerror(errno));
+ return(-2);
+ }
+ else
+ /* We have the results, go to process them */
+ break;
+ }
+
+ /* In here, check if event and event type
+ * if scan event, read results. All errors bad & no reset timeout */
+ }
+
+ if(wrq.u.data.length)
+ {
+ struct iw_event iwe;
+ struct stream_descr stream;
+ int ap_num = 1;
+ int ret;
+ struct iw_range range;
+ int has_range;
+#if 0
+ /* Debugging code. In theory useless, because it's debugged ;-) */
+ int i;
+ printf("Scan result [%02X", buffer[0]);
+ for(i = 1; i < wrq.u.data.length; i++)
+ printf(":%02X", buffer[i]);
+ printf("]\n");
+#endif
+ has_range = (iw_get_range_info(skfd, ifname, &range) >= 0);
+ printf("%-8.8s Scan completed :\n", ifname);
+ iw_init_event_stream(&stream, (char *)buffer, wrq.u.data.length);
+ do
+ {
+ /* Extract an event and print it */
+ ret = iw_extract_event_stream(&stream, &iwe);
+ if(ret > 0)
+ ap_num = print_scanning_token(&iwe, ap_num, &range, has_range);
+ }
+ while(ret > 0);
+ printf("\n");
+ }
+ else
+ printf("%-8.8s No scan results\n", ifname);
+
+ return(0);
+}
+#endif /* WIRELESS_EXT > 13 */
+
+/************************* COMMON UTILITIES *************************/
+/*
+ * This section was written by Michael Tokarev <mjt@tls.msk.ru>
+ * But modified by me ;-)
+ */
+
+/* command list */
+typedef struct iwlist_entry {
+ const char *cmd;
+ iw_enum_handler fn;
+ int min_count;
+ int max_count;
+} iwlist_cmd;
+
+static const struct iwlist_entry iwlist_cmds[] = {
+ { "frequency", print_freq_info, 0, 0 },
+ { "channel", print_freq_info, 0, 0 },
+ { "ap", print_ap_info, 0, 0 },
+ { "accesspoints", print_ap_info, 0, 0 },
+ { "bitrate", print_bitrate_info, 0, 0 },
+ { "rate", print_bitrate_info, 0, 0 },
+ { "encryption", print_keys_info, 0, 0 },
+ { "key", print_keys_info, 0, 0 },
+ { "power", print_pm_info, 0, 0 },
+ { "txpower", print_txpower_info, 0, 0 },
+#if WIRELESS_EXT > 10
+ { "retry", print_retry_info, 0, 0 },
+#endif
+#if WIRELESS_EXT > 13
+ { "scanning", print_scanning_info, 0, 5 },
+#endif
+ { NULL, NULL, 0, 0 },
+};
+
+/*------------------------------------------------------------------*/
+/*
+ * Find the most appropriate command matching the command line
+ */
+static inline const iwlist_cmd *
+find_command(const char * cmd)
+{
+ const iwlist_cmd * found = NULL;
+ int ambig = 0;
+ unsigned int len = strlen(cmd);
+ int i;
+
+ /* Go through all commands */
+ for(i = 0; iwlist_cmds[i].cmd != NULL; ++i)
+ {
+ /* No match -> next one */
+ if(strncasecmp(iwlist_cmds[i].cmd, cmd, len) != 0)
+ continue;
+
+ /* Exact match -> perfect */
+ if(len == strlen(iwlist_cmds[i].cmd))
+ return &iwlist_cmds[i];
+
+ /* Partial match */
+ if(found == NULL)
+ /* First time */
+ found = &iwlist_cmds[i];
+ else
+ /* Another time */
+ if (iwlist_cmds[i].fn != found->fn)
+ ambig = 1;
+ }
+
+ if(found == NULL)
+ {
+ fprintf(stderr, "iwlist: unknown command `%s'\n", cmd);
+ return NULL;
+ }
+
+ if(ambig)
+ {
+ fprintf(stderr, "iwlist: command `%s' is ambiguous\n", cmd);
+ return NULL;
+ }
+
+ return found;
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Display help
+ */
+static void iw_usage(int status)
+{
+ FILE* f = status ? stderr : stdout;
+ int i;
+
+ fprintf(f, "Usage: iwlist [interface] %s\n", iwlist_cmds[0].cmd);
+ for(i = 1; iwlist_cmds[i].cmd != NULL; ++i)
+ fprintf(f, " [interface] %s\n", iwlist_cmds[i].cmd);
+ exit(status);
+}
+
+/******************************* MAIN ********************************/
+
+/*------------------------------------------------------------------*/
+/*
+ * The main !
+ */
+int
+main(int argc,
+ char ** argv)
+{
+ int skfd; /* generic raw socket desc. */
+ char *dev; /* device name */
+ char *cmd; /* command */
+ char **args; /* Command arguments */
+ int count; /* Number of arguments */
+ const iwlist_cmd *iwcmd;
+
+ if(argc == 1 || argc > 3)
+ iw_usage(1);
+
+ if (!strcmp(argv[1], "-h") || !strcmp(argv[1], "--help"))
+ iw_usage(0);
+
+ /* This is also handled slightly differently */
+ if (!strcmp(argv[1], "-v") || !strcmp(argv[1], "--version"))
+ return(iw_print_version_info("iwlist"));
+
+ if (argc == 2)
+ {
+ cmd = argv[1];
+ dev = NULL;
+ args = NULL;
+ count = 0;
+ }
+ else
+ {
+ cmd = argv[2];
+ dev = argv[1];
+ args = argv + 3;
+ count = argc - 3;
+ }
+
+ /* find a command */
+ iwcmd = find_command(cmd);
+ if(iwcmd == NULL)
+ return 1;
+
+ /* Check arg numbers */
+ if(count < iwcmd->min_count)
+ {
+ fprintf(stderr, "iwlist: command `%s' needs more arguments\n", cmd);
+ return 1;
+ }
+ if(count > iwcmd->max_count)
+ {
+ fprintf(stderr, "iwlist: command `%s' needs fewer arguments\n", cmd);
+ return 1;
+ }
+
+ /* Create a channel to the NET kernel. */
+ if((skfd = iw_sockets_open()) < 0)
+ {
+ perror("socket");
+ return -1;
+ }
+
+ /* do the actual work */
+ if (dev)
+ (*iwcmd->fn)(skfd, dev, args, count);
+ else
+ iw_enum_devices(skfd, iwcmd->fn, args, count);
+
+ /* Close the socket. */
+ close(skfd);
+
+ return 0;
+}
diff --git a/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwpriv.8 b/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwpriv.8
new file mode 100644
index 0000000..d662840
--- /dev/null
+++ b/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwpriv.8
@@ -0,0 +1,138 @@
+.\" Jean II - HPLB - 96
+.\" iwpriv.8
+.\"
+.TH IWPRIV 8 "31 October 1996" "net-tools" "Linux Programmer's Manual"
+.\"
+.\" NAME part
+.\"
+.SH NAME
+iwpriv \- configure optionals (private) parameters of a wireless
+network interface
+.\"
+.\" SYNOPSIS part
+.\"
+.SH SYNOPSIS
+.BI "iwpriv [" interface ]
+.br
+.BI "iwpriv " "interface private-command " "[" private-parameters ]
+.br
+.BI "iwpriv " "interface private-command [I] " "[" private-parameters ]
+.br
+.BI "iwpriv " interface " --all"
+.br
+.BI "iwpriv " interface " roam " {on,off}
+.br
+.BI "iwpriv " interface " port " {ad-hoc,managed,N}
+.\"
+.\" DESCRIPTION part
+.\"
+.SH DESCRIPTION
+.B Iwpriv
+is the companion tool to
+.IR iwconfig (8).
+.B Iwpriv
+deals with parameters and setting specific to each driver (as opposed to
+.I iwconfig
+which deals with generic ones).
+.PP
+Without any argument,
+.B iwpriv
+list the available private commands available on each interface, and
+the parameters that they require. Using this information, the user may
+apply those interface specific commands on the specified interface.
+.PP
+In theory, the documentation of each device driver should indicate how
+to use those interface specific commands and their effect.
+.\"
+.\" PARAMETER part
+.\"
+.SH PARAMETERS
+.TP
+.IR private-command " [" private-parameters ]
+Execute the specified
+.I private-command
+on the interface.
+.br
+The command may optionally take or require arguments, and may display
+information. Therefore, the command line parameters may or may not be
+needed and should match the command expectations. The list of commands
+that
+.B iwpriv
+displays (when called without argument) should give you some hints
+about those parameters.
+.br
+However you should refer to the device driver documentation for
+information on how to properly use the command and the effect.
+.TP
+.I "private-command [I]" "[" private-parameters ]
+Idem, except that
+.I I
+(an integer) is passed to the command as a
+.IR "Token Index" .
+Only some command will use the Token Index (most will ignore it), and
+the driver documentation should tell you when it's needed.
+.TP
+.BR -a / --all
+Execute and display all the private commands that don't take any
+arguments (i.e. read only).
+.TP
+.B roam
+Enable or disable roaming, if supported. Call the private command
+.IR setroam .
+Found in the
+.I wavelan_cs
+driver.
+.TP
+.B port
+Read or configure the port type. Call the private commands
+.IR gport_type ", " sport_type ", " get_port " or " set_port
+found in the
+.IR wavelan2_cs " and " wvlan_cs " drivers."
+.\"
+.\" DISPLAY part
+.\"
+.SH DISPLAY
+For each device which support private commands,
+.I iwpriv
+will display the list of private commands available.
+.PP
+This include the name of the private command, the number or arguments
+that may be set and their type, and the number or arguments that may
+be display and their type.
+.PP
+For example, you may have the following display :
+.br
+.B "eth0 Available private ioctl :"
+.br
+.B " setqualthr (89F0) : set 1 byte & get 0"
+.br
+.B " gethisto (89F7) : set 0 & get 16 int"
+.PP
+This indicate that you may set the quality threshold and display an
+histogram of up to 16 values with the following commands :
+.br
+.I " iwpriv eth0 setqualthr 20"
+.br
+.I " iwpriv eth0 gethisto"
+.\"
+.\" AUTHOR part
+.\"
+.SH AUTHOR
+Jean Tourrilhes \- jt@hpl.hp.com
+.\"
+.\" FILES part
+.\"
+.SH FILES
+.I /proc/net/wireless
+.\"
+.\" SEE ALSO part
+.\"
+.SH SEE ALSO
+.BR ifconfig (8),
+.BR iwconfig (8),
+.BR iwlist (8),
+.BR iwspy (8),
+.BR wavelan (4),
+.BR wavelan_cs (4),
+.BR wvlan_cs (4),
+.BR netwave_cs (4).
diff --git a/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwpriv.c b/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwpriv.c
new file mode 100644
index 0000000..d9aeb5c
--- /dev/null
+++ b/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwpriv.c
@@ -0,0 +1,922 @@
+/*
+ * Wireless Tools
+ *
+ * Jean II - HPLB 97->99 - HPL 99->00
+ *
+ * Main code for "iwconfig". This is the generic tool for most
+ * manipulations...
+ * You need to link this code against "iwlib.c" and "-lm".
+ *
+ * This file is released under the GPL license.
+ * Copyright (c) 1997-2002 Jean Tourrilhes <jt@hpl.hp.com>
+ */
+
+#include "iwlib.h" /* Header */
+#include "rtk_arch.h"
+/************************** DOCUMENTATION **************************/
+
+/*
+ * IOCTL RANGES :
+ * ------------
+ * The initial implementation of iwpriv was using the SIOCDEVPRIVATE
+ * ioctl range (up to 16 ioctls - driver specific). However, this was
+ * causing some compatibility problems with other usages of those
+ * ioctls, and those ioctls are supposed to be removed.
+ * Therefore, I created a new ioctl range, at SIOCIWFIRSTPRIV. Those
+ * ioctls are specific to Wireless Extensions, so you don't have to
+ * worry about collisions with other usages. On the other hand, in the
+ * new range, the SET convention is enforced (see below).
+ * The differences are : SIOCDEVPRIVATE SIOCIWFIRSTPRIV
+ * o availability : <= 2.5.X WE > 11 (>= 2.4.13)
+ * o collisions yes no
+ * o SET convention optional enforced
+ * o number 16 32
+ *
+ * NEW DRIVER API :
+ * --------------
+ * Wireless Extension 13 introduce a new driver API. Wireless
+ * Extensions requests can be handled via a iw_handler table instead
+ * of through the regular ioctl handler.
+ * The new driver API can be handled only with the new ioctl range
+ * and enforce the GET convention (see below).
+ * The differences are : old API new API
+ * o handler do_ioctl() struct iw_handler_def
+ * o SIOCIWFIRSTPRIV WE > 11 yes
+ * o SIOCDEVPRIVATE yes no
+ * o GET convention optional enforced
+ * Note that the new API before Wireless Extension 15 contains bugs
+ * with regards to handling sub-ioctls and addr/float data types.
+ *
+ * SET/GET CONVENTION :
+ * ------------------
+ * The regular Wireless Extensions use a SET/GET convention, where
+ * the low order bit identify a SET (0) or a GET (1) request.
+ * The new ioctl range enforce the SET convention : SET request will
+ * be available to root only and can't return any arguments. If you don't
+ * like that, just use every other two ioctl.
+ * The new driver API enforce the GET convention : GET request won't
+ * be able to accept any arguments (except if its fits within (union
+ * iwreq_data)). If you don't like that, just use the old API (aka the
+ * ioctl handler).
+ * In any case, it's a good idea to not have ioctl with both SET
+ * and GET arguments. If the GET arguments doesn't fit within
+ * (union iwreq_data) and SET do, or vice versa, the current code in iwpriv
+ * won't work. One exception is if both SET and GET arguments fit within
+ * (union iwreq_data), this case should be handled safely in a GET
+ * request.
+ *
+ * SUB-IOCTLS :
+ * ----------
+ * Wireless Extension 15 introduce sub-ioctls. For some applications,
+ * 32 ioctl is not enough, and this simple mechanism allow to increase
+ * the number of ioctls by adding a sub-ioctl index to some of the ioctl
+ * (so basically a two level addressing).
+ * One might argue that at the point, some other mechanisms might be
+ * better, like using a real filesystem abstraction (/proc, driverfs, ...),
+ * but sub-ioctls are simple enough to not have much drawbacks (which means
+ * that it's a quick and dirty hack ;-).
+ *
+ * There is two slightly different variation of the sub-ioctl scheme :
+ * If the payload fit within (union iwreq_data), the first int (4 bytes)
+ * is reserved as the sub-ioctl number and the regular payload shifted by
+ * 4 bytes.
+ * If the ioctl use (struct iw_point), the sub-ioctl number is in the
+ * flags member of the structure.
+ * Then, in your handler you would just extract the sub-ioctl number
+ * and do the appropriate processing.
+ *
+ * Sub-ioctls are declared normally in the private definition table,
+ * with cmd (first arg) beeing the sub-ioctl number. Then, you need to
+ * declare the real ioctl which will process the sub-ioctls with the
+ * SAME ARGUMENTS and a NULL NAME.
+ * It could look like, for example :
+ * --------------------------------------------
+ // --- Raw access to sub-ioctl handlers ---
+ { 0x8BE0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, 0, "set_paramN" },
+ { 0x8BE1, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
+ IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_paramN" },
+ // --- sub-ioctls handlers ---
+ { 0x8BE0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "" },
+ { 0x8BE1, 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "" },
+ // --- sub-ioctls definitions ---
+ { 1, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "set_param1" },
+ { 1, 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_param1" },
+ { 2, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "set_param2" },
+ { 2, 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_param2" },
+ * --------------------------------------------
+ * And iwpriv should do the rest for you ;-)
+ *
+ * Note that version of iwpriv up to v24 (included) expect at most
+ * 16 ioctls definitions and will likely crash when given more.
+ * There is no fix that I can see, apart from recommending an upgrade
+ * of Wireless Tools. Wireless Extensions 15 will check this condition, so
+ * another workaround is restricting those extra definitions to WE-15.
+ *
+ * Another problem is that new API before Wireless Extension 15
+ * will get it wrong when passing fixed arguments of 12-15 bytes. It will
+ * try to get them inline instead of by pointer. You can fool the new API
+ * to do the right thing using fake ioctl definitions (but remember that
+ * you will get more likely to hit the limit of 16 ioctl definitions).
+ * For safety, use the ioctl handler before v15.
+ *
+ * NEW DATA TYPES (ADDR/FLOAT) :
+ * ---------------------------
+ * Wireless Tools 25 introduce two new data types, addr and float,
+ * corresponding to struct sockaddr and struct iwfreq.
+ * Those types are properly handled with Wireless Extensions 15.
+ * However, the new API before v15 won't handle them properly.
+ *
+ * The first problem is that the new API won't know their size, so
+ * won't copy them. This can be workaround with a fake ioctl definition.
+ * The second problem is that a fixed single addr won't be inlined
+ * in struct iwreq and will be passed as a pointer. This is due to an
+ * off-by-one error, where all fixed data of 16 bytes is considered too
+ * big to fit in struct iwreq.
+ *
+ * For those reasons, I would recommend to use the ioctl handler
+ * before v15 when manipulating those data.
+ *
+ * TOKEN INDEX :
+ * -----------
+ * Token index is very similar to sub-ioctl. It allow the user
+ * to specify an integer index in front of a bunch of other arguments
+ * (addresses, strings, ...).
+ * Token index works only with data passed as pointer, and is
+ * otherwise ignored. If your data would fit within struct iwreq, you
+ * need to declare the command *without* IW_PRIV_SIZE_FIXED to force
+ * this to happen (and check arg number yourself).
+ * --------------------------------------------
+ // --- Commands that would fit in struct iwreq ---
+ { 0x8BE0, IW_PRIV_TYPE_ADDR | 1, 0, "set_param_with_token" },
+ // --- No problem here ---
+ { 0x8BE1, IW_PRIV_TYPE_ADDR | IW_PRIV_SIZE_FIXED | 2, 0, "again" },
+ * --------------------------------------------
+ * The token index feature is pretty transparent, the token index
+ * will just be in the flags member of (struct iw_point). Default value
+ * (if the user doesn't specify it) will be 0. Token index itself will
+ * work with any version of Wireless Extensions.
+ * Token index is not compatible with sub-ioctl (both use the same
+ * field of struct iw_point). However, token index can be use to offer
+ * raw access to the sub-ioctl handlers (if it uses struct iw_point) :
+ * --------------------------------------------
+ // --- sub-ioctls handler ---
+ { 0x8BE0, IW_PRIV_TYPE_ADDR | IW_PRIV_SIZE_FIXED | 1, 0, "" },
+ // --- sub-ioctls definitions ---
+ { 0, IW_PRIV_TYPE_ADDR | IW_PRIV_SIZE_FIXED | 1, 0, "setaddr" },
+ { 1, IW_PRIV_TYPE_ADDR | IW_PRIV_SIZE_FIXED | 1, 0, "deladdr" },
+ // --- raw access with token index (+ iwreq workaround) ---
+ { 0x8BE0, IW_PRIV_TYPE_ADDR | 1, 0, "rawaddr" },
+ * --------------------------------------------
+ *
+ * Jean II
+ */
+
+/**************************** CONSTANTS ****************************/
+
+static const char * argtype[] = {
+ " ", "byte ", "char ", "", "int ", "addr " };
+
+#define IW_MAX_PRIV_DEF 128
+
+/* Backward compatibility */
+#ifndef IW_PRIV_TYPE_ADDR
+#define IW_PRIV_TYPE_ADDR 0x6000
+#endif /* IW_PRIV_TYPE_ADDR */
+
+/************************* MISC SUBROUTINES **************************/
+
+/*------------------------------------------------------------------*/
+/*
+ * Print usage string
+ */
+static void
+iw_usage(void)
+{
+ fprintf(stderr, "Usage: iwpriv interface [private-command [private-arguments]]\n");
+ fprintf(stderr, " interface [roam {on|off}]\n");
+ fprintf(stderr, " interface [port {ad-hoc|managed|N}]\n");
+}
+
+/************************* SETTING ROUTINES **************************/
+
+/*------------------------------------------------------------------*/
+/*
+ * Execute a private command on the interface
+ */
+static int
+set_private_cmd(int skfd, /* Socket */
+ char * args[], /* Command line args */
+ int count, /* Args count */
+ char * ifname, /* Dev name */
+ char * cmdname, /* Command name */
+ iwprivargs * priv, /* Private ioctl description */
+ int priv_num) /* Number of descriptions */
+{
+ struct iwreq wrq;
+ u_char buffer[4096]; /* Only that big in v25 and later */
+ int i = 0; /* Start with first command arg */
+ int k; /* Index in private description table */
+ int temp;
+ int subcmd = 0; /* sub-ioctl index */
+ int offset = 0; /* Space for sub-ioctl index */
+
+#if __PC__
+ int dd_4;
+ short dd_2;
+#endif
+
+//printf("set_private_cmd args[0]=%s\n",args[0]);
+
+// david
+// printf("in set_private_cmd, args[0]=%s, ifname=%s, cmdname=%s,count=%x\n",args[0], ifname, cmdname, count);
+ /* Check if we have a token index.
+ * Do it know so that sub-ioctl takes precendence, and so that we
+ * don't have to bother with it later on... */
+ if((count > 1) && (sscanf(args[0], "[%d]", &temp) == 1))
+ {
+ subcmd = temp;
+ args++;
+ count--;
+ }
+
+ /* Search the correct ioctl */
+ k = -1;
+ while((++k < priv_num) && strcmp(priv[k].name, cmdname));
+
+ /* If not found... */
+ if(k == priv_num)
+ {
+ fprintf(stderr, "Invalid command : %s\n", cmdname);
+ return(-1);
+ }
+
+ /* Watch out for sub-ioctls ! */
+ if(priv[k].cmd < SIOCDEVPRIVATE)
+ {
+ int j = -1;
+ printf("Here < ? \n");
+ /* Find the matching *real* ioctl */
+ while((++j < priv_num) && ((priv[j].name[0] != '\0') ||
+ (priv[j].set_args != priv[k].set_args) ||
+ (priv[j].get_args != priv[k].get_args)));
+
+ /* If not found... */
+ if(j == priv_num)
+ {
+ fprintf(stderr, "Invalid private ioctl definition for : %s\n", cmdname);
+ return(-1);
+ }
+
+ /* Save sub-ioctl number */
+ subcmd = priv[k].cmd;
+ /* Reserve one int (simplify alignement issues) */
+ offset = sizeof(__u32);
+ /* Use real ioctl definition from now on */
+ k = j;
+
+ printf("<mapping sub-ioctl %s to cmd 0x%X-%d>\n", cmdname,
+ priv[k].cmd, subcmd);
+ }
+
+ /* If we have to set some data */
+ if((priv[k].set_args & IW_PRIV_TYPE_MASK) && (priv[k].set_args & IW_PRIV_SIZE_MASK))
+ {
+// david
+// printf("should not be here!\n");
+ switch(priv[k].set_args & IW_PRIV_TYPE_MASK)
+ {
+ case IW_PRIV_TYPE_BYTE:
+ /* Number of args to fetch */
+ wrq.u.data.length = count;
+ if(wrq.u.data.length > (priv[k].set_args & IW_PRIV_SIZE_MASK))
+ wrq.u.data.length = priv[k].set_args & IW_PRIV_SIZE_MASK;
+
+ /* Fetch args */
+ for(; i < wrq.u.data.length; i++) {
+ sscanf(args[i], "%d", &temp);
+ buffer[i] = (char) temp;
+ }
+ break;
+
+ case IW_PRIV_TYPE_INT:
+ /* Number of args to fetch */
+ wrq.u.data.length = count;
+ if(wrq.u.data.length > (priv[k].set_args & IW_PRIV_SIZE_MASK))
+ wrq.u.data.length = priv[k].set_args & IW_PRIV_SIZE_MASK;
+
+ /* Fetch args */
+ for(; i < wrq.u.data.length; i++) {
+ sscanf(args[i], "%d", &temp);
+ ((__s32 *) buffer)[i] = (__s32) temp;
+ }
+ break;
+
+ case IW_PRIV_TYPE_CHAR:
+ if(i < count)
+ {
+ /* Size of the string to fetch */
+ wrq.u.data.length = strlen(args[i]) + 1;
+ if(wrq.u.data.length > (priv[k].set_args & IW_PRIV_SIZE_MASK))
+ wrq.u.data.length = priv[k].set_args & IW_PRIV_SIZE_MASK;
+
+ /* Fetch string */
+ memcpy(buffer, args[i], wrq.u.data.length);
+ buffer[sizeof(buffer) - 1] = '\0';
+ i++;
+ }
+ else
+ {
+ wrq.u.data.length = 1;
+ buffer[0] = '\0';
+ }
+ break;
+
+ case IW_PRIV_TYPE_FLOAT:
+ /* Number of args to fetch */
+ wrq.u.data.length = count;
+ if(wrq.u.data.length > (priv[k].set_args & IW_PRIV_SIZE_MASK))
+ wrq.u.data.length = priv[k].set_args & IW_PRIV_SIZE_MASK;
+
+ /* Fetch args */
+ for(; i < wrq.u.data.length; i++) {
+ #if 0
+ double freq;
+ if(sscanf(args[i], "%lg", &(freq)) != 1)
+ {
+ printf("Invalid float [%s]...\n", args[i]);
+ return(-1);
+ }
+ if(index(args[i], 'G')) freq *= GIGA;
+ if(index(args[i], 'M')) freq *= MEGA;
+ if(index(args[i], 'k')) freq *= KILO;
+ sscanf(args[i], "%d", &temp);
+ iw_float2freq(freq, ((struct iw_freq *) buffer) + i);
+ #endif
+ }
+ break;
+
+ case IW_PRIV_TYPE_ADDR:
+ /* Number of args to fetch */
+ wrq.u.data.length = count;
+ if(wrq.u.data.length > (priv[k].set_args & IW_PRIV_SIZE_MASK))
+ wrq.u.data.length = priv[k].set_args & IW_PRIV_SIZE_MASK;
+
+ /* Fetch args */
+ for(; i < wrq.u.data.length; i++) {
+ if(iw_in_addr(skfd, ifname, args[i],
+ ((struct sockaddr *) buffer) + i) < 0)
+ {
+ printf("Invalid address [%s]...\n", args[i]);
+ return(-1);
+ }
+ }
+ break;
+
+ default:
+ fprintf(stderr, "Not yet implemented...\n");
+ return(-1);
+ }
+
+ if((priv[k].set_args & IW_PRIV_SIZE_FIXED) && (wrq.u.data.length != (priv[k].set_args & IW_PRIV_SIZE_MASK)))
+ {
+ printf("The command %s need exactly %d argument...\n",
+ cmdname, priv[k].set_args & IW_PRIV_SIZE_MASK);
+ return(-1);
+ }
+ } /* if args to set */
+ else
+ {
+ printf("length=0?\n");
+ wrq.u.data.length = 0L;
+ }
+
+ strncpy(wrq.ifr_name, ifname, IFNAMSIZ);
+// david
+// printf("offset=%X\n", offset);
+ /* Those two tests are important. They define how the driver
+ * will have to handle the data */
+ if((priv[k].set_args & IW_PRIV_SIZE_FIXED) && ((iw_get_priv_size(priv[k].set_args) + offset) <= IFNAMSIZ))
+ {
+ /* First case : all SET args fit within wrq */
+ // for debug
+ // printf("here 1,offset=%X\n");
+ if(offset)
+ wrq.u.mode = subcmd;
+ memcpy(wrq.u.name + offset, buffer, IFNAMSIZ - offset);
+ }
+ else
+ {
+ if((priv[k].set_args == 0) && (priv[k].get_args & IW_PRIV_SIZE_FIXED) && (iw_get_priv_size(priv[k].get_args) <= IFNAMSIZ))
+ {
+ /* Second case : no SET args, GET args fit within wrq */
+ if(offset)
+ wrq.u.mode = subcmd;
+ }
+ else
+ {
+ /* Thirst case : args won't fit in wrq, or variable number of args */
+ // davud
+ // printf("here 3\n");
+ wrq.u.data.pointer = (caddr_t) buffer;
+ wrq.u.data.flags = subcmd;
+ }
+ }
+
+ /* Perform the private ioctl */
+ //printf("priv[%d].cmd=%08x",k,priv[k].cmd);
+ if(ioctl(skfd, priv[k].cmd , &wrq) < 0)
+ {
+ fprintf(stderr, "Interface doesn't accept private ioctl...\n");
+ fprintf(stderr, "%s (%X): %s\n", cmdname, priv[k].cmd, strerror(errno));
+ return(-1);
+ }
+
+ /* If we have to get some data */
+ if((priv[k].get_args & IW_PRIV_TYPE_MASK) &&
+ (priv[k].get_args & IW_PRIV_SIZE_MASK))
+ {
+ int j = 0;
+ int n = 0; /* number of args */
+
+ printf("%-8.8s %s:", ifname, cmdname);
+
+ /* Check where is the returned data */
+ if((priv[k].get_args & IW_PRIV_SIZE_FIXED) &&
+ (iw_get_priv_size(priv[k].get_args) <= IFNAMSIZ))
+ {
+ memcpy(buffer, wrq.u.name, IFNAMSIZ);
+ n = priv[k].get_args & IW_PRIV_SIZE_MASK;
+ }
+ else
+ n = wrq.u.data.length;
+
+ switch(priv[k].get_args & IW_PRIV_TYPE_MASK)
+ {
+ case IW_PRIV_TYPE_BYTE:
+ for(j = 0; j < n; j++)
+ printf("%d ", buffer[j]);
+ printf("\n");
+ break;
+
+ case IW_PRIV_TYPE_INT:
+ /* Display args */
+ for(j = 0; j < n; j++)
+ printf("%d ", ((__s32 *) buffer)[j]);
+ printf("\n");
+ break;
+
+ case IW_PRIV_TYPE_CHAR:
+ /* Display args */
+ buffer[wrq.u.data.length - 1] = '\0';
+ printf("%s\n", buffer);
+ break;
+
+ case IW_PRIV_TYPE_FLOAT:
+ {
+ printf("Set PRIV FLOAT is not allowed!\n");
+ }
+ break;
+
+ case IW_PRIV_TYPE_ADDR:
+ {
+ char scratch[128];
+ struct sockaddr * hwa;
+ /* Display args */
+ for(j = 0; j < n; j++)
+ {
+ hwa = ((struct sockaddr *) buffer) + j;
+ if(j)
+ printf(" %.*s",
+ (int) strlen(cmdname), " ");
+ printf("%s\n", iw_pr_ether(scratch, (unsigned char *)hwa->sa_data));
+ }
+ }
+ break;
+
+ default:
+ fprintf(stderr, "Not yet implemented...\n");
+ return(-1);
+ }
+ } /* if args to set */
+
+ return(0);
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Execute a private command on the interface
+ */
+static inline int
+set_private(int skfd, /* Socket */
+ char * args[], /* Command line args */
+ int count, /* Args count */
+ char * ifname) /* Dev name */
+{
+ iwprivargs priv[IW_MAX_PRIV_DEF];
+ int number; /* Max of private ioctl */
+// david
+// printf("args[0]=%s, args[1]=%s, count=%d, ifname=%s\n", args[0], args[1],
+// count, ifname);
+
+ //printf("sizeof priv=%X\n", sizeof(priv));
+ /* Read the private ioctls */
+ number = iw_get_priv_info(skfd, ifname, priv, IW_MAX_PRIV_DEF);
+
+// printf("set_private number=%d\n", number );
+
+ /* Is there any ? */
+ if(number <= 0)
+ {
+ /* Could skip this message ? */
+ fprintf(stderr, "%-8.8s no private ioctls.\n\n",
+ ifname);
+ return(-1);
+ }
+
+// printf("set_private\n");
+
+ return(set_private_cmd(skfd, args + 1, count - 1, ifname, args[0], priv, number));
+}
+
+/************************ CATALOG FUNCTIONS ************************/
+
+/*------------------------------------------------------------------*/
+/*
+ * Print on the screen in a neat fashion all the info we have collected
+ * on a device.
+ */
+static int
+print_priv_info(int skfd,
+ char * ifname,
+ char * args[],
+ int count)
+{
+ int k;
+ iwprivargs priv[IW_MAX_PRIV_DEF];
+ int n;
+
+ /* Avoid "Unused parameter" warning */
+ args = args; count = count;
+
+ /* Read the private ioctls */
+ n = iw_get_priv_info(skfd, ifname, priv, IW_MAX_PRIV_DEF);
+
+ printf("print_priv_info n=%d\n", n );
+
+ /* Is there any ? */
+ if(n <= 0)
+ {
+ /* Could skip this message ? */
+ fprintf(stderr, "%-8.8s no private ioctls.\n\n",
+ ifname);
+ }
+ else
+ {
+
+ printf("%-8.8s Available private ioctl :\n", ifname);
+ /* Print them all */
+ for(k = 0; k < n; k++)
+ if(priv[k].name[0] != '\0')
+ printf(" %-16.16s (%.4X) : set %3d %s & get %3d %s\n",
+ priv[k].name, priv[k].cmd,
+ priv[k].set_args & IW_PRIV_SIZE_MASK,
+ argtype[(priv[k].set_args & IW_PRIV_TYPE_MASK) >> 12],
+ priv[k].get_args & IW_PRIV_SIZE_MASK,
+ argtype[(priv[k].get_args & IW_PRIV_TYPE_MASK) >> 12]);
+ printf("\n");
+ }
+ return(0);
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Print on the screen in a neat fashion all the info we have collected
+ * on a device.
+ */
+static int
+print_priv_all(int skfd,
+ char * ifname,
+ char * args[],
+ int count)
+{
+ int k;
+ iwprivargs priv[IW_MAX_PRIV_DEF];
+ int n;
+
+ /* Avoid "Unused parameter" warning */
+ args = args; count = count;
+
+ /* Read the private ioctls */
+ n = iw_get_priv_info(skfd, ifname, priv, IW_MAX_PRIV_DEF);
+
+ printf("print_priv_all n=%d\n", n );
+
+ /* Is there any ? */
+ if(n <= 0)
+ {
+ /* Could skip this message ? */
+ fprintf(stderr, "%-8.8s no private ioctls.\n\n",
+ ifname);
+ }
+ else
+ {
+ printf("%-8.8s Available read-only private ioctl :\n", ifname);
+ /* Print them all */
+ for(k = 0; k < n; k++)
+ {
+
+ /* We call all ioctl that don't have a null name, don't require
+ * args and return some (avoid triggering "reset" commands) */
+ if((priv[k].name[0] != '\0') && (priv[k].set_args == 0) && (priv[k].get_args != 0))
+ {
+ printf("cmd=%08x name=%s set_args=%d get_args=%d\n",priv[k].cmd,priv[k].name , priv[k].set_args , priv[k].get_args );
+ set_private_cmd(skfd, NULL, 0, ifname, priv[k].name, priv, n);
+
+ }
+ }
+ printf("\n");
+ }
+#if 0
+ // Debug
+ printf("struct ifreq = %d ; struct iwreq = %d ; IFNAMSIZ = %d\n",
+ sizeof(struct ifreq), sizeof(struct iwreq), IFNAMSIZ);
+ printf("struct iw_freq = %d ; struct sockaddr = %d\n",
+ sizeof(struct iw_freq), sizeof(struct sockaddr));
+#endif
+ return(0);
+}
+
+/********************** PRIVATE IOCTLS MANIPS ***********************/
+/*
+ * Convenient access to some private ioctls of some devices
+ */
+
+/*------------------------------------------------------------------*/
+/*
+ * Set roaming mode on and off
+ * Found in wavelan_cs driver
+ */
+static int
+set_roaming(int skfd, /* Socket */
+ char * args[], /* Command line args */
+ int count, /* Args count */
+ char * ifname) /* Dev name */
+{
+ u_char buffer[1024];
+ struct iwreq wrq;
+ int i = 0; /* Start with first arg */
+ int k;
+ iwprivargs priv[IW_MAX_PRIV_DEF];
+ int number;
+ char RoamState; /* buffer to hold new roam state */
+ char ChangeRoamState=0; /* whether or not we are going to
+ change roam states */
+
+ /* Read the private ioctls */
+ number = iw_get_priv_info(skfd, ifname, priv, IW_MAX_PRIV_DEF);
+
+ printf("set_roaming number=%d\n", number );
+
+ /* Is there any ? */
+ if(number <= 0)
+ {
+ /* Could skip this message ? */
+ fprintf(stderr, "%-8.8s no private ioctls.\n\n",
+ ifname);
+ return(-1);
+ }
+
+ if(count != 1)
+ {
+ iw_usage();
+ return(-1);
+ }
+
+ if(!strcasecmp(args[i], "on"))
+ {
+ printf("%-8.8s enable roaming\n", ifname);
+ if(!number)
+ {
+ fprintf(stderr, "This device doesn't support roaming\n");
+ return(-1);
+ }
+ ChangeRoamState=1;
+ RoamState=1;
+ }
+ else
+ if(!strcasecmp(args[i], "off"))
+ {
+ i++;
+ printf("%-8.8s disable roaming\n", ifname);
+ if(!number)
+ {
+ fprintf(stderr, "This device doesn't support roaming\n");
+ return(-1);
+ }
+ ChangeRoamState=1;
+ RoamState=0;
+ }
+ else
+ {
+ iw_usage();
+ return(-1);
+ }
+
+ if(ChangeRoamState)
+ {
+ k = -1;
+ while((++k < number) && strcmp(priv[k].name, "setroam"));
+ if(k == number)
+ {
+ fprintf(stderr, "This device doesn't support roaming\n");
+ return(-1);
+ }
+ strncpy(wrq.ifr_name, ifname, IFNAMSIZ);
+
+ buffer[0]=RoamState;
+
+ memcpy(wrq.u.name, &buffer, IFNAMSIZ);
+
+ if(ioctl(skfd, priv[k].cmd, &wrq) < 0)
+ {
+ fprintf(stderr, "Roaming support is broken.\n");
+ return(-1);
+ }
+ }
+
+ return(0);
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Get and set the port type
+ * Found in wavelan2_cs and wvlan_cs drivers
+ */
+static int
+port_type(int skfd, /* Socket */
+ char * args[], /* Command line args */
+ int count, /* Args count */
+ char * ifname) /* Dev name */
+{
+ struct iwreq wrq;
+ int i = 0; /* Start with first arg */
+ int k;
+ iwprivargs priv[IW_MAX_PRIV_DEF];
+ int number;
+ char ptype = 0;
+ char * modes[] = { "invalid", "managed (BSS)", "reserved", "ad-hoc" };
+
+ /* Read the private ioctls */
+ number = iw_get_priv_info(skfd, ifname, priv, IW_MAX_PRIV_DEF);
+
+ printf("port_type number=%d\n", number );
+
+ /* Is there any ? */
+ if(number <= 0)
+ {
+ /* Could skip this message ? */
+ fprintf(stderr, "%-8.8s no private ioctls.\n\n", ifname);
+ return(-1);
+ }
+
+ /* Arguments ? */
+ if(count == 0)
+ {
+ /* So, we just want to see the current value... */
+ k = -1;
+ while((++k < number) && strcmp(priv[k].name, "gport_type") &&
+ strcmp(priv[k].name, "get_port"));
+ if(k == number)
+ {
+ fprintf(stderr, "This device doesn't support getting port type\n");
+ return(-1);
+ }
+ strncpy(wrq.ifr_name, ifname, IFNAMSIZ);
+
+ /* Get it */
+ if(ioctl(skfd, priv[k].cmd, &wrq) < 0)
+ {
+ fprintf(stderr, "Port type support is broken.\n");
+ exit(0);
+ }
+ ptype = *wrq.u.name;
+
+ /* Display it */
+ printf("%-8.8s Current port mode is %s <port type is %d>.\n\n",
+ ifname, modes[(int) ptype], ptype);
+
+ return(0);
+ }
+
+ if(count != 1)
+ {
+ iw_usage();
+ return(-1);
+ }
+
+ /* Read it */
+ /* As a string... */
+ k = 0;
+ while((k < 4) && strncasecmp(args[i], modes[k], 2))
+ k++;
+ if(k < 4)
+ ptype = k;
+ else
+ /* ...or as an integer */
+ if(sscanf(args[i], "%d", (int *) &ptype) != 1)
+ {
+ iw_usage();
+ return(-1);
+ }
+
+ k = -1;
+ while((++k < number) && strcmp(priv[k].name, "sport_type") &&
+ strcmp(priv[k].name, "set_port"));
+ if(k == number)
+ {
+ fprintf(stderr, "This device doesn't support setting port type\n");
+ return(-1);
+ }
+ strncpy(wrq.ifr_name, ifname, IFNAMSIZ);
+
+ *(wrq.u.name) = ptype;
+
+ if(ioctl(skfd, priv[k].cmd, &wrq) < 0)
+ {
+ fprintf(stderr, "Invalid port type (or setting not allowed)\n");
+ return(-1);
+ }
+
+ return(0);
+}
+
+/******************************* MAIN ********************************/
+
+/*------------------------------------------------------------------*/
+/*
+ * The main !
+ */
+int
+main(int argc,
+ char ** argv)
+{
+ int skfd; /* generic raw socket desc. */
+ int goterr = 0;
+
+ if( argc==2 && (!strcmp(argv[1], "version")) )
+ {
+ printf("version : %s\n",DAEMON_VERSION);
+ return 0;
+ }
+
+ /* Create a channel to the NET kernel. */
+ if((skfd = iw_sockets_open()) < 0)
+ {
+ perror("socket");
+ return(-1);
+ }
+
+ /* No argument : show the list of all device + info */
+ if(argc == 1)
+ iw_enum_devices(skfd, &print_priv_info, NULL, 0);
+ else
+ /* Special cases take one... */
+ /* All */
+ if((!strncmp(argv[1], "-a", 2)) || (!strcmp(argv[1], "--all")))
+ iw_enum_devices(skfd, &print_priv_all, NULL, 0);
+ else
+ /* Help */
+ if((!strncmp(argv[1], "-h", 2)) || (!strcmp(argv[1], "--help")))
+ iw_usage();
+ else
+ /* Version */
+ if (!strcmp(argv[1], "-v") || !strcmp(argv[1], "--version"))
+ goterr = iw_print_version_info("iwpriv");
+ else
+ /* The device name must be the first argument */
+ /* Name only : show for that device only */
+ if(argc == 2)
+ print_priv_info(skfd, argv[1], NULL, 0);
+ else
+ /* Special cases take two... */
+ /* All */
+ if((!strncmp(argv[2], "-a", 2)) ||
+ (!strcmp(argv[2], "--all")))
+ print_priv_all(skfd, argv[1], NULL, 0);
+ else
+ /* Roaming */
+ if(!strncmp(argv[2], "roam", 4))
+ goterr = set_roaming(skfd, argv + 3, argc - 3, argv[1]);
+ else
+ /* Port type */
+ if(!strncmp(argv[2], "port", 4))
+ goterr = port_type(skfd, argv + 3, argc - 3, argv[1]);
+ else
+ {
+ goterr = set_private(skfd, argv + 2, argc - 2, argv[1]);
+ }
+ /* Close the socket. */
+ close(skfd);
+
+ return(goterr);
+}
diff --git a/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwpriv.txt b/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwpriv.txt
new file mode 100644
index 0000000..a0835c2
--- /dev/null
+++ b/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwpriv.txt
@@ -0,0 +1,16150 @@
+
+iwpriv: file format elf32-tradbigmips
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 .reginfo 00000018 00400094 00400094 00000094 2**2
+ CONTENTS, ALLOC, LOAD, READONLY, DATA, LINK_ONCE_SAME_SIZE
+ 1 .text 0000f7c0 004000b0 004000b0 000000b0 2**4
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 2 .rodata 00001b00 0040f870 0040f870 0000f870 2**4
+ CONTENTS, ALLOC, LOAD, READONLY, DATA
+ 3 .data 00000260 10000000 10000000 00012000 2**4
+ CONTENTS, ALLOC, LOAD, DATA
+ 4 .got 000002c0 10000260 10000260 00012260 2**4
+ CONTENTS, ALLOC, LOAD, DATA
+ 5 .sbss 0000000c 10000520 10000520 00012520 2**2
+ ALLOC
+ 6 .bss 000006ac 10000530 10000524 00012524 2**4
+ ALLOC
+ 7 .comment 00000024 00000000 00000000 00012524 2**0
+ CONTENTS, READONLY
+ 8 .pdr 00001800 00000000 00000000 00012548 2**2
+ CONTENTS, READONLY
+Disassembly of section .text:
+
+004000b0 <__start>:
+ 4000b0: 04100001 bltzal zero,4000b8 <__start+0x8>
+ 4000b4: 00000000 nop
+ 4000b8: 3c1c0fc1 lui gp,0xfc1
+ 4000bc: 279c8198 addiu gp,gp,-32360
+ 4000c0: 039fe021 addu gp,gp,ra
+ 4000c4: 0000f821 move ra,zero
+ 4000c8: 8fa40000 lw a0,0(sp)
+ 4000cc: 27a50004 addiu a1,sp,4
+ 4000d0: 24860001 addiu a2,a0,1
+ 4000d4: 00063080 sll a2,a2,0x2
+ 4000d8: 00c53020 add a2,a2,a1
+ 4000dc: 8f998154 lw t9,-32428(gp)
+ 4000e0: 00000000 nop
+ 4000e4: 0320f809 jalr t9
+ 4000e8: 00000000 nop
+ 4000ec: 1000ffff b 4000ec <__start+0x3c>
+ 4000f0: 00000000 nop
+ 4000f4: 004016d4 0x4016d4
+ ...
+
+00400100 <iw_usage>:
+ 400100: 3c1c0fc1 lui gp,0xfc1
+ 400104: 279c8150 addiu gp,gp,-32432
+ 400108: 0399e021 addu gp,gp,t9
+ 40010c: 27bdffe0 addiu sp,sp,-32
+ 400110: afbc0010 sw gp,16(sp)
+ 400114: 8f8780e8 lw a3,-32536(gp)
+ 400118: 00000000 nop
+ 40011c: 8ce70000 lw a3,0(a3)
+ 400120: 8f848018 lw a0,-32744(gp)
+ 400124: 00000000 nop
+ 400128: 2484f89c addiu a0,a0,-1892
+ 40012c: 24050001 li a1,1
+ 400130: 2406003e li a2,62
+ 400134: afbf001c sw ra,28(sp)
+ 400138: afbc0018 sw gp,24(sp)
+ 40013c: 8f9980c8 lw t9,-32568(gp)
+ 400140: 00000000 nop
+ 400144: 0320f809 jalr t9
+ 400148: 00000000 nop
+ 40014c: 8fbc0010 lw gp,16(sp)
+ 400150: 00000000 nop
+ 400154: 8f8780e8 lw a3,-32536(gp)
+ 400158: 00000000 nop
+ 40015c: 8ce70000 lw a3,0(a3)
+ 400160: 8f848018 lw a0,-32744(gp)
+ 400164: 00000000 nop
+ 400168: 2484f8dc addiu a0,a0,-1828
+ 40016c: 24050001 li a1,1
+ 400170: 24060028 li a2,40
+ 400174: 8f9980c8 lw t9,-32568(gp)
+ 400178: 00000000 nop
+ 40017c: 0320f809 jalr t9
+ 400180: 00000000 nop
+ 400184: 8fbc0010 lw gp,16(sp)
+ 400188: 00000000 nop
+ 40018c: 8f8780e8 lw a3,-32536(gp)
+ 400190: 00000000 nop
+ 400194: 8ce70000 lw a3,0(a3)
+ 400198: 8f848018 lw a0,-32744(gp)
+ 40019c: 00000000 nop
+ 4001a0: 2484f908 addiu a0,a0,-1784
+ 4001a4: 24050001 li a1,1
+ 4001a8: 24060032 li a2,50
+ 4001ac: 8f9980c8 lw t9,-32568(gp)
+ 4001b0: 00000000 nop
+ 4001b4: 0320f809 jalr t9
+ 4001b8: 00000000 nop
+ 4001bc: 8fbc0010 lw gp,16(sp)
+ 4001c0: 8fbf001c lw ra,28(sp)
+ 4001c4: 00000000 nop
+ 4001c8: 03e00008 jr ra
+ 4001cc: 27bd0020 addiu sp,sp,32
+
+004001d0 <set_private_cmd>:
+ 4001d0: 3c1c0fc1 lui gp,0xfc1
+ 4001d4: 279c8080 addiu gp,gp,-32640
+ 4001d8: 0399e021 addu gp,gp,t9
+ 4001dc: 27bdef00 addiu sp,sp,-4352
+ 4001e0: afbc0018 sw gp,24(sp)
+ 4001e4: afb110d4 sw s1,4308(sp)
+ 4001e8: 00c08821 move s1,a2
+ 4001ec: 2a220002 slti v0,s1,2
+ 4001f0: afbe10f4 sw s8,4340(sp)
+ 4001f4: afb710ec sw s7,4332(sp)
+ 4001f8: afb410e0 sw s4,4320(sp)
+ 4001fc: afb310dc sw s3,4316(sp)
+ 400200: afb210d8 sw s2,4312(sp)
+ 400204: afbf10f8 sw ra,4344(sp)
+ 400208: afbc10f0 sw gp,4336(sp)
+ 40020c: afb610e8 sw s6,4328(sp)
+ 400210: afb510e4 sw s5,4324(sp)
+ 400214: afb010d0 sw s0,4304(sp)
+ 400218: afa41100 sw a0,4352(sp)
+ 40021c: 00a0a021 move s4,a1
+ 400220: afa7110c sw a3,4364(sp)
+ 400224: 8fbe1110 lw s8,4368(sp)
+ 400228: 8fb71114 lw s7,4372(sp)
+ 40022c: 8fb21118 lw s2,4376(sp)
+ 400230: 00009821 move s3,zero
+ 400234: afa010c4 sw zero,4292(sp)
+ 400238: 1440000e bnez v0,400274 <set_private_cmd+0xa4>
+ 40023c: afa010c8 sw zero,4296(sp)
+ 400240: 8e840000 lw a0,0(s4)
+ 400244: 8f858018 lw a1,-32744(gp)
+ 400248: 00000000 nop
+ 40024c: 24a5f93c addiu a1,a1,-1732
+ 400250: 27a610c0 addiu a2,sp,4288
+ 400254: 8f998170 lw t9,-32400(gp)
+ 400258: 00000000 nop
+ 40025c: 0320f809 jalr t9
+ 400260: 00000000 nop
+ 400264: 8fbc0018 lw gp,24(sp)
+ 400268: 24030001 li v1,1
+ 40026c: 10430276 beq v0,v1,400c48 <set_private_cmd+0xa78>
+ 400270: 00000000 nop
+ 400274: 2416ffff li s6,-1
+ 400278: 26f0fff0 addiu s0,s7,-16
+ 40027c: 26d60001 addiu s6,s6,1
+ 400280: 26100018 addiu s0,s0,24
+ 400284: 02d2102a slt v0,s6,s2
+ 400288: 03c02821 move a1,s8
+ 40028c: 10400008 beqz v0,4002b0 <set_private_cmd+0xe0>
+ 400290: 02002021 move a0,s0
+ 400294: 8f998120 lw t9,-32480(gp)
+ 400298: 00000000 nop
+ 40029c: 0320f809 jalr t9
+ 4002a0: 00000000 nop
+ 4002a4: 8fbc0018 lw gp,24(sp)
+ 4002a8: 1440fff4 bnez v0,40027c <set_private_cmd+0xac>
+ 4002ac: 00000000 nop
+ 4002b0: 12d20257 beq s6,s2,400c10 <set_private_cmd+0xa40>
+ 4002b4: 0016a840 sll s5,s6,0x1
+ 4002b8: 02b61021 addu v0,s5,s6
+ 4002bc: 000210c0 sll v0,v0,0x3
+ 4002c0: 00572021 addu a0,v0,s7
+ 4002c4: 8c830000 lw v1,0(a0)
+ 4002c8: 340289ef li v0,0x89ef
+ 4002cc: 0043102b sltu v0,v0,v1
+ 4002d0: 14400029 bnez v0,400378 <set_private_cmd+0x1a8>
+ 4002d4: 02a03821 move a3,s5
+ 4002d8: 00803021 move a2,a0
+ 4002dc: 2405ffff li a1,-1
+ 4002e0: 26e4ffe8 addiu a0,s7,-24
+ 4002e4: 24a50001 addiu a1,a1,1
+ 4002e8: 00b2102a slt v0,a1,s2
+ 4002ec: 1040000a beqz v0,400318 <set_private_cmd+0x148>
+ 4002f0: 24840018 addiu a0,a0,24
+ 4002f4: 80820008 lb v0,8(a0)
+ 4002f8: 00000000 nop
+ 4002fc: 1440fff9 bnez v0,4002e4 <set_private_cmd+0x114>
+ 400300: 00000000 nop
+ 400304: 8c830004 lw v1,4(a0)
+ 400308: 8cc20004 lw v0,4(a2)
+ 40030c: 00000000 nop
+ 400310: 1462fff4 bne v1,v0,4002e4 <set_private_cmd+0x114>
+ 400314: 00000000 nop
+ 400318: 10b2022f beq a1,s2,400bd8 <set_private_cmd+0xa08>
+ 40031c: 00f61821 addu v1,a3,s6
+ 400320: 000318c0 sll v1,v1,0x3
+ 400324: 00a0b021 move s6,a1
+ 400328: 0016a840 sll s5,s6,0x1
+ 40032c: 00771821 addu v1,v1,s7
+ 400330: 8c630000 lw v1,0(v1)
+ 400334: 02b61021 addu v0,s5,s6
+ 400338: 000210c0 sll v0,v0,0x3
+ 40033c: afa310c4 sw v1,4292(sp)
+ 400340: 00571021 addu v0,v0,s7
+ 400344: 8c460000 lw a2,0(v0)
+ 400348: 00603821 move a3,v1
+ 40034c: 8f848018 lw a0,-32744(gp)
+ 400350: 00000000 nop
+ 400354: 2484f944 addiu a0,a0,-1724
+ 400358: 24030004 li v1,4
+ 40035c: 03c02821 move a1,s8
+ 400360: afa310c8 sw v1,4296(sp)
+ 400364: 8f9982b0 lw t9,-32080(gp)
+ 400368: 00000000 nop
+ 40036c: 0320f809 jalr t9
+ 400370: 00000000 nop
+ 400374: 8fbc0018 lw gp,24(sp)
+ 400378: 02b61021 addu v0,s5,s6
+ 40037c: 000210c0 sll v0,v0,0x3
+ 400380: 00571021 addu v0,v0,s7
+ 400384: 94420004 lhu v0,4(v0)
+ 400388: 00000000 nop
+ 40038c: 30437000 andi v1,v0,0x7000
+ 400390: 1060020f beqz v1,400bd0 <set_private_cmd+0xa00>
+ 400394: 304507ff andi a1,v0,0x7ff
+ 400398: 30a4ffff andi a0,a1,0xffff
+ 40039c: 1080020c beqz a0,400bd0 <set_private_cmd+0xa00>
+ 4003a0: 24024000 li v0,16384
+ 4003a4: 106201e5 beq v1,v0,400b3c <set_private_cmd+0x96c>
+ 4003a8: 28624001 slti v0,v1,16385
+ 4003ac: 1040019d beqz v0,400a24 <set_private_cmd+0x854>
+ 4003b0: 24025000 li v0,20480
+ 4003b4: 24021000 li v0,4096
+ 4003b8: 10620179 beq v1,v0,4009a0 <set_private_cmd+0x7d0>
+ 4003bc: 24022000 li v0,8192
+ 4003c0: 1062001b beq v1,v0,400430 <set_private_cmd+0x260>
+ 4003c4: 00000000 nop
+ 4003c8: 8f8780e8 lw a3,-32536(gp)
+ 4003cc: 00000000 nop
+ 4003d0: 8ce70000 lw a3,0(a3)
+ 4003d4: 8f848018 lw a0,-32744(gp)
+ 4003d8: 00000000 nop
+ 4003dc: 2484f96c addiu a0,a0,-1684
+ 4003e0: 24050001 li a1,1
+ 4003e4: 24060017 li a2,23
+ 4003e8: 8f9980c8 lw t9,-32568(gp)
+ 4003ec: 00000000 nop
+ 4003f0: 0320f809 jalr t9
+ 4003f4: 00000000 nop
+ 4003f8: 8fbc0018 lw gp,24(sp)
+ 4003fc: 2402ffff li v0,-1
+ 400400: 8fbf10f8 lw ra,4344(sp)
+ 400404: 8fbe10f4 lw s8,4340(sp)
+ 400408: 8fb710ec lw s7,4332(sp)
+ 40040c: 8fb610e8 lw s6,4328(sp)
+ 400410: 8fb510e4 lw s5,4324(sp)
+ 400414: 8fb410e0 lw s4,4320(sp)
+ 400418: 8fb310dc lw s3,4316(sp)
+ 40041c: 8fb210d8 lw s2,4312(sp)
+ 400420: 8fb110d4 lw s1,4308(sp)
+ 400424: 8fb010d0 lw s0,4304(sp)
+ 400428: 03e00008 jr ra
+ 40042c: 27bd1100 addiu sp,sp,4352
+ 400430: 1a200158 blez s1,400994 <set_private_cmd+0x7c4>
+ 400434: 24020001 li v0,1
+ 400438: 8e840000 lw a0,0(s4)
+ 40043c: 8f998068 lw t9,-32664(gp)
+ 400440: 00000000 nop
+ 400444: 0320f809 jalr t9
+ 400448: 00000000 nop
+ 40044c: 8fbc0018 lw gp,24(sp)
+ 400450: 02b61821 addu v1,s5,s6
+ 400454: 000318c0 sll v1,v1,0x3
+ 400458: 00771821 addu v1,v1,s7
+ 40045c: 94640004 lhu a0,4(v1)
+ 400460: 24420001 addiu v0,v0,1
+ 400464: 308407ff andi a0,a0,0x7ff
+ 400468: 3043ffff andi v1,v0,0xffff
+ 40046c: 0083182b sltu v1,a0,v1
+ 400470: 10600002 beqz v1,40047c <set_private_cmd+0x2ac>
+ 400474: a7a20034 sh v0,52(sp)
+ 400478: a7a40034 sh a0,52(sp)
+ 40047c: 8e850000 lw a1,0(s4)
+ 400480: 97a60034 lhu a2,52(sp)
+ 400484: 27b40040 addiu s4,sp,64
+ 400488: 02802021 move a0,s4
+ 40048c: 8f998254 lw t9,-32172(gp)
+ 400490: 00000000 nop
+ 400494: 0320f809 jalr t9
+ 400498: 00000000 nop
+ 40049c: 8fbc0018 lw gp,24(sp)
+ 4004a0: a3a0103f sb zero,4159(sp)
+ 4004a4: 02b61021 addu v0,s5,s6
+ 4004a8: 000210c0 sll v0,v0,0x3
+ 4004ac: 00571021 addu v0,v0,s7
+ 4004b0: 94460004 lhu a2,4(v0)
+ 4004b4: 00000000 nop
+ 4004b8: 30c30800 andi v1,a2,0x800
+ 4004bc: 1060000f beqz v1,4004fc <set_private_cmd+0x32c>
+ 4004c0: 30c607ff andi a2,a2,0x7ff
+ 4004c4: 97a20034 lhu v0,52(sp)
+ 4004c8: 00000000 nop
+ 4004cc: 1046000b beq v0,a2,4004fc <set_private_cmd+0x32c>
+ 4004d0: 03c02821 move a1,s8
+ 4004d4: 8f848018 lw a0,-32744(gp)
+ 4004d8: 00000000 nop
+ 4004dc: 2484f984 addiu a0,a0,-1660
+ 4004e0: 8f9982b0 lw t9,-32080(gp)
+ 4004e4: 00000000 nop
+ 4004e8: 0320f809 jalr t9
+ 4004ec: 00000000 nop
+ 4004f0: 8fbc0018 lw gp,24(sp)
+ 4004f4: 1000ffc2 b 400400 <set_private_cmd+0x230>
+ 4004f8: 2402ffff li v0,-1
+ 4004fc: 8fa5110c lw a1,4364(sp)
+ 400500: 27a40020 addiu a0,sp,32
+ 400504: 24060010 li a2,16
+ 400508: 8f998188 lw t9,-32376(gp)
+ 40050c: 00000000 nop
+ 400510: 0320f809 jalr t9
+ 400514: 00000000 nop
+ 400518: 8fbc0018 lw gp,24(sp)
+ 40051c: 02b61821 addu v1,s5,s6
+ 400520: 000318c0 sll v1,v1,0x3
+ 400524: 00771821 addu v1,v1,s7
+ 400528: 94620004 lhu v0,4(v1)
+ 40052c: 00000000 nop
+ 400530: 30420800 andi v0,v0,0x800
+ 400534: 104000f9 beqz v0,40091c <set_private_cmd+0x74c>
+ 400538: 02b61021 addu v0,s5,s6
+ 40053c: 94640004 lhu a0,4(v1)
+ 400540: 8f998118 lw t9,-32488(gp)
+ 400544: 00000000 nop
+ 400548: 0320f809 jalr t9
+ 40054c: 00000000 nop
+ 400550: 8fbc0018 lw gp,24(sp)
+ 400554: 8fa310c8 lw v1,4296(sp)
+ 400558: 00000000 nop
+ 40055c: 00431021 addu v0,v0,v1
+ 400560: 28420011 slti v0,v0,17
+ 400564: 104000ed beqz v0,40091c <set_private_cmd+0x74c>
+ 400568: 02b61021 addu v0,s5,s6
+ 40056c: 10600005 beqz v1,400584 <set_private_cmd+0x3b4>
+ 400570: 27a40030 addiu a0,sp,48
+ 400574: 8fa210c4 lw v0,4292(sp)
+ 400578: 00000000 nop
+ 40057c: afa20030 sw v0,48(sp)
+ 400580: 8fa310c8 lw v1,4296(sp)
+ 400584: 27b40040 addiu s4,sp,64
+ 400588: 24060010 li a2,16
+ 40058c: 00c33023 subu a2,a2,v1
+ 400590: 00832021 addu a0,a0,v1
+ 400594: 02802821 move a1,s4
+ 400598: 8f998254 lw t9,-32172(gp)
+ 40059c: 00000000 nop
+ 4005a0: 0320f809 jalr t9
+ 4005a4: 00000000 nop
+ 4005a8: 8fbc0018 lw gp,24(sp)
+ 4005ac: 02b61021 addu v0,s5,s6
+ 4005b0: 000210c0 sll v0,v0,0x3
+ 4005b4: 00578021 addu s0,v0,s7
+ 4005b8: 8e050000 lw a1,0(s0)
+ 4005bc: 8fa41100 lw a0,4352(sp)
+ 4005c0: 27a60020 addiu a2,sp,32
+ 4005c4: 8f9982b8 lw t9,-32072(gp)
+ 4005c8: 00000000 nop
+ 4005cc: 0320f809 jalr t9
+ 4005d0: 00000000 nop
+ 4005d4: 8fbc0018 lw gp,24(sp)
+ 4005d8: 044000a8 bltz v0,40087c <set_private_cmd+0x6ac>
+ 4005dc: 24050001 li a1,1
+ 4005e0: 96030006 lhu v1,6(s0)
+ 4005e4: 00000000 nop
+ 4005e8: 30627000 andi v0,v1,0x7000
+ 4005ec: 1040ff84 beqz v0,400400 <set_private_cmd+0x230>
+ 4005f0: 00001021 move v0,zero
+ 4005f4: 306207ff andi v0,v1,0x7ff
+ 4005f8: 1040003a beqz v0,4006e4 <set_private_cmd+0x514>
+ 4005fc: 03c03021 move a2,s8
+ 400600: 8fa5110c lw a1,4364(sp)
+ 400604: 8f848018 lw a0,-32744(gp)
+ 400608: 00000000 nop
+ 40060c: 2484f9b0 addiu a0,a0,-1616
+ 400610: 8f9982b0 lw t9,-32080(gp)
+ 400614: 00000000 nop
+ 400618: 0320f809 jalr t9
+ 40061c: 00000000 nop
+ 400620: 8fbc0018 lw gp,24(sp)
+ 400624: 96030006 lhu v1,6(s0)
+ 400628: 00000000 nop
+ 40062c: 30630800 andi v1,v1,0x800
+ 400630: 1060008f beqz v1,400870 <set_private_cmd+0x6a0>
+ 400634: 00000000 nop
+ 400638: 96040006 lhu a0,6(s0)
+ 40063c: 8f998118 lw t9,-32488(gp)
+ 400640: 00000000 nop
+ 400644: 0320f809 jalr t9
+ 400648: 00000000 nop
+ 40064c: 8fbc0018 lw gp,24(sp)
+ 400650: 28420011 slti v0,v0,17
+ 400654: 10400086 beqz v0,400870 <set_private_cmd+0x6a0>
+ 400658: 00000000 nop
+ 40065c: 96020006 lhu v0,6(s0)
+ 400660: 8fa30030 lw v1,48(sp)
+ 400664: 305207ff andi s2,v0,0x7ff
+ 400668: 8fa20034 lw v0,52(sp)
+ 40066c: afa30040 sw v1,64(sp)
+ 400670: afa20044 sw v0,68(sp)
+ 400674: 8fa30038 lw v1,56(sp)
+ 400678: 8fa2003c lw v0,60(sp)
+ 40067c: afa30048 sw v1,72(sp)
+ 400680: afa2004c sw v0,76(sp)
+ 400684: 02b61021 addu v0,s5,s6
+ 400688: 000210c0 sll v0,v0,0x3
+ 40068c: 00571021 addu v0,v0,s7
+ 400690: 94430006 lhu v1,6(v0)
+ 400694: 24024000 li v0,16384
+ 400698: 30637000 andi v1,v1,0x7000
+ 40069c: 1062005c beq v1,v0,400810 <set_private_cmd+0x640>
+ 4006a0: 28624001 slti v0,v1,16385
+ 4006a4: 10400024 beqz v0,400738 <set_private_cmd+0x568>
+ 4006a8: 24025000 li v0,20480
+ 4006ac: 24021000 li v0,4096
+ 4006b0: 1062000e beq v1,v0,4006ec <set_private_cmd+0x51c>
+ 4006b4: 24022000 li v0,8192
+ 4006b8: 1462ff43 bne v1,v0,4003c8 <set_private_cmd+0x1f8>
+ 4006bc: 27a40040 addiu a0,sp,64
+ 4006c0: 97a20034 lhu v0,52(sp)
+ 4006c4: 00000000 nop
+ 4006c8: 00441021 addu v0,v0,a0
+ 4006cc: a040ffff sb zero,-1(v0)
+ 4006d0: 8f998240 lw t9,-32192(gp)
+ 4006d4: 00000000 nop
+ 4006d8: 0320f809 jalr t9
+ 4006dc: 00000000 nop
+ 4006e0: 8fbc0018 lw gp,24(sp)
+ 4006e4: 1000ff46 b 400400 <set_private_cmd+0x230>
+ 4006e8: 00001021 move v0,zero
+ 4006ec: 12400058 beqz s2,400850 <set_private_cmd+0x680>
+ 4006f0: 00008021 move s0,zero
+ 4006f4: 27b40040 addiu s4,sp,64
+ 4006f8: 02901021 addu v0,s4,s0
+ 4006fc: 90450000 lbu a1,0(v0)
+ 400700: 8f848018 lw a0,-32744(gp)
+ 400704: 00000000 nop
+ 400708: 2484f9bc addiu a0,a0,-1604
+ 40070c: 26100001 addiu s0,s0,1
+ 400710: 8f9982b0 lw t9,-32080(gp)
+ 400714: 00000000 nop
+ 400718: 0320f809 jalr t9
+ 40071c: 00000000 nop
+ 400720: 8fbc0018 lw gp,24(sp)
+ 400724: 0212182a slt v1,s0,s2
+ 400728: 1460fff3 bnez v1,4006f8 <set_private_cmd+0x528>
+ 40072c: 2404000a li a0,10
+ 400730: 10000048 b 400854 <set_private_cmd+0x684>
+ 400734: 00000000 nop
+ 400738: 10620030 beq v1,v0,4007fc <set_private_cmd+0x62c>
+ 40073c: 00000000 nop
+ 400740: 24026000 li v0,24576
+ 400744: 1462ff20 bne v1,v0,4003c8 <set_private_cmd+0x1f8>
+ 400748: 00000000 nop
+ 40074c: 1240ffe5 beqz s2,4006e4 <set_private_cmd+0x514>
+ 400750: 00008021 move s0,zero
+ 400754: 27b40040 addiu s4,sp,64
+ 400758: 27b31040 addiu s3,sp,4160
+ 40075c: 00101100 sll v0,s0,0x4
+ 400760: 03c02021 move a0,s8
+ 400764: 12000012 beqz s0,4007b0 <set_private_cmd+0x5e0>
+ 400768: 02828821 addu s1,s4,v0
+ 40076c: 8f998068 lw t9,-32664(gp)
+ 400770: 00000000 nop
+ 400774: 0320f809 jalr t9
+ 400778: 00000000 nop
+ 40077c: 8fbc0018 lw gp,24(sp)
+ 400780: 00402821 move a1,v0
+ 400784: 8f868018 lw a2,-32744(gp)
+ 400788: 00000000 nop
+ 40078c: 24c6f9c4 addiu a2,a2,-1596
+ 400790: 8f848018 lw a0,-32744(gp)
+ 400794: 00000000 nop
+ 400798: 2484f9d8 addiu a0,a0,-1576
+ 40079c: 8f9982b0 lw t9,-32080(gp)
+ 4007a0: 00000000 nop
+ 4007a4: 0320f809 jalr t9
+ 4007a8: 00000000 nop
+ 4007ac: 8fbc0018 lw gp,24(sp)
+ 4007b0: 26240002 addiu a0,s1,2
+ 4007b4: 27a51040 addiu a1,sp,4160
+ 4007b8: 8f99819c lw t9,-32356(gp)
+ 4007bc: 00000000 nop
+ 4007c0: 0320f809 jalr t9
+ 4007c4: 00000000 nop
+ 4007c8: 8fbc0018 lw gp,24(sp)
+ 4007cc: 26100001 addiu s0,s0,1
+ 4007d0: 02602021 move a0,s3
+ 4007d4: 8f998240 lw t9,-32192(gp)
+ 4007d8: 00000000 nop
+ 4007dc: 0320f809 jalr t9
+ 4007e0: 00000000 nop
+ 4007e4: 8fbc0018 lw gp,24(sp)
+ 4007e8: 0212182a slt v1,s0,s2
+ 4007ec: 1460ffdb bnez v1,40075c <set_private_cmd+0x58c>
+ 4007f0: 00001021 move v0,zero
+ 4007f4: 1000ff02 b 400400 <set_private_cmd+0x230>
+ 4007f8: 00000000 nop
+ 4007fc: 8f848018 lw a0,-32744(gp)
+ 400800: 00000000 nop
+ 400804: 2484f9e8 addiu a0,a0,-1560
+ 400808: 1000ffb1 b 4006d0 <set_private_cmd+0x500>
+ 40080c: 00000000 nop
+ 400810: 12400010 beqz s2,400854 <set_private_cmd+0x684>
+ 400814: 2404000a li a0,10
+ 400818: 02408021 move s0,s2
+ 40081c: 27b10040 addiu s1,sp,64
+ 400820: 8e250000 lw a1,0(s1)
+ 400824: 8f848018 lw a0,-32744(gp)
+ 400828: 00000000 nop
+ 40082c: 2484f9bc addiu a0,a0,-1604
+ 400830: 2610ffff addiu s0,s0,-1
+ 400834: 8f9982b0 lw t9,-32080(gp)
+ 400838: 00000000 nop
+ 40083c: 0320f809 jalr t9
+ 400840: 00000000 nop
+ 400844: 8fbc0018 lw gp,24(sp)
+ 400848: 1600fff5 bnez s0,400820 <set_private_cmd+0x650>
+ 40084c: 26310004 addiu s1,s1,4
+ 400850: 2404000a li a0,10
+ 400854: 8f9982c8 lw t9,-32056(gp)
+ 400858: 00000000 nop
+ 40085c: 0320f809 jalr t9
+ 400860: 00000000 nop
+ 400864: 8fbc0018 lw gp,24(sp)
+ 400868: 1000fee5 b 400400 <set_private_cmd+0x230>
+ 40086c: 00001021 move v0,zero
+ 400870: 97b20034 lhu s2,52(sp)
+ 400874: 1000ff84 b 400688 <set_private_cmd+0x4b8>
+ 400878: 02b61021 addu v0,s5,s6
+ 40087c: 8f8780e8 lw a3,-32536(gp)
+ 400880: 00000000 nop
+ 400884: 8ce70000 lw a3,0(a3)
+ 400888: 2406002a li a2,42
+ 40088c: 8f848018 lw a0,-32744(gp)
+ 400890: 00000000 nop
+ 400894: 2484fa08 addiu a0,a0,-1528
+ 400898: 8f9980c8 lw t9,-32568(gp)
+ 40089c: 00000000 nop
+ 4008a0: 0320f809 jalr t9
+ 4008a4: 00000000 nop
+ 4008a8: 8fbc0018 lw gp,24(sp)
+ 4008ac: 00000000 nop
+ 4008b0: 8f9980a0 lw t9,-32608(gp)
+ 4008b4: 00000000 nop
+ 4008b8: 0320f809 jalr t9
+ 4008bc: 00000000 nop
+ 4008c0: 8fbc0018 lw gp,24(sp)
+ 4008c4: 8c440000 lw a0,0(v0)
+ 4008c8: 8f99828c lw t9,-32116(gp)
+ 4008cc: 00000000 nop
+ 4008d0: 0320f809 jalr t9
+ 4008d4: 00000000 nop
+ 4008d8: 8fbc0018 lw gp,24(sp)
+ 4008dc: 8e070000 lw a3,0(s0)
+ 4008e0: 8f8480e8 lw a0,-32536(gp)
+ 4008e4: 00000000 nop
+ 4008e8: 8c840000 lw a0,0(a0)
+ 4008ec: 8f858018 lw a1,-32744(gp)
+ 4008f0: 00000000 nop
+ 4008f4: 24a5fa34 addiu a1,a1,-1484
+ 4008f8: 03c03021 move a2,s8
+ 4008fc: afa20010 sw v0,16(sp)
+ 400900: 8f9981c4 lw t9,-32316(gp)
+ 400904: 00000000 nop
+ 400908: 0320f809 jalr t9
+ 40090c: 00000000 nop
+ 400910: 8fbc0018 lw gp,24(sp)
+ 400914: 1000feba b 400400 <set_private_cmd+0x230>
+ 400918: 2402ffff li v0,-1
+ 40091c: 000210c0 sll v0,v0,0x3
+ 400920: 00572821 addu a1,v0,s7
+ 400924: 8ca40004 lw a0,4(a1)
+ 400928: 3c02ffff lui v0,0xffff
+ 40092c: 34420800 ori v0,v0,0x800
+ 400930: 00822024 and a0,a0,v0
+ 400934: 24030800 li v1,2048
+ 400938: 10830006 beq a0,v1,400954 <set_private_cmd+0x784>
+ 40093c: 00000000 nop
+ 400940: 8fa210c4 lw v0,4292(sp)
+ 400944: 27b40040 addiu s4,sp,64
+ 400948: afb40030 sw s4,48(sp)
+ 40094c: 1000ff17 b 4005ac <set_private_cmd+0x3dc>
+ 400950: a7a20036 sh v0,54(sp)
+ 400954: 94a40006 lhu a0,6(a1)
+ 400958: 8f998118 lw t9,-32488(gp)
+ 40095c: 00000000 nop
+ 400960: 0320f809 jalr t9
+ 400964: 00000000 nop
+ 400968: 8fbc0018 lw gp,24(sp)
+ 40096c: 28420011 slti v0,v0,17
+ 400970: 1040fff3 beqz v0,400940 <set_private_cmd+0x770>
+ 400974: 00000000 nop
+ 400978: 8fa210c8 lw v0,4296(sp)
+ 40097c: 00000000 nop
+ 400980: 1040ff0b beqz v0,4005b0 <set_private_cmd+0x3e0>
+ 400984: 02b61021 addu v0,s5,s6
+ 400988: 8fa310c4 lw v1,4292(sp)
+ 40098c: 1000ff08 b 4005b0 <set_private_cmd+0x3e0>
+ 400990: afa30030 sw v1,48(sp)
+ 400994: a7a20034 sh v0,52(sp)
+ 400998: 1000fec2 b 4004a4 <set_private_cmd+0x2d4>
+ 40099c: a3a00040 sb zero,64(sp)
+ 4009a0: 3222ffff andi v0,s1,0xffff
+ 4009a4: 0082102b sltu v0,a0,v0
+ 4009a8: 10400002 beqz v0,4009b4 <set_private_cmd+0x7e4>
+ 4009ac: a7b10034 sh s1,52(sp)
+ 4009b0: a7a50034 sh a1,52(sp)
+ 4009b4: 97a20034 lhu v0,52(sp)
+ 4009b8: 00000000 nop
+ 4009bc: 1040feba beqz v0,4004a8 <set_private_cmd+0x2d8>
+ 4009c0: 02b61021 addu v0,s5,s6
+ 4009c4: 00131080 sll v0,s3,0x2
+ 4009c8: 00548021 addu s0,v0,s4
+ 4009cc: 27b110c0 addiu s1,sp,4288
+ 4009d0: 27b40040 addiu s4,sp,64
+ 4009d4: 8e040000 lw a0,0(s0)
+ 4009d8: 8f858018 lw a1,-32744(gp)
+ 4009dc: 00000000 nop
+ 4009e0: 24a5fa44 addiu a1,a1,-1468
+ 4009e4: 27a610c0 addiu a2,sp,4288
+ 4009e8: 8f998170 lw t9,-32400(gp)
+ 4009ec: 00000000 nop
+ 4009f0: 0320f809 jalr t9
+ 4009f4: 00000000 nop
+ 4009f8: 8fbc0018 lw gp,24(sp)
+ 4009fc: 92230003 lbu v1,3(s1)
+ 400a00: 02931021 addu v0,s4,s3
+ 400a04: a0430000 sb v1,0(v0)
+ 400a08: 97a40034 lhu a0,52(sp)
+ 400a0c: 26730001 addiu s3,s3,1
+ 400a10: 0264202a slt a0,s3,a0
+ 400a14: 1480ffef bnez a0,4009d4 <set_private_cmd+0x804>
+ 400a18: 26100004 addiu s0,s0,4
+ 400a1c: 1000fea2 b 4004a8 <set_private_cmd+0x2d8>
+ 400a20: 02b61021 addu v0,s5,s6
+ 400a24: 10620036 beq v1,v0,400b00 <set_private_cmd+0x930>
+ 400a28: 24026000 li v0,24576
+ 400a2c: 1462fe66 bne v1,v0,4003c8 <set_private_cmd+0x1f8>
+ 400a30: 02b61021 addu v0,s5,s6
+ 400a34: 000210c0 sll v0,v0,0x3
+ 400a38: 00571021 addu v0,v0,s7
+ 400a3c: 94440004 lhu a0,4(v0)
+ 400a40: 3223ffff andi v1,s1,0xffff
+ 400a44: 308407ff andi a0,a0,0x7ff
+ 400a48: 0083182b sltu v1,a0,v1
+ 400a4c: 10600002 beqz v1,400a58 <set_private_cmd+0x888>
+ 400a50: a7b10034 sh s1,52(sp)
+ 400a54: a7a40034 sh a0,52(sp)
+ 400a58: 97a20034 lhu v0,52(sp)
+ 400a5c: 00000000 nop
+ 400a60: 1040fe91 beqz v0,4004a8 <set_private_cmd+0x2d8>
+ 400a64: 02b61021 addu v0,s5,s6
+ 400a68: 00131080 sll v0,s3,0x2
+ 400a6c: 00548021 addu s0,v0,s4
+ 400a70: 27b40040 addiu s4,sp,64
+ 400a74: 00131100 sll v0,s3,0x4
+ 400a78: 00548821 addu s1,v0,s4
+ 400a7c: 02009021 move s2,s0
+ 400a80: 8e060000 lw a2,0(s0)
+ 400a84: 8fa41100 lw a0,4352(sp)
+ 400a88: 8fa5110c lw a1,4364(sp)
+ 400a8c: 02203821 move a3,s1
+ 400a90: 8f99825c lw t9,-32164(gp)
+ 400a94: 00000000 nop
+ 400a98: 0320f809 jalr t9
+ 400a9c: 00000000 nop
+ 400aa0: 8fbc0018 lw gp,24(sp)
+ 400aa4: 26730001 addiu s3,s3,1
+ 400aa8: 26100004 addiu s0,s0,4
+ 400aac: 26310010 addiu s1,s1,16
+ 400ab0: 04400008 bltz v0,400ad4 <set_private_cmd+0x904>
+ 400ab4: 02401821 move v1,s2
+ 400ab8: 97a20034 lhu v0,52(sp)
+ 400abc: 00000000 nop
+ 400ac0: 0262102a slt v0,s3,v0
+ 400ac4: 1440ffee bnez v0,400a80 <set_private_cmd+0x8b0>
+ 400ac8: 24720004 addiu s2,v1,4
+ 400acc: 1000fe76 b 4004a8 <set_private_cmd+0x2d8>
+ 400ad0: 02b61021 addu v0,s5,s6
+ 400ad4: 8e450000 lw a1,0(s2)
+ 400ad8: 8f848018 lw a0,-32744(gp)
+ 400adc: 00000000 nop
+ 400ae0: 2484fa48 addiu a0,a0,-1464
+ 400ae4: 8f9982b0 lw t9,-32080(gp)
+ 400ae8: 00000000 nop
+ 400aec: 0320f809 jalr t9
+ 400af0: 00000000 nop
+ 400af4: 8fbc0018 lw gp,24(sp)
+ 400af8: 1000fe41 b 400400 <set_private_cmd+0x230>
+ 400afc: 2402ffff li v0,-1
+ 400b00: 3222ffff andi v0,s1,0xffff
+ 400b04: 0082102b sltu v0,a0,v0
+ 400b08: 10400002 beqz v0,400b14 <set_private_cmd+0x944>
+ 400b0c: a7b10034 sh s1,52(sp)
+ 400b10: a7a50034 sh a1,52(sp)
+ 400b14: 97a20034 lhu v0,52(sp)
+ 400b18: 00000000 nop
+ 400b1c: 1040fe61 beqz v0,4004a4 <set_private_cmd+0x2d4>
+ 400b20: 00401821 move v1,v0
+ 400b24: 26730001 addiu s3,s3,1
+ 400b28: 0263102a slt v0,s3,v1
+ 400b2c: 1440fffd bnez v0,400b24 <set_private_cmd+0x954>
+ 400b30: 02b61021 addu v0,s5,s6
+ 400b34: 1000fe5d b 4004ac <set_private_cmd+0x2dc>
+ 400b38: 000210c0 sll v0,v0,0x3
+ 400b3c: 02b61021 addu v0,s5,s6
+ 400b40: 000210c0 sll v0,v0,0x3
+ 400b44: 00571021 addu v0,v0,s7
+ 400b48: 94440004 lhu a0,4(v0)
+ 400b4c: 3223ffff andi v1,s1,0xffff
+ 400b50: 308407ff andi a0,a0,0x7ff
+ 400b54: 0083182b sltu v1,a0,v1
+ 400b58: 10600002 beqz v1,400b64 <set_private_cmd+0x994>
+ 400b5c: a7b10034 sh s1,52(sp)
+ 400b60: a7a40034 sh a0,52(sp)
+ 400b64: 97a20034 lhu v0,52(sp)
+ 400b68: 00000000 nop
+ 400b6c: 1040fe4e beqz v0,4004a8 <set_private_cmd+0x2d8>
+ 400b70: 02b61021 addu v0,s5,s6
+ 400b74: 27b10020 addiu s1,sp,32
+ 400b78: 00138080 sll s0,s3,0x2
+ 400b7c: 02141021 addu v0,s0,s4
+ 400b80: 8c440000 lw a0,0(v0)
+ 400b84: 8f858018 lw a1,-32744(gp)
+ 400b88: 00000000 nop
+ 400b8c: 24a5fa44 addiu a1,a1,-1468
+ 400b90: 27a610c0 addiu a2,sp,4288
+ 400b94: 8f998170 lw t9,-32400(gp)
+ 400b98: 00000000 nop
+ 400b9c: 0320f809 jalr t9
+ 400ba0: 00000000 nop
+ 400ba4: 8fbc0018 lw gp,24(sp)
+ 400ba8: 8fa310c0 lw v1,4288(sp)
+ 400bac: 02118021 addu s0,s0,s1
+ 400bb0: ae030020 sw v1,32(s0)
+ 400bb4: 97a20034 lhu v0,52(sp)
+ 400bb8: 26730001 addiu s3,s3,1
+ 400bbc: 0262102a slt v0,s3,v0
+ 400bc0: 1440ffee bnez v0,400b7c <set_private_cmd+0x9ac>
+ 400bc4: 00138080 sll s0,s3,0x2
+ 400bc8: 1000fe37 b 4004a8 <set_private_cmd+0x2d8>
+ 400bcc: 02b61021 addu v0,s5,s6
+ 400bd0: 1000fe4a b 4004fc <set_private_cmd+0x32c>
+ 400bd4: a7a00034 sh zero,52(sp)
+ 400bd8: 8f8480e8 lw a0,-32536(gp)
+ 400bdc: 00000000 nop
+ 400be0: 8c840000 lw a0,0(a0)
+ 400be4: 8f858018 lw a1,-32744(gp)
+ 400be8: 00000000 nop
+ 400bec: 24a5fa64 addiu a1,a1,-1436
+ 400bf0: 03c03021 move a2,s8
+ 400bf4: 8f9981c4 lw t9,-32316(gp)
+ 400bf8: 00000000 nop
+ 400bfc: 0320f809 jalr t9
+ 400c00: 00000000 nop
+ 400c04: 8fbc0018 lw gp,24(sp)
+ 400c08: 1000fdfd b 400400 <set_private_cmd+0x230>
+ 400c0c: 2402ffff li v0,-1
+ 400c10: 8f8480e8 lw a0,-32536(gp)
+ 400c14: 00000000 nop
+ 400c18: 8c840000 lw a0,0(a0)
+ 400c1c: 8f858018 lw a1,-32744(gp)
+ 400c20: 00000000 nop
+ 400c24: 24a5fa90 addiu a1,a1,-1392
+ 400c28: 03c03021 move a2,s8
+ 400c2c: 8f9981c4 lw t9,-32316(gp)
+ 400c30: 00000000 nop
+ 400c34: 0320f809 jalr t9
+ 400c38: 00000000 nop
+ 400c3c: 8fbc0018 lw gp,24(sp)
+ 400c40: 1000fdef b 400400 <set_private_cmd+0x230>
+ 400c44: 2402ffff li v0,-1
+ 400c48: 8fa210c0 lw v0,4288(sp)
+ 400c4c: 26940004 addiu s4,s4,4
+ 400c50: afa210c4 sw v0,4292(sp)
+ 400c54: 1000fd87 b 400274 <set_private_cmd+0xa4>
+ 400c58: 2631ffff addiu s1,s1,-1
+
+00400c5c <print_priv_info>:
+ 400c5c: 3c1c0fc0 lui gp,0xfc0
+ 400c60: 279c75f4 addiu gp,gp,30196
+ 400c64: 0399e021 addu gp,gp,t9
+ 400c68: 27bdf3c0 addiu sp,sp,-3136
+ 400c6c: afbc0020 sw gp,32(sp)
+ 400c70: 27a60028 addiu a2,sp,40
+ 400c74: 24070080 li a3,128
+ 400c78: afb10c2c sw s1,3116(sp)
+ 400c7c: afb00c28 sw s0,3112(sp)
+ 400c80: afbf0c38 sw ra,3128(sp)
+ 400c84: afbc0c34 sw gp,3124(sp)
+ 400c88: afb20c30 sw s2,3120(sp)
+ 400c8c: 00a08821 move s1,a1
+ 400c90: 8f998074 lw t9,-32652(gp)
+ 400c94: 00000000 nop
+ 400c98: 0320f809 jalr t9
+ 400c9c: 00000000 nop
+ 400ca0: 8fbc0020 lw gp,32(sp)
+ 400ca4: 00408021 move s0,v0
+ 400ca8: 1a00003b blez s0,400d98 <print_priv_info+0x13c>
+ 400cac: 02202821 move a1,s1
+ 400cb0: 8f848018 lw a0,-32744(gp)
+ 400cb4: 00000000 nop
+ 400cb8: 2484faa8 addiu a0,a0,-1368
+ 400cbc: 8f9982b0 lw t9,-32080(gp)
+ 400cc0: 00000000 nop
+ 400cc4: 0320f809 jalr t9
+ 400cc8: 00000000 nop
+ 400ccc: 8fbc0020 lw gp,32(sp)
+ 400cd0: 1a000025 blez s0,400d68 <print_priv_info+0x10c>
+ 400cd4: 2404000a li a0,10
+ 400cd8: 02008821 move s1,s0
+ 400cdc: 8f92801c lw s2,-32740(gp)
+ 400ce0: 00000000 nop
+ 400ce4: 26520000 addiu s2,s2,0
+ 400ce8: 27b00028 addiu s0,sp,40
+ 400cec: 82020008 lb v0,8(s0)
+ 400cf0: 26050008 addiu a1,s0,8
+ 400cf4: 8f848018 lw a0,-32744(gp)
+ 400cf8: 00000000 nop
+ 400cfc: 2484facc addiu a0,a0,-1332
+ 400d00: 10400016 beqz v0,400d5c <print_priv_info+0x100>
+ 400d04: 2631ffff addiu s1,s1,-1
+ 400d08: 96070004 lhu a3,4(s0)
+ 400d0c: 96080006 lhu t0,6(s0)
+ 400d10: 30e27000 andi v0,a3,0x7000
+ 400d14: 31037000 andi v1,t0,0x7000
+ 400d18: 00021282 srl v0,v0,0xa
+ 400d1c: 00031a82 srl v1,v1,0xa
+ 400d20: 00521021 addu v0,v0,s2
+ 400d24: 00721821 addu v1,v1,s2
+ 400d28: 8c490000 lw t1,0(v0)
+ 400d2c: 8c6a0000 lw t2,0(v1)
+ 400d30: 8e060000 lw a2,0(s0)
+ 400d34: 310807ff andi t0,t0,0x7ff
+ 400d38: 30e707ff andi a3,a3,0x7ff
+ 400d3c: afa90010 sw t1,16(sp)
+ 400d40: afa80014 sw t0,20(sp)
+ 400d44: afaa0018 sw t2,24(sp)
+ 400d48: 8f9982b0 lw t9,-32080(gp)
+ 400d4c: 00000000 nop
+ 400d50: 0320f809 jalr t9
+ 400d54: 00000000 nop
+ 400d58: 8fbc0020 lw gp,32(sp)
+ 400d5c: 1620ffe3 bnez s1,400cec <print_priv_info+0x90>
+ 400d60: 26100018 addiu s0,s0,24
+ 400d64: 2404000a li a0,10
+ 400d68: 8f9982c8 lw t9,-32056(gp)
+ 400d6c: 00000000 nop
+ 400d70: 0320f809 jalr t9
+ 400d74: 00000000 nop
+ 400d78: 8fbc0020 lw gp,32(sp)
+ 400d7c: 8fbf0c38 lw ra,3128(sp)
+ 400d80: 8fb20c30 lw s2,3120(sp)
+ 400d84: 8fb10c2c lw s1,3116(sp)
+ 400d88: 8fb00c28 lw s0,3112(sp)
+ 400d8c: 00001021 move v0,zero
+ 400d90: 03e00008 jr ra
+ 400d94: 27bd0c40 addiu sp,sp,3136
+ 400d98: 8f8480e8 lw a0,-32536(gp)
+ 400d9c: 00000000 nop
+ 400da0: 8c840000 lw a0,0(a0)
+ 400da4: 8f858018 lw a1,-32744(gp)
+ 400da8: 00000000 nop
+ 400dac: 24a5fb04 addiu a1,a1,-1276
+ 400db0: 02203021 move a2,s1
+ 400db4: 8f9981c4 lw t9,-32316(gp)
+ 400db8: 00000000 nop
+ 400dbc: 0320f809 jalr t9
+ 400dc0: 00000000 nop
+ 400dc4: 8fbc0020 lw gp,32(sp)
+ 400dc8: 1000ffec b 400d7c <print_priv_info+0x120>
+ 400dcc: 00000000 nop
+
+00400dd0 <print_priv_all>:
+ 400dd0: 3c1c0fc0 lui gp,0xfc0
+ 400dd4: 279c7480 addiu gp,gp,29824
+ 400dd8: 0399e021 addu gp,gp,t9
+ 400ddc: 27bdf3b8 addiu sp,sp,-3144
+ 400de0: afbc0020 sw gp,32(sp)
+ 400de4: 27a60028 addiu a2,sp,40
+ 400de8: 24070080 li a3,128
+ 400dec: afb50c3c sw s5,3132(sp)
+ 400df0: afb30c34 sw s3,3124(sp)
+ 400df4: afb20c30 sw s2,3120(sp)
+ 400df8: afbf0c44 sw ra,3140(sp)
+ 400dfc: afbc0c40 sw gp,3136(sp)
+ 400e00: afb40c38 sw s4,3128(sp)
+ 400e04: afb10c2c sw s1,3116(sp)
+ 400e08: afb00c28 sw s0,3112(sp)
+ 400e0c: 0080a821 move s5,a0
+ 400e10: 00a09821 move s3,a1
+ 400e14: 8f998074 lw t9,-32652(gp)
+ 400e18: 00000000 nop
+ 400e1c: 0320f809 jalr t9
+ 400e20: 00000000 nop
+ 400e24: 8fbc0020 lw gp,32(sp)
+ 400e28: 00409021 move s2,v0
+ 400e2c: 1a40003a blez s2,400f18 <print_priv_all+0x148>
+ 400e30: 02602821 move a1,s3
+ 400e34: 8f848018 lw a0,-32744(gp)
+ 400e38: 00000000 nop
+ 400e3c: 2484fb24 addiu a0,a0,-1244
+ 400e40: 8f9982b0 lw t9,-32080(gp)
+ 400e44: 00000000 nop
+ 400e48: 0320f809 jalr t9
+ 400e4c: 00000000 nop
+ 400e50: 8fbc0020 lw gp,32(sp)
+ 400e54: 1a40000f blez s2,400e94 <print_priv_all+0xc4>
+ 400e58: 2404000a li a0,10
+ 400e5c: 27b00028 addiu s0,sp,40
+ 400e60: 0200a021 move s4,s0
+ 400e64: 02408821 move s1,s2
+ 400e68: 82020008 lb v0,8(s0)
+ 400e6c: 00000000 nop
+ 400e70: 10400005 beqz v0,400e88 <print_priv_all+0xb8>
+ 400e74: 2631ffff addiu s1,s1,-1
+ 400e78: 96020004 lhu v0,4(s0)
+ 400e7c: 00000000 nop
+ 400e80: 10400013 beqz v0,400ed0 <print_priv_all+0x100>
+ 400e84: 26030008 addiu v1,s0,8
+ 400e88: 1620fff7 bnez s1,400e68 <print_priv_all+0x98>
+ 400e8c: 26100018 addiu s0,s0,24
+ 400e90: 2404000a li a0,10
+ 400e94: 8f9982c8 lw t9,-32056(gp)
+ 400e98: 00000000 nop
+ 400e9c: 0320f809 jalr t9
+ 400ea0: 00000000 nop
+ 400ea4: 8fbc0020 lw gp,32(sp)
+ 400ea8: 8fbf0c44 lw ra,3140(sp)
+ 400eac: 8fb50c3c lw s5,3132(sp)
+ 400eb0: 8fb40c38 lw s4,3128(sp)
+ 400eb4: 8fb30c34 lw s3,3124(sp)
+ 400eb8: 8fb20c30 lw s2,3120(sp)
+ 400ebc: 8fb10c2c lw s1,3116(sp)
+ 400ec0: 8fb00c28 lw s0,3112(sp)
+ 400ec4: 00001021 move v0,zero
+ 400ec8: 03e00008 jr ra
+ 400ecc: 27bd0c48 addiu sp,sp,3144
+ 400ed0: 96020006 lhu v0,6(s0)
+ 400ed4: 02a02021 move a0,s5
+ 400ed8: 00002821 move a1,zero
+ 400edc: 00003021 move a2,zero
+ 400ee0: 1040ffe9 beqz v0,400e88 <print_priv_all+0xb8>
+ 400ee4: 02603821 move a3,s3
+ 400ee8: afa30010 sw v1,16(sp)
+ 400eec: afb40014 sw s4,20(sp)
+ 400ef0: afb20018 sw s2,24(sp)
+ 400ef4: 8f998020 lw t9,-32736(gp)
+ 400ef8: 00000000 nop
+ 400efc: 273901d0 addiu t9,t9,464
+ 400f00: 00000000 nop
+ 400f04: 0320f809 jalr t9
+ 400f08: 00000000 nop
+ 400f0c: 8fbc0020 lw gp,32(sp)
+ 400f10: 1000ffdd b 400e88 <print_priv_all+0xb8>
+ 400f14: 00000000 nop
+ 400f18: 8f8480e8 lw a0,-32536(gp)
+ 400f1c: 00000000 nop
+ 400f20: 8c840000 lw a0,0(a0)
+ 400f24: 8f858018 lw a1,-32744(gp)
+ 400f28: 00000000 nop
+ 400f2c: 24a5fb04 addiu a1,a1,-1276
+ 400f30: 02603021 move a2,s3
+ 400f34: 8f9981c4 lw t9,-32316(gp)
+ 400f38: 00000000 nop
+ 400f3c: 0320f809 jalr t9
+ 400f40: 00000000 nop
+ 400f44: 8fbc0020 lw gp,32(sp)
+ 400f48: 1000ffd7 b 400ea8 <print_priv_all+0xd8>
+ 400f4c: 00000000 nop
+
+00400f50 <set_roaming>:
+ 400f50: 3c1c0fc0 lui gp,0xfc0
+ 400f54: 279c7300 addiu gp,gp,29440
+ 400f58: 0399e021 addu gp,gp,t9
+ 400f5c: 27bdefa0 addiu sp,sp,-4192
+ 400f60: afbc0010 sw gp,16(sp)
+ 400f64: afb5104c sw s5,4172(sp)
+ 400f68: afb31044 sw s3,4164(sp)
+ 400f6c: 27b50438 addiu s5,sp,1080
+ 400f70: 00e09821 move s3,a3
+ 400f74: afb1103c sw s1,4156(sp)
+ 400f78: afb01038 sw s0,4152(sp)
+ 400f7c: 00a08821 move s1,a1
+ 400f80: 00c08021 move s0,a2
+ 400f84: 02602821 move a1,s3
+ 400f88: 02a03021 move a2,s5
+ 400f8c: 24070080 li a3,128
+ 400f90: afb61050 sw s6,4176(sp)
+ 400f94: afb21040 sw s2,4160(sp)
+ 400f98: afbf1058 sw ra,4184(sp)
+ 400f9c: afbc1054 sw gp,4180(sp)
+ 400fa0: afb41048 sw s4,4168(sp)
+ 400fa4: 0080b021 move s6,a0
+ 400fa8: 8f998074 lw t9,-32652(gp)
+ 400fac: 00000000 nop
+ 400fb0: 0320f809 jalr t9
+ 400fb4: 00000000 nop
+ 400fb8: 8fbc0010 lw gp,16(sp)
+ 400fbc: 00409021 move s2,v0
+ 400fc0: 1a400090 blez s2,401204 <set_roaming+0x2b4>
+ 400fc4: 02603021 move a2,s3
+ 400fc8: 24020001 li v0,1
+ 400fcc: 12020013 beq s0,v0,40101c <set_roaming+0xcc>
+ 400fd0: 00000000 nop
+ 400fd4: 8f998020 lw t9,-32736(gp)
+ 400fd8: 00000000 nop
+ 400fdc: 27390100 addiu t9,t9,256
+ 400fe0: 00000000 nop
+ 400fe4: 0320f809 jalr t9
+ 400fe8: 00000000 nop
+ 400fec: 8fbc0010 lw gp,16(sp)
+ 400ff0: 2402ffff li v0,-1
+ 400ff4: 8fbf1058 lw ra,4184(sp)
+ 400ff8: 8fb61050 lw s6,4176(sp)
+ 400ffc: 8fb5104c lw s5,4172(sp)
+ 401000: 8fb41048 lw s4,4168(sp)
+ 401004: 8fb31044 lw s3,4164(sp)
+ 401008: 8fb21040 lw s2,4160(sp)
+ 40100c: 8fb1103c lw s1,4156(sp)
+ 401010: 8fb01038 lw s0,4152(sp)
+ 401014: 03e00008 jr ra
+ 401018: 27bd1060 addiu sp,sp,4192
+ 40101c: 8e240000 lw a0,0(s1)
+ 401020: 8f858018 lw a1,-32744(gp)
+ 401024: 00000000 nop
+ 401028: 24a5fb54 addiu a1,a1,-1196
+ 40102c: 8f998184 lw t9,-32380(gp)
+ 401030: 00000000 nop
+ 401034: 0320f809 jalr t9
+ 401038: 00000000 nop
+ 40103c: 8fbc0010 lw gp,16(sp)
+ 401040: 10400066 beqz v0,4011dc <set_roaming+0x28c>
+ 401044: 02602821 move a1,s3
+ 401048: 8e240000 lw a0,0(s1)
+ 40104c: 8f858018 lw a1,-32744(gp)
+ 401050: 00000000 nop
+ 401054: 24a5fb58 addiu a1,a1,-1192
+ 401058: 8f998184 lw t9,-32380(gp)
+ 40105c: 00000000 nop
+ 401060: 0320f809 jalr t9
+ 401064: 00000000 nop
+ 401068: 8fbc0010 lw gp,16(sp)
+ 40106c: 1440ffd9 bnez v0,400fd4 <set_roaming+0x84>
+ 401070: 02602821 move a1,s3
+ 401074: 8f848018 lw a0,-32744(gp)
+ 401078: 00000000 nop
+ 40107c: 2484fb5c addiu a0,a0,-1188
+ 401080: 8f9982b0 lw t9,-32080(gp)
+ 401084: 00000000 nop
+ 401088: 0320f809 jalr t9
+ 40108c: 00000000 nop
+ 401090: 8fbc0010 lw gp,16(sp)
+ 401094: 0000a021 move s4,zero
+ 401098: 2411ffff li s1,-1
+ 40109c: 26b0fff0 addiu s0,s5,-16
+ 4010a0: 26310001 addiu s1,s1,1
+ 4010a4: 26100018 addiu s0,s0,24
+ 4010a8: 0232102a slt v0,s1,s2
+ 4010ac: 8f858018 lw a1,-32744(gp)
+ 4010b0: 00000000 nop
+ 4010b4: 24a5fb78 addiu a1,a1,-1160
+ 4010b8: 10400008 beqz v0,4010dc <set_roaming+0x18c>
+ 4010bc: 02002021 move a0,s0
+ 4010c0: 8f998120 lw t9,-32480(gp)
+ 4010c4: 00000000 nop
+ 4010c8: 0320f809 jalr t9
+ 4010cc: 00000000 nop
+ 4010d0: 8fbc0010 lw gp,16(sp)
+ 4010d4: 1440fff2 bnez v0,4010a0 <set_roaming+0x150>
+ 4010d8: 00000000 nop
+ 4010dc: 12320030 beq s1,s2,4011a0 <set_roaming+0x250>
+ 4010e0: 27b00418 addiu s0,sp,1048
+ 4010e4: 02602821 move a1,s3
+ 4010e8: 02002021 move a0,s0
+ 4010ec: 24060010 li a2,16
+ 4010f0: 8f998188 lw t9,-32376(gp)
+ 4010f4: 00000000 nop
+ 4010f8: 0320f809 jalr t9
+ 4010fc: 00000000 nop
+ 401100: 8fbc0010 lw gp,16(sp)
+ 401104: a3b40018 sb s4,24(sp)
+ 401108: 8fa30018 lw v1,24(sp)
+ 40110c: 8fa4001c lw a0,28(sp)
+ 401110: 00111040 sll v0,s1,0x1
+ 401114: afa30428 sw v1,1064(sp)
+ 401118: afa4042c sw a0,1068(sp)
+ 40111c: 00511021 addu v0,v0,s1
+ 401120: 8fa40024 lw a0,36(sp)
+ 401124: 8fa30020 lw v1,32(sp)
+ 401128: 000210c0 sll v0,v0,0x3
+ 40112c: afa40434 sw a0,1076(sp)
+ 401130: afa30430 sw v1,1072(sp)
+ 401134: 02a21021 addu v0,s5,v0
+ 401138: 8c450000 lw a1,0(v0)
+ 40113c: 02c02021 move a0,s6
+ 401140: 02003021 move a2,s0
+ 401144: 8f9982b8 lw t9,-32072(gp)
+ 401148: 00000000 nop
+ 40114c: 0320f809 jalr t9
+ 401150: 00000000 nop
+ 401154: 8fbc0010 lw gp,16(sp)
+ 401158: 04400003 bltz v0,401168 <set_roaming+0x218>
+ 40115c: 24050001 li a1,1
+ 401160: 1000ffa4 b 400ff4 <set_roaming+0xa4>
+ 401164: 00001021 move v0,zero
+ 401168: 8f8780e8 lw a3,-32536(gp)
+ 40116c: 00000000 nop
+ 401170: 8ce70000 lw a3,0(a3)
+ 401174: 8f848018 lw a0,-32744(gp)
+ 401178: 00000000 nop
+ 40117c: 2484fb80 addiu a0,a0,-1152
+ 401180: 2406001b li a2,27
+ 401184: 8f9980c8 lw t9,-32568(gp)
+ 401188: 00000000 nop
+ 40118c: 0320f809 jalr t9
+ 401190: 00000000 nop
+ 401194: 8fbc0010 lw gp,16(sp)
+ 401198: 1000ff96 b 400ff4 <set_roaming+0xa4>
+ 40119c: 2402ffff li v0,-1
+ 4011a0: 8f8780e8 lw a3,-32536(gp)
+ 4011a4: 00000000 nop
+ 4011a8: 8ce70000 lw a3,0(a3)
+ 4011ac: 8f848018 lw a0,-32744(gp)
+ 4011b0: 00000000 nop
+ 4011b4: 2484fb9c addiu a0,a0,-1124
+ 4011b8: 24050001 li a1,1
+ 4011bc: 24060024 li a2,36
+ 4011c0: 8f9980c8 lw t9,-32568(gp)
+ 4011c4: 00000000 nop
+ 4011c8: 0320f809 jalr t9
+ 4011cc: 00000000 nop
+ 4011d0: 8fbc0010 lw gp,16(sp)
+ 4011d4: 1000ff87 b 400ff4 <set_roaming+0xa4>
+ 4011d8: 2402ffff li v0,-1
+ 4011dc: 8f848018 lw a0,-32744(gp)
+ 4011e0: 00000000 nop
+ 4011e4: 2484fbc4 addiu a0,a0,-1084
+ 4011e8: 8f9982b0 lw t9,-32080(gp)
+ 4011ec: 00000000 nop
+ 4011f0: 0320f809 jalr t9
+ 4011f4: 00000000 nop
+ 4011f8: 8fbc0010 lw gp,16(sp)
+ 4011fc: 1000ffa6 b 401098 <set_roaming+0x148>
+ 401200: 24140001 li s4,1
+ 401204: 8f8480e8 lw a0,-32536(gp)
+ 401208: 00000000 nop
+ 40120c: 8c840000 lw a0,0(a0)
+ 401210: 8f858018 lw a1,-32744(gp)
+ 401214: 00000000 nop
+ 401218: 24a5fb04 addiu a1,a1,-1276
+ 40121c: 8f9981c4 lw t9,-32316(gp)
+ 401220: 00000000 nop
+ 401224: 0320f809 jalr t9
+ 401228: 00000000 nop
+ 40122c: 8fbc0010 lw gp,16(sp)
+ 401230: 1000ff70 b 400ff4 <set_roaming+0xa4>
+ 401234: 2402ffff li v0,-1
+
+00401238 <port_type>:
+ 401238: 3c1c0fc0 lui gp,0xfc0
+ 40123c: 279c7018 addiu gp,gp,28696
+ 401240: 0399e021 addu gp,gp,t9
+ 401244: 27bdf390 addiu sp,sp,-3184
+ 401248: afbc0010 sw gp,16(sp)
+ 40124c: afb50c64 sw s5,3172(sp)
+ 401250: afb40c60 sw s4,3168(sp)
+ 401254: afb30c5c sw s3,3164(sp)
+ 401258: afb20c58 sw s2,3160(sp)
+ 40125c: afb10c54 sw s1,3156(sp)
+ 401260: afb00c50 sw s0,3152(sp)
+ 401264: afbf0c6c sw ra,3180(sp)
+ 401268: afbc0c68 sw gp,3176(sp)
+ 40126c: 8f82801c lw v0,-32740(gp)
+ 401270: 00000000 nop
+ 401274: 24420018 addiu v0,v0,24
+ 401278: 00000000 nop
+ 40127c: 8c4a000c lw t2,12(v0)
+ 401280: 8c430000 lw v1,0(v0)
+ 401284: 8c480004 lw t0,4(v0)
+ 401288: 8c490008 lw t1,8(v0)
+ 40128c: 00e09821 move s3,a3
+ 401290: 27b40038 addiu s4,sp,56
+ 401294: 00a08021 move s0,a1
+ 401298: 00c08821 move s1,a2
+ 40129c: 02602821 move a1,s3
+ 4012a0: 02803021 move a2,s4
+ 4012a4: 24070080 li a3,128
+ 4012a8: afa30c40 sw v1,3136(sp)
+ 4012ac: afa80c44 sw t0,3140(sp)
+ 4012b0: afa90c48 sw t1,3144(sp)
+ 4012b4: afaa0c4c sw t2,3148(sp)
+ 4012b8: a3a00c38 sb zero,3128(sp)
+ 4012bc: 0080a821 move s5,a0
+ 4012c0: 8f998074 lw t9,-32652(gp)
+ 4012c4: 00000000 nop
+ 4012c8: 0320f809 jalr t9
+ 4012cc: 00000000 nop
+ 4012d0: 8fbc0010 lw gp,16(sp)
+ 4012d4: 00409021 move s2,v0
+ 4012d8: 1a4000dd blez s2,401650 <port_type+0x418>
+ 4012dc: 02603021 move a2,s3
+ 4012e0: 12200088 beqz s1,401504 <port_type+0x2cc>
+ 4012e4: 24020001 li v0,1
+ 4012e8: 12220012 beq s1,v0,401334 <port_type+0xfc>
+ 4012ec: 00008821 move s1,zero
+ 4012f0: 8f998020 lw t9,-32736(gp)
+ 4012f4: 00000000 nop
+ 4012f8: 27390100 addiu t9,t9,256
+ 4012fc: 00000000 nop
+ 401300: 0320f809 jalr t9
+ 401304: 00000000 nop
+ 401308: 8fbc0010 lw gp,16(sp)
+ 40130c: 2402ffff li v0,-1
+ 401310: 8fbf0c6c lw ra,3180(sp)
+ 401314: 8fb50c64 lw s5,3172(sp)
+ 401318: 8fb40c60 lw s4,3168(sp)
+ 40131c: 8fb30c5c lw s3,3164(sp)
+ 401320: 8fb20c58 lw s2,3160(sp)
+ 401324: 8fb10c54 lw s1,3156(sp)
+ 401328: 8fb00c50 lw s0,3152(sp)
+ 40132c: 03e00008 jr ra
+ 401330: 27bd0c70 addiu sp,sp,3184
+ 401334: 00111080 sll v0,s1,0x2
+ 401338: 03a21821 addu v1,sp,v0
+ 40133c: 2a220004 slti v0,s1,4
+ 401340: 10400061 beqz v0,4014c8 <port_type+0x290>
+ 401344: 24060002 li a2,2
+ 401348: 8c650c40 lw a1,3136(v1)
+ 40134c: 8e040000 lw a0,0(s0)
+ 401350: 8f9981f0 lw t9,-32272(gp)
+ 401354: 00000000 nop
+ 401358: 0320f809 jalr t9
+ 40135c: 00000000 nop
+ 401360: 8fbc0010 lw gp,16(sp)
+ 401364: 10400003 beqz v0,401374 <port_type+0x13c>
+ 401368: 00000000 nop
+ 40136c: 1000fff1 b 401334 <port_type+0xfc>
+ 401370: 26310001 addiu s1,s1,1
+ 401374: a3b10c38 sb s1,3128(sp)
+ 401378: 2411ffff li s1,-1
+ 40137c: 2690fff0 addiu s0,s4,-16
+ 401380: 26310001 addiu s1,s1,1
+ 401384: 26100018 addiu s0,s0,24
+ 401388: 0232102a slt v0,s1,s2
+ 40138c: 8f858018 lw a1,-32744(gp)
+ 401390: 00000000 nop
+ 401394: 24a5fc08 addiu a1,a1,-1016
+ 401398: 10400013 beqz v0,4013e8 <port_type+0x1b0>
+ 40139c: 02002021 move a0,s0
+ 4013a0: 8f998120 lw t9,-32480(gp)
+ 4013a4: 00000000 nop
+ 4013a8: 0320f809 jalr t9
+ 4013ac: 00000000 nop
+ 4013b0: 8fbc0010 lw gp,16(sp)
+ 4013b4: 00000000 nop
+ 4013b8: 8f858018 lw a1,-32744(gp)
+ 4013bc: 00000000 nop
+ 4013c0: 24a5fc14 addiu a1,a1,-1004
+ 4013c4: 10400008 beqz v0,4013e8 <port_type+0x1b0>
+ 4013c8: 02002021 move a0,s0
+ 4013cc: 8f998120 lw t9,-32480(gp)
+ 4013d0: 00000000 nop
+ 4013d4: 0320f809 jalr t9
+ 4013d8: 00000000 nop
+ 4013dc: 8fbc0010 lw gp,16(sp)
+ 4013e0: 1440ffe7 bnez v0,401380 <port_type+0x148>
+ 4013e4: 00000000 nop
+ 4013e8: 12320028 beq s1,s2,40148c <port_type+0x254>
+ 4013ec: 02602821 move a1,s3
+ 4013f0: 27a40018 addiu a0,sp,24
+ 4013f4: 24060010 li a2,16
+ 4013f8: 8f998188 lw t9,-32376(gp)
+ 4013fc: 00000000 nop
+ 401400: 0320f809 jalr t9
+ 401404: 00000000 nop
+ 401408: 8fbc0010 lw gp,16(sp)
+ 40140c: 00111840 sll v1,s1,0x1
+ 401410: 00711821 addu v1,v1,s1
+ 401414: 93a20c38 lbu v0,3128(sp)
+ 401418: 000318c0 sll v1,v1,0x3
+ 40141c: a3a20028 sb v0,40(sp)
+ 401420: 02831821 addu v1,s4,v1
+ 401424: 8c650000 lw a1,0(v1)
+ 401428: 02a02021 move a0,s5
+ 40142c: 27a60018 addiu a2,sp,24
+ 401430: 8f9982b8 lw t9,-32072(gp)
+ 401434: 00000000 nop
+ 401438: 0320f809 jalr t9
+ 40143c: 00000000 nop
+ 401440: 8fbc0010 lw gp,16(sp)
+ 401444: 04400003 bltz v0,401454 <port_type+0x21c>
+ 401448: 24050001 li a1,1
+ 40144c: 1000ffb0 b 401310 <port_type+0xd8>
+ 401450: 00001021 move v0,zero
+ 401454: 8f8780e8 lw a3,-32536(gp)
+ 401458: 00000000 nop
+ 40145c: 8ce70000 lw a3,0(a3)
+ 401460: 8f848018 lw a0,-32744(gp)
+ 401464: 00000000 nop
+ 401468: 2484fc20 addiu a0,a0,-992
+ 40146c: 2406002b li a2,43
+ 401470: 8f9980c8 lw t9,-32568(gp)
+ 401474: 00000000 nop
+ 401478: 0320f809 jalr t9
+ 40147c: 00000000 nop
+ 401480: 8fbc0010 lw gp,16(sp)
+ 401484: 1000ffa2 b 401310 <port_type+0xd8>
+ 401488: 2402ffff li v0,-1
+ 40148c: 8f8780e8 lw a3,-32536(gp)
+ 401490: 00000000 nop
+ 401494: 8ce70000 lw a3,0(a3)
+ 401498: 8f848018 lw a0,-32744(gp)
+ 40149c: 00000000 nop
+ 4014a0: 2484fc4c addiu a0,a0,-948
+ 4014a4: 24050001 li a1,1
+ 4014a8: 2406002e li a2,46
+ 4014ac: 8f9980c8 lw t9,-32568(gp)
+ 4014b0: 00000000 nop
+ 4014b4: 0320f809 jalr t9
+ 4014b8: 00000000 nop
+ 4014bc: 8fbc0010 lw gp,16(sp)
+ 4014c0: 1000ff93 b 401310 <port_type+0xd8>
+ 4014c4: 2402ffff li v0,-1
+ 4014c8: 8e040000 lw a0,0(s0)
+ 4014cc: 8f858018 lw a1,-32744(gp)
+ 4014d0: 00000000 nop
+ 4014d4: 24a5fa44 addiu a1,a1,-1468
+ 4014d8: 27a60c38 addiu a2,sp,3128
+ 4014dc: 8f998170 lw t9,-32400(gp)
+ 4014e0: 00000000 nop
+ 4014e4: 0320f809 jalr t9
+ 4014e8: 00000000 nop
+ 4014ec: 8fbc0010 lw gp,16(sp)
+ 4014f0: 24030001 li v1,1
+ 4014f4: 1043ffa1 beq v0,v1,40137c <port_type+0x144>
+ 4014f8: 2411ffff li s1,-1
+ 4014fc: 1000ff7c b 4012f0 <port_type+0xb8>
+ 401500: 00000000 nop
+ 401504: 2411ffff li s1,-1
+ 401508: 27b00028 addiu s0,sp,40
+ 40150c: 26310001 addiu s1,s1,1
+ 401510: 26100018 addiu s0,s0,24
+ 401514: 0232102a slt v0,s1,s2
+ 401518: 8f858018 lw a1,-32744(gp)
+ 40151c: 00000000 nop
+ 401520: 24a5fc7c addiu a1,a1,-900
+ 401524: 10400013 beqz v0,401574 <port_type+0x33c>
+ 401528: 02002021 move a0,s0
+ 40152c: 8f998120 lw t9,-32480(gp)
+ 401530: 00000000 nop
+ 401534: 0320f809 jalr t9
+ 401538: 00000000 nop
+ 40153c: 8fbc0010 lw gp,16(sp)
+ 401540: 00000000 nop
+ 401544: 8f858018 lw a1,-32744(gp)
+ 401548: 00000000 nop
+ 40154c: 24a5fc88 addiu a1,a1,-888
+ 401550: 10400008 beqz v0,401574 <port_type+0x33c>
+ 401554: 02002021 move a0,s0
+ 401558: 8f998120 lw t9,-32480(gp)
+ 40155c: 00000000 nop
+ 401560: 0320f809 jalr t9
+ 401564: 00000000 nop
+ 401568: 8fbc0010 lw gp,16(sp)
+ 40156c: 1440ffe7 bnez v0,40150c <port_type+0x2d4>
+ 401570: 00000000 nop
+ 401574: 12320027 beq s1,s2,401614 <port_type+0x3dc>
+ 401578: 27a40018 addiu a0,sp,24
+ 40157c: 02602821 move a1,s3
+ 401580: 24060010 li a2,16
+ 401584: 8f998188 lw t9,-32376(gp)
+ 401588: 00000000 nop
+ 40158c: 0320f809 jalr t9
+ 401590: 00000000 nop
+ 401594: 8fbc0010 lw gp,16(sp)
+ 401598: 00111840 sll v1,s1,0x1
+ 40159c: 00711821 addu v1,v1,s1
+ 4015a0: 000318c0 sll v1,v1,0x3
+ 4015a4: 02831821 addu v1,s4,v1
+ 4015a8: 8c650000 lw a1,0(v1)
+ 4015ac: 02a02021 move a0,s5
+ 4015b0: 27a60018 addiu a2,sp,24
+ 4015b4: 8f9982b8 lw t9,-32072(gp)
+ 4015b8: 00000000 nop
+ 4015bc: 0320f809 jalr t9
+ 4015c0: 00000000 nop
+ 4015c4: 8fbc0010 lw gp,16(sp)
+ 4015c8: 0440002e bltz v0,401684 <port_type+0x44c>
+ 4015cc: 02602821 move a1,s3
+ 4015d0: 93a80028 lbu t0,40(sp)
+ 4015d4: 8f848018 lw a0,-32744(gp)
+ 4015d8: 00000000 nop
+ 4015dc: 2484fc94 addiu a0,a0,-876
+ 4015e0: 00083e00 sll a3,t0,0x18
+ 4015e4: 00073e03 sra a3,a3,0x18
+ 4015e8: 00071080 sll v0,a3,0x2
+ 4015ec: 03a21821 addu v1,sp,v0
+ 4015f0: 8c660c40 lw a2,3136(v1)
+ 4015f4: a3a80c38 sb t0,3128(sp)
+ 4015f8: 8f9982b0 lw t9,-32080(gp)
+ 4015fc: 00000000 nop
+ 401600: 0320f809 jalr t9
+ 401604: 00000000 nop
+ 401608: 8fbc0010 lw gp,16(sp)
+ 40160c: 1000ff40 b 401310 <port_type+0xd8>
+ 401610: 00001021 move v0,zero
+ 401614: 8f8780e8 lw a3,-32536(gp)
+ 401618: 00000000 nop
+ 40161c: 8ce70000 lw a3,0(a3)
+ 401620: 8f848018 lw a0,-32744(gp)
+ 401624: 00000000 nop
+ 401628: 2484fccc addiu a0,a0,-820
+ 40162c: 24050001 li a1,1
+ 401630: 2406002e li a2,46
+ 401634: 8f9980c8 lw t9,-32568(gp)
+ 401638: 00000000 nop
+ 40163c: 0320f809 jalr t9
+ 401640: 00000000 nop
+ 401644: 8fbc0010 lw gp,16(sp)
+ 401648: 1000ff31 b 401310 <port_type+0xd8>
+ 40164c: 2402ffff li v0,-1
+ 401650: 8f8480e8 lw a0,-32536(gp)
+ 401654: 00000000 nop
+ 401658: 8c840000 lw a0,0(a0)
+ 40165c: 8f858018 lw a1,-32744(gp)
+ 401660: 00000000 nop
+ 401664: 24a5fb04 addiu a1,a1,-1276
+ 401668: 8f9981c4 lw t9,-32316(gp)
+ 40166c: 00000000 nop
+ 401670: 0320f809 jalr t9
+ 401674: 00000000 nop
+ 401678: 8fbc0010 lw gp,16(sp)
+ 40167c: 1000ff24 b 401310 <port_type+0xd8>
+ 401680: 2402ffff li v0,-1
+ 401684: 8f8780e8 lw a3,-32536(gp)
+ 401688: 00000000 nop
+ 40168c: 8ce70000 lw a3,0(a3)
+ 401690: 8f848018 lw a0,-32744(gp)
+ 401694: 00000000 nop
+ 401698: 2484fcfc addiu a0,a0,-772
+ 40169c: 24050001 li a1,1
+ 4016a0: 2406001d li a2,29
+ 4016a4: 8f9980c8 lw t9,-32568(gp)
+ 4016a8: 00000000 nop
+ 4016ac: 0320f809 jalr t9
+ 4016b0: 00000000 nop
+ 4016b4: 8fbc0010 lw gp,16(sp)
+ 4016b8: 00002021 move a0,zero
+ 4016bc: 8f99809c lw t9,-32612(gp)
+ 4016c0: 00000000 nop
+ 4016c4: 0320f809 jalr t9
+ 4016c8: 00000000 nop
+ 4016cc: 8fbc0010 lw gp,16(sp)
+ 4016d0: 00000000 nop
+
+004016d4 <main>:
+ 4016d4: 3c1c0fc0 lui gp,0xfc0
+ 4016d8: 279c6b7c addiu gp,gp,27516
+ 4016dc: 0399e021 addu gp,gp,t9
+ 4016e0: 27bdf3b8 addiu sp,sp,-3144
+ 4016e4: afbc0020 sw gp,32(sp)
+ 4016e8: afb30c34 sw s3,3124(sp)
+ 4016ec: afb20c30 sw s2,3120(sp)
+ 4016f0: afb10c2c sw s1,3116(sp)
+ 4016f4: afb00c28 sw s0,3112(sp)
+ 4016f8: afbf0c44 sw ra,3140(sp)
+ 4016fc: afbc0c40 sw gp,3136(sp)
+ 401700: afb50c3c sw s5,3132(sp)
+ 401704: afb40c38 sw s4,3128(sp)
+ 401708: 00809821 move s3,a0
+ 40170c: 00a08821 move s1,a1
+ 401710: 8f998258 lw t9,-32168(gp)
+ 401714: 00000000 nop
+ 401718: 0320f809 jalr t9
+ 40171c: 00000000 nop
+ 401720: 8fbc0020 lw gp,32(sp)
+ 401724: 00409021 move s2,v0
+ 401728: 06400104 bltz s2,401b3c <main+0x468>
+ 40172c: 00008021 move s0,zero
+ 401730: 24020001 li v0,1
+ 401734: 126200f4 beq s3,v0,401b08 <main+0x434>
+ 401738: 24060002 li a2,2
+ 40173c: 8f958018 lw s5,-32744(gp)
+ 401740: 00000000 nop
+ 401744: 26b5fd1c addiu s5,s5,-740
+ 401748: 8e240004 lw a0,4(s1)
+ 40174c: 02a02821 move a1,s5
+ 401750: 8f99818c lw t9,-32372(gp)
+ 401754: 00000000 nop
+ 401758: 0320f809 jalr t9
+ 40175c: 00000000 nop
+ 401760: 8fbc0020 lw gp,32(sp)
+ 401764: 104000e3 beqz v0,401af4 <main+0x420>
+ 401768: 00000000 nop
+ 40176c: 8f948018 lw s4,-32744(gp)
+ 401770: 00000000 nop
+ 401774: 2694fd20 addiu s4,s4,-736
+ 401778: 8e240004 lw a0,4(s1)
+ 40177c: 02802821 move a1,s4
+ 401780: 8f998120 lw t9,-32480(gp)
+ 401784: 00000000 nop
+ 401788: 0320f809 jalr t9
+ 40178c: 00000000 nop
+ 401790: 8fbc0020 lw gp,32(sp)
+ 401794: 104000d7 beqz v0,401af4 <main+0x420>
+ 401798: 24060002 li a2,2
+ 40179c: 8e240004 lw a0,4(s1)
+ 4017a0: 8f858018 lw a1,-32744(gp)
+ 4017a4: 00000000 nop
+ 4017a8: 24a5fd28 addiu a1,a1,-728
+ 4017ac: 8f99818c lw t9,-32372(gp)
+ 4017b0: 00000000 nop
+ 4017b4: 0320f809 jalr t9
+ 4017b8: 00000000 nop
+ 4017bc: 8fbc0020 lw gp,32(sp)
+ 4017c0: 104000c3 beqz v0,401ad0 <main+0x3fc>
+ 4017c4: 00000000 nop
+ 4017c8: 8e240004 lw a0,4(s1)
+ 4017cc: 8f858018 lw a1,-32744(gp)
+ 4017d0: 00000000 nop
+ 4017d4: 24a5fd2c addiu a1,a1,-724
+ 4017d8: 8f998120 lw t9,-32480(gp)
+ 4017dc: 00000000 nop
+ 4017e0: 0320f809 jalr t9
+ 4017e4: 00000000 nop
+ 4017e8: 8fbc0020 lw gp,32(sp)
+ 4017ec: 104000b8 beqz v0,401ad0 <main+0x3fc>
+ 4017f0: 00000000 nop
+ 4017f4: 8e240004 lw a0,4(s1)
+ 4017f8: 8f858018 lw a1,-32744(gp)
+ 4017fc: 00000000 nop
+ 401800: 24a5fd34 addiu a1,a1,-716
+ 401804: 8f998120 lw t9,-32480(gp)
+ 401808: 00000000 nop
+ 40180c: 0320f809 jalr t9
+ 401810: 00000000 nop
+ 401814: 8fbc0020 lw gp,32(sp)
+ 401818: 104000a3 beqz v0,401aa8 <main+0x3d4>
+ 40181c: 00000000 nop
+ 401820: 8e240004 lw a0,4(s1)
+ 401824: 8f858018 lw a1,-32744(gp)
+ 401828: 00000000 nop
+ 40182c: 24a5fd38 addiu a1,a1,-712
+ 401830: 8f998120 lw t9,-32480(gp)
+ 401834: 00000000 nop
+ 401838: 0320f809 jalr t9
+ 40183c: 00000000 nop
+ 401840: 8fbc0020 lw gp,32(sp)
+ 401844: 10400098 beqz v0,401aa8 <main+0x3d4>
+ 401848: 24020002 li v0,2
+ 40184c: 12620089 beq s3,v0,401a74 <main+0x3a0>
+ 401850: 02a02821 move a1,s5
+ 401854: 8e240008 lw a0,8(s1)
+ 401858: 24060002 li a2,2
+ 40185c: 8f99818c lw t9,-32372(gp)
+ 401860: 00000000 nop
+ 401864: 0320f809 jalr t9
+ 401868: 00000000 nop
+ 40186c: 8fbc0020 lw gp,32(sp)
+ 401870: 10400073 beqz v0,401a40 <main+0x36c>
+ 401874: 02802821 move a1,s4
+ 401878: 8e240008 lw a0,8(s1)
+ 40187c: 8f998120 lw t9,-32480(gp)
+ 401880: 00000000 nop
+ 401884: 0320f809 jalr t9
+ 401888: 00000000 nop
+ 40188c: 8fbc0020 lw gp,32(sp)
+ 401890: 1040006b beqz v0,401a40 <main+0x36c>
+ 401894: 24060004 li a2,4
+ 401898: 8e240008 lw a0,8(s1)
+ 40189c: 8f858018 lw a1,-32744(gp)
+ 4018a0: 00000000 nop
+ 4018a4: 24a5fd44 addiu a1,a1,-700
+ 4018a8: 8f99818c lw t9,-32372(gp)
+ 4018ac: 00000000 nop
+ 4018b0: 0320f809 jalr t9
+ 4018b4: 00000000 nop
+ 4018b8: 8fbc0020 lw gp,32(sp)
+ 4018bc: 10400053 beqz v0,401a0c <main+0x338>
+ 4018c0: 24060004 li a2,4
+ 4018c4: 8e240008 lw a0,8(s1)
+ 4018c8: 8f858018 lw a1,-32744(gp)
+ 4018cc: 00000000 nop
+ 4018d0: 24a5fd4c addiu a1,a1,-692
+ 4018d4: 8f99818c lw t9,-32372(gp)
+ 4018d8: 00000000 nop
+ 4018dc: 0320f809 jalr t9
+ 4018e0: 00000000 nop
+ 4018e4: 8fbc0020 lw gp,32(sp)
+ 4018e8: 1040003c beqz v0,4019dc <main+0x308>
+ 4018ec: 02402021 move a0,s2
+ 4018f0: 8e300004 lw s0,4(s1)
+ 4018f4: 00000000 nop
+ 4018f8: 02002821 move a1,s0
+ 4018fc: 27a60028 addiu a2,sp,40
+ 401900: 24070080 li a3,128
+ 401904: 8f998074 lw t9,-32652(gp)
+ 401908: 00000000 nop
+ 40190c: 0320f809 jalr t9
+ 401910: 00000000 nop
+ 401914: 8fbc0020 lw gp,32(sp)
+ 401918: 00404021 move t0,v0
+ 40191c: 19000021 blez t0,4019a4 <main+0x2d0>
+ 401920: 02003821 move a3,s0
+ 401924: 8e230008 lw v1,8(s1)
+ 401928: 27a20028 addiu v0,sp,40
+ 40192c: 2666fffd addiu a2,s3,-3
+ 401930: 2625000c addiu a1,s1,12
+ 401934: 02402021 move a0,s2
+ 401938: afa30010 sw v1,16(sp)
+ 40193c: afa20014 sw v0,20(sp)
+ 401940: afa80018 sw t0,24(sp)
+ 401944: 8f998020 lw t9,-32736(gp)
+ 401948: 00000000 nop
+ 40194c: 273901d0 addiu t9,t9,464
+ 401950: 00000000 nop
+ 401954: 0320f809 jalr t9
+ 401958: 00000000 nop
+ 40195c: 8fbc0020 lw gp,32(sp)
+ 401960: 00408021 move s0,v0
+ 401964: 02402021 move a0,s2
+ 401968: 8f998040 lw t9,-32704(gp)
+ 40196c: 00000000 nop
+ 401970: 0320f809 jalr t9
+ 401974: 00000000 nop
+ 401978: 8fbc0020 lw gp,32(sp)
+ 40197c: 02001021 move v0,s0
+ 401980: 8fbf0c44 lw ra,3140(sp)
+ 401984: 8fb50c3c lw s5,3132(sp)
+ 401988: 8fb40c38 lw s4,3128(sp)
+ 40198c: 8fb30c34 lw s3,3124(sp)
+ 401990: 8fb20c30 lw s2,3120(sp)
+ 401994: 8fb10c2c lw s1,3116(sp)
+ 401998: 8fb00c28 lw s0,3112(sp)
+ 40199c: 03e00008 jr ra
+ 4019a0: 27bd0c48 addiu sp,sp,3144
+ 4019a4: 8f8480e8 lw a0,-32536(gp)
+ 4019a8: 00000000 nop
+ 4019ac: 8c840000 lw a0,0(a0)
+ 4019b0: 02003021 move a2,s0
+ 4019b4: 8f858018 lw a1,-32744(gp)
+ 4019b8: 00000000 nop
+ 4019bc: 24a5fb04 addiu a1,a1,-1276
+ 4019c0: 8f9981c4 lw t9,-32316(gp)
+ 4019c4: 00000000 nop
+ 4019c8: 0320f809 jalr t9
+ 4019cc: 00000000 nop
+ 4019d0: 8fbc0020 lw gp,32(sp)
+ 4019d4: 1000ffe3 b 401964 <main+0x290>
+ 4019d8: 2410ffff li s0,-1
+ 4019dc: 8e270004 lw a3,4(s1)
+ 4019e0: 2666fffd addiu a2,s3,-3
+ 4019e4: 2625000c addiu a1,s1,12
+ 4019e8: 8f998020 lw t9,-32736(gp)
+ 4019ec: 00000000 nop
+ 4019f0: 27391238 addiu t9,t9,4664
+ 4019f4: 00000000 nop
+ 4019f8: 0320f809 jalr t9
+ 4019fc: 00000000 nop
+ 401a00: 8fbc0020 lw gp,32(sp)
+ 401a04: 1000ffd7 b 401964 <main+0x290>
+ 401a08: 00408021 move s0,v0
+ 401a0c: 8e270004 lw a3,4(s1)
+ 401a10: 2666fffd addiu a2,s3,-3
+ 401a14: 2625000c addiu a1,s1,12
+ 401a18: 02402021 move a0,s2
+ 401a1c: 8f998020 lw t9,-32736(gp)
+ 401a20: 00000000 nop
+ 401a24: 27390f50 addiu t9,t9,3920
+ 401a28: 00000000 nop
+ 401a2c: 0320f809 jalr t9
+ 401a30: 00000000 nop
+ 401a34: 8fbc0020 lw gp,32(sp)
+ 401a38: 1000ffca b 401964 <main+0x290>
+ 401a3c: 00408021 move s0,v0
+ 401a40: 8e250004 lw a1,4(s1)
+ 401a44: 02402021 move a0,s2
+ 401a48: 00003021 move a2,zero
+ 401a4c: 00003821 move a3,zero
+ 401a50: 8f998020 lw t9,-32736(gp)
+ 401a54: 00000000 nop
+ 401a58: 27390dd0 addiu t9,t9,3536
+ 401a5c: 00000000 nop
+ 401a60: 0320f809 jalr t9
+ 401a64: 00000000 nop
+ 401a68: 8fbc0020 lw gp,32(sp)
+ 401a6c: 1000ffbe b 401968 <main+0x294>
+ 401a70: 02402021 move a0,s2
+ 401a74: 8e250004 lw a1,4(s1)
+ 401a78: 02402021 move a0,s2
+ 401a7c: 00003021 move a2,zero
+ 401a80: 00003821 move a3,zero
+ 401a84: 8f998020 lw t9,-32736(gp)
+ 401a88: 00000000 nop
+ 401a8c: 27390c5c addiu t9,t9,3164
+ 401a90: 00000000 nop
+ 401a94: 0320f809 jalr t9
+ 401a98: 00000000 nop
+ 401a9c: 8fbc0020 lw gp,32(sp)
+ 401aa0: 1000ffb1 b 401968 <main+0x294>
+ 401aa4: 02402021 move a0,s2
+ 401aa8: 8f848018 lw a0,-32744(gp)
+ 401aac: 00000000 nop
+ 401ab0: 2484fd54 addiu a0,a0,-684
+ 401ab4: 8f998048 lw t9,-32696(gp)
+ 401ab8: 00000000 nop
+ 401abc: 0320f809 jalr t9
+ 401ac0: 00000000 nop
+ 401ac4: 8fbc0020 lw gp,32(sp)
+ 401ac8: 1000ffa6 b 401964 <main+0x290>
+ 401acc: 00408021 move s0,v0
+ 401ad0: 8f998020 lw t9,-32736(gp)
+ 401ad4: 00000000 nop
+ 401ad8: 27390100 addiu t9,t9,256
+ 401adc: 00000000 nop
+ 401ae0: 0320f809 jalr t9
+ 401ae4: 00000000 nop
+ 401ae8: 8fbc0020 lw gp,32(sp)
+ 401aec: 1000ff9e b 401968 <main+0x294>
+ 401af0: 02402021 move a0,s2
+ 401af4: 8f858020 lw a1,-32736(gp)
+ 401af8: 00000000 nop
+ 401afc: 24a50dd0 addiu a1,a1,3536
+ 401b00: 10000005 b 401b18 <main+0x444>
+ 401b04: 02402021 move a0,s2
+ 401b08: 8f858020 lw a1,-32736(gp)
+ 401b0c: 00000000 nop
+ 401b10: 24a50c5c addiu a1,a1,3164
+ 401b14: 02402021 move a0,s2
+ 401b18: 00003021 move a2,zero
+ 401b1c: 00003821 move a3,zero
+ 401b20: 8f9982c0 lw t9,-32064(gp)
+ 401b24: 00000000 nop
+ 401b28: 0320f809 jalr t9
+ 401b2c: 00000000 nop
+ 401b30: 8fbc0020 lw gp,32(sp)
+ 401b34: 1000ff8c b 401968 <main+0x294>
+ 401b38: 02402021 move a0,s2
+ 401b3c: 8f848018 lw a0,-32744(gp)
+ 401b40: 00000000 nop
+ 401b44: 2484fd5c addiu a0,a0,-676
+ 401b48: 8f998250 lw t9,-32176(gp)
+ 401b4c: 00000000 nop
+ 401b50: 0320f809 jalr t9
+ 401b54: 00000000 nop
+ 401b58: 8fbc0020 lw gp,32(sp)
+ 401b5c: 1000ff88 b 401980 <main+0x2ac>
+ 401b60: 2402ffff li v0,-1
+ ...
+
+00401b70 <iw_sockets_open>:
+ 401b70: 3c1c0fc0 lui gp,0xfc0
+ 401b74: 279c66e0 addiu gp,gp,26336
+ 401b78: 0399e021 addu gp,gp,t9
+ 401b7c: 27bdffd8 addiu sp,sp,-40
+ 401b80: afbc0010 sw gp,16(sp)
+ 401b84: afb1001c sw s1,28(sp)
+ 401b88: afb00018 sw s0,24(sp)
+ 401b8c: afbf0024 sw ra,36(sp)
+ 401b90: afbc0020 sw gp,32(sp)
+ 401b94: 00008821 move s1,zero
+ 401b98: 8f908018 lw s0,-32744(gp)
+ 401b9c: 00000000 nop
+ 401ba0: 2610fdb0 addiu s0,s0,-592
+ 401ba4: 00000000 nop
+ 401ba8: 8e040000 lw a0,0(s0)
+ 401bac: 24050001 li a1,1
+ 401bb0: 00003021 move a2,zero
+ 401bb4: 8f998218 lw t9,-32232(gp)
+ 401bb8: 00000000 nop
+ 401bbc: 0320f809 jalr t9
+ 401bc0: 00000000 nop
+ 401bc4: 8fbc0010 lw gp,16(sp)
+ 401bc8: 26310001 addiu s1,s1,1
+ 401bcc: 00401821 move v1,v0
+ 401bd0: 2e240004 sltiu a0,s1,4
+ 401bd4: 04600006 bltz v1,401bf0 <iw_sockets_open+0x80>
+ 401bd8: 26100004 addiu s0,s0,4
+ 401bdc: 8fbf0024 lw ra,36(sp)
+ 401be0: 8fb1001c lw s1,28(sp)
+ 401be4: 8fb00018 lw s0,24(sp)
+ 401be8: 03e00008 jr ra
+ 401bec: 27bd0028 addiu sp,sp,40
+ 401bf0: 1480ffed bnez a0,401ba8 <iw_sockets_open+0x38>
+ 401bf4: 2402ffff li v0,-1
+ 401bf8: 1000fff8 b 401bdc <iw_sockets_open+0x6c>
+ 401bfc: 00000000 nop
+
+00401c00 <iw_enum_devices>:
+ 401c00: 3c1c0fc0 lui gp,0xfc0
+ 401c04: 279c6650 addiu gp,gp,26192
+ 401c08: 0399e021 addu gp,gp,t9
+ 401c0c: 27bdfb98 addiu sp,sp,-1128
+ 401c10: afbc0010 sw gp,16(sp)
+ 401c14: afb60450 sw s6,1104(sp)
+ 401c18: afa5046c sw a1,1132(sp)
+ 401c1c: 0080b021 move s6,a0
+ 401c20: 8f858018 lw a1,-32744(gp)
+ 401c24: 00000000 nop
+ 401c28: 24a5fdc0 addiu a1,a1,-576
+ 401c2c: 8f848018 lw a0,-32744(gp)
+ 401c30: 00000000 nop
+ 401c34: 2484fdc4 addiu a0,a0,-572
+ 401c38: afbe045c sw s8,1116(sp)
+ 401c3c: afb70454 sw s7,1108(sp)
+ 401c40: afb30444 sw s3,1092(sp)
+ 401c44: afbf0460 sw ra,1120(sp)
+ 401c48: afbc0458 sw gp,1112(sp)
+ 401c4c: afb5044c sw s5,1100(sp)
+ 401c50: afb40448 sw s4,1096(sp)
+ 401c54: afb20440 sw s2,1088(sp)
+ 401c58: afb1043c sw s1,1084(sp)
+ 401c5c: afb00438 sw s0,1080(sp)
+ 401c60: 00c0f021 move s8,a2
+ 401c64: 00e0b821 move s7,a3
+ 401c68: 8f998140 lw t9,-32448(gp)
+ 401c6c: 00000000 nop
+ 401c70: 0320f809 jalr t9
+ 401c74: 00000000 nop
+ 401c78: 8fbc0010 lw gp,16(sp)
+ 401c7c: 00409821 move s3,v0
+ 401c80: 1260006d beqz s3,401e38 <iw_enum_devices+0x238>
+ 401c84: 27a40018 addiu a0,sp,24
+ 401c88: 02603021 move a2,s3
+ 401c8c: 24050400 li a1,1024
+ 401c90: 8f998268 lw t9,-32152(gp)
+ 401c94: 00000000 nop
+ 401c98: 0320f809 jalr t9
+ 401c9c: 00000000 nop
+ 401ca0: 8fbc0010 lw gp,16(sp)
+ 401ca4: 27a40018 addiu a0,sp,24
+ 401ca8: 24050400 li a1,1024
+ 401cac: 02603021 move a2,s3
+ 401cb0: 8f998268 lw t9,-32152(gp)
+ 401cb4: 00000000 nop
+ 401cb8: 0320f809 jalr t9
+ 401cbc: 00000000 nop
+ 401cc0: 8fbc0010 lw gp,16(sp)
+ 401cc4: 27a40018 addiu a0,sp,24
+ 401cc8: 24050400 li a1,1024
+ 401ccc: 02603021 move a2,s3
+ 401cd0: 8f998268 lw t9,-32152(gp)
+ 401cd4: 00000000 nop
+ 401cd8: 0320f809 jalr t9
+ 401cdc: 00000000 nop
+ 401ce0: 8fbc0010 lw gp,16(sp)
+ 401ce4: 10400042 beqz v0,401df0 <iw_enum_devices+0x1f0>
+ 401ce8: 27b40420 addiu s4,sp,1056
+ 401cec: 24150011 li s5,17
+ 401cf0: 27b20018 addiu s2,sp,24
+ 401cf4: 82440000 lb a0,0(s2)
+ 401cf8: 8f998210 lw t9,-32240(gp)
+ 401cfc: 00000000 nop
+ 401d00: 0320f809 jalr t9
+ 401d04: 00000000 nop
+ 401d08: 8fbc0010 lw gp,16(sp)
+ 401d0c: 10400003 beqz v0,401d1c <iw_enum_devices+0x11c>
+ 401d10: 02402021 move a0,s2
+ 401d14: 1000fff7 b 401cf4 <iw_enum_devices+0xf4>
+ 401d18: 26520001 addiu s2,s2,1
+ 401d1c: 2405003a li a1,58
+ 401d20: 8f9981d8 lw t9,-32296(gp)
+ 401d24: 00000000 nop
+ 401d28: 0320f809 jalr t9
+ 401d2c: 00000000 nop
+ 401d30: 8fbc0010 lw gp,16(sp)
+ 401d34: 00408821 move s1,v0
+ 401d38: 12200007 beqz s1,401d58 <iw_enum_devices+0x158>
+ 401d3c: 00001021 move v0,zero
+ 401d40: 02328023 subu s0,s1,s2
+ 401d44: 26020001 addiu v0,s0,1
+ 401d48: 02a2102a slt v0,s5,v0
+ 401d4c: 1040001d beqz v0,401dc4 <iw_enum_devices+0x1c4>
+ 401d50: 02402821 move a1,s2
+ 401d54: 00001021 move v0,zero
+ 401d58: 1040000b beqz v0,401d88 <iw_enum_devices+0x188>
+ 401d5c: 02802821 move a1,s4
+ 401d60: 8fa3046c lw v1,1132(sp)
+ 401d64: 02c02021 move a0,s6
+ 401d68: 03c03021 move a2,s8
+ 401d6c: 02e03821 move a3,s7
+ 401d70: 0060c821 move t9,v1
+ 401d74: 0320f809 jalr t9
+ 401d78: 00000000 nop
+ 401d7c: 8fbc0010 lw gp,16(sp)
+ 401d80: 1000ffd1 b 401cc8 <iw_enum_devices+0xc8>
+ 401d84: 27a40018 addiu a0,sp,24
+ 401d88: 8f8780e8 lw a3,-32536(gp)
+ 401d8c: 00000000 nop
+ 401d90: 8ce70000 lw a3,0(a3)
+ 401d94: 8f848018 lw a0,-32744(gp)
+ 401d98: 00000000 nop
+ 401d9c: 2484fdd4 addiu a0,a0,-556
+ 401da0: 24050001 li a1,1
+ 401da4: 24060020 li a2,32
+ 401da8: 8f9980c8 lw t9,-32568(gp)
+ 401dac: 00000000 nop
+ 401db0: 0320f809 jalr t9
+ 401db4: 00000000 nop
+ 401db8: 8fbc0010 lw gp,16(sp)
+ 401dbc: 1000ffc2 b 401cc8 <iw_enum_devices+0xc8>
+ 401dc0: 27a40018 addiu a0,sp,24
+ 401dc4: 27a40420 addiu a0,sp,1056
+ 401dc8: 02003021 move a2,s0
+ 401dcc: 8f998254 lw t9,-32172(gp)
+ 401dd0: 00000000 nop
+ 401dd4: 0320f809 jalr t9
+ 401dd8: 00000000 nop
+ 401ddc: 8fbc0010 lw gp,16(sp)
+ 401de0: 02901021 addu v0,s4,s0
+ 401de4: a0400000 sb zero,0(v0)
+ 401de8: 1000ffdb b 401d58 <iw_enum_devices+0x158>
+ 401dec: 26220002 addiu v0,s1,2
+ 401df0: 02602021 move a0,s3
+ 401df4: 8f998134 lw t9,-32460(gp)
+ 401df8: 00000000 nop
+ 401dfc: 0320f809 jalr t9
+ 401e00: 00000000 nop
+ 401e04: 8fbc0010 lw gp,16(sp)
+ 401e08: 8fbf0460 lw ra,1120(sp)
+ 401e0c: 8fbe045c lw s8,1116(sp)
+ 401e10: 8fb70454 lw s7,1108(sp)
+ 401e14: 8fb60450 lw s6,1104(sp)
+ 401e18: 8fb5044c lw s5,1100(sp)
+ 401e1c: 8fb40448 lw s4,1096(sp)
+ 401e20: 8fb30444 lw s3,1092(sp)
+ 401e24: 8fb20440 lw s2,1088(sp)
+ 401e28: 8fb1043c lw s1,1084(sp)
+ 401e2c: 8fb00438 lw s0,1080(sp)
+ 401e30: 03e00008 jr ra
+ 401e34: 27bd0468 addiu sp,sp,1128
+ 401e38: 24020400 li v0,1024
+ 401e3c: 27a30018 addiu v1,sp,24
+ 401e40: 27a60418 addiu a2,sp,1048
+ 401e44: 02c02021 move a0,s6
+ 401e48: 34058912 li a1,0x8912
+ 401e4c: afa20418 sw v0,1048(sp)
+ 401e50: afa3041c sw v1,1052(sp)
+ 401e54: 8f9982b8 lw t9,-32072(gp)
+ 401e58: 00000000 nop
+ 401e5c: 0320f809 jalr t9
+ 401e60: 00000000 nop
+ 401e64: 8fbc0010 lw gp,16(sp)
+ 401e68: 04400015 bltz v0,401ec0 <iw_enum_devices+0x2c0>
+ 401e6c: 00000000 nop
+ 401e70: 8fa20418 lw v0,1048(sp)
+ 401e74: 8fb1041c lw s1,1052(sp)
+ 401e78: 00028142 srl s0,v0,0x5
+ 401e7c: 2610ffff addiu s0,s0,-1
+ 401e80: 0600ffe1 bltz s0,401e08 <iw_enum_devices+0x208>
+ 401e84: 00000000 nop
+ 401e88: 8fa3046c lw v1,1132(sp)
+ 401e8c: 02202821 move a1,s1
+ 401e90: 02c02021 move a0,s6
+ 401e94: 03c03021 move a2,s8
+ 401e98: 02e03821 move a3,s7
+ 401e9c: 2610ffff addiu s0,s0,-1
+ 401ea0: 0060c821 move t9,v1
+ 401ea4: 0320f809 jalr t9
+ 401ea8: 00000000 nop
+ 401eac: 8fbc0010 lw gp,16(sp)
+ 401eb0: 0601fff5 bgez s0,401e88 <iw_enum_devices+0x288>
+ 401eb4: 26310020 addiu s1,s1,32
+ 401eb8: 1000ffd3 b 401e08 <iw_enum_devices+0x208>
+ 401ebc: 00000000 nop
+ 401ec0: 8f9980a0 lw t9,-32608(gp)
+ 401ec4: 00000000 nop
+ 401ec8: 0320f809 jalr t9
+ 401ecc: 00000000 nop
+ 401ed0: 8fbc0010 lw gp,16(sp)
+ 401ed4: 8c440000 lw a0,0(v0)
+ 401ed8: 8f99828c lw t9,-32116(gp)
+ 401edc: 00000000 nop
+ 401ee0: 0320f809 jalr t9
+ 401ee4: 00000000 nop
+ 401ee8: 8fbc0010 lw gp,16(sp)
+ 401eec: 00000000 nop
+ 401ef0: 8f8480e8 lw a0,-32536(gp)
+ 401ef4: 00000000 nop
+ 401ef8: 8c840000 lw a0,0(a0)
+ 401efc: 8f858018 lw a1,-32744(gp)
+ 401f00: 00000000 nop
+ 401f04: 24a5fdf8 addiu a1,a1,-520
+ 401f08: 00403021 move a2,v0
+ 401f0c: 8f9981c4 lw t9,-32316(gp)
+ 401f10: 00000000 nop
+ 401f14: 0320f809 jalr t9
+ 401f18: 00000000 nop
+ 401f1c: 8fbc0010 lw gp,16(sp)
+ 401f20: 1000ffb9 b 401e08 <iw_enum_devices+0x208>
+ 401f24: 00000000 nop
+
+00401f28 <iw_get_range_info>:
+ 401f28: 3c1c0fc0 lui gp,0xfc0
+ 401f2c: 279c6328 addiu gp,gp,25384
+ 401f30: 0399e021 addu gp,gp,t9
+ 401f34: 27bdfd40 addiu sp,sp,-704
+ 401f38: afbc0010 sw gp,16(sp)
+ 401f3c: afb302ac sw s3,684(sp)
+ 401f40: 27b30038 addiu s3,sp,56
+ 401f44: afb402b0 sw s4,688(sp)
+ 401f48: afb202a8 sw s2,680(sp)
+ 401f4c: afb102a4 sw s1,676(sp)
+ 401f50: 00a0a021 move s4,a1
+ 401f54: 00808821 move s1,a0
+ 401f58: 00002821 move a1,zero
+ 401f5c: 02602021 move a0,s3
+ 401f60: 00c09021 move s2,a2
+ 401f64: 24060268 li a2,616
+ 401f68: afb002a0 sw s0,672(sp)
+ 401f6c: afbf02b8 sw ra,696(sp)
+ 401f70: afbc02b4 sw gp,692(sp)
+ 401f74: 8f99813c lw t9,-32452(gp)
+ 401f78: 00000000 nop
+ 401f7c: 0320f809 jalr t9
+ 401f80: 00000000 nop
+ 401f84: 8fbc0010 lw gp,16(sp)
+ 401f88: 27b00018 addiu s0,sp,24
+ 401f8c: 02802821 move a1,s4
+ 401f90: 24060010 li a2,16
+ 401f94: 02002021 move a0,s0
+ 401f98: 24020268 li v0,616
+ 401f9c: a7a2002c sh v0,44(sp)
+ 401fa0: afb30028 sw s3,40(sp)
+ 401fa4: a7a0002e sh zero,46(sp)
+ 401fa8: 8f998188 lw t9,-32376(gp)
+ 401fac: 00000000 nop
+ 401fb0: 0320f809 jalr t9
+ 401fb4: 00000000 nop
+ 401fb8: 8fbc0010 lw gp,16(sp)
+ 401fbc: 02202021 move a0,s1
+ 401fc0: 02003021 move a2,s0
+ 401fc4: 34058b0b li a1,0x8b0b
+ 401fc8: 8f9982b8 lw t9,-32072(gp)
+ 401fcc: 00000000 nop
+ 401fd0: 0320f809 jalr t9
+ 401fd4: 00000000 nop
+ 401fd8: 8fbc0010 lw gp,16(sp)
+ 401fdc: 00401821 move v1,v0
+ 401fe0: 0460001d bltz v1,402058 <iw_get_range_info+0x130>
+ 401fe4: 2402ffff li v0,-1
+ 401fe8: 02602021 move a0,s3
+ 401fec: 02401021 move v0,s2
+ 401ff0: 27a30168 addiu v1,sp,360
+ 401ff4: 8c850000 lw a1,0(a0)
+ 401ff8: 8c860004 lw a2,4(a0)
+ 401ffc: 8c870008 lw a3,8(a0)
+ 402000: 8c88000c lw t0,12(a0)
+ 402004: ac450000 sw a1,0(v0)
+ 402008: ac460004 sw a2,4(v0)
+ 40200c: ac470008 sw a3,8(v0)
+ 402010: ac48000c sw t0,12(v0)
+ 402014: 24840010 addiu a0,a0,16
+ 402018: 1483fff6 bne a0,v1,401ff4 <iw_get_range_info+0xcc>
+ 40201c: 24420010 addiu v0,v0,16
+ 402020: 8c830000 lw v1,0(a0)
+ 402024: 00000000 nop
+ 402028: ac430000 sw v1,0(v0)
+ 40202c: 8f828260 lw v0,-32160(gp)
+ 402030: 00000000 nop
+ 402034: 8c420000 lw v0,0(v0)
+ 402038: 00000000 nop
+ 40203c: 1040000e beqz v0,402078 <iw_get_range_info+0x150>
+ 402040: 00000000 nop
+ 402044: 24020001 li v0,1
+ 402048: 8f818260 lw at,-32160(gp)
+ 40204c: 00000000 nop
+ 402050: ac220000 sw v0,0(at)
+ 402054: 00001021 move v0,zero
+ 402058: 8fbf02b8 lw ra,696(sp)
+ 40205c: 8fb402b0 lw s4,688(sp)
+ 402060: 8fb302ac lw s3,684(sp)
+ 402064: 8fb202a8 lw s2,680(sp)
+ 402068: 8fb102a4 lw s1,676(sp)
+ 40206c: 8fb002a0 lw s0,672(sp)
+ 402070: 03e00008 jr ra
+ 402074: 27bd02c0 addiu sp,sp,704
+ 402078: 97a3002c lhu v1,44(sp)
+ 40207c: 00000000 nop
+ 402080: 2c62012c sltiu v0,v1,300
+ 402084: 1440005a bnez v0,4021f0 <iw_get_range_info+0x2c8>
+ 402088: 24020134 li v0,308
+ 40208c: 92430118 lbu v1,280(s2)
+ 402090: 2402000c li v0,12
+ 402094: 10620029 beq v1,v0,40213c <iw_get_range_info+0x214>
+ 402098: 306700ff andi a3,v1,0xff
+ 40209c: 8f8480e8 lw a0,-32536(gp)
+ 4020a0: 00000000 nop
+ 4020a4: 8c840000 lw a0,0(a0)
+ 4020a8: 8f858018 lw a1,-32744(gp)
+ 4020ac: 00000000 nop
+ 4020b0: 24a5fe0c addiu a1,a1,-500
+ 4020b4: 02803021 move a2,s4
+ 4020b8: 8f9981c4 lw t9,-32316(gp)
+ 4020bc: 00000000 nop
+ 4020c0: 0320f809 jalr t9
+ 4020c4: 00000000 nop
+ 4020c8: 8fbc0010 lw gp,16(sp)
+ 4020cc: 00000000 nop
+ 4020d0: 8f8480e8 lw a0,-32536(gp)
+ 4020d4: 00000000 nop
+ 4020d8: 8c840000 lw a0,0(a0)
+ 4020dc: 8f858018 lw a1,-32744(gp)
+ 4020e0: 00000000 nop
+ 4020e4: 24a5fe50 addiu a1,a1,-432
+ 4020e8: 2406000c li a2,12
+ 4020ec: 8f9981c4 lw t9,-32316(gp)
+ 4020f0: 00000000 nop
+ 4020f4: 0320f809 jalr t9
+ 4020f8: 00000000 nop
+ 4020fc: 8fbc0010 lw gp,16(sp)
+ 402100: 00000000 nop
+ 402104: 8f8780e8 lw a3,-32536(gp)
+ 402108: 00000000 nop
+ 40210c: 8ce70000 lw a3,0(a3)
+ 402110: 8f848018 lw a0,-32744(gp)
+ 402114: 00000000 nop
+ 402118: 2484fe90 addiu a0,a0,-368
+ 40211c: 24050001 li a1,1
+ 402120: 2406001e li a2,30
+ 402124: 8f9980c8 lw t9,-32568(gp)
+ 402128: 00000000 nop
+ 40212c: 0320f809 jalr t9
+ 402130: 00000000 nop
+ 402134: 8fbc0010 lw gp,16(sp)
+ 402138: 92430118 lbu v1,280(s2)
+ 40213c: 92420119 lbu v0,281(s2)
+ 402140: 00000000 nop
+ 402144: 0062102b sltu v0,v1,v0
+ 402148: 1040ffbe beqz v0,402044 <iw_get_range_info+0x11c>
+ 40214c: 02803021 move a2,s4
+ 402150: 92470119 lbu a3,281(s2)
+ 402154: 8f8480e8 lw a0,-32536(gp)
+ 402158: 00000000 nop
+ 40215c: 8c840000 lw a0,0(a0)
+ 402160: 8f858018 lw a1,-32744(gp)
+ 402164: 00000000 nop
+ 402168: 24a5feb0 addiu a1,a1,-336
+ 40216c: 8f9981c4 lw t9,-32316(gp)
+ 402170: 00000000 nop
+ 402174: 0320f809 jalr t9
+ 402178: 00000000 nop
+ 40217c: 8fbc0010 lw gp,16(sp)
+ 402180: 92460118 lbu a2,280(s2)
+ 402184: 8f8480e8 lw a0,-32536(gp)
+ 402188: 00000000 nop
+ 40218c: 8c840000 lw a0,0(a0)
+ 402190: 8f858018 lw a1,-32744(gp)
+ 402194: 00000000 nop
+ 402198: 24a5fefc addiu a1,a1,-260
+ 40219c: 8f9981c4 lw t9,-32316(gp)
+ 4021a0: 00000000 nop
+ 4021a4: 0320f809 jalr t9
+ 4021a8: 00000000 nop
+ 4021ac: 8fbc0010 lw gp,16(sp)
+ 4021b0: 00000000 nop
+ 4021b4: 8f8780e8 lw a3,-32536(gp)
+ 4021b8: 00000000 nop
+ 4021bc: 8ce70000 lw a3,0(a3)
+ 4021c0: 8f848018 lw a0,-32744(gp)
+ 4021c4: 00000000 nop
+ 4021c8: 2484ff44 addiu a0,a0,-188
+ 4021cc: 24050001 li a1,1
+ 4021d0: 24060019 li a2,25
+ 4021d4: 8f9980c8 lw t9,-32568(gp)
+ 4021d8: 00000000 nop
+ 4021dc: 0320f809 jalr t9
+ 4021e0: 00000000 nop
+ 4021e4: 8fbc0010 lw gp,16(sp)
+ 4021e8: 1000ff97 b 402048 <iw_get_range_info+0x120>
+ 4021ec: 24020001 li v0,1
+ 4021f0: 1062ff94 beq v1,v0,402044 <iw_get_range_info+0x11c>
+ 4021f4: 02803021 move a2,s4
+ 4021f8: 8f8480e8 lw a0,-32536(gp)
+ 4021fc: 00000000 nop
+ 402200: 8c840000 lw a0,0(a0)
+ 402204: 8f858018 lw a1,-32744(gp)
+ 402208: 00000000 nop
+ 40220c: 24a5ff60 addiu a1,a1,-160
+ 402210: 8f9981c4 lw t9,-32316(gp)
+ 402214: 00000000 nop
+ 402218: 0320f809 jalr t9
+ 40221c: 00000000 nop
+ 402220: 8fbc0010 lw gp,16(sp)
+ 402224: 00000000 nop
+ 402228: 8f8480e8 lw a0,-32536(gp)
+ 40222c: 00000000 nop
+ 402230: 8c840000 lw a0,0(a0)
+ 402234: 8f858018 lw a1,-32744(gp)
+ 402238: 00000000 nop
+ 40223c: 24a5fe50 addiu a1,a1,-432
+ 402240: 2406000c li a2,12
+ 402244: 8f9981c4 lw t9,-32316(gp)
+ 402248: 00000000 nop
+ 40224c: 0320f809 jalr t9
+ 402250: 00000000 nop
+ 402254: 8fbc0010 lw gp,16(sp)
+ 402258: 00000000 nop
+ 40225c: 8f8780e8 lw a3,-32536(gp)
+ 402260: 00000000 nop
+ 402264: 8ce70000 lw a3,0(a3)
+ 402268: 8f848018 lw a0,-32744(gp)
+ 40226c: 00000000 nop
+ 402270: 2484fe90 addiu a0,a0,-368
+ 402274: 24050001 li a1,1
+ 402278: 2406001e li a2,30
+ 40227c: 8f9980c8 lw t9,-32568(gp)
+ 402280: 00000000 nop
+ 402284: 0320f809 jalr t9
+ 402288: 00000000 nop
+ 40228c: 8fbc0010 lw gp,16(sp)
+ 402290: 1000ff6d b 402048 <iw_get_range_info+0x120>
+ 402294: 24020001 li v0,1
+
+00402298 <print_iface_version_info>:
+ 402298: 3c1c0fc0 lui gp,0xfc0
+ 40229c: 279c5fb8 addiu gp,gp,24504
+ 4022a0: 0399e021 addu gp,gp,t9
+ 4022a4: 27bdfd48 addiu sp,sp,-696
+ 4022a8: afbc0010 sw gp,16(sp)
+ 4022ac: afb102a4 sw s1,676(sp)
+ 4022b0: 27b10038 addiu s1,sp,56
+ 4022b4: afb302ac sw s3,684(sp)
+ 4022b8: afb202a8 sw s2,680(sp)
+ 4022bc: 00a09821 move s3,a1
+ 4022c0: 00809021 move s2,a0
+ 4022c4: 00002821 move a1,zero
+ 4022c8: 02202021 move a0,s1
+ 4022cc: 24060268 li a2,616
+ 4022d0: afb002a0 sw s0,672(sp)
+ 4022d4: afbf02b4 sw ra,692(sp)
+ 4022d8: afbc02b0 sw gp,688(sp)
+ 4022dc: 8f99813c lw t9,-32452(gp)
+ 4022e0: 00000000 nop
+ 4022e4: 0320f809 jalr t9
+ 4022e8: 00000000 nop
+ 4022ec: 8fbc0010 lw gp,16(sp)
+ 4022f0: 27b00018 addiu s0,sp,24
+ 4022f4: 02602821 move a1,s3
+ 4022f8: 24060010 li a2,16
+ 4022fc: 02002021 move a0,s0
+ 402300: 24020268 li v0,616
+ 402304: afb10028 sw s1,40(sp)
+ 402308: a7a2002c sh v0,44(sp)
+ 40230c: a7a0002e sh zero,46(sp)
+ 402310: 8f998188 lw t9,-32376(gp)
+ 402314: 00000000 nop
+ 402318: 0320f809 jalr t9
+ 40231c: 00000000 nop
+ 402320: 8fbc0010 lw gp,16(sp)
+ 402324: 02402021 move a0,s2
+ 402328: 02003021 move a2,s0
+ 40232c: 34058b0b li a1,0x8b0b
+ 402330: 8f9982b8 lw t9,-32072(gp)
+ 402334: 00000000 nop
+ 402338: 0320f809 jalr t9
+ 40233c: 00000000 nop
+ 402340: 8fbc0010 lw gp,16(sp)
+ 402344: 00401821 move v1,v0
+ 402348: 04600019 bltz v1,4023b0 <print_iface_version_info+0x118>
+ 40234c: 2402ffff li v0,-1
+ 402350: 97a2002c lhu v0,44(sp)
+ 402354: 00000000 nop
+ 402358: 2c42012c sltiu v0,v0,300
+ 40235c: 8f848018 lw a0,-32744(gp)
+ 402360: 00000000 nop
+ 402364: 2484ffac addiu a0,a0,-84
+ 402368: 14400010 bnez v0,4023ac <print_iface_version_info+0x114>
+ 40236c: 02602821 move a1,s3
+ 402370: 93a60151 lbu a2,337(sp)
+ 402374: 8f9982b0 lw t9,-32080(gp)
+ 402378: 00000000 nop
+ 40237c: 0320f809 jalr t9
+ 402380: 00000000 nop
+ 402384: 8fbc0010 lw gp,16(sp)
+ 402388: 93a50150 lbu a1,336(sp)
+ 40238c: 8f848018 lw a0,-32744(gp)
+ 402390: 00000000 nop
+ 402394: 2484ffe0 addiu a0,a0,-32
+ 402398: 8f9982b0 lw t9,-32080(gp)
+ 40239c: 00000000 nop
+ 4023a0: 0320f809 jalr t9
+ 4023a4: 00000000 nop
+ 4023a8: 8fbc0010 lw gp,16(sp)
+ 4023ac: 00001021 move v0,zero
+ 4023b0: 8fbf02b4 lw ra,692(sp)
+ 4023b4: 8fb302ac lw s3,684(sp)
+ 4023b8: 8fb202a8 lw s2,680(sp)
+ 4023bc: 8fb102a4 lw s1,676(sp)
+ 4023c0: 8fb002a0 lw s0,672(sp)
+ 4023c4: 03e00008 jr ra
+ 4023c8: 27bd02b8 addiu sp,sp,696
+
+004023cc <iw_print_version_info>:
+ 4023cc: 3c1c0fc0 lui gp,0xfc0
+ 4023d0: 279c5e84 addiu gp,gp,24196
+ 4023d4: 0399e021 addu gp,gp,t9
+ 4023d8: 27bdffd8 addiu sp,sp,-40
+ 4023dc: afbc0010 sw gp,16(sp)
+ 4023e0: afb1001c sw s1,28(sp)
+ 4023e4: afb00018 sw s0,24(sp)
+ 4023e8: 00808821 move s1,a0
+ 4023ec: afbf0024 sw ra,36(sp)
+ 4023f0: afbc0020 sw gp,32(sp)
+ 4023f4: 8f998258 lw t9,-32168(gp)
+ 4023f8: 00000000 nop
+ 4023fc: 0320f809 jalr t9
+ 402400: 00000000 nop
+ 402404: 8fbc0010 lw gp,16(sp)
+ 402408: 00408021 move s0,v0
+ 40240c: 8f848018 lw a0,-32744(gp)
+ 402410: 00000000 nop
+ 402414: 2484001c addiu a0,a0,28
+ 402418: 06000037 bltz s0,4024f8 <iw_print_version_info+0x12c>
+ 40241c: 02202821 move a1,s1
+ 402420: 8f848018 lw a0,-32744(gp)
+ 402424: 00000000 nop
+ 402428: 24840024 addiu a0,a0,36
+ 40242c: 12200007 beqz s1,40244c <iw_print_version_info+0x80>
+ 402430: 24060019 li a2,25
+ 402434: 8f9982b0 lw t9,-32080(gp)
+ 402438: 00000000 nop
+ 40243c: 0320f809 jalr t9
+ 402440: 00000000 nop
+ 402444: 8fbc0010 lw gp,16(sp)
+ 402448: 00000000 nop
+ 40244c: 8f848018 lw a0,-32744(gp)
+ 402450: 00000000 nop
+ 402454: 24840038 addiu a0,a0,56
+ 402458: 2405000f li a1,15
+ 40245c: 8f9982b0 lw t9,-32080(gp)
+ 402460: 00000000 nop
+ 402464: 0320f809 jalr t9
+ 402468: 00000000 nop
+ 40246c: 8fbc0010 lw gp,16(sp)
+ 402470: 00000000 nop
+ 402474: 8f848018 lw a0,-32744(gp)
+ 402478: 00000000 nop
+ 40247c: 2484ffe0 addiu a0,a0,-32
+ 402480: 2405000c li a1,12
+ 402484: 8f9982b0 lw t9,-32080(gp)
+ 402488: 00000000 nop
+ 40248c: 0320f809 jalr t9
+ 402490: 00000000 nop
+ 402494: 8fbc0010 lw gp,16(sp)
+ 402498: 00000000 nop
+ 40249c: 8f858020 lw a1,-32736(gp)
+ 4024a0: 00000000 nop
+ 4024a4: 24a52298 addiu a1,a1,8856
+ 4024a8: 00003021 move a2,zero
+ 4024ac: 00003821 move a3,zero
+ 4024b0: 02002021 move a0,s0
+ 4024b4: 8f9982c0 lw t9,-32064(gp)
+ 4024b8: 00000000 nop
+ 4024bc: 0320f809 jalr t9
+ 4024c0: 00000000 nop
+ 4024c4: 8fbc0010 lw gp,16(sp)
+ 4024c8: 02002021 move a0,s0
+ 4024cc: 8f998040 lw t9,-32704(gp)
+ 4024d0: 00000000 nop
+ 4024d4: 0320f809 jalr t9
+ 4024d8: 00000000 nop
+ 4024dc: 8fbc0010 lw gp,16(sp)
+ 4024e0: 00001021 move v0,zero
+ 4024e4: 8fbf0024 lw ra,36(sp)
+ 4024e8: 8fb1001c lw s1,28(sp)
+ 4024ec: 8fb00018 lw s0,24(sp)
+ 4024f0: 03e00008 jr ra
+ 4024f4: 27bd0028 addiu sp,sp,40
+ 4024f8: 8f998250 lw t9,-32176(gp)
+ 4024fc: 00000000 nop
+ 402500: 0320f809 jalr t9
+ 402504: 00000000 nop
+ 402508: 8fbc0010 lw gp,16(sp)
+ 40250c: 1000fff5 b 4024e4 <iw_print_version_info+0x118>
+ 402510: 2402ffff li v0,-1
+
+00402514 <iw_get_priv_info>:
+ 402514: 3c1c0fc0 lui gp,0xfc0
+ 402518: 279c5d3c addiu gp,gp,23868
+ 40251c: 0399e021 addu gp,gp,t9
+ 402520: 27bdffb8 addiu sp,sp,-72
+ 402524: afbc0010 sw gp,16(sp)
+ 402528: afb00038 sw s0,56(sp)
+ 40252c: 27b00018 addiu s0,sp,24
+ 402530: afb1003c sw s1,60(sp)
+ 402534: 00c01021 move v0,a2
+ 402538: 00808821 move s1,a0
+ 40253c: 24060010 li a2,16
+ 402540: 02002021 move a0,s0
+ 402544: afbf0044 sw ra,68(sp)
+ 402548: afbc0040 sw gp,64(sp)
+ 40254c: afa20028 sw v0,40(sp)
+ 402550: a7a7002c sh a3,44(sp)
+ 402554: a7a0002e sh zero,46(sp)
+ 402558: 8f998188 lw t9,-32376(gp)
+ 40255c: 00000000 nop
+ 402560: 0320f809 jalr t9
+ 402564: 00000000 nop
+ 402568: 8fbc0010 lw gp,16(sp)
+ 40256c: 02202021 move a0,s1
+ 402570: 02003021 move a2,s0
+ 402574: 34058b0d li a1,0x8b0d
+ 402578: 8f9982b8 lw t9,-32072(gp)
+ 40257c: 00000000 nop
+ 402580: 0320f809 jalr t9
+ 402584: 00000000 nop
+ 402588: 8fbc0010 lw gp,16(sp)
+ 40258c: 00401821 move v1,v0
+ 402590: 04600002 bltz v1,40259c <iw_get_priv_info+0x88>
+ 402594: 2402ffff li v0,-1
+ 402598: 97a2002c lhu v0,44(sp)
+ 40259c: 8fbf0044 lw ra,68(sp)
+ 4025a0: 8fb1003c lw s1,60(sp)
+ 4025a4: 8fb00038 lw s0,56(sp)
+ 4025a8: 03e00008 jr ra
+ 4025ac: 27bd0048 addiu sp,sp,72
+
+004025b0 <iw_get_basic_config>:
+ 4025b0: 3c1c0fc0 lui gp,0xfc0
+ 4025b4: 279c5ca0 addiu gp,gp,23712
+ 4025b8: 0399e021 addu gp,gp,t9
+ 4025bc: 27bdffa8 addiu sp,sp,-88
+ 4025c0: afbc0010 sw gp,16(sp)
+ 4025c4: afb00038 sw s0,56(sp)
+ 4025c8: 00c08021 move s0,a2
+ 4025cc: afb30044 sw s3,68(sp)
+ 4025d0: afb20040 sw s2,64(sp)
+ 4025d4: 00809821 move s3,a0
+ 4025d8: 00a09021 move s2,a1
+ 4025dc: 02002021 move a0,s0
+ 4025e0: 00002821 move a1,zero
+ 4025e4: 24060090 li a2,144
+ 4025e8: afb1003c sw s1,60(sp)
+ 4025ec: afbf0050 sw ra,80(sp)
+ 4025f0: afbc004c sw gp,76(sp)
+ 4025f4: afb40048 sw s4,72(sp)
+ 4025f8: 8f99813c lw t9,-32452(gp)
+ 4025fc: 00000000 nop
+ 402600: 0320f809 jalr t9
+ 402604: 00000000 nop
+ 402608: 8fbc0010 lw gp,16(sp)
+ 40260c: 27b10018 addiu s1,sp,24
+ 402610: 02402821 move a1,s2
+ 402614: 24060010 li a2,16
+ 402618: 02202021 move a0,s1
+ 40261c: 8f998188 lw t9,-32376(gp)
+ 402620: 00000000 nop
+ 402624: 0320f809 jalr t9
+ 402628: 00000000 nop
+ 40262c: 8fbc0010 lw gp,16(sp)
+ 402630: 02602021 move a0,s3
+ 402634: 34058b01 li a1,0x8b01
+ 402638: 02203021 move a2,s1
+ 40263c: 8f9982b8 lw t9,-32072(gp)
+ 402640: 00000000 nop
+ 402644: 0320f809 jalr t9
+ 402648: 00000000 nop
+ 40264c: 8fbc0010 lw gp,16(sp)
+ 402650: 00401821 move v1,v0
+ 402654: 0460008d bltz v1,40288c <iw_get_basic_config+0x2dc>
+ 402658: 2402ffff li v0,-1
+ 40265c: 27b40028 addiu s4,sp,40
+ 402660: 02002021 move a0,s0
+ 402664: 02802821 move a1,s4
+ 402668: 24060010 li a2,16
+ 40266c: 8f998188 lw t9,-32376(gp)
+ 402670: 00000000 nop
+ 402674: 0320f809 jalr t9
+ 402678: 00000000 nop
+ 40267c: 8fbc0010 lw gp,16(sp)
+ 402680: 02402821 move a1,s2
+ 402684: 24060010 li a2,16
+ 402688: 02202021 move a0,s1
+ 40268c: a2000010 sb zero,16(s0)
+ 402690: 8f998188 lw t9,-32376(gp)
+ 402694: 00000000 nop
+ 402698: 0320f809 jalr t9
+ 40269c: 00000000 nop
+ 4026a0: 8fbc0010 lw gp,16(sp)
+ 4026a4: 02602021 move a0,s3
+ 4026a8: 34058b03 li a1,0x8b03
+ 4026ac: 02203021 move a2,s1
+ 4026b0: 8f9982b8 lw t9,-32072(gp)
+ 4026b4: 00000000 nop
+ 4026b8: 0320f809 jalr t9
+ 4026bc: 00000000 nop
+ 4026c0: 8fbc0010 lw gp,16(sp)
+ 4026c4: 04400006 bltz v0,4026e0 <iw_get_basic_config+0x130>
+ 4026c8: 24030001 li v1,1
+ 4026cc: 8fa20028 lw v0,40(sp)
+ 4026d0: 8fa4002c lw a0,44(sp)
+ 4026d4: ae030014 sw v1,20(s0)
+ 4026d8: ae020018 sw v0,24(s0)
+ 4026dc: ae04001c sw a0,28(s0)
+ 4026e0: 02402821 move a1,s2
+ 4026e4: 24060010 li a2,16
+ 4026e8: 02202021 move a0,s1
+ 4026ec: 8f998188 lw t9,-32376(gp)
+ 4026f0: 00000000 nop
+ 4026f4: 0320f809 jalr t9
+ 4026f8: 00000000 nop
+ 4026fc: 8fbc0010 lw gp,16(sp)
+ 402700: 02602021 move a0,s3
+ 402704: 34058b05 li a1,0x8b05
+ 402708: 02203021 move a2,s1
+ 40270c: 8f9982b8 lw t9,-32072(gp)
+ 402710: 00000000 nop
+ 402714: 0320f809 jalr t9
+ 402718: 00000000 nop
+ 40271c: 8fbc0010 lw gp,16(sp)
+ 402720: 0440000a bltz v0,40274c <iw_get_basic_config+0x19c>
+ 402724: 24020001 li v0,1
+ 402728: ae020020 sw v0,32(s0)
+ 40272c: 02802021 move a0,s4
+ 402730: 8f9980c4 lw t9,-32572(gp)
+ 402734: 00000000 nop
+ 402738: 0320f809 jalr t9
+ 40273c: 00000000 nop
+ 402740: 8fbc0010 lw gp,16(sp)
+ 402744: e6010028 swc1 $f1,40(s0)
+ 402748: e600002c swc1 $f0,44(s0)
+ 40274c: 02402821 move a1,s2
+ 402750: 24060010 li a2,16
+ 402754: 26020034 addiu v0,s0,52
+ 402758: 02202021 move a0,s1
+ 40275c: 24030020 li v1,32
+ 402760: afa20028 sw v0,40(sp)
+ 402764: a7a3002c sh v1,44(sp)
+ 402768: a7a0002e sh zero,46(sp)
+ 40276c: 8f998188 lw t9,-32376(gp)
+ 402770: 00000000 nop
+ 402774: 0320f809 jalr t9
+ 402778: 00000000 nop
+ 40277c: 8fbc0010 lw gp,16(sp)
+ 402780: 02602021 move a0,s3
+ 402784: 34058b2b li a1,0x8b2b
+ 402788: 02203021 move a2,s1
+ 40278c: 8f9982b8 lw t9,-32072(gp)
+ 402790: 00000000 nop
+ 402794: 0320f809 jalr t9
+ 402798: 00000000 nop
+ 40279c: 8fbc0010 lw gp,16(sp)
+ 4027a0: 04400006 bltz v0,4027bc <iw_get_basic_config+0x20c>
+ 4027a4: 24030001 li v1,1
+ 4027a8: 97a2002c lhu v0,44(sp)
+ 4027ac: 97a4002e lhu a0,46(sp)
+ 4027b0: ae030030 sw v1,48(s0)
+ 4027b4: ae020054 sw v0,84(s0)
+ 4027b8: ae040058 sw a0,88(s0)
+ 4027bc: 02402821 move a1,s2
+ 4027c0: 24060010 li a2,16
+ 4027c4: 26020064 addiu v0,s0,100
+ 4027c8: 02202021 move a0,s1
+ 4027cc: 24030021 li v1,33
+ 4027d0: afa20028 sw v0,40(sp)
+ 4027d4: a7a3002c sh v1,44(sp)
+ 4027d8: a7a0002e sh zero,46(sp)
+ 4027dc: 8f998188 lw t9,-32376(gp)
+ 4027e0: 00000000 nop
+ 4027e4: 0320f809 jalr t9
+ 4027e8: 00000000 nop
+ 4027ec: 8fbc0010 lw gp,16(sp)
+ 4027f0: 02602021 move a0,s3
+ 4027f4: 34058b1b li a1,0x8b1b
+ 4027f8: 02203021 move a2,s1
+ 4027fc: 8f9982b8 lw t9,-32072(gp)
+ 402800: 00000000 nop
+ 402804: 0320f809 jalr t9
+ 402808: 00000000 nop
+ 40280c: 8fbc0010 lw gp,16(sp)
+ 402810: 04400004 bltz v0,402824 <iw_get_basic_config+0x274>
+ 402814: 24020001 li v0,1
+ 402818: 97a3002e lhu v1,46(sp)
+ 40281c: ae02005c sw v0,92(s0)
+ 402820: ae030060 sw v1,96(s0)
+ 402824: 02402821 move a1,s2
+ 402828: 24060010 li a2,16
+ 40282c: 02202021 move a0,s1
+ 402830: 8f998188 lw t9,-32376(gp)
+ 402834: 00000000 nop
+ 402838: 0320f809 jalr t9
+ 40283c: 00000000 nop
+ 402840: 8fbc0010 lw gp,16(sp)
+ 402844: 02602021 move a0,s3
+ 402848: 02203021 move a2,s1
+ 40284c: 34058b07 li a1,0x8b07
+ 402850: 8f9982b8 lw t9,-32072(gp)
+ 402854: 00000000 nop
+ 402858: 0320f809 jalr t9
+ 40285c: 00000000 nop
+ 402860: 8fbc0010 lw gp,16(sp)
+ 402864: 04400009 bltz v0,40288c <iw_get_basic_config+0x2dc>
+ 402868: 00001021 move v0,zero
+ 40286c: 8fa20028 lw v0,40(sp)
+ 402870: 00000000 nop
+ 402874: 2c430006 sltiu v1,v0,6
+ 402878: 10600003 beqz v1,402888 <iw_get_basic_config+0x2d8>
+ 40287c: ae02008c sw v0,140(s0)
+ 402880: 24020001 li v0,1
+ 402884: ae020088 sw v0,136(s0)
+ 402888: 00001021 move v0,zero
+ 40288c: 8fbf0050 lw ra,80(sp)
+ 402890: 8fb40048 lw s4,72(sp)
+ 402894: 8fb30044 lw s3,68(sp)
+ 402898: 8fb20040 lw s2,64(sp)
+ 40289c: 8fb1003c lw s1,60(sp)
+ 4028a0: 8fb00038 lw s0,56(sp)
+ 4028a4: 03e00008 jr ra
+ 4028a8: 27bd0058 addiu sp,sp,88
+
+004028ac <iw_set_basic_config>:
+ 4028ac: 3c1c0fc0 lui gp,0xfc0
+ 4028b0: 279c59a4 addiu gp,gp,22948
+ 4028b4: 0399e021 addu gp,gp,t9
+ 4028b8: 27bdffa0 addiu sp,sp,-96
+ 4028bc: afbc0010 sw gp,16(sp)
+ 4028c0: afb30044 sw s3,68(sp)
+ 4028c4: 27b30018 addiu s3,sp,24
+ 4028c8: afb60050 sw s6,80(sp)
+ 4028cc: afb20040 sw s2,64(sp)
+ 4028d0: 0080b021 move s6,a0
+ 4028d4: 00c09021 move s2,a2
+ 4028d8: 02602021 move a0,s3
+ 4028dc: 24060010 li a2,16
+ 4028e0: afb5004c sw s5,76(sp)
+ 4028e4: afb40048 sw s4,72(sp)
+ 4028e8: afbf0058 sw ra,88(sp)
+ 4028ec: afbc0054 sw gp,84(sp)
+ 4028f0: afb1003c sw s1,60(sp)
+ 4028f4: afb00038 sw s0,56(sp)
+ 4028f8: 00a0a821 move s5,a1
+ 4028fc: 8f998188 lw t9,-32376(gp)
+ 402900: 00000000 nop
+ 402904: 0320f809 jalr t9
+ 402908: 00000000 nop
+ 40290c: 8fbc0010 lw gp,16(sp)
+ 402910: 02c02021 move a0,s6
+ 402914: 34058b01 li a1,0x8b01
+ 402918: 02603021 move a2,s3
+ 40291c: 8f9982b8 lw t9,-32072(gp)
+ 402920: 00000000 nop
+ 402924: 0320f809 jalr t9
+ 402928: 00000000 nop
+ 40292c: 8fbc0010 lw gp,16(sp)
+ 402930: 00401821 move v1,v0
+ 402934: 0000a021 move s4,zero
+ 402938: 046000b0 bltz v1,402bfc <iw_set_basic_config+0x350>
+ 40293c: 2402fffe li v0,-2
+ 402940: 8e420014 lw v0,20(s2)
+ 402944: 00000000 nop
+ 402948: 10400018 beqz v0,4029ac <iw_set_basic_config+0x100>
+ 40294c: 02a02821 move a1,s5
+ 402950: 8e42001c lw v0,28(s2)
+ 402954: 8e430018 lw v1,24(s2)
+ 402958: afa2002c sw v0,44(sp)
+ 40295c: 24060010 li a2,16
+ 402960: 02602021 move a0,s3
+ 402964: 24020001 li v0,1
+ 402968: afa30028 sw v1,40(sp)
+ 40296c: a3a2002c sb v0,44(sp)
+ 402970: 8f998188 lw t9,-32376(gp)
+ 402974: 00000000 nop
+ 402978: 0320f809 jalr t9
+ 40297c: 00000000 nop
+ 402980: 8fbc0010 lw gp,16(sp)
+ 402984: 02c02021 move a0,s6
+ 402988: 34058b02 li a1,0x8b02
+ 40298c: 02603021 move a2,s3
+ 402990: 8f9982b8 lw t9,-32072(gp)
+ 402994: 00000000 nop
+ 402998: 0320f809 jalr t9
+ 40299c: 00000000 nop
+ 4029a0: 8fbc0010 lw gp,16(sp)
+ 4029a4: 04400123 bltz v0,402e34 <iw_set_basic_config+0x588>
+ 4029a8: 00000000 nop
+ 4029ac: 8e420020 lw v0,32(s2)
+ 4029b0: 00000000 nop
+ 4029b4: 1040001a beqz v0,402a20 <iw_set_basic_config+0x174>
+ 4029b8: 27a60028 addiu a2,sp,40
+ 4029bc: c64d0028 lwc1 $f13,40(s2)
+ 4029c0: c64c002c lwc1 $f12,44(s2)
+ 4029c4: 8f998190 lw t9,-32368(gp)
+ 4029c8: 00000000 nop
+ 4029cc: 0320f809 jalr t9
+ 4029d0: 00000000 nop
+ 4029d4: 8fbc0010 lw gp,16(sp)
+ 4029d8: 02602021 move a0,s3
+ 4029dc: 02a02821 move a1,s5
+ 4029e0: 24060010 li a2,16
+ 4029e4: 8f998188 lw t9,-32376(gp)
+ 4029e8: 00000000 nop
+ 4029ec: 0320f809 jalr t9
+ 4029f0: 00000000 nop
+ 4029f4: 8fbc0010 lw gp,16(sp)
+ 4029f8: 02c02021 move a0,s6
+ 4029fc: 34058b04 li a1,0x8b04
+ 402a00: 02603021 move a2,s3
+ 402a04: 8f9982b8 lw t9,-32072(gp)
+ 402a08: 00000000 nop
+ 402a0c: 0320f809 jalr t9
+ 402a10: 00000000 nop
+ 402a14: 8fbc0010 lw gp,16(sp)
+ 402a18: 044000ec bltz v0,402dcc <iw_set_basic_config+0x520>
+ 402a1c: 00000000 nop
+ 402a20: 8e420030 lw v0,48(s2)
+ 402a24: 00000000 nop
+ 402a28: 10400034 beqz v0,402afc <iw_set_basic_config+0x250>
+ 402a2c: 00000000 nop
+ 402a30: 8e510058 lw s1,88(s2)
+ 402a34: 00000000 nop
+ 402a38: 322200ff andi v0,s1,0xff
+ 402a3c: 18400016 blez v0,402a98 <iw_set_basic_config+0x1ec>
+ 402a40: 34420800 ori v0,v0,0x800
+ 402a44: 02a02821 move a1,s5
+ 402a48: 24060010 li a2,16
+ 402a4c: 02602021 move a0,s3
+ 402a50: a7a2002e sh v0,46(sp)
+ 402a54: afa00028 sw zero,40(sp)
+ 402a58: a7a0002c sh zero,44(sp)
+ 402a5c: 8f998188 lw t9,-32376(gp)
+ 402a60: 00000000 nop
+ 402a64: 0320f809 jalr t9
+ 402a68: 00000000 nop
+ 402a6c: 8fbc0010 lw gp,16(sp)
+ 402a70: 02c02021 move a0,s6
+ 402a74: 34058b2a li a1,0x8b2a
+ 402a78: 02603021 move a2,s3
+ 402a7c: 8f9982b8 lw t9,-32072(gp)
+ 402a80: 00000000 nop
+ 402a84: 0320f809 jalr t9
+ 402a88: 00000000 nop
+ 402a8c: 8fbc0010 lw gp,16(sp)
+ 402a90: 044000b3 bltz v0,402d60 <iw_set_basic_config+0x4b4>
+ 402a94: 00000000 nop
+ 402a98: 96430056 lhu v1,86(s2)
+ 402a9c: 2402ff00 li v0,-256
+ 402aa0: 02228824 and s1,s1,v0
+ 402aa4: 02a02821 move a1,s5
+ 402aa8: 24060010 li a2,16
+ 402aac: 26420034 addiu v0,s2,52
+ 402ab0: 02602021 move a0,s3
+ 402ab4: afa20028 sw v0,40(sp)
+ 402ab8: a7a3002c sh v1,44(sp)
+ 402abc: a7b1002e sh s1,46(sp)
+ 402ac0: 8f998188 lw t9,-32376(gp)
+ 402ac4: 00000000 nop
+ 402ac8: 0320f809 jalr t9
+ 402acc: 00000000 nop
+ 402ad0: 8fbc0010 lw gp,16(sp)
+ 402ad4: 02c02021 move a0,s6
+ 402ad8: 34058b2a li a1,0x8b2a
+ 402adc: 02603021 move a2,s3
+ 402ae0: 8f9982b8 lw t9,-32072(gp)
+ 402ae4: 00000000 nop
+ 402ae8: 0320f809 jalr t9
+ 402aec: 00000000 nop
+ 402af0: 8fbc0010 lw gp,16(sp)
+ 402af4: 0440007f bltz v0,402cf4 <iw_set_basic_config+0x448>
+ 402af8: 00000000 nop
+ 402afc: 8e42005c lw v0,92(s2)
+ 402b00: 00000000 nop
+ 402b04: 1040001d beqz v0,402b7c <iw_set_basic_config+0x2d0>
+ 402b08: 26440064 addiu a0,s2,100
+ 402b0c: afa40028 sw a0,40(sp)
+ 402b10: 8f998068 lw t9,-32664(gp)
+ 402b14: 00000000 nop
+ 402b18: 0320f809 jalr t9
+ 402b1c: 00000000 nop
+ 402b20: 8fbc0010 lw gp,16(sp)
+ 402b24: 96430062 lhu v1,98(s2)
+ 402b28: 24420001 addiu v0,v0,1
+ 402b2c: 02a02821 move a1,s5
+ 402b30: 24060010 li a2,16
+ 402b34: 02602021 move a0,s3
+ 402b38: a7a2002c sh v0,44(sp)
+ 402b3c: a7a3002e sh v1,46(sp)
+ 402b40: 8f998188 lw t9,-32376(gp)
+ 402b44: 00000000 nop
+ 402b48: 0320f809 jalr t9
+ 402b4c: 00000000 nop
+ 402b50: 8fbc0010 lw gp,16(sp)
+ 402b54: 02c02021 move a0,s6
+ 402b58: 34058b1a li a1,0x8b1a
+ 402b5c: 02603021 move a2,s3
+ 402b60: 8f9982b8 lw t9,-32072(gp)
+ 402b64: 00000000 nop
+ 402b68: 0320f809 jalr t9
+ 402b6c: 00000000 nop
+ 402b70: 8fbc0010 lw gp,16(sp)
+ 402b74: 04400045 bltz v0,402c8c <iw_set_basic_config+0x3e0>
+ 402b78: 00000000 nop
+ 402b7c: 8e420088 lw v0,136(s2)
+ 402b80: 00000000 nop
+ 402b84: 1040001c beqz v0,402bf8 <iw_set_basic_config+0x34c>
+ 402b88: 27a40018 addiu a0,sp,24
+ 402b8c: 02a02821 move a1,s5
+ 402b90: 24060010 li a2,16
+ 402b94: 8f998188 lw t9,-32376(gp)
+ 402b98: 00000000 nop
+ 402b9c: 0320f809 jalr t9
+ 402ba0: 00000000 nop
+ 402ba4: 8fbc0010 lw gp,16(sp)
+ 402ba8: 8e43008c lw v1,140(s2)
+ 402bac: 02a02821 move a1,s5
+ 402bb0: 24060010 li a2,16
+ 402bb4: 02602021 move a0,s3
+ 402bb8: afa30028 sw v1,40(sp)
+ 402bbc: 8f998188 lw t9,-32376(gp)
+ 402bc0: 00000000 nop
+ 402bc4: 0320f809 jalr t9
+ 402bc8: 00000000 nop
+ 402bcc: 8fbc0010 lw gp,16(sp)
+ 402bd0: 02c02021 move a0,s6
+ 402bd4: 02603021 move a2,s3
+ 402bd8: 34058b06 li a1,0x8b06
+ 402bdc: 8f9982b8 lw t9,-32072(gp)
+ 402be0: 00000000 nop
+ 402be4: 0320f809 jalr t9
+ 402be8: 00000000 nop
+ 402bec: 8fbc0010 lw gp,16(sp)
+ 402bf0: 0440000c bltz v0,402c24 <iw_set_basic_config+0x378>
+ 402bf4: 00000000 nop
+ 402bf8: 02801021 move v0,s4
+ 402bfc: 8fbf0058 lw ra,88(sp)
+ 402c00: 8fb60050 lw s6,80(sp)
+ 402c04: 8fb5004c lw s5,76(sp)
+ 402c08: 8fb40048 lw s4,72(sp)
+ 402c0c: 8fb30044 lw s3,68(sp)
+ 402c10: 8fb20040 lw s2,64(sp)
+ 402c14: 8fb1003c lw s1,60(sp)
+ 402c18: 8fb00038 lw s0,56(sp)
+ 402c1c: 03e00008 jr ra
+ 402c20: 27bd0060 addiu sp,sp,96
+ 402c24: 8f9980a0 lw t9,-32608(gp)
+ 402c28: 00000000 nop
+ 402c2c: 0320f809 jalr t9
+ 402c30: 00000000 nop
+ 402c34: 8fbc0010 lw gp,16(sp)
+ 402c38: 8c440000 lw a0,0(v0)
+ 402c3c: 8f99828c lw t9,-32116(gp)
+ 402c40: 00000000 nop
+ 402c44: 0320f809 jalr t9
+ 402c48: 00000000 nop
+ 402c4c: 8fbc0010 lw gp,16(sp)
+ 402c50: 00000000 nop
+ 402c54: 8f8480e8 lw a0,-32536(gp)
+ 402c58: 00000000 nop
+ 402c5c: 8c840000 lw a0,0(a0)
+ 402c60: 8f858018 lw a1,-32744(gp)
+ 402c64: 00000000 nop
+ 402c68: 24a50078 addiu a1,a1,120
+ 402c6c: 00403021 move a2,v0
+ 402c70: 8f9981c4 lw t9,-32316(gp)
+ 402c74: 00000000 nop
+ 402c78: 0320f809 jalr t9
+ 402c7c: 00000000 nop
+ 402c80: 8fbc0010 lw gp,16(sp)
+ 402c84: 1000ffdc b 402bf8 <iw_set_basic_config+0x34c>
+ 402c88: 2414ffff li s4,-1
+ 402c8c: 8f9980a0 lw t9,-32608(gp)
+ 402c90: 00000000 nop
+ 402c94: 0320f809 jalr t9
+ 402c98: 00000000 nop
+ 402c9c: 8fbc0010 lw gp,16(sp)
+ 402ca0: 8c440000 lw a0,0(v0)
+ 402ca4: 8f99828c lw t9,-32116(gp)
+ 402ca8: 00000000 nop
+ 402cac: 0320f809 jalr t9
+ 402cb0: 00000000 nop
+ 402cb4: 8fbc0010 lw gp,16(sp)
+ 402cb8: 00000000 nop
+ 402cbc: 8f8480e8 lw a0,-32536(gp)
+ 402cc0: 00000000 nop
+ 402cc4: 8c840000 lw a0,0(a0)
+ 402cc8: 8f858018 lw a1,-32744(gp)
+ 402ccc: 00000000 nop
+ 402cd0: 24a5008c addiu a1,a1,140
+ 402cd4: 00403021 move a2,v0
+ 402cd8: 8f9981c4 lw t9,-32316(gp)
+ 402cdc: 00000000 nop
+ 402ce0: 0320f809 jalr t9
+ 402ce4: 00000000 nop
+ 402ce8: 8fbc0010 lw gp,16(sp)
+ 402cec: 1000ffa3 b 402b7c <iw_set_basic_config+0x2d0>
+ 402cf0: 2414ffff li s4,-1
+ 402cf4: 8f9980a0 lw t9,-32608(gp)
+ 402cf8: 00000000 nop
+ 402cfc: 0320f809 jalr t9
+ 402d00: 00000000 nop
+ 402d04: 8fbc0010 lw gp,16(sp)
+ 402d08: 00408021 move s0,v0
+ 402d0c: 8c440000 lw a0,0(v0)
+ 402d10: 8f99828c lw t9,-32116(gp)
+ 402d14: 00000000 nop
+ 402d18: 0320f809 jalr t9
+ 402d1c: 00000000 nop
+ 402d20: 8fbc0010 lw gp,16(sp)
+ 402d24: 8e060000 lw a2,0(s0)
+ 402d28: 8f8480e8 lw a0,-32536(gp)
+ 402d2c: 00000000 nop
+ 402d30: 8c840000 lw a0,0(a0)
+ 402d34: 8f858018 lw a1,-32744(gp)
+ 402d38: 00000000 nop
+ 402d3c: 24a500a0 addiu a1,a1,160
+ 402d40: 00403821 move a3,v0
+ 402d44: 8f9981c4 lw t9,-32316(gp)
+ 402d48: 00000000 nop
+ 402d4c: 0320f809 jalr t9
+ 402d50: 00000000 nop
+ 402d54: 8fbc0010 lw gp,16(sp)
+ 402d58: 1000ff68 b 402afc <iw_set_basic_config+0x250>
+ 402d5c: 2414ffff li s4,-1
+ 402d60: 8f9980a0 lw t9,-32608(gp)
+ 402d64: 00000000 nop
+ 402d68: 0320f809 jalr t9
+ 402d6c: 00000000 nop
+ 402d70: 8fbc0010 lw gp,16(sp)
+ 402d74: 00408021 move s0,v0
+ 402d78: 8c440000 lw a0,0(v0)
+ 402d7c: 8f99828c lw t9,-32116(gp)
+ 402d80: 00000000 nop
+ 402d84: 0320f809 jalr t9
+ 402d88: 00000000 nop
+ 402d8c: 8fbc0010 lw gp,16(sp)
+ 402d90: 8e060000 lw a2,0(s0)
+ 402d94: 8f8480e8 lw a0,-32536(gp)
+ 402d98: 00000000 nop
+ 402d9c: 8c840000 lw a0,0(a0)
+ 402da0: 8f858018 lw a1,-32744(gp)
+ 402da4: 00000000 nop
+ 402da8: 24a500a0 addiu a1,a1,160
+ 402dac: 00403821 move a3,v0
+ 402db0: 8f9981c4 lw t9,-32316(gp)
+ 402db4: 00000000 nop
+ 402db8: 0320f809 jalr t9
+ 402dbc: 00000000 nop
+ 402dc0: 8fbc0010 lw gp,16(sp)
+ 402dc4: 1000ff34 b 402a98 <iw_set_basic_config+0x1ec>
+ 402dc8: 2414ffff li s4,-1
+ 402dcc: 8f9980a0 lw t9,-32608(gp)
+ 402dd0: 00000000 nop
+ 402dd4: 0320f809 jalr t9
+ 402dd8: 00000000 nop
+ 402ddc: 8fbc0010 lw gp,16(sp)
+ 402de0: 8c440000 lw a0,0(v0)
+ 402de4: 8f99828c lw t9,-32116(gp)
+ 402de8: 00000000 nop
+ 402dec: 0320f809 jalr t9
+ 402df0: 00000000 nop
+ 402df4: 8fbc0010 lw gp,16(sp)
+ 402df8: 00000000 nop
+ 402dfc: 8f8480e8 lw a0,-32536(gp)
+ 402e00: 00000000 nop
+ 402e04: 8c840000 lw a0,0(a0)
+ 402e08: 8f858018 lw a1,-32744(gp)
+ 402e0c: 00000000 nop
+ 402e10: 24a500b8 addiu a1,a1,184
+ 402e14: 00403021 move a2,v0
+ 402e18: 8f9981c4 lw t9,-32316(gp)
+ 402e1c: 00000000 nop
+ 402e20: 0320f809 jalr t9
+ 402e24: 00000000 nop
+ 402e28: 8fbc0010 lw gp,16(sp)
+ 402e2c: 1000fefc b 402a20 <iw_set_basic_config+0x174>
+ 402e30: 2414ffff li s4,-1
+ 402e34: 8f9980a0 lw t9,-32608(gp)
+ 402e38: 00000000 nop
+ 402e3c: 0320f809 jalr t9
+ 402e40: 00000000 nop
+ 402e44: 8fbc0010 lw gp,16(sp)
+ 402e48: 8c440000 lw a0,0(v0)
+ 402e4c: 8f99828c lw t9,-32116(gp)
+ 402e50: 00000000 nop
+ 402e54: 0320f809 jalr t9
+ 402e58: 00000000 nop
+ 402e5c: 8fbc0010 lw gp,16(sp)
+ 402e60: 00000000 nop
+ 402e64: 8f8480e8 lw a0,-32536(gp)
+ 402e68: 00000000 nop
+ 402e6c: 8c840000 lw a0,0(a0)
+ 402e70: 8f858018 lw a1,-32744(gp)
+ 402e74: 00000000 nop
+ 402e78: 24a500cc addiu a1,a1,204
+ 402e7c: 00403021 move a2,v0
+ 402e80: 8f9981c4 lw t9,-32316(gp)
+ 402e84: 00000000 nop
+ 402e88: 0320f809 jalr t9
+ 402e8c: 00000000 nop
+ 402e90: 8fbc0010 lw gp,16(sp)
+ 402e94: 1000fec5 b 4029ac <iw_set_basic_config+0x100>
+ 402e98: 2414ffff li s4,-1
+
+00402e9c <iw_protocol_compare>:
+ 402e9c: 3c1c0fc0 lui gp,0xfc0
+ 402ea0: 279c53b4 addiu gp,gp,21428
+ 402ea4: 0399e021 addu gp,gp,t9
+ 402ea8: 27bdffd0 addiu sp,sp,-48
+ 402eac: afbc0010 sw gp,16(sp)
+ 402eb0: afb20020 sw s2,32(sp)
+ 402eb4: afb1001c sw s1,28(sp)
+ 402eb8: afbf0028 sw ra,40(sp)
+ 402ebc: afbc0024 sw gp,36(sp)
+ 402ec0: afb00018 sw s0,24(sp)
+ 402ec4: 24060010 li a2,16
+ 402ec8: 00808821 move s1,a0
+ 402ecc: 00a09021 move s2,a1
+ 402ed0: 8f99818c lw t9,-32372(gp)
+ 402ed4: 00000000 nop
+ 402ed8: 0320f809 jalr t9
+ 402edc: 00000000 nop
+ 402ee0: 8fbc0010 lw gp,16(sp)
+ 402ee4: 00401821 move v1,v0
+ 402ee8: 10600017 beqz v1,402f48 <iw_protocol_compare+0xac>
+ 402eec: 24020001 li v0,1
+ 402ef0: 8f848018 lw a0,-32744(gp)
+ 402ef4: 00000000 nop
+ 402ef8: 248400e0 addiu a0,a0,224
+ 402efc: 8f998068 lw t9,-32664(gp)
+ 402f00: 00000000 nop
+ 402f04: 0320f809 jalr t9
+ 402f08: 00000000 nop
+ 402f0c: 8fbc0010 lw gp,16(sp)
+ 402f10: 00408021 move s0,v0
+ 402f14: 02202021 move a0,s1
+ 402f18: 02003021 move a2,s0
+ 402f1c: 8f858018 lw a1,-32744(gp)
+ 402f20: 00000000 nop
+ 402f24: 24a500e0 addiu a1,a1,224
+ 402f28: 8f99818c lw t9,-32372(gp)
+ 402f2c: 00000000 nop
+ 402f30: 0320f809 jalr t9
+ 402f34: 00000000 nop
+ 402f38: 8fbc0010 lw gp,16(sp)
+ 402f3c: 10400008 beqz v0,402f60 <iw_protocol_compare+0xc4>
+ 402f40: 02402021 move a0,s2
+ 402f44: 00001021 move v0,zero
+ 402f48: 8fbf0028 lw ra,40(sp)
+ 402f4c: 8fb20020 lw s2,32(sp)
+ 402f50: 8fb1001c lw s1,28(sp)
+ 402f54: 8fb00018 lw s0,24(sp)
+ 402f58: 03e00008 jr ra
+ 402f5c: 27bd0030 addiu sp,sp,48
+ 402f60: 8f858018 lw a1,-32744(gp)
+ 402f64: 00000000 nop
+ 402f68: 24a500e0 addiu a1,a1,224
+ 402f6c: 02003021 move a2,s0
+ 402f70: 8f99818c lw t9,-32372(gp)
+ 402f74: 00000000 nop
+ 402f78: 0320f809 jalr t9
+ 402f7c: 00000000 nop
+ 402f80: 8fbc0010 lw gp,16(sp)
+ 402f84: 1440fff0 bnez v0,402f48 <iw_protocol_compare+0xac>
+ 402f88: 00001021 move v0,zero
+ 402f8c: 02302021 addu a0,s1,s0
+ 402f90: 80820000 lb v0,0(a0)
+ 402f94: 2403002d li v1,45
+ 402f98: 90850000 lbu a1,0(a0)
+ 402f9c: 10430021 beq v0,v1,403024 <iw_protocol_compare+0x188>
+ 402fa0: 02508021 addu s0,s2,s0
+ 402fa4: 82020000 lb v0,0(s0)
+ 402fa8: 00000000 nop
+ 402fac: 1043001b beq v0,v1,40301c <iw_protocol_compare+0x180>
+ 402fb0: 00000000 nop
+ 402fb4: 00052e00 sll a1,a1,0x18
+ 402fb8: 00052e03 sra a1,a1,0x18
+ 402fbc: 8f848018 lw a0,-32744(gp)
+ 402fc0: 00000000 nop
+ 402fc4: 248400ec addiu a0,a0,236
+ 402fc8: 8f99805c lw t9,-32676(gp)
+ 402fcc: 00000000 nop
+ 402fd0: 0320f809 jalr t9
+ 402fd4: 00000000 nop
+ 402fd8: 8fbc0010 lw gp,16(sp)
+ 402fdc: 1040ffd9 beqz v0,402f44 <iw_protocol_compare+0xa8>
+ 402fe0: 00000000 nop
+ 402fe4: 82050000 lb a1,0(s0)
+ 402fe8: 8f848018 lw a0,-32744(gp)
+ 402fec: 00000000 nop
+ 402ff0: 248400ec addiu a0,a0,236
+ 402ff4: 8f99805c lw t9,-32676(gp)
+ 402ff8: 00000000 nop
+ 402ffc: 0320f809 jalr t9
+ 403000: 00000000 nop
+ 403004: 8fbc0010 lw gp,16(sp)
+ 403008: 00401821 move v1,v0
+ 40300c: 1460ffce bnez v1,402f48 <iw_protocol_compare+0xac>
+ 403010: 24020001 li v0,1
+ 403014: 1000ffcc b 402f48 <iw_protocol_compare+0xac>
+ 403018: 00001021 move v0,zero
+ 40301c: 1000ffe5 b 402fb4 <iw_protocol_compare+0x118>
+ 403020: 26100001 addiu s0,s0,1
+ 403024: 90850001 lbu a1,1(a0)
+ 403028: 1000ffde b 402fa4 <iw_protocol_compare+0x108>
+ 40302c: 00000000 nop
+
+00403030 <iw_float2freq>:
+ 403030: 3c1c0fc0 lui gp,0xfc0
+ 403034: 279c5220 addiu gp,gp,21024
+ 403038: 0399e021 addu gp,gp,t9
+ 40303c: 8f818018 lw at,-32744(gp)
+ 403040: 00000000 nop
+ 403044: c42100f0 lwc1 $f1,240(at)
+ 403048: c42000f4 lwc1 $f0,244(at)
+ 40304c: 00000000 nop
+ 403050: 462c003c c.lt.d $f0,$f12
+ 403054: 00000000 nop
+ 403058: 4500000c bc1f 40308c <iw_float2freq+0x5c>
+ 40305c: a4c00004 sh zero,4(a2)
+ 403060: 3c014024 lui at,0x4024
+ 403064: 44811800 mtc1 at,$f3
+ 403068: 44801000 mtc1 zero,$f2
+ 40306c: 00001821 move v1,zero
+ 403070: 46226303 div.d $f12,$f12,$f2
+ 403074: 24620001 addiu v0,v1,1
+ 403078: 462c003c c.lt.d $f0,$f12
+ 40307c: 00000000 nop
+ 403080: 4501fffb bc1t 403070 <iw_float2freq+0x40>
+ 403084: 00401821 move v1,v0
+ 403088: a4c20004 sh v0,4(a2)
+ 40308c: 4442f800 cfc1 v0,$31
+ 403090: 4442f800 cfc1 v0,$31
+ 403094: 00000000 nop
+ 403098: 34410003 ori at,v0,0x3
+ 40309c: 38210002 xori at,at,0x2
+ 4030a0: 44c1f800 ctc1 at,$31
+ 4030a4: 00000000 nop
+ 4030a8: 46206024 cvt.w.d $f0,$f12
+ 4030ac: 44c2f800 ctc1 v0,$31
+ 4030b0: 00000000 nop
+ 4030b4: e4c00000 swc1 $f0,0(a2)
+ 4030b8: 03e00008 jr ra
+ 4030bc: 00000000 nop
+
+004030c0 <iw_freq2float>:
+ 4030c0: 3c1c0fc0 lui gp,0xfc0
+ 4030c4: 279c5190 addiu gp,gp,20880
+ 4030c8: 0399e021 addu gp,gp,t9
+ 4030cc: 8c820000 lw v0,0(a0)
+ 4030d0: 00000000 nop
+ 4030d4: 44821000 mtc1 v0,$f2
+ 4030d8: 00000000 nop
+ 4030dc: 0440000d bltz v0,403114 <iw_freq2float+0x54>
+ 4030e0: 468010a1 cvt.d.w $f2,$f2
+ 4030e4: 94820004 lhu v0,4(a0)
+ 4030e8: 00000000 nop
+ 4030ec: 10400007 beqz v0,40310c <iw_freq2float+0x4c>
+ 4030f0: 00000000 nop
+ 4030f4: 3c014024 lui at,0x4024
+ 4030f8: 44810800 mtc1 at,$f1
+ 4030fc: 44800000 mtc1 zero,$f0
+ 403100: 2442ffff addiu v0,v0,-1
+ 403104: 1440fffe bnez v0,403100 <iw_freq2float+0x40>
+ 403108: 46201082 mul.d $f2,$f2,$f0
+ 40310c: 03e00008 jr ra
+ 403110: 46201006 mov.d $f0,$f2
+ 403114: 3c0141f0 lui at,0x41f0
+ 403118: 44810800 mtc1 at,$f1
+ 40311c: 44800000 mtc1 zero,$f0
+ 403120: 1000fff0 b 4030e4 <iw_freq2float+0x24>
+ 403124: 46201080 add.d $f2,$f2,$f0
+
+00403128 <iw_print_freq>:
+ 403128: 3c1c0fc0 lui gp,0xfc0
+ 40312c: 279c5128 addiu gp,gp,20776
+ 403130: 0399e021 addu gp,gp,t9
+ 403134: 27bdffe0 addiu sp,sp,-32
+ 403138: afbc0010 sw gp,16(sp)
+ 40313c: 44870000 mtc1 a3,$f0
+ 403140: 44860800 mtc1 a2,$f1
+ 403144: 8f818018 lw at,-32744(gp)
+ 403148: 00000000 nop
+ 40314c: c4270138 lwc1 $f7,312(at)
+ 403150: c426013c lwc1 $f6,316(at)
+ 403154: afbf001c sw ra,28(sp)
+ 403158: 4626003c c.lt.d $f0,$f6
+ 40315c: 8f818018 lw at,-32744(gp)
+ 403160: 00000000 nop
+ 403164: c4230140 lwc1 $f3,320(at)
+ 403168: c4220144 lwc1 $f2,324(at)
+ 40316c: 8f858018 lw a1,-32744(gp)
+ 403170: 00000000 nop
+ 403174: 24a500f8 addiu a1,a1,248
+ 403178: 4500000a bc1f 4031a4 <iw_print_freq+0x7c>
+ 40317c: afbc0018 sw gp,24(sp)
+ 403180: 8f9980fc lw t9,-32516(gp)
+ 403184: 00000000 nop
+ 403188: 0320f809 jalr t9
+ 40318c: 00000000 nop
+ 403190: 8fbc0010 lw gp,16(sp)
+ 403194: 8fbf001c lw ra,28(sp)
+ 403198: 00000000 nop
+ 40319c: 03e00008 jr ra
+ 4031a0: 27bd0020 addiu sp,sp,32
+ 4031a4: 4620103e c.le.d $f2,$f0
+ 4031a8: 8f818018 lw at,-32744(gp)
+ 4031ac: 00000000 nop
+ 4031b0: c4250148 lwc1 $f5,328(at)
+ 4031b4: c424014c lwc1 $f4,332(at)
+ 4031b8: 8f858018 lw a1,-32744(gp)
+ 4031bc: 00000000 nop
+ 4031c0: 24a50104 addiu a1,a1,260
+ 4031c4: 45000006 bc1f 4031e0 <iw_print_freq+0xb8>
+ 4031c8: 00000000 nop
+ 4031cc: 46220003 div.d $f0,$f0,$f2
+ 4031d0: 44070000 mfc1 a3,$f0
+ 4031d4: 44060800 mfc1 a2,$f1
+ 4031d8: 1000ffe9 b 403180 <iw_print_freq+0x58>
+ 4031dc: 00000000 nop
+ 4031e0: 4620203e c.le.d $f4,$f0
+ 4031e4: 8f858018 lw a1,-32744(gp)
+ 4031e8: 00000000 nop
+ 4031ec: 24a50114 addiu a1,a1,276
+ 4031f0: 45000006 bc1f 40320c <iw_print_freq+0xe4>
+ 4031f4: 00000000 nop
+ 4031f8: 46240003 div.d $f0,$f0,$f4
+ 4031fc: 44070000 mfc1 a3,$f0
+ 403200: 44060800 mfc1 a2,$f1
+ 403204: 1000ffde b 403180 <iw_print_freq+0x58>
+ 403208: 00000000 nop
+ 40320c: 46260003 div.d $f0,$f0,$f6
+ 403210: 8f858018 lw a1,-32744(gp)
+ 403214: 00000000 nop
+ 403218: 24a50124 addiu a1,a1,292
+ 40321c: 44070000 mfc1 a3,$f0
+ 403220: 44060800 mfc1 a2,$f1
+ 403224: 8f9980fc lw t9,-32516(gp)
+ 403228: 00000000 nop
+ 40322c: 0320f809 jalr t9
+ 403230: 00000000 nop
+ 403234: 8fbc0010 lw gp,16(sp)
+ 403238: 1000ffd6 b 403194 <iw_print_freq+0x6c>
+ 40323c: 00000000 nop
+
+00403240 <iw_freq_to_channel>:
+ 403240: 3c1c0fc0 lui gp,0xfc0
+ 403244: 279c5010 addiu gp,gp,20496
+ 403248: 0399e021 addu gp,gp,t9
+ 40324c: 27bdffc8 addiu sp,sp,-56
+ 403250: afbc0010 sw gp,16(sp)
+ 403254: 8f818018 lw at,-32744(gp)
+ 403258: 00000000 nop
+ 40325c: c4210150 lwc1 $f1,336(at)
+ 403260: c4200154 lwc1 $f0,340(at)
+ 403264: e7b50030 swc1 $f21,48(sp)
+ 403268: e7b40034 swc1 $f20,52(sp)
+ 40326c: 46206506 mov.d $f20,$f12
+ 403270: 4620a03c c.lt.d $f20,$f0
+ 403274: afb20020 sw s2,32(sp)
+ 403278: afb00018 sw s0,24(sp)
+ 40327c: afbf0028 sw ra,40(sp)
+ 403280: afbc0024 sw gp,36(sp)
+ 403284: afb1001c sw s1,28(sp)
+ 403288: 00c09021 move s2,a2
+ 40328c: 4500000a bc1f 4032b8 <iw_freq_to_channel+0x78>
+ 403290: 00008021 move s0,zero
+ 403294: 2402ffff li v0,-1
+ 403298: 8fbf0028 lw ra,40(sp)
+ 40329c: 8fb20020 lw s2,32(sp)
+ 4032a0: 8fb1001c lw s1,28(sp)
+ 4032a4: 8fb00018 lw s0,24(sp)
+ 4032a8: c7b50030 lwc1 $f21,48(sp)
+ 4032ac: c7b40034 lwc1 $f20,52(sp)
+ 4032b0: 03e00008 jr ra
+ 4032b4: 27bd0038 addiu sp,sp,56
+ 4032b8: 9242000e lbu v0,14(s2)
+ 4032bc: 001088c0 sll s1,s0,0x3
+ 4032c0: 02512021 addu a0,s2,s1
+ 4032c4: 0202102a slt v0,s0,v0
+ 4032c8: 24840010 addiu a0,a0,16
+ 4032cc: 14400003 bnez v0,4032dc <iw_freq_to_channel+0x9c>
+ 4032d0: 26100001 addiu s0,s0,1
+ 4032d4: 1000fff0 b 403298 <iw_freq_to_channel+0x58>
+ 4032d8: 2402fffe li v0,-2
+ 4032dc: 8f9980c4 lw t9,-32572(gp)
+ 4032e0: 00000000 nop
+ 4032e4: 0320f809 jalr t9
+ 4032e8: 00000000 nop
+ 4032ec: 8fbc0010 lw gp,16(sp)
+ 4032f0: 4620a032 c.eq.d $f20,$f0
+ 4032f4: 00000000 nop
+ 4032f8: 4500ffef bc1f 4032b8 <iw_freq_to_channel+0x78>
+ 4032fc: 02321821 addu v1,s1,s2
+ 403300: 90620016 lbu v0,22(v1)
+ 403304: 1000ffe4 b 403298 <iw_freq_to_channel+0x58>
+ 403308: 00000000 nop
+
+0040330c <iw_print_bitrate>:
+ 40330c: 3c1c0fc0 lui gp,0xfc0
+ 403310: 279c4f44 addiu gp,gp,20292
+ 403314: 0399e021 addu gp,gp,t9
+ 403318: 27bdffe0 addiu sp,sp,-32
+ 40331c: afbc0010 sw gp,16(sp)
+ 403320: 8f818018 lw at,-32744(gp)
+ 403324: 00000000 nop
+ 403328: c4210170 lwc1 $f1,368(at)
+ 40332c: c4200174 lwc1 $f0,372(at)
+ 403330: 44851000 mtc1 a1,$f2
+ 403334: 00000000 nop
+ 403338: 468010a1 cvt.d.w $f2,$f2
+ 40333c: 4622003e c.le.d $f0,$f2
+ 403340: afbf001c sw ra,28(sp)
+ 403344: 8f818018 lw at,-32744(gp)
+ 403348: 00000000 nop
+ 40334c: c4250178 lwc1 $f5,376(at)
+ 403350: c424017c lwc1 $f4,380(at)
+ 403354: 8f858018 lw a1,-32744(gp)
+ 403358: 00000000 nop
+ 40335c: 24a50158 addiu a1,a1,344
+ 403360: 4500000d bc1f 403398 <iw_print_bitrate+0x8c>
+ 403364: afbc0018 sw gp,24(sp)
+ 403368: 46201003 div.d $f0,$f2,$f0
+ 40336c: 44070000 mfc1 a3,$f0
+ 403370: 44060800 mfc1 a2,$f1
+ 403374: 8f9980fc lw t9,-32516(gp)
+ 403378: 00000000 nop
+ 40337c: 0320f809 jalr t9
+ 403380: 00000000 nop
+ 403384: 8fbc0010 lw gp,16(sp)
+ 403388: 8fbf001c lw ra,28(sp)
+ 40338c: 00000000 nop
+ 403390: 03e00008 jr ra
+ 403394: 27bd0020 addiu sp,sp,32
+ 403398: 4622203e c.le.d $f4,$f2
+ 40339c: 8f858018 lw a1,-32744(gp)
+ 4033a0: 00000000 nop
+ 4033a4: 24a50160 addiu a1,a1,352
+ 4033a8: 45000003 bc1f 4033b8 <iw_print_bitrate+0xac>
+ 4033ac: 00000000 nop
+ 4033b0: 1000ffee b 40336c <iw_print_bitrate+0x60>
+ 4033b4: 46241003 div.d $f0,$f2,$f4
+ 4033b8: 8f818018 lw at,-32744(gp)
+ 4033bc: 00000000 nop
+ 4033c0: c4210180 lwc1 $f1,384(at)
+ 4033c4: c4200184 lwc1 $f0,388(at)
+ 4033c8: 8f858018 lw a1,-32744(gp)
+ 4033cc: 00000000 nop
+ 4033d0: 24a50168 addiu a1,a1,360
+ 4033d4: 46201003 div.d $f0,$f2,$f0
+ 4033d8: 44070000 mfc1 a3,$f0
+ 4033dc: 44060800 mfc1 a2,$f1
+ 4033e0: 8f9980fc lw t9,-32516(gp)
+ 4033e4: 00000000 nop
+ 4033e8: 0320f809 jalr t9
+ 4033ec: 00000000 nop
+ 4033f0: 8fbc0010 lw gp,16(sp)
+ 4033f4: 1000ffe4 b 403388 <iw_print_bitrate+0x7c>
+ 4033f8: 00000000 nop
+
+004033fc <iw_dbm2mwatt>:
+ 4033fc: 3c1c0fc0 lui gp,0xfc0
+ 403400: 279c4e54 addiu gp,gp,20052
+ 403404: 0399e021 addu gp,gp,t9
+ 403408: 03e00008 jr ra
+ 40340c: 00000000 nop
+
+00403410 <iw_mwatt2dbm>:
+ 403410: 3c1c0fc0 lui gp,0xfc0
+ 403414: 279c4e40 addiu gp,gp,20032
+ 403418: 0399e021 addu gp,gp,t9
+ 40341c: 03e00008 jr ra
+ 403420: 00000000 nop
+
+00403424 <iw_get_stats>:
+ 403424: 3c1c0fc0 lui gp,0xfc0
+ 403428: 279c4e2c addiu gp,gp,20012
+ 40342c: 0399e021 addu gp,gp,t9
+ 403430: 27bdffb0 addiu sp,sp,-80
+ 403434: afbc0010 sw gp,16(sp)
+ 403438: 00c01821 move v1,a2
+ 40343c: afb20040 sw s2,64(sp)
+ 403440: 24060010 li a2,16
+ 403444: 00809021 move s2,a0
+ 403448: 24020001 li v0,1
+ 40344c: 27a40018 addiu a0,sp,24
+ 403450: afbf0048 sw ra,72(sp)
+ 403454: afb1003c sw s1,60(sp)
+ 403458: afb00038 sw s0,56(sp)
+ 40345c: afbc0044 sw gp,68(sp)
+ 403460: afa30028 sw v1,40(sp)
+ 403464: a7a2002e sh v0,46(sp)
+ 403468: a7a0002c sh zero,44(sp)
+ 40346c: 00a08021 move s0,a1
+ 403470: 8f998188 lw t9,-32376(gp)
+ 403474: 00000000 nop
+ 403478: 0320f809 jalr t9
+ 40347c: 00000000 nop
+ 403480: 8fbc0010 lw gp,16(sp)
+ 403484: 27b10018 addiu s1,sp,24
+ 403488: 02002821 move a1,s0
+ 40348c: 02202021 move a0,s1
+ 403490: 24060010 li a2,16
+ 403494: 8f998188 lw t9,-32376(gp)
+ 403498: 00000000 nop
+ 40349c: 0320f809 jalr t9
+ 4034a0: 00000000 nop
+ 4034a4: 8fbc0010 lw gp,16(sp)
+ 4034a8: 02402021 move a0,s2
+ 4034ac: 02203021 move a2,s1
+ 4034b0: 34058b0f li a1,0x8b0f
+ 4034b4: 8f9982b8 lw t9,-32072(gp)
+ 4034b8: 00000000 nop
+ 4034bc: 0320f809 jalr t9
+ 4034c0: 00000000 nop
+ 4034c4: 8fbc0010 lw gp,16(sp)
+ 4034c8: 28420000 slti v0,v0,0
+ 4034cc: 8fbf0048 lw ra,72(sp)
+ 4034d0: 8fb20040 lw s2,64(sp)
+ 4034d4: 8fb1003c lw s1,60(sp)
+ 4034d8: 8fb00038 lw s0,56(sp)
+ 4034dc: 00021023 negu v0,v0
+ 4034e0: 03e00008 jr ra
+ 4034e4: 27bd0050 addiu sp,sp,80
+
+004034e8 <iw_print_stats>:
+ 4034e8: 3c1c0fc0 lui gp,0xfc0
+ 4034ec: 279c4d68 addiu gp,gp,19816
+ 4034f0: 0399e021 addu gp,gp,t9
+ 4034f4: 27bdffc8 addiu sp,sp,-56
+ 4034f8: afbc0028 sw gp,40(sp)
+ 4034fc: afbf0034 sw ra,52(sp)
+ 403500: afbc0030 sw gp,48(sp)
+ 403504: 00805021 move t2,a0
+ 403508: 00a04021 move t0,a1
+ 40350c: 10e0004e beqz a3,403648 <iw_print_stats+0x160>
+ 403510: 00c04821 move t1,a2
+ 403514: 91030001 lbu v1,1(t0)
+ 403518: 00000000 nop
+ 40351c: 1060004a beqz v1,403648 <iw_print_stats+0x160>
+ 403520: 00000000 nop
+ 403524: 91220095 lbu v0,149(t1)
+ 403528: 00000000 nop
+ 40352c: 0043102b sltu v0,v0,v1
+ 403530: 10400023 beqz v0,4035c0 <iw_print_stats+0xd8>
+ 403534: 00000000 nop
+ 403538: 91040002 lbu a0,2(t0)
+ 40353c: 91020003 lbu v0,3(t0)
+ 403540: 2463ff00 addiu v1,v1,-256
+ 403544: 2484ff00 addiu a0,a0,-256
+ 403548: afa30010 sw v1,16(sp)
+ 40354c: afa40014 sw a0,20(sp)
+ 403550: 30420007 andi v0,v0,0x7
+ 403554: 91270094 lbu a3,148(t1)
+ 403558: 91060000 lbu a2,0(t0)
+ 40355c: 10400013 beqz v0,4035ac <iw_print_stats+0xc4>
+ 403560: 00000000 nop
+ 403564: 8f828018 lw v0,-32744(gp)
+ 403568: 00000000 nop
+ 40356c: 24420188 addiu v0,v0,392
+ 403570: 00000000 nop
+ 403574: afa20018 sw v0,24(sp)
+ 403578: 01402021 move a0,t2
+ 40357c: 8f858018 lw a1,-32744(gp)
+ 403580: 00000000 nop
+ 403584: 24a50194 addiu a1,a1,404
+ 403588: 8f9980fc lw t9,-32516(gp)
+ 40358c: 00000000 nop
+ 403590: 0320f809 jalr t9
+ 403594: 00000000 nop
+ 403598: 8fbc0028 lw gp,40(sp)
+ 40359c: 8fbf0034 lw ra,52(sp)
+ 4035a0: 00000000 nop
+ 4035a4: 03e00008 jr ra
+ 4035a8: 27bd0038 addiu sp,sp,56
+ 4035ac: 8f828018 lw v0,-32744(gp)
+ 4035b0: 00000000 nop
+ 4035b4: 244201d0 addiu v0,v0,464
+ 4035b8: 1000ffef b 403578 <iw_print_stats+0x90>
+ 4035bc: afa20018 sw v0,24(sp)
+ 4035c0: 91020003 lbu v0,3(t0)
+ 4035c4: 91260096 lbu a2,150(t1)
+ 4035c8: 91240095 lbu a0,149(t1)
+ 4035cc: 91050002 lbu a1,2(t0)
+ 4035d0: 30420007 andi v0,v0,0x7
+ 4035d4: afa30010 sw v1,16(sp)
+ 4035d8: afa40014 sw a0,20(sp)
+ 4035dc: afa50018 sw a1,24(sp)
+ 4035e0: afa6001c sw a2,28(sp)
+ 4035e4: 91060000 lbu a2,0(t0)
+ 4035e8: 91270094 lbu a3,148(t1)
+ 4035ec: 10400011 beqz v0,403634 <iw_print_stats+0x14c>
+ 4035f0: 00000000 nop
+ 4035f4: 8f828018 lw v0,-32744(gp)
+ 4035f8: 00000000 nop
+ 4035fc: 24420188 addiu v0,v0,392
+ 403600: 00000000 nop
+ 403604: afa20020 sw v0,32(sp)
+ 403608: 01402021 move a0,t2
+ 40360c: 8f858018 lw a1,-32744(gp)
+ 403610: 00000000 nop
+ 403614: 24a501d4 addiu a1,a1,468
+ 403618: 8f9980fc lw t9,-32516(gp)
+ 40361c: 00000000 nop
+ 403620: 0320f809 jalr t9
+ 403624: 00000000 nop
+ 403628: 8fbc0028 lw gp,40(sp)
+ 40362c: 1000ffdb b 40359c <iw_print_stats+0xb4>
+ 403630: 00000000 nop
+ 403634: 8f828018 lw v0,-32744(gp)
+ 403638: 00000000 nop
+ 40363c: 244201d0 addiu v0,v0,464
+ 403640: 1000fff1 b 403608 <iw_print_stats+0x120>
+ 403644: afa20020 sw v0,32(sp)
+ 403648: 91020003 lbu v0,3(t0)
+ 40364c: 91030002 lbu v1,2(t0)
+ 403650: 30420007 andi v0,v0,0x7
+ 403654: afa30010 sw v1,16(sp)
+ 403658: 91060000 lbu a2,0(t0)
+ 40365c: 91070001 lbu a3,1(t0)
+ 403660: 10400011 beqz v0,4036a8 <iw_print_stats+0x1c0>
+ 403664: 00000000 nop
+ 403668: 8f828018 lw v0,-32744(gp)
+ 40366c: 00000000 nop
+ 403670: 24420188 addiu v0,v0,392
+ 403674: 00000000 nop
+ 403678: afa20014 sw v0,20(sp)
+ 40367c: 01402021 move a0,t2
+ 403680: 8f858018 lw a1,-32744(gp)
+ 403684: 00000000 nop
+ 403688: 24a5020c addiu a1,a1,524
+ 40368c: 8f9980fc lw t9,-32516(gp)
+ 403690: 00000000 nop
+ 403694: 0320f809 jalr t9
+ 403698: 00000000 nop
+ 40369c: 8fbc0028 lw gp,40(sp)
+ 4036a0: 1000ffbe b 40359c <iw_print_stats+0xb4>
+ 4036a4: 00000000 nop
+ 4036a8: 8f828018 lw v0,-32744(gp)
+ 4036ac: 00000000 nop
+ 4036b0: 244201d0 addiu v0,v0,464
+ 4036b4: 1000fff1 b 40367c <iw_print_stats+0x194>
+ 4036b8: afa20014 sw v0,20(sp)
+
+004036bc <iw_print_key>:
+ 4036bc: 3c1c0fc0 lui gp,0xfc0
+ 4036c0: 279c4b94 addiu gp,gp,19348
+ 4036c4: 0399e021 addu gp,gp,t9
+ 4036c8: 27bdffd0 addiu sp,sp,-48
+ 4036cc: afbc0010 sw gp,16(sp)
+ 4036d0: 30e70800 andi a3,a3,0x800
+ 4036d4: afb30024 sw s3,36(sp)
+ 4036d8: afb20020 sw s2,32(sp)
+ 4036dc: afb00018 sw s0,24(sp)
+ 4036e0: afbf002c sw ra,44(sp)
+ 4036e4: afbc0028 sw gp,40(sp)
+ 4036e8: afb1001c sw s1,28(sp)
+ 4036ec: 00808021 move s0,a0
+ 4036f0: 00a09821 move s3,a1
+ 4036f4: 10e00038 beqz a3,4037d8 <iw_print_key+0x11c>
+ 4036f8: 00c09021 move s2,a2
+ 4036fc: 1a40002b blez s2,4037ac <iw_print_key+0xf0>
+ 403700: 24110001 li s1,1
+ 403704: 8f838018 lw v1,-32744(gp)
+ 403708: 00000000 nop
+ 40370c: 2463023c addiu v1,v1,572
+ 403710: 00000000 nop
+ 403714: 80660000 lb a2,0(v1)
+ 403718: 80670001 lb a3,1(v1)
+ 40371c: 80680002 lb t0,2(v1)
+ 403720: a2060000 sb a2,0(s0)
+ 403724: a2070001 sb a3,1(s0)
+ 403728: 0232102a slt v0,s1,s2
+ 40372c: a2080002 sb t0,2(s0)
+ 403730: 10400011 beqz v0,403778 <iw_print_key+0xbc>
+ 403734: 26100002 addiu s0,s0,2
+ 403738: 00602821 move a1,v1
+ 40373c: 8f848018 lw a0,-32744(gp)
+ 403740: 00000000 nop
+ 403744: 24840240 addiu a0,a0,576
+ 403748: 32220001 andi v0,s1,0x1
+ 40374c: 26310001 addiu s1,s1,1
+ 403750: 10400010 beqz v0,403794 <iw_print_key+0xd8>
+ 403754: 0232182a slt v1,s1,s2
+ 403758: 80a60000 lb a2,0(a1)
+ 40375c: 80a70001 lb a3,1(a1)
+ 403760: 80a80002 lb t0,2(a1)
+ 403764: a2060000 sb a2,0(s0)
+ 403768: a2070001 sb a3,1(s0)
+ 40376c: a2080002 sb t0,2(s0)
+ 403770: 1460fff5 bnez v1,403748 <iw_print_key+0x8c>
+ 403774: 26100002 addiu s0,s0,2
+ 403778: 8fbf002c lw ra,44(sp)
+ 40377c: 8fb30024 lw s3,36(sp)
+ 403780: 8fb20020 lw s2,32(sp)
+ 403784: 8fb1001c lw s1,28(sp)
+ 403788: 8fb00018 lw s0,24(sp)
+ 40378c: 03e00008 jr ra
+ 403790: 27bd0030 addiu sp,sp,48
+ 403794: 80860000 lb a2,0(a0)
+ 403798: 80870001 lb a3,1(a0)
+ 40379c: a2060000 sb a2,0(s0)
+ 4037a0: a2070001 sb a3,1(s0)
+ 4037a4: 1000ffec b 403758 <iw_print_key+0x9c>
+ 4037a8: 26100001 addiu s0,s0,1
+ 4037ac: 8f858018 lw a1,-32744(gp)
+ 4037b0: 00000000 nop
+ 4037b4: 24a50244 addiu a1,a1,580
+ 4037b8: 00000000 nop
+ 4037bc: 80a20000 lb v0,0(a1)
+ 4037c0: 80a30001 lb v1,1(a1)
+ 4037c4: 80a40002 lb a0,2(a1)
+ 4037c8: a2020000 sb v0,0(s0)
+ 4037cc: a2030001 sb v1,1(s0)
+ 4037d0: 1000ffe9 b 403778 <iw_print_key+0xbc>
+ 4037d4: a2040002 sb a0,2(s0)
+ 4037d8: 92660000 lbu a2,0(s3)
+ 4037dc: 02002021 move a0,s0
+ 4037e0: 8f858018 lw a1,-32744(gp)
+ 4037e4: 00000000 nop
+ 4037e8: 24a50248 addiu a1,a1,584
+ 4037ec: 24110001 li s1,1
+ 4037f0: 8f9980fc lw t9,-32516(gp)
+ 4037f4: 00000000 nop
+ 4037f8: 0320f809 jalr t9
+ 4037fc: 00000000 nop
+ 403800: 8fbc0010 lw gp,16(sp)
+ 403804: 0232182a slt v1,s1,s2
+ 403808: 1060ffdb beqz v1,403778 <iw_print_key+0xbc>
+ 40380c: 26100002 addiu s0,s0,2
+ 403810: 32220001 andi v0,s1,0x1
+ 403814: 02711821 addu v1,s3,s1
+ 403818: 8f858018 lw a1,-32744(gp)
+ 40381c: 00000000 nop
+ 403820: 24a50248 addiu a1,a1,584
+ 403824: 1040000d beqz v0,40385c <iw_print_key+0x1a0>
+ 403828: 26310001 addiu s1,s1,1
+ 40382c: 90660000 lbu a2,0(v1)
+ 403830: 02002021 move a0,s0
+ 403834: 8f9980fc lw t9,-32516(gp)
+ 403838: 00000000 nop
+ 40383c: 0320f809 jalr t9
+ 403840: 00000000 nop
+ 403844: 8fbc0010 lw gp,16(sp)
+ 403848: 0232182a slt v1,s1,s2
+ 40384c: 1460fff0 bnez v1,403810 <iw_print_key+0x154>
+ 403850: 26100002 addiu s0,s0,2
+ 403854: 1000ffc8 b 403778 <iw_print_key+0xbc>
+ 403858: 00000000 nop
+ 40385c: 8f848018 lw a0,-32744(gp)
+ 403860: 00000000 nop
+ 403864: 24840240 addiu a0,a0,576
+ 403868: 80840000 lb a0,0(a0)
+ 40386c: 8f868018 lw a2,-32744(gp)
+ 403870: 00000000 nop
+ 403874: 24c60240 addiu a2,a2,576
+ 403878: 80c60001 lb a2,1(a2)
+ 40387c: a2040000 sb a0,0(s0)
+ 403880: a2060001 sb a2,1(s0)
+ 403884: 1000ffe9 b 40382c <iw_print_key+0x170>
+ 403888: 26100001 addiu s0,s0,1
+
+0040388c <iw_pass_key>:
+ 40388c: 3c1c0fc0 lui gp,0xfc0
+ 403890: 279c49c4 addiu gp,gp,18884
+ 403894: 0399e021 addu gp,gp,t9
+ 403898: 27bdffe0 addiu sp,sp,-32
+ 40389c: afbc0010 sw gp,16(sp)
+ 4038a0: 8f8780e8 lw a3,-32536(gp)
+ 4038a4: 00000000 nop
+ 4038a8: 8ce70000 lw a3,0(a3)
+ 4038ac: 8f848018 lw a0,-32744(gp)
+ 4038b0: 00000000 nop
+ 4038b4: 24840250 addiu a0,a0,592
+ 4038b8: 24050001 li a1,1
+ 4038bc: 24060022 li a2,34
+ 4038c0: afbf001c sw ra,28(sp)
+ 4038c4: afbc0018 sw gp,24(sp)
+ 4038c8: 8f9980c8 lw t9,-32568(gp)
+ 4038cc: 00000000 nop
+ 4038d0: 0320f809 jalr t9
+ 4038d4: 00000000 nop
+ 4038d8: 8fbc0010 lw gp,16(sp)
+ 4038dc: 8fbf001c lw ra,28(sp)
+ 4038e0: 2402ffff li v0,-1
+ 4038e4: 03e00008 jr ra
+ 4038e8: 27bd0020 addiu sp,sp,32
+
+004038ec <iw_in_key>:
+ 4038ec: 3c1c0fc0 lui gp,0xfc0
+ 4038f0: 279c4964 addiu gp,gp,18788
+ 4038f4: 0399e021 addu gp,gp,t9
+ 4038f8: 27bdffc0 addiu sp,sp,-64
+ 4038fc: afbc0010 sw gp,16(sp)
+ 403900: afb3002c sw s3,44(sp)
+ 403904: afb10024 sw s1,36(sp)
+ 403908: afb00020 sw s0,32(sp)
+ 40390c: afbf003c sw ra,60(sp)
+ 403910: afbc0038 sw gp,56(sp)
+ 403914: afb50034 sw s5,52(sp)
+ 403918: afb40030 sw s4,48(sp)
+ 40391c: afb20028 sw s2,40(sp)
+ 403920: 00a09821 move s3,a1
+ 403924: 24060002 li a2,2
+ 403928: 8f858018 lw a1,-32744(gp)
+ 40392c: 00000000 nop
+ 403930: 24a50274 addiu a1,a1,628
+ 403934: 00808021 move s0,a0
+ 403938: 8f99818c lw t9,-32372(gp)
+ 40393c: 00000000 nop
+ 403940: 0320f809 jalr t9
+ 403944: 00000000 nop
+ 403948: 8fbc0010 lw gp,16(sp)
+ 40394c: 10400080 beqz v0,403b50 <iw_in_key+0x264>
+ 403950: 00008821 move s1,zero
+ 403954: 8f858018 lw a1,-32744(gp)
+ 403958: 00000000 nop
+ 40395c: 24a50278 addiu a1,a1,632
+ 403960: 02002021 move a0,s0
+ 403964: 24060002 li a2,2
+ 403968: 8f99818c lw t9,-32372(gp)
+ 40396c: 00000000 nop
+ 403970: 0320f809 jalr t9
+ 403974: 00000000 nop
+ 403978: 8fbc0010 lw gp,16(sp)
+ 40397c: 1040006c beqz v0,403b30 <iw_in_key+0x244>
+ 403980: 26040002 addiu a0,s0,2
+ 403984: 02002021 move a0,s0
+ 403988: 8f998068 lw t9,-32664(gp)
+ 40398c: 00000000 nop
+ 403990: 0320f809 jalr t9
+ 403994: 00000000 nop
+ 403998: 8fbc0010 lw gp,16(sp)
+ 40399c: 24420001 addiu v0,v0,1
+ 4039a0: 00402021 move a0,v0
+ 4039a4: 8f998230 lw t9,-32208(gp)
+ 4039a8: 00000000 nop
+ 4039ac: 0320f809 jalr t9
+ 4039b0: 00000000 nop
+ 4039b4: 8fbc0010 lw gp,16(sp)
+ 4039b8: 00409021 move s2,v0
+ 4039bc: 1240004d beqz s2,403af4 <iw_in_key+0x208>
+ 4039c0: 02002821 move a1,s0
+ 4039c4: 02402021 move a0,s2
+ 4039c8: 8f9982c4 lw t9,-32060(gp)
+ 4039cc: 00000000 nop
+ 4039d0: 0320f809 jalr t9
+ 4039d4: 00000000 nop
+ 4039d8: 8fbc0010 lw gp,16(sp)
+ 4039dc: 00000000 nop
+ 4039e0: 8f858018 lw a1,-32744(gp)
+ 4039e4: 00000000 nop
+ 4039e8: 24a5027c addiu a1,a1,636
+ 4039ec: 02402021 move a0,s2
+ 4039f0: 8f998174 lw t9,-32396(gp)
+ 4039f4: 00000000 nop
+ 4039f8: 0320f809 jalr t9
+ 4039fc: 00000000 nop
+ 403a00: 8fbc0010 lw gp,16(sp)
+ 403a04: 00408021 move s0,v0
+ 403a08: 12000032 beqz s0,403ad4 <iw_in_key+0x1e8>
+ 403a0c: 24150001 li s5,1
+ 403a10: 27b40018 addiu s4,sp,24
+ 403a14: 02002021 move a0,s0
+ 403a18: 8f858018 lw a1,-32744(gp)
+ 403a1c: 00000000 nop
+ 403a20: 24a50284 addiu a1,a1,644
+ 403a24: 27a60018 addiu a2,sp,24
+ 403a28: 8f998170 lw t9,-32400(gp)
+ 403a2c: 00000000 nop
+ 403a30: 0320f809 jalr t9
+ 403a34: 00000000 nop
+ 403a38: 8fbc0010 lw gp,16(sp)
+ 403a3c: 02711821 addu v1,s3,s1
+ 403a40: 1055000b beq v0,s5,403a70 <iw_in_key+0x184>
+ 403a44: 02002021 move a0,s0
+ 403a48: 2402ffff li v0,-1
+ 403a4c: 8fbf003c lw ra,60(sp)
+ 403a50: 8fb50034 lw s5,52(sp)
+ 403a54: 8fb40030 lw s4,48(sp)
+ 403a58: 8fb3002c lw s3,44(sp)
+ 403a5c: 8fb20028 lw s2,40(sp)
+ 403a60: 8fb10024 lw s1,36(sp)
+ 403a64: 8fb00020 lw s0,32(sp)
+ 403a68: 03e00008 jr ra
+ 403a6c: 27bd0040 addiu sp,sp,64
+ 403a70: 92820003 lbu v0,3(s4)
+ 403a74: 26100002 addiu s0,s0,2
+ 403a78: a0620000 sb v0,0(v1)
+ 403a7c: 8f998068 lw t9,-32664(gp)
+ 403a80: 00000000 nop
+ 403a84: 0320f809 jalr t9
+ 403a88: 00000000 nop
+ 403a8c: 8fbc0010 lw gp,16(sp)
+ 403a90: 2c420003 sltiu v0,v0,3
+ 403a94: 26310001 addiu s1,s1,1
+ 403a98: 8f858018 lw a1,-32744(gp)
+ 403a9c: 00000000 nop
+ 403aa0: 24a5027c addiu a1,a1,636
+ 403aa4: 10400007 beqz v0,403ac4 <iw_in_key+0x1d8>
+ 403aa8: 00002021 move a0,zero
+ 403aac: 8f998174 lw t9,-32396(gp)
+ 403ab0: 00000000 nop
+ 403ab4: 0320f809 jalr t9
+ 403ab8: 00000000 nop
+ 403abc: 8fbc0010 lw gp,16(sp)
+ 403ac0: 00408021 move s0,v0
+ 403ac4: 12000003 beqz s0,403ad4 <iw_in_key+0x1e8>
+ 403ac8: 2a220020 slti v0,s1,32
+ 403acc: 1440ffd1 bnez v0,403a14 <iw_in_key+0x128>
+ 403ad0: 00000000 nop
+ 403ad4: 02402021 move a0,s2
+ 403ad8: 8f998030 lw t9,-32720(gp)
+ 403adc: 00000000 nop
+ 403ae0: 0320f809 jalr t9
+ 403ae4: 00000000 nop
+ 403ae8: 8fbc0010 lw gp,16(sp)
+ 403aec: 1000ffd7 b 403a4c <iw_in_key+0x160>
+ 403af0: 02201021 move v0,s1
+ 403af4: 8f8780e8 lw a3,-32536(gp)
+ 403af8: 00000000 nop
+ 403afc: 8ce70000 lw a3,0(a3)
+ 403b00: 8f848018 lw a0,-32744(gp)
+ 403b04: 00000000 nop
+ 403b08: 24840288 addiu a0,a0,648
+ 403b0c: 24050001 li a1,1
+ 403b10: 24060022 li a2,34
+ 403b14: 8f9980c8 lw t9,-32568(gp)
+ 403b18: 00000000 nop
+ 403b1c: 0320f809 jalr t9
+ 403b20: 00000000 nop
+ 403b24: 8fbc0010 lw gp,16(sp)
+ 403b28: 1000ffc8 b 403a4c <iw_in_key+0x160>
+ 403b2c: 2402ffff li v0,-1
+ 403b30: 02602821 move a1,s3
+ 403b34: 8f99810c lw t9,-32500(gp)
+ 403b38: 00000000 nop
+ 403b3c: 0320f809 jalr t9
+ 403b40: 00000000 nop
+ 403b44: 8fbc0010 lw gp,16(sp)
+ 403b48: 1000ffc0 b 403a4c <iw_in_key+0x160>
+ 403b4c: 00000000 nop
+ 403b50: 26100002 addiu s0,s0,2
+ 403b54: 02002021 move a0,s0
+ 403b58: 8f998068 lw t9,-32664(gp)
+ 403b5c: 00000000 nop
+ 403b60: 0320f809 jalr t9
+ 403b64: 00000000 nop
+ 403b68: 8fbc0010 lw gp,16(sp)
+ 403b6c: 00408821 move s1,v0
+ 403b70: 2a220021 slti v0,s1,33
+ 403b74: 14400002 bnez v0,403b80 <iw_in_key+0x294>
+ 403b78: 00000000 nop
+ 403b7c: 24110020 li s1,32
+ 403b80: 02602021 move a0,s3
+ 403b84: 02002821 move a1,s0
+ 403b88: 02203021 move a2,s1
+ 403b8c: 8f998188 lw t9,-32376(gp)
+ 403b90: 00000000 nop
+ 403b94: 0320f809 jalr t9
+ 403b98: 00000000 nop
+ 403b9c: 8fbc0010 lw gp,16(sp)
+ 403ba0: 1000ffaa b 403a4c <iw_in_key+0x160>
+ 403ba4: 02201021 move v0,s1
+
+00403ba8 <iw_print_pm_value>:
+ 403ba8: 3c1c0fc0 lui gp,0xfc0
+ 403bac: 279c46a8 addiu gp,gp,18088
+ 403bb0: 0399e021 addu gp,gp,t9
+ 403bb4: 27bdffe0 addiu sp,sp,-32
+ 403bb8: afbc0010 sw gp,16(sp)
+ 403bbc: 30c20001 andi v0,a2,0x1
+ 403bc0: afbf001c sw ra,28(sp)
+ 403bc4: afbc0018 sw gp,24(sp)
+ 403bc8: 10400010 beqz v0,403c0c <iw_print_pm_value+0x64>
+ 403bcc: 00a01821 move v1,a1
+ 403bd0: 8f888018 lw t0,-32744(gp)
+ 403bd4: 00000000 nop
+ 403bd8: 250802ac addiu t0,t0,684
+ 403bdc: 00000000 nop
+ 403be0: 81020000 lb v0,0(t0)
+ 403be4: 81050001 lb a1,1(t0)
+ 403be8: 81070002 lb a3,2(t0)
+ 403bec: a0820000 sb v0,0(a0)
+ 403bf0: a0850001 sb a1,1(a0)
+ 403bf4: a0870002 sb a3,2(a0)
+ 403bf8: 81020003 lb v0,3(t0)
+ 403bfc: 81050004 lb a1,4(t0)
+ 403c00: a0820003 sb v0,3(a0)
+ 403c04: a0850004 sb a1,4(a0)
+ 403c08: 24840004 addiu a0,a0,4
+ 403c0c: 30c20002 andi v0,a2,0x2
+ 403c10: 10400011 beqz v0,403c58 <iw_print_pm_value+0xb0>
+ 403c14: 30c22000 andi v0,a2,0x2000
+ 403c18: 8f888018 lw t0,-32744(gp)
+ 403c1c: 00000000 nop
+ 403c20: 250802b4 addiu t0,t0,692
+ 403c24: 00000000 nop
+ 403c28: 81020000 lb v0,0(t0)
+ 403c2c: 81050001 lb a1,1(t0)
+ 403c30: 81070002 lb a3,2(t0)
+ 403c34: a0820000 sb v0,0(a0)
+ 403c38: a0850001 sb a1,1(a0)
+ 403c3c: a0870002 sb a3,2(a0)
+ 403c40: 81020003 lb v0,3(t0)
+ 403c44: 81050004 lb a1,4(t0)
+ 403c48: a0820003 sb v0,3(a0)
+ 403c4c: a0850004 sb a1,4(a0)
+ 403c50: 24840004 addiu a0,a0,4
+ 403c54: 30c22000 andi v0,a2,0x2000
+ 403c58: 1040005c beqz v0,403dcc <iw_print_pm_value+0x224>
+ 403c5c: 00000000 nop
+ 403c60: 8f888018 lw t0,-32744(gp)
+ 403c64: 00000000 nop
+ 403c68: 250802bc addiu t0,t0,700
+ 403c6c: 00000000 nop
+ 403c70: 81020000 lb v0,0(t0)
+ 403c74: 81050001 lb a1,1(t0)
+ 403c78: 81070002 lb a3,2(t0)
+ 403c7c: a0820000 sb v0,0(a0)
+ 403c80: a0850001 sb a1,1(a0)
+ 403c84: a0870002 sb a3,2(a0)
+ 403c88: 81020003 lb v0,3(t0)
+ 403c8c: 81050004 lb a1,4(t0)
+ 403c90: 81070005 lb a3,5(t0)
+ 403c94: a0820003 sb v0,3(a0)
+ 403c98: a0850004 sb a1,4(a0)
+ 403c9c: a0870005 sb a3,5(a0)
+ 403ca0: 81020006 lb v0,6(t0)
+ 403ca4: 81050007 lb a1,7(t0)
+ 403ca8: 81070008 lb a3,8(t0)
+ 403cac: a0820006 sb v0,6(a0)
+ 403cb0: a0850007 sb a1,7(a0)
+ 403cb4: a0870008 sb a3,8(a0)
+ 403cb8: 81020009 lb v0,9(t0)
+ 403cbc: 00000000 nop
+ 403cc0: a0820009 sb v0,9(a0)
+ 403cc4: 24840009 addiu a0,a0,9
+ 403cc8: 30c20004 andi v0,a2,0x4
+ 403ccc: 10400017 beqz v0,403d2c <iw_print_pm_value+0x184>
+ 403cd0: 3c02000f lui v0,0xf
+ 403cd4: 8f818018 lw at,-32744(gp)
+ 403cd8: 00000000 nop
+ 403cdc: c42102f0 lwc1 $f1,752(at)
+ 403ce0: c42002f4 lwc1 $f0,756(at)
+ 403ce4: 44831000 mtc1 v1,$f2
+ 403ce8: 00000000 nop
+ 403cec: 468010a1 cvt.d.w $f2,$f2
+ 403cf0: 46201083 div.d $f2,$f2,$f0
+ 403cf4: 8f858018 lw a1,-32744(gp)
+ 403cf8: 00000000 nop
+ 403cfc: 24a502c8 addiu a1,a1,712
+ 403d00: 44071000 mfc1 a3,$f2
+ 403d04: 44061800 mfc1 a2,$f3
+ 403d08: 8f9980fc lw t9,-32516(gp)
+ 403d0c: 00000000 nop
+ 403d10: 0320f809 jalr t9
+ 403d14: 00000000 nop
+ 403d18: 8fbc0010 lw gp,16(sp)
+ 403d1c: 8fbf001c lw ra,28(sp)
+ 403d20: 00000000 nop
+ 403d24: 03e00008 jr ra
+ 403d28: 27bd0020 addiu sp,sp,32
+ 403d2c: 3442423f ori v0,v0,0x423f
+ 403d30: 0043102a slt v0,v0,v1
+ 403d34: 1040000d beqz v0,403d6c <iw_print_pm_value+0x1c4>
+ 403d38: 286203e8 slti v0,v1,1000
+ 403d3c: 8f818018 lw at,-32744(gp)
+ 403d40: 00000000 nop
+ 403d44: c42102f8 lwc1 $f1,760(at)
+ 403d48: c42002fc lwc1 $f0,764(at)
+ 403d4c: 44831000 mtc1 v1,$f2
+ 403d50: 00000000 nop
+ 403d54: 468010a1 cvt.d.w $f2,$f2
+ 403d58: 8f858018 lw a1,-32744(gp)
+ 403d5c: 00000000 nop
+ 403d60: 24a502cc addiu a1,a1,716
+ 403d64: 1000ffe6 b 403d00 <iw_print_pm_value+0x158>
+ 403d68: 46201083 div.d $f2,$f2,$f0
+ 403d6c: 1440000d bnez v0,403da4 <iw_print_pm_value+0x1fc>
+ 403d70: 00603021 move a2,v1
+ 403d74: 8f818018 lw at,-32744(gp)
+ 403d78: 00000000 nop
+ 403d7c: c4210300 lwc1 $f1,768(at)
+ 403d80: c4200304 lwc1 $f0,772(at)
+ 403d84: 44831000 mtc1 v1,$f2
+ 403d88: 00000000 nop
+ 403d8c: 468010a1 cvt.d.w $f2,$f2
+ 403d90: 8f858018 lw a1,-32744(gp)
+ 403d94: 00000000 nop
+ 403d98: 24a502d0 addiu a1,a1,720
+ 403d9c: 1000ffd8 b 403d00 <iw_print_pm_value+0x158>
+ 403da0: 46201083 div.d $f2,$f2,$f0
+ 403da4: 8f858018 lw a1,-32744(gp)
+ 403da8: 00000000 nop
+ 403dac: 24a502d8 addiu a1,a1,728
+ 403db0: 8f9980fc lw t9,-32516(gp)
+ 403db4: 00000000 nop
+ 403db8: 0320f809 jalr t9
+ 403dbc: 00000000 nop
+ 403dc0: 8fbc0010 lw gp,16(sp)
+ 403dc4: 1000ffd5 b 403d1c <iw_print_pm_value+0x174>
+ 403dc8: 00000000 nop
+ 403dcc: 8f888018 lw t0,-32744(gp)
+ 403dd0: 00000000 nop
+ 403dd4: 250802e0 addiu t0,t0,736
+ 403dd8: 00000000 nop
+ 403ddc: 81020000 lb v0,0(t0)
+ 403de0: 81050001 lb a1,1(t0)
+ 403de4: 81070002 lb a3,2(t0)
+ 403de8: a0820000 sb v0,0(a0)
+ 403dec: a0850001 sb a1,1(a0)
+ 403df0: a0870002 sb a3,2(a0)
+ 403df4: 81020003 lb v0,3(t0)
+ 403df8: 81050004 lb a1,4(t0)
+ 403dfc: 81070005 lb a3,5(t0)
+ 403e00: a0820003 sb v0,3(a0)
+ 403e04: a0850004 sb a1,4(a0)
+ 403e08: a0870005 sb a3,5(a0)
+ 403e0c: 81020006 lb v0,6(t0)
+ 403e10: 81050007 lb a1,7(t0)
+ 403e14: 81070008 lb a3,8(t0)
+ 403e18: a0820006 sb v0,6(a0)
+ 403e1c: a0850007 sb a1,7(a0)
+ 403e20: a0870008 sb a3,8(a0)
+ 403e24: 1000ffa8 b 403cc8 <iw_print_pm_value+0x120>
+ 403e28: 24840008 addiu a0,a0,8
+
+00403e2c <iw_print_pm_mode>:
+ 403e2c: 3c1c0fc0 lui gp,0xfc0
+ 403e30: 279c4424 addiu gp,gp,17444
+ 403e34: 0399e021 addu gp,gp,t9
+ 403e38: 30a50f00 andi a1,a1,0xf00
+ 403e3c: 24020300 li v0,768
+ 403e40: 10a200e9 beq a1,v0,4041e8 <iw_print_pm_mode+0x3bc>
+ 403e44: 28a20301 slti v0,a1,769
+ 403e48: 10400082 beqz v0,404054 <iw_print_pm_mode+0x228>
+ 403e4c: 24020400 li v0,1024
+ 403e50: 24020100 li v0,256
+ 403e54: 10a20044 beq a1,v0,403f68 <iw_print_pm_mode+0x13c>
+ 403e58: 24020200 li v0,512
+ 403e5c: 10a20003 beq a1,v0,403e6c <iw_print_pm_mode+0x40>
+ 403e60: 00000000 nop
+ 403e64: 03e00008 jr ra
+ 403e68: 00000000 nop
+ 403e6c: 8f868018 lw a2,-32744(gp)
+ 403e70: 00000000 nop
+ 403e74: 24c60308 addiu a2,a2,776
+ 403e78: 00000000 nop
+ 403e7c: 80c20000 lb v0,0(a2)
+ 403e80: 80c30001 lb v1,1(a2)
+ 403e84: 80c50002 lb a1,2(a2)
+ 403e88: a0820000 sb v0,0(a0)
+ 403e8c: a0830001 sb v1,1(a0)
+ 403e90: a0850002 sb a1,2(a0)
+ 403e94: 80c20003 lb v0,3(a2)
+ 403e98: 80c30004 lb v1,4(a2)
+ 403e9c: 80c50005 lb a1,5(a2)
+ 403ea0: a0820003 sb v0,3(a0)
+ 403ea4: a0830004 sb v1,4(a0)
+ 403ea8: a0850005 sb a1,5(a0)
+ 403eac: 80c20006 lb v0,6(a2)
+ 403eb0: 80c30007 lb v1,7(a2)
+ 403eb4: 80c50008 lb a1,8(a2)
+ 403eb8: a0820006 sb v0,6(a0)
+ 403ebc: a0830007 sb v1,7(a0)
+ 403ec0: a0850008 sb a1,8(a0)
+ 403ec4: 80c20009 lb v0,9(a2)
+ 403ec8: 80c3000a lb v1,10(a2)
+ 403ecc: 80c5000b lb a1,11(a2)
+ 403ed0: a0820009 sb v0,9(a0)
+ 403ed4: a083000a sb v1,10(a0)
+ 403ed8: a085000b sb a1,11(a0)
+ 403edc: 80c2000c lb v0,12(a2)
+ 403ee0: 80c3000d lb v1,13(a2)
+ 403ee4: 80c5000e lb a1,14(a2)
+ 403ee8: a082000c sb v0,12(a0)
+ 403eec: a083000d sb v1,13(a0)
+ 403ef0: a085000e sb a1,14(a0)
+ 403ef4: 80c2000f lb v0,15(a2)
+ 403ef8: 80c30010 lb v1,16(a2)
+ 403efc: 80c50011 lb a1,17(a2)
+ 403f00: a082000f sb v0,15(a0)
+ 403f04: a0830010 sb v1,16(a0)
+ 403f08: a0850011 sb a1,17(a0)
+ 403f0c: 80c20012 lb v0,18(a2)
+ 403f10: 80c30013 lb v1,19(a2)
+ 403f14: 80c50014 lb a1,20(a2)
+ 403f18: a0820012 sb v0,18(a0)
+ 403f1c: a0830013 sb v1,19(a0)
+ 403f20: a0850014 sb a1,20(a0)
+ 403f24: 80c20015 lb v0,21(a2)
+ 403f28: 80c30016 lb v1,22(a2)
+ 403f2c: 80c50017 lb a1,23(a2)
+ 403f30: a0820015 sb v0,21(a0)
+ 403f34: a0830016 sb v1,22(a0)
+ 403f38: a0850017 sb a1,23(a0)
+ 403f3c: 80c20018 lb v0,24(a2)
+ 403f40: 80c30019 lb v1,25(a2)
+ 403f44: 80c5001a lb a1,26(a2)
+ 403f48: a0820018 sb v0,24(a0)
+ 403f4c: a0830019 sb v1,25(a0)
+ 403f50: a085001a sb a1,26(a0)
+ 403f54: 80c2001b lb v0,27(a2)
+ 403f58: 80c3001c lb v1,28(a2)
+ 403f5c: a082001b sb v0,27(a0)
+ 403f60: 03e00008 jr ra
+ 403f64: a083001c sb v1,28(a0)
+ 403f68: 8f868018 lw a2,-32744(gp)
+ 403f6c: 00000000 nop
+ 403f70: 24c60328 addiu a2,a2,808
+ 403f74: 00000000 nop
+ 403f78: 80c20000 lb v0,0(a2)
+ 403f7c: 80c30001 lb v1,1(a2)
+ 403f80: 80c50002 lb a1,2(a2)
+ 403f84: a0820000 sb v0,0(a0)
+ 403f88: a0830001 sb v1,1(a0)
+ 403f8c: a0850002 sb a1,2(a0)
+ 403f90: 80c20003 lb v0,3(a2)
+ 403f94: 80c30004 lb v1,4(a2)
+ 403f98: 80c50005 lb a1,5(a2)
+ 403f9c: a0820003 sb v0,3(a0)
+ 403fa0: a0830004 sb v1,4(a0)
+ 403fa4: a0850005 sb a1,5(a0)
+ 403fa8: 80c20006 lb v0,6(a2)
+ 403fac: 80c30007 lb v1,7(a2)
+ 403fb0: 80c50008 lb a1,8(a2)
+ 403fb4: a0820006 sb v0,6(a0)
+ 403fb8: a0830007 sb v1,7(a0)
+ 403fbc: a0850008 sb a1,8(a0)
+ 403fc0: 80c20009 lb v0,9(a2)
+ 403fc4: 80c3000a lb v1,10(a2)
+ 403fc8: 80c5000b lb a1,11(a2)
+ 403fcc: a0820009 sb v0,9(a0)
+ 403fd0: a083000a sb v1,10(a0)
+ 403fd4: a085000b sb a1,11(a0)
+ 403fd8: 80c2000c lb v0,12(a2)
+ 403fdc: 80c3000d lb v1,13(a2)
+ 403fe0: 80c5000e lb a1,14(a2)
+ 403fe4: a082000c sb v0,12(a0)
+ 403fe8: a083000d sb v1,13(a0)
+ 403fec: a085000e sb a1,14(a0)
+ 403ff0: 80c2000f lb v0,15(a2)
+ 403ff4: 80c30010 lb v1,16(a2)
+ 403ff8: 80c50011 lb a1,17(a2)
+ 403ffc: a082000f sb v0,15(a0)
+ 404000: a0830010 sb v1,16(a0)
+ 404004: a0850011 sb a1,17(a0)
+ 404008: 80c20012 lb v0,18(a2)
+ 40400c: 80c30013 lb v1,19(a2)
+ 404010: 80c50014 lb a1,20(a2)
+ 404014: a0820012 sb v0,18(a0)
+ 404018: a0830013 sb v1,19(a0)
+ 40401c: a0850014 sb a1,20(a0)
+ 404020: 80c20015 lb v0,21(a2)
+ 404024: 80c30016 lb v1,22(a2)
+ 404028: 80c50017 lb a1,23(a2)
+ 40402c: a0820015 sb v0,21(a0)
+ 404030: a0830016 sb v1,22(a0)
+ 404034: a0850017 sb a1,23(a0)
+ 404038: 80c20018 lb v0,24(a2)
+ 40403c: 80c30019 lb v1,25(a2)
+ 404040: 80c5001a lb a1,26(a2)
+ 404044: a0820018 sb v0,24(a0)
+ 404048: a0830019 sb v1,25(a0)
+ 40404c: 03e00008 jr ra
+ 404050: a085001a sb a1,26(a0)
+ 404054: 10a20038 beq a1,v0,404138 <iw_print_pm_mode+0x30c>
+ 404058: 24020800 li v0,2048
+ 40405c: 10a20003 beq a1,v0,40406c <iw_print_pm_mode+0x240>
+ 404060: 00000000 nop
+ 404064: 03e00008 jr ra
+ 404068: 00000000 nop
+ 40406c: 8f868018 lw a2,-32744(gp)
+ 404070: 00000000 nop
+ 404074: 24c60344 addiu a2,a2,836
+ 404078: 00000000 nop
+ 40407c: 80c20000 lb v0,0(a2)
+ 404080: 80c30001 lb v1,1(a2)
+ 404084: 80c50002 lb a1,2(a2)
+ 404088: a0820000 sb v0,0(a0)
+ 40408c: a0830001 sb v1,1(a0)
+ 404090: a0850002 sb a1,2(a0)
+ 404094: 80c20003 lb v0,3(a2)
+ 404098: 80c30004 lb v1,4(a2)
+ 40409c: 80c50005 lb a1,5(a2)
+ 4040a0: a0820003 sb v0,3(a0)
+ 4040a4: a0830004 sb v1,4(a0)
+ 4040a8: a0850005 sb a1,5(a0)
+ 4040ac: 80c20006 lb v0,6(a2)
+ 4040b0: 80c30007 lb v1,7(a2)
+ 4040b4: 80c50008 lb a1,8(a2)
+ 4040b8: a0820006 sb v0,6(a0)
+ 4040bc: a0830007 sb v1,7(a0)
+ 4040c0: a0850008 sb a1,8(a0)
+ 4040c4: 80c20009 lb v0,9(a2)
+ 4040c8: 80c3000a lb v1,10(a2)
+ 4040cc: 80c5000b lb a1,11(a2)
+ 4040d0: a0820009 sb v0,9(a0)
+ 4040d4: a083000a sb v1,10(a0)
+ 4040d8: a085000b sb a1,11(a0)
+ 4040dc: 80c2000c lb v0,12(a2)
+ 4040e0: 80c3000d lb v1,13(a2)
+ 4040e4: 80c5000e lb a1,14(a2)
+ 4040e8: a082000c sb v0,12(a0)
+ 4040ec: a083000d sb v1,13(a0)
+ 4040f0: a085000e sb a1,14(a0)
+ 4040f4: 80c2000f lb v0,15(a2)
+ 4040f8: 80c30010 lb v1,16(a2)
+ 4040fc: 80c50011 lb a1,17(a2)
+ 404100: a082000f sb v0,15(a0)
+ 404104: a0830010 sb v1,16(a0)
+ 404108: a0850011 sb a1,17(a0)
+ 40410c: 80c20012 lb v0,18(a2)
+ 404110: 80c30013 lb v1,19(a2)
+ 404114: 80c50014 lb a1,20(a2)
+ 404118: a0820012 sb v0,18(a0)
+ 40411c: a0830013 sb v1,19(a0)
+ 404120: a0850014 sb a1,20(a0)
+ 404124: 80c20015 lb v0,21(a2)
+ 404128: 80c30016 lb v1,22(a2)
+ 40412c: a0820015 sb v0,21(a0)
+ 404130: 03e00008 jr ra
+ 404134: a0830016 sb v1,22(a0)
+ 404138: 8f868018 lw a2,-32744(gp)
+ 40413c: 00000000 nop
+ 404140: 24c6035c addiu a2,a2,860
+ 404144: 00000000 nop
+ 404148: 80c20000 lb v0,0(a2)
+ 40414c: 80c30001 lb v1,1(a2)
+ 404150: 80c50002 lb a1,2(a2)
+ 404154: a0820000 sb v0,0(a0)
+ 404158: a0830001 sb v1,1(a0)
+ 40415c: a0850002 sb a1,2(a0)
+ 404160: 80c20003 lb v0,3(a2)
+ 404164: 80c30004 lb v1,4(a2)
+ 404168: 80c50005 lb a1,5(a2)
+ 40416c: a0820003 sb v0,3(a0)
+ 404170: a0830004 sb v1,4(a0)
+ 404174: a0850005 sb a1,5(a0)
+ 404178: 80c20006 lb v0,6(a2)
+ 40417c: 80c30007 lb v1,7(a2)
+ 404180: 80c50008 lb a1,8(a2)
+ 404184: a0820006 sb v0,6(a0)
+ 404188: a0830007 sb v1,7(a0)
+ 40418c: a0850008 sb a1,8(a0)
+ 404190: 80c20009 lb v0,9(a2)
+ 404194: 80c3000a lb v1,10(a2)
+ 404198: 80c5000b lb a1,11(a2)
+ 40419c: a0820009 sb v0,9(a0)
+ 4041a0: a083000a sb v1,10(a0)
+ 4041a4: a085000b sb a1,11(a0)
+ 4041a8: 80c2000c lb v0,12(a2)
+ 4041ac: 80c3000d lb v1,13(a2)
+ 4041b0: 80c5000e lb a1,14(a2)
+ 4041b4: a082000c sb v0,12(a0)
+ 4041b8: a083000d sb v1,13(a0)
+ 4041bc: a085000e sb a1,14(a0)
+ 4041c0: 80c2000f lb v0,15(a2)
+ 4041c4: 80c30010 lb v1,16(a2)
+ 4041c8: 80c50011 lb a1,17(a2)
+ 4041cc: a082000f sb v0,15(a0)
+ 4041d0: a0830010 sb v1,16(a0)
+ 4041d4: a0850011 sb a1,17(a0)
+ 4041d8: 80c20012 lb v0,18(a2)
+ 4041dc: 00000000 nop
+ 4041e0: 03e00008 jr ra
+ 4041e4: a0820012 sb v0,18(a0)
+ 4041e8: 8f868018 lw a2,-32744(gp)
+ 4041ec: 00000000 nop
+ 4041f0: 24c60370 addiu a2,a2,880
+ 4041f4: 00000000 nop
+ 4041f8: 80c20000 lb v0,0(a2)
+ 4041fc: 80c30001 lb v1,1(a2)
+ 404200: 80c50002 lb a1,2(a2)
+ 404204: a0820000 sb v0,0(a0)
+ 404208: a0830001 sb v1,1(a0)
+ 40420c: a0850002 sb a1,2(a0)
+ 404210: 80c20003 lb v0,3(a2)
+ 404214: 80c30004 lb v1,4(a2)
+ 404218: 80c50005 lb a1,5(a2)
+ 40421c: a0820003 sb v0,3(a0)
+ 404220: a0830004 sb v1,4(a0)
+ 404224: a0850005 sb a1,5(a0)
+ 404228: 80c20006 lb v0,6(a2)
+ 40422c: 80c30007 lb v1,7(a2)
+ 404230: 80c50008 lb a1,8(a2)
+ 404234: a0820006 sb v0,6(a0)
+ 404238: a0830007 sb v1,7(a0)
+ 40423c: a0850008 sb a1,8(a0)
+ 404240: 80c20009 lb v0,9(a2)
+ 404244: 80c3000a lb v1,10(a2)
+ 404248: 80c5000b lb a1,11(a2)
+ 40424c: a0820009 sb v0,9(a0)
+ 404250: a083000a sb v1,10(a0)
+ 404254: a085000b sb a1,11(a0)
+ 404258: 80c2000c lb v0,12(a2)
+ 40425c: 80c3000d lb v1,13(a2)
+ 404260: 80c5000e lb a1,14(a2)
+ 404264: a082000c sb v0,12(a0)
+ 404268: a083000d sb v1,13(a0)
+ 40426c: a085000e sb a1,14(a0)
+ 404270: 80c2000f lb v0,15(a2)
+ 404274: 80c30010 lb v1,16(a2)
+ 404278: 80c50011 lb a1,17(a2)
+ 40427c: a082000f sb v0,15(a0)
+ 404280: a0830010 sb v1,16(a0)
+ 404284: a0850011 sb a1,17(a0)
+ 404288: 80c20012 lb v0,18(a2)
+ 40428c: 80c30013 lb v1,19(a2)
+ 404290: 80c50014 lb a1,20(a2)
+ 404294: a0820012 sb v0,18(a0)
+ 404298: a0830013 sb v1,19(a0)
+ 40429c: a0850014 sb a1,20(a0)
+ 4042a0: 80c20015 lb v0,21(a2)
+ 4042a4: 80c30016 lb v1,22(a2)
+ 4042a8: 80c50017 lb a1,23(a2)
+ 4042ac: a0820015 sb v0,21(a0)
+ 4042b0: a0830016 sb v1,22(a0)
+ 4042b4: a0850017 sb a1,23(a0)
+ 4042b8: 80c20018 lb v0,24(a2)
+ 4042bc: 80c30019 lb v1,25(a2)
+ 4042c0: a0820018 sb v0,24(a0)
+ 4042c4: 03e00008 jr ra
+ 4042c8: a0830019 sb v1,25(a0)
+
+004042cc <iw_print_retry_value>:
+ 4042cc: 3c1c0fc0 lui gp,0xfc0
+ 4042d0: 279c3f84 addiu gp,gp,16260
+ 4042d4: 0399e021 addu gp,gp,t9
+ 4042d8: 27bdffe0 addiu sp,sp,-32
+ 4042dc: afbc0010 sw gp,16(sp)
+ 4042e0: 30c20001 andi v0,a2,0x1
+ 4042e4: afbf001c sw ra,28(sp)
+ 4042e8: afbc0018 sw gp,24(sp)
+ 4042ec: 10400010 beqz v0,404330 <iw_print_retry_value+0x64>
+ 4042f0: 00a01821 move v1,a1
+ 4042f4: 8f888018 lw t0,-32744(gp)
+ 4042f8: 00000000 nop
+ 4042fc: 250802ac addiu t0,t0,684
+ 404300: 00000000 nop
+ 404304: 81020000 lb v0,0(t0)
+ 404308: 81050001 lb a1,1(t0)
+ 40430c: 81070002 lb a3,2(t0)
+ 404310: a0820000 sb v0,0(a0)
+ 404314: a0850001 sb a1,1(a0)
+ 404318: a0870002 sb a3,2(a0)
+ 40431c: 81020003 lb v0,3(t0)
+ 404320: 81050004 lb a1,4(t0)
+ 404324: a0820003 sb v0,3(a0)
+ 404328: a0850004 sb a1,4(a0)
+ 40432c: 24840004 addiu a0,a0,4
+ 404330: 30c20002 andi v0,a2,0x2
+ 404334: 10400011 beqz v0,40437c <iw_print_retry_value+0xb0>
+ 404338: 30c22000 andi v0,a2,0x2000
+ 40433c: 8f888018 lw t0,-32744(gp)
+ 404340: 00000000 nop
+ 404344: 250802b4 addiu t0,t0,692
+ 404348: 00000000 nop
+ 40434c: 81020000 lb v0,0(t0)
+ 404350: 81050001 lb a1,1(t0)
+ 404354: 81070002 lb a3,2(t0)
+ 404358: a0820000 sb v0,0(a0)
+ 40435c: a0850001 sb a1,1(a0)
+ 404360: a0870002 sb a3,2(a0)
+ 404364: 81020003 lb v0,3(t0)
+ 404368: 81050004 lb a1,4(t0)
+ 40436c: a0820003 sb v0,3(a0)
+ 404370: a0850004 sb a1,4(a0)
+ 404374: 24840004 addiu a0,a0,4
+ 404378: 30c22000 andi v0,a2,0x2000
+ 40437c: 1040005c beqz v0,4044f0 <iw_print_retry_value+0x224>
+ 404380: 30c20004 andi v0,a2,0x4
+ 404384: 8f888018 lw t0,-32744(gp)
+ 404388: 00000000 nop
+ 40438c: 2508038c addiu t0,t0,908
+ 404390: 00000000 nop
+ 404394: 81050000 lb a1,0(t0)
+ 404398: 81060001 lb a2,1(t0)
+ 40439c: 81070002 lb a3,2(t0)
+ 4043a0: a0850000 sb a1,0(a0)
+ 4043a4: a0860001 sb a2,1(a0)
+ 4043a8: a0870002 sb a3,2(a0)
+ 4043ac: 81050003 lb a1,3(t0)
+ 4043b0: 81060004 lb a2,4(t0)
+ 4043b4: 81070005 lb a3,5(t0)
+ 4043b8: a0850003 sb a1,3(a0)
+ 4043bc: a0860004 sb a2,4(a0)
+ 4043c0: a0870005 sb a3,5(a0)
+ 4043c4: 81050006 lb a1,6(t0)
+ 4043c8: 81060007 lb a2,7(t0)
+ 4043cc: 81070008 lb a3,8(t0)
+ 4043d0: a0850006 sb a1,6(a0)
+ 4043d4: a0860007 sb a2,7(a0)
+ 4043d8: a0870008 sb a3,8(a0)
+ 4043dc: 81050009 lb a1,9(t0)
+ 4043e0: 8106000a lb a2,10(t0)
+ 4043e4: a0850009 sb a1,9(a0)
+ 4043e8: a086000a sb a2,10(a0)
+ 4043ec: 10400017 beqz v0,40444c <iw_print_retry_value+0x180>
+ 4043f0: 2484000a addiu a0,a0,10
+ 4043f4: 8f818018 lw at,-32744(gp)
+ 4043f8: 00000000 nop
+ 4043fc: c42103a8 lwc1 $f1,936(at)
+ 404400: c42003ac lwc1 $f0,940(at)
+ 404404: 44831000 mtc1 v1,$f2
+ 404408: 00000000 nop
+ 40440c: 468010a1 cvt.d.w $f2,$f2
+ 404410: 46201083 div.d $f2,$f2,$f0
+ 404414: 8f858018 lw a1,-32744(gp)
+ 404418: 00000000 nop
+ 40441c: 24a502c8 addiu a1,a1,712
+ 404420: 44071000 mfc1 a3,$f2
+ 404424: 44061800 mfc1 a2,$f3
+ 404428: 8f9980fc lw t9,-32516(gp)
+ 40442c: 00000000 nop
+ 404430: 0320f809 jalr t9
+ 404434: 00000000 nop
+ 404438: 8fbc0010 lw gp,16(sp)
+ 40443c: 8fbf001c lw ra,28(sp)
+ 404440: 00000000 nop
+ 404444: 03e00008 jr ra
+ 404448: 27bd0020 addiu sp,sp,32
+ 40444c: 3c02000f lui v0,0xf
+ 404450: 3442423f ori v0,v0,0x423f
+ 404454: 0043102a slt v0,v0,v1
+ 404458: 1040000d beqz v0,404490 <iw_print_retry_value+0x1c4>
+ 40445c: 286203e8 slti v0,v1,1000
+ 404460: 8f818018 lw at,-32744(gp)
+ 404464: 00000000 nop
+ 404468: c42103b0 lwc1 $f1,944(at)
+ 40446c: c42003b4 lwc1 $f0,948(at)
+ 404470: 44831000 mtc1 v1,$f2
+ 404474: 00000000 nop
+ 404478: 468010a1 cvt.d.w $f2,$f2
+ 40447c: 8f858018 lw a1,-32744(gp)
+ 404480: 00000000 nop
+ 404484: 24a502cc addiu a1,a1,716
+ 404488: 1000ffe5 b 404420 <iw_print_retry_value+0x154>
+ 40448c: 46201083 div.d $f2,$f2,$f0
+ 404490: 1440000d bnez v0,4044c8 <iw_print_retry_value+0x1fc>
+ 404494: 00603021 move a2,v1
+ 404498: 8f818018 lw at,-32744(gp)
+ 40449c: 00000000 nop
+ 4044a0: c42103b8 lwc1 $f1,952(at)
+ 4044a4: c42003bc lwc1 $f0,956(at)
+ 4044a8: 44831000 mtc1 v1,$f2
+ 4044ac: 00000000 nop
+ 4044b0: 468010a1 cvt.d.w $f2,$f2
+ 4044b4: 8f858018 lw a1,-32744(gp)
+ 4044b8: 00000000 nop
+ 4044bc: 24a502d0 addiu a1,a1,720
+ 4044c0: 1000ffd7 b 404420 <iw_print_retry_value+0x154>
+ 4044c4: 46201083 div.d $f2,$f2,$f0
+ 4044c8: 8f858018 lw a1,-32744(gp)
+ 4044cc: 00000000 nop
+ 4044d0: 24a502d8 addiu a1,a1,728
+ 4044d4: 8f9980fc lw t9,-32516(gp)
+ 4044d8: 00000000 nop
+ 4044dc: 0320f809 jalr t9
+ 4044e0: 00000000 nop
+ 4044e4: 8fbc0010 lw gp,16(sp)
+ 4044e8: 1000ffd4 b 40443c <iw_print_retry_value+0x170>
+ 4044ec: 00000000 nop
+ 4044f0: 8f858018 lw a1,-32744(gp)
+ 4044f4: 00000000 nop
+ 4044f8: 24a50398 addiu a1,a1,920
+ 4044fc: 00603021 move a2,v1
+ 404500: 8f9980fc lw t9,-32516(gp)
+ 404504: 00000000 nop
+ 404508: 0320f809 jalr t9
+ 40450c: 00000000 nop
+ 404510: 8fbc0010 lw gp,16(sp)
+ 404514: 1000ffc9 b 40443c <iw_print_retry_value+0x170>
+ 404518: 00000000 nop
+
+0040451c <iw_print_timeval>:
+ 40451c: 3c1c0fc0 lui gp,0xfc0
+ 404520: 279c3d34 addiu gp,gp,15668
+ 404524: 0399e021 addu gp,gp,t9
+ 404528: 27bdffd8 addiu sp,sp,-40
+ 40452c: afbc0018 sw gp,24(sp)
+ 404530: afbf0024 sw ra,36(sp)
+ 404534: afbc0020 sw gp,32(sp)
+ 404538: 8ca90000 lw t1,0(a1)
+ 40453c: 3c02c22e lui v0,0xc22e
+ 404540: 34424507 ori v0,v0,0x4507
+ 404544: 01220018 mult t1,v0
+ 404548: 8ca30004 lw v1,4(a1)
+ 40454c: 000947c3 sra t0,t1,0x1f
+ 404550: afa30014 sw v1,20(sp)
+ 404554: 3c0691a2 lui a2,0x91a2
+ 404558: 34c6b3c5 ori a2,a2,0xb3c5
+ 40455c: 3c078888 lui a3,0x8888
+ 404560: 34e78889 ori a3,a3,0x8889
+ 404564: 8f858018 lw a1,-32744(gp)
+ 404568: 00000000 nop
+ 40456c: 24a503c0 addiu a1,a1,960
+ 404570: 00001010 mfhi v0
+ 404574: 00491021 addu v0,v0,t1
+ 404578: 00021403 sra v0,v0,0x10
+ 40457c: 00485823 subu t3,v0,t0
+ 404580: 000b1840 sll v1,t3,0x1
+ 404584: 006b1821 addu v1,v1,t3
+ 404588: 00034100 sll t0,v1,0x4
+ 40458c: 01034023 subu t0,t0,v1
+ 404590: 00081100 sll v0,t0,0x4
+ 404594: 00481023 subu v0,v0,t0
+ 404598: 000211c0 sll v0,v0,0x7
+ 40459c: 01225823 subu t3,t1,v0
+ 4045a0: 01660018 mult t3,a2
+ 4045a4: 000b4fc3 sra t1,t3,0x1f
+ 4045a8: 00003010 mfhi a2
+ 4045ac: 00cb3021 addu a2,a2,t3
+ 4045b0: 000632c3 sra a2,a2,0xb
+ 4045b4: 01670018 mult t3,a3
+ 4045b8: 00c93023 subu a2,a2,t1
+ 4045bc: 000640c0 sll t0,a2,0x3
+ 4045c0: 01064023 subu t0,t0,a2
+ 4045c4: 00084140 sll t0,t0,0x5
+ 4045c8: 01064021 addu t0,t0,a2
+ 4045cc: 00084100 sll t0,t0,0x4
+ 4045d0: 01684023 subu t0,t3,t0
+ 4045d4: 000857c3 sra t2,t0,0x1f
+ 4045d8: 00001810 mfhi v1
+ 4045dc: 006b1821 addu v1,v1,t3
+ 4045e0: 00031943 sra v1,v1,0x5
+ 4045e4: 01070018 mult t0,a3
+ 4045e8: 00691823 subu v1,v1,t1
+ 4045ec: 00031100 sll v0,v1,0x4
+ 4045f0: 00431023 subu v0,v0,v1
+ 4045f4: 00021080 sll v0,v0,0x2
+ 4045f8: 01621023 subu v0,t3,v0
+ 4045fc: afa20010 sw v0,16(sp)
+ 404600: 00003810 mfhi a3
+ 404604: 00e83821 addu a3,a3,t0
+ 404608: 00073943 sra a3,a3,0x5
+ 40460c: 00ea3823 subu a3,a3,t2
+ 404610: 8f9980fc lw t9,-32516(gp)
+ 404614: 00000000 nop
+ 404618: 0320f809 jalr t9
+ 40461c: 00000000 nop
+ 404620: 8fbc0018 lw gp,24(sp)
+ 404624: 8fbf0024 lw ra,36(sp)
+ 404628: 00000000 nop
+ 40462c: 03e00008 jr ra
+ 404630: 27bd0028 addiu sp,sp,40
+
+00404634 <iw_check_mac_addr_type>:
+ 404634: 3c1c0fc0 lui gp,0xfc0
+ 404638: 279c3c1c addiu gp,gp,15388
+ 40463c: 0399e021 addu gp,gp,t9
+ 404640: 27bdffb8 addiu sp,sp,-72
+ 404644: afbc0010 sw gp,16(sp)
+ 404648: afb00038 sw s0,56(sp)
+ 40464c: 24060010 li a2,16
+ 404650: 00808021 move s0,a0
+ 404654: 27a40018 addiu a0,sp,24
+ 404658: afb1003c sw s1,60(sp)
+ 40465c: afbf0044 sw ra,68(sp)
+ 404660: 00a08821 move s1,a1
+ 404664: afbc0040 sw gp,64(sp)
+ 404668: 8f998188 lw t9,-32376(gp)
+ 40466c: 00000000 nop
+ 404670: 0320f809 jalr t9
+ 404674: 00000000 nop
+ 404678: 8fbc0010 lw gp,16(sp)
+ 40467c: 27a60018 addiu a2,sp,24
+ 404680: 34058927 li a1,0x8927
+ 404684: 02002021 move a0,s0
+ 404688: 8f9982b8 lw t9,-32072(gp)
+ 40468c: 00000000 nop
+ 404690: 0320f809 jalr t9
+ 404694: 00000000 nop
+ 404698: 8fbc0010 lw gp,16(sp)
+ 40469c: 00000000 nop
+ 4046a0: 8f858018 lw a1,-32744(gp)
+ 4046a4: 00000000 nop
+ 4046a8: 24a503d8 addiu a1,a1,984
+ 4046ac: 04400005 bltz v0,4046c4 <iw_check_mac_addr_type+0x90>
+ 4046b0: 02203021 move a2,s1
+ 4046b4: 97a40028 lhu a0,40(sp)
+ 4046b8: 24030001 li v1,1
+ 4046bc: 1083000a beq a0,v1,4046e8 <iw_check_mac_addr_type+0xb4>
+ 4046c0: 00001021 move v0,zero
+ 4046c4: 8f8480e8 lw a0,-32536(gp)
+ 4046c8: 00000000 nop
+ 4046cc: 8c840000 lw a0,0(a0)
+ 4046d0: 8f9981c4 lw t9,-32316(gp)
+ 4046d4: 00000000 nop
+ 4046d8: 0320f809 jalr t9
+ 4046dc: 00000000 nop
+ 4046e0: 8fbc0010 lw gp,16(sp)
+ 4046e4: 2402ffff li v0,-1
+ 4046e8: 8fbf0044 lw ra,68(sp)
+ 4046ec: 8fb1003c lw s1,60(sp)
+ 4046f0: 8fb00038 lw s0,56(sp)
+ 4046f4: 03e00008 jr ra
+ 4046f8: 27bd0048 addiu sp,sp,72
+
+004046fc <iw_check_if_addr_type>:
+ 4046fc: 3c1c0fc0 lui gp,0xfc0
+ 404700: 279c3b54 addiu gp,gp,15188
+ 404704: 0399e021 addu gp,gp,t9
+ 404708: 27bdffb8 addiu sp,sp,-72
+ 40470c: afbc0010 sw gp,16(sp)
+ 404710: afb00038 sw s0,56(sp)
+ 404714: 24060010 li a2,16
+ 404718: 00808021 move s0,a0
+ 40471c: 27a40018 addiu a0,sp,24
+ 404720: afb1003c sw s1,60(sp)
+ 404724: afbf0044 sw ra,68(sp)
+ 404728: 00a08821 move s1,a1
+ 40472c: afbc0040 sw gp,64(sp)
+ 404730: 8f998188 lw t9,-32376(gp)
+ 404734: 00000000 nop
+ 404738: 0320f809 jalr t9
+ 40473c: 00000000 nop
+ 404740: 8fbc0010 lw gp,16(sp)
+ 404744: 27a60018 addiu a2,sp,24
+ 404748: 34058915 li a1,0x8915
+ 40474c: 02002021 move a0,s0
+ 404750: 8f9982b8 lw t9,-32072(gp)
+ 404754: 00000000 nop
+ 404758: 0320f809 jalr t9
+ 40475c: 00000000 nop
+ 404760: 8fbc0010 lw gp,16(sp)
+ 404764: 00000000 nop
+ 404768: 8f858018 lw a1,-32744(gp)
+ 40476c: 00000000 nop
+ 404770: 24a50404 addiu a1,a1,1028
+ 404774: 04400005 bltz v0,40478c <iw_check_if_addr_type+0x90>
+ 404778: 02203021 move a2,s1
+ 40477c: 97a40028 lhu a0,40(sp)
+ 404780: 24030002 li v1,2
+ 404784: 1083000a beq a0,v1,4047b0 <iw_check_if_addr_type+0xb4>
+ 404788: 00001021 move v0,zero
+ 40478c: 8f8480e8 lw a0,-32536(gp)
+ 404790: 00000000 nop
+ 404794: 8c840000 lw a0,0(a0)
+ 404798: 8f9981c4 lw t9,-32316(gp)
+ 40479c: 00000000 nop
+ 4047a0: 0320f809 jalr t9
+ 4047a4: 00000000 nop
+ 4047a8: 8fbc0010 lw gp,16(sp)
+ 4047ac: 2402ffff li v0,-1
+ 4047b0: 8fbf0044 lw ra,68(sp)
+ 4047b4: 8fb1003c lw s1,60(sp)
+ 4047b8: 8fb00038 lw s0,56(sp)
+ 4047bc: 03e00008 jr ra
+ 4047c0: 27bd0048 addiu sp,sp,72
+
+004047c4 <iw_ether_ntop>:
+ 4047c4: 3c1c0fc0 lui gp,0xfc0
+ 4047c8: 279c3a8c addiu gp,gp,14988
+ 4047cc: 0399e021 addu gp,gp,t9
+ 4047d0: 27bdffd0 addiu sp,sp,-48
+ 4047d4: afbc0020 sw gp,32(sp)
+ 4047d8: afbf002c sw ra,44(sp)
+ 4047dc: afbc0028 sw gp,40(sp)
+ 4047e0: 90860000 lbu a2,0(a0)
+ 4047e4: 90870001 lbu a3,1(a0)
+ 4047e8: 90890005 lbu t1,5(a0)
+ 4047ec: 90830003 lbu v1,3(a0)
+ 4047f0: 90880004 lbu t0,4(a0)
+ 4047f4: 90820002 lbu v0,2(a0)
+ 4047f8: 00a02021 move a0,a1
+ 4047fc: 8f858018 lw a1,-32744(gp)
+ 404800: 00000000 nop
+ 404804: 24a50430 addiu a1,a1,1072
+ 404808: afa20010 sw v0,16(sp)
+ 40480c: afa30014 sw v1,20(sp)
+ 404810: afa80018 sw t0,24(sp)
+ 404814: afa9001c sw t1,28(sp)
+ 404818: 8f9980fc lw t9,-32516(gp)
+ 40481c: 00000000 nop
+ 404820: 0320f809 jalr t9
+ 404824: 00000000 nop
+ 404828: 8fbc0020 lw gp,32(sp)
+ 40482c: 8fbf002c lw ra,44(sp)
+ 404830: 00000000 nop
+ 404834: 03e00008 jr ra
+ 404838: 27bd0030 addiu sp,sp,48
+
+0040483c <iw_ether_ntoa>:
+ 40483c: 3c1c0fc0 lui gp,0xfc0
+ 404840: 279c3a14 addiu gp,gp,14868
+ 404844: 0399e021 addu gp,gp,t9
+ 404848: 27bdffd8 addiu sp,sp,-40
+ 40484c: afbc0010 sw gp,16(sp)
+ 404850: afb00018 sw s0,24(sp)
+ 404854: 8f90801c lw s0,-32740(gp)
+ 404858: 00000000 nop
+ 40485c: 26100530 addiu s0,s0,1328
+ 404860: 00000000 nop
+ 404864: 02002821 move a1,s0
+ 404868: afbf0020 sw ra,32(sp)
+ 40486c: afbc001c sw gp,28(sp)
+ 404870: 8f99819c lw t9,-32356(gp)
+ 404874: 00000000 nop
+ 404878: 0320f809 jalr t9
+ 40487c: 00000000 nop
+ 404880: 8fbc0010 lw gp,16(sp)
+ 404884: 8fbf0020 lw ra,32(sp)
+ 404888: 02001021 move v0,s0
+ 40488c: 8fb00018 lw s0,24(sp)
+ 404890: 03e00008 jr ra
+ 404894: 27bd0028 addiu sp,sp,40
+
+00404898 <iw_ether_aton>:
+ 404898: 3c1c0fc0 lui gp,0xfc0
+ 40489c: 279c39b8 addiu gp,gp,14776
+ 4048a0: 0399e021 addu gp,gp,t9
+ 4048a4: 27bdffc0 addiu sp,sp,-64
+ 4048a8: afbc0010 sw gp,16(sp)
+ 4048ac: afb60030 sw s6,48(sp)
+ 4048b0: afb5002c sw s5,44(sp)
+ 4048b4: afb40028 sw s4,40(sp)
+ 4048b8: afb30024 sw s3,36(sp)
+ 4048bc: afb20020 sw s2,32(sp)
+ 4048c0: 00a0b021 move s6,a1
+ 4048c4: 00809021 move s2,a0
+ 4048c8: 00009821 move s3,zero
+ 4048cc: 24150006 li s5,6
+ 4048d0: 2414003a li s4,58
+ 4048d4: afbf0038 sw ra,56(sp)
+ 4048d8: afbc0034 sw gp,52(sp)
+ 4048dc: afb1001c sw s1,28(sp)
+ 4048e0: afb00018 sw s0,24(sp)
+ 4048e4: 82420000 lb v0,0(s2)
+ 4048e8: 00000000 nop
+ 4048ec: 10400020 beqz v0,404970 <iw_ether_aton+0xd8>
+ 4048f0: 00000000 nop
+ 4048f4: 92500000 lbu s0,0(s2)
+ 4048f8: 26520001 addiu s2,s2,1
+ 4048fc: 02002021 move a0,s0
+ 404900: 8f9980cc lw t9,-32564(gp)
+ 404904: 00000000 nop
+ 404908: 0320f809 jalr t9
+ 40490c: 00000000 nop
+ 404910: 8fbc0010 lw gp,16(sp)
+ 404914: 10400034 beqz v0,4049e8 <iw_ether_aton+0x150>
+ 404918: 2611ffd0 addiu s1,s0,-48
+ 40491c: 92500000 lbu s0,0(s2)
+ 404920: 00118900 sll s1,s1,0x4
+ 404924: 02002021 move a0,s0
+ 404928: 8f9980cc lw t9,-32564(gp)
+ 40492c: 00000000 nop
+ 404930: 0320f809 jalr t9
+ 404934: 00000000 nop
+ 404938: 8fbc0010 lw gp,16(sp)
+ 40493c: 1040001e beqz v0,4049b8 <iw_ether_aton+0x120>
+ 404940: 26520001 addiu s2,s2,1
+ 404944: 2602ffd0 addiu v0,s0,-48
+ 404948: 02228825 or s1,s1,v0
+ 40494c: 02d31021 addu v0,s6,s3
+ 404950: 26730001 addiu s3,s3,1
+ 404954: a0510000 sb s1,0(v0)
+ 404958: 1275000d beq s3,s5,404990 <iw_ether_aton+0xf8>
+ 40495c: 24020001 li v0,1
+ 404960: 82420000 lb v0,0(s2)
+ 404964: 00000000 nop
+ 404968: 1054ffde beq v0,s4,4048e4 <iw_ether_aton+0x4c>
+ 40496c: 26520001 addiu s2,s2,1
+ 404970: 8f9980a0 lw t9,-32608(gp)
+ 404974: 00000000 nop
+ 404978: 0320f809 jalr t9
+ 40497c: 00000000 nop
+ 404980: 8fbc0010 lw gp,16(sp)
+ 404984: 24030016 li v1,22
+ 404988: ac430000 sw v1,0(v0)
+ 40498c: 00001021 move v0,zero
+ 404990: 8fbf0038 lw ra,56(sp)
+ 404994: 8fb60030 lw s6,48(sp)
+ 404998: 8fb5002c lw s5,44(sp)
+ 40499c: 8fb40028 lw s4,40(sp)
+ 4049a0: 8fb30024 lw s3,36(sp)
+ 4049a4: 8fb20020 lw s2,32(sp)
+ 4049a8: 8fb1001c lw s1,28(sp)
+ 4049ac: 8fb00018 lw s0,24(sp)
+ 4049b0: 03e00008 jr ra
+ 4049b4: 27bd0040 addiu sp,sp,64
+ 4049b8: 2602009f addiu v0,s0,159
+ 4049bc: 304200ff andi v0,v0,0xff
+ 4049c0: 2c420006 sltiu v0,v0,6
+ 4049c4: 1440ffe0 bnez v0,404948 <iw_ether_aton+0xb0>
+ 4049c8: 2602ffa9 addiu v0,s0,-87
+ 4049cc: 260200bf addiu v0,s0,191
+ 4049d0: 304200ff andi v0,v0,0xff
+ 4049d4: 2c420006 sltiu v0,v0,6
+ 4049d8: 1040ffe5 beqz v0,404970 <iw_ether_aton+0xd8>
+ 4049dc: 2602ffc9 addiu v0,s0,-55
+ 4049e0: 1000ffda b 40494c <iw_ether_aton+0xb4>
+ 4049e4: 02228825 or s1,s1,v0
+ 4049e8: 2602009f addiu v0,s0,159
+ 4049ec: 304200ff andi v0,v0,0xff
+ 4049f0: 2c420006 sltiu v0,v0,6
+ 4049f4: 1440ffc9 bnez v0,40491c <iw_ether_aton+0x84>
+ 4049f8: 2611ffa9 addiu s1,s0,-87
+ 4049fc: 260200bf addiu v0,s0,191
+ 404a00: 304200ff andi v0,v0,0xff
+ 404a04: 2c420006 sltiu v0,v0,6
+ 404a08: 1440ffc4 bnez v0,40491c <iw_ether_aton+0x84>
+ 404a0c: 2611ffc9 addiu s1,s0,-55
+ 404a10: 1000ffd7 b 404970 <iw_ether_aton+0xd8>
+ 404a14: 00000000 nop
+
+00404a18 <iw_in_inet>:
+ 404a18: 3c1c0fc0 lui gp,0xfc0
+ 404a1c: 279c3838 addiu gp,gp,14392
+ 404a20: 0399e021 addu gp,gp,t9
+ 404a24: 27bdffd0 addiu sp,sp,-48
+ 404a28: afbc0010 sw gp,16(sp)
+ 404a2c: afb1001c sw s1,28(sp)
+ 404a30: 24020002 li v0,2
+ 404a34: 00a08821 move s1,a1
+ 404a38: afb20020 sw s2,32(sp)
+ 404a3c: afbf0028 sw ra,40(sp)
+ 404a40: afbc0024 sw gp,36(sp)
+ 404a44: afb00018 sw s0,24(sp)
+ 404a48: a6220000 sh v0,0(s1)
+ 404a4c: 8f858018 lw a1,-32744(gp)
+ 404a50: 00000000 nop
+ 404a54: 24a50450 addiu a1,a1,1104
+ 404a58: a6200002 sh zero,2(s1)
+ 404a5c: 00809021 move s2,a0
+ 404a60: 8f998120 lw t9,-32480(gp)
+ 404a64: 00000000 nop
+ 404a68: 0320f809 jalr t9
+ 404a6c: 00000000 nop
+ 404a70: 8fbc0010 lw gp,16(sp)
+ 404a74: 00401821 move v1,v0
+ 404a78: 02402021 move a0,s2
+ 404a7c: 10600041 beqz v1,404b84 <iw_in_inet+0x16c>
+ 404a80: 24020001 li v0,1
+ 404a84: 8f9980a4 lw t9,-32604(gp)
+ 404a88: 00000000 nop
+ 404a8c: 0320f809 jalr t9
+ 404a90: 00000000 nop
+ 404a94: 8fbc0010 lw gp,16(sp)
+ 404a98: 00402821 move a1,v0
+ 404a9c: 10a00011 beqz a1,404ae4 <iw_in_inet+0xcc>
+ 404aa0: 02402021 move a0,s2
+ 404aa4: 8ca2000c lw v0,12(a1)
+ 404aa8: 00000000 nop
+ 404aac: ae220004 sw v0,4(s1)
+ 404ab0: 8ca50000 lw a1,0(a1)
+ 404ab4: 8f9982c4 lw t9,-32060(gp)
+ 404ab8: 00000000 nop
+ 404abc: 0320f809 jalr t9
+ 404ac0: 00000000 nop
+ 404ac4: 8fbc0010 lw gp,16(sp)
+ 404ac8: 24020001 li v0,1
+ 404acc: 8fbf0028 lw ra,40(sp)
+ 404ad0: 8fb20020 lw s2,32(sp)
+ 404ad4: 8fb1001c lw s1,28(sp)
+ 404ad8: 8fb00018 lw s0,24(sp)
+ 404adc: 03e00008 jr ra
+ 404ae0: 27bd0030 addiu sp,sp,48
+ 404ae4: 8f998108 lw t9,-32504(gp)
+ 404ae8: 00000000 nop
+ 404aec: 0320f809 jalr t9
+ 404af0: 00000000 nop
+ 404af4: 8fbc0010 lw gp,16(sp)
+ 404af8: 00408021 move s0,v0
+ 404afc: 12000012 beqz s0,404b48 <iw_in_inet+0x130>
+ 404b00: 26240004 addiu a0,s1,4
+ 404b04: 8e020010 lw v0,16(s0)
+ 404b08: 8e06000c lw a2,12(s0)
+ 404b0c: 8c450000 lw a1,0(v0)
+ 404b10: 8f998254 lw t9,-32172(gp)
+ 404b14: 00000000 nop
+ 404b18: 0320f809 jalr t9
+ 404b1c: 00000000 nop
+ 404b20: 8fbc0010 lw gp,16(sp)
+ 404b24: 8e050000 lw a1,0(s0)
+ 404b28: 02402021 move a0,s2
+ 404b2c: 8f9982c4 lw t9,-32060(gp)
+ 404b30: 00000000 nop
+ 404b34: 0320f809 jalr t9
+ 404b38: 00000000 nop
+ 404b3c: 8fbc0010 lw gp,16(sp)
+ 404b40: 1000ffe2 b 404acc <iw_in_inet+0xb4>
+ 404b44: 00001021 move v0,zero
+ 404b48: 8f9980a0 lw t9,-32608(gp)
+ 404b4c: 00000000 nop
+ 404b50: 0320f809 jalr t9
+ 404b54: 00000000 nop
+ 404b58: 8fbc0010 lw gp,16(sp)
+ 404b5c: 00408021 move s0,v0
+ 404b60: 8f998110 lw t9,-32496(gp)
+ 404b64: 00000000 nop
+ 404b68: 0320f809 jalr t9
+ 404b6c: 00000000 nop
+ 404b70: 8fbc0010 lw gp,16(sp)
+ 404b74: 8c430000 lw v1,0(v0)
+ 404b78: 2402ffff li v0,-1
+ 404b7c: 1000ffd3 b 404acc <iw_in_inet+0xb4>
+ 404b80: ae030000 sw v1,0(s0)
+ 404b84: 1000ffd1 b 404acc <iw_in_inet+0xb4>
+ 404b88: ae200004 sw zero,4(s1)
+
+00404b8c <iw_in_addr>:
+ 404b8c: 3c1c0fc0 lui gp,0xfc0
+ 404b90: 279c36c4 addiu gp,gp,14020
+ 404b94: 0399e021 addu gp,gp,t9
+ 404b98: 27bdff70 addiu sp,sp,-144
+ 404b9c: afbc0018 sw gp,24(sp)
+ 404ba0: afb20080 sw s2,128(sp)
+ 404ba4: 00c09021 move s2,a2
+ 404ba8: afb30084 sw s3,132(sp)
+ 404bac: afb1007c sw s1,124(sp)
+ 404bb0: afb00078 sw s0,120(sp)
+ 404bb4: 00a08821 move s1,a1
+ 404bb8: 00808021 move s0,a0
+ 404bbc: afbf008c sw ra,140(sp)
+ 404bc0: afbc0088 sw gp,136(sp)
+ 404bc4: 02402021 move a0,s2
+ 404bc8: 2405003a li a1,58
+ 404bcc: 00e09821 move s3,a3
+ 404bd0: 8f998144 lw t9,-32444(gp)
+ 404bd4: 00000000 nop
+ 404bd8: 0320f809 jalr t9
+ 404bdc: 00000000 nop
+ 404be0: 8fbc0018 lw gp,24(sp)
+ 404be4: 1040002c beqz v0,404c98 <iw_in_addr+0x10c>
+ 404be8: 02002021 move a0,s0
+ 404bec: 02202821 move a1,s1
+ 404bf0: 8f998094 lw t9,-32620(gp)
+ 404bf4: 00000000 nop
+ 404bf8: 0320f809 jalr t9
+ 404bfc: 00000000 nop
+ 404c00: 8fbc0018 lw gp,24(sp)
+ 404c04: 0440001c bltz v0,404c78 <iw_in_addr+0xec>
+ 404c08: 00000000 nop
+ 404c0c: 24020001 li v0,1
+ 404c10: 26650002 addiu a1,s3,2
+ 404c14: a6620000 sh v0,0(s3)
+ 404c18: 02402021 move a0,s2
+ 404c1c: 8f998180 lw t9,-32384(gp)
+ 404c20: 00000000 nop
+ 404c24: 0320f809 jalr t9
+ 404c28: 00000000 nop
+ 404c2c: 8fbc0018 lw gp,24(sp)
+ 404c30: 10400009 beqz v0,404c58 <iw_in_addr+0xcc>
+ 404c34: 00000000 nop
+ 404c38: 00001021 move v0,zero
+ 404c3c: 8fbf008c lw ra,140(sp)
+ 404c40: 8fb30084 lw s3,132(sp)
+ 404c44: 8fb20080 lw s2,128(sp)
+ 404c48: 8fb1007c lw s1,124(sp)
+ 404c4c: 8fb00078 lw s0,120(sp)
+ 404c50: 03e00008 jr ra
+ 404c54: 27bd0090 addiu sp,sp,144
+ 404c58: 8f8480e8 lw a0,-32536(gp)
+ 404c5c: 00000000 nop
+ 404c60: 8c840000 lw a0,0(a0)
+ 404c64: 8f858018 lw a1,-32744(gp)
+ 404c68: 00000000 nop
+ 404c6c: 24a50458 addiu a1,a1,1112
+ 404c70: 10000071 b 404e38 <iw_in_addr+0x2ac>
+ 404c74: 02403021 move a2,s2
+ 404c78: 8f8480e8 lw a0,-32536(gp)
+ 404c7c: 00000000 nop
+ 404c80: 8c840000 lw a0,0(a0)
+ 404c84: 8f858018 lw a1,-32744(gp)
+ 404c88: 00000000 nop
+ 404c8c: 24a50478 addiu a1,a1,1144
+ 404c90: 10000069 b 404e38 <iw_in_addr+0x2ac>
+ 404c94: 02203021 move a2,s1
+ 404c98: 02202821 move a1,s1
+ 404c9c: 8f99804c lw t9,-32692(gp)
+ 404ca0: 00000000 nop
+ 404ca4: 0320f809 jalr t9
+ 404ca8: 00000000 nop
+ 404cac: 8fbc0018 lw gp,24(sp)
+ 404cb0: 0440005a bltz v0,404e1c <iw_in_addr+0x290>
+ 404cb4: 02402021 move a0,s2
+ 404cb8: 27a50020 addiu a1,sp,32
+ 404cbc: 8f9980f4 lw t9,-32524(gp)
+ 404cc0: 00000000 nop
+ 404cc4: 0320f809 jalr t9
+ 404cc8: 00000000 nop
+ 404ccc: 8fbc0018 lw gp,24(sp)
+ 404cd0: 0440004a bltz v0,404dfc <iw_in_addr+0x270>
+ 404cd4: 00000000 nop
+ 404cd8: 8fa20020 lw v0,32(sp)
+ 404cdc: 8fa30024 lw v1,36(sp)
+ 404ce0: afa20030 sw v0,48(sp)
+ 404ce4: afa30034 sw v1,52(sp)
+ 404ce8: 8fa20028 lw v0,40(sp)
+ 404cec: 8fa3002c lw v1,44(sp)
+ 404cf0: 27a40064 addiu a0,sp,100
+ 404cf4: 02202821 move a1,s1
+ 404cf8: 24060010 li a2,16
+ 404cfc: afa20038 sw v0,56(sp)
+ 404d00: afa3003c sw v1,60(sp)
+ 404d04: a7a00040 sh zero,64(sp)
+ 404d08: afa00050 sw zero,80(sp)
+ 404d0c: 8f998188 lw t9,-32376(gp)
+ 404d10: 00000000 nop
+ 404d14: 0320f809 jalr t9
+ 404d18: 00000000 nop
+ 404d1c: 8fbc0018 lw gp,24(sp)
+ 404d20: 27a60030 addiu a2,sp,48
+ 404d24: 02002021 move a0,s0
+ 404d28: 34058954 li a1,0x8954
+ 404d2c: 8f9982b8 lw t9,-32072(gp)
+ 404d30: 00000000 nop
+ 404d34: 0320f809 jalr t9
+ 404d38: 00000000 nop
+ 404d3c: 8fbc0018 lw gp,24(sp)
+ 404d40: 04400018 bltz v0,404da4 <iw_in_addr+0x218>
+ 404d44: 00000000 nop
+ 404d48: 8fa20050 lw v0,80(sp)
+ 404d4c: 00000000 nop
+ 404d50: 30420002 andi v0,v0,0x2
+ 404d54: 10400013 beqz v0,404da4 <iw_in_addr+0x218>
+ 404d58: 00000000 nop
+ 404d5c: 87a20040 lh v0,64(sp)
+ 404d60: 87a30042 lh v1,66(sp)
+ 404d64: 87a40044 lh a0,68(sp)
+ 404d68: 87a50046 lh a1,70(sp)
+ 404d6c: a6620000 sh v0,0(s3)
+ 404d70: a6630002 sh v1,2(s3)
+ 404d74: a6640004 sh a0,4(s3)
+ 404d78: a6650006 sh a1,6(s3)
+ 404d7c: 87a20048 lh v0,72(sp)
+ 404d80: 87a3004a lh v1,74(sp)
+ 404d84: 87a4004c lh a0,76(sp)
+ 404d88: 87a5004e lh a1,78(sp)
+ 404d8c: a6620008 sh v0,8(s3)
+ 404d90: a663000a sh v1,10(s3)
+ 404d94: a664000c sh a0,12(s3)
+ 404d98: a665000e sh a1,14(s3)
+ 404d9c: 1000ffa7 b 404c3c <iw_in_addr+0xb0>
+ 404da0: 00001021 move v0,zero
+ 404da4: 8f9980a0 lw t9,-32608(gp)
+ 404da8: 00000000 nop
+ 404dac: 0320f809 jalr t9
+ 404db0: 00000000 nop
+ 404db4: 8fbc0018 lw gp,24(sp)
+ 404db8: 8c430000 lw v1,0(v0)
+ 404dbc: 8f8480e8 lw a0,-32536(gp)
+ 404dc0: 00000000 nop
+ 404dc4: 8c840000 lw a0,0(a0)
+ 404dc8: 8f858018 lw a1,-32744(gp)
+ 404dcc: 00000000 nop
+ 404dd0: 24a504ac addiu a1,a1,1196
+ 404dd4: 02403021 move a2,s2
+ 404dd8: 02203821 move a3,s1
+ 404ddc: afa30010 sw v1,16(sp)
+ 404de0: 8f9981c4 lw t9,-32316(gp)
+ 404de4: 00000000 nop
+ 404de8: 0320f809 jalr t9
+ 404dec: 00000000 nop
+ 404df0: 8fbc0018 lw gp,24(sp)
+ 404df4: 1000ff91 b 404c3c <iw_in_addr+0xb0>
+ 404df8: 2402ffff li v0,-1
+ 404dfc: 8f8480e8 lw a0,-32536(gp)
+ 404e00: 00000000 nop
+ 404e04: 8c840000 lw a0,0(a0)
+ 404e08: 8f858018 lw a1,-32744(gp)
+ 404e0c: 00000000 nop
+ 404e10: 24a504f8 addiu a1,a1,1272
+ 404e14: 10000008 b 404e38 <iw_in_addr+0x2ac>
+ 404e18: 02403021 move a2,s2
+ 404e1c: 8f8480e8 lw a0,-32536(gp)
+ 404e20: 00000000 nop
+ 404e24: 8c840000 lw a0,0(a0)
+ 404e28: 8f858018 lw a1,-32744(gp)
+ 404e2c: 00000000 nop
+ 404e30: 24a50518 addiu a1,a1,1304
+ 404e34: 02203021 move a2,s1
+ 404e38: 8f9981c4 lw t9,-32316(gp)
+ 404e3c: 00000000 nop
+ 404e40: 0320f809 jalr t9
+ 404e44: 00000000 nop
+ 404e48: 8fbc0018 lw gp,24(sp)
+ 404e4c: 1000ff7b b 404c3c <iw_in_addr+0xb0>
+ 404e50: 2402ffff li v0,-1
+
+00404e54 <iw_get_priv_size>:
+ 404e54: 3c1c0fc0 lui gp,0xfc0
+ 404e58: 279c33fc addiu gp,gp,13308
+ 404e5c: 0399e021 addu gp,gp,t9
+ 404e60: 00801021 move v0,a0
+ 404e64: 30437000 andi v1,v0,0x7000
+ 404e68: 00031a82 srl v1,v1,0xa
+ 404e6c: 8f848018 lw a0,-32744(gp)
+ 404e70: 00000000 nop
+ 404e74: 24840548 addiu a0,a0,1352
+ 404e78: 00832021 addu a0,a0,v1
+ 404e7c: 8c840000 lw a0,0(a0)
+ 404e80: 304207ff andi v0,v0,0x7ff
+ 404e84: 00440018 mult v0,a0
+ 404e88: 00001012 mflo v0
+ 404e8c: 03e00008 jr ra
+ 404e90: 00000000 nop
+ ...
+
+00404ea0 <isdigit>:
+ 404ea0: 3c1c0fc0 lui gp,0xfc0
+ 404ea4: 279c33b0 addiu gp,gp,13232
+ 404ea8: 0399e021 addu gp,gp,t9
+ 404eac: 00801021 move v0,a0
+ 404eb0: 2442ffd0 addiu v0,v0,-48
+ 404eb4: 03e00008 jr ra
+ 404eb8: 2c42000a sltiu v0,v0,10
+ 404ebc: 00000000 nop
+
+00404ec0 <isspace>:
+ 404ec0: 3c1c0fc0 lui gp,0xfc0
+ 404ec4: 279c3390 addiu gp,gp,13200
+ 404ec8: 0399e021 addu gp,gp,t9
+ 404ecc: 2482fff7 addiu v0,a0,-9
+ 404ed0: 2c430005 sltiu v1,v0,5
+ 404ed4: 24020020 li v0,32
+ 404ed8: 10820003 beq a0,v0,404ee8 <isspace+0x28>
+ 404edc: 00002821 move a1,zero
+ 404ee0: 10600002 beqz v1,404eec <isspace+0x2c>
+ 404ee4: 00000000 nop
+ 404ee8: 24050001 li a1,1
+ 404eec: 03e00008 jr ra
+ 404ef0: 00a01021 move v0,a1
+ ...
+
+00404f00 <__uClibc_main>:
+ 404f00: 3c1c0fc0 lui gp,0xfc0
+ 404f04: 279c3350 addiu gp,gp,13136
+ 404f08: 0399e021 addu gp,gp,t9
+ 404f0c: 27bdffd0 addiu sp,sp,-48
+ 404f10: afbc0010 sw gp,16(sp)
+ 404f14: 8f8281f4 lw v0,-32268(gp)
+ 404f18: 00000000 nop
+ 404f1c: 8c420000 lw v0,0(v0)
+ 404f20: afb20020 sw s2,32(sp)
+ 404f24: afb1001c sw s1,28(sp)
+ 404f28: afb00018 sw s0,24(sp)
+ 404f2c: afbf0028 sw ra,40(sp)
+ 404f30: afbc0024 sw gp,36(sp)
+ 404f34: 00808821 move s1,a0
+ 404f38: 00a09021 move s2,a1
+ 404f3c: 10400046 beqz v0,405058 <__uClibc_main+0x158>
+ 404f40: 00c08021 move s0,a2
+ 404f44: 8f828098 lw v0,-32616(gp)
+ 404f48: 00000000 nop
+ 404f4c: 10400006 beqz v0,404f68 <__uClibc_main+0x68>
+ 404f50: 00000000 nop
+ 404f54: 0040c821 move t9,v0
+ 404f58: 0320f809 jalr t9
+ 404f5c: 00000000 nop
+ 404f60: 8fbc0010 lw gp,16(sp)
+ 404f64: 00000000 nop
+ 404f68: 8f828100 lw v0,-32512(gp)
+ 404f6c: 00000000 nop
+ 404f70: 10400006 beqz v0,404f8c <__uClibc_main+0x8c>
+ 404f74: 00001821 move v1,zero
+ 404f78: 8f8280f8 lw v0,-32520(gp)
+ 404f7c: 00000000 nop
+ 404f80: 10400002 beqz v0,404f8c <__uClibc_main+0x8c>
+ 404f84: 00000000 nop
+ 404f88: 24030001 li v1,1
+ 404f8c: 10600008 beqz v1,404fb0 <__uClibc_main+0xb0>
+ 404f90: 00000000 nop
+ 404f94: 8f848100 lw a0,-32512(gp)
+ 404f98: 8f9980f8 lw t9,-32520(gp)
+ 404f9c: 00000000 nop
+ 404fa0: 0320f809 jalr t9
+ 404fa4: 00000000 nop
+ 404fa8: 8fbc0010 lw gp,16(sp)
+ 404fac: 00000000 nop
+ 404fb0: 8f8281e0 lw v0,-32288(gp)
+ 404fb4: 00000000 nop
+ 404fb8: 10400006 beqz v0,404fd4 <__uClibc_main+0xd4>
+ 404fbc: 00000000 nop
+ 404fc0: 0040c821 move t9,v0
+ 404fc4: 0320f809 jalr t9
+ 404fc8: 00000000 nop
+ 404fcc: 8fbc0010 lw gp,16(sp)
+ 404fd0: 00000000 nop
+ 404fd4: 8f8280a0 lw v0,-32608(gp)
+ 404fd8: 00000000 nop
+ 404fdc: 10400006 beqz v0,404ff8 <__uClibc_main+0xf8>
+ 404fe0: 00000000 nop
+ 404fe4: 0040c821 move t9,v0
+ 404fe8: 0320f809 jalr t9
+ 404fec: 00000000 nop
+ 404ff0: 8fbc0010 lw gp,16(sp)
+ 404ff4: ac400000 sw zero,0(v0)
+ 404ff8: 8f828110 lw v0,-32496(gp)
+ 404ffc: 00000000 nop
+ 405000: 10400007 beqz v0,405020 <__uClibc_main+0x120>
+ 405004: 02202021 move a0,s1
+ 405008: 0040c821 move t9,v0
+ 40500c: 0320f809 jalr t9
+ 405010: 00000000 nop
+ 405014: 8fbc0010 lw gp,16(sp)
+ 405018: ac400000 sw zero,0(v0)
+ 40501c: 02202021 move a0,s1
+ 405020: 02402821 move a1,s2
+ 405024: 02003021 move a2,s0
+ 405028: 8f998138 lw t9,-32456(gp)
+ 40502c: 00000000 nop
+ 405030: 0320f809 jalr t9
+ 405034: 00000000 nop
+ 405038: 8fbc0010 lw gp,16(sp)
+ 40503c: 00402021 move a0,v0
+ 405040: 8f99809c lw t9,-32612(gp)
+ 405044: 00000000 nop
+ 405048: 0320f809 jalr t9
+ 40504c: 00000000 nop
+ 405050: 8fbc0010 lw gp,16(sp)
+ 405054: 00000000 nop
+ 405058: 8f8181f4 lw at,-32268(gp)
+ 40505c: 00000000 nop
+ 405060: 1000ffb8 b 404f44 <__uClibc_main+0x44>
+ 405064: ac300000 sw s0,0(at)
+ ...
+
+00405070 <__errno_location>:
+ 405070: 3c1c0fc0 lui gp,0xfc0
+ 405074: 279c31e0 addiu gp,gp,12768
+ 405078: 0399e021 addu gp,gp,t9
+ 40507c: 8f828274 lw v0,-32140(gp)
+ 405080: 03e00008 jr ra
+ 405084: 00000000 nop
+ ...
+
+00405090 <__h_errno_location>:
+ 405090: 3c1c0fc0 lui gp,0xfc0
+ 405094: 279c31c0 addiu gp,gp,12736
+ 405098: 0399e021 addu gp,gp,t9
+ 40509c: 8f8281d0 lw v0,-32304(gp)
+ 4050a0: 03e00008 jr ra
+ 4050a4: 00000000 nop
+ ...
+
+004050b0 <fclose>:
+ 4050b0: 3c1c0fc0 lui gp,0xfc0
+ 4050b4: 279c31a0 addiu gp,gp,12704
+ 4050b8: 0399e021 addu gp,gp,t9
+ 4050bc: 27bdffd8 addiu sp,sp,-40
+ 4050c0: afbc0010 sw gp,16(sp)
+ 4050c4: afb1001c sw s1,28(sp)
+ 4050c8: afb00018 sw s0,24(sp)
+ 4050cc: afbf0024 sw ra,36(sp)
+ 4050d0: afbc0020 sw gp,32(sp)
+ 4050d4: 00808021 move s0,a0
+ 4050d8: 00008821 move s1,zero
+ 4050dc: 8e020038 lw v0,56(s0)
+ 4050e0: 00000000 nop
+ 4050e4: 10400087 beqz v0,405304 <fclose+0x254>
+ 4050e8: 2604003c addiu a0,s0,60
+ 4050ec: 8f848080 lw a0,-32640(gp)
+ 4050f0: 8f998084 lw t9,-32636(gp)
+ 4050f4: 00000000 nop
+ 4050f8: 0320f809 jalr t9
+ 4050fc: 00000000 nop
+ 405100: 8fbc0010 lw gp,16(sp)
+ 405104: 10400014 beqz v0,405158 <fclose+0xa8>
+ 405108: 2604003c addiu a0,s0,60
+ 40510c: 8e020038 lw v0,56(s0)
+ 405110: 00000000 nop
+ 405114: 10400009 beqz v0,40513c <fclose+0x8c>
+ 405118: 00000000 nop
+ 40511c: 24042710 li a0,10000
+ 405120: 8f998270 lw t9,-32144(gp)
+ 405124: 00000000 nop
+ 405128: 0320f809 jalr t9
+ 40512c: 00000000 nop
+ 405130: 8fbc0010 lw gp,16(sp)
+ 405134: 1000ffe9 b 4050dc <fclose+0x2c>
+ 405138: 00000000 nop
+ 40513c: 8f99811c lw t9,-32484(gp)
+ 405140: 00000000 nop
+ 405144: 0320f809 jalr t9
+ 405148: 00000000 nop
+ 40514c: 8fbc0010 lw gp,16(sp)
+ 405150: 1000fff3 b 405120 <fclose+0x70>
+ 405154: 24042710 li a0,10000
+ 405158: 96020000 lhu v0,0(s0)
+ 40515c: 00000000 nop
+ 405160: 30422000 andi v0,v0,0x2000
+ 405164: 10400007 beqz v0,405184 <fclose+0xd4>
+ 405168: 02002021 move a0,s0
+ 40516c: 8f9980d8 lw t9,-32552(gp)
+ 405170: 00000000 nop
+ 405174: 0320f809 jalr t9
+ 405178: 00000000 nop
+ 40517c: 8fbc0010 lw gp,16(sp)
+ 405180: 00408821 move s1,v0
+ 405184: 8e02000c lw v0,12(s0)
+ 405188: 00000000 nop
+ 40518c: ae02001c sw v0,28(s0)
+ 405190: 8f8381b8 lw v1,-32328(gp)
+ 405194: 00000000 nop
+ 405198: 8c630000 lw v1,0(v1)
+ 40519c: 00000000 nop
+ 4051a0: 10700053 beq v1,s0,4052f0 <fclose+0x240>
+ 4051a4: 00000000 nop
+ 4051a8: 10000003 b 4051b8 <fclose+0x108>
+ 4051ac: 00000000 nop
+ 4051b0: 8c630008 lw v1,8(v1)
+ 4051b4: 00000000 nop
+ 4051b8: 10600008 beqz v1,4051dc <fclose+0x12c>
+ 4051bc: 00000000 nop
+ 4051c0: 8c620008 lw v0,8(v1)
+ 4051c4: 00000000 nop
+ 4051c8: 1450fff9 bne v0,s0,4051b0 <fclose+0x100>
+ 4051cc: 00000000 nop
+ 4051d0: 8e020008 lw v0,8(s0)
+ 4051d4: 00000000 nop
+ 4051d8: ac620008 sw v0,8(v1)
+ 4051dc: 8f848080 lw a0,-32640(gp)
+ 4051e0: 8f99811c lw t9,-32484(gp)
+ 4051e4: 00000000 nop
+ 4051e8: 0320f809 jalr t9
+ 4051ec: 00000000 nop
+ 4051f0: 8fbc0010 lw gp,16(sp)
+ 4051f4: 8e020034 lw v0,52(s0)
+ 4051f8: 00000000 nop
+ 4051fc: 10400008 beqz v0,405220 <fclose+0x170>
+ 405200: 00000000 nop
+ 405204: 8e040024 lw a0,36(s0)
+ 405208: 0040c821 move t9,v0
+ 40520c: 0320f809 jalr t9
+ 405210: 00000000 nop
+ 405214: 8fbc0010 lw gp,16(sp)
+ 405218: 04400033 bltz v0,4052e8 <fclose+0x238>
+ 40521c: 00000000 nop
+ 405220: 26020004 addiu v0,s0,4
+ 405224: ae020024 sw v0,36(s0)
+ 405228: 8f8280e4 lw v0,-32540(gp)
+ 40522c: 96030000 lhu v1,0(s0)
+ 405230: ae020028 sw v0,40(s0)
+ 405234: 8f8280ac lw v0,-32596(gp)
+ 405238: 00000000 nop
+ 40523c: ae02002c sw v0,44(s0)
+ 405240: 8f828220 lw v0,-32224(gp)
+ 405244: 00000000 nop
+ 405248: ae020034 sw v0,52(s0)
+ 40524c: 30634000 andi v1,v1,0x4000
+ 405250: 2402ffff li v0,-1
+ 405254: ae020004 sw v0,4(s0)
+ 405258: 10600007 beqz v1,405278 <fclose+0x1c8>
+ 40525c: ae000030 sw zero,48(s0)
+ 405260: 8e04000c lw a0,12(s0)
+ 405264: 8f998030 lw t9,-32720(gp)
+ 405268: 00000000 nop
+ 40526c: 0320f809 jalr t9
+ 405270: 00000000 nop
+ 405274: 8fbc0010 lw gp,16(sp)
+ 405278: 8e020038 lw v0,56(s0)
+ 40527c: 00000000 nop
+ 405280: 10400012 beqz v0,4052cc <fclose+0x21c>
+ 405284: 2604003c addiu a0,s0,60
+ 405288: 96020000 lhu v0,0(s0)
+ 40528c: 00000000 nop
+ 405290: 30420040 andi v0,v0,0x40
+ 405294: 10400007 beqz v0,4052b4 <fclose+0x204>
+ 405298: 02002021 move a0,s0
+ 40529c: ae000024 sw zero,36(s0)
+ 4052a0: 8f998030 lw t9,-32720(gp)
+ 4052a4: 00000000 nop
+ 4052a8: 0320f809 jalr t9
+ 4052ac: 00000000 nop
+ 4052b0: 8fbc0010 lw gp,16(sp)
+ 4052b4: 02201021 move v0,s1
+ 4052b8: 8fbf0024 lw ra,36(sp)
+ 4052bc: 8fb1001c lw s1,28(sp)
+ 4052c0: 8fb00018 lw s0,24(sp)
+ 4052c4: 03e00008 jr ra
+ 4052c8: 27bd0028 addiu sp,sp,40
+ 4052cc: 8f99811c lw t9,-32484(gp)
+ 4052d0: 00000000 nop
+ 4052d4: 0320f809 jalr t9
+ 4052d8: 00000000 nop
+ 4052dc: 8fbc0010 lw gp,16(sp)
+ 4052e0: 1000ffe9 b 405288 <fclose+0x1d8>
+ 4052e4: 00000000 nop
+ 4052e8: 1000ffcd b 405220 <fclose+0x170>
+ 4052ec: 2411ffff li s1,-1
+ 4052f0: 8e020008 lw v0,8(s0)
+ 4052f4: 8f8181b8 lw at,-32328(gp)
+ 4052f8: 00000000 nop
+ 4052fc: 1000ffb7 b 4051dc <fclose+0x12c>
+ 405300: ac220000 sw v0,0(at)
+ 405304: 8f9980a8 lw t9,-32600(gp)
+ 405308: 00000000 nop
+ 40530c: 0320f809 jalr t9
+ 405310: 00000000 nop
+ 405314: 8fbc0010 lw gp,16(sp)
+ 405318: 1000ff74 b 4050ec <fclose+0x3c>
+ 40531c: 00000000 nop
+
+00405320 <fflush>:
+ 405320: 3c1c0fc0 lui gp,0xfc0
+ 405324: 279c2f30 addiu gp,gp,12080
+ 405328: 0399e021 addu gp,gp,t9
+ 40532c: 27bdffd8 addiu sp,sp,-40
+ 405330: afbc0010 sw gp,16(sp)
+ 405334: afb00018 sw s0,24(sp)
+ 405338: 00808021 move s0,a0
+ 40533c: afbf0024 sw ra,36(sp)
+ 405340: afbc0020 sw gp,32(sp)
+ 405344: 12000028 beqz s0,4053e8 <fflush+0xc8>
+ 405348: afb1001c sw s1,28(sp)
+ 40534c: 8f8281b8 lw v0,-32328(gp)
+ 405350: 00000000 nop
+ 405354: 12020024 beq s0,v0,4053e8 <fflush+0xc8>
+ 405358: 00000000 nop
+ 40535c: 8e020038 lw v0,56(s0)
+ 405360: 00000000 nop
+ 405364: 10400019 beqz v0,4053cc <fflush+0xac>
+ 405368: 2604003c addiu a0,s0,60
+ 40536c: 02002021 move a0,s0
+ 405370: 8f9980d8 lw t9,-32552(gp)
+ 405374: 00000000 nop
+ 405378: 0320f809 jalr t9
+ 40537c: 00000000 nop
+ 405380: 8fbc0010 lw gp,16(sp)
+ 405384: 00408821 move s1,v0
+ 405388: 8e020038 lw v0,56(s0)
+ 40538c: 00000000 nop
+ 405390: 10400007 beqz v0,4053b0 <fflush+0x90>
+ 405394: 2604003c addiu a0,s0,60
+ 405398: 02201021 move v0,s1
+ 40539c: 8fbf0024 lw ra,36(sp)
+ 4053a0: 8fb1001c lw s1,28(sp)
+ 4053a4: 8fb00018 lw s0,24(sp)
+ 4053a8: 03e00008 jr ra
+ 4053ac: 27bd0028 addiu sp,sp,40
+ 4053b0: 8f99811c lw t9,-32484(gp)
+ 4053b4: 00000000 nop
+ 4053b8: 0320f809 jalr t9
+ 4053bc: 00000000 nop
+ 4053c0: 8fbc0010 lw gp,16(sp)
+ 4053c4: 1000fff5 b 40539c <fflush+0x7c>
+ 4053c8: 02201021 move v0,s1
+ 4053cc: 8f9980a8 lw t9,-32600(gp)
+ 4053d0: 00000000 nop
+ 4053d4: 0320f809 jalr t9
+ 4053d8: 00000000 nop
+ 4053dc: 8fbc0010 lw gp,16(sp)
+ 4053e0: 1000ffe3 b 405370 <fflush+0x50>
+ 4053e4: 02002021 move a0,s0
+ 4053e8: 8f9980d8 lw t9,-32552(gp)
+ 4053ec: 00000000 nop
+ 4053f0: 0320f809 jalr t9
+ 4053f4: 00000000 nop
+ 4053f8: 8fbc0010 lw gp,16(sp)
+ 4053fc: 1000ffe6 b 405398 <fflush+0x78>
+ 405400: 00408821 move s1,v0
+
+00405404 <fflush_unlocked>:
+ 405404: 3c1c0fc0 lui gp,0xfc0
+ 405408: 279c2e4c addiu gp,gp,11852
+ 40540c: 0399e021 addu gp,gp,t9
+ 405410: 27bdffd0 addiu sp,sp,-48
+ 405414: afbc0010 sw gp,16(sp)
+ 405418: afb00018 sw s0,24(sp)
+ 40541c: 8f8281b8 lw v0,-32328(gp)
+ 405420: 00808021 move s0,a0
+ 405424: afb20020 sw s2,32(sp)
+ 405428: afb1001c sw s1,28(sp)
+ 40542c: afbf0028 sw ra,40(sp)
+ 405430: afbc0024 sw gp,36(sp)
+ 405434: 00008821 move s1,zero
+ 405438: 1202004e beq s0,v0,405574 <fflush_unlocked+0x170>
+ 40543c: 24120300 li s2,768
+ 405440: 12000023 beqz s0,4054d0 <fflush_unlocked+0xcc>
+ 405444: 00000000 nop
+ 405448: 96030000 lhu v1,0(s0)
+ 40544c: 00000000 nop
+ 405450: 30622000 andi v0,v1,0x2000
+ 405454: 10400012 beqz v0,4054a0 <fflush_unlocked+0x9c>
+ 405458: 02003021 move a2,s0
+ 40545c: 00002021 move a0,zero
+ 405460: 00002821 move a1,zero
+ 405464: 8f9982a4 lw t9,-32092(gp)
+ 405468: 00000000 nop
+ 40546c: 0320f809 jalr t9
+ 405470: 00000000 nop
+ 405474: 8fbc0010 lw gp,16(sp)
+ 405478: 10400003 beqz v0,405488 <fflush_unlocked+0x84>
+ 40547c: 02201021 move v0,s1
+ 405480: 2411ffff li s1,-1
+ 405484: 02201021 move v0,s1
+ 405488: 8fbf0028 lw ra,40(sp)
+ 40548c: 8fb20020 lw s2,32(sp)
+ 405490: 8fb1001c lw s1,28(sp)
+ 405494: 8fb00018 lw s0,24(sp)
+ 405498: 03e00008 jr ra
+ 40549c: 27bd0030 addiu sp,sp,48
+ 4054a0: 30620020 andi v0,v1,0x20
+ 4054a4: 1040fff7 beqz v0,405484 <fflush_unlocked+0x80>
+ 4054a8: 34620008 ori v0,v1,0x8
+ 4054ac: a6020000 sh v0,0(s0)
+ 4054b0: 8f9980a0 lw t9,-32608(gp)
+ 4054b4: 00000000 nop
+ 4054b8: 0320f809 jalr t9
+ 4054bc: 00000000 nop
+ 4054c0: 8fbc0010 lw gp,16(sp)
+ 4054c4: 24030009 li v1,9
+ 4054c8: 1000ffed b 405480 <fflush_unlocked+0x7c>
+ 4054cc: ac430000 sw v1,0(v0)
+ 4054d0: 8f848080 lw a0,-32640(gp)
+ 4054d4: 8f9980a8 lw t9,-32600(gp)
+ 4054d8: 00000000 nop
+ 4054dc: 0320f809 jalr t9
+ 4054e0: 00000000 nop
+ 4054e4: 8fbc0010 lw gp,16(sp)
+ 4054e8: 00000000 nop
+ 4054ec: 8f9081b8 lw s0,-32328(gp)
+ 4054f0: 00000000 nop
+ 4054f4: 8e100000 lw s0,0(s0)
+ 4054f8: 00000000 nop
+ 4054fc: 12000015 beqz s0,405554 <fflush_unlocked+0x150>
+ 405500: 00000000 nop
+ 405504: 96030000 lhu v1,0(s0)
+ 405508: 00000000 nop
+ 40550c: 38620200 xori v0,v1,0x200
+ 405510: 02421024 and v0,s2,v0
+ 405514: 1040000b beqz v0,405544 <fflush_unlocked+0x140>
+ 405518: 30632000 andi v1,v1,0x2000
+ 40551c: 10600009 beqz v1,405544 <fflush_unlocked+0x140>
+ 405520: 02002021 move a0,s0
+ 405524: 8f998204 lw t9,-32252(gp)
+ 405528: 00000000 nop
+ 40552c: 0320f809 jalr t9
+ 405530: 00000000 nop
+ 405534: 8fbc0010 lw gp,16(sp)
+ 405538: 10400002 beqz v0,405544 <fflush_unlocked+0x140>
+ 40553c: 00000000 nop
+ 405540: 2411ffff li s1,-1
+ 405544: 8e100008 lw s0,8(s0)
+ 405548: 00000000 nop
+ 40554c: 1600ffed bnez s0,405504 <fflush_unlocked+0x100>
+ 405550: 00000000 nop
+ 405554: 8f848080 lw a0,-32640(gp)
+ 405558: 8f99811c lw t9,-32484(gp)
+ 40555c: 00000000 nop
+ 405560: 0320f809 jalr t9
+ 405564: 00000000 nop
+ 405568: 8fbc0010 lw gp,16(sp)
+ 40556c: 1000ffc6 b 405488 <fflush_unlocked+0x84>
+ 405570: 02201021 move v0,s1
+ 405574: 00008021 move s0,zero
+ 405578: 1000ffb1 b 405440 <fflush_unlocked+0x3c>
+ 40557c: 24120100 li s2,256
+
+00405580 <fopen>:
+ 405580: 3c1c0fc0 lui gp,0xfc0
+ 405584: 279c2cd0 addiu gp,gp,11472
+ 405588: 0399e021 addu gp,gp,t9
+ 40558c: 27bdffe0 addiu sp,sp,-32
+ 405590: afbc0010 sw gp,16(sp)
+ 405594: 00003021 move a2,zero
+ 405598: 2407ffff li a3,-1
+ 40559c: afbf001c sw ra,28(sp)
+ 4055a0: afbc0018 sw gp,24(sp)
+ 4055a4: 8f998104 lw t9,-32508(gp)
+ 4055a8: 00000000 nop
+ 4055ac: 0320f809 jalr t9
+ 4055b0: 00000000 nop
+ 4055b4: 8fbc0010 lw gp,16(sp)
+ 4055b8: 8fbf001c lw ra,28(sp)
+ 4055bc: 00000000 nop
+ 4055c0: 03e00008 jr ra
+ 4055c4: 27bd0020 addiu sp,sp,32
+ ...
+
+004055d0 <perror>:
+ 4055d0: 3c1c0fc0 lui gp,0xfc0
+ 4055d4: 279c2c80 addiu gp,gp,11392
+ 4055d8: 0399e021 addu gp,gp,t9
+ 4055dc: 27bdffe0 addiu sp,sp,-32
+ 4055e0: afbc0010 sw gp,16(sp)
+ 4055e4: 00803021 move a2,a0
+ 4055e8: afbf001c sw ra,28(sp)
+ 4055ec: afbc0018 sw gp,24(sp)
+ 4055f0: 8f858018 lw a1,-32744(gp)
+ 4055f4: 00000000 nop
+ 4055f8: 24a50570 addiu a1,a1,1392
+ 4055fc: 8f8480e8 lw a0,-32536(gp)
+ 405600: 00000000 nop
+ 405604: 8c840000 lw a0,0(a0)
+ 405608: 8f878018 lw a3,-32744(gp)
+ 40560c: 00000000 nop
+ 405610: 24e70578 addiu a3,a3,1400
+ 405614: 10c0000e beqz a2,405650 <perror+0x80>
+ 405618: 00000000 nop
+ 40561c: 80c20000 lb v0,0(a2)
+ 405620: 00000000 nop
+ 405624: 1040000a beqz v0,405650 <perror+0x80>
+ 405628: 00000000 nop
+ 40562c: 8f9981c4 lw t9,-32316(gp)
+ 405630: 00000000 nop
+ 405634: 0320f809 jalr t9
+ 405638: 00000000 nop
+ 40563c: 8fbc0010 lw gp,16(sp)
+ 405640: 8fbf001c lw ra,28(sp)
+ 405644: 00000000 nop
+ 405648: 03e00008 jr ra
+ 40564c: 27bd0020 addiu sp,sp,32
+ 405650: 24e70002 addiu a3,a3,2
+ 405654: 1000fff5 b 40562c <perror+0x5c>
+ 405658: 00e03021 move a2,a3
+ 40565c: 00000000 nop
+
+00405660 <fgets>:
+ 405660: 3c1c0fc0 lui gp,0xfc0
+ 405664: 279c2bf0 addiu gp,gp,11248
+ 405668: 0399e021 addu gp,gp,t9
+ 40566c: 27bdffd0 addiu sp,sp,-48
+ 405670: afbc0010 sw gp,16(sp)
+ 405674: afb20020 sw s2,32(sp)
+ 405678: afb1001c sw s1,28(sp)
+ 40567c: afb00018 sw s0,24(sp)
+ 405680: afbf0028 sw ra,40(sp)
+ 405684: 00c08021 move s0,a2
+ 405688: afbc0024 sw gp,36(sp)
+ 40568c: 8e030038 lw v1,56(s0)
+ 405690: 2602003c addiu v0,s0,60
+ 405694: 00809021 move s2,a0
+ 405698: 00a08821 move s1,a1
+ 40569c: 1060001c beqz v1,405710 <fgets+0xb0>
+ 4056a0: 00402021 move a0,v0
+ 4056a4: 02402021 move a0,s2
+ 4056a8: 02202821 move a1,s1
+ 4056ac: 02003021 move a2,s0
+ 4056b0: 8f998078 lw t9,-32648(gp)
+ 4056b4: 00000000 nop
+ 4056b8: 0320f809 jalr t9
+ 4056bc: 00000000 nop
+ 4056c0: 8fbc0010 lw gp,16(sp)
+ 4056c4: 00408821 move s1,v0
+ 4056c8: 8e020038 lw v0,56(s0)
+ 4056cc: 00000000 nop
+ 4056d0: 10400008 beqz v0,4056f4 <fgets+0x94>
+ 4056d4: 2604003c addiu a0,s0,60
+ 4056d8: 02201021 move v0,s1
+ 4056dc: 8fbf0028 lw ra,40(sp)
+ 4056e0: 8fb20020 lw s2,32(sp)
+ 4056e4: 8fb1001c lw s1,28(sp)
+ 4056e8: 8fb00018 lw s0,24(sp)
+ 4056ec: 03e00008 jr ra
+ 4056f0: 27bd0030 addiu sp,sp,48
+ 4056f4: 8f99811c lw t9,-32484(gp)
+ 4056f8: 00000000 nop
+ 4056fc: 0320f809 jalr t9
+ 405700: 00000000 nop
+ 405704: 8fbc0010 lw gp,16(sp)
+ 405708: 1000fff4 b 4056dc <fgets+0x7c>
+ 40570c: 02201021 move v0,s1
+ 405710: 8f9980a8 lw t9,-32600(gp)
+ 405714: 00000000 nop
+ 405718: 0320f809 jalr t9
+ 40571c: 00000000 nop
+ 405720: 8fbc0010 lw gp,16(sp)
+ 405724: 1000ffe0 b 4056a8 <fgets+0x48>
+ 405728: 02402021 move a0,s2
+
+0040572c <fgets_unlocked>:
+ 40572c: 3c1c0fc0 lui gp,0xfc0
+ 405730: 279c2b24 addiu gp,gp,11044
+ 405734: 0399e021 addu gp,gp,t9
+ 405738: 27bdffd0 addiu sp,sp,-48
+ 40573c: afbc0010 sw gp,16(sp)
+ 405740: afb30024 sw s3,36(sp)
+ 405744: 00809821 move s3,a0
+ 405748: afb20020 sw s2,32(sp)
+ 40574c: afb1001c sw s1,28(sp)
+ 405750: afb00018 sw s0,24(sp)
+ 405754: afbf002c sw ra,44(sp)
+ 405758: afbc0028 sw gp,40(sp)
+ 40575c: 00a08821 move s1,a1
+ 405760: 00c09021 move s2,a2
+ 405764: 02608021 move s0,s3
+ 405768: 2a220002 slti v0,s1,2
+ 40576c: 14400012 bnez v0,4057b8 <fgets_unlocked+0x8c>
+ 405770: 02402021 move a0,s2
+ 405774: 8e430014 lw v1,20(s2)
+ 405778: 8e42001c lw v0,28(s2)
+ 40577c: 00000000 nop
+ 405780: 0062102b sltu v0,v1,v0
+ 405784: 10400017 beqz v0,4057e4 <fgets_unlocked+0xb8>
+ 405788: 24650001 addiu a1,v1,1
+ 40578c: 90630000 lbu v1,0(v1)
+ 405790: ae450014 sw a1,20(s2)
+ 405794: 00031600 sll v0,v1,0x18
+ 405798: 00022603 sra a0,v0,0x18
+ 40579c: 2402ffff li v0,-1
+ 4057a0: 10620005 beq v1,v0,4057b8 <fgets_unlocked+0x8c>
+ 4057a4: 2631ffff addiu s1,s1,-1
+ 4057a8: 2402000a li v0,10
+ 4057ac: a2030000 sb v1,0(s0)
+ 4057b0: 1482ffed bne a0,v0,405768 <fgets_unlocked+0x3c>
+ 4057b4: 26100001 addiu s0,s0,1
+ 4057b8: 12130003 beq s0,s3,4057c8 <fgets_unlocked+0x9c>
+ 4057bc: 00001021 move v0,zero
+ 4057c0: a2000000 sb zero,0(s0)
+ 4057c4: 02601021 move v0,s3
+ 4057c8: 8fbf002c lw ra,44(sp)
+ 4057cc: 8fb30024 lw s3,36(sp)
+ 4057d0: 8fb20020 lw s2,32(sp)
+ 4057d4: 8fb1001c lw s1,28(sp)
+ 4057d8: 8fb00018 lw s0,24(sp)
+ 4057dc: 03e00008 jr ra
+ 4057e0: 27bd0030 addiu sp,sp,48
+ 4057e4: 8f9980b0 lw t9,-32592(gp)
+ 4057e8: 00000000 nop
+ 4057ec: 0320f809 jalr t9
+ 4057f0: 00000000 nop
+ 4057f4: 8fbc0010 lw gp,16(sp)
+ 4057f8: 1000ffe6 b 405794 <fgets_unlocked+0x68>
+ 4057fc: 00401821 move v1,v0
+
+00405800 <putchar>:
+ 405800: 3c1c0fc0 lui gp,0xfc0
+ 405804: 279c2a50 addiu gp,gp,10832
+ 405808: 0399e021 addu gp,gp,t9
+ 40580c: 27bdffd8 addiu sp,sp,-40
+ 405810: afbc0010 sw gp,16(sp)
+ 405814: 8f8282ac lw v0,-32084(gp)
+ 405818: 00000000 nop
+ 40581c: 8c420000 lw v0,0(v0)
+ 405820: afb00018 sw s0,24(sp)
+ 405824: afbf0020 sw ra,32(sp)
+ 405828: afbc001c sw gp,28(sp)
+ 40582c: 00808021 move s0,a0
+ 405830: 2444003c addiu a0,v0,60
+ 405834: 8c420038 lw v0,56(v0)
+ 405838: 00000000 nop
+ 40583c: 1040001d beqz v0,4058b4 <putchar+0xb4>
+ 405840: 00000000 nop
+ 405844: 02002021 move a0,s0
+ 405848: 8f9980dc lw t9,-32548(gp)
+ 40584c: 00000000 nop
+ 405850: 0320f809 jalr t9
+ 405854: 00000000 nop
+ 405858: 8fbc0010 lw gp,16(sp)
+ 40585c: 00408021 move s0,v0
+ 405860: 8f8282ac lw v0,-32084(gp)
+ 405864: 00000000 nop
+ 405868: 8c420000 lw v0,0(v0)
+ 40586c: 00000000 nop
+ 405870: 2444003c addiu a0,v0,60
+ 405874: 8c420038 lw v0,56(v0)
+ 405878: 00000000 nop
+ 40587c: 10400006 beqz v0,405898 <putchar+0x98>
+ 405880: 00000000 nop
+ 405884: 02001021 move v0,s0
+ 405888: 8fbf0020 lw ra,32(sp)
+ 40588c: 8fb00018 lw s0,24(sp)
+ 405890: 03e00008 jr ra
+ 405894: 27bd0028 addiu sp,sp,40
+ 405898: 8f99811c lw t9,-32484(gp)
+ 40589c: 00000000 nop
+ 4058a0: 0320f809 jalr t9
+ 4058a4: 00000000 nop
+ 4058a8: 8fbc0010 lw gp,16(sp)
+ 4058ac: 1000fff6 b 405888 <putchar+0x88>
+ 4058b0: 02001021 move v0,s0
+ 4058b4: 8f9980a8 lw t9,-32600(gp)
+ 4058b8: 00000000 nop
+ 4058bc: 0320f809 jalr t9
+ 4058c0: 00000000 nop
+ 4058c4: 8fbc0010 lw gp,16(sp)
+ 4058c8: 1000ffdf b 405848 <putchar+0x48>
+ 4058cc: 02002021 move a0,s0
+
+004058d0 <putchar_unlocked>:
+ 4058d0: 3c1c0fc0 lui gp,0xfc0
+ 4058d4: 279c2980 addiu gp,gp,10624
+ 4058d8: 0399e021 addu gp,gp,t9
+ 4058dc: 27bdffe0 addiu sp,sp,-32
+ 4058e0: afbc0010 sw gp,16(sp)
+ 4058e4: 8f8782ac lw a3,-32084(gp)
+ 4058e8: 00000000 nop
+ 4058ec: 8ce70000 lw a3,0(a3)
+ 4058f0: afbf001c sw ra,28(sp)
+ 4058f4: afbc0018 sw gp,24(sp)
+ 4058f8: 8ce60014 lw a2,20(a3)
+ 4058fc: 8ce30020 lw v1,32(a3)
+ 405900: 00804821 move t1,a0
+ 405904: 00c3182b sltu v1,a2,v1
+ 405908: 312200ff andi v0,t1,0xff
+ 40590c: 00e02821 move a1,a3
+ 405910: 10600007 beqz v1,405930 <putchar_unlocked+0x60>
+ 405914: 24c80001 addiu t0,a2,1
+ 405918: a0c90000 sb t1,0(a2)
+ 40591c: ace80014 sw t0,20(a3)
+ 405920: 8fbf001c lw ra,28(sp)
+ 405924: 00000000 nop
+ 405928: 03e00008 jr ra
+ 40592c: 27bd0020 addiu sp,sp,32
+ 405930: 8f998044 lw t9,-32700(gp)
+ 405934: 00000000 nop
+ 405938: 0320f809 jalr t9
+ 40593c: 00000000 nop
+ 405940: 8fbc0010 lw gp,16(sp)
+ 405944: 1000fff6 b 405920 <putchar_unlocked+0x50>
+ 405948: 00000000 nop
+ 40594c: 00000000 nop
+
+00405950 <puts>:
+ 405950: 3c1c0fc0 lui gp,0xfc0
+ 405954: 279c2900 addiu gp,gp,10496
+ 405958: 0399e021 addu gp,gp,t9
+ 40595c: 27bdffd8 addiu sp,sp,-40
+ 405960: afbc0010 sw gp,16(sp)
+ 405964: afb00018 sw s0,24(sp)
+ 405968: 8f9082ac lw s0,-32084(gp)
+ 40596c: 00000000 nop
+ 405970: 8e100000 lw s0,0(s0)
+ 405974: afb1001c sw s1,28(sp)
+ 405978: afbf0024 sw ra,36(sp)
+ 40597c: afbc0020 sw gp,32(sp)
+ 405980: 8e020038 lw v0,56(s0)
+ 405984: 00808821 move s1,a0
+ 405988: 10400026 beqz v0,405a24 <puts+0xd4>
+ 40598c: 2604003c addiu a0,s0,60
+ 405990: 02202021 move a0,s1
+ 405994: 02002821 move a1,s0
+ 405998: 8f9981bc lw t9,-32324(gp)
+ 40599c: 00000000 nop
+ 4059a0: 0320f809 jalr t9
+ 4059a4: 00000000 nop
+ 4059a8: 8fbc0010 lw gp,16(sp)
+ 4059ac: 2404000a li a0,10
+ 4059b0: 02002821 move a1,s0
+ 4059b4: 24510001 addiu s1,v0,1
+ 4059b8: 8f998044 lw t9,-32700(gp)
+ 4059bc: 00000000 nop
+ 4059c0: 0320f809 jalr t9
+ 4059c4: 00000000 nop
+ 4059c8: 8fbc0010 lw gp,16(sp)
+ 4059cc: 2403ffff li v1,-1
+ 4059d0: 10430012 beq v0,v1,405a1c <puts+0xcc>
+ 4059d4: 2604003c addiu a0,s0,60
+ 4059d8: 8e020038 lw v0,56(s0)
+ 4059dc: 00000000 nop
+ 4059e0: 10400007 beqz v0,405a00 <puts+0xb0>
+ 4059e4: 00000000 nop
+ 4059e8: 02201021 move v0,s1
+ 4059ec: 8fbf0024 lw ra,36(sp)
+ 4059f0: 8fb1001c lw s1,28(sp)
+ 4059f4: 8fb00018 lw s0,24(sp)
+ 4059f8: 03e00008 jr ra
+ 4059fc: 27bd0028 addiu sp,sp,40
+ 405a00: 8f99811c lw t9,-32484(gp)
+ 405a04: 00000000 nop
+ 405a08: 0320f809 jalr t9
+ 405a0c: 00000000 nop
+ 405a10: 8fbc0010 lw gp,16(sp)
+ 405a14: 1000fff5 b 4059ec <puts+0x9c>
+ 405a18: 02201021 move v0,s1
+ 405a1c: 1000ffee b 4059d8 <puts+0x88>
+ 405a20: 2411ffff li s1,-1
+ 405a24: 8f9980a8 lw t9,-32600(gp)
+ 405a28: 00000000 nop
+ 405a2c: 0320f809 jalr t9
+ 405a30: 00000000 nop
+ 405a34: 8fbc0010 lw gp,16(sp)
+ 405a38: 1000ffd6 b 405994 <puts+0x44>
+ 405a3c: 02202021 move a0,s1
+
+00405a40 <fwrite>:
+ 405a40: 3c1c0fc0 lui gp,0xfc0
+ 405a44: 279c2810 addiu gp,gp,10256
+ 405a48: 0399e021 addu gp,gp,t9
+ 405a4c: 27bdffd0 addiu sp,sp,-48
+ 405a50: afbc0010 sw gp,16(sp)
+ 405a54: afb30024 sw s3,36(sp)
+ 405a58: afb20020 sw s2,32(sp)
+ 405a5c: afb1001c sw s1,28(sp)
+ 405a60: afb00018 sw s0,24(sp)
+ 405a64: afbf002c sw ra,44(sp)
+ 405a68: 00e08021 move s0,a3
+ 405a6c: afbc0028 sw gp,40(sp)
+ 405a70: 8e030038 lw v1,56(s0)
+ 405a74: 2602003c addiu v0,s0,60
+ 405a78: 00809821 move s3,a0
+ 405a7c: 00a08821 move s1,a1
+ 405a80: 00402021 move a0,v0
+ 405a84: 1060001e beqz v1,405b00 <fwrite+0xc0>
+ 405a88: 00c09021 move s2,a2
+ 405a8c: 02602021 move a0,s3
+ 405a90: 02202821 move a1,s1
+ 405a94: 02403021 move a2,s2
+ 405a98: 02003821 move a3,s0
+ 405a9c: 8f9980d0 lw t9,-32560(gp)
+ 405aa0: 00000000 nop
+ 405aa4: 0320f809 jalr t9
+ 405aa8: 00000000 nop
+ 405aac: 8fbc0010 lw gp,16(sp)
+ 405ab0: 00408821 move s1,v0
+ 405ab4: 8e020038 lw v0,56(s0)
+ 405ab8: 00000000 nop
+ 405abc: 10400009 beqz v0,405ae4 <fwrite+0xa4>
+ 405ac0: 2604003c addiu a0,s0,60
+ 405ac4: 02201021 move v0,s1
+ 405ac8: 8fbf002c lw ra,44(sp)
+ 405acc: 8fb30024 lw s3,36(sp)
+ 405ad0: 8fb20020 lw s2,32(sp)
+ 405ad4: 8fb1001c lw s1,28(sp)
+ 405ad8: 8fb00018 lw s0,24(sp)
+ 405adc: 03e00008 jr ra
+ 405ae0: 27bd0030 addiu sp,sp,48
+ 405ae4: 8f99811c lw t9,-32484(gp)
+ 405ae8: 00000000 nop
+ 405aec: 0320f809 jalr t9
+ 405af0: 00000000 nop
+ 405af4: 8fbc0010 lw gp,16(sp)
+ 405af8: 1000fff3 b 405ac8 <fwrite+0x88>
+ 405afc: 02201021 move v0,s1
+ 405b00: 8f9980a8 lw t9,-32600(gp)
+ 405b04: 00000000 nop
+ 405b08: 0320f809 jalr t9
+ 405b0c: 00000000 nop
+ 405b10: 8fbc0010 lw gp,16(sp)
+ 405b14: 1000ffde b 405a90 <fwrite+0x50>
+ 405b18: 02602021 move a0,s3
+
+00405b1c <fwrite_unlocked>:
+ 405b1c: 3c1c0fc0 lui gp,0xfc0
+ 405b20: 279c2734 addiu gp,gp,10036
+ 405b24: 0399e021 addu gp,gp,t9
+ 405b28: 27bdffd8 addiu sp,sp,-40
+ 405b2c: afbc0010 sw gp,16(sp)
+ 405b30: afb00018 sw s0,24(sp)
+ 405b34: 00a08021 move s0,a1
+ 405b38: afbf0020 sw ra,32(sp)
+ 405b3c: 00c02821 move a1,a2
+ 405b40: afbc001c sw gp,28(sp)
+ 405b44: 12000011 beqz s0,405b8c <fwrite_unlocked+0x70>
+ 405b48: 00e03021 move a2,a3
+ 405b4c: 00b00018 mult a1,s0
+ 405b50: 00002812 mflo a1
+ 405b54: 8f9982a4 lw t9,-32092(gp)
+ 405b58: 00000000 nop
+ 405b5c: 0320f809 jalr t9
+ 405b60: 00000000 nop
+ 405b64: 8fbc0010 lw gp,16(sp)
+ 405b68: 16000002 bnez s0,405b74 <fwrite_unlocked+0x58>
+ 405b6c: 00000000 nop
+ 405b70: 0007000d break 0x7
+ 405b74: 0050001b divu zero,v0,s0
+ 405b78: 00001012 mflo v0
+ 405b7c: 8fbf0020 lw ra,32(sp)
+ 405b80: 8fb00018 lw s0,24(sp)
+ 405b84: 03e00008 jr ra
+ 405b88: 27bd0028 addiu sp,sp,40
+ 405b8c: 1000fffb b 405b7c <fwrite_unlocked+0x60>
+ 405b90: 00001021 move v0,zero
+ ...
+
+00405ba0 <_stdio_fopen>:
+ 405ba0: 3c1c0fc0 lui gp,0xfc0
+ 405ba4: 279c26b0 addiu gp,gp,9904
+ 405ba8: 0399e021 addu gp,gp,t9
+ 405bac: 27bdffd0 addiu sp,sp,-48
+ 405bb0: afbc0010 sw gp,16(sp)
+ 405bb4: afb30024 sw s3,36(sp)
+ 405bb8: afb20020 sw s2,32(sp)
+ 405bbc: afb1001c sw s1,28(sp)
+ 405bc0: afb00018 sw s0,24(sp)
+ 405bc4: afbf002c sw ra,44(sp)
+ 405bc8: afbc0028 sw gp,40(sp)
+ 405bcc: 80a30000 lb v1,0(a1)
+ 405bd0: 24020072 li v0,114
+ 405bd4: 00809821 move s3,a0
+ 405bd8: 00c08821 move s1,a2
+ 405bdc: 00e09021 move s2,a3
+ 405be0: 1062002c beq v1,v0,405c94 <_stdio_fopen+0xf4>
+ 405be4: 00008021 move s0,zero
+ 405be8: 24020077 li v0,119
+ 405bec: 10620029 beq v1,v0,405c94 <_stdio_fopen+0xf4>
+ 405bf0: 24100301 li s0,769
+ 405bf4: 24020061 li v0,97
+ 405bf8: 10620026 beq v1,v0,405c94 <_stdio_fopen+0xf4>
+ 405bfc: 24100109 li s0,265
+ 405c00: 8f9980a0 lw t9,-32608(gp)
+ 405c04: 00000000 nop
+ 405c08: 0320f809 jalr t9
+ 405c0c: 00000000 nop
+ 405c10: 8fbc0010 lw gp,16(sp)
+ 405c14: 24030016 li v1,22
+ 405c18: 12200016 beqz s1,405c74 <_stdio_fopen+0xd4>
+ 405c1c: ac430000 sw v1,0(v0)
+ 405c20: 96220000 lhu v0,0(s1)
+ 405c24: 00000000 nop
+ 405c28: 30424000 andi v0,v0,0x4000
+ 405c2c: 10400007 beqz v0,405c4c <_stdio_fopen+0xac>
+ 405c30: 00000000 nop
+ 405c34: 8e24000c lw a0,12(s1)
+ 405c38: 8f998030 lw t9,-32720(gp)
+ 405c3c: 00000000 nop
+ 405c40: 0320f809 jalr t9
+ 405c44: 00000000 nop
+ 405c48: 8fbc0010 lw gp,16(sp)
+ 405c4c: 96220000 lhu v0,0(s1)
+ 405c50: 00000000 nop
+ 405c54: 30420040 andi v0,v0,0x40
+ 405c58: 10400006 beqz v0,405c74 <_stdio_fopen+0xd4>
+ 405c5c: 02202021 move a0,s1
+ 405c60: 8f998030 lw t9,-32720(gp)
+ 405c64: 00000000 nop
+ 405c68: 0320f809 jalr t9
+ 405c6c: 00000000 nop
+ 405c70: 8fbc0010 lw gp,16(sp)
+ 405c74: 00001021 move v0,zero
+ 405c78: 8fbf002c lw ra,44(sp)
+ 405c7c: 8fb30024 lw s3,36(sp)
+ 405c80: 8fb20020 lw s2,32(sp)
+ 405c84: 8fb1001c lw s1,28(sp)
+ 405c88: 8fb00018 lw s0,24(sp)
+ 405c8c: 03e00008 jr ra
+ 405c90: 27bd0030 addiu sp,sp,48
+ 405c94: 24a50001 addiu a1,a1,1
+ 405c98: 80a30000 lb v1,0(a1)
+ 405c9c: 24020062 li v0,98
+ 405ca0: 10620081 beq v1,v0,405ea8 <_stdio_fopen+0x308>
+ 405ca4: 00000000 nop
+ 405ca8: 80a30000 lb v1,0(a1)
+ 405cac: 2402002b li v0,43
+ 405cb0: 1062007a beq v1,v0,405e9c <_stdio_fopen+0x2fc>
+ 405cb4: 2402fffe li v0,-2
+ 405cb8: 1220005d beqz s1,405e30 <_stdio_fopen+0x290>
+ 405cbc: 24040054 li a0,84
+ 405cc0: 06400051 bltz s2,405e08 <_stdio_fopen+0x268>
+ 405cc4: 3203000b andi v1,s0,0xb
+ 405cc8: 24630001 addiu v1,v1,1
+ 405ccc: 26620001 addiu v0,s3,1
+ 405cd0: 00621024 and v0,v1,v0
+ 405cd4: 10430009 beq v0,v1,405cfc <_stdio_fopen+0x15c>
+ 405cd8: 00000000 nop
+ 405cdc: 8f9980a0 lw t9,-32608(gp)
+ 405ce0: 00000000 nop
+ 405ce4: 0320f809 jalr t9
+ 405ce8: 00000000 nop
+ 405cec: 8fbc0010 lw gp,16(sp)
+ 405cf0: 24030016 li v1,22
+ 405cf4: ac430000 sw v1,0(v0)
+ 405cf8: 2412ffff li s2,-1
+ 405cfc: ae320004 sw s2,4(s1)
+ 405d00: 8e240004 lw a0,4(s1)
+ 405d04: 00000000 nop
+ 405d08: 0480ffc5 bltz a0,405c20 <_stdio_fopen+0x80>
+ 405d0c: 00000000 nop
+ 405d10: 8f99822c lw t9,-32212(gp)
+ 405d14: 00000000 nop
+ 405d18: 0320f809 jalr t9
+ 405d1c: 00000000 nop
+ 405d20: 8fbc0010 lw gp,16(sp)
+ 405d24: 32030003 andi v1,s0,0x3
+ 405d28: 24630001 addiu v1,v1,1
+ 405d2c: 38630003 xori v1,v1,0x3
+ 405d30: 00031900 sll v1,v1,0x4
+ 405d34: 00021200 sll v0,v0,0x8
+ 405d38: 96240000 lhu a0,0(s1)
+ 405d3c: 00431025 or v0,v0,v1
+ 405d40: 32030008 andi v1,s0,0x8
+ 405d44: 10600002 beqz v1,405d50 <_stdio_fopen+0x1b0>
+ 405d48: 00823025 or a2,a0,v0
+ 405d4c: 34c60400 ori a2,a2,0x400
+ 405d50: 26220004 addiu v0,s1,4
+ 405d54: ae220024 sw v0,36(s1)
+ 405d58: 8f8280e4 lw v0,-32540(gp)
+ 405d5c: 8e23000c lw v1,12(s1)
+ 405d60: ae220028 sw v0,40(s1)
+ 405d64: 8f8280ac lw v0,-32596(gp)
+ 405d68: 00000000 nop
+ 405d6c: ae22002c sw v0,44(s1)
+ 405d70: 8f828220 lw v0,-32224(gp)
+ 405d74: a6260000 sh a2,0(s1)
+ 405d78: ae23001c sw v1,28(s1)
+ 405d7c: ae230018 sw v1,24(s1)
+ 405d80: ae230014 sw v1,20(s1)
+ 405d84: ae230020 sw v1,32(s1)
+ 405d88: 2624003c addiu a0,s1,60
+ 405d8c: ae220034 sw v0,52(s1)
+ 405d90: 8f908080 lw s0,-32640(gp)
+ 405d94: ae200030 sw zero,48(s1)
+ 405d98: ae200038 sw zero,56(s1)
+ 405d9c: 8f998128 lw t9,-32472(gp)
+ 405da0: 00000000 nop
+ 405da4: 0320f809 jalr t9
+ 405da8: 00000000 nop
+ 405dac: 8fbc0010 lw gp,16(sp)
+ 405db0: 02002021 move a0,s0
+ 405db4: 8f9980a8 lw t9,-32600(gp)
+ 405db8: 00000000 nop
+ 405dbc: 0320f809 jalr t9
+ 405dc0: 00000000 nop
+ 405dc4: 8fbc0010 lw gp,16(sp)
+ 405dc8: 00000000 nop
+ 405dcc: 8f8281b8 lw v0,-32328(gp)
+ 405dd0: 00000000 nop
+ 405dd4: 8c420000 lw v0,0(v0)
+ 405dd8: 02002021 move a0,s0
+ 405ddc: ae220008 sw v0,8(s1)
+ 405de0: 8f8181b8 lw at,-32328(gp)
+ 405de4: 00000000 nop
+ 405de8: ac310000 sw s1,0(at)
+ 405dec: 8f99811c lw t9,-32484(gp)
+ 405df0: 00000000 nop
+ 405df4: 0320f809 jalr t9
+ 405df8: 00000000 nop
+ 405dfc: 8fbc0010 lw gp,16(sp)
+ 405e00: 1000ff9d b 405c78 <_stdio_fopen+0xd8>
+ 405e04: 02201021 move v0,s1
+ 405e08: 02602021 move a0,s3
+ 405e0c: 02002821 move a1,s0
+ 405e10: 240601b6 li a2,438
+ 405e14: 8f998064 lw t9,-32668(gp)
+ 405e18: 00000000 nop
+ 405e1c: 0320f809 jalr t9
+ 405e20: 00000000 nop
+ 405e24: 8fbc0010 lw gp,16(sp)
+ 405e28: 1000ffb5 b 405d00 <_stdio_fopen+0x160>
+ 405e2c: ae220004 sw v0,4(s1)
+ 405e30: 8f998230 lw t9,-32208(gp)
+ 405e34: 00000000 nop
+ 405e38: 0320f809 jalr t9
+ 405e3c: 00000000 nop
+ 405e40: 8fbc0010 lw gp,16(sp)
+ 405e44: 00408821 move s1,v0
+ 405e48: 1220ff8b beqz s1,405c78 <_stdio_fopen+0xd8>
+ 405e4c: 24040100 li a0,256
+ 405e50: 24020040 li v0,64
+ 405e54: a6220000 sh v0,0(s1)
+ 405e58: 8f998230 lw t9,-32208(gp)
+ 405e5c: 00000000 nop
+ 405e60: 0320f809 jalr t9
+ 405e64: 00000000 nop
+ 405e68: 8fbc0010 lw gp,16(sp)
+ 405e6c: 00401821 move v1,v0
+ 405e70: 10600007 beqz v1,405e90 <_stdio_fopen+0x2f0>
+ 405e74: ae23000c sw v1,12(s1)
+ 405e78: 96220000 lhu v0,0(s1)
+ 405e7c: 24630100 addiu v1,v1,256
+ 405e80: 34424000 ori v0,v0,0x4000
+ 405e84: ae230010 sw v1,16(s1)
+ 405e88: 1000ff8d b 405cc0 <_stdio_fopen+0x120>
+ 405e8c: a6220000 sh v0,0(s1)
+ 405e90: ae200010 sw zero,16(s1)
+ 405e94: 1000ff8a b 405cc0 <_stdio_fopen+0x120>
+ 405e98: ae20000c sw zero,12(s1)
+ 405e9c: 02028024 and s0,s0,v0
+ 405ea0: 1000ff85 b 405cb8 <_stdio_fopen+0x118>
+ 405ea4: 36100002 ori s0,s0,0x2
+ 405ea8: 1000ff7f b 405ca8 <_stdio_fopen+0x108>
+ 405eac: 24a50001 addiu a1,a1,1
+ 405eb0: 3c1c0fc0 lui gp,0xfc0
+ 405eb4: 279c23a0 addiu gp,gp,9120
+ 405eb8: 0399e021 addu gp,gp,t9
+ 405ebc: 27bdffc8 addiu sp,sp,-56
+ 405ec0: afbc0010 sw gp,16(sp)
+ 405ec4: afb40028 sw s4,40(sp)
+ 405ec8: 00c0a021 move s4,a2
+ 405ecc: afb30024 sw s3,36(sp)
+ 405ed0: afb20020 sw s2,32(sp)
+ 405ed4: afb1001c sw s1,28(sp)
+ 405ed8: afbf0030 sw ra,48(sp)
+ 405edc: afbc002c sw gp,44(sp)
+ 405ee0: afb00018 sw s0,24(sp)
+ 405ee4: 00809821 move s3,a0
+ 405ee8: 00a09021 move s2,a1
+ 405eec: 02808821 move s1,s4
+ 405ef0: 12200018 beqz s1,405f54 <_stdio_fopen+0x3b4>
+ 405ef4: 02402821 move a1,s2
+ 405ef8: 06200021 bltz s1,405f80 <_stdio_fopen+0x3e0>
+ 405efc: 02208021 move s0,s1
+ 405f00: 8e62002c lw v0,44(s3)
+ 405f04: 00000000 nop
+ 405f08: 1040001b beqz v0,405f78 <_stdio_fopen+0x3d8>
+ 405f0c: 02003021 move a2,s0
+ 405f10: 8e640024 lw a0,36(s3)
+ 405f14: 0040c821 move t9,v0
+ 405f18: 0320f809 jalr t9
+ 405f1c: 00000000 nop
+ 405f20: 8fbc0010 lw gp,16(sp)
+ 405f24: 04400007 bltz v0,405f44 <_stdio_fopen+0x3a4>
+ 405f28: 0202182a slt v1,s0,v0
+ 405f2c: 10600002 beqz v1,405f38 <_stdio_fopen+0x398>
+ 405f30: 00000000 nop
+ 405f34: 02001021 move v0,s0
+ 405f38: 02429021 addu s2,s2,v0
+ 405f3c: 1000ffec b 405ef0 <_stdio_fopen+0x350>
+ 405f40: 02228823 subu s1,s1,v0
+ 405f44: 96620000 lhu v0,0(s3)
+ 405f48: 00000000 nop
+ 405f4c: 34420008 ori v0,v0,0x8
+ 405f50: a6620000 sh v0,0(s3)
+ 405f54: 02911023 subu v0,s4,s1
+ 405f58: 8fbf0030 lw ra,48(sp)
+ 405f5c: 8fb40028 lw s4,40(sp)
+ 405f60: 8fb30024 lw s3,36(sp)
+ 405f64: 8fb20020 lw s2,32(sp)
+ 405f68: 8fb1001c lw s1,28(sp)
+ 405f6c: 8fb00018 lw s0,24(sp)
+ 405f70: 03e00008 jr ra
+ 405f74: 27bd0038 addiu sp,sp,56
+ 405f78: 1000ffea b 405f24 <_stdio_fopen+0x384>
+ 405f7c: 2402ffff li v0,-1
+ 405f80: 3c107fff lui s0,0x7fff
+ 405f84: 1000ffde b 405f00 <_stdio_fopen+0x360>
+ 405f88: 3610ffff ori s0,s0,0xffff
+
+00405f8c <_stdio_fwrite>:
+ 405f8c: 3c1c0fc0 lui gp,0xfc0
+ 405f90: 279c22c4 addiu gp,gp,8900
+ 405f94: 0399e021 addu gp,gp,t9
+ 405f98: 27bdffc8 addiu sp,sp,-56
+ 405f9c: afbc0010 sw gp,16(sp)
+ 405fa0: afb40028 sw s4,40(sp)
+ 405fa4: afb30024 sw s3,36(sp)
+ 405fa8: afb1001c sw s1,28(sp)
+ 405fac: afbf0034 sw ra,52(sp)
+ 405fb0: afbc0030 sw gp,48(sp)
+ 405fb4: afb5002c sw s5,44(sp)
+ 405fb8: afb20020 sw s2,32(sp)
+ 405fbc: afb00018 sw s0,24(sp)
+ 405fc0: 00c08821 move s1,a2
+ 405fc4: 96260000 lhu a2,0(s1)
+ 405fc8: 00809821 move s3,a0
+ 405fcc: 30c20020 andi v0,a2,0x20
+ 405fd0: 10400015 beqz v0,406028 <_stdio_fwrite+0x9c>
+ 405fd4: 00a0a021 move s4,a1
+ 405fd8: 34c20008 ori v0,a2,0x8
+ 405fdc: a6220000 sh v0,0(s1)
+ 405fe0: 8f9980a0 lw t9,-32608(gp)
+ 405fe4: 00000000 nop
+ 405fe8: 0320f809 jalr t9
+ 405fec: 00000000 nop
+ 405ff0: 8fbc0010 lw gp,16(sp)
+ 405ff4: 00402021 move a0,v0
+ 405ff8: 24030009 li v1,9
+ 405ffc: 00001021 move v0,zero
+ 406000: ac830000 sw v1,0(a0)
+ 406004: 8fbf0034 lw ra,52(sp)
+ 406008: 8fb5002c lw s5,44(sp)
+ 40600c: 8fb40028 lw s4,40(sp)
+ 406010: 8fb30024 lw s3,36(sp)
+ 406014: 8fb20020 lw s2,32(sp)
+ 406018: 8fb1001c lw s1,28(sp)
+ 40601c: 8fb00018 lw s0,24(sp)
+ 406020: 03e00008 jr ra
+ 406024: 27bd0038 addiu sp,sp,56
+ 406028: 30c21000 andi v0,a2,0x1000
+ 40602c: 10400020 beqz v0,4060b0 <_stdio_fwrite+0x124>
+ 406030: 00000000 nop
+ 406034: 8e220014 lw v0,20(s1)
+ 406038: 8e230018 lw v1,24(s1)
+ 40603c: 00000000 nop
+ 406040: 0043102b sltu v0,v0,v1
+ 406044: 14400003 bnez v0,406054 <_stdio_fwrite+0xc8>
+ 406048: 30c20003 andi v0,a2,0x3
+ 40604c: 10400013 beqz v0,40609c <_stdio_fwrite+0x110>
+ 406050: 00000000 nop
+ 406054: 30c60400 andi a2,a2,0x400
+ 406058: 2cc60001 sltiu a2,a2,1
+ 40605c: 24020002 li v0,2
+ 406060: 00463023 subu a2,v0,a2
+ 406064: 02202021 move a0,s1
+ 406068: 00002821 move a1,zero
+ 40606c: 8f9981a8 lw t9,-32344(gp)
+ 406070: 00000000 nop
+ 406074: 0320f809 jalr t9
+ 406078: 00000000 nop
+ 40607c: 8fbc0010 lw gp,16(sp)
+ 406080: 10400006 beqz v0,40609c <_stdio_fwrite+0x110>
+ 406084: 00001021 move v0,zero
+ 406088: 96230000 lhu v1,0(s1)
+ 40608c: 00000000 nop
+ 406090: 34630008 ori v1,v1,0x8
+ 406094: 1000ffdb b 406004 <_stdio_fwrite+0x78>
+ 406098: a6230000 sh v1,0(s1)
+ 40609c: 8e22000c lw v0,12(s1)
+ 4060a0: 00000000 nop
+ 4060a4: ae22001c sw v0,28(s1)
+ 4060a8: ae220018 sw v0,24(s1)
+ 4060ac: ae220014 sw v0,20(s1)
+ 4060b0: 96220000 lhu v0,0(s1)
+ 4060b4: 8e23000c lw v1,12(s1)
+ 4060b8: 3042cfff andi v0,v0,0xcfff
+ 4060bc: ae230020 sw v1,32(s1)
+ 4060c0: a6220000 sh v0,0(s1)
+ 4060c4: 0260a821 move s5,s3
+ 4060c8: 1260001b beqz s3,406138 <_stdio_fwrite+0x1ac>
+ 4060cc: 24050001 li a1,1
+ 4060d0: 8e240014 lw a0,20(s1)
+ 4060d4: 8e22000c lw v0,12(s1)
+ 4060d8: 00000000 nop
+ 4060dc: 10820060 beq a0,v0,406260 <_stdio_fwrite+0x2d4>
+ 4060e0: 00000000 nop
+ 4060e4: 8e220010 lw v0,16(s1)
+ 4060e8: 00000000 nop
+ 4060ec: 00442023 subu a0,v0,a0
+ 4060f0: 0284102b sltu v0,s4,a0
+ 4060f4: 10400002 beqz v0,406100 <_stdio_fwrite+0x174>
+ 4060f8: 02609021 move s2,s3
+ 4060fc: 02802021 move a0,s4
+ 406100: 10800009 beqz a0,406128 <_stdio_fwrite+0x19c>
+ 406104: 0284a023 subu s4,s4,a0
+ 406108: 8e220014 lw v0,20(s1)
+ 40610c: 92630000 lbu v1,0(s3)
+ 406110: 2484ffff addiu a0,a0,-1
+ 406114: a0430000 sb v1,0(v0)
+ 406118: 24420001 addiu v0,v0,1
+ 40611c: ae220014 sw v0,20(s1)
+ 406120: 1480fff9 bnez a0,406108 <_stdio_fwrite+0x17c>
+ 406124: 26730001 addiu s3,s3,1
+ 406128: 10a00040 beqz a1,40622c <_stdio_fwrite+0x2a0>
+ 40612c: 00000000 nop
+ 406130: 12800030 beqz s4,4061f4 <_stdio_fwrite+0x268>
+ 406134: 00000000 nop
+ 406138: 8e23000c lw v1,12(s1)
+ 40613c: 8e220014 lw v0,20(s1)
+ 406140: 8e240004 lw a0,4(s1)
+ 406144: 00438023 subu s0,v0,v1
+ 406148: 2402fffe li v0,-2
+ 40614c: 1082001f beq a0,v0,4061cc <_stdio_fwrite+0x240>
+ 406150: 00609021 move s2,v1
+ 406154: 02402821 move a1,s2
+ 406158: 02003021 move a2,s0
+ 40615c: 02202021 move a0,s1
+ 406160: 8f998020 lw t9,-32736(gp)
+ 406164: 00000000 nop
+ 406168: 27395eb0 addiu t9,t9,24240
+ 40616c: 00000000 nop
+ 406170: 0320f809 jalr t9
+ 406174: 00000000 nop
+ 406178: 8fbc0010 lw gp,16(sp)
+ 40617c: 00402821 move a1,v0
+ 406180: 8e22000c lw v0,12(s1)
+ 406184: 02058023 subu s0,s0,a1
+ 406188: ae220014 sw v0,20(s1)
+ 40618c: 12000009 beqz s0,4061b4 <_stdio_fwrite+0x228>
+ 406190: 02459021 addu s2,s2,a1
+ 406194: 8e220014 lw v0,20(s1)
+ 406198: 92430000 lbu v1,0(s2)
+ 40619c: 2610ffff addiu s0,s0,-1
+ 4061a0: a0430000 sb v1,0(v0)
+ 4061a4: 24420001 addiu v0,v0,1
+ 4061a8: ae220014 sw v0,20(s1)
+ 4061ac: 1600fff9 bnez s0,406194 <_stdio_fwrite+0x208>
+ 4061b0: 26520001 addiu s2,s2,1
+ 4061b4: 1660ffc6 bnez s3,4060d0 <_stdio_fwrite+0x144>
+ 4061b8: 00000000 nop
+ 4061bc: 8e23000c lw v1,12(s1)
+ 4061c0: 8e220014 lw v0,20(s1)
+ 4061c4: 1000ff8f b 406004 <_stdio_fwrite+0x78>
+ 4061c8: 00431023 subu v0,v0,v1
+ 4061cc: 96220000 lhu v0,0(s1)
+ 4061d0: 00000000 nop
+ 4061d4: 34422000 ori v0,v0,0x2000
+ 4061d8: 12600004 beqz s3,4061ec <_stdio_fwrite+0x260>
+ 4061dc: a6220000 sh v0,0(s1)
+ 4061e0: 02751023 subu v0,s3,s5
+ 4061e4: 1000ff87 b 406004 <_stdio_fwrite+0x78>
+ 4061e8: 00541021 addu v0,v0,s4
+ 4061ec: 1000ff85 b 406004 <_stdio_fwrite+0x78>
+ 4061f0: 00001021 move v0,zero
+ 4061f4: 96220000 lhu v0,0(s1)
+ 4061f8: 00000000 nop
+ 4061fc: 30420100 andi v0,v0,0x100
+ 406200: 1040000a beqz v0,40622c <_stdio_fwrite+0x2a0>
+ 406204: 0253102b sltu v0,s2,s3
+ 406208: 10400008 beqz v0,40622c <_stdio_fwrite+0x2a0>
+ 40620c: 00000000 nop
+ 406210: 92430000 lbu v1,0(s2)
+ 406214: 2402000a li v0,10
+ 406218: 26520001 addiu s2,s2,1
+ 40621c: 1062ffc6 beq v1,v0,406138 <_stdio_fwrite+0x1ac>
+ 406220: 0253202b sltu a0,s2,s3
+ 406224: 1480fffa bnez a0,406210 <_stdio_fwrite+0x284>
+ 406228: 00000000 nop
+ 40622c: 96220000 lhu v0,0(s1)
+ 406230: 00000000 nop
+ 406234: 30420b08 andi v0,v0,0xb08
+ 406238: 10400006 beqz v0,406254 <_stdio_fwrite+0x2c8>
+ 40623c: 00000000 nop
+ 406240: 96230000 lhu v1,0(s1)
+ 406244: 02751023 subu v0,s3,s5
+ 406248: 34632000 ori v1,v1,0x2000
+ 40624c: 1000ff6d b 406004 <_stdio_fwrite+0x78>
+ 406250: a6230000 sh v1,0(s1)
+ 406254: 8e220010 lw v0,16(s1)
+ 406258: 1000fff9 b 406240 <_stdio_fwrite+0x2b4>
+ 40625c: ae220020 sw v0,32(s1)
+ 406260: 8e220010 lw v0,16(s1)
+ 406264: 00000000 nop
+ 406268: 00441023 subu v0,v0,a0
+ 40626c: 0282102b sltu v0,s4,v0
+ 406270: 1440ff9c bnez v0,4060e4 <_stdio_fwrite+0x158>
+ 406274: 2402fffe li v0,-2
+ 406278: 8e230004 lw v1,4(s1)
+ 40627c: 00000000 nop
+ 406280: 1062ff98 beq v1,v0,4060e4 <_stdio_fwrite+0x158>
+ 406284: 02803021 move a2,s4
+ 406288: 02602821 move a1,s3
+ 40628c: 02202021 move a0,s1
+ 406290: 8f998020 lw t9,-32736(gp)
+ 406294: 00000000 nop
+ 406298: 27395eb0 addiu t9,t9,24240
+ 40629c: 00000000 nop
+ 4062a0: 0320f809 jalr t9
+ 4062a4: 00000000 nop
+ 4062a8: 8fbc0010 lw gp,16(sp)
+ 4062ac: 1000ffdf b 40622c <_stdio_fwrite+0x2a0>
+ 4062b0: 02629821 addu s3,s3,v0
+ ...
+
+004062c0 <_cs_read>:
+ 4062c0: 3c1c0fc0 lui gp,0xfc0
+ 4062c4: 279c1f90 addiu gp,gp,8080
+ 4062c8: 0399e021 addu gp,gp,t9
+ 4062cc: 27bdffe0 addiu sp,sp,-32
+ 4062d0: afbc0010 sw gp,16(sp)
+ 4062d4: afbf001c sw ra,28(sp)
+ 4062d8: afbc0018 sw gp,24(sp)
+ 4062dc: 8c840000 lw a0,0(a0)
+ 4062e0: 8f998198 lw t9,-32360(gp)
+ 4062e4: 00000000 nop
+ 4062e8: 0320f809 jalr t9
+ 4062ec: 00000000 nop
+ 4062f0: 8fbc0010 lw gp,16(sp)
+ 4062f4: 8fbf001c lw ra,28(sp)
+ 4062f8: 00000000 nop
+ 4062fc: 03e00008 jr ra
+ 406300: 27bd0020 addiu sp,sp,32
+
+00406304 <_cs_write>:
+ 406304: 3c1c0fc0 lui gp,0xfc0
+ 406308: 279c1f4c addiu gp,gp,8012
+ 40630c: 0399e021 addu gp,gp,t9
+ 406310: 27bdffe0 addiu sp,sp,-32
+ 406314: afbc0010 sw gp,16(sp)
+ 406318: afbf001c sw ra,28(sp)
+ 40631c: afbc0018 sw gp,24(sp)
+ 406320: 8c840000 lw a0,0(a0)
+ 406324: 8f9981c8 lw t9,-32312(gp)
+ 406328: 00000000 nop
+ 40632c: 0320f809 jalr t9
+ 406330: 00000000 nop
+ 406334: 8fbc0010 lw gp,16(sp)
+ 406338: 8fbf001c lw ra,28(sp)
+ 40633c: 00000000 nop
+ 406340: 03e00008 jr ra
+ 406344: 27bd0020 addiu sp,sp,32
+
+00406348 <_cs_close>:
+ 406348: 3c1c0fc0 lui gp,0xfc0
+ 40634c: 279c1f08 addiu gp,gp,7944
+ 406350: 0399e021 addu gp,gp,t9
+ 406354: 27bdffe0 addiu sp,sp,-32
+ 406358: afbc0010 sw gp,16(sp)
+ 40635c: afbf001c sw ra,28(sp)
+ 406360: afbc0018 sw gp,24(sp)
+ 406364: 8c840000 lw a0,0(a0)
+ 406368: 8f998040 lw t9,-32704(gp)
+ 40636c: 00000000 nop
+ 406370: 0320f809 jalr t9
+ 406374: 00000000 nop
+ 406378: 8fbc0010 lw gp,16(sp)
+ 40637c: 8fbf001c lw ra,28(sp)
+ 406380: 00000000 nop
+ 406384: 03e00008 jr ra
+ 406388: 27bd0020 addiu sp,sp,32
+
+0040638c <__stdio_init_mutex>:
+ 40638c: 3c1c0fc0 lui gp,0xfc0
+ 406390: 279c1ec4 addiu gp,gp,7876
+ 406394: 0399e021 addu gp,gp,t9
+ 406398: 27bdffe0 addiu sp,sp,-32
+ 40639c: afbc0010 sw gp,16(sp)
+ 4063a0: 8f858018 lw a1,-32744(gp)
+ 4063a4: 00000000 nop
+ 4063a8: 24a50580 addiu a1,a1,1408
+ 4063ac: 24060018 li a2,24
+ 4063b0: afbf001c sw ra,28(sp)
+ 4063b4: afbc0018 sw gp,24(sp)
+ 4063b8: 8f998254 lw t9,-32172(gp)
+ 4063bc: 00000000 nop
+ 4063c0: 0320f809 jalr t9
+ 4063c4: 00000000 nop
+ 4063c8: 8fbc0010 lw gp,16(sp)
+ 4063cc: 8fbf001c lw ra,28(sp)
+ 4063d0: 00000000 nop
+ 4063d4: 03e00008 jr ra
+ 4063d8: 27bd0020 addiu sp,sp,32
+
+004063dc <_stdio_term>:
+ 4063dc: 3c1c0fc0 lui gp,0xfc0
+ 4063e0: 279c1e74 addiu gp,gp,7796
+ 4063e4: 0399e021 addu gp,gp,t9
+ 4063e8: 27bdffd8 addiu sp,sp,-40
+ 4063ec: afbc0010 sw gp,16(sp)
+ 4063f0: 8f848080 lw a0,-32640(gp)
+ 4063f4: afb00018 sw s0,24(sp)
+ 4063f8: afbf0020 sw ra,32(sp)
+ 4063fc: afbc001c sw gp,28(sp)
+ 406400: 8f998128 lw t9,-32472(gp)
+ 406404: 00000000 nop
+ 406408: 0320f809 jalr t9
+ 40640c: 00000000 nop
+ 406410: 8fbc0010 lw gp,16(sp)
+ 406414: 00000000 nop
+ 406418: 8f9081b8 lw s0,-32328(gp)
+ 40641c: 00000000 nop
+ 406420: 8e100000 lw s0,0(s0)
+ 406424: 00000000 nop
+ 406428: 1200000e beqz s0,406464 <_stdio_term+0x88>
+ 40642c: 00002021 move a0,zero
+ 406430: 24020001 li v0,1
+ 406434: 2604003c addiu a0,s0,60
+ 406438: ae020038 sw v0,56(s0)
+ 40643c: 8f998128 lw t9,-32472(gp)
+ 406440: 00000000 nop
+ 406444: 0320f809 jalr t9
+ 406448: 00000000 nop
+ 40644c: 8fbc0010 lw gp,16(sp)
+ 406450: 8e100008 lw s0,8(s0)
+ 406454: 00000000 nop
+ 406458: 1600fff6 bnez s0,406434 <_stdio_term+0x58>
+ 40645c: 24020001 li v0,1
+ 406460: 00002021 move a0,zero
+ 406464: 8f9980d8 lw t9,-32552(gp)
+ 406468: 00000000 nop
+ 40646c: 0320f809 jalr t9
+ 406470: 00000000 nop
+ 406474: 8fbc0010 lw gp,16(sp)
+ 406478: 00000000 nop
+ 40647c: 8f9081b8 lw s0,-32328(gp)
+ 406480: 00000000 nop
+ 406484: 8e100000 lw s0,0(s0)
+ 406488: 00000000 nop
+ 40648c: 12000012 beqz s0,4064d8 <_stdio_term+0xfc>
+ 406490: 00000000 nop
+ 406494: 8e040024 lw a0,36(s0)
+ 406498: 26020004 addiu v0,s0,4
+ 40649c: 1082000a beq a0,v0,4064c8 <_stdio_term+0xec>
+ 4064a0: 00000000 nop
+ 4064a4: 8e020034 lw v0,52(s0)
+ 4064a8: 00000000 nop
+ 4064ac: 10400005 beqz v0,4064c4 <_stdio_term+0xe8>
+ 4064b0: 00000000 nop
+ 4064b4: 0040c821 move t9,v0
+ 4064b8: 0320f809 jalr t9
+ 4064bc: 00000000 nop
+ 4064c0: 8fbc0010 lw gp,16(sp)
+ 4064c4: ae000024 sw zero,36(s0)
+ 4064c8: 8e100008 lw s0,8(s0)
+ 4064cc: 00000000 nop
+ 4064d0: 1600fff0 bnez s0,406494 <_stdio_term+0xb8>
+ 4064d4: 00000000 nop
+ 4064d8: 8fbf0020 lw ra,32(sp)
+ 4064dc: 8fb00018 lw s0,24(sp)
+ 4064e0: 03e00008 jr ra
+ 4064e4: 27bd0028 addiu sp,sp,40
+
+004064e8 <_stdio_init>:
+ 4064e8: 3c1c0fc0 lui gp,0xfc0
+ 4064ec: 279c1d68 addiu gp,gp,7528
+ 4064f0: 0399e021 addu gp,gp,t9
+ 4064f4: 27bdffd8 addiu sp,sp,-40
+ 4064f8: afbc0010 sw gp,16(sp)
+ 4064fc: 00002021 move a0,zero
+ 406500: afbf0024 sw ra,36(sp)
+ 406504: afb1001c sw s1,28(sp)
+ 406508: afb00018 sw s0,24(sp)
+ 40650c: 8f91801c lw s1,-32740(gp)
+ 406510: 00000000 nop
+ 406514: 26310060 addiu s1,s1,96
+ 406518: afbc0020 sw gp,32(sp)
+ 40651c: 24100001 li s0,1
+ 406520: 8f99822c lw t9,-32212(gp)
+ 406524: 00000000 nop
+ 406528: 0320f809 jalr t9
+ 40652c: 00000000 nop
+ 406530: 8fbc0010 lw gp,16(sp)
+ 406534: 02021023 subu v0,s0,v0
+ 406538: 96230000 lhu v1,0(s1)
+ 40653c: 00021200 sll v0,v0,0x8
+ 406540: 00621826 xor v1,v1,v0
+ 406544: 24040001 li a0,1
+ 406548: a6230000 sh v1,0(s1)
+ 40654c: 8f99822c lw t9,-32212(gp)
+ 406550: 00000000 nop
+ 406554: 0320f809 jalr t9
+ 406558: 00000000 nop
+ 40655c: 8fbc0010 lw gp,16(sp)
+ 406560: 02028023 subu s0,s0,v0
+ 406564: 96220054 lhu v0,84(s1)
+ 406568: 00108200 sll s0,s0,0x8
+ 40656c: 00501026 xor v0,v0,s0
+ 406570: a6220054 sh v0,84(s1)
+ 406574: 8fbf0024 lw ra,36(sp)
+ 406578: 8fb1001c lw s1,28(sp)
+ 40657c: 8fb00018 lw s0,24(sp)
+ 406580: 03e00008 jr ra
+ 406584: 27bd0028 addiu sp,sp,40
+ ...
+
+00406590 <fprintf>:
+ 406590: 3c1c0fc0 lui gp,0xfc0
+ 406594: 279c1cc0 addiu gp,gp,7360
+ 406598: 0399e021 addu gp,gp,t9
+ 40659c: 27bdffe0 addiu sp,sp,-32
+ 4065a0: afbc0010 sw gp,16(sp)
+ 4065a4: afa60028 sw a2,40(sp)
+ 4065a8: 27a60028 addiu a2,sp,40
+ 4065ac: afbf001c sw ra,28(sp)
+ 4065b0: afa50024 sw a1,36(sp)
+ 4065b4: afa7002c sw a3,44(sp)
+ 4065b8: afbc0018 sw gp,24(sp)
+ 4065bc: 8f99803c lw t9,-32708(gp)
+ 4065c0: 00000000 nop
+ 4065c4: 0320f809 jalr t9
+ 4065c8: 00000000 nop
+ 4065cc: 8fbc0010 lw gp,16(sp)
+ 4065d0: 8fbf001c lw ra,28(sp)
+ 4065d4: 00000000 nop
+ 4065d8: 03e00008 jr ra
+ 4065dc: 27bd0020 addiu sp,sp,32
+
+004065e0 <printf>:
+ 4065e0: 3c1c0fc0 lui gp,0xfc0
+ 4065e4: 279c1c70 addiu gp,gp,7280
+ 4065e8: 0399e021 addu gp,gp,t9
+ 4065ec: 27bdffe0 addiu sp,sp,-32
+ 4065f0: afbc0010 sw gp,16(sp)
+ 4065f4: afa40020 sw a0,32(sp)
+ 4065f8: afa50024 sw a1,36(sp)
+ 4065fc: 00802821 move a1,a0
+ 406600: 8f8482ac lw a0,-32084(gp)
+ 406604: 00000000 nop
+ 406608: 8c840000 lw a0,0(a0)
+ 40660c: afa60028 sw a2,40(sp)
+ 406610: 27a60024 addiu a2,sp,36
+ 406614: afbf001c sw ra,28(sp)
+ 406618: afa7002c sw a3,44(sp)
+ 40661c: afbc0018 sw gp,24(sp)
+ 406620: 8f99803c lw t9,-32708(gp)
+ 406624: 00000000 nop
+ 406628: 0320f809 jalr t9
+ 40662c: 00000000 nop
+ 406630: 8fbc0010 lw gp,16(sp)
+ 406634: 8fbf001c lw ra,28(sp)
+ 406638: 00000000 nop
+ 40663c: 03e00008 jr ra
+ 406640: 27bd0020 addiu sp,sp,32
+ ...
+
+00406650 <sprintf>:
+ 406650: 3c1c0fc0 lui gp,0xfc0
+ 406654: 279c1c00 addiu gp,gp,7168
+ 406658: 0399e021 addu gp,gp,t9
+ 40665c: 27bdffe0 addiu sp,sp,-32
+ 406660: afbc0010 sw gp,16(sp)
+ 406664: afa50024 sw a1,36(sp)
+ 406668: afa60028 sw a2,40(sp)
+ 40666c: afa7002c sw a3,44(sp)
+ 406670: 00a03021 move a2,a1
+ 406674: 27a70028 addiu a3,sp,40
+ 406678: 2405ffff li a1,-1
+ 40667c: afbf001c sw ra,28(sp)
+ 406680: afbc0018 sw gp,24(sp)
+ 406684: 8f998228 lw t9,-32216(gp)
+ 406688: 00000000 nop
+ 40668c: 0320f809 jalr t9
+ 406690: 00000000 nop
+ 406694: 8fbc0010 lw gp,16(sp)
+ 406698: 8fbf001c lw ra,28(sp)
+ 40669c: 00000000 nop
+ 4066a0: 03e00008 jr ra
+ 4066a4: 27bd0020 addiu sp,sp,32
+ ...
+
+004066b0 <vfprintf>:
+ 4066b0: 3c1c0fc0 lui gp,0xfc0
+ 4066b4: 279c1ba0 addiu gp,gp,7072
+ 4066b8: 0399e021 addu gp,gp,t9
+ 4066bc: 27bdff20 addiu sp,sp,-224
+ 4066c0: afbc0010 sw gp,16(sp)
+ 4066c4: afb300d4 sw s3,212(sp)
+ 4066c8: afb200d0 sw s2,208(sp)
+ 4066cc: afb000c8 sw s0,200(sp)
+ 4066d0: afbf00dc sw ra,220(sp)
+ 4066d4: afbc00d8 sw gp,216(sp)
+ 4066d8: afb100cc sw s1,204(sp)
+ 4066dc: 00809021 move s2,a0
+ 4066e0: 8e420038 lw v0,56(s2)
+ 4066e4: 00a08021 move s0,a1
+ 4066e8: 10400069 beqz v0,406890 <vfprintf+0x1e0>
+ 4066ec: 00c09821 move s3,a2
+ 4066f0: 27a40018 addiu a0,sp,24
+ 4066f4: 02002821 move a1,s0
+ 4066f8: afa000c0 sw zero,192(sp)
+ 4066fc: 8f998244 lw t9,-32188(gp)
+ 406700: 00000000 nop
+ 406704: 0320f809 jalr t9
+ 406708: 00000000 nop
+ 40670c: 8fbc0010 lw gp,16(sp)
+ 406710: 0440004f bltz v0,406850 <vfprintf+0x1a0>
+ 406714: 02008821 move s1,s0
+ 406718: 02602821 move a1,s3
+ 40671c: 27a40018 addiu a0,sp,24
+ 406720: 8f9980b4 lw t9,-32588(gp)
+ 406724: 00000000 nop
+ 406728: 0320f809 jalr t9
+ 40672c: 00000000 nop
+ 406730: 8fbc0010 lw gp,16(sp)
+ 406734: 10000002 b 406740 <vfprintf+0x90>
+ 406738: 00000000 nop
+ 40673c: 26100001 addiu s0,s0,1
+ 406740: 82030000 lb v1,0(s0)
+ 406744: 00000000 nop
+ 406748: 10600003 beqz v1,406758 <vfprintf+0xa8>
+ 40674c: 24020025 li v0,37
+ 406750: 1462fffa bne v1,v0,40673c <vfprintf+0x8c>
+ 406754: 00000000 nop
+ 406758: 1211000f beq s0,s1,406798 <vfprintf+0xe8>
+ 40675c: 02112823 subu a1,s0,s1
+ 406760: 02202021 move a0,s1
+ 406764: 02403021 move a2,s2
+ 406768: 8f9982a4 lw t9,-32092(gp)
+ 40676c: 00000000 nop
+ 406770: 0320f809 jalr t9
+ 406774: 00000000 nop
+ 406778: 8fbc0010 lw gp,16(sp)
+ 40677c: 00401821 move v1,v0
+ 406780: 0460001f bltz v1,406800 <vfprintf+0x150>
+ 406784: 2402ffff li v0,-1
+ 406788: 8fa200c0 lw v0,192(sp)
+ 40678c: 00000000 nop
+ 406790: 00431021 addu v0,v0,v1
+ 406794: afa200c0 sw v0,192(sp)
+ 406798: 82020000 lb v0,0(s0)
+ 40679c: 00000000 nop
+ 4067a0: 10400018 beqz v0,406804 <vfprintf+0x154>
+ 4067a4: 24020025 li v0,37
+ 4067a8: 82030001 lb v1,1(s0)
+ 4067ac: 00000000 nop
+ 4067b0: 14620004 bne v1,v0,4067c4 <vfprintf+0x114>
+ 4067b4: 02402021 move a0,s2
+ 4067b8: 26100001 addiu s0,s0,1
+ 4067bc: 1000ffdf b 40673c <vfprintf+0x8c>
+ 4067c0: 02008821 move s1,s0
+ 4067c4: 26100001 addiu s0,s0,1
+ 4067c8: 27a50018 addiu a1,sp,24
+ 4067cc: 27a600c0 addiu a2,sp,192
+ 4067d0: afb00018 sw s0,24(sp)
+ 4067d4: 8f99808c lw t9,-32628(gp)
+ 4067d8: 00000000 nop
+ 4067dc: 0320f809 jalr t9
+ 4067e0: 00000000 nop
+ 4067e4: 8fbc0010 lw gp,16(sp)
+ 4067e8: 00401821 move v1,v0
+ 4067ec: 04600004 bltz v1,406800 <vfprintf+0x150>
+ 4067f0: 2402ffff li v0,-1
+ 4067f4: 8fb00018 lw s0,24(sp)
+ 4067f8: 1000ffd1 b 406740 <vfprintf+0x90>
+ 4067fc: 02008821 move s1,s0
+ 406800: afa200c0 sw v0,192(sp)
+ 406804: 8e420038 lw v0,56(s2)
+ 406808: 00000000 nop
+ 40680c: 10400009 beqz v0,406834 <vfprintf+0x184>
+ 406810: 2644003c addiu a0,s2,60
+ 406814: 8fa200c0 lw v0,192(sp)
+ 406818: 8fbf00dc lw ra,220(sp)
+ 40681c: 8fb300d4 lw s3,212(sp)
+ 406820: 8fb200d0 lw s2,208(sp)
+ 406824: 8fb100cc lw s1,204(sp)
+ 406828: 8fb000c8 lw s0,200(sp)
+ 40682c: 03e00008 jr ra
+ 406830: 27bd00e0 addiu sp,sp,224
+ 406834: 8f99811c lw t9,-32484(gp)
+ 406838: 00000000 nop
+ 40683c: 0320f809 jalr t9
+ 406840: 00000000 nop
+ 406844: 8fbc0010 lw gp,16(sp)
+ 406848: 1000fff2 b 406814 <vfprintf+0x164>
+ 40684c: 00000000 nop
+ 406850: 02002021 move a0,s0
+ 406854: 8f998068 lw t9,-32664(gp)
+ 406858: 00000000 nop
+ 40685c: 0320f809 jalr t9
+ 406860: 00000000 nop
+ 406864: 8fbc0010 lw gp,16(sp)
+ 406868: 00402821 move a1,v0
+ 40686c: 02002021 move a0,s0
+ 406870: 02403021 move a2,s2
+ 406874: 8f9982a4 lw t9,-32092(gp)
+ 406878: 00000000 nop
+ 40687c: 0320f809 jalr t9
+ 406880: 00000000 nop
+ 406884: 8fbc0010 lw gp,16(sp)
+ 406888: 1000ffdd b 406800 <vfprintf+0x150>
+ 40688c: 2402ffff li v0,-1
+ 406890: 2644003c addiu a0,s2,60
+ 406894: 8f9980a8 lw t9,-32600(gp)
+ 406898: 00000000 nop
+ 40689c: 0320f809 jalr t9
+ 4068a0: 00000000 nop
+ 4068a4: 8fbc0010 lw gp,16(sp)
+ 4068a8: 1000ff92 b 4066f4 <vfprintf+0x44>
+ 4068ac: 27a40018 addiu a0,sp,24
+
+004068b0 <sscanf>:
+ 4068b0: 3c1c0fc0 lui gp,0xfc0
+ 4068b4: 279c19a0 addiu gp,gp,6560
+ 4068b8: 0399e021 addu gp,gp,t9
+ 4068bc: 27bdffe0 addiu sp,sp,-32
+ 4068c0: afbc0010 sw gp,16(sp)
+ 4068c4: afa60028 sw a2,40(sp)
+ 4068c8: 27a60028 addiu a2,sp,40
+ 4068cc: afbf001c sw ra,28(sp)
+ 4068d0: afa50024 sw a1,36(sp)
+ 4068d4: afa7002c sw a3,44(sp)
+ 4068d8: afbc0018 sw gp,24(sp)
+ 4068dc: 8f99826c lw t9,-32148(gp)
+ 4068e0: 00000000 nop
+ 4068e4: 0320f809 jalr t9
+ 4068e8: 00000000 nop
+ 4068ec: 8fbc0010 lw gp,16(sp)
+ 4068f0: 8fbf001c lw ra,28(sp)
+ 4068f4: 00000000 nop
+ 4068f8: 03e00008 jr ra
+ 4068fc: 27bd0020 addiu sp,sp,32
+
+00406900 <vsscanf>:
+ 406900: 3c1c0fc0 lui gp,0xfc0
+ 406904: 279c1950 addiu gp,gp,6480
+ 406908: 0399e021 addu gp,gp,t9
+ 40690c: 27bdff80 addiu sp,sp,-128
+ 406910: afbc0010 sw gp,16(sp)
+ 406914: 2402fffe li v0,-2
+ 406918: afa2001c sw v0,28(sp)
+ 40691c: 240200a0 li v0,160
+ 406920: 00801821 move v1,a0
+ 406924: a7a20018 sh v0,24(sp)
+ 406928: 27a40054 addiu a0,sp,84
+ 40692c: 2402ffff li v0,-1
+ 406930: afbf007c sw ra,124(sp)
+ 406934: afb10074 sw s1,116(sp)
+ 406938: afb00070 sw s0,112(sp)
+ 40693c: afbc0078 sw gp,120(sp)
+ 406940: afa30024 sw v1,36(sp)
+ 406944: afa20034 sw v0,52(sp)
+ 406948: 00a08021 move s0,a1
+ 40694c: 00c08821 move s1,a2
+ 406950: afa3002c sw v1,44(sp)
+ 406954: afa00050 sw zero,80(sp)
+ 406958: 8f998128 lw t9,-32472(gp)
+ 40695c: 00000000 nop
+ 406960: 0320f809 jalr t9
+ 406964: 00000000 nop
+ 406968: 8fbc0010 lw gp,16(sp)
+ 40696c: 27a40018 addiu a0,sp,24
+ 406970: 02002821 move a1,s0
+ 406974: 02203021 move a2,s1
+ 406978: 8f9980bc lw t9,-32580(gp)
+ 40697c: 00000000 nop
+ 406980: 0320f809 jalr t9
+ 406984: 00000000 nop
+ 406988: 8fbc0010 lw gp,16(sp)
+ 40698c: 8fbf007c lw ra,124(sp)
+ 406990: 8fb10074 lw s1,116(sp)
+ 406994: 8fb00070 lw s0,112(sp)
+ 406998: 03e00008 jr ra
+ 40699c: 27bd0080 addiu sp,sp,128
+ 4069a0: 3c1c0fc0 lui gp,0xfc0
+ 4069a4: 279c18b0 addiu gp,gp,6320
+ 4069a8: 0399e021 addu gp,gp,t9
+ 4069ac: 27bdffe0 addiu sp,sp,-32
+ 4069b0: afbc0010 sw gp,16(sp)
+ 4069b4: 00042600 sll a0,a0,0x18
+ 4069b8: 00041e03 sra v1,a0,0x18
+ 4069bc: 2462ffd0 addiu v0,v1,-48
+ 4069c0: 00052e00 sll a1,a1,0x18
+ 4069c4: 2c46000a sltiu a2,v0,10
+ 4069c8: 00052e03 sra a1,a1,0x18
+ 4069cc: 24020010 li v0,16
+ 4069d0: afbf001c sw ra,28(sp)
+ 4069d4: afbc0018 sw gp,24(sp)
+ 4069d8: 10a2000d beq a1,v0,406a10 <vsscanf+0x110>
+ 4069dc: 00602021 move a0,v1
+ 4069e0: 24a20030 addiu v0,a1,48
+ 4069e4: 00002021 move a0,zero
+ 4069e8: 10c00004 beqz a2,4069fc <vsscanf+0xfc>
+ 4069ec: 0062102a slt v0,v1,v0
+ 4069f0: 10400003 beqz v0,406a00 <vsscanf+0x100>
+ 4069f4: 00801021 move v0,a0
+ 4069f8: 24040001 li a0,1
+ 4069fc: 00801021 move v0,a0
+ 406a00: 8fbf001c lw ra,28(sp)
+ 406a04: 00000000 nop
+ 406a08: 03e00008 jr ra
+ 406a0c: 27bd0020 addiu sp,sp,32
+ 406a10: 8f9981e4 lw t9,-32284(gp)
+ 406a14: 00000000 nop
+ 406a18: 0320f809 jalr t9
+ 406a1c: 00000000 nop
+ 406a20: 8fbc0010 lw gp,16(sp)
+ 406a24: 1000fff6 b 406a00 <vsscanf+0x100>
+ 406a28: 00000000 nop
+ 406a2c: 3c1c0fc0 lui gp,0xfc0
+ 406a30: 279c1824 addiu gp,gp,6180
+ 406a34: 0399e021 addu gp,gp,t9
+ 406a38: ac850000 sw a1,0(a0)
+ 406a3c: ac800004 sw zero,4(a0)
+ 406a40: ac80000c sw zero,12(a0)
+ 406a44: ac800014 sw zero,20(a0)
+ 406a48: 94a20000 lhu v0,0(a1)
+ 406a4c: 00000000 nop
+ 406a50: 30420003 andi v0,v0,0x3
+ 406a54: 10400002 beqz v0,406a60 <vsscanf+0x160>
+ 406a58: 00001821 move v1,zero
+ 406a5c: 90a30003 lbu v1,3(a1)
+ 406a60: 03e00008 jr ra
+ 406a64: ac830018 sw v1,24(a0)
+ 406a68: 3c1c0fc0 lui gp,0xfc0
+ 406a6c: 279c17e8 addiu gp,gp,6120
+ 406a70: 0399e021 addu gp,gp,t9
+ 406a74: 27bdffd8 addiu sp,sp,-40
+ 406a78: afbc0010 sw gp,16(sp)
+ 406a7c: afb00018 sw s0,24(sp)
+ 406a80: afbf0020 sw ra,32(sp)
+ 406a84: afbc001c sw gp,28(sp)
+ 406a88: 00808021 move s0,a0
+ 406a8c: 8e020014 lw v0,20(s0)
+ 406a90: 00000000 nop
+ 406a94: 10400010 beqz v0,406ad8 <vsscanf+0x1d8>
+ 406a98: 00000000 nop
+ 406a9c: ae000014 sw zero,20(s0)
+ 406aa0: 8e020010 lw v0,16(s0)
+ 406aa4: 00000000 nop
+ 406aa8: 18400006 blez v0,406ac4 <vsscanf+0x1c4>
+ 406aac: 00000000 nop
+ 406ab0: 8e020004 lw v0,4(s0)
+ 406ab4: 00000000 nop
+ 406ab8: 24420001 addiu v0,v0,1
+ 406abc: ae020004 sw v0,4(s0)
+ 406ac0: 8e020010 lw v0,16(s0)
+ 406ac4: ae00000c sw zero,12(s0)
+ 406ac8: 8fbf0020 lw ra,32(sp)
+ 406acc: 8fb00018 lw s0,24(sp)
+ 406ad0: 03e00008 jr ra
+ 406ad4: 27bd0028 addiu sp,sp,40
+ 406ad8: 8e050000 lw a1,0(s0)
+ 406adc: 00000000 nop
+ 406ae0: 8ca30014 lw v1,20(a1)
+ 406ae4: 8ca2001c lw v0,28(a1)
+ 406ae8: 00a02021 move a0,a1
+ 406aec: 0062102b sltu v0,v1,v0
+ 406af0: 10400005 beqz v0,406b08 <vsscanf+0x208>
+ 406af4: 24660001 addiu a2,v1,1
+ 406af8: 90620000 lbu v0,0(v1)
+ 406afc: aca60014 sw a2,20(a1)
+ 406b00: 1000ffe7 b 406aa0 <vsscanf+0x1a0>
+ 406b04: ae020010 sw v0,16(s0)
+ 406b08: 8f9980b0 lw t9,-32592(gp)
+ 406b0c: 00000000 nop
+ 406b10: 0320f809 jalr t9
+ 406b14: 00000000 nop
+ 406b18: 8fbc0010 lw gp,16(sp)
+ 406b1c: 1000ffe0 b 406aa0 <vsscanf+0x1a0>
+ 406b20: ae020010 sw v0,16(s0)
+ 406b24: 3c1c0fc0 lui gp,0xfc0
+ 406b28: 279c172c addiu gp,gp,5932
+ 406b2c: 0399e021 addu gp,gp,t9
+ 406b30: 27bdffd8 addiu sp,sp,-40
+ 406b34: afbc0010 sw gp,16(sp)
+ 406b38: afb00018 sw s0,24(sp)
+ 406b3c: afbf0020 sw ra,32(sp)
+ 406b40: afbc001c sw gp,28(sp)
+ 406b44: 00808021 move s0,a0
+ 406b48: 8e020014 lw v0,20(s0)
+ 406b4c: 00000000 nop
+ 406b50: 10400017 beqz v0,406bb0 <vsscanf+0x2b0>
+ 406b54: 00000000 nop
+ 406b58: 8e020008 lw v0,8(s0)
+ 406b5c: 24030001 li v1,1
+ 406b60: 2442ffff addiu v0,v0,-1
+ 406b64: ae03000c sw v1,12(s0)
+ 406b68: 0440000e bltz v0,406ba4 <vsscanf+0x2a4>
+ 406b6c: ae020008 sw v0,8(s0)
+ 406b70: 8e020010 lw v0,16(s0)
+ 406b74: 00000000 nop
+ 406b78: 18400005 blez v0,406b90 <vsscanf+0x290>
+ 406b7c: ae000014 sw zero,20(s0)
+ 406b80: 8e020004 lw v0,4(s0)
+ 406b84: 00000000 nop
+ 406b88: 24420001 addiu v0,v0,1
+ 406b8c: ae020004 sw v0,4(s0)
+ 406b90: 8e020010 lw v0,16(s0)
+ 406b94: 8fbf0020 lw ra,32(sp)
+ 406b98: 8fb00018 lw s0,24(sp)
+ 406b9c: 03e00008 jr ra
+ 406ba0: 27bd0028 addiu sp,sp,40
+ 406ba4: 00001021 move v0,zero
+ 406ba8: 1000fffa b 406b94 <vsscanf+0x294>
+ 406bac: ae030014 sw v1,20(s0)
+ 406bb0: 8e040000 lw a0,0(s0)
+ 406bb4: 00000000 nop
+ 406bb8: 8c830014 lw v1,20(a0)
+ 406bbc: 8c82001c lw v0,28(a0)
+ 406bc0: 00000000 nop
+ 406bc4: 0062102b sltu v0,v1,v0
+ 406bc8: 10400005 beqz v0,406be0 <vsscanf+0x2e0>
+ 406bcc: 24620001 addiu v0,v1,1
+ 406bd0: 90650000 lbu a1,0(v1)
+ 406bd4: ac820014 sw v0,20(a0)
+ 406bd8: 1000ffdf b 406b58 <vsscanf+0x258>
+ 406bdc: ae050010 sw a1,16(s0)
+ 406be0: 8f9980b0 lw t9,-32592(gp)
+ 406be4: 00000000 nop
+ 406be8: 0320f809 jalr t9
+ 406bec: 00000000 nop
+ 406bf0: 8fbc0010 lw gp,16(sp)
+ 406bf4: 1000fff8 b 406bd8 <vsscanf+0x2d8>
+ 406bf8: 00402821 move a1,v0
+ 406bfc: 3c1c0fc0 lui gp,0xfc0
+ 406c00: 279c1654 addiu gp,gp,5716
+ 406c04: 0399e021 addu gp,gp,t9
+ 406c08: 8c820014 lw v0,20(a0)
+ 406c0c: 00000000 nop
+ 406c10: 10400003 beqz v0,406c20 <vsscanf+0x320>
+ 406c14: 00000000 nop
+ 406c18: 03e00008 jr ra
+ 406c1c: 00000000 nop
+ 406c20: 8c82000c lw v0,12(a0)
+ 406c24: 00000000 nop
+ 406c28: 10400005 beqz v0,406c40 <vsscanf+0x340>
+ 406c2c: 00000000 nop
+ 406c30: 8c820008 lw v0,8(a0)
+ 406c34: 00000000 nop
+ 406c38: 24420001 addiu v0,v0,1
+ 406c3c: ac820008 sw v0,8(a0)
+ 406c40: 8c830010 lw v1,16(a0)
+ 406c44: 24020001 li v0,1
+ 406c48: 1860fff3 blez v1,406c18 <vsscanf+0x318>
+ 406c4c: ac820014 sw v0,20(a0)
+ 406c50: 8c820004 lw v0,4(a0)
+ 406c54: 00000000 nop
+ 406c58: 2442ffff addiu v0,v0,-1
+ 406c5c: 03e00008 jr ra
+ 406c60: ac820004 sw v0,4(a0)
+ 406c64: 3c1c0fc0 lui gp,0xfc0
+ 406c68: 279c15ec addiu gp,gp,5612
+ 406c6c: 0399e021 addu gp,gp,t9
+ 406c70: 27bdffd8 addiu sp,sp,-40
+ 406c74: afbc0010 sw gp,16(sp)
+ 406c78: afb00018 sw s0,24(sp)
+ 406c7c: afbf0020 sw ra,32(sp)
+ 406c80: afbc001c sw gp,28(sp)
+ 406c84: 00808021 move s0,a0
+ 406c88: 8e020014 lw v0,20(s0)
+ 406c8c: 00000000 nop
+ 406c90: 1040000c beqz v0,406cc4 <vsscanf+0x3c4>
+ 406c94: 00000000 nop
+ 406c98: 8e040010 lw a0,16(s0)
+ 406c9c: 8e050000 lw a1,0(s0)
+ 406ca0: 8f998294 lw t9,-32108(gp)
+ 406ca4: 00000000 nop
+ 406ca8: 0320f809 jalr t9
+ 406cac: 00000000 nop
+ 406cb0: 8fbc0010 lw gp,16(sp)
+ 406cb4: 8e020004 lw v0,4(s0)
+ 406cb8: 00000000 nop
+ 406cbc: 10400005 beqz v0,406cd4 <vsscanf+0x3d4>
+ 406cc0: 00000000 nop
+ 406cc4: 8fbf0020 lw ra,32(sp)
+ 406cc8: 8fb00018 lw s0,24(sp)
+ 406ccc: 03e00008 jr ra
+ 406cd0: 27bd0028 addiu sp,sp,40
+ 406cd4: 9203001b lbu v1,27(s0)
+ 406cd8: 8e020000 lw v0,0(s0)
+ 406cdc: 1000fff9 b 406cc4 <vsscanf+0x3c4>
+ 406ce0: a0430003 sb v1,3(v0)
+
+00406ce4 <vfscanf>:
+ 406ce4: 3c1c0fc0 lui gp,0xfc0
+ 406ce8: 279c156c addiu gp,gp,5484
+ 406cec: 0399e021 addu gp,gp,t9
+ 406cf0: 27bdfe50 addiu sp,sp,-432
+ 406cf4: afbc0010 sw gp,16(sp)
+ 406cf8: afb40190 sw s4,400(sp)
+ 406cfc: afb00180 sw s0,384(sp)
+ 406d00: afbf01a8 sw ra,424(sp)
+ 406d04: afbe01a4 sw s8,420(sp)
+ 406d08: afbc01a0 sw gp,416(sp)
+ 406d0c: afb7019c sw s7,412(sp)
+ 406d10: afb60198 sw s6,408(sp)
+ 406d14: afb50194 sw s5,404(sp)
+ 406d18: afb3018c sw s3,396(sp)
+ 406d1c: afb20188 sw s2,392(sp)
+ 406d20: afb10184 sw s1,388(sp)
+ 406d24: afa401b0 sw a0,432(sp)
+ 406d28: 8c820038 lw v0,56(a0)
+ 406d2c: 00a08021 move s0,a1
+ 406d30: 104002d2 beqz v0,40787c <vfscanf+0xb98>
+ 406d34: 00c0a021 move s4,a2
+ 406d38: 8fa501b0 lw a1,432(sp)
+ 406d3c: 02009021 move s2,s0
+ 406d40: 27a40018 addiu a0,sp,24
+ 406d44: 8f998020 lw t9,-32736(gp)
+ 406d48: 00000000 nop
+ 406d4c: 27396a2c addiu t9,t9,27180
+ 406d50: 00000000 nop
+ 406d54: 0320f809 jalr t9
+ 406d58: 00000000 nop
+ 406d5c: 8fbc0010 lw gp,16(sp)
+ 406d60: 92430000 lbu v1,0(s2)
+ 406d64: 00000000 nop
+ 406d68: 1060002b beqz v1,406e18 <vfscanf+0x134>
+ 406d6c: 0000b821 move s7,zero
+ 406d70: 3c027fff lui v0,0x7fff
+ 406d74: 3442ffff ori v0,v0,0xffff
+ 406d78: afa20020 sw v0,32(sp)
+ 406d7c: 24020025 li v0,37
+ 406d80: 241e0001 li s8,1
+ 406d84: 10620066 beq v1,v0,406f20 <vfscanf+0x23c>
+ 406d88: 0000b021 move s6,zero
+ 406d8c: 92430000 lbu v1,0(s2)
+ 406d90: 24020020 li v0,32
+ 406d94: 10620004 beq v1,v0,406da8 <vfscanf+0xc4>
+ 406d98: 2462fff7 addiu v0,v1,-9
+ 406d9c: 2c420005 sltiu v0,v0,5
+ 406da0: 1040004b beqz v0,406ed0 <vfscanf+0x1ec>
+ 406da4: 27a40018 addiu a0,sp,24
+ 406da8: 27a40018 addiu a0,sp,24
+ 406dac: 8f998020 lw t9,-32736(gp)
+ 406db0: 00000000 nop
+ 406db4: 27396a68 addiu t9,t9,27240
+ 406db8: 00000000 nop
+ 406dbc: 0320f809 jalr t9
+ 406dc0: 00000000 nop
+ 406dc4: 8fbc0010 lw gp,16(sp)
+ 406dc8: 00402821 move a1,v0
+ 406dcc: 24020020 li v0,32
+ 406dd0: 10a2fff5 beq a1,v0,406da8 <vfscanf+0xc4>
+ 406dd4: 24a2fff7 addiu v0,a1,-9
+ 406dd8: 2c420005 sltiu v0,v0,5
+ 406ddc: 1440fff3 bnez v0,406dac <vfscanf+0xc8>
+ 406de0: 27a40018 addiu a0,sp,24
+ 406de4: 27a40018 addiu a0,sp,24
+ 406de8: 26520001 addiu s2,s2,1
+ 406dec: 8f998020 lw t9,-32736(gp)
+ 406df0: 00000000 nop
+ 406df4: 27396bfc addiu t9,t9,27644
+ 406df8: 00000000 nop
+ 406dfc: 0320f809 jalr t9
+ 406e00: 00000000 nop
+ 406e04: 8fbc0010 lw gp,16(sp)
+ 406e08: 92430000 lbu v1,0(s2)
+ 406e0c: 00000000 nop
+ 406e10: 1460ffd8 bnez v1,406d74 <vfscanf+0x90>
+ 406e14: 3c027fff lui v0,0x7fff
+ 406e18: 27a40018 addiu a0,sp,24
+ 406e1c: 8f998020 lw t9,-32736(gp)
+ 406e20: 00000000 nop
+ 406e24: 27396c64 addiu t9,t9,27748
+ 406e28: 00000000 nop
+ 406e2c: 0320f809 jalr t9
+ 406e30: 00000000 nop
+ 406e34: 8fbc0010 lw gp,16(sp)
+ 406e38: 8fa20028 lw v0,40(sp)
+ 406e3c: 00000000 nop
+ 406e40: 1840001b blez v0,406eb0 <vfscanf+0x1cc>
+ 406e44: 00000000 nop
+ 406e48: 8fa301b0 lw v1,432(sp)
+ 406e4c: 00000000 nop
+ 406e50: 8c620038 lw v0,56(v1)
+ 406e54: 00000000 nop
+ 406e58: 1040000e beqz v0,406e94 <vfscanf+0x1b0>
+ 406e5c: 2464003c addiu a0,v1,60
+ 406e60: 02e01021 move v0,s7
+ 406e64: 8fbf01a8 lw ra,424(sp)
+ 406e68: 8fbe01a4 lw s8,420(sp)
+ 406e6c: 8fb7019c lw s7,412(sp)
+ 406e70: 8fb60198 lw s6,408(sp)
+ 406e74: 8fb50194 lw s5,404(sp)
+ 406e78: 8fb40190 lw s4,400(sp)
+ 406e7c: 8fb3018c lw s3,396(sp)
+ 406e80: 8fb20188 lw s2,392(sp)
+ 406e84: 8fb10184 lw s1,388(sp)
+ 406e88: 8fb00180 lw s0,384(sp)
+ 406e8c: 03e00008 jr ra
+ 406e90: 27bd01b0 addiu sp,sp,432
+ 406e94: 8f99811c lw t9,-32484(gp)
+ 406e98: 00000000 nop
+ 406e9c: 0320f809 jalr t9
+ 406ea0: 00000000 nop
+ 406ea4: 8fbc0010 lw gp,16(sp)
+ 406ea8: 1000ffee b 406e64 <vfscanf+0x180>
+ 406eac: 02e01021 move v0,s7
+ 406eb0: 16e0ffe5 bnez s7,406e48 <vfscanf+0x164>
+ 406eb4: 00000000 nop
+ 406eb8: 92420000 lbu v0,0(s2)
+ 406ebc: 00000000 nop
+ 406ec0: 1040ffe1 beqz v0,406e48 <vfscanf+0x164>
+ 406ec4: 00000000 nop
+ 406ec8: 1000ffdf b 406e48 <vfscanf+0x164>
+ 406ecc: 2417ffff li s7,-1
+ 406ed0: 8f998020 lw t9,-32736(gp)
+ 406ed4: 00000000 nop
+ 406ed8: 27396a68 addiu t9,t9,27240
+ 406edc: 00000000 nop
+ 406ee0: 0320f809 jalr t9
+ 406ee4: 00000000 nop
+ 406ee8: 8fbc0010 lw gp,16(sp)
+ 406eec: 92430000 lbu v1,0(s2)
+ 406ef0: 00000000 nop
+ 406ef4: 1443ffc8 bne v0,v1,406e18 <vfscanf+0x134>
+ 406ef8: 27a40018 addiu a0,sp,24
+ 406efc: 8f998020 lw t9,-32736(gp)
+ 406f00: 00000000 nop
+ 406f04: 27396a68 addiu t9,t9,27240
+ 406f08: 00000000 nop
+ 406f0c: 0320f809 jalr t9
+ 406f10: 00000000 nop
+ 406f14: 8fbc0010 lw gp,16(sp)
+ 406f18: 1000ffb3 b 406de8 <vfscanf+0x104>
+ 406f1c: 27a40018 addiu a0,sp,24
+ 406f20: 26520001 addiu s2,s2,1
+ 406f24: 92430000 lbu v1,0(s2)
+ 406f28: 2402002a li v0,42
+ 406f2c: 10620250 beq v1,v0,407870 <vfscanf+0xb8c>
+ 406f30: 00000000 nop
+ 406f34: 92420000 lbu v0,0(s2)
+ 406f38: 00000000 nop
+ 406f3c: 2442ffd0 addiu v0,v0,-48
+ 406f40: 2c42000a sltiu v0,v0,10
+ 406f44: 1040000d beqz v0,406f7c <vfscanf+0x298>
+ 406f48: 00002821 move a1,zero
+ 406f4c: 92420000 lbu v0,0(s2)
+ 406f50: 26520001 addiu s2,s2,1
+ 406f54: 00051880 sll v1,a1,0x2
+ 406f58: 92440000 lbu a0,0(s2)
+ 406f5c: 00651821 addu v1,v1,a1
+ 406f60: 00031840 sll v1,v1,0x1
+ 406f64: 2484ffd0 addiu a0,a0,-48
+ 406f68: 00621821 addu v1,v1,v0
+ 406f6c: 2c84000a sltiu a0,a0,10
+ 406f70: 1480fff6 bnez a0,406f4c <vfscanf+0x268>
+ 406f74: 2465ffd0 addiu a1,v1,-48
+ 406f78: afa50020 sw a1,32(sp)
+ 406f7c: 00002821 move a1,zero
+ 406f80: 8f838018 lw v1,-32744(gp)
+ 406f84: 00000000 nop
+ 406f88: 246305a0 addiu v1,v1,1440
+ 406f8c: 00651821 addu v1,v1,a1
+ 406f90: 80630000 lb v1,0(v1)
+ 406f94: 92420000 lbu v0,0(s2)
+ 406f98: 00000000 nop
+ 406f9c: 10620220 beq v1,v0,407820 <vfscanf+0xb3c>
+ 406fa0: 28a20002 slti v0,a1,2
+ 406fa4: 24a50001 addiu a1,a1,1
+ 406fa8: 2ca20005 sltiu v0,a1,5
+ 406fac: 1440fff4 bnez v0,406f80 <vfscanf+0x29c>
+ 406fb0: 00000000 nop
+ 406fb4: 8f938018 lw s3,-32744(gp)
+ 406fb8: 00000000 nop
+ 406fbc: 267305ac addiu s3,s3,1452
+ 406fc0: 00000000 nop
+ 406fc4: 82620000 lb v0,0(s3)
+ 406fc8: 00000000 nop
+ 406fcc: 1040ff9e beqz v0,406e48 <vfscanf+0x164>
+ 406fd0: 02608021 move s0,s3
+ 406fd4: 92430000 lbu v1,0(s2)
+ 406fd8: 82620000 lb v0,0(s3)
+ 406fdc: 00000000 nop
+ 406fe0: 10620008 beq v1,v0,407004 <vfscanf+0x320>
+ 406fe4: 02701823 subu v1,s3,s0
+ 406fe8: 26730001 addiu s3,s3,1
+ 406fec: 82620000 lb v0,0(s3)
+ 406ff0: 00000000 nop
+ 406ff4: 1440fff7 bnez v0,406fd4 <vfscanf+0x2f0>
+ 406ff8: 00000000 nop
+ 406ffc: 1000ff92 b 406e48 <vfscanf+0x164>
+ 407000: 00000000 nop
+ 407004: 1860ffb2 blez v1,406ed0 <vfscanf+0x1ec>
+ 407008: 27a40018 addiu a0,sp,24
+ 40700c: 28620002 slti v0,v1,2
+ 407010: 144001f3 bnez v0,4077e0 <vfscanf+0xafc>
+ 407014: 2402fffc li v0,-4
+ 407018: 28620004 slti v0,v1,4
+ 40701c: 14400018 bnez v0,407080 <vfscanf+0x39c>
+ 407020: 02702023 subu a0,s3,s0
+ 407024: 27a40018 addiu a0,sp,24
+ 407028: 8f998020 lw t9,-32736(gp)
+ 40702c: 00000000 nop
+ 407030: 27396a68 addiu t9,t9,27240
+ 407034: 00000000 nop
+ 407038: 0320f809 jalr t9
+ 40703c: 00000000 nop
+ 407040: 8fbc0010 lw gp,16(sp)
+ 407044: 00402821 move a1,v0
+ 407048: 24020020 li v0,32
+ 40704c: 10a2fff5 beq a1,v0,407024 <vfscanf+0x340>
+ 407050: 24a2fff7 addiu v0,a1,-9
+ 407054: 2c420005 sltiu v0,v0,5
+ 407058: 1440fff3 bnez v0,407028 <vfscanf+0x344>
+ 40705c: 27a40018 addiu a0,sp,24
+ 407060: 8f998020 lw t9,-32736(gp)
+ 407064: 00000000 nop
+ 407068: 27396bfc addiu t9,t9,27644
+ 40706c: 00000000 nop
+ 407070: 0320f809 jalr t9
+ 407074: 00000000 nop
+ 407078: 8fbc0010 lw gp,16(sp)
+ 40707c: 02702023 subu a0,s3,s0
+ 407080: 28820005 slti v0,a0,5
+ 407084: 104000a1 beqz v0,40730c <vfscanf+0x628>
+ 407088: 2882000c slti v0,a0,12
+ 40708c: 82630000 lb v1,0(s3)
+ 407090: 24020063 li v0,99
+ 407094: 10620096 beq v1,v0,4072f0 <vfscanf+0x60c>
+ 407098: 0000b021 move s6,zero
+ 40709c: 00002821 move a1,zero
+ 4070a0: 27a30080 addiu v1,sp,128
+ 4070a4: 82620000 lb v0,0(s3)
+ 4070a8: 00652021 addu a0,v1,a1
+ 4070ac: 24030073 li v1,115
+ 4070b0: 10430086 beq v0,v1,4072cc <vfscanf+0x5e8>
+ 4070b4: 24020020 li v0,32
+ 4070b8: 00001821 move v1,zero
+ 4070bc: 24a50001 addiu a1,a1,1
+ 4070c0: 28a20100 slti v0,a1,256
+ 4070c4: 1440fff6 bnez v0,4070a0 <vfscanf+0x3bc>
+ 4070c8: a0830000 sb v1,0(a0)
+ 4070cc: 82630000 lb v1,0(s3)
+ 4070d0: 2402005b li v0,91
+ 4070d4: 1062003a beq v1,v0,4071c0 <vfscanf+0x4dc>
+ 4070d8: 2402005e li v0,94
+ 4070dc: 8fa20020 lw v0,32(sp)
+ 4070e0: 00000000 nop
+ 4070e4: 1840ff4d blez v0,406e1c <vfscanf+0x138>
+ 4070e8: 27a40018 addiu a0,sp,24
+ 4070ec: 13c00032 beqz s8,4071b8 <vfscanf+0x4d4>
+ 4070f0: 26820003 addiu v0,s4,3
+ 4070f4: 2403fffc li v1,-4
+ 4070f8: 0043a024 and s4,v0,v1
+ 4070fc: 02801021 move v0,s4
+ 407100: 8c510000 lw s1,0(v0)
+ 407104: 26940004 addiu s4,s4,4
+ 407108: 27a40018 addiu a0,sp,24
+ 40710c: 8f998020 lw t9,-32736(gp)
+ 407110: 00000000 nop
+ 407114: 27396b24 addiu t9,t9,27428
+ 407118: 00000000 nop
+ 40711c: 0320f809 jalr t9
+ 407120: 00000000 nop
+ 407124: 8fbc0010 lw gp,16(sp)
+ 407128: 00408021 move s0,v0
+ 40712c: 1a0000bf blez s0,40742c <vfscanf+0x748>
+ 407130: 27a40018 addiu a0,sp,24
+ 407134: 27b50080 addiu s5,sp,128
+ 407138: 02b01021 addu v0,s5,s0
+ 40713c: 90420000 lbu v0,0(v0)
+ 407140: 00000000 nop
+ 407144: 10560013 beq v0,s6,407194 <vfscanf+0x4b0>
+ 407148: 00002821 move a1,zero
+ 40714c: a2300000 sb s0,0(s1)
+ 407150: 27a40018 addiu a0,sp,24
+ 407154: 8f998020 lw t9,-32736(gp)
+ 407158: 00000000 nop
+ 40715c: 27396b24 addiu t9,t9,27428
+ 407160: 00000000 nop
+ 407164: 0320f809 jalr t9
+ 407168: 00000000 nop
+ 40716c: 8fbc0010 lw gp,16(sp)
+ 407170: 00408021 move s0,v0
+ 407174: 24050001 li a1,1
+ 407178: 1a000006 blez s0,407194 <vfscanf+0x4b0>
+ 40717c: 023e8821 addu s1,s1,s8
+ 407180: 02b01021 addu v0,s5,s0
+ 407184: 90420000 lbu v0,0(v0)
+ 407188: 00000000 nop
+ 40718c: 1456ffef bne v0,s6,40714c <vfscanf+0x468>
+ 407190: 00000000 nop
+ 407194: 10a000a4 beqz a1,407428 <vfscanf+0x744>
+ 407198: 24020063 li v0,99
+ 40719c: 82630000 lb v1,0(s3)
+ 4071a0: 00000000 nop
+ 4071a4: 10620002 beq v1,v0,4071b0 <vfscanf+0x4cc>
+ 4071a8: 00000000 nop
+ 4071ac: a2200000 sb zero,0(s1)
+ 4071b0: 1000ff0c b 406de4 <vfscanf+0x100>
+ 4071b4: 02feb821 addu s7,s7,s8
+ 4071b8: 1000ffd3 b 407108 <vfscanf+0x424>
+ 4071bc: 27b10038 addiu s1,sp,56
+ 4071c0: 26520001 addiu s2,s2,1
+ 4071c4: 92430000 lbu v1,0(s2)
+ 4071c8: 00000000 nop
+ 4071cc: 1062003c beq v1,v0,4072c0 <vfscanf+0x5dc>
+ 4071d0: 00000000 nop
+ 4071d4: 92420000 lbu v0,0(s2)
+ 4071d8: 2404005d li a0,93
+ 4071dc: 10440035 beq v0,a0,4072b4 <vfscanf+0x5d0>
+ 4071e0: 24020001 li v0,1
+ 4071e4: 92430000 lbu v1,0(s2)
+ 4071e8: 00000000 nop
+ 4071ec: 306200ff andi v0,v1,0xff
+ 4071f0: 1040ff09 beqz v0,406e18 <vfscanf+0x134>
+ 4071f4: 00002821 move a1,zero
+ 4071f8: 1044000f beq v0,a0,407238 <vfscanf+0x554>
+ 4071fc: 2402002d li v0,45
+ 407200: 10620013 beq v1,v0,407250 <vfscanf+0x56c>
+ 407204: 00000000 nop
+ 407208: 92450000 lbu a1,0(s2)
+ 40720c: 24020001 li v0,1
+ 407210: 03a51821 addu v1,sp,a1
+ 407214: a0620080 sb v0,128(v1)
+ 407218: 26520001 addiu s2,s2,1
+ 40721c: 92430000 lbu v1,0(s2)
+ 407220: 00000000 nop
+ 407224: 306400ff andi a0,v1,0xff
+ 407228: 1080fefb beqz a0,406e18 <vfscanf+0x134>
+ 40722c: 2402005d li v0,93
+ 407230: 1482fff3 bne a0,v0,407200 <vfscanf+0x51c>
+ 407234: 2402002d li v0,45
+ 407238: 92420000 lbu v0,0(s2)
+ 40723c: 00000000 nop
+ 407240: 1440ffa6 bnez v0,4070dc <vfscanf+0x3f8>
+ 407244: 27a40018 addiu a0,sp,24
+ 407248: 1000fef4 b 406e1c <vfscanf+0x138>
+ 40724c: 00000000 nop
+ 407250: 10a0ffed beqz a1,407208 <vfscanf+0x524>
+ 407254: 2402005d li v0,93
+ 407258: 92430001 lbu v1,1(s2)
+ 40725c: 00000000 nop
+ 407260: 1062ffe9 beq v1,v0,407208 <vfscanf+0x524>
+ 407264: 00601021 move v0,v1
+ 407268: 0045102b sltu v0,v0,a1
+ 40726c: 1040000e beqz v0,4072a8 <vfscanf+0x5c4>
+ 407270: 26520001 addiu s2,s2,1
+ 407274: 00a03021 move a2,a1
+ 407278: 00602821 move a1,v1
+ 40727c: 00c5102a slt v0,a2,a1
+ 407280: 14400007 bnez v0,4072a0 <vfscanf+0x5bc>
+ 407284: 00000000 nop
+ 407288: 03a52021 addu a0,sp,a1
+ 40728c: 24a50001 addiu a1,a1,1
+ 407290: 24020001 li v0,1
+ 407294: 00c5182a slt v1,a2,a1
+ 407298: 1060fffb beqz v1,407288 <vfscanf+0x5a4>
+ 40729c: a0820080 sb v0,128(a0)
+ 4072a0: 1000ffdd b 407218 <vfscanf+0x534>
+ 4072a4: 00002821 move a1,zero
+ 4072a8: 92460000 lbu a2,0(s2)
+ 4072ac: 1000fff4 b 407280 <vfscanf+0x59c>
+ 4072b0: 00c5102a slt v0,a2,a1
+ 4072b4: a3a200dd sb v0,221(sp)
+ 4072b8: 1000ffca b 4071e4 <vfscanf+0x500>
+ 4072bc: 26520001 addiu s2,s2,1
+ 4072c0: 24160001 li s6,1
+ 4072c4: 1000ffc3 b 4071d4 <vfscanf+0x4f0>
+ 4072c8: 26520001 addiu s2,s2,1
+ 4072cc: 10a20005 beq a1,v0,4072e4 <vfscanf+0x600>
+ 4072d0: 00001821 move v1,zero
+ 4072d4: 24a2fff7 addiu v0,a1,-9
+ 4072d8: 2c420005 sltiu v0,v0,5
+ 4072dc: 10400002 beqz v0,4072e8 <vfscanf+0x604>
+ 4072e0: 00000000 nop
+ 4072e4: 24030001 li v1,1
+ 4072e8: 1000ff74 b 4070bc <vfscanf+0x3d8>
+ 4072ec: 38630001 xori v1,v1,0x1
+ 4072f0: 3c027fff lui v0,0x7fff
+ 4072f4: 8fa30020 lw v1,32(sp)
+ 4072f8: 3442ffff ori v0,v0,0xffff
+ 4072fc: 1462ff67 bne v1,v0,40709c <vfscanf+0x3b8>
+ 407300: 24160001 li s6,1
+ 407304: 1000ff65 b 40709c <vfscanf+0x3b8>
+ 407308: afb60020 sw s6,32(sp)
+ 40730c: 1040fec2 beqz v0,406e18 <vfscanf+0x134>
+ 407310: 24020070 li v0,112
+ 407314: 82630000 lb v1,0(s3)
+ 407318: 00000000 nop
+ 40731c: 1062012e beq v1,v0,4077d8 <vfscanf+0xaf4>
+ 407320: 00000000 nop
+ 407324: 2402fffb li v0,-5
+ 407328: 00501023 subu v0,v0,s0
+ 40732c: 02621021 addu v0,s3,v0
+ 407330: 8f938018 lw s3,-32744(gp)
+ 407334: 00000000 nop
+ 407338: 267305bc addiu s3,s3,1468
+ 40733c: 02629821 addu s3,s3,v0
+ 407340: 92730000 lbu s3,0(s3)
+ 407344: 8fa20020 lw v0,32(sp)
+ 407348: 27b10038 addiu s1,sp,56
+ 40734c: 1840feb2 blez v0,406e18 <vfscanf+0x134>
+ 407350: 2895000a slti s5,a0,10
+ 407354: 27a40018 addiu a0,sp,24
+ 407358: 8f998020 lw t9,-32736(gp)
+ 40735c: 00000000 nop
+ 407360: 27396b24 addiu t9,t9,27428
+ 407364: 00000000 nop
+ 407368: 0320f809 jalr t9
+ 40736c: 00000000 nop
+ 407370: 8fbc0010 lw gp,16(sp)
+ 407374: 00408021 move s0,v0
+ 407378: 2402002b li v0,43
+ 40737c: 1202010a beq s0,v0,4077a8 <vfscanf+0xac4>
+ 407380: 2402002d li v0,45
+ 407384: 12020109 beq s0,v0,4077ac <vfscanf+0xac8>
+ 407388: 27a40018 addiu a0,sp,24
+ 40738c: 24020030 li v0,48
+ 407390: 120200dd beq s0,v0,407708 <vfscanf+0xa24>
+ 407394: 00000000 nop
+ 407398: 126000d9 beqz s3,407700 <vfscanf+0xa1c>
+ 40739c: 00000000 nop
+ 4073a0: 24020030 li v0,48
+ 4073a4: 120200c6 beq s0,v0,4076c0 <vfscanf+0x9dc>
+ 4073a8: 00000000 nop
+ 4073ac: 00102600 sll a0,s0,0x18
+ 4073b0: 00132e00 sll a1,s3,0x18
+ 4073b4: 00042603 sra a0,a0,0x18
+ 4073b8: 00052e03 sra a1,a1,0x18
+ 4073bc: 8f998020 lw t9,-32736(gp)
+ 4073c0: 00000000 nop
+ 4073c4: 273969a0 addiu t9,t9,27040
+ 4073c8: 00000000 nop
+ 4073cc: 0320f809 jalr t9
+ 4073d0: 00000000 nop
+ 4073d4: 8fbc0010 lw gp,16(sp)
+ 4073d8: 10400010 beqz v0,40741c <vfscanf+0x738>
+ 4073dc: 27a30038 addiu v1,sp,56
+ 4073e0: 02231023 subu v0,s1,v1
+ 4073e4: 28420040 slti v0,v0,64
+ 4073e8: 10400003 beqz v0,4073f8 <vfscanf+0x714>
+ 4073ec: 27a40018 addiu a0,sp,24
+ 4073f0: a2300000 sb s0,0(s1)
+ 4073f4: 26310001 addiu s1,s1,1
+ 4073f8: 8f998020 lw t9,-32736(gp)
+ 4073fc: 00000000 nop
+ 407400: 27396b24 addiu t9,t9,27428
+ 407404: 00000000 nop
+ 407408: 0320f809 jalr t9
+ 40740c: 00000000 nop
+ 407410: 8fbc0010 lw gp,16(sp)
+ 407414: 1000ffe5 b 4073ac <vfscanf+0x6c8>
+ 407418: 00408021 move s0,v0
+ 40741c: 27a40038 addiu a0,sp,56
+ 407420: 1624000b bne s1,a0,407450 <vfscanf+0x76c>
+ 407424: a2200000 sb zero,0(s1)
+ 407428: 27a40018 addiu a0,sp,24
+ 40742c: 8f998020 lw t9,-32736(gp)
+ 407430: 00000000 nop
+ 407434: 27396bfc addiu t9,t9,27644
+ 407438: 00000000 nop
+ 40743c: 0320f809 jalr t9
+ 407440: 00000000 nop
+ 407444: 8fbc0010 lw gp,16(sp)
+ 407448: 1000fe74 b 406e1c <vfscanf+0x138>
+ 40744c: 27a40018 addiu a0,sp,24
+ 407450: 9223ffff lbu v1,-1(s1)
+ 407454: 2402002b li v0,43
+ 407458: 1062fff3 beq v1,v0,407428 <vfscanf+0x744>
+ 40745c: 2405002d li a1,45
+ 407460: 1065fff1 beq v1,a1,407428 <vfscanf+0x744>
+ 407464: 00000000 nop
+ 407468: 13c0fe5e beqz s8,406de4 <vfscanf+0x100>
+ 40746c: 00000000 nop
+ 407470: 93a20038 lbu v0,56(sp)
+ 407474: 00000000 nop
+ 407478: 1045008f beq v0,a1,4076b8 <vfscanf+0x9d4>
+ 40747c: 00000000 nop
+ 407480: 24070001 li a3,1
+ 407484: 00002821 move a1,zero
+ 407488: 00f53823 subu a3,a3,s5
+ 40748c: 02603021 move a2,s3
+ 407490: 8f9981ac lw t9,-32340(gp)
+ 407494: 00000000 nop
+ 407498: 0320f809 jalr t9
+ 40749c: 00000000 nop
+ 4074a0: 8fbc0010 lw gp,16(sp)
+ 4074a4: 00404021 move t0,v0
+ 4074a8: 00604821 move t1,v1
+ 4074ac: 2402fffc li v0,-4
+ 4074b0: 26830003 addiu v1,s4,3
+ 4074b4: 26c40002 addiu a0,s6,2
+ 4074b8: 0062a024 and s4,v1,v0
+ 4074bc: 308400ff andi a0,a0,0xff
+ 4074c0: 02801021 move v0,s4
+ 4074c4: 2c830005 sltiu v1,a0,5
+ 4074c8: 8c450000 lw a1,0(v0)
+ 4074cc: 1060000d beqz v1,407504 <vfscanf+0x820>
+ 4074d0: 26940004 addiu s4,s4,4
+ 4074d4: 00041080 sll v0,a0,0x2
+ 4074d8: 8f818018 lw at,-32744(gp)
+ 4074dc: 00000000 nop
+ 4074e0: 242105c8 addiu at,at,1480
+ 4074e4: 00220821 addu at,at,v0
+ 4074e8: 8c220000 lw v0,0(at)
+ 4074ec: 00000000 nop
+ 4074f0: 005c1021 addu v0,v0,gp
+ 4074f4: 00400008 jr v0
+ 4074f8: 00000000 nop
+ 4074fc: aca80000 sw t0,0(a1)
+ 407500: aca90004 sw t1,4(a1)
+ 407504: 1000fe37 b 406de4 <vfscanf+0x100>
+ 407508: 26f70001 addiu s7,s7,1
+ 40750c: 12a0000d beqz s5,407544 <vfscanf+0x860>
+ 407510: 00000000 nop
+ 407514: 15000007 bnez t0,407534 <vfscanf+0x850>
+ 407518: 00000000 nop
+ 40751c: 11000003 beqz t0,40752c <vfscanf+0x848>
+ 407520: 2d220100 sltiu v0,t1,256
+ 407524: 1000fff7 b 407504 <vfscanf+0x820>
+ 407528: a0a90000 sb t1,0(a1)
+ 40752c: 1440fffd bnez v0,407524 <vfscanf+0x840>
+ 407530: 00000000 nop
+ 407534: 24080000 li t0,0
+ 407538: 240900ff li t1,255
+ 40753c: 1000fff1 b 407504 <vfscanf+0x820>
+ 407540: a0a90000 sb t1,0(a1)
+ 407544: 19000005 blez t0,40755c <vfscanf+0x878>
+ 407548: 00000000 nop
+ 40754c: 24080000 li t0,0
+ 407550: 2409007f li t1,127
+ 407554: 1000ffeb b 407504 <vfscanf+0x820>
+ 407558: a0a90000 sb t1,0(a1)
+ 40755c: 1100000c beqz t0,407590 <vfscanf+0x8ac>
+ 407560: 2d220080 sltiu v0,t1,128
+ 407564: 2902ffff slti v0,t0,-1
+ 407568: 14400005 bnez v0,407580 <vfscanf+0x89c>
+ 40756c: 2402ffff li v0,-1
+ 407570: 1502ffec bne t0,v0,407524 <vfscanf+0x840>
+ 407574: 2d22ff80 sltiu v0,t1,-128
+ 407578: 1040ffea beqz v0,407524 <vfscanf+0x840>
+ 40757c: 00000000 nop
+ 407580: 2408ffff li t0,-1
+ 407584: 2409ff80 li t1,-128
+ 407588: 1000ffde b 407504 <vfscanf+0x820>
+ 40758c: a0a90000 sb t1,0(a1)
+ 407590: 1440fff5 bnez v0,407568 <vfscanf+0x884>
+ 407594: 2902ffff slti v0,t0,-1
+ 407598: 1000ffec b 40754c <vfscanf+0x868>
+ 40759c: 00000000 nop
+ 4075a0: 12a0000e beqz s5,4075dc <vfscanf+0x8f8>
+ 4075a4: 00000000 nop
+ 4075a8: 15000008 bnez t0,4075cc <vfscanf+0x8e8>
+ 4075ac: 00000000 nop
+ 4075b0: 11000003 beqz t0,4075c0 <vfscanf+0x8dc>
+ 4075b4: 3402ffff li v0,0xffff
+ 4075b8: 1000ffd2 b 407504 <vfscanf+0x820>
+ 4075bc: a4a90000 sh t1,0(a1)
+ 4075c0: 0049102b sltu v0,v0,t1
+ 4075c4: 1040fffc beqz v0,4075b8 <vfscanf+0x8d4>
+ 4075c8: 00000000 nop
+ 4075cc: 24080000 li t0,0
+ 4075d0: 3409ffff li t1,0xffff
+ 4075d4: 1000ffcb b 407504 <vfscanf+0x820>
+ 4075d8: a4a90000 sh t1,0(a1)
+ 4075dc: 19000005 blez t0,4075f4 <vfscanf+0x910>
+ 4075e0: 00000000 nop
+ 4075e4: 24080000 li t0,0
+ 4075e8: 24097fff li t1,32767
+ 4075ec: 1000ffc5 b 407504 <vfscanf+0x820>
+ 4075f0: a4a90000 sh t1,0(a1)
+ 4075f4: 1100000c beqz t0,407628 <vfscanf+0x944>
+ 4075f8: 24027fff li v0,32767
+ 4075fc: 2902ffff slti v0,t0,-1
+ 407600: 14400005 bnez v0,407618 <vfscanf+0x934>
+ 407604: 2402ffff li v0,-1
+ 407608: 1502ffeb bne t0,v0,4075b8 <vfscanf+0x8d4>
+ 40760c: 2d228000 sltiu v0,t1,-32768
+ 407610: 1040ffe9 beqz v0,4075b8 <vfscanf+0x8d4>
+ 407614: 00000000 nop
+ 407618: 2408ffff li t0,-1
+ 40761c: 24098000 li t1,-32768
+ 407620: 1000ffb8 b 407504 <vfscanf+0x820>
+ 407624: a4a90000 sh t1,0(a1)
+ 407628: 0049102b sltu v0,v0,t1
+ 40762c: 1040fff4 beqz v0,407600 <vfscanf+0x91c>
+ 407630: 2902ffff slti v0,t0,-1
+ 407634: 1000ffeb b 4075e4 <vfscanf+0x900>
+ 407638: 00000000 nop
+ 40763c: 12a00007 beqz s5,40765c <vfscanf+0x978>
+ 407640: 00000000 nop
+ 407644: 11000003 beqz t0,407654 <vfscanf+0x970>
+ 407648: 00000000 nop
+ 40764c: 24080000 li t0,0
+ 407650: 2409ffff li t1,-1
+ 407654: 1000ffab b 407504 <vfscanf+0x820>
+ 407658: aca90000 sw t1,0(a1)
+ 40765c: 19000006 blez t0,407678 <vfscanf+0x994>
+ 407660: 00000000 nop
+ 407664: 24080000 li t0,0
+ 407668: 3c097fff lui t1,0x7fff
+ 40766c: 3529ffff ori t1,t1,0xffff
+ 407670: 1000ffa4 b 407504 <vfscanf+0x820>
+ 407674: aca90000 sw t1,0(a1)
+ 407678: 1100000b beqz t0,4076a8 <vfscanf+0x9c4>
+ 40767c: 2902ffff slti v0,t0,-1
+ 407680: 14400005 bnez v0,407698 <vfscanf+0x9b4>
+ 407684: 2402ffff li v0,-1
+ 407688: 1502fff2 bne t0,v0,407654 <vfscanf+0x970>
+ 40768c: 00000000 nop
+ 407690: 0520fff0 bltz t1,407654 <vfscanf+0x970>
+ 407694: 00000000 nop
+ 407698: 2408ffff li t0,-1
+ 40769c: 3c098000 lui t1,0x8000
+ 4076a0: 1000ff98 b 407504 <vfscanf+0x820>
+ 4076a4: aca90000 sw t1,0(a1)
+ 4076a8: 0521fff5 bgez t1,407680 <vfscanf+0x99c>
+ 4076ac: 00000000 nop
+ 4076b0: 1000ffec b 407664 <vfscanf+0x980>
+ 4076b4: 00000000 nop
+ 4076b8: 1000ff71 b 407480 <vfscanf+0x79c>
+ 4076bc: 0000a821 move s5,zero
+ 4076c0: a2300000 sb s0,0(s1)
+ 4076c4: 26310001 addiu s1,s1,1
+ 4076c8: 27a40018 addiu a0,sp,24
+ 4076cc: 8f998020 lw t9,-32736(gp)
+ 4076d0: 00000000 nop
+ 4076d4: 27396b24 addiu t9,t9,27428
+ 4076d8: 00000000 nop
+ 4076dc: 0320f809 jalr t9
+ 4076e0: 00000000 nop
+ 4076e4: 8fbc0010 lw gp,16(sp)
+ 4076e8: 00408021 move s0,v0
+ 4076ec: 24020030 li v0,48
+ 4076f0: 1202fff5 beq s0,v0,4076c8 <vfscanf+0x9e4>
+ 4076f4: 00102600 sll a0,s0,0x18
+ 4076f8: 1000ff2e b 4073b4 <vfscanf+0x6d0>
+ 4076fc: 00132e00 sll a1,s3,0x18
+ 407700: 1000ff27 b 4073a0 <vfscanf+0x6bc>
+ 407704: 2413000a li s3,10
+ 407708: 12600003 beqz s3,407718 <vfscanf+0xa34>
+ 40770c: 24020010 li v0,16
+ 407710: 1662ff21 bne s3,v0,407398 <vfscanf+0x6b4>
+ 407714: 00000000 nop
+ 407718: 27a40018 addiu a0,sp,24
+ 40771c: 8f998020 lw t9,-32736(gp)
+ 407720: 00000000 nop
+ 407724: 27396b24 addiu t9,t9,27428
+ 407728: 00000000 nop
+ 40772c: 0320f809 jalr t9
+ 407730: 00000000 nop
+ 407734: 8fbc0010 lw gp,16(sp)
+ 407738: 00408021 move s0,v0
+ 40773c: 24020078 li v0,120
+ 407740: 1202000e beq s0,v0,40777c <vfscanf+0xa98>
+ 407744: 24020058 li v0,88
+ 407748: 1202000c beq s0,v0,40777c <vfscanf+0xa98>
+ 40774c: 27a40018 addiu a0,sp,24
+ 407750: 8f998020 lw t9,-32736(gp)
+ 407754: 00000000 nop
+ 407758: 27396bfc addiu t9,t9,27644
+ 40775c: 00000000 nop
+ 407760: 0320f809 jalr t9
+ 407764: 00000000 nop
+ 407768: 8fbc0010 lw gp,16(sp)
+ 40776c: 1660ff0c bnez s3,4073a0 <vfscanf+0x6bc>
+ 407770: 24100030 li s0,48
+ 407774: 1000ff08 b 407398 <vfscanf+0x6b4>
+ 407778: 24130008 li s3,8
+ 40777c: 27a40018 addiu a0,sp,24
+ 407780: 8f998020 lw t9,-32736(gp)
+ 407784: 00000000 nop
+ 407788: 27396b24 addiu t9,t9,27428
+ 40778c: 00000000 nop
+ 407790: 0320f809 jalr t9
+ 407794: 00000000 nop
+ 407798: 8fbc0010 lw gp,16(sp)
+ 40779c: 00408021 move s0,v0
+ 4077a0: 1000fefd b 407398 <vfscanf+0x6b4>
+ 4077a4: 24130010 li s3,16
+ 4077a8: 27a40018 addiu a0,sp,24
+ 4077ac: a3b00038 sb s0,56(sp)
+ 4077b0: 27b10039 addiu s1,sp,57
+ 4077b4: 8f998020 lw t9,-32736(gp)
+ 4077b8: 00000000 nop
+ 4077bc: 27396b24 addiu t9,t9,27428
+ 4077c0: 00000000 nop
+ 4077c4: 0320f809 jalr t9
+ 4077c8: 00000000 nop
+ 4077cc: 8fbc0010 lw gp,16(sp)
+ 4077d0: 1000feee b 40738c <vfscanf+0x6a8>
+ 4077d4: 00408021 move s0,v0
+ 4077d8: 1000fed2 b 407324 <vfscanf+0x640>
+ 4077dc: 24160001 li s6,1
+ 4077e0: 26830003 addiu v1,s4,3
+ 4077e4: 0062a024 and s4,v1,v0
+ 4077e8: 02801021 move v0,s4
+ 4077ec: 8c430000 lw v1,0(v0)
+ 4077f0: 8fa2001c lw v0,28(sp)
+ 4077f4: 27a40018 addiu a0,sp,24
+ 4077f8: ac620000 sw v0,0(v1)
+ 4077fc: 8f998020 lw t9,-32736(gp)
+ 407800: 00000000 nop
+ 407804: 27396a68 addiu t9,t9,27240
+ 407808: 00000000 nop
+ 40780c: 0320f809 jalr t9
+ 407810: 00000000 nop
+ 407814: 8fbc0010 lw gp,16(sp)
+ 407818: 1000fd72 b 406de4 <vfscanf+0x100>
+ 40781c: 26940004 addiu s4,s4,4
+ 407820: 8f848018 lw a0,-32744(gp)
+ 407824: 00000000 nop
+ 407828: 248405a8 addiu a0,a0,1448
+ 40782c: 00852021 addu a0,a0,a1
+ 407830: 90840000 lbu a0,0(a0)
+ 407834: 8f968018 lw s6,-32744(gp)
+ 407838: 00000000 nop
+ 40783c: 26d605a8 addiu s6,s6,1448
+ 407840: 02c5b021 addu s6,s6,a1
+ 407844: 82d60000 lb s6,0(s6)
+ 407848: 1040fdda beqz v0,406fb4 <vfscanf+0x2d0>
+ 40784c: 26520001 addiu s2,s2,1
+ 407850: 92420000 lbu v0,0(s2)
+ 407854: 00000000 nop
+ 407858: 1462fdd6 bne v1,v0,406fb4 <vfscanf+0x2d0>
+ 40785c: 02c41021 addu v0,s6,a0
+ 407860: 00021600 sll v0,v0,0x18
+ 407864: 0002b603 sra s6,v0,0x18
+ 407868: 1000fdd2 b 406fb4 <vfscanf+0x2d0>
+ 40786c: 26520001 addiu s2,s2,1
+ 407870: 0000f021 move s8,zero
+ 407874: 1000fdaf b 406f34 <vfscanf+0x250>
+ 407878: 26520001 addiu s2,s2,1
+ 40787c: 2484003c addiu a0,a0,60
+ 407880: 8f9980a8 lw t9,-32600(gp)
+ 407884: 00000000 nop
+ 407888: 0320f809 jalr t9
+ 40788c: 00000000 nop
+ 407890: 8fbc0010 lw gp,16(sp)
+ 407894: 1000fd28 b 406d38 <vfscanf+0x54>
+ 407898: 00000000 nop
+ 40789c: 00000000 nop
+
+004078a0 <memcpy>:
+ 4078a0: 3c1c0fc0 lui gp,0xfc0
+ 4078a4: 279c09b0 addiu gp,gp,2480
+ 4078a8: 0399e021 addu gp,gp,t9
+ 4078ac: 10c00007 beqz a2,4078cc <memcpy+0x2c>
+ 4078b0: 00801821 move v1,a0
+ 4078b4: 90a20000 lbu v0,0(a1)
+ 4078b8: 24c6ffff addiu a2,a2,-1
+ 4078bc: a0620000 sb v0,0(v1)
+ 4078c0: 24a50001 addiu a1,a1,1
+ 4078c4: 14c0fffb bnez a2,4078b4 <memcpy+0x14>
+ 4078c8: 24630001 addiu v1,v1,1
+ 4078cc: 03e00008 jr ra
+ 4078d0: 00801021 move v0,a0
+ ...
+
+004078e0 <memset>:
+ 4078e0: 3c1c0fc0 lui gp,0xfc0
+ 4078e4: 279c0970 addiu gp,gp,2416
+ 4078e8: 0399e021 addu gp,gp,t9
+ 4078ec: 00801021 move v0,a0
+ 4078f0: 10c00005 beqz a2,407908 <memset+0x28>
+ 4078f4: 00401821 move v1,v0
+ 4078f8: 24c6ffff addiu a2,a2,-1
+ 4078fc: a0650000 sb a1,0(v1)
+ 407900: 14c0fffd bnez a2,4078f8 <memset+0x18>
+ 407904: 24630001 addiu v1,v1,1
+ 407908: 03e00008 jr ra
+ 40790c: 00000000 nop
+
+00407910 <strcasecmp>:
+ 407910: 3c1c0fc0 lui gp,0xfc0
+ 407914: 279c0940 addiu gp,gp,2368
+ 407918: 0399e021 addu gp,gp,t9
+ 40791c: 27bdffd0 addiu sp,sp,-48
+ 407920: afbc0010 sw gp,16(sp)
+ 407924: afb20020 sw s2,32(sp)
+ 407928: afb1001c sw s1,28(sp)
+ 40792c: afb00018 sw s0,24(sp)
+ 407930: afbf0028 sw ra,40(sp)
+ 407934: afbc0024 sw gp,36(sp)
+ 407938: 00808821 move s1,a0
+ 40793c: 00a09021 move s2,a1
+ 407940: 00008021 move s0,zero
+ 407944: 12320017 beq s1,s2,4079a4 <strcasecmp+0x94>
+ 407948: 00000000 nop
+ 40794c: 92240000 lbu a0,0(s1)
+ 407950: 8f998238 lw t9,-32200(gp)
+ 407954: 00000000 nop
+ 407958: 0320f809 jalr t9
+ 40795c: 00000000 nop
+ 407960: 8fbc0010 lw gp,16(sp)
+ 407964: 92440000 lbu a0,0(s2)
+ 407968: 00408021 move s0,v0
+ 40796c: 8f998238 lw t9,-32200(gp)
+ 407970: 00000000 nop
+ 407974: 0320f809 jalr t9
+ 407978: 00000000 nop
+ 40797c: 8fbc0010 lw gp,16(sp)
+ 407980: 02028023 subu s0,s0,v0
+ 407984: 12000007 beqz s0,4079a4 <strcasecmp+0x94>
+ 407988: 02001021 move v0,s0
+ 40798c: 8fbf0028 lw ra,40(sp)
+ 407990: 8fb20020 lw s2,32(sp)
+ 407994: 8fb1001c lw s1,28(sp)
+ 407998: 8fb00018 lw s0,24(sp)
+ 40799c: 03e00008 jr ra
+ 4079a0: 27bd0030 addiu sp,sp,48
+ 4079a4: 92220000 lbu v0,0(s1)
+ 4079a8: 26520001 addiu s2,s2,1
+ 4079ac: 1440ffe5 bnez v0,407944 <strcasecmp+0x34>
+ 4079b0: 26310001 addiu s1,s1,1
+ 4079b4: 1000fff5 b 40798c <strcasecmp+0x7c>
+ 4079b8: 02001021 move v0,s0
+ 4079bc: 00000000 nop
+
+004079c0 <strchr>:
+ 4079c0: 3c1c0fc0 lui gp,0xfc0
+ 4079c4: 279c0890 addiu gp,gp,2192
+ 4079c8: 0399e021 addu gp,gp,t9
+ 4079cc: 80860000 lb a2,0(a0)
+ 4079d0: 00051e00 sll v1,a1,0x18
+ 4079d4: 00031e03 sra v1,v1,0x18
+ 4079d8: 00801021 move v0,a0
+ 4079dc: 10c30003 beq a2,v1,4079ec <strchr+0x2c>
+ 4079e0: 24840001 addiu a0,a0,1
+ 4079e4: 14c0fff9 bnez a2,4079cc <strchr+0xc>
+ 4079e8: 00001021 move v0,zero
+ 4079ec: 03e00008 jr ra
+ 4079f0: 00000000 nop
+ ...
+
+00407a00 <strcmp>:
+ 407a00: 3c1c0fc0 lui gp,0xfc0
+ 407a04: 279c0850 addiu gp,gp,2128
+ 407a08: 0399e021 addu gp,gp,t9
+ 407a0c: 90830000 lbu v1,0(a0)
+ 407a10: 90a20000 lbu v0,0(a1)
+ 407a14: 24840001 addiu a0,a0,1
+ 407a18: 00621023 subu v0,v1,v0
+ 407a1c: 14400003 bnez v0,407a2c <strcmp+0x2c>
+ 407a20: 24a50001 addiu a1,a1,1
+ 407a24: 1460fff9 bnez v1,407a0c <strcmp+0xc>
+ 407a28: 00000000 nop
+ 407a2c: 03e00008 jr ra
+ 407a30: 00000000 nop
+ ...
+
+00407a40 <strcpy>:
+ 407a40: 3c1c0fc0 lui gp,0xfc0
+ 407a44: 279c0810 addiu gp,gp,2064
+ 407a48: 0399e021 addu gp,gp,t9
+ 407a4c: 00803021 move a2,a0
+ 407a50: 90a20000 lbu v0,0(a1)
+ 407a54: 24a50001 addiu a1,a1,1
+ 407a58: 00021e00 sll v1,v0,0x18
+ 407a5c: a0c20000 sb v0,0(a2)
+ 407a60: 1460fffb bnez v1,407a50 <strcpy+0x10>
+ 407a64: 24c60001 addiu a2,a2,1
+ 407a68: 03e00008 jr ra
+ 407a6c: 00801021 move v0,a0
+
+00407a70 <strlen>:
+ 407a70: 3c1c0fc0 lui gp,0xfc0
+ 407a74: 279c07e0 addiu gp,gp,2016
+ 407a78: 0399e021 addu gp,gp,t9
+ 407a7c: 80820000 lb v0,0(a0)
+ 407a80: 00000000 nop
+ 407a84: 10400006 beqz v0,407aa0 <strlen+0x30>
+ 407a88: 00801821 move v1,a0
+ 407a8c: 24630001 addiu v1,v1,1
+ 407a90: 80620000 lb v0,0(v1)
+ 407a94: 00000000 nop
+ 407a98: 1440fffc bnez v0,407a8c <strlen+0x1c>
+ 407a9c: 00000000 nop
+ 407aa0: 03e00008 jr ra
+ 407aa4: 00641023 subu v0,v1,a0
+ ...
+
+00407ab0 <strncasecmp>:
+ 407ab0: 3c1c0fc0 lui gp,0xfc0
+ 407ab4: 279c07a0 addiu gp,gp,1952
+ 407ab8: 0399e021 addu gp,gp,t9
+ 407abc: 27bdffd0 addiu sp,sp,-48
+ 407ac0: afbc0010 sw gp,16(sp)
+ 407ac4: afb30024 sw s3,36(sp)
+ 407ac8: afb20020 sw s2,32(sp)
+ 407acc: afb1001c sw s1,28(sp)
+ 407ad0: afb00018 sw s0,24(sp)
+ 407ad4: afbf002c sw ra,44(sp)
+ 407ad8: afbc0028 sw gp,40(sp)
+ 407adc: 00808821 move s1,a0
+ 407ae0: 00a09021 move s2,a1
+ 407ae4: 00c09821 move s3,a2
+ 407ae8: 00008021 move s0,zero
+ 407aec: 12600013 beqz s3,407b3c <strncasecmp+0x8c>
+ 407af0: 02001021 move v0,s0
+ 407af4: 12320018 beq s1,s2,407b58 <strncasecmp+0xa8>
+ 407af8: 2673ffff addiu s3,s3,-1
+ 407afc: 92240000 lbu a0,0(s1)
+ 407b00: 8f998238 lw t9,-32200(gp)
+ 407b04: 00000000 nop
+ 407b08: 0320f809 jalr t9
+ 407b0c: 00000000 nop
+ 407b10: 8fbc0010 lw gp,16(sp)
+ 407b14: 92440000 lbu a0,0(s2)
+ 407b18: 00408021 move s0,v0
+ 407b1c: 8f998238 lw t9,-32200(gp)
+ 407b20: 00000000 nop
+ 407b24: 0320f809 jalr t9
+ 407b28: 00000000 nop
+ 407b2c: 8fbc0010 lw gp,16(sp)
+ 407b30: 02028023 subu s0,s0,v0
+ 407b34: 12000008 beqz s0,407b58 <strncasecmp+0xa8>
+ 407b38: 02001021 move v0,s0
+ 407b3c: 8fbf002c lw ra,44(sp)
+ 407b40: 8fb30024 lw s3,36(sp)
+ 407b44: 8fb20020 lw s2,32(sp)
+ 407b48: 8fb1001c lw s1,28(sp)
+ 407b4c: 8fb00018 lw s0,24(sp)
+ 407b50: 03e00008 jr ra
+ 407b54: 27bd0030 addiu sp,sp,48
+ 407b58: 92220000 lbu v0,0(s1)
+ 407b5c: 26520001 addiu s2,s2,1
+ 407b60: 1440ffe2 bnez v0,407aec <strncasecmp+0x3c>
+ 407b64: 26310001 addiu s1,s1,1
+ 407b68: 1000fff4 b 407b3c <strncasecmp+0x8c>
+ 407b6c: 02001021 move v0,s0
+
+00407b70 <strncmp>:
+ 407b70: 3c1c0fc0 lui gp,0xfc0
+ 407b74: 279c06e0 addiu gp,gp,1760
+ 407b78: 0399e021 addu gp,gp,t9
+ 407b7c: 00001821 move v1,zero
+ 407b80: 24c6ffff addiu a2,a2,-1
+ 407b84: 2402ffff li v0,-1
+ 407b88: 10c20007 beq a2,v0,407ba8 <strncmp+0x38>
+ 407b8c: 00000000 nop
+ 407b90: 90870000 lbu a3,0(a0)
+ 407b94: 90a20000 lbu v0,0(a1)
+ 407b98: 24840001 addiu a0,a0,1
+ 407b9c: 00e21823 subu v1,a3,v0
+ 407ba0: 10600003 beqz v1,407bb0 <strncmp+0x40>
+ 407ba4: 24a50001 addiu a1,a1,1
+ 407ba8: 03e00008 jr ra
+ 407bac: 00601021 move v0,v1
+ 407bb0: 14e0fff3 bnez a3,407b80 <strncmp+0x10>
+ 407bb4: 00000000 nop
+ 407bb8: 1000fffb b 407ba8 <strncmp+0x38>
+ 407bbc: 00000000 nop
+
+00407bc0 <strncpy>:
+ 407bc0: 3c1c0fc0 lui gp,0xfc0
+ 407bc4: 279c0690 addiu gp,gp,1680
+ 407bc8: 0399e021 addu gp,gp,t9
+ 407bcc: 10c0000a beqz a2,407bf8 <strncpy+0x38>
+ 407bd0: 00803821 move a3,a0
+ 407bd4: 90a20000 lbu v0,0(a1)
+ 407bd8: 24c6ffff addiu a2,a2,-1
+ 407bdc: 00021e00 sll v1,v0,0x18
+ 407be0: a0e20000 sb v0,0(a3)
+ 407be4: 10600002 beqz v1,407bf0 <strncpy+0x30>
+ 407be8: 24e70001 addiu a3,a3,1
+ 407bec: 24a50001 addiu a1,a1,1
+ 407bf0: 14c0fff8 bnez a2,407bd4 <strncpy+0x14>
+ 407bf4: 00000000 nop
+ 407bf8: 03e00008 jr ra
+ 407bfc: 00801021 move v0,a0
+
+00407c00 <strrchr>:
+ 407c00: 3c1c0fc0 lui gp,0xfc0
+ 407c04: 279c0650 addiu gp,gp,1616
+ 407c08: 0399e021 addu gp,gp,t9
+ 407c0c: 00003021 move a2,zero
+ 407c10: 00051600 sll v0,a1,0x18
+ 407c14: 80830000 lb v1,0(a0)
+ 407c18: 00021603 sra v0,v0,0x18
+ 407c1c: 10620005 beq v1,v0,407c34 <strrchr+0x34>
+ 407c20: 00000000 nop
+ 407c24: 1460fffa bnez v1,407c10 <strrchr+0x10>
+ 407c28: 24840001 addiu a0,a0,1
+ 407c2c: 03e00008 jr ra
+ 407c30: 00c01021 move v0,a2
+ 407c34: 1000fffb b 407c24 <strrchr+0x24>
+ 407c38: 00803021 move a2,a0
+ 407c3c: 00000000 nop
+
+00407c40 <strtok>:
+ 407c40: 3c1c0fc0 lui gp,0xfc0
+ 407c44: 279c0610 addiu gp,gp,1552
+ 407c48: 0399e021 addu gp,gp,t9
+ 407c4c: 27bdffe0 addiu sp,sp,-32
+ 407c50: afbc0010 sw gp,16(sp)
+ 407c54: 8f86801c lw a2,-32740(gp)
+ 407c58: 00000000 nop
+ 407c5c: 24c60750 addiu a2,a2,1872
+ 407c60: afbf001c sw ra,28(sp)
+ 407c64: afbc0018 sw gp,24(sp)
+ 407c68: 8f9982b4 lw t9,-32076(gp)
+ 407c6c: 00000000 nop
+ 407c70: 0320f809 jalr t9
+ 407c74: 00000000 nop
+ 407c78: 8fbc0010 lw gp,16(sp)
+ 407c7c: 8fbf001c lw ra,28(sp)
+ 407c80: 00000000 nop
+ 407c84: 03e00008 jr ra
+ 407c88: 27bd0020 addiu sp,sp,32
+ 407c8c: 00000000 nop
+
+00407c90 <strtok_r>:
+ 407c90: 3c1c0fc0 lui gp,0xfc0
+ 407c94: 279c05c0 addiu gp,gp,1472
+ 407c98: 0399e021 addu gp,gp,t9
+ 407c9c: 27bdffd0 addiu sp,sp,-48
+ 407ca0: afbc0010 sw gp,16(sp)
+ 407ca4: afb00018 sw s0,24(sp)
+ 407ca8: 00808021 move s0,a0
+ 407cac: afb20020 sw s2,32(sp)
+ 407cb0: afb1001c sw s1,28(sp)
+ 407cb4: afbf0028 sw ra,40(sp)
+ 407cb8: afbc0024 sw gp,36(sp)
+ 407cbc: 00c09021 move s2,a2
+ 407cc0: 12000020 beqz s0,407d44 <strtok_r+0xb4>
+ 407cc4: 00a08821 move s1,a1
+ 407cc8: 02002021 move a0,s0
+ 407ccc: 8f99806c lw t9,-32660(gp)
+ 407cd0: 00000000 nop
+ 407cd4: 0320f809 jalr t9
+ 407cd8: 00000000 nop
+ 407cdc: 8fbc0010 lw gp,16(sp)
+ 407ce0: 02028021 addu s0,s0,v0
+ 407ce4: 82020000 lb v0,0(s0)
+ 407ce8: 02202821 move a1,s1
+ 407cec: 10400012 beqz v0,407d38 <strtok_r+0xa8>
+ 407cf0: 02002021 move a0,s0
+ 407cf4: 8f998038 lw t9,-32712(gp)
+ 407cf8: 00000000 nop
+ 407cfc: 0320f809 jalr t9
+ 407d00: 00000000 nop
+ 407d04: 8fbc0010 lw gp,16(sp)
+ 407d08: 10400003 beqz v0,407d18 <strtok_r+0x88>
+ 407d0c: 00000000 nop
+ 407d10: a0400000 sb zero,0(v0)
+ 407d14: 24420001 addiu v0,v0,1
+ 407d18: ae420000 sw v0,0(s2)
+ 407d1c: 02001021 move v0,s0
+ 407d20: 8fbf0028 lw ra,40(sp)
+ 407d24: 8fb20020 lw s2,32(sp)
+ 407d28: 8fb1001c lw s1,28(sp)
+ 407d2c: 8fb00018 lw s0,24(sp)
+ 407d30: 03e00008 jr ra
+ 407d34: 27bd0030 addiu sp,sp,48
+ 407d38: 00008021 move s0,zero
+ 407d3c: 1000fff6 b 407d18 <strtok_r+0x88>
+ 407d40: 00001021 move v0,zero
+ 407d44: 8e500000 lw s0,0(s2)
+ 407d48: 00000000 nop
+ 407d4c: 1600ffdf bnez s0,407ccc <strtok_r+0x3c>
+ 407d50: 02002021 move a0,s0
+ 407d54: 1000fff2 b 407d20 <strtok_r+0x90>
+ 407d58: 02001021 move v0,s0
+ 407d5c: 00000000 nop
+
+00407d60 <strerror>:
+ 407d60: 3c1c0fc0 lui gp,0xfc0
+ 407d64: 279c04f0 addiu gp,gp,1264
+ 407d68: 0399e021 addu gp,gp,t9
+ 407d6c: 27bdffd8 addiu sp,sp,-40
+ 407d70: afbc0010 sw gp,16(sp)
+ 407d74: afb00018 sw s0,24(sp)
+ 407d78: 8f90801c lw s0,-32740(gp)
+ 407d7c: 00000000 nop
+ 407d80: 26100760 addiu s0,s0,1888
+ 407d84: 00000000 nop
+ 407d88: 02002821 move a1,s0
+ 407d8c: 24060032 li a2,50
+ 407d90: afbf0020 sw ra,32(sp)
+ 407d94: afbc001c sw gp,28(sp)
+ 407d98: 8f998124 lw t9,-32476(gp)
+ 407d9c: 00000000 nop
+ 407da0: 0320f809 jalr t9
+ 407da4: 00000000 nop
+ 407da8: 8fbc0010 lw gp,16(sp)
+ 407dac: 8fbf0020 lw ra,32(sp)
+ 407db0: 02001021 move v0,s0
+ 407db4: 8fb00018 lw s0,24(sp)
+ 407db8: 03e00008 jr ra
+ 407dbc: 27bd0028 addiu sp,sp,40
+
+00407dc0 <_susv3_strerror_r>:
+ 407dc0: 3c1c0fc0 lui gp,0xfc0
+ 407dc4: 279c0490 addiu gp,gp,1168
+ 407dc8: 0399e021 addu gp,gp,t9
+ 407dcc: 27bdff88 addiu sp,sp,-120
+ 407dd0: afbc0018 sw gp,24(sp)
+ 407dd4: afb40068 sw s4,104(sp)
+ 407dd8: afb30064 sw s3,100(sp)
+ 407ddc: afb20060 sw s2,96(sp)
+ 407de0: afb00058 sw s0,88(sp)
+ 407de4: afbf0070 sw ra,112(sp)
+ 407de8: afbc006c sw gp,108(sp)
+ 407dec: afb1005c sw s1,92(sp)
+ 407df0: 00a0a021 move s4,a1
+ 407df4: 00c09021 move s2,a2
+ 407df8: 24130016 li s3,22
+ 407dfc: 00008021 move s0,zero
+ 407e00: 8f828018 lw v0,-32744(gp)
+ 407e04: 00000000 nop
+ 407e08: 244205e0 addiu v0,v0,1504
+ 407e0c: 00501021 addu v0,v0,s0
+ 407e10: 90420000 lbu v0,0(v0)
+ 407e14: 00000000 nop
+ 407e18: 10440009 beq v0,a0,407e40 <_susv3_strerror_r+0x80>
+ 407e1c: 2e02007e sltiu v0,s0,126
+ 407e20: 26100001 addiu s0,s0,1
+ 407e24: 2e02007e sltiu v0,s0,126
+ 407e28: 1440fff5 bnez v0,407e00 <_susv3_strerror_r+0x40>
+ 407e2c: 2402046d li v0,1133
+ 407e30: 3c107fff lui s0,0x7fff
+ 407e34: 10820057 beq a0,v0,407f94 <_susv3_strerror_r+0x1d4>
+ 407e38: 3610ffff ori s0,s0,0xffff
+ 407e3c: 2e02007e sltiu v0,s0,126
+ 407e40: 1040003b beqz v0,407f30 <_susv3_strerror_r+0x170>
+ 407e44: 000437c3 sra a2,a0,0x1f
+ 407e48: 8f918200 lw s1,-32256(gp)
+ 407e4c: 12000007 beqz s0,407e6c <_susv3_strerror_r+0xac>
+ 407e50: 00000000 nop
+ 407e54: 82220000 lb v0,0(s1)
+ 407e58: 00000000 nop
+ 407e5c: 1040004b beqz v0,407f8c <_susv3_strerror_r+0x1cc>
+ 407e60: 26310001 addiu s1,s1,1
+ 407e64: 1600fffb bnez s0,407e54 <_susv3_strerror_r+0x94>
+ 407e68: 00000000 nop
+ 407e6c: 82220000 lb v0,0(s1)
+ 407e70: 00000000 nop
+ 407e74: 1040002e beqz v0,407f30 <_susv3_strerror_r+0x170>
+ 407e78: 000437c3 sra a2,a0,0x1f
+ 407e7c: 00009821 move s3,zero
+ 407e80: 12800029 beqz s4,407f28 <_susv3_strerror_r+0x168>
+ 407e84: 00000000 nop
+ 407e88: 02202021 move a0,s1
+ 407e8c: 8f998068 lw t9,-32664(gp)
+ 407e90: 00000000 nop
+ 407e94: 0320f809 jalr t9
+ 407e98: 00000000 nop
+ 407e9c: 8fbc0018 lw gp,24(sp)
+ 407ea0: 24500001 addiu s0,v0,1
+ 407ea4: 0250102b sltu v0,s2,s0
+ 407ea8: 10400003 beqz v0,407eb8 <_susv3_strerror_r+0xf8>
+ 407eac: 00000000 nop
+ 407eb0: 02408021 move s0,s2
+ 407eb4: 24130022 li s3,34
+ 407eb8: 1200000a beqz s0,407ee4 <_susv3_strerror_r+0x124>
+ 407ebc: 02202821 move a1,s1
+ 407ec0: 02802021 move a0,s4
+ 407ec4: 02003021 move a2,s0
+ 407ec8: 8f998254 lw t9,-32172(gp)
+ 407ecc: 00000000 nop
+ 407ed0: 0320f809 jalr t9
+ 407ed4: 00000000 nop
+ 407ed8: 8fbc0018 lw gp,24(sp)
+ 407edc: 02901021 addu v0,s4,s0
+ 407ee0: a040ffff sb zero,-1(v0)
+ 407ee4: 12600008 beqz s3,407f08 <_susv3_strerror_r+0x148>
+ 407ee8: 02601021 move v0,s3
+ 407eec: 8f9980a0 lw t9,-32608(gp)
+ 407ef0: 00000000 nop
+ 407ef4: 0320f809 jalr t9
+ 407ef8: 00000000 nop
+ 407efc: 8fbc0018 lw gp,24(sp)
+ 407f00: ac530000 sw s3,0(v0)
+ 407f04: 02601021 move v0,s3
+ 407f08: 8fbf0070 lw ra,112(sp)
+ 407f0c: 8fb40068 lw s4,104(sp)
+ 407f10: 8fb30064 lw s3,100(sp)
+ 407f14: 8fb20060 lw s2,96(sp)
+ 407f18: 8fb1005c lw s1,92(sp)
+ 407f1c: 8fb00058 lw s0,88(sp)
+ 407f20: 03e00008 jr ra
+ 407f24: 27bd0078 addiu sp,sp,120
+ 407f28: 1000ffd7 b 407e88 <_susv3_strerror_r+0xc8>
+ 407f2c: 00009021 move s2,zero
+ 407f30: 00803821 move a3,a0
+ 407f34: 2402fff6 li v0,-10
+ 407f38: 27a40051 addiu a0,sp,81
+ 407f3c: afa20010 sw v0,16(sp)
+ 407f40: afa00014 sw zero,20(sp)
+ 407f44: 8f998278 lw t9,-32136(gp)
+ 407f48: 00000000 nop
+ 407f4c: 0320f809 jalr t9
+ 407f50: 00000000 nop
+ 407f54: 8fbc0018 lw gp,24(sp)
+ 407f58: 2451fff2 addiu s1,v0,-14
+ 407f5c: 8f858018 lw a1,-32744(gp)
+ 407f60: 00000000 nop
+ 407f64: 24a50660 addiu a1,a1,1632
+ 407f68: 02202021 move a0,s1
+ 407f6c: 2406000e li a2,14
+ 407f70: 8f998254 lw t9,-32172(gp)
+ 407f74: 00000000 nop
+ 407f78: 0320f809 jalr t9
+ 407f7c: 00000000 nop
+ 407f80: 8fbc0018 lw gp,24(sp)
+ 407f84: 1000ffbe b 407e80 <_susv3_strerror_r+0xc0>
+ 407f88: 00000000 nop
+ 407f8c: 1000ffb5 b 407e64 <_susv3_strerror_r+0xa4>
+ 407f90: 2610ffff addiu s0,s0,-1
+ 407f94: 1000ffa9 b 407e3c <_susv3_strerror_r+0x7c>
+ 407f98: 2410007a li s0,122
+ 407f9c: 00000000 nop
+
+00407fa0 <isatty>:
+ 407fa0: 3c1c0fc0 lui gp,0xfc0
+ 407fa4: 279c02b0 addiu gp,gp,688
+ 407fa8: 0399e021 addu gp,gp,t9
+ 407fac: 27bdffa8 addiu sp,sp,-88
+ 407fb0: afbc0010 sw gp,16(sp)
+ 407fb4: 27a50018 addiu a1,sp,24
+ 407fb8: afbf0054 sw ra,84(sp)
+ 407fbc: afbc0050 sw gp,80(sp)
+ 407fc0: 8f998130 lw t9,-32464(gp)
+ 407fc4: 00000000 nop
+ 407fc8: 0320f809 jalr t9
+ 407fcc: 00000000 nop
+ 407fd0: 8fbc0010 lw gp,16(sp)
+ 407fd4: 8fbf0054 lw ra,84(sp)
+ 407fd8: 2c420001 sltiu v0,v0,1
+ 407fdc: 03e00008 jr ra
+ 407fe0: 27bd0058 addiu sp,sp,88
+ ...
+
+00407ff0 <tcgetattr>:
+ 407ff0: 3c1c0fc0 lui gp,0xfc0
+ 407ff4: 279c0260 addiu gp,gp,608
+ 407ff8: 0399e021 addu gp,gp,t9
+ 407ffc: 27bdffb0 addiu sp,sp,-80
+ 408000: afbc0010 sw gp,16(sp)
+ 408004: afb00040 sw s0,64(sp)
+ 408008: 27a60018 addiu a2,sp,24
+ 40800c: 00a08021 move s0,a1
+ 408010: 2405540d li a1,21517
+ 408014: afb10044 sw s1,68(sp)
+ 408018: afbf004c sw ra,76(sp)
+ 40801c: afbc0048 sw gp,72(sp)
+ 408020: 8f9982b8 lw t9,-32072(gp)
+ 408024: 00000000 nop
+ 408028: 0320f809 jalr t9
+ 40802c: 00000000 nop
+ 408030: 8fbc0010 lw gp,16(sp)
+ 408034: 8fa50020 lw a1,32(sp)
+ 408038: 8fa60024 lw a2,36(sp)
+ 40803c: 8fa3001c lw v1,28(sp)
+ 408040: 93a70028 lbu a3,40(sp)
+ 408044: 00408821 move s1,v0
+ 408048: 8fa20018 lw v0,24(sp)
+ 40804c: 26040011 addiu a0,s0,17
+ 408050: ae030004 sw v1,4(s0)
+ 408054: ae050008 sw a1,8(s0)
+ 408058: ae06000c sw a2,12(s0)
+ 40805c: 27a50029 addiu a1,sp,41
+ 408060: a2070010 sb a3,16(s0)
+ 408064: ae020000 sw v0,0(s0)
+ 408068: 24060017 li a2,23
+ 40806c: 8f998208 lw t9,-32248(gp)
+ 408070: 00000000 nop
+ 408074: 0320f809 jalr t9
+ 408078: 00000000 nop
+ 40807c: 8fbc0010 lw gp,16(sp)
+ 408080: 00402021 move a0,v0
+ 408084: 00002821 move a1,zero
+ 408088: 24060009 li a2,9
+ 40808c: 8f99813c lw t9,-32452(gp)
+ 408090: 00000000 nop
+ 408094: 0320f809 jalr t9
+ 408098: 00000000 nop
+ 40809c: 8fbc0010 lw gp,16(sp)
+ 4080a0: 02201021 move v0,s1
+ 4080a4: 8fbf004c lw ra,76(sp)
+ 4080a8: 8fb10044 lw s1,68(sp)
+ 4080ac: 8fb00040 lw s0,64(sp)
+ 4080b0: 03e00008 jr ra
+ 4080b4: 27bd0050 addiu sp,sp,80
+ ...
+
+004080c0 <gethostbyname>:
+ 4080c0: 3c1c0fc0 lui gp,0xfc0
+ 4080c4: 279c0190 addiu gp,gp,400
+ 4080c8: 0399e021 addu gp,gp,t9
+ 4080cc: 27bdffc8 addiu sp,sp,-56
+ 4080d0: afbc0018 sw gp,24(sp)
+ 4080d4: afbf0030 sw ra,48(sp)
+ 4080d8: afb00028 sw s0,40(sp)
+ 4080dc: afbc002c sw gp,44(sp)
+ 4080e0: 00808021 move s0,a0
+ 4080e4: 8f998110 lw t9,-32496(gp)
+ 4080e8: 00000000 nop
+ 4080ec: 0320f809 jalr t9
+ 4080f0: 00000000 nop
+ 4080f4: 8fbc0018 lw gp,24(sp)
+ 4080f8: 27a30020 addiu v1,sp,32
+ 4080fc: 02002021 move a0,s0
+ 408100: 8f85801c lw a1,-32740(gp)
+ 408104: 00000000 nop
+ 408108: 24a507a0 addiu a1,a1,1952
+ 40810c: 8f86801c lw a2,-32740(gp)
+ 408110: 00000000 nop
+ 408114: 24c607b4 addiu a2,a2,1972
+ 408118: 2407014c li a3,332
+ 40811c: afa30010 sw v1,16(sp)
+ 408120: afa20014 sw v0,20(sp)
+ 408124: 8f99821c lw t9,-32228(gp)
+ 408128: 00000000 nop
+ 40812c: 0320f809 jalr t9
+ 408130: 00000000 nop
+ 408134: 8fbc0018 lw gp,24(sp)
+ 408138: 8fa20020 lw v0,32(sp)
+ 40813c: 8fbf0030 lw ra,48(sp)
+ 408140: 8fb00028 lw s0,40(sp)
+ 408144: 03e00008 jr ra
+ 408148: 27bd0038 addiu sp,sp,56
+ 40814c: 00000000 nop
+
+00408150 <gethostbyname_r>:
+ 408150: 3c1c0fc0 lui gp,0xfc0
+ 408154: 279c0100 addiu gp,gp,256
+ 408158: 0399e021 addu gp,gp,t9
+ 40815c: 27bdff80 addiu sp,sp,-128
+ 408160: afbc0020 sw gp,32(sp)
+ 408164: afbe0074 sw s8,116(sp)
+ 408168: afb7006c sw s7,108(sp)
+ 40816c: afb60068 sw s6,104(sp)
+ 408170: afb40060 sw s4,96(sp)
+ 408174: afb20058 sw s2,88(sp)
+ 408178: afb10054 sw s1,84(sp)
+ 40817c: afbf0078 sw ra,120(sp)
+ 408180: afbc0070 sw gp,112(sp)
+ 408184: afb50064 sw s5,100(sp)
+ 408188: afb3005c sw s3,92(sp)
+ 40818c: afb00050 sw s0,80(sp)
+ 408190: 0080b821 move s7,a0
+ 408194: 00a0a021 move s4,a1
+ 408198: 00c09021 move s2,a2
+ 40819c: 00e08821 move s1,a3
+ 4081a0: 8fb60094 lw s6,148(sp)
+ 4081a4: 8f9982bc lw t9,-32068(gp)
+ 4081a8: 00000000 nop
+ 4081ac: 0320f809 jalr t9
+ 4081b0: 00000000 nop
+ 4081b4: 8fbc0020 lw gp,32(sp)
+ 4081b8: 8fa20090 lw v0,144(sp)
+ 4081bc: 0000f021 move s8,zero
+ 4081c0: ac400000 sw zero,0(v0)
+ 4081c4: 12e0001c beqz s7,408238 <gethostbyname_r+0xe8>
+ 4081c8: 24020016 li v0,22
+ 4081cc: 8fa30090 lw v1,144(sp)
+ 4081d0: 02e02021 move a0,s7
+ 4081d4: 24050002 li a1,2
+ 4081d8: 02803021 move a2,s4
+ 4081dc: 02403821 move a3,s2
+ 4081e0: afb10010 sw s1,16(sp)
+ 4081e4: afa30014 sw v1,20(sp)
+ 4081e8: afb60018 sw s6,24(sp)
+ 4081ec: 8f99812c lw t9,-32468(gp)
+ 4081f0: 00000000 nop
+ 4081f4: 0320f809 jalr t9
+ 4081f8: 00000000 nop
+ 4081fc: 8fbc0020 lw gp,32(sp)
+ 408200: 00408021 move s0,v0
+ 408204: 1200000c beqz s0,408238 <gethostbyname_r+0xe8>
+ 408208: 00000000 nop
+ 40820c: 8ec30000 lw v1,0(s6)
+ 408210: 24020001 li v0,1
+ 408214: 1062001e beq v1,v0,408290 <gethostbyname_r+0x140>
+ 408218: 2402ffff li v0,-1
+ 40821c: 28620002 slti v0,v1,2
+ 408220: 104000b8 beqz v0,408504 <gethostbyname_r+0x3b4>
+ 408224: 24020004 li v0,4
+ 408228: 2402ffff li v0,-1
+ 40822c: 1062000e beq v1,v0,408268 <gethostbyname_r+0x118>
+ 408230: 00000000 nop
+ 408234: 02001021 move v0,s0
+ 408238: 8fbf0078 lw ra,120(sp)
+ 40823c: 8fbe0074 lw s8,116(sp)
+ 408240: 8fb7006c lw s7,108(sp)
+ 408244: 8fb60068 lw s6,104(sp)
+ 408248: 8fb50064 lw s5,100(sp)
+ 40824c: 8fb40060 lw s4,96(sp)
+ 408250: 8fb3005c lw s3,92(sp)
+ 408254: 8fb20058 lw s2,88(sp)
+ 408258: 8fb10054 lw s1,84(sp)
+ 40825c: 8fb00050 lw s0,80(sp)
+ 408260: 03e00008 jr ra
+ 408264: 27bd0080 addiu sp,sp,128
+ 408268: 8f9980a0 lw t9,-32608(gp)
+ 40826c: 00000000 nop
+ 408270: 0320f809 jalr t9
+ 408274: 00000000 nop
+ 408278: 8fbc0020 lw gp,32(sp)
+ 40827c: 8c430000 lw v1,0(v0)
+ 408280: 24020002 li v0,2
+ 408284: 1462ffeb bne v1,v0,408234 <gethostbyname_r+0xe4>
+ 408288: 00000000 nop
+ 40828c: 2402ffff li v0,-1
+ 408290: 2e230004 sltiu v1,s1,4
+ 408294: aec20000 sw v0,0(s6)
+ 408298: 1460ffe7 bnez v1,408238 <gethostbyname_r+0xe8>
+ 40829c: 24020022 li v0,34
+ 4082a0: 2631fffc addiu s1,s1,-4
+ 4082a4: 2e230008 sltiu v1,s1,8
+ 4082a8: 0240a821 move s5,s2
+ 4082ac: 1460ffe2 bnez v1,408238 <gethostbyname_r+0xe8>
+ 4082b0: 26520004 addiu s2,s2,4
+ 4082b4: 2631fff8 addiu s1,s1,-8
+ 4082b8: 02409821 move s3,s2
+ 4082bc: 2e230100 sltiu v1,s1,256
+ 4082c0: ae750000 sw s5,0(s3)
+ 4082c4: ae600004 sw zero,4(s3)
+ 4082c8: 1460ffdb bnez v1,408238 <gethostbyname_r+0xe8>
+ 4082cc: 26720008 addiu s2,s3,8
+ 4082d0: 02402021 move a0,s2
+ 4082d4: 02e02821 move a1,s7
+ 4082d8: 02203021 move a2,s1
+ 4082dc: 8f998188 lw t9,-32376(gp)
+ 4082e0: 00000000 nop
+ 4082e4: 0320f809 jalr t9
+ 4082e8: 00000000 nop
+ 4082ec: 8fbc0020 lw gp,32(sp)
+ 4082f0: 02e02021 move a0,s7
+ 4082f4: 02a02821 move a1,s5
+ 4082f8: 8f998148 lw t9,-32440(gp)
+ 4082fc: 00000000 nop
+ 408300: 0320f809 jalr t9
+ 408304: 00000000 nop
+ 408308: 8fbc0020 lw gp,32(sp)
+ 40830c: 1040000b beqz v0,40833c <gethostbyname_r+0x1ec>
+ 408310: 24030002 li v1,2
+ 408314: ae830008 sw v1,8(s4)
+ 408318: 24030004 li v1,4
+ 40831c: ae920000 sw s2,0(s4)
+ 408320: ae83000c sw v1,12(s4)
+ 408324: ae930010 sw s3,16(s4)
+ 408328: 8fa30090 lw v1,144(sp)
+ 40832c: 00001021 move v0,zero
+ 408330: ac740000 sw s4,0(v1)
+ 408334: 1000ffc0 b 408238 <gethostbyname_r+0xe8>
+ 408338: aec00000 sw zero,0(s6)
+ 40833c: 8f9081c0 lw s0,-32320(gp)
+ 408340: 00000000 nop
+ 408344: 02002021 move a0,s0
+ 408348: 8f9980a8 lw t9,-32600(gp)
+ 40834c: 00000000 nop
+ 408350: 0320f809 jalr t9
+ 408354: 00000000 nop
+ 408358: 8fbc0020 lw gp,32(sp)
+ 40835c: 02002021 move a0,s0
+ 408360: 8f9080d4 lw s0,-32556(gp)
+ 408364: 00000000 nop
+ 408368: 8e100000 lw s0,0(s0)
+ 40836c: 8f99811c lw t9,-32484(gp)
+ 408370: 00000000 nop
+ 408374: 0320f809 jalr t9
+ 408378: 00000000 nop
+ 40837c: 8fbc0020 lw gp,32(sp)
+ 408380: 27a20048 addiu v0,sp,72
+ 408384: 02003021 move a2,s0
+ 408388: 02402021 move a0,s2
+ 40838c: afa20010 sw v0,16(sp)
+ 408390: 8f878114 lw a3,-32492(gp)
+ 408394: 27a20028 addiu v0,sp,40
+ 408398: 24050001 li a1,1
+ 40839c: afa20014 sw v0,20(sp)
+ 4083a0: 8f998224 lw t9,-32220(gp)
+ 4083a4: 00000000 nop
+ 4083a8: 0320f809 jalr t9
+ 4083ac: 00000000 nop
+ 4083b0: 8fbc0020 lw gp,32(sp)
+ 4083b4: 00408021 move s0,v0
+ 4083b8: 27de0001 addiu s8,s8,1
+ 4083bc: 02203021 move a2,s1
+ 4083c0: 0600004c bltz s0,4084f4 <gethostbyname_r+0x3a4>
+ 4083c4: 02402021 move a0,s2
+ 4083c8: 8fa50028 lw a1,40(sp)
+ 4083cc: 8f998188 lw t9,-32376(gp)
+ 4083d0: 00000000 nop
+ 4083d4: 0320f809 jalr t9
+ 4083d8: 00000000 nop
+ 4083dc: 8fbc0020 lw gp,32(sp)
+ 4083e0: 8fa40028 lw a0,40(sp)
+ 4083e4: 8f998030 lw t9,-32720(gp)
+ 4083e8: 00000000 nop
+ 4083ec: 0320f809 jalr t9
+ 4083f0: 00000000 nop
+ 4083f4: 8fbc0020 lw gp,32(sp)
+ 4083f8: 8fa3002c lw v1,44(sp)
+ 4083fc: 24020005 li v0,5
+ 408400: 02403021 move a2,s2
+ 408404: 10620025 beq v1,v0,40849c <gethostbyname_r+0x34c>
+ 408408: 02203821 move a3,s1
+ 40840c: 24100001 li s0,1
+ 408410: 1070000a beq v1,s0,40843c <gethostbyname_r+0x2ec>
+ 408414: 02a02021 move a0,s5
+ 408418: 8fa40048 lw a0,72(sp)
+ 40841c: 8f998030 lw t9,-32720(gp)
+ 408420: 00000000 nop
+ 408424: 0320f809 jalr t9
+ 408428: 00000000 nop
+ 40842c: 8fbc0020 lw gp,32(sp)
+ 408430: 24020002 li v0,2
+ 408434: 1000ff80 b 408238 <gethostbyname_r+0xe8>
+ 408438: aed00000 sw s0,0(s6)
+ 40843c: 8fa5003c lw a1,60(sp)
+ 408440: 24060004 li a2,4
+ 408444: 8f998254 lw t9,-32172(gp)
+ 408448: 00000000 nop
+ 40844c: 0320f809 jalr t9
+ 408450: 00000000 nop
+ 408454: 8fbc0020 lw gp,32(sp)
+ 408458: 24020002 li v0,2
+ 40845c: 8fa40048 lw a0,72(sp)
+ 408460: ae820008 sw v0,8(s4)
+ 408464: 24020004 li v0,4
+ 408468: ae920000 sw s2,0(s4)
+ 40846c: ae82000c sw v0,12(s4)
+ 408470: ae930010 sw s3,16(s4)
+ 408474: 8f998030 lw t9,-32720(gp)
+ 408478: 00000000 nop
+ 40847c: 0320f809 jalr t9
+ 408480: 00000000 nop
+ 408484: 8fbc0020 lw gp,32(sp)
+ 408488: 8fa20090 lw v0,144(sp)
+ 40848c: 00000000 nop
+ 408490: ac540000 sw s4,0(v0)
+ 408494: 1000ff68 b 408238 <gethostbyname_r+0xe8>
+ 408498: 00001021 move v0,zero
+ 40849c: 8fa40048 lw a0,72(sp)
+ 4084a0: 8fa50040 lw a1,64(sp)
+ 4084a4: 8f9981a4 lw t9,-32348(gp)
+ 4084a8: 00000000 nop
+ 4084ac: 0320f809 jalr t9
+ 4084b0: 00000000 nop
+ 4084b4: 8fbc0020 lw gp,32(sp)
+ 4084b8: 8fa40048 lw a0,72(sp)
+ 4084bc: 00408021 move s0,v0
+ 4084c0: 8f998030 lw t9,-32720(gp)
+ 4084c4: 00000000 nop
+ 4084c8: 0320f809 jalr t9
+ 4084cc: 00000000 nop
+ 4084d0: 8fbc0020 lw gp,32(sp)
+ 4084d4: 06000003 bltz s0,4084e4 <gethostbyname_r+0x394>
+ 4084d8: 2bc20006 slti v0,s8,6
+ 4084dc: 1440ff97 bnez v0,40833c <gethostbyname_r+0x1ec>
+ 4084e0: 00000000 nop
+ 4084e4: 24030003 li v1,3
+ 4084e8: 2402ffff li v0,-1
+ 4084ec: 1000ff52 b 408238 <gethostbyname_r+0xe8>
+ 4084f0: aec30000 sw v1,0(s6)
+ 4084f4: 24030001 li v1,1
+ 4084f8: 24020002 li v0,2
+ 4084fc: 1000ff4e b 408238 <gethostbyname_r+0xe8>
+ 408500: aec30000 sw v1,0(s6)
+ 408504: 1062ff61 beq v1,v0,40828c <gethostbyname_r+0x13c>
+ 408508: 00000000 nop
+ 40850c: 1000ff4a b 408238 <gethostbyname_r+0xe8>
+ 408510: 02001021 move v0,s0
+ ...
+
+00408520 <socket>:
+ 408520: 3c1c0fc0 lui gp,0xfc0
+ 408524: 279cfd30 addiu gp,gp,-720
+ 408528: 0399e021 addu gp,gp,t9
+ 40852c: 27bdffd8 addiu sp,sp,-40
+ 408530: afbc0010 sw gp,16(sp)
+ 408534: afb1001c sw s1,28(sp)
+ 408538: afb00018 sw s0,24(sp)
+ 40853c: afbf0024 sw ra,36(sp)
+ 408540: afbc0020 sw gp,32(sp)
+ 408544: 00808821 move s1,a0
+ 408548: 00a08021 move s0,a1
+ 40854c: 00c01821 move v1,a2
+ 408550: 02202021 move a0,s1
+ 408554: 02002821 move a1,s0
+ 408558: 00603021 move a2,v1
+ 40855c: 24021057 li v0,4183
+ 408560: 0000000c syscall
+ 408564: 00408021 move s0,v0
+ 408568: 00e01821 move v1,a3
+ 40856c: 10600009 beqz v1,408594 <socket+0x74>
+ 408570: 02001021 move v0,s0
+ 408574: 8f9980a0 lw t9,-32608(gp)
+ 408578: 00000000 nop
+ 40857c: 0320f809 jalr t9
+ 408580: 00000000 nop
+ 408584: 8fbc0010 lw gp,16(sp)
+ 408588: 00401821 move v1,v0
+ 40858c: ac700000 sw s0,0(v1)
+ 408590: 2402ffff li v0,-1
+ 408594: 8fbf0024 lw ra,36(sp)
+ 408598: 8fb1001c lw s1,28(sp)
+ 40859c: 8fb00018 lw s0,24(sp)
+ 4085a0: 03e00008 jr ra
+ 4085a4: 27bd0028 addiu sp,sp,40
+ ...
+
+004085b0 <getnetbyname>:
+ 4085b0: 3c1c0fc0 lui gp,0xfc0
+ 4085b4: 279cfca0 addiu gp,gp,-864
+ 4085b8: 0399e021 addu gp,gp,t9
+ 4085bc: 27bdffd0 addiu sp,sp,-48
+ 4085c0: afbc0010 sw gp,16(sp)
+ 4085c4: afb20020 sw s2,32(sp)
+ 4085c8: 00809021 move s2,a0
+ 4085cc: 8f84827c lw a0,-32132(gp)
+ 4085d0: 00000000 nop
+ 4085d4: 8c840000 lw a0,0(a0)
+ 4085d8: afbf0028 sw ra,40(sp)
+ 4085dc: afbc0024 sw gp,36(sp)
+ 4085e0: afb1001c sw s1,28(sp)
+ 4085e4: afb00018 sw s0,24(sp)
+ 4085e8: 8f998050 lw t9,-32688(gp)
+ 4085ec: 00000000 nop
+ 4085f0: 0320f809 jalr t9
+ 4085f4: 00000000 nop
+ 4085f8: 8fbc0010 lw gp,16(sp)
+ 4085fc: 00000000 nop
+ 408600: 8f998264 lw t9,-32156(gp)
+ 408604: 00000000 nop
+ 408608: 0320f809 jalr t9
+ 40860c: 00000000 nop
+ 408610: 8fbc0010 lw gp,16(sp)
+ 408614: 00408821 move s1,v0
+ 408618: 1220001e beqz s1,408694 <getnetbyname+0xe4>
+ 40861c: 02402821 move a1,s2
+ 408620: 8e240000 lw a0,0(s1)
+ 408624: 8f998120 lw t9,-32480(gp)
+ 408628: 00000000 nop
+ 40862c: 0320f809 jalr t9
+ 408630: 00000000 nop
+ 408634: 8fbc0010 lw gp,16(sp)
+ 408638: 10400016 beqz v0,408694 <getnetbyname+0xe4>
+ 40863c: 00000000 nop
+ 408640: 8e300004 lw s0,4(s1)
+ 408644: 00000000 nop
+ 408648: 8e020000 lw v0,0(s0)
+ 40864c: 00000000 nop
+ 408650: 1040ffeb beqz v0,408600 <getnetbyname+0x50>
+ 408654: 00000000 nop
+ 408658: 8e040000 lw a0,0(s0)
+ 40865c: 02402821 move a1,s2
+ 408660: 8f998120 lw t9,-32480(gp)
+ 408664: 00000000 nop
+ 408668: 0320f809 jalr t9
+ 40866c: 00000000 nop
+ 408670: 8fbc0010 lw gp,16(sp)
+ 408674: 10400007 beqz v0,408694 <getnetbyname+0xe4>
+ 408678: 26100004 addiu s0,s0,4
+ 40867c: 8e020000 lw v0,0(s0)
+ 408680: 00000000 nop
+ 408684: 1440fff4 bnez v0,408658 <getnetbyname+0xa8>
+ 408688: 00000000 nop
+ 40868c: 1000ffdc b 408600 <getnetbyname+0x50>
+ 408690: 00000000 nop
+ 408694: 8f82827c lw v0,-32132(gp)
+ 408698: 00000000 nop
+ 40869c: 8c420000 lw v0,0(v0)
+ 4086a0: 00000000 nop
+ 4086a4: 10400008 beqz v0,4086c8 <getnetbyname+0x118>
+ 4086a8: 00000000 nop
+ 4086ac: 02201021 move v0,s1
+ 4086b0: 8fbf0028 lw ra,40(sp)
+ 4086b4: 8fb20020 lw s2,32(sp)
+ 4086b8: 8fb1001c lw s1,28(sp)
+ 4086bc: 8fb00018 lw s0,24(sp)
+ 4086c0: 03e00008 jr ra
+ 4086c4: 27bd0030 addiu sp,sp,48
+ 4086c8: 8f998280 lw t9,-32128(gp)
+ 4086cc: 00000000 nop
+ 4086d0: 0320f809 jalr t9
+ 4086d4: 00000000 nop
+ 4086d8: 8fbc0010 lw gp,16(sp)
+ 4086dc: 1000fff4 b 4086b0 <getnetbyname+0x100>
+ 4086e0: 02201021 move v0,s1
+ ...
+
+004086f0 <_stdlib_strto_ll>:
+ 4086f0: 3c1c0fc0 lui gp,0xfc0
+ 4086f4: 279cfb60 addiu gp,gp,-1184
+ 4086f8: 0399e021 addu gp,gp,t9
+ 4086fc: 27bdffc0 addiu sp,sp,-64
+ 408700: afbc0010 sw gp,16(sp)
+ 408704: afb30024 sw s3,36(sp)
+ 408708: 00809821 move s3,a0
+ 40870c: afb70034 sw s7,52(sp)
+ 408710: afb60030 sw s6,48(sp)
+ 408714: afb40028 sw s4,40(sp)
+ 408718: afb20020 sw s2,32(sp)
+ 40871c: 00a0b021 move s6,a1
+ 408720: 00c09021 move s2,a2
+ 408724: 00e0b821 move s7,a3
+ 408728: 0260a021 move s4,s3
+ 40872c: afbf003c sw ra,60(sp)
+ 408730: afbc0038 sw gp,56(sp)
+ 408734: afb5002c sw s5,44(sp)
+ 408738: afb1001c sw s1,28(sp)
+ 40873c: afb00018 sw s0,24(sp)
+ 408740: 82640000 lb a0,0(s3)
+ 408744: 8f998210 lw t9,-32240(gp)
+ 408748: 00000000 nop
+ 40874c: 0320f809 jalr t9
+ 408750: 00000000 nop
+ 408754: 8fbc0010 lw gp,16(sp)
+ 408758: 10400003 beqz v0,408768 <_stdlib_strto_ll+0x78>
+ 40875c: 2402002b li v0,43
+ 408760: 1000fff7 b 408740 <_stdlib_strto_ll+0x50>
+ 408764: 26730001 addiu s3,s3,1
+ 408768: 82630000 lb v1,0(s3)
+ 40876c: 00000000 nop
+ 408770: 106200b4 beq v1,v0,408a44 <_stdlib_strto_ll+0x354>
+ 408774: 0000a821 move s5,zero
+ 408778: 2402002d li v0,45
+ 40877c: 106200b0 beq v1,v0,408a40 <_stdlib_strto_ll+0x350>
+ 408780: 00000000 nop
+ 408784: 2402ffef li v0,-17
+ 408788: 02421024 and v0,s2,v0
+ 40878c: 10400097 beqz v0,4089ec <_stdlib_strto_ll+0x2fc>
+ 408790: 24020030 li v0,48
+ 408794: 2642fffe addiu v0,s2,-2
+ 408798: 2c420023 sltiu v0,v0,35
+ 40879c: 00008021 move s0,zero
+ 4087a0: 10400022 beqz v0,40882c <_stdlib_strto_ll+0x13c>
+ 4087a4: 00008821 move s1,zero
+ 4087a8: 92640000 lbu a0,0(s3)
+ 4087ac: 00000000 nop
+ 4087b0: 2482ffd0 addiu v0,a0,-48
+ 4087b4: 00041e00 sll v1,a0,0x18
+ 4087b8: 304200ff andi v0,v0,0xff
+ 4087bc: 00031e03 sra v1,v1,0x18
+ 4087c0: 28650041 slti a1,v1,65
+ 4087c4: 2c43000a sltiu v1,v0,10
+ 4087c8: 14600006 bnez v1,4087e4 <_stdlib_strto_ll+0xf4>
+ 4087cc: 0040c021 move t8,v0
+ 4087d0: 34820020 ori v0,a0,0x20
+ 4087d4: 2442ffa9 addiu v0,v0,-87
+ 4087d8: 10a00002 beqz a1,4087e4 <_stdlib_strto_ll+0xf4>
+ 4087dc: 305800ff andi t8,v0,0xff
+ 4087e0: 24180028 li t8,40
+ 4087e4: 00101600 sll v0,s0,0x18
+ 4087e8: 00117a02 srl t7,s1,0x8
+ 4087ec: 01e27825 or t7,t7,v0
+ 4087f0: 3c0203ff lui v0,0x3ff
+ 4087f4: 3442ffff ori v0,v0,0xffff
+ 4087f8: 3c1900ff lui t9,0xff
+ 4087fc: 001257c3 sra t2,s2,0x1f
+ 408800: 0050202b sltu a0,v0,s0
+ 408804: 0312102a slt v0,t8,s2
+ 408808: 322300ff andi v1,s1,0xff
+ 40880c: 00107202 srl t6,s0,0x8
+ 408810: 3739ffff ori t9,t9,0xffff
+ 408814: 02405821 move t3,s2
+ 408818: 02403821 move a3,s2
+ 40881c: 01403021 move a2,t2
+ 408820: 03004821 move t1,t8
+ 408824: 14400032 bnez v0,4088f0 <_stdlib_strto_ll+0x200>
+ 408828: 00004021 move t0,zero
+ 40882c: 12c00002 beqz s6,408838 <_stdlib_strto_ll+0x148>
+ 408830: 00000000 nop
+ 408834: aed40000 sw s4,0(s6)
+ 408838: 3c048000 lui a0,0x8000
+ 40883c: 12a00028 beqz s5,4088e0 <_stdlib_strto_ll+0x1f0>
+ 408840: 24050000 li a1,0
+ 408844: 12e00005 beqz s7,40885c <_stdlib_strto_ll+0x16c>
+ 408848: 0090102b sltu v0,a0,s0
+ 40884c: 1440001a bnez v0,4088b8 <_stdlib_strto_ll+0x1c8>
+ 408850: 00000000 nop
+ 408854: 12040016 beq s0,a0,4088b0 <_stdlib_strto_ll+0x1c0>
+ 408858: 00b1102b sltu v0,a1,s1
+ 40885c: 00112823 negu a1,s1
+ 408860: 00102023 negu a0,s0
+ 408864: 0005102b sltu v0,zero,a1
+ 408868: 12a0000e beqz s5,4088a4 <_stdlib_strto_ll+0x1b4>
+ 40886c: 00822023 subu a0,a0,v0
+ 408870: 8fbf003c lw ra,60(sp)
+ 408874: 8fb70034 lw s7,52(sp)
+ 408878: 8fb60030 lw s6,48(sp)
+ 40887c: 8fb5002c lw s5,44(sp)
+ 408880: 8fb40028 lw s4,40(sp)
+ 408884: 8fb30024 lw s3,36(sp)
+ 408888: 8fb20020 lw s2,32(sp)
+ 40888c: 8fb1001c lw s1,28(sp)
+ 408890: 8fb00018 lw s0,24(sp)
+ 408894: 00801021 move v0,a0
+ 408898: 00a01821 move v1,a1
+ 40889c: 03e00008 jr ra
+ 4088a0: 27bd0040 addiu sp,sp,64
+ 4088a4: 02002021 move a0,s0
+ 4088a8: 1000fff1 b 408870 <_stdlib_strto_ll+0x180>
+ 4088ac: 02202821 move a1,s1
+ 4088b0: 1040ffea beqz v0,40885c <_stdlib_strto_ll+0x16c>
+ 4088b4: 00000000 nop
+ 4088b8: 00808021 move s0,a0
+ 4088bc: 00a08821 move s1,a1
+ 4088c0: 8f9980a0 lw t9,-32608(gp)
+ 4088c4: 00000000 nop
+ 4088c8: 0320f809 jalr t9
+ 4088cc: 00000000 nop
+ 4088d0: 8fbc0010 lw gp,16(sp)
+ 4088d4: 24030022 li v1,34
+ 4088d8: 1000ffe0 b 40885c <_stdlib_strto_ll+0x16c>
+ 4088dc: ac430000 sw v1,0(v0)
+ 4088e0: 3c047fff lui a0,0x7fff
+ 4088e4: 3484ffff ori a0,a0,0xffff
+ 4088e8: 1000ffd6 b 408844 <_stdlib_strto_ll+0x154>
+ 4088ec: 2405ffff li a1,-1
+ 4088f0: 26740001 addiu s4,s3,1
+ 4088f4: 1080002d beqz a0,4089ac <_stdlib_strto_ll+0x2bc>
+ 4088f8: 02809821 move s3,s4
+ 4088fc: 00720018 mult v1,s2
+ 408900: 00006021 move t4,zero
+ 408904: 00002021 move a0,zero
+ 408908: 00001812 mflo v1
+ 40890c: 00781821 addu v1,v1,t8
+ 408910: 00031202 srl v0,v1,0x8
+ 408914: 01ea0018 mult t7,t2
+ 408918: 00406821 move t5,v0
+ 40891c: 00602821 move a1,v1
+ 408920: 00003012 mflo a2
+ ...
+ 40892c: 01eb0019 multu t7,t3
+ 408930: 00008010 mfhi s0
+ 408934: 00008812 mflo s1
+ 408938: 02068021 addu s0,s0,a2
+ 40893c: 022d1821 addu v1,s1,t5
+ 408940: 016e0018 mult t3,t6
+ 408944: 006d402b sltu t0,v1,t5
+ 408948: 00113a00 sll a3,s1,0x8
+ 40894c: 00001012 mflo v0
+ 408950: 02028021 addu s0,s0,v0
+ 408954: 00103200 sll a2,s0,0x8
+ 408958: 00111602 srl v0,s1,0x18
+ 40895c: 00c23025 or a2,a2,v0
+ 408960: 020c1021 addu v0,s0,t4
+ 408964: 00481021 addu v0,v0,t0
+ 408968: 00e58821 addu s1,a3,a1
+ 40896c: 0225402b sltu t0,s1,a1
+ 408970: 00c48021 addu s0,a2,a0
+ 408974: 0322102b sltu v0,t9,v0
+ 408978: 1040ff8b beqz v0,4087a8 <_stdlib_strto_ll+0xb8>
+ 40897c: 02088021 addu s0,s0,t0
+ 408980: 8f9980a0 lw t9,-32608(gp)
+ 408984: 00000000 nop
+ 408988: 0320f809 jalr t9
+ 40898c: 00000000 nop
+ 408990: 8fbc0010 lw gp,16(sp)
+ 408994: 24030022 li v1,34
+ 408998: 2410ffff li s0,-1
+ 40899c: 2411ffff li s1,-1
+ 4089a0: 02b7a824 and s5,s5,s7
+ 4089a4: 1000ff80 b 4087a8 <_stdlib_strto_ll+0xb8>
+ 4089a8: ac430000 sw v1,0(v0)
+ 4089ac: 02260018 mult s1,a2
+ 4089b0: 00002812 mflo a1
+ ...
+ 4089bc: 02270019 multu s1,a3
+ 4089c0: 00001010 mfhi v0
+ 4089c4: 00001812 mflo v1
+ 4089c8: 00451021 addu v0,v0,a1
+ 4089cc: 00698821 addu s1,v1,t1
+ 4089d0: 00f00018 mult a3,s0
+ 4089d4: 00002012 mflo a0
+ 4089d8: 00441021 addu v0,v0,a0
+ 4089dc: 00488021 addu s0,v0,t0
+ 4089e0: 0229202b sltu a0,s1,t1
+ 4089e4: 1000ff70 b 4087a8 <_stdlib_strto_ll+0xb8>
+ 4089e8: 02048021 addu s0,s0,a0
+ 4089ec: 82630000 lb v1,0(s3)
+ 4089f0: 00000000 nop
+ 4089f4: 10620006 beq v1,v0,408a10 <_stdlib_strto_ll+0x320>
+ 4089f8: 2652000a addiu s2,s2,10
+ 4089fc: 2a420011 slti v0,s2,17
+ 408a00: 1440ff65 bnez v0,408798 <_stdlib_strto_ll+0xa8>
+ 408a04: 2642fffe addiu v0,s2,-2
+ 408a08: 1000ff62 b 408794 <_stdlib_strto_ll+0xa4>
+ 408a0c: 24120010 li s2,16
+ 408a10: 26740001 addiu s4,s3,1
+ 408a14: 92820000 lbu v0,0(s4)
+ 408a18: 24030078 li v1,120
+ 408a1c: 34420020 ori v0,v0,0x20
+ 408a20: 00021600 sll v0,v0,0x18
+ 408a24: 00021603 sra v0,v0,0x18
+ 408a28: 02809821 move s3,s4
+ 408a2c: 1443fff3 bne v0,v1,4089fc <_stdlib_strto_ll+0x30c>
+ 408a30: 2652fffe addiu s2,s2,-2
+ 408a34: 26930001 addiu s3,s4,1
+ 408a38: 1000fff0 b 4089fc <_stdlib_strto_ll+0x30c>
+ 408a3c: 00129040 sll s2,s2,0x1
+ 408a40: 24150001 li s5,1
+ 408a44: 1000ff4f b 408784 <_stdlib_strto_ll+0x94>
+ 408a48: 26730001 addiu s3,s3,1
+ 408a4c: 00000000 nop
+
+00408a50 <exit>:
+ 408a50: 3c1c0fc0 lui gp,0xfc0
+ 408a54: 279cf800 addiu gp,gp,-2048
+ 408a58: 0399e021 addu gp,gp,t9
+ 408a5c: 27bdffd8 addiu sp,sp,-40
+ 408a60: afbc0010 sw gp,16(sp)
+ 408a64: afb00018 sw s0,24(sp)
+ 408a68: 8f90817c lw s0,-32388(gp)
+ 408a6c: afb1001c sw s1,28(sp)
+ 408a70: 00808821 move s1,a0
+ 408a74: 02002021 move a0,s0
+ 408a78: afbf0024 sw ra,36(sp)
+ 408a7c: afbc0020 sw gp,32(sp)
+ 408a80: 8f9980a8 lw t9,-32600(gp)
+ 408a84: 00000000 nop
+ 408a88: 0320f809 jalr t9
+ 408a8c: 00000000 nop
+ 408a90: 8fbc0010 lw gp,16(sp)
+ 408a94: 00000000 nop
+ 408a98: 8f8281cc lw v0,-32308(gp)
+ 408a9c: 00000000 nop
+ 408aa0: 8c420000 lw v0,0(v0)
+ 408aa4: 00000000 nop
+ 408aa8: 10400005 beqz v0,408ac0 <exit+0x70>
+ 408aac: 02202021 move a0,s1
+ 408ab0: 0040c821 move t9,v0
+ 408ab4: 0320f809 jalr t9
+ 408ab8: 00000000 nop
+ 408abc: 8fbc0010 lw gp,16(sp)
+ 408ac0: 02002021 move a0,s0
+ 408ac4: 8f99811c lw t9,-32484(gp)
+ 408ac8: 00000000 nop
+ 408acc: 0320f809 jalr t9
+ 408ad0: 00000000 nop
+ 408ad4: 8fbc0010 lw gp,16(sp)
+ 408ad8: 00000000 nop
+ 408adc: 8f8280f0 lw v0,-32528(gp)
+ 408ae0: 00000000 nop
+ 408ae4: 10400006 beqz v0,408b00 <exit+0xb0>
+ 408ae8: 02202021 move a0,s1
+ 408aec: 0040c821 move t9,v0
+ 408af0: 0320f809 jalr t9
+ 408af4: 00000000 nop
+ 408af8: 8fbc0010 lw gp,16(sp)
+ 408afc: 02202021 move a0,s1
+ 408b00: 8f998070 lw t9,-32656(gp)
+ 408b04: 00000000 nop
+ 408b08: 0320f809 jalr t9
+ 408b0c: 00000000 nop
+ 408b10: 8fbc0010 lw gp,16(sp)
+ ...
+ 408b20: 3c1c0fc0 lui gp,0xfc0
+ 408b24: 279cf730 addiu gp,gp,-2256
+ 408b28: 0399e021 addu gp,gp,t9
+ 408b2c: 27bdffd8 addiu sp,sp,-40
+ 408b30: afbc0010 sw gp,16(sp)
+ 408b34: afb1001c sw s1,28(sp)
+ 408b38: afb00018 sw s0,24(sp)
+ 408b3c: afbf0024 sw ra,36(sp)
+ 408b40: afbc0020 sw gp,32(sp)
+ 408b44: 8f998018 lw t9,-32744(gp)
+ 408b48: 00000000 nop
+ 408b4c: 27398fd8 addiu t9,t9,-28712
+ 408b50: 00000000 nop
+ 408b54: 0320f809 jalr t9
+ 408b58: 00000000 nop
+ 408b5c: 8fbc0010 lw gp,16(sp)
+ 408b60: 00408021 move s0,v0
+ 408b64: 32030fff andi v1,s0,0xfff
+ 408b68: 24021000 li v0,4096
+ 408b6c: 00438823 subu s1,v0,v1
+ 408b70: 10600009 beqz v1,408b98 <exit+0x148>
+ 408b74: 02202021 move a0,s1
+ 408b78: 8f998018 lw t9,-32744(gp)
+ 408b7c: 00000000 nop
+ 408b80: 27398fd8 addiu t9,t9,-28712
+ 408b84: 00000000 nop
+ 408b88: 0320f809 jalr t9
+ 408b8c: 00000000 nop
+ 408b90: 8fbc0010 lw gp,16(sp)
+ 408b94: 02118021 addu s0,s0,s1
+ 408b98: 02001021 move v0,s0
+ 408b9c: 8fbf0024 lw ra,36(sp)
+ 408ba0: 8fb1001c lw s1,28(sp)
+ 408ba4: 8fb00018 lw s0,24(sp)
+ 408ba8: 03e00008 jr ra
+ 408bac: 27bd0028 addiu sp,sp,40
+ 408bb0: 3c1c0fc0 lui gp,0xfc0
+ 408bb4: 279cf6a0 addiu gp,gp,-2400
+ 408bb8: 0399e021 addu gp,gp,t9
+ 408bbc: 27bdffe0 addiu sp,sp,-32
+ 408bc0: afbc0010 sw gp,16(sp)
+ 408bc4: 24043000 li a0,12288
+ 408bc8: 24020400 li v0,1024
+ 408bcc: afbf001c sw ra,28(sp)
+ 408bd0: afbc0018 sw gp,24(sp)
+ 408bd4: 8f81801c lw at,-32740(gp)
+ 408bd8: 00000000 nop
+ 408bdc: 24210908 addiu at,at,2312
+ 408be0: ac220000 sw v0,0(at)
+ 408be4: 8f998018 lw t9,-32744(gp)
+ 408be8: 00000000 nop
+ 408bec: 27398b20 addiu t9,t9,-29920
+ 408bf0: 00000000 nop
+ 408bf4: 0320f809 jalr t9
+ 408bf8: 00000000 nop
+ 408bfc: 8fbc0010 lw gp,16(sp)
+ 408c00: 00401821 move v1,v0
+ 408c04: 00602021 move a0,v1
+ 408c08: 8f81801c lw at,-32740(gp)
+ 408c0c: 00000000 nop
+ 408c10: 24210904 addiu at,at,2308
+ 408c14: ac230000 sw v1,0(at)
+ 408c18: 1060002d beqz v1,408cd0 <exit+0x280>
+ 408c1c: 00002821 move a1,zero
+ 408c20: 8f82801c lw v0,-32740(gp)
+ 408c24: 00000000 nop
+ 408c28: 24420908 addiu v0,v0,2312
+ 408c2c: 8c420000 lw v0,0(v0)
+ 408c30: 00000000 nop
+ 408c34: 00023040 sll a2,v0,0x1
+ 408c38: 00c23021 addu a2,a2,v0
+ 408c3c: 00063080 sll a2,a2,0x2
+ 408c40: 8f99813c lw t9,-32452(gp)
+ 408c44: 00000000 nop
+ 408c48: 0320f809 jalr t9
+ 408c4c: 00000000 nop
+ 408c50: 8fbc0010 lw gp,16(sp)
+ 408c54: 00000000 nop
+ 408c58: 8f82801c lw v0,-32740(gp)
+ 408c5c: 00000000 nop
+ 408c60: 24420904 addiu v0,v0,2308
+ 408c64: 8c420000 lw v0,0(v0)
+ 408c68: 00000000 nop
+ 408c6c: ac400000 sw zero,0(v0)
+ 408c70: 8f83801c lw v1,-32740(gp)
+ 408c74: 00000000 nop
+ 408c78: 24630904 addiu v1,v1,2308
+ 408c7c: 8c630000 lw v1,0(v1)
+ 408c80: 24020001 li v0,1
+ 408c84: ac600004 sw zero,4(v1)
+ 408c88: ac600008 sw zero,8(v1)
+ 408c8c: 24030001 li v1,1
+ 408c90: 8f81801c lw at,-32740(gp)
+ 408c94: 00000000 nop
+ 408c98: 242109a4 addiu at,at,2468
+ 408c9c: ac230000 sw v1,0(at)
+ 408ca0: 8f83801c lw v1,-32740(gp)
+ 408ca4: 00000000 nop
+ 408ca8: 24630904 addiu v1,v1,2308
+ 408cac: 8c630000 lw v1,0(v1)
+ 408cb0: 8f81801c lw at,-32740(gp)
+ 408cb4: 00000000 nop
+ 408cb8: 2421090c addiu at,at,2316
+ 408cbc: ac200000 sw zero,0(at)
+ 408cc0: 8f81801c lw at,-32740(gp)
+ 408cc4: 00000000 nop
+ 408cc8: 24210900 addiu at,at,2304
+ 408ccc: ac230000 sw v1,0(at)
+ 408cd0: 8fbf001c lw ra,28(sp)
+ 408cd4: 00000000 nop
+ 408cd8: 03e00008 jr ra
+ 408cdc: 27bd0020 addiu sp,sp,32
+ 408ce0: 3c1c0fc0 lui gp,0xfc0
+ 408ce4: 279cf570 addiu gp,gp,-2704
+ 408ce8: 0399e021 addu gp,gp,t9
+ 408cec: 27bdffc8 addiu sp,sp,-56
+ 408cf0: afbc0010 sw gp,16(sp)
+ 408cf4: afb40028 sw s4,40(sp)
+ 408cf8: afb30024 sw s3,36(sp)
+ 408cfc: afbf0030 sw ra,48(sp)
+ 408d00: afbc002c sw gp,44(sp)
+ 408d04: afb20020 sw s2,32(sp)
+ 408d08: afb1001c sw s1,28(sp)
+ 408d0c: afb00018 sw s0,24(sp)
+ 408d10: 0080a021 move s4,a0
+ 408d14: 8f998018 lw t9,-32744(gp)
+ 408d18: 00000000 nop
+ 408d1c: 27398b20 addiu t9,t9,-29920
+ 408d20: 00000000 nop
+ 408d24: 0320f809 jalr t9
+ 408d28: 00000000 nop
+ 408d2c: 8fbc0010 lw gp,16(sp)
+ 408d30: 00409821 move s3,v0
+ 408d34: 1260008a beqz s3,408f60 <exit+0x510>
+ 408d38: 02742021 addu a0,s3,s4
+ 408d3c: 8f85801c lw a1,-32740(gp)
+ 408d40: 00000000 nop
+ 408d44: 24a50900 addiu a1,a1,2304
+ 408d48: 8ca50000 lw a1,0(a1)
+ 408d4c: 00000000 nop
+ 408d50: 00851023 subu v0,a0,a1
+ 408d54: 0440009e bltz v0,408fd0 <exit+0x580>
+ 408d58: 00000000 nop
+ 408d5c: 00021303 sra v0,v0,0xc
+ 408d60: 8f83801c lw v1,-32740(gp)
+ 408d64: 00000000 nop
+ 408d68: 24630908 addiu v1,v1,2312
+ 408d6c: 8c630000 lw v1,0(v1)
+ 408d70: 24420001 addiu v0,v0,1
+ 408d74: 0062102b sltu v0,v1,v0
+ 408d78: 1040006a beqz v0,408f24 <exit+0x4d4>
+ 408d7c: 00609021 move s2,v1
+ 408d80: 00851023 subu v0,a0,a1
+ 408d84: 04400090 bltz v0,408fc8 <exit+0x578>
+ 408d88: 00000000 nop
+ 408d8c: 00021303 sra v0,v0,0xc
+ 408d90: 24420001 addiu v0,v0,1
+ 408d94: 0242102b sltu v0,s2,v0
+ 408d98: 14400089 bnez v0,408fc0 <exit+0x570>
+ 408d9c: 00121040 sll v0,s2,0x1
+ 408da0: 00521021 addu v0,v0,s2
+ 408da4: 00028080 sll s0,v0,0x2
+ 408da8: 02002021 move a0,s0
+ 408dac: 8f998018 lw t9,-32744(gp)
+ 408db0: 00000000 nop
+ 408db4: 27398b20 addiu t9,t9,-29920
+ 408db8: 00000000 nop
+ 408dbc: 0320f809 jalr t9
+ 408dc0: 00000000 nop
+ 408dc4: 8fbc0010 lw gp,16(sp)
+ 408dc8: 00408821 move s1,v0
+ 408dcc: 12200072 beqz s1,408f98 <exit+0x548>
+ 408dd0: 02003021 move a2,s0
+ 408dd4: 02202021 move a0,s1
+ 408dd8: 00002821 move a1,zero
+ 408ddc: 8f99813c lw t9,-32452(gp)
+ 408de0: 00000000 nop
+ 408de4: 0320f809 jalr t9
+ 408de8: 00000000 nop
+ 408dec: 8fbc0010 lw gp,16(sp)
+ 408df0: 00000000 nop
+ 408df4: 8f82801c lw v0,-32740(gp)
+ 408df8: 00000000 nop
+ 408dfc: 24420908 addiu v0,v0,2312
+ 408e00: 8c420000 lw v0,0(v0)
+ 408e04: 8f85801c lw a1,-32740(gp)
+ 408e08: 00000000 nop
+ 408e0c: 24a50904 addiu a1,a1,2308
+ 408e10: 8ca50000 lw a1,0(a1)
+ 408e14: 00023040 sll a2,v0,0x1
+ 408e18: 00c23021 addu a2,a2,v0
+ 408e1c: 00063080 sll a2,a2,0x2
+ 408e20: 02202021 move a0,s1
+ 408e24: 8f998254 lw t9,-32172(gp)
+ 408e28: 00000000 nop
+ 408e2c: 0320f809 jalr t9
+ 408e30: 00000000 nop
+ 408e34: 8fbc0010 lw gp,16(sp)
+ 408e38: 00000000 nop
+ 408e3c: 8f85801c lw a1,-32740(gp)
+ 408e40: 00000000 nop
+ 408e44: 24a50904 addiu a1,a1,2308
+ 408e48: 8ca50000 lw a1,0(a1)
+ 408e4c: 8f82801c lw v0,-32740(gp)
+ 408e50: 00000000 nop
+ 408e54: 24420900 addiu v0,v0,2304
+ 408e58: 8c420000 lw v0,0(v0)
+ 408e5c: 00000000 nop
+ 408e60: 00a21023 subu v0,a1,v0
+ 408e64: 0440004a bltz v0,408f90 <exit+0x540>
+ 408e68: 00000000 nop
+ 408e6c: 00021303 sra v0,v0,0xc
+ 408e70: 00021840 sll v1,v0,0x1
+ 408e74: 00621821 addu v1,v1,v0
+ 408e78: 00031880 sll v1,v1,0x2
+ 408e7c: 00711821 addu v1,v1,s1
+ 408e80: ac60000c sw zero,12(v1)
+ 408e84: 8f82801c lw v0,-32740(gp)
+ 408e88: 00000000 nop
+ 408e8c: 24420900 addiu v0,v0,2304
+ 408e90: 8c420000 lw v0,0(v0)
+ 408e94: 00000000 nop
+ 408e98: 00a22023 subu a0,a1,v0
+ 408e9c: 0480003a bltz a0,408f88 <exit+0x538>
+ 408ea0: 00000000 nop
+ 408ea4: 8f82801c lw v0,-32740(gp)
+ 408ea8: 00000000 nop
+ 408eac: 24420908 addiu v0,v0,2312
+ 408eb0: 8c420000 lw v0,0(v0)
+ 408eb4: 00042303 sra a0,a0,0xc
+ 408eb8: 00021840 sll v1,v0,0x1
+ 408ebc: 00621821 addu v1,v1,v0
+ 408ec0: 00041040 sll v0,a0,0x1
+ 408ec4: 00441021 addu v0,v0,a0
+ 408ec8: 00031880 sll v1,v1,0x2
+ 408ecc: 00021080 sll v0,v0,0x2
+ 408ed0: 24630fff addiu v1,v1,4095
+ 408ed4: 00511021 addu v0,v0,s1
+ 408ed8: 00031b02 srl v1,v1,0xc
+ 408edc: ac430010 sw v1,16(v0)
+ 408ee0: 00a02021 move a0,a1
+ 408ee4: 8f81801c lw at,-32740(gp)
+ 408ee8: 00000000 nop
+ 408eec: 24210904 addiu at,at,2308
+ 408ef0: ac310000 sw s1,0(at)
+ 408ef4: 8f998018 lw t9,-32744(gp)
+ 408ef8: 00000000 nop
+ 408efc: 2739981c addiu t9,t9,-26596
+ 408f00: 00000000 nop
+ 408f04: 0320f809 jalr t9
+ 408f08: 00000000 nop
+ 408f0c: 8fbc0010 lw gp,16(sp)
+ 408f10: 00000000 nop
+ 408f14: 8f81801c lw at,-32740(gp)
+ 408f18: 00000000 nop
+ 408f1c: 24210908 addiu at,at,2312
+ 408f20: ac320000 sw s2,0(at)
+ 408f24: 8f82801c lw v0,-32740(gp)
+ 408f28: 00000000 nop
+ 408f2c: 24420900 addiu v0,v0,2304
+ 408f30: 8c420000 lw v0,0(v0)
+ 408f34: 02741821 addu v1,s3,s4
+ 408f38: 00621023 subu v0,v1,v0
+ 408f3c: 04400010 bltz v0,408f80 <exit+0x530>
+ 408f40: 00000000 nop
+ 408f44: 00021303 sra v0,v0,0xc
+ 408f48: 24420001 addiu v0,v0,1
+ 408f4c: 8f81801c lw at,-32740(gp)
+ 408f50: 00000000 nop
+ 408f54: 24210910 addiu at,at,2320
+ 408f58: ac220000 sw v0,0(at)
+ 408f5c: 02601021 move v0,s3
+ 408f60: 8fbf0030 lw ra,48(sp)
+ 408f64: 8fb40028 lw s4,40(sp)
+ 408f68: 8fb30024 lw s3,36(sp)
+ 408f6c: 8fb20020 lw s2,32(sp)
+ 408f70: 8fb1001c lw s1,28(sp)
+ 408f74: 8fb00018 lw s0,24(sp)
+ 408f78: 03e00008 jr ra
+ 408f7c: 27bd0038 addiu sp,sp,56
+ 408f80: 1000fff0 b 408f44 <exit+0x4f4>
+ 408f84: 24420fff addiu v0,v0,4095
+ 408f88: 1000ffc6 b 408ea4 <exit+0x454>
+ 408f8c: 24840fff addiu a0,a0,4095
+ 408f90: 1000ffb6 b 408e6c <exit+0x41c>
+ 408f94: 24420fff addiu v0,v0,4095
+ 408f98: 00142023 negu a0,s4
+ 408f9c: 8f998018 lw t9,-32744(gp)
+ 408fa0: 00000000 nop
+ 408fa4: 27398fd8 addiu t9,t9,-28712
+ 408fa8: 00000000 nop
+ 408fac: 0320f809 jalr t9
+ 408fb0: 00000000 nop
+ 408fb4: 8fbc0010 lw gp,16(sp)
+ 408fb8: 1000ffe9 b 408f60 <exit+0x510>
+ 408fbc: 00001021 move v0,zero
+ 408fc0: 1000ff6f b 408d80 <exit+0x330>
+ 408fc4: 00129040 sll s2,s2,0x1
+ 408fc8: 1000ff70 b 408d8c <exit+0x33c>
+ 408fcc: 24420fff addiu v0,v0,4095
+ 408fd0: 1000ff62 b 408d5c <exit+0x30c>
+ 408fd4: 24420fff addiu v0,v0,4095
+ 408fd8: 3c1c0fc0 lui gp,0xfc0
+ 408fdc: 279cf278 addiu gp,gp,-3464
+ 408fe0: 0399e021 addu gp,gp,t9
+ 408fe4: 27bdffe0 addiu sp,sp,-32
+ 408fe8: afbc0010 sw gp,16(sp)
+ 408fec: afbf001c sw ra,28(sp)
+ 408ff0: afbc0018 sw gp,24(sp)
+ 408ff4: 8f998150 lw t9,-32432(gp)
+ 408ff8: 00000000 nop
+ 408ffc: 0320f809 jalr t9
+ 409000: 00000000 nop
+ 409004: 8fbc0010 lw gp,16(sp)
+ 409008: 00402021 move a0,v0
+ 40900c: 2403ffff li v1,-1
+ 409010: 10830005 beq a0,v1,409028 <exit+0x5d8>
+ 409014: 00000000 nop
+ 409018: 8fbf001c lw ra,28(sp)
+ 40901c: 00000000 nop
+ 409020: 03e00008 jr ra
+ 409024: 27bd0020 addiu sp,sp,32
+ 409028: 1000fffb b 409018 <exit+0x5c8>
+ 40902c: 00001021 move v0,zero
+
+00409030 <malloc>:
+ 409030: 3c1c0fc0 lui gp,0xfc0
+ 409034: 279cf220 addiu gp,gp,-3552
+ 409038: 0399e021 addu gp,gp,t9
+ 40903c: 27bdffd8 addiu sp,sp,-40
+ 409040: afbc0010 sw gp,16(sp)
+ 409044: afb00018 sw s0,24(sp)
+ 409048: 8f90801c lw s0,-32740(gp)
+ 40904c: 00000000 nop
+ 409050: 261001b0 addiu s0,s0,432
+ 409054: afb1001c sw s1,28(sp)
+ 409058: 00808821 move s1,a0
+ 40905c: 02002021 move a0,s0
+ 409060: afbf0024 sw ra,36(sp)
+ 409064: afbc0020 sw gp,32(sp)
+ 409068: 8f9980a8 lw t9,-32600(gp)
+ 40906c: 00000000 nop
+ 409070: 0320f809 jalr t9
+ 409074: 00000000 nop
+ 409078: 8fbc0010 lw gp,16(sp)
+ 40907c: 02202021 move a0,s1
+ 409080: 8f998018 lw t9,-32744(gp)
+ 409084: 00000000 nop
+ 409088: 273990d0 addiu t9,t9,-28464
+ 40908c: 00000000 nop
+ 409090: 0320f809 jalr t9
+ 409094: 00000000 nop
+ 409098: 8fbc0010 lw gp,16(sp)
+ 40909c: 02002021 move a0,s0
+ 4090a0: 00408821 move s1,v0
+ 4090a4: 8f99811c lw t9,-32484(gp)
+ 4090a8: 00000000 nop
+ 4090ac: 0320f809 jalr t9
+ 4090b0: 00000000 nop
+ 4090b4: 8fbc0010 lw gp,16(sp)
+ 4090b8: 8fbf0024 lw ra,36(sp)
+ 4090bc: 02201021 move v0,s1
+ 4090c0: 8fb00018 lw s0,24(sp)
+ 4090c4: 8fb1001c lw s1,28(sp)
+ 4090c8: 03e00008 jr ra
+ 4090cc: 27bd0028 addiu sp,sp,40
+ 4090d0: 3c1c0fc0 lui gp,0xfc0
+ 4090d4: 279cf180 addiu gp,gp,-3712
+ 4090d8: 0399e021 addu gp,gp,t9
+ 4090dc: 27bdffd0 addiu sp,sp,-48
+ 4090e0: afbc0010 sw gp,16(sp)
+ 4090e4: afb00018 sw s0,24(sp)
+ 4090e8: 00808021 move s0,a0
+ 4090ec: afbf002c sw ra,44(sp)
+ 4090f0: afbc0028 sw gp,40(sp)
+ 4090f4: afb30024 sw s3,36(sp)
+ 4090f8: afb20020 sw s2,32(sp)
+ 4090fc: afb1001c sw s1,28(sp)
+ 409100: 1200004b beqz s0,409230 <malloc+0x200>
+ 409104: 00001021 move v0,zero
+ 409108: 2e020008 sltiu v0,s0,8
+ 40910c: 10400002 beqz v0,409118 <malloc+0xe8>
+ 409110: 00000000 nop
+ 409114: 24100008 li s0,8
+ 409118: 8f82801c lw v0,-32740(gp)
+ 40911c: 00000000 nop
+ 409120: 244209a4 addiu v0,v0,2468
+ 409124: 8c420000 lw v0,0(v0)
+ 409128: 00000000 nop
+ 40912c: 10400189 beqz v0,409754 <malloc+0x724>
+ 409130: 00000000 nop
+ 409134: 2e020801 sltiu v0,s0,2049
+ 409138: 10400098 beqz v0,40939c <malloc+0x36c>
+ 40913c: 26030fff addiu v1,s0,4095
+ 409140: 2610ffff addiu s0,s0,-1
+ 409144: 00108042 srl s0,s0,0x1
+ 409148: 12000004 beqz s0,40915c <malloc+0x12c>
+ 40914c: 24110001 li s1,1
+ 409150: 00108042 srl s0,s0,0x1
+ 409154: 1600fffe bnez s0,409150 <malloc+0x120>
+ 409158: 26310001 addiu s1,s1,1
+ 40915c: 001190c0 sll s2,s1,0x3
+ 409160: 8f90801c lw s0,-32740(gp)
+ 409164: 00000000 nop
+ 409168: 26100944 addiu s0,s0,2372
+ 40916c: 02128021 addu s0,s0,s2
+ 409170: 8e060000 lw a2,0(s0)
+ 409174: 00000000 nop
+ 409178: 10c00036 beqz a2,409254 <malloc+0x224>
+ 40917c: 00c04821 move t1,a2
+ 409180: 8d230004 lw v1,4(t1)
+ 409184: 8d220000 lw v0,0(t1)
+ 409188: 00000000 nop
+ 40918c: ac620000 sw v0,0(v1)
+ 409190: 8d230000 lw v1,0(t1)
+ 409194: 00000000 nop
+ 409198: 10600004 beqz v1,4091ac <malloc+0x17c>
+ 40919c: 00000000 nop
+ 4091a0: 8d220004 lw v0,4(t1)
+ 4091a4: 00000000 nop
+ 4091a8: ac620004 sw v0,4(v1)
+ 4091ac: 8f82801c lw v0,-32740(gp)
+ 4091b0: 00000000 nop
+ 4091b4: 24420900 addiu v0,v0,2304
+ 4091b8: 8c420000 lw v0,0(v0)
+ 4091bc: 00000000 nop
+ 4091c0: 01221023 subu v0,t1,v0
+ 4091c4: 04400021 bltz v0,40924c <malloc+0x21c>
+ 4091c8: 00000000 nop
+ 4091cc: 00021303 sra v0,v0,0xc
+ 4091d0: 24480001 addiu t0,v0,1
+ 4091d4: 00081040 sll v0,t0,0x1
+ 4091d8: 00481021 addu v0,v0,t0
+ 4091dc: 8f83801c lw v1,-32740(gp)
+ 4091e0: 00000000 nop
+ 4091e4: 24630904 addiu v1,v1,2308
+ 4091e8: 8c630000 lw v1,0(v1)
+ 4091ec: 00022080 sll a0,v0,0x2
+ 4091f0: 00831821 addu v1,a0,v1
+ 4091f4: 8c620004 lw v0,4(v1)
+ 4091f8: 00000000 nop
+ 4091fc: 2442ffff addiu v0,v0,-1
+ 409200: 1040000a beqz v0,40922c <malloc+0x1fc>
+ 409204: ac620004 sw v0,4(v1)
+ 409208: 8d230000 lw v1,0(t1)
+ 40920c: 8f82801c lw v0,-32740(gp)
+ 409210: 00000000 nop
+ 409214: 24420904 addiu v0,v0,2308
+ 409218: 8c420000 lw v0,0(v0)
+ 40921c: 30630fff andi v1,v1,0xfff
+ 409220: 00821021 addu v0,a0,v0
+ 409224: 02231806 srlv v1,v1,s1
+ 409228: ac430008 sw v1,8(v0)
+ 40922c: 01201021 move v0,t1
+ 409230: 8fbf002c lw ra,44(sp)
+ 409234: 8fb30024 lw s3,36(sp)
+ 409238: 8fb20020 lw s2,32(sp)
+ 40923c: 8fb1001c lw s1,28(sp)
+ 409240: 8fb00018 lw s0,24(sp)
+ 409244: 03e00008 jr ra
+ 409248: 27bd0030 addiu sp,sp,48
+ 40924c: 1000ffdf b 4091cc <malloc+0x19c>
+ 409250: 24420fff addiu v0,v0,4095
+ 409254: 24041000 li a0,4096
+ 409258: 8f998018 lw t9,-32744(gp)
+ 40925c: 00000000 nop
+ 409260: 273990d0 addiu t9,t9,-28464
+ 409264: 00000000 nop
+ 409268: 0320f809 jalr t9
+ 40926c: 00000000 nop
+ 409270: 8fbc0010 lw gp,16(sp)
+ 409274: 00404821 move t1,v0
+ 409278: 1120ffed beqz t1,409230 <malloc+0x200>
+ 40927c: 00112080 sll a0,s1,0x2
+ 409280: 8f81801c lw at,-32740(gp)
+ 409284: 00000000 nop
+ 409288: 24210914 addiu at,at,2324
+ 40928c: 00242021 addu a0,at,a0
+ 409290: 8c850000 lw a1,0(a0)
+ 409294: 24020001 li v0,1
+ 409298: 24031000 li v1,4096
+ 40929c: 02221004 sllv v0,v0,s1
+ 4092a0: 02231807 srav v1,v1,s1
+ 4092a4: 24070002 li a3,2
+ 4092a8: 01223021 addu a2,t1,v0
+ 4092ac: 24a50001 addiu a1,a1,1
+ 4092b0: 00e3182b sltu v1,a3,v1
+ 4092b4: ac850000 sw a1,0(a0)
+ 4092b8: acc00000 sw zero,0(a2)
+ 4092bc: acd00004 sw s0,4(a2)
+ 4092c0: 10600012 beqz v1,40930c <malloc+0x2dc>
+ 4092c4: ae060000 sw a2,0(s0)
+ 4092c8: 8f83801c lw v1,-32740(gp)
+ 4092cc: 00000000 nop
+ 4092d0: 24630944 addiu v1,v1,2372
+ 4092d4: 00721821 addu v1,v1,s2
+ 4092d8: 8c640000 lw a0,0(v1)
+ 4092dc: 02271004 sllv v0,a3,s1
+ 4092e0: 01223021 addu a2,t1,v0
+ 4092e4: acc40000 sw a0,0(a2)
+ 4092e8: acc30004 sw v1,4(a2)
+ 4092ec: 24021000 li v0,4096
+ 4092f0: ac660000 sw a2,0(v1)
+ 4092f4: 02221007 srav v0,v0,s1
+ 4092f8: 8cc30000 lw v1,0(a2)
+ 4092fc: 24e70001 addiu a3,a3,1
+ 409300: 00e2102b sltu v0,a3,v0
+ 409304: 1440fff0 bnez v0,4092c8 <malloc+0x298>
+ 409308: ac660004 sw a2,4(v1)
+ 40930c: 8f82801c lw v0,-32740(gp)
+ 409310: 00000000 nop
+ 409314: 24420900 addiu v0,v0,2304
+ 409318: 8c420000 lw v0,0(v0)
+ 40931c: 00000000 nop
+ 409320: 01221023 subu v0,t1,v0
+ 409324: 0440001b bltz v0,409394 <malloc+0x364>
+ 409328: 00000000 nop
+ 40932c: 00021303 sra v0,v0,0xc
+ 409330: 24480001 addiu t0,v0,1
+ 409334: 00081840 sll v1,t0,0x1
+ 409338: 8f82801c lw v0,-32740(gp)
+ 40933c: 00000000 nop
+ 409340: 24420904 addiu v0,v0,2308
+ 409344: 8c420000 lw v0,0(v0)
+ 409348: 00681821 addu v1,v1,t0
+ 40934c: 00031880 sll v1,v1,0x2
+ 409350: 00621021 addu v0,v1,v0
+ 409354: ac510000 sw s1,0(v0)
+ 409358: 8f82801c lw v0,-32740(gp)
+ 40935c: 00000000 nop
+ 409360: 24420904 addiu v0,v0,2308
+ 409364: 8c420000 lw v0,0(v0)
+ 409368: 24e4ffff addiu a0,a3,-1
+ 40936c: 00621021 addu v0,v1,v0
+ 409370: ac440004 sw a0,4(v0)
+ 409374: 8f82801c lw v0,-32740(gp)
+ 409378: 00000000 nop
+ 40937c: 24420904 addiu v0,v0,2308
+ 409380: 8c420000 lw v0,0(v0)
+ 409384: 00000000 nop
+ 409388: 00621821 addu v1,v1,v0
+ 40938c: 1000ffa7 b 40922c <malloc+0x1fc>
+ 409390: ac640008 sw a0,8(v1)
+ 409394: 1000ffe5 b 40932c <malloc+0x2fc>
+ 409398: 24420fff addiu v0,v0,4095
+ 40939c: 8f88801c lw t0,-32740(gp)
+ 4093a0: 00000000 nop
+ 4093a4: 2508090c addiu t0,t0,2316
+ 4093a8: 8d080000 lw t0,0(t0)
+ 4093ac: 8f85801c lw a1,-32740(gp)
+ 4093b0: 00000000 nop
+ 4093b4: 24a50904 addiu a1,a1,2308
+ 4093b8: 8ca50000 lw a1,0(a1)
+ 4093bc: 00082040 sll a0,t0,0x1
+ 4093c0: 00881021 addu v0,a0,t0
+ 4093c4: 00021080 sll v0,v0,0x2
+ 4093c8: 00451021 addu v0,v0,a1
+ 4093cc: 8c420000 lw v0,0(v0)
+ 4093d0: 00038b02 srl s1,v1,0xc
+ 4093d4: 0051102b sltu v0,v0,s1
+ 4093d8: 10400015 beqz v0,409430 <malloc+0x400>
+ 4093dc: 01009821 move s3,t0
+ 4093e0: 00881021 addu v0,a0,t0
+ 4093e4: 00021080 sll v0,v0,0x2
+ 4093e8: 00451021 addu v0,v0,a1
+ 4093ec: 8c480004 lw t0,4(v0)
+ 4093f0: 00000000 nop
+ 4093f4: 11130078 beq t0,s3,4095d8 <malloc+0x5a8>
+ 4093f8: 00002021 move a0,zero
+ 4093fc: 00082040 sll a0,t0,0x1
+ 409400: 8f85801c lw a1,-32740(gp)
+ 409404: 00000000 nop
+ 409408: 24a50904 addiu a1,a1,2308
+ 40940c: 8ca50000 lw a1,0(a1)
+ 409410: 00881021 addu v0,a0,t0
+ 409414: 00021080 sll v0,v0,0x2
+ 409418: 00451021 addu v0,v0,a1
+ 40941c: 8c420000 lw v0,0(v0)
+ 409420: 00000000 nop
+ 409424: 0051102b sltu v0,v0,s1
+ 409428: 1440ffee bnez v0,4093e4 <malloc+0x3b4>
+ 40942c: 00881021 addu v0,a0,t0
+ 409430: 00086040 sll t4,t0,0x1
+ 409434: 01881021 addu v0,t4,t0
+ 409438: 8f86801c lw a2,-32740(gp)
+ 40943c: 00000000 nop
+ 409440: 24c60904 addiu a2,a2,2308
+ 409444: 8cc60000 lw a2,0(a2)
+ 409448: 00025080 sll t2,v0,0x2
+ 40944c: 01462821 addu a1,t2,a2
+ 409450: 8cab0000 lw t3,0(a1)
+ 409454: 2502ffff addiu v0,t0,-1
+ 409458: 8f83801c lw v1,-32740(gp)
+ 40945c: 00000000 nop
+ 409460: 24630900 addiu v1,v1,2304
+ 409464: 8c630000 lw v1,0(v1)
+ 409468: 00021300 sll v0,v0,0xc
+ 40946c: 022b202b sltu a0,s1,t3
+ 409470: 10800040 beqz a0,409574 <malloc+0x544>
+ 409474: 00624821 addu t1,v1,v0
+ 409478: 01113821 addu a3,t0,s1
+ 40947c: 00071840 sll v1,a3,0x1
+ 409480: 00671821 addu v1,v1,a3
+ 409484: 00031880 sll v1,v1,0x2
+ 409488: 00662021 addu a0,v1,a2
+ 40948c: 01711023 subu v0,t3,s1
+ 409490: ac820000 sw v0,0(a0)
+ 409494: 8f82801c lw v0,-32740(gp)
+ 409498: 00000000 nop
+ 40949c: 24420904 addiu v0,v0,2308
+ 4094a0: 8c420000 lw v0,0(v0)
+ 4094a4: 00000000 nop
+ 4094a8: 01422021 addu a0,t2,v0
+ 4094ac: 8c840004 lw a0,4(a0)
+ 4094b0: 00621021 addu v0,v1,v0
+ 4094b4: ac440004 sw a0,4(v0)
+ 4094b8: 8f84801c lw a0,-32740(gp)
+ 4094bc: 00000000 nop
+ 4094c0: 24840904 addiu a0,a0,2308
+ 4094c4: 8c840000 lw a0,0(a0)
+ 4094c8: 00000000 nop
+ 4094cc: 01441021 addu v0,t2,a0
+ 4094d0: 8c420008 lw v0,8(v0)
+ 4094d4: 00641821 addu v1,v1,a0
+ 4094d8: ac620008 sw v0,8(v1)
+ 4094dc: 8f85801c lw a1,-32740(gp)
+ 4094e0: 00000000 nop
+ 4094e4: 24a50904 addiu a1,a1,2308
+ 4094e8: 8ca50000 lw a1,0(a1)
+ 4094ec: 00000000 nop
+ 4094f0: 01451021 addu v0,t2,a1
+ 4094f4: 8c440008 lw a0,8(v0)
+ 4094f8: 8c460004 lw a2,4(v0)
+ 4094fc: 00041840 sll v1,a0,0x1
+ 409500: 00061040 sll v0,a2,0x1
+ 409504: 00641821 addu v1,v1,a0
+ 409508: 00461021 addu v0,v0,a2
+ 40950c: 00031880 sll v1,v1,0x2
+ 409510: 00021080 sll v0,v0,0x2
+ 409514: 00451021 addu v0,v0,a1
+ 409518: 00651821 addu v1,v1,a1
+ 40951c: 8f81801c lw at,-32740(gp)
+ 409520: 00000000 nop
+ 409524: 2421090c addiu at,at,2316
+ 409528: ac270000 sw a3,0(at)
+ 40952c: ac470008 sw a3,8(v0)
+ 409530: ac670004 sw a3,4(v1)
+ 409534: 8f83801c lw v1,-32740(gp)
+ 409538: 00000000 nop
+ 40953c: 24630904 addiu v1,v1,2308
+ 409540: 8c630000 lw v1,0(v1)
+ 409544: 01881021 addu v0,t4,t0
+ 409548: 00021080 sll v0,v0,0x2
+ 40954c: 00431821 addu v1,v0,v1
+ 409550: ac600000 sw zero,0(v1)
+ 409554: 8f83801c lw v1,-32740(gp)
+ 409558: 00000000 nop
+ 40955c: 24630904 addiu v1,v1,2308
+ 409560: 8c630000 lw v1,0(v1)
+ 409564: 00000000 nop
+ 409568: 00431021 addu v0,v0,v1
+ 40956c: 1000ff2f b 40922c <malloc+0x1fc>
+ 409570: ac510004 sw s1,4(v0)
+ 409574: 8ca30004 lw v1,4(a1)
+ 409578: 8ca40008 lw a0,8(a1)
+ 40957c: 00031040 sll v0,v1,0x1
+ 409580: 00431021 addu v0,v0,v1
+ 409584: 00021080 sll v0,v0,0x2
+ 409588: 00461021 addu v0,v0,a2
+ 40958c: ac440008 sw a0,8(v0)
+ 409590: 8f85801c lw a1,-32740(gp)
+ 409594: 00000000 nop
+ 409598: 24a50904 addiu a1,a1,2308
+ 40959c: 8ca50000 lw a1,0(a1)
+ 4095a0: 00000000 nop
+ 4095a4: 01451021 addu v0,t2,a1
+ 4095a8: 8c430008 lw v1,8(v0)
+ 4095ac: 8c440004 lw a0,4(v0)
+ 4095b0: 00031040 sll v0,v1,0x1
+ 4095b4: 00431021 addu v0,v0,v1
+ 4095b8: 00021080 sll v0,v0,0x2
+ 4095bc: 00451021 addu v0,v0,a1
+ 4095c0: 8f81801c lw at,-32740(gp)
+ 4095c4: 00000000 nop
+ 4095c8: 2421090c addiu at,at,2316
+ 4095cc: ac240000 sw a0,0(at)
+ 4095d0: 1000ffd8 b 409534 <malloc+0x504>
+ 4095d4: ac440004 sw a0,4(v0)
+ 4095d8: 8ca80008 lw t0,8(a1)
+ 4095dc: 8f83801c lw v1,-32740(gp)
+ 4095e0: 00000000 nop
+ 4095e4: 24630910 addiu v1,v1,2320
+ 4095e8: 8c630000 lw v1,0(v1)
+ 4095ec: 00081040 sll v0,t0,0x1
+ 4095f0: 00481021 addu v0,v0,t0
+ 4095f4: 00021080 sll v0,v0,0x2
+ 4095f8: 00451021 addu v0,v0,a1
+ 4095fc: 8c420000 lw v0,0(v0)
+ 409600: 14600029 bnez v1,4096a8 <malloc+0x678>
+ 409604: 01028021 addu s0,t0,v0
+ 409608: 00112300 sll a0,s1,0xc
+ 40960c: 8f998018 lw t9,-32744(gp)
+ 409610: 00000000 nop
+ 409614: 27398ce0 addiu t9,t9,-29472
+ 409618: 00000000 nop
+ 40961c: 0320f809 jalr t9
+ 409620: 00000000 nop
+ 409624: 8fbc0010 lw gp,16(sp)
+ 409628: 00404821 move t1,v0
+ 40962c: 1120ff00 beqz t1,409230 <malloc+0x200>
+ 409630: 00000000 nop
+ 409634: 8f83801c lw v1,-32740(gp)
+ 409638: 00000000 nop
+ 40963c: 24630900 addiu v1,v1,2304
+ 409640: 8c630000 lw v1,0(v1)
+ 409644: 00000000 nop
+ 409648: 01231823 subu v1,t1,v1
+ 40964c: 04600014 bltz v1,4096a0 <malloc+0x670>
+ 409650: 00000000 nop
+ 409654: 00031b03 sra v1,v1,0xc
+ 409658: 24680001 addiu t0,v1,1
+ 40965c: 00082040 sll a0,t0,0x1
+ 409660: 8f83801c lw v1,-32740(gp)
+ 409664: 00000000 nop
+ 409668: 24630904 addiu v1,v1,2308
+ 40966c: 8c630000 lw v1,0(v1)
+ 409670: 00882021 addu a0,a0,t0
+ 409674: 00042080 sll a0,a0,0x2
+ 409678: 00831821 addu v1,a0,v1
+ 40967c: ac600000 sw zero,0(v1)
+ 409680: 8f83801c lw v1,-32740(gp)
+ 409684: 00000000 nop
+ 409688: 24630904 addiu v1,v1,2308
+ 40968c: 8c630000 lw v1,0(v1)
+ 409690: 00000000 nop
+ 409694: 00832021 addu a0,a0,v1
+ 409698: 1000fee5 b 409230 <malloc+0x200>
+ 40969c: ac910004 sw s1,4(a0)
+ 4096a0: 1000ffec b 409654 <malloc+0x624>
+ 4096a4: 24630fff addiu v1,v1,4095
+ 4096a8: 1603ffd7 bne s0,v1,409608 <malloc+0x5d8>
+ 4096ac: 02229023 subu s2,s1,v0
+ 4096b0: 8f998018 lw t9,-32744(gp)
+ 4096b4: 00000000 nop
+ 4096b8: 27398fd8 addiu t9,t9,-28712
+ 4096bc: 00000000 nop
+ 4096c0: 0320f809 jalr t9
+ 4096c4: 00000000 nop
+ 4096c8: 8fbc0010 lw gp,16(sp)
+ 4096cc: 2605ffff addiu a1,s0,-1
+ 4096d0: 8f83801c lw v1,-32740(gp)
+ 4096d4: 00000000 nop
+ 4096d8: 24630900 addiu v1,v1,2304
+ 4096dc: 8c630000 lw v1,0(v1)
+ 4096e0: 00052b00 sll a1,a1,0xc
+ 4096e4: 00651821 addu v1,v1,a1
+ 4096e8: 1443ffc7 bne v0,v1,409608 <malloc+0x5d8>
+ 4096ec: 00122300 sll a0,s2,0xc
+ 4096f0: 8f998018 lw t9,-32744(gp)
+ 4096f4: 00000000 nop
+ 4096f8: 27398ce0 addiu t9,t9,-29472
+ 4096fc: 00000000 nop
+ 409700: 0320f809 jalr t9
+ 409704: 00000000 nop
+ 409708: 8fbc0010 lw gp,16(sp)
+ 40970c: 1040ffbf beqz v0,40960c <malloc+0x5dc>
+ 409710: 00112300 sll a0,s1,0xc
+ 409714: 8f82801c lw v0,-32740(gp)
+ 409718: 00000000 nop
+ 40971c: 24420904 addiu v0,v0,2308
+ 409720: 8c420000 lw v0,0(v0)
+ 409724: 00000000 nop
+ 409728: 8c480008 lw t0,8(v0)
+ 40972c: 00000000 nop
+ 409730: 00081840 sll v1,t0,0x1
+ 409734: 00681821 addu v1,v1,t0
+ 409738: 00031880 sll v1,v1,0x2
+ 40973c: 00621821 addu v1,v1,v0
+ 409740: 8c620000 lw v0,0(v1)
+ 409744: 00000000 nop
+ 409748: 00521021 addu v0,v0,s2
+ 40974c: 1000ff2b b 4093fc <malloc+0x3cc>
+ 409750: ac620000 sw v0,0(v1)
+ 409754: 8f998018 lw t9,-32744(gp)
+ 409758: 00000000 nop
+ 40975c: 27398bb0 addiu t9,t9,-29776
+ 409760: 00000000 nop
+ 409764: 0320f809 jalr t9
+ 409768: 00000000 nop
+ 40976c: 8fbc0010 lw gp,16(sp)
+ 409770: 00401821 move v1,v0
+ 409774: 1460fe6f bnez v1,409134 <malloc+0x104>
+ 409778: 00000000 nop
+ 40977c: 1000feac b 409230 <malloc+0x200>
+ 409780: 00000000 nop
+
+00409784 <free>:
+ 409784: 3c1c0fc0 lui gp,0xfc0
+ 409788: 279ceacc addiu gp,gp,-5428
+ 40978c: 0399e021 addu gp,gp,t9
+ 409790: 27bdffd8 addiu sp,sp,-40
+ 409794: afbc0010 sw gp,16(sp)
+ 409798: afb1001c sw s1,28(sp)
+ 40979c: 8f91801c lw s1,-32740(gp)
+ 4097a0: 00000000 nop
+ 4097a4: 263101b0 addiu s1,s1,432
+ 4097a8: afb00018 sw s0,24(sp)
+ 4097ac: 00808021 move s0,a0
+ 4097b0: 02202021 move a0,s1
+ 4097b4: afbf0024 sw ra,36(sp)
+ 4097b8: afbc0020 sw gp,32(sp)
+ 4097bc: 8f9980a8 lw t9,-32600(gp)
+ 4097c0: 00000000 nop
+ 4097c4: 0320f809 jalr t9
+ 4097c8: 00000000 nop
+ 4097cc: 8fbc0010 lw gp,16(sp)
+ 4097d0: 02002021 move a0,s0
+ 4097d4: 8f998018 lw t9,-32744(gp)
+ 4097d8: 00000000 nop
+ 4097dc: 2739981c addiu t9,t9,-26596
+ 4097e0: 00000000 nop
+ 4097e4: 0320f809 jalr t9
+ 4097e8: 00000000 nop
+ 4097ec: 8fbc0010 lw gp,16(sp)
+ 4097f0: 02202021 move a0,s1
+ 4097f4: 8f99811c lw t9,-32484(gp)
+ 4097f8: 00000000 nop
+ 4097fc: 0320f809 jalr t9
+ 409800: 00000000 nop
+ 409804: 8fbc0010 lw gp,16(sp)
+ 409808: 8fbf0024 lw ra,36(sp)
+ 40980c: 8fb1001c lw s1,28(sp)
+ 409810: 8fb00018 lw s0,24(sp)
+ 409814: 03e00008 jr ra
+ 409818: 27bd0028 addiu sp,sp,40
+ 40981c: 3c1c0fc0 lui gp,0xfc0
+ 409820: 279cea34 addiu gp,gp,-5580
+ 409824: 0399e021 addu gp,gp,t9
+ 409828: 27bdffd0 addiu sp,sp,-48
+ 40982c: afbc0010 sw gp,16(sp)
+ 409830: 00804021 move t0,a0
+ 409834: afbf002c sw ra,44(sp)
+ 409838: afbc0028 sw gp,40(sp)
+ 40983c: afb30024 sw s3,36(sp)
+ 409840: afb20020 sw s2,32(sp)
+ 409844: afb1001c sw s1,28(sp)
+ 409848: 1100003b beqz t0,409938 <free+0x1b4>
+ 40984c: afb00018 sw s0,24(sp)
+ 409850: 8f84801c lw a0,-32740(gp)
+ 409854: 00000000 nop
+ 409858: 24840900 addiu a0,a0,2304
+ 40985c: 8c840000 lw a0,0(a0)
+ 409860: 00000000 nop
+ 409864: 01041023 subu v0,t0,a0
+ 409868: 0440017d bltz v0,409e60 <free+0x6dc>
+ 40986c: 00000000 nop
+ 409870: 00021303 sra v0,v0,0xc
+ 409874: 24500001 addiu s0,v0,1
+ 409878: 00105840 sll t3,s0,0x1
+ 40987c: 8f89801c lw t1,-32740(gp)
+ 409880: 00000000 nop
+ 409884: 25290904 addiu t1,t1,2308
+ 409888: 8d290000 lw t1,0(t1)
+ 40988c: 01701021 addu v0,t3,s0
+ 409890: 00021080 sll v0,v0,0x2
+ 409894: 00492821 addu a1,v0,t1
+ 409898: 8ca70000 lw a3,0(a1)
+ 40989c: 00000000 nop
+ 4098a0: 10e00081 beqz a3,409aa8 <free+0x324>
+ 4098a4: 24021000 li v0,4096
+ 4098a8: 8ca30008 lw v1,8(a1)
+ 4098ac: 00106300 sll t4,s0,0xc
+ 4098b0: 008c2021 addu a0,a0,t4
+ 4098b4: 00e31804 sllv v1,v1,a3
+ 4098b8: 00e25007 srav t2,v0,a3
+ 4098bc: 8ca50004 lw a1,4(a1)
+ 4098c0: 00832021 addu a0,a0,v1
+ 4098c4: 2542ffff addiu v0,t2,-1
+ 4098c8: 10a2003a beq a1,v0,4099b4 <free+0x230>
+ 4098cc: 2484f000 addiu a0,a0,-4096
+ 4098d0: 01701021 addu v0,t3,s0
+ 4098d4: 00022880 sll a1,v0,0x2
+ 4098d8: 00a91821 addu v1,a1,t1
+ 4098dc: 8c620004 lw v0,4(v1)
+ 4098e0: 00000000 nop
+ 4098e4: 1040001b beqz v0,409954 <free+0x1d0>
+ 4098e8: 24020001 li v0,1
+ 4098ec: 8c820000 lw v0,0(a0)
+ 4098f0: ad040004 sw a0,4(t0)
+ 4098f4: ad020000 sw v0,0(t0)
+ 4098f8: ac880000 sw t0,0(a0)
+ 4098fc: 8d020000 lw v0,0(t0)
+ 409900: 00000000 nop
+ 409904: 10400002 beqz v0,409910 <free+0x18c>
+ 409908: 00000000 nop
+ 40990c: ac480004 sw t0,4(v0)
+ 409910: 8f83801c lw v1,-32740(gp)
+ 409914: 00000000 nop
+ 409918: 24630904 addiu v1,v1,2308
+ 40991c: 8c630000 lw v1,0(v1)
+ 409920: 00000000 nop
+ 409924: 00a31821 addu v1,a1,v1
+ 409928: 8c620004 lw v0,4(v1)
+ 40992c: 00000000 nop
+ 409930: 24420001 addiu v0,v0,1
+ 409934: ac620004 sw v0,4(v1)
+ 409938: 8fbf002c lw ra,44(sp)
+ 40993c: 8fb30024 lw s3,36(sp)
+ 409940: 8fb20020 lw s2,32(sp)
+ 409944: 8fb1001c lw s1,28(sp)
+ 409948: 8fb00018 lw s0,24(sp)
+ 40994c: 03e00008 jr ra
+ 409950: 27bd0030 addiu sp,sp,48
+ 409954: ac620004 sw v0,4(v1)
+ 409958: 8f82801c lw v0,-32740(gp)
+ 40995c: 00000000 nop
+ 409960: 24420904 addiu v0,v0,2308
+ 409964: 8c420000 lw v0,0(v0)
+ 409968: 31040fff andi a0,t0,0xfff
+ 40996c: 00a21021 addu v0,a1,v0
+ 409970: 00e42006 srlv a0,a0,a3
+ 409974: 000718c0 sll v1,a3,0x3
+ 409978: ac440008 sw a0,8(v0)
+ 40997c: 8f81801c lw at,-32740(gp)
+ 409980: 00000000 nop
+ 409984: 24210944 addiu at,at,2372
+ 409988: 00231821 addu v1,at,v1
+ 40998c: 8c620000 lw v0,0(v1)
+ 409990: ad030004 sw v1,4(t0)
+ 409994: ad020000 sw v0,0(t0)
+ 409998: ac680000 sw t0,0(v1)
+ 40999c: 8d020000 lw v0,0(t0)
+ 4099a0: 00000000 nop
+ 4099a4: 1040ffe4 beqz v0,409938 <free+0x1b4>
+ 4099a8: 00000000 nop
+ 4099ac: 1000ffe2 b 409938 <free+0x1b4>
+ 4099b0: ac480004 sw t0,4(v0)
+ 4099b4: 00071080 sll v0,a3,0x2
+ 4099b8: 8f86801c lw a2,-32740(gp)
+ 4099bc: 00000000 nop
+ 4099c0: 24c60914 addiu a2,a2,2324
+ 4099c4: 00c23021 addu a2,a2,v0
+ 4099c8: 8cc30000 lw v1,0(a2)
+ 4099cc: 00000000 nop
+ 4099d0: 2c620002 sltiu v0,v1,2
+ 4099d4: 1440ffbf bnez v0,4098d4 <free+0x150>
+ 4099d8: 01701021 addu v0,t3,s0
+ 4099dc: 24050001 li a1,1
+ 4099e0: 2462ffff addiu v0,v1,-1
+ 4099e4: 00aa182a slt v1,a1,t2
+ 4099e8: acc20000 sw v0,0(a2)
+ 4099ec: 10600008 beqz v1,409a10 <free+0x28c>
+ 4099f0: 00803021 move a2,a0
+ 4099f4: 24021000 li v0,4096
+ 4099f8: 00e21007 srav v0,v0,a3
+ 4099fc: 24a50001 addiu a1,a1,1
+ 409a00: 00a2102a slt v0,a1,v0
+ 409a04: 8cc60000 lw a2,0(a2)
+ 409a08: 1440fffb bnez v0,4099f8 <free+0x274>
+ 409a0c: 24021000 li v0,4096
+ 409a10: 8c820004 lw v0,4(a0)
+ 409a14: 10c00004 beqz a2,409a28 <free+0x2a4>
+ 409a18: ac460000 sw a2,0(v0)
+ 409a1c: 8c820004 lw v0,4(a0)
+ 409a20: 00000000 nop
+ 409a24: acc20004 sw v0,4(a2)
+ 409a28: 8f82801c lw v0,-32740(gp)
+ 409a2c: 00000000 nop
+ 409a30: 24420904 addiu v0,v0,2308
+ 409a34: 8c420000 lw v0,0(v0)
+ 409a38: 01701821 addu v1,t3,s0
+ 409a3c: 00031880 sll v1,v1,0x2
+ 409a40: 00621021 addu v0,v1,v0
+ 409a44: ac400000 sw zero,0(v0)
+ 409a48: 8f82801c lw v0,-32740(gp)
+ 409a4c: 00000000 nop
+ 409a50: 24420904 addiu v0,v0,2308
+ 409a54: 8c420000 lw v0,0(v0)
+ 409a58: 00000000 nop
+ 409a5c: 00621821 addu v1,v1,v0
+ 409a60: 24020001 li v0,1
+ 409a64: ac620004 sw v0,4(v1)
+ 409a68: 8f84801c lw a0,-32740(gp)
+ 409a6c: 00000000 nop
+ 409a70: 24840900 addiu a0,a0,2304
+ 409a74: 8c840000 lw a0,0(a0)
+ 409a78: 00000000 nop
+ 409a7c: 008c2021 addu a0,a0,t4
+ 409a80: 2484f000 addiu a0,a0,-4096
+ 409a84: 8f998018 lw t9,-32744(gp)
+ 409a88: 00000000 nop
+ 409a8c: 2739981c addiu t9,t9,-26596
+ 409a90: 00000000 nop
+ 409a94: 0320f809 jalr t9
+ 409a98: 00000000 nop
+ 409a9c: 8fbc0010 lw gp,16(sp)
+ 409aa0: 1000ffa5 b 409938 <free+0x1b4>
+ 409aa4: 00000000 nop
+ 409aa8: 8f85801c lw a1,-32740(gp)
+ 409aac: 00000000 nop
+ 409ab0: 24a5090c addiu a1,a1,2316
+ 409ab4: 8ca50000 lw a1,0(a1)
+ 409ab8: 00000000 nop
+ 409abc: 0205102a slt v0,s0,a1
+ 409ac0: 104000d7 beqz v0,409e20 <free+0x69c>
+ 409ac4: 00051040 sll v0,a1,0x1
+ 409ac8: 00451021 addu v0,v0,a1
+ 409acc: 00021080 sll v0,v0,0x2
+ 409ad0: 00491021 addu v0,v0,t1
+ 409ad4: 8c450008 lw a1,8(v0)
+ 409ad8: 00000000 nop
+ 409adc: 0205102a slt v0,s0,a1
+ 409ae0: 1440fff9 bnez v0,409ac8 <free+0x344>
+ 409ae4: 00051040 sll v0,a1,0x1
+ 409ae8: 00451021 addu v0,v0,a1
+ 409aec: 8f83801c lw v1,-32740(gp)
+ 409af0: 00000000 nop
+ 409af4: 24630904 addiu v1,v1,2308
+ 409af8: 8c630000 lw v1,0(v1)
+ 409afc: 00023080 sll a2,v0,0x2
+ 409b00: 00c33821 addu a3,a2,v1
+ 409b04: 8ce40000 lw a0,0(a3)
+ 409b08: 00000000 nop
+ 409b0c: 00a41021 addu v0,a1,a0
+ 409b10: 120200bb beq s0,v0,409e00 <free+0x67c>
+ 409b14: 01701021 addu v0,t3,s0
+ 409b18: 01702021 addu a0,t3,s0
+ 409b1c: 00042080 sll a0,a0,0x2
+ 409b20: 00831821 addu v1,a0,v1
+ 409b24: 8c620004 lw v0,4(v1)
+ 409b28: 00000000 nop
+ 409b2c: ac620000 sw v0,0(v1)
+ 409b30: 8f82801c lw v0,-32740(gp)
+ 409b34: 00000000 nop
+ 409b38: 24420904 addiu v0,v0,2308
+ 409b3c: 8c420000 lw v0,0(v0)
+ 409b40: 00000000 nop
+ 409b44: 00c21821 addu v1,a2,v0
+ 409b48: 8c630004 lw v1,4(v1)
+ 409b4c: 00821021 addu v0,a0,v0
+ 409b50: ac430004 sw v1,4(v0)
+ 409b54: 8f82801c lw v0,-32740(gp)
+ 409b58: 00000000 nop
+ 409b5c: 24420904 addiu v0,v0,2308
+ 409b60: 8c420000 lw v0,0(v0)
+ 409b64: 00000000 nop
+ 409b68: 00821021 addu v0,a0,v0
+ 409b6c: ac450008 sw a1,8(v0)
+ 409b70: 8f82801c lw v0,-32740(gp)
+ 409b74: 00000000 nop
+ 409b78: 24420904 addiu v0,v0,2308
+ 409b7c: 8c420000 lw v0,0(v0)
+ 409b80: 00000000 nop
+ 409b84: 00c21021 addu v0,a2,v0
+ 409b88: ac500004 sw s0,4(v0)
+ 409b8c: 8f85801c lw a1,-32740(gp)
+ 409b90: 00000000 nop
+ 409b94: 24a50904 addiu a1,a1,2308
+ 409b98: 8ca50000 lw a1,0(a1)
+ 409b9c: 00000000 nop
+ 409ba0: 00852021 addu a0,a0,a1
+ 409ba4: 8c830004 lw v1,4(a0)
+ 409ba8: 00000000 nop
+ 409bac: 00031040 sll v0,v1,0x1
+ 409bb0: 00431021 addu v0,v0,v1
+ 409bb4: 00021080 sll v0,v0,0x2
+ 409bb8: 00451021 addu v0,v0,a1
+ 409bbc: ac500008 sw s0,8(v0)
+ 409bc0: 00101040 sll v0,s0,0x1
+ 409bc4: 00501021 addu v0,v0,s0
+ 409bc8: 8f86801c lw a2,-32740(gp)
+ 409bcc: 00000000 nop
+ 409bd0: 24c60904 addiu a2,a2,2308
+ 409bd4: 8cc60000 lw a2,0(a2)
+ 409bd8: 00029880 sll s3,v0,0x2
+ 409bdc: 02662021 addu a0,s3,a2
+ 409be0: 8c850000 lw a1,0(a0)
+ 409be4: 8c820004 lw v0,4(a0)
+ 409be8: 02051821 addu v1,s0,a1
+ 409bec: 10620060 beq v1,v0,409d70 <free+0x5ec>
+ 409bf0: 00031040 sll v0,v1,0x1
+ 409bf4: 8f82801c lw v0,-32740(gp)
+ 409bf8: 00000000 nop
+ 409bfc: 24420904 addiu v0,v0,2308
+ 409c00: 8c420000 lw v0,0(v0)
+ 409c04: 00000000 nop
+ 409c08: 02621021 addu v0,s3,v0
+ 409c0c: 8c510000 lw s1,0(v0)
+ 409c10: 00000000 nop
+ 409c14: 2a220008 slti v0,s1,8
+ 409c18: 14400008 bnez v0,409c3c <free+0x4b8>
+ 409c1c: 02119021 addu s2,s0,s1
+ 409c20: 8f82801c lw v0,-32740(gp)
+ 409c24: 00000000 nop
+ 409c28: 24420910 addiu v0,v0,2320
+ 409c2c: 8c420000 lw v0,0(v0)
+ 409c30: 00000000 nop
+ 409c34: 12420006 beq s2,v0,409c50 <free+0x4cc>
+ 409c38: 00000000 nop
+ 409c3c: 8f81801c lw at,-32740(gp)
+ 409c40: 00000000 nop
+ 409c44: 2421090c addiu at,at,2316
+ 409c48: 1000ff3b b 409938 <free+0x1b4>
+ 409c4c: ac300000 sw s0,0(at)
+ 409c50: 00002021 move a0,zero
+ 409c54: 8f998018 lw t9,-32744(gp)
+ 409c58: 00000000 nop
+ 409c5c: 27398fd8 addiu t9,t9,-28712
+ 409c60: 00000000 nop
+ 409c64: 0320f809 jalr t9
+ 409c68: 00000000 nop
+ 409c6c: 8fbc0010 lw gp,16(sp)
+ 409c70: 00000000 nop
+ 409c74: 8f83801c lw v1,-32740(gp)
+ 409c78: 00000000 nop
+ 409c7c: 24630900 addiu v1,v1,2304
+ 409c80: 8c630000 lw v1,0(v1)
+ 409c84: 00122300 sll a0,s2,0xc
+ 409c88: 00641821 addu v1,v1,a0
+ 409c8c: 2463f000 addiu v1,v1,-4096
+ 409c90: 1443ffea bne v0,v1,409c3c <free+0x4b8>
+ 409c94: 00000000 nop
+ 409c98: 8f82801c lw v0,-32740(gp)
+ 409c9c: 00000000 nop
+ 409ca0: 24420910 addiu v0,v0,2320
+ 409ca4: 8c420000 lw v0,0(v0)
+ 409ca8: 00112023 negu a0,s1
+ 409cac: 00042300 sll a0,a0,0xc
+ 409cb0: 00511023 subu v0,v0,s1
+ 409cb4: 8f81801c lw at,-32740(gp)
+ 409cb8: 00000000 nop
+ 409cbc: 24210910 addiu at,at,2320
+ 409cc0: ac220000 sw v0,0(at)
+ 409cc4: 8f998018 lw t9,-32744(gp)
+ 409cc8: 00000000 nop
+ 409ccc: 27398fd8 addiu t9,t9,-28712
+ 409cd0: 00000000 nop
+ 409cd4: 0320f809 jalr t9
+ 409cd8: 00000000 nop
+ 409cdc: 8fbc0010 lw gp,16(sp)
+ 409ce0: 00000000 nop
+ 409ce4: 8f84801c lw a0,-32740(gp)
+ 409ce8: 00000000 nop
+ 409cec: 24840904 addiu a0,a0,2308
+ 409cf0: 8c840000 lw a0,0(a0)
+ 409cf4: 00000000 nop
+ 409cf8: 02641021 addu v0,s3,a0
+ 409cfc: 8c430008 lw v1,8(v0)
+ 409d00: 8c450004 lw a1,4(v0)
+ 409d04: 00031040 sll v0,v1,0x1
+ 409d08: 00431021 addu v0,v0,v1
+ 409d0c: 00021080 sll v0,v0,0x2
+ 409d10: 00441021 addu v0,v0,a0
+ 409d14: ac450004 sw a1,4(v0)
+ 409d18: 8f84801c lw a0,-32740(gp)
+ 409d1c: 00000000 nop
+ 409d20: 24840904 addiu a0,a0,2308
+ 409d24: 8c840000 lw a0,0(a0)
+ 409d28: 00000000 nop
+ 409d2c: 02641021 addu v0,s3,a0
+ 409d30: 8c430004 lw v1,4(v0)
+ 409d34: 8c450008 lw a1,8(v0)
+ 409d38: 00031040 sll v0,v1,0x1
+ 409d3c: 00431021 addu v0,v0,v1
+ 409d40: 00021080 sll v0,v0,0x2
+ 409d44: 00441021 addu v0,v0,a0
+ 409d48: ac450008 sw a1,8(v0)
+ 409d4c: 8f82801c lw v0,-32740(gp)
+ 409d50: 00000000 nop
+ 409d54: 24420904 addiu v0,v0,2308
+ 409d58: 8c420000 lw v0,0(v0)
+ 409d5c: 00000000 nop
+ 409d60: 02621021 addu v0,s3,v0
+ 409d64: 8c500008 lw s0,8(v0)
+ 409d68: 1000ffb4 b 409c3c <free+0x4b8>
+ 409d6c: 00000000 nop
+ 409d70: 00431021 addu v0,v0,v1
+ 409d74: 00021080 sll v0,v0,0x2
+ 409d78: 00461021 addu v0,v0,a2
+ 409d7c: 8c420000 lw v0,0(v0)
+ 409d80: 00000000 nop
+ 409d84: 00a21021 addu v0,a1,v0
+ 409d88: ac820000 sw v0,0(a0)
+ 409d8c: 8f84801c lw a0,-32740(gp)
+ 409d90: 00000000 nop
+ 409d94: 24840904 addiu a0,a0,2308
+ 409d98: 8c840000 lw a0,0(a0)
+ 409d9c: 00000000 nop
+ 409da0: 02642821 addu a1,s3,a0
+ 409da4: 8ca30004 lw v1,4(a1)
+ 409da8: 00000000 nop
+ 409dac: 00031040 sll v0,v1,0x1
+ 409db0: 00431021 addu v0,v0,v1
+ 409db4: 00021080 sll v0,v0,0x2
+ 409db8: 00441021 addu v0,v0,a0
+ 409dbc: 8c420004 lw v0,4(v0)
+ 409dc0: 00000000 nop
+ 409dc4: aca20004 sw v0,4(a1)
+ 409dc8: 8f84801c lw a0,-32740(gp)
+ 409dcc: 00000000 nop
+ 409dd0: 24840904 addiu a0,a0,2308
+ 409dd4: 8c840000 lw a0,0(a0)
+ 409dd8: 00000000 nop
+ 409ddc: 02641021 addu v0,s3,a0
+ 409de0: 8c430004 lw v1,4(v0)
+ 409de4: 00000000 nop
+ 409de8: 00031040 sll v0,v1,0x1
+ 409dec: 00431021 addu v0,v0,v1
+ 409df0: 00021080 sll v0,v0,0x2
+ 409df4: 00441021 addu v0,v0,a0
+ 409df8: 1000ff7e b 409bf4 <free+0x470>
+ 409dfc: ac500008 sw s0,8(v0)
+ 409e00: 00021080 sll v0,v0,0x2
+ 409e04: 00431021 addu v0,v0,v1
+ 409e08: 8c420004 lw v0,4(v0)
+ 409e0c: 00a08021 move s0,a1
+ 409e10: 00821021 addu v0,a0,v0
+ 409e14: 1000ff6a b 409bc0 <free+0x43c>
+ 409e18: ace20000 sw v0,0(a3)
+ 409e1c: 00051040 sll v0,a1,0x1
+ 409e20: 00451021 addu v0,v0,a1
+ 409e24: 00021080 sll v0,v0,0x2
+ 409e28: 00491021 addu v0,v0,t1
+ 409e2c: 8c450004 lw a1,4(v0)
+ 409e30: 00000000 nop
+ 409e34: 18a00003 blez a1,409e44 <free+0x6c0>
+ 409e38: 00b0102a slt v0,a1,s0
+ 409e3c: 1440fff7 bnez v0,409e1c <free+0x698>
+ 409e40: 00000000 nop
+ 409e44: 00051040 sll v0,a1,0x1
+ 409e48: 00451021 addu v0,v0,a1
+ 409e4c: 00021080 sll v0,v0,0x2
+ 409e50: 00491021 addu v0,v0,t1
+ 409e54: 8c450008 lw a1,8(v0)
+ 409e58: 1000ff23 b 409ae8 <free+0x364>
+ 409e5c: 00051040 sll v0,a1,0x1
+ 409e60: 1000fe83 b 409870 <free+0xec>
+ 409e64: 24420fff addiu v0,v0,4095
+
+00409e68 <realloc>:
+ 409e68: 3c1c0fc0 lui gp,0xfc0
+ 409e6c: 279ce3e8 addiu gp,gp,-7192
+ 409e70: 0399e021 addu gp,gp,t9
+ 409e74: 27bdffc0 addiu sp,sp,-64
+ 409e78: afbc0010 sw gp,16(sp)
+ 409e7c: afb5002c sw s5,44(sp)
+ 409e80: 0080a821 move s5,a0
+ 409e84: afb40028 sw s4,40(sp)
+ 409e88: afbf0038 sw ra,56(sp)
+ 409e8c: afbc0034 sw gp,52(sp)
+ 409e90: afb60030 sw s6,48(sp)
+ 409e94: afb30024 sw s3,36(sp)
+ 409e98: afb20020 sw s2,32(sp)
+ 409e9c: afb1001c sw s1,28(sp)
+ 409ea0: afb00018 sw s0,24(sp)
+ 409ea4: 12a0012e beqz s5,40a360 <realloc+0x4f8>
+ 409ea8: 00a0a021 move s4,a1
+ 409eac: 12800107 beqz s4,40a2cc <realloc+0x464>
+ 409eb0: 00000000 nop
+ 409eb4: 8f96801c lw s6,-32740(gp)
+ 409eb8: 00000000 nop
+ 409ebc: 26d601b0 addiu s6,s6,432
+ 409ec0: 00000000 nop
+ 409ec4: 02c02021 move a0,s6
+ 409ec8: 8f9980a8 lw t9,-32600(gp)
+ 409ecc: 00000000 nop
+ 409ed0: 0320f809 jalr t9
+ 409ed4: 00000000 nop
+ 409ed8: 8fbc0010 lw gp,16(sp)
+ 409edc: 00000000 nop
+ 409ee0: 8f82801c lw v0,-32740(gp)
+ 409ee4: 00000000 nop
+ 409ee8: 24420900 addiu v0,v0,2304
+ 409eec: 8c420000 lw v0,0(v0)
+ 409ef0: 00000000 nop
+ 409ef4: 02a21023 subu v0,s5,v0
+ 409ef8: 044000f2 bltz v0,40a2c4 <realloc+0x45c>
+ 409efc: 00000000 nop
+ 409f00: 00021303 sra v0,v0,0xc
+ 409f04: 24530001 addiu s3,v0,1
+ 409f08: 00131040 sll v0,s3,0x1
+ 409f0c: 00531021 addu v0,v0,s3
+ 409f10: 8f88801c lw t0,-32740(gp)
+ 409f14: 00000000 nop
+ 409f18: 25080904 addiu t0,t0,2308
+ 409f1c: 8d080000 lw t0,0(t0)
+ 409f20: 00023880 sll a3,v0,0x2
+ 409f24: 00e82021 addu a0,a3,t0
+ 409f28: 8c900000 lw s0,0(a0)
+ 409f2c: 00000000 nop
+ 409f30: 1200003b beqz s0,40a020 <realloc+0x1b8>
+ 409f34: 2602ffff addiu v0,s0,-1
+ 409f38: 24030001 li v1,1
+ 409f3c: 00431004 sllv v0,v1,v0
+ 409f40: 0054102b sltu v0,v0,s4
+ 409f44: 10400016 beqz v0,409fa0 <realloc+0x138>
+ 409f48: 02802021 move a0,s4
+ 409f4c: 02031004 sllv v0,v1,s0
+ 409f50: 0054102b sltu v0,v0,s4
+ 409f54: 14400012 bnez v0,409fa0 <realloc+0x138>
+ 409f58: 00000000 nop
+ 409f5c: 02c02021 move a0,s6
+ 409f60: 8f99811c lw t9,-32484(gp)
+ 409f64: 00000000 nop
+ 409f68: 0320f809 jalr t9
+ 409f6c: 00000000 nop
+ 409f70: 8fbc0010 lw gp,16(sp)
+ 409f74: 02a01021 move v0,s5
+ 409f78: 8fbf0038 lw ra,56(sp)
+ 409f7c: 8fb60030 lw s6,48(sp)
+ 409f80: 8fb5002c lw s5,44(sp)
+ 409f84: 8fb40028 lw s4,40(sp)
+ 409f88: 8fb30024 lw s3,36(sp)
+ 409f8c: 8fb20020 lw s2,32(sp)
+ 409f90: 8fb1001c lw s1,28(sp)
+ 409f94: 8fb00018 lw s0,24(sp)
+ 409f98: 03e00008 jr ra
+ 409f9c: 27bd0040 addiu sp,sp,64
+ 409fa0: 8f998018 lw t9,-32744(gp)
+ 409fa4: 00000000 nop
+ 409fa8: 273990d0 addiu t9,t9,-28464
+ 409fac: 00000000 nop
+ 409fb0: 0320f809 jalr t9
+ 409fb4: 00000000 nop
+ 409fb8: 8fbc0010 lw gp,16(sp)
+ 409fbc: 00408821 move s1,v0
+ 409fc0: 122000ac beqz s1,40a274 <realloc+0x40c>
+ 409fc4: 00000000 nop
+ 409fc8: 24020001 li v0,1
+ 409fcc: 02023004 sllv a2,v0,s0
+ 409fd0: 0286102b sltu v0,s4,a2
+ 409fd4: 10400002 beqz v0,409fe0 <realloc+0x178>
+ 409fd8: 02a02821 move a1,s5
+ 409fdc: 02803021 move a2,s4
+ 409fe0: 02202021 move a0,s1
+ 409fe4: 8f998254 lw t9,-32172(gp)
+ 409fe8: 00000000 nop
+ 409fec: 0320f809 jalr t9
+ 409ff0: 00000000 nop
+ 409ff4: 8fbc0010 lw gp,16(sp)
+ 409ff8: 02a02021 move a0,s5
+ 409ffc: 8f998018 lw t9,-32744(gp)
+ 40a000: 00000000 nop
+ 40a004: 2739981c addiu t9,t9,-26596
+ 40a008: 00000000 nop
+ 40a00c: 0320f809 jalr t9
+ 40a010: 00000000 nop
+ 40a014: 8fbc0010 lw gp,16(sp)
+ 40a018: 100000c7 b 40a338 <realloc+0x4d0>
+ 40a01c: 00000000 nop
+ 40a020: 2e820801 sltiu v0,s4,2049
+ 40a024: 1040001d beqz v0,40a09c <realloc+0x234>
+ 40a028: 26820fff addiu v0,s4,4095
+ 40a02c: 02802021 move a0,s4
+ 40a030: 8f998018 lw t9,-32744(gp)
+ 40a034: 00000000 nop
+ 40a038: 273990d0 addiu t9,t9,-28464
+ 40a03c: 00000000 nop
+ 40a040: 0320f809 jalr t9
+ 40a044: 00000000 nop
+ 40a048: 8fbc0010 lw gp,16(sp)
+ 40a04c: 00408821 move s1,v0
+ 40a050: 122000b9 beqz s1,40a338 <realloc+0x4d0>
+ 40a054: 02202021 move a0,s1
+ 40a058: 02803021 move a2,s4
+ 40a05c: 02a02821 move a1,s5
+ 40a060: 8f998254 lw t9,-32172(gp)
+ 40a064: 00000000 nop
+ 40a068: 0320f809 jalr t9
+ 40a06c: 00000000 nop
+ 40a070: 8fbc0010 lw gp,16(sp)
+ 40a074: 02a02021 move a0,s5
+ 40a078: 8f998018 lw t9,-32744(gp)
+ 40a07c: 00000000 nop
+ 40a080: 2739981c addiu t9,t9,-26596
+ 40a084: 00000000 nop
+ 40a088: 0320f809 jalr t9
+ 40a08c: 00000000 nop
+ 40a090: 8fbc0010 lw gp,16(sp)
+ 40a094: 100000a8 b 40a338 <realloc+0x4d0>
+ 40a098: 00000000 nop
+ 40a09c: 8c920004 lw s2,4(a0)
+ 40a0a0: 00023302 srl a2,v0,0xc
+ 40a0a4: 00d2102b sltu v0,a2,s2
+ 40a0a8: 10400026 beqz v0,40a144 <realloc+0x2dc>
+ 40a0ac: 02662821 addu a1,s3,a2
+ 40a0b0: 00051840 sll v1,a1,0x1
+ 40a0b4: 00651821 addu v1,v1,a1
+ 40a0b8: 00031880 sll v1,v1,0x2
+ 40a0bc: 00681021 addu v0,v1,t0
+ 40a0c0: ac400000 sw zero,0(v0)
+ 40a0c4: 8f84801c lw a0,-32740(gp)
+ 40a0c8: 00000000 nop
+ 40a0cc: 24840904 addiu a0,a0,2308
+ 40a0d0: 8c840000 lw a0,0(a0)
+ 40a0d4: 24a5ffff addiu a1,a1,-1
+ 40a0d8: 00e41021 addu v0,a3,a0
+ 40a0dc: 8c420004 lw v0,4(v0)
+ 40a0e0: 00641821 addu v1,v1,a0
+ 40a0e4: 00461023 subu v0,v0,a2
+ 40a0e8: ac620004 sw v0,4(v1)
+ 40a0ec: 8f82801c lw v0,-32740(gp)
+ 40a0f0: 00000000 nop
+ 40a0f4: 24420904 addiu v0,v0,2308
+ 40a0f8: 8c420000 lw v0,0(v0)
+ 40a0fc: 00052b00 sll a1,a1,0xc
+ 40a100: 00e21021 addu v0,a3,v0
+ 40a104: ac460004 sw a2,4(v0)
+ 40a108: 8f84801c lw a0,-32740(gp)
+ 40a10c: 00000000 nop
+ 40a110: 24840900 addiu a0,a0,2304
+ 40a114: 8c840000 lw a0,0(a0)
+ 40a118: 00000000 nop
+ 40a11c: 00852021 addu a0,a0,a1
+ 40a120: 8f998018 lw t9,-32744(gp)
+ 40a124: 00000000 nop
+ 40a128: 2739981c addiu t9,t9,-26596
+ 40a12c: 00000000 nop
+ 40a130: 0320f809 jalr t9
+ 40a134: 00000000 nop
+ 40a138: 8fbc0010 lw gp,16(sp)
+ 40a13c: 1000ff88 b 409f60 <realloc+0xf8>
+ 40a140: 02c02021 move a0,s6
+ 40a144: 10d2ff85 beq a2,s2,409f5c <realloc+0xf4>
+ 40a148: 02a02021 move a0,s5
+ 40a14c: 8f90801c lw s0,-32740(gp)
+ 40a150: 00000000 nop
+ 40a154: 26100910 addiu s0,s0,2320
+ 40a158: 8e100000 lw s0,0(s0)
+ 40a15c: 8f81801c lw at,-32740(gp)
+ 40a160: 00000000 nop
+ 40a164: 24210910 addiu at,at,2320
+ 40a168: ac200000 sw zero,0(at)
+ 40a16c: 8f998018 lw t9,-32744(gp)
+ 40a170: 00000000 nop
+ 40a174: 2739981c addiu t9,t9,-26596
+ 40a178: 00000000 nop
+ 40a17c: 0320f809 jalr t9
+ 40a180: 00000000 nop
+ 40a184: 8fbc0010 lw gp,16(sp)
+ 40a188: 02802021 move a0,s4
+ 40a18c: 8f81801c lw at,-32740(gp)
+ 40a190: 00000000 nop
+ 40a194: 24210910 addiu at,at,2320
+ 40a198: ac300000 sw s0,0(at)
+ 40a19c: 8f998018 lw t9,-32744(gp)
+ 40a1a0: 00000000 nop
+ 40a1a4: 273990d0 addiu t9,t9,-28464
+ 40a1a8: 00000000 nop
+ 40a1ac: 0320f809 jalr t9
+ 40a1b0: 00000000 nop
+ 40a1b4: 8fbc0010 lw gp,16(sp)
+ 40a1b8: 00408821 move s1,v0
+ 40a1bc: 1220000c beqz s1,40a1f0 <realloc+0x388>
+ 40a1c0: 00000000 nop
+ 40a1c4: 12b1005c beq s5,s1,40a338 <realloc+0x4d0>
+ 40a1c8: 00123300 sll a2,s2,0xc
+ 40a1cc: 02a02821 move a1,s5
+ 40a1d0: 02202021 move a0,s1
+ 40a1d4: 8f998284 lw t9,-32124(gp)
+ 40a1d8: 00000000 nop
+ 40a1dc: 0320f809 jalr t9
+ 40a1e0: 00000000 nop
+ 40a1e4: 8fbc0010 lw gp,16(sp)
+ 40a1e8: 10000053 b 40a338 <realloc+0x4d0>
+ 40a1ec: 00000000 nop
+ 40a1f0: 8f82801c lw v0,-32740(gp)
+ 40a1f4: 00000000 nop
+ 40a1f8: 2442090c addiu v0,v0,2316
+ 40a1fc: 8c420000 lw v0,0(v0)
+ 40a200: 00000000 nop
+ 40a204: 10530025 beq v0,s3,40a29c <realloc+0x434>
+ 40a208: 02622023 subu a0,s3,v0
+ 40a20c: 00042300 sll a0,a0,0xc
+ 40a210: 8f998018 lw t9,-32744(gp)
+ 40a214: 00000000 nop
+ 40a218: 273990d0 addiu t9,t9,-28464
+ 40a21c: 00000000 nop
+ 40a220: 0320f809 jalr t9
+ 40a224: 00000000 nop
+ 40a228: 8fbc0010 lw gp,16(sp)
+ 40a22c: 00408021 move s0,v0
+ 40a230: 00122300 sll a0,s2,0xc
+ 40a234: 8f998018 lw t9,-32744(gp)
+ 40a238: 00000000 nop
+ 40a23c: 273990d0 addiu t9,t9,-28464
+ 40a240: 00000000 nop
+ 40a244: 0320f809 jalr t9
+ 40a248: 00000000 nop
+ 40a24c: 8fbc0010 lw gp,16(sp)
+ 40a250: 02002021 move a0,s0
+ 40a254: 8f998018 lw t9,-32744(gp)
+ 40a258: 00000000 nop
+ 40a25c: 2739981c addiu t9,t9,-26596
+ 40a260: 00000000 nop
+ 40a264: 0320f809 jalr t9
+ 40a268: 00000000 nop
+ 40a26c: 8fbc0010 lw gp,16(sp)
+ 40a270: 00000000 nop
+ 40a274: 8f84801c lw a0,-32740(gp)
+ 40a278: 00000000 nop
+ 40a27c: 248401b0 addiu a0,a0,432
+ 40a280: 8f99811c lw t9,-32484(gp)
+ 40a284: 00000000 nop
+ 40a288: 0320f809 jalr t9
+ 40a28c: 00000000 nop
+ 40a290: 8fbc0010 lw gp,16(sp)
+ 40a294: 1000ff38 b 409f78 <realloc+0x110>
+ 40a298: 00001021 move v0,zero
+ 40a29c: 00122300 sll a0,s2,0xc
+ 40a2a0: 8f998018 lw t9,-32744(gp)
+ 40a2a4: 00000000 nop
+ 40a2a8: 273990d0 addiu t9,t9,-28464
+ 40a2ac: 00000000 nop
+ 40a2b0: 0320f809 jalr t9
+ 40a2b4: 00000000 nop
+ 40a2b8: 8fbc0010 lw gp,16(sp)
+ 40a2bc: 1000ffed b 40a274 <realloc+0x40c>
+ 40a2c0: 00000000 nop
+ 40a2c4: 1000ff0e b 409f00 <realloc+0x98>
+ 40a2c8: 24420fff addiu v0,v0,4095
+ 40a2cc: 8f90801c lw s0,-32740(gp)
+ 40a2d0: 00000000 nop
+ 40a2d4: 261001b0 addiu s0,s0,432
+ 40a2d8: 00000000 nop
+ 40a2dc: 02002021 move a0,s0
+ 40a2e0: 8f9980a8 lw t9,-32600(gp)
+ 40a2e4: 00000000 nop
+ 40a2e8: 0320f809 jalr t9
+ 40a2ec: 00000000 nop
+ 40a2f0: 8fbc0010 lw gp,16(sp)
+ 40a2f4: 02a02021 move a0,s5
+ 40a2f8: 8f998018 lw t9,-32744(gp)
+ 40a2fc: 00000000 nop
+ 40a300: 2739981c addiu t9,t9,-26596
+ 40a304: 00000000 nop
+ 40a308: 0320f809 jalr t9
+ 40a30c: 00000000 nop
+ 40a310: 8fbc0010 lw gp,16(sp)
+ 40a314: 00002021 move a0,zero
+ 40a318: 8f998018 lw t9,-32744(gp)
+ 40a31c: 00000000 nop
+ 40a320: 273990d0 addiu t9,t9,-28464
+ 40a324: 00000000 nop
+ 40a328: 0320f809 jalr t9
+ 40a32c: 00000000 nop
+ 40a330: 8fbc0010 lw gp,16(sp)
+ 40a334: 00408821 move s1,v0
+ 40a338: 8f84801c lw a0,-32740(gp)
+ 40a33c: 00000000 nop
+ 40a340: 248401b0 addiu a0,a0,432
+ 40a344: 8f99811c lw t9,-32484(gp)
+ 40a348: 00000000 nop
+ 40a34c: 0320f809 jalr t9
+ 40a350: 00000000 nop
+ 40a354: 8fbc0010 lw gp,16(sp)
+ 40a358: 1000ff07 b 409f78 <realloc+0x110>
+ 40a35c: 02201021 move v0,s1
+ 40a360: 02802021 move a0,s4
+ 40a364: 8f998230 lw t9,-32208(gp)
+ 40a368: 00000000 nop
+ 40a36c: 0320f809 jalr t9
+ 40a370: 00000000 nop
+ 40a374: 8fbc0010 lw gp,16(sp)
+ 40a378: 1000feff b 409f78 <realloc+0x110>
+ 40a37c: 00000000 nop
+
+0040a380 <_exit>:
+ 40a380: 3c1c0fc0 lui gp,0xfc0
+ 40a384: 279cded0 addiu gp,gp,-8496
+ 40a388: 0399e021 addu gp,gp,t9
+ 40a38c: 27bdffd8 addiu sp,sp,-40
+ 40a390: afbc0010 sw gp,16(sp)
+ 40a394: afbf0020 sw ra,32(sp)
+ 40a398: afbc001c sw gp,28(sp)
+ 40a39c: afb00018 sw s0,24(sp)
+ 40a3a0: 00801821 move v1,a0
+ 40a3a4: 00602021 move a0,v1
+ 40a3a8: 24020fa1 li v0,4001
+ 40a3ac: 0000000c syscall
+ 40a3b0: 00408021 move s0,v0
+ 40a3b4: 00e01821 move v1,a3
+ 40a3b8: 10600007 beqz v1,40a3d8 <_exit+0x58>
+ 40a3bc: 00000000 nop
+ 40a3c0: 8f9980a0 lw t9,-32608(gp)
+ 40a3c4: 00000000 nop
+ 40a3c8: 0320f809 jalr t9
+ 40a3cc: 00000000 nop
+ 40a3d0: 8fbc0010 lw gp,16(sp)
+ 40a3d4: ac500000 sw s0,0(v0)
+ 40a3d8: 8fbf0020 lw ra,32(sp)
+ 40a3dc: 8fb00018 lw s0,24(sp)
+ 40a3e0: 03e00008 jr ra
+ 40a3e4: 27bd0028 addiu sp,sp,40
+ ...
+
+0040a3f0 <sbrk>:
+ 40a3f0: 3c1c0fc0 lui gp,0xfc0
+ 40a3f4: 279cde60 addiu gp,gp,-8608
+ 40a3f8: 0399e021 addu gp,gp,t9
+ 40a3fc: 27bdffd8 addiu sp,sp,-40
+ 40a400: afbc0010 sw gp,16(sp)
+ 40a404: 8f82820c lw v0,-32244(gp)
+ 40a408: 00000000 nop
+ 40a40c: 8c420000 lw v0,0(v0)
+ 40a410: afb1001c sw s1,28(sp)
+ 40a414: afbf0024 sw ra,36(sp)
+ 40a418: 00808821 move s1,a0
+ 40a41c: afbc0020 sw gp,32(sp)
+ 40a420: afb00018 sw s0,24(sp)
+ 40a424: 1040001b beqz v0,40a494 <sbrk+0xa4>
+ 40a428: 00002021 move a0,zero
+ 40a42c: 12200014 beqz s1,40a480 <sbrk+0x90>
+ 40a430: 00000000 nop
+ 40a434: 8f90820c lw s0,-32244(gp)
+ 40a438: 00000000 nop
+ 40a43c: 8e100000 lw s0,0(s0)
+ 40a440: 00000000 nop
+ 40a444: 02112021 addu a0,s0,s1
+ 40a448: 8f998088 lw t9,-32632(gp)
+ 40a44c: 00000000 nop
+ 40a450: 0320f809 jalr t9
+ 40a454: 00000000 nop
+ 40a458: 8fbc0010 lw gp,16(sp)
+ 40a45c: 00401821 move v1,v0
+ 40a460: 04600002 bltz v1,40a46c <sbrk+0x7c>
+ 40a464: 2402ffff li v0,-1
+ 40a468: 02001021 move v0,s0
+ 40a46c: 8fbf0024 lw ra,36(sp)
+ 40a470: 8fb1001c lw s1,28(sp)
+ 40a474: 8fb00018 lw s0,24(sp)
+ 40a478: 03e00008 jr ra
+ 40a47c: 27bd0028 addiu sp,sp,40
+ 40a480: 8f82820c lw v0,-32244(gp)
+ 40a484: 00000000 nop
+ 40a488: 8c420000 lw v0,0(v0)
+ 40a48c: 1000fff7 b 40a46c <sbrk+0x7c>
+ 40a490: 00000000 nop
+ 40a494: 8f998088 lw t9,-32632(gp)
+ 40a498: 00000000 nop
+ 40a49c: 0320f809 jalr t9
+ 40a4a0: 00000000 nop
+ 40a4a4: 8fbc0010 lw gp,16(sp)
+ 40a4a8: 00401821 move v1,v0
+ 40a4ac: 0461ffdf bgez v1,40a42c <sbrk+0x3c>
+ 40a4b0: 2402ffff li v0,-1
+ 40a4b4: 1000ffed b 40a46c <sbrk+0x7c>
+ 40a4b8: 00000000 nop
+ 40a4bc: 00000000 nop
+
+0040a4c0 <__libc_read>:
+ 40a4c0: 3c1c0fc0 lui gp,0xfc0
+ 40a4c4: 279cdd90 addiu gp,gp,-8816
+ 40a4c8: 0399e021 addu gp,gp,t9
+ 40a4cc: 27bdffd8 addiu sp,sp,-40
+ 40a4d0: afbc0010 sw gp,16(sp)
+ 40a4d4: afb1001c sw s1,28(sp)
+ 40a4d8: afb00018 sw s0,24(sp)
+ 40a4dc: afbf0024 sw ra,36(sp)
+ 40a4e0: afbc0020 sw gp,32(sp)
+ 40a4e4: 00808821 move s1,a0
+ 40a4e8: 00a08021 move s0,a1
+ 40a4ec: 00c01821 move v1,a2
+ 40a4f0: 02202021 move a0,s1
+ 40a4f4: 02002821 move a1,s0
+ 40a4f8: 00603021 move a2,v1
+ 40a4fc: 24020fa3 li v0,4003
+ 40a500: 0000000c syscall
+ 40a504: 00408021 move s0,v0
+ 40a508: 00e01821 move v1,a3
+ 40a50c: 10600009 beqz v1,40a534 <__libc_read+0x74>
+ 40a510: 02001021 move v0,s0
+ 40a514: 8f9980a0 lw t9,-32608(gp)
+ 40a518: 00000000 nop
+ 40a51c: 0320f809 jalr t9
+ 40a520: 00000000 nop
+ 40a524: 8fbc0010 lw gp,16(sp)
+ 40a528: 00401821 move v1,v0
+ 40a52c: ac700000 sw s0,0(v1)
+ 40a530: 2402ffff li v0,-1
+ 40a534: 8fbf0024 lw ra,36(sp)
+ 40a538: 8fb1001c lw s1,28(sp)
+ 40a53c: 8fb00018 lw s0,24(sp)
+ 40a540: 03e00008 jr ra
+ 40a544: 27bd0028 addiu sp,sp,40
+ ...
+
+0040a550 <__libc_write>:
+ 40a550: 3c1c0fc0 lui gp,0xfc0
+ 40a554: 279cdd00 addiu gp,gp,-8960
+ 40a558: 0399e021 addu gp,gp,t9
+ 40a55c: 27bdffd8 addiu sp,sp,-40
+ 40a560: afbc0010 sw gp,16(sp)
+ 40a564: afb1001c sw s1,28(sp)
+ 40a568: afb00018 sw s0,24(sp)
+ 40a56c: afbf0024 sw ra,36(sp)
+ 40a570: afbc0020 sw gp,32(sp)
+ 40a574: 00808821 move s1,a0
+ 40a578: 00a08021 move s0,a1
+ 40a57c: 00c01821 move v1,a2
+ 40a580: 02202021 move a0,s1
+ 40a584: 02002821 move a1,s0
+ 40a588: 00603021 move a2,v1
+ 40a58c: 24020fa4 li v0,4004
+ 40a590: 0000000c syscall
+ 40a594: 00408021 move s0,v0
+ 40a598: 00e01821 move v1,a3
+ 40a59c: 10600009 beqz v1,40a5c4 <__libc_write+0x74>
+ 40a5a0: 02001021 move v0,s0
+ 40a5a4: 8f9980a0 lw t9,-32608(gp)
+ 40a5a8: 00000000 nop
+ 40a5ac: 0320f809 jalr t9
+ 40a5b0: 00000000 nop
+ 40a5b4: 8fbc0010 lw gp,16(sp)
+ 40a5b8: 00401821 move v1,v0
+ 40a5bc: ac700000 sw s0,0(v1)
+ 40a5c0: 2402ffff li v0,-1
+ 40a5c4: 8fbf0024 lw ra,36(sp)
+ 40a5c8: 8fb1001c lw s1,28(sp)
+ 40a5cc: 8fb00018 lw s0,24(sp)
+ 40a5d0: 03e00008 jr ra
+ 40a5d4: 27bd0028 addiu sp,sp,40
+ ...
+
+0040a5e0 <__libc_open>:
+ 40a5e0: 3c1c0fc0 lui gp,0xfc0
+ 40a5e4: 279cdc70 addiu gp,gp,-9104
+ 40a5e8: 0399e021 addu gp,gp,t9
+ 40a5ec: 27bdffd8 addiu sp,sp,-40
+ 40a5f0: afbc0010 sw gp,16(sp)
+ 40a5f4: afb1001c sw s1,28(sp)
+ 40a5f8: afb00018 sw s0,24(sp)
+ 40a5fc: afbf0024 sw ra,36(sp)
+ 40a600: afbc0020 sw gp,32(sp)
+ 40a604: 00808821 move s1,a0
+ 40a608: 00a08021 move s0,a1
+ 40a60c: 00c01821 move v1,a2
+ 40a610: 02202021 move a0,s1
+ 40a614: 02002821 move a1,s0
+ 40a618: 00603021 move a2,v1
+ 40a61c: 24020fa5 li v0,4005
+ 40a620: 0000000c syscall
+ 40a624: 00408021 move s0,v0
+ 40a628: 00e01821 move v1,a3
+ 40a62c: 10600009 beqz v1,40a654 <__libc_open+0x74>
+ 40a630: 02001021 move v0,s0
+ 40a634: 8f9980a0 lw t9,-32608(gp)
+ 40a638: 00000000 nop
+ 40a63c: 0320f809 jalr t9
+ 40a640: 00000000 nop
+ 40a644: 8fbc0010 lw gp,16(sp)
+ 40a648: 00401821 move v1,v0
+ 40a64c: ac700000 sw s0,0(v1)
+ 40a650: 2402ffff li v0,-1
+ 40a654: 8fbf0024 lw ra,36(sp)
+ 40a658: 8fb1001c lw s1,28(sp)
+ 40a65c: 8fb00018 lw s0,24(sp)
+ 40a660: 03e00008 jr ra
+ 40a664: 27bd0028 addiu sp,sp,40
+ ...
+
+0040a670 <__libc_close>:
+ 40a670: 3c1c0fc0 lui gp,0xfc0
+ 40a674: 279cdbe0 addiu gp,gp,-9248
+ 40a678: 0399e021 addu gp,gp,t9
+ 40a67c: 27bdffd8 addiu sp,sp,-40
+ 40a680: afbc0010 sw gp,16(sp)
+ 40a684: afbf0020 sw ra,32(sp)
+ 40a688: afbc001c sw gp,28(sp)
+ 40a68c: afb00018 sw s0,24(sp)
+ 40a690: 00801821 move v1,a0
+ 40a694: 00602021 move a0,v1
+ 40a698: 24020fa6 li v0,4006
+ 40a69c: 0000000c syscall
+ 40a6a0: 00408021 move s0,v0
+ 40a6a4: 00e01821 move v1,a3
+ 40a6a8: 10600009 beqz v1,40a6d0 <__libc_close+0x60>
+ 40a6ac: 02001021 move v0,s0
+ 40a6b0: 8f9980a0 lw t9,-32608(gp)
+ 40a6b4: 00000000 nop
+ 40a6b8: 0320f809 jalr t9
+ 40a6bc: 00000000 nop
+ 40a6c0: 8fbc0010 lw gp,16(sp)
+ 40a6c4: 00401821 move v1,v0
+ 40a6c8: ac700000 sw s0,0(v1)
+ 40a6cc: 2402ffff li v0,-1
+ 40a6d0: 8fbf0020 lw ra,32(sp)
+ 40a6d4: 8fb00018 lw s0,24(sp)
+ 40a6d8: 03e00008 jr ra
+ 40a6dc: 27bd0028 addiu sp,sp,40
+
+0040a6e0 <_ioctl>:
+ 40a6e0: 3c1c0fc0 lui gp,0xfc0
+ 40a6e4: 279cdb70 addiu gp,gp,-9360
+ 40a6e8: 0399e021 addu gp,gp,t9
+ 40a6ec: 27bdffd8 addiu sp,sp,-40
+ 40a6f0: afbc0010 sw gp,16(sp)
+ 40a6f4: afb1001c sw s1,28(sp)
+ 40a6f8: afb00018 sw s0,24(sp)
+ 40a6fc: afbf0024 sw ra,36(sp)
+ 40a700: afbc0020 sw gp,32(sp)
+ 40a704: 00808821 move s1,a0
+ 40a708: 00a08021 move s0,a1
+ 40a70c: 00c01821 move v1,a2
+ 40a710: 02202021 move a0,s1
+ 40a714: 02002821 move a1,s0
+ 40a718: 00603021 move a2,v1
+ 40a71c: 24020fd6 li v0,4054
+ 40a720: 0000000c syscall
+ 40a724: 00408021 move s0,v0
+ 40a728: 00e01821 move v1,a3
+ 40a72c: 10600009 beqz v1,40a754 <_ioctl+0x74>
+ 40a730: 02001021 move v0,s0
+ 40a734: 8f9980a0 lw t9,-32608(gp)
+ 40a738: 00000000 nop
+ 40a73c: 0320f809 jalr t9
+ 40a740: 00000000 nop
+ 40a744: 8fbc0010 lw gp,16(sp)
+ 40a748: 00401821 move v1,v0
+ 40a74c: ac700000 sw s0,0(v1)
+ 40a750: 2402ffff li v0,-1
+ 40a754: 8fbf0024 lw ra,36(sp)
+ 40a758: 8fb1001c lw s1,28(sp)
+ 40a75c: 8fb00018 lw s0,24(sp)
+ 40a760: 03e00008 jr ra
+ 40a764: 27bd0028 addiu sp,sp,40
+
+0040a768 <ioctl>:
+ 40a768: 3c1c0fc0 lui gp,0xfc0
+ 40a76c: 279cdae8 addiu gp,gp,-9496
+ 40a770: 0399e021 addu gp,gp,t9
+ 40a774: 27bdffe0 addiu sp,sp,-32
+ 40a778: afbc0010 sw gp,16(sp)
+ 40a77c: 27a2002b addiu v0,sp,43
+ 40a780: 2403fffc li v1,-4
+ 40a784: afbf001c sw ra,28(sp)
+ 40a788: afa50024 sw a1,36(sp)
+ 40a78c: afa60028 sw a2,40(sp)
+ 40a790: afa7002c sw a3,44(sp)
+ 40a794: afbc0018 sw gp,24(sp)
+ 40a798: 00431024 and v0,v0,v1
+ 40a79c: 8c460000 lw a2,0(v0)
+ 40a7a0: 8f998090 lw t9,-32624(gp)
+ 40a7a4: 00000000 nop
+ 40a7a8: 0320f809 jalr t9
+ 40a7ac: 00000000 nop
+ 40a7b0: 8fbc0010 lw gp,16(sp)
+ 40a7b4: 8fbf001c lw ra,28(sp)
+ 40a7b8: 00000000 nop
+ 40a7bc: 03e00008 jr ra
+ 40a7c0: 27bd0020 addiu sp,sp,32
+ ...
+
+0040a7d0 <brk>:
+ 40a7d0: 3c1c0fc0 lui gp,0xfc0
+ 40a7d4: 279cda80 addiu gp,gp,-9600
+ 40a7d8: 0399e021 addu gp,gp,t9
+ 40a7dc: 27bdffe0 addiu sp,sp,-32
+ 40a7e0: afbc0010 sw gp,16(sp)
+ 40a7e4: 00801821 move v1,a0
+ 40a7e8: 24020fcd li v0,4045
+ 40a7ec: 00602021 move a0,v1
+ 40a7f0: 0000000c syscall
+ 40a7f4: 0043182b sltu v1,v0,v1
+ 40a7f8: afbf001c sw ra,28(sp)
+ 40a7fc: afbc0018 sw gp,24(sp)
+ 40a800: 8f81820c lw at,-32244(gp)
+ 40a804: 00000000 nop
+ 40a808: ac220000 sw v0,0(at)
+ 40a80c: 1060000a beqz v1,40a838 <brk+0x68>
+ 40a810: 00001021 move v0,zero
+ 40a814: 8f9980a0 lw t9,-32608(gp)
+ 40a818: 00000000 nop
+ 40a81c: 0320f809 jalr t9
+ 40a820: 00000000 nop
+ 40a824: 8fbc0010 lw gp,16(sp)
+ 40a828: 00402021 move a0,v0
+ 40a82c: 2403000c li v1,12
+ 40a830: 2402ffff li v0,-1
+ 40a834: ac830000 sw v1,0(a0)
+ 40a838: 8fbf001c lw ra,28(sp)
+ 40a83c: 00000000 nop
+ 40a840: 03e00008 jr ra
+ 40a844: 27bd0020 addiu sp,sp,32
+ ...
+
+0040a850 <usleep>:
+ 40a850: 3c1c0fc0 lui gp,0xfc0
+ 40a854: 279cda00 addiu gp,gp,-9728
+ 40a858: 0399e021 addu gp,gp,t9
+ 40a85c: 27bdffd8 addiu sp,sp,-40
+ 40a860: afbc0010 sw gp,16(sp)
+ 40a864: 3c06431b lui a2,0x431b
+ 40a868: 00803821 move a3,a0
+ 40a86c: 34c6de83 ori a2,a2,0xde83
+ 40a870: 00e60019 multu a3,a2
+ 40a874: 27a40018 addiu a0,sp,24
+ 40a878: 00002821 move a1,zero
+ 40a87c: afbf0024 sw ra,36(sp)
+ 40a880: afbc0020 sw gp,32(sp)
+ 40a884: 00003010 mfhi a2
+ 40a888: 00063482 srl a2,a2,0x12
+ 40a88c: 00061940 sll v1,a2,0x5
+ 40a890: 00661823 subu v1,v1,a2
+ 40a894: 00031180 sll v0,v1,0x6
+ 40a898: 00431023 subu v0,v0,v1
+ 40a89c: 000210c0 sll v0,v0,0x3
+ 40a8a0: 00461021 addu v0,v0,a2
+ 40a8a4: 00021180 sll v0,v0,0x6
+ 40a8a8: 00e23823 subu a3,a3,v0
+ 40a8ac: 00071140 sll v0,a3,0x5
+ 40a8b0: 00471023 subu v0,v0,a3
+ 40a8b4: 00021080 sll v0,v0,0x2
+ 40a8b8: 00471021 addu v0,v0,a3
+ 40a8bc: 000210c0 sll v0,v0,0x3
+ 40a8c0: afa2001c sw v0,28(sp)
+ 40a8c4: afa60018 sw a2,24(sp)
+ 40a8c8: 8f9981d4 lw t9,-32300(gp)
+ 40a8cc: 00000000 nop
+ 40a8d0: 0320f809 jalr t9
+ 40a8d4: 00000000 nop
+ 40a8d8: 8fbc0010 lw gp,16(sp)
+ 40a8dc: 8fbf0024 lw ra,36(sp)
+ 40a8e0: 00000000 nop
+ 40a8e4: 03e00008 jr ra
+ 40a8e8: 27bd0028 addiu sp,sp,40
+ 40a8ec: 00000000 nop
+
+0040a8f0 <isxdigit>:
+ 40a8f0: 3c1c0fc0 lui gp,0xfc0
+ 40a8f4: 279cd960 addiu gp,gp,-9888
+ 40a8f8: 0399e021 addu gp,gp,t9
+ 40a8fc: 34820020 ori v0,a0,0x20
+ 40a900: 2484ffd0 addiu a0,a0,-48
+ 40a904: 2442ff9f addiu v0,v0,-97
+ 40a908: 2c84000a sltiu a0,a0,10
+ 40a90c: 2c420006 sltiu v0,v0,6
+ 40a910: 14800003 bnez a0,40a920 <isxdigit+0x30>
+ 40a914: 00001821 move v1,zero
+ 40a918: 10400002 beqz v0,40a924 <isxdigit+0x34>
+ 40a91c: 00000000 nop
+ 40a920: 24030001 li v1,1
+ 40a924: 03e00008 jr ra
+ 40a928: 00601021 move v0,v1
+ 40a92c: 00000000 nop
+
+0040a930 <tolower>:
+ 40a930: 3c1c0fc0 lui gp,0xfc0
+ 40a934: 279cd920 addiu gp,gp,-9952
+ 40a938: 0399e021 addu gp,gp,t9
+ 40a93c: 2482ffbf addiu v0,a0,-65
+ 40a940: 2c42001a sltiu v0,v0,26
+ 40a944: 10400002 beqz v0,40a950 <tolower+0x20>
+ 40a948: 00000000 nop
+ 40a94c: 34840020 ori a0,a0,0x20
+ 40a950: 03e00008 jr ra
+ 40a954: 00801021 move v0,a0
+ ...
+
+0040a960 <pthread_exit>:
+ 40a960: 3c1c0fc0 lui gp,0xfc0
+ 40a964: 279cd8f0 addiu gp,gp,-10000
+ 40a968: 0399e021 addu gp,gp,t9
+ 40a96c: 27bdffe0 addiu sp,sp,-32
+ 40a970: afbc0010 sw gp,16(sp)
+ 40a974: 00002021 move a0,zero
+ 40a978: afbf001c sw ra,28(sp)
+ 40a97c: afbc0018 sw gp,24(sp)
+ 40a980: 8f99809c lw t9,-32612(gp)
+ 40a984: 00000000 nop
+ 40a988: 0320f809 jalr t9
+ 40a98c: 00000000 nop
+ 40a990: 8fbc0010 lw gp,16(sp)
+ 40a994: 00000000 nop
+
+0040a998 <__pthread_return_0>:
+ 40a998: 3c1c0fc0 lui gp,0xfc0
+ 40a99c: 279cd8b8 addiu gp,gp,-10056
+ 40a9a0: 0399e021 addu gp,gp,t9
+ 40a9a4: 03e00008 jr ra
+ 40a9a8: 00001021 move v0,zero
+
+0040a9ac <__pthread_return_1>:
+ 40a9ac: 3c1c0fc0 lui gp,0xfc0
+ 40a9b0: 279cd8a4 addiu gp,gp,-10076
+ 40a9b4: 0399e021 addu gp,gp,t9
+ 40a9b8: 03e00008 jr ra
+ 40a9bc: 24020001 li v0,1
+
+0040a9c0 <__pthread_return_void>:
+ 40a9c0: 3c1c0fc0 lui gp,0xfc0
+ 40a9c4: 279cd890 addiu gp,gp,-10096
+ 40a9c8: 0399e021 addu gp,gp,t9
+ 40a9cc: 03e00008 jr ra
+ 40a9d0: 00000000 nop
+ ...
+
+0040a9e0 <fgetc>:
+ 40a9e0: 3c1c0fc0 lui gp,0xfc0
+ 40a9e4: 279cd870 addiu gp,gp,-10128
+ 40a9e8: 0399e021 addu gp,gp,t9
+ 40a9ec: 27bdffd8 addiu sp,sp,-40
+ 40a9f0: afbc0010 sw gp,16(sp)
+ 40a9f4: afb00018 sw s0,24(sp)
+ 40a9f8: afbf0024 sw ra,36(sp)
+ 40a9fc: 00808021 move s0,a0
+ 40aa00: afbc0020 sw gp,32(sp)
+ 40aa04: afb1001c sw s1,28(sp)
+ 40aa08: 8e020038 lw v0,56(s0)
+ 40aa0c: 00000000 nop
+ 40aa10: 10400019 beqz v0,40aa78 <fgetc+0x98>
+ 40aa14: 2604003c addiu a0,s0,60
+ 40aa18: 02002021 move a0,s0
+ 40aa1c: 8f9980b0 lw t9,-32592(gp)
+ 40aa20: 00000000 nop
+ 40aa24: 0320f809 jalr t9
+ 40aa28: 00000000 nop
+ 40aa2c: 8fbc0010 lw gp,16(sp)
+ 40aa30: 00408821 move s1,v0
+ 40aa34: 8e020038 lw v0,56(s0)
+ 40aa38: 00000000 nop
+ 40aa3c: 10400007 beqz v0,40aa5c <fgetc+0x7c>
+ 40aa40: 2604003c addiu a0,s0,60
+ 40aa44: 02201021 move v0,s1
+ 40aa48: 8fbf0024 lw ra,36(sp)
+ 40aa4c: 8fb1001c lw s1,28(sp)
+ 40aa50: 8fb00018 lw s0,24(sp)
+ 40aa54: 03e00008 jr ra
+ 40aa58: 27bd0028 addiu sp,sp,40
+ 40aa5c: 8f99811c lw t9,-32484(gp)
+ 40aa60: 00000000 nop
+ 40aa64: 0320f809 jalr t9
+ 40aa68: 00000000 nop
+ 40aa6c: 8fbc0010 lw gp,16(sp)
+ 40aa70: 1000fff5 b 40aa48 <fgetc+0x68>
+ 40aa74: 02201021 move v0,s1
+ 40aa78: 8f9980a8 lw t9,-32600(gp)
+ 40aa7c: 00000000 nop
+ 40aa80: 0320f809 jalr t9
+ 40aa84: 00000000 nop
+ 40aa88: 8fbc0010 lw gp,16(sp)
+ 40aa8c: 1000ffe3 b 40aa1c <fgetc+0x3c>
+ 40aa90: 02002021 move a0,s0
+
+0040aa94 <fgetc_unlocked>:
+ 40aa94: 3c1c0fc0 lui gp,0xfc0
+ 40aa98: 279cd7bc addiu gp,gp,-10308
+ 40aa9c: 0399e021 addu gp,gp,t9
+ 40aaa0: 27bdffd8 addiu sp,sp,-40
+ 40aaa4: afbc0010 sw gp,16(sp)
+ 40aaa8: 00803021 move a2,a0
+ 40aaac: 24050001 li a1,1
+ 40aab0: 27a40018 addiu a0,sp,24
+ 40aab4: afbf0024 sw ra,36(sp)
+ 40aab8: afbc0020 sw gp,32(sp)
+ 40aabc: 8f998158 lw t9,-32424(gp)
+ 40aac0: 00000000 nop
+ 40aac4: 0320f809 jalr t9
+ 40aac8: 00000000 nop
+ 40aacc: 8fbc0010 lw gp,16(sp)
+ 40aad0: 10400002 beqz v0,40aadc <fgetc_unlocked+0x48>
+ 40aad4: 2403ffff li v1,-1
+ 40aad8: 93a30018 lbu v1,24(sp)
+ 40aadc: 8fbf0024 lw ra,36(sp)
+ 40aae0: 00601021 move v0,v1
+ 40aae4: 03e00008 jr ra
+ 40aae8: 27bd0028 addiu sp,sp,40
+ 40aaec: 00000000 nop
+
+0040aaf0 <fputc>:
+ 40aaf0: 3c1c0fc0 lui gp,0xfc0
+ 40aaf4: 279cd760 addiu gp,gp,-10400
+ 40aaf8: 0399e021 addu gp,gp,t9
+ 40aafc: 27bdffd8 addiu sp,sp,-40
+ 40ab00: afbc0010 sw gp,16(sp)
+ 40ab04: afb1001c sw s1,28(sp)
+ 40ab08: afb00018 sw s0,24(sp)
+ 40ab0c: afbf0024 sw ra,36(sp)
+ 40ab10: 00a08021 move s0,a1
+ 40ab14: afbc0020 sw gp,32(sp)
+ 40ab18: 8e030038 lw v1,56(s0)
+ 40ab1c: 2602003c addiu v0,s0,60
+ 40ab20: 00808821 move s1,a0
+ 40ab24: 1060001a beqz v1,40ab90 <fputc+0xa0>
+ 40ab28: 00402021 move a0,v0
+ 40ab2c: 02202021 move a0,s1
+ 40ab30: 02002821 move a1,s0
+ 40ab34: 8f998044 lw t9,-32700(gp)
+ 40ab38: 00000000 nop
+ 40ab3c: 0320f809 jalr t9
+ 40ab40: 00000000 nop
+ 40ab44: 8fbc0010 lw gp,16(sp)
+ 40ab48: 00408821 move s1,v0
+ 40ab4c: 8e020038 lw v0,56(s0)
+ 40ab50: 00000000 nop
+ 40ab54: 10400007 beqz v0,40ab74 <fputc+0x84>
+ 40ab58: 2604003c addiu a0,s0,60
+ 40ab5c: 02201021 move v0,s1
+ 40ab60: 8fbf0024 lw ra,36(sp)
+ 40ab64: 8fb1001c lw s1,28(sp)
+ 40ab68: 8fb00018 lw s0,24(sp)
+ 40ab6c: 03e00008 jr ra
+ 40ab70: 27bd0028 addiu sp,sp,40
+ 40ab74: 8f99811c lw t9,-32484(gp)
+ 40ab78: 00000000 nop
+ 40ab7c: 0320f809 jalr t9
+ 40ab80: 00000000 nop
+ 40ab84: 8fbc0010 lw gp,16(sp)
+ 40ab88: 1000fff5 b 40ab60 <fputc+0x70>
+ 40ab8c: 02201021 move v0,s1
+ 40ab90: 8f9980a8 lw t9,-32600(gp)
+ 40ab94: 00000000 nop
+ 40ab98: 0320f809 jalr t9
+ 40ab9c: 00000000 nop
+ 40aba0: 8fbc0010 lw gp,16(sp)
+ 40aba4: 1000ffe2 b 40ab30 <fputc+0x40>
+ 40aba8: 02202021 move a0,s1
+
+0040abac <fputc_unlocked>:
+ 40abac: 3c1c0fc0 lui gp,0xfc0
+ 40abb0: 279cd6a4 addiu gp,gp,-10588
+ 40abb4: 0399e021 addu gp,gp,t9
+ 40abb8: 27bdffd8 addiu sp,sp,-40
+ 40abbc: afbc0010 sw gp,16(sp)
+ 40abc0: 00801021 move v0,a0
+ 40abc4: 00a03021 move a2,a1
+ 40abc8: 27a40018 addiu a0,sp,24
+ 40abcc: 24050001 li a1,1
+ 40abd0: afbf0024 sw ra,36(sp)
+ 40abd4: afbc0020 sw gp,32(sp)
+ 40abd8: a3a20018 sb v0,24(sp)
+ 40abdc: 8f9982a4 lw t9,-32092(gp)
+ 40abe0: 00000000 nop
+ 40abe4: 0320f809 jalr t9
+ 40abe8: 00000000 nop
+ 40abec: 8fbc0010 lw gp,16(sp)
+ 40abf0: 10400002 beqz v0,40abfc <fputc_unlocked+0x50>
+ 40abf4: 2403ffff li v1,-1
+ 40abf8: 93a30018 lbu v1,24(sp)
+ 40abfc: 8fbf0024 lw ra,36(sp)
+ 40ac00: 00601021 move v0,v1
+ 40ac04: 03e00008 jr ra
+ 40ac08: 27bd0028 addiu sp,sp,40
+ 40ac0c: 00000000 nop
+
+0040ac10 <fputs>:
+ 40ac10: 3c1c0fc0 lui gp,0xfc0
+ 40ac14: 279cd640 addiu gp,gp,-10688
+ 40ac18: 0399e021 addu gp,gp,t9
+ 40ac1c: 27bdffd8 addiu sp,sp,-40
+ 40ac20: afbc0010 sw gp,16(sp)
+ 40ac24: afb1001c sw s1,28(sp)
+ 40ac28: afb00018 sw s0,24(sp)
+ 40ac2c: afbf0024 sw ra,36(sp)
+ 40ac30: 00a08021 move s0,a1
+ 40ac34: afbc0020 sw gp,32(sp)
+ 40ac38: 8e030038 lw v1,56(s0)
+ 40ac3c: 2602003c addiu v0,s0,60
+ 40ac40: 00808821 move s1,a0
+ 40ac44: 1060001a beqz v1,40acb0 <fputs+0xa0>
+ 40ac48: 00402021 move a0,v0
+ 40ac4c: 02202021 move a0,s1
+ 40ac50: 02002821 move a1,s0
+ 40ac54: 8f9981bc lw t9,-32324(gp)
+ 40ac58: 00000000 nop
+ 40ac5c: 0320f809 jalr t9
+ 40ac60: 00000000 nop
+ 40ac64: 8fbc0010 lw gp,16(sp)
+ 40ac68: 00408821 move s1,v0
+ 40ac6c: 8e020038 lw v0,56(s0)
+ 40ac70: 00000000 nop
+ 40ac74: 10400007 beqz v0,40ac94 <fputs+0x84>
+ 40ac78: 2604003c addiu a0,s0,60
+ 40ac7c: 02201021 move v0,s1
+ 40ac80: 8fbf0024 lw ra,36(sp)
+ 40ac84: 8fb1001c lw s1,28(sp)
+ 40ac88: 8fb00018 lw s0,24(sp)
+ 40ac8c: 03e00008 jr ra
+ 40ac90: 27bd0028 addiu sp,sp,40
+ 40ac94: 8f99811c lw t9,-32484(gp)
+ 40ac98: 00000000 nop
+ 40ac9c: 0320f809 jalr t9
+ 40aca0: 00000000 nop
+ 40aca4: 8fbc0010 lw gp,16(sp)
+ 40aca8: 1000fff5 b 40ac80 <fputs+0x70>
+ 40acac: 02201021 move v0,s1
+ 40acb0: 8f9980a8 lw t9,-32600(gp)
+ 40acb4: 00000000 nop
+ 40acb8: 0320f809 jalr t9
+ 40acbc: 00000000 nop
+ 40acc0: 8fbc0010 lw gp,16(sp)
+ 40acc4: 1000ffe2 b 40ac50 <fputs+0x40>
+ 40acc8: 02202021 move a0,s1
+
+0040accc <fputs_unlocked>:
+ 40accc: 3c1c0fc0 lui gp,0xfc0
+ 40acd0: 279cd584 addiu gp,gp,-10876
+ 40acd4: 0399e021 addu gp,gp,t9
+ 40acd8: 27bdffd0 addiu sp,sp,-48
+ 40acdc: afbc0010 sw gp,16(sp)
+ 40ace0: afb20020 sw s2,32(sp)
+ 40ace4: afb1001c sw s1,28(sp)
+ 40ace8: afb00018 sw s0,24(sp)
+ 40acec: afbf0028 sw ra,40(sp)
+ 40acf0: afbc0024 sw gp,36(sp)
+ 40acf4: 00a09021 move s2,a1
+ 40acf8: 00808021 move s0,a0
+ 40acfc: 8f998068 lw t9,-32664(gp)
+ 40ad00: 00000000 nop
+ 40ad04: 0320f809 jalr t9
+ 40ad08: 00000000 nop
+ 40ad0c: 8fbc0010 lw gp,16(sp)
+ 40ad10: 00408821 move s1,v0
+ 40ad14: 02002021 move a0,s0
+ 40ad18: 02202821 move a1,s1
+ 40ad1c: 02403021 move a2,s2
+ 40ad20: 8f9982a4 lw t9,-32092(gp)
+ 40ad24: 00000000 nop
+ 40ad28: 0320f809 jalr t9
+ 40ad2c: 00000000 nop
+ 40ad30: 8fbc0010 lw gp,16(sp)
+ 40ad34: 10510002 beq v0,s1,40ad40 <fputs_unlocked+0x74>
+ 40ad38: 00401821 move v1,v0
+ 40ad3c: 2403ffff li v1,-1
+ 40ad40: 8fbf0028 lw ra,40(sp)
+ 40ad44: 8fb20020 lw s2,32(sp)
+ 40ad48: 8fb1001c lw s1,28(sp)
+ 40ad4c: 8fb00018 lw s0,24(sp)
+ 40ad50: 00601021 move v0,v1
+ 40ad54: 03e00008 jr ra
+ 40ad58: 27bd0030 addiu sp,sp,48
+ 40ad5c: 00000000 nop
+
+0040ad60 <ungetc>:
+ 40ad60: 3c1c0fc0 lui gp,0xfc0
+ 40ad64: 279cd4f0 addiu gp,gp,-11024
+ 40ad68: 0399e021 addu gp,gp,t9
+ 40ad6c: 27bdffd8 addiu sp,sp,-40
+ 40ad70: afbc0010 sw gp,16(sp)
+ 40ad74: afb00018 sw s0,24(sp)
+ 40ad78: 00a08021 move s0,a1
+ 40ad7c: 8e020038 lw v0,56(s0)
+ 40ad80: afb1001c sw s1,28(sp)
+ 40ad84: afbf0024 sw ra,36(sp)
+ 40ad88: afbc0020 sw gp,32(sp)
+ 40ad8c: 10400036 beqz v0,40ae68 <ungetc+0x108>
+ 40ad90: 00808821 move s1,a0
+ 40ad94: 96030000 lhu v1,0(s0)
+ 40ad98: 00000000 nop
+ 40ad9c: 30620012 andi v0,v1,0x12
+ 40ada0: 10400014 beqz v0,40adf4 <ungetc+0x94>
+ 40ada4: 30620001 andi v0,v1,0x1
+ 40ada8: 2411ffff li s1,-1
+ 40adac: 8e020038 lw v0,56(s0)
+ 40adb0: 00000000 nop
+ 40adb4: 10400007 beqz v0,40add4 <ungetc+0x74>
+ 40adb8: 00000000 nop
+ 40adbc: 02201021 move v0,s1
+ 40adc0: 8fbf0024 lw ra,36(sp)
+ 40adc4: 8fb1001c lw s1,28(sp)
+ 40adc8: 8fb00018 lw s0,24(sp)
+ 40adcc: 03e00008 jr ra
+ 40add0: 27bd0028 addiu sp,sp,40
+ 40add4: 2604003c addiu a0,s0,60
+ 40add8: 8f99811c lw t9,-32484(gp)
+ 40addc: 00000000 nop
+ 40ade0: 0320f809 jalr t9
+ 40ade4: 00000000 nop
+ 40ade8: 8fbc0010 lw gp,16(sp)
+ 40adec: 1000fff4 b 40adc0 <ungetc+0x60>
+ 40adf0: 02201021 move v0,s1
+ 40adf4: 10400005 beqz v0,40ae0c <ungetc+0xac>
+ 40adf8: 2402ffff li v0,-1
+ 40adfc: 92020003 lbu v0,3(s0)
+ 40ae00: 00000000 nop
+ 40ae04: 1440ffe8 bnez v0,40ada8 <ungetc+0x48>
+ 40ae08: 2402ffff li v0,-1
+ 40ae0c: 1222ffe6 beq s1,v0,40ada8 <ungetc+0x48>
+ 40ae10: 30622000 andi v0,v1,0x2000
+ 40ae14: 10400007 beqz v0,40ae34 <ungetc+0xd4>
+ 40ae18: 00000000 nop
+ 40ae1c: 02002021 move a0,s0
+ 40ae20: 8f9980d8 lw t9,-32552(gp)
+ 40ae24: 00000000 nop
+ 40ae28: 0320f809 jalr t9
+ 40ae2c: 00000000 nop
+ 40ae30: 8fbc0010 lw gp,16(sp)
+ 40ae34: 96020000 lhu v0,0(s0)
+ 40ae38: 24030001 li v1,1
+ 40ae3c: 3042dffb andi v0,v0,0xdffb
+ 40ae40: 34421000 ori v0,v0,0x1000
+ 40ae44: 30440003 andi a0,v0,0x3
+ 40ae48: 02042021 addu a0,s0,a0
+ 40ae4c: 24420001 addiu v0,v0,1
+ 40ae50: a6020000 sh v0,0(s0)
+ 40ae54: a2030003 sb v1,3(s0)
+ 40ae58: a0910002 sb s1,2(a0)
+ 40ae5c: 8e02000c lw v0,12(s0)
+ 40ae60: 1000ffd2 b 40adac <ungetc+0x4c>
+ 40ae64: ae02001c sw v0,28(s0)
+ 40ae68: 2604003c addiu a0,s0,60
+ 40ae6c: 8f9980a8 lw t9,-32600(gp)
+ 40ae70: 00000000 nop
+ 40ae74: 0320f809 jalr t9
+ 40ae78: 00000000 nop
+ 40ae7c: 8fbc0010 lw gp,16(sp)
+ 40ae80: 1000ffc4 b 40ad94 <ungetc+0x34>
+ 40ae84: 00000000 nop
+ ...
+
+0040ae90 <fseek>:
+ 40ae90: 3c1c0fc0 lui gp,0xfc0
+ 40ae94: 279cd3c0 addiu gp,gp,-11328
+ 40ae98: 0399e021 addu gp,gp,t9
+ 40ae9c: 27bdffc8 addiu sp,sp,-56
+ 40aea0: afbc0010 sw gp,16(sp)
+ 40aea4: afb10024 sw s1,36(sp)
+ 40aea8: 00c08821 move s1,a2
+ 40aeac: 2e220003 sltiu v0,s1,3
+ 40aeb0: afb20028 sw s2,40(sp)
+ 40aeb4: afb00020 sw s0,32(sp)
+ 40aeb8: afbf0030 sw ra,48(sp)
+ 40aebc: afbc002c sw gp,44(sp)
+ 40aec0: 00808021 move s0,a0
+ 40aec4: 14400010 bnez v0,40af08 <fseek+0x78>
+ 40aec8: 00a09021 move s2,a1
+ 40aecc: 8f9980a0 lw t9,-32608(gp)
+ 40aed0: 00000000 nop
+ 40aed4: 0320f809 jalr t9
+ 40aed8: 00000000 nop
+ 40aedc: 8fbc0010 lw gp,16(sp)
+ 40aee0: 00402021 move a0,v0
+ 40aee4: 24030016 li v1,22
+ 40aee8: 2402ffff li v0,-1
+ 40aeec: ac830000 sw v1,0(a0)
+ 40aef0: 8fbf0030 lw ra,48(sp)
+ 40aef4: 8fb20028 lw s2,40(sp)
+ 40aef8: 8fb10024 lw s1,36(sp)
+ 40aefc: 8fb00020 lw s0,32(sp)
+ 40af00: 03e00008 jr ra
+ 40af04: 27bd0038 addiu sp,sp,56
+ 40af08: 8e020038 lw v0,56(s0)
+ 40af0c: 00000000 nop
+ 40af10: 1040003b beqz v0,40b000 <fseek+0x170>
+ 40af14: 2604003c addiu a0,s0,60
+ 40af18: 96020000 lhu v0,0(s0)
+ 40af1c: afb20018 sw s2,24(sp)
+ 40af20: 30422000 andi v0,v0,0x2000
+ 40af24: 10400016 beqz v0,40af80 <fseek+0xf0>
+ 40af28: 2412ffff li s2,-1
+ 40af2c: 02002021 move a0,s0
+ 40af30: 8f9980d8 lw t9,-32552(gp)
+ 40af34: 00000000 nop
+ 40af38: 0320f809 jalr t9
+ 40af3c: 00000000 nop
+ 40af40: 8fbc0010 lw gp,16(sp)
+ 40af44: 1040000f beqz v0,40af84 <fseek+0xf4>
+ 40af48: 24020001 li v0,1
+ 40af4c: 8e020038 lw v0,56(s0)
+ 40af50: 00000000 nop
+ 40af54: 10400003 beqz v0,40af64 <fseek+0xd4>
+ 40af58: 2604003c addiu a0,s0,60
+ 40af5c: 1000ffe4 b 40aef0 <fseek+0x60>
+ 40af60: 02401021 move v0,s2
+ 40af64: 8f99811c lw t9,-32484(gp)
+ 40af68: 00000000 nop
+ 40af6c: 0320f809 jalr t9
+ 40af70: 00000000 nop
+ 40af74: 8fbc0010 lw gp,16(sp)
+ 40af78: 1000ffdd b 40aef0 <fseek+0x60>
+ 40af7c: 02401021 move v0,s2
+ 40af80: 24020001 li v0,1
+ 40af84: 12220014 beq s1,v0,40afd8 <fseek+0x148>
+ 40af88: 02002021 move a0,s0
+ 40af8c: 02203021 move a2,s1
+ 40af90: 02002021 move a0,s0
+ 40af94: 27a50018 addiu a1,sp,24
+ 40af98: 8f99824c lw t9,-32180(gp)
+ 40af9c: 00000000 nop
+ 40afa0: 0320f809 jalr t9
+ 40afa4: 00000000 nop
+ 40afa8: 8fbc0010 lw gp,16(sp)
+ 40afac: 0440ffe7 bltz v0,40af4c <fseek+0xbc>
+ 40afb0: 00000000 nop
+ 40afb4: 96020000 lhu v0,0(s0)
+ 40afb8: 8e03000c lw v1,12(s0)
+ 40afbc: 3042cff8 andi v0,v0,0xcff8
+ 40afc0: ae03001c sw v1,28(s0)
+ 40afc4: a6020000 sh v0,0(s0)
+ 40afc8: ae030018 sw v1,24(s0)
+ 40afcc: ae030014 sw v1,20(s0)
+ 40afd0: 1000ffde b 40af4c <fseek+0xbc>
+ 40afd4: 00009021 move s2,zero
+ 40afd8: 27a50018 addiu a1,sp,24
+ 40afdc: 8f998248 lw t9,-32184(gp)
+ 40afe0: 00000000 nop
+ 40afe4: 0320f809 jalr t9
+ 40afe8: 00000000 nop
+ 40afec: 8fbc0010 lw gp,16(sp)
+ 40aff0: 0441ffe7 bgez v0,40af90 <fseek+0x100>
+ 40aff4: 02203021 move a2,s1
+ 40aff8: 1000ffd4 b 40af4c <fseek+0xbc>
+ 40affc: 00000000 nop
+ 40b000: 8f9980a8 lw t9,-32600(gp)
+ 40b004: 00000000 nop
+ 40b008: 0320f809 jalr t9
+ 40b00c: 00000000 nop
+ 40b010: 8fbc0010 lw gp,16(sp)
+ 40b014: 1000ffc0 b 40af18 <fseek+0x88>
+ 40b018: 00000000 nop
+ 40b01c: 00000000 nop
+ 40b020: 3c1c0fc0 lui gp,0xfc0
+ 40b024: 279cd230 addiu gp,gp,-11728
+ 40b028: 0399e021 addu gp,gp,t9
+ 40b02c: 27bdffd8 addiu sp,sp,-40
+ 40b030: afbc0010 sw gp,16(sp)
+ 40b034: afb00018 sw s0,24(sp)
+ 40b038: 00c08021 move s0,a2
+ 40b03c: afb1001c sw s1,28(sp)
+ 40b040: afbf0024 sw ra,36(sp)
+ 40b044: afbc0020 sw gp,32(sp)
+ 40b048: 00808821 move s1,a0
+ 40b04c: 12000013 beqz s0,40b09c <fseek+0x20c>
+ 40b050: 00001021 move v0,zero
+ 40b054: 06000024 bltz s0,40b0e8 <fseek+0x258>
+ 40b058: 00000000 nop
+ 40b05c: 8e220028 lw v0,40(s1)
+ 40b060: 00000000 nop
+ 40b064: 1040001e beqz v0,40b0e0 <fseek+0x250>
+ 40b068: 02003021 move a2,s0
+ 40b06c: 8e240024 lw a0,36(s1)
+ 40b070: 0040c821 move t9,v0
+ 40b074: 0320f809 jalr t9
+ 40b078: 00000000 nop
+ 40b07c: 8fbc0010 lw gp,16(sp)
+ 40b080: 00401821 move v1,v0
+ 40b084: 1860000a blez v1,40b0b0 <fseek+0x220>
+ 40b088: 0203102b sltu v0,s0,v1
+ 40b08c: 10400003 beqz v0,40b09c <fseek+0x20c>
+ 40b090: 00601021 move v0,v1
+ 40b094: 02001821 move v1,s0
+ 40b098: 00601021 move v0,v1
+ 40b09c: 8fbf0024 lw ra,36(sp)
+ 40b0a0: 8fb1001c lw s1,28(sp)
+ 40b0a4: 8fb00018 lw s0,24(sp)
+ 40b0a8: 03e00008 jr ra
+ 40b0ac: 27bd0028 addiu sp,sp,40
+ 40b0b0: 10600006 beqz v1,40b0cc <fseek+0x23c>
+ 40b0b4: 00000000 nop
+ 40b0b8: 96220000 lhu v0,0(s1)
+ 40b0bc: 00001821 move v1,zero
+ 40b0c0: 34420008 ori v0,v0,0x8
+ 40b0c4: 1000fff4 b 40b098 <fseek+0x208>
+ 40b0c8: a6220000 sh v0,0(s1)
+ 40b0cc: 96220000 lhu v0,0(s1)
+ 40b0d0: 00000000 nop
+ 40b0d4: 34420004 ori v0,v0,0x4
+ 40b0d8: 1000ffef b 40b098 <fseek+0x208>
+ 40b0dc: a6220000 sh v0,0(s1)
+ 40b0e0: 1000ffe8 b 40b084 <fseek+0x1f4>
+ 40b0e4: 2403ffff li v1,-1
+ 40b0e8: 3c107fff lui s0,0x7fff
+ 40b0ec: 1000ffdb b 40b05c <fseek+0x1cc>
+ 40b0f0: 3610ffff ori s0,s0,0xffff
+
+0040b0f4 <_stdio_fread>:
+ 40b0f4: 3c1c0fc0 lui gp,0xfc0
+ 40b0f8: 279cd15c addiu gp,gp,-11940
+ 40b0fc: 0399e021 addu gp,gp,t9
+ 40b100: 27bdffd0 addiu sp,sp,-48
+ 40b104: afbc0010 sw gp,16(sp)
+ 40b108: afb30024 sw s3,36(sp)
+ 40b10c: afb1001c sw s1,28(sp)
+ 40b110: afb00018 sw s0,24(sp)
+ 40b114: afbf002c sw ra,44(sp)
+ 40b118: afbc0028 sw gp,40(sp)
+ 40b11c: afb20020 sw s2,32(sp)
+ 40b120: 00c08021 move s0,a2
+ 40b124: 96060000 lhu a2,0(s0)
+ 40b128: 00809821 move s3,a0
+ 40b12c: 30c20010 andi v0,a2,0x10
+ 40b130: 10400015 beqz v0,40b188 <_stdio_fread+0x94>
+ 40b134: 00a08821 move s1,a1
+ 40b138: 8e03000c lw v1,12(s0)
+ 40b13c: 34c20008 ori v0,a2,0x8
+ 40b140: ae030020 sw v1,32(s0)
+ 40b144: a6020000 sh v0,0(s0)
+ 40b148: 8f9980a0 lw t9,-32608(gp)
+ 40b14c: 00000000 nop
+ 40b150: 0320f809 jalr t9
+ 40b154: 00000000 nop
+ 40b158: 8fbc0010 lw gp,16(sp)
+ 40b15c: 00402021 move a0,v0
+ 40b160: 24030009 li v1,9
+ 40b164: 00001021 move v0,zero
+ 40b168: ac830000 sw v1,0(a0)
+ 40b16c: 8fbf002c lw ra,44(sp)
+ 40b170: 8fb30024 lw s3,36(sp)
+ 40b174: 8fb20020 lw s2,32(sp)
+ 40b178: 8fb1001c lw s1,28(sp)
+ 40b17c: 8fb00018 lw s0,24(sp)
+ 40b180: 03e00008 jr ra
+ 40b184: 27bd0030 addiu sp,sp,48
+ 40b188: 8e02000c lw v0,12(s0)
+ 40b18c: 30c30300 andi v1,a2,0x300
+ 40b190: ae020020 sw v0,32(s0)
+ 40b194: 10600007 beqz v1,40b1b4 <_stdio_fread+0xc0>
+ 40b198: ae02001c sw v0,28(s0)
+ 40b19c: 8f8481b8 lw a0,-32328(gp)
+ 40b1a0: 8f9980d8 lw t9,-32552(gp)
+ 40b1a4: 00000000 nop
+ 40b1a8: 0320f809 jalr t9
+ 40b1ac: 00000000 nop
+ 40b1b0: 8fbc0010 lw gp,16(sp)
+ 40b1b4: 96020000 lhu v0,0(s0)
+ 40b1b8: 00000000 nop
+ 40b1bc: 30422000 andi v0,v0,0x2000
+ 40b1c0: 1040000a beqz v0,40b1ec <_stdio_fread+0xf8>
+ 40b1c4: 02002021 move a0,s0
+ 40b1c8: 8f9980d8 lw t9,-32552(gp)
+ 40b1cc: 00000000 nop
+ 40b1d0: 0320f809 jalr t9
+ 40b1d4: 00000000 nop
+ 40b1d8: 8fbc0010 lw gp,16(sp)
+ 40b1dc: 00402021 move a0,v0
+ 40b1e0: 2403ffff li v1,-1
+ 40b1e4: 1083ffe1 beq a0,v1,40b16c <_stdio_fread+0x78>
+ 40b1e8: 00001021 move v0,zero
+ 40b1ec: 96020000 lhu v0,0(s0)
+ 40b1f0: 02609021 move s2,s3
+ 40b1f4: 34421000 ori v0,v0,0x1000
+ 40b1f8: 1220003f beqz s1,40b2f8 <_stdio_fread+0x204>
+ 40b1fc: a6020000 sh v0,0(s0)
+ 40b200: 30420003 andi v0,v0,0x3
+ 40b204: 10400013 beqz v0,40b254 <_stdio_fread+0x160>
+ 40b208: 00000000 nop
+ 40b20c: 96020000 lhu v0,0(s0)
+ 40b210: 2631ffff addiu s1,s1,-1
+ 40b214: 3401ffff li at,0xffff
+ 40b218: 00221021 addu v0,at,v0
+ 40b21c: 30430003 andi v1,v0,0x3
+ 40b220: a6020000 sh v0,0(s0)
+ 40b224: 02031821 addu v1,s0,v1
+ 40b228: 90620002 lbu v0,2(v1)
+ 40b22c: 00000000 nop
+ 40b230: a2420000 sb v0,0(s2)
+ 40b234: a2000003 sb zero,3(s0)
+ 40b238: 1220002f beqz s1,40b2f8 <_stdio_fread+0x204>
+ 40b23c: 26520001 addiu s2,s2,1
+ 40b240: 96020000 lhu v0,0(s0)
+ 40b244: 00000000 nop
+ 40b248: 30420003 andi v0,v0,0x3
+ 40b24c: 1440ffef bnez v0,40b20c <_stdio_fread+0x118>
+ 40b250: 00000000 nop
+ 40b254: 12200028 beqz s1,40b2f8 <_stdio_fread+0x204>
+ 40b258: 00000000 nop
+ 40b25c: 8e040014 lw a0,20(s0)
+ 40b260: 10000008 b 40b284 <_stdio_fread+0x190>
+ 40b264: 00000000 nop
+ 40b268: 90830000 lbu v1,0(a0)
+ 40b26c: 2631ffff addiu s1,s1,-1
+ 40b270: a2430000 sb v1,0(s2)
+ 40b274: 00402021 move a0,v0
+ 40b278: ae020014 sw v0,20(s0)
+ 40b27c: 1220001e beqz s1,40b2f8 <_stdio_fread+0x204>
+ 40b280: 26520001 addiu s2,s2,1
+ 40b284: 8e020018 lw v0,24(s0)
+ 40b288: 00000000 nop
+ 40b28c: 0082102b sltu v0,a0,v0
+ 40b290: 1440fff5 bnez v0,40b268 <_stdio_fread+0x174>
+ 40b294: 24820001 addiu v0,a0,1
+ 40b298: 12200017 beqz s1,40b2f8 <_stdio_fread+0x204>
+ 40b29c: 00000000 nop
+ 40b2a0: 8e05000c lw a1,12(s0)
+ 40b2a4: 8e020010 lw v0,16(s0)
+ 40b2a8: ae050018 sw a1,24(s0)
+ 40b2ac: 00453023 subu a2,v0,a1
+ 40b2b0: 00d1102b sltu v0,a2,s1
+ 40b2b4: 1040001a beqz v0,40b320 <_stdio_fread+0x22c>
+ 40b2b8: ae050014 sw a1,20(s0)
+ 40b2bc: 02002021 move a0,s0
+ 40b2c0: 02402821 move a1,s2
+ 40b2c4: 02203021 move a2,s1
+ 40b2c8: 8f998018 lw t9,-32744(gp)
+ 40b2cc: 00000000 nop
+ 40b2d0: 2739b020 addiu t9,t9,-20448
+ 40b2d4: 00000000 nop
+ 40b2d8: 0320f809 jalr t9
+ 40b2dc: 00000000 nop
+ 40b2e0: 8fbc0010 lw gp,16(sp)
+ 40b2e4: 00401821 move v1,v0
+ 40b2e8: 18600003 blez v1,40b2f8 <_stdio_fread+0x204>
+ 40b2ec: 02238823 subu s1,s1,v1
+ 40b2f0: 1000ffd8 b 40b254 <_stdio_fread+0x160>
+ 40b2f4: 02439021 addu s2,s2,v1
+ 40b2f8: 96020000 lhu v0,0(s0)
+ 40b2fc: 00000000 nop
+ 40b300: 30420b0b andi v0,v0,0xb0b
+ 40b304: 10400003 beqz v0,40b314 <_stdio_fread+0x220>
+ 40b308: 00000000 nop
+ 40b30c: 1000ff97 b 40b16c <_stdio_fread+0x78>
+ 40b310: 02531023 subu v0,s2,s3
+ 40b314: 8e020018 lw v0,24(s0)
+ 40b318: 1000fffc b 40b30c <_stdio_fread+0x218>
+ 40b31c: ae02001c sw v0,28(s0)
+ 40b320: 02002021 move a0,s0
+ 40b324: 8f998018 lw t9,-32744(gp)
+ 40b328: 00000000 nop
+ 40b32c: 2739b020 addiu t9,t9,-20448
+ 40b330: 00000000 nop
+ 40b334: 0320f809 jalr t9
+ 40b338: 00000000 nop
+ 40b33c: 8fbc0010 lw gp,16(sp)
+ 40b340: 00401821 move v1,v0
+ 40b344: 1860ffec blez v1,40b2f8 <_stdio_fread+0x204>
+ 40b348: 00000000 nop
+ 40b34c: 8e020018 lw v0,24(s0)
+ 40b350: 00000000 nop
+ 40b354: 00431021 addu v0,v0,v1
+ 40b358: 1000ffbe b 40b254 <_stdio_fread+0x160>
+ 40b35c: ae020018 sw v0,24(s0)
+
+0040b360 <_stdio_adjpos>:
+ 40b360: 3c1c0fc0 lui gp,0xfc0
+ 40b364: 279ccef0 addiu gp,gp,-12560
+ 40b368: 0399e021 addu gp,gp,t9
+ 40b36c: 94820000 lhu v0,0(a0)
+ 40b370: 00000000 nop
+ 40b374: 30432000 andi v1,v0,0x2000
+ 40b378: 30471000 andi a3,v0,0x1000
+ 40b37c: 10600006 beqz v1,40b398 <_stdio_adjpos+0x38>
+ 40b380: 30460003 andi a2,v0,0x3
+ 40b384: 8c820014 lw v0,20(a0)
+ 40b388: 8c83000c lw v1,12(a0)
+ 40b38c: 00000000 nop
+ 40b390: 00431023 subu v0,v0,v1
+ 40b394: 00c23023 subu a2,a2,v0
+ 40b398: 10e00006 beqz a3,40b3b4 <_stdio_adjpos+0x54>
+ 40b39c: 00000000 nop
+ 40b3a0: 8c830014 lw v1,20(a0)
+ 40b3a4: 8c820018 lw v0,24(a0)
+ 40b3a8: 00000000 nop
+ 40b3ac: 00431023 subu v0,v0,v1
+ 40b3b0: 00c23021 addu a2,a2,v0
+ 40b3b4: 8ca20000 lw v0,0(a1)
+ 40b3b8: 00062023 negu a0,a2
+ 40b3bc: 00461823 subu v1,v0,a2
+ 40b3c0: 0043102a slt v0,v0,v1
+ 40b3c4: 14400002 bnez v0,40b3d0 <_stdio_adjpos+0x70>
+ 40b3c8: aca30000 sw v1,0(a1)
+ 40b3cc: 00c02021 move a0,a2
+ 40b3d0: 03e00008 jr ra
+ 40b3d4: 00801021 move v0,a0
+ ...
+
+0040b3e0 <_stdio_lseek>:
+ 40b3e0: 3c1c0fc0 lui gp,0xfc0
+ 40b3e4: 279cce70 addiu gp,gp,-12688
+ 40b3e8: 0399e021 addu gp,gp,t9
+ 40b3ec: 27bdffd8 addiu sp,sp,-40
+ 40b3f0: afbc0010 sw gp,16(sp)
+ 40b3f4: afb00018 sw s0,24(sp)
+ 40b3f8: afbf0020 sw ra,32(sp)
+ 40b3fc: afbc001c sw gp,28(sp)
+ 40b400: 8c830024 lw v1,36(a0)
+ 40b404: 24820004 addiu v0,a0,4
+ 40b408: 10620012 beq v1,v0,40b454 <_stdio_lseek+0x74>
+ 40b40c: 00a08021 move s0,a1
+ 40b410: 8c820030 lw v0,48(a0)
+ 40b414: 00000000 nop
+ 40b418: 1040000c beqz v0,40b44c <_stdio_lseek+0x6c>
+ 40b41c: 00602021 move a0,v1
+ 40b420: 0040c821 move t9,v0
+ 40b424: 0320f809 jalr t9
+ 40b428: 00000000 nop
+ 40b42c: 8fbc0010 lw gp,16(sp)
+ 40b430: 04400006 bltz v0,40b44c <_stdio_lseek+0x6c>
+ 40b434: 00001821 move v1,zero
+ 40b438: 00601021 move v0,v1
+ 40b43c: 8fbf0020 lw ra,32(sp)
+ 40b440: 8fb00018 lw s0,24(sp)
+ 40b444: 03e00008 jr ra
+ 40b448: 27bd0028 addiu sp,sp,40
+ 40b44c: 1000fffa b 40b438 <_stdio_lseek+0x58>
+ 40b450: 2403ffff li v1,-1
+ 40b454: 8c840004 lw a0,4(a0)
+ 40b458: 8e050000 lw a1,0(s0)
+ 40b45c: 8f9981f8 lw t9,-32264(gp)
+ 40b460: 00000000 nop
+ 40b464: 0320f809 jalr t9
+ 40b468: 00000000 nop
+ 40b46c: 8fbc0010 lw gp,16(sp)
+ 40b470: 0440fff6 bltz v0,40b44c <_stdio_lseek+0x6c>
+ 40b474: 00001821 move v1,zero
+ 40b478: 1000ffef b 40b438 <_stdio_lseek+0x58>
+ 40b47c: ae020000 sw v0,0(s0)
+
+0040b480 <_uintmaxtostr>:
+ 40b480: 3c1c0fc0 lui gp,0xfc0
+ 40b484: 279ccdd0 addiu gp,gp,-12848
+ 40b488: 0399e021 addu gp,gp,t9
+ 40b48c: 8fa80010 lw t0,16(sp)
+ 40b490: 00804821 move t1,a0
+ 40b494: 8faf0014 lw t7,20(sp)
+ 40b498: 0500003d bltz t0,40b590 <_uintmaxtostr+0x110>
+ 40b49c: 00007021 move t6,zero
+ 40b4a0: 2402ffff li v0,-1
+ 40b4a4: 0048001b divu zero,v0,t0
+ 40b4a8: a1200000 sb zero,0(t1)
+ 40b4ac: 15000002 bnez t0,40b4b8 <_uintmaxtostr+0x38>
+ 40b4b0: 00000000 nop
+ 40b4b4: 0007000d break 0x7
+ 40b4b8: 00001810 mfhi v1
+ 40b4bc: 246c0001 addiu t4,v1,1
+ 40b4c0: 00001012 mflo v0
+ 40b4c4: 1188002f beq t4,t0,40b584 <_uintmaxtostr+0x104>
+ 40b4c8: 00406821 move t5,v0
+ 40b4cc: 00061802 srl v1,a2,0x0
+ 40b4d0: 00605021 move t2,v1
+ 40b4d4: 00e01821 move v1,a3
+ 40b4d8: 0148001b divu zero,t2,t0
+ 40b4dc: 15000002 bnez t0,40b4e8 <_uintmaxtostr+0x68>
+ 40b4e0: 00000000 nop
+ 40b4e4: 0007000d break 0x7
+ 40b4e8: 2529ffff addiu t1,t1,-1
+ 40b4ec: 00002810 mfhi a1
+ 40b4f0: 00003812 mflo a3
+ 40b4f4: 00e05021 move t2,a3
+ 40b4f8: 00000000 nop
+ 40b4fc: 0068001b divu zero,v1,t0
+ 40b500: 00001810 mfhi v1
+ 40b504: 00002012 mflo a0
+ ...
+ 40b510: 01850018 mult t4,a1
+ 40b514: 00001012 mflo v0
+ 40b518: 00621821 addu v1,v1,v0
+ 40b51c: 00000000 nop
+ 40b520: 0068001b divu zero,v1,t0
+ 40b524: 00001010 mfhi v0
+ 40b528: 24460030 addiu a2,v0,48
+ 40b52c: 004f5821 addu t3,v0,t7
+ 40b530: 00001812 mflo v1
+ 40b534: 2c42000a sltiu v0,v0,10
+ 40b538: 00000000 nop
+ 40b53c: 01a50018 mult t5,a1
+ 40b540: 00002812 mflo a1
+ 40b544: 00852021 addu a0,a0,a1
+ 40b548: 1040000c beqz v0,40b57c <_uintmaxtostr+0xfc>
+ 40b54c: 00831821 addu v1,a0,v1
+ 40b550: a1260000 sb a2,0(t1)
+ 40b554: 00671025 or v0,v1,a3
+ 40b558: 1440ffdf bnez v0,40b4d8 <_uintmaxtostr+0x58>
+ 40b55c: 00000000 nop
+ 40b560: 11c00004 beqz t6,40b574 <_uintmaxtostr+0xf4>
+ 40b564: 00000000 nop
+ 40b568: 2529ffff addiu t1,t1,-1
+ 40b56c: 2402002d li v0,45
+ 40b570: a1220000 sb v0,0(t1)
+ 40b574: 03e00008 jr ra
+ 40b578: 01201021 move v0,t1
+ 40b57c: 1000fff5 b 40b554 <_uintmaxtostr+0xd4>
+ 40b580: a12b0000 sb t3,0(t1)
+ 40b584: 25ad0001 addiu t5,t5,1
+ 40b588: 1000ffd0 b 40b4cc <_uintmaxtostr+0x4c>
+ 40b58c: 00006021 move t4,zero
+ 40b590: 04c1ffc3 bgez a2,40b4a0 <_uintmaxtostr+0x20>
+ 40b594: 00084023 negu t0,t0
+ 40b598: 00073823 negu a3,a3
+ 40b59c: 00063023 negu a2,a2
+ 40b5a0: 0007102b sltu v0,zero,a3
+ 40b5a4: 00c23023 subu a2,a2,v0
+ 40b5a8: 1000ffbd b 40b4a0 <_uintmaxtostr+0x20>
+ 40b5ac: 240e0001 li t6,1
+
+0040b5b0 <vsnprintf>:
+ 40b5b0: 3c1c0fc0 lui gp,0xfc0
+ 40b5b4: 279ccca0 addiu gp,gp,-13152
+ 40b5b8: 0399e021 addu gp,gp,t9
+ 40b5bc: 27bdff78 addiu sp,sp,-136
+ 40b5c0: afbc0010 sw gp,16(sp)
+ 40b5c4: 00801821 move v1,a0
+ 40b5c8: afb00070 sw s0,112(sp)
+ 40b5cc: 00a08021 move s0,a1
+ 40b5d0: 00032827 nor a1,zero,v1
+ 40b5d4: 00b0102b sltu v0,a1,s0
+ 40b5d8: afb20078 sw s2,120(sp)
+ 40b5dc: afb10074 sw s1,116(sp)
+ 40b5e0: afbf0080 sw ra,128(sp)
+ 40b5e4: afbc007c sw gp,124(sp)
+ 40b5e8: 27a40054 addiu a0,sp,84
+ 40b5ec: 00c08821 move s1,a2
+ 40b5f0: 00e09021 move s2,a3
+ 40b5f4: afa30024 sw v1,36(sp)
+ 40b5f8: afa30030 sw v1,48(sp)
+ 40b5fc: afa3002c sw v1,44(sp)
+ 40b600: 10400002 beqz v0,40b60c <vsnprintf+0x5c>
+ 40b604: afa30034 sw v1,52(sp)
+ 40b608: 00a08021 move s0,a1
+ 40b60c: 2402fffe li v0,-2
+ 40b610: 00701821 addu v1,v1,s0
+ 40b614: afa2001c sw v0,28(sp)
+ 40b618: 24022090 li v0,8336
+ 40b61c: a7a20018 sh v0,24(sp)
+ 40b620: afa00050 sw zero,80(sp)
+ 40b624: afa30038 sw v1,56(sp)
+ 40b628: afa30028 sw v1,40(sp)
+ 40b62c: 8f998128 lw t9,-32472(gp)
+ 40b630: 00000000 nop
+ 40b634: 0320f809 jalr t9
+ 40b638: 00000000 nop
+ 40b63c: 8fbc0010 lw gp,16(sp)
+ 40b640: 27a40018 addiu a0,sp,24
+ 40b644: 02202821 move a1,s1
+ 40b648: 02403021 move a2,s2
+ 40b64c: 8f99803c lw t9,-32708(gp)
+ 40b650: 00000000 nop
+ 40b654: 0320f809 jalr t9
+ 40b658: 00000000 nop
+ 40b65c: 8fbc0010 lw gp,16(sp)
+ 40b660: 12000009 beqz s0,40b688 <vsnprintf+0xd8>
+ 40b664: 00000000 nop
+ 40b668: 8fa4002c lw a0,44(sp)
+ 40b66c: 8fa30028 lw v1,40(sp)
+ 40b670: 00000000 nop
+ 40b674: 1083000a beq a0,v1,40b6a0 <vsnprintf+0xf0>
+ 40b678: 2485ffff addiu a1,a0,-1
+ 40b67c: 8fa3002c lw v1,44(sp)
+ 40b680: 00000000 nop
+ 40b684: a0600000 sb zero,0(v1)
+ 40b688: 8fbf0080 lw ra,128(sp)
+ 40b68c: 8fb20078 lw s2,120(sp)
+ 40b690: 8fb10074 lw s1,116(sp)
+ 40b694: 8fb00070 lw s0,112(sp)
+ 40b698: 03e00008 jr ra
+ 40b69c: 27bd0088 addiu sp,sp,136
+ 40b6a0: 1000fff6 b 40b67c <vsnprintf+0xcc>
+ 40b6a4: afa5002c sw a1,44(sp)
+ ...
+
+0040b6b0 <_ppfs_init>:
+ 40b6b0: 3c1c0fc0 lui gp,0xfc0
+ 40b6b4: 279ccba0 addiu gp,gp,-13408
+ 40b6b8: 0399e021 addu gp,gp,t9
+ 40b6bc: 27bdffd0 addiu sp,sp,-48
+ 40b6c0: afbc0010 sw gp,16(sp)
+ 40b6c4: afb1001c sw s1,28(sp)
+ 40b6c8: afb00018 sw s0,24(sp)
+ 40b6cc: 00a08821 move s1,a1
+ 40b6d0: 00808021 move s0,a0
+ 40b6d4: 00002821 move a1,zero
+ 40b6d8: 240600a8 li a2,168
+ 40b6dc: afb20020 sw s2,32(sp)
+ 40b6e0: afbf0028 sw ra,40(sp)
+ 40b6e4: afbc0024 sw gp,36(sp)
+ 40b6e8: 8f99813c lw t9,-32452(gp)
+ 40b6ec: 00000000 nop
+ 40b6f0: 0320f809 jalr t9
+ 40b6f4: 00000000 nop
+ 40b6f8: 8fbc0010 lw gp,16(sp)
+ 40b6fc: 8e020018 lw v0,24(s0)
+ 40b700: 26120028 addiu s2,s0,40
+ 40b704: 2442ffff addiu v0,v0,-1
+ 40b708: ae020018 sw v0,24(s0)
+ 40b70c: 02401821 move v1,s2
+ 40b710: 2405000a li a1,10
+ 40b714: 24020008 li v0,8
+ 40b718: 24a5ffff addiu a1,a1,-1
+ 40b71c: ac620000 sw v0,0(v1)
+ 40b720: 14a0fffd bnez a1,40b718 <_ppfs_init+0x68>
+ 40b724: 24630004 addiu v1,v1,4
+ 40b728: 82220000 lb v0,0(s1)
+ 40b72c: 00000000 nop
+ 40b730: 1040000a beqz v0,40b75c <_ppfs_init+0xac>
+ 40b734: 02201821 move v1,s1
+ 40b738: 80650000 lb a1,0(v1)
+ 40b73c: 24020025 li v0,37
+ 40b740: 10a2001a beq a1,v0,40b7ac <_ppfs_init+0xfc>
+ 40b744: 00000000 nop
+ 40b748: 24630001 addiu v1,v1,1
+ 40b74c: 80620000 lb v0,0(v1)
+ 40b750: 00000000 nop
+ 40b754: 1440fff8 bnez v0,40b738 <_ppfs_init+0x88>
+ 40b758: 00000000 nop
+ 40b75c: 8e050018 lw a1,24(s0)
+ 40b760: ae110000 sw s1,0(s0)
+ 40b764: 24a5ffff addiu a1,a1,-1
+ 40b768: 04a00009 bltz a1,40b790 <_ppfs_init+0xe0>
+ 40b76c: 02403021 move a2,s2
+ 40b770: 8cc40000 lw a0,0(a2)
+ 40b774: 24030008 li v1,8
+ 40b778: 24a5ffff addiu a1,a1,-1
+ 40b77c: 24c60004 addiu a2,a2,4
+ 40b780: 10830004 beq a0,v1,40b794 <_ppfs_init+0xe4>
+ 40b784: 2402ffff li v0,-1
+ 40b788: 04a1fff9 bgez a1,40b770 <_ppfs_init+0xc0>
+ 40b78c: 00000000 nop
+ 40b790: 00001021 move v0,zero
+ 40b794: 8fbf0028 lw ra,40(sp)
+ 40b798: 8fb20020 lw s2,32(sp)
+ 40b79c: 8fb1001c lw s1,28(sp)
+ 40b7a0: 8fb00018 lw s0,24(sp)
+ 40b7a4: 03e00008 jr ra
+ 40b7a8: 27bd0030 addiu sp,sp,48
+ 40b7ac: 24630001 addiu v1,v1,1
+ 40b7b0: 80620000 lb v0,0(v1)
+ 40b7b4: 00000000 nop
+ 40b7b8: 1045ffe3 beq v0,a1,40b748 <_ppfs_init+0x98>
+ 40b7bc: 02002021 move a0,s0
+ 40b7c0: ae030000 sw v1,0(s0)
+ 40b7c4: 8f998060 lw t9,-32672(gp)
+ 40b7c8: 00000000 nop
+ 40b7cc: 0320f809 jalr t9
+ 40b7d0: 00000000 nop
+ 40b7d4: 8fbc0010 lw gp,16(sp)
+ 40b7d8: 00402821 move a1,v0
+ 40b7dc: 04a0ffed bltz a1,40b794 <_ppfs_init+0xe4>
+ 40b7e0: 2402ffff li v0,-1
+ 40b7e4: 8e030000 lw v1,0(s0)
+ 40b7e8: 1000ffd8 b 40b74c <_ppfs_init+0x9c>
+ 40b7ec: 00000000 nop
+
+0040b7f0 <_ppfs_prepargs>:
+ 40b7f0: 3c1c0fc0 lui gp,0xfc0
+ 40b7f4: 279cca60 addiu gp,gp,-13728
+ 40b7f8: 0399e021 addu gp,gp,t9
+ 40b7fc: 27bdffd8 addiu sp,sp,-40
+ 40b800: afbc0010 sw gp,16(sp)
+ 40b804: afb00018 sw s0,24(sp)
+ 40b808: 00808021 move s0,a0
+ 40b80c: afb1001c sw s1,28(sp)
+ 40b810: 8e110018 lw s1,24(s0)
+ 40b814: afbf0024 sw ra,36(sp)
+ 40b818: afbc0020 sw gp,32(sp)
+ 40b81c: 1a20000b blez s1,40b84c <_ppfs_prepargs+0x5c>
+ 40b820: ae050050 sw a1,80(s0)
+ 40b824: ae11001c sw s1,28(s0)
+ 40b828: ae000018 sw zero,24(s0)
+ 40b82c: ae000004 sw zero,4(s0)
+ 40b830: ae000008 sw zero,8(s0)
+ 40b834: 8f9980e0 lw t9,-32544(gp)
+ 40b838: 00000000 nop
+ 40b83c: 0320f809 jalr t9
+ 40b840: 00000000 nop
+ 40b844: 8fbc0010 lw gp,16(sp)
+ 40b848: ae110018 sw s1,24(s0)
+ 40b84c: 8fbf0024 lw ra,36(sp)
+ 40b850: 8fb1001c lw s1,28(sp)
+ 40b854: 8fb00018 lw s0,24(sp)
+ 40b858: 03e00008 jr ra
+ 40b85c: 27bd0028 addiu sp,sp,40
+
+0040b860 <_ppfs_setargs>:
+ 40b860: 3c1c0fc0 lui gp,0xfc0
+ 40b864: 279cc9f0 addiu gp,gp,-13840
+ 40b868: 0399e021 addu gp,gp,t9
+ 40b86c: 00802821 move a1,a0
+ 40b870: 8ca20018 lw v0,24(a1)
+ 40b874: 00000000 nop
+ 40b878: 10400027 beqz v0,40b918 <_ppfs_setargs+0xb8>
+ 40b87c: 24a40058 addiu a0,a1,88
+ 40b880: 8ca20008 lw v0,8(a1)
+ 40b884: 3c038000 lui v1,0x8000
+ 40b888: 1043001c beq v0,v1,40b8fc <_ppfs_setargs+0x9c>
+ 40b88c: 00000000 nop
+ 40b890: 8ca20004 lw v0,4(a1)
+ 40b894: 00000000 nop
+ 40b898: 10430011 beq v0,v1,40b8e0 <_ppfs_setargs+0x80>
+ 40b89c: 00000000 nop
+ 40b8a0: 8ca40008 lw a0,8(a1)
+ 40b8a4: 00000000 nop
+ 40b8a8: 04800003 bltz a0,40b8b8 <_ppfs_setargs+0x58>
+ 40b8ac: 2402fffe li v0,-2
+ 40b8b0: 03e00008 jr ra
+ 40b8b4: 00000000 nop
+ 40b8b8: 8ca30010 lw v1,16(a1)
+ 40b8bc: 00000000 nop
+ 40b8c0: 34630008 ori v1,v1,0x8
+ 40b8c4: 00621824 and v1,v1,v0
+ 40b8c8: 00042023 negu a0,a0
+ 40b8cc: 24020020 li v0,32
+ 40b8d0: aca20014 sw v0,20(a1)
+ 40b8d4: aca40008 sw a0,8(a1)
+ 40b8d8: 03e00008 jr ra
+ 40b8dc: aca30010 sw v1,16(a1)
+ 40b8e0: 90a20025 lbu v0,37(a1)
+ 40b8e4: 00000000 nop
+ 40b8e8: 000210c0 sll v0,v0,0x3
+ 40b8ec: 00821021 addu v0,a0,v0
+ 40b8f0: 8c42fff8 lw v0,-8(v0)
+ 40b8f4: 1000ffea b 40b8a0 <_ppfs_setargs+0x40>
+ 40b8f8: aca20004 sw v0,4(a1)
+ 40b8fc: 90a20024 lbu v0,36(a1)
+ 40b900: 00000000 nop
+ 40b904: 000210c0 sll v0,v0,0x3
+ 40b908: 00821021 addu v0,a0,v0
+ 40b90c: 8c42fff8 lw v0,-8(v0)
+ 40b910: 1000ffdf b 40b890 <_ppfs_setargs+0x30>
+ 40b914: aca20008 sw v0,8(a1)
+ 40b918: 8ca20008 lw v0,8(a1)
+ 40b91c: 3c068000 lui a2,0x8000
+ 40b920: 10460047 beq v0,a2,40ba40 <_ppfs_setargs+0x1e0>
+ 40b924: 2403fffc li v1,-4
+ 40b928: 8ca20004 lw v0,4(a1)
+ 40b92c: 00000000 nop
+ 40b930: 10460038 beq v0,a2,40ba14 <_ppfs_setargs+0x1b4>
+ 40b934: 2403fffc li v1,-4
+ 40b938: 8ca2001c lw v0,28(a1)
+ 40b93c: 00000000 nop
+ 40b940: 1840ffd7 blez v0,40b8a0 <_ppfs_setargs+0x40>
+ 40b944: 00003821 move a3,zero
+ 40b948: 24a60024 addiu a2,a1,36
+ 40b94c: 24c60004 addiu a2,a2,4
+ 40b950: 8cc30000 lw v1,0(a2)
+ 40b954: 00000000 nop
+ 40b958: 28620009 slti v0,v1,9
+ 40b95c: 10400015 beqz v0,40b9b4 <_ppfs_setargs+0x154>
+ 40b960: 24e70001 addiu a3,a3,1
+ 40b964: 28620007 slti v0,v1,7
+ 40b968: 1040000b beqz v0,40b998 <_ppfs_setargs+0x138>
+ 40b96c: 00000000 nop
+ 40b970: 8ca20050 lw v0,80(a1)
+ 40b974: 2403fffc li v1,-4
+ 40b978: 24420003 addiu v0,v0,3
+ 40b97c: 00431024 and v0,v0,v1
+ 40b980: 24430004 addiu v1,v0,4
+ 40b984: aca30050 sw v1,80(a1)
+ 40b988: 8c420000 lw v0,0(v0)
+ 40b98c: 00000000 nop
+ 40b990: ac820000 sw v0,0(a0)
+ 40b994: 24840008 addiu a0,a0,8
+ 40b998: 8ca2001c lw v0,28(a1)
+ 40b99c: 00000000 nop
+ 40b9a0: 00e2102a slt v0,a3,v0
+ 40b9a4: 1440ffe9 bnez v0,40b94c <_ppfs_setargs+0xec>
+ 40b9a8: 00000000 nop
+ 40b9ac: 1000ffbc b 40b8a0 <_ppfs_setargs+0x40>
+ 40b9b0: 00000000 nop
+ 40b9b4: 24020400 li v0,1024
+ 40b9b8: 1062ffed beq v1,v0,40b970 <_ppfs_setargs+0x110>
+ 40b9bc: 28620401 slti v0,v1,1025
+ 40b9c0: 1440ffeb bnez v0,40b970 <_ppfs_setargs+0x110>
+ 40b9c4: 24020800 li v0,2048
+ 40b9c8: 10620005 beq v1,v0,40b9e0 <_ppfs_setargs+0x180>
+ 40b9cc: 24020807 li v0,2055
+ 40b9d0: 1062fff1 beq v1,v0,40b998 <_ppfs_setargs+0x138>
+ 40b9d4: 00000000 nop
+ 40b9d8: 1000ffe5 b 40b970 <_ppfs_setargs+0x110>
+ 40b9dc: 00000000 nop
+ 40b9e0: 8ca20050 lw v0,80(a1)
+ 40b9e4: 2403fff8 li v1,-8
+ 40b9e8: 24420007 addiu v0,v0,7
+ 40b9ec: 00431024 and v0,v0,v1
+ 40b9f0: 24430008 addiu v1,v0,8
+ 40b9f4: aca30050 sw v1,80(a1)
+ 40b9f8: 8c430004 lw v1,4(v0)
+ 40b9fc: 8c420000 lw v0,0(v0)
+ 40ba00: 00000000 nop
+ 40ba04: ac820000 sw v0,0(a0)
+ 40ba08: ac830004 sw v1,4(a0)
+ 40ba0c: 1000ffe2 b 40b998 <_ppfs_setargs+0x138>
+ 40ba10: 24840008 addiu a0,a0,8
+ 40ba14: 8ca20050 lw v0,80(a1)
+ 40ba18: 00000000 nop
+ 40ba1c: 24420003 addiu v0,v0,3
+ 40ba20: 00431024 and v0,v0,v1
+ 40ba24: 24430004 addiu v1,v0,4
+ 40ba28: aca30050 sw v1,80(a1)
+ 40ba2c: 8c420000 lw v0,0(v0)
+ 40ba30: 00000000 nop
+ 40ba34: aca20004 sw v0,4(a1)
+ 40ba38: 1000ffbf b 40b938 <_ppfs_setargs+0xd8>
+ 40ba3c: aca20058 sw v0,88(a1)
+ 40ba40: 8ca20050 lw v0,80(a1)
+ 40ba44: 00000000 nop
+ 40ba48: 24420003 addiu v0,v0,3
+ 40ba4c: 00431024 and v0,v0,v1
+ 40ba50: 24430004 addiu v1,v0,4
+ 40ba54: aca30050 sw v1,80(a1)
+ 40ba58: 8c420000 lw v0,0(v0)
+ 40ba5c: 00000000 nop
+ 40ba60: aca20008 sw v0,8(a1)
+ 40ba64: 1000ffb0 b 40b928 <_ppfs_setargs+0xc8>
+ 40ba68: aca20058 sw v0,88(a1)
+ 40ba6c: 00000000 nop
+ 40ba70: 3c1c0fc0 lui gp,0xfc0
+ 40ba74: 279cc7e0 addiu gp,gp,-14368
+ 40ba78: 0399e021 addu gp,gp,t9
+ 40ba7c: 8f838018 lw v1,-32744(gp)
+ 40ba80: 00000000 nop
+ 40ba84: 24631204 addiu v1,v1,4612
+ 40ba88: 2463fffe addiu v1,v1,-2
+ 40ba8c: 8f828018 lw v0,-32744(gp)
+ 40ba90: 00000000 nop
+ 40ba94: 244211f0 addiu v0,v0,4592
+ 40ba98: 00000000 nop
+ 40ba9c: 0043282b sltu a1,v0,v1
+ 40baa0: 84620000 lh v0,0(v1)
+ 40baa4: 00000000 nop
+ 40baa8: 10440003 beq v0,a0,40bab8 <_ppfs_setargs+0x258>
+ 40baac: 00000000 nop
+ 40bab0: 14a0fff5 bnez a1,40ba88 <_ppfs_setargs+0x228>
+ 40bab4: 00000000 nop
+ 40bab8: 8f828018 lw v0,-32744(gp)
+ 40babc: 00000000 nop
+ 40bac0: 244211f0 addiu v0,v0,4592
+ 40bac4: 00000000 nop
+ 40bac8: 00621023 subu v0,v1,v0
+ 40bacc: 00021043 sra v0,v0,0x1
+ 40bad0: 8f818018 lw at,-32744(gp)
+ 40bad4: 00000000 nop
+ 40bad8: 24211204 addiu at,at,4612
+ 40badc: 00220821 addu at,at,v0
+ 40bae0: 90220000 lbu v0,0(at)
+ 40bae4: 03e00008 jr ra
+ 40bae8: 00000000 nop
+ 40baec: 3c1c0fc0 lui gp,0xfc0
+ 40baf0: 279cc764 addiu gp,gp,-14492
+ 40baf4: 0399e021 addu gp,gp,t9
+ 40baf8: 27bdffd8 addiu sp,sp,-40
+ 40bafc: afbc0010 sw gp,16(sp)
+ 40bb00: afb1001c sw s1,28(sp)
+ 40bb04: 00a08821 move s1,a1
+ 40bb08: 24050008 li a1,8
+ 40bb0c: afbf0024 sw ra,36(sp)
+ 40bb10: afbc0020 sw gp,32(sp)
+ 40bb14: afb00018 sw s0,24(sp)
+ 40bb18: 00801821 move v1,a0
+ 40bb1c: 12250017 beq s1,a1,40bb7c <_ppfs_setargs+0x31c>
+ 40bb20: 00001021 move v0,zero
+ 40bb24: 10650015 beq v1,a1,40bb7c <_ppfs_setargs+0x31c>
+ 40bb28: 24020001 li v0,1
+ 40bb2c: 10710013 beq v1,s1,40bb7c <_ppfs_setargs+0x31c>
+ 40bb30: 00000000 nop
+ 40bb34: 8f998018 lw t9,-32744(gp)
+ 40bb38: 00000000 nop
+ 40bb3c: 2739ba70 addiu t9,t9,-17808
+ 40bb40: 00000000 nop
+ 40bb44: 0320f809 jalr t9
+ 40bb48: 00000000 nop
+ 40bb4c: 8fbc0010 lw gp,16(sp)
+ 40bb50: 02202021 move a0,s1
+ 40bb54: 00408021 move s0,v0
+ 40bb58: 8f998018 lw t9,-32744(gp)
+ 40bb5c: 00000000 nop
+ 40bb60: 2739ba70 addiu t9,t9,-17808
+ 40bb64: 00000000 nop
+ 40bb68: 0320f809 jalr t9
+ 40bb6c: 00000000 nop
+ 40bb70: 8fbc0010 lw gp,16(sp)
+ 40bb74: 0050102a slt v0,v0,s0
+ 40bb78: 38420001 xori v0,v0,0x1
+ 40bb7c: 8fbf0024 lw ra,36(sp)
+ 40bb80: 8fb1001c lw s1,28(sp)
+ 40bb84: 8fb00018 lw s0,24(sp)
+ 40bb88: 03e00008 jr ra
+ 40bb8c: 27bd0028 addiu sp,sp,40
+
+0040bb90 <_ppfs_parsespec>:
+ 40bb90: 3c1c0fc0 lui gp,0xfc0
+ 40bb94: 279cc6c0 addiu gp,gp,-14656
+ 40bb98: 0399e021 addu gp,gp,t9
+ 40bb9c: 27bdff88 addiu sp,sp,-120
+ 40bba0: afbc0010 sw gp,16(sp)
+ 40bba4: afb40060 sw s4,96(sp)
+ 40bba8: afbf0070 sw ra,112(sp)
+ 40bbac: 0080a021 move s4,a0
+ 40bbb0: afbc006c sw gp,108(sp)
+ 40bbb4: afb60068 sw s6,104(sp)
+ 40bbb8: afb50064 sw s5,100(sp)
+ 40bbbc: afb3005c sw s3,92(sp)
+ 40bbc0: afb20058 sw s2,88(sp)
+ 40bbc4: afb10054 sw s1,84(sp)
+ 40bbc8: afb00050 sw s0,80(sp)
+ 40bbcc: 24020008 li v0,8
+ 40bbd0: 8e950018 lw s5,24(s4)
+ 40bbd4: 8e900000 lw s0,0(s4)
+ 40bbd8: 240affff li t2,-1
+ 40bbdc: afa2001c sw v0,28(sp)
+ 40bbe0: afa00040 sw zero,64(sp)
+ 40bbe4: afa00044 sw zero,68(sp)
+ 40bbe8: afa20018 sw v0,24(sp)
+ 40bbec: 00002021 move a0,zero
+ 40bbf0: 00003821 move a3,zero
+ 40bbf4: 00004821 move t1,zero
+ 40bbf8: 82030000 lb v1,0(s0)
+ 40bbfc: 2402002a li v0,42
+ 40bc00: 10620156 beq v1,v0,40c15c <_ppfs_parsespec+0x5cc>
+ 40bc04: 02002821 move a1,s0
+ 40bc08: 92030000 lbu v1,0(s0)
+ 40bc0c: 1000000c b 40bc40 <_ppfs_parsespec+0xb0>
+ 40bc10: 00008821 move s1,zero
+ 40bc14: 00511021 addu v0,v0,s1
+ 40bc18: 00031e00 sll v1,v1,0x18
+ 40bc1c: 00021040 sll v0,v0,0x1
+ 40bc20: 00031e03 sra v1,v1,0x18
+ 40bc24: 00431821 addu v1,v0,v1
+ 40bc28: 2a220fff slti v0,s1,4095
+ 40bc2c: 10400002 beqz v0,40bc38 <_ppfs_parsespec+0xa8>
+ 40bc30: 26100001 addiu s0,s0,1
+ 40bc34: 2471ffd0 addiu s1,v1,-48
+ 40bc38: 92030000 lbu v1,0(s0)
+ 40bc3c: 00000000 nop
+ 40bc40: 2462ffd0 addiu v0,v1,-48
+ 40bc44: 2c42000a sltiu v0,v0,10
+ 40bc48: 1440fff2 bnez v0,40bc14 <_ppfs_parsespec+0x84>
+ 40bc4c: 00111080 sll v0,s1,0x2
+ 40bc50: 80a3ffff lb v1,-1(a1)
+ 40bc54: 24020025 li v0,37
+ 40bc58: 1062010a beq v1,v0,40c084 <_ppfs_parsespec+0x4f4>
+ 40bc5c: 24020024 li v0,36
+ 40bc60: 80a30000 lb v1,0(a1)
+ 40bc64: 2402002a li v0,42
+ 40bc68: 106200f2 beq v1,v0,40c034 <_ppfs_parsespec+0x4a4>
+ 40bc6c: 00000000 nop
+ 40bc70: 108000e9 beqz a0,40c018 <_ppfs_parsespec+0x488>
+ 40bc74: 2402002e li v0,46
+ 40bc78: 02205021 move t2,s1
+ 40bc7c: 8f858018 lw a1,-32744(gp)
+ 40bc80: 00000000 nop
+ 40bc84: 24a5125c addiu a1,a1,4700
+ 40bc88: 00000000 nop
+ 40bc8c: 00a02021 move a0,a1
+ 40bc90: 80a30000 lb v1,0(a1)
+ 40bc94: 82020000 lb v0,0(s0)
+ 40bc98: 00000000 nop
+ 40bc9c: 104300dc beq v0,v1,40c010 <_ppfs_parsespec+0x480>
+ 40bca0: 00000000 nop
+ 40bca4: 24a50001 addiu a1,a1,1
+ 40bca8: 80a20000 lb v0,0(a1)
+ 40bcac: 00000000 nop
+ 40bcb0: 1440fff7 bnez v0,40bc90 <_ppfs_parsespec+0x100>
+ 40bcb4: 00000000 nop
+ 40bcb8: 00a41023 subu v0,a1,a0
+ 40bcbc: 28420002 slti v0,v0,2
+ 40bcc0: 10400006 beqz v0,40bcdc <_ppfs_parsespec+0x14c>
+ 40bcc4: 00000000 nop
+ 40bcc8: 82030000 lb v1,0(s0)
+ 40bccc: 80a20000 lb v0,0(a1)
+ 40bcd0: 00000000 nop
+ 40bcd4: 106200cb beq v1,v0,40c004 <_ppfs_parsespec+0x474>
+ 40bcd8: 00000000 nop
+ 40bcdc: 80a20009 lb v0,9(a1)
+ 40bce0: 82030000 lb v1,0(s0)
+ 40bce4: 00023200 sll a2,v0,0x8
+ 40bce8: 92040000 lbu a0,0(s0)
+ 40bcec: 10600056 beqz v1,40be48 <_ppfs_parsespec+0x2b8>
+ 40bcf0: 2402ffff li v0,-1
+ 40bcf4: 8f858018 lw a1,-32744(gp)
+ 40bcf8: 00000000 nop
+ 40bcfc: 24a51218 addiu a1,a1,4632
+ 40bd00: 00000000 nop
+ 40bd04: 00a04021 move t0,a1
+ 40bd08: 00041600 sll v0,a0,0x18
+ 40bd0c: 80a30000 lb v1,0(a1)
+ 40bd10: 00021603 sra v0,v0,0x18
+ 40bd14: 10430095 beq v0,v1,40bf6c <_ppfs_parsespec+0x3dc>
+ 40bd18: 00a81823 subu v1,a1,t0
+ 40bd1c: 24a50001 addiu a1,a1,1
+ 40bd20: 80a20000 lb v0,0(a1)
+ 40bd24: 00000000 nop
+ 40bd28: 1440fff8 bnez v0,40bd0c <_ppfs_parsespec+0x17c>
+ 40bd2c: 00041600 sll v0,a0,0x18
+ 40bd30: 82020000 lb v0,0(s0)
+ 40bd34: 30e30004 andi v1,a3,0x4
+ 40bd38: ae82000c sw v0,12(s4)
+ 40bd3c: ae8a0004 sw t2,4(s4)
+ 40bd40: 10600088 beqz v1,40bf64 <_ppfs_parsespec+0x3d4>
+ 40bd44: ae890008 sw t1,8(s4)
+ 40bd48: 24020030 li v0,48
+ 40bd4c: ae820014 sw v0,20(s4)
+ 40bd50: 2402fffb li v0,-5
+ 40bd54: 00e21024 and v0,a3,v0
+ 40bd58: 30c30f00 andi v1,a2,0xf00
+ 40bd5c: 00431025 or v0,v0,v1
+ 40bd60: ae820010 sw v0,16(s4)
+ 40bd64: 24020001 li v0,1
+ 40bd68: ae82001c sw v0,28(s4)
+ 40bd6c: 80a20000 lb v0,0(a1)
+ 40bd70: 00000000 nop
+ 40bd74: 10400050 beqz v0,40beb8 <_ppfs_parsespec+0x328>
+ 40bd78: 2402006d li v0,109
+ 40bd7c: 1aa00041 blez s5,40be84 <_ppfs_parsespec+0x2f4>
+ 40bd80: 24020001 li v0,1
+ 40bd84: 00008821 move s1,zero
+ 40bd88: 00111080 sll v0,s1,0x2
+ 40bd8c: 03a22021 addu a0,sp,v0
+ 40bd90: 2a220003 slti v0,s1,3
+ 40bd94: 10400036 beqz v0,40be70 <_ppfs_parsespec+0x2e0>
+ 40bd98: 02341821 addu v1,s1,s4
+ 40bd9c: 90820043 lbu v0,67(a0)
+ 40bda0: 00000000 nop
+ 40bda4: 00403021 move a2,v0
+ 40bda8: a0620024 sb v0,36(v1)
+ 40bdac: 00061880 sll v1,a2,0x2
+ 40bdb0: 00112080 sll a0,s1,0x2
+ 40bdb4: 24630024 addiu v1,v1,36
+ 40bdb8: 27a20018 addiu v0,sp,24
+ 40bdbc: 02a6282a slt a1,s5,a2
+ 40bdc0: 00449821 addu s3,v0,a0
+ 40bdc4: 02839021 addu s2,s4,v1
+ 40bdc8: 10a00005 beqz a1,40bde0 <_ppfs_parsespec+0x250>
+ 40bdcc: 26310001 addiu s1,s1,1
+ 40bdd0: 00c0a821 move s5,a2
+ 40bdd4: 2aa2000a slti v0,s5,10
+ 40bdd8: 1040001b beqz v0,40be48 <_ppfs_parsespec+0x2b8>
+ 40bddc: 2402ffff li v0,-1
+ 40bde0: 8e440000 lw a0,0(s2)
+ 40bde4: 8e650000 lw a1,0(s3)
+ 40bde8: 8f998018 lw t9,-32744(gp)
+ 40bdec: 00000000 nop
+ 40bdf0: 2739baec addiu t9,t9,-17684
+ 40bdf4: 00000000 nop
+ 40bdf8: 0320f809 jalr t9
+ 40bdfc: 00000000 nop
+ 40be00: 8fbc0010 lw gp,16(sp)
+ 40be04: 10400004 beqz v0,40be18 <_ppfs_parsespec+0x288>
+ 40be08: 00000000 nop
+ 40be0c: 8e620000 lw v0,0(s3)
+ 40be10: 00000000 nop
+ 40be14: ae420000 sw v0,0(s2)
+ 40be18: 8e82001c lw v0,28(s4)
+ 40be1c: 00000000 nop
+ 40be20: 24420002 addiu v0,v0,2
+ 40be24: 0222102a slt v0,s1,v0
+ 40be28: 1440ffd8 bnez v0,40bd8c <_ppfs_parsespec+0x1fc>
+ 40be2c: 00111080 sll v0,s1,0x2
+ 40be30: 8e82001c lw v0,28(s4)
+ 40be34: 26100001 addiu s0,s0,1
+ 40be38: 24420002 addiu v0,v0,2
+ 40be3c: ae950018 sw s5,24(s4)
+ 40be40: ae900000 sw s0,0(s4)
+ 40be44: ae960020 sw s6,32(s4)
+ 40be48: 8fbf0070 lw ra,112(sp)
+ 40be4c: 8fb60068 lw s6,104(sp)
+ 40be50: 8fb50064 lw s5,100(sp)
+ 40be54: 8fb40060 lw s4,96(sp)
+ 40be58: 8fb3005c lw s3,92(sp)
+ 40be5c: 8fb20058 lw s2,88(sp)
+ 40be60: 8fb10054 lw s1,84(sp)
+ 40be64: 8fb00050 lw s0,80(sp)
+ 40be68: 03e00008 jr ra
+ 40be6c: 27bd0078 addiu sp,sp,120
+ 40be70: 8fa20048 lw v0,72(sp)
+ 40be74: 00000000 nop
+ 40be78: 00511021 addu v0,v0,s1
+ 40be7c: 1000ffcb b 40bdac <_ppfs_parsespec+0x21c>
+ 40be80: 2446fffe addiu a2,v0,-2
+ 40be84: 8e86001c lw a2,28(s4)
+ 40be88: 00000000 nop
+ 40be8c: 00063080 sll a2,a2,0x2
+ 40be90: 26840028 addiu a0,s4,40
+ 40be94: a2820026 sb v0,38(s4)
+ 40be98: 27a50020 addiu a1,sp,32
+ 40be9c: 8f998254 lw t9,-32172(gp)
+ 40bea0: 00000000 nop
+ 40bea4: 0320f809 jalr t9
+ 40bea8: 00000000 nop
+ 40beac: 8fbc0010 lw gp,16(sp)
+ 40beb0: 1000ffdf b 40be30 <_ppfs_parsespec+0x2a0>
+ 40beb4: 00000000 nop
+ 40beb8: 82030000 lb v1,0(s0)
+ 40bebc: 92070000 lbu a3,0(s0)
+ 40bec0: 10620026 beq v1,v0,40bf5c <_ppfs_parsespec+0x3cc>
+ 40bec4: 24160014 li s6,20
+ 40bec8: 8f8581a0 lw a1,-32352(gp)
+ 40becc: 00000000 nop
+ 40bed0: 8ca50000 lw a1,0(a1)
+ 40bed4: 24160015 li s6,21
+ 40bed8: 00a03021 move a2,a1
+ 40bedc: 00071600 sll v0,a3,0x18
+ 40bee0: 80a30000 lb v1,0(a1)
+ 40bee4: 00021603 sra v0,v0,0x18
+ 40bee8: 10620007 beq v1,v0,40bf08 <_ppfs_parsespec+0x378>
+ 40beec: 24c4000a addiu a0,a2,10
+ 40bef0: 24a50001 addiu a1,a1,1
+ 40bef4: 00a4102b sltu v0,a1,a0
+ 40bef8: 1440fff8 bnez v0,40bedc <_ppfs_parsespec+0x34c>
+ 40befc: 2402ffff li v0,-1
+ 40bf00: 1000ffd1 b 40be48 <_ppfs_parsespec+0x2b8>
+ 40bf04: 00000000 nop
+ 40bf08: 8f8281a0 lw v0,-32352(gp)
+ 40bf0c: 00000000 nop
+ 40bf10: 8c420000 lw v0,0(v0)
+ 40bf14: 26840004 addiu a0,s4,4
+ 40bf18: 00a21023 subu v0,a1,v0
+ 40bf1c: 00021080 sll v0,v0,0x2
+ 40bf20: 8f8181b0 lw at,-32336(gp)
+ 40bf24: 00000000 nop
+ 40bf28: 00220821 addu at,at,v0
+ 40bf2c: 8c220000 lw v0,0(at)
+ 40bf30: 24050008 li a1,8
+ 40bf34: 27a60020 addiu a2,sp,32
+ 40bf38: 0040c821 move t9,v0
+ 40bf3c: 0320f809 jalr t9
+ 40bf40: 00000000 nop
+ 40bf44: 8fbc0010 lw gp,16(sp)
+ 40bf48: 28430009 slti v1,v0,9
+ 40bf4c: 1460ff8b bnez v1,40bd7c <_ppfs_parsespec+0x1ec>
+ 40bf50: ae82001c sw v0,28(s4)
+ 40bf54: 1000ffbc b 40be48 <_ppfs_parsespec+0x2b8>
+ 40bf58: 2402ffff li v0,-1
+ 40bf5c: 1000ff87 b 40bd7c <_ppfs_parsespec+0x1ec>
+ 40bf60: ae80001c sw zero,28(s4)
+ 40bf64: 1000ff79 b 40bd4c <_ppfs_parsespec+0x1bc>
+ 40bf68: 24020020 li v0,32
+ 40bf6c: 28620012 slti v0,v1,18
+ 40bf70: 14400006 bnez v0,40bf8c <_ppfs_parsespec+0x3fc>
+ 40bf74: 0060b021 move s6,v1
+ 40bf78: 30c20400 andi v0,a2,0x400
+ 40bf7c: 10400003 beqz v0,40bf8c <_ppfs_parsespec+0x3fc>
+ 40bf80: 00000000 nop
+ 40bf84: 2463fffe addiu v1,v1,-2
+ 40bf88: 0060b021 move s6,v1
+ 40bf8c: 8f858018 lw a1,-32744(gp)
+ 40bf90: 00000000 nop
+ 40bf94: 24a5122f addiu a1,a1,4655
+ 40bf98: 24a50001 addiu a1,a1,1
+ 40bf9c: 80a20000 lb v0,0(a1)
+ 40bfa0: 00000000 nop
+ 40bfa4: 0043102a slt v0,v0,v1
+ 40bfa8: 1440fffb bnez v0,40bf98 <_ppfs_parsespec+0x408>
+ 40bfac: 00000000 nop
+ 40bfb0: 8f828018 lw v0,-32744(gp)
+ 40bfb4: 00000000 nop
+ 40bfb8: 24421230 addiu v0,v0,4656
+ 40bfbc: 00000000 nop
+ 40bfc0: 00a28823 subu s1,a1,v0
+ 40bfc4: 00111840 sll v1,s1,0x1
+ 40bfc8: 8f828018 lw v0,-32744(gp)
+ 40bfcc: 00000000 nop
+ 40bfd0: 2442123c addiu v0,v0,4668
+ 40bfd4: 00431021 addu v0,v0,v1
+ 40bfd8: 84420000 lh v0,0(v0)
+ 40bfdc: 8f818018 lw at,-32744(gp)
+ 40bfe0: 00000000 nop
+ 40bfe4: 2421124c addiu at,at,4684
+ 40bfe8: 00230821 addu at,at,v1
+ 40bfec: 84230000 lh v1,0(at)
+ 40bff0: 00c21025 or v0,a2,v0
+ 40bff4: 00431024 and v0,v0,v1
+ 40bff8: 01002821 move a1,t0
+ 40bffc: 1000ff4c b 40bd30 <_ppfs_parsespec+0x1a0>
+ 40c000: afa20020 sw v0,32(sp)
+ 40c004: 24a50009 addiu a1,a1,9
+ 40c008: 1000ff34 b 40bcdc <_ppfs_parsespec+0x14c>
+ 40c00c: 26100001 addiu s0,s0,1
+ 40c010: 1000ff29 b 40bcb8 <_ppfs_parsespec+0x128>
+ 40c014: 26100001 addiu s0,s0,1
+ 40c018: 82030000 lb v1,0(s0)
+ 40c01c: 00000000 nop
+ 40c020: 1462ff16 bne v1,v0,40bc7c <_ppfs_parsespec+0xec>
+ 40c024: 02204821 move t1,s1
+ 40c028: 26100001 addiu s0,s0,1
+ 40c02c: 1000fef2 b 40bbf8 <_ppfs_parsespec+0x68>
+ 40c030: 2404ffff li a0,-1
+ 40c034: 12a0000e beqz s5,40c070 <_ppfs_parsespec+0x4e0>
+ 40c038: 24030024 li v1,36
+ 40c03c: 92020000 lbu v0,0(s0)
+ 40c040: 00000000 nop
+ 40c044: 00021600 sll v0,v0,0x18
+ 40c048: 00021603 sra v0,v0,0x18
+ 40c04c: 14430037 bne v0,v1,40c12c <_ppfs_parsespec+0x59c>
+ 40c050: 26100001 addiu s0,s0,1
+ 40c054: 1a20ff7c blez s1,40be48 <_ppfs_parsespec+0x2b8>
+ 40c058: 2402ffff li v0,-1
+ 40c05c: 30820004 andi v0,a0,0x4
+ 40c060: 03a21021 addu v0,sp,v0
+ 40c064: ac510040 sw s1,64(v0)
+ 40c068: 1000ff01 b 40bc70 <_ppfs_parsespec+0xe0>
+ 40c06c: 3c118000 lui s1,0x8000
+ 40c070: 24a50001 addiu a1,a1,1
+ 40c074: 10b0fffc beq a1,s0,40c068 <_ppfs_parsespec+0x4d8>
+ 40c078: 2402ffff li v0,-1
+ 40c07c: 1000ff72 b 40be48 <_ppfs_parsespec+0x2b8>
+ 40c080: 00000000 nop
+ 40c084: 82030000 lb v1,0(s0)
+ 40c088: 00000000 nop
+ 40c08c: 10620029 beq v1,v0,40c134 <_ppfs_parsespec+0x5a4>
+ 40c090: 00000000 nop
+ 40c094: 1ea0ff6c bgtz s5,40be48 <_ppfs_parsespec+0x2b8>
+ 40c098: 2402ffff li v0,-1
+ 40c09c: 00b0102b sltu v0,a1,s0
+ 40c0a0: 10400005 beqz v0,40c0b8 <_ppfs_parsespec+0x528>
+ 40c0a4: 0000a821 move s5,zero
+ 40c0a8: 80a30000 lb v1,0(a1)
+ 40c0ac: 24020030 li v0,48
+ 40c0b0: 1462feed bne v1,v0,40bc68 <_ppfs_parsespec+0xd8>
+ 40c0b4: 2402002a li v0,42
+ 40c0b8: 00a08021 move s0,a1
+ 40c0bc: 24110001 li s1,1
+ 40c0c0: 8f858018 lw a1,-32744(gp)
+ 40c0c4: 00000000 nop
+ 40c0c8: 24a51210 addiu a1,a1,4624
+ 40c0cc: 00000000 nop
+ 40c0d0: 90a20000 lbu v0,0(a1)
+ 40c0d4: 82030000 lb v1,0(s0)
+ 40c0d8: 00021600 sll v0,v0,0x18
+ 40c0dc: 00021603 sra v0,v0,0x18
+ 40c0e0: 1062000f beq v1,v0,40c120 <_ppfs_parsespec+0x590>
+ 40c0e4: 24a50001 addiu a1,a1,1
+ 40c0e8: 80a20000 lb v0,0(a1)
+ 40c0ec: 00000000 nop
+ 40c0f0: 1440fff7 bnez v0,40c0d0 <_ppfs_parsespec+0x540>
+ 40c0f4: 00118840 sll s1,s1,0x1
+ 40c0f8: 30e2000a andi v0,a3,0xa
+ 40c0fc: 00021043 sra v0,v0,0x1
+ 40c100: 00021027 nor v0,zero,v0
+ 40c104: 8203ffff lb v1,-1(s0)
+ 40c108: 00e23824 and a3,a3,v0
+ 40c10c: 24020025 li v0,37
+ 40c110: 1462feb9 bne v1,v0,40bbf8 <_ppfs_parsespec+0x68>
+ 40c114: 00008821 move s1,zero
+ 40c118: 1000fed1 b 40bc60 <_ppfs_parsespec+0xd0>
+ 40c11c: 00000000 nop
+ 40c120: 00f13825 or a3,a3,s1
+ 40c124: 1000ffe5 b 40c0bc <_ppfs_parsespec+0x52c>
+ 40c128: 26100001 addiu s0,s0,1
+ 40c12c: 1000ff46 b 40be48 <_ppfs_parsespec+0x2b8>
+ 40c130: 2402ffff li v0,-1
+ 40c134: 1a20ffd7 blez s1,40c094 <_ppfs_parsespec+0x504>
+ 40c138: 00000000 nop
+ 40c13c: 26100001 addiu s0,s0,1
+ 40c140: 12a0ff41 beqz s5,40be48 <_ppfs_parsespec+0x2b8>
+ 40c144: 2402ffff li v0,-1
+ 40c148: 02b1102a slt v0,s5,s1
+ 40c14c: 1040ffdb beqz v0,40c0bc <_ppfs_parsespec+0x52c>
+ 40c150: afb10048 sw s1,72(sp)
+ 40c154: 1000ffd9 b 40c0bc <_ppfs_parsespec+0x52c>
+ 40c158: 0220a821 move s5,s1
+ 40c15c: 30820004 andi v0,a0,0x4
+ 40c160: 03a21021 addu v0,sp,v0
+ 40c164: ac400018 sw zero,24(v0)
+ 40c168: 1000fea7 b 40bc08 <_ppfs_parsespec+0x78>
+ 40c16c: 26100001 addiu s0,s0,1
+
+0040c170 <_charpad>:
+ 40c170: 3c1c0fc0 lui gp,0xfc0
+ 40c174: 279cc0e0 addiu gp,gp,-16160
+ 40c178: 0399e021 addu gp,gp,t9
+ 40c17c: 27bdffd0 addiu sp,sp,-48
+ 40c180: afbc0010 sw gp,16(sp)
+ 40c184: afb00020 sw s0,32(sp)
+ 40c188: 00c08021 move s0,a2
+ 40c18c: afb10024 sw s1,36(sp)
+ 40c190: afbf002c sw ra,44(sp)
+ 40c194: afbc0028 sw gp,40(sp)
+ 40c198: a3a50018 sb a1,24(sp)
+ 40c19c: 1200000c beqz s0,40c1d0 <_charpad+0x60>
+ 40c1a0: 00808821 move s1,a0
+ 40c1a4: 2610ffff addiu s0,s0,-1
+ 40c1a8: 27a40018 addiu a0,sp,24
+ 40c1ac: 24050001 li a1,1
+ 40c1b0: 02203021 move a2,s1
+ 40c1b4: 8f9982a4 lw t9,-32092(gp)
+ 40c1b8: 00000000 nop
+ 40c1bc: 0320f809 jalr t9
+ 40c1c0: 00000000 nop
+ 40c1c4: 8fbc0010 lw gp,16(sp)
+ 40c1c8: 1600fff7 bnez s0,40c1a8 <_charpad+0x38>
+ 40c1cc: 2610ffff addiu s0,s0,-1
+ 40c1d0: 8fbf002c lw ra,44(sp)
+ 40c1d4: 8fb10024 lw s1,36(sp)
+ 40c1d8: 8fb00020 lw s0,32(sp)
+ 40c1dc: 03e00008 jr ra
+ 40c1e0: 27bd0030 addiu sp,sp,48
+
+0040c1e4 <_do_one_spec>:
+ 40c1e4: 3c1c0fc0 lui gp,0xfc0
+ 40c1e8: 279cc06c addiu gp,gp,-16276
+ 40c1ec: 0399e021 addu gp,gp,t9
+ 40c1f0: 27bdff50 addiu sp,sp,-176
+ 40c1f4: afbc0018 sw gp,24(sp)
+ 40c1f8: afb3008c sw s3,140(sp)
+ 40c1fc: 00a09821 move s3,a1
+ 40c200: afb60098 sw s6,152(sp)
+ 40c204: 0080b021 move s6,a0
+ 40c208: 02602021 move a0,s3
+ 40c20c: afbe00a4 sw s8,164(sp)
+ 40c210: afb7009c sw s7,156(sp)
+ 40c214: afb50094 sw s5,148(sp)
+ 40c218: afb40090 sw s4,144(sp)
+ 40c21c: 00c0b821 move s7,a2
+ 40c220: afbf00a8 sw ra,168(sp)
+ 40c224: afbc00a0 sw gp,160(sp)
+ 40c228: afb20088 sw s2,136(sp)
+ 40c22c: afb10084 sw s1,132(sp)
+ 40c230: afb00080 sw s0,128(sp)
+ 40c234: 8f998060 lw t9,-32672(gp)
+ 40c238: 00000000 nop
+ 40c23c: 0320f809 jalr t9
+ 40c240: 00000000 nop
+ 40c244: 8fbc0018 lw gp,24(sp)
+ 40c248: 02602021 move a0,s3
+ 40c24c: 8f9980e0 lw t9,-32544(gp)
+ 40c250: 00000000 nop
+ 40c254: 0320f809 jalr t9
+ 40c258: 00000000 nop
+ 40c25c: 8fbc0018 lw gp,24(sp)
+ 40c260: 92660026 lbu a2,38(s3)
+ 40c264: 8e630018 lw v1,24(s3)
+ 40c268: 00061080 sll v0,a2,0x2
+ 40c26c: 02621021 addu v0,s3,v0
+ 40c270: 24440024 addiu a0,v0,36
+ 40c274: 0000a021 move s4,zero
+ 40c278: 2415000b li s5,11
+ 40c27c: 241e0020 li s8,32
+ 40c280: 18600004 blez v1,40c294 <_do_one_spec+0xb0>
+ 40c284: 26650058 addiu a1,s3,88
+ 40c288: 000610c0 sll v0,a2,0x3
+ 40c28c: 00a21021 addu v0,a1,v0
+ 40c290: 2445fff8 addiu a1,v0,-8
+ 40c294: 8e67001c lw a3,28(s3)
+ 40c298: 00000000 nop
+ 40c29c: 18e00008 blez a3,40c2c0 <_do_one_spec+0xdc>
+ 40c2a0: 00003021 move a2,zero
+ 40c2a4: 00061080 sll v0,a2,0x2
+ 40c2a8: 24c60001 addiu a2,a2,1
+ 40c2ac: 03a21021 addu v0,sp,v0
+ 40c2b0: 00c7182a slt v1,a2,a3
+ 40c2b4: ac450020 sw a1,32(v0)
+ 40c2b8: 1460fffa bnez v1,40c2a4 <_do_one_spec+0xc0>
+ 40c2bc: 24a50008 addiu a1,a1,8
+ 40c2c0: 8e650020 lw a1,32(s3)
+ 40c2c4: 00000000 nop
+ 40c2c8: 10a00141 beqz a1,40c7d0 <_do_one_spec+0x5ec>
+ 40c2cc: 00000000 nop
+ 40c2d0: 2ca20008 sltiu v0,a1,8
+ 40c2d4: 104000da beqz v0,40c640 <_do_one_spec+0x45c>
+ 40c2d8: 2ca30010 sltiu v1,a1,16
+ 40c2dc: 2ca20006 sltiu v0,a1,6
+ 40c2e0: 8f908018 lw s0,-32744(gp)
+ 40c2e4: 00000000 nop
+ 40c2e8: 26101270 addiu s0,s0,4720
+ 40c2ec: 02058021 addu s0,s0,a1
+ 40c2f0: 8210ffff lb s0,-1(s0)
+ 40c2f4: 104000d0 beqz v0,40c638 <_do_one_spec+0x454>
+ 40c2f8: 24020001 li v0,1
+ 40c2fc: 10a200cc beq a1,v0,40c630 <_do_one_spec+0x44c>
+ 40c300: 00000000 nop
+ 40c304: 8e620004 lw v0,4(s3)
+ 40c308: 00000000 nop
+ 40c30c: 044000c5 bltz v0,40c624 <_do_one_spec+0x440>
+ 40c310: 00000000 nop
+ 40c314: 8c840000 lw a0,0(a0)
+ 40c318: 8fa50020 lw a1,32(sp)
+ 40c31c: 02003021 move a2,s0
+ 40c320: 30840f00 andi a0,a0,0xf00
+ 40c324: 8f998034 lw t9,-32716(gp)
+ 40c328: 00000000 nop
+ 40c32c: 0320f809 jalr t9
+ 40c330: 00000000 nop
+ 40c334: 8fbc0018 lw gp,24(sp)
+ 40c338: 00603821 move a3,v1
+ 40c33c: 8e630020 lw v1,32(s3)
+ 40c340: 00403021 move a2,v0
+ 40c344: 24020003 li v0,3
+ 40c348: 106200b4 beq v1,v0,40c61c <_do_one_spec+0x438>
+ 40c34c: afb00010 sw s0,16(sp)
+ 40c350: 24020057 li v0,87
+ 40c354: afa20014 sw v0,20(sp)
+ 40c358: 27a4007f addiu a0,sp,127
+ 40c35c: 8f998278 lw t9,-32136(gp)
+ 40c360: 00000000 nop
+ 40c364: 0320f809 jalr t9
+ 40c368: 00000000 nop
+ 40c36c: 8fbc0018 lw gp,24(sp)
+ 40c370: 00408021 move s0,v0
+ 40c374: 8e620020 lw v0,32(s3)
+ 40c378: 00000000 nop
+ 40c37c: 2c420006 sltiu v0,v0,6
+ 40c380: 1440000c bnez v0,40c3b4 <_do_one_spec+0x1d0>
+ 40c384: 27a20040 addiu v0,sp,64
+ 40c388: 82030000 lb v1,0(s0)
+ 40c38c: 2402002d li v0,45
+ 40c390: 1062009c beq v1,v0,40c604 <_do_one_spec+0x420>
+ 40c394: 00000000 nop
+ 40c398: 8e630010 lw v1,16(s3)
+ 40c39c: 00000000 nop
+ 40c3a0: 30620002 andi v0,v1,0x2
+ 40c3a4: 10400093 beqz v0,40c5f4 <_do_one_spec+0x410>
+ 40c3a8: 30620001 andi v0,v1,0x1
+ 40c3ac: 0000a821 move s5,zero
+ 40c3b0: 27a20040 addiu v0,sp,64
+ 40c3b4: 8e740004 lw s4,4(s3)
+ 40c3b8: 00502023 subu a0,v0,s0
+ 40c3bc: 0680008b bltz s4,40c5ec <_do_one_spec+0x408>
+ 40c3c0: 2492003f addiu s2,a0,63
+ 40c3c4: 8e620010 lw v0,16(s3)
+ 40c3c8: 00000000 nop
+ 40c3cc: 30420010 andi v0,v0,0x10
+ 40c3d0: 1040000c beqz v0,40c404 <_do_one_spec+0x220>
+ 40c3d4: 00000000 nop
+ 40c3d8: 8e630020 lw v1,32(s3)
+ 40c3dc: 00000000 nop
+ 40c3e0: 2c620003 sltiu v0,v1,3
+ 40c3e4: 10400002 beqz v0,40c3f0 <_do_one_spec+0x20c>
+ 40c3e8: 24020003 li v0,3
+ 40c3ec: 24150006 li s5,6
+ 40c3f0: 1062007c beq v1,v0,40c5e4 <_do_one_spec+0x400>
+ 40c3f4: 00000000 nop
+ 40c3f8: 24020004 li v0,4
+ 40c3fc: 10620071 beq v1,v0,40c5c4 <_do_one_spec+0x3e0>
+ 40c400: 0254102b sltu v0,s2,s4
+ 40c404: 82030000 lb v1,0(s0)
+ 40c408: 24020030 li v0,48
+ 40c40c: 1062005c beq v1,v0,40c580 <_do_one_spec+0x39c>
+ 40c410: 2aa20006 slti v0,s5,6
+ 40c414: 0254102b sltu v0,s2,s4
+ 40c418: 14400002 bnez v0,40c424 <_do_one_spec+0x240>
+ 40c41c: 02923023 subu a2,s4,s2
+ 40c420: 00003021 move a2,zero
+ 40c424: 00c0a021 move s4,a2
+ 40c428: 2402000b li v0,11
+ 40c42c: 12a20005 beq s5,v0,40c444 <_do_one_spec+0x260>
+ 40c430: 02541821 addu v1,s2,s4
+ 40c434: 2aa20006 slti v0,s5,6
+ 40c438: 1040004f beqz v0,40c578 <_do_one_spec+0x394>
+ 40c43c: 00000000 nop
+ 40c440: 24630001 addiu v1,v1,1
+ 40c444: 8e640008 lw a0,8(s3)
+ 40c448: 00000000 nop
+ 40c44c: 0064102b sltu v0,v1,a0
+ 40c450: 10400002 beqz v0,40c45c <_do_one_spec+0x278>
+ 40c454: 00008821 move s1,zero
+ 40c458: 00838823 subu s1,a0,v1
+ 40c45c: 8ee20000 lw v0,0(s7)
+ 40c460: 00711821 addu v1,v1,s1
+ 40c464: 00431021 addu v0,v0,v1
+ 40c468: aee20000 sw v0,0(s7)
+ 40c46c: 24020030 li v0,48
+ 40c470: 13c2003e beq s8,v0,40c56c <_do_one_spec+0x388>
+ 40c474: 00000000 nop
+ 40c478: 8e620010 lw v0,16(s3)
+ 40c47c: 00000000 nop
+ 40c480: 30420008 andi v0,v0,0x8
+ 40c484: 10400030 beqz v0,40c548 <_do_one_spec+0x364>
+ 40c488: 02203021 move a2,s1
+ 40c48c: 8f848018 lw a0,-32744(gp)
+ 40c490: 00000000 nop
+ 40c494: 24841278 addiu a0,a0,4728
+ 40c498: 00952021 addu a0,a0,s5
+ 40c49c: 02c02821 move a1,s6
+ 40c4a0: 8f998058 lw t9,-32680(gp)
+ 40c4a4: 00000000 nop
+ 40c4a8: 0320f809 jalr t9
+ 40c4ac: 00000000 nop
+ 40c4b0: 8fbc0018 lw gp,24(sp)
+ 40c4b4: 02c02021 move a0,s6
+ 40c4b8: 02803021 move a2,s4
+ 40c4bc: 24050030 li a1,48
+ 40c4c0: 8f998178 lw t9,-32392(gp)
+ 40c4c4: 00000000 nop
+ 40c4c8: 0320f809 jalr t9
+ 40c4cc: 00000000 nop
+ 40c4d0: 8fbc0018 lw gp,24(sp)
+ 40c4d4: 02002021 move a0,s0
+ 40c4d8: 02402821 move a1,s2
+ 40c4dc: 02c03021 move a2,s6
+ 40c4e0: 8f9982a4 lw t9,-32092(gp)
+ 40c4e4: 00000000 nop
+ 40c4e8: 0320f809 jalr t9
+ 40c4ec: 00000000 nop
+ 40c4f0: 8fbc0018 lw gp,24(sp)
+ 40c4f4: 02c02021 move a0,s6
+ 40c4f8: 02203021 move a2,s1
+ 40c4fc: 24050020 li a1,32
+ 40c500: 8f998178 lw t9,-32392(gp)
+ 40c504: 00000000 nop
+ 40c508: 0320f809 jalr t9
+ 40c50c: 00000000 nop
+ 40c510: 8fbc0018 lw gp,24(sp)
+ 40c514: 00001021 move v0,zero
+ 40c518: 8fbf00a8 lw ra,168(sp)
+ 40c51c: 8fbe00a4 lw s8,164(sp)
+ 40c520: 8fb7009c lw s7,156(sp)
+ 40c524: 8fb60098 lw s6,152(sp)
+ 40c528: 8fb50094 lw s5,148(sp)
+ 40c52c: 8fb40090 lw s4,144(sp)
+ 40c530: 8fb3008c lw s3,140(sp)
+ 40c534: 8fb20088 lw s2,136(sp)
+ 40c538: 8fb10084 lw s1,132(sp)
+ 40c53c: 8fb00080 lw s0,128(sp)
+ 40c540: 03e00008 jr ra
+ 40c544: 27bd00b0 addiu sp,sp,176
+ 40c548: 02c02021 move a0,s6
+ 40c54c: 24050020 li a1,32
+ 40c550: 8f998178 lw t9,-32392(gp)
+ 40c554: 00000000 nop
+ 40c558: 0320f809 jalr t9
+ 40c55c: 00000000 nop
+ 40c560: 8fbc0018 lw gp,24(sp)
+ 40c564: 1000ffc9 b 40c48c <_do_one_spec+0x2a8>
+ 40c568: 00008821 move s1,zero
+ 40c56c: 0291a021 addu s4,s4,s1
+ 40c570: 1000ffc1 b 40c478 <_do_one_spec+0x294>
+ 40c574: 00008821 move s1,zero
+ 40c578: 1000ffb2 b 40c444 <_do_one_spec+0x260>
+ 40c57c: 24630002 addiu v1,v1,2
+ 40c580: 14400002 bnez v0,40c58c <_do_one_spec+0x3a8>
+ 40c584: 00000000 nop
+ 40c588: 2415000b li s5,11
+ 40c58c: 8e630020 lw v1,32(s3)
+ 40c590: 24020001 li v0,1
+ 40c594: 10620005 beq v1,v0,40c5ac <_do_one_spec+0x3c8>
+ 40c598: 00000000 nop
+ 40c59c: 1680ff9e bnez s4,40c418 <_do_one_spec+0x234>
+ 40c5a0: 0254102b sltu v0,s2,s4
+ 40c5a4: 1000ff9b b 40c414 <_do_one_spec+0x230>
+ 40c5a8: 00009021 move s2,zero
+ 40c5ac: 8f908018 lw s0,-32744(gp)
+ 40c5b0: 00000000 nop
+ 40c5b4: 26101284 addiu s0,s0,4740
+ 40c5b8: 24120005 li s2,5
+ 40c5bc: 1000ff95 b 40c414 <_do_one_spec+0x230>
+ 40c5c0: 0000a021 move s4,zero
+ 40c5c4: 1440ff8f bnez v0,40c404 <_do_one_spec+0x220>
+ 40c5c8: 24020030 li v0,48
+ 40c5cc: 82030000 lb v1,0(s0)
+ 40c5d0: 00000000 nop
+ 40c5d4: 1462ff8d bne v1,v0,40c40c <_do_one_spec+0x228>
+ 40c5d8: 24940040 addiu s4,a0,64
+ 40c5dc: 1000ff8b b 40c40c <_do_one_spec+0x228>
+ 40c5e0: 24140001 li s4,1
+ 40c5e4: 1000ff84 b 40c3f8 <_do_one_spec+0x214>
+ 40c5e8: 24150009 li s5,9
+ 40c5ec: 1000ff75 b 40c3c4 <_do_one_spec+0x1e0>
+ 40c5f0: 24140001 li s4,1
+ 40c5f4: 1040ff6f beqz v0,40c3b4 <_do_one_spec+0x1d0>
+ 40c5f8: 27a20040 addiu v0,sp,64
+ 40c5fc: 1000ff6d b 40c3b4 <_do_one_spec+0x1d0>
+ 40c600: 24150004 li s5,4
+ 40c604: 8e620010 lw v0,16(s3)
+ 40c608: 26100001 addiu s0,s0,1
+ 40c60c: 34420002 ori v0,v0,0x2
+ 40c610: 24150002 li s5,2
+ 40c614: 1000ff66 b 40c3b0 <_do_one_spec+0x1cc>
+ 40c618: ae620010 sw v0,16(s3)
+ 40c61c: 1000ff4d b 40c354 <_do_one_spec+0x170>
+ 40c620: 24020037 li v0,55
+ 40c624: 827e0017 lb s8,23(s3)
+ 40c628: 1000ff3a b 40c314 <_do_one_spec+0x130>
+ 40c62c: 00000000 nop
+ 40c630: 1000ff34 b 40c304 <_do_one_spec+0x120>
+ 40c634: 24150006 li s5,6
+ 40c638: 1000ff32 b 40c304 <_do_one_spec+0x120>
+ 40c63c: 00108023 negu s0,s0
+ 40c640: 1460ffb5 bnez v1,40c518 <_do_one_spec+0x334>
+ 40c644: 2402ffff li v0,-1
+ 40c648: 2ca30012 sltiu v1,a1,18
+ 40c64c: 1460ffb2 bnez v1,40c518 <_do_one_spec+0x334>
+ 40c650: 00000000 nop
+ 40c654: 2ca20014 sltiu v0,a1,20
+ 40c658: 10400024 beqz v0,40c6ec <_do_one_spec+0x508>
+ 40c65c: 24020014 li v0,20
+ 40c660: 24020013 li v0,19
+ 40c664: 10a20008 beq a1,v0,40c688 <_do_one_spec+0x4a4>
+ 40c668: 27b00040 addiu s0,sp,64
+ 40c66c: 8fa20020 lw v0,32(sp)
+ 40c670: 00000000 nop
+ 40c674: 90420003 lbu v0,3(v0)
+ 40c678: 24120001 li s2,1
+ 40c67c: a3a20040 sb v0,64(sp)
+ 40c680: 1000ff69 b 40c428 <_do_one_spec+0x244>
+ 40c684: a3a00041 sb zero,65(sp)
+ 40c688: 8fa20020 lw v0,32(sp)
+ 40c68c: 00000000 nop
+ 40c690: 8c500000 lw s0,0(v0)
+ 40c694: 00000000 nop
+ 40c698: 1200000f beqz s0,40c6d8 <_do_one_spec+0x4f4>
+ 40c69c: 00000000 nop
+ 40c6a0: 8e620004 lw v0,4(s3)
+ 40c6a4: 00000000 nop
+ 40c6a8: 04400009 bltz v0,40c6d0 <_do_one_spec+0x4ec>
+ 40c6ac: 00402821 move a1,v0
+ 40c6b0: 02002021 move a0,s0
+ 40c6b4: 8f9981dc lw t9,-32292(gp)
+ 40c6b8: 00000000 nop
+ 40c6bc: 0320f809 jalr t9
+ 40c6c0: 00000000 nop
+ 40c6c4: 8fbc0018 lw gp,24(sp)
+ 40c6c8: 1000ff57 b 40c428 <_do_one_spec+0x244>
+ 40c6cc: 00409021 move s2,v0
+ 40c6d0: 1000fff7 b 40c6b0 <_do_one_spec+0x4cc>
+ 40c6d4: 2405ffff li a1,-1
+ 40c6d8: 8f908018 lw s0,-32744(gp)
+ 40c6dc: 00000000 nop
+ 40c6e0: 2610128c addiu s0,s0,4748
+ 40c6e4: 1000ff50 b 40c428 <_do_one_spec+0x244>
+ 40c6e8: 24120006 li s2,6
+ 40c6ec: 10a20029 beq a1,v0,40c794 <_do_one_spec+0x5b0>
+ 40c6f0: 00000000 nop
+ 40c6f4: 8f9081a0 lw s0,-32352(gp)
+ 40c6f8: 00000000 nop
+ 40c6fc: 8e100000 lw s0,0(s0)
+ 40c700: 00000000 nop
+ 40c704: 02002821 move a1,s0
+ 40c708: 82030000 lb v1,0(s0)
+ 40c70c: 8e62000c lw v0,12(s3)
+ 40c710: 00000000 nop
+ 40c714: 10620007 beq v1,v0,40c734 <_do_one_spec+0x550>
+ 40c718: 24a4000a addiu a0,a1,10
+ 40c71c: 26100001 addiu s0,s0,1
+ 40c720: 0204102b sltu v0,s0,a0
+ 40c724: 1440fff8 bnez v0,40c708 <_do_one_spec+0x524>
+ 40c728: 00000000 nop
+ 40c72c: 1000ff7a b 40c518 <_do_one_spec+0x334>
+ 40c730: 2402ffff li v0,-1
+ 40c734: 8f8281a0 lw v0,-32352(gp)
+ 40c738: 00000000 nop
+ 40c73c: 8c420000 lw v0,0(v0)
+ 40c740: 02c02021 move a0,s6
+ 40c744: 02021023 subu v0,s0,v0
+ 40c748: 00021080 sll v0,v0,0x2
+ 40c74c: 8f81807c lw at,-32644(gp)
+ 40c750: 00000000 nop
+ 40c754: 00220821 addu at,at,v0
+ 40c758: 8c220000 lw v0,0(at)
+ 40c75c: 26650004 addiu a1,s3,4
+ 40c760: 27a60020 addiu a2,sp,32
+ 40c764: 0040c821 move t9,v0
+ 40c768: 0320f809 jalr t9
+ 40c76c: 00000000 nop
+ 40c770: 8fbc0018 lw gp,24(sp)
+ 40c774: 00402021 move a0,v0
+ 40c778: 0480ffec bltz a0,40c72c <_do_one_spec+0x548>
+ 40c77c: 00000000 nop
+ 40c780: 8ee30000 lw v1,0(s7)
+ 40c784: 00001021 move v0,zero
+ 40c788: 00641821 addu v1,v1,a0
+ 40c78c: 1000ff62 b 40c518 <_do_one_spec+0x334>
+ 40c790: aee30000 sw v1,0(s7)
+ 40c794: 8f9980a0 lw t9,-32608(gp)
+ 40c798: 00000000 nop
+ 40c79c: 0320f809 jalr t9
+ 40c7a0: 00000000 nop
+ 40c7a4: 8fbc0018 lw gp,24(sp)
+ 40c7a8: 8c440000 lw a0,0(v0)
+ 40c7ac: 27a50040 addiu a1,sp,64
+ 40c7b0: 24060040 li a2,64
+ 40c7b4: 8f9981ec lw t9,-32276(gp)
+ 40c7b8: 00000000 nop
+ 40c7bc: 0320f809 jalr t9
+ 40c7c0: 00000000 nop
+ 40c7c4: 8fbc0018 lw gp,24(sp)
+ 40c7c8: 1000ffb5 b 40c6a0 <_do_one_spec+0x4bc>
+ 40c7cc: 00408021 move s0,v0
+ 40c7d0: 8ee20000 lw v0,0(s7)
+ 40c7d4: 8e650010 lw a1,16(s3)
+ 40c7d8: 00403821 move a3,v0
+ 40c7dc: 000237c3 sra a2,v0,0x1f
+ 40c7e0: 8fa20020 lw v0,32(sp)
+ 40c7e4: 30a50f00 andi a1,a1,0xf00
+ 40c7e8: 8c440000 lw a0,0(v0)
+ 40c7ec: 8f998168 lw t9,-32408(gp)
+ 40c7f0: 00000000 nop
+ 40c7f4: 0320f809 jalr t9
+ 40c7f8: 00000000 nop
+ 40c7fc: 8fbc0018 lw gp,24(sp)
+ 40c800: 1000ff45 b 40c518 <_do_one_spec+0x334>
+ 40c804: 00001021 move v0,zero
+ ...
+
+0040c810 <_store_inttype>:
+ 40c810: 3c1c0fc0 lui gp,0xfc0
+ 40c814: 279cba40 addiu gp,gp,-17856
+ 40c818: 0399e021 addu gp,gp,t9
+ 40c81c: 24020100 li v0,256
+ 40c820: 10a2000c beq a1,v0,40c854 <_store_inttype+0x44>
+ 40c824: 24020800 li v0,2048
+ 40c828: 10a20007 beq a1,v0,40c848 <_store_inttype+0x38>
+ 40c82c: 24020200 li v0,512
+ 40c830: 10a20003 beq a1,v0,40c840 <_store_inttype+0x30>
+ 40c834: 00000000 nop
+ 40c838: 03e00008 jr ra
+ 40c83c: ac870000 sw a3,0(a0)
+ 40c840: 03e00008 jr ra
+ 40c844: a4870000 sh a3,0(a0)
+ 40c848: ac860000 sw a2,0(a0)
+ 40c84c: 03e00008 jr ra
+ 40c850: ac870004 sw a3,4(a0)
+ 40c854: 03e00008 jr ra
+ 40c858: a0870000 sb a3,0(a0)
+ 40c85c: 00000000 nop
+
+0040c860 <_load_inttype>:
+ 40c860: 3c1c0fc0 lui gp,0xfc0
+ 40c864: 279cb9f0 addiu gp,gp,-17936
+ 40c868: 0399e021 addu gp,gp,t9
+ 40c86c: 04c00011 bltz a2,40c8b4 <_load_inttype+0x54>
+ 40c870: 30820800 andi v0,a0,0x800
+ 40c874: 14400011 bnez v0,40c8bc <_load_inttype+0x5c>
+ 40c878: 00000000 nop
+ 40c87c: 24020100 li v0,256
+ 40c880: 8ca50000 lw a1,0(a1)
+ 40c884: 10820009 beq a0,v0,40c8ac <_load_inttype+0x4c>
+ 40c888: 00000000 nop
+ 40c88c: 24020200 li v0,512
+ 40c890: 10820004 beq a0,v0,40c8a4 <_load_inttype+0x44>
+ 40c894: 00000000 nop
+ 40c898: 00a01821 move v1,a1
+ 40c89c: 03e00008 jr ra
+ 40c8a0: 00001021 move v0,zero
+ 40c8a4: 1000fffc b 40c898 <_load_inttype+0x38>
+ 40c8a8: 30a5ffff andi a1,a1,0xffff
+ 40c8ac: 1000fff7 b 40c88c <_load_inttype+0x2c>
+ 40c8b0: 30a500ff andi a1,a1,0xff
+ 40c8b4: 10400005 beqz v0,40c8cc <_load_inttype+0x6c>
+ 40c8b8: 00000000 nop
+ 40c8bc: 8ca20000 lw v0,0(a1)
+ 40c8c0: 8ca30004 lw v1,4(a1)
+ 40c8c4: 03e00008 jr ra
+ 40c8c8: 00000000 nop
+ 40c8cc: 24020100 li v0,256
+ 40c8d0: 8ca50000 lw a1,0(a1)
+ 40c8d4: 1082000a beq a0,v0,40c900 <_load_inttype+0xa0>
+ 40c8d8: 00051600 sll v0,a1,0x18
+ 40c8dc: 24020200 li v0,512
+ 40c8e0: 10820004 beq a0,v0,40c8f4 <_load_inttype+0x94>
+ 40c8e4: 00000000 nop
+ 40c8e8: 00a01821 move v1,a1
+ 40c8ec: 03e00008 jr ra
+ 40c8f0: 000517c3 sra v0,a1,0x1f
+ 40c8f4: 00051400 sll v0,a1,0x10
+ 40c8f8: 1000fffb b 40c8e8 <_load_inttype+0x88>
+ 40c8fc: 00022c03 sra a1,v0,0x10
+ 40c900: 1000fff6 b 40c8dc <_load_inttype+0x7c>
+ 40c904: 00022e03 sra a1,v0,0x18
+ ...
+
+0040c910 <memmove>:
+ 40c910: 3c1c0fc0 lui gp,0xfc0
+ 40c914: 279cb940 addiu gp,gp,-18112
+ 40c918: 0399e021 addu gp,gp,t9
+ 40c91c: 00a4102b sltu v0,a1,a0
+ 40c920: 00803821 move a3,a0
+ 40c924: 1440000b bnez v0,40c954 <memmove+0x44>
+ 40c928: 00a01821 move v1,a1
+ 40c92c: 10c00007 beqz a2,40c94c <memmove+0x3c>
+ 40c930: 00000000 nop
+ 40c934: 90620000 lbu v0,0(v1)
+ 40c938: 24c6ffff addiu a2,a2,-1
+ 40c93c: a0e20000 sb v0,0(a3)
+ 40c940: 24630001 addiu v1,v1,1
+ 40c944: 14c0fffb bnez a2,40c934 <memmove+0x24>
+ 40c948: 24e70001 addiu a3,a3,1
+ 40c94c: 03e00008 jr ra
+ 40c950: 00801021 move v0,a0
+ 40c954: 10c0fffd beqz a2,40c94c <memmove+0x3c>
+ 40c958: 00000000 nop
+ 40c95c: 24c6ffff addiu a2,a2,-1
+ 40c960: 00a61021 addu v0,a1,a2
+ 40c964: 90430000 lbu v1,0(v0)
+ 40c968: 00861021 addu v0,a0,a2
+ 40c96c: 14c0fffb bnez a2,40c95c <memmove+0x4c>
+ 40c970: a0430000 sb v1,0(v0)
+ 40c974: 1000fff5 b 40c94c <memmove+0x3c>
+ 40c978: 00000000 nop
+ 40c97c: 00000000 nop
+
+0040c980 <mempcpy>:
+ 40c980: 3c1c0fc0 lui gp,0xfc0
+ 40c984: 279cb8d0 addiu gp,gp,-18224
+ 40c988: 0399e021 addu gp,gp,t9
+ 40c98c: 10c00007 beqz a2,40c9ac <mempcpy+0x2c>
+ 40c990: 00000000 nop
+ 40c994: 90a20000 lbu v0,0(a1)
+ 40c998: 24c6ffff addiu a2,a2,-1
+ 40c99c: a0820000 sb v0,0(a0)
+ 40c9a0: 24a50001 addiu a1,a1,1
+ 40c9a4: 14c0fffb bnez a2,40c994 <mempcpy+0x14>
+ 40c9a8: 24840001 addiu a0,a0,1
+ 40c9ac: 03e00008 jr ra
+ 40c9b0: 00801021 move v0,a0
+ ...
+
+0040c9c0 <strnlen>:
+ 40c9c0: 3c1c0fc0 lui gp,0xfc0
+ 40c9c4: 279cb890 addiu gp,gp,-18288
+ 40c9c8: 0399e021 addu gp,gp,t9
+ 40c9cc: 10a0000c beqz a1,40ca00 <strnlen+0x40>
+ 40c9d0: 00801821 move v1,a0
+ 40c9d4: 80820000 lb v0,0(a0)
+ 40c9d8: 00000000 nop
+ 40c9dc: 10400008 beqz v0,40ca00 <strnlen+0x40>
+ 40c9e0: 00000000 nop
+ 40c9e4: 24a5ffff addiu a1,a1,-1
+ 40c9e8: 10a00005 beqz a1,40ca00 <strnlen+0x40>
+ 40c9ec: 24630001 addiu v1,v1,1
+ 40c9f0: 80620000 lb v0,0(v1)
+ 40c9f4: 00000000 nop
+ 40c9f8: 1440fffa bnez v0,40c9e4 <strnlen+0x24>
+ 40c9fc: 00000000 nop
+ 40ca00: 03e00008 jr ra
+ 40ca04: 00641023 subu v0,v1,a0
+ ...
+
+0040ca10 <strpbrk>:
+ 40ca10: 3c1c0fc0 lui gp,0xfc0
+ 40ca14: 279cb840 addiu gp,gp,-18368
+ 40ca18: 0399e021 addu gp,gp,t9
+ 40ca1c: 00803821 move a3,a0
+ 40ca20: 80e20000 lb v0,0(a3)
+ 40ca24: 00000000 nop
+ 40ca28: 10400012 beqz v0,40ca74 <strpbrk+0x64>
+ 40ca2c: 00001021 move v0,zero
+ 40ca30: 10000007 b 40ca50 <strpbrk+0x40>
+ 40ca34: 00a03021 move a2,a1
+ 40ca38: 00031e00 sll v1,v1,0x18
+ 40ca3c: 80e40000 lb a0,0(a3)
+ 40ca40: 00031e03 sra v1,v1,0x18
+ 40ca44: 24c60001 addiu a2,a2,1
+ 40ca48: 1064000a beq v1,a0,40ca74 <strpbrk+0x64>
+ 40ca4c: 00e01021 move v0,a3
+ 40ca50: 80c20000 lb v0,0(a2)
+ 40ca54: 90c30000 lbu v1,0(a2)
+ 40ca58: 1440fff7 bnez v0,40ca38 <strpbrk+0x28>
+ 40ca5c: 00000000 nop
+ 40ca60: 24e70001 addiu a3,a3,1
+ 40ca64: 80e20000 lb v0,0(a3)
+ 40ca68: 00000000 nop
+ 40ca6c: 1440fff0 bnez v0,40ca30 <strpbrk+0x20>
+ 40ca70: 00001021 move v0,zero
+ 40ca74: 03e00008 jr ra
+ 40ca78: 00000000 nop
+ 40ca7c: 00000000 nop
+
+0040ca80 <strspn>:
+ 40ca80: 3c1c0fc0 lui gp,0xfc0
+ 40ca84: 279cb7d0 addiu gp,gp,-18480
+ 40ca88: 0399e021 addu gp,gp,t9
+ 40ca8c: 00a03021 move a2,a1
+ 40ca90: 80c20000 lb v0,0(a2)
+ 40ca94: 90c30000 lbu v1,0(a2)
+ 40ca98: 1040000a beqz v0,40cac4 <strspn+0x44>
+ 40ca9c: 00803821 move a3,a0
+ 40caa0: 00031600 sll v0,v1,0x18
+ 40caa4: 80e30000 lb v1,0(a3)
+ 40caa8: 00021603 sra v0,v0,0x18
+ 40caac: 10430007 beq v0,v1,40cacc <strspn+0x4c>
+ 40cab0: 24c60001 addiu a2,a2,1
+ 40cab4: 80c20000 lb v0,0(a2)
+ 40cab8: 90c30000 lbu v1,0(a2)
+ 40cabc: 1440fff8 bnez v0,40caa0 <strspn+0x20>
+ 40cac0: 00000000 nop
+ 40cac4: 03e00008 jr ra
+ 40cac8: 00e41023 subu v0,a3,a0
+ 40cacc: 24e70001 addiu a3,a3,1
+ 40cad0: 1000fff8 b 40cab4 <strspn+0x34>
+ 40cad4: 00a03021 move a2,a1
+ ...
+
+0040cae0 <_glibc_strerror_r>:
+ 40cae0: 3c1c0fc0 lui gp,0xfc0
+ 40cae4: 279cb770 addiu gp,gp,-18576
+ 40cae8: 0399e021 addu gp,gp,t9
+ 40caec: 27bdffd8 addiu sp,sp,-40
+ 40caf0: afbc0010 sw gp,16(sp)
+ 40caf4: afbf0020 sw ra,32(sp)
+ 40caf8: afb00018 sw s0,24(sp)
+ 40cafc: afbc001c sw gp,28(sp)
+ 40cb00: 00a08021 move s0,a1
+ 40cb04: 8f998124 lw t9,-32476(gp)
+ 40cb08: 00000000 nop
+ 40cb0c: 0320f809 jalr t9
+ 40cb10: 00000000 nop
+ 40cb14: 8fbc0010 lw gp,16(sp)
+ 40cb18: 8fbf0020 lw ra,32(sp)
+ 40cb1c: 02001021 move v0,s0
+ 40cb20: 8fb00018 lw s0,24(sp)
+ 40cb24: 03e00008 jr ra
+ 40cb28: 27bd0028 addiu sp,sp,40
+ 40cb2c: 00000000 nop
+
+0040cb30 <inet_aton>:
+ 40cb30: 3c1c0fc0 lui gp,0xfc0
+ 40cb34: 279cb720 addiu gp,gp,-18656
+ 40cb38: 0399e021 addu gp,gp,t9
+ 40cb3c: 27bdffc8 addiu sp,sp,-56
+ 40cb40: afbc0010 sw gp,16(sp)
+ 40cb44: afb40028 sw s4,40(sp)
+ 40cb48: 00a0a021 move s4,a1
+ 40cb4c: afb30024 sw s3,36(sp)
+ 40cb50: afb20020 sw s2,32(sp)
+ 40cb54: afb00018 sw s0,24(sp)
+ 40cb58: afbf0030 sw ra,48(sp)
+ 40cb5c: afbc002c sw gp,44(sp)
+ 40cb60: afb1001c sw s1,28(sp)
+ 40cb64: 00808021 move s0,a0
+ 40cb68: 00009021 move s2,zero
+ 40cb6c: 1280001b beqz s4,40cbdc <inet_aton+0xac>
+ 40cb70: 24130001 li s3,1
+ 40cb74: 82040000 lb a0,0(s0)
+ 40cb78: 8f9980cc lw t9,-32564(gp)
+ 40cb7c: 00000000 nop
+ 40cb80: 0320f809 jalr t9
+ 40cb84: 00000000 nop
+ 40cb88: 8fbc0010 lw gp,16(sp)
+ 40cb8c: 00401821 move v1,v0
+ 40cb90: 10600013 beqz v1,40cbe0 <inet_aton+0xb0>
+ 40cb94: 00008821 move s1,zero
+ 40cb98: 82040000 lb a0,0(s0)
+ 40cb9c: 8f9980cc lw t9,-32564(gp)
+ 40cba0: 00000000 nop
+ 40cba4: 0320f809 jalr t9
+ 40cba8: 00000000 nop
+ 40cbac: 8fbc0010 lw gp,16(sp)
+ 40cbb0: 00402021 move a0,v0
+ 40cbb4: 00111880 sll v1,s1,0x2
+ 40cbb8: 10800011 beqz a0,40cc00 <inet_aton+0xd0>
+ 40cbbc: 00711821 addu v1,v1,s1
+ 40cbc0: 82020000 lb v0,0(s0)
+ 40cbc4: 00038840 sll s1,v1,0x1
+ 40cbc8: 02221021 addu v0,s1,v0
+ 40cbcc: 2451ffd0 addiu s1,v0,-48
+ 40cbd0: 2a220100 slti v0,s1,256
+ 40cbd4: 1440fff0 bnez v0,40cb98 <inet_aton+0x68>
+ 40cbd8: 26100001 addiu s0,s0,1
+ 40cbdc: 00001021 move v0,zero
+ 40cbe0: 8fbf0030 lw ra,48(sp)
+ 40cbe4: 8fb40028 lw s4,40(sp)
+ 40cbe8: 8fb30024 lw s3,36(sp)
+ 40cbec: 8fb20020 lw s2,32(sp)
+ 40cbf0: 8fb1001c lw s1,28(sp)
+ 40cbf4: 8fb00018 lw s0,24(sp)
+ 40cbf8: 03e00008 jr ra
+ 40cbfc: 27bd0038 addiu sp,sp,56
+ 40cc00: 2a630004 slti v1,s3,4
+ 40cc04: 1060000f beqz v1,40cc44 <inet_aton+0x114>
+ 40cc08: 2404002e li a0,46
+ 40cc0c: 92030000 lbu v1,0(s0)
+ 40cc10: 00000000 nop
+ 40cc14: 00031e00 sll v1,v1,0x18
+ 40cc18: 00031e03 sra v1,v1,0x18
+ 40cc1c: 1464fff0 bne v1,a0,40cbe0 <inet_aton+0xb0>
+ 40cc20: 26100001 addiu s0,s0,1
+ 40cc24: 26730001 addiu s3,s3,1
+ 40cc28: 00129200 sll s2,s2,0x8
+ 40cc2c: 2a620005 slti v0,s3,5
+ 40cc30: 1440ffd0 bnez v0,40cb74 <inet_aton+0x44>
+ 40cc34: 02519025 or s2,s2,s1
+ 40cc38: ae920000 sw s2,0(s4)
+ 40cc3c: 1000ffe8 b 40cbe0 <inet_aton+0xb0>
+ 40cc40: 24020001 li v0,1
+ 40cc44: 82040000 lb a0,0(s0)
+ 40cc48: 00000000 nop
+ 40cc4c: 1080fff5 beqz a0,40cc24 <inet_aton+0xf4>
+ 40cc50: 26100001 addiu s0,s0,1
+ 40cc54: 8f998210 lw t9,-32240(gp)
+ 40cc58: 00000000 nop
+ 40cc5c: 0320f809 jalr t9
+ 40cc60: 00000000 nop
+ 40cc64: 8fbc0010 lw gp,16(sp)
+ 40cc68: 00401821 move v1,v0
+ 40cc6c: 1460ffee bnez v1,40cc28 <inet_aton+0xf8>
+ 40cc70: 26730001 addiu s3,s3,1
+ 40cc74: 1000ffda b 40cbe0 <inet_aton+0xb0>
+ 40cc78: 00000000 nop
+ 40cc7c: 00000000 nop
+
+0040cc80 <__decode_dotted>:
+ 40cc80: 3c1c0fc0 lui gp,0xfc0
+ 40cc84: 279cb5d0 addiu gp,gp,-18992
+ 40cc88: 0399e021 addu gp,gp,t9
+ 40cc8c: 27bdffb8 addiu sp,sp,-72
+ 40cc90: afbc0010 sw gp,16(sp)
+ 40cc94: afb5002c sw s5,44(sp)
+ 40cc98: 0080a821 move s5,a0
+ 40cc9c: afbe003c sw s8,60(sp)
+ 40cca0: afb70034 sw s7,52(sp)
+ 40cca4: afb60030 sw s6,48(sp)
+ 40cca8: afb40028 sw s4,40(sp)
+ 40ccac: afb1001c sw s1,28(sp)
+ 40ccb0: afbf0040 sw ra,64(sp)
+ 40ccb4: afbc0038 sw gp,56(sp)
+ 40ccb8: afb30024 sw s3,36(sp)
+ 40ccbc: afb20020 sw s2,32(sp)
+ 40ccc0: afb00018 sw s0,24(sp)
+ 40ccc4: 00a08821 move s1,a1
+ 40ccc8: 00c0b821 move s7,a2
+ 40cccc: 00e0f021 move s8,a3
+ 40ccd0: 24160001 li s6,1
+ 40ccd4: 0000a021 move s4,zero
+ 40ccd8: 12a00040 beqz s5,40cddc <__decode_dotted+0x15c>
+ 40ccdc: 00002021 move a0,zero
+ 40cce0: 10000020 b 40cd64 <__decode_dotted+0xe4>
+ 40cce4: 02b11021 addu v0,s5,s1
+ 40cce8: 12c00002 beqz s6,40ccf4 <__decode_dotted+0x74>
+ 40ccec: 320300c0 andi v1,s0,0xc0
+ 40ccf0: 26940001 addiu s4,s4,1
+ 40ccf4: 240200c0 li v0,192
+ 40ccf8: 1062002f beq v1,v0,40cdb8 <__decode_dotted+0x138>
+ 40ccfc: 00909821 addu s3,a0,s0
+ 40cd00: 26720001 addiu s2,s3,1
+ 40cd04: 025e102a slt v0,s2,s8
+ 40cd08: 1040001b beqz v0,40cd78 <__decode_dotted+0xf8>
+ 40cd0c: 2402ffff li v0,-1
+ 40cd10: 02e42021 addu a0,s7,a0
+ 40cd14: 02b12821 addu a1,s5,s1
+ 40cd18: 02003021 move a2,s0
+ 40cd1c: 8f998254 lw t9,-32172(gp)
+ 40cd20: 00000000 nop
+ 40cd24: 0320f809 jalr t9
+ 40cd28: 00000000 nop
+ 40cd2c: 8fbc0010 lw gp,16(sp)
+ 40cd30: 02308821 addu s1,s1,s0
+ 40cd34: 12c00002 beqz s6,40cd40 <__decode_dotted+0xc0>
+ 40cd38: 02602021 move a0,s3
+ 40cd3c: 0290a021 addu s4,s4,s0
+ 40cd40: 02b11021 addu v0,s5,s1
+ 40cd44: 90420000 lbu v0,0(v0)
+ 40cd48: 00000000 nop
+ 40cd4c: 10400016 beqz v0,40cda8 <__decode_dotted+0x128>
+ 40cd50: 02e41821 addu v1,s7,a0
+ 40cd54: 2402002e li v0,46
+ 40cd58: 02402021 move a0,s2
+ 40cd5c: a0620000 sb v0,0(v1)
+ 40cd60: 02b11021 addu v0,s5,s1
+ 40cd64: 90500000 lbu s0,0(v0)
+ 40cd68: 00000000 nop
+ 40cd6c: 1600ffde bnez s0,40cce8 <__decode_dotted+0x68>
+ 40cd70: 26310001 addiu s1,s1,1
+ 40cd74: 02801021 move v0,s4
+ 40cd78: 8fbf0040 lw ra,64(sp)
+ 40cd7c: 8fbe003c lw s8,60(sp)
+ 40cd80: 8fb70034 lw s7,52(sp)
+ 40cd84: 8fb60030 lw s6,48(sp)
+ 40cd88: 8fb5002c lw s5,44(sp)
+ 40cd8c: 8fb40028 lw s4,40(sp)
+ 40cd90: 8fb30024 lw s3,36(sp)
+ 40cd94: 8fb20020 lw s2,32(sp)
+ 40cd98: 8fb1001c lw s1,28(sp)
+ 40cd9c: 8fb00018 lw s0,24(sp)
+ 40cda0: 03e00008 jr ra
+ 40cda4: 27bd0048 addiu sp,sp,72
+ 40cda8: 02e41021 addu v0,s7,a0
+ 40cdac: a0400000 sb zero,0(v0)
+ 40cdb0: 1000ffeb b 40cd60 <__decode_dotted+0xe0>
+ 40cdb4: 02402021 move a0,s2
+ 40cdb8: 12c00002 beqz s6,40cdc4 <__decode_dotted+0x144>
+ 40cdbc: 02b11021 addu v0,s5,s1
+ 40cdc0: 26940001 addiu s4,s4,1
+ 40cdc4: 3203003f andi v1,s0,0x3f
+ 40cdc8: 90420000 lbu v0,0(v0)
+ 40cdcc: 00031a00 sll v1,v1,0x8
+ 40cdd0: 00628825 or s1,v1,v0
+ 40cdd4: 1000ffe2 b 40cd60 <__decode_dotted+0xe0>
+ 40cdd8: 0000b021 move s6,zero
+ 40cddc: 1000ffe6 b 40cd78 <__decode_dotted+0xf8>
+ 40cde0: 2402ffff li v0,-1
+ ...
+
+0040cdf0 <__dns_lookup>:
+ 40cdf0: 3c1c0fc0 lui gp,0xfc0
+ 40cdf4: 279cb460 addiu gp,gp,-19360
+ 40cdf8: 0399e021 addu gp,gp,t9
+ 40cdfc: 27bdfee0 addiu sp,sp,-288
+ 40ce00: afbc0018 sw gp,24(sp)
+ 40ce04: afa40120 sw a0,288(sp)
+ 40ce08: 24040200 li a0,512
+ 40ce0c: afbe0114 sw s8,276(sp)
+ 40ce10: afb60108 sw s6,264(sp)
+ 40ce14: afb50104 sw s5,260(sp)
+ 40ce18: afb40100 sw s4,256(sp)
+ 40ce1c: afb300fc sw s3,252(sp)
+ 40ce20: afbf0118 sw ra,280(sp)
+ 40ce24: afbc0110 sw gp,272(sp)
+ 40ce28: afb7010c sw s7,268(sp)
+ 40ce2c: afb200f8 sw s2,248(sp)
+ 40ce30: afb100f4 sw s1,244(sp)
+ 40ce34: afb000f0 sw s0,240(sp)
+ 40ce38: afa50124 sw a1,292(sp)
+ 40ce3c: 00c0b021 move s6,a2
+ 40ce40: afa7012c sw a3,300(sp)
+ 40ce44: 8f998230 lw t9,-32208(gp)
+ 40ce48: 00000000 nop
+ 40ce4c: 0320f809 jalr t9
+ 40ce50: 00000000 nop
+ 40ce54: 8fbc0018 lw gp,24(sp)
+ 40ce58: 24040401 li a0,1025
+ 40ce5c: 00409821 move s3,v0
+ 40ce60: 8f998230 lw t9,-32208(gp)
+ 40ce64: 00000000 nop
+ 40ce68: 0320f809 jalr t9
+ 40ce6c: 00000000 nop
+ 40ce70: 8fbc0018 lw gp,24(sp)
+ 40ce74: 0040a021 move s4,v0
+ 40ce78: 0000f021 move s8,zero
+ 40ce7c: 1260013a beqz s3,40d368 <__dns_lookup+0x578>
+ 40ce80: 2415ffff li s5,-1
+ 40ce84: 12800139 beqz s4,40d36c <__dns_lookup+0x57c>
+ 40ce88: 2402ffff li v0,-1
+ 40ce8c: 12c00137 beqz s6,40d36c <__dns_lookup+0x57c>
+ 40ce90: 00000000 nop
+ 40ce94: 8f90801c lw s0,-32740(gp)
+ 40ce98: 00000000 nop
+ 40ce9c: 26100200 addiu s0,s0,512
+ 40cea0: 00000000 nop
+ 40cea4: 02002021 move a0,s0
+ 40cea8: 8f9980a8 lw t9,-32600(gp)
+ 40ceac: 00000000 nop
+ 40ceb0: 0320f809 jalr t9
+ 40ceb4: 00000000 nop
+ 40ceb8: 8fbc0018 lw gp,24(sp)
+ 40cebc: 00000000 nop
+ 40cec0: 8f82801c lw v0,-32740(gp)
+ 40cec4: 00000000 nop
+ 40cec8: 24420218 addiu v0,v0,536
+ 40cecc: 8c420000 lw v0,0(v0)
+ 40ced0: 24030001 li v1,1
+ 40ced4: 0056001a div zero,v0,s6
+ 40ced8: 02002021 move a0,s0
+ 40cedc: 16c00002 bnez s6,40cee8 <__dns_lookup+0xf8>
+ 40cee0: 00000000 nop
+ 40cee4: 0007000d break 0x7
+ 40cee8: afa300e8 sw v1,232(sp)
+ 40ceec: 00001010 mfhi v0
+ 40cef0: 8f81801c lw at,-32740(gp)
+ 40cef4: 00000000 nop
+ 40cef8: 24210218 addiu at,at,536
+ 40cefc: ac220000 sw v0,0(at)
+ 40cf00: 8f99811c lw t9,-32484(gp)
+ 40cf04: 00000000 nop
+ 40cf08: 0320f809 jalr t9
+ 40cf0c: 00000000 nop
+ 40cf10: 8fbc0018 lw gp,24(sp)
+ 40cf14: 2402ffff li v0,-1
+ 40cf18: 12a20006 beq s5,v0,40cf34 <__dns_lookup+0x144>
+ 40cf1c: 02a02021 move a0,s5
+ 40cf20: 8f998040 lw t9,-32704(gp)
+ 40cf24: 00000000 nop
+ 40cf28: 0320f809 jalr t9
+ 40cf2c: 00000000 nop
+ 40cf30: 8fbc0018 lw gp,24(sp)
+ 40cf34: 02602021 move a0,s3
+ 40cf38: 00002821 move a1,zero
+ 40cf3c: 24060200 li a2,512
+ 40cf40: 8f99813c lw t9,-32452(gp)
+ 40cf44: 00000000 nop
+ 40cf48: 0320f809 jalr t9
+ 40cf4c: 00000000 nop
+ 40cf50: 8fbc0018 lw gp,24(sp)
+ 40cf54: 27b700a8 addiu s7,sp,168
+ 40cf58: 00002821 move a1,zero
+ 40cf5c: 24060030 li a2,48
+ 40cf60: 02e02021 move a0,s7
+ 40cf64: 8f90801c lw s0,-32740(gp)
+ 40cf68: 00000000 nop
+ 40cf6c: 26100200 addiu s0,s0,512
+ 40cf70: 8f99813c lw t9,-32452(gp)
+ 40cf74: 00000000 nop
+ 40cf78: 0320f809 jalr t9
+ 40cf7c: 00000000 nop
+ 40cf80: 8fbc0018 lw gp,24(sp)
+ 40cf84: 02002021 move a0,s0
+ 40cf88: 8f9980a8 lw t9,-32600(gp)
+ 40cf8c: 00000000 nop
+ 40cf90: 0320f809 jalr t9
+ 40cf94: 00000000 nop
+ 40cf98: 8fbc0018 lw gp,24(sp)
+ 40cf9c: 00000000 nop
+ 40cfa0: 8f83801c lw v1,-32740(gp)
+ 40cfa4: 00000000 nop
+ 40cfa8: 2463021c addiu v1,v1,540
+ 40cfac: 8c630000 lw v1,0(v1)
+ 40cfb0: 8f82801c lw v0,-32740(gp)
+ 40cfb4: 00000000 nop
+ 40cfb8: 24420218 addiu v0,v0,536
+ 40cfbc: 8c420000 lw v0,0(v0)
+ 40cfc0: 8fa4012c lw a0,300(sp)
+ 40cfc4: 24630001 addiu v1,v1,1
+ 40cfc8: 00021080 sll v0,v0,0x2
+ 40cfcc: 8f81801c lw at,-32740(gp)
+ 40cfd0: 00000000 nop
+ 40cfd4: 2421021c addiu at,at,540
+ 40cfd8: ac230000 sw v1,0(at)
+ 40cfdc: 00441021 addu v0,v0,a0
+ 40cfe0: afa300a8 sw v1,168(sp)
+ 40cfe4: 02002021 move a0,s0
+ 40cfe8: 8c520000 lw s2,0(v0)
+ 40cfec: 8f99811c lw t9,-32484(gp)
+ 40cff0: 00000000 nop
+ 40cff4: 0320f809 jalr t9
+ 40cff8: 00000000 nop
+ 40cffc: 8fbc0018 lw gp,24(sp)
+ 40d000: 24020001 li v0,1
+ 40d004: 02e02021 move a0,s7
+ 40d008: 02602821 move a1,s3
+ 40d00c: 24060200 li a2,512
+ 40d010: afa200bc sw v0,188(sp)
+ 40d014: afa200c8 sw v0,200(sp)
+ 40d018: 8f998290 lw t9,-32112(gp)
+ 40d01c: 00000000 nop
+ 40d020: 0320f809 jalr t9
+ 40d024: 00000000 nop
+ 40d028: 8fbc0018 lw gp,24(sp)
+ 40d02c: 00408821 move s1,v0
+ 40d030: 062000cd bltz s1,40d368 <__dns_lookup+0x578>
+ 40d034: 02802021 move a0,s4
+ 40d038: 8fa50120 lw a1,288(sp)
+ 40d03c: 24060401 li a2,1025
+ 40d040: 8f998188 lw t9,-32376(gp)
+ 40d044: 00000000 nop
+ 40d048: 0320f809 jalr t9
+ 40d04c: 00000000 nop
+ 40d050: 8fbc0018 lw gp,24(sp)
+ 40d054: 00000000 nop
+ 40d058: 8f8481c0 lw a0,-32320(gp)
+ 40d05c: 8f9980a8 lw t9,-32600(gp)
+ 40d060: 00000000 nop
+ 40d064: 0320f809 jalr t9
+ 40d068: 00000000 nop
+ 40d06c: 8fbc0018 lw gp,24(sp)
+ 40d070: 00000000 nop
+ 40d074: 8f8280c0 lw v0,-32576(gp)
+ 40d078: 00000000 nop
+ 40d07c: 8c420000 lw v0,0(v0)
+ 40d080: 00000000 nop
+ 40d084: 03c2102a slt v0,s8,v0
+ 40d088: 10400009 beqz v0,40d0b0 <__dns_lookup+0x2c0>
+ 40d08c: 02802021 move a0,s4
+ 40d090: 2405002e li a1,46
+ 40d094: 8f99805c lw t9,-32676(gp)
+ 40d098: 00000000 nop
+ 40d09c: 0320f809 jalr t9
+ 40d0a0: 00000000 nop
+ 40d0a4: 8fbc0018 lw gp,24(sp)
+ 40d0a8: 10400158 beqz v0,40d60c <__dns_lookup+0x81c>
+ 40d0ac: 02802021 move a0,s4
+ 40d0b0: 8f8481c0 lw a0,-32320(gp)
+ 40d0b4: 8f99811c lw t9,-32484(gp)
+ 40d0b8: 00000000 nop
+ 40d0bc: 0320f809 jalr t9
+ 40d0c0: 00000000 nop
+ 40d0c4: 8fbc0018 lw gp,24(sp)
+ 40d0c8: 24020001 li v0,1
+ 40d0cc: afa200e0 sw v0,224(sp)
+ 40d0d0: 24060200 li a2,512
+ 40d0d4: 8fa20124 lw v0,292(sp)
+ 40d0d8: 00d13023 subu a2,a2,s1
+ 40d0dc: 02712821 addu a1,s3,s1
+ 40d0e0: 27a400d8 addiu a0,sp,216
+ 40d0e4: afb400d8 sw s4,216(sp)
+ 40d0e8: afa200dc sw v0,220(sp)
+ 40d0ec: 8f998298 lw t9,-32104(gp)
+ 40d0f0: 00000000 nop
+ 40d0f4: 0320f809 jalr t9
+ 40d0f8: 00000000 nop
+ 40d0fc: 8fbc0018 lw gp,24(sp)
+ 40d100: 00408021 move s0,v0
+ 40d104: 06000098 bltz s0,40d368 <__dns_lookup+0x578>
+ 40d108: 02402021 move a0,s2
+ 40d10c: 8f99815c lw t9,-32420(gp)
+ 40d110: 00000000 nop
+ 40d114: 0320f809 jalr t9
+ 40d118: 00000000 nop
+ 40d11c: 8fbc0018 lw gp,24(sp)
+ 40d120: 0040a821 move s5,v0
+ 40d124: 06a00115 bltz s5,40d57c <__dns_lookup+0x78c>
+ 40d128: 02303021 addu a2,s1,s0
+ 40d12c: 02a02021 move a0,s5
+ 40d130: 02602821 move a1,s3
+ 40d134: 00003821 move a3,zero
+ 40d138: 8f9981e8 lw t9,-32280(gp)
+ 40d13c: 00000000 nop
+ 40d140: 0320f809 jalr t9
+ 40d144: 00000000 nop
+ 40d148: 8fbc0018 lw gp,24(sp)
+ 40d14c: 27a50028 addiu a1,sp,40
+ 40d150: 00002021 move a0,zero
+ 40d154: 00a01821 move v1,a1
+ 40d158: 24840001 addiu a0,a0,1
+ 40d15c: 2c820020 sltiu v0,a0,32
+ 40d160: ac600000 sw zero,0(v1)
+ 40d164: 1440fffc bnez v0,40d158 <__dns_lookup+0x368>
+ 40d168: 24630004 addiu v1,v1,4
+ 40d16c: 00151942 srl v1,s5,0x5
+ 40d170: 00031880 sll v1,v1,0x2
+ 40d174: 00a31821 addu v1,a1,v1
+ 40d178: 8c680000 lw t0,0(v1)
+ 40d17c: 32a4001f andi a0,s5,0x1f
+ 40d180: 24020001 li v0,1
+ 40d184: 00821004 sllv v0,v0,a0
+ 40d188: 01024025 or t0,t0,v0
+ 40d18c: 27a20020 addiu v0,sp,32
+ 40d190: ac680000 sw t0,0(v1)
+ 40d194: 26a40001 addiu a0,s5,1
+ 40d198: afa20010 sw v0,16(sp)
+ 40d19c: 00003021 move a2,zero
+ 40d1a0: 2402000a li v0,10
+ 40d1a4: 00003821 move a3,zero
+ 40d1a8: afa20020 sw v0,32(sp)
+ 40d1ac: afa00024 sw zero,36(sp)
+ 40d1b0: 8f998214 lw t9,-32236(gp)
+ 40d1b4: 00000000 nop
+ 40d1b8: 0320f809 jalr t9
+ 40d1bc: 00000000 nop
+ 40d1c0: 8fbc0018 lw gp,24(sp)
+ 40d1c4: 1840002d blez v0,40d27c <__dns_lookup+0x48c>
+ 40d1c8: 02a02021 move a0,s5
+ 40d1cc: 02602821 move a1,s3
+ 40d1d0: 24060200 li a2,512
+ 40d1d4: 00003821 move a3,zero
+ 40d1d8: 8f9982a0 lw t9,-32096(gp)
+ 40d1dc: 00000000 nop
+ 40d1e0: 0320f809 jalr t9
+ 40d1e4: 00000000 nop
+ 40d1e8: 8fbc0018 lw gp,24(sp)
+ 40d1ec: 00408821 move s1,v0
+ 40d1f0: 2a22000c slti v0,s1,12
+ 40d1f4: 14400021 bnez v0,40d27c <__dns_lookup+0x48c>
+ 40d1f8: 02e02821 move a1,s7
+ 40d1fc: 02602021 move a0,s3
+ 40d200: 8f998194 lw t9,-32364(gp)
+ 40d204: 00000000 nop
+ 40d208: 0320f809 jalr t9
+ 40d20c: 00000000 nop
+ 40d210: 8fbc0018 lw gp,24(sp)
+ 40d214: 00000000 nop
+ 40d218: 8f84801c lw a0,-32740(gp)
+ 40d21c: 00000000 nop
+ 40d220: 24840200 addiu a0,a0,512
+ 40d224: 8f9980a8 lw t9,-32600(gp)
+ 40d228: 00000000 nop
+ 40d22c: 0320f809 jalr t9
+ 40d230: 00000000 nop
+ 40d234: 8fbc0018 lw gp,24(sp)
+ 40d238: 8fa300a8 lw v1,168(sp)
+ 40d23c: 8f82801c lw v0,-32740(gp)
+ 40d240: 00000000 nop
+ 40d244: 2442021c addiu v0,v0,540
+ 40d248: 8c420000 lw v0,0(v0)
+ 40d24c: 00000000 nop
+ 40d250: 10620068 beq v1,v0,40d3f4 <__dns_lookup+0x604>
+ 40d254: 00000000 nop
+ 40d258: 8f84801c lw a0,-32740(gp)
+ 40d25c: 00000000 nop
+ 40d260: 24840200 addiu a0,a0,512
+ 40d264: 8f99811c lw t9,-32484(gp)
+ 40d268: 00000000 nop
+ 40d26c: 0320f809 jalr t9
+ 40d270: 00000000 nop
+ 40d274: 8fbc0018 lw gp,24(sp)
+ 40d278: 00000000 nop
+ 40d27c: 8f9181c0 lw s1,-32320(gp)
+ 40d280: 00000000 nop
+ 40d284: 02202021 move a0,s1
+ 40d288: 8f9980a8 lw t9,-32600(gp)
+ 40d28c: 00000000 nop
+ 40d290: 0320f809 jalr t9
+ 40d294: 00000000 nop
+ 40d298: 8fbc0018 lw gp,24(sp)
+ 40d29c: 00000000 nop
+ 40d2a0: 8f9080c0 lw s0,-32576(gp)
+ 40d2a4: 00000000 nop
+ 40d2a8: 8e100000 lw s0,0(s0)
+ 40d2ac: 02202021 move a0,s1
+ 40d2b0: 03d0802a slt s0,s8,s0
+ 40d2b4: 8f99811c lw t9,-32484(gp)
+ 40d2b8: 00000000 nop
+ 40d2bc: 0320f809 jalr t9
+ 40d2c0: 00000000 nop
+ 40d2c4: 8fbc0018 lw gp,24(sp)
+ 40d2c8: 16000021 bnez s0,40d350 <__dns_lookup+0x560>
+ 40d2cc: 27de0001 addiu s8,s8,1
+ 40d2d0: 8f90801c lw s0,-32740(gp)
+ 40d2d4: 00000000 nop
+ 40d2d8: 26100200 addiu s0,s0,512
+ 40d2dc: 00000000 nop
+ 40d2e0: 02002021 move a0,s0
+ 40d2e4: 8f9980a8 lw t9,-32600(gp)
+ 40d2e8: 00000000 nop
+ 40d2ec: 0320f809 jalr t9
+ 40d2f0: 00000000 nop
+ 40d2f4: 8fbc0018 lw gp,24(sp)
+ 40d2f8: 00000000 nop
+ 40d2fc: 8f82801c lw v0,-32740(gp)
+ 40d300: 00000000 nop
+ 40d304: 24420218 addiu v0,v0,536
+ 40d308: 8c420000 lw v0,0(v0)
+ 40d30c: 02002021 move a0,s0
+ 40d310: 24420001 addiu v0,v0,1
+ 40d314: 0056001a div zero,v0,s6
+ 40d318: 16c00002 bnez s6,40d324 <__dns_lookup+0x534>
+ 40d31c: 00000000 nop
+ 40d320: 0007000d break 0x7
+ 40d324: 0000f021 move s8,zero
+ 40d328: 00001010 mfhi v0
+ 40d32c: 8f81801c lw at,-32740(gp)
+ 40d330: 00000000 nop
+ 40d334: 24210218 addiu at,at,536
+ 40d338: ac220000 sw v0,0(at)
+ 40d33c: 8f99811c lw t9,-32484(gp)
+ 40d340: 00000000 nop
+ 40d344: 0320f809 jalr t9
+ 40d348: 00000000 nop
+ 40d34c: 8fbc0018 lw gp,24(sp)
+ 40d350: 8fa200e8 lw v0,232(sp)
+ 40d354: 8fa300e8 lw v1,232(sp)
+ 40d358: 2842000f slti v0,v0,15
+ 40d35c: 24630001 addiu v1,v1,1
+ 40d360: 1440feec bnez v0,40cf14 <__dns_lookup+0x124>
+ 40d364: afa300e8 sw v1,232(sp)
+ 40d368: 2402ffff li v0,-1
+ 40d36c: 12a20006 beq s5,v0,40d388 <__dns_lookup+0x598>
+ 40d370: 02a02021 move a0,s5
+ 40d374: 8f998040 lw t9,-32704(gp)
+ 40d378: 00000000 nop
+ 40d37c: 0320f809 jalr t9
+ 40d380: 00000000 nop
+ 40d384: 8fbc0018 lw gp,24(sp)
+ 40d388: 12800006 beqz s4,40d3a4 <__dns_lookup+0x5b4>
+ 40d38c: 02802021 move a0,s4
+ 40d390: 8f998030 lw t9,-32720(gp)
+ 40d394: 00000000 nop
+ 40d398: 0320f809 jalr t9
+ 40d39c: 00000000 nop
+ 40d3a0: 8fbc0018 lw gp,24(sp)
+ 40d3a4: 12600006 beqz s3,40d3c0 <__dns_lookup+0x5d0>
+ 40d3a8: 02602021 move a0,s3
+ 40d3ac: 8f998030 lw t9,-32720(gp)
+ 40d3b0: 00000000 nop
+ 40d3b4: 0320f809 jalr t9
+ 40d3b8: 00000000 nop
+ 40d3bc: 8fbc0018 lw gp,24(sp)
+ 40d3c0: 2402ffff li v0,-1
+ 40d3c4: 8fbf0118 lw ra,280(sp)
+ 40d3c8: 8fbe0114 lw s8,276(sp)
+ 40d3cc: 8fb7010c lw s7,268(sp)
+ 40d3d0: 8fb60108 lw s6,264(sp)
+ 40d3d4: 8fb50104 lw s5,260(sp)
+ 40d3d8: 8fb40100 lw s4,256(sp)
+ 40d3dc: 8fb300fc lw s3,252(sp)
+ 40d3e0: 8fb200f8 lw s2,248(sp)
+ 40d3e4: 8fb100f4 lw s1,244(sp)
+ 40d3e8: 8fb000f0 lw s0,240(sp)
+ 40d3ec: 03e00008 jr ra
+ 40d3f0: 27bd0120 addiu sp,sp,288
+ 40d3f4: 8fa200ac lw v0,172(sp)
+ 40d3f8: 00000000 nop
+ 40d3fc: 1040ff96 beqz v0,40d258 <__dns_lookup+0x468>
+ 40d400: 00000000 nop
+ 40d404: 8f84801c lw a0,-32740(gp)
+ 40d408: 00000000 nop
+ 40d40c: 24840200 addiu a0,a0,512
+ 40d410: 8f99811c lw t9,-32484(gp)
+ 40d414: 00000000 nop
+ 40d418: 0320f809 jalr t9
+ 40d41c: 00000000 nop
+ 40d420: 8fbc0018 lw gp,24(sp)
+ 40d424: 8fa200c4 lw v0,196(sp)
+ 40d428: 00000000 nop
+ 40d42c: 1440ff93 bnez v0,40d27c <__dns_lookup+0x48c>
+ 40d430: 00000000 nop
+ 40d434: 8fa200cc lw v0,204(sp)
+ 40d438: 00000000 nop
+ 40d43c: 1840ff8f blez v0,40d27c <__dns_lookup+0x48c>
+ 40d440: 00000000 nop
+ 40d444: 8fa200c8 lw v0,200(sp)
+ 40d448: 2412000c li s2,12
+ 40d44c: 18400011 blez v0,40d494 <__dns_lookup+0x6a4>
+ 40d450: 00008021 move s0,zero
+ 40d454: 02402821 move a1,s2
+ 40d458: 02602021 move a0,s3
+ 40d45c: 8f9982a8 lw t9,-32088(gp)
+ 40d460: 00000000 nop
+ 40d464: 0320f809 jalr t9
+ 40d468: 00000000 nop
+ 40d46c: 8fbc0018 lw gp,24(sp)
+ 40d470: 00408821 move s1,v0
+ 40d474: 26100001 addiu s0,s0,1
+ 40d478: 0620ff80 bltz s1,40d27c <__dns_lookup+0x48c>
+ 40d47c: 02519021 addu s2,s2,s1
+ 40d480: 8fa200c8 lw v0,200(sp)
+ 40d484: 00000000 nop
+ 40d488: 0202102a slt v0,s0,v0
+ 40d48c: 1440fff2 bnez v0,40d458 <__dns_lookup+0x668>
+ 40d490: 02402821 move a1,s2
+ 40d494: 00008021 move s0,zero
+ 40d498: 8fa200cc lw v0,204(sp)
+ 40d49c: 02402821 move a1,s2
+ 40d4a0: 0202102a slt v0,s0,v0
+ 40d4a4: 02602021 move a0,s3
+ 40d4a8: 8fa60134 lw a2,308(sp)
+ 40d4ac: 1440001b bnez v0,40d51c <__dns_lookup+0x72c>
+ 40d4b0: 26100001 addiu s0,s0,1
+ 40d4b4: 02a02021 move a0,s5
+ 40d4b8: 8f998040 lw t9,-32704(gp)
+ 40d4bc: 00000000 nop
+ 40d4c0: 0320f809 jalr t9
+ 40d4c4: 00000000 nop
+ 40d4c8: 8fbc0018 lw gp,24(sp)
+ 40d4cc: 8fa20130 lw v0,304(sp)
+ 40d4d0: 00000000 nop
+ 40d4d4: 1040000a beqz v0,40d500 <__dns_lookup+0x710>
+ 40d4d8: 02602021 move a0,s3
+ 40d4dc: ac530000 sw s3,0(v0)
+ 40d4e0: 02802021 move a0,s4
+ 40d4e4: 8f998030 lw t9,-32720(gp)
+ 40d4e8: 00000000 nop
+ 40d4ec: 0320f809 jalr t9
+ 40d4f0: 00000000 nop
+ 40d4f4: 8fbc0018 lw gp,24(sp)
+ 40d4f8: 1000ffb2 b 40d3c4 <__dns_lookup+0x5d4>
+ 40d4fc: 00001021 move v0,zero
+ 40d500: 8f998030 lw t9,-32720(gp)
+ 40d504: 00000000 nop
+ 40d508: 0320f809 jalr t9
+ 40d50c: 00000000 nop
+ 40d510: 8fbc0018 lw gp,24(sp)
+ 40d514: 1000fff3 b 40d4e4 <__dns_lookup+0x6f4>
+ 40d518: 02802021 move a0,s4
+ 40d51c: 8f9980ec lw t9,-32532(gp)
+ 40d520: 00000000 nop
+ 40d524: 0320f809 jalr t9
+ 40d528: 00000000 nop
+ 40d52c: 8fbc0018 lw gp,24(sp)
+ 40d530: 00408821 move s1,v0
+ 40d534: 0620ff51 bltz s1,40d27c <__dns_lookup+0x48c>
+ 40d538: 02519021 addu s2,s2,s1
+ 40d53c: 8fa40134 lw a0,308(sp)
+ 40d540: 24020018 li v0,24
+ 40d544: 8c830004 lw v1,4(a0)
+ 40d548: 00000000 nop
+ 40d54c: 1462ffda bne v1,v0,40d4b8 <__dns_lookup+0x6c8>
+ 40d550: 02a02021 move a0,s5
+ 40d554: 8fa30134 lw v1,308(sp)
+ 40d558: 00000000 nop
+ 40d55c: 8c640000 lw a0,0(v1)
+ 40d560: 8f998030 lw t9,-32720(gp)
+ 40d564: 00000000 nop
+ 40d568: 0320f809 jalr t9
+ 40d56c: 00000000 nop
+ 40d570: 8fbc0018 lw gp,24(sp)
+ 40d574: 1000ffc8 b 40d498 <__dns_lookup+0x6a8>
+ 40d578: 00000000 nop
+ 40d57c: 8f9980a0 lw t9,-32608(gp)
+ 40d580: 00000000 nop
+ 40d584: 0320f809 jalr t9
+ 40d588: 00000000 nop
+ 40d58c: 8fbc0018 lw gp,24(sp)
+ 40d590: 8c430000 lw v1,0(v0)
+ 40d594: 24020080 li v0,128
+ 40d598: 1462ff6d bne v1,v0,40d350 <__dns_lookup+0x560>
+ 40d59c: 00000000 nop
+ 40d5a0: 8f9181c0 lw s1,-32320(gp)
+ 40d5a4: 00000000 nop
+ 40d5a8: 02202021 move a0,s1
+ 40d5ac: 8f9980a8 lw t9,-32600(gp)
+ 40d5b0: 00000000 nop
+ 40d5b4: 0320f809 jalr t9
+ 40d5b8: 00000000 nop
+ 40d5bc: 8fbc0018 lw gp,24(sp)
+ 40d5c0: 00000000 nop
+ 40d5c4: 8f9080c0 lw s0,-32576(gp)
+ 40d5c8: 00000000 nop
+ 40d5cc: 8e100000 lw s0,0(s0)
+ 40d5d0: 02202021 move a0,s1
+ 40d5d4: 26100001 addiu s0,s0,1
+ 40d5d8: 8f99811c lw t9,-32484(gp)
+ 40d5dc: 00000000 nop
+ 40d5e0: 0320f809 jalr t9
+ 40d5e4: 00000000 nop
+ 40d5e8: 8fbc0018 lw gp,24(sp)
+ 40d5ec: 02d00018 mult s6,s0
+ 40d5f0: 8fa200e8 lw v0,232(sp)
+ 40d5f4: 00008012 mflo s0
+ 40d5f8: 0050802a slt s0,v0,s0
+ 40d5fc: 1200ff5a beqz s0,40d368 <__dns_lookup+0x578>
+ 40d600: 0000f021 move s8,zero
+ 40d604: 1000ff20 b 40d288 <__dns_lookup+0x498>
+ 40d608: 02202021 move a0,s1
+ 40d60c: 8f858018 lw a1,-32744(gp)
+ 40d610: 00000000 nop
+ 40d614: 24a512a0 addiu a1,a1,4768
+ 40d618: 24060401 li a2,1025
+ 40d61c: 8f99816c lw t9,-32404(gp)
+ 40d620: 00000000 nop
+ 40d624: 0320f809 jalr t9
+ 40d628: 00000000 nop
+ 40d62c: 8fbc0018 lw gp,24(sp)
+ 40d630: 001e1080 sll v0,s8,0x2
+ 40d634: 8f8581fc lw a1,-32260(gp)
+ 40d638: 00000000 nop
+ 40d63c: 00a22821 addu a1,a1,v0
+ 40d640: 8ca50000 lw a1,0(a1)
+ 40d644: 02802021 move a0,s4
+ 40d648: 24060401 li a2,1025
+ 40d64c: 8f99816c lw t9,-32404(gp)
+ 40d650: 00000000 nop
+ 40d654: 0320f809 jalr t9
+ 40d658: 00000000 nop
+ 40d65c: 8fbc0018 lw gp,24(sp)
+ 40d660: 1000fe93 b 40d0b0 <__dns_lookup+0x2c0>
+ 40d664: 00000000 nop
+ ...
+
+0040d670 <__open_nameservers>:
+ 40d670: 3c1c0fc0 lui gp,0xfc0
+ 40d674: 279cabe0 addiu gp,gp,-21536
+ 40d678: 0399e021 addu gp,gp,t9
+ 40d67c: 27bdff38 addiu sp,sp,-200
+ 40d680: afbc0010 sw gp,16(sp)
+ 40d684: afb000b0 sw s0,176(sp)
+ 40d688: 8f9081c0 lw s0,-32320(gp)
+ 40d68c: 00000000 nop
+ 40d690: 02002021 move a0,s0
+ 40d694: afbf00c4 sw ra,196(sp)
+ 40d698: afbc00c0 sw gp,192(sp)
+ 40d69c: afb300bc sw s3,188(sp)
+ 40d6a0: afb200b8 sw s2,184(sp)
+ 40d6a4: afb100b4 sw s1,180(sp)
+ 40d6a8: 8f9980a8 lw t9,-32600(gp)
+ 40d6ac: 00000000 nop
+ 40d6b0: 0320f809 jalr t9
+ 40d6b4: 00000000 nop
+ 40d6b8: 8fbc0010 lw gp,16(sp)
+ 40d6bc: 00000000 nop
+ 40d6c0: 8f8280d4 lw v0,-32556(gp)
+ 40d6c4: 00000000 nop
+ 40d6c8: 8c420000 lw v0,0(v0)
+ 40d6cc: 00000000 nop
+ 40d6d0: 1840000f blez v0,40d710 <__open_nameservers+0xa0>
+ 40d6d4: 00000000 nop
+ 40d6d8: 8f8481c0 lw a0,-32320(gp)
+ 40d6dc: 8f99811c lw t9,-32484(gp)
+ 40d6e0: 00000000 nop
+ 40d6e4: 0320f809 jalr t9
+ 40d6e8: 00000000 nop
+ 40d6ec: 8fbc0010 lw gp,16(sp)
+ 40d6f0: 00001021 move v0,zero
+ 40d6f4: 8fbf00c4 lw ra,196(sp)
+ 40d6f8: 8fb300bc lw s3,188(sp)
+ 40d6fc: 8fb200b8 lw s2,184(sp)
+ 40d700: 8fb100b4 lw s1,180(sp)
+ 40d704: 8fb000b0 lw s0,176(sp)
+ 40d708: 03e00008 jr ra
+ 40d70c: 27bd00c8 addiu sp,sp,200
+ 40d710: 8f908018 lw s0,-32744(gp)
+ 40d714: 00000000 nop
+ 40d718: 261012b0 addiu s0,s0,4784
+ 40d71c: 8f848018 lw a0,-32744(gp)
+ 40d720: 00000000 nop
+ 40d724: 248412b4 addiu a0,a0,4788
+ 40d728: 02002821 move a1,s0
+ 40d72c: 8f998140 lw t9,-32448(gp)
+ 40d730: 00000000 nop
+ 40d734: 0320f809 jalr t9
+ 40d738: 00000000 nop
+ 40d73c: 8fbc0010 lw gp,16(sp)
+ 40d740: 00409821 move s3,v0
+ 40d744: 126000eb beqz s3,40daf4 <__open_nameservers+0x484>
+ 40d748: 02002821 move a1,s0
+ 40d74c: 27a40018 addiu a0,sp,24
+ 40d750: 24050080 li a1,128
+ 40d754: 02603021 move a2,s3
+ 40d758: 8f998268 lw t9,-32152(gp)
+ 40d75c: 00000000 nop
+ 40d760: 0320f809 jalr t9
+ 40d764: 00000000 nop
+ 40d768: 8fbc0010 lw gp,16(sp)
+ 40d76c: 104000d9 beqz v0,40dad4 <__open_nameservers+0x464>
+ 40d770: 27b00018 addiu s0,sp,24
+ 40d774: 82020000 lb v0,0(s0)
+ 40d778: 00000000 nop
+ 40d77c: 1040fff3 beqz v0,40d74c <__open_nameservers+0xdc>
+ 40d780: 00402021 move a0,v0
+ 40d784: 8f998210 lw t9,-32240(gp)
+ 40d788: 00000000 nop
+ 40d78c: 0320f809 jalr t9
+ 40d790: 00000000 nop
+ 40d794: 8fbc0010 lw gp,16(sp)
+ 40d798: 10400003 beqz v0,40d7a8 <__open_nameservers+0x138>
+ 40d79c: 00000000 nop
+ 40d7a0: 1000fff4 b 40d774 <__open_nameservers+0x104>
+ 40d7a4: 26100001 addiu s0,s0,1
+ 40d7a8: 82030000 lb v1,0(s0)
+ 40d7ac: 00000000 nop
+ 40d7b0: 1060ffe7 beqz v1,40d750 <__open_nameservers+0xe0>
+ 40d7b4: 27a40018 addiu a0,sp,24
+ 40d7b8: 2402000a li v0,10
+ 40d7bc: 1062ffe5 beq v1,v0,40d754 <__open_nameservers+0xe4>
+ 40d7c0: 24050080 li a1,128
+ 40d7c4: 24020023 li v0,35
+ 40d7c8: 1062ffe3 beq v1,v0,40d758 <__open_nameservers+0xe8>
+ 40d7cc: 02603021 move a2,s3
+ 40d7d0: 10600026 beqz v1,40d86c <__open_nameservers+0x1fc>
+ 40d7d4: 00009021 move s2,zero
+ 40d7d8: 00121080 sll v0,s2,0x2
+ 40d7dc: 03a21021 addu v0,sp,v0
+ 40d7e0: 26520001 addiu s2,s2,1
+ 40d7e4: ac500098 sw s0,152(v0)
+ 40d7e8: 82020000 lb v0,0(s0)
+ 40d7ec: 00000000 nop
+ 40d7f0: 1040000a beqz v0,40d81c <__open_nameservers+0x1ac>
+ 40d7f4: 00402021 move a0,v0
+ 40d7f8: 8f998210 lw t9,-32240(gp)
+ 40d7fc: 00000000 nop
+ 40d800: 0320f809 jalr t9
+ 40d804: 00000000 nop
+ 40d808: 8fbc0010 lw gp,16(sp)
+ 40d80c: 104000ab beqz v0,40dabc <__open_nameservers+0x44c>
+ 40d810: 2402000a li v0,10
+ 40d814: 82020000 lb v0,0(s0)
+ 40d818: 00000000 nop
+ 40d81c: 10400013 beqz v0,40d86c <__open_nameservers+0x1fc>
+ 40d820: 00402021 move a0,v0
+ 40d824: 8f998210 lw t9,-32240(gp)
+ 40d828: 00000000 nop
+ 40d82c: 0320f809 jalr t9
+ 40d830: 00000000 nop
+ 40d834: 8fbc0010 lw gp,16(sp)
+ 40d838: 10400004 beqz v0,40d84c <__open_nameservers+0x1dc>
+ 40d83c: 2402000a li v0,10
+ 40d840: a2000000 sb zero,0(s0)
+ 40d844: 1000fff3 b 40d814 <__open_nameservers+0x1a4>
+ 40d848: 26100001 addiu s0,s0,1
+ 40d84c: 82030000 lb v1,0(s0)
+ 40d850: 00000000 nop
+ 40d854: 1062fffa beq v1,v0,40d840 <__open_nameservers+0x1d0>
+ 40d858: 00000000 nop
+ 40d85c: 10600003 beqz v1,40d86c <__open_nameservers+0x1fc>
+ 40d860: 2a420005 slti v0,s2,5
+ 40d864: 1440ffdd bnez v0,40d7dc <__open_nameservers+0x16c>
+ 40d868: 00121080 sll v0,s2,0x2
+ 40d86c: 8fa40098 lw a0,152(sp)
+ 40d870: 8f858018 lw a1,-32744(gp)
+ 40d874: 00000000 nop
+ 40d878: 24a512c8 addiu a1,a1,4808
+ 40d87c: 8f998120 lw t9,-32480(gp)
+ 40d880: 00000000 nop
+ 40d884: 0320f809 jalr t9
+ 40d888: 00000000 nop
+ 40d88c: 8fbc0010 lw gp,16(sp)
+ 40d890: 10400062 beqz v0,40da1c <__open_nameservers+0x3ac>
+ 40d894: 24110001 li s1,1
+ 40d898: 8fa40098 lw a0,152(sp)
+ 40d89c: 8f858018 lw a1,-32744(gp)
+ 40d8a0: 00000000 nop
+ 40d8a4: 24a512d4 addiu a1,a1,4820
+ 40d8a8: 8f998120 lw t9,-32480(gp)
+ 40d8ac: 00000000 nop
+ 40d8b0: 0320f809 jalr t9
+ 40d8b4: 00000000 nop
+ 40d8b8: 8fbc0010 lw gp,16(sp)
+ 40d8bc: 1440004a bnez v0,40d9e8 <__open_nameservers+0x378>
+ 40d8c0: 00000000 nop
+ 40d8c4: 8f8380c0 lw v1,-32576(gp)
+ 40d8c8: 00000000 nop
+ 40d8cc: 8c630000 lw v1,0(v1)
+ 40d8d0: 00000000 nop
+ 40d8d4: 1860001c blez v1,40d948 <__open_nameservers+0x2d8>
+ 40d8d8: 24110001 li s1,1
+ 40d8dc: 2463ffff addiu v1,v1,-1
+ 40d8e0: 00031080 sll v0,v1,0x2
+ 40d8e4: 8f8481fc lw a0,-32260(gp)
+ 40d8e8: 00000000 nop
+ 40d8ec: 00822021 addu a0,a0,v0
+ 40d8f0: 8c840000 lw a0,0(a0)
+ 40d8f4: 8f8180c0 lw at,-32576(gp)
+ 40d8f8: 00000000 nop
+ 40d8fc: ac230000 sw v1,0(at)
+ 40d900: 8f998030 lw t9,-32720(gp)
+ 40d904: 00000000 nop
+ 40d908: 0320f809 jalr t9
+ 40d90c: 00000000 nop
+ 40d910: 8fbc0010 lw gp,16(sp)
+ 40d914: 00000000 nop
+ 40d918: 8f8280c0 lw v0,-32576(gp)
+ 40d91c: 00000000 nop
+ 40d920: 8c420000 lw v0,0(v0)
+ 40d924: 00000000 nop
+ 40d928: 00021880 sll v1,v0,0x2
+ 40d92c: 8f8181fc lw at,-32260(gp)
+ 40d930: 00000000 nop
+ 40d934: 00230821 addu at,at,v1
+ 40d938: ac200000 sw zero,0(at)
+ 40d93c: 1c40ffe7 bgtz v0,40d8dc <__open_nameservers+0x26c>
+ 40d940: 00401821 move v1,v0
+ 40d944: 24110001 li s1,1
+ 40d948: 0232102a slt v0,s1,s2
+ 40d94c: 1040ff80 beqz v0,40d750 <__open_nameservers+0xe0>
+ 40d950: 27a40018 addiu a0,sp,24
+ 40d954: 8f8280c0 lw v0,-32576(gp)
+ 40d958: 00000000 nop
+ 40d95c: 8c420000 lw v0,0(v0)
+ 40d960: 00000000 nop
+ 40d964: 28420004 slti v0,v0,4
+ 40d968: 1040ff7a beqz v0,40d754 <__open_nameservers+0xe4>
+ 40d96c: 24050080 li a1,128
+ 40d970: 8f8580c0 lw a1,-32576(gp)
+ 40d974: 00111080 sll v0,s1,0x2
+ 40d978: 03a21821 addu v1,sp,v0
+ 40d97c: 8ca20000 lw v0,0(a1)
+ 40d980: 8c640098 lw a0,152(v1)
+ 40d984: 00028080 sll s0,v0,0x2
+ 40d988: 24420001 addiu v0,v0,1
+ 40d98c: 26310001 addiu s1,s1,1
+ 40d990: aca20000 sw v0,0(a1)
+ 40d994: 8f99814c lw t9,-32436(gp)
+ 40d998: 00000000 nop
+ 40d99c: 0320f809 jalr t9
+ 40d9a0: 00000000 nop
+ 40d9a4: 8fbc0010 lw gp,16(sp)
+ 40d9a8: 00000000 nop
+ 40d9ac: 8f8181fc lw at,-32260(gp)
+ 40d9b0: 00000000 nop
+ 40d9b4: 00308021 addu s0,at,s0
+ 40d9b8: 0232182a slt v1,s1,s2
+ 40d9bc: 1060ff63 beqz v1,40d74c <__open_nameservers+0xdc>
+ 40d9c0: ae020000 sw v0,0(s0)
+ 40d9c4: 8f8280c0 lw v0,-32576(gp)
+ 40d9c8: 00000000 nop
+ 40d9cc: 8c420000 lw v0,0(v0)
+ 40d9d0: 00000000 nop
+ 40d9d4: 28420004 slti v0,v0,4
+ 40d9d8: 1440ffe5 bnez v0,40d970 <__open_nameservers+0x300>
+ 40d9dc: 27a40018 addiu a0,sp,24
+ 40d9e0: 1000ff5c b 40d754 <__open_nameservers+0xe4>
+ 40d9e4: 24050080 li a1,128
+ 40d9e8: 8fa40098 lw a0,152(sp)
+ 40d9ec: 8f858018 lw a1,-32744(gp)
+ 40d9f0: 00000000 nop
+ 40d9f4: 24a512dc addiu a1,a1,4828
+ 40d9f8: 8f998120 lw t9,-32480(gp)
+ 40d9fc: 00000000 nop
+ 40da00: 0320f809 jalr t9
+ 40da04: 00000000 nop
+ 40da08: 8fbc0010 lw gp,16(sp)
+ 40da0c: 1440ff50 bnez v0,40d750 <__open_nameservers+0xe0>
+ 40da10: 27a40018 addiu a0,sp,24
+ 40da14: 1000ffab b 40d8c4 <__open_nameservers+0x254>
+ 40da18: 00000000 nop
+ 40da1c: 0232102a slt v0,s1,s2
+ 40da20: 1040ff9d beqz v0,40d898 <__open_nameservers+0x228>
+ 40da24: 00000000 nop
+ 40da28: 8f8280d4 lw v0,-32556(gp)
+ 40da2c: 00000000 nop
+ 40da30: 8c420000 lw v0,0(v0)
+ 40da34: 00000000 nop
+ 40da38: 28420003 slti v0,v0,3
+ 40da3c: 1040ff96 beqz v0,40d898 <__open_nameservers+0x228>
+ 40da40: 00000000 nop
+ 40da44: 8f8580d4 lw a1,-32556(gp)
+ 40da48: 00111080 sll v0,s1,0x2
+ 40da4c: 03a21821 addu v1,sp,v0
+ 40da50: 8ca20000 lw v0,0(a1)
+ 40da54: 8c640098 lw a0,152(v1)
+ 40da58: 00028080 sll s0,v0,0x2
+ 40da5c: 24420001 addiu v0,v0,1
+ 40da60: 26310001 addiu s1,s1,1
+ 40da64: aca20000 sw v0,0(a1)
+ 40da68: 8f99814c lw t9,-32436(gp)
+ 40da6c: 00000000 nop
+ 40da70: 0320f809 jalr t9
+ 40da74: 00000000 nop
+ 40da78: 8fbc0010 lw gp,16(sp)
+ 40da7c: 00000000 nop
+ 40da80: 8f818114 lw at,-32492(gp)
+ 40da84: 00000000 nop
+ 40da88: 00308021 addu s0,at,s0
+ 40da8c: 0232182a slt v1,s1,s2
+ 40da90: 1060ff81 beqz v1,40d898 <__open_nameservers+0x228>
+ 40da94: ae020000 sw v0,0(s0)
+ 40da98: 8f8280d4 lw v0,-32556(gp)
+ 40da9c: 00000000 nop
+ 40daa0: 8c420000 lw v0,0(v0)
+ 40daa4: 00000000 nop
+ 40daa8: 28420003 slti v0,v0,3
+ 40daac: 1440ffe5 bnez v0,40da44 <__open_nameservers+0x3d4>
+ 40dab0: 00000000 nop
+ 40dab4: 1000ff78 b 40d898 <__open_nameservers+0x228>
+ 40dab8: 00000000 nop
+ 40dabc: 82030000 lb v1,0(s0)
+ 40dac0: 00000000 nop
+ 40dac4: 1062ff53 beq v1,v0,40d814 <__open_nameservers+0x1a4>
+ 40dac8: 00000000 nop
+ 40dacc: 1000ff46 b 40d7e8 <__open_nameservers+0x178>
+ 40dad0: 26100001 addiu s0,s0,1
+ 40dad4: 02602021 move a0,s3
+ 40dad8: 8f998134 lw t9,-32460(gp)
+ 40dadc: 00000000 nop
+ 40dae0: 0320f809 jalr t9
+ 40dae4: 00000000 nop
+ 40dae8: 8fbc0010 lw gp,16(sp)
+ 40daec: 1000fefa b 40d6d8 <__open_nameservers+0x68>
+ 40daf0: 00000000 nop
+ 40daf4: 8f848018 lw a0,-32744(gp)
+ 40daf8: 00000000 nop
+ 40dafc: 248412e4 addiu a0,a0,4836
+ 40db00: 8f998140 lw t9,-32448(gp)
+ 40db04: 00000000 nop
+ 40db08: 0320f809 jalr t9
+ 40db0c: 00000000 nop
+ 40db10: 8fbc0010 lw gp,16(sp)
+ 40db14: 00409821 move s3,v0
+ 40db18: 1260feef beqz s3,40d6d8 <__open_nameservers+0x68>
+ 40db1c: 27a40018 addiu a0,sp,24
+ 40db20: 1000ff0c b 40d754 <__open_nameservers+0xe4>
+ 40db24: 24050080 li a1,128
+ ...
+
+0040db30 <__get_hosts_byname_r>:
+ 40db30: 3c1c0fc0 lui gp,0xfc0
+ 40db34: 279ca720 addiu gp,gp,-22752
+ 40db38: 0399e021 addu gp,gp,t9
+ 40db3c: 27bdffc8 addiu sp,sp,-56
+ 40db40: afbc0028 sw gp,40(sp)
+ 40db44: 00a01021 move v0,a1
+ 40db48: 00c01821 move v1,a2
+ 40db4c: 00403021 move a2,v0
+ 40db50: 8fa20048 lw v0,72(sp)
+ 40db54: 00e04021 move t0,a3
+ 40db58: afa20018 sw v0,24(sp)
+ 40db5c: 8fa2004c lw v0,76(sp)
+ 40db60: 00802821 move a1,a0
+ 40db64: afa2001c sw v0,28(sp)
+ 40db68: 8fa20050 lw v0,80(sp)
+ 40db6c: 00002021 move a0,zero
+ 40db70: 00003821 move a3,zero
+ 40db74: afbf0034 sw ra,52(sp)
+ 40db78: afbc0030 sw gp,48(sp)
+ 40db7c: afa30010 sw v1,16(sp)
+ 40db80: afa80014 sw t0,20(sp)
+ 40db84: afa20020 sw v0,32(sp)
+ 40db88: 8f9982cc lw t9,-32052(gp)
+ 40db8c: 00000000 nop
+ 40db90: 0320f809 jalr t9
+ 40db94: 00000000 nop
+ 40db98: 8fbc0028 lw gp,40(sp)
+ 40db9c: 8fbf0034 lw ra,52(sp)
+ 40dba0: 00000000 nop
+ 40dba4: 03e00008 jr ra
+ 40dba8: 27bd0038 addiu sp,sp,56
+ 40dbac: 00000000 nop
+
+0040dbb0 <__connect_dns>:
+ 40dbb0: 3c1c0fc0 lui gp,0xfc0
+ 40dbb4: 279ca6a0 addiu gp,gp,-22880
+ 40dbb8: 0399e021 addu gp,gp,t9
+ 40dbbc: 27bdffc8 addiu sp,sp,-56
+ 40dbc0: afbc0010 sw gp,16(sp)
+ 40dbc4: afb00028 sw s0,40(sp)
+ 40dbc8: 24050001 li a1,1
+ 40dbcc: 00808021 move s0,a0
+ 40dbd0: 24060011 li a2,17
+ 40dbd4: 24040002 li a0,2
+ 40dbd8: afb1002c sw s1,44(sp)
+ 40dbdc: afbf0034 sw ra,52(sp)
+ 40dbe0: afbc0030 sw gp,48(sp)
+ 40dbe4: 8f998218 lw t9,-32232(gp)
+ 40dbe8: 00000000 nop
+ 40dbec: 0320f809 jalr t9
+ 40dbf0: 00000000 nop
+ 40dbf4: 8fbc0010 lw gp,16(sp)
+ 40dbf8: 00408821 move s1,v0
+ 40dbfc: 2403ffff li v1,-1
+ 40dc00: 1223001b beq s1,v1,40dc70 <__connect_dns+0xc0>
+ 40dc04: 02002021 move a0,s0
+ 40dc08: 24020002 li v0,2
+ 40dc0c: a7a20018 sh v0,24(sp)
+ 40dc10: 24020035 li v0,53
+ 40dc14: a7a2001a sh v0,26(sp)
+ 40dc18: 8f9981b4 lw t9,-32332(gp)
+ 40dc1c: 00000000 nop
+ 40dc20: 0320f809 jalr t9
+ 40dc24: 00000000 nop
+ 40dc28: 8fbc0010 lw gp,16(sp)
+ 40dc2c: 27a50018 addiu a1,sp,24
+ 40dc30: 02202021 move a0,s1
+ 40dc34: 24060010 li a2,16
+ 40dc38: afa2001c sw v0,28(sp)
+ 40dc3c: 8f99829c lw t9,-32100(gp)
+ 40dc40: 00000000 nop
+ 40dc44: 0320f809 jalr t9
+ 40dc48: 00000000 nop
+ 40dc4c: 8fbc0010 lw gp,16(sp)
+ 40dc50: 1040000c beqz v0,40dc84 <__connect_dns+0xd4>
+ 40dc54: 02202021 move a0,s1
+ 40dc58: 8f998040 lw t9,-32704(gp)
+ 40dc5c: 00000000 nop
+ 40dc60: 0320f809 jalr t9
+ 40dc64: 00000000 nop
+ 40dc68: 8fbc0010 lw gp,16(sp)
+ 40dc6c: 2402ffff li v0,-1
+ 40dc70: 8fbf0034 lw ra,52(sp)
+ 40dc74: 8fb1002c lw s1,44(sp)
+ 40dc78: 8fb00028 lw s0,40(sp)
+ 40dc7c: 03e00008 jr ra
+ 40dc80: 27bd0038 addiu sp,sp,56
+ 40dc84: 1000fffa b 40dc70 <__connect_dns+0xc0>
+ 40dc88: 02201021 move v0,s1
+ 40dc8c: 00000000 nop
+
+0040dc90 <__libc_connect>:
+ 40dc90: 3c1c0fc0 lui gp,0xfc0
+ 40dc94: 279ca5c0 addiu gp,gp,-23104
+ 40dc98: 0399e021 addu gp,gp,t9
+ 40dc9c: 27bdffd8 addiu sp,sp,-40
+ 40dca0: afbc0010 sw gp,16(sp)
+ 40dca4: afb1001c sw s1,28(sp)
+ 40dca8: afb00018 sw s0,24(sp)
+ 40dcac: afbf0024 sw ra,36(sp)
+ 40dcb0: afbc0020 sw gp,32(sp)
+ 40dcb4: 00808821 move s1,a0
+ 40dcb8: 00a08021 move s0,a1
+ 40dcbc: 00c01821 move v1,a2
+ 40dcc0: 02202021 move a0,s1
+ 40dcc4: 02002821 move a1,s0
+ 40dcc8: 00603021 move a2,v1
+ 40dccc: 2402104a li v0,4170
+ 40dcd0: 0000000c syscall
+ 40dcd4: 00408021 move s0,v0
+ 40dcd8: 00e01821 move v1,a3
+ 40dcdc: 10600009 beqz v1,40dd04 <__libc_connect+0x74>
+ 40dce0: 02001021 move v0,s0
+ 40dce4: 8f9980a0 lw t9,-32608(gp)
+ 40dce8: 00000000 nop
+ 40dcec: 0320f809 jalr t9
+ 40dcf0: 00000000 nop
+ 40dcf4: 8fbc0010 lw gp,16(sp)
+ 40dcf8: 00401821 move v1,v0
+ 40dcfc: ac700000 sw s0,0(v1)
+ 40dd00: 2402ffff li v0,-1
+ 40dd04: 8fbf0024 lw ra,36(sp)
+ 40dd08: 8fb1001c lw s1,28(sp)
+ 40dd0c: 8fb00018 lw s0,24(sp)
+ 40dd10: 03e00008 jr ra
+ 40dd14: 27bd0028 addiu sp,sp,40
+ ...
+
+0040dd20 <__libc_recv>:
+ 40dd20: 3c1c0fc0 lui gp,0xfc0
+ 40dd24: 279ca530 addiu gp,gp,-23248
+ 40dd28: 0399e021 addu gp,gp,t9
+ 40dd2c: 27bdffd0 addiu sp,sp,-48
+ 40dd30: afbc0010 sw gp,16(sp)
+ 40dd34: afb20020 sw s2,32(sp)
+ 40dd38: afb1001c sw s1,28(sp)
+ 40dd3c: afb00018 sw s0,24(sp)
+ 40dd40: afbf0028 sw ra,40(sp)
+ 40dd44: afbc0024 sw gp,36(sp)
+ 40dd48: 00809021 move s2,a0
+ 40dd4c: 00a08821 move s1,a1
+ 40dd50: 00c08021 move s0,a2
+ 40dd54: 00e01821 move v1,a3
+ 40dd58: 02402021 move a0,s2
+ 40dd5c: 02202821 move a1,s1
+ 40dd60: 02003021 move a2,s0
+ 40dd64: 00603821 move a3,v1
+ 40dd68: 2402104f li v0,4175
+ 40dd6c: 0000000c syscall
+ 40dd70: 00408021 move s0,v0
+ 40dd74: 00e01821 move v1,a3
+ 40dd78: 10600009 beqz v1,40dda0 <__libc_recv+0x80>
+ 40dd7c: 02001021 move v0,s0
+ 40dd80: 8f9980a0 lw t9,-32608(gp)
+ 40dd84: 00000000 nop
+ 40dd88: 0320f809 jalr t9
+ 40dd8c: 00000000 nop
+ 40dd90: 8fbc0010 lw gp,16(sp)
+ 40dd94: 00401821 move v1,v0
+ 40dd98: ac700000 sw s0,0(v1)
+ 40dd9c: 2402ffff li v0,-1
+ 40dda0: 8fbf0028 lw ra,40(sp)
+ 40dda4: 8fb20020 lw s2,32(sp)
+ 40dda8: 8fb1001c lw s1,28(sp)
+ 40ddac: 8fb00018 lw s0,24(sp)
+ 40ddb0: 03e00008 jr ra
+ 40ddb4: 27bd0030 addiu sp,sp,48
+ ...
+
+0040ddc0 <__libc_send>:
+ 40ddc0: 3c1c0fc0 lui gp,0xfc0
+ 40ddc4: 279ca490 addiu gp,gp,-23408
+ 40ddc8: 0399e021 addu gp,gp,t9
+ 40ddcc: 27bdffd0 addiu sp,sp,-48
+ 40ddd0: afbc0010 sw gp,16(sp)
+ 40ddd4: afb20020 sw s2,32(sp)
+ 40ddd8: afb1001c sw s1,28(sp)
+ 40dddc: afb00018 sw s0,24(sp)
+ 40dde0: afbf0028 sw ra,40(sp)
+ 40dde4: afbc0024 sw gp,36(sp)
+ 40dde8: 00809021 move s2,a0
+ 40ddec: 00a08821 move s1,a1
+ 40ddf0: 00c08021 move s0,a2
+ 40ddf4: 00e01821 move v1,a3
+ 40ddf8: 02402021 move a0,s2
+ 40ddfc: 02202821 move a1,s1
+ 40de00: 02003021 move a2,s0
+ 40de04: 00603821 move a3,v1
+ 40de08: 24021052 li v0,4178
+ 40de0c: 0000000c syscall
+ 40de10: 00408021 move s0,v0
+ 40de14: 00e01821 move v1,a3
+ 40de18: 10600009 beqz v1,40de40 <__libc_send+0x80>
+ 40de1c: 02001021 move v0,s0
+ 40de20: 8f9980a0 lw t9,-32608(gp)
+ 40de24: 00000000 nop
+ 40de28: 0320f809 jalr t9
+ 40de2c: 00000000 nop
+ 40de30: 8fbc0010 lw gp,16(sp)
+ 40de34: 00401821 move v1,v0
+ 40de38: ac700000 sw s0,0(v1)
+ 40de3c: 2402ffff li v0,-1
+ 40de40: 8fbf0028 lw ra,40(sp)
+ 40de44: 8fb20020 lw s2,32(sp)
+ 40de48: 8fb1001c lw s1,28(sp)
+ 40de4c: 8fb00018 lw s0,24(sp)
+ 40de50: 03e00008 jr ra
+ 40de54: 27bd0030 addiu sp,sp,48
+ ...
+
+0040de60 <setnetent>:
+ 40de60: 3c1c0fc0 lui gp,0xfc0
+ 40de64: 279ca3f0 addiu gp,gp,-23568
+ 40de68: 0399e021 addu gp,gp,t9
+ 40de6c: 27bdffd8 addiu sp,sp,-40
+ 40de70: afbc0010 sw gp,16(sp)
+ 40de74: afb00018 sw s0,24(sp)
+ 40de78: 00808021 move s0,a0
+ 40de7c: 8f84801c lw a0,-32740(gp)
+ 40de80: 00000000 nop
+ 40de84: 24840240 addiu a0,a0,576
+ 40de88: afbf0020 sw ra,32(sp)
+ 40de8c: afbc001c sw gp,28(sp)
+ 40de90: 8f9980a8 lw t9,-32600(gp)
+ 40de94: 00000000 nop
+ 40de98: 0320f809 jalr t9
+ 40de9c: 00000000 nop
+ 40dea0: 8fbc0010 lw gp,16(sp)
+ 40dea4: 00000000 nop
+ 40dea8: 8f82801c lw v0,-32740(gp)
+ 40deac: 00000000 nop
+ 40deb0: 24420258 addiu v0,v0,600
+ 40deb4: 8c420000 lw v0,0(v0)
+ 40deb8: 8f848018 lw a0,-32744(gp)
+ 40debc: 00000000 nop
+ 40dec0: 24841300 addiu a0,a0,4864
+ 40dec4: 8f858018 lw a1,-32744(gp)
+ 40dec8: 00000000 nop
+ 40decc: 24a51310 addiu a1,a1,4880
+ 40ded0: 1040001b beqz v0,40df40 <setnetent+0xe0>
+ 40ded4: 00000000 nop
+ 40ded8: 00402021 move a0,v0
+ 40dedc: 8f9980b8 lw t9,-32584(gp)
+ 40dee0: 00000000 nop
+ 40dee4: 0320f809 jalr t9
+ 40dee8: 00000000 nop
+ 40deec: 8fbc0010 lw gp,16(sp)
+ 40def0: 00000000 nop
+ 40def4: 8f82827c lw v0,-32132(gp)
+ 40def8: 00000000 nop
+ 40defc: 8c420000 lw v0,0(v0)
+ 40df00: 8f84801c lw a0,-32740(gp)
+ 40df04: 00000000 nop
+ 40df08: 24840240 addiu a0,a0,576
+ 40df0c: 00501025 or v0,v0,s0
+ 40df10: 8f81827c lw at,-32132(gp)
+ 40df14: 00000000 nop
+ 40df18: ac220000 sw v0,0(at)
+ 40df1c: 8f99811c lw t9,-32484(gp)
+ 40df20: 00000000 nop
+ 40df24: 0320f809 jalr t9
+ 40df28: 00000000 nop
+ 40df2c: 8fbc0010 lw gp,16(sp)
+ 40df30: 8fbf0020 lw ra,32(sp)
+ 40df34: 8fb00018 lw s0,24(sp)
+ 40df38: 03e00008 jr ra
+ 40df3c: 27bd0028 addiu sp,sp,40
+ 40df40: 8f998140 lw t9,-32448(gp)
+ 40df44: 00000000 nop
+ 40df48: 0320f809 jalr t9
+ 40df4c: 00000000 nop
+ 40df50: 8fbc0010 lw gp,16(sp)
+ 40df54: 00000000 nop
+ 40df58: 8f81801c lw at,-32740(gp)
+ 40df5c: 00000000 nop
+ 40df60: 24210258 addiu at,at,600
+ 40df64: 1000ffe3 b 40def4 <setnetent+0x94>
+ 40df68: ac220000 sw v0,0(at)
+
+0040df6c <endnetent>:
+ 40df6c: 3c1c0fc0 lui gp,0xfc0
+ 40df70: 279ca2e4 addiu gp,gp,-23836
+ 40df74: 0399e021 addu gp,gp,t9
+ 40df78: 27bdffd8 addiu sp,sp,-40
+ 40df7c: afbc0010 sw gp,16(sp)
+ 40df80: afb00018 sw s0,24(sp)
+ 40df84: 8f90801c lw s0,-32740(gp)
+ 40df88: 00000000 nop
+ 40df8c: 26100240 addiu s0,s0,576
+ 40df90: 00000000 nop
+ 40df94: 02002021 move a0,s0
+ 40df98: afbf0020 sw ra,32(sp)
+ 40df9c: afbc001c sw gp,28(sp)
+ 40dfa0: 8f9980a8 lw t9,-32600(gp)
+ 40dfa4: 00000000 nop
+ 40dfa8: 0320f809 jalr t9
+ 40dfac: 00000000 nop
+ 40dfb0: 8fbc0010 lw gp,16(sp)
+ 40dfb4: 00000000 nop
+ 40dfb8: 8f82801c lw v0,-32740(gp)
+ 40dfbc: 00000000 nop
+ 40dfc0: 24420258 addiu v0,v0,600
+ 40dfc4: 8c420000 lw v0,0(v0)
+ 40dfc8: 00000000 nop
+ 40dfcc: 1040000b beqz v0,40dffc <endnetent+0x90>
+ 40dfd0: 00402021 move a0,v0
+ 40dfd4: 8f998134 lw t9,-32460(gp)
+ 40dfd8: 00000000 nop
+ 40dfdc: 0320f809 jalr t9
+ 40dfe0: 00000000 nop
+ 40dfe4: 8fbc0010 lw gp,16(sp)
+ 40dfe8: 00000000 nop
+ 40dfec: 8f81801c lw at,-32740(gp)
+ 40dff0: 00000000 nop
+ 40dff4: 24210258 addiu at,at,600
+ 40dff8: ac200000 sw zero,0(at)
+ 40dffc: 02002021 move a0,s0
+ 40e000: 8f81827c lw at,-32132(gp)
+ 40e004: 00000000 nop
+ 40e008: ac200000 sw zero,0(at)
+ 40e00c: 8f99811c lw t9,-32484(gp)
+ 40e010: 00000000 nop
+ 40e014: 0320f809 jalr t9
+ 40e018: 00000000 nop
+ 40e01c: 8fbc0010 lw gp,16(sp)
+ 40e020: 8fbf0020 lw ra,32(sp)
+ 40e024: 8fb00018 lw s0,24(sp)
+ 40e028: 03e00008 jr ra
+ 40e02c: 27bd0028 addiu sp,sp,40
+ 40e030: 3c1c0fc0 lui gp,0xfc0
+ 40e034: 279ca220 addiu gp,gp,-24032
+ 40e038: 0399e021 addu gp,gp,t9
+ 40e03c: 80870000 lb a3,0(a0)
+ 40e040: 00000000 nop
+ 40e044: 10e00011 beqz a3,40e08c <endnetent+0x120>
+ 40e048: 00001021 move v0,zero
+ 40e04c: 10000006 b 40e068 <endnetent+0xfc>
+ 40e050: 00a03021 move a2,a1
+ 40e054: 00031e00 sll v1,v1,0x18
+ 40e058: 00031e03 sra v1,v1,0x18
+ 40e05c: 24c60001 addiu a2,a2,1
+ 40e060: 1067000a beq v1,a3,40e08c <endnetent+0x120>
+ 40e064: 00801021 move v0,a0
+ 40e068: 80c20000 lb v0,0(a2)
+ 40e06c: 90c30000 lbu v1,0(a2)
+ 40e070: 1440fff8 bnez v0,40e054 <endnetent+0xe8>
+ 40e074: 00000000 nop
+ 40e078: 24840001 addiu a0,a0,1
+ 40e07c: 80870000 lb a3,0(a0)
+ 40e080: 00000000 nop
+ 40e084: 14e0fff1 bnez a3,40e04c <endnetent+0xe0>
+ 40e088: 00001021 move v0,zero
+ 40e08c: 03e00008 jr ra
+ 40e090: 00000000 nop
+
+0040e094 <getnetent>:
+ 40e094: 3c1c0fc0 lui gp,0xfc0
+ 40e098: 279ca1bc addiu gp,gp,-24132
+ 40e09c: 0399e021 addu gp,gp,t9
+ 40e0a0: 27bdffd0 addiu sp,sp,-48
+ 40e0a4: afbc0010 sw gp,16(sp)
+ 40e0a8: afb00018 sw s0,24(sp)
+ 40e0ac: 8f90801c lw s0,-32740(gp)
+ 40e0b0: 00000000 nop
+ 40e0b4: 26100240 addiu s0,s0,576
+ 40e0b8: 00000000 nop
+ 40e0bc: 02002021 move a0,s0
+ 40e0c0: afbf0028 sw ra,40(sp)
+ 40e0c4: afbc0024 sw gp,36(sp)
+ 40e0c8: afb20020 sw s2,32(sp)
+ 40e0cc: afb1001c sw s1,28(sp)
+ 40e0d0: 8f9980a8 lw t9,-32600(gp)
+ 40e0d4: 00000000 nop
+ 40e0d8: 0320f809 jalr t9
+ 40e0dc: 00000000 nop
+ 40e0e0: 8fbc0010 lw gp,16(sp)
+ 40e0e4: 00000000 nop
+ 40e0e8: 8f82801c lw v0,-32740(gp)
+ 40e0ec: 00000000 nop
+ 40e0f0: 24420258 addiu v0,v0,600
+ 40e0f4: 8c420000 lw v0,0(v0)
+ 40e0f8: 00000000 nop
+ 40e0fc: 104000a0 beqz v0,40e380 <getnetent+0x2ec>
+ 40e100: 00000000 nop
+ 40e104: 8f86801c lw a2,-32740(gp)
+ 40e108: 00000000 nop
+ 40e10c: 24c60258 addiu a2,a2,600
+ 40e110: 8cc60000 lw a2,0(a2)
+ 40e114: 8f84801c lw a0,-32740(gp)
+ 40e118: 00000000 nop
+ 40e11c: 248409c0 addiu a0,a0,2496
+ 40e120: 24050100 li a1,256
+ 40e124: 8f998268 lw t9,-32152(gp)
+ 40e128: 00000000 nop
+ 40e12c: 0320f809 jalr t9
+ 40e130: 00000000 nop
+ 40e134: 8fbc0010 lw gp,16(sp)
+ 40e138: 00408821 move s1,v0
+ 40e13c: 8f858018 lw a1,-32744(gp)
+ 40e140: 00000000 nop
+ 40e144: 24a51314 addiu a1,a1,4884
+ 40e148: 1220009e beqz s1,40e3c4 <getnetent+0x330>
+ 40e14c: 02202021 move a0,s1
+ 40e150: 82230000 lb v1,0(s1)
+ 40e154: 24020023 li v0,35
+ 40e158: 1062ffea beq v1,v0,40e104 <getnetent+0x70>
+ 40e15c: 00000000 nop
+ 40e160: 8f998018 lw t9,-32744(gp)
+ 40e164: 00000000 nop
+ 40e168: 2739e030 addiu t9,t9,-8144
+ 40e16c: 00000000 nop
+ 40e170: 0320f809 jalr t9
+ 40e174: 00000000 nop
+ 40e178: 8fbc0010 lw gp,16(sp)
+ 40e17c: 00408021 move s0,v0
+ 40e180: 8f858018 lw a1,-32744(gp)
+ 40e184: 00000000 nop
+ 40e188: 24a51318 addiu a1,a1,4888
+ 40e18c: 1200ffdd beqz s0,40e104 <getnetent+0x70>
+ 40e190: 02202021 move a0,s1
+ 40e194: a2000000 sb zero,0(s0)
+ 40e198: 8f81801c lw at,-32740(gp)
+ 40e19c: 00000000 nop
+ 40e1a0: 24210ac4 addiu at,at,2756
+ 40e1a4: ac310000 sw s1,0(at)
+ 40e1a8: 8f998018 lw t9,-32744(gp)
+ 40e1ac: 00000000 nop
+ 40e1b0: 2739e030 addiu t9,t9,-8144
+ 40e1b4: 00000000 nop
+ 40e1b8: 0320f809 jalr t9
+ 40e1bc: 00000000 nop
+ 40e1c0: 8fbc0010 lw gp,16(sp)
+ 40e1c4: 00408021 move s0,v0
+ 40e1c8: 1200ffce beqz s0,40e104 <getnetent+0x70>
+ 40e1cc: 24020020 li v0,32
+ 40e1d0: a2000000 sb zero,0(s0)
+ 40e1d4: 26100001 addiu s0,s0,1
+ 40e1d8: 82030000 lb v1,0(s0)
+ 40e1dc: 00000000 nop
+ 40e1e0: 1062005e beq v1,v0,40e35c <getnetent+0x2c8>
+ 40e1e4: 24020009 li v0,9
+ 40e1e8: 1062005c beq v1,v0,40e35c <getnetent+0x2c8>
+ 40e1ec: 00000000 nop
+ 40e1f0: 8f858018 lw a1,-32744(gp)
+ 40e1f4: 00000000 nop
+ 40e1f8: 24a51318 addiu a1,a1,4888
+ 40e1fc: 02002021 move a0,s0
+ 40e200: 8f998018 lw t9,-32744(gp)
+ 40e204: 00000000 nop
+ 40e208: 2739e030 addiu t9,t9,-8144
+ 40e20c: 00000000 nop
+ 40e210: 0320f809 jalr t9
+ 40e214: 00000000 nop
+ 40e218: 8fbc0010 lw gp,16(sp)
+ 40e21c: 00408821 move s1,v0
+ 40e220: 12200003 beqz s1,40e230 <getnetent+0x19c>
+ 40e224: 02002021 move a0,s0
+ 40e228: a2200000 sb zero,0(s1)
+ 40e22c: 26310001 addiu s1,s1,1
+ 40e230: 8f998160 lw t9,-32416(gp)
+ 40e234: 00000000 nop
+ 40e238: 0320f809 jalr t9
+ 40e23c: 00000000 nop
+ 40e240: 8fbc0010 lw gp,16(sp)
+ 40e244: 00000000 nop
+ 40e248: 8f83801c lw v1,-32740(gp)
+ 40e24c: 00000000 nop
+ 40e250: 24630ad0 addiu v1,v1,2768
+ 40e254: 8f84801c lw a0,-32740(gp)
+ 40e258: 00000000 nop
+ 40e25c: 24840ad4 addiu a0,a0,2772
+ 40e260: ac620000 sw v0,0(v1)
+ 40e264: 24020002 li v0,2
+ 40e268: ac62fffc sw v0,-4(v1)
+ 40e26c: ac64fff8 sw a0,-8(v1)
+ 40e270: 12200021 beqz s1,40e2f8 <getnetent+0x264>
+ 40e274: 00809021 move s2,a0
+ 40e278: 1000001f b 40e2f8 <getnetent+0x264>
+ 40e27c: 02208021 move s0,s1
+ 40e280: 00023603 sra a2,v0,0x18
+ 40e284: 24020020 li v0,32
+ 40e288: 10c2001a beq a2,v0,40e2f4 <getnetent+0x260>
+ 40e28c: 00000000 nop
+ 40e290: 8f82801c lw v0,-32740(gp)
+ 40e294: 00000000 nop
+ 40e298: 24420b5c addiu v0,v0,2908
+ 40e29c: 0242182b sltu v1,s2,v0
+ 40e2a0: 24020009 li v0,9
+ 40e2a4: 8f858018 lw a1,-32744(gp)
+ 40e2a8: 00000000 nop
+ 40e2ac: 24a51318 addiu a1,a1,4888
+ 40e2b0: 10c20010 beq a2,v0,40e2f4 <getnetent+0x260>
+ 40e2b4: 02002021 move a0,s0
+ 40e2b8: 10600003 beqz v1,40e2c8 <getnetent+0x234>
+ 40e2bc: 00000000 nop
+ 40e2c0: ae500000 sw s0,0(s2)
+ 40e2c4: 26520004 addiu s2,s2,4
+ 40e2c8: 8f998018 lw t9,-32744(gp)
+ 40e2cc: 00000000 nop
+ 40e2d0: 2739e030 addiu t9,t9,-8144
+ 40e2d4: 00000000 nop
+ 40e2d8: 0320f809 jalr t9
+ 40e2dc: 00000000 nop
+ 40e2e0: 8fbc0010 lw gp,16(sp)
+ 40e2e4: 00408021 move s0,v0
+ 40e2e8: 12000009 beqz s0,40e310 <getnetent+0x27c>
+ 40e2ec: 00000000 nop
+ 40e2f0: a2000000 sb zero,0(s0)
+ 40e2f4: 26100001 addiu s0,s0,1
+ 40e2f8: 12000005 beqz s0,40e310 <getnetent+0x27c>
+ 40e2fc: 00000000 nop
+ 40e300: 82020000 lb v0,0(s0)
+ 40e304: 92030000 lbu v1,0(s0)
+ 40e308: 1440ffdd bnez v0,40e280 <getnetent+0x1ec>
+ 40e30c: 00031600 sll v0,v1,0x18
+ 40e310: 8f84801c lw a0,-32740(gp)
+ 40e314: 00000000 nop
+ 40e318: 24840240 addiu a0,a0,576
+ 40e31c: ae400000 sw zero,0(s2)
+ 40e320: 8f99811c lw t9,-32484(gp)
+ 40e324: 00000000 nop
+ 40e328: 0320f809 jalr t9
+ 40e32c: 00000000 nop
+ 40e330: 8fbc0010 lw gp,16(sp)
+ 40e334: 00000000 nop
+ 40e338: 8f82801c lw v0,-32740(gp)
+ 40e33c: 00000000 nop
+ 40e340: 24420ac4 addiu v0,v0,2756
+ 40e344: 8fbf0028 lw ra,40(sp)
+ 40e348: 8fb20020 lw s2,32(sp)
+ 40e34c: 8fb1001c lw s1,28(sp)
+ 40e350: 8fb00018 lw s0,24(sp)
+ 40e354: 03e00008 jr ra
+ 40e358: 27bd0030 addiu sp,sp,48
+ 40e35c: 26100001 addiu s0,s0,1
+ 40e360: 82030000 lb v1,0(s0)
+ 40e364: 24020020 li v0,32
+ 40e368: 1062fffc beq v1,v0,40e35c <getnetent+0x2c8>
+ 40e36c: 24020009 li v0,9
+ 40e370: 1462ff9f bne v1,v0,40e1f0 <getnetent+0x15c>
+ 40e374: 00000000 nop
+ 40e378: 1000fff9 b 40e360 <getnetent+0x2cc>
+ 40e37c: 26100001 addiu s0,s0,1
+ 40e380: 8f848018 lw a0,-32744(gp)
+ 40e384: 00000000 nop
+ 40e388: 24841300 addiu a0,a0,4864
+ 40e38c: 8f858018 lw a1,-32744(gp)
+ 40e390: 00000000 nop
+ 40e394: 24a51310 addiu a1,a1,4880
+ 40e398: 8f998140 lw t9,-32448(gp)
+ 40e39c: 00000000 nop
+ 40e3a0: 0320f809 jalr t9
+ 40e3a4: 00000000 nop
+ 40e3a8: 8fbc0010 lw gp,16(sp)
+ 40e3ac: 00000000 nop
+ 40e3b0: 8f81801c lw at,-32740(gp)
+ 40e3b4: 00000000 nop
+ 40e3b8: 24210258 addiu at,at,600
+ 40e3bc: 1440ff51 bnez v0,40e104 <getnetent+0x70>
+ 40e3c0: ac220000 sw v0,0(at)
+ 40e3c4: 8f84801c lw a0,-32740(gp)
+ 40e3c8: 00000000 nop
+ 40e3cc: 24840240 addiu a0,a0,576
+ 40e3d0: 8f99811c lw t9,-32484(gp)
+ 40e3d4: 00000000 nop
+ 40e3d8: 0320f809 jalr t9
+ 40e3dc: 00000000 nop
+ 40e3e0: 8fbc0010 lw gp,16(sp)
+ 40e3e4: 1000ffd7 b 40e344 <getnetent+0x2b0>
+ 40e3e8: 00001021 move v0,zero
+ 40e3ec: 00000000 nop
+
+0040e3f0 <inet_network>:
+ 40e3f0: 3c1c0fc0 lui gp,0xfc0
+ 40e3f4: 279c9e60 addiu gp,gp,-24992
+ 40e3f8: 0399e021 addu gp,gp,t9
+ 40e3fc: 27bdffb0 addiu sp,sp,-80
+ 40e400: afbc0010 sw gp,16(sp)
+ 40e404: afb60040 sw s6,64(sp)
+ 40e408: 27b60018 addiu s6,sp,24
+ 40e40c: afb40038 sw s4,56(sp)
+ 40e410: afb1002c sw s1,44(sp)
+ 40e414: afbf0048 sw ra,72(sp)
+ 40e418: afbc0044 sw gp,68(sp)
+ 40e41c: afb5003c sw s5,60(sp)
+ 40e420: afb30034 sw s3,52(sp)
+ 40e424: afb20030 sw s2,48(sp)
+ 40e428: afb00028 sw s0,40(sp)
+ 40e42c: 00808821 move s1,a0
+ 40e430: 02c0a021 move s4,s6
+ 40e434: 82230000 lb v1,0(s1)
+ 40e438: 24020030 li v0,48
+ 40e43c: 00009821 move s3,zero
+ 40e440: 1062005b beq v1,v0,40e5b0 <inet_network+0x1c0>
+ 40e444: 2415000a li s5,10
+ 40e448: 1000000d b 40e480 <inet_network+0x90>
+ 40e44c: 00000000 nop
+ 40e450: 8f9980cc lw t9,-32564(gp)
+ 40e454: 00000000 nop
+ 40e458: 0320f809 jalr t9
+ 40e45c: 00000000 nop
+ 40e460: 8fbc0010 lw gp,16(sp)
+ 40e464: 1040003c beqz v0,40e558 <inet_network+0x168>
+ 40e468: 02002021 move a0,s0
+ 40e46c: 02750018 mult s3,s5
+ 40e470: 26310001 addiu s1,s1,1
+ 40e474: 00001012 mflo v0
+ 40e478: 00501021 addu v0,v0,s0
+ 40e47c: 2453ffd0 addiu s3,v0,-48
+ 40e480: 82300000 lb s0,0(s1)
+ 40e484: 00000000 nop
+ 40e488: 1600fff1 bnez s0,40e450 <inet_network+0x60>
+ 40e48c: 02002021 move a0,s0
+ 40e490: 82240000 lb a0,0(s1)
+ 40e494: 2402002e li v0,46
+ 40e498: 10820028 beq a0,v0,40e53c <inet_network+0x14c>
+ 40e49c: 27a30028 addiu v1,sp,40
+ 40e4a0: 10800009 beqz a0,40e4c8 <inet_network+0xd8>
+ 40e4a4: 00000000 nop
+ 40e4a8: 8f998210 lw t9,-32240(gp)
+ 40e4ac: 00000000 nop
+ 40e4b0: 0320f809 jalr t9
+ 40e4b4: 00000000 nop
+ 40e4b8: 8fbc0010 lw gp,16(sp)
+ 40e4bc: 00401821 move v1,v0
+ 40e4c0: 10600014 beqz v1,40e514 <inet_network+0x124>
+ 40e4c4: 2402ffff li v0,-1
+ 40e4c8: ae930000 sw s3,0(s4)
+ 40e4cc: 26940004 addiu s4,s4,4
+ 40e4d0: 02961023 subu v0,s4,s6
+ 40e4d4: 00022083 sra a0,v0,0x2
+ 40e4d8: 2c830005 sltiu v1,a0,5
+ 40e4dc: 1060000d beqz v1,40e514 <inet_network+0x124>
+ 40e4e0: 2402ffff li v0,-1
+ 40e4e4: 00002821 move a1,zero
+ 40e4e8: 10800009 beqz a0,40e510 <inet_network+0x120>
+ 40e4ec: 00009821 move s3,zero
+ 40e4f0: 00051080 sll v0,a1,0x2
+ 40e4f4: 02c21021 addu v0,s6,v0
+ 40e4f8: 90430003 lbu v1,3(v0)
+ 40e4fc: 24a50001 addiu a1,a1,1
+ 40e500: 00139a00 sll s3,s3,0x8
+ 40e504: 00a4102b sltu v0,a1,a0
+ 40e508: 1440fff9 bnez v0,40e4f0 <inet_network+0x100>
+ 40e50c: 02639825 or s3,s3,v1
+ 40e510: 02601021 move v0,s3
+ 40e514: 8fbf0048 lw ra,72(sp)
+ 40e518: 8fb60040 lw s6,64(sp)
+ 40e51c: 8fb5003c lw s5,60(sp)
+ 40e520: 8fb40038 lw s4,56(sp)
+ 40e524: 8fb30034 lw s3,52(sp)
+ 40e528: 8fb20030 lw s2,48(sp)
+ 40e52c: 8fb1002c lw s1,44(sp)
+ 40e530: 8fb00028 lw s0,40(sp)
+ 40e534: 03e00008 jr ra
+ 40e538: 27bd0050 addiu sp,sp,80
+ 40e53c: 0283182b sltu v1,s4,v1
+ 40e540: 1060fff4 beqz v1,40e514 <inet_network+0x124>
+ 40e544: 2402ffff li v0,-1
+ 40e548: ae930000 sw s3,0(s4)
+ 40e54c: 26310001 addiu s1,s1,1
+ 40e550: 1000ffb8 b 40e434 <inet_network+0x44>
+ 40e554: 26940004 addiu s4,s4,4
+ 40e558: 24020010 li v0,16
+ 40e55c: 16a2ffcc bne s5,v0,40e490 <inet_network+0xa0>
+ 40e560: 00139100 sll s2,s3,0x4
+ 40e564: 8f9981e4 lw t9,-32284(gp)
+ 40e568: 00000000 nop
+ 40e56c: 0320f809 jalr t9
+ 40e570: 00000000 nop
+ 40e574: 8fbc0010 lw gp,16(sp)
+ 40e578: 1040ffc5 beqz v0,40e490 <inet_network+0xa0>
+ 40e57c: 02002021 move a0,s0
+ 40e580: 8f99823c lw t9,-32196(gp)
+ 40e584: 00000000 nop
+ 40e588: 0320f809 jalr t9
+ 40e58c: 00000000 nop
+ 40e590: 8fbc0010 lw gp,16(sp)
+ 40e594: 2603000a addiu v1,s0,10
+ 40e598: 02432021 addu a0,s2,v1
+ 40e59c: 00801821 move v1,a0
+ 40e5a0: 1440000d bnez v0,40e5d8 <inet_network+0x1e8>
+ 40e5a4: 2493ff9f addiu s3,a0,-97
+ 40e5a8: 1000000b b 40e5d8 <inet_network+0x1e8>
+ 40e5ac: 2473ffbf addiu s3,v1,-65
+ 40e5b0: 26310001 addiu s1,s1,1
+ 40e5b4: 82230000 lb v1,0(s1)
+ 40e5b8: 24020078 li v0,120
+ 40e5bc: 10620005 beq v1,v0,40e5d4 <inet_network+0x1e4>
+ 40e5c0: 24020058 li v0,88
+ 40e5c4: 10620003 beq v1,v0,40e5d4 <inet_network+0x1e4>
+ 40e5c8: 00000000 nop
+ 40e5cc: 1000ffac b 40e480 <inet_network+0x90>
+ 40e5d0: 24150008 li s5,8
+ 40e5d4: 24150010 li s5,16
+ 40e5d8: 1000ffa9 b 40e480 <inet_network+0x90>
+ 40e5dc: 26310001 addiu s1,s1,1
+
+0040e5e0 <__libc_lseek>:
+ 40e5e0: 3c1c0fc0 lui gp,0xfc0
+ 40e5e4: 279c9c70 addiu gp,gp,-25488
+ 40e5e8: 0399e021 addu gp,gp,t9
+ 40e5ec: 27bdffd8 addiu sp,sp,-40
+ 40e5f0: afbc0010 sw gp,16(sp)
+ 40e5f4: afb1001c sw s1,28(sp)
+ 40e5f8: afb00018 sw s0,24(sp)
+ 40e5fc: afbf0024 sw ra,36(sp)
+ 40e600: afbc0020 sw gp,32(sp)
+ 40e604: 00808821 move s1,a0
+ 40e608: 00a08021 move s0,a1
+ 40e60c: 00c01821 move v1,a2
+ 40e610: 02202021 move a0,s1
+ 40e614: 02002821 move a1,s0
+ 40e618: 00603021 move a2,v1
+ 40e61c: 24020fb3 li v0,4019
+ 40e620: 0000000c syscall
+ 40e624: 00408021 move s0,v0
+ 40e628: 00e01821 move v1,a3
+ 40e62c: 10600009 beqz v1,40e654 <__libc_lseek+0x74>
+ 40e630: 02001021 move v0,s0
+ 40e634: 8f9980a0 lw t9,-32608(gp)
+ 40e638: 00000000 nop
+ 40e63c: 0320f809 jalr t9
+ 40e640: 00000000 nop
+ 40e644: 8fbc0010 lw gp,16(sp)
+ 40e648: 00401821 move v1,v0
+ 40e64c: ac700000 sw s0,0(v1)
+ 40e650: 2402ffff li v0,-1
+ 40e654: 8fbf0024 lw ra,36(sp)
+ 40e658: 8fb1001c lw s1,28(sp)
+ 40e65c: 8fb00018 lw s0,24(sp)
+ 40e660: 03e00008 jr ra
+ 40e664: 27bd0028 addiu sp,sp,40
+ ...
+
+0040e670 <_newselect>:
+ 40e670: 3c1c0fc0 lui gp,0xfc0
+ 40e674: 279c9be0 addiu gp,gp,-25632
+ 40e678: 0399e021 addu gp,gp,t9
+ 40e67c: 27bdffc8 addiu sp,sp,-56
+ 40e680: afbc0010 sw gp,16(sp)
+ 40e684: 8fa20048 lw v0,72(sp)
+ 40e688: afb20028 sw s2,40(sp)
+ 40e68c: afb10024 sw s1,36(sp)
+ 40e690: afb00020 sw s0,32(sp)
+ 40e694: afbf0030 sw ra,48(sp)
+ 40e698: afbc002c sw gp,44(sp)
+ 40e69c: 00809021 move s2,a0
+ 40e6a0: afa20018 sw v0,24(sp)
+ 40e6a4: 00a08821 move s1,a1
+ 40e6a8: 00c08021 move s0,a2
+ 40e6ac: 00e01821 move v1,a3
+ 40e6b0: 02402021 move a0,s2
+ 40e6b4: 02202821 move a1,s1
+ 40e6b8: 02003021 move a2,s0
+ 40e6bc: 8fa20018 lw v0,24(sp)
+ 40e6c0: 00603821 move a3,v1
+ 40e6c4: 27bdffe8 addiu sp,sp,-24
+ 40e6c8: afa20010 sw v0,16(sp)
+ 40e6cc: 2402102e li v0,4142
+ 40e6d0: 0000000c syscall
+ 40e6d4: 00408021 move s0,v0
+ 40e6d8: 00e01821 move v1,a3
+ 40e6dc: 27bd0018 addiu sp,sp,24
+ 40e6e0: 10600009 beqz v1,40e708 <_newselect+0x98>
+ 40e6e4: 02001021 move v0,s0
+ 40e6e8: 8f9980a0 lw t9,-32608(gp)
+ 40e6ec: 00000000 nop
+ 40e6f0: 0320f809 jalr t9
+ 40e6f4: 00000000 nop
+ 40e6f8: 8fbc0010 lw gp,16(sp)
+ 40e6fc: 00401821 move v1,v0
+ 40e700: ac700000 sw s0,0(v1)
+ 40e704: 2402ffff li v0,-1
+ 40e708: 8fbf0030 lw ra,48(sp)
+ 40e70c: 8fb20028 lw s2,40(sp)
+ 40e710: 8fb10024 lw s1,36(sp)
+ 40e714: 8fb00020 lw s0,32(sp)
+ 40e718: 03e00008 jr ra
+ 40e71c: 27bd0038 addiu sp,sp,56
+
+0040e720 <__libc_nanosleep>:
+ 40e720: 3c1c0fc0 lui gp,0xfc0
+ 40e724: 279c9b30 addiu gp,gp,-25808
+ 40e728: 0399e021 addu gp,gp,t9
+ 40e72c: 27bdffd8 addiu sp,sp,-40
+ 40e730: afbc0010 sw gp,16(sp)
+ 40e734: afbf0020 sw ra,32(sp)
+ 40e738: afbc001c sw gp,28(sp)
+ 40e73c: afb00018 sw s0,24(sp)
+ 40e740: 00801821 move v1,a0
+ 40e744: 00a03021 move a2,a1
+ 40e748: 00602021 move a0,v1
+ 40e74c: 00c02821 move a1,a2
+ 40e750: 24021046 li v0,4166
+ 40e754: 0000000c syscall
+ 40e758: 00408021 move s0,v0
+ 40e75c: 00e01821 move v1,a3
+ 40e760: 10600009 beqz v1,40e788 <__libc_nanosleep+0x68>
+ 40e764: 02001021 move v0,s0
+ 40e768: 8f9980a0 lw t9,-32608(gp)
+ 40e76c: 00000000 nop
+ 40e770: 0320f809 jalr t9
+ 40e774: 00000000 nop
+ 40e778: 8fbc0010 lw gp,16(sp)
+ 40e77c: 00401821 move v1,v0
+ 40e780: ac700000 sw s0,0(v1)
+ 40e784: 2402ffff li v0,-1
+ 40e788: 8fbf0020 lw ra,32(sp)
+ 40e78c: 8fb00018 lw s0,24(sp)
+ 40e790: 03e00008 jr ra
+ 40e794: 27bd0028 addiu sp,sp,40
+ ...
+
+0040e7a0 <islower>:
+ 40e7a0: 3c1c0fc0 lui gp,0xfc0
+ 40e7a4: 279c9ab0 addiu gp,gp,-25936
+ 40e7a8: 0399e021 addu gp,gp,t9
+ 40e7ac: 00801021 move v0,a0
+ 40e7b0: 2442ff9f addiu v0,v0,-97
+ 40e7b4: 03e00008 jr ra
+ 40e7b8: 2c42001a sltiu v0,v0,26
+ 40e7bc: 00000000 nop
+
+0040e7c0 <rewind>:
+ 40e7c0: 3c1c0fc0 lui gp,0xfc0
+ 40e7c4: 279c9a90 addiu gp,gp,-25968
+ 40e7c8: 0399e021 addu gp,gp,t9
+ 40e7cc: 27bdffd8 addiu sp,sp,-40
+ 40e7d0: afbc0010 sw gp,16(sp)
+ 40e7d4: afb00018 sw s0,24(sp)
+ 40e7d8: afbf0020 sw ra,32(sp)
+ 40e7dc: 00808021 move s0,a0
+ 40e7e0: afbc001c sw gp,28(sp)
+ 40e7e4: 8e020038 lw v0,56(s0)
+ 40e7e8: 00000000 nop
+ 40e7ec: 1040001b beqz v0,40e85c <rewind+0x9c>
+ 40e7f0: 2604003c addiu a0,s0,60
+ 40e7f4: 96020000 lhu v0,0(s0)
+ 40e7f8: 02002021 move a0,s0
+ 40e7fc: 3042fff3 andi v0,v0,0xfff3
+ 40e800: 00002821 move a1,zero
+ 40e804: 00003021 move a2,zero
+ 40e808: a6020000 sh v0,0(s0)
+ 40e80c: 8f9981a8 lw t9,-32344(gp)
+ 40e810: 00000000 nop
+ 40e814: 0320f809 jalr t9
+ 40e818: 00000000 nop
+ 40e81c: 8fbc0010 lw gp,16(sp)
+ 40e820: 8e020038 lw v0,56(s0)
+ 40e824: 00000000 nop
+ 40e828: 10400005 beqz v0,40e840 <rewind+0x80>
+ 40e82c: 2604003c addiu a0,s0,60
+ 40e830: 8fbf0020 lw ra,32(sp)
+ 40e834: 8fb00018 lw s0,24(sp)
+ 40e838: 03e00008 jr ra
+ 40e83c: 27bd0028 addiu sp,sp,40
+ 40e840: 8f99811c lw t9,-32484(gp)
+ 40e844: 00000000 nop
+ 40e848: 0320f809 jalr t9
+ 40e84c: 00000000 nop
+ 40e850: 8fbc0010 lw gp,16(sp)
+ 40e854: 1000fff6 b 40e830 <rewind+0x70>
+ 40e858: 00000000 nop
+ 40e85c: 8f9980a8 lw t9,-32600(gp)
+ 40e860: 00000000 nop
+ 40e864: 0320f809 jalr t9
+ 40e868: 00000000 nop
+ 40e86c: 8fbc0010 lw gp,16(sp)
+ 40e870: 1000ffe0 b 40e7f4 <rewind+0x34>
+ 40e874: 00000000 nop
+ ...
+
+0040e880 <strdup>:
+ 40e880: 3c1c0fc0 lui gp,0xfc0
+ 40e884: 279c99d0 addiu gp,gp,-26160
+ 40e888: 0399e021 addu gp,gp,t9
+ 40e88c: 27bdffd8 addiu sp,sp,-40
+ 40e890: afbc0010 sw gp,16(sp)
+ 40e894: afb1001c sw s1,28(sp)
+ 40e898: afb00018 sw s0,24(sp)
+ 40e89c: afbf0024 sw ra,36(sp)
+ 40e8a0: afbc0020 sw gp,32(sp)
+ 40e8a4: 00808021 move s0,a0
+ 40e8a8: 8f998068 lw t9,-32664(gp)
+ 40e8ac: 00000000 nop
+ 40e8b0: 0320f809 jalr t9
+ 40e8b4: 00000000 nop
+ 40e8b8: 8fbc0010 lw gp,16(sp)
+ 40e8bc: 24420001 addiu v0,v0,1
+ 40e8c0: 00402021 move a0,v0
+ 40e8c4: 8f998230 lw t9,-32208(gp)
+ 40e8c8: 00000000 nop
+ 40e8cc: 0320f809 jalr t9
+ 40e8d0: 00000000 nop
+ 40e8d4: 8fbc0010 lw gp,16(sp)
+ 40e8d8: 00408821 move s1,v0
+ 40e8dc: 02002821 move a1,s0
+ 40e8e0: 12200006 beqz s1,40e8fc <strdup+0x7c>
+ 40e8e4: 02202021 move a0,s1
+ 40e8e8: 8f9982c4 lw t9,-32060(gp)
+ 40e8ec: 00000000 nop
+ 40e8f0: 0320f809 jalr t9
+ 40e8f4: 00000000 nop
+ 40e8f8: 8fbc0010 lw gp,16(sp)
+ 40e8fc: 02201021 move v0,s1
+ 40e900: 8fbf0024 lw ra,36(sp)
+ 40e904: 8fb1001c lw s1,28(sp)
+ 40e908: 8fb00018 lw s0,24(sp)
+ 40e90c: 03e00008 jr ra
+ 40e910: 27bd0028 addiu sp,sp,40
+ ...
+
+0040e920 <strncat>:
+ 40e920: 3c1c0fc0 lui gp,0xfc0
+ 40e924: 279c9930 addiu gp,gp,-26320
+ 40e928: 0399e021 addu gp,gp,t9
+ 40e92c: 00803821 move a3,a0
+ 40e930: 90e20000 lbu v0,0(a3)
+ 40e934: 00000000 nop
+ 40e938: 1440fffd bnez v0,40e930 <strncat+0x10>
+ 40e93c: 24e70001 addiu a3,a3,1
+ 40e940: 10000003 b 40e950 <strncat+0x30>
+ 40e944: 24e7ffff addiu a3,a3,-1
+ 40e948: 24c6ffff addiu a2,a2,-1
+ 40e94c: 24e70001 addiu a3,a3,1
+ 40e950: 10c00006 beqz a2,40e96c <strncat+0x4c>
+ 40e954: 00000000 nop
+ 40e958: 90a20000 lbu v0,0(a1)
+ 40e95c: 24a50001 addiu a1,a1,1
+ 40e960: 00021e00 sll v1,v0,0x18
+ 40e964: 1460fff8 bnez v1,40e948 <strncat+0x28>
+ 40e968: a0e20000 sb v0,0(a3)
+ 40e96c: a0e00000 sb zero,0(a3)
+ 40e970: 03e00008 jr ra
+ 40e974: 00801021 move v0,a0
+ ...
+
+0040e980 <inet_addr>:
+ 40e980: 3c1c0fc0 lui gp,0xfc0
+ 40e984: 279c98d0 addiu gp,gp,-26416
+ 40e988: 0399e021 addu gp,gp,t9
+ 40e98c: 27bdffd8 addiu sp,sp,-40
+ 40e990: afbc0010 sw gp,16(sp)
+ 40e994: 27a50018 addiu a1,sp,24
+ 40e998: afbf0024 sw ra,36(sp)
+ 40e99c: afbc0020 sw gp,32(sp)
+ 40e9a0: 8f998148 lw t9,-32440(gp)
+ 40e9a4: 00000000 nop
+ 40e9a8: 0320f809 jalr t9
+ 40e9ac: 00000000 nop
+ 40e9b0: 8fbc0010 lw gp,16(sp)
+ 40e9b4: 00401821 move v1,v0
+ 40e9b8: 10600002 beqz v1,40e9c4 <inet_addr+0x44>
+ 40e9bc: 2402ffff li v0,-1
+ 40e9c0: 8fa20018 lw v0,24(sp)
+ 40e9c4: 8fbf0024 lw ra,36(sp)
+ 40e9c8: 00000000 nop
+ 40e9cc: 03e00008 jr ra
+ 40e9d0: 27bd0028 addiu sp,sp,40
+ ...
+
+0040e9e0 <__encode_header>:
+ 40e9e0: 3c1c0fc0 lui gp,0xfc0
+ 40e9e4: 279c9870 addiu gp,gp,-26512
+ 40e9e8: 0399e021 addu gp,gp,t9
+ 40e9ec: 28c6000c slti a2,a2,12
+ 40e9f0: 14c0003b bnez a2,40eae0 <__encode_header+0x100>
+ 40e9f4: 2402ffff li v0,-1
+ 40e9f8: 90820002 lbu v0,2(a0)
+ 40e9fc: 00000000 nop
+ 40ea00: a0a20000 sb v0,0(a1)
+ 40ea04: 90820003 lbu v0,3(a0)
+ 40ea08: 00000000 nop
+ 40ea0c: a0a20001 sb v0,1(a1)
+ 40ea10: 8c820008 lw v0,8(a0)
+ 40ea14: 8c830004 lw v1,4(a0)
+ 40ea18: 3042000f andi v0,v0,0xf
+ 40ea1c: 10600002 beqz v1,40ea28 <__encode_header+0x48>
+ 40ea20: 000230c0 sll a2,v0,0x3
+ 40ea24: 34c60080 ori a2,a2,0x80
+ 40ea28: 8c82000c lw v0,12(a0)
+ 40ea2c: 00000000 nop
+ 40ea30: 10400002 beqz v0,40ea3c <__encode_header+0x5c>
+ 40ea34: 00c01821 move v1,a2
+ 40ea38: 34630004 ori v1,v1,0x4
+ 40ea3c: 8c820010 lw v0,16(a0)
+ 40ea40: 00000000 nop
+ 40ea44: 10400002 beqz v0,40ea50 <__encode_header+0x70>
+ 40ea48: 00000000 nop
+ 40ea4c: 34630002 ori v1,v1,0x2
+ 40ea50: 8c820014 lw v0,20(a0)
+ 40ea54: 00000000 nop
+ 40ea58: 0002102b sltu v0,zero,v0
+ 40ea5c: 00621025 or v0,v1,v0
+ 40ea60: a0a20002 sb v0,2(a1)
+ 40ea64: 8c82001c lw v0,28(a0)
+ 40ea68: 8c830018 lw v1,24(a0)
+ 40ea6c: 00000000 nop
+ 40ea70: 10600002 beqz v1,40ea7c <__encode_header+0x9c>
+ 40ea74: 3042000f andi v0,v0,0xf
+ 40ea78: 34420080 ori v0,v0,0x80
+ 40ea7c: a0a20003 sb v0,3(a1)
+ 40ea80: 90830022 lbu v1,34(a0)
+ 40ea84: 2402000c li v0,12
+ 40ea88: a0a30004 sb v1,4(a1)
+ 40ea8c: 90830023 lbu v1,35(a0)
+ 40ea90: 00000000 nop
+ 40ea94: a0a30005 sb v1,5(a1)
+ 40ea98: 90830026 lbu v1,38(a0)
+ 40ea9c: 00000000 nop
+ 40eaa0: a0a30006 sb v1,6(a1)
+ 40eaa4: 90830027 lbu v1,39(a0)
+ 40eaa8: 00000000 nop
+ 40eaac: a0a30007 sb v1,7(a1)
+ 40eab0: 9083002a lbu v1,42(a0)
+ 40eab4: 00000000 nop
+ 40eab8: a0a30008 sb v1,8(a1)
+ 40eabc: 9083002b lbu v1,43(a0)
+ 40eac0: 00000000 nop
+ 40eac4: a0a30009 sb v1,9(a1)
+ 40eac8: 9083002e lbu v1,46(a0)
+ 40eacc: 00000000 nop
+ 40ead0: a0a3000a sb v1,10(a1)
+ 40ead4: 9083002f lbu v1,47(a0)
+ 40ead8: 00000000 nop
+ 40eadc: a0a3000b sb v1,11(a1)
+ 40eae0: 03e00008 jr ra
+ 40eae4: 00000000 nop
+ ...
+
+0040eaf0 <__decode_header>:
+ 40eaf0: 3c1c0fc0 lui gp,0xfc0
+ 40eaf4: 279c9760 addiu gp,gp,-26784
+ 40eaf8: 0399e021 addu gp,gp,t9
+ 40eafc: 90820000 lbu v0,0(a0)
+ 40eb00: 90830001 lbu v1,1(a0)
+ 40eb04: 00021200 sll v0,v0,0x8
+ 40eb08: 00431025 or v0,v0,v1
+ 40eb0c: aca20000 sw v0,0(a1)
+ 40eb10: 90830002 lbu v1,2(a0)
+ 40eb14: 2402000c li v0,12
+ 40eb18: 000319c2 srl v1,v1,0x7
+ 40eb1c: aca30004 sw v1,4(a1)
+ 40eb20: 90830002 lbu v1,2(a0)
+ 40eb24: 00000000 nop
+ 40eb28: 000318c2 srl v1,v1,0x3
+ 40eb2c: 3063000f andi v1,v1,0xf
+ 40eb30: aca30008 sw v1,8(a1)
+ 40eb34: 90830002 lbu v1,2(a0)
+ 40eb38: 00000000 nop
+ 40eb3c: 00031882 srl v1,v1,0x2
+ 40eb40: 30630001 andi v1,v1,0x1
+ 40eb44: aca3000c sw v1,12(a1)
+ 40eb48: 90830002 lbu v1,2(a0)
+ 40eb4c: 00000000 nop
+ 40eb50: 00031842 srl v1,v1,0x1
+ 40eb54: 30630001 andi v1,v1,0x1
+ 40eb58: aca30010 sw v1,16(a1)
+ 40eb5c: 90830002 lbu v1,2(a0)
+ 40eb60: 00000000 nop
+ 40eb64: 30630001 andi v1,v1,0x1
+ 40eb68: aca30014 sw v1,20(a1)
+ 40eb6c: 90830003 lbu v1,3(a0)
+ 40eb70: 00000000 nop
+ 40eb74: 000319c2 srl v1,v1,0x7
+ 40eb78: aca30018 sw v1,24(a1)
+ 40eb7c: 90830003 lbu v1,3(a0)
+ 40eb80: 00000000 nop
+ 40eb84: 3063000f andi v1,v1,0xf
+ 40eb88: aca3001c sw v1,28(a1)
+ 40eb8c: 90830004 lbu v1,4(a0)
+ 40eb90: 90860005 lbu a2,5(a0)
+ 40eb94: 00031a00 sll v1,v1,0x8
+ 40eb98: 00661825 or v1,v1,a2
+ 40eb9c: aca30020 sw v1,32(a1)
+ 40eba0: 90830006 lbu v1,6(a0)
+ 40eba4: 90860007 lbu a2,7(a0)
+ 40eba8: 00031a00 sll v1,v1,0x8
+ 40ebac: 00661825 or v1,v1,a2
+ 40ebb0: aca30024 sw v1,36(a1)
+ 40ebb4: 90830008 lbu v1,8(a0)
+ 40ebb8: 90860009 lbu a2,9(a0)
+ 40ebbc: 00031a00 sll v1,v1,0x8
+ 40ebc0: 00661825 or v1,v1,a2
+ 40ebc4: aca30028 sw v1,40(a1)
+ 40ebc8: 9083000a lbu v1,10(a0)
+ 40ebcc: 9084000b lbu a0,11(a0)
+ 40ebd0: 00031a00 sll v1,v1,0x8
+ 40ebd4: 00641825 or v1,v1,a0
+ 40ebd8: 03e00008 jr ra
+ 40ebdc: aca3002c sw v1,44(a1)
+
+0040ebe0 <__encode_question>:
+ 40ebe0: 3c1c0fc0 lui gp,0xfc0
+ 40ebe4: 279c9670 addiu gp,gp,-27024
+ 40ebe8: 0399e021 addu gp,gp,t9
+ 40ebec: 27bdffd0 addiu sp,sp,-48
+ 40ebf0: afbc0010 sw gp,16(sp)
+ 40ebf4: afb20020 sw s2,32(sp)
+ 40ebf8: afb1001c sw s1,28(sp)
+ 40ebfc: afb00018 sw s0,24(sp)
+ 40ec00: afbf0028 sw ra,40(sp)
+ 40ec04: afbc0024 sw gp,36(sp)
+ 40ec08: 00809021 move s2,a0
+ 40ec0c: 8e440000 lw a0,0(s2)
+ 40ec10: 00c08021 move s0,a2
+ 40ec14: 00a08821 move s1,a1
+ 40ec18: 8f998054 lw t9,-32684(gp)
+ 40ec1c: 00000000 nop
+ 40ec20: 0320f809 jalr t9
+ 40ec24: 00000000 nop
+ 40ec28: 8fbc0010 lw gp,16(sp)
+ 40ec2c: 00401821 move v1,v0
+ 40ec30: 02038023 subu s0,s0,v1
+ 40ec34: 04600011 bltz v1,40ec7c <__encode_question+0x9c>
+ 40ec38: 2a100004 slti s0,s0,4
+ 40ec3c: 24640004 addiu a0,v1,4
+ 40ec40: 02238821 addu s1,s1,v1
+ 40ec44: 1600000d bnez s0,40ec7c <__encode_question+0x9c>
+ 40ec48: 2402ffff li v0,-1
+ 40ec4c: 92430006 lbu v1,6(s2)
+ 40ec50: 00801021 move v0,a0
+ 40ec54: a2230000 sb v1,0(s1)
+ 40ec58: 92430007 lbu v1,7(s2)
+ 40ec5c: 00000000 nop
+ 40ec60: a2230001 sb v1,1(s1)
+ 40ec64: 9243000a lbu v1,10(s2)
+ 40ec68: 00000000 nop
+ 40ec6c: a2230002 sb v1,2(s1)
+ 40ec70: 9243000b lbu v1,11(s2)
+ 40ec74: 00000000 nop
+ 40ec78: a2230003 sb v1,3(s1)
+ 40ec7c: 8fbf0028 lw ra,40(sp)
+ 40ec80: 8fb20020 lw s2,32(sp)
+ 40ec84: 8fb1001c lw s1,28(sp)
+ 40ec88: 8fb00018 lw s0,24(sp)
+ 40ec8c: 03e00008 jr ra
+ 40ec90: 27bd0030 addiu sp,sp,48
+ ...
+
+0040eca0 <__length_question>:
+ 40eca0: 3c1c0fc0 lui gp,0xfc0
+ 40eca4: 279c95b0 addiu gp,gp,-27216
+ 40eca8: 0399e021 addu gp,gp,t9
+ 40ecac: 27bdffe0 addiu sp,sp,-32
+ 40ecb0: afbc0010 sw gp,16(sp)
+ 40ecb4: afbf001c sw ra,28(sp)
+ 40ecb8: afbc0018 sw gp,24(sp)
+ 40ecbc: 8f998164 lw t9,-32412(gp)
+ 40ecc0: 00000000 nop
+ 40ecc4: 0320f809 jalr t9
+ 40ecc8: 00000000 nop
+ 40eccc: 8fbc0010 lw gp,16(sp)
+ 40ecd0: 00401821 move v1,v0
+ 40ecd4: 04600002 bltz v1,40ece0 <__length_question+0x40>
+ 40ecd8: 00000000 nop
+ 40ecdc: 24620004 addiu v0,v1,4
+ 40ece0: 8fbf001c lw ra,28(sp)
+ 40ece4: 00000000 nop
+ 40ece8: 03e00008 jr ra
+ 40ecec: 27bd0020 addiu sp,sp,32
+
+0040ecf0 <__decode_answer>:
+ 40ecf0: 3c1c0fc0 lui gp,0xfc0
+ 40ecf4: 279c9560 addiu gp,gp,-27296
+ 40ecf8: 0399e021 addu gp,gp,t9
+ 40ecfc: 27bdfed0 addiu sp,sp,-304
+ 40ed00: afbc0010 sw gp,16(sp)
+ 40ed04: afb20120 sw s2,288(sp)
+ 40ed08: 24070100 li a3,256
+ 40ed0c: 00c09021 move s2,a2
+ 40ed10: 27a60018 addiu a2,sp,24
+ 40ed14: afb30124 sw s3,292(sp)
+ 40ed18: afb1011c sw s1,284(sp)
+ 40ed1c: afb00118 sw s0,280(sp)
+ 40ed20: 00808821 move s1,a0
+ 40ed24: 00a08021 move s0,a1
+ 40ed28: afbf012c sw ra,300(sp)
+ 40ed2c: afbc0128 sw gp,296(sp)
+ 40ed30: 8f9981a4 lw t9,-32348(gp)
+ 40ed34: 00000000 nop
+ 40ed38: 0320f809 jalr t9
+ 40ed3c: 00000000 nop
+ 40ed40: 8fbc0010 lw gp,16(sp)
+ 40ed44: 00409821 move s3,v0
+ 40ed48: 02138021 addu s0,s0,s3
+ 40ed4c: 27a40018 addiu a0,sp,24
+ 40ed50: 0660002a bltz s3,40edfc <__decode_answer+0x10c>
+ 40ed54: 02308821 addu s1,s1,s0
+ 40ed58: 8f99814c lw t9,-32436(gp)
+ 40ed5c: 00000000 nop
+ 40ed60: 0320f809 jalr t9
+ 40ed64: 00000000 nop
+ 40ed68: 8fbc0010 lw gp,16(sp)
+ 40ed6c: ae420000 sw v0,0(s2)
+ 40ed70: 92220000 lbu v0,0(s1)
+ 40ed74: 92230001 lbu v1,1(s1)
+ 40ed78: 00021200 sll v0,v0,0x8
+ 40ed7c: 00431025 or v0,v0,v1
+ 40ed80: ae420004 sw v0,4(s2)
+ 40ed84: 26310002 addiu s1,s1,2
+ 40ed88: 92220000 lbu v0,0(s1)
+ 40ed8c: 92230001 lbu v1,1(s1)
+ 40ed90: 00021200 sll v0,v0,0x8
+ 40ed94: 00431025 or v0,v0,v1
+ 40ed98: ae420008 sw v0,8(s2)
+ 40ed9c: 26310002 addiu s1,s1,2
+ 40eda0: 92220000 lbu v0,0(s1)
+ 40eda4: 92230001 lbu v1,1(s1)
+ 40eda8: 92240002 lbu a0,2(s1)
+ 40edac: 00031c00 sll v1,v1,0x10
+ 40edb0: 00021600 sll v0,v0,0x18
+ 40edb4: 00431025 or v0,v0,v1
+ 40edb8: 00042200 sll a0,a0,0x8
+ 40edbc: 92230003 lbu v1,3(s1)
+ 40edc0: 00441025 or v0,v0,a0
+ 40edc4: 00431025 or v0,v0,v1
+ 40edc8: 26310004 addiu s1,s1,4
+ 40edcc: ae42000c sw v0,12(s2)
+ 40edd0: 92230000 lbu v1,0(s1)
+ 40edd4: 92220001 lbu v0,1(s1)
+ 40edd8: 00031a00 sll v1,v1,0x8
+ 40eddc: 00621825 or v1,v1,v0
+ 40ede0: 2605000a addiu a1,s0,10
+ 40ede4: 02631021 addu v0,s3,v1
+ 40ede8: 26310002 addiu s1,s1,2
+ 40edec: ae450018 sw a1,24(s2)
+ 40edf0: ae510014 sw s1,20(s2)
+ 40edf4: 2442000a addiu v0,v0,10
+ 40edf8: ae430010 sw v1,16(s2)
+ 40edfc: 8fbf012c lw ra,300(sp)
+ 40ee00: 8fb30124 lw s3,292(sp)
+ 40ee04: 8fb20120 lw s2,288(sp)
+ 40ee08: 8fb1011c lw s1,284(sp)
+ 40ee0c: 8fb00118 lw s0,280(sp)
+ 40ee10: 03e00008 jr ra
+ 40ee14: 27bd0130 addiu sp,sp,304
+ ...
+
+0040ee20 <__open_etc_hosts>:
+ 40ee20: 3c1c0fc0 lui gp,0xfc0
+ 40ee24: 279c9430 addiu gp,gp,-27600
+ 40ee28: 0399e021 addu gp,gp,t9
+ 40ee2c: 27bdffd8 addiu sp,sp,-40
+ 40ee30: afbc0010 sw gp,16(sp)
+ 40ee34: afb00018 sw s0,24(sp)
+ 40ee38: 8f908018 lw s0,-32744(gp)
+ 40ee3c: 00000000 nop
+ 40ee40: 26101320 addiu s0,s0,4896
+ 40ee44: afb1001c sw s1,28(sp)
+ 40ee48: 02002821 move a1,s0
+ 40ee4c: 00808821 move s1,a0
+ 40ee50: 8f848018 lw a0,-32744(gp)
+ 40ee54: 00000000 nop
+ 40ee58: 24841324 addiu a0,a0,4900
+ 40ee5c: afbf0024 sw ra,36(sp)
+ 40ee60: afbc0020 sw gp,32(sp)
+ 40ee64: 8f998140 lw t9,-32448(gp)
+ 40ee68: 00000000 nop
+ 40ee6c: 0320f809 jalr t9
+ 40ee70: 00000000 nop
+ 40ee74: 8fbc0010 lw gp,16(sp)
+ 40ee78: ae220000 sw v0,0(s1)
+ 40ee7c: 8f848018 lw a0,-32744(gp)
+ 40ee80: 00000000 nop
+ 40ee84: 24841330 addiu a0,a0,4912
+ 40ee88: 10400006 beqz v0,40eea4 <__open_etc_hosts+0x84>
+ 40ee8c: 02002821 move a1,s0
+ 40ee90: 8fbf0024 lw ra,36(sp)
+ 40ee94: 8fb1001c lw s1,28(sp)
+ 40ee98: 8fb00018 lw s0,24(sp)
+ 40ee9c: 03e00008 jr ra
+ 40eea0: 27bd0028 addiu sp,sp,40
+ 40eea4: 8f998140 lw t9,-32448(gp)
+ 40eea8: 00000000 nop
+ 40eeac: 0320f809 jalr t9
+ 40eeb0: 00000000 nop
+ 40eeb4: 8fbc0010 lw gp,16(sp)
+ 40eeb8: 1000fff5 b 40ee90 <__open_etc_hosts+0x70>
+ 40eebc: ae220000 sw v0,0(s1)
+
+0040eec0 <__read_etc_hosts_r>:
+ 40eec0: 3c1c0fc0 lui gp,0xfc0
+ 40eec4: 279c9390 addiu gp,gp,-27760
+ 40eec8: 0399e021 addu gp,gp,t9
+ 40eecc: 27bdffb0 addiu sp,sp,-80
+ 40eed0: afbc0010 sw gp,16(sp)
+ 40eed4: afb20028 sw s2,40(sp)
+ 40eed8: 8fb20068 lw s2,104(sp)
+ 40eedc: 24020001 li v0,1
+ 40eee0: 2e430020 sltiu v1,s2,32
+ 40eee4: afbe0044 sw s8,68(sp)
+ 40eee8: afb7003c sw s7,60(sp)
+ 40eeec: afb60038 sw s6,56(sp)
+ 40eef0: afb10024 sw s1,36(sp)
+ 40eef4: afb00020 sw s0,32(sp)
+ 40eef8: afa2001c sw v0,28(sp)
+ 40eefc: afbf0048 sw ra,72(sp)
+ 40ef00: afbc0040 sw gp,64(sp)
+ 40ef04: afb50034 sw s5,52(sp)
+ 40ef08: afb40030 sw s4,48(sp)
+ 40ef0c: afb3002c sw s3,44(sp)
+ 40ef10: afa40050 sw a0,80(sp)
+ 40ef14: afa50054 sw a1,84(sp)
+ 40ef18: afa60058 sw a2,88(sp)
+ 40ef1c: 00e0f021 move s8,a3
+ 40ef20: 8fb60060 lw s6,96(sp)
+ 40ef24: 8fb10064 lw s1,100(sp)
+ 40ef28: 8fb00070 lw s0,112(sp)
+ 40ef2c: afa00018 sw zero,24(sp)
+ 40ef30: 0000b821 move s7,zero
+ 40ef34: 14600088 bnez v1,40f158 <__read_etc_hosts_r+0x298>
+ 40ef38: 24020022 li v0,34
+ 40ef3c: 8fa3001c lw v1,28(sp)
+ 40ef40: 0220a021 move s4,s1
+ 40ef44: 2652ffe0 addiu s2,s2,-32
+ 40ef48: 13c3001b beq s8,v1,40efb8 <__read_etc_hosts_r+0xf8>
+ 40ef4c: 26310020 addiu s1,s1,32
+ 40ef50: 2402ffff li v0,-1
+ 40ef54: 2e430004 sltiu v1,s2,4
+ 40ef58: ae020000 sw v0,0(s0)
+ 40ef5c: 1460007e bnez v1,40f158 <__read_etc_hosts_r+0x298>
+ 40ef60: 24020022 li v0,34
+ 40ef64: 2652fffc addiu s2,s2,-4
+ 40ef68: 2e430008 sltiu v1,s2,8
+ 40ef6c: afb10018 sw s1,24(sp)
+ 40ef70: 14600079 bnez v1,40f158 <__read_etc_hosts_r+0x298>
+ 40ef74: 26310004 addiu s1,s1,4
+ 40ef78: 2652fff8 addiu s2,s2,-8
+ 40ef7c: 2e430050 sltiu v1,s2,80
+ 40ef80: 0220b821 move s7,s1
+ 40ef84: 14600074 bnez v1,40f158 <__read_etc_hosts_r+0x298>
+ 40ef88: 26310008 addiu s1,s1,8
+ 40ef8c: 27a20050 addiu v0,sp,80
+ 40ef90: 00402021 move a0,v0
+ 40ef94: 8f998234 lw t9,-32204(gp)
+ 40ef98: 00000000 nop
+ 40ef9c: 0320f809 jalr t9
+ 40efa0: 00000000 nop
+ 40efa4: 8fbc0010 lw gp,16(sp)
+ 40efa8: 8fa20050 lw v0,80(sp)
+ 40efac: 00000000 nop
+ 40efb0: 104000a3 beqz v0,40f240 <__read_etc_hosts_r+0x380>
+ 40efb4: 00000000 nop
+ 40efb8: 24020001 li v0,1
+ 40efbc: ae020000 sw v0,0(s0)
+ 40efc0: 8fa60050 lw a2,80(sp)
+ 40efc4: 02202021 move a0,s1
+ 40efc8: 02402821 move a1,s2
+ 40efcc: 8f998268 lw t9,-32152(gp)
+ 40efd0: 00000000 nop
+ 40efd4: 0320f809 jalr t9
+ 40efd8: 00000000 nop
+ 40efdc: 8fbc0010 lw gp,16(sp)
+ 40efe0: 10400053 beqz v0,40f130 <__read_etc_hosts_r+0x270>
+ 40efe4: 02202021 move a0,s1
+ 40efe8: 24050023 li a1,35
+ 40efec: 8f99805c lw t9,-32676(gp)
+ 40eff0: 00000000 nop
+ 40eff4: 0320f809 jalr t9
+ 40eff8: 00000000 nop
+ 40effc: 8fbc0010 lw gp,16(sp)
+ 40f000: 00408021 move s0,v0
+ 40f004: 12000002 beqz s0,40f010 <__read_etc_hosts_r+0x150>
+ 40f008: 00000000 nop
+ 40f00c: a2000000 sb zero,0(s0)
+ 40f010: 82220000 lb v0,0(s1)
+ 40f014: 0000a821 move s5,zero
+ 40f018: 10400028 beqz v0,40f0bc <__read_etc_hosts_r+0x1fc>
+ 40f01c: 02208021 move s0,s1
+ 40f020: 02809821 move s3,s4
+ 40f024: 82020000 lb v0,0(s0)
+ 40f028: 00000000 nop
+ 40f02c: 10400023 beqz v0,40f0bc <__read_etc_hosts_r+0x1fc>
+ 40f030: 00402021 move a0,v0
+ 40f034: 8f998210 lw t9,-32240(gp)
+ 40f038: 00000000 nop
+ 40f03c: 0320f809 jalr t9
+ 40f040: 00000000 nop
+ 40f044: 8fbc0010 lw gp,16(sp)
+ 40f048: 10400004 beqz v0,40f05c <__read_etc_hosts_r+0x19c>
+ 40f04c: 00000000 nop
+ 40f050: a2000000 sb zero,0(s0)
+ 40f054: 1000fff3 b 40f024 <__read_etc_hosts_r+0x164>
+ 40f058: 26100001 addiu s0,s0,1
+ 40f05c: 82020000 lb v0,0(s0)
+ 40f060: 00000000 nop
+ 40f064: 10400015 beqz v0,40f0bc <__read_etc_hosts_r+0x1fc>
+ 40f068: 2aa20007 slti v0,s5,7
+ 40f06c: 10400004 beqz v0,40f080 <__read_etc_hosts_r+0x1c0>
+ 40f070: 00000000 nop
+ 40f074: ae700000 sw s0,0(s3)
+ 40f078: 26b50001 addiu s5,s5,1
+ 40f07c: 26730004 addiu s3,s3,4
+ 40f080: 82020000 lb v0,0(s0)
+ 40f084: 00000000 nop
+ 40f088: 1040000c beqz v0,40f0bc <__read_etc_hosts_r+0x1fc>
+ 40f08c: 00402021 move a0,v0
+ 40f090: 8f998210 lw t9,-32240(gp)
+ 40f094: 00000000 nop
+ 40f098: 0320f809 jalr t9
+ 40f09c: 00000000 nop
+ 40f0a0: 8fbc0010 lw gp,16(sp)
+ 40f0a4: 10400064 beqz v0,40f238 <__read_etc_hosts_r+0x378>
+ 40f0a8: 00000000 nop
+ 40f0ac: 82020000 lb v0,0(s0)
+ 40f0b0: 00000000 nop
+ 40f0b4: 1440ffdd bnez v0,40f02c <__read_etc_hosts_r+0x16c>
+ 40f0b8: 00000000 nop
+ 40f0bc: 00151080 sll v0,s5,0x2
+ 40f0c0: 00541021 addu v0,v0,s4
+ 40f0c4: 2aa30002 slti v1,s5,2
+ 40f0c8: 1460ffbd bnez v1,40efc0 <__read_etc_hosts_r+0x100>
+ 40f0cc: ac400000 sw zero,0(v0)
+ 40f0d0: 24020001 li v0,1
+ 40f0d4: 13c2001f beq s8,v0,40f154 <__read_etc_hosts_r+0x294>
+ 40f0d8: 24020002 li v0,2
+ 40f0dc: 13c2004b beq s8,v0,40f20c <__read_etc_hosts_r+0x34c>
+ 40f0e0: 24130001 li s3,1
+ 40f0e4: 26900004 addiu s0,s4,4
+ 40f0e8: 0275102a slt v0,s3,s5
+ 40f0ec: 8fa40054 lw a0,84(sp)
+ 40f0f0: 1040ffb3 beqz v0,40efc0 <__read_etc_hosts_r+0x100>
+ 40f0f4: 26730001 addiu s3,s3,1
+ 40f0f8: 8e050000 lw a1,0(s0)
+ 40f0fc: 8f998184 lw t9,-32380(gp)
+ 40f100: 00000000 nop
+ 40f104: 0320f809 jalr t9
+ 40f108: 00000000 nop
+ 40f10c: 8fbc0010 lw gp,16(sp)
+ 40f110: 1440fff5 bnez v0,40f0e8 <__read_etc_hosts_r+0x228>
+ 40f114: 26100004 addiu s0,s0,4
+ 40f118: 8fa30058 lw v1,88(sp)
+ 40f11c: 24020002 li v0,2
+ 40f120: 10620019 beq v1,v0,40f188 <__read_etc_hosts_r+0x2c8>
+ 40f124: 24040002 li a0,2
+ 40f128: 24020002 li v0,2
+ 40f12c: afa2001c sw v0,28(sp)
+ 40f130: 24020001 li v0,1
+ 40f134: 13c20007 beq s8,v0,40f154 <__read_etc_hosts_r+0x294>
+ 40f138: 00000000 nop
+ 40f13c: 8fa40050 lw a0,80(sp)
+ 40f140: 8f998134 lw t9,-32460(gp)
+ 40f144: 00000000 nop
+ 40f148: 0320f809 jalr t9
+ 40f14c: 00000000 nop
+ 40f150: 8fbc0010 lw gp,16(sp)
+ 40f154: 8fa2001c lw v0,28(sp)
+ 40f158: 8fbf0048 lw ra,72(sp)
+ 40f15c: 8fbe0044 lw s8,68(sp)
+ 40f160: 8fb7003c lw s7,60(sp)
+ 40f164: 8fb60038 lw s6,56(sp)
+ 40f168: 8fb50034 lw s5,52(sp)
+ 40f16c: 8fb40030 lw s4,48(sp)
+ 40f170: 8fb3002c lw s3,44(sp)
+ 40f174: 8fb20028 lw s2,40(sp)
+ 40f178: 8fb10024 lw s1,36(sp)
+ 40f17c: 8fb00020 lw s0,32(sp)
+ 40f180: 03e00008 jr ra
+ 40f184: 27bd0050 addiu sp,sp,80
+ 40f188: 8e850000 lw a1,0(s4)
+ 40f18c: 8fa60018 lw a2,24(sp)
+ 40f190: 8f998288 lw t9,-32120(gp)
+ 40f194: 00000000 nop
+ 40f198: 0320f809 jalr t9
+ 40f19c: 00000000 nop
+ 40f1a0: 8fbc0010 lw gp,16(sp)
+ 40f1a4: 1840ffe1 blez v0,40f12c <__read_etc_hosts_r+0x26c>
+ 40f1a8: 24020002 li v0,2
+ 40f1ac: 8fa20018 lw v0,24(sp)
+ 40f1b0: aee00004 sw zero,4(s7)
+ 40f1b4: aee20000 sw v0,0(s7)
+ 40f1b8: 8e820004 lw v0,4(s4)
+ 40f1bc: 26830008 addiu v1,s4,8
+ 40f1c0: aec20000 sw v0,0(s6)
+ 40f1c4: 8fa20058 lw v0,88(sp)
+ 40f1c8: aed70010 sw s7,16(s6)
+ 40f1cc: aec20008 sw v0,8(s6)
+ 40f1d0: 24020004 li v0,4
+ 40f1d4: aec2000c sw v0,12(s6)
+ 40f1d8: aec30004 sw v1,4(s6)
+ 40f1dc: 8fa3006c lw v1,108(sp)
+ 40f1e0: 24020001 li v0,1
+ 40f1e4: 13c20007 beq s8,v0,40f204 <__read_etc_hosts_r+0x344>
+ 40f1e8: ac760000 sw s6,0(v1)
+ 40f1ec: 8fa40050 lw a0,80(sp)
+ 40f1f0: 8f998134 lw t9,-32460(gp)
+ 40f1f4: 00000000 nop
+ 40f1f8: 0320f809 jalr t9
+ 40f1fc: 00000000 nop
+ 40f200: 8fbc0010 lw gp,16(sp)
+ 40f204: 1000ffd4 b 40f158 <__read_etc_hosts_r+0x298>
+ 40f208: 00001021 move v0,zero
+ 40f20c: 8e850000 lw a1,0(s4)
+ 40f210: 8fa40054 lw a0,84(sp)
+ 40f214: 8f998120 lw t9,-32480(gp)
+ 40f218: 00000000 nop
+ 40f21c: 0320f809 jalr t9
+ 40f220: 00000000 nop
+ 40f224: 8fbc0010 lw gp,16(sp)
+ 40f228: 1040ffbb beqz v0,40f118 <__read_etc_hosts_r+0x258>
+ 40f22c: 00000000 nop
+ 40f230: 1000ff63 b 40efc0 <__read_etc_hosts_r+0x100>
+ 40f234: 00000000 nop
+ 40f238: 1000ff91 b 40f080 <__read_etc_hosts_r+0x1c0>
+ 40f23c: 26100001 addiu s0,s0,1
+ 40f240: 8f9980a0 lw t9,-32608(gp)
+ 40f244: 00000000 nop
+ 40f248: 0320f809 jalr t9
+ 40f24c: 00000000 nop
+ 40f250: 8fbc0010 lw gp,16(sp)
+ 40f254: 8c420000 lw v0,0(v0)
+ 40f258: 1000ffbf b 40f158 <__read_etc_hosts_r+0x298>
+ 40f25c: 00000000 nop
+ 40f260: 3c1c0fc0 lui gp,0xfc0
+ 40f264: 279c8ff0 addiu gp,gp,-28688
+ 40f268: 0399e021 addu gp,gp,t9
+ 40f26c: 27bdffb8 addiu sp,sp,-72
+ 40f270: afbc0010 sw gp,16(sp)
+ 40f274: afb3003c sw s3,60(sp)
+ 40f278: afb20038 sw s2,56(sp)
+ 40f27c: afb10034 sw s1,52(sp)
+ 40f280: 00a09821 move s3,a1
+ 40f284: 00808821 move s1,a0
+ 40f288: 00c09021 move s2,a2
+ 40f28c: 27a4001a addiu a0,sp,26
+ 40f290: 00002821 move a1,zero
+ 40f294: 2406000f li a2,15
+ 40f298: 8f828018 lw v0,-32744(gp)
+ 40f29c: 00000000 nop
+ 40f2a0: 24421350 addiu v0,v0,4944
+ 40f2a4: 80420000 lb v0,0(v0)
+ 40f2a8: 8f838018 lw v1,-32744(gp)
+ 40f2ac: 00000000 nop
+ 40f2b0: 24631350 addiu v1,v1,4944
+ 40f2b4: 80630001 lb v1,1(v1)
+ 40f2b8: a3a20018 sb v0,24(sp)
+ 40f2bc: a3a30019 sb v1,25(sp)
+ 40f2c0: afbf0044 sw ra,68(sp)
+ 40f2c4: afbc0040 sw gp,64(sp)
+ 40f2c8: afb00030 sw s0,48(sp)
+ 40f2cc: 8f99813c lw t9,-32452(gp)
+ 40f2d0: 00000000 nop
+ 40f2d4: 0320f809 jalr t9
+ 40f2d8: 00000000 nop
+ 40f2dc: 8fbc0010 lw gp,16(sp)
+ 40f2e0: 00004021 move t0,zero
+ 40f2e4: 00006021 move t4,zero
+ 40f2e8: 022c6821 addu t5,s1,t4
+ 40f2ec: 91a40000 lbu a0,0(t5)
+ 40f2f0: 3c0251eb lui v0,0x51eb
+ 40f2f4: 3442851f ori v0,v0,0x851f
+ 40f2f8: 00820019 multu a0,v0
+ 40f2fc: 27b00018 addiu s0,sp,24
+ 40f300: 02081821 addu v1,s0,t0
+ 40f304: 25080001 addiu t0,t0,1
+ 40f308: 250affff addiu t2,t0,-1
+ 40f30c: 020a4821 addu t1,s0,t2
+ 40f310: 3c06cccc lui a2,0xcccc
+ 40f314: 34c6cccd ori a2,a2,0xcccd
+ 40f318: 00c02821 move a1,a2
+ 40f31c: 00001010 mfhi v0
+ 40f320: 00021142 srl v0,v0,0x5
+ 40f324: 24420030 addiu v0,v0,48
+ 40f328: a0620000 sb v0,0(v1)
+ 40f32c: 81270000 lb a3,0(t1)
+ 40f330: 24020030 li v0,48
+ 40f334: 10e20047 beq a3,v0,40f454 <__read_etc_hosts_r+0x594>
+ 40f338: 02085821 addu t3,s0,t0
+ 40f33c: 00850019 multu a0,a1
+ 40f340: 25080001 addiu t0,t0,1
+ 40f344: 00002010 mfhi a0
+ 40f348: 000420c2 srl a0,a0,0x3
+ 40f34c: 308400ff andi a0,a0,0xff
+ 40f350: 00850019 multu a0,a1
+ 40f354: 00001810 mfhi v1
+ 40f358: 000318c2 srl v1,v1,0x3
+ 40f35c: 00031080 sll v0,v1,0x2
+ 40f360: 00431021 addu v0,v0,v1
+ 40f364: 00021040 sll v0,v0,0x1
+ 40f368: 00822023 subu a0,a0,v0
+ 40f36c: 24840030 addiu a0,a0,48
+ 40f370: a1640000 sb a0,0(t3)
+ 40f374: 91a40000 lbu a0,0(t5)
+ 40f378: 3c03cccc lui v1,0xcccc
+ 40f37c: 3463cccd ori v1,v1,0xcccd
+ 40f380: 00830019 multu a0,v1
+ 40f384: 02083821 addu a3,s0,t0
+ 40f388: 258c0001 addiu t4,t4,1
+ 40f38c: 25080001 addiu t0,t0,1
+ 40f390: 02082821 addu a1,s0,t0
+ 40f394: 29860004 slti a2,t4,4
+ 40f398: 25080001 addiu t0,t0,1
+ 40f39c: 00001810 mfhi v1
+ 40f3a0: 000318c2 srl v1,v1,0x3
+ 40f3a4: 00031080 sll v0,v1,0x2
+ 40f3a8: 00431021 addu v0,v0,v1
+ 40f3ac: 00021040 sll v0,v0,0x1
+ 40f3b0: 00822023 subu a0,a0,v0
+ 40f3b4: 24840030 addiu a0,a0,48
+ 40f3b8: 2402002e li v0,46
+ 40f3bc: a0e40000 sb a0,0(a3)
+ 40f3c0: 14c0ffc9 bnez a2,40f2e8 <__read_etc_hosts_r+0x428>
+ 40f3c4: a0a20000 sb v0,0(a1)
+ 40f3c8: 01101021 addu v0,t0,s0
+ 40f3cc: a040ffff sb zero,-1(v0)
+ 40f3d0: 02002021 move a0,s0
+ 40f3d4: 8f998068 lw t9,-32664(gp)
+ 40f3d8: 00000000 nop
+ 40f3dc: 0320f809 jalr t9
+ 40f3e0: 00000000 nop
+ 40f3e4: 8fbc0010 lw gp,16(sp)
+ 40f3e8: 0242102b sltu v0,s2,v0
+ 40f3ec: 10400011 beqz v0,40f434 <__read_etc_hosts_r+0x574>
+ 40f3f0: 02602021 move a0,s3
+ 40f3f4: 8f9980a0 lw t9,-32608(gp)
+ 40f3f8: 00000000 nop
+ 40f3fc: 0320f809 jalr t9
+ 40f400: 00000000 nop
+ 40f404: 8fbc0010 lw gp,16(sp)
+ 40f408: 00402021 move a0,v0
+ 40f40c: 2403001c li v1,28
+ 40f410: 00001021 move v0,zero
+ 40f414: ac830000 sw v1,0(a0)
+ 40f418: 8fbf0044 lw ra,68(sp)
+ 40f41c: 8fb3003c lw s3,60(sp)
+ 40f420: 8fb20038 lw s2,56(sp)
+ 40f424: 8fb10034 lw s1,52(sp)
+ 40f428: 8fb00030 lw s0,48(sp)
+ 40f42c: 03e00008 jr ra
+ 40f430: 27bd0048 addiu sp,sp,72
+ 40f434: 02002821 move a1,s0
+ 40f438: 8f9982c4 lw t9,-32060(gp)
+ 40f43c: 00000000 nop
+ 40f440: 0320f809 jalr t9
+ 40f444: 00000000 nop
+ 40f448: 8fbc0010 lw gp,16(sp)
+ 40f44c: 1000fff2 b 40f418 <__read_etc_hosts_r+0x558>
+ 40f450: 00000000 nop
+ 40f454: 00860019 multu a0,a2
+ 40f458: 00002010 mfhi a0
+ 40f45c: 000420c2 srl a0,a0,0x3
+ 40f460: 308400ff andi a0,a0,0xff
+ 40f464: 00860019 multu a0,a2
+ 40f468: 00001810 mfhi v1
+ 40f46c: 000318c2 srl v1,v1,0x3
+ 40f470: 00031080 sll v0,v1,0x2
+ 40f474: 00431021 addu v0,v0,v1
+ 40f478: 00021040 sll v0,v0,0x1
+ 40f47c: 00822023 subu a0,a0,v0
+ 40f480: 24840030 addiu a0,a0,48
+ 40f484: 00041600 sll v0,a0,0x18
+ 40f488: 00021603 sra v0,v0,0x18
+ 40f48c: 1447ffb9 bne v0,a3,40f374 <__read_etc_hosts_r+0x4b4>
+ 40f490: a1240000 sb a0,0(t1)
+ 40f494: 1000ffb7 b 40f374 <__read_etc_hosts_r+0x4b4>
+ 40f498: 01404021 move t0,t2
+ 40f49c: 3c1c0fc0 lui gp,0xfc0
+ 40f4a0: 279c8db4 addiu gp,gp,-29260
+ 40f4a4: 0399e021 addu gp,gp,t9
+ 40f4a8: 27bdffd8 addiu sp,sp,-40
+ 40f4ac: afbc0010 sw gp,16(sp)
+ 40f4b0: 00803821 move a3,a0
+ 40f4b4: afbf0024 sw ra,36(sp)
+ 40f4b8: afbc0020 sw gp,32(sp)
+ 40f4bc: 80e60000 lb a2,0(a3)
+ 40f4c0: 00005021 move t2,zero
+ 40f4c4: a3a00018 sb zero,24(sp)
+ 40f4c8: 00004821 move t1,zero
+ 40f4cc: 27a80018 addiu t0,sp,24
+ 40f4d0: 10c00015 beqz a2,40f528 <__read_etc_hosts_r+0x668>
+ 40f4d4: 24e70001 addiu a3,a3,1
+ 40f4d8: 24c2ffd0 addiu v0,a2,-48
+ 40f4dc: 2c42000a sltiu v0,v0,10
+ 40f4e0: 10400029 beqz v0,40f588 <__read_etc_hosts_r+0x6c8>
+ 40f4e4: 2402002e li v0,46
+ 40f4e8: 91030000 lbu v1,0(t0)
+ 40f4ec: 00000000 nop
+ 40f4f0: 00032080 sll a0,v1,0x2
+ 40f4f4: 00832021 addu a0,a0,v1
+ 40f4f8: 00042040 sll a0,a0,0x1
+ 40f4fc: 00862021 addu a0,a0,a2
+ 40f500: 2484ffd0 addiu a0,a0,-48
+ 40f504: 2c830100 sltiu v1,a0,256
+ 40f508: 1060000b beqz v1,40f538 <__read_etc_hosts_r+0x678>
+ 40f50c: 00001021 move v0,zero
+ 40f510: 11400017 beqz t2,40f570 <__read_etc_hosts_r+0x6b0>
+ 40f514: a1040000 sb a0,0(t0)
+ 40f518: 80e60000 lb a2,0(a3)
+ 40f51c: 00000000 nop
+ 40f520: 14c0ffed bnez a2,40f4d8 <__read_etc_hosts_r+0x618>
+ 40f524: 24e70001 addiu a3,a3,1
+ 40f528: 29220004 slti v0,t1,4
+ 40f52c: 10400006 beqz v0,40f548 <__read_etc_hosts_r+0x688>
+ 40f530: 00000000 nop
+ 40f534: 00001021 move v0,zero
+ 40f538: 8fbf0024 lw ra,36(sp)
+ 40f53c: 00000000 nop
+ 40f540: 03e00008 jr ra
+ 40f544: 27bd0028 addiu sp,sp,40
+ 40f548: 00a02021 move a0,a1
+ 40f54c: 24060004 li a2,4
+ 40f550: 27a50018 addiu a1,sp,24
+ 40f554: 8f998254 lw t9,-32172(gp)
+ 40f558: 00000000 nop
+ 40f55c: 0320f809 jalr t9
+ 40f560: 00000000 nop
+ 40f564: 8fbc0010 lw gp,16(sp)
+ 40f568: 1000fff3 b 40f538 <__read_etc_hosts_r+0x678>
+ 40f56c: 24020001 li v0,1
+ 40f570: 25290001 addiu t1,t1,1
+ 40f574: 29230005 slti v1,t1,5
+ 40f578: 1060ffef beqz v1,40f538 <__read_etc_hosts_r+0x678>
+ 40f57c: 240a0001 li t2,1
+ 40f580: 1000ffe5 b 40f518 <__read_etc_hosts_r+0x658>
+ 40f584: 00000000 nop
+ 40f588: 14c2ffea bne a2,v0,40f534 <__read_etc_hosts_r+0x674>
+ 40f58c: 25080001 addiu t0,t0,1
+ 40f590: 1140ffe9 beqz t2,40f538 <__read_etc_hosts_r+0x678>
+ 40f594: 00001021 move v0,zero
+ 40f598: 24020004 li v0,4
+ 40f59c: 1122ffe5 beq t1,v0,40f534 <__read_etc_hosts_r+0x674>
+ 40f5a0: 00005021 move t2,zero
+ 40f5a4: 1000ffdc b 40f518 <__read_etc_hosts_r+0x658>
+ 40f5a8: a1000000 sb zero,0(t0)
+
+0040f5ac <inet_ntop>:
+ 40f5ac: 3c1c0fc0 lui gp,0xfc0
+ 40f5b0: 279c8ca4 addiu gp,gp,-29532
+ 40f5b4: 0399e021 addu gp,gp,t9
+ 40f5b8: 27bdffe0 addiu sp,sp,-32
+ 40f5bc: afbc0010 sw gp,16(sp)
+ 40f5c0: 00801821 move v1,a0
+ 40f5c4: 24020002 li v0,2
+ 40f5c8: 00a02021 move a0,a1
+ 40f5cc: afbf001c sw ra,28(sp)
+ 40f5d0: 00c02821 move a1,a2
+ 40f5d4: afbc0018 sw gp,24(sp)
+ 40f5d8: 1062000d beq v1,v0,40f610 <inet_ntop+0x64>
+ 40f5dc: 00e03021 move a2,a3
+ 40f5e0: 8f9980a0 lw t9,-32608(gp)
+ 40f5e4: 00000000 nop
+ 40f5e8: 0320f809 jalr t9
+ 40f5ec: 00000000 nop
+ 40f5f0: 8fbc0010 lw gp,16(sp)
+ 40f5f4: 2403007c li v1,124
+ 40f5f8: ac430000 sw v1,0(v0)
+ 40f5fc: 00001021 move v0,zero
+ 40f600: 8fbf001c lw ra,28(sp)
+ 40f604: 00000000 nop
+ 40f608: 03e00008 jr ra
+ 40f60c: 27bd0020 addiu sp,sp,32
+ 40f610: 8f998018 lw t9,-32744(gp)
+ 40f614: 00000000 nop
+ 40f618: 2739f260 addiu t9,t9,-3488
+ 40f61c: 00000000 nop
+ 40f620: 0320f809 jalr t9
+ 40f624: 00000000 nop
+ 40f628: 8fbc0010 lw gp,16(sp)
+ 40f62c: 1000fff4 b 40f600 <inet_ntop+0x54>
+ 40f630: 00000000 nop
+
+0040f634 <inet_pton>:
+ 40f634: 3c1c0fc0 lui gp,0xfc0
+ 40f638: 279c8c1c addiu gp,gp,-29668
+ 40f63c: 0399e021 addu gp,gp,t9
+ 40f640: 27bdffe0 addiu sp,sp,-32
+ 40f644: afbc0010 sw gp,16(sp)
+ 40f648: 00801821 move v1,a0
+ 40f64c: 24020002 li v0,2
+ 40f650: 00a02021 move a0,a1
+ 40f654: afbf001c sw ra,28(sp)
+ 40f658: afbc0018 sw gp,24(sp)
+ 40f65c: 1062000d beq v1,v0,40f694 <inet_pton+0x60>
+ 40f660: 00c02821 move a1,a2
+ 40f664: 8f9980a0 lw t9,-32608(gp)
+ 40f668: 00000000 nop
+ 40f66c: 0320f809 jalr t9
+ 40f670: 00000000 nop
+ 40f674: 8fbc0010 lw gp,16(sp)
+ 40f678: 2403007c li v1,124
+ 40f67c: ac430000 sw v1,0(v0)
+ 40f680: 2402ffff li v0,-1
+ 40f684: 8fbf001c lw ra,28(sp)
+ 40f688: 00000000 nop
+ 40f68c: 03e00008 jr ra
+ 40f690: 27bd0020 addiu sp,sp,32
+ 40f694: 8f998018 lw t9,-32744(gp)
+ 40f698: 00000000 nop
+ 40f69c: 2739f49c addiu t9,t9,-2916
+ 40f6a0: 00000000 nop
+ 40f6a4: 0320f809 jalr t9
+ 40f6a8: 00000000 nop
+ 40f6ac: 8fbc0010 lw gp,16(sp)
+ 40f6b0: 1000fff4 b 40f684 <inet_pton+0x50>
+ 40f6b4: 00000000 nop
+ ...
+
+0040f6c0 <__encode_dotted>:
+ 40f6c0: 3c1c0fc0 lui gp,0xfc0
+ 40f6c4: 279c8b90 addiu gp,gp,-29808
+ 40f6c8: 0399e021 addu gp,gp,t9
+ 40f6cc: 27bdffc8 addiu sp,sp,-56
+ 40f6d0: afbc0010 sw gp,16(sp)
+ 40f6d4: afb00018 sw s0,24(sp)
+ 40f6d8: 00808021 move s0,a0
+ 40f6dc: afb40028 sw s4,40(sp)
+ 40f6e0: afb30024 sw s3,36(sp)
+ 40f6e4: afb20020 sw s2,32(sp)
+ 40f6e8: afbf0030 sw ra,48(sp)
+ 40f6ec: afbc002c sw gp,44(sp)
+ 40f6f0: afb1001c sw s1,28(sp)
+ 40f6f4: 00a09821 move s3,a1
+ 40f6f8: 00c0a021 move s4,a2
+ 40f6fc: 12000028 beqz s0,40f7a0 <__encode_dotted+0xe0>
+ 40f700: 00009021 move s2,zero
+ 40f704: 82020000 lb v0,0(s0)
+ 40f708: 00000000 nop
+ 40f70c: 10400024 beqz v0,40f7a0 <__encode_dotted+0xe0>
+ 40f710: 02002021 move a0,s0
+ 40f714: 2405002e li a1,46
+ 40f718: 8f99805c lw t9,-32676(gp)
+ 40f71c: 00000000 nop
+ 40f720: 0320f809 jalr t9
+ 40f724: 00000000 nop
+ 40f728: 8fbc0010 lw gp,16(sp)
+ 40f72c: 00408821 move s1,v0
+ 40f730: 02002021 move a0,s0
+ 40f734: 1220002a beqz s1,40f7e0 <__encode_dotted+0x120>
+ 40f738: 02301823 subu v1,s1,s0
+ 40f73c: 02921023 subu v0,s4,s2
+ 40f740: 2442ffff addiu v0,v0,-1
+ 40f744: 02723821 addu a3,s3,s2
+ 40f748: 0062102a slt v0,v1,v0
+ 40f74c: 26520001 addiu s2,s2,1
+ 40f750: 02002821 move a1,s0
+ 40f754: 02722021 addu a0,s3,s2
+ 40f758: 00603021 move a2,v1
+ 40f75c: 1040001e beqz v0,40f7d8 <__encode_dotted+0x118>
+ 40f760: 26300001 addiu s0,s1,1
+ 40f764: a0e30000 sb v1,0(a3)
+ 40f768: 02439021 addu s2,s2,v1
+ 40f76c: 8f998254 lw t9,-32172(gp)
+ 40f770: 00000000 nop
+ 40f774: 0320f809 jalr t9
+ 40f778: 00000000 nop
+ 40f77c: 8fbc0010 lw gp,16(sp)
+ 40f780: 12200007 beqz s1,40f7a0 <__encode_dotted+0xe0>
+ 40f784: 00000000 nop
+ 40f788: 12000005 beqz s0,40f7a0 <__encode_dotted+0xe0>
+ 40f78c: 00000000 nop
+ 40f790: 82220001 lb v0,1(s1)
+ 40f794: 00000000 nop
+ 40f798: 1440ffde bnez v0,40f714 <__encode_dotted+0x54>
+ 40f79c: 02002021 move a0,s0
+ 40f7a0: 1a800005 blez s4,40f7b8 <__encode_dotted+0xf8>
+ 40f7a4: 2402ffff li v0,-1
+ 40f7a8: 02721021 addu v0,s3,s2
+ 40f7ac: 26520001 addiu s2,s2,1
+ 40f7b0: a0400000 sb zero,0(v0)
+ 40f7b4: 02401021 move v0,s2
+ 40f7b8: 8fbf0030 lw ra,48(sp)
+ 40f7bc: 8fb40028 lw s4,40(sp)
+ 40f7c0: 8fb30024 lw s3,36(sp)
+ 40f7c4: 8fb20020 lw s2,32(sp)
+ 40f7c8: 8fb1001c lw s1,28(sp)
+ 40f7cc: 8fb00018 lw s0,24(sp)
+ 40f7d0: 03e00008 jr ra
+ 40f7d4: 27bd0038 addiu sp,sp,56
+ 40f7d8: 1000fff7 b 40f7b8 <__encode_dotted+0xf8>
+ 40f7dc: 2402ffff li v0,-1
+ 40f7e0: 8f998068 lw t9,-32664(gp)
+ 40f7e4: 00000000 nop
+ 40f7e8: 0320f809 jalr t9
+ 40f7ec: 00000000 nop
+ 40f7f0: 8fbc0010 lw gp,16(sp)
+ 40f7f4: 1000ffd1 b 40f73c <__encode_dotted+0x7c>
+ 40f7f8: 00401821 move v1,v0
+ 40f7fc: 00000000 nop
+
+0040f800 <__length_dotted>:
+ 40f800: 3c1c0fc0 lui gp,0xfc0
+ 40f804: 279c8a50 addiu gp,gp,-30128
+ 40f808: 0399e021 addu gp,gp,t9
+ 40f80c: 00a03821 move a3,a1
+ 40f810: 10800015 beqz a0,40f868 <__length_dotted+0x68>
+ 40f814: 2402ffff li v0,-1
+ 40f818: 00851021 addu v0,a0,a1
+ 40f81c: 90460000 lbu a2,0(v0)
+ 40f820: 00000000 nop
+ 40f824: 10c0000f beqz a2,40f864 <__length_dotted+0x64>
+ 40f828: 24a50001 addiu a1,a1,1
+ 40f82c: 30c300c0 andi v1,a2,0xc0
+ 40f830: 240200c0 li v0,192
+ 40f834: 1062000a beq v1,v0,40f860 <__length_dotted+0x60>
+ 40f838: 00000000 nop
+ 40f83c: 00a62821 addu a1,a1,a2
+ 40f840: 00851021 addu v0,a0,a1
+ 40f844: 90460000 lbu a2,0(v0)
+ 40f848: 24a50001 addiu a1,a1,1
+ 40f84c: 10c00005 beqz a2,40f864 <__length_dotted+0x64>
+ 40f850: 30c300c0 andi v1,a2,0xc0
+ 40f854: 240200c0 li v0,192
+ 40f858: 1462fff8 bne v1,v0,40f83c <__length_dotted+0x3c>
+ 40f85c: 00000000 nop
+ 40f860: 24a50001 addiu a1,a1,1
+ 40f864: 00a71023 subu v0,a1,a3
+ 40f868: 03e00008 jr ra
+ 40f86c: 00000000 nop
diff --git a/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwspy.8 b/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwspy.8
new file mode 100644
index 0000000..9eec627
--- /dev/null
+++ b/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwspy.8
@@ -0,0 +1,79 @@
+.\" Jean II - HPLB - 96
+.\" iwspy.8
+.\"
+.TH IWSPY 8 "31 October 1996" "net-tools" "Linux Programmer's Manual"
+.\"
+.\" NAME part
+.\"
+.SH NAME
+iwspy \- Get wireless statistics from specific nodes
+.\"
+.\" SYNOPSIS part
+.\"
+.SH SYNOPSIS
+.BI "iwspy " interface
+.br
+.BI "iwspy " interface " [+] " DNSNAME " | " IPADDR " | " HWADDR " [...]"
+.br
+.BI "iwspy " interface " off"
+.\"
+.\" DESCRIPTION part
+.\"
+.SH DESCRIPTION
+.B Iwspy
+is used to set a list of addresses in a wireless network interface and
+to read back quality of link information for each of those. This
+information is the same as the one available in
+.I /proc/net/wireless
+: quality of the link, signal strength and noise level.
+.PP
+This information is updated each time a new packet is received, so
+each address of the list add some overhead in the driver.
+.PP
+Note the this functionality work only for node part of the current
+wireless cells.
+.\"
+.\" PARAMETER part
+.\"
+.SH PARAMETERS
+You may set any number of addresses up to 8.
+.TP
+.BR DNSNAME " | " IPADDR
+Set an IP address, or in some cases a DNS name (using the name
+resolver). As the hardware work with hardware addresses,
+.B iwspy
+will translate this IP address through
+.IR ARP .
+In some case, this address might not be in the ARP cache and
+.B iwspy
+will fail. In those case,
+.IR ping (8)
+this name/address and retry.
+.TP
+.B HWADDR
+Set a hardware (MAC) address (this address is not translated & checked
+like the IP one). The address must contain a colon
+.RB ( : )
+to be recognised as a hardware address.
+.TP
+.B +
+Add the new set of addresses at the end of the current list instead of
+replacing it. The address list is unique for each device, so each user
+should use this option to avoid conflicts.
+.TP
+.B off
+Remove the current list of addresses and disable the spy functionality
+.\"
+.\" FILES part
+.\"
+.SH FILES
+.I /proc/net/wireless
+.\"
+.\" SEE ALSO part
+.\"
+.SH SEE ALSO
+.BR iwconfig (8),
+.BR ifconfig (8),
+.BR iwlist (8).
+.BR iwpriv (8).
+
diff --git a/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwspy.c b/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwspy.c
new file mode 100644
index 0000000..21726e6
--- /dev/null
+++ b/package/kernel/realtek-wl/src/Users/wireless_tools.25/iwspy.c
@@ -0,0 +1,237 @@
+/*
+ * Wireless Tools
+ *
+ * Jean II - HPLB '99
+ *
+ * This tool can manipulate the spy list : add addresses and display stat
+ * You need to link this code against "iwlib.c" and "-lm".
+ *
+ * This file is released under the GPL license.
+ * Copyright (c) 1997-2002 Jean Tourrilhes <jt@hpl.hp.com>
+ */
+
+#include "iwlib.h" /* Header */
+
+/* Backward compatibility */
+#ifndef IW_MAX_GET_SPY
+#define IW_MAX_GET_SPY 64
+#endif /* IW_MAX_GET_SPY */
+
+/************************* DISPLAY ROUTINES **************************/
+
+/*------------------------------------------------------------------*/
+/*
+ * Display the spy list of addresses and the associated stats
+ */
+static int
+print_spy_info(int skfd,
+ char * ifname,
+ char * args[],
+ int count)
+{
+ struct iwreq wrq;
+ char buffer[(sizeof(struct iw_quality) +
+ sizeof(struct sockaddr)) * IW_MAX_GET_SPY];
+ char temp[128];
+ struct sockaddr * hwa;
+ struct iw_quality * qual;
+ iwrange range;
+ int has_range = 0;
+ int n;
+ int i;
+
+ /* Avoid "Unused parameter" warning */
+ args = args; count = count;
+
+ /* Collect stats */
+ wrq.u.data.pointer = (caddr_t) buffer;
+ wrq.u.data.length = IW_MAX_GET_SPY;
+ wrq.u.data.flags = 0;
+ if(iw_get_ext(skfd, ifname, SIOCGIWSPY, &wrq) < 0)
+ {
+ fprintf(stderr, "%-8.8s Interface doesn't support wireless statistic collection\n\n", ifname);
+ return(-1);
+ }
+
+ /* Number of addresses */
+ n = wrq.u.data.length;
+
+ /* Check if we have valid mac address type */
+ if(iw_check_mac_addr_type(skfd, ifname) < 0)
+ {
+ fprintf(stderr, "%-8.8s Interface doesn't support MAC addresses\n\n", ifname);
+ return(-2);
+ }
+
+ /* Get range info if we can */
+ if(iw_get_range_info(skfd, ifname, &(range)) >= 0)
+ has_range = 1;
+
+ /* Display it */
+ if(n == 0)
+ printf("%-8.8s No statistics to collect\n", ifname);
+ else
+ printf("%-8.8s Statistics collected:\n", ifname);
+
+ /* The two lists */
+ hwa = (struct sockaddr *) buffer;
+ qual = (struct iw_quality *) (buffer + (sizeof(struct sockaddr) * n));
+
+ for(i = 0; i < n; i++)
+ {
+ /* Print stats for each address */
+ printf(" %s : ", iw_pr_ether(temp, hwa[i].sa_data));
+ iw_print_stats(temp, &qual[i], &range, has_range);
+ printf("%s\n", temp);
+ }
+#if WIRELESS_EXT > 11
+ if((n > 0) && (has_range))
+ {
+ iw_print_stats(temp, &range.avg_qual, &range, has_range);
+ printf(" typical/average : %s\n", temp);
+ }
+#endif /* WIRELESS_EXT > 11 */
+
+ printf("\n");
+ return(0);
+}
+
+/************************* SETTING ROUTINES **************************/
+
+/*------------------------------------------------------------------*/
+/*
+ * Set list of addresses specified on command line in the driver.
+ */
+static int
+set_spy_info(int skfd, /* The socket */
+ char * args[], /* Command line args */
+ int count, /* Args count */
+ char * ifname) /* Dev name */
+{
+ struct iwreq wrq;
+ int i;
+ int nbr; /* Number of valid addresses */
+ struct sockaddr hw_address[IW_MAX_SPY];
+
+ /* Read command line */
+ i = 0; /* first arg to read */
+ nbr = 0; /* Number of args read so far */
+
+ /* "off" : disable functionality (set 0 addresses) */
+ if(!strcmp(args[0], "off"))
+ i = 1; /* skip the "off" */
+ else
+ {
+ /* "+" : add all addresses already in the driver */
+ if(!strcmp(args[0], "+"))
+ {
+ char buffer[(sizeof(struct iw_quality) +
+ sizeof(struct sockaddr)) * IW_MAX_SPY];
+
+ /* Check if we have valid mac address type */
+ if(iw_check_mac_addr_type(skfd, ifname) < 0)
+ {
+ fprintf(stderr, "%-8.8s Interface doesn't support MAC addresses\n", ifname);
+ return(-1);
+ }
+
+ wrq.u.data.pointer = (caddr_t) buffer;
+ wrq.u.data.length = 0;
+ wrq.u.data.flags = 0;
+ if(iw_get_ext(skfd, ifname, SIOCGIWSPY, &wrq) < 0)
+ {
+ fprintf(stderr, "Interface doesn't accept reading addresses...\n");
+ fprintf(stderr, "SIOCGIWSPY: %s\n", strerror(errno));
+ return(-1);
+ }
+
+ /* Copy old addresses */
+ nbr = wrq.u.data.length;
+ memcpy(hw_address, buffer, nbr * sizeof(struct sockaddr));
+
+ i = 1; /* skip the "+" */
+ }
+
+ /* Read other args on command line */
+ while((i < count) && (nbr < IW_MAX_SPY))
+ {
+ /* Get the address and check if the interface supports it */
+ if(iw_in_addr(skfd, ifname, args[i++], &(hw_address[nbr])) < 0)
+ continue;
+ nbr++;
+ }
+
+ /* Check the number of addresses */
+ if(nbr == 0)
+ {
+ fprintf(stderr, "No valid addresses found : exiting...\n");
+ return(-1);
+ }
+ }
+
+ /* Check if there is some remaining arguments */
+ if(i < count)
+ {
+ fprintf(stderr, "Got only the first %d arguments, remaining discarded\n", i);
+ }
+
+ /* Time to do send addresses to the driver */
+ wrq.u.data.pointer = (caddr_t) hw_address;
+ wrq.u.data.length = nbr;
+ wrq.u.data.flags = 0;
+ if(iw_set_ext(skfd, ifname, SIOCSIWSPY, &wrq) < 0)
+ {
+ fprintf(stderr, "Interface doesn't accept addresses...\n");
+ fprintf(stderr, "SIOCSIWSPY: %s\n", strerror(errno));
+ return(-1);
+ }
+
+ return(0);
+}
+
+/******************************* MAIN ********************************/
+
+/*------------------------------------------------------------------*/
+/*
+ * The main !
+ */
+int
+main(int argc,
+ char ** argv)
+{
+ int skfd; /* generic raw socket desc. */
+ int goterr = 0;
+
+ /* Create a channel to the NET kernel. */
+ if((skfd = iw_sockets_open()) < 0)
+ {
+ perror("socket");
+ return(-1);
+ }
+
+ /* No argument : show the list of all device + info */
+ if(argc == 1)
+ iw_enum_devices(skfd, &print_spy_info, NULL, 0);
+ else
+ /* Special cases take one... */
+ /* Help */
+ if((!strcmp(argv[1], "-h")) || (!strcmp(argv[1], "--help")))
+ fprintf(stderr, "Usage: iwspy interface [+] [MAC address] [IP address]\n");
+ else
+ /* Version */
+ if (!strcmp(argv[1], "-v") || !strcmp(argv[1], "--version"))
+ goterr = iw_print_version_info("iwspy");
+ else
+ /* The device name must be the first argument */
+ /* Name only : show spy list for that device only */
+ if(argc == 2)
+ print_spy_info(skfd, argv[1], NULL, 0);
+ else
+ /* Otherwise, it's a list of address to set in the spy list */
+ goterr = set_spy_info(skfd, argv + 2, argc - 2, argv[1]);
+
+ /* Close the socket. */
+ close(skfd);
+
+ return(goterr);
+}
diff --git a/package/kernel/realtek-wl/src/Users/wireless_tools.25/macaddr.c b/package/kernel/realtek-wl/src/Users/wireless_tools.25/macaddr.c
new file mode 100644
index 0000000..5950fd9
--- /dev/null
+++ b/package/kernel/realtek-wl/src/Users/wireless_tools.25/macaddr.c
@@ -0,0 +1,53 @@
+/*
+ * macaddr
+ *
+ * Program to return the MAC address of an Ethernet
+ * adapter. This was written to help configure the
+ * adapter based on the MAC address rather than the
+ * name.
+ *
+ * Version 1.0 Eric Dittman 2001-10-19
+ *
+ * This is released unther the GPL license.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+
+#include "iwlib.h"
+
+int main(int argc, char** argv)
+{
+
+ int devsock;
+ struct ifreq ifbuffer;
+
+ if ((argc != 2) || (argv[1][0] == '-')) {
+ printf("Usage: macaddr interface\n");
+ exit(1);
+ }
+
+ devsock = socket(AF_INET, SOCK_STREAM, 0);
+
+ if (devsock == -1) {
+ perror("Failed opening socket");
+ exit (1);
+ }
+
+ memset(&ifbuffer, 0, sizeof(ifbuffer));
+ strncpy(ifbuffer.ifr_name, argv[1], sizeof(ifbuffer.ifr_name));
+ if (ioctl(devsock, SIOCGIFHWADDR, &ifbuffer) == -1) {
+ fprintf(stderr, "There is no MACADDR for %s\n", argv[1]);
+ exit(1);
+ }
+ close(devsock);
+
+ puts(iw_ether_ntoa((struct ether_addr *) ifbuffer.ifr_ifru.ifru_hwaddr.sa_data));
+
+ exit(0);
+}
diff --git a/package/kernel/realtek-wl/src/Users/wireless_tools.25/readme.txt b/package/kernel/realtek-wl/src/Users/wireless_tools.25/readme.txt
new file mode 100644
index 0000000..715d7e8
--- /dev/null
+++ b/package/kernel/realtek-wl/src/Users/wireless_tools.25/readme.txt
@@ -0,0 +1,4 @@
+1.open Makefile. find keyword¡§CROSS_COMPILE¡¨.
+ then change it into the complier on your platform
+2.make
+ If success , you can get the bin file-"iwpriv" under same folder.
\ No newline at end of file
diff --git a/package/kernel/realtek-wl/src/Users/wireless_tools.25/sample_enc.c b/package/kernel/realtek-wl/src/Users/wireless_tools.25/sample_enc.c
new file mode 100644
index 0000000..a1a90e2
--- /dev/null
+++ b/package/kernel/realtek-wl/src/Users/wireless_tools.25/sample_enc.c
@@ -0,0 +1,191 @@
+/* Note : this particular snipset of code is available under
+ * the LGPL, MPL or BSD license (at your choice).
+ * Jean II
+ */
+
+/* --------------------------- INCLUDE --------------------------- */
+
+#define MAX_KEY_SIZE 16
+#define MAX_KEYS 8
+int key_on = 0;
+int key_open = 1;
+int key_current = 0;
+char key_table[MAX_KEYS][MAX_KEY_SIZE];
+int key_size[MAX_KEYS];
+
+/* --------------------------- HANDLERS --------------------------- */
+
+static int ioctl_set_encode(struct net_device *dev,
+ struct iw_request_info *info,
+ struct iw_point *erq,
+ char *key)
+{
+ int index = (erq->flags & IW_ENCODE_INDEX) - 1;
+
+ if (erq->length > 0)
+ {
+ /* Check the size of the key */
+ if(erq->length > MAX_KEY_SIZE)
+ return(-EINVAL);
+
+ /* Check the index */
+ if((index < 0) || (index >= MAX_KEYS))
+ index = key_current;
+
+ /* Copy the key in the driver */
+ memcpy(key_table[index], key, erq->length);
+ key_size[index] = erq->length;
+ key_on = 1;
+ }
+ else
+ {
+ /* Do we want to just set the current key ? */
+ if((index >= 0) && (index < MAX_KEYS))
+ {
+ if(key_size[index] > 0)
+ {
+ key_current = index;
+ key_on = 1;
+ }
+ else
+ return(-EINVAL);
+ }
+ }
+
+ /* Read the flags */
+ if(erq->flags & IW_ENCODE_DISABLED)
+ key_on = 0; /* disable encryption */
+ if(erq->flags & IW_ENCODE_RESTRICTED)
+ key_open = 0; /* disable open mode */
+ if(erq->flags & IW_ENCODE_OPEN)
+ key_open = 1; /* enable open mode */
+
+ return(0);
+}
+
+static int ioctl_get_encode(struct net_device *dev,
+ struct iw_request_info *info,
+ struct iw_point *erq,
+ char *key)
+{
+ int index = (erq->flags & IW_ENCODE_INDEX) - 1;
+
+ /* Set the flags */
+ erq->flags = 0;
+ if(key_on == 0)
+ erq->flags |= IW_ENCODE_DISABLED;
+ if(key_open == 0)
+ erq->flags |= IW_ENCODE_RESTRICTED;
+ else
+ erq->flags |= IW_ENCODE_OPEN;
+
+ /* Which key do we want */
+ if((index < 0) || (index >= MAX_KEYS))
+ index = key_current;
+ erq->flags |= index + 1;
+
+ /* Copy the key to the user buffer */
+ erq->length = key_size[index];
+ memcpy(key, key_table[index], key_size[index]);
+
+ return(0);
+}
+
+static int ioctl_get_range(struct net_device *dev,
+ struct iw_request_info *info,
+ struct iw_point *rrq,
+ char *extra)
+{
+ struct iw_range *range = (struct iw_range *) extra;
+
+ rrq->length = sizeof(struct iw_range);
+
+ memset(range, 0, sizeof(struct iw_range));
+
+#if WIRELESS_EXT > 10
+ /* Version we are compiled with */
+ range->we_version_compiled = WIRELESS_EXT;
+ /* Minimum version we recommend */
+ range->we_version_source = 8;
+#endif /* WIRELESS_EXT > 10 */
+
+#if WIRELESS_EXT > 8
+ range->encoding_size[0] = 8; /* DES = 64 bits key */
+ range->encoding_size[1] = 16;
+ range->num_encoding_sizes = 2;
+ range->max_encoding_tokens = 8;
+#endif /* WIRELESS_EXT > 8 */
+ return(0);
+}
+
+/* --------------------------- BINDING --------------------------- */
+
+#if WIRELESS_EXT > 12
+static const iw_handler handler_table[] =
+{
+ ...
+ (iw_handler) ioctl_set_encode, /* SIOCSIWENCODE */
+ (iw_handler) ioctl_get_encode, /* SIOCGIWENCODE */
+};
+#else /* WIRELESS_EXT < 12 */
+static int
+do_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
+{
+ struct iwreq *wrq = (struct iwreq *) ifr;
+ int err = 0;
+
+ switch (cmd)
+ {
+#if WIRELESS_EXT > 8
+ case SIOCSIWENCODE:
+ {
+ char keybuf[MAX_KEY_SIZE];
+ if(wrq->u.encoding.pointer)
+ {
+ /* We actually have a key to set */
+ if(wrq->u.encoding.length > MAX_KEY_SIZE)
+ {
+ err = -E2BIG;
+ break;
+ }
+ if(copy_from_user(keybuf, wrq->u.encoding.pointer,
+ wrq->u.encoding.length))
+ {
+ err = -EFAULT;
+ break;
+ }
+ }
+ else
+ if(wrq->u.encoding.length != 0)
+ {
+ err = -EINVAL;
+ break;
+ }
+ err = ioctl_set_encode(dev, NULL, &(wrq->u.encoding), keybuf);
+ }
+ break;
+
+ case SIOCGIWENCODE:
+ /* only super-user can see encryption key */
+ if(! capable(CAP_NET_ADMIN))
+ {
+ err = -EPERM;
+ break;
+ }
+ {
+ char keybuf[MAX_KEY_SIZE];
+ err = ioctl_get_encode(dev, NULL, &(wrq->u.encoding), keybuf);
+ if(wrq->u.encoding.pointer)
+ {
+ if (copy_to_user(wrq->u.encoding.pointer, keybuf,
+ wrq->u.encoding.length))
+ err= -EFAULT;
+ }
+ }
+ break;
+#endif /* WIRELESS_EXT > 8 */
+ }
+ return(err);
+}
+#endif /* WIRELESS_EXT < 12 */
+
diff --git a/package/kernel/realtek-wl/src/Users/wireless_tools.25/sample_pm.c b/package/kernel/realtek-wl/src/Users/wireless_tools.25/sample_pm.c
new file mode 100644
index 0000000..8735cc8
--- /dev/null
+++ b/package/kernel/realtek-wl/src/Users/wireless_tools.25/sample_pm.c
@@ -0,0 +1,215 @@
+/* Note : this particular snipset of code is available under
+ * the LGPL, MPL or BSD license (at your choice).
+ * Jean II
+ */
+
+/* --------------------------- INCLUDE --------------------------- */
+
+/* Backward compatibility for Wireless Extension 9 */
+#ifndef IW_POWER_MODIFIER
+#define IW_POWER_MODIFIER 0x000F /* Modify a parameter */
+#define IW_POWER_MIN 0x0001 /* Value is a minimum */
+#define IW_POWER_MAX 0x0002 /* Value is a maximum */
+#define IW_POWER_RELATIVE 0x0004 /* Value is not in seconds/ms/us */
+#endif IW_POWER_MODIFIER
+
+struct net_local {
+ int pm_on; // Power Management enabled
+ int pm_multi; // Receive multicasts
+ int pm_period; // Power Management period
+ int pm_period_auto; // Power Management auto mode
+ int pm_max_period; // Power Management max period
+ int pm_min_period; // Power Management min period
+ int pm_timeout; // Power Management timeout
+};
+
+/* --------------------------- HANDLERS --------------------------- */
+
+static int ioctl_set_power(struct net_device *dev,
+ struct iw_request_info *info,
+ struct iw_param *prq,
+ char *extra)
+{
+ /* Disable it ? */
+ if(prq->disabled)
+ {
+ local->pm_on = 0;
+ }
+ else
+ {
+ /* Check mode */
+ switch(prq->flags & IW_POWER_MODE)
+ {
+ case IW_POWER_UNICAST_R:
+ local->pm_multi = 0;
+ local->need_commit = 1;
+ break;
+ case IW_POWER_ALL_R:
+ local->pm_multi = 1;
+ local->need_commit = 1;
+ break;
+ case IW_POWER_ON: /* None = ok */
+ break;
+ default: /* Invalid */
+ return(-EINVAL);
+ }
+ /* Set period */
+ if(prq->flags & IW_POWER_PERIOD)
+ {
+ int period = prq->value/1000000;
+ /* Hum: check if within bounds... */
+
+ /* Activate PM */
+ local->pm_on = 1;
+ local->need_commit = 1;
+
+ /* Check min value */
+ if(prq->flags & IW_POWER_MIN)
+ {
+ local->pm_min_period = period;
+ local->pm_period_auto = 1;
+ }
+ else
+ /* Check max value */
+ if(prq->flags & IW_POWER_MAX)
+ {
+ local->pm_max_period = period;
+ local->pm_period_auto = 1;
+ }
+ else
+ {
+ /* Fixed value */
+ local->pm_period = period;
+ local->pm_period_auto = 0;
+ }
+ }
+ /* Set timeout */
+ if(prq->flags & IW_POWER_TIMEOUT)
+ {
+ /* Activate PM */
+ local->pm_on = 1;
+ local->need_commit = 1;
+ /* Fixed value in ms */
+ local->pm_timeout = prq->value/1000;
+ }
+ }
+
+ return(0);
+}
+
+static int ioctl_get_power(struct net_device *dev,
+ struct iw_request_info *info,
+ struct iw_param *prq,
+ char *extra)
+{
+ prq->disabled = !local->pm_on;
+ /* By default, display the period */
+ if(!(prq->flags & IW_POWER_TIMEOUT))
+ {
+ int inc_flags = prq->flags;
+ prq->flags = IW_POWER_PERIOD | IW_POWER_RELATIVE;
+ /* Check if auto */
+ if(local->pm_period_auto)
+ {
+ /* By default, the min */
+ if(!(inc_flags & IW_POWER_MAX))
+ {
+ prq->value = local->pm_min_period * 1000000;
+ prq->flags |= IW_POWER_MIN;
+ }
+ else
+ {
+ prq->value = local->pm_max_period * 1000000;
+ prq->flags |= IW_POWER_MAX;
+ }
+ }
+ else
+ {
+ /* Fixed value. Check the flags */
+ if(inc_flags & (IW_POWER_MIN | IW_POWER_MAX))
+ return(-EINVAL);
+ else
+ prq->value = local->pm_period * 1000000;
+ }
+ }
+ else
+ {
+ /* Deal with the timeout - always fixed */
+ prq->flags = IW_POWER_TIMEOUT;
+ prq->value = local->pm_timeout * 1000;
+ }
+ if(local->pm_multi)
+ prq->flags |= IW_POWER_ALL_R;
+ else
+ prq->flags |= IW_POWER_UNICAST_R;
+
+ return(0);
+}
+
+static int ioctl_get_range(struct net_device *dev,
+ struct iw_request_info *info,
+ struct iw_point *rrq,
+ char *extra)
+{
+ struct iw_range *range = (struct iw_range *) extra;
+
+ rrq->length = sizeof(struct iw_range);
+
+ memset(range, 0, sizeof(struct iw_range));
+
+#if WIRELESS_EXT > 10
+ /* Version we are compiled with */
+ range->we_version_compiled = WIRELESS_EXT;
+ /* Minimum version we recommend */
+ range->we_version_source = 8;
+#endif /* WIRELESS_EXT > 10 */
+
+#if WIRELESS_EXT > 9
+ range.min_pmp = 1000000; /* 1 units */
+ range.max_pmp = 12000000; /* 12 units */
+ range.min_pmt = 1000; /* 1 ms */
+ range.max_pmt = 1000000; /* 1 s */
+ range.pmp_flags = IW_POWER_PERIOD | IW_POWER_RELATIVE |
+ IW_POWER_MIN | IW_POWER_MAX;
+ range.pmt_flags = IW_POWER_TIMEOUT;
+ range.pm_capa = IW_POWER_PERIOD | IW_POWER_TIMEOUT | IW_POWER_UNICAST_R;
+#endif /* WIRELESS_EXT > 9 */
+ return(0);
+}
+
+/* --------------------------- BINDING --------------------------- */
+
+#if WIRELESS_EXT > 12
+/* Use the new driver API, save overhead */
+static const iw_handler handler_table[] =
+{
+ ...
+ (iw_handler) ioctl_set_power, /* SIOCSIWPOWER */
+ (iw_handler) ioctl_get_power, /* SIOCGIWPOWER */
+};
+#else /* WIRELESS_EXT < 12 */
+/* Use old API in the ioctl handler */
+static int
+do_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
+{
+ struct iwreq *wrq = (struct iwreq *) ifr;
+ int err = 0;
+
+ switch (cmd)
+ {
+#if WIRELESS_EXT > 8
+ /* Set the desired Power Management mode */
+ case SIOCSIWPOWER:
+ err = ioctl_set_power(dev, NULL, &(wrq->u.power), NULL);
+ break;
+
+ /* Get the power management settings */
+ case SIOCGIWPOWER:
+ err = ioctl_get_power(dev, NULL, &(wrq->u.power), NULL);
+ break;
+#endif /* WIRELESS_EXT > 8 */
+ }
+ return(err);
+}
+#endif /* WIRELESS_EXT < 12 */
+
diff --git a/package/kernel/realtek-wl/src/Users/wireless_tools.25/sample_priv_addr.c b/package/kernel/realtek-wl/src/Users/wireless_tools.25/sample_priv_addr.c
new file mode 100644
index 0000000..fd5793d
--- /dev/null
+++ b/package/kernel/realtek-wl/src/Users/wireless_tools.25/sample_priv_addr.c
@@ -0,0 +1,210 @@
+/* Note : this particular snipset of code is available under
+ * the LGPL, MPL or BSD license (at your choice).
+ * Jean II
+ */
+
+// Require Wireless Tools 25 for sub-ioctl and addr support
+
+/* --------------------------- INCLUDE --------------------------- */
+
+#if WIRELESS_EXT <= 12
+/* Wireless extensions backward compatibility */
+
+/* We need the full definition for private ioctls */
+struct iw_request_info
+{
+ __u16 cmd; /* Wireless Extension command */
+ __u16 flags; /* More to come ;-) */
+};
+#endif /* WIRELESS_EXT <= 12 */
+
+#ifndef IW_PRIV_TYPE_ADDR
+#define IW_PRIV_TYPE_ADDR 0x6000
+#endif /* IW_PRIV_TYPE_ADDR */
+
+/* --------------------------- HANDLERS --------------------------- */
+
+/* First method : using sub-ioctls.
+ * Note that sizeof(int + struct sockaddr) = 20 > 16, therefore the
+ * data is passed in (char *) extra, and sub-ioctl in data->flags. */
+static int sample_ioctl_set_mac(struct net_device *dev,
+ struct iw_request_info *info,
+ struct iw_point *data,
+ struct sockaddr *mac_addr)
+{
+ unsigned char * addr = (char *) &mac_addr->sa_data;
+
+ switch(data->flags) {
+ case 0:
+ printk(KERN_DEBUG "%s: mac_add %02X:%02X:%02X:%02X:%02X:%02X\n", dev->name, addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);
+ break;
+ case 1:
+ printk(KERN_DEBUG "%s: mac_del %02X:%02X:%02X:%02X:%02X:%02X\n", dev->name, addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);
+ break;
+ case 2:
+ printk(KERN_DEBUG "%s: mac_kick %02X:%02X:%02X:%02X:%02X:%02X\n", dev->name, addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);
+ break;
+ default:
+ printk(KERN_DEBUG "%s: mac_undefined %02X:%02X:%02X:%02X:%02X:%02X\n", dev->name, addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);
+ break;
+ }
+
+ return 0;
+}
+
+/* Second method : bind single handler to multiple ioctls.
+ * Note that sizeof(struct sockaddr) = 16 <= 16, therefore the
+ * data is passed in (struct iwreq) (and also mapped in extra).
+ */
+static int sample_ioctl_set_addr(struct net_device *dev,
+ struct iw_request_info *info,
+ struct sockaddr *mac_addr, char *extra)
+{
+ unsigned char * addr = (char *) &mac_addr->sa_data;
+
+ switch(info->cmd) {
+ case SIOCIWFIRSTPRIV + 28:
+ printk(KERN_DEBUG "%s: addr_add %02X:%02X:%02X:%02X:%02X:%02X\n", dev->name, addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);
+ break;
+ case SIOCIWFIRSTPRIV + 30:
+ printk(KERN_DEBUG "%s: addr_del %02X:%02X:%02X:%02X:%02X:%02X\n", dev->name, addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);
+ break;
+ default:
+ printk(KERN_DEBUG "%s: mac_undefined %02X:%02X:%02X:%02X:%02X:%02X\n", dev->name, addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);
+ break;
+ }
+
+ return 0;
+}
+
+// Extra fun for testing
+static int sample_ioctl_get_mac(struct net_device *dev,
+ struct iw_request_info *info,
+ struct iw_point *data,
+ struct sockaddr *mac_addr)
+{
+ unsigned char fake_addr[6];
+ int i;
+ int j;
+
+ for(i = 0; i < 16; i++) {
+ /* Create a fake address */
+ for(j = 0; j < 6; j++)
+ fake_addr[j] = (unsigned char) ((j << 4) + i);
+ /* Put in in the table */
+ memcpy(&(mac_addr[i]).sa_data, fake_addr, ETH_ALEN);
+ mac_addr[i].sa_family = ARPHRD_ETHER;
+ }
+ data->length = 16;
+
+ return 0;
+}
+
+static int sample_ioctl_set_float(struct net_device *dev,
+ struct iw_request_info *info,
+ struct iw_freq *freq, char *extra)
+{
+ printk(KERN_DEBUG "%s: set_float %d;%d\n",
+ dev->name, freq->m, freq->e);
+
+ return 0;
+}
+
+/* --------------------------- BINDING --------------------------- */
+
+static const struct iw_priv_args sample_priv[] = {
+ // *** Method 1 : using sub-ioctls ***
+ /* --- sub-ioctls handler --- */
+ { SIOCIWFIRSTPRIV + 0,
+ IW_PRIV_TYPE_ADDR | IW_PRIV_SIZE_FIXED | 1, 0, "" },
+ /* --- sub-ioctls definitions --- */
+ { 0,
+ IW_PRIV_TYPE_ADDR | IW_PRIV_SIZE_FIXED | 1, 0, "macadd" },
+ { 1,
+ IW_PRIV_TYPE_ADDR | IW_PRIV_SIZE_FIXED | 1, 0, "macdel" },
+ { 2,
+ IW_PRIV_TYPE_ADDR | IW_PRIV_SIZE_FIXED | 1, 0, "mackick" },
+ // *** Method 2 : binding one handler to multiple ioctls ***
+ { SIOCIWFIRSTPRIV + 2,
+ IW_PRIV_TYPE_ADDR | IW_PRIV_SIZE_FIXED | 1, 0, "addradd" },
+ { SIOCIWFIRSTPRIV + 4,
+ IW_PRIV_TYPE_ADDR | IW_PRIV_SIZE_FIXED | 1, 0, "addrdel" },
+ // *** Extra fun ***
+ { SIOCIWFIRSTPRIV + 1,
+ 0, IW_PRIV_TYPE_ADDR | 16, "macget" },
+ { SIOCIWFIRSTPRIV + 6,
+ IW_PRIV_TYPE_FLOAT | IW_PRIV_SIZE_FIXED | 1, 0, "setfloat" },
+};
+
+static const iw_handler sample_private_handler[] =
+{ /* SIOCIWFIRSTPRIV + */
+#if WIRELESS_EXT >= 15
+ /* Various little annoying bugs in the new API before
+ * version 15 make it difficult to use the new API for those ioctls.
+ * For example, it doesn't know about the new data type.
+ * Rather than littering the code with workarounds,
+ * let's use the regular ioctl handler. - Jean II */
+ (iw_handler) sample_ioctl_set_mac, /* 0 */
+ (iw_handler) sample_ioctl_get_mac, /* 1 */
+ (iw_handler) sample_ioctl_set_addr, /* 2 */
+ (iw_handler) NULL, /* 3 */
+ (iw_handler) sample_ioctl_set_addr, /* 4 */
+ (iw_handler) NULL, /* 5 */
+ (iw_handler) sample_ioctl_set_float, /* 6 */
+#endif /* WIRELESS_EXT >= 15 */
+};
+
+#if WIRELESS_EXT < 15
+ /* Various little annoying bugs in the new API before
+ * version 15 make it difficult to use those ioctls.
+ * For example, it doesn't know about the new data type.
+ * Rather than littering the code with workarounds,
+ * let's use this code that just works. - Jean II */
+ case SIOCIWFIRSTPRIV + 0:
+ if (wrq->u.data.length > 1)
+ ret = -E2BIG;
+ else if (wrq->u.data.pointer) {
+ struct sockaddr mac_addr;
+ if (copy_from_user(&mac_addr, wrq->u.data.pointer,
+ sizeof(struct sockaddr))) {
+ ret = -EFAULT;
+ break;
+ }
+ ret = sample_ioctl_set_mac(dev, NULL, &wrq->u.data,
+ &mac_addr);
+ }
+ break;
+ case SIOCIWFIRSTPRIV + 2:
+ case SIOCIWFIRSTPRIV + 4:
+ if (!capable(CAP_NET_ADMIN))
+ ret = -EPERM;
+ else {
+ struct iw_request_info info;
+ info.cmd = cmd;
+ ret = sample_ioctl_set_addr(dev, &info,
+ &wrq->u.ap_addr,
+ NULL);
+ }
+ break;
+ case SIOCIWFIRSTPRIV + 1:
+ if (wrq->u.essid.pointer) {
+ struct sockaddr mac_addr[16];
+ char nickbuf[IW_ESSID_MAX_SIZE + 1];
+ ret = sample_ioctl_get_mac(dev, NULL, &wrq->u.data,
+ mac_addr);
+ if (copy_to_user(wrq->u.data.pointer, nickbuf,
+ wrq->u.data.length *
+ sizeof(struct sockaddr)))
+ ret = -EFAULT;
+ }
+ break;
+ case SIOCIWFIRSTPRIV + 6:
+ if (!capable(CAP_NET_ADMIN))
+ ret = -EPERM;
+ else {
+ ret = sample_ioctl_set_float(dev, NULL,
+ &wrq->u.freq,
+ NULL);
+ }
+ break;
+#endif /* WIRELESS_EXT < 15 */
diff --git a/package/kernel/realtek-wl/src/Users/wireless_tools.25/wireless.10.h b/package/kernel/realtek-wl/src/Users/wireless_tools.25/wireless.10.h
new file mode 100644
index 0000000..c552ff2
--- /dev/null
+++ b/package/kernel/realtek-wl/src/Users/wireless_tools.25/wireless.10.h
@@ -0,0 +1,479 @@
+/*
+ * This file define a set of standard wireless extensions
+ *
+ * Version : 9 16.10.99
+ *
+ * Authors : Jean Tourrilhes - HPL - <jt@hpl.hp.com>
+ */
+
+#ifndef _LINUX_WIRELESS_H
+#define _LINUX_WIRELESS_H
+
+/************************** DOCUMENTATION **************************/
+/*
+ * Basically, the wireless extensions are for now a set of standard ioctl
+ * call + /proc/net/wireless
+ *
+ * The entry /proc/net/wireless give statistics and information on the
+ * driver.
+ * This is better than having each driver having its entry because
+ * its centralised and we may remove the driver module safely.
+ *
+ * Ioctl are used to configure the driver and issue commands. This is
+ * better than command line options of insmod because we may want to
+ * change dynamically (while the driver is running) some parameters.
+ *
+ * The ioctl mechanimsm are copied from standard devices ioctl.
+ * We have the list of command plus a structure descibing the
+ * data exchanged...
+ * Note that to add these ioctl, I was obliged to modify :
+ * net/core/dev.c (two place + add include)
+ * net/ipv4/af_inet.c (one place + add include)
+ *
+ * /proc/net/wireless is a copy of /proc/net/dev.
+ * We have a structure for data passed from the driver to /proc/net/wireless
+ * Too add this, I've modified :
+ * net/core/dev.c (two other places)
+ * include/linux/netdevice.h (one place)
+ * include/linux/proc_fs.h (one place)
+ *
+ * Do not add here things that are redundant with other mechanisms
+ * (drivers init, ifconfig, /proc/net/dev, ...) and with are not
+ * wireless specific.
+ *
+ * These wireless extensions are not magic : each driver has to provide
+ * support for them...
+ *
+ * IMPORTANT NOTE : As everything in the kernel, this is very much a
+ * work in progress. Contact me if you have ideas of improvements...
+ */
+
+/***************************** INCLUDES *****************************/
+
+#include <linux/types.h> /* for "caddr_t" et al */
+#include <linux/socket.h> /* for "struct sockaddr" et al */
+#include <linux/if.h> /* for IFNAMSIZ and co... */
+
+/**************************** CONSTANTS ****************************/
+
+/* --------------------------- VERSION --------------------------- */
+/*
+ * This constant is used to know the availability of the wireless
+ * extensions and to know which version of wireless extensions it is
+ * (there is some stuff that will be added in the future...)
+ * I just plan to increment with each new version.
+ */
+#define WIRELESS_EXT 10
+
+/*
+ * Changes :
+ *
+ * V2 to V3
+ * --------
+ * Alan Cox start some incompatibles changes. I've integrated a bit more.
+ * - Encryption renamed to Encode to avoid US regulation problems
+ * - Frequency changed from float to struct to avoid problems on old 386
+ *
+ * V3 to V4
+ * --------
+ * - Add sensitivity
+ *
+ * V4 to V5
+ * --------
+ * - Missing encoding definitions in range
+ * - Access points stuff
+ *
+ * V5 to V6
+ * --------
+ * - 802.11 support (ESSID ioctls)
+ *
+ * V6 to V7
+ * --------
+ * - define IW_ESSID_MAX_SIZE and IW_MAX_AP
+ *
+ * V7 to V8
+ * --------
+ * - Changed my e-mail address
+ * - More 802.11 support (nickname, rate, rts, frag)
+ * - List index in frequencies
+ *
+ * V8 to V9
+ * --------
+ * - Support for 'mode of operation' (ad-hoc, managed...)
+ * - Support for unicast and multicast power saving
+ * - Change encoding to support larger tokens (>64 bits)
+ * - Updated iw_params (disable, flags) and use it for NWID
+ * - Extracted iw_point from iwreq for clarity
+ *
+ * V9 to V10
+ * ---------
+ * - Add PM capability to range structure
+ * - Add PM modifier : MAX/MIN/RELATIVE
+ * - Add encoding option : IW_ENCODE_NOKEY
+ * - Add TxPower ioctls (work like TxRate)
+ */
+
+/* -------------------------- IOCTL LIST -------------------------- */
+
+/* Basic operations */
+#define SIOCSIWNAME 0x8B00 /* Unused */
+#define SIOCGIWNAME 0x8B01 /* get name == wireless protocol */
+#define SIOCSIWNWID 0x8B02 /* set network id (the cell) */
+#define SIOCGIWNWID 0x8B03 /* get network id */
+#define SIOCSIWFREQ 0x8B04 /* set channel/frequency (Hz) */
+#define SIOCGIWFREQ 0x8B05 /* get channel/frequency (Hz) */
+#define SIOCSIWMODE 0x8B06 /* set operation mode */
+#define SIOCGIWMODE 0x8B07 /* get operation mode */
+#define SIOCSIWSENS 0x8B08 /* set sensitivity (dBm) */
+#define SIOCGIWSENS 0x8B09 /* get sensitivity (dBm) */
+
+/* Informative stuff */
+#define SIOCSIWRANGE 0x8B0A /* Unused */
+#define SIOCGIWRANGE 0x8B0B /* Get range of parameters */
+#define SIOCSIWPRIV 0x8B0C /* Unused */
+#define SIOCGIWPRIV 0x8B0D /* get private ioctl interface info */
+
+/* Mobile IP support */
+#define SIOCSIWSPY 0x8B10 /* set spy addresses */
+#define SIOCGIWSPY 0x8B11 /* get spy info (quality of link) */
+
+/* Access Point manipulation */
+#define SIOCSIWAP 0x8B14 /* set access point MAC addresses */
+#define SIOCGIWAP 0x8B15 /* get access point MAC addresses */
+#define SIOCGIWAPLIST 0x8B17 /* get list of access point in range */
+
+/* 802.11 specific support */
+#define SIOCSIWESSID 0x8B1A /* set ESSID (network name) */
+#define SIOCGIWESSID 0x8B1B /* get ESSID */
+#define SIOCSIWNICKN 0x8B1C /* set node name/nickname */
+#define SIOCGIWNICKN 0x8B1D /* get node name/nickname */
+/* As the ESSID and NICKN are strings up to 32 bytes long, it doesn't fit
+ * within the 'iwreq' structure, so we need to use the 'data' member to
+ * point to a string in user space, like it is done for RANGE...
+ * The "flags" member indicate if the ESSID is active or not (promiscuous).
+ */
+
+/* Other parameters usefull in 802.11 and some other devices */
+#define SIOCSIWRATE 0x8B20 /* set default bit rate (bps) */
+#define SIOCGIWRATE 0x8B21 /* get default bit rate (bps) */
+#define SIOCSIWRTS 0x8B22 /* set RTS/CTS threshold (bytes) */
+#define SIOCGIWRTS 0x8B23 /* get RTS/CTS threshold (bytes) */
+#define SIOCSIWFRAG 0x8B24 /* set fragmentation thr (bytes) */
+#define SIOCGIWFRAG 0x8B25 /* get fragmentation thr (bytes) */
+#define SIOCSIWTXPOW 0x8B26 /* set transmit power (dBm) */
+#define SIOCGIWTXPOW 0x8B27 /* get transmit power (dBm) */
+
+/* Encoding stuff (scrambling, hardware security, WEP...) */
+#define SIOCSIWENCODE 0x8B2A /* set encoding token & mode */
+#define SIOCGIWENCODE 0x8B2B /* get encoding token & mode */
+/* Power saving stuff (power management, unicast and multicast) */
+#define SIOCSIWPOWER 0x8B2C /* set Power Management settings */
+#define SIOCGIWPOWER 0x8B2D /* get Power Management settings */
+
+/* ------------------------- IOCTL STUFF ------------------------- */
+
+/* The first and the last (range) */
+#define SIOCIWFIRST 0x8B00
+#define SIOCIWLAST 0x8B30
+
+/* Even : get (world access), odd : set (root access) */
+#define IW_IS_SET(cmd) (!((cmd) & 0x1))
+#define IW_IS_GET(cmd) ((cmd) & 0x1)
+
+/* ------------------------- PRIVATE INFO ------------------------- */
+/*
+ * The following is used with SIOCGIWPRIV. It allow a driver to define
+ * the interface (name, type of data) for its private ioctl.
+ * Privates ioctl are SIOCDEVPRIVATE -> SIOCDEVPRIVATE + 0xF
+ */
+
+#define IW_PRIV_TYPE_MASK 0x7000 /* Type of arguments */
+#define IW_PRIV_TYPE_NONE 0x0000
+#define IW_PRIV_TYPE_BYTE 0x1000 /* Char as number */
+#define IW_PRIV_TYPE_CHAR 0x2000 /* Char as character */
+#define IW_PRIV_TYPE_INT 0x4000 /* 32 bits int */
+#define IW_PRIV_TYPE_FLOAT 0x5000
+
+#define IW_PRIV_SIZE_FIXED 0x0800 /* Variable or fixed nuber of args */
+
+#define IW_PRIV_SIZE_MASK 0x07FF /* Max number of those args */
+
+/*
+ * Note : if the number of args is fixed and the size < 16 octets,
+ * instead of passing a pointer we will put args in the iwreq struct...
+ */
+
+/* ----------------------- OTHER CONSTANTS ----------------------- */
+
+/* Maximum frequencies in the range struct */
+#define IW_MAX_FREQUENCIES 16
+/* Note : if you have something like 80 frequencies,
+ * don't increase this constant and don't fill the frequency list.
+ * The user will be able to set by channel anyway... */
+
+/* Maximum bit rates in the range struct */
+#define IW_MAX_BITRATES 8
+
+/* Maximum tx powers in the range struct */
+#define IW_MAX_TXPOWER 8
+
+/* Maximum of address that you may set with SPY */
+#define IW_MAX_SPY 8
+
+/* Maximum of address that you may get in the
+ list of access points in range */
+#define IW_MAX_AP 8
+
+/* Maximum size of the ESSID and NICKN strings */
+#define IW_ESSID_MAX_SIZE 32
+
+/* Modes of operation */
+#define IW_MODE_AUTO 0 /* Let the driver decides */
+#define IW_MODE_ADHOC 1 /* Single cell network */
+#define IW_MODE_INFRA 2 /* Multi cell network, roaming, ... */
+#define IW_MODE_MASTER 3 /* Synchronisation master or Access Point */
+#define IW_MODE_REPEAT 4 /* Wireless Repeater (forwarder) */
+#define IW_MODE_SECOND 5 /* Secondary master/repeater (backup) */
+
+/* Maximum number of size of encoding token available
+ * they are listed in the range structure */
+#define IW_MAX_ENCODING_SIZES 8
+
+/* Maximum size of the encoding token in bytes */
+#define IW_ENCODING_TOKEN_MAX 32 /* 256 bits (for now) */
+
+/* Flags for encoding (along with the token) */
+#define IW_ENCODE_INDEX 0x00FF /* Token index (if needed) */
+#define IW_ENCODE_FLAGS 0xFF00 /* Flags defined below */
+#define IW_ENCODE_MODE 0xF000 /* Modes defined below */
+#define IW_ENCODE_DISABLED 0x8000 /* Encoding disabled */
+#define IW_ENCODE_ENABLED 0x0000 /* Encoding enabled */
+#define IW_ENCODE_RESTRICTED 0x4000 /* Refuse non-encoded packets */
+#define IW_ENCODE_OPEN 0x2000 /* Accept non-encoded packets */
+#define IW_ENCODE_NOKEY 0x0800 /* Key is write only, so not present */
+
+/* Power management flags available (along with the value, if any) */
+#define IW_POWER_ON 0x0000 /* No details... */
+#define IW_POWER_TYPE 0xF000 /* Type of parameter */
+#define IW_POWER_PERIOD 0x1000 /* Value is a period/duration of */
+#define IW_POWER_TIMEOUT 0x2000 /* Value is a timeout (to go asleep) */
+#define IW_POWER_MODE 0x0F00 /* Power Management mode */
+#define IW_POWER_UNICAST_R 0x0100 /* Receive only unicast messages */
+#define IW_POWER_MULTICAST_R 0x0200 /* Receive only multicast messages */
+#define IW_POWER_ALL_R 0x0300 /* Receive all messages though PM */
+#define IW_POWER_FORCE_S 0x0400 /* Force PM procedure for sending unicast */
+#define IW_POWER_REPEATER 0x0800 /* Repeat broadcast messages in PM period */
+#define IW_POWER_MODIFIER 0x000F /* Modify a parameter */
+#define IW_POWER_MIN 0x0001 /* Value is a minimum */
+#define IW_POWER_MAX 0x0002 /* Value is a maximum */
+#define IW_POWER_RELATIVE 0x0004 /* Value is not in seconds/ms/us */
+
+/* Transmit Power flags available */
+#define IW_TXPOW_DBM 0x0000 /* Value is in dBm */
+#define IW_TXPOW_MWATT 0x0001 /* Value is in mW */
+
+/****************************** TYPES ******************************/
+
+/* --------------------------- SUBTYPES --------------------------- */
+/*
+ * Generic format for most parameters that fit in an int
+ */
+struct iw_param
+{
+ __s32 value; /* The value of the parameter itself */
+ __u8 fixed; /* Hardware should not use auto select */
+ __u8 disabled; /* Disable the feature */
+ __u16 flags; /* Various specifc flags (if any) */
+};
+
+/*
+ * For all data larger than 16 octets, we need to use a
+ * pointer to memory alocated in user space.
+ */
+struct iw_point
+{
+ caddr_t pointer; /* Pointer to the data (in user space) */
+ __u16 length; /* number of fields or size in bytes */
+ __u16 flags; /* Optional params */
+};
+
+/*
+ * A frequency
+ * For numbers lower than 10^9, we encode the number in 'm' and
+ * set 'e' to 0
+ * For number greater than 10^9, we divide it by the lowest power
+ * of 10 to get 'm' lower than 10^9, with 'm'= f / (10^'e')...
+ * The power of 10 is in 'e', the result of the division is in 'm'.
+ */
+struct iw_freq
+{
+ __u32 m; /* Mantissa */
+ __u16 e; /* Exponent */
+ __u8 i; /* List index (when in range struct) */
+};
+
+/*
+ * Quality of the link
+ */
+struct iw_quality
+{
+ __u8 qual; /* link quality (%retries, SNR or better...) */
+ __u8 level; /* signal level */
+ __u8 noise; /* noise level */
+ __u8 updated; /* Flags to know if updated */
+};
+
+/*
+ * Packet discarded in the wireless adapter due to
+ * "wireless" specific problems...
+ */
+struct iw_discarded
+{
+ __u32 nwid; /* Wrong nwid */
+ __u32 code; /* Unable to code/decode */
+ __u32 misc; /* Others cases */
+};
+
+/* ------------------------ WIRELESS STATS ------------------------ */
+/*
+ * Wireless statistics (used for /proc/net/wireless)
+ */
+struct iw_statistics
+{
+ __u16 status; /* Status
+ * - device dependent for now */
+
+ struct iw_quality qual; /* Quality of the link
+ * (instant/mean/max) */
+ struct iw_discarded discard; /* Packet discarded counts */
+};
+
+/* ------------------------ IOCTL REQUEST ------------------------ */
+/*
+ * The structure to exchange data for ioctl.
+ * This structure is the same as 'struct ifreq', but (re)defined for
+ * convenience...
+ *
+ * Note that it should fit on the same memory footprint !
+ * You should check this when increasing the above structures (16 octets)
+ * 16 octets = 128 bits. Warning, pointers might be 64 bits wide...
+ */
+struct iwreq
+{
+ union
+ {
+ char ifrn_name[IFNAMSIZ]; /* if name, e.g. "eth0" */
+ } ifr_ifrn;
+
+ /* Data part */
+ union
+ {
+ /* Config - generic */
+ char name[IFNAMSIZ];
+ /* Name : used to verify the presence of wireless extensions.
+ * Name of the protocol/provider... */
+
+ struct iw_point essid; /* Extended network name */
+ struct iw_param nwid; /* network id (or domain - the cell) */
+ struct iw_freq freq; /* frequency or channel :
+ * 0-1000 = channel
+ * > 1000 = frequency in Hz */
+
+ struct iw_param sens; /* signal level threshold */
+ struct iw_param bitrate; /* default bit rate */
+ struct iw_param txpower; /* default transmit power */
+ struct iw_param rts; /* RTS threshold threshold */
+ struct iw_param frag; /* Fragmentation threshold */
+ __u32 mode; /* Operation mode */
+
+ struct iw_point encoding; /* Encoding stuff : tokens */
+ struct iw_param power; /* PM duration/timeout */
+
+ struct sockaddr ap_addr; /* Access point address */
+
+ struct iw_point data; /* Other large parameters */
+ } u;
+};
+
+/* -------------------------- IOCTL DATA -------------------------- */
+/*
+ * For those ioctl which want to exchange mode data that what could
+ * fit in the above structure...
+ */
+
+/*
+ * Range of parameters
+ */
+
+struct iw_range
+{
+ /* Informative stuff (to choose between different interface) */
+ __u32 throughput; /* To give an idea... */
+ /* In theory this value should be the maximum benchmarked
+ * TCP/IP throughput, because with most of these devices the
+ * bit rate is meaningless (overhead an co) to estimate how
+ * fast the connection will go and pick the fastest one.
+ * I suggest people to play with Netperf or any benchmark...
+ */
+
+ /* NWID (or domain id) */
+ __u32 min_nwid; /* Minimal NWID we are able to set */
+ __u32 max_nwid; /* Maximal NWID we are able to set */
+
+ /* Frequency */
+ __u16 num_channels; /* Number of channels [0; num - 1] */
+ __u8 num_frequency; /* Number of entry in the list */
+ struct iw_freq freq[IW_MAX_FREQUENCIES]; /* list */
+ /* Note : this frequency list doesn't need to fit channel numbers */
+
+ /* signal level threshold range */
+ __s32 sensitivity;
+
+ /* Quality of link & SNR stuff */
+ struct iw_quality max_qual; /* Quality of the link */
+
+ /* Rates */
+ __u8 num_bitrates; /* Number of entries in the list */
+ __s32 bitrate[IW_MAX_BITRATES]; /* list, in bps */
+
+ /* RTS threshold */
+ __s32 min_rts; /* Minimal RTS threshold */
+ __s32 max_rts; /* Maximal RTS threshold */
+
+ /* Frag threshold */
+ __s32 min_frag; /* Minimal frag threshold */
+ __s32 max_frag; /* Maximal frag threshold */
+
+ /* Power Management duration & timeout */
+ __s32 min_pmp; /* Minimal PM period */
+ __s32 max_pmp; /* Maximal PM period */
+ __s32 min_pmt; /* Minimal PM timeout */
+ __s32 max_pmt; /* Maximal PM timeout */
+ __u16 pmp_flags; /* How to decode max/min PM period */
+ __u16 pmt_flags; /* How to decode max/min PM timeout */
+ __u16 pm_capa; /* What PM options are supported */
+
+ /* Encoder stuff */
+ __u16 encoding_size[IW_MAX_ENCODING_SIZES]; /* Different token sizes */
+ __u8 num_encoding_sizes; /* Number of entry in the list */
+ __u8 max_encoding_tokens; /* Max number of tokens */
+
+ /* Transmit power */
+ __u16 txpower_capa; /* What options are supported */
+ __u8 num_txpower; /* Number of entries in the list */
+ __s32 txpower[IW_MAX_TXPOWER]; /* list, in bps */
+};
+
+/*
+ * Private ioctl interface information
+ */
+
+struct iw_priv_args
+{
+ __u32 cmd; /* Number of the ioctl to issue */
+ __u16 set_args; /* Type and number of args */
+ __u16 get_args; /* Type and number of args */
+ char name[IFNAMSIZ]; /* Name of the extension */
+};
+
+#endif /* _LINUX_WIRELESS_H */
diff --git a/package/kernel/realtek-wl/src/Users/wireless_tools.25/wireless.11.h b/package/kernel/realtek-wl/src/Users/wireless_tools.25/wireless.11.h
new file mode 100644
index 0000000..fe42409
--- /dev/null
+++ b/package/kernel/realtek-wl/src/Users/wireless_tools.25/wireless.11.h
@@ -0,0 +1,510 @@
+/*
+ * This file define a set of standard wireless extensions
+ *
+ * Version : 11 28.3.01
+ *
+ * Authors : Jean Tourrilhes - HPL - <jt@hpl.hp.com>
+ */
+
+#ifndef _LINUX_WIRELESS_H
+#define _LINUX_WIRELESS_H
+
+/************************** DOCUMENTATION **************************/
+/*
+ * Basically, the wireless extensions are for now a set of standard ioctl
+ * call + /proc/net/wireless
+ *
+ * The entry /proc/net/wireless give statistics and information on the
+ * driver.
+ * This is better than having each driver having its entry because
+ * its centralised and we may remove the driver module safely.
+ *
+ * Ioctl are used to configure the driver and issue commands. This is
+ * better than command line options of insmod because we may want to
+ * change dynamically (while the driver is running) some parameters.
+ *
+ * The ioctl mechanimsm are copied from standard devices ioctl.
+ * We have the list of command plus a structure descibing the
+ * data exchanged...
+ * Note that to add these ioctl, I was obliged to modify :
+ * net/core/dev.c (two place + add include)
+ * net/ipv4/af_inet.c (one place + add include)
+ *
+ * /proc/net/wireless is a copy of /proc/net/dev.
+ * We have a structure for data passed from the driver to /proc/net/wireless
+ * Too add this, I've modified :
+ * net/core/dev.c (two other places)
+ * include/linux/netdevice.h (one place)
+ * include/linux/proc_fs.h (one place)
+ *
+ * Do not add here things that are redundant with other mechanisms
+ * (drivers init, ifconfig, /proc/net/dev, ...) and with are not
+ * wireless specific.
+ *
+ * These wireless extensions are not magic : each driver has to provide
+ * support for them...
+ *
+ * IMPORTANT NOTE : As everything in the kernel, this is very much a
+ * work in progress. Contact me if you have ideas of improvements...
+ */
+
+/***************************** INCLUDES *****************************/
+
+#include <linux/types.h> /* for "caddr_t" et al */
+#include <linux/socket.h> /* for "struct sockaddr" et al */
+#include <linux/if.h> /* for IFNAMSIZ and co... */
+
+/**************************** CONSTANTS ****************************/
+
+/* --------------------------- VERSION --------------------------- */
+/*
+ * This constant is used to know the availability of the wireless
+ * extensions and to know which version of wireless extensions it is
+ * (there is some stuff that will be added in the future...)
+ * I just plan to increment with each new version.
+ */
+#define WIRELESS_EXT 11
+
+/*
+ * Changes :
+ *
+ * V2 to V3
+ * --------
+ * Alan Cox start some incompatibles changes. I've integrated a bit more.
+ * - Encryption renamed to Encode to avoid US regulation problems
+ * - Frequency changed from float to struct to avoid problems on old 386
+ *
+ * V3 to V4
+ * --------
+ * - Add sensitivity
+ *
+ * V4 to V5
+ * --------
+ * - Missing encoding definitions in range
+ * - Access points stuff
+ *
+ * V5 to V6
+ * --------
+ * - 802.11 support (ESSID ioctls)
+ *
+ * V6 to V7
+ * --------
+ * - define IW_ESSID_MAX_SIZE and IW_MAX_AP
+ *
+ * V7 to V8
+ * --------
+ * - Changed my e-mail address
+ * - More 802.11 support (nickname, rate, rts, frag)
+ * - List index in frequencies
+ *
+ * V8 to V9
+ * --------
+ * - Support for 'mode of operation' (ad-hoc, managed...)
+ * - Support for unicast and multicast power saving
+ * - Change encoding to support larger tokens (>64 bits)
+ * - Updated iw_params (disable, flags) and use it for NWID
+ * - Extracted iw_point from iwreq for clarity
+ *
+ * V9 to V10
+ * ---------
+ * - Add PM capability to range structure
+ * - Add PM modifier : MAX/MIN/RELATIVE
+ * - Add encoding option : IW_ENCODE_NOKEY
+ * - Add TxPower ioctls (work like TxRate)
+ *
+ * V10 to V11
+ * ----------
+ * - Add WE version in range (help backward/forward compatibility)
+ * - Add retry ioctls (work like PM)
+ */
+
+/* -------------------------- IOCTL LIST -------------------------- */
+
+/* Basic operations */
+#define SIOCSIWNAME 0x8B00 /* Unused */
+#define SIOCGIWNAME 0x8B01 /* get name == wireless protocol */
+#define SIOCSIWNWID 0x8B02 /* set network id (the cell) */
+#define SIOCGIWNWID 0x8B03 /* get network id */
+#define SIOCSIWFREQ 0x8B04 /* set channel/frequency (Hz) */
+#define SIOCGIWFREQ 0x8B05 /* get channel/frequency (Hz) */
+#define SIOCSIWMODE 0x8B06 /* set operation mode */
+#define SIOCGIWMODE 0x8B07 /* get operation mode */
+#define SIOCSIWSENS 0x8B08 /* set sensitivity (dBm) */
+#define SIOCGIWSENS 0x8B09 /* get sensitivity (dBm) */
+
+/* Informative stuff */
+#define SIOCSIWRANGE 0x8B0A /* Unused */
+#define SIOCGIWRANGE 0x8B0B /* Get range of parameters */
+#define SIOCSIWPRIV 0x8B0C /* Unused */
+#define SIOCGIWPRIV 0x8B0D /* get private ioctl interface info */
+
+/* Mobile IP support */
+#define SIOCSIWSPY 0x8B10 /* set spy addresses */
+#define SIOCGIWSPY 0x8B11 /* get spy info (quality of link) */
+
+/* Access Point manipulation */
+#define SIOCSIWAP 0x8B14 /* set access point MAC addresses */
+#define SIOCGIWAP 0x8B15 /* get access point MAC addresses */
+#define SIOCGIWAPLIST 0x8B17 /* get list of access point in range */
+
+/* 802.11 specific support */
+#define SIOCSIWESSID 0x8B1A /* set ESSID (network name) */
+#define SIOCGIWESSID 0x8B1B /* get ESSID */
+#define SIOCSIWNICKN 0x8B1C /* set node name/nickname */
+#define SIOCGIWNICKN 0x8B1D /* get node name/nickname */
+/* As the ESSID and NICKN are strings up to 32 bytes long, it doesn't fit
+ * within the 'iwreq' structure, so we need to use the 'data' member to
+ * point to a string in user space, like it is done for RANGE...
+ * The "flags" member indicate if the ESSID is active or not (promiscuous).
+ */
+
+/* Other parameters usefull in 802.11 and some other devices */
+#define SIOCSIWRATE 0x8B20 /* set default bit rate (bps) */
+#define SIOCGIWRATE 0x8B21 /* get default bit rate (bps) */
+#define SIOCSIWRTS 0x8B22 /* set RTS/CTS threshold (bytes) */
+#define SIOCGIWRTS 0x8B23 /* get RTS/CTS threshold (bytes) */
+#define SIOCSIWFRAG 0x8B24 /* set fragmentation thr (bytes) */
+#define SIOCGIWFRAG 0x8B25 /* get fragmentation thr (bytes) */
+#define SIOCSIWTXPOW 0x8B26 /* set transmit power (dBm) */
+#define SIOCGIWTXPOW 0x8B27 /* get transmit power (dBm) */
+#define SIOCSIWRETRY 0x8B28 /* set retry limits and lifetime */
+#define SIOCGIWRETRY 0x8B29 /* get retry limits and lifetime */
+
+/* Encoding stuff (scrambling, hardware security, WEP...) */
+#define SIOCSIWENCODE 0x8B2A /* set encoding token & mode */
+#define SIOCGIWENCODE 0x8B2B /* get encoding token & mode */
+/* Power saving stuff (power management, unicast and multicast) */
+#define SIOCSIWPOWER 0x8B2C /* set Power Management settings */
+#define SIOCGIWPOWER 0x8B2D /* get Power Management settings */
+
+/* ------------------------- IOCTL STUFF ------------------------- */
+
+/* The first and the last (range) */
+#define SIOCIWFIRST 0x8B00
+#define SIOCIWLAST 0x8B30
+
+/* Even : get (world access), odd : set (root access) */
+#define IW_IS_SET(cmd) (!((cmd) & 0x1))
+#define IW_IS_GET(cmd) ((cmd) & 0x1)
+
+/* ------------------------- PRIVATE INFO ------------------------- */
+/*
+ * The following is used with SIOCGIWPRIV. It allow a driver to define
+ * the interface (name, type of data) for its private ioctl.
+ * Privates ioctl are SIOCDEVPRIVATE -> SIOCDEVPRIVATE + 0xF
+ */
+
+#define IW_PRIV_TYPE_MASK 0x7000 /* Type of arguments */
+#define IW_PRIV_TYPE_NONE 0x0000
+#define IW_PRIV_TYPE_BYTE 0x1000 /* Char as number */
+#define IW_PRIV_TYPE_CHAR 0x2000 /* Char as character */
+#define IW_PRIV_TYPE_INT 0x4000 /* 32 bits int */
+#define IW_PRIV_TYPE_FLOAT 0x5000
+
+#define IW_PRIV_SIZE_FIXED 0x0800 /* Variable or fixed nuber of args */
+
+#define IW_PRIV_SIZE_MASK 0x07FF /* Max number of those args */
+
+/*
+ * Note : if the number of args is fixed and the size < 16 octets,
+ * instead of passing a pointer we will put args in the iwreq struct...
+ */
+
+/* ----------------------- OTHER CONSTANTS ----------------------- */
+
+/* Maximum frequencies in the range struct */
+#define IW_MAX_FREQUENCIES 16
+/* Note : if you have something like 80 frequencies,
+ * don't increase this constant and don't fill the frequency list.
+ * The user will be able to set by channel anyway... */
+
+/* Maximum bit rates in the range struct */
+#define IW_MAX_BITRATES 8
+
+/* Maximum tx powers in the range struct */
+#define IW_MAX_TXPOWER 8
+
+/* Maximum of address that you may set with SPY */
+#define IW_MAX_SPY 8
+
+/* Maximum of address that you may get in the
+ list of access points in range */
+#define IW_MAX_AP 8
+
+/* Maximum size of the ESSID and NICKN strings */
+#define IW_ESSID_MAX_SIZE 32
+
+/* Modes of operation */
+#define IW_MODE_AUTO 0 /* Let the driver decides */
+#define IW_MODE_ADHOC 1 /* Single cell network */
+#define IW_MODE_INFRA 2 /* Multi cell network, roaming, ... */
+#define IW_MODE_MASTER 3 /* Synchronisation master or Access Point */
+#define IW_MODE_REPEAT 4 /* Wireless Repeater (forwarder) */
+#define IW_MODE_SECOND 5 /* Secondary master/repeater (backup) */
+
+/* Maximum number of size of encoding token available
+ * they are listed in the range structure */
+#define IW_MAX_ENCODING_SIZES 8
+
+/* Maximum size of the encoding token in bytes */
+#define IW_ENCODING_TOKEN_MAX 32 /* 256 bits (for now) */
+
+/* Flags for encoding (along with the token) */
+#define IW_ENCODE_INDEX 0x00FF /* Token index (if needed) */
+#define IW_ENCODE_FLAGS 0xFF00 /* Flags defined below */
+#define IW_ENCODE_MODE 0xF000 /* Modes defined below */
+#define IW_ENCODE_DISABLED 0x8000 /* Encoding disabled */
+#define IW_ENCODE_ENABLED 0x0000 /* Encoding enabled */
+#define IW_ENCODE_RESTRICTED 0x4000 /* Refuse non-encoded packets */
+#define IW_ENCODE_OPEN 0x2000 /* Accept non-encoded packets */
+#define IW_ENCODE_NOKEY 0x0800 /* Key is write only, so not present */
+
+/* Power management flags available (along with the value, if any) */
+#define IW_POWER_ON 0x0000 /* No details... */
+#define IW_POWER_TYPE 0xF000 /* Type of parameter */
+#define IW_POWER_PERIOD 0x1000 /* Value is a period/duration of */
+#define IW_POWER_TIMEOUT 0x2000 /* Value is a timeout (to go asleep) */
+#define IW_POWER_MODE 0x0F00 /* Power Management mode */
+#define IW_POWER_UNICAST_R 0x0100 /* Receive only unicast messages */
+#define IW_POWER_MULTICAST_R 0x0200 /* Receive only multicast messages */
+#define IW_POWER_ALL_R 0x0300 /* Receive all messages though PM */
+#define IW_POWER_FORCE_S 0x0400 /* Force PM procedure for sending unicast */
+#define IW_POWER_REPEATER 0x0800 /* Repeat broadcast messages in PM period */
+#define IW_POWER_MODIFIER 0x000F /* Modify a parameter */
+#define IW_POWER_MIN 0x0001 /* Value is a minimum */
+#define IW_POWER_MAX 0x0002 /* Value is a maximum */
+#define IW_POWER_RELATIVE 0x0004 /* Value is not in seconds/ms/us */
+
+/* Transmit Power flags available */
+#define IW_TXPOW_DBM 0x0000 /* Value is in dBm */
+#define IW_TXPOW_MWATT 0x0001 /* Value is in mW */
+
+/* Retry limits and lifetime flags available */
+#define IW_RETRY_ON 0x0000 /* No details... */
+#define IW_RETRY_TYPE 0xF000 /* Type of parameter */
+#define IW_RETRY_LIMIT 0x1000 /* Maximum number of retries*/
+#define IW_RETRY_LIFETIME 0x2000 /* Maximum duration of retries in us */
+#define IW_RETRY_MODIFIER 0x000F /* Modify a parameter */
+#define IW_RETRY_MIN 0x0001 /* Value is a minimum */
+#define IW_RETRY_MAX 0x0002 /* Value is a maximum */
+#define IW_RETRY_RELATIVE 0x0004 /* Value is not in seconds/ms/us */
+
+/****************************** TYPES ******************************/
+
+/* --------------------------- SUBTYPES --------------------------- */
+/*
+ * Generic format for most parameters that fit in an int
+ */
+struct iw_param
+{
+ __s32 value; /* The value of the parameter itself */
+ __u8 fixed; /* Hardware should not use auto select */
+ __u8 disabled; /* Disable the feature */
+ __u16 flags; /* Various specifc flags (if any) */
+};
+
+/*
+ * For all data larger than 16 octets, we need to use a
+ * pointer to memory alocated in user space.
+ */
+struct iw_point
+{
+ caddr_t pointer; /* Pointer to the data (in user space) */
+ __u16 length; /* number of fields or size in bytes */
+ __u16 flags; /* Optional params */
+};
+
+/*
+ * A frequency
+ * For numbers lower than 10^9, we encode the number in 'm' and
+ * set 'e' to 0
+ * For number greater than 10^9, we divide it by the lowest power
+ * of 10 to get 'm' lower than 10^9, with 'm'= f / (10^'e')...
+ * The power of 10 is in 'e', the result of the division is in 'm'.
+ */
+struct iw_freq
+{
+ __u32 m; /* Mantissa */
+ __u16 e; /* Exponent */
+ __u8 i; /* List index (when in range struct) */
+};
+
+/*
+ * Quality of the link
+ */
+struct iw_quality
+{
+ __u8 qual; /* link quality (%retries, SNR or better...) */
+ __u8 level; /* signal level */
+ __u8 noise; /* noise level */
+ __u8 updated; /* Flags to know if updated */
+};
+
+/*
+ * Packet discarded in the wireless adapter due to
+ * "wireless" specific problems...
+ */
+struct iw_discarded
+{
+ __u32 nwid; /* Wrong nwid */
+ __u32 code; /* Unable to code/decode */
+ __u32 misc; /* Others cases */
+};
+
+/* ------------------------ WIRELESS STATS ------------------------ */
+/*
+ * Wireless statistics (used for /proc/net/wireless)
+ */
+struct iw_statistics
+{
+ __u16 status; /* Status
+ * - device dependent for now */
+
+ struct iw_quality qual; /* Quality of the link
+ * (instant/mean/max) */
+ struct iw_discarded discard; /* Packet discarded counts */
+};
+
+/* ------------------------ IOCTL REQUEST ------------------------ */
+/*
+ * The structure to exchange data for ioctl.
+ * This structure is the same as 'struct ifreq', but (re)defined for
+ * convenience...
+ *
+ * Note that it should fit on the same memory footprint !
+ * You should check this when increasing the above structures (16 octets)
+ * 16 octets = 128 bits. Warning, pointers might be 64 bits wide...
+ */
+struct iwreq
+{
+ union
+ {
+ char ifrn_name[IFNAMSIZ]; /* if name, e.g. "eth0" */
+ } ifr_ifrn;
+
+ /* Data part */
+ union
+ {
+ /* Config - generic */
+ char name[IFNAMSIZ];
+ /* Name : used to verify the presence of wireless extensions.
+ * Name of the protocol/provider... */
+
+ struct iw_point essid; /* Extended network name */
+ struct iw_param nwid; /* network id (or domain - the cell) */
+ struct iw_freq freq; /* frequency or channel :
+ * 0-1000 = channel
+ * > 1000 = frequency in Hz */
+
+ struct iw_param sens; /* signal level threshold */
+ struct iw_param bitrate; /* default bit rate */
+ struct iw_param txpower; /* default transmit power */
+ struct iw_param rts; /* RTS threshold threshold */
+ struct iw_param frag; /* Fragmentation threshold */
+ __u32 mode; /* Operation mode */
+ struct iw_param retry; /* Retry limits & lifetime */
+
+ struct iw_point encoding; /* Encoding stuff : tokens */
+ struct iw_param power; /* PM duration/timeout */
+
+ struct sockaddr ap_addr; /* Access point address */
+
+ struct iw_point data; /* Other large parameters */
+ } u;
+};
+
+/* -------------------------- IOCTL DATA -------------------------- */
+/*
+ * For those ioctl which want to exchange mode data that what could
+ * fit in the above structure...
+ */
+
+/*
+ * Range of parameters
+ */
+
+struct iw_range
+{
+ /* Informative stuff (to choose between different interface) */
+ __u32 throughput; /* To give an idea... */
+ /* In theory this value should be the maximum benchmarked
+ * TCP/IP throughput, because with most of these devices the
+ * bit rate is meaningless (overhead an co) to estimate how
+ * fast the connection will go and pick the fastest one.
+ * I suggest people to play with Netperf or any benchmark...
+ */
+
+ /* NWID (or domain id) */
+ __u32 min_nwid; /* Minimal NWID we are able to set */
+ __u32 max_nwid; /* Maximal NWID we are able to set */
+
+ /* Frequency */
+ __u16 num_channels; /* Number of channels [0; num - 1] */
+ __u8 num_frequency; /* Number of entry in the list */
+ struct iw_freq freq[IW_MAX_FREQUENCIES]; /* list */
+ /* Note : this frequency list doesn't need to fit channel numbers */
+
+ /* signal level threshold range */
+ __s32 sensitivity;
+
+ /* Quality of link & SNR stuff */
+ struct iw_quality max_qual; /* Quality of the link */
+
+ /* Rates */
+ __u8 num_bitrates; /* Number of entries in the list */
+ __s32 bitrate[IW_MAX_BITRATES]; /* list, in bps */
+
+ /* RTS threshold */
+ __s32 min_rts; /* Minimal RTS threshold */
+ __s32 max_rts; /* Maximal RTS threshold */
+
+ /* Frag threshold */
+ __s32 min_frag; /* Minimal frag threshold */
+ __s32 max_frag; /* Maximal frag threshold */
+
+ /* Power Management duration & timeout */
+ __s32 min_pmp; /* Minimal PM period */
+ __s32 max_pmp; /* Maximal PM period */
+ __s32 min_pmt; /* Minimal PM timeout */
+ __s32 max_pmt; /* Maximal PM timeout */
+ __u16 pmp_flags; /* How to decode max/min PM period */
+ __u16 pmt_flags; /* How to decode max/min PM timeout */
+ __u16 pm_capa; /* What PM options are supported */
+
+ /* Encoder stuff */
+ __u16 encoding_size[IW_MAX_ENCODING_SIZES]; /* Different token sizes */
+ __u8 num_encoding_sizes; /* Number of entry in the list */
+ __u8 max_encoding_tokens; /* Max number of tokens */
+
+ /* Transmit power */
+ __u16 txpower_capa; /* What options are supported */
+ __u8 num_txpower; /* Number of entries in the list */
+ __s32 txpower[IW_MAX_TXPOWER]; /* list, in bps */
+
+ /* Wireless Extension version info */
+ __u8 we_version_compiled; /* Must be WIRELESS_EXT */
+ __u8 we_version_source; /* Last update of source */
+
+ /* Retry limits and lifetime */
+ __u16 retry_capa; /* What retry options are supported */
+ __u16 retry_flags; /* How to decode max/min retry limit */
+ __u16 r_time_flags; /* How to decode max/min retry life */
+ __s32 min_retry; /* Minimal number of retries */
+ __s32 max_retry; /* Maximal number of retries */
+ __s32 min_r_time; /* Minimal retry lifetime */
+ __s32 max_r_time; /* Maximal retry lifetime */
+};
+
+/*
+ * Private ioctl interface information
+ */
+
+struct iw_priv_args
+{
+ __u32 cmd; /* Number of the ioctl to issue */
+ __u16 set_args; /* Type and number of args */
+ __u16 get_args; /* Type and number of args */
+ char name[IFNAMSIZ]; /* Name of the extension */
+};
+
+#endif /* _LINUX_WIRELESS_H */
diff --git a/package/kernel/realtek-wl/src/Users/wireless_tools.25/wireless.12.h b/package/kernel/realtek-wl/src/Users/wireless_tools.25/wireless.12.h
new file mode 100644
index 0000000..4183d4a
--- /dev/null
+++ b/package/kernel/realtek-wl/src/Users/wireless_tools.25/wireless.12.h
@@ -0,0 +1,570 @@
+/*
+ * This file define a set of standard wireless extensions
+ *
+ * Version : 12 5.10.01
+ *
+ * Authors : Jean Tourrilhes - HPL - <jt@hpl.hp.com>
+ */
+
+#ifndef _LINUX_WIRELESS_H
+#define _LINUX_WIRELESS_H
+
+/************************** DOCUMENTATION **************************/
+/*
+ * Basically, the wireless extensions are for now a set of standard ioctl
+ * call + /proc/net/wireless
+ *
+ * The entry /proc/net/wireless give statistics and information on the
+ * driver.
+ * This is better than having each driver having its entry because
+ * its centralised and we may remove the driver module safely.
+ *
+ * Ioctl are used to configure the driver and issue commands. This is
+ * better than command line options of insmod because we may want to
+ * change dynamically (while the driver is running) some parameters.
+ *
+ * The ioctl mechanimsm are copied from standard devices ioctl.
+ * We have the list of command plus a structure descibing the
+ * data exchanged...
+ * Note that to add these ioctl, I was obliged to modify :
+ * net/core/dev.c (two place + add include)
+ * net/ipv4/af_inet.c (one place + add include)
+ *
+ * /proc/net/wireless is a copy of /proc/net/dev.
+ * We have a structure for data passed from the driver to /proc/net/wireless
+ * Too add this, I've modified :
+ * net/core/dev.c (two other places)
+ * include/linux/netdevice.h (one place)
+ * include/linux/proc_fs.h (one place)
+ *
+ * Do not add here things that are redundant with other mechanisms
+ * (drivers init, ifconfig, /proc/net/dev, ...) and with are not
+ * wireless specific.
+ *
+ * These wireless extensions are not magic : each driver has to provide
+ * support for them...
+ *
+ * IMPORTANT NOTE : As everything in the kernel, this is very much a
+ * work in progress. Contact me if you have ideas of improvements...
+ */
+
+/***************************** INCLUDES *****************************/
+
+#include <linux/types.h> /* for "caddr_t" et al */
+#include <linux/socket.h> /* for "struct sockaddr" et al */
+#include <linux/if.h> /* for IFNAMSIZ and co... */
+
+/**************************** CONSTANTS ****************************/
+
+/* --------------------------- VERSION --------------------------- */
+/*
+ * This constant is used to know the availability of the wireless
+ * extensions and to know which version of wireless extensions it is
+ * (there is some stuff that will be added in the future...)
+ * I just plan to increment with each new version.
+ */
+#define WIRELESS_EXT 12
+
+/*
+ * Changes :
+ *
+ * V2 to V3
+ * --------
+ * Alan Cox start some incompatibles changes. I've integrated a bit more.
+ * - Encryption renamed to Encode to avoid US regulation problems
+ * - Frequency changed from float to struct to avoid problems on old 386
+ *
+ * V3 to V4
+ * --------
+ * - Add sensitivity
+ *
+ * V4 to V5
+ * --------
+ * - Missing encoding definitions in range
+ * - Access points stuff
+ *
+ * V5 to V6
+ * --------
+ * - 802.11 support (ESSID ioctls)
+ *
+ * V6 to V7
+ * --------
+ * - define IW_ESSID_MAX_SIZE and IW_MAX_AP
+ *
+ * V7 to V8
+ * --------
+ * - Changed my e-mail address
+ * - More 802.11 support (nickname, rate, rts, frag)
+ * - List index in frequencies
+ *
+ * V8 to V9
+ * --------
+ * - Support for 'mode of operation' (ad-hoc, managed...)
+ * - Support for unicast and multicast power saving
+ * - Change encoding to support larger tokens (>64 bits)
+ * - Updated iw_params (disable, flags) and use it for NWID
+ * - Extracted iw_point from iwreq for clarity
+ *
+ * V9 to V10
+ * ---------
+ * - Add PM capability to range structure
+ * - Add PM modifier : MAX/MIN/RELATIVE
+ * - Add encoding option : IW_ENCODE_NOKEY
+ * - Add TxPower ioctls (work like TxRate)
+ *
+ * V10 to V11
+ * ----------
+ * - Add WE version in range (help backward/forward compatibility)
+ * - Add retry ioctls (work like PM)
+ *
+ * V11 to V12
+ * ----------
+ * - Add SIOCSIWSTATS to get /proc/net/wireless programatically
+ * - Add DEV PRIVATE IOCTL to avoid collisions in SIOCDEVPRIVATE space
+ * - Add new statistics (frag, retry, beacon)
+ * - Add average quality (for user space calibration)
+ */
+
+/* -------------------------- IOCTL LIST -------------------------- */
+
+/* Basic operations */
+#define SIOCSIWNAME 0x8B00 /* Unused */
+#define SIOCGIWNAME 0x8B01 /* get name == wireless protocol */
+#define SIOCSIWNWID 0x8B02 /* set network id (the cell) */
+#define SIOCGIWNWID 0x8B03 /* get network id */
+#define SIOCSIWFREQ 0x8B04 /* set channel/frequency (Hz) */
+#define SIOCGIWFREQ 0x8B05 /* get channel/frequency (Hz) */
+#define SIOCSIWMODE 0x8B06 /* set operation mode */
+#define SIOCGIWMODE 0x8B07 /* get operation mode */
+#define SIOCSIWSENS 0x8B08 /* set sensitivity (dBm) */
+#define SIOCGIWSENS 0x8B09 /* get sensitivity (dBm) */
+
+/* Informative stuff */
+#define SIOCSIWRANGE 0x8B0A /* Unused */
+#define SIOCGIWRANGE 0x8B0B /* Get range of parameters */
+#define SIOCSIWPRIV 0x8B0C /* Unused */
+#define SIOCGIWPRIV 0x8B0D /* get private ioctl interface info */
+#define SIOCSIWSTATS 0x8B0E /* Unused */
+#define SIOCGIWSTATS 0x8B0F /* Get /proc/net/wireless stats */
+
+/* Mobile IP support */
+#define SIOCSIWSPY 0x8B10 /* set spy addresses */
+#define SIOCGIWSPY 0x8B11 /* get spy info (quality of link) */
+
+/* Access Point manipulation */
+#define SIOCSIWAP 0x8B14 /* set access point MAC addresses */
+#define SIOCGIWAP 0x8B15 /* get access point MAC addresses */
+#define SIOCGIWAPLIST 0x8B17 /* get list of access point in range */
+
+/* 802.11 specific support */
+#define SIOCSIWESSID 0x8B1A /* set ESSID (network name) */
+#define SIOCGIWESSID 0x8B1B /* get ESSID */
+#define SIOCSIWNICKN 0x8B1C /* set node name/nickname */
+#define SIOCGIWNICKN 0x8B1D /* get node name/nickname */
+/* As the ESSID and NICKN are strings up to 32 bytes long, it doesn't fit
+ * within the 'iwreq' structure, so we need to use the 'data' member to
+ * point to a string in user space, like it is done for RANGE...
+ * The "flags" member indicate if the ESSID is active or not (promiscuous).
+ */
+
+/* Other parameters useful in 802.11 and some other devices */
+#define SIOCSIWRATE 0x8B20 /* set default bit rate (bps) */
+#define SIOCGIWRATE 0x8B21 /* get default bit rate (bps) */
+#define SIOCSIWRTS 0x8B22 /* set RTS/CTS threshold (bytes) */
+#define SIOCGIWRTS 0x8B23 /* get RTS/CTS threshold (bytes) */
+#define SIOCSIWFRAG 0x8B24 /* set fragmentation thr (bytes) */
+#define SIOCGIWFRAG 0x8B25 /* get fragmentation thr (bytes) */
+#define SIOCSIWTXPOW 0x8B26 /* set transmit power (dBm) */
+#define SIOCGIWTXPOW 0x8B27 /* get transmit power (dBm) */
+#define SIOCSIWRETRY 0x8B28 /* set retry limits and lifetime */
+#define SIOCGIWRETRY 0x8B29 /* get retry limits and lifetime */
+
+/* Encoding stuff (scrambling, hardware security, WEP...) */
+#define SIOCSIWENCODE 0x8B2A /* set encoding token & mode */
+#define SIOCGIWENCODE 0x8B2B /* get encoding token & mode */
+/* Power saving stuff (power management, unicast and multicast) */
+#define SIOCSIWPOWER 0x8B2C /* set Power Management settings */
+#define SIOCGIWPOWER 0x8B2D /* get Power Management settings */
+
+/* -------------------- DEV PRIVATE IOCTL LIST -------------------- */
+
+/* These 16 ioctl are wireless device private.
+ * Each driver is free to use them for whatever purpose it chooses,
+ * however the driver *must* export the description of those ioctls
+ * with SIOCGIWPRIV and *must* use arguments as defined below.
+ * If you don't follow those rules, DaveM is going to hate you (reason :
+ * it make mixed 32/64bit operation impossible).
+ */
+#define SIOCIWFIRSTPRIV 0x8BE0
+#define SIOCIWLASTPRIV 0x8BFF
+/* Previously, we were using SIOCDEVPRIVATE, but we know have our
+ * separate range because of collisions with other tools such as
+ * 'mii-tool'.
+ * We now have 32 commands, so a bit more space ;-).
+ * Also, all 'odd' commands are only usable by root and don't return the
+ * content of ifr/iwr to user (but you are not obliged to use the set/get
+ * convention, just use every other two command).
+ * And I repeat : you are not obliged to use them with iwspy, but you
+ * must be compliant with it.
+ */
+
+/* ------------------------- IOCTL STUFF ------------------------- */
+
+/* The first and the last (range) */
+#define SIOCIWFIRST 0x8B00
+#define SIOCIWLAST SIOCIWLASTPRIV /* 0x8BFF */
+
+/* Even : get (world access), odd : set (root access) */
+#define IW_IS_SET(cmd) (!((cmd) & 0x1))
+#define IW_IS_GET(cmd) ((cmd) & 0x1)
+
+/* ------------------------- PRIVATE INFO ------------------------- */
+/*
+ * The following is used with SIOCGIWPRIV. It allow a driver to define
+ * the interface (name, type of data) for its private ioctl.
+ * Privates ioctl are SIOCIWFIRSTPRIV -> SIOCIWLASTPRIV
+ */
+
+#define IW_PRIV_TYPE_MASK 0x7000 /* Type of arguments */
+#define IW_PRIV_TYPE_NONE 0x0000
+#define IW_PRIV_TYPE_BYTE 0x1000 /* Char as number */
+#define IW_PRIV_TYPE_CHAR 0x2000 /* Char as character */
+#define IW_PRIV_TYPE_INT 0x4000 /* 32 bits int */
+#define IW_PRIV_TYPE_FLOAT 0x5000
+
+#define IW_PRIV_SIZE_FIXED 0x0800 /* Variable or fixed nuber of args */
+
+#define IW_PRIV_SIZE_MASK 0x07FF /* Max number of those args */
+
+/*
+ * Note : if the number of args is fixed and the size < 16 octets,
+ * instead of passing a pointer we will put args in the iwreq struct...
+ */
+
+/* ----------------------- OTHER CONSTANTS ----------------------- */
+
+/* Maximum frequencies in the range struct */
+#define IW_MAX_FREQUENCIES 16
+/* Note : if you have something like 80 frequencies,
+ * don't increase this constant and don't fill the frequency list.
+ * The user will be able to set by channel anyway... */
+
+/* Maximum bit rates in the range struct */
+#define IW_MAX_BITRATES 8
+
+/* Maximum tx powers in the range struct */
+#define IW_MAX_TXPOWER 8
+
+/* Maximum of address that you may set with SPY */
+#define IW_MAX_SPY 8
+
+/* Maximum of address that you may get in the
+ list of access points in range */
+#define IW_MAX_AP 8
+
+/* Maximum size of the ESSID and NICKN strings */
+#define IW_ESSID_MAX_SIZE 32
+
+/* Modes of operation */
+#define IW_MODE_AUTO 0 /* Let the driver decides */
+#define IW_MODE_ADHOC 1 /* Single cell network */
+#define IW_MODE_INFRA 2 /* Multi cell network, roaming, ... */
+#define IW_MODE_MASTER 3 /* Synchronisation master or Access Point */
+#define IW_MODE_REPEAT 4 /* Wireless Repeater (forwarder) */
+#define IW_MODE_SECOND 5 /* Secondary master/repeater (backup) */
+
+/* Maximum number of size of encoding token available
+ * they are listed in the range structure */
+#define IW_MAX_ENCODING_SIZES 8
+
+/* Maximum size of the encoding token in bytes */
+#define IW_ENCODING_TOKEN_MAX 32 /* 256 bits (for now) */
+
+/* Flags for encoding (along with the token) */
+#define IW_ENCODE_INDEX 0x00FF /* Token index (if needed) */
+#define IW_ENCODE_FLAGS 0xFF00 /* Flags defined below */
+#define IW_ENCODE_MODE 0xF000 /* Modes defined below */
+#define IW_ENCODE_DISABLED 0x8000 /* Encoding disabled */
+#define IW_ENCODE_ENABLED 0x0000 /* Encoding enabled */
+#define IW_ENCODE_RESTRICTED 0x4000 /* Refuse non-encoded packets */
+#define IW_ENCODE_OPEN 0x2000 /* Accept non-encoded packets */
+#define IW_ENCODE_NOKEY 0x0800 /* Key is write only, so not present */
+
+/* Power management flags available (along with the value, if any) */
+#define IW_POWER_ON 0x0000 /* No details... */
+#define IW_POWER_TYPE 0xF000 /* Type of parameter */
+#define IW_POWER_PERIOD 0x1000 /* Value is a period/duration of */
+#define IW_POWER_TIMEOUT 0x2000 /* Value is a timeout (to go asleep) */
+#define IW_POWER_MODE 0x0F00 /* Power Management mode */
+#define IW_POWER_UNICAST_R 0x0100 /* Receive only unicast messages */
+#define IW_POWER_MULTICAST_R 0x0200 /* Receive only multicast messages */
+#define IW_POWER_ALL_R 0x0300 /* Receive all messages though PM */
+#define IW_POWER_FORCE_S 0x0400 /* Force PM procedure for sending unicast */
+#define IW_POWER_REPEATER 0x0800 /* Repeat broadcast messages in PM period */
+#define IW_POWER_MODIFIER 0x000F /* Modify a parameter */
+#define IW_POWER_MIN 0x0001 /* Value is a minimum */
+#define IW_POWER_MAX 0x0002 /* Value is a maximum */
+#define IW_POWER_RELATIVE 0x0004 /* Value is not in seconds/ms/us */
+
+/* Transmit Power flags available */
+#define IW_TXPOW_DBM 0x0000 /* Value is in dBm */
+#define IW_TXPOW_MWATT 0x0001 /* Value is in mW */
+
+/* Retry limits and lifetime flags available */
+#define IW_RETRY_ON 0x0000 /* No details... */
+#define IW_RETRY_TYPE 0xF000 /* Type of parameter */
+#define IW_RETRY_LIMIT 0x1000 /* Maximum number of retries*/
+#define IW_RETRY_LIFETIME 0x2000 /* Maximum duration of retries in us */
+#define IW_RETRY_MODIFIER 0x000F /* Modify a parameter */
+#define IW_RETRY_MIN 0x0001 /* Value is a minimum */
+#define IW_RETRY_MAX 0x0002 /* Value is a maximum */
+#define IW_RETRY_RELATIVE 0x0004 /* Value is not in seconds/ms/us */
+
+/****************************** TYPES ******************************/
+
+/* --------------------------- SUBTYPES --------------------------- */
+/*
+ * Generic format for most parameters that fit in an int
+ */
+struct iw_param
+{
+ __s32 value; /* The value of the parameter itself */
+ __u8 fixed; /* Hardware should not use auto select */
+ __u8 disabled; /* Disable the feature */
+ __u16 flags; /* Various specifc flags (if any) */
+};
+
+/*
+ * For all data larger than 16 octets, we need to use a
+ * pointer to memory allocated in user space.
+ */
+struct iw_point
+{
+ caddr_t pointer; /* Pointer to the data (in user space) */
+ __u16 length; /* number of fields or size in bytes */
+ __u16 flags; /* Optional params */
+};
+
+/*
+ * A frequency
+ * For numbers lower than 10^9, we encode the number in 'm' and
+ * set 'e' to 0
+ * For number greater than 10^9, we divide it by the lowest power
+ * of 10 to get 'm' lower than 10^9, with 'm'= f / (10^'e')...
+ * The power of 10 is in 'e', the result of the division is in 'm'.
+ */
+struct iw_freq
+{
+ __u32 m; /* Mantissa */
+ __u16 e; /* Exponent */
+ __u8 i; /* List index (when in range struct) */
+};
+
+/*
+ * Quality of the link
+ */
+struct iw_quality
+{
+ __u8 qual; /* link quality (%retries, SNR,
+ %missed beacons or better...) */
+ __u8 level; /* signal level (dBm) */
+ __u8 noise; /* noise level (dBm) */
+ __u8 updated; /* Flags to know if updated */
+};
+
+/*
+ * Packet discarded in the wireless adapter due to
+ * "wireless" specific problems...
+ * Note : the list of counter and statistics in net_device_stats
+ * is already pretty exhaustive, and you should use that first.
+ * This is only additional stats...
+ */
+struct iw_discarded
+{
+ __u32 nwid; /* Rx : Wrong nwid/essid */
+ __u32 code; /* Rx : Unable to code/decode (WEP) */
+ __u32 fragment; /* Rx : Can't perform MAC reassembly */
+ __u32 retries; /* Tx : Max MAC retries num reached */
+ __u32 misc; /* Others cases */
+};
+
+/*
+ * Packet/Time period missed in the wireless adapter due to
+ * "wireless" specific problems...
+ */
+struct iw_missed
+{
+ __u32 beacon; /* Missed beacons/superframe */
+};
+
+/* ------------------------ WIRELESS STATS ------------------------ */
+/*
+ * Wireless statistics (used for /proc/net/wireless)
+ */
+struct iw_statistics
+{
+ __u16 status; /* Status
+ * - device dependent for now */
+
+ struct iw_quality qual; /* Quality of the link
+ * (instant/mean/max) */
+ struct iw_discarded discard; /* Packet discarded counts */
+ struct iw_missed miss; /* Packet missed counts */
+};
+
+/* ------------------------ IOCTL REQUEST ------------------------ */
+/*
+ * The structure to exchange data for ioctl.
+ * This structure is the same as 'struct ifreq', but (re)defined for
+ * convenience...
+ *
+ * Note that it should fit on the same memory footprint !
+ * You should check this when increasing the above structures (16 octets)
+ * 16 octets = 128 bits. Warning, pointers might be 64 bits wide...
+ */
+struct iwreq
+{
+ union
+ {
+ char ifrn_name[IFNAMSIZ]; /* if name, e.g. "eth0" */
+ } ifr_ifrn;
+
+ /* Data part */
+ union
+ {
+ /* Config - generic */
+ char name[IFNAMSIZ];
+ /* Name : used to verify the presence of wireless extensions.
+ * Name of the protocol/provider... */
+
+ struct iw_point essid; /* Extended network name */
+ struct iw_param nwid; /* network id (or domain - the cell) */
+ struct iw_freq freq; /* frequency or channel :
+ * 0-1000 = channel
+ * > 1000 = frequency in Hz */
+
+ struct iw_param sens; /* signal level threshold */
+ struct iw_param bitrate; /* default bit rate */
+ struct iw_param txpower; /* default transmit power */
+ struct iw_param rts; /* RTS threshold threshold */
+ struct iw_param frag; /* Fragmentation threshold */
+ __u32 mode; /* Operation mode */
+ struct iw_param retry; /* Retry limits & lifetime */
+
+ struct iw_point encoding; /* Encoding stuff : tokens */
+ struct iw_param power; /* PM duration/timeout */
+
+ struct sockaddr ap_addr; /* Access point address */
+
+ struct iw_point data; /* Other large parameters */
+ } u;
+};
+
+/* -------------------------- IOCTL DATA -------------------------- */
+/*
+ * For those ioctl which want to exchange mode data that what could
+ * fit in the above structure...
+ */
+
+/*
+ * Range of parameters
+ */
+
+struct iw_range
+{
+ /* Informative stuff (to choose between different interface) */
+ __u32 throughput; /* To give an idea... */
+ /* In theory this value should be the maximum benchmarked
+ * TCP/IP throughput, because with most of these devices the
+ * bit rate is meaningless (overhead an co) to estimate how
+ * fast the connection will go and pick the fastest one.
+ * I suggest people to play with Netperf or any benchmark...
+ */
+
+ /* NWID (or domain id) */
+ __u32 min_nwid; /* Minimal NWID we are able to set */
+ __u32 max_nwid; /* Maximal NWID we are able to set */
+
+ /* Frequency */
+ __u16 num_channels; /* Number of channels [0; num - 1] */
+ __u8 num_frequency; /* Number of entry in the list */
+ struct iw_freq freq[IW_MAX_FREQUENCIES]; /* list */
+ /* Note : this frequency list doesn't need to fit channel numbers */
+
+ /* signal level threshold range */
+ __s32 sensitivity;
+
+ /* Quality of link & SNR stuff */
+ struct iw_quality max_qual; /* Quality of the link */
+
+ /* Rates */
+ __u8 num_bitrates; /* Number of entries in the list */
+ __s32 bitrate[IW_MAX_BITRATES]; /* list, in bps */
+
+ /* RTS threshold */
+ __s32 min_rts; /* Minimal RTS threshold */
+ __s32 max_rts; /* Maximal RTS threshold */
+
+ /* Frag threshold */
+ __s32 min_frag; /* Minimal frag threshold */
+ __s32 max_frag; /* Maximal frag threshold */
+
+ /* Power Management duration & timeout */
+ __s32 min_pmp; /* Minimal PM period */
+ __s32 max_pmp; /* Maximal PM period */
+ __s32 min_pmt; /* Minimal PM timeout */
+ __s32 max_pmt; /* Maximal PM timeout */
+ __u16 pmp_flags; /* How to decode max/min PM period */
+ __u16 pmt_flags; /* How to decode max/min PM timeout */
+ __u16 pm_capa; /* What PM options are supported */
+
+ /* Encoder stuff */
+ __u16 encoding_size[IW_MAX_ENCODING_SIZES]; /* Different token sizes */
+ __u8 num_encoding_sizes; /* Number of entry in the list */
+ __u8 max_encoding_tokens; /* Max number of tokens */
+
+ /* Transmit power */
+ __u16 txpower_capa; /* What options are supported */
+ __u8 num_txpower; /* Number of entries in the list */
+ __s32 txpower[IW_MAX_TXPOWER]; /* list, in bps */
+
+ /* Wireless Extension version info */
+ __u8 we_version_compiled; /* Must be WIRELESS_EXT */
+ __u8 we_version_source; /* Last update of source */
+
+ /* Retry limits and lifetime */
+ __u16 retry_capa; /* What retry options are supported */
+ __u16 retry_flags; /* How to decode max/min retry limit */
+ __u16 r_time_flags; /* How to decode max/min retry life */
+ __s32 min_retry; /* Minimal number of retries */
+ __s32 max_retry; /* Maximal number of retries */
+ __s32 min_r_time; /* Minimal retry lifetime */
+ __s32 max_r_time; /* Maximal retry lifetime */
+
+ /* Average quality of link & SNR */
+ struct iw_quality avg_qual; /* Quality of the link */
+ /* This should contain the average/typical values of the quality
+ * indicator. This should be the threshold between a "good" and
+ * a "bad" link (example : monitor going from green to orange).
+ * Currently, user space apps like quality monitors don't have any
+ * way to calibrate the measurement. With this, they can split
+ * the range between 0 and max_qual in different quality level
+ * (using a geometric subdivision centered on the average).
+ * I expect that people doing the user space apps will feedback
+ * us on which value we need to put in each driver...
+ */
+};
+
+/*
+ * Private ioctl interface information
+ */
+
+struct iw_priv_args
+{
+ __u32 cmd; /* Number of the ioctl to issue */
+ __u16 set_args; /* Type and number of args */
+ __u16 get_args; /* Type and number of args */
+ char name[IFNAMSIZ]; /* Name of the extension */
+};
+
+#endif /* _LINUX_WIRELESS_H */
diff --git a/package/kernel/realtek-wl/src/Users/wireless_tools.25/wireless.13.h b/package/kernel/realtek-wl/src/Users/wireless_tools.25/wireless.13.h
new file mode 100644
index 0000000..fa3c64f
--- /dev/null
+++ b/package/kernel/realtek-wl/src/Users/wireless_tools.25/wireless.13.h
@@ -0,0 +1,599 @@
+/*
+ * This file define a set of standard wireless extensions
+ *
+ * Version : 13 6.12.01
+ *
+ * Authors : Jean Tourrilhes - HPL - <jt@hpl.hp.com>
+ * Copyright (c) 1997-2001 Jean Tourrilhes, All Rights Reserved.
+ */
+
+#ifndef _LINUX_WIRELESS_H
+#define _LINUX_WIRELESS_H
+
+/************************** DOCUMENTATION **************************/
+/*
+ * Initial APIs (1996 -> onward) :
+ * -----------------------------
+ * Basically, the wireless extensions are for now a set of standard ioctl
+ * call + /proc/net/wireless
+ *
+ * The entry /proc/net/wireless give statistics and information on the
+ * driver.
+ * This is better than having each driver having its entry because
+ * its centralised and we may remove the driver module safely.
+ *
+ * Ioctl are used to configure the driver and issue commands. This is
+ * better than command line options of insmod because we may want to
+ * change dynamically (while the driver is running) some parameters.
+ *
+ * The ioctl mechanimsm are copied from standard devices ioctl.
+ * We have the list of command plus a structure descibing the
+ * data exchanged...
+ * Note that to add these ioctl, I was obliged to modify :
+ * # net/core/dev.c (two place + add include)
+ * # net/ipv4/af_inet.c (one place + add include)
+ *
+ * /proc/net/wireless is a copy of /proc/net/dev.
+ * We have a structure for data passed from the driver to /proc/net/wireless
+ * Too add this, I've modified :
+ * # net/core/dev.c (two other places)
+ * # include/linux/netdevice.h (one place)
+ * # include/linux/proc_fs.h (one place)
+ *
+ * New driver API (2001 -> onward) :
+ * -------------------------------
+ * This file is only concerned with the user space API and common definitions.
+ * The new driver API is defined and documented in :
+ * # include/net/iw_handler.h
+ *
+ * Note as well that /proc/net/wireless implementation has now moved in :
+ * # include/linux/wireless.c
+ *
+ * Other comments :
+ * --------------
+ * Do not add here things that are redundant with other mechanisms
+ * (drivers init, ifconfig, /proc/net/dev, ...) and with are not
+ * wireless specific.
+ *
+ * These wireless extensions are not magic : each driver has to provide
+ * support for them...
+ *
+ * IMPORTANT NOTE : As everything in the kernel, this is very much a
+ * work in progress. Contact me if you have ideas of improvements...
+ */
+
+/***************************** INCLUDES *****************************/
+
+#include <linux/types.h> /* for "caddr_t" et al */
+#include <linux/socket.h> /* for "struct sockaddr" et al */
+#include <linux/if.h> /* for IFNAMSIZ and co... */
+
+/***************************** VERSION *****************************/
+/*
+ * This constant is used to know the availability of the wireless
+ * extensions and to know which version of wireless extensions it is
+ * (there is some stuff that will be added in the future...)
+ * I just plan to increment with each new version.
+ */
+#define WIRELESS_EXT 13
+
+/*
+ * Changes :
+ *
+ * V2 to V3
+ * --------
+ * Alan Cox start some incompatibles changes. I've integrated a bit more.
+ * - Encryption renamed to Encode to avoid US regulation problems
+ * - Frequency changed from float to struct to avoid problems on old 386
+ *
+ * V3 to V4
+ * --------
+ * - Add sensitivity
+ *
+ * V4 to V5
+ * --------
+ * - Missing encoding definitions in range
+ * - Access points stuff
+ *
+ * V5 to V6
+ * --------
+ * - 802.11 support (ESSID ioctls)
+ *
+ * V6 to V7
+ * --------
+ * - define IW_ESSID_MAX_SIZE and IW_MAX_AP
+ *
+ * V7 to V8
+ * --------
+ * - Changed my e-mail address
+ * - More 802.11 support (nickname, rate, rts, frag)
+ * - List index in frequencies
+ *
+ * V8 to V9
+ * --------
+ * - Support for 'mode of operation' (ad-hoc, managed...)
+ * - Support for unicast and multicast power saving
+ * - Change encoding to support larger tokens (>64 bits)
+ * - Updated iw_params (disable, flags) and use it for NWID
+ * - Extracted iw_point from iwreq for clarity
+ *
+ * V9 to V10
+ * ---------
+ * - Add PM capability to range structure
+ * - Add PM modifier : MAX/MIN/RELATIVE
+ * - Add encoding option : IW_ENCODE_NOKEY
+ * - Add TxPower ioctls (work like TxRate)
+ *
+ * V10 to V11
+ * ----------
+ * - Add WE version in range (help backward/forward compatibility)
+ * - Add retry ioctls (work like PM)
+ *
+ * V11 to V12
+ * ----------
+ * - Add SIOCSIWSTATS to get /proc/net/wireless programatically
+ * - Add DEV PRIVATE IOCTL to avoid collisions in SIOCDEVPRIVATE space
+ * - Add new statistics (frag, retry, beacon)
+ * - Add average quality (for user space calibration)
+ *
+ * V12 to V13
+ * ----------
+ * - Document creation of new driver API.
+ * - Extract union iwreq_data from struct iwreq (for new driver API).
+ * - Rename SIOCSIWNAME as SIOCSIWCOMMIT
+ */
+
+/**************************** CONSTANTS ****************************/
+
+/* -------------------------- IOCTL LIST -------------------------- */
+
+/* Basic operations */
+#define SIOCSIWCOMMIT 0x8B00 /* Commit pending changes to driver */
+#define SIOCGIWNAME 0x8B01 /* get name == wireless protocol */
+#define SIOCSIWNWID 0x8B02 /* set network id (the cell) */
+#define SIOCGIWNWID 0x8B03 /* get network id */
+#define SIOCSIWFREQ 0x8B04 /* set channel/frequency (Hz) */
+#define SIOCGIWFREQ 0x8B05 /* get channel/frequency (Hz) */
+#define SIOCSIWMODE 0x8B06 /* set operation mode */
+#define SIOCGIWMODE 0x8B07 /* get operation mode */
+#define SIOCSIWSENS 0x8B08 /* set sensitivity (dBm) */
+#define SIOCGIWSENS 0x8B09 /* get sensitivity (dBm) */
+
+/* Informative stuff */
+#define SIOCSIWRANGE 0x8B0A /* Unused */
+#define SIOCGIWRANGE 0x8B0B /* Get range of parameters */
+#define SIOCSIWPRIV 0x8B0C /* Unused */
+#define SIOCGIWPRIV 0x8B0D /* get private ioctl interface info */
+#define SIOCSIWSTATS 0x8B0E /* Unused */
+#define SIOCGIWSTATS 0x8B0F /* Get /proc/net/wireless stats */
+
+/* Mobile IP support */
+#define SIOCSIWSPY 0x8B10 /* set spy addresses */
+#define SIOCGIWSPY 0x8B11 /* get spy info (quality of link) */
+
+/* Access Point manipulation */
+#define SIOCSIWAP 0x8B14 /* set access point MAC addresses */
+#define SIOCGIWAP 0x8B15 /* get access point MAC addresses */
+#define SIOCGIWAPLIST 0x8B17 /* get list of access point in range */
+
+/* 802.11 specific support */
+#define SIOCSIWESSID 0x8B1A /* set ESSID (network name) */
+#define SIOCGIWESSID 0x8B1B /* get ESSID */
+#define SIOCSIWNICKN 0x8B1C /* set node name/nickname */
+#define SIOCGIWNICKN 0x8B1D /* get node name/nickname */
+/* As the ESSID and NICKN are strings up to 32 bytes long, it doesn't fit
+ * within the 'iwreq' structure, so we need to use the 'data' member to
+ * point to a string in user space, like it is done for RANGE...
+ * The "flags" member indicate if the ESSID is active or not (promiscuous).
+ */
+
+/* Other parameters useful in 802.11 and some other devices */
+#define SIOCSIWRATE 0x8B20 /* set default bit rate (bps) */
+#define SIOCGIWRATE 0x8B21 /* get default bit rate (bps) */
+#define SIOCSIWRTS 0x8B22 /* set RTS/CTS threshold (bytes) */
+#define SIOCGIWRTS 0x8B23 /* get RTS/CTS threshold (bytes) */
+#define SIOCSIWFRAG 0x8B24 /* set fragmentation thr (bytes) */
+#define SIOCGIWFRAG 0x8B25 /* get fragmentation thr (bytes) */
+#define SIOCSIWTXPOW 0x8B26 /* set transmit power (dBm) */
+#define SIOCGIWTXPOW 0x8B27 /* get transmit power (dBm) */
+#define SIOCSIWRETRY 0x8B28 /* set retry limits and lifetime */
+#define SIOCGIWRETRY 0x8B29 /* get retry limits and lifetime */
+
+/* Encoding stuff (scrambling, hardware security, WEP...) */
+#define SIOCSIWENCODE 0x8B2A /* set encoding token & mode */
+#define SIOCGIWENCODE 0x8B2B /* get encoding token & mode */
+/* Power saving stuff (power management, unicast and multicast) */
+#define SIOCSIWPOWER 0x8B2C /* set Power Management settings */
+#define SIOCGIWPOWER 0x8B2D /* get Power Management settings */
+
+/* -------------------- DEV PRIVATE IOCTL LIST -------------------- */
+
+/* These 16 ioctl are wireless device private.
+ * Each driver is free to use them for whatever purpose it chooses,
+ * however the driver *must* export the description of those ioctls
+ * with SIOCGIWPRIV and *must* use arguments as defined below.
+ * If you don't follow those rules, DaveM is going to hate you (reason :
+ * it make mixed 32/64bit operation impossible).
+ */
+#define SIOCIWFIRSTPRIV 0x8BE0
+#define SIOCIWLASTPRIV 0x8BFF
+/* Previously, we were using SIOCDEVPRIVATE, but we now have our
+ * separate range because of collisions with other tools such as
+ * 'mii-tool'.
+ * We now have 32 commands, so a bit more space ;-).
+ * Also, all 'odd' commands are only usable by root and don't return the
+ * content of ifr/iwr to user (but you are not obliged to use the set/get
+ * convention, just use every other two command).
+ * And I repeat : you are not obliged to use them with iwspy, but you
+ * must be compliant with it.
+ */
+
+/* ------------------------- IOCTL STUFF ------------------------- */
+
+/* The first and the last (range) */
+#define SIOCIWFIRST 0x8B00
+#define SIOCIWLAST SIOCIWLASTPRIV /* 0x8BFF */
+
+/* Even : get (world access), odd : set (root access) */
+#define IW_IS_SET(cmd) (!((cmd) & 0x1))
+#define IW_IS_GET(cmd) ((cmd) & 0x1)
+
+/* ------------------------- PRIVATE INFO ------------------------- */
+/*
+ * The following is used with SIOCGIWPRIV. It allow a driver to define
+ * the interface (name, type of data) for its private ioctl.
+ * Privates ioctl are SIOCIWFIRSTPRIV -> SIOCIWLASTPRIV
+ */
+
+#define IW_PRIV_TYPE_MASK 0x7000 /* Type of arguments */
+#define IW_PRIV_TYPE_NONE 0x0000
+#define IW_PRIV_TYPE_BYTE 0x1000 /* Char as number */
+#define IW_PRIV_TYPE_CHAR 0x2000 /* Char as character */
+#define IW_PRIV_TYPE_INT 0x4000 /* 32 bits int */
+#define IW_PRIV_TYPE_FLOAT 0x5000
+
+#define IW_PRIV_SIZE_FIXED 0x0800 /* Variable or fixed nuber of args */
+
+#define IW_PRIV_SIZE_MASK 0x07FF /* Max number of those args */
+
+/*
+ * Note : if the number of args is fixed and the size < 16 octets,
+ * instead of passing a pointer we will put args in the iwreq struct...
+ */
+
+/* ----------------------- OTHER CONSTANTS ----------------------- */
+
+/* Maximum frequencies in the range struct */
+#define IW_MAX_FREQUENCIES 16
+/* Note : if you have something like 80 frequencies,
+ * don't increase this constant and don't fill the frequency list.
+ * The user will be able to set by channel anyway... */
+
+/* Maximum bit rates in the range struct */
+#define IW_MAX_BITRATES 8
+
+/* Maximum tx powers in the range struct */
+#define IW_MAX_TXPOWER 8
+
+/* Maximum of address that you may set with SPY */
+#define IW_MAX_SPY 8
+
+/* Maximum of address that you may get in the
+ list of access points in range */
+#define IW_MAX_AP 8
+
+/* Maximum size of the ESSID and NICKN strings */
+#define IW_ESSID_MAX_SIZE 32
+
+/* Modes of operation */
+#define IW_MODE_AUTO 0 /* Let the driver decides */
+#define IW_MODE_ADHOC 1 /* Single cell network */
+#define IW_MODE_INFRA 2 /* Multi cell network, roaming, ... */
+#define IW_MODE_MASTER 3 /* Synchronisation master or Access Point */
+#define IW_MODE_REPEAT 4 /* Wireless Repeater (forwarder) */
+#define IW_MODE_SECOND 5 /* Secondary master/repeater (backup) */
+
+/* Maximum number of size of encoding token available
+ * they are listed in the range structure */
+#define IW_MAX_ENCODING_SIZES 8
+
+/* Maximum size of the encoding token in bytes */
+#define IW_ENCODING_TOKEN_MAX 32 /* 256 bits (for now) */
+
+/* Flags for encoding (along with the token) */
+#define IW_ENCODE_INDEX 0x00FF /* Token index (if needed) */
+#define IW_ENCODE_FLAGS 0xFF00 /* Flags defined below */
+#define IW_ENCODE_MODE 0xF000 /* Modes defined below */
+#define IW_ENCODE_DISABLED 0x8000 /* Encoding disabled */
+#define IW_ENCODE_ENABLED 0x0000 /* Encoding enabled */
+#define IW_ENCODE_RESTRICTED 0x4000 /* Refuse non-encoded packets */
+#define IW_ENCODE_OPEN 0x2000 /* Accept non-encoded packets */
+#define IW_ENCODE_NOKEY 0x0800 /* Key is write only, so not present */
+
+/* Power management flags available (along with the value, if any) */
+#define IW_POWER_ON 0x0000 /* No details... */
+#define IW_POWER_TYPE 0xF000 /* Type of parameter */
+#define IW_POWER_PERIOD 0x1000 /* Value is a period/duration of */
+#define IW_POWER_TIMEOUT 0x2000 /* Value is a timeout (to go asleep) */
+#define IW_POWER_MODE 0x0F00 /* Power Management mode */
+#define IW_POWER_UNICAST_R 0x0100 /* Receive only unicast messages */
+#define IW_POWER_MULTICAST_R 0x0200 /* Receive only multicast messages */
+#define IW_POWER_ALL_R 0x0300 /* Receive all messages though PM */
+#define IW_POWER_FORCE_S 0x0400 /* Force PM procedure for sending unicast */
+#define IW_POWER_REPEATER 0x0800 /* Repeat broadcast messages in PM period */
+#define IW_POWER_MODIFIER 0x000F /* Modify a parameter */
+#define IW_POWER_MIN 0x0001 /* Value is a minimum */
+#define IW_POWER_MAX 0x0002 /* Value is a maximum */
+#define IW_POWER_RELATIVE 0x0004 /* Value is not in seconds/ms/us */
+
+/* Transmit Power flags available */
+#define IW_TXPOW_DBM 0x0000 /* Value is in dBm */
+#define IW_TXPOW_MWATT 0x0001 /* Value is in mW */
+
+/* Retry limits and lifetime flags available */
+#define IW_RETRY_ON 0x0000 /* No details... */
+#define IW_RETRY_TYPE 0xF000 /* Type of parameter */
+#define IW_RETRY_LIMIT 0x1000 /* Maximum number of retries*/
+#define IW_RETRY_LIFETIME 0x2000 /* Maximum duration of retries in us */
+#define IW_RETRY_MODIFIER 0x000F /* Modify a parameter */
+#define IW_RETRY_MIN 0x0001 /* Value is a minimum */
+#define IW_RETRY_MAX 0x0002 /* Value is a maximum */
+#define IW_RETRY_RELATIVE 0x0004 /* Value is not in seconds/ms/us */
+
+/****************************** TYPES ******************************/
+
+/* --------------------------- SUBTYPES --------------------------- */
+/*
+ * Generic format for most parameters that fit in an int
+ */
+struct iw_param
+{
+ __s32 value; /* The value of the parameter itself */
+ __u8 fixed; /* Hardware should not use auto select */
+ __u8 disabled; /* Disable the feature */
+ __u16 flags; /* Various specifc flags (if any) */
+};
+
+/*
+ * For all data larger than 16 octets, we need to use a
+ * pointer to memory allocated in user space.
+ */
+struct iw_point
+{
+ caddr_t pointer; /* Pointer to the data (in user space) */
+ __u16 length; /* number of fields or size in bytes */
+ __u16 flags; /* Optional params */
+};
+
+/*
+ * A frequency
+ * For numbers lower than 10^9, we encode the number in 'm' and
+ * set 'e' to 0
+ * For number greater than 10^9, we divide it by the lowest power
+ * of 10 to get 'm' lower than 10^9, with 'm'= f / (10^'e')...
+ * The power of 10 is in 'e', the result of the division is in 'm'.
+ */
+struct iw_freq
+{
+ __u32 m; /* Mantissa */
+ __u16 e; /* Exponent */
+ __u8 i; /* List index (when in range struct) */
+};
+
+/*
+ * Quality of the link
+ */
+struct iw_quality
+{
+ __u8 qual; /* link quality (%retries, SNR,
+ %missed beacons or better...) */
+ __u8 level; /* signal level (dBm) */
+ __u8 noise; /* noise level (dBm) */
+ __u8 updated; /* Flags to know if updated */
+};
+
+/*
+ * Packet discarded in the wireless adapter due to
+ * "wireless" specific problems...
+ * Note : the list of counter and statistics in net_device_stats
+ * is already pretty exhaustive, and you should use that first.
+ * This is only additional stats...
+ */
+struct iw_discarded
+{
+ __u32 nwid; /* Rx : Wrong nwid/essid */
+ __u32 code; /* Rx : Unable to code/decode (WEP) */
+ __u32 fragment; /* Rx : Can't perform MAC reassembly */
+ __u32 retries; /* Tx : Max MAC retries num reached */
+ __u32 misc; /* Others cases */
+};
+
+/*
+ * Packet/Time period missed in the wireless adapter due to
+ * "wireless" specific problems...
+ */
+struct iw_missed
+{
+ __u32 beacon; /* Missed beacons/superframe */
+};
+
+/* ------------------------ WIRELESS STATS ------------------------ */
+/*
+ * Wireless statistics (used for /proc/net/wireless)
+ */
+struct iw_statistics
+{
+ __u16 status; /* Status
+ * - device dependent for now */
+
+ struct iw_quality qual; /* Quality of the link
+ * (instant/mean/max) */
+ struct iw_discarded discard; /* Packet discarded counts */
+ struct iw_missed miss; /* Packet missed counts */
+};
+
+/* ------------------------ IOCTL REQUEST ------------------------ */
+/*
+ * This structure defines the payload of an ioctl, and is used
+ * below.
+ *
+ * Note that this structure should fit on the memory footprint
+ * of iwreq (which is the same as ifreq), which mean a max size of
+ * 16 octets = 128 bits. Warning, pointers might be 64 bits wide...
+ * You should check this when increasing the structures defined
+ * above in this file...
+ */
+union iwreq_data
+{
+ /* Config - generic */
+ char name[IFNAMSIZ];
+ /* Name : used to verify the presence of wireless extensions.
+ * Name of the protocol/provider... */
+
+ struct iw_point essid; /* Extended network name */
+ struct iw_param nwid; /* network id (or domain - the cell) */
+ struct iw_freq freq; /* frequency or channel :
+ * 0-1000 = channel
+ * > 1000 = frequency in Hz */
+
+ struct iw_param sens; /* signal level threshold */
+ struct iw_param bitrate; /* default bit rate */
+ struct iw_param txpower; /* default transmit power */
+ struct iw_param rts; /* RTS threshold threshold */
+ struct iw_param frag; /* Fragmentation threshold */
+ __u32 mode; /* Operation mode */
+ struct iw_param retry; /* Retry limits & lifetime */
+
+ struct iw_point encoding; /* Encoding stuff : tokens */
+ struct iw_param power; /* PM duration/timeout */
+
+ struct sockaddr ap_addr; /* Access point address */
+
+ struct iw_point data; /* Other large parameters */
+};
+
+/*
+ * The structure to exchange data for ioctl.
+ * This structure is the same as 'struct ifreq', but (re)defined for
+ * convenience...
+ * Do I need to remind you about structure size (32 octets) ?
+ */
+struct iwreq
+{
+ union
+ {
+ char ifrn_name[IFNAMSIZ]; /* if name, e.g. "eth0" */
+ } ifr_ifrn;
+
+ /* Data part (defined just above) */
+ union iwreq_data u;
+};
+
+/* -------------------------- IOCTL DATA -------------------------- */
+/*
+ * For those ioctl which want to exchange mode data that what could
+ * fit in the above structure...
+ */
+
+/*
+ * Range of parameters
+ */
+
+struct iw_range
+{
+ /* Informative stuff (to choose between different interface) */
+ __u32 throughput; /* To give an idea... */
+ /* In theory this value should be the maximum benchmarked
+ * TCP/IP throughput, because with most of these devices the
+ * bit rate is meaningless (overhead an co) to estimate how
+ * fast the connection will go and pick the fastest one.
+ * I suggest people to play with Netperf or any benchmark...
+ */
+
+ /* NWID (or domain id) */
+ __u32 min_nwid; /* Minimal NWID we are able to set */
+ __u32 max_nwid; /* Maximal NWID we are able to set */
+
+ /* Frequency */
+ __u16 num_channels; /* Number of channels [0; num - 1] */
+ __u8 num_frequency; /* Number of entry in the list */
+ struct iw_freq freq[IW_MAX_FREQUENCIES]; /* list */
+ /* Note : this frequency list doesn't need to fit channel numbers */
+
+ /* signal level threshold range */
+ __s32 sensitivity;
+
+ /* Quality of link & SNR stuff */
+ struct iw_quality max_qual; /* Quality of the link */
+
+ /* Rates */
+ __u8 num_bitrates; /* Number of entries in the list */
+ __s32 bitrate[IW_MAX_BITRATES]; /* list, in bps */
+
+ /* RTS threshold */
+ __s32 min_rts; /* Minimal RTS threshold */
+ __s32 max_rts; /* Maximal RTS threshold */
+
+ /* Frag threshold */
+ __s32 min_frag; /* Minimal frag threshold */
+ __s32 max_frag; /* Maximal frag threshold */
+
+ /* Power Management duration & timeout */
+ __s32 min_pmp; /* Minimal PM period */
+ __s32 max_pmp; /* Maximal PM period */
+ __s32 min_pmt; /* Minimal PM timeout */
+ __s32 max_pmt; /* Maximal PM timeout */
+ __u16 pmp_flags; /* How to decode max/min PM period */
+ __u16 pmt_flags; /* How to decode max/min PM timeout */
+ __u16 pm_capa; /* What PM options are supported */
+
+ /* Encoder stuff */
+ __u16 encoding_size[IW_MAX_ENCODING_SIZES]; /* Different token sizes */
+ __u8 num_encoding_sizes; /* Number of entry in the list */
+ __u8 max_encoding_tokens; /* Max number of tokens */
+
+ /* Transmit power */
+ __u16 txpower_capa; /* What options are supported */
+ __u8 num_txpower; /* Number of entries in the list */
+ __s32 txpower[IW_MAX_TXPOWER]; /* list, in bps */
+
+ /* Wireless Extension version info */
+ __u8 we_version_compiled; /* Must be WIRELESS_EXT */
+ __u8 we_version_source; /* Last update of source */
+
+ /* Retry limits and lifetime */
+ __u16 retry_capa; /* What retry options are supported */
+ __u16 retry_flags; /* How to decode max/min retry limit */
+ __u16 r_time_flags; /* How to decode max/min retry life */
+ __s32 min_retry; /* Minimal number of retries */
+ __s32 max_retry; /* Maximal number of retries */
+ __s32 min_r_time; /* Minimal retry lifetime */
+ __s32 max_r_time; /* Maximal retry lifetime */
+
+ /* Average quality of link & SNR */
+ struct iw_quality avg_qual; /* Quality of the link */
+ /* This should contain the average/typical values of the quality
+ * indicator. This should be the threshold between a "good" and
+ * a "bad" link (example : monitor going from green to orange).
+ * Currently, user space apps like quality monitors don't have any
+ * way to calibrate the measurement. With this, they can split
+ * the range between 0 and max_qual in different quality level
+ * (using a geometric subdivision centered on the average).
+ * I expect that people doing the user space apps will feedback
+ * us on which value we need to put in each driver...
+ */
+};
+
+/*
+ * Private ioctl interface information
+ */
+
+struct iw_priv_args
+{
+ __u32 cmd; /* Number of the ioctl to issue */
+ __u16 set_args; /* Type and number of args */
+ __u16 get_args; /* Type and number of args */
+ char name[IFNAMSIZ]; /* Name of the extension */
+};
+
+#endif /* _LINUX_WIRELESS_H */
diff --git a/package/kernel/realtek-wl/src/Users/wireless_tools.25/wireless.14.h b/package/kernel/realtek-wl/src/Users/wireless_tools.25/wireless.14.h
new file mode 100644
index 0000000..226f540
--- /dev/null
+++ b/package/kernel/realtek-wl/src/Users/wireless_tools.25/wireless.14.h
@@ -0,0 +1,669 @@
+/*
+ * This file define a set of standard wireless extensions
+ *
+ * Version : 14 25.1.02
+ *
+ * Authors : Jean Tourrilhes - HPL - <jt@hpl.hp.com>
+ * Copyright (c) 1997-2002 Jean Tourrilhes, All Rights Reserved.
+ */
+
+#ifndef _LINUX_WIRELESS_H
+#define _LINUX_WIRELESS_H
+
+/************************** DOCUMENTATION **************************/
+/*
+ * Initial APIs (1996 -> onward) :
+ * -----------------------------
+ * Basically, the wireless extensions are for now a set of standard ioctl
+ * call + /proc/net/wireless
+ *
+ * The entry /proc/net/wireless give statistics and information on the
+ * driver.
+ * This is better than having each driver having its entry because
+ * its centralised and we may remove the driver module safely.
+ *
+ * Ioctl are used to configure the driver and issue commands. This is
+ * better than command line options of insmod because we may want to
+ * change dynamically (while the driver is running) some parameters.
+ *
+ * The ioctl mechanimsm are copied from standard devices ioctl.
+ * We have the list of command plus a structure descibing the
+ * data exchanged...
+ * Note that to add these ioctl, I was obliged to modify :
+ * # net/core/dev.c (two place + add include)
+ * # net/ipv4/af_inet.c (one place + add include)
+ *
+ * /proc/net/wireless is a copy of /proc/net/dev.
+ * We have a structure for data passed from the driver to /proc/net/wireless
+ * Too add this, I've modified :
+ * # net/core/dev.c (two other places)
+ * # include/linux/netdevice.h (one place)
+ * # include/linux/proc_fs.h (one place)
+ *
+ * New driver API (2002 -> onward) :
+ * -------------------------------
+ * This file is only concerned with the user space API and common definitions.
+ * The new driver API is defined and documented in :
+ * # include/net/iw_handler.h
+ *
+ * Note as well that /proc/net/wireless implementation has now moved in :
+ * # include/linux/wireless.c
+ *
+ * Wireless Events (2002 -> onward) :
+ * --------------------------------
+ * Events are defined at the end of this file, and implemented in :
+ * # include/linux/wireless.c
+ *
+ * Other comments :
+ * --------------
+ * Do not add here things that are redundant with other mechanisms
+ * (drivers init, ifconfig, /proc/net/dev, ...) and with are not
+ * wireless specific.
+ *
+ * These wireless extensions are not magic : each driver has to provide
+ * support for them...
+ *
+ * IMPORTANT NOTE : As everything in the kernel, this is very much a
+ * work in progress. Contact me if you have ideas of improvements...
+ */
+
+/***************************** INCLUDES *****************************/
+
+#include <linux/types.h> /* for "caddr_t" et al */
+#include <linux/socket.h> /* for "struct sockaddr" et al */
+#include <linux/if.h> /* for IFNAMSIZ and co... */
+
+/***************************** VERSION *****************************/
+/*
+ * This constant is used to know the availability of the wireless
+ * extensions and to know which version of wireless extensions it is
+ * (there is some stuff that will be added in the future...)
+ * I just plan to increment with each new version.
+ */
+#define WIRELESS_EXT 14
+
+/*
+ * Changes :
+ *
+ * V2 to V3
+ * --------
+ * Alan Cox start some incompatibles changes. I've integrated a bit more.
+ * - Encryption renamed to Encode to avoid US regulation problems
+ * - Frequency changed from float to struct to avoid problems on old 386
+ *
+ * V3 to V4
+ * --------
+ * - Add sensitivity
+ *
+ * V4 to V5
+ * --------
+ * - Missing encoding definitions in range
+ * - Access points stuff
+ *
+ * V5 to V6
+ * --------
+ * - 802.11 support (ESSID ioctls)
+ *
+ * V6 to V7
+ * --------
+ * - define IW_ESSID_MAX_SIZE and IW_MAX_AP
+ *
+ * V7 to V8
+ * --------
+ * - Changed my e-mail address
+ * - More 802.11 support (nickname, rate, rts, frag)
+ * - List index in frequencies
+ *
+ * V8 to V9
+ * --------
+ * - Support for 'mode of operation' (ad-hoc, managed...)
+ * - Support for unicast and multicast power saving
+ * - Change encoding to support larger tokens (>64 bits)
+ * - Updated iw_params (disable, flags) and use it for NWID
+ * - Extracted iw_point from iwreq for clarity
+ *
+ * V9 to V10
+ * ---------
+ * - Add PM capability to range structure
+ * - Add PM modifier : MAX/MIN/RELATIVE
+ * - Add encoding option : IW_ENCODE_NOKEY
+ * - Add TxPower ioctls (work like TxRate)
+ *
+ * V10 to V11
+ * ----------
+ * - Add WE version in range (help backward/forward compatibility)
+ * - Add retry ioctls (work like PM)
+ *
+ * V11 to V12
+ * ----------
+ * - Add SIOCSIWSTATS to get /proc/net/wireless programatically
+ * - Add DEV PRIVATE IOCTL to avoid collisions in SIOCDEVPRIVATE space
+ * - Add new statistics (frag, retry, beacon)
+ * - Add average quality (for user space calibration)
+ *
+ * V12 to V13
+ * ----------
+ * - Document creation of new driver API.
+ * - Extract union iwreq_data from struct iwreq (for new driver API).
+ * - Rename SIOCSIWNAME as SIOCSIWCOMMIT
+ *
+ * V13 to V14
+ * ----------
+ * - Wireless Events support : define struct iw_event
+ * - Define additional specific event numbers
+ * - Add "addr" and "param" fields in union iwreq_data
+ * - AP scanning stuff (SIOCSIWSCAN and friends)
+ */
+
+/**************************** CONSTANTS ****************************/
+
+/* -------------------------- IOCTL LIST -------------------------- */
+
+/* Basic operations */
+#define SIOCSIWCOMMIT 0x8B00 /* Commit pending changes to driver */
+#define SIOCGIWNAME 0x8B01 /* get name == wireless protocol */
+#define SIOCSIWNWID 0x8B02 /* set network id (the cell) */
+#define SIOCGIWNWID 0x8B03 /* get network id */
+#define SIOCSIWFREQ 0x8B04 /* set channel/frequency (Hz) */
+#define SIOCGIWFREQ 0x8B05 /* get channel/frequency (Hz) */
+#define SIOCSIWMODE 0x8B06 /* set operation mode */
+#define SIOCGIWMODE 0x8B07 /* get operation mode */
+#define SIOCSIWSENS 0x8B08 /* set sensitivity (dBm) */
+#define SIOCGIWSENS 0x8B09 /* get sensitivity (dBm) */
+
+/* Informative stuff */
+#define SIOCSIWRANGE 0x8B0A /* Unused */
+#define SIOCGIWRANGE 0x8B0B /* Get range of parameters */
+#define SIOCSIWPRIV 0x8B0C /* Unused */
+#define SIOCGIWPRIV 0x8B0D /* get private ioctl interface info */
+#define SIOCSIWSTATS 0x8B0E /* Unused */
+#define SIOCGIWSTATS 0x8B0F /* Get /proc/net/wireless stats */
+
+/* Mobile IP support */
+#define SIOCSIWSPY 0x8B10 /* set spy addresses */
+#define SIOCGIWSPY 0x8B11 /* get spy info (quality of link) */
+
+/* Access Point manipulation */
+#define SIOCSIWAP 0x8B14 /* set access point MAC addresses */
+#define SIOCGIWAP 0x8B15 /* get access point MAC addresses */
+#define SIOCGIWAPLIST 0x8B17 /* get list of access point in range */
+#define SIOCSIWSCAN 0x8B18 /* trigger scanning */
+#define SIOCGIWSCAN 0x8B19 /* get scanning results */
+
+/* 802.11 specific support */
+#define SIOCSIWESSID 0x8B1A /* set ESSID (network name) */
+#define SIOCGIWESSID 0x8B1B /* get ESSID */
+#define SIOCSIWNICKN 0x8B1C /* set node name/nickname */
+#define SIOCGIWNICKN 0x8B1D /* get node name/nickname */
+/* As the ESSID and NICKN are strings up to 32 bytes long, it doesn't fit
+ * within the 'iwreq' structure, so we need to use the 'data' member to
+ * point to a string in user space, like it is done for RANGE...
+ * The "flags" member indicate if the ESSID is active or not (promiscuous).
+ */
+
+/* Other parameters useful in 802.11 and some other devices */
+#define SIOCSIWRATE 0x8B20 /* set default bit rate (bps) */
+#define SIOCGIWRATE 0x8B21 /* get default bit rate (bps) */
+#define SIOCSIWRTS 0x8B22 /* set RTS/CTS threshold (bytes) */
+#define SIOCGIWRTS 0x8B23 /* get RTS/CTS threshold (bytes) */
+#define SIOCSIWFRAG 0x8B24 /* set fragmentation thr (bytes) */
+#define SIOCGIWFRAG 0x8B25 /* get fragmentation thr (bytes) */
+#define SIOCSIWTXPOW 0x8B26 /* set transmit power (dBm) */
+#define SIOCGIWTXPOW 0x8B27 /* get transmit power (dBm) */
+#define SIOCSIWRETRY 0x8B28 /* set retry limits and lifetime */
+#define SIOCGIWRETRY 0x8B29 /* get retry limits and lifetime */
+
+/* Encoding stuff (scrambling, hardware security, WEP...) */
+#define SIOCSIWENCODE 0x8B2A /* set encoding token & mode */
+#define SIOCGIWENCODE 0x8B2B /* get encoding token & mode */
+/* Power saving stuff (power management, unicast and multicast) */
+#define SIOCSIWPOWER 0x8B2C /* set Power Management settings */
+#define SIOCGIWPOWER 0x8B2D /* get Power Management settings */
+
+/* -------------------- DEV PRIVATE IOCTL LIST -------------------- */
+
+/* These 16 ioctl are wireless device private.
+ * Each driver is free to use them for whatever purpose it chooses,
+ * however the driver *must* export the description of those ioctls
+ * with SIOCGIWPRIV and *must* use arguments as defined below.
+ * If you don't follow those rules, DaveM is going to hate you (reason :
+ * it make mixed 32/64bit operation impossible).
+ */
+#define SIOCIWFIRSTPRIV 0x8BE0
+#define SIOCIWLASTPRIV 0x8BFF
+/* Previously, we were using SIOCDEVPRIVATE, but we now have our
+ * separate range because of collisions with other tools such as
+ * 'mii-tool'.
+ * We now have 32 commands, so a bit more space ;-).
+ * Also, all 'odd' commands are only usable by root and don't return the
+ * content of ifr/iwr to user (but you are not obliged to use the set/get
+ * convention, just use every other two command).
+ * And I repeat : you are not obliged to use them with iwspy, but you
+ * must be compliant with it.
+ */
+
+/* ------------------------- IOCTL STUFF ------------------------- */
+
+/* The first and the last (range) */
+#define SIOCIWFIRST 0x8B00
+#define SIOCIWLAST SIOCIWLASTPRIV /* 0x8BFF */
+
+/* Even : get (world access), odd : set (root access) */
+#define IW_IS_SET(cmd) (!((cmd) & 0x1))
+#define IW_IS_GET(cmd) ((cmd) & 0x1)
+
+/* ----------------------- WIRELESS EVENTS ----------------------- */
+/* Those are *NOT* ioctls, do not issue request on them !!! */
+/* Most events use the same identifier as ioctl requests */
+
+#define IWEVTXDROP 0x8C00 /* Packet dropped to excessive retry */
+#define IWEVQUAL 0x8C01 /* Quality part of statistics */
+
+#define IWEVFIRST 0x8C00
+
+/* ------------------------- PRIVATE INFO ------------------------- */
+/*
+ * The following is used with SIOCGIWPRIV. It allow a driver to define
+ * the interface (name, type of data) for its private ioctl.
+ * Privates ioctl are SIOCIWFIRSTPRIV -> SIOCIWLASTPRIV
+ */
+
+#define IW_PRIV_TYPE_MASK 0x7000 /* Type of arguments */
+#define IW_PRIV_TYPE_NONE 0x0000
+#define IW_PRIV_TYPE_BYTE 0x1000 /* Char as number */
+#define IW_PRIV_TYPE_CHAR 0x2000 /* Char as character */
+#define IW_PRIV_TYPE_INT 0x4000 /* 32 bits int */
+#define IW_PRIV_TYPE_FLOAT 0x5000
+
+#define IW_PRIV_SIZE_FIXED 0x0800 /* Variable or fixed nuber of args */
+
+#define IW_PRIV_SIZE_MASK 0x07FF /* Max number of those args */
+
+/*
+ * Note : if the number of args is fixed and the size < 16 octets,
+ * instead of passing a pointer we will put args in the iwreq struct...
+ */
+
+/* ----------------------- OTHER CONSTANTS ----------------------- */
+
+/* Maximum frequencies in the range struct */
+#define IW_MAX_FREQUENCIES 16
+/* Note : if you have something like 80 frequencies,
+ * don't increase this constant and don't fill the frequency list.
+ * The user will be able to set by channel anyway... */
+
+/* Maximum bit rates in the range struct */
+#define IW_MAX_BITRATES 8
+
+/* Maximum tx powers in the range struct */
+#define IW_MAX_TXPOWER 8
+
+/* Maximum of address that you may set with SPY */
+#define IW_MAX_SPY 8
+
+/* Maximum of address that you may get in the
+ list of access points in range */
+#define IW_MAX_AP 8
+
+/* Maximum size of the ESSID and NICKN strings */
+#define IW_ESSID_MAX_SIZE 32
+
+/* Modes of operation */
+#define IW_MODE_AUTO 0 /* Let the driver decides */
+#define IW_MODE_ADHOC 1 /* Single cell network */
+#define IW_MODE_INFRA 2 /* Multi cell network, roaming, ... */
+#define IW_MODE_MASTER 3 /* Synchronisation master or Access Point */
+#define IW_MODE_REPEAT 4 /* Wireless Repeater (forwarder) */
+#define IW_MODE_SECOND 5 /* Secondary master/repeater (backup) */
+
+/* Maximum number of size of encoding token available
+ * they are listed in the range structure */
+#define IW_MAX_ENCODING_SIZES 8
+
+/* Maximum size of the encoding token in bytes */
+#define IW_ENCODING_TOKEN_MAX 32 /* 256 bits (for now) */
+
+/* Flags for encoding (along with the token) */
+#define IW_ENCODE_INDEX 0x00FF /* Token index (if needed) */
+#define IW_ENCODE_FLAGS 0xFF00 /* Flags defined below */
+#define IW_ENCODE_MODE 0xF000 /* Modes defined below */
+#define IW_ENCODE_DISABLED 0x8000 /* Encoding disabled */
+#define IW_ENCODE_ENABLED 0x0000 /* Encoding enabled */
+#define IW_ENCODE_RESTRICTED 0x4000 /* Refuse non-encoded packets */
+#define IW_ENCODE_OPEN 0x2000 /* Accept non-encoded packets */
+#define IW_ENCODE_NOKEY 0x0800 /* Key is write only, so not present */
+
+/* Power management flags available (along with the value, if any) */
+#define IW_POWER_ON 0x0000 /* No details... */
+#define IW_POWER_TYPE 0xF000 /* Type of parameter */
+#define IW_POWER_PERIOD 0x1000 /* Value is a period/duration of */
+#define IW_POWER_TIMEOUT 0x2000 /* Value is a timeout (to go asleep) */
+#define IW_POWER_MODE 0x0F00 /* Power Management mode */
+#define IW_POWER_UNICAST_R 0x0100 /* Receive only unicast messages */
+#define IW_POWER_MULTICAST_R 0x0200 /* Receive only multicast messages */
+#define IW_POWER_ALL_R 0x0300 /* Receive all messages though PM */
+#define IW_POWER_FORCE_S 0x0400 /* Force PM procedure for sending unicast */
+#define IW_POWER_REPEATER 0x0800 /* Repeat broadcast messages in PM period */
+#define IW_POWER_MODIFIER 0x000F /* Modify a parameter */
+#define IW_POWER_MIN 0x0001 /* Value is a minimum */
+#define IW_POWER_MAX 0x0002 /* Value is a maximum */
+#define IW_POWER_RELATIVE 0x0004 /* Value is not in seconds/ms/us */
+
+/* Transmit Power flags available */
+#define IW_TXPOW_DBM 0x0000 /* Value is in dBm */
+#define IW_TXPOW_MWATT 0x0001 /* Value is in mW */
+
+/* Retry limits and lifetime flags available */
+#define IW_RETRY_ON 0x0000 /* No details... */
+#define IW_RETRY_TYPE 0xF000 /* Type of parameter */
+#define IW_RETRY_LIMIT 0x1000 /* Maximum number of retries*/
+#define IW_RETRY_LIFETIME 0x2000 /* Maximum duration of retries in us */
+#define IW_RETRY_MODIFIER 0x000F /* Modify a parameter */
+#define IW_RETRY_MIN 0x0001 /* Value is a minimum */
+#define IW_RETRY_MAX 0x0002 /* Value is a maximum */
+#define IW_RETRY_RELATIVE 0x0004 /* Value is not in seconds/ms/us */
+
+/* Scanning request flags */
+#define IW_SCAN_DEFAULT 0x0000 /* Default scan of the driver */
+#define IW_SCAN_ALL_ESSID 0x0001 /* Scan all ESSIDs */
+#define IW_SCAN_THIS_ESSID 0x0002 /* Scan only this ESSID */
+#define IW_SCAN_ALL_FREQ 0x0004 /* Scan all Frequencies */
+#define IW_SCAN_THIS_FREQ 0x0008 /* Scan only this Frequency */
+#define IW_SCAN_ALL_MODE 0x0010 /* Scan all Modes */
+#define IW_SCAN_THIS_MODE 0x0020 /* Scan only this Mode */
+#define IW_SCAN_ALL_RATE 0x0040 /* Scan all Bit-Rates */
+#define IW_SCAN_THIS_RATE 0x0080 /* Scan only this Bit-Rate */
+/* Maximum size of returned data */
+#define IW_SCAN_MAX_DATA 4096 /* In bytes */
+
+/****************************** TYPES ******************************/
+
+/* --------------------------- SUBTYPES --------------------------- */
+/*
+ * Generic format for most parameters that fit in an int
+ */
+struct iw_param
+{
+ __s32 value; /* The value of the parameter itself */
+ __u8 fixed; /* Hardware should not use auto select */
+ __u8 disabled; /* Disable the feature */
+ __u16 flags; /* Various specifc flags (if any) */
+};
+
+/*
+ * For all data larger than 16 octets, we need to use a
+ * pointer to memory allocated in user space.
+ */
+struct iw_point
+{
+ caddr_t pointer; /* Pointer to the data (in user space) */
+ __u16 length; /* number of fields or size in bytes */
+ __u16 flags; /* Optional params */
+};
+
+/*
+ * A frequency
+ * For numbers lower than 10^9, we encode the number in 'm' and
+ * set 'e' to 0
+ * For number greater than 10^9, we divide it by the lowest power
+ * of 10 to get 'm' lower than 10^9, with 'm'= f / (10^'e')...
+ * The power of 10 is in 'e', the result of the division is in 'm'.
+ */
+struct iw_freq
+{
+ __u32 m; /* Mantissa */
+ __u16 e; /* Exponent */
+ __u8 i; /* List index (when in range struct) */
+};
+
+/*
+ * Quality of the link
+ */
+struct iw_quality
+{
+ __u8 qual; /* link quality (%retries, SNR,
+ %missed beacons or better...) */
+ __u8 level; /* signal level (dBm) */
+ __u8 noise; /* noise level (dBm) */
+ __u8 updated; /* Flags to know if updated */
+};
+
+/*
+ * Packet discarded in the wireless adapter due to
+ * "wireless" specific problems...
+ * Note : the list of counter and statistics in net_device_stats
+ * is already pretty exhaustive, and you should use that first.
+ * This is only additional stats...
+ */
+struct iw_discarded
+{
+ __u32 nwid; /* Rx : Wrong nwid/essid */
+ __u32 code; /* Rx : Unable to code/decode (WEP) */
+ __u32 fragment; /* Rx : Can't perform MAC reassembly */
+ __u32 retries; /* Tx : Max MAC retries num reached */
+ __u32 misc; /* Others cases */
+};
+
+/*
+ * Packet/Time period missed in the wireless adapter due to
+ * "wireless" specific problems...
+ */
+struct iw_missed
+{
+ __u32 beacon; /* Missed beacons/superframe */
+};
+
+/* ------------------------ WIRELESS STATS ------------------------ */
+/*
+ * Wireless statistics (used for /proc/net/wireless)
+ */
+struct iw_statistics
+{
+ __u16 status; /* Status
+ * - device dependent for now */
+
+ struct iw_quality qual; /* Quality of the link
+ * (instant/mean/max) */
+ struct iw_discarded discard; /* Packet discarded counts */
+ struct iw_missed miss; /* Packet missed counts */
+};
+
+/* ------------------------ IOCTL REQUEST ------------------------ */
+/*
+ * This structure defines the payload of an ioctl, and is used
+ * below.
+ *
+ * Note that this structure should fit on the memory footprint
+ * of iwreq (which is the same as ifreq), which mean a max size of
+ * 16 octets = 128 bits. Warning, pointers might be 64 bits wide...
+ * You should check this when increasing the structures defined
+ * above in this file...
+ */
+union iwreq_data
+{
+ /* Config - generic */
+ char name[IFNAMSIZ];
+ /* Name : used to verify the presence of wireless extensions.
+ * Name of the protocol/provider... */
+
+ struct iw_point essid; /* Extended network name */
+ struct iw_param nwid; /* network id (or domain - the cell) */
+ struct iw_freq freq; /* frequency or channel :
+ * 0-1000 = channel
+ * > 1000 = frequency in Hz */
+
+ struct iw_param sens; /* signal level threshold */
+ struct iw_param bitrate; /* default bit rate */
+ struct iw_param txpower; /* default transmit power */
+ struct iw_param rts; /* RTS threshold threshold */
+ struct iw_param frag; /* Fragmentation threshold */
+ __u32 mode; /* Operation mode */
+ struct iw_param retry; /* Retry limits & lifetime */
+
+ struct iw_point encoding; /* Encoding stuff : tokens */
+ struct iw_param power; /* PM duration/timeout */
+ struct iw_quality qual; /* Quality part of statistics */
+
+ struct sockaddr ap_addr; /* Access point address */
+ struct sockaddr addr; /* Destination address (hw) */
+
+ struct iw_param param; /* Other small parameters */
+ struct iw_point data; /* Other large parameters */
+};
+
+/*
+ * The structure to exchange data for ioctl.
+ * This structure is the same as 'struct ifreq', but (re)defined for
+ * convenience...
+ * Do I need to remind you about structure size (32 octets) ?
+ */
+struct iwreq
+{
+ union
+ {
+ char ifrn_name[IFNAMSIZ]; /* if name, e.g. "eth0" */
+ } ifr_ifrn;
+
+ /* Data part (defined just above) */
+ union iwreq_data u;
+};
+
+/* -------------------------- IOCTL DATA -------------------------- */
+/*
+ * For those ioctl which want to exchange mode data that what could
+ * fit in the above structure...
+ */
+
+/*
+ * Range of parameters
+ */
+
+struct iw_range
+{
+ /* Informative stuff (to choose between different interface) */
+ __u32 throughput; /* To give an idea... */
+ /* In theory this value should be the maximum benchmarked
+ * TCP/IP throughput, because with most of these devices the
+ * bit rate is meaningless (overhead an co) to estimate how
+ * fast the connection will go and pick the fastest one.
+ * I suggest people to play with Netperf or any benchmark...
+ */
+
+ /* NWID (or domain id) */
+ __u32 min_nwid; /* Minimal NWID we are able to set */
+ __u32 max_nwid; /* Maximal NWID we are able to set */
+
+ /* Frequency */
+ __u16 num_channels; /* Number of channels [0; num - 1] */
+ __u8 num_frequency; /* Number of entry in the list */
+ struct iw_freq freq[IW_MAX_FREQUENCIES]; /* list */
+ /* Note : this frequency list doesn't need to fit channel numbers */
+
+ /* signal level threshold range */
+ __s32 sensitivity;
+
+ /* Quality of link & SNR stuff */
+ struct iw_quality max_qual; /* Quality of the link */
+
+ /* Rates */
+ __u8 num_bitrates; /* Number of entries in the list */
+ __s32 bitrate[IW_MAX_BITRATES]; /* list, in bps */
+
+ /* RTS threshold */
+ __s32 min_rts; /* Minimal RTS threshold */
+ __s32 max_rts; /* Maximal RTS threshold */
+
+ /* Frag threshold */
+ __s32 min_frag; /* Minimal frag threshold */
+ __s32 max_frag; /* Maximal frag threshold */
+
+ /* Power Management duration & timeout */
+ __s32 min_pmp; /* Minimal PM period */
+ __s32 max_pmp; /* Maximal PM period */
+ __s32 min_pmt; /* Minimal PM timeout */
+ __s32 max_pmt; /* Maximal PM timeout */
+ __u16 pmp_flags; /* How to decode max/min PM period */
+ __u16 pmt_flags; /* How to decode max/min PM timeout */
+ __u16 pm_capa; /* What PM options are supported */
+
+ /* Encoder stuff */
+ __u16 encoding_size[IW_MAX_ENCODING_SIZES]; /* Different token sizes */
+ __u8 num_encoding_sizes; /* Number of entry in the list */
+ __u8 max_encoding_tokens; /* Max number of tokens */
+
+ /* Transmit power */
+ __u16 txpower_capa; /* What options are supported */
+ __u8 num_txpower; /* Number of entries in the list */
+ __s32 txpower[IW_MAX_TXPOWER]; /* list, in bps */
+
+ /* Wireless Extension version info */
+ __u8 we_version_compiled; /* Must be WIRELESS_EXT */
+ __u8 we_version_source; /* Last update of source */
+
+ /* Retry limits and lifetime */
+ __u16 retry_capa; /* What retry options are supported */
+ __u16 retry_flags; /* How to decode max/min retry limit */
+ __u16 r_time_flags; /* How to decode max/min retry life */
+ __s32 min_retry; /* Minimal number of retries */
+ __s32 max_retry; /* Maximal number of retries */
+ __s32 min_r_time; /* Minimal retry lifetime */
+ __s32 max_r_time; /* Maximal retry lifetime */
+
+ /* Average quality of link & SNR */
+ struct iw_quality avg_qual; /* Quality of the link */
+ /* This should contain the average/typical values of the quality
+ * indicator. This should be the threshold between a "good" and
+ * a "bad" link (example : monitor going from green to orange).
+ * Currently, user space apps like quality monitors don't have any
+ * way to calibrate the measurement. With this, they can split
+ * the range between 0 and max_qual in different quality level
+ * (using a geometric subdivision centered on the average).
+ * I expect that people doing the user space apps will feedback
+ * us on which value we need to put in each driver...
+ */
+};
+
+/*
+ * Private ioctl interface information
+ */
+
+struct iw_priv_args
+{
+ __u32 cmd; /* Number of the ioctl to issue */
+ __u16 set_args; /* Type and number of args */
+ __u16 get_args; /* Type and number of args */
+ char name[IFNAMSIZ]; /* Name of the extension */
+};
+
+/* ----------------------- WIRELESS EVENTS ----------------------- */
+/*
+ * Wireless events are carried through the rtnetlink socket to user
+ * space. They are encapsulated in the IFLA_WIRELESS field of
+ * a RTM_NEWLINK message.
+ */
+
+/*
+ * A Wireless Event. Contains basically the same data as the ioctl...
+ */
+struct iw_event
+{
+ __u16 len; /* Real lenght of this stuff */
+ __u16 cmd; /* Wireless IOCTL */
+ union iwreq_data u; /* IOCTL fixed payload */
+};
+
+/* Size of the Event prefix (including padding and alignement junk) */
+#define IW_EV_LCP_LEN (sizeof(struct iw_event) - sizeof(union iwreq_data))
+/* Size of the various events */
+#define IW_EV_CHAR_LEN (IW_EV_LCP_LEN + IFNAMSIZ)
+#define IW_EV_UINT_LEN (IW_EV_LCP_LEN + sizeof(__u32))
+#define IW_EV_FREQ_LEN (IW_EV_LCP_LEN + sizeof(struct iw_freq))
+#define IW_EV_POINT_LEN (IW_EV_LCP_LEN + sizeof(struct iw_point))
+#define IW_EV_PARAM_LEN (IW_EV_LCP_LEN + sizeof(struct iw_param))
+#define IW_EV_ADDR_LEN (IW_EV_LCP_LEN + sizeof(struct sockaddr))
+#define IW_EV_QUAL_LEN (IW_EV_LCP_LEN + sizeof(struct iw_quality))
+
+/* Note : in the case of iw_point, the extra data will come at the
+ * end of the event */
+
+#endif /* _LINUX_WIRELESS_H */
diff --git a/package/kernel/realtek-wl/src/Users/wireless_tools.25/wireless.15.h b/package/kernel/realtek-wl/src/Users/wireless_tools.25/wireless.15.h
new file mode 100644
index 0000000..e43bdad
--- /dev/null
+++ b/package/kernel/realtek-wl/src/Users/wireless_tools.25/wireless.15.h
@@ -0,0 +1,706 @@
+/*
+ * This file define a set of standard wireless extensions
+ *
+ * Version : 15 12.7.02
+ *
+ * Authors : Jean Tourrilhes - HPL - <jt@hpl.hp.com>
+ * Copyright (c) 1997-2002 Jean Tourrilhes, All Rights Reserved.
+ */
+
+#ifndef _LINUX_WIRELESS_H
+#define _LINUX_WIRELESS_H
+
+/************************** DOCUMENTATION **************************/
+/*
+ * Initial APIs (1996 -> onward) :
+ * -----------------------------
+ * Basically, the wireless extensions are for now a set of standard ioctl
+ * call + /proc/net/wireless
+ *
+ * The entry /proc/net/wireless give statistics and information on the
+ * driver.
+ * This is better than having each driver having its entry because
+ * its centralised and we may remove the driver module safely.
+ *
+ * Ioctl are used to configure the driver and issue commands. This is
+ * better than command line options of insmod because we may want to
+ * change dynamically (while the driver is running) some parameters.
+ *
+ * The ioctl mechanimsm are copied from standard devices ioctl.
+ * We have the list of command plus a structure descibing the
+ * data exchanged...
+ * Note that to add these ioctl, I was obliged to modify :
+ * # net/core/dev.c (two place + add include)
+ * # net/ipv4/af_inet.c (one place + add include)
+ *
+ * /proc/net/wireless is a copy of /proc/net/dev.
+ * We have a structure for data passed from the driver to /proc/net/wireless
+ * Too add this, I've modified :
+ * # net/core/dev.c (two other places)
+ * # include/linux/netdevice.h (one place)
+ * # include/linux/proc_fs.h (one place)
+ *
+ * New driver API (2002 -> onward) :
+ * -------------------------------
+ * This file is only concerned with the user space API and common definitions.
+ * The new driver API is defined and documented in :
+ * # include/net/iw_handler.h
+ *
+ * Note as well that /proc/net/wireless implementation has now moved in :
+ * # include/linux/wireless.c
+ *
+ * Wireless Events (2002 -> onward) :
+ * --------------------------------
+ * Events are defined at the end of this file, and implemented in :
+ * # include/linux/wireless.c
+ *
+ * Other comments :
+ * --------------
+ * Do not add here things that are redundant with other mechanisms
+ * (drivers init, ifconfig, /proc/net/dev, ...) and with are not
+ * wireless specific.
+ *
+ * These wireless extensions are not magic : each driver has to provide
+ * support for them...
+ *
+ * IMPORTANT NOTE : As everything in the kernel, this is very much a
+ * work in progress. Contact me if you have ideas of improvements...
+ */
+
+/***************************** INCLUDES *****************************/
+
+#include <linux/types.h> /* for "caddr_t" et al */
+#include <linux/socket.h> /* for "struct sockaddr" et al */
+#include <linux/if.h> /* for IFNAMSIZ and co... */
+
+/***************************** VERSION *****************************/
+/*
+ * This constant is used to know the availability of the wireless
+ * extensions and to know which version of wireless extensions it is
+ * (there is some stuff that will be added in the future...)
+ * I just plan to increment with each new version.
+ */
+#define WIRELESS_EXT 15
+
+/*
+ * Changes :
+ *
+ * V2 to V3
+ * --------
+ * Alan Cox start some incompatibles changes. I've integrated a bit more.
+ * - Encryption renamed to Encode to avoid US regulation problems
+ * - Frequency changed from float to struct to avoid problems on old 386
+ *
+ * V3 to V4
+ * --------
+ * - Add sensitivity
+ *
+ * V4 to V5
+ * --------
+ * - Missing encoding definitions in range
+ * - Access points stuff
+ *
+ * V5 to V6
+ * --------
+ * - 802.11 support (ESSID ioctls)
+ *
+ * V6 to V7
+ * --------
+ * - define IW_ESSID_MAX_SIZE and IW_MAX_AP
+ *
+ * V7 to V8
+ * --------
+ * - Changed my e-mail address
+ * - More 802.11 support (nickname, rate, rts, frag)
+ * - List index in frequencies
+ *
+ * V8 to V9
+ * --------
+ * - Support for 'mode of operation' (ad-hoc, managed...)
+ * - Support for unicast and multicast power saving
+ * - Change encoding to support larger tokens (>64 bits)
+ * - Updated iw_params (disable, flags) and use it for NWID
+ * - Extracted iw_point from iwreq for clarity
+ *
+ * V9 to V10
+ * ---------
+ * - Add PM capability to range structure
+ * - Add PM modifier : MAX/MIN/RELATIVE
+ * - Add encoding option : IW_ENCODE_NOKEY
+ * - Add TxPower ioctls (work like TxRate)
+ *
+ * V10 to V11
+ * ----------
+ * - Add WE version in range (help backward/forward compatibility)
+ * - Add retry ioctls (work like PM)
+ *
+ * V11 to V12
+ * ----------
+ * - Add SIOCSIWSTATS to get /proc/net/wireless programatically
+ * - Add DEV PRIVATE IOCTL to avoid collisions in SIOCDEVPRIVATE space
+ * - Add new statistics (frag, retry, beacon)
+ * - Add average quality (for user space calibration)
+ *
+ * V12 to V13
+ * ----------
+ * - Document creation of new driver API.
+ * - Extract union iwreq_data from struct iwreq (for new driver API).
+ * - Rename SIOCSIWNAME as SIOCSIWCOMMIT
+ *
+ * V13 to V14
+ * ----------
+ * - Wireless Events support : define struct iw_event
+ * - Define additional specific event numbers
+ * - Add "addr" and "param" fields in union iwreq_data
+ * - AP scanning stuff (SIOCSIWSCAN and friends)
+ *
+ * V14 to V15
+ * ----------
+ * - Add IW_PRIV_TYPE_ADDR for struct sockaddr private arg
+ * - Make struct iw_freq signed (both m & e), add explicit padding
+ * - Add IWEVCUSTOM for driver specific event/scanning token
+ * - Add IW_MAX_GET_SPY for driver returning a lot of addresses
+ * - Add IW_TXPOW_RANGE for range of Tx Powers
+ * - Add IWEVREGISTERED & IWEVEXPIRED events for Access Points
+ * - Add IW_MODE_MONITOR for passive monitor
+ */
+
+/**************************** CONSTANTS ****************************/
+
+/* -------------------------- IOCTL LIST -------------------------- */
+
+/* Wireless Identification */
+#define SIOCSIWCOMMIT 0x8B00 /* Commit pending changes to driver */
+#define SIOCGIWNAME 0x8B01 /* get name == wireless protocol */
+/* SIOCGIWNAME is used to verify the presence of Wireless Extensions.
+ * Common values : "IEEE 802.11-DS", "IEEE 802.11-FH", "IEEE 802.11b"...
+ * Don't put the name of your driver there, it's useless. */
+
+/* Basic operations */
+#define SIOCSIWNWID 0x8B02 /* set network id (pre-802.11) */
+#define SIOCGIWNWID 0x8B03 /* get network id (the cell) */
+#define SIOCSIWFREQ 0x8B04 /* set channel/frequency (Hz) */
+#define SIOCGIWFREQ 0x8B05 /* get channel/frequency (Hz) */
+#define SIOCSIWMODE 0x8B06 /* set operation mode */
+#define SIOCGIWMODE 0x8B07 /* get operation mode */
+#define SIOCSIWSENS 0x8B08 /* set sensitivity (dBm) */
+#define SIOCGIWSENS 0x8B09 /* get sensitivity (dBm) */
+
+/* Informative stuff */
+#define SIOCSIWRANGE 0x8B0A /* Unused */
+#define SIOCGIWRANGE 0x8B0B /* Get range of parameters */
+#define SIOCSIWPRIV 0x8B0C /* Unused */
+#define SIOCGIWPRIV 0x8B0D /* get private ioctl interface info */
+#define SIOCSIWSTATS 0x8B0E /* Unused */
+#define SIOCGIWSTATS 0x8B0F /* Get /proc/net/wireless stats */
+/* SIOCGIWSTATS is strictly used between user space and the kernel, and
+ * is never passed to the driver (i.e. the driver will never see it). */
+
+/* Mobile IP support (statistics per MAC address) */
+#define SIOCSIWSPY 0x8B10 /* set spy addresses */
+#define SIOCGIWSPY 0x8B11 /* get spy info (quality of link) */
+
+/* Access Point manipulation */
+#define SIOCSIWAP 0x8B14 /* set access point MAC addresses */
+#define SIOCGIWAP 0x8B15 /* get access point MAC addresses */
+#define SIOCGIWAPLIST 0x8B17 /* Deprecated in favor of scanning */
+#define SIOCSIWSCAN 0x8B18 /* trigger scanning (list cells) */
+#define SIOCGIWSCAN 0x8B19 /* get scanning results */
+
+/* 802.11 specific support */
+#define SIOCSIWESSID 0x8B1A /* set ESSID (network name) */
+#define SIOCGIWESSID 0x8B1B /* get ESSID */
+#define SIOCSIWNICKN 0x8B1C /* set node name/nickname */
+#define SIOCGIWNICKN 0x8B1D /* get node name/nickname */
+/* As the ESSID and NICKN are strings up to 32 bytes long, it doesn't fit
+ * within the 'iwreq' structure, so we need to use the 'data' member to
+ * point to a string in user space, like it is done for RANGE... */
+
+/* Other parameters useful in 802.11 and some other devices */
+#define SIOCSIWRATE 0x8B20 /* set default bit rate (bps) */
+#define SIOCGIWRATE 0x8B21 /* get default bit rate (bps) */
+#define SIOCSIWRTS 0x8B22 /* set RTS/CTS threshold (bytes) */
+#define SIOCGIWRTS 0x8B23 /* get RTS/CTS threshold (bytes) */
+#define SIOCSIWFRAG 0x8B24 /* set fragmentation thr (bytes) */
+#define SIOCGIWFRAG 0x8B25 /* get fragmentation thr (bytes) */
+#define SIOCSIWTXPOW 0x8B26 /* set transmit power (dBm) */
+#define SIOCGIWTXPOW 0x8B27 /* get transmit power (dBm) */
+#define SIOCSIWRETRY 0x8B28 /* set retry limits and lifetime */
+#define SIOCGIWRETRY 0x8B29 /* get retry limits and lifetime */
+
+/* Encoding stuff (scrambling, hardware security, WEP...) */
+#define SIOCSIWENCODE 0x8B2A /* set encoding token & mode */
+#define SIOCGIWENCODE 0x8B2B /* get encoding token & mode */
+/* Power saving stuff (power management, unicast and multicast) */
+#define SIOCSIWPOWER 0x8B2C /* set Power Management settings */
+#define SIOCGIWPOWER 0x8B2D /* get Power Management settings */
+
+/* -------------------- DEV PRIVATE IOCTL LIST -------------------- */
+
+/* These 16 ioctl are wireless device private.
+ * Each driver is free to use them for whatever purpose it chooses,
+ * however the driver *must* export the description of those ioctls
+ * with SIOCGIWPRIV and *must* use arguments as defined below.
+ * If you don't follow those rules, DaveM is going to hate you (reason :
+ * it make mixed 32/64bit operation impossible).
+ */
+#define SIOCIWFIRSTPRIV 0x8BE0
+#define SIOCIWLASTPRIV 0x8BFF
+/* Previously, we were using SIOCDEVPRIVATE, but we now have our
+ * separate range because of collisions with other tools such as
+ * 'mii-tool'.
+ * We now have 32 commands, so a bit more space ;-).
+ * Also, all 'odd' commands are only usable by root and don't return the
+ * content of ifr/iwr to user (but you are not obliged to use the set/get
+ * convention, just use every other two command).
+ * And I repeat : you are not obliged to use them with iwspy, but you
+ * must be compliant with it.
+ */
+
+/* ------------------------- IOCTL STUFF ------------------------- */
+
+/* The first and the last (range) */
+#define SIOCIWFIRST 0x8B00
+#define SIOCIWLAST SIOCIWLASTPRIV /* 0x8BFF */
+
+/* Even : get (world access), odd : set (root access) */
+#define IW_IS_SET(cmd) (!((cmd) & 0x1))
+#define IW_IS_GET(cmd) ((cmd) & 0x1)
+
+/* ----------------------- WIRELESS EVENTS ----------------------- */
+/* Those are *NOT* ioctls, do not issue request on them !!! */
+/* Most events use the same identifier as ioctl requests */
+
+#define IWEVTXDROP 0x8C00 /* Packet dropped to excessive retry */
+#define IWEVQUAL 0x8C01 /* Quality part of statistics (scan) */
+#define IWEVCUSTOM 0x8C02 /* Driver specific ascii string */
+#define IWEVREGISTERED 0x8C03 /* Discovered a new node (AP mode) */
+#define IWEVEXPIRED 0x8C04 /* Expired a node (AP mode) */
+
+#define IWEVFIRST 0x8C00
+
+/* ------------------------- PRIVATE INFO ------------------------- */
+/*
+ * The following is used with SIOCGIWPRIV. It allow a driver to define
+ * the interface (name, type of data) for its private ioctl.
+ * Privates ioctl are SIOCIWFIRSTPRIV -> SIOCIWLASTPRIV
+ */
+
+#define IW_PRIV_TYPE_MASK 0x7000 /* Type of arguments */
+#define IW_PRIV_TYPE_NONE 0x0000
+#define IW_PRIV_TYPE_BYTE 0x1000 /* Char as number */
+#define IW_PRIV_TYPE_CHAR 0x2000 /* Char as character */
+#define IW_PRIV_TYPE_INT 0x4000 /* 32 bits int */
+#define IW_PRIV_TYPE_FLOAT 0x5000 /* struct iw_freq */
+#define IW_PRIV_TYPE_ADDR 0x6000 /* struct sockaddr */
+
+#define IW_PRIV_SIZE_FIXED 0x0800 /* Variable or fixed nuber of args */
+
+#define IW_PRIV_SIZE_MASK 0x07FF /* Max number of those args */
+
+/*
+ * Note : if the number of args is fixed and the size < 16 octets,
+ * instead of passing a pointer we will put args in the iwreq struct...
+ */
+
+/* ----------------------- OTHER CONSTANTS ----------------------- */
+
+/* Maximum frequencies in the range struct */
+#define IW_MAX_FREQUENCIES 16
+/* Note : if you have something like 80 frequencies,
+ * don't increase this constant and don't fill the frequency list.
+ * The user will be able to set by channel anyway... */
+
+/* Maximum bit rates in the range struct */
+#define IW_MAX_BITRATES 8
+
+/* Maximum tx powers in the range struct */
+#define IW_MAX_TXPOWER 8
+/* Note : if you more than 8 TXPowers, just set the max and min or
+ * a few of them in the struct iw_range. */
+
+/* Maximum of address that you may set with SPY */
+#define IW_MAX_SPY 8 /* set */
+#define IW_MAX_GET_SPY 64 /* get */
+
+/* Maximum of address that you may get in the
+ list of access points in range */
+#define IW_MAX_AP 8
+
+/* Maximum size of the ESSID and NICKN strings */
+#define IW_ESSID_MAX_SIZE 32
+
+/* Modes of operation */
+#define IW_MODE_AUTO 0 /* Let the driver decides */
+#define IW_MODE_ADHOC 1 /* Single cell network */
+#define IW_MODE_INFRA 2 /* Multi cell network, roaming, ... */
+#define IW_MODE_MASTER 3 /* Synchronisation master or Access Point */
+#define IW_MODE_REPEAT 4 /* Wireless Repeater (forwarder) */
+#define IW_MODE_SECOND 5 /* Secondary master/repeater (backup) */
+#define IW_MODE_MONITOR 6 /* Passive monitor (listen only) */
+
+/* Maximum number of size of encoding token available
+ * they are listed in the range structure */
+#define IW_MAX_ENCODING_SIZES 8
+
+/* Maximum size of the encoding token in bytes */
+#define IW_ENCODING_TOKEN_MAX 32 /* 256 bits (for now) */
+
+/* Flags for encoding (along with the token) */
+#define IW_ENCODE_INDEX 0x00FF /* Token index (if needed) */
+#define IW_ENCODE_FLAGS 0xFF00 /* Flags defined below */
+#define IW_ENCODE_MODE 0xF000 /* Modes defined below */
+#define IW_ENCODE_DISABLED 0x8000 /* Encoding disabled */
+#define IW_ENCODE_ENABLED 0x0000 /* Encoding enabled */
+#define IW_ENCODE_RESTRICTED 0x4000 /* Refuse non-encoded packets */
+#define IW_ENCODE_OPEN 0x2000 /* Accept non-encoded packets */
+#define IW_ENCODE_NOKEY 0x0800 /* Key is write only, so not present */
+
+/* Power management flags available (along with the value, if any) */
+#define IW_POWER_ON 0x0000 /* No details... */
+#define IW_POWER_TYPE 0xF000 /* Type of parameter */
+#define IW_POWER_PERIOD 0x1000 /* Value is a period/duration of */
+#define IW_POWER_TIMEOUT 0x2000 /* Value is a timeout (to go asleep) */
+#define IW_POWER_MODE 0x0F00 /* Power Management mode */
+#define IW_POWER_UNICAST_R 0x0100 /* Receive only unicast messages */
+#define IW_POWER_MULTICAST_R 0x0200 /* Receive only multicast messages */
+#define IW_POWER_ALL_R 0x0300 /* Receive all messages though PM */
+#define IW_POWER_FORCE_S 0x0400 /* Force PM procedure for sending unicast */
+#define IW_POWER_REPEATER 0x0800 /* Repeat broadcast messages in PM period */
+#define IW_POWER_MODIFIER 0x000F /* Modify a parameter */
+#define IW_POWER_MIN 0x0001 /* Value is a minimum */
+#define IW_POWER_MAX 0x0002 /* Value is a maximum */
+#define IW_POWER_RELATIVE 0x0004 /* Value is not in seconds/ms/us */
+
+/* Transmit Power flags available */
+#define IW_TXPOW_TYPE 0x00FF /* Type of value */
+#define IW_TXPOW_DBM 0x0000 /* Value is in dBm */
+#define IW_TXPOW_MWATT 0x0001 /* Value is in mW */
+#define IW_TXPOW_RANGE 0x1000 /* Range of value between min/max */
+
+/* Retry limits and lifetime flags available */
+#define IW_RETRY_ON 0x0000 /* No details... */
+#define IW_RETRY_TYPE 0xF000 /* Type of parameter */
+#define IW_RETRY_LIMIT 0x1000 /* Maximum number of retries*/
+#define IW_RETRY_LIFETIME 0x2000 /* Maximum duration of retries in us */
+#define IW_RETRY_MODIFIER 0x000F /* Modify a parameter */
+#define IW_RETRY_MIN 0x0001 /* Value is a minimum */
+#define IW_RETRY_MAX 0x0002 /* Value is a maximum */
+#define IW_RETRY_RELATIVE 0x0004 /* Value is not in seconds/ms/us */
+
+/* Scanning request flags */
+#define IW_SCAN_DEFAULT 0x0000 /* Default scan of the driver */
+#define IW_SCAN_ALL_ESSID 0x0001 /* Scan all ESSIDs */
+#define IW_SCAN_THIS_ESSID 0x0002 /* Scan only this ESSID */
+#define IW_SCAN_ALL_FREQ 0x0004 /* Scan all Frequencies */
+#define IW_SCAN_THIS_FREQ 0x0008 /* Scan only this Frequency */
+#define IW_SCAN_ALL_MODE 0x0010 /* Scan all Modes */
+#define IW_SCAN_THIS_MODE 0x0020 /* Scan only this Mode */
+#define IW_SCAN_ALL_RATE 0x0040 /* Scan all Bit-Rates */
+#define IW_SCAN_THIS_RATE 0x0080 /* Scan only this Bit-Rate */
+/* Maximum size of returned data */
+#define IW_SCAN_MAX_DATA 4096 /* In bytes */
+
+/* Max number of char in custom event - use multiple of them if needed */
+#define IW_CUSTOM_MAX 256 /* In bytes */
+
+/****************************** TYPES ******************************/
+
+/* --------------------------- SUBTYPES --------------------------- */
+/*
+ * Generic format for most parameters that fit in an int
+ */
+struct iw_param
+{
+ __s32 value; /* The value of the parameter itself */
+ __u8 fixed; /* Hardware should not use auto select */
+ __u8 disabled; /* Disable the feature */
+ __u16 flags; /* Various specifc flags (if any) */
+};
+
+/*
+ * For all data larger than 16 octets, we need to use a
+ * pointer to memory allocated in user space.
+ */
+struct iw_point
+{
+ caddr_t pointer; /* Pointer to the data (in user space) */
+ __u16 length; /* number of fields or size in bytes */
+ __u16 flags; /* Optional params */
+};
+
+/*
+ * A frequency
+ * For numbers lower than 10^9, we encode the number in 'm' and
+ * set 'e' to 0
+ * For number greater than 10^9, we divide it by the lowest power
+ * of 10 to get 'm' lower than 10^9, with 'm'= f / (10^'e')...
+ * The power of 10 is in 'e', the result of the division is in 'm'.
+ */
+struct iw_freq
+{
+ __s32 m; /* Mantissa */
+ __s16 e; /* Exponent */
+ __u8 i; /* List index (when in range struct) */
+ __u8 pad; /* Unused - just for alignement */
+};
+
+/*
+ * Quality of the link
+ */
+struct iw_quality
+{
+ __u8 qual; /* link quality (%retries, SNR,
+ %missed beacons or better...) */
+ __u8 level; /* signal level (dBm) */
+ __u8 noise; /* noise level (dBm) */
+ __u8 updated; /* Flags to know if updated */
+};
+
+/*
+ * Packet discarded in the wireless adapter due to
+ * "wireless" specific problems...
+ * Note : the list of counter and statistics in net_device_stats
+ * is already pretty exhaustive, and you should use that first.
+ * This is only additional stats...
+ */
+struct iw_discarded
+{
+ __u32 nwid; /* Rx : Wrong nwid/essid */
+ __u32 code; /* Rx : Unable to code/decode (WEP) */
+ __u32 fragment; /* Rx : Can't perform MAC reassembly */
+ __u32 retries; /* Tx : Max MAC retries num reached */
+ __u32 misc; /* Others cases */
+};
+
+/*
+ * Packet/Time period missed in the wireless adapter due to
+ * "wireless" specific problems...
+ */
+struct iw_missed
+{
+ __u32 beacon; /* Missed beacons/superframe */
+};
+
+/* ------------------------ WIRELESS STATS ------------------------ */
+/*
+ * Wireless statistics (used for /proc/net/wireless)
+ */
+struct iw_statistics
+{
+ __u16 status; /* Status
+ * - device dependent for now */
+
+ struct iw_quality qual; /* Quality of the link
+ * (instant/mean/max) */
+ struct iw_discarded discard; /* Packet discarded counts */
+ struct iw_missed miss; /* Packet missed counts */
+};
+
+/* ------------------------ IOCTL REQUEST ------------------------ */
+/*
+ * This structure defines the payload of an ioctl, and is used
+ * below.
+ *
+ * Note that this structure should fit on the memory footprint
+ * of iwreq (which is the same as ifreq), which mean a max size of
+ * 16 octets = 128 bits. Warning, pointers might be 64 bits wide...
+ * You should check this when increasing the structures defined
+ * above in this file...
+ */
+union iwreq_data
+{
+ /* Config - generic */
+ char name[IFNAMSIZ];
+ /* Name : used to verify the presence of wireless extensions.
+ * Name of the protocol/provider... */
+
+ struct iw_point essid; /* Extended network name */
+ struct iw_param nwid; /* network id (or domain - the cell) */
+ struct iw_freq freq; /* frequency or channel :
+ * 0-1000 = channel
+ * > 1000 = frequency in Hz */
+
+ struct iw_param sens; /* signal level threshold */
+ struct iw_param bitrate; /* default bit rate */
+ struct iw_param txpower; /* default transmit power */
+ struct iw_param rts; /* RTS threshold threshold */
+ struct iw_param frag; /* Fragmentation threshold */
+ __u32 mode; /* Operation mode */
+ struct iw_param retry; /* Retry limits & lifetime */
+
+ struct iw_point encoding; /* Encoding stuff : tokens */
+ struct iw_param power; /* PM duration/timeout */
+ struct iw_quality qual; /* Quality part of statistics */
+
+ struct sockaddr ap_addr; /* Access point address */
+ struct sockaddr addr; /* Destination address (hw) */
+
+ struct iw_param param; /* Other small parameters */
+ struct iw_point data; /* Other large parameters */
+};
+
+/*
+ * The structure to exchange data for ioctl.
+ * This structure is the same as 'struct ifreq', but (re)defined for
+ * convenience...
+ * Do I need to remind you about structure size (32 octets) ?
+ */
+struct iwreq
+{
+ union
+ {
+ char ifrn_name[IFNAMSIZ]; /* if name, e.g. "eth0" */
+ } ifr_ifrn;
+
+ /* Data part (defined just above) */
+ union iwreq_data u;
+};
+
+/* -------------------------- IOCTL DATA -------------------------- */
+/*
+ * For those ioctl which want to exchange mode data that what could
+ * fit in the above structure...
+ */
+
+/*
+ * Range of parameters
+ */
+
+struct iw_range
+{
+ /* Informative stuff (to choose between different interface) */
+ __u32 throughput; /* To give an idea... */
+ /* In theory this value should be the maximum benchmarked
+ * TCP/IP throughput, because with most of these devices the
+ * bit rate is meaningless (overhead an co) to estimate how
+ * fast the connection will go and pick the fastest one.
+ * I suggest people to play with Netperf or any benchmark...
+ */
+
+ /* NWID (or domain id) */
+ __u32 min_nwid; /* Minimal NWID we are able to set */
+ __u32 max_nwid; /* Maximal NWID we are able to set */
+
+ /* Frequency */
+ __u16 num_channels; /* Number of channels [0; num - 1] */
+ __u8 num_frequency; /* Number of entry in the list */
+ struct iw_freq freq[IW_MAX_FREQUENCIES]; /* list */
+ /* Note : this frequency list doesn't need to fit channel numbers */
+
+ /* signal level threshold range */
+ __s32 sensitivity;
+
+ /* Quality of link & SNR stuff */
+ struct iw_quality max_qual; /* Quality of the link */
+
+ /* Rates */
+ __u8 num_bitrates; /* Number of entries in the list */
+ __s32 bitrate[IW_MAX_BITRATES]; /* list, in bps */
+
+ /* RTS threshold */
+ __s32 min_rts; /* Minimal RTS threshold */
+ __s32 max_rts; /* Maximal RTS threshold */
+
+ /* Frag threshold */
+ __s32 min_frag; /* Minimal frag threshold */
+ __s32 max_frag; /* Maximal frag threshold */
+
+ /* Power Management duration & timeout */
+ __s32 min_pmp; /* Minimal PM period */
+ __s32 max_pmp; /* Maximal PM period */
+ __s32 min_pmt; /* Minimal PM timeout */
+ __s32 max_pmt; /* Maximal PM timeout */
+ __u16 pmp_flags; /* How to decode max/min PM period */
+ __u16 pmt_flags; /* How to decode max/min PM timeout */
+ __u16 pm_capa; /* What PM options are supported */
+
+ /* Encoder stuff */
+ __u16 encoding_size[IW_MAX_ENCODING_SIZES]; /* Different token sizes */
+ __u8 num_encoding_sizes; /* Number of entry in the list */
+ __u8 max_encoding_tokens; /* Max number of tokens */
+
+ /* Transmit power */
+ __u16 txpower_capa; /* What options are supported */
+ __u8 num_txpower; /* Number of entries in the list */
+ __s32 txpower[IW_MAX_TXPOWER]; /* list, in bps */
+
+ /* Wireless Extension version info */
+ __u8 we_version_compiled; /* Must be WIRELESS_EXT */
+ __u8 we_version_source; /* Last update of source */
+
+ /* Retry limits and lifetime */
+ __u16 retry_capa; /* What retry options are supported */
+ __u16 retry_flags; /* How to decode max/min retry limit */
+ __u16 r_time_flags; /* How to decode max/min retry life */
+ __s32 min_retry; /* Minimal number of retries */
+ __s32 max_retry; /* Maximal number of retries */
+ __s32 min_r_time; /* Minimal retry lifetime */
+ __s32 max_r_time; /* Maximal retry lifetime */
+
+ /* Average quality of link & SNR */
+ struct iw_quality avg_qual; /* Quality of the link */
+ /* This should contain the average/typical values of the quality
+ * indicator. This should be the threshold between a "good" and
+ * a "bad" link (example : monitor going from green to orange).
+ * Currently, user space apps like quality monitors don't have any
+ * way to calibrate the measurement. With this, they can split
+ * the range between 0 and max_qual in different quality level
+ * (using a geometric subdivision centered on the average).
+ * I expect that people doing the user space apps will feedback
+ * us on which value we need to put in each driver...
+ */
+};
+
+/*
+ * Private ioctl interface information
+ */
+#if 0
+struct iwprivargs
+{
+ __u32 cmd; /* Number of the ioctl to issue */
+ __u16 set_args; /* Type and number of args */
+ __u16 get_args; /* Type and number of args */
+ char name[IFNAMSIZ]; /* Name of the extension */
+}
+#endif
+struct iw_priv_args
+{
+ __u32 cmd; /* Number of the ioctl to issue */
+ __u16 set_args; /* Type and number of args */
+ __u16 get_args; /* Type and number of args */
+ char name[IFNAMSIZ]; /* Name of the extension */
+};
+
+/* ----------------------- WIRELESS EVENTS ----------------------- */
+/*
+ * Wireless events are carried through the rtnetlink socket to user
+ * space. They are encapsulated in the IFLA_WIRELESS field of
+ * a RTM_NEWLINK message.
+ */
+
+/*
+ * A Wireless Event. Contains basically the same data as the ioctl...
+ */
+struct iw_event
+{
+ __u16 len; /* Real lenght of this stuff */
+ __u16 cmd; /* Wireless IOCTL */
+ union iwreq_data u; /* IOCTL fixed payload */
+};
+
+/* Size of the Event prefix (including padding and alignement junk) */
+#define IW_EV_LCP_LEN (sizeof(struct iw_event) - sizeof(union iwreq_data))
+/* Size of the various events */
+#define IW_EV_CHAR_LEN (IW_EV_LCP_LEN + IFNAMSIZ)
+#define IW_EV_UINT_LEN (IW_EV_LCP_LEN + sizeof(__u32))
+#define IW_EV_FREQ_LEN (IW_EV_LCP_LEN + sizeof(struct iw_freq))
+#define IW_EV_POINT_LEN (IW_EV_LCP_LEN + sizeof(struct iw_point))
+#define IW_EV_PARAM_LEN (IW_EV_LCP_LEN + sizeof(struct iw_param))
+#define IW_EV_ADDR_LEN (IW_EV_LCP_LEN + sizeof(struct sockaddr))
+#define IW_EV_QUAL_LEN (IW_EV_LCP_LEN + sizeof(struct iw_quality))
+
+/* Note : in the case of iw_point, the extra data will come at the
+ * end of the event */
+
+#endif /* _LINUX_WIRELESS_H */
diff --git a/package/kernel/realtek-wl/src/Users/wireless_tools.25/wireless.7 b/package/kernel/realtek-wl/src/Users/wireless_tools.25/wireless.7
new file mode 100644
index 0000000..9ee50cb
--- /dev/null
+++ b/package/kernel/realtek-wl/src/Users/wireless_tools.25/wireless.7
@@ -0,0 +1,100 @@
+.\" Jean Tourrilhes - HPL - 2002
+.\" wireless.7
+.\"
+.TH WIRELESS 7 "12 July 2002" "net-tools" "Linux Programmer's Manual"
+.\"
+.\" NAME part
+.\"
+.SH NAME
+wireless \- Wireless Tools and Wireless Extensions
+.\"
+.\" SYNOPSIS part
+.\"
+.SH SYNOPSIS
+.B iwconfig
+.br
+.B iwpriv -a
+.br
+.\"
+.\" DESCRIPTION part
+.\"
+.SH DESCRIPTION
+The
+.B Wireless Extensions
+is an API allowing you manipulate Wireless LAN networking interfaces.
+It is composed of a variety of tools and configuration files. It is
+documented in more details in the Linux Wireless LAN Howto.
+.br
+The
+.B Wireless Tools
+are use to change configuration on the fly, to get statistics and
+diagnose those interfaces. They are described in their own man page
+(see below).
+.br
+.B Wireless configuration
+is specific to each Linux distribution. This man page will contain in
+the future the configuration procedure for a few common distributions
+(when I get the necessary info from them). For the time being, check
+the various files included with the Wireless Tools package.
+.\"
+.\" DEBIAN 3.0 part
+.\"
+.SH DEBIAN 3.0
+Debian 3.0 (and later) has integrated wireless configuration in their
+network scripts.
+.TP
+.B File :
+.I /etc/network/interfaces
+.TP
+.B Form :
+.RI wireless_ "<function> <value>"
+.br
+wireless_essid Home
+.br
+wireless_mode ad_hoc
+.TP
+.B See also :
+.I /etc/network/if-pre-up.d/wireless-tool
+.br
+.I /usr/share/doc/wireless.##/README.Debian
+.\"
+.\" PCMCIA part
+.\"
+.SH ORIGINAL PCMCIA SCRIPTS
+If you are using the original configuration scripts from the Pcmcia
+package, you can use this method.
+.TP
+.B File :
+.I /etc/pcmcia/wireless.opts
+.TP
+.B Form :
+*,*,*,*)
+.br
+ ESSID="MY_ESSID"
+.br
+ MODE="Managed"
+.br
+ ;;
+.TP
+.B See also :
+.I /etc/pcmcia/wireless
+.br
+File
+.I PCMCIA.txt
+part of Wireless Tools package
+.\"
+.\" AUTHOR part
+.\"
+.SH AUTHOR
+Jean Tourrilhes \- jt@hpl.hp.com
+.br
+.I http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/
+.\"
+.\" SEE ALSO part
+.\"
+.SH SEE ALSO
+.BR iwconfig (8),
+.BR iwlist (8),
+.BR iwspy (8),
+.BR iwpriv (8),
+.BR iwevent (8).
diff --git a/package/kernel/realtek-wl/src/Users/wireless_tools.25/wireless.h b/package/kernel/realtek-wl/src/Users/wireless_tools.25/wireless.h
new file mode 100644
index 0000000..e43bdad
--- /dev/null
+++ b/package/kernel/realtek-wl/src/Users/wireless_tools.25/wireless.h
@@ -0,0 +1,706 @@
+/*
+ * This file define a set of standard wireless extensions
+ *
+ * Version : 15 12.7.02
+ *
+ * Authors : Jean Tourrilhes - HPL - <jt@hpl.hp.com>
+ * Copyright (c) 1997-2002 Jean Tourrilhes, All Rights Reserved.
+ */
+
+#ifndef _LINUX_WIRELESS_H
+#define _LINUX_WIRELESS_H
+
+/************************** DOCUMENTATION **************************/
+/*
+ * Initial APIs (1996 -> onward) :
+ * -----------------------------
+ * Basically, the wireless extensions are for now a set of standard ioctl
+ * call + /proc/net/wireless
+ *
+ * The entry /proc/net/wireless give statistics and information on the
+ * driver.
+ * This is better than having each driver having its entry because
+ * its centralised and we may remove the driver module safely.
+ *
+ * Ioctl are used to configure the driver and issue commands. This is
+ * better than command line options of insmod because we may want to
+ * change dynamically (while the driver is running) some parameters.
+ *
+ * The ioctl mechanimsm are copied from standard devices ioctl.
+ * We have the list of command plus a structure descibing the
+ * data exchanged...
+ * Note that to add these ioctl, I was obliged to modify :
+ * # net/core/dev.c (two place + add include)
+ * # net/ipv4/af_inet.c (one place + add include)
+ *
+ * /proc/net/wireless is a copy of /proc/net/dev.
+ * We have a structure for data passed from the driver to /proc/net/wireless
+ * Too add this, I've modified :
+ * # net/core/dev.c (two other places)
+ * # include/linux/netdevice.h (one place)
+ * # include/linux/proc_fs.h (one place)
+ *
+ * New driver API (2002 -> onward) :
+ * -------------------------------
+ * This file is only concerned with the user space API and common definitions.
+ * The new driver API is defined and documented in :
+ * # include/net/iw_handler.h
+ *
+ * Note as well that /proc/net/wireless implementation has now moved in :
+ * # include/linux/wireless.c
+ *
+ * Wireless Events (2002 -> onward) :
+ * --------------------------------
+ * Events are defined at the end of this file, and implemented in :
+ * # include/linux/wireless.c
+ *
+ * Other comments :
+ * --------------
+ * Do not add here things that are redundant with other mechanisms
+ * (drivers init, ifconfig, /proc/net/dev, ...) and with are not
+ * wireless specific.
+ *
+ * These wireless extensions are not magic : each driver has to provide
+ * support for them...
+ *
+ * IMPORTANT NOTE : As everything in the kernel, this is very much a
+ * work in progress. Contact me if you have ideas of improvements...
+ */
+
+/***************************** INCLUDES *****************************/
+
+#include <linux/types.h> /* for "caddr_t" et al */
+#include <linux/socket.h> /* for "struct sockaddr" et al */
+#include <linux/if.h> /* for IFNAMSIZ and co... */
+
+/***************************** VERSION *****************************/
+/*
+ * This constant is used to know the availability of the wireless
+ * extensions and to know which version of wireless extensions it is
+ * (there is some stuff that will be added in the future...)
+ * I just plan to increment with each new version.
+ */
+#define WIRELESS_EXT 15
+
+/*
+ * Changes :
+ *
+ * V2 to V3
+ * --------
+ * Alan Cox start some incompatibles changes. I've integrated a bit more.
+ * - Encryption renamed to Encode to avoid US regulation problems
+ * - Frequency changed from float to struct to avoid problems on old 386
+ *
+ * V3 to V4
+ * --------
+ * - Add sensitivity
+ *
+ * V4 to V5
+ * --------
+ * - Missing encoding definitions in range
+ * - Access points stuff
+ *
+ * V5 to V6
+ * --------
+ * - 802.11 support (ESSID ioctls)
+ *
+ * V6 to V7
+ * --------
+ * - define IW_ESSID_MAX_SIZE and IW_MAX_AP
+ *
+ * V7 to V8
+ * --------
+ * - Changed my e-mail address
+ * - More 802.11 support (nickname, rate, rts, frag)
+ * - List index in frequencies
+ *
+ * V8 to V9
+ * --------
+ * - Support for 'mode of operation' (ad-hoc, managed...)
+ * - Support for unicast and multicast power saving
+ * - Change encoding to support larger tokens (>64 bits)
+ * - Updated iw_params (disable, flags) and use it for NWID
+ * - Extracted iw_point from iwreq for clarity
+ *
+ * V9 to V10
+ * ---------
+ * - Add PM capability to range structure
+ * - Add PM modifier : MAX/MIN/RELATIVE
+ * - Add encoding option : IW_ENCODE_NOKEY
+ * - Add TxPower ioctls (work like TxRate)
+ *
+ * V10 to V11
+ * ----------
+ * - Add WE version in range (help backward/forward compatibility)
+ * - Add retry ioctls (work like PM)
+ *
+ * V11 to V12
+ * ----------
+ * - Add SIOCSIWSTATS to get /proc/net/wireless programatically
+ * - Add DEV PRIVATE IOCTL to avoid collisions in SIOCDEVPRIVATE space
+ * - Add new statistics (frag, retry, beacon)
+ * - Add average quality (for user space calibration)
+ *
+ * V12 to V13
+ * ----------
+ * - Document creation of new driver API.
+ * - Extract union iwreq_data from struct iwreq (for new driver API).
+ * - Rename SIOCSIWNAME as SIOCSIWCOMMIT
+ *
+ * V13 to V14
+ * ----------
+ * - Wireless Events support : define struct iw_event
+ * - Define additional specific event numbers
+ * - Add "addr" and "param" fields in union iwreq_data
+ * - AP scanning stuff (SIOCSIWSCAN and friends)
+ *
+ * V14 to V15
+ * ----------
+ * - Add IW_PRIV_TYPE_ADDR for struct sockaddr private arg
+ * - Make struct iw_freq signed (both m & e), add explicit padding
+ * - Add IWEVCUSTOM for driver specific event/scanning token
+ * - Add IW_MAX_GET_SPY for driver returning a lot of addresses
+ * - Add IW_TXPOW_RANGE for range of Tx Powers
+ * - Add IWEVREGISTERED & IWEVEXPIRED events for Access Points
+ * - Add IW_MODE_MONITOR for passive monitor
+ */
+
+/**************************** CONSTANTS ****************************/
+
+/* -------------------------- IOCTL LIST -------------------------- */
+
+/* Wireless Identification */
+#define SIOCSIWCOMMIT 0x8B00 /* Commit pending changes to driver */
+#define SIOCGIWNAME 0x8B01 /* get name == wireless protocol */
+/* SIOCGIWNAME is used to verify the presence of Wireless Extensions.
+ * Common values : "IEEE 802.11-DS", "IEEE 802.11-FH", "IEEE 802.11b"...
+ * Don't put the name of your driver there, it's useless. */
+
+/* Basic operations */
+#define SIOCSIWNWID 0x8B02 /* set network id (pre-802.11) */
+#define SIOCGIWNWID 0x8B03 /* get network id (the cell) */
+#define SIOCSIWFREQ 0x8B04 /* set channel/frequency (Hz) */
+#define SIOCGIWFREQ 0x8B05 /* get channel/frequency (Hz) */
+#define SIOCSIWMODE 0x8B06 /* set operation mode */
+#define SIOCGIWMODE 0x8B07 /* get operation mode */
+#define SIOCSIWSENS 0x8B08 /* set sensitivity (dBm) */
+#define SIOCGIWSENS 0x8B09 /* get sensitivity (dBm) */
+
+/* Informative stuff */
+#define SIOCSIWRANGE 0x8B0A /* Unused */
+#define SIOCGIWRANGE 0x8B0B /* Get range of parameters */
+#define SIOCSIWPRIV 0x8B0C /* Unused */
+#define SIOCGIWPRIV 0x8B0D /* get private ioctl interface info */
+#define SIOCSIWSTATS 0x8B0E /* Unused */
+#define SIOCGIWSTATS 0x8B0F /* Get /proc/net/wireless stats */
+/* SIOCGIWSTATS is strictly used between user space and the kernel, and
+ * is never passed to the driver (i.e. the driver will never see it). */
+
+/* Mobile IP support (statistics per MAC address) */
+#define SIOCSIWSPY 0x8B10 /* set spy addresses */
+#define SIOCGIWSPY 0x8B11 /* get spy info (quality of link) */
+
+/* Access Point manipulation */
+#define SIOCSIWAP 0x8B14 /* set access point MAC addresses */
+#define SIOCGIWAP 0x8B15 /* get access point MAC addresses */
+#define SIOCGIWAPLIST 0x8B17 /* Deprecated in favor of scanning */
+#define SIOCSIWSCAN 0x8B18 /* trigger scanning (list cells) */
+#define SIOCGIWSCAN 0x8B19 /* get scanning results */
+
+/* 802.11 specific support */
+#define SIOCSIWESSID 0x8B1A /* set ESSID (network name) */
+#define SIOCGIWESSID 0x8B1B /* get ESSID */
+#define SIOCSIWNICKN 0x8B1C /* set node name/nickname */
+#define SIOCGIWNICKN 0x8B1D /* get node name/nickname */
+/* As the ESSID and NICKN are strings up to 32 bytes long, it doesn't fit
+ * within the 'iwreq' structure, so we need to use the 'data' member to
+ * point to a string in user space, like it is done for RANGE... */
+
+/* Other parameters useful in 802.11 and some other devices */
+#define SIOCSIWRATE 0x8B20 /* set default bit rate (bps) */
+#define SIOCGIWRATE 0x8B21 /* get default bit rate (bps) */
+#define SIOCSIWRTS 0x8B22 /* set RTS/CTS threshold (bytes) */
+#define SIOCGIWRTS 0x8B23 /* get RTS/CTS threshold (bytes) */
+#define SIOCSIWFRAG 0x8B24 /* set fragmentation thr (bytes) */
+#define SIOCGIWFRAG 0x8B25 /* get fragmentation thr (bytes) */
+#define SIOCSIWTXPOW 0x8B26 /* set transmit power (dBm) */
+#define SIOCGIWTXPOW 0x8B27 /* get transmit power (dBm) */
+#define SIOCSIWRETRY 0x8B28 /* set retry limits and lifetime */
+#define SIOCGIWRETRY 0x8B29 /* get retry limits and lifetime */
+
+/* Encoding stuff (scrambling, hardware security, WEP...) */
+#define SIOCSIWENCODE 0x8B2A /* set encoding token & mode */
+#define SIOCGIWENCODE 0x8B2B /* get encoding token & mode */
+/* Power saving stuff (power management, unicast and multicast) */
+#define SIOCSIWPOWER 0x8B2C /* set Power Management settings */
+#define SIOCGIWPOWER 0x8B2D /* get Power Management settings */
+
+/* -------------------- DEV PRIVATE IOCTL LIST -------------------- */
+
+/* These 16 ioctl are wireless device private.
+ * Each driver is free to use them for whatever purpose it chooses,
+ * however the driver *must* export the description of those ioctls
+ * with SIOCGIWPRIV and *must* use arguments as defined below.
+ * If you don't follow those rules, DaveM is going to hate you (reason :
+ * it make mixed 32/64bit operation impossible).
+ */
+#define SIOCIWFIRSTPRIV 0x8BE0
+#define SIOCIWLASTPRIV 0x8BFF
+/* Previously, we were using SIOCDEVPRIVATE, but we now have our
+ * separate range because of collisions with other tools such as
+ * 'mii-tool'.
+ * We now have 32 commands, so a bit more space ;-).
+ * Also, all 'odd' commands are only usable by root and don't return the
+ * content of ifr/iwr to user (but you are not obliged to use the set/get
+ * convention, just use every other two command).
+ * And I repeat : you are not obliged to use them with iwspy, but you
+ * must be compliant with it.
+ */
+
+/* ------------------------- IOCTL STUFF ------------------------- */
+
+/* The first and the last (range) */
+#define SIOCIWFIRST 0x8B00
+#define SIOCIWLAST SIOCIWLASTPRIV /* 0x8BFF */
+
+/* Even : get (world access), odd : set (root access) */
+#define IW_IS_SET(cmd) (!((cmd) & 0x1))
+#define IW_IS_GET(cmd) ((cmd) & 0x1)
+
+/* ----------------------- WIRELESS EVENTS ----------------------- */
+/* Those are *NOT* ioctls, do not issue request on them !!! */
+/* Most events use the same identifier as ioctl requests */
+
+#define IWEVTXDROP 0x8C00 /* Packet dropped to excessive retry */
+#define IWEVQUAL 0x8C01 /* Quality part of statistics (scan) */
+#define IWEVCUSTOM 0x8C02 /* Driver specific ascii string */
+#define IWEVREGISTERED 0x8C03 /* Discovered a new node (AP mode) */
+#define IWEVEXPIRED 0x8C04 /* Expired a node (AP mode) */
+
+#define IWEVFIRST 0x8C00
+
+/* ------------------------- PRIVATE INFO ------------------------- */
+/*
+ * The following is used with SIOCGIWPRIV. It allow a driver to define
+ * the interface (name, type of data) for its private ioctl.
+ * Privates ioctl are SIOCIWFIRSTPRIV -> SIOCIWLASTPRIV
+ */
+
+#define IW_PRIV_TYPE_MASK 0x7000 /* Type of arguments */
+#define IW_PRIV_TYPE_NONE 0x0000
+#define IW_PRIV_TYPE_BYTE 0x1000 /* Char as number */
+#define IW_PRIV_TYPE_CHAR 0x2000 /* Char as character */
+#define IW_PRIV_TYPE_INT 0x4000 /* 32 bits int */
+#define IW_PRIV_TYPE_FLOAT 0x5000 /* struct iw_freq */
+#define IW_PRIV_TYPE_ADDR 0x6000 /* struct sockaddr */
+
+#define IW_PRIV_SIZE_FIXED 0x0800 /* Variable or fixed nuber of args */
+
+#define IW_PRIV_SIZE_MASK 0x07FF /* Max number of those args */
+
+/*
+ * Note : if the number of args is fixed and the size < 16 octets,
+ * instead of passing a pointer we will put args in the iwreq struct...
+ */
+
+/* ----------------------- OTHER CONSTANTS ----------------------- */
+
+/* Maximum frequencies in the range struct */
+#define IW_MAX_FREQUENCIES 16
+/* Note : if you have something like 80 frequencies,
+ * don't increase this constant and don't fill the frequency list.
+ * The user will be able to set by channel anyway... */
+
+/* Maximum bit rates in the range struct */
+#define IW_MAX_BITRATES 8
+
+/* Maximum tx powers in the range struct */
+#define IW_MAX_TXPOWER 8
+/* Note : if you more than 8 TXPowers, just set the max and min or
+ * a few of them in the struct iw_range. */
+
+/* Maximum of address that you may set with SPY */
+#define IW_MAX_SPY 8 /* set */
+#define IW_MAX_GET_SPY 64 /* get */
+
+/* Maximum of address that you may get in the
+ list of access points in range */
+#define IW_MAX_AP 8
+
+/* Maximum size of the ESSID and NICKN strings */
+#define IW_ESSID_MAX_SIZE 32
+
+/* Modes of operation */
+#define IW_MODE_AUTO 0 /* Let the driver decides */
+#define IW_MODE_ADHOC 1 /* Single cell network */
+#define IW_MODE_INFRA 2 /* Multi cell network, roaming, ... */
+#define IW_MODE_MASTER 3 /* Synchronisation master or Access Point */
+#define IW_MODE_REPEAT 4 /* Wireless Repeater (forwarder) */
+#define IW_MODE_SECOND 5 /* Secondary master/repeater (backup) */
+#define IW_MODE_MONITOR 6 /* Passive monitor (listen only) */
+
+/* Maximum number of size of encoding token available
+ * they are listed in the range structure */
+#define IW_MAX_ENCODING_SIZES 8
+
+/* Maximum size of the encoding token in bytes */
+#define IW_ENCODING_TOKEN_MAX 32 /* 256 bits (for now) */
+
+/* Flags for encoding (along with the token) */
+#define IW_ENCODE_INDEX 0x00FF /* Token index (if needed) */
+#define IW_ENCODE_FLAGS 0xFF00 /* Flags defined below */
+#define IW_ENCODE_MODE 0xF000 /* Modes defined below */
+#define IW_ENCODE_DISABLED 0x8000 /* Encoding disabled */
+#define IW_ENCODE_ENABLED 0x0000 /* Encoding enabled */
+#define IW_ENCODE_RESTRICTED 0x4000 /* Refuse non-encoded packets */
+#define IW_ENCODE_OPEN 0x2000 /* Accept non-encoded packets */
+#define IW_ENCODE_NOKEY 0x0800 /* Key is write only, so not present */
+
+/* Power management flags available (along with the value, if any) */
+#define IW_POWER_ON 0x0000 /* No details... */
+#define IW_POWER_TYPE 0xF000 /* Type of parameter */
+#define IW_POWER_PERIOD 0x1000 /* Value is a period/duration of */
+#define IW_POWER_TIMEOUT 0x2000 /* Value is a timeout (to go asleep) */
+#define IW_POWER_MODE 0x0F00 /* Power Management mode */
+#define IW_POWER_UNICAST_R 0x0100 /* Receive only unicast messages */
+#define IW_POWER_MULTICAST_R 0x0200 /* Receive only multicast messages */
+#define IW_POWER_ALL_R 0x0300 /* Receive all messages though PM */
+#define IW_POWER_FORCE_S 0x0400 /* Force PM procedure for sending unicast */
+#define IW_POWER_REPEATER 0x0800 /* Repeat broadcast messages in PM period */
+#define IW_POWER_MODIFIER 0x000F /* Modify a parameter */
+#define IW_POWER_MIN 0x0001 /* Value is a minimum */
+#define IW_POWER_MAX 0x0002 /* Value is a maximum */
+#define IW_POWER_RELATIVE 0x0004 /* Value is not in seconds/ms/us */
+
+/* Transmit Power flags available */
+#define IW_TXPOW_TYPE 0x00FF /* Type of value */
+#define IW_TXPOW_DBM 0x0000 /* Value is in dBm */
+#define IW_TXPOW_MWATT 0x0001 /* Value is in mW */
+#define IW_TXPOW_RANGE 0x1000 /* Range of value between min/max */
+
+/* Retry limits and lifetime flags available */
+#define IW_RETRY_ON 0x0000 /* No details... */
+#define IW_RETRY_TYPE 0xF000 /* Type of parameter */
+#define IW_RETRY_LIMIT 0x1000 /* Maximum number of retries*/
+#define IW_RETRY_LIFETIME 0x2000 /* Maximum duration of retries in us */
+#define IW_RETRY_MODIFIER 0x000F /* Modify a parameter */
+#define IW_RETRY_MIN 0x0001 /* Value is a minimum */
+#define IW_RETRY_MAX 0x0002 /* Value is a maximum */
+#define IW_RETRY_RELATIVE 0x0004 /* Value is not in seconds/ms/us */
+
+/* Scanning request flags */
+#define IW_SCAN_DEFAULT 0x0000 /* Default scan of the driver */
+#define IW_SCAN_ALL_ESSID 0x0001 /* Scan all ESSIDs */
+#define IW_SCAN_THIS_ESSID 0x0002 /* Scan only this ESSID */
+#define IW_SCAN_ALL_FREQ 0x0004 /* Scan all Frequencies */
+#define IW_SCAN_THIS_FREQ 0x0008 /* Scan only this Frequency */
+#define IW_SCAN_ALL_MODE 0x0010 /* Scan all Modes */
+#define IW_SCAN_THIS_MODE 0x0020 /* Scan only this Mode */
+#define IW_SCAN_ALL_RATE 0x0040 /* Scan all Bit-Rates */
+#define IW_SCAN_THIS_RATE 0x0080 /* Scan only this Bit-Rate */
+/* Maximum size of returned data */
+#define IW_SCAN_MAX_DATA 4096 /* In bytes */
+
+/* Max number of char in custom event - use multiple of them if needed */
+#define IW_CUSTOM_MAX 256 /* In bytes */
+
+/****************************** TYPES ******************************/
+
+/* --------------------------- SUBTYPES --------------------------- */
+/*
+ * Generic format for most parameters that fit in an int
+ */
+struct iw_param
+{
+ __s32 value; /* The value of the parameter itself */
+ __u8 fixed; /* Hardware should not use auto select */
+ __u8 disabled; /* Disable the feature */
+ __u16 flags; /* Various specifc flags (if any) */
+};
+
+/*
+ * For all data larger than 16 octets, we need to use a
+ * pointer to memory allocated in user space.
+ */
+struct iw_point
+{
+ caddr_t pointer; /* Pointer to the data (in user space) */
+ __u16 length; /* number of fields or size in bytes */
+ __u16 flags; /* Optional params */
+};
+
+/*
+ * A frequency
+ * For numbers lower than 10^9, we encode the number in 'm' and
+ * set 'e' to 0
+ * For number greater than 10^9, we divide it by the lowest power
+ * of 10 to get 'm' lower than 10^9, with 'm'= f / (10^'e')...
+ * The power of 10 is in 'e', the result of the division is in 'm'.
+ */
+struct iw_freq
+{
+ __s32 m; /* Mantissa */
+ __s16 e; /* Exponent */
+ __u8 i; /* List index (when in range struct) */
+ __u8 pad; /* Unused - just for alignement */
+};
+
+/*
+ * Quality of the link
+ */
+struct iw_quality
+{
+ __u8 qual; /* link quality (%retries, SNR,
+ %missed beacons or better...) */
+ __u8 level; /* signal level (dBm) */
+ __u8 noise; /* noise level (dBm) */
+ __u8 updated; /* Flags to know if updated */
+};
+
+/*
+ * Packet discarded in the wireless adapter due to
+ * "wireless" specific problems...
+ * Note : the list of counter and statistics in net_device_stats
+ * is already pretty exhaustive, and you should use that first.
+ * This is only additional stats...
+ */
+struct iw_discarded
+{
+ __u32 nwid; /* Rx : Wrong nwid/essid */
+ __u32 code; /* Rx : Unable to code/decode (WEP) */
+ __u32 fragment; /* Rx : Can't perform MAC reassembly */
+ __u32 retries; /* Tx : Max MAC retries num reached */
+ __u32 misc; /* Others cases */
+};
+
+/*
+ * Packet/Time period missed in the wireless adapter due to
+ * "wireless" specific problems...
+ */
+struct iw_missed
+{
+ __u32 beacon; /* Missed beacons/superframe */
+};
+
+/* ------------------------ WIRELESS STATS ------------------------ */
+/*
+ * Wireless statistics (used for /proc/net/wireless)
+ */
+struct iw_statistics
+{
+ __u16 status; /* Status
+ * - device dependent for now */
+
+ struct iw_quality qual; /* Quality of the link
+ * (instant/mean/max) */
+ struct iw_discarded discard; /* Packet discarded counts */
+ struct iw_missed miss; /* Packet missed counts */
+};
+
+/* ------------------------ IOCTL REQUEST ------------------------ */
+/*
+ * This structure defines the payload of an ioctl, and is used
+ * below.
+ *
+ * Note that this structure should fit on the memory footprint
+ * of iwreq (which is the same as ifreq), which mean a max size of
+ * 16 octets = 128 bits. Warning, pointers might be 64 bits wide...
+ * You should check this when increasing the structures defined
+ * above in this file...
+ */
+union iwreq_data
+{
+ /* Config - generic */
+ char name[IFNAMSIZ];
+ /* Name : used to verify the presence of wireless extensions.
+ * Name of the protocol/provider... */
+
+ struct iw_point essid; /* Extended network name */
+ struct iw_param nwid; /* network id (or domain - the cell) */
+ struct iw_freq freq; /* frequency or channel :
+ * 0-1000 = channel
+ * > 1000 = frequency in Hz */
+
+ struct iw_param sens; /* signal level threshold */
+ struct iw_param bitrate; /* default bit rate */
+ struct iw_param txpower; /* default transmit power */
+ struct iw_param rts; /* RTS threshold threshold */
+ struct iw_param frag; /* Fragmentation threshold */
+ __u32 mode; /* Operation mode */
+ struct iw_param retry; /* Retry limits & lifetime */
+
+ struct iw_point encoding; /* Encoding stuff : tokens */
+ struct iw_param power; /* PM duration/timeout */
+ struct iw_quality qual; /* Quality part of statistics */
+
+ struct sockaddr ap_addr; /* Access point address */
+ struct sockaddr addr; /* Destination address (hw) */
+
+ struct iw_param param; /* Other small parameters */
+ struct iw_point data; /* Other large parameters */
+};
+
+/*
+ * The structure to exchange data for ioctl.
+ * This structure is the same as 'struct ifreq', but (re)defined for
+ * convenience...
+ * Do I need to remind you about structure size (32 octets) ?
+ */
+struct iwreq
+{
+ union
+ {
+ char ifrn_name[IFNAMSIZ]; /* if name, e.g. "eth0" */
+ } ifr_ifrn;
+
+ /* Data part (defined just above) */
+ union iwreq_data u;
+};
+
+/* -------------------------- IOCTL DATA -------------------------- */
+/*
+ * For those ioctl which want to exchange mode data that what could
+ * fit in the above structure...
+ */
+
+/*
+ * Range of parameters
+ */
+
+struct iw_range
+{
+ /* Informative stuff (to choose between different interface) */
+ __u32 throughput; /* To give an idea... */
+ /* In theory this value should be the maximum benchmarked
+ * TCP/IP throughput, because with most of these devices the
+ * bit rate is meaningless (overhead an co) to estimate how
+ * fast the connection will go and pick the fastest one.
+ * I suggest people to play with Netperf or any benchmark...
+ */
+
+ /* NWID (or domain id) */
+ __u32 min_nwid; /* Minimal NWID we are able to set */
+ __u32 max_nwid; /* Maximal NWID we are able to set */
+
+ /* Frequency */
+ __u16 num_channels; /* Number of channels [0; num - 1] */
+ __u8 num_frequency; /* Number of entry in the list */
+ struct iw_freq freq[IW_MAX_FREQUENCIES]; /* list */
+ /* Note : this frequency list doesn't need to fit channel numbers */
+
+ /* signal level threshold range */
+ __s32 sensitivity;
+
+ /* Quality of link & SNR stuff */
+ struct iw_quality max_qual; /* Quality of the link */
+
+ /* Rates */
+ __u8 num_bitrates; /* Number of entries in the list */
+ __s32 bitrate[IW_MAX_BITRATES]; /* list, in bps */
+
+ /* RTS threshold */
+ __s32 min_rts; /* Minimal RTS threshold */
+ __s32 max_rts; /* Maximal RTS threshold */
+
+ /* Frag threshold */
+ __s32 min_frag; /* Minimal frag threshold */
+ __s32 max_frag; /* Maximal frag threshold */
+
+ /* Power Management duration & timeout */
+ __s32 min_pmp; /* Minimal PM period */
+ __s32 max_pmp; /* Maximal PM period */
+ __s32 min_pmt; /* Minimal PM timeout */
+ __s32 max_pmt; /* Maximal PM timeout */
+ __u16 pmp_flags; /* How to decode max/min PM period */
+ __u16 pmt_flags; /* How to decode max/min PM timeout */
+ __u16 pm_capa; /* What PM options are supported */
+
+ /* Encoder stuff */
+ __u16 encoding_size[IW_MAX_ENCODING_SIZES]; /* Different token sizes */
+ __u8 num_encoding_sizes; /* Number of entry in the list */
+ __u8 max_encoding_tokens; /* Max number of tokens */
+
+ /* Transmit power */
+ __u16 txpower_capa; /* What options are supported */
+ __u8 num_txpower; /* Number of entries in the list */
+ __s32 txpower[IW_MAX_TXPOWER]; /* list, in bps */
+
+ /* Wireless Extension version info */
+ __u8 we_version_compiled; /* Must be WIRELESS_EXT */
+ __u8 we_version_source; /* Last update of source */
+
+ /* Retry limits and lifetime */
+ __u16 retry_capa; /* What retry options are supported */
+ __u16 retry_flags; /* How to decode max/min retry limit */
+ __u16 r_time_flags; /* How to decode max/min retry life */
+ __s32 min_retry; /* Minimal number of retries */
+ __s32 max_retry; /* Maximal number of retries */
+ __s32 min_r_time; /* Minimal retry lifetime */
+ __s32 max_r_time; /* Maximal retry lifetime */
+
+ /* Average quality of link & SNR */
+ struct iw_quality avg_qual; /* Quality of the link */
+ /* This should contain the average/typical values of the quality
+ * indicator. This should be the threshold between a "good" and
+ * a "bad" link (example : monitor going from green to orange).
+ * Currently, user space apps like quality monitors don't have any
+ * way to calibrate the measurement. With this, they can split
+ * the range between 0 and max_qual in different quality level
+ * (using a geometric subdivision centered on the average).
+ * I expect that people doing the user space apps will feedback
+ * us on which value we need to put in each driver...
+ */
+};
+
+/*
+ * Private ioctl interface information
+ */
+#if 0
+struct iwprivargs
+{
+ __u32 cmd; /* Number of the ioctl to issue */
+ __u16 set_args; /* Type and number of args */
+ __u16 get_args; /* Type and number of args */
+ char name[IFNAMSIZ]; /* Name of the extension */
+}
+#endif
+struct iw_priv_args
+{
+ __u32 cmd; /* Number of the ioctl to issue */
+ __u16 set_args; /* Type and number of args */
+ __u16 get_args; /* Type and number of args */
+ char name[IFNAMSIZ]; /* Name of the extension */
+};
+
+/* ----------------------- WIRELESS EVENTS ----------------------- */
+/*
+ * Wireless events are carried through the rtnetlink socket to user
+ * space. They are encapsulated in the IFLA_WIRELESS field of
+ * a RTM_NEWLINK message.
+ */
+
+/*
+ * A Wireless Event. Contains basically the same data as the ioctl...
+ */
+struct iw_event
+{
+ __u16 len; /* Real lenght of this stuff */
+ __u16 cmd; /* Wireless IOCTL */
+ union iwreq_data u; /* IOCTL fixed payload */
+};
+
+/* Size of the Event prefix (including padding and alignement junk) */
+#define IW_EV_LCP_LEN (sizeof(struct iw_event) - sizeof(union iwreq_data))
+/* Size of the various events */
+#define IW_EV_CHAR_LEN (IW_EV_LCP_LEN + IFNAMSIZ)
+#define IW_EV_UINT_LEN (IW_EV_LCP_LEN + sizeof(__u32))
+#define IW_EV_FREQ_LEN (IW_EV_LCP_LEN + sizeof(struct iw_freq))
+#define IW_EV_POINT_LEN (IW_EV_LCP_LEN + sizeof(struct iw_point))
+#define IW_EV_PARAM_LEN (IW_EV_LCP_LEN + sizeof(struct iw_param))
+#define IW_EV_ADDR_LEN (IW_EV_LCP_LEN + sizeof(struct sockaddr))
+#define IW_EV_QUAL_LEN (IW_EV_LCP_LEN + sizeof(struct iw_quality))
+
+/* Note : in the case of iw_point, the extra data will come at the
+ * end of the event */
+
+#endif /* _LINUX_WIRELESS_H */