lantiq: drop lzma-loader
It isn't used any more. Signed-off-by: Mathias Kresin <dev@kresin.me>
This commit is contained in:
		@@ -1,65 +0,0 @@
 | 
				
			|||||||
#
 | 
					 | 
				
			||||||
# 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)" \
 | 
					 | 
				
			||||||
		PLATFORM="lantiq" \
 | 
					 | 
				
			||||||
		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)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@@ -1,584 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
  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;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,113 +0,0 @@
 | 
				
			|||||||
/* 
 | 
					 | 
				
			||||||
  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
 | 
					 | 
				
			||||||
@@ -1,45 +0,0 @@
 | 
				
			|||||||
/* 
 | 
					 | 
				
			||||||
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
 | 
					 | 
				
			||||||
@@ -1,110 +0,0 @@
 | 
				
			|||||||
#
 | 
					 | 
				
			||||||
# Makefile for the LZMA compressed kernel loader for
 | 
					 | 
				
			||||||
# Atheros AR7XXX/AR9XXX based boards
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Copyright (C) 2011 Gabor Juhos <juhosg@openwrt.org>
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# 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	:=
 | 
					 | 
				
			||||||
LZMA_TEXT_START	:= 0x80a00000
 | 
					 | 
				
			||||||
LOADER_DATA	:=
 | 
					 | 
				
			||||||
BOARD		:=
 | 
					 | 
				
			||||||
FLASH_OFFS	:=
 | 
					 | 
				
			||||||
FLASH_MAX	:=
 | 
					 | 
				
			||||||
PLATFORM	:=
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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 -R .MIPS.abiflags -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 -march=mips32r2 \
 | 
					 | 
				
			||||||
		  -Wa,-32 -Wa,-march=mips32r2 -Wa,-mips32r2 -Wa,--trap
 | 
					 | 
				
			||||||
CFLAGS		+= -D_LZMA_PROB32 -DARCH=$(PLATFORM)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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-$(PLATFORM).o printf.o LzmaDecode.o
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
include $(PLATFORM).mk
 | 
					 | 
				
			||||||
CFLAGS+=$(CACHE_FLAGS)
 | 
					 | 
				
			||||||
ASFLAGS+=$(CACHE_FLAGS)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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.elf
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# 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: $(OBJECTS)
 | 
					 | 
				
			||||||
	$(LD) $(LDFLAGS) -o $@ $(OBJECTS)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
loader.bin: loader
 | 
					 | 
				
			||||||
	$(OBJCOPY) $(BIN_FLAGS) $< $@
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
loader2.o: loader.bin
 | 
					 | 
				
			||||||
	$(LD) -r -b binary --oformat $(O_FORMAT) -o $@ $<
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
loader.elf: loader2.o
 | 
					 | 
				
			||||||
	$(LD) -e startup -T loader2.lds -Ttext $(LOADADDR) -o $@ $<
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mrproper: clean
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
clean:
 | 
					 | 
				
			||||||
	rm -f loader *.elf *.bin *.o
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@@ -1 +0,0 @@
 | 
				
			|||||||
CACHE_FLAGS+=-DCONFIG_ICACHE_SIZE="(32 * 1024)" -DCONFIG_DCACHE_SIZE="(64 * 1024)" -DCONFIG_CACHELINE_SIZE=32
 | 
					 | 
				
			||||||
@@ -1,725 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 *  Atheros AR71XX/AR724X/AR913X SoC register definitions
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 *  Copyright (C) 2010-2011 Jaiganesh Narayanan <jnarayanan@atheros.com>
 | 
					 | 
				
			||||||
 *  Copyright (C) 2008-2010 Gabor Juhos <juhosg@openwrt.org>
 | 
					 | 
				
			||||||
 *  Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org>
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 *  Parts of this file are based on Atheros' 2.6.15/2.6.31 BSP
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 *  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.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef __ASM_MACH_AR71XX_REGS_H
 | 
					 | 
				
			||||||
#define __ASM_MACH_AR71XX_REGS_H
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define BIT(_x)			(1UL << (_x))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR71XX_APB_BASE		0x18000000
 | 
					 | 
				
			||||||
#define AR71XX_GE0_BASE		0x19000000
 | 
					 | 
				
			||||||
#define AR71XX_GE0_SIZE		0x10000
 | 
					 | 
				
			||||||
#define AR71XX_GE1_BASE		0x1a000000
 | 
					 | 
				
			||||||
#define AR71XX_GE1_SIZE		0x10000
 | 
					 | 
				
			||||||
#define AR71XX_EHCI_BASE	0x1b000000
 | 
					 | 
				
			||||||
#define AR71XX_EHCI_SIZE	0x1000
 | 
					 | 
				
			||||||
#define AR71XX_OHCI_BASE	0x1c000000
 | 
					 | 
				
			||||||
#define AR71XX_OHCI_SIZE	0x1000
 | 
					 | 
				
			||||||
#define AR71XX_SPI_BASE		0x1f000000
 | 
					 | 
				
			||||||
#define AR71XX_SPI_SIZE		0x01000000
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR71XX_DDR_CTRL_BASE	(AR71XX_APB_BASE + 0x00000000)
 | 
					 | 
				
			||||||
#define AR71XX_DDR_CTRL_SIZE	0x100
 | 
					 | 
				
			||||||
#define AR71XX_UART_BASE	(AR71XX_APB_BASE + 0x00020000)
 | 
					 | 
				
			||||||
#define AR71XX_UART_SIZE	0x100
 | 
					 | 
				
			||||||
#define AR71XX_USB_CTRL_BASE	(AR71XX_APB_BASE + 0x00030000)
 | 
					 | 
				
			||||||
#define AR71XX_USB_CTRL_SIZE	0x100
 | 
					 | 
				
			||||||
#define AR71XX_GPIO_BASE        (AR71XX_APB_BASE + 0x00040000)
 | 
					 | 
				
			||||||
#define AR71XX_GPIO_SIZE        0x100
 | 
					 | 
				
			||||||
#define AR71XX_PLL_BASE		(AR71XX_APB_BASE + 0x00050000)
 | 
					 | 
				
			||||||
#define AR71XX_PLL_SIZE		0x100
 | 
					 | 
				
			||||||
#define AR71XX_RESET_BASE	(AR71XX_APB_BASE + 0x00060000)
 | 
					 | 
				
			||||||
#define AR71XX_RESET_SIZE	0x100
 | 
					 | 
				
			||||||
#define AR71XX_MII_BASE		(AR71XX_APB_BASE + 0x00070000)
 | 
					 | 
				
			||||||
#define AR71XX_MII_SIZE		0x100
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR71XX_PCI_MEM_BASE	0x10000000
 | 
					 | 
				
			||||||
#define AR71XX_PCI_MEM_SIZE	0x07000000
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR71XX_PCI_WIN0_OFFS	0x10000000
 | 
					 | 
				
			||||||
#define AR71XX_PCI_WIN1_OFFS	0x11000000
 | 
					 | 
				
			||||||
#define AR71XX_PCI_WIN2_OFFS	0x12000000
 | 
					 | 
				
			||||||
#define AR71XX_PCI_WIN3_OFFS	0x13000000
 | 
					 | 
				
			||||||
#define AR71XX_PCI_WIN4_OFFS	0x14000000
 | 
					 | 
				
			||||||
#define AR71XX_PCI_WIN5_OFFS	0x15000000
 | 
					 | 
				
			||||||
#define AR71XX_PCI_WIN6_OFFS	0x16000000
 | 
					 | 
				
			||||||
#define AR71XX_PCI_WIN7_OFFS	0x07000000
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR71XX_PCI_CFG_BASE	\
 | 
					 | 
				
			||||||
	(AR71XX_PCI_MEM_BASE + AR71XX_PCI_WIN7_OFFS + 0x10000)
 | 
					 | 
				
			||||||
#define AR71XX_PCI_CFG_SIZE	0x100
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR7240_USB_CTRL_BASE	(AR71XX_APB_BASE + 0x00030000)
 | 
					 | 
				
			||||||
#define AR7240_USB_CTRL_SIZE	0x100
 | 
					 | 
				
			||||||
#define AR7240_OHCI_BASE	0x1b000000
 | 
					 | 
				
			||||||
#define AR7240_OHCI_SIZE	0x1000
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR724X_PCI_MEM_BASE	0x10000000
 | 
					 | 
				
			||||||
#define AR724X_PCI_MEM_SIZE	0x04000000
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR724X_PCI_CFG_BASE	0x14000000
 | 
					 | 
				
			||||||
#define AR724X_PCI_CFG_SIZE	0x1000
 | 
					 | 
				
			||||||
#define AR724X_PCI_CRP_BASE	(AR71XX_APB_BASE + 0x000c0000)
 | 
					 | 
				
			||||||
#define AR724X_PCI_CRP_SIZE	0x1000
 | 
					 | 
				
			||||||
#define AR724X_PCI_CTRL_BASE	(AR71XX_APB_BASE + 0x000f0000)
 | 
					 | 
				
			||||||
#define AR724X_PCI_CTRL_SIZE	0x100
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR724X_EHCI_BASE	0x1b000000
 | 
					 | 
				
			||||||
#define AR724X_EHCI_SIZE	0x1000
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR913X_EHCI_BASE	0x1b000000
 | 
					 | 
				
			||||||
#define AR913X_EHCI_SIZE	0x1000
 | 
					 | 
				
			||||||
#define AR913X_WMAC_BASE	(AR71XX_APB_BASE + 0x000C0000)
 | 
					 | 
				
			||||||
#define AR913X_WMAC_SIZE	0x30000
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR933X_UART_BASE	(AR71XX_APB_BASE + 0x00020000)
 | 
					 | 
				
			||||||
#define AR933X_UART_SIZE	0x14
 | 
					 | 
				
			||||||
#define AR933X_GMAC_BASE	(AR71XX_APB_BASE + 0x00070000)
 | 
					 | 
				
			||||||
#define AR933X_GMAC_SIZE	0x04
 | 
					 | 
				
			||||||
#define AR933X_WMAC_BASE	(AR71XX_APB_BASE + 0x00100000)
 | 
					 | 
				
			||||||
#define AR933X_WMAC_SIZE	0x20000
 | 
					 | 
				
			||||||
#define AR933X_EHCI_BASE	0x1b000000
 | 
					 | 
				
			||||||
#define AR933X_EHCI_SIZE	0x1000
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR934X_GMAC_BASE	(AR71XX_APB_BASE + 0x00070000)
 | 
					 | 
				
			||||||
#define AR934X_GMAC_SIZE	0x14
 | 
					 | 
				
			||||||
#define AR934X_WMAC_BASE	(AR71XX_APB_BASE + 0x00100000)
 | 
					 | 
				
			||||||
#define AR934X_WMAC_SIZE	0x20000
 | 
					 | 
				
			||||||
#define AR934X_EHCI_BASE	0x1b000000
 | 
					 | 
				
			||||||
#define AR934X_EHCI_SIZE	0x200
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define QCA955X_PCI_MEM_BASE0	0x10000000
 | 
					 | 
				
			||||||
#define QCA955X_PCI_MEM_BASE1	0x12000000
 | 
					 | 
				
			||||||
#define QCA955X_PCI_MEM_SIZE	0x02000000
 | 
					 | 
				
			||||||
#define QCA955X_PCI_CFG_BASE0	0x14000000
 | 
					 | 
				
			||||||
#define QCA955X_PCI_CFG_BASE1	0x16000000
 | 
					 | 
				
			||||||
#define QCA955X_PCI_CFG_SIZE	0x1000
 | 
					 | 
				
			||||||
#define QCA955X_PCI_CRP_BASE0	(AR71XX_APB_BASE + 0x000c0000)
 | 
					 | 
				
			||||||
#define QCA955X_PCI_CRP_BASE1	(AR71XX_APB_BASE + 0x00250000)
 | 
					 | 
				
			||||||
#define QCA955X_PCI_CRP_SIZE	0x1000
 | 
					 | 
				
			||||||
#define QCA955X_PCI_CTRL_BASE0	(AR71XX_APB_BASE + 0x000f0000)
 | 
					 | 
				
			||||||
#define QCA955X_PCI_CTRL_BASE1	(AR71XX_APB_BASE + 0x00280000)
 | 
					 | 
				
			||||||
#define QCA955X_PCI_CTRL_SIZE	0x100
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define QCA955X_WMAC_BASE	(AR71XX_APB_BASE + 0x00100000)
 | 
					 | 
				
			||||||
#define QCA955X_WMAC_SIZE	0x20000
 | 
					 | 
				
			||||||
#define QCA955X_EHCI0_BASE	0x1b000000
 | 
					 | 
				
			||||||
#define QCA955X_EHCI1_BASE	0x1b400000
 | 
					 | 
				
			||||||
#define QCA955X_EHCI_SIZE	0x1000
 | 
					 | 
				
			||||||
#define QCA955X_GMAC_BASE	(AR71XX_APB_BASE + 0x00070000)
 | 
					 | 
				
			||||||
#define QCA955X_GMAC_SIZE	0x40
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR9300_OTP_BASE		0x14000
 | 
					 | 
				
			||||||
#define AR9300_OTP_STATUS	0x15f18
 | 
					 | 
				
			||||||
#define AR9300_OTP_STATUS_TYPE		0x7
 | 
					 | 
				
			||||||
#define AR9300_OTP_STATUS_VALID		0x4
 | 
					 | 
				
			||||||
#define AR9300_OTP_STATUS_ACCESS_BUSY	0x2
 | 
					 | 
				
			||||||
#define AR9300_OTP_STATUS_SM_BUSY	0x1
 | 
					 | 
				
			||||||
#define AR9300_OTP_READ_DATA	0x15f1c
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * DDR_CTRL block
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#define AR71XX_DDR_REG_PCI_WIN0		0x7c
 | 
					 | 
				
			||||||
#define AR71XX_DDR_REG_PCI_WIN1		0x80
 | 
					 | 
				
			||||||
#define AR71XX_DDR_REG_PCI_WIN2		0x84
 | 
					 | 
				
			||||||
#define AR71XX_DDR_REG_PCI_WIN3		0x88
 | 
					 | 
				
			||||||
#define AR71XX_DDR_REG_PCI_WIN4		0x8c
 | 
					 | 
				
			||||||
#define AR71XX_DDR_REG_PCI_WIN5		0x90
 | 
					 | 
				
			||||||
#define AR71XX_DDR_REG_PCI_WIN6		0x94
 | 
					 | 
				
			||||||
#define AR71XX_DDR_REG_PCI_WIN7		0x98
 | 
					 | 
				
			||||||
#define AR71XX_DDR_REG_FLUSH_GE0	0x9c
 | 
					 | 
				
			||||||
#define AR71XX_DDR_REG_FLUSH_GE1	0xa0
 | 
					 | 
				
			||||||
#define AR71XX_DDR_REG_FLUSH_USB	0xa4
 | 
					 | 
				
			||||||
#define AR71XX_DDR_REG_FLUSH_PCI	0xa8
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR724X_DDR_REG_FLUSH_GE0	0x7c
 | 
					 | 
				
			||||||
#define AR724X_DDR_REG_FLUSH_GE1	0x80
 | 
					 | 
				
			||||||
#define AR724X_DDR_REG_FLUSH_USB	0x84
 | 
					 | 
				
			||||||
#define AR724X_DDR_REG_FLUSH_PCIE	0x88
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR913X_DDR_REG_FLUSH_GE0	0x7c
 | 
					 | 
				
			||||||
#define AR913X_DDR_REG_FLUSH_GE1	0x80
 | 
					 | 
				
			||||||
#define AR913X_DDR_REG_FLUSH_USB	0x84
 | 
					 | 
				
			||||||
#define AR913X_DDR_REG_FLUSH_WMAC	0x88
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR933X_DDR_REG_FLUSH_GE0	0x7c
 | 
					 | 
				
			||||||
#define AR933X_DDR_REG_FLUSH_GE1	0x80
 | 
					 | 
				
			||||||
#define AR933X_DDR_REG_FLUSH_USB	0x84
 | 
					 | 
				
			||||||
#define AR933X_DDR_REG_FLUSH_WMAC	0x88
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR934X_DDR_REG_FLUSH_GE0	0x9c
 | 
					 | 
				
			||||||
#define AR934X_DDR_REG_FLUSH_GE1	0xa0
 | 
					 | 
				
			||||||
#define AR934X_DDR_REG_FLUSH_USB	0xa4
 | 
					 | 
				
			||||||
#define AR934X_DDR_REG_FLUSH_PCIE	0xa8
 | 
					 | 
				
			||||||
#define AR934X_DDR_REG_FLUSH_WMAC	0xac
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * PLL block
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#define AR71XX_PLL_REG_CPU_CONFIG	0x00
 | 
					 | 
				
			||||||
#define AR71XX_PLL_REG_SEC_CONFIG	0x04
 | 
					 | 
				
			||||||
#define AR71XX_PLL_REG_ETH0_INT_CLOCK	0x10
 | 
					 | 
				
			||||||
#define AR71XX_PLL_REG_ETH1_INT_CLOCK	0x14
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR71XX_PLL_DIV_SHIFT		3
 | 
					 | 
				
			||||||
#define AR71XX_PLL_DIV_MASK		0x1f
 | 
					 | 
				
			||||||
#define AR71XX_CPU_DIV_SHIFT		16
 | 
					 | 
				
			||||||
#define AR71XX_CPU_DIV_MASK		0x3
 | 
					 | 
				
			||||||
#define AR71XX_DDR_DIV_SHIFT		18
 | 
					 | 
				
			||||||
#define AR71XX_DDR_DIV_MASK		0x3
 | 
					 | 
				
			||||||
#define AR71XX_AHB_DIV_SHIFT		20
 | 
					 | 
				
			||||||
#define AR71XX_AHB_DIV_MASK		0x7
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR71XX_ETH0_PLL_SHIFT		17
 | 
					 | 
				
			||||||
#define AR71XX_ETH1_PLL_SHIFT		19
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR724X_PLL_REG_CPU_CONFIG	0x00
 | 
					 | 
				
			||||||
#define AR724X_PLL_REG_PCIE_CONFIG	0x18
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR724X_PLL_DIV_SHIFT		0
 | 
					 | 
				
			||||||
#define AR724X_PLL_DIV_MASK		0x3ff
 | 
					 | 
				
			||||||
#define AR724X_PLL_REF_DIV_SHIFT	10
 | 
					 | 
				
			||||||
#define AR724X_PLL_REF_DIV_MASK		0xf
 | 
					 | 
				
			||||||
#define AR724X_AHB_DIV_SHIFT		19
 | 
					 | 
				
			||||||
#define AR724X_AHB_DIV_MASK		0x1
 | 
					 | 
				
			||||||
#define AR724X_DDR_DIV_SHIFT		22
 | 
					 | 
				
			||||||
#define AR724X_DDR_DIV_MASK		0x3
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR7242_PLL_REG_ETH0_INT_CLOCK	0x2c
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR913X_PLL_REG_CPU_CONFIG	0x00
 | 
					 | 
				
			||||||
#define AR913X_PLL_REG_ETH_CONFIG	0x04
 | 
					 | 
				
			||||||
#define AR913X_PLL_REG_ETH0_INT_CLOCK	0x14
 | 
					 | 
				
			||||||
#define AR913X_PLL_REG_ETH1_INT_CLOCK	0x18
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR913X_PLL_DIV_SHIFT		0
 | 
					 | 
				
			||||||
#define AR913X_PLL_DIV_MASK		0x3ff
 | 
					 | 
				
			||||||
#define AR913X_DDR_DIV_SHIFT		22
 | 
					 | 
				
			||||||
#define AR913X_DDR_DIV_MASK		0x3
 | 
					 | 
				
			||||||
#define AR913X_AHB_DIV_SHIFT		19
 | 
					 | 
				
			||||||
#define AR913X_AHB_DIV_MASK		0x1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR913X_ETH0_PLL_SHIFT		20
 | 
					 | 
				
			||||||
#define AR913X_ETH1_PLL_SHIFT		22
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR933X_PLL_CPU_CONFIG_REG	0x00
 | 
					 | 
				
			||||||
#define AR933X_PLL_CLOCK_CTRL_REG	0x08
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR933X_PLL_CPU_CONFIG_NINT_SHIFT	10
 | 
					 | 
				
			||||||
#define AR933X_PLL_CPU_CONFIG_NINT_MASK		0x3f
 | 
					 | 
				
			||||||
#define AR933X_PLL_CPU_CONFIG_REFDIV_SHIFT	16
 | 
					 | 
				
			||||||
#define AR933X_PLL_CPU_CONFIG_REFDIV_MASK	0x1f
 | 
					 | 
				
			||||||
#define AR933X_PLL_CPU_CONFIG_OUTDIV_SHIFT	23
 | 
					 | 
				
			||||||
#define AR933X_PLL_CPU_CONFIG_OUTDIV_MASK	0x7
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR933X_PLL_CLOCK_CTRL_BYPASS		BIT(2)
 | 
					 | 
				
			||||||
#define AR933X_PLL_CLOCK_CTRL_CPU_DIV_SHIFT	5
 | 
					 | 
				
			||||||
#define AR933X_PLL_CLOCK_CTRL_CPU_DIV_MASK	0x3
 | 
					 | 
				
			||||||
#define AR933X_PLL_CLOCK_CTRL_DDR_DIV_SHIFT	10
 | 
					 | 
				
			||||||
#define AR933X_PLL_CLOCK_CTRL_DDR_DIV_MASK	0x3
 | 
					 | 
				
			||||||
#define AR933X_PLL_CLOCK_CTRL_AHB_DIV_SHIFT	15
 | 
					 | 
				
			||||||
#define AR933X_PLL_CLOCK_CTRL_AHB_DIV_MASK	0x7
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR934X_PLL_CPU_CONFIG_REG		0x00
 | 
					 | 
				
			||||||
#define AR934X_PLL_DDR_CONFIG_REG		0x04
 | 
					 | 
				
			||||||
#define AR934X_PLL_CPU_DDR_CLK_CTRL_REG		0x08
 | 
					 | 
				
			||||||
#define AR934X_PLL_ETH_XMII_CONTROL_REG		0x2c
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR934X_PLL_CPU_CONFIG_NFRAC_SHIFT	0
 | 
					 | 
				
			||||||
#define AR934X_PLL_CPU_CONFIG_NFRAC_MASK	0x3f
 | 
					 | 
				
			||||||
#define AR934X_PLL_CPU_CONFIG_NINT_SHIFT	6
 | 
					 | 
				
			||||||
#define AR934X_PLL_CPU_CONFIG_NINT_MASK		0x3f
 | 
					 | 
				
			||||||
#define AR934X_PLL_CPU_CONFIG_REFDIV_SHIFT	12
 | 
					 | 
				
			||||||
#define AR934X_PLL_CPU_CONFIG_REFDIV_MASK	0x1f
 | 
					 | 
				
			||||||
#define AR934X_PLL_CPU_CONFIG_OUTDIV_SHIFT	19
 | 
					 | 
				
			||||||
#define AR934X_PLL_CPU_CONFIG_OUTDIV_MASK	0x3
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR934X_PLL_DDR_CONFIG_NFRAC_SHIFT	0
 | 
					 | 
				
			||||||
#define AR934X_PLL_DDR_CONFIG_NFRAC_MASK	0x3ff
 | 
					 | 
				
			||||||
#define AR934X_PLL_DDR_CONFIG_NINT_SHIFT	10
 | 
					 | 
				
			||||||
#define AR934X_PLL_DDR_CONFIG_NINT_MASK		0x3f
 | 
					 | 
				
			||||||
#define AR934X_PLL_DDR_CONFIG_REFDIV_SHIFT	16
 | 
					 | 
				
			||||||
#define AR934X_PLL_DDR_CONFIG_REFDIV_MASK	0x1f
 | 
					 | 
				
			||||||
#define AR934X_PLL_DDR_CONFIG_OUTDIV_SHIFT	23
 | 
					 | 
				
			||||||
#define AR934X_PLL_DDR_CONFIG_OUTDIV_MASK	0x7
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR934X_PLL_CPU_DDR_CLK_CTRL_CPU_PLL_BYPASS	BIT(2)
 | 
					 | 
				
			||||||
#define AR934X_PLL_CPU_DDR_CLK_CTRL_DDR_PLL_BYPASS	BIT(3)
 | 
					 | 
				
			||||||
#define AR934X_PLL_CPU_DDR_CLK_CTRL_AHB_PLL_BYPASS	BIT(4)
 | 
					 | 
				
			||||||
#define AR934X_PLL_CPU_DDR_CLK_CTRL_CPU_POST_DIV_SHIFT	5
 | 
					 | 
				
			||||||
#define AR934X_PLL_CPU_DDR_CLK_CTRL_CPU_POST_DIV_MASK	0x1f
 | 
					 | 
				
			||||||
#define AR934X_PLL_CPU_DDR_CLK_CTRL_DDR_POST_DIV_SHIFT	10
 | 
					 | 
				
			||||||
#define AR934X_PLL_CPU_DDR_CLK_CTRL_DDR_POST_DIV_MASK	0x1f
 | 
					 | 
				
			||||||
#define AR934X_PLL_CPU_DDR_CLK_CTRL_AHB_POST_DIV_SHIFT	15
 | 
					 | 
				
			||||||
#define AR934X_PLL_CPU_DDR_CLK_CTRL_AHB_POST_DIV_MASK	0x1f
 | 
					 | 
				
			||||||
#define AR934X_PLL_CPU_DDR_CLK_CTRL_CPUCLK_FROM_CPUPLL	BIT(20)
 | 
					 | 
				
			||||||
#define AR934X_PLL_CPU_DDR_CLK_CTRL_DDRCLK_FROM_DDRPLL	BIT(21)
 | 
					 | 
				
			||||||
#define AR934X_PLL_CPU_DDR_CLK_CTRL_AHBCLK_FROM_DDRPLL	BIT(24)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define QCA955X_PLL_CPU_CONFIG_REG		0x00
 | 
					 | 
				
			||||||
#define QCA955X_PLL_DDR_CONFIG_REG		0x04
 | 
					 | 
				
			||||||
#define QCA955X_PLL_CLK_CTRL_REG		0x08
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define QCA955X_PLL_CPU_CONFIG_NFRAC_SHIFT	0
 | 
					 | 
				
			||||||
#define QCA955X_PLL_CPU_CONFIG_NFRAC_MASK	0x3f
 | 
					 | 
				
			||||||
#define QCA955X_PLL_CPU_CONFIG_NINT_SHIFT	6
 | 
					 | 
				
			||||||
#define QCA955X_PLL_CPU_CONFIG_NINT_MASK	0x3f
 | 
					 | 
				
			||||||
#define QCA955X_PLL_CPU_CONFIG_REFDIV_SHIFT	12
 | 
					 | 
				
			||||||
#define QCA955X_PLL_CPU_CONFIG_REFDIV_MASK	0x1f
 | 
					 | 
				
			||||||
#define QCA955X_PLL_CPU_CONFIG_OUTDIV_SHIFT	19
 | 
					 | 
				
			||||||
#define QCA955X_PLL_CPU_CONFIG_OUTDIV_MASK	0x3
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define QCA955X_PLL_DDR_CONFIG_NFRAC_SHIFT	0
 | 
					 | 
				
			||||||
#define QCA955X_PLL_DDR_CONFIG_NFRAC_MASK	0x3ff
 | 
					 | 
				
			||||||
#define QCA955X_PLL_DDR_CONFIG_NINT_SHIFT	10
 | 
					 | 
				
			||||||
#define QCA955X_PLL_DDR_CONFIG_NINT_MASK	0x3f
 | 
					 | 
				
			||||||
#define QCA955X_PLL_DDR_CONFIG_REFDIV_SHIFT	16
 | 
					 | 
				
			||||||
#define QCA955X_PLL_DDR_CONFIG_REFDIV_MASK	0x1f
 | 
					 | 
				
			||||||
#define QCA955X_PLL_DDR_CONFIG_OUTDIV_SHIFT	23
 | 
					 | 
				
			||||||
#define QCA955X_PLL_DDR_CONFIG_OUTDIV_MASK	0x7
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define QCA955X_PLL_CLK_CTRL_CPU_PLL_BYPASS		BIT(2)
 | 
					 | 
				
			||||||
#define QCA955X_PLL_CLK_CTRL_DDR_PLL_BYPASS		BIT(3)
 | 
					 | 
				
			||||||
#define QCA955X_PLL_CLK_CTRL_AHB_PLL_BYPASS		BIT(4)
 | 
					 | 
				
			||||||
#define QCA955X_PLL_CLK_CTRL_CPU_POST_DIV_SHIFT		5
 | 
					 | 
				
			||||||
#define QCA955X_PLL_CLK_CTRL_CPU_POST_DIV_MASK		0x1f
 | 
					 | 
				
			||||||
#define QCA955X_PLL_CLK_CTRL_DDR_POST_DIV_SHIFT		10
 | 
					 | 
				
			||||||
#define QCA955X_PLL_CLK_CTRL_DDR_POST_DIV_MASK		0x1f
 | 
					 | 
				
			||||||
#define QCA955X_PLL_CLK_CTRL_AHB_POST_DIV_SHIFT		15
 | 
					 | 
				
			||||||
#define QCA955X_PLL_CLK_CTRL_AHB_POST_DIV_MASK		0x1f
 | 
					 | 
				
			||||||
#define QCA955X_PLL_CLK_CTRL_CPUCLK_FROM_CPUPLL		BIT(20)
 | 
					 | 
				
			||||||
#define QCA955X_PLL_CLK_CTRL_DDRCLK_FROM_DDRPLL		BIT(21)
 | 
					 | 
				
			||||||
#define QCA955X_PLL_CLK_CTRL_AHBCLK_FROM_DDRPLL		BIT(24)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * USB_CONFIG block
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#define AR71XX_USB_CTRL_REG_FLADJ	0x00
 | 
					 | 
				
			||||||
#define AR71XX_USB_CTRL_REG_CONFIG	0x04
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * RESET block
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#define AR71XX_RESET_REG_TIMER			0x00
 | 
					 | 
				
			||||||
#define AR71XX_RESET_REG_TIMER_RELOAD		0x04
 | 
					 | 
				
			||||||
#define AR71XX_RESET_REG_WDOG_CTRL		0x08
 | 
					 | 
				
			||||||
#define AR71XX_RESET_REG_WDOG			0x0c
 | 
					 | 
				
			||||||
#define AR71XX_RESET_REG_MISC_INT_STATUS	0x10
 | 
					 | 
				
			||||||
#define AR71XX_RESET_REG_MISC_INT_ENABLE	0x14
 | 
					 | 
				
			||||||
#define AR71XX_RESET_REG_PCI_INT_STATUS		0x18
 | 
					 | 
				
			||||||
#define AR71XX_RESET_REG_PCI_INT_ENABLE		0x1c
 | 
					 | 
				
			||||||
#define AR71XX_RESET_REG_GLOBAL_INT_STATUS	0x20
 | 
					 | 
				
			||||||
#define AR71XX_RESET_REG_RESET_MODULE		0x24
 | 
					 | 
				
			||||||
#define AR71XX_RESET_REG_PERFC_CTRL		0x2c
 | 
					 | 
				
			||||||
#define AR71XX_RESET_REG_PERFC0			0x30
 | 
					 | 
				
			||||||
#define AR71XX_RESET_REG_PERFC1			0x34
 | 
					 | 
				
			||||||
#define AR71XX_RESET_REG_REV_ID			0x90
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR913X_RESET_REG_GLOBAL_INT_STATUS	0x18
 | 
					 | 
				
			||||||
#define AR913X_RESET_REG_RESET_MODULE		0x1c
 | 
					 | 
				
			||||||
#define AR913X_RESET_REG_PERF_CTRL		0x20
 | 
					 | 
				
			||||||
#define AR913X_RESET_REG_PERFC0			0x24
 | 
					 | 
				
			||||||
#define AR913X_RESET_REG_PERFC1			0x28
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR724X_RESET_REG_RESET_MODULE		0x1c
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR933X_RESET_REG_RESET_MODULE		0x1c
 | 
					 | 
				
			||||||
#define AR933X_RESET_REG_BOOTSTRAP		0xac
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR934X_RESET_REG_RESET_MODULE		0x1c
 | 
					 | 
				
			||||||
#define AR934X_RESET_REG_BOOTSTRAP		0xb0
 | 
					 | 
				
			||||||
#define AR934X_RESET_REG_PCIE_WMAC_INT_STATUS	0xac
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define QCA955X_RESET_REG_BOOTSTRAP		0xb0
 | 
					 | 
				
			||||||
#define QCA955X_RESET_REG_EXT_INT_STATUS	0xac
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define MISC_INT_ETHSW			BIT(12)
 | 
					 | 
				
			||||||
#define MISC_INT_TIMER4			BIT(10)
 | 
					 | 
				
			||||||
#define MISC_INT_TIMER3			BIT(9)
 | 
					 | 
				
			||||||
#define MISC_INT_TIMER2			BIT(8)
 | 
					 | 
				
			||||||
#define MISC_INT_DMA			BIT(7)
 | 
					 | 
				
			||||||
#define MISC_INT_OHCI			BIT(6)
 | 
					 | 
				
			||||||
#define MISC_INT_PERFC			BIT(5)
 | 
					 | 
				
			||||||
#define MISC_INT_WDOG			BIT(4)
 | 
					 | 
				
			||||||
#define MISC_INT_UART			BIT(3)
 | 
					 | 
				
			||||||
#define MISC_INT_GPIO			BIT(2)
 | 
					 | 
				
			||||||
#define MISC_INT_ERROR			BIT(1)
 | 
					 | 
				
			||||||
#define MISC_INT_TIMER			BIT(0)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR71XX_RESET_EXTERNAL		BIT(28)
 | 
					 | 
				
			||||||
#define AR71XX_RESET_FULL_CHIP		BIT(24)
 | 
					 | 
				
			||||||
#define AR71XX_RESET_CPU_NMI		BIT(21)
 | 
					 | 
				
			||||||
#define AR71XX_RESET_CPU_COLD		BIT(20)
 | 
					 | 
				
			||||||
#define AR71XX_RESET_DMA		BIT(19)
 | 
					 | 
				
			||||||
#define AR71XX_RESET_SLIC		BIT(18)
 | 
					 | 
				
			||||||
#define AR71XX_RESET_STEREO		BIT(17)
 | 
					 | 
				
			||||||
#define AR71XX_RESET_DDR		BIT(16)
 | 
					 | 
				
			||||||
#define AR71XX_RESET_GE1_MAC		BIT(13)
 | 
					 | 
				
			||||||
#define AR71XX_RESET_GE1_PHY		BIT(12)
 | 
					 | 
				
			||||||
#define AR71XX_RESET_USBSUS_OVERRIDE	BIT(10)
 | 
					 | 
				
			||||||
#define AR71XX_RESET_GE0_MAC		BIT(9)
 | 
					 | 
				
			||||||
#define AR71XX_RESET_GE0_PHY		BIT(8)
 | 
					 | 
				
			||||||
#define AR71XX_RESET_USB_OHCI_DLL	BIT(6)
 | 
					 | 
				
			||||||
#define AR71XX_RESET_USB_HOST		BIT(5)
 | 
					 | 
				
			||||||
#define AR71XX_RESET_USB_PHY		BIT(4)
 | 
					 | 
				
			||||||
#define AR71XX_RESET_PCI_BUS		BIT(1)
 | 
					 | 
				
			||||||
#define AR71XX_RESET_PCI_CORE		BIT(0)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR7240_RESET_USB_HOST		BIT(5)
 | 
					 | 
				
			||||||
#define AR7240_RESET_OHCI_DLL		BIT(3)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR724X_RESET_GE1_MDIO		BIT(23)
 | 
					 | 
				
			||||||
#define AR724X_RESET_GE0_MDIO		BIT(22)
 | 
					 | 
				
			||||||
#define AR724X_RESET_PCIE_PHY_SERIAL	BIT(10)
 | 
					 | 
				
			||||||
#define AR724X_RESET_PCIE_PHY		BIT(7)
 | 
					 | 
				
			||||||
#define AR724X_RESET_PCIE		BIT(6)
 | 
					 | 
				
			||||||
#define AR724X_RESET_USB_HOST		BIT(5)
 | 
					 | 
				
			||||||
#define AR724X_RESET_USB_PHY		BIT(4)
 | 
					 | 
				
			||||||
#define AR724X_RESET_USBSUS_OVERRIDE	BIT(3)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR913X_RESET_AMBA2WMAC		BIT(22)
 | 
					 | 
				
			||||||
#define AR913X_RESET_USBSUS_OVERRIDE	BIT(10)
 | 
					 | 
				
			||||||
#define AR913X_RESET_USB_HOST		BIT(5)
 | 
					 | 
				
			||||||
#define AR913X_RESET_USB_PHY		BIT(4)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR933X_RESET_GE1_MDIO		BIT(23)
 | 
					 | 
				
			||||||
#define AR933X_RESET_GE0_MDIO		BIT(22)
 | 
					 | 
				
			||||||
#define AR933X_RESET_GE1_MAC		BIT(13)
 | 
					 | 
				
			||||||
#define AR933X_RESET_WMAC		BIT(11)
 | 
					 | 
				
			||||||
#define AR933X_RESET_GE0_MAC		BIT(9)
 | 
					 | 
				
			||||||
#define AR933X_RESET_USB_HOST		BIT(5)
 | 
					 | 
				
			||||||
#define AR933X_RESET_USB_PHY		BIT(4)
 | 
					 | 
				
			||||||
#define AR933X_RESET_USBSUS_OVERRIDE	BIT(3)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR934X_RESET_HOST		BIT(31)
 | 
					 | 
				
			||||||
#define AR934X_RESET_SLIC		BIT(30)
 | 
					 | 
				
			||||||
#define AR934X_RESET_HDMA		BIT(29)
 | 
					 | 
				
			||||||
#define AR934X_RESET_EXTERNAL		BIT(28)
 | 
					 | 
				
			||||||
#define AR934X_RESET_RTC		BIT(27)
 | 
					 | 
				
			||||||
#define AR934X_RESET_PCIE_EP_INT	BIT(26)
 | 
					 | 
				
			||||||
#define AR934X_RESET_CHKSUM_ACC		BIT(25)
 | 
					 | 
				
			||||||
#define AR934X_RESET_FULL_CHIP		BIT(24)
 | 
					 | 
				
			||||||
#define AR934X_RESET_GE1_MDIO		BIT(23)
 | 
					 | 
				
			||||||
#define AR934X_RESET_GE0_MDIO		BIT(22)
 | 
					 | 
				
			||||||
#define AR934X_RESET_CPU_NMI		BIT(21)
 | 
					 | 
				
			||||||
#define AR934X_RESET_CPU_COLD		BIT(20)
 | 
					 | 
				
			||||||
#define AR934X_RESET_HOST_RESET_INT	BIT(19)
 | 
					 | 
				
			||||||
#define AR934X_RESET_PCIE_EP		BIT(18)
 | 
					 | 
				
			||||||
#define AR934X_RESET_UART1		BIT(17)
 | 
					 | 
				
			||||||
#define AR934X_RESET_DDR		BIT(16)
 | 
					 | 
				
			||||||
#define AR934X_RESET_USB_PHY_PLL_PWD_EXT BIT(15)
 | 
					 | 
				
			||||||
#define AR934X_RESET_NANDF		BIT(14)
 | 
					 | 
				
			||||||
#define AR934X_RESET_GE1_MAC		BIT(13)
 | 
					 | 
				
			||||||
#define AR934X_RESET_ETH_SWITCH_ANALOG	BIT(12)
 | 
					 | 
				
			||||||
#define AR934X_RESET_USB_PHY_ANALOG	BIT(11)
 | 
					 | 
				
			||||||
#define AR934X_RESET_HOST_DMA_INT	BIT(10)
 | 
					 | 
				
			||||||
#define AR934X_RESET_GE0_MAC		BIT(9)
 | 
					 | 
				
			||||||
#define AR934X_RESET_ETH_SWITCH		BIT(8)
 | 
					 | 
				
			||||||
#define AR934X_RESET_PCIE_PHY		BIT(7)
 | 
					 | 
				
			||||||
#define AR934X_RESET_PCIE		BIT(6)
 | 
					 | 
				
			||||||
#define AR934X_RESET_USB_HOST		BIT(5)
 | 
					 | 
				
			||||||
#define AR934X_RESET_USB_PHY		BIT(4)
 | 
					 | 
				
			||||||
#define AR934X_RESET_USBSUS_OVERRIDE	BIT(3)
 | 
					 | 
				
			||||||
#define AR934X_RESET_LUT		BIT(2)
 | 
					 | 
				
			||||||
#define AR934X_RESET_MBOX		BIT(1)
 | 
					 | 
				
			||||||
#define AR934X_RESET_I2S		BIT(0)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR933X_BOOTSTRAP_MDIO_GPIO_EN	BIT(18)
 | 
					 | 
				
			||||||
#define AR933X_BOOTSTRAP_EEPBUSY	BIT(4)
 | 
					 | 
				
			||||||
#define AR933X_BOOTSTRAP_REF_CLK_40	BIT(0)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR934X_BOOTSTRAP_SW_OPTION8	BIT(23)
 | 
					 | 
				
			||||||
#define AR934X_BOOTSTRAP_SW_OPTION7	BIT(22)
 | 
					 | 
				
			||||||
#define AR934X_BOOTSTRAP_SW_OPTION6	BIT(21)
 | 
					 | 
				
			||||||
#define AR934X_BOOTSTRAP_SW_OPTION5	BIT(20)
 | 
					 | 
				
			||||||
#define AR934X_BOOTSTRAP_SW_OPTION4	BIT(19)
 | 
					 | 
				
			||||||
#define AR934X_BOOTSTRAP_SW_OPTION3	BIT(18)
 | 
					 | 
				
			||||||
#define AR934X_BOOTSTRAP_SW_OPTION2	BIT(17)
 | 
					 | 
				
			||||||
#define AR934X_BOOTSTRAP_SW_OPTION1	BIT(16)
 | 
					 | 
				
			||||||
#define AR934X_BOOTSTRAP_USB_MODE_DEVICE BIT(7)
 | 
					 | 
				
			||||||
#define AR934X_BOOTSTRAP_PCIE_RC	BIT(6)
 | 
					 | 
				
			||||||
#define AR934X_BOOTSTRAP_EJTAG_MODE	BIT(5)
 | 
					 | 
				
			||||||
#define AR934X_BOOTSTRAP_REF_CLK_40	BIT(4)
 | 
					 | 
				
			||||||
#define AR934X_BOOTSTRAP_BOOT_FROM_SPI	BIT(2)
 | 
					 | 
				
			||||||
#define AR934X_BOOTSTRAP_SDRAM_DISABLED	BIT(1)
 | 
					 | 
				
			||||||
#define AR934X_BOOTSTRAP_DDR1		BIT(0)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define QCA955X_BOOTSTRAP_REF_CLK_40	BIT(4)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR934X_PCIE_WMAC_INT_WMAC_MISC		BIT(0)
 | 
					 | 
				
			||||||
#define AR934X_PCIE_WMAC_INT_WMAC_TX		BIT(1)
 | 
					 | 
				
			||||||
#define AR934X_PCIE_WMAC_INT_WMAC_RXLP		BIT(2)
 | 
					 | 
				
			||||||
#define AR934X_PCIE_WMAC_INT_WMAC_RXHP		BIT(3)
 | 
					 | 
				
			||||||
#define AR934X_PCIE_WMAC_INT_PCIE_RC		BIT(4)
 | 
					 | 
				
			||||||
#define AR934X_PCIE_WMAC_INT_PCIE_RC0		BIT(5)
 | 
					 | 
				
			||||||
#define AR934X_PCIE_WMAC_INT_PCIE_RC1		BIT(6)
 | 
					 | 
				
			||||||
#define AR934X_PCIE_WMAC_INT_PCIE_RC2		BIT(7)
 | 
					 | 
				
			||||||
#define AR934X_PCIE_WMAC_INT_PCIE_RC3		BIT(8)
 | 
					 | 
				
			||||||
#define AR934X_PCIE_WMAC_INT_WMAC_ALL \
 | 
					 | 
				
			||||||
	(AR934X_PCIE_WMAC_INT_WMAC_MISC | AR934X_PCIE_WMAC_INT_WMAC_TX | \
 | 
					 | 
				
			||||||
	 AR934X_PCIE_WMAC_INT_WMAC_RXLP | AR934X_PCIE_WMAC_INT_WMAC_RXHP)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR934X_PCIE_WMAC_INT_PCIE_ALL \
 | 
					 | 
				
			||||||
	(AR934X_PCIE_WMAC_INT_PCIE_RC | AR934X_PCIE_WMAC_INT_PCIE_RC0 | \
 | 
					 | 
				
			||||||
	 AR934X_PCIE_WMAC_INT_PCIE_RC1 | AR934X_PCIE_WMAC_INT_PCIE_RC2 | \
 | 
					 | 
				
			||||||
	 AR934X_PCIE_WMAC_INT_PCIE_RC3)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define QCA955X_EXT_INT_WMAC_MISC		BIT(0)
 | 
					 | 
				
			||||||
#define QCA955X_EXT_INT_WMAC_TX			BIT(1)
 | 
					 | 
				
			||||||
#define QCA955X_EXT_INT_WMAC_RXLP		BIT(2)
 | 
					 | 
				
			||||||
#define QCA955X_EXT_INT_WMAC_RXHP		BIT(3)
 | 
					 | 
				
			||||||
#define QCA955X_EXT_INT_PCIE_RC1		BIT(4)
 | 
					 | 
				
			||||||
#define QCA955X_EXT_INT_PCIE_RC1_INT0		BIT(5)
 | 
					 | 
				
			||||||
#define QCA955X_EXT_INT_PCIE_RC1_INT1		BIT(6)
 | 
					 | 
				
			||||||
#define QCA955X_EXT_INT_PCIE_RC1_INT2		BIT(7)
 | 
					 | 
				
			||||||
#define QCA955X_EXT_INT_PCIE_RC1_INT3		BIT(8)
 | 
					 | 
				
			||||||
#define QCA955X_EXT_INT_PCIE_RC2		BIT(12)
 | 
					 | 
				
			||||||
#define QCA955X_EXT_INT_PCIE_RC2_INT0		BIT(13)
 | 
					 | 
				
			||||||
#define QCA955X_EXT_INT_PCIE_RC2_INT1		BIT(14)
 | 
					 | 
				
			||||||
#define QCA955X_EXT_INT_PCIE_RC2_INT2		BIT(15)
 | 
					 | 
				
			||||||
#define QCA955X_EXT_INT_PCIE_RC2_INT3		BIT(16)
 | 
					 | 
				
			||||||
#define QCA955X_EXT_INT_USB1			BIT(24)
 | 
					 | 
				
			||||||
#define QCA955X_EXT_INT_USB2			BIT(28)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define QCA955X_EXT_INT_WMAC_ALL \
 | 
					 | 
				
			||||||
	(QCA955X_EXT_INT_WMAC_MISC | QCA955X_EXT_INT_WMAC_TX | \
 | 
					 | 
				
			||||||
	 QCA955X_EXT_INT_WMAC_RXLP | QCA955X_EXT_INT_WMAC_RXHP)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define QCA955X_EXT_INT_PCIE_RC1_ALL \
 | 
					 | 
				
			||||||
	(QCA955X_EXT_INT_PCIE_RC1 | QCA955X_EXT_INT_PCIE_RC1_INT0 | \
 | 
					 | 
				
			||||||
	 QCA955X_EXT_INT_PCIE_RC1_INT1 | QCA955X_EXT_INT_PCIE_RC1_INT2 | \
 | 
					 | 
				
			||||||
	 QCA955X_EXT_INT_PCIE_RC1_INT3)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define QCA955X_EXT_INT_PCIE_RC2_ALL \
 | 
					 | 
				
			||||||
	(QCA955X_EXT_INT_PCIE_RC2 | QCA955X_EXT_INT_PCIE_RC2_INT0 | \
 | 
					 | 
				
			||||||
	 QCA955X_EXT_INT_PCIE_RC2_INT1 | QCA955X_EXT_INT_PCIE_RC2_INT2 | \
 | 
					 | 
				
			||||||
	 QCA955X_EXT_INT_PCIE_RC2_INT3)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define REV_ID_MAJOR_MASK		0xfff0
 | 
					 | 
				
			||||||
#define REV_ID_MAJOR_AR71XX		0x00a0
 | 
					 | 
				
			||||||
#define REV_ID_MAJOR_AR913X		0x00b0
 | 
					 | 
				
			||||||
#define REV_ID_MAJOR_AR7240		0x00c0
 | 
					 | 
				
			||||||
#define REV_ID_MAJOR_AR7241		0x0100
 | 
					 | 
				
			||||||
#define REV_ID_MAJOR_AR7242		0x1100
 | 
					 | 
				
			||||||
#define REV_ID_MAJOR_AR9330		0x0110
 | 
					 | 
				
			||||||
#define REV_ID_MAJOR_AR9331		0x1110
 | 
					 | 
				
			||||||
#define REV_ID_MAJOR_AR9341		0x0120
 | 
					 | 
				
			||||||
#define REV_ID_MAJOR_AR9342		0x1120
 | 
					 | 
				
			||||||
#define REV_ID_MAJOR_AR9344		0x2120
 | 
					 | 
				
			||||||
#define REV_ID_MAJOR_QCA9558		0x1130
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR71XX_REV_ID_MINOR_MASK	0x3
 | 
					 | 
				
			||||||
#define AR71XX_REV_ID_MINOR_AR7130	0x0
 | 
					 | 
				
			||||||
#define AR71XX_REV_ID_MINOR_AR7141	0x1
 | 
					 | 
				
			||||||
#define AR71XX_REV_ID_MINOR_AR7161	0x2
 | 
					 | 
				
			||||||
#define AR71XX_REV_ID_REVISION_MASK	0x3
 | 
					 | 
				
			||||||
#define AR71XX_REV_ID_REVISION_SHIFT	2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR913X_REV_ID_MINOR_MASK	0x3
 | 
					 | 
				
			||||||
#define AR913X_REV_ID_MINOR_AR9130	0x0
 | 
					 | 
				
			||||||
#define AR913X_REV_ID_MINOR_AR9132	0x1
 | 
					 | 
				
			||||||
#define AR913X_REV_ID_REVISION_MASK	0x3
 | 
					 | 
				
			||||||
#define AR913X_REV_ID_REVISION_SHIFT	2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR933X_REV_ID_REVISION_MASK	0x3
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR724X_REV_ID_REVISION_MASK	0x3
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR934X_REV_ID_REVISION_MASK     0xf
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR944X_REV_ID_REVISION_MASK	0xf
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * SPI block
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#define AR71XX_SPI_REG_FS	0x00	/* Function Select */
 | 
					 | 
				
			||||||
