summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoman Yeryomin <roman@advem.lv>2013-08-16 11:44:04 +0300
committerRoman Yeryomin <roman@advem.lv>2013-08-16 11:44:04 +0300
commitdee99ab0143122146ab7713cfe171790bc796dd3 (patch)
tree907ad856f6ceae17a70dd1df004a1adee8a1b2fd
parent4ed5985ada0f0420d69d7d959ecc3c9c8515efa0 (diff)
Get rid of rtkload. Use OpenWrt lzma-loader (with kernel_entry hack). Use mgbin for unified tftp image generation.
Signed-off-by: Roman Yeryomin <roman@advem.lv>
-rw-r--r--target/linux/realtek/Makefile8
-rw-r--r--target/linux/realtek/files/rtkload/COPYING340
-rw-r--r--target/linux/realtek/files/rtkload/Makefile282
-rw-r--r--target/linux/realtek/files/rtkload/README115
-rw-r--r--target/linux/realtek/files/rtkload/cache.c197
-rw-r--r--target/linux/realtek/files/rtkload/ctype.c37
-rwxr-xr-xtarget/linux/realtek/files/rtkload/cvimgbin488964 -> 0 bytes
-rw-r--r--target/linux/realtek/files/rtkload/hfload.c117
-rw-r--r--target/linux/realtek/files/rtkload/hfload.h63
-rw-r--r--target/linux/realtek/files/rtkload/inflate.c1212
-rw-r--r--target/linux/realtek/files/rtkload/ld-emu.script56
-rw-r--r--target/linux/realtek/files/rtkload/ld.script.in49
-rw-r--r--target/linux/realtek/files/rtkload/linux.binbin870418 -> 0 bytes
-rwxr-xr-xtarget/linux/realtek/files/rtkload/lzma13
-rwxr-xr-xtarget/linux/realtek/files/rtkload/lzma-24bin176616 -> 0 bytes
-rwxr-xr-xtarget/linux/realtek/files/rtkload/lzma-26bin215973 -> 0 bytes
-rw-r--r--target/linux/realtek/files/rtkload/misc.c387
-rw-r--r--target/linux/realtek/files/rtkload/prom_printf.c87
-rw-r--r--target/linux/realtek/files/rtkload/read_fd.c69
-rw-r--r--target/linux/realtek/files/rtkload/read_memory.c124
-rw-r--r--target/linux/realtek/files/rtkload/start.S263
-rw-r--r--target/linux/realtek/files/rtkload/start.h46
-rw-r--r--target/linux/realtek/files/rtkload/string.c382
-rw-r--r--target/linux/realtek/files/rtkload/target.script27
-rw-r--r--target/linux/realtek/files/rtkload/vmlinux_img.c8
-rw-r--r--target/linux/realtek/files/rtkload/vmlinux_img.gzbin858988 -> 0 bytes
-rw-r--r--target/linux/realtek/files/rtkload/vsprintf.c366
-rw-r--r--target/linux/realtek/image/Makefile96
-rw-r--r--target/linux/realtek/image/lzma-loader/Makefile65
-rw-r--r--target/linux/realtek/image/lzma-loader/src/LzmaDecode.c (renamed from target/linux/realtek/files/rtkload/LzmaDecode.c)1172
-rw-r--r--target/linux/realtek/image/lzma-loader/src/LzmaDecode.h (renamed from target/linux/realtek/files/rtkload/LzmaDecode.h)244
-rw-r--r--target/linux/realtek/image/lzma-loader/src/LzmaTypes.h45
-rw-r--r--target/linux/realtek/image/lzma-loader/src/Makefile117
-rw-r--r--target/linux/realtek/image/lzma-loader/src/board.c45
-rw-r--r--target/linux/realtek/image/lzma-loader/src/cache.c137
-rw-r--r--target/linux/realtek/image/lzma-loader/src/head.S49
-rw-r--r--target/linux/realtek/image/lzma-loader/src/loader.c266
-rw-r--r--target/linux/realtek/image/lzma-loader/src/loader.lds34
-rw-r--r--target/linux/realtek/image/lzma-loader/src/lzma-data.lds8
-rw-r--r--target/linux/realtek/image/lzma-loader/src/printf.c350
-rw-r--r--target/linux/realtek/image/lzma-loader/src/printf.h18
-rw-r--r--target/linux/realtek/patches-2.6.30/006-make-image.diff377
-rw-r--r--target/linux/realtek/patches-2.6.30/0061-rsdk-2.5.2-3.2-diff-fixup-rtkload.patch11
-rw-r--r--tools/firmware-utils/Makefile2
-rw-r--r--tools/firmware-utils/src/apmib.h2032
-rw-r--r--tools/firmware-utils/src/bixutil.c188
-rw-r--r--tools/firmware-utils/src/cvimg.c47
-rw-r--r--tools/firmware-utils/src/mgbin.c431
48 files changed, 2368 insertions, 7614 deletions
diff --git a/target/linux/realtek/Makefile b/target/linux/realtek/Makefile
index b2d7fc865..2fad85649 100644
--- a/target/linux/realtek/Makefile
+++ b/target/linux/realtek/Makefile
@@ -23,14 +23,6 @@ define Target/Description
Build firmware images for RTL8xxx based routers
endef
-define Kernel/CompileImage/Default
- $(if $(CONFIG_TARGET_ROOTFS_INITRAMFS),,rm -f $(TARGET_DIR)/init)
- +$(MAKE) $(KERNEL_MAKEOPTS) $(KERNELNAME)
- $(MAKE) $(KERNEL_MAKEOPTS) -C rtkload
- $(KERNEL_CROSS)objcopy -O binary $(OBJCOPY_STRIP) -S $(LINUX_DIR)/vmlinux $(LINUX_KERNEL)
- $(KERNEL_CROSS)objcopy $(OBJCOPY_STRIP) -S $(LINUX_DIR)/vmlinux $(KERNEL_BUILD_DIR)/vmlinux.elf
-endef
-
$(eval $(call BuildTarget))
diff --git a/target/linux/realtek/files/rtkload/COPYING b/target/linux/realtek/files/rtkload/COPYING
deleted file mode 100644
index 60549be51..000000000
--- a/target/linux/realtek/files/rtkload/COPYING
+++ /dev/null
@@ -1,340 +0,0 @@
- 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) 19yy <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) 19yy 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/target/linux/realtek/files/rtkload/Makefile b/target/linux/realtek/files/rtkload/Makefile
deleted file mode 100644
index 235673bc7..000000000
--- a/target/linux/realtek/files/rtkload/Makefile
+++ /dev/null
@@ -1,282 +0,0 @@
-# The kernel tree you do builds in.
-# Uncomment if you're building for the emulator
-include ../.config
-include ../../.config # to check toolchain CONFIG_RSDK_rsdk-1.5.4-5281-EB-2.6.30-0.9.30.3-uls-101110
-DOQUIET = false
-#DOQUIET = true
-#EMULATOR = true
-#KERNEL_ROOT = /home/john/RealTek/linux-2.5/linux
-KERNEL_ROOT = ..
-ifeq ($(wildcard $(DIR_USERS)/boa/tools/cvimg),)
-ifeq ($(wildcard $(DIR_USERS)/goahead-2.1.1/LINUX/cvimg),)
-CVIMG=./cvimg
-else
-CVIMG=$(DIR_USERS)/goahead-2.1.1/LINUX/cvimg
-endif
-.NOTPARALLEL : all
-else
-CVIMG=$(DIR_USERS)/boa/tools/cvimg
-endif
-# ---- shouldn't need to modify below this line.
-
-ifdef EMULATOR
-EMUOPTS = -DEMULATOR
-LDSCRIPT = ld-emu.script
-else
-EMUOPTS =
-LDSCRIPT = ld.script
-endif
-
-COPTIONS = -DROM_MEMORY -DCOMPRESSED_KERNEL -D__KERNEL__
-
-#SOURCES = vsprintf.c string.c ctype.c prom_printf.c misc.c hfload.c start.S read_memory.c
-ifdef BZ2_COMPRESS
- SOURCES = misc.c hfload.c start.S cache.c
-else
-ifdef GZIP_COMPRESS
- SOURCES = string.c ctype.c misc.c hfload.c start.S read_memory.c cache.c
-else
- SOURCES = string.c ctype.c misc.c hfload.c start.S read_memory.c cache.c LzmaDecode.c
-endif
-endif
-
-LOADER_FILES = hfload.o read_memory.o
-#LOADER_FILES = hfload.o
-ifdef BZ2_COMPRESS
- SUPPORT_FILES = misc.o cache.o
-else
-ifdef GZIP_COMPRESS
- SUPPORT_FILES = vsprintf.o prom_printf.o string.o ctype.o misc.o cache.o
-else
-ifeq ($(strip $(DOQUIET)),true)
- SUPPORT_FILES = string.o ctype.o misc.o cache.o LzmaDecode.o
-else
- SUPPORT_FILES = vsprintf.o prom_printf.o string.o ctype.o misc.o cache.o LzmaDecode.o
-endif
-endif
-endif
-
-CFLAGS =-Os -g -fno-pic -mno-abicalls $(EMUOPTS)
-ifeq ($(strip $(DOQUIET)),true)
-CFLAGS += $(WARNINGS) -D__DO_QUIET__
-endif
-CFLAGS += -DEMBEDDED -I$(KERNEL_ROOT)/include/linux -I$(KERNEL_ROOT)/include -I$(KERNEL_ROOT)/lib $(COPTIONS) -G 0
-CFLAGS += -I$(KERNEL_ROOT)/arch/rlx/bsp -I$(KERNEL_ROOT)/arch/rlx/include -I$(KERNEL_ROOT)/arch/rlx/include/asm/mach-generic
-#ASFLAGS = -g $(EMUOPTS) -DEMBEDDED -I$(KERNEL_ROOT)/include -I$(KERNEL_ROOT)/arch/rlx/include
-#CFLAGS += -I$(KERNEL_ROOT)/arch/mips/include -I$(KERNEL_ROOT)/arch/mips/include/asm/mach-generic
-#ASFLAGS = -g $(EMUOPTS) -DEMBEDDED -I$(KERNEL_ROOT)/include -I$(KERNEL_ROOT)/arch/mips/include
-ASFLAGS = -g -fno-pic -mno-abicalls $(EMUOPTS) -DEMBEDDED -I$(KERNEL_ROOT)/include -I$(KERNEL_ROOT)/arch/rlx/include
-
-LDFLAGS=-static -nostdlib
-
-ifdef BZ2_COMPRESS
-CFLAGS += -DBZ2_COMPRESS
-ASFLAGS += -DBZ2_COMPRESS
-else
-ifndef GZIP_COMPRESS
-CFLAGS += -DLZMA_COMPRESS
-ASFLAGS += -DLZMA_COMPRESS
-endif
-endif
-
-START_FILE = start.o
-
-
-#RTL_819X normal LOAD_START_ADDR and FLASH_OFFSET
-ifdef CONFIG_RTL_819X
-LOAD_START_ADDR=0x80500000
-FLASH_OFFSET=30000
-endif
-
-ifdef CONFIG_RTL_8196B_GW
-ifdef CONFIG_MTD_RTL_8196_SPI
-LOAD_START_ADDR=0x80A00000
-else
-LOAD_START_ADDR=0x80500000
-endif
-ifdef CONFIG_RTL_8196B_GW_8M
-FLASH_OFFSET=10000
-else
-ifeq ($(CONFIG_RTL_FLASH_MAPPING_ENABLE),y)
-ifeq ($(CONFIG_RTL_LINUX_IMAGE_OFFSET),)
-FLASH_OFFSET=30000
-else
-FLASH_OFFSET=$(CONFIG_RTL_LINUX_IMAGE_OFFSET)
-endif
-else
-FLASH_OFFSET=30000
-endif
-endif
-endif
-
-ifdef CONFIG_RTL_8198_GW
-ifdef CONFIG_MTD_RTL_8196_SPI
-LOAD_START_ADDR=0x80A00000
-else
-LOAD_START_ADDR=0x80500000
-endif
-ifdef CONFIG_RTL_8196B_GW_8M
-FLASH_OFFSET=10000
-else
-FLASH_OFFSET=30000
-endif
-endif
-
-ifdef CONFIG_RTL_8196B_ICT
-LOAD_START_ADDR=0x80500000
-FLASH_OFFSET=30000
-endif
-
-ifdef CONFIG_RTL_865X_PANAHOST
-LOAD_START_ADDR=0x80500000
-FLASH_OFFSET=20000
-endif
-
-ifdef CONFIG_RTL_8197B_PANA
-LOAD_START_ADDR=0x80700000
-FLASH_OFFSET=30000
-endif
-
-ifdef CONFIG_RTL_8196B_AP_ROOT
-LOAD_START_ADDR=0x80500000
-FLASH_OFFSET=30000
-endif
-
-ifeq ($(CONFIG_RTL_FLASH_MAPPING_ENABLE),y)
-ifeq ($(CONFIG_RTL_LINUX_IMAGE_OFFSET),)
-FLASH_OFFSET=20000
-else
-FLASH_OFFSET=$(CONFIG_RTL_LINUX_IMAGE_OFFSET)
-endif
-else
-FLASH_OFFSET=20000
-endif
-
-ifdef CONFIG_RTK_VOIP_BOARD
-LOAD_START_ADDR=0x80C00000
-endif
-
-CV_SIGNATURE=
-ifdef CONFIG_RTL_8197B_PANA
-#CV_OPTION=linux
-CV_OPTION=signature
-CV_SIGNATURE=csys
-else
-ifdef CONFIG_SQUASHFS
-CV_OPTION=linux-ro
-else
-CV_OPTION=linux
-endif
-endif
-
-ifdef CONFIG_RTL_8198_NFBI_BOARD
-LOAD_START_ADDR=0x80700000
-FLASH_OFFSET=30000
-CV_OPTION=signature
-CV_SIGNATURE=csys
-endif
-
-#ifdef CONFIG_RTL_8196C_iNIC
-#LOAD_START_ADDR=0x80500000
-#FLASH_OFFSET=30000
-#CV_OPTION=signature
-#CV_SIGNATURE=cs6c
-#endif
-
-CROSS_COMPILE ?= rsdk-linux-
-
-LD=$(CROSS_COMPILE)ld
-CC=$(CROSS_COMPILE)gcc
-CPP=$(CROSS_COMPILE)gcc
-STRIP=$(CROSS_COMPILE)strip
-AS=$(CROSS_COMPILE)as
-NM=$(CROSS_COMPILE)nm
-OBJCOPY=$(CROSS_COMPILE)objcopy
-
-SEDFLAGS = s/LOAD_ADDR/$(LOAD_START_ADDR)/;
-
-ifdef CONFIG_RTK_VOIP_BOARD
-STRIP-OPTIONS-$(CONFIG_RSDK_rsdk-1.5.4-5281-EB-2.6.30-0.9.30.3-uls-101110) = --remove-section=.bss
-endif
-
-# jffs2 related definitions
-DIR_ROMFS_BOOT = $(DIR_ROMFS)/boot/
-MKJFFS2 = ./mkfs.jffs2
-MKIMAGE_UBOOT = ./mkimage-uboot
-
-O_TARGET := rtk
-obj-y := vmlinux_img.o $(START_FILE) $(LOADER_FILES) $(SUPPORT_FILES)
-
-ifdef CONFIG_ROOTFS_JFFS2
-all: rtk-clean rtk-vmlinux_img vmlinux_img.gzip.uboot.jffs2
-else
-all: rtk-clean rtk-vmlinux_img $(START_FILE) $(LOADER_FILES) $(SUPPORT_FILES)
-endif
-
-#memload-partial
-ifdef CONFIG_ROOTFS_JFFS2
-jffs2_no_this:
-endif
- $(CC) -fno-pic -mno-abicalls -Os -fomit-frame-pointer -D__KERNEL__ -c vmlinux_img.c -o vmlinux_img.o
- $(OBJCOPY) --add-section .vmlinux=vmlinux_img.gz vmlinux_img.o
- @sed "$(SEDFLAGS)" < ld.script.in > $(LDSCRIPT)
- $(LD) $(LDFLAGS) -G 0 -T $(LDSCRIPT) -o memload-partial $(START_FILE) $(LOADER_FILES) $(SUPPORT_FILES) vmlinux_img.o
- $(NM) memload-partial | grep -v '\(compiled\)\|\(\.o$$\)\|\( [aU] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | sort > system.map
-
- cp memload-partial memload-full
- $(OBJCOPY) -Obinary memload-full nfjrom
- $(CVIMG) $(CV_OPTION) nfjrom linux.bin $(LOAD_START_ADDR) $(FLASH_OFFSET) $(CV_SIGNATURE)
-# @./size_chk vmlinux_img $(LOAD_START_ADDR)
- @$(CVIMG) size_chk vmlinux_img $(LOAD_START_ADDR) || exit $$?
-ifeq ($(CONFIG_BLK_DEV_INITRD),y)
- @echo "RAMFS no need to check flash size"
-else
-ifeq ($(CONFIG_RTL_FLASH_MAPPING_ENABLE),y)
- @$(CVIMG) flash_size_chk linux.bin || exit $$?
-endif
-endif
-
-rtk-clean:
- rm -f *.o memload system.map nfjrom memload-partial memload-full vmlinux_img.gz target target.img strip1 linux.bin vmlinux-stripped $(LDSCRIPT) vmlinux_img vmlinux_img.gzip.uboot.jffs2
-
-rtk-vmlinux_img:
- cp $(KERNEL_ROOT)/vmlinux vmlinux-stripped
- $(STRIP) vmlinux-stripped $(STRIP-OPTIONS-y)
- $(OBJCOPY) -Obinary vmlinux-stripped vmlinux_img
- rm -f vmlinux_img.gz
-ifndef CONFIG_ROOTFS_JFFS2
-ifdef BZ2_COMPRESS
- cat vmlinux_img | bzip2 -9v > vmlinux_img.gz
-else
-ifdef GZIP_COMPRESS
- cat vmlinux_img | gzip -9v > vmlinux_img.gz
-else
- ./lzma e vmlinux_img vmlinux_img.gz
-endif
-endif
- $(CVIMG) vmlinuxhdr vmlinux_img.gz vmlinux_img.gz $(KERNEL_ROOT)/vmlinux
-endif # CONFIG_ROOTFS_JFFS2
-
-target: nfjrom $(BOOT_CODE) $(EXT2_IMG)
-# Pading boot code to 512 bytes long (but only 256 bytes are allowed, 512 is to make it page alignment)
- $(OBJCOPY) -Obinary --pad-to=0x80000200 $(BOOT_CODE) bootcode
- $(OBJCOPY) -Obinary --remove-section=.bss --remove-section=.data --remove-section=.mdebug --pad-to=0x806FFE00 memload-full nandrom
- $(LD) -G0 -Ttarget.script -o target -bbinary bootcode -bbinary nandrom -bbinary $(EXT2_IMG)
- $(OBJCOPY) -Obinary target target.img
- cp -f ./target.img /tftpboot
-depend:
- rm -f .depend
- $(CC) $(CFLAGS) -MM $(SOURCES) >.depend
-
-bz2:
- @make BZ2_COMPRESS=1
-
-gzip:
- @make GZIP_COMPRESS=1
-
-vmlinux_img.gzip.uboot.jffs2:
- cat vmlinux_img | gzip -9v > vmlinux_img.gzip
- mkdir -p $(DIR_ROMFS_BOOT)
- $(MKIMAGE_UBOOT) -A mips -O linux -T kernel -C gzip -a 80000000 -e 80000000 -n 8954c_kernel -d vmlinux_img.gzip $(DIR_ROMFS_BOOT)/vmlinux_img.gzip.uboot
- $(MKJFFS2) -n -p -b -e $(CONFIG_JFFS2_ERASE_SIZE) -o $(DIR_IMAGE)/vmlinux_img.gzip.uboot.jffs2 -d $(DIR_ROMFS)
-
diff --git a/target/linux/realtek/files/rtkload/README b/target/linux/realtek/files/rtkload/README
deleted file mode 100644
index 236e144a1..000000000
--- a/target/linux/realtek/files/rtkload/README
+++ /dev/null
@@ -1,115 +0,0 @@
-hfload is a simple, second stage ELF bootloader for the VTech Helio.
-It is probably generalizable to other Philips R3912 devices with a
-friendly boot rom and flash.
-
-It works on both real Helio hardware and the Helio emulator.
-
-LEGAL STUFF
-===========
-
-This software is subject to the terms and conditions of the GNU
-General Public License. See the file "COPYING" in the main directory
-of this archive for more details.
-
-Copyright (C) 2000 by Jay Carlson.
-
-Many files originated in the Linux kernel.
-
-Note that my intent is that the last two stages of the build process
-(production of the ELF memory image, and conversion to a raw ROM
-image) are "mere aggregation [...] on a volume of a storage or
-distribution medium" in the sense of the last paragraph of section 2
-of the GPL. If necessary, I will arrange that the aggregation
-mechanism is "/bin/cat" or a simple C program, if anyone has a problem
-with my use of a "linker" to throw together files in a single box. No
-real linking is done at this stage; the Linux kernel is treated as
-pure data.
-
-QUICK START
-===========
-
-Point the Makefile at your kernel build directory. If building for
-the emulator, uncomment the EMULATOR line in the Makefile.
-
-If you don't have a romdisk image, touch romdisk.
-
-Put the first 64K of a 2M VT-OS rom image in "vtboot"; if you're
-building for the real hardware you can fake it with "make fake-vtboot".
-
-"make" produces "tryrom" and "linux.bin". tryrom is a full 2M ROM
-image for the emulator containing the VTOS bootloader, hfload, a
-compressed stripped copy of your vmlinux, and the contents of romdisk.
-linux.bin is a 2M-128k OS upgrade image without the VTOS bootloader,
-suitable for use with the VTech "dt.exe" flash programming tool.
-
-WHAT IT DOES
-============
-
-On startup, the VT-OS bootroom sets up the hardware a little, installs
-a 4k stack, and jumps to 0x9fc10000 in ROM. hfload begins here.
-
-Setup
------
-
-start.S zeroes the hfload bss area. It moves the stack to somewhere
-more spacious (paranoia), and jumps to main(). (It should turn on the
-serial port too.)
-
-main() immediately prints a message on serial port A. (It used to try
-to initialize the Helio LCD hardware, but that's commented out now.)
-
-Decompression
--------------
-
-The contents of the input_data-input_data_end region are gunzip'd from
-flash to the 4M mark in memory, at the start of the second DRAM bank.
-
-input_data typically points to a gzip'd stripped Linux kernel.
-
-ELF load
---------
-
-main() reads in the ELF header from the decompressed data.
-(Currently, the only error checking is verification that the declared
-sizes of structures match the expected sizes; this catches most
-errors.) The ELF image is copied to its destinations declared in the
-program headers, and excess memory is properly zeroed.
-
-Kernel start
-------------
-
-main() hands the ELF entry address to start.S:start_kernel.
-start_kernel places the address of the romdisk area at 0x80030000,
-restores the stack, and calls entry_address(0,0,0).
-
-WHY THE IMAGE READ FUNCTIONS ARE SO UGLY
-========================================
-
-I originally debugged this application as a userland binary, reading
-the image from a file descriptor. I then realized I could mmap() the
-kernel image. The restrictions on read_struct, copy_to_region, and
-seek_forward came out of this. As it turns out, the "can only seek
-forward, must be aligned" characteristics may be useful in the future.
-There's no reason why the entire kernel has to be uncompressed as a
-big blob; the stream reading functions could be rewritten to process
-the 32k decompressed windows as a coroutine to the decompression
-process. ELF images over about 2M are going to need this.
-
-WHY THIS WHOLE APP IS SO UGLY
-=============================
-
-Most of this will be rewritten once I understand better what I'm
-trying to do. Why make throwaway code pretty?
-
-VTBOOT
-======
-
-The file "vtboot" is not included with this distribution. It is an
-image of the VTech VT-OS bootloader that's hardwired into real Helio
-devices. It's the first 64k of a full VT-OS rom image. Given such a
-rom image, it can be extracted by:
-
- dd if=VTOS-1-1-03.rom of=vtboot bs=64k count=1
-
-If you're building for the real hardware, you don't need this file.
-"make fake-vtboot" produces 64k of zeroes.
diff --git a/target/linux/realtek/files/rtkload/cache.c b/target/linux/realtek/files/rtkload/cache.c
deleted file mode 100644
index 8e4ca57d8..000000000
--- a/target/linux/realtek/files/rtkload/cache.c
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- * This file is subject to the terms and conditions of the GNU General Public
- * License. See the file "COPYING" in the main directory of this archive
- * for more details.
- *
- * Copyright (C) 1994 - 1999 by Ralf Baechle
- * Modified for R3000 by Paul M. Antoine, 1995, 1996
- * Complete output from die() by Ulf Carlsson, 1998
- * Copyright (C) 1999 Silicon Graphics, Inc.
- */
-//#include <linux/config.h>
-#include <linux/autoconf.h>
-#include <linux/linkage.h>
-#include <asm/ptrace.h>
-//#include <asm/mipsregs.h>
-#include <asm/rlxregs.h>
-#include <asm/addrspace.h>
-//#include <asm/system.h>
-
-#if defined(CONFIG_RTL_819X)
-/* For Realtek RTL865XC Network platform series */
-#define _ICACHE_SIZE (16 * 1024) /* 16K bytes */
-#define _DCACHE_SIZE (8 * 1024) /* 8K bytes */
-#define _CACHE_LINE_SIZE 4 /* 4 words */
-#endif
-
-#define PROM_DEBUG
-
-#ifdef PROM_DEBUG
-extern int prom_printf(char *, ...);
-#endif
-
-/*Cyrus Tsai*/
-void flush_cache(void);
-void flush_icache(unsigned int start, unsigned int end);
-void flush_dcache(unsigned int start, unsigned int end);
-/*Cyrus Tsai*/
-
-
-void flush_cache(void)
-{
-#ifdef CONFIG_RTL_EB8186
- flush_dcache(0,0);
- flush_icache(0,0);
-#endif
-#if defined(CONFIG_RTL_819X)
- flush_dcache(KSEG0, KSEG0+_DCACHE_SIZE);
- flush_icache(KSEG0, KSEG0+_ICACHE_SIZE);
-#endif
-}
-
-
-/*Cyrus Tsai*/
-void flush_icache(unsigned int start, unsigned int end)
-{
-#if defined(CONFIG_RTL_819X)
- /*
- Flush data cache at first in write-back platform.
-
- Ghhuang (2007/3/9):
-
- RD-Center suggest that we need to flush D-cache entries which
- might match to same address as I-cache ... when we flush
- I-cache.
- ( Maybe some data is treated as data/instruction, both. )
- */
- flush_dcache(start, end);
-
- /*Invalidate I-Cache*/
- __asm__ volatile(
- "mtc0 $0,$20\n\t"
- "nop\n\t"
- "li $8,2\n\t"
- "mtc0 $8,$20\n\t"
- "nop\n\t"
- "nop\n\t"
- "mtc0 $0,$20\n\t"
- "nop"
- : /* no output */
- : /* no input */
- );
-
-#endif
-
-#ifdef CONFIG_RTL_EB8186
- unsigned long flags;
- volatile unsigned int reg;
- save_flags(flags);cli();
- reg=read_32bit_cp0_register(CP0_XCONTEXT);
- __asm__ volatile("nop");
- __asm__ volatile("nop");
- write_32bit_cp0_register(CP0_XCONTEXT, (reg &(~0x2))); //write '0' to bit 0,1
- __asm__ volatile("nop");
- __asm__ volatile("nop");
- write_32bit_cp0_register(CP0_XCONTEXT, (reg | 0x2)); //wirte '1' to bit 0, 1
- __asm__ volatile("nop");
- __asm__ volatile("nop");
- restore_flags(flags);
-#endif
-}
-
-void flush_dcache(unsigned int start, unsigned int end)
-{
-#ifdef CONFIG_RTL_EB8186
- unsigned long flags;
- volatile unsigned int reg;
- save_flags(flags);cli();
- reg=read_32bit_cp0_register(CP0_XCONTEXT);
- __asm__ volatile("nop");
- __asm__ volatile("nop");
- write_32bit_cp0_register(CP0_XCONTEXT, (reg & (~0x1))); //write '0' to bit 0,1
- __asm__ volatile("nop");
- __asm__ volatile("nop");
- write_32bit_cp0_register(CP0_XCONTEXT, (reg | 0x1)); //wirte '1' to bit 0, 1
- __asm__ volatile("nop");
- __asm__ volatile("nop");
- restore_flags(flags);
-#endif
-
-#if defined(CONFIG_RTL_819X)
- /* Flush D-Cache using its range */
- unsigned char *p;
- unsigned int size;
- unsigned int flags;
- unsigned int i;
-
- size = end - start;
-
- /* correctness check : flush all if any parameter is illegal */
-// david
-// if ( (size >= dcache_size) ||
- if ((size >= _DCACHE_SIZE) || (KSEGX(start) != KSEG0) )
- {
- /*
- * ghhguang
- * => For Realtek Lextra CPU,
- * the cache would NOT be flushed only if the Address to-be-flushed
- * is the EXPLICIT address ( which is really stored in that cache line ).
- * For the aliasd addresses, the cache entry would NOT be flushed even
- * it matchs same cache-index.
- *
- * => This is different from traditional MIPS-based CPU's configuration.
- * So if we want to flush ALL-cache entries, we would need to use "mtc0"
- * instruction instead of simply modifying the "size" to "dcache_size"
- * and "start" to "KSEG0".
- *
- */
- __asm__ volatile(
- "mtc0 $0,$20\n\t"
- "nop\n\t"
- "li $8,512\n\t"
- "mtc0 $8,$20\n\t"
- "nop\n\t"
- "nop\n\t"
- "mtc0 $0,$20\n\t"
- "nop"
- : /* no output */
- : /* no input */
- );
- }
-#if 1
- else
- {
- /* Start to isolate cache space */
- p = (char *)start;
-
- flags = read_c0_status();
-
- /* isolate cache space */
- write_c0_status( (ST0_ISC | flags) &~ ST0_IEC );
-
- for (i = 0; i < size; i += 0x040)
- {
- asm (
- #ifdef OPEN_RSDK_RTL865x
- ".word 0xbc750000\n\t"
- ".word 0xbc750010\n\t"
- ".word 0xbc750020\n\t"
- ".word 0xbc750030\n\t"
- #endif
- "cache 0x15, 0x000(%0)\n\t"
- "cache 0x15, 0x010(%0)\n\t"
- "cache 0x15, 0x020(%0)\n\t"
- "cache 0x15, 0x030(%0)\n\t"
- : /* No output registers */
- :"r"(p) /* input : 'p' as %0 */
- );
- p += 0x040;
- }
-
- write_c0_status(flags);
- }
-#endif
-#endif
-
-}
-/*Cyrus Tsai*/
diff --git a/target/linux/realtek/files/rtkload/ctype.c b/target/linux/realtek/files/rtkload/ctype.c
deleted file mode 100644
index 604f341ee..000000000
--- a/target/linux/realtek/files/rtkload/ctype.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * linux/lib/ctype.c
- *
- * Copyright (C) 1991, 1992 Linus Torvalds
- */
-
-#define _ctype ctype_hideme
-#include <linux/ctype.h>
-#undef _ctype
-
-const unsigned char _ctype[] = {
-_C,_C,_C,_C,_C,_C,_C,_C, /* 0-7 */
-_C,_C|_S,_C|_S,_C|_S,_C|_S,_C|_S,_C,_C, /* 8-15 */
-_C,_C,_C,_C,_C,_C,_C,_C, /* 16-23 */
-_C,_C,_C,_C,_C,_C,_C,_C, /* 24-31 */
-_S|_SP,_P,_P,_P,_P,_P,_P,_P, /* 32-39 */
-_P,_P,_P,_P,_P,_P,_P,_P, /* 40-47 */
-_D,_D,_D,_D,_D,_D,_D,_D, /* 48-55 */
-_D,_D,_P,_P,_P,_P,_P,_P, /* 56-63 */
-_P,_U|_X,_U|_X,_U|_X,_U|_X,_U|_X,_U|_X,_U, /* 64-71 */
-_U,_U,_U,_U,_U,_U,_U,_U, /* 72-79 */
-_U,_U,_U,_U,_U,_U,_U,_U, /* 80-87 */
-_U,_U,_U,_P,_P,_P,_P,_P, /* 88-95 */
-_P,_L|_X,_L|_X,_L|_X,_L|_X,_L|_X,_L|_X,_L, /* 96-103 */
-_L,_L,_L,_L,_L,_L,_L,_L, /* 104-111 */
-_L,_L,_L,_L,_L,_L,_L,_L, /* 112-119 */
-_L,_L,_L,_P,_P,_P,_P,_C, /* 120-127 */
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 128-143 */
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 144-159 */
-_S|_SP,_P,_P,_P,_P,_P,_P,_P,_P,_P,_P,_P,_P,_P,_P,_P, /* 160-175 */
-_P,_P,_P,_P,_P,_P,_P,_P,_P,_P,_P,_P,_P,_P,_P,_P, /* 176-191 */
-_U,_U,_U,_U,_U,_U,_U,_U,_U,_U,_U,_U,_U,_U,_U,_U, /* 192-207 */
-_U,_U,_U,_U,_U,_U,_U,_P,_U,_U,_U,_U,_U,_U,_U,_L, /* 208-223 */
-_L,_L,_L,_L,_L,_L,_L,_L,_L,_L,_L,_L,_L,_L,_L,_L, /* 224-239 */
-_L,_L,_L,_L,_L,_L,_L,_P,_L,_L,_L,_L,_L,_L,_L,_L}; /* 240-255 */
-
-
diff --git a/target/linux/realtek/files/rtkload/cvimg b/target/linux/realtek/files/rtkload/cvimg
deleted file mode 100755
index 668feb76f..000000000
--- a/target/linux/realtek/files/rtkload/cvimg
+++ /dev/null
Binary files differ
diff --git a/target/linux/realtek/files/rtkload/hfload.c b/target/linux/realtek/files/rtkload/hfload.c
deleted file mode 100644
index 05bdb4772..000000000
--- a/target/linux/realtek/files/rtkload/hfload.c
+++ /dev/null
@@ -1,117 +0,0 @@
-/* hfload.c
- *
- * This file is subject to the terms and conditions of the GNU
- * General Public License. See the file "COPYING" in the main
- * directory of this archive for more details.
- *
- * Copyright (C) 2000, Jay Carlson
- */
-
-/*
- * Boot loader main program.
- */
-//#include <linux/config.h>
-#include <linux/autoconf.h>
-
-#include <unistd.h>
-//#include <linux/elf.h>
-#include "hfload.h"
-
-#define REG32(reg) (*(volatile unsigned int *)((unsigned int)reg))
-
-#if defined(CONFIG_RTL_819X)
- #define BASE_ADDR 0xB8000000
- #define set_io_port_base(base) \
- do { * (unsigned long *) &mips_io_port_base = (base); } while (0)
-
- const unsigned long mips_io_port_base;
-#endif
-
-int file_offset;
-unsigned long kernelStartAddr;
-/*
-int old_stack_pointer;
-
-#define MAX_PHDRS_SIZE 8
-
-Elf32_Ehdr header;
-Elf32_Phdr phdrs[MAX_PHDRS_SIZE];
-*/
-extern void flush_cache(void);
-
-/*
-void
-zero_region(char *start, char *end)
-{
- char *addr;
- int count;
-
- count = end - start;
-#ifndef __DO_QUIET__
- printf("zeroing from %08x to to %08x, 0x%x bytes\n", start, end, count);
-#endif
-
-#ifndef FAKE_COPYING
- memset(start, 0, count);
-#endif
-}
-
-void
-load_phdr(Elf32_Phdr *phdr)
-{
- char *addr, *end;
-
- seek_forward(phdr->p_offset);
-
- addr = (char *)phdr->p_vaddr;
- end = ((char *)addr) + phdr->p_memsz;
-
- copy_to_region(addr, phdr->p_filesz);
-
- addr = ((char *)addr) + phdr->p_filesz;
-
- zero_region(addr, end);
-}
-*/
-
-int main(unsigned long stack_start_addr)
-{
- int i;
- //Elf32_Ehdr *pHdr;
-
- file_offset = 0;
-
-#if defined(CONFIG_RTL_819X)
- set_io_port_base(BASE_ADDR);
-#endif
-
-#ifndef __DO_QUIET__
- printf("decompressing kernel:\n");
-#endif
-
-#ifdef CONFIG_RTL8197B_PANA
- extern int is_vmlinux_checksum_ok();
-
- REG32(0xB801900C) = REG32(0xB801900C) & (~0x0400); //SYSSR, AllSoftwareReady=0
- if (!is_vmlinux_checksum_ok()) {
- printf("Linux image corrupted!\n");
- for (;;);
- }
-#endif
-
-#ifndef BZ2_COMPRESS
- decompress_kernel(UNCOMPRESS_OUT, stack_start_addr+4096, FREEMEM_END, 0);
-#else
- decompress_kernel(UNCOMPRESS_OUT, stack_start_addr+4096, FREEMEM_END, 0);
-#endif
-
-#ifndef __DO_QUIET__
- printf("done decompressing kernel.\n");
-#endif
-
- flush_cache();
-
- printf("start address: 0x%08x\n", kernelStartAddr);
- start_kernel(kernelStartAddr);
- //start_kernel(0x80000000);
-}
diff --git a/target/linux/realtek/files/rtkload/hfload.h b/target/linux/realtek/files/rtkload/hfload.h
deleted file mode 100644
index 6d15ec670..000000000
--- a/target/linux/realtek/files/rtkload/hfload.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* hfload.h
- *
- * This file is subject to the terms and conditions of the GNU
- * General Public License. See the file "COPYING" in the main
- * directory of this archive for more details.
- *
- * Copyright (C) 2000, Jay Carlson
- */
-
-#ifndef HELLOAD_H
-#define HELLOAD_H
-
-//sc_yang
-//#include <linux/config.h>
-#include <linux/autoconf.h>
-#ifdef EMBEDDED
-#include <linux/string.h>
-#define printf prom_printf
-#else
-#include <string.h>
-#endif
-
-
-#ifdef LANGUAGE_C
-extern int file_offset;
-#endif
-
-
-#ifdef COMPRESSED_KERNEL
- #define UNCOMPRESS_OUT 0x80000000
-#if 0
-#ifndef boot32
- #define FREEMEM_START 0x80680000
- #define FREEMEM_END 0x80800000
-#else
- #define FREEMEM_START 0x80a00000
- #define FREEMEM_END 0x81000000
-#endif
-#endif //sc_yang
-//Brad comment, since rtl865x platform use 16M && define CONFIG_RTL_GW_8M
-//#if (defined(CONFIG_RTL8186_AP) || defined(CONFIG_RTL8186_GW_8M) || defined(CONFIG_RTL8186_KB))
-#if (defined(CONFIG_RTL8186_AP) || defined(CONFIG_RTL8186_KB) || defined(CONFIG_RTL865X_PANAHOST))
- #define FREEMEM_END 0x80800000
-#else
- #define FREEMEM_END 0x81000000
-#endif
-#endif
-
-#ifdef CONFIG_RTK_VOIP
- #undef FREEMEM_END
- #define FREEMEM_END 0x82000000
-#endif
-
-// david -----------------
-#ifdef BZ2_COMPRESS
- #define prom_printf
- #undef FREEMEM_START
- #define FREEMEM_START 0x80500000
-#endif
-//-----------------------
-
-#endif
-
diff --git a/target/linux/realtek/files/rtkload/inflate.c b/target/linux/realtek/files/rtkload/inflate.c
deleted file mode 100644
index 6db6e98d1..000000000
--- a/target/linux/realtek/files/rtkload/inflate.c
+++ /dev/null
@@ -1,1212 +0,0 @@
-#define DEBG(x)
-#define DEBG1(x)
-/* inflate.c -- Not copyrighted 1992 by Mark Adler
- version c10p1, 10 January 1993 */
-
-/*
- * Adapted for booting Linux by Hannu Savolainen 1993
- * based on gzip-1.0.3
- *
- * Nicolas Pitre <nico@cam.org>, 1999/04/14 :
- * Little mods for all variable to reside either into rodata or bss segments
- * by marking constant variables with 'const' and initializing all the others
- * at run-time only. This allows for the kernel uncompressor to run
- * directly from Flash or ROM memory on embedded systems.
- */
-
-/*
- Inflate deflated (PKZIP's method 8 compressed) data. The compression
- method searches for as much of the current string of bytes (up to a
- length of 258) in the previous 32 K bytes. If it doesn't find any
- matches (of at least length 3), it codes the next byte. Otherwise, it
- codes the length of the matched string and its distance backwards from
- the current position. There is a single Huffman code that codes both
- single bytes (called "literals") and match lengths. A second Huffman
- code codes the distance information, which follows a length code. Each
- length or distance code actually represents a base value and a number
- of "extra" (sometimes zero) bits to get to add to the base value. At
- the end of each deflated block is a special end-of-block (EOB) literal/
- length code. The decoding process is basically: get a literal/length
- code; if EOB then done; if a literal, emit the decoded byte; if a
- length then get the distance and emit the referred-to bytes from the
- sliding window of previously emitted data.
-
- There are (currently) three kinds of inflate blocks: stored, fixed, and
- dynamic. The compressor deals with some chunk of data at a time, and
- decides which method to use on a chunk-by-chunk basis. A chunk might
- typically be 32 K or 64 K. If the chunk is incompressible, then the
- "stored" method is used. In this case, the bytes are simply stored as
- is, eight bits per byte, with none of the above coding. The bytes are
- preceded by a count, since there is no longer an EOB code.
-
- If the data is compressible, then either the fixed or dynamic methods
- are used. In the dynamic method, the compressed data is preceded by
- an encoding of the literal/length and distance Huffman codes that are
- to be used to decode this block. The representation is itself Huffman
- coded, and so is preceded by a description of that code. These code
- descriptions take up a little space, and so for small blocks, there is
- a predefined set of codes, called the fixed codes. The fixed method is
- used if the block codes up smaller that way (usually for quite small
- chunks), otherwise the dynamic method is used. In the latter case, the
- codes are customized to the probabilities in the current block, and so
- can code it much better than the pre-determined fixed codes.
-
- The Huffman codes themselves are decoded using a multi-level table
- lookup, in order to maximize the speed of decoding plus the speed of
- building the decoding tables. See the comments below that precede the
- lbits and dbits tuning parameters.
- */
-
-
-/*
- Notes beyond the 1.93a appnote.txt:
-
- 1. Distance pointers never point before the beginning of the output
- stream.
- 2. Distance pointers can point back across blocks, up to 32k away.
- 3. There is an implied maximum of 7 bits for the bit length table and
- 15 bits for the actual data.
- 4. If only one code exists, then it is encoded using one bit. (Zero
- would be more efficient, but perhaps a little confusing.) If two
- codes exist, they are coded using one bit each (0 and 1).
- 5. There is no way of sending zero distance codes--a dummy must be
- sent if there are none. (History: a pre 2.0 version of PKZIP would
- store blocks with no distance codes, but this was discovered to be
- too harsh a criterion.) Valid only for 1.93a. 2.04c does allow
- zero distance codes, which is sent as one code of zero bits in
- length.
- 6. There are up to 286 literal/length codes. Code 256 represents the
- end-of-block. Note however that the static length tree defines
- 288 codes just to fill out the Huffman codes. Codes 286 and 287
- cannot be used though, since there is no length base or extra bits
- defined for them. Similarly, there are up to 30 distance codes.
- However, static trees define 32 codes (all 5 bits) to fill out the
- Huffman codes, but the last two had better not show up in the data.
- 7. Unzip can check dynamic Huffman blocks for complete code sets.
- The exception is that a single code would not be complete (see #4).
- 8. The five bits following the block type is really the number of
- literal codes sent minus 257.
- 9. Length codes 8,16,16 are interpreted as 13 length codes of 8 bits
- (1+6+6). Therefore, to output three times the length, you output
- three codes (1+1+1), whereas to output four times the same length,
- you only need two codes (1+3). Hmm.
- 10. In the tree reconstruction algorithm, Code = Code + Increment
- only if BitLength(i) is not zero. (Pretty obvious.)
- 11. Correction: 4 Bits: # of Bit Length codes - 4 (4 - 19)
- 12. Note: length code 284 can represent 227-258, but length code 285
- really is 258. The last length deserves its own, short code
- since it gets used a lot in very redundant files. The length
- 258 is special since 258 - 3 (the min match length) is 255.
- 13. The literal/length and distance code bit lengths are read as a
- single stream of lengths. It is possible (and advantageous) for
- a repeat code (16, 17, or 18) to go across the boundary between
- the two sets of lengths.
- */
-#include <linux/compiler.h>
-
-#ifdef RCSID
-static char rcsid[] = "#Id: inflate.c,v 0.14 1993/06/10 13:27:04 jloup Exp #";
-#endif
-
-#ifndef STATIC
-
-#if defined(STDC_HEADERS) || defined(HAVE_STDLIB_H)
-# include <sys/types.h>
-# include <stdlib.h>
-#endif
-
-#include "gzip.h"
-#define STATIC
-#endif /* !STATIC */
-
-#ifndef INIT
-#define INIT
-#endif
-
-#define slide window
-
-/* Huffman code lookup table entry--this entry is four bytes for machines
- that have 16-bit pointers (e.g. PC's in the small or medium model).
- Valid extra bits are 0..13. e == 15 is EOB (end of block), e == 16
- means that v is a literal, 16 < e < 32 means that v is a pointer to
- the next table, which codes e - 16 bits, and lastly e == 99 indicates
- an unused code. If a code with e == 99 is looked up, this implies an
- error in the data. */
-struct huft {
- uch e; /* number of extra bits or operation */
- uch b; /* number of bits in this code or subcode */
- union {
- ush n; /* literal, length base, or distance base */
- struct huft *t; /* pointer to next level of table */
- } v;
-};
-
-
-/* Function prototypes */
-STATIC int INIT huft_build OF((unsigned *, unsigned, unsigned,
- const ush *, const ush *, struct huft **, int *));
-STATIC int INIT huft_free OF((struct huft *));
-STATIC int INIT inflate_codes OF((struct huft *, struct huft *, int, int));
-STATIC int INIT inflate_stored OF((void));
-STATIC int INIT inflate_fixed OF((void));
-STATIC int INIT inflate_dynamic OF((void));
-STATIC int INIT inflate_block OF((int *));
-STATIC int INIT inflate OF((void));
-
-
-/* The inflate algorithm uses a sliding 32 K byte window on the uncompressed
- stream to find repeated byte strings. This is implemented here as a
- circular buffer. The index is updated simply by incrementing and then
- ANDing with 0x7fff (32K-1). */
-/* It is left to other modules to supply the 32 K area. It is assumed
- to be usable as if it were declared "uch slide[32768];" or as just
- "uch *slide;" and then malloc'ed in the latter case. The definition
- must be in unzip.h, included above. */
-/* unsigned wp; current position in slide */
-#define wp outcnt
-#define flush_output(w) (wp=(w),flush_window())
-
-/* Tables for deflate from PKZIP's appnote.txt. */
-static const unsigned border[] = { /* Order of the bit length code lengths */
- 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
-static const ush cplens[] = { /* Copy lengths for literal codes 257..285 */
- 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
- 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
- /* note: see note #13 above about the 258 in this list. */
-static const ush cplext[] = { /* Extra bits for literal codes 257..285 */
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,
- 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 99, 99}; /* 99==invalid */
-static const ush cpdist[] = { /* Copy offsets for distance codes 0..29 */
- 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
- 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
- 8193, 12289, 16385, 24577};
-static const ush cpdext[] = { /* Extra bits for distance codes */
- 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,
- 7, 7, 8, 8, 9, 9, 10, 10, 11, 11,
- 12, 12, 13, 13};
-
-
-
-/* Macros for inflate() bit peeking and grabbing.
- The usage is:
-
- NEEDBITS(j)
- x = b & mask_bits[j];
- DUMPBITS(j)
-
- where NEEDBITS makes sure that b has at least j bits in it, and
- DUMPBITS removes the bits from b. The macros use the variable k
- for the number of bits in b. Normally, b and k are register
- variables for speed, and are initialized at the beginning of a
- routine that uses these macros from a global bit buffer and count.
-
- If we assume that EOB will be the longest code, then we will never
- ask for bits with NEEDBITS that are beyond the end of the stream.
- So, NEEDBITS should not read any more bytes than are needed to
- meet the request. Then no bytes need to be "returned" to the buffer
- at the end of the last block.
-
- However, this assumption is not true for fixed blocks--the EOB code
- is 7 bits, but the other literal/length codes can be 8 or 9 bits.
- (The EOB code is shorter than other codes because fixed blocks are
- generally short. So, while a block always has an EOB, many other
- literal/length codes have a significantly lower probability of
- showing up at all.) However, by making the first table have a
- lookup of seven bits, the EOB code will be found in that first
- lookup, and so will not require that too many bits be pulled from
- the stream.
- */
-
-STATIC ulg bb; /* bit buffer */
-STATIC unsigned bk; /* bits in bit buffer */
-
-STATIC const ush mask_bits[] = {
- 0x0000,
- 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff,
- 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff
-};
-
-#define NEXTBYTE() ({ int v = get_byte(); if (v < 0) goto underrun; (uch)v; })
-#define NEEDBITS(n) {while(k<(n)){b|=((ulg)NEXTBYTE())<<k;k+=8;}}
-#define DUMPBITS(n) {b>>=(n);k-=(n);}
-
-
-/*
- Huffman code decoding is performed using a multi-level table lookup.
- The fastest way to decode is to simply build a lookup table whose
- size is determined by the longest code. However, the time it takes
- to build this table can also be a factor if the data being decoded
- is not very long. The most common codes are necessarily the
- shortest codes, so those codes dominate the decoding time, and hence
- the speed. The idea is you can have a shorter table that decodes the
- shorter, more probable codes, and then point to subsidiary tables for
- the longer codes. The time it costs to decode the longer codes is
- then traded against the time it takes to make longer tables.
-
- This results of this trade are in the variables lbits and dbits
- below. lbits is the number of bits the first level table for literal/
- length codes can decode in one step, and dbits is the same thing for
- the distance codes. Subsequent tables are also less than or equal to
- those sizes. These values may be adjusted either when all of the
- codes are shorter than that, in which case the longest code length in
- bits is used, or when the shortest code is *longer* than the requested
- table size, in which case the length of the shortest code in bits is
- used.
-
- There are two different values for the two tables, since they code a
- different number of possibilities each. The literal/length table
- codes 286 possible values, or in a flat code, a little over eight
- bits. The distance table codes 30 possible values, or a little less
- than five bits, flat. The optimum values for speed end up being
- about one bit more than those, so lbits is 8+1 and dbits is 5+1.
- The optimum values may differ though from machine to machine, and
- possibly even between compilers. Your mileage may vary.
- */
-
-
-STATIC const int lbits = 9; /* bits in base literal/length lookup table */
-STATIC const int dbits = 6; /* bits in base distance lookup table */
-
-
-/* If BMAX needs to be larger than 16, then h and x[] should be ulg. */
-#define BMAX 16 /* maximum bit length of any code (16 for explode) */
-#define N_MAX 288 /* maximum number of codes in any set */
-
-
-STATIC unsigned hufts; /* track memory usage */
-
-
-STATIC int INIT huft_build(
- unsigned *b, /* code lengths in bits (all assumed <= BMAX) */
- unsigned n, /* number of codes (assumed <= N_MAX) */
- unsigned s, /* number of simple-valued codes (0..s-1) */
- const ush *d, /* list of base values for non-simple codes */
- const ush *e, /* list of extra bits for non-simple codes */
- struct huft **t, /* result: starting table */
- int *m /* maximum lookup bits, returns actual */
- )
-/* Given a list of code lengths and a maximum table size, make a set of
- tables to decode that set of codes. Return zero on success, one if
- the given code set is incomplete (the tables are still built in this
- case), two if the input is invalid (all zero length codes or an
- oversubscribed set of lengths), and three if not enough memory. */
-{
- unsigned a; /* counter for codes of length k */
- unsigned c[BMAX+1]; /* bit length count table */
- unsigned f; /* i repeats in table every f entries */
- int g; /* maximum code length */
- int h; /* table level */
- register unsigned i; /* counter, current code */
- register unsigned j; /* counter */
- register int k; /* number of bits in current code */
- int l; /* bits per table (returned in m) */
- register unsigned *p; /* pointer into c[], b[], or v[] */
- register struct huft *q; /* points to current table */
- struct huft r; /* table entry for structure assignment */
- struct huft *u[BMAX]; /* table stack */
- unsigned v[N_MAX]; /* values in order of bit length */
- register int w; /* bits before this table == (l * h) */
- unsigned x[BMAX+1]; /* bit offsets, then code stack */
- unsigned *xp; /* pointer into x */
- int y; /* number of dummy codes added */
- unsigned z; /* number of entries in current table */
-
-DEBG("huft1 ");
-
- /* Generate counts for each bit length */
- memzero(c, sizeof(c));
- p = b; i = n;
- do {
- Tracecv(*p, (stderr, (n-i >= ' ' && n-i <= '~' ? "%c %d\n" : "0x%x %d\n"),
- n-i, *p));
- c[*p]++; /* assume all entries <= BMAX */
- p++; /* Can't combine with above line (Solaris bug) */
- } while (--i);
- if (c[0] == n) /* null input--all zero length codes */
- {
- *t = (struct huft *)NULL;
- *m = 0;
- return 2;
- }
-
-DEBG("huft2 ");
-
- /* Find minimum and maximum length, bound *m by those */
- l = *m;
- for (j = 1; j <= BMAX; j++)
- if (c[j])
- break;
- k = j; /* minimum code length */
- if ((unsigned)l < j)
- l = j;
- for (i = BMAX; i; i--)
- if (c[i])
- break;
- g = i; /* maximum code length */
- if ((unsigned)l > i)
- l = i;
- *m = l;
-
-DEBG("huft3 ");
-
- /* Adjust last length count to fill out codes, if needed */
- for (y = 1 << j; j < i; j++, y <<= 1)
- if ((y -= c[j]) < 0)
- return 2; /* bad input: more codes than bits */
- if ((y -= c[i]) < 0)
- return 2;
- c[i] += y;
-
-DEBG("huft4 ");
-
- /* Generate starting offsets into the value table for each length */
- x[1] = j = 0;
- p = c + 1; xp = x + 2;
- while (--i) { /* note that i == g from above */
- *xp++ = (j += *p++);
- }
-
-DEBG("huft5 ");
-
- /* Make a table of values in order of bit lengths */
- p = b; i = 0;
- do {
- if ((j = *p++) != 0)
- v[x[j]++] = i;
- } while (++i < n);
- n = x[g]; /* set n to length of v */
-
-DEBG("h6 ");
-
- /* Generate the Huffman codes and for each, make the table entries */
- x[0] = i = 0; /* first Huffman code is zero */
- p = v; /* grab values in bit order */
- h = -1; /* no tables yet--level -1 */
- w = -l; /* bits decoded == (l * h) */
- u[0] = (struct huft *)NULL; /* just to keep compilers happy */
- q = (struct huft *)NULL; /* ditto */
- z = 0; /* ditto */
-DEBG("h6a ");
-
- /* go through the bit lengths (k already is bits in shortest code) */
- for (; k <= g; k++)
- {
-DEBG("h6b ");
- a = c[k];
- while (a--)
- {
-DEBG("h6b1 ");
- /* here i is the Huffman code of length k bits for value *p */
- /* make tables up to required level */
- while (k > w + l)
- {
-DEBG1("1 ");
- h++;
- w += l; /* previous table always l bits */
-
- /* compute minimum size table less than or equal to l bits */
- z = (z = g - w) > (unsigned)l ? l : z; /* upper limit on table size */
- if ((f = 1 << (j = k - w)) > a + 1) /* try a k-w bit table */
- { /* too few codes for k-w bit table */
-DEBG1("2 ");
- f -= a + 1; /* deduct codes from patterns left */
- xp = c + k;
- if (j < z)
- while (++j < z) /* try smaller tables up to z bits */
- {
- if ((f <<= 1) <= *++xp)
- break; /* enough codes to use up j bits */
- f -= *xp; /* else deduct codes from patterns */
- }
- }
-DEBG1("3 ");
- z = 1 << j; /* table entries for j-bit table */
-
- /* allocate and link in new table */
- if ((q = (struct huft *)malloc((z + 1)*sizeof(struct huft))) ==
- (struct huft *)NULL)
- {
- if (h)
- huft_free(u[0]);
- return 3; /* not enough memory */
- }
-DEBG1("4 ");
- hufts += z + 1; /* track memory usage */
- *t = q + 1; /* link to list for huft_free() */
- *(t = &(q->v.t)) = (struct huft *)NULL;
- u[h] = ++q; /* table starts after link */
-
-DEBG1("5 ");
- /* connect to last table, if there is one */
- if (h)
- {
- x[h] = i; /* save pattern for backing up */
- r.b = (uch)l; /* bits to dump before this table */
- r.e = (uch)(16 + j); /* bits in this table */
- r.v.t = q; /* pointer to this table */
- j = i >> (w - l); /* (get around Turbo C bug) */
- u[h-1][j] = r; /* connect to last table */
- }
-DEBG1("6 ");
- }
-DEBG("h6c ");
-
- /* set up table entry in r */
- r.b = (uch)(k - w);
- if (p >= v + n)
- r.e = 99; /* out of values--invalid code */
- else if (*p < s)
- {
- r.e = (uch)(*p < 256 ? 16 : 15); /* 256 is end-of-block code */
- r.v.n = (ush)(*p); /* simple code is just the value */
- p++; /* one compiler does not like *p++ */
- }
- else
- {
- r.e = (uch)e[*p - s]; /* non-simple--look up in lists */
- r.v.n = d[*p++ - s];
- }
-DEBG("h6d ");
-
- /* fill code-like entries with r */
- f = 1 << (k - w);
- for (j = i >> w; j < z; j += f)
- q[j] = r;
-
- /* backwards increment the k-bit code i */
- for (j = 1 << (k - 1); i & j; j >>= 1)
- i ^= j;
- i ^= j;
-
- /* backup over finished tables */
- while ((i & ((1 << w) - 1)) != x[h])
- {
- h--; /* don't need to update q */
- w -= l;
- }
-DEBG("h6e ");
- }
-DEBG("h6f ");
- }
-
-DEBG("huft7 ");
-
- /* Return true (1) if we were given an incomplete table */
- return y != 0 && g != 1;
-}
-
-
-
-STATIC int INIT huft_free(
- struct huft *t /* table to free */
- )
-/* Free the malloc'ed tables built by huft_build(), which makes a linked
- list of the tables it made, with the links in a dummy first entry of
- each table. */
-{
- register struct huft *p, *q;
-
-
- /* Go through linked list, freeing from the malloced (t[-1]) address. */
- p = t;
- while (p != (struct huft *)NULL)
- {
- q = (--p)->v.t;
- free((char*)p);
- p = q;
- }
- return 0;
-}
-
-
-STATIC int INIT inflate_codes(
- struct huft *tl, /* literal/length decoder tables */
- struct huft *td, /* distance decoder tables */
- int bl, /* number of bits decoded by tl[] */
- int bd /* number of bits decoded by td[] */
- )
-/* inflate (decompress) the codes in a deflated (compressed) block.
- Return an error code or zero if it all goes ok. */
-{
- register unsigned e; /* table entry flag/number of extra bits */
- unsigned n, d; /* length and index for copy */
- unsigned w; /* current window position */
- struct huft *t; /* pointer to table entry */
- unsigned ml, md; /* masks for bl and bd bits */
- register ulg b; /* bit buffer */
- register unsigned k; /* number of bits in bit buffer */
-
-
- /* make local copies of globals */
- b = bb; /* initialize bit buffer */
- k = bk;
- w = wp; /* initialize window position */
-
- /* inflate the coded data */
- ml = mask_bits[bl]; /* precompute masks for speed */
- md = mask_bits[bd];
- for (;;) /* do until end of block */
- {
- NEEDBITS((unsigned)bl)
- if ((e = (t = tl + ((unsigned)b & ml))->e) > 16)
- do {
- if (e == 99)
- return 1;
- DUMPBITS(t->b)
- e -= 16;
- NEEDBITS(e)
- } while ((e = (t = t->v.t + ((unsigned)b & mask_bits[e]))->e) > 16);
- DUMPBITS(t->b)
- if (e == 16) /* then it's a literal */
- {
- slide[w++] = (uch)t->v.n;
- Tracevv((stderr, "%c", slide[w-1]));
- if (w == WSIZE)
- {
- flush_output(w);
- w = 0;
- }
- }
- else /* it's an EOB or a length */
- {
- /* exit if end of block */
- if (e == 15)
- break;
-
- /* get length of block to copy */
- NEEDBITS(e)
- n = t->v.n + ((unsigned)b & mask_bits[e]);
- DUMPBITS(e);
-
- /* decode distance of block to copy */
- NEEDBITS((unsigned)bd)
- if ((e = (t = td + ((unsigned)b & md))->e) > 16)
- do {
- if (e == 99)
- return 1;
- DUMPBITS(t->b)
- e -= 16;
- NEEDBITS(e)
- } while ((e = (t = t->v.t + ((unsigned)b & mask_bits[e]))->e) > 16);
- DUMPBITS(t->b)
- NEEDBITS(e)
- d = w - t->v.n - ((unsigned)b & mask_bits[e]);
- DUMPBITS(e)
- Tracevv((stderr,"\\[%d,%d]", w-d, n));
-
- /* do the copy */
- do {
- n -= (e = (e = WSIZE - ((d &= WSIZE-1) > w ? d : w)) > n ? n : e);
-#if !defined(NOMEMCPY) && !defined(DEBUG)
- if (w - d >= e) /* (this test assumes unsigned comparison) */
- {
- memcpy(slide + w, slide + d, e);
- w += e;
- d += e;
- }
- else /* do it slow to avoid memcpy() overlap */
-#endif /* !NOMEMCPY */
- do {
- slide[w++] = slide[d++];
- Tracevv((stderr, "%c", slide[w-1]));
- } while (--e);
- if (w == WSIZE)
- {
- flush_output(w);
- w = 0;
- }
- } while (n);
- }
- }
-
-
- /* restore the globals from the locals */
- wp = w; /* restore global window pointer */
- bb = b; /* restore global bit buffer */
- bk = k;
-
- /* done */
- return 0;
-
- underrun:
- return 4; /* Input underrun */
-}
-
-
-
-STATIC int INIT inflate_stored(void)
-/* "decompress" an inflated type 0 (stored) block. */
-{
- unsigned n; /* number of bytes in block */
- unsigned w; /* current window position */
- register ulg b; /* bit buffer */
- register unsigned k; /* number of bits in bit buffer */
-
-DEBG("<stor");
-
- /* make local copies of globals */
- b = bb; /* initialize bit buffer */
- k = bk;
- w = wp; /* initialize window position */
-
-
- /* go to byte boundary */
- n = k & 7;
- DUMPBITS(n);
-
-
- /* get the length and its complement */
- NEEDBITS(16)
- n = ((unsigned)b & 0xffff);
- DUMPBITS(16)
- NEEDBITS(16)
- if (n != (unsigned)((~b) & 0xffff))
- return 1; /* error in compressed data */
- DUMPBITS(16)
-
-
- /* read and output the compressed data */
- while (n--)
- {
- NEEDBITS(8)
- slide[w++] = (uch)b;
- if (w == WSIZE)
- {
- flush_output(w);
- w = 0;
- }
- DUMPBITS(8)
- }
-
-
- /* restore the globals from the locals */
- wp = w; /* restore global window pointer */
- bb = b; /* restore global bit buffer */
- bk = k;
-
- DEBG(">");
- return 0;
-
- underrun:
- return 4; /* Input underrun */
-}
-
-
-/*
- * We use `noinline' here to prevent gcc-3.5 from using too much stack space
- */
-STATIC int noinline INIT inflate_fixed(void)
-/* decompress an inflated type 1 (fixed Huffman codes) block. We should
- either replace this with a custom decoder, or at least precompute the
- Huffman tables. */
-{
- int i; /* temporary variable */
- struct huft *tl; /* literal/length code table */
- struct huft *td; /* distance code table */
- int bl; /* lookup bits for tl */
- int bd; /* lookup bits for td */
- unsigned l[288]; /* length list for huft_build */
-
-DEBG("<fix");
-
- /* set up literal table */
- for (i = 0; i < 144; i++)
- l[i] = 8;
- for (; i < 256; i++)
- l[i] = 9;
- for (; i < 280; i++)
- l[i] = 7;
- for (; i < 288; i++) /* make a complete, but wrong code set */
- l[i] = 8;
- bl = 7;
- if ((i = huft_build(l, 288, 257, cplens, cplext, &tl, &bl)) != 0)
- return i;
-
-
- /* set up distance table */
- for (i = 0; i < 30; i++) /* make an incomplete code set */
- l[i] = 5;
- bd = 5;
- if ((i = huft_build(l, 30, 0, cpdist, cpdext, &td, &bd)) > 1)
- {
- huft_free(tl);
-
- DEBG(">");
- return i;
- }
-
-
- /* decompress until an end-of-block code */
- if (inflate_codes(tl, td, bl, bd))
- return 1;
-
-
- /* free the decoding tables, return */
- huft_free(tl);
- huft_free(td);
- return 0;
-}
-
-
-/*
- * We use `noinline' here to prevent gcc-3.5 from using too much stack space
- */
-STATIC int noinline INIT inflate_dynamic(void)
-/* decompress an inflated type 2 (dynamic Huffman codes) block. */
-{
- int i; /* temporary variables */
- unsigned j;
- unsigned l; /* last length */
- unsigned m; /* mask for bit lengths table */
- unsigned n; /* number of lengths to get */
- struct huft *tl; /* literal/length code table */
- struct huft *td; /* distance code table */
- int bl; /* lookup bits for tl */
- int bd; /* lookup bits for td */
- unsigned nb; /* number of bit length codes */
- unsigned nl; /* number of literal/length codes */
- unsigned nd; /* number of distance codes */
-#ifdef PKZIP_BUG_WORKAROUND
- unsigned ll[288+32]; /* literal/length and distance code lengths */
-#else
- unsigned ll[286+30]; /* literal/length and distance code lengths */
-#endif
- register ulg b; /* bit buffer */
- register unsigned k; /* number of bits in bit buffer */
-
-DEBG("<dyn");
-
- /* make local bit buffer */
- b = bb;
- k = bk;
-
-
- /* read in table lengths */
- NEEDBITS(5)
- nl = 257 + ((unsigned)b & 0x1f); /* number of literal/length codes */
- DUMPBITS(5)
- NEEDBITS(5)
- nd = 1 + ((unsigned)b & 0x1f); /* number of distance codes */
- DUMPBITS(5)
- NEEDBITS(4)
- nb = 4 + ((unsigned)b & 0xf); /* number of bit length codes */
- DUMPBITS(4)
-#ifdef PKZIP_BUG_WORKAROUND
- if (nl > 288 || nd > 32)
-#else
- if (nl > 286 || nd > 30)
-#endif
- return 1; /* bad lengths */
-
-DEBG("dyn1 ");
-
- /* read in bit-length-code lengths */
- for (j = 0; j < nb; j++)
- {
- NEEDBITS(3)
- ll[border[j]] = (unsigned)b & 7;
- DUMPBITS(3)
- }
- for (; j < 19; j++)
- ll[border[j]] = 0;
-
-DEBG("dyn2 ");
-
- /* build decoding table for trees--single level, 7 bit lookup */
- bl = 7;
- if ((i = huft_build(ll, 19, 19, NULL, NULL, &tl, &bl)) != 0)
- {
- if (i == 1)
- huft_free(tl);
- return i; /* incomplete code set */
- }
-
-DEBG("dyn3 ");
-
- /* read in literal and distance code lengths */
- n = nl + nd;
- m = mask_bits[bl];
- i = l = 0;
- while ((unsigned)i < n)
- {
- NEEDBITS((unsigned)bl)
- j = (td = tl + ((unsigned)b & m))->b;
- DUMPBITS(j)
- j = td->v.n;
- if (j < 16) /* length of code in bits (0..15) */
- ll[i++] = l = j; /* save last length in l */
- else if (j == 16) /* repeat last length 3 to 6 times */
- {
- NEEDBITS(2)
- j = 3 + ((unsigned)b & 3);
- DUMPBITS(2)
- if ((unsigned)i + j > n)
- return 1;
- while (j--)
- ll[i++] = l;
- }
- else if (j == 17) /* 3 to 10 zero length codes */
- {
- NEEDBITS(3)
- j = 3 + ((unsigned)b & 7);
- DUMPBITS(3)
- if ((unsigned)i + j > n)
- return 1;
- while (j--)
- ll[i++] = 0;
- l = 0;
- }
- else /* j == 18: 11 to 138 zero length codes */
- {
- NEEDBITS(7)
- j = 11 + ((unsigned)b & 0x7f);
- DUMPBITS(7)
- if ((unsigned)i + j > n)
- return 1;
- while (j--)
- ll[i++] = 0;
- l = 0;
- }
- }
-
-DEBG("dyn4 ");
-
- /* free decoding table for trees */
- huft_free(tl);
-
-DEBG("dyn5 ");
-
- /* restore the global bit buffer */
- bb = b;
- bk = k;
-
-DEBG("dyn5a ");
-
- /* build the decoding tables for literal/length and distance codes */
- bl = lbits;
- if ((i = huft_build(ll, nl, 257, cplens, cplext, &tl, &bl)) != 0)
- {
-DEBG("dyn5b ");
- if (i == 1) {
- error("incomplete literal tree");
- huft_free(tl);
- }
- return i; /* incomplete code set */
- }
-DEBG("dyn5c ");
- bd = dbits;
- if ((i = huft_build(ll + nl, nd, 0, cpdist, cpdext, &td, &bd)) != 0)
- {
-DEBG("dyn5d ");
- if (i == 1) {
- error("incomplete distance tree");
-#ifdef PKZIP_BUG_WORKAROUND
- i = 0;
- }
-#else
- huft_free(td);
- }
- huft_free(tl);
- return i; /* incomplete code set */
-#endif
- }
-
-DEBG("dyn6 ");
-
- /* decompress until an end-of-block code */
- if (inflate_codes(tl, td, bl, bd))
- return 1;
-
-DEBG("dyn7 ");
-
- /* free the decoding tables, return */
- huft_free(tl);
- huft_free(td);
-
- DEBG(">");
- return 0;
-
- underrun:
- return 4; /* Input underrun */
-}
-
-
-
-STATIC int INIT inflate_block(
- int *e /* last block flag */
- )
-/* decompress an inflated block */
-{
- unsigned t; /* block type */
- register ulg b; /* bit buffer */
- register unsigned k; /* number of bits in bit buffer */
-
- DEBG("<blk");
-
- /* make local bit buffer */
- b = bb;
- k = bk;
-
-
- /* read in last block bit */
- NEEDBITS(1)
- *e = (int)b & 1;
- DUMPBITS(1)
-
-
- /* read in block type */
- NEEDBITS(2)
- t = (unsigned)b & 3;
- DUMPBITS(2)
-
-
- /* restore the global bit buffer */
- bb = b;
- bk = k;
-
- /* inflate that block type */
- if (t == 2)
- return inflate_dynamic();
- if (t == 0)
- return inflate_stored();
- if (t == 1)
- return inflate_fixed();
-
- DEBG(">");
-
- /* bad block type */
- return 2;
-
- underrun:
- return 4; /* Input underrun */
-}
-
-
-
-STATIC int INIT inflate(void)
-/* decompress an inflated entry */
-{
- int e; /* last block flag */
- int r; /* result code */
- unsigned h; /* maximum struct huft's malloc'ed */
- void *ptr;
-
- /* initialize window, bit buffer */
- wp = 0;
- bk = 0;
- bb = 0;
-
-
- /* decompress until the last block */
- h = 0;
- do {
- hufts = 0;
- gzip_mark(&ptr);
- if ((r = inflate_block(&e)) != 0) {
- gzip_release(&ptr);
- return r;
- }
- gzip_release(&ptr);
- if (hufts > h)
- h = hufts;
- } while (!e);
-
- /* Undo too much lookahead. The next read will be byte aligned so we
- * can discard unused bits in the last meaningful byte.
- */
- while (bk >= 8) {
- bk -= 8;
- inptr--;
- }
-
- /* flush out slide */
- flush_output(wp);
-
-
- /* return success */
-#ifdef DEBUG
- fprintf(stderr, "<%u> ", h);
-#endif /* DEBUG */
- return 0;
-}
-
-/**********************************************************************
- *
- * The following are support routines for inflate.c
- *
- **********************************************************************/
-
-static ulg crc_32_tab[256];
-static ulg crc; /* initialized in makecrc() so it'll reside in bss */
-#define CRC_VALUE (crc ^ 0xffffffffUL)
-
-/*
- * Code to compute the CRC-32 table. Borrowed from
- * gzip-1.0.3/makecrc.c.
- */
-
-static void INIT
-makecrc(void)
-{
-/* Not copyrighted 1990 Mark Adler */
-
- unsigned long c; /* crc shift register */
- unsigned long e; /* polynomial exclusive-or pattern */
- int i; /* counter for all possible eight bit values */
- int k; /* byte being shifted into crc apparatus */
-
- /* terms of polynomial defining this crc (except x^32): */
- static const int p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26};
-
- /* Make exclusive-or pattern from polynomial */
- e = 0;
- for (i = 0; i < sizeof(p)/sizeof(int); i++)
- e |= 1L << (31 - p[i]);
-
- crc_32_tab[0] = 0;
-
- for (i = 1; i < 256; i++)
- {
- c = 0;
- for (k = i | 256; k != 1; k >>= 1)
- {
- c = c & 1 ? (c >> 1) ^ e : c >> 1;
- if (k & 1)
- c ^= e;
- }
- crc_32_tab[i] = c;
- }
-
- /* this is initialized here so this code could reside in ROM */
- crc = (ulg)0xffffffffUL; /* shift register contents */
-}
-
-/* gzip flag byte */
-#define ASCII_FLAG 0x01 /* bit 0 set: file probably ASCII text */
-#define CONTINUATION 0x02 /* bit 1 set: continuation of multi-part gzip file */
-#define EXTRA_FIELD 0x04 /* bit 2 set: extra field present */
-#define ORIG_NAME 0x08 /* bit 3 set: original file name present */
-#define COMMENT 0x10 /* bit 4 set: file comment present */
-#define ENCRYPTED 0x20 /* bit 5 set: file is encrypted */
-#define RESERVED 0xC0 /* bit 6,7: reserved */
-
-/*
- * Do the uncompression!
- */
-static int INIT gunzip(void)
-{
- uch flags;
- unsigned char magic[2]; /* magic header */
- char method;
- ulg orig_crc = 0; /* original crc */
- ulg orig_len = 0; /* original uncompressed length */
- int res;
-
- magic[0] = NEXTBYTE();
- magic[1] = NEXTBYTE();
- method = NEXTBYTE();
-
- if (magic[0] != 037 ||
- ((magic[1] != 0213) && (magic[1] != 0236))) {
- error("bad gzip magic numbers");
- return -1;
- }
-
- /* We only support method #8, DEFLATED */
- if (method != 8) {
- error("internal error, invalid method");
- return -1;
- }
-
- flags = (uch)get_byte();
- if ((flags & ENCRYPTED) != 0) {
- error("Input is encrypted");
- return -1;
- }
- if ((flags & CONTINUATION) != 0) {
- error("Multi part input");
- return -1;
- }
- if ((flags & RESERVED) != 0) {
- error("Input has invalid flags");
- return -1;
- }
- NEXTBYTE(); /* Get timestamp */
- NEXTBYTE();
- NEXTBYTE();
- NEXTBYTE();
-
- (void)NEXTBYTE(); /* Ignore extra flags for the moment */
- (void)NEXTBYTE(); /* Ignore OS type for the moment */
-
- if ((flags & EXTRA_FIELD) != 0) {
- unsigned len = (unsigned)NEXTBYTE();
- len |= ((unsigned)NEXTBYTE())<<8;
- while (len--) (void)NEXTBYTE();
- }
-
- /* Get original file name if it was truncated */
- if ((flags & ORIG_NAME) != 0) {
- /* Discard the old name */
- while (NEXTBYTE() != 0) /* null */ ;
- }
-
- /* Discard file comment if any */
- if ((flags & COMMENT) != 0) {
- while (NEXTBYTE() != 0) /* null */ ;
- }
-
- /* Decompress */
- if ((res = inflate())) {
- switch (res) {
- case 0:
- break;
- case 1:
- error("invalid compressed format (err=1)");
- break;
- case 2:
- error("invalid compressed format (err=2)");
- break;
- case 3:
- error("out of memory");
- break;
- case 4:
- error("out of input data");
- break;
- default:
- error("invalid compressed format (other)");
- }
- return -1;
- }
-
- /* Get the crc and original length */
- /* crc32 (see algorithm.doc)
- * uncompressed input size modulo 2^32
- */
- orig_crc = (ulg) NEXTBYTE();
- orig_crc |= (ulg) NEXTBYTE() << 8;
- orig_crc |= (ulg) NEXTBYTE() << 16;
- orig_crc |= (ulg) NEXTBYTE() << 24;
-
- orig_len = (ulg) NEXTBYTE();
- orig_len |= (ulg) NEXTBYTE() << 8;
- orig_len |= (ulg) NEXTBYTE() << 16;
- orig_len |= (ulg) NEXTBYTE() << 24;
-
- /* Validate decompression */
- if (orig_crc != CRC_VALUE) {
- error("crc error");
- return -1;
- }
- if (orig_len != bytes_out) {
- error("length error");
- return -1;
- }
- return 0;
-
- underrun: /* NEXTBYTE() goto's here if needed */
- error("out of input data");
- return -1;
-}
-
-
diff --git a/target/linux/realtek/files/rtkload/ld-emu.script b/target/linux/realtek/files/rtkload/ld-emu.script
deleted file mode 100644
index f152a18a2..000000000
--- a/target/linux/realtek/files/rtkload/ld-emu.script
+++ /dev/null
@@ -1,56 +0,0 @@
-/* ld.script
- *
- * This file is subject to the terms and conditions of the GNU
- * General Public License. See the file "COPYING" in the main
- * directory of this archive for more details.
- *
- * Copyright (C) 2000, Jay Carlson
- */
-
-OUTPUT_FORMAT("elf32-littlemips")
-OUTPUT_ARCH(mips)
-ENTRY(__start)
-
-/* Someday I'll figure out how this works */
-/* MEMORY { vtboot : ORIGIN = 0x9fc00000, LENGTH = 64k } */
-/* MEMORY { rom : ORIGIN = 0x9fc00000, LENGTH = 2M } */
-
-
-SECTIONS
-{
- /* VT-OS boot rom lives here in real hardware */
- . = 0x9fc00000 ;
- vtboot : { vtboot* }
-
- /* The loader itself */
- . = 0x9fc10000 ;
- .text : { *(.text) }
- .rodata : { *(.rodata) }
-
- . = ALIGN(4);
- /* Compressed kernel ELF image */
- input_data = . ;
- source_memory_start = . ;
- vmlinux : { vmlinux-stripped.gz* }
- input_data_end = . ;
-
- . = ALIGN(4);
- /* Romdisk, if any. An empty file is OK. */
- romdisk_start = . ;
- romdisk : { romdisk* }
- romdisk_end = . ;
-
-
- /* . = 0x80700000 ; */
- /* Oops, second 4M is in the second DRAM bank. Put our BSS at the 7M mark. */
- . = 0x82300000 ; /* emulator */
- /* . = 0x82500000 ; */ /* real hardware */
- .bss : { _bstart = . ; *(.bss) ; *(.sbss) ; *(COMMON) ; _bend = . ; }
-
- /* /DISCARD/ : { *(.reginfo) ; *(.mdebug) ; *(.note) ; *(.comment) *(__ex_table) ; } */
- /DISCARD/ : { *(.reginfo) ; *(.note) ; *(.comment) *(__ex_table) ; }
-
- /* .filler : */
-}
-
-
diff --git a/target/linux/realtek/files/rtkload/ld.script.in b/target/linux/realtek/files/rtkload/ld.script.in
deleted file mode 100644
index 719f3f4d7..000000000
--- a/target/linux/realtek/files/rtkload/ld.script.in
+++ /dev/null
@@ -1,49 +0,0 @@
-/* ld.script
- *
- * This file is subject to the terms and conditions of the GNU
- * General Public License. See the file "COPYING" in the main
- * directory of this archive for more details.
- *
- * Copyright (C) 2000, Jay Carlson
- */
-
-OUTPUT_ARCH(mips)
-ENTRY(__start)
-
-/* Someday I'll figure out how this works */
-/* MEMORY { vtboot : ORIGIN = 0x80400000, LENGTH = 64k } */
-/* MEMORY { rom : ORIGIN = 0x80410000, LENGTH = 2M } */
-
-
-SECTIONS
-{
- /* The loader itself */
- . = LOAD_ADDR;
- .text : { *(.text) }
- .rodata : { *(.rodata) }
-
- . = ALIGN(4);
- /* Compressed kernel ELF image */
-
-
- .data :
- {
- _fdata = . ;
- *(.data)
- . = ALIGN(1024);
- __vmlinux_start = .;
- *(.vmlinux)
- __vmlinux_end = .;
- . = ALIGN(1024);
- CONSTRUCTORS
- }
-
- .bss : { _bstart = . ; *(.bss) ; *(.sbss) ; *(COMMON) ; _bend = . ; }
-
- /* /DISCARD/ : { *(.reginfo) ; *(.mdebug) ; *(.note) ; *(.comment) *(__ex_table) ; } */
- /DISCARD/ : { *(.reginfo) ; *(.note) ; *(.comment) *(__ex_table) ; }
-
- /* .filler : */
-}
-
-
diff --git a/target/linux/realtek/files/rtkload/linux.bin b/target/linux/realtek/files/rtkload/linux.bin
deleted file mode 100644
index 634a47ba2..000000000
--- a/target/linux/realtek/files/rtkload/linux.bin
+++ /dev/null
Binary files differ
diff --git a/target/linux/realtek/files/rtkload/lzma b/target/linux/realtek/files/rtkload/lzma
deleted file mode 100755
index 91f2500d1..000000000
--- a/target/linux/realtek/files/rtkload/lzma
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/sh
-
-LINUX_VERSION=`uname -r | grep 2.4`
-
-echo "$LINUX_VERSION"
-if [ "$LINUX_VERSION" = "" ]; then
-./lzma-26 $1 $2 $3
-elif [ "$LINUX_VERSION" != "" ]; then
-./lzma-24 $1 $2 $3
-else
-echo "can not find LZMA"
-fi
-
diff --git a/target/linux/realtek/files/rtkload/lzma-24 b/target/linux/realtek/files/rtkload/lzma-24
deleted file mode 100755
index 239ce0de9..000000000
--- a/target/linux/realtek/files/rtkload/lzma-24
+++ /dev/null
Binary files differ
diff --git a/target/linux/realtek/files/rtkload/lzma-26 b/target/linux/realtek/files/rtkload/lzma-26
deleted file mode 100755
index 719c6c3f0..000000000
--- a/target/linux/realtek/files/rtkload/lzma-26
+++ /dev/null
Binary files differ
diff --git a/target/linux/realtek/files/rtkload/misc.c b/target/linux/realtek/files/rtkload/misc.c
deleted file mode 100644
index 11bc20830..000000000
--- a/target/linux/realtek/files/rtkload/misc.c
+++ /dev/null
@@ -1,387 +0,0 @@
-/*
- * misc.c
- *
- * This is a collection of several routines from gzip-1.0.3
- * adapted for Linux.
- *
- * malloc by Hannu Savolainen 1993 and Matthias Urlichs 1994
- *
- * Modified for ARM Linux by Russell King
- *
- * Nicolas Pitre <nico@visuaide.com> 1999/04/14 :
- * For this code to run directly from Flash, all constant variables must
- * be marked with 'const' and all other variables initialized at run-time
- * only. This way all non constant variables will end up in the bss segment,
- * which should point to addresses in RAM and cleared to 0 on start.
- * This allows for a much quicker boot time.
- *
- * Stolen for mips loader to handle decompression by Jay Carlson
- * <nop@nop.com> 2000/04/17
- */
-#include <linux/autoconf.h>
-
-// david ------------------
-#ifdef BZ2_COMPRESS
-#define __DO_QUIET__
-#endif
-//-------------------------
-
-extern unsigned long kernelStartAddr;
-unsigned int __machine_arch_type;
-
-#ifndef __DO_QUIET__
-#define puts prom_printf
-#else
-#define puts
-#endif
-#define arch_decomp_wdog()
-#define arch_decomp_setup()
-#define proc_decomp_setup() /* this is where cache flushing, clock, etc lived */
-
-#define memzero(d, count) (memset((d), 0, (count)))
-
-#define __ptr_t void *
-#define NULL ((void *) 0)
-
-typedef unsigned long __u32;
-#define ___swab32(x) \
- ({ \
- __u32 __x = (x); \
- ((__u32)( \
- (((__u32)(__x) & (__u32)0x000000ffUL) << 24) | \
- (((__u32)(__x) & (__u32)0x0000ff00UL) << 8) | \
- (((__u32)(__x) & (__u32)0x00ff0000UL) >> 8) | \
- (((__u32)(__x) & (__u32)0xff000000UL) >> 24) )); \
- })
-
-#define le32_to_cpu(x) ___swab32(x)
-
-
-/*
- * gzip declarations
- */
-#define OF(args) args
-#define STATIC static
-
-typedef unsigned char uch;
-typedef unsigned short ush;
-typedef unsigned long ulg;
-
-#define WSIZE 0x8000 /* Window size must be at least 32k, */
- /* and a power of two */
-
-static uch *inbuf; /* input buffer */
-static uch window[WSIZE]; /* Sliding window buffer */
-static unsigned insize; /* valid bytes in inbuf */
-static unsigned inptr; /* index of next byte to be processed in inbuf */
-static unsigned outcnt; /* bytes in output buffer */
-
-/* gzip flag byte */
-#define ASCII_FLAG 0x01 /* bit 0 set: file probably ascii text */
-#define CONTINUATION 0x02 /* bit 1 set: continuation of multi-part gzip file */
-#define EXTRA_FIELD 0x04 /* bit 2 set: extra field present */
-#define ORIG_NAME 0x08 /* bit 3 set: original file name present */
-#define COMMENT 0x10 /* bit 4 set: file comment present */
-#define ENCRYPTED 0x20 /* bit 5 set: file is encrypted */
-#define RESERVED 0xC0 /* bit 6,7: reserved */
-
-#define get_byte() (inptr < insize ? inbuf[inptr++] : fill_inbuf())
-
-/* Diagnostic functions */
-#ifdef DEBUG
-# define Assert(cond,msg) {if(!(cond)) error(msg);}
-# define Trace(x) fprintf x
-# define Tracev(x) {if (verbose) fprintf x ;}
-# define Tracevv(x) {if (verbose>1) fprintf x ;}
-# define Tracec(c,x) {if (verbose && (c)) fprintf x ;}
-# define Tracecv(c,x) {if (verbose>1 && (c)) fprintf x ;}
-#else
-# define Assert(cond,msg)
-# define Trace(x)
-# define Tracev(x)
-# define Tracevv(x)
-# define Tracec(c,x)
-# define Tracecv(c,x)
-#endif
-
-static int fill_inbuf(void);
-static void flush_window(void);
-static void error(char *m);
-static void gzip_mark(void **);
-static void gzip_release(void **);
-
-extern char __vmlinux_start[];
-extern char __vmlinux_end[];
-
-static uch *output_data;
-static ulg output_ptr;
-static ulg bytes_out;
-
-static void *malloc(int size);
-static void free(void *where);
-static void error(char *m);
-static void gzip_mark(void **);
-static void gzip_release(void **);
-
-/* static void puts(const char *); */
-
-/* extern int end; */
-static ulg free_mem_ptr;
-static ulg free_mem_ptr_end;
-
-#define HEAP_SIZE 0x2000
-
-/* #include "../../../../lib/inflate.c" */
-/* #include "../lib/inflate.c"*/
-
-// david ----------------
-//#include <inflate.c>
-
-#ifndef BZ2_COMPRESS
-#include "inflate.c"
-#else
-#include "../lib/bzip2_inflate.c"
-#endif
-//----------------------
-
-#ifdef CONFIG_RTL8197B_PANA
-int is_vmlinux_checksum_ok(void)
-{
- unsigned long sum = 0;
- //unsigned long *buf = (unsigned long *)(((long)__vmlinux_start)+4);
- //unsigned long image_len = (unsigned long)(__vmlinux_end -__vmlinux_start-4);
- unsigned long *buf = (unsigned long *)(((long)__vmlinux_start)+8);
- unsigned long image_len = (unsigned long)(__vmlinux_end -__vmlinux_start-8);
-
- for (; ((unsigned long)buf)<((unsigned long)__vmlinux_end); buf++)
- sum += *buf;
-
- return ((sum == 0) ? 1 : 0);
-}
-#endif
-
-#ifndef STANDALONE_DEBUG
-static void *malloc(int size)
-{
- void *p;
-
- if (size <0) error("Malloc error\n");
- if (free_mem_ptr <= 0) error("Memory error\n");
-
- free_mem_ptr = (free_mem_ptr + 3) & ~3; /* Align */
-
- p = (void *)free_mem_ptr;
- free_mem_ptr += size;
-
- if (free_mem_ptr >= free_mem_ptr_end)
- error("Out of memory");
- return p;
-}
-
-static void free(void *where)
-{ /* gzip_mark & gzip_release do the free */
-}
-
-static void gzip_mark(void **ptr)
-{
- arch_decomp_wdog();
- *ptr = (void *) free_mem_ptr;
-}
-
-static void gzip_release(void **ptr)
-{
- arch_decomp_wdog();
- free_mem_ptr = (long) *ptr;
-}
-#else
-static void gzip_mark(void **ptr)
-{
-}
-
-static void gzip_release(void **ptr)
-{
-}
-#endif
-
-// david
-#ifndef BZ2_COMPRESS
-/* ===========================================================================
- * Fill the input buffer. This is called only when the buffer is empty
- * and at least one byte is really needed.
- */
-int fill_inbuf(void)
-{
- if (insize != 0)
- error("ran out of input data\n");
-
- inbuf = __vmlinux_start;
- insize = &__vmlinux_end[0] - &__vmlinux_start[0];
-
- inptr = 1;
- return inbuf[0];
-}
-
-/* ===========================================================================
- * Write the output window window[0..outcnt-1] and update crc and bytes_out.
- * (Used for the decompressed data only.)
- */
-void flush_window(void)
-{
- ulg c = crc;
- unsigned n;
- uch *in, *out, ch;
-
- in = window;
- out = &output_data[output_ptr];
- for (n = 0; n < outcnt; n++) {
- ch = *out++ = *in++;
- c = crc_32_tab[((int)c ^ ch) & 0xff] ^ (c >> 8);
- }
- crc = c;
- bytes_out += (ulg)outcnt;
- output_ptr += (ulg)outcnt;
- outcnt = 0;
- //puts(".");
-}
-#endif // BZ2_COMPRESS, david
-
-
-static void error(char *x)
-{
- int ptr;
-
- puts("\n\n");
- puts(x);
- puts("\n\n -- System halted");
-
- while(1); /* Halt */
-}
-
-#ifndef STANDALONE_DEBUG
-
-ulg
-decompress_kernel(ulg output_start, ulg free_mem_ptr_p, ulg free_mem_ptr_end_p,
- int arch_id)
-{
- output_data = (uch *)output_start; /* Points to kernel start */
- free_mem_ptr = free_mem_ptr_p;
- free_mem_ptr_end = free_mem_ptr_end_p;
- __machine_arch_type = arch_id;
-
- proc_decomp_setup();
- arch_decomp_setup();
-
-// david
-// makecrc();
- puts("Uncompressing Linux...");
-// david ---------------------------------
-// gunzip();
-#ifdef LZMA_COMPRESS
-{
- #include "LzmaDecode.h"
-
- unsigned char *startBuf=__vmlinux_start;
- unsigned char *outBuf = (unsigned char *)output_start;
- unsigned int inLen=__vmlinux_end - __vmlinux_start;
-
- SizeT compressedSize;
- unsigned char *inStream;
- UInt32 outSize = 0;
- UInt32 outSizeHigh = 0;
- SizeT outSizeFull;
- int res;
- SizeT inProcessed;
- SizeT outProcessed;
- char tmpbuf[100];
- CLzmaDecoderState state; /* it's about 24-80 bytes structure, if int is 32-bit */
- unsigned char properties[LZMA_PROPERTIES_SIZE];
-
-//#ifdef CONFIG_RTL8197B_PANA
-// unsigned long pending_len = *((unsigned long *)__vmlinux_start);
-// startBuf += 4;
-// inLen -= (4+pending_len);
-//#else
- unsigned long pending_len = *((unsigned long *)__vmlinux_start);
- kernelStartAddr = *((unsigned long *)(startBuf+4));
- startBuf += 8;
- inLen -= (8+pending_len);
-//#endif
-
- compressedSize = (SizeT)(inLen - (LZMA_PROPERTIES_SIZE + 8));
-
- memcpy(properties, startBuf, sizeof(properties));
- startBuf += sizeof(properties);
-
- memcpy((char *)&outSize, startBuf, 4);
- outSize = le32_to_cpu(outSize);
-
- memcpy((char *)&outSizeHigh, startBuf+4, 4);
- outSizeHigh = le32_to_cpu(outSizeHigh);
-
- outSizeFull = (SizeT)outSize;
- if (outSizeHigh != 0 || (UInt32)(SizeT)outSize != outSize) {
- puts("LZMA: Too big uncompressed stream\n");
- return 0;
- }
- startBuf += 8;
-
- /* Decode LZMA properties and allocate memory */
- if (LzmaDecodeProperties(&state.Properties, properties, LZMA_PROPERTIES_SIZE) != LZMA_RESULT_OK) {
- puts("LZMA: Incorrect stream properties\n");
- return 0;
- }
- state.Probs = (CProb *)malloc(LzmaGetNumProbs(&state.Properties) * sizeof(CProb));
-
- res = LzmaDecode(&state, startBuf, compressedSize, &inProcessed,
- outBuf, outSizeFull, &outProcessed);
- if (res != 0) {
-#ifndef __DO_QUIET__
- sprintf(tmpbuf, "LZMA: Decoding error = %d\n", res);
-#else
- memcpy(tmpbuf, "LZMA: Decoding error = ", 23);
- memcpy((tmpbuf+23), &res, 4);
-#endif
- puts(tmpbuf);
- return 0;
- }
-}
-
-#else // !LZMA_COMPRESS
-#ifndef BZ2_COMPRESS
- makecrc();
- gunzip();
-#else
-
-// david ------------
-{
- unsigned char *startBuf=__vmlinux_start;
- unsigned char *outBuf = (unsigned char *)output_start;
- unsigned int inLen=__vmlinux_end - __vmlinux_start;
- int outLen=-1;
-
- BZ2_bzBuffToBuffDecompress(outBuf, &outLen, startBuf, inLen, 0, 0);
-}
-#endif // BZ2_COMPRESS
-//----------------------------------------
-
-#endif // LZMA_COMPRESS
-
- puts(" done, booting the kernel.\n");
- return output_ptr;
-}
-#else
-
-char output_buffer[1500*1024];
-
-int main()
-{
- output_data = output_buffer;
-
- makecrc();
- puts("Uncompressing Linux...");
- gunzip();
- puts("done.\n");
- return 0;
-}
-#endif
-
diff --git a/target/linux/realtek/files/rtkload/prom_printf.c b/target/linux/realtek/files/rtkload/prom_printf.c
deleted file mode 100644
index 7bf58cdb3..000000000
--- a/target/linux/realtek/files/rtkload/prom_printf.c
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Borrowed from arch/mips/r39xx/prom/init.c
- *
- */
-
-/*
- * init.c: early initialisation code for R39XX Class PDAs
- *
- * Copyright (C) 1999 Harald Koerfgen
- *
- * $Id: prom_printf.c,v 1.2 2008/08/04 08:54:44 michael Exp $
- */
-
-
-
-#define CONFIG_SERIAL
-
-#include <stdarg.h>
-
-//#include <linux/config.h>
-#include <linux/autoconf.h>
-
-#ifdef CONFIG_RTL_EB8186
-#include <asm/rtl8181.h>
-#endif
-
-#if 1
- //#define __KERNEL__
-
- //#include <asm/types.h>
- //#include <asm/serial.h>
- #include <asm/io.h>
-
- #define UART_THR 0x2000
- #define UART_LSR 0x2014
-
- #define rtl_outb(port,val) outb(val,port)
- #define rtl_inb(port) inb(port)
-#endif
-
-void serial_outc(char c)
-{
- int i=0;
- while (1)
- {
- i++;
- if (i >=0x6000)
- break;
-
- if (rtl_inb(UART_LSR) & 0x20)
- break;
- }
- rtl_outb(UART_THR, c);
-}
-
-
-/*
- * Helpful for debugging :-)
- */
-int prom_printf(const char * fmt, ...)
-{
-#ifdef CONFIG_SERIAL
- //extern void serial_outc(char);
- static char buf[1024];
- va_list args;
- char c;
- int i = 0;
-
- /*
- * Printing messages via serial port
- */
- va_start(args, fmt);
- vsprintf(buf, fmt, args);
- va_end(args);
-
- for (i = 0; buf[i] != '\0'; i++) {
- c = buf[i];
- if (c == '\n')
- serial_outc('\r');
- serial_outc(c);
- }
-
- return i;
-#else
- return 0;
-#endif
-}
diff --git a/target/linux/realtek/files/rtkload/read_fd.c b/target/linux/realtek/files/rtkload/read_fd.c
deleted file mode 100644
index bf40fb30e..000000000
--- a/target/linux/realtek/files/rtkload/read_fd.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/* This file has not been tested for ages. */
-
-#include "hfload.h"
-
-#include <sys/stat.h>
-#include <sys/mman.h>
-#include <unistd.h>
-
-void
-read_struct(void *s, ssize_t size)
-{
- ssize_t real;
-
- real = read(0, s, size);
- if (size != real) {
- printf("trying to read %d, got %d; dying.\n", size, real);
- exit(1);
- }
- file_offset += real;
-}
-
-void
-seek_forward(int offset) {
- int dummy, i;
- ssize_t real;
-
- if (offset % 4 != 0) {
- printf("Can't seek by a non-word aligned amount\n");
- exit(1);
- }
-
- if (offset < file_offset) {
- printf("can't seek backwards\n");
- exit(1);
- }
-
- for (; offset < file_offset; file_offset += 4) {
- real = read(0, &dummy, 4);
- if (real != 4) {
- printf("error seeking forward at offset %d\n", file_offset);
- exit(1);
- }
- }
-}
-
-void
-copy_to_region(int *addr, ssize_t size) {
- int i, dummy, real;
-
- printf("copying %x bytes from file offset %x to address %08x\n",
- size, file_offset, addr);
-
-#ifdef FAKE_COPYING
- for (i = 0; i < size; i += 4) {
- read_struct(&dummy, sizeof(int));
- }
-#else
- real = read(0, addr, size);
- if (real != size) {
- printf("failed to read %d bytes, exiting\n");
- exit(1);
- }
- file_offset += real;
-#endif
-}
-
-void
-init_read() {
-}
diff --git a/target/linux/realtek/files/rtkload/read_memory.c b/target/linux/realtek/files/rtkload/read_memory.c
deleted file mode 100644
index 2596911e9..000000000
--- a/target/linux/realtek/files/rtkload/read_memory.c
+++ /dev/null
@@ -1,124 +0,0 @@
-/* read_memory.c
- *
- * This file is subject to the terms and conditions of the GNU
- * General Public License. See the file "COPYING" in the main
- * directory of this archive for more details.
- *
- * Copyright (C) 2000, Jay Carlson
- */
-
-/* read_memory is the memory-based back end for the image-reading
- * functions.
- *
- * Support for non-compressed kernels has probably rotted.
- */
-
-
-#include <linux/types.h>
-#include "hfload.h"
-
-#ifndef EMBEDDED
-#include <unistd.h>
-#include <sys/mman.h>
-#include <sys/stat.h>
-#endif
-
-char *source_memory;
-
-#ifdef EMBEDDED
-#ifndef COMPRESSED_KERNEL
-extern char source_memory_start;
-#endif
-#endif
-
-// david -----------------------
-//#include <linux/config.h>
-#include <linux/autoconf.h>
-
-//#ifdef BZ2_COMPRESS //sc_yang
-void * memcpy(void * dest,const void *src,size_t count)
-{
- char *tmp = (char *) dest, *s = (char *) src;
-
- while (count--)
- *tmp++ = *s++;
-
- return dest;
-}
-#if 0
-void * memset(void * s, int c, size_t count)
-{
- char *xs = (char *) s;
-
- while (count--)
- *xs++ = (char) c;
-
- return s;
-}
-#endif // CONFIG_NINO_8MB
-//------------------------------
-
-
-void
-read_struct(void *s, ssize_t size)
-{
- memcpy(s, source_memory+file_offset, size);
- file_offset += size;
-}
-
-void
-seek_forward(int offset) {
- if (offset % 4 != 0) {
- #ifndef __DO_QUIET__
- printf("Can't seek by a non-word aligned amount\n");
- #endif
- exit(1);
- }
-
- if (offset < file_offset) {
- #ifndef __DO_QUIET__
- printf("can't seek backwards\n");
- #endif
- exit(1);
- }
-
- file_offset = offset;
-}
-
-void
-copy_to_region(int *addr, ssize_t size) {
- int i, dummy;
-
- int *source, *dest;
-#ifndef __DO_QUIET__
- printf("copying 0x%x bytes from file offset 0x%x to address 0x%08x\n",
- size, file_offset, addr);
-#endif
-#ifndef FAKE_COPYING
- memcpy(addr, source_memory+file_offset, size);
-#endif
-
- file_offset += size;
-}
-
-void
-init_read() {
-#ifndef EMBEDDED
- struct stat buf;
- if (fstat(0, &buf)) {
- perror("stat");
- exit(1);
- }
- source_memory = mmap(0, buf.st_size & ~(4095), PROT_READ, MAP_PRIVATE, 0, 0);
- if (!source_memory) {
- perror("mmap");
- exit(1);
- }
-#else
-#ifdef COMPRESSED_KERNEL
- source_memory = (char *)UNCOMPRESS_OUT;
-#else
- source_memory = &source_memory_start;
-#endif
-#endif
-}
diff --git a/target/linux/realtek/files/rtkload/start.S b/target/linux/realtek/files/rtkload/start.S
deleted file mode 100644
index 32df1f6f7..000000000
--- a/target/linux/realtek/files/rtkload/start.S
+++ /dev/null
@@ -1,263 +0,0 @@
-//#include <linux/config.h>
-#include <linux/autoconf.h>
-#include <asm/asm.h>
-#include <asm/regdef.h>
-//#include <asm/mipsregs.h>
-
-#if defined(CONFIG_RTL_819X)
-#define CONFIG_DONOT_ADJUST_SYSCLK_MEMSP
-#endif
-
-#include "start.h"
-#ifndef boot32
-#define NEWSTACK (0x80670000)
-#else
-#define NEWSTACK (0x809FFF00)
-#endif
- .globl old_stack_pointer
-
- .extern __start_dram
-
- .text
- .globl __start
-__start:
-
-#ifdef CONFIG_DONOT_ADJUST_SYSCLK_MEMSP
- nop
-#else
- // Set PLLMNR and SYSCLKR
- jal hfclock_setting
- nop
-#endif
-
- move s0, zero
- mtc0 s0, $12
- nop
- nop
-
-#if 0
- /* Clock */
- li a0,0xbd010108
- li a1,0x0000000b
- sw a1,0(a0)
- nop
- nop
- nop
- nop
-#endif
-
-#ifdef CONFIG_RTL_EB8186
- /* Memory Controllor */
- li a0,0xbd011008
- li a1,0x00000884
- li a1,0x000008c7
- li a1,0x00000cda
- li a1,0x00000886
- li a1,0x000008c7 // <victor> for 187/124
- /*sw a1,0(a0) */
- nop
- nop
- nop
- nop
-
-
-
-
- /*--- initialize and start COP3*/
- mfc0 $8,$12
- nop
- nop
- or $8,0x80000000
- mtc0 $8,$12
- nop
- nop
-
-
-#if 1
- la a0, 0x90000000
- mtc0 a0, $12
- nop
- nop
- mfc0 t0, $20
- nop
- nop
- ori t0, 0x1
- mtc0 t0, $20
- nop
- nop
-#if 0
- la a0, 0x10000000
- mtc3 a0, $4
- la a0, 0x10000fff
- nop
- mtc3 a0, $5
- nop
- la a0, 0x90000000
- sw zero, 0(a0)
- lw t0, 0(a0)
- nop
- la a0, 0x90000fff
- sb zero, 0(a0)
- lb t0, 0(a0)
-#endif
-#endif
-#endif // CONFIG_RTL_EB8186
-
-
- nop
-
-
-#if 0
- /*la t0, __start_dram */
- /*and t0, 0x0fffffff*/ # translate to physical address
- la t0, 0x81000000
- and t0, 0x0fffffff # translate to physical address
- mtc3 t0, $4 # $4: d-ram base
- nop
- addi t0, t0, 0x1000 - 1 # total 2k bytes used//2003-07-04//TKIP_encryption
- mtc3 t0, $5 # $5: d-ram top
- nop
-#endif
-
-
-
- la s0, _bstart
- la s1, _bend
-
- move t0, s0
-
-1:
- sw zero, 0(t0)
- addi t0, 4
- bne t0, s1, 1b
-
- //sw sp, old_stack_pointer
-// david ------------------------
-// li sp, NEWSTACK
-//sc_yang
-//#ifndef BZ2_COMPRESS
-// li sp, NEWSTACK
-//#else
- move t0, s1
- addi t0, t0, 4096
- move sp, t0
- move a0, t0
-//#endif
-//-------------------------------
-
- j main
- nop
-
- .globl exit
-exit:
- j exit
- nop
-
- .globl start_kernel
-start_kernel:
- move t0, a0
- li a0, 0
- li a1, 0
- li a2, 0
- jr t0
- nop
-
-
-hfclock_setting:
- // Check chip version to set divider register
- li t1, REG_REVISION
- lw t0, 0(t1)
- li t1, 0xf0000000
- and t0, t0, t1
- srl t0, t0, 0x1c // Right shift 28 bits
-
- beq t0, VERSION_D, version_8186_C //set D cut keep 108MHz
- nop
-
-// bne t0, VERSION_D, 1f
-// nop
-// j ra // 8186 D cut doesn't need watch dog reset.
-// nop
-
-1:
- beq t0, VERSION_C, version_8186_C
- nop
-
-
-version_8186_B:
- // Check PLLMNR and SYSCLKR Registers.
- la a0, REG_PLLMNR
- lw t0, 0(a0)
- and t0, t0, 0x3FFFF //You must mask other bits!!
- li t1, VAL_PLLMNR_8186B
- bne t0, t1, set_B
- nop
-
- la a0, REG_SYSCLKR
- lw t0, 0(a0)
- and t0, t0, 0xFFF //You must mask other bits!!
- li t1, VAL_SYSCLKR_8186B
- bne t0, t1, set_B
- nop
-
- j ra //PLLMNR and SYSCLKR are set already.
- nop
-
-set_B:
- // Set CPU/MEM Clock and Watch Dog Reset.
- li t0, VAL_PLLMNR_8186B
- la a0, REG_PLLMNR
- sw t0, 0(a0)
-
- li t0, VAL_SYSCLKR_8186B
- la a0, REG_SYSCLKR
- sw t0, 0(a0)
-
- j start_watch_dog
- nop
-
-version_8186_C:
- // Check PLLMNR and SYSCLKR Registers.
- la a0, REG_PLLMNR
- lw t0, 0(a0)
- and t0, t0, 0x3FFFF //You must mask other bits!!
- li t1, VAL_PLLMNR_8186C
- bne t0, t1, set_C
- nop
-
- la a0, REG_SYSCLKR
- lw t0, 0(a0)
- and t0, t0, 0xFFF //You must mask other bits!!
- li t1, VAL_SYSCLKR_8186C
- bne t0, t1, set_C
- nop
-
- j ra
- nop
-
-set_C:
- // Set CPU/MEM Clock and Watch Dog Reset.
- li t0, VAL_PLLMNR_8186C
- la a0, REG_PLLMNR
- sw t0, 0(a0)
-
- li t0, VAL_SYSCLKR_8186C
- la a0, REG_SYSCLKR
- sw t0, 0(a0)
-
- j start_watch_dog
- nop
-
-start_watch_dog:
- // start WDTDOG
- la a0, REG_CDBR
- la t0, 0x2
- sw t0, 0(a0)
- la t0, 0x100
- la a0, REG_WDTCNR
- sw t0, 0(a0)
-1:
- b 1b
- nop
-
-
diff --git a/target/linux/realtek/files/rtkload/start.h b/target/linux/realtek/files/rtkload/start.h
deleted file mode 100644
index c5397d2b9..000000000
--- a/target/linux/realtek/files/rtkload/start.h
+++ /dev/null
@@ -1,46 +0,0 @@
-#ifndef __RTL_START_H__
-#define __RTL_START_H__
-
-//#include <linux/config.h>
-#include <linux/autoconf.h>
-
-//----- System Registers ------------------------------------------------
-#define REG_REVISION 0xbd01010c
-#define REG_PLLMNR 0xbd010104
-#define REG_SYSCLKR 0xbd010108
-#define REG_GPEFDIR 0xbd010144
-#define REG_GPEFDATA 0xbd010140
-#define REG_MTCR0 0xbd011004
-#define REG_MCR 0xbd011000
-#define REG_MTCR1 0xbd011008
-#define REG_TKNR 0xbd010110
-#define REG_GISR 0xbd010004
-#define REG_WDTCNR 0xbd01005c
-#define REG_CDBR 0xbd010058
-
-//----- Revision bit ----------------------------------------------------
-#define VERSION_B 0x0 //0000
-#define VERSION_C 0x8 //1000
-#define VERSION_D 0x4 //0100
-
-//----- DPLL and Clock Setting ------------------------------------------
-#define VAL_PLLMNR_8186B 0x36704 // 160/128
-#define VAL_SYSCLKR_8186B 0xa0b // CPU=320/2 MEM=320/2.5
-
-#define VAL_PLLMNR_8186C 0x35a03 // 180/108
-#define VAL_SYSCLKR_8186C 0x090b // CPU=270/1.5 MEM=270/2.5
-
-//----- Memory Setting --------------------------------------------------
-#define VAL_FLASH_TIMING 0x88880000
-//#define VAL_FLASH_TIMING 0x33330000 //high speed.
-
-
-#if (defined(CONFIG_SKIP_ADJUST_SYSCLK) )
- #define CONFIG_DONOT_ADJUST_SYSCLK_MEMSP
-#endif
-//----- Others ----------------------------------------------------------
-#define PCI_LOW_COUNTER 0xFFFF
-#define BOOT_ADDR 0x80100000
-
-#endif
-
diff --git a/target/linux/realtek/files/rtkload/string.c b/target/linux/realtek/files/rtkload/string.c
deleted file mode 100644
index 6f787844e..000000000
--- a/target/linux/realtek/files/rtkload/string.c
+++ /dev/null
@@ -1,382 +0,0 @@
-/*
- * linux/lib/string.c
- *
- * Copyright (C) 1991, 1992 Linus Torvalds
- */
-
-/*
- * stupid library routines.. The optimized versions should generally be found
- * as inline code in <asm-xx/string.h>
- *
- * These are buggy as well..
- *
- * * Fri Jun 25 1999, Ingo Oeser <ioe@informatik.tu-chemnitz.de>
- * - Added strsep() which will replace strtok() soon (because strsep() is
- * reentrant and should be faster). Use only strsep() in new code, please.
- */
-
-#include <linux/types.h>
-#include <linux/string.h>
-#include <linux/ctype.h>
-
-#ifndef __HAVE_ARCH_STRNICMP
-int strnicmp(const char *s1, const char *s2, size_t len)
-{
- /* Yes, Virginia, it had better be unsigned */
- unsigned char c1, c2;
-
- c1 = 0; c2 = 0;
- if (len) {
- do {
- c1 = *s1; c2 = *s2;
- s1++; s2++;
- if (!c1)
- break;
- if (!c2)
- break;
- if (c1 == c2)
- continue;
- c1 = tolower(c1);
- c2 = tolower(c2);
- if (c1 != c2)
- break;
- } while (--len);
- }
- return (int)c1 - (int)c2;
-}
-#endif
-
-/* char * ___strtok = NULL; */
-char * ___strtok; /* live in BSS, please */
-
-#ifndef __HAVE_ARCH_STRCPY
-char * strcpy(char * dest,const char *src)
-{
- char *tmp = dest;
-
- while ((*dest++ = *src++) != '\0')
- /* nothing */;
- return tmp;
-}
-#endif
-
-#ifndef __HAVE_ARCH_STRNCPY
-char * strncpy(char * dest,const char *src,size_t count)
-{
- char *tmp = dest;
-
- while (count-- && (*dest++ = *src++) != '\0')
- /* nothing */;
-
- return tmp;
-}
-#endif
-
-#ifndef __HAVE_ARCH_STRCAT
-char * strcat(char * dest, const char * src)
-{
- char *tmp = dest;
-
- while (*dest)
- dest++;
- while ((*dest++ = *src++) != '\0')
- ;
-
- return tmp;
-}
-#endif
-
-#ifndef __HAVE_ARCH_STRNCAT
-char * strncat(char *dest, const char *src, size_t count)
-{
- char *tmp = dest;
-
- if (count) {
- while (*dest)
- dest++;
- while ((*dest++ = *src++)) {
- if (--count == 0) {
- *dest = '\0';
- break;
- }
- }
- }
-
- return tmp;
-}
-#endif
-
-#ifndef __HAVE_ARCH_STRCMP
-int strcmp(const char * cs,const char * ct)
-{
- register signed char __res;
-
- while (1) {
- if ((__res = *cs - *ct++) != 0 || !*cs++)
- break;
- }
-
- return __res;
-}
-#endif
-
-#ifndef __HAVE_ARCH_STRNCMP
-int strncmp(const char * cs,const char * ct,size_t count)
-{
- register signed char __res = 0;
-
- while (count) {
- if ((__res = *cs - *ct++) != 0 || !*cs++)
- break;
- count--;
- }
-
- return __res;
-}
-#endif
-
-#ifndef __HAVE_ARCH_STRCHR
-char * strchr(const char * s, int c)
-{
- for(; *s != (char) c; ++s)
- if (*s == '\0')
- return NULL;
- return (char *) s;
-}
-#endif
-
-#ifndef __HAVE_ARCH_STRRCHR
-char * strrchr(const char * s, int c)
-{
- const char *p = s + strlen(s);
- do {
- if (*p == (char)c)
- return (char *)p;
- } while (--p >= s);
- return NULL;
-}
-#endif
-
-#ifndef __HAVE_ARCH_STRLEN
-size_t strlen(const char * s)
-{
- const char *sc;
-
- for (sc = s; *sc != '\0'; ++sc)
- /* nothing */;
- return sc - s;
-}
-#endif
-
-#ifndef __HAVE_ARCH_STRNLEN
-size_t strnlen(const char * s, size_t count)
-{
- const char *sc;
-
- for (sc = s; count-- && *sc != '\0'; ++sc)
- /* nothing */;
- return sc - s;
-}
-#endif
-
-#ifndef __HAVE_ARCH_STRSPN
-size_t strspn(const char *s, const char *accept)
-{
- const char *p;
- const char *a;
- size_t count = 0;
-
- for (p = s; *p != '\0'; ++p) {
- for (a = accept; *a != '\0'; ++a) {
- if (*p == *a)
- break;
- }
- if (*a == '\0')
- return count;
- ++count;
- }
-
- return count;
-}
-#endif
-
-#ifndef __HAVE_ARCH_STRPBRK
-char * strpbrk(const char * cs,const char * ct)
-{
- const char *sc1,*sc2;
-
- for( sc1 = cs; *sc1 != '\0'; ++sc1) {
- for( sc2 = ct; *sc2 != '\0'; ++sc2) {
- if (*sc1 == *sc2)
- return (char *) sc1;
- }
- }
- return NULL;
-}
-#endif
-
-#ifndef __HAVE_ARCH_STRTOK
-char * strtok(char * s,const char * ct)
-{
- char *sbegin, *send;
-
- sbegin = s ? s : ___strtok;
- if (!sbegin) {
- return NULL;
- }
- sbegin += strspn(sbegin,ct);
- if (*sbegin == '\0') {
- ___strtok = NULL;
- return( NULL );
- }
- send = strpbrk( sbegin, ct);
- if (send && *send != '\0')
- *send++ = '\0';
- ___strtok = send;
- return (sbegin);
-}
-#endif
-
-#ifndef __HAVE_ARCH_STRSEP
-
-char * strsep(char **s, const char * ct)
-{
- char *sbegin=*s;
- if (!sbegin)
- return NULL;
-
- sbegin += strspn(sbegin,ct);
- if (*sbegin == '\0')
- return NULL;
-
- *s = strpbrk( sbegin, ct);
- if (*s && **s != '\0')
- **s++ = '\0';
- return (sbegin);
-}
-#endif
-
-#ifndef __HAVE_ARCH_MEMSET
-void * memset(void * s, int c, size_t count)
-{
- char *xs = (char *) s;
-
- while (count--)
- *xs++ = (char) c;
-
- return s;
-}
-#endif
-
-/*
-#ifndef __HAVE_ARCH_BCOPY
-char * bcopy(const char * src, char * dest, int count)
-{
- char *tmp = dest;
-
- while (count--)
- *tmp++ = *src++;
-
- return dest;
-}
-#endif
-*/
-
-#ifndef __HAVE_ARCH_MEMCPY
-void * memcpy(void * dest,const void *src,size_t count)
-{
- char *tmp = (char *) dest, *s = (char *) src;
-
- while (count--)
- *tmp++ = *s++;
-
- return dest;
-}
-#endif
-
-#ifndef __HAVE_ARCH_MEMMOVE
-void * memmove(void * dest,const void *src,size_t count)
-{
- char *tmp, *s;
-
- if (dest <= src) {
- tmp = (char *) dest;
- s = (char *) src;
- while (count--)
- *tmp++ = *s++;
- }
- else {
- tmp = (char *) dest + count;
- s = (char *) src + count;
- while (count--)
- *--tmp = *--s;
- }
-
- return dest;
-}
-#endif
-
-#ifndef __HAVE_ARCH_MEMCMP
-int memcmp(const void * cs,const void * ct,size_t count)
-{
- const unsigned char *su1, *su2;
- signed char res = 0;
-
- for( su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--)
- if ((res = *su1 - *su2) != 0)
- break;
- return res;
-}
-#endif
-
-/*
- * find the first occurrence of byte 'c', or 1 past the area if none
- */
-#ifndef __HAVE_ARCH_MEMSCAN
-void * memscan(void * addr, int c, size_t size)
-{
- unsigned char * p = (unsigned char *) addr;
- unsigned char * e = p + size;
-
- while (p != e) {
- if (*p == c)
- return (void *) p;
- p++;
- }
-
- return (void *) p;
-}
-#endif
-
-#ifndef __HAVE_ARCH_STRSTR
-char * strstr(const char * s1,const char * s2)
-{
- int l1, l2;
-
- l2 = strlen(s2);
- if (!l2)
- return (char *) s1;
- l1 = strlen(s1);
- while (l1 >= l2) {
- l1--;
- if (!memcmp(s1,s2,l2))
- return (char *) s1;
- s1++;
- }
- return NULL;
-}
-#endif
-
-#ifndef __HAVE_ARCH_MEMCHR
-void *memchr(const void *s, int c, size_t n)
-{
- const unsigned char *p = s;
- while (n-- != 0) {
- if ((unsigned char)c == *p++) {
- return (void *)(p-1);
- }
- }
- return NULL;
-}
-
-#endif
diff --git a/target/linux/realtek/files/rtkload/target.script b/target/linux/realtek/files/rtkload/target.script
deleted file mode 100644
index a62023f89..000000000
--- a/target/linux/realtek/files/rtkload/target.script
+++ /dev/null
@@ -1,27 +0,0 @@
-/* ld.script
- *
- * This file is subject to the terms and conditions of the GNU
- * General Public License. See the file "COPYING" in the main
- * directory of this archive for more details.
- *
- * Copyright (C) 2000, Jay Carlson
- */
-
-OUTPUT_FORMAT("elf32-littlemips")
-OUTPUT_ARCH(mips)
-
-/* Someday I'll figure out how this works */
-/* MEMORY { bootcode : ORIGIN = 0x80000000, LENGTH = 512 bytes } */
-/* MEMORY { nandjrom : ORIGIN = 0x80000200, LENGTH = 2M - 512 bytes } */
-/* MEMORY { ext2n : ORIGIN = 0x80200000, LENGTH = 2M bytes } */
-
-SECTIONS
-{
- . = 0x80000000 ;
- BOOTCODE : { bootcode* }
- NANDJROM : { nandrom* }
- EXT2N : { ext2n* }
-
-}
-
-
diff --git a/target/linux/realtek/files/rtkload/vmlinux_img.c b/target/linux/realtek/files/rtkload/vmlinux_img.c
deleted file mode 100644
index 163a1ac1c..000000000
--- a/target/linux/realtek/files/rtkload/vmlinux_img.c
+++ /dev/null
@@ -1,8 +0,0 @@
-
-void vmlinux_entry(void);
-
-void vmlinux_entry(void)
-{
-
-
-}
diff --git a/target/linux/realtek/files/rtkload/vmlinux_img.gz b/target/linux/realtek/files/rtkload/vmlinux_img.gz
deleted file mode 100644
index d273b3177..000000000
--- a/target/linux/realtek/files/rtkload/vmlinux_img.gz
+++ /dev/null
Binary files differ
diff --git a/target/linux/realtek/files/rtkload/vsprintf.c b/target/linux/realtek/files/rtkload/vsprintf.c
deleted file mode 100644
index 501a05985..000000000
--- a/target/linux/realtek/files/rtkload/vsprintf.c
+++ /dev/null
@@ -1,366 +0,0 @@
-/*
- * linux/lib/vsprintf.c
- *
- * Copyright (C) 1991, 1992 Linus Torvalds
- */
-
-/* vsprintf.c -- Lars Wirzenius & Linus Torvalds. */
-/*
- * Wirzenius wrote this portably, Torvalds fucked it up :-)
- */
-
-#include <stdarg.h>
-#include <linux/types.h>
-#include <linux/string.h>
-#include <linux/ctype.h>
-
-#include <asm/div64.h>
-
-#if 1
-/* Not needed on 64bit architectures */
-//#if BITS_PER_LONG == 32
-//porting from linux-2.6.30/lib/div64.c
-uint32_t __attribute__((weak)) __div64_32(uint64_t *n, uint32_t base)
-{
- uint64_t rem = *n;
- uint64_t b = base;
- uint64_t res, d = 1;
- uint32_t high = rem >> 32;
-
- /* Reduce the thing a bit first */
- res = 0;
- if (high >= base) {
- high /= base;
- res = (uint64_t) high << 32;
- rem -= (uint64_t) (high*base) << 32;
- }
-
- while ((int64_t)b > 0 && b < rem) {
- b = b+b;
- d = d+d;
- }
-
- do {
- if (rem >= b) {
- rem -= b;
- res += d;
- }
- b >>= 1;
- d >>= 1;
- } while (d);
-
- *n = res;
- return rem;
-}
-//#endif /* BITS_PER_LONG == 32 */
-#endif
-
-unsigned long simple_strtoul(const char *cp,char **endp,unsigned int base)
-{
- unsigned long result = 0,value;
-
- if (!base) {
- base = 10;
- if (*cp == '0') {
- base = 8;
- cp++;
- if ((*cp == 'x') && isxdigit(cp[1])) {
- cp++;
- base = 16;
- }
- }
- }
- while (isxdigit(*cp) && (value = isdigit(*cp) ? *cp-'0' : (islower(*cp)
- ? toupper(*cp) : *cp)-'A'+10) < base) {
- result = result*base + value;
- cp++;
- }
- if (endp)
- *endp = (char *)cp;
- return result;
-}
-
-long simple_strtol(const char *cp,char **endp,unsigned int base)
-{
- if(*cp=='-')
- return -simple_strtoul(cp+1,endp,base);
- return simple_strtoul(cp,endp,base);
-}
-
-/* we use this so that we can do without the ctype library */
-#define is_digit(c) ((c) >= '0' && (c) <= '9')
-
-static int skip_atoi(const char **s)
-{
- int i=0;
-
- while (is_digit(**s))
- i = i*10 + *((*s)++) - '0';
- return i;
-}
-
-#define ZEROPAD 1 /* pad with zero */
-#define SIGN 2 /* unsigned/signed long */
-#define PLUS 4 /* show plus */
-#define SPACE 8 /* space if plus */
-#define LEFT 16 /* left justified */
-#define SPECIAL 32 /* 0x */
-#define LARGE 64 /* use 'ABCDEF' instead of 'abcdef' */
-
-//static char * number(char * str, long long num, int base, int size, int precision, int type)
-static char * number(char * str, uint64_t num, int base, int size, int precision, int type)
-{
- char c,sign,tmp[66];
- const char *digits="0123456789abcdefghijklmnopqrstuvwxyz";
- int i;
-
- if (type & LARGE)
- digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
- if (type & LEFT)
- type &= ~ZEROPAD;
- if (base < 2 || base > 36)
- return 0;
- c = (type & ZEROPAD) ? '0' : ' ';
- sign = 0;
- if (type & SIGN) {
- if (num < 0) {
- sign = '-';
- num = -num;
- size--;
- } else if (type & PLUS) {
- sign = '+';
- size--;
- } else if (type & SPACE) {
- sign = ' ';
- size--;
- }
- }
- if (type & SPECIAL) {
- if (base == 16)
- size -= 2;
- else if (base == 8)
- size--;
- }
- i = 0;
- if (num == 0)
- tmp[i++]='0';
- else while (num != 0)
- tmp[i++] = digits[do_div(num,base)];
- if (i > precision)
- precision = i;
- size -= precision;
- if (!(type&(ZEROPAD+LEFT)))
- while(size-->0)
- *str++ = ' ';
- if (sign)
- *str++ = sign;
- if (type & SPECIAL) {
- if (base==8)
- *str++ = '0';
- else if (base==16) {
- *str++ = '0';
- *str++ = digits[33];
- }
- }
- if (!(type & LEFT))
- while (size-- > 0)
- *str++ = c;
- while (i < precision--)
- *str++ = '0';
- while (i-- > 0)
- *str++ = tmp[i];
- while (size-- > 0)
- *str++ = ' ';
- return str;
-}
-
-/* Forward decl. needed for IP address printing stuff... */
-int sprintf(char * buf, const char *fmt, ...);
-
-int vsprintf(char *buf, const char *fmt, va_list args)
-{
- int len;
- unsigned long long num;
- int i, base;
- char * str;
- const char *s;
-
- int flags; /* flags to number() */
-
- int field_width; /* width of output field */
- int precision; /* min. # of digits for integers; max
- number of chars for from string */
- int qualifier; /* 'h', 'l', or 'L' for integer fields */
- /* 'z' support added 23/7/1999 S.H. */
- /* 'z' changed to 'Z' --davidm 1/25/99 */
-
-
- for (str=buf ; *fmt ; ++fmt) {
- if (*fmt != '%') {
- *str++ = *fmt;
- continue;
- }
-
- /* process flags */
- flags = 0;
- repeat:
- ++fmt; /* this also skips first '%' */
- switch (*fmt) {
- case '-': flags |= LEFT; goto repeat;
- case '+': flags |= PLUS; goto repeat;
- case ' ': flags |= SPACE; goto repeat;
- case '#': flags |= SPECIAL; goto repeat;
- case '0': flags |= ZEROPAD; goto repeat;
- }
-
- /* get field width */
- field_width = -1;
- if (is_digit(*fmt))
- field_width = skip_atoi(&fmt);
- else if (*fmt == '*') {
- ++fmt;
- /* it's the next argument */
- field_width = va_arg(args, int);
- if (field_width < 0) {
- field_width = -field_width;
- flags |= LEFT;
- }
- }
-
- /* get the precision */
- precision = -1;
- if (*fmt == '.') {
- ++fmt;
- if (is_digit(*fmt))
- precision = skip_atoi(&fmt);
- else if (*fmt == '*') {
- ++fmt;
- /* it's the next argument */
- precision = va_arg(args, int);
- }
- if (precision < 0)
- precision = 0;
- }
-
- /* get the conversion qualifier */
- qualifier = -1;
- if (*fmt == 'h' || *fmt == 'l' || *fmt == 'L' || *fmt =='Z') {
- qualifier = *fmt;
- ++fmt;
- }
-
- /* default base */
- base = 10;
-
- switch (*fmt) {
- case 'c':
- if (!(flags & LEFT))
- while (--field_width > 0)
- *str++ = ' ';
- *str++ = (unsigned char) va_arg(args, int);
- while (--field_width > 0)
- *str++ = ' ';
- continue;
-
- case 's':
- s = va_arg(args, char *);
- if (!s)
- s = "<NULL>";
-
- len = strnlen(s, precision);
-
- if (!(flags & LEFT))
- while (len < field_width--)
- *str++ = ' ';
- for (i = 0; i < len; ++i)
- *str++ = *s++;
- while (len < field_width--)
- *str++ = ' ';
- continue;
-
- case 'p':
- if (field_width == -1) {
- field_width = 2*sizeof(void *);
- flags |= ZEROPAD;
- }
- str = number(str,
- (unsigned long) va_arg(args, void *), 16,
- field_width, precision, flags);
- continue;
-
-
- case 'n':
- if (qualifier == 'l') {
- long * ip = va_arg(args, long *);
- *ip = (str - buf);
- } else if (qualifier == 'Z') {
- size_t * ip = va_arg(args, size_t *);
- *ip = (str - buf);
- } else {
- int * ip = va_arg(args, int *);
- *ip = (str - buf);
- }
- continue;
-
- case '%':
- *str++ = '%';
- continue;
-
- /* integer number formats - set up the flags and "break" */
- case 'o':
- base = 8;
- break;
-
- case 'X':
- flags |= LARGE;
- case 'x':
- base = 16;
- break;
-
- case 'd':
- case 'i':
- flags |= SIGN;
- case 'u':
- break;
-
- default:
- *str++ = '%';
- if (*fmt)
- *str++ = *fmt;
- else
- --fmt;
- continue;
- }
- if (qualifier == 'L')
- num = va_arg(args, long long);
- else if (qualifier == 'l') {
- num = va_arg(args, unsigned long);
- if (flags & SIGN)
- num = (signed long) num;
- } else if (qualifier == 'Z') {
- num = va_arg(args, size_t);
- } else if (qualifier == 'h') {
- num = (unsigned short) va_arg(args, int);
- if (flags & SIGN)
- num = (signed short) num;
- } else {
- num = va_arg(args, unsigned int);
- if (flags & SIGN)
- num = (signed int) num;
- }
- str = number(str, num, base, field_width, precision, flags);
- }
- *str = '\0';
- return str-buf;
-}
-
-int sprintf(char * buf, const char *fmt, ...)
-{
- va_list args;
- int i;
-
- va_start(args, fmt);
- i=vsprintf(buf,fmt,args);
- va_end(args);
- return i;
-}
diff --git a/target/linux/realtek/image/Makefile b/target/linux/realtek/image/Makefile
index f5f1c4f56..d0dc6ab7e 100644
--- a/target/linux/realtek/image/Makefile
+++ b/target/linux/realtek/image/Makefile
@@ -7,76 +7,72 @@
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/image.mk
-#DROP_SECTIONS := .reginfo .mdebug .comment .note .pdr .options .MIPS.options
-#OBJCOPY_BIN := $(TARGET_CROSS)objcopy -S -O bin $(addprefix --remove-section=,$(DROP_SECTIONS))
+JFFS2_BLOCKSIZE=4k
-TCC=$(TARGET_CROSS)cc
-TOBJCOPY=$(TARGET_CROSS)objcopy
-TLD=$(TARGET_CROSS)ld
+#OBJCOPY=$(TARGET_CROSS)objcopy
+# define subtarget, should be replaced with $(SUBTARGET) when more chips will be introduced
+STARGET=rtl8196c
-JFFS2_BLOCKSIZE=4k
+COMMA:=,
+define mkcmdline
+$(if $(1),board=$(1) )$(if $(2),console=$(2)$(COMMA)$(3))
+endef
define Image/Prepare
- gzip -9 < $(KDIR)/vmlinux > $(KDIR)/vmlinux.gz
+# $(KERNEL_CROSS)objcopy -O binary $(OBJCOPY_STRIP) -S $(LINUX_DIR)/vmlinux $(LINUX_KERNEL)
+# $(KERNEL_CROSS)objcopy $(OBJCOPY_STRIP) -S $(LINUX_DIR)/vmlinux $(KERNEL_BUILD_DIR)/vmlinux.elf2
+ lzma e $(KDIR)/vmlinux -lc1 -lp2 -pb2 $(KDIR)/vmlinux.lzma
endef
define Image/BuildKernel
- cp $(KDIR)/vmlinux.gz $(BIN_DIR)/$(IMG_PREFIX)-vmlinuz
- cp $(LINUX_DIR)/rtkload/linux.bin $(BIN_DIR)/$(IMG_PREFIX)-kernel.bin
+ $(call Image/BuildLoader,loader-$(STARGET),bin,$(call mkcmdline,$(PROFILE),ttyS0,38400) root=/dev/mtdblock2,${CONFIG_REALTEK_KERNEL_LOAD_ADDRESS},$(shell dd if=$(KDIR)/vmlinux.elf skip=24 bs=1 count=4 conv=swab 2>/dev/null | hexdump -v -e '"0x" 2/2 "%X"'))
+ cvimg linux $(KDIR)/loader-$(STARGET).bin \
+ $(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE)-kernel.bin \
+ ${CONFIG_REALTEK_KERNEL_LOAD_ADDRESS} \
+ ${CONFIG_REALTEK_KERNEL_OFFSET}
endef
define Image/Build/jffs2-4k
- dd if=$(KDIR)/root.$(1) of=$(BIN_DIR)/$(IMG_PREFIX)-$(1).img bs=4k conv=sync
- cvimg root $(BIN_DIR)/$(IMG_PREFIX)-$(1).img $(BIN_DIR)/$(IMG_PREFIX)-$(1).bin F0000 ${CONFIG_REALTEK_ROOTFS_OFFSET}
+ dd if=$(KDIR)/root.$(1) of=$(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE)-$(1).img bs=4k conv=sync
+ cvimg root $(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE)-$(1).img \
+ $(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE)-$(1).bin \
+ ${CONFIG_REALTEK_ROOTFS_OFFSET} \
+ ${CONFIG_REALTEK_ROOTFS_OFFSET}
endef
-BS_KERNEL=$$$$((`printf %d 0x${CONFIG_REALTEK_ROOTFS_OFFSET}`-`printf %d 0x${CONFIG_REALTEK_KERNEL_OFFSET}`))
-BS_ROOTFS=$$$$((`printf %d ${CONFIG_REALTEK_FLASH_SIZE}`-`printf %d 0x${CONFIG_REALTEK_ROOTFS_OFFSET}`))
define Image/Build/squashfs
$(call prepare_generic_squashfs,$(KDIR)/root.squashfs)
- dd if=$(KDIR)/root.$(1) of=$(BIN_DIR)/$(IMG_PREFIX)-$(1).img bs=128k conv=sync
- cvimg root $(BIN_DIR)/$(IMG_PREFIX)-$(1).img $(BIN_DIR)/$(IMG_PREFIX)-$(1).bin F0000 ${CONFIG_REALTEK_ROOTFS_OFFSET}
- echo "BS_KERNEL=$(BS_KERNEL)"
- echo "BS_ROOTFS=$(BS_ROOTFS)"
- ( \
- dd if=$(BIN_DIR)/$(IMG_PREFIX)-kernel.bin bs=$(BS_KERNEL) conv=sync; \
- dd if=$(BIN_DIR)/$(IMG_PREFIX)-$(1).img bs=$(BS_ROOTFS) conv=sync; \
- ) > $(BIN_DIR)/$(IMG_PREFIX)-$(1)-sysupgrade.img
+ dd if=$(KDIR)/root.$(1) of=$(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE)-$(1).img bs=4k conv=sync
+ cvimg root $(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE)-$(1).img \
+ $(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE)-$(1).bin \
+ ${CONFIG_REALTEK_ROOTFS_OFFSET} \
+ ${CONFIG_REALTEK_ROOTFS_OFFSET}
endef
- #need to fix this mess - JMM
- #
- #bixutil pack $(KDIR)/vmlinux.gz $(BIN_DIR)/kernel-$(BOARD)-$(KERNEL).bix
- #cat $(KDIR)/vmlinux.gz \
- # $(KDIR)/root.$(1) \
- # > $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-$(1).bin
- #
- #
- #
- #echo "void vmlinux_entry(void) { }" > vmlinux_img.c
- #$(TCC) -fno-pic -mno-abicalls -Os -fomit-frame-pointer -D__KERNEL__ -c vmlinux_img.c -o vmlinux_img.o
- #$(TOBJCOPY) --add-section .vmlinux=vmlinux_img.gz vmlinux_img.o
- #
- #echo "OUTPUT_ARCH(mips)" > ld.script
- #echo "ENTRY(__start)" >> ld.script
- #echo "SECTIONS" >> ld.script
- #echo "{" >> ld.script
- #echo " /* The loader itself */" >> ld.script
- #echo " . = ${LOAD_STARTADDR};" >> ld.script
- #echo " .text : { *(.text) }" >> ld.script
- #echo " .rodata : { *(.rodata) }" >> ld.script
- #echo " . = ALIGN(4);" >> ld.script
- #echo " .data : { _fdata = . ; *(.data) . = ALIGN(1024); __vmlinux_start = .; *(.vmlinux) __vmlinux_end = .; . = ALIGN(1024); CONSTRUCTORS }" >> ld.script
- #echo " .bss : { _bstart = . ; *(.bss) ; *(.sbss) ; *(COMMON) ; _bend = . ; }" >> ld.script
- #echo " /DISCARD/ : { *(.reginfo) ; *(.note) ; *(.comment) *(__ex_table) ; }" >> ld.script
- #echo "}" >> ld.script
- #$(TLD) -static -nostdlib -G 0 -T ld.script -o mem $(START_FILE) $(LOADER_FILES) $(SUPPORT_FILES) vmlinux_img.o
-
-
+BS_KERNEL=$$$$((`printf %d 0x${CONFIG_REALTEK_ROOTFS_OFFSET}`-`printf %d 0x${CONFIG_REALTEK_KERNEL_OFFSET}`))
+BS_ROOTFS=$$$$((`printf %d ${CONFIG_REALTEK_FLASH_SIZE}`-`printf %d 0x${CONFIG_REALTEK_ROOTFS_OFFSET}`))
define Image/Build
$(call Image/Build/$(1),$(1))
+ echo "BS_KERNEL=$(BS_KERNEL)"
+ echo "BS_ROOTFS=$(BS_ROOTFS)"
+ ( \
+ dd if=$(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE)-kernel.bin bs=$(BS_KERNEL) conv=sync; \
+ dd if=$(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE)-$(1).img bs=$(BS_ROOTFS) conv=sync; \
+ ) > $(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE)-$(1)-sysupgrade.img
+ mgbin -c -o $(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE)-$(1)-fw.bin \
+ $(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE)-$(1).bin \
+ $(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE)-kernel.bin
+endef
+
+LOADER_MAKE := $(NO_TRACE_MAKE) -C lzma-loader KDIR=$(KDIR) LINUX_DIR=$(LINUX_DIR)
+define Image/BuildLoader
+ -rm -rf $(KDIR)/lzma-loader
+ $(LOADER_MAKE) LOADER=$(1).$(2) KERNEL_CMDLINE="$(3)" \
+ LZMA_TEXT_START=$(4) LOADADDR=0x80000000 KERNELENTRY=$(5) \
+ LOADER_DATA="$(KDIR)/vmlinux.lzma" BOARD="$(1)" \
+ compile loader.$(2)
endef
$(eval $(call BuildImage))
diff --git a/target/linux/realtek/image/lzma-loader/Makefile b/target/linux/realtek/image/lzma-loader/Makefile
new file mode 100644
index 000000000..82e7f9d90
--- /dev/null
+++ b/target/linux/realtek/image/lzma-loader/Makefile
@@ -0,0 +1,65 @@
+#
+# Copyright (C) 2011 OpenWrt.org
+# Copyright (C) 2011 Gabor Juhos <juhosg@openwrt.org>
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+LZMA_TEXT_START := 0x80a00000
+LOADER := loader.bin
+LOADER_NAME := $(basename $(notdir $(LOADER)))
+LOADER_DATA :=
+TARGET_DIR :=
+FLASH_OFFS :=
+FLASH_MAX :=
+BOARD :=
+
+ifeq ($(TARGET_DIR),)
+TARGET_DIR := $(KDIR)
+endif
+
+LOADER_BIN := $(TARGET_DIR)/$(LOADER_NAME).bin
+LOADER_GZ := $(TARGET_DIR)/$(LOADER_NAME).gz
+LOADER_ELF := $(TARGET_DIR)/$(LOADER_NAME).elf
+
+PKG_NAME := lzma-loader
+PKG_BUILD_DIR := $(KDIR)/$(PKG_NAME)
+
+.PHONY : loader-compile loader.bin loader.elf loader.gz
+
+$(PKG_BUILD_DIR)/.prepared:
+ mkdir $(PKG_BUILD_DIR)
+ $(CP) ./src/* $(PKG_BUILD_DIR)/
+ touch $@
+
+loader-compile: $(PKG_BUILD_DIR)/.prepared
+ $(MAKE) -C $(PKG_BUILD_DIR) CROSS_COMPILE="$(TARGET_CROSS)" \
+ LZMA_TEXT_START=$(LZMA_TEXT_START) \
+ LOADER_DATA=$(LOADER_DATA) \
+ FLASH_OFFS=$(FLASH_OFFS) \
+ FLASH_MAX=$(FLASH_MAX) \
+ BOARD="$(BOARD)" \
+ clean all
+
+
+loader.gz: $(PKG_BUILD_DIR)/loader.bin
+ gzip -nc9 $< > $(LOADER_GZ)
+
+loader.elf: $(PKG_BUILD_DIR)/loader.elf
+ $(CP) $< $(LOADER_ELF)
+
+loader.bin: $(PKG_BUILD_DIR)/loader.bin
+ $(CP) $< $(LOADER_BIN)
+
+download:
+prepare: $(PKG_BUILD_DIR)/.prepared
+compile: loader-compile
+
+install:
+
+clean:
+ rm -rf $(PKG_BUILD_DIR)
+
diff --git a/target/linux/realtek/files/rtkload/LzmaDecode.c b/target/linux/realtek/image/lzma-loader/src/LzmaDecode.c
index 5c9d67f71..cb8345377 100644
--- a/target/linux/realtek/files/rtkload/LzmaDecode.c
+++ b/target/linux/realtek/image/lzma-loader/src/LzmaDecode.c
@@ -1,588 +1,584 @@
-/*
- LzmaDecode.c
- LZMA Decoder (optimized for Speed version)
-
- LZMA SDK 4.22 Copyright (c) 1999-2005 Igor Pavlov (2005-06-10)
- http://www.7-zip.org/
-
- LZMA SDK is licensed under two licenses:
- 1) GNU Lesser General Public License (GNU LGPL)
- 2) Common Public License (CPL)
- It means that you can select one of these two licenses and
- follow rules of that license.
-
- SPECIAL EXCEPTION:
- Igor Pavlov, as the author of this Code, expressly permits you to
- statically or dynamically link your Code (or bind by name) to the
- interfaces of this file without subjecting your linked Code to the
- terms of the CPL or GNU LGPL. Any modifications or additions
- to this file, however, are subject to the LGPL or CPL terms.
-*/
-
-#include "LzmaDecode.h"
-
-#ifndef Byte
-#define Byte unsigned char
-#endif
-
-#define kNumTopBits 24
-#define kTopValue ((UInt32)1 << kNumTopBits)
-
-#define kNumBitModelTotalBits 11
-#define kBitModelTotal (1 << kNumBitModelTotalBits)
-#define kNumMoveBits 5
-
-#define RC_READ_BYTE (*Buffer++)
-
-#define RC_INIT2 Code = 0; Range = 0xFFFFFFFF; \
- { int i; for(i = 0; i < 5; i++) { RC_TEST; Code = (Code << 8) | RC_READ_BYTE; }}
-
-#ifdef _LZMA_IN_CB
-
-#define RC_TEST { if (Buffer == BufferLim) \
- { SizeT size; int result = InCallback->Read(InCallback, &Buffer, &size); if (result != LZMA_RESULT_OK) return result; \
- BufferLim = Buffer + size; if (size == 0) return LZMA_RESULT_DATA_ERROR; }}
-
-#define RC_INIT Buffer = BufferLim = 0; RC_INIT2
-
-#else
-
-#define RC_TEST { if (Buffer == BufferLim) return LZMA_RESULT_DATA_ERROR; }
-
-#define RC_INIT(buffer, bufferSize) Buffer = buffer; BufferLim = buffer + bufferSize; RC_INIT2
-
-#endif
-
-#define RC_NORMALIZE if (Range < kTopValue) { RC_TEST; Range <<= 8; Code = (Code << 8) | RC_READ_BYTE; }
-
-#define IfBit0(p) RC_NORMALIZE; bound = (Range >> kNumBitModelTotalBits) * *(p); if (Code < bound)
-#define UpdateBit0(p) Range = bound; *(p) += (kBitModelTotal - *(p)) >> kNumMoveBits;
-#define UpdateBit1(p) Range -= bound; Code -= bound; *(p) -= (*(p)) >> kNumMoveBits;
-
-#define RC_GET_BIT2(p, mi, A0, A1) IfBit0(p) \
- { UpdateBit0(p); mi <<= 1; A0; } else \
- { UpdateBit1(p); mi = (mi + mi) + 1; A1; }
-
-#define RC_GET_BIT(p, mi) RC_GET_BIT2(p, mi, ; , ;)
-
-#define RangeDecoderBitTreeDecode(probs, numLevels, res) \
- { int i = numLevels; res = 1; \
- do { CProb *p = probs + res; RC_GET_BIT(p, res) } while(--i != 0); \
- res -= (1 << numLevels); }
-
-
-#define kNumPosBitsMax 4
-#define kNumPosStatesMax (1 << kNumPosBitsMax)
-
-#define kLenNumLowBits 3
-#define kLenNumLowSymbols (1 << kLenNumLowBits)
-#define kLenNumMidBits 3
-#define kLenNumMidSymbols (1 << kLenNumMidBits)
-#define kLenNumHighBits 8
-#define kLenNumHighSymbols (1 << kLenNumHighBits)
-
-#define LenChoice 0
-#define LenChoice2 (LenChoice + 1)
-#define LenLow (LenChoice2 + 1)
-#define LenMid (LenLow + (kNumPosStatesMax << kLenNumLowBits))
-#define LenHigh (LenMid + (kNumPosStatesMax << kLenNumMidBits))
-#define kNumLenProbs (LenHigh + kLenNumHighSymbols)
-
-
-#define kNumStates 12
-#define kNumLitStates 7
-
-#define kStartPosModelIndex 4
-#define kEndPosModelIndex 14
-#define kNumFullDistances (1 << (kEndPosModelIndex >> 1))
-
-#define kNumPosSlotBits 6
-#define kNumLenToPosStates 4
-
-#define kNumAlignBits 4
-#define kAlignTableSize (1 << kNumAlignBits)
-
-#define kMatchMinLen 2
-
-#define IsMatch 0
-#define IsRep (IsMatch + (kNumStates << kNumPosBitsMax))
-#define IsRepG0 (IsRep + kNumStates)
-#define IsRepG1 (IsRepG0 + kNumStates)
-#define IsRepG2 (IsRepG1 + kNumStates)
-#define IsRep0Long (IsRepG2 + kNumStates)
-#define PosSlot (IsRep0Long + (kNumStates << kNumPosBitsMax))
-#define SpecPos (PosSlot + (kNumLenToPosStates << kNumPosSlotBits))
-#define Align (SpecPos + kNumFullDistances - kEndPosModelIndex)
-#define LenCoder (Align + kAlignTableSize)
-#define RepLenCoder (LenCoder + kNumLenProbs)
-#define Literal (RepLenCoder + kNumLenProbs)
-
-#if Literal != LZMA_BASE_SIZE
-StopCompilingDueBUG
-#endif
-
-int LzmaDecodeProperties(CLzmaProperties *propsRes, const unsigned char *propsData, int size)
-{
- unsigned char prop0;
- if (size < LZMA_PROPERTIES_SIZE)
- return LZMA_RESULT_DATA_ERROR;
- prop0 = propsData[0];
- if (prop0 >= (9 * 5 * 5))
- return LZMA_RESULT_DATA_ERROR;
- {
- for (propsRes->pb = 0; prop0 >= (9 * 5); propsRes->pb++, prop0 -= (9 * 5));
- for (propsRes->lp = 0; prop0 >= 9; propsRes->lp++, prop0 -= 9);
- propsRes->lc = prop0;
- /*
- unsigned char remainder = (unsigned char)(prop0 / 9);
- propsRes->lc = prop0 % 9;
- propsRes->pb = remainder / 5;
- propsRes->lp = remainder % 5;
- */
- }
-
- #ifdef _LZMA_OUT_READ
- {
- int i;
- propsRes->DictionarySize = 0;
- for (i = 0; i < 4; i++)
- propsRes->DictionarySize += (UInt32)(propsData[1 + i]) << (i * 8);
- if (propsRes->DictionarySize == 0)
- propsRes->DictionarySize = 1;
- }
- #endif
- return LZMA_RESULT_OK;
-}
-
-#define kLzmaStreamWasFinishedId (-1)
-
-int LzmaDecode(CLzmaDecoderState *vs,
- #ifdef _LZMA_IN_CB
- ILzmaInCallback *InCallback,
- #else
- const unsigned char *inStream, SizeT inSize, SizeT *inSizeProcessed,
- #endif
- unsigned char *outStream, SizeT outSize, SizeT *outSizeProcessed)
-{
- CProb *p = vs->Probs;
- SizeT nowPos = 0;
- Byte previousByte = 0;
- UInt32 posStateMask = (1 << (vs->Properties.pb)) - 1;
- UInt32 literalPosMask = (1 << (vs->Properties.lp)) - 1;
- int lc = vs->Properties.lc;
-
- #ifdef _LZMA_OUT_READ
-
- UInt32 Range = vs->Range;
- UInt32 Code = vs->Code;
- #ifdef _LZMA_IN_CB
- const Byte *Buffer = vs->Buffer;
- const Byte *BufferLim = vs->BufferLim;
- #else
- const Byte *Buffer = inStream;
- const Byte *BufferLim = inStream + inSize;
- #endif
- int state = vs->State;
- UInt32 rep0 = vs->Reps[0], rep1 = vs->Reps[1], rep2 = vs->Reps[2], rep3 = vs->Reps[3];
- int len = vs->RemainLen;
- UInt32 globalPos = vs->GlobalPos;
- UInt32 distanceLimit = vs->DistanceLimit;
-
- Byte *dictionary = vs->Dictionary;
- UInt32 dictionarySize = vs->Properties.DictionarySize;
- UInt32 dictionaryPos = vs->DictionaryPos;
-
- Byte tempDictionary[4];
-
- #ifndef _LZMA_IN_CB
- *inSizeProcessed = 0;
- #endif
- *outSizeProcessed = 0;
- if (len == kLzmaStreamWasFinishedId)
- return LZMA_RESULT_OK;
-
- if (dictionarySize == 0)
- {
- dictionary = tempDictionary;
- dictionarySize = 1;
- tempDictionary[0] = vs->TempDictionary[0];
- }
-
- if (len == kLzmaNeedInitId)
- {
- {
- UInt32 numProbs = Literal + ((UInt32)LZMA_LIT_SIZE << (lc + vs->Properties.lp));
- UInt32 i;
- for (i = 0; i < numProbs; i++)
- p[i] = kBitModelTotal >> 1;
- rep0 = rep1 = rep2 = rep3 = 1;
- state = 0;
- globalPos = 0;
- distanceLimit = 0;
- dictionaryPos = 0;
- dictionary[dictionarySize - 1] = 0;
- #ifdef _LZMA_IN_CB
- RC_INIT;
- #else
- RC_INIT(inStream, inSize);
- #endif
- }
- len = 0;
- }
- while(len != 0 && nowPos < outSize)
- {
- UInt32 pos = dictionaryPos - rep0;
- if (pos >= dictionarySize)
- pos += dictionarySize;
- outStream[nowPos++] = dictionary[dictionaryPos] = dictionary[pos];
- if (++dictionaryPos == dictionarySize)
- dictionaryPos = 0;
- len--;
- }
- if (dictionaryPos == 0)
- previousByte = dictionary[dictionarySize - 1];
- else
- previousByte = dictionary[dictionaryPos - 1];
-
- #else /* if !_LZMA_OUT_READ */
-
- int state = 0;
- UInt32 rep0 = 1, rep1 = 1, rep2 = 1, rep3 = 1;
- int len = 0;
- const Byte *Buffer;
- const Byte *BufferLim;
- UInt32 Range;
- UInt32 Code;
-
- #ifndef _LZMA_IN_CB
- *inSizeProcessed = 0;
- #endif
- *outSizeProcessed = 0;
-
- {
- UInt32 i;
- UInt32 numProbs = Literal + ((UInt32)LZMA_LIT_SIZE << (lc + vs->Properties.lp));
- for (i = 0; i < numProbs; i++)
- p[i] = kBitModelTotal >> 1;
- }
-
- #ifdef _LZMA_IN_CB
- RC_INIT;
- #else
- RC_INIT(inStream, inSize);
- #endif
-
- #endif /* _LZMA_OUT_READ */
-
- while(nowPos < outSize)
- {
- CProb *prob;
- UInt32 bound;
- int posState = (int)(
- (nowPos
- #ifdef _LZMA_OUT_READ
- + globalPos
- #endif
- )
- & posStateMask);
-
- prob = p + IsMatch + (state << kNumPosBitsMax) + posState;
- IfBit0(prob)
- {
- int symbol = 1;
- UpdateBit0(prob)
- prob = p + Literal + (LZMA_LIT_SIZE *
- (((
- (nowPos
- #ifdef _LZMA_OUT_READ
- + globalPos
- #endif
- )
- & literalPosMask) << lc) + (previousByte >> (8 - lc))));
-
- if (state >= kNumLitStates)
- {
- int matchByte;
- #ifdef _LZMA_OUT_READ
- UInt32 pos = dictionaryPos - rep0;
- if (pos >= dictionarySize)
- pos += dictionarySize;
- matchByte = dictionary[pos];
- #else
- matchByte = outStream[nowPos - rep0];
- #endif
- do
- {
- int bit;
- CProb *probLit;
- matchByte <<= 1;
- bit = (matchByte & 0x100);
- probLit = prob + 0x100 + bit + symbol;
- RC_GET_BIT2(probLit, symbol, if (bit != 0) break, if (bit == 0) break)
- }
- while (symbol < 0x100);
- }
- while (symbol < 0x100)
- {
- CProb *probLit = prob + symbol;
- RC_GET_BIT(probLit, symbol)
- }
- previousByte = (Byte)symbol;
-
- outStream[nowPos++] = previousByte;
- #ifdef _LZMA_OUT_READ
- if (distanceLimit < dictionarySize)
- distanceLimit++;
-
- dictionary[dictionaryPos] = previousByte;
- if (++dictionaryPos == dictionarySize)
- dictionaryPos = 0;
- #endif
- if (state < 4) state = 0;
- else if (state < 10) state -= 3;
- else state -= 6;
- }
- else
- {
- UpdateBit1(prob);
- prob = p + IsRep + state;
- IfBit0(prob)
- {
- UpdateBit0(prob);
- rep3 = rep2;
- rep2 = rep1;
- rep1 = rep0;
- state = state < kNumLitStates ? 0 : 3;
- prob = p + LenCoder;
- }
- else
- {
- UpdateBit1(prob);
- prob = p + IsRepG0 + state;
- IfBit0(prob)
- {
- UpdateBit0(prob);
- prob = p + IsRep0Long + (state << kNumPosBitsMax) + posState;
- IfBit0(prob)
- {
- #ifdef _LZMA_OUT_READ
- UInt32 pos;
- #endif
- UpdateBit0(prob);
-
- #ifdef _LZMA_OUT_READ
- if (distanceLimit == 0)
- #else
- if (nowPos == 0)
- #endif
- return LZMA_RESULT_DATA_ERROR;
-
- state = state < kNumLitStates ? 9 : 11;
- #ifdef _LZMA_OUT_READ
- pos = dictionaryPos - rep0;
- if (pos >= dictionarySize)
- pos += dictionarySize;
- previousByte = dictionary[pos];
- dictionary[dictionaryPos] = previousByte;
- if (++dictionaryPos == dictionarySize)
- dictionaryPos = 0;
- #else
- previousByte = outStream[nowPos - rep0];
- #endif
- outStream[nowPos++] = previousByte;
- #ifdef _LZMA_OUT_READ
- if (distanceLimit < dictionarySize)
- distanceLimit++;
- #endif
-
- continue;
- }
- else
- {
- UpdateBit1(prob);
- }
- }
- else
- {
- UInt32 distance;
- UpdateBit1(prob);
- prob = p + IsRepG1 + state;
- IfBit0(prob)
- {
- UpdateBit0(prob);
- distance = rep1;
- }
- else
- {
- UpdateBit1(prob);
- prob = p + IsRepG2 + state;
- IfBit0(prob)
- {
- UpdateBit0(prob);
- distance = rep2;
- }
- else
- {
- UpdateBit1(prob);
- distance = rep3;
- rep3 = rep2;
- }
- rep2 = rep1;
- }
- rep1 = rep0;
- rep0 = distance;
- }
- state = state < kNumLitStates ? 8 : 11;
- prob = p + RepLenCoder;
- }
- {
- int numBits, offset;
- CProb *probLen = prob + LenChoice;
- IfBit0(probLen)
- {
- UpdateBit0(probLen);
- probLen = prob + LenLow + (posState << kLenNumLowBits);
- offset = 0;
- numBits = kLenNumLowBits;
- }
- else
- {
- UpdateBit1(probLen);
- probLen = prob + LenChoice2;
- IfBit0(probLen)
- {
- UpdateBit0(probLen);
- probLen = prob + LenMid + (posState << kLenNumMidBits);
- offset = kLenNumLowSymbols;
- numBits = kLenNumMidBits;
- }
- else
- {
- UpdateBit1(probLen);
- probLen = prob + LenHigh;
- offset = kLenNumLowSymbols + kLenNumMidSymbols;
- numBits = kLenNumHighBits;
- }
- }
- RangeDecoderBitTreeDecode(probLen, numBits, len);
- len += offset;
- }
-
- if (state < 4)
- {
- int posSlot;
- state += kNumLitStates;
- prob = p + PosSlot +
- ((len < kNumLenToPosStates ? len : kNumLenToPosStates - 1) <<
- kNumPosSlotBits);
- RangeDecoderBitTreeDecode(prob, kNumPosSlotBits, posSlot);
- if (posSlot >= kStartPosModelIndex)
- {
- int numDirectBits = ((posSlot >> 1) - 1);
- rep0 = (2 | ((UInt32)posSlot & 1));
- if (posSlot < kEndPosModelIndex)
- {
- rep0 <<= numDirectBits;
- prob = p + SpecPos + rep0 - posSlot - 1;
- }
- else
- {
- numDirectBits -= kNumAlignBits;
- do
- {
- RC_NORMALIZE
- Range >>= 1;
- rep0 <<= 1;
- if (Code >= Range)
- {
- Code -= Range;
- rep0 |= 1;
- }
- }
- while (--numDirectBits != 0);
- prob = p + Align;
- rep0 <<= kNumAlignBits;
- numDirectBits = kNumAlignBits;
- }
- {
- int i = 1;
- int mi = 1;
- do
- {
- CProb *prob3 = prob + mi;
- RC_GET_BIT2(prob3, mi, ; , rep0 |= i);
- i <<= 1;
- }
- while(--numDirectBits != 0);
- }
- }
- else
- rep0 = posSlot;
- if (++rep0 == (UInt32)(0))
- {
- /* it's for stream version */
- len = kLzmaStreamWasFinishedId;
- break;
- }
- }
-
- len += kMatchMinLen;
- #ifdef _LZMA_OUT_READ
- if (rep0 > distanceLimit)
- #else
- if (rep0 > nowPos)
- #endif
- return LZMA_RESULT_DATA_ERROR;
-
- #ifdef _LZMA_OUT_READ
- if (dictionarySize - distanceLimit > (UInt32)len)
- distanceLimit += len;
- else
- distanceLimit = dictionarySize;
- #endif
-
- do
- {
- #ifdef _LZMA_OUT_READ
- UInt32 pos = dictionaryPos - rep0;
- if (pos >= dictionarySize)
- pos += dictionarySize;
- previousByte = dictionary[pos];
- dictionary[dictionaryPos] = previousByte;
- if (++dictionaryPos == dictionarySize)
- dictionaryPos = 0;
- #else
- previousByte = outStream[nowPos - rep0];
- #endif
- len--;
- outStream[nowPos++] = previousByte;
- }
- while(len != 0 && nowPos < outSize);
- }
- }
- RC_NORMALIZE;
-
- #ifdef _LZMA_OUT_READ
- vs->Range = Range;
- vs->Code = Code;
- vs->DictionaryPos = dictionaryPos;
- vs->GlobalPos = globalPos + (UInt32)nowPos;
- vs->DistanceLimit = distanceLimit;
- vs->Reps[0] = rep0;
- vs->Reps[1] = rep1;
- vs->Reps[2] = rep2;
- vs->Reps[3] = rep3;
- vs->State = state;
- vs->RemainLen = len;
- vs->TempDictionary[0] = tempDictionary[0];
- #endif
-
- #ifdef _LZMA_IN_CB
- vs->Buffer = Buffer;
- vs->BufferLim = BufferLim;
- #else
- *inSizeProcessed = (SizeT)(Buffer - inStream);
- #endif
- *outSizeProcessed = nowPos;
- return LZMA_RESULT_OK;
-}
+/*
+ LzmaDecode.c
+ LZMA Decoder (optimized for Speed version)
+
+ LZMA SDK 4.40 Copyright (c) 1999-2006 Igor Pavlov (2006-05-01)
+ http://www.7-zip.org/
+
+ LZMA SDK is licensed under two licenses:
+ 1) GNU Lesser General Public License (GNU LGPL)
+ 2) Common Public License (CPL)
+ It means that you can select one of these two licenses and
+ follow rules of that license.
+
+ SPECIAL EXCEPTION:
+ Igor Pavlov, as the author of this Code, expressly permits you to
+ statically or dynamically link your Code (or bind by name) to the
+ interfaces of this file without subjecting your linked Code to the
+ terms of the CPL or GNU LGPL. Any modifications or additions
+ to this file, however, are subject to the LGPL or CPL terms.
+*/
+
+#include "LzmaDecode.h"
+
+#define kNumTopBits 24
+#define kTopValue ((UInt32)1 << kNumTopBits)
+
+#define kNumBitModelTotalBits 11
+#define kBitModelTotal (1 << kNumBitModelTotalBits)
+#define kNumMoveBits 5
+
+#define RC_READ_BYTE (*Buffer++)
+
+#define RC_INIT2 Code = 0; Range = 0xFFFFFFFF; \
+ { int i; for(i = 0; i < 5; i++) { RC_TEST; Code = (Code << 8) | RC_READ_BYTE; }}
+
+#ifdef _LZMA_IN_CB
+
+#define RC_TEST { if (Buffer == BufferLim) \
+ { SizeT size; int result = InCallback->Read(InCallback, &Buffer, &size); if (result != LZMA_RESULT_OK) return result; \
+ BufferLim = Buffer + size; if (size == 0) return LZMA_RESULT_DATA_ERROR; }}
+
+#define RC_INIT Buffer = BufferLim = 0; RC_INIT2
+
+#else
+
+#define RC_TEST { if (Buffer == BufferLim) return LZMA_RESULT_DATA_ERROR; }
+
+#define RC_INIT(buffer, bufferSize) Buffer = buffer; BufferLim = buffer + bufferSize; RC_INIT2
+
+#endif
+
+#define RC_NORMALIZE if (Range < kTopValue) { RC_TEST; Range <<= 8; Code = (Code << 8) | RC_READ_BYTE; }
+
+#define IfBit0(p) RC_NORMALIZE; bound = (Range >> kNumBitModelTotalBits) * *(p); if (Code < bound)
+#define UpdateBit0(p) Range = bound; *(p) += (kBitModelTotal - *(p)) >> kNumMoveBits;
+#define UpdateBit1(p) Range -= bound; Code -= bound; *(p) -= (*(p)) >> kNumMoveBits;
+
+#define RC_GET_BIT2(p, mi, A0, A1) IfBit0(p) \
+ { UpdateBit0(p); mi <<= 1; A0; } else \
+ { UpdateBit1(p); mi = (mi + mi) + 1; A1; }
+
+#define RC_GET_BIT(p, mi) RC_GET_BIT2(p, mi, ; , ;)
+
+#define RangeDecoderBitTreeDecode(probs, numLevels, res) \
+ { int i = numLevels; res = 1; \
+ do { CProb *p = probs + res; RC_GET_BIT(p, res) } while(--i != 0); \
+ res -= (1 << numLevels); }
+
+
+#define kNumPosBitsMax 4
+#define kNumPosStatesMax (1 << kNumPosBitsMax)
+
+#define kLenNumLowBits 3
+#define kLenNumLowSymbols (1 << kLenNumLowBits)
+#define kLenNumMidBits 3
+#define kLenNumMidSymbols (1 << kLenNumMidBits)
+#define kLenNumHighBits 8
+#define kLenNumHighSymbols (1 << kLenNumHighBits)
+
+#define LenChoice 0
+#define LenChoice2 (LenChoice + 1)
+#define LenLow (LenChoice2 + 1)
+#define LenMid (LenLow + (kNumPosStatesMax << kLenNumLowBits))
+#define LenHigh (LenMid + (kNumPosStatesMax << kLenNumMidBits))
+#define kNumLenProbs (LenHigh + kLenNumHighSymbols)
+
+
+#define kNumStates 12
+#define kNumLitStates 7
+
+#define kStartPosModelIndex 4
+#define kEndPosModelIndex 14
+#define kNumFullDistances (1 << (kEndPosModelIndex >> 1))
+
+#define kNumPosSlotBits 6
+#define kNumLenToPosStates 4
+
+#define kNumAlignBits 4
+#define kAlignTableSize (1 << kNumAlignBits)
+
+#define kMatchMinLen 2
+
+#define IsMatch 0
+#define IsRep (IsMatch + (kNumStates << kNumPosBitsMax))
+#define IsRepG0 (IsRep + kNumStates)
+#define IsRepG1 (IsRepG0 + kNumStates)
+#define IsRepG2 (IsRepG1 + kNumStates)
+#define IsRep0Long (IsRepG2 + kNumStates)
+#define PosSlot (IsRep0Long + (kNumStates << kNumPosBitsMax))
+#define SpecPos (PosSlot + (kNumLenToPosStates << kNumPosSlotBits))
+#define Align (SpecPos + kNumFullDistances - kEndPosModelIndex)
+#define LenCoder (Align + kAlignTableSize)
+#define RepLenCoder (LenCoder + kNumLenProbs)
+#define Literal (RepLenCoder + kNumLenProbs)
+
+#if Literal != LZMA_BASE_SIZE
+StopCompilingDueBUG
+#endif
+
+int LzmaDecodeProperties(CLzmaProperties *propsRes, const unsigned char *propsData, int size)
+{
+ unsigned char prop0;
+ if (size < LZMA_PROPERTIES_SIZE)
+ return LZMA_RESULT_DATA_ERROR;
+ prop0 = propsData[0];
+ if (prop0 >= (9 * 5 * 5))
+ return LZMA_RESULT_DATA_ERROR;
+ {
+ for (propsRes->pb = 0; prop0 >= (9 * 5); propsRes->pb++, prop0 -= (9 * 5));
+ for (propsRes->lp = 0; prop0 >= 9; propsRes->lp++, prop0 -= 9);
+ propsRes->lc = prop0;
+ /*
+ unsigned char remainder = (unsigned char)(prop0 / 9);
+ propsRes->lc = prop0 % 9;
+ propsRes->pb = remainder / 5;
+ propsRes->lp = remainder % 5;
+ */
+ }
+
+ #ifdef _LZMA_OUT_READ
+ {
+ int i;
+ propsRes->DictionarySize = 0;
+ for (i = 0; i < 4; i++)
+ propsRes->DictionarySize += (UInt32)(propsData[1 + i]) << (i * 8);
+ if (propsRes->DictionarySize == 0)
+ propsRes->DictionarySize = 1;
+ }
+ #endif
+ return LZMA_RESULT_OK;
+}
+
+#define kLzmaStreamWasFinishedId (-1)
+
+int LzmaDecode(CLzmaDecoderState *vs,
+ #ifdef _LZMA_IN_CB
+ ILzmaInCallback *InCallback,
+ #else
+ const unsigned char *inStream, SizeT inSize, SizeT *inSizeProcessed,
+ #endif
+ unsigned char *outStream, SizeT outSize, SizeT *outSizeProcessed)
+{
+ CProb *p = vs->Probs;
+ SizeT nowPos = 0;
+ Byte previousByte = 0;
+ UInt32 posStateMask = (1 << (vs->Properties.pb)) - 1;
+ UInt32 literalPosMask = (1 << (vs->Properties.lp)) - 1;
+ int lc = vs->Properties.lc;
+
+ #ifdef _LZMA_OUT_READ
+
+ UInt32 Range = vs->Range;
+ UInt32 Code = vs->Code;
+ #ifdef _LZMA_IN_CB
+ const Byte *Buffer = vs->Buffer;
+ const Byte *BufferLim = vs->BufferLim;
+ #else
+ const Byte *Buffer = inStream;
+ const Byte *BufferLim = inStream + inSize;
+ #endif
+ int state = vs->State;
+ UInt32 rep0 = vs->Reps[0], rep1 = vs->Reps[1], rep2 = vs->Reps[2], rep3 = vs->Reps[3];
+ int len = vs->RemainLen;
+ UInt32 globalPos = vs->GlobalPos;
+ UInt32 distanceLimit = vs->DistanceLimit;
+
+ Byte *dictionary = vs->Dictionary;
+ UInt32 dictionarySize = vs->Properties.DictionarySize;
+ UInt32 dictionaryPos = vs->DictionaryPos;
+
+ Byte tempDictionary[4];
+
+ #ifndef _LZMA_IN_CB
+ *inSizeProcessed = 0;
+ #endif
+ *outSizeProcessed = 0;
+ if (len == kLzmaStreamWasFinishedId)
+ return LZMA_RESULT_OK;
+
+ if (dictionarySize == 0)
+ {
+ dictionary = tempDictionary;
+ dictionarySize = 1;
+ tempDictionary[0] = vs->TempDictionary[0];
+ }
+
+ if (len == kLzmaNeedInitId)
+ {
+ {
+ UInt32 numProbs = Literal + ((UInt32)LZMA_LIT_SIZE << (lc + vs->Properties.lp));
+ UInt32 i;
+ for (i = 0; i < numProbs; i++)
+ p[i] = kBitModelTotal >> 1;
+ rep0 = rep1 = rep2 = rep3 = 1;
+ state = 0;
+ globalPos = 0;
+ distanceLimit = 0;
+ dictionaryPos = 0;
+ dictionary[dictionarySize - 1] = 0;
+ #ifdef _LZMA_IN_CB
+ RC_INIT;
+ #else
+ RC_INIT(inStream, inSize);
+ #endif
+ }
+ len = 0;
+ }
+ while(len != 0 && nowPos < outSize)
+ {
+ UInt32 pos = dictionaryPos - rep0;
+ if (pos >= dictionarySize)
+ pos += dictionarySize;
+ outStream[nowPos++] = dictionary[dictionaryPos] = dictionary[pos];
+ if (++dictionaryPos == dictionarySize)
+ dictionaryPos = 0;
+ len--;
+ }
+ if (dictionaryPos == 0)
+ previousByte = dictionary[dictionarySize - 1];
+ else
+ previousByte = dictionary[dictionaryPos - 1];
+
+ #else /* if !_LZMA_OUT_READ */
+
+ int state = 0;
+ UInt32 rep0 = 1, rep1 = 1, rep2 = 1, rep3 = 1;
+ int len = 0;
+ const Byte *Buffer;
+ const Byte *BufferLim;
+ UInt32 Range;
+ UInt32 Code;
+
+ #ifndef _LZMA_IN_CB
+ *inSizeProcessed = 0;
+ #endif
+ *outSizeProcessed = 0;
+
+ {
+ UInt32 i;
+ UInt32 numProbs = Literal + ((UInt32)LZMA_LIT_SIZE << (lc + vs->Properties.lp));
+ for (i = 0; i < numProbs; i++)
+ p[i] = kBitModelTotal >> 1;
+ }
+
+ #ifdef _LZMA_IN_CB
+ RC_INIT;
+ #else
+ RC_INIT(inStream, inSize);
+ #endif
+
+ #endif /* _LZMA_OUT_READ */
+
+ while(nowPos < outSize)
+ {
+ CProb *prob;
+ UInt32 bound;
+ int posState = (int)(
+ (nowPos
+ #ifdef _LZMA_OUT_READ
+ + globalPos
+ #endif
+ )
+ & posStateMask);
+
+ prob = p + IsMatch + (state << kNumPosBitsMax) + posState;
+ IfBit0(prob)
+ {
+ int symbol = 1;
+ UpdateBit0(prob)
+ prob = p + Literal + (LZMA_LIT_SIZE *
+ (((
+ (nowPos
+ #ifdef _LZMA_OUT_READ
+ + globalPos
+ #endif
+ )
+ & literalPosMask) << lc) + (previousByte >> (8 - lc))));
+
+ if (state >= kNumLitStates)
+ {
+ int matchByte;
+ #ifdef _LZMA_OUT_READ
+ UInt32 pos = dictionaryPos - rep0;
+ if (pos >= dictionarySize)
+ pos += dictionarySize;
+ matchByte = dictionary[pos];
+ #else
+ matchByte = outStream[nowPos - rep0];
+ #endif
+ do
+ {
+ int bit;
+ CProb *probLit;
+ matchByte <<= 1;
+ bit = (matchByte & 0x100);
+ probLit = prob + 0x100 + bit + symbol;
+ RC_GET_BIT2(probLit, symbol, if (bit != 0) break, if (bit == 0) break)
+ }
+ while (symbol < 0x100);
+ }
+ while (symbol < 0x100)
+ {
+ CProb *probLit = prob + symbol;
+ RC_GET_BIT(probLit, symbol)
+ }
+ previousByte = (Byte)symbol;
+
+ outStream[nowPos++] = previousByte;
+ #ifdef _LZMA_OUT_READ
+ if (distanceLimit < dictionarySize)
+ distanceLimit++;
+
+ dictionary[dictionaryPos] = previousByte;
+ if (++dictionaryPos == dictionarySize)
+ dictionaryPos = 0;
+ #endif
+ if (state < 4) state = 0;
+ else if (state < 10) state -= 3;
+ else state -= 6;
+ }
+ else
+ {
+ UpdateBit1(prob);
+ prob = p + IsRep + state;
+ IfBit0(prob)
+ {
+ UpdateBit0(prob);
+ rep3 = rep2;
+ rep2 = rep1;
+ rep1 = rep0;
+ state = state < kNumLitStates ? 0 : 3;
+ prob = p + LenCoder;
+ }
+ else
+ {
+ UpdateBit1(prob);
+ prob = p + IsRepG0 + state;
+ IfBit0(prob)
+ {
+ UpdateBit0(prob);
+ prob = p + IsRep0Long + (state << kNumPosBitsMax) + posState;
+ IfBit0(prob)
+ {
+ #ifdef _LZMA_OUT_READ
+ UInt32 pos;
+ #endif
+ UpdateBit0(prob);
+
+ #ifdef _LZMA_OUT_READ
+ if (distanceLimit == 0)
+ #else
+ if (nowPos == 0)
+ #endif
+ return LZMA_RESULT_DATA_ERROR;
+
+ state = state < kNumLitStates ? 9 : 11;
+ #ifdef _LZMA_OUT_READ
+ pos = dictionaryPos - rep0;
+ if (pos >= dictionarySize)
+ pos += dictionarySize;
+ previousByte = dictionary[pos];
+ dictionary[dictionaryPos] = previousByte;
+ if (++dictionaryPos == dictionarySize)
+ dictionaryPos = 0;
+ #else
+ previousByte = outStream[nowPos - rep0];
+ #endif
+ outStream[nowPos++] = previousByte;
+ #ifdef _LZMA_OUT_READ
+ if (distanceLimit < dictionarySize)
+ distanceLimit++;
+ #endif
+
+ continue;
+ }
+ else
+ {
+ UpdateBit1(prob);
+ }
+ }
+ else
+ {
+ UInt32 distance;
+ UpdateBit1(prob);
+ prob = p + IsRepG1 + state;
+ IfBit0(prob)
+ {
+ UpdateBit0(prob);
+ distance = rep1;
+ }
+ else
+ {
+ UpdateBit1(prob);
+ prob = p + IsRepG2 + state;
+ IfBit0(prob)
+ {
+ UpdateBit0(prob);
+ distance = rep2;
+ }
+ else
+ {
+ UpdateBit1(prob);
+ distance = rep3;
+ rep3 = rep2;
+ }
+ rep2 = rep1;
+ }
+ rep1 = rep0;
+ rep0 = distance;
+ }
+ state = state < kNumLitStates ? 8 : 11;
+ prob = p + RepLenCoder;
+ }
+ {
+ int numBits, offset;
+ CProb *probLen = prob + LenChoice;
+ IfBit0(probLen)
+ {
+ UpdateBit0(probLen);
+ probLen = prob + LenLow + (posState << kLenNumLowBits);
+ offset = 0;
+ numBits = kLenNumLowBits;
+ }
+ else
+ {
+ UpdateBit1(probLen);
+ probLen = prob + LenChoice2;
+ IfBit0(probLen)
+ {
+ UpdateBit0(probLen);
+ probLen = prob + LenMid + (posState << kLenNumMidBits);
+ offset = kLenNumLowSymbols;
+ numBits = kLenNumMidBits;
+ }
+ else
+ {
+ UpdateBit1(probLen);
+ probLen = prob + LenHigh;
+ offset = kLenNumLowSymbols + kLenNumMidSymbols;
+ numBits = kLenNumHighBits;
+ }
+ }
+ RangeDecoderBitTreeDecode(probLen, numBits, len);
+ len += offset;
+ }
+
+ if (state < 4)
+ {
+ int posSlot;
+ state += kNumLitStates;
+ prob = p + PosSlot +
+ ((len < kNumLenToPosStates ? len : kNumLenToPosStates - 1) <<
+ kNumPosSlotBits);
+ RangeDecoderBitTreeDecode(prob, kNumPosSlotBits, posSlot);
+ if (posSlot >= kStartPosModelIndex)
+ {
+ int numDirectBits = ((posSlot >> 1) - 1);
+ rep0 = (2 | ((UInt32)posSlot & 1));
+ if (posSlot < kEndPosModelIndex)
+ {
+ rep0 <<= numDirectBits;
+ prob = p + SpecPos + rep0 - posSlot - 1;
+ }
+ else
+ {
+ numDirectBits -= kNumAlignBits;
+ do
+ {
+ RC_NORMALIZE
+ Range >>= 1;
+ rep0 <<= 1;
+ if (Code >= Range)
+ {
+ Code -= Range;
+ rep0 |= 1;
+ }
+ }
+ while (--numDirectBits != 0);
+ prob = p + Align;
+ rep0 <<= kNumAlignBits;
+ numDirectBits = kNumAlignBits;
+ }
+ {
+ int i = 1;
+ int mi = 1;
+ do
+ {
+ CProb *prob3 = prob + mi;
+ RC_GET_BIT2(prob3, mi, ; , rep0 |= i);
+ i <<= 1;
+ }
+ while(--numDirectBits != 0);
+ }
+ }
+ else
+ rep0 = posSlot;
+ if (++rep0 == (UInt32)(0))
+ {
+ /* it's for stream version */
+ len = kLzmaStreamWasFinishedId;
+ break;
+ }
+ }
+
+ len += kMatchMinLen;
+ #ifdef _LZMA_OUT_READ
+ if (rep0 > distanceLimit)
+ #else
+ if (rep0 > nowPos)
+ #endif
+ return LZMA_RESULT_DATA_ERROR;
+
+ #ifdef _LZMA_OUT_READ
+ if (dictionarySize - distanceLimit > (UInt32)len)
+ distanceLimit += len;
+ else
+ distanceLimit = dictionarySize;
+ #endif
+
+ do
+ {
+ #ifdef _LZMA_OUT_READ
+ UInt32 pos = dictionaryPos - rep0;
+ if (pos >= dictionarySize)
+ pos += dictionarySize;
+ previousByte = dictionary[pos];
+ dictionary[dictionaryPos] = previousByte;
+ if (++dictionaryPos == dictionarySize)
+ dictionaryPos = 0;
+ #else
+ previousByte = outStream[nowPos - rep0];
+ #endif
+ len--;
+ outStream[nowPos++] = previousByte;
+ }
+ while(len != 0 && nowPos < outSize);
+ }
+ }
+ RC_NORMALIZE;
+
+ #ifdef _LZMA_OUT_READ
+ vs->Range = Range;
+ vs->Code = Code;
+ vs->DictionaryPos = dictionaryPos;
+ vs->GlobalPos = globalPos + (UInt32)nowPos;
+ vs->DistanceLimit = distanceLimit;
+ vs->Reps[0] = rep0;
+ vs->Reps[1] = rep1;
+ vs->Reps[2] = rep2;
+ vs->Reps[3] = rep3;
+ vs->State = state;
+ vs->RemainLen = len;
+ vs->TempDictionary[0] = tempDictionary[0];
+ #endif
+
+ #ifdef _LZMA_IN_CB
+ vs->Buffer = Buffer;
+ vs->BufferLim = BufferLim;
+ #else
+ *inSizeProcessed = (SizeT)(Buffer - inStream);
+ #endif
+ *outSizeProcessed = nowPos;
+ return LZMA_RESULT_OK;
+}
diff --git a/target/linux/realtek/files/rtkload/LzmaDecode.h b/target/linux/realtek/image/lzma-loader/src/LzmaDecode.h
index 35e37ed0d..2870eeb9c 100644
--- a/target/linux/realtek/files/rtkload/LzmaDecode.h
+++ b/target/linux/realtek/image/lzma-loader/src/LzmaDecode.h
@@ -1,131 +1,113 @@
-/*
- LzmaDecode.h
- LZMA Decoder interface
-
- LZMA SDK 4.21 Copyright (c) 1999-2005 Igor Pavlov (2005-06-08)
- http://www.7-zip.org/
-
- LZMA SDK is licensed under two licenses:
- 1) GNU Lesser General Public License (GNU LGPL)
- 2) Common Public License (CPL)
- It means that you can select one of these two licenses and
- follow rules of that license.
-
- SPECIAL EXCEPTION:
- Igor Pavlov, as the author of this code, expressly permits you to
- statically or dynamically link your code (or bind by name) to the
- interfaces of this file without subjecting your linked code to the
- terms of the CPL or GNU LGPL. Any modifications or additions
- to this file, however, are subject to the LGPL or CPL terms.
-*/
-
-#ifndef __LZMADECODE_H
-#define __LZMADECODE_H
-
-/* #define _LZMA_IN_CB */
-/* Use callback for input data */
-
-/* #define _LZMA_OUT_READ */
-/* Use read function for output data */
-
-/* #define _LZMA_PROB32 */
-/* It can increase speed on some 32-bit CPUs,
- but memory usage will be doubled in that case */
-
-/* #define _LZMA_LOC_OPT */
-/* Enable local speed optimizations inside code */
-
-/* #define _LZMA_SYSTEM_SIZE_T */
-/* Use system's size_t. You can use it to enable 64-bit sizes supporting*/
-
-#ifndef UInt32
-#ifdef _LZMA_UINT32_IS_ULONG
-#define UInt32 unsigned long
-#else
-#define UInt32 unsigned int
-#endif
-#endif
-
-#ifndef SizeT
-#ifdef _LZMA_SYSTEM_SIZE_T
-#include <stddef.h>
-#define SizeT size_t
-#else
-#define SizeT UInt32
-#endif
-#endif
-
-#ifdef _LZMA_PROB32
-#define CProb UInt32
-#else
-#define CProb unsigned short
-#endif
-
-#define LZMA_RESULT_OK 0
-#define LZMA_RESULT_DATA_ERROR 1
-
-#ifdef _LZMA_IN_CB
-typedef struct _ILzmaInCallback
-{
- int (*Read)(void *object, const unsigned char **buffer, SizeT *bufferSize);
-} ILzmaInCallback;
-#endif
-
-#define LZMA_BASE_SIZE 1846
-#define LZMA_LIT_SIZE 768
-
-#define LZMA_PROPERTIES_SIZE 5
-
-typedef struct _CLzmaProperties
-{
- int lc;
- int lp;
- int pb;
- #ifdef _LZMA_OUT_READ
- UInt32 DictionarySize;
- #endif
-}CLzmaProperties;
-
-int LzmaDecodeProperties(CLzmaProperties *propsRes, const unsigned char *propsData, int size);
-
-#define LzmaGetNumProbs(Properties) (LZMA_BASE_SIZE + (LZMA_LIT_SIZE << ((Properties)->lc + (Properties)->lp)))
-
-#define kLzmaNeedInitId (-2)
-
-typedef struct _CLzmaDecoderState
-{
- CLzmaProperties Properties;
- CProb *Probs;
-
- #ifdef _LZMA_IN_CB
- const unsigned char *Buffer;
- const unsigned char *BufferLim;
- #endif
-
- #ifdef _LZMA_OUT_READ
- unsigned char *Dictionary;
- UInt32 Range;
- UInt32 Code;
- UInt32 DictionaryPos;
- UInt32 GlobalPos;
- UInt32 DistanceLimit;
- UInt32 Reps[4];
- int State;
- int RemainLen;
- unsigned char TempDictionary[4];
- #endif
-} CLzmaDecoderState;
-
-#ifdef _LZMA_OUT_READ
-#define LzmaDecoderInit(vs) { (vs)->RemainLen = kLzmaNeedInitId; }
-#endif
-
-int LzmaDecode(CLzmaDecoderState *vs,
- #ifdef _LZMA_IN_CB
- ILzmaInCallback *inCallback,
- #else
- const unsigned char *inStream, SizeT inSize, SizeT *inSizeProcessed,
- #endif
- unsigned char *outStream, SizeT outSize, SizeT *outSizeProcessed);
-
-#endif
+/*
+ LzmaDecode.h
+ LZMA Decoder interface
+
+ LZMA SDK 4.40 Copyright (c) 1999-2006 Igor Pavlov (2006-05-01)
+ http://www.7-zip.org/
+
+ LZMA SDK is licensed under two licenses:
+ 1) GNU Lesser General Public License (GNU LGPL)
+ 2) Common Public License (CPL)
+ It means that you can select one of these two licenses and
+ follow rules of that license.
+
+ SPECIAL EXCEPTION:
+ Igor Pavlov, as the author of this code, expressly permits you to
+ statically or dynamically link your code (or bind by name) to the
+ interfaces of this file without subjecting your linked code to the
+ terms of the CPL or GNU LGPL. Any modifications or additions
+ to this file, however, are subject to the LGPL or CPL terms.
+*/
+
+#ifndef __LZMADECODE_H
+#define __LZMADECODE_H
+
+#include "LzmaTypes.h"
+
+/* #define _LZMA_IN_CB */
+/* Use callback for input data */
+
+/* #define _LZMA_OUT_READ */
+/* Use read function for output data */
+
+/* #define _LZMA_PROB32 */
+/* It can increase speed on some 32-bit CPUs,
+ but memory usage will be doubled in that case */
+
+/* #define _LZMA_LOC_OPT */
+/* Enable local speed optimizations inside code */
+
+#ifdef _LZMA_PROB32
+#define CProb UInt32
+#else
+#define CProb UInt16
+#endif
+
+#define LZMA_RESULT_OK 0
+#define LZMA_RESULT_DATA_ERROR 1
+
+#ifdef _LZMA_IN_CB
+typedef struct _ILzmaInCallback
+{
+ int (*Read)(void *object, const unsigned char **buffer, SizeT *bufferSize);
+} ILzmaInCallback;
+#endif
+
+#define LZMA_BASE_SIZE 1846
+#define LZMA_LIT_SIZE 768
+
+#define LZMA_PROPERTIES_SIZE 5
+
+typedef struct _CLzmaProperties
+{
+ int lc;
+ int lp;
+ int pb;
+ #ifdef _LZMA_OUT_READ
+ UInt32 DictionarySize;
+ #endif
+}CLzmaProperties;
+
+int LzmaDecodeProperties(CLzmaProperties *propsRes, const unsigned char *propsData, int size);
+
+#define LzmaGetNumProbs(Properties) (LZMA_BASE_SIZE + (LZMA_LIT_SIZE << ((Properties)->lc + (Properties)->lp)))
+
+#define kLzmaNeedInitId (-2)
+
+typedef struct _CLzmaDecoderState
+{
+ CLzmaProperties Properties;
+ CProb *Probs;
+
+ #ifdef _LZMA_IN_CB
+ const unsigned char *Buffer;
+ const unsigned char *BufferLim;
+ #endif
+
+ #ifdef _LZMA_OUT_READ
+ unsigned char *Dictionary;
+ UInt32 Range;
+ UInt32 Code;
+ UInt32 DictionaryPos;
+ UInt32 GlobalPos;
+ UInt32 DistanceLimit;
+ UInt32 Reps[4];
+ int State;
+ int RemainLen;
+ unsigned char TempDictionary[4];
+ #endif
+} CLzmaDecoderState;
+
+#ifdef _LZMA_OUT_READ
+#define LzmaDecoderInit(vs) { (vs)->RemainLen = kLzmaNeedInitId; }
+#endif
+
+int LzmaDecode(CLzmaDecoderState *vs,
+ #ifdef _LZMA_IN_CB
+ ILzmaInCallback *inCallback,
+ #else
+ const unsigned char *inStream, SizeT inSize, SizeT *inSizeProcessed,
+ #endif
+ unsigned char *outStream, SizeT outSize, SizeT *outSizeProcessed);
+
+#endif
diff --git a/target/linux/realtek/image/lzma-loader/src/LzmaTypes.h b/target/linux/realtek/image/lzma-loader/src/LzmaTypes.h
new file mode 100644
index 000000000..8f13553a3
--- /dev/null
+++ b/target/linux/realtek/image/lzma-loader/src/LzmaTypes.h
@@ -0,0 +1,45 @@
+/*
+LzmaTypes.h
+
+Types for LZMA Decoder
+
+This file written and distributed to public domain by Igor Pavlov.
+This file is part of LZMA SDK 4.40 (2006-05-01)
+*/
+
+#ifndef __LZMATYPES_H
+#define __LZMATYPES_H
+
+#ifndef _7ZIP_BYTE_DEFINED
+#define _7ZIP_BYTE_DEFINED
+typedef unsigned char Byte;
+#endif
+
+#ifndef _7ZIP_UINT16_DEFINED
+#define _7ZIP_UINT16_DEFINED
+typedef unsigned short UInt16;
+#endif
+
+#ifndef _7ZIP_UINT32_DEFINED
+#define _7ZIP_UINT32_DEFINED
+#ifdef _LZMA_UINT32_IS_ULONG
+typedef unsigned long UInt32;
+#else
+typedef unsigned int UInt32;
+#endif
+#endif
+
+#define _LZMA_NO_SYSTEM_SIZE_T
+/* You can use it, if you don't want <stddef.h> */
+
+#ifndef _7ZIP_SIZET_DEFINED
+#define _7ZIP_SIZET_DEFINED
+#ifdef _LZMA_NO_SYSTEM_SIZE_T
+typedef UInt32 SizeT;
+#else
+#include <stddef.h>
+typedef size_t SizeT;
+#endif
+#endif
+
+#endif
diff --git a/target/linux/realtek/image/lzma-loader/src/Makefile b/target/linux/realtek/image/lzma-loader/src/Makefile
new file mode 100644
index 000000000..3355d7b20
--- /dev/null
+++ b/target/linux/realtek/image/lzma-loader/src/Makefile
@@ -0,0 +1,117 @@
+#
+# Makefile for the LZMA compressed kernel loader for
+# Realtek rtl819xx based boards
+#
+# Copyright (C) 2011 Gabor Juhos <juhosg@openwrt.org>
+# Copyright (C) 2013 Roman Yeryomin <roman@advem.lv>
+#
+# Some parts of this file was based on the OpenWrt specific lzma-loader
+# for the BCM47xx and ADM5120 based boards:
+# Copyright (C) 2004 Manuel Novoa III (mjn3@codepoet.org)
+# Copyright (C) 2005 Mineharu Takahara <mtakahar@yahoo.com>
+# Copyright (C) 2005 by Oleg I. Vdovikin <oleg@cs.msu.su>
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 as published
+# by the Free Software Foundation.
+#
+
+LOADADDR :=
+KERNELENTRY :=
+LZMA_TEXT_START := 0x80a00000
+LOADER_DATA :=
+BOARD :=
+FLASH_OFFS :=
+FLASH_MAX :=
+
+CC := $(CROSS_COMPILE)gcc
+LD := $(CROSS_COMPILE)ld
+OBJCOPY := $(CROSS_COMPILE)objcopy
+OBJDUMP := $(CROSS_COMPILE)objdump
+
+BIN_FLAGS := -O binary -R .reginfo -R .note -R .comment -R .mdebug -S
+
+CFLAGS = -D__KERNEL__ -Wall -Wstrict-prototypes -Wno-trigraphs -Os \
+ -fno-strict-aliasing -fno-common -fomit-frame-pointer -G 0 \
+ -mno-abicalls -fno-pic -ffunction-sections -pipe -mlong-calls \
+ -fno-common -ffreestanding -fhonour-copts -mabi=32 -Wa,-32
+CFLAGS += -D_LZMA_PROB32
+CFLAGS += -I$(LINUX_DIR)/arch/rlx/include
+CFLAGS += -I$(LINUX_DIR)/include/linux
+CFLAGS += -I$(LINUX_DIR)/arch/rlx/bsp
+CFLAGS += -I$(LINUX_DIR)/include
+CFLAGS += -I$(LINUX_DIR)/arch/rlx/include/asm/mach-generic
+
+ASFLAGS = $(CFLAGS) -D__ASSEMBLY__
+
+LDFLAGS = -static --gc-sections -no-warn-mismatch
+LDFLAGS += -e startup -T loader.lds -Ttext $(LZMA_TEXT_START)
+
+O_FORMAT = $(shell $(OBJDUMP) -i | head -2 | grep elf32)
+
+OBJECTS := head.o loader.o cache.o board.o printf.o LzmaDecode.o
+
+# Realtek chips have different march'es, e.g. rlx4181 and rlx5281
+ifneq ($(strip $(MARCH)),)
+CFLAGS += -Wa,-march=$(MARCH) -march=$(MARCH)
+else
+CFLAGS += -Wa,-march=rlx4181 -march=rlx4181
+endif
+
+# hacky way to get/define real kernel_entry address
+# see image/Makefile and loader.c for details
+ifneq ($(strip $(KERNELENTRY)),)
+CFLAGS += -DKERNELENTRY=$(KERNELENTRY)
+endif
+
+ifneq ($(strip $(LOADER_DATA)),)
+OBJECTS += data.o
+CFLAGS += -DLZMA_WRAPPER=1 -DLOADADDR=$(LOADADDR)
+endif
+
+ifneq ($(strip $(KERNEL_CMDLINE)),)
+CFLAGS += -DCONFIG_KERNEL_CMDLINE='"$(KERNEL_CMDLINE)"'
+endif
+
+ifneq ($(strip $(FLASH_OFFS)),)
+CFLAGS += -DCONFIG_FLASH_OFFS=$(FLASH_OFFS)
+endif
+
+ifneq ($(strip $(FLASH_MAX)),)
+CFLAGS += -DCONFIG_FLASH_MAX=$(FLASH_MAX)
+endif
+
+BOARD_DEF := $(shell echo $(strip $(BOARD)) | tr a-z A-Z | tr - _)
+ifneq ($(BOARD_DEF),)
+CFLAGS += -DCONFIG_BOARD_$(BOARD_DEF)
+endif
+
+all: loader.bin
+
+# Don't build dependencies, this may die if $(CC) isn't gcc
+dep:
+
+install:
+
+%.o : %.c
+ $(CC) $(CFLAGS) -c -o $@ $<
+
+%.o : %.S
+ $(CC) $(ASFLAGS) -c -o $@ $<
+
+data.o: $(LOADER_DATA)
+ $(LD) -r -b binary --oformat $(O_FORMAT) -T lzma-data.lds -o $@ $<
+
+loader.bin: loader.elf
+ $(OBJCOPY) $(BIN_FLAGS) $< $@
+
+loader.elf: $(OBJECTS)
+ $(LD) $(LDFLAGS) -o $@ $(OBJECTS)
+
+mrproper: clean
+
+clean:
+ rm -f *.elf *.bin *.o
+
+
+
diff --git a/target/linux/realtek/image/lzma-loader/src/board.c b/target/linux/realtek/image/lzma-loader/src/board.c
new file mode 100644
index 000000000..0533abace
--- /dev/null
+++ b/target/linux/realtek/image/lzma-loader/src/board.c
@@ -0,0 +1,45 @@
+/*
+ * LZMA compressed kernel loader for Realtek 819X
+ *
+ * Copyright (C) 2011 Gabor Juhos <juhosg@openwrt.org>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published
+ * by the Free Software Foundation.
+ */
+
+#include <stddef.h>
+
+
+#define UART_THR 0xb8002000
+#define UART_LSR 0xb8002014
+
+#define REG32(reg) (*(volatile unsigned int *)((unsigned int)reg))
+
+
+void serial_outc(char c)
+{
+ int i=0;
+
+ while (1)
+ {
+ i++;
+ if (i >=0x6000)
+ break;
+
+ if (REG32(UART_LSR) & 0x20000000)
+ break;
+ }
+ REG32(UART_THR) = (c << 24);
+}
+
+
+void board_putc(int ch)
+{
+ serial_outc(ch);
+}
+
+void board_init(void)
+{
+
+}
diff --git a/target/linux/realtek/image/lzma-loader/src/cache.c b/target/linux/realtek/image/lzma-loader/src/cache.c
new file mode 100644
index 000000000..6ecb07071
--- /dev/null
+++ b/target/linux/realtek/image/lzma-loader/src/cache.c
@@ -0,0 +1,137 @@
+/*
+ * LZMA compressed kernel loader for Realtek rtl819xx
+ *
+ * Copyright (C) 2013 Roman Yeryomin <roman@advem.lv>
+ *
+ * The cache manipulation routines has been taken from
+ * Realtek SDK (rtlkoad utility).
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published
+ * by the Free Software Foundation.
+ *
+ */
+#include <linux/autoconf.h>
+#include <linux/linkage.h>
+#include <asm/ptrace.h>
+#include <asm/rlxregs.h>
+#include <asm/addrspace.h>
+
+/* For Realtek RTL865XC Network platform series */
+#define _ICACHE_SIZE (16 * 1024) /* 16K bytes */
+#define _DCACHE_SIZE (8 * 1024) /* 8K bytes */
+#define _CACHE_LINE_SIZE 4 /* 4 words */
+
+void flush_cache(void);
+static void flush_icache(unsigned int start, unsigned int end);
+static void flush_dcache(unsigned int start, unsigned int end);
+
+void flush_cache(void)
+{
+
+ flush_dcache(KSEG0, KSEG0+_DCACHE_SIZE);
+ flush_icache(KSEG0, KSEG0+_ICACHE_SIZE);
+
+}
+
+static void flush_icache(unsigned int start, unsigned int end)
+{
+ /*
+ * Flush data cache at first in write-back platform.
+ *
+ * Ghhuang (2007/3/9):
+ * RD-Center suggest that we need to flush D-cache entries which
+ * might match to same address as I-cache when we flush I-cache.
+ * (Maybe some data is treated as data/instruction, both.)
+ */
+ flush_dcache(start, end);
+
+ /* Invalidate I-Cache */
+ __asm__ volatile(
+ "mtc0 $0,$20\n\t"
+ "nop\n\t"
+ "li $8,2\n\t"
+ "mtc0 $8,$20\n\t"
+ "nop\n\t"
+ "nop\n\t"
+ "mtc0 $0,$20\n\t"
+ "nop"
+ : /* no output */
+ : /* no input */
+ );
+
+}
+
+static void flush_dcache(unsigned int start, unsigned int end)
+{
+ /* Flush D-Cache using its range */
+ unsigned char *p;
+ unsigned int size;
+ unsigned int flags;
+ unsigned int i;
+
+ size = end - start;
+
+ /* correctness check : flush all if any parameter is illegal */
+// david
+// if ((size >= dcache_size) ||
+ if ((size >= _DCACHE_SIZE) || (KSEGX(start) != KSEG0))
+ {
+ /*
+ * ghhguang:
+ * For Realtek Lexra CPU,
+ * the cache would NOT be flushed only if the Address to-be-flushed
+ * is the EXPLICIT address (which is really stored in that cache line).
+ * For the aliased addresses, the cache entry would NOT be flushed even
+ * if it matchs same cache-index.
+ *
+ * This is different from traditional MIPS-based CPU's configuration.
+ * So if we want to flush ALL-cache entries, we would need to use "mtc0"
+ * instruction instead of simply modifying the "size" to "dcache_size"
+ * and "start" to "KSEG0".
+ */
+ __asm__ volatile(
+ "mtc0 $0,$20\n\t"
+ "nop\n\t"
+ "li $8,512\n\t"
+ "mtc0 $8,$20\n\t"
+ "nop\n\t"
+ "nop\n\t"
+ "mtc0 $0,$20\n\t"
+ "nop"
+ : /* no output */
+ : /* no input */
+ );
+ }
+ else
+ {
+ /* Start to isolate cache space */
+ p = (char *)start;
+
+ flags = read_c0_status();
+
+ /* isolate cache space */
+ write_c0_status( (ST0_ISC | flags) &~ ST0_IEC );
+
+ for (i = 0; i < size; i += 0x040)
+ {
+ asm (
+ #ifdef OPEN_RSDK_RTL865x
+ ".word 0xbc750000\n\t"
+ ".word 0xbc750010\n\t"
+ ".word 0xbc750020\n\t"
+ ".word 0xbc750030\n\t"
+ #endif
+ "cache 0x15, 0x000(%0)\n\t"
+ "cache 0x15, 0x010(%0)\n\t"
+ "cache 0x15, 0x020(%0)\n\t"
+ "cache 0x15, 0x030(%0)\n\t"
+ : /* No output registers */
+ :"r"(p) /* input : 'p' as %0 */
+ );
+ p += 0x040;
+ }
+
+ write_c0_status(flags);
+ }
+}
diff --git a/target/linux/realtek/image/lzma-loader/src/head.S b/target/linux/realtek/image/lzma-loader/src/head.S
new file mode 100644
index 000000000..ab43f909c
--- /dev/null
+++ b/target/linux/realtek/image/lzma-loader/src/head.S
@@ -0,0 +1,49 @@
+/*
+ * LZMA compressed kernel loader for Realtek 819X
+ *
+ * Copyright (C) 2011 Gabor Juhos <juhosg@openwrt.org>
+ *
+ * Some parts of this code was based on the OpenWrt specific lzma-loader
+ * for the BCM47xx and ADM5120 based boards:
+ * Copyright (C) 2004 Manuel Novoa III (mjn3@codepoet.org)
+ * Copyright (C) 2005 by Oleg I. Vdovikin <oleg@cs.msu.su>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published
+ * by the Free Software Foundation.
+ */
+
+#include <asm/asm.h>
+#include <asm/regdef.h>
+
+
+ .text
+
+LEAF(startup)
+ .set noreorder
+
+__reloc_done:
+ /* clear bss */
+ la t0, _bss_start
+ la t1, _bss_end
+ b __bss_check
+ nop
+
+__bss_fill:
+ sw zero, 0(t0)
+ addi t0, 4
+
+__bss_check:
+ bne t0, t1, __bss_fill
+ nop
+
+ /* Setup new "C" stack */
+ la sp, _stack
+
+ /* jump to the decompressor routine */
+ la t0, loader_main
+ jr t0
+ nop
+
+ .set reorder
+END(startup)
diff --git a/target/linux/realtek/image/lzma-loader/src/loader.c b/target/linux/realtek/image/lzma-loader/src/loader.c
new file mode 100644
index 000000000..61bcd1a2b
--- /dev/null
+++ b/target/linux/realtek/image/lzma-loader/src/loader.c
@@ -0,0 +1,266 @@
+/*
+ * LZMA compressed kernel loader for Realtek rtl819xx based boards
+ *
+ * Copyright (C) 2011 Gabor Juhos <juhosg@openwrt.org>
+ * Copyright (C) 2013 Roman Yeryomin <roman@advem.lv>
+ *
+ * Some parts of this code was based on the OpenWrt specific lzma-loader
+ * for the BCM47xx and ADM5120 based boards:
+ * Copyright (C) 2004 Manuel Novoa III (mjn3@codepoet.org)
+ * Copyright (C) 2005 Mineharu Takahara <mtakahar@yahoo.com>
+ * Copyright (C) 2005 by Oleg I. Vdovikin <oleg@cs.msu.su>
+ *
+ * The image_header structure has been taken from the U-Boot project.
+ * (C) Copyright 2008 Semihalf
+ * (C) Copyright 2000-2005
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published
+ * by the Free Software Foundation.
+ */
+
+#include <stddef.h>
+#include <stdint.h>
+
+#include "printf.h"
+#include "LzmaDecode.h"
+
+#define KSEG0 0x80000000
+#define KSEG1 0xa0000000
+
+#define KSEG1ADDR(a) ((((unsigned)(a)) & 0x1fffffffU) | KSEG1)
+
+#undef LZMA_DEBUG
+
+#ifdef LZMA_DEBUG
+# define DBG(f, a...) printf(f, ## a)
+#else
+# define DBG(f, a...) do {} while (0)
+#endif
+
+
+#define IH_NMLEN 32 /* Image Name Length */
+
+typedef struct image_header {
+ uint32_t ih_magic; /* Image Header Magic Number */
+ uint32_t ih_hcrc; /* Image Header CRC Checksum */
+ uint32_t ih_time; /* Image Creation Timestamp */
+ uint32_t ih_size; /* Image Data Size */
+ uint32_t ih_load; /* Data Load Address */
+ uint32_t ih_ep; /* Entry Point Address */
+ uint32_t ih_dcrc; /* Image Data CRC Checksum */
+ uint8_t ih_os; /* Operating System */
+ uint8_t ih_arch; /* CPU architecture */
+ uint8_t ih_type; /* Image Type */
+ uint8_t ih_comp; /* Compression Type */
+ uint8_t ih_name[IH_NMLEN]; /* Image Name */
+} image_header_t;
+
+/* beyond the image end, size not known in advance */
+extern unsigned char workspace[];
+extern void board_init(void);
+void flush_cache(void);
+
+static CLzmaDecoderState lzma_state;
+static unsigned char *lzma_data;
+static unsigned long lzma_datasize;
+static unsigned long lzma_outsize;
+static unsigned long kernel_la;
+
+#ifdef CONFIG_KERNEL_CMDLINE
+#define kernel_argc 1
+static const char kernel_cmdline[] = CONFIG_KERNEL_CMDLINE;
+static const char *kernel_argv[] = {
+ kernel_cmdline,
+ NULL,
+};
+#endif /* CONFIG_KERNEL_CMDLINE */
+
+static void halt(void)
+{
+ printf("\nSystem halted!\n");
+ for(;;);
+}
+
+static __inline__ unsigned long get_be32(void *buf)
+{
+ unsigned char *p = buf;
+
+ return (((unsigned long) p[0] << 24) +
+ ((unsigned long) p[1] << 16) +
+ ((unsigned long) p[2] << 8) +
+ (unsigned long) p[3]);
+}
+
+static __inline__ unsigned char lzma_get_byte(void)
+{
+ unsigned char c;
+
+ lzma_datasize--;
+ c = *lzma_data++;
+
+ return c;
+}
+
+static int lzma_init_props(void)
+{
+ unsigned char props[LZMA_PROPERTIES_SIZE];
+ int res;
+ int i;
+
+ /* read lzma properties */
+ for (i = 0; i < LZMA_PROPERTIES_SIZE; i++)
+ props[i] = lzma_get_byte();
+
+ /* read the lower half of uncompressed size in the header */
+ lzma_outsize = ((SizeT) lzma_get_byte()) +
+ ((SizeT) lzma_get_byte() << 8) +
+ ((SizeT) lzma_get_byte() << 16) +
+ ((SizeT) lzma_get_byte() << 24);
+
+ /* skip rest of the header (upper half of uncompressed size) */
+ for (i = 0; i < 4; i++)
+ lzma_get_byte();
+
+ res = LzmaDecodeProperties(&lzma_state.Properties, props,
+ LZMA_PROPERTIES_SIZE);
+ return res;
+}
+
+static int lzma_decompress(unsigned char *outStream)
+{
+ SizeT ip, op;
+ int ret;
+
+ lzma_state.Probs = (CProb *) workspace;
+
+ ret = LzmaDecode(&lzma_state, lzma_data, lzma_datasize, &ip, outStream,
+ lzma_outsize, &op);
+
+ if (ret != LZMA_RESULT_OK) {
+ int i;
+
+ DBG("LzmaDecode error %d at %08x, osize:%d ip:%d op:%d\n",
+ ret, lzma_data + ip, lzma_outsize, ip, op);
+
+ for (i = 0; i < 16; i++)
+ DBG("%02x ", lzma_data[ip + i]);
+
+ DBG("\n");
+ }
+
+ return ret;
+}
+
+#if (LZMA_WRAPPER)
+static void lzma_init_data(void)
+{
+ extern unsigned char _lzma_data_start[];
+ extern unsigned char _lzma_data_end[];
+
+ kernel_la = LOADADDR;
+ lzma_data = _lzma_data_start;
+ lzma_datasize = _lzma_data_end - _lzma_data_start;
+}
+#else
+static void lzma_init_data(void)
+{
+ struct image_header *hdr = NULL;
+ unsigned char *flash_base;
+ unsigned long flash_ofs;
+ unsigned long kernel_ofs;
+ unsigned long kernel_size;
+
+ flash_base = (unsigned char *) KSEG1ADDR(AR71XX_FLASH_START);
+
+ printf("Looking for OpenWrt image... ");
+
+ for (flash_ofs = CONFIG_FLASH_OFFS;
+ flash_ofs <= (CONFIG_FLASH_OFFS + CONFIG_FLASH_MAX);
+ flash_ofs += CONFIG_FLASH_STEP) {
+ unsigned long magic;
+ unsigned char *p;
+
+ p = flash_base + flash_ofs;
+ magic = get_be32(p);
+ if (magic == IH_MAGIC_OKLI) {
+ hdr = (struct image_header *) p;
+ break;
+ }
+ }
+
+ if (hdr == NULL) {
+ printf("not found!\n");
+ halt();
+ }
+
+ printf("found at 0x%08x\n", flash_base + flash_ofs);
+
+ kernel_ofs = sizeof(struct image_header);
+ kernel_size = get_be32(&hdr->ih_size);
+ kernel_la = get_be32(&hdr->ih_load);
+
+ lzma_data = flash_base + flash_ofs + kernel_ofs;
+ lzma_datasize = kernel_size;
+}
+#endif /* (LZMA_WRAPPER) */
+
+void loader_main(unsigned long reg_a0, unsigned long reg_a1,
+ unsigned long reg_a2, unsigned long reg_a3)
+{
+ void (*kernel_entry) (unsigned long, unsigned long, unsigned long,
+ unsigned long);
+ int res;
+
+ board_init();
+
+ printf("\n\nOpenWrt kernel loader for Realtek rtl819xx\n");
+ printf("Copyright (C) 2011 Gabor Juhos <juhosg@openwrt.org>\n");
+ printf("Copyright (C) 2013 Roman Yeryomin <roman@advem.lv>\n");
+
+ lzma_init_data();
+
+ res = lzma_init_props();
+ if (res != LZMA_RESULT_OK) {
+ printf("Incorrect LZMA stream properties!\n");
+ halt();
+ }
+
+ printf("Decompressing kernel to %08x... ", kernel_la);
+
+ res = lzma_decompress((unsigned char *) kernel_la);
+ if (res != LZMA_RESULT_OK) {
+ printf("failed, ");
+ switch (res) {
+ case LZMA_RESULT_DATA_ERROR:
+ printf("data error!\n");
+ break;
+ default:
+ printf("unknown error %d!\n", res);
+ }
+ halt();
+ } else {
+ printf("done!\n");
+ }
+
+ /* flush_cache(kernel_la, lzma_outsize); */
+ flush_cache();
+
+#ifdef KERNELENTRY
+ kernel_la = KERNELENTRY;
+ printf("Seems kernel_entry address is different from load address, so...\n");
+#endif
+ printf("Starting kernel from %08x...\n\n", kernel_la);
+
+
+#ifdef CONFIG_KERNEL_CMDLINE
+ reg_a0 = kernel_argc;
+ reg_a1 = (unsigned long) kernel_argv;
+ reg_a2 = 0;
+ reg_a3 = 0;
+#endif
+
+ kernel_entry = (void *) kernel_la;
+ kernel_entry(reg_a0, reg_a1, reg_a2, reg_a3);
+}
diff --git a/target/linux/realtek/image/lzma-loader/src/loader.lds b/target/linux/realtek/image/lzma-loader/src/loader.lds
new file mode 100644
index 000000000..01ff85236
--- /dev/null
+++ b/target/linux/realtek/image/lzma-loader/src/loader.lds
@@ -0,0 +1,34 @@
+OUTPUT_ARCH(mips)
+SECTIONS {
+ .text : {
+ _code_start = .;
+ *(.text)
+ *(.text.*)
+ *(.rodata)
+ *(.rodata.*)
+ *(.data.lzma)
+ }
+
+ . = ALIGN(32);
+ .data : {
+ *(.data)
+ *(.data.*)
+ }
+
+ . = ALIGN(32);
+ _code_end = .;
+
+ _bss_start = .;
+ .bss : {
+ *(.bss)
+ *(.bss.*)
+ }
+
+ . = ALIGN(32);
+ _bss_end = .;
+
+ . = . + 8192;
+ _stack = .;
+
+ workspace = .;
+}
diff --git a/target/linux/realtek/image/lzma-loader/src/lzma-data.lds b/target/linux/realtek/image/lzma-loader/src/lzma-data.lds
new file mode 100644
index 000000000..abf756ba1
--- /dev/null
+++ b/target/linux/realtek/image/lzma-loader/src/lzma-data.lds
@@ -0,0 +1,8 @@
+OUTPUT_ARCH(mips)
+SECTIONS {
+ .data.lzma : {
+ _lzma_data_start = .;
+ *(.data)
+ _lzma_data_end = .;
+ }
+}
diff --git a/target/linux/realtek/image/lzma-loader/src/printf.c b/target/linux/realtek/image/lzma-loader/src/printf.c
new file mode 100644
index 000000000..7bb5a86e1
--- /dev/null
+++ b/target/linux/realtek/image/lzma-loader/src/printf.c
@@ -0,0 +1,350 @@
+/*
+ * Copyright (C) 2001 MontaVista Software Inc.
+ * Author: Jun Sun, jsun@mvista.com or jsun@junsun.net
+ *
+ * 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.
+ *
+ */
+
+#include "printf.h"
+
+extern void board_putc(int ch);
+
+/* this is the maximum width for a variable */
+#define LP_MAX_BUF 256
+
+/* macros */
+#define IsDigit(x) ( ((x) >= '0') && ((x) <= '9') )
+#define Ctod(x) ( (x) - '0')
+
+/* forward declaration */
+static int PrintChar(char *, char, int, int);
+static int PrintString(char *, char *, int, int);
+static int PrintNum(char *, unsigned long, int, int, int, int, char, int);
+
+/* private variable */
+static const char theFatalMsg[] = "fatal error in lp_Print!";
+
+/* -*-
+ * A low level printf() function.
+ */
+static void
+lp_Print(void (*output)(void *, char *, int),
+ void * arg,
+ char *fmt,
+ va_list ap)
+{
+
+#define OUTPUT(arg, s, l) \
+ { if (((l) < 0) || ((l) > LP_MAX_BUF)) { \
+ (*output)(arg, (char*)theFatalMsg, sizeof(theFatalMsg)-1); for(;;); \
+ } else { \
+ (*output)(arg, s, l); \
+ } \
+ }
+
+ char buf[LP_MAX_BUF];
+
+ char c;
+ char *s;
+ long int num;
+
+ int longFlag;
+ int negFlag;
+ int width;
+ int prec;
+ int ladjust;
+ char padc;
+
+ int length;
+
+ for(;;) {
+ {
+ /* scan for the next '%' */
+ char *fmtStart = fmt;
+ while ( (*fmt != '\0') && (*fmt != '%')) {
+ fmt ++;
+ }
+
+ /* flush the string found so far */
+ OUTPUT(arg, fmtStart, fmt-fmtStart);
+
+ /* are we hitting the end? */
+ if (*fmt == '\0') break;
+ }
+
+ /* we found a '%' */
+ fmt ++;
+
+ /* check for long */
+ if (*fmt == 'l') {
+ longFlag = 1;
+ fmt ++;
+ } else {
+ longFlag = 0;
+ }
+
+ /* check for other prefixes */
+ width = 0;
+ prec = -1;
+ ladjust = 0;
+ padc = ' ';
+
+ if (*fmt == '-') {
+ ladjust = 1;
+ fmt ++;
+ }
+
+ if (*fmt == '0') {
+ padc = '0';
+ fmt++;
+ }
+
+ if (IsDigit(*fmt)) {
+ while (IsDigit(*fmt)) {
+ width = 10 * width + Ctod(*fmt++);
+ }
+ }
+
+ if (*fmt == '.') {
+ fmt ++;
+ if (IsDigit(*fmt)) {
+ prec = 0;
+ while (IsDigit(*fmt)) {
+ prec = prec*10 + Ctod(*fmt++);
+ }
+ }
+ }
+
+
+ /* check format flag */
+ negFlag = 0;
+ switch (*fmt) {
+ case 'b':
+ if (longFlag) {
+ num = va_arg(ap, long int);
+ } else {
+ num = va_arg(ap, int);
+ }
+ length = PrintNum(buf, num, 2, 0, width, ladjust, padc, 0);
+ OUTPUT(arg, buf, length);
+ break;
+
+ case 'd':
+ case 'D':
+ if (longFlag) {
+ num = va_arg(ap, long int);
+ } else {
+ num = va_arg(ap, int);
+ }
+ if (num < 0) {
+ num = - num;
+ negFlag = 1;
+ }
+ length = PrintNum(buf, num, 10, negFlag, width, ladjust, padc, 0);
+ OUTPUT(arg, buf, length);
+ break;
+
+ case 'o':
+ case 'O':
+ if (longFlag) {
+ num = va_arg(ap, long int);
+ } else {
+ num = va_arg(ap, int);
+ }
+ length = PrintNum(buf, num, 8, 0, width, ladjust, padc, 0);
+ OUTPUT(arg, buf, length);
+ break;
+
+ case 'u':
+ case 'U':
+ if (longFlag) {
+ num = va_arg(ap, long int);
+ } else {
+ num = va_arg(ap, int);
+ }
+ length = PrintNum(buf, num, 10, 0, width, ladjust, padc, 0);
+ OUTPUT(arg, buf, length);
+ break;
+
+ case 'x':
+ if (longFlag) {
+ num = va_arg(ap, long int);
+ } else {
+ num = va_arg(ap, int);
+ }
+ length = PrintNum(buf, num, 16, 0, width, ladjust, padc, 0);
+ OUTPUT(arg, buf, length);
+ break;
+
+ case 'X':
+ if (longFlag) {
+ num = va_arg(ap, long int);
+ } else {
+ num = va_arg(ap, int);
+ }
+ length = PrintNum(buf, num, 16, 0, width, ladjust, padc, 1);
+ OUTPUT(arg, buf, length);
+ break;
+
+ case 'c':
+ c = (char)va_arg(ap, int);
+ length = PrintChar(buf, c, width, ladjust);
+ OUTPUT(arg, buf, length);
+ break;
+
+ case 's':
+ s = (char*)va_arg(ap, char *);
+ length = PrintString(buf, s, width, ladjust);
+ OUTPUT(arg, buf, length);
+ break;
+
+ case '\0':
+ fmt --;
+ break;
+
+ default:
+ /* output this char as it is */
+ OUTPUT(arg, fmt, 1);
+ } /* switch (*fmt) */
+
+ fmt ++;
+ } /* for(;;) */
+
+ /* special termination call */
+ OUTPUT(arg, "\0", 1);
+}
+
+
+/* --------------- local help functions --------------------- */
+static int
+PrintChar(char * buf, char c, int length, int ladjust)
+{
+ int i;
+
+ if (length < 1) length = 1;
+ if (ladjust) {
+ *buf = c;
+ for (i=1; i< length; i++) buf[i] = ' ';
+ } else {
+ for (i=0; i< length-1; i++) buf[i] = ' ';
+ buf[length - 1] = c;
+ }
+ return length;
+}
+
+static int
+PrintString(char * buf, char* s, int length, int ladjust)
+{
+ int i;
+ int len=0;
+ char* s1 = s;
+ while (*s1++) len++;
+ if (length < len) length = len;
+
+ if (ladjust) {
+ for (i=0; i< len; i++) buf[i] = s[i];
+ for (i=len; i< length; i++) buf[i] = ' ';
+ } else {
+ for (i=0; i< length-len; i++) buf[i] = ' ';
+ for (i=length-len; i < length; i++) buf[i] = s[i-length+len];
+ }
+ return length;
+}
+
+static int
+PrintNum(char * buf, unsigned long u, int base, int negFlag,
+ int length, int ladjust, char padc, int upcase)
+{
+ /* algorithm :
+ * 1. prints the number from left to right in reverse form.
+ * 2. fill the remaining spaces with padc if length is longer than
+ * the actual length
+ * TRICKY : if left adjusted, no "0" padding.
+ * if negtive, insert "0" padding between "0" and number.
+ * 3. if (!ladjust) we reverse the whole string including paddings
+ * 4. otherwise we only reverse the actual string representing the num.
+ */
+
+ int actualLength =0;
+ char *p = buf;
+ int i;
+
+ do {
+ int tmp = u %base;
+ if (tmp <= 9) {
+ *p++ = '0' + tmp;
+ } else if (upcase) {
+ *p++ = 'A' + tmp - 10;
+ } else {
+ *p++ = 'a' + tmp - 10;
+ }
+ u /= base;
+ } while (u != 0);
+
+ if (negFlag) {
+ *p++ = '-';
+ }
+
+ /* figure out actual length and adjust the maximum length */
+ actualLength = p - buf;
+ if (length < actualLength) length = actualLength;
+
+ /* add padding */
+ if (ladjust) {
+ padc = ' ';
+ }
+ if (negFlag && !ladjust && (padc == '0')) {
+ for (i = actualLength-1; i< length-1; i++) buf[i] = padc;
+ buf[length -1] = '-';
+ } else {
+ for (i = actualLength; i< length; i++) buf[i] = padc;
+ }
+
+
+ /* prepare to reverse the string */
+ {
+ int begin = 0;
+ int end;
+ if (ladjust) {
+ end = actualLength - 1;
+ } else {
+ end = length -1;
+ }
+
+ while (end > begin) {
+ char tmp = buf[begin];
+ buf[begin] = buf[end];
+ buf[end] = tmp;
+ begin ++;
+ end --;
+ }
+ }
+
+ /* adjust the string pointer */
+ return length;
+}
+
+static void printf_output(void *arg, char *s, int l)
+{
+ int i;
+
+ // special termination call
+ if ((l==1) && (s[0] == '\0')) return;
+
+ for (i=0; i< l; i++) {
+ board_putc(s[i]);
+ if (s[i] == '\n') board_putc('\r');
+ }
+}
+
+void printf(char *fmt, ...)
+{
+ va_list ap;
+ va_start(ap, fmt);
+ lp_Print(printf_output, 0, fmt, ap);
+ va_end(ap);
+}
diff --git a/target/linux/realtek/image/lzma-loader/src/printf.h b/target/linux/realtek/image/lzma-loader/src/printf.h
new file mode 100644
index 000000000..9b1c1df23
--- /dev/null
+++ b/target/linux/realtek/image/lzma-loader/src/printf.h
@@ -0,0 +1,18 @@
+/*
+ * Copyright (C) 2001 MontaVista Software Inc.
+ * Author: Jun Sun, jsun@mvista.com or jsun@junsun.net
+ *
+ * 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.
+ *
+ */
+
+#ifndef _printf_h_
+#define _printf_h_
+
+#include <stdarg.h>
+void printf(char *fmt, ...);
+
+#endif /* _printf_h_ */
diff --git a/target/linux/realtek/patches-2.6.30/006-make-image.diff b/target/linux/realtek/patches-2.6.30/006-make-image.diff
deleted file mode 100644
index ce4aafd1a..000000000
--- a/target/linux/realtek/patches-2.6.30/006-make-image.diff
+++ /dev/null
@@ -1,377 +0,0 @@
-commit a0d28029b6ca8fe1e97fa8ef4b70cdc32f09bbc1
-Author: Roman Yeryomin <roman@advem.lv>
-Date: Tue Feb 5 01:55:36 2013 +0200
-
- adopt 006-make-image.diff
-
- Signed-off-by: Roman Yeryomin <roman@advem.lv>
-
-diff --git a/Makefile b/Makefile
-index 674b79b..30b7100 100644
---- a/Makefile
-+++ b/Makefile
-@@ -1507,6 +1507,9 @@ kernelrelease:
- kernelversion:
- @echo $(KERNELVERSION)
-
-+do_rtkload:
-+ $(Q)$(MAKE) -C rtkload
-+
- # Single targets
- # ---------------------------------------------------------------------------
- # Single targets are compatible with:
-diff --git a/arch/rlx/Kconfig b/arch/rlx/Kconfig
-index 14f97b8..94bf573 100644
---- a/arch/rlx/Kconfig
-+++ b/arch/rlx/Kconfig
-@@ -500,3 +500,9 @@ source "security/Kconfig"
- source "crypto/Kconfig"
- source "lib/Kconfig"
-
-+config RTL_KERNEL_LOAD_ADDRESS
-+ hex "kernel load address in ram"
-+ default "0x80500000"
-+ help
-+ kernel load address in ram
-+
-diff --git a/rtkload/Makefile b/rtkload/Makefile
-index 235673b..4a8839e 100644
---- a/rtkload/Makefile
-+++ b/rtkload/Makefile
-@@ -2,64 +2,42 @@
- # Uncomment if you're building for the emulator
- include ../.config
- include ../../.config # to check toolchain CONFIG_RSDK_rsdk-1.5.4-5281-EB-2.6.30-0.9.30.3-uls-101110
--DOQUIET = false
--#DOQUIET = true
--#EMULATOR = true
--#KERNEL_ROOT = /home/john/RealTek/linux-2.5/linux
-+
- KERNEL_ROOT = ..
--ifeq ($(wildcard $(DIR_USERS)/boa/tools/cvimg),)
--ifeq ($(wildcard $(DIR_USERS)/goahead-2.1.1/LINUX/cvimg),)
--CVIMG=./cvimg
--else
--CVIMG=$(DIR_USERS)/goahead-2.1.1/LINUX/cvimg
--endif
-+
- .NOTPARALLEL : all
--else
--CVIMG=$(DIR_USERS)/boa/tools/cvimg
--endif
--# ---- shouldn't need to modify below this line.
-
--ifdef EMULATOR
--EMUOPTS = -DEMULATOR
--LDSCRIPT = ld-emu.script
--else
-+CVIMG=cvimg
-+
-+AS = $(CROSS_COMPILE)as
-+LD = $(CROSS_COMPILE)ld
-+CC = $(CROSS_COMPILE)gcc
-+CPP = $(CC) -E
-+AR = $(CROSS_COMPILE)ar
-+NM = $(CROSS_COMPILE)nm
-+STRIP = $(CROSS_COMPILE)strip
-+OBJCOPY = $(CROSS_COMPILE)objcopy
-+OBJDUMP = $(CROSS_COMPILE)objdump
-+
- EMUOPTS =
- LDSCRIPT = ld.script
--endif
-
- COPTIONS = -DROM_MEMORY -DCOMPRESSED_KERNEL -D__KERNEL__
-
--#SOURCES = vsprintf.c string.c ctype.c prom_printf.c misc.c hfload.c start.S read_memory.c
--ifdef BZ2_COMPRESS
-- SOURCES = misc.c hfload.c start.S cache.c
--else
--ifdef GZIP_COMPRESS
-- SOURCES = string.c ctype.c misc.c hfload.c start.S read_memory.c cache.c
--else
-- SOURCES = string.c ctype.c misc.c hfload.c start.S read_memory.c cache.c LzmaDecode.c
--endif
--endif
-+#SOURCES = misc.c hfload.c start.S cache.c #bzip2
-+#SOURCES = string.c ctype.c misc.c hfload.c start.S read_memory.c cache.c #gzip
-+SOURCES = string.c ctype.c misc.c hfload.c start.S read_memory.c cache.c LzmaDecode.c #lzma
-
- LOADER_FILES = hfload.o read_memory.o
--#LOADER_FILES = hfload.o
--ifdef BZ2_COMPRESS
-- SUPPORT_FILES = misc.o cache.o
--else
--ifdef GZIP_COMPRESS
-- SUPPORT_FILES = vsprintf.o prom_printf.o string.o ctype.o misc.o cache.o
--else
--ifeq ($(strip $(DOQUIET)),true)
-- SUPPORT_FILES = string.o ctype.o misc.o cache.o LzmaDecode.o
--else
-- SUPPORT_FILES = vsprintf.o prom_printf.o string.o ctype.o misc.o cache.o LzmaDecode.o
--endif
--endif
--endif
--
--CFLAGS =-Os -g -fno-pic -mno-abicalls $(EMUOPTS)
--ifeq ($(strip $(DOQUIET)),true)
--CFLAGS += $(WARNINGS) -D__DO_QUIET__
--endif
-+
-+#SUPPORT_FILES = misc.o cache.o # bzip2
-+#SUPPORT_FILES = vsprintf.o prom_printf.o string.o ctype.o misc.o cache.o #gzip
-+#SUPPORT_FILES = string.o ctype.o misc.o cache.o LzmaDecode.o #quiet
-+SUPPORT_FILES = vsprintf.o prom_printf.o string.o ctype.o misc.o cache.o LzmaDecode.o #lzma
-+
-+CFLAGS =-Os -g -fno-pic -mno-abicalls $(EMUOPTS) -march=rlx4181
-+#CFLAGS += $(WARNINGS) -D__DO_QUIET__ #quiet
-+
- CFLAGS += -DEMBEDDED -I$(KERNEL_ROOT)/include/linux -I$(KERNEL_ROOT)/include -I$(KERNEL_ROOT)/lib $(COPTIONS) -G 0
- CFLAGS += -I$(KERNEL_ROOT)/arch/rlx/bsp -I$(KERNEL_ROOT)/arch/rlx/include -I$(KERNEL_ROOT)/arch/rlx/include/asm/mach-generic
- #ASFLAGS = -g $(EMUOPTS) -DEMBEDDED -I$(KERNEL_ROOT)/include -I$(KERNEL_ROOT)/arch/rlx/include
-@@ -69,214 +47,57 @@ ASFLAGS = -g -fno-pic -mno-abicalls $(EMUOPTS) -DEMBEDDED -I$(KERNEL_ROOT)/inclu
-
- LDFLAGS=-static -nostdlib
-
--ifdef BZ2_COMPRESS
--CFLAGS += -DBZ2_COMPRESS
--ASFLAGS += -DBZ2_COMPRESS
--else
--ifndef GZIP_COMPRESS
--CFLAGS += -DLZMA_COMPRESS
--ASFLAGS += -DLZMA_COMPRESS
--endif
--endif
--
--START_FILE = start.o
-+#CFLAGS += -DBZ2_COMPRESS #bzip2
-+#ASFLAGS += -DBZ2_COMPRESS #bzip2
-+#CFLAGS += #gzip
-+#ASFLAGS += #gzip
-+CFLAGS += -DLZMA_COMPRESS #lzma
-+ASFLAGS += -DLZMA_COMPRESS #lzma
-
-
--#RTL_819X normal LOAD_START_ADDR and FLASH_OFFSET
--ifdef CONFIG_RTL_819X
--LOAD_START_ADDR=0x80500000
--FLASH_OFFSET=30000
--endif
--
--ifdef CONFIG_RTL_8196B_GW
--ifdef CONFIG_MTD_RTL_8196_SPI
--LOAD_START_ADDR=0x80A00000
--else
--LOAD_START_ADDR=0x80500000
--endif
--ifdef CONFIG_RTL_8196B_GW_8M
--FLASH_OFFSET=10000
--else
--ifeq ($(CONFIG_RTL_FLASH_MAPPING_ENABLE),y)
--ifeq ($(CONFIG_RTL_LINUX_IMAGE_OFFSET),)
--FLASH_OFFSET=30000
--else
--FLASH_OFFSET=$(CONFIG_RTL_LINUX_IMAGE_OFFSET)
--endif
--else
--FLASH_OFFSET=30000
--endif
--endif
--endif
--
--ifdef CONFIG_RTL_8198_GW
--ifdef CONFIG_MTD_RTL_8196_SPI
--LOAD_START_ADDR=0x80A00000
--else
--LOAD_START_ADDR=0x80500000
--endif
--ifdef CONFIG_RTL_8196B_GW_8M
--FLASH_OFFSET=10000
--else
--FLASH_OFFSET=30000
--endif
--endif
--
--ifdef CONFIG_RTL_8196B_ICT
--LOAD_START_ADDR=0x80500000
--FLASH_OFFSET=30000
--endif
--
--ifdef CONFIG_RTL_865X_PANAHOST
--LOAD_START_ADDR=0x80500000
--FLASH_OFFSET=20000
--endif
--
--ifdef CONFIG_RTL_8197B_PANA
--LOAD_START_ADDR=0x80700000
--FLASH_OFFSET=30000
--endif
--
--ifdef CONFIG_RTL_8196B_AP_ROOT
--LOAD_START_ADDR=0x80500000
--FLASH_OFFSET=30000
--endif
--
--ifeq ($(CONFIG_RTL_FLASH_MAPPING_ENABLE),y)
--ifeq ($(CONFIG_RTL_LINUX_IMAGE_OFFSET),)
--FLASH_OFFSET=20000
--else
--FLASH_OFFSET=$(CONFIG_RTL_LINUX_IMAGE_OFFSET)
--endif
--else
--FLASH_OFFSET=20000
--endif
-+START_FILE = start.o
-
--ifdef CONFIG_RTK_VOIP_BOARD
--LOAD_START_ADDR=0x80C00000
--endif
-
--CV_SIGNATURE=
--ifdef CONFIG_RTL_8197B_PANA
--#CV_OPTION=linux
--CV_OPTION=signature
--CV_SIGNATURE=csys
--else
--ifdef CONFIG_SQUASHFS
- CV_OPTION=linux-ro
--else
--CV_OPTION=linux
--endif
--endif
--
--ifdef CONFIG_RTL_8198_NFBI_BOARD
--LOAD_START_ADDR=0x80700000
--FLASH_OFFSET=30000
--CV_OPTION=signature
--CV_SIGNATURE=csys
--endif
--
--#ifdef CONFIG_RTL_8196C_iNIC
--#LOAD_START_ADDR=0x80500000
--#FLASH_OFFSET=30000
--#CV_OPTION=signature
--#CV_SIGNATURE=cs6c
--#endif
--
--CROSS_COMPILE ?= rsdk-linux-
--
--LD=$(CROSS_COMPILE)ld
--CC=$(CROSS_COMPILE)gcc
--CPP=$(CROSS_COMPILE)gcc
--STRIP=$(CROSS_COMPILE)strip
--AS=$(CROSS_COMPILE)as
--NM=$(CROSS_COMPILE)nm
--OBJCOPY=$(CROSS_COMPILE)objcopy
--
--SEDFLAGS = s/LOAD_ADDR/$(LOAD_START_ADDR)/;
-+#CV_OPTION=linux
-
--ifdef CONFIG_RTK_VOIP_BOARD
--STRIP-OPTIONS-$(CONFIG_RSDK_rsdk-1.5.4-5281-EB-2.6.30-0.9.30.3-uls-101110) = --remove-section=.bss
--endif
-+SEDFLAGS = s/LOAD_ADDR/$(CONFIG_RTL_KERNEL_LOAD_ADDRESS)/;
-
--# jffs2 related definitions
--DIR_ROMFS_BOOT = $(DIR_ROMFS)/boot/
--MKJFFS2 = ./mkfs.jffs2
--MKIMAGE_UBOOT = ./mkimage-uboot
-
- O_TARGET := rtk
- obj-y := vmlinux_img.o $(START_FILE) $(LOADER_FILES) $(SUPPORT_FILES)
-
--ifdef CONFIG_ROOTFS_JFFS2
--all: rtk-clean rtk-vmlinux_img vmlinux_img.gzip.uboot.jffs2
--else
--all: rtk-clean rtk-vmlinux_img $(START_FILE) $(LOADER_FILES) $(SUPPORT_FILES)
--endif
-+all: linux.bin
-
--#memload-partial
--ifdef CONFIG_ROOTFS_JFFS2
--jffs2_no_this:
--endif
-- $(CC) -fno-pic -mno-abicalls -Os -fomit-frame-pointer -D__KERNEL__ -c vmlinux_img.c -o vmlinux_img.o
-- $(OBJCOPY) --add-section .vmlinux=vmlinux_img.gz vmlinux_img.o
-- @sed "$(SEDFLAGS)" < ld.script.in > $(LDSCRIPT)
-+%.o:%.S
-+ ${CC} ${CFLAGS} -c -o $@ $<
-+%.o:%.c
-+ ${CC} ${CFLAGS} -c -o $@ $<
-+
-+linux.bin: $(KERNEL_ROOT)/vmlinux $(START_FILE) $(LOADER_FILES) $(SUPPORT_FILES)
-+ cp $(KERNEL_ROOT)/vmlinux vmlinux-stripped
-+ $(STRIP) vmlinux-stripped $(STRIP-OPTIONS-y)
-+ $(OBJCOPY) -Obinary vmlinux-stripped vmlinux_img
-+ #lzma -z < vmlinux_img > vmlinux_img.squish || rm -f vmlinux_img.squish
-+ lzma e vmlinux_img vmlinux_img.squish
-+ #bzip2 -9 < vmlinux_img > vmlinux_img.squish || rm -f vmlinux_img.squish
-+ #gzip -9 < vmlinux_img > vmlinux_img.squish || rm -f vmlinux_img.squish
-+ $(CVIMG) vmlinuxhdr vmlinux_img.squish vmlinux_img.squish.hdr $(KERNEL_ROOT)/vmlinux
-+ $(CC) ${CFLAGS} -D__KERNEL__ -c vmlinux_img.c -o vmlinux_img.o
-+ $(OBJCOPY) --add-section .vmlinux=vmlinux_img.squish.hdr vmlinux_img.o
-+ sed "$(SEDFLAGS)" < ld.script.in > $(LDSCRIPT)
- $(LD) $(LDFLAGS) -G 0 -T $(LDSCRIPT) -o memload-partial $(START_FILE) $(LOADER_FILES) $(SUPPORT_FILES) vmlinux_img.o
- $(NM) memload-partial | grep -v '\(compiled\)\|\(\.o$$\)\|\( [aU] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | sort > system.map
--
- cp memload-partial memload-full
- $(OBJCOPY) -Obinary memload-full nfjrom
-- $(CVIMG) $(CV_OPTION) nfjrom linux.bin $(LOAD_START_ADDR) $(FLASH_OFFSET) $(CV_SIGNATURE)
--# @./size_chk vmlinux_img $(LOAD_START_ADDR)
-- @$(CVIMG) size_chk vmlinux_img $(LOAD_START_ADDR) || exit $$?
--ifeq ($(CONFIG_BLK_DEV_INITRD),y)
-- @echo "RAMFS no need to check flash size"
--else
--ifeq ($(CONFIG_RTL_FLASH_MAPPING_ENABLE),y)
-- @$(CVIMG) flash_size_chk linux.bin || exit $$?
--endif
--endif
-+ $(CVIMG) $(CV_OPTION) nfjrom linux.bin $(CONFIG_RTL_KERNEL_LOAD_ADDRESS) $(CONFIG_RTL_LINUX_IMAGE_OFFSET) $(CV_SIGNATURE)
-+
-+clean:
-+ rm -f *.o memload system.map nfjrom memload-partial memload-full vmlinux_img.squish vmlinux_img.squish.hdr target target.img strip1 linux.bin vmlinux-stripped $(LDSCRIPT) vmlinux_img vmlinux_img.gzip.uboot.jffs2
-
--rtk-clean:
-- rm -f *.o memload system.map nfjrom memload-partial memload-full vmlinux_img.gz target target.img strip1 linux.bin vmlinux-stripped $(LDSCRIPT) vmlinux_img vmlinux_img.gzip.uboot.jffs2
--
--rtk-vmlinux_img:
-- cp $(KERNEL_ROOT)/vmlinux vmlinux-stripped
-- $(STRIP) vmlinux-stripped $(STRIP-OPTIONS-y)
-- $(OBJCOPY) -Obinary vmlinux-stripped vmlinux_img
-- rm -f vmlinux_img.gz
--ifndef CONFIG_ROOTFS_JFFS2
--ifdef BZ2_COMPRESS
-- cat vmlinux_img | bzip2 -9v > vmlinux_img.gz
--else
--ifdef GZIP_COMPRESS
-- cat vmlinux_img | gzip -9v > vmlinux_img.gz
--else
-- ./lzma e vmlinux_img vmlinux_img.gz
--endif
--endif
-- $(CVIMG) vmlinuxhdr vmlinux_img.gz vmlinux_img.gz $(KERNEL_ROOT)/vmlinux
--endif # CONFIG_ROOTFS_JFFS2
-
--target: nfjrom $(BOOT_CODE) $(EXT2_IMG)
--# Pading boot code to 512 bytes long (but only 256 bytes are allowed, 512 is to make it page alignment)
-- $(OBJCOPY) -Obinary --pad-to=0x80000200 $(BOOT_CODE) bootcode
-- $(OBJCOPY) -Obinary --remove-section=.bss --remove-section=.data --remove-section=.mdebug --pad-to=0x806FFE00 memload-full nandrom
-- $(LD) -G0 -Ttarget.script -o target -bbinary bootcode -bbinary nandrom -bbinary $(EXT2_IMG)
-- $(OBJCOPY) -Obinary target target.img
-- cp -f ./target.img /tftpboot
- depend:
- rm -f .depend
- $(CC) $(CFLAGS) -MM $(SOURCES) >.depend
-
--bz2:
-- @make BZ2_COMPRESS=1
--
--gzip:
-- @make GZIP_COMPRESS=1
--
--vmlinux_img.gzip.uboot.jffs2:
-- cat vmlinux_img | gzip -9v > vmlinux_img.gzip
-- mkdir -p $(DIR_ROMFS_BOOT)
-- $(MKIMAGE_UBOOT) -A mips -O linux -T kernel -C gzip -a 80000000 -e 80000000 -n 8954c_kernel -d vmlinux_img.gzip $(DIR_ROMFS_BOOT)/vmlinux_img.gzip.uboot
-- $(MKJFFS2) -n -p -b -e $(CONFIG_JFFS2_ERASE_SIZE) -o $(DIR_IMAGE)/vmlinux_img.gzip.uboot.jffs2 -d $(DIR_ROMFS)
-
diff --git a/target/linux/realtek/patches-2.6.30/0061-rsdk-2.5.2-3.2-diff-fixup-rtkload.patch b/target/linux/realtek/patches-2.6.30/0061-rsdk-2.5.2-3.2-diff-fixup-rtkload.patch
deleted file mode 100644
index cb1b4ee50..000000000
--- a/target/linux/realtek/patches-2.6.30/0061-rsdk-2.5.2-3.2-diff-fixup-rtkload.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/rtkload/Makefile 2013-02-05 01:54:54.283265028 +0200
-+++ b/rtkload/Makefile 2013-02-06 02:52:53.538612082 +0200
-@@ -1,7 +1,7 @@
- # The kernel tree you do builds in.
- # Uncomment if you're building for the emulator
- include ../.config
--include ../../.config # to check toolchain CONFIG_RSDK_rsdk-1.5.4-5281-EB-2.6.30-0.9.30.3-uls-101110
-+#include ../../.config # to check toolchain CONFIG_RSDK_rsdk-1.5.4-5281-EB-2.6.30-0.9.30.3-uls-101110
-
- KERNEL_ROOT = ..
-
diff --git a/tools/firmware-utils/Makefile b/tools/firmware-utils/Makefile
index ce9e1f7ce..c4e1623fa 100644
--- a/tools/firmware-utils/Makefile
+++ b/tools/firmware-utils/Makefile
@@ -62,7 +62,7 @@ define Host/Compile
$(call cc, mkcameofw, -Wall)
$(call cc,seama md5)
$(call cc,fix-u-media-header cyg_crc32,-Wall)
- $(call cc,bixutil)
+ $(call cc,mgbin)
$(call cc,cvimg)
endef
diff --git a/tools/firmware-utils/src/apmib.h b/tools/firmware-utils/src/apmib.h
index 0695457f9..19b971748 100644
--- a/tools/firmware-utils/src/apmib.h
+++ b/tools/firmware-utils/src/apmib.h
@@ -1,2035 +1,77 @@
-/*
- * Header file of AP mib
- * Authors: David Hsu <davidhsu@realtek.com.tw>
- *
- * $Id: apmib.h,v 1.54 2009/09/15 02:12:24 bradhuang Exp $
- *
- */
-
-
-#ifndef INCLUDE_APMIB_H
-#define INCLUDE_APMIB_H
-
-/* Forrest, 2007.11.07.
- * If you want to let APMIB adopt shared memory mechanism, define it to 1.
- * Or define it to 0 will go back to original local copy mechanism.
- * Note:
- * 1. I only use shared memory for HW Configuration (pHwSetting), Default
- * Configuration (pMibDef) and Current Configuration (pMib). There is
- * no shared memory for each linkchain now.
- * 2. Because uClibc does not support POSIX inter-process semaphore, I have
- * to use SYSTEM V semaphore and shared memory. So if you want to adopt
- * shared memory mechanism, you must go to turn on CONFIG_SYSVIPC
- * kernel config to support it.
- */
-#ifdef CONFIG_APMIB_SHARED
- #define CONFIG_APMIB_SHARED_MEMORY 1
-#else
- #define CONFIG_APMIB_SHARED_MEMORY 0
-#endif
-
-// added by rock /////////////////////////////////////////
-#ifdef VOIP_SUPPORT
-#include "voip_flash.h"
-#include "voip_flash_mib.h"
-#endif
-
-#if defined(CONFIG_DOMAIN_NAME_QUERY_SUPPORT)
-//#define LOGDEBUG_ENABLED
-#endif
-
-#define MBSSID
-
-//hf
-#define CONFIG_RTL_BT_CLIENT
-
-#define COMPRESS_MIB_SETTING
-#define MIB_TLV
-
-#ifdef MIB_TLV
-#define MIB_TABLE_LIST 0x8000
-#else
-#define MIB_TABLE_LIST 0x0
-#endif
-
-//#ifdef HOME_GATEWAY
-//#define GW_QOS_ENGINE
-//#endif
-#ifdef ENABLE_QOS // thru makefile
- #ifndef QOS_BY_BANDWIDTH
- #define GW_QOS_ENGINE
- #endif
-#endif
-
-#if defined(CONFIG_RTL_92D_SUPPORT)||defined(CONFIG_RTL_DUAL_PCIESLOT_BIWLAN)
-#define NUM_WLAN_INTERFACE 2 // number of wlan interface supported
-#else
-#define NUM_WLAN_INTERFACE 1 // number of wlan interface supported
-#endif
-
-#if defined(CONFIG_RTL_819X)
-#define NUM_WLAN_MULTIPLE_SSID 8 // number of wlan ssid support
-#else
-//!CONFIG_RTL_8196B => rtl8651c+rtl8190
-#define NUM_WLAN_MULTIPLE_SSID 5 // number of wlan ssid support
-#endif
-
-#ifdef MBSSID
-#define NUM_VWLAN 4 // number of virtual wlan interface supported
-#else
-#define NUM_VWLAN 0
-#endif
-
-#ifdef UNIVERSAL_REPEATER
-#define NUM_VWLAN_INTERFACE NUM_VWLAN+1
-#else
-#define NUM_VWLAN_INTERFACE NUM_VWLAN
-#endif
-
-// WLAN MIB id
-#define MIB_WLAN_SSID 1
-#define MIB_WLAN_CHANNEL 2
-#define MIB_WLAN_WEP 3
-#define MIB_WLAN_WEP64_KEY1 4
-#define MIB_WLAN_WEP64_KEY2 5
-#define MIB_WLAN_WEP64_KEY3 6
-#define MIB_WLAN_WEP64_KEY4 7
-#define MIB_WLAN_WEP128_KEY1 8
-#define MIB_WLAN_WEP128_KEY2 9
-#define MIB_WLAN_WEP128_KEY3 10
-#define MIB_WLAN_WEP128_KEY4 11
-#define MIB_WLAN_WEP_KEY_TYPE 12
-#define MIB_WLAN_WEP_DEFAULT_KEY 13
-#define MIB_WLAN_FRAG_THRESHOLD 14
-#define MIB_WLAN_SUPPORTED_RATES 15
-#define MIB_WLAN_BEACON_INTERVAL 16
-#define MIB_WLAN_PREAMBLE_TYPE 17
-#define MIB_WLAN_BASIC_RATES 18
-#define MIB_WLAN_RTS_THRESHOLD 19
-#define MIB_WLAN_AUTH_TYPE 20
-#define MIB_WLAN_HIDDEN_SSID 21
-#define MIB_WLAN_WLAN_DISABLED 22
-#define MIB_ELAN_MAC_ADDR 23
-#define MIB_WLAN_WLAN_MAC_ADDR 24
-#define MIB_WLAN_ENCRYPT 25
-#define MIB_WLAN_ENABLE_SUPP_NONWPA 26
-#define MIB_WLAN_SUPP_NONWPA 27
-#define MIB_WLAN_WPA_AUTH 28
-#define MIB_WLAN_WPA_CIPHER_SUITE 29
-#define MIB_WLAN_WPA_PSK 30
-#define MIB_WLAN_WPA_GROUP_REKEY_TIME 31
-#define MIB_WLAN_RS_IP 32
-#define MIB_WLAN_RS_PORT 33
-#define MIB_WLAN_RS_PASSWORD 34
-#define MIB_WLAN_ENABLE_1X 35
-#define MIB_WLAN_PSK_FORMAT 36
-#define MIB_WLAN_WPA2_PRE_AUTH 37
-#define MIB_WLAN_WPA2_CIPHER_SUITE 38
-#define MIB_WLAN_ACCOUNT_RS_ENABLED 39
-#define MIB_WLAN_ACCOUNT_RS_IP 40
-#define MIB_WLAN_ACCOUNT_RS_PORT 41
-#define MIB_WLAN_ACCOUNT_RS_PASSWORD 42
-#define MIB_WLAN_ACCOUNT_RS_UPDATE_ENABLED 43
-#define MIB_WLAN_ACCOUNT_RS_UPDATE_DELAY 44
-#define MIB_WLAN_MAC_AUTH_ENABLED 45
-#define MIB_WLAN_RS_MAXRETRY 46
-#define MIB_WLAN_RS_INTERVAL_TIME 47
-#define MIB_WLAN_ACCOUNT_RS_MAXRETRY 48
-#define MIB_WLAN_ACCOUNT_RS_INTERVAL_TIME 49
-
-#define MIB_WLAN_INACTIVITY_TIME 50
-#define MIB_WLAN_RATE_ADAPTIVE_ENABLED 51
-#define MIB_WLAN_MACAC_ENABLED 52
-#define MIB_WLAN_MACAC_NUM 53
-#define MIB_WLAN_MACAC_ADDR ((MIB_WLAN_MACAC_NUM+1)|MIB_TABLE_LIST)
-#define MIB_WLAN_AC_ADDR_ADD ((MIB_WLAN_MACAC_NUM+2)|MIB_ADD_TBL_ENTRY)
-#define MIB_WLAN_AC_ADDR_DEL ((MIB_WLAN_MACAC_NUM+3)|MIB_DEL_TBL_ENTRY)
-#define MIB_WLAN_AC_ADDR_DELALL ((MIB_WLAN_MACAC_NUM+4)|MIB_DELALL_TBL_ENTRY)
-#define MIB_WLAN_DTIM_PERIOD 58
-#define MIB_WLAN_MODE 59
-#define MIB_WLAN_NETWORK_TYPE 60
-#define MIB_WLAN_DEFAULT_SSID 61 // used while configured as Ad-hoc and no any other Ad-hoc could be joined
- // it will use this default SSID to start BSS
-#define MIB_WLAN_IAPP_DISABLED 62
-#define MIB_WLAN_WDS_ENABLED 63
-#define MIB_WLAN_WDS_NUM 64
-#define MIB_WLAN_WDS ((MIB_WLAN_WDS_NUM+1)|MIB_TABLE_LIST)
-#define MIB_WLAN_WDS_ADD ((MIB_WLAN_WDS_NUM+2)|MIB_ADD_TBL_ENTRY)
-#define MIB_WLAN_WDS_DEL ((MIB_WLAN_WDS_NUM+3)|MIB_DEL_TBL_ENTRY)
-#define MIB_WLAN_WDS_DELALL ((MIB_WLAN_WDS_NUM+4)|MIB_DELALL_TBL_ENTRY)
-#define MIB_WLAN_WDS_ENCRYPT 69
-#define MIB_WLAN_WDS_WEP_FORMAT 70
-#define MIB_WLAN_WDS_WEP_KEY 71
-#define MIB_WLAN_WDS_PSK_FORMAT 72
-#define MIB_WLAN_WDS_PSK 73
-#define MIB_WLAN_BAND 74
-#define MIB_WLAN_FIX_RATE 75
-#define MIB_WLAN_BLOCK_RELAY 76
-#define MIB_WLAN_MACCLONE_ENABLED 77
-#define MIB_WLAN_PROTECTION_DISABLED 78
-#ifdef TLS_CLIENT
-//sc_yang for client mode TLS
-#define MIB_CERTROOT_TBL_NUM 79
-#define MIB_CERTROOT_TBL ((MIB_CERTROOT_TBL_NUM+1)|MIB_TABLE_LIST)
-#define MIB_CERTROOT_ADD ((MIB_CERTROOT_TBL_NUM+2)|MIB_ADD_TBL_ENTRY)
-#define MIB_CERTROOT_DEL ((MIB_CERTROOT_TBL_NUM+3)|MIB_DEL_TBL_ENTRY)
-#define MIB_CERTROOT_DELALL ((MIB_CERTROOT_TBL_NUM+4)|MIB_DELALL_TBL_ENTRY)
-#define MIB_CERTUSER_TBL_NUM 84
-#define MIB_CERTUSER_TBL ((MIB_CERTUSER_TBL_NUM+1)|MIB_TABLE_LIST)
-#define MIB_CERTUSER_ADD ((MIB_CERTUSER_TBL_NUM+2)|MIB_ADD_TBL_ENTRY)
-#define MIB_CERTUSER_DEL ((MIB_CERTUSER_TBL_NUM+3)|MIB_DEL_TBL_ENTRY)
-#define MIB_CERTUSER_DELALL ((MIB_CERTUSER_TBL_NUM+4)|MIB_DELALL_TBL_ENTRY)
-#endif
-
-// for WMM
-#define MIB_WLAN_WMM_ENABLED 89
-
-#ifdef WLAN_EASY_CONFIG
-#define MIB_WLAN_EASYCFG_ENABLED 90
-#define MIB_WLAN_EASYCFG_MODE 91
-#define MIB_WLAN_EASYCFG_SSID 92
-#define MIB_WLAN_EASYCFG_KEY 93
-#define MIB_WLAN_EASYCFG_ALG_REQ 94
-#define MIB_WLAN_EASYCFG_ALG_SUPP 95
-#define MIB_WLAN_EASYCFG_DIGEST 96
-#define MIB_WLAN_EASYCFG_ROLE 97
-#define MIB_WLAN_EASYCFG_SCAN_SSID 98
-#define MIB_WLAN_EASYCFG_WLAN_MODE 99
-#endif // WLAN_EASY_CONFIG
-
-#ifdef MIB_TLV
-#define MIB_ROOT (100|MIB_TABLE_LIST)
-#define MIB_WLAN_ROOT (101|MIB_TABLE_LIST)
-#else //etop modify
-#define MIB_ROOT (100|MIB_TABLE_LIST)
-#define MIB_WLAN_ROOT (101|MIB_TABLE_LIST)
-
-#endif
-#if defined(CONFIG_RTL_8198_AP_ROOT)
-#define MIB_NTP_ENABLED 151
-#define MIB_NTP_SERVER_ID 152
-#define MIB_NTP_TIMEZONE 153
-#define MIB_NTP_SERVER_IP1 154
-#define MIB_NTP_SERVER_IP2 155
-#endif
-
-#define MIB_WAN_MAC_ADDR 100
-#define MIB_WAN_IP_ADDR 101
-#define MIB_WAN_SUBNET_MASK 102
-#define MIB_WAN_DEFAULT_GATEWAY 103
-#define MIB_WAN_DHCP 104
-#define MIB_DNS_MODE 105
-#define MIB_PPP_USER_NAME 106
-#define MIB_PPP_PASSWORD 107
-#define MIB_PPP_IDLE_TIME 108
-#define MIB_PPP_CONNECT_TYPE 109
-
-#ifdef HOME_GATEWAY
-
-#define MIB_PORTFW_ENABLED 110
-#define MIB_PORTFW_TBL_NUM 111
-#define MIB_PORTFW_TBL ((MIB_PORTFW_TBL_NUM+1)|MIB_TABLE_LIST)
-#define MIB_PORTFW_ADD ((MIB_PORTFW_TBL_NUM+2)|MIB_ADD_TBL_ENTRY)
-#define MIB_PORTFW_DEL ((MIB_PORTFW_TBL_NUM+3)|MIB_DEL_TBL_ENTRY)
-#define MIB_PORTFW_DELALL ((MIB_PORTFW_TBL_NUM+4)|MIB_DELALL_TBL_ENTRY)
-#define MIB_IPFILTER_ENABLED 116
-#define MIB_IPFILTER_TBL_NUM 117
-#define MIB_IPFILTER_TBL ((MIB_IPFILTER_TBL_NUM+1)|MIB_TABLE_LIST)
-#define MIB_IPFILTER_ADD ((MIB_IPFILTER_TBL_NUM+2)|MIB_ADD_TBL_ENTRY)
-#define MIB_IPFILTER_DEL ((MIB_IPFILTER_TBL_NUM+3)|MIB_DEL_TBL_ENTRY)
-#define MIB_IPFILTER_DELALL ((MIB_IPFILTER_TBL_NUM+4)|MIB_DELALL_TBL_ENTRY)
-#define MIB_MACFILTER_ENABLED 122
-#define MIB_MACFILTER_TBL_NUM 123
-#define MIB_MACFILTER_TBL ((MIB_MACFILTER_TBL_NUM+1)|MIB_TABLE_LIST)
-#define MIB_MACFILTER_ADD ((MIB_MACFILTER_TBL_NUM+2)|MIB_ADD_TBL_ENTRY)
-#define MIB_MACFILTER_DEL ((MIB_MACFILTER_TBL_NUM+3)|MIB_DEL_TBL_ENTRY)
-#define MIB_MACFILTER_DELALL ((MIB_MACFILTER_TBL_NUM+4)|MIB_DELALL_TBL_ENTRY)
-#define MIB_PORTFILTER_ENABLED 128
-#define MIB_PORTFILTER_TBL_NUM 129
-#define MIB_PORTFILTER_TBL ((MIB_PORTFILTER_TBL_NUM+1)|MIB_TABLE_LIST)
-#define MIB_PORTFILTER_ADD ((MIB_PORTFILTER_TBL_NUM+2)|MIB_ADD_TBL_ENTRY)
-#define MIB_PORTFILTER_DEL ((MIB_PORTFILTER_TBL_NUM+3)|MIB_DEL_TBL_ENTRY)
-#define MIB_PORTFILTER_DELALL ((MIB_PORTFILTER_TBL_NUM+4)|MIB_DELALL_TBL_ENTRY)
-#define MIB_TRIGGERPORT_ENABLED 134
-#define MIB_TRIGGERPORT_TBL_NUM 135
-#define MIB_TRIGGERPORT_TBL ((MIB_TRIGGERPORT_TBL_NUM+1)|MIB_TABLE_LIST)
-#define MIB_TRIGGERPORT_ADD ((MIB_TRIGGERPORT_TBL_NUM+2)|MIB_ADD_TBL_ENTRY)
-#define MIB_TRIGGERPORT_DEL ((MIB_TRIGGERPORT_TBL_NUM+3)|MIB_DEL_TBL_ENTRY)
-#define MIB_TRIGGERPORT_DELALL ((MIB_TRIGGERPORT_TBL_NUM+4)|MIB_DELALL_TBL_ENTRY)
-#define MIB_DMZ_ENABLED 140
-#define MIB_DMZ_HOST 141
-#define MIB_UPNP_ENABLED 142
-#define MIB_UPNP_IGD_NAME 143
-#endif //#ifdef HOME_GATEWAY
-
-#define MIB_PPP_MTU_SIZE 144
-#define MIB_PPTP_IP_ADDR 145
-#define MIB_PPTP_SUBNET_MASK 146
-#define MIB_PPTP_SERVER_IP_ADDR 147
-#define MIB_PPTP_USER_NAME 148
-#define MIB_PPTP_PASSWORD 149
-#define MIB_PPTP_MTU_SIZE 150
-#define MIB_NTP_ENABLED 151
-#define MIB_NTP_SERVER_ID 152
-#define MIB_NTP_TIMEZONE 153
-#define MIB_NTP_SERVER_IP1 154
-#define MIB_NTP_SERVER_IP2 155
-#define MIB_PPTP_SECURITY_ENABLED 156
-#define MIB_FIXED_IP_MTU_SIZE 157
-#define MIB_DHCP_MTU_SIZE 158
-#define MIB_PPTP_MPPC_ENABLED 159
-
-#ifdef HOME_GATEWAY
-
-#ifdef VPN_SUPPORT
-#define MIB_IPSECTUNNEL_ENABLED 160
-#define MIB_IPSECTUNNEL_TBL_NUM 161
-#define MIB_IPSECTUNNEL_TBL ((MIB_IPSECTUNNEL_TBL_NUM+1)|MIB_TABLE_LIST)
-#define MIB_IPSECTUNNEL_ADD ((MIB_IPSECTUNNEL_TBL_NUM+2)|MIB_ADD_TBL_ENTRY)
-#define MIB_IPSECTUNNEL_DEL ((MIB_IPSECTUNNEL_TBL_NUM+3)|MIB_DEL_TBL_ENTRY)
-#define MIB_IPSECTUNNEL_DELALL ((MIB_IPSECTUNNEL_TBL_NUM+4)|MIB_DELALL_TBL_ENTRY)
-#define MIB_IPSEC_NATT_ENABLED 167
-#define MIB_IPSEC_RSA_FILE 168
-#endif
-#endif // HOME_GATEWAY
-
-#define MIB_IP_ADDR 170
-#define MIB_SUBNET_MASK 171
-#define MIB_DEFAULT_GATEWAY 172
-#define MIB_DHCP 173
-#define MIB_DHCP_CLIENT_START 174
-#define MIB_DHCP_CLIENT_END 175
-#define MIB_DNS1 176
-#define MIB_DNS2 177
-#define MIB_DNS3 178
-#define MIB_STP_ENABLED 179
-#define MIB_SUPER_NAME 180
-#define MIB_SUPER_PASSWORD 181
-#define MIB_USER_NAME 182
-#define MIB_USER_PASSWORD 183
-#define MIB_SCRLOG_ENABLED 184
-#define MIB_AUTO_DISCOVERY_ENABLED 185
-#define MIB_DEVICE_NAME 186
-
-#ifdef HOME_GATEWAY
-#define MIB_DDNS_ENABLED 187
-#define MIB_DDNS_TYPE 188
-#define MIB_DDNS_DOMAIN_NAME 189
-#define MIB_DDNS_USER 190
-#define MIB_DDNS_PASSWORD 191
-#endif
-#define MIB_OP_MODE 192
-#define MIB_WISP_WAN_ID 193
-
-#ifdef HOME_GATEWAY
-#define MIB_WEB_WAN_ACCESS_ENABLED 194
-#define MIB_PING_WAN_ACCESS_ENABLED 195
-#define MIB_HOST_NAME 197
-#endif
-
-#define MIB_DOMAIN_NAME 198
-
-#ifdef MIB_TLV
-//#define MIB_TABLE_LIST 0x8000
-#define MIB_ID_MASK (0x8000-1)
-#define MIB_HW_ROOT (200|MIB_TABLE_LIST)
-#define MIB_HW_WLAN_ROOT (201|MIB_TABLE_LIST)
-#define MIB_ADD_TBL_ENTRY 0x10000
-#define MIB_DEL_TBL_ENTRY 0x20000
-#define MIB_DELALL_TBL_ENTRY 0x40000
-#define MIB_WLAN_TBL 0x80000
-#else //etop modify :for config
-//#define MIB_TABLE_LIST 0x8000
-#define MIB_ID_MASK (0x8000-1)
-#define MIB_HW_ROOT (200|MIB_TABLE_LIST)
-#define MIB_HW_WLAN_ROOT (201|MIB_TABLE_LIST)
-#define MIB_ADD_TBL_ENTRY 0x10000
-#define MIB_DEL_TBL_ENTRY 0x20000
-#define MIB_DELALL_TBL_ENTRY 0x40000
-#define MIB_WLAN_TBL 0x80000
-#endif // #ifdef MIB_TLV
-
-// Hardware setting MIB
-#define MIB_HW_BOARD_VER 200
-#define MIB_HW_NIC0_ADDR 201
-#define MIB_HW_NIC1_ADDR 202
-#define MIB_HW_WLAN_ADDR 203
-#define MIB_HW_REG_DOMAIN 204
-#define MIB_HW_RF_TYPE 205
-#define MIB_HW_TX_POWER_CCK 206
-#define MIB_HW_TX_POWER_OFDM 207
-#define MIB_HW_ANT_DIVERSITY 208
-#define MIB_HW_TX_ANT 209
-#define MIB_HW_CCA_MODE 210
-#define MIB_HW_PHY_TYPE 211
-#define MIB_HW_LED_TYPE 212
-#define MIB_HW_INIT_GAIN 213
-
-
-#ifdef TLS_CLIENT
-#define MIB_ROOT_IDX 214
-#define MIB_USER_IDX 215
-#endif
-#ifdef ROUTE_SUPPORT
-#define MIB_STATICROUTE_ENABLED 216
-#define MIB_STATICROUTE_TBL_NUM 217
-#define MIB_STATICROUTE_TBL ((MIB_STATICROUTE_TBL_NUM+1)|MIB_TABLE_LIST) /*218*/
-#define MIB_STATICROUTE_ADD ((MIB_STATICROUTE_TBL_NUM+2) | MIB_ADD_TBL_ENTRY)
-#define MIB_STATICROUTE_DEL ((MIB_STATICROUTE_TBL_NUM+3) | MIB_DEL_TBL_ENTRY)
-#define MIB_STATICROUTE_DELALL ((MIB_STATICROUTE_TBL_NUM+4) | MIB_DELALL_TBL_ENTRY)/*221*/
-#define MIB_RIP_ENABLED 222
-#define MIB_RIP_LAN_TX 223
-#define MIB_RIP_LAN_RX 224
-#define MIB_RIP_WAN_TX 225
-#define MIB_RIP_WAN_RX 226
-#endif
-
-#define MIB_REMOTELOG_ENABLED 227
-#define MIB_REMOTELOG_SERVER 228
-
-#ifdef HOME_GATEWAY
-#ifdef DOS_SUPPORT
-#define MIB_DOS_ENABLED 229
-#define MIB_DOS_SYSSYN_FLOOD 230
-#define MIB_DOS_SYSFIN_FLOOD 231
-#define MIB_DOS_SYSUDP_FLOOD 232
-#define MIB_DOS_SYSICMP_FLOOD 233
-#define MIB_DOS_PIPSYN_FLOOD 234
-#define MIB_DOS_PIPFIN_FLOOD 235
-#define MIB_DOS_PIPUDP_FLOOD 236
-#define MIB_DOS_PIPICMP_FLOOD 237
-#define MIB_DOS_BLOCK_TIME 238
-#endif
-#define MIB_URLFILTER_ENABLED 239
-#define MIB_URLFILTER_TBL_NUM 240
-#define MIB_URLFILTER_TBL ((MIB_URLFILTER_TBL_NUM+1)|MIB_TABLE_LIST)
-#define MIB_URLFILTER_ADD ((MIB_URLFILTER_TBL_NUM+2) | MIB_ADD_TBL_ENTRY)
-#define MIB_URLFILTER_DEL ((MIB_URLFILTER_TBL_NUM+3) | MIB_DEL_TBL_ENTRY)
-#define MIB_URLFILTER_DELALL ((MIB_URLFILTER_TBL_NUM+4)| MIB_DELALL_TBL_ENTRY)
-
-#define MIB_VPN_PASSTHRU_IPSEC_ENABLED 245
-#define MIB_VPN_PASSTHRU_PPTP_ENABLED 246
-#define MIB_VPN_PASSTHRU_L2TP_ENABLED 247
-#define MIB_CUSTOM_PASSTHRU_ENABLED 386
-#endif
-
-//#ifdef SNMP_SUPPORT Keith remove
-#define MIB_SNMP_RO_COMMUNITY 248
-#define MIB_SNMP_RW_COMMUNITY 249
-//#endif Keith remove
-#ifdef UNIVERSAL_REPEATER
-#define MIB_REPEATER_ENABLED1 250
-#define MIB_REPEATER_SSID1 251
-#define MIB_REPEATER_ENABLED2 252
-#define MIB_REPEATER_SSID2 253
-#endif
-
-// added by rock /////////////////////////////////////////
-#ifdef VOIP_SUPPORT
-#define MIB_VOIP_CFG 254
-#endif // VOIP_SUPPORT
-
-#define MIB_WIFI_SPECIFIC 260
-
-#define MIB_PPP_SERVICE_NAME 261
-
-#define MIB_WLAN_TURBO_MODE 262
-#define MIB_WLAN_RFPOWER_SCALE 263
-
-#ifdef WIFI_SIMPLE_CONFIG
-#define MIB_WLAN_WSC_DISABLE 270
-#define MIB_WLAN_WSC_METHOD 271
-#define MIB_WLAN_WSC_CONFIGURED 272
-#define MIB_HW_WSC_PIN 273
-#define MIB_WLAN_WSC_AUTH 274
-#define MIB_WLAN_WSC_ENC 275
-#define MIB_WLAN_WSC_MANUAL_ENABLED 276
-#define MIB_WLAN_WSC_PSK 277
-#define MIB_WLAN_WSC_SSID 278
-#define MIB_WLAN_WSC_UPNP_ENABLED 279
-#define MIB_WLAN_WSC_REGISTRAR_ENABLED 280
-#define MIB_WLAN_WSC_CONFIGBYEXTREG 281
-#endif
-//Brad addd
-#define MIB_DAYLIGHT_SAVE 282
-#define MIB_IGMP_PROXY_DISABLED 283
-//Brad add for 11N
-#define MIB_WLAN_CHANNEL_BONDING 284
-#define MIB_WLAN_CONTROL_SIDEBAND 285
-#define MIB_WLAN_AGGREGATION 286
-#define MIB_WLAN_SHORT_GI 287
-//Brad define
-#define MIB_WLAN_WEP64_KEY 288
-#define MIB_WLAN_WEP128_KEY 289
-
-#define MIB_HW_11N_XCAP 290
-#define MIB_HW_11N_RXIMR 291
-#define MIB_DHCPRSVDIP_ENABLED 292
-#define MIB_DHCPRSVDIP_TBL_NUM 293
-#define MIB_DHCPRSVDIP_TBL ((MIB_DHCPRSVDIP_TBL_NUM+1)|MIB_TABLE_LIST)
-#define MIB_DHCPRSVDIP_ADD ((MIB_DHCPRSVDIP_TBL_NUM+2)|MIB_ADD_TBL_ENTRY)
-#define MIB_DHCPRSVDIP_DEL ((MIB_DHCPRSVDIP_TBL_NUM+3)|MIB_DEL_TBL_ENTRY)
-#define MIB_DHCPRSVDIP_DELALL ((MIB_DHCPRSVDIP_TBL_NUM+4)|MIB_DELALL_TBL_ENTRY)
-#define MIB_HW_11N_LOFDMPWD 298
-#define MIB_HW_11N_ANTPWD_B 299
-#define MIB_HW_11N_ANTPWD_C 300
-#define MIB_HW_11N_ANTPWD_D 301
-#define MIB_HW_11N_THER_RFIC 302
-#define MIB_HW_WLAN_ADDR1 303
-#define MIB_HW_WLAN_ADDR2 304
-#define MIB_HW_WLAN_ADDR3 305
-#define MIB_HW_WLAN_ADDR4 306
-
-// GW_QOS_ENGINE
-#define MIB_QOS_ENABLED 307
-#define MIB_QOS_AUTO_UPLINK_SPEED 308
-#define MIB_QOS_MANUAL_UPLINK_SPEED 309
-#define MIB_QOS_RULE_TBL_NUM 310
-#define MIB_QOS_RULE_TBL ((MIB_QOS_RULE_TBL_NUM+1)|MIB_TABLE_LIST)
-#define MIB_QOS_ADD ((MIB_QOS_RULE_TBL_NUM+2)|MIB_ADD_TBL_ENTRY)
-#define MIB_QOS_DEL ((MIB_QOS_RULE_TBL_NUM+3)|MIB_DEL_TBL_ENTRY)
-#define MIB_QOS_DELALL ((MIB_QOS_RULE_TBL_NUM+4)|MIB_DELALL_TBL_ENTRY)
-
-#define MIB_WLAN_ACCESS 315
-#define MIB_WLAN_PRIORITY 316
-
-#define MIB_START_MP 317
-
-#define MIB_SYSTIME_YEAR 321
-#define MIB_SYSTIME_MON 322
-#define MIB_SYSTIME_DAY 323
-#define MIB_SYSTIME_HOUR 324
-#define MIB_SYSTIME_MIN 325
-#define MIB_SYSTIME_SEC 326
-
-/* # keith: add l2tp support. 20080515 */
-#define MIB_L2TP_IP_ADDR 331
-#define MIB_L2TP_SUBNET_MASK 332
-#define MIB_L2TP_SERVER_IP_ADDR 333
-#define MIB_L2TP_USER_NAME 334
-#define MIB_L2TP_PASSWORD 335
-#define MIB_L2TP_MTU_SIZE 336
-#define MIB_L2TP_CONNECTION_TYPE 337
-#define MIB_L2TP_IDLE_TIME 338
-
-#ifdef CONFIG_IPV6
-#define MIB_IPV6_ID 380
-#define MIB_IPV6_RADVD_PARAM (MIB_IPV6_ID)
-#define MIB_IPV6_DNSV6_PARAM (MIB_IPV6_ID+1)
-#define MIB_IPV6_DHCPV6S_PARAM (MIB_IPV6_ID+2)
-#define MIB_IPV6_ADDR_PARAM (MIB_IPV6_ID+3)
-#define MIB_IPV6_TUNNEL_PARAM (MIB_IPV6_ID+4)
-#endif
-
-// SNMP, Forrest added, 2007.10.25.
-#ifdef CONFIG_SNMP
-#define MIB_SNMP_ENABLED 435
-#define MIB_SNMP_NAME 436
-#define MIB_SNMP_LOCATION 437
-#define MIB_SNMP_CONTACT 438
-#define MIB_SNMP_RWCOMMUNITY 439
-#define MIB_SNMP_ROCOMMUNITY 440
-#define MIB_SNMP_TRAP_RECEIVER1 441
-#define MIB_SNMP_TRAP_RECEIVER2 442
-#define MIB_SNMP_TRAP_RECEIVER3 443
-#endif
-
-//### add by sen_liu 2011.3.29 TX Beamforming added to mib in 92D
-#define MIB_WLAN_TX_BEAMFORMING 450
-//### end
-
-/*hf add for country str*/
-#define MIB_WLAN_COUNTRY_STRING 451
-/*end*/
-/* # keith: add l2tp support. 20080515 */
-#define MIB_L2TP_WAN_IP_DYNAMIC 501
-#define MIB_L2TP_GATEWAY 502
-//SCHEDULE
-
-#define MIB_WLAN_SCHEDULE_ENABLED 503
-#define MIB_WLAN_SCHEDULE_TBL_NUM 504
-#define MIB_WLAN_SCHEDULE_TBL ((MIB_WLAN_SCHEDULE_TBL_NUM+1)|MIB_TABLE_LIST)
-#define MIB_WLAN_SCHEDULE_ADD ((MIB_WLAN_SCHEDULE_TBL_NUM+2)|MIB_ADD_TBL_ENTRY)
-#define MIB_WLAN_SCHEDULE_DEL ((MIB_WLAN_SCHEDULE_TBL_NUM+3)|MIB_DEL_TBL_ENTRY)
-#define MIB_WLAN_SCHEDULE_DELALL ((MIB_WLAN_SCHEDULE_TBL_NUM+4)|MIB_DELALL_TBL_ENTRY)
-
-#define MIB_PPTP_CONNECTION_TYPE 509
-#define MIB_PPTP_IDLE_TIME 510
-
-
-//NewAdd For rtl8196B
-#define MIB_HW_WLAN_ADDR5 511
-#define MIB_HW_WLAN_ADDR6 512
-#define MIB_HW_WLAN_ADDR7 513
-
-#define MIB_HW_TX_POWER_OFDM_1S 514
-#define MIB_HW_TX_POWER_OFDM_2S 515
-#define MIB_HW_11N_LOFDMPWDA 516
-#define MIB_HW_11N_LOFDMPWDB 517
-#define MIB_HW_11N_TSSI1 518
-#define MIB_HW_11N_TSSI2 519
-#define MIB_HW_11N_THER 520
-#define MIB_HW_11N_TRSWITCH 521 //MIB_HW_11N_ESERVED1->MIB_HW_11N_TRSWITCH
-#define MIB_HW_11N_TRSWPAPE_C9 522
-#define MIB_HW_11N_TRSWPAPE_CC 523
-#define MIB_HW_11N_TARGET_PWR 524
-#define MIB_HW_11N_RESERVED5 525
-#define MIB_HW_11N_RESERVED6 526
-#define MIB_HW_11N_RESERVED7 527
-#define MIB_HW_11N_RESERVED8 528
-
-/*-----end-----*/
-
-// SNMP maximum length of fields, Forrest added, 2007.10.25.
-#ifdef CONFIG_SNMP
-#define MAX_SNMP_NAME_LEN 64
-#define MAX_SNMP_LOCATION_LEN 64
-#define MAX_SNMP_CONTACT_LEN 64
-#define MAX_SNMP_COMMUNITY_LEN 64
-#endif
-
-//=========add for MESH=========
-//#ifdef CONFIG_RTK_MESH Keith remove
-#define MIB_MESH_ENABLE 644 //new feature:Mesh enable/disable
-#define MIB_MESH_ROOT_ENABLE 551
-#define MIB_MESH_ID 554
-#define MIB_MESH_MAX_NEIGHTBOR 555
-#define MIB_MESH_ENCRYPT 559
-#define MIB_MESH_PSK_FORMAT 560
-#define MIB_MESH_WPA_PSK 561
-#define MIB_MESH_WPA_AUTH 562
-#define MIB_MESH_WPA2_CIPHER_SUITE 563
-
-//#ifdef _MESH_ACL_ENABLE_ Keith remove
-#define MIB_MESH_ACL_ENABLED 580
-#define MIB_MESH_ACL_NUM 581
-#define MIB_MESH_ACL_ADDR ((MIB_MESH_ACL_NUM+1)|MIB_TABLE_LIST)
-#define MIB_MESH_ACL_ADDR_ADD ((MIB_MESH_ACL_NUM+2)|MIB_ADD_TBL_ENTRY)
-#define MIB_MESH_ACL_ADDR_DEL ((MIB_MESH_ACL_NUM+3)|MIB_DEL_TBL_ENTRY)
-#define MIB_MESH_ACL_ADDR_DELALL ((MIB_MESH_ACL_NUM+4)|MIB_DELALL_TBL_ENTRY)
-//#endif Keith remove
-
-//#ifdef _11s_TEST_MODE_ Keith remove
-#define MIB_MESH_TEST_PARAM1 600
-#define MIB_MESH_TEST_PARAM2 601
-#define MIB_MESH_TEST_PARAM3 602
-#define MIB_MESH_TEST_PARAM4 603
-#define MIB_MESH_TEST_PARAM5 604
-#define MIB_MESH_TEST_PARAM6 605
-#define MIB_MESH_TEST_PARAM7 606
-#define MIB_MESH_TEST_PARAM8 607
-#define MIB_MESH_TEST_PARAM9 608
-#define MIB_MESH_TEST_PARAMA 609
-#define MIB_MESH_TEST_PARAMB 610
-#define MIB_MESH_TEST_PARAMC 611
-#define MIB_MESH_TEST_PARAMD 612
-#define MIB_MESH_TEST_PARAME 613
-#define MIB_MESH_TEST_PARAMF 614
-#define MIB_MESH_TEST_PARAMSTR1 615
-//#endif Keith remove
-//#endif // CONFIG_RTK_MESH Keith remove
-//=========add for MESH=========
-
-#define MIB_VLANCONFIG_ENABLED 616
-#define MIB_VLANCONFIG_TBL_NUM 617
-#define MIB_VLANCONFIG_TBL ((MIB_VLANCONFIG_TBL_NUM+1)|MIB_TABLE_LIST)
-#define MIB_VLANCONFIG_ADD ((MIB_VLANCONFIG_TBL_NUM+2)|MIB_ADD_TBL_ENTRY)
-#define MIB_VLANCONFIG_DEL ((MIB_VLANCONFIG_TBL_NUM+3)|MIB_DEL_TBL_ENTRY)
-#define MIB_VLANCONFIG_DELALL ((MIB_VLANCONFIG_TBL_NUM+4)|MIB_DELALL_TBL_ENTRY)
-
-//#ifdef CONFIG_RTL_WAPI_SUPPORT Keith remove
-//WAPI start from 630
-#define MIB_WLAN_WAPI_PSK 630
-#define MIB_WLAN_WAPI_PSKLEN 631
-#define MIB_WLAN_WAPI_PSK_FORMAT 632
-#define MIB_WLAN_WAPI_AUTH 633
-#define MIB_WLAN_WAPI_ASIPADDR 634
-#define MIB_WLAN_WAPI_SEARCHINFO 635
-#define MIB_WLAN_WAPI_SEARCHINDEX 636
-#define MIB_WLAN_WAPI_MCASTREKEY 637
-#define MIB_WLAN_WAPI_MCAST_TIME 638
-#define MIB_WLAN_WAPI_MCAST_PACKETS 639
-#define MIB_WLAN_WAPI_UCASTREKEY 640
-#define MIB_WLAN_WAPI_UCAST_TIME 641
-#define MIB_WLAN_WAPI_UCAST_PACKETS 642
-#define MIB_WLAN_WAPI_CA_INIT 643
-
-//Added to support two remote as and one local as at the same time
-#define MIB_WLAN_WAPI_CERT_SEL 656
-
-#define MIB_NAT_ENABLED 645
-#define MIB_WLAN_STBC_ENABLED 646
-#define MIB_WLAN_COEXIST_ENABLED 647
-#define MIB_SAMBA_ENABLED 650
-
-#define MIB_MIB_VER 655
-
-//#ifdef CONFIG_RTL_WAPI_SUPPORT Keith remove
-#define CERTS_DATABASE "/var/myca/index.txt"
-#define ONE_DAY_SECONDS 86400
-#define USER_NAME_LEN 32
-typedef struct _CertsDbEntry_ {
- unsigned char userName[USER_NAME_LEN]; //user name of this user cert
- unsigned long serial; //serial of this cert
- unsigned short validDays; //total valid days of this cert
- unsigned short validDaysLeft; //the left valid days of this cert
- unsigned char certType; //0(default): X.509; others: reserved
- unsigned char certStatus; //0(default): valid; 1: expired; 2: revoked
-} CERTS_DB_ENTRY_T, *CERTS_DB_ENTRY_Tp;
-//#endif Keith remove
-//WAPI END
-
-// GW_QOS_ENGINE
-#define MIB_QOS_AUTO_DOWNLINK_SPEED 651
-#define MIB_QOS_MANUAL_DOWNLINK_SPEED 652
-
-//11n onoff TKIP
-#define MIB_WLAN_11N_ONOFF_TKIP 660
-
-#ifdef CONFIG_RTL_BT_CLIENT
-#define MIB_BT_UPLOAD_DIR 680
-#define MIB_BT_DOWNLOAD_DIR 681
-#define MIB_BT_TOTAL_ULIMIT 682
-#define MIB_BT_TOTAL_DLIMIT 683
-#define MIB_BT_REFRESH_TIME 684
-#define MIB_BT_ENABLED 685
-#endif
-
-#define MIB_WLAN_ACK_TIMEOUT 686
-
-/*+++++added by Jack for Tr-069 configuration+++++*/
-#ifdef CONFIG_CWMP_TR069
-#define MIB_CWMP_ID 700 //The value of CWMP_ID is ON or OFF tr069
-#define MIB_CWMP_PROVISIONINGCODE CWMP_ID + 1 //069
-#define MIB_CWMP_ACS_URL CWMP_ID + 2 //069
-#define MIB_CWMP_ACS_USERNAME CWMP_ID + 3 //069
-#define MIB_CWMP_ACS_PASSWORD CWMP_ID + 4 //069
-#define MIB_CWMP_INFORM_ENABLE CWMP_ID + 5 //069
-#define MIB_CWMP_INFORM_INTERVAL CWMP_ID + 6 //069
-#define MIB_CWMP_INFORM_TIME CWMP_ID + 7
-#define MIB_CWMP_CONREQ_USERNAME CWMP_ID + 8
-#define MIB_CWMP_CONREQ_PASSWORD CWMP_ID + 9
-#define MIB_CWMP_ACS_UPGRADESMANAGED CWMP_ID + 10 //069
-//#define MIB_CWMP_LAN_CONFIGPASSWD CWMP_ID + 11
-//#define MIB_CWMP_SERIALNUMBER CWMP_ID + 12 //069
-//#define MIB_CWMP_DHCP_SERVERCONF CWMP_ID + 13
-//#define MIB_CWMP_LAN_IPIFENABLE CWMP_ID + 14
-//#define MIB_CWMP_LAN_ETHIFENABLE CWMP_ID + 15
-//#define MIB_CWMP_WLAN_BASICENCRY CWMP_ID + 16
-//#define MIB_CWMP_WLAN_WPAENCRY CWMP_ID + 17
-#define MIB_CWMP_DL_COMMANDKEY CWMP_ID + 18
-#define MIB_CWMP_DL_STARTTIME CWMP_ID + 19
-#define MIB_CWMP_DL_COMPLETETIME CWMP_ID + 20
-#define MIB_CWMP_DL_FAULTCODE CWMP_ID + 21
-#define MIB_CWMP_INFORM_EVENTCODE CWMP_ID + 22
-#define MIB_CWMP_RB_COMMANDKEY CWMP_ID + 23
-//#define MIB_CWMP_ACS_PARAMETERKEY CWMP_ID + 24
-#define MIB_CWMP_CERT_PASSWORD CWMP_ID + 25
-#define MIB_CWMP_FLAG CWMP_ID + 26
-#define MIB_CWMP_SI_COMMANDKEY CWMP_ID + 27 /*ScheduleInform's commandkey*/
-
-#ifdef _PRMT_USERINTERFACE_ /*InternetGatewayDevice.UserInterface.*/
-#define MIB_UIF_PW_REQUIRED CWMP_ID + 28 /*PasswordRequired*/
-#define MIB_UIF_PW_USER_SEL CWMP_ID + 29 /*PasswordUserSelectable*/
-#define MIB_UIF_UPGRADE CWMP_ID + 30 /*UpgradeAvailable*/
-#define MIB_UIF_WARRANTYDATE CWMP_ID + 31 /*WarrantyDate*/
-#define MIB_UIF_AUTOUPDATESERVER CWMP_ID + 32 /*AutoUpdateServer*/
-#define MIB_UIF_USERUPDATESERVER CWMP_ID + 33 /*UserUpdateServer*/
-#endif /*_PRMT_USERINTERFACE_*/
-
-#define MIB_CWMP_ACS_KICKURL CWMP_ID + 74
-#define MIB_CWMP_ACS_DOWNLOADURL CWMP_ID + 75
-#define MIB_CWMP_CONREQ_PORT CWMP_ID + 76 /*port for connection request*/
-#define MIB_CWMP_CONREQ_PATH CWMP_ID + 77 /*path for connection request*/
-#define MIB_CWMP_FLAG2 CWMP_ID + 78
-
-//#ifdef _PRMT_TR143_
-#define MIB_TR143_UDPECHO_ENABLE CWMP_ID + 79
-#define MIB_TR143_UDPECHO_ITFTYPE CWMP_ID + 80
-#define MIB_TR143_UDPECHO_SRCIP CWMP_ID + 81
-#define MIB_TR143_UDPECHO_PORT CWMP_ID + 82
-#define MIB_TR143_UDPECHO_PLUS CWMP_ID + 83
-//#endif //_PRMT_TR143_
-#define MIB_CWMP_MIB_END CWMP_ID + 200 /* Reserve 200 mib for tr069*/
-#endif /*CONFIG_CWMP_TR069*/
-
-
-
-
-
-#define MIB_TEST_DATA 10000
-
-#define MIB_DHCPRSVDIP_IPADDR 1001
-#define MIB_DHCPRSVDIP_MACADDR 1002
-#define MIB_DHCPRSVDIP_HOSTNAME 1003
-
-#define MIB_SCHEDULE_TEXT 1011
-#define MIB_SCHEDULE_ECO 1012
-#define MIB_SCHEDULE_FTIME 1013
-#define MIB_SCHEDULE_TTIME 1014
-#define MIB_SCHEDULE_DAY 1015
-
-#define MIB_PORTFW_IPADDR 1021
-#define MIB_PORTFW_FROMPORT 1022
-#define MIB_PORTFW_TOPORT 1023
-#define MIB_PORTFW_PROTOTYPE 1024
-#define MIB_PORTFW_COMMENT 1025
-
-#define MIB_IPFILTER_IPADDR 1031
-#define MIB_IPFILTER_PROTOTYPE 1032
-#define MIB_IPFILTER_COMMENT 1033
-
-#define MIB_PORTFILTER_FROMPORT 1041
-#define MIB_PORTFILTER_TOPORT 1042
-#define MIB_PORTFILTER_PROTOTYPE 1043
-#define MIB_PORTFILTER_COMMENT 1044
-
-#define MIB_MACFILTER_MACADDR 1051
-#define MIB_MACFILTER_COMMENT 1052
-
-#define MIB_TRIGGERPORT_TRI_FROMPORT 1061
-#define MIB_TRIGGERPORT_TRI_TOPORT 1062
-#define MIB_TRIGGERPORT_TRI_PROTOTYPE 1063
-#define MIB_TRIGGERPORT_INC_FROMPORT 1064
-#define MIB_TRIGGERPORT_INC_TOPORT 1065
-#define MIB_TRIGGERPORT_INC_PROTOTYPE 1066
-#define MIB_TRIGGERPORT_COMMENT 1067
-
-#define MIB_URLFILTER_URLADDR 1071
-
-#define MIB_VLANCONFIG_ENTRY_ENABLED 1081
-#define MIB_VLANCONFIG_NETIFACE 1082
-#define MIB_VLANCONFIG_TAGGED 1083
-#define MIB_VLANCONFIG_UNTAGGED 1084
-#define MIB_VLANCONFIG_PRIORITY 1085
-#define MIB_VLANCONFIG_CFI 1086
-#define MIB_VLANCONFIG_GROUPID 1087
-#define MIB_VLANCONFIG_VLANID 1088
-
-#define MIB_STATICROUTE_DSTADDR 1091
-#define MIB_STATICROUTE_NETMASK 1092
-#define MIB_STATICROUTE_GATEWAY 1093
-#define MIB_STATICROUTE_INTERFACE 1094
-#define MIB_STATICROUTE_METRIC 1095
-
-#define MIB_IPSECTUNNEL_TUNNELID 1101
-#define MIB_IPSECTUNNEL_AUTHTYPE 1102
-#define MIB_IPSECTUNNEL_LCTYPE 1103
-#define MIB_IPSECTUNNEL_LC_IPADDR 1104
-#define MIB_IPSECTUNNEL_LC_MASKLEN 1105
-#define MIB_IPSECTUNNEL_RTTYPE 1106
-#define MIB_IPSECTUNNEL_RT_IPADDR 1107
-#define MIB_IPSECTUNNEL_RT_MASKLEN 1108
-#define MIB_IPSECTUNNEL_RT_GWADDR 1109
-#define MIB_IPSECTUNNEL_KEYMODE 1110
-#define MIB_IPSECTUNNEL_ESPAH 1111
-#define MIB_IPSECTUNNEL_ESPENCR 1112
-#define MIB_IPSECTUNNEL_ESPAUTH 1113
-#define MIB_IPSECTUNNEL_AHAUTH 1114
-#define MIB_IPSECTUNNEL_CONTYPE 1115
-#define MIB_IPSECTUNNEL_PSKEY 1116
-#define MIB_IPSECTUNNEL_RSAKEY 1117
-#define MIB_IPSECTUNNEL_SPI 1118
-#define MIB_IPSECTUNNEL_ENCRKEY 1119
-#define MIB_IPSECTUNNEL_AUTHKEY 1120
-#define MIB_IPSECTUNNEL_ENABLE 1121
-#define MIB_IPSECTUNNEL_CONNNAME 1122
-#define MIB_IPSECTUNNEL_LCIDTYPE 1123
-#define MIB_IPSECTUNNEL_RTIDTYPE 1124
-#define MIB_IPSECTUNNEL_LCID 1125
-#define MIB_IPSECTUNNEL_RTID 1126
-#define MIB_IPSECTUNNEL_IKELIFETIME 1127
-#define MIB_IPSECTUNNEL_IKEENCR 1128
-#define MIB_IPSECTUNNEL_IKEAUTH 1129
-#define MIB_IPSECTUNNEL_IKEKEYGROUP 1130
-#define MIB_IPSECTUNNEL_IPSECLIFETIME 1131
-#define MIB_IPSECTUNNEL_IPSECPFS 1132
-
-#define MIB_CERTROOT_COMMENT 1151
-
-#define MIB_CERTUSER_COMMENT 1161
-#define MIB_CERTROOT_PASS 1162
-
-#define MIB_QOS_ENTRY_NAME 1171
-#define MIB_QOS_ENTRY_ENABLED 1172
-#define MIB_QOS_PRIORITY 1173
-#define MIB_QOS_PROTOCOL 1174
-#define MIB_QOS_LOCAL_IP_START 1175
-#define MIB_QOS_LOCAL_IP_END 1176
-#define MIB_QOS_LOCAL_PORT_START 1177
-#define MIB_QOS_LOCAL_PORT_END 1178
-#define MIB_QOS_REMOTE_IP_START 1179
-#define MIB_QOS_REMOTE_IP_END 1180
-#define MIB_QOS_REMOTE_PORT_START 1181
-#define MIB_QOS_REMOTE_PORT_END 1182
-
-#define MIB_IPQOS_ENTRY_NAME 1191
-#define MIB_IPQOS_ENABLED 1192
-#define MIB_IPQOS_MAC 1193
-#define MIB_IPQOS_MODE 1194
-#define MIB_IPQOS_LOCAL_IP_START 1195
-#define MIB_IPQOS_LOCAL_IP_END 1196
-#define MIB_IPQOS_BANDWIDTH 1197
-#define MIB_IPQOS_BANDWIDTH_DOWNLINK 1198
-
-#define MIB_MECH_ACL_MACADDR 1201
-#define MIB_MECH_ACL_COMMENT 1202
-
-#define MIB_WLAN_ACL_ADDR_MACADDR 1211
-#define MIB_WLAN_ACL_ADDR_COMMENT 1212
-
-#define MIB_WLAN_WDS_MACADDR 1221
-#define MIB_WLAN_WDS_FIXEDTXRATE 1222
-#define MIB_WLAN_WDS_COMMENT 1223
-
-
-//#ifdef CONFIG_RTL_FLASH_DUAL_IMAGE_ENABLE
-#define MIB_DUALBANK_ENABLED 1300
-#define MIB_WLAN_PHY_BAND_SELECT 1301
-#define MIB_WLAN_MAC_PHY_MODE 1302
-#define MIB_WLAN_BAND2G5G_SELECT 1303
-//#endif
-
-//MIBs for 802.1x wlan client mode
-#ifdef CONFIG_RTL_802_1X_CLIENT_SUPPORT
-#define MIB_WLAN_EAP_TYPE 1311
-#define MIB_WLAN_EAP_INSIDE_TYPE 1312
-#define MIB_WLAN_EAP_USER_ID 1313
-#define MIB_WLAN_RS_USER_NAME 1314
-#define MIB_WLAN_RS_USER_PASSWD 1315
-#define MIB_WLAN_RS_USER_CERT_PASSWD 1316
-#define MIB_WLAN_RS_BAND_SEL 1317
-#endif
-
-/* USB3G */
-#define MIB_USB3G_USER 1400
-#define MIB_USB3G_PASS 1401
-#define MIB_USB3G_PIN 1402
-#define MIB_USB3G_APN 1403
-#define MIB_USB3G_DIALNUM 1404
-#define MIB_USB3G_CONN_TYPE 1405
-#define MIB_USB3G_IDLE_TIME 1406
-#define MIB_USB3G_MTU_SIZE 1407
-
-
-#ifdef CONFIG_CWMP_TR069
-/* define the len of the entities */
-#define CWMP_PROVISION_CODE_LEN 64
-#define CWMP_ACS_URL_LEN 256
-#define CWMP_ACS_USERNAME_LEN 256
-#define CWMP_ACS_PASSWD_LEN 256
-#define CWMP_CONREQ_USERNAME_LEN 256
-#define CWMP_CONREQ_PASSWD_LEN 256
-#define CWMP_LANCONF_PASSWD_LEN 64
-#define CWMP_SERIALNUMBER_LEN 64
-#define CWMP_COMMAND_KEY_LEN 32
-#define CWMP_CERT_PASSWD_LEN 64
-/* define the cwmp_flag */
-#define CWMP_FLAG_DEBUG_MSG 0x01
-#define CWMP_FLAG_CERT_AUTH 0x02
-#define CWMP_FLAG_SENDGETRPC 0x04
-#define CWMP_FLAG_SKIPMREBOOT 0x08
-#define CWMP_FLAG_DELAY 0x10
-#define CWMP_FLAG_AUTORUN 0x20
-
-/* define the len of the entities */
-#define CWMP_PROVISION_CODE_LEN 32 //64 in spec
-#define CWMP_ACS_URL_LEN 64 //256 in spec
-#define CWMP_ACS_USERNAME_LEN 32 //256 in spec
-#define CWMP_ACS_PASSWD_LEN 32 //256 in spec
-#define CWMP_CONREQ_USERNAME_LEN 32 //256 in spec
-#define CWMP_CONREQ_PASSWD_LEN 32 //256 in spec
-#define CONN_REQ_PATH_LEN 32 //32 in spec
-#define CWMP_KICK_URL 32 //64 in spec
-#define CWMP_DOWNLOAD_URL 32 //64 in spec
-//#define CWMP_LANCONF_PASSWD_LEN 64
-//#define CWMP_SERIALNUMBER_LEN 64
-#define CWMP_COMMAND_KEY_LEN 32
-#define CWMP_CERT_PASSWD_LEN 32 //64 in spec
-#define IP_ADDR_LEN 4
-/* define the cwmp_flag */
-#define CWMP_FLAG_DEBUG_MSG 0x01
-#define CWMP_FLAG_CERT_AUTH 0x02
-#define CWMP_FLAG_SENDGETRPC 0x04
-#define CWMP_FLAG_SKIPMREBOOT 0x08
-#define CWMP_FLAG_DELAY 0x10
-#define CWMP_FLAG_AUTORUN 0x20
-#define CWMP_FLAG_CTINFORMEXT 0x40
-#define CWMP_FLAG_SELFREBOOT 0x80
-/*flag for CWMP_FLAG2 setting*/
-#define CWMP_FLAG2_DIS_CONREQ_AUTH 0x01 /*disable connection request authentication*/
-#define CWMP_FLAG2_DEFAULT_WANIP_IN_INFORM 0x02 /*bring the default wan ip in the inform*/
-
-/*action type for applying new values*/
-#define CWMP_NONE 0
-#define CWMP_START 1
-#define CWMP_STOP 2
-#define CWMP_RESTART 3
-
-/*EC_xxxxx event must consist with those defined in cwmp_rpc.h*/
-#define EC_X_CT_COM_ACCOUNT 0x10000 /*X_CT-COM_ACCOUNTCHANGE*/
-
-#endif /*CONFIG_CWMP_TR069*/
-
-#if defined(CONFIG_RTL_8196C) || defined(CONFIG_RTL_8198)
-/*new add since new platform rtl8196c*/
-#define MIB_HW_TX_POWER_CCK_A 901
-#define MIB_HW_TX_POWER_CCK_B 902
-#define MIB_HW_TX_POWER_HT40_1S_A 903
-#define MIB_HW_TX_POWER_HT40_1S_B 904
-#define MIB_HW_TX_POWER_DIFF_HT40_2S 905
-#define MIB_HW_TX_POWER_DIFF_HT20 906
-#define MIB_HW_TX_POWER_DIFF_OFDM 907
-#define MIB_HW_11N_RESERVED9 908
-#define MIB_HW_11N_RESERVED10 909
-#define MIB_HW_TX_POWER_5G_HT40_1S_A 910
-#define MIB_HW_TX_POWER_5G_HT40_1S_B 911
-#define MIB_HW_TX_POWER_DIFF_5G_HT40_2S 912
-#define MIB_HW_TX_POWER_DIFF_5G_HT20 913
-#define MIB_HW_TX_POWER_DIFF_5G_OFDM 914
-/*new add end*/
-#endif
-
-#define MAX_L2TP_BUFF_LEN 50
-
-#define MIB_PPP_SESSION_NUM 940
-#define MIB_PPP_SERVER_MAC 941
-#define MIB_L2TP_PAYLOAD 942
-#define MIB_L2TP_PAYLOAD_LENGTH 943
-#define MIB_L2TP_NS 944
-#define MIB_DHCP_LEASE_TIME 945
-
-
-// MIB value and constant
-#ifdef CONFIG_IPV6
-#define IFNAMESIZE 32
-#define MAX_PREFIX_NUM 2
-#define RR_MAX_NUM 2
-#define NAMSIZE 32
-#define MAX_DNAME_SIZE 128
-#endif
-#define MAX_SSID_LEN 33
-#define WEP64_KEY_LEN 5
-#define WEP128_KEY_LEN 13
-#define MAX_NAME_LEN 31
-#define COMMENT_LEN 21
-#define MAX_CCK_CHAN_NUM 14
-#define MAX_OFDM_CHAN_NUM 162
-
-#define MAX_2G_CHANNEL_NUM_MIB 14
-#define MAX_5G_CHANNEL_NUM_MIB 196
-
-#define MAX_PSK_LEN 64
-#define MAX_RS_PASS_LEN 65
-#define MAX_DOMAIN_LEN 51
-#define MAX_NAME_LEN_LONG 129
-
-#define TX_RATE_1M 0x01
-#define TX_RATE_2M 0x02
-#define TX_RATE_5M 0x04
-#define TX_RATE_11M 0x08
-
-#define TX_RATE_6M 0x10
-#define TX_RATE_9M 0x20
-#define TX_RATE_12M 0x40
-#define TX_RATE_18M 0x80
-#define TX_RATE_24M 0x100
-#define TX_RATE_36M 0x200
-#define TX_RATE_48M 0x400
-#define TX_RATE_54M 0x800
-
-#define MAX_WLAN_AC_NUM 20
-
-//#if defined(CONFIG_RTK_MESH) && defined(_MESH_ACL_ENABLE_) Keith remove
-#define MAX_MESH_ACL_NUM MAX_WLAN_AC_NUM
-//#endif Keith remove
-
-#define MAX_CERTROOT_NUM 5
-#define MAX_CERTUSER_NUM 5
-#ifdef HOME_GATEWAY
-#define MAX_FILTER_NUM 20
-#define MAX_URLFILTER_NUM 8
-#ifdef VPN_SUPPORT
-#define MAX_TUNNEL_NUM 10
-#define MAX_RSA_FILE_LEN 2048
-#define MAX_RSA_KEY_LEN 380
-#define MAX_ENCRKEY_LEN 49
-#define MAX_AUTHKEY_LEN 41
-#define MAX_SPI_LEN 5
-#endif
-#define MAX_QOS_RULE_NUM 10
-#endif
-#define MAX_ROUTE_NUM 10
-#define MAX_DHCP_RSVD_IP_NUM 20
-#define MAXFNAME 60
-
-//#ifdef CONFIG_RTL8196B_GW_8M
-//#define MAX_WDS_NUM 4
-//#else
-#define MAX_WDS_NUM 8
-//#endif
-
-#ifdef WLAN_EASY_CONFIG
-#define MAX_ACF_KEY_LEN 64
-#define MAX_ACF_DIGEST_LEN 32
-#endif
-
-//#ifdef SNMP_SUPPORT Keith remove
-#define MAX_SNMP_COMMUNITY_LEN 64
-//#endif Keith remove
-
-#ifdef WIFI_SIMPLE_CONFIG
-#define PIN_LEN 8
-#endif
-
-#define IFNAMSIZE 16
-#if defined(CONFIG_RTL_8198_AP_ROOT) && defined(GMII_ENABLED)
-#define MAX_IFACE_VLAN_CONFIG (7+5*2) /* eth0~eth6, 2*(wlanX,wlanX-va0~wlanX-va3)no wds and vxd*/
-#else
-#define MAX_IFACE_VLAN_CONFIG (6+5*2) /* eth0~eth5, 2*(wlanX,wlanX-va0~wlanX-va3)no wds and vxd*/
-#endif
-
-#if defined(UNIVERSAL_REPEATER)
-#define CONFIG_REPEATER_WPS_SUPPORT
-#define CONFIG_ONLY_SUPPORT_CLIENT_REPEATER_WPS
-#endif
-
-#define NEW_SCHEDULE_SUPPORT
-#if defined(NEW_SCHEDULE_SUPPORT)
-#define MAX_SCHEDULE_NUM 10
-#else
-/*Brad add for schedule*/
-#define MAX_SCHEDULE_NUM 1
-#endif
-
-/* # keith: add l2tp support. 20080515 */
-#define MAX_PPTP_HOST_NAME_LEN 64
-
-#ifdef __mips__
-#define FLASH_DEVICE_NAME ("/dev/mtdblock0")
-#define FLASH_DEVICE_NAME1 ("/dev/mtdblock1")
-#else
-#define FLASH_DEVICE_NAME ("setting.bin")
-#endif
-
-#ifdef CONFIG_RTL_FLASH_MAPPING_ENABLE
-#define HW_SETTING_OFFSET CONFIG_RTL_HW_SETTING_OFFSET
-#define DEFAULT_SETTING_OFFSET CONFIG_RTL_DEFAULT_SETTING_OFFSET
-#define CURRENT_SETTING_OFFSET CONFIG_RTL_CURRENT_SETTING_OFFSET
-#define WEB_PAGE_OFFSET CONFIG_RTL_WEB_PAGES_OFFSET
-#define CODE_IMAGE_OFFSET CONFIG_RTL_CODE_IMAGE_OFFSET
-#define ROOT_IMAGE_OFFSET CONFIG_RTL_ROOT_IMAGE_OFFSET
-#else
-#define HW_SETTING_OFFSET 0x6000
-#define DEFAULT_SETTING_OFFSET 0x8000
-#define CURRENT_SETTING_OFFSET 0xc000
-#define WEB_PAGE_OFFSET 0x10000
-#define CODE_IMAGE_OFFSET 0x20000
-#define ROOT_IMAGE_OFFSET 0xE0000
-#endif
-
-#ifdef HOME_GATEWAY
- #define CERT_PAGE_OFFSET 0x3f0000
-#else
- #define CERT_PAGE_OFFSET 0x1f0000
-#endif
-
-#ifdef CONFIG_RTL_FLASH_MAPPING_ENABLE
-#define HW_SETTING_SECTOR_LEN (CONFIG_RTL_DEFAULT_SETTING_OFFSET-CONFIG_RTL_HW_SETTING_OFFSET)
-#define DEFAULT_SETTING_SECTOR_LEN (CONFIG_RTL_CURRENT_SETTING_OFFSET-CONFIG_RTL_DEFAULT_SETTING_OFFSET)
-#define CURRENT_SETTING_SECTOR_LEN (CONFIG_RTL_WEB_PAGES_OFFSET-CONFIG_RTL_CURRENT_SETTING_OFFSET)
-#else
-#define HW_SETTING_SECTOR_LEN (0x8000-0x6000)
-#define DEFAULT_SETTING_SECTOR_LEN (0xc000-0x8000)
-#define CURRENT_SETTING_SECTOR_LEN (0x10000-0xc000)
-#endif
+#ifndef __APMIB_H
+#define __APMIB_H
#ifndef WIN32
-#define __PACK__ __attribute__ ((packed))
+#define __PACK__ __attribute__ ((packed))
#else
#define __PACK__
#endif
-
-/* Config/fw image file header */
-
-typedef enum { HW_SETTING=1, DEFAULT_SETTING=2, CURRENT_SETTING=4 } CONFIG_DATA_T;
+#define BOOT_HEADER ((char *)"boot")
#if defined(CONFIG_RTL_8196B)
-// update tag
-#define HW_SETTING_HEADER_TAG ((char *)"h6")
-//Brad add for distinguish ap(da:default setting for ap) or gateway(dg: default setting for gateway) platform
-#if (defined(HOME_GATEWAY) && defined(VPN_SUPPORT))
-#define DEFAULT_SETTING_HEADER_TAG ((char *)"6V")
-#elif (defined(HOME_GATEWAY))
-#define DEFAULT_SETTING_HEADER_TAG ((char *)"6G")
-#else
-#define DEFAULT_SETTING_HEADER_TAG ((char *)"6A")
-#endif
-//Brad add for distinguish ap(ca:current setting for ap) or gateway(cg: current setting for gateway) platform
-#if (defined(HOME_GATEWAY) && defined(VPN_SUPPORT))
-#define CURRENT_SETTING_HEADER_TAG ((char *)"6v")
-#elif (defined(HOME_GATEWAY))
-#define CURRENT_SETTING_HEADER_TAG ((char *)"6g")
-#else
-#define CURRENT_SETTING_HEADER_TAG ((char *)"6a")
-#endif
-// force tag
-#define HW_SETTING_HEADER_FORCE_TAG ((char *)"Hf")
-#define DEFAULT_SETTING_HEADER_FORCE_TAG ((char *)"Df")
-#define CURRENT_SETTING_HEADER_FORCE_TAG ((char *)"Cf")
-// upgrade
-#define HW_SETTING_HEADER_UPGRADE_TAG ((char *)"Hu")
-#define DEFAULT_SETTING_HEADER_UPGRADE_TAG ((char *)"Du")
-#define CURRENT_SETTING_HEADER_UPGRADE_TAG ((char *)"Cu")
-#elif defined(CONFIG_RTL_8196C) || defined(CONFIG_RTL_8198)
-
-// update tag
-#define HW_SETTING_HEADER_TAG ((char *)"H6")
-#if (defined(HOME_GATEWAY) && defined(VPN_SUPPORT))
-#define DEFAULT_SETTING_HEADER_TAG ((char *)"6V")
-#elif (defined(HOME_GATEWAY))
-#define DEFAULT_SETTING_HEADER_TAG ((char *)"6G")
-#else
-#define DEFAULT_SETTING_HEADER_TAG ((char *)"6A")
-#endif
-#if (defined(HOME_GATEWAY) && defined(VPN_SUPPORT))
-#define CURRENT_SETTING_HEADER_TAG ((char *)"6v")
-#elif (defined(HOME_GATEWAY))
-#define CURRENT_SETTING_HEADER_TAG ((char *)"6g")
-#else
-#define CURRENT_SETTING_HEADER_TAG ((char *)"6a")
-#endif
-// force tag
-#define HW_SETTING_HEADER_FORCE_TAG ((char *)"Hf")
-#define DEFAULT_SETTING_HEADER_FORCE_TAG ((char *)"Df")
-#define CURRENT_SETTING_HEADER_FORCE_TAG ((char *)"Cf")
-// upgrade
-#define HW_SETTING_HEADER_UPGRADE_TAG ((char *)"Hu")
-#define DEFAULT_SETTING_HEADER_UPGRADE_TAG ((char *)"Du")
-#define CURRENT_SETTING_HEADER_UPGRADE_TAG ((char *)"Cu")
-#else
-// update tag
-#define HW_SETTING_HEADER_TAG ((char *)"hs")
-#if (defined(HOME_GATEWAY) && defined(VPN_SUPPORT))
-#define DEFAULT_SETTING_HEADER_TAG ((char *)"dv")
-#elif (defined(HOME_GATEWAY))
-#define DEFAULT_SETTING_HEADER_TAG ((char *)"dg")
-#else
-#define DEFAULT_SETTING_HEADER_TAG ((char *)"da")
-#endif
-#if (defined(HOME_GATEWAY) && defined(VPN_SUPPORT))
-#define CURRENT_SETTING_HEADER_TAG ((char *)"cv")
-#elif (defined(HOME_GATEWAY))
-#define CURRENT_SETTING_HEADER_TAG ((char *)"cg")
+#define ROOT_HEADER ((char *)"r6br")
+#elif defined(CONFIG_RTL_8196C) || defined(CONFIG_RTL_8198) || defined(CONFIG_RTL_819XD) || defined(CONFIG_RTL_8196E)
+#define ROOT_HEADER ((char *)"r6cr")
#else
-#define CURRENT_SETTING_HEADER_TAG ((char *)"ca")
-#endif
-// force tag
-#define HW_SETTING_HEADER_FORCE_TAG ((char *)"hf")
-#define DEFAULT_SETTING_HEADER_FORCE_TAG ((char *)"df")
-#define CURRENT_SETTING_HEADER_FORCE_TAG ((char *)"cf")
-// upgrade
-#define HW_SETTING_HEADER_UPGRADE_TAG ((char *)"hu")
-#define DEFAULT_SETTING_HEADER_UPGRADE_TAG ((char *)"du")
-#define CURRENT_SETTING_HEADER_UPGRADE_TAG ((char *)"cu")
-#endif //#if defined(CONFIG_RTL_8196B)
-
-
-#if 0//def CONFIG_RTL8196B_GW_8M
-#undef DEFAULT_SETTING_HEADER_TAG
-#define DEFAULT_SETTING_HEADER_TAG ((char *)"61")
-
-#undef CURRENT_SETTING_HEADER_TAG
-#define CURRENT_SETTING_HEADER_TAG ((char *)"62")
-#endif
-
-
-#define TAG_LEN 2
-
-#if defined(CONFIG_RTL_8196B)
-
-#define HW_SETTING_VER 1 // hw setting version
-#define DEFAULT_SETTING_VER 2 // default setting version
-#define CURRENT_SETTING_VER DEFAULT_SETTING_VER // current setting version
-
-#elif defined(CONFIG_RTL_8196C) || defined(CONFIG_RTL_8198)
-#define HW_SETTING_VER 1 // hw setting version
-#define DEFAULT_SETTING_VER 1 // default setting version
-#define CURRENT_SETTING_VER DEFAULT_SETTING_VER // current setting version
-#else
-
-#define HW_SETTING_VER 3 // hw setting version
-#define DEFAULT_SETTING_VER 4 // default setting version
-#define CURRENT_SETTING_VER DEFAULT_SETTING_VER // current setting version
-
-#endif
-
-#if defined(CONFIG_RTL_8196B)
-#define FW_HEADER_WITH_ROOT ((char *)"cr6b")
-#define FW_HEADER ((char *)"cs6b")
-#elif defined(CONFIG_RTL_8196C) || defined(CONFIG_RTL_8198)
-#define FW_HEADER_WITH_ROOT ((char *)"cr6c")
-#define FW_HEADER ((char *)"cs6c")
-#else
-#define FW_HEADER_WITH_ROOT ((char *)"csro")
-#define FW_HEADER ((char *)"csys")
+#define ROOT_HEADER ((char *)"root")
#endif //#if defined(CONFIG_RTL_8196B)
#if defined(CONFIG_RTL_8196B)
#if (defined(HOME_GATEWAY) && defined(VPN_SUPPORT))
-#define WEB_HEADER ((char *)"w6bv")
+#define WEB_HEADER ((char *)"w6bv")
#elif (defined(HOME_GATEWAY))
-#define WEB_HEADER ((char *)"w6bg")
+#define WEB_HEADER ((char *)"w6bg")
#else
-#define WEB_HEADER ((char *)"w6ba")
+#define WEB_HEADER ((char *)"w6ba")
#endif
-#elif defined(CONFIG_RTL_8196C) || defined(CONFIG_RTL_8198)
+#elif defined(CONFIG_RTL_8196C) || defined(CONFIG_RTL_8198) || defined(CONFIG_RTL_819XD) || defined(CONFIG_RTL_8196E)
#if (defined(HOME_GATEWAY) && defined(VPN_SUPPORT))
-#define WEB_HEADER ((char *)"w6cv")
+#define WEB_HEADER ((char *)"w6cv")
#elif (defined(HOME_GATEWAY))
-#define WEB_HEADER ((char *)"w6cg")
+#define WEB_HEADER ((char *)"w6cg")
#else
-#define WEB_HEADER ((char *)"w6ca")
+#define WEB_HEADER ((char *)"w6ca")
#endif
#else
#if (defined(HOME_GATEWAY) && defined(VPN_SUPPORT))
-#define WEB_HEADER ((char *)"webv")
+#define WEB_HEADER ((char *)"webv")
#elif (defined(HOME_GATEWAY))
-#define WEB_HEADER ((char *)"webg")
+#define WEB_HEADER ((char *)"webg")
#else
-#define WEB_HEADER ((char *)"weba")
+#define WEB_HEADER ((char *)"weba")
#endif
#endif //#if defined(CONFIG_RTL_8196B)
#if defined(CONFIG_RTL_8196B)
-#define ROOT_HEADER ((char *)"r6br")
-#elif defined(CONFIG_RTL_8196C) || defined(CONFIG_RTL_8198)
-#define ROOT_HEADER ((char *)"r6cr")
-#else
-#define ROOT_HEADER ((char *)"root")
+#define FW_HEADER_WITH_ROOT ((char *)"cr6b")
+#define FW_HEADER ((char *)"cs6b")
+#elif defined(CONFIG_RTL_8196C) || defined(CONFIG_RTL_8198) || defined(CONFIG_RTL_819XD) || defined(CONFIG_RTL_8196E)
+#define FW_HEADER_WITH_ROOT ((char *)"cr6c")
+#define FW_HEADER ((char *)"cs6c")
+#else
+#define FW_HEADER_WITH_ROOT ((char *)"csro")
+#define FW_HEADER ((char *)"csys")
#endif //#if defined(CONFIG_RTL_8196B)
-#define CERT_HEADER ((char *)"cert")
-#define BOOT_HEADER ((char *)"boot")
-#define ALL_HEADER ((char *)"allp")
-#define SIGNATURE_LEN 4
-
-/* wlan driver ioctl id */
-#define SIOCGIWRTLSTAINFO 0x8B30 // get station table information
-#define SIOCGIWRTLSTANUM 0x8B31 // get the number of stations in table
-#define SIOCGIWRTLSCANREQ 0x8B33 // scan request
-#define SIOCGIWRTLGETBSSDB 0x8B34 // get bss data base
-#define SIOCGIWRTLJOINREQ 0x8B35 // join request
-#define SIOCGIWRTLJOINREQSTATUS 0x8B36 // get status of join request
-#define SIOCGIWRTLGETBSSINFO 0x8B37 // get currnet bss info
-#define SIOCGIWRTLGETWDSINFO 0x8B38
-#define SIOCGMISCDATA 0x8B48 // get misc data
-
-//=========add for MESH=========
-//#ifdef CONFIG_RTK_MESH Keith remove
-// by GANTOE for site survey 2008/12/26
-#define SIOCJOINMESH 0x8B94
-#define SIOCCHECKMESHLINK 0x8B95
-#define RTL8190_IOCTL_GET_MIB 0x89f2
-//#endif Keith remove
-//=========add for MESH=========
-
-#define MAC_ADDR_LEN 6
-#define MAX_STA_NUM 64 // max support sta number
+#define ALL_HEADER ((char *)"allp")
-/* flag of sta info */
-#define STA_INFO_FLAG_AUTH_OPEN 0x01
-#define STA_INFO_FLAG_AUTH_WEP 0x02
-#define STA_INFO_FLAG_ASOC 0x04
-#define STA_INFO_FLAG_ASLEEP 0x08
-
-// bit value for hw board id
-#if 0
-// Old code and no longer used
-#define ETH_PHY_TYPE 1
-#define BOOT_PORT_SELECT 2
-#define USE_ETH0_WAN 4
-#endif
-#define WLAN_RF_2T2R 1
-
-#ifdef WIFI_SIMPLE_CONFIG
-enum { WSC_AUTH_OPEN=1, WSC_AUTH_WPAPSK=2, WSC_AUTH_SHARED=4, WSC_AUTH_WPA=8, WSC_AUTH_WPA2=0x10, WSC_AUTH_WPA2PSK=0x20, WSC_AUTH_WPA2PSKMIXED=0x22 };
-enum { WSC_ENCRYPT_NONE=1, WSC_ENCRYPT_WEP=2, WSC_ENCRYPT_TKIP=4, WSC_ENCRYPT_AES=8, WSC_ENCRYPT_TKIPAES=12 };
-enum { CONFIG_METHOD_ETH=0x2, CONFIG_METHOD_PIN=0x4, CONFIG_METHOD_PBC=0x80 };
-enum { CONFIG_BY_INTERNAL_REGISTRAR=1, CONFIG_BY_EXTERNAL_REGISTRAR=2};
-#endif
-typedef enum { ENCRYPT_DISABLED=0, ENCRYPT_WEP=1, ENCRYPT_WPA=2, ENCRYPT_WPA2=4, ENCRYPT_WPA2_MIXED=6 ,ENCRYPT_WAPI=7} ENCRYPT_T;
-typedef enum { WDS_ENCRYPT_DISABLED=0, WDS_ENCRYPT_WEP64=1, WDS_ENCRYPT_WEP128=2, WDS_ENCRYPT_TKIP=3, WDS_ENCRYPT_AES=4} WDS_ENCRYPT_T;
-typedef enum { SUPP_NONWPA_NONE=0,SUPP_NONWPA_WEP=1,SUPP_NONWPA_1X=2} SUPP_NONWAP_T;
-typedef enum { WPA_AUTH_AUTO=1, WPA_AUTH_PSK=2 } WPA_AUTH_T;
-typedef enum { WAPI_AUTH_AUTO=1, WAPI_AUTH_PSK=2 } WAPI_AUTH_T;
-typedef enum { WPA_CIPHER_TKIP=1, WPA_CIPHER_AES=2, WPA_CIPHER_MIXED=3 } WPA_CIPHER_T;
-typedef enum { WEP_DISABLED=0, WEP64=1, WEP128=2 } WEP_T;
-typedef enum { KEY_ASCII=0, KEY_HEX } KEY_TYPE_T;
-typedef enum { LONG_PREAMBLE=0, SHORT_PREAMBLE=1 } PREAMBLE_T;
-typedef enum { DHCP_DISABLED=0, DHCP_CLIENT=1, DHCP_SERVER=2, PPPOE=3, PPTP=4, L2TP=6, DHCP_AUTO=15 , USB3G=16 } DHCP_T; /* # keith: add l2tp support. 20080515 */
-typedef enum { DHCP_LAN_NONE=0, DHCP_LAN_CLIENT=1, DHCP_LAN_SERVER=2, DHCP_LAN_RELAY=3 } DHCP_TYPE_T; //keith add. LAN SIDE DHCP TYPE
-typedef enum { GATEWAY_MODE=0, BRIDGE_MODE=1, WISP_MODE=2 } OPMODE_T;
-typedef enum { DISABLE_MODE=0, RIP1_MODE=1, RIP2_MODE=2 } RIP_OPMODE_T;
-typedef enum { FCC=1, IC, ETSI, SPAIN, FRANCE, MKK } REG_DOMAIN_T;
-typedef enum { AUTH_OPEN=0, AUTH_SHARED, AUTH_BOTH } AUTH_TYPE_T;
-typedef enum { DNS_AUTO=0, DNS_MANUAL } DNS_TYPE_T;
-typedef enum { CONTINUOUS=0, CONNECT_ON_DEMAND, MANUAL } PPP_CONNECT_TYPE_T;
-typedef enum { RF_INTERSIL=1, RF_RFMD=2, RF_PHILIP=3, RF_MAXIM=4, RF_GCT=5,
- RF_MAXIM_AG=6, RF_ZEBRA=7, RF_8255=8 } RF_TYPE_T;
-typedef enum { LED_TX_RX=0, LED_LINK_TXRX=1, LED_LINKTXRX=2 } LED_TYPE_T;
-
-//=========add for MESH=========
-#ifdef CONFIG_RTK_MESH
-typedef enum { RANN=0, PREQ=1 } TREEMECH_T;
-#ifdef CONFIG_NEW_MESH_UI
-typedef enum { AP_MODE=0, CLIENT_MODE=1, WDS_MODE=2, AP_WDS_MODE=3, AP_MESH_MODE=4, MESH_MODE=5} WLAN_MODE_T;
-#else
-typedef enum { AP_MODE=0, CLIENT_MODE=1, WDS_MODE=2, AP_WDS_MODE=3, AP_MPP_MODE=4, MPP_MODE=5, MAP_MODE=6, MP_MODE=7 } WLAN_MODE_T;
-#endif
-#else
-typedef enum { AP_MODE=0, CLIENT_MODE=1, WDS_MODE=2, AP_WDS_MODE=3 } WLAN_MODE_T;
-#endif // CONFIG_RTK_MESH
-//=========add for MESH=========
-
-typedef enum { INFRASTRUCTURE=0, ADHOC=1 } NETWORK_TYPE_T;
-typedef enum { BAND_11B=1, BAND_11G=2, BAND_11BG=3, BAND_11A=4, BAND_11N=8, BAND_5G_11AN=12 } BAND_TYPE_T;
-typedef enum { DISABLED=0, A_MPDU=1, A_MSDU=2, A_MIXED=3} AGGREGATION_MODE_T; // GANTOE & epopen: DISABLED=0 original is DISABLE=0, Because conflict with ../../auth/include/1x_common.h in AP/net-snmp-5.x.x
-typedef enum { PHYBAND_OFF=0, PHYBAND_2G=1, PHYBAND_5G=2 } PHYBAND_TYPE_T;
-typedef enum { SMACSPHY=0, DMACSPHY=1, DMACDPHY=2 } MACPHYMODE_TYPE_T;
-typedef enum { BANDMODE2G=0, BANDMODE5G=1, BANDMODEBOTH=2, BANDMODESINGLE=3 } WLANBAND2G5GMODE_TYPE_T;
-
-#ifdef HOME_GATEWAY
-#ifdef VPN_SUPPORT
-typedef enum { IKE_MODE=0, MANUAL_MODE=1} KEY_MODE_T;
-typedef enum { SINGLE_ADDR=0, SUBNET_ADDR=1, ANY_ADDR=2, NATT_ADDR=3} ADDRESS_MODE_T;
-typedef enum { INITIATOR=0, RESPONDER=1} CONN_TYPE_T;
-typedef enum { MD5_ALGO=0, AUTH_ALGO=1} AUTH_MODE_T;
-typedef enum { ESP_PROTO=0, AH_PROTO=1} IPSEC_PROTO_T;
-typedef enum { TRI_DES_ALGO=0, AES_ALGO=1, NONE_ALGO=2} ENCR_MODE_T;
-// DH1=768 bits, DH2=1024 bits, DH5= 1536
-typedef enum { DH1_GRP=0, DH2_GRP=1, DH5_GRP=2} KEY_GROUP_T;
-#endif // VPN_SUPPORT
-typedef enum { PROTO_BOTH=3, PROTO_TCP=1, PROTO_UDP=2 } PROTO_TYPE_T;
-#endif // HOME_GATEWAY
-
-#ifdef WLAN_EASY_CONFIG
-enum { MODE_BUTTON=1, MODE_QUESTION=2 };
-enum {
- ACF_ALGORITHM_WEP64 = 0x01,
- ACF_ALGORITHM_WEP128 = 0x02,
- ACF_ALGORITHM_WPA_TKIP = 0x04,
- ACF_ALGORITHM_WPA_AES = 0x08,
- ACF_ALGORITHM_WPA2_TKIP = 0x10,
- ACF_ALGORITHM_WPA2_AES = 0x20,
-};
-enum { ROLE_SERVER=1, ROLE_CLIENT=2, ROLE_ADHOC=4};
-#endif // WLAN_EASY_CONFIG
-
-enum {TURBO_AUTO=0, TURBO_ON=1, TURBO_OFF=2};
-
-#ifdef CONFIG_RTL_802_1X_CLIENT_SUPPORT
-typedef enum { EAP_MD5=0, EAP_TLS=1, EAP_PEAP=2 } EAP_TYPE_T;
-typedef enum { INSIDE_MSCHAPV2=0 } INSIDE_TYPE_T;
-#define MAX_EAP_USER_ID_LEN 64
-#define MAX_RS_USER_NAME_LEN 64
-#define MAX_RS_USER_PASS_LEN 64
-#define MAX_RS_USER_CERT_PASS_LEN 64
-#define RS_USER_CERT_5G "/var/1x/client_5g.pem"
-#define RS_ROOT_CERT_5G "/var/1x/ca_5g.pem"
-#define RS_USER_CERT_2G "/var/1x/client_2g.pem"
-#define RS_ROOT_CERT_2G "/var/1x/ca_2g.pem"
-#define RS_USER_CERT_TMP "/var/1x/client_tmp.pem"
-#define RS_ROOT_CERT_TMP "/var/1x/ca_tmp.pem"
-#define CERT_SIZE 0x8000 //32KB, should be sync with users/auth/src/rwCertSrc/rsCertCommon.h
-#endif
+#define HW_SETTING_OFFSET 0x6000
+#define DEFAULT_SETTING_OFFSET 0x8000
+#define CURRENT_SETTING_OFFSET 0xc000
#define DWORD_SWAP(v) ( (((v&0xff)<<24)&0xff000000) | ((((v>>8)&0xff)<<16)&0xff0000) | \
- ((((v>>16)&0xff)<<8)&0xff00) | (((v>>24)&0xff)&0xff) )
-#define WORD_SWAP(v) ((unsigned short)(((v>>8)&0xff) | ((v<<8)&0xff00)))
-
-/* scramble saved configuration data */
-#define ENCODE_DATA(data,len) { \
- int i; \
- for (i=0; i<len; i++) \
- data[i] = ~ ( data[i] + 0x38); \
-}
-
-#define DECODE_DATA(data,len) { \
- int i; \
- for (i=0; i<len; i++) \
- data[i] = ~data[i] - 0x38; \
-}
-
-/* Do checksum and verification for configuration data */
-#ifndef WIN32
-static inline unsigned char CHECKSUM(unsigned char *data, int len)
-#else
-__inline unsigned char CHECKSUM(unsigned char *data, int len)
-#endif
-{
- int i;
- unsigned char sum=0;
-
- for (i=0; i<len; i++)
- sum += data[i];
-
- sum = ~sum + 1;
- return sum;
-}
-#ifndef WIN32
-static inline int CHECKSUM_OK(unsigned char *data, int len)
-#else
-__inline int CHECKSUM_OK(unsigned char *data, int len)
-#endif
-{
- int i;
- unsigned char sum=0;
-
- for (i=0; i<len; i++)
- sum += data[i];
-
- if (sum == 0)
- return 1;
- else
- return 0;
-}
-
-/* WLAN sta info structure */
-typedef struct wlan_sta_info {
- unsigned short aid;
- unsigned char addr[6];
- unsigned long tx_packets;
- unsigned long rx_packets;
- unsigned long expired_time; // 10 msec unit
- unsigned short flag;
- unsigned char txOperaRates;
- unsigned char rssi;
- unsigned long link_time; // 1 sec unit
- unsigned long tx_fail;
- unsigned long tx_bytes;
- unsigned long rx_bytes;
- unsigned char network;
- unsigned char ht_info; // bit0: 0=20M mode, 1=40M mode; bit1: 0=longGI, 1=shortGI
- unsigned char resv[6];
-} WLAN_STA_INFO_T, *WLAN_STA_INFO_Tp;
-
-typedef struct wlan_rate{
-unsigned int id;
-unsigned char rate[20];
-}WLAN_RATE_T, *WLAN_RATE_Tp;
-typedef enum {
- MCS0=0x80,
- MCS1=0x81,
- MCS2=0x82,
- MCS3=0x83,
- MCS4=0x84,
- MCS5=0x85,
- MCS6=0x86,
- MCS7=0x87,
- MCS8=0x88,
- MCS9=0x89,
- MCS10=0x8a,
- MCS11=0x8b,
- MCS12=0x8c,
- MCS13=0x8d,
- MCS14=0x8e,
- MCS15=0x8f
- } RATE_11N_T;
-
-#ifdef WIN32
-#pragma pack(1)
-#endif
-
-
-//zj: eco featrue
-#define ECO_LEDDIM_MASK 0x08
-#define ECO_TIMER_MASK 0x04
-#define ECO_EVERYDAY_MASK 0x02
-#define ECO_24HOURS_MASK 0x01
-
-#define ECO_DAY_MASK 0x0000007F
-#define ECO_SUNDAY_MASK 0x00000001
-#define ECO_MONDAY_MASK 0x00000002
-#define ECO_TUESDAY_MASK 0x00000004
-#define ECO_WEDNESDAY_MASK 0x00000008
-#define ECO_THURSDAY_MASK 0x00000010
-#define ECO_FRIDAY_MASK 0x00000020
-#define ECO_SATURDAY_MASK 0x00000040
-
-#define SCHEDULE_NAME_LEN 20
-typedef struct schedule_entry {
-#define MIBDEF(_ctype, _cname, _crepeat, _mib_name, _mib_type, _mib_parents_ctype, _default_value, _next_tbl ) \
- _ctype _cname _crepeat;
-
-#define MIB_SCHEDULE_IMPORT
-#include "mibdef.h"
-#undef MIB_SCHEDULE_IMPORT
-
-#undef MIBDEF
-}__PACK__ SCHEDULE_T, *SCHEDULE_Tp;
-
-
-
-typedef struct macfilter_entry {
-#define MIBDEF(_ctype, _cname, _crepeat, _mib_name, _mib_type, _mib_parents_ctype, _default_value, _next_tbl ) \
- _ctype _cname _crepeat;
-
-#define MIB_MACFILTER_IMPORT
-#include "mibdef.h"
-#undef MIB_MACFILTER_IMPORT
-
-#undef MIBDEF
-}__PACK__ MACFILTER_T, *MACFILTER_Tp;
-
-#ifdef HOME_GATEWAY
-typedef struct urlfilter_entry {
-#define MIBDEF(_ctype, _cname, _crepeat, _mib_name, _mib_type, _mib_parents_ctype, _default_value, _next_tbl ) \
- _ctype _cname _crepeat;
-
-#define MIB_URLFILTER_IMPORT
-#include "mibdef.h"
-#undef MIB_URLFILTER_IMPORT
-
-#undef MIBDEF
-}__PACK__ URLFILTER_T, *URLFILTER_Tp;
+ ((((v>>16)&0xff)<<8)&0xff00) | (((v>>24)&0xff)&0xff) )
-typedef struct portfw_entry {
-#define MIBDEF(_ctype, _cname, _crepeat, _mib_name, _mib_type, _mib_parents_ctype, _default_value, _next_tbl ) \
- _ctype _cname _crepeat;
-
-#define MIB_PORTFW_IMPORT
-#include "mibdef.h"
-#undef MIB_PORTFW_IMPORT
-
-#undef MIBDEF
-}__PACK__ PORTFW_T, *PORTFW_Tp;
-
-typedef struct ipfilter_entry {
-#define MIBDEF(_ctype, _cname, _crepeat, _mib_name, _mib_type, _mib_parents_ctype, _default_value, _next_tbl ) \
- _ctype _cname _crepeat;
-
-#define MIB_IPFILTER_IMPORT
-#include "mibdef.h"
-#undef MIB_IPFILTER_IMPORT
-
-#undef MIBDEF
-}__PACK__ IPFILTER_T, *IPFILTER_Tp;
-
-typedef struct portfilter_entry {
-#define MIBDEF(_ctype, _cname, _crepeat, _mib_name, _mib_type, _mib_parents_ctype, _default_value, _next_tbl ) \
- _ctype _cname _crepeat;
-
-#define MIB_PORTFILTER_IMPORT
-#include "mibdef.h"
-#undef MIB_PORTFILTER_IMPORT
-
-#undef MIBDEF
-}__PACK__ PORTFILTER_T, *PORTFILTER_Tp;
-
-typedef struct triggerport_entry {
-#define MIBDEF(_ctype, _cname, _crepeat, _mib_name, _mib_type, _mib_parents_ctype, _default_value, _next_tbl ) \
- _ctype _cname _crepeat;
-
-#define MIB_TRIGGERPORT_IMPORT
-#include "mibdef.h"
-#undef MIB_TRIGGERPORT_IMPORT
-
-#undef MIBDEF
-}__PACK__ TRIGGERPORT_T, *TRIGGERPORT_Tp;
-
-#ifdef GW_QOS_ENGINE
-#define MAX_QOS_NAME_LEN 15
-typedef struct qos_entry {
-#define MIBDEF(_ctype, _cname, _crepeat, _mib_name, _mib_type, _mib_parents_ctype, _default_value, _next_tbl ) \
- _ctype _cname _crepeat;
-
-#define MIB_QOS_IMPORT
-#include "mibdef.h"
-#undef MIB_QOS_IMPORT
-
-#undef MIBDEF
-}__PACK__ QOS_T, *QOS_Tp;
-#endif
-
-#ifdef QOS_BY_BANDWIDTH
-#define QOS_RESTRICT_MIN 0x01
-#define QOS_RESTRICT_MAX 0x02
-#define QOS_RESTRICT_IP 0x04
-#define QOS_RESTRICT_MAC 0x08
-#define MAX_QOS_NAME_LEN 15
-
-typedef struct qos_entry {
-#define MIBDEF(_ctype, _cname, _crepeat, _mib_name, _mib_type, _mib_parents_ctype, _default_value, _next_tbl ) \
- _ctype _cname _crepeat;
-
-#define MIB_IPQOS_IMPORT
-#include "mibdef.h"
-#undef MIB_IPQOS_IMPORT
-
-#undef MIBDEF
-}__PACK__ IPQOS_T, *IPQOS_Tp;
-#endif
-
-#ifdef VPN_SUPPORT
-typedef struct ipsectunnel_entry {
-#define MIBDEF(_ctype, _cname, _crepeat, _mib_name, _mib_type, _mib_parents_ctype, _default_value, _next_tbl ) \
- _ctype _cname _crepeat;
-
-#define MIB_IPSECTUNNEL_IMPORT
-#include "mibdef.h"
-#undef MIB_IPSECTUNNEL_IMPORT
-
-#undef MIBDEF
-}__PACK__ IPSECTUNNEL_T, *IPSECTUNNEL_Tp;
-#endif // VPN_SUPPORT
-
-#ifdef CONFIG_IPV6
-#define uint16 unsigned short
-#define uint8 unsigned char
-#define uint32 unsigned int
-/*radvd*/
-struct AdvPrefix {
- uint16 Prefix[8];
- uint8 PrefixLen;
- uint8 AdvOnLinkFlag;
- uint8 AdvAutonomousFlag;
- uint32 AdvValidLifetime;
- uint32 AdvPreferredLifetime;
-
- /* Mobile IPv6 extensions */
- uint8 AdvRouterAddr;
-
- /* 6to4 extensions */
- char if6to4[IFNAMESIZE];
- uint8 enabled;
-}__PACK__;
-
-struct Interface {
- char Name[IFNAMESIZE]; /* interface name */
- uint32 MaxRtrAdvInterval;
- uint32 MinRtrAdvInterval;
- uint32 MinDelayBetweenRAs;
- uint8 AdvManagedFlag;
- uint8 AdvOtherConfigFlag;
- uint32 AdvLinkMTU;
- uint32 AdvReachableTime;
- uint32 AdvRetransTimer;
- uint8 AdvCurHopLimit;
- uint16 AdvDefaultLifetime;
- char AdvDefaultPreference[IFNAMESIZE];
- uint8 AdvSourceLLAddress;
- uint8 UnicastOnly;
- struct AdvPrefix prefix[MAX_PREFIX_NUM];
-}__PACK__;
-
-typedef struct radvdCfgParam_s
-{
- uint8 enabled;
- /*support eth1 only*/
- struct Interface interface;
-}__PACK__ radvdCfgParam_t, *radvdCfgParam_Tp;
-
-
-/*dnsv6*/
-struct rrResource
-{
- char domainName[MAX_DNAME_SIZE];
- uint16 address[8];
-}__PACK__;
-
-typedef struct dnsv6CfgParam_s
-{
- uint8 enabled;
- /*default name myrouter*/
- char routerName[NAMSIZE];
- struct rrResource rr[RR_MAX_NUM];
-}__PACK__ dnsv6CfgParam_t, *dnsv6CfgParam_Tp;
-
-/*dhcp6*/
-typedef struct dhcp6sCfgParam_s
-{
- uint8 enabled;
- char DNSaddr6[48];
- char addr6PoolS[48];
- char addr6PoolE[48];
- /*default name interface*/
- char interfaceNameds[NAMSIZE];
-
-}__PACK__ dhcp6sCfgParam_t, *dhcp6sCfgParam_Tp;
-
-/*IPv6 Addr*/
-typedef struct addrIPv6CfgParam_s
-{
- int enabled; /* 0:off 1:on */
- int prefix_len[2];
- uint16 addrIPv6[2][8];
-}__PACK__ addrIPv6CfgParam_t,*daddrIPv6CfgParam_Tp;
-
-/*Tunnel*/
-/*dhcp6*/
-typedef struct tunnelCfgParam_s
-{
- uint8 enabled;
-}__PACK__ tunnelCfgParam_t, *tunnelCfgParam_Tp;
-#endif
-
-#endif // HOME_GATEWAY
-
-#ifdef TLS_CLIENT
-typedef struct certroot_entry {
-#define MIBDEF(_ctype, _cname, _crepeat, _mib_name, _mib_type, _mib_parents_ctype, _default_value, _next_tbl ) \
- _ctype _cname _crepeat;
-
-#define MIB_CERTROOT_IMPORT
-#include "mibdef.h"
-#undef MIB_CERTROOT_IMPORT
-
-#undef MIBDEF
-}__PACK__ CERTROOT_T, *CERTROOT_Tp;
-typedef struct certUser_entry {
-#define MIBDEF(_ctype, _cname, _crepeat, _mib_name, _mib_type, _mib_parents_ctype, _default_value, _next_tbl ) \
- _ctype _cname _crepeat;
-
-#define MIB_CERTUSER_IMPORT
-#include "mibdef.h"
-#undef MIB_CERTUSER_IMPORT
-
-#undef MIBDEF
-}__PACK__ CERTUSER_T, *CERTUSER_Tp;
-#endif
-#ifdef HOME_GATEWAY
-#ifdef ROUTE_SUPPORT
-typedef struct staticRoute_entry {
-#define MIBDEF(_ctype, _cname, _crepeat, _mib_name, _mib_type, _mib_parents_ctype, _default_value, _next_tbl ) \
- _ctype _cname _crepeat;
-
-#define MIB_STATICROUTE_IMPORT
-#include "mibdef.h"
-#undef MIB_STATICROUTE_IMPORT
-
-#undef MIBDEF
-}__PACK__ STATICROUTE_T, *STATICROUTE_Tp;
-#endif
-#endif
-
-typedef struct dhcpRsvdIP_entry {
-#define MIBDEF(_ctype, _cname, _crepeat, _mib_name, _mib_type, _mib_parents_ctype, _default_value, _next_tbl ) \
- _ctype _cname _crepeat;
-
-#define MIB_DHCPRSVDIP_IMPORT
-#include "mibdef.h"
-#undef MIB_DHCPRSVDIP_IMPORT
-
-#undef MIBDEF
-}__PACK__ DHCPRSVDIP_T, *DHCPRSVDIP_Tp;
-
-typedef struct wlanwds_entry {
-#define MIBDEF(_ctype, _cname, _crepeat, _mib_name, _mib_type, _mib_parents_ctype, _default_value, _next_tbl ) \
- _ctype _cname _crepeat;
-
-#define MIB_WDS_IMPORT
-#include "mibdef.h"
-#undef MIB_WDS_IMPORT
-}__PACK__ WDS_T, *WDS_Tp;
-
-
-#if defined(HOME_GATEWAY) || defined(CONFIG_RTL_8198_AP_ROOT)
-#if defined(VLAN_CONFIG_SUPPORTED)
-typedef struct vlan_lanconfig_entry {
-#define MIBDEF(_ctype, _cname, _crepeat, _mib_name, _mib_type, _mib_parents_ctype, _default_value, _next_tbl ) \
- _ctype _cname _crepeat;
-
-#define MIB_VLAN_CONFIG_IMPORT
-#include "mibdef.h"
-#undef MIB_VLAN_CONFIG_IMPORT
-
-#undef MIBDEF
-}__PACK__ VLAN_CONFIG_T, *VLAN_CONFIG_Tp;
-#endif
-#endif
-
-
-typedef struct hw_wlan_setting {
-#define MIBDEF(_ctype, _cname, _crepeat, _mib_name, _mib_type, _mib_parents_ctype, _default_value, _next_tbl ) \
- _ctype _cname _crepeat;
-
-#define MIB_HW_WLAN_IMPORT
-#include "mibdef.h"
-#undef MIB_HW_WLAN_IMPORT
-
-#undef MIBDEF
-}__PACK__ HW_WLAN_SETTING_T, *HW_WLAN_SETTING_Tp;
-
-typedef struct hw_setting {
-#define MIBDEF(_ctype, _cname, _crepeat, _mib_name, _mib_type, _mib_parents_ctype, _default_value, _next_tbl ) \
- _ctype _cname _crepeat;
-
-#define MIB_HW_IMPORT
-#include "mibdef.h"
-#undef MIB_HW_IMPORT
-
-#undef MIBDEF
-}__PACK__ HW_SETTING_T, *HW_SETTING_Tp;
-
-typedef struct config_wlan_setting {
-#define MIBDEF(_ctype, _cname, _crepeat, _mib_name, _mib_type, _mib_parents_ctype, _default_value, _next_tbl ) \
- _ctype _cname _crepeat;
-
-#define MIB_CONFIG_WLAN_SETTING_IMPORT
-#include "mibdef.h"
-#undef MIB_CONFIG_WLAN_SETTING_IMPORT
-
-#undef MIBDEF
-}__PACK__ CONFIG_WLAN_SETTING_T, *CONFIG_WLAN_SETTING_Tp;
-
-typedef struct config_setting {
-#define MIBDEF(_ctype, _cname, _crepeat, _mib_name, _mib_type, _mib_parents_ctype, _default_value, _next_tbl ) \
-_ctype _cname _crepeat;
-
-#define MIB_IMPORT
-#include "mibdef.h"
-#undef MIB_IMPORT
-
-#undef MIBDEF
-}__PACK__ APMIB_T, *APMIB_Tp;
+#define WORD_SWAP(v) ((unsigned short)(((v>>8)&0xff) | ((v<<8)&0xff00)))
-/* Config file header */
-typedef struct param_header {
- unsigned char signature[SIGNATURE_LEN]; // Tag + version
- unsigned short len;
-}__PACK__ PARAM_HEADER_T, *PARAM_HEADER_Tp;
+#define SIGNATURE_LEN 4
-/* Firmware image file header */
typedef struct img_header {
- unsigned char signature[SIGNATURE_LEN];
- unsigned int startAddr;
- unsigned int burnAddr;
- unsigned int len;
+ unsigned char signature[SIGNATURE_LEN];
+ unsigned int startAddr;
+ unsigned int burnAddr;
+ unsigned int len;
}__PACK__ IMG_HEADER_T, *IMG_HEADER_Tp;
-/* Web page file header */
-typedef IMG_HEADER_T WEB_HEADER_T;
-typedef IMG_HEADER_Tp WEB_HEADER_Tp;
-#ifdef TLS_CLIENT
-typedef IMG_HEADER_T CERT_HEADER_T;
-typedef IMG_HEADER_Tp CERT_HEADER_Tp;
-#endif
-typedef struct _file_entry {
- char name[MAXFNAME];
- unsigned int size;
-}__PACK__ FILE_ENTRY_T, *FILE_ENTRY_Tp;
-
-#ifdef COMPRESS_MIB_SETTING
-/* Compress config setting file header */
-#if 0
-#define COMP_TRACE fprintf
-#else
-#define COMP_TRACE
-#endif
-
-#define COMP_SIGNATURE_LEN 6
-#define COMP_HS_SIGNATURE "COMPHS"
-#define COMP_CS_SIGNATURE "COMPCS"
-#define COMP_DS_SIGNATURE "COMPDS"
-typedef struct compress_mib_header {
- unsigned char signature[COMP_SIGNATURE_LEN];
- unsigned short compRate;
- unsigned int compLen;
-}__PACK__ COMPRESS_MIB_HEADER_T, *COMPRESS_MIB_HEADER_Tp;
-
-#endif // #ifdef COMPRESS_MIB_SETTING
-
-#ifdef WIN32
-#pragma pack()
#endif
-
-
-//////////////////////////////////////////////////////////
-int apmib_init_HW(void);
-int apmib_init(void);
-int apmib_reinit(void);
-char *apmib_hwconf(void);
-char *apmib_csconf(void);
-char *apmib_dsconf(void);
-int apmib_get(int id, void *value);
-int apmib_getDef(int id, void *value);
-int apmib_set(int id, void *value);
-int apmib_setDef(int id, void *value);
-int apmib_update(CONFIG_DATA_T type);
-int apmib_updateDef(void);
-int apmib_updateFlash(CONFIG_DATA_T type, char *data, int len, int force, int ver);
-int update_linkchain(int fmt, void *Entry_old, void *Entry_new, int type_size);
-extern APMIB_Tp pMib, pMibDef;
-extern HW_SETTING_Tp pHwSetting;
-extern PARAM_HEADER_T hsHeader, dsHeader, csHeader;
-extern int wlan_idx;
-extern int vwlan_idx;
-#ifdef GW_QOS_ENGINE
-extern void getVal12(char *value, char **p1, char **p2, char **p3, char **p4, char **p5, char **p6, char **p7,
- char **p8, char **p9, char **p10, char **p11, char **p12);
-#define QOS_FORMAT ("%d, %d, %d, %s, %s, %d, %d, %s, %s, %d, %d, %s")
-#endif
-
-#ifdef QOS_BY_BANDWIDTH
-//#define QOS_FORMAT ("%d, %s, %d, %s, %s, %d, %s")
-#define QOS_FORMAT ("%d, %02x%02x%02x%02x%02x%02x, %d, %s, %s, %d, %d, %s")
-#endif
-
-#if CONFIG_APMIB_SHARED_MEMORY == 1
-#define HWCONF_SHM_KEY 0
-#define DSCONF_SHM_KEY 1
-#define CSCONF_SHM_KEY 2
-
-int apmib_sem_lock(void);
-int apmib_sem_unlock(void);
-int apmib_shm_free(void *shm_memory, int shm_key);
-#endif
-
-
-#ifdef CONFIG_CWMP_TR069
-
-/* Keith add for tr069 --start */
-#undef mib_get
-#undef mib_set
-#undef mib_update
-
-#define mib_get(S, T) apmib_get(S, T)
-#define mib_set(S, T) apmib_set(S, T)
-#define mib_update(S) apmib_update(S)
-#define LANDEVNAME2BR0(a) do{ if(a && (strncmp(a, "eth0", 4)==0||strncmp(a, "wlan0", 5)==0||strncmp(a, "usb0", 4)==0)) strcpy(a, "br0"); }while(0)
-/* Keith add for tr069 --end */
-
-#define TIME_ZONE
-#define WLAN_SUPPORT
-#ifdef MBSSID
-#define WLAN_MBSSID
-#endif
-#ifdef UNIVERSAL_REPEATER
-#define WLAN_REPEATER
-#endif
-#define MAC_FILTER
-#define ENABLE_WPAAES_WPA2TKIP
-
-#endif //#ifdef CONFIG_CWMP_TR069
-//#if defined(CONFIG_USBDISK_UPDATE_IMAGE)
-#define USB_UPLOAD_FORM_PATH "/tmp/usb/sda1/fw.bin"
-//#endif
-//### add by sen_liu 2011.4.21 sync the system log update (enlarge from 1 pcs to 8 pcs) to SDKv2.5 from kernel 2.4
-#define RINGLOG
-#ifdef RINGLOG /* ring log */
-#define MAX_LOG_SIZE 8 /* unit is kbyte */
-#define LOG_SPLIT 7 /* can't greater than 99 */
- /*
- for /var/log/message.(LOG_SPLIT-1) to /var/log/message.0 and then /var/log/message
- ex: LOG_SPLIT = 7, we will have
- /var/log/message.6
- ...
- /var/log/message.0
- /var/log/message
- */
-#endif /* ring log */
-
-//### end
-#endif // INCLUDE_APMIB_H
diff --git a/tools/firmware-utils/src/bixutil.c b/tools/firmware-utils/src/bixutil.c
deleted file mode 100644
index 6e7dcd479..000000000
--- a/tools/firmware-utils/src/bixutil.c
+++ /dev/null
@@ -1,188 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/mman.h>
-#include <time.h>
-#include <fcntl.h>
-#include <errno.h>
-
-#define RTL_PRODUCT_MAGIC1 0x59a0e842
-#define SQUASH_MAGIC 0x73717368
-#define RTL_IMAGE_VERSION 1
-#define RTL_IMAGE_TYPE_RDIR 0xb162
-#define RTL_IMAGE_TYPE_BOOT 0xea43
-#define RTL_IMAGE_TYPE_RUN 0x8dc9
-#define RTL_IMAGE_TYPE_KFS 0xd92f
-#define RTL_IMAGE_TYPE_CCFG 0x2a05
-#define RTL_IMAGE_TYPE_DCFG 0x6ce8
-#define RTL_IMAGE_TYPE_LOG 0xc371
-
-#define ENDIAN_SWITCH32(x) (((x) >> 24) | \
- (((x) >> 8) & 0xFF00) | \
- (((x) << 8) & 0xFF0000) | \
- (((x) << 24) &0xFF000000))
-#define ENDIAN_SWITCH16(x) ((((x) >> 8) & 0xFF) | \
- (((x) << 8) & 0xFF00))
-
-
-struct image_header {
- u_int32_t magic1;
- u_int16_t type;
- u_int8_t ver;
- u_int8_t align1;
- u_int16_t year;
- u_int8_t mon;
- u_int8_t day;
- u_int8_t hour;
- u_int8_t min;
- u_int8_t sec;
- u_int8_t align2;
- u_int32_t len;
- u_int16_t align3;
- u_int8_t icsum;
- u_int8_t hcsum;
-};
-
-void print_header(struct image_header *h)
-{
- printf("Magic1: 0x%08x\n", ENDIAN_SWITCH32(h->magic1));
- printf("Type: 0x%04x\n", ENDIAN_SWITCH16(h->type));
- printf("Version: %d\n", h->ver);
- printf("Built: %04d-%02d-%02d %02d:%02d:%02d\n",
- ENDIAN_SWITCH16(h->year), h->mon, h->day, h->hour,
- h->min, h->sec);
- printf("Length: %ld\n", ENDIAN_SWITCH32(h->len));
- printf("Checksums: 0x%02x (header), 0x%02x (image)\n",
- h->hcsum, h->icsum);
-}
-
-void *do_mmap(char *filename, int size, int readonly)
-{
- int fd;
- int openflags = O_RDWR | O_CREAT | O_TRUNC;
- int protflags = PROT_READ | PROT_WRITE;
- void *ptr;
- struct stat st;
-
- if (readonly) {
- openflags = O_RDONLY;
- protflags = PROT_READ;
- }
-
- if (!size) {
- if (!readonly)
- goto failed;
- if (stat(filename, &st) != 0) {
- perror("stat failed");
- goto failed;
- }
- size = st.st_size;
- }
-
- if (!size)
- goto failed;
-
- if ((fd = open(filename, openflags, 0644)) == -1) {
- perror("open failed");
- goto failed;
- }
-
- if (!readonly)
- ftruncate(fd, size);
-
- ptr = mmap(0, size, protflags, MAP_SHARED, fd, 0);
- if (ptr == MAP_FAILED) {
- perror("mmap failed");
- goto mmap_failed;
- }
-
- return ptr;
-
-mmap_failed:
- close(fd);
-failed:
- return NULL;
-}
-
-int write_image(char *kernel, char *outfile)
-{
- unsigned char type;
- unsigned long ksize, padded;
- unsigned long i;
- unsigned char ch, *src, *dst;
- struct stat st;
- struct image_header *h;
- time_t tt;
- struct tm *ut;
-
- tt = time(NULL);
- ut = localtime(&tt);
-
- if (stat(kernel, &st) != 0)
- error(-1, "stat %s failed", kernel);
- ksize = st.st_size;
-
- padded = sizeof(struct image_header) +
- ksize + ksize % 4; /* fs starts 32-bit aligned (?check) */
-
- h = (struct image_header *)do_mmap(outfile, padded, 0);
- if (!h)
- return -1;
-
- memset(h, 0, sizeof(struct image_header));
-
- dst = (unsigned char *)((unsigned)h + sizeof(struct image_header));
- src = (unsigned char *)do_mmap(kernel, ksize, 1);
- if (!src)
- return -1;
-
- for (i = 0; i < ksize; i++) {
- dst[i] = src[i];
- h->icsum ^= src[i];
- }
-
- for (i = 0; i < ksize % 4; i++)
- dst[ksize + i] = 0;
-
- munmap(src, ksize);
-
- h->magic1 = ENDIAN_SWITCH32(RTL_PRODUCT_MAGIC1);
- h->type = ENDIAN_SWITCH16(RTL_IMAGE_TYPE_RUN);
- h->ver = RTL_IMAGE_VERSION;
- h->year = ENDIAN_SWITCH16(ut->tm_year + 1900);
- h->mon = ut->tm_mon + 1;
- h->day = ut->tm_mday;
- h->hour = ut->tm_hour;
- h->min = ut->tm_min;
- h->sec = ut->tm_sec;
- h->len = ENDIAN_SWITCH32(padded - sizeof(struct image_header));
-
- for (i = 0; i < (sizeof(struct image_header) - 1); i++)
- h->hcsum ^= ((unsigned char *)&h)[i];
- munmap(h, padded);
- return 0;
-}
-
-void usage(void)
-{
- exit(1);
-}
-
-int main(int argc, char *argv[])
-{
- if (argc < 3) usage();
-
- printf("%d\n", sizeof(struct image_header));
- if (!strncmp(argv[1], "info", 4)) {
- print_header((struct image_header *)do_mmap(argv[2],
- 0, 1));
- } else if (!strncmp(argv[1], "pack", 4)) {
- write_image(argv[2], argv[3]);
- } else {
- usage();
- }
-
- return 0;
-}
diff --git a/tools/firmware-utils/src/cvimg.c b/tools/firmware-utils/src/cvimg.c
index a2b9519d5..c5599ef4c 100644
--- a/tools/firmware-utils/src/cvimg.c
+++ b/tools/firmware-utils/src/cvimg.c
@@ -15,21 +15,18 @@
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
-#define HOME_GATEWAY
-
-#define CONFIG_RTL_8196C
+/* This define is needed to generate proper binary for
+ * rtl8196c, rtl8198, rtl819Xe and rtl8196e.
+ * rtl8196b is somehow different (can be fixed in bootloder?).
+ * See apmib.h for details.
+ */
+#define CONFIG_RTL_8196C
#include "apmib.h"
#define COMPACT_FILENAME_BUFFER
-static int friendly_strcmp(const char *s1, const char *s2)
-{
- if (!s1 || !s2) return (s1>s2) ? -1 : !(s1==s2);
- return strcmp(s1,s2);
-}
-
/* 32-bit ELF base types. */
typedef unsigned int Elf32_Addr;
typedef unsigned short Elf32_Half;
@@ -119,14 +116,14 @@ int main(int argc, char** argv)
IMG_HEADER_Tp pHeader;
unsigned int startAddr;
unsigned int burnAddr;
- unsigned short checksum;
+ unsigned short checksum=0;
int is_vmlinux = 0;
int is_vmlinuxhdr = 0;
int is_signature = 0;
- unsigned int lchecksum, padding_len;
- unsigned int start_addr;
+ unsigned int lchecksum, padding_len=0;
+ unsigned int start_addr=0;
- if (argc == 4 && !friendly_strcmp(argv[1], "size_chk")) {
+ if (argc == 4 && !strcmp(argv[1], "size_chk")) {
unsigned int total_size;
#ifdef COMPACT_FILENAME_BUFFER
@@ -159,7 +156,7 @@ int main(int argc, char** argv)
}
#ifdef CONFIG_RTL_FLASH_MAPPING_ENABLE
- if (argc == 3 && !friendly_strcmp(argv[1], "flash_size_chk")) {
+ if (argc == 3 && !strcmp(argv[1], "flash_size_chk")) {
unsigned int total_size;
#ifdef COMPACT_FILENAME_BUFFER
@@ -184,7 +181,7 @@ int main(int argc, char** argv)
if (status.st_size > (int)total_size)
{
- printf("Error!!!! : Kernel image too big will overwirte rootfs image, cur size(%d), available size(%d).\n",status.st_size, total_size);
+ printf("Error!!!! : Kernel image too big will overwirte rootfs image, cur size(%d), available size(%d).\n",(int)status.st_size, total_size);
exit(1);
}
else
@@ -195,15 +192,15 @@ int main(int argc, char** argv)
}
#endif
- if (argc == 4 && !friendly_strcmp(argv[1], "vmlinux"))
+ if (argc == 4 && !strcmp(argv[1], "vmlinux"))
is_vmlinux = 1;
- if (argc == 5 && !friendly_strcmp(argv[1], "vmlinuxhdr")) {
+ if (argc == 5 && !strcmp(argv[1], "vmlinuxhdr")) {
is_vmlinuxhdr = 1;
start_addr = extractStartAddr(argv[4]);
}
- if (!friendly_strcmp(argv[1], "signature")) {
+ if (!strcmp(argv[1], "signature")) {
is_signature = 1;
if (argc != 7) {
printf_usage();
@@ -288,15 +285,15 @@ int main(int argc, char** argv)
memcpy(&buf[size-12], &lchecksum, 4);
}
else if (!is_vmlinux) {
- if( !friendly_strcmp("root", argv[1]))
+ if( !strcmp("root", argv[1]))
memcpy(pHeader->signature, ROOT_HEADER, SIGNATURE_LEN);
- else if ( !friendly_strcmp("boot", argv[1]))
+ else if ( !strcmp("boot", argv[1]))
memcpy(pHeader->signature, BOOT_HEADER, SIGNATURE_LEN);
- else if ( !friendly_strcmp("linux", argv[1]))
+ else if ( !strcmp("linux", argv[1]))
memcpy(pHeader->signature, FW_HEADER, SIGNATURE_LEN);
- else if ( !friendly_strcmp("linux-ro", argv[1]))
+ else if ( !strcmp("linux-ro", argv[1]))
memcpy(pHeader->signature, FW_HEADER_WITH_ROOT, SIGNATURE_LEN);
- else if ( !friendly_strcmp("signature", argv[1]))
+ else if ( !strcmp("signature", argv[1]))
memcpy(pHeader->signature, argv[6], SIGNATURE_LEN);
else{
printf("not supported signature\n");
@@ -306,7 +303,7 @@ int main(int argc, char** argv)
pHeader->startAddr = DWORD_SWAP(startAddr);
pHeader->burnAddr = DWORD_SWAP(burnAddr);
- if( !friendly_strcmp("root", argv[1])) {
+ if( !strcmp("root", argv[1])) {
#define SIZE_OF_SQFS_SUPER_BLOCK 640
unsigned int fs_len;
fs_len = DWORD_SWAP((size-sizeof(IMG_HEADER_T) - sizeof(checksum)- SIZE_OF_SQFS_SUPER_BLOCK));
@@ -323,7 +320,7 @@ int main(int argc, char** argv)
}
// Write image to output file
- fh = open(outFile, O_RDWR | O_CREAT | O_TRUNC, DEFFILEMODE);
+ fh = open(outFile, O_RDWR|O_CREAT|O_TRUNC, 0644);
if ( fh == -1 ) {
printf("Create output file error! [%s]\n", outFile);
free(pHeader);
diff --git a/tools/firmware-utils/src/mgbin.c b/tools/firmware-utils/src/mgbin.c
new file mode 100644
index 000000000..a16ef1e44
--- /dev/null
+++ b/tools/firmware-utils/src/mgbin.c
@@ -0,0 +1,431 @@
+/*
+ * utility to merge all binary into one image
+ *
+ * Authors: David Hsu <davidhsu@realtek.com.tw>
+ *
+ * $Id: mgbin.c,v 1.7 2008/11/25 15:09:22 bradhuang Exp $
+ *
+ */
+#include <string.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#ifdef WIN32
+ #include <io.h>
+#else
+ #include <unistd.h>
+#endif
+#define __mips__
+
+#define CONFIG_RTL_8196C
+#include "apmib.h"
+
+//#define DEBUG_PRINT printf
+#define DEBUG_PRINT(...) do {} while(0)
+#define COMPACT_FILENAME_BUFFER
+
+/////////////////////////////////////////////////////////////////////////////
+/* Input file type */
+typedef enum { BOOT_CODE=0, CONFIG, WEB_PAGES, SYS, ROOT, ALL, INVALID_FILE=-1 } TYPE_T;
+
+typedef struct _sector {
+ TYPE_T type;
+#ifdef COMPACT_FILENAME_BUFFER
+ const char *filename;
+#else
+ char filename[80];
+#endif
+ unsigned long offset;
+ unsigned long size;
+ int with_header;
+} SECTOR_T;
+
+/////////////////////////////////////////////////////////////////////////////
+static char *copyright="Copyright (c) Realtek Semiconductor Corp., 2007. All Rights Reserved.";
+static char *version="1.0";
+
+static SECTOR_T sector[ROOT+1];
+static int no_hw_config=0;
+
+#define BYTE_SWAP(word) (((word >> 8) &0xff) | ((((unsigned char)word)<<8)&0xff00) )
+
+/////////////////////////////////////////////////////////////////////////////
+static TYPE_T checkInputFile(char *filename, int *pWith_header)
+{
+ int fh;
+ char signature[6];
+
+#ifdef WIN32
+ fh = open(filename, O_RDONLY|O_BINARY);
+#else
+ fh = open(filename, O_RDONLY,S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH);
+#endif
+ if ( fh == -1 )
+ return INVALID_FILE;
+
+ lseek(fh, 0, SEEK_SET);
+
+ if ( read(fh, signature, sizeof(signature)) != sizeof(signature)) {
+ close(fh);
+ return INVALID_FILE;
+ }
+ close(fh);
+
+ *pWith_header = 1;
+ if ( !memcmp(signature, BOOT_HEADER, 4))
+ return BOOT_CODE;
+ else if ( !memcmp(signature, WEB_HEADER, 3) )
+ return WEB_PAGES;
+
+ else if ( !memcmp(signature, FW_HEADER, 4) ||
+ !memcmp(signature, FW_HEADER_WITH_ROOT, 4))
+ return SYS;
+
+ else if ( !memcmp(signature, ROOT_HEADER, 4) )
+ return ROOT;
+
+ else if ( !memcmp(signature, "h", 1) || !memcmp(signature, "COMPHS", 6))
+ return CONFIG;
+ else if ( !memcmp(signature, "6G", 2) || !memcmp(signature, "6A", 2) || !memcmp(signature, "6g", 2) || !memcmp(signature, "6a", 2) || !memcmp(signature, "COMPDS", 6)) {
+ no_hw_config = 1;
+ return CONFIG;
+ }
+ else if ( !memcmp(signature, "\x0b\xf0\x00\x02", 4)) {
+ *pWith_header = 0;
+ return BOOT_CODE;
+ }
+ return INVALID_FILE;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+static void showHelp(void)
+{
+ printf("\nRTL865x utility to merge binary.\n");
+ printf("%s Ver %s.\n\n", copyright, version);
+ printf("usage: mgbin [-s] [-c] [-a] -o outputfile bootcode config webpages linux root\n");
+ printf(" -s : do byte swap\n");
+ printf(" -c : cascade. May use this option to merge image for web upload\n");
+ printf(" -a : add all tag in header\n");
+
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+static void do_byteswap(unsigned char *buf, int len)
+{
+ unsigned short wVal, *ptr;
+ int i=0;
+
+ while (len > 0) {
+ len -= 2;
+ ptr = (unsigned short *)&buf[2*i];
+ wVal = *ptr;
+ *ptr = BYTE_SWAP( wVal );
+ i++;
+ }
+}
+
+static unsigned short calculateChecksum(char *buf, int len, unsigned short oldv)
+{
+ int i, j;
+ unsigned short sum=oldv, tmp;
+
+ j = (len/2)*2;
+
+ for (i=0; i<j; i+=2) {
+ tmp = *((unsigned short *)(buf + i));
+ sum += WORD_SWAP(tmp);
+ }
+
+ if ( len % 2 ) {
+ tmp = buf[len-1];
+ sum += WORD_SWAP(tmp);
+ }
+ return sum;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+int main(int argc, char** argv)
+{
+ int argNum=1;
+#ifdef COMPACT_FILENAME_BUFFER
+ const char *outFile = NULL;
+#else
+ char outFile[80]={0};
+#endif
+ TYPE_T type;
+ int mask=0, fh_out, fh_in, len, i, total=0;
+ unsigned char *buf, *buf1;
+ struct stat sbuf;
+ int byteswap=0, cascade=0, last_idx=-1, is_all=0;
+ int offset=0, with_header;
+ IMG_HEADER_Tp pHeader;
+ unsigned long burnAddr=0;
+ IMG_HEADER_T allHeader;
+ unsigned short checksum=0;
+
+ memset(&sector, 0, sizeof(sector));
+
+ while (argNum < argc) {
+ if ( !strcmp(argv[argNum], "-o") ) {
+ if (++argNum >= argc)
+ break;
+#ifdef COMPACT_FILENAME_BUFFER
+ outFile = argv[argNum];
+#else
+ sscanf(argv[argNum], "%s", outFile);
+#endif
+ }
+ else if ( !strcmp(argv[argNum], "-s") ) {
+ byteswap = 1;
+ }
+ else if ( !strcmp(argv[argNum], "-c") ) {
+ cascade = 1;
+ }
+ else if ( !strcmp(argv[argNum], "-a") ) {
+ is_all = 1;
+ memset(&allHeader, '\0', sizeof(IMG_HEADER_T));
+ memcpy(allHeader.signature, ALL_HEADER, SIGNATURE_LEN);
+ }
+#if 0
+ else if ( !strcmp(argv[argNum], "-a2") ) {
+ is_all = 1;
+ memset(&allHeader, '\0', sizeof(IMG_HEADER_T));
+ memcpy(allHeader.signature, ALL_HEADER2, SIGNATURE_LEN);
+ }
+#endif
+ else {
+ if (is_all) {
+ if ((argNum+1) < argc) {
+ printf("argument error, only input file could be specified!\n");
+ return -1;
+ }
+#ifdef COMPACT_FILENAME_BUFFER
+ sector[0].filename = argv[argNum];
+#else
+ strcpy(sector[0].filename,argv[argNum]);
+#endif
+ sector[0].type=ALL;
+ sector[0].with_header=0;
+ mask |= (1 << ALL);
+ }
+ else {
+ type=checkInputFile(argv[argNum], &with_header);
+ DEBUG_PRINT("filename=%s, type=%d\n", argv[argNum], type);
+ if (type == INVALID_FILE) {
+ printf("\nInvalid input file %s!!\n", argv[argNum]);
+ showHelp();
+ exit(1);
+ }
+#ifdef COMPACT_FILENAME_BUFFER
+ sector[type].filename = argv[argNum];
+#else
+ strcpy(sector[type].filename, argv[argNum]);
+#endif
+ sector[type].with_header = with_header;
+ sector[type].type = type;
+ mask |= (1 << type);
+ }
+ }
+ argNum++;
+ }
+
+#ifdef COMPACT_FILENAME_BUFFER
+ if( outFile == NULL )
+#else
+ if (!outFile[0])
+#endif
+ {
+ printf("No output file specified!\n");
+ showHelp();
+ exit(1);
+ }
+
+ if (mask == 0) {
+ printf("No valid input image found!\n");
+ exit(1);
+ }
+
+ // Create output file
+#ifdef WIN32
+ _chmod(outFile, S_IREAD|S_IWRITE);
+ fh_out = open(outFile, O_RDWR|O_CREAT|O_TRUNC|O_BINARY);
+#else
+ chmod(outFile, S_IREAD|S_IWRITE);
+ fh_out = open(outFile, O_RDWR|O_CREAT|O_TRUNC, 0644);
+#endif
+ if (fh_out == -1) {
+ printf("Create output file %s error!\n", outFile);
+ exit(1);
+ }
+
+ if (is_all) {
+ write(fh_out, &allHeader, sizeof(allHeader));
+ total += sizeof(allHeader);
+ printf("\nGenerate ");
+ }
+ else
+ printf("\nMerge ");
+
+ for (i=BOOT_CODE; i<=ROOT ; i++) {
+#ifdef COMPACT_FILENAME_BUFFER
+ if (sector[i].filename)
+#else
+ if (sector[i].filename[0])
+#endif
+ {
+ if ( stat(sector[i].filename, &sbuf) != 0 ) {
+ printf("Stat file %s error!\n", sector[i].filename);
+ exit(1);
+ }
+ buf = malloc(sbuf.st_size+1);
+ if (buf == NULL) {
+ printf("allocate buffer failed %d!\n", (int)sbuf.st_size);
+ exit(1);
+ }
+#ifdef WIN32
+ fh_in = open(sector[i].filename, O_RDONLY|O_BINARY);
+#else
+ fh_in = open(sector[i].filename, O_RDONLY,S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH);
+#endif
+ if (fh_in < 0) {
+ printf("Open file %s error!\n", sector[i].filename);
+ close(fh_out);
+ exit(1);
+ }
+
+ switch(sector[i].type) {
+ case BOOT_CODE:
+ printf("BOOT-CODE ");
+ break;
+ case CONFIG:
+ printf("CONFIG-DATA(%s) ", (no_hw_config ? "no-hw" : "all"));
+ break;
+ case WEB_PAGES:
+ printf("WEB-PAGES ");
+ break;
+ case SYS:
+ printf("LINUX ");
+ break;
+ case ROOT:
+ printf("ROOT ");
+ break;
+ case ALL:
+ printf("ALL ");
+ break;
+ case INVALID_FILE:
+ break;
+ }
+
+ if (read(fh_in, buf, sbuf.st_size) != sbuf.st_size) {
+ printf("Read file %s error!\n", sector[i].filename);
+ close(fh_in);
+ close(fh_out);
+ free(buf);
+ exit(1);
+ }
+
+ if (is_all)
+ checksum = calculateChecksum((char *)buf, sbuf.st_size, checksum);
+ else {
+ if (sector[i].with_header) {
+ if (sector[i].type == CONFIG) {
+ if (no_hw_config == 0)
+ burnAddr = HW_SETTING_OFFSET;
+ else
+ burnAddr = DEFAULT_SETTING_OFFSET;
+ }
+ else {
+ pHeader = (IMG_HEADER_Tp)buf;
+ burnAddr = DWORD_SWAP(pHeader->burnAddr);
+ }
+ }
+ else
+ burnAddr = 0;
+
+ if (byteswap) {
+ if (sbuf.st_size % 2) {
+ buf[sbuf.st_size] = '\0';
+ sbuf.st_size++;
+ }
+ do_byteswap(buf, sbuf.st_size);
+ }
+
+ // try to append 0 if necessary
+ if (!cascade && last_idx!=-1 && sector[i].with_header) {
+ if ((sector[last_idx].offset+sector[last_idx].size) < burnAddr) {
+ len = burnAddr - (sector[last_idx].offset+sector[last_idx].size);
+ buf1 = calloc(len, 1);
+ if (buf1 == NULL) {
+ printf("allocate buffer failed %d!\n", len);
+ exit(1);
+ }
+ write(fh_out, buf1, len); // pad 0
+
+ free(buf1);
+ total += len;
+// printf("pad size=%d, last_idx=%d, burnAddr=%d\n", len, last_idx, burnAddr);
+ }
+ }
+
+ // skip header if necessary
+ if (!cascade && sector[i].with_header &&
+ ((sector[i].type == ROOT) || (sector[i].type == BOOT_CODE))) {
+ offset = sizeof(IMG_HEADER_T);
+// sbuf.st_size -= sizeof(IMG_HEADER_T);
+ }
+ else
+ offset = 0;
+ }
+
+// printf("write offset=%d, size=%d\n", offset, sbuf.st_size);
+ if ( write(fh_out, buf + offset , sbuf.st_size-offset) != sbuf.st_size-offset) {
+ printf("Write output file %s error!\n", outFile);
+ close(fh_in);
+ close(fh_out);
+ free(buf);
+ exit(1);
+ }
+ close(fh_in);
+ if (burnAddr > 0)
+ sector[i].offset = burnAddr;
+ else
+ sector[i].offset = total;
+ sector[i].size = sbuf.st_size-offset;
+
+// printf("section[%d], offset=%d, size=%d\n", i, sector[i].offset, sector[i].size);
+
+ total += sbuf.st_size;
+ free(buf);
+ last_idx = i;
+ if (is_all)
+ break;
+ }
+ }
+
+ if (is_all) {
+ allHeader.len = DWORD_SWAP((total+2));
+ checksum = calculateChecksum((char *)&allHeader, sizeof(allHeader), checksum);
+ checksum = WORD_SWAP((~checksum+1));
+ write(fh_out, &checksum, 2);
+ lseek(fh_out, 0, SEEK_SET);
+ allHeader.len = DWORD_SWAP((total+2));
+// allHeader.startAddr = DWORD_SWAP(image_num);
+ write(fh_out, &allHeader, sizeof(allHeader));
+ total += (2 + sizeof(allHeader));
+ }
+ close(fh_out);
+
+#ifdef WIN32
+ _chmod(outFile, S_IREAD);
+#else
+ chmod(outFile, DEFFILEMODE);
+#endif
+
+ printf("=> %s ok, size=%d.\n", outFile, total);
+ exit(0);
+}
+