diff options
50 files changed, 0 insertions, 9190 deletions
diff --git a/target/linux/rdc/config-2.6.24 b/target/linux/rdc/config-2.6.24 deleted file mode 100644 index f149a4c..0000000 --- a/target/linux/rdc/config-2.6.24 +++ /dev/null @@ -1,294 +0,0 @@ -# CONFIG_60XX_WDT is not set -# CONFIG_64BIT is not set -# CONFIG_8139TOO is not set -# CONFIG_ACQUIRE_WDT is not set -# CONFIG_ADVANTECH_WDT is not set -# CONFIG_AGP is not set -# CONFIG_ALIM1535_WDT is not set -# CONFIG_ALIM7101_WDT is not set -# CONFIG_ARCH_HAS_ILOG2_U32 is not set -# CONFIG_ARCH_HAS_ILOG2_U64 is not set -CONFIG_ARCH_MAY_HAVE_PC_FDC=y -CONFIG_ARCH_POPULATES_NODE_MAP=y -# CONFIG_ARCH_SUPPORTS_MSI is not set -CONFIG_ARCH_SUPPORTS_OPROFILE=y -# CONFIG_AUDIT_ARCH is not set -CONFIG_BASE_SMALL=0 -# CONFIG_BINFMT_AOUT is not set -CONFIG_BITREVERSE=y -# CONFIG_BLK_DEV_INITRD is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 -CONFIG_BLK_DEV_RAM_COUNT=16 -CONFIG_BLK_DEV_RAM_SIZE=4096 -CONFIG_BOUNCE=y -# CONFIG_BROADCOM_PHY is not set -CONFIG_CLOCKSOURCE_WATCHDOG=y -# CONFIG_COMPAT_VDSO is not set -# CONFIG_CPU5_WDT is not set -# CONFIG_CPU_FREQ is not set -# CONFIG_CPU_IDLE is not set -# CONFIG_CRYPTO_AES_586 is not set -# CONFIG_CRYPTO_TWOFISH_586 is not set -# CONFIG_CS5535_GPIO is not set -# CONFIG_DCDBAS is not set -# CONFIG_DEBUG_BUGVERBOSE is not set -CONFIG_DEFAULT_CFQ=y -# CONFIG_DEFAULT_DEADLINE is not set -CONFIG_DEFAULT_IOSCHED="cfq" -# CONFIG_DELL_RBU is not set -CONFIG_DEVPORT=y -# CONFIG_DMADEVICES is not set -CONFIG_DMI=y -CONFIG_DMIID=y -CONFIG_DOUBLEFAULT=y -CONFIG_EARLY_PRINTK=y -# CONFIG_EDAC is not set -# CONFIG_EDD is not set -# CONFIG_ENABLE_WARN_DEPRECATED is not set -# CONFIG_EUROTECH_WDT is not set -# CONFIG_FIXED_PHY is not set -CONFIG_FIX_EARLYCON_MEM=y -CONFIG_GENERIC_BUG=y -CONFIG_GENERIC_CLOCKEVENTS=y -CONFIG_GENERIC_CLOCKEVENTS_BUILD=y -CONFIG_GENERIC_CMOS_UPDATE=y -# CONFIG_GENERIC_CPU is not set -CONFIG_GENERIC_GPIO=y -CONFIG_GENERIC_IOMAP=y -CONFIG_GENERIC_ISA_DMA=y -# CONFIG_GENERIC_TIME_VSYSCALL is not set -# CONFIG_GEN_RTC is not set -# CONFIG_HANGCHECK_TIMER is not set -CONFIG_HAS_DMA=y -CONFIG_HAS_IOMEM=y -CONFIG_HAS_IOPORT=y -CONFIG_HIBERNATION_UP_POSSIBLE=y -# CONFIG_HIGHMEM4G is not set -# CONFIG_HIGHMEM64G is not set -# CONFIG_HIGH_RES_TIMERS is not set -# CONFIG_HPET_TIMER is not set -CONFIG_HUGETLBFS=y -CONFIG_HUGETLB_PAGE=y -CONFIG_HW_RANDOM=y -# CONFIG_HW_RANDOM_AMD is not set -# CONFIG_HW_RANDOM_GEODE is not set -# CONFIG_HW_RANDOM_INTEL is not set -# CONFIG_HW_RANDOM_VIA is not set -CONFIG_HZ=250 -# CONFIG_HZ_100 is not set -CONFIG_HZ_250=y -# CONFIG_I2C is not set -# CONFIG_I6300ESB_WDT is not set -# CONFIG_I8K is not set -# CONFIG_IB700_WDT is not set -# CONFIG_IBMASR is not set -# CONFIG_IBM_NEW_EMAC_EMAC4 is not set -# CONFIG_IBM_NEW_EMAC_RGMII is not set -# CONFIG_IBM_NEW_EMAC_TAH is not set -# CONFIG_IBM_NEW_EMAC_ZMII is not set -CONFIG_ICPLUS_PHY=y -# CONFIG_IDE is not set -CONFIG_IOSCHED_CFQ=y -# CONFIG_IOSCHED_DEADLINE is not set -# CONFIG_ISA is not set -CONFIG_ISA_DMA_API=y -# CONFIG_IT8712F_WDT is not set -# CONFIG_ITCO_WDT is not set -CONFIG_KEXEC=y -CONFIG_KTIME_SCALAR=y -# CONFIG_KVM is not set -CONFIG_LBD=y -CONFIG_LEDS_GPIO=y -# CONFIG_LGUEST is not set -CONFIG_LSF=y -# CONFIG_M386 is not set -CONFIG_M486=y -# CONFIG_M586 is not set -# CONFIG_M586MMX is not set -# CONFIG_M586TSC is not set -# CONFIG_M686 is not set -# CONFIG_MACHZ_WDT is not set -# CONFIG_MACINTOSH_DRIVERS is not set -CONFIG_MATH_EMULATION=y -# CONFIG_MCA is not set -# CONFIG_MCORE2 is not set -# CONFIG_MCRUSOE is not set -# CONFIG_MCYRIXIII is not set -# CONFIG_MDIO_BITBANG is not set -# CONFIG_MEFFICEON is not set -# CONFIG_MGEODEGX1 is not set -# CONFIG_MGEODE_LX is not set -# CONFIG_MICROCODE is not set -# CONFIG_MK6 is not set -# CONFIG_MK7 is not set -# CONFIG_MK8 is not set -CONFIG_MODULE_FORCE_UNLOAD=y -# CONFIG_MPENTIUM4 is not set -# CONFIG_MPENTIUMII is not set -# CONFIG_MPENTIUMIII is not set -# CONFIG_MPENTIUMM is not set -# CONFIG_MPSC is not set -CONFIG_MTD=y -# CONFIG_MTD_ABSENT is not set -CONFIG_MTD_BLKDEVS=y -CONFIG_MTD_BLOCK=y -# CONFIG_MTD_BLOCK2MTD is not set -CONFIG_MTD_CFI=y -# CONFIG_MTD_CFI_ADV_OPTIONS is not set -CONFIG_MTD_CFI_AMDSTD=y -CONFIG_MTD_CFI_I1=y -CONFIG_MTD_CFI_I2=y -# CONFIG_MTD_CFI_I4 is not set -# CONFIG_MTD_CFI_I8 is not set -# CONFIG_MTD_CFI_INTELEXT is not set -# CONFIG_MTD_CFI_STAA is not set -CONFIG_MTD_CFI_UTIL=y -CONFIG_MTD_CHAR=y -# CONFIG_MTD_CMDLINE_PARTS is not set -# CONFIG_MTD_COMPLEX_MAPPINGS is not set -CONFIG_MTD_CONCAT=y -# CONFIG_MTD_DEBUG is not set -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOC2001PLUS is not set -CONFIG_MTD_GEN_PROBE=y -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_MAP_BANK_WIDTH_1=y -# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set -CONFIG_MTD_MAP_BANK_WIDTH_2=y -# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set -CONFIG_MTD_MAP_BANK_WIDTH_4=y -# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_NETSC520 is not set -# CONFIG_MTD_ONENAND is not set -CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_PHRAM is not set -CONFIG_MTD_PHYSMAP=y -CONFIG_MTD_PHYSMAP_BANKWIDTH=2 -CONFIG_MTD_PHYSMAP_LEN=0 -CONFIG_MTD_PHYSMAP_START=0x8000000 -# CONFIG_MTD_PLATRAM is not set -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_PNC2000 is not set -# CONFIG_MTD_RAM is not set -CONFIG_MTD_RDC3210=y -CONFIG_MTD_RDC3210_ALLOW_JFFS2=y -CONFIG_MTD_RDC3210_BUSWIDTH=2 -# CONFIG_MTD_RDC3210_FACTORY_PRESENT is not set -CONFIG_MTD_RDC3210_SIZE=0x400000 -# CONFIG_MTD_RDC3210_STATIC_MAP is not set -# CONFIG_MTD_REDBOOT_PARTS is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_SC520CDP is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_TS5500 is not set -# CONFIG_MTRR is not set -# CONFIG_MVIAC3_2 is not set -# CONFIG_MVIAC7 is not set -# CONFIG_MWINCHIP2 is not set -# CONFIG_MWINCHIP3D is not set -# CONFIG_MWINCHIPC6 is not set -# CONFIG_NATSEMI is not set -# CONFIG_NE2K_PCI is not set -# CONFIG_NET_VENDOR_3COM is not set -CONFIG_NF_CONNTRACK=y -CONFIG_NOHIGHMEM=y -CONFIG_NO_HZ=y -CONFIG_NR_QUICK=1 -# CONFIG_NSC_GPIO is not set -CONFIG_NVRAM=y -CONFIG_PAGE_OFFSET=0xC0000000 -# CONFIG_PARAVIRT_GUEST is not set -# CONFIG_PC8736x_GPIO is not set -# CONFIG_PC87413_WDT is not set -CONFIG_PCI=y -# CONFIG_PCIEPORTBUS is not set -# CONFIG_PCIPCWATCHDOG is not set -CONFIG_PCI_BIOS=y -CONFIG_PCI_DIRECT=y -CONFIG_PCI_DOMAINS=y -CONFIG_PCI_GOANY=y -# CONFIG_PCI_GOBIOS is not set -# CONFIG_PCI_GODIRECT is not set -# CONFIG_PCI_GOMMCONFIG is not set -CONFIG_PHYLIB=y -CONFIG_PHYSICAL_ALIGN=0x100000 -CONFIG_PHYSICAL_START=0x100000 -# CONFIG_QSEMI_PHY is not set -CONFIG_QUICKLIST=y -# CONFIG_R6040 is not set -# CONFIG_RELOCATABLE is not set -# CONFIG_RTC is not set -# CONFIG_RWSEM_GENERIC_SPINLOCK is not set -CONFIG_RWSEM_XCHGADD_ALGORITHM=y -# CONFIG_SBC7240_WDT is not set -# CONFIG_SBC8360_WDT is not set -# CONFIG_SBC_EPX_C3_WATCHDOG is not set -# CONFIG_SC1200_WDT is not set -# CONFIG_SC520_WDT is not set -CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y -# CONFIG_SCSI_DMA is not set -# CONFIG_SCx200 is not set -CONFIG_SEMAPHORE_SLEEPERS=y -# CONFIG_SERIAL_8250_EXTENDED is not set -CONFIG_SLABINFO=y -# CONFIG_SMP is not set -# CONFIG_SMSC37B787_WDT is not set -# CONFIG_SMSC_PHY is not set -# CONFIG_SOFT_WATCHDOG is not set -# CONFIG_SPARSEMEM_STATIC is not set -# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set -CONFIG_SSB_POSSIBLE=y -CONFIG_SYSVIPC_SYSCTL=y -# CONFIG_TELCLOCK is not set -CONFIG_TICK_ONESHOT=y -# CONFIG_TOSHIBA is not set -CONFIG_UID16=y -# CONFIG_USER_NS is not set -# CONFIG_VGASTATE is not set -# CONFIG_VIA_RHINE is not set -CONFIG_VIRTUALIZATION=y -# CONFIG_VM86 is not set -# CONFIG_VMSPLIT_1G is not set -# CONFIG_VMSPLIT_2G is not set -# CONFIG_VMSPLIT_2G_OPT is not set -CONFIG_VMSPLIT_3G=y -# CONFIG_VMSPLIT_3G_OPT is not set -CONFIG_VM_EVENT_COUNTERS=y -# CONFIG_WAFER_WDT is not set -CONFIG_X86=y -CONFIG_X86_32=y -# CONFIG_X86_64 is not set -CONFIG_X86_ALIGNMENT_16=y -# CONFIG_X86_BIGSMP is not set -CONFIG_X86_BIOS_REBOOT=y -CONFIG_X86_BSWAP=y -CONFIG_X86_CMPXCHG=y -CONFIG_X86_CPUID=y -# CONFIG_X86_ELAN is not set -# CONFIG_X86_ES7000 is not set -CONFIG_X86_F00F_BUG=y -# CONFIG_X86_GENERIC is not set -# CONFIG_X86_GENERICARCH is not set -CONFIG_X86_INVLPG=y -CONFIG_X86_L1_CACHE_SHIFT=4 -# CONFIG_X86_MCE is not set -CONFIG_X86_MINIMUM_CPU_FAMILY=4 -CONFIG_X86_MSR=y -# CONFIG_X86_NUMAQ is not set -# CONFIG_X86_PAE is not set -# CONFIG_X86_PC is not set -CONFIG_X86_POPAD_OK=y -CONFIG_X86_PPRO_FENCE=y -CONFIG_X86_RDC=y -CONFIG_X86_REBOOTFIXUPS=y -# CONFIG_X86_SUMMIT is not set -# CONFIG_X86_UP_APIC is not set -# CONFIG_X86_VISWS is not set -# CONFIG_X86_VOYAGER is not set -# CONFIG_X86_VSMP is not set -CONFIG_X86_WP_WORKS_OK=y -CONFIG_X86_XADD=y -# CONFIG_ZONE_DMA32 is not set diff --git a/target/linux/rdc/config-2.6.25 b/target/linux/rdc/config-2.6.25 deleted file mode 100644 index 422b97f..0000000 --- a/target/linux/rdc/config-2.6.25 +++ /dev/null @@ -1,373 +0,0 @@ -# CONFIG_60XX_WDT is not set -# CONFIG_64BIT is not set -# CONFIG_8139TOO is not set -# CONFIG_ACQUIRE_WDT is not set -# CONFIG_ADVANTECH_WDT is not set -# CONFIG_AGP is not set -# CONFIG_ALIM1535_WDT is not set -# CONFIG_ALIM7101_WDT is not set -CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig" -CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y -CONFIG_ARCH_HAS_CPU_RELAX=y -# CONFIG_ARCH_HAS_ILOG2_U32 is not set -# CONFIG_ARCH_HAS_ILOG2_U64 is not set -CONFIG_ARCH_HIBERNATION_POSSIBLE=y -CONFIG_ARCH_MAY_HAVE_PC_FDC=y -CONFIG_ARCH_POPULATES_NODE_MAP=y -CONFIG_ARCH_SUPPORTS_AOUT=y -# CONFIG_ARCH_SUPPORTS_MSI is not set -CONFIG_ARCH_SUSPEND_POSSIBLE=y -# CONFIG_ATA is not set -# CONFIG_ATA_NONSTANDARD is not set -# CONFIG_ATA_PIIX is not set -# CONFIG_AUDIT_ARCH is not set -CONFIG_BASE_SMALL=0 -# CONFIG_BINFMT_AOUT is not set -# CONFIG_BINFMT_MISC is not set -CONFIG_BITREVERSE=y -# CONFIG_BLK_DEV_IDE is not set -# CONFIG_BLK_DEV_IDEDISK is not set -# CONFIG_BLK_DEV_IDEDMA is not set -CONFIG_BOUNCE=y -# CONFIG_BROADCOM_PHY is not set -CONFIG_CLASSIC_RCU=y -CONFIG_CLOCKSOURCE_WATCHDOG=y -# CONFIG_COMPAT_VDSO is not set -# CONFIG_CPU5_WDT is not set -# CONFIG_CPU_FREQ is not set -# CONFIG_CPU_IDLE is not set -# CONFIG_CRYPTO_AEAD is not set -# CONFIG_CRYPTO_AES_586 is not set -# CONFIG_CRYPTO_AUTHENC is not set -# CONFIG_CRYPTO_GF128MUL is not set -# CONFIG_CRYPTO_SALSA20_586 is not set -# CONFIG_CRYPTO_TWOFISH_586 is not set -# CONFIG_CS5535_GPIO is not set -# CONFIG_DCDBAS is not set -# CONFIG_DEBUG_BUGVERBOSE is not set -CONFIG_DEFAULT_CFQ=y -# CONFIG_DEFAULT_DEADLINE is not set -CONFIG_DEFAULT_IOSCHED="cfq" -CONFIG_DEFAULT_IO_DELAY_TYPE=0 -# CONFIG_DELL_RBU is not set -CONFIG_DEVPORT=y -# CONFIG_DMADEVICES is not set -CONFIG_DMI=y -CONFIG_DMIID=y -CONFIG_DOUBLEFAULT=y -# CONFIG_E100 is not set -# CONFIG_E1000E_ENABLED is not set -CONFIG_EARLY_PRINTK=y -# CONFIG_EDAC is not set -# CONFIG_EDD is not set -# CONFIG_EUROTECH_WDT is not set -CONFIG_FAST_CMPXCHG_LOCAL=y -# CONFIG_FIXED_PHY is not set -CONFIG_FIX_EARLYCON_MEM=y -CONFIG_FS_POSIX_ACL=y -CONFIG_GENERIC_BUG=y -CONFIG_GENERIC_CLOCKEVENTS=y -CONFIG_GENERIC_CLOCKEVENTS_BUILD=y -CONFIG_GENERIC_CMOS_UPDATE=y -# CONFIG_GENERIC_CPU is not set -CONFIG_GENERIC_GPIO=y -CONFIG_GENERIC_IOMAP=y -CONFIG_GENERIC_ISA_DMA=y -# CONFIG_GENERIC_LOCKBREAK is not set -# CONFIG_GENERIC_TIME_VSYSCALL is not set -# CONFIG_GEN_RTC is not set -# CONFIG_HANGCHECK_TIMER is not set -CONFIG_HAS_DMA=y -CONFIG_HAS_IOMEM=y -CONFIG_HAS_IOPORT=y -CONFIG_HAVE_IDE=y -CONFIG_HAVE_KPROBES=y -CONFIG_HAVE_KRETPROBES=y -CONFIG_HAVE_KVM=y -CONFIG_HAVE_LATENCYTOP_SUPPORT=y -CONFIG_HAVE_OPROFILE=y -# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set -# CONFIG_HID is not set -CONFIG_HID_SUPPORT=y -# CONFIG_HIGHMEM4G is not set -# CONFIG_HIGHMEM64G is not set -# CONFIG_HIGH_RES_TIMERS is not set -# CONFIG_HPET_TIMER is not set -# CONFIG_HP_WATCHDOG is not set -CONFIG_HUGETLBFS=y -CONFIG_HUGETLB_PAGE=y -CONFIG_HW_RANDOM=y -# CONFIG_HW_RANDOM_AMD is not set -# CONFIG_HW_RANDOM_GEODE is not set -# CONFIG_HW_RANDOM_INTEL is not set -# CONFIG_HW_RANDOM_VIA is not set -CONFIG_HZ=250 -# CONFIG_HZ_100 is not set -CONFIG_HZ_250=y -# CONFIG_I2C is not set -# CONFIG_I2C_ALGOBIT is not set -CONFIG_I2C_BOARDINFO=y -# CONFIG_I6300ESB_WDT is not set -# CONFIG_I8K is not set -# CONFIG_IB700_WDT is not set -# CONFIG_IBMASR is not set -# CONFIG_IBM_ASM is not set -# CONFIG_IBM_NEW_EMAC_EMAC4 is not set -# CONFIG_IBM_NEW_EMAC_RGMII is not set -# CONFIG_IBM_NEW_EMAC_TAH is not set -# CONFIG_IBM_NEW_EMAC_ZMII is not set -CONFIG_ICPLUS_PHY=y -# CONFIG_IDE is not set -CONFIG_IDE_ARCH_OBSOLETE_INIT=y -# CONFIG_IDE_GENERIC is not set -# CONFIG_IDE_PROC_FS is not set -CONFIG_INITRAMFS_SOURCE="" -# CONFIG_INPUT is not set -# CONFIG_INPUT_APANEL is not set -# CONFIG_INPUT_GPIO_BUTTONS is not set -CONFIG_INPUT_MISC=y -# CONFIG_INPUT_YEALINK is not set -# CONFIG_IOMMU_HELPER is not set -CONFIG_IOSCHED_CFQ=y -# CONFIG_IOSCHED_DEADLINE is not set -CONFIG_IO_DELAY_0X80=y -# CONFIG_IO_DELAY_0XED is not set -# CONFIG_IO_DELAY_NONE is not set -CONFIG_IO_DELAY_TYPE_0X80=0 -CONFIG_IO_DELAY_TYPE_0XED=1 -CONFIG_IO_DELAY_TYPE_NONE=3 -CONFIG_IO_DELAY_TYPE_UDELAY=2 -# CONFIG_IO_DELAY_UDELAY is not set -# CONFIG_IPWIRELESS is not set -# CONFIG_ISA is not set -CONFIG_ISA_DMA_API=y -# CONFIG_IT8712F_WDT is not set -# CONFIG_ITCO_WDT is not set -# CONFIG_JFS_FS is not set -CONFIG_KEXEC=y -CONFIG_KTIME_SCALAR=y -# CONFIG_KVM is not set -# CONFIG_LATENCYTOP is not set -CONFIG_LBD=y -# CONFIG_LEDS_ALIX is not set -CONFIG_LEDS_GPIO=y -# CONFIG_LGUEST is not set -CONFIG_LSF=y -# CONFIG_LZO_COMPRESS is not set -# CONFIG_LZO_DECOMPRESS is not set -# CONFIG_M386 is not set -CONFIG_M486=y -# CONFIG_M586 is not set -# CONFIG_M586MMX is not set -# CONFIG_M586TSC is not set -# CONFIG_M686 is not set -# CONFIG_MACHZ_WDT is not set -# CONFIG_MACINTOSH_DRIVERS is not set -CONFIG_MATH_EMULATION=y -# CONFIG_MCA is not set -# CONFIG_MCORE2 is not set -# CONFIG_MCRUSOE is not set -# CONFIG_MCYRIXIII is not set -# CONFIG_MDIO_BITBANG is not set -# CONFIG_MEFFICEON is not set -# CONFIG_MEMSTICK is not set -# CONFIG_MGEODEGX1 is not set -# CONFIG_MGEODE_LX is not set -# CONFIG_MICROCODE is not set -# CONFIG_MK6 is not set -# CONFIG_MK7 is not set -# CONFIG_MK8 is not set -CONFIG_MODULE_FORCE_UNLOAD=y -# CONFIG_MPENTIUM4 is not set -# CONFIG_MPENTIUMII is not set -# CONFIG_MPENTIUMIII is not set -# CONFIG_MPENTIUMM is not set -# CONFIG_MPSC is not set -CONFIG_MTD=y -# CONFIG_MTD_ABSENT is not set -CONFIG_MTD_BLKDEVS=y -CONFIG_MTD_BLOCK=y -# CONFIG_MTD_BLOCK2MTD is not set -CONFIG_MTD_CFI=y -# CONFIG_MTD_CFI_ADV_OPTIONS is not set -CONFIG_MTD_CFI_AMDSTD=y -CONFIG_MTD_CFI_I1=y -CONFIG_MTD_CFI_I2=y -# CONFIG_MTD_CFI_I4 is not set -# CONFIG_MTD_CFI_I8 is not set -# CONFIG_MTD_CFI_INTELEXT is not set -# CONFIG_MTD_CFI_STAA is not set -CONFIG_MTD_CFI_UTIL=y -CONFIG_MTD_CHAR=y -CONFIG_MTD_CMDLINE_PARTS=y -# CONFIG_MTD_COMPLEX_MAPPINGS is not set -CONFIG_MTD_CONCAT=y -# CONFIG_MTD_DEBUG is not set -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOC2001PLUS is not set -CONFIG_MTD_GEN_PROBE=y -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_MAP_BANK_WIDTH_1=y -# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set -CONFIG_MTD_MAP_BANK_WIDTH_2=y -# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set -CONFIG_MTD_MAP_BANK_WIDTH_4=y -# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_NETSC520 is not set -# CONFIG_MTD_ONENAND is not set -CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_PHRAM is not set -# CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_PLATRAM is not set -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_RAM is not set -CONFIG_MTD_RDC3210=y -CONFIG_MTD_RDC3210_ALLOW_JFFS2=y -CONFIG_MTD_RDC3210_BUSWIDTH=2 -# CONFIG_MTD_RDC3210_FACTORY_PRESENT is not set -CONFIG_MTD_RDC3210_SIZE=0x400000 -# CONFIG_MTD_RDC3210_STATIC_MAP is not set -# CONFIG_MTD_REDBOOT_PARTS is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_SC520CDP is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_TS5500 is not set -# CONFIG_MTRR is not set -# CONFIG_MVIAC3_2 is not set -# CONFIG_MVIAC7 is not set -# CONFIG_MWINCHIP2 is not set -# CONFIG_MWINCHIP3D is not set -# CONFIG_MWINCHIPC6 is not set -# CONFIG_NATSEMI is not set -# CONFIG_NE2K_PCI is not set -# CONFIG_NET_VENDOR_3COM is not set -# CONFIG_NLS_ISO8859_2 is not set -CONFIG_NOHIGHMEM=y -# CONFIG_NSC_GPIO is not set -CONFIG_NVRAM=y -CONFIG_PAGE_OFFSET=0xC0000000 -# CONFIG_PARAVIRT_GUEST is not set -# CONFIG_PATA_ARTOP is not set -# CONFIG_PATA_CS5536 is not set -# CONFIG_PC8736x_GPIO is not set -# CONFIG_PC87413_WDT is not set -# CONFIG_PCCARD is not set -# CONFIG_PCCARD_NONSTATIC is not set -CONFIG_PCI=y -# CONFIG_PCIEPORTBUS is not set -# CONFIG_PCIPCWATCHDOG is not set -CONFIG_PCI_BIOS=y -CONFIG_PCI_DIRECT=y -CONFIG_PCI_DOMAINS=y -CONFIG_PCI_GOANY=y -# CONFIG_PCI_GOBIOS is not set -# CONFIG_PCI_GODIRECT is not set -# CONFIG_PCI_GOMMCONFIG is not set -# CONFIG_PCMCIA is not set -CONFIG_PHYLIB=y -CONFIG_PHYSICAL_ALIGN=0x100000 -CONFIG_PHYSICAL_START=0x100000 -# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set -# CONFIG_QSEMI_PHY is not set -# CONFIG_R6040 is not set -# CONFIG_REALTEK_PHY is not set -# CONFIG_RELOCATABLE is not set -# CONFIG_RTC is not set -# CONFIG_RWSEM_GENERIC_SPINLOCK is not set -CONFIG_RWSEM_XCHGADD_ALGORITHM=y -# CONFIG_SBC7240_WDT is not set -# CONFIG_SBC8360_WDT is not set -# CONFIG_SBC_EPX_C3_WATCHDOG is not set -# CONFIG_SC1200_WDT is not set -# CONFIG_SC520_WDT is not set -# CONFIG_SCHED_HRTICK is not set -CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y -# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set -# CONFIG_SCSI_MULTI_LUN is not set -# CONFIG_SCSI_WAIT_SCAN is not set -# CONFIG_SCx200 is not set -# CONFIG_SCx200_ACB is not set -CONFIG_SEMAPHORE_SLEEPERS=y -# CONFIG_SERIAL_8250_EXTENDED is not set -CONFIG_SLABINFO=y -# CONFIG_SMP is not set -# CONFIG_SMSC37B787_WDT is not set -# CONFIG_SMSC_PHY is not set -# CONFIG_SND_SIS7019 is not set -# CONFIG_SOFT_WATCHDOG is not set -# CONFIG_SONYPI is not set -# CONFIG_SPARSEMEM_STATIC is not set -# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set -CONFIG_SSB_POSSIBLE=y -CONFIG_SYSVIPC_SYSCTL=y -# CONFIG_TELCLOCK is not set -# CONFIG_TICK_ONESHOT is not set -# CONFIG_TOSHIBA is not set -CONFIG_UID16=y -# CONFIG_USB is not set -# CONFIG_USBPCWATCHDOG is not set -# CONFIG_USB_EHCI_HCD is not set -# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set -# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set -# CONFIG_USB_OHCI_HCD is not set -# CONFIG_USB_PWC is not set -# CONFIG_USB_PWC_DEBUG is not set -# CONFIG_USB_R8A66597_HCD is not set -# CONFIG_USB_SERIAL_CH341 is not set -# CONFIG_USB_SERIAL_OTI6858 is not set -CONFIG_USB_SUPPORT=y -# CONFIG_USB_UHCI_HCD is not set -CONFIG_V4L_USB_DRIVERS=y -# CONFIG_VGASTATE is not set -# CONFIG_VIA_RHINE is not set -CONFIG_VIDEO_CAPTURE_DRIVERS=y -# CONFIG_VIDEO_CPIA2 is not set -CONFIG_VIDEO_V4L1=y -# CONFIG_VIDEO_V4L2_COMMON is not set -# CONFIG_VIRTIO_BALLOON is not set -# CONFIG_VIRTIO_PCI is not set -CONFIG_VIRTUALIZATION=y -# CONFIG_VM86 is not set -# CONFIG_VMSPLIT_1G is not set -# CONFIG_VMSPLIT_2G is not set -# CONFIG_VMSPLIT_2G_OPT is not set -CONFIG_VMSPLIT_3G=y -# CONFIG_VMSPLIT_3G_OPT is not set -CONFIG_VM_EVENT_COUNTERS=y -# CONFIG_WAFER_WDT is not set -CONFIG_X86=y -CONFIG_X86_32=y -# CONFIG_X86_64 is not set -CONFIG_X86_ALIGNMENT_16=y -# CONFIG_X86_BIGSMP is not set -CONFIG_X86_BIOS_REBOOT=y -CONFIG_X86_BSWAP=y -CONFIG_X86_CMPXCHG=y -CONFIG_X86_CPUID=y -# CONFIG_X86_ELAN is not set -# CONFIG_X86_ES7000 is not set -CONFIG_X86_F00F_BUG=y -# CONFIG_X86_GENERIC is not set -# CONFIG_X86_GENERICARCH is not set -CONFIG_X86_INVLPG=y -CONFIG_X86_L1_CACHE_SHIFT=4 -# CONFIG_X86_MCE is not set -CONFIG_X86_MINIMUM_CPU_FAMILY=4 -CONFIG_X86_MSR=y -# CONFIG_X86_NUMAQ is not set -# CONFIG_X86_PAE is not set -# CONFIG_X86_PC is not set -CONFIG_X86_POPAD_OK=y -CONFIG_X86_PPRO_FENCE=y -CONFIG_X86_RDC321X=y -CONFIG_X86_REBOOTFIXUPS=y -# CONFIG_X86_SUMMIT is not set -# CONFIG_X86_UP_APIC is not set -# CONFIG_X86_VISWS is not set -# CONFIG_X86_VOYAGER is not set -# CONFIG_X86_VSMP is not set -CONFIG_X86_WP_WORKS_OK=y -CONFIG_X86_XADD=y -# CONFIG_ZONE_DMA32 is not set diff --git a/target/linux/rdc/config-2.6.27 b/target/linux/rdc/config-2.6.27 deleted file mode 100644 index cf8998d..0000000 --- a/target/linux/rdc/config-2.6.27 +++ /dev/null @@ -1,330 +0,0 @@ -# CONFIG_4KSTACKS is not set -# CONFIG_60XX_WDT is not set -# CONFIG_64BIT is not set -# CONFIG_8139TOO is not set -# CONFIG_ACQUIRE_WDT is not set -# CONFIG_ADVANTECH_WDT is not set -# CONFIG_AGP is not set -# CONFIG_ALIM1535_WDT is not set -CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig" -CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y -CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y -CONFIG_ARCH_HAS_CPU_RELAX=y -CONFIG_ARCH_HAS_DEFAULT_IDLE=y -# CONFIG_ARCH_HAS_ILOG2_U32 is not set -# CONFIG_ARCH_HAS_ILOG2_U64 is not set -CONFIG_ARCH_HIBERNATION_POSSIBLE=y -CONFIG_ARCH_MAY_HAVE_PC_FDC=y -CONFIG_ARCH_POPULATES_NODE_MAP=y -CONFIG_ARCH_SELECT_MEMORY_MODEL=y -CONFIG_ARCH_SPARSEMEM_ENABLE=y -CONFIG_ARCH_SUPPORTS_AOUT=y -# CONFIG_ARCH_SUPPORTS_MSI is not set -CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y -CONFIG_ARCH_SUSPEND_POSSIBLE=y -CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y -# CONFIG_AUDIT_ARCH is not set -CONFIG_BASE_SMALL=0 -# CONFIG_BINFMT_AOUT is not set -CONFIG_BITREVERSE=y -CONFIG_BOUNCE=y -CONFIG_CLASSIC_RCU=y -CONFIG_CLOCKSOURCE_WATCHDOG=y -# CONFIG_COMPAT_VDSO is not set -# CONFIG_CPU5_WDT is not set -# CONFIG_CPU_FREQ is not set -# CONFIG_CPU_IDLE is not set -# CONFIG_CRYPTO_AES_586 is not set -# CONFIG_CRYPTO_SALSA20_586 is not set -# CONFIG_CRYPTO_TWOFISH_586 is not set -# CONFIG_CS5535_GPIO is not set -# CONFIG_DCDBAS is not set -# CONFIG_DEBUG_BUGVERBOSE is not set -CONFIG_DEFAULT_CFQ=y -# CONFIG_DEFAULT_DEADLINE is not set -CONFIG_DEFAULT_IOSCHED="cfq" -CONFIG_DEFAULT_IO_DELAY_TYPE=0 -# CONFIG_DELL_RBU is not set -CONFIG_DEVPORT=y -CONFIG_DMI=y -CONFIG_DMIID=y -CONFIG_DOUBLEFAULT=y -CONFIG_EARLY_PRINTK=y -# CONFIG_EDAC is not set -# CONFIG_EDD is not set -# CONFIG_EUROTECH_WDT is not set -CONFIG_FAST_CMPXCHG_LOCAL=y -CONFIG_FIRMWARE_MEMMAP=y -# CONFIG_FIXED_PHY is not set -CONFIG_FIX_EARLYCON_MEM=y -CONFIG_GENERIC_BUG=y -CONFIG_GENERIC_CLOCKEVENTS=y -CONFIG_GENERIC_CLOCKEVENTS_BUILD=y -CONFIG_GENERIC_CMOS_UPDATE=y -# CONFIG_GENERIC_CPU is not set -CONFIG_GENERIC_FIND_FIRST_BIT=y -CONFIG_GENERIC_FIND_NEXT_BIT=y -# CONFIG_GENERIC_GPIO is not set -CONFIG_GENERIC_IOMAP=y -CONFIG_GENERIC_ISA_DMA=y -# CONFIG_GENERIC_LOCKBREAK is not set -# CONFIG_GENERIC_TIME_VSYSCALL is not set -# CONFIG_GEN_RTC is not set -# CONFIG_HANGCHECK_TIMER is not set -CONFIG_HAS_DMA=y -CONFIG_HAS_IOMEM=y -CONFIG_HAS_IOPORT=y -CONFIG_HAVE_ARCH_KGDB=y -# CONFIG_HAVE_ARCH_TRACEHOOK is not set -# CONFIG_HAVE_CLK is not set -# CONFIG_HAVE_CPUMASK_OF_CPU_MAP is not set -# CONFIG_HAVE_DMA_ATTRS is not set -CONFIG_HAVE_DYNAMIC_FTRACE=y -CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y -CONFIG_HAVE_FTRACE=y -CONFIG_HAVE_GENERIC_DMA_COHERENT=y -CONFIG_HAVE_IDE=y -CONFIG_HAVE_IOREMAP_PROT=y -CONFIG_HAVE_KPROBES=y -CONFIG_HAVE_KRETPROBES=y -CONFIG_HAVE_KVM=y -CONFIG_HAVE_LATENCYTOP_SUPPORT=y -CONFIG_HAVE_OPROFILE=y -# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set -CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y -# CONFIG_HIGHMEM4G is not set -# CONFIG_HIGHMEM64G is not set -# CONFIG_HIGH_RES_TIMERS is not set -# CONFIG_HPET_TIMER is not set -# CONFIG_HP_WATCHDOG is not set -CONFIG_HUGETLBFS=y -CONFIG_HUGETLB_PAGE=y -CONFIG_HW_RANDOM=y -# CONFIG_HW_RANDOM_AMD is not set -# CONFIG_HW_RANDOM_GEODE is not set -# CONFIG_HW_RANDOM_INTEL is not set -# CONFIG_HW_RANDOM_VIA is not set -CONFIG_HZ=250 -# CONFIG_HZ_100 is not set -CONFIG_HZ_250=y -# CONFIG_I2C is not set -# CONFIG_I6300ESB_WDT is not set -# CONFIG_I8K is not set -# CONFIG_IB700_WDT is not set -# CONFIG_IBMASR is not set -CONFIG_ICPLUS_PHY=y -# CONFIG_IDE is not set -CONFIG_INITRAMFS_SOURCE="" -# CONFIG_IOMMU_HELPER is not set -CONFIG_IOSCHED_CFQ=y -# CONFIG_IOSCHED_DEADLINE is not set -CONFIG_IO_DELAY_0X80=y -# CONFIG_IO_DELAY_0XED is not set -# CONFIG_IO_DELAY_NONE is not set -CONFIG_IO_DELAY_TYPE_0X80=0 -CONFIG_IO_DELAY_TYPE_0XED=1 -CONFIG_IO_DELAY_TYPE_NONE=3 -CONFIG_IO_DELAY_TYPE_UDELAY=2 -# CONFIG_IO_DELAY_UDELAY is not set -# CONFIG_ISA is not set -CONFIG_ISA_DMA_API=y -# CONFIG_ISCSI_IBFT_FIND is not set -# CONFIG_IT8712F_WDT is not set -# CONFIG_ITCO_WDT is not set -# CONFIG_KERNEL_BZIP2 is not set -# CONFIG_KERNEL_GZIP is not set -CONFIG_KERNEL_LZMA=y -CONFIG_KEXEC=y -CONFIG_KMOD=y -CONFIG_KTIME_SCALAR=y -# CONFIG_KVM is not set -CONFIG_LBD=y -# CONFIG_LEDS_ALIX is not set -# CONFIG_LGUEST is not set -CONFIG_LSF=y -# CONFIG_M386 is not set -CONFIG_M486=y -# CONFIG_M586 is not set -# CONFIG_M586MMX is not set -# CONFIG_M586TSC is not set -# CONFIG_M686 is not set -# CONFIG_MACHZ_WDT is not set -# CONFIG_MACINTOSH_DRIVERS is not set -CONFIG_MATH_EMULATION=y -# CONFIG_MCA is not set -# CONFIG_MCORE2 is not set -# CONFIG_MCRUSOE is not set -# CONFIG_MCYRIXIII is not set -# CONFIG_MEFFICEON is not set -# CONFIG_MEMTEST is not set -# CONFIG_MFD_CORE is not set -# CONFIG_MFD_TMIO is not set -# CONFIG_MGEODEGX1 is not set -# CONFIG_MGEODE_LX is not set -# CONFIG_MICROCODE is not set -# CONFIG_MK6 is not set -# CONFIG_MK7 is not set -# CONFIG_MK8 is not set -CONFIG_MODULE_FORCE_UNLOAD=y -# CONFIG_MPENTIUM4 is not set -# CONFIG_MPENTIUMII is not set -# CONFIG_MPENTIUMIII is not set -# CONFIG_MPENTIUMM is not set -# CONFIG_MPSC is not set -CONFIG_MTD=y -# CONFIG_MTD_ABSENT is not set -CONFIG_MTD_BLKDEVS=y -CONFIG_MTD_BLOCK=y -# CONFIG_MTD_BLOCK2MTD is not set -CONFIG_MTD_CFI=y -# CONFIG_MTD_CFI_ADV_OPTIONS is not set -CONFIG_MTD_CFI_AMDSTD=y -CONFIG_MTD_CFI_I1=y -CONFIG_MTD_CFI_I2=y -# CONFIG_MTD_CFI_I4 is not set -# CONFIG_MTD_CFI_I8 is not set -# CONFIG_MTD_CFI_INTELEXT is not set -# CONFIG_MTD_CFI_STAA is not set -CONFIG_MTD_CFI_UTIL=y -CONFIG_MTD_CHAR=y -CONFIG_MTD_CMDLINE_PARTS=y -# CONFIG_MTD_COMPLEX_MAPPINGS is not set -CONFIG_MTD_CONCAT=y -CONFIG_MTD_GEN_PROBE=y -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_MAP_BANK_WIDTH_1=y -# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set -CONFIG_MTD_MAP_BANK_WIDTH_2=y -# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set -CONFIG_MTD_MAP_BANK_WIDTH_4=y -# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_NETSC520 is not set -# CONFIG_MTD_ONENAND is not set -CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_PHRAM is not set -# CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_PLATRAM is not set -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_RAM is not set -CONFIG_MTD_RDC3210=y -CONFIG_MTD_RDC3210_ALLOW_JFFS2=y -CONFIG_MTD_RDC3210_BUSWIDTH=2 -# CONFIG_MTD_RDC3210_FACTORY_PRESENT is not set -CONFIG_MTD_RDC3210_SIZE=0x400000 -# CONFIG_MTD_RDC3210_STATIC_MAP is not set -# CONFIG_MTD_REDBOOT_PARTS is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_SC520CDP is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_TS5500 is not set -# CONFIG_MTRR is not set -# CONFIG_MVIAC3_2 is not set -# CONFIG_MVIAC7 is not set -# CONFIG_MWINCHIP2 is not set -# CONFIG_MWINCHIP3D is not set -# CONFIG_MWINCHIPC6 is not set -# CONFIG_NATSEMI is not set -CONFIG_NOHIGHMEM=y -# CONFIG_NSC_GPIO is not set -CONFIG_NVRAM=y -# CONFIG_OLPC is not set -# CONFIG_OPTIMIZE_INLINING is not set -CONFIG_PAGEFLAGS_EXTENDED=y -CONFIG_PAGE_OFFSET=0xC0000000 -# CONFIG_PARAVIRT_GUEST is not set -# CONFIG_PC8736x_GPIO is not set -# CONFIG_PC87413_WDT is not set -CONFIG_PCI=y -# CONFIG_PCIEPORTBUS is not set -CONFIG_PCI_BIOS=y -CONFIG_PCI_DIRECT=y -CONFIG_PCI_DOMAINS=y -CONFIG_PCI_GOANY=y -# CONFIG_PCI_GOBIOS is not set -# CONFIG_PCI_GODIRECT is not set -# CONFIG_PCI_GOMMCONFIG is not set -# CONFIG_PCI_GOOLPC is not set -# CONFIG_PCSPKR_PLATFORM is not set -CONFIG_PHYLIB=y -CONFIG_PHYSICAL_ALIGN=0x100000 -CONFIG_PHYSICAL_START=0x100000 -# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set -# CONFIG_R6040 is not set -CONFIG_RDC321X_WDT=y -# CONFIG_RD_BZIP2 is not set -CONFIG_RD_GZIP=y -# CONFIG_RD_LZMA is not set -# CONFIG_RELOCATABLE is not set -# CONFIG_RTC is not set -# CONFIG_RWSEM_GENERIC_SPINLOCK is not set -CONFIG_RWSEM_XCHGADD_ALGORITHM=y -# CONFIG_SBC7240_WDT is not set -# CONFIG_SBC8360_WDT is not set -# CONFIG_SBC_EPX_C3_WATCHDOG is not set -# CONFIG_SC1200_WDT is not set -# CONFIG_SC520_WDT is not set -# CONFIG_SCHED_HRTICK is not set -CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y -# CONFIG_SCSI_DMA is not set -# CONFIG_SCx200 is not set -# CONFIG_SERIAL_8250_EXTENDED is not set -# CONFIG_SMP is not set -# CONFIG_SMSC37B787_WDT is not set -# CONFIG_SOFT_WATCHDOG is not set -CONFIG_SPARSEMEM_STATIC=y -# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set -CONFIG_SSB_POSSIBLE=y -# CONFIG_STRICT_DEVMEM is not set -# CONFIG_SYSPROF_TRACER is not set -CONFIG_SYSVIPC_SYSCTL=y -# CONFIG_TELCLOCK is not set -# CONFIG_TICK_ONESHOT is not set -# CONFIG_TOSHIBA is not set -CONFIG_UID16=y -CONFIG_USB_SUPPORT=y -# CONFIG_VGASTATE is not set -# CONFIG_VIA_RHINE is not set -# CONFIG_VIRTIO_BALLOON is not set -# CONFIG_VIRTIO_PCI is not set -CONFIG_VIRTUALIZATION=y -# CONFIG_VM86 is not set -# CONFIG_VMSPLIT_1G is not set -# CONFIG_VMSPLIT_2G is not set -# CONFIG_VMSPLIT_2G_OPT is not set -CONFIG_VMSPLIT_3G=y -# CONFIG_VMSPLIT_3G_OPT is not set -CONFIG_VM_EVENT_COUNTERS=y -# CONFIG_WAFER_WDT is not set -CONFIG_X86=y -CONFIG_X86_32=y -# CONFIG_X86_64 is not set -CONFIG_X86_ALIGNMENT_16=y -CONFIG_X86_BIOS_REBOOT=y -CONFIG_X86_BSWAP=y -CONFIG_X86_CMPXCHG=y -CONFIG_X86_CPU=y -CONFIG_X86_CPUID=y -# CONFIG_X86_ELAN is not set -CONFIG_X86_F00F_BUG=y -# CONFIG_X86_GENERIC is not set -# CONFIG_X86_GENERICARCH is not set -CONFIG_X86_INVLPG=y -CONFIG_X86_L1_CACHE_SHIFT=4 -# CONFIG_X86_MCE is not set -CONFIG_X86_MINIMUM_CPU_FAMILY=4 -CONFIG_X86_MSR=y -# CONFIG_X86_PAE is not set -CONFIG_X86_PC=y -CONFIG_X86_POPAD_OK=y -CONFIG_X86_PPRO_FENCE=y -CONFIG_X86_RDC321X=y -CONFIG_X86_REBOOTFIXUPS=y -CONFIG_X86_RESERVE_LOW_64K=y -# CONFIG_X86_UP_APIC is not set -CONFIG_X86_VERBOSE_BOOTUP=y -# CONFIG_X86_VOYAGER is not set -# CONFIG_X86_VSMP is not set -CONFIG_X86_WP_WORKS_OK=y -CONFIG_X86_XADD=y -# CONFIG_ZONE_DMA32 is not set diff --git a/target/linux/rdc/files-2.6.24/arch/i386/kernel/cpu/rdc.c b/target/linux/rdc/files-2.6.24/arch/i386/kernel/cpu/rdc.c deleted file mode 100644 index f4b9083..0000000 --- a/target/linux/rdc/files-2.6.24/arch/i386/kernel/cpu/rdc.c +++ /dev/null @@ -1,24 +0,0 @@ -#include <linux/init.h> -#include <linux/bitops.h> -#include <linux/mm.h> -#include <asm/io.h> -#include <asm/processor.h> - -#include "cpu.h" - -static struct cpu_dev rdc_cpu_dev __cpuinitdata = { - .c_vendor = "RDC", - .c_models = { - { .vendor = X86_VENDOR_RDC, .family = 4, .model_names = - { - [0] = "R861x(-G)", - } - }, - }, -}; - -int __init rdc_init_cpu(void) -{ - cpu_devs[X86_VENDOR_RDC] = &rdc_cpu_dev; - return 0; -} diff --git a/target/linux/rdc/files-2.6.24/arch/i386/mach-rdc/Makefile b/target/linux/rdc/files-2.6.24/arch/i386/mach-rdc/Makefile deleted file mode 100644 index 5961bc7..0000000 --- a/target/linux/rdc/files-2.6.24/arch/i386/mach-rdc/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -# -# Makefile for the RDC321x specific parts of the kernel -# -obj-$(CONFIG_X86_RDC) := gpio.o platform.o wdt.o - diff --git a/target/linux/rdc/files-2.6.24/arch/i386/mach-rdc/gpio.c b/target/linux/rdc/files-2.6.24/arch/i386/mach-rdc/gpio.c deleted file mode 100644 index dbd0327..0000000 --- a/target/linux/rdc/files-2.6.24/arch/i386/mach-rdc/gpio.c +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (C) 2007, OpenWrt.org, Florian Fainelli <florian@openwrt.org> - * RDC321x architecture specific GPIO support - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. - */ - -#include <linux/autoconf.h> -#include <linux/init.h> -#include <linux/io.h> -#include <linux/types.h> -#include <linux/module.h> -#include <linux/delay.h> - -#include <asm/mach-rdc/rdc321x_defs.h> - -static inline int rdc_gpio_is_valid(unsigned gpio) -{ - return (gpio <= RDC_MAX_GPIO); -} - -static unsigned int rdc_gpio_read(unsigned gpio) -{ - unsigned int val; - - val = 0x80000000 | (7 << 11) | ((gpio&0x20?0x84:0x48)); - outl(val, RDC3210_CFGREG_ADDR); - udelay(10); - val = inl(RDC3210_CFGREG_DATA); - val |= (0x1 << (gpio & 0x1F)); - outl(val, RDC3210_CFGREG_DATA); - udelay(10); - val = 0x80000000 | (7 << 11) | ((gpio&0x20?0x88:0x4C)); - outl(val, RDC3210_CFGREG_ADDR); - udelay(10); - val = inl(RDC3210_CFGREG_DATA); - - return val; -} - -static void rdc_gpio_write(unsigned int val) -{ - if (val) { - outl(val, RDC3210_CFGREG_DATA); - udelay(10); - } -} - -int rdc_gpio_get_value(unsigned gpio) -{ - if (rdc_gpio_is_valid(gpio)) - return (int)rdc_gpio_read(gpio); - else - return -EINVAL; -} -EXPORT_SYMBOL(rdc_gpio_get_value); - -void rdc_gpio_set_value(unsigned gpio, int value) -{ - unsigned int val; - - if (!rdc_gpio_is_valid(gpio)) - return; - - val = rdc_gpio_read(gpio); - - if (value) - val &= ~(0x1 << (gpio & 0x1F)); - else - val |= (0x1 << (gpio & 0x1F)); - - rdc_gpio_write(val); -} -EXPORT_SYMBOL(rdc_gpio_set_value); - -int rdc_gpio_direction_input(unsigned gpio) -{ - return 0; -} -EXPORT_SYMBOL(rdc_gpio_direction_input); - -int rdc_gpio_direction_output(unsigned gpio, int value) -{ - return 0; -} -EXPORT_SYMBOL(rdc_gpio_direction_output); - - diff --git a/target/linux/rdc/files-2.6.24/arch/i386/mach-rdc/platform.c b/target/linux/rdc/files-2.6.24/arch/i386/mach-rdc/platform.c deleted file mode 100644 index 86981f8..0000000 --- a/target/linux/rdc/files-2.6.24/arch/i386/mach-rdc/platform.c +++ /dev/null @@ -1,263 +0,0 @@ -/* - * - * Generic RDC321x platform devices - * - * Copyright (C) 2007-2008 OpenWrt.org - * Copyright (C) 2007 Florian Fainelli <florian@openwrt.org> - * Copyright (C) 2008 Daniel Gimpelevich <daniel@gimpelevich.san-francisco.ca.us> - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the - * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - */ - -#include <linux/init.h> -#include <linux/kernel.h> -#include <linux/list.h> -#include <linux/device.h> -#include <linux/platform_device.h> -#include <linux/version.h> -#include <linux/leds.h> -#include <linux/gpio_keys.h> -#include <linux/input.h> -#include <linux/mtd/map.h> -#include <linux/mtd/mtd.h> -#include <linux/mtd/physmap.h> -#include <linux/root_dev.h> -#include <asm/gpio.h> - -/* Flash */ -#ifdef CONFIG_MTD_RDC3210 -static struct resource rdc_flash_resource[] = { - [0] = { - .start = (u32)-CONFIG_MTD_RDC3210_SIZE, - .end = (u32)-1, - .flags = IORESOURCE_MEM, - }, -}; - -static struct platform_device rdc_flash_device = { - .name = "rdc321x-flash", - .id = -1, - .num_resources = ARRAY_SIZE(rdc_flash_resource), - .resource = rdc_flash_resource, -}; -#else -static struct mtd_partition rdc_flash_parts[15]; - -static struct resource rdc_flash_resource = { - .end = (u32)-1, - .flags = IORESOURCE_MEM, -}; - -static struct physmap_flash_data rdc_flash_data = { - .parts = rdc_flash_parts, -}; - -static struct platform_device rdc_flash_device = { - .name = "physmap-flash", - .id = -1, - .resource = &rdc_flash_resource, - .num_resources = 1, - .dev.platform_data = &rdc_flash_data, -}; -#endif - -/* LEDS */ -static struct gpio_led default_leds[] = { - { .name = "rdc321x:dmz", .gpio = 1, }, -}; - -static struct gpio_led_platform_data rdc321x_led_data = { - .num_leds = ARRAY_SIZE(default_leds), - .leds = default_leds, -}; - -static struct platform_device rdc321x_leds = { - .name = "leds-gpio", - .id = -1, - .dev = { - .platform_data = &rdc321x_led_data, - } -}; - -/* Watchdog */ -static struct platform_device rdc321x_wdt = { - .name = "rdc321x-wdt", - .id = -1, - .num_resources = 0, -}; - -/* Button */ -static struct gpio_keys_button rdc321x_gpio_btn[] = { - { - .gpio = 0, - .code = BTN_0, - .desc = "Reset", - .active_low = 1, - } -}; - -static struct gpio_keys_platform_data rdc321x_gpio_btn_data = { - .buttons = rdc321x_gpio_btn, - .nbuttons = ARRAY_SIZE(rdc321x_gpio_btn), -}; - -static struct platform_device rdc321x_button = { - .name = "gpio-keys", - .id = -1, - .dev = { - .platform_data = &rdc321x_gpio_btn_data, - } -}; - -static struct platform_device *rdc321x_devs[] = { - &rdc_flash_device, - &rdc321x_leds, - &rdc321x_wdt, - &rdc321x_button -}; - -static int probe_flash_start(struct map_info *the_map) -{ - struct mtd_info *res; - - the_map->virt = ioremap(the_map->phys, the_map->size); - if (the_map->virt == NULL) - return 1; - for (the_map->bankwidth = 32; the_map->bankwidth; the_map->bankwidth - >>= 1) { - res = do_map_probe("cfi_probe", the_map); - if (res == NULL) - res = do_map_probe("jedec_probe", the_map); - if (res != NULL) - break; - } - iounmap(the_map->virt); - if (res != NULL) - the_map->phys = (u32)-(s32)(the_map->size = res->size); - return res == NULL; -} - -static __init int rdc_board_setup(void) -{ -#ifndef CONFIG_MTD_RDC3210 - struct map_info rdc_map_info; - u32 the_header[4]; - - ROOT_DEV = 0; - rdc_map_info.name = rdc_flash_device.name; - rdc_map_info.phys = 0xff000000; - rdc_map_info.size = 0x1000000; - rdc_map_info.bankwidth = 2; - rdc_map_info.set_vpp = NULL; - simple_map_init(&rdc_map_info); - while (probe_flash_start(&rdc_map_info)) { - rdc_map_info.phys++; - if (--rdc_map_info.size) - panic("Not to be or to be: That" - " is not the question."); - } - rdc_flash_resource.start = rdc_map_info.phys; - rdc_flash_data.width = rdc_map_info.bankwidth; - rdc_map_info.virt = (u32)ioremap_nocache(rdc_map_info.phys, 0x10); - if (rdc_map_info.virt == NULL) - panic("Something's rotten in Denmark!"); - the_header[0] = ((u32 *)rdc_map_info.virt)[0]; - the_header[1] = ((u32 *)rdc_map_info.virt)[1]; - the_header[2] = ((u32 *)rdc_map_info.virt)[2]; - the_header[3] = ((u32 *)rdc_map_info.virt)[3]; - iounmap(rdc_map_info.virt); - if (!memcmp(the_header, "GMTK", 4)) { /* Gemtek */ - /* TODO */ - } else if (!memcmp(the_header, "CSYS", 4)) { /* Sitecom */ - /* TODO */ - } else if (!memcmp(((u8 *)the_header) + 14, "Li", 2)) { /* AMIT */ - rdc_flash_parts[0].name = "kernel_parthdr"; - rdc_flash_parts[0].offset = 0; - rdc_flash_parts[0].size = 0x10; - rdc_flash_parts[1].name = "kernel"; - rdc_flash_parts[1].offset = 0x10; - rdc_flash_parts[1].size = 0xffff0; - rdc_flash_parts[2].name = "rootfs_parthdr"; - rdc_flash_parts[2].offset = 0x100000; - rdc_flash_parts[2].size = 0x10; - rdc_flash_parts[3].name = "rootfs"; - rdc_flash_parts[3].offset = 0x100010; - rdc_flash_parts[3].size = rdc_map_info.size - 0x160010; - rdc_flash_parts[4].name = "config_parthdr"; - rdc_flash_parts[4].offset = rdc_map_info.size - 0x60000; - rdc_flash_parts[4].size = 0x10; - rdc_flash_parts[5].name = "config"; - rdc_flash_parts[5].offset = rdc_map_info.size - 0x5fff0; - rdc_flash_parts[5].size = 0xfff0; - rdc_flash_parts[6].name = "recoveryfs_parthdr"; - rdc_flash_parts[6].offset = rdc_map_info.size - 0x50000; - rdc_flash_parts[6].size = 0x10; - rdc_flash_parts[7].name = "recoveryfs"; - rdc_flash_parts[7].offset = rdc_map_info.size - 0x4fff0; - rdc_flash_parts[7].size = 0x3fff0; - rdc_flash_parts[8].name = "recovery_parthdr"; - rdc_flash_parts[8].offset = rdc_map_info.size - 0x10000; - rdc_flash_parts[8].size = 0x10; - rdc_flash_parts[9].name = "recovery"; - rdc_flash_parts[9].offset = rdc_map_info.size - 0xfff0; - rdc_flash_parts[9].size = 0x7ff0; - rdc_flash_parts[10].name = "productinfo_parthdr"; - rdc_flash_parts[10].offset = rdc_map_info.size - 0x8000; - rdc_flash_parts[10].size = 0x10; - rdc_flash_parts[11].name = "productinfo"; - rdc_flash_parts[11].offset = rdc_map_info.size - 0x7ff0; - rdc_flash_parts[11].size = 0x1ff0; - rdc_flash_parts[12].name = "bootloader_parthdr"; - rdc_flash_parts[12].offset = rdc_map_info.size - 0x6000; - rdc_flash_parts[12].size = 0x10; - rdc_flash_parts[13].name = "bootloader"; - rdc_flash_parts[13].offset = rdc_map_info.size - 0x5ff0; - rdc_flash_parts[13].size = 0x5ff0; - rdc_flash_parts[14].name = "everything"; - rdc_flash_parts[14].offset = 0; - rdc_flash_parts[14].size = rdc_map_info.size; - rdc_flash_data.nr_parts = 15; - } else { /* ZyXEL */ - rdc_flash_parts[0].name = "kernel"; - rdc_flash_parts[0].offset = 0; - rdc_flash_parts[0].size = 0x100000; - rdc_flash_parts[1].name = "rootfs"; - rdc_flash_parts[1].offset = 0x100000; - rdc_flash_parts[1].size = rdc_map_info.size - 0x140000; - rdc_flash_parts[2].name = "linux"; - rdc_flash_parts[2].offset = 0; - rdc_flash_parts[2].size = rdc_map_info.size - 0x40000; - rdc_flash_parts[3].name = "config"; - rdc_flash_parts[3].offset = rdc_map_info.size - 0x40000; - rdc_flash_parts[3].size = 0x10000; - rdc_flash_parts[4].name = "productinfo"; - rdc_flash_parts[4].offset = rdc_map_info.size - 0x30000; - rdc_flash_parts[4].size = 0x10000; - rdc_flash_parts[5].name = "bootloader"; - rdc_flash_parts[5].offset = rdc_map_info.size - 0x20000; - rdc_flash_parts[5].size = 0x20000; - rdc_flash_data.nr_parts = 6; - } -#endif - return platform_add_devices(rdc321x_devs, ARRAY_SIZE(rdc321x_devs)); -} - -#ifdef CONFIG_MTD_RDC3210 -arch_initcall(rdc_board_setup); -#else -late_initcall(rdc_board_setup); -#endif diff --git a/target/linux/rdc/files-2.6.24/arch/i386/mach-rdc/setup.c b/target/linux/rdc/files-2.6.24/arch/i386/mach-rdc/setup.c deleted file mode 100644 index ad206c3..0000000 --- a/target/linux/rdc/files-2.6.24/arch/i386/mach-rdc/setup.c +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Machine specific setup for generic - */ - -#include <linux/init.h> -#include <linux/interrupt.h> -#include <asm/arch_hooks.h> -#include <asm/io.h> -#include <asm/setup.h> - -char * __init machine_specific_memory_setup(void) -{ - return "RDC R-321x"; -} diff --git a/target/linux/rdc/files-2.6.24/arch/i386/mach-rdc/wdt.c b/target/linux/rdc/files-2.6.24/arch/i386/mach-rdc/wdt.c deleted file mode 100644 index 13b69f6..0000000 --- a/target/linux/rdc/files-2.6.24/arch/i386/mach-rdc/wdt.c +++ /dev/null @@ -1,272 +0,0 @@ -/* - * RDC321x watchdog driver - * - * Copyright (C) 2007 Florian Fainelli <florian@openwrt.org> - * - * This driver is highly inspired from the cpu5_wdt driver - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -#include <linux/module.h> -#include <linux/moduleparam.h> -#include <linux/types.h> -#include <linux/errno.h> -#include <linux/miscdevice.h> -#include <linux/fs.h> -#include <linux/init.h> -#include <linux/ioport.h> -#include <linux/timer.h> -#include <linux/completion.h> -#include <linux/jiffies.h> -#include <linux/platform_device.h> -#include <linux/watchdog.h> - -#include <asm/io.h> -#include <asm/uaccess.h> - -#include <asm/mach-rdc/rdc321x_defs.h> - -#define RDC_WDT_MASK 0x80000000 /* Mask */ -#define RDC_WDT_EN 0x00800000 /* Enable bit */ -#define RDC_WDT_WTI 0x00200000 /* Generate a CPU reset/NMI/WDT irq when WDT timeout is reached */ -#define RDC_WDT_RST 0x00100000 /* Reset bit */ -#define RDC_WDT_WIF 0x00040000 /* WDT IRQ Flag */ -#define RDC_WDT_IRT 0x00000100 /* IRQ Routing table */ -#define RDC_WDT_CNT 0x00000001 /* WDT count */ - -#define RDC_CLS_TMR 0x80003844 /* Clear timer */ - -#define RDC_WDT_INTERVAL (HZ/10+1) - -int nowayout = WATCHDOG_NOWAYOUT; -module_param(nowayout, int, 0); -MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=" __MODULE_STRING(WATCHDOG_NOWAYOUT) ")"); - -static int ticks = 1000; - -/* some device data */ - -static struct { - struct completion stop; - volatile int running; - struct timer_list timer; - volatile int queue; - int default_ticks; - unsigned long inuse; -} rdc321x_wdt_device; - -/* generic helper functions */ - -static void rdc321x_wdt_trigger(unsigned long unused) -{ - if( rdc321x_wdt_device.running ) - ticks--; - - /* keep watchdog alive */ - outl(RDC_WDT_EN|inl(RDC3210_CFGREG_DATA), RDC3210_CFGREG_DATA); - - /* requeue?? */ - if (rdc321x_wdt_device.queue && ticks) - mod_timer(&rdc321x_wdt_device.timer, jiffies + RDC_WDT_INTERVAL); - else { - /* ticks doesn't matter anyway */ - complete(&rdc321x_wdt_device.stop); - } - -} - -static void rdc321x_wdt_reset(void) -{ - ticks = rdc321x_wdt_device.default_ticks; -} - -static void rdc321x_wdt_start(void) -{ - if (!rdc321x_wdt_device.queue) { - rdc321x_wdt_device.queue = 1; - - /* Clear the timer */ - outl(RDC_CLS_TMR, RDC3210_CFGREG_ADDR); - - /* Enable watchdog and set the timeout to 81.92 us */ - outl(RDC_WDT_EN|RDC_WDT_CNT, RDC3210_CFGREG_DATA); - - mod_timer(&rdc321x_wdt_device.timer, jiffies + RDC_WDT_INTERVAL); - } - - /* if process dies, counter is not decremented */ - rdc321x_wdt_device.running++; -} - -static int rdc321x_wdt_stop(void) -{ - if (rdc321x_wdt_device.running) - rdc321x_wdt_device.running = 0; - - ticks = rdc321x_wdt_device.default_ticks; - - return -EIO; -} - -/* filesystem operations */ - -static int rdc321x_wdt_open(struct inode *inode, struct file *file) -{ - if (test_and_set_bit(0, &rdc321x_wdt_device.inuse)) - return -EBUSY; - - return nonseekable_open(inode, file); -} - -static int rdc321x_wdt_release(struct inode *inode, struct file *file) -{ - clear_bit(0, &rdc321x_wdt_device.inuse); - return 0; -} - -static int rdc321x_wdt_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) -{ - void __user *argp = (void __user *)arg; - unsigned int value; - static struct watchdog_info ident = - { - .options = WDIOF_CARDRESET, - .identity = "RDC321x WDT", - }; - - switch(cmd) { - case WDIOC_KEEPALIVE: - rdc321x_wdt_reset(); - break; - case WDIOC_GETSTATUS: - /* Read the value from the DATA register */ - value = inl(RDC3210_CFGREG_DATA); - if ( copy_to_user(argp, &value, sizeof(int)) ) - return -EFAULT; - break; - case WDIOC_GETSUPPORT: - if ( copy_to_user(argp, &ident, sizeof(ident)) ) - return -EFAULT; - break; - case WDIOC_SETOPTIONS: - if ( copy_from_user(&value, argp, sizeof(int)) ) - return -EFAULT; - switch(value) { - case WDIOS_ENABLECARD: - rdc321x_wdt_start(); - break; - case WDIOS_DISABLECARD: - return rdc321x_wdt_stop(); - default: - return -EINVAL; - } - break; - default: - return -ENOTTY; - } - return 0; -} - -static ssize_t rdc321x_wdt_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos) -{ - if ( !count ) - return -EIO; - - rdc321x_wdt_reset(); - - return count; -} - -static const struct file_operations rdc321x_wdt_fops = { - .owner = THIS_MODULE, - .llseek = no_llseek, - .ioctl = rdc321x_wdt_ioctl, - .open = rdc321x_wdt_open, - .write = rdc321x_wdt_write, - .release = rdc321x_wdt_release, -}; - -static struct miscdevice rdc321x_wdt_misc = { - .minor = WATCHDOG_MINOR, - .name = "watchdog", - .fops = &rdc321x_wdt_fops, -}; - -static int __devinit rdc321x_wdt_probe(struct platform_device *pdev) -{ - int err; - - if ( (err = misc_register(&rdc321x_wdt_misc)) < 0 ) { - printk(KERN_ERR PFX "misc_register failed\n"); - return err; - } - - /* Reset the watchdog */ - outl(RDC_WDT_RST, RDC3210_CFGREG_DATA); - - init_completion(&rdc321x_wdt_device.stop); - rdc321x_wdt_device.queue = 0; - - clear_bit(0, &rdc321x_wdt_device.inuse); - - setup_timer(&rdc321x_wdt_device.timer, rdc321x_wdt_trigger, 0); - - rdc321x_wdt_device.default_ticks = ticks; - - printk(KERN_INFO PFX "init success\n"); - - return 0; -} - -static int rdc321x_wdt_remove(struct platform_device *pdev) -{ - if (rdc321x_wdt_device.queue) { - rdc321x_wdt_device.queue = 0; - wait_for_completion(&rdc321x_wdt_device.stop); - } - - misc_deregister(&rdc321x_wdt_misc); - - return 0; -} - -static struct platform_driver rdc321x_wdt_driver = { - .probe = rdc321x_wdt_probe, - .remove = rdc321x_wdt_remove, - .driver = { - .owner = THIS_MODULE, - .name = "rdc321x-wdt", - }, -}; - -static int __init rdc321x_wdt_init(void) -{ - return platform_driver_register(&rdc321x_wdt_driver); -} - -static void __exit rdc321x_wdt_exit(void) -{ - platform_driver_unregister(&rdc321x_wdt_driver); -} - -module_init(rdc321x_wdt_init); -module_exit(rdc321x_wdt_exit); - -MODULE_AUTHOR("Florian Fainelli <florian@openwrt.org>"); -MODULE_DESCRIPTION("RDC321x watchdog driver"); -MODULE_LICENSE("GPL"); -MODULE_ALIAS_MISCDEV(WATCHDOG_MINOR); diff --git a/target/linux/rdc/files-2.6.24/arch/x86/boot/compressed/LzmaDecode.c b/target/linux/rdc/files-2.6.24/arch/x86/boot/compressed/LzmaDecode.c deleted file mode 100644 index a17d6ca..0000000 --- a/target/linux/rdc/files-2.6.24/arch/x86/boot/compressed/LzmaDecode.c +++ /dev/null @@ -1,586 +0,0 @@ -/* - LzmaDecode.c - LZMA Decoder (optimized for Speed version) - - LZMA SDK 4.17 Copyright (c) 1999-2005 Igor Pavlov (2005-04-05) - http://www.7-zip.org/ - - LZMA SDK is licensed under two licenses: - 1) GNU Lesser General Public License (GNU LGPL) - 2) Common Public License (CPL) - It means that you can select one of these two licenses and - follow rules of that license. - - SPECIAL EXCEPTION: - Igor Pavlov, as the author of this Code, expressly permits you to - statically or dynamically link your Code (or bind by name) to the - interfaces of this file without subjecting your linked Code to the - terms of the CPL or GNU LGPL. Any modifications or additions - to this file, however, are subject to the LGPL or CPL terms. -*/ - -#include "LzmaDecode.h" - -#ifndef Byte -#define Byte unsigned char -#endif - -#define kNumTopBits 24 -#define kTopValue ((UInt32)1 << kNumTopBits) - -#define kNumBitModelTotalBits 11 -#define kBitModelTotal (1 << kNumBitModelTotalBits) -#define kNumMoveBits 5 - -#define RC_READ_BYTE (*Buffer++) - -#define RC_INIT2 Code = 0; Range = 0xFFFFFFFF; \ - { int i; for(i = 0; i < 5; i++) { RC_TEST; Code = (Code << 8) | RC_READ_BYTE; }} - -#ifdef _LZMA_IN_CB - -#define RC_TEST { if (Buffer == BufferLim) \ - { UInt32 size; int result = InCallback->Read(InCallback, &Buffer, &size); if (result != LZMA_RESULT_OK) return result; \ - BufferLim = Buffer + size; if (size == 0) return LZMA_RESULT_DATA_ERROR; }} - -#define RC_INIT Buffer = BufferLim = 0; RC_INIT2 - -#else - -#define RC_TEST { if (Buffer == BufferLim) return LZMA_RESULT_DATA_ERROR; } - -#define RC_INIT(buffer, bufferSize) Buffer = buffer; BufferLim = buffer + bufferSize; RC_INIT2 - -#endif - -#define RC_NORMALIZE if (Range < kTopValue) { RC_TEST; Range <<= 8; Code = (Code << 8) | RC_READ_BYTE; } - -#define IfBit0(p) RC_NORMALIZE; bound = (Range >> kNumBitModelTotalBits) * *(p); if (Code < bound) -#define UpdateBit0(p) Range = bound; *(p) += (kBitModelTotal - *(p)) >> kNumMoveBits; -#define UpdateBit1(p) Range -= bound; Code -= bound; *(p) -= (*(p)) >> kNumMoveBits; - -#define RC_GET_BIT2(p, mi, A0, A1) IfBit0(p) \ - { UpdateBit0(p); mi <<= 1; A0; } else \ - { UpdateBit1(p); mi = (mi + mi) + 1; A1; } - -#define RC_GET_BIT(p, mi) RC_GET_BIT2(p, mi, ; , ;) - -#define RangeDecoderBitTreeDecode(probs, numLevels, res) \ - { int i = numLevels; res = 1; \ - do { CProb *p = probs + res; RC_GET_BIT(p, res) } while(--i != 0); \ - res -= (1 << numLevels); } - - -#define kNumPosBitsMax 4 -#define kNumPosStatesMax (1 << kNumPosBitsMax) - -#define kLenNumLowBits 3 -#define kLenNumLowSymbols (1 << kLenNumLowBits) -#define kLenNumMidBits 3 -#define kLenNumMidSymbols (1 << kLenNumMidBits) -#define kLenNumHighBits 8 -#define kLenNumHighSymbols (1 << kLenNumHighBits) - -#define LenChoice 0 -#define LenChoice2 (LenChoice + 1) -#define LenLow (LenChoice2 + 1) -#define LenMid (LenLow + (kNumPosStatesMax << kLenNumLowBits)) -#define LenHigh (LenMid + (kNumPosStatesMax << kLenNumMidBits)) -#define kNumLenProbs (LenHigh + kLenNumHighSymbols) - - -#define kNumStates 12 -#define kNumLitStates 7 - -#define kStartPosModelIndex 4 -#define kEndPosModelIndex 14 -#define kNumFullDistances (1 << (kEndPosModelIndex >> 1)) - -#define kNumPosSlotBits 6 -#define kNumLenToPosStates 4 - -#define kNumAlignBits 4 -#define kAlignTableSize (1 << kNumAlignBits) - -#define kMatchMinLen 2 - -#define IsMatch 0 -#define IsRep (IsMatch + (kNumStates << kNumPosBitsMax)) -#define IsRepG0 (IsRep + kNumStates) -#define IsRepG1 (IsRepG0 + kNumStates) -#define IsRepG2 (IsRepG1 + kNumStates) -#define IsRep0Long (IsRepG2 + kNumStates) -#define PosSlot (IsRep0Long + (kNumStates << kNumPosBitsMax)) -#define SpecPos (PosSlot + (kNumLenToPosStates << kNumPosSlotBits)) -#define Align (SpecPos + kNumFullDistances - kEndPosModelIndex) -#define LenCoder (Align + kAlignTableSize) -#define RepLenCoder (LenCoder + kNumLenProbs) -#define Literal (RepLenCoder + kNumLenProbs) - -#if Literal != LZMA_BASE_SIZE -StopCompilingDueBUG -#endif - -#ifdef _LZMA_OUT_READ - -typedef struct _LzmaVarState -{ - Byte *Buffer; - Byte *BufferLim; - UInt32 Range; - UInt32 Code; - #ifdef _LZMA_IN_CB - ILzmaInCallback *InCallback; - #endif - Byte *Dictionary; - UInt32 DictionarySize; - UInt32 DictionaryPos; - UInt32 GlobalPos; - UInt32 Reps[4]; - int lc; - int lp; - int pb; - int State; - int RemainLen; - Byte TempDictionary[4]; -} LzmaVarState; - -int LzmaDecoderInit( - unsigned char *buffer, UInt32 bufferSize, - int lc, int lp, int pb, - unsigned char *dictionary, UInt32 dictionarySize, - #ifdef _LZMA_IN_CB - ILzmaInCallback *InCallback - #else - unsigned char *inStream, UInt32 inSize - #endif - ) -{ - Byte *Buffer; - Byte *BufferLim; - UInt32 Range; - UInt32 Code; - LzmaVarState *vs = (LzmaVarState *)buffer; - CProb *p = (CProb *)(buffer + sizeof(LzmaVarState)); - UInt32 numProbs = Literal + ((UInt32)LZMA_LIT_SIZE << (lc + lp)); - UInt32 i; - if (bufferSize < numProbs * sizeof(CProb) + sizeof(LzmaVarState)) - return LZMA_RESULT_NOT_ENOUGH_MEM; - vs->Dictionary = dictionary; - vs->DictionarySize = dictionarySize; - vs->DictionaryPos = 0; - vs->GlobalPos = 0; - vs->Reps[0] = vs->Reps[1] = vs->Reps[2] = vs->Reps[3] = 1; - vs->lc = lc; - vs->lp = lp; - vs->pb = pb; - vs->State = 0; - vs->RemainLen = 0; - dictionary[dictionarySize - 1] = 0; - for (i = 0; i < numProbs; i++) - p[i] = kBitModelTotal >> 1; - - #ifdef _LZMA_IN_CB - RC_INIT; - #else - RC_INIT(inStream, inSize); - #endif - vs->Buffer = Buffer; - vs->BufferLim = BufferLim; - vs->Range = Range; - vs->Code = Code; - #ifdef _LZMA_IN_CB - vs->InCallback = InCallback; - #endif - - return LZMA_RESULT_OK; -} - -int LzmaDecode(unsigned char *buffer, - unsigned char *outStream, UInt32 outSize, - UInt32 *outSizeProcessed) -{ - LzmaVarState *vs = (LzmaVarState *)buffer; - Byte *Buffer = vs->Buffer; - Byte *BufferLim = vs->BufferLim; - UInt32 Range = vs->Range; - UInt32 Code = vs->Code; - #ifdef _LZMA_IN_CB - ILzmaInCallback *InCallback = vs->InCallback; - #endif - CProb *p = (CProb *)(buffer + sizeof(LzmaVarState)); - int state = vs->State; - Byte previousByte; - UInt32 rep0 = vs->Reps[0], rep1 = vs->Reps[1], rep2 = vs->Reps[2], rep3 = vs->Reps[3]; - UInt32 nowPos = 0; - UInt32 posStateMask = (1 << (vs->pb)) - 1; - UInt32 literalPosMask = (1 << (vs->lp)) - 1; - int lc = vs->lc; - int len = vs->RemainLen; - UInt32 globalPos = vs->GlobalPos; - - Byte *dictionary = vs->Dictionary; - UInt32 dictionarySize = vs->DictionarySize; - UInt32 dictionaryPos = vs->DictionaryPos; - - Byte tempDictionary[4]; - if (dictionarySize == 0) - { - dictionary = tempDictionary; - dictionarySize = 1; - tempDictionary[0] = vs->TempDictionary[0]; - } - - if (len == -1) - { - *outSizeProcessed = 0; - return LZMA_RESULT_OK; - } - - while(len != 0 && nowPos < outSize) - { - UInt32 pos = dictionaryPos - rep0; - if (pos >= dictionarySize) - pos += dictionarySize; - outStream[nowPos++] = dictionary[dictionaryPos] = dictionary[pos]; - if (++dictionaryPos == dictionarySize) - dictionaryPos = 0; - len--; - } - if (dictionaryPos == 0) - previousByte = dictionary[dictionarySize - 1]; - else - previousByte = dictionary[dictionaryPos - 1]; -#else - -int LzmaDecode( - Byte *buffer, UInt32 bufferSize, - int lc, int lp, int pb, - #ifdef _LZMA_IN_CB - ILzmaInCallback *InCallback, - #else - unsigned char *inStream, UInt32 inSize, - #endif - unsigned char *outStream, UInt32 outSize, - UInt32 *outSizeProcessed) -{ - UInt32 numProbs = Literal + ((UInt32)LZMA_LIT_SIZE << (lc + lp)); - CProb *p = (CProb *)buffer; - - UInt32 i; - int state = 0; - Byte previousByte = 0; - UInt32 rep0 = 1, rep1 = 1, rep2 = 1, rep3 = 1; - UInt32 nowPos = 0; - UInt32 posStateMask = (1 << pb) - 1; - UInt32 literalPosMask = (1 << lp) - 1; - int len = 0; - - Byte *Buffer; - Byte *BufferLim; - UInt32 Range; - UInt32 Code; - - if (bufferSize < numProbs * sizeof(CProb)) - return LZMA_RESULT_NOT_ENOUGH_MEM; - for (i = 0; i < numProbs; i++) - p[i] = kBitModelTotal >> 1; - - - #ifdef _LZMA_IN_CB - RC_INIT; - #else - RC_INIT(inStream, inSize); - #endif -#endif - - *outSizeProcessed = 0; - while(nowPos < outSize) - { - CProb *prob; - UInt32 bound; - int posState = (int)( - (nowPos - #ifdef _LZMA_OUT_READ - + globalPos - #endif - ) - & posStateMask); - - prob = p + IsMatch + (state << kNumPosBitsMax) + posState; - IfBit0(prob) - { - int symbol = 1; - UpdateBit0(prob) - prob = p + Literal + (LZMA_LIT_SIZE * - ((( - (nowPos - #ifdef _LZMA_OUT_READ - + globalPos - #endif - ) - & literalPosMask) << lc) + (previousByte >> (8 - lc)))); - - if (state >= kNumLitStates) - { - int matchByte; - #ifdef _LZMA_OUT_READ - UInt32 pos = dictionaryPos - rep0; - if (pos >= dictionarySize) - pos += dictionarySize; - matchByte = dictionary[pos]; - #else - matchByte = outStream[nowPos - rep0]; - #endif - do - { - int bit; - CProb *probLit; - matchByte <<= 1; - bit = (matchByte & 0x100); - probLit = prob + 0x100 + bit + symbol; - RC_GET_BIT2(probLit, symbol, if (bit != 0) break, if (bit == 0) break) - } - while (symbol < 0x100); - } - while (symbol < 0x100) - { - CProb *probLit = prob + symbol; - RC_GET_BIT(probLit, symbol) - } - previousByte = (Byte)symbol; - - outStream[nowPos++] = previousByte; - #ifdef _LZMA_OUT_READ - dictionary[dictionaryPos] = previousByte; - if (++dictionaryPos == dictionarySize) - dictionaryPos = 0; - #endif - if (state < 4) state = 0; - else if (state < 10) state -= 3; - else state -= 6; - } - else - { - UpdateBit1(prob); - prob = p + IsRep + state; - IfBit0(prob) - { - UpdateBit0(prob); - rep3 = rep2; - rep2 = rep1; - rep1 = rep0; - state = state < kNumLitStates ? 0 : 3; - prob = p + LenCoder; - } - else - { - UpdateBit1(prob); - prob = p + IsRepG0 + state; - IfBit0(prob) - { - UpdateBit0(prob); - prob = p + IsRep0Long + (state << kNumPosBitsMax) + posState; - IfBit0(prob) - { - #ifdef _LZMA_OUT_READ - UInt32 pos; - #endif - UpdateBit0(prob); - if (nowPos - #ifdef _LZMA_OUT_READ - + globalPos - #endif - == 0) - return LZMA_RESULT_DATA_ERROR; - state = state < kNumLitStates ? 9 : 11; - #ifdef _LZMA_OUT_READ - pos = dictionaryPos - rep0; - if (pos >= dictionarySize) - pos += dictionarySize; - previousByte = dictionary[pos]; - dictionary[dictionaryPos] = previousByte; - if (++dictionaryPos == dictionarySize) - dictionaryPos = 0; - #else - previousByte = outStream[nowPos - rep0]; - #endif - outStream[nowPos++] = previousByte; - continue; - } - else - { - UpdateBit1(prob); - } - } - else - { - UInt32 distance; - UpdateBit1(prob); - prob = p + IsRepG1 + state; - IfBit0(prob) - { - UpdateBit0(prob); - distance = rep1; - } - else - { - UpdateBit1(prob); - prob = p + IsRepG2 + state; - IfBit0(prob) - { - UpdateBit0(prob); - distance = rep2; - } - else - { - UpdateBit1(prob); - distance = rep3; - rep3 = rep2; - } - rep2 = rep1; - } - rep1 = rep0; - rep0 = distance; - } - state = state < kNumLitStates ? 8 : 11; - prob = p + RepLenCoder; - } - { - int numBits, offset; - CProb *probLen = prob + LenChoice; - IfBit0(probLen) - { - UpdateBit0(probLen); - probLen = prob + LenLow + (posState << kLenNumLowBits); - offset = 0; - numBits = kLenNumLowBits; - } - else - { - UpdateBit1(probLen); - probLen = prob + LenChoice2; - IfBit0(probLen) - { - UpdateBit0(probLen); - probLen = prob + LenMid + (posState << kLenNumMidBits); - offset = kLenNumLowSymbols; - numBits = kLenNumMidBits; - } - else - { - UpdateBit1(probLen); - probLen = prob + LenHigh; - offset = kLenNumLowSymbols + kLenNumMidSymbols; - numBits = kLenNumHighBits; - } - } - RangeDecoderBitTreeDecode(probLen, numBits, len); - len += offset; - } - - if (state < 4) - { - int posSlot; - state += kNumLitStates; - prob = p + PosSlot + - ((len < kNumLenToPosStates ? len : kNumLenToPosStates - 1) << - kNumPosSlotBits); - RangeDecoderBitTreeDecode(prob, kNumPosSlotBits, posSlot); - if (posSlot >= kStartPosModelIndex) - { - int numDirectBits = ((posSlot >> 1) - 1); - rep0 = (2 | ((UInt32)posSlot & 1)); - if (posSlot < kEndPosModelIndex) - { - rep0 <<= numDirectBits; - prob = p + SpecPos + rep0 - posSlot - 1; - } - else - { - numDirectBits -= kNumAlignBits; - do - { - RC_NORMALIZE - Range >>= 1; - rep0 <<= 1; - if (Code >= Range) - { - Code -= Range; - rep0 |= 1; - } - } - while (--numDirectBits != 0); - prob = p + Align; - rep0 <<= kNumAlignBits; - numDirectBits = kNumAlignBits; - } - { - int i = 1; - int mi = 1; - do - { - CProb *prob3 = prob + mi; - RC_GET_BIT2(prob3, mi, ; , rep0 |= i); - i <<= 1; - } - while(--numDirectBits != 0); - } - } - else - rep0 = posSlot; - if (++rep0 == (UInt32)(0)) - { - /* it's for stream version */ - len = -1; - break; - } - } - - len += kMatchMinLen; - if (rep0 > nowPos - #ifdef _LZMA_OUT_READ - + globalPos || rep0 > dictionarySize - #endif - ) - return LZMA_RESULT_DATA_ERROR; - do - { - #ifdef _LZMA_OUT_READ - UInt32 pos = dictionaryPos - rep0; - if (pos >= dictionarySize) - pos += dictionarySize; - previousByte = dictionary[pos]; - dictionary[dictionaryPos] = previousByte; - if (++dictionaryPos == dictionarySize) - dictionaryPos = 0; - #else - previousByte = outStream[nowPos - rep0]; - #endif - len--; - outStream[nowPos++] = previousByte; - } - while(len != 0 && nowPos < outSize); - } - } - RC_NORMALIZE; - - #ifdef _LZMA_OUT_READ - vs->Buffer = Buffer; - vs->BufferLim = BufferLim; - vs->Range = Range; - vs->Code = Code; - vs->DictionaryPos = dictionaryPos; - vs->GlobalPos = globalPos + nowPos; - vs->Reps[0] = rep0; - vs->Reps[1] = rep1; - vs->Reps[2] = rep2; - vs->Reps[3] = rep3; - vs->State = state; - vs->RemainLen = len; - vs->TempDictionary[0] = tempDictionary[0]; - #endif - - *outSizeProcessed = nowPos; - return LZMA_RESULT_OK; -} diff --git a/target/linux/rdc/files-2.6.24/arch/x86/boot/compressed/LzmaDecode.h b/target/linux/rdc/files-2.6.24/arch/x86/boot/compressed/LzmaDecode.h deleted file mode 100644 index 5367735..0000000 --- a/target/linux/rdc/files-2.6.24/arch/x86/boot/compressed/LzmaDecode.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - LzmaDecode.h - LZMA Decoder interface - - LZMA SDK 4.16 Copyright (c) 1999-2005 Igor Pavlov (2005-03-18) - http://www.7-zip.org/ - - LZMA SDK is licensed under two licenses: - 1) GNU Lesser General Public License (GNU LGPL) - 2) Common Public License (CPL) - It means that you can select one of these two licenses and - follow rules of that license. - - SPECIAL EXCEPTION: - Igor Pavlov, as the author of this code, expressly permits you to - statically or dynamically link your code (or bind by name) to the - interfaces of this file without subjecting your linked code to the - terms of the CPL or GNU LGPL. Any modifications or additions - to this file, however, are subject to the LGPL or CPL terms. -*/ - -#ifndef __LZMADECODE_H -#define __LZMADECODE_H - -/* #define _LZMA_IN_CB */ -/* Use callback for input data */ - -/* #define _LZMA_OUT_READ */ -/* Use read function for output data */ - -/* #define _LZMA_PROB32 */ -/* It can increase speed on some 32-bit CPUs, - but memory usage will be doubled in that case */ - -/* #define _LZMA_LOC_OPT */ -/* Enable local speed optimizations inside code */ - -#ifndef UInt32 -#ifdef _LZMA_UINT32_IS_ULONG -#define UInt32 unsigned long -#else -#define UInt32 unsigned int -#endif -#endif - -#ifdef _LZMA_PROB32 -#define CProb UInt32 -#else -#define CProb unsigned short -#endif - -#define LZMA_RESULT_OK 0 -#define LZMA_RESULT_DATA_ERROR 1 -#define LZMA_RESULT_NOT_ENOUGH_MEM 2 - -#ifdef _LZMA_IN_CB -typedef struct _ILzmaInCallback -{ - int (*Read)(void *object, unsigned char **buffer, UInt32 *bufferSize); -} ILzmaInCallback; -#endif - -#define LZMA_BASE_SIZE 1846 -#define LZMA_LIT_SIZE 768 - -/* -bufferSize = (LZMA_BASE_SIZE + (LZMA_LIT_SIZE << (lc + lp)))* sizeof(CProb) -bufferSize += 100 in case of _LZMA_OUT_READ -by default CProb is unsigned short, -but if specify _LZMA_PROB_32, CProb will be UInt32(unsigned int) -*/ - -#ifdef _LZMA_OUT_READ -int LzmaDecoderInit( - unsigned char *buffer, UInt32 bufferSize, - int lc, int lp, int pb, - unsigned char *dictionary, UInt32 dictionarySize, - #ifdef _LZMA_IN_CB - ILzmaInCallback *inCallback - #else - unsigned char *inStream, UInt32 inSize - #endif -); -#endif - -int LzmaDecode( - unsigned char *buffer, - #ifndef _LZMA_OUT_READ - UInt32 bufferSize, - int lc, int lp, int pb, - #ifdef _LZMA_IN_CB - ILzmaInCallback *inCallback, - #else - unsigned char *inStream, UInt32 inSize, - #endif - #endif - unsigned char *outStream, UInt32 outSize, - UInt32 *outSizeProcessed); - -#endif diff --git a/target/linux/rdc/files-2.6.24/arch/x86/boot/compressed/lzma_misc.c b/target/linux/rdc/files-2.6.24/arch/x86/boot/compressed/lzma_misc.c deleted file mode 100644 index bd74cb7..0000000 --- a/target/linux/rdc/files-2.6.24/arch/x86/boot/compressed/lzma_misc.c +++ /dev/null @@ -1,345 +0,0 @@ -/* - * lzma_misc.c - * - * malloc by Hannu Savolainen 1993 and Matthias Urlichs 1994 - * puts by Nick Holloway 1993, better puts by Martin Mares 1995 - * High loaded stuff by Hans Lermen & Werner Almesberger, Feb. 1996 - * - * Decompress LZMA compressed vmlinuz - * Version 0.9 Copyright (c) Ming-Ching Tiew mctiew@yahoo.com - * Program adapted from misc.c for 2.6 kernel - * Forward ported to latest 2.6 version of misc.c by - * Felix Fietkau <nbd@openwrt.org> - */ - -#undef CONFIG_PARAVIRT -#include <linux/linkage.h> -#include <linux/vmalloc.h> -#include <linux/screen_info.h> -#include <linux/console.h> -#include <linux/string.h> -#include <asm/io.h> -#include <asm/page.h> -#include <asm/boot.h> - -/* WARNING!! - * This code is compiled with -fPIC and it is relocated dynamically - * at run time, but no relocation processing is performed. - * This means that it is not safe to place pointers in static structures. - */ - -/* - * Getting to provable safe in place decompression is hard. - * Worst case behaviours need to be analized. - * Background information: - * - * The file layout is: - * magic[2] - * method[1] - * flags[1] - * timestamp[4] - * extraflags[1] - * os[1] - * compressed data blocks[N] - * crc[4] orig_len[4] - * - * resulting in 18 bytes of non compressed data overhead. - * - * Files divided into blocks - * 1 bit (last block flag) - * 2 bits (block type) - * - * 1 block occurs every 32K -1 bytes or when there 50% compression has been achieved. - * The smallest block type encoding is always used. - * - * stored: - * 32 bits length in bytes. - * - * fixed: - * magic fixed tree. - * symbols. - * - * dynamic: - * dynamic tree encoding. - * symbols. - * - * - * The buffer for decompression in place is the length of the - * uncompressed data, plus a small amount extra to keep the algorithm safe. - * The compressed data is placed at the end of the buffer. The output - * pointer is placed at the start of the buffer and the input pointer - * is placed where the compressed data starts. Problems will occur - * when the output pointer overruns the input pointer. - * - * The output pointer can only overrun the input pointer if the input - * pointer is moving faster than the output pointer. A condition only - * triggered by data whose compressed form is larger than the uncompressed - * form. - * - * The worst case at the block level is a growth of the compressed data - * of 5 bytes per 32767 bytes. - * - * The worst case internal to a compressed block is very hard to figure. - * The worst case can at least be boundined by having one bit that represents - * 32764 bytes and then all of the rest of the bytes representing the very - * very last byte. - * - * All of which is enough to compute an amount of extra data that is required - * to be safe. To avoid problems at the block level allocating 5 extra bytes - * per 32767 bytes of data is sufficient. To avoind problems internal to a block - * adding an extra 32767 bytes (the worst case uncompressed block size) is - * sufficient, to ensure that in the worst case the decompressed data for - * block will stop the byte before the compressed data for a block begins. - * To avoid problems with the compressed data's meta information an extra 18 - * bytes are needed. Leading to the formula: - * - * extra_bytes = (uncompressed_size >> 12) + 32768 + 18 + decompressor_size. - * - * Adding 8 bytes per 32K is a bit excessive but much easier to calculate. - * Adding 32768 instead of 32767 just makes for round numbers. - * Adding the decompressor_size is necessary as it musht live after all - * of the data as well. Last I measured the decompressor is about 14K. - * 10K of actuall data and 4K of bss. - * - */ - -/* - * gzip declarations - */ - -#define OF(args) args -#define STATIC static - -#undef memcpy - -typedef unsigned char uch; -typedef unsigned short ush; -typedef unsigned long ulg; - -#define WSIZE 0x80000000 /* Window size must be at least 32k, - * and a power of two - * We don't actually have a window just - * a huge output buffer so I report - * a 2G windows size, as that should - * always be larger than our output buffer. - */ - -static uch *inbuf; /* input buffer */ -static uch *window; /* Sliding window buffer, (and final output buffer) */ - -static unsigned insize; /* valid bytes in inbuf */ -static unsigned inptr; /* index of next byte to be processed in inbuf */ -static unsigned long workspace; - -#define get_byte() (inptr < insize ? inbuf[inptr++] : fill_inbuf()) - -/* Diagnostic functions */ -#ifdef DEBUG -# define Assert(cond,msg) {if(!(cond)) error(msg);} -# define Trace(x) fprintf x -# define Tracev(x) {if (verbose) fprintf x ;} -# define Tracevv(x) {if (verbose>1) fprintf x ;} -# define Tracec(c,x) {if (verbose && (c)) fprintf x ;} -# define Tracecv(c,x) {if (verbose>1 && (c)) fprintf x ;} -#else -# define Assert(cond,msg) -# define Trace(x) -# define Tracev(x) -# define Tracevv(x) -# define Tracec(c,x) -# define Tracecv(c,x) -#endif - -static int fill_inbuf(void); - -/* - * This is set up by the setup-routine at boot-time - */ -static unsigned char *real_mode; /* Pointer to real-mode data */ -extern unsigned char input_data[]; -extern int input_len; - -static void error(char *x); -static void *memcpy(void *dest, const void *src, unsigned n); - -#ifdef CONFIG_X86_NUMAQ -void *xquad_portio; -#endif - -static void* memcpy(void* dest, const void* src, unsigned n) -{ - int i; - char *d = (char *)dest, *s = (char *)src; - - for (i=0;i<n;i++) d[i] = s[i]; - return dest; -} - -/* =========================================================================== - * Fill the input buffer. This is called only when the buffer is empty - * and at least one byte is really needed. - */ -static int fill_inbuf(void) -{ - error("ran out of input data"); - return 0; -} - - -// When using LZMA in callback, the compressed length is not needed. -// Otherwise you need a special version of lzma compression program -// which will pad the compressed length in the header. -#define _LZMA_IN_CB -#include "LzmaDecode.h" -#include "LzmaDecode.c" - -static int read_byte(void *object, unsigned char **buffer, UInt32 *bufferSize); - -static int early_serial_base = 0x3f8; /* ttyS0 */ - -#define XMTRDY 0x20 - -#define DLAB 0x80 - -#define TXR 0 /* Transmit register (WRITE) */ -#define RXR 0 /* Receive register (READ) */ -#define IER 1 /* Interrupt Enable */ -#define IIR 2 /* Interrupt ID */ -#define FCR 2 /* FIFO control */ -#define LCR 3 /* Line control */ -#define MCR 4 /* Modem control */ -#define LSR 5 /* Line Status */ -#define MSR 6 /* Modem Status */ -#define DLL 0 /* Divisor Latch Low */ -#define DLH 1 /* Divisor latch High */ - -static int early_serial_putc(unsigned char ch) -{ - unsigned timeout = 0xffff; - while ((inb(early_serial_base + LSR) & XMTRDY) == 0 && --timeout) - cpu_relax(); - outb(ch, early_serial_base + TXR); - return timeout ? 0 : -1; -} - -static void early_serial_write(const char *s, unsigned n) -{ - while (*s && n-- > 0) { - if (*s == '\n') - early_serial_putc('\r'); - early_serial_putc(*s); - s++; - } -} - -#define DEFAULT_BAUD 38400 - -static __init void early_serial_init(void) -{ - unsigned char c; - unsigned divisor; - unsigned baud = DEFAULT_BAUD; - char *e; - - outb(0x3, early_serial_base + LCR); /* 8n1 */ - outb(0, early_serial_base + IER); /* no interrupt */ - outb(0, early_serial_base + FCR); /* no fifo */ - outb(0x3, early_serial_base + MCR); /* DTR + RTS */ - - baud = DEFAULT_BAUD; - - divisor = 115200 / baud; - c = inb(early_serial_base + LCR); - outb(c | DLAB, early_serial_base + LCR); - outb(divisor & 0xff, early_serial_base + DLL); - outb((divisor >> 8) & 0xff, early_serial_base + DLH); - outb(c & ~DLAB, early_serial_base + LCR); -} - -/* - * Do the lzma decompression - * When using LZMA in callback, the end of input stream is automatically determined - */ -static int lzma_unzip(void) -{ - - unsigned int i; /* temp value */ - unsigned int lc; /* literal context bits */ - unsigned int lp; /* literal pos state bits */ - unsigned int pb; /* pos state bits */ - unsigned int uncompressedSize = 0; - unsigned char* p; - - ILzmaInCallback callback; - callback.Read = read_byte; - - /* lzma args */ - i = get_byte(); - lc = i % 9, i = i / 9; - lp = i % 5, pb = i / 5; - - /* skip dictionary size */ - for (i = 0; i < 4; i++) - get_byte(); - // get uncompressedSize - p= (char*)&uncompressedSize; - for (i = 0; i < 4; i++) - *p++ = get_byte(); - - //get compressedSize - for (i = 0; i < 4; i++) - get_byte(); - - // point it beyond uncompresedSize - //workspace = window + uncompressedSize; - - /* decompress kernel */ - if (LzmaDecode((unsigned char*)workspace, ~0, lc, lp, pb, &callback, - (unsigned char*)window, uncompressedSize, &i) == LZMA_RESULT_OK) - return 0; - else - return 1; -} - - -#ifdef _LZMA_IN_CB -static int read_byte(void *object, unsigned char **buffer, UInt32 *bufferSize) -{ - static unsigned int i = 0; - static unsigned char val; - *bufferSize = 1; - val = get_byte(); - *buffer = &val; - return LZMA_RESULT_OK; -} -#endif - -static void error(char *x) -{ - while(1); /* Halt */ -} - -asmlinkage void decompress_kernel(void *rmode, unsigned long end, - uch *input_data, unsigned long input_len, uch *output) -{ - real_mode = rmode; - - window = output; - inbuf = input_data; /* Input buffer */ - insize = input_len; - inptr = 0; - - if ((u32)output & (CONFIG_PHYSICAL_ALIGN -1)) - error("Destination address not CONFIG_PHYSICAL_ALIGN aligned"); - if ((workspace = end) > ((-__PAGE_OFFSET-(512 <<20)-1) & 0x7fffffff)) - error("Destination address too large"); -#ifndef CONFIG_RELOCATABLE - if ((u32)output != LOAD_PHYSICAL_ADDR) - error("Wrong destination address"); -#endif - early_serial_init(); - early_serial_write("Uncompressing Linux\n", 512); - lzma_unzip(); - early_serial_write("Done, booting\n", 512); - return; -} diff --git a/target/linux/rdc/files-2.6.24/arch/x86/kernel/cpu/rdc.c b/target/linux/rdc/files-2.6.24/arch/x86/kernel/cpu/rdc.c deleted file mode 100644 index f4b9083..0000000 --- a/target/linux/rdc/files-2.6.24/arch/x86/kernel/cpu/rdc.c +++ /dev/null @@ -1,24 +0,0 @@ -#include <linux/init.h> -#include <linux/bitops.h> -#include <linux/mm.h> -#include <asm/io.h> -#include <asm/processor.h> - -#include "cpu.h" - -static struct cpu_dev rdc_cpu_dev __cpuinitdata = { - .c_vendor = "RDC", - .c_models = { - { .vendor = X86_VENDOR_RDC, .family = 4, .model_names = - { - [0] = "R861x(-G)", - } - }, - }, -}; - -int __init rdc_init_cpu(void) -{ - cpu_devs[X86_VENDOR_RDC] = &rdc_cpu_dev; - return 0; -} diff --git a/target/linux/rdc/files-2.6.24/arch/x86/mach-rdc/Makefile b/target/linux/rdc/files-2.6.24/arch/x86/mach-rdc/Makefile deleted file mode 100644 index 5961bc7..0000000 --- a/target/linux/rdc/files-2.6.24/arch/x86/mach-rdc/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -# -# Makefile for the RDC321x specific parts of the kernel -# -obj-$(CONFIG_X86_RDC) := gpio.o platform.o wdt.o - diff --git a/target/linux/rdc/files-2.6.24/arch/x86/mach-rdc/gpio.c b/target/linux/rdc/files-2.6.24/arch/x86/mach-rdc/gpio.c deleted file mode 100644 index dbd0327..0000000 --- a/target/linux/rdc/files-2.6.24/arch/x86/mach-rdc/gpio.c +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (C) 2007, OpenWrt.org, Florian Fainelli <florian@openwrt.org> - * RDC321x architecture specific GPIO support - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. - */ - -#include <linux/autoconf.h> -#include <linux/init.h> -#include <linux/io.h> -#include <linux/types.h> -#include <linux/module.h> -#include <linux/delay.h> - -#include <asm/mach-rdc/rdc321x_defs.h> - -static inline int rdc_gpio_is_valid(unsigned gpio) -{ - return (gpio <= RDC_MAX_GPIO); -} - -static unsigned int rdc_gpio_read(unsigned gpio) -{ - unsigned int val; - - val = 0x80000000 | (7 << 11) | ((gpio&0x20?0x84:0x48)); - outl(val, RDC3210_CFGREG_ADDR); - udelay(10); - val = inl(RDC3210_CFGREG_DATA); - val |= (0x1 << (gpio & 0x1F)); - outl(val, RDC3210_CFGREG_DATA); - udelay(10); - val = 0x80000000 | (7 << 11) | ((gpio&0x20?0x88:0x4C)); - outl(val, RDC3210_CFGREG_ADDR); - udelay(10); - val = inl(RDC3210_CFGREG_DATA); - - return val; -} - -static void rdc_gpio_write(unsigned int val) -{ - if (val) { - outl(val, RDC3210_CFGREG_DATA); - udelay(10); - } -} - -int rdc_gpio_get_value(unsigned gpio) -{ - if (rdc_gpio_is_valid(gpio)) - return (int)rdc_gpio_read(gpio); - else - return -EINVAL; -} -EXPORT_SYMBOL(rdc_gpio_get_value); - -void rdc_gpio_set_value(unsigned gpio, int value) -{ - unsigned int val; - - if (!rdc_gpio_is_valid(gpio)) - return; - - val = rdc_gpio_read(gpio); - - if (value) - val &= ~(0x1 << (gpio & 0x1F)); - else - val |= (0x1 << (gpio & 0x1F)); - - rdc_gpio_write(val); -} -EXPORT_SYMBOL(rdc_gpio_set_value); - -int rdc_gpio_direction_input(unsigned gpio) -{ - return 0; -} -EXPORT_SYMBOL(rdc_gpio_direction_input); - -int rdc_gpio_direction_output(unsigned gpio, int value) -{ - return 0; -} -EXPORT_SYMBOL(rdc_gpio_direction_output); - - diff --git a/target/linux/rdc/files-2.6.24/arch/x86/mach-rdc/platform.c b/target/linux/rdc/files-2.6.24/arch/x86/mach-rdc/platform.c deleted file mode 100644 index 86981f8..0000000 --- a/target/linux/rdc/files-2.6.24/arch/x86/mach-rdc/platform.c +++ /dev/null @@ -1,263 +0,0 @@ -/* - * - * Generic RDC321x platform devices - * - * Copyright (C) 2007-2008 OpenWrt.org - * Copyright (C) 2007 Florian Fainelli <florian@openwrt.org> - * Copyright (C) 2008 Daniel Gimpelevich <daniel@gimpelevich.san-francisco.ca.us> - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the - * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - */ - -#include <linux/init.h> -#include <linux/kernel.h> -#include <linux/list.h> -#include <linux/device.h> -#include <linux/platform_device.h> -#include <linux/version.h> -#include <linux/leds.h> -#include <linux/gpio_keys.h> -#include <linux/input.h> -#include <linux/mtd/map.h> -#include <linux/mtd/mtd.h> -#include <linux/mtd/physmap.h> -#include <linux/root_dev.h> -#include <asm/gpio.h> - -/* Flash */ -#ifdef CONFIG_MTD_RDC3210 -static struct resource rdc_flash_resource[] = { - [0] = { - .start = (u32)-CONFIG_MTD_RDC3210_SIZE, - .end = (u32)-1, - .flags = IORESOURCE_MEM, - }, -}; - -static struct platform_device rdc_flash_device = { - .name = "rdc321x-flash", - .id = -1, - .num_resources = ARRAY_SIZE(rdc_flash_resource), - .resource = rdc_flash_resource, -}; -#else -static struct mtd_partition rdc_flash_parts[15]; - -static struct resource rdc_flash_resource = { - .end = (u32)-1, - .flags = IORESOURCE_MEM, -}; - -static struct physmap_flash_data rdc_flash_data = { - .parts = rdc_flash_parts, -}; - -static struct platform_device rdc_flash_device = { - .name = "physmap-flash", - .id = -1, - .resource = &rdc_flash_resource, - .num_resources = 1, - .dev.platform_data = &rdc_flash_data, -}; -#endif - -/* LEDS */ -static struct gpio_led default_leds[] = { - { .name = "rdc321x:dmz", .gpio = 1, }, -}; - -static struct gpio_led_platform_data rdc321x_led_data = { - .num_leds = ARRAY_SIZE(default_leds), - .leds = default_leds, -}; - -static struct platform_device rdc321x_leds = { - .name = "leds-gpio", - .id = -1, - .dev = { - .platform_data = &rdc321x_led_data, - } -}; - -/* Watchdog */ -static struct platform_device rdc321x_wdt = { - .name = "rdc321x-wdt", - .id = -1, - .num_resources = 0, -}; - -/* Button */ -static struct gpio_keys_button rdc321x_gpio_btn[] = { - { - .gpio = 0, - .code = BTN_0, - .desc = "Reset", - .active_low = 1, - } -}; - -static struct gpio_keys_platform_data rdc321x_gpio_btn_data = { - .buttons = rdc321x_gpio_btn, - .nbuttons = ARRAY_SIZE(rdc321x_gpio_btn), -}; - -static struct platform_device rdc321x_button = { - .name = "gpio-keys", - .id = -1, - .dev = { - .platform_data = &rdc321x_gpio_btn_data, - } -}; - -static struct platform_device *rdc321x_devs[] = { - &rdc_flash_device, - &rdc321x_leds, - &rdc321x_wdt, - &rdc321x_button -}; - -static int probe_flash_start(struct map_info *the_map) -{ - struct mtd_info *res; - - the_map->virt = ioremap(the_map->phys, the_map->size); - if (the_map->virt == NULL) - return 1; - for (the_map->bankwidth = 32; the_map->bankwidth; the_map->bankwidth - >>= 1) { - res = do_map_probe("cfi_probe", the_map); - if (res == NULL) - res = do_map_probe("jedec_probe", the_map); - if (res != NULL) - break; - } - iounmap(the_map->virt); - if (res != NULL) - the_map->phys = (u32)-(s32)(the_map->size = res->size); - return res == NULL; -} - -static __init int rdc_board_setup(void) -{ -#ifndef CONFIG_MTD_RDC3210 - struct map_info rdc_map_info; - u32 the_header[4]; - - ROOT_DEV = 0; - rdc_map_info.name = rdc_flash_device.name; - rdc_map_info.phys = 0xff000000; - rdc_map_info.size = 0x1000000; - rdc_map_info.bankwidth = 2; - rdc_map_info.set_vpp = NULL; - simple_map_init(&rdc_map_info); - while (probe_flash_start(&rdc_map_info)) { - rdc_map_info.phys++; - if (--rdc_map_info.size) - panic("Not to be or to be: That" - " is not the question."); - } - rdc_flash_resource.start = rdc_map_info.phys; - rdc_flash_data.width = rdc_map_info.bankwidth; - rdc_map_info.virt = (u32)ioremap_nocache(rdc_map_info.phys, 0x10); - if (rdc_map_info.virt == NULL) - panic("Something's rotten in Denmark!"); - the_header[0] = ((u32 *)rdc_map_info.virt)[0]; - the_header[1] = ((u32 *)rdc_map_info.virt)[1]; - the_header[2] = ((u32 *)rdc_map_info.virt)[2]; - the_header[3] = ((u32 *)rdc_map_info.virt)[3]; - iounmap(rdc_map_info.virt); - if (!memcmp(the_header, "GMTK", 4)) { /* Gemtek */ - /* TODO */ - } else if (!memcmp(the_header, "CSYS", 4)) { /* Sitecom */ - /* TODO */ - } else if (!memcmp(((u8 *)the_header) + 14, "Li", 2)) { /* AMIT */ - rdc_flash_parts[0].name = "kernel_parthdr"; - rdc_flash_parts[0].offset = 0; - rdc_flash_parts[0].size = 0x10; - rdc_flash_parts[1].name = "kernel"; - rdc_flash_parts[1].offset = 0x10; - rdc_flash_parts[1].size = 0xffff0; - rdc_flash_parts[2].name = "rootfs_parthdr"; - rdc_flash_parts[2].offset = 0x100000; - rdc_flash_parts[2].size = 0x10; - rdc_flash_parts[3].name = "rootfs"; - rdc_flash_parts[3].offset = 0x100010; - rdc_flash_parts[3].size = rdc_map_info.size - 0x160010; - rdc_flash_parts[4].name = "config_parthdr"; - rdc_flash_parts[4].offset = rdc_map_info.size - 0x60000; - rdc_flash_parts[4].size = 0x10; - rdc_flash_parts[5].name = "config"; - rdc_flash_parts[5].offset = rdc_map_info.size - 0x5fff0; - rdc_flash_parts[5].size = 0xfff0; - rdc_flash_parts[6].name = "recoveryfs_parthdr"; - rdc_flash_parts[6].offset = rdc_map_info.size - 0x50000; - rdc_flash_parts[6].size = 0x10; - rdc_flash_parts[7].name = "recoveryfs"; - rdc_flash_parts[7].offset = rdc_map_info.size - 0x4fff0; - rdc_flash_parts[7].size = 0x3fff0; - rdc_flash_parts[8].name = "recovery_parthdr"; - rdc_flash_parts[8].offset = rdc_map_info.size - 0x10000; - rdc_flash_parts[8].size = 0x10; - rdc_flash_parts[9].name = "recovery"; - rdc_flash_parts[9].offset = rdc_map_info.size - 0xfff0; - rdc_flash_parts[9].size = 0x7ff0; - rdc_flash_parts[10].name = "productinfo_parthdr"; - rdc_flash_parts[10].offset = rdc_map_info.size - 0x8000; - rdc_flash_parts[10].size = 0x10; - rdc_flash_parts[11].name = "productinfo"; - rdc_flash_parts[11].offset = rdc_map_info.size - 0x7ff0; - rdc_flash_parts[11].size = 0x1ff0; - rdc_flash_parts[12].name = "bootloader_parthdr"; - rdc_flash_parts[12].offset = rdc_map_info.size - 0x6000; - rdc_flash_parts[12].size = 0x10; - rdc_flash_parts[13].name = "bootloader"; - rdc_flash_parts[13].offset = rdc_map_info.size - 0x5ff0; - rdc_flash_parts[13].size = 0x5ff0; - rdc_flash_parts[14].name = "everything"; - rdc_flash_parts[14].offset = 0; - rdc_flash_parts[14].size = rdc_map_info.size; - rdc_flash_data.nr_parts = 15; - } else { /* ZyXEL */ - rdc_flash_parts[0].name = "kernel"; - rdc_flash_parts[0].offset = 0; - rdc_flash_parts[0].size = 0x100000; - rdc_flash_parts[1].name = "rootfs"; - rdc_flash_parts[1].offset = 0x100000; - rdc_flash_parts[1].size = rdc_map_info.size - 0x140000; - rdc_flash_parts[2].name = "linux"; - rdc_flash_parts[2].offset = 0; - rdc_flash_parts[2].size = rdc_map_info.size - 0x40000; - rdc_flash_parts[3].name = "config"; - rdc_flash_parts[3].offset = rdc_map_info.size - 0x40000; - rdc_flash_parts[3].size = 0x10000; - rdc_flash_parts[4].name = "productinfo"; - rdc_flash_parts[4].offset = rdc_map_info.size - 0x30000; - rdc_flash_parts[4].size = 0x10000; - rdc_flash_parts[5].name = "bootloader"; - rdc_flash_parts[5].offset = rdc_map_info.size - 0x20000; - rdc_flash_parts[5].size = 0x20000; - rdc_flash_data.nr_parts = 6; - } -#endif - return platform_add_devices(rdc321x_devs, ARRAY_SIZE(rdc321x_devs)); -} - -#ifdef CONFIG_MTD_RDC3210 -arch_initcall(rdc_board_setup); -#else -late_initcall(rdc_board_setup); -#endif diff --git a/target/linux/rdc/files-2.6.24/arch/x86/mach-rdc/setup.c b/target/linux/rdc/files-2.6.24/arch/x86/mach-rdc/setup.c deleted file mode 100644 index ad206c3..0000000 --- a/target/linux/rdc/files-2.6.24/arch/x86/mach-rdc/setup.c +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Machine specific setup for generic - */ - -#include <linux/init.h> -#include <linux/interrupt.h> -#include <asm/arch_hooks.h> -#include <asm/io.h> -#include <asm/setup.h> - -char * __init machine_specific_memory_setup(void) -{ - return "RDC R-321x"; -} diff --git a/target/linux/rdc/files-2.6.24/arch/x86/mach-rdc/wdt.c b/target/linux/rdc/files-2.6.24/arch/x86/mach-rdc/wdt.c deleted file mode 100644 index 13b69f6..0000000 --- a/target/linux/rdc/files-2.6.24/arch/x86/mach-rdc/wdt.c +++ /dev/null @@ -1,272 +0,0 @@ -/* - * RDC321x watchdog driver - * - * Copyright (C) 2007 Florian Fainelli <florian@openwrt.org> - * - * This driver is highly inspired from the cpu5_wdt driver - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -#include <linux/module.h> -#include <linux/moduleparam.h> -#include <linux/types.h> -#include <linux/errno.h> -#include <linux/miscdevice.h> -#include <linux/fs.h> -#include <linux/init.h> -#include <linux/ioport.h> -#include <linux/timer.h> -#include <linux/completion.h> -#include <linux/jiffies.h> -#include <linux/platform_device.h> -#include <linux/watchdog.h> - -#include <asm/io.h> -#include <asm/uaccess.h> - -#include <asm/mach-rdc/rdc321x_defs.h> - -#define RDC_WDT_MASK 0x80000000 /* Mask */ -#define RDC_WDT_EN 0x00800000 /* Enable bit */ -#define RDC_WDT_WTI 0x00200000 /* Generate a CPU reset/NMI/WDT irq when WDT timeout is reached */ -#define RDC_WDT_RST 0x00100000 /* Reset bit */ -#define RDC_WDT_WIF 0x00040000 /* WDT IRQ Flag */ -#define RDC_WDT_IRT 0x00000100 /* IRQ Routing table */ -#define RDC_WDT_CNT 0x00000001 /* WDT count */ - -#define RDC_CLS_TMR 0x80003844 /* Clear timer */ - -#define RDC_WDT_INTERVAL (HZ/10+1) - -int nowayout = WATCHDOG_NOWAYOUT; -module_param(nowayout, int, 0); -MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=" __MODULE_STRING(WATCHDOG_NOWAYOUT) ")"); - -static int ticks = 1000; - -/* some device data */ - -static struct { - struct completion stop; - volatile int running; - struct timer_list timer; - volatile int queue; - int default_ticks; - unsigned long inuse; -} rdc321x_wdt_device; - -/* generic helper functions */ - -static void rdc321x_wdt_trigger(unsigned long unused) -{ - if( rdc321x_wdt_device.running ) - ticks--; - - /* keep watchdog alive */ - outl(RDC_WDT_EN|inl(RDC3210_CFGREG_DATA), RDC3210_CFGREG_DATA); - - /* requeue?? */ - if (rdc321x_wdt_device.queue && ticks) - mod_timer(&rdc321x_wdt_device.timer, jiffies + RDC_WDT_INTERVAL); - else { - /* ticks doesn't matter anyway */ - complete(&rdc321x_wdt_device.stop); - } - -} - -static void rdc321x_wdt_reset(void) -{ - ticks = rdc321x_wdt_device.default_ticks; -} - -static void rdc321x_wdt_start(void) -{ - if (!rdc321x_wdt_device.queue) { - rdc321x_wdt_device.queue = 1; - - /* Clear the timer */ - outl(RDC_CLS_TMR, RDC3210_CFGREG_ADDR); - - /* Enable watchdog and set the timeout to 81.92 us */ - outl(RDC_WDT_EN|RDC_WDT_CNT, RDC3210_CFGREG_DATA); - - mod_timer(&rdc321x_wdt_device.timer, jiffies + RDC_WDT_INTERVAL); - } - - /* if process dies, counter is not decremented */ - rdc321x_wdt_device.running++; -} - -static int rdc321x_wdt_stop(void) -{ - if (rdc321x_wdt_device.running) - rdc321x_wdt_device.running = 0; - - ticks = rdc321x_wdt_device.default_ticks; - - return -EIO; -} - -/* filesystem operations */ - -static int rdc321x_wdt_open(struct inode *inode, struct file *file) -{ - if (test_and_set_bit(0, &rdc321x_wdt_device.inuse)) - return -EBUSY; - - return nonseekable_open(inode, file); -} - -static int rdc321x_wdt_release(struct inode *inode, struct file *file) -{ - clear_bit(0, &rdc321x_wdt_device.inuse); - return 0; -} - -static int rdc321x_wdt_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) -{ - void __user *argp = (void __user *)arg; - unsigned int value; - static struct watchdog_info ident = - { - .options = WDIOF_CARDRESET, - .identity = "RDC321x WDT", - }; - - switch(cmd) { - case WDIOC_KEEPALIVE: - rdc321x_wdt_reset(); - break; - case WDIOC_GETSTATUS: - /* Read the value from the DATA register */ - value = inl(RDC3210_CFGREG_DATA); - if ( copy_to_user(argp, &value, sizeof(int)) ) - return -EFAULT; - break; - case WDIOC_GETSUPPORT: - if ( copy_to_user(argp, &ident, sizeof(ident)) ) - return -EFAULT; - break; - case WDIOC_SETOPTIONS: - if ( copy_from_user(&value, argp, sizeof(int)) ) - return -EFAULT; - switch(value) { - case WDIOS_ENABLECARD: - rdc321x_wdt_start(); - break; - case WDIOS_DISABLECARD: - return rdc321x_wdt_stop(); - default: - return -EINVAL; - } - break; - default: - return -ENOTTY; - } - return 0; -} - -static ssize_t rdc321x_wdt_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos) -{ - if ( !count ) - return -EIO; - - rdc321x_wdt_reset(); - - return count; -} - -static const struct file_operations rdc321x_wdt_fops = { - .owner = THIS_MODULE, - .llseek = no_llseek, - .ioctl = rdc321x_wdt_ioctl, - .open = rdc321x_wdt_open, - .write = rdc321x_wdt_write, - .release = rdc321x_wdt_release, -}; - -static struct miscdevice rdc321x_wdt_misc = { - .minor = WATCHDOG_MINOR, - .name = "watchdog", - .fops = &rdc321x_wdt_fops, -}; - -static int __devinit rdc321x_wdt_probe(struct platform_device *pdev) -{ - int err; - - if ( (err = misc_register(&rdc321x_wdt_misc)) < 0 ) { - printk(KERN_ERR PFX "misc_register failed\n"); - return err; - } - - /* Reset the watchdog */ - outl(RDC_WDT_RST, RDC3210_CFGREG_DATA); - - init_completion(&rdc321x_wdt_device.stop); - rdc321x_wdt_device.queue = 0; - - clear_bit(0, &rdc321x_wdt_device.inuse); - - setup_timer(&rdc321x_wdt_device.timer, rdc321x_wdt_trigger, 0); - - rdc321x_wdt_device.default_ticks = ticks; - - printk(KERN_INFO PFX "init success\n"); - - return 0; -} - -static int rdc321x_wdt_remove(struct platform_device *pdev) -{ - if (rdc321x_wdt_device.queue) { - rdc321x_wdt_device.queue = 0; - wait_for_completion(&rdc321x_wdt_device.stop); - } - - misc_deregister(&rdc321x_wdt_misc); - - return 0; -} - -static struct platform_driver rdc321x_wdt_driver = { - .probe = rdc321x_wdt_probe, - .remove = rdc321x_wdt_remove, - .driver = { - .owner = THIS_MODULE, - .name = "rdc321x-wdt", - }, -}; - -static int __init rdc321x_wdt_init(void) -{ - return platform_driver_register(&rdc321x_wdt_driver); -} - -static void __exit rdc321x_wdt_exit(void) -{ - platform_driver_unregister(&rdc321x_wdt_driver); -} - -module_init(rdc321x_wdt_init); -module_exit(rdc321x_wdt_exit); - -MODULE_AUTHOR("Florian Fainelli <florian@openwrt.org>"); -MODULE_DESCRIPTION("RDC321x watchdog driver"); -MODULE_LICENSE("GPL"); -MODULE_ALIAS_MISCDEV(WATCHDOG_MINOR); diff --git a/target/linux/rdc/files-2.6.24/drivers/mtd/maps/imghdr.h b/target/linux/rdc/files-2.6.24/drivers/mtd/maps/imghdr.h deleted file mode 100644 index 7232b70..0000000 --- a/target/linux/rdc/files-2.6.24/drivers/mtd/maps/imghdr.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef GT_IMGHDR_H -#define GT_IMGHDR_H - -#define GTIMG_MAGIC "GMTK" - -/* Product ID */ -#define PID_RTL_AIRGO 1 -#define PID_RTL_RALINK 2 -#define PID_RDC_AIRGO 3 -#define PID_RDC_RALINK 5 /* White Lable */ - -/* Gemtek */ -typedef struct -{ - u8 magic[4]; /* ASICII: GMTK */ - u32 checksum; /* CRC32 */ - u32 version; /* x.x.x.x */ - u32 kernelsz; /* The size of the kernel image */ - u32 imagesz; /* The length of this image file ( kernel + romfs + this header) */ - u32 pid; /* Product ID */ - u32 fastcksum; /* Partial CRC32 on (First(256), medium(256), last(512)) */ - u32 reserved; -}gt_imghdr_t; - -#endif diff --git a/target/linux/rdc/files-2.6.24/drivers/mtd/maps/rdc3210.c b/target/linux/rdc/files-2.6.24/drivers/mtd/maps/rdc3210.c deleted file mode 100644 index e04bb99..0000000 --- a/target/linux/rdc/files-2.6.24/drivers/mtd/maps/rdc3210.c +++ /dev/null @@ -1,392 +0,0 @@ -/******************************************************************* - * Simple Flash mapping for RDC3210 * - * * - * 2005.03.23 * - * Dante Su (dante_su@gemtek.com.tw) * - * Copyright (C) 2005 Gemtek Corporation * - *******************************************************************/ - -#include <linux/module.h> -#include <linux/types.h> -#include <linux/kernel.h> -#include <asm/io.h> -#include <linux/mtd/mtd.h> -#include <linux/mtd/map.h> -#include <linux/mtd/partitions.h> -#include <linux/autoconf.h> -#include <linux/sched.h> -#include <linux/squashfs_fs.h> - -static struct mtd_info *rdc3210_mtd; - -struct map_info rdc3210_map = -{ - .name = "RDC3210 Flash", - .size = CONFIG_MTD_RDC3210_SIZE, - .bankwidth = CONFIG_MTD_RDC3210_BUSWIDTH, -}; - -/* Dante: This is the default static mapping, however this is nothing but a hint. (Say dynamic mapping) */ -static struct mtd_partition rdc3210_parts[] = -{ -#if CONFIG_MTD_RDC3210_SIZE == 0x400000 - { name: "linux", offset: 0, size: 0x003C0000 }, /* 3840 KB = (Kernel + ROMFS) = (768 KB + 3072 KB) */ - { name: "romfs", offset: 0x000C0000, size: 0x00300000 }, /* 3072 KB */ - { name: "nvram", offset: 0x003C0000, size: 0x00010000 }, /* 64 KB */ -#ifdef CONFIG_MTD_RDC3210_FACTORY_PRESENT - { name: "factory", offset: 0x003D0000, size: 0x00010000 }, /* 64 KB */ -#endif - { name: "bootldr", offset: 0x003E0000, size: 0x00020000 }, /* 128 KB */ -#elif CONFIG_MTD_RDC3210_SIZE == 0x200000 - { name: "linux", offset: 0x00008000, size: 0x001E8000 }, - { name: "romfs", offset: 0x000C8000, size: 0x00128000 }, - { name: "nvram", offset: 0x00000000, size: 0x00008000 }, /* 64 KB */ -#ifdef CONFIG_MTD_RDC3210_FACTORY_PRESENT -#error Unsupported configuration! -#endif - { name: "bootldr", offset: 0x001F0000, size: 0x00010000 }, - -#elif CONFIG_MTD_RDC3210_SIZE == 0x800000 - { name: "linux", offset: 0, size: 0x001F0000 }, /* 1984 KB */ - { name: "config", offset: 0x001F0000, size: 0x00010000 }, /* 64 KB */ - { name: "romfs", offset: 0x00200000, size: 0x005D0000 }, /* 5952 KB */ -#ifdef CONFIG_MTD_RDC3210_FACTORY_PRESENT - { name: "factory", offset: 0x007D0000, size: 0x00010000 }, /* 64 KB */ -#endif - { name: "bootldr", offset: 0x007E0000, size: 0x00010000 }, /* 64 KB */ -#else -#error Unsupported configuration! -#endif -}; - -static __u32 crctab[257] = { - 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, - 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, - 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, - 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, - 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, - 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, - 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, - 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, - 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, - 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, - 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, - 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, - 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, - 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, - 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, - 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, - 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, - 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, - 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, - 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, - 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, - 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, - 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, - 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, - 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, - 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, - 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, - 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, - 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, - 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, - 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, - 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, - 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, - 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, - 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, - 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, - 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, - 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, - 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, - 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, - 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, - 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, - 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, - 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, - 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, - 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, - 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, - 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, - 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, - 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, - 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, - 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, - 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, - 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, - 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, - 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, - 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, - 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, - 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, - 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, - 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, - 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, - 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, - 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d, - 0 -}; - -static __u32 crc32(__u8 * buf, __u32 len) -{ - register int i; - __u32 sum; - register __u32 s0; - s0 = ~0; - for (i = 0; i < len; i++) { - s0 = (s0 >> 8) ^ crctab[(__u8) (s0 & 0xFF) ^ buf[i]]; - } - sum = ~s0; - return sum; -} - -static void erase_callback(struct erase_info *done) -{ - wait_queue_head_t *wait_q = (wait_queue_head_t *)done->priv; - wake_up(wait_q); -} - -static int erase_write (struct mtd_info *mtd, unsigned long pos, - int len, const char *buf) -{ - struct erase_info erase; - DECLARE_WAITQUEUE(wait, current); - wait_queue_head_t wait_q; - size_t retlen; - int ret; - - /* - * First, let's erase the flash block. - */ - - init_waitqueue_head(&wait_q); - erase.mtd = mtd; - erase.callback = erase_callback; - erase.addr = pos; - erase.len = len; - erase.priv = (u_long)&wait_q; - - set_current_state(TASK_INTERRUPTIBLE); - add_wait_queue(&wait_q, &wait); - - ret = mtd->erase(mtd, &erase); - if (ret) { - set_current_state(TASK_RUNNING); - remove_wait_queue(&wait_q, &wait); - printk (KERN_WARNING "erase of region [0x%lx, 0x%x] " - "on \"%s\" failed\n", - pos, len, mtd->name); - return ret; - } - - schedule(); /* Wait for erase to finish. */ - remove_wait_queue(&wait_q, &wait); - - /* - * Next, writhe data to flash. - */ - - ret = mtd->write (mtd, pos, len, &retlen, buf); - if (ret) - return ret; - if (retlen != len) - return -EIO; - return 0; -} - -static int __init init_rdc3210_map(void) -{ - rdc3210_map.phys = -rdc3210_map.size; - printk(KERN_NOTICE "flash device: %x at %x\n", rdc3210_map.size, rdc3210_map.phys); - -#if CONFIG_MTD_RDC3210_SIZE == 0x800000 - simple_map_init(&rdc3210_map); -#endif - - rdc3210_map.map_priv_1 = (unsigned long)(rdc3210_map.virt = ioremap_nocache(rdc3210_map.phys, rdc3210_map.size)); - - if (!rdc3210_map.map_priv_1) - { - printk("Failed to ioremap\n"); - return -EIO; - } - rdc3210_mtd = do_map_probe("cfi_probe", &rdc3210_map); -#ifdef CONFIG_MTD_RDC3210_STATIC_MAP /* Dante: This is for fixed map */ - if (rdc3210_mtd) - { - rdc3210_mtd->owner = THIS_MODULE; - add_mtd_partitions(rdc3210_mtd, rdc3210_parts, sizeof(rdc3210_parts)/sizeof(rdc3210_parts[0])); - return 0; - } -#else /* Dante: This is for dynamic mapping */ - -#include "imghdr.h" - - typedef struct { - u8 magic[4]; - u32 kernelsz, ramdisksz; - u8 magic2[4]; - u32 sz2; - }sc_imghdr_t; - - if (rdc3210_mtd) - { // Dante - sc_imghdr_t *hdr2= (sc_imghdr_t *)(rdc3210_map.map_priv_1); - gt_imghdr_t *hdr = (gt_imghdr_t *)hdr2 -#ifdef CONFIG_MTD_RDC3210_ALLOW_JFFS2 - , *ptmp -#endif - ; - int len, tmp, tmp2, tmp3, tmp4, hdr_type = 0; - - if(!memcmp(hdr->magic, GTIMG_MAGIC, 4)) - { - hdr_type = 1; - tmp = hdr->kernelsz + sizeof(gt_imghdr_t); - tmp2 = rdc3210_mtd->erasesize; - tmp3 = ((tmp / 32) + ((tmp % 32) ? 1 : 0)) * 32; - tmp4 = ((tmp / tmp2) + ((tmp % tmp2) ? 1 : 0)) * tmp2; - } -#ifndef CONFIG_MTD_RDC3210_ALLOW_JFFS2 - else if (!memcmp(hdr2->magic, "CSYS", 4)) - { - hdr_type = 2; - tmp = hdr2->ramdisksz + hdr2->kernelsz + sizeof(sc_imghdr_t); - tmp2 = rdc3210_mtd->erasesize; - tmp3 = ((tmp / 32) + ((tmp % 32) ? 1 : 0)) * 32; - tmp4 = ((tmp / tmp2) + ((tmp % tmp2) ? 1 : 0)) * tmp2; - } -#endif - else - { - iounmap((void *)rdc3210_map.map_priv_1); - rdc3210_map.map_priv_1 = 0L; - rdc3210_map.virt = NULL; - printk("Invalid MAGIC for Firmware Image!!!\n"); - return -EIO; - } -#ifdef CONFIG_MTD_RDC3210_ALLOW_JFFS2 - tmp = (tmp3 == tmp4) ? tmp4 + tmp2 : tmp4; - if ((ptmp = (gt_imghdr_t *)vmalloc(tmp)) == NULL) - { - iounmap((void *)rdc3210_map.map_priv_1); - rdc3210_map.map_priv_1 = 0L; - rdc3210_map.virt = NULL; - printk("Can't allocate 0x%08x for flash-reading buffer!\n", tmp); - return -ENOMEM; - } - if (rdc3210_mtd->read(rdc3210_mtd, 0, tmp, &len, (__u8 *)ptmp) || len != tmp) - { - vfree(ptmp); - iounmap((void *)rdc3210_map.map_priv_1); - rdc3210_map.map_priv_1 = 0L; - rdc3210_map.virt = NULL; - printk("Can't read that much flash! Read 0x%08x of it.\n", len); - return -EIO; - } -#endif -#ifdef CONFIG_MTD_RDC3210_FACTORY_PRESENT - /* 1. Adjust Redboot */ - tmp = rdc3210_mtd->size - rdc3210_parts[4].size; - rdc3210_parts[4].offset = tmp - (tmp % tmp2); - rdc3210_parts[4].size = rdc3210_mtd->size - rdc3210_parts[4].offset; - - /* 2. Adjust Factory Default */ - tmp -= rdc3210_parts[3].size; - rdc3210_parts[3].offset = tmp - (tmp % tmp2); - rdc3210_parts[3].size = rdc3210_parts[4].offset - rdc3210_parts[3].offset; -#else - /* 1. Adjust Redboot */ - tmp = rdc3210_mtd->size - rdc3210_parts[3].size; - rdc3210_parts[3].offset = tmp - (tmp % tmp2); - rdc3210_parts[3].size = rdc3210_mtd->size - rdc3210_parts[3].offset; -#endif - if (hdr_type == 1) { - /* 3. Adjust NVRAM */ -#ifdef CONFIG_MTD_RDC3210_ALLOW_JFFS2 - if (*(__u32 *)(((unsigned char *)ptmp)+tmp3) == SQUASHFS_MAGIC) - { - len = 1; - tmp4 = tmp3; - tmp = hdr->imagesz; - rdc3210_parts[2].name = "rootfs_data"; - rdc3210_parts[2].offset = rdc3210_parts[0].offset + (((tmp / tmp2) + ((tmp % tmp2) ? 1 : 0)) * tmp2); - } - else -#else - tmp4 = tmp3; -#endif - { - len = 0; - tmp -= rdc3210_parts[2].size; - rdc3210_parts[2].offset = tmp - (tmp % tmp2); - } - rdc3210_parts[2].size = rdc3210_parts[3].offset - rdc3210_parts[2].offset; - } - else if (hdr_type == 2) - { - len = 0; - tmp4 = tmp3; - } - - /* 4. Adjust Linux (Kernel + ROMFS) */ - rdc3210_parts[0].size = rdc3210_parts[len + hdr_type + 1].offset - rdc3210_parts[0].offset; - - /* 5. Adjust ROMFS */ - rdc3210_parts[1].offset = rdc3210_parts[0].offset + tmp4; - rdc3210_parts[1].size = rdc3210_parts[hdr_type + 1].offset - rdc3210_parts[1].offset; -#ifdef CONFIG_MTD_RDC3210_ALLOW_JFFS2 - if (!(hdr->reserved || len)) - { - __u8 buf[1024]; - ptmp->reserved = hdr->imagesz; - ptmp->imagesz = tmp4; - ptmp->checksum = ptmp->fastcksum = 0; - memcpy(buf, ptmp, 0x100); - memcpy(buf + 0x100, ((__u8 *)ptmp) + ((tmp4 >> 1) - ((tmp4 & 0x6) >> 1)), 0x100); - memcpy(buf + 0x200, ((__u8 *)ptmp) + (tmp4 - 0x200), 0x200); - ptmp->fastcksum = crc32(buf, sizeof(buf)); - ptmp->checksum = crc32((__u8 *)ptmp, tmp4); - if (rdc3210_mtd->unlock) rdc3210_mtd->unlock(rdc3210_mtd, 0, tmp2); - if ((len = erase_write(rdc3210_mtd, 0, tmp2, (char *)ptmp))) - { - vfree(ptmp); - iounmap((void *)rdc3210_map.map_priv_1); - rdc3210_map.map_priv_1 = 0L; - rdc3210_map.virt = NULL; - printk("Couldn't erase! Got %d.\n", len); - return len; - } - if (rdc3210_mtd->sync) rdc3210_mtd->sync(rdc3210_mtd); - } - vfree(ptmp); -#endif - rdc3210_mtd->owner = THIS_MODULE; - add_mtd_partitions(rdc3210_mtd, rdc3210_parts, sizeof(rdc3210_parts)/sizeof(rdc3210_parts[0])); - return 0; - } -#endif - iounmap((void *)rdc3210_map.map_priv_1); - rdc3210_map.map_priv_1 = 0L; - rdc3210_map.virt = NULL; - return -ENXIO; -} - -static void __exit cleanup_rdc3210_map(void) -{ - if (rdc3210_mtd) - { - del_mtd_partitions(rdc3210_mtd); - map_destroy(rdc3210_mtd); - } - - if (rdc3210_map.map_priv_1) - { - iounmap((void *)rdc3210_map.map_priv_1); - rdc3210_map.map_priv_1 = 0L; - rdc3210_map.virt = NULL; - } -} - -module_init(init_rdc3210_map); -module_exit(cleanup_rdc3210_map); diff --git a/target/linux/rdc/files-2.6.24/drivers/net/r6040.c b/target/linux/rdc/files-2.6.24/drivers/net/r6040.c deleted file mode 100644 index 0096006..0000000 --- a/target/linux/rdc/files-2.6.24/drivers/net/r6040.c +++ /dev/null @@ -1,1412 +0,0 @@ -/* - * RDC R6040 Fast Ethernet MAC support - * - * Copyright (C) 2004 Sten Wang <sten.wang@rdc.com.tw> - * Copyright (C) 2007 - * Daniel Gimpelevich <daniel@gimpelevich.san-francisco.ca.us> - * Florian Fainelli <florian@openwrt.org> - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the - * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. -*/ - -#include <linux/kernel.h> -#include <linux/module.h> -#include <linux/version.h> -#include <linux/moduleparam.h> -#include <linux/string.h> -#include <linux/timer.h> -#include <linux/errno.h> -#include <linux/ioport.h> -#include <linux/slab.h> -#include <linux/interrupt.h> -#include <linux/pci.h> -#include <linux/netdevice.h> -#include <linux/etherdevice.h> -#include <linux/skbuff.h> -#include <linux/init.h> -#include <linux/delay.h> -#include <linux/mii.h> -#include <linux/ethtool.h> -#include <linux/crc32.h> -#include <linux/spinlock.h> -#include <linux/bitops.h> -#include <linux/io.h> -#include <linux/irq.h> -#include <linux/uaccess.h> - -#include <asm/processor.h> - -#define DRV_NAME "r6040" -#define DRV_VERSION "0.19" -#define DRV_RELDATE "16Jun2008" - -/* define bits of a debug mask */ -#define DBG_PHY 0x00000001 /*!< show PHY read/write */ -#define DBG_FREE_BUFS 0x00000002 /*!< show calls to r6040_free_*bufs */ -#define DBG_RING 0x00000004 /*!< debug init./freeing of descr rings */ -#define DBG_RX_BUF 0x00000008 /*!< show alloc. of new rx buf (in IRQ context !) */ -#define DBG_TX_BUF 0x00000010 /*!< show arrival of new tx buf */ -#define DBG_TX_DONE 0x00000020 /*!< debug TX done */ -#define DBG_RX_DESCR 0x00000040 /*!< debug rx descr to be processed */ -#define DBG_RX_DATA 0x00000080 /*!< show some user data of incoming packet */ -#define DBG_EXIT 0x00000100 /*!< show exit code calls */ -#define DBG_INIT 0x00000200 /*!< show init. code calls */ -#define DBG_TX_RING_DUMP 0x00000400 /*!< dump the tx ring after creation */ -#define DBG_RX_RING_DUMP 0x00000800 /*!< dump the rx ring after creation */ -#define DBG_TX_DESCR 0x00001000 /*!< dump the setting of a descr for tx */ -#define DBG_TX_DATA 0x00002000 /*!< dump some tx data */ -#define DBG_IRQ 0x00004000 /*!< print inside the irq handler */ -#define DBG_POLL 0x00008000 /*!< dump info on poll procedure */ -#define DBG_MAC_ADDR 0x00010000 /*!< debug mac address setting */ -#define DBG_OPEN 0x00020000 /*!< debug open proc. */ - -static int debug = 0; -module_param(debug, int, 0); -MODULE_PARM_DESC(debug, "debug mask (-1 for all)"); - -/* define which debugs are left in the code during compilation */ -#define DEBUG (-1) /* all debugs */ - -#define dbg(l, f, ...) \ - do { \ - if ((DEBUG & l) && (debug & l)) { \ - printk(KERN_INFO DRV_NAME " %s: " f, __FUNCTION__, ## __VA_ARGS__); \ - } \ - } while (0) - -#define err(f, ...) printk(KERN_WARNING DRV_NAME " %s: " f, __FUNCTION__, ## __VA_ARGS__) - -/* PHY CHIP Address */ -#define PHY1_ADDR 1 /* For MAC1 */ -#define PHY2_ADDR 3 /* For MAC2 */ -#define PHY_MODE 0x3100 /* PHY CHIP Register 0 */ -#define PHY_CAP 0x01E1 /* PHY CHIP Register 4 */ - -/* Time in jiffies before concluding the transmitter is hung. */ -#define TX_TIMEOUT (6000 * HZ / 1000) - -/* RDC MAC I/O Size */ -#define R6040_IO_SIZE 256 - -/* MAX RDC MAC */ -#define MAX_MAC 2 - -/* MAC registers */ -#define MCR0 0x00 /* Control register 0 */ -#define MCR1 0x04 /* Control register 1 */ -#define MAC_RST 0x0001 /* Reset the MAC */ -#define MBCR 0x08 /* Bus control */ -#define MT_ICR 0x0C /* TX interrupt control */ -#define MR_ICR 0x10 /* RX interrupt control */ -#define MTPR 0x14 /* TX poll command register */ -#define MR_BSR 0x18 /* RX buffer size */ -#define MR_DCR 0x1A /* RX descriptor control */ -#define MLSR 0x1C /* Last status */ -#define MMDIO 0x20 /* MDIO control register */ -#define MDIO_WRITE 0x4000 /* MDIO write */ -#define MDIO_READ 0x2000 /* MDIO read */ -#define MMRD 0x24 /* MDIO read data register */ -#define MMWD 0x28 /* MDIO write data register */ -#define MTD_SA0 0x2C /* TX descriptor start address 0 */ -#define MTD_SA1 0x30 /* TX descriptor start address 1 */ -#define MRD_SA0 0x34 /* RX descriptor start address 0 */ -#define MRD_SA1 0x38 /* RX descriptor start address 1 */ -#define MISR 0x3C /* Status register */ -#define MIER 0x40 /* INT enable register */ -#define MSK_INT 0x0000 /* Mask off interrupts */ -#define RX_FINISH 0x0001 /* rx finished irq */ -#define RX_NO_DESC 0x0002 /* rx no descr. avail. irq */ -#define RX_FIFO_FULL 0x0004 /* rx fifo full irq */ -#define RX_EARLY 0x0008 /* rx early irq */ -#define TX_FINISH 0x0010 /* tx finished irq */ -#define TX_EARLY 0x0080 /* tx early irq */ -#define EVENT_OVRFL 0x0100 /* event counter overflow irq */ -#define LINK_CHANGED 0x0200 /* PHY link changed irq */ - -#define ME_CISR 0x44 /* Event counter INT status */ -#define ME_CIER 0x48 /* Event counter INT enable */ -#define MR_CNT 0x50 /* Successfully received packet counter */ -#define ME_CNT0 0x52 /* Event counter 0 */ -#define ME_CNT1 0x54 /* Event counter 1 */ -#define ME_CNT2 0x56 /* Event counter 2 */ -#define ME_CNT3 0x58 /* Event counter 3 */ -#define MT_CNT 0x5A /* Successfully transmit packet counter */ -#define ME_CNT4 0x5C /* Event counter 4 */ -#define MP_CNT 0x5E /* Pause frame counter register */ -#define MAR0 0x60 /* Hash table 0 */ -#define MAR1 0x62 /* Hash table 1 */ -#define MAR2 0x64 /* Hash table 2 */ -#define MAR3 0x66 /* Hash table 3 */ -#define MID_0L 0x68 /* Multicast address MID0 Low */ -#define MID_0M 0x6A /* Multicast address MID0 Medium */ -#define MID_0H 0x6C /* Multicast address MID0 High */ -#define MID_1L 0x70 /* MID1 Low */ -#define MID_1M 0x72 /* MID1 Medium */ -#define MID_1H 0x74 /* MID1 High */ -#define MID_2L 0x78 /* MID2 Low */ -#define MID_2M 0x7A /* MID2 Medium */ -#define MID_2H 0x7C /* MID2 High */ -#define MID_3L 0x80 /* MID3 Low */ -#define MID_3M 0x82 /* MID3 Medium */ -#define MID_3H 0x84 /* MID3 High */ -#define PHY_CC 0x88 /* PHY status change configuration register */ -#define PHY_ST 0x8A /* PHY status register */ -#define MAC_SM 0xAC /* MAC status machine */ -#define MAC_ID 0xBE /* Identifier register */ - -#define TX_DCNT 0x80 /* TX descriptor count */ -#define RX_DCNT 0x80 /* RX descriptor count */ -#define MAX_BUF_SIZE 0x600 -#define RX_DESC_SIZE (RX_DCNT * sizeof(struct r6040_descriptor)) -#define TX_DESC_SIZE (TX_DCNT * sizeof(struct r6040_descriptor)) -#define MBCR_DEFAULT 0x012A /* MAC Bus Control Register: - - wait 1 host clock until SDRAM bus request - becomes high priority - - RX FIFO: 32 byte - - TX FIFO: 64 byte - - FIFO transfer length: 16 byte */ -#define MCAST_MAX 4 /* Max number multicast addresses to filter */ - -/* PHY settings */ -#define ICPLUS_PHY_ID 0x0243 - -MODULE_AUTHOR("Sten Wang <sten.wang@rdc.com.tw>," - "Daniel Gimpelevich <daniel@gimpelevich.san-francisco.ca.us>," - "Florian Fainelli <florian@openwrt.org>"); -MODULE_LICENSE("GPL"); -MODULE_DESCRIPTION("RDC R6040 NAPI PCI FastEthernet driver"); - -/*! which rx interrupts do we allow */ -#define RX_INTS (RX_FIFO_FULL|RX_NO_DESC|RX_FINISH) -/*! which tx interrupts do we allow */ -#define TX_INTS (TX_FINISH) -#define INT_MASK (RX_INTS | TX_INTS) - -struct r6040_descriptor { - u16 status, len; /* 0-3 */ - __le32 buf; /* 4-7 */ - __le32 ndesc; /* 8-B */ - u32 rev1; /* C-F */ - char *vbufp; /* 10-13 */ - struct r6040_descriptor *vndescp; /* 14-17 */ - struct sk_buff *skb_ptr; /* 18-1B */ - u32 rev2; /* 1C-1F */ -} __attribute__((aligned(32))); - -/*! defines for the status field in the r6040_descriptor */ -#define DESC_STATUS_OWNER_MAC (1<<15) /*!< if set the MAC is the owner of this descriptor */ -#define DESC_STATUS_RX_OK (1<<14) /*!< rx was successful */ -#define DESC_STATUS_RX_ERR (1<<11) /*!< rx PHY error */ -#define DESC_STATUS_RX_ERR_DRIBBLE (1<<10) /*!< rx dribble packet */ -#define DESC_STATUS_RX_ERR_BUFLEN (1<< 9) /*!< rx length exceeded buffer size */ -#define DESC_STATUS_RX_ERR_LONG (1<< 8) /*!< rx length > maximum packet length */ -#define DESC_STATUS_RX_ERR_RUNT (1<< 7) /*!< rx: packet length < 64 byte */ -#define DESC_STATUS_RX_ERR_CRC (1<< 6) /*!< rx: crc error */ -#define DESC_STATUS_RX_BROADCAST (1<< 5) /*!< rx: broadcast (no error) */ -#define DESC_STATUS_RX_MULTICAST (1<< 4) /*!< rx: multicast (no error) */ -#define DESC_STATUS_RX_MCH_HIT (1<< 3) /*!< rx: multicast hit in hash table (no error) */ -#define DESC_STATUS_RX_MIDH_HIT (1<< 2) /*!< rx: MID table hit (no error) */ -#define DESC_STATUS_RX_IDX_MID_MASK 3 /*!< rx: mask for the index of matched MIDx */ - -struct r6040_private { - spinlock_t lock; /* driver lock */ - struct timer_list timer; - struct pci_dev *pdev; - struct r6040_descriptor *rx_insert_ptr; - struct r6040_descriptor *rx_remove_ptr; - struct r6040_descriptor *tx_insert_ptr; - struct r6040_descriptor *tx_remove_ptr; - struct r6040_descriptor *rx_ring; - struct r6040_descriptor *tx_ring; - dma_addr_t rx_ring_dma; - dma_addr_t tx_ring_dma; - u16 tx_free_desc, phy_addr, phy_mode; - u16 mcr0, mcr1; - u16 switch_sig; - struct net_device *dev; - struct mii_if_info mii_if; - struct napi_struct napi; - void __iomem *base; -}; - -static char *parent = "wlan0"; -module_param(parent, charp, 0444); -MODULE_PARM_DESC(parent, "Parent network device name to get the MAC address from"); - -static u8 mac_base[ETH_ALEN] = {0,0x50,0xfc,2,3,4}; -module_param_array(mac_base, byte, NULL, 0444); -MODULE_PARM_DESC(mac_base, "Starting MAC address"); - -static int reverse = 1; -module_param(reverse, invbool, 0444); -MODULE_PARM_DESC(reverse, "Reverse card indices"); - -static char version[] __devinitdata = DRV_NAME - ": RDC R6040 NAPI net driver," - "version "DRV_VERSION " (" DRV_RELDATE ")"; - -static int phy_table[] = { PHY1_ADDR, PHY2_ADDR }; - -/* forward declarations */ -void r6040_multicast_list(struct net_device *dev); - -/* jal2: comment out to get more symbols for debugging */ -//#define STATIC static -#define STATIC - -#if DEBUG -/*! hexdump an memory area into a string. delim is taken as the delimiter between two bytes. - It is omitted if delim == '\0' */ -STATIC char *hex2str(void *addr, char *buf, int nr_bytes, int delim) -{ - unsigned char *src = addr; - char *outb = buf; - -#define BIN2HEXDIGIT(x) ((x) < 10 ? '0'+(x) : 'A'-10+(x)) - - while (nr_bytes > 0) { - *outb++ = BIN2HEXDIGIT(*src>>4); - *outb++ = BIN2HEXDIGIT(*src&0xf); - if (delim) - *outb++ = delim; - nr_bytes--; - src++; - } - - if (delim) - outb--; - *outb = '\0'; - return buf; -} - -#endif /* #if DEBUG */ - -/* Read a word data from PHY Chip */ -STATIC int phy_read(void __iomem *ioaddr, int phy_addr, int reg) -{ - int limit = 2048; - u16 cmd; - int rc; - - iowrite16(MDIO_READ + reg + (phy_addr << 8), ioaddr + MMDIO); - /* Wait for the read bit to be cleared */ - while (limit--) { - cmd = ioread16(ioaddr + MMDIO); - if (!(cmd & MDIO_READ)) - break; - } - - if (limit <= 0) - err("phy addr x%x reg x%x timed out\n", - phy_addr, reg); - - rc=ioread16(ioaddr + MMRD); - - dbg(DBG_PHY, "phy addr x%x reg x%x val x%x\n", phy_addr, reg, rc); - return rc; -} - -/* Write a word data from PHY Chip */ -STATIC void phy_write(void __iomem *ioaddr, int phy_addr, int reg, u16 val) -{ - int limit = 2048; - u16 cmd; - - dbg(DBG_PHY, "phy addr x%x reg x%x val x%x\n", phy_addr, reg, val); - - iowrite16(val, ioaddr + MMWD); - /* Write the command to the MDIO bus */ - iowrite16(MDIO_WRITE + reg + (phy_addr << 8), ioaddr + MMDIO); - /* Wait for the write bit to be cleared */ - while (limit--) { - cmd = ioread16(ioaddr + MMDIO); - if (!(cmd & MDIO_WRITE)) - break; - } - if (limit <= 0) - err("phy addr x%x reg x%x val x%x timed out\n", - phy_addr, reg, val); -} - -STATIC int mdio_read(struct net_device *dev, int mii_id, int reg) -{ - struct r6040_private *lp = netdev_priv(dev); - void __iomem *ioaddr = lp->base; - - return (phy_read(ioaddr, lp->phy_addr, reg)); -} - -STATIC void mdio_write(struct net_device *dev, int mii_id, int reg, int val) -{ - struct r6040_private *lp = netdev_priv(dev); - void __iomem *ioaddr = lp->base; - - phy_write(ioaddr, lp->phy_addr, reg, val); -} - -void r6040_free_txbufs(struct net_device *dev) -{ - struct r6040_private *lp = netdev_priv(dev); - int i; - - dbg(DBG_FREE_BUFS, "ENTER\n"); - for (i = 0; i < TX_DCNT; i++) { - if (lp->tx_insert_ptr->skb_ptr) { - pci_unmap_single(lp->pdev, - le32_to_cpu(lp->tx_insert_ptr->buf), - MAX_BUF_SIZE, PCI_DMA_TODEVICE); - dev_kfree_skb(lp->tx_insert_ptr->skb_ptr); - lp->tx_insert_ptr->skb_ptr = NULL; - } - lp->tx_insert_ptr = lp->tx_insert_ptr->vndescp; - } - dbg(DBG_FREE_BUFS, "EXIT\n"); -} - -/*! unmap and free all rx skb */ -void r6040_free_rxbufs(struct net_device *dev) -{ - struct r6040_private *lp = netdev_priv(dev); - int i; - - dbg(DBG_FREE_BUFS, "ENTER\n"); - for (i = 0; i < RX_DCNT; i++) { - if (lp->rx_insert_ptr->skb_ptr) { - pci_unmap_single(lp->pdev, - le32_to_cpu(lp->rx_insert_ptr->buf), - MAX_BUF_SIZE, PCI_DMA_FROMDEVICE); - dev_kfree_skb(lp->rx_insert_ptr->skb_ptr); - lp->rx_insert_ptr->skb_ptr = NULL; - } - lp->rx_insert_ptr = lp->rx_insert_ptr->vndescp; - } - dbg(DBG_FREE_BUFS, "EXIT\n"); - -} - -void r6040_init_ring_desc(struct r6040_descriptor *desc_ring, - dma_addr_t desc_dma, int size) -{ - struct r6040_descriptor *desc = desc_ring; - dma_addr_t mapping = desc_dma; - - dbg(DBG_RING, "desc_ring %p desc_dma %08x size x%x\n", - desc_ring, desc_dma, size); - - - while (size-- > 0) { - mapping += sizeof(*desc); - memset(desc, 0, sizeof(*desc)); - desc->ndesc = cpu_to_le32(mapping); - desc->vndescp = desc + 1; - desc++; - } - - /* last descriptor points to first one to close the descriptor ring */ - desc--; - desc->ndesc = cpu_to_le32(desc_dma); - desc->vndescp = desc_ring; -} - -#if (DEBUG & DBG_TX_RING_DUMP) -/*! dump the tx ring to syslog */ -STATIC void -dump_tx_ring(struct r6040_private *lp) -{ - int i; - struct r6040_descriptor *ptr; - - printk(KERN_INFO "%s: nr_desc x%x tx_ring %p tx_ring_dma %08x " - "tx_insert %p tx_remove %p\n", - DRV_NAME, TX_DCNT, lp->tx_ring, lp->tx_ring_dma, - lp->tx_insert_ptr, lp->tx_remove_ptr); - - if (lp->tx_ring) { - for(i=0, ptr=lp->tx_ring; i < TX_DCNT; i++, ptr++) { - printk(KERN_INFO "%s: %d. descr: status x%x len x%x " - "ndesc %08x vbufp %p vndescp %p skb_ptr %p\n", - DRV_NAME, i, ptr->status, ptr->len, - ptr->ndesc, ptr->vbufp, ptr->vndescp, ptr->skb_ptr); - } - } -} -#endif /* #if (DEBUG & DBG_TX_RING_DUMP) */ - -void r6040_init_txbufs(struct net_device *dev) -{ - struct r6040_private *lp = netdev_priv(dev); - - lp->tx_free_desc = TX_DCNT; - - lp->tx_remove_ptr = lp->tx_insert_ptr = lp->tx_ring; - r6040_init_ring_desc(lp->tx_ring, lp->tx_ring_dma, TX_DCNT); - -#if (DEBUG & DBG_TX_RING_DUMP) - if (debug & DBG_TX_RING_DUMP) { - dump_tx_ring(lp); - } -#endif -} - -#if (DEBUG & DBG_RX_RING_DUMP) -/*! dump the rx ring to syslog */ -STATIC void -dump_rx_ring(struct r6040_private *lp) -{ - int i; - struct r6040_descriptor *ptr; - - printk(KERN_INFO "%s: nr_desc x%x rx_ring %p rx_ring_dma %08x " - "rx_insert %p rx_remove %p\n", - DRV_NAME, RX_DCNT, lp->rx_ring, lp->rx_ring_dma, - lp->rx_insert_ptr, lp->rx_remove_ptr); - - if (lp->rx_ring) { - for(i=0, ptr=lp->rx_ring; i < RX_DCNT; i++, ptr++) { - printk(KERN_INFO "%s: %d. descr: status x%x len x%x " - "ndesc %08x vbufp %p vndescp %p skb_ptr %p\n", - DRV_NAME, i, ptr->status, ptr->len, - ptr->ndesc, ptr->vbufp, ptr->vndescp, ptr->skb_ptr); - } - } -} -#endif /* #if (DEBUG & DBG_TX_RING_DUMP) */ - -int r6040_alloc_rxbufs(struct net_device *dev) -{ - struct r6040_private *lp = netdev_priv(dev); - struct r6040_descriptor *desc; - struct sk_buff *skb; - int rc; - - lp->rx_remove_ptr = lp->rx_insert_ptr = lp->rx_ring; - r6040_init_ring_desc(lp->rx_ring, lp->rx_ring_dma, RX_DCNT); - - /* alloc skbs for the rx descriptors */ - desc = lp->rx_ring; - do { - if (!(skb=netdev_alloc_skb(dev, MAX_BUF_SIZE))) { - err("failed to alloc skb for rx\n"); - rc = -ENOMEM; - goto err_exit; - } - desc->skb_ptr = skb; - desc->buf = cpu_to_le32(pci_map_single(lp->pdev, - desc->skb_ptr->data, - MAX_BUF_SIZE, PCI_DMA_FROMDEVICE)); - desc->status = DESC_STATUS_OWNER_MAC; - desc = desc->vndescp; - } while (desc != lp->rx_ring); - -#if (DEBUG & DBG_RX_RING_DUMP) - if (debug & DBG_RX_RING_DUMP) { - dump_rx_ring(lp); - } -#endif - - return 0; - -err_exit: - /* dealloc all previously allocated skb */ - r6040_free_rxbufs(dev); - return rc; -} - -/*! reset MAC and set all registers */ -void r6040_init_mac_regs(struct r6040_private *lp) -{ - void __iomem *ioaddr = lp->base; - int limit; - char obuf[3*ETH_ALEN] __attribute__ ((unused)); - - /* Mask Off Interrupt */ - iowrite16(MSK_INT, ioaddr + MIER); - - /* reset MAC */ - iowrite16(MAC_RST, ioaddr + MCR1); - udelay(100); - limit=2048; - while ((ioread16(ioaddr + MCR1) & MAC_RST) && limit-- > 0); - - /* Reset internal state machine */ - iowrite16(2, ioaddr + MAC_SM); - iowrite16(0, ioaddr + MAC_SM); - udelay(5000); - - /* Restore MAC Addresses */ - r6040_multicast_list(lp->dev); - - /* TODO: restore multcast and hash table */ - - /* MAC Bus Control Register */ - iowrite16(MBCR_DEFAULT, ioaddr + MBCR); - - /* Buffer Size Register */ - iowrite16(MAX_BUF_SIZE, ioaddr + MR_BSR); - - /* write tx ring start address */ - iowrite16(lp->tx_ring_dma, ioaddr + MTD_SA0); - iowrite16(lp->tx_ring_dma >> 16, ioaddr + MTD_SA1); - - /* write rx ring start address */ - iowrite16(lp->rx_ring_dma, ioaddr + MRD_SA0); - iowrite16(lp->rx_ring_dma >> 16, ioaddr + MRD_SA1); - - /* set interrupt waiting time and packet numbers */ - iowrite16(0, ioaddr + MT_ICR); - iowrite16(0, ioaddr + MR_ICR); - - /* enable interrupts */ - iowrite16(INT_MASK, ioaddr + MIER); - - /* enable tx and rx */ - iowrite16(lp->mcr0 | 0x0002, ioaddr); - - /* let TX poll the descriptors - we may got called by r6040_tx_timeout which has left - some unsent tx buffers */ - iowrite16(0x01, ioaddr + MTPR); -} - -void r6040_tx_timeout(struct net_device *dev) -{ - struct r6040_private *priv = netdev_priv(dev); - void __iomem *ioaddr = priv->base; - - /* we read MISR, which clears on read (i.e. we may loose an RX interupt, - but this is an error anyhow ... */ - printk(KERN_WARNING "%s: transmit timed out, int enable %4.4x " - "status %4.4x, PHY status %4.4x\n", - dev->name, ioread16(ioaddr + MIER), - ioread16(ioaddr + MISR), - mdio_read(dev, priv->mii_if.phy_id, MII_BMSR)); - - dev->stats.tx_errors++; - - /* Reset MAC and re-init all registers */ - r6040_init_mac_regs(priv); -} - -struct net_device_stats *r6040_get_stats(struct net_device *dev) -{ - struct r6040_private *priv = netdev_priv(dev); - void __iomem *ioaddr = priv->base; - unsigned long flags; - - spin_lock_irqsave(&priv->lock, flags); - dev->stats.rx_crc_errors += ioread8(ioaddr + ME_CNT1); - dev->stats.multicast += ioread8(ioaddr + ME_CNT0); - spin_unlock_irqrestore(&priv->lock, flags); - - return &dev->stats; -} - -/* Stop RDC MAC and Free the allocated resource */ -void r6040_down(struct net_device *dev) -{ - struct r6040_private *lp = netdev_priv(dev); - void __iomem *ioaddr = lp->base; - struct pci_dev *pdev = lp->pdev; - int limit = 2048; - - dbg(DBG_EXIT, "ENTER\n"); - - /* Stop MAC */ - iowrite16(MSK_INT, ioaddr + MIER); /* Mask Off Interrupt */ - iowrite16(MAC_RST, ioaddr + MCR1); /* Reset RDC MAC */ - udelay(100); - while ((ioread16(ioaddr+MCR1) & 1) && limit-- > 0); - - if (limit <= 0) - err("timeout while waiting for reset done.\n"); - - free_irq(dev->irq, dev); - - /* Free RX buffer */ - r6040_free_rxbufs(dev); - - /* Free TX buffer */ - r6040_free_txbufs(dev); - - /* Free Descriptor memory */ - pci_free_consistent(pdev, RX_DESC_SIZE, lp->rx_ring, lp->rx_ring_dma); - pci_free_consistent(pdev, TX_DESC_SIZE, lp->tx_ring, lp->tx_ring_dma); - - dbg(DBG_EXIT, "EXIT\n"); -} - -int r6040_close(struct net_device *dev) -{ - struct r6040_private *lp = netdev_priv(dev); - - dbg(DBG_EXIT, "ENTER\n"); - - /* deleted timer */ - del_timer_sync(&lp->timer); - spin_lock_irq(&lp->lock); - napi_disable(&lp->napi); - netif_stop_queue(dev); - r6040_down(dev); - spin_unlock_irq(&lp->lock); - - dbg(DBG_EXIT, "EXIT\n"); - return 0; -} - -/* Status of PHY CHIP. Returns 0x8000 for full duplex, 0 for half duplex */ -STATIC int phy_mode_chk(struct net_device *dev) -{ - struct r6040_private *lp = netdev_priv(dev); - void __iomem *ioaddr = lp->base; - int phy_dat; - - /* PHY Link Status Check */ - phy_dat = phy_read(ioaddr, lp->phy_addr, 1); - if (!(phy_dat & 0x4)) - phy_dat = 0x8000; /* Link Failed, full duplex */ - - /* PHY Chip Auto-Negotiation Status */ - phy_dat = phy_read(ioaddr, lp->phy_addr, 1); - if (phy_dat & 0x0020) { - /* Auto Negotiation Mode */ - phy_dat = phy_read(ioaddr, lp->phy_addr, 5); - phy_dat &= phy_read(ioaddr, lp->phy_addr, 4); - if (phy_dat & 0x140) - /* Force full duplex */ - phy_dat = 0x8000; - else - phy_dat = 0; - } else { - /* Force Mode */ - phy_dat = phy_read(ioaddr, lp->phy_addr, 0); - if (phy_dat & 0x100) - phy_dat = 0x8000; - else - phy_dat = 0x0000; - } - - dbg(DBG_PHY, "RETURN x%x\n", phy_dat); - return phy_dat; -}; - -void r6040_set_carrier(struct mii_if_info *mii) -{ - if (phy_mode_chk(mii->dev)) { - /* autoneg is off: Link is always assumed to be up */ - if (!netif_carrier_ok(mii->dev)) - netif_carrier_on(mii->dev); - } else - phy_mode_chk(mii->dev); -} - -int r6040_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) -{ - struct r6040_private *lp = netdev_priv(dev); - struct mii_ioctl_data *data = if_mii(rq); - int rc; - - if (!netif_running(dev)) - return -EINVAL; - spin_lock_irq(&lp->lock); - rc = generic_mii_ioctl(&lp->mii_if, data, cmd, NULL); - spin_unlock_irq(&lp->lock); - r6040_set_carrier(&lp->mii_if); - return rc; -} - -int r6040_rx(struct net_device *dev, int limit) -{ - struct r6040_private *priv = netdev_priv(dev); - int count=0; - struct r6040_descriptor *descptr = priv->rx_remove_ptr; - struct sk_buff *skb_ptr, *new_skb; - char obuf[2*32+1] __attribute__ ((unused)); /* for debugging */ - - while (count < limit && !(descptr->status & DESC_STATUS_OWNER_MAC)) { - /* limit not reached and the descriptor belongs to the CPU */ - - dbg(DBG_RX_DESCR, "descptr %p status x%x data len x%x\n", - descptr, descptr->status, descptr->len); - - /* Check for errors */ - if (descptr->status & DESC_STATUS_RX_ERR) { - - dev->stats.rx_errors++; - - if (descptr->status & (DESC_STATUS_RX_ERR_DRIBBLE| - DESC_STATUS_RX_ERR_BUFLEN| - DESC_STATUS_RX_ERR_LONG| - DESC_STATUS_RX_ERR_RUNT)) { - /* packet too long or too short*/ - dev->stats.rx_length_errors++; - } - - if (descptr->status & DESC_STATUS_RX_ERR_CRC) { - dev->stats.rx_crc_errors++; - } - goto next_descr; - } - - /* successful received packet */ - - /* first try to allocate new skb. If this fails - we drop the packet and leave the old skb there.*/ - new_skb = netdev_alloc_skb(dev, MAX_BUF_SIZE); - if (!new_skb) { - dev->stats.rx_dropped++; - goto next_descr; - } - skb_ptr = descptr->skb_ptr; - skb_ptr->dev = priv->dev; - /* Do not count the CRC */ - skb_put(skb_ptr, descptr->len - 4); - pci_unmap_single(priv->pdev, le32_to_cpu(descptr->buf), - MAX_BUF_SIZE, PCI_DMA_FROMDEVICE); - skb_ptr->protocol = eth_type_trans(skb_ptr, priv->dev); - - dbg(DBG_RX_DATA, "rx len x%x: %s...\n", - descptr->len, - hex2str(skb_ptr->data, obuf, sizeof(obuf)/2, '\0')); - - /* Send to upper layer */ - netif_receive_skb(skb_ptr); - dev->last_rx = jiffies; - dev->stats.rx_packets++; - dev->stats.rx_bytes += (descptr->len-4); - - /* put new skb into descriptor */ - descptr->skb_ptr = new_skb; - descptr->buf = cpu_to_le32(pci_map_single(priv->pdev, - descptr->skb_ptr->data, - MAX_BUF_SIZE, PCI_DMA_FROMDEVICE)); - -next_descr: - /* put the descriptor back to the MAC */ - descptr->status = DESC_STATUS_OWNER_MAC; - descptr = descptr->vndescp; - count++; /* shall we count errors and dropped packets as well? */ - } /* while (limit && !(descptr->status & DESC_STATUS_OWNER_MAC)) */ - - /* remember next descriptor to check for rx */ - priv->rx_remove_ptr = descptr; - - return count; -} - -void r6040_tx(struct net_device *dev) -{ - struct r6040_private *priv = netdev_priv(dev); - struct r6040_descriptor *descptr; - void __iomem *ioaddr = priv->base; - struct sk_buff *skb_ptr; - u16 err; - - spin_lock(&priv->lock); - descptr = priv->tx_remove_ptr; - while (priv->tx_free_desc < TX_DCNT) { - /* Check for errors */ - err = ioread16(ioaddr + MLSR); - - if (err & 0x0200) - dev->stats.rx_fifo_errors++; - if (err & (0x2000 | 0x4000)) - dev->stats.tx_carrier_errors++; - - dbg(DBG_TX_DONE, "descptr %p status x%x err x%x jiffies %lu\n", - descptr, descptr->status, err, jiffies); - - if (descptr->status & 0x8000) - break; /* Not complete */ - skb_ptr = descptr->skb_ptr; - pci_unmap_single(priv->pdev, le32_to_cpu(descptr->buf), - skb_ptr->len, PCI_DMA_TODEVICE); - /* Free buffer */ - dev_kfree_skb_irq(skb_ptr); - descptr->skb_ptr = NULL; - /* To next descriptor */ - descptr = descptr->vndescp; - priv->tx_free_desc++; - } - priv->tx_remove_ptr = descptr; - - if (priv->tx_free_desc) - netif_wake_queue(dev); - spin_unlock(&priv->lock); -} - -int r6040_poll(struct napi_struct *napi, int budget) -{ - struct r6040_private *priv = - container_of(napi, struct r6040_private, napi); - struct net_device *dev = priv->dev; - void __iomem *ioaddr = priv->base; - int work_done; - - work_done = r6040_rx(dev, budget); - - dbg(DBG_POLL, "budget x%x done x%x\n", budget, work_done); - - if (work_done < budget) { - netif_rx_complete(dev, napi); - /* Enable RX interrupt */ - iowrite16(ioread16(ioaddr + MIER) | RX_INTS, ioaddr + MIER); - } - return work_done; -} - -/* The RDC interrupt handler. */ -irqreturn_t r6040_interrupt(int irq, void *dev_id) -{ - struct net_device *dev = dev_id; - struct r6040_private *lp = netdev_priv(dev); - void __iomem *ioaddr = lp->base; - u16 status; - - /* Read MISR status and clear */ - status = ioread16(ioaddr + MISR); - - dbg(DBG_IRQ, "status x%x jiffies %lu\n", status, jiffies); - - if (status == 0x0000 || status == 0xffff) - return IRQ_NONE; - - /* rx early / rx finish interrupt - or rx descriptor unavail. */ - if (status & RX_INTS) { - if (status & RX_NO_DESC) { - /* rx descriptor unavail. */ - dev->stats.rx_dropped++; - dev->stats.rx_missed_errors++; - } - /* Mask off RX interrupts */ - iowrite16(ioread16(ioaddr + MIER) & ~RX_INTS, ioaddr + MIER); - netif_rx_schedule(dev, &lp->napi); - } - - /* rx FIFO full */ - if (status & RX_FIFO_FULL) { - dev->stats.rx_fifo_errors++; - } - - /* TX interrupt request */ - if (status & 0x10) - r6040_tx(dev); - - return IRQ_HANDLED; -} - -#ifdef CONFIG_NET_POLL_CONTROLLER -void r6040_poll_controller(struct net_device *dev) -{ - disable_irq(dev->irq); - r6040_interrupt(dev->irq, dev); - enable_irq(dev->irq); -} -#endif - -/* Init RDC MAC */ -int r6040_up(struct net_device *dev) -{ - struct r6040_private *lp = netdev_priv(dev); - void __iomem *ioaddr = lp->base; - int rc; - - dbg(DBG_INIT, "ENTER\n"); - - /* Initialise and alloc RX/TX buffers */ - r6040_init_txbufs(dev); - if ((rc=r6040_alloc_rxbufs(dev))) - return rc; - - /* Read the PHY ID */ - lp->switch_sig = phy_read(ioaddr, 0, 2); - - if (lp->switch_sig == ICPLUS_PHY_ID) { - phy_write(ioaddr, 29, 31, 0x175C); /* Enable registers */ - lp->phy_mode = 0x8000; - } else { - /* PHY Mode Check */ - phy_write(ioaddr, lp->phy_addr, 4, PHY_CAP); - phy_write(ioaddr, lp->phy_addr, 0, PHY_MODE); - - if (PHY_MODE == 0x3100) - lp->phy_mode = phy_mode_chk(dev); - else - lp->phy_mode = (PHY_MODE & 0x0100) ? 0x8000:0x0; - } - -/* configure duplex mode */ - lp->mcr0 |= lp->phy_mode; - - /* improve performance (by RDC guys) */ - phy_write(ioaddr, 30, 17, (phy_read(ioaddr, 30, 17) | 0x4000)); - phy_write(ioaddr, 30, 17, ~((~phy_read(ioaddr, 30, 17)) | 0x2000)); - phy_write(ioaddr, 0, 19, 0x0000); - phy_write(ioaddr, 0, 30, 0x01F0); - - /* Reset MAC and init all registers */ - r6040_init_mac_regs(lp); - - return 0; -} - -/* - A periodic timer routine - Polling PHY Chip Link Status -*/ -void r6040_timer(unsigned long data) -{ - struct net_device *dev = (struct net_device *)data; - struct r6040_private *lp = netdev_priv(dev); - void __iomem *ioaddr = lp->base; - u16 phy_mode; - - /* Polling PHY Chip Status */ - if (PHY_MODE == 0x3100) - phy_mode = phy_mode_chk(dev); - else - phy_mode = (PHY_MODE & 0x0100) ? 0x8000:0x0; - - if (phy_mode != lp->phy_mode) { - lp->phy_mode = phy_mode; - lp->mcr0 = (lp->mcr0 & 0x7fff) | phy_mode; - iowrite16(lp->mcr0, ioaddr); - printk(KERN_INFO "Link Change x%x \n", ioread16(ioaddr)); - } - - /* Timer active again */ - mod_timer(&lp->timer, jiffies + round_jiffies(HZ)); -} - -int r6040_open(struct net_device *dev) -{ - struct r6040_private *lp = netdev_priv(dev); - int ret; - - dbg(DBG_OPEN, "ENTER\n"); - /* Request IRQ and Register interrupt handler */ - ret = request_irq(dev->irq, &r6040_interrupt, - IRQF_SHARED, dev->name, dev); - if (ret) - return ret; - - dbg(DBG_OPEN, "got irq %d\n", dev->irq); - - /* Allocate Descriptor memory */ - lp->rx_ring = - pci_alloc_consistent(lp->pdev, RX_DESC_SIZE, &lp->rx_ring_dma); - if (!lp->rx_ring) - return -ENOMEM; - - dbg(DBG_OPEN, "allocated rx ring\n"); - - lp->tx_ring = - pci_alloc_consistent(lp->pdev, TX_DESC_SIZE, &lp->tx_ring_dma); - if (!lp->tx_ring) { - pci_free_consistent(lp->pdev, RX_DESC_SIZE, lp->rx_ring, - lp->rx_ring_dma); - return -ENOMEM; - } - - dbg(DBG_OPEN, "allocated tx ring\n"); - - if ((ret=r6040_up(dev))) { - pci_free_consistent(lp->pdev, TX_DESC_SIZE, lp->tx_ring, - lp->tx_ring_dma); - pci_free_consistent(lp->pdev, RX_DESC_SIZE, lp->rx_ring, - lp->rx_ring_dma); - return ret; - } - - napi_enable(&lp->napi); - netif_start_queue(dev); - - /* set and active a timer process */ - setup_timer(&lp->timer, r6040_timer, (unsigned long) dev); - if (lp->switch_sig != ICPLUS_PHY_ID) - mod_timer(&lp->timer, jiffies + HZ); - return 0; -} - -int r6040_start_xmit(struct sk_buff *skb, struct net_device *dev) -{ - struct r6040_private *lp = netdev_priv(dev); - struct r6040_descriptor *descptr; - void __iomem *ioaddr = lp->base; - unsigned long flags; - int ret = NETDEV_TX_OK; - - /* Critical Section */ - spin_lock_irqsave(&lp->lock, flags); - - /* TX resource check */ - if (!lp->tx_free_desc) { - spin_unlock_irqrestore(&lp->lock, flags); - netif_stop_queue(dev); - printk(KERN_ERR DRV_NAME ": no tx descriptor\n"); - ret = NETDEV_TX_BUSY; - return ret; - } - - /* Statistic Counter */ - dev->stats.tx_packets++; - dev->stats.tx_bytes += skb->len; - /* Set TX descriptor & Transmit it */ - lp->tx_free_desc--; - descptr = lp->tx_insert_ptr; - if (skb->len < MISR) - descptr->len = MISR; - else - descptr->len = skb->len; - - descptr->skb_ptr = skb; - descptr->buf = cpu_to_le32(pci_map_single(lp->pdev, - skb->data, skb->len, PCI_DMA_TODEVICE)); - - dbg(DBG_TX_DESCR, "desc @ %p: len x%x buf %08x skb->data %p skb->len x%x jiffies %lu\n", - descptr, descptr->len, descptr->buf, skb->data, skb->len, jiffies); - - { - char obuf[2*32+1]; - dbg(DBG_TX_DATA, "tx len x%x: %s\n", - descptr->len, hex2str(skb->data, obuf, sizeof(obuf)/2, '\0')); - } - - descptr->status = 0x8000; - /* Trigger the MAC to check the TX descriptor */ - iowrite16(0x01, ioaddr + MTPR); - lp->tx_insert_ptr = descptr->vndescp; - - /* If no tx resource, stop */ - if (!lp->tx_free_desc) - netif_stop_queue(dev); - - dev->trans_start = jiffies; - spin_unlock_irqrestore(&lp->lock, flags); - return ret; -} - -/*! set MAC addresses and promiscous mode */ -void r6040_multicast_list(struct net_device *dev) -{ - struct r6040_private *lp = netdev_priv(dev); - void __iomem *ioaddr = lp->base; - u16 *adrp; - u16 reg; - unsigned long flags; - struct dev_mc_list *dmi = dev->mc_list; - int i; - char obuf[3*ETH_ALEN] __attribute__ ((unused)); - - /* MAC Address */ - adrp = (u16 *)dev->dev_addr; - iowrite16(adrp[0], ioaddr + MID_0L); - iowrite16(adrp[1], ioaddr + MID_0M); - iowrite16(adrp[2], ioaddr + MID_0H); - - dbg(DBG_MAC_ADDR, "%s: set MAC addr %s\n", - dev->name, hex2str(dev->dev_addr, obuf, ETH_ALEN, ':')); - - /* Promiscous Mode */ - spin_lock_irqsave(&lp->lock, flags); - - /* Clear AMCP & PROM bits */ - reg = ioread16(ioaddr) & ~0x0120; - if (dev->flags & IFF_PROMISC) { - reg |= 0x0020; - lp->mcr0 |= 0x0020; - } - /* Too many multicast addresses - * accept all traffic */ - else if ((dev->mc_count > MCAST_MAX) - || (dev->flags & IFF_ALLMULTI)) - reg |= 0x0020; - - iowrite16(reg, ioaddr); - spin_unlock_irqrestore(&lp->lock, flags); - - /* Build the hash table */ - if (dev->mc_count > MCAST_MAX) { - u16 hash_table[4]; - u32 crc; - - for (i = 0; i < 4; i++) - hash_table[i] = 0; - - for (i = 0; i < dev->mc_count; i++) { - char *addrs = dmi->dmi_addr; - - dmi = dmi->next; - - if (!(*addrs & 1)) - continue; - - crc = ether_crc_le(6, addrs); - crc >>= 26; - hash_table[crc >> 4] |= 1 << (15 - (crc & 0xf)); - } - /* Write the index of the hash table */ - for (i = 0; i < 4; i++) - iowrite16(hash_table[i] << 14, ioaddr + MCR1); - /* Fill the MAC hash tables with their values */ - iowrite16(hash_table[0], ioaddr + MAR0); - iowrite16(hash_table[1], ioaddr + MAR1); - iowrite16(hash_table[2], ioaddr + MAR2); - iowrite16(hash_table[3], ioaddr + MAR3); - } - /* Multicast Address 1~4 case */ - for (i = 0, dmi; (i < dev->mc_count) && (i < MCAST_MAX); i++) { - adrp = (u16 *)dmi->dmi_addr; - iowrite16(adrp[0], ioaddr + MID_1L + 8*i); - iowrite16(adrp[1], ioaddr + MID_1M + 8*i); - iowrite16(adrp[2], ioaddr + MID_1H + 8*i); - dmi = dmi->next; - } - for (i = dev->mc_count; i < MCAST_MAX; i++) { - iowrite16(0xffff, ioaddr + MID_0L + 8*i); - iowrite16(0xffff, ioaddr + MID_0M + 8*i); - iowrite16(0xffff, ioaddr + MID_0H + 8*i); - } -} - -STATIC void netdev_get_drvinfo(struct net_device *dev, - struct ethtool_drvinfo *info) -{ - struct r6040_private *rp = netdev_priv(dev); - - strcpy(info->driver, DRV_NAME); - strcpy(info->version, DRV_VERSION); - strcpy(info->bus_info, pci_name(rp->pdev)); -} - -STATIC int netdev_get_settings(struct net_device *dev, struct ethtool_cmd *cmd) -{ - struct r6040_private *rp = netdev_priv(dev); - int rc; - - spin_lock_irq(&rp->lock); - rc = mii_ethtool_gset(&rp->mii_if, cmd); - spin_unlock_irq(&rp->lock); - - return rc; -} - -STATIC int netdev_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) -{ - struct r6040_private *rp = netdev_priv(dev); - int rc; - - spin_lock_irq(&rp->lock); - rc = mii_ethtool_sset(&rp->mii_if, cmd); - spin_unlock_irq(&rp->lock); - r6040_set_carrier(&rp->mii_if); - - return rc; -} - -STATIC u32 netdev_get_link(struct net_device *dev) -{ - struct r6040_private *rp = netdev_priv(dev); - - return mii_link_ok(&rp->mii_if); -} - -static struct ethtool_ops netdev_ethtool_ops = { - .get_drvinfo = netdev_get_drvinfo, - .get_settings = netdev_get_settings, - .set_settings = netdev_set_settings, - .get_link = netdev_get_link, -}; - -int __devinit r6040_init_one(struct pci_dev *pdev, - const struct pci_device_id *ent) -{ - struct net_device *dev, *parent_dev; - struct r6040_private *lp; - void __iomem *ioaddr; - int err, io_size = R6040_IO_SIZE; - static int card_idx = -1; - long pioaddr; - - printk(KERN_INFO "%s\n", version); - printk(KERN_INFO DRV_NAME ": debug %x\n", debug); - - err = pci_enable_device(pdev); - if (err) - return err; - - /* this should always be supported */ - if (pci_set_dma_mask(pdev, DMA_32BIT_MASK)) { - printk(KERN_ERR DRV_NAME "32-bit PCI DMA addresses" - "not supported by the card\n"); - return -ENODEV; - } - if (pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK)) { - printk(KERN_ERR DRV_NAME "32-bit PCI DMA addresses" - "not supported by the card\n"); - return -ENODEV; - } - - /* IO Size check */ - if (pci_resource_len(pdev, 0) < io_size) { - printk(KERN_ERR "Insufficient PCI resources, aborting\n"); - return -EIO; - } - - pioaddr = pci_resource_start(pdev, 0); /* IO map base address */ - pci_set_master(pdev); - - dev = alloc_etherdev(sizeof(struct r6040_private)); - if (!dev) { - printk(KERN_ERR "Failed to allocate etherdev\n"); - return -ENOMEM; - } - SET_NETDEV_DEV(dev, &pdev->dev); - lp = netdev_priv(dev); - - if (pci_request_regions(pdev, DRV_NAME)) { - printk(KERN_ERR DRV_NAME ": Failed to request PCI regions\n"); - err = -ENODEV; - goto err_out_disable; - } - - ioaddr = pci_iomap(pdev, 0, io_size); - if (!ioaddr) { - printk(KERN_ERR "ioremap failed for device %s\n", - pci_name(pdev)); - return -EIO; - } - - /* Init system & device */ - lp->base = ioaddr; - dev->irq = pdev->irq; - - spin_lock_init(&lp->lock); - pci_set_drvdata(pdev, dev); - - card_idx++; - - /* Link new device into r6040_root_dev */ - lp->pdev = pdev; - - lp->dev = dev; - - /* Init RDC private data */ - lp->mcr0 = 0x1002; - lp->phy_addr = phy_table[card_idx]; - lp->switch_sig = 0; - - /* The RDC-specific entries in the device structure. */ - dev->open = &r6040_open; - dev->hard_start_xmit = &r6040_start_xmit; - dev->stop = &r6040_close; - dev->get_stats = r6040_get_stats; - dev->set_multicast_list = &r6040_multicast_list; - dev->do_ioctl = &r6040_ioctl; - dev->ethtool_ops = &netdev_ethtool_ops; - dev->tx_timeout = &r6040_tx_timeout; - dev->watchdog_timeo = TX_TIMEOUT; - - /* - You must specify a netdevice with a "parent=" parameter, whose address - is copied, or an array of bytes comprising a literal address; otherwise - the (default) address of the Sitecom WL-153 bootloader is used. - */ - memcpy(dev->dev_addr, mac_base, ETH_ALEN); - if (parent) { - parent_dev = __dev_get_by_name(&init_net, parent); - if (parent_dev) - memcpy(dev->dev_addr, parent_dev->dev_addr, ETH_ALEN); - } - dev->dev_addr[ETH_ALEN-1] += card_idx ^ reverse; /* + 0 or 1 */ - -#ifdef CONFIG_NET_POLL_CONTROLLER - dev->poll_controller = r6040_poll_controller; -#endif - netif_napi_add(dev, &lp->napi, r6040_poll, 64); - lp->mii_if.dev = dev; - lp->mii_if.mdio_read = mdio_read; - lp->mii_if.mdio_write = mdio_write; - lp->mii_if.phy_id = lp->phy_addr; - lp->mii_if.phy_id_mask = 0x1f; - lp->mii_if.reg_num_mask = 0x1f; - - if (reverse && ((card_idx & 1) == 0) && (dev_alloc_name(dev, dev->name) - >= 0)) - for (err = strlen(dev->name); err; err--) { - if (dev->name[err - 1]++ != '9') - break; - dev->name[err - 1] = '0'; - } - - /* Register net device. After this dev->name assign */ - err = register_netdev(dev); - if (err) { - printk(KERN_ERR DRV_NAME ": Failed to register net device\n"); - goto err_out_res; - } - - dbg(DBG_INIT, "%s successfully registered\n", dev->name); - return 0; - -err_out_res: - pci_release_regions(pdev); -err_out_disable: - pci_disable_device(pdev); - pci_set_drvdata(pdev, NULL); - free_netdev(dev); - - return err; -} - -void __devexit r6040_remove_one(struct pci_dev *pdev) -{ - struct net_device *dev = pci_get_drvdata(pdev); - - unregister_netdev(dev); - pci_release_regions(pdev); - free_netdev(dev); - pci_disable_device(pdev); - pci_set_drvdata(pdev, NULL); -} - - -static struct pci_device_id r6040_pci_tbl[] = { - { PCI_DEVICE(PCI_VENDOR_ID_RDC, 0x6040) }, - { 0 } -}; -MODULE_DEVICE_TABLE(pci, r6040_pci_tbl); - -static struct pci_driver r6040_driver = { - .name = DRV_NAME, - .id_table = r6040_pci_tbl, - .probe = r6040_init_one, - .remove = __devexit_p(r6040_remove_one), -}; - - -static int __init r6040_init(void) -{ - return pci_register_driver(&r6040_driver); -} - - -static void __exit r6040_cleanup(void) -{ - pci_unregister_driver(&r6040_driver); -} - -module_init(r6040_init); -module_exit(r6040_cleanup); diff --git a/target/linux/rdc/files-2.6.24/include/asm-i386/gpio.h b/target/linux/rdc/files-2.6.24/include/asm-i386/gpio.h deleted file mode 100644 index ff87fca..0000000 --- a/target/linux/rdc/files-2.6.24/include/asm-i386/gpio.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef _ASM_I386_GPIO_H -#define _ASM_I386_GPIO_H - -#include <gpio.h> - -#endif /* _ASM_I386_GPIO_H */ diff --git a/target/linux/rdc/files-2.6.24/include/asm-i386/mach-generic/gpio.h b/target/linux/rdc/files-2.6.24/include/asm-i386/mach-generic/gpio.h deleted file mode 100644 index 5305dcb..0000000 --- a/target/linux/rdc/files-2.6.24/include/asm-i386/mach-generic/gpio.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef __ASM_MACH_GENERIC_GPIO_H -#define __ASM_MACH_GENERIC_GPIO_H - -int gpio_request(unsigned gpio, const char *label); -void gpio_free(unsigned gpio); -int gpio_direction_input(unsigned gpio); -int gpio_direction_output(unsigned gpio, int value); -int gpio_get_value(unsigned gpio); -void gpio_set_value(unsigned gpio, int value); -int gpio_to_irq(unsigned gpio); -int irq_to_gpio(unsigned irq); - -#include <asm-generic/gpio.h> /* cansleep wrappers */ - -#endif /* __ASM_MACH_GENERIC_GPIO_H */ diff --git a/target/linux/rdc/files-2.6.24/include/asm-i386/mach-rdc/gpio.h b/target/linux/rdc/files-2.6.24/include/asm-i386/mach-rdc/gpio.h deleted file mode 100644 index 2368bd7..0000000 --- a/target/linux/rdc/files-2.6.24/include/asm-i386/mach-rdc/gpio.h +++ /dev/null @@ -1,56 +0,0 @@ -#ifndef _RDC_GPIO_H -#define _RDC_GPIO_H - -extern int rdc_gpio_get_value(unsigned gpio); -extern void rdc_gpio_set_value(unsigned gpio, int value); -extern int rdc_gpio_direction_input(unsigned gpio); -extern int rdc_gpio_direction_output(unsigned gpio, int value); - - -/* Wrappers for the arch-neutral GPIO API */ - -static inline int gpio_request(unsigned gpio, const char *label) -{ - /* Not yet implemented */ - return 0; -} - -static inline void gpio_free(unsigned gpio) -{ - /* Not yet implemented */ -} - -static inline int gpio_direction_input(unsigned gpio) -{ - return rdc_gpio_direction_input(gpio); -} - -static inline int gpio_direction_output(unsigned gpio, int value) -{ - return rdc_gpio_direction_output(gpio, value); -} - -static inline int gpio_get_value(unsigned gpio) -{ - return rdc_gpio_get_value(gpio); -} - -static inline void gpio_set_value(unsigned gpio, int value) -{ - rdc_gpio_set_value(gpio, value); -} - -static inline int gpio_to_irq(unsigned gpio) -{ - return gpio; -} - -static inline int irq_to_gpio(unsigned irq) -{ - return irq; -} - -/* For cansleep */ -#include <asm-generic/gpio.h> - -#endif /* _RDC_GPIO_H_ */ diff --git a/target/linux/rdc/files-2.6.24/include/asm-i386/mach-rdc/rdc321x_defs.h b/target/linux/rdc/files-2.6.24/include/asm-i386/mach-rdc/rdc321x_defs.h deleted file mode 100644 index 838ba8f..0000000 --- a/target/linux/rdc/files-2.6.24/include/asm-i386/mach-rdc/rdc321x_defs.h +++ /dev/null @@ -1,6 +0,0 @@ -#define PFX "rdc321x: " - -/* General purpose configuration and data registers */ -#define RDC3210_CFGREG_ADDR 0x0CF8 -#define RDC3210_CFGREG_DATA 0x0CFC -#define RDC_MAX_GPIO 0x3A diff --git a/target/linux/rdc/files-2.6.24/include/asm-x86/gpio.h b/target/linux/rdc/files-2.6.24/include/asm-x86/gpio.h deleted file mode 100644 index ff87fca..0000000 --- a/target/linux/rdc/files-2.6.24/include/asm-x86/gpio.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef _ASM_I386_GPIO_H -#define _ASM_I386_GPIO_H - -#include <gpio.h> - -#endif /* _ASM_I386_GPIO_H */ diff --git a/target/linux/rdc/files-2.6.24/include/asm-x86/mach-generic/gpio.h b/target/linux/rdc/files-2.6.24/include/asm-x86/mach-generic/gpio.h deleted file mode 100644 index 5305dcb..0000000 --- a/target/linux/rdc/files-2.6.24/include/asm-x86/mach-generic/gpio.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef __ASM_MACH_GENERIC_GPIO_H -#define __ASM_MACH_GENERIC_GPIO_H - -int gpio_request(unsigned gpio, const char *label); -void gpio_free(unsigned gpio); -int gpio_direction_input(unsigned gpio); -int gpio_direction_output(unsigned gpio, int value); -int gpio_get_value(unsigned gpio); -void gpio_set_value(unsigned gpio, int value); -int gpio_to_irq(unsigned gpio); -int irq_to_gpio(unsigned irq); - -#include <asm-generic/gpio.h> /* cansleep wrappers */ - -#endif /* __ASM_MACH_GENERIC_GPIO_H */ diff --git a/target/linux/rdc/files-2.6.24/include/asm-x86/mach-rdc/gpio.h b/target/linux/rdc/files-2.6.24/include/asm-x86/mach-rdc/gpio.h deleted file mode 100644 index 2368bd7..0000000 --- a/target/linux/rdc/files-2.6.24/include/asm-x86/mach-rdc/gpio.h +++ /dev/null @@ -1,56 +0,0 @@ -#ifndef _RDC_GPIO_H -#define _RDC_GPIO_H - -extern int rdc_gpio_get_value(unsigned gpio); -extern void rdc_gpio_set_value(unsigned gpio, int value); -extern int rdc_gpio_direction_input(unsigned gpio); -extern int rdc_gpio_direction_output(unsigned gpio, int value); - - -/* Wrappers for the arch-neutral GPIO API */ - -static inline int gpio_request(unsigned gpio, const char *label) -{ - /* Not yet implemented */ - return 0; -} - -static inline void gpio_free(unsigned gpio) -{ - /* Not yet implemented */ -} - -static inline int gpio_direction_input(unsigned gpio) -{ - return rdc_gpio_direction_input(gpio); -} - -static inline int gpio_direction_output(unsigned gpio, int value) -{ - return rdc_gpio_direction_output(gpio, value); -} - -static inline int gpio_get_value(unsigned gpio) -{ - return rdc_gpio_get_value(gpio); -} - -static inline void gpio_set_value(unsigned gpio, int value) -{ - rdc_gpio_set_value(gpio, value); -} - -static inline int gpio_to_irq(unsigned gpio) -{ - return gpio; -} - -static inline int irq_to_gpio(unsigned irq) -{ - return irq; -} - -/* For cansleep */ -#include <asm-generic/gpio.h> - -#endif /* _RDC_GPIO_H_ */ diff --git a/target/linux/rdc/files-2.6.24/include/asm-x86/mach-rdc/rdc321x_defs.h b/target/linux/rdc/files-2.6.24/include/asm-x86/mach-rdc/rdc321x_defs.h deleted file mode 100644 index 838ba8f..0000000 --- a/target/linux/rdc/files-2.6.24/include/asm-x86/mach-rdc/rdc321x_defs.h +++ /dev/null @@ -1,6 +0,0 @@ -#define PFX "rdc321x: " - -/* General purpose configuration and data registers */ -#define RDC3210_CFGREG_ADDR 0x0CF8 -#define RDC3210_CFGREG_DATA 0x0CFC -#define RDC_MAX_GPIO 0x3A diff --git a/target/linux/rdc/patches-2.6.24/001-rdc3210_flash_map.patch b/target/linux/rdc/patches-2.6.24/001-rdc3210_flash_map.patch deleted file mode 100644 index 6da095d..0000000 --- a/target/linux/rdc/patches-2.6.24/001-rdc3210_flash_map.patch +++ /dev/null @@ -1,63 +0,0 @@ ---- a/drivers/mtd/maps/Kconfig -+++ b/drivers/mtd/maps/Kconfig -@@ -117,6 +117,50 @@ config MTD_PNC2000 - PNC-2000 is the name of Network Camera product from PHOTRON - Ltd. in Japan. It uses CFI-compliant flash. - -+config MTD_RDC3210 -+ tristate "CFI Flash device mapped on RDC3210" -+ depends on X86 && MTD_CFI && MTD_PARTITIONS -+ help -+ RDC-3210 is the flash device we find on Ralink reference board. -+ -+config MTD_RDC3210_STATIC_MAP -+ bool "Partitions on RDC3210 mapped statically" if MTD_RDC3210 -+ select MTD_RDC3210_FACTORY_PRESENT -+ help -+ The mapping driver will use the static partition map for the -+ RDC-3210 flash device. -+ -+config MTD_RDC3210_FACTORY_PRESENT -+ bool "Reserve a partition on RDC3210 for factory presets" -+ depends on MTD_RDC3210 -+ default y -+ help -+ The mapping driver will reserve a partition on the RDC-3210 flash -+ device for resetting flash contents to factory defaults. -+ -+config MTD_RDC3210_ALLOW_JFFS2 -+ bool "JFFS2 filesystem usable in a partition on RDC3210" -+ depends on MTD_RDC3210 && !MTD_RDC3210_STATIC_MAP -+ help -+ The mapping driver will align a partition on the RDC-3210 flash -+ device to an erase-block boundary so that a JFFS2 filesystem may -+ reside on it. -+ -+config MTD_RDC3210_SIZE -+ hex "Amount of flash memory on RDC3210" -+ depends on MTD_RDC3210 -+ default "0x400000" -+ help -+ Total size in bytes of the RDC-3210 flash device -+ -+config MTD_RDC3210_BUSWIDTH -+ int "Width of CFI Flash device mapped on RDC3210" -+ depends on MTD_RDC3210 -+ default "2" -+ help -+ Number of bytes addressed on the RDC-3210 flash device before -+ addressing the same chip again -+ - config MTD_SC520CDP - tristate "CFI Flash device mapped on AMD SC520 CDP" - depends on X86 && MTD_CFI && MTD_CONCAT ---- a/drivers/mtd/maps/Makefile -+++ b/drivers/mtd/maps/Makefile -@@ -30,6 +30,7 @@ obj-$(CONFIG_MTD_PMC_MSP_EVM) += pmcms - obj-$(CONFIG_MTD_PMC_MSP_RAMROOT)+= pmcmsp-ramroot.o - obj-$(CONFIG_MTD_PNC2000) += pnc2000.o - obj-$(CONFIG_MTD_PCMCIA) += pcmciamtd.o -+obj-$(CONFIG_MTD_RDC3210) += rdc3210.o - obj-$(CONFIG_MTD_RPXLITE) += rpxlite.o - obj-$(CONFIG_MTD_TQM8XXL) += tqm8xxl.o - obj-$(CONFIG_MTD_SA1100) += sa1100-flash.o diff --git a/target/linux/rdc/patches-2.6.24/001-x86_generic_gpio.patch b/target/linux/rdc/patches-2.6.24/001-x86_generic_gpio.patch deleted file mode 100644 index 11c894b..0000000 --- a/target/linux/rdc/patches-2.6.24/001-x86_generic_gpio.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- a/arch/x86/Kconfig -+++ b/arch/x86/Kconfig -@@ -81,6 +81,10 @@ config GENERIC_BUG - default y - depends on BUG - -+config GENERIC_GPIO -+ bool -+ default n -+ - config GENERIC_HWEIGHT - bool - default y diff --git a/target/linux/rdc/patches-2.6.24/002-r6040_ethernet.patch b/target/linux/rdc/patches-2.6.24/002-r6040_ethernet.patch deleted file mode 100644 index 97d6e7d..0000000 --- a/target/linux/rdc/patches-2.6.24/002-r6040_ethernet.patch +++ /dev/null @@ -1,37 +0,0 @@ ---- a/drivers/net/Kconfig -+++ b/drivers/net/Kconfig -@@ -1449,6 +1449,24 @@ config APRICOT - To compile this driver as a module, choose M here. The module - will be called apricot. - -+config R6040 -+ tristate "RDC Fast-Ethernet support (EXPERIMENTAL)" -+ depends on NET_PCI && EXPERIMENTAL -+ select MII -+ help -+ If you have a network (Ethernet) controller of this type, say Y and -+ read the Ethernet-HOWTO, available from -+ <http://www.tldp.org/docs.html#howto>. -+ -+ To compile this driver as a module, choose M here and read -+ <file:Documentation/networking/net-modules.txt>. The module will be -+ called r6040. -+ -+ -+config R6040_NAPI -+ bool "NAPI support for R6040" -+ depends on R6040 -+ default y - config B44 - tristate "Broadcom 440x/47xx ethernet support" - depends on SSB_POSSIBLE ---- a/drivers/net/Makefile -+++ b/drivers/net/Makefile -@@ -116,6 +116,7 @@ obj-$(CONFIG_LNE390) += lne390.o 8390.o - obj-$(CONFIG_NE3210) += ne3210.o 8390.o - obj-$(CONFIG_SB1250_MAC) += sb1250-mac.o - obj-$(CONFIG_B44) += b44.o -+obj-$(CONFIG_R6040) += r6040.o - obj-$(CONFIG_FORCEDETH) += forcedeth.o - obj-$(CONFIG_NE_H8300) += ne-h8300.o - obj-$(CONFIG_AX88796) += ax88796.o diff --git a/target/linux/rdc/patches-2.6.24/003-rootfstype.patch b/target/linux/rdc/patches-2.6.24/003-rootfstype.patch deleted file mode 100644 index 3ad9047..0000000 --- a/target/linux/rdc/patches-2.6.24/003-rootfstype.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/init/do_mounts.c -+++ b/init/do_mounts.c -@@ -256,6 +256,8 @@ static void __init get_fs_names(char *pa - { - char *s = page; - -+ if (!root_fs_names) -+ root_fs_names = "squashfs,jffs2"; - if (root_fs_names) { - strcpy(page, root_fs_names); - while (*s++) { diff --git a/target/linux/rdc/patches-2.6.24/004-rdc_fixes.patch b/target/linux/rdc/patches-2.6.24/004-rdc_fixes.patch deleted file mode 100644 index a42e540..0000000 --- a/target/linux/rdc/patches-2.6.24/004-rdc_fixes.patch +++ /dev/null @@ -1,73 +0,0 @@ ---- a/arch/x86/Kconfig -+++ b/arch/x86/Kconfig -@@ -304,6 +304,17 @@ config X86_VSMP - supposed to run on these EM64T-based machines. Only choose this option - if you have one of these machines. - -+config X86_RDC -+ bool "Support for RDC 3211 boards" -+ select GENERIC_GPIO -+ select LEDS_GPIO -+ select LEDS_CLASS -+ help -+ Support for RDC 3211 systems. Say 'Y' here if the kernel is -+ supposed to run on an IA-32 RDC R3211 system. -+ Only choose this option if you have such as system, otherwise you -+ should say N here. -+ - endchoice - - config SCHED_NO_NO_OMIT_FRAME_POINTER ---- a/arch/x86/kernel/reboot_fixups_32.c -+++ b/arch/x86/kernel/reboot_fixups_32.c -@@ -30,6 +30,17 @@ static void cs5536_warm_reset(struct pci - udelay(50); /* shouldn't get here but be safe and spin a while */ - } - -+static void r8610_reset(struct pci_dev *dev) -+{ -+ int i; -+ -+ outl(0x80003840,0xCF8); -+ i=inl(0xCFC); -+ i |= 0x1600; -+ outl(i,0xCFC); -+ outb(1,0x92); -+} -+ - struct device_fixup { - unsigned int vendor; - unsigned int device; -@@ -40,6 +51,7 @@ static struct device_fixup fixups_table[ - { PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_5530_LEGACY, cs5530a_warm_reset }, - { PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CS5536_ISA, cs5536_warm_reset }, - { PCI_VENDOR_ID_NS, PCI_DEVICE_ID_NS_SC1100_BRIDGE, cs5530a_warm_reset }, -+{ PCI_VENDOR_ID_RDC, PCI_DEVICE_ID_RDC_R6030, r8610_reset }, - }; - - /* ---- a/arch/x86/Makefile_32 -+++ b/arch/x86/Makefile_32 -@@ -99,6 +99,11 @@ mflags-$(CONFIG_X86_ES7000) := -Iinclude - mcore-$(CONFIG_X86_ES7000) := arch/x86/mach-default - core-$(CONFIG_X86_ES7000) := arch/x86/mach-es7000/ - -+# RDC subarch support -+mflags-$(CONFIG_X86_RDC) := -Iinclude/asm-x86/mach-rdc -+mcore-$(CONFIG_X86_RDC) := arch/x86/mach-default -+core-$(CONFIG_X86_RDC) += arch/x86/mach-rdc/ -+ - # Xen paravirtualization support - core-$(CONFIG_XEN) += arch/x86/xen/ - ---- a/include/asm-x86/timex.h -+++ b/include/asm-x86/timex.h -@@ -7,6 +7,8 @@ - - #ifdef CONFIG_X86_ELAN - # define PIT_TICK_RATE 1189200 /* AMD Elan has different frequency! */ -+#elif defined(CONFIG_X86_RDC) -+# define PIT_TICK_RATE 1041667 /* Underlying HZ for R8610 */ - #else - # define PIT_TICK_RATE 1193182 /* Underlying HZ */ - #endif diff --git a/target/linux/rdc/patches-2.6.24/004-yenta_mystery.patch b/target/linux/rdc/patches-2.6.24/004-yenta_mystery.patch deleted file mode 100644 index 7f202c6..0000000 --- a/target/linux/rdc/patches-2.6.24/004-yenta_mystery.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- a/drivers/pcmcia/yenta_socket.c -+++ b/drivers/pcmcia/yenta_socket.c -@@ -1171,6 +1171,17 @@ static int __devinit yenta_probe (struct - - /* We must finish initialization here */ - -+#ifdef CONFIG_X86_RDC -+/* #define YO_TI1510_DATASHEET_GUY_EXPLAIN_THIS_JUNK 0x0044f044 */ -+#define YO_TI1510_DATASHEET_GUY_EXPLAIN_THIS_JUNK 0x0844b060 -+/* #define YO_TI1510_DATASHEET_GUY_EXPLAIN_THIS_JUNK 0x0044d044 */ -+ -+ config_writel(socket, 32*4, YO_TI1510_DATASHEET_GUY_EXPLAIN_THIS_JUNK); -+ config_writel(socket, 35*4, 0x00000022); -+ config_writel(socket, 36*4, 0x60200000); -+ config_writel(socket, 40*4, 0x7e020000); -+#endif -+ - if (!socket->cb_irq || request_irq(socket->cb_irq, yenta_interrupt, IRQF_SHARED, "yenta", socket)) { - /* No IRQ or request_irq failed. Poll */ - socket->cb_irq = 0; /* But zero is a valid IRQ number. */ diff --git a/target/linux/rdc/patches-2.6.24/005-cmdline_setup.patch b/target/linux/rdc/patches-2.6.24/005-cmdline_setup.patch deleted file mode 100644 index 934d36d..0000000 --- a/target/linux/rdc/patches-2.6.24/005-cmdline_setup.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- a/arch/x86/kernel/setup_32.c -+++ b/arch/x86/kernel/setup_32.c -@@ -609,6 +609,7 @@ void __init setup_arch(char **cmdline_p) - print_memory_map("user"); - } - -+ strcat(boot_command_line, " init=/etc/preinit console=ttyS0,38400"); - strlcpy(command_line, boot_command_line, COMMAND_LINE_SIZE); - *cmdline_p = command_line; - diff --git a/target/linux/rdc/patches-2.6.24/005-fix_amit_breakage.patch b/target/linux/rdc/patches-2.6.24/005-fix_amit_breakage.patch deleted file mode 100644 index 5be29df..0000000 --- a/target/linux/rdc/patches-2.6.24/005-fix_amit_breakage.patch +++ /dev/null @@ -1,40 +0,0 @@ ---- a/arch/x86/boot/boot.h -+++ b/arch/x86/boot/boot.h -@@ -60,7 +60,7 @@ static inline void outl(u32 v, u16 port) - { - asm volatile("outl %0,%1" : : "a" (v), "dN" (port)); - } --static inline u32 inl(u32 port) -+static inline u32 inl(u16 port) - { - u32 v; - asm volatile("inl %1,%0" : "=a" (v) : "dN" (port)); ---- a/arch/x86/boot/pm.c -+++ b/arch/x86/boot/pm.c -@@ -16,6 +16,9 @@ - - #include "boot.h" - #include <asm/segment.h> -+#ifdef CONFIG_X86_RDC -+#include <asm/mach-rdc/rdc321x_defs.h> -+#endif - - /* - * Invoke the realmode switch hook if present; otherwise -@@ -160,6 +163,16 @@ void go_to_protected_mode(void) - die(); - } - -+#ifdef CONFIG_X86_RDC -+ { -+ u32 bootctl; -+ -+ outl(0x80003840, RDC3210_CFGREG_ADDR); -+ bootctl = inl(RDC3210_CFGREG_DATA) | 0x07ff0000; -+ outl(bootctl, RDC3210_CFGREG_DATA); -+ } -+#endif -+ - /* Reset coprocessor (IGNNE#) */ - reset_coprocessor(); - diff --git a/target/linux/rdc/patches-2.6.24/006-pci_ids.patch b/target/linux/rdc/patches-2.6.24/006-pci_ids.patch deleted file mode 100644 index 96ab2b1..0000000 --- a/target/linux/rdc/patches-2.6.24/006-pci_ids.patch +++ /dev/null @@ -1,16 +0,0 @@ ---- a/include/linux/pci_ids.h -+++ b/include/linux/pci_ids.h -@@ -2106,6 +2106,13 @@ - #define PCI_DEVICE_ID_HERC_WIN 0x5732 - #define PCI_DEVICE_ID_HERC_UNI 0x5832 - -+#define PCI_VENDOR_ID_RDC 0x17f3 -+#define PCI_DEVICE_ID_RDC_R6020 0x6020 -+#define PCI_DEVICE_ID_RDC_R6030 0x6030 -+#define PCI_DEVICE_ID_RDC_R6040 0x6040 -+#define PCI_DEVICE_ID_RDC_R6060 0x6060 -+#define PCI_DEVICE_ID_RDC_R6061 0x6061 -+ - #define PCI_VENDOR_ID_SITECOM 0x182d - #define PCI_DEVICE_ID_SITECOM_DC105V2 0x3069 - diff --git a/target/linux/rdc/patches-2.6.24/600-x86_lzma.patch b/target/linux/rdc/patches-2.6.24/600-x86_lzma.patch deleted file mode 100644 index 9d94950..0000000 --- a/target/linux/rdc/patches-2.6.24/600-x86_lzma.patch +++ /dev/null @@ -1,62 +0,0 @@ ---- a/scripts/Makefile.lib -+++ b/scripts/Makefile.lib -@@ -166,4 +166,9 @@ cmd_objcopy = $(OBJCOPY) $(OBJCOPYFLAGS) - quiet_cmd_gzip = GZIP $@ - cmd_gzip = gzip -f -9 < $< > $@ - -- -+# LZMA -+# -+quiet_cmd_lzma = LZMA $@ -+cmd_lzma = bash -e scripts/lzma_kern $< $@ -lc7 -lp0 -pb0 -+# to use lzmacomp, -+# cmd_lzma = lzmacomp $< 700 > $@ ---- /dev/null -+++ b/scripts/lzma_kern -@@ -0,0 +1,4 @@ -+get-size() { echo "$5" ;} -+printf -v len '%.8x' "$(get-size $(ls -l "$1"))" -+lzma e "$@" -+echo -ne "\x$(echo $len | cut -c 7,8)\x$(echo $len | cut -c 5,6)\x$(echo $len | cut -c 3,4)\x$(echo $len | cut -c 1,2)" >> "$2" ---- a/arch/x86/boot/compressed/Makefile_32 -+++ b/arch/x86/boot/compressed/Makefile_32 -@@ -4,8 +4,8 @@ - # create a compressed vmlinux image from the original vmlinux - # - --targets := vmlinux vmlinux.bin vmlinux.bin.gz head_32.o misc_32.o piggy.o \ -- vmlinux.bin.all vmlinux.relocs -+targets := vmlinux vmlinux.bin vmlinux.bin.lzma head_32.o piggy.o \ -+ vmlinux.bin.all vmlinux.relocs lzma_misc.o - EXTRA_AFLAGS := -traditional - - LDFLAGS_vmlinux := -T -@@ -17,7 +17,7 @@ KBUILD_CFLAGS := -m32 -D__KERNEL__ $(LI - $(call cc-option,-fno-stack-protector) - LDFLAGS := -m elf_i386 - --$(obj)/vmlinux: $(src)/vmlinux_32.lds $(obj)/head_32.o $(obj)/misc_32.o $(obj)/piggy.o FORCE -+$(obj)/vmlinux: $(src)/vmlinux_32.lds $(obj)/head_32.o $(obj)/lzma_misc.o $(obj)/piggy.o FORCE - $(call if_changed,ld) - @: - -@@ -37,14 +37,14 @@ $(obj)/vmlinux.bin.all: $(vmlinux.bin.al - $(call if_changed,relocbin) - - ifdef CONFIG_RELOCATABLE --$(obj)/vmlinux.bin.gz: $(obj)/vmlinux.bin.all FORCE -- $(call if_changed,gzip) -+$(obj)/vmlinux.bin.lzma: $(obj)/vmlinux.bin.all FORCE -+ $(call if_changed,lzma) - else --$(obj)/vmlinux.bin.gz: $(obj)/vmlinux.bin FORCE -- $(call if_changed,gzip) -+$(obj)/vmlinux.bin.lzma: $(obj)/vmlinux.bin FORCE -+ $(call if_changed,lzma) - endif - - LDFLAGS_piggy.o := -r --format binary --oformat elf32-i386 -T - --$(obj)/piggy.o: $(src)/vmlinux_32.scr $(obj)/vmlinux.bin.gz FORCE -+$(obj)/piggy.o: $(src)/vmlinux_32.scr $(obj)/vmlinux.bin.lzma FORCE - $(call if_changed,ld) diff --git a/target/linux/rdc/patches-2.6.25/001-rdc3210_flash_map.patch b/target/linux/rdc/patches-2.6.25/001-rdc3210_flash_map.patch deleted file mode 100644 index 4c12471..0000000 --- a/target/linux/rdc/patches-2.6.25/001-rdc3210_flash_map.patch +++ /dev/null @@ -1,63 +0,0 @@ ---- a/drivers/mtd/maps/Kconfig -+++ b/drivers/mtd/maps/Kconfig -@@ -110,6 +110,50 @@ - Sun Microsystems boardsets. This driver will require CFI support - in the kernel, so if you did not enable CFI previously, do that now. - -+config MTD_RDC3210 -+ tristate "CFI Flash device mapped on RDC3210" -+ depends on X86 && MTD_CFI && MTD_PARTITIONS -+ help -+ RDC-3210 is the flash device we find on Ralink reference board. -+ -+config MTD_RDC3210_STATIC_MAP -+ bool "Partitions on RDC3210 mapped statically" if MTD_RDC3210 -+ select MTD_RDC3210_FACTORY_PRESENT -+ help -+ The mapping driver will use the static partition map for the -+ RDC-3210 flash device. -+ -+config MTD_RDC3210_FACTORY_PRESENT -+ bool "Reserve a partition on RDC3210 for factory presets" -+ depends on MTD_RDC3210 -+ default y -+ help -+ The mapping driver will reserve a partition on the RDC-3210 flash -+ device for resetting flash contents to factory defaults. -+ -+config MTD_RDC3210_ALLOW_JFFS2 -+ bool "JFFS2 filesystem usable in a partition on RDC3210" -+ depends on MTD_RDC3210 && !MTD_RDC3210_STATIC_MAP -+ help -+ The mapping driver will align a partition on the RDC-3210 flash -+ device to an erase-block boundary so that a JFFS2 filesystem may -+ reside on it. -+ -+config MTD_RDC3210_SIZE -+ hex "Amount of flash memory on RDC3210" -+ depends on MTD_RDC3210 -+ default "0x400000" -+ help -+ Total size in bytes of the RDC-3210 flash device -+ -+config MTD_RDC3210_BUSWIDTH -+ int "Width of CFI Flash device mapped on RDC3210" -+ depends on MTD_RDC3210 -+ default "2" -+ help -+ Number of bytes addressed on the RDC-3210 flash device before -+ addressing the same chip again -+ - config MTD_SC520CDP - tristate "CFI Flash device mapped on AMD SC520 CDP" - depends on X86 && MTD_CFI && MTD_CONCAT ---- a/drivers/mtd/maps/Makefile -+++ b/drivers/mtd/maps/Makefile -@@ -29,6 +29,7 @@ - obj-$(CONFIG_MTD_PMC_MSP_EVM) += pmcmsp-flash.o - obj-$(CONFIG_MTD_PMC_MSP_RAMROOT)+= pmcmsp-ramroot.o - obj-$(CONFIG_MTD_PCMCIA) += pcmciamtd.o -+obj-$(CONFIG_MTD_RDC3210) += rdc3210.o - obj-$(CONFIG_MTD_RPXLITE) += rpxlite.o - obj-$(CONFIG_MTD_TQM8XXL) += tqm8xxl.o - obj-$(CONFIG_MTD_SA1100) += sa1100-flash.o diff --git a/target/linux/rdc/patches-2.6.25/003-rootfstype.patch b/target/linux/rdc/patches-2.6.25/003-rootfstype.patch deleted file mode 100644 index 55a4cd4..0000000 --- a/target/linux/rdc/patches-2.6.25/003-rootfstype.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/init/do_mounts.c -+++ b/init/do_mounts.c -@@ -163,6 +163,8 @@ - { - char *s = page; - -+ if (!root_fs_names) -+ root_fs_names = "squashfs,jffs2"; - if (root_fs_names) { - strcpy(page, root_fs_names); - while (*s++) { diff --git a/target/linux/rdc/patches-2.6.25/004-yenta_mystery.patch b/target/linux/rdc/patches-2.6.25/004-yenta_mystery.patch deleted file mode 100644 index 7faabdf..0000000 --- a/target/linux/rdc/patches-2.6.25/004-yenta_mystery.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- linux-2.6.24.7.orig/drivers/pcmcia/yenta_socket.c 2008-10-26 08:30:07.000000000 -0700 -+++ linux-2.6.24.7/drivers/pcmcia/yenta_socket.c 2008-10-26 08:54:27.000000000 -0700 -@@ -1171,6 +1171,17 @@ - - /* We must finish initialization here */ - -+#ifdef CONFIG_X86_RDC -+/* #define YO_TI1510_DATASHEET_GUY_EXPLAIN_THIS_JUNK 0x0044f044 */ -+#define YO_TI1510_DATASHEET_GUY_EXPLAIN_THIS_JUNK 0x0844b060 -+/* #define YO_TI1510_DATASHEET_GUY_EXPLAIN_THIS_JUNK 0x0044d044 */ -+ -+ config_writel(socket, 32*4, YO_TI1510_DATASHEET_GUY_EXPLAIN_THIS_JUNK); -+ config_writel(socket, 35*4, 0x00000022); -+ config_writel(socket, 36*4, 0x60200000); -+ config_writel(socket, 40*4, 0x7e020000); -+#endif -+ - if (!socket->cb_irq || request_irq(socket->cb_irq, yenta_interrupt, IRQF_SHARED, "yenta", socket)) { - /* No IRQ or request_irq failed. Poll */ - socket->cb_irq = 0; /* But zero is a valid IRQ number. */ diff --git a/target/linux/rdc/patches-2.6.25/005-fix_amit_breakage.patch b/target/linux/rdc/patches-2.6.25/005-fix_amit_breakage.patch deleted file mode 100644 index eabfd04..0000000 --- a/target/linux/rdc/patches-2.6.25/005-fix_amit_breakage.patch +++ /dev/null @@ -1,42 +0,0 @@ -diff -ru linux-2.6.24.7.orig/arch/x86/boot/boot.h linux-2.6.24.7/arch/x86/boot/boot.h ---- linux-2.6.24.7.orig/arch/x86/boot/boot.h 2008-10-26 20:18:14.000000000 -0700 -+++ linux-2.6.24.7/arch/x86/boot/boot.h 2008-10-26 20:18:36.000000000 -0700 -@@ -60,7 +60,7 @@ - { - asm volatile("outl %0,%1" : : "a" (v), "dN" (port)); - } --static inline u32 inl(u32 port) -+static inline u32 inl(u16 port) - { - u32 v; - asm volatile("inl %1,%0" : "=a" (v) : "dN" (port)); -diff -ru linux-2.6.24.7.orig/arch/x86/boot/pm.c linux-2.6.24.7/arch/x86/boot/pm.c ---- linux-2.6.24.7.orig/arch/x86/boot/pm.c 2008-10-26 19:55:50.000000000 -0700 -+++ linux-2.6.24.7/arch/x86/boot/pm.c 2008-10-26 21:38:12.000000000 -0700 -@@ -16,6 +16,9 @@ - - #include "boot.h" - #include <asm/segment.h> -+#ifdef CONFIG_X86_RDC -+#include <asm/mach-rdc/rdc321x_defs.h> -+#endif - - /* - * Invoke the realmode switch hook if present; otherwise -@@ -160,6 +163,16 @@ - die(); - } - -+#ifdef CONFIG_X86_RDC -+ { -+ u32 bootctl; -+ -+ outl(0x80003840, RDC3210_CFGREG_ADDR); -+ bootctl = inl(RDC3210_CFGREG_DATA) | 0x07ff0000; -+ outl(bootctl, RDC3210_CFGREG_DATA); -+ } -+#endif -+ - /* Reset coprocessor (IGNNE#) */ - reset_coprocessor(); - diff --git a/target/linux/rdc/patches-2.6.25/600-x86_lzma.patch b/target/linux/rdc/patches-2.6.25/600-x86_lzma.patch deleted file mode 100644 index 5e0c8d7..0000000 --- a/target/linux/rdc/patches-2.6.25/600-x86_lzma.patch +++ /dev/null @@ -1,63 +0,0 @@ ---- a/scripts/Makefile.lib -+++ b/scripts/Makefile.lib -@@ -172,4 +172,9 @@ - quiet_cmd_gzip = GZIP $@ - cmd_gzip = gzip -f -9 < $< > $@ - -- -+# LZMA -+# -+quiet_cmd_lzma = LZMA $@ -+cmd_lzma = bash -e scripts/lzma_kern $< $@ -lc7 -lp0 -pb0 -+# to use lzmacomp, -+# cmd_lzma = lzmacomp $< 700 > $@ ---- /dev/null -+++ b/scripts/lzma_kern -@@ -0,0 +1,4 @@ -+get-size() { echo "$5" ;} -+printf -v len '%.8x' "$(get-size $(ls -l "$1"))" -+lzma e "$@" -+echo -ne "\x$(echo $len | cut -c 7,8)\x$(echo $len | cut -c 5,6)\x$(echo $len | cut -c 3,4)\x$(echo $len | cut -c 1,2)" >> "$2" ---- a/arch/x86/boot/compressed/Makefile -+++ b/arch/x86/boot/compressed/Makefile -@@ -4,7 +4,7 @@ - # create a compressed vmlinux image from the original vmlinux - # - --targets := vmlinux vmlinux.bin vmlinux.bin.gz head_$(BITS).o misc.o piggy.o -+targets := vmlinux vmlinux.bin vmlinux.bin.lzma head_$(BITS).o lzma_misc.o piggy.o - - KBUILD_CFLAGS := -m$(BITS) -D__KERNEL__ $(LINUX_INCLUDE) -O2 - KBUILD_CFLAGS += -fno-strict-aliasing -fPIC -@@ -18,7 +18,7 @@ - LDFLAGS := -m elf_$(UTS_MACHINE) - LDFLAGS_vmlinux := -T - --$(obj)/vmlinux: $(src)/vmlinux_$(BITS).lds $(obj)/head_$(BITS).o $(obj)/misc.o $(obj)/piggy.o FORCE -+$(obj)/vmlinux: $(src)/vmlinux_$(BITS).lds $(obj)/head_$(BITS).o $(obj)/lzma_misc.o $(obj)/piggy.o FORCE - $(call if_changed,ld) - @: - -@@ -44,11 +44,11 @@ - $(call if_changed,relocbin) - - ifdef CONFIG_RELOCATABLE --$(obj)/vmlinux.bin.gz: $(obj)/vmlinux.bin.all FORCE -- $(call if_changed,gzip) -+$(obj)/vmlinux.bin.lzma: $(obj)/vmlinux.bin.all FORCE -+ $(call if_changed,lzma) - else --$(obj)/vmlinux.bin.gz: $(obj)/vmlinux.bin FORCE -- $(call if_changed,gzip) -+$(obj)/vmlinux.bin.lzma: $(obj)/vmlinux.bin FORCE -+ $(call if_changed,lzma) - endif - LDFLAGS_piggy.o := -r --format binary --oformat elf32-i386 -T - -@@ -60,5 +60,5 @@ - endif - - --$(obj)/piggy.o: $(obj)/vmlinux.scr $(obj)/vmlinux.bin.gz FORCE -+$(obj)/piggy.o: $(obj)/vmlinux.scr $(obj)/vmlinux.bin.lzma FORCE - $(call if_changed,ld) diff --git a/target/linux/rdc/patches-2.6.27/001-rdc3210_flash_map.patch b/target/linux/rdc/patches-2.6.27/001-rdc3210_flash_map.patch deleted file mode 100644 index 4c12471..0000000 --- a/target/linux/rdc/patches-2.6.27/001-rdc3210_flash_map.patch +++ /dev/null @@ -1,63 +0,0 @@ ---- a/drivers/mtd/maps/Kconfig -+++ b/drivers/mtd/maps/Kconfig -@@ -110,6 +110,50 @@ - Sun Microsystems boardsets. This driver will require CFI support - in the kernel, so if you did not enable CFI previously, do that now. - -+config MTD_RDC3210 -+ tristate "CFI Flash device mapped on RDC3210" -+ depends on X86 && MTD_CFI && MTD_PARTITIONS -+ help -+ RDC-3210 is the flash device we find on Ralink reference board. -+ -+config MTD_RDC3210_STATIC_MAP -+ bool "Partitions on RDC3210 mapped statically" if MTD_RDC3210 -+ select MTD_RDC3210_FACTORY_PRESENT -+ help -+ The mapping driver will use the static partition map for the -+ RDC-3210 flash device. -+ -+config MTD_RDC3210_FACTORY_PRESENT -+ bool "Reserve a partition on RDC3210 for factory presets" -+ depends on MTD_RDC3210 -+ default y -+ help -+ The mapping driver will reserve a partition on the RDC-3210 flash -+ device for resetting flash contents to factory defaults. -+ -+config MTD_RDC3210_ALLOW_JFFS2 -+ bool "JFFS2 filesystem usable in a partition on RDC3210" -+ depends on MTD_RDC3210 && !MTD_RDC3210_STATIC_MAP -+ help -+ The mapping driver will align a partition on the RDC-3210 flash -+ device to an erase-block boundary so that a JFFS2 filesystem may -+ reside on it. -+ -+config MTD_RDC3210_SIZE -+ hex "Amount of flash memory on RDC3210" -+ depends on MTD_RDC3210 -+ default "0x400000" -+ help -+ Total size in bytes of the RDC-3210 flash device -+ -+config MTD_RDC3210_BUSWIDTH -+ int "Width of CFI Flash device mapped on RDC3210" -+ depends on MTD_RDC3210 -+ default "2" -+ help -+ Number of bytes addressed on the RDC-3210 flash device before -+ addressing the same chip again -+ - config MTD_SC520CDP - tristate "CFI Flash device mapped on AMD SC520 CDP" - depends on X86 && MTD_CFI && MTD_CONCAT ---- a/drivers/mtd/maps/Makefile -+++ b/drivers/mtd/maps/Makefile -@@ -29,6 +29,7 @@ - obj-$(CONFIG_MTD_PMC_MSP_EVM) += pmcmsp-flash.o - obj-$(CONFIG_MTD_PMC_MSP_RAMROOT)+= pmcmsp-ramroot.o - obj-$(CONFIG_MTD_PCMCIA) += pcmciamtd.o -+obj-$(CONFIG_MTD_RDC3210) += rdc3210.o - obj-$(CONFIG_MTD_RPXLITE) += rpxlite.o - obj-$(CONFIG_MTD_TQM8XXL) += tqm8xxl.o - obj-$(CONFIG_MTD_SA1100) += sa1100-flash.o diff --git a/target/linux/rdc/patches-2.6.27/002-cmdline_setup.patch b/target/linux/rdc/patches-2.6.27/002-cmdline_setup.patch deleted file mode 100644 index ee36576..0000000 --- a/target/linux/rdc/patches-2.6.27/002-cmdline_setup.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- a/arch/x86/kernel/setup.c 2009-04-24 11:37:41.000000000 +0200 -+++ b/arch/x86/kernel/setup.c 2009-04-24 11:38:43.000000000 +0200 -@@ -701,6 +701,7 @@ - bss_resource.start = virt_to_phys(&__bss_start); - bss_resource.end = virt_to_phys(&__bss_stop)-1; - -+ strcat(boot_command_line, " init=/etc/preinit console=ttyS0,38400"); - strlcpy(command_line, boot_command_line, COMMAND_LINE_SIZE); - *cmdline_p = command_line; - diff --git a/target/linux/rdc/patches-2.6.27/003-rootfstype.patch b/target/linux/rdc/patches-2.6.27/003-rootfstype.patch deleted file mode 100644 index 55a4cd4..0000000 --- a/target/linux/rdc/patches-2.6.27/003-rootfstype.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/init/do_mounts.c -+++ b/init/do_mounts.c -@@ -163,6 +163,8 @@ - { - char *s = page; - -+ if (!root_fs_names) -+ root_fs_names = "squashfs,jffs2"; - if (root_fs_names) { - strcpy(page, root_fs_names); - while (*s++) { diff --git a/target/linux/rdc/patches-2.6.27/004-yenta_mystery.patch b/target/linux/rdc/patches-2.6.27/004-yenta_mystery.patch deleted file mode 100644 index 7faabdf..0000000 --- a/target/linux/rdc/patches-2.6.27/004-yenta_mystery.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- linux-2.6.24.7.orig/drivers/pcmcia/yenta_socket.c 2008-10-26 08:30:07.000000000 -0700 -+++ linux-2.6.24.7/drivers/pcmcia/yenta_socket.c 2008-10-26 08:54:27.000000000 -0700 -@@ -1171,6 +1171,17 @@ - - /* We must finish initialization here */ - -+#ifdef CONFIG_X86_RDC -+/* #define YO_TI1510_DATASHEET_GUY_EXPLAIN_THIS_JUNK 0x0044f044 */ -+#define YO_TI1510_DATASHEET_GUY_EXPLAIN_THIS_JUNK 0x0844b060 -+/* #define YO_TI1510_DATASHEET_GUY_EXPLAIN_THIS_JUNK 0x0044d044 */ -+ -+ config_writel(socket, 32*4, YO_TI1510_DATASHEET_GUY_EXPLAIN_THIS_JUNK); -+ config_writel(socket, 35*4, 0x00000022); -+ config_writel(socket, 36*4, 0x60200000); -+ config_writel(socket, 40*4, 0x7e020000); -+#endif -+ - if (!socket->cb_irq || request_irq(socket->cb_irq, yenta_interrupt, IRQF_SHARED, "yenta", socket)) { - /* No IRQ or request_irq failed. Poll */ - socket->cb_irq = 0; /* But zero is a valid IRQ number. */ diff --git a/target/linux/rdc/patches-2.6.27/005-fix_amit_breakage.patch b/target/linux/rdc/patches-2.6.27/005-fix_amit_breakage.patch deleted file mode 100644 index eabfd04..0000000 --- a/target/linux/rdc/patches-2.6.27/005-fix_amit_breakage.patch +++ /dev/null @@ -1,42 +0,0 @@ -diff -ru linux-2.6.24.7.orig/arch/x86/boot/boot.h linux-2.6.24.7/arch/x86/boot/boot.h ---- linux-2.6.24.7.orig/arch/x86/boot/boot.h 2008-10-26 20:18:14.000000000 -0700 -+++ linux-2.6.24.7/arch/x86/boot/boot.h 2008-10-26 20:18:36.000000000 -0700 -@@ -60,7 +60,7 @@ - { - asm volatile("outl %0,%1" : : "a" (v), "dN" (port)); - } --static inline u32 inl(u32 port) -+static inline u32 inl(u16 port) - { - u32 v; - asm volatile("inl %1,%0" : "=a" (v) : "dN" (port)); -diff -ru linux-2.6.24.7.orig/arch/x86/boot/pm.c linux-2.6.24.7/arch/x86/boot/pm.c ---- linux-2.6.24.7.orig/arch/x86/boot/pm.c 2008-10-26 19:55:50.000000000 -0700 -+++ linux-2.6.24.7/arch/x86/boot/pm.c 2008-10-26 21:38:12.000000000 -0700 -@@ -16,6 +16,9 @@ - - #include "boot.h" - #include <asm/segment.h> -+#ifdef CONFIG_X86_RDC -+#include <asm/mach-rdc/rdc321x_defs.h> -+#endif - - /* - * Invoke the realmode switch hook if present; otherwise -@@ -160,6 +163,16 @@ - die(); - } - -+#ifdef CONFIG_X86_RDC -+ { -+ u32 bootctl; -+ -+ outl(0x80003840, RDC3210_CFGREG_ADDR); -+ bootctl = inl(RDC3210_CFGREG_DATA) | 0x07ff0000; -+ outl(bootctl, RDC3210_CFGREG_DATA); -+ } -+#endif -+ - /* Reset coprocessor (IGNNE#) */ - reset_coprocessor(); - diff --git a/target/linux/rdc/patches-2.6.27/006-bzip2_lzma_x86.patch b/target/linux/rdc/patches-2.6.27/006-bzip2_lzma_x86.patch deleted file mode 100644 index f11693f..0000000 --- a/target/linux/rdc/patches-2.6.27/006-bzip2_lzma_x86.patch +++ /dev/null @@ -1,3139 +0,0 @@ -diff -purN linux-2.6.27.6/arch/arm/boot/compressed/Makefile linux-2.6.27.6udpcast/arch/arm/boot/compressed/Makefile ---- linux-2.6.27.6/arch/arm/boot/compressed/Makefile 2008-11-13 18:56:21.000000000 +0100 -+++ linux-2.6.27.6udpcast/arch/arm/boot/compressed/Makefile 2008-11-16 23:02:55.000000000 +0100 -@@ -67,8 +67,15 @@ endif - - SEDFLAGS = s/TEXT_START/$(ZTEXTADDR)/;s/BSS_START/$(ZBSSADDR)/ - --targets := vmlinux vmlinux.lds piggy.gz piggy.o font.o font.c \ -- head.o misc.o $(OBJS) -+suffix_$(CONFIG_KERNEL_GZIP) = gz -+suffix_$(CONFIG_KERNEL_BZIP2) = bz2 -+suffix_$(CONFIG_KERNEL_LZMA) = lzma -+ -+targets := vmlinux vmlinux.lds \ -+ piggy.gz piggy.gz.o \ -+ piggy.bz2 piggy.bz2.o \ -+ piggy.lzma piggy.lzma.o \ -+ font.o font.c head.o misc.o $(OBJS) - - ifeq ($(CONFIG_FTRACE),y) - ORIG_CFLAGS := $(KBUILD_CFLAGS) -@@ -95,7 +102,7 @@ LDFLAGS_vmlinux += -p --no-undefined -X - # would otherwise mess up our GOT table - CFLAGS_misc.o := -Dstatic= - --$(obj)/vmlinux: $(obj)/vmlinux.lds $(obj)/$(HEAD) $(obj)/piggy.o \ -+$(obj)/vmlinux: $(obj)/vmlinux.lds $(obj)/$(HEAD) $(obj)/piggy.$(suffix_y).o \ - $(addprefix $(obj)/, $(OBJS)) FORCE - $(call if_changed,ld) - @: -@@ -103,7 +110,17 @@ $(obj)/vmlinux: $(obj)/vmlinux.lds $(obj - $(obj)/piggy.gz: $(obj)/../Image FORCE - $(call if_changed,gzip) - --$(obj)/piggy.o: $(obj)/piggy.gz FORCE -+$(obj)/piggy.bz2: $(obj)/../Image FORCE -+ $(call if_changed,bzip2) -+ -+$(obj)/piggy.lzma: $(obj)/../Image FORCE -+ $(call if_changed,lzma) -+ -+$(obj)/piggy.gz.o: $(obj)/piggy.gz FORCE -+ -+$(obj)/piggy.bz2.o: $(obj)/piggy.bz2 FORCE -+ -+$(obj)/piggy.lzma.o: $(obj)/piggy.lzma FORCE - - CFLAGS_font.o := -Dstatic= - -diff -purN linux-2.6.27.6/arch/arm/boot/compressed/misc.c linux-2.6.27.6udpcast/arch/arm/boot/compressed/misc.c ---- linux-2.6.27.6/arch/arm/boot/compressed/misc.c 2008-11-13 18:56:21.000000000 +0100 -+++ linux-2.6.27.6udpcast/arch/arm/boot/compressed/misc.c 2008-11-16 23:02:55.000000000 +0100 -@@ -169,116 +169,34 @@ static inline __ptr_t memcpy(__ptr_t __d - /* - * gzip delarations - */ --#define OF(args) args - #define STATIC static - --typedef unsigned char uch; --typedef unsigned short ush; - typedef unsigned long ulg; - --#define WSIZE 0x8000 /* Window size must be at least 32k, */ -- /* and a power of two */ -- --static uch *inbuf; /* input buffer */ --static uch window[WSIZE]; /* Sliding window buffer */ -- --static unsigned insize; /* valid bytes in inbuf */ --static unsigned inptr; /* index of next byte to be processed in inbuf */ --static unsigned outcnt; /* bytes in output buffer */ -- --/* gzip flag byte */ --#define ASCII_FLAG 0x01 /* bit 0 set: file probably ascii text */ --#define CONTINUATION 0x02 /* bit 1 set: continuation of multi-part gzip file */ --#define EXTRA_FIELD 0x04 /* bit 2 set: extra field present */ --#define ORIG_NAME 0x08 /* bit 3 set: original file name present */ --#define COMMENT 0x10 /* bit 4 set: file comment present */ --#define ENCRYPTED 0x20 /* bit 5 set: file is encrypted */ --#define RESERVED 0xC0 /* bit 6,7: reserved */ -- --#define get_byte() (inptr < insize ? inbuf[inptr++] : fill_inbuf()) -- --/* Diagnostic functions */ --#ifdef DEBUG --# define Assert(cond,msg) {if(!(cond)) error(msg);} --# define Trace(x) fprintf x --# define Tracev(x) {if (verbose) fprintf x ;} --# define Tracevv(x) {if (verbose>1) fprintf x ;} --# define Tracec(c,x) {if (verbose && (c)) fprintf x ;} --# define Tracecv(c,x) {if (verbose>1 && (c)) fprintf x ;} --#else --# define Assert(cond,msg) --# define Trace(x) --# define Tracev(x) --# define Tracevv(x) --# define Tracec(c,x) --# define Tracecv(c,x) --#endif -- --static int fill_inbuf(void); --static void flush_window(void); --static void error(char *m); -- - extern char input_data[]; - extern char input_data_end[]; - --static uch *output_data; --static ulg output_ptr; --static ulg bytes_out; -- - static void error(char *m); - --static void putstr(const char *); -- --extern int end; - static ulg free_mem_ptr; - static ulg free_mem_end_ptr; - --#ifdef STANDALONE_DEBUG --#define NO_INFLATE_MALLOC --#endif -- - #define ARCH_HAS_DECOMP_WDOG -+#define NEW_CODE - -+#ifdef CONFIG_KERNEL_GZIP - #include "../../../../lib/inflate.c" -+#endif - --/* =========================================================================== -- * Fill the input buffer. This is called only when the buffer is empty -- * and at least one byte is really needed. -- */ --int fill_inbuf(void) --{ -- if (insize != 0) -- error("ran out of input data"); -+#ifdef CONFIG_KERNEL_BZIP2 -+#include "../../../../lib/decompress_bunzip2.c" -+#endif - -- inbuf = input_data; -- insize = &input_data_end[0] - &input_data[0]; -+#ifdef CONFIG_KERNEL_LZMA -+#include "../../../../lib/decompress_unlzma.c" -+#endif - -- inptr = 1; -- return inbuf[0]; --} - --/* =========================================================================== -- * Write the output window window[0..outcnt-1] and update crc and bytes_out. -- * (Used for the decompressed data only.) -- */ --void flush_window(void) --{ -- ulg c = crc; -- unsigned n; -- uch *in, *out, ch; -- -- in = window; -- out = &output_data[output_ptr]; -- for (n = 0; n < outcnt; n++) { -- ch = *out++ = *in++; -- c = crc_32_tab[((int)c ^ ch) & 0xff] ^ (c >> 8); -- } -- crc = c; -- bytes_out += (ulg)outcnt; -- output_ptr += (ulg)outcnt; -- outcnt = 0; -- putstr("."); --} - - #ifndef arch_error - #define arch_error(x) -@@ -301,16 +219,24 @@ ulg - decompress_kernel(ulg output_start, ulg free_mem_ptr_p, ulg free_mem_ptr_end_p, - int arch_id) - { -- output_data = (uch *)output_start; /* Points to kernel start */ -- free_mem_ptr = free_mem_ptr_p; -- free_mem_end_ptr = free_mem_ptr_end_p; -+ ulg output_ptr; -+ ulg *ptr; -+ size_t input_len = input_data_end - input_data; -+ size_t pos = 0; -+ - __machine_arch_type = arch_id; - - arch_decomp_setup(); - -- makecrc(); -- putstr("Uncompressing Linux..."); -- gunzip(); -+ ptr = (ulg *) (((long)input_data_end) - 4); -+ output_ptr = output_start + *ptr; -+ -+ free_mem_ptr = output_ptr; -+ free_mem_end_ptr = output_ptr + 0x4000000; -+ -+ putstr("Decompressing Linux..."); -+ decompress(input_data, input_len, -+ NULL, NULL, (unsigned char *) output_start, &pos, error); - putstr(" done, booting the kernel.\n"); - return output_ptr; - } -@@ -320,11 +246,8 @@ char output_buffer[1500*1024]; - - int main() - { -- output_data = output_buffer; -- -- makecrc(); - putstr("Uncompressing Linux..."); -- gunzip(); -+ decompress(input_data, input_len, NULL, output_buffer, NULL); - putstr("done.\n"); - return 0; - } -diff -purN linux-2.6.27.6/arch/x86/boot/compressed/Makefile linux-2.6.27.6udpcast/arch/x86/boot/compressed/Makefile ---- linux-2.6.27.6/arch/x86/boot/compressed/Makefile 2008-11-13 18:56:21.000000000 +0100 -+++ linux-2.6.27.6udpcast/arch/x86/boot/compressed/Makefile 2008-11-16 23:42:51.000000000 +0100 -@@ -4,7 +4,7 @@ - # create a compressed vmlinux image from the original vmlinux - # - --targets := vmlinux vmlinux.bin vmlinux.bin.gz head_$(BITS).o misc.o piggy.o -+targets := vmlinux vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2 vmlinux.bin.lzma head_$(BITS).o misc.o piggy.o - - KBUILD_CFLAGS := -m$(BITS) -D__KERNEL__ $(LINUX_INCLUDE) -O2 - KBUILD_CFLAGS += -fno-strict-aliasing -fPIC -@@ -46,9 +46,17 @@ $(obj)/vmlinux.bin.all: $(vmlinux.bin.al - ifdef CONFIG_RELOCATABLE - $(obj)/vmlinux.bin.gz: $(obj)/vmlinux.bin.all FORCE - $(call if_changed,gzip) -+$(obj)/vmlinux.bin.bz2: $(obj)/vmlinux.bin.all FORCE -+ $(call if_changed,bzip2) -+$(obj)/vmlinux.bin.lzma: $(obj)/vmlinux.bin.all FORCE -+ $(call if_changed,lzma) - else - $(obj)/vmlinux.bin.gz: $(obj)/vmlinux.bin FORCE - $(call if_changed,gzip) -+$(obj)/vmlinux.bin.bz2: $(obj)/vmlinux.bin FORCE -+ $(call if_changed,bzip2) -+$(obj)/vmlinux.bin.lzma: $(obj)/vmlinux.bin FORCE -+ $(call if_changed,lzma) - endif - LDFLAGS_piggy.o := -r --format binary --oformat elf32-i386 -T - -@@ -59,6 +67,9 @@ $(obj)/vmlinux.bin.gz: $(obj)/vmlinux.bi - LDFLAGS_piggy.o := -r --format binary --oformat elf64-x86-64 -T - endif - -+suffix_$(CONFIG_KERNEL_GZIP) = gz -+suffix_$(CONFIG_KERNEL_BZIP2) = bz2 -+suffix_$(CONFIG_KERNEL_LZMA) = lzma - --$(obj)/piggy.o: $(obj)/vmlinux.scr $(obj)/vmlinux.bin.gz FORCE -+$(obj)/piggy.o: $(obj)/vmlinux.scr $(obj)/vmlinux.bin.$(suffix_y) FORCE - $(call if_changed,ld) -diff -purN linux-2.6.27.6/arch/x86/boot/compressed/misc.c linux-2.6.27.6udpcast/arch/x86/boot/compressed/misc.c ---- linux-2.6.27.6/arch/x86/boot/compressed/misc.c 2008-11-13 18:56:21.000000000 +0100 -+++ linux-2.6.27.6udpcast/arch/x86/boot/compressed/misc.c 2008-11-16 23:02:55.000000000 +0100 -@@ -116,71 +116,13 @@ - /* - * gzip declarations - */ -- --#define OF(args) args - #define STATIC static - - #undef memset - #undef memcpy - #define memzero(s, n) memset((s), 0, (n)) - --typedef unsigned char uch; --typedef unsigned short ush; --typedef unsigned long ulg; -- --/* -- * Window size must be at least 32k, and a power of two. -- * We don't actually have a window just a huge output buffer, -- * so we report a 2G window size, as that should always be -- * larger than our output buffer: -- */ --#define WSIZE 0x80000000 - --/* Input buffer: */ --static unsigned char *inbuf; -- --/* Sliding window buffer (and final output buffer): */ --static unsigned char *window; -- --/* Valid bytes in inbuf: */ --static unsigned insize; -- --/* Index of next byte to be processed in inbuf: */ --static unsigned inptr; -- --/* Bytes in output buffer: */ --static unsigned outcnt; -- --/* gzip flag byte */ --#define ASCII_FLAG 0x01 /* bit 0 set: file probably ASCII text */ --#define CONTINUATION 0x02 /* bit 1 set: continuation of multi-part gz file */ --#define EXTRA_FIELD 0x04 /* bit 2 set: extra field present */ --#define ORIG_NAM 0x08 /* bit 3 set: original file name present */ --#define COMMENT 0x10 /* bit 4 set: file comment present */ --#define ENCRYPTED 0x20 /* bit 5 set: file is encrypted */ --#define RESERVED 0xC0 /* bit 6, 7: reserved */ -- --#define get_byte() (inptr < insize ? inbuf[inptr++] : fill_inbuf()) -- --/* Diagnostic functions */ --#ifdef DEBUG --# define Assert(cond, msg) do { if (!(cond)) error(msg); } while (0) --# define Trace(x) do { fprintf x; } while (0) --# define Tracev(x) do { if (verbose) fprintf x ; } while (0) --# define Tracevv(x) do { if (verbose > 1) fprintf x ; } while (0) --# define Tracec(c, x) do { if (verbose && (c)) fprintf x ; } while (0) --# define Tracecv(c, x) do { if (verbose > 1 && (c)) fprintf x ; } while (0) --#else --# define Assert(cond, msg) --# define Trace(x) --# define Tracev(x) --# define Tracevv(x) --# define Tracec(c, x) --# define Tracecv(c, x) --#endif -- --static int fill_inbuf(void); --static void flush_window(void); - static void error(char *m); - - /* -@@ -189,11 +131,6 @@ static void error(char *m); - static struct boot_params *real_mode; /* Pointer to real-mode data */ - static int quiet; - --extern unsigned char input_data[]; --extern int input_len; -- --static long bytes_out; -- - static void *memset(void *s, int c, unsigned n); - static void *memcpy(void *dest, const void *src, unsigned n); - -@@ -213,7 +150,19 @@ static char *vidmem; - static int vidport; - static int lines, cols; - -+#define NEW_CODE -+ -+#ifdef CONFIG_KERNEL_GZIP - #include "../../../../lib/inflate.c" -+#endif -+ -+#ifdef CONFIG_KERNEL_BZIP2 -+#include "../../../../lib/decompress_bunzip2.c" -+#endif -+ -+#ifdef CONFIG_KERNEL_LZMA -+#include "../../../../lib/decompress_unlzma.c" -+#endif - - static void scroll(void) - { -@@ -291,38 +240,6 @@ static void *memcpy(void *dest, const vo - return dest; - } - --/* =========================================================================== -- * Fill the input buffer. This is called only when the buffer is empty -- * and at least one byte is really needed. -- */ --static int fill_inbuf(void) --{ -- error("ran out of input data"); -- return 0; --} -- --/* =========================================================================== -- * Write the output window window[0..outcnt-1] and update crc and bytes_out. -- * (Used for the decompressed data only.) -- */ --static void flush_window(void) --{ -- /* With my window equal to my output buffer -- * I only need to compute the crc here. -- */ -- unsigned long c = crc; /* temporary variable */ -- unsigned n; -- unsigned char *in, ch; -- -- in = window; -- for (n = 0; n < outcnt; n++) { -- ch = *in++; -- c = crc_32_tab[((int)c ^ ch) & 0xff] ^ (c >> 8); -- } -- crc = c; -- bytes_out += (unsigned long)outcnt; -- outcnt = 0; --} - - static void error(char *x) - { -@@ -405,12 +322,8 @@ asmlinkage void decompress_kernel(void * - lines = real_mode->screen_info.orig_video_lines; - cols = real_mode->screen_info.orig_video_cols; - -- window = output; /* Output buffer (Normally at 1M) */ - free_mem_ptr = heap; /* Heap */ - free_mem_end_ptr = heap + BOOT_HEAP_SIZE; -- inbuf = input_data; /* Input buffer */ -- insize = input_len; -- inptr = 0; - - #ifdef CONFIG_X86_64 - if ((unsigned long)output & (__KERNEL_ALIGN - 1)) -@@ -428,10 +341,9 @@ asmlinkage void decompress_kernel(void * - #endif - #endif - -- makecrc(); - if (!quiet) - putstr("\nDecompressing Linux... "); -- gunzip(); -+ decompress(input_data, input_len, NULL, NULL, output, NULL, error); - parse_elf(output); - if (!quiet) - putstr("done.\nBooting the kernel.\n"); -diff -purN linux-2.6.27.6/drivers/block/Kconfig linux-2.6.27.6udpcast/drivers/block/Kconfig ---- linux-2.6.27.6/drivers/block/Kconfig 2008-11-13 18:56:21.000000000 +0100 -+++ linux-2.6.27.6udpcast/drivers/block/Kconfig 2008-11-16 23:02:55.000000000 +0100 -@@ -357,6 +357,30 @@ config BLK_DEV_XIP - will prevent RAM block device backing store memory from being - allocated from highmem (only a problem for highmem systems). - -+config RD_BZIP2 -+ bool "Initial ramdisk compressed using bzip2" -+ default n -+ depends on BLK_DEV_INITRD=y -+ help -+ Support loading of a bzip2 encoded initial ramdisk or cpio buffer -+ If unsure, say N. -+ -+config RD_LZMA -+ bool "Initial ramdisk compressed using lzma" -+ default n -+ depends on BLK_DEV_INITRD=y -+ help -+ Support loading of a lzma encoded initial ramdisk or cpio buffer -+ If unsure, say N. -+ -+config RD_GZIP -+ bool "Initial ramdisk compressed using gzip" -+ default y -+ depends on BLK_DEV_INITRD=y -+ help -+ Support loading of a gzip encoded initial ramdisk or cpio buffer. -+ If unsure, say Y. -+ - config CDROM_PKTCDVD - tristate "Packet writing on CD/DVD media" - depends on !UML -diff -purN linux-2.6.27.6/include/asm-x86/boot.h linux-2.6.27.6udpcast/include/asm-x86/boot.h ---- linux-2.6.27.6/include/asm-x86/boot.h 2008-11-13 18:56:21.000000000 +0100 -+++ linux-2.6.27.6udpcast/include/asm-x86/boot.h 2008-11-16 23:02:55.000000000 +0100 -@@ -17,11 +17,21 @@ - + (CONFIG_PHYSICAL_ALIGN - 1)) \ - & ~(CONFIG_PHYSICAL_ALIGN - 1)) - -+#if (defined CONFIG_KERNEL_BZIP2) -+#define BOOT_HEAP_SIZE 0x400000 -+#else -+ - #ifdef CONFIG_X86_64 - #define BOOT_HEAP_SIZE 0x7000 --#define BOOT_STACK_SIZE 0x4000 - #else - #define BOOT_HEAP_SIZE 0x4000 -+#endif -+ -+#endif -+ -+#ifdef CONFIG_X86_64 -+#define BOOT_STACK_SIZE 0x4000 -+#else - #define BOOT_STACK_SIZE 0x1000 - #endif - -diff -purN linux-2.6.27.6/include/linux/decompress/bunzip2.h linux-2.6.27.6udpcast/include/linux/decompress/bunzip2.h ---- linux-2.6.27.6/include/linux/decompress/bunzip2.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.27.6udpcast/include/linux/decompress/bunzip2.h 2008-11-16 23:34:15.000000000 +0100 -@@ -0,0 +1,10 @@ -+#ifndef DECOMPRESS_BUNZIP2_H -+#define DECOMPRESS_BUNZIP2_H -+ -+int bunzip2(unsigned char *inbuf, int len, -+ int(*fill)(void*, unsigned int), -+ int(*flush)(void*, unsigned int), -+ unsigned char *output, -+ int *pos, -+ void(*error)(char *x)); -+#endif -diff -purN linux-2.6.27.6/include/linux/decompress/generic.h linux-2.6.27.6udpcast/include/linux/decompress/generic.h ---- linux-2.6.27.6/include/linux/decompress/generic.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.27.6udpcast/include/linux/decompress/generic.h 2008-11-16 23:34:15.000000000 +0100 -@@ -0,0 +1,30 @@ -+#ifndef DECOMPRESS_GENERIC_H -+#define DECOMPRESS_GENERIC_H -+ -+/* Minimal chunksize to be read. -+ *Bzip2 prefers at least 4096 -+ *Lzma prefers 0x10000 */ -+#define COMPR_IOBUF_SIZE 4096 -+ -+typedef int (*decompress_fn) (unsigned char *inbuf, int len, -+ int(*fill)(void*, unsigned int), -+ int(*writebb)(void*, unsigned int), -+ unsigned char *output, -+ int *posp, -+ void(*error)(char *x)); -+ -+/* inbuf - input buffer -+ *len - len of pre-read data in inbuf -+ *fill - function to fill inbuf if empty -+ *writebb - function to write out outbug -+ *posp - if non-null, input position (number of bytes read) will be -+ * returned here -+ * -+ *If len != 0, the inbuf is initialized (with as much data), and fill -+ *should not be called -+ *If len = 0, the inbuf is allocated, but empty. Its size is IOBUF_SIZE -+ *fill should be called (repeatedly...) to read data, at most IOBUF_SIZE -+ */ -+ -+ -+#endif -diff -purN linux-2.6.27.6/include/linux/decompress/inflate.h linux-2.6.27.6udpcast/include/linux/decompress/inflate.h ---- linux-2.6.27.6/include/linux/decompress/inflate.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.27.6udpcast/include/linux/decompress/inflate.h 2008-11-16 23:34:15.000000000 +0100 -@@ -0,0 +1,13 @@ -+#ifndef INFLATE_H -+#define INFLATE_H -+ -+/* Other housekeeping constants */ -+#define INBUFSIZ 4096 -+ -+int gunzip(unsigned char *inbuf, int len, -+ int(*fill)(void*, unsigned int), -+ int(*flush)(void*, unsigned int), -+ unsigned char *output, -+ int *pos, -+ void(*error_fn)(char *x)); -+#endif -diff -purN linux-2.6.27.6/include/linux/decompress/mm.h linux-2.6.27.6udpcast/include/linux/decompress/mm.h ---- linux-2.6.27.6/include/linux/decompress/mm.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.27.6udpcast/include/linux/decompress/mm.h 2008-11-16 23:34:15.000000000 +0100 -@@ -0,0 +1,89 @@ -+/* -+ * linux/compr_mm.h -+ * -+ * Memory management for pre-boot and ramdisk uncompressors -+ * -+ * Authors: Alain Knaff <alain@knaff.lu> -+ * -+ */ -+ -+#ifndef DECOMPR_MM_H -+#define DECOMPR_MM_H -+ -+#ifdef STATIC -+ -+/* Code active when included from pre-boot environment: */ -+ -+/* A trivial malloc implementation, adapted from -+ * malloc by Hannu Savolainen 1993 and Matthias Urlichs 1994 -+ */ -+static unsigned long malloc_ptr; -+static int malloc_count; -+ -+static void *malloc(int size) -+{ -+ void *p; -+ -+ if (size < 0) -+ error("Malloc error"); -+ if (!malloc_ptr) -+ malloc_ptr = free_mem_ptr; -+ -+ malloc_ptr = (malloc_ptr + 3) & ~3; /* Align */ -+ -+ p = (void *)malloc_ptr; -+ malloc_ptr += size; -+ -+ if (free_mem_end_ptr && malloc_ptr >= free_mem_end_ptr) -+ error("Out of memory"); -+ -+ malloc_count++; -+ return p; -+} -+ -+static void free(void *where) -+{ -+ malloc_count--; -+ if (!malloc_count) -+ malloc_ptr = free_mem_ptr; -+} -+ -+#define large_malloc(a) malloc(a) -+#define large_free(a) free(a) -+ -+#define set_error_fn(x) -+#define panic error -+ -+#define INIT -+ -+#else /* STATIC */ -+ -+/* Code active when compiled standalone for use when loading ramdisk: */ -+ -+#include <linux/kernel.h> -+#include <linux/fs.h> -+#include <linux/string.h> -+#include <linux/vmalloc.h> -+ -+/* Use defines rather than static inline in order to avoid spurious -+ * warnings when not needed (indeed large_malloc / large_free are not -+ * needed by inflate */ -+ -+#define malloc(a) kmalloc(a, GFP_KERNEL) -+#define free(a) kfree(a) -+ -+#define large_malloc(a) vmalloc(a) -+#define large_free(a) vfree(a) -+ -+static void(*error)(char *m); -+#define set_error_fn(x) error = x; -+#define NEW_CODE -+ -+#define INIT __init -+#define STATIC -+ -+#include <linux/init.h> -+ -+#endif /* STATIC */ -+ -+#endif /* DECOMPR_MM_H */ -diff -purN linux-2.6.27.6/include/linux/decompress/unlzma.h linux-2.6.27.6udpcast/include/linux/decompress/unlzma.h ---- linux-2.6.27.6/include/linux/decompress/unlzma.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.27.6udpcast/include/linux/decompress/unlzma.h 2008-11-16 23:34:15.000000000 +0100 -@@ -0,0 +1,12 @@ -+#ifndef DECOMPRESS_UNLZMA_H -+#define DECOMPRESS_UNLZMA_H -+ -+int unlzma(unsigned char *, int, -+ int(*fill)(void*, unsigned int), -+ int(*flush)(void*, unsigned int), -+ unsigned char *output, -+ int *posp, -+ void(*error)(char *x) -+ ); -+ -+#endif -diff -purN linux-2.6.27.6/init/do_mounts_rd.c linux-2.6.27.6udpcast/init/do_mounts_rd.c ---- linux-2.6.27.6/init/do_mounts_rd.c 2008-11-13 18:56:21.000000000 +0100 -+++ linux-2.6.27.6udpcast/init/do_mounts_rd.c 2008-11-16 23:02:55.000000000 +0100 -@@ -10,6 +10,12 @@ - - #include "do_mounts.h" - -+#include <linux/decompress/generic.h> -+ -+#include <linux/decompress/bunzip2.h> -+#include <linux/decompress/unlzma.h> -+#include <linux/decompress/inflate.h> -+ - int __initdata rd_prompt = 1;/* 1 = prompt for RAM disk, 0 = don't prompt */ - - static int __init prompt_ramdisk(char *str) -@@ -28,7 +34,7 @@ static int __init ramdisk_start_setup(ch - } - __setup("ramdisk_start=", ramdisk_start_setup); - --static int __init crd_load(int in_fd, int out_fd); -+static int __init crd_load(int in_fd, int out_fd, decompress_fn deco); - - /* - * This routine tries to find a RAM disk image to load, and returns the -@@ -44,7 +50,7 @@ static int __init crd_load(int in_fd, in - * gzip - */ - static int __init --identify_ramdisk_image(int fd, int start_block) -+identify_ramdisk_image(int fd, int start_block, decompress_fn *decompressor) - { - const int size = 512; - struct minix_super_block *minixsb; -@@ -70,6 +76,7 @@ identify_ramdisk_image(int fd, int start - sys_lseek(fd, start_block * BLOCK_SIZE, 0); - sys_read(fd, buf, size); - -+#ifdef CONFIG_RD_GZIP - /* - * If it matches the gzip magic numbers, return -1 - */ -@@ -77,9 +84,39 @@ identify_ramdisk_image(int fd, int start - printk(KERN_NOTICE - "RAMDISK: Compressed image found at block %d\n", - start_block); -+ *decompressor = gunzip; -+ nblocks = 0; -+ goto done; -+ } -+#endif -+ -+#ifdef CONFIG_RD_BZIP2 -+ /* -+ * If it matches the bzip2 magic numbers, return -1 -+ */ -+ if (buf[0] == 0x42 && (buf[1] == 0x5a)) { -+ printk(KERN_NOTICE -+ "RAMDISK: Bzipped image found at block %d\n", -+ start_block); -+ *decompressor = bunzip2; - nblocks = 0; - goto done; - } -+#endif -+ -+#ifdef CONFIG_RD_LZMA -+ /* -+ * If it matches the lzma magic numbers, return -1 -+ */ -+ if (buf[0] == 0x5d && (buf[1] == 0x00)) { -+ printk(KERN_NOTICE -+ "RAMDISK: Lzma image found at block %d\n", -+ start_block); -+ *decompressor = unlzma; -+ nblocks = 0; -+ goto done; -+ } -+#endif - - /* romfs is at block zero too */ - if (romfsb->word0 == ROMSB_WORD0 && -@@ -143,6 +180,7 @@ int __init rd_load_image(char *from) - int nblocks, i, disk; - char *buf = NULL; - unsigned short rotate = 0; -+ decompress_fn decompressor = NULL; - #if !defined(CONFIG_S390) && !defined(CONFIG_PPC_ISERIES) - char rotator[4] = { '|' , '/' , '-' , '\\' }; - #endif -@@ -155,12 +193,12 @@ int __init rd_load_image(char *from) - if (in_fd < 0) - goto noclose_input; - -- nblocks = identify_ramdisk_image(in_fd, rd_image_start); -+ nblocks = identify_ramdisk_image(in_fd, rd_image_start, &decompressor); - if (nblocks < 0) - goto done; - - if (nblocks == 0) { -- if (crd_load(in_fd, out_fd) == 0) -+ if (crd_load(in_fd, out_fd, decompressor) == 0) - goto successful_load; - goto done; - } -@@ -259,138 +297,48 @@ int __init rd_load_disk(int n) - return rd_load_image("/dev/root"); - } - --/* -- * gzip declarations -- */ -- --#define OF(args) args -- --#ifndef memzero --#define memzero(s, n) memset ((s), 0, (n)) --#endif -- --typedef unsigned char uch; --typedef unsigned short ush; --typedef unsigned long ulg; -- --#define INBUFSIZ 4096 --#define WSIZE 0x8000 /* window size--must be a power of two, and */ -- /* at least 32K for zip's deflate method */ -- --static uch *inbuf; --static uch *window; -- --static unsigned insize; /* valid bytes in inbuf */ --static unsigned inptr; /* index of next byte to be processed in inbuf */ --static unsigned outcnt; /* bytes in output buffer */ - static int exit_code; --static int unzip_error; --static long bytes_out; -+static int decompress_error; - static int crd_infd, crd_outfd; - --#define get_byte() (inptr < insize ? inbuf[inptr++] : fill_inbuf()) -- --/* Diagnostic functions (stubbed out) */ --#define Assert(cond,msg) --#define Trace(x) --#define Tracev(x) --#define Tracevv(x) --#define Tracec(c,x) --#define Tracecv(c,x) -- --#define STATIC static --#define INIT __init -- --static int __init fill_inbuf(void); --static void __init flush_window(void); --static void __init error(char *m); -- --#define NO_INFLATE_MALLOC -- --#include "../lib/inflate.c" -- --/* =========================================================================== -- * Fill the input buffer. This is called only when the buffer is empty -- * and at least one byte is really needed. -- * Returning -1 does not guarantee that gunzip() will ever return. -- */ --static int __init fill_inbuf(void) -+static int __init compr_fill(void *buf, unsigned int len) - { -- if (exit_code) return -1; -- -- insize = sys_read(crd_infd, inbuf, INBUFSIZ); -- if (insize == 0) { -- error("RAMDISK: ran out of compressed data"); -- return -1; -- } -- -- inptr = 1; -- -- return inbuf[0]; -+ int r = sys_read(crd_infd, buf, len); -+ if (r < 0) -+ printk(KERN_ERR "RAMDISK: error while reading compressed data"); -+ else if (r == 0) -+ printk(KERN_ERR "RAMDISK: EOF while reading compressed data"); -+ return r; - } - --/* =========================================================================== -- * Write the output window window[0..outcnt-1] and update crc and bytes_out. -- * (Used for the decompressed data only.) -- */ --static void __init flush_window(void) -+static int __init compr_flush(void *window, unsigned int outcnt) - { -- ulg c = crc; /* temporary variable */ -- unsigned n, written; -- uch *in, ch; -- -- written = sys_write(crd_outfd, window, outcnt); -- if (written != outcnt && unzip_error == 0) { -- printk(KERN_ERR "RAMDISK: incomplete write (%d != %d) %ld\n", -- written, outcnt, bytes_out); -- unzip_error = 1; -- } -- in = window; -- for (n = 0; n < outcnt; n++) { -- ch = *in++; -- c = crc_32_tab[((int)c ^ ch) & 0xff] ^ (c >> 8); -- } -- crc = c; -- bytes_out += (ulg)outcnt; -- outcnt = 0; -+ int written = sys_write(crd_outfd, window, outcnt); -+ if (written != outcnt) { -+ if (decompress_error == 0) -+ printk(KERN_ERR -+ "RAMDISK: incomplete write (%d != %d)\n", -+ written, outcnt); -+ decompress_error = 1; -+ return -1; -+ } -+ return outcnt; - } - - static void __init error(char *x) - { - printk(KERN_ERR "%s\n", x); - exit_code = 1; -- unzip_error = 1; -+ decompress_error = 1; - } - --static int __init crd_load(int in_fd, int out_fd) -+static int __init crd_load(int in_fd, int out_fd, decompress_fn deco) - { - int result; -- -- insize = 0; /* valid bytes in inbuf */ -- inptr = 0; /* index of next byte to be processed in inbuf */ -- outcnt = 0; /* bytes in output buffer */ -- exit_code = 0; -- bytes_out = 0; -- crc = (ulg)0xffffffffL; /* shift register contents */ -- - crd_infd = in_fd; - crd_outfd = out_fd; -- inbuf = kmalloc(INBUFSIZ, GFP_KERNEL); -- if (!inbuf) { -- printk(KERN_ERR "RAMDISK: Couldn't allocate gzip buffer\n"); -- return -1; -- } -- window = kmalloc(WSIZE, GFP_KERNEL); -- if (!window) { -- printk(KERN_ERR "RAMDISK: Couldn't allocate gzip window\n"); -- kfree(inbuf); -- return -1; -- } -- makecrc(); -- result = gunzip(); -- if (unzip_error) -+ result = deco(NULL, 0, compr_fill, compr_flush, NULL, NULL, error); -+ if (decompress_error) - result = 1; -- kfree(inbuf); -- kfree(window); - return result; - } -diff -purN linux-2.6.27.6/init/initramfs.c linux-2.6.27.6udpcast/init/initramfs.c ---- linux-2.6.27.6/init/initramfs.c 2008-11-13 18:56:21.000000000 +0100 -+++ linux-2.6.27.6udpcast/init/initramfs.c 2008-11-16 23:02:55.000000000 +0100 -@@ -337,11 +337,14 @@ static int __init write_buffer(char *buf - return len - count; - } - --static void __init flush_buffer(char *buf, unsigned len) -+ -+static int __init flush_buffer(void *bufv, unsigned len) - { -+ char *buf = (char *) bufv; - int written; -+ int origLen = len; - if (message) -- return; -+ return -1; - while ((written = write_buffer(buf, len)) < len && !message) { - char c = buf[written]; - if (c == '0') { -@@ -355,73 +358,14 @@ static void __init flush_buffer(char *bu - } else - error("junk in compressed archive"); - } -+ return origLen; - } - --/* -- * gzip declarations -- */ -- --#define OF(args) args -- --#ifndef memzero --#define memzero(s, n) memset ((s), 0, (n)) --#endif -+static unsigned my_inptr; /* index of next byte to be processed in inbuf */ - --typedef unsigned char uch; --typedef unsigned short ush; --typedef unsigned long ulg; -- --#define WSIZE 0x8000 /* window size--must be a power of two, and */ -- /* at least 32K for zip's deflate method */ -- --static uch *inbuf; --static uch *window; -- --static unsigned insize; /* valid bytes in inbuf */ --static unsigned inptr; /* index of next byte to be processed in inbuf */ --static unsigned outcnt; /* bytes in output buffer */ --static long bytes_out; -- --#define get_byte() (inptr < insize ? inbuf[inptr++] : -1) -- --/* Diagnostic functions (stubbed out) */ --#define Assert(cond,msg) --#define Trace(x) --#define Tracev(x) --#define Tracevv(x) --#define Tracec(c,x) --#define Tracecv(c,x) -- --#define STATIC static --#define INIT __init -- --static void __init flush_window(void); --static void __init error(char *m); -- --#define NO_INFLATE_MALLOC -- --#include "../lib/inflate.c" -- --/* =========================================================================== -- * Write the output window window[0..outcnt-1] and update crc and bytes_out. -- * (Used for the decompressed data only.) -- */ --static void __init flush_window(void) --{ -- ulg c = crc; /* temporary variable */ -- unsigned n; -- uch *in, ch; -- -- flush_buffer(window, outcnt); -- in = window; -- for (n = 0; n < outcnt; n++) { -- ch = *in++; -- c = crc_32_tab[((int)c ^ ch) & 0xff] ^ (c >> 8); -- } -- crc = c; -- bytes_out += (ulg)outcnt; -- outcnt = 0; --} -+#include <linux/decompress/bunzip2.h> -+#include <linux/decompress/unlzma.h> -+#include <linux/decompress/inflate.h> - - static char * __init unpack_to_rootfs(char *buf, unsigned len, int check_only) - { -@@ -430,9 +374,10 @@ static char * __init unpack_to_rootfs(ch - header_buf = kmalloc(110, GFP_KERNEL); - symlink_buf = kmalloc(PATH_MAX + N_ALIGN(PATH_MAX) + 1, GFP_KERNEL); - name_buf = kmalloc(N_ALIGN(PATH_MAX), GFP_KERNEL); -- window = kmalloc(WSIZE, GFP_KERNEL); -- if (!window || !header_buf || !symlink_buf || !name_buf) -+ -+ if (!header_buf || !symlink_buf || !name_buf) - panic("can't allocate buffers"); -+ - state = Start; - this_header = 0; - message = NULL; -@@ -452,21 +397,39 @@ static char * __init unpack_to_rootfs(ch - continue; - } - this_header = 0; -- insize = len; -- inbuf = buf; -- inptr = 0; -- outcnt = 0; /* bytes in output buffer */ -- bytes_out = 0; -- crc = (ulg)0xffffffffL; /* shift register contents */ -- makecrc(); -- gunzip(); -+ if (!gunzip(buf, len, NULL, flush_buffer, NULL, -+ &my_inptr, error) && -+ message == NULL) -+ goto ok; -+ -+#ifdef CONFIG_RD_BZIP2 -+ message = NULL; /* Zero out message, or else cpio will -+ think an error has already occured */ -+ if (!bunzip2(buf, len, NULL, flush_buffer, NULL, -+ &my_inptr, error) < 0 -+ && -+ message == NULL) { -+ goto ok; -+ } -+#endif -+ -+#ifdef CONFIG_RD_LZMA -+ message = NULL; /* Zero out message, or else cpio will -+ think an error has already occured */ -+ if (!unlzma(buf, len, NULL, flush_buffer, NULL, -+ &my_inptr, error) < 0 -+ && -+ message == NULL) { -+ goto ok; -+ } -+#endif -+ok: - if (state != Reset) -- error("junk in gzipped archive"); -- this_header = saved_offset + inptr; -- buf += inptr; -- len -= inptr; -+ error("junk in compressed archive"); -+ this_header = saved_offset + my_inptr; -+ buf += my_inptr; -+ len -= my_inptr; - } -- kfree(window); - kfree(name_buf); - kfree(symlink_buf); - kfree(header_buf); -diff -purN linux-2.6.27.6/init/Kconfig linux-2.6.27.6udpcast/init/Kconfig ---- linux-2.6.27.6/init/Kconfig 2008-11-13 18:56:21.000000000 +0100 -+++ linux-2.6.27.6udpcast/init/Kconfig 2008-11-16 23:02:55.000000000 +0100 -@@ -101,6 +101,56 @@ config LOCALVERSION_AUTO - - which is done within the script "scripts/setlocalversion".) - -+choice -+ prompt "Kernel compression mode" -+ default KERNEL_GZIP -+ help -+ The linux kernel is a kind of self-extracting executable. -+ Several compression algorithms are available, which differ -+ in efficiency, compression and decompression speed. -+ Compression speed is only relevant when building a kernel. -+ Decompression speed is relevant at each boot. -+ -+ If you have any problems with bzip2 or lzma compressed -+ kernels, mail me (Alain Knaff) <alain@knaff.lu>. (An older -+ version of this functionality (bzip2 only), for 2.4, was -+ supplied by Christian Ludwig) -+ -+ High compression options are mostly useful for users, who -+ are low on disk space (embedded systems), but for whom ram -+ size matters less. -+ -+ If in doubt, select 'gzip' -+ -+config KERNEL_GZIP -+ bool "Gzip" -+ help -+ The old and tried gzip compression. Its compression ratio is -+ the poorest among the 3 choices; however its speed (both -+ compression and decompression) is the fastest. -+ -+config KERNEL_BZIP2 -+ bool "Bzip2" -+ help -+ Its compression ratio and speed is intermediate. -+ Decompression speed is slowest among the 3. -+ The kernel size is about 10 per cent smaller with bzip2, -+ in comparison to gzip. -+ Bzip2 uses a large amount of memory. For modern kernels -+ you will need at least 8MB RAM or more for booting. -+ -+config KERNEL_LZMA -+ bool "LZMA" -+ help -+ The most recent compression algorithm. -+ Its ratio is best, decompression speed is between the other -+ 2. Compression is slowest. -+ The kernel size is about 33 per cent smaller with lzma, -+ in comparison to gzip. -+ -+endchoice -+ -+ - config SWAP - bool "Support for paging of anonymous memory (swap)" - depends on MMU && BLOCK -diff -purN linux-2.6.27.6/lib/decompress_bunzip2.c linux-2.6.27.6udpcast/lib/decompress_bunzip2.c ---- linux-2.6.27.6/lib/decompress_bunzip2.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.27.6udpcast/lib/decompress_bunzip2.c 2008-11-16 23:40:21.000000000 +0100 -@@ -0,0 +1,735 @@ -+/* vi: set sw = 4 ts = 4: */ -+/* Small bzip2 deflate implementation, by Rob Landley (rob@landley.net). -+ -+ Based on bzip2 decompression code by Julian R Seward (jseward@acm.org), -+ which also acknowledges contributions by Mike Burrows, David Wheeler, -+ Peter Fenwick, Alistair Moffat, Radford Neal, Ian H. Witten, -+ Robert Sedgewick, and Jon L. Bentley. -+ -+ This code is licensed under the LGPLv2: -+ LGPL (http://www.gnu.org/copyleft/lgpl.html -+*/ -+ -+/* -+ Size and speed optimizations by Manuel Novoa III (mjn3@codepoet.org). -+ -+ More efficient reading of Huffman codes, a streamlined read_bunzip() -+ function, and various other tweaks. In (limited) tests, approximately -+ 20% faster than bzcat on x86 and about 10% faster on arm. -+ -+ Note that about 2/3 of the time is spent in read_unzip() reversing -+ the Burrows-Wheeler transformation. Much of that time is delay -+ resulting from cache misses. -+ -+ I would ask that anyone benefiting from this work, especially those -+ using it in commercial products, consider making a donation to my local -+ non-profit hospice organization in the name of the woman I loved, who -+ passed away Feb. 12, 2003. -+ -+ In memory of Toni W. Hagan -+ -+ Hospice of Acadiana, Inc. -+ 2600 Johnston St., Suite 200 -+ Lafayette, LA 70503-3240 -+ -+ Phone (337) 232-1234 or 1-800-738-2226 -+ Fax (337) 232-1297 -+ -+ http://www.hospiceacadiana.com/ -+ -+ Manuel -+ */ -+ -+/* -+ Made it fit for running in Linux Kernel by Alain Knaff (alain@knaff.lu) -+*/ -+ -+ -+#ifndef STATIC -+#include <linux/decompress/bunzip2.h> -+#endif /* !STATIC */ -+ -+#include <linux/decompress/mm.h> -+ -+#ifndef INT_MAX -+#define INT_MAX 0x7fffffff -+#endif -+ -+/* Constants for Huffman coding */ -+#define MAX_GROUPS 6 -+#define GROUP_SIZE 50 /* 64 would have been more efficient */ -+#define MAX_HUFCODE_BITS 20 /* Longest Huffman code allowed */ -+#define MAX_SYMBOLS 258 /* 256 literals + RUNA + RUNB */ -+#define SYMBOL_RUNA 0 -+#define SYMBOL_RUNB 1 -+ -+/* Status return values */ -+#define RETVAL_OK 0 -+#define RETVAL_LAST_BLOCK (-1) -+#define RETVAL_NOT_BZIP_DATA (-2) -+#define RETVAL_UNEXPECTED_INPUT_EOF (-3) -+#define RETVAL_UNEXPECTED_OUTPUT_EOF (-4) -+#define RETVAL_DATA_ERROR (-5) -+#define RETVAL_OUT_OF_MEMORY (-6) -+#define RETVAL_OBSOLETE_INPUT (-7) -+ -+/* Other housekeeping constants */ -+#define BZIP2_IOBUF_SIZE 4096 -+ -+/* This is what we know about each Huffman coding group */ -+struct group_data { -+ /* We have an extra slot at the end of limit[] for a sentinal value. */ -+ int limit[MAX_HUFCODE_BITS+1]; -+ int base[MAX_HUFCODE_BITS]; -+ int permute[MAX_SYMBOLS]; -+ int minLen, maxLen; -+}; -+ -+/* Structure holding all the housekeeping data, including IO buffers and -+ memory that persists between calls to bunzip */ -+struct bunzip_data { -+ /* State for interrupting output loop */ -+ int writeCopies, writePos, writeRunCountdown, writeCount, writeCurrent; -+ /* I/O tracking data (file handles, buffers, positions, etc.) */ -+ int (*fill)(void*, unsigned int); -+ int inbufCount, inbufPos /*, outbufPos*/; -+ unsigned char *inbuf /*,*outbuf*/; -+ unsigned int inbufBitCount, inbufBits; -+ /* The CRC values stored in the block header and calculated from the -+ data */ -+ unsigned int crc32Table[256], headerCRC, totalCRC, writeCRC; -+ /* Intermediate buffer and its size (in bytes) */ -+ unsigned int *dbuf, dbufSize; -+ /* These things are a bit too big to go on the stack */ -+ unsigned char selectors[32768]; /* nSelectors = 15 bits */ -+ struct group_data groups[MAX_GROUPS]; /* Huffman coding tables */ -+ int io_error; /* non-zero if we have IO error */ -+}; -+ -+ -+/* Return the next nnn bits of input. All reads from the compressed input -+ are done through this function. All reads are big endian */ -+static unsigned int INIT get_bits(struct bunzip_data *bd, char bits_wanted) -+{ -+ unsigned int bits = 0; -+ -+ /* If we need to get more data from the byte buffer, do so. -+ (Loop getting one byte at a time to enforce endianness and avoid -+ unaligned access.) */ -+ while (bd->inbufBitCount < bits_wanted) { -+ /* If we need to read more data from file into byte buffer, do -+ so */ -+ if (bd->inbufPos == bd->inbufCount) { -+ if (bd->io_error) -+ return 0; -+ bd->inbufCount = bd->fill(bd->inbuf, BZIP2_IOBUF_SIZE); -+ if (bd->inbufCount <= 0) { -+ bd->io_error = RETVAL_UNEXPECTED_INPUT_EOF; -+ return 0; -+ } -+ bd->inbufPos = 0; -+ } -+ /* Avoid 32-bit overflow (dump bit buffer to top of output) */ -+ if (bd->inbufBitCount >= 24) { -+ bits = bd->inbufBits&((1 << bd->inbufBitCount)-1); -+ bits_wanted -= bd->inbufBitCount; -+ bits <<= bits_wanted; -+ bd->inbufBitCount = 0; -+ } -+ /* Grab next 8 bits of input from buffer. */ -+ bd->inbufBits = (bd->inbufBits << 8)|bd->inbuf[bd->inbufPos++]; -+ bd->inbufBitCount += 8; -+ } -+ /* Calculate result */ -+ bd->inbufBitCount -= bits_wanted; -+ bits |= (bd->inbufBits >> bd->inbufBitCount)&((1 << bits_wanted)-1); -+ -+ return bits; -+} -+ -+/* Unpacks the next block and sets up for the inverse burrows-wheeler step. */ -+ -+static int INIT get_next_block(struct bunzip_data *bd) -+{ -+ struct group_data *hufGroup = NULL; -+ int *base = NULL; -+ int *limit = NULL; -+ int dbufCount, nextSym, dbufSize, groupCount, selector, -+ i, j, k, t, runPos, symCount, symTotal, nSelectors, -+ byteCount[256]; -+ unsigned char uc, symToByte[256], mtfSymbol[256], *selectors; -+ unsigned int *dbuf, origPtr; -+ -+ dbuf = bd->dbuf; -+ dbufSize = bd->dbufSize; -+ selectors = bd->selectors; -+ -+ /* Read in header signature and CRC, then validate signature. -+ (last block signature means CRC is for whole file, return now) */ -+ i = get_bits(bd, 24); -+ j = get_bits(bd, 24); -+ bd->headerCRC = get_bits(bd, 32); -+ if ((i == 0x177245) && (j == 0x385090)) -+ return RETVAL_LAST_BLOCK; -+ if ((i != 0x314159) || (j != 0x265359)) -+ return RETVAL_NOT_BZIP_DATA; -+ /* We can add support for blockRandomised if anybody complains. -+ There was some code for this in busybox 1.0.0-pre3, but nobody ever -+ noticed that it didn't actually work. */ -+ if (get_bits(bd, 1)) -+ return RETVAL_OBSOLETE_INPUT; -+ origPtr = get_bits(bd, 24); -+ if (origPtr > dbufSize) -+ return RETVAL_DATA_ERROR; -+ /* mapping table: if some byte values are never used (encoding things -+ like ascii text), the compression code removes the gaps to have fewer -+ symbols to deal with, and writes a sparse bitfield indicating which -+ values were present. We make a translation table to convert the -+ symbols back to the corresponding bytes. */ -+ t = get_bits(bd, 16); -+ symTotal = 0; -+ for (i = 0; i < 16; i++) { -+ if (t&(1 << (15-i))) { -+ k = get_bits(bd, 16); -+ for (j = 0; j < 16; j++) -+ if (k&(1 << (15-j))) -+ symToByte[symTotal++] = (16*i)+j; -+ } -+ } -+ /* How many different Huffman coding groups does this block use? */ -+ groupCount = get_bits(bd, 3); -+ if (groupCount < 2 || groupCount > MAX_GROUPS) -+ return RETVAL_DATA_ERROR; -+ /* nSelectors: Every GROUP_SIZE many symbols we select a new -+ Huffman coding group. Read in the group selector list, -+ which is stored as MTF encoded bit runs. (MTF = Move To -+ Front, as each value is used it's moved to the start of the -+ list.) */ -+ nSelectors = get_bits(bd, 15); -+ if (!nSelectors) -+ return RETVAL_DATA_ERROR; -+ for (i = 0; i < groupCount; i++) -+ mtfSymbol[i] = i; -+ for (i = 0; i < nSelectors; i++) { -+ /* Get next value */ -+ for (j = 0; get_bits(bd, 1); j++) -+ if (j >= groupCount) -+ return RETVAL_DATA_ERROR; -+ /* Decode MTF to get the next selector */ -+ uc = mtfSymbol[j]; -+ for (; j; j--) -+ mtfSymbol[j] = mtfSymbol[j-1]; -+ mtfSymbol[0] = selectors[i] = uc; -+ } -+ /* Read the Huffman coding tables for each group, which code -+ for symTotal literal symbols, plus two run symbols (RUNA, -+ RUNB) */ -+ symCount = symTotal+2; -+ for (j = 0; j < groupCount; j++) { -+ unsigned char length[MAX_SYMBOLS], temp[MAX_HUFCODE_BITS+1]; -+ int minLen, maxLen, pp; -+ /* Read Huffman code lengths for each symbol. They're -+ stored in a way similar to mtf; record a starting -+ value for the first symbol, and an offset from the -+ previous value for everys symbol after that. -+ (Subtracting 1 before the loop and then adding it -+ back at the end is an optimization that makes the -+ test inside the loop simpler: symbol length 0 -+ becomes negative, so an unsigned inequality catches -+ it.) */ -+ t = get_bits(bd, 5)-1; -+ for (i = 0; i < symCount; i++) { -+ for (;;) { -+ if (((unsigned)t) > (MAX_HUFCODE_BITS-1)) -+ return RETVAL_DATA_ERROR; -+ -+ /* If first bit is 0, stop. Else -+ second bit indicates whether to -+ increment or decrement the value. -+ Optimization: grab 2 bits and unget -+ the second if the first was 0. */ -+ -+ k = get_bits(bd, 2); -+ if (k < 2) { -+ bd->inbufBitCount++; -+ break; -+ } -+ /* Add one if second bit 1, else -+ * subtract 1. Avoids if/else */ -+ t += (((k+1)&2)-1); -+ } -+ /* Correct for the initial -1, to get the -+ * final symbol length */ -+ length[i] = t+1; -+ } -+ /* Find largest and smallest lengths in this group */ -+ minLen = maxLen = length[0]; -+ -+ for (i = 1; i < symCount; i++) { -+ if (length[i] > maxLen) -+ maxLen = length[i]; -+ else if (length[i] < minLen) -+ minLen = length[i]; -+ } -+ -+ /* Calculate permute[], base[], and limit[] tables from -+ * length[]. -+ * -+ * permute[] is the lookup table for converting -+ * Huffman coded symbols into decoded symbols. base[] -+ * is the amount to subtract from the value of a -+ * Huffman symbol of a given length when using -+ * permute[]. -+ * -+ * limit[] indicates the largest numerical value a -+ * symbol with a given number of bits can have. This -+ * is how the Huffman codes can vary in length: each -+ * code with a value > limit[length] needs another -+ * bit. -+ */ -+ hufGroup = bd->groups+j; -+ hufGroup->minLen = minLen; -+ hufGroup->maxLen = maxLen; -+ /* Note that minLen can't be smaller than 1, so we -+ adjust the base and limit array pointers so we're -+ not always wasting the first entry. We do this -+ again when using them (during symbol decoding).*/ -+ base = hufGroup->base-1; -+ limit = hufGroup->limit-1; -+ /* Calculate permute[]. Concurently, initialize -+ * temp[] and limit[]. */ -+ pp = 0; -+ for (i = minLen; i <= maxLen; i++) { -+ temp[i] = limit[i] = 0; -+ for (t = 0; t < symCount; t++) -+ if (length[t] == i) -+ hufGroup->permute[pp++] = t; -+ } -+ /* Count symbols coded for at each bit length */ -+ for (i = 0; i < symCount; i++) -+ temp[length[i]]++; -+ /* Calculate limit[] (the largest symbol-coding value -+ *at each bit length, which is (previous limit << -+ *1)+symbols at this level), and base[] (number of -+ *symbols to ignore at each bit length, which is limit -+ *minus the cumulative count of symbols coded for -+ *already). */ -+ pp = t = 0; -+ for (i = minLen; i < maxLen; i++) { -+ pp += temp[i]; -+ /* We read the largest possible symbol size -+ and then unget bits after determining how -+ many we need, and those extra bits could be -+ set to anything. (They're noise from -+ future symbols.) At each level we're -+ really only interested in the first few -+ bits, so here we set all the trailing -+ to-be-ignored bits to 1 so they don't -+ affect the value > limit[length] -+ comparison. */ -+ limit[i] = (pp << (maxLen - i)) - 1; -+ pp <<= 1; -+ base[i+1] = pp-(t += temp[i]); -+ } -+ limit[maxLen+1] = INT_MAX; /* Sentinal value for -+ * reading next sym. */ -+ limit[maxLen] = pp+temp[maxLen]-1; -+ base[minLen] = 0; -+ } -+ /* We've finished reading and digesting the block header. Now -+ read this block's Huffman coded symbols from the file and -+ undo the Huffman coding and run length encoding, saving the -+ result into dbuf[dbufCount++] = uc */ -+ -+ /* Initialize symbol occurrence counters and symbol Move To -+ * Front table */ -+ for (i = 0; i < 256; i++) { -+ byteCount[i] = 0; -+ mtfSymbol[i] = (unsigned char)i; -+ } -+ /* Loop through compressed symbols. */ -+ runPos = dbufCount = symCount = selector = 0; -+ for (;;) { -+ /* Determine which Huffman coding group to use. */ -+ if (!(symCount--)) { -+ symCount = GROUP_SIZE-1; -+ if (selector >= nSelectors) -+ return RETVAL_DATA_ERROR; -+ hufGroup = bd->groups+selectors[selector++]; -+ base = hufGroup->base-1; -+ limit = hufGroup->limit-1; -+ } -+ /* Read next Huffman-coded symbol. */ -+ /* Note: It is far cheaper to read maxLen bits and -+ back up than it is to read minLen bits and then an -+ additional bit at a time, testing as we go. -+ Because there is a trailing last block (with file -+ CRC), there is no danger of the overread causing an -+ unexpected EOF for a valid compressed file. As a -+ further optimization, we do the read inline -+ (falling back to a call to get_bits if the buffer -+ runs dry). The following (up to got_huff_bits:) is -+ equivalent to j = get_bits(bd, hufGroup->maxLen); -+ */ -+ while (bd->inbufBitCount < hufGroup->maxLen) { -+ if (bd->inbufPos == bd->inbufCount) { -+ j = get_bits(bd, hufGroup->maxLen); -+ goto got_huff_bits; -+ } -+ bd->inbufBits = -+ (bd->inbufBits << 8)|bd->inbuf[bd->inbufPos++]; -+ bd->inbufBitCount += 8; -+ }; -+ bd->inbufBitCount -= hufGroup->maxLen; -+ j = (bd->inbufBits >> bd->inbufBitCount)& -+ ((1 << hufGroup->maxLen)-1); -+got_huff_bits: -+ /* Figure how how many bits are in next symbol and -+ * unget extras */ -+ i = hufGroup->minLen; -+ while (j > limit[i]) -+ ++i; -+ bd->inbufBitCount += (hufGroup->maxLen - i); -+ /* Huffman decode value to get nextSym (with bounds checking) */ -+ if ((i > hufGroup->maxLen) -+ || (((unsigned)(j = (j>>(hufGroup->maxLen-i))-base[i])) -+ >= MAX_SYMBOLS)) -+ return RETVAL_DATA_ERROR; -+ nextSym = hufGroup->permute[j]; -+ /* We have now decoded the symbol, which indicates -+ either a new literal byte, or a repeated run of the -+ most recent literal byte. First, check if nextSym -+ indicates a repeated run, and if so loop collecting -+ how many times to repeat the last literal. */ -+ if (((unsigned)nextSym) <= SYMBOL_RUNB) { /* RUNA or RUNB */ -+ /* If this is the start of a new run, zero out -+ * counter */ -+ if (!runPos) { -+ runPos = 1; -+ t = 0; -+ } -+ /* Neat trick that saves 1 symbol: instead of -+ or-ing 0 or 1 at each bit position, add 1 -+ or 2 instead. For example, 1011 is 1 << 0 -+ + 1 << 1 + 2 << 2. 1010 is 2 << 0 + 2 << 1 -+ + 1 << 2. You can make any bit pattern -+ that way using 1 less symbol than the basic -+ or 0/1 method (except all bits 0, which -+ would use no symbols, but a run of length 0 -+ doesn't mean anything in this context). -+ Thus space is saved. */ -+ t += (runPos << nextSym); -+ /* +runPos if RUNA; +2*runPos if RUNB */ -+ -+ runPos <<= 1; -+ continue; -+ } -+ /* When we hit the first non-run symbol after a run, -+ we now know how many times to repeat the last -+ literal, so append that many copies to our buffer -+ of decoded symbols (dbuf) now. (The last literal -+ used is the one at the head of the mtfSymbol -+ array.) */ -+ if (runPos) { -+ runPos = 0; -+ if (dbufCount+t >= dbufSize) -+ return RETVAL_DATA_ERROR; -+ -+ uc = symToByte[mtfSymbol[0]]; -+ byteCount[uc] += t; -+ while (t--) -+ dbuf[dbufCount++] = uc; -+ } -+ /* Is this the terminating symbol? */ -+ if (nextSym > symTotal) -+ break; -+ /* At this point, nextSym indicates a new literal -+ character. Subtract one to get the position in the -+ MTF array at which this literal is currently to be -+ found. (Note that the result can't be -1 or 0, -+ because 0 and 1 are RUNA and RUNB. But another -+ instance of the first symbol in the mtf array, -+ position 0, would have been handled as part of a -+ run above. Therefore 1 unused mtf position minus 2 -+ non-literal nextSym values equals -1.) */ -+ if (dbufCount >= dbufSize) -+ return RETVAL_DATA_ERROR; -+ i = nextSym - 1; -+ uc = mtfSymbol[i]; -+ /* Adjust the MTF array. Since we typically expect to -+ *move only a small number of symbols, and are bound -+ *by 256 in any case, using memmove here would -+ *typically be bigger and slower due to function call -+ *overhead and other assorted setup costs. */ -+ do { -+ mtfSymbol[i] = mtfSymbol[i-1]; -+ } while (--i); -+ mtfSymbol[0] = uc; -+ uc = symToByte[uc]; -+ /* We have our literal byte. Save it into dbuf. */ -+ byteCount[uc]++; -+ dbuf[dbufCount++] = (unsigned int)uc; -+ } -+ /* At this point, we've read all the Huffman-coded symbols -+ (and repeated runs) for this block from the input stream, -+ and decoded them into the intermediate buffer. There are -+ dbufCount many decoded bytes in dbuf[]. Now undo the -+ Burrows-Wheeler transform on dbuf. See -+ http://dogma.net/markn/articles/bwt/bwt.htm -+ */ -+ /* Turn byteCount into cumulative occurrence counts of 0 to n-1. */ -+ j = 0; -+ for (i = 0; i < 256; i++) { -+ k = j+byteCount[i]; -+ byteCount[i] = j; -+ j = k; -+ } -+ /* Figure out what order dbuf would be in if we sorted it. */ -+ for (i = 0; i < dbufCount; i++) { -+ uc = (unsigned char)(dbuf[i] & 0xff); -+ dbuf[byteCount[uc]] |= (i << 8); -+ byteCount[uc]++; -+ } -+ /* Decode first byte by hand to initialize "previous" byte. -+ Note that it doesn't get output, and if the first three -+ characters are identical it doesn't qualify as a run (hence -+ writeRunCountdown = 5). */ -+ if (dbufCount) { -+ if (origPtr >= dbufCount) -+ return RETVAL_DATA_ERROR; -+ bd->writePos = dbuf[origPtr]; -+ bd->writeCurrent = (unsigned char)(bd->writePos&0xff); -+ bd->writePos >>= 8; -+ bd->writeRunCountdown = 5; -+ } -+ bd->writeCount = dbufCount; -+ -+ return RETVAL_OK; -+} -+ -+/* Undo burrows-wheeler transform on intermediate buffer to produce output. -+ If start_bunzip was initialized with out_fd =-1, then up to len bytes of -+ data are written to outbuf. Return value is number of bytes written or -+ error (all errors are negative numbers). If out_fd!=-1, outbuf and len -+ are ignored, data is written to out_fd and return is RETVAL_OK or error. -+*/ -+ -+static int INIT read_bunzip(struct bunzip_data *bd, char *outbuf, int len) -+{ -+ const unsigned int *dbuf; -+ int pos, xcurrent, previous, gotcount; -+ -+ /* If last read was short due to end of file, return last block now */ -+ if (bd->writeCount < 0) -+ return bd->writeCount; -+ -+ gotcount = 0; -+ dbuf = bd->dbuf; -+ pos = bd->writePos; -+ xcurrent = bd->writeCurrent; -+ -+ /* We will always have pending decoded data to write into the output -+ buffer unless this is the very first call (in which case we haven't -+ Huffman-decoded a block into the intermediate buffer yet). */ -+ -+ if (bd->writeCopies) { -+ /* Inside the loop, writeCopies means extra copies (beyond 1) */ -+ --bd->writeCopies; -+ /* Loop outputting bytes */ -+ for (;;) { -+ /* If the output buffer is full, snapshot -+ * state and return */ -+ if (gotcount >= len) { -+ bd->writePos = pos; -+ bd->writeCurrent = xcurrent; -+ bd->writeCopies++; -+ return len; -+ } -+ /* Write next byte into output buffer, updating CRC */ -+ outbuf[gotcount++] = xcurrent; -+ bd->writeCRC = (((bd->writeCRC) << 8) -+ ^bd->crc32Table[((bd->writeCRC) >> 24) -+ ^xcurrent]); -+ /* Loop now if we're outputting multiple -+ * copies of this byte */ -+ if (bd->writeCopies) { -+ --bd->writeCopies; -+ continue; -+ } -+decode_next_byte: -+ if (!bd->writeCount--) -+ break; -+ /* Follow sequence vector to undo -+ * Burrows-Wheeler transform */ -+ previous = xcurrent; -+ pos = dbuf[pos]; -+ xcurrent = pos&0xff; -+ pos >>= 8; -+ /* After 3 consecutive copies of the same -+ byte, the 4th is a repeat count. We count -+ down from 4 instead *of counting up because -+ testing for non-zero is faster */ -+ if (--bd->writeRunCountdown) { -+ if (xcurrent != previous) -+ bd->writeRunCountdown = 4; -+ } else { -+ /* We have a repeated run, this byte -+ * indicates the count */ -+ bd->writeCopies = xcurrent; -+ xcurrent = previous; -+ bd->writeRunCountdown = 5; -+ /* Sometimes there are just 3 bytes -+ * (run length 0) */ -+ if (!bd->writeCopies) -+ goto decode_next_byte; -+ /* Subtract the 1 copy we'd output -+ * anyway to get extras */ -+ --bd->writeCopies; -+ } -+ } -+ /* Decompression of this block completed successfully */ -+ bd->writeCRC = ~bd->writeCRC; -+ bd->totalCRC = ((bd->totalCRC << 1) | -+ (bd->totalCRC >> 31)) ^ bd->writeCRC; -+ /* If this block had a CRC error, force file level CRC error. */ -+ if (bd->writeCRC != bd->headerCRC) { -+ bd->totalCRC = bd->headerCRC+1; -+ return RETVAL_LAST_BLOCK; -+ } -+ } -+ -+ /* Refill the intermediate buffer by Huffman-decoding next -+ * block of input */ -+ /* (previous is just a convenient unused temp variable here) */ -+ previous = get_next_block(bd); -+ if (previous) { -+ bd->writeCount = previous; -+ return (previous != RETVAL_LAST_BLOCK) ? previous : gotcount; -+ } -+ bd->writeCRC = 0xffffffffUL; -+ pos = bd->writePos; -+ xcurrent = bd->writeCurrent; -+ goto decode_next_byte; -+} -+ -+static int INIT nofill(void *buf, unsigned int len) -+{ -+ return -1; -+} -+ -+/* Allocate the structure, read file header. If in_fd ==-1, inbuf must contain -+ a complete bunzip file (len bytes long). If in_fd!=-1, inbuf and len are -+ ignored, and data is read from file handle into temporary buffer. */ -+static int INIT start_bunzip(struct bunzip_data **bdp, void *inbuf, int len, -+ int (*fill)(void*, unsigned int)) -+{ -+ struct bunzip_data *bd; -+ unsigned int i, j, c; -+ const unsigned int BZh0 = -+ (((unsigned int)'B') << 24)+(((unsigned int)'Z') << 16) -+ +(((unsigned int)'h') << 8)+(unsigned int)'0'; -+ -+ /* Figure out how much data to allocate */ -+ i = sizeof(struct bunzip_data); -+ -+ /* Allocate bunzip_data. Most fields initialize to zero. */ -+ bd = *bdp = malloc(i); -+ memset(bd, 0, sizeof(struct bunzip_data)); -+ /* Setup input buffer */ -+ bd->inbuf = inbuf; -+ bd->inbufCount = len; -+ if (fill != NULL) -+ bd->fill = fill; -+ else -+ bd->fill = nofill; -+ -+ /* Init the CRC32 table (big endian) */ -+ for (i = 0; i < 256; i++) { -+ c = i << 24; -+ for (j = 8; j; j--) -+ c = c&0x80000000 ? (c << 1)^0x04c11db7 : (c << 1); -+ bd->crc32Table[i] = c; -+ } -+ -+ /* Ensure that file starts with "BZh['1'-'9']." */ -+ i = get_bits(bd, 32); -+ if (((unsigned int)(i-BZh0-1)) >= 9) -+ return RETVAL_NOT_BZIP_DATA; -+ -+ /* Fourth byte (ascii '1'-'9'), indicates block size in units of 100k of -+ uncompressed data. Allocate intermediate buffer for block. */ -+ bd->dbufSize = 100000*(i-BZh0); -+ -+ bd->dbuf = large_malloc(bd->dbufSize * sizeof(int)); -+ return RETVAL_OK; -+} -+ -+/* Example usage: decompress src_fd to dst_fd. (Stops at end of bzip2 data, -+ not end of file.) */ -+STATIC int INIT bunzip2(unsigned char *buf, int len, -+ int(*fill)(void*, unsigned int), -+ int(*flush)(void*, unsigned int), -+ unsigned char *outbuf, -+ int *pos, -+ void(*error_fn)(char *x)) -+{ -+ struct bunzip_data *bd; -+ int i = -1; -+ unsigned char *inbuf; -+ -+ set_error_fn(error_fn); -+ if (flush) -+ outbuf = malloc(BZIP2_IOBUF_SIZE); -+ else -+ len -= 4; /* Uncompressed size hack active in pre-boot -+ environment */ -+ if (!outbuf) { -+ error("Could not allocate output bufer"); -+ return -1; -+ } -+ if (buf) -+ inbuf = buf; -+ else -+ inbuf = malloc(BZIP2_IOBUF_SIZE); -+ if (!inbuf) { -+ error("Could not allocate input bufer"); -+ goto exit_0; -+ } -+ i = start_bunzip(&bd, inbuf, len, fill); -+ if (!i) { -+ for (;;) { -+ i = read_bunzip(bd, outbuf, BZIP2_IOBUF_SIZE); -+ if (i <= 0) -+ break; -+ if (!flush) -+ outbuf += i; -+ else -+ if (i != flush(outbuf, i)) { -+ i = RETVAL_UNEXPECTED_OUTPUT_EOF; -+ break; -+ } -+ } -+ } -+ /* Check CRC and release memory */ -+ if (i == RETVAL_LAST_BLOCK) { -+ if (bd->headerCRC != bd->totalCRC) -+ error("Data integrity error when decompressing."); -+ else -+ i = RETVAL_OK; -+ } else if (i == RETVAL_UNEXPECTED_OUTPUT_EOF) { -+ error("Compressed file ends unexpectedly"); -+ } -+ if (bd->dbuf) -+ large_free(bd->dbuf); -+ if (pos) -+ *pos = bd->inbufPos; -+ free(bd); -+ if (!buf) -+ free(inbuf); -+exit_0: -+ if (flush) -+ free(outbuf); -+ return i; -+} -+ -+#define decompress bunzip2 -diff -purN linux-2.6.27.6/lib/decompress_unlzma.c linux-2.6.27.6udpcast/lib/decompress_unlzma.c ---- linux-2.6.27.6/lib/decompress_unlzma.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.27.6udpcast/lib/decompress_unlzma.c 2008-11-16 23:40:21.000000000 +0100 -@@ -0,0 +1,647 @@ -+/* Lzma decompressor for Linux kernel. Shamelessly snarfed -+ *from busybox 1.1.1 -+ * -+ *Linux kernel adaptation -+ *Copyright (C) 2006 Alain < alain@knaff.lu > -+ * -+ *Based on small lzma deflate implementation/Small range coder -+ *implementation for lzma. -+ *Copyright (C) 2006 Aurelien Jacobs < aurel@gnuage.org > -+ * -+ *Based on LzmaDecode.c from the LZMA SDK 4.22 (http://www.7-zip.org/) -+ *Copyright (C) 1999-2005 Igor Pavlov -+ * -+ *Copyrights of the parts, see headers below. -+ * -+ * -+ *This program is free software; you can redistribute it and/or -+ *modify it under the terms of the GNU Lesser General Public -+ *License as published by the Free Software Foundation; either -+ *version 2.1 of the License, or (at your option) any later version. -+ * -+ *This program is distributed in the hope that it will be useful, -+ *but WITHOUT ANY WARRANTY; without even the implied warranty of -+ *MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ *Lesser General Public License for more details. -+ * -+ *You should have received a copy of the GNU Lesser General Public -+ *License along with this library; if not, write to the Free Software -+ *Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -+ */ -+ -+#ifndef STATIC -+#include <linux/decompress/unlzma.h> -+#endif /* STATIC */ -+ -+#include <linux/decompress/mm.h> -+ -+#define MIN(a, b) (((a) < (b)) ? (a) : (b)) -+ -+static long long INIT read_int(unsigned char *ptr, int size) -+{ -+ int i; -+ long long ret = 0; -+ -+ for (i = 0; i < size; i++) -+ ret = (ret << 8) | ptr[size-i-1]; -+ return ret; -+} -+ -+#define ENDIAN_CONVERT(x) \ -+ x = (typeof(x))read_int((unsigned char *)&x, sizeof(x)) -+ -+ -+/* Small range coder implementation for lzma. -+ *Copyright (C) 2006 Aurelien Jacobs < aurel@gnuage.org > -+ * -+ *Based on LzmaDecode.c from the LZMA SDK 4.22 (http://www.7-zip.org/) -+ *Copyright (c) 1999-2005 Igor Pavlov -+ */ -+ -+#include <linux/compiler.h> -+ -+#define LZMA_IOBUF_SIZE 0x10000 -+ -+struct rc { -+ int (*fill)(void*, unsigned int); -+ uint8_t *ptr; -+ uint8_t *buffer; -+ uint8_t *buffer_end; -+ int buffer_size; -+ uint32_t code; -+ uint32_t range; -+ uint32_t bound; -+}; -+ -+ -+#define RC_TOP_BITS 24 -+#define RC_MOVE_BITS 5 -+#define RC_MODEL_TOTAL_BITS 11 -+ -+ -+/* Called twice: once at startup and once in rc_normalize() */ -+static void INIT rc_read(struct rc *rc) -+{ -+ rc->buffer_size = rc->fill((char *)rc->buffer, LZMA_IOBUF_SIZE); -+ if (rc->buffer_size <= 0) -+ error("unexpected EOF"); -+ rc->ptr = rc->buffer; -+ rc->buffer_end = rc->buffer + rc->buffer_size; -+} -+ -+/* Called once */ -+static inline void INIT rc_init(struct rc *rc, -+ int (*fill)(void*, unsigned int), -+ char *buffer, int buffer_size) -+{ -+ rc->fill = fill; -+ rc->buffer = (uint8_t *)buffer; -+ rc->buffer_size = buffer_size; -+ rc->buffer_end = rc->buffer + rc->buffer_size; -+ rc->ptr = rc->buffer; -+ -+ rc->code = 0; -+ rc->range = 0xFFFFFFFF; -+} -+ -+static inline void INIT rc_init_code(struct rc *rc) -+{ -+ int i; -+ -+ for (i = 0; i < 5; i++) { -+ if (rc->ptr >= rc->buffer_end) -+ rc_read(rc); -+ rc->code = (rc->code << 8) | *rc->ptr++; -+ } -+} -+ -+ -+/* Called once. TODO: bb_maybe_free() */ -+static inline void INIT rc_free(struct rc *rc) -+{ -+ free(rc->buffer); -+} -+ -+/* Called twice, but one callsite is in inline'd rc_is_bit_0_helper() */ -+static void INIT rc_do_normalize(struct rc *rc) -+{ -+ if (rc->ptr >= rc->buffer_end) -+ rc_read(rc); -+ rc->range <<= 8; -+ rc->code = (rc->code << 8) | *rc->ptr++; -+} -+static inline void INIT rc_normalize(struct rc *rc) -+{ -+ if (rc->range < (1 << RC_TOP_BITS)) -+ rc_do_normalize(rc); -+} -+ -+/* Called 9 times */ -+/* Why rc_is_bit_0_helper exists? -+ *Because we want to always expose (rc->code < rc->bound) to optimizer -+ */ -+static inline uint32_t INIT rc_is_bit_0_helper(struct rc *rc, uint16_t *p) -+{ -+ rc_normalize(rc); -+ rc->bound = *p * (rc->range >> RC_MODEL_TOTAL_BITS); -+ return rc->bound; -+} -+static inline int INIT rc_is_bit_0(struct rc *rc, uint16_t *p) -+{ -+ uint32_t t = rc_is_bit_0_helper(rc, p); -+ return rc->code < t; -+} -+ -+/* Called ~10 times, but very small, thus inlined */ -+static inline void INIT rc_update_bit_0(struct rc *rc, uint16_t *p) -+{ -+ rc->range = rc->bound; -+ *p += ((1 << RC_MODEL_TOTAL_BITS) - *p) >> RC_MOVE_BITS; -+} -+static inline void rc_update_bit_1(struct rc *rc, uint16_t *p) -+{ -+ rc->range -= rc->bound; -+ rc->code -= rc->bound; -+ *p -= *p >> RC_MOVE_BITS; -+} -+ -+/* Called 4 times in unlzma loop */ -+static int INIT rc_get_bit(struct rc *rc, uint16_t *p, int *symbol) -+{ -+ if (rc_is_bit_0(rc, p)) { -+ rc_update_bit_0(rc, p); -+ *symbol *= 2; -+ return 0; -+ } else { -+ rc_update_bit_1(rc, p); -+ *symbol = *symbol * 2 + 1; -+ return 1; -+ } -+} -+ -+/* Called once */ -+static inline int INIT rc_direct_bit(struct rc *rc) -+{ -+ rc_normalize(rc); -+ rc->range >>= 1; -+ if (rc->code >= rc->range) { -+ rc->code -= rc->range; -+ return 1; -+ } -+ return 0; -+} -+ -+/* Called twice */ -+static inline void INIT -+rc_bit_tree_decode(struct rc *rc, uint16_t *p, int num_levels, int *symbol) -+{ -+ int i = num_levels; -+ -+ *symbol = 1; -+ while (i--) -+ rc_get_bit(rc, p + *symbol, symbol); -+ *symbol -= 1 << num_levels; -+} -+ -+ -+/* -+ * Small lzma deflate implementation. -+ * Copyright (C) 2006 Aurelien Jacobs < aurel@gnuage.org > -+ * -+ * Based on LzmaDecode.c from the LZMA SDK 4.22 (http://www.7-zip.org/) -+ * Copyright (C) 1999-2005 Igor Pavlov -+ */ -+ -+ -+struct lzma_header { -+ uint8_t pos; -+ uint32_t dict_size; -+ uint64_t dst_size; -+} __attribute__ ((packed)) ; -+ -+ -+#define LZMA_BASE_SIZE 1846 -+#define LZMA_LIT_SIZE 768 -+ -+#define LZMA_NUM_POS_BITS_MAX 4 -+ -+#define LZMA_LEN_NUM_LOW_BITS 3 -+#define LZMA_LEN_NUM_MID_BITS 3 -+#define LZMA_LEN_NUM_HIGH_BITS 8 -+ -+#define LZMA_LEN_CHOICE 0 -+#define LZMA_LEN_CHOICE_2 (LZMA_LEN_CHOICE + 1) -+#define LZMA_LEN_LOW (LZMA_LEN_CHOICE_2 + 1) -+#define LZMA_LEN_MID (LZMA_LEN_LOW \ -+ + (1 << (LZMA_NUM_POS_BITS_MAX + LZMA_LEN_NUM_LOW_BITS))) -+#define LZMA_LEN_HIGH (LZMA_LEN_MID \ -+ +(1 << (LZMA_NUM_POS_BITS_MAX + LZMA_LEN_NUM_MID_BITS))) -+#define LZMA_NUM_LEN_PROBS (LZMA_LEN_HIGH + (1 << LZMA_LEN_NUM_HIGH_BITS)) -+ -+#define LZMA_NUM_STATES 12 -+#define LZMA_NUM_LIT_STATES 7 -+ -+#define LZMA_START_POS_MODEL_INDEX 4 -+#define LZMA_END_POS_MODEL_INDEX 14 -+#define LZMA_NUM_FULL_DISTANCES (1 << (LZMA_END_POS_MODEL_INDEX >> 1)) -+ -+#define LZMA_NUM_POS_SLOT_BITS 6 -+#define LZMA_NUM_LEN_TO_POS_STATES 4 -+ -+#define LZMA_NUM_ALIGN_BITS 4 -+ -+#define LZMA_MATCH_MIN_LEN 2 -+ -+#define LZMA_IS_MATCH 0 -+#define LZMA_IS_REP (LZMA_IS_MATCH + (LZMA_NUM_STATES << LZMA_NUM_POS_BITS_MAX)) -+#define LZMA_IS_REP_G0 (LZMA_IS_REP + LZMA_NUM_STATES) -+#define LZMA_IS_REP_G1 (LZMA_IS_REP_G0 + LZMA_NUM_STATES) -+#define LZMA_IS_REP_G2 (LZMA_IS_REP_G1 + LZMA_NUM_STATES) -+#define LZMA_IS_REP_0_LONG (LZMA_IS_REP_G2 + LZMA_NUM_STATES) -+#define LZMA_POS_SLOT (LZMA_IS_REP_0_LONG \ -+ + (LZMA_NUM_STATES << LZMA_NUM_POS_BITS_MAX)) -+#define LZMA_SPEC_POS (LZMA_POS_SLOT \ -+ +(LZMA_NUM_LEN_TO_POS_STATES << LZMA_NUM_POS_SLOT_BITS)) -+#define LZMA_ALIGN (LZMA_SPEC_POS \ -+ + LZMA_NUM_FULL_DISTANCES - LZMA_END_POS_MODEL_INDEX) -+#define LZMA_LEN_CODER (LZMA_ALIGN + (1 << LZMA_NUM_ALIGN_BITS)) -+#define LZMA_REP_LEN_CODER (LZMA_LEN_CODER + LZMA_NUM_LEN_PROBS) -+#define LZMA_LITERAL (LZMA_REP_LEN_CODER + LZMA_NUM_LEN_PROBS) -+ -+ -+struct writer { -+ uint8_t *buffer; -+ uint8_t previous_byte; -+ size_t buffer_pos; -+ int bufsize; -+ size_t global_pos; -+ int(*flush)(void*, unsigned int); -+ struct lzma_header *header; -+}; -+ -+struct cstate { -+ int state; -+ uint32_t rep0, rep1, rep2, rep3; -+}; -+ -+static inline size_t INIT get_pos(struct writer *wr) -+{ -+ return -+ wr->global_pos + wr->buffer_pos; -+} -+ -+static inline uint8_t INIT peek_old_byte(struct writer *wr, -+ uint32_t offs) -+{ -+ if (!wr->flush) { -+ int32_t pos; -+ while (offs > wr->header->dict_size) -+ offs -= wr->header->dict_size; -+ pos = wr->buffer_pos - offs; -+ return wr->buffer[pos]; -+ } else { -+ uint32_t pos = wr->buffer_pos - offs; -+ while (pos >= wr->header->dict_size) -+ pos += wr->header->dict_size; -+ return wr->buffer[pos]; -+ } -+ -+} -+ -+static inline void INIT write_byte(struct writer *wr, uint8_t byte) -+{ -+ wr->buffer[wr->buffer_pos++] = wr->previous_byte = byte; -+ if (wr->flush && wr->buffer_pos == wr->header->dict_size) { -+ wr->buffer_pos = 0; -+ wr->global_pos += wr->header->dict_size; -+ wr->flush((char *)wr->buffer, wr->header->dict_size); -+ } -+} -+ -+ -+static inline void INIT copy_byte(struct writer *wr, uint32_t offs) -+{ -+ write_byte(wr, peek_old_byte(wr, offs)); -+} -+ -+static inline void INIT copy_bytes(struct writer *wr, -+ uint32_t rep0, int len) -+{ -+ do { -+ copy_byte(wr, rep0); -+ len--; -+ } while (len != 0 && wr->buffer_pos < wr->header->dst_size); -+} -+ -+static inline void INIT process_bit0(struct writer *wr, struct rc *rc, -+ struct cstate *cst, uint16_t *p, -+ int pos_state, uint16_t *prob, -+ int lc, uint32_t literal_pos_mask) { -+ int mi = 1; -+ rc_update_bit_0(rc, prob); -+ prob = (p + LZMA_LITERAL + -+ (LZMA_LIT_SIZE -+ * (((get_pos(wr) & literal_pos_mask) << lc) -+ + (wr->previous_byte >> (8 - lc)))) -+ ); -+ -+ if (cst->state >= LZMA_NUM_LIT_STATES) { -+ int match_byte = peek_old_byte(wr, cst->rep0); -+ do { -+ int bit; -+ uint16_t *prob_lit; -+ -+ match_byte <<= 1; -+ bit = match_byte & 0x100; -+ prob_lit = prob + 0x100 + bit + mi; -+ if (rc_get_bit(rc, prob_lit, &mi)) { -+ if (!bit) -+ break; -+ } else { -+ if (bit) -+ break; -+ } -+ } while (mi < 0x100); -+ } -+ while (mi < 0x100) { -+ uint16_t *prob_lit = prob + mi; -+ rc_get_bit(rc, prob_lit, &mi); -+ } -+ write_byte(wr, mi); -+ if (cst->state < 4) -+ cst->state = 0; -+ else if (cst->state < 10) -+ cst->state -= 3; -+ else -+ cst->state -= 6; -+} -+ -+static inline void INIT process_bit1(struct writer *wr, struct rc *rc, -+ struct cstate *cst, uint16_t *p, -+ int pos_state, uint16_t *prob) { -+ int offset; -+ uint16_t *prob_len; -+ int num_bits; -+ int len; -+ -+ rc_update_bit_1(rc, prob); -+ prob = p + LZMA_IS_REP + cst->state; -+ if (rc_is_bit_0(rc, prob)) { -+ rc_update_bit_0(rc, prob); -+ cst->rep3 = cst->rep2; -+ cst->rep2 = cst->rep1; -+ cst->rep1 = cst->rep0; -+ cst->state = cst->state < LZMA_NUM_LIT_STATES ? 0 : 3; -+ prob = p + LZMA_LEN_CODER; -+ } else { -+ rc_update_bit_1(rc, prob); -+ prob = p + LZMA_IS_REP_G0 + cst->state; -+ if (rc_is_bit_0(rc, prob)) { -+ rc_update_bit_0(rc, prob); -+ prob = (p + LZMA_IS_REP_0_LONG -+ + (cst->state << -+ LZMA_NUM_POS_BITS_MAX) + -+ pos_state); -+ if (rc_is_bit_0(rc, prob)) { -+ rc_update_bit_0(rc, prob); -+ -+ cst->state = cst->state < LZMA_NUM_LIT_STATES ? -+ 9 : 11; -+ copy_byte(wr, cst->rep0); -+ return; -+ } else { -+ rc_update_bit_1(rc, prob); -+ } -+ } else { -+ uint32_t distance; -+ -+ rc_update_bit_1(rc, prob); -+ prob = p + LZMA_IS_REP_G1 + cst->state; -+ if (rc_is_bit_0(rc, prob)) { -+ rc_update_bit_0(rc, prob); -+ distance = cst->rep1; -+ } else { -+ rc_update_bit_1(rc, prob); -+ prob = p + LZMA_IS_REP_G2 + cst->state; -+ if (rc_is_bit_0(rc, prob)) { -+ rc_update_bit_0(rc, prob); -+ distance = cst->rep2; -+ } else { -+ rc_update_bit_1(rc, prob); -+ distance = cst->rep3; -+ cst->rep3 = cst->rep2; -+ } -+ cst->rep2 = cst->rep1; -+ } -+ cst->rep1 = cst->rep0; -+ cst->rep0 = distance; -+ } -+ cst->state = cst->state < LZMA_NUM_LIT_STATES ? 8 : 11; -+ prob = p + LZMA_REP_LEN_CODER; -+ } -+ -+ prob_len = prob + LZMA_LEN_CHOICE; -+ if (rc_is_bit_0(rc, prob_len)) { -+ rc_update_bit_0(rc, prob_len); -+ prob_len = (prob + LZMA_LEN_LOW -+ + (pos_state << -+ LZMA_LEN_NUM_LOW_BITS)); -+ offset = 0; -+ num_bits = LZMA_LEN_NUM_LOW_BITS; -+ } else { -+ rc_update_bit_1(rc, prob_len); -+ prob_len = prob + LZMA_LEN_CHOICE_2; -+ if (rc_is_bit_0(rc, prob_len)) { -+ rc_update_bit_0(rc, prob_len); -+ prob_len = (prob + LZMA_LEN_MID -+ + (pos_state << -+ LZMA_LEN_NUM_MID_BITS)); -+ offset = 1 << LZMA_LEN_NUM_LOW_BITS; -+ num_bits = LZMA_LEN_NUM_MID_BITS; -+ } else { -+ rc_update_bit_1(rc, prob_len); -+ prob_len = prob + LZMA_LEN_HIGH; -+ offset = ((1 << LZMA_LEN_NUM_LOW_BITS) -+ + (1 << LZMA_LEN_NUM_MID_BITS)); -+ num_bits = LZMA_LEN_NUM_HIGH_BITS; -+ } -+ } -+ -+ rc_bit_tree_decode(rc, prob_len, num_bits, &len); -+ len += offset; -+ -+ if (cst->state < 4) { -+ int pos_slot; -+ -+ cst->state += LZMA_NUM_LIT_STATES; -+ prob = -+ p + LZMA_POS_SLOT + -+ ((len < -+ LZMA_NUM_LEN_TO_POS_STATES ? len : -+ LZMA_NUM_LEN_TO_POS_STATES - 1) -+ << LZMA_NUM_POS_SLOT_BITS); -+ rc_bit_tree_decode(rc, prob, -+ LZMA_NUM_POS_SLOT_BITS, -+ &pos_slot); -+ if (pos_slot >= LZMA_START_POS_MODEL_INDEX) { -+ int i, mi; -+ num_bits = (pos_slot >> 1) - 1; -+ cst->rep0 = 2 | (pos_slot & 1); -+ if (pos_slot < LZMA_END_POS_MODEL_INDEX) { -+ cst->rep0 <<= num_bits; -+ prob = p + LZMA_SPEC_POS + -+ cst->rep0 - pos_slot - 1; -+ } else { -+ num_bits -= LZMA_NUM_ALIGN_BITS; -+ while (num_bits--) -+ cst->rep0 = (cst->rep0 << 1) | -+ rc_direct_bit(rc); -+ prob = p + LZMA_ALIGN; -+ cst->rep0 <<= LZMA_NUM_ALIGN_BITS; -+ num_bits = LZMA_NUM_ALIGN_BITS; -+ } -+ i = 1; -+ mi = 1; -+ while (num_bits--) { -+ if (rc_get_bit(rc, prob + mi, &mi)) -+ cst->rep0 |= i; -+ i <<= 1; -+ } -+ } else -+ cst->rep0 = pos_slot; -+ if (++(cst->rep0) == 0) -+ return; -+ } -+ -+ len += LZMA_MATCH_MIN_LEN; -+ -+ copy_bytes(wr, cst->rep0, len); -+} -+ -+ -+ -+STATIC inline int INIT unlzma(unsigned char *buf, int in_len, -+ int(*fill)(void*, unsigned int), -+ int(*flush)(void*, unsigned int), -+ unsigned char *output, -+ int *posp, -+ void(*error_fn)(char *x) -+ ) -+{ -+ struct lzma_header header; -+ int lc, pb, lp; -+ uint32_t pos_state_mask; -+ uint32_t literal_pos_mask; -+ uint16_t *p; -+ int num_probs; -+ struct rc rc; -+ int i, mi; -+ struct writer wr; -+ struct cstate cst; -+ unsigned char *inbuf; -+ int ret = -1; -+ -+ set_error_fn(error_fn); -+ if (!flush) -+ in_len -= 4; /* Uncompressed size hack active in pre-boot -+ environment */ -+ if (buf) -+ inbuf = buf; -+ else -+ inbuf = malloc(LZMA_IOBUF_SIZE); -+ if (!inbuf) { -+ error("Could not allocate input bufer"); -+ goto exit_0; -+ } -+ -+ cst.state = 0; -+ cst.rep0 = cst.rep1 = cst.rep2 = cst.rep3 = 1; -+ -+ wr.header = &header; -+ wr.flush = flush; -+ wr.global_pos = 0; -+ wr.previous_byte = 0; -+ wr.buffer_pos = 0; -+ -+ rc_init(&rc, fill, inbuf, in_len); -+ -+ for (i = 0; i < sizeof(header); i++) { -+ if (rc.ptr >= rc.buffer_end) -+ rc_read(&rc); -+ ((unsigned char *)&header)[i] = *rc.ptr++; -+ } -+ -+ if (header.pos >= (9 * 5 * 5)) -+ error("bad header"); -+ -+ mi = 0; -+ lc = header.pos; -+ while (lc >= 9) { -+ mi++; -+ lc -= 9; -+ } -+ pb = 0; -+ lp = mi; -+ while (lp >= 5) { -+ pb++; -+ lp -= 5; -+ } -+ pos_state_mask = (1 << pb) - 1; -+ literal_pos_mask = (1 << lp) - 1; -+ -+ ENDIAN_CONVERT(header.dict_size); -+ ENDIAN_CONVERT(header.dst_size); -+ -+ if (header.dict_size == 0) -+ header.dict_size = 1; -+ -+ if (output) -+ wr.buffer = output; -+ else { -+ wr.bufsize = MIN(header.dst_size, header.dict_size); -+ wr.buffer = large_malloc(wr.bufsize); -+ } -+ if (wr.buffer == NULL) -+ goto exit_1; -+ -+ num_probs = LZMA_BASE_SIZE + (LZMA_LIT_SIZE << (lc + lp)); -+ p = (uint16_t *) large_malloc(num_probs * sizeof(*p)); -+ if (p == 0) -+ goto exit_2; -+ num_probs = LZMA_LITERAL + (LZMA_LIT_SIZE << (lc + lp)); -+ for (i = 0; i < num_probs; i++) -+ p[i] = (1 << RC_MODEL_TOTAL_BITS) >> 1; -+ -+ rc_init_code(&rc); -+ -+ while (get_pos(&wr) < header.dst_size) { -+ int pos_state = get_pos(&wr) & pos_state_mask; -+ uint16_t *prob = p + LZMA_IS_MATCH + -+ (cst.state << LZMA_NUM_POS_BITS_MAX) + pos_state; -+ if (rc_is_bit_0(&rc, prob)) -+ process_bit0(&wr, &rc, &cst, p, pos_state, prob, -+ lc, literal_pos_mask); -+ else { -+ process_bit1(&wr, &rc, &cst, p, pos_state, prob); -+ if (cst.rep0 == 0) -+ break; -+ } -+ } -+ -+ if (posp) -+ *posp = rc.ptr-rc.buffer; -+ if (wr.flush) -+ wr.flush(wr.buffer, wr.buffer_pos); -+ ret = 0; -+ large_free(p); -+exit_2: -+ if (!output) -+ large_free(wr.buffer); -+exit_1: -+ if (!buf) -+ free(inbuf); -+exit_0: -+ return ret; -+} -+ -+#define decompress unlzma -diff -purN linux-2.6.27.6/lib/inflate.c linux-2.6.27.6udpcast/lib/inflate.c ---- linux-2.6.27.6/lib/inflate.c 2008-11-13 18:56:21.000000000 +0100 -+++ linux-2.6.27.6udpcast/lib/inflate.c 2008-11-16 23:02:55.000000000 +0100 -@@ -109,20 +109,78 @@ static char rcsid[] = "#Id: inflate.c,v - #endif - - #ifndef STATIC -+#include <linux/decompress/inflate.h> -+#endif /* ! STATIC */ - --#if defined(STDC_HEADERS) || defined(HAVE_STDLIB_H) --# include <sys/types.h> --# include <stdlib.h> -+#include <linux/decompress/mm.h> -+ -+#include <linux/string.h> -+ -+#ifdef NEW_CODE -+static int(*flush_cb)(void*, unsigned int); -+static int(*fill_cb)(void*, unsigned int); -+ -+/* Begin stuff copied from initramfs */ -+/* -+ * gzip declarations -+ */ -+ -+#define OF(args) args -+ -+#ifndef memzero -+#define memzero(s, n) memset((s), 0, (n)) - #endif - --#include "gzip.h" --#define STATIC --#endif /* !STATIC */ -+#define INBUFSIZ 4096 -+ -+#define WSIZE 0x8000 /* window size--must be a power of two, and */ -+ /* at least 32K for zip's deflate method */ -+ -+static uint8_t *inbuf; -+static uint8_t *window; -+ -+static unsigned insize; /* valid bytes in inbuf */ -+static unsigned outcnt; /* bytes in output buffer */ -+static long bytes_out; -+ -+/* --- */ -+ -+static unsigned inptr; /* index of next byte to be processed in inbuf */ -+ -+/* --- */ -+ -+/* =========================================================================== -+ * Fill the input buffer. This is called only when the buffer is empty -+ * and at least one byte is really needed. -+ * Returning -1 does not guarantee that gunzip() will ever return. -+ */ -+static int INIT fill_inbuf(void) -+{ -+ insize = fill_cb(inbuf, INBUFSIZ); -+ if (insize <= 0) { -+ error("RAMDISK: ran out of compressed data"); -+ return -1; -+ } -+ -+ inptr = 1; -+ -+ return inbuf[0]; -+} -+ -+#define get_byte() (inptr < insize ? inbuf[inptr++] : fill_inbuf()) -+ -+/* Diagnostic functions (stubbed out) */ -+#define Assert(cond, msg) -+#define Trace(x) -+#define Tracev(x) -+#define Tracevv(x) -+#define Tracec(c, x) -+#define Tracecv(c, x) - --#ifndef INIT --#define INIT -+static void flush_window(void); -+/* End stuff copied from initramfs */ - #endif -- -+ - #define slide window - - /* Huffman code lookup table entry--this entry is four bytes for machines -@@ -133,10 +191,10 @@ static char rcsid[] = "#Id: inflate.c,v - an unused code. If a code with e == 99 is looked up, this implies an - error in the data. */ - struct huft { -- uch e; /* number of extra bits or operation */ -- uch b; /* number of bits in this code or subcode */ -+ uint8_t e; /* number of extra bits or operation */ -+ uint8_t b; /* number of bits in this code or subcode */ - union { -- ush n; /* literal, length base, or distance base */ -+ uint16_t n; /* literal, length base, or distance base */ - struct huft *t; /* pointer to next level of table */ - } v; - }; -@@ -144,7 +202,7 @@ struct huft { - - /* Function prototypes */ - STATIC int INIT huft_build OF((unsigned *, unsigned, unsigned, -- const ush *, const ush *, struct huft **, int *)); -+ const uint16_t *, const uint16_t *, struct huft **, int *)); - STATIC int INIT huft_free OF((struct huft *)); - STATIC int INIT inflate_codes OF((struct huft *, struct huft *, int, int)); - STATIC int INIT inflate_stored OF((void)); -@@ -159,28 +217,28 @@ STATIC int INIT inflate OF((void)); - circular buffer. The index is updated simply by incrementing and then - ANDing with 0x7fff (32K-1). */ - /* It is left to other modules to supply the 32 K area. It is assumed -- to be usable as if it were declared "uch slide[32768];" or as just -- "uch *slide;" and then malloc'ed in the latter case. The definition -+ to be usable as if it were declared "uint8_t slide[32768];" or as just -+ "uint8_t *slide;" and then malloc'ed in the latter case. The definition - must be in unzip.h, included above. */ - /* unsigned wp; current position in slide */ - #define wp outcnt - #define flush_output(w) (wp=(w),flush_window()) - - /* Tables for deflate from PKZIP's appnote.txt. */ --static const unsigned border[] = { /* Order of the bit length code lengths */ -+static const unsigned border[] = { /* Order of the bit length code lengths */ - 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; --static const ush cplens[] = { /* Copy lengths for literal codes 257..285 */ -+static const uint16_t cplens[] = { /* Copy lengths for literal codes 257..285 */ - 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, - 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; - /* note: see note #13 above about the 258 in this list. */ --static const ush cplext[] = { /* Extra bits for literal codes 257..285 */ -+static const uint16_t cplext[] = { /* Extra bits for literal codes 257..285 */ - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, - 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 99, 99}; /* 99==invalid */ --static const ush cpdist[] = { /* Copy offsets for distance codes 0..29 */ -+static const uint16_t cpdist[] = { /* Copy offsets for distance codes 0..29 */ - 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, - 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, - 8193, 12289, 16385, 24577}; --static const ush cpdext[] = { /* Extra bits for distance codes */ -+static const uint16_t cpdext[] = { /* Extra bits for distance codes */ - 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, - 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, - 12, 12, 13, 13}; -@@ -217,59 +275,21 @@ static const ush cpdext[] = { /* - the stream. - */ - --STATIC ulg bb; /* bit buffer */ -+STATIC uint32_t bb; /* bit buffer */ - STATIC unsigned bk; /* bits in bit buffer */ - --STATIC const ush mask_bits[] = { -+STATIC const uint16_t mask_bits[] = { - 0x0000, - 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff, - 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff - }; - --#define NEXTBYTE() ({ int v = get_byte(); if (v < 0) goto underrun; (uch)v; }) --#define NEEDBITS(n) {while(k<(n)){b|=((ulg)NEXTBYTE())<<k;k+=8;}} -+#define NEXTBYTE() ({ int v = get_byte(); if (v < 0) goto underrun; \ -+ (uint8_t)v; }) -+#define NEEDBITS(n) {while (k < (n)) \ -+ {b |= ((uint32_t)NEXTBYTE())<<k; k += 8; } } - #define DUMPBITS(n) {b>>=(n);k-=(n);} - --#ifndef NO_INFLATE_MALLOC --/* A trivial malloc implementation, adapted from -- * malloc by Hannu Savolainen 1993 and Matthias Urlichs 1994 -- */ -- --static unsigned long malloc_ptr; --static int malloc_count; -- --static void *malloc(int size) --{ -- void *p; -- -- if (size < 0) -- error("Malloc error"); -- if (!malloc_ptr) -- malloc_ptr = free_mem_ptr; -- -- malloc_ptr = (malloc_ptr + 3) & ~3; /* Align */ -- -- p = (void *)malloc_ptr; -- malloc_ptr += size; -- -- if (free_mem_end_ptr && malloc_ptr >= free_mem_end_ptr) -- error("Out of memory"); -- -- malloc_count++; -- return p; --} -- --static void free(void *where) --{ -- malloc_count--; -- if (!malloc_count) -- malloc_ptr = free_mem_ptr; --} --#else --#define malloc(a) kmalloc(a, GFP_KERNEL) --#define free(a) kfree(a) --#endif -- - /* - Huffman code decoding is performed using a multi-level table lookup. - The fastest way to decode is to simply build a lookup table whose -@@ -307,7 +327,7 @@ STATIC const int lbits = 9; /* - STATIC const int dbits = 6; /* bits in base distance lookup table */ - - --/* If BMAX needs to be larger than 16, then h and x[] should be ulg. */ -+/* If BMAX needs to be larger than 16, then h and x[] should be uint32_t. */ - #define BMAX 16 /* maximum bit length of any code (16 for explode) */ - #define N_MAX 288 /* maximum number of codes in any set */ - -@@ -319,8 +339,8 @@ STATIC int INIT huft_build( - unsigned *b, /* code lengths in bits (all assumed <= BMAX) */ - unsigned n, /* number of codes (assumed <= N_MAX) */ - unsigned s, /* number of simple-valued codes (0..s-1) */ -- const ush *d, /* list of base values for non-simple codes */ -- const ush *e, /* list of extra bits for non-simple codes */ -+ const uint16_t *d, /* list of base values for non-simple codes */ -+ const uint16_t *e, /* list of extra bits for non-simple codes */ - struct huft **t, /* result: starting table */ - int *m /* maximum lookup bits, returns actual */ - ) -@@ -500,8 +520,8 @@ DEBG1("5 "); - if (h) - { - x[h] = i; /* save pattern for backing up */ -- r.b = (uch)l; /* bits to dump before this table */ -- r.e = (uch)(16 + j); /* bits in this table */ -+ r.b = (uint8_t)l; /* bits to dump before this table */ -+ r.e = (uint8_t)(16 + j); /* bits in this table */ - r.v.t = q; /* pointer to this table */ - j = i >> (w - l); /* (get around Turbo C bug) */ - u[h-1][j] = r; /* connect to last table */ -@@ -511,18 +531,18 @@ DEBG1("6 "); - DEBG("h6c "); - - /* set up table entry in r */ -- r.b = (uch)(k - w); -+ r.b = (uint8_t)(k - w); - if (p >= v + n) - r.e = 99; /* out of values--invalid code */ - else if (*p < s) - { -- r.e = (uch)(*p < 256 ? 16 : 15); /* 256 is end-of-block code */ -- r.v.n = (ush)(*p); /* simple code is just the value */ -+ r.e = (uint8_t)(*p < 256 ? 16 : 15); /* 256 is end-of-block code */ -+ r.v.n = (uint16_t)(*p); /* simple code is just the value */ - p++; /* one compiler does not like *p++ */ - } - else - { -- r.e = (uch)e[*p - s]; /* non-simple--look up in lists */ -+ r.e = (uint8_t)e[*p - s]; /* non-simple--look up in lists */ - r.v.n = d[*p++ - s]; - } - DEBG("h6d "); -@@ -592,11 +612,12 @@ STATIC int INIT inflate_codes( - Return an error code or zero if it all goes ok. */ - { - register unsigned e; /* table entry flag/number of extra bits */ -- unsigned n, d; /* length and index for copy */ -+ unsigned n; -+ int d; /* source index for copy */ - unsigned w; /* current window position */ - struct huft *t; /* pointer to table entry */ - unsigned ml, md; /* masks for bl and bd bits */ -- register ulg b; /* bit buffer */ -+ register uint32_t b; /* bit buffer */ - register unsigned k; /* number of bits in bit buffer */ - - -@@ -622,7 +643,7 @@ STATIC int INIT inflate_codes( - DUMPBITS(t->b) - if (e == 16) /* then it's a literal */ - { -- slide[w++] = (uch)t->v.n; -+ slide[w++] = (uint8_t)t->v.n; - Tracevv((stderr, "%c", slide[w-1])); - if (w == WSIZE) - { -@@ -659,11 +680,25 @@ STATIC int INIT inflate_codes( - - /* do the copy */ - do { -- n -= (e = (e = WSIZE - ((d &= WSIZE-1) > w ? d : w)) > n ? n : e); -+#ifdef NEW_CODE -+ if (flush_cb) { -+#endif -+ /* Sliding window emulated using circular buffer: -+ * manage wrap-around */ -+ e = WSIZE - ((d &= WSIZE-1) > w ? d : w); -+ if (e > n) -+ e = n; -+#ifdef NEW_CODE -+ } else { -+ e = n; -+ } -+#endif -+ n -= e; -+ - #if !defined(NOMEMCPY) && !defined(DEBUG) - if (w - d >= e) /* (this test assumes unsigned comparison) */ - { -- memcpy(slide + w, slide + d, e); -+ memcpy(slide + w, slide + d, e); - w += e; - d += e; - } -@@ -673,9 +708,8 @@ STATIC int INIT inflate_codes( - slide[w++] = slide[d++]; - Tracevv((stderr, "%c", slide[w-1])); - } while (--e); -- if (w == WSIZE) -- { -- flush_output(w); -+ if (w == WSIZE) { -+ flush_output(w); - w = 0; - } - } while (n); -@@ -702,7 +736,7 @@ STATIC int INIT inflate_stored(void) - { - unsigned n; /* number of bytes in block */ - unsigned w; /* current window position */ -- register ulg b; /* bit buffer */ -+ register uint32_t b; /* bit buffer */ - register unsigned k; /* number of bits in bit buffer */ - - DEBG("<stor"); -@@ -732,7 +766,7 @@ DEBG("<stor"); - while (n--) - { - NEEDBITS(8) -- slide[w++] = (uch)b; -+ slide[w++] = (uint8_t)b; - if (w == WSIZE) - { - flush_output(w); -@@ -838,7 +872,7 @@ STATIC int noinline INIT inflate_dynamic - unsigned nl; /* number of literal/length codes */ - unsigned nd; /* number of distance codes */ - unsigned *ll; /* literal/length and distance code lengths */ -- register ulg b; /* bit buffer */ -+ register uint32_t b; /* bit buffer */ - register unsigned k; /* number of bits in bit buffer */ - int ret; - -@@ -1033,7 +1067,7 @@ STATIC int INIT inflate_block( - /* decompress an inflated block */ - { - unsigned t; /* block type */ -- register ulg b; /* bit buffer */ -+ register uint32_t b; /* bit buffer */ - register unsigned k; /* number of bits in bit buffer */ - - DEBG("<blk"); -@@ -1130,8 +1164,8 @@ STATIC int INIT inflate(void) - * - **********************************************************************/ - --static ulg crc_32_tab[256]; --static ulg crc; /* initialized in makecrc() so it'll reside in bss */ -+static uint32_t crc_32_tab[256]; -+static uint32_t crc; /* initialized in makecrc() so it'll reside in bss */ - #define CRC_VALUE (crc ^ 0xffffffffUL) - - /* -@@ -1172,7 +1206,7 @@ makecrc(void) - } - - /* this is initialized here so this code could reside in ROM */ -- crc = (ulg)0xffffffffUL; /* shift register contents */ -+ crc = (uint32_t)0xffffffffUL; /* shift register contents */ - } - - /* gzip flag byte */ -@@ -1184,18 +1218,89 @@ makecrc(void) - #define ENCRYPTED 0x20 /* bit 5 set: file is encrypted */ - #define RESERVED 0xC0 /* bit 6,7: reserved */ - -+#ifdef NEW_CODE -+/* =========================================================================== -+ * Write the output window window[0..outcnt-1] and update crc and bytes_out. -+ * (Used for the decompressed data only.) -+ */ -+static void INIT flush_window(void) -+{ -+ uint32_t c = crc; /* temporary variable */ -+ unsigned n; -+ uint8_t *in, ch; -+ -+ in = window; -+ for (n = 0; n < outcnt; n++) { -+ ch = *in++; -+ c = crc_32_tab[((int)c ^ ch) & 0xff] ^ (c >> 8); -+ } -+ crc = c; -+ bytes_out += (uint32_t)outcnt; -+ if (flush_cb != NULL) -+ flush_cb(window, outcnt); /* TODO: handle unzip_error */ -+ else -+ window += outcnt; -+ outcnt = 0; -+} -+ -+static int empty_fill(void *buf, unsigned int len) -+{ -+ return 0; -+} -+#endif -+ -+ - /* - * Do the uncompression! - */ --static int INIT gunzip(void) -+STATIC int INIT gunzip( -+#ifdef NEW_CODE -+ unsigned char *buf, int len, -+ int(*fill)(void*, unsigned int), -+ int(*flush)(void*, unsigned int), -+ unsigned char *output, -+ int *posp, -+ void(*error_fn)(char *x) -+#else -+ void -+#endif -+ ) - { -- uch flags; -+ uint8_t flags; - unsigned char magic[2]; /* magic header */ - char method; -- ulg orig_crc = 0; /* original crc */ -- ulg orig_len = 0; /* original uncompressed length */ -+ uint32_t orig_crc = 0; /* original crc */ -+ uint32_t orig_len = 0; /* original uncompressed length */ - int res; - -+#ifdef NEW_CODE -+ set_error_fn(error_fn); -+ if (fill == NULL) -+ fill_cb = empty_fill; -+ else -+ fill_cb = fill; -+ if (output) -+ window = output; -+ else { -+ window = malloc(0x8000); -+ if (!window) -+ panic("can't allocate buffers"); -+ flush_cb = flush; -+ } -+ -+ insize = len; -+ if (buf) -+ inbuf = buf; -+ else -+ inbuf = malloc(INBUFSIZ); -+#endif -+ -+ inptr = 0; -+ outcnt = 0; /* bytes in output buffer */ -+ bytes_out = 0; -+ crc = (uint32_t)0xffffffffL; /* shift register contents */ -+ makecrc(); -+ - magic[0] = NEXTBYTE(); - magic[1] = NEXTBYTE(); - method = NEXTBYTE(); -@@ -1212,7 +1317,7 @@ static int INIT gunzip(void) - return -1; - } - -- flags = (uch)get_byte(); -+ flags = (uint8_t)get_byte(); - if ((flags & ENCRYPTED) != 0) { - error("Input is encrypted"); - return -1; -@@ -1277,15 +1382,15 @@ static int INIT gunzip(void) - /* crc32 (see algorithm.doc) - * uncompressed input size modulo 2^32 - */ -- orig_crc = (ulg) NEXTBYTE(); -- orig_crc |= (ulg) NEXTBYTE() << 8; -- orig_crc |= (ulg) NEXTBYTE() << 16; -- orig_crc |= (ulg) NEXTBYTE() << 24; -+ orig_crc = (uint32_t) NEXTBYTE(); -+ orig_crc |= (uint32_t) NEXTBYTE() << 8; -+ orig_crc |= (uint32_t) NEXTBYTE() << 16; -+ orig_crc |= (uint32_t) NEXTBYTE() << 24; - -- orig_len = (ulg) NEXTBYTE(); -- orig_len |= (ulg) NEXTBYTE() << 8; -- orig_len |= (ulg) NEXTBYTE() << 16; -- orig_len |= (ulg) NEXTBYTE() << 24; -+ orig_len = (uint32_t) NEXTBYTE(); -+ orig_len |= (uint32_t) NEXTBYTE() << 8; -+ orig_len |= (uint32_t) NEXTBYTE() << 16; -+ orig_len |= (uint32_t) NEXTBYTE() << 24; - - /* Validate decompression */ - if (orig_crc != CRC_VALUE) { -@@ -1296,11 +1401,22 @@ static int INIT gunzip(void) - error("length error"); - return -1; - } -+#ifdef NEW_CODE -+ if (!output) -+ free(window); -+ if (posp) -+ *posp = inptr; -+#endif - return 0; - - underrun: /* NEXTBYTE() goto's here if needed */ -+ free(window); -+#ifdef NEW_CODE -+ if (!buf) -+ free(inbuf); -+#endif - error("out of input data"); - return -1; - } - -- -+#define decompress gunzip -diff -purN linux-2.6.27.6/lib/Makefile linux-2.6.27.6udpcast/lib/Makefile ---- linux-2.6.27.6/lib/Makefile 2008-11-13 18:56:21.000000000 +0100 -+++ linux-2.6.27.6udpcast/lib/Makefile 2008-11-16 23:07:34.000000000 +0100 -@@ -11,7 +11,8 @@ lib-y := ctype.o string.o vsprintf.o cmd - rbtree.o radix-tree.o dump_stack.o \ - idr.o int_sqrt.o extable.o prio_tree.o \ - sha1.o irq_regs.o reciprocal_div.o argv_split.o \ -- proportions.o prio_heap.o ratelimit.o show_mem.o -+ proportions.o prio_heap.o ratelimit.o show_mem.o \ -+ inflate.o decompress_bunzip2.o decompress_unlzma.o - - lib-$(CONFIG_MMU) += ioremap.o - lib-$(CONFIG_SMP) += cpumask.o -diff -purN linux-2.6.27.6/scripts/bin_size linux-2.6.27.6udpcast/scripts/bin_size ---- linux-2.6.27.6/scripts/bin_size 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.27.6udpcast/scripts/bin_size 2008-11-16 23:43:34.000000000 +0100 -@@ -0,0 +1,10 @@ -+#!/bin/sh -+ -+if [ $# = 0 ] ; then -+ echo Usage: $0 file -+fi -+ -+size_dec=`stat -c "%s" $1` -+size_hex_echo_string=`printf "%08x" $size_dec | -+ sed 's/\(..\)\(..\)\(..\)\(..\)/\\\\x\4\\\\x\3\\\\x\2\\\\x\1/g'` -+/bin/echo -ne $size_hex_echo_string -diff -purN linux-2.6.27.6/scripts/Makefile.lib linux-2.6.27.6udpcast/scripts/Makefile.lib ---- linux-2.6.27.6/scripts/Makefile.lib 2008-11-13 18:56:21.000000000 +0100 -+++ linux-2.6.27.6udpcast/scripts/Makefile.lib 2008-11-16 23:02:55.000000000 +0100 -@@ -174,3 +174,17 @@ quiet_cmd_gzip = GZIP $@ - cmd_gzip = gzip -f -9 < $< > $@ - - -+# Bzip2 -+# --------------------------------------------------------------------------- -+ -+# Bzip2 does not include size in file... so we have to fake that -+size_append=$(CONFIG_SHELL) $(srctree)/scripts/bin_size -+ -+quiet_cmd_bzip2 = BZIP2 $@ -+cmd_bzip2 = (bzip2 -9 < $< ; $(size_append) $<) > $@ || (rm -f $@ ; false) -+ -+# Lzma -+# --------------------------------------------------------------------------- -+ -+quiet_cmd_lzma = LZMA $@ -+cmd_lzma = (lzma e $< $@; $(size_append) $<) > $@ || (rm -f $@ ; false) |