#define AR71XX_SPI_REG_CTRL	0x04	/* SPI Control */
 | 
					 | 
				
			||||||
#define AR71XX_SPI_REG_IOC	0x08	/* SPI I/O Control */
 | 
					 | 
				
			||||||
#define AR71XX_SPI_REG_RDS	0x0c	/* Read Data Shift */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR71XX_SPI_FS_GPIO	BIT(0)	/* Enable GPIO mode */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR71XX_SPI_CTRL_RD	BIT(6)	/* Remap Disable */
 | 
					 | 
				
			||||||
#define AR71XX_SPI_CTRL_DIV_MASK 0x3f
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR71XX_SPI_IOC_DO	BIT(0)	/* Data Out pin */
 | 
					 | 
				
			||||||
#define AR71XX_SPI_IOC_CLK	BIT(8)	/* CLK pin */
 | 
					 | 
				
			||||||
#define AR71XX_SPI_IOC_CS(n)	BIT(16 + (n))
 | 
					 | 
				
			||||||
#define AR71XX_SPI_IOC_CS0	AR71XX_SPI_IOC_CS(0)
 | 
					 | 
				
			||||||
#define AR71XX_SPI_IOC_CS1	AR71XX_SPI_IOC_CS(1)
 | 
					 | 
				
			||||||
