diff -Naur linux-2.6.20.1/include/asm-mips/compat-signal.h linux-mips-2.6.20.1/include/asm-mips/compat-signal.h --- linux-2.6.20.1/include/asm-mips/compat-signal.h 1969-12-31 16:00:00.000000000 -0800 +++ linux-mips-2.6.20.1/include/asm-mips/compat-signal.h 2007-02-20 16:47:41.000000000 -0800 @@ -0,0 +1,54 @@ +#ifndef __ASM_COMPAT_SIGNAL_H +#define __ASM_COMPAT_SIGNAL_H + +#include +#include +#include + +#include + +static inline int __copy_conv_sigset_to_user(compat_sigset_t __user *d, + const sigset_t *s) +{ + int err; + + BUG_ON(sizeof(*d) != sizeof(*s)); + BUG_ON(_NSIG_WORDS != 2); + + err = __put_user(s->sig[0], &d->sig[0]); + err |= __put_user(s->sig[0] >> 32, &d->sig[1]); + err |= __put_user(s->sig[1], &d->sig[2]); + err |= __put_user(s->sig[1] >> 32, &d->sig[3]); + + return err; +} + +static inline int __copy_conv_sigset_from_user(sigset_t *d, + const compat_sigset_t __user *s) +{ + int err; + union sigset_u { + sigset_t s; + compat_sigset_t c; + } *u = (union sigset_u *) d; + + BUG_ON(sizeof(*d) != sizeof(*s)); + BUG_ON(_NSIG_WORDS != 2); + +#ifdef CONFIG_CPU_BIG_ENDIAN + err = __get_user(u->c.sig[1], &s->sig[0]); + err |= __get_user(u->c.sig[0], &s->sig[1]); + err |= __get_user(u->c.sig[3], &s->sig[2]); + err |= __get_user(u->c.sig[2], &s->sig[3]); +#endif +#ifdef CONFIG_CPU_LITTLE_ENDIAN + err = __get_user(u->c.sig[0], &s->sig[0]); + err |= __get_user(u->c.sig[1], &s->sig[1]); + err |= __get_user(u->c.sig[2], &s->sig[2]); + err |= __get_user(u->c.sig[3], &s->sig[3]); +#endif + + return err; +} + +#endif /* __ASM_COMPAT_SIGNAL_H */ diff -Naur linux-2.6.20.1/include/asm-mips/dma-mapping.h linux-mips-2.6.20.1/include/asm-mips/dma-mapping.h --- linux-2.6.20.1/include/asm-mips/dma-mapping.h 2007-02-19 22:34:32.000000000 -0800 +++ linux-mips-2.6.20.1/include/asm-mips/dma-mapping.h 2007-02-20 16:47:41.000000000 -0800 @@ -68,6 +68,7 @@ extern void dma_cache_sync(struct device *dev, void *vaddr, size_t size, enum dma_data_direction direction); +#if 0 #define ARCH_HAS_DMA_DECLARE_COHERENT_MEMORY extern int dma_declare_coherent_memory(struct device *dev, dma_addr_t bus_addr, @@ -75,5 +76,6 @@ extern void dma_release_declared_memory(struct device *dev); extern void * dma_mark_declared_memory_occupied(struct device *dev, dma_addr_t device_addr, size_t size); +#endif #endif /* _ASM_DMA_MAPPING_H */ diff -Naur linux-2.6.20.1/include/asm-mips/io.h linux-mips-2.6.20.1/include/asm-mips/io.h --- linux-2.6.20.1/include/asm-mips/io.h 2007-02-19 22:34:32.000000000 -0800 +++ linux-mips-2.6.20.1/include/asm-mips/io.h 2007-02-20 16:47:41.000000000 -0800 @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -518,34 +519,6 @@ } /* - * Memory Mapped I/O - */ -#define ioread8(addr) readb(addr) -#define ioread16(addr) readw(addr) -#define ioread32(addr) readl(addr) - -#define iowrite8(b,addr) writeb(b,addr) -#define iowrite16(w,addr) writew(w,addr) -#define iowrite32(l,addr) writel(l,addr) - -#define ioread8_rep(a,b,c) readsb(a,b,c) -#define ioread16_rep(a,b,c) readsw(a,b,c) -#define ioread32_rep(a,b,c) readsl(a,b,c) - -#define iowrite8_rep(a,b,c) writesb(a,b,c) -#define iowrite16_rep(a,b,c) writesw(a,b,c) -#define iowrite32_rep(a,b,c) writesl(a,b,c) - -/* Create a virtual mapping cookie for an IO port range */ -extern void __iomem *ioport_map(unsigned long port, unsigned int nr); -extern void ioport_unmap(void __iomem *); - -/* Create a virtual mapping cookie for a PCI BAR (memory or IO) */ -struct pci_dev; -extern void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max); -extern void pci_iounmap(struct pci_dev *dev, void __iomem *); - -/* * ISA space is 'always mapped' on currently supported MIPS systems, no need * to explicitly ioremap() it. The fact that the ISA IO space is mapped * to PAGE_OFFSET is pure coincidence - it does not mean ISA values diff -Naur linux-2.6.20.1/include/asm-mips/mach-au1x00/au1000.h linux-mips-2.6.20.1/include/asm-mips/mach-au1x00/au1000.h --- linux-2.6.20.1/include/asm-mips/mach-au1x00/au1000.h 2007-02-19 22:34:32.000000000 -0800 +++ linux-mips-2.6.20.1/include/asm-mips/mach-au1x00/au1000.h 2007-02-20 16:47:41.000000000 -0800 @@ -39,6 +39,7 @@ #ifndef _LANGUAGE_ASSEMBLY #include +#include #include /* cpu pipeline flush */ diff -Naur linux-2.6.20.1/include/asm-mips/mach-au1x00/au1xxx_ide.h linux-mips-2.6.20.1/include/asm-mips/mach-au1x00/au1xxx_ide.h --- linux-2.6.20.1/include/asm-mips/mach-au1x00/au1xxx_ide.h 2007-02-19 22:34:32.000000000 -0800 +++ linux-mips-2.6.20.1/include/asm-mips/mach-au1x00/au1xxx_ide.h 2007-02-20 16:47:41.000000000 -0800 @@ -83,6 +83,7 @@ } _auide_hwif; #ifdef CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA + /* HD white list */ static const struct drive_list_entry dma_white_list [] = { /* diff -Naur linux-2.6.20.1/include/asm-mips/mach-generic/ide.h linux-mips-2.6.20.1/include/asm-mips/mach-generic/ide.h --- linux-2.6.20.1/include/asm-mips/mach-generic/ide.h 2007-02-19 22:34:32.000000000 -0800 +++ linux-mips-2.6.20.1/include/asm-mips/mach-generic/ide.h 2007-02-20 16:47:41.000000000 -0800 @@ -29,17 +29,12 @@ #define IDE_ARCH_OBSOLETE_DEFAULTS +extern int mips_system_has_legacy_ide; + static __inline__ int ide_probe_legacy(void) { #ifdef CONFIG_PCI - struct pci_dev *dev; - if ((dev = pci_get_class(PCI_CLASS_BRIDGE_EISA << 8, NULL)) != NULL || - (dev = pci_get_class(PCI_CLASS_BRIDGE_ISA << 8, NULL)) != NULL) { - pci_dev_put(dev); - - return 1; - } - return 0; + return mips_system_has_legacy_ide; #elif defined(CONFIG_EISA) || defined(CONFIG_ISA) return 1; #else diff -Naur linux-2.6.20.1/include/asm-mips/mips_mt.h linux-mips-2.6.20.1/include/asm-mips/mips_mt.h --- linux-2.6.20.1/include/asm-mips/mips_mt.h 2007-02-19 22:34:32.000000000 -0800 +++ linux-mips-2.6.20.1/include/asm-mips/mips_mt.h 2007-02-20 16:47:41.000000000 -0800 @@ -12,4 +12,7 @@ extern void mips_mt_regdump(unsigned long previous_mvpcontrol_value); extern void mips_mt_set_cpuoptions(void); +struct class; +extern struct class *mt_class; + #endif /* __ASM_MIPS_MT_H */ diff -Naur linux-2.6.20.1/include/asm-mips/pci.h linux-mips-2.6.20.1/include/asm-mips/pci.h --- linux-2.6.20.1/include/asm-mips/pci.h 2007-02-19 22:34:32.000000000 -0800 +++ linux-mips-2.6.20.1/include/asm-mips/pci.h 2007-02-20 16:47:41.000000000 -0800 @@ -32,6 +32,7 @@ unsigned long mem_offset; struct resource *io_resource; unsigned long io_offset; + unsigned long io_map_base; unsigned int index; /* For compatibility with current (as of July 2003) pciutils diff -Naur linux-2.6.20.1/include/asm-mips/sigcontext.h linux-mips-2.6.20.1/include/asm-mips/sigcontext.h --- linux-2.6.20.1/include/asm-mips/sigcontext.h 2007-02-19 22:34:32.000000000 -0800 +++ linux-mips-2.6.20.1/include/asm-mips/sigcontext.h 2007-02-20 16:47:41.000000000 -0800 @@ -42,6 +42,7 @@ #if _MIPS_SIM == _MIPS_SIM_ABI64 || _MIPS_SIM == _MIPS_SIM_NABI32 +#include /* * Keep this struct definition in sync with the sigcontext fragment * in arch/mips/tools/offset.c @@ -53,27 +54,25 @@ * entries, add sc_dsp and sc_reserved for padding. No prisoners. */ struct sigcontext { - unsigned long sc_regs[32]; - unsigned long sc_fpregs[32]; - unsigned long sc_mdhi; - unsigned long sc_hi1; - unsigned long sc_hi2; - unsigned long sc_hi3; - unsigned long sc_mdlo; - unsigned long sc_lo1; - unsigned long sc_lo2; - unsigned long sc_lo3; - unsigned long sc_pc; - unsigned int sc_fpc_csr; - unsigned int sc_used_math; - unsigned int sc_dsp; - unsigned int sc_reserved; + __u64 sc_regs[32]; + __u64 sc_fpregs[32]; + __u64 sc_mdhi; + __u64 sc_hi1; + __u64 sc_hi2; + __u64 sc_hi3; + __u64 sc_mdlo; + __u64 sc_lo1; + __u64 sc_lo2; + __u64 sc_lo3; + __u64 sc_pc; + __u32 sc_fpc_csr; + __u32 sc_used_math; + __u32 sc_dsp; + __u32 sc_reserved; }; #ifdef __KERNEL__ -#include - struct sigcontext32 { __u32 sc_regmask; /* Unused */ __u32 sc_status; diff -Naur linux-2.6.20.1/include/asm-mips/uaccess.h linux-mips-2.6.20.1/include/asm-mips/uaccess.h --- linux-2.6.20.1/include/asm-mips/uaccess.h 2007-02-19 22:34:32.000000000 -0800 +++ linux-mips-2.6.20.1/include/asm-mips/uaccess.h 2007-02-20 16:47:41.000000000 -0800 @@ -265,12 +265,14 @@ */ #define __get_user_asm_ll32(val, addr) \ { \ - unsigned long long __gu_tmp; \ + union { \ + unsigned long long l; \ + __typeof__(*(addr)) t; \ + } __gu_tmp; \ \ __asm__ __volatile__( \ "1: lw %1, (%3) \n" \ "2: lw %D1, 4(%3) \n" \ - " move %0, $0 \n" \ "3: .section .fixup,\"ax\" \n" \ "4: li %0, %4 \n" \ " move %1, $0 \n" \ @@ -281,9 +283,10 @@ " " __UA_ADDR " 1b, 4b \n" \ " " __UA_ADDR " 2b, 4b \n" \ " .previous \n" \ - : "=r" (__gu_err), "=&r" (__gu_tmp) \ + : "=r" (__gu_err), "=&r" (__gu_tmp.l) \ : "0" (0), "r" (addr), "i" (-EFAULT)); \ - (val) = (__typeof__(*(addr))) __gu_tmp; \ + \ + (val) = __gu_tmp.t; \ } /* @@ -432,8 +435,32 @@ __cu_len; \ }) -#define __copy_to_user_inatomic __copy_to_user -#define __copy_from_user_inatomic __copy_from_user +#define __copy_to_user_inatomic(to,from,n) \ +({ \ + void __user *__cu_to; \ + const void *__cu_from; \ + long __cu_len; \ + \ + __cu_to = (to); \ + __cu_from = (from); \ + __cu_len = (n); \ + __cu_len = __invoke_copy_to_user(__cu_to, __cu_from, __cu_len); \ + __cu_len; \ +}) + +#define __copy_from_user_inatomic(to,from,n) \ +({ \ + void *__cu_to; \ + const void __user *__cu_from; \ + long __cu_len; \ + \ + __cu_to = (to); \ + __cu_from = (from); \ + __cu_len = (n); \ + __cu_len = __invoke_copy_from_user_inatomic(__cu_to, __cu_from, \ + __cu_len); \ + __cu_len; \ +}) /* * copy_to_user: - Copy a block of data into user space. @@ -487,8 +514,32 @@ __cu_len_r; \ }) +#define __invoke_copy_from_user_inatomic(to,from,n) \ +({ \ + register void *__cu_to_r __asm__ ("$4"); \ + register const void __user *__cu_from_r __asm__ ("$5"); \ + register long __cu_len_r __asm__ ("$6"); \ + \ + __cu_to_r = (to); \ + __cu_from_r = (from); \ + __cu_len_r = (n); \ + __asm__ __volatile__( \ + ".set\tnoreorder\n\t" \ + __MODULE_JAL(__copy_user_inatomic) \ + ".set\tnoat\n\t" \ + __UA_ADDU "\t$1, %1, %2\n\t" \ + ".set\tat\n\t" \ + ".set\treorder" \ + : "+r" (__cu_to_r), "+r" (__cu_from_r), "+r" (__cu_len_r) \ + : \ + : "$8", "$9", "$10", "$11", "$12", "$15", "$24", "$31", \ + "memory"); \ + __cu_len_r; \ +}) + /* - * __copy_from_user: - Copy a block of data from user space, with less checking. * @to: Destination address, in kernel space. + * __copy_from_user: - Copy a block of data from user space, with less checking. + * @to: Destination address, in kernel space. * @from: Source address, in user space. * @n: Number of bytes to copy. * diff -Naur linux-2.6.20.1/include/linux/pci_ids.h linux-mips-2.6.20.1/include/linux/pci_ids.h --- linux-2.6.20.1/include/linux/pci_ids.h 2007-02-19 22:34:32.000000000 -0800 +++ linux-mips-2.6.20.1/include/linux/pci_ids.h 2007-02-20 16:47:41.000000000 -0800 @@ -1614,6 +1614,9 @@ #define PCI_VENDOR_ID_SATSAGEM 0x1267 #define PCI_DEVICE_ID_SATSAGEM_NICCY 0x1016 +#define PCI_VENDOR_ID_SILICON_MOTION 0x126f +#define PCI_DEVICE_ID_SM501_VOYAGER_GX_REV_AA 0x0501 +#define PCI_DEVICE_ID_SM501_VOYAGER_GX_REV_B 0x0510 #define PCI_VENDOR_ID_ENSONIQ 0x1274 #define PCI_DEVICE_ID_ENSONIQ_CT5880 0x5880 diff -Naur linux-2.6.20.1/include/linux/serial.h linux-mips-2.6.20.1/include/linux/serial.h --- linux-2.6.20.1/include/linux/serial.h 2007-02-19 22:34:32.000000000 -0800 +++ linux-mips-2.6.20.1/include/linux/serial.h 2007-02-20 16:47:41.000000000 -0800 @@ -76,7 +76,8 @@ #define PORT_16654 11 #define PORT_16850 12 #define PORT_RSA 13 /* RSA-DV II/S card */ -#define PORT_MAX 13 +#define PORT_SB1250 14 +#define PORT_MAX 14 #define SERIAL_IO_PORT 0 #define SERIAL_IO_HUB6 1 diff -Naur linux-2.6.20.1/include/linux/serial_ip3106.h linux-mips-2.6.20.1/include/linux/serial_ip3106.h --- linux-2.6.20.1/include/linux/serial_ip3106.h 2007-02-19 22:34:32.000000000 -0800 +++ linux-mips-2.6.20.1/include/linux/serial_ip3106.h 2007-02-20 16:47:41.000000000 -0800 @@ -78,4 +78,16 @@ #define IP3106_UART_FIFO_RXFIFO 0x00001F00 #define IP3106_UART_FIFO_RBRTHR 0x000000FF +#define ip3106_lcr(base,port) *(volatile u32 *)(base+(port*0x1000) + 0x000) +#define ip3106_mcr(base, port) *(volatile u32 *)(base+(port*0x1000) + 0x004) +#define ip3106_baud(base, port) *(volatile u32 *)(base+(port*0x1000) + 0x008) +#define ip3106_cfg(base, port) *(volatile u32 *)(base+(port*0x1000) + 0x00C) +#define ip3106_fifo(base, port) *(volatile u32 *)(base+(port*0x1000) + 0x028) +#define ip3106_istat(base, port) *(volatile u32 *)(base+(port*0x1000) + 0xFE0) +#define ip3106_ien(base, port) *(volatile u32 *)(base+(port*0x1000) + 0xFE4) +#define ip3106_iclr(base, port) *(volatile u32 *)(base+(port*0x1000) + 0xFE8) +#define ip3106_iset(base, port) *(volatile u32 *)(base+(port*0x1000) + 0xFEC) +#define ip3106_pd(base, port) *(volatile u32 *)(base+(port*0x1000) + 0xFF4) +#define ip3106_mid(base, port) *(volatile u32 *)(base+(port*0x1000) + 0xFFC) + #endif