Changeset 28406 for trunk


Ignore:
Timestamp:
2011-10-10T17:14:17+02:00 (5 years ago)
Author:
blogic
Message:

[ltq-dsl]

  • add support for ar9
  • add support for ase

(vr9 support is still a todo)

Location:
trunk/package
Files:
9 added
16 edited
5 copied

Legend:

Unmodified
Added
Removed
  • trunk/package/ltq-dsl-app/Config.in

    r27661 r28406  
    1 menu "Configuration" 
    2         depends on PACKAGE_ltq-dsl-app 
    3  
    41config LTQ_DSL_ENABLE_CLI 
    52        bool "Enable CLI support" 
     
    118        depends on PACKAGE_ltq-dsl-app 
    129        default n 
    13  
    14 endmenu 
  • trunk/package/ltq-dsl-app/Makefile

    r27661 r28406  
    2323include $(INCLUDE_DIR)/package.mk 
    2424 
     25PKG_BUILD_DEPENDS:=TARGET_lantiq_danube:kmod-ltq-dsl-danube TARGET_lantiq_ar9:kmod-ltq-dsl-ar9 \ 
     26        TARGET_lantiq_vr9:kmod-ltq-dsl-vr9 TARGET_lantiq_ase:kmod-ltq-dsl-ase 
     27 
    2528define Package/ltq-dsl-app 
    2629  SECTION:=net 
     
    2831  TITLE:=Lantiq DSL userland tool 
    2932  URL:=http://www.lantiq.com/ 
    30   DEPENDS:=@TARGET_lantiq_danube +kmod-ltq-dsl +libpthread 
     33  DEPENDS:=@TARGET_lantiq&&!(TARGET_lantiq_falcon||TARGET_lantiq_falcon_stable) +libpthread 
    3134  MAINTAINER:=John Crispin <blogic@openwrt.org>  
    3235  MENU:=1 
  • trunk/package/ltq-dsl/Makefile

    r27538 r28406  
    1212PKG_BASE_NAME:=drv_dsl_cpe_api_danube 
    1313PKG_VERSION:=3.24.4.4 
    14 PKG_RELEASE:=2 
     14PKG_RELEASE:=3 
    1515PKG_SOURCE:=$(PKG_BASE_NAME)-$(PKG_VERSION).tar.gz 
    1616PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/drv_dsl_cpe_api-$(PKG_VERSION) 
     
    1818PKG_MD5SUM:=c45bc531c1ed2ac80f68fb986b63bb87 
    1919 
    20 FW_BASE_NAME:=dsl_danube_firmware_adsl 
    21 FW_A_VER:=02.04.04.00.00.01 
    22 FW_B_VER:=02.04.01.07.00.02 
    23 FW_A_FILE_VER:=244001 
    24 FW_B_FILE_VER:=241702 
    25 FW_A_MD5:=f717db3067a0049a26e233ab11238710 
    26 FW_B_MD5:=349de7cd20368f4ac9b7e8322114a512 
     20FW_NAME:=ltq-dsl-fw-0.1 
     21FW_MD5:=4700a36b66b955b4c5544227267356f4 
    2722 
    2823include $(INCLUDE_DIR)/package.mk 
    2924 
    30 define KernelPackage/ltq-dsl 
     25define Download/ltq-dsl-fw 
     26        FILE:=$(FW_NAME).tar.bz2 
     27        MD5SUM:=$(FW_MD5) 
     28        URL:=http://mirror2.openwrt.org/sources/ 
     29endef 
     30$(eval $(call Download,ltq-dsl-fw)) 
     31 
     32define KernelPackage/ltq-dsl-template 
    3133  SECTION:=sys 
    3234  CATEGORY:=Kernel modules 
    3335  SUBMENU:=Network Devices 
    34   TITLE:=Lantiq dsl driver 
     36  TITLE:=Lantiq dsl driver for $(1) 
    3537  URL:=http://www.lantiq.com/ 
    36   DEPENDS:=@TARGET_lantiq_danube +kmod-atm 
     38  VARIANT:=$(1) 
     39  DEPENDS:=@TARGET_lantiq_$(1) +kmod-atm 
    3740  FILES:=$(PKG_BUILD_DIR)/src/mei/lantiq_mei.ko \ 
    3841        $(PKG_BUILD_DIR)/src/drv_dsl_cpe_api.ko \ 
     
    4245endef 
    4346 
    44 define Package/kmod-ltq-dsl-firmware/default 
     47KernelPackage/ltq-dsl-danube=$(call KernelPackage/ltq-dsl-template,danube) 
     48KernelPackage/ltq-dsl-ase=$(call KernelPackage/ltq-dsl-template,ase) 
     49KernelPackage/ltq-dsl-ar9=$(call KernelPackage/ltq-dsl-template,ar9) 
     50KernelPackage/ltq-dsl-vr9=$(call KernelPackage/ltq-dsl-template,vr9) 
     51 
     52define Package/kmod-ltq-dsl-firmware-template 
     53  TITLE+=Firmware Annex-$(1) $(2) 
    4554  SECTION:=sys 
    4655  CATEGORY:=Kernel modules 
    4756  SUBMENU:=Network Devices 
    48   TITLE:=Firmware 
     57  VARIANT:= $(1)-$(2) 
    4958  URL:=http://www.lantiq.com/ 
    50   DEPENDS:=@TARGET_lantiq_danube kmod-ltq-dsl 
     59  DEPENDS:=@TARGET_lantiq_$(2) kmod-ltq-dsl-$(2) 
    5160  MAINTAINER:=John Crispin <blogic@openwrt.org> 
    5261endef 
    5362 
    54 define Package/kmod-ltq-dsl-firmware-a 
    55   $(call Package/kmod-ltq-dsl-firmware/default) 
    56   TITLE+=Annex-A Danube 
    57 endef 
    58  
    59 define Package/kmod-ltq-dsl-firmware-b 
    60   $(call Package/kmod-ltq-dsl-firmware/default) 
    61   TITLE+=Annex-B Danube 
    62 endef 
     63Package/kmod-ltq-dsl-firmware-a-danube=$(call Package/kmod-ltq-dsl-firmware-template,a,danube) 
     64Package/kmod-ltq-dsl-firmware-b-danube=$(call Package/kmod-ltq-dsl-firmware-template,b,danube) 
     65Package/kmod-ltq-dsl-firmware-a-ase=$(call Package/kmod-ltq-dsl-firmware-template,a,ase) 
     66Package/kmod-ltq-dsl-firmware-b-ase=$(call Package/kmod-ltq-dsl-firmware-template,b,ase) 
     67Package/kmod-ltq-dsl-firmware-a-ar9=$(call Package/kmod-ltq-dsl-firmware-template,a,ar9) 
     68Package/kmod-ltq-dsl-firmware-b-ar9=$(call Package/kmod-ltq-dsl-firmware-template,b,ar9) 
     69Package/kmod-ltq-dsl-firmware-a-vr9=$(call Package/kmod-ltq-dsl-firmware-template,a,vr9) 
     70Package/kmod-ltq-dsl-firmware-b-vr9=$(call Package/kmod-ltq-dsl-firmware-template,b,vr9) 
    6371 
    6472define KernelPackage/ltq-dsl/description 
    65         Lantiq DSL CPE API for Amazon SE, Danube and Vinax. 
     73        Lantiq DSL driver for AR9, Amazon SE, Danube and VR9 
    6674endef 
    6775 
     
    6977        source "$(SOURCE)/Config.in" 
    7078endef 
    71  
    72 define Download/annex-a 
    73         FILE:=$(FW_BASE_NAME)_a-$(FW_A_VER).tar.gz 
    74         URL:=http://mirror2.openwrt.org/sources/ 
    75         MD5SUM:=$(FW_A_MD5) 
    76 endef 
    77 $(eval $(call Download,annex-a)) 
    78  
    79 define Download/annex-b 
    80         FILE:=$(FW_BASE_NAME)_b-$(FW_B_VER).tar.gz 
    81         URL:=http://mirror2.openwrt.org/sources/ 
    82         MD5SUM:=$(FW_B_MD5) 
    83 endef 
    84 $(eval $(call Download,annex-b)) 
    8579 
    8680IFX_DSL_MAX_DEVICE=1 
     
    9286        --with-lines-per-device="$(IFX_DSL_LINES_PER_DEVICE)" \ 
    9387        --with-channels-per-line="$(IFX_DSL_CHANNELS_PER_LINE)" \ 
    94         --enable-danube \ 
    95         --enable-add-drv-cflags="-DMODULE" \ 
    9688        --disable-dsl-delt-static \ 
    9789        --disable-adsl-led \ 
     
    112104        ARCH=$(LINUX_KARCH) 
    113105 
    114 EXTRA_CFLAGS = -fno-pic -mno-abicalls -mlong-calls -G 0 
     106CONFIG_TAG_danube:=DANUBE 
     107CONFIG_TAG_ase:=AMAZON_SE 
     108CONFIG_TAG_ar9:=AR9 
     109CONFIG_TAG_vr9:=VR9 
     110CONFIGURE_ARGS += --enable-add-drv-cflags="-DMODULE -DCONFIG_$(CONFIG_TAG_$(BUILD_VARIANT))" 
     111 
     112ifeq ($(BUILD_VARIANT),vr9) 
     113CONFIGURE_ARGS += --enable-vinax 
     114else 
     115CONFIGURE_ARGS += --enable-danube 
     116endif 
    115117 
    116118ifeq ($(CONFIG_LANTIQ_DSL_DEBUG),y) 
     
    121123endif 
    122124 
     125EXTRA_CFLAGS = -fno-pic -mno-abicalls -mlong-calls -G 0 
     126 
    123127define Build/Prepare 
    124128        $(PKG_UNPACK) 
     
    126130        $(CP) ./src/* $(PKG_BUILD_DIR)/src/mei/ 
    127131        $(Build/Patch) 
    128         $(TAR) -C $(PKG_BUILD_DIR) -xzf $(DL_DIR)/$(FW_BASE_NAME)_a-$(FW_A_VER).tar.gz 
    129         $(TAR) -C $(PKG_BUILD_DIR) -xzf $(DL_DIR)/$(FW_BASE_NAME)_b-$(FW_B_VER).tar.gz 
     132        $(TAR) -C $(PKG_BUILD_DIR) -xjf $(DL_DIR)/$(FW_NAME).tar.bz2 
    130133endef 
    131134 
     
    138141        cd $(LINUX_DIR); \ 
    139142                ARCH=mips CROSS_COMPILE="$(KERNEL_CROSS)" \ 
    140                 $(MAKE) M=$(PKG_BUILD_DIR)/src/mei/ V=1 modules 
     143                BUILD_VARIANT=$(BUILD_VARIANT) $(MAKE) M=$(PKG_BUILD_DIR)/src/mei/ V=1 modules 
    141144        $(call Build/Compile/Default) 
    142145endef 
     
    156159endef 
    157160 
    158 define Package/kmod-ltq-dsl-firmware-a/install 
     161define Package/kmod-ltq-dsl-firmware-$(BUILD_VARIANT)/install 
    159162        $(INSTALL_DIR) $(1)/lib/firmware/ 
    160         $(CP) $(PKG_BUILD_DIR)/$(FW_BASE_NAME)_a_$(FW_A_FILE_VER).bin $(1)/lib/firmware/ModemHWE.bin 
     163        $(CP) $(PKG_BUILD_DIR)/$(FW_NAME)/ltq-dsl-fw-$(BUILD_VARIANT).bin $(1)/lib/firmware/ModemHWE.bin 
    161164endef 
    162165 
    163 define Package/kmod-ltq-dsl-firmware-b/install 
    164         $(INSTALL_DIR) $(1)/lib/firmware/ 
    165         $(CP) $(PKG_BUILD_DIR)/$(FW_BASE_NAME)_b_$(FW_B_FILE_VER).bin $(1)/lib/firmware/ModemHWE.bin 
    166 endef 
    167  
    168 $(eval $(call KernelPackage,ltq-dsl)) 
    169 $(eval $(call BuildPackage,kmod-ltq-dsl-firmware-a)) 
    170 $(eval $(call BuildPackage,kmod-ltq-dsl-firmware-b)) 
     166$(eval $(call KernelPackage,ltq-dsl-danube)) 
     167$(eval $(call KernelPackage,ltq-dsl-ase)) 
     168$(eval $(call KernelPackage,ltq-dsl-ar9)) 
     169#$(eval $(call KernelPackage,ltq-dsl-vr9)) 
     170$(eval $(call BuildPackage,kmod-ltq-dsl-firmware-a-danube)) 
     171$(eval $(call BuildPackage,kmod-ltq-dsl-firmware-b-danube)) 
     172$(eval $(call BuildPackage,kmod-ltq-dsl-firmware-a-ase)) 
     173$(eval $(call BuildPackage,kmod-ltq-dsl-firmware-b-ase)) 
     174$(eval $(call BuildPackage,kmod-ltq-dsl-firmware-a-ar9)) 
     175$(eval $(call BuildPackage,kmod-ltq-dsl-firmware-b-ar9)) 
     176#$(eval $(call BuildPackage,kmod-ltq-dsl-firmware-a-vr9)) 
     177#$(eval $(call BuildPackage,kmod-ltq-dsl-firmware-b-vr9)) 
  • trunk/package/ltq-dsl/src/Makefile

    r24526 r28406  
    11obj-m = lantiq_mei.o lantiq_atm.o 
     2lantiq_atm-objs := ifxmips_atm_core.o 
    23 
    3 lantiq_atm-objs := ifxmips_atm_core.o ifxmips_atm_danube.o 
     4ifeq ($(BUILD_VARIANT),danube) 
     5  EXTRA_CFLAGS+=-DCONFIG_DANUBE 
     6  lantiq_atm-objs += ifxmips_atm_danube.o 
     7endif 
     8ifeq ($(BUILD_VARIANT),ase) 
     9  EXTRA_CFLAGS+=-DCONFIG_AMAZON_SE 
     10  lantiq_atm-objs += ifxmips_atm_amazon_se.o 
     11endif 
     12ifeq ($(BUILD_VARIANT),ar9) 
     13  EXTRA_CFLAGS+=-DCONFIG_AR9 
     14  lantiq_atm-objs += ifxmips_atm_ar9.o 
     15endif 
     16ifeq ($(BUILD_VARIANT),vr9) 
     17  EXTRA_CFLAGS+=-DCONFIG_VR9 
     18  lantiq_atm-objs += ifxmips_atm_vr9.o 
     19endif 
  • trunk/package/ltq-dsl/src/ifx_atm.h

    r24526 r28406  
    2727 
    2828 
     29/*! 
     30  \defgroup IFX_ATM UEIP Project - ATM driver module 
     31  \brief UEIP Project - ATM driver module, support Danube, Amazon-SE, AR9, VR9. 
     32 */ 
     33 
     34/*! 
     35  \defgroup IFX_ATM_IOCTL IOCTL Commands 
     36  \ingroup IFX_ATM 
     37  \brief IOCTL Commands used by user application. 
     38 */ 
     39 
     40/*! 
     41  \defgroup IFX_ATM_STRUCT Structures 
     42  \ingroup IFX_ATM 
     43  \brief Structures used by user application. 
     44 */ 
     45 
     46/*! 
     47  \file ifx_atm.h 
     48  \ingroup IFX_ATM 
     49  \brief ATM driver header file 
     50 */ 
     51 
     52 
     53 
     54/* 
     55 * #################################### 
     56 *              Definition 
     57 * #################################### 
     58 */ 
     59 
     60/*! 
     61  \addtogroup IFX_ATM_STRUCT 
     62 */ 
     63/*@{*/ 
     64 
    2965/* 
    3066 *  ATM MIB 
    3167 */ 
    3268 
     69/*! 
     70  \struct atm_cell_ifEntry_t 
     71  \brief Structure used for Cell Level MIB Counters. 
     72 
     73  User application use this structure to call IOCTL command "PPE_ATM_MIB_CELL". 
     74 */ 
    3375typedef struct { 
    3476        __u32   ifHCInOctets_h;     /*!< byte counter of ingress cells (upper 32 bits, total 64 bits)   */ 
     
    4183} atm_cell_ifEntry_t; 
    4284 
     85/*! 
     86  \struct atm_aal5_ifEntry_t 
     87  \brief Structure used for AAL5 Frame Level MIB Counters. 
     88 
     89  User application use this structure to call IOCTL command "PPE_ATM_MIB_AAL5". 
     90 */ 
    4391typedef struct { 
    4492        __u32   ifHCInOctets_h;     /*!< byte counter of ingress packets (upper 32 bits, total 64 bits) */ 
     
    54102} atm_aal5_ifEntry_t; 
    55103 
     104/*! 
     105  \struct atm_aal5_vcc_t 
     106  \brief Structure used for per PVC AAL5 Frame Level MIB Counters. 
     107 
     108  This structure is a part of structure "atm_aal5_vcc_x_t". 
     109 */ 
    56110typedef struct { 
    57111        __u32   aal5VccCrcErrors;       /*!< counter of ingress packets with CRC error  */ 
     
    60114} atm_aal5_vcc_t; 
    61115 
     116/*! 
     117  \struct atm_aal5_vcc_x_t 
     118  \brief Structure used for per PVC AAL5 Frame Level MIB Counters. 
     119 
     120  User application use this structure to call IOCTL command "PPE_ATM_MIB_VCC". 
     121 */ 
    62122typedef struct { 
    63123        int             vpi;        /*!< VPI of the VCC to get MIB counters */ 
     
    66126} atm_aal5_vcc_x_t; 
    67127 
     128/*@}*/ 
     129 
     130 
     131 
     132/* 
     133 * #################################### 
     134 *                IOCTL 
     135 * #################################### 
     136 */ 
     137 
     138/*! 
     139  \addtogroup IFX_ATM_IOCTL 
     140 */ 
     141/*@{*/ 
     142 
     143/* 
     144 *  ioctl Command 
     145 */ 
    68146/*! 
    69147  \brief ATM IOCTL Magic Number 
     
    100178 
    101179 
     180/* 
     181 * #################################### 
     182 *                 API 
     183 * #################################### 
     184 */ 
     185 
    102186#ifdef __KERNEL__ 
    103187struct port_cell_info { 
     
    106190}; 
    107191#endif 
    108 #endif 
     192 
     193 
     194 
     195#endif  //  IFX_ATM_H 
     196 
  • trunk/package/ltq-dsl/src/ifxmips_atm_amazon_se.c

    r28405 r28406  
    11/****************************************************************************** 
    22** 
    3 ** FILE NAME    : ifxmips_atm_danube.c 
     3** FILE NAME    : ifxmips_atm_amazon_se.c 
    44** PROJECT      : UEIP 
    55** MODULES      : ATM 
     
    4949#include "ifxmips_compat.h" 
    5050#include "ifxmips_atm_core.h" 
    51 #include "ifxmips_atm_fw_danube.h" 
     51#include "ifxmips_atm_fw_amazon_se.h" 
    5252 
    5353 
     
    6565#define EMA_CMD_BASE_ADDR    (0x00001580 << 2) 
    6666#define EMA_DATA_BUF_LEN     0x0100 
    67 #define EMA_DATA_BASE_ADDR   (0x00001900 << 2) 
     67#define EMA_DATA_BASE_ADDR   (0x00000B00 << 2) 
    6868#define EMA_WRITE_BURST      0x2 
    6969#define EMA_READ_BURST       0x2 
     
    8282static inline void init_pmu(void); 
    8383static inline void uninit_pmu(void); 
     84static inline void reset_ppe(void); 
    8485static inline void init_ema(void); 
    8586static inline void init_mailbox(void); 
     
    106107{ 
    107108    //*(unsigned long *)0xBF10201C &= ~((1 << 15) | (1 << 13) | (1 << 9)); 
    108     PPE_TOP_PMU_SETUP(IFX_PMU_ENABLE); 
     109    //PPE_TOP_PMU_SETUP(IFX_PMU_ENABLE); 
    109110    PPE_SLL01_PMU_SETUP(IFX_PMU_ENABLE); 
    110111    PPE_TC_PMU_SETUP(IFX_PMU_ENABLE); 
    111112    PPE_EMA_PMU_SETUP(IFX_PMU_ENABLE); 
    112     PPE_QSB_PMU_SETUP(IFX_PMU_ENABLE); 
     113    //PPE_QSB_PMU_SETUP(IFX_PMU_ENABLE); 
    113114    PPE_TPE_PMU_SETUP(IFX_PMU_ENABLE); 
    114115    DSL_DFE_PMU_SETUP(IFX_PMU_ENABLE); 
     
    120121    PPE_TC_PMU_SETUP(IFX_PMU_DISABLE); 
    121122    PPE_EMA_PMU_SETUP(IFX_PMU_DISABLE); 
    122     PPE_QSB_PMU_SETUP(IFX_PMU_DISABLE); 
     123    //PPE_QSB_PMU_SETUP(IFX_PMU_DISABLE); 
    123124    PPE_TPE_PMU_SETUP(IFX_PMU_DISABLE); 
    124125    DSL_DFE_PMU_SETUP(IFX_PMU_DISABLE); 
    125     PPE_TOP_PMU_SETUP(IFX_PMU_DISABLE); 
     126    //PPE_TOP_PMU_SETUP(IFX_PMU_DISABLE); 
     127} 
     128 
     129static inline void reset_ppe(void) 
     130{ 
     131#ifdef MODULE 
     132/*    unsigned int etop_cfg; 
     133    unsigned int etop_mdio_cfg; 
     134    unsigned int etop_ig_plen_ctrl; 
     135    unsigned int enet_mac_cfg; 
     136 
     137    etop_cfg            = *IFX_PP32_ETOP_CFG; 
     138    etop_mdio_cfg       = *IFX_PP32_ETOP_MDIO_CFG; 
     139    etop_ig_plen_ctrl   = *IFX_PP32_ETOP_IG_PLEN_CTRL; 
     140    enet_mac_cfg        = *IFX_PP32_ENET_MAC_CFG; 
     141 
     142    *IFX_PP32_ETOP_CFG  = (*IFX_PP32_ETOP_CFG & ~0x03C0) | 0x0001; 
     143 
     144    //  reset PPE 
     145    ifx_rcu_rst(IFX_RCU_DOMAIN_PPE, IFX_RCU_MODULE_ATM); 
     146 
     147    *IFX_PP32_ETOP_MDIO_CFG     = etop_mdio_cfg; 
     148    *IFX_PP32_ETOP_IG_PLEN_CTRL = etop_ig_plen_ctrl; 
     149    *IFX_PP32_ENET_MAC_CFG      = enet_mac_cfg; 
     150    *IFX_PP32_ETOP_CFG          = etop_cfg;*/ 
     151#endif 
    126152} 
    127153 
     
    144170static inline void init_atm_tc(void) 
    145171{ 
    146     //  for ReTX expansion in future 
    147     //*FFSM_CFG0 = SET_BITS(*FFSM_CFG0, 5, 0, 6); //  pnum = 6 
    148     //*FFSM_CFG1 = SET_BITS(*FFSM_CFG1, 5, 0, 6); //  pnum = 6 
     172    IFX_REG_W32(0x0000,     DREG_AT_CTRL); 
     173    IFX_REG_W32(0x0000,     DREG_AR_CTRL); 
     174    IFX_REG_W32(0x0,        DREG_AT_IDLE0); 
     175    IFX_REG_W32(0x0,        DREG_AT_IDLE1); 
     176    IFX_REG_W32(0x0,        DREG_AR_IDLE0); 
     177    IFX_REG_W32(0x0,        DREG_AR_IDLE1); 
     178    IFX_REG_W32(0x40,       RFBI_CFG); 
     179    IFX_REG_W32(0x0700,     SFSM_DBA0); 
     180    IFX_REG_W32(0x0818,     SFSM_DBA1); 
     181    IFX_REG_W32(0x0930,     SFSM_CBA0); 
     182    IFX_REG_W32(0x0944,     SFSM_CBA1); 
     183    IFX_REG_W32(0x14014,    SFSM_CFG0); 
     184    IFX_REG_W32(0x14014,    SFSM_CFG1); 
     185    IFX_REG_W32(0x0958,     FFSM_DBA0); 
     186    IFX_REG_W32(0x09AC,     FFSM_DBA1); 
     187    IFX_REG_W32(0x10006,    FFSM_CFG0); 
     188    IFX_REG_W32(0x10006,    FFSM_CFG1); 
     189    IFX_REG_W32(0x00000001, FFSM_IDLE_HEAD_BC0); 
     190    IFX_REG_W32(0x00000001, FFSM_IDLE_HEAD_BC1); 
    149191} 
    150192 
     
    154196    unsigned int i; 
    155197 
    156     for ( i = 0; i < SB_RAM0_DWLEN + SB_RAM1_DWLEN + SB_RAM2_DWLEN + SB_RAM3_DWLEN; i++ ) 
     198    for ( i = 0; i < SB_RAM0_DWLEN + SB_RAM1_DWLEN; i++ ) 
    157199        IFX_REG_W32(0, p++); 
    158200} 
     
    179221        IFX_REG_W32(0x00, CDM_CFG); 
    180222    else 
    181         IFX_REG_W32(0x02, CDM_CFG); 
     223        IFX_REG_W32(0x04, CDM_CFG); 
    182224 
    183225    /*  copy code   */ 
     
    207249    ASSERT(minor != NULL, "pointer is NULL"); 
    208250 
     251#ifdef VER_IN_FIRMWARE 
     252    *major = FW_VER_ID->major; 
     253    *minor = FW_VER_ID->minor; 
     254#else 
    209255    *major = ATM_FW_VER_MAJOR; 
    210256    *minor = ATM_FW_VER_MINOR; 
     257#endif 
    211258} 
    212259 
     
    214261{ 
    215262    init_pmu(); 
     263 
     264    reset_ppe(); 
    216265 
    217266    init_ema(); 
     
    248297 
    249298    /*  run PP32    */ 
    250     IFX_REG_W32(DBG_CTRL_START_SET(1), PP32_DBG_CTRL); 
     299    IFX_REG_W32(DBG_CTRL_RESTART, PP32_DBG_CTRL); 
    251300 
    252301    /*  idle for a while to let PP32 init itself    */ 
     
    267316{ 
    268317    /*  halt PP32   */ 
    269     IFX_REG_W32(DBG_CTRL_STOP_SET(1), PP32_DBG_CTRL); 
    270 } 
     318    IFX_REG_W32(DBG_CTRL_STOP, PP32_DBG_CTRL); 
     319} 
  • trunk/package/ltq-dsl/src/ifxmips_atm_ar9.c

    r28405 r28406  
    11/****************************************************************************** 
    22** 
    3 ** FILE NAME    : ifxmips_atm_danube.c 
     3** FILE NAME    : ifxmips_atm_ar9.c 
    44** PROJECT      : UEIP 
    55** MODULES      : ATM 
     
    4848#include <lantiq_soc.h> 
    4949#include "ifxmips_compat.h" 
     50#define IFX_MEI_BSP 1 
     51#include "ifxmips_mei_interface.h" 
    5052#include "ifxmips_atm_core.h" 
    51 #include "ifxmips_atm_fw_danube.h" 
     53#include "ifxmips_atm_ppe_common.h" 
     54 #if defined(ENABLE_ATM_RETX) && ENABLE_ATM_RETX 
     55  #include "ifxmips_atm_fw_ar9_retx.h" 
     56#else 
     57  #include "ifxmips_atm_fw_ar9.h" 
     58#endif 
    5259 
    5360 
     
    6370 */ 
    6471#define EMA_CMD_BUF_LEN      0x0040 
    65 #define EMA_CMD_BASE_ADDR    (0x00001580 << 2) 
     72#define EMA_CMD_BASE_ADDR    (0x00003B80 << 2) 
    6673#define EMA_DATA_BUF_LEN     0x0100 
    67 #define EMA_DATA_BASE_ADDR   (0x00001900 << 2) 
     74#define EMA_DATA_BASE_ADDR   (0x00003C00 << 2) 
    6875#define EMA_WRITE_BURST      0x2 
    6976#define EMA_READ_BURST       0x2 
     
    8289static inline void init_pmu(void); 
    8390static inline void uninit_pmu(void); 
     91static inline void reset_ppe(void); 
    8492static inline void init_ema(void); 
    8593static inline void init_mailbox(void); 
     
    106114{ 
    107115    //*(unsigned long *)0xBF10201C &= ~((1 << 15) | (1 << 13) | (1 << 9)); 
    108     PPE_TOP_PMU_SETUP(IFX_PMU_ENABLE); 
     116    //PPE_TOP_PMU_SETUP(IFX_PMU_ENABLE); 
    109117    PPE_SLL01_PMU_SETUP(IFX_PMU_ENABLE); 
    110118    PPE_TC_PMU_SETUP(IFX_PMU_ENABLE); 
     
    123131    PPE_TPE_PMU_SETUP(IFX_PMU_DISABLE); 
    124132    DSL_DFE_PMU_SETUP(IFX_PMU_DISABLE); 
    125     PPE_TOP_PMU_SETUP(IFX_PMU_DISABLE); 
     133    //PPE_TOP_PMU_SETUP(IFX_PMU_DISABLE); 
     134} 
     135 
     136static inline void reset_ppe(void) 
     137{ 
     138#ifdef MODULE 
     139    //  reset PPE 
     140    //ifx_rcu_rst(IFX_RCU_DOMAIN_PPE, IFX_RCU_MODULE_ATM); 
     141#endif 
    126142} 
    127143 
     
    144160static inline void init_atm_tc(void) 
    145161{ 
    146     //  for ReTX expansion in future 
    147     //*FFSM_CFG0 = SET_BITS(*FFSM_CFG0, 5, 0, 6); //  pnum = 6 
    148     //*FFSM_CFG1 = SET_BITS(*FFSM_CFG1, 5, 0, 6); //  pnum = 6 
    149162} 
    150163 
     
    154167    unsigned int i; 
    155168 
    156     for ( i = 0; i < SB_RAM0_DWLEN + SB_RAM1_DWLEN + SB_RAM2_DWLEN + SB_RAM3_DWLEN; i++ ) 
     169    for ( i = 0; i < SB_RAM0_DWLEN + SB_RAM1_DWLEN + SB_RAM2_DWLEN + SB_RAM3_DWLEN + SB_RAM4_DWLEN; i++ ) 
    157170        IFX_REG_W32(0, p++); 
    158171} 
     
    179192        IFX_REG_W32(0x00, CDM_CFG); 
    180193    else 
    181         IFX_REG_W32(0x02, CDM_CFG); 
     194        IFX_REG_W32(0x04, CDM_CFG); 
    182195 
    183196    /*  copy code   */ 
     
    207220    ASSERT(minor != NULL, "pointer is NULL"); 
    208221 
     222#if (defined(ENABLE_ATM_RETX) && ENABLE_ATM_RETX) || defined(VER_IN_FIRMWARE) 
     223    *major = FW_VER_ID->major; 
     224    *minor = FW_VER_ID->minor; 
     225#else 
    209226    *major = ATM_FW_VER_MAJOR; 
    210227    *minor = ATM_FW_VER_MINOR; 
     228#endif 
    211229} 
    212230 
     
    214232{ 
    215233    init_pmu(); 
     234 
     235    reset_ppe(); 
    216236 
    217237    init_ema(); 
     
    248268 
    249269    /*  run PP32    */ 
    250     IFX_REG_W32(DBG_CTRL_START_SET(1), PP32_DBG_CTRL); 
     270    IFX_REG_W32(DBG_CTRL_RESTART, PP32_DBG_CTRL(0)); 
    251271 
    252272    /*  idle for a while to let PP32 init itself    */ 
     
    267287{ 
    268288    /*  halt PP32   */ 
    269     IFX_REG_W32(DBG_CTRL_STOP_SET(1), PP32_DBG_CTRL); 
    270 } 
     289    IFX_REG_W32(DBG_CTRL_STOP, PP32_DBG_CTRL(0)); 
     290} 
  • trunk/package/ltq-dsl/src/ifxmips_atm_core.c

    r27026 r28406  
    3232#define IFX_ATM_VER_MAJOR               1 
    3333#define IFX_ATM_VER_MID                 0 
    34 #define IFX_ATM_VER_MINOR               8 
     34#define IFX_ATM_VER_MINOR               19 
    3535 
    3636 
     
    4646 */ 
    4747#include <linux/kernel.h> 
     48#include <linux/vmalloc.h> 
    4849#include <linux/module.h> 
    4950#include <linux/version.h> 
     
    6162 */ 
    6263#include <lantiq_soc.h> 
     64#include "ifxmips_compat.h" 
     65#define IFX_MEI_BSP     1 
     66#include "ifxmips_mei_interface.h" 
    6367#include "ifxmips_atm_core.h" 
    6468 
     
    183187 */ 
    184188 
    185 #define DUMP_SKB_LEN                          ~0 
     189#define ENABLE_LED_FRAMEWORK                    1 
     190 
     191#define DUMP_SKB_LEN                            ~0 
    186192 
    187193 
     
    206212 *  ADSL LED 
    207213 */ 
    208 static INLINE int adsl_led_flash(void); 
     214static INLINE void adsl_led_flash(void); 
    209215 
    210216/* 
     
    252258 
    253259/* 
     260 *  ReTX functions 
     261 */ 
     262#if defined(ENABLE_ATM_RETX) && ENABLE_ATM_RETX 
     263  static void retx_polling_func(unsigned long); 
     264  static int init_atm_tc_retrans_param(void); 
     265  static void clear_atm_tc_retrans_param(void); 
     266#endif 
     267 
     268 
     269/* 
    254270 *  Debug Functions 
    255271 */ 
    256272#if defined(DEBUG_DUMP_SKB) && DEBUG_DUMP_SKB 
    257   static void dump_skb(struct sk_buff *, u32, char *, int, int, int); 
     273  static void dump_skb(struct sk_buff *, unsigned int, char *, int, int, int); 
    258274#else 
    259275  #define dump_skb(skb, len, title, port, ch, is_tx)    do {} while (0) 
     276#endif 
     277#if defined(ENABLE_DBG_PROC) && ENABLE_DBG_PROC 
     278  static void skb_swap(struct sk_buff *, unsigned int); 
     279#else 
     280  #define skb_swap(skb, byteoff)                        do {} while (0) 
    260281#endif 
    261282 
     
    268289static int proc_read_mib(char *, char **, off_t, int, int *, void *); 
    269290static int proc_write_mib(struct file *, const char *, unsigned long, void *); 
     291#if defined(ENABLE_ATM_RETX) && ENABLE_ATM_RETX 
     292  static int proc_read_retx_mib(char *, char **, off_t, int, int *, void *); 
     293  static int proc_write_retx_mib(struct file *, const char *, unsigned long, void *); 
     294#endif 
    270295#if defined(ENABLE_DBG_PROC) && ENABLE_DBG_PROC 
    271296  static int proc_read_dbg(char *, char **, off_t, int, int *, void *); 
    272297  static int proc_write_dbg(struct file *, const char *, unsigned long, void *); 
     298  static int proc_write_mem(struct file *, const char *, unsigned long, void *); 
     299 #if defined(CONFIG_AR9) || defined(CONFIG_VR9) || defined(CONFIG_DANUBE) || defined(CONFIG_AMAZON_SE) 
     300  static int proc_read_pp32(char *, char **, off_t, int, int *, void *); 
     301  static int proc_write_pp32(struct file *, const char *, unsigned long, void *); 
     302 #endif 
    273303#endif 
    274304#if defined(ENABLE_FW_PROC) && ENABLE_FW_PROC 
    275305  static int proc_read_htu(char *, char **, off_t, int, int *, void *); 
    276306  static int proc_read_txq(char *, char **, off_t, int, int *, void *); 
     307 #if defined(ENABLE_ATM_RETX) && ENABLE_ATM_RETX 
     308  static int proc_read_retx_fw(char *, char **, off_t, int, int *, void *); 
     309  static int proc_read_retx_stats(char *, char **, off_t, int, int *, void *); 
     310  static int proc_write_retx_stats(struct file *, const char *, unsigned long, void *); 
     311  static int proc_read_retx_cfg(char *, char **, off_t, int, int *, void *); 
     312  static int proc_write_retx_cfg(struct file *, const char *, unsigned long, void *); 
     313  static int proc_read_retx_dsl_param(char *, char **, off_t, int, int *, void *); 
     314 #endif 
    277315#endif 
    278316 
     
    283321#if defined(ENABLE_DBG_PROC) && ENABLE_DBG_PROC 
    284322  static int strincmp(const char *, const char *, int); 
     323  static int get_token(char **, char **, int *, int *); 
     324  static unsigned int get_number(char **, int *, int); 
     325  static void ignore_space(char **, int *); 
    285326#endif 
    286327static INLINE int ifx_atm_version(char *); 
    287 //static INLINE int print_reset_domain(char *, int); 
    288 //static INLINE int print_reset_handler(char *, int, ifx_rcu_handler_t *); 
    289328 
    290329/* 
    291330 *  Init & clean-up functions 
    292331 */ 
    293 #ifdef MODULE 
    294   static INLINE void reset_ppe(void); 
    295 #endif 
    296332static INLINE void check_parameters(void); 
    297333static INLINE int init_priv_data(void); 
     
    309345#endif 
    310346#if defined(CONFIG_IFXMIPS_DSL_CPE_MEI) || defined(CONFIG_IFXMIPS_DSL_CPE_MEI_MODULE) 
    311   extern int ifx_mei_atm_led_blink(void); 
    312   extern int ifx_mei_atm_showtime_check(int *is_showtime, struct port_cell_info *port_cell, void **xdata_addr); 
     347 #if !defined(ENABLE_LED_FRAMEWORK) || !ENABLE_LED_FRAMEWORK 
     348  extern int ifx_mei_atm_led_blink(void) __attribute__ ((weak)); 
     349 #endif 
     350  extern int ifx_mei_atm_showtime_check(int *is_showtime, struct port_cell_info *port_cell, void **xdata_addr) __attribute__ ((weak)); 
    313351#else 
     352 #if !defined(ENABLE_LED_FRAMEWORK) || !ENABLE_LED_FRAMEWORK 
    314353  static inline int ifx_mei_atm_led_blink(void) { return IFX_SUCCESS; } 
     354 #endif 
    315355  static inline int ifx_mei_atm_showtime_check(int *is_showtime, struct port_cell_info *port_cell, void **xdata_addr) 
    316356  { 
     
    324364 *  External variable 
    325365 */ 
    326 extern struct sk_buff* (*ifx_atm_alloc_tx)(struct atm_vcc *, unsigned int); 
     366struct sk_buff* (*ifx_atm_alloc_tx)(struct atm_vcc *, unsigned int) = NULL; 
     367 
     368 
     369//extern struct sk_buff* (*ifx_atm_alloc_tx)(struct atm_vcc *, unsigned int); 
    327370#if defined(CONFIG_IFXMIPS_DSL_CPE_MEI) || defined(CONFIG_IFXMIPS_DSL_CPE_MEI_MODULE) 
    328   extern int (*ifx_mei_atm_showtime_enter)(struct port_cell_info *, void *); 
    329   extern int (*ifx_mei_atm_showtime_exit)(void); 
     371  extern int (*ifx_mei_atm_showtime_enter)(struct port_cell_info *, void *) __attribute__ ((weak)); 
     372  extern int (*ifx_mei_atm_showtime_exit)(void) __attribute__ ((weak)); 
    330373#else 
    331374  int (*ifx_mei_atm_showtime_enter)(struct port_cell_info *, void *) = NULL; 
     
    350393    .ioctl      = ppe_ioctl, 
    351394    .send       = ppe_send, 
    352     .send_oam   = ppe_send_oam, 
    353     .change_qos = ppe_change_qos, 
     395    .send_oam   = ppe_send_oam, 
     396    .change_qos = ppe_change_qos, 
    354397    .owner      = THIS_MODULE, 
    355398}; 
     
    361404static int g_showtime = 0; 
    362405static void *g_xdata_addr = NULL; 
     406 
     407#if 0 /*--- defined(ENABLE_LED_FRAMEWORK) && ENABLE_LED_FRAMEWORK ---*/ 
     408  static void *g_data_led_trigger = NULL; 
     409#endif 
     410 
     411#if defined(ENABLE_ATM_RETX) && ENABLE_ATM_RETX 
     412  static unsigned long g_retx_playout_buffer = 0; 
     413 
     414  static volatile int g_retx_htu = 1; 
     415  static struct dsl_param g_dsl_param = {0}; 
     416  static int g_retx_polling_cnt = HZ; 
     417  static struct timeval g_retx_polling_start = {0}, g_retx_polling_end = {0}; 
     418  static struct timer_list g_retx_polling_timer; 
     419#endif 
    363420 
    364421unsigned int ifx_atm_dbg_enable = 0; 
     
    468525        return -EPROTONOSUPPORT; 
    469526 
     527#if !defined(DISABLE_QOS_WORKAROUND) || !DISABLE_QOS_WORKAROUND 
    470528    /*  check bandwidth */ 
    471     if ( (vcc->qos.txtp.traffic_class == ATM_CBR && vcc->qos.txtp.max_pcr > (port->tx_max_cell_rate - port->tx_current_cell_rate)) 
    472       || (vcc->qos.txtp.traffic_class == ATM_VBR_RT && vcc->qos.txtp.max_pcr > (port->tx_max_cell_rate - port->tx_current_cell_rate)) 
    473       || (vcc->qos.txtp.traffic_class == ATM_VBR_NRT && vcc->qos.txtp.scr > (port->tx_max_cell_rate - port->tx_current_cell_rate)) 
    474       || (vcc->qos.txtp.traffic_class == ATM_UBR_PLUS && vcc->qos.txtp.min_pcr > (port->tx_max_cell_rate - port->tx_current_cell_rate)) ) 
     529 
     530    if (vcc->qos.txtp.traffic_class == ATM_CBR &&  
     531                vcc->qos.txtp.max_pcr > (port->tx_max_cell_rate - port->tx_current_cell_rate)) 
    475532    { 
     533        printk("CBR set. %s, line %d returns EINVAL\n", __FUNCTION__, __LINE__); 
    476534        ret = -EINVAL; 
    477535        goto PPE_OPEN_EXIT; 
    478536    } 
     537    if(vcc->qos.txtp.traffic_class == ATM_VBR_RT &&  
     538                vcc->qos.txtp.max_pcr > (port->tx_max_cell_rate - port->tx_current_cell_rate)) 
     539    { 
     540        printk("VBR RT set. %s, line %d returns EINVAL\n", __FUNCTION__, __LINE__); 
     541        ret = -EINVAL; 
     542        goto PPE_OPEN_EXIT; 
     543    } 
     544 
     545    if (vcc->qos.txtp.traffic_class == ATM_VBR_NRT &&  
     546                vcc->qos.txtp.scr > (port->tx_max_cell_rate - port->tx_current_cell_rate)) 
     547    { 
     548        printk("VBR NRT set. %s, line %d returns EINVAL\n", __FUNCTION__, __LINE__); 
     549        ret = -EINVAL; 
     550        goto PPE_OPEN_EXIT; 
     551    } 
     552 
     553    if (vcc->qos.txtp.traffic_class == ATM_UBR_PLUS &&  
     554                vcc->qos.txtp.min_pcr > (port->tx_max_cell_rate - port->tx_current_cell_rate))  
     555    { 
     556        printk("UBR PLUS set. %s, line %d returns EINVAL\n", __FUNCTION__, __LINE__); 
     557        ret = -EINVAL; 
     558        goto PPE_OPEN_EXIT; 
     559    } 
     560 
     561#endif 
    479562 
    480563    /*  check existing vpi,vci  */ 
     
    498581    if ( conn == MAX_PVC_NUMBER ) 
    499582    { 
     583        printk("max_pvc_number reached\n"); 
    500584        ret = -EINVAL; 
    501585        goto PPE_OPEN_EXIT; 
     
    536620 
    537621    /*  set port    */ 
    538     WTX_QUEUE_CONFIG(conn)->sbid = (int)vcc->dev->dev_data; 
     622    WTX_QUEUE_CONFIG(conn + FIRST_QSB_QID)->sbid = (int)vcc->dev->dev_data; 
    539623 
    540624    /*  set htu entry   */ 
     
    567651    struct port *port; 
    568652    struct connection *connection; 
     653#if defined(ENABLE_ATM_RETX) && ENABLE_ATM_RETX 
     654    int sys_flag; 
     655#endif 
    569656 
    570657    if ( vcc == NULL ) 
     
    583670    clear_htu_entry(conn); 
    584671 
     672#if defined(ENABLE_ATM_RETX) && ENABLE_ATM_RETX 
     673    //  ReTX: release second QID 
     674    local_irq_save(sys_flag); 
     675    if ( g_retx_htu && vcc->qos.aal == ATM_AAL5 ) 
     676    { 
     677        int retx_conn = (conn + 8) % 16;    //  ReTX queue 
     678 
     679        if ( retx_conn < MAX_PVC_NUMBER && g_atm_priv_data.conn[retx_conn].vcc == vcc ) { 
     680            clear_htu_entry(retx_conn); 
     681            g_atm_priv_data.conn[retx_conn].vcc = NULL; 
     682            g_atm_priv_data.conn[retx_conn].aal5_vcc_crc_err = 0; 
     683            g_atm_priv_data.conn[retx_conn].aal5_vcc_oversize_sdu = 0; 
     684            clear_bit(retx_conn, &g_atm_priv_data.conn_table); 
     685        } 
     686    } 
     687    local_irq_restore(sys_flag); 
     688#endif 
     689 
    585690    /*  release connection  */ 
    586     clear_bit(conn, &g_atm_priv_data.conn_table); 
    587691    connection->vcc = NULL; 
    588692    connection->aal5_vcc_crc_err = 0; 
    589693    connection->aal5_vcc_oversize_sdu = 0; 
     694    clear_bit(conn, &g_atm_priv_data.conn_table); 
    590695 
    591696    /*  disable irq */ 
     
    624729        return -EINVAL; 
    625730 
     731    skb_orphan(skb); 
    626732    skb_get(skb); 
    627733    atm_free_tx_skb_vcc(skb, vcc); 
     
    733839 
    734840    /*  write discriptor to memory and write back cache */ 
     841#ifdef CONFIG_DEBUG_SLAB 
     842    /* be sure that "redzone 1" is written back to memory */ 
     843    dma_cache_wback((unsigned long)skb->head, 32); 
     844#endif 
     845    dma_cache_wback((unsigned long)skb_shinfo(skb), sizeof(struct skb_shared_info)); 
     846    dma_cache_wback((unsigned long)skb->data, skb->len); 
    735847    g_atm_priv_data.conn[conn].tx_desc[desc_base] = reg_desc; 
    736     dma_cache_wback((unsigned long)skb->data, skb->len); 
    737  
     848      
    738849    dump_skb(skb, DUMP_SKB_LEN, (char *)__func__, 0, conn, 1); 
    739850 
     
    821932    dump_skb(skb, DUMP_SKB_LEN, (char *)__func__, 0, conn, 1); 
    822933 
     934    if ( vcc->qos.aal == ATM_AAL5 && (ifx_atm_dbg_enable & DBG_ENABLE_MASK_MAC_SWAP) ) { 
     935        skb_swap(skb, reg_desc.byteoff); 
     936    } 
     937 
    823938    mailbox_signal(conn, 1); 
    824939 
     
    844959} 
    845960 
    846 static INLINE int adsl_led_flash(void) 
    847 { 
    848     return ifx_mei_atm_led_blink(); 
     961static INLINE void adsl_led_flash(void) 
     962{ 
     963#if 0 
     964#if defined(ENABLE_LED_FRAMEWORK) && ENABLE_LED_FRAMEWORK 
     965    if ( g_data_led_trigger != NULL ) 
     966        ifx_led_trigger_activate(g_data_led_trigger); 
     967#else 
     968    if (!IS_ERR(&ifx_mei_atm_led_blink) && &ifx_mei_atm_led_blink ) 
     969        ifx_mei_atm_led_blink(); 
     970#endif 
     971#endif 
    849972} 
    850973 
     
    9981121            else 
    9991122                ifx_push_oam((unsigned char *)header); 
    1000  
    10011123            adsl_led_flash(); 
    10021124        } 
     
    11341256static INLINE void mailbox_signal(unsigned int queue, int is_tx) 
    11351257{ 
     1258    int count = 1000; 
     1259 
    11361260    if ( is_tx ) { 
    1137         while ( MBOX_IGU3_ISR_ISR(queue + FIRST_QSB_QID + 16) ); 
     1261        while ( MBOX_IGU3_ISR_ISR(queue + FIRST_QSB_QID + 16) && count) 
     1262                count--; 
    11381263        *MBOX_IGU3_ISRS = MBOX_IGU3_ISRS_SET(queue + FIRST_QSB_QID + 16); 
    11391264    } 
    11401265    else { 
    1141         while ( MBOX_IGU3_ISR_ISR(queue) ); 
     1266        while ( MBOX_IGU3_ISR_ISR(queue) && count) 
     1267                count--; 
    11421268        *MBOX_IGU3_ISRS = MBOX_IGU3_ISRS_SET(queue); 
    11431269    } 
     1270    ASSERT(count != 0, "MBOX_IGU3_ISR = 0x%08x", ltq_r32(MBOX_IGU3_ISR)); 
    11441271} 
    11451272 
     
    14831610} 
    14841611 
     1612#if defined(ENABLE_ATM_RETX) && ENABLE_ATM_RETX 
     1613 
     1614static void retx_polling_func(unsigned long arg) 
     1615{ 
     1616    int sys_flag; 
     1617    volatile struct dsl_param *p_dsl_param; 
     1618    int new_retx_htu; 
     1619    int retx_en; 
     1620    int i, max_htu; 
     1621 
     1622    local_irq_save(sys_flag); 
     1623    if ( g_retx_playout_buffer == 0 && g_xdata_addr != NULL && (((volatile struct dsl_param *)g_xdata_addr)->RetxEnable || ((volatile struct dsl_param *)g_xdata_addr)->ServiceSpecificReTx) ) { 
     1624        local_irq_restore(sys_flag); 
     1625        g_retx_playout_buffer = __get_free_pages(GFP_KERNEL, RETX_PLAYOUT_BUFFER_ORDER); 
     1626        if ( g_retx_playout_buffer == 0 ) 
     1627            panic("no memory for g_retx_playout_buffer\n"); 
     1628        memset((void *)g_retx_playout_buffer, 0, RETX_PLAYOUT_BUFFER_SIZE); 
     1629        dma_cache_inv(g_retx_playout_buffer, RETX_PLAYOUT_BUFFER_SIZE); 
     1630    } 
     1631    else 
     1632        local_irq_restore(sys_flag); 
     1633 
     1634 
     1635    local_irq_save(sys_flag); 
     1636    if ( g_xdata_addr != NULL ) { 
     1637        p_dsl_param = (volatile struct dsl_param *)g_xdata_addr; 
     1638        g_retx_polling_cnt += RETX_POLLING_INTERVAL; 
     1639 
     1640        if ( p_dsl_param->update_flag ) { 
     1641            do_gettimeofday(&g_retx_polling_start); 
     1642 
     1643            g_dsl_param = *p_dsl_param; 
     1644 
     1645            // we always enable retx (just for test purpose) 
     1646            //g_dsl_param.RetxEnable = 1; 
     1647            //RETX_TSYNC_CFG->fw_alpha = 0; 
     1648 
     1649            if ( g_dsl_param.RetxEnable || g_dsl_param.ServiceSpecificReTx ) { 
     1650                //  ReTX enabled 
     1651                // MIB counter updated for each polling 
     1652                p_dsl_param->RxDtuCorruptedCNT          = *RxDTUCorruptedCNT; 
     1653                p_dsl_param->RxRetxDtuUnCorrectedCNT    = *RxRetxDTUUncorrectedCNT; 
     1654                p_dsl_param->RxLastEFB                  = *RxLastEFBCNT; 
     1655                p_dsl_param->RxDtuCorrectedCNT          = *RxDTUCorrectedCNT; 
     1656 
     1657                // for RETX paramters, we check only once for every second 
     1658                if ( g_retx_polling_cnt < HZ ) 
     1659                    goto _clear_update_flag; 
     1660 
     1661                g_retx_polling_cnt -= HZ; 
     1662 
     1663                if ( g_dsl_param.ServiceSpecificReTx && g_dsl_param.ReTxPVC == 0 ) 
     1664                    new_retx_htu = 1; 
     1665                else 
     1666                    new_retx_htu = 0; 
     1667 
     1668                // default fw_alpha equals to default hardware alpha 
     1669                RETX_TSYNC_CFG->fw_alpha    = 0; 
     1670 
     1671                RETX_TD_CFG->td_max         = g_dsl_param.MaxDelayrt; 
     1672                RETX_TD_CFG->td_min         = g_dsl_param.MinDelayrt; 
     1673 
     1674                *RETX_PLAYOUT_BUFFER_BASE   = ((((unsigned int)g_retx_playout_buffer | KSEG1) + 15) & 0xFFFFFFF0) >> 2; 
     1675 
     1676                if ( g_dsl_param.ServiceSpecificReTx ) { 
     1677                    *RETX_SERVICE_HEADER_CFG= g_dsl_param.ReTxPVC << 4; 
     1678                    if ( g_dsl_param.ReTxPVC == 0 ) 
     1679                        *RETX_MASK_HEADER_CFG = 1; 
     1680                    else 
     1681                        *RETX_MASK_HEADER_CFG = 0; 
     1682                } 
     1683                else { 
     1684                    *RETX_SERVICE_HEADER_CFG= 0; 
     1685                    *RETX_MASK_HEADER_CFG   = 0; 
     1686                } 
     1687 
     1688                retx_en = 1; 
     1689            } 
     1690            else { 
     1691                //  ReTX disabled 
     1692 
     1693                new_retx_htu = 0; 
     1694 
     1695                RETX_TSYNC_CFG->fw_alpha    = 7; 
     1696 
     1697                *RETX_SERVICE_HEADER_CFG    = 0; 
     1698                *RETX_MASK_HEADER_CFG       = 0; 
     1699 
     1700                retx_en = 0; 
     1701            } 
     1702 
     1703 
     1704            if ( retx_en != RETX_MODE_CFG->retx_en ) { 
     1705                unsigned int pid_mask, vci_mask; 
     1706 
     1707                if ( retx_en ) { 
     1708                    pid_mask = 0x03; 
     1709                    vci_mask = 0xFF00; 
     1710                } 
     1711                else { 
     1712                    pid_mask = 0x02; 
     1713                    vci_mask = 0x0000; 
     1714                } 
     1715 
     1716                max_htu = *CFG_WRX_HTUTS; 
     1717                for ( i = OAM_HTU_ENTRY_NUMBER; i < max_htu; i++ ) 
     1718                    if ( HTU_ENTRY(i)->vld ) { 
     1719                        HTU_MASK(i)->pid_mask = pid_mask; 
     1720                        HTU_MASK(i)->vci_mask = vci_mask; 
     1721                    } 
     1722            } 
     1723 
     1724            if ( new_retx_htu != g_retx_htu ) { 
     1725                int conn, retx_conn; 
     1726 
     1727                g_retx_htu = new_retx_htu; 
     1728 
     1729                if ( g_retx_htu ) { 
     1730                    max_htu = *CFG_WRX_HTUTS; 
     1731                    for ( i = OAM_HTU_ENTRY_NUMBER; i < max_htu; i++ ) 
     1732                        if ( HTU_ENTRY(i)->vld ) 
     1733                            HTU_MASK(i)->clp = 0; 
     1734 
     1735                    for ( conn = 0; conn < MAX_PVC_NUMBER; conn++ ) 
     1736                        if ( g_atm_priv_data.conn[conn].vcc && g_atm_priv_data.conn[conn].vcc->qos.aal == ATM_AAL5 && !HTU_ENTRY(conn + OAM_HTU_ENTRY_NUMBER)->clp ) { 
     1737                            retx_conn = (conn + 8) % 16;    //  ReTX queue 
     1738 
     1739                            if ( retx_conn < MAX_PVC_NUMBER && test_and_set_bit(retx_conn, &g_atm_priv_data.conn_table) == 0 ) { 
     1740                                g_atm_priv_data.conn[retx_conn].vcc = g_atm_priv_data.conn[conn].vcc; 
     1741                                set_htu_entry(g_atm_priv_data.conn[conn].vcc->vpi, g_atm_priv_data.conn[conn].vcc->vci, retx_conn, g_atm_priv_data.conn[conn].vcc->qos.aal == ATM_AAL5 ? 1 : 0, 1); 
     1742                            } 
     1743                            else { 
     1744                                err("Queue number %d for ReTX queue of PVC(%d.%d) is not available!", retx_conn, g_atm_priv_data.conn[conn].vcc->vpi, g_atm_priv_data.conn[conn].vcc->vci); 
     1745                            } 
     1746                        } 
     1747                } 
     1748                else 
     1749                { 
     1750                    for ( retx_conn = 0; retx_conn < MAX_PVC_NUMBER; retx_conn++ ) 
     1751                        if ( g_atm_priv_data.conn[retx_conn].vcc && HTU_ENTRY(retx_conn + OAM_HTU_ENTRY_NUMBER)->clp ) { 
     1752                            clear_htu_entry(retx_conn); 
     1753                            g_atm_priv_data.conn[retx_conn].vcc = NULL; 
     1754                            g_atm_priv_data.conn[retx_conn].aal5_vcc_crc_err = 0; 
     1755                            g_atm_priv_data.conn[retx_conn].aal5_vcc_oversize_sdu = 0; 
     1756                            clear_bit(retx_conn, &g_atm_priv_data.conn_table); 
     1757                        } 
     1758 
     1759                    max_htu = *CFG_WRX_HTUTS; 
     1760                    for ( i = OAM_HTU_ENTRY_NUMBER; i < max_htu; i++ ) 
     1761                        if ( HTU_ENTRY(i)->vld ) 
     1762                            HTU_MASK(i)->clp = 1; 
     1763                } 
     1764            } 
     1765 
     1766            RETX_MODE_CFG->retx_en = retx_en; 
     1767 
     1768_clear_update_flag: 
     1769            p_dsl_param->update_flag = 0; 
     1770 
     1771            do_gettimeofday(&g_retx_polling_end); 
     1772        } 
     1773 
     1774        g_retx_polling_timer.expires = jiffies + RETX_POLLING_INTERVAL; 
     1775        add_timer(&g_retx_polling_timer); 
     1776    } 
     1777    local_irq_restore(sys_flag); 
     1778} 
     1779 
     1780static int init_atm_tc_retrans_param(void) 
     1781{ 
     1782    int i = 0; 
     1783    struct DTU_stat_info reset_val; 
     1784 
     1785    RETX_MODE_CFG->invld_range  = 128; 
     1786    RETX_MODE_CFG->buff_size    = RETX_PLAYOUT_FW_BUFF_SIZE > 4096/32 ? 4096/32 : RETX_PLAYOUT_FW_BUFF_SIZE ; 
     1787    RETX_MODE_CFG->retx_en      = 1; 
     1788 
     1789    // default fw_alpha equals to default hardware alpha 
     1790    RETX_TSYNC_CFG->fw_alpha    = 7; 
     1791    RETX_TSYNC_CFG->sync_inp    = 0; 
     1792 
     1793    RETX_TD_CFG->td_max         = 0; 
     1794    RETX_TD_CFG->td_min         = 0; 
     1795 
     1796    // *RETX_PLAYOUT_BUFFER_BASE   = KSEG1ADDR(g_retx_playout_buffer); //  need " >> 2 " ? 
     1797    *RETX_PLAYOUT_BUFFER_BASE       = ((((unsigned int)g_retx_playout_buffer | KSEG1) + 15) & 0xFFFFFFF0) >> 2; 
     1798 
     1799    *RETX_SERVICE_HEADER_CFG    = 0; 
     1800    *RETX_MASK_HEADER_CFG       = 0; 
     1801 
     1802    // 20us 
     1803    RETX_MIB_TIMER_CFG->tick_cycle = 4800; 
     1804    RETX_MIB_TIMER_CFG->ticks_per_sec = 50000; 
     1805 
     1806    *LAST_DTU_SID_IN            = 255; 
     1807    *RFBI_FIRST_CW              = 1; 
     1808    // init DTU_STAT_INFO 
     1809 
     1810    memset(&reset_val, 0, sizeof(reset_val)); 
     1811    reset_val.dtu_rd_ptr = reset_val.dtu_wr_ptr = 0xffff; 
     1812 
     1813    for(i = 0 ; i < 256; i ++) { 
     1814        DTU_STAT_INFO[i] = reset_val; 
     1815    } 
     1816    return 0; 
     1817} 
     1818 
     1819static void clear_atm_tc_retrans_param(void) 
     1820{ 
     1821    if ( g_retx_playout_buffer ) { 
     1822        free_pages(g_retx_playout_buffer, RETX_PLAYOUT_BUFFER_ORDER); 
     1823        g_retx_playout_buffer = 0; 
     1824    } 
     1825} 
     1826 
     1827#endif 
     1828 
    14851829#if defined(DEBUG_DUMP_SKB) && DEBUG_DUMP_SKB 
    1486 static void dump_skb(struct sk_buff *skb, u32 len, char *title, int port, int ch, int is_tx) 
     1830static void dump_skb(struct sk_buff *skb, unsigned int len, char *title, int port, int ch, int is_tx) 
    14871831{ 
    14881832    int i; 
     
    14951839 
    14961840    if ( len > RX_DMA_CH_AAL_BUF_SIZE ) { 
    1497         printk("too big data length: skb = %08x, skb->data = %08x, skb->len = %d\n", (u32)skb, (u32)skb->data, skb->len); 
     1841        printk("too big data length: skb = %08x, skb->data = %08x, skb->len = %d\n", (unsigned int)skb, (unsigned int)skb->data, skb->len); 
    14981842        return; 
    14991843    } 
     
    15031847    else 
    15041848        printk("%s\n", title); 
    1505     printk("  skb->data = %08X, skb->tail = %08X, skb->len = %d\n", (u32)skb->data, (u32)skb->tail, (int)skb->len); 
     1849    printk("  skb->data = %08X, skb->tail = %08X, skb->len = %d\n", (unsigned int)skb->data, (unsigned int)skb->tail, (int)skb->len); 
    15061850    for ( i = 1; i <= len; i++ ) { 
    15071851        if ( i % 16 == 1 ) 
     
    15161860#endif 
    15171861 
     1862#if defined(ENABLE_DBG_PROC) && ENABLE_DBG_PROC 
     1863static void skb_swap(struct sk_buff *skb, unsigned int byteoff) 
     1864{ 
     1865    unsigned int mac_offset = ~0; 
     1866    unsigned int ip_offset = ~0; 
     1867    unsigned char tmp[8]; 
     1868    unsigned char *p = NULL; 
     1869 
     1870    skb_pull(skb, byteoff + TX_INBAND_HEADER_LENGTH); 
     1871 
     1872    if ( skb->data[0] == 0xAA && skb->data[1] == 0xAA && skb->data[2] == 0x03 ) { 
     1873        //  LLC 
     1874        if ( skb->data[3] == 0x00 && skb->data[4] == 0x80 && skb->data[5] == 0xC2 ) { 
     1875            //  EoA 
     1876            if ( skb->data[22] == 0x08 && skb->data[23] == 0x00 ) { 
     1877                //  IPv4 
     1878                mac_offset = 10; 
     1879                ip_offset = 24; 
     1880            } 
     1881            else if ( skb->data[31] == 0x21 ) { 
     1882                //  PPPoE IPv4 
     1883                mac_offset = 10; 
     1884                ip_offset = 32; 
     1885            } 
     1886        } 
     1887        else { 
     1888            //  IPoA 
     1889            if ( skb->data[6] == 0x08 && skb->data[7] == 0x00 ) { 
     1890                //  IPv4 
     1891                ip_offset = 8; 
     1892            } 
     1893        } 
     1894    } 
     1895    else if ( skb->data[0] == 0xFE && skb->data[1] == 0xFE && skb->data[2] == 0x03 ) { 
     1896        //  LLC PPPoA 
     1897        if ( skb->data[4] == 0x00 && skb->data[5] == 0x21 ) { 
     1898            //  IPv4 
     1899            ip_offset = 6; 
     1900        } 
     1901    } 
     1902    else { 
     1903        //  VC-mux 
     1904        if ( skb->data[0] == 0x00 && skb->data[1] == 0x21 ) { 
     1905            //  PPPoA IPv4 
     1906            ip_offset = 2; 
     1907        } 
     1908        else if ( skb->data[0] == 0x00 && skb->data[1] == 0x00 ) { 
     1909            //  EoA 
     1910            if ( skb->data[14] == 0x08 && skb->data[15] ==0x00 ) { 
     1911                //  IPv4 
     1912                mac_offset = 2; 
     1913                ip_offset = 16; 
     1914            } 
     1915            else if ( skb->data[23] == 0x21 ) { 
     1916                //  PPPoE IPv4 
     1917                mac_offset = 2; 
     1918                ip_offset = 26; 
     1919            } 
     1920        } 
     1921        else { 
     1922            //  IPoA 
     1923            ip_offset = 0; 
     1924        } 
     1925    } 
     1926 
     1927    if ( mac_offset != ~0 && !(skb->data[mac_offset] & 0x01) ) { 
     1928        p = skb->data + mac_offset; 
     1929        //  swap MAC 
     1930        memcpy(tmp, p, 6); 
     1931        memcpy(p, p + 6, 6); 
     1932        memcpy(p + 6, tmp, 6); 
     1933        p += 12; 
     1934    } 
     1935 
     1936    if ( ip_offset != ~0 ) { 
     1937        p = skb->data + ip_offset + 12; 
     1938        //  swap IP 
     1939        memcpy(tmp, p, 4); 
     1940        memcpy(p, p + 4, 4); 
     1941        memcpy(p + 4, tmp, 4); 
     1942        p += 8; 
     1943    } 
     1944 
     1945    if ( p != NULL ) { 
     1946        dma_cache_wback((unsigned long)skb->data, (unsigned long)p - (unsigned long)skb->data); 
     1947    } 
     1948 
     1949    skb_push(skb, byteoff + TX_INBAND_HEADER_LENGTH); 
     1950} 
     1951#endif 
     1952 
    15181953static INLINE void proc_file_create(void) 
    15191954{ 
    1520 #if defined(ENABLE_DBG_PROC) && ENABLE_DBG_PROC 
    15211955    struct proc_dir_entry *res; 
    1522 #endif 
    15231956 
    15241957    g_atm_dir = proc_mkdir("driver/ifx_atm", NULL); 
    15251958 
    15261959    create_proc_read_entry("version", 
    1527                             0, 
    1528                             g_atm_dir, 
    1529                             proc_read_version, 
    1530                             NULL); 
     1960                           0, 
     1961                           g_atm_dir, 
     1962                           proc_read_version, 
     1963                           NULL); 
    15311964 
    15321965    res = create_proc_entry("mib", 
     
    15341967                            g_atm_dir); 
    15351968    if ( res != NULL ) { 
    1536         res->read_proc  = proc_read_mib; 
    1537         res->write_proc = proc_write_mib; 
    1538     } 
     1969       res->read_proc  = proc_read_mib; 
     1970       res->write_proc = proc_write_mib; 
     1971    } 
     1972 
     1973#if defined(ENABLE_ATM_RETX) && ENABLE_ATM_RETX 
     1974    res = create_proc_entry("retx_mib", 
     1975                            0, 
     1976                            g_atm_dir); 
     1977    if ( res != NULL ) { 
     1978       res->read_proc  = proc_read_retx_mib; 
     1979       res->write_proc = proc_write_retx_mib; 
     1980    } 
     1981#endif 
    15391982 
    15401983#if defined(ENABLE_DBG_PROC) && ENABLE_DBG_PROC 
     
    15431986                            g_atm_dir); 
    15441987    if ( res != NULL ) { 
    1545         res->read_proc  = proc_read_dbg; 
    1546         res->write_proc = proc_write_dbg; 
    1547     } 
     1988       res->read_proc  = proc_read_dbg; 
     1989       res->write_proc = proc_write_dbg; 
     1990    } 
     1991 
     1992    res = create_proc_entry("mem", 
     1993                            0, 
     1994                            g_atm_dir); 
     1995    if ( res != NULL ) 
     1996       res->write_proc = proc_write_mem; 
     1997 
     1998 #if defined(CONFIG_AR9) || defined(CONFIG_VR9) || defined(CONFIG_DANUBE) || defined(CONFIG_AMAZON_SE) 
     1999    res = create_proc_entry("pp32", 
     2000                            0, 
     2001                            g_atm_dir); 
     2002    if ( res != NULL ) { 
     2003       res->read_proc  = proc_read_pp32; 
     2004       res->write_proc = proc_write_pp32; 
     2005    } 
     2006 #endif 
    15482007#endif 
    15492008 
     
    15562015 
    15572016    create_proc_read_entry("txq", 
     2017                           0, 
     2018                           g_atm_dir, 
     2019                           proc_read_txq, 
     2020                           NULL); 
     2021 
     2022 #if defined(ENABLE_ATM_RETX) && ENABLE_ATM_RETX 
     2023    create_proc_read_entry("retx_fw", 
     2024                           0, 
     2025                           g_atm_dir, 
     2026                           proc_read_retx_fw, 
     2027                           NULL); 
     2028 
     2029    res = create_proc_entry("retx_stats", 
     2030                            0, 
     2031                            g_atm_dir); 
     2032    if ( res != NULL ) { 
     2033        res->read_proc  = proc_read_retx_stats; 
     2034        res->write_proc = proc_write_retx_stats; 
     2035    } 
     2036 
     2037    res = create_proc_entry("retx_cfg", 
     2038                            0, 
     2039                            g_atm_dir); 
     2040    if ( res != NULL ) { 
     2041        res->read_proc  = proc_read_retx_cfg; 
     2042        res->write_proc = proc_write_retx_cfg; 
     2043    } 
     2044 
     2045    create_proc_read_entry("retx_dsl_param", 
    15582046                            0, 
    15592047                            g_atm_dir, 
    1560                             proc_read_txq, 
     2048                            proc_read_retx_dsl_param, 
    15612049                            NULL); 
     2050 #endif 
    15622051#endif 
    15632052} 
     
    15662055{ 
    15672056#if defined(ENABLE_FW_PROC) && ENABLE_FW_PROC 
     2057 #if defined(ENABLE_ATM_RETX) && ENABLE_ATM_RETX 
     2058    remove_proc_entry("retx_dsl_param", g_atm_dir); 
     2059 
     2060    remove_proc_entry("retx_cfg", g_atm_dir); 
     2061 
     2062    remove_proc_entry("retx_stats", g_atm_dir); 
     2063 
     2064    remove_proc_entry("retx_fw", g_atm_dir); 
     2065 #endif 
     2066 
    15682067    remove_proc_entry("txq", g_atm_dir); 
    15692068 
     
    15722071 
    15732072#if defined(ENABLE_DBG_PROC) && ENABLE_DBG_PROC 
     2073 #if defined(CONFIG_AR9) || defined(CONFIG_VR9) || defined(CONFIG_DANUBE) || defined(CONFIG_AMAZON_SE) 
     2074    remove_proc_entry("pp32", g_atm_dir); 
     2075 #endif 
     2076 
     2077    remove_proc_entry("mem", g_atm_dir); 
     2078 
    15742079    remove_proc_entry("dbg", g_atm_dir); 
    15752080#endif 
     2081 
     2082#if defined(ENABLE_ATM_RETX) && ENABLE_ATM_RETX 
     2083    remove_proc_entry("retx_mib", g_atm_dir); 
     2084#endif 
     2085 
     2086    remove_proc_entry("mib", g_atm_dir); 
    15762087 
    15772088    remove_proc_entry("version", g_atm_dir); 
     
    16282139static int proc_write_mib(struct file *file, const char *buf, unsigned long count, void *data) 
    16292140{ 
    1630     char str[2048]; 
     2141    char str[1024]; 
    16312142    char *p; 
    16322143    int len, rlen; 
     
    16542165} 
    16552166 
     2167#if defined(ENABLE_ATM_RETX) && ENABLE_ATM_RETX 
     2168 
     2169static int proc_read_retx_mib(char *page, char **start, off_t off, int count, int *eof, void *data) 
     2170{ 
     2171    int len = 0; 
     2172 
     2173    printk("Retx FW DTU MIB :\n"); 
     2174    printk("  rx_total_dtu            = %u\n", *URETX_RX_TOTAL_DTU); 
     2175    printk("  rx_bad_dtu              = %u\n", *URETX_RX_BAD_DTU); 
     2176    printk("  rx_good_dtu             = %u\n", *URETX_RX_GOOD_DTU); 
     2177    printk("  rx_corrected_dtu        = %u\n", *URETX_RX_CORRECTED_DTU); 
     2178    printk("  rx_outofdate_dtu        = %u\n", *URETX_RX_OUTOFDATE_DTU); 
     2179    printk("  rx_duplicate_dtu        = %u\n", *URETX_RX_DUPLICATE_DTU); 
     2180    printk("  rx_timeout_dtu          = %u\n", *URETX_RX_TIMEOUT_DTU); 
     2181    printk("  RxDTURetransmittedCNT   = %u\n", *RxDTURetransmittedCNT); 
     2182    printk("\n"); 
     2183 
     2184    printk("Retx Standard DTU MIB:\n"); 
     2185    printk("  RxLastEFB               = %u\n", *RxLastEFBCNT); 
     2186    printk("  RxDTUCorrectedCNT       = %u\n", *RxDTUCorrectedCNT); 
     2187    printk("  RxDTUCorruptedCNT       = %u\n", *RxDTUCorruptedCNT); 
     2188    printk("  RxRetxDTUUncorrectedCNT = %u\n", *RxRetxDTUUncorrectedCNT); 
     2189    printk("\n"); 
     2190 
     2191    printk("Retx FW Cell MIB :\n"); 
     2192    printk("  bc0_total_cell          = %u\n", *WRX_BC0_CELL_NUM); 
     2193    printk("  bc0_drop_cell           = %u\n", *WRX_BC0_DROP_CELL_NUM); 
     2194    printk("  bc0_nonretx_cell        = %u\n", *WRX_BC0_NONRETX_CELL_NUM); 
     2195    printk("  bc0_retx_cell           = %u\n", *WRX_BC0_RETX_CELL_NUM); 
     2196    printk("  bc0_outofdate_cell      = %u\n", *WRX_BC0_OUTOFDATE_CELL_NUM); 
     2197    printk("  bc0_directup_cell       = %u\n", *WRX_BC0_DIRECTUP_NUM); 
     2198    printk("  bc0_to_pb_total_cell    = %u\n", *WRX_BC0_PBW_TOTAL_NUM); 
     2199    printk("  bc0_to_pb_succ_cell     = %u\n", *WRX_BC0_PBW_SUCC_NUM); 
     2200    printk("  bc0_to_pb_fail_cell     = %u\n", *WRX_BC0_PBW_FAIL_NUM); 
     2201    printk("  bc1_total_cell          = %u\n", *WRX_BC1_CELL_NUM); 
     2202 
     2203    printk("\n"); 
     2204 
     2205    printk("ATM Rx AAL5/OAM MIB:\n"); 
     2206    printk("  wrx_drophtu_cell  = %u\n", WAN_MIB_TABLE->wrx_drophtu_cell); 
     2207    printk("  wrx_dropdes_pdu   = %u\n", WAN_MIB_TABLE->wrx_dropdes_pdu); 
     2208 
     2209    printk("  wrx_correct_pdu   = %-10u  ", WAN_MIB_TABLE->wrx_correct_pdu); 
     2210    if ( WAN_MIB_TABLE->wrx_correct_pdu == 0 ) 
     2211        printk("\n"); 
     2212    else { 
     2213        int i = 0; 
     2214 
     2215        printk("[ "); 
     2216        for ( i = 0; i < 16; ++i ) { 
     2217            if ( WRX_PER_PVC_CORRECT_PDU_BASE[i] ) 
     2218                printk("q%-2d = %-10u , ", i, WRX_PER_PVC_CORRECT_PDU_BASE[i]); 
     2219        } 
     2220        printk("]\n"); 
     2221    } 
     2222 
     2223    printk("  wrx_err_pdu       = %-10u  ", WAN_MIB_TABLE->wrx_err_pdu); 
     2224    if ( WAN_MIB_TABLE->wrx_err_pdu == 0 ) 
     2225        printk("\n"); 
     2226    else { 
     2227        int i = 0; 
     2228 
     2229        printk("[ "); 
     2230        for ( i = 0; i < 16; ++i ) { 
     2231            if ( WRX_PER_PVC_ERROR_PDU_BASE[i] ) 
     2232                printk("q%-2d = %-10u , ", i,  WRX_PER_PVC_ERROR_PDU_BASE[i] ); 
     2233        } 
     2234        printk("]\n"); 
     2235    } 
     2236 
     2237    printk("  wrx_dropdes_cell  = %u\n", WAN_MIB_TABLE->wrx_dropdes_cell); 
     2238    printk("  wrx_correct_cell  = %u\n", WAN_MIB_TABLE->wrx_correct_cell); 
     2239    printk("  wrx_err_cell      = %u\n", WAN_MIB_TABLE->wrx_err_cell); 
     2240    printk("  wrx_total_byte    = %u\n", WAN_MIB_TABLE->wrx_total_byte); 
     2241    printk("\n"); 
     2242 
     2243    printk("ATM Tx MIB:\n"); 
     2244    printk("  wtx_total_pdu     = %u\n", WAN_MIB_TABLE->wtx_total_pdu); 
     2245    printk("  wtx_total_cell    = %u\n", WAN_MIB_TABLE->wtx_total_cell); 
     2246    printk("  wtx_total_byte    = %u\n", WAN_MIB_TABLE->wtx_total_byte); 
     2247    printk("\n"); 
     2248 
     2249    printk("Debugging Info:\n"); 
     2250    printk("  Firmware version                 = %d.%d.%d.%d.%d.%d\n", 
     2251            (int)FW_VER_ID->family, (int)FW_VER_ID->fwtype, (int)FW_VER_ID->interface, 
     2252            (int)FW_VER_ID->fwmode, (int)FW_VER_ID->major, (int)FW_VER_ID->minor); 
     2253 
     2254    printk("  retx_alpha_switch_to_hunt_times  = %u\n", *URETX_ALPHA_SWITCH_TO_HUNT_TIMES); 
     2255 
     2256    printk("\n"); 
     2257 
     2258    *eof = 1; 
     2259 
     2260    return len; 
     2261} 
     2262 
     2263static int proc_write_retx_mib(struct file *file, const char *buf, unsigned long count, void *data) 
     2264{ 
     2265    char str[2048]; 
     2266    char *p; 
     2267    int len, rlen; 
     2268    int i; 
     2269 
     2270    len = count < sizeof(str) ? count : sizeof(str) - 1; 
     2271    rlen = len - copy_from_user(str, buf, len); 
     2272    while ( rlen && str[rlen - 1] <= ' ' ) 
     2273        rlen--; 
     2274    str[rlen] = 0; 
     2275    for ( p = str; *p && *p <= ' '; p++, rlen-- ); 
     2276    if ( !*p ) 
     2277        return 0; 
     2278 
     2279    if ( stricmp(p, "clean") == 0 || stricmp(p, "clear") == 0 || stricmp(p, "clear_all") == 0) { 
     2280        *URETX_RX_TOTAL_DTU         = 0; 
     2281        *URETX_RX_BAD_DTU           = 0; 
     2282        *URETX_RX_GOOD_DTU          = 0; 
     2283        *URETX_RX_CORRECTED_DTU     = 0; 
     2284        *URETX_RX_OUTOFDATE_DTU     = 0; 
     2285        *URETX_RX_DUPLICATE_DTU     = 0; 
     2286        *URETX_RX_TIMEOUT_DTU       = 0; 
     2287        *RxDTURetransmittedCNT      = 0; 
     2288 
     2289        *WRX_BC0_CELL_NUM           = 0; 
     2290        *WRX_BC0_DROP_CELL_NUM      = 0; 
     2291        *WRX_BC0_NONRETX_CELL_NUM   = 0; 
     2292        *WRX_BC0_RETX_CELL_NUM      = 0; 
     2293        *WRX_BC0_OUTOFDATE_CELL_NUM = 0; 
     2294        *WRX_BC0_DIRECTUP_NUM       = 0; 
     2295        *WRX_BC0_PBW_TOTAL_NUM      = 0; 
     2296        *WRX_BC0_PBW_SUCC_NUM       = 0; 
     2297        *WRX_BC0_PBW_FAIL_NUM       = 0; 
     2298        *WRX_BC1_CELL_NUM           = 0; 
     2299 
     2300        for ( i = 0; i < 16; ++i ) { 
     2301            WRX_PER_PVC_CORRECT_PDU_BASE[i] = 0; 
     2302            WRX_PER_PVC_ERROR_PDU_BASE[i]   = 0; 
     2303        } 
     2304 
     2305        WAN_MIB_TABLE->wrx_drophtu_cell = 0; 
     2306        WAN_MIB_TABLE->wrx_dropdes_pdu  = 0; 
     2307        WAN_MIB_TABLE->wrx_correct_pdu  = 0; 
     2308        WAN_MIB_TABLE->wrx_err_pdu      = 0; 
     2309        WAN_MIB_TABLE->wrx_dropdes_cell = 0; 
     2310        WAN_MIB_TABLE->wrx_correct_cell = 0; 
     2311        WAN_MIB_TABLE->wrx_err_cell     = 0; 
     2312        WAN_MIB_TABLE->wrx_total_byte   = 0; 
     2313 
     2314        WAN_MIB_TABLE->wtx_total_pdu    = 0; 
     2315        WAN_MIB_TABLE->wtx_total_cell   = 0; 
     2316        WAN_MIB_TABLE->wtx_total_byte   = 0; 
     2317 
     2318        *URETX_ALPHA_SWITCH_TO_HUNT_TIMES   = 0; 
     2319 
     2320        if (stricmp(p, "clear_all") == 0) { 
     2321            *RxLastEFBCNT      = 0; 
     2322            *RxDTUCorrectedCNT = 0; 
     2323            *RxDTUCorruptedCNT = 0; 
     2324            *RxRetxDTUUncorrectedCNT = 0; 
     2325        } 
     2326    } 
     2327 
     2328    return count; 
     2329} 
     2330 
     2331#endif 
     2332 
    16562333#if defined(ENABLE_DBG_PROC) && ENABLE_DBG_PROC 
    16572334 
     
    16672344    len += sprintf(page + off + len, "qos         - %s\n", (ifx_atm_dbg_enable & DBG_ENABLE_MASK_DUMP_QOS)      ? "enabled" : "disabled"); 
    16682345    len += sprintf(page + off + len, "dump init   - %s\n", (ifx_atm_dbg_enable & DBG_ENABLE_MASK_DUMP_INIT)     ? "enabled" : "disabled"); 
     2346    len += sprintf(page + off + len, "mac swap    - %s\n", (ifx_atm_dbg_enable & DBG_ENABLE_MASK_MAC_SWAP)      ? "enabled" : "disabled"); 
    16692347 
    16702348    *eof = 1; 
     
    16902368        " dump init", 
    16912369        " init", 
     2370        " mac swap", 
     2371        " swap", 
    16922372        " all" 
    16932373    }; 
     
    17002380        9,  4, 
    17012381        10, 5, 
     2382        9,  5, 
    17022383        4 
    17032384    }; 
    1704     u32 dbg_enable_mask[] = { 
     2385    unsigned int dbg_enable_mask[] = { 
    17052386        DBG_ENABLE_MASK_ERR, 
    17062387        DBG_ENABLE_MASK_DEBUG_PRINT, 
     
    17102391        DBG_ENABLE_MASK_DUMP_QOS, 
    17112392        DBG_ENABLE_MASK_DUMP_INIT, 
     2393        DBG_ENABLE_MASK_MAC_SWAP, 
    17122394        DBG_ENABLE_MASK_ALL 
    17132395    }; 
    17142396 
    1715     char str[2048]; 
     2397    char *str; 
     2398        int str_buff_len = 1024; 
    17162399    char *p; 
    17172400 
     
    17202403    int f_enable = 0; 
    17212404    int i; 
    1722  
    1723     len = count < sizeof(str) ? count : sizeof(str) - 1; 
     2405         
     2406        str = vmalloc(str_buff_len); 
     2407        if(!str){ 
     2408                return 0; 
     2409        } 
     2410 
     2411    len = count < str_buff_len ? count : str_buff_len - 1; 
    17242412    rlen = len - copy_from_user(str, buf, len); 
    17252413    while ( rlen && str[rlen - 1] <= ' ' ) 
     
    17272415    str[rlen] = 0; 
    17282416    for ( p = str; *p && *p <= ' '; p++, rlen-- ); 
    1729     if ( !*p ) 
     2417    if ( !*p ){ 
     2418                vfree(str); 
    17302419        return 0; 
     2420        } 
    17312421 
    17322422    if ( strincmp(p, "enable", 6) == 0 ) { 
     
    17452435        if ( *p == 0 ) { 
    17462436            if ( f_enable > 0 ) 
    1747                 ifx_atm_dbg_enable |= DBG_ENABLE_MASK_ALL; 
     2437                ifx_atm_dbg_enable |= DBG_ENABLE_MASK_ALL & ~DBG_ENABLE_MASK_MAC_SWAP; 
    17482438            else 
    1749                 ifx_atm_dbg_enable &= ~DBG_ENABLE_MASK_ALL; 
     2439                ifx_atm_dbg_enable &= ~DBG_ENABLE_MASK_ALL | DBG_ENABLE_MASK_MAC_SWAP; 
    17502440        } 
    17512441        else { 
     
    17642454    } 
    17652455 
     2456        vfree(str); 
    17662457    return count; 
    17672458} 
     2459 
     2460static inline unsigned long sb_addr_to_fpi_addr_convert(unsigned long sb_addr) 
     2461{ 
     2462 #define PP32_SB_ADDR_END        0xFFFF 
     2463 
     2464    if ( sb_addr < PP32_SB_ADDR_END ) 
     2465        return (unsigned long)SB_BUFFER(sb_addr); 
     2466    else 
     2467        return sb_addr; 
     2468} 
     2469 
     2470static int proc_write_mem(struct file *file, const char *buf, unsigned long count, void *data) 
     2471{ 
     2472    char *p1, *p2; 
     2473    int len; 
     2474    int colon; 
     2475    unsigned long *p; 
     2476    int i, n, l; 
     2477        int local_buf_size = 1024; 
     2478    char *local_buf = NULL; 
     2479 
     2480        local_buf = vmalloc(local_buf_size); 
     2481        if ( !local_buf ){ 
     2482                return 0; 
     2483        } 
     2484 
     2485    len = local_buf_size < count ? local_buf_size - 1 : count; 
     2486    len = len - copy_from_user(local_buf, buf, len); 
     2487    local_buf[len] = 0; 
     2488 
     2489    p1 = local_buf; 
     2490    colon = 1; 
     2491    while ( get_token(&p1, &p2, &len, &colon) ) { 
     2492        if ( stricmp(p1, "w") == 0 || stricmp(p1, "write") == 0 || stricmp(p1, "r") == 0 || stricmp(p1, "read") == 0 ) 
     2493            break; 
     2494 
     2495        p1 = p2; 
     2496        colon = 1; 
     2497    } 
     2498 
     2499    if ( *p1 == 'w' ) { 
     2500        ignore_space(&p2, &len); 
     2501        p = (unsigned long *)get_number(&p2, &len, 1); 
     2502        p = (unsigned long *)sb_addr_to_fpi_addr_convert((unsigned long)p); 
     2503 
     2504        if ( (unsigned int)p >= KSEG0 ) 
     2505            while ( 1 ) { 
     2506                ignore_space(&p2, &len); 
     2507                if ( !len || !((*p2 >= '0' && *p2 <= '9') || (*p2 >= 'a' && *p2 <= 'f') || (*p2 >= 'A' && *p2 <= 'F')) ) 
     2508                    break; 
     2509 
     2510                *p++ = (unsigned int)get_number(&p2, &len, 1); 
     2511            } 
     2512    } 
     2513    else if ( *p1 == 'r' ) { 
     2514        ignore_space(&p2, &len); 
     2515        p = (unsigned long *)get_number(&p2, &len, 1); 
     2516        p = (unsigned long *)sb_addr_to_fpi_addr_convert((unsigned long)p); 
     2517 
     2518        if ( (unsigned int)p >= KSEG0 ) { 
     2519            ignore_space(&p2, &len); 
     2520            n = (int)get_number(&p2, &len, 0); 
     2521            if ( n ) { 
     2522                char str[32] = {0}; 
     2523                char *pch = str; 
     2524                int k; 
     2525                unsigned int data; 
     2526                char c; 
     2527 
     2528                n += (l = ((int)p >> 2) & 0x03); 
     2529                p = (unsigned long *)((unsigned int)p & ~0x0F); 
     2530                for ( i = 0; i < n; i++ ) { 
     2531                    if ( (i & 0x03) == 0 ) { 
     2532                        printk("%08X:", (unsigned int)p); 
     2533                        pch = str; 
     2534                    } 
     2535                    if ( i < l ) { 
     2536                        printk("         "); 
     2537                        sprintf(pch, "    "); 
     2538                    } 
     2539                    else { 
     2540                        data = (unsigned int)*p; 
     2541                        printk(" %08X", data); 
     2542                        for ( k = 0; k < 4; k++ ) { 
     2543                            c = ((char*)&data)[k]; 
     2544                            pch[k] = c < ' ' ? '.' : c; 
     2545                        } 
     2546                    } 
     2547                    p++; 
     2548                    pch += 4; 
     2549                    if ( (i & 0x03) == 0x03 ) { 
     2550                        pch[0] = 0; 
     2551                        printk(" ; %s\n", str); 
     2552                    } 
     2553                } 
     2554                if ( (n & 0x03) != 0x00 ) { 
     2555                    for ( k = 4 - (n & 0x03); k > 0; k-- ) 
     2556                        printk("         "); 
     2557                    pch[0] = 0; 
     2558                    printk(" ; %s\n", str); 
     2559                } 
     2560            } 
     2561        } 
     2562    } 
     2563 
     2564        vfree(local_buf); 
     2565    return count; 
     2566} 
     2567 
     2568 #if defined(CONFIG_AR9) || defined(CONFIG_VR9) 
     2569 
     2570static int proc_read_pp32(char *page, char **start, off_t off, int count, int *eof, void *data) 
     2571{ 
     2572    static const char *stron = " on"; 
     2573    static const char *stroff = "off"; 
     2574 
     2575    int len = 0; 
     2576    int cur_context; 
     2577    int f_stopped; 
     2578    char str[256]; 
     2579    char strlength; 
     2580    int i, j; 
     2581 
     2582    int pp32; 
     2583 
     2584    for ( pp32 = 0; pp32 < NUM_OF_PP32; pp32++ ) { 
     2585        f_stopped = 0; 
     2586 
     2587        len += sprintf(page + off + len, "===== pp32 core %d =====\n", pp32); 
     2588 
     2589  #ifdef CONFIG_VR9 
     2590        if ( (*PP32_FREEZE & (1 << (pp32 << 4))) != 0 ) { 
     2591            sprintf(str, "freezed"); 
     2592            f_stopped = 1; 
     2593        } 
     2594  #else 
     2595        if ( 0 ) { 
     2596        } 
     2597  #endif 
     2598        else if ( PP32_CPU_USER_STOPPED(pp32) || PP32_CPU_USER_BREAKIN_RCV(pp32) || PP32_CPU_USER_BREAKPOINT_MET(pp32) ) { 
     2599            strlength = 0; 
     2600            if ( PP32_CPU_USER_STOPPED(pp32) ) 
     2601                strlength += sprintf(str + strlength, "stopped"); 
     2602            if ( PP32_CPU_USER_BREAKPOINT_MET(pp32) ) 
     2603                strlength += sprintf(str + strlength, strlength ? " | breakpoint" : "breakpoint"); 
     2604            if ( PP32_CPU_USER_BREAKIN_RCV(pp32) ) 
     2605                strlength += sprintf(str + strlength, strlength ? " | breakin" : "breakin"); 
     2606            f_stopped = 1; 
     2607        } 
     2608  #if 0 
     2609        else if ( PP32_CPU_CUR_PC(pp32) == PP32_CPU_CUR_PC(pp32) ) { 
     2610            sprintf(str, "hang"); 
     2611            f_stopped = 1; 
     2612        } 
     2613  #endif 
     2614        else 
     2615            sprintf(str, "running"); 
     2616        cur_context = PP32_BRK_CUR_CONTEXT(pp32); 
     2617        len += sprintf(page + off + len, "Context: %d, PC: 0x%04x, %s\n", cur_context, PP32_CPU_CUR_PC(pp32), str); 
     2618 
     2619        if ( PP32_CPU_USER_BREAKPOINT_MET(pp32) ) { 
     2620            strlength = 0; 
     2621            if ( PP32_BRK_PC_MET(pp32, 0) ) 
     2622                strlength += sprintf(str + strlength, "pc0"); 
     2623            if ( PP32_BRK_PC_MET(pp32, 1) ) 
     2624                strlength += sprintf(str + strlength, strlength ? " | pc1" : "pc1"); 
     2625            if ( PP32_BRK_DATA_ADDR_MET(pp32, 0) ) 
     2626                strlength += sprintf(str + strlength, strlength ? " | daddr0" : "daddr0"); 
     2627            if ( PP32_BRK_DATA_ADDR_MET(pp32, 1) ) 
     2628                strlength += sprintf(str + strlength, strlength ? " | daddr1" : "daddr1"); 
     2629            if ( PP32_BRK_DATA_VALUE_RD_MET(pp32, 0) ) { 
     2630                strlength += sprintf(str + strlength, strlength ? " | rdval0" : "rdval0"); 
     2631                if ( PP32_BRK_DATA_VALUE_RD_LO_EQ(pp32, 0) ) { 
     2632                    if ( PP32_BRK_DATA_VALUE_RD_GT_EQ(pp32, 0) ) 
     2633                        strlength += sprintf(str + strlength, " =="); 
     2634                    else 
     2635                        strlength += sprintf(str + strlength, " <="); 
     2636                } 
     2637                else if ( PP32_BRK_DATA_VALUE_RD_GT_EQ(pp32, 0) ) 
     2638                    strlength += sprintf(str + strlength, " >="); 
     2639            } 
     2640            if ( PP32_BRK_DATA_VALUE_RD_MET(pp32, 1) ) { 
     2641                strlength += sprintf(str + strlength, strlength ? " | rdval1" : "rdval1"); 
     2642                if ( PP32_BRK_DATA_VALUE_RD_LO_EQ(pp32, 1) ) { 
     2643                    if ( PP32_BRK_DATA_VALUE_RD_GT_EQ(pp32, 1) ) 
     2644                        strlength += sprintf(str + strlength, " =="); 
     2645                    else 
     2646                        strlength += sprintf(str + strlength, " <="); 
     2647                } 
     2648                else if ( PP32_BRK_DATA_VALUE_RD_GT_EQ(pp32, 1) ) 
     2649                    strlength += sprintf(str + strlength, " >="); 
     2650            } 
     2651            if ( PP32_BRK_DATA_VALUE_WR_MET(pp32, 0) ) { 
     2652                strlength += sprintf(str + strlength, strlength ? " | wtval0" : "wtval0"); 
     2653                if ( PP32_BRK_DATA_VALUE_WR_LO_EQ(pp32, 0) ) { 
     2654                    if ( PP32_BRK_DATA_VALUE_WR_GT_EQ(pp32, 0) ) 
     2655                        strlength += sprintf(str + strlength, " =="); 
     2656                    else 
     2657                        strlength += sprintf(str + strlength, " <="); 
     2658                } 
     2659                else if ( PP32_BRK_DATA_VALUE_WR_GT_EQ(pp32, 0) ) 
     2660                    strlength += sprintf(str + strlength, " >="); 
     2661            } 
     2662            if ( PP32_BRK_DATA_VALUE_WR_MET(pp32, 1) ) { 
     2663                strlength += sprintf(str + strlength, strlength ? " | wtval1" : "wtval1"); 
     2664                if ( PP32_BRK_DATA_VALUE_WR_LO_EQ(pp32, 1) ) { 
     2665                    if ( PP32_BRK_DATA_VALUE_WR_GT_EQ(pp32, 1) ) 
     2666                        strlength += sprintf(str + strlength, " =="); 
     2667                    else 
     2668                        strlength += sprintf(str + strlength, " <="); 
     2669                } 
     2670                else if ( PP32_BRK_DATA_VALUE_WR_GT_EQ(pp32, 1) ) 
     2671                    strlength += sprintf(str + strlength, " >="); 
     2672            } 
     2673            len += sprintf(page + off + len, "break reason: %s\n", str); 
     2674        } 
     2675 
     2676        if ( f_stopped ) 
     2677        { 
     2678            len += sprintf(page + off + len, "General Purpose Register (Context %d):\n", cur_context); 
     2679            for ( i = 0; i < 4; i++ ) { 
     2680                for ( j = 0; j < 4; j++ ) 
     2681                    len += sprintf(page + off + len, "   %2d: %08x", i + j * 4, *PP32_GP_CONTEXTi_REGn(pp32, cur_context, i + j * 4)); 
     2682                len += sprintf(page + off + len, "\n"); 
     2683            } 
     2684        } 
     2685 
     2686        len += sprintf(page + off + len, "break out on: break in - %s, stop - %s\n", 
     2687                                            PP32_CTRL_OPT_BREAKOUT_ON_BREAKIN(pp32) ? stron : stroff, 
     2688                                            PP32_CTRL_OPT_BREAKOUT_ON_STOP(pp32) ? stron : stroff); 
     2689        len += sprintf(page + off + len, "     stop on: break in - %s, break point - %s\n", 
     2690                                            PP32_CTRL_OPT_STOP_ON_BREAKIN(pp32) ? stron : stroff, 
     2691                                            PP32_CTRL_OPT_STOP_ON_BREAKPOINT(pp32) ? stron : stroff); 
     2692        len += sprintf(page + off + len, "breakpoint:\n"); 
     2693        len += sprintf(page + off + len, "     pc0: 0x%08x, %s\n", *PP32_BRK_PC(pp32, 0), PP32_BRK_GRPi_PCn(pp32, 0, 0) ? "group 0" : "off"); 
     2694        len += sprintf(page + off + len, "     pc1: 0x%08x, %s\n", *PP32_BRK_PC(pp32, 1), PP32_BRK_GRPi_PCn(pp32, 1, 1) ? "group 1" : "off"); 
     2695        len += sprintf(page + off + len, "  daddr0: 0x%08x, %s\n", *PP32_BRK_DATA_ADDR(pp32, 0), PP32_BRK_GRPi_DATA_ADDRn(pp32, 0, 0) ? "group 0" : "off"); 
     2696        len += sprintf(page + off + len, "  daddr1: 0x%08x, %s\n", *PP32_BRK_DATA_ADDR(pp32, 1), PP32_BRK_GRPi_DATA_ADDRn(pp32, 1, 1) ? "group 1" : "off"); 
     2697        len += sprintf(page + off + len, "  rdval0: 0x%08x\n", *PP32_BRK_DATA_VALUE_RD(pp32, 0)); 
     2698        len += sprintf(page + off + len, "  rdval1: 0x%08x\n", *PP32_BRK_DATA_VALUE_RD(pp32, 1)); 
     2699        len += sprintf(page + off + len, "  wrval0: 0x%08x\n", *PP32_BRK_DATA_VALUE_WR(pp32, 0)); 
     2700        len += sprintf(page + off + len, "  wrval1: 0x%08x\n", *PP32_BRK_DATA_VALUE_WR(pp32, 1)); 
     2701    } 
     2702 
     2703    *eof = 1; 
     2704 
     2705    return len; 
     2706} 
     2707 
     2708static int proc_write_pp32(struct file *file, const char *buf, unsigned long count, void *data) 
     2709{ 
     2710    char *str = NULL; 
     2711    char *p; 
     2712    unsigned int addr; 
     2713        int str_buff_len = 1024; 
     2714 
     2715    int len, rlen; 
     2716 
     2717    int pp32 = 0; 
     2718 
     2719        str = vmalloc(str_buff_len); 
     2720        if (!str) { 
     2721                return 0;        
     2722        } 
     2723 
     2724    len = count <  str_buff_len ? count : str_buff_len - 1; 
     2725    rlen = len - copy_from_user(str, buf, len); 
     2726    while ( rlen && str[rlen - 1] <= ' ' ) 
     2727        rlen--; 
     2728    str[rlen] = 0; 
     2729    for ( p = str; *p && *p <= ' '; p++, rlen-- ); 
     2730    if ( !*p ){ 
     2731                vfree(str); 
     2732        return 0; 
     2733        } 
     2734 
     2735    if ( strincmp(p, "pp32 ", 5) == 0 ) { 
     2736        p += 5; 
     2737        rlen -= 5; 
     2738 
     2739        while ( rlen > 0 && *p >= '0' && *p <= '9' ) { 
     2740            pp32 += *p - '0'; 
     2741            p++; 
     2742            rlen--; 
     2743        } 
     2744        while ( rlen > 0 && *p && *p <= ' ' ) { 
     2745            p++; 
     2746            rlen--; 
     2747        } 
     2748 
     2749        if ( pp32 >= NUM_OF_PP32 ) { 
     2750            err("incorrect pp32 index - %d", pp32); 
     2751                        vfree(str); 
     2752            return count; 
     2753        } 
     2754    } 
     2755 
     2756    if ( stricmp(p, "start") == 0 ) 
     2757        *PP32_CTRL_CMD(pp32) = PP32_CTRL_CMD_RESTART; 
     2758    else if ( stricmp(p, "stop") == 0 ) 
     2759        *PP32_CTRL_CMD(pp32) = PP32_CTRL_CMD_STOP; 
     2760    else if ( stricmp(p, "step") == 0 ) 
     2761        *PP32_CTRL_CMD(pp32) = PP32_CTRL_CMD_STEP; 
     2762  #ifdef CONFIG_VR9 
     2763    else if ( stricmp(p, "restart") == 0 ) 
     2764        *PP32_FREEZE &= ~(1 << (pp32 << 4)); 
     2765    else if ( stricmp(p, "freeze") == 0 ) 
     2766        *PP32_FREEZE |= 1 << (pp32 << 4); 
     2767  #endif 
     2768    else if ( strincmp(p, "pc0 ", 4) == 0 ) { 
     2769        p += 4; 
     2770        rlen -= 4; 
     2771        if ( stricmp(p, "off") == 0 ) { 
     2772            *PP32_BRK_TRIG(pp32) = PP32_BRK_GRPi_PCn_OFF(0, 0); 
     2773            *PP32_BRK_PC_MASK(pp32, 0) = PP32_BRK_CONTEXT_MASK_EN; 
     2774            *PP32_BRK_PC(pp32, 0) = 0; 
     2775        } 
     2776        else { 
     2777            addr = get_number(&p, &rlen, 1); 
     2778            *PP32_BRK_PC(pp32, 0) = addr; 
     2779            *PP32_BRK_PC_MASK(pp32, 0) = PP32_BRK_CONTEXT_MASK_EN | PP32_BRK_CONTEXT_MASK(0) | PP32_BRK_CONTEXT_MASK(1) | PP32_BRK_CONTEXT_MASK(2) | PP32_BRK_CONTEXT_MASK(3); 
     2780            *PP32_BRK_TRIG(pp32) = PP32_BRK_GRPi_PCn_ON(0, 0); 
     2781        } 
     2782    } 
     2783    else if ( strincmp(p, "pc1 ", 4) == 0 ) { 
     2784        p += 4; 
     2785        rlen -= 4; 
     2786        if ( stricmp(p, "off") == 0 ) { 
     2787            *PP32_BRK_TRIG(pp32) = PP32_BRK_GRPi_PCn_OFF(1, 1); 
     2788            *PP32_BRK_PC_MASK(pp32, 1) = PP32_BRK_CONTEXT_MASK_EN; 
     2789            *PP32_BRK_PC(pp32, 1) = 0; 
     2790        } 
     2791        else { 
     2792            addr = get_number(&p, &rlen, 1); 
     2793            *PP32_BRK_PC(pp32, 1) = addr; 
     2794            *PP32_BRK_PC_MASK(pp32, 1) = PP32_BRK_CONTEXT_MASK_EN | PP32_BRK_CONTEXT_MASK(0) | PP32_BRK_CONTEXT_MASK(1) | PP32_BRK_CONTEXT_MASK(2) | PP32_BRK_CONTEXT_MASK(3); 
     2795            *PP32_BRK_TRIG(pp32) = PP32_BRK_GRPi_PCn_ON(1, 1); 
     2796        } 
     2797    } 
     2798    else if ( strincmp(p, "daddr0 ", 7) == 0 ) { 
     2799        p += 7; 
     2800        rlen -= 7; 
     2801        if ( stricmp(p, "off") == 0 ) { 
     2802            *PP32_BRK_TRIG(pp32) = PP32_BRK_GRPi_DATA_ADDRn_OFF(0, 0); 
     2803            *PP32_BRK_DATA_ADDR_MASK(pp32, 0) = PP32_BRK_CONTEXT_MASK_EN; 
     2804            *PP32_BRK_DATA_ADDR(pp32, 0) = 0; 
     2805        } 
     2806        else { 
     2807            addr = get_number(&p, &rlen, 1); 
     2808            *PP32_BRK_DATA_ADDR(pp32, 0) = addr; 
     2809            *PP32_BRK_DATA_ADDR_MASK(pp32, 0) = PP32_BRK_CONTEXT_MASK_EN | PP32_BRK_CONTEXT_MASK(0) | PP32_BRK_CONTEXT_MASK(1) | PP32_BRK_CONTEXT_MASK(2) | PP32_BRK_CONTEXT_MASK(3); 
     2810            *PP32_BRK_TRIG(pp32) = PP32_BRK_GRPi_DATA_ADDRn_ON(0, 0); 
     2811        } 
     2812    } 
     2813    else if ( strincmp(p, "daddr1 ", 7) == 0 ) { 
     2814        p += 7; 
     2815        rlen -= 7; 
     2816        if ( stricmp(p, "off") == 0 ) { 
     2817            *PP32_BRK_TRIG(pp32) = PP32_BRK_GRPi_DATA_ADDRn_OFF(1, 1); 
     2818            *PP32_BRK_DATA_ADDR_MASK(pp32, 1) = PP32_BRK_CONTEXT_MASK_EN; 
     2819            *PP32_BRK_DATA_ADDR(pp32, 1) = 0; 
     2820        } 
     2821        else { 
     2822            addr = get_number(&p, &rlen, 1); 
     2823            *PP32_BRK_DATA_ADDR(pp32, 1) = addr; 
     2824            *PP32_BRK_DATA_ADDR_MASK(pp32, 1) = PP32_BRK_CONTEXT_MASK_EN | PP32_BRK_CONTEXT_MASK(0) | PP32_BRK_CONTEXT_MASK(1) | PP32_BRK_CONTEXT_MASK(2) | PP32_BRK_CONTEXT_MASK(3); 
     2825            *PP32_BRK_TRIG(pp32) = PP32_BRK_GRPi_DATA_ADDRn_ON(1, 1); 
     2826        } 
     2827    } 
     2828    else { 
     2829 
     2830        printk("echo \"<command>\" > /proc/driver/ifx_ptm/pp32\n"); 
     2831        printk("  command:\n"); 
     2832        printk("    start  - run pp32\n"); 
     2833        printk("    stop   - stop pp32\n"); 
     2834        printk("    step   - run pp32 with one step only\n"); 
     2835        printk("    pc0    - pc0 <addr>/off, set break point PC0\n"); 
     2836        printk("    pc1    - pc1 <addr>/off, set break point PC1\n"); 
     2837        printk("    daddr0 - daddr0 <addr>/off, set break point data address 0\n"); 
     2838        printk("    daddr0 - daddr1 <addr>/off, set break point data address 1\n"); 
     2839        printk("    help   - print this screen\n"); 
     2840    } 
     2841 
     2842    if ( *PP32_BRK_TRIG(pp32) ) 
     2843        *PP32_CTRL_OPT(pp32) = PP32_CTRL_OPT_STOP_ON_BREAKPOINT_ON; 
     2844    else 
     2845        *PP32_CTRL_OPT(pp32) = PP32_CTRL_OPT_STOP_ON_BREAKPOINT_OFF; 
     2846        vfree(str); 
     2847    return count; 
     2848} 
     2849 
     2850#elif defined(CONFIG_DANUBE) 
     2851 
     2852static int proc_read_pp32(char *page, char **start, off_t off, int count, int *eof, void *data) 
     2853{ 
     2854    static const char *halt_stat[] = { 
     2855        "reset", 
     2856        "break in line", 
     2857        "stop", 
     2858        "step", 
     2859        "code", 
     2860        "data0", 
     2861        "data1" 
     2862    }; 
     2863    static const char *brk_src_data[] = { 
     2864        "off", 
     2865        "read", 
     2866        "write", 
     2867        "read/write", 
     2868        "write_equal", 
     2869        "N/A", 
     2870        "N/A", 
     2871        "N/A" 
     2872    }; 
     2873    static const char *brk_src_code[] = { 
     2874        "off", 
     2875        "on" 
     2876    }; 
     2877 
     2878    int len = 0; 
     2879    int i; 
     2880    int k; 
     2881    unsigned long bit; 
     2882    int tsk; 
     2883 
     2884    tsk = *PP32_DBG_TASK_NO & 0x03; 
     2885    len += sprintf(page + off + len, "Task No %d, PC %04x\n", tsk, *PP32_DBG_CUR_PC & 0xFFFF); 
     2886 
     2887    if ( !(*PP32_HALT_STAT & 0x01) ) 
     2888        len += sprintf(page + off + len, "  Halt State: Running\n"); 
     2889    else { 
     2890        len += sprintf(page + off + len, "  Halt State: Stopped"); 
     2891        k = 0; 
     2892        for ( bit = 2, i = 0; bit <= (1 << 7); bit <<= 1, i++ ) 
     2893            if ( (*PP32_HALT_STAT & bit) ) { 
     2894                if ( !k ) { 
     2895                    len += sprintf(page + off + len, ", "); 
     2896                    k++; 
     2897                } 
     2898                else 
     2899                    len += sprintf(page + off + len, " | "); 
     2900                len += sprintf(page + off + len, halt_stat[i]); 
     2901            } 
     2902 
     2903        len += sprintf(page + off + len, "\n"); 
     2904 
     2905        len += sprintf(page + off + len, "  Regs (Task %d):\n", tsk); 
     2906        for ( i = 0; i < 8; i++ ) 
     2907            len += sprintf(page + off + len, "    %2d. %08x    %2d. %08x\n", i, *PP32_DBG_REG_BASE(tsk, i), i + 8, *PP32_DBG_REG_BASE(tsk, i + 8)); 
     2908    } 
     2909 
     2910    len += sprintf(page + off + len, "  Break Src:  data1 - %s, data0 - %s, pc3 - %s, pc2 - %s, pc1 - %s, pc0 - %s\n", 
     2911                            brk_src_data[(*PP32_BRK_SRC >> 11) & 0x07], 
     2912                            brk_src_data[(*PP32_BRK_SRC >> 8) & 0x07], 
     2913                            brk_src_code[(*PP32_BRK_SRC >> 3) & 0x01], 
     2914                            brk_src_code[(*PP32_BRK_SRC >> 2) & 0x01], 
     2915                            brk_src_code[(*PP32_BRK_SRC >> 1) & 0x01], 
     2916                            brk_src_code[*PP32_BRK_SRC & 0x01]); 
     2917 
     2918    for ( i = 0; i < 4; i++ ) 
     2919        len += sprintf(page + off + len, "    pc%d:      %04x - %04x\n", i, *PP32_DBG_PC_MIN(i), *PP32_DBG_PC_MAX(i)); 
     2920 
     2921    for ( i = 0; i < 2; i++ ) 
     2922        len += sprintf(page + off + len, "    data%d:    %04x - %04x (%08x)\n", i, *PP32_DBG_DATA_MIN(i), *PP32_DBG_DATA_MAX(i), *PP32_DBG_DATA_VAL(i)); 
     2923 
     2924    *eof = 1; 
     2925 
     2926    return len; 
     2927} 
     2928 
     2929static int proc_write_pp32(struct file *file, const char *buf, unsigned long count, void *data) 
     2930{ 
     2931    char *str; 
     2932    char *p; 
     2933 
     2934    int len, rlen; 
     2935        int str_buff_len = 2048; 
     2936        str = vmalloc(str_buff_len); 
     2937        if (!str){ 
     2938                return 0; 
     2939        } 
     2940    len = count < str_buff_len ? count : str_buff_len - 1; 
     2941    rlen = len - copy_from_user(str, buf, len); 
     2942    while ( rlen && str[rlen - 1] <= ' ' ) 
     2943        rlen--; 
     2944    str[rlen] = 0; 
     2945    for ( p = str; *p && *p <= ' '; p++, rlen-- ); 
     2946    if ( !*p ) 
     2947                vfree(str); 
     2948        return 0; 
     2949 
     2950    if ( stricmp(p, "start") == 0 ) 
     2951        *PP32_DBG_CTRL = DBG_CTRL_START_SET(1); 
     2952    else if ( stricmp(p, "stop") == 0 ) 
     2953        *PP32_DBG_CTRL = DBG_CTRL_STOP_SET(1); 
     2954    else if ( stricmp(p, "step") == 0 ) 
     2955        *PP32_DBG_CTRL = DBG_CTRL_STEP_SET(1); 
     2956    else if ( strincmp(p, "pc", 2) == 0 && p[2] >= '0' && p[2] <= '3' && p[3] <= ' ' ) { 
     2957        int n = p[2] - '0'; 
     2958        int on_off_flag = -1; 
     2959        int addr_min, addr_max; 
     2960 
     2961        p += 4; 
     2962        rlen -= 4; 
     2963        ignore_space(&p, &rlen); 
     2964 
     2965        if ( strincmp(p, "off", 3) == 0 && p[3] <= ' ' ) { 
     2966            p += 3; 
     2967            rlen -= 3; 
     2968            on_off_flag = 0; 
     2969        } 
     2970        else if ( strincmp(p, "on", 2) == 0 && p[2] <= ' ' ) { 
     2971            p += 2; 
     2972            rlen -= 2; 
     2973            on_off_flag = 1; 
     2974        } 
     2975        ignore_space(&p, &rlen); 
     2976 
     2977        if ( rlen ) { 
     2978            addr_min = get_number(&p, &rlen, 1); 
     2979            ignore_space(&p, &rlen); 
     2980            if ( rlen ) 
     2981                addr_max = get_number(&p, &rlen, 1); 
     2982            else 
     2983                addr_max = addr_min; 
     2984 
     2985            *PP32_DBG_PC_MIN(n) = addr_min; 
     2986            *PP32_DBG_PC_MAX(n) = addr_max; 
     2987        } 
     2988 
     2989        if ( on_off_flag == 0 ) 
     2990            *PP32_BRK_SRC &= ~(1 << n); 
     2991        else if ( on_off_flag > 0 ) 
     2992            *PP32_BRK_SRC |= 1 << n; 
     2993    } 
     2994    else if ( strincmp(p, "data", 4) == 0 && p[4] >= '0' && p[4] <= '1' && p[5] <= ' ' ) { 
     2995        const static char *data_cmd_str[] = {"r", "w", "rw", "w=", "off", "min", "min addr", "max", "max addr", "val", "value"}; 
     2996        const static int data_cmd_len[] = {1, 1, 2, 2, 3, 3, 8, 3, 8, 3, 5}; 
     2997        const static int data_cmd_idx[] = {1, 2, 3, 4, 0, 5, 5, 6, 6, 7, 7}; 
     2998        int n = p[4] - '0'; 
     2999        int on_off_flag = -1, on_off_mask = 0; 
     3000        int addr_min = -1, addr_max = -1; 
     3001        int value = 0, f_got_value = 0; 
     3002        int stat = 0; 
     3003        int i; 
     3004        int tmp; 
     3005 
     3006        p += 6; 
     3007        rlen -= 6; 
     3008 
     3009        while ( 1 ) { 
     3010            ignore_space(&p, &rlen); 
     3011            if ( rlen <= 0 ) 
     3012                break; 
     3013            for ( i = 0; i < NUM_ENTITY(data_cmd_str); i++ ) 
     3014                if ( strincmp(p, data_cmd_str[i], data_cmd_len[i]) == 0 && p[data_cmd_len[i]] <= ' ' ) { 
     3015                    p += data_cmd_len[i]; 
     3016                    rlen -= data_cmd_len[i]; 
     3017                    stat = data_cmd_idx[i]; 
     3018                    if ( stat <= 4 ) { 
     3019                        on_off_mask = 7; 
     3020                        on_off_flag = stat; 
     3021                    } 
     3022                    break; 
     3023                } 
     3024            if ( i == NUM_ENTITY(data_cmd_str) ) { 
     3025                if ( (*p >= '0' && *p <= '9') || (*p >= 'a' && *p <= 'f') || (*p >= 'A' && *p <= 'F') ) { 
     3026                    tmp = get_number(&p, &rlen, 1); 
     3027                    if ( stat <= 5 ) { 
     3028                        addr_min = tmp; 
     3029                        stat = 6; 
     3030                    } 
     3031                    else if ( stat >= 7 ) { 
     3032                        value = tmp; 
     3033                        f_got_value = 1; 
     3034                    } 
     3035                    else { 
     3036                        addr_max = tmp; 
     3037                        stat = 7; 
     3038                    } 
     3039                } 
     3040                else 
     3041                    for ( ; rlen && *p > ' '; rlen--, p++ ); 
     3042            } 
     3043        } 
     3044 
     3045        if ( addr_min >= 0 ) 
     3046            *PP32_DBG_DATA_MIN(n) = *PP32_DBG_DATA_MAX(n) = addr_min; 
     3047        if ( addr_max >= 0 ) 
     3048            *PP32_DBG_DATA_MAX(n) = addr_max; 
     3049        if ( f_got_value ) 
     3050            *PP32_DBG_DATA_VAL(n) = value; 
     3051        if ( on_off_mask && on_off_flag >= 0 ) { 
     3052            on_off_flag <<= n ? 11 : 8; 
     3053            on_off_mask <<= n ? 11 : 8; 
     3054            *PP32_BRK_SRC = (*PP32_BRK_SRC & ~on_off_mask) | on_off_flag; 
     3055        } 
     3056    } 
     3057    else { 
     3058        printk("echo \"<command>\" > /proc/eth/etop\n"); 
     3059        printk("  command:\n"); 
     3060        printk("    start - run pp32\n"); 
     3061        printk("    stop  - stop pp32\n"); 
     3062        printk("    step  - run pp32 with one step only\n"); 
     3063        printk("    pc    - pc? [on/off] [min addr] [max addr], set PC break point\n"); 
     3064        printk("    data  - data? [r/w/rw/w=/off] [min <addr>] [max <addr>] [val <value>], set data break point\n"); 
     3065        printk("    help  - print this screen\n"); 
     3066    } 
     3067 
     3068        vfree(str); 
     3069    return count; 
     3070} 
     3071 
     3072 #elif defined(CONFIG_AMAZON_SE) 
     3073 
     3074static int proc_read_pp32(char *page, char **start, off_t off, int count, int *eof, void *data) 
     3075{ 
     3076    static const char *halt_stat[] = { 
     3077        "reset", 
     3078        "break in line", 
     3079        "stop", 
     3080        "step", 
     3081        "code", 
     3082        "data0", 
     3083        "data1" 
     3084    }; 
     3085    static const char *brk_src_data[] = { 
     3086        "off", 
     3087        "read", 
     3088        "write", 
     3089        "read/write", 
     3090        "write_equal", 
     3091        "N/A", 
     3092        "N/A", 
     3093        "N/A" 
     3094    }; 
     3095    static const char *brk_src_code[] = { 
     3096        "off", 
     3097        "on" 
     3098    }; 
     3099 
     3100    int len = 0; 
     3101    int i; 
     3102    int k; 
     3103    unsigned long bit; 
     3104 
     3105    len += sprintf(page + off + len, "Task No %d, PC %04x\n", *PP32_DBG_TASK_NO & 0x03, *PP32_DBG_CUR_PC & 0xFFFF); 
     3106 
     3107    if ( !(*PP32_HALT_STAT & 0x01) ) 
     3108        len += sprintf(page + off + len, "  Halt State: Running\n"); 
     3109    else 
     3110    { 
     3111        len += sprintf(page + off + len, "  Halt State: Stopped"); 
     3112        k = 0; 
     3113        for ( bit = 2, i = 0; bit <= (1 << 7); bit <<= 1, i++ ) 
     3114            if ( (*PP32_HALT_STAT & bit) ) 
     3115            { 
     3116                if ( !k ) 
     3117                { 
     3118                    len += sprintf(page + off + len, ", "); 
     3119                    k++; 
     3120                } 
     3121                else 
     3122                    len += sprintf(page + off + len, " | "); 
     3123                len += sprintf(page + off + len, halt_stat[i]); 
     3124            } 
     3125 
     3126        len += sprintf(page + off + len, "\n"); 
     3127    } 
     3128 
     3129    len += sprintf(page + off + len, "  Break Src:  data1 - %s, data0 - %s, pc3 - %s, pc2 - %s, pc1 - %s, pc0 - %s\n", 
     3130                                                    brk_src_data[(*PP32_BRK_SRC >> 11) & 0x07], brk_src_data[(*PP32_BRK_SRC >> 8) & 0x07], brk_src_code[(*PP32_BRK_SRC >> 3) & 0x01], brk_src_code[(*PP32_BRK_SRC >> 2) & 0x01], brk_src_code[(*PP32_BRK_SRC >> 1) & 0x01], brk_src_code[*PP32_BRK_SRC & 0x01]); 
     3131 
     3132//    for ( i = 0; i < 4; i++ ) 
     3133//        len += sprintf(page + off + len, "    pc%d:      %04x - %04x\n", i, *PP32_DBG_PC_MIN(i), *PP32_DBG_PC_MAX(i)); 
     3134 
     3135//    for ( i = 0; i < 2; i++ ) 
     3136//        len += sprintf(page + off + len, "    data%d:    %04x - %04x (%08x)\n", i, *PP32_DBG_DATA_MIN(i), *PP32_DBG_DATA_MAX(i), *PP32_DBG_DATA_VAL(i)); 
     3137 
     3138    *eof = 1; 
     3139 
     3140    return len; 
     3141} 
     3142 
     3143static int proc_write_pp32(struct file *file, const char *buf, unsigned long count, void *data) 
     3144{ 
     3145    char str[2048]; 
     3146    char *p; 
     3147 
     3148    int len, rlen; 
     3149 
     3150    len = count < sizeof(str) ? count : sizeof(str) - 1; 
     3151    rlen = len - copy_from_user(str, buf, len); 
     3152    while ( rlen && str[rlen - 1] <= ' ' ) 
     3153        rlen--; 
     3154    str[rlen] = 0; 
     3155    for ( p = str; *p && *p <= ' '; p++, rlen-- ); 
     3156    if ( !*p ) 
     3157        return 0; 
     3158 
     3159    if ( stricmp(str, "start") == 0 ) 
     3160        *PP32_DBG_CTRL = DBG_CTRL_RESTART; 
     3161    else if ( stricmp(str, "stop") == 0 ) 
     3162        *PP32_DBG_CTRL = DBG_CTRL_STOP; 
     3163//    else if ( stricmp(str, "step") == 0 ) 
     3164//        *PP32_DBG_CTRL = DBG_CTRL_STEP_SET(1); 
     3165    else 
     3166    { 
     3167        printk("echo \"<command>\" > /proc/eth/etop\n"); 
     3168        printk("  command:\n"); 
     3169        printk("    start - run pp32\n"); 
     3170        printk("    stop  - stop pp32\n"); 
     3171//        printk("    step  - run pp32 with one step only\n"); 
     3172        printk("    help  - print this screen\n"); 
     3173    } 
     3174 
     3175    return count; 
     3176} 
     3177 
     3178 #endif 
    17683179 
    17693180#endif 
     
    17773188    if ( HTU_ENTRY(i)->vld ) { 
    17783189        len += sprintf(buf + len, "%2d. valid\n", i); 
    1779         len += sprintf(buf + len, "    entry  0x%08x - pid %01x vpi %02x vci %04x pti %01x\n", *(u32*)HTU_ENTRY(i), HTU_ENTRY(i)->pid, HTU_ENTRY(i)->vpi, HTU_ENTRY(i)->vci, HTU_ENTRY(i)->pti); 
    1780         len += sprintf(buf + len, "    mask   0x%08x - pid %01x vpi %02x vci %04x pti %01x\n", *(u32*)HTU_MASK(i), HTU_MASK(i)->pid_mask, HTU_MASK(i)->vpi_mask, HTU_MASK(i)->vci_mask, HTU_MASK(i)->pti_mask); 
    1781         len += sprintf(buf + len, "    result 0x%08x - type: %s, qid: %d", *(u32*)HTU_RESULT(i), HTU_RESULT(i)->type ? "cell" : "AAL5", HTU_RESULT(i)->qid); 
     3190        len += sprintf(buf + len, "    entry  0x%08x - pid %01x vpi %02x vci %04x pti %01x\n", *(unsigned int*)HTU_ENTRY(i), HTU_ENTRY(i)->pid, HTU_ENTRY(i)->vpi, HTU_ENTRY(i)->vci, HTU_ENTRY(i)->pti); 
     3191        len += sprintf(buf + len, "    mask   0x%08x - pid %01x vpi %02x vci %04x pti %01x\n", *(unsigned int*)HTU_MASK(i), HTU_MASK(i)->pid_mask, HTU_MASK(i)->vpi_mask, HTU_MASK(i)->vci_mask, HTU_MASK(i)->pti_mask); 
     3192        len += sprintf(buf + len, "    result 0x%08x - type: %s, qid: %d", *(unsigned int*)HTU_RESULT(i), HTU_RESULT(i)->type ? "cell" : "AAL5", HTU_RESULT(i)->qid); 
    17823193        if ( HTU_RESULT(i)->type ) 
    17833194            len += sprintf(buf + len, ", cell id: %d, verification: %s", HTU_RESULT(i)->cellid, HTU_RESULT(i)->ven ? "on" : "off"); 
     
    17953206    int len_max = off + count; 
    17963207    char *pstr; 
    1797     char str[1024]; 
    17983208    int llen; 
    1799  
     3209    char *str; 
    18003210    int htuts = *CFG_WRX_HTUTS; 
    18013211    int i; 
     3212                 
     3213        str = vmalloc (1024); 
     3214        if (!str) 
     3215                return 0; 
    18023216 
    18033217    pstr = *start = page; 
     
    18233237 
    18243238    *eof = 1; 
    1825  
     3239        vfree(str); 
    18263240    return len - off; 
    18273241 
     
    18373251    if ( (*WTX_DMACH_ON & (1 << i)) ) { 
    18383252        len += sprintf(buf + len, "%2d. valid\n", i); 
    1839         len += sprintf(buf + len, "    queue 0x%08x - sbid %u, qsb %s\n", *(u32*)WTX_QUEUE_CONFIG(i), (unsigned int)WTX_QUEUE_CONFIG(i)->sbid, WTX_QUEUE_CONFIG(i)->qsben ? "enable" : "disable"); 
    1840         len += sprintf(buf + len, "    dma   0x%08x - base %08x, len %u, vlddes %u\n", *(u32*)WTX_DMA_CHANNEL_CONFIG(i), WTX_DMA_CHANNEL_CONFIG(i)->desba, WTX_DMA_CHANNEL_CONFIG(i)->deslen, WTX_DMA_CHANNEL_CONFIG(i)->vlddes); 
     3253        len += sprintf(buf + len, "    queue 0x%08x - sbid %u, qsb vcid %u, qsb %s\n", (unsigned int)WTX_QUEUE_CONFIG(i), (unsigned int)WTX_QUEUE_CONFIG(i)->sbid, (unsigned int)WTX_QUEUE_CONFIG(i)->qsb_vcid, WTX_QUEUE_CONFIG(i)->qsben ? "enable" : "disable"); 
     3254        len += sprintf(buf + len, "    dma   0x%08x - base %08x, len %u, vlddes %u\n", (unsigned int)WTX_DMA_CHANNEL_CONFIG(i), WTX_DMA_CHANNEL_CONFIG(i)->desba, WTX_DMA_CHANNEL_CONFIG(i)->deslen, WTX_DMA_CHANNEL_CONFIG(i)->vlddes); 
    18413255    } 
    18423256    else 
     
    18513265    int len_max = off + count; 
    18523266    char *pstr; 
    1853     char str[1024]; 
    18543267    int llen; 
     3268        int str_buff_len = 1024; 
     3269    char *str; 
    18553270 
    18563271    int i; 
    1857  
     3272         
     3273        str = vmalloc(str_buff_len); 
     3274        if (!str){ 
     3275                return 0; 
     3276        } 
    18583277    pstr = *start = page; 
    18593278 
     
    18773296    } 
    18783297 
     3298 
    18793299    *eof = 1; 
    18803300 
     3301        vfree(str); 
    18813302    return len - off; 
    18823303 
     
    18863307} 
    18873308 
     3309 #if defined(ENABLE_ATM_RETX) && ENABLE_ATM_RETX 
     3310 
     3311static int proc_read_retx_fw(char *page, char **start, off_t off, int count, int *eof, void *data) 
     3312{ 
     3313    int len = 0; 
     3314 
     3315    unsigned int next_dtu_sid_out, last_dtu_sid_in, next_cell_sid_out, isr_cell_id; 
     3316    unsigned int curr_time, sec_counter, curr_efb; 
     3317    struct Retx_adsl_ppe_intf adsl_ppe_intf; 
     3318 
     3319    adsl_ppe_intf       = *RETX_ADSL_PPE_INTF; 
     3320    next_dtu_sid_out    = *NEXT_DTU_SID_OUT; 
     3321    last_dtu_sid_in     = *LAST_DTU_SID_IN; 
     3322    next_cell_sid_out   = *NEXT_CELL_SID_OUT; 
     3323    isr_cell_id         = *ISR_CELL_ID; 
     3324 
     3325    curr_time   = *URetx_curr_time; 
     3326    sec_counter = *URetx_sec_counter; 
     3327    curr_efb    = *RxCURR_EFB; 
     3328 
     3329 
     3330    len += sprintf(page + off + len, "Adsl-PPE Interface:\n"); 
     3331    len += sprintf(page + off + len, "  dtu_sid                = 0x%02x [%3u]\n", adsl_ppe_intf.dtu_sid, adsl_ppe_intf.dtu_sid); 
     3332    len += sprintf(page + off + len, "  dtu_timestamp          = 0x%02x\n", adsl_ppe_intf.dtu_timestamp); 
     3333    len += sprintf(page + off + len, "  local_time             = 0x%02x\n", adsl_ppe_intf.local_time); 
     3334    len += sprintf(page + off + len, "  is_last_cw             = %u\n", adsl_ppe_intf.is_last_cw); 
     3335    len += sprintf(page + off + len, "  reinit_flag            = %u\n", adsl_ppe_intf.reinit_flag); 
     3336    len += sprintf(page + off + len, "  is_bad_cw              = %u\n", adsl_ppe_intf.is_bad_cw); 
     3337    len += sprintf(page + off + len, "\n"); 
     3338 
     3339 
     3340    len += sprintf(page + off + len, "Retx Firmware Context:\n"); 
     3341    len += sprintf(page + off + len, "  next_dtu_sid_out       (0x%08x)  = 0x%02x [%3u]\n", (unsigned int )NEXT_DTU_SID_OUT,   next_dtu_sid_out, next_dtu_sid_out); 
     3342    len += sprintf(page + off + len, "  last_dtu_sid_in        (0x%08x)  = 0x%02x [%3u]\n", (unsigned int )LAST_DTU_SID_IN,    last_dtu_sid_in,  last_dtu_sid_in); 
     3343    len += sprintf(page + off + len, "  next_cell_sid_out      (0x%08x)  = %u\n", (unsigned int )NEXT_CELL_SID_OUT,  next_cell_sid_out); 
     3344    len += sprintf(page + off + len, "  isr_cell_id            (0x%08x)  = %u\n", (unsigned int )ISR_CELL_ID,        isr_cell_id); 
     3345    len += sprintf(page + off + len, "  pb_cell_search_idx     (0x%08x)  = %u\n", (unsigned int )PB_CELL_SEARCH_IDX, *PB_CELL_SEARCH_IDX); 
     3346    len += sprintf(page + off + len, "  pb_read_pend_flag      (0x%08x)  = %u\n", (unsigned int )PB_READ_PEND_FLAG,  *PB_READ_PEND_FLAG); 
     3347    len += sprintf(page + off + len, "  rfbi_first_cw          (0x%08x)  = %u\n", (unsigned int )RFBI_FIRST_CW,      *RFBI_FIRST_CW); 
     3348    len += sprintf(page + off + len, "  rfbi_bad_cw            (0x%08x)  = %u\n", (unsigned int )RFBI_BAD_CW,        *RFBI_BAD_CW); 
     3349    len += sprintf(page + off + len, "  rfbi_invalid_cw        (0x%08x)  = %u\n", (unsigned int )RFBI_INVALID_CW,    *RFBI_INVALID_CW); 
     3350    len += sprintf(page + off + len, "  rfbi_retx_cw           (0x%08x)  = %u\n", (unsigned int )RFBI_RETX_CW,       *RFBI_RETX_CW); 
     3351    len += sprintf(page + off + len, "  rfbi_chk_dtu_status    (0x%08x)  = %u\n", (unsigned int )RFBI_CHK_DTU_STATUS,*RFBI_CHK_DTU_STATUS); 
     3352    len += sprintf(page + off + len, "\n"); 
     3353 
     3354 
     3355    len += sprintf(page + off + len, "SFSM Status:  bc0                      bc1  \n\n"); 
     3356    len += sprintf(page + off + len, "  state     = %-22s , %s\n", 
     3357          (*__WRXCTXT_PortState(0) & 3) == 0 ? "Hunt" : 
     3358          (*__WRXCTXT_PortState(0) & 3) == 1 ? "Pre_sync" : 
     3359          (*__WRXCTXT_PortState(0) & 3) == 2 ? "Sync" : 
     3360                                               "Unknown(error)", 
     3361          (*__WRXCTXT_PortState(1) & 3) == 0 ? "Hunt" : 
     3362          (*__WRXCTXT_PortState(1) & 3) == 1 ? "Pre_sync" : 
     3363          (*__WRXCTXT_PortState(1) & 3) == 2 ? "Sync" : 
     3364                                               "Unknown(error)"  ); 
     3365    len += sprintf(page + off + len, "  dbase     = 0x%04x  ( 0x%08x ) , 0x%04x  ( 0x%08x )\n", 
     3366            SFSM_DBA(0)->dbase, (unsigned int)PPM_INT_UNIT_ADDR(SFSM_DBA(0)->dbase + 0x2000), 
     3367            SFSM_DBA(1)->dbase, (unsigned int)PPM_INT_UNIT_ADDR(SFSM_DBA(1)->dbase + 0x2000)); 
     3368    len += sprintf(page + off + len, "  cbase     = 0x%04x  ( 0x%08x ) , 0x%04x  ( 0x%08x )\n", 
     3369            SFSM_CBA(0)->cbase, (unsigned int)PPM_INT_UNIT_ADDR(SFSM_CBA(0)->cbase + 0x2000), 
     3370            SFSM_CBA(1)->cbase, (unsigned int)PPM_INT_UNIT_ADDR(SFSM_CBA(1)->cbase + 0x2000)); 
     3371    len += sprintf(page + off + len, "  sen       = %-22d , %d\n", SFSM_CFG(0)->sen,        SFSM_CFG(1)->sen ); 
     3372    len += sprintf(page + off + len, "  idlekeep  = %-22d , %d\n", SFSM_CFG(0)->idlekeep,   SFSM_CFG(1)->idlekeep ); 
     3373    len += sprintf(page + off + len, "  pnum      = %-22d , %d\n", SFSM_CFG(0)->pnum,       SFSM_CFG(1)->pnum ); 
     3374    len += sprintf(page + off + len, "  pptr      = %-22d , %d\n", SFSM_PGCNT(0)->pptr,     SFSM_PGCNT(1)->pptr); 
     3375    len += sprintf(page + off + len, "  upage     = %-22d , %d\n", SFSM_PGCNT(0)->upage,    SFSM_PGCNT(1)->upage); 
     3376    len += sprintf(page + off + len, "  l2_rdptr  = %-22d , %d\n", *__WRXCTXT_L2_RdPtr(0),  *__WRXCTXT_L2_RdPtr(1) ); 
     3377    len += sprintf(page + off + len, "  l2_page   = %-22d , %d\n", *__WRXCTXT_L2Pages(0),   *__WRXCTXT_L2Pages(1) ); 
     3378    len += sprintf(page + off + len, "\n"); 
     3379 
     3380 
     3381    len += sprintf(page + off + len, "FFSM Status:  bc0                      bc1  \n\n"); 
     3382    len += sprintf(page + off + len, "  dbase     = 0x%04x  ( 0x%08x ) , 0x%04x  ( 0x%08x )\n", 
     3383            FFSM_DBA(0)->dbase, (unsigned int)PPM_INT_UNIT_ADDR(FFSM_DBA(0)->dbase + 0x2000), 
     3384            FFSM_DBA(1)->dbase, (unsigned int)PPM_INT_UNIT_ADDR(FFSM_DBA(1)->dbase + 0x2000)); 
     3385    len += sprintf(page + off + len, "  pnum      = %-22d , %d\n", FFSM_CFG(0)->pnum,       FFSM_CFG(1)->pnum); 
     3386    len += sprintf(page + off + len, "  vpage     = %-22d , %d\n", FFSM_PGCNT(0)->vpage,    FFSM_PGCNT(1)->vpage); 
     3387    len += sprintf(page + off + len, "  ival      = %-22d , %d\n", FFSM_PGCNT(0)->ival,     FFSM_PGCNT(1)->ival); 
     3388    len += sprintf(page + off + len, "  tc_wrptr  = %-22d , %d\n", *__WTXCTXT_TC_WRPTR(0),  *__WTXCTXT_TC_WRPTR(1)); 
     3389    len += sprintf(page + off + len, "\n"); 
     3390 
     3391 
     3392    len += sprintf(page + off + len, "Misc:  \n\n"); 
     3393    len += sprintf(page + off + len, "  curr_time   = %08x\n", curr_time ); 
     3394    len += sprintf(page + off + len, "  sec_counter = %d\n", sec_counter ); 
     3395    len += sprintf(page + off + len, "  curr_efb    = %d\n", curr_efb ); 
     3396    len += sprintf(page + off + len, "\n"); 
     3397 
     3398    *eof = 1; 
     3399 
     3400    return len; 
     3401} 
     3402 
     3403static inline int is_valid(unsigned int * dtu_vld_stat, int dtu_sid) 
     3404{ 
     3405    int dw_idx = (dtu_sid / 32) & 7; 
     3406    int bit_pos = dtu_sid % 32; 
     3407 
     3408    return dtu_vld_stat[dw_idx] & (0x80000000 >> bit_pos); 
     3409} 
     3410 
     3411static int proc_read_retx_stats(char *page, char **start, off_t off, int count, int *eof, void *data) 
     3412{ 
     3413    int i; 
     3414    int len = 0; 
     3415    int len_max = off + count; 
     3416    char *pstr; 
     3417    char str[2048]; 
     3418    int llen = 0; 
     3419 
     3420    unsigned int next_dtu_sid_out, last_dtu_sid_in, next_cell_sid_out; 
     3421    unsigned int dtu_vld_stat[8]; 
     3422    struct DTU_stat_info dtu_stat_info[256]; 
     3423    struct Retx_adsl_ppe_intf adsl_ppe_intf; 
     3424 
     3425    pstr = *start = page; 
     3426 
     3427    __sync(); 
     3428 
     3429    // capture a snapshot of internal status 
     3430    next_dtu_sid_out    = *NEXT_DTU_SID_OUT; 
     3431    last_dtu_sid_in     = *LAST_DTU_SID_IN; 
     3432    next_cell_sid_out   = *NEXT_CELL_SID_OUT; 
     3433    adsl_ppe_intf       = *RETX_ADSL_PPE_INTF; 
     3434 
     3435    memcpy(&dtu_vld_stat, (void *)DTU_VLD_STAT, sizeof(dtu_vld_stat)); 
     3436    memcpy(&dtu_stat_info, (void *)DTU_STAT_INFO, sizeof(dtu_stat_info)); 
     3437 
     3438 
     3439    llen += sprintf(str + llen, "Adsl-PPE Interface:\n"); 
     3440    llen += sprintf(str + llen, "  dtu_sid                = 0x%02x [%3u]\n", adsl_ppe_intf.dtu_sid, adsl_ppe_intf.dtu_sid); 
     3441    llen += sprintf(str + llen, "  dtu_timestamp          = 0x%02x\n", adsl_ppe_intf.dtu_timestamp); 
     3442    llen += sprintf(str + llen, "  local_time             = 0x%02x\n", adsl_ppe_intf.local_time); 
     3443    llen += sprintf(str + llen, "  is_last_cw             = %u\n", adsl_ppe_intf.is_last_cw); 
     3444    llen += sprintf(str + llen, "  reinit_flag            = %u\n", adsl_ppe_intf.reinit_flag); 
     3445    llen += sprintf(str + llen, "  is_bad_cw              = %u\n", adsl_ppe_intf.is_bad_cw); 
     3446    llen += sprintf(str + llen, "\n"); 
     3447 
     3448    llen += sprintf(str + llen, "Retx Internal State:\n"); 
     3449    llen += sprintf(str + llen, "  next_dtu_sid_out       (0x%08x)  = 0x%02x [%3u]\n", (unsigned int )NEXT_DTU_SID_OUT,   next_dtu_sid_out, next_dtu_sid_out); 
     3450    llen += sprintf(str + llen, "  last_dtu_sid_in        (0x%08x)  = 0x%02x [%3u]\n", (unsigned int )LAST_DTU_SID_IN,    last_dtu_sid_in, last_dtu_sid_in); 
     3451    llen += sprintf(str + llen, "  next_cell_sid_out      (0x%08x)  = %u\n", (unsigned int )NEXT_CELL_SID_OUT,  next_cell_sid_out); 
     3452    llen += sprintf(str + llen, "  dtu_valid_stat         (0x%08x)\n", (unsigned int )DTU_VLD_STAT); 
     3453    llen += sprintf(str + llen, "  dtu_stat_info          (0x%08x)\n", (unsigned int )DTU_STAT_INFO); 
     3454    llen += sprintf(str + llen, "  pb_buffer_usage        (0x%08x)\n", (unsigned int )PB_BUFFER_USAGE); 
     3455 
     3456    if ( len <= off && len + llen > off ) { 
     3457        memcpy(pstr, str + off - len, len + llen - off); 
     3458        pstr += len + llen - off; 
     3459    } 
     3460    else if ( len > off ) { 
     3461        memcpy(pstr, str, llen); 
     3462        pstr += llen; 
     3463    } 
     3464    len += llen; 
     3465    if ( len >= len_max ) 
     3466        goto PROC_READ_RETX_STATS_OVERRUN_END; 
     3467    llen = 0; 
     3468 
     3469 
     3470    llen += sprintf(str + llen, "\n"); 
     3471    llen += sprintf(str + llen, "DTU_VALID_STAT: [0x%08x]:\n", (unsigned int)DTU_VLD_STAT); 
     3472    llen += sprintf(str + llen, "%08X: %08X %08X %08X %08X    %08X %08X %08X %08X\n", 
     3473                    (unsigned int)DTU_VLD_STAT, 
     3474                    dtu_vld_stat[0], dtu_vld_stat[1], dtu_vld_stat[2], dtu_vld_stat[3], 
     3475                    dtu_vld_stat[4], dtu_vld_stat[5], dtu_vld_stat[6], dtu_vld_stat[7]); 
     3476 
     3477    if ( len <= off && len + llen > off ) { 
     3478        memcpy(pstr, str + off - len, len + llen - off); 
     3479        pstr += len + llen - off; 
     3480    } 
     3481    else if ( len > off ) { 
     3482        memcpy(pstr, str, llen); 
     3483        pstr += llen; 
     3484    } 
     3485    len += llen; 
     3486    if ( len >= len_max ) 
     3487        goto PROC_READ_RETX_STATS_OVERRUN_END; 
     3488    llen = 0; 
     3489 
     3490 
     3491    llen += sprintf(str + llen, "\n"); 
     3492    llen += sprintf(str + llen, "DTU_STAT_INFO: [0x%08x]:\n", (unsigned int)DTU_STAT_INFO); 
     3493    llen += sprintf(str + llen, "dtu_id        ts   complete   bad  cell_cnt  dtu_rd_ptr  dtu_wr_ptr\n"); 
     3494    llen += sprintf(str + llen, "---------------------------------------------------------------------\n"); 
     3495    for ( i = 0; i < 256; i++ ) { 
     3496        if ( !is_valid(dtu_vld_stat, i) ) 
     3497            continue; 
     3498 
     3499        llen += sprintf(str + llen, "0x%02x [%3u]   0x%02x      %d       %d     %3d        %5d      %5d\n", 
     3500                        i, i, 
     3501                        DTU_STAT_INFO[i].time_stamp, 
     3502                        DTU_STAT_INFO[i].complete, 
     3503                        DTU_STAT_INFO[i].bad, 
     3504                        DTU_STAT_INFO[i].cell_cnt, 
     3505                        DTU_STAT_INFO[i].dtu_rd_ptr, 
     3506                        DTU_STAT_INFO[i].dtu_wr_ptr ); 
     3507 
     3508        if ( len <= off && len + llen > off ) { 
     3509            memcpy(pstr, str + off - len, len + llen - off); 
     3510            pstr += len + llen - off; 
     3511        } 
     3512        else if ( len > off ) 
     3513        { 
     3514            memcpy(pstr, str, llen); 
     3515            pstr += llen; 
     3516        } 
     3517        len += llen; 
     3518        if ( len >= len_max ) 
     3519            goto PROC_READ_RETX_STATS_OVERRUN_END; 
     3520        llen = 0; 
     3521    } 
     3522 
     3523 
     3524    llen += sprintf(str + llen, "\n"); 
     3525    llen += sprintf(str + llen, "Playout buffer status --- valid status [0x%08x]:\n", (unsigned int)PB_BUFFER_USAGE); 
     3526    for( i = 0; i <  RETX_MODE_CFG->buff_size; i += 8 ) { 
     3527        llen += sprintf(str + llen, "%08X: %08X %08X %08X %08X    %08X %08X %08X %08X\n", 
     3528                        (unsigned int)PB_BUFFER_USAGE + i * sizeof(unsigned int), 
     3529                        PB_BUFFER_USAGE[i],   PB_BUFFER_USAGE[i+1], PB_BUFFER_USAGE[i+2], PB_BUFFER_USAGE[i+3], 
     3530                        PB_BUFFER_USAGE[i+4], PB_BUFFER_USAGE[i+5], PB_BUFFER_USAGE[i+6], PB_BUFFER_USAGE[i+7]); 
     3531    } 
     3532 
     3533    if ( len <= off && len + llen > off ) { 
     3534        memcpy(pstr, str + off - len, len + llen - off); 
     3535        pstr += len + llen - off; 
     3536    } 
     3537    else if ( len > off ) { 
     3538        memcpy(pstr, str, llen); 
     3539        pstr += llen; 
     3540    } 
     3541    len += llen; 
     3542    if ( len >= len_max ) 
     3543        goto PROC_READ_RETX_STATS_OVERRUN_END; 
     3544    llen = 0; 
     3545 
     3546 
     3547    *eof = 1; 
     3548 
     3549    return len - off; 
     3550 
     3551PROC_READ_RETX_STATS_OVERRUN_END: 
     3552    return len - llen - off; 
     3553} 
     3554 
     3555static int proc_write_retx_stats(struct file *file, const char *buf, unsigned long count, void *data) 
     3556{ 
     3557    char str[2048]; 
     3558    char *p; 
     3559 
     3560    int len, rlen; 
     3561 
     3562    len = count < sizeof(str) ? count : sizeof(str) - 1; 
     3563    rlen = len - copy_from_user(str, buf, len); 
     3564    while ( rlen && str[rlen - 1] <= ' ' ) 
     3565        rlen--; 
     3566    str[rlen] = 0; 
     3567    for ( p = str; *p && *p <= ' '; p++, rlen-- ); 
     3568    if ( !*p ) 
     3569        return 0; 
     3570 
     3571    if ( stricmp(p, "help") == 0 ) { 
     3572        printk("echo clear_pb > /proc/driver/ifx_atm/retx_stats \n"); 
     3573        printk("   :clear context in playout buffer\n\n"); 
     3574        printk("echo read_pb <pb_index> <cell_num> > /proc/driver/ifx_atm/retx_stats\n"); 
     3575        printk("   : read playout buffer contents\n\n"); 
     3576        printk("echo read_[r|t]x_cb > /proc/driver/ifx_atm/retx_stats\n"); 
     3577        printk("   : read cell buffer\n\n"); 
     3578        printk("echo clear_[r|t]x_cb > /proc/driver/ifx_atm/retx_stats\n"); 
     3579        printk("   : clear cell buffer\n\n"); 
     3580        printk("echo read_bad_dtu_intf_rec > /proc/driver/ifx_atm/retx_stats\n"); 
     3581        printk("   : read bad dtu intrface information record\n\n"); 
     3582        printk("echo clear_bad_dtu_intf_rec > /proc/driver/ifx_atm/retx_stats\n"); 
     3583        printk("   : clear bad dtu interface information record\n\n"); 
     3584        printk("echo read_wrx_context [i] > /proc/driver/ifx_atm/retx_stats\n"); 
     3585        printk("   : clear bad dtu interface information record\n\n"); 
     3586        printk("echo read_intf_rec > /proc/driver/ifx_atm/retx_stats\n"); 
     3587        printk("   : read interface info record buffer\n\n"); 
     3588        printk("echo reinit_intf_rec > /proc/driver/ifx_atm/retx_stats\n"); 
     3589        printk("   : reinit intf record, must be called before showtime\n\n"); 
     3590    } 
     3591    else if ( stricmp(p, "reinit_intf_rec") == 0 ) { 
     3592        int i = 0; 
     3593        struct Retx_adsl_ppe_intf_rec rec[16]; 
     3594 
     3595        *DBG_DTU_INTF_WRPTR             = 0; 
     3596        *DBG_INTF_FCW_DUP_CNT           = 0; 
     3597        *DBG_INTF_SID_CHANGE_IN_DTU_CNT = 0; 
     3598        *DBG_INTF_LCW_DUP_CNT           = 0; 
     3599 
     3600        *DBG_RFBI_DONE_INT_CNT          = 0; 
     3601        *DBG_RFBI_INTV0                 = 0; 
     3602        *DBG_RFBI_INTV1                 = 0; 
     3603        *DBG_RFBI_BC0_INVALID_CNT       = 0; 
     3604        *DBG_RFBI_LAST_T                = 0; 
     3605        *DBG_DREG_BEG_END               = 0; 
     3606 
     3607        memset((void *) DBG_INTF_INFO(0), 0, sizeof(rec)); 
     3608        for( i = 0; i < 16; i++ ) 
     3609            DBG_INTF_INFO(i)->res1_1 = 1; 
     3610        DBG_INTF_INFO(15)->dtu_sid = 255; 
     3611    } 
     3612    else if ( stricmp(p, "read_intf_rec") == 0 ) { 
     3613        int i, cnt; 
     3614        unsigned int dtu_intf_wrptr, fcw_dup_cnt, sid_change_in_dtu_cnt, lcw_dup_cnt ; 
     3615        unsigned int rfbi_done_int_cnt, rfbi_intv0, rfbi_intv1, rfbi_bc0_invalid_cnt, dreg_beg_end; 
     3616        struct Retx_adsl_ppe_intf_rec rec[16]; 
     3617 
     3618        memcpy((void *) rec, (void *) DBG_INTF_INFO(0), sizeof(rec)); 
     3619 
     3620        dtu_intf_wrptr          = *DBG_DTU_INTF_WRPTR; 
     3621        fcw_dup_cnt             = *DBG_INTF_FCW_DUP_CNT; 
     3622        sid_change_in_dtu_cnt   = *DBG_INTF_SID_CHANGE_IN_DTU_CNT; 
     3623        lcw_dup_cnt             = *DBG_INTF_LCW_DUP_CNT; 
     3624 
     3625        rfbi_done_int_cnt       = *DBG_RFBI_DONE_INT_CNT; 
     3626        rfbi_intv0              = *DBG_RFBI_INTV0; 
     3627        rfbi_intv1              = *DBG_RFBI_INTV1; 
     3628        rfbi_bc0_invalid_cnt    = *DBG_RFBI_BC0_INVALID_CNT; 
     3629        dreg_beg_end            = *DBG_DREG_BEG_END; 
     3630 
     3631        printk("PPE-Adsl Interface recrod [addr 0x23F0]:\n\n"); 
     3632 
     3633        printk("    rfbi_done_int_cnt   = %d [0x%x] \n", rfbi_done_int_cnt, rfbi_done_int_cnt); 
     3634        printk("    rfbi_intv           = 0x%08x  0x%08x [%d, %d, %d, %d, %d, %d, %d, %d]\n", 
     3635                    rfbi_intv0, rfbi_intv1, 
     3636                    rfbi_intv0 >> 24, (rfbi_intv0>>16) & 0xff, (rfbi_intv0>>8) & 0xff, rfbi_intv0 & 0xff, 
     3637                    rfbi_intv1 >> 24, (rfbi_intv1>>16) & 0xff, (rfbi_intv1>>8) & 0xff, rfbi_intv1 & 0xff 
     3638                    ); 
     3639        printk("    rfbi_bc0_invld_cnt  = %d\n", rfbi_bc0_invalid_cnt); 
     3640        printk("    dreg_beg_end        = %d, %d\n\n", dreg_beg_end >> 16, dreg_beg_end & 0xffff); 
     3641 
     3642        printk("    wrptr       = %d [0x%x] \n", dtu_intf_wrptr, dtu_intf_wrptr); 
     3643        printk("    fcw_dup_cnt = %d\n", fcw_dup_cnt); 
     3644        printk("    sid_chg_cnt = %d\n", sid_change_in_dtu_cnt); 
     3645        printk("    lcw_dup_cnt = %d\n\n", lcw_dup_cnt); 
     3646 
     3647 
     3648        printk("    idx  itf_dw0  itf_dw1  dtu_sid  timestamp  local_time   res1  last_cw  bad_flag  reinit\n"); 
     3649        printk("    -------------------------------------------------------------------------------------\n"); 
     3650        for ( i = (dtu_intf_wrptr + 1) % 16, cnt = 0; cnt < 16; cnt ++, i = (i + 1) % 16 ) { 
     3651            if(cnt < 15) 
     3652                printk("    "); 
     3653            else 
     3654                printk("   *"); 
     3655            printk("%3d    %04x    %04x    %3d[%02x]   %3d[%02x]     %3d[%02x]    0x%02x       %d       %d       %d\n", 
     3656                i, 
     3657                (*(unsigned int *)&rec[i]) & 0xffff, 
     3658                (*(unsigned int *)&rec[i]) >> 16, 
     3659                rec[i].dtu_sid, rec[i].dtu_sid, 
     3660                rec[i].dtu_timestamp, rec[i].dtu_timestamp, 
     3661                rec[i].local_time, rec[i].local_time, 
     3662                rec[i].res1_1, 
     3663                rec[i].is_last_cw, 
     3664                rec[i].is_bad_cw, 
     3665                rec[i].reinit_flag ); 
     3666        } 
     3667    } 
     3668    else if ( stricmp(p, "read_wrx_context") == 0 ) { 
     3669        int i = 0; 
     3670        int flag = 0; 
     3671        for( i = 0; i < 8; ++i ) { 
     3672            if ( !WRX_QUEUE_CONTEXT(i)->curr_des0 || !WRX_QUEUE_CONTEXT(i)->curr_des1 ) 
     3673                continue; 
     3674 
     3675            flag = 1; 
     3676            printk("WRX queue context [ %d ]: \n", i); 
     3677            printk("    curr_len = %4d, mfs = %d, ec = %d, clp1 = %d, aal5dp = %d\n", 
     3678                    WRX_QUEUE_CONTEXT(i)->curr_len, WRX_QUEUE_CONTEXT(i)->mfs, 
     3679                    WRX_QUEUE_CONTEXT(i)->ec, WRX_QUEUE_CONTEXT(i)->clp1, 
     3680                    WRX_QUEUE_CONTEXT(i)->aal5dp); 
     3681            printk("    initcrc  = %08x\n", WRX_QUEUE_CONTEXT(i)->intcrc); 
     3682            printk("    currdes  = %08x %08x\n", 
     3683                    WRX_QUEUE_CONTEXT(i)->curr_des0, WRX_QUEUE_CONTEXT(i)->curr_des1); 
     3684            printk("    last_dw  = %08x\n\n", WRX_QUEUE_CONTEXT(i)->last_dword); 
     3685            if( WRX_QUEUE_CONTEXT(i)->curr_len ) { 
     3686                int j = 0; 
     3687                unsigned char *p_char; 
     3688                struct rx_descriptor *desc = (struct rx_descriptor *)&(WRX_QUEUE_CONTEXT(i)->curr_des0); 
     3689                p_char = (unsigned char *)(((unsigned int)desc->dataptr << 2) | KSEG1); 
     3690                printk("    Data in SDRAM:\n        "); 
     3691 
     3692                for ( j = 0 ; j < WRX_QUEUE_CONTEXT(i)->curr_len; ++j ) { 
     3693                    printk ("%02x", p_char[j]); 
     3694                    if ( j % 16 == 15 ) 
     3695                        printk("\n        "); 
     3696                    else if ( j % 4 == 3 ) 
     3697                        printk (" "); 
     3698                } 
     3699                printk("\n\n"); 
     3700            } 
     3701        } 
     3702        if ( !flag ) { 
     3703            printk("No active wrx queue context\n"); 
     3704        } 
     3705    } 
     3706    else if ( stricmp(p, "clear_pb") == 0 ) { 
     3707        if ( g_retx_playout_buffer ) 
     3708            memset((void *)g_retx_playout_buffer, 0,  RETX_PLAYOUT_BUFFER_SIZE); 
     3709    } 
     3710    else if ( stricmp(p, "read_bad_dtu_intf_rec") == 0 ) { 
     3711        struct Retx_adsl_ppe_intf first_dtu_intf, last_dtu_intf; 
     3712        first_dtu_intf = *FIRST_BAD_REC_RETX_ADSL_PPE_INTF; 
     3713        last_dtu_intf = *BAD_REC_RETX_ADSL_PPE_INTF; 
     3714 
     3715        printk("\nAdsl-PPE Interface for first and last DTU of recent noise:\n\n"); 
     3716        printk("  dtu_sid                = 0x%02x [%3u], 0x%02x [%3u]\n", 
     3717                first_dtu_intf.dtu_sid, first_dtu_intf.dtu_sid, 
     3718                last_dtu_intf.dtu_sid, last_dtu_intf.dtu_sid); 
     3719        printk("  dtu_timestamp          = 0x%02x      , 0x%02x\n", 
     3720                first_dtu_intf.dtu_timestamp, last_dtu_intf.dtu_timestamp); 
     3721        printk("  local_time             = 0x%02x      , 0x%02x\n", 
     3722                first_dtu_intf.local_time, last_dtu_intf.local_time); 
     3723        printk("  is_last_cw             = %u          , %u\n", 
     3724                first_dtu_intf.is_last_cw, last_dtu_intf.is_last_cw); 
     3725        printk("  reinit_flag            = %u          , %u\n", 
     3726                first_dtu_intf.reinit_flag, last_dtu_intf.reinit_flag); 
     3727        printk("  is_bad_cw              = %u          , %u\n\n", 
     3728                first_dtu_intf.is_bad_cw, last_dtu_intf.is_bad_cw); 
     3729    } 
     3730    else if ( stricmp(p, "clear_bad_dtu_intf_rec") == 0 ) { 
     3731        memset((void *)BAD_REC_RETX_ADSL_PPE_INTF, 0, sizeof(struct Retx_adsl_ppe_intf)); 
     3732        memset((void *)FIRST_BAD_REC_RETX_ADSL_PPE_INTF, 0, sizeof(struct Retx_adsl_ppe_intf)); 
     3733    } 
     3734    else if ( stricmp(p, "clear_tx_cb") == 0 ) { 
     3735        unsigned int *dbase0; 
     3736        unsigned int pnum0; 
     3737 
     3738        dbase0 = (unsigned int *)PPM_INT_UNIT_ADDR( FFSM_DBA(0)->dbase + 0x2000); 
     3739        pnum0 = FFSM_CFG(0)->pnum; 
     3740        memset(dbase0, 0,  14 * sizeof(unsigned int ) * pnum0); 
     3741    } 
     3742    else if ( stricmp(p, "clear_rx_cb") == 0 ) { 
     3743        unsigned int *dbase0, *cbase0, *dbase1, *cbase1; 
     3744        unsigned int pnum0; 
     3745 
     3746        dbase0 = (unsigned int *)PPM_INT_UNIT_ADDR( SFSM_DBA(0)->dbase + 0x2000); 
     3747        cbase0 = (unsigned int *)PPM_INT_UNIT_ADDR( SFSM_CBA(0)->cbase + 0x2000); 
     3748 
     3749        dbase1 = (unsigned int *)PPM_INT_UNIT_ADDR( SFSM_DBA(1)->dbase + 0x2000); 
     3750        cbase1 = (unsigned int *)PPM_INT_UNIT_ADDR( SFSM_CBA(1)->cbase + 0x2000); 
     3751 
     3752        pnum0 = SFSM_CFG(0)->pnum; 
     3753 
     3754        memset(dbase0, 0,  14 * sizeof(unsigned int ) * pnum0); 
     3755        memset(cbase0, 0,  sizeof(unsigned int ) * pnum0); 
     3756 
     3757        memset(dbase1, 0,  14 * sizeof(unsigned int )); 
     3758        memset(cbase1, 0,  sizeof(unsigned int )); 
     3759    } 
     3760    else if ( strnicmp(p, "read_tx_cb", 10) == 0 ) { 
     3761        unsigned int *dbase0; 
     3762        unsigned int pnum0, i; 
     3763        unsigned int * cell; 
     3764 
     3765        dbase0 = (unsigned int *)PPM_INT_UNIT_ADDR( FFSM_DBA(0)->dbase + 0x2000); 
     3766        pnum0 = FFSM_CFG(0)->pnum; 
     3767 
     3768        printk("ATM TX BC 0 CELL data/ctrl buffer:\n\n"); 
     3769        for(i = 0; i < pnum0 ; ++ i) { 
     3770            cell = dbase0 + i * 14; 
     3771            printk("cell %2d:                   %08x %08x\n", i, cell[0], cell[1]); 
     3772            printk("         %08x %08x %08x %08x\n",  cell[2], cell[3], cell[4], cell[5]); 
     3773            printk("         %08x %08x %08x %08x\n",  cell[6], cell[7], cell[8], cell[9]); 
     3774            printk("         %08x %08x %08x %08x\n",  cell[10], cell[11], cell[12], cell[13]); 
     3775        } 
     3776    } 
     3777    else if ( strnicmp(p, "read_rx_cb", 10) == 0 ) { 
     3778        unsigned int *dbase0, *cbase0, *dbase1, *cbase1; 
     3779        unsigned int pnum0, i; 
     3780        unsigned int * cell; 
     3781 
     3782        dbase0 = (unsigned int *)PPM_INT_UNIT_ADDR( SFSM_DBA(0)->dbase + 0x2000); 
     3783        cbase0 = (unsigned int *)PPM_INT_UNIT_ADDR( SFSM_CBA(0)->cbase + 0x2000); 
     3784 
     3785        dbase1 = (unsigned int *)PPM_INT_UNIT_ADDR( SFSM_DBA(1)->dbase + 0x2000); 
     3786        cbase1 = (unsigned int *)PPM_INT_UNIT_ADDR( SFSM_CBA(1)->cbase + 0x2000); 
     3787 
     3788        pnum0 = SFSM_CFG(0)->pnum; 
     3789 
     3790        printk("ATM RX BC 0 CELL data/ctrl buffer:\n\n"); 
     3791        for(i = 0; i < pnum0 ; ++ i) { 
     3792            struct Retx_ctrl_field * p_ctrl; 
     3793 
     3794            cell = dbase0 + i * 14; 
     3795            p_ctrl = (struct Retx_ctrl_field *) ( &cbase0[i]); 
     3796            printk("cell %2d:                   %08x %08x  -- [%08x]:", i, cell[0], cell[1], cbase0[i]); 
     3797 
     3798            printk("l2_drop: %d, retx: %d", p_ctrl->l2_drop, p_ctrl->retx); 
     3799            if ( p_ctrl->retx ) { 
     3800                printk(", dtu_sid = %u, cell_sid = %u", p_ctrl->dtu_sid, p_ctrl->cell_sid); 
     3801            } 
     3802 
     3803            printk("\n"); 
     3804 
     3805            printk("         %08x %08x %08x %08x\n",  cell[2], cell[3], cell[4], cell[5]); 
     3806            printk("         %08x %08x %08x %08x\n",  cell[6], cell[7], cell[8], cell[9]); 
     3807            printk("         %08x %08x %08x %08x\n",  cell[10], cell[11], cell[12], cell[13]); 
     3808        } 
     3809 
     3810        printk("\n"); 
     3811        printk("ATM RX BC 1 CELL data/ctrl buffer:\n\n"); 
     3812        cell = dbase1; 
     3813        printk("cell %2d:                   %08x %08x  -- [%08x]: dtu_sid:%3d, cell_sid:%3d, next_ptr: %4d\n", 
     3814                0, cell[0], cell[1], cbase0[i], ( cell[1] >> 16) & 0xff, (cell[1] >> 24) & 0xff,    cell[1] & 0xffff ); 
     3815        printk("         %08x %08x %08x %08x\n",  cell[2], cell[3], cell[4], cell[5]); 
     3816        printk("         %08x %08x %08x %08x\n",  cell[6], cell[7], cell[8], cell[9]); 
     3817        printk("         %08x %08x %08x %08x\n",  cell[10], cell[11], cell[12], cell[13]); 
     3818    } 
     3819    else if ( strnicmp(p, "read_pb ", 8) == 0 ) 
     3820    { 
     3821        int start_cell_idx = 0; 
     3822        int cell_num = 0; 
     3823        unsigned int *cell; 
     3824        unsigned int pb_buff_size = RETX_MODE_CFG->buff_size * 32; 
     3825 
     3826        p += 8; 
     3827        rlen -= 8; 
     3828        ignore_space(&p, &rlen); 
     3829 
     3830        start_cell_idx = get_number(&p, &rlen, 0); 
     3831        ignore_space(&p, &rlen); 
     3832        cell_num = get_number(&p, &rlen, 0); 
     3833 
     3834        if ( start_cell_idx >= pb_buff_size ) { 
     3835            printk(" Invalid cell index\n"); 
     3836        } 
     3837        else { 
     3838            int i; 
     3839            if ( cell_num < 0 ) 
     3840                cell_num = 1; 
     3841 
     3842            if ( cell_num + start_cell_idx > pb_buff_size ) 
     3843                cell_num = pb_buff_size - start_cell_idx; 
     3844 
     3845            for ( i = 0; i < cell_num ; ++i ) { 
     3846                cell = (unsigned int *)((unsigned int *)g_retx_playout_buffer + (14 * (start_cell_idx + i))); 
     3847                printk("cell %4d:          %08x %08x [next_ptr = %4u, dtu_sid = %3u, cell_sid = %3u]\n", 
     3848                        start_cell_idx + i, cell[0], cell[1], cell[1] & 0xffff, (cell[1] >> 16) & 0xff, (cell[1] >> 24) & 0xff); 
     3849                printk("  %08x %08x %08x %08x\n",  cell[2], cell[3], cell[4], cell[5]); 
     3850                printk("  %08x %08x %08x %08x\n",  cell[6], cell[7], cell[8], cell[9]); 
     3851                printk("  %08x %08x %08x %08x\n",  cell[10], cell[11], cell[12], cell[13]); 
     3852            } 
     3853        } 
     3854    } 
     3855 
     3856    return count; 
     3857} 
     3858 
     3859static int proc_read_retx_cfg(char *page, char **start, off_t off, int count, int *eof, void *data) 
     3860{ 
     3861    int len = 0; 
     3862 
     3863    len += sprintf(page + off + len, "ReTX FW Config:\n"); 
     3864    len += sprintf(page + off + len, "  RETX_MODE_CFG            = 0x%08x, invld_range=%u, buff_size=%u, retx=%u\n", *(volatile unsigned int *)RETX_MODE_CFG, (unsigned int)RETX_MODE_CFG->invld_range, (unsigned int)RETX_MODE_CFG->buff_size * 32, (unsigned int)RETX_MODE_CFG->retx_en); 
     3865    len += sprintf(page + off + len, "  RETX_TSYNC_CFG           = 0x%08x, fw_alpha=%u, sync_inp=%u\n", *(volatile unsigned int *)RETX_TSYNC_CFG, (unsigned int)RETX_TSYNC_CFG->fw_alpha, (unsigned int)RETX_TSYNC_CFG->sync_inp); 
     3866    len += sprintf(page + off + len, "  RETX_TD_CFG              = 0x%08x, td_max=%u, td_min=%u\n", *(volatile unsigned int *)RETX_TD_CFG, (unsigned int)RETX_TD_CFG->td_max, (unsigned int)RETX_TD_CFG->td_min); 
     3867    len += sprintf(page + off + len, "  RETX_PLAYOUT_BUFFER_BASE = 0x%08x\n", *RETX_PLAYOUT_BUFFER_BASE); 
     3868    len += sprintf(page + off + len, "  RETX_SERVICE_HEADER_CFG  = 0x%08x\n", *RETX_SERVICE_HEADER_CFG); 
     3869    len += sprintf(page + off + len, "  RETX_MASK_HEADER_CFG     = 0x%08x\n", *RETX_MASK_HEADER_CFG); 
     3870    len += sprintf(page + off + len, "  RETX_MIB_TIMER_CFG       = 0x%08x, tick_cycle = %d, ticks_per_sec = %d\n", 
     3871                    *(unsigned int *)RETX_MIB_TIMER_CFG, RETX_MIB_TIMER_CFG->tick_cycle, RETX_MIB_TIMER_CFG->ticks_per_sec); 
     3872 
     3873    *eof = 1; 
     3874 
     3875    return len; 
     3876} 
     3877 
     3878static int proc_write_retx_cfg(struct file *file, const char *buf, unsigned long count, void *data) 
     3879{ 
     3880    char *p1, *p2; 
     3881    int len; 
     3882    int colon; 
     3883    char local_buf[1024]; 
     3884    char *tokens[4] = {0}; 
     3885    unsigned int token_num = 0; 
     3886 
     3887    len = sizeof(local_buf) < count ? sizeof(local_buf) - 1 : count; 
     3888    len = len - copy_from_user(local_buf, buf, len); 
     3889    local_buf[len] = 0; 
     3890 
     3891    p1 = local_buf; 
     3892    colon = 0; 
     3893    while ( token_num < NUM_ENTITY(tokens) && get_token(&p1, &p2, &len, &colon) ) { 
     3894        tokens[token_num++] = p1; 
     3895 
     3896        p1 = p2; 
     3897    } 
     3898 
     3899    if ( token_num > 0 ) { 
     3900        if ( stricmp(tokens[0], "help") == 0 ) { 
     3901            printk("echo help > /proc/driver/ifx_atm/retx_cfg ==> \n\tprint this help message\n\n"); 
     3902 
     3903            printk("echo set retx <enable|disable|0|1|on|off> > /proc/driver/ifx_atm/retx_cfg\n"); 
     3904            printk("\t:enable or disable retx feature\n\n"); 
     3905 
     3906            printk("echo set <td_max|td_min|fw_alpha|sync_inp|invld_range|buff_size> <number> > /proc/driver/ifx_atm/retx_cfg\n"); 
     3907            printk("\t: set td_max, td_min, fw_alpha, sync_inp, invalid_range, buff_size\n\n"); 
     3908 
     3909            printk("echo set <service_header|service_mask> <hex_number> /proc/driver/ifx_atm/retx_cfg \n"); 
     3910            printk("\t: set service_header, service_mask\n\n"); 
     3911        } 
     3912        else if ( stricmp(tokens[0], "set") == 0 && token_num >= 3 ) { 
     3913 
     3914            if ( stricmp(tokens[1], "retx") == 0 ) { 
     3915                if ( stricmp(tokens[2], "enable") == 0 || 
     3916                     stricmp(tokens[2], "on") == 0 || 
     3917                     stricmp(tokens[2], "1") == 0 ) 
     3918                    RETX_MODE_CFG->retx_en = 1; 
     3919                else if ( stricmp(tokens[2], "disable") == 0 || 
     3920                     stricmp(tokens[2], "off") == 0 || 
     3921                     stricmp(tokens[2], "0") == 0 ) 
     3922                    RETX_MODE_CFG->retx_en = 0; 
     3923                printk("RETX_MODE_CFG->retx_en - %d\n", RETX_MODE_CFG->retx_en); 
     3924            } 
     3925            else { 
     3926                unsigned int dec_val, hex_val; 
     3927 
     3928                p1 = tokens[2]; 
     3929                dec_val = (unsigned int)get_number(&p1, NULL, 0); 
     3930                p2 = tokens[2]; 
     3931                hex_val = (unsigned int)get_number(&p2, NULL, 1); 
     3932 
     3933                if ( *p2 == 0 ) { 
     3934                    if ( stricmp(tokens[1], "service_header") == 0 ) { 
     3935                        *RETX_SERVICE_HEADER_CFG = hex_val; 
     3936                        printk("RETX_SERVICE_HEADER_CFG - 0x%08x\n", *RETX_SERVICE_HEADER_CFG); 
     3937                    } 
     3938                    else if ( stricmp(tokens[1], "service_mask") == 0 ) { 
     3939                        *RETX_MASK_HEADER_CFG = hex_val; 
     3940                        printk("RETX_MASK_HEADER_CFG - 0x%08x\n", *RETX_MASK_HEADER_CFG); 
     3941                    } 
     3942                } 
     3943                if ( *p1 == 0 ) { 
     3944                    if ( stricmp(tokens[1], "td_max") == 0 ) { 
     3945                        (unsigned int)RETX_TD_CFG->td_max = (dec_val >= 0xff ? 0Xff : dec_val); 
     3946                        printk("RETX_TD_CFG->td_max - %d\n", RETX_TD_CFG->td_max); 
     3947                    } 
     3948                    else if ( stricmp(tokens[1], "td_min") == 0 ) { 
     3949                        (unsigned int)RETX_TD_CFG->td_min = (dec_val >= 0xff ? 0Xff : dec_val); 
     3950                        printk("RETX_TD_CFG->td_min - %d\n", RETX_TD_CFG->td_min); 
     3951                    } 
     3952                    else if ( stricmp(tokens[1], "fw_alpha") == 0 ) { 
     3953                        RETX_TSYNC_CFG->fw_alpha = dec_val >= 0x7FFE ? 0X7EEE : dec_val; 
     3954                        printk("RETX_TSYNC_CFG->fw_alpha - %d\n", RETX_TSYNC_CFG->fw_alpha); 
     3955                    } 
     3956                    else if ( stricmp(tokens[1], "sync_inp") == 0 ) { 
     3957                        RETX_TSYNC_CFG->sync_inp = dec_val >= 0x7FFE ? 0X7EEE : dec_val; 
     3958                        printk("RETX_TSYNC_CFG->sync_inp - %d\n", RETX_TSYNC_CFG->sync_inp); 
     3959                    } 
     3960                    else if ( stricmp(tokens[1], "invld_range") == 0 ) { 
     3961                        RETX_MODE_CFG->invld_range = dec_val >= 250 ? 250 : dec_val; 
     3962                        printk("RETX_MODE_CFG->invld_range - %d\n", RETX_MODE_CFG->invld_range); 
     3963                    } 
     3964                    else if ( stricmp(tokens[1], "buff_size") == 0 ) { 
     3965                        dec_val = (dec_val + 31) / 32; 
     3966                        RETX_MODE_CFG->buff_size = dec_val >= 4096 / 32 ? 4096 / 32 : dec_val; 
     3967                        printk("RETX_MODE_CFG->buff_size - %d\n", RETX_MODE_CFG->buff_size); 
     3968                    } 
     3969                } 
     3970            } 
     3971 
     3972        } 
     3973    } 
     3974 
     3975    return count; 
     3976} 
     3977 
     3978static int proc_read_retx_dsl_param(char *page, char **start, off_t off, int count, int *eof, void *data) 
     3979{ 
     3980    int len = 0; 
     3981 
     3982    len += sprintf(page + off + len, "DSL Param [timestamp %ld.%ld]:\n", g_retx_polling_start.tv_sec, g_retx_polling_start.tv_usec); 
     3983 
     3984    if ( g_xdata_addr == NULL ) 
     3985        len += sprintf(page + off + len, "  DSL parameters not available !\n"); 
     3986    else { 
     3987        volatile struct dsl_param *p_dsl_param = (volatile struct dsl_param *)g_xdata_addr; 
     3988 
     3989        len += sprintf(page + off + len, "  update_flag             = %u\n",     p_dsl_param->update_flag); 
     3990        len += sprintf(page + off + len, "  MinDelayrt              = %u\n",     p_dsl_param->MinDelayrt); 
     3991        len += sprintf(page + off + len, "  MaxDelayrt              = %u\n",     p_dsl_param->MaxDelayrt); 
     3992        len += sprintf(page + off + len, "  RetxEnable              = %u\n",     p_dsl_param->RetxEnable); 
     3993        len += sprintf(page + off + len, "  ServiceSpecificReTx     = %u\n",     p_dsl_param->ServiceSpecificReTx); 
     3994        len += sprintf(page + off + len, "  ReTxPVC                 = 0x%08x\n", p_dsl_param->ReTxPVC); 
     3995        len += sprintf(page + off + len, "  RxDtuCorruptedCNT       = %u\n",     p_dsl_param->RxDtuCorruptedCNT); 
     3996        len += sprintf(page + off + len, "  RxRetxDtuUnCorrectedCNT = %u\n",     p_dsl_param->RxRetxDtuUnCorrectedCNT); 
     3997        len += sprintf(page + off + len, "  RxLastEFB               = %u\n",     p_dsl_param->RxLastEFB); 
     3998        len += sprintf(page + off + len, "  RxDtuCorrectedCNT       = %u\n",     p_dsl_param->RxDtuCorrectedCNT); 
     3999    } 
     4000    if ( g_retx_polling_end.tv_sec != 0 || g_retx_polling_end.tv_usec != 0 ) { 
     4001        unsigned long polling_time_usec; 
     4002 
     4003        polling_time_usec = (g_retx_polling_end.tv_sec - g_retx_polling_start.tv_sec) * 1000000 + (g_retx_polling_end.tv_usec - g_retx_polling_start.tv_usec); 
     4004        len += sprintf(page + off + len, "DSL Param Update Time: %lu.%03lums\n", polling_time_usec / 1000, polling_time_usec % 1000); 
     4005    } 
     4006 
     4007    return len; 
     4008} 
     4009 
     4010 #endif 
     4011 
    18884012#endif 
    18894013 
     
    18924016    int c1, c2; 
    18934017 
    1894     while ( *p1 && *p2 ) 
    1895     { 
     4018    while ( *p1 && *p2 ) { 
    18964019        c1 = *p1 >= 'A' && *p1 <= 'Z' ? *p1 + 'a' - 'A' : *p1; 
    18974020        c2 = *p2 >= 'A' && *p2 <= 'Z' ? *p2 + 'a' - 'A' : *p2; 
     
    19064029 
    19074030#if defined(ENABLE_DBG_PROC) && ENABLE_DBG_PROC 
     4031 
    19084032static int strincmp(const char *p1, const char *p2, int n) 
    19094033{ 
    19104034    int c1 = 0, c2; 
    19114035 
    1912     while ( n && *p1 && *p2 ) 
    1913     { 
     4036    while ( n && *p1 && *p2 ) { 
    19144037        c1 = *p1 >= 'A' && *p1 <= 'Z' ? *p1 + 'a' - 'A' : *p1; 
    19154038        c2 = *p2 >= 'A' && *p2 <= 'Z' ? *p2 + 'a' - 'A' : *p2; 
     
    19234046    return n ? *p1 - *p2 : c1; 
    19244047} 
     4048 
     4049static int get_token(char **p1, char **p2, int *len, int *colon) 
     4050{ 
     4051    int tlen = 0; 
     4052 
     4053    while ( *len && !((**p1 >= 'A' && **p1 <= 'Z') || (**p1 >= 'a' && **p1<= 'z') || (**p1 >= '0' && **p1<= '9')) ) 
     4054    { 
     4055        (*p1)++; 
     4056        (*len)--; 
     4057    } 
     4058    if ( !*len ) 
     4059        return 0; 
     4060 
     4061    if ( *colon ) 
     4062    { 
     4063        *colon = 0; 
     4064        *p2 = *p1; 
     4065        while ( *len && **p2 > ' ' && **p2 != ',' ) 
     4066        { 
     4067            if ( **p2 == ':' ) 
     4068            { 
     4069                *colon = 1; 
     4070                break; 
     4071            } 
     4072            (*p2)++; 
     4073            (*len)--; 
     4074            tlen++; 
     4075        } 
     4076        **p2 = 0; 
     4077    } 
     4078    else 
     4079    { 
     4080        *p2 = *p1; 
     4081        while ( *len && **p2 > ' ' && **p2 != ',' ) 
     4082        { 
     4083            (*p2)++; 
     4084            (*len)--; 
     4085            tlen++; 
     4086        } 
     4087        **p2 = 0; 
     4088    } 
     4089 
     4090    return tlen; 
     4091} 
     4092 
     4093static unsigned int get_number(char **p, int *len, int is_hex) 
     4094{ 
     4095    unsigned int ret = 0; 
     4096    unsigned int n = 0; 
     4097 
     4098    if ( (*p)[0] == '0' && (*p)[1] == 'x' ) 
     4099    { 
     4100        is_hex = 1; 
     4101        (*p) += 2; 
     4102        if ( len ) 
     4103            (*len) -= 2; 
     4104    } 
     4105 
     4106    if ( is_hex ) 
     4107    { 
     4108        while ( (!len || *len) && ((**p >= '0' && **p <= '9') || (**p >= 'a' && **p <= 'f') || (**p >= 'A' && **p <= 'F')) ) 
     4109        { 
     4110            if ( **p >= '0' && **p <= '9' ) 
     4111                n = **p - '0'; 
     4112            else if ( **p >= 'a' && **p <= 'f' ) 
     4113               n = **p - 'a' + 10; 
     4114            else if ( **p >= 'A' && **p <= 'F' ) 
     4115                n = **p - 'A' + 10; 
     4116            ret = (ret << 4) | n; 
     4117            (*p)++; 
     4118            if ( len ) 
     4119                (*len)--; 
     4120        } 
     4121    } 
     4122    else 
     4123    { 
     4124        while ( (!len || *len) && **p >= '0' && **p <= '9' ) 
     4125        { 
     4126            n = **p - '0'; 
     4127            ret = ret * 10 + n; 
     4128            (*p)++; 
     4129            if ( len ) 
     4130                (*len)--; 
     4131        } 
     4132    } 
     4133 
     4134    return ret; 
     4135} 
     4136 
     4137static void ignore_space(char **p, int *len) 
     4138{ 
     4139    while ( *len && (**p <= ' ' || **p == ':' || **p == '.' || **p == ',') ) 
     4140    { 
     4141        (*p)++; 
     4142        (*len)--; 
     4143    } 
     4144} 
     4145 
    19254146#endif 
    19264147 
     
    19324153    ifx_atm_get_fw_ver(&major, &minor); 
    19334154 
    1934     len += sprintf(buf + len, "Infineon Technologies ATM driver version %d.%d.%d\n", IFX_ATM_VER_MAJOR, IFX_ATM_VER_MID, IFX_ATM_VER_MINOR); 
    1935     len += sprintf(buf + len, "Infineon Technologies ATM (A1) firmware version %d.%d\n", major, minor); 
     4155    len += sprintf(buf + len, "    ATM (A1) firmware version %d.%d.%d\n", IFX_ATM_VER_MAJOR, IFX_ATM_VER_MID,IFX_ATM_VER_MINOR); 
    19364156 
    19374157    return len; 
    19384158} 
    1939  
    1940 #ifdef MODULE 
    1941 static INLINE void reset_ppe(void) 
    1942 { 
    1943     //  TODO: 
    1944 } 
    1945 #endif 
    19464159 
    19474160static INLINE void check_parameters(void) 
     
    21564369     */ 
    21574370    *CFG_WRX_HTUTS  = MAX_PVC_NUMBER + OAM_HTU_ENTRY_NUMBER; 
     4371#ifndef CONFIG_AMAZON_SE 
    21584372    *CFG_WRX_QNUM   = MAX_QUEUE_NUMBER; 
     4373#endif 
    21594374    *CFG_WRX_DCHNUM = RX_DMA_CH_TOTAL; 
    21604375    *WRX_DMACH_ON   = (1 << RX_DMA_CH_TOTAL) - 1; 
     
    22804495     *  WTX Queue Configuration Table 
    22814496     */ 
    2282     wtx_queue_config.type  = 0x0; 
    22834497    wtx_queue_config.qsben = 1; 
    22844498    wtx_queue_config.sbid  = 0; 
    2285     for ( i = 0; i < MAX_TX_DMA_CHANNEL_NUMBER; i++ ) 
     4499    for ( i = 0; i < MAX_TX_DMA_CHANNEL_NUMBER; i++ ) { 
     4500        wtx_queue_config.qsb_vcid = i; 
    22864501        *WTX_QUEUE_CONFIG(i) = wtx_queue_config; 
     4502    } 
    22874503 
    22884504    /* 
     
    23384554#endif 
    23394555 
    2340     pr_debug("enter showtime, cell rate: 0 - %d, 1 - %d, xdata addr: 0x%08x\n", g_atm_priv_data.port[0].tx_max_cell_rate, g_atm_priv_data.port[1].tx_max_cell_rate, (unsigned int)g_xdata_addr); 
     4556#if defined(ENABLE_ATM_RETX) && ENABLE_ATM_RETX 
     4557    if ( !timer_pending(&g_retx_polling_timer) ) { 
     4558        g_retx_polling_cnt = HZ; 
     4559        g_retx_polling_timer.expires = jiffies + RETX_POLLING_INTERVAL; 
     4560        add_timer(&g_retx_polling_timer); 
     4561    } 
     4562#endif 
     4563 
     4564    //printk("enter showtime, cell rate: 0 - %d, 1 - %d, xdata addr: 0x%08x\n", g_atm_priv_data.port[0].tx_max_cell_rate, g_atm_priv_data.port[1].tx_max_cell_rate, (unsigned int)g_xdata_addr); 
    23414565 
    23424566    return IFX_SUCCESS; 
     
    23454569static int atm_showtime_exit(void) 
    23464570{ 
     4571    if ( !g_showtime ) 
     4572        return IFX_ERROR; 
     4573 
     4574#if defined(ENABLE_ATM_RETX) && ENABLE_ATM_RETX 
     4575    RETX_MODE_CFG->retx_en = 0; //  disable ReTX 
     4576    del_timer(&g_retx_polling_timer); 
     4577#endif 
     4578 
    23474579#if defined(CONFIG_VR9) 
    23484580    IFX_REG_W32(0x00, UTP_CFG); 
     
    23544586    g_xdata_addr = NULL; 
    23554587 
    2356     pr_debug("leave showtime\n"); 
     4588    printk("leave showtime\n"); 
    23574589 
    23584590    return IFX_SUCCESS; 
     
    23854617    char ver_str[256]; 
    23864618 
    2387 #ifdef MODULE 
    2388     reset_ppe(); 
    2389 #endif 
    2390  
    23914619    check_parameters(); 
    23924620 
     
    24084636        g_atm_priv_data.port[port_num].dev = atm_dev_register("ifxmips_atm", NULL, &g_ifx_atm_ops, -1, NULL); 
    24094637#endif 
     4638 
    24104639        if ( !g_atm_priv_data.port[port_num].dev ) { 
    24114640            err("failed to register atm device %d!", port_num); 
     
    24344663    disable_irq(PPE_MAILBOX_IGU1_INT); 
    24354664 
     4665#if defined(ENABLE_ATM_RETX) && ENABLE_ATM_RETX 
     4666    init_atm_tc_retrans_param(); 
     4667 
     4668    init_timer(&g_retx_polling_timer); 
     4669    g_retx_polling_timer.function = retx_polling_func; 
     4670#endif 
     4671 
    24364672    ret = ifx_pp32_start(0); 
    24374673    if ( ret ) { 
     
    24414677 
    24424678    port_cell.port_num = ATM_PORT_NUMBER; 
    2443     ifx_mei_atm_showtime_check(&g_showtime, &port_cell, &g_xdata_addr); 
     4679    if( !IS_ERR(&ifx_mei_atm_showtime_check) && &ifx_mei_atm_showtime_check) 
     4680        ifx_mei_atm_showtime_check(&g_showtime, &port_cell, &g_xdata_addr); 
    24444681    if ( g_showtime ) { 
    24454682        for ( i = 0; i < ATM_PORT_NUMBER; i++ ) 
     
    24534690    validate_oam_htu_entry(); 
    24544691 
     4692#if 0 /*defined(ENABLE_LED_FRAMEWORK) && ENABLE_LED_FRAMEWORK*/ 
     4693    ifx_led_trigger_register("dsl_data", &g_data_led_trigger); 
     4694#endif 
     4695 
    24554696    /*  create proc file    */ 
    24564697    proc_file_create(); 
    24574698 
    2458     ifx_mei_atm_showtime_enter = atm_showtime_enter; 
    2459     ifx_mei_atm_showtime_exit  = atm_showtime_exit; 
     4699    if( !IS_ERR(&ifx_mei_atm_showtime_enter) && &ifx_mei_atm_showtime_enter ) 
     4700        ifx_mei_atm_showtime_enter = atm_showtime_enter; 
     4701 
     4702    if( !IS_ERR(&ifx_mei_atm_showtime_exit) && !ifx_mei_atm_showtime_exit ) 
     4703        ifx_mei_atm_showtime_exit  = atm_showtime_exit; 
    24604704 
    24614705    ifx_atm_version(ver_str); 
     
    24904734    int port_num; 
    24914735 
    2492     ifx_mei_atm_showtime_enter = NULL; 
    2493     ifx_mei_atm_showtime_exit  = NULL; 
     4736    if( !IS_ERR(&ifx_mei_atm_showtime_enter) && &ifx_mei_atm_showtime_enter ) 
     4737        ifx_mei_atm_showtime_enter = NULL; 
     4738    if( !IS_ERR(&ifx_mei_atm_showtime_exit) && !ifx_mei_atm_showtime_exit ) 
     4739        ifx_mei_atm_showtime_exit  = NULL; 
    24944740 
    24954741    proc_file_delete(); 
    24964742 
     4743#if 0 /*defined(ENABLE_LED_FRAMEWORK) && ENABLE_LED_FRAMEWORK*/ 
     4744    ifx_led_trigger_deregister(g_data_led_trigger); 
     4745    g_data_led_trigger = NULL; 
     4746#endif 
     4747 
    24974748    invalidate_oam_htu_entry(); 
    24984749 
    24994750    ifx_pp32_stop(0); 
     4751 
     4752#if defined(ENABLE_ATM_RETX) && ENABLE_ATM_RETX 
     4753    del_timer(&g_retx_polling_timer); 
     4754    clear_atm_tc_retrans_param(); 
     4755#endif 
    25004756 
    25014757    free_irq(PPE_MAILBOX_IGU1_INT, &g_atm_priv_data); 
  • trunk/package/ltq-dsl/src/ifxmips_atm_core.h

    r24526 r28406  
    5353#define DEBUG_QOS                       1 
    5454 
     55#define DISABLE_QOS_WORKAROUND          0 
     56 
    5557#define ENABLE_DBG_PROC                 1 
    5658 
     
    6163#endif 
    6264 
     65#ifdef CONFIG_IFX_ATM_RETX 
     66  #define ENABLE_ATM_RETX               1 
     67#endif 
     68 
     69#if defined(CONFIG_DSL_MEI_CPE_DRV) && !defined(CONFIG_IFXMIPS_DSL_CPE_MEI) 
     70  #define CONFIG_IFXMIPS_DSL_CPE_MEI    1 
     71#endif 
    6372 
    6473/* 
     
    7382#define DBG_ENABLE_MASK_DUMP_QOS        (1 << 10) 
    7483#define DBG_ENABLE_MASK_DUMP_INIT       (1 << 11) 
    75 #define DBG_ENABLE_MASK_ALL             (DBG_ENABLE_MASK_ERR | DBG_ENABLE_MASK_DEBUG_PRINT | DBG_ENABLE_MASK_ASSERT | DBG_ENABLE_MASK_DUMP_SKB_RX | DBG_ENABLE_MASK_DUMP_SKB_TX | DBG_ENABLE_MASK_DUMP_QOS | DBG_ENABLE_MASK_DUMP_INIT) 
     84#define DBG_ENABLE_MASK_MAC_SWAP        (1 << 12) 
     85#define DBG_ENABLE_MASK_ALL             (DBG_ENABLE_MASK_ERR | DBG_ENABLE_MASK_DEBUG_PRINT | DBG_ENABLE_MASK_ASSERT | DBG_ENABLE_MASK_DUMP_SKB_RX | DBG_ENABLE_MASK_DUMP_SKB_TX | DBG_ENABLE_MASK_DUMP_QOS | DBG_ENABLE_MASK_DUMP_INIT | DBG_ENABLE_MASK_MAC_SWAP) 
    7686 
    7787#define err(format, arg...)             do { if ( (ifx_atm_dbg_enable & DBG_ENABLE_MASK_ERR) ) printk(KERN_ERR __FILE__ ":%d:%s: " format "\n", __LINE__, __FUNCTION__, ##arg); } while ( 0 ) 
     
    132142#define OAM_F4_CELL_ID                  0 
    133143#define OAM_F5_CELL_ID                  15 
    134 //#if defined(ENABLE_ATM_RETX) && ENABLE_ATM_RETX 
    135 //  #undef  OAM_HTU_ENTRY_NUMBER 
    136 //  #define OAM_HTU_ENTRY_NUMBER          4 
    137 //  #define OAM_ARQ_HTU_ENTRY             3 
    138 //#endif 
     144#if defined(ENABLE_ATM_RETX) && ENABLE_ATM_RETX 
     145  #undef  OAM_HTU_ENTRY_NUMBER 
     146  #define OAM_HTU_ENTRY_NUMBER          4 
     147  #define OAM_ARQ_HTU_ENTRY             3 
     148#endif 
    139149 
    140150/* 
     
    159169 */ 
    160170#define CELL_SIZE                       ATM_AAL0_SDU 
     171 
     172/* 
     173 *  ReTX Constant 
     174 */ 
     175#if defined(ENABLE_ATM_RETX) && ENABLE_ATM_RETX 
     176  #define RETX_PLAYOUT_BUFFER_ORDER     6 
     177  #define RETX_PLAYOUT_BUFFER_SIZE      (PAGE_SIZE * (1 << RETX_PLAYOUT_BUFFER_ORDER)) 
     178  #define RETX_PLAYOUT_FW_BUFF_SIZE     (RETX_PLAYOUT_BUFFER_SIZE / (32 * 56 /* cell size */)) 
     179  #define RETX_POLLING_INTERVAL         (HZ / 100 > 0 ? HZ / 100 : 1) 
     180#endif 
    161181 
    162182 
     
    245265extern void ifx_pp32_stop(int pp32); 
    246266 
     267extern void ifx_reset_ppe(void); 
     268 
    247269 
    248270 
  • trunk/package/ltq-dsl/src/ifxmips_atm_danube.c

    r27026 r28406  
    4949#include "ifxmips_compat.h" 
    5050#include "ifxmips_atm_core.h" 
    51 #include "ifxmips_atm_fw_danube.h" 
    52  
    53  
     51#if defined(ENABLE_ATM_RETX) && ENABLE_ATM_RETX 
     52  #include "ifxmips_atm_fw_danube_retx.h" 
     53#else 
     54  #include "ifxmips_atm_fw_danube.h" 
     55#endif 
    5456 
    5557/* 
     
    8284static inline void init_pmu(void); 
    8385static inline void uninit_pmu(void); 
     86static inline void reset_ppe(void); 
    8487static inline void init_ema(void); 
    8588static inline void init_mailbox(void); 
     
    106109{ 
    107110    //*(unsigned long *)0xBF10201C &= ~((1 << 15) | (1 << 13) | (1 << 9)); 
    108     PPE_TOP_PMU_SETUP(IFX_PMU_ENABLE); 
     111    //PPE_TOP_PMU_SETUP(IFX_PMU_ENABLE); 
    109112    PPE_SLL01_PMU_SETUP(IFX_PMU_ENABLE); 
    110113    PPE_TC_PMU_SETUP(IFX_PMU_ENABLE); 
     
    123126    PPE_TPE_PMU_SETUP(IFX_PMU_DISABLE); 
    124127    DSL_DFE_PMU_SETUP(IFX_PMU_DISABLE); 
    125     PPE_TOP_PMU_SETUP(IFX_PMU_DISABLE); 
     128    //PPE_TOP_PMU_SETUP(IFX_PMU_DISABLE); 
     129} 
     130 
     131static inline void reset_ppe(void) 
     132{ 
     133#if 0 //def MODULE 
     134    unsigned int etop_cfg; 
     135    unsigned int etop_mdio_cfg; 
     136    unsigned int etop_ig_plen_ctrl; 
     137    unsigned int enet_mac_cfg; 
     138 
     139    etop_cfg            = *IFX_PP32_ETOP_CFG; 
     140    etop_mdio_cfg       = *IFX_PP32_ETOP_MDIO_CFG; 
     141    etop_ig_plen_ctrl   = *IFX_PP32_ETOP_IG_PLEN_CTRL; 
     142    enet_mac_cfg        = *IFX_PP32_ENET_MAC_CFG; 
     143 
     144    *IFX_PP32_ETOP_CFG &= ~0x03C0; 
     145 
     146    //  reset PPE 
     147    ifx_rcu_rst(IFX_RCU_DOMAIN_PPE, IFX_RCU_MODULE_ATM); 
     148 
     149    *IFX_PP32_ETOP_MDIO_CFG     = etop_mdio_cfg; 
     150    *IFX_PP32_ETOP_IG_PLEN_CTRL = etop_ig_plen_ctrl; 
     151    *IFX_PP32_ENET_MAC_CFG      = enet_mac_cfg; 
     152    *IFX_PP32_ETOP_CFG          = etop_cfg; 
     153#endif 
    126154} 
    127155 
     
    144172static inline void init_atm_tc(void) 
    145173{ 
    146     //  for ReTX expansion in future 
    147     //*FFSM_CFG0 = SET_BITS(*FFSM_CFG0, 5, 0, 6); //  pnum = 6 
    148     //*FFSM_CFG1 = SET_BITS(*FFSM_CFG1, 5, 0, 6); //  pnum = 6 
     174    IFX_REG_W32(0x0000,     DREG_AT_CTRL); 
     175    IFX_REG_W32(0x0000,     DREG_AR_CTRL); 
     176    IFX_REG_W32(0x0,        DREG_AT_IDLE0); 
     177    IFX_REG_W32(0x0,        DREG_AT_IDLE1); 
     178    IFX_REG_W32(0x0,        DREG_AR_IDLE0); 
     179    IFX_REG_W32(0x0,        DREG_AR_IDLE1); 
     180    IFX_REG_W32(0x40,       RFBI_CFG); 
     181    IFX_REG_W32(0x1600,     SFSM_DBA0); 
     182    IFX_REG_W32(0x1718,     SFSM_DBA1); 
     183    IFX_REG_W32(0x1830,     SFSM_CBA0); 
     184    IFX_REG_W32(0x1844,     SFSM_CBA1); 
     185    IFX_REG_W32(0x14014,    SFSM_CFG0); 
     186    IFX_REG_W32(0x14014,    SFSM_CFG1); 
     187    IFX_REG_W32(0x1858,     FFSM_DBA0); 
     188    IFX_REG_W32(0x18AC,     FFSM_DBA1); 
     189    IFX_REG_W32(0x10006,    FFSM_CFG0); 
     190    IFX_REG_W32(0x10006,    FFSM_CFG1); 
     191    IFX_REG_W32(0x00000001, FFSM_IDLE_HEAD_BC0); 
     192    IFX_REG_W32(0x00000001, FFSM_IDLE_HEAD_BC1); 
    149193} 
    150194 
     
    179223        IFX_REG_W32(0x00, CDM_CFG); 
    180224    else 
    181         IFX_REG_W32(0x02, CDM_CFG); 
     225        IFX_REG_W32(0x04, CDM_CFG); 
    182226 
    183227    /*  copy code   */ 
     
    207251    ASSERT(minor != NULL, "pointer is NULL"); 
    208252 
     253#if (defined(ENABLE_ATM_RETX) && ENABLE_ATM_RETX) || defined(VER_IN_FIRMWARE) 
     254    *major = FW_VER_ID->major; 
     255    *minor = FW_VER_ID->minor; 
     256#else 
    209257    *major = ATM_FW_VER_MAJOR; 
    210258    *minor = ATM_FW_VER_MINOR; 
     259#endif 
    211260} 
    212261 
     
    214263{ 
    215264    init_pmu(); 
     265 
     266    reset_ppe(); 
    216267 
    217268    init_ema(); 
  • trunk/package/ltq-dsl/src/ifxmips_atm_fw_danube.h

    r24526 r28406  
    2828 
    2929 
     30#define VER_IN_FIRMWARE         1 
     31 
    3032#define ATM_FW_VER_MAJOR        0 
    31 #define ATM_FW_VER_MINOR        1 
     33#define ATM_FW_VER_MINOR        17 
    3234 
    3335 
     
    3537    0x800004A0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
    3638    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8000FFC8, 0x00000000, 0x00000000, 0x00000000, 
    37     0xC1000002, 0xD90C0000, 0xC2000002, 0xDA080001, 0x80004710, 0xC2000000, 0xDA080001, 0x80003D98, 
    38     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
    39     0x80003D50, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
    40     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
    41     0x80004F18, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
    42     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
    43     0x80003C50, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
    44     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
    45     0xC0400000, 0xC0004840, 0xC8840000, 0x800043D0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
    46     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
    47     0xC0400002, 0xC0004840, 0xC8840000, 0x80004350, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
     39    0xC1000002, 0xD90C0000, 0xC2000002, 0xDA080001, 0x80004968, 0xC2000000, 0xDA080001, 0x80003FD0, 
     40    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
     41    0x80003F88, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
     42    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
     43    0x80005160, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
     44    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
     45    0x80003E88, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
     46    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
     47    0xC0400000, 0xC0004840, 0xC8840000, 0x80004628, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
     48    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
     49    0xC0400002, 0xC0004840, 0xC8840000, 0x800045A8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
    4850    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
    4951    0xC3C00004, 0xDBC80001, 0xC10C0002, 0xD90C0000, 0x8000FEC8, 0x00000000, 0x00000000, 0x00000000, 
    5052    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
    51     0xC10E0002, 0xD90C0000, 0xC0004808, 0xC8400000, 0x80004380, 0x00000000, 0x00000000, 0x00000000, 
     53    0xC10E0002, 0xD90C0000, 0xC0004808, 0xC8400000, 0x800045D8, 0x00000000, 0x00000000, 0x00000000, 
    5254    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
    5355    0xC3E1FFFE, 0x597DFFFE, 0x593DFE14, 0x900004D9, 0x00000000, 0x00000000, 0x00000000, 0x90CC0481, 
     
    6466    0xC000042E, 0xCF000000, 0xC000040E, 0xCF000000, 0xC3C1FFFE, 0xC000490E, 0xCFC00080, 0xC000492C, 
    6567    0xCFC00080, 0xC0004924, 0xCFC00040, 0xC0004912, 0xCFC00040, 0xC0004966, 0xCFC00040, 0xC0004968, 
    66     0xCFC00080, 0xC000496A, 0xCFC00080, 0xC3C00000, 0xC2800020, 0xC3000000, 0x7F018000, 0x6FF88000, 
    67     0x6FD44000, 0x4395C000, 0x5BB84A00, 0x5838000A, 0xCF000000, 0x5BFC0002, 0xB7E8FFA8, 0x00000000, 
    68     0xC3C00000, 0xC2800010, 0x6FF86000, 0x47F9C000, 0x5BB84C80, 0xC3400000, 0x58380004, 0xCB420080, 
    69     0x00000000, 0x58380008, 0xCF400080, 0x5BFC0002, 0xB7E8FF90, 0x00000000, 0xC3C00000, 0xC2800020, 
    70     0xC348001E, 0xC3000000, 0x7F018000, 0x6FF8A000, 0x6FD44000, 0x4579C000, 0x47F9C000, 0x5BB84E20, 
    71     0x58380008, 0xCF400420, 0x5838000A, 0xCF000000, 0x5BFC0002, 0xB7E8FF90, 0x00000000, 0x00000000, 
    72     0x00000000, 0xC121FFFE, 0x5911FE14, 0x15000000, 0x80000518, 0x00000000, 0x80002118, 0x00000000, 
    73     0x8000FFC8, 0xC0004958, 0xC8400000, 0x00000000, 0xC3C00002, 0x7BC42000, 0xCC400000, 0xC0004848, 
    74     0xCB840000, 0xC000495C, 0xCAC40000, 0xC0004844, 0xC8840000, 0x46F90000, 0x8400FF6A, 0xC000487C, 
    75     0xC8040000, 0x00000000, 0x00000000, 0x40080000, 0xCA000000, 0xC0001624, 0xCB040000, 0xA63C005A, 
    76     0x00000000, 0x00000000, 0xA71EFF02, 0x00000000, 0xC0000824, 0xCA840000, 0x6CA08000, 0x6CA42000, 
    77     0x46610000, 0x42290000, 0xC35E0002, 0xC6340068, 0xC0001624, 0xCF440080, 0xC2000000, 0xC161FFFE, 
    78     0x5955FFFE, 0x15400000, 0x00000000, 0xC0004844, 0xC8840000, 0xC000082C, 0xCA040040, 0x00000000, 
    79     0x00000000, 0x58880002, 0xB608FFF8, 0x00000000, 0xC0800000, 0xC0004844, 0xCC840040, 0x5AEC0002, 
    80     0xC000495C, 0xCEC40000, 0x5E6C0006, 0x84000048, 0xC0004848, 0xCB840000, 0xC0000838, 0xC2500002, 
    81     0xCE440808, 0x5FB80002, 0xC0004848, 0xCF840000, 0x5EEC0002, 0xC000495C, 0xCEC40000, 0x00000000, 
    82     0xC121FFFE, 0x5911FE14, 0x15000000, 0x8000FD80, 0xC000495A, 0xC8400000, 0x00000000, 0xC3C00002, 
    83     0x7BC42000, 0xCC400000, 0xC0004960, 0xCAC40000, 0x00000000, 0x00000000, 0x5EEC0000, 0x840000F2, 
    84     0x00000000, 0xB6FC0030, 0xC0001600, 0xCA040000, 0x00000000, 0x00000000, 0xA61E00B2, 0x6FE90000, 
    85     0xC0000A28, 0xCE840808, 0xC2C00000, 0xC2800004, 0xB6E80080, 0xC0001604, 0xCA840000, 0xC0004960, 
    86     0xCEC40000, 0xA69EFCA2, 0x00000000, 0x6FE90000, 0xC0000A28, 0xCE840808, 0xC2C00002, 0xC0001600, 
    87     0xCA040000, 0x00000000, 0x00000000, 0xA61E000A, 0x6FE90000, 0xC0000A28, 0xCE840808, 0xC2C00000, 
    88     0xC0001604, 0xCA840000, 0xC0004960, 0xCEC40000, 0xA69EFC0A, 0xC2400000, 0xC0000A14, 0xCA440030, 
    89     0x00000000, 0x00000000, 0x46E52000, 0xA4400000, 0xC2800000, 0xDFEB0031, 0x8000FFF8, 0xDFEA0031, 
    90     0xB668FB82, 0x00000000, 0xC00048A0, 0xCB040000, 0xC0000A10, 0xCA840000, 0x6F208000, 0x6F242000, 
    91     0x46610000, 0x42A10000, 0xC2400000, 0xC0000A14, 0xCA440030, 0xC35E0002, 0xC6340068, 0xC0001604, 
    92     0xCF440080, 0x5B300002, 0xB670FFF8, 0x5AEC0002, 0xC3000000, 0xC00048A0, 0xCF040000, 0xC0004960, 
    93     0xCEC40000, 0x8000FAC0, 0xC0004918, 0xD2800000, 0xC2000000, 0xDF600040, 0x5E600080, 0x8400025A, 
    94     0x00000000, 0xC161FFFE, 0x5955FFFE, 0x15400000, 0x00000000, 0xC000480A, 0xCA000000, 0xC0004912, 
    95     0xCA400000, 0xC0004924, 0xCA800000, 0xC0004966, 0xCAC00000, 0x00000000, 0xC121FFFE, 0x5911FE14, 
    96     0x15000000, 0x76610000, 0x76A10000, 0x76E10000, 0x840001B2, 0xC0004918, 0xCA400000, 0xC28001FE, 
    97     0x76A10000, 0x5A640002, 0x6A254010, 0x5EE80000, 0x84000002, 0x6AA54000, 0x8000FFF8, 0xC6280000, 
    98     0x62818008, 0xC0004918, 0xCF000000, 0xC161FFFE, 0x5955FFFE, 0x15400000, 0x00000000, 0xC0004966, 
    99     0xCA400000, 0xC2000002, 0x6A310000, 0x7E010000, 0x76252000, 0xCE400000, 0x00000000, 0xC121FFFE, 
    100     0x5911FE14, 0x15000000, 0x6F346000, 0x4735A000, 0x5B744C80, 0xC2800000, 0x58340006, 0xCA800080, 
    101     0xC2C00000, 0x58340000, 0xCAC000E0, 0xC2400000, 0x5834000A, 0xCA420080, 0x6EA82000, 0x42E9E000, 
    102     0x6F2CA000, 0x42E56000, 0x5AEC1400, 0xC3990040, 0xC7381C20, 0xC6F80068, 0x99005930, 0xDB980000, 
    103     0xDBD80001, 0x00000000, 0xDEA00000, 0x47210000, 0x8400FD68, 0xC0004958, 0xC8400000, 0x00000000, 
    104     0xC3C00002, 0x7BC42000, 0xCC400000, 0xC0004848, 0xCB840000, 0xC0004844, 0xC8840000, 0x5FB80000, 
    105     0x8400F7DA, 0xC0001A1C, 0xCA000000, 0xC2400002, 0x6A452000, 0x76610000, 0x8400F7AA, 0xC000487C, 
    106     0xC8040000, 0x00000000, 0x00000000, 0x40080000, 0xCA000000, 0xC4240000, 0x00000000, 0xA63C17BA, 
    107     0x00000000, 0xC0004878, 0xC8040000, 0x6C908000, 0x44908000, 0x44908000, 0x40100000, 0xCA000000, 
    108     0xC4240000, 0x00000000, 0xC0004934, 0xCE000000, 0xC2800002, 0xC4681C10, 0xC62821D8, 0xC2600010, 
    109     0x5A650040, 0xC0004800, 0xCB400000, 0xC2200400, 0x5A200000, 0xC7601048, 0xC0001220, 0xCE800000, 
    110     0xC0001200, 0xCE400000, 0xC0001202, 0xCE000000, 0xC0001240, 0xCB400000, 0x00000000, 0x00000000, 
    111     0xA754FFC0, 0xC2000000, 0xC7600048, 0xA7520022, 0x00000000, 0x00000000, 0x990060A8, 0xC0004822, 
    112     0xC9400000, 0xC1800002, 0x80001668, 0x58204080, 0xC2000000, 0xCA000020, 0xC2400000, 0xCA414008, 
    113     0xC2800000, 0xCA812008, 0xC2C00000, 0xCAC20020, 0xC0004938, 0xCE000000, 0xC0004920, 0xCE400000, 
    114     0xC0004916, 0xCE800000, 0xC0004922, 0xCEC00000, 0xA6400520, 0x00000000, 0xC0004938, 0xCBC00000, 
    115     0x00000000, 0xC3800000, 0x6FF48000, 0x6FD44000, 0x4355A000, 0x5B744A00, 0x58340000, 0xCB802018, 
    116     0x00000000, 0xC2000000, 0x6FB46000, 0x47B5A000, 0x5B744C80, 0x5834000C, 0xCA000028, 0xC000491A, 
    117     0xCF800000, 0x5E200000, 0x84000452, 0xC2000000, 0xDF610050, 0x5E6001E8, 0x8800FFD0, 0xC2000002, 
    118     0xC2400466, 0xC2A00000, 0x5AA80000, 0xC0001006, 0xCE000000, 0xC0001008, 0xCE400000, 0xC000100A, 
    119     0xCE800000, 0x99005370, 0xC1A0FFFE, 0xC0000824, 0xC9840068, 0xC0004934, 0xCA400000, 0xC2000000, 
    120     0xC2800002, 0x990053B0, 0xDA980000, 0xC6140000, 0xC6580000, 0xC161FFFE, 0x5955FFFE, 0x15400000, 
    121     0x00000000, 0x99005498, 0xC000491A, 0xC9400000, 0x00000000, 0x00000000, 0xC121FFFE, 0x5911FE14, 
    122     0x15000000, 0xC0004922, 0xCA001120, 0xC3C00000, 0xC3800000, 0xC0004930, 0xCE001120, 0xC0004932, 
    123     0xCBC000E0, 0xC2800000, 0xC000491E, 0xCFC00000, 0xC0004862, 0xCA800068, 0xC3A0001A, 0x5BB94000, 
    124     0xC6B80068, 0xC000491C, 0xCF800000, 0x99005708, 0xC000491C, 0xC1400000, 0xC9420050, 0x00000000, 
    125     0x00000000, 0x00000000, 0xA8E2FFC8, 0xC2000000, 0xC1220002, 0xD90C0000, 0xDF600040, 0x5E600080, 
    126     0x8400FFDA, 0xC000491C, 0xCA000000, 0xC000491E, 0xCA400000, 0x00000000, 0x00000000, 0x99005930, 
    127     0xDA180000, 0xDA580001, 0x00000000, 0xC2000000, 0xDF610050, 0x5E6001FE, 0x8800FFD0, 0xC0004916, 
    128     0xCA800000, 0xC2C00000, 0xDFEC0050, 0xC2400000, 0x46E52000, 0x84000032, 0x5EA80000, 0x84000022, 
    129     0xC2600002, 0x990060A8, 0xC000482E, 0xC9400000, 0xC1800002, 0x80000018, 0xC2600000, 0x990060A8, 
    130     0xC000482C, 0xC9400000, 0xC1800002, 0xC2000068, 0xC6240080, 0xC0004930, 0xCE400088, 0xC000491A, 
    131     0xC9800000, 0xC0004862, 0xC9400000, 0x6D9C6000, 0x459CE000, 0x59DC4C80, 0x99005790, 0xD9580000, 
    132     0xD9980001, 0xD9D40000, 0x99005708, 0xC000491C, 0xC1400000, 0xC9420050, 0xC2000000, 0xDF600040, 
    133     0x5E600080, 0x8400FFD2, 0x00000000, 0xC000491C, 0xCA000000, 0xC000491E, 0xCA400000, 0x00000000, 
    134     0x00000000, 0x99005930, 0xDA180000, 0xDA580001, 0x00000000, 0x800010D0, 0x00000000, 0x990060A8, 
    135     0xC000482A, 0xC9400000, 0xC1800002, 0x800010A0, 0xC0004938, 0xCBC00000, 0x00000000, 0x00000000, 
    136     0x6FF88000, 0x6FD44000, 0x4395C000, 0x5BB84A00, 0x58380008, 0xCA000000, 0x00000000, 0x00000000, 
    137     0xA6000362, 0x00000000, 0xC0004938, 0xCBC00000, 0xC3000000, 0x00000000, 0x6FF88000, 0x6FD44000, 
    138     0x4395C000, 0x5BB84A00, 0x58380000, 0xCB002018, 0xC2000000, 0x58380008, 0xCA020080, 0x5838000C, 
    139     0xCAC00000, 0x5838000E, 0xCA400000, 0xC000491A, 0xCF000000, 0xC0004930, 0xCEC00000, 0xC000493C, 
    140     0xCE000000, 0xC0004932, 0xCE400000, 0x5E200000, 0x84000108, 0xC2800000, 0xA6FE009A, 0x6F206000, 
    141     0x47210000, 0x5A204C80, 0x5820000C, 0xCA800028, 0x00000000, 0x00000000, 0x5EA80000, 0x840001DA, 
    142     0x00000000, 0xC161FFFE, 0x5955FFFE, 0x15400000, 0x00000000, 0x99005498, 0xC000491A, 0xC9400000, 
    143     0x00000000, 0x00000000, 0xC121FFFE, 0x5911FE14, 0x15000000, 0xC0004930, 0xCAC00000, 0xC0004932, 
    144     0xCA400000, 0xC7EC1120, 0xC0004930, 0xCEC00000, 0x5838000C, 0xCEC00000, 0x58000002, 0xCE400000, 
    145     0xC0004934, 0xCA000000, 0xC2400002, 0x6E642000, 0x6E642000, 0x76252000, 0x84000012, 0xC2400002, 
    146     0x6E684000, 0x58380008, 0xCE800208, 0xA6000000, 0x6E682000, 0x58380008, 0xCE800108, 0xC2400002, 
    147     0x6E642000, 0x76252000, 0x840000D2, 0x58380008, 0xCA000000, 0xC2800000, 0xC2400000, 0xA60200A0, 
    148     0xDBA80000, 0x6F386000, 0x4739C000, 0x5BB84C80, 0x58380004, 0xCA400080, 0x58380002, 0xCA800080, 
    149     0x00000000, 0xDEB80000, 0x46694000, 0x88000048, 0x00000000, 0xC0004824, 0xCA000000, 0xC2400002, 
    150     0x6E640000, 0x5A200002, 0xCE000000, 0x58380008, 0xCE400008, 0x80000000, 0x00000000, 0x80000030, 
    151     0xC0004934, 0xCA000000, 0x00000000, 0x00000000, 0xA6020C4A, 0x00000000, 0x00000000, 0x80000C80, 
    152     0xC2800000, 0xC2000200, 0xC240001A, 0xDF690050, 0x46A14000, 0x46694000, 0x8800FFBA, 0xC2000006, 
    153     0xC2600982, 0x5A643B6E, 0x5838000A, 0xCA800000, 0xC0001006, 0xCE000000, 0xC0001008, 0xCE400000, 
    154     0xC000100A, 0xCE800000, 0x99005370, 0xC1A0FFFE, 0xC0000824, 0xC9840068, 0xC2000000, 0xC0004930, 
    155     0xCA02E010, 0x58380026, 0xCA400000, 0x00000000, 0xC2800000, 0x990053B0, 0xDA980000, 0xC6140000, 
    156     0xC6580000, 0xC0004934, 0xCA000000, 0x00000000, 0x00000000, 0xA6020002, 0x00000000, 0x00000000, 
    157     0x80000300, 0xC0004938, 0xCBC00000, 0xC0004878, 0xC8040000, 0x6C908000, 0x44908000, 0x44908000, 
    158     0x40100000, 0xCA000000, 0xC4240000, 0x00000000, 0x58240018, 0xCA000000, 0x6FF88000, 0x6FD44000, 
    159     0x4395C000, 0x5BB84A00, 0xC3000000, 0xC3400002, 0xC2C00000, 0xC62C0080, 0xC6270040, 0xC0004940, 
    160     0xCE400040, 0xC6260040, 0xC0004942, 0xCE400040, 0xC000493C, 0xCA000000, 0x5EEC0000, 0x84000172, 
    161     0x5A6C0010, 0x46614000, 0x88000178, 0x5A600052, 0x466D4000, 0x88000160, 0x58380006, 0xCA800000, 
    162     0xC0004940, 0xCA000000, 0xC2400000, 0xC6A70040, 0x7E412000, 0x76252000, 0xC2000000, 0xC6A10040, 
    163     0x46610000, 0x84000120, 0xC0004942, 0xCA000000, 0xC2400000, 0xC6A60040, 0x7E412000, 0x76252000, 
    164     0xC2000000, 0xC6A00040, 0x58380002, 0xCA800000, 0x46610000, 0x840000D0, 0xC2400000, 0xC6A60080, 
    165     0x46E50000, 0x880000C2, 0xC2400000, 0xC6A40080, 0x58380008, 0xCA800000, 0x466D0000, 0x880000A2, 
    166     0x00000000, 0xA682FFF8, 0x00000000, 0xC7700B08, 0xA6840078, 0x00000000, 0xC7700A08, 0x80000068, 
    167     0xC7700208, 0xC000493C, 0xCAC00000, 0x80000048, 0xC7700308, 0xC000493C, 0xCAC00000, 0x80000028, 
    168     0xC7700908, 0x80000018, 0xC7700808, 0x80000008, 0xC7700708, 0x8000FFF8, 0xC7700508, 0xC0004944, 
    169     0xCF000000, 0xC000493E, 0xCEC00000, 0xC0004938, 0xCA400000, 0xC000493C, 0xCB800000, 0xC000493E, 
    170     0xCB400000, 0xC3000000, 0x6E608000, 0x6E544000, 0x42150000, 0x5A204A00, 0x5AA00008, 0x58200004, 
    171     0xCB000080, 0xC0004934, 0xCA000000, 0xC2400000, 0xC0004930, 0xCA42E010, 0xC3C00018, 0xA6020078, 
    172     0x00000000, 0x43656000, 0x46F90000, 0x88000038, 0x47AD6000, 0x6EE04010, 0x5BE00004, 0xC2000000, 
    173     0xC6E00010, 0x5E200000, 0x8400002A, 0x5BFC0002, 0x80000018, 0xC3C00004, 0x5A2C0008, 0x46390000, 
    174     0x8800FFFA, 0x5FB80008, 0x6FE04000, 0x42390000, 0x46312000, 0x88000050, 0xC2400000, 0xC0004930, 
    175     0xCA42E010, 0xC2060002, 0xC6800000, 0xCE000308, 0x6FE04000, 0x4631C000, 0x5F700010, 0x4675A000, 
    176     0xC2000000, 0xC6340010, 0xC25A000A, 0xC000491A, 0xCA401C20, 0xC2800000, 0xC0004932, 0xCA8000E0, 
    177     0xC0004862, 0xCA400068, 0x6FA04010, 0x42290000, 0xC000491E, 0xCE000000, 0xC7E41050, 0xC000491C, 
    178     0xCE400000, 0x6FE04000, 0x43A1C000, 0xC000493C, 0xCF800000, 0xC000493E, 0xCF400000, 0xC000493A, 
    179     0xCFC00000, 0x8000FFF0, 0x00000000, 0x00000000, 0x00000000, 0xC2000000, 0xDCE00000, 0xA622FFB8, 
    180     0xC1220002, 0xD90C0000, 0xC0004938, 0xCBC00000, 0xC0004944, 0xCB400000, 0xC0004862, 0xCB000000, 
    181     0xC0004934, 0xCA000000, 0x6FF88000, 0x6FD44000, 0x4395C000, 0x5BB84A00, 0xA6020248, 0xC2400000, 
    182     0x58380008, 0xCA406008, 0xDFE80000, 0xC2218E08, 0x5A21BAF6, 0x46294000, 0x8400000A, 0xC2080002, 
    183     0x7235A000, 0x80000040, 0x5E640000, 0x8400000A, 0xC20C0002, 0x7235A000, 0x80000018, 0xC2000000, 
    184     0xC760E718, 0xC7604220, 0x5E200000, 0x8400025A, 0xC2200002, 0xC0004930, 0xCE001008, 0x990060A8, 
    185     0xC0004828, 0xC9400000, 0xC1800002, 0x58380000, 0xCA000000, 0x00000000, 0x00000000, 0xA6000112, 
    186     0xC0004940, 0xCA800000, 0xC0004942, 0xCA400000, 0xC7600080, 0xC6A01840, 0xC6601040, 0xC000493A, 
    187     0xCA400000, 0xC0004934, 0xCA800000, 0xC0007200, 0x40300000, 0x40240000, 0x5C000004, 0x5EC07400, 
    188     0x8800FFFA, 0x5C000200, 0xCE000000, 0x58000002, 0x5EC07400, 0x8800FFFA, 0x5C000200, 0xCE800000, 
    189     0xC000493E, 0xCA000000, 0xC2400000, 0x5838000C, 0xCE400000, 0x990060A8, 0xC0004830, 0xC9400000, 
    190     0xC6180000, 0xC0004930, 0xC6100080, 0xCD000080, 0x80000090, 0xC2400002, 0x58380008, 0xCE400008, 
    191     0xC0004944, 0xCF400000, 0x80000260, 0xC000493C, 0xCA400000, 0xDFE80000, 0x5A300018, 0xC0007200, 
    192     0x40200000, 0xCA000000, 0x58380008, 0xC6501080, 0xCD001080, 0x5838000A, 0xCE800000, 0x58380026, 
    193     0xCE000000, 0xC0004944, 0xCF400000, 0x99005708, 0xC000491C, 0xC1400000, 0xC9420050, 0x80000020, 
    194     0x00000000, 0x990060A8, 0xC0004826, 0xC9400000, 0xC1800002, 0x8000FDC0, 0xC2000000, 0xC2400200, 
    195     0xDF600040, 0xB624FFCA, 0xC000491C, 0xCA400000, 0xC000491E, 0xCA800000, 0x99005930, 0xDA580000, 
    196     0xDA980001, 0x00000000, 0xC0004934, 0xCA000000, 0x00000000, 0xC2800000, 0xA6020140, 0xC2400004, 
    197     0xC2000200, 0xDF690050, 0x46A14000, 0x46694000, 0x8800FFC2, 0x00000000, 0xC000491A, 0xC9800000, 
    198     0xC0004862, 0xC9400000, 0x6D9C6000, 0x459CE000, 0x59DC4C80, 0x99005790, 0xD9580000, 0xD9980001, 
    199     0xD9D40000, 0x99005708, 0xC000491C, 0xC1400000, 0xC9420050, 0xC2000000, 0xC2400200, 0xDF600040, 
    200     0xB624FFCA, 0xC000491C, 0xCA400000, 0xC000491E, 0xCA800000, 0x99005930, 0xDA580000, 0xDA980001, 
    201     0x00000000, 0x58380008, 0xCA400000, 0xC2000000, 0xCE000020, 0xC2A1FFFE, 0x5AA9FFFE, 0xCE001080, 
    202     0x5838000A, 0xCE800000, 0xC161FFFE, 0x5955FFFE, 0x15400000, 0x00000000, 0xC0000838, 0xC2500002, 
    203     0xCE440808, 0xC0004848, 0xCB840000, 0xC2000000, 0xC000082C, 0xCA040030, 0x5FB80002, 0xC0004848, 
    204     0xCF840000, 0x58880002, 0xB608FFF8, 0x00000000, 0xC0800000, 0xC0004844, 0xCC840000, 0x00000000, 
    205     0xC121FFFE, 0x5911FE14, 0x15000000, 0x8000DEC0, 0xC2000000, 0xDF600040, 0x5E200080, 0x84000252, 
    206     0x00000000, 0xC161FFFE, 0x5955FFFE, 0x15400000, 0x00000000, 0xC000480C, 0xCA000000, 0xC0004910, 
    207     0xCA400000, 0xC000492C, 0xCA800000, 0xC0004968, 0xCAC00000, 0x00000000, 0xC121FFFE, 0x5911FE14, 
    208     0x15000000, 0x76610000, 0x76A10000, 0x762D6000, 0x840001AA, 0xC0004926, 0xCA400000, 0xC201FFFE, 
    209     0x762D6000, 0x5A640002, 0x6AE50010, 0x5F200000, 0x84000002, 0x6A250000, 0x8000FFF8, 0xC6E00000, 
    210     0x62014008, 0xC0004926, 0xCE800000, 0xC161FFFE, 0x5955FFFE, 0x15400000, 0x00000000, 0xC0004968, 
    211     0xCA400000, 0xC2000002, 0x6A290000, 0x7E010000, 0x76252000, 0xCE400000, 0x00000000, 0xC121FFFE, 
    212     0x5911FE14, 0x15000000, 0x6EB4A000, 0x6E944000, 0x4575A000, 0x46B5A000, 0x5B744E20, 0x58340002, 
    213     0xC2000000, 0xCA0000E0, 0x5834002E, 0xC2400000, 0xCA400080, 0x6EB0A000, 0x6EBC4000, 0x47F18000, 
    214     0x46B18000, 0x5B300E4E, 0x5B300004, 0x6E642000, 0x4225E000, 0xC39A8024, 0xC7380068, 0xC6B81C20, 
    215     0x99005930, 0xDB980000, 0xDBD80001, 0x00000000, 0xC2000000, 0xDF600040, 0x5E200080, 0x8400028A, 
    216     0x00000000, 0xC161FFFE, 0x5955FFFE, 0x15400000, 0x00000000, 0xC000490E, 0xCA000000, 0xC000492A, 
    217     0xCA400000, 0xC000496A, 0xCB000000, 0xC0004956, 0xCAC00000, 0x00000000, 0xC121FFFE, 0x5911FE14, 
    218     0x15000000, 0x76318000, 0x76718000, 0x840001EA, 0xC201FFFE, 0x76318000, 0x5AEC0002, 0x6B2D0010, 
    219     0x5EA00000, 0x84000002, 0x6A2D0000, 0x8000FFF8, 0xC7200000, 0x62016008, 0xC0004956, 0xCEC00000, 
    220     0xC161FFFE, 0x5955FFFE, 0x15400000, 0x00000000, 0xC000496A, 0xCA400000, 0xC2000002, 0x6A2D0000, 
    221     0x7E010000, 0x76252000, 0xCE400000, 0x00000000, 0xC121FFFE, 0x5911FE14, 0x15000000, 0x6EF4A000, 
    222     0x6ED44000, 0x4575A000, 0x46F5A000, 0x5B744E20, 0x5834000E, 0xC2000000, 0xCA0000E0, 0x58340008, 
    223     0xC2400000, 0xCA420080, 0x5834000C, 0xC2800000, 0xCA832018, 0x6E644010, 0x42250000, 0x4229E000, 
    224     0xC39A8008, 0x58340008, 0xCB809020, 0x58340008, 0xC2800000, 0xCA810018, 0x6EE0A000, 0x6EE44000, 
    225     0x46610000, 0x46E10000, 0x5A200008, 0x5A200E28, 0x42290000, 0xC6380068, 0xC6F81C20, 0x99005930, 
    226     0xDB980000, 0xDBD80001, 0x00000000, 0xC000495A, 0xC8400000, 0x00000000, 0xC3C00002, 0x7BC42000, 
    227     0xCC400000, 0xC0001A1C, 0xCA000000, 0xC2400008, 0x6A452000, 0x76610000, 0x8400D91A, 0xC0000A28, 
    228     0xC3800000, 0xCB840030, 0xC0000A14, 0xC3400000, 0xCB440030, 0xC0004880, 0xCB040000, 0xB7B4D8CA, 
    229     0x58041802, 0xCAC00000, 0xA7000018, 0x00000000, 0x00000000, 0xA6C8D898, 0xC2800000, 0xC6E80020, 
    230     0x80000030, 0xC2800000, 0xC7282020, 0xC000490E, 0xCA400000, 0x6BE9E000, 0x00000000, 0x77E52000, 
    231     0x8400D848, 0x6EA0A000, 0x6E944000, 0x45610000, 0x46A10000, 0x5A204E20, 0x5820000C, 0xCA000000, 
    232     0xC0004946, 0xCE800000, 0xA6220348, 0x00000000, 0xC2200060, 0xC0004948, 0xCE000010, 0xCE001040, 
    233     0xC240000A, 0xC000494A, 0xCE400000, 0xC2B60002, 0xC0004964, 0xCE801B08, 0x99005C00, 0xC00048A0, 
    234     0xC8840000, 0x00000000, 0xC0004946, 0xCBC00000, 0x00000000, 0x00000000, 0x6FF8A000, 0x6FD44000, 
    235     0x4579C000, 0x47F9C000, 0x5BB84E20, 0x990059C0, 0xDBD80000, 0xDB980001, 0x00000000, 0x99005708, 
    236     0xC000491C, 0xC1400000, 0xC9420050, 0xC000491C, 0x99005BB8, 0xC9400001, 0xC9800000, 0x00000000, 
    237     0x99005930, 0xD9580000, 0xD9980001, 0x00000000, 0xC161FFFE, 0x5955FFFE, 0x15400000, 0x00000000, 
    238     0x990055F8, 0xDBD80000, 0xDB980001, 0xC7D80000, 0x00000000, 0xC121FFFE, 0x5911FE14, 0x15000000, 
    239     0x6FF8A000, 0x6FD44000, 0x4579C000, 0x47F9C000, 0x5BB84E20, 0x58380010, 0xCA000000, 0xC0004874, 
    240     0xC8040000, 0x6C908000, 0x44908000, 0x44908000, 0x40100000, 0xCA400000, 0xC4340000, 0x00000000, 
    241     0xC7400000, 0xCE000000, 0xC161FFFE, 0x5955FFFE, 0x15400000, 0x00000000, 0xC000490E, 0xCA400000, 
    242     0xC2800002, 0x6ABD4000, 0x72A52000, 0xCE400000, 0x00000000, 0xC121FFFE, 0x5911FE14, 0x15000000, 
    243     0x990060A8, 0xC0004836, 0xC9400000, 0xC1800002, 0x00000000, 0x00000000, 0x00000000, 0xA8E2FFC8, 
    244     0x00000000, 0xC1220002, 0xD90C0000, 0xC2000000, 0xC0000A14, 0xCA040030, 0xC0000A28, 0xC2500002, 
    245     0xCE440808, 0x58880002, 0xB608FFF8, 0xC00048A0, 0xC0800000, 0xCC840000, 0x8000D498, 0xC0004946, 
    246     0xCBC00000, 0xC161FFFE, 0x5955FFFE, 0x15400000, 0x00000000, 0xC000490E, 0xCA400000, 0xC2800002, 
    247     0x6ABD4000, 0x72A52000, 0xCE400000, 0x00000000, 0xC121FFFE, 0x5911FE14, 0x15000000, 0x6FF8A000, 
    248     0x6FD44000, 0x4579C000, 0x47F9C000, 0x5BB84E20, 0x58380008, 0xCA000000, 0x5838000C, 0xCA400000, 
    249     0xC3400000, 0xC6340008, 0xC000494E, 0xCF400000, 0xC2800000, 0xC62A0080, 0xC3000000, 0xC6308020, 
    250     0x6F304000, 0x43298000, 0xC000493C, 0xCF000000, 0xC2C00000, 0xC66C0080, 0xC0004950, 0xCEC00000, 
    251     0xC2800000, 0xC66AE028, 0xC0004954, 0xCE800000, 0x5F740000, 0x84000188, 0x5E300028, 0x462D2000, 
    252     0x84000152, 0x462D2000, 0x8800011A, 0x5E300018, 0x462D2000, 0x88000012, 0x462D2000, 0x8400002A, 
    253     0x00000000, 0x800000A8, 0x00000000, 0x99005D40, 0xDBD80000, 0xDB980001, 0xC7800000, 0xC3400002, 
    254     0xC000494E, 0xCF400000, 0xC161FFFE, 0x5955FFFE, 0x15400000, 0x00000000, 0xC000490E, 0xCA400000, 
    255     0xC2800002, 0x6ABD4000, 0x7E814000, 0x76A52000, 0xCE400000, 0x00000000, 0xC121FFFE, 0x5911FE14, 
    256     0x15000000, 0xC2200060, 0xC0004948, 0xCE001040, 0xC2000000, 0xC000494C, 0xCE000000, 0x80000068, 
    257     0x00000000, 0x99005D40, 0xDBD80000, 0xDB980001, 0xC7800000, 0x99005F40, 0xDBD80000, 0xDB980001, 
    258     0xC7800000, 0xC2200058, 0xC0004948, 0xCE001040, 0xC2000002, 0xC000494C, 0xCE000000, 0xC2000006, 
    259     0xC0001006, 0xCE000000, 0x5838000A, 0xCA400000, 0xC2200982, 0x5A203B6E, 0xC0001008, 0xCE000000, 
    260     0xC000100A, 0xCE400000, 0xC0004954, 0xCA800000, 0xC200000C, 0xC000494A, 0xCE000000, 0xC0004948, 
    261     0xCE800010, 0xC2B60000, 0xC0004964, 0xCE800000, 0x99005C00, 0xC00048A0, 0xC8840000, 0x00000000, 
    262     0xC0004946, 0xCBC00000, 0xC000494C, 0xCA000000, 0x6FF8A000, 0x6FD44000, 0x4579C000, 0x47F9C000, 
    263     0x5BB84E20, 0x5E200000, 0x840000E2, 0x00000000, 0x990059C0, 0xDBD80000, 0xDB980001, 0x00000000, 
    264     0x99005708, 0xC000491C, 0xC1400000, 0xC9420050, 0xC000491C, 0x99005BB8, 0xC9400001, 0xC9800000, 
    265     0x00000000, 0x99005930, 0xD9580000, 0xD9980001, 0x00000000, 0xC161FFFE, 0x5955FFFE, 0x15400000, 
    266     0x00000000, 0x990055F8, 0xDBD80000, 0xDB980001, 0xC7D80000, 0x00000000, 0xC121FFFE, 0x5911FE14, 
    267     0x15000000, 0xC000493C, 0xCA800000, 0xC000494E, 0xCAC00000, 0xC3000018, 0xC3400006, 0x5E200000, 
    268     0x84000012, 0xC2800000, 0xC2C00000, 0xC300001E, 0xC3400000, 0xC6AC1080, 0xC72C0420, 0xC76C0818, 
    269     0x58380010, 0xCA800000, 0x58380008, 0xCEC00000, 0xC6280108, 0xC0004874, 0xC8040000, 0x6C908000, 
    270     0x44908000, 0x44908000, 0x40100000, 0xCB000000, 0xC4340000, 0x00000000, 0xC7400000, 0xCE800000, 
    271     0xC0004952, 0xCE800000, 0x00000000, 0x00000000, 0x00000000, 0xA8E2FFC8, 0x00000000, 0xC000494C, 
    272     0xCA000000, 0xC0004950, 0xCAC00000, 0x5E200000, 0x84000052, 0xDFE80000, 0x7E814000, 0x5834001A, 
    273     0xCE800000, 0x990060A8, 0xC0004834, 0xC9400000, 0xC1800002, 0x990060A8, 0xC0004838, 0xC9400000, 
    274     0xC6D80000, 0xC1220002, 0xD90C0000, 0x5E200000, 0x84000028, 0x5838002C, 0xCB000000, 0xDFE80000, 
    275     0x00000000, 0x58380014, 0xCF000000, 0x80000000, 0xC2A1FFFE, 0x5AA9FFFE, 0x5838000A, 0xCE800000, 
    276     0xC3000000, 0xC0000A14, 0xCB040030, 0xC2D00002, 0xC0000A28, 0xCEC40808, 0xC000494E, 0xCA800000, 
    277     0x58880002, 0xB4B0FFF8, 0xC00048A0, 0xC0800000, 0xCC840000, 0x5EA80000, 0x8400013A, 0x5E200000, 
    278     0x84000128, 0xC000493C, 0xCA800000, 0x00000000, 0x00000000, 0x5AA80060, 0xCE800000, 0x99005D40, 
    279     0xDBD80000, 0xDB980001, 0xC7800000, 0x99005F40, 0xDBD80000, 0xDB980001, 0xC7800000, 0xC0004952, 
    280     0xCAC00000, 0x58380000, 0xCA800000, 0xC30C0002, 0xC7F00020, 0xA6800078, 0x00000000, 0x00000000, 
    281     0xC161FFFE, 0x5955FFFE, 0x15400000, 0x00000000, 0xC0001800, 0xCA000000, 0x00000000, 0x00000000, 
    282     0xA60CFFCA, 0xC6F00508, 0xC6B0C408, 0xCF000000, 0x00000000, 0xC121FFFE, 0x5911FE14, 0x15000000, 
    283     0x8000CB48, 0xDCBC0001, 0x5FFC0000, 0x8400003A, 0xC3800002, 0xDB880001, 0x5FFC0004, 0x8400C4B2, 
    284     0xC3800000, 0xDB880001, 0xC3CE0002, 0xC0000800, 0xCFC00708, 0xC3E1FFFE, 0x597DFFFE, 0x593DFE14, 
    285     0x94000001, 0x00000000, 0x00000000, 0x00000000, 0xC000487C, 0xC8040000, 0x00000000, 0x00000000, 
    286     0x40080000, 0xCBC00000, 0xC4380000, 0x00000000, 0xC000480E, 0xCA000000, 0xC0004858, 0xCB440000, 
    287     0x00000000, 0x00000000, 0x46350000, 0x88000098, 0x00000000, 0xA7C00028, 0xC0004854, 0xC1000002, 
    288     0xCD040000, 0xC11C0000, 0xC000082C, 0xCD040E08, 0x800000C0, 0x00000000, 0xA7D20118, 0x00000000, 
    289     0xC7E14048, 0xC2400000, 0xC6246030, 0xC200006A, 0x46610000, 0xC6240038, 0xC0000810, 0xCE440038, 
    290     0x8000FF58, 0xC2000000, 0xC0000808, 0xCA040018, 0xC11C0000, 0xC000082C, 0xCD040E08, 0x5A200002, 
    291     0x5E600010, 0x8400FFF8, 0xC2000000, 0xC0000808, 0xCE040018, 0xC3400000, 0x80000010, 0xC1200002, 
    292     0xC0000818, 0xCD041008, 0x5B740002, 0xC0004858, 0xCF440000, 0x99005348, 0xC0004848, 0xC9440000, 
    293     0xC1800000, 0xC11C0002, 0xC000082C, 0xCD040E08, 0x800005C8, 0x5B740002, 0xC0004858, 0xCF440000, 
    294     0xC7800000, 0xC13C0002, 0xCD001E08, 0xC0004848, 0xC9440000, 0xC1800000, 0xC000082C, 0xC9840030, 
    295     0x59540002, 0xC0004848, 0xCD440000, 0x58880002, 0xB4980540, 0x00000000, 0xC0800000, 0x80000530, 
    296     0xC000487C, 0xC8040000, 0x00000000, 0x00000000, 0x40080000, 0xCBC00000, 0xC4280000, 0x00000000, 
    297     0xA7C00110, 0xC000484C, 0xCA040000, 0xC2400000, 0xC0001AEC, 0xCA440020, 0x5A200002, 0xC000484C, 
    298     0xCE040000, 0xB624006A, 0xC6800000, 0xC13C0002, 0xCD001E08, 0xC0004848, 0xC9440000, 0xC1800000, 
    299     0xC000082C, 0xC9840030, 0x59540002, 0xC0004848, 0xCD440000, 0x58880002, 0xB4980430, 0x00000000, 
    300     0xC0800000, 0x80000420, 0xC0004854, 0xC1000004, 0xCD040000, 0xC0000820, 0xC2000002, 0xCE040000, 
    301     0xC2000000, 0xC000484C, 0xCE040000, 0xC0004858, 0xCE040000, 0x8000FF10, 0xC0004854, 0xC1000000, 
    302     0xCD040000, 0xC11C0000, 0xC000082C, 0xCD040E08, 0x99005348, 0xC0004848, 0xC9440000, 0xC1800000, 
    303     0xC1200000, 0xC0000818, 0xCD041008, 0xC11C0002, 0xC000082C, 0xCD040E08, 0xC2000000, 0xC000484C, 
    304     0xCE040000, 0x80000320, 0xC0001AC0, 0xCB840000, 0xC000487C, 0xC8040000, 0x00000000, 0x00000000, 
    305     0x40080000, 0xCBC00000, 0xC4280000, 0x00000000, 0xA780022A, 0x00000000, 0x00000000, 0xA7C001EA, 
    306     0x00000000, 0xC0001B00, 0xC2060006, 0xCE040310, 0xA7E801A2, 0x00000000, 0xC0004850, 0xCA040000, 
    307     0xC2400000, 0xC0001AEC, 0xCA448020, 0x5A200002, 0xC0004850, 0xCE040000, 0xB624008A, 0x00000000, 
    308     0xC6800000, 0xC13C0002, 0xCD001E08, 0xC0001ACC, 0xC2000002, 0xCE040008, 0xC0004848, 0xC9440000, 
    309     0xC1800000, 0xC000082C, 0xC9840030, 0x59540002, 0xC0004848, 0xCD440000, 0x58880002, 0xB49801A8, 
    310     0x00000000, 0xC0800000, 0x80000198, 0xC0004854, 0xC1000000, 0xCD040000, 0xC11C0000, 0xC000082C, 
    311     0xCD040E08, 0x99005348, 0xC0004848, 0xC9440000, 0xC1800000, 0xC2000000, 0xC0000820, 0xCE040000, 
    312     0xC1200000, 0xC0000818, 0xCD041008, 0xC11C0002, 0xC000082C, 0xCD040E08, 0xC0004850, 0xCE040000, 
    313     0xC2000002, 0xC0001ACC, 0xCE040010, 0x800000D0, 0xC2000002, 0xC0004850, 0xCE040000, 0x8000FE70, 
    314     0xC2000000, 0xC0004850, 0xCE040000, 0xA7E60012, 0x00000000, 0xC2000002, 0xC0001B00, 0xCE040008, 
    315     0x8000FE58, 0x00000000, 0xA7860032, 0x00000000, 0xC6800000, 0xC13C0002, 0xCD001E08, 0xC2020002, 
    316     0xC7E2A548, 0xC0001B00, 0xCE040000, 0x8000FE00, 0xC2040002, 0xC0001B00, 0xCE040208, 0x8000FDE0, 
    317     0xC2C80002, 0x6AC56000, 0xDACC0000, 0xC0004854, 0xCB440000, 0xC0004848, 0xCB840000, 0xC0000838, 
    318     0xC3C00000, 0xCBC40030, 0x5EF40004, 0x8400000A, 0xC3000000, 0xC0001ACC, 0xCF040108, 0x47BD8000, 
    319     0x84000012, 0x47BD8000, 0x88000018, 0xC1006E8C, 0x8000B908, 0xC0004840, 0xCC840000, 0x8000F6B8, 
    320     0xC0001AC0, 0xCAC40000, 0xC0004854, 0xCB440000, 0xA6C0FBD2, 0x00000000, 0x5EF40000, 0x8400F712, 
    321     0x5EF40002, 0x8400F9A2, 0x5EF40004, 0x8400FBA2, 0xC1006CE8, 0x8000B880, 0x00000000, 0xC0800000, 
    322     0xDF4B0040, 0xC0004900, 0xCB800000, 0xC2000000, 0xC000490A, 0xA78000B0, 0xCBC00000, 0xC1000000, 
    323     0xD9000001, 0xC1000002, 0xD90C0000, 0x6FF46000, 0x47F5A000, 0x5B744C80, 0xC2400000, 0x58340004, 
    324     0xCA400080, 0xC0004900, 0xCE000008, 0x5A640002, 0x58340004, 0xC6500080, 0xCD000080, 0xC0004914, 
    325     0xCA400000, 0xC2000002, 0x6A3D0000, 0x72252000, 0xCE400000, 0xC0000408, 0xCE000000, 0xA78200B8, 
    326     0xC0004908, 0xCBC00000, 0xC1000000, 0xD9000001, 0xC1000002, 0xD90C0000, 0x6FF4A000, 0x6FD44000, 
    327     0x4575A000, 0x47F5A000, 0x5B744E20, 0xC2800000, 0x58340006, 0xCA800080, 0xC2000000, 0xC0004900, 
    328     0xCE000108, 0x5EA80002, 0x58340006, 0xC6900080, 0xCD000080, 0x5A7C0020, 0xC2000002, 0x6A250000, 
    329     0xC0000408, 0xCE000000, 0xDCA80001, 0x5EA80000, 0x8400B6F0, 0x00000000, 0xA4800210, 0x00000000, 
    330     0xC3C00000, 0xC000140E, 0xCBC00020, 0xC3400000, 0xC2400000, 0x6FF86000, 0x47F9C000, 0x5BB84C80, 
    331     0x58380008, 0xCB400080, 0x58380006, 0xCA400080, 0x5F740002, 0x58380008, 0xC7500080, 0xCD000080, 
    332     0xC2000000, 0x58380004, 0xCA020080, 0xC3000000, 0x5838000C, 0xCB000028, 0x5A640002, 0x46250000, 
    333     0x8400FFF8, 0xC2400000, 0x58380006, 0xC6500080, 0xCD000080, 0xC2000000, 0x5838000A, 0xCA020080, 
    334     0x5B300002, 0x5838000C, 0xC7100028, 0xCD000028, 0xC2420020, 0x5A200004, 0x46612000, 0x8400FFF8, 
    335     0xC2000000, 0x5838000A, 0xC6101080, 0xCD001080, 0xC0004966, 0xCA400000, 0xC2000002, 0x6A3D0000, 
    336     0x72252000, 0xCE400000, 0x5F740000, 0x84000028, 0xC0004912, 0xCA000000, 0xC2C00002, 0x6AFD6000, 
    337     0x7EC16000, 0x76E10000, 0xCE000000, 0x5F300020, 0x84000028, 0xC0004924, 0xCA000000, 0xC2C00002, 
    338     0x6AFD6000, 0x7EC16000, 0x76E10000, 0xCE000000, 0xA4820050, 0xC2400000, 0xC000140E, 0xCA408020, 
    339     0xC2000002, 0xC0004900, 0xCE000008, 0xC000490A, 0xCE400000, 0xC1000000, 0xD9000001, 0xD8400080, 
    340     0xC1000004, 0xD9000001, 0xA4840288, 0x00000000, 0xC3C00000, 0xC000140E, 0xCBC10020, 0xC2800000, 
    341     0xC2000000, 0x6FF8A000, 0x6FD44000, 0x4579C000, 0x47F9C000, 0x5BB84E20, 0x5838002E, 0xCA800080, 
    342     0x58380006, 0xCA020080, 0xC3400000, 0x5838002E, 0xCB420080, 0x5AA80002, 0x46290000, 0x8400FFF8, 
    343     0xC2800000, 0x5838002E, 0xC6900080, 0xCD000080, 0x5F740002, 0x5838002E, 0xC7501080, 0xCD001080, 
    344     0xC0004968, 0xCA400000, 0xC2000002, 0x6A3D0000, 0x72252000, 0xCE400000, 0xC000492A, 0xCA800000, 
    345     0x5E740000, 0x84000028, 0xC0004910, 0xCA000000, 0xC2C00002, 0x6AFD6000, 0x7EC16000, 0x76E10000, 
    346     0xCE000000, 0x6ABD4010, 0xA68000D2, 0x00000000, 0xC0004910, 0xCA000000, 0xC2C00002, 0x6AFD6000, 
    347     0x7EC16000, 0x76E10000, 0xCE000000, 0x58380032, 0xCA000000, 0x58000002, 0xCA400000, 0x5838000C, 
    348     0x00000000, 0xCE000001, 0xCE400000, 0xC000492A, 0xCA000000, 0xC2C00002, 0x6AFD6000, 0x72E10000, 
    349     0xCE000000, 0xC000492C, 0xCA000000, 0xC2C00002, 0x6AFD6000, 0x72E10000, 0xCE000000, 0x80000028, 
    350     0xC000492C, 0xCA000000, 0xC2C00002, 0x6AFD6000, 0x7EC16000, 0x76E10000, 0xCE000000, 0xA4880100, 
    351     0xC2C00000, 0xC000140E, 0xCAC20020, 0xC000490E, 0xCA400000, 0xC2000002, 0x6A2D0000, 0x7E010000, 
    352     0x76252000, 0xCE400000, 0xC000496A, 0xCA400000, 0xC2000002, 0x6A2D0000, 0x72252000, 0xCE400000, 
    353     0x6EF0A000, 0x6ED44000, 0x45718000, 0x46F18000, 0x5B304E20, 0x58300000, 0xCA000000, 0x00000000, 
    354     0xC2400002, 0x76252000, 0x84000032, 0xC24C0002, 0xC6E40020, 0xC624C408, 0x58300010, 0xCA400508, 
    355     0x00000000, 0xC0001800, 0xCE400000, 0xA4860050, 0xC2400000, 0xC000140E, 0xCA418020, 0xC2020002, 
    356     0xC0004900, 0xCE000108, 0xC0004908, 0xCE400000, 0xC1000000, 0xD9000001, 0xD8400080, 0xC1000004, 
    357     0xD9000001, 0xC0001408, 0xCC800000, 0xC10E0002, 0xD90C0000, 0x8000EDA8, 0xDFBC0001, 0xC000496E, 
    358     0x99006050, 0xC9400000, 0xC7D80000, 0x00000000, 0xC5700000, 0x5EF00020, 0x88000130, 0x6F346000, 
    359     0x4735A000, 0x5B744C80, 0x58340008, 0xC2400000, 0xCA400080, 0x00000000, 0xC2000000, 0x5A640002, 
    360     0xCE400080, 0x58340004, 0xCA000080, 0x00000000, 0x00000000, 0x5E200002, 0xCE000080, 0xC0004912, 
    361     0xCA800000, 0xC2400002, 0x6A712000, 0x72694000, 0xCE800000, 0x5E200000, 0x8400003A, 0xC000480A, 
    362     0xCA000000, 0xC0000408, 0xCA800000, 0x76610000, 0x00000000, 0x72294000, 0xCE800000, 0x80000020, 
    363     0xC0004914, 0xCA000000, 0x7E412000, 0x00000000, 0x76610000, 0xCE000000, 0x800000B8, 0x6EF4A000, 
    364     0x6ED44000, 0x4575A000, 0x46F5A000, 0x5B744E20, 0x5834002E, 0xC2400000, 0xCA420080, 0x00000000, 
    365     0xC2000000, 0x5A640002, 0xC6501080, 0xCD001080, 0x58340006, 0xCA000080, 0x00000000, 0x00000000, 
    366     0x5A200002, 0xCE000080, 0xC0004910, 0xCA400000, 0xC2000002, 0x6A2D0000, 0x72252000, 0xCE400000, 
    367     0xC2000002, 0x6A310000, 0xC000042A, 0xCE000000, 0xC1040002, 0xD90C0000, 0x00000000, 0x8000EB18, 
    368     0x00000000, 0xC4980930, 0x9D000000, 0xC5580030, 0xC0000838, 0xCD840000, 0xC1440200, 0xC1C03200, 
    369     0xC55C1078, 0xC000100E, 0x9D000000, 0xCD800000, 0xC000100C, 0xCDC00000, 0xC0004862, 0xC9C00000, 
    370     0x00000000, 0x00000000, 0xD9D80001, 0xC0007200, 0x401C0000, 0x5DC07400, 0x8800FFFA, 0x5C000200, 
    371     0xCD800000, 0xC1F0000A, 0x71D4A000, 0xDD980000, 0xDD9C0001, 0x41D8E000, 0xC5D40268, 0xC0001010, 
    372     0xCD400000, 0x6C9C8000, 0x449CE000, 0x449CE000, 0x59DC0004, 0xC1601260, 0xC5D40268, 0x9D000000, 
    373     0xC0001012, 0xCD400000, 0x00000000, 0x00000000, 0xD9580000, 0x6D586000, 0x4558C000, 0x59984C80, 
    374     0xD9980001, 0x5818000A, 0xC1800000, 0xC9800080, 0xC0005400, 0x6D5CA000, 0x401C0000, 0x40180000, 
    375     0xC9400000, 0x58000002, 0x00000000, 0xC9C00000, 0xC0004930, 0xCD400000, 0xC0004932, 0xCDC00000, 
    376     0x59980004, 0xC1C20020, 0xB59CFFF8, 0x00000000, 0xC1800000, 0xDD9C0001, 0x581C000A, 0xCD800080, 
    377     0x581C000C, 0xC1800000, 0xC9800028, 0xC1C00002, 0xDD940000, 0x69D4E000, 0x5D980002, 0xCD800028, 
    378     0xC0004924, 0xC9800000, 0x00000000, 0x9D000000, 0x00000000, 0x71D8C000, 0xCD800000, 0xC000492A, 
    379     0xC9400000, 0xC1C00002, 0x69D8E000, 0x7DC0C000, 0x7594A000, 0xCD400000, 0xC000492C, 0xC9400000, 
    380     0xDD800001, 0x58000032, 0x75D4A000, 0x84000078, 0xC9400001, 0xC9800000, 0xDD800001, 0x5800000C, 
    381     0x00000000, 0xCD400001, 0xCD800000, 0xC000492C, 0xC9400000, 0xC000492A, 0xC9800000, 0x71D4A000, 
    382     0xC000492C, 0xCD400000, 0x71D8C000, 0xC000492A, 0xCD800000, 0x9D000000, 0x00000000, 0x00000000, 
    383     0x00000000, 0xC0004862, 0xC9800000, 0x00000000, 0xC1C00200, 0x4194C000, 0x45D8E000, 0x8800FFFA, 
    384     0xC5D80000, 0xC0004862, 0xCD800000, 0xC0001406, 0xC9800000, 0xC1C00002, 0x9D000000, 0xC5D80A08, 
    385     0xC5581050, 0xCD800000, 0xC0004930, 0xC9800000, 0xC0004932, 0xC9C00000, 0xC140000E, 0xC5581C20, 
    386     0xDD940000, 0xC0007200, 0x40140000, 0x5D407400, 0x8800FFFA, 0x5C000200, 0xCD800000, 0x58000002, 
    387     0x5D407400, 0x8800FFFA, 0x5C000200, 0xCDC00000, 0xDD540000, 0xC1C00000, 0x58140006, 0xC9C20080, 
    388     0xC1800000, 0x58140000, 0xC98000E0, 0x6DDC2000, 0xC000491E, 0x41D8E000, 0xCDC00000, 0xDD980000, 
    389     0xC1C00022, 0xC5D80D78, 0xDD940001, 0xC5581C20, 0xC000491C, 0xCD800000, 0xDD540000, 0xC1C00000, 
    390     0x58140006, 0xC9C20080, 0xC1800000, 0x58140004, 0xC9820080, 0x00000000, 0x59DC0002, 0x459CC000, 
    391     0x8400FFF8, 0xC1C00000, 0x9D000000, 0x58140006, 0xC5D81080, 0xCD801080, 0xC0004860, 0xC9400000, 
    392     0xC1800100, 0xC1D00002, 0x58146B00, 0xD5800000, 0x58000002, 0xD5800001, 0x59540004, 0xB558FFF8, 
    393     0xC0004860, 0xC1400000, 0xCD400000, 0xDD980001, 0x9D000000, 0xDD940000, 0xC0001404, 0xCDC00808, 
    394     0xC1C00000, 0xC1800200, 0x5D980004, 0xDF5D0050, 0x45D8A000, 0x8800FFDA, 0xDD800001, 0x5800000C, 
    395     0x00000000, 0xC9400001, 0xC9800000, 0xC1C00002, 0xC5D43F08, 0xC5D81E08, 0xC0004862, 0xC9C00000, 
    396     0x00000000, 0x00000000, 0x581C7200, 0x5DC07400, 0x8800FFFA, 0x5C000200, 0xCD400000, 0x58000002, 
    397     0x5DC07400, 0x8800FFFA, 0x5C000200, 0xCD800000, 0xC0004862, 0xC9C00000, 0x00000000, 0xC15004C0, 
    398     0xC5D40068, 0xDD9C0000, 0xC5D41C20, 0xC1C00000, 0xDD800001, 0x58000030, 0xC9C00080, 0xDD800001, 
    399     0x58000002, 0xC9800000, 0x6DDC2000, 0xC000491C, 0x41D8E000, 0xCD400001, 0xCDC00000, 0xDD940001, 
    400     0xC1C00000, 0x58140030, 0xC9C00080, 0xC1800000, 0x58140006, 0xC9820080, 0x00000000, 0x59DC0002, 
    401     0x459CC000, 0x8400FFF8, 0xC1C00000, 0x9D000000, 0x58140030, 0xC5D80080, 0xCD800080, 0xC1C00000, 
    402     0xDF5C0040, 0x5DDC0080, 0x8400FFD2, 0x00000000, 0x9D000000, 0x00000000, 0x00000000, 0x00000000, 
    403     0xC160FFFE, 0xC0000A10, 0xC9440068, 0xC1A0FFFE, 0x59980E28, 0xC000100C, 0xCD400000, 0xC000100E, 
    404     0xCD800000, 0xC0004964, 0xC9800000, 0x00000000, 0xC170000A, 0x7194A000, 0x6C988000, 0x4498C000, 
    405     0x4498C000, 0x59980004, 0xC5940278, 0xC0001010, 0xCD400000, 0xC0004946, 0xC9400000, 0x00000000, 
    406     0x00000000, 0x6D58A000, 0x6D5C4000, 0x45D8C000, 0x4558C000, 0xC000494A, 0xC9400000, 0xC0004948, 
    407     0xC9C00000, 0x4194C000, 0xC1400012, 0xC55C1820, 0x9D000000, 0xC59C0270, 0xC0001012, 0xCDC00000, 
    408     0xC1400000, 0x58000012, 0xC9410040, 0xC0004950, 0xC9C00000, 0xC5580000, 0xC5940840, 0xC5581080, 
    409     0xD9940000, 0xC000493C, 0xC9400000, 0xC0004954, 0xC9800000, 0x59DC00A8, 0x455CE000, 0x41D8E000, 
    410     0x5D5C0030, 0x8800FFF8, 0xC1C00030, 0xC1800000, 0xC5D84030, 0xC1400000, 0xC5D40010, 0x5DD40002, 
    411     0x8400005A, 0x5DD40004, 0x84000082, 0x5DD40006, 0x840000AA, 0x5DD80026, 0x840000D2, 0xDD540000, 
    412     0xDD800001, 0x58000008, 0x40180000, 0xCD400000, 0x59980002, 0x8000FFA8, 0xDD540000, 0xDD800001, 
    413     0x58000008, 0x40180000, 0xCD4000C0, 0x59980002, 0x8000FF70, 0xDD540000, 0xDD800001, 0x58000008, 
    414     0x40180000, 0xCD400080, 0x59980002, 0x8000FF38, 0xDD540000, 0xDD800001, 0x58000008, 0x40180000, 
    415     0xCD400040, 0x59980002, 0x8000FF00, 0x00000000, 0x9D000000, 0x00000000, 0x00000000, 0x00000000, 
    416     0x58000012, 0xC9400000, 0xC0004954, 0xC9C00000, 0xC0004950, 0xC9400080, 0xDD800001, 0x58000028, 
    417     0x5D9C0000, 0x8400003A, 0x5D9C0002, 0x8400003A, 0x5D9C0004, 0x84000052, 0xC55B0040, 0xC55C08C0, 
    418     0xCD800041, 0xCDC008C0, 0x80000048, 0xCD400000, 0x80000038, 0xC55900C0, 0xC55C1840, 0xCD8000C1, 
    419     0xCDC01840, 0x80000010, 0xC55A0080, 0xC55C1080, 0xCD800081, 0xCDC01080, 0x9D000000, 0x00000000, 
    420     0x00000000, 0x00000000, 0x59540002, 0x6994E018, 0x61C0C008, 0x4194A000, 0x5D940040, 0x8800FFFA, 
    421     0xC5940000, 0x9D000000, 0xCD400000, 0x00000000, 0x00000000, 0x9D000000, 0x4158A000, 0xCD400000, 
    422     0x00000000, 
     68    0xCFC00080, 0xC000496A, 0xCFC00080, 0xC3C1FFFE, 0xC00049A0, 0xCFC00000, 0xC3C00000, 0xC2800020, 
     69    0xC3000000, 0x7F018000, 0x6FF88000, 0x6FD44000, 0x4395C000, 0x5BB84A00, 0x5838000A, 0xCF000000, 
     70    0x5BFC0002, 0xB7E8FFA8, 0x00000000, 0xC3C00000, 0xC2800010, 0x6FF86000, 0x47F9C000, 0x5BB84C80, 
     71    0xC3400000, 0x58380004, 0xCB420080, 0x00000000, 0x58380008, 0xCF400080, 0x5BFC0002, 0xB7E8FF90, 
     72    0x00000000, 0xC3C00000, 0xC2800020, 0xC348001E, 0xC3000000, 0x7F018000, 0x6FF8A000, 0x6FD44000, 
     73    0x4579C000, 0x47F9C000, 0x5BB84E20, 0x58380008, 0xCF400420, 0x5838000A, 0xCF000000, 0x5BFC0002, 
     74    0xB7E8FF90, 0x00000000, 0x00000000, 0xC3E02242, 0x5BFC0022, 0xC0004002, 0xCFC00000, 0x00000000, 
     75    0xC121FFFE, 0x5911FE14, 0x15000000, 0x80000518, 0x00000000, 0x80002118, 0x00000000, 0x8000FFC8, 
     76    0xC0004958, 0xC8400000, 0x00000000, 0xC3C00002, 0x7BC42000, 0xCC400000, 0xC0004848, 0xCB840000, 
     77    0xC000495C, 0xCAC40000, 0xC0004844, 0xC8840000, 0x46F90000, 0x8400FF6A, 0xC000487C, 0xC8040000, 
     78    0x00000000, 0x00000000, 0x40080000, 0xCA000000, 0xC0001624, 0xCB040000, 0xA63C005A, 0x00000000, 
     79    0x00000000, 0xA71EFF02, 0x00000000, 0xC0000824, 0xCA840000, 0x6CA08000, 0x6CA42000, 0x46610000, 
     80    0x42290000, 0xC35E0002, 0xC6340068, 0xC0001624, 0xCF440080, 0xC2000000, 0xC161FFFE, 0x5955FFFE, 
     81    0x15400000, 0x00000000, 0xC0004844, 0xC8840000, 0xC000082C, 0xCA040040, 0x00000000, 0x00000000, 
     82    0x58880002, 0xB608FFF8, 0x00000000, 0xC0800000, 0xC0004844, 0xCC840040, 0x5AEC0002, 0xC000495C, 
     83    0xCEC40000, 0x5E6C0006, 0x84000048, 0xC0004848, 0xCB840000, 0xC0000838, 0xC2500002, 0xCE440808, 
     84    0x5FB80002, 0xC0004848, 0xCF840000, 0x5EEC0002, 0xC000495C, 0xCEC40000, 0x00000000, 0xC121FFFE, 
     85    0x5911FE14, 0x15000000, 0x8000FD80, 0xC000495A, 0xC8400000, 0x00000000, 0xC3C00002, 0x7BC42000, 
     86    0xCC400000, 0xC0004960, 0xCAC40000, 0x00000000, 0x00000000, 0x5EEC0000, 0x840000F2, 0x00000000, 
     87    0xB6FC0030, 0xC0001600, 0xCA040000, 0x00000000, 0x00000000, 0xA61E00B2, 0x6FE90000, 0xC0000A28, 
     88    0xCE840808, 0xC2C00000, 0xC2800004, 0xB6E80080, 0xC0001604, 0xCA840000, 0xC0004960, 0xCEC40000, 
     89    0xA69EFCA2, 0x00000000, 0x6FE90000, 0xC0000A28, 0xCE840808, 0xC2C00002, 0xC0001600, 0xCA040000, 
     90    0x00000000, 0x00000000, 0xA61E000A, 0x6FE90000, 0xC0000A28, 0xCE840808, 0xC2C00000, 0xC0001604, 
     91    0xCA840000, 0xC0004960, 0xCEC40000, 0xA69EFC0A, 0xC2400000, 0xC0000A14, 0xCA440030, 0x00000000, 
     92    0x00000000, 0x46E52000, 0xA4400000, 0xC2800000, 0xDFEB0031, 0x8000FFF8, 0xDFEA0031, 0xB668FB82, 
     93    0x00000000, 0xC00048A0, 0xCB040000, 0xC0000A10, 0xCA840000, 0x6F208000, 0x6F242000, 0x46610000, 
     94    0x42A10000, 0xC2400000, 0xC0000A14, 0xCA440030, 0xC35E0002, 0xC6340068, 0xC0001604, 0xCF440080, 
     95    0x5B300002, 0xB670FFF8, 0x5AEC0002, 0xC3000000, 0xC00048A0, 0xCF040000, 0xC0004960, 0xCEC40000, 
     96    0x8000FAC0, 0xC0004918, 0xD2800000, 0xC2000000, 0xDF600040, 0x5E600080, 0x8400025A, 0x00000000, 
     97    0xC161FFFE, 0x5955FFFE, 0x15400000, 0x00000000, 0xC000480A, 0xCA000000, 0xC0004912, 0xCA400000, 
     98    0xC0004924, 0xCA800000, 0xC0004966, 0xCAC00000, 0x00000000, 0xC121FFFE, 0x5911FE14, 0x15000000, 
     99    0x76610000, 0x76A10000, 0x76E10000, 0x840001B2, 0xC0004918, 0xCA400000, 0xC28001FE, 0x76A10000, 
     100    0x5A640002, 0x6A254010, 0x5EE80000, 0x84000002, 0x6AA54000, 0x8000FFF8, 0xC6280000, 0x62818008, 
     101    0xC0004918, 0xCF000000, 0xC161FFFE, 0x5955FFFE, 0x15400000, 0x00000000, 0xC0004966, 0xCA400000, 
     102    0xC2000002, 0x6A310000, 0x7E010000, 0x76252000, 0xCE400000, 0x00000000, 0xC121FFFE, 0x5911FE14, 
     103    0x15000000, 0x6F346000, 0x4735A000, 0x5B744C80, 0xC2800000, 0x58340006, 0xCA800080, 0xC2C00000, 
     104    0x58340000, 0xCAC000E0, 0xC2400000, 0x5834000A, 0xCA420080, 0x6EA82000, 0x42E9E000, 0x6F2CA000, 
     105    0x42E56000, 0x5AEC1400, 0xC3990040, 0xC7381C20, 0xC6F80068, 0x99005B78, 0xDB980000, 0xDBD80001, 
     106    0x00000000, 0xDEA00000, 0x47210000, 0x8400FD68, 0xC0004958, 0xC8400000, 0x00000000, 0xC3C00002, 
     107    0x7BC42000, 0xCC400000, 0xC0004848, 0xCB840000, 0xC0004844, 0xC8840000, 0x5FB80000, 0x8400F7DA, 
     108    0xC0001A1C, 0xCA000000, 0xC2400002, 0x6A452000, 0x76610000, 0x8400F7AA, 0xC000487C, 0xC8040000, 
     109    0x00000000, 0x00000000, 0x40080000, 0xCA000000, 0xC4240000, 0x00000000, 0xA63C17BA, 0x00000000, 
     110    0xC0004878, 0xC8040000, 0x6C908000, 0x44908000, 0x44908000, 0x40100000, 0xCA000000, 0xC4240000, 
     111    0x00000000, 0xC0004934, 0xCE000000, 0xC2800002, 0xC4681C10, 0xC62821D8, 0xC2600010, 0x5A650040, 
     112    0xC0004800, 0xCB400000, 0xC2200400, 0x5A200000, 0xC7601048, 0xC0001220, 0xCE800000, 0xC0001200, 
     113    0xCE400000, 0xC0001202, 0xCE000000, 0xC0001240, 0xCB400000, 0x00000000, 0x00000000, 0xA754FFC0, 
     114    0xC2000000, 0xC7600048, 0xA7520022, 0x00000000, 0x00000000, 0x990062F0, 0xC0004822, 0xC9400000, 
     115    0xC1800002, 0x80001668, 0x58204080, 0xC2000000, 0xCA000020, 0xC2400000, 0xCA414008, 0xC2800000, 
     116    0xCA812008, 0xC2C00000, 0xCAC20020, 0xC0004938, 0xCE000000, 0xC0004920, 0xCE400000, 0xC0004916, 
     117    0xCE800000, 0xC0004922, 0xCEC00000, 0xA6400520, 0x00000000, 0xC0004938, 0xCBC00000, 0x00000000, 
     118    0xC3800000, 0x6FF48000, 0x6FD44000, 0x4355A000, 0x5B744A00, 0x58340000, 0xCB802018, 0x00000000, 
     119    0xC2000000, 0x6FB46000, 0x47B5A000, 0x5B744C80, 0x5834000C, 0xCA000028, 0xC000491A, 0xCF800000, 
     120    0x5E200000, 0x84000452, 0xC2000000, 0xDF610050, 0x5E6001E8, 0x8800FFD0, 0xC2000002, 0xC2400466, 
     121    0xC2A00000, 0x5AA80000, 0xC0001006, 0xCE000000, 0xC0001008, 0xCE400000, 0xC000100A, 0xCE800000, 
     122    0x990055B8, 0xC1A0FFFE, 0xC0000824, 0xC9840068, 0xC0004934, 0xCA400000, 0xC2000000, 0xC2800002, 
     123    0x990055F8, 0xDA980000, 0xC6140000, 0xC6580000, 0xC161FFFE, 0x5955FFFE, 0x15400000, 0x00000000, 
     124    0x990056E0, 0xC000491A, 0xC9400000, 0x00000000, 0x00000000, 0xC121FFFE, 0x5911FE14, 0x15000000, 
     125    0xC0004922, 0xCA001120, 0xC3C00000, 0xC3800000, 0xC0004930, 0xCE001120, 0xC0004932, 0xCBC000E0, 
     126    0xC2800000, 0xC000491E, 0xCFC00000, 0xC0004862, 0xCA800068, 0xC3A0001A, 0x5BB94000, 0xC6B80068, 
     127    0xC000491C, 0xCF800000, 0x99005950, 0xC000491C, 0xC1400000, 0xC9420050, 0x00000000, 0x00000000, 
     128    0x00000000, 0xA8E2FFC8, 0xC2000000, 0xC1220002, 0xD90C0000, 0xDF600040, 0x5E600080, 0x8400FFDA, 
     129    0xC000491C, 0xCA000000, 0xC000491E, 0xCA400000, 0x00000000, 0x00000000, 0x99005B78, 0xDA180000, 
     130    0xDA580001, 0x00000000, 0xC2000000, 0xDF610050, 0x5E6001FE, 0x8800FFD0, 0xC0004916, 0xCA800000, 
     131    0xC2C00000, 0xDFEC0050, 0xC2400000, 0x46E52000, 0x84000032, 0x5EA80000, 0x84000022, 0xC2600002, 
     132    0x990062F0, 0xC000482E, 0xC9400000, 0xC1800002, 0x80000018, 0xC2600000, 0x990062F0, 0xC000482C, 
     133    0xC9400000, 0xC1800002, 0xC2000068, 0xC6240080, 0xC0004930, 0xCE400088, 0xC000491A, 0xC9800000, 
     134    0xC0004862, 0xC9400000, 0x6D9C6000, 0x459CE000, 0x59DC4C80, 0x990059D8, 0xD9580000, 0xD9980001, 
     135    0xD9D40000, 0x99005950, 0xC000491C, 0xC1400000, 0xC9420050, 0xC2000000, 0xDF600040, 0x5E600080, 
     136    0x8400FFD2, 0x00000000, 0xC000491C, 0xCA000000, 0xC000491E, 0xCA400000, 0x00000000, 0x00000000, 
     137    0x99005B78, 0xDA180000, 0xDA580001, 0x00000000, 0x800010D0, 0x00000000, 0x990062F0, 0xC000482A, 
     138    0xC9400000, 0xC1800002, 0x800010A0, 0xC0004938, 0xCBC00000, 0x00000000, 0x00000000, 0x6FF88000, 
     139    0x6FD44000, 0x4395C000, 0x5BB84A00, 0x58380008, 0xCA000000, 0x00000000, 0x00000000, 0xA6000362, 
     140    0x00000000, 0xC0004938, 0xCBC00000, 0xC3000000, 0x00000000, 0x6FF88000, 0x6FD44000, 0x4395C000, 
     141    0x5BB84A00, 0x58380000, 0xCB002018, 0xC2000000, 0x58380008, 0xCA020080, 0x5838000C, 0xCAC00000, 
     142    0x5838000E, 0xCA400000, 0xC000491A, 0xCF000000, 0xC0004930, 0xCEC00000, 0xC000493C, 0xCE000000, 
     143    0xC0004932, 0xCE400000, 0x5E200000, 0x84000108, 0xC2800000, 0xA6FE009A, 0x6F206000, 0x47210000, 
     144    0x5A204C80, 0x5820000C, 0xCA800028, 0x00000000, 0x00000000, 0x5EA80000, 0x840001DA, 0x00000000, 
     145    0xC161FFFE, 0x5955FFFE, 0x15400000, 0x00000000, 0x990056E0, 0xC000491A, 0xC9400000, 0x00000000, 
     146    0x00000000, 0xC121FFFE, 0x5911FE14, 0x15000000, 0xC0004930, 0xCAC00000, 0xC0004932, 0xCA400000, 
     147    0xC7EC1120, 0xC0004930, 0xCEC00000, 0x5838000C, 0xCEC00000, 0x58000002, 0xCE400000, 0xC0004934, 
     148    0xCA000000, 0xC2400002, 0x6E642000, 0x6E642000, 0x76252000, 0x84000012, 0xC2400002, 0x6E684000, 
     149    0x58380008, 0xCE800208, 0xA6000000, 0x6E682000, 0x58380008, 0xCE800108, 0xC2400002, 0x6E642000, 
     150    0x76252000, 0x840000D2, 0x58380008, 0xCA000000, 0xC2800000, 0xC2400000, 0xA60200A0, 0xDBA80000, 
     151    0x6F386000, 0x4739C000, 0x5BB84C80, 0x58380004, 0xCA400080, 0x58380002, 0xCA800080, 0x00000000, 
     152    0xDEB80000, 0x46694000, 0x88000048, 0x00000000, 0xC0004824, 0xCA000000, 0xC2400002, 0x6E640000, 
     153    0x5A200002, 0xCE000000, 0x58380008, 0xCE400008, 0x80000000, 0x00000000, 0x80000030, 0xC0004934, 
     154    0xCA000000, 0x00000000, 0x00000000, 0xA6020C4A, 0x00000000, 0x00000000, 0x80000C80, 0xC2800000, 
     155    0xC2000200, 0xC240001A, 0xDF690050, 0x46A14000, 0x46694000, 0x8800FFBA, 0xC2000006, 0xC2600982, 
     156    0x5A643B6E, 0x5838000A, 0xCA800000, 0xC0001006, 0xCE000000, 0xC0001008, 0xCE400000, 0xC000100A, 
     157    0xCE800000, 0x990055B8, 0xC1A0FFFE, 0xC0000824, 0xC9840068, 0xC2000000, 0xC0004930, 0xCA02E010, 
     158    0x58380026, 0xCA400000, 0x00000000, 0xC2800000, 0x990055F8, 0xDA980000, 0xC6140000, 0xC6580000, 
     159    0xC0004934, 0xCA000000, 0x00000000, 0x00000000, 0xA6020002, 0x00000000, 0x00000000, 0x80000300, 
     160    0xC0004938, 0xCBC00000, 0xC0004878, 0xC8040000, 0x6C908000, 0x44908000, 0x44908000, 0x40100000, 
     161    0xCA000000, 0xC4240000, 0x00000000, 0x58240018, 0xCA000000, 0x6FF88000, 0x6FD44000, 0x4395C000, 
     162    0x5BB84A00, 0xC3000000, 0xC3400002, 0xC2C00000, 0xC62C0080, 0xC6270040, 0xC0004940, 0xCE400040, 
     163    0xC6260040, 0xC0004942, 0xCE400040, 0xC000493C, 0xCA000000, 0x5EEC0000, 0x84000172, 0x5A6C0010, 
     164    0x46614000, 0x88000178, 0x5A600052, 0x466D4000, 0x88000160, 0x58380006, 0xCA800000, 0xC0004940, 
     165    0xCA000000, 0xC2400000, 0xC6A70040, 0x7E412000, 0x76252000, 0xC2000000, 0xC6A10040, 0x46610000, 
     166    0x84000120, 0xC0004942, 0xCA000000, 0xC2400000, 0xC6A60040, 0x7E412000, 0x76252000, 0xC2000000, 
     167    0xC6A00040, 0x58380002, 0xCA800000, 0x46610000, 0x840000D0, 0xC2400000, 0xC6A60080, 0x46E50000, 
     168    0x880000C2, 0xC2400000, 0xC6A40080, 0x58380008, 0xCA800000, 0x466D0000, 0x880000A2, 0x00000000, 
     169    0xA682FFF8, 0x00000000, 0xC7700B08, 0xA6840078, 0x00000000, 0xC7700A08, 0x80000068, 0xC7700208, 
     170    0xC000493C, 0xCAC00000, 0x80000048, 0xC7700308, 0xC000493C, 0xCAC00000, 0x80000028, 0xC7700908, 
     171    0x80000018, 0xC7700808, 0x80000008, 0xC7700708, 0x8000FFF8, 0xC7700508, 0xC0004944, 0xCF000000, 
     172    0xC000493E, 0xCEC00000, 0xC0004938, 0xCA400000, 0xC000493C, 0xCB800000, 0xC000493E, 0xCB400000, 
     173    0xC3000000, 0x6E608000, 0x6E544000, 0x42150000, 0x5A204A00, 0x5AA00008, 0x58200004, 0xCB000080, 
     174    0xC0004934, 0xCA000000, 0xC2400000, 0xC0004930, 0xCA42E010, 0xC3C00018, 0xA6020078, 0x00000000, 
     175    0x43656000, 0x46F90000, 0x88000038, 0x47AD6000, 0x6EE04010, 0x5BE00004, 0xC2000000, 0xC6E00010, 
     176    0x5E200000, 0x8400002A, 0x5BFC0002, 0x80000018, 0xC3C00004, 0x5A2C0008, 0x46390000, 0x8800FFFA, 
     177    0x5FB80008, 0x6FE04000, 0x42390000, 0x46312000, 0x88000050, 0xC2400000, 0xC0004930, 0xCA42E010, 
     178    0xC2060002, 0xC6800000, 0xCE000308, 0x6FE04000, 0x4631C000, 0x5F700010, 0x4675A000, 0xC2000000, 
     179    0xC6340010, 0xC25A000A, 0xC000491A, 0xCA401C20, 0xC2800000, 0xC0004932, 0xCA8000E0, 0xC0004862, 
     180    0xCA400068, 0x6FA04010, 0x42290000, 0xC000491E, 0xCE000000, 0xC7E41050, 0xC000491C, 0xCE400000, 
     181    0x6FE04000, 0x43A1C000, 0xC000493C, 0xCF800000, 0xC000493E, 0xCF400000, 0xC000493A, 0xCFC00000, 
     182    0x8000FFF0, 0x00000000, 0x00000000, 0x00000000, 0xC2000000, 0xDCE00000, 0xA622FFB8, 0xC1220002, 
     183    0xD90C0000, 0xC0004938, 0xCBC00000, 0xC0004944, 0xCB400000, 0xC0004862, 0xCB000000, 0xC0004934, 
     184    0xCA000000, 0x6FF88000, 0x6FD44000, 0x4395C000, 0x5BB84A00, 0xA6020248, 0xC2400000, 0x58380008, 
     185    0xCA406008, 0xDFE80000, 0xC2218E08, 0x5A21BAF6, 0x46294000, 0x8400000A, 0xC2080002, 0x7235A000, 
     186    0x80000040, 0x5E640000, 0x8400000A, 0xC20C0002, 0x7235A000, 0x80000018, 0xC2000000, 0xC760E718, 
     187    0xC7604220, 0x5E200000, 0x8400025A, 0xC2200002, 0xC0004930, 0xCE001008, 0x990062F0, 0xC0004828, 
     188    0xC9400000, 0xC1800002, 0x58380000, 0xCA000000, 0x00000000, 0x00000000, 0xA6000112, 0xC0004940, 
     189    0xCA800000, 0xC0004942, 0xCA400000, 0xC7600080, 0xC6A01840, 0xC6601040, 0xC000493A, 0xCA400000, 
     190    0xC0004934, 0xCA800000, 0xC0007200, 0x40300000, 0x40240000, 0x5C000004, 0x5EC07400, 0x8800FFFA, 
     191    0x5C000200, 0xCE000000, 0x58000002, 0x5EC07400, 0x8800FFFA, 0x5C000200, 0xCE800000, 0xC000493E, 
     192    0xCA000000, 0xC2400000, 0x5838000C, 0xCE400000, 0x990062F0, 0xC0004830, 0xC9400000, 0xC6180000, 
     193    0xC0004930, 0xC6100080, 0xCD000080, 0x80000090, 0xC2400002, 0x58380008, 0xCE400008, 0xC0004944, 
     194    0xCF400000, 0x80000260, 0xC000493C, 0xCA400000, 0xDFE80000, 0x5A300018, 0xC0007200, 0x40200000, 
     195    0xCA000000, 0x58380008, 0xC6501080, 0xCD001080, 0x5838000A, 0xCE800000, 0x58380026, 0xCE000000, 
     196    0xC0004944, 0xCF400000, 0x99005950, 0xC000491C, 0xC1400000, 0xC9420050, 0x80000020, 0x00000000, 
     197    0x990062F0, 0xC0004826, 0xC9400000, 0xC1800002, 0x8000FDC0, 0xC2000000, 0xC2400080, 0xDF600040, 
     198    0xB624FFCA, 0xC000491C, 0xCA400000, 0xC000491E, 0xCA800000, 0x99005B78, 0xDA580000, 0xDA980001, 
     199    0x00000000, 0xC0004934, 0xCA000000, 0x00000000, 0xC2800000, 0xA6020140, 0xC2400004, 0xC2000200, 
     200    0xDF690050, 0x46A14000, 0x46694000, 0x8800FFC2, 0x00000000, 0xC000491A, 0xC9800000, 0xC0004862, 
     201    0xC9400000, 0x6D9C6000, 0x459CE000, 0x59DC4C80, 0x990059D8, 0xD9580000, 0xD9980001, 0xD9D40000, 
     202    0x99005950, 0xC000491C, 0xC1400000, 0xC9420050, 0xC2000000, 0xC2400080, 0xDF600040, 0xB624FFCA, 
     203    0xC000491C, 0xCA400000, 0xC000491E, 0xCA800000, 0x99005B78, 0xDA580000, 0xDA980001, 0x00000000, 
     204    0x58380008, 0xCA400000, 0xC2000000, 0xCE000020, 0xC2A1FFFE, 0x5AA9FFFE, 0xCE001080, 0x5838000A, 
     205    0xCE800000, 0xC161FFFE, 0x5955FFFE, 0x15400000, 0x00000000, 0xC0000838, 0xC2500002, 0xCE440808, 
     206    0xC0004848, 0xCB840000, 0xC2000000, 0xC000082C, 0xCA040030, 0x5FB80002, 0xC0004848, 0xCF840000, 
     207    0x58880002, 0xB608FFF8, 0x00000000, 0xC0800000, 0xC0004844, 0xCC840000, 0x00000000, 0xC121FFFE, 
     208    0x5911FE14, 0x15000000, 0x8000DEC0, 0xC2000000, 0xDF600040, 0x5E200080, 0x84000252, 0x00000000, 
     209    0xC161FFFE, 0x5955FFFE, 0x15400000, 0x00000000, 0xC000480C, 0xCA000000, 0xC0004910, 0xCA400000, 
     210    0xC000492C, 0xCA800000, 0xC0004968, 0xCAC00000, 0x00000000, 0xC121FFFE, 0x5911FE14, 0x15000000, 
     211    0x76610000, 0x76A10000, 0x762D6000, 0x840001AA, 0xC0004926, 0xCA400000, 0xC201FFFE, 0x762D6000, 
     212    0x5A640002, 0x6AE50010, 0x5F200000, 0x84000002, 0x6A250000, 0x8000FFF8, 0xC6E00000, 0x62014008, 
     213    0xC0004926, 0xCE800000, 0xC161FFFE, 0x5955FFFE, 0x15400000, 0x00000000, 0xC0004968, 0xCA400000, 
     214    0xC2000002, 0x6A290000, 0x7E010000, 0x76252000, 0xCE400000, 0x00000000, 0xC121FFFE, 0x5911FE14, 
     215    0x15000000, 0x6EB4A000, 0x6E944000, 0x4575A000, 0x46B5A000, 0x5B744E20, 0x58340002, 0xC2000000, 
     216    0xCA0000E0, 0x5834002E, 0xC2400000, 0xCA400080, 0x6EB0A000, 0x6EBC4000, 0x47F18000, 0x46B18000, 
     217    0x5B300E4E, 0x5B300004, 0x6E642000, 0x4225E000, 0xC39A8024, 0xC7380068, 0xC6B81C20, 0x99005B78, 
     218    0xDB980000, 0xDBD80001, 0x00000000, 0xC2000000, 0xDF600040, 0x5E200080, 0x8400033A, 0x00000000, 
     219    0xC161FFFE, 0x5955FFFE, 0x15400000, 0x00000000, 0xC000490E, 0xCA000000, 0xC00049A0, 0xCA800000, 
     220    0xC000492A, 0xCA400000, 0xC000496A, 0xCB000000, 0xC0004956, 0xCAC00000, 0x00000000, 0xC121FFFE, 
     221    0x5911FE14, 0x15000000, 0x76318000, 0x76718000, 0x76B18000, 0x84000282, 0xC201FFFE, 0x76318000, 
     222    0x5AEC0002, 0x6B2D0010, 0x5EA00000, 0x84000002, 0x6A2D0000, 0x8000FFF8, 0xC7200000, 0x62016008, 
     223    0xC0004956, 0xCEC00000, 0x6EF4A000, 0x6ED44000, 0x4575A000, 0x46F5A000, 0x5B744E20, 0x58340000, 
     224    0xC9C00000, 0xC00049A0, 0xCA000000, 0xC3000000, 0xC5F04020, 0xC2400000, 0xC5E50040, 0x7E412000, 
     225    0x76610000, 0xCE000000, 0xC0004980, 0x40300000, 0xCEC00000, 0xC161FFFE, 0x5955FFFE, 0x15400000, 
     226    0x00000000, 0xC000496A, 0xCA400000, 0xC2000002, 0x6A2D0000, 0x7E010000, 0x76252000, 0xCE400000, 
     227    0x00000000, 0xC121FFFE, 0x5911FE14, 0x15000000, 0x6EF4A000, 0x6ED44000, 0x4575A000, 0x46F5A000, 
     228    0x5B744E20, 0x5834000E, 0xC2000000, 0xCA0000E0, 0x58340008, 0xC2400000, 0xCA420080, 0x5834000C, 
     229    0xC2800000, 0xCA832018, 0x6E644010, 0x42250000, 0x4229E000, 0xC39A8008, 0x58340008, 0xCB809020, 
     230    0x58340008, 0xC2800000, 0xCA810018, 0x6EE0A000, 0x6EE44000, 0x46610000, 0x46E10000, 0x5A200008, 
     231    0x5A200E28, 0x42290000, 0xC6380068, 0xC6F81C20, 0x99005B78, 0xDB980000, 0xDBD80001, 0x00000000, 
     232    0xC000495A, 0xC8400000, 0x00000000, 0xC3C00002, 0x7BC42000, 0xCC400000, 0xC0001A1C, 0xCA000000, 
     233    0xC2400008, 0x6A452000, 0x76610000, 0x84000EAA, 0xC0000A28, 0xC3800000, 0xCB840030, 0xC0000A14, 
     234    0xC3400000, 0xCB440030, 0xC0004880, 0xCB040000, 0xB7B40052, 0x58041802, 0xCAC00000, 0xA7000058, 
     235    0x00000000, 0x00000000, 0xA6C8D7E8, 0xC1000000, 0xC6D00020, 0xC0004980, 0x40100000, 0xCA800000, 
     236    0x80000058, 0x00000000, 0x00000000, 0x00000000, 0x8000D7A0, 0x00000000, 0xC2800000, 0xC7282020, 
     237    0xC000490E, 0xCA400000, 0x6BE9E000, 0x00000000, 0x77E52000, 0x8400D758, 0x6EA0A000, 0x6E944000, 
     238    0x45610000, 0x46A10000, 0x5A204E20, 0x5820000C, 0xCA000000, 0xC0004946, 0xCE800000, 0xA6220388, 
     239    0x00000000, 0xC2200060, 0xC0004948, 0xCE000010, 0xCE001040, 0xC240000A, 0xC000494A, 0xCE400000, 
     240    0xC2B60002, 0xC0004964, 0xCE801B08, 0x99005E48, 0xC00048A0, 0xC8840000, 0x00000000, 0xC0004946, 
     241    0xCBC00000, 0x00000000, 0x00000000, 0x6FF8A000, 0x6FD44000, 0x4579C000, 0x47F9C000, 0x5BB84E20, 
     242    0x99005C08, 0xDBD80000, 0xDB980001, 0x00000000, 0x99005950, 0xC000491C, 0xC1400000, 0xC9420050, 
     243    0xC000491C, 0x99005E00, 0xC9400001, 0xC9800000, 0x00000000, 0x99005B78, 0xD9580000, 0xD9980001, 
     244    0x00000000, 0xC161FFFE, 0x5955FFFE, 0x15400000, 0x00000000, 0x99005840, 0xDBD80000, 0xDB980001, 
     245    0xC7D80000, 0x00000000, 0xC121FFFE, 0x5911FE14, 0x15000000, 0x6FF8A000, 0x6FD44000, 0x4579C000, 
     246    0x47F9C000, 0x5BB84E20, 0x58380010, 0xCA000000, 0xC0004874, 0xC8040000, 0x6C908000, 0x44908000, 
     247    0x44908000, 0x40100000, 0xCA400000, 0xC4340000, 0x00000000, 0xC7400000, 0xCE000000, 0xC161FFFE, 
     248    0x5955FFFE, 0x15400000, 0x00000000, 0xC000490E, 0xCA400000, 0xC2800002, 0x6ABD4000, 0x72A52000, 
     249    0xCE400000, 0x00000000, 0xC121FFFE, 0x5911FE14, 0x15000000, 0x990062F0, 0xC0004836, 0xC9400000, 
     250    0xC1800002, 0x00000000, 0x00000000, 0x00000000, 0xA8E2FFC8, 0x00000000, 0x58380000, 0xC9000000, 
     251    0xC00049A0, 0xCA000000, 0xC2800000, 0xC5290040, 0x72A10000, 0xCE000000, 0xC1220002, 0xD90C0000, 
     252    0xC2000000, 0xC0000A14, 0xCA040030, 0xC0000A28, 0xC2500002, 0xCE440808, 0x58880002, 0xB608FFF8, 
     253    0xC00048A0, 0xC0800000, 0xCC840000, 0x8000D368, 0xC0004946, 0xCBC00000, 0xC161FFFE, 0x5955FFFE, 
     254    0x15400000, 0x00000000, 0xC000490E, 0xCA400000, 0xC2800002, 0x6ABD4000, 0x72A52000, 0xCE400000, 
     255    0x00000000, 0xC121FFFE, 0x5911FE14, 0x15000000, 0x6FF8A000, 0x6FD44000, 0x4579C000, 0x47F9C000, 
     256    0x5BB84E20, 0x58380008, 0xCA000000, 0x5838000C, 0xCA400000, 0xC3400000, 0xC6340008, 0xC000494E, 
     257    0xCF400000, 0xC2800000, 0xC62A0080, 0xC3000000, 0xC6308020, 0x6F304000, 0x43298000, 0xC000493C, 
     258    0xCF000000, 0xC2C00000, 0xC66C0080, 0xC0004950, 0xCEC00000, 0xC2800000, 0xC66AE028, 0xC0004954, 
     259    0xCE800000, 0x5F740000, 0x84000188, 0x5E300028, 0x462D2000, 0x84000152, 0x462D2000, 0x8800011A, 
     260    0x5E300018, 0x462D2000, 0x88000012, 0x462D2000, 0x8400002A, 0x00000000, 0x800000A8, 0x00000000, 
     261    0x99005F88, 0xDBD80000, 0xDB980001, 0xC7800000, 0xC3400002, 0xC000494E, 0xCF400000, 0xC161FFFE, 
     262    0x5955FFFE, 0x15400000, 0x00000000, 0xC000490E, 0xCA400000, 0xC2800002, 0x6ABD4000, 0x7E814000, 
     263    0x76A52000, 0xCE400000, 0x00000000, 0xC121FFFE, 0x5911FE14, 0x15000000, 0xC2200060, 0xC0004948, 
     264    0xCE001040, 0xC2000000, 0xC000494C, 0xCE000000, 0x80000068, 0x00000000, 0x99005F88, 0xDBD80000, 
     265    0xDB980001, 0xC7800000, 0x99006188, 0xDBD80000, 0xDB980001, 0xC7800000, 0xC2200058, 0xC0004948, 
     266    0xCE001040, 0xC2000002, 0xC000494C, 0xCE000000, 0xC2000006, 0xC0001006, 0xCE000000, 0x5838000A, 
     267    0xCA400000, 0xC2200982, 0x5A203B6E, 0xC0001008, 0xCE000000, 0xC000100A, 0xCE400000, 0xC0004954, 
     268    0xCA800000, 0xC200000C, 0xC000494A, 0xCE000000, 0xC0004948, 0xCE800010, 0xC2B60000, 0xC0004964, 
     269    0xCE800000, 0x99005E48, 0xC00048A0, 0xC8840000, 0x00000000, 0xC0004946, 0xCBC00000, 0xC000494C, 
     270    0xCA000000, 0x6FF8A000, 0x6FD44000, 0x4579C000, 0x47F9C000, 0x5BB84E20, 0x5E200000, 0x840000E2, 
     271    0x00000000, 0x99005C08, 0xDBD80000, 0xDB980001, 0x00000000, 0x99005950, 0xC000491C, 0xC1400000, 
     272    0xC9420050, 0xC000491C, 0x99005E00, 0xC9400001, 0xC9800000, 0x00000000, 0x99005B78, 0xD9580000, 
     273    0xD9980001, 0x00000000, 0xC161FFFE, 0x5955FFFE, 0x15400000, 0x00000000, 0x99005840, 0xDBD80000, 
     274    0xDB980001, 0xC7D80000, 0x00000000, 0xC121FFFE, 0x5911FE14, 0x15000000, 0xC000493C, 0xCA800000, 
     275    0xC000494E, 0xCAC00000, 0xC3000018, 0xC3400006, 0x5E200000, 0x84000012, 0xC2800000, 0xC2C00000, 
     276    0xC300001E, 0xC3400000, 0xC6AC1080, 0xC72C0420, 0xC76C0818, 0x58380010, 0xCA800000, 0x58380008, 
     277    0xCEC00000, 0xC6280108, 0xC0004874, 0xC8040000, 0x6C908000, 0x44908000, 0x44908000, 0x40100000, 
     278    0xCB000000, 0xC4340000, 0x00000000, 0xC7400000, 0xCE800000, 0xC0004952, 0xCE800000, 0x00000000, 
     279    0x00000000, 0x00000000, 0xA8E2FFC8, 0x00000000, 0xC000494C, 0xCA000000, 0xC0004950, 0xCAC00000, 
     280    0x5E200000, 0x84000052, 0xDFE80000, 0x7E814000, 0x5834001A, 0xCE800000, 0x990062F0, 0xC0004834, 
     281    0xC9400000, 0xC1800002, 0x990062F0, 0xC0004838, 0xC9400000, 0xC6D80000, 0xC1220002, 0xD90C0000, 
     282    0x5E200000, 0x84000028, 0x5838002C, 0xCB000000, 0xDFE80000, 0x00000000, 0x58380014, 0xCF000000, 
     283    0x80000040, 0xC2A1FFFE, 0x5AA9FFFE, 0x58380000, 0xC9000000, 0xC00049A0, 0xCB000000, 0xC2C00000, 
     284    0xC52D0040, 0x72F18000, 0xCF000000, 0x5838000A, 0xCE800000, 0xC3000000, 0xC0000A14, 0xCB040030, 
     285    0xC2D00002, 0xC0000A28, 0xCEC40808, 0xC000494E, 0xCA800000, 0x58880002, 0xB4B0FFF8, 0xC00048A0, 
     286    0xC0800000, 0xCC840000, 0x5EA80000, 0x84000162, 0x5E200000, 0x84000150, 0xC000493C, 0xCA800000, 
     287    0x00000000, 0x00000000, 0x5AA80060, 0xCE800000, 0x99005F88, 0xDBD80000, 0xDB980001, 0xC7800000, 
     288    0x99006188, 0xDBD80000, 0xDB980001, 0xC7800000, 0x58380000, 0xCAC00000, 0x00000000, 0xC2000000, 
     289    0xC6E04020, 0xC0004952, 0xCAC00000, 0x58380000, 0xCA800000, 0xC30C0002, 0xC6300020, 0xA6800078, 
     290    0x00000000, 0x00000000, 0xC161FFFE, 0x5955FFFE, 0x15400000, 0x00000000, 0xC0001800, 0xCA000000, 
     291    0x00000000, 0x00000000, 0xA60CFFCA, 0xC6F00508, 0xC6B0C408, 0xCF000000, 0x00000000, 0xC121FFFE, 
     292    0x5911FE14, 0x15000000, 0x8000C9B0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
     293    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8000C948, 
     294    0xDCBC0001, 0x5FFC0000, 0x8400003A, 0xC3800002, 0xDB880001, 0x5FFC0004, 0x8400C27A, 0xC3800000, 
     295    0xDB880001, 0xC3CE0002, 0xC0000800, 0xCFC00708, 0xC3E1FFFE, 0x597DFFFE, 0x593DFE14, 0x94000001, 
     296    0x00000000, 0x00000000, 0x00000000, 0xC000487C, 0xC8040000, 0x00000000, 0x00000000, 0x40080000, 
     297    0xCBC00000, 0xC4380000, 0x00000000, 0xC000480E, 0xCA000000, 0xC0004858, 0xCB440000, 0x00000000, 
     298    0x00000000, 0x46350000, 0x88000098, 0x00000000, 0xA7C00028, 0xC0004854, 0xC1000002, 0xCD040000, 
     299    0xC11C0000, 0xC000082C, 0xCD040E08, 0x800000C0, 0x00000000, 0xA7D20118, 0x00000000, 0xC7E14048, 
     300    0xC2400000, 0xC6246030, 0xC200006A, 0x46610000, 0xC6240038, 0xC0000810, 0xCE440038, 0x8000FF58, 
     301    0xC2000000, 0xC0000808, 0xCA040018, 0xC11C0000, 0xC000082C, 0xCD040E08, 0x5A200002, 0x5E600010, 
     302    0x8400FFF8, 0xC2000000, 0xC0000808, 0xCE040018, 0xC3400000, 0x80000010, 0xC1200002, 0xC0000818, 
     303    0xCD041008, 0x5B740002, 0xC0004858, 0xCF440000, 0x99005590, 0xC0004848, 0xC9440000, 0xC1800000, 
     304    0xC11C0002, 0xC000082C, 0xCD040E08, 0x800005E8, 0x5B740002, 0xC0004858, 0xCF440000, 0xC7800000, 
     305    0xC13C0002, 0xCD001E08, 0xC0004848, 0xC9440000, 0xC1800000, 0xC000082C, 0xC9840030, 0x59540002, 
     306    0xC0004848, 0xCD440000, 0x58880002, 0xB4980560, 0x00000000, 0xC0800000, 0x80000550, 0xC000487C, 
     307    0xC8040000, 0x00000000, 0x00000000, 0x40080000, 0xCBC00000, 0xC4280000, 0x00000000, 0xA7C00110, 
     308    0xC000484C, 0xCA040000, 0xC2400000, 0xC0001AEC, 0xCA440020, 0x5A200002, 0xC000484C, 0xCE040000, 
     309    0xB624006A, 0xC6800000, 0xC13C0002, 0xCD001E08, 0xC0004848, 0xC9440000, 0xC1800000, 0xC000082C, 
     310    0xC9840030, 0x59540002, 0xC0004848, 0xCD440000, 0x58880002, 0xB4980450, 0x00000000, 0xC0800000, 
     311    0x80000440, 0xC0004854, 0xC1000004, 0xCD040000, 0xC0000820, 0xC2000002, 0xCE040000, 0xC2000000, 
     312    0xC000484C, 0xCE040000, 0xC0004858, 0xCE040000, 0x8000FF10, 0xC0004854, 0xC1000000, 0xCD040000, 
     313    0xC11C0000, 0xC000082C, 0xCD040E08, 0x99005590, 0xC0004848, 0xC9440000, 0xC1800000, 0xC1200000, 
     314    0xC0000818, 0xCD041008, 0xC11C0002, 0xC000082C, 0xCD040E08, 0xC2000000, 0xC000484C, 0xCE040000, 
     315    0x80000340, 0xC0001AC0, 0xCB840000, 0xC000487C, 0xC8040000, 0x00000000, 0x00000000, 0x40080000, 
     316    0xCBC00000, 0xC4280000, 0x00000000, 0x00000000, 0xC6800000, 0xC13C0000, 0xCD001E08, 0xA780022A, 
     317    0x00000000, 0x00000000, 0xA7C001EA, 0x00000000, 0xC0001B00, 0xC2060006, 0xCE040310, 0xA7E801A2, 
     318    0x00000000, 0xC0004850, 0xCA040000, 0xC2400000, 0xC0001AEC, 0xCA448020, 0x5A200002, 0xC0004850, 
     319    0xCE040000, 0xB624008A, 0x00000000, 0xC6800000, 0xC13C0002, 0xCD001E08, 0xC0001ACC, 0xC2000002, 
     320    0xCE040008, 0xC0004848, 0xC9440000, 0xC1800000, 0xC000082C, 0xC9840030, 0x59540002, 0xC0004848, 
     321    0xCD440000, 0x58880002, 0xB49801A8, 0x00000000, 0xC0800000, 0x80000198, 0xC0004854, 0xC1000000, 
     322    0xCD040000, 0xC11C0000, 0xC000082C, 0xCD040E08, 0x99005590, 0xC0004848, 0xC9440000, 0xC1800000, 
     323    0xC2000000, 0xC0000820, 0xCE040000, 0xC1200000, 0xC0000818, 0xCD041008, 0xC11C0002, 0xC000082C, 
     324    0xCD040E08, 0xC0004850, 0xCE040000, 0xC2000002, 0xC0001ACC, 0xCE040010, 0x800000D0, 0xC2000002, 
     325    0xC0004850, 0xCE040000, 0x8000FE70, 0xC2000000, 0xC0004850, 0xCE040000, 0xA7E60012, 0x00000000, 
     326    0xC2000002, 0xC0001B00, 0xCE040008, 0x8000FE58, 0x00000000, 0xA7860032, 0x00000000, 0xC6800000, 
     327    0xC13C0002, 0xCD001E08, 0xC2020002, 0xC7E2A548, 0xC0001B00, 0xCE040000, 0x8000FE00, 0xC2040002, 
     328    0xC0001B00, 0xCE040208, 0x8000FDE0, 0xC2C80002, 0x6AC56000, 0xDACC0000, 0xC0004854, 0xCB440000, 
     329    0xC0004848, 0xCB840000, 0xC0000838, 0xC3C00000, 0xCBC40030, 0x5EF40004, 0x8400000A, 0xC3000000, 
     330    0xC0001ACC, 0xCF040108, 0x47BD8000, 0x84000012, 0x47BD8000, 0x88000018, 0xC1006E8C, 0x8000B6B0, 
     331    0xC0004840, 0xCC840000, 0x8000F698, 0xC0001AC0, 0xCAC40000, 0xC0004854, 0xCB440000, 0xA6C0FBB2, 
     332    0x00000000, 0x5EF40000, 0x8400F6F2, 0x5EF40002, 0x8400F982, 0x5EF40004, 0x8400FB82, 0xC1006CE8, 
     333    0x8000B628, 0x00000000, 0xC0800000, 0xDF4B0040, 0xC0004900, 0xCB800000, 0xC2000000, 0xC000490A, 
     334    0xA78000B0, 0xCBC00000, 0xC1000000, 0xD9000001, 0xC1000002, 0xD90C0000, 0x6FF46000, 0x47F5A000, 
     335    0x5B744C80, 0xC2400000, 0x58340004, 0xCA400080, 0xC0004900, 0xCE000008, 0x5A640002, 0x58340004, 
     336    0xC6500080, 0xCD000080, 0xC0004914, 0xCA400000, 0xC2000002, 0x6A3D0000, 0x72252000, 0xCE400000, 
     337    0xC0000408, 0xCE000000, 0xA78200B8, 0xC0004908, 0xCBC00000, 0xC1000000, 0xD9000001, 0xC1000002, 
     338    0xD90C0000, 0x6FF4A000, 0x6FD44000, 0x4575A000, 0x47F5A000, 0x5B744E20, 0xC2800000, 0x58340006, 
     339    0xCA800080, 0xC2000000, 0xC0004900, 0xCE000108, 0x5EA80002, 0x58340006, 0xC6900080, 0xCD000080, 
     340    0x5A7C0020, 0xC2000002, 0x6A250000, 0xC0000408, 0xCE000000, 0xDCA80001, 0x5EA80000, 0x8400B498, 
     341    0x00000000, 0xA4800210, 0x00000000, 0xC3C00000, 0xC000140E, 0xCBC00020, 0xC3400000, 0xC2400000, 
     342    0x6FF86000, 0x47F9C000, 0x5BB84C80, 0x58380008, 0xCB400080, 0x58380006, 0xCA400080, 0x5F740002, 
     343    0x58380008, 0xC7500080, 0xCD000080, 0xC2000000, 0x58380004, 0xCA020080, 0xC3000000, 0x5838000C, 
     344    0xCB000028, 0x5A640002, 0x46250000, 0x8400FFF8, 0xC2400000, 0x58380006, 0xC6500080, 0xCD000080, 
     345    0xC2000000, 0x5838000A, 0xCA020080, 0x5B300002, 0x5838000C, 0xC7100028, 0xCD000028, 0xC2420020, 
     346    0x5A200004, 0x46612000, 0x8400FFF8, 0xC2000000, 0x5838000A, 0xC6101080, 0xCD001080, 0xC0004966, 
     347    0xCA400000, 0xC2000002, 0x6A3D0000, 0x72252000, 0xCE400000, 0x5F740000, 0x84000028, 0xC0004912, 
     348    0xCA000000, 0xC2C00002, 0x6AFD6000, 0x7EC16000, 0x76E10000, 0xCE000000, 0x5F300020, 0x84000028, 
     349    0xC0004924, 0xCA000000, 0xC2C00002, 0x6AFD6000, 0x7EC16000, 0x76E10000, 0xCE000000, 0xA4820050, 
     350    0xC2400000, 0xC000140E, 0xCA408020, 0xC2000002, 0xC0004900, 0xCE000008, 0xC000490A, 0xCE400000, 
     351    0xC1000000, 0xD9000001, 0xD8400080, 0xC1000004, 0xD9000001, 0xA4840250, 0x00000000, 0xC3C00000, 
     352    0xC000140E, 0xCBC10020, 0xC2800000, 0xC2000000, 0x6FF8A000, 0x6FD44000, 0x4579C000, 0x47F9C000, 
     353    0x5BB84E20, 0x5838002E, 0xCA800080, 0x58380006, 0xCA020080, 0xC3400000, 0x5838002E, 0xCB420080, 
     354    0x5AA80002, 0x46290000, 0x8400FFF8, 0xC2800000, 0x5838002E, 0xC6900080, 0xCD000080, 0x5F740002, 
     355    0x5838002E, 0xC7501080, 0xCD001080, 0xC0004968, 0xCA400000, 0xC2000002, 0x6A3D0000, 0x72252000, 
     356    0xCE400000, 0xC000492A, 0xCA800000, 0x5E740000, 0x84000028, 0xC0004910, 0xCA000000, 0xC2C00002, 
     357    0x6AFD6000, 0x7EC16000, 0x76E10000, 0xCE000000, 0x6ABD4010, 0xA680009A, 0x00000000, 0x58380032, 
     358    0xCA000000, 0x58000002, 0xCA400000, 0x5838000C, 0x00000000, 0xCE000001, 0xCE400000, 0xC000492A, 
     359    0xCA000000, 0xC2C00002, 0x6AFD6000, 0x72E10000, 0xCE000000, 0xC000492C, 0xCA000000, 0xC2C00002, 
     360    0x6AFD6000, 0x72E10000, 0xCE000000, 0x80000028, 0xC000492C, 0xCA000000, 0xC2C00002, 0x6AFD6000, 
     361    0x7EC16000, 0x76E10000, 0xCE000000, 0xA4880128, 0xC2C00000, 0xC000140E, 0xCAC20020, 0xC000490E, 
     362    0xCA400000, 0xC2000002, 0x6A2D0000, 0x7E010000, 0x76252000, 0xCE400000, 0xC000496A, 0xCA400000, 
     363    0xC2000002, 0x6A2D0000, 0x72252000, 0xCE400000, 0x6EF0A000, 0x6ED44000, 0x45718000, 0x46F18000, 
     364    0x5B304E20, 0x58300000, 0xCA000000, 0x00000000, 0xC2400002, 0x76252000, 0x8400005A, 0x58300000, 
     365    0xCA400000, 0xC2800000, 0x00000000, 0xC6684020, 0xC24C0002, 0xC6A40020, 0xC624C408, 0x58300010, 
     366    0xCA400508, 0x00000000, 0xC0001800, 0xCE400000, 0xA4860050, 0xC2400000, 0xC000140E, 0xCA418020, 
     367    0xC2020002, 0xC0004900, 0xCE000108, 0xC0004908, 0xCE400000, 0xC1000000, 0xD9000001, 0xD8400080, 
     368    0xC1000004, 0xD9000001, 0xC0001408, 0xCC800000, 0xC10E0002, 0xD90C0000, 0x8000ED98, 0xDFBC0001, 
     369    0xC000496E, 0x99006298, 0xC9400000, 0xC7D80000, 0x00000000, 0xC5700000, 0x5EF00020, 0x88000130, 
     370    0x6F346000, 0x4735A000, 0x5B744C80, 0x58340008, 0xC2400000, 0xCA400080, 0x00000000, 0xC2000000, 
     371    0x5A640002, 0xCE400080, 0x58340004, 0xCA000080, 0x00000000, 0x00000000, 0x5E200002, 0xCE000080, 
     372    0xC0004912, 0xCA800000, 0xC2400002, 0x6A712000, 0x72694000, 0xCE800000, 0x5E200000, 0x8400003A, 
     373    0xC000480A, 0xCA000000, 0xC0000408, 0xCA800000, 0x76610000, 0x00000000, 0x72294000, 0xCE800000, 
     374    0x80000020, 0xC0004914, 0xCA000000, 0x7E412000, 0x00000000, 0x76610000, 0xCE000000, 0x800000B8, 
     375    0x6EF4A000, 0x6ED44000, 0x4575A000, 0x46F5A000, 0x5B744E20, 0x5834002E, 0xC2400000, 0xCA420080, 
     376    0x00000000, 0xC2000000, 0x5A640002, 0xC6501080, 0xCD001080, 0x58340006, 0xCA000080, 0x00000000, 
     377    0x00000000, 0x5A200002, 0xCE000080, 0xC0004910, 0xCA400000, 0xC2000002, 0x6A2D0000, 0x72252000, 
     378    0xCE400000, 0xC2000002, 0x6A310000, 0xC000042A, 0xCE000000, 0xC1040002, 0xD90C0000, 0x00000000, 
     379    0x8000EB08, 0x00000000, 0xC4980930, 0x9D000000, 0xC5580030, 0xC0000838, 0xCD840000, 0xC1440200, 
     380    0xC1C03200, 0xC55C1078, 0xC000100E, 0x9D000000, 0xCD800000, 0xC000100C, 0xCDC00000, 0xC0004862, 
     381    0xC9C00000, 0x00000000, 0x00000000, 0xD9D80001, 0xC0007200, 0x401C0000, 0x5DC07400, 0x8800FFFA, 
     382    0x5C000200, 0xCD800000, 0xC1F0000A, 0x71D4A000, 0xDD980000, 0xDD9C0001, 0x41D8E000, 0xC5D40268, 
     383    0xC0001010, 0xCD400000, 0x6C9C8000, 0x449CE000, 0x449CE000, 0x59DC0004, 0xC1601260, 0xC5D40268, 
     384    0x9D000000, 0xC0001012, 0xCD400000, 0x00000000, 0x00000000, 0xD9580000, 0x6D586000, 0x4558C000, 
     385    0x59984C80, 0xD9980001, 0x5818000A, 0xC1800000, 0xC9800080, 0xC0005400, 0x6D5CA000, 0x401C0000, 
     386    0x40180000, 0xC9400000, 0x58000002, 0x00000000, 0xC9C00000, 0xC0004930, 0xCD400000, 0xC0004932, 
     387    0xCDC00000, 0x59980004, 0xC1C20020, 0xB59CFFF8, 0x00000000, 0xC1800000, 0xDD9C0001, 0x581C000A, 
     388    0xCD800080, 0x581C000C, 0xC1800000, 0xC9800028, 0xC1C00002, 0xDD940000, 0x69D4E000, 0x5D980002, 
     389    0xCD800028, 0xC0004924, 0xC9800000, 0x00000000, 0x9D000000, 0x00000000, 0x71D8C000, 0xCD800000, 
     390    0xC000492A, 0xC9400000, 0xC1C00002, 0x69D8E000, 0x7DC0C000, 0x7594A000, 0xCD400000, 0xC000492C, 
     391    0xC9400000, 0xDD800001, 0x58000032, 0x75D4A000, 0x84000078, 0xC9400001, 0xC9800000, 0xDD800001, 
     392    0x5800000C, 0x00000000, 0xCD400001, 0xCD800000, 0xC000492C, 0xC9400000, 0xC000492A, 0xC9800000, 
     393    0x71D4A000, 0xC000492C, 0xCD400000, 0x71D8C000, 0xC000492A, 0xCD800000, 0x9D000000, 0x00000000, 
     394    0x00000000, 0x00000000, 0xC0004862, 0xC9800000, 0x00000000, 0xC1C00200, 0x4194C000, 0x45D8E000, 
     395    0x8800FFFA, 0xC5D80000, 0xC0004862, 0xCD800000, 0xC0001406, 0xC9800000, 0xC1C00002, 0x9D000000, 
     396    0xC5D80A08, 0xC5581050, 0xCD800000, 0xC0004930, 0xC9800000, 0xC0004932, 0xC9C00000, 0xC140000E, 
     397    0xC5581C20, 0xDD940000, 0xC0007200, 0x40140000, 0x5D407400, 0x8800FFFA, 0x5C000200, 0xCD800000, 
     398    0x58000002, 0x5D407400, 0x8800FFFA, 0x5C000200, 0xCDC00000, 0xDD540000, 0xC1C00000, 0x58140006, 
     399    0xC9C20080, 0xC1800000, 0x58140000, 0xC98000E0, 0x6DDC2000, 0xC000491E, 0x41D8E000, 0xCDC00000, 
     400    0xDD980000, 0xC1C00022, 0xC5D80D78, 0xDD940001, 0xC5581C20, 0xC000491C, 0xCD800000, 0xDD540000, 
     401    0xC1C00000, 0x58140006, 0xC9C20080, 0xC1800000, 0x58140004, 0xC9820080, 0x00000000, 0x59DC0002, 
     402    0x459CC000, 0x8400FFF8, 0xC1C00000, 0x9D000000, 0x58140006, 0xC5D81080, 0xCD801080, 0xC0004860, 
     403    0xC9400000, 0xC1820080, 0xC1D00002, 0x58146B00, 0xD5800000, 0x58000002, 0xD5800001, 0x59540004, 
     404    0xB558FFF8, 0xC0004860, 0xC1400000, 0xCD400000, 0xDD980001, 0x9D000000, 0xDD940000, 0xC0001404, 
     405    0xCDC00808, 0xC1C00000, 0xC1800200, 0x5D980004, 0xDF5D0050, 0x45D8A000, 0x8800FFDA, 0xDD800001, 
     406    0x5800000C, 0x00000000, 0xC9400001, 0xC9800000, 0xC1C00002, 0xC5D43F08, 0xC5D81E08, 0xC0004862, 
     407    0xC9C00000, 0x00000000, 0x00000000, 0x581C7200, 0x5DC07400, 0x8800FFFA, 0x5C000200, 0xCD400000, 
     408    0x58000002, 0x5DC07400, 0x8800FFFA, 0x5C000200, 0xCD800000, 0xC0004862, 0xC9C00000, 0x00000000, 
     409    0xC15004C0, 0xC5D40068, 0xDD9C0000, 0xC5D41C20, 0xC1C00000, 0xDD800001, 0x58000030, 0xC9C00080, 
     410    0xDD800001, 0x58000002, 0xC9800000, 0x6DDC2000, 0xC000491C, 0x41D8E000, 0xCD400001, 0xCDC00000, 
     411    0xDD940001, 0xC1C00000, 0x58140030, 0xC9C00080, 0xC1800000, 0x58140006, 0xC9820080, 0x00000000, 
     412    0x59DC0002, 0x459CC000, 0x8400FFF8, 0xC1C00000, 0x9D000000, 0x58140030, 0xC5D80080, 0xCD800080, 
     413    0xC1C00000, 0xDF5C0040, 0x5DDC0080, 0x8400FFD2, 0x00000000, 0x9D000000, 0x00000000, 0x00000000, 
     414    0x00000000, 0xC160FFFE, 0xC0000A10, 0xC9440068, 0xC1A0FFFE, 0x59980E28, 0xC000100C, 0xCD400000, 
     415    0xC000100E, 0xCD800000, 0xC0004964, 0xC9800000, 0x00000000, 0xC170000A, 0x7194A000, 0x6C988000, 
     416    0x4498C000, 0x4498C000, 0x59980004, 0xC5940278, 0xC0001010, 0xCD400000, 0xC0004946, 0xC9400000, 
     417    0x00000000, 0x00000000, 0x6D58A000, 0x6D5C4000, 0x45D8C000, 0x4558C000, 0xC000494A, 0xC9400000, 
     418    0xC0004948, 0xC9C00000, 0x4194C000, 0xC1400012, 0xC55C1820, 0x9D000000, 0xC59C0270, 0xC0001012, 
     419    0xCDC00000, 0xC1400000, 0x58000012, 0xC9410040, 0xC0004950, 0xC9C00000, 0xC5580000, 0xC5940840, 
     420    0xC5581080, 0xD9940000, 0xC000493C, 0xC9400000, 0xC0004954, 0xC9800000, 0x59DC00A8, 0x455CE000, 
     421    0x41D8E000, 0x5D5C0030, 0x8800FFF8, 0xC1C00030, 0xC1800000, 0xC5D84030, 0xC1400000, 0xC5D40010, 
     422    0x5DD40002, 0x8400005A, 0x5DD40004, 0x84000082, 0x5DD40006, 0x840000AA, 0x5DD80026, 0x840000D2, 
     423    0xDD540000, 0xDD800001, 0x58000008, 0x40180000, 0xCD400000, 0x59980002, 0x8000FFA8, 0xDD540000, 
     424    0xDD800001, 0x58000008, 0x40180000, 0xCD4000C0, 0x59980002, 0x8000FF70, 0xDD540000, 0xDD800001, 
     425    0x58000008, 0x40180000, 0xCD400080, 0x59980002, 0x8000FF38, 0xDD540000, 0xDD800001, 0x58000008, 
     426    0x40180000, 0xCD400040, 0x59980002, 0x8000FF00, 0x00000000, 0x9D000000, 0x00000000, 0x00000000, 
     427    0x00000000, 0x58000012, 0xC9400000, 0xC0004954, 0xC9C00000, 0xC0004950, 0xC9400080, 0xDD800001, 
     428    0x58000028, 0x5D9C0000, 0x8400003A, 0x5D9C0002, 0x8400003A, 0x5D9C0004, 0x84000052, 0xC55B0040, 
     429    0xC55C08C0, 0xCD800041, 0xCDC008C0, 0x80000048, 0xCD400000, 0x80000038, 0xC55900C0, 0xC55C1840, 
     430    0xCD8000C1, 0xCDC01840, 0x80000010, 0xC55A0080, 0xC55C1080, 0xCD800081, 0xCDC01080, 0x9D000000, 
     431    0x00000000, 0x00000000, 0x00000000, 0x59540002, 0x6994E018, 0x61C0C008, 0x4194A000, 0x5D940040, 
     432    0x8800FFFA, 0xC5940000, 0x9D000000, 0xCD400000, 0x00000000, 0x00000000, 0x9D000000, 0x4158A000, 
     433    0xCD400000, 0x00000000, 
    423434}; 
    424435 
  • trunk/package/ltq-dsl/src/ifxmips_atm_fw_regs_amazon_se.h

    r28405 r28406  
    1 #ifndef IFXMIPS_ATM_FW_REGS_DANUBE_H 
    2 #define IFXMIPS_ATM_FW_REGS_DANUBE_H 
     1#ifndef IFXMIPS_ATM_FW_REGS_AMAZON_SE_H 
     2#define IFXMIPS_ATM_FW_REGS_AMAZON_SE_H 
    33 
    44 
     
    77 *  Host-PPE Communication Data Address Mapping 
    88 */ 
    9 #define FW_VER_ID                       SB_BUFFER(0x2001) 
     9#define FW_VER_ID                       SB_BUFFER(0x2001)   /*  Firmware Version ID */ 
    1010#define CFG_WRX_HTUTS                   SB_BUFFER(0x2400)   /*  WAN RX HTU Table Size, must be configured before enable PPE firmware.   */ 
    1111#define CFG_WRX_QNUM                    SB_BUFFER(0x2401)   /*  WAN RX Queue Number */ 
     
    1919#define WRX_DMA_CHANNEL_CONFIG(i)       ((struct wrx_dma_channel_config*)   SB_BUFFER(0x2640 + (i) * 7)) 
    2020#define WTX_PORT_CONFIG(i)              ((struct wtx_port_config*)          SB_BUFFER(0x2440 + (i))) 
    21 #define WTX_QUEUE_CONFIG(i)             ((struct wtx_queue_config*)         SB_BUFFER(0x2710 + (i) * 27)) 
    22 #define WTX_DMA_CHANNEL_CONFIG(i)       ((struct wtx_dma_channel_config*)   SB_BUFFER(0x2711 + (i) * 27)) 
     21#define WTX_QUEUE_CONFIG(i)             ((struct wtx_queue_config*)         SB_BUFFER(0x2F00 + (i) * 27)) 
     22#define WTX_DMA_CHANNEL_CONFIG(i)       ((struct wtx_dma_channel_config*)   SB_BUFFER(0x2F01 + (i) * 27)) 
    2323#define WAN_MIB_TABLE                   ((struct wan_mib_table*)            SB_BUFFER(0x2410)) 
    24 #define HTU_ENTRY(i)                    ((struct htu_entry*)                SB_BUFFER(0x2000 + (i))) 
    25 #define HTU_MASK(i)                     ((struct htu_mask*)                 SB_BUFFER(0x2020 + (i))) 
    26 #define HTU_RESULT(i)                   ((struct htu_result*)               SB_BUFFER(0x2040 + (i))) 
     24#define HTU_ENTRY(i)                    ((struct htu_entry*)                SB_BUFFER(0x3200 + (i))) 
     25#define HTU_MASK(i)                     ((struct htu_mask*)                 SB_BUFFER(0x3220 + (i))) 
     26#define HTU_RESULT(i)                   ((struct htu_result*)               SB_BUFFER(0x3240 + (i))) 
    2727 
    2828 
    2929 
    30 #endif  //  IFXMIPS_ATM_FW_REGS_DANUBE_H 
     30#endif  //  IFXMIPS_ATM_FW_REGS_AMAZON_SE_H 
  • trunk/package/ltq-dsl/src/ifxmips_atm_fw_regs_common.h

    r24526 r28406  
     1/****************************************************************************** 
     2** 
     3** FILE NAME    : ifxmips_atm_fw_regs_common.h 
     4** PROJECT      : UEIP 
     5** MODULES      : ATM (ADSL) 
     6** 
     7** DATE         : 1 AUG 2005 
     8** AUTHOR       : Xu Liang 
     9** DESCRIPTION  : ATM Driver (Firmware Register Structures) 
     10** COPYRIGHT    :       Copyright (c) 2006 
     11**                      Infineon Technologies AG 
     12**                      Am Campeon 1-12, 85579 Neubiberg, Germany 
     13** 
     14**    This program is free software; you can redistribute it and/or modify 
     15**    it under the terms of the GNU General Public License as published by 
     16**    the Free Software Foundation; either version 2 of the License, or 
     17**    (at your option) any later version. 
     18** 
     19** HISTORY 
     20** $Date        $Author         $Comment 
     21**  4 AUG 2005  Xu Liang        Initiate Version 
     22** 23 OCT 2006  Xu Liang        Add GPL header. 
     23**  9 JAN 2007  Xu Liang        First version got from Anand (IC designer) 
     24*******************************************************************************/ 
     25 
     26 
     27 
    128#ifndef IFXMIPS_ATM_FW_REGS_COMMON_H 
    229#define IFXMIPS_ATM_FW_REGS_COMMON_H 
     
    144171 
    145172#if defined(__BIG_ENDIAN) 
     173    struct fw_ver_id { 
     174        unsigned int    family      :4; 
     175        unsigned int    fwtype      :4; 
     176        unsigned int    interface   :4; 
     177        unsigned int    fwmode      :4; 
     178        unsigned int    major       :8; 
     179        unsigned int    minor       :8; 
     180    }; 
     181 
    146182    struct wrx_queue_config { 
    147183        /*  0h  */ 
     
    162198    }; 
    163199 
     200    struct wrx_queue_context { 
     201        /*  0h  */ 
     202        unsigned int    curr_len    :16; 
     203        unsigned int    res0        :12; 
     204        unsigned int    mfs         :1; 
     205        unsigned int    ec          :1; 
     206        unsigned int    clp1        :1; 
     207        unsigned int    aal5dp      :1; 
     208 
     209        /*  1h  */ 
     210        unsigned int    intcrc; 
     211 
     212        /*  2h, 3h  */ 
     213        unsigned int    curr_des0; 
     214        unsigned int    curr_des1; 
     215 
     216        /*  4h - 0xE    */ 
     217        unsigned int    res1[11]; 
     218 
     219        unsigned int    last_dword; 
     220    }; 
     221 
    164222    struct wtx_port_config { 
    165223        unsigned int    res1        :27; 
     
    171229        unsigned int    res1        :25; 
    172230        unsigned int    sbid        :1; 
    173         unsigned int    res2        :3; 
    174         unsigned int    type        :2; 
     231        unsigned int    qsb_vcid    :4; //  Which QSB queue (VCID) does this TX queue map to. 
     232        unsigned int    res2        :1; 
    175233        unsigned int    qsben       :1; 
     234    }; 
     235 
     236    struct wrx_desc_context { 
     237        unsigned int dmach_wrptr    : 16; 
     238        unsigned int dmach_rdptr    : 16; 
     239 
     240        unsigned int res0           : 16; 
     241        unsigned int dmach_fcnt     : 16; 
     242 
     243        unsigned int res1           : 11; 
     244        unsigned int desbuf_wrptr   : 5; 
     245        unsigned int res2           : 11; 
     246        unsigned int desbuf_rdptr   : 5; 
     247 
     248        unsigned int res3           : 27; 
     249        unsigned int desbuf_vcnt    : 5; 
    176250    }; 
    177251 
     
    292366    struct wtx_queue_config { 
    293367        unsigned int    qsben       :1; 
    294         unsigned int    type        :2; 
    295         unsigned int    res2        :3; 
     368        unsigned int    res2        :1; 
     369        unsigned int    qsb_vcid    :4; //  Which QSB queue (VCID) does this TX queue map to. 
    296370        unsigned int    sbid        :1; 
    297371        unsigned int    res1        :25; 
     
    360434#endif  //  defined(__BIG_ENDIAN) 
    361435 
     436#if defined(ENABLE_ATM_RETX) && ENABLE_ATM_RETX 
     437  #if defined(__BIG_ENDIAN) 
     438 
     439    struct Retx_adsl_ppe_intf { 
     440        unsigned int res0_0             : 16; 
     441        unsigned int dtu_sid            : 8; 
     442        unsigned int dtu_timestamp      : 8; 
     443 
     444        unsigned int res1_0             : 16; 
     445        unsigned int local_time         : 8; 
     446        unsigned int res1_1             : 5; 
     447        unsigned int is_last_cw         : 1; 
     448        unsigned int reinit_flag        : 1; 
     449        unsigned int is_bad_cw          : 1; 
     450    }; 
     451 
     452    struct Retx_adsl_ppe_intf_rec { 
     453 
     454        unsigned int local_time         : 8; 
     455        unsigned int res1_1             : 5; 
     456        unsigned int is_last_cw         : 1; 
     457        unsigned int reinit_flag        : 1; 
     458        unsigned int is_bad_cw          : 1; 
     459 
     460        unsigned int dtu_sid            : 8; 
     461        unsigned int dtu_timestamp      : 8; 
     462 
     463    }; 
     464 
     465    struct Retx_mode_cfg { 
     466        unsigned int    res0            :8; 
     467        unsigned int    invld_range     :8;     //  used for rejecting the too late arrival of the retransmitted DTU 
     468        unsigned int    buff_size       :8;     //  the total number of cells in playout buffer is 32 * buff_size 
     469        unsigned int    res1            :7; 
     470        unsigned int    retx_en         :1; 
     471      }; 
     472 
     473    struct Retx_Tsync_cfg { 
     474        unsigned int    fw_alpha        :16;    //  number of consecutive HEC error cell causes that the cell delineation state machine transit from SYNC to HUNT (0 means never) 
     475        unsigned int    sync_inp        :16;    //  reserved 
     476    }; 
     477 
     478    struct Retx_Td_cfg { 
     479        unsigned int    res0            :8; 
     480        unsigned int    td_max          :8;    //  maximum delay between the time a DTU is first created at transmitter and the time the DTU is sent out of ReTX layer at receiver 
     481        unsigned int    res1            :8; 
     482        unsigned int    td_min          :8;     //  minimum delay between the time a DTU is first created at transmitter and the time the DTU is sent out of ReTX layer at receiver 
     483    }; 
     484 
     485    struct Retx_MIB_Timer_cfg { 
     486        unsigned int    ticks_per_sec   : 16; 
     487        unsigned int    tick_cycle      : 16; 
     488    }; 
     489 
     490    struct DTU_stat_info { 
     491        unsigned int complete           : 1; 
     492        unsigned int bad                : 1; 
     493        unsigned int res0_0             : 14; 
     494        unsigned int time_stamp         : 8; 
     495        unsigned int cell_cnt           : 8; 
     496 
     497        unsigned int dtu_rd_ptr         : 16; 
     498        unsigned int dtu_wr_ptr         : 16; 
     499    }; 
     500 
     501    struct Retx_ctrl_field { 
     502        unsigned int res0               : 1; 
     503 
     504        unsigned int l2_drop            : 1; 
     505        unsigned int res1               : 13; 
     506        unsigned int retx               : 1; 
     507 
     508        unsigned int dtu_sid            : 8; 
     509        unsigned int cell_sid           : 8; 
     510    }; 
     511 
     512  #else 
     513    #error Little Endian is not supported yet. 
     514  #endif 
     515 
     516  struct dsl_param { 
     517    unsigned int    update_flag;            //  00 
     518    unsigned int    res0;                   //  04 
     519    unsigned int    MinDelayrt;             //  08 
     520    unsigned int    MaxDelayrt;             //  0C 
     521    unsigned int    res1;                   //  10 
     522    unsigned int    res2;                   //  14 
     523    unsigned int    RetxEnable;             //  18 
     524    unsigned int    ServiceSpecificReTx;    //  1C 
     525    unsigned int    res3;                   //  20 
     526    unsigned int    ReTxPVC;                //  24 
     527    unsigned int    res4;                   //  28 
     528    unsigned int    res5;                   //  2C 
     529    unsigned int    res6;                   //  30 
     530    unsigned int    res7;                   //  34 
     531    unsigned int    res8;                   //  38 
     532    unsigned int    res9;                   //  3C 
     533    unsigned int    res10;                  //  40 
     534    unsigned int    res11;                  //  44 
     535    unsigned int    res12;                  //  48 
     536    unsigned int    res13;                  //  4C 
     537    unsigned int    RxDtuCorruptedCNT;      //  50 
     538    unsigned int    RxRetxDtuUnCorrectedCNT;//  54 
     539    unsigned int    RxLastEFB;              //  58 
     540    unsigned int    RxDtuCorrectedCNT;      //  5C 
     541  }; 
     542#endif 
     543 
    362544 
    363545 
  • trunk/package/ltq-dsl/src/ifxmips_atm_fw_regs_danube.h

    r24526 r28406  
     1/****************************************************************************** 
     2** 
     3** FILE NAME    : ifxmips_atm_fw_regs_danube.h 
     4** PROJECT      : UEIP 
     5** MODULES      : ATM (ADSL) 
     6** 
     7** DATE         : 1 AUG 2005 
     8** AUTHOR       : Xu Liang 
     9** DESCRIPTION  : ATM Driver (Firmware Registers) 
     10** COPYRIGHT    :       Copyright (c) 2006 
     11**                      Infineon Technologies AG 
     12**                      Am Campeon 1-12, 85579 Neubiberg, Germany 
     13** 
     14**    This program is free software; you can redistribute it and/or modify 
     15**    it under the terms of the GNU General Public License as published by 
     16**    the Free Software Foundation; either version 2 of the License, or 
     17**    (at your option) any later version. 
     18** 
     19** HISTORY 
     20** $Date        $Author         $Comment 
     21**  4 AUG 2005  Xu Liang        Initiate Version 
     22** 23 OCT 2006  Xu Liang        Add GPL header. 
     23**  9 JAN 2007  Xu Liang        First version got from Anand (IC designer) 
     24*******************************************************************************/ 
     25 
     26 
     27 
    128#ifndef IFXMIPS_ATM_FW_REGS_DANUBE_H 
    229#define IFXMIPS_ATM_FW_REGS_DANUBE_H 
     
    734 *  Host-PPE Communication Data Address Mapping 
    835 */ 
    9 #define FW_VER_ID                       SB_BUFFER(0x2001) 
     36#define FW_VER_ID                       ((volatile struct fw_ver_id *)      SB_BUFFER(0x2001)) 
    1037#define CFG_WRX_HTUTS                   SB_BUFFER(0x2400)   /*  WAN RX HTU Table Size, must be configured before enable PPE firmware.   */ 
    1138#define CFG_WRX_QNUM                    SB_BUFFER(0x2401)   /*  WAN RX Queue Number */ 
     
    1744#define WRX_HUNT_BITTH                  SB_BUFFER(0x2407)   /*  WAN RX HUNT Threshold, must be between 2 to 8.  */ 
    1845#define WRX_QUEUE_CONFIG(i)             ((struct wrx_queue_config*)         SB_BUFFER(0x2500 + (i) * 20)) 
     46#define WRX_QUEUE_CONTEXT(i)            ((struct wrx_queue_context*)        SB_BUFFER(0x2504 + (i) * 20)) 
    1947#define WRX_DMA_CHANNEL_CONFIG(i)       ((struct wrx_dma_channel_config*)   SB_BUFFER(0x2640 + (i) * 7)) 
     48#define WRX_DESC_CONTEXT(i)             ((struct wrx_desc_context*)         SB_BUFFER(0x2643 + (i) * 7)) 
    2049#define WTX_PORT_CONFIG(i)              ((struct wtx_port_config*)          SB_BUFFER(0x2440 + (i))) 
    2150#define WTX_QUEUE_CONFIG(i)             ((struct wtx_queue_config*)         SB_BUFFER(0x2710 + (i) * 27)) 
    2251#define WTX_DMA_CHANNEL_CONFIG(i)       ((struct wtx_dma_channel_config*)   SB_BUFFER(0x2711 + (i) * 27)) 
    2352#define WAN_MIB_TABLE                   ((struct wan_mib_table*)            SB_BUFFER(0x2410)) 
    24 #define HTU_ENTRY(i)                    ((struct htu_entry*)                SB_BUFFER(0x2000 + (i))) 
    25 #define HTU_MASK(i)                     ((struct htu_mask*)                 SB_BUFFER(0x2020 + (i))) 
    26 #define HTU_RESULT(i)                   ((struct htu_result*)               SB_BUFFER(0x2040 + (i))) 
     53#if !defined(ENABLE_ATM_RETX) || !ENABLE_ATM_RETX 
     54  #define HTU_ENTRY(i)                  ((struct htu_entry*)                SB_BUFFER(0x2000 + (i))) 
     55  #define HTU_MASK(i)                   ((struct htu_mask*)                 SB_BUFFER(0x2020 + (i))) 
     56  #define HTU_RESULT(i)                 ((struct htu_result*)               SB_BUFFER(0x2040 + (i))) 
     57#else 
     58  #define HTU_ENTRY(i)                  ((struct htu_entry*)                SB_BUFFER(0x2020 + (i))) 
     59  #define HTU_MASK(i)                   ((struct htu_mask*)                 SB_BUFFER(0x2040 + (i))) 
     60  #define HTU_RESULT(i)                 ((struct htu_result*)               SB_BUFFER(0x2060 + (i))) 
     61#endif 
     62 
     63#if defined(ENABLE_ATM_RETX) && ENABLE_ATM_RETX 
     64 
     65  #define RETX_MODE_CFG                     ((volatile struct Retx_mode_cfg *)      SB_BUFFER(0x2408)) 
     66  #define RETX_TSYNC_CFG                    ((volatile struct Retx_Tsync_cfg *)     SB_BUFFER(0x2409)) 
     67  #define RETX_TD_CFG                       ((volatile struct Retx_Td_cfg *)        SB_BUFFER(0x240A)) 
     68  #define RETX_MIB_TIMER_CFG                ((volatile struct Retx_MIB_Timer_cfg *) SB_BUFFER(0x240B)) 
     69  #define RETX_PLAYOUT_BUFFER_BASE          SB_BUFFER(0x240D) 
     70  #define RETX_SERVICE_HEADER_CFG           SB_BUFFER(0x240E) 
     71  #define RETX_MASK_HEADER_CFG              SB_BUFFER(0x240F) 
     72 
     73  #define RETX_ADSL_PPE_INTF                ((volatile struct Retx_adsl_ppe_intf *) PPE_REG_ADDR(0x0D78)) 
     74  #define BAD_REC_RETX_ADSL_PPE_INTF        ((volatile struct Retx_adsl_ppe_intf *) SB_BUFFER(0x23AC)) 
     75  #define FIRST_BAD_REC_RETX_ADSL_PPE_INTF  ((volatile struct Retx_adsl_ppe_intf *) SB_BUFFER(0x23AE)) 
     76 
     77  #define PB_BUFFER_USAGE                   SB_BUFFER(0x2100) 
     78  #define DTU_STAT_INFO                     ((volatile struct DTU_stat_info *)      SB_BUFFER(0x2180)) 
     79  #define DTU_VLD_STAT                      SB_BUFFER(0x2380) 
     80 
     81 
     82  //===================================================================== 
     83  // retx firmware mib, for debug purpose 
     84  //      address : 0x2388 - 0x238F 
     85  //      size    : 8 
     86  //===================================================================== 
     87  #define URETX_RX_TOTAL_DTU                    SB_BUFFER(0x2388) 
     88  #define URETX_RX_BAD_DTU                      SB_BUFFER(0x2389) 
     89  #define URETX_RX_GOOD_DTU                     SB_BUFFER(0x238A) 
     90  #define URETX_RX_CORRECTED_DTU                SB_BUFFER(0x238B) 
     91  #define URETX_RX_OUTOFDATE_DTU                SB_BUFFER(0x238C) 
     92  #define URETX_RX_DUPLICATE_DTU                SB_BUFFER(0x238D) 
     93  #define URETX_RX_TIMEOUT_DTU                  SB_BUFFER(0x238E) 
     94 
     95  #define URETX_ALPHA_SWITCH_TO_HUNT_TIMES      SB_BUFFER(0x238F) 
     96 
     97  // cell counter for debug purpose 
     98  #define WRX_BC0_CELL_NUM                      SB_BUFFER(0x23E0) 
     99  #define WRX_BC0_DROP_CELL_NUM                 SB_BUFFER(0x23E1) 
     100  #define WRX_BC0_NONRETX_CELL_NUM              SB_BUFFER(0x23E2) 
     101  #define WRX_BC0_RETX_CELL_NUM                 SB_BUFFER(0x23E3) 
     102  #define WRX_BC0_OUTOFDATE_CELL_NUM            SB_BUFFER(0x23E4) 
     103  #define WRX_BC0_DIRECTUP_NUM                  SB_BUFFER(0x23E5) 
     104  #define WRX_BC0_PBW_TOTAL_NUM                 SB_BUFFER(0x23E6) 
     105  #define WRX_BC0_PBW_SUCC_NUM                  SB_BUFFER(0x23E7) 
     106  #define WRX_BC0_PBW_FAIL_NUM                  SB_BUFFER(0x23E8) 
     107  #define WRX_BC1_CELL_NUM                      SB_BUFFER(0x23E9) 
     108 
     109  // debug info (interface) 
     110 
     111  #define DBG_DTU_INTF_WRPTR                    SB_BUFFER(0x2390) 
     112  #define DBG_INTF_FCW_DUP_CNT                  SB_BUFFER(0x2391) 
     113  #define DBG_INTF_SID_CHANGE_IN_DTU_CNT        SB_BUFFER(0x2392) 
     114  #define DBG_INTF_LCW_DUP_CNT                  SB_BUFFER(0x2393) 
     115 
     116  #define DBG_RFBI_DONE_INT_CNT                 SB_BUFFER(0x2394) 
     117  #define DBG_DREG_BEG_END                      SB_BUFFER(0x2395) 
     118  #define DBG_RFBI_BC0_INVALID_CNT              SB_BUFFER(0x2396) 
     119  #define DBG_RFBI_LAST_T                       SB_BUFFER(0x2397) 
     120 
     121  #define DBG_RFBI_INTV0                        SB_BUFFER(0x23EE) 
     122  #define DBG_RFBI_INTV1                        SB_BUFFER(0x23EF) 
     123 
     124  #define DBG_INTF_INFO(i)                      ((volatile struct Retx_adsl_ppe_intf_rec *) SB_BUFFER(0x23F0 + i)) 
     125 
     126  // Internal status 
     127  #define URetx_curr_time                       SB_BUFFER(0x2398) 
     128  #define URetx_sec_counter                     SB_BUFFER(0x2399) 
     129  #define RxCURR_EFB                            SB_BUFFER(0x239A) 
     130  #define RxDTURetransmittedCNT                 SB_BUFFER(0x239B) 
     131 
     132  //===================================================================== 
     133  // standardized MIB counter 
     134  //      address : 0x239C - 0x239F 
     135  //      size    : 4 
     136  //===================================================================== 
     137  #define RxLastEFBCNT                          SB_BUFFER(0x239C) 
     138  #define RxDTUCorrectedCNT                     SB_BUFFER(0x239D) 
     139  #define RxDTUCorruptedCNT                     SB_BUFFER(0x239E) 
     140  #define RxRetxDTUUncorrectedCNT               SB_BUFFER(0x239F) 
     141 
     142 
     143  //===================================================================== 
     144  // General URetx Context 
     145  //      address : 0x23A0 - 0x23AF 
     146  //      size    : 16 
     147  //===================================================================== 
     148  #define NEXT_DTU_SID_OUT                      SB_BUFFER(0x23A0) 
     149  #define LAST_DTU_SID_IN                       SB_BUFFER(0x23A1) 
     150  #define NEXT_CELL_SID_OUT                     SB_BUFFER(0x23A2) 
     151  #define ISR_CELL_ID                           SB_BUFFER(0x23A3) 
     152  #define PB_CELL_SEARCH_IDX                    SB_BUFFER(0x23A4) 
     153  #define PB_READ_PEND_FLAG                     SB_BUFFER(0x23A5) 
     154  #define RFBI_FIRST_CW                         SB_BUFFER(0x23A6) 
     155  #define RFBI_BAD_CW                           SB_BUFFER(0x23A7) 
     156  #define RFBI_INVALID_CW                       SB_BUFFER(0x23A8) 
     157  #define RFBI_RETX_CW                          SB_BUFFER(0x23A9) 
     158  #define RFBI_CHK_DTU_STATUS                   SB_BUFFER(0x23AA) 
     159 
     160  //===================================================================== 
     161  // per PVC counter for RX error_pdu and correct_pdu 
     162  //      address : 0x23B0 - 0x23CF 
     163  //      size    : 32 
     164  //===================================================================== 
     165  #define WRX_PER_PVC_CORRECT_PDU_BASE          SB_BUFFER(0x23B0) 
     166  #define WRX_PER_PVC_ERROR_PDU_BASE            SB_BUFFER(0x23C0) 
     167 
     168  #define __WRXCTXT_L2_RdPtr(i)                 SB_BUFFER(0x2422 + (i)) 
     169  #define __WRXCTXT_L2Pages(i)                  SB_BUFFER(0x2424 + (i)) 
     170 
     171  #define __WTXCTXT_TC_WRPTR(i)                 SB_BUFFER(0x2450 + (i)) 
     172  #define __WRXCTXT_PortState(i)                SB_BUFFER(0x242A + (i)) 
     173 
     174#endif 
    27175 
    28176 
  • trunk/package/ltq-dsl/src/ifxmips_atm_ppe_amazon_se.h

    r28405 r28406  
    1 #ifndef IFXMIPS_ATM_PPE_DANUBE_H 
    2 #define IFXMIPS_ATM_PPE_DANUBE_H 
     1#ifndef IFXMIPS_ATM_PPE_AMAZON_SE_H 
     2#define IFXMIPS_ATM_PPE_AMAZON_SE_H 
    33 
    4 #include <lantiq.h> 
     4 
    55 
    66/* 
    77 *  FPI Configuration Bus Register and Memory Address Mapping 
    88 */ 
    9 #define IFX_PPE                         (KSEG1 | 0x1E180000) 
     9#define IFX_PPE                         (KSEG1 | 0x1E180000) 
    1010#define PP32_DEBUG_REG_ADDR(i, x)       ((volatile unsigned int*)(IFX_PPE + (((x) + 0x0000) << 2))) 
    1111#define PPM_INT_REG_ADDR(i, x)          ((volatile unsigned int*)(IFX_PPE + (((x) + 0x0030) << 2))) 
     
    1919#define PPS_BRK_ADDR(x)                 ((volatile unsigned int*)(IFX_PPE + (((x) + 0x6300) << 2))) 
    2020#define PPM_TIMER1_ADDR(x)              ((volatile unsigned int*)(IFX_PPE + (((x) + 0x6400) << 2))) 
    21 #define SB_RAM0_ADDR(x)                 ((volatile unsigned int*)(IFX_PPE + (((x) + 0x8000) << 2))) 
    22 #define SB_RAM1_ADDR(x)                 ((volatile unsigned int*)(IFX_PPE + (((x) + 0x8400) << 2))) 
    23 #define SB_RAM2_ADDR(x)                 ((volatile unsigned int*)(IFX_PPE + (((x) + 0x8C00) << 2))) 
    24 #define SB_RAM3_ADDR(x)                 ((volatile unsigned int*)(IFX_PPE + (((x) + 0x9600) << 2))) 
     21#define SB_RAM0_ADDR(x)                 ((volatile unsigned int*)(IFX_PPE + (((x) + 0x8200) << 2))) 
     22#define SB_RAM1_ADDR(x)                 ((volatile unsigned int*)(IFX_PPE + (((x) + 0x8C00) << 2))) 
    2523#define QSB_CONF_REG_ADDR(x)            ((volatile unsigned int*)(IFX_PPE + (((x) + 0xC000) << 2))) 
    2624 
     
    3937#define PPS_BRK_DWLEN                   0x0100 
    4038#define PPM_TIMER1_DWLEN                0x0100 
    41 #define SB_RAM0_DWLEN                   0x0400 
    42 #define SB_RAM1_DWLEN                   0x0800 
    43 #define SB_RAM2_DWLEN                   0x0A00 
    44 #define SB_RAM3_DWLEN                   0x0400 
     39#define SB_RAM0_DWLEN                   0x0A00 
     40#define SB_RAM1_DWLEN                   0x0A00 
    4541#define QSB_CONF_REG_DWLEN              0x0100 
    4642 
     
    4844 *  PP32 to FPI Address Mapping 
    4945 */ 
    50 #define SB_BUFFER(__sb_addr)            ((volatile unsigned int *)((((__sb_addr) >= 0x2000) && ((__sb_addr) <= 0x23FF)) ? SB_RAM0_ADDR((__sb_addr) - 0x2000) :   \ 
    51                                                                    (((__sb_addr) >= 0x2400) && ((__sb_addr) <= 0x2BFF)) ? SB_RAM1_ADDR((__sb_addr) - 0x2400) :   \ 
    52                                                                    (((__sb_addr) >= 0x2C00) && ((__sb_addr) <= 0x35FF)) ? SB_RAM2_ADDR((__sb_addr) - 0x2C00) :   \ 
    53                                                                    (((__sb_addr) >= 0x3600) && ((__sb_addr) <= 0x39FF)) ? SB_RAM3_ADDR((__sb_addr) - 0x3600) :   \ 
     46#define SB_BUFFER(__sb_addr)            ((volatile unsigned int *)((((__sb_addr) >= 0x2200) && ((__sb_addr) <= 0x2BFF)) ? SB_RAM0_ADDR((__sb_addr) - 0x2200) :   \ 
     47                                                                   (((__sb_addr) >= 0x2C00) && ((__sb_addr) <= 0x35FF)) ? SB_RAM1_ADDR((__sb_addr) - 0x2C00) :   \ 
    5448                                                                0)) 
    5549 
     
    5953#define PP32_DBG_CTRL                   PP32_DEBUG_REG_ADDR(0, 0x0000) 
    6054 
    61 #define DBG_CTRL_START_SET(value)       ((value) ? (1 << 0) : 0) 
    62 #define DBG_CTRL_STOP_SET(value)        ((value) ? (1 << 1) : 0) 
    63 #define DBG_CTRL_STEP_SET(value)        ((value) ? (1 << 2) : 0) 
     55#define DBG_CTRL_RESTART                0 
     56#define DBG_CTRL_STOP                   1 
    6457 
    65 #define PP32_HALT_STAT                  PP32_DEBUG_REG_ADDR(0, 0x0001) 
     58#define PP32_HALT_STAT                  PP32_DEBUG_REG_ADDR(0, 0x0D00) 
     59#define PP32_BREAKPOINT_REASONS         PP32_DEBUG_REG_ADDR(0, 0x0A00) 
    6660 
    67 #define PP32_BRK_SRC                    PP32_DEBUG_REG_ADDR(0, 0x0002) 
     61#define PP32_BRK_SRC                    PP32_DEBUG_REG_ADDR(0, 0x0F00) 
    6862 
    69 #define PP32_DBG_PC_MIN(i)              PP32_DEBUG_REG_ADDR(0, 0x0010 + (i)) 
    70 #define PP32_DBG_PC_MAX(i)              PP32_DEBUG_REG_ADDR(0, 0x0014 + (i)) 
    71 #define PP32_DBG_DATA_MIN(i)            PP32_DEBUG_REG_ADDR(0, 0x0018 + (i)) 
    72 #define PP32_DBG_DATA_MAX(i)            PP32_DEBUG_REG_ADDR(0, 0x001A + (i)) 
    73 #define PP32_DBG_DATA_VAL(i)            PP32_DEBUG_REG_ADDR(0, 0x001C + (i)) 
     63#define PP32_DBG_CUR_PC                 PP32_DEBUG_REG_ADDR(0, 0x0F80) 
    7464 
    75 #define PP32_DBG_CUR_PC                 PP32_DEBUG_REG_ADDR(0, 0x0080) 
     65#define PP32_DBG_TASK_NO                PP32_DEBUG_REG_ADDR(0, 0x0F81) 
    7666 
    77 #define PP32_DBG_TASK_NO                PP32_DEBUG_REG_ADDR(0, 0x0081) 
     67/* 
     68 *  Share Buffer 
     69 */ 
     70#define SB_MST_PRI0                     PPE_REG_ADDR(0x0300) 
     71#define SB_MST_PRI1                     PPE_REG_ADDR(0x0301) 
    7872 
    7973/* 
     
    9488 *  Mailbox IGU1 Interrupt 
    9589 */ 
    96 #define PPE_MAILBOX_IGU1_INT            LTQ_PPE_MBOX_INT 
     90#define PPE_MAILBOX_IGU1_INT            (INT_NUM_IM2_IRL0 + 13) 
    9791 
    9892 
    9993 
    100 #endif  //  IFXMIPS_ATM_PPE_DANUBE_H 
     94#endif  //  IFXMIPS_ATM_PPE_AMAZON_SE_H 
  • trunk/package/ltq-dsl/src/ifxmips_atm_ppe_common.h

    r24526 r28406  
     1/****************************************************************************** 
     2** 
     3** FILE NAME    : ifxmips_atm_ppe_common.h 
     4** PROJECT      : UEIP 
     5** MODULES      : ATM (ADSL) 
     6** 
     7** DATE         : 1 AUG 2005 
     8** AUTHOR       : Xu Liang 
     9** DESCRIPTION  : ATM Driver (PPE Registers) 
     10** COPYRIGHT    :       Copyright (c) 2006 
     11**                      Infineon Technologies AG 
     12**                      Am Campeon 1-12, 85579 Neubiberg, Germany 
     13** 
     14**    This program is free software; you can redistribute it and/or modify 
     15**    it under the terms of the GNU General Public License as published by 
     16**    the Free Software Foundation; either version 2 of the License, or 
     17**    (at your option) any later version. 
     18** 
     19** HISTORY 
     20** $Date        $Author         $Comment 
     21**  4 AUG 2005  Xu Liang        Initiate Version 
     22** 23 OCT 2006  Xu Liang        Add GPL header. 
     23**  9 JAN 2007  Xu Liang        First version got from Anand (IC designer) 
     24*******************************************************************************/ 
     25 
     26 
     27 
    128#ifndef IFXMIPS_ATM_PPE_COMMON_H 
    229#define IFXMIPS_ATM_PPE_COMMON_H 
    3  
    4 #if defined(CONFIG_LANTIQ) 
    5   #include "ifxmips_atm_ppe_danube.h" 
    6   #define CONFIG_DANUBE 
    7 #elif defined(CONFIG_DANUBE)  
     30#if defined(CONFIG_DANUBE)  
    831  #include "ifxmips_atm_ppe_danube.h" 
    932#elif defined(CONFIG_AMAZON_SE) 
     
    1639  #error Platform is not specified! 
    1740#endif 
     41 
    1842 
    1943 
     
    208232 *  RTHA/TTHA Registers 
    209233 */ 
    210 #define SFSM_STATE0                             PPE_REG_ADDR(0x0410) 
    211 #define SFSM_STATE1                             PPE_REG_ADDR(0x0411) 
    212 #define SFSM_DBA0                               PPE_REG_ADDR(0x0412) 
    213 #define SFSM_DBA1                               PPE_REG_ADDR(0x0413) 
    214 #define SFSM_CBA0                               PPE_REG_ADDR(0x0414) 
    215 #define SFSM_CBA1                               PPE_REG_ADDR(0x0415) 
    216 #define SFSM_CFG0                               PPE_REG_ADDR(0x0416) 
    217 #define SFSM_CFG1                               PPE_REG_ADDR(0x0417) 
    218 #define SFSM_PGCNT0                             PPE_REG_ADDR(0x041C) 
    219 #define SFSM_PGCNT1                             PPE_REG_ADDR(0x041D) 
    220 #define FFSM_DBA0                               PPE_REG_ADDR(0x0508) 
    221 #define FFSM_DBA1                               PPE_REG_ADDR(0x0509) 
    222 #define FFSM_CFG0                               PPE_REG_ADDR(0x050A) 
    223 #define FFSM_CFG1                               PPE_REG_ADDR(0x050B) 
    224 #define FFSM_IDLE_HEAD_BC0                      PPE_REG_ADDR(0x050E) 
    225 #define FFSM_IDLE_HEAD_BC1                      PPE_REG_ADDR(0x050F) 
    226 #define FFSM_PGCNT0                             PPE_REG_ADDR(0x0514) 
    227 #define FFSM_PGCNT1                             PPE_REG_ADDR(0x0515) 
     234#define RFBI_CFG                        PPE_REG_ADDR(0x0400) 
     235#define RBA_CFG0                        PPE_REG_ADDR(0x0404) 
     236#define RBA_CFG1                        PPE_REG_ADDR(0x0405) 
     237#define RCA_CFG0                        PPE_REG_ADDR(0x0408) 
     238#define RCA_CFG1                        PPE_REG_ADDR(0x0409) 
     239#define RDES_CFG0                       PPE_REG_ADDR(0x040C) 
     240#define RDES_CFG1                       PPE_REG_ADDR(0x040D) 
     241#define SFSM_STATE0                     PPE_REG_ADDR(0x0410) 
     242#define SFSM_STATE1                     PPE_REG_ADDR(0x0411) 
     243#define SFSM_DBA0                       PPE_REG_ADDR(0x0412) 
     244#define SFSM_DBA1                       PPE_REG_ADDR(0x0413) 
     245#define SFSM_CBA0                       PPE_REG_ADDR(0x0414) 
     246#define SFSM_CBA1                       PPE_REG_ADDR(0x0415) 
     247#define SFSM_CFG0                       PPE_REG_ADDR(0x0416) 
     248#define SFSM_CFG1                       PPE_REG_ADDR(0x0417) 
     249#define SFSM_PGCNT0                     PPE_REG_ADDR(0x041C) 
     250#define SFSM_PGCNT1                     PPE_REG_ADDR(0x041D) 
     251#define FFSM_DBA0                       PPE_REG_ADDR(0x0508) 
     252#define FFSM_DBA1                       PPE_REG_ADDR(0x0509) 
     253#define FFSM_CFG0                       PPE_REG_ADDR(0x050A) 
     254#define FFSM_CFG1                       PPE_REG_ADDR(0x050B) 
     255#define FFSM_IDLE_HEAD_BC0              PPE_REG_ADDR(0x050E) 
     256#define FFSM_IDLE_HEAD_BC1              PPE_REG_ADDR(0x050F) 
     257#define FFSM_PGCNT0                     PPE_REG_ADDR(0x0514) 
     258#define FFSM_PGCNT1                     PPE_REG_ADDR(0x0515) 
     259 
     260/* 
     261 *  PPE TC Logic Registers (partial) 
     262 */ 
     263#define DREG_A_VERSION                  PPE_REG_ADDR(0x0D00) 
     264#define DREG_A_CFG                      PPE_REG_ADDR(0x0D01) 
     265#define DREG_AT_CTRL                    PPE_REG_ADDR(0x0D02) 
     266#define DREG_AT_CB_CFG0                 PPE_REG_ADDR(0x0D03) 
     267#define DREG_AT_CB_CFG1                 PPE_REG_ADDR(0x0D04) 
     268#define DREG_AR_CTRL                    PPE_REG_ADDR(0x0D08) 
     269#define DREG_AR_CB_CFG0                 PPE_REG_ADDR(0x0D09) 
     270#define DREG_AR_CB_CFG1                 PPE_REG_ADDR(0x0D0A) 
     271#define DREG_A_UTPCFG                   PPE_REG_ADDR(0x0D0E) 
     272#define DREG_A_STATUS                   PPE_REG_ADDR(0x0D0F) 
     273#define DREG_AT_CFG0                    PPE_REG_ADDR(0x0D20) 
     274#define DREG_AT_CFG1                    PPE_REG_ADDR(0x0D21) 
     275#define DREG_AT_FB_SIZE0                PPE_REG_ADDR(0x0D22) 
     276#define DREG_AT_FB_SIZE1                PPE_REG_ADDR(0x0D23) 
     277#define DREG_AT_CELL0                   PPE_REG_ADDR(0x0D24) 
     278#define DREG_AT_CELL1                   PPE_REG_ADDR(0x0D25) 
     279#define DREG_AT_IDLE_CNT0               PPE_REG_ADDR(0x0D26) 
     280#define DREG_AT_IDLE_CNT1               PPE_REG_ADDR(0x0D27) 
     281#define DREG_AT_IDLE0                   PPE_REG_ADDR(0x0D28) 
     282#define DREG_AT_IDLE1                   PPE_REG_ADDR(0x0D29) 
     283#define DREG_AR_CFG0                    PPE_REG_ADDR(0x0D60) 
     284#define DREG_AR_CFG1                    PPE_REG_ADDR(0x0D61) 
     285#define DREG_AR_CELL0                   PPE_REG_ADDR(0x0D68) 
     286#define DREG_AR_CELL1                   PPE_REG_ADDR(0x0D69) 
     287#define DREG_AR_IDLE_CNT0               PPE_REG_ADDR(0x0D6A) 
     288#define DREG_AR_IDLE_CNT1               PPE_REG_ADDR(0x0D6B) 
     289#define DREG_AR_AIIDLE_CNT0             PPE_REG_ADDR(0x0D6C) 
     290#define DREG_AR_AIIDLE_CNT1             PPE_REG_ADDR(0x0D6D) 
     291#define DREG_AR_BE_CNT0                 PPE_REG_ADDR(0x0D6E) 
     292#define DREG_AR_BE_CNT1                 PPE_REG_ADDR(0x0D6F) 
     293#define DREG_AR_HEC_CNT0                PPE_REG_ADDR(0x0D70) 
     294#define DREG_AR_HEC_CNT1                PPE_REG_ADDR(0x0D71) 
     295#define DREG_AR_IDLE0                   PPE_REG_ADDR(0x0D74) 
     296#define DREG_AR_IDLE1                   PPE_REG_ADDR(0x0D75) 
     297#define DREG_AR_CVN_CNT0                PPE_REG_ADDR(0x0DA4) 
     298#define DREG_AR_CVN_CNT1                PPE_REG_ADDR(0x0DA5) 
     299#define DREG_AR_CVNP_CNT0               PPE_REG_ADDR(0x0DA6) 
     300#define DREG_AR_CVNP_CNT1               PPE_REG_ADDR(0x0DA7) 
     301#define DREG_B0_LADR                    PPE_REG_ADDR(0x0DA8) 
     302#define DREG_B1_LADR                    PPE_REG_ADDR(0x0DA9) 
     303 
     304#define SFSM_DBA(i)                     ( (SFSM_dba * )   PPE_REG_ADDR(0x0412 + (i))) 
     305#define SFSM_CBA(i)                     ( (SFSM_cba * )   PPE_REG_ADDR(0x0414 + (i))) 
     306#define SFSM_CFG(i)                     ( (SFSM_cfg * )   PPE_REG_ADDR(0x0416 + (i))) 
     307#define SFSM_PGCNT(i)                   ( (SFSM_pgcnt * ) PPE_REG_ADDR(0x041C + (i))) 
     308 
     309#define FFSM_DBA(i)                     ( (FFSM_dba * )   PPE_REG_ADDR(0x0508 + (i))) 
     310#define FFSM_CFG(i)                     ( (FFSM_cfg * )   PPE_REG_ADDR(0x050A + (i))) 
     311#define FFSM_PGCNT(i)                   ( (FFSM_pgcnt * ) PPE_REG_ADDR(0x0514 + (i))) 
     312 
     313typedef struct  { 
     314    unsigned int    res     : 19; 
     315    unsigned int    dbase   : 13; 
     316} SFSM_dba; 
     317 
     318typedef struct  { 
     319    unsigned int    res     : 19; 
     320    unsigned int    cbase   : 13; 
     321} SFSM_cba; 
     322 
     323typedef struct  { 
     324    unsigned int    res     : 15; 
     325    unsigned int    endian  : 1; 
     326    unsigned int    idlekeep: 1; 
     327    unsigned int    sen     : 1; 
     328    unsigned int    res1    : 8; 
     329    unsigned int    pnum    : 6; 
     330} SFSM_cfg; 
     331 
     332typedef struct  { 
     333    unsigned int    res     : 17; 
     334    unsigned int    pptr    : 6; 
     335    unsigned int    dcmd    : 1; 
     336    unsigned int    res1    : 2; 
     337    unsigned int    upage   : 6; 
     338} SFSM_pgcnt; 
     339 
     340typedef struct  { 
     341    unsigned int    res     : 19; 
     342    unsigned int    dbase   : 13; 
     343} FFSM_dba; 
     344 
     345typedef struct  { 
     346    unsigned int    res     : 12; 
     347    unsigned int    rstptr  : 1; 
     348    unsigned int    clvpage : 1; 
     349    unsigned int    fidle   : 1; 
     350    unsigned int    endian  : 1; 
     351    unsigned int    res1    : 10; 
     352    unsigned int    pnum    : 6; 
     353} FFSM_cfg; 
     354 
     355typedef struct  { 
     356    unsigned int    res     : 17; 
     357    unsigned int    ival    : 6; 
     358    unsigned int    icmd    : 1; 
     359    unsigned int    res1    : 2; 
     360    unsigned int    vpage   : 6; 
     361} FFSM_pgcnt; 
    228362 
    229363 
  • trunk/package/ltq-dsl/src/ifxmips_atm_ppe_danube.h

    r27026 r28406  
     1/****************************************************************************** 
     2** 
     3** FILE NAME    : ifxmips_atm_ppe_danube.h 
     4** PROJECT      : UEIP 
     5** MODULES      : ATM (ADSL) 
     6** 
     7** DATE         : 1 AUG 2005 
     8** AUTHOR       : Xu Liang 
     9** DESCRIPTION  : ATM Driver (PPE Registers) 
     10** COPYRIGHT    :       Copyright (c) 2006 
     11**                      Infineon Technologies AG 
     12**                      Am Campeon 1-12, 85579 Neubiberg, Germany 
     13** 
     14**    This program is free software; you can redistribute it and/or modify 
     15**    it under the terms of the GNU General Public License as published by 
     16**    the Free Software Foundation; either version 2 of the License, or 
     17**    (at your option) any later version. 
     18** 
     19** HISTORY 
     20** $Date        $Author         $Comment 
     21**  4 AUG 2005  Xu Liang        Initiate Version 
     22** 23 OCT 2006  Xu Liang        Add GPL header. 
     23**  9 JAN 2007  Xu Liang        First version got from Anand (IC designer) 
     24*******************************************************************************/ 
     25 
     26 
     27 
    128#ifndef IFXMIPS_ATM_PPE_DANUBE_H 
    229#define IFXMIPS_ATM_PPE_DANUBE_H 
     
    77104#define PP32_DBG_TASK_NO                PP32_DEBUG_REG_ADDR(0, 0x0081) 
    78105 
     106#define PP32_DBG_REG_BASE(tsk, i)       PP32_DEBUG_REG_ADDR(0, 0x0100 + (tsk) * 16 + (i)) 
     107 
    79108/* 
    80109 *  EMA Registers 
  • trunk/package/ltq-dsl/src/ifxmips_atm_vr9.c

    r28405 r28406  
    11/****************************************************************************** 
    22** 
    3 ** FILE NAME    : ifxmips_atm_danube.c 
     3** FILE NAME    : ifxmips_atm_vr9.c 
    44** PROJECT      : UEIP 
    55** MODULES      : ATM 
     
    4646 *  Chip Specific Head File 
    4747 */ 
    48 #include <lantiq_soc.h> 
    49 #include "ifxmips_compat.h" 
     48#include <ifx_types.h> 
     49#include <ifx_regs.h> 
     50#include <common_routines.h> 
     51#include <ifx_pmu.h> 
     52#include <ifx_rcu.h> 
    5053#include "ifxmips_atm_core.h" 
    51 #include "ifxmips_atm_fw_danube.h" 
     54#include "ifxmips_atm_fw_vr9.h" 
    5255 
    5356 
     
    5861 * #################################### 
    5962 */ 
    60  
    61 /* 
    62  *  EMA Settings 
    63  */ 
    64 #define EMA_CMD_BUF_LEN      0x0040 
    65 #define EMA_CMD_BASE_ADDR    (0x00001580 << 2) 
    66 #define EMA_DATA_BUF_LEN     0x0100 
    67 #define EMA_DATA_BASE_ADDR   (0x00001900 << 2) 
    68 #define EMA_WRITE_BURST      0x2 
    69 #define EMA_READ_BURST       0x2 
    7063 
    7164 
     
    8275static inline void init_pmu(void); 
    8376static inline void uninit_pmu(void); 
    84 static inline void init_ema(void); 
     77static inline void reset_ppe(void); 
     78static inline void init_pdma(void); 
    8579static inline void init_mailbox(void); 
    8680static inline void init_atm_tc(void); 
     
    10599static inline void init_pmu(void) 
    106100{ 
    107     //*(unsigned long *)0xBF10201C &= ~((1 << 15) | (1 << 13) | (1 << 9)); 
    108     PPE_TOP_PMU_SETUP(IFX_PMU_ENABLE); 
     101    //*PMU_PWDCR &= ~((1 << 29) | (1 << 22) | (1 << 21) | (1 << 19) | (1 << 18)); 
     102    //PPE_TOP_PMU_SETUP(IFX_PMU_ENABLE); 
    109103    PPE_SLL01_PMU_SETUP(IFX_PMU_ENABLE); 
    110104    PPE_TC_PMU_SETUP(IFX_PMU_ENABLE); 
     
    123117    PPE_TPE_PMU_SETUP(IFX_PMU_DISABLE); 
    124118    DSL_DFE_PMU_SETUP(IFX_PMU_DISABLE); 
    125     PPE_TOP_PMU_SETUP(IFX_PMU_DISABLE); 
    126 } 
    127  
    128 static inline void init_ema(void) 
    129 { 
    130     IFX_REG_W32((EMA_CMD_BUF_LEN << 16) | (EMA_CMD_BASE_ADDR >> 2), EMA_CMDCFG); 
    131     IFX_REG_W32((EMA_DATA_BUF_LEN << 16) | (EMA_DATA_BASE_ADDR >> 2), EMA_DATACFG); 
    132     IFX_REG_W32(0x000000FF, EMA_IER); 
    133     IFX_REG_W32(EMA_READ_BURST | (EMA_WRITE_BURST << 2), EMA_CFG); 
     119    //PPE_TOP_PMU_SETUP(IFX_PMU_DISABLE); 
     120} 
     121 
     122static inline void reset_ppe(void) 
     123{ 
     124#ifdef MODULE 
     125    //  reset PPE 
     126    ifx_rcu_rst(IFX_RCU_DOMAIN_DSLDFE, IFX_RCU_MODULE_ATM); 
     127    udelay(1000); 
     128    ifx_rcu_rst(IFX_RCU_DOMAIN_DSLTC, IFX_RCU_MODULE_ATM); 
     129    udelay(1000); 
     130    ifx_rcu_rst(IFX_RCU_DOMAIN_PPE, IFX_RCU_MODULE_ATM); 
     131    udelay(1000); 
     132    *PP32_SRST &= ~0x000303CF; 
     133    udelay(1000); 
     134    *PP32_SRST |= 0x000303CF; 
     135    udelay(1000); 
     136#endif 
     137} 
     138 
     139static inline void init_pdma(void) 
     140{ 
     141    IFX_REG_W32(0x08,       PDMA_CFG); 
     142    IFX_REG_W32(0x00203580, SAR_PDMA_RX_CMDBUF_CFG); 
     143    IFX_REG_W32(0x004035A0, SAR_PDMA_RX_FW_CMDBUF_CFG); 
    134144} 
    135145 
     
    144154static inline void init_atm_tc(void) 
    145155{ 
    146     //  for ReTX expansion in future 
    147     //*FFSM_CFG0 = SET_BITS(*FFSM_CFG0, 5, 0, 6); //  pnum = 6 
    148     //*FFSM_CFG1 = SET_BITS(*FFSM_CFG1, 5, 0, 6); //  pnum = 6 
     156    /*  clear sync state    */ 
     157    *SFSM_STATE0    = 0; 
     158    *SFSM_STATE1    = 0; 
     159 
     160    /*  enable keep IDLE    */ 
     161//    *SFSM_CFG0     |= 1 << 15; 
     162//    *SFSM_CFG1     |= 1 << 15; 
    149163} 
    150164 
    151165static inline void clear_share_buffer(void) 
    152166{ 
    153     volatile u32 *p = SB_RAM0_ADDR(0); 
     167    volatile u32 *p; 
    154168    unsigned int i;