#define AR71XX_SPI_IOC_CS2	AR71XX_SPI_IOC_CS(2)
 | 
					 | 
				
			||||||
#define AR71XX_SPI_IOC_CS_ALL	(AR71XX_SPI_IOC_CS0 | AR71XX_SPI_IOC_CS1 | \
 | 
					 | 
				
			||||||
				 AR71XX_SPI_IOC_CS2)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * GPIO block
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#define AR71XX_GPIO_REG_OE		0x00
 | 
					 | 
				
			||||||
#define AR71XX_GPIO_REG_IN		0x04
 | 
					 | 
				
			||||||
#define AR71XX_GPIO_REG_OUT		0x08
 | 
					 | 
				
			||||||
#define AR71XX_GPIO_REG_SET		0x0c
 | 
					 | 
				
			||||||
#define AR71XX_GPIO_REG_CLEAR		0x10
 | 
					 | 
				
			||||||
#define AR71XX_GPIO_REG_INT_MODE	0x14
 | 
					 | 
				
			||||||
#define AR71XX_GPIO_REG_INT_TYPE	0x18
 | 
					 | 
				
			||||||
#define AR71XX_GPIO_REG_INT_POLARITY	0x1c
 | 
					 | 
				
			||||||
#define AR71XX_GPIO_REG_INT_PENDING	0x20
 | 
					 | 
				
			||||||
#define AR71XX_GPIO_REG_INT_ENABLE	0x24
 | 
					 | 
				
			||||||
#define AR71XX_GPIO_REG_FUNC		0x28
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR934X_GPIO_REG_OUT_FUNC0	0x2c
 | 
					 | 
				
			||||||
#define AR934X_GPIO_REG_OUT_FUNC1	0x30
 | 
					 | 
				
			||||||
#define AR934X_GPIO_REG_OUT_FUNC2	0x34
 | 
					 | 
				
			||||||
#define AR934X_GPIO_REG_OUT_FUNC3	0x38
 | 
					 | 
				
			||||||
#define AR934X_GPIO_REG_OUT_FUNC4	0x3c
 | 
					 | 
				
			||||||
#define AR934X_GPIO_REG_OUT_FUNC5	0x40
 | 
					 | 
				
			||||||
#define AR934X_GPIO_REG_FUNC		0x6c
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR71XX_GPIO_COUNT		16
 | 
					 | 
				
			||||||
#define AR724X_GPIO_COUNT		18
 | 
					 | 
				
			||||||
#define AR913X_GPIO_COUNT		22
 | 
					 | 
				
			||||||
#define AR933X_GPIO_COUNT		30
 | 
					 | 
				
			||||||
#define AR934X_GPIO_COUNT		23
 | 
					 | 
				
			||||||
#define QCA955X_GPIO_COUNT		24
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR71XX_GPIO_FUNC_STEREO_EN		BIT(17)
 | 
					 | 
				
			||||||
#define AR71XX_GPIO_FUNC_SLIC_EN		BIT(16)
 | 
					 | 
				
			||||||
#define AR71XX_GPIO_FUNC_SPI_CS2_EN		BIT(13)
 | 
					 | 
				
			||||||
#define AR71XX_GPIO_FUNC_SPI_CS1_EN		BIT(12)
 | 
					 | 
				
			||||||
#define AR71XX_GPIO_FUNC_UART_EN		BIT(8)
 | 
					 | 
				
			||||||
#define AR71XX_GPIO_FUNC_USB_OC_EN		BIT(4)
 | 
					 | 
				
			||||||
#define AR71XX_GPIO_FUNC_USB_CLK_EN		BIT(0)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR724X_GPIO_FUNC_GE0_MII_CLK_EN		BIT(19)
 | 
					 | 
				
			||||||
#define AR724X_GPIO_FUNC_SPI_EN			BIT(18)
 | 
					 | 
				
			||||||
#define AR724X_GPIO_FUNC_SPI_CS_EN2		BIT(14)
 | 
					 | 
				
			||||||
#define AR724X_GPIO_FUNC_SPI_CS_EN1		BIT(13)
 | 
					 | 
				
			||||||
#define AR724X_GPIO_FUNC_CLK_OBS5_EN		BIT(12)
 | 
					 | 
				
			||||||
#define AR724X_GPIO_FUNC_CLK_OBS4_EN		BIT(11)
 | 
					 | 
				
			||||||
#define AR724X_GPIO_FUNC_CLK_OBS3_EN		BIT(10)
 | 
					 | 
				
			||||||
#define AR724X_GPIO_FUNC_CLK_OBS2_EN		BIT(9)
 | 
					 | 
				
			||||||
#define AR724X_GPIO_FUNC_CLK_OBS1_EN		BIT(8)
 | 
					 | 
				
			||||||
#define AR724X_GPIO_FUNC_ETH_SWITCH_LED4_EN	BIT(7)
 | 
					 | 
				
			||||||
#define AR724X_GPIO_FUNC_ETH_SWITCH_LED3_EN	BIT(6)
 | 
					 | 
				
			||||||
#define AR724X_GPIO_FUNC_ETH_SWITCH_LED2_EN	BIT(5)
 | 
					 | 
				
			||||||
#define AR724X_GPIO_FUNC_ETH_SWITCH_LED1_EN	BIT(4)
 | 
					 | 
				
			||||||
#define AR724X_GPIO_FUNC_ETH_SWITCH_LED0_EN	BIT(3)
 | 
					 | 
				
			||||||
#define AR724X_GPIO_FUNC_UART_RTS_CTS_EN	BIT(2)
 | 
					 | 
				
			||||||
#define AR724X_GPIO_FUNC_UART_EN		BIT(1)
 | 
					 | 
				
			||||||
#define AR724X_GPIO_FUNC_JTAG_DISABLE		BIT(0)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR913X_GPIO_FUNC_WMAC_LED_EN		BIT(22)
 | 
					 | 
				
			||||||
#define AR913X_GPIO_FUNC_EXP_PORT_CS_EN		BIT(21)
 | 
					 | 
				
			||||||
#define AR913X_GPIO_FUNC_I2S_REFCLKEN		BIT(20)
 | 
					 | 
				
			||||||
#define AR913X_GPIO_FUNC_I2S_MCKEN		BIT(19)
 | 
					 | 
				
			||||||
#define AR913X_GPIO_FUNC_I2S1_EN		BIT(18)
 | 
					 | 
				
			||||||
#define AR913X_GPIO_FUNC_I2S0_EN		BIT(17)
 | 
					 | 
				
			||||||
#define AR913X_GPIO_FUNC_SLIC_EN		BIT(16)
 | 
					 | 
				
			||||||
#define AR913X_GPIO_FUNC_UART_RTSCTS_EN		BIT(9)
 | 
					 | 
				
			||||||
#define AR913X_GPIO_FUNC_UART_EN		BIT(8)
 | 
					 | 
				
			||||||
#define AR913X_GPIO_FUNC_USB_CLK_EN		BIT(4)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR933X_GPIO_FUNC_SPDIF2TCK		BIT(31)
 | 
					 | 
				
			||||||
#define AR933X_GPIO_FUNC_SPDIF_EN		BIT(30)
 | 
					 | 
				
			||||||
#define AR933X_GPIO_FUNC_I2SO_22_18_EN		BIT(29)
 | 
					 | 
				
			||||||
#define AR933X_GPIO_FUNC_I2S_MCK_EN		BIT(27)
 | 
					 | 
				
			||||||
#define AR933X_GPIO_FUNC_I2SO_EN		BIT(26)
 | 
					 | 
				
			||||||
#define AR933X_GPIO_FUNC_ETH_SWITCH_LED_DUPL	BIT(25)
 | 
					 | 
				
			||||||
#define AR933X_GPIO_FUNC_ETH_SWITCH_LED_COLL	BIT(24)
 | 
					 | 
				
			||||||
#define AR933X_GPIO_FUNC_ETH_SWITCH_LED_ACT	BIT(23)
 | 
					 | 
				
			||||||
#define AR933X_GPIO_FUNC_SPI_EN			BIT(18)
 | 
					 | 
				
			||||||
#define AR933X_GPIO_FUNC_SPI_CS_EN2		BIT(14)
 | 
					 | 
				
			||||||
#define AR933X_GPIO_FUNC_SPI_CS_EN1		BIT(13)
 | 
					 | 
				
			||||||
#define AR933X_GPIO_FUNC_ETH_SWITCH_LED4_EN	BIT(7)
 | 
					 | 
				
			||||||
#define AR933X_GPIO_FUNC_ETH_SWITCH_LED3_EN	BIT(6)
 | 
					 | 
				
			||||||
#define AR933X_GPIO_FUNC_ETH_SWITCH_LED2_EN	BIT(5)
 | 
					 | 
				
			||||||
#define AR933X_GPIO_FUNC_ETH_SWITCH_LED1_EN	BIT(4)
 | 
					 | 
				
			||||||
#define AR933X_GPIO_FUNC_ETH_SWITCH_LED0_EN	BIT(3)
 | 
					 | 
				
			||||||
#define AR933X_GPIO_FUNC_UART_RTS_CTS_EN	BIT(2)
 | 
					 | 
				
			||||||
#define AR933X_GPIO_FUNC_UART_EN		BIT(1)
 | 
					 | 
				
			||||||
#define AR933X_GPIO_FUNC_JTAG_DISABLE		BIT(0)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR934X_GPIO_FUNC_DDR_DQOE_EN	BIT(17)
 | 
					 | 
				
			||||||
#define AR934X_GPIO_FUNC_SPI_CS_1_EN	BIT(14)
 | 
					 | 
				
			||||||
#define AR934X_GPIO_FUNC_SPI_CS_0_EN	BIT(13)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR934X_GPIO_OUT_GPIO		0x00
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * MII_CTRL block
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#define AR71XX_MII_REG_MII0_CTRL	0x00
 | 
					 | 
				
			||||||
#define AR71XX_MII_REG_MII1_CTRL	0x04
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR71XX_MII_CTRL_IF_MASK		3
 | 
					 | 
				
			||||||
#define AR71XX_MII_CTRL_SPEED_SHIFT	4
 | 
					 | 
				
			||||||
#define AR71XX_MII_CTRL_SPEED_MASK	3
 | 
					 | 
				
			||||||
#define AR71XX_MII_CTRL_SPEED_10	0
 | 
					 | 
				
			||||||
#define AR71XX_MII_CTRL_SPEED_100	1
 | 
					 | 
				
			||||||
#define AR71XX_MII_CTRL_SPEED_1000	2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR71XX_MII0_CTRL_IF_GMII	0
 | 
					 | 
				
			||||||
#define AR71XX_MII0_CTRL_IF_MII		1
 | 
					 | 
				
			||||||
#define AR71XX_MII0_CTRL_IF_RGMII	2
 | 
					 | 
				
			||||||
#define AR71XX_MII0_CTRL_IF_RMII	3
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR71XX_MII1_CTRL_IF_RGMII	0
 | 
					 | 
				
			||||||
#define AR71XX_MII1_CTRL_IF_RMII	1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * AR933X GMAC interface
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#define AR933X_GMAC_REG_ETH_CFG		0x00
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR933X_ETH_CFG_RGMII_GE0	BIT(0)
 | 
					 | 
				
			||||||
#define AR933X_ETH_CFG_MII_GE0		BIT(1)
 | 
					 | 
				
			||||||
#define AR933X_ETH_CFG_GMII_GE0		BIT(2)
 | 
					 | 
				
			||||||
#define AR933X_ETH_CFG_MII_GE0_MASTER	BIT(3)
 | 
					 | 
				
			||||||
#define AR933X_ETH_CFG_MII_GE0_SLAVE	BIT(4)
 | 
					 | 
				
			||||||
#define AR933X_ETH_CFG_MII_GE0_ERR_EN	BIT(5)
 | 
					 | 
				
			||||||
#define AR933X_ETH_CFG_SW_PHY_SWAP	BIT(7)
 | 
					 | 
				
			||||||
#define AR933X_ETH_CFG_SW_PHY_ADDR_SWAP	BIT(8)
 | 
					 | 
				
			||||||
#define AR933X_ETH_CFG_RMII_GE0		BIT(9)
 | 
					 | 
				
			||||||
#define AR933X_ETH_CFG_RMII_GE0_SPD_10	0
 | 
					 | 
				
			||||||
#define AR933X_ETH_CFG_RMII_GE0_SPD_100	BIT(10)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * AR934X GMAC Interface
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#define AR934X_GMAC_REG_ETH_CFG		0x00
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR934X_ETH_CFG_RGMII_GMAC0	BIT(0)
 | 
					 | 
				
			||||||
#define AR934X_ETH_CFG_MII_GMAC0	BIT(1)
 | 
					 | 
				
			||||||
#define AR934X_ETH_CFG_GMII_GMAC0	BIT(2)
 | 
					 | 
				
			||||||
#define AR934X_ETH_CFG_MII_GMAC0_MASTER	BIT(3)
 | 
					 | 
				
			||||||
#define AR934X_ETH_CFG_MII_GMAC0_SLAVE	BIT(4)
 | 
					 | 
				
			||||||
#define AR934X_ETH_CFG_MII_GMAC0_ERR_EN	BIT(5)
 | 
					 | 
				
			||||||
#define AR934X_ETH_CFG_SW_ONLY_MODE	BIT(6)
 | 
					 | 
				
			||||||
#define AR934X_ETH_CFG_SW_PHY_SWAP	BIT(7)
 | 
					 | 
				
			||||||
#define AR934X_ETH_CFG_SW_APB_ACCESS	BIT(9)
 | 
					 | 
				
			||||||
#define AR934X_ETH_CFG_RMII_GMAC0	BIT(10)
 | 
					 | 
				
			||||||
#define AR933X_ETH_CFG_MII_CNTL_SPEED	BIT(11)
 | 
					 | 
				
			||||||
#define AR934X_ETH_CFG_RMII_GMAC0_MASTER BIT(12)
 | 
					 | 
				
			||||||
#define AR933X_ETH_CFG_SW_ACC_MSB_FIRST	BIT(13)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * QCA955X GMAC Interface
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define QCA955X_GMAC_REG_ETH_CFG	0x00
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define QCA955X_ETH_CFG_RGMII_GMAC0	BIT(0)
 | 
					 | 
				
			||||||
#define QCA955X_ETH_CFG_SGMII_GMAC0	BIT(6)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif /* __ASM_MACH_AR71XX_REGS_H */
 | 
					 | 
				
			||||||
@@ -1,56 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * LZMA compressed kernel loader for Atheros AR7XXX/AR9XXX based boards
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * 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>
 | 
					 | 
				
			||||||
#include "config.h"
 | 
					 | 
				
			||||||
#include "ar71xx_regs.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define READREG(r)	*(volatile unsigned int *)(r)
 | 
					 | 
				
			||||||
#define WRITEREG(r,v)	*(volatile unsigned int *)(r) = v
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define KSEG1ADDR(_x)	(((_x) & 0x1fffffff) | 0xa0000000)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define UART_BASE	0xb8020000
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define UART_TX		0
 | 
					 | 
				
			||||||
#define UART_LSR	5
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define UART_LSR_THRE   0x20
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define UART_READ(r)		READREG(UART_BASE + 4 * (r))
 | 
					 | 
				
			||||||
#define UART_WRITE(r,v)		WRITEREG(UART_BASE + 4 * (r), (v))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void board_putc(int ch)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	while (((UART_READ(UART_LSR)) & UART_LSR_THRE) == 0);
 | 
					 | 
				
			||||||
	UART_WRITE(UART_TX, ch);
 | 
					 | 
				
			||||||
	while (((UART_READ(UART_LSR)) & UART_LSR_THRE) == 0);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef CONFIG_BOARD_TL_WR1043ND_V1
 | 
					 | 
				
			||||||
static void tlwr1043nd_init(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	unsigned int reg = KSEG1ADDR(AR71XX_RESET_BASE);
 | 
					 | 
				
			||||||
	unsigned int t;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	t = READREG(reg + AR913X_RESET_REG_RESET_MODULE);
 | 
					 | 
				
			||||||
	t |= AR71XX_RESET_GE0_PHY;
 | 
					 | 
				
			||||||
	WRITEREG(reg + AR913X_RESET_REG_RESET_MODULE, t);
 | 
					 | 
				
			||||||
	/* flush write */
 | 
					 | 
				
			||||||
	t = READREG(reg + AR913X_RESET_REG_RESET_MODULE);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
static inline void tlwr1043nd_init(void) {}
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void board_init(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	tlwr1043nd_init();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,33 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * Arch specific code for Lantiq based boards
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Copyright (C) 2013 John Crispin <blogic@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>
 | 
					 | 
				
			||||||
#include "config.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define READREG(r)		*(volatile unsigned int *)(r)
 | 
					 | 
				
			||||||
#define WRITEREG(r,v)		*(volatile unsigned int *)(r) = v
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define UART_BASE		0xbe100c00
 | 
					 | 
				
			||||||
#define ASC_TBUF		(UART_BASE | 0x20)
 | 
					 | 
				
			||||||
#define ASC_FSTAT		(UART_BASE | 0x48)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define TXMASK          0x3F00
 | 
					 | 
				
			||||||
#define TXOFFSET        8
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void board_putc(char c)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	while ((READREG(ASC_FSTAT) & TXMASK) >> TXOFFSET);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	WRITEREG(ASC_TBUF, c);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void board_init(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,42 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * Arch specific code for Ralink based boards
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Copyright (C) 2013 John Crispin <blogic@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>
 | 
					 | 
				
			||||||
#include "config.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define READREG(r)		*(volatile unsigned int *)(r)
 | 
					 | 
				
			||||||
#define WRITEREG(r,v)		*(volatile unsigned int *)(r) = v
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define KSEG1ADDR(_x)		(((_x) & 0x1fffffff) | 0xa0000000)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef CONFIG_SOC_RT288X
 | 
					 | 
				
			||||||
#define UART_BASE		0xb0300c00
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
#define UART_BASE		0xb0000c00
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define UART_TX			1
 | 
					 | 
				
			||||||
#define UART_LSR		7
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define UART_LSR_THRE		0x20
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define UART_READ(r)		READREG(UART_BASE + 4 * (r))
 | 
					 | 
				
			||||||
#define UART_WRITE(r,v)		WRITEREG(UART_BASE + 4 * (r), (v))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void board_putc(int ch)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	while (((UART_READ(UART_LSR)) & UART_LSR_THRE) == 0);
 | 
					 | 
				
			||||||
	UART_WRITE(UART_TX, ch);
 | 
					 | 
				
			||||||
	while (((UART_READ(UART_LSR)) & UART_LSR_THRE) == 0);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void board_init(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,43 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * LZMA compressed kernel loader for Atheros AR7XXX/AR9XXX based boards
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Copyright (C) 2011 Gabor Juhos <juhosg@openwrt.org>
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * The cache manipulation routine has been taken from the U-Boot project.
 | 
					 | 
				
			||||||
 *	(C) Copyright 2003
 | 
					 | 
				
			||||||
 *	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 "cache.h"
 | 
					 | 
				
			||||||
#include "cacheops.h"
 | 
					 | 
				
			||||||
#include "config.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define cache_op(op,addr)						\
 | 
					 | 
				
			||||||
	__asm__ __volatile__(						\
 | 
					 | 
				
			||||||
	"	.set	push					\n"	\
 | 
					 | 
				
			||||||
	"	.set	noreorder				\n"	\
 | 
					 | 
				
			||||||
	"	.set	mips3\n\t				\n"	\
 | 
					 | 
				
			||||||
	"	cache	%0, %1					\n"	\
 | 
					 | 
				
			||||||
	"	.set	pop					\n"	\
 | 
					 | 
				
			||||||
	:								\
 | 
					 | 
				
			||||||
	: "i" (op), "R" (*(unsigned char *)(addr)))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void flush_cache(unsigned long start_addr, unsigned long size)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	unsigned long lsize = CONFIG_CACHELINE_SIZE;
 | 
					 | 
				
			||||||
	unsigned long addr = start_addr & ~(lsize - 1);
 | 
					 | 
				
			||||||
	unsigned long aend = (start_addr + size - 1) & ~(lsize - 1);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	while (1) {
 | 
					 | 
				
			||||||
		cache_op(Hit_Writeback_Inv_D, addr);
 | 
					 | 
				
			||||||
		cache_op(Hit_Invalidate_I, addr);
 | 
					 | 
				
			||||||
		if (addr == aend)
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		addr += lsize;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,17 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * LZMA compressed kernel loader for Atheros AR7XXX/AR9XXX based boards
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * 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.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef __CACHE_H
 | 
					 | 
				
			||||||
#define __CACHE_H
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void flush_cache(unsigned long start_addr, unsigned long size);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif /* __CACHE_H */
 | 
					 | 
				
			||||||
@@ -1,85 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * Cache operations for the cache instruction.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * 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.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * (C) Copyright 1996, 97, 99, 2002, 03 Ralf Baechle
 | 
					 | 
				
			||||||
 * (C) Copyright 1999 Silicon Graphics, Inc.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#ifndef	__ASM_CACHEOPS_H
 | 
					 | 
				
			||||||
#define	__ASM_CACHEOPS_H
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * Cache Operations available on all MIPS processors with R4000-style caches
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#define Index_Invalidate_I      0x00
 | 
					 | 
				
			||||||
#define Index_Writeback_Inv_D   0x01
 | 
					 | 
				
			||||||
#define Index_Load_Tag_I	0x04
 | 
					 | 
				
			||||||
#define Index_Load_Tag_D	0x05
 | 
					 | 
				
			||||||
#define Index_Store_Tag_I	0x08
 | 
					 | 
				
			||||||
#define Index_Store_Tag_D	0x09
 | 
					 | 
				
			||||||
#if defined(CONFIG_CPU_LOONGSON2)
 | 
					 | 
				
			||||||
#define Hit_Invalidate_I	0x00
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
#define Hit_Invalidate_I	0x10
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
#define Hit_Invalidate_D	0x11
 | 
					 | 
				
			||||||
#define Hit_Writeback_Inv_D	0x15
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * R4000-specific cacheops
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#define Create_Dirty_Excl_D	0x0d
 | 
					 | 
				
			||||||
#define Fill			0x14
 | 
					 | 
				
			||||||
#define Hit_Writeback_I		0x18
 | 
					 | 
				
			||||||
#define Hit_Writeback_D		0x19
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * R4000SC and R4400SC-specific cacheops
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#define Index_Invalidate_SI     0x02
 | 
					 | 
				
			||||||
#define Index_Writeback_Inv_SD  0x03
 | 
					 | 
				
			||||||
#define Index_Load_Tag_SI	0x06
 | 
					 | 
				
			||||||
#define Index_Load_Tag_SD	0x07
 | 
					 | 
				
			||||||
#define Index_Store_Tag_SI	0x0A
 | 
					 | 
				
			||||||
#define Index_Store_Tag_SD	0x0B
 | 
					 | 
				
			||||||
#define Create_Dirty_Excl_SD	0x0f
 | 
					 | 
				
			||||||
#define Hit_Invalidate_SI	0x12
 | 
					 | 
				
			||||||
#define Hit_Invalidate_SD	0x13
 | 
					 | 
				
			||||||
#define Hit_Writeback_Inv_SD	0x17
 | 
					 | 
				
			||||||
#define Hit_Writeback_SD	0x1b
 | 
					 | 
				
			||||||
#define Hit_Set_Virtual_SI	0x1e
 | 
					 | 
				
			||||||
#define Hit_Set_Virtual_SD	0x1f
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * R5000-specific cacheops
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#define R5K_Page_Invalidate_S	0x17
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * RM7000-specific cacheops
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#define Page_Invalidate_T	0x16
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * R10000-specific cacheops
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Cacheops 0x02, 0x06, 0x0a, 0x0c-0x0e, 0x16, 0x1a and 0x1e are unused.
 | 
					 | 
				
			||||||
 * Most of the _S cacheops are identical to the R4000SC _SD cacheops.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#define Index_Writeback_Inv_S	0x03
 | 
					 | 
				
			||||||
#define Index_Load_Tag_S	0x07
 | 
					 | 
				
			||||||
#define Index_Store_Tag_S	0x0B
 | 
					 | 
				
			||||||
#define Hit_Invalidate_S	0x13
 | 
					 | 
				
			||||||
#define Cache_Barrier		0x14
 | 
					 | 
				
			||||||
#define Hit_Writeback_Inv_S	0x17
 | 
					 | 
				
			||||||
#define Index_Load_Data_I	0x18
 | 
					 | 
				
			||||||
#define Index_Load_Data_D	0x19
 | 
					 | 
				
			||||||
#define Index_Load_Data_S	0x1b
 | 
					 | 
				
			||||||
#define Index_Store_Data_I	0x1c
 | 
					 | 
				
			||||||
#define Index_Store_Data_D	0x1d
 | 
					 | 
				
			||||||
#define Index_Store_Data_S	0x1f
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif	/* __ASM_CACHEOPS_H */
 | 
					 | 
				
			||||||
@@ -1,27 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * LZMA compressed kernel loader for Atheros AR7XXX/AR9XXX based boards
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * 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.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef _CONFIG_H_
 | 
					 | 
				
			||||||
#define _CONFIG_H_
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef CONFIG_FLASH_OFFS
 | 
					 | 
				
			||||||
#define CONFIG_FLASH_OFFS	0
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef CONFIG_FLASH_MAX
 | 
					 | 
				
			||||||
#define CONFIG_FLASH_MAX	0
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef CONFIG_FLASH_STEP
 | 
					 | 
				
			||||||
#define CONFIG_FLASH_STEP	0x1000
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif /* _CONFIG_H_ */
 | 
					 | 
				
			||||||
@@ -1,39 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * Copyright (C) 1994, 1995, 1996, 1997, 2000, 2001 by Ralf Baechle
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Copyright (C) 2001, Monta Vista Software
 | 
					 | 
				
			||||||
 * Author: jsun@mvista.com or jsun@junsun.net
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#ifndef _cp0regdef_h_
 | 
					 | 
				
			||||||
#define _cp0regdef_h_
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define CP0_INDEX $0
 | 
					 | 
				
			||||||
#define CP0_RANDOM $1
 | 
					 | 
				
			||||||
#define CP0_ENTRYLO0 $2
 | 
					 | 
				
			||||||
#define CP0_ENTRYLO1 $3
 | 
					 | 
				
			||||||
#define CP0_CONTEXT $4
 | 
					 | 
				
			||||||
#define CP0_PAGEMASK $5
 | 
					 | 
				
			||||||
#define CP0_WIRED $6
 | 
					 | 
				
			||||||
#define CP0_BADVADDR $8
 | 
					 | 
				
			||||||
#define CP0_COUNT $9
 | 
					 | 
				
			||||||
#define CP0_ENTRYHI $10
 | 
					 | 
				
			||||||
#define CP0_COMPARE $11
 | 
					 | 
				
			||||||
#define CP0_STATUS $12
 | 
					 | 
				
			||||||
#define CP0_CAUSE $13
 | 
					 | 
				
			||||||
#define CP0_EPC $14
 | 
					 | 
				
			||||||
#define CP0_PRID $15
 | 
					 | 
				
			||||||
#define CP0_CONFIG $16
 | 
					 | 
				
			||||||
#define CP0_LLADDR $17
 | 
					 | 
				
			||||||
#define CP0_WATCHLO $18
 | 
					 | 
				
			||||||
#define CP0_WATCHHI $19
 | 
					 | 
				
			||||||
#define CP0_XCONTEXT $20
 | 
					 | 
				
			||||||
#define CP0_FRAMEMASK $21
 | 
					 | 
				
			||||||
#define CP0_DIAGNOSTIC $22
 | 
					 | 
				
			||||||
#define CP0_PERFORMANCE $25
 | 
					 | 
				
			||||||
#define CP0_ECC $26
 | 
					 | 
				
			||||||
#define CP0_CACHEERR $27
 | 
					 | 
				
			||||||
#define CP0_TAGLO $28
 | 
					 | 
				
			||||||
#define CP0_TAGHI $29
 | 
					 | 
				
			||||||
#define CP0_ERROREPC $30
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
@@ -1,121 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * LZMA compressed kernel loader for Atheros AR7XXX/AR9XXX based boards
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * 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>
 | 
					 | 
				
			||||||
#include "cp0regdef.h"
 | 
					 | 
				
			||||||
#include "cacheops.h"
 | 
					 | 
				
			||||||
#include "config.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define KSEG0		0x80000000
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	.macro	ehb
 | 
					 | 
				
			||||||
	sll     zero, 3
 | 
					 | 
				
			||||||
	.endm
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	.text
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
LEAF(startup)
 | 
					 | 
				
			||||||
	.set noreorder
 | 
					 | 
				
			||||||
	.set mips32
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	mtc0	zero, CP0_WATCHLO	# clear watch registers
 | 
					 | 
				
			||||||
	mtc0	zero, CP0_WATCHHI
 | 
					 | 
				
			||||||
	mtc0	zero, CP0_CAUSE		# clear before writing status register
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	mfc0	t0, CP0_STATUS
 | 
					 | 
				
			||||||
	li	t1, 0x1000001f
 | 
					 | 
				
			||||||
	or	t0, t1
 | 
					 | 
				
			||||||
	xori	t0, 0x1f
 | 
					 | 
				
			||||||
	mtc0	t0, CP0_STATUS
 | 
					 | 
				
			||||||
	ehb
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	mtc0	zero, CP0_COUNT
 | 
					 | 
				
			||||||
	mtc0	zero, CP0_COMPARE
 | 
					 | 
				
			||||||
	ehb
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	la	t0, __reloc_label	# get linked address of label
 | 
					 | 
				
			||||||
	bal	__reloc_label		# branch and link to label to
 | 
					 | 
				
			||||||
	nop				# get actual address
 | 
					 | 
				
			||||||
__reloc_label:
 | 
					 | 
				
			||||||
	subu	t0, ra, t0		# get reloc_delta
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	beqz	t0, __reloc_done         # if delta is 0 we are in the right place
 | 
					 | 
				
			||||||
	nop
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* Copy our code to the right place */
 | 
					 | 
				
			||||||
	la	t1, _code_start		# get linked address of _code_start
 | 
					 | 
				
			||||||
	la	t2, _code_end		# get linked address of _code_end
 | 
					 | 
				
			||||||
	addu	t0, t0, t1		# calculate actual address of _code_start
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__reloc_copy:
 | 
					 | 
				
			||||||
	lw	t3, 0(t0)
 | 
					 | 
				
			||||||
	sw	t3, 0(t1)
 | 
					 | 
				
			||||||
	add	t1, 4
 | 
					 | 
				
			||||||
	blt	t1, t2, __reloc_copy
 | 
					 | 
				
			||||||
	add	t0, 4
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* flush cache */
 | 
					 | 
				
			||||||
	la	t0, _code_start
 | 
					 | 
				
			||||||
	la	t1, _code_end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	li	t2, ~(CONFIG_CACHELINE_SIZE - 1)
 | 
					 | 
				
			||||||
	and	t0, t2
 | 
					 | 
				
			||||||
	and	t1, t2
 | 
					 | 
				
			||||||
	li	t2, CONFIG_CACHELINE_SIZE
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	b	__flush_check
 | 
					 | 
				
			||||||
	nop
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__flush_line:
 | 
					 | 
				
			||||||
	cache	Hit_Writeback_Inv_D, 0(t0)
 | 
					 | 
				
			||||||
	cache	Hit_Invalidate_I, 0(t0)
 | 
					 | 
				
			||||||
	add	t0, t2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__flush_check:
 | 
					 | 
				
			||||||
	bne	t0, t1, __flush_line
 | 
					 | 
				
			||||||
	nop
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	sync
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__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
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* reserve stack space for a0-a3 registers */
 | 
					 | 
				
			||||||
	subu	sp, 16
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* jump to the decompressor routine */
 | 
					 | 
				
			||||||
	la	t0, loader_main
 | 
					 | 
				
			||||||
	jr	t0
 | 
					 | 
				
			||||||
	nop
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	.set reorder
 | 
					 | 
				
			||||||
END(startup)
 | 
					 | 
				
			||||||
@@ -1 +0,0 @@
 | 
				
			|||||||
CACHE_FLAGS+=-DCONFIG_ICACHE_SIZE="(32 * 1024)" -DCONFIG_DCACHE_SIZE="(32 * 1024)" -DCONFIG_CACHELINE_SIZE=32
 | 
					 | 
				
			||||||
@@ -1,263 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * LZMA compressed kernel loader for Atheros AR7XXX/AR9XXX based boards
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * 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 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 "config.h"
 | 
					 | 
				
			||||||
#include "cache.h"
 | 
					 | 
				
			||||||
#include "printf.h"
 | 
					 | 
				
			||||||
#include "LzmaDecode.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AR71XX_FLASH_START	0x1f000000
 | 
					 | 
				
			||||||
#define AR71XX_FLASH_END	0x1fe00000
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#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_MAGIC_OKLI		0x4f4b4c49	/* 'OKLI' */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#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);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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 MIPS based SoC\n");
 | 
					 | 
				
			||||||
	printf("Copyright (C) 2011 Gabor Juhos <juhosg@openwrt.org>\n");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	lzma_init_data();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	res = lzma_init_props();
 | 
					 | 
				
			||||||
	if (res != LZMA_RESULT_OK) {
 | 
					 | 
				
			||||||
		printf("Incorrect LZMA stream properties!\n");
 | 
					 | 
				
			||||||
		halt();
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	printf("Decompressing kernel... ");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	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);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	printf("Starting kernel at %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);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,35 +0,0 @@
 | 
				
			|||||||
OUTPUT_ARCH(mips)
 | 
					 | 
				
			||||||
SECTIONS {
 | 
					 | 
				
			||||||
	.text : {
 | 
					 | 
				
			||||||
		_code_start = .;
 | 
					 | 
				
			||||||
		*(.text)
 | 
					 | 
				
			||||||
		*(.text.*)
 | 
					 | 
				
			||||||
		*(.rodata)
 | 
					 | 
				
			||||||
		*(.rodata.*)
 | 
					 | 
				
			||||||
		*(.data.lzma)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	. = ALIGN(32);
 | 
					 | 
				
			||||||
	.data : {
 | 
					 | 
				
			||||||
		*(.data)
 | 
					 | 
				
			||||||
		*(.data.*)
 | 
					 | 
				
			||||||
		. = . + 524288;		/* workaround for buggy bootloaders */
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	. = ALIGN(32);
 | 
					 | 
				
			||||||
	_code_end = .;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	_bss_start = .;
 | 
					 | 
				
			||||||
	.bss : {
 | 
					 | 
				
			||||||
		*(.bss)
 | 
					 | 
				
			||||||
		*(.bss.*)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	. = ALIGN(32);
 | 
					 | 
				
			||||||
	_bss_end = .;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	. = . + 8192;
 | 
					 | 
				
			||||||
	_stack = .;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	workspace = .;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,10 +0,0 @@
 | 
				
			|||||||
OUTPUT_ARCH(mips)
 | 
					 | 
				
			||||||
SECTIONS {
 | 
					 | 
				
			||||||
	.text : {
 | 
					 | 
				
			||||||
		startup = .;
 | 
					 | 
				
			||||||
		*(.text)
 | 
					 | 
				
			||||||
		*(.text.*)
 | 
					 | 
				
			||||||
		*(.data)
 | 
					 | 
				
			||||||
		*(.data.*)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,8 +0,0 @@
 | 
				
			|||||||
OUTPUT_ARCH(mips)
 | 
					 | 
				
			||||||
SECTIONS {
 | 
					 | 
				
			||||||
	.data.lzma : {
 | 
					 | 
				
			||||||
		_lzma_data_start = .;
 | 
					 | 
				
			||||||
		*(.data)
 | 
					 | 
				
			||||||
		_lzma_data_end = .;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,350 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * 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);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,18 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * 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_ */
 | 
					 | 
				
			||||||
@@ -1 +0,0 @@
 | 
				
			|||||||
CACHE_FLAGS+=-DCONFIG_ICACHE_SIZE="(32 * 1024)" -DCONFIG_DCACHE_SIZE="(16 * 1024)" -DCONFIG_CACHELINE_SIZE=32
 | 
					 | 
				
			||||||
		Reference in New Issue
	
	Block a user