dect
/
linux-2.6
Archived
13
0
Fork 0

Merge branch 'master'

This commit is contained in:
Jeff Garzik 2006-01-03 10:49:18 -05:00
commit ac67c62473
147 changed files with 1194 additions and 894 deletions

View File

@ -536,7 +536,7 @@ P: Mauro Carvalho Chehab
M: mchehab@brturbo.com.br M: mchehab@brturbo.com.br
L: video4linux-list@redhat.com L: video4linux-list@redhat.com
W: http://linuxtv.org W: http://linuxtv.org
T: quilt http://www.linuxtv.org/download/quilt/ T: git kernel.org:/pub/scm/linux/kernel/git/mchehab/v4l-dvb.git
S: Maintained S: Maintained
BUSLOGIC SCSI DRIVER BUSLOGIC SCSI DRIVER
@ -834,7 +834,7 @@ P: LinuxTV.org Project
M: linux-dvb-maintainer@linuxtv.org M: linux-dvb-maintainer@linuxtv.org
L: linux-dvb@linuxtv.org (subscription required) L: linux-dvb@linuxtv.org (subscription required)
W: http://linuxtv.org/ W: http://linuxtv.org/
T: quilt http://www.linuxtv.org/download/quilt/ T: git kernel.org:/pub/scm/linux/kernel/git/mchehab/v4l-dvb.git
S: Supported S: Supported
EATA-DMA SCSI DRIVER EATA-DMA SCSI DRIVER
@ -2896,7 +2896,7 @@ P: Mauro Carvalho Chehab
M: mchehab@brturbo.com.br M: mchehab@brturbo.com.br
L: video4linux-list@redhat.com L: video4linux-list@redhat.com
W: http://linuxtv.org W: http://linuxtv.org
T: quilt http://www.linuxtv.org/download/quilt/ T: git kernel.org:/pub/scm/linux/kernel/git/mchehab/v4l-dvb.git
S: Maintained S: Maintained
W1 DALLAS'S 1-WIRE BUS W1 DALLAS'S 1-WIRE BUS

View File

@ -1,7 +1,7 @@
VERSION = 2 VERSION = 2
PATCHLEVEL = 6 PATCHLEVEL = 6
SUBLEVEL = 15 SUBLEVEL = 15
EXTRAVERSION =-rc6 EXTRAVERSION =
NAME=Sliding Snow Leopard NAME=Sliding Snow Leopard
# *DOCUMENTATION* # *DOCUMENTATION*

View File

@ -131,7 +131,7 @@ __syscall_start:
.long sys_wait4 .long sys_wait4
/* 115 */ .long sys_swapoff /* 115 */ .long sys_swapoff
.long sys_sysinfo .long sys_sysinfo
.long sys_ipc_wrapper .long sys_ipc
.long sys_fsync .long sys_fsync
.long sys_sigreturn_wrapper .long sys_sigreturn_wrapper
/* 120 */ .long sys_clone_wrapper /* 120 */ .long sys_clone_wrapper
@ -254,7 +254,7 @@ __syscall_start:
.long sys_fremovexattr .long sys_fremovexattr
.long sys_tkill .long sys_tkill
.long sys_sendfile64 .long sys_sendfile64
/* 240 */ .long sys_futex_wrapper /* 240 */ .long sys_futex
.long sys_sched_setaffinity .long sys_sched_setaffinity
.long sys_sched_getaffinity .long sys_sched_getaffinity
.long sys_io_setup .long sys_io_setup
@ -284,7 +284,7 @@ __syscall_start:
.long sys_fstatfs64 .long sys_fstatfs64
.long sys_tgkill .long sys_tgkill
.long sys_utimes .long sys_utimes
/* 270 */ .long sys_arm_fadvise64_64_wrapper /* 270 */ .long sys_arm_fadvise64_64
.long sys_pciconfig_iobase .long sys_pciconfig_iobase
.long sys_pciconfig_read .long sys_pciconfig_read
.long sys_pciconfig_write .long sys_pciconfig_write
@ -333,7 +333,7 @@ __syscall_start:
.long sys_inotify_init .long sys_inotify_init
.long sys_inotify_add_watch .long sys_inotify_add_watch
.long sys_inotify_rm_watch .long sys_inotify_rm_watch
.long sys_mbind_wrapper .long sys_mbind
/* 320 */ .long sys_get_mempolicy /* 320 */ .long sys_get_mempolicy
.long sys_set_mempolicy .long sys_set_mempolicy
__syscall_end: __syscall_end:

View File

@ -611,6 +611,47 @@ ENTRY(__switch_to)
.globl __kuser_helper_start .globl __kuser_helper_start
__kuser_helper_start: __kuser_helper_start:
/*
* Reference prototype:
*
* void __kernel_memory_barrier(void)
*
* Input:
*
* lr = return address
*
* Output:
*
* none
*
* Clobbered:
*
* the Z flag might be lost
*
* Definition and user space usage example:
*
* typedef void (__kernel_dmb_t)(void);
* #define __kernel_dmb (*(__kernel_dmb_t *)0xffff0fa0)
*
* Apply any needed memory barrier to preserve consistency with data modified
* manually and __kuser_cmpxchg usage.
*
* This could be used as follows:
*
* #define __kernel_dmb() \
* asm volatile ( "mov r0, #0xffff0fff; mov lr, pc; sub pc, r0, #95" \
* : : : "lr","cc" )
*/
__kuser_memory_barrier: @ 0xffff0fa0
#if __LINUX_ARM_ARCH__ >= 6 && defined(CONFIG_SMP)
mcr p15, 0, r0, c7, c10, 5 @ dmb
#endif
mov pc, lr
.align 5
/* /*
* Reference prototype: * Reference prototype:
* *
@ -642,6 +683,8 @@ __kuser_helper_start:
* The C flag is also set if *ptr was changed to allow for assembly * The C flag is also set if *ptr was changed to allow for assembly
* optimization in the calling code. * optimization in the calling code.
* *
* Note: this routine already includes memory barriers as needed.
*
* For example, a user space atomic_add implementation could look like this: * For example, a user space atomic_add implementation could look like this:
* *
* #define atomic_add(ptr, val) \ * #define atomic_add(ptr, val) \
@ -698,10 +741,16 @@ __kuser_cmpxchg: @ 0xffff0fc0
#else #else
#ifdef CONFIG_SMP
mcr p15, 0, r0, c7, c10, 5 @ dmb
#endif
ldrex r3, [r2] ldrex r3, [r2]
subs r3, r3, r0 subs r3, r3, r0
strexeq r3, r1, [r2] strexeq r3, r1, [r2]
rsbs r0, r3, #0 rsbs r0, r3, #0
#ifdef CONFIG_SMP
mcr p15, 0, r0, c7, c10, 5 @ dmb
#endif
mov pc, lr mov pc, lr
#endif #endif

View File

@ -145,7 +145,7 @@ ENTRY(vector_swi)
#endif #endif
enable_irq enable_irq
str r4, [sp, #-S_OFF]! @ push fifth arg stmdb sp!, {r4, r5} @ push fifth and sixth args
get_thread_info tsk get_thread_info tsk
ldr ip, [tsk, #TI_FLAGS] @ check for syscall tracing ldr ip, [tsk, #TI_FLAGS] @ check for syscall tracing
@ -204,7 +204,7 @@ ENTRY(sys_call_table)
* Special system call wrappers * Special system call wrappers
*/ */
@ r0 = syscall number @ r0 = syscall number
@ r5 = syscall table @ r8 = syscall table
.type sys_syscall, #function .type sys_syscall, #function
sys_syscall: sys_syscall:
eor scno, r0, #__NR_SYSCALL_BASE eor scno, r0, #__NR_SYSCALL_BASE
@ -255,22 +255,6 @@ sys_sigaltstack_wrapper:
ldr r2, [sp, #S_OFF + S_SP] ldr r2, [sp, #S_OFF + S_SP]
b do_sigaltstack b do_sigaltstack
sys_futex_wrapper:
str r5, [sp, #4] @ push sixth arg
b sys_futex
sys_arm_fadvise64_64_wrapper:
str r5, [sp, #4] @ push r5 to stack
b sys_arm_fadvise64_64
sys_mbind_wrapper:
str r5, [sp, #4]
b sys_mbind
sys_ipc_wrapper:
str r5, [sp, #4] @ push sixth arg
b sys_ipc
/* /*
* Note: off_4k (r5) is always units of 4K. If we can't do the requested * Note: off_4k (r5) is always units of 4K. If we can't do the requested
* offset, we return EINVAL. * offset, we return EINVAL.

View File

@ -554,7 +554,9 @@ int dump_task_regs(struct task_struct *tsk, elf_gregset_t *regs)
struct pt_regs ptregs; struct pt_regs ptregs;
ptregs = *(struct pt_regs *) ptregs = *(struct pt_regs *)
((unsigned long)tsk->thread_info+THREAD_SIZE - sizeof(ptregs)); ((unsigned long)tsk->thread_info +
/* see comments in copy_thread() about -8 */
THREAD_SIZE - sizeof(ptregs) - 8);
ptregs.xcs &= 0xffff; ptregs.xcs &= 0xffff;
ptregs.xds &= 0xffff; ptregs.xds &= 0xffff;
ptregs.xes &= 0xffff; ptregs.xes &= 0xffff;

View File

@ -1,7 +1,7 @@
obj-y := i386.o obj-y := i386.o
obj-$(CONFIG_PCI_BIOS) += pcbios.o obj-$(CONFIG_PCI_BIOS) += pcbios.o
obj-$(CONFIG_PCI_MMCONFIG) += mmconfig.o obj-$(CONFIG_PCI_MMCONFIG) += mmconfig.o direct.o
obj-$(CONFIG_PCI_DIRECT) += direct.o obj-$(CONFIG_PCI_DIRECT) += direct.o
pci-y := fixup.o pci-y := fixup.o

View File

@ -1,7 +1,7 @@
# #
# Automatically generated make config: don't edit # Automatically generated make config: don't edit
# Linux kernel version: 2.6.15-rc1 # Linux kernel version: 2.6.15-rc5
# Tue Nov 15 14:36:20 2005 # Tue Dec 20 15:59:26 2005
# #
CONFIG_PPC64=y CONFIG_PPC64=y
CONFIG_64BIT=y CONFIG_64BIT=y
@ -53,6 +53,7 @@ CONFIG_KOBJECT_UEVENT=y
# CONFIG_IKCONFIG is not set # CONFIG_IKCONFIG is not set
# CONFIG_CPUSETS is not set # CONFIG_CPUSETS is not set
CONFIG_INITRAMFS_SOURCE="" CONFIG_INITRAMFS_SOURCE=""
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
# CONFIG_EMBEDDED is not set # CONFIG_EMBEDDED is not set
CONFIG_KALLSYMS=y CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_ALL is not set # CONFIG_KALLSYMS_ALL is not set
@ -151,7 +152,7 @@ CONFIG_FLATMEM_MANUAL=y
CONFIG_FLATMEM=y CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y CONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not set # CONFIG_SPARSEMEM_STATIC is not set
CONFIG_SPLIT_PTLOCK_CPUS=4096 CONFIG_SPLIT_PTLOCK_CPUS=4
# CONFIG_PPC_64K_PAGES is not set # CONFIG_PPC_64K_PAGES is not set
CONFIG_SCHED_SMT=y CONFIG_SCHED_SMT=y
CONFIG_PROC_DEVICETREE=y CONFIG_PROC_DEVICETREE=y

View File

@ -1,7 +1,7 @@
# #
# Automatically generated make config: don't edit # Automatically generated make config: don't edit
# Linux kernel version: 2.6.15-rc1 # Linux kernel version: 2.6.15-rc5
# Tue Nov 15 14:39:20 2005 # Tue Dec 20 15:59:30 2005
# #
CONFIG_PPC64=y CONFIG_PPC64=y
CONFIG_64BIT=y CONFIG_64BIT=y
@ -53,6 +53,7 @@ CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y CONFIG_IKCONFIG_PROC=y
# CONFIG_CPUSETS is not set # CONFIG_CPUSETS is not set
CONFIG_INITRAMFS_SOURCE="" CONFIG_INITRAMFS_SOURCE=""
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
# CONFIG_EMBEDDED is not set # CONFIG_EMBEDDED is not set
CONFIG_KALLSYMS=y CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_ALL is not set # CONFIG_KALLSYMS_ALL is not set
@ -162,7 +163,7 @@ CONFIG_FLATMEM_MANUAL=y
CONFIG_FLATMEM=y CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y CONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not set # CONFIG_SPARSEMEM_STATIC is not set
CONFIG_SPLIT_PTLOCK_CPUS=4096 CONFIG_SPLIT_PTLOCK_CPUS=4
# CONFIG_PPC_64K_PAGES is not set # CONFIG_PPC_64K_PAGES is not set
# CONFIG_SCHED_SMT is not set # CONFIG_SCHED_SMT is not set
CONFIG_PROC_DEVICETREE=y CONFIG_PROC_DEVICETREE=y
@ -1203,6 +1204,7 @@ CONFIG_USB_MON=y
CONFIG_USB_SERIAL=m CONFIG_USB_SERIAL=m
CONFIG_USB_SERIAL_GENERIC=y CONFIG_USB_SERIAL_GENERIC=y
# CONFIG_USB_SERIAL_AIRPRIME is not set # CONFIG_USB_SERIAL_AIRPRIME is not set
# CONFIG_USB_SERIAL_ANYDATA is not set
CONFIG_USB_SERIAL_BELKIN=m CONFIG_USB_SERIAL_BELKIN=m
CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
# CONFIG_USB_SERIAL_CP2101 is not set # CONFIG_USB_SERIAL_CP2101 is not set
@ -1233,7 +1235,6 @@ CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
CONFIG_USB_SERIAL_KLSI=m CONFIG_USB_SERIAL_KLSI=m
CONFIG_USB_SERIAL_KOBIL_SCT=m CONFIG_USB_SERIAL_KOBIL_SCT=m
CONFIG_USB_SERIAL_MCT_U232=m CONFIG_USB_SERIAL_MCT_U232=m
# CONFIG_USB_SERIAL_NOKIA_DKU2 is not set
CONFIG_USB_SERIAL_PL2303=m CONFIG_USB_SERIAL_PL2303=m
# CONFIG_USB_SERIAL_HP4X is not set # CONFIG_USB_SERIAL_HP4X is not set
CONFIG_USB_SERIAL_SAFE=m CONFIG_USB_SERIAL_SAFE=m

View File

@ -1,7 +1,7 @@
# #
# Automatically generated make config: don't edit # Automatically generated make config: don't edit
# Linux kernel version: 2.6.15-rc1 # Linux kernel version: 2.6.15-rc5
# Tue Nov 15 14:38:09 2005 # Tue Dec 20 15:59:32 2005
# #
CONFIG_PPC64=y CONFIG_PPC64=y
CONFIG_64BIT=y CONFIG_64BIT=y
@ -55,6 +55,7 @@ CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y CONFIG_IKCONFIG_PROC=y
# CONFIG_CPUSETS is not set # CONFIG_CPUSETS is not set
CONFIG_INITRAMFS_SOURCE="" CONFIG_INITRAMFS_SOURCE=""
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
# CONFIG_EMBEDDED is not set # CONFIG_EMBEDDED is not set
CONFIG_KALLSYMS=y CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_ALL is not set # CONFIG_KALLSYMS_ALL is not set
@ -144,7 +145,7 @@ CONFIG_FLATMEM_MANUAL=y
CONFIG_FLATMEM=y CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y CONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not set # CONFIG_SPARSEMEM_STATIC is not set
CONFIG_SPLIT_PTLOCK_CPUS=4096 CONFIG_SPLIT_PTLOCK_CPUS=4
# CONFIG_PPC_64K_PAGES is not set # CONFIG_PPC_64K_PAGES is not set
# CONFIG_SCHED_SMT is not set # CONFIG_SCHED_SMT is not set
CONFIG_PROC_DEVICETREE=y CONFIG_PROC_DEVICETREE=y

View File

@ -1,7 +1,7 @@
# #
# Automatically generated make config: don't edit # Automatically generated make config: don't edit
# Linux kernel version: 2.6.15-rc1 # Linux kernel version: 2.6.15-rc5
# Tue Nov 15 14:38:58 2005 # Tue Dec 20 15:59:36 2005
# #
CONFIG_PPC64=y CONFIG_PPC64=y
CONFIG_64BIT=y CONFIG_64BIT=y
@ -53,6 +53,7 @@ CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y CONFIG_IKCONFIG_PROC=y
# CONFIG_CPUSETS is not set # CONFIG_CPUSETS is not set
CONFIG_INITRAMFS_SOURCE="" CONFIG_INITRAMFS_SOURCE=""
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
# CONFIG_EMBEDDED is not set # CONFIG_EMBEDDED is not set
CONFIG_KALLSYMS=y CONFIG_KALLSYMS=y
CONFIG_KALLSYMS_ALL=y CONFIG_KALLSYMS_ALL=y
@ -149,7 +150,7 @@ CONFIG_FLATMEM_MANUAL=y
CONFIG_FLATMEM=y CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y CONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not set # CONFIG_SPARSEMEM_STATIC is not set
CONFIG_SPLIT_PTLOCK_CPUS=4096 CONFIG_SPLIT_PTLOCK_CPUS=4
# CONFIG_PPC_64K_PAGES is not set # CONFIG_PPC_64K_PAGES is not set
# CONFIG_SCHED_SMT is not set # CONFIG_SCHED_SMT is not set
CONFIG_PROC_DEVICETREE=y CONFIG_PROC_DEVICETREE=y
@ -242,7 +243,6 @@ CONFIG_TCP_CONG_BIC=y
# QoS and/or fair queueing # QoS and/or fair queueing
# #
# CONFIG_NET_SCHED is not set # CONFIG_NET_SCHED is not set
# CONFIG_NET_CLS_ROUTE is not set
# #
# Network testing # Network testing
@ -794,6 +794,7 @@ CONFIG_USB_SERIAL=y
# CONFIG_USB_SERIAL_CONSOLE is not set # CONFIG_USB_SERIAL_CONSOLE is not set
CONFIG_USB_SERIAL_GENERIC=y CONFIG_USB_SERIAL_GENERIC=y
# CONFIG_USB_SERIAL_AIRPRIME is not set # CONFIG_USB_SERIAL_AIRPRIME is not set
# CONFIG_USB_SERIAL_ANYDATA is not set
# CONFIG_USB_SERIAL_BELKIN is not set # CONFIG_USB_SERIAL_BELKIN is not set
# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set # CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
# CONFIG_USB_SERIAL_CP2101 is not set # CONFIG_USB_SERIAL_CP2101 is not set
@ -824,7 +825,6 @@ CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
# CONFIG_USB_SERIAL_KLSI is not set # CONFIG_USB_SERIAL_KLSI is not set
# CONFIG_USB_SERIAL_KOBIL_SCT is not set # CONFIG_USB_SERIAL_KOBIL_SCT is not set
# CONFIG_USB_SERIAL_MCT_U232 is not set # CONFIG_USB_SERIAL_MCT_U232 is not set
# CONFIG_USB_SERIAL_NOKIA_DKU2 is not set
# CONFIG_USB_SERIAL_PL2303 is not set # CONFIG_USB_SERIAL_PL2303 is not set
# CONFIG_USB_SERIAL_HP4X is not set # CONFIG_USB_SERIAL_HP4X is not set
# CONFIG_USB_SERIAL_SAFE is not set # CONFIG_USB_SERIAL_SAFE is not set

View File

@ -1,7 +1,7 @@
# #
# Automatically generated make config: don't edit # Automatically generated make config: don't edit
# Linux kernel version: 2.6.15-rc1 # Linux kernel version: 2.6.15-rc5
# Fri Nov 18 16:23:24 2005 # Tue Dec 20 15:59:38 2005
# #
CONFIG_PPC64=y CONFIG_PPC64=y
CONFIG_64BIT=y CONFIG_64BIT=y
@ -54,6 +54,7 @@ CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y CONFIG_IKCONFIG_PROC=y
CONFIG_CPUSETS=y CONFIG_CPUSETS=y
CONFIG_INITRAMFS_SOURCE="" CONFIG_INITRAMFS_SOURCE=""
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
# CONFIG_EMBEDDED is not set # CONFIG_EMBEDDED is not set
CONFIG_KALLSYMS=y CONFIG_KALLSYMS=y
CONFIG_KALLSYMS_ALL=y CONFIG_KALLSYMS_ALL=y
@ -176,7 +177,7 @@ CONFIG_HAVE_MEMORY_PRESENT=y
# CONFIG_SPARSEMEM_STATIC is not set # CONFIG_SPARSEMEM_STATIC is not set
CONFIG_SPARSEMEM_EXTREME=y CONFIG_SPARSEMEM_EXTREME=y
# CONFIG_MEMORY_HOTPLUG is not set # CONFIG_MEMORY_HOTPLUG is not set
CONFIG_SPLIT_PTLOCK_CPUS=4096 CONFIG_SPLIT_PTLOCK_CPUS=4
# CONFIG_PPC_64K_PAGES is not set # CONFIG_PPC_64K_PAGES is not set
# CONFIG_SCHED_SMT is not set # CONFIG_SCHED_SMT is not set
CONFIG_PROC_DEVICETREE=y CONFIG_PROC_DEVICETREE=y

View File

@ -1,7 +1,7 @@
# #
# Automatically generated make config: don't edit # Automatically generated make config: don't edit
# Linux kernel version: 2.6.15-rc1 # Linux kernel version: 2.6.15-rc5
# Tue Nov 15 14:36:55 2005 # Tue Dec 20 15:59:40 2005
# #
CONFIG_PPC64=y CONFIG_PPC64=y
CONFIG_64BIT=y CONFIG_64BIT=y
@ -55,6 +55,7 @@ CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y CONFIG_IKCONFIG_PROC=y
CONFIG_CPUSETS=y CONFIG_CPUSETS=y
CONFIG_INITRAMFS_SOURCE="" CONFIG_INITRAMFS_SOURCE=""
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
# CONFIG_EMBEDDED is not set # CONFIG_EMBEDDED is not set
CONFIG_KALLSYMS=y CONFIG_KALLSYMS=y
CONFIG_KALLSYMS_ALL=y CONFIG_KALLSYMS_ALL=y
@ -163,7 +164,7 @@ CONFIG_HAVE_MEMORY_PRESENT=y
# CONFIG_SPARSEMEM_STATIC is not set # CONFIG_SPARSEMEM_STATIC is not set
CONFIG_SPARSEMEM_EXTREME=y CONFIG_SPARSEMEM_EXTREME=y
# CONFIG_MEMORY_HOTPLUG is not set # CONFIG_MEMORY_HOTPLUG is not set
CONFIG_SPLIT_PTLOCK_CPUS=4096 CONFIG_SPLIT_PTLOCK_CPUS=4
CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y
# CONFIG_PPC_64K_PAGES is not set # CONFIG_PPC_64K_PAGES is not set
CONFIG_SCHED_SMT=y CONFIG_SCHED_SMT=y

View File

@ -183,8 +183,8 @@ syscall_exit_trace_cont:
ld r13,GPR13(r1) /* returning to usermode */ ld r13,GPR13(r1) /* returning to usermode */
1: ld r2,GPR2(r1) 1: ld r2,GPR2(r1)
li r12,MSR_RI li r12,MSR_RI
andc r10,r10,r12 andc r11,r10,r12
mtmsrd r10,1 /* clear MSR.RI */ mtmsrd r11,1 /* clear MSR.RI */
ld r1,GPR1(r1) ld r1,GPR1(r1)
mtlr r4 mtlr r4
mtcr r5 mtcr r5

View File

@ -514,7 +514,7 @@ void __init htab_initialize(void)
#undef KB #undef KB
#undef MB #undef MB
void __init htab_initialize_secondary(void) void htab_initialize_secondary(void)
{ {
if (!platform_is_lpar()) if (!platform_is_lpar())
mtspr(SPRN_SDR1, _SDR1); mtspr(SPRN_SDR1, _SDR1);

View File

@ -48,11 +48,6 @@ static struct hw_interrupt_type xics_pic = {
.set_affinity = xics_set_affinity .set_affinity = xics_set_affinity
}; };
static struct hw_interrupt_type xics_8259_pic = {
.typename = " XICS/8259",
.ack = xics_mask_and_ack_irq,
};
/* This is used to map real irq numbers to virtual */ /* This is used to map real irq numbers to virtual */
static struct radix_tree_root irq_map = RADIX_TREE_INIT(GFP_ATOMIC); static struct radix_tree_root irq_map = RADIX_TREE_INIT(GFP_ATOMIC);
@ -367,12 +362,7 @@ int xics_get_irq(struct pt_regs *regs)
/* for sanity, this had better be < NR_IRQS - 16 */ /* for sanity, this had better be < NR_IRQS - 16 */
if (vec == xics_irq_8259_cascade_real) { if (vec == xics_irq_8259_cascade_real) {
irq = i8259_irq(regs); irq = i8259_irq(regs);
if (irq == -1) { xics_end_irq(irq_offset_up(xics_irq_8259_cascade));
/* Spurious cascaded interrupt. Still must ack xics */
xics_end_irq(irq_offset_up(xics_irq_8259_cascade));
irq = -1;
}
} else if (vec == XICS_IRQ_SPURIOUS) { } else if (vec == XICS_IRQ_SPURIOUS) {
irq = -1; irq = -1;
} else { } else {
@ -542,6 +532,7 @@ nextnode:
xics_irq_8259_cascade_real = *ireg; xics_irq_8259_cascade_real = *ireg;
xics_irq_8259_cascade xics_irq_8259_cascade
= virt_irq_create_mapping(xics_irq_8259_cascade_real); = virt_irq_create_mapping(xics_irq_8259_cascade_real);
i8259_init(0, 0);
of_node_put(np); of_node_put(np);
} }
@ -565,12 +556,7 @@ nextnode:
#endif /* CONFIG_SMP */ #endif /* CONFIG_SMP */
} }
xics_8259_pic.enable = i8259_pic.enable; for (i = irq_offset_value(); i < NR_IRQS; ++i)
xics_8259_pic.disable = i8259_pic.disable;
xics_8259_pic.end = i8259_pic.end;
for (i = 0; i < 16; ++i)
get_irq_desc(i)->handler = &xics_8259_pic;
for (; i < NR_IRQS; ++i)
get_irq_desc(i)->handler = &xics_pic; get_irq_desc(i)->handler = &xics_pic;
xics_setup_cpu(); xics_setup_cpu();
@ -590,7 +576,6 @@ static int __init xics_setup_i8259(void)
no_action, 0, "8259 cascade", NULL)) no_action, 0, "8259 cascade", NULL))
printk(KERN_ERR "xics_setup_i8259: couldn't get 8259 " printk(KERN_ERR "xics_setup_i8259: couldn't get 8259 "
"cascade\n"); "cascade\n");
i8259_init(0, 0);
} }
return 0; return 0;
} }

View File

@ -130,10 +130,11 @@ mpc85xx_cds_show_cpuinfo(struct seq_file *m)
} }
#ifdef CONFIG_CPM2 #ifdef CONFIG_CPM2
static void cpm2_cascade(int irq, void *dev_id, struct pt_regs *regs) static irqreturn_t cpm2_cascade(int irq, void *dev_id, struct pt_regs *regs)
{ {
while((irq = cpm2_get_irq(regs)) >= 0) while((irq = cpm2_get_irq(regs)) >= 0)
__do_IRQ(irq, regs); __do_IRQ(irq, regs);
return IRQ_HANDLED;
} }
static struct irqaction cpm2_irqaction = { static struct irqaction cpm2_irqaction = {

View File

@ -55,6 +55,10 @@ config NR_CPUS
depends on SMP depends on SMP
default "32" default "32"
config SPARC
bool
default y
# Identify this as a Sparc32 build # Identify this as a Sparc32 build
config SPARC32 config SPARC32
bool bool

View File

@ -894,7 +894,7 @@ asmlinkage long sunos_sysconf (int name)
ret = ARG_MAX; ret = ARG_MAX;
break; break;
case _SC_CHILD_MAX: case _SC_CHILD_MAX:
ret = CHILD_MAX; ret = -1; /* no limit */
break; break;
case _SC_CLK_TCK: case _SC_CLK_TCK:
ret = HZ; ret = HZ;

View File

@ -85,19 +85,9 @@ SECTIONS
} }
_end = . ; _end = . ;
PROVIDE (end = .); PROVIDE (end = .);
/* Stabs debugging sections. */
.stab 0 : { *(.stab) }
.stabstr 0 : { *(.stabstr) }
.stab.excl 0 : { *(.stab.excl) }
.stab.exclstr 0 : { *(.stab.exclstr) }
.stab.index 0 : { *(.stab.index) }
.stab.indexstr 0 : { *(.stab.indexstr) }
.comment 0 : { *(.comment) }
.debug 0 : { *(.debug) }
.debug_srcinfo 0 : { *(.debug_srcinfo) }
.debug_aranges 0 : { *(.debug_aranges) }
.debug_pubnames 0 : { *(.debug_pubnames) }
.debug_sfnames 0 : { *(.debug_sfnames) }
.line 0 : { *(.line) }
/DISCARD/ : { *(.exit.text) *(.exit.data) *(.exitcall.exit) } /DISCARD/ : { *(.exit.text) *(.exit.data) *(.exitcall.exit) }
STABS_DEBUG
DWARF_DEBUG
} }

View File

@ -5,6 +5,10 @@
mainmenu "Linux/UltraSPARC Kernel Configuration" mainmenu "Linux/UltraSPARC Kernel Configuration"
config SPARC
bool
default y
config SPARC64 config SPARC64
bool bool
default y default y

View File

@ -17,7 +17,6 @@ CC := $(shell if $(CC) -m64 -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then
NEW_GCC := $(call cc-option-yn, -m64 -mcmodel=medlow) NEW_GCC := $(call cc-option-yn, -m64 -mcmodel=medlow)
NEW_GAS := $(shell if $(LD) -V 2>&1 | grep 'elf64_sparc' > /dev/null; then echo y; else echo n; fi) NEW_GAS := $(shell if $(LD) -V 2>&1 | grep 'elf64_sparc' > /dev/null; then echo y; else echo n; fi)
UNDECLARED_REGS := $(shell if $(CC) -c -x assembler /dev/null -Wa,--help | grep undeclared-regs > /dev/null; then echo y; else echo n; fi; ) UNDECLARED_REGS := $(shell if $(CC) -c -x assembler /dev/null -Wa,--help | grep undeclared-regs > /dev/null; then echo y; else echo n; fi; )
INLINE_LIMIT := $(call cc-option-yn, -m64 -finline-limit=100000)
export NEW_GCC export NEW_GCC
@ -49,10 +48,6 @@ else
AFLAGS += -m64 -mcpu=ultrasparc $(CC_UNDECL) AFLAGS += -m64 -mcpu=ultrasparc $(CC_UNDECL)
endif endif
ifeq ($(INLINE_LIMIT),y)
CFLAGS := $(CFLAGS) -finline-limit=100000
endif
ifeq ($(CONFIG_MCOUNT),y) ifeq ($(CONFIG_MCOUNT),y)
CFLAGS := $(CFLAGS) -pg CFLAGS := $(CFLAGS) -pg
endif endif

View File

@ -854,7 +854,7 @@ asmlinkage s32 sunos_sysconf (int name)
ret = ARG_MAX; ret = ARG_MAX;
break; break;
case _SC_CHILD_MAX: case _SC_CHILD_MAX:
ret = CHILD_MAX; ret = -1; /* no limit */
break; break;
case _SC_CLK_TCK: case _SC_CLK_TCK:
ret = HZ; ret = HZ;

View File

@ -90,19 +90,9 @@ SECTIONS
} }
_end = . ; _end = . ;
PROVIDE (end = .); PROVIDE (end = .);
/* Stabs debugging sections. */
.stab 0 : { *(.stab) }
.stabstr 0 : { *(.stabstr) }
.stab.excl 0 : { *(.stab.excl) }
.stab.exclstr 0 : { *(.stab.exclstr) }
.stab.index 0 : { *(.stab.index) }
.stab.indexstr 0 : { *(.stab.indexstr) }
.comment 0 : { *(.comment) }
.debug 0 : { *(.debug) }
.debug_srcinfo 0 : { *(.debug_srcinfo) }
.debug_aranges 0 : { *(.debug_aranges) }
.debug_pubnames 0 : { *(.debug_pubnames) }
.debug_sfnames 0 : { *(.debug_sfnames) }
.line 0 : { *(.line) }
/DISCARD/ : { *(.exit.text) *(.exit.data) *(.exitcall.exit) } /DISCARD/ : { *(.exit.text) *(.exit.data) *(.exitcall.exit) }
STABS_DEBUG
DWARF_DEBUG
} }

View File

@ -353,7 +353,7 @@ asmlinkage int solaris_sysconf(int id)
{ {
switch (id) { switch (id) {
case SOLARIS_CONFIG_NGROUPS: return NGROUPS_MAX; case SOLARIS_CONFIG_NGROUPS: return NGROUPS_MAX;
case SOLARIS_CONFIG_CHILD_MAX: return CHILD_MAX; case SOLARIS_CONFIG_CHILD_MAX: return -1; /* no limit */
case SOLARIS_CONFIG_OPEN_FILES: return OPEN_MAX; case SOLARIS_CONFIG_OPEN_FILES: return OPEN_MAX;
case SOLARIS_CONFIG_POSIX_VER: return 199309; case SOLARIS_CONFIG_POSIX_VER: return 199309;
case SOLARIS_CONFIG_PAGESIZE: return PAGE_SIZE; case SOLARIS_CONFIG_PAGESIZE: return PAGE_SIZE;

View File

@ -116,16 +116,16 @@ static int stop_ptraced_child(int pid, void *stack, int exitcode,
if(!WIFEXITED(status) || (WEXITSTATUS(status) != exitcode)) { if(!WIFEXITED(status) || (WEXITSTATUS(status) != exitcode)) {
int exit_with = WEXITSTATUS(status); int exit_with = WEXITSTATUS(status);
if (exit_with == 2) if (exit_with == 2)
printk("check_ptrace : child exited with status 2. " printf("check_ptrace : child exited with status 2. "
"Serious trouble happening! Try updating your " "Serious trouble happening! Try updating your "
"host skas patch!\nDisabling SYSEMU support."); "host skas patch!\nDisabling SYSEMU support.");
printk("check_ptrace : child exited with exitcode %d, while " printf("check_ptrace : child exited with exitcode %d, while "
"expecting %d; status 0x%x", exit_with, "expecting %d; status 0x%x", exit_with,
exitcode, status); exitcode, status);
if (mustpanic) if (mustpanic)
panic("\n"); panic("\n");
else else
printk("\n"); printf("\n");
ret = -1; ret = -1;
} }
@ -183,7 +183,7 @@ static void __init check_sysemu(void)
void *stack; void *stack;
int pid, n, status, count=0; int pid, n, status, count=0;
printk("Checking syscall emulation patch for ptrace..."); printf("Checking syscall emulation patch for ptrace...");
sysemu_supported = 0; sysemu_supported = 0;
pid = start_ptraced_child(&stack); pid = start_ptraced_child(&stack);
@ -207,10 +207,10 @@ static void __init check_sysemu(void)
goto fail_stopped; goto fail_stopped;
sysemu_supported = 1; sysemu_supported = 1;
printk("OK\n"); printf("OK\n");
set_using_sysemu(!force_sysemu_disabled); set_using_sysemu(!force_sysemu_disabled);
printk("Checking advanced syscall emulation patch for ptrace..."); printf("Checking advanced syscall emulation patch for ptrace...");
pid = start_ptraced_child(&stack); pid = start_ptraced_child(&stack);
if(ptrace(PTRACE_OLDSETOPTIONS, pid, 0, if(ptrace(PTRACE_OLDSETOPTIONS, pid, 0,
@ -246,7 +246,7 @@ static void __init check_sysemu(void)
goto fail_stopped; goto fail_stopped;
sysemu_supported = 2; sysemu_supported = 2;
printk("OK\n"); printf("OK\n");
if ( !force_sysemu_disabled ) if ( !force_sysemu_disabled )
set_using_sysemu(sysemu_supported); set_using_sysemu(sysemu_supported);
@ -255,7 +255,7 @@ static void __init check_sysemu(void)
fail: fail:
stop_ptraced_child(pid, stack, 1, 0); stop_ptraced_child(pid, stack, 1, 0);
fail_stopped: fail_stopped:
printk("missing\n"); printf("missing\n");
} }
static void __init check_ptrace(void) static void __init check_ptrace(void)
@ -263,7 +263,7 @@ static void __init check_ptrace(void)
void *stack; void *stack;
int pid, syscall, n, status; int pid, syscall, n, status;
printk("Checking that ptrace can change system call numbers..."); printf("Checking that ptrace can change system call numbers...");
pid = start_ptraced_child(&stack); pid = start_ptraced_child(&stack);
if(ptrace(PTRACE_OLDSETOPTIONS, pid, 0, (void *)PTRACE_O_TRACESYSGOOD) < 0) if(ptrace(PTRACE_OLDSETOPTIONS, pid, 0, (void *)PTRACE_O_TRACESYSGOOD) < 0)
@ -292,7 +292,7 @@ static void __init check_ptrace(void)
} }
} }
stop_ptraced_child(pid, stack, 0, 1); stop_ptraced_child(pid, stack, 0, 1);
printk("OK\n"); printf("OK\n");
check_sysemu(); check_sysemu();
} }
@ -472,6 +472,8 @@ int can_do_skas(void)
int have_devanon = 0; int have_devanon = 0;
/* Runs on boot kernel stack - already safe to use printk. */
void check_devanon(void) void check_devanon(void)
{ {
int fd; int fd;

View File

@ -34,6 +34,11 @@ EXPORT_SYMBOL(strstr);
int sym(void); \ int sym(void); \
EXPORT_SYMBOL(sym); EXPORT_SYMBOL(sym);
extern void readdir64(void) __attribute__((weak));
EXPORT_SYMBOL(readdir64);
extern void truncate64(void) __attribute__((weak));
EXPORT_SYMBOL(truncate64);
#ifdef SUBARCH_i386 #ifdef SUBARCH_i386
EXPORT_SYMBOL(vsyscall_ehdr); EXPORT_SYMBOL(vsyscall_ehdr);
EXPORT_SYMBOL(vsyscall_end); EXPORT_SYMBOL(vsyscall_end);

View File

@ -1,6 +1,8 @@
obj-y = bitops.o bugs.o checksum.o delay.o fault.o ksyms.o ldt.o ptrace.o \ obj-y := bitops.o bugs.o checksum.o delay.o fault.o ksyms.o ldt.o ptrace.o \
ptrace_user.o semaphore.o signal.o sigcontext.o stub.o stub_segv.o \ ptrace_user.o semaphore.o signal.o sigcontext.o syscalls.o sysrq.o \
syscalls.o sysrq.o sys_call_table.o sys_call_table.o
obj-$(CONFIG_MODE_SKAS) += stub.o stub_segv.o
obj-$(CONFIG_HIGHMEM) += highmem.o obj-$(CONFIG_HIGHMEM) += highmem.o
obj-$(CONFIG_MODULES) += module.o obj-$(CONFIG_MODULES) += module.o

View File

@ -6,8 +6,9 @@
#XXX: why into lib-y? #XXX: why into lib-y?
lib-y = bitops.o bugs.o csum-partial.o delay.o fault.o ldt.o mem.o memcpy.o \ lib-y = bitops.o bugs.o csum-partial.o delay.o fault.o ldt.o mem.o memcpy.o \
ptrace.o ptrace_user.o sigcontext.o signal.o stub.o \ ptrace.o ptrace_user.o sigcontext.o signal.o syscalls.o \
stub_segv.o syscalls.o syscall_table.o sysrq.o thunk.o syscall_table.o sysrq.o thunk.o
lib-$(CONFIG_MODE_SKAS) += stub.o stub_segv.o
obj-y := ksyms.o obj-y := ksyms.o
obj-$(CONFIG_MODULES) += module.o um_module.o obj-$(CONFIG_MODULES) += module.o um_module.o

View File

@ -348,7 +348,7 @@ size_zones(unsigned long *z, unsigned long *h,
} }
/* Compute holes */ /* Compute holes */
w = 0; w = start_pfn;
for (i = 0; i < MAX_NR_ZONES; i++) { for (i = 0; i < MAX_NR_ZONES; i++) {
unsigned long s = w; unsigned long s = w;
w += z[i]; w += z[i];

View File

@ -11,7 +11,7 @@ obj-y += fixup.o
obj-$(CONFIG_ACPI) += acpi.o obj-$(CONFIG_ACPI) += acpi.o
obj-y += legacy.o irq.o common.o obj-y += legacy.o irq.o common.o
# mmconfig has a 64bit special # mmconfig has a 64bit special
obj-$(CONFIG_PCI_MMCONFIG) += mmconfig.o obj-$(CONFIG_PCI_MMCONFIG) += mmconfig.o direct.o
obj-$(CONFIG_NUMA) += k8-bus.o obj-$(CONFIG_NUMA) += k8-bus.o

View File

@ -442,11 +442,37 @@ error:
return err; return err;
} }
/* Send basic block requests */
static int __blk_send_generic(request_queue_t *q, struct gendisk *bd_disk, int cmd, int data)
{
struct request *rq;
int err;
rq = blk_get_request(q, WRITE, __GFP_WAIT);
rq->flags |= REQ_BLOCK_PC;
rq->data = NULL;
rq->data_len = 0;
rq->timeout = BLK_DEFAULT_TIMEOUT;
memset(rq->cmd, 0, sizeof(rq->cmd));
rq->cmd[0] = cmd;
rq->cmd[4] = data;
rq->cmd_len = 6;
err = blk_execute_rq(q, bd_disk, rq, 0);
blk_put_request(rq);
return err;
}
static inline int blk_send_start_stop(request_queue_t *q, struct gendisk *bd_disk, int data)
{
return __blk_send_generic(q, bd_disk, GPCMD_START_STOP_UNIT, data);
}
int scsi_cmd_ioctl(struct file *file, struct gendisk *bd_disk, unsigned int cmd, void __user *arg) int scsi_cmd_ioctl(struct file *file, struct gendisk *bd_disk, unsigned int cmd, void __user *arg)
{ {
request_queue_t *q; request_queue_t *q;
struct request *rq; int err;
int close = 0, err;
q = bd_disk->queue; q = bd_disk->queue;
if (!q) if (!q)
@ -564,19 +590,10 @@ int scsi_cmd_ioctl(struct file *file, struct gendisk *bd_disk, unsigned int cmd,
err = sg_scsi_ioctl(file, q, bd_disk, arg); err = sg_scsi_ioctl(file, q, bd_disk, arg);
break; break;
case CDROMCLOSETRAY: case CDROMCLOSETRAY:
close = 1; err = blk_send_start_stop(q, bd_disk, 0x03);
break;
case CDROMEJECT: case CDROMEJECT:
rq = blk_get_request(q, WRITE, __GFP_WAIT); err = blk_send_start_stop(q, bd_disk, 0x02);
rq->flags |= REQ_BLOCK_PC;
rq->data = NULL;
rq->data_len = 0;
rq->timeout = BLK_DEFAULT_TIMEOUT;
memset(rq->cmd, 0, sizeof(rq->cmd));
rq->cmd[0] = GPCMD_START_STOP_UNIT;
rq->cmd[4] = 0x02 + (close != 0);
rq->cmd_len = 6;
err = blk_execute_rq(q, bd_disk, rq, 0);
blk_put_request(rq);
break; break;
default: default:
err = -ENOTTY; err = -ENOTTY;

View File

@ -274,8 +274,6 @@ static void acpi_processor_idle(void)
} }
} }
cx->usage++;
#ifdef CONFIG_HOTPLUG_CPU #ifdef CONFIG_HOTPLUG_CPU
/* /*
* Check for P_LVL2_UP flag before entering C2 and above on * Check for P_LVL2_UP flag before entering C2 and above on
@ -283,9 +281,12 @@ static void acpi_processor_idle(void)
* detection phase, to work cleanly with logical CPU hotplug. * detection phase, to work cleanly with logical CPU hotplug.
*/ */
if ((cx->type != ACPI_STATE_C1) && (num_online_cpus() > 1) && if ((cx->type != ACPI_STATE_C1) && (num_online_cpus() > 1) &&
!pr->flags.has_cst && acpi_fadt.plvl2_up) !pr->flags.has_cst && !acpi_fadt.plvl2_up)
cx->type = ACPI_STATE_C1; cx = &pr->power.states[ACPI_STATE_C1];
#endif #endif
cx->usage++;
/* /*
* Sleep: * Sleep:
* ------ * ------
@ -386,6 +387,15 @@ static void acpi_processor_idle(void)
next_state = pr->power.state; next_state = pr->power.state;
#ifdef CONFIG_HOTPLUG_CPU
/* Don't do promotion/demotion */
if ((cx->type == ACPI_STATE_C1) && (num_online_cpus() > 1) &&
!pr->flags.has_cst && !acpi_fadt.plvl2_up) {
next_state = cx;
goto end;
}
#endif
/* /*
* Promotion? * Promotion?
* ---------- * ----------
@ -557,7 +567,7 @@ static int acpi_processor_get_power_info_fadt(struct acpi_processor *pr)
* Check for P_LVL2_UP flag before entering C2 and above on * Check for P_LVL2_UP flag before entering C2 and above on
* an SMP system. * an SMP system.
*/ */
if ((num_online_cpus() > 1) && acpi_fadt.plvl2_up) if ((num_online_cpus() > 1) && !acpi_fadt.plvl2_up)
return_VALUE(-ENODEV); return_VALUE(-ENODEV);
#endif #endif

View File

@ -102,8 +102,8 @@ static int cpu_has_cpufreq(unsigned int cpu)
{ {
struct cpufreq_policy policy; struct cpufreq_policy policy;
if (!acpi_thermal_cpufreq_is_init || cpufreq_get_policy(&policy, cpu)) if (!acpi_thermal_cpufreq_is_init || cpufreq_get_policy(&policy, cpu))
return -ENODEV; return 0;
return 0; return 1;
} }
static int acpi_thermal_cpufreq_increase(unsigned int cpu) static int acpi_thermal_cpufreq_increase(unsigned int cpu)

View File

@ -84,14 +84,14 @@ acpi_status acpi_ut_allocate_owner_id(acpi_owner_id * owner_id)
/* Find a free owner ID */ /* Find a free owner ID */
for (i = 0; i < 32; i++) { for (i = 0; i < 64; i++) {
if (!(acpi_gbl_owner_id_mask & (1 << i))) { if (!(acpi_gbl_owner_id_mask & (1ULL << i))) {
ACPI_DEBUG_PRINT((ACPI_DB_VALUES, ACPI_DEBUG_PRINT((ACPI_DB_VALUES,
"Current owner_id mask: %8.8X New ID: %2.2X\n", "Current owner_id mask: %16.16LX New ID: %2.2X\n",
acpi_gbl_owner_id_mask, acpi_gbl_owner_id_mask,
(unsigned int)(i + 1))); (unsigned int)(i + 1)));
acpi_gbl_owner_id_mask |= (1 << i); acpi_gbl_owner_id_mask |= (1ULL << i);
*owner_id = (acpi_owner_id) (i + 1); *owner_id = (acpi_owner_id) (i + 1);
goto exit; goto exit;
} }
@ -106,7 +106,7 @@ acpi_status acpi_ut_allocate_owner_id(acpi_owner_id * owner_id)
*/ */
*owner_id = 0; *owner_id = 0;
status = AE_OWNER_ID_LIMIT; status = AE_OWNER_ID_LIMIT;
ACPI_REPORT_ERROR(("Could not allocate new owner_id (32 max), AE_OWNER_ID_LIMIT\n")); ACPI_REPORT_ERROR(("Could not allocate new owner_id (64 max), AE_OWNER_ID_LIMIT\n"));
exit: exit:
(void)acpi_ut_release_mutex(ACPI_MTX_CACHES); (void)acpi_ut_release_mutex(ACPI_MTX_CACHES);
@ -123,7 +123,7 @@ acpi_status acpi_ut_allocate_owner_id(acpi_owner_id * owner_id)
* control method or unloading a table. Either way, we would * control method or unloading a table. Either way, we would
* ignore any error anyway. * ignore any error anyway.
* *
* DESCRIPTION: Release a table or method owner ID. Valid IDs are 1 - 32 * DESCRIPTION: Release a table or method owner ID. Valid IDs are 1 - 64
* *
******************************************************************************/ ******************************************************************************/
@ -140,7 +140,7 @@ void acpi_ut_release_owner_id(acpi_owner_id * owner_id_ptr)
/* Zero is not a valid owner_iD */ /* Zero is not a valid owner_iD */
if ((owner_id == 0) || (owner_id > 32)) { if ((owner_id == 0) || (owner_id > 64)) {
ACPI_REPORT_ERROR(("Invalid owner_id: %2.2X\n", owner_id)); ACPI_REPORT_ERROR(("Invalid owner_id: %2.2X\n", owner_id));
return_VOID; return_VOID;
} }
@ -158,8 +158,8 @@ void acpi_ut_release_owner_id(acpi_owner_id * owner_id_ptr)
/* Free the owner ID only if it is valid */ /* Free the owner ID only if it is valid */
if (acpi_gbl_owner_id_mask & (1 << owner_id)) { if (acpi_gbl_owner_id_mask & (1ULL << owner_id)) {
acpi_gbl_owner_id_mask ^= (1 << owner_id); acpi_gbl_owner_id_mask ^= (1ULL << owner_id);
} }
(void)acpi_ut_release_mutex(ACPI_MTX_CACHES); (void)acpi_ut_release_mutex(ACPI_MTX_CACHES);

View File

@ -687,7 +687,7 @@ config NVRAM
config RTC config RTC
tristate "Enhanced Real Time Clock Support" tristate "Enhanced Real Time Clock Support"
depends on !PPC32 && !PARISC && !IA64 && !M68K depends on !PPC32 && !PARISC && !IA64 && !M68K && (!SPARC || PCI)
---help--- ---help---
If you say Y here and create a character special file /dev/rtc with If you say Y here and create a character special file /dev/rtc with
major number 10 and minor number 135 using mknod ("man mknod"), you major number 10 and minor number 135 using mknod ("man mknod"), you
@ -735,7 +735,7 @@ config SGI_IP27_RTC
config GEN_RTC config GEN_RTC
tristate "Generic /dev/rtc emulation" tristate "Generic /dev/rtc emulation"
depends on RTC!=y && !IA64 && !ARM && !M32R && !SPARC32 && !SPARC64 depends on RTC!=y && !IA64 && !ARM && !M32R && !SPARC
---help--- ---help---
If you say Y here and create a character special file /dev/rtc with If you say Y here and create a character special file /dev/rtc with
major number 10 and minor number 135 using mknod ("man mknod"), you major number 10 and minor number 135 using mknod ("man mknod"), you

View File

@ -1312,8 +1312,6 @@ static void radeon_set_pcigart(drm_radeon_private_t * dev_priv, int on)
static int radeon_do_init_cp(drm_device_t * dev, drm_radeon_init_t * init) static int radeon_do_init_cp(drm_device_t * dev, drm_radeon_init_t * init)
{ {
drm_radeon_private_t *dev_priv = dev->dev_private; drm_radeon_private_t *dev_priv = dev->dev_private;
unsigned int mem_size;
DRM_DEBUG("\n"); DRM_DEBUG("\n");
dev_priv->is_pci = init->is_pci; dev_priv->is_pci = init->is_pci;
@ -1523,11 +1521,8 @@ static int radeon_do_init_cp(drm_device_t * dev, drm_radeon_init_t * init)
+ dev_priv->fb_location) >> 10)); + dev_priv->fb_location) >> 10));
dev_priv->gart_size = init->gart_size; dev_priv->gart_size = init->gart_size;
dev_priv->gart_vm_start = dev_priv->fb_location
mem_size = RADEON_READ(RADEON_CONFIG_MEMSIZE); + RADEON_READ(RADEON_CONFIG_APER_SIZE);
if (mem_size == 0)
mem_size = 0x800000;
dev_priv->gart_vm_start = dev_priv->fb_location + mem_size;
#if __OS_HAS_AGP #if __OS_HAS_AGP
if (!dev_priv->is_pci) if (!dev_priv->is_pci)

View File

@ -930,8 +930,8 @@ static void kbd_refresh_leds(struct input_handle *handle)
} }
#if defined(CONFIG_X86) || defined(CONFIG_IA64) || defined(CONFIG_ALPHA) ||\ #if defined(CONFIG_X86) || defined(CONFIG_IA64) || defined(CONFIG_ALPHA) ||\
defined(CONFIG_MIPS) || defined(CONFIG_PPC) || defined(CONFIG_SPARC32) ||\ defined(CONFIG_MIPS) || defined(CONFIG_PPC) || defined(CONFIG_SPARC) ||\
defined(CONFIG_SPARC64) || defined(CONFIG_PARISC) || defined(CONFIG_SUPERH) ||\ defined(CONFIG_PARISC) || defined(CONFIG_SUPERH) ||\
(defined(CONFIG_ARM) && defined(CONFIG_KEYBOARD_ATKBD) && !defined(CONFIG_ARCH_RPC)) (defined(CONFIG_ARM) && defined(CONFIG_KEYBOARD_ATKBD) && !defined(CONFIG_ARCH_RPC))
#define HW_RAW(dev) (test_bit(EV_MSC, dev->evbit) && test_bit(MSC_RAW, dev->mscbit) &&\ #define HW_RAW(dev) (test_bit(EV_MSC, dev->evbit) && test_bit(MSC_RAW, dev->mscbit) &&\
@ -958,7 +958,7 @@ static unsigned short x86_keycodes[256] =
extern int mac_hid_mouse_emulate_buttons(int, int, int); extern int mac_hid_mouse_emulate_buttons(int, int, int);
#endif /* CONFIG_MAC_EMUMOUSEBTN */ #endif /* CONFIG_MAC_EMUMOUSEBTN */
#if defined(CONFIG_SPARC32) || defined(CONFIG_SPARC64) #ifdef CONFIG_SPARC
static int sparc_l1_a_state = 0; static int sparc_l1_a_state = 0;
extern void sun_do_break(void); extern void sun_do_break(void);
#endif #endif
@ -1045,7 +1045,7 @@ static void kbd_keycode(unsigned int keycode, int down,
if (keycode == KEY_LEFTALT || keycode == KEY_RIGHTALT) if (keycode == KEY_LEFTALT || keycode == KEY_RIGHTALT)
sysrq_alt = down; sysrq_alt = down;
#if defined(CONFIG_SPARC32) || defined(CONFIG_SPARC64) #ifdef CONFIG_SPARC
if (keycode == KEY_STOP) if (keycode == KEY_STOP)
sparc_l1_a_state = down; sparc_l1_a_state = down;
#endif #endif
@ -1072,7 +1072,7 @@ static void kbd_keycode(unsigned int keycode, int down,
return; return;
} }
#endif #endif
#if defined(CONFIG_SPARC32) || defined(CONFIG_SPARC64) #ifdef CONFIG_SPARC
if (keycode == KEY_A && sparc_l1_a_state) { if (keycode == KEY_A && sparc_l1_a_state) {
sparc_l1_a_state = 0; sparc_l1_a_state = 0;
sun_do_break(); sun_do_break();

View File

@ -419,7 +419,7 @@ vcs_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos)
while (this_round > 1) { while (this_round > 1) {
unsigned short w; unsigned short w;
w = get_unaligned(((const unsigned short *)con_buf0)); w = get_unaligned(((unsigned short *)con_buf0));
vcs_scr_writew(vc, w, org++); vcs_scr_writew(vc, w, org++);
con_buf0 += 2; con_buf0 += 2;
this_round -= 2; this_round -= 2;

View File

@ -26,7 +26,7 @@ comment "FC4 drivers"
config FC4_SOC config FC4_SOC
tristate "Sun SOC/Sbus" tristate "Sun SOC/Sbus"
depends on FC4!=n && (SPARC32 || SPARC64) depends on FC4!=n && SPARC
help help
Serial Optical Channel is an interface card with one or two Fibre Serial Optical Channel is an interface card with one or two Fibre
Optic ports, each of which can be connected to a disk array. Note Optic ports, each of which can be connected to a disk array. Note
@ -38,7 +38,7 @@ config FC4_SOC
config FC4_SOCAL config FC4_SOCAL
tristate "Sun SOC+ (aka SOCAL)" tristate "Sun SOC+ (aka SOCAL)"
depends on FC4!=n && (SPARC32 || SPARC64) depends on FC4!=n && SPARC
---help--- ---help---
Serial Optical Channel Plus is an interface card with up to two Serial Optical Channel Plus is an interface card with up to two
Fibre Optic ports. This card supports FC Arbitrated Loop (usually Fibre Optic ports. This card supports FC Arbitrated Loop (usually
@ -62,7 +62,7 @@ config SCSI_PLUTO
be called pluto. be called pluto.
config SCSI_FCAL config SCSI_FCAL
tristate "Sun Enterprise Network Array (A5000 and EX500)" if SPARC32 || SPARC64 tristate "Sun Enterprise Network Array (A5000 and EX500)" if SPARC
depends on FC4!=n && SCSI depends on FC4!=n && SCSI
help help
This driver drives FC-AL disks connected through a Fibre Channel This driver drives FC-AL disks connected through a Fibre Channel
@ -75,7 +75,7 @@ config SCSI_FCAL
config SCSI_FCAL config SCSI_FCAL
prompt "Generic FC-AL disk driver" prompt "Generic FC-AL disk driver"
depends on FC4!=n && SCSI && !SPARC32 && !SPARC64 depends on FC4!=n && SCSI && !SPARC
endmenu endmenu

View File

@ -172,7 +172,7 @@ static int warrior_connect(struct serio *serio, struct serio_driver *drv)
input_set_abs_params(input_dev, ABS_Y, -64, 64, 0, 8); input_set_abs_params(input_dev, ABS_Y, -64, 64, 0, 8);
input_set_abs_params(input_dev, ABS_THROTTLE, -112, 112, 0, 0); input_set_abs_params(input_dev, ABS_THROTTLE, -112, 112, 0, 0);
input_set_abs_params(input_dev, ABS_HAT0X, -1, 1, 0, 0); input_set_abs_params(input_dev, ABS_HAT0X, -1, 1, 0, 0);
input_set_abs_params(input_dev, ABS_HAT0X, -1, 1, 0, 0); input_set_abs_params(input_dev, ABS_HAT0Y, -1, 1, 0, 0);
serio_set_drvdata(serio, warrior); serio_set_drvdata(serio, warrior);

View File

@ -26,7 +26,7 @@ config INPUT_PCSPKR
config INPUT_SPARCSPKR config INPUT_SPARCSPKR
tristate "SPARC Speaker support" tristate "SPARC Speaker support"
depends on PCI && (SPARC32 || SPARC64) depends on PCI && SPARC
help help
Say Y here if you want the standard Speaker on Sparc PCI systems Say Y here if you want the standard Speaker on Sparc PCI systems
to be used for bells and whistles. to be used for bells and whistles.

View File

@ -95,7 +95,7 @@ static void sermouse_process_msc(struct sermouse *sermouse, signed char data, st
input_sync(dev); input_sync(dev);
if (++sermouse->count == (5 - ((sermouse->type == SERIO_SUN) << 1))) if (++sermouse->count == 5)
sermouse->count = 0; sermouse->count = 0;
} }

View File

@ -21,7 +21,7 @@
#include "i8042-ip22io.h" #include "i8042-ip22io.h"
#elif defined(CONFIG_PPC) #elif defined(CONFIG_PPC)
#include "i8042-ppcio.h" #include "i8042-ppcio.h"
#elif defined(CONFIG_SPARC32) || defined(CONFIG_SPARC64) #elif defined(CONFIG_SPARC)
#include "i8042-sparcio.h" #include "i8042-sparcio.h"
#elif defined(CONFIG_X86) || defined(CONFIG_IA64) #elif defined(CONFIG_X86) || defined(CONFIG_IA64)
#include "i8042-x86ia64io.h" #include "i8042-x86ia64io.h"

View File

@ -923,7 +923,7 @@ static void do_monitor_cpu_combined(void)
if (temp_combi >= ((state0->mpu.tmax + 8) << 16)) { if (temp_combi >= ((state0->mpu.tmax + 8) << 16)) {
printk(KERN_WARNING "Warning ! Temperature way above maximum (%d) !\n", printk(KERN_WARNING "Warning ! Temperature way above maximum (%d) !\n",
temp_combi >> 16); temp_combi >> 16);
state0->overtemp = CPU_MAX_OVERTEMP; state0->overtemp += CPU_MAX_OVERTEMP / 4;
} else if (temp_combi > (state0->mpu.tmax << 16)) } else if (temp_combi > (state0->mpu.tmax << 16))
state0->overtemp++; state0->overtemp++;
else else
@ -933,7 +933,7 @@ static void do_monitor_cpu_combined(void)
if (state0->overtemp > 0) { if (state0->overtemp > 0) {
state0->rpm = state0->mpu.rmaxn_exhaust_fan; state0->rpm = state0->mpu.rmaxn_exhaust_fan;
state0->intake_rpm = intake = state0->mpu.rmaxn_intake_fan; state0->intake_rpm = intake = state0->mpu.rmaxn_intake_fan;
pump = state0->pump_min; pump = state0->pump_max;
goto do_set_fans; goto do_set_fans;
} }
@ -998,7 +998,7 @@ static void do_monitor_cpu_split(struct cpu_pid_state *state)
printk(KERN_WARNING "Warning ! CPU %d temperature way above maximum" printk(KERN_WARNING "Warning ! CPU %d temperature way above maximum"
" (%d) !\n", " (%d) !\n",
state->index, temp >> 16); state->index, temp >> 16);
state->overtemp = CPU_MAX_OVERTEMP; state->overtemp += CPU_MAX_OVERTEMP / 4;
} else if (temp > (state->mpu.tmax << 16)) } else if (temp > (state->mpu.tmax << 16))
state->overtemp++; state->overtemp++;
else else
@ -1060,7 +1060,7 @@ static void do_monitor_cpu_rack(struct cpu_pid_state *state)
printk(KERN_WARNING "Warning ! CPU %d temperature way above maximum" printk(KERN_WARNING "Warning ! CPU %d temperature way above maximum"
" (%d) !\n", " (%d) !\n",
state->index, temp >> 16); state->index, temp >> 16);
state->overtemp = CPU_MAX_OVERTEMP; state->overtemp = CPU_MAX_OVERTEMP / 4;
} else if (temp > (state->mpu.tmax << 16)) } else if (temp > (state->mpu.tmax << 16))
state->overtemp++; state->overtemp++;
else else

View File

@ -1729,7 +1729,7 @@ level_show(mddev_t *mddev, char *page)
if (p == NULL && mddev->raid_disks == 0) if (p == NULL && mddev->raid_disks == 0)
return 0; return 0;
if (mddev->level >= 0) if (mddev->level >= 0)
return sprintf(page, "RAID-%d\n", mddev->level); return sprintf(page, "raid%d\n", mddev->level);
else else
return sprintf(page, "%s\n", p->name); return sprintf(page, "%s\n", p->name);
} }

View File

@ -176,6 +176,9 @@ static void init_av7110_av(struct av7110 *av7110)
} }
} }
if (dev->pci->subsystem_vendor == 0x13c2 && dev->pci->subsystem_device == 0x000e)
av7110_fw_cmd(av7110, COMTYPE_AUDIODAC, SpdifSwitch, 1, 0); // SPDIF on
ret = av7110_set_volume(av7110, av7110->mixer.volume_left, av7110->mixer.volume_right); ret = av7110_set_volume(av7110, av7110->mixer.volume_left, av7110->mixer.volume_right);
if (ret < 0) if (ret < 0)
printk("dvb-ttpci:cannot set volume :%d\n",ret); printk("dvb-ttpci:cannot set volume :%d\n",ret);

View File

@ -143,7 +143,8 @@ enum av7110_audio_command {
MainSwitch, MainSwitch,
ADSwitch, ADSwitch,
SendDiSEqC, SendDiSEqC,
SetRegister SetRegister,
SpdifSwitch
}; };
enum av7110_request_command { enum av7110_request_command {

View File

@ -333,24 +333,30 @@ static int set_input(struct i2c_client *client, enum cx25840_input input)
static int set_v4lstd(struct i2c_client *client, v4l2_std_id std) static int set_v4lstd(struct i2c_client *client, v4l2_std_id std)
{ {
u8 fmt; u8 fmt=0; /* zero is autodetect */
switch (std) { /* First tests should be against specific std */
/* zero is autodetect */ if (std & V4L2_STD_NTSC_M_JP) {
case 0: fmt = 0x0; break; fmt=0x2;
/* default ntsc to ntsc-m */ } else if (std & V4L2_STD_NTSC_443) {
case V4L2_STD_NTSC: fmt=0x3;
case V4L2_STD_NTSC_M: fmt = 0x1; break; } else if (std & V4L2_STD_PAL_M) {
case V4L2_STD_NTSC_M_JP: fmt = 0x2; break; fmt=0x5;
case V4L2_STD_NTSC_443: fmt = 0x3; break; } else if (std & V4L2_STD_PAL_N) {
case V4L2_STD_PAL: fmt = 0x4; break; fmt=0x6;
case V4L2_STD_PAL_M: fmt = 0x5; break; } else if (std & V4L2_STD_PAL_Nc) {
case V4L2_STD_PAL_N: fmt = 0x6; break; fmt=0x7;
case V4L2_STD_PAL_Nc: fmt = 0x7; break; } else if (std & V4L2_STD_PAL_60) {
case V4L2_STD_PAL_60: fmt = 0x8; break; fmt=0x8;
case V4L2_STD_SECAM: fmt = 0xc; break; } else {
default: /* Then, test against generic ones */
return -ERANGE; if (std & V4L2_STD_NTSC) {
fmt=0x1;
} else if (std & V4L2_STD_PAL) {
fmt=0x4;
} else if (std & V4L2_STD_SECAM) {
fmt=0xc;
}
} }
cx25840_and_or(client, 0x400, ~0xf, fmt); cx25840_and_or(client, 0x400, ~0xf, fmt);

View File

@ -39,7 +39,7 @@ MODULE_PARM_DESC(core_debug,"enable debug messages [core]");
#define em28xx_coredbg(fmt, arg...) do {\ #define em28xx_coredbg(fmt, arg...) do {\
if (core_debug) \ if (core_debug) \
printk(KERN_INFO "%s %s :"fmt, \ printk(KERN_INFO "%s %s :"fmt, \
dev->name, __FUNCTION__, ##arg); } while (0) dev->name, __FUNCTION__ , ##arg); } while (0)
static unsigned int reg_debug; static unsigned int reg_debug;
module_param(reg_debug,int,0644); module_param(reg_debug,int,0644);
@ -48,7 +48,7 @@ MODULE_PARM_DESC(reg_debug,"enable debug messages [URB reg]");
#define em28xx_regdbg(fmt, arg...) do {\ #define em28xx_regdbg(fmt, arg...) do {\
if (reg_debug) \ if (reg_debug) \
printk(KERN_INFO "%s %s :"fmt, \ printk(KERN_INFO "%s %s :"fmt, \
dev->name, __FUNCTION__, ##arg); } while (0) dev->name, __FUNCTION__ , ##arg); } while (0)
static unsigned int isoc_debug; static unsigned int isoc_debug;
module_param(isoc_debug,int,0644); module_param(isoc_debug,int,0644);
@ -57,7 +57,7 @@ MODULE_PARM_DESC(isoc_debug,"enable debug messages [isoc transfers]");
#define em28xx_isocdbg(fmt, arg...) do {\ #define em28xx_isocdbg(fmt, arg...) do {\
if (isoc_debug) \ if (isoc_debug) \
printk(KERN_INFO "%s %s :"fmt, \ printk(KERN_INFO "%s %s :"fmt, \
dev->name, __FUNCTION__, ##arg); } while (0) dev->name, __FUNCTION__ , ##arg); } while (0)
static int alt = EM28XX_PINOUT; static int alt = EM28XX_PINOUT;
module_param(alt, int, 0644); module_param(alt, int, 0644);

View File

@ -44,7 +44,7 @@ MODULE_PARM_DESC(i2c_debug, "enable debug messages [i2c]");
printk(fmt, ##args); } while (0) printk(fmt, ##args); } while (0)
#define dprintk2(lvl,fmt, args...) if (i2c_debug>=lvl) do{ \ #define dprintk2(lvl,fmt, args...) if (i2c_debug>=lvl) do{ \
printk(KERN_DEBUG "%s at %s: " fmt, \ printk(KERN_DEBUG "%s at %s: " fmt, \
dev->name, __FUNCTION__, ##args); } while (0) dev->name, __FUNCTION__ , ##args); } while (0)
/* /*
* em2800_i2c_send_max4() * em2800_i2c_send_max4()

View File

@ -45,7 +45,7 @@
#define em28xx_videodbg(fmt, arg...) do {\ #define em28xx_videodbg(fmt, arg...) do {\
if (video_debug) \ if (video_debug) \
printk(KERN_INFO "%s %s :"fmt, \ printk(KERN_INFO "%s %s :"fmt, \
dev->name, __FUNCTION__, ##arg); } while (0) dev->name, __FUNCTION__ , ##arg); } while (0)
MODULE_AUTHOR(DRIVER_AUTHOR); MODULE_AUTHOR(DRIVER_AUTHOR);
MODULE_DESCRIPTION(DRIVER_DESC); MODULE_DESCRIPTION(DRIVER_DESC);

View File

@ -392,18 +392,18 @@ extern const unsigned int em28xx_bcount;
/* printk macros */ /* printk macros */
#define em28xx_err(fmt, arg...) do {\ #define em28xx_err(fmt, arg...) do {\
printk(KERN_ERR fmt, ##arg); } while (0) printk(KERN_ERR fmt , ##arg); } while (0)
#define em28xx_errdev(fmt, arg...) do {\ #define em28xx_errdev(fmt, arg...) do {\
printk(KERN_ERR "%s: "fmt,\ printk(KERN_ERR "%s: "fmt,\
dev->name, ##arg); } while (0) dev->name , ##arg); } while (0)
#define em28xx_info(fmt, arg...) do {\ #define em28xx_info(fmt, arg...) do {\
printk(KERN_INFO "%s: "fmt,\ printk(KERN_INFO "%s: "fmt,\
dev->name, ##arg); } while (0) dev->name , ##arg); } while (0)
#define em28xx_warn(fmt, arg...) do {\ #define em28xx_warn(fmt, arg...) do {\
printk(KERN_WARNING "%s: "fmt,\ printk(KERN_WARNING "%s: "fmt,\
dev->name, ##arg); } while (0) dev->name , ##arg); } while (0)
inline static int em28xx_audio_source(struct em28xx *dev, int input) inline static int em28xx_audio_source(struct em28xx *dev, int input)
{ {

View File

@ -389,7 +389,7 @@ static int saa7127_set_vps(struct i2c_client *client, struct v4l2_sliced_vbi_dat
static int saa7127_set_cc(struct i2c_client *client, struct v4l2_sliced_vbi_data *data) static int saa7127_set_cc(struct i2c_client *client, struct v4l2_sliced_vbi_data *data)
{ {
struct saa7127_state *state = i2c_get_clientdata(client); struct saa7127_state *state = i2c_get_clientdata(client);
u16 cc = data->data[0] << 8 | data->data[1]; u16 cc = data->data[1] << 8 | data->data[0];
int enable = (data->line != 0); int enable = (data->line != 0);
if (enable && (data->field != 0 || data->line != 21)) if (enable && (data->field != 0 || data->line != 21))
@ -397,7 +397,7 @@ static int saa7127_set_cc(struct i2c_client *client, struct v4l2_sliced_vbi_data
if (state->cc_enable != enable) { if (state->cc_enable != enable) {
saa7127_dbg("Turn CC %s\n", enable ? "on" : "off"); saa7127_dbg("Turn CC %s\n", enable ? "on" : "off");
saa7127_write(client, SAA7127_REG_CLOSED_CAPTION, saa7127_write(client, SAA7127_REG_CLOSED_CAPTION,
(enable << 6) | 0x11); (state->xds_enable << 7) | (enable << 6) | 0x11);
state->cc_enable = enable; state->cc_enable = enable;
} }
if (!enable) if (!enable)
@ -423,7 +423,7 @@ static int saa7127_set_xds(struct i2c_client *client, struct v4l2_sliced_vbi_dat
if (state->xds_enable != enable) { if (state->xds_enable != enable) {
saa7127_dbg("Turn XDS %s\n", enable ? "on" : "off"); saa7127_dbg("Turn XDS %s\n", enable ? "on" : "off");
saa7127_write(client, SAA7127_REG_CLOSED_CAPTION, saa7127_write(client, SAA7127_REG_CLOSED_CAPTION,
(enable << 7) | 0x11); (enable << 7) | (state->cc_enable << 6) | 0x11);
state->xds_enable = enable; state->xds_enable = enable;
} }
if (!enable) if (!enable)

View File

@ -1,11 +1,10 @@
config VIDEO_SAA7134 config VIDEO_SAA7134
tristate "Philips SAA7134 support" tristate "Philips SAA7134 support"
depends on VIDEO_DEV && PCI && I2C && SOUND && SND depends on VIDEO_DEV && PCI && I2C
select VIDEO_BUF select VIDEO_BUF
select VIDEO_IR select VIDEO_IR
select VIDEO_TUNER select VIDEO_TUNER
select CRC32 select CRC32
select SND_PCM_OSS
---help--- ---help---
This is a video4linux driver for Philips SAA713x based This is a video4linux driver for Philips SAA713x based
TV cards. TV cards.
@ -13,6 +12,29 @@ config VIDEO_SAA7134
To compile this driver as a module, choose M here: the To compile this driver as a module, choose M here: the
module will be called saa7134. module will be called saa7134.
config VIDEO_SAA7134_ALSA
tristate "Philips SAA7134 DMA audio support"
depends on VIDEO_SAA7134 && SND
select SND_PCM_OSS
---help---
This is a video4linux driver for direct (DMA) audio in
Philips SAA713x based TV cards using ALSA
To compile this driver as a module, choose M here: the
module will be called saa7134-alsa.
config VIDEO_SAA7134_OSS
tristate "Philips SAA7134 DMA audio support (OSS, DEPRECATED)"
depends on VIDEO_SAA7134 && SOUND_PRIME && !VIDEO_SAA7134_ALSA
---help---
This is a video4linux driver for direct (DMA) audio in
Philips SAA713x based TV cards using OSS
This is deprecated in favor of the ALSA module
To compile this driver as a module, choose M here: the
module will be called saa7134-oss.
config VIDEO_SAA7134_DVB config VIDEO_SAA7134_DVB
tristate "DVB/ATSC Support for saa7134 based TV cards" tristate "DVB/ATSC Support for saa7134 based TV cards"
depends on VIDEO_SAA7134 && DVB_CORE depends on VIDEO_SAA7134 && DVB_CORE

View File

@ -4,8 +4,11 @@ saa7134-objs := saa7134-cards.o saa7134-core.o saa7134-i2c.o \
saa7134-video.o saa7134-input.o saa7134-video.o saa7134-input.o
obj-$(CONFIG_VIDEO_SAA7134) += saa7134.o saa7134-empress.o \ obj-$(CONFIG_VIDEO_SAA7134) += saa7134.o saa7134-empress.o \
saa6752hs.o saa7134-alsa.o \ saa6752hs.o
saa7134-oss.o
obj-$(CONFIG_VIDEO_SAA7134_ALSA) += saa7134-alsa.o
obj-$(CONFIG_VIDEO_SAA7134_OSS) += saa7134-oss.o
obj-$(CONFIG_VIDEO_SAA7134_DVB) += saa7134-dvb.o obj-$(CONFIG_VIDEO_SAA7134_DVB) += saa7134-dvb.o
EXTRA_CFLAGS += -I$(src)/.. EXTRA_CFLAGS += -I$(src)/..

View File

@ -60,7 +60,7 @@ module_param_array(index, int, NULL, 0444);
MODULE_PARM_DESC(index, "Index value for SAA7134 capture interface(s)."); MODULE_PARM_DESC(index, "Index value for SAA7134 capture interface(s).");
#define dprintk(fmt, arg...) if (debug) \ #define dprintk(fmt, arg...) if (debug) \
printk(KERN_DEBUG "%s/alsa: " fmt, dev->name, ## arg) printk(KERN_DEBUG "%s/alsa: " fmt, dev->name , ##arg)
@ -989,6 +989,14 @@ static int saa7134_alsa_init(void)
struct saa7134_dev *dev = NULL; struct saa7134_dev *dev = NULL;
struct list_head *list; struct list_head *list;
if (!dmasound_init && !dmasound_exit) {
dmasound_init = alsa_device_init;
dmasound_exit = alsa_device_exit;
} else {
printk(KERN_WARNING "saa7134 ALSA: can't load, DMA sound handler already assigned (probably to OSS)\n");
return -EBUSY;
}
printk(KERN_INFO "saa7134 ALSA driver for DMA sound loaded\n"); printk(KERN_INFO "saa7134 ALSA driver for DMA sound loaded\n");
list_for_each(list,&saa7134_devlist) { list_for_each(list,&saa7134_devlist) {
@ -1001,9 +1009,6 @@ static int saa7134_alsa_init(void)
} }
} }
dmasound_init = alsa_device_init;
dmasound_exit = alsa_device_exit;
if (dev == NULL) if (dev == NULL)
printk(KERN_INFO "saa7134 ALSA: no saa7134 cards found\n"); printk(KERN_INFO "saa7134 ALSA: no saa7134 cards found\n");
@ -1023,12 +1028,15 @@ static void saa7134_alsa_exit(void)
snd_card_free(snd_saa7134_cards[idx]); snd_card_free(snd_saa7134_cards[idx]);
} }
dmasound_init = NULL;
dmasound_exit = NULL;
printk(KERN_INFO "saa7134 ALSA driver for DMA sound unloaded\n"); printk(KERN_INFO "saa7134 ALSA driver for DMA sound unloaded\n");
return; return;
} }
module_init(saa7134_alsa_init); /* We initialize this late, to make sure the sound system is up and running */
late_initcall(saa7134_alsa_init);
module_exit(saa7134_alsa_exit); module_exit(saa7134_alsa_exit);
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_AUTHOR("Ricardo Cerqueira"); MODULE_AUTHOR("Ricardo Cerqueira");

View File

@ -959,8 +959,17 @@ static int saa7134_oss_init(void)
struct saa7134_dev *dev = NULL; struct saa7134_dev *dev = NULL;
struct list_head *list; struct list_head *list;
if (!dmasound_init && !dmasound_exit) {
dmasound_init = oss_device_init;
dmasound_exit = oss_device_exit;
} else {
printk(KERN_WARNING "saa7134 OSS: can't load, DMA sound handler already assigned (probably to ALSA)\n");
return -EBUSY;
}
printk(KERN_INFO "saa7134 OSS driver for DMA sound loaded\n"); printk(KERN_INFO "saa7134 OSS driver for DMA sound loaded\n");
list_for_each(list,&saa7134_devlist) { list_for_each(list,&saa7134_devlist) {
dev = list_entry(list, struct saa7134_dev, devlist); dev = list_entry(list, struct saa7134_dev, devlist);
if (dev->dmasound.priv_data == NULL) { if (dev->dmasound.priv_data == NULL) {
@ -974,9 +983,6 @@ static int saa7134_oss_init(void)
if (dev == NULL) if (dev == NULL)
printk(KERN_INFO "saa7134 OSS: no saa7134 cards found\n"); printk(KERN_INFO "saa7134 OSS: no saa7134 cards found\n");
dmasound_init = oss_device_init;
dmasound_exit = oss_device_exit;
return 0; return 0;
} }
@ -997,12 +1003,16 @@ static void saa7134_oss_exit(void)
} }
dmasound_init = NULL;
dmasound_exit = NULL;
printk(KERN_INFO "saa7134 OSS driver for DMA sound unloaded\n"); printk(KERN_INFO "saa7134 OSS driver for DMA sound unloaded\n");
return; return;
} }
module_init(saa7134_oss_init); /* We initialize this late, to make sure the sound system is up and running */
late_initcall(saa7134_oss_init);
module_exit(saa7134_oss_exit); module_exit(saa7134_oss_exit);
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_AUTHOR("Gerd Knorr <kraxel@bytesex.org> [SuSE Labs]"); MODULE_AUTHOR("Gerd Knorr <kraxel@bytesex.org> [SuSE Labs]");

View File

@ -206,7 +206,7 @@ hauppauge_tuner[] =
{ TUNER_ABSENT, "TCL 2002MI_3H"}, { TUNER_ABSENT, "TCL 2002MI_3H"},
{ TUNER_TCL_2002N, "TCL 2002N 5H"}, { TUNER_TCL_2002N, "TCL 2002N 5H"},
/* 100-109 */ /* 100-109 */
{ TUNER_ABSENT, "Philips FMD1216ME"}, { TUNER_PHILIPS_FMD1216ME_MK3, "Philips FMD1216ME"},
{ TUNER_TEA5767, "Philips TEA5768HL FM Radio"}, { TUNER_TEA5767, "Philips TEA5768HL FM Radio"},
{ TUNER_ABSENT, "Panasonic ENV57H12D5"}, { TUNER_ABSENT, "Panasonic ENV57H12D5"},
{ TUNER_PHILIPS_FM1236_MK3, "TCL MFNM05-4"}, { TUNER_PHILIPS_FM1236_MK3, "TCL MFNM05-4"},

View File

@ -359,7 +359,12 @@ static struct mmc_blk_data *mmc_blk_alloc(struct mmc_card *card)
md->block_bits = card->csd.read_blkbits; md->block_bits = card->csd.read_blkbits;
blk_queue_hardsect_size(md->queue.queue, 1 << md->block_bits); blk_queue_hardsect_size(md->queue.queue, 1 << md->block_bits);
set_capacity(md->disk, card->csd.capacity);
/*
* The CSD capacity field is in units of read_blkbits.
* set_capacity takes units of 512 bytes.
*/
set_capacity(md->disk, card->csd.capacity << (card->csd.read_blkbits - 9));
} }
out: out:
return md; return md;
@ -373,7 +378,7 @@ mmc_blk_set_blksize(struct mmc_blk_data *md, struct mmc_card *card)
mmc_card_claim_host(card); mmc_card_claim_host(card);
cmd.opcode = MMC_SET_BLOCKLEN; cmd.opcode = MMC_SET_BLOCKLEN;
cmd.arg = 1 << card->csd.read_blkbits; cmd.arg = 1 << md->block_bits;
cmd.flags = MMC_RSP_R1; cmd.flags = MMC_RSP_R1;
err = mmc_wait_for_cmd(card->host, &cmd, 5); err = mmc_wait_for_cmd(card->host, &cmd, 5);
mmc_card_release_host(card); mmc_card_release_host(card);
@ -412,10 +417,9 @@ static int mmc_blk_probe(struct mmc_card *card)
if (err) if (err)
goto out; goto out;
printk(KERN_INFO "%s: %s %s %dKiB %s\n", printk(KERN_INFO "%s: %s %s %luKiB %s\n",
md->disk->disk_name, mmc_card_id(card), mmc_card_name(card), md->disk->disk_name, mmc_card_id(card), mmc_card_name(card),
(card->csd.capacity << card->csd.read_blkbits) / 1024, get_capacity(md->disk) >> 1, mmc_blk_readonly(card)?"(ro)":"");
mmc_blk_readonly(card)?"(ro)":"");
mmc_set_drvdata(card, md); mmc_set_drvdata(card, md);
add_disk(md->disk); add_disk(md->disk);

View File

@ -62,7 +62,7 @@ config MTD_PHYSMAP_BANKWIDTH
config MTD_SUN_UFLASH config MTD_SUN_UFLASH
tristate "Sun Microsystems userflash support" tristate "Sun Microsystems userflash support"
depends on (SPARC32 || SPARC64) && MTD_CFI depends on SPARC && MTD_CFI
help help
This provides a 'mapping' driver which supports the way in This provides a 'mapping' driver which supports the way in
which user-programmable flash chips are connected on various which user-programmable flash chips are connected on various

View File

@ -10,7 +10,7 @@
* trademarks of NVIDIA Corporation in the United States and other * trademarks of NVIDIA Corporation in the United States and other
* countries. * countries.
* *
* Copyright (C) 2003,4 Manfred Spraul * Copyright (C) 2003,4,5 Manfred Spraul
* Copyright (C) 2004 Andrew de Quincey (wol support) * Copyright (C) 2004 Andrew de Quincey (wol support)
* Copyright (C) 2004 Carl-Daniel Hailfinger (invalid MAC handling, insane * Copyright (C) 2004 Carl-Daniel Hailfinger (invalid MAC handling, insane
* IRQ rate fixes, bigendian fixes, cleanups, verification) * IRQ rate fixes, bigendian fixes, cleanups, verification)
@ -100,6 +100,7 @@
* 0.45: 18 Sep 2005: Remove nv_stop/start_rx from every link check * 0.45: 18 Sep 2005: Remove nv_stop/start_rx from every link check
* 0.46: 20 Oct 2005: Add irq optimization modes. * 0.46: 20 Oct 2005: Add irq optimization modes.
* 0.47: 26 Oct 2005: Add phyaddr 0 in phy scan. * 0.47: 26 Oct 2005: Add phyaddr 0 in phy scan.
* 0.48: 24 Dec 2005: Disable TSO, bugfix for pci_map_single
* *
* Known bugs: * Known bugs:
* We suspect that on some hardware no TX done interrupts are generated. * We suspect that on some hardware no TX done interrupts are generated.
@ -111,7 +112,7 @@
* DEV_NEED_TIMERIRQ will not harm you on sane hardware, only generating a few * DEV_NEED_TIMERIRQ will not harm you on sane hardware, only generating a few
* superfluous timer interrupts from the nic. * superfluous timer interrupts from the nic.
*/ */
#define FORCEDETH_VERSION "0.47" #define FORCEDETH_VERSION "0.48"
#define DRV_NAME "forcedeth" #define DRV_NAME "forcedeth"
#include <linux/module.h> #include <linux/module.h>
@ -871,8 +872,8 @@ static int nv_alloc_rx(struct net_device *dev)
} else { } else {
skb = np->rx_skbuff[nr]; skb = np->rx_skbuff[nr];
} }
np->rx_dma[nr] = pci_map_single(np->pci_dev, skb->data, skb->len, np->rx_dma[nr] = pci_map_single(np->pci_dev, skb->data,
PCI_DMA_FROMDEVICE); skb->end-skb->data, PCI_DMA_FROMDEVICE);
if (np->desc_ver == DESC_VER_1 || np->desc_ver == DESC_VER_2) { if (np->desc_ver == DESC_VER_1 || np->desc_ver == DESC_VER_2) {
np->rx_ring.orig[nr].PacketBuffer = cpu_to_le32(np->rx_dma[nr]); np->rx_ring.orig[nr].PacketBuffer = cpu_to_le32(np->rx_dma[nr]);
wmb(); wmb();
@ -999,7 +1000,7 @@ static void nv_drain_rx(struct net_device *dev)
wmb(); wmb();
if (np->rx_skbuff[i]) { if (np->rx_skbuff[i]) {
pci_unmap_single(np->pci_dev, np->rx_dma[i], pci_unmap_single(np->pci_dev, np->rx_dma[i],
np->rx_skbuff[i]->len, np->rx_skbuff[i]->end-np->rx_skbuff[i]->data,
PCI_DMA_FROMDEVICE); PCI_DMA_FROMDEVICE);
dev_kfree_skb(np->rx_skbuff[i]); dev_kfree_skb(np->rx_skbuff[i]);
np->rx_skbuff[i] = NULL; np->rx_skbuff[i] = NULL;
@ -1334,7 +1335,7 @@ static void nv_rx_process(struct net_device *dev)
* the performance. * the performance.
*/ */
pci_unmap_single(np->pci_dev, np->rx_dma[i], pci_unmap_single(np->pci_dev, np->rx_dma[i],
np->rx_skbuff[i]->len, np->rx_skbuff[i]->end-np->rx_skbuff[i]->data,
PCI_DMA_FROMDEVICE); PCI_DMA_FROMDEVICE);
{ {
@ -2455,7 +2456,7 @@ static int __devinit nv_probe(struct pci_dev *pci_dev, const struct pci_device_i
np->txrxctl_bits |= NVREG_TXRXCTL_RXCHECK; np->txrxctl_bits |= NVREG_TXRXCTL_RXCHECK;
dev->features |= NETIF_F_HW_CSUM | NETIF_F_SG; dev->features |= NETIF_F_HW_CSUM | NETIF_F_SG;
#ifdef NETIF_F_TSO #ifdef NETIF_F_TSO
dev->features |= NETIF_F_TSO; /* disabled dev->features |= NETIF_F_TSO; */
#endif #endif
} }

View File

@ -38,6 +38,10 @@
#include <asm/irq.h> #include <asm/irq.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
MODULE_DESCRIPTION("PHY library");
MODULE_AUTHOR("Andy Fleming");
MODULE_LICENSE("GPL");
static struct phy_driver genphy_driver; static struct phy_driver genphy_driver;
extern int mdio_bus_init(void); extern int mdio_bus_init(void);
extern void mdio_bus_exit(void); extern void mdio_bus_exit(void);

View File

@ -524,9 +524,6 @@ static int get_filter(void __user *arg, struct sock_filter **p)
if (copy_from_user(&uprog, arg, sizeof(uprog))) if (copy_from_user(&uprog, arg, sizeof(uprog)))
return -EFAULT; return -EFAULT;
if (uprog.len > BPF_MAXINSNS)
return -EINVAL;
if (!uprog.len) { if (!uprog.len) {
*p = NULL; *p = NULL;
return 0; return 0;

View File

@ -2907,7 +2907,7 @@ static int __devinit gem_get_device_address(struct gem *gp)
return 0; return 0;
} }
static void __devexit gem_remove_one(struct pci_dev *pdev) static void gem_remove_one(struct pci_dev *pdev)
{ {
struct net_device *dev = pci_get_drvdata(pdev); struct net_device *dev = pci_get_drvdata(pdev);
@ -3181,7 +3181,7 @@ static struct pci_driver gem_driver = {
.name = GEM_MODULE_NAME, .name = GEM_MODULE_NAME,
.id_table = gem_pci_tbl, .id_table = gem_pci_tbl,
.probe = gem_init_one, .probe = gem_init_one,
.remove = __devexit_p(gem_remove_one), .remove = gem_remove_one,
#ifdef CONFIG_PM #ifdef CONFIG_PM
.suspend = gem_suspend, .suspend = gem_suspend,
.resume = gem_resume, .resume = gem_resume,

View File

@ -68,8 +68,8 @@
#define DRV_MODULE_NAME "tg3" #define DRV_MODULE_NAME "tg3"
#define PFX DRV_MODULE_NAME ": " #define PFX DRV_MODULE_NAME ": "
#define DRV_MODULE_VERSION "3.45" #define DRV_MODULE_VERSION "3.47"
#define DRV_MODULE_RELDATE "Dec 13, 2005" #define DRV_MODULE_RELDATE "Dec 28, 2005"
#define TG3_DEF_MAC_MODE 0 #define TG3_DEF_MAC_MODE 0
#define TG3_DEF_RX_MODE 0 #define TG3_DEF_RX_MODE 0
@ -341,6 +341,16 @@ static struct {
{ "interrupt test (offline)" }, { "interrupt test (offline)" },
}; };
static void tg3_write32(struct tg3 *tp, u32 off, u32 val)
{
writel(val, tp->regs + off);
}
static u32 tg3_read32(struct tg3 *tp, u32 off)
{
return (readl(tp->regs + off));
}
static void tg3_write_indirect_reg32(struct tg3 *tp, u32 off, u32 val) static void tg3_write_indirect_reg32(struct tg3 *tp, u32 off, u32 val)
{ {
unsigned long flags; unsigned long flags;
@ -411,13 +421,29 @@ static u32 tg3_read_indirect_mbox(struct tg3 *tp, u32 off)
return val; return val;
} }
static void _tw32_flush(struct tg3 *tp, u32 off, u32 val) /* usec_wait specifies the wait time in usec when writing to certain registers
* where it is unsafe to read back the register without some delay.
* GRC_LOCAL_CTRL is one example if the GPIOs are toggled to switch power.
* TG3PCI_CLOCK_CTRL is another example if the clock frequencies are changed.
*/
static void _tw32_flush(struct tg3 *tp, u32 off, u32 val, u32 usec_wait)
{ {
tp->write32(tp, off, val); if ((tp->tg3_flags & TG3_FLAG_PCIX_TARGET_HWBUG) ||
if (!(tp->tg3_flags & TG3_FLAG_PCIX_TARGET_HWBUG) && (tp->tg3_flags2 & TG3_FLG2_ICH_WORKAROUND))
!(tp->tg3_flags & TG3_FLAG_5701_REG_WRITE_BUG) && /* Non-posted methods */
!(tp->tg3_flags2 & TG3_FLG2_ICH_WORKAROUND)) tp->write32(tp, off, val);
tp->read32(tp, off); /* flush */ else {
/* Posted method */
tg3_write32(tp, off, val);
if (usec_wait)
udelay(usec_wait);
tp->read32(tp, off);
}
/* Wait again after the read for the posted method to guarantee that
* the wait time is met.
*/
if (usec_wait)
udelay(usec_wait);
} }
static inline void tw32_mailbox_flush(struct tg3 *tp, u32 off, u32 val) static inline void tw32_mailbox_flush(struct tg3 *tp, u32 off, u32 val)
@ -438,16 +464,6 @@ static void tg3_write32_tx_mbox(struct tg3 *tp, u32 off, u32 val)
readl(mbox); readl(mbox);
} }
static void tg3_write32(struct tg3 *tp, u32 off, u32 val)
{
writel(val, tp->regs + off);
}
static u32 tg3_read32(struct tg3 *tp, u32 off)
{
return (readl(tp->regs + off));
}
#define tw32_mailbox(reg, val) tp->write32_mbox(tp, reg, val) #define tw32_mailbox(reg, val) tp->write32_mbox(tp, reg, val)
#define tw32_mailbox_f(reg, val) tw32_mailbox_flush(tp, (reg), (val)) #define tw32_mailbox_f(reg, val) tw32_mailbox_flush(tp, (reg), (val))
#define tw32_rx_mbox(reg, val) tp->write32_rx_mbox(tp, reg, val) #define tw32_rx_mbox(reg, val) tp->write32_rx_mbox(tp, reg, val)
@ -455,7 +471,8 @@ static u32 tg3_read32(struct tg3 *tp, u32 off)
#define tr32_mailbox(reg) tp->read32_mbox(tp, reg) #define tr32_mailbox(reg) tp->read32_mbox(tp, reg)
#define tw32(reg,val) tp->write32(tp, reg, val) #define tw32(reg,val) tp->write32(tp, reg, val)
#define tw32_f(reg,val) _tw32_flush(tp,(reg),(val)) #define tw32_f(reg,val) _tw32_flush(tp,(reg),(val), 0)
#define tw32_wait_f(reg,val,us) _tw32_flush(tp,(reg),(val), (us))
#define tr32(reg) tp->read32(tp, reg) #define tr32(reg) tp->read32(tp, reg)
static void tg3_write_mem(struct tg3 *tp, u32 off, u32 val) static void tg3_write_mem(struct tg3 *tp, u32 off, u32 val)
@ -595,21 +612,19 @@ static void tg3_switch_clocks(struct tg3 *tp)
if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) { if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) {
if (orig_clock_ctrl & CLOCK_CTRL_625_CORE) { if (orig_clock_ctrl & CLOCK_CTRL_625_CORE) {
tw32_f(TG3PCI_CLOCK_CTRL, tw32_wait_f(TG3PCI_CLOCK_CTRL,
clock_ctrl | CLOCK_CTRL_625_CORE); clock_ctrl | CLOCK_CTRL_625_CORE, 40);
udelay(40);
} }
} else if ((orig_clock_ctrl & CLOCK_CTRL_44MHZ_CORE) != 0) { } else if ((orig_clock_ctrl & CLOCK_CTRL_44MHZ_CORE) != 0) {
tw32_f(TG3PCI_CLOCK_CTRL, tw32_wait_f(TG3PCI_CLOCK_CTRL,
clock_ctrl | clock_ctrl |
(CLOCK_CTRL_44MHZ_CORE | CLOCK_CTRL_ALTCLK)); (CLOCK_CTRL_44MHZ_CORE | CLOCK_CTRL_ALTCLK),
udelay(40); 40);
tw32_f(TG3PCI_CLOCK_CTRL, tw32_wait_f(TG3PCI_CLOCK_CTRL,
clock_ctrl | (CLOCK_CTRL_ALTCLK)); clock_ctrl | (CLOCK_CTRL_ALTCLK),
udelay(40); 40);
} }
tw32_f(TG3PCI_CLOCK_CTRL, clock_ctrl); tw32_wait_f(TG3PCI_CLOCK_CTRL, clock_ctrl, 40);
udelay(40);
} }
#define PHY_BUSY_LOOPS 5000 #define PHY_BUSY_LOOPS 5000
@ -1017,12 +1032,15 @@ static void tg3_frob_aux_power(struct tg3 *tp)
if ((tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT) != 0) if ((tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT) != 0)
return; return;
if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) { if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) ||
tp_peer = pci_get_drvdata(tp->pdev_peer); (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714)) {
if (!tp_peer) struct net_device *dev_peer;
BUG();
}
dev_peer = pci_get_drvdata(tp->pdev_peer);
if (!dev_peer)
BUG();
tp_peer = netdev_priv(dev_peer);
}
if ((tp->tg3_flags & TG3_FLAG_WOL_ENABLE) != 0 || if ((tp->tg3_flags & TG3_FLAG_WOL_ENABLE) != 0 ||
(tp->tg3_flags & TG3_FLAG_ENABLE_ASF) != 0 || (tp->tg3_flags & TG3_FLAG_ENABLE_ASF) != 0 ||
@ -1030,26 +1048,34 @@ static void tg3_frob_aux_power(struct tg3 *tp)
(tp_peer->tg3_flags & TG3_FLAG_ENABLE_ASF) != 0) { (tp_peer->tg3_flags & TG3_FLAG_ENABLE_ASF) != 0) {
if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) { GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl | tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
(GRC_LCLCTRL_GPIO_OE0 | (GRC_LCLCTRL_GPIO_OE0 |
GRC_LCLCTRL_GPIO_OE1 | GRC_LCLCTRL_GPIO_OE1 |
GRC_LCLCTRL_GPIO_OE2 | GRC_LCLCTRL_GPIO_OE2 |
GRC_LCLCTRL_GPIO_OUTPUT0 | GRC_LCLCTRL_GPIO_OUTPUT0 |
GRC_LCLCTRL_GPIO_OUTPUT1)); GRC_LCLCTRL_GPIO_OUTPUT1),
udelay(100); 100);
} else { } else {
u32 no_gpio2; u32 no_gpio2;
u32 grc_local_ctrl; u32 grc_local_ctrl = 0;
if (tp_peer != tp && if (tp_peer != tp &&
(tp_peer->tg3_flags & TG3_FLAG_INIT_COMPLETE) != 0) (tp_peer->tg3_flags & TG3_FLAG_INIT_COMPLETE) != 0)
return; return;
/* Workaround to prevent overdrawing Amps. */
if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
ASIC_REV_5714) {
grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3;
tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
grc_local_ctrl, 100);
}
/* On 5753 and variants, GPIO2 cannot be used. */ /* On 5753 and variants, GPIO2 cannot be used. */
no_gpio2 = tp->nic_sram_data_cfg & no_gpio2 = tp->nic_sram_data_cfg &
NIC_SRAM_DATA_CFG_NO_GPIO2; NIC_SRAM_DATA_CFG_NO_GPIO2;
grc_local_ctrl = GRC_LCLCTRL_GPIO_OE0 | grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 |
GRC_LCLCTRL_GPIO_OE1 | GRC_LCLCTRL_GPIO_OE1 |
GRC_LCLCTRL_GPIO_OE2 | GRC_LCLCTRL_GPIO_OE2 |
GRC_LCLCTRL_GPIO_OUTPUT1 | GRC_LCLCTRL_GPIO_OUTPUT1 |
@ -1058,21 +1084,18 @@ static void tg3_frob_aux_power(struct tg3 *tp)
grc_local_ctrl &= ~(GRC_LCLCTRL_GPIO_OE2 | grc_local_ctrl &= ~(GRC_LCLCTRL_GPIO_OE2 |
GRC_LCLCTRL_GPIO_OUTPUT2); GRC_LCLCTRL_GPIO_OUTPUT2);
} }
tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl | tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
grc_local_ctrl); grc_local_ctrl, 100);
udelay(100);
grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT0; grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT0;
tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl | tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
grc_local_ctrl); grc_local_ctrl, 100);
udelay(100);
if (!no_gpio2) { if (!no_gpio2) {
grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT2; grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT2;
tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl | tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
grc_local_ctrl); grc_local_ctrl, 100);
udelay(100);
} }
} }
} else { } else {
@ -1082,19 +1105,16 @@ static void tg3_frob_aux_power(struct tg3 *tp)
(tp_peer->tg3_flags & TG3_FLAG_INIT_COMPLETE) != 0) (tp_peer->tg3_flags & TG3_FLAG_INIT_COMPLETE) != 0)
return; return;
tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl | tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
(GRC_LCLCTRL_GPIO_OE1 | (GRC_LCLCTRL_GPIO_OE1 |
GRC_LCLCTRL_GPIO_OUTPUT1)); GRC_LCLCTRL_GPIO_OUTPUT1), 100);
udelay(100);
tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl | tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
(GRC_LCLCTRL_GPIO_OE1)); GRC_LCLCTRL_GPIO_OE1, 100);
udelay(100);
tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl | tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
(GRC_LCLCTRL_GPIO_OE1 | (GRC_LCLCTRL_GPIO_OE1 |
GRC_LCLCTRL_GPIO_OUTPUT1)); GRC_LCLCTRL_GPIO_OUTPUT1), 100);
udelay(100);
} }
} }
} }
@ -1137,10 +1157,8 @@ static int tg3_set_power_state(struct tg3 *tp, int state)
udelay(100); /* Delay after power state change */ udelay(100); /* Delay after power state change */
/* Switch out of Vaux if it is not a LOM */ /* Switch out of Vaux if it is not a LOM */
if (!(tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT)) { if (!(tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT))
tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl); tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl, 100);
udelay(100);
}
return 0; return 0;
@ -1239,10 +1257,8 @@ static int tg3_set_power_state(struct tg3 *tp, int state)
base_val |= (CLOCK_CTRL_RXCLK_DISABLE | base_val |= (CLOCK_CTRL_RXCLK_DISABLE |
CLOCK_CTRL_TXCLK_DISABLE); CLOCK_CTRL_TXCLK_DISABLE);
tw32_f(TG3PCI_CLOCK_CTRL, base_val | tw32_wait_f(TG3PCI_CLOCK_CTRL, base_val | CLOCK_CTRL_ALTCLK |
CLOCK_CTRL_ALTCLK | CLOCK_CTRL_PWRDOWN_PLL133, 40);
CLOCK_CTRL_PWRDOWN_PLL133);
udelay(40);
} else if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS) { } else if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS) {
/* do nothing */ /* do nothing */
} else if (!((tp->tg3_flags2 & TG3_FLG2_5750_PLUS) && } else if (!((tp->tg3_flags2 & TG3_FLG2_5750_PLUS) &&
@ -1263,11 +1279,11 @@ static int tg3_set_power_state(struct tg3 *tp, int state)
newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE; newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE;
} }
tw32_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits1); tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits1,
udelay(40); 40);
tw32_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits2); tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits2,
udelay(40); 40);
if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) { if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
u32 newbits3; u32 newbits3;
@ -1281,9 +1297,8 @@ static int tg3_set_power_state(struct tg3 *tp, int state)
newbits3 = CLOCK_CTRL_44MHZ_CORE; newbits3 = CLOCK_CTRL_44MHZ_CORE;
} }
tw32_f(TG3PCI_CLOCK_CTRL, tw32_wait_f(TG3PCI_CLOCK_CTRL,
tp->pci_clock_ctrl | newbits3); tp->pci_clock_ctrl | newbits3, 40);
udelay(40);
} }
} }
@ -1294,7 +1309,8 @@ static int tg3_set_power_state(struct tg3 *tp, int state)
tg3_writephy(tp, MII_TG3_EXT_CTRL, tg3_writephy(tp, MII_TG3_EXT_CTRL,
MII_TG3_EXT_CTRL_FORCE_LED_OFF); MII_TG3_EXT_CTRL_FORCE_LED_OFF);
tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x01b2); tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x01b2);
tg3_writephy(tp, MII_BMCR, BMCR_PDOWN); if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700)
tg3_writephy(tp, MII_BMCR, BMCR_PDOWN);
} }
} }
@ -7135,8 +7151,13 @@ do { p = (u32 *)(orig_p + (reg)); \
GET_REG32_LOOP(BUFMGR_MODE, 0x58); GET_REG32_LOOP(BUFMGR_MODE, 0x58);
GET_REG32_LOOP(RDMAC_MODE, 0x08); GET_REG32_LOOP(RDMAC_MODE, 0x08);
GET_REG32_LOOP(WDMAC_MODE, 0x08); GET_REG32_LOOP(WDMAC_MODE, 0x08);
GET_REG32_LOOP(RX_CPU_BASE, 0x280); GET_REG32_1(RX_CPU_MODE);
GET_REG32_LOOP(TX_CPU_BASE, 0x280); GET_REG32_1(RX_CPU_STATE);
GET_REG32_1(RX_CPU_PGMCTR);
GET_REG32_1(RX_CPU_HWBKPT);
GET_REG32_1(TX_CPU_MODE);
GET_REG32_1(TX_CPU_STATE);
GET_REG32_1(TX_CPU_PGMCTR);
GET_REG32_LOOP(GRCMBOX_INTERRUPT_0, 0x110); GET_REG32_LOOP(GRCMBOX_INTERRUPT_0, 0x110);
GET_REG32_LOOP(FTQ_RESET, 0x120); GET_REG32_LOOP(FTQ_RESET, 0x120);
GET_REG32_LOOP(MSGINT_MODE, 0x0c); GET_REG32_LOOP(MSGINT_MODE, 0x0c);
@ -7959,13 +7980,12 @@ static int tg3_test_memory(struct tg3 *tp)
u32 offset; u32 offset;
u32 len; u32 len;
} mem_tbl_570x[] = { } mem_tbl_570x[] = {
{ 0x00000000, 0x01000}, { 0x00000000, 0x00b50},
{ 0x00002000, 0x1c000}, { 0x00002000, 0x1c000},
{ 0xffffffff, 0x00000} { 0xffffffff, 0x00000}
}, mem_tbl_5705[] = { }, mem_tbl_5705[] = {
{ 0x00000100, 0x0000c}, { 0x00000100, 0x0000c},
{ 0x00000200, 0x00008}, { 0x00000200, 0x00008},
{ 0x00000b50, 0x00400},
{ 0x00004000, 0x00800}, { 0x00004000, 0x00800},
{ 0x00006000, 0x01000}, { 0x00006000, 0x01000},
{ 0x00008000, 0x02000}, { 0x00008000, 0x02000},
@ -10466,7 +10486,7 @@ static char * __devinit tg3_bus_string(struct tg3 *tp, char *str)
return str; return str;
} }
static struct pci_dev * __devinit tg3_find_5704_peer(struct tg3 *tp) static struct pci_dev * __devinit tg3_find_peer(struct tg3 *tp)
{ {
struct pci_dev *peer; struct pci_dev *peer;
unsigned int func, devnr = tp->pdev->devfn & ~7; unsigned int func, devnr = tp->pdev->devfn & ~7;
@ -10719,8 +10739,9 @@ static int __devinit tg3_init_one(struct pci_dev *pdev,
tp->rx_pending = 63; tp->rx_pending = 63;
} }
if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) ||
tp->pdev_peer = tg3_find_5704_peer(tp); (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714))
tp->pdev_peer = tg3_find_peer(tp);
err = tg3_get_device_address(tp); err = tg3_get_device_address(tp);
if (err) { if (err) {

View File

@ -1124,7 +1124,14 @@
/* 0x280 --> 0x400 unused */ /* 0x280 --> 0x400 unused */
#define RX_CPU_BASE 0x00005000 #define RX_CPU_BASE 0x00005000
#define RX_CPU_MODE 0x00005000
#define RX_CPU_STATE 0x00005004
#define RX_CPU_PGMCTR 0x0000501c
#define RX_CPU_HWBKPT 0x00005034
#define TX_CPU_BASE 0x00005400 #define TX_CPU_BASE 0x00005400
#define TX_CPU_MODE 0x00005400
#define TX_CPU_STATE 0x00005404
#define TX_CPU_PGMCTR 0x0000541c
/* Mailboxes */ /* Mailboxes */
#define GRCMBOX_INTERRUPT_0 0x00005800 /* 64-bit */ #define GRCMBOX_INTERRUPT_0 0x00005800 /* 64-bit */

View File

@ -1,6 +1,8 @@
/* orinoco_nortel.c /* orinoco_nortel.c
* *
* Driver for Prism II devices which would usually be driven by orinoco_cs, * Driver for Prism II devices which would usually be driven by orinoco_cs,
* but are connected to the PCI bus by a PCI-to-PCMCIA adapter used in
* Nortel emobility, Symbol LA-4113 and Symbol LA-4123.
* but are connected to the PCI bus by a Nortel PCI-PCMCIA-Adapter. * but are connected to the PCI bus by a Nortel PCI-PCMCIA-Adapter.
* *
* Copyright (C) 2002 Tobias Hoffmann * Copyright (C) 2002 Tobias Hoffmann
@ -165,7 +167,7 @@ static int nortel_pci_init_one(struct pci_dev *pdev,
goto fail_resources; goto fail_resources;
} }
iomem = pci_iomap(pdev, 3, 0); iomem = pci_iomap(pdev, 2, 0);
if (!iomem) { if (!iomem) {
err = -ENOMEM; err = -ENOMEM;
goto fail_map_io; goto fail_map_io;
@ -265,6 +267,8 @@ static void __devexit nortel_pci_remove_one(struct pci_dev *pdev)
static struct pci_device_id nortel_pci_id_table[] = { static struct pci_device_id nortel_pci_id_table[] = {
/* Nortel emobility PCI */ /* Nortel emobility PCI */
{0x126c, 0x8030, PCI_ANY_ID, PCI_ANY_ID,}, {0x126c, 0x8030, PCI_ANY_ID, PCI_ANY_ID,},
/* Symbol LA-4123 PCI */
{0x1562, 0x0001, PCI_ANY_ID, PCI_ANY_ID,},
{0,}, {0,},
}; };

View File

@ -62,7 +62,8 @@ qeth_eddp_free_context(struct qeth_eddp_context *ctx)
for (i = 0; i < ctx->num_pages; ++i) for (i = 0; i < ctx->num_pages; ++i)
free_page((unsigned long)ctx->pages[i]); free_page((unsigned long)ctx->pages[i]);
kfree(ctx->pages); kfree(ctx->pages);
kfree(ctx->elements); if (ctx->elements != NULL)
kfree(ctx->elements);
kfree(ctx); kfree(ctx);
} }

View File

@ -1,6 +1,6 @@
/* /*
* *
* linux/drivers/s390/net/qeth_main.c ($Revision: 1.242 $) * linux/drivers/s390/net/qeth_main.c ($Revision: 1.251 $)
* *
* Linux on zSeries OSA Express and HiperSockets support * Linux on zSeries OSA Express and HiperSockets support
* *
@ -12,7 +12,7 @@
* Frank Pavlic (fpavlic@de.ibm.com) and * Frank Pavlic (fpavlic@de.ibm.com) and
* Thomas Spatzier <tspat@de.ibm.com> * Thomas Spatzier <tspat@de.ibm.com>
* *
* $Revision: 1.242 $ $Date: 2005/05/04 20:19:18 $ * $Revision: 1.251 $ $Date: 2005/05/04 20:19:18 $
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -72,7 +72,7 @@
#include "qeth_eddp.h" #include "qeth_eddp.h"
#include "qeth_tso.h" #include "qeth_tso.h"
#define VERSION_QETH_C "$Revision: 1.242 $" #define VERSION_QETH_C "$Revision: 1.251 $"
static const char *version = "qeth S/390 OSA-Express driver"; static const char *version = "qeth S/390 OSA-Express driver";
/** /**
@ -518,7 +518,8 @@ __qeth_set_offline(struct ccwgroup_device *cgdev, int recovery_mode)
QETH_DBF_TEXT(setup, 3, "setoffl"); QETH_DBF_TEXT(setup, 3, "setoffl");
QETH_DBF_HEX(setup, 3, &card, sizeof(void *)); QETH_DBF_HEX(setup, 3, &card, sizeof(void *));
netif_carrier_off(card->dev);
recover_flag = card->state; recover_flag = card->state;
if (qeth_stop_card(card, recovery_mode) == -ERESTARTSYS){ if (qeth_stop_card(card, recovery_mode) == -ERESTARTSYS){
PRINT_WARN("Stopping card %s interrupted by user!\n", PRINT_WARN("Stopping card %s interrupted by user!\n",
@ -1020,7 +1021,6 @@ void
qeth_schedule_recovery(struct qeth_card *card) qeth_schedule_recovery(struct qeth_card *card)
{ {
QETH_DBF_TEXT(trace,2,"startrec"); QETH_DBF_TEXT(trace,2,"startrec");
if (qeth_set_thread_start_bit(card, QETH_RECOVER_THREAD) == 0) if (qeth_set_thread_start_bit(card, QETH_RECOVER_THREAD) == 0)
schedule_work(&card->kernel_thread_starter); schedule_work(&card->kernel_thread_starter);
} }
@ -1710,7 +1710,6 @@ qeth_check_ipa_data(struct qeth_card *card, struct qeth_cmd_buffer *iob)
"IP address reset.\n", "IP address reset.\n",
QETH_CARD_IFNAME(card), QETH_CARD_IFNAME(card),
card->info.chpid); card->info.chpid);
netif_carrier_on(card->dev);
qeth_schedule_recovery(card); qeth_schedule_recovery(card);
return NULL; return NULL;
case IPA_CMD_MODCCID: case IPA_CMD_MODCCID:
@ -1959,7 +1958,7 @@ qeth_osn_send_ipa_cmd(struct qeth_card *card, struct qeth_cmd_buffer *iob,
{ {
u16 s1, s2; u16 s1, s2;
QETH_DBF_TEXT(trace,4,"osndipa"); QETH_DBF_TEXT(trace,4,"osndipa");
qeth_prepare_ipa_cmd(card, iob, QETH_PROT_OSN2); qeth_prepare_ipa_cmd(card, iob, QETH_PROT_OSN2);
s1 = (u16)(IPA_PDU_HEADER_SIZE + data_len); s1 = (u16)(IPA_PDU_HEADER_SIZE + data_len);
@ -2203,24 +2202,21 @@ qeth_ulp_setup(struct qeth_card *card)
} }
static inline int static inline int
qeth_check_for_inbound_error(struct qeth_qdio_buffer *buf, qeth_check_qdio_errors(struct qdio_buffer *buf, unsigned int qdio_error,
unsigned int qdio_error, unsigned int siga_error, const char *dbftext)
unsigned int siga_error)
{ {
int rc = 0;
if (qdio_error || siga_error) { if (qdio_error || siga_error) {
QETH_DBF_TEXT(trace, 2, "qdinerr"); QETH_DBF_TEXT(trace, 2, dbftext);
QETH_DBF_TEXT(qerr, 2, "qdinerr"); QETH_DBF_TEXT(qerr, 2, dbftext);
QETH_DBF_TEXT_(qerr, 2, " F15=%02X", QETH_DBF_TEXT_(qerr, 2, " F15=%02X",
buf->buffer->element[15].flags & 0xff); buf->element[15].flags & 0xff);
QETH_DBF_TEXT_(qerr, 2, " F14=%02X", QETH_DBF_TEXT_(qerr, 2, " F14=%02X",
buf->buffer->element[14].flags & 0xff); buf->element[14].flags & 0xff);
QETH_DBF_TEXT_(qerr, 2, " qerr=%X", qdio_error); QETH_DBF_TEXT_(qerr, 2, " qerr=%X", qdio_error);
QETH_DBF_TEXT_(qerr, 2, " serr=%X", siga_error); QETH_DBF_TEXT_(qerr, 2, " serr=%X", siga_error);
rc = 1; return 1;
} }
return rc; return 0;
} }
static inline struct sk_buff * static inline struct sk_buff *
@ -2769,8 +2765,9 @@ qeth_qdio_input_handler(struct ccw_device * ccwdev, unsigned int status,
for (i = first_element; i < (first_element + count); ++i) { for (i = first_element; i < (first_element + count); ++i) {
index = i % QDIO_MAX_BUFFERS_PER_Q; index = i % QDIO_MAX_BUFFERS_PER_Q;
buffer = &card->qdio.in_q->bufs[index]; buffer = &card->qdio.in_q->bufs[index];
if (!((status == QDIO_STATUS_LOOK_FOR_ERROR) && if (!((status & QDIO_STATUS_LOOK_FOR_ERROR) &&
qeth_check_for_inbound_error(buffer, qdio_err, siga_err))) qeth_check_qdio_errors(buffer->buffer,
qdio_err, siga_err,"qinerr")))
qeth_process_inbound_buffer(card, buffer, index); qeth_process_inbound_buffer(card, buffer, index);
/* clear buffer and give back to hardware */ /* clear buffer and give back to hardware */
qeth_put_buffer_pool_entry(card, buffer->pool_entry); qeth_put_buffer_pool_entry(card, buffer->pool_entry);
@ -2785,12 +2782,13 @@ qeth_qdio_input_handler(struct ccw_device * ccwdev, unsigned int status,
static inline int static inline int
qeth_handle_send_error(struct qeth_card *card, qeth_handle_send_error(struct qeth_card *card,
struct qeth_qdio_out_buffer *buffer, struct qeth_qdio_out_buffer *buffer,
int qdio_err, int siga_err) unsigned int qdio_err, unsigned int siga_err)
{ {
int sbalf15 = buffer->buffer->element[15].flags & 0xff; int sbalf15 = buffer->buffer->element[15].flags & 0xff;
int cc = siga_err & 3; int cc = siga_err & 3;
QETH_DBF_TEXT(trace, 6, "hdsnderr"); QETH_DBF_TEXT(trace, 6, "hdsnderr");
qeth_check_qdio_errors(buffer->buffer, qdio_err, siga_err, "qouterr");
switch (cc) { switch (cc) {
case 0: case 0:
if (qdio_err){ if (qdio_err){
@ -3047,7 +3045,8 @@ qeth_qdio_output_handler(struct ccw_device * ccwdev, unsigned int status,
for(i = first_element; i < (first_element + count); ++i){ for(i = first_element; i < (first_element + count); ++i){
buffer = &queue->bufs[i % QDIO_MAX_BUFFERS_PER_Q]; buffer = &queue->bufs[i % QDIO_MAX_BUFFERS_PER_Q];
/*we only handle the KICK_IT error by doing a recovery */ /*we only handle the KICK_IT error by doing a recovery */
if (qeth_handle_send_error(card, buffer, qdio_error, siga_error) if (qeth_handle_send_error(card, buffer,
qdio_error, siga_error)
== QETH_SEND_ERROR_KICK_IT){ == QETH_SEND_ERROR_KICK_IT){
netif_stop_queue(card->dev); netif_stop_queue(card->dev);
qeth_schedule_recovery(card); qeth_schedule_recovery(card);
@ -3289,7 +3288,6 @@ qeth_init_qdio_info(struct qeth_card *card)
card->qdio.in_buf_pool.buf_count = card->qdio.init_pool.buf_count; card->qdio.in_buf_pool.buf_count = card->qdio.init_pool.buf_count;
INIT_LIST_HEAD(&card->qdio.in_buf_pool.entry_list); INIT_LIST_HEAD(&card->qdio.in_buf_pool.entry_list);
INIT_LIST_HEAD(&card->qdio.init_pool.entry_list); INIT_LIST_HEAD(&card->qdio.init_pool.entry_list);
/* outbound */
} }
static int static int
@ -3731,6 +3729,9 @@ qeth_verify_vlan_dev(struct net_device *dev, struct qeth_card *card)
break; break;
} }
} }
if (rc && !(VLAN_DEV_INFO(dev)->real_dev->priv == (void *)card))
return 0;
#endif #endif
return rc; return rc;
} }
@ -3807,10 +3808,8 @@ qeth_open(struct net_device *dev)
card->data.state = CH_STATE_UP; card->data.state = CH_STATE_UP;
card->state = CARD_STATE_UP; card->state = CARD_STATE_UP;
if (!card->lan_online){ if (!card->lan_online && netif_carrier_ok(dev))
if (netif_carrier_ok(dev)) netif_carrier_off(dev);
netif_carrier_off(dev);
}
return 0; return 0;
} }
@ -5870,10 +5869,8 @@ qeth_add_multicast_ipv6(struct qeth_card *card)
struct inet6_dev *in6_dev; struct inet6_dev *in6_dev;
QETH_DBF_TEXT(trace,4,"chkmcv6"); QETH_DBF_TEXT(trace,4,"chkmcv6");
if ((card->options.layer2 == 0) && if (!qeth_is_supported(card, IPA_IPV6))
(!qeth_is_supported(card, IPA_IPV6)) )
return ; return ;
in6_dev = in6_dev_get(card->dev); in6_dev = in6_dev_get(card->dev);
if (in6_dev == NULL) if (in6_dev == NULL)
return; return;
@ -7936,8 +7933,8 @@ __qeth_set_online(struct ccwgroup_device *gdev, int recovery_mode)
QETH_DBF_TEXT_(setup, 2, "6err%d", rc); QETH_DBF_TEXT_(setup, 2, "6err%d", rc);
goto out_remove; goto out_remove;
} }
/*maybe it was set offline without ifconfig down netif_carrier_on(card->dev);
* we can also use this state for recovery purposes*/
qeth_set_allowed_threads(card, 0xffffffff, 0); qeth_set_allowed_threads(card, 0xffffffff, 0);
if (recover_flag == CARD_STATE_RECOVER) if (recover_flag == CARD_STATE_RECOVER)
qeth_start_again(card, recovery_mode); qeth_start_again(card, recovery_mode);

View File

@ -11,7 +11,7 @@
#include <asm/cio.h> #include <asm/cio.h>
#include "qeth_mpc.h" #include "qeth_mpc.h"
const char *VERSION_QETH_MPC_C = "$Revision: 1.12 $"; const char *VERSION_QETH_MPC_C = "$Revision: 1.13 $";
unsigned char IDX_ACTIVATE_READ[]={ unsigned char IDX_ACTIVATE_READ[]={
0x00,0x00,0x80,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x80,0x00, 0x00,0x00,0x00,0x00,

View File

@ -14,14 +14,14 @@
#include <asm/qeth.h> #include <asm/qeth.h>
#define VERSION_QETH_MPC_H "$Revision: 1.44 $" #define VERSION_QETH_MPC_H "$Revision: 1.46 $"
extern const char *VERSION_QETH_MPC_C; extern const char *VERSION_QETH_MPC_C;
#define IPA_PDU_HEADER_SIZE 0x40 #define IPA_PDU_HEADER_SIZE 0x40
#define QETH_IPA_PDU_LEN_TOTAL(buffer) (buffer+0x0e) #define QETH_IPA_PDU_LEN_TOTAL(buffer) (buffer+0x0e)
#define QETH_IPA_PDU_LEN_PDU1(buffer) (buffer+0x26) #define QETH_IPA_PDU_LEN_PDU1(buffer) (buffer+0x26)
#define QETH_IPA_PDU_LEN_PDU2(buffer) (buffer+0x2a) #define QETH_IPA_PDU_LEN_PDU2(buffer) (buffer+0x29)
#define QETH_IPA_PDU_LEN_PDU3(buffer) (buffer+0x3a) #define QETH_IPA_PDU_LEN_PDU3(buffer) (buffer+0x3a)
extern unsigned char IPA_PDU_HEADER[]; extern unsigned char IPA_PDU_HEADER[];

View File

@ -1,6 +1,6 @@
/* /*
* *
* linux/drivers/s390/net/qeth_fs.c ($Revision: 1.13 $) * linux/drivers/s390/net/qeth_fs.c ($Revision: 1.16 $)
* *
* Linux on zSeries OSA Express and HiperSockets support * Linux on zSeries OSA Express and HiperSockets support
* This file contains code related to procfs. * This file contains code related to procfs.
@ -21,7 +21,7 @@
#include "qeth_mpc.h" #include "qeth_mpc.h"
#include "qeth_fs.h" #include "qeth_fs.h"
const char *VERSION_QETH_PROC_C = "$Revision: 1.13 $"; const char *VERSION_QETH_PROC_C = "$Revision: 1.16 $";
/***** /proc/qeth *****/ /***** /proc/qeth *****/
#define QETH_PROCFILE_NAME "qeth" #define QETH_PROCFILE_NAME "qeth"
@ -30,30 +30,26 @@ static struct proc_dir_entry *qeth_procfile;
static int static int
qeth_procfile_seq_match(struct device *dev, void *data) qeth_procfile_seq_match(struct device *dev, void *data)
{ {
return 1; return(dev ? 1 : 0);
} }
static void * static void *
qeth_procfile_seq_start(struct seq_file *s, loff_t *offset) qeth_procfile_seq_start(struct seq_file *s, loff_t *offset)
{ {
struct device *dev; struct device *dev = NULL;
loff_t nr; loff_t nr = 0;
down_read(&qeth_ccwgroup_driver.driver.bus->subsys.rwsem); down_read(&qeth_ccwgroup_driver.driver.bus->subsys.rwsem);
if (*offset == 0)
nr = *offset;
if (nr == 0)
return SEQ_START_TOKEN; return SEQ_START_TOKEN;
while (1) {
dev = driver_find_device(&qeth_ccwgroup_driver.driver, NULL,
NULL, qeth_procfile_seq_match);
/* get card at pos *offset */
nr = *offset;
while (nr-- > 1 && dev)
dev = driver_find_device(&qeth_ccwgroup_driver.driver, dev, dev = driver_find_device(&qeth_ccwgroup_driver.driver, dev,
NULL, qeth_procfile_seq_match); NULL, qeth_procfile_seq_match);
return (void *) dev; if (++nr == *offset)
break;
put_device(dev);
}
return dev;
} }
static void static void
@ -66,19 +62,14 @@ static void *
qeth_procfile_seq_next(struct seq_file *s, void *it, loff_t *offset) qeth_procfile_seq_next(struct seq_file *s, void *it, loff_t *offset)
{ {
struct device *prev, *next; struct device *prev, *next;
if (it == SEQ_START_TOKEN) { if (it == SEQ_START_TOKEN)
next = driver_find_device(&qeth_ccwgroup_driver.driver, prev = NULL;
NULL, NULL, qeth_procfile_seq_match); else
if (next) prev = (struct device *) it;
(*offset)++;
return (void *) next;
}
prev = (struct device *) it;
next = driver_find_device(&qeth_ccwgroup_driver.driver, next = driver_find_device(&qeth_ccwgroup_driver.driver,
prev, NULL, qeth_procfile_seq_match); prev, NULL, qeth_procfile_seq_match);
if (next) (*offset)++;
(*offset)++;
return (void *) next; return (void *) next;
} }
@ -87,7 +78,7 @@ qeth_get_router_str(struct qeth_card *card, int ipv)
{ {
int routing_type = 0; int routing_type = 0;
if (ipv == 4){ if (ipv == 4) {
routing_type = card->options.route4.type; routing_type = card->options.route4.type;
} else { } else {
#ifdef CONFIG_QETH_IPV6 #ifdef CONFIG_QETH_IPV6
@ -154,6 +145,7 @@ qeth_procfile_seq_show(struct seq_file *s, void *it)
card->qdio.in_buf_pool.buf_count); card->qdio.in_buf_pool.buf_count);
else else
seq_printf(s, " +++ LAN OFFLINE +++\n"); seq_printf(s, " +++ LAN OFFLINE +++\n");
put_device(device);
} }
return 0; return 0;
} }
@ -184,51 +176,16 @@ static struct file_operations qeth_procfile_fops = {
static struct proc_dir_entry *qeth_perf_procfile; static struct proc_dir_entry *qeth_perf_procfile;
#ifdef CONFIG_QETH_PERF_STATS #ifdef CONFIG_QETH_PERF_STATS
static void *
qeth_perf_procfile_seq_start(struct seq_file *s, loff_t *offset)
{
struct device *dev = NULL;
int nr;
down_read(&qeth_ccwgroup_driver.driver.bus->subsys.rwsem);
/* get card at pos *offset */
dev = driver_find_device(&qeth_ccwgroup_driver.driver, NULL, NULL,
qeth_procfile_seq_match);
/* get card at pos *offset */
nr = *offset;
while (nr-- > 1 && dev)
dev = driver_find_device(&qeth_ccwgroup_driver.driver, dev,
NULL, qeth_procfile_seq_match);
return (void *) dev;
}
static void
qeth_perf_procfile_seq_stop(struct seq_file *s, void* it)
{
up_read(&qeth_ccwgroup_driver.driver.bus->subsys.rwsem);
}
static void *
qeth_perf_procfile_seq_next(struct seq_file *s, void *it, loff_t *offset)
{
struct device *prev, *next;
prev = (struct device *) it;
next = driver_find_device(&qeth_ccwgroup_driver.driver, prev,
NULL, qeth_procfile_seq_match);
if (next)
(*offset)++;
return (void *) next;
}
static int static int
qeth_perf_procfile_seq_show(struct seq_file *s, void *it) qeth_perf_procfile_seq_show(struct seq_file *s, void *it)
{ {
struct device *device; struct device *device;
struct qeth_card *card; struct qeth_card *card;
if (it == SEQ_START_TOKEN)
return 0;
device = (struct device *) it; device = (struct device *) it;
card = device->driver_data; card = device->driver_data;
seq_printf(s, "For card with devnos %s/%s/%s (%s):\n", seq_printf(s, "For card with devnos %s/%s/%s (%s):\n",
@ -295,13 +252,14 @@ qeth_perf_procfile_seq_show(struct seq_file *s, void *it)
card->perf_stats.outbound_do_qdio_time, card->perf_stats.outbound_do_qdio_time,
card->perf_stats.outbound_do_qdio_cnt card->perf_stats.outbound_do_qdio_cnt
); );
put_device(device);
return 0; return 0;
} }
static struct seq_operations qeth_perf_procfile_seq_ops = { static struct seq_operations qeth_perf_procfile_seq_ops = {
.start = qeth_perf_procfile_seq_start, .start = qeth_procfile_seq_start,
.stop = qeth_perf_procfile_seq_stop, .stop = qeth_procfile_seq_stop,
.next = qeth_perf_procfile_seq_next, .next = qeth_procfile_seq_next,
.show = qeth_perf_procfile_seq_show, .show = qeth_perf_procfile_seq_show,
}; };
@ -324,93 +282,6 @@ static struct file_operations qeth_perf_procfile_fops = {
#define qeth_perf_procfile_created 1 #define qeth_perf_procfile_created 1
#endif /* CONFIG_QETH_PERF_STATS */ #endif /* CONFIG_QETH_PERF_STATS */
/***** /proc/qeth_ipa_takeover *****/
#define QETH_IPATO_PROCFILE_NAME "qeth_ipa_takeover"
static struct proc_dir_entry *qeth_ipato_procfile;
static void *
qeth_ipato_procfile_seq_start(struct seq_file *s, loff_t *offset)
{
struct device *dev;
loff_t nr;
down_read(&qeth_ccwgroup_driver.driver.bus->subsys.rwsem);
/* TODO: finish this */
/*
* maybe SEQ_SATRT_TOKEN can be returned for offset 0
* output driver settings then;
* else output setting for respective card
*/
dev = driver_find_device(&qeth_ccwgroup_driver.driver, NULL, NULL,
qeth_procfile_seq_match);
/* get card at pos *offset */
nr = *offset;
while (nr-- > 1 && dev)
dev = driver_find_device(&qeth_ccwgroup_driver.driver, dev,
NULL, qeth_procfile_seq_match);
return (void *) dev;
}
static void
qeth_ipato_procfile_seq_stop(struct seq_file *s, void* it)
{
up_read(&qeth_ccwgroup_driver.driver.bus->subsys.rwsem);
}
static void *
qeth_ipato_procfile_seq_next(struct seq_file *s, void *it, loff_t *offset)
{
struct device *prev, *next;
prev = (struct device *) it;
next = driver_find_device(&qeth_ccwgroup_driver.driver, prev,
NULL, qeth_procfile_seq_match);
if (next)
(*offset)++;
return (void *) next;
}
static int
qeth_ipato_procfile_seq_show(struct seq_file *s, void *it)
{
struct device *device;
struct qeth_card *card;
/* TODO: finish this */
/*
* maybe SEQ_SATRT_TOKEN can be returned for offset 0
* output driver settings then;
* else output setting for respective card
*/
device = (struct device *) it;
card = device->driver_data;
return 0;
}
static struct seq_operations qeth_ipato_procfile_seq_ops = {
.start = qeth_ipato_procfile_seq_start,
.stop = qeth_ipato_procfile_seq_stop,
.next = qeth_ipato_procfile_seq_next,
.show = qeth_ipato_procfile_seq_show,
};
static int
qeth_ipato_procfile_open(struct inode *inode, struct file *file)
{
return seq_open(file, &qeth_ipato_procfile_seq_ops);
}
static struct file_operations qeth_ipato_procfile_fops = {
.owner = THIS_MODULE,
.open = qeth_ipato_procfile_open,
.read = seq_read,
.llseek = seq_lseek,
.release = seq_release,
};
int __init int __init
qeth_create_procfs_entries(void) qeth_create_procfs_entries(void)
{ {
@ -426,13 +297,7 @@ qeth_create_procfs_entries(void)
qeth_perf_procfile->proc_fops = &qeth_perf_procfile_fops; qeth_perf_procfile->proc_fops = &qeth_perf_procfile_fops;
#endif /* CONFIG_QETH_PERF_STATS */ #endif /* CONFIG_QETH_PERF_STATS */
qeth_ipato_procfile = create_proc_entry(QETH_IPATO_PROCFILE_NAME,
S_IFREG | 0444, NULL);
if (qeth_ipato_procfile)
qeth_ipato_procfile->proc_fops = &qeth_ipato_procfile_fops;
if (qeth_procfile && if (qeth_procfile &&
qeth_ipato_procfile &&
qeth_perf_procfile_created) qeth_perf_procfile_created)
return 0; return 0;
else else
@ -446,62 +311,5 @@ qeth_remove_procfs_entries(void)
remove_proc_entry(QETH_PROCFILE_NAME, NULL); remove_proc_entry(QETH_PROCFILE_NAME, NULL);
if (qeth_perf_procfile) if (qeth_perf_procfile)
remove_proc_entry(QETH_PERF_PROCFILE_NAME, NULL); remove_proc_entry(QETH_PERF_PROCFILE_NAME, NULL);
if (qeth_ipato_procfile)
remove_proc_entry(QETH_IPATO_PROCFILE_NAME, NULL);
} }
/* ONLY FOR DEVELOPMENT! -> make it as module */
/*
static void
qeth_create_sysfs_entries(void)
{
struct device *dev;
down_read(&qeth_ccwgroup_driver.driver.bus->subsys.rwsem);
list_for_each_entry(dev, &qeth_ccwgroup_driver.driver.devices,
driver_list)
qeth_create_device_attributes(dev);
up_read(&qeth_ccwgroup_driver.driver.bus->subsys.rwsem);
}
static void
qeth_remove_sysfs_entries(void)
{
struct device *dev;
down_read(&qeth_ccwgroup_driver.driver.bus->subsys.rwsem);
list_for_each_entry(dev, &qeth_ccwgroup_driver.driver.devices,
driver_list)
qeth_remove_device_attributes(dev);
up_read(&qeth_ccwgroup_driver.driver.bus->subsys.rwsem);
}
static int __init
qeth_fs_init(void)
{
printk(KERN_INFO "qeth_fs_init\n");
qeth_create_procfs_entries();
qeth_create_sysfs_entries();
return 0;
}
static void __exit
qeth_fs_exit(void)
{
printk(KERN_INFO "qeth_fs_exit\n");
qeth_remove_procfs_entries();
qeth_remove_sysfs_entries();
}
module_init(qeth_fs_init);
module_exit(qeth_fs_exit);
MODULE_LICENSE("GPL");
*/

View File

@ -1,6 +1,6 @@
/* /*
* *
* linux/drivers/s390/net/qeth_sys.c ($Revision: 1.58 $) * linux/drivers/s390/net/qeth_sys.c ($Revision: 1.60 $)
* *
* Linux on zSeries OSA Express and HiperSockets support * Linux on zSeries OSA Express and HiperSockets support
* This file contains code related to sysfs. * This file contains code related to sysfs.
@ -20,7 +20,7 @@
#include "qeth_mpc.h" #include "qeth_mpc.h"
#include "qeth_fs.h" #include "qeth_fs.h"
const char *VERSION_QETH_SYS_C = "$Revision: 1.58 $"; const char *VERSION_QETH_SYS_C = "$Revision: 1.60 $";
/*****************************************************************************/ /*****************************************************************************/
/* */ /* */
@ -160,7 +160,7 @@ qeth_dev_portname_store(struct device *dev, struct device_attribute *attr, const
return -EPERM; return -EPERM;
tmp = strsep((char **) &buf, "\n"); tmp = strsep((char **) &buf, "\n");
if ((strlen(tmp) > 8) || (strlen(tmp) < 2)) if ((strlen(tmp) > 8) || (strlen(tmp) == 0))
return -EINVAL; return -EINVAL;
card->info.portname[0] = strlen(tmp); card->info.portname[0] = strlen(tmp);

View File

@ -1,5 +1,5 @@
/* /*
* linux/drivers/s390/net/qeth_tso.h ($Revision: 1.7 $) * linux/drivers/s390/net/qeth_tso.h ($Revision: 1.8 $)
* *
* Header file for qeth TCP Segmentation Offload support. * Header file for qeth TCP Segmentation Offload support.
* *
@ -7,7 +7,7 @@
* *
* Author(s): Frank Pavlic <fpavlic@de.ibm.com> * Author(s): Frank Pavlic <fpavlic@de.ibm.com>
* *
* $Revision: 1.7 $ $Date: 2005/05/04 20:19:18 $ * $Revision: 1.8 $ $Date: 2005/05/04 20:19:18 $
* *
*/ */
#ifndef __QETH_TSO_H__ #ifndef __QETH_TSO_H__

View File

@ -2044,7 +2044,7 @@ static int atapi_qc_complete(struct ata_queued_cmd *qc, unsigned int err_mask)
else { else {
u8 *scsicmd = cmd->cmnd; u8 *scsicmd = cmd->cmnd;
if (scsicmd[0] == INQUIRY) { if ((scsicmd[0] == INQUIRY) && ((scsicmd[1] & 0x03) == 0)) {
u8 *buf = NULL; u8 *buf = NULL;
unsigned int buflen; unsigned int buflen;
@ -2057,9 +2057,6 @@ static int atapi_qc_complete(struct ata_queued_cmd *qc, unsigned int err_mask)
* to indicate to the Linux scsi midlayer this is a modern * to indicate to the Linux scsi midlayer this is a modern
* device. 2) Ensure response data format / ATAPI information * device. 2) Ensure response data format / ATAPI information
* are always correct. * are always correct.
*/
/* FIXME: do we ever override EVPD pages and the like, with
* this code?
*/ */
if (buf[2] == 0) { if (buf[2] == 0) {
buf[2] = 0x5; buf[2] = 0x5;

View File

@ -400,6 +400,36 @@ static struct scsi_target *scsi_alloc_target(struct device *parent,
return found_target; return found_target;
} }
struct work_queue_wrapper {
struct work_struct work;
struct scsi_target *starget;
};
static void scsi_target_reap_work(void *data) {
struct work_queue_wrapper *wqw = (struct work_queue_wrapper *)data;
struct scsi_target *starget = wqw->starget;
struct Scsi_Host *shost = dev_to_shost(starget->dev.parent);
unsigned long flags;
kfree(wqw);
spin_lock_irqsave(shost->host_lock, flags);
if (--starget->reap_ref == 0 && list_empty(&starget->devices)) {
list_del_init(&starget->siblings);
spin_unlock_irqrestore(shost->host_lock, flags);
transport_remove_device(&starget->dev);
device_del(&starget->dev);
transport_destroy_device(&starget->dev);
put_device(&starget->dev);
return;
}
spin_unlock_irqrestore(shost->host_lock, flags);
return;
}
/** /**
* scsi_target_reap - check to see if target is in use and destroy if not * scsi_target_reap - check to see if target is in use and destroy if not
* *
@ -411,19 +441,18 @@ static struct scsi_target *scsi_alloc_target(struct device *parent,
*/ */
void scsi_target_reap(struct scsi_target *starget) void scsi_target_reap(struct scsi_target *starget)
{ {
struct Scsi_Host *shost = dev_to_shost(starget->dev.parent); struct work_queue_wrapper *wqw =
unsigned long flags; kzalloc(sizeof(struct work_queue_wrapper), GFP_ATOMIC);
spin_lock_irqsave(shost->host_lock, flags);
if (--starget->reap_ref == 0 && list_empty(&starget->devices)) { if (!wqw) {
list_del_init(&starget->siblings); starget_printk(KERN_ERR, starget,
spin_unlock_irqrestore(shost->host_lock, flags); "Failed to allocate memory in scsi_reap_target()\n");
device_del(&starget->dev);
transport_unregister_device(&starget->dev);
put_device(&starget->dev);
return; return;
} }
spin_unlock_irqrestore(shost->host_lock, flags);
INIT_WORK(&wqw->work, scsi_target_reap_work, wqw);
wqw->starget = starget;
schedule_work(&wqw->work);
} }
/** /**

View File

@ -105,6 +105,7 @@ static struct {
{ FC_PORTSTATE_LINKDOWN, "Linkdown" }, { FC_PORTSTATE_LINKDOWN, "Linkdown" },
{ FC_PORTSTATE_ERROR, "Error" }, { FC_PORTSTATE_ERROR, "Error" },
{ FC_PORTSTATE_LOOPBACK, "Loopback" }, { FC_PORTSTATE_LOOPBACK, "Loopback" },
{ FC_PORTSTATE_DELETED, "Deleted" },
}; };
fc_enum_name_search(port_state, fc_port_state, fc_port_state_names) fc_enum_name_search(port_state, fc_port_state, fc_port_state_names)
#define FC_PORTSTATE_MAX_NAMELEN 20 #define FC_PORTSTATE_MAX_NAMELEN 20
@ -211,6 +212,7 @@ fc_bitfield_name_search(remote_port_roles, fc_remote_port_role_names)
#define FC_MGMTSRVR_PORTID 0x00000a #define FC_MGMTSRVR_PORTID 0x00000a
static void fc_shost_remove_rports(void *data);
static void fc_timeout_deleted_rport(void *data); static void fc_timeout_deleted_rport(void *data);
static void fc_scsi_scan_rport(void *data); static void fc_scsi_scan_rport(void *data);
static void fc_rport_terminate(struct fc_rport *rport); static void fc_rport_terminate(struct fc_rport *rport);
@ -318,6 +320,8 @@ static int fc_host_setup(struct transport_container *tc, struct device *dev,
fc_host_next_rport_number(shost) = 0; fc_host_next_rport_number(shost) = 0;
fc_host_next_target_id(shost) = 0; fc_host_next_target_id(shost) = 0;
fc_host_flags(shost) = 0;
INIT_WORK(&fc_host_rport_del_work(shost), fc_shost_remove_rports, shost);
return 0; return 0;
} }
@ -387,6 +391,7 @@ show_fc_rport_##field (struct class_device *cdev, char *buf) \
struct fc_internal *i = to_fc_internal(shost->transportt); \ struct fc_internal *i = to_fc_internal(shost->transportt); \
if ((i->f->get_rport_##field) && \ if ((i->f->get_rport_##field) && \
!((rport->port_state == FC_PORTSTATE_BLOCKED) || \ !((rport->port_state == FC_PORTSTATE_BLOCKED) || \
(rport->port_state == FC_PORTSTATE_DELETED) || \
(rport->port_state == FC_PORTSTATE_NOTPRESENT))) \ (rport->port_state == FC_PORTSTATE_NOTPRESENT))) \
i->f->get_rport_##field(rport); \ i->f->get_rport_##field(rport); \
return snprintf(buf, sz, format_string, cast rport->field); \ return snprintf(buf, sz, format_string, cast rport->field); \
@ -402,6 +407,7 @@ store_fc_rport_##field(struct class_device *cdev, const char *buf, \
struct Scsi_Host *shost = rport_to_shost(rport); \ struct Scsi_Host *shost = rport_to_shost(rport); \
struct fc_internal *i = to_fc_internal(shost->transportt); \ struct fc_internal *i = to_fc_internal(shost->transportt); \
if ((rport->port_state == FC_PORTSTATE_BLOCKED) || \ if ((rport->port_state == FC_PORTSTATE_BLOCKED) || \
(rport->port_state == FC_PORTSTATE_DELETED) || \
(rport->port_state == FC_PORTSTATE_NOTPRESENT)) \ (rport->port_state == FC_PORTSTATE_NOTPRESENT)) \
return -EBUSY; \ return -EBUSY; \
val = simple_strtoul(buf, NULL, 0); \ val = simple_strtoul(buf, NULL, 0); \
@ -519,6 +525,7 @@ store_fc_rport_dev_loss_tmo(struct class_device *cdev, const char *buf,
struct Scsi_Host *shost = rport_to_shost(rport); struct Scsi_Host *shost = rport_to_shost(rport);
struct fc_internal *i = to_fc_internal(shost->transportt); struct fc_internal *i = to_fc_internal(shost->transportt);
if ((rport->port_state == FC_PORTSTATE_BLOCKED) || if ((rport->port_state == FC_PORTSTATE_BLOCKED) ||
(rport->port_state == FC_PORTSTATE_DELETED) ||
(rport->port_state == FC_PORTSTATE_NOTPRESENT)) (rport->port_state == FC_PORTSTATE_NOTPRESENT))
return -EBUSY; return -EBUSY;
val = simple_strtoul(buf, NULL, 0); val = simple_strtoul(buf, NULL, 0);
@ -1769,7 +1776,7 @@ fc_timeout_deleted_rport(void *data)
rport->maxframe_size = -1; rport->maxframe_size = -1;
rport->supported_classes = FC_COS_UNSPECIFIED; rport->supported_classes = FC_COS_UNSPECIFIED;
rport->roles = FC_RPORT_ROLE_UNKNOWN; rport->roles = FC_RPORT_ROLE_UNKNOWN;
rport->port_state = FC_PORTSTATE_NOTPRESENT; rport->port_state = FC_PORTSTATE_DELETED;
/* remove the identifiers that aren't used in the consisting binding */ /* remove the identifiers that aren't used in the consisting binding */
switch (fc_host_tgtid_bind_type(shost)) { switch (fc_host_tgtid_bind_type(shost)) {
@ -1789,14 +1796,23 @@ fc_timeout_deleted_rport(void *data)
break; break;
} }
spin_unlock_irqrestore(shost->host_lock, flags);
/* /*
* As this only occurs if the remote port (scsi target) * As this only occurs if the remote port (scsi target)
* went away and didn't come back - we'll remove * went away and didn't come back - we'll remove
* all attached scsi devices. * all attached scsi devices.
*
* We'll schedule the shost work item to perform the actual removal
* to avoid recursion in the different flush calls if we perform
* the removal in each target - and there are lots of targets
* whose timeouts fire at the same time.
*/ */
fc_rport_tgt_remove(rport);
if ( !(fc_host_flags(shost) & FC_SHOST_RPORT_DEL_SCHEDULED)) {
fc_host_flags(shost) |= FC_SHOST_RPORT_DEL_SCHEDULED;
scsi_queue_work(shost, &fc_host_rport_del_work(shost));
}
spin_unlock_irqrestore(shost->host_lock, flags);
} }
/** /**
@ -1818,6 +1834,41 @@ fc_scsi_scan_rport(void *data)
} }
/**
* fc_shost_remove_rports - called to remove all rports that are marked
* as in a deleted (not connected) state.
*
* @data: shost whose rports are to be looked at
**/
static void
fc_shost_remove_rports(void *data)
{
struct Scsi_Host *shost = (struct Scsi_Host *)data;
struct fc_rport *rport, *next_rport;
unsigned long flags;
spin_lock_irqsave(shost->host_lock, flags);
while (fc_host_flags(shost) & FC_SHOST_RPORT_DEL_SCHEDULED) {
fc_host_flags(shost) &= ~FC_SHOST_RPORT_DEL_SCHEDULED;
restart_search:
list_for_each_entry_safe(rport, next_rport,
&fc_host_rport_bindings(shost), peers) {
if (rport->port_state == FC_PORTSTATE_DELETED) {
rport->port_state = FC_PORTSTATE_NOTPRESENT;
spin_unlock_irqrestore(shost->host_lock, flags);
fc_rport_tgt_remove(rport);
spin_lock_irqsave(shost->host_lock, flags);
goto restart_search;
}
}
}
spin_unlock_irqrestore(shost->host_lock, flags);
}
MODULE_AUTHOR("Martin Hicks"); MODULE_AUTHOR("Martin Hicks");
MODULE_DESCRIPTION("FC Transport Attributes"); MODULE_DESCRIPTION("FC Transport Attributes");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");

View File

@ -10,7 +10,7 @@ menu "Serial drivers"
# The new 8250/16550 serial drivers # The new 8250/16550 serial drivers
config SERIAL_8250 config SERIAL_8250
tristate "8250/16550 and compatible serial support" tristate "8250/16550 and compatible serial support"
depends on (BROKEN || !(SPARC64 || SPARC32)) depends on (BROKEN || !SPARC)
select SERIAL_CORE select SERIAL_CORE
---help--- ---help---
This selects whether you want to include the driver for the standard This selects whether you want to include the driver for the standard
@ -469,14 +469,14 @@ config SERIAL_IMX_CONSOLE
config SERIAL_SUNCORE config SERIAL_SUNCORE
bool bool
depends on SPARC32 || SPARC64 depends on SPARC
select SERIAL_CORE select SERIAL_CORE
select SERIAL_CORE_CONSOLE select SERIAL_CORE_CONSOLE
default y default y
config SERIAL_SUNZILOG config SERIAL_SUNZILOG
tristate "Sun Zilog8530 serial support" tristate "Sun Zilog8530 serial support"
depends on SPARC32 || SPARC64 depends on SPARC
help help
This driver supports the Zilog8530 serial ports found on many Sparc This driver supports the Zilog8530 serial ports found on many Sparc
systems. Say Y or M if you want to be able to these serial ports. systems. Say Y or M if you want to be able to these serial ports.
@ -491,7 +491,7 @@ config SERIAL_SUNZILOG_CONSOLE
config SERIAL_SUNSU config SERIAL_SUNSU
tristate "Sun SU serial support" tristate "Sun SU serial support"
depends on (SPARC32 || SPARC64) && PCI depends on SPARC && PCI
help help
This driver supports the 8250 serial ports that run the keyboard and This driver supports the 8250 serial ports that run the keyboard and
mouse on (PCI) UltraSPARC systems. Say Y or M if you want to be able mouse on (PCI) UltraSPARC systems. Say Y or M if you want to be able
@ -547,7 +547,7 @@ config PDC_CONSOLE
config SERIAL_SUNSAB config SERIAL_SUNSAB
tristate "Sun Siemens SAB82532 serial support" tristate "Sun Siemens SAB82532 serial support"
depends on (SPARC32 || SPARC64) && PCI depends on SPARC && PCI
help help
This driver supports the Siemens SAB82532 DUSCC serial ports on newer This driver supports the Siemens SAB82532 DUSCC serial ports on newer
(PCI) UltraSPARC systems. Say Y or M if you want to be able to these (PCI) UltraSPARC systems. Say Y or M if you want to be able to these

View File

@ -160,7 +160,7 @@ pl011_rx_chars(struct uart_amba_port *uap)
flag = TTY_FRAME; flag = TTY_FRAME;
} }
if (uart_handle_sysrq_char(&uap->port, ch, regs)) if (uart_handle_sysrq_char(&uap->port, ch & 255, regs))
goto ignore_char; goto ignore_char;
uart_insert_char(&uap->port, ch, UART011_DR_OE, ch, flag); uart_insert_char(&uap->port, ch, UART011_DR_OE, ch, flag);

View File

@ -361,7 +361,7 @@ static int serial_pxa_startup(struct uart_port *port)
if (port->line == 3) /* HWUART */ if (port->line == 3) /* HWUART */
up->mcr |= UART_MCR_AFE; up->mcr |= UART_MCR_AFE;
else else
up->mcr = 0; up->mcr = 0;
/* /*
* Allocate the IRQ * Allocate the IRQ
@ -641,7 +641,7 @@ serial_pxa_console_write(struct console *co, const char *s, unsigned int count)
int i; int i;
/* /*
* First save the UER then disable the interrupts * First save the IER then disable the interrupts
*/ */
ier = serial_in(up, UART_IER); ier = serial_in(up, UART_IER);
serial_out(up, UART_IER, UART_IER_UUE); serial_out(up, UART_IER, UART_IER_UUE);

View File

@ -1432,7 +1432,8 @@ static int usb_generic_suspend(struct device *dev, pm_message_t message)
mark_quiesced(intf); mark_quiesced(intf);
} else { } else {
// FIXME else if there's no suspend method, disconnect... // FIXME else if there's no suspend method, disconnect...
dev_warn(dev, "no %s?\n", "suspend"); dev_warn(dev, "no suspend for driver %s?\n", driver->name);
mark_quiesced(intf);
status = 0; status = 0;
} }
return status; return status;
@ -1460,8 +1461,10 @@ static int usb_generic_resume(struct device *dev)
} }
if ((dev->driver == NULL) || if ((dev->driver == NULL) ||
(dev->driver_data == &usb_generic_driver_data)) (dev->driver_data == &usb_generic_driver_data)) {
dev->power.power_state.event = PM_EVENT_FREEZE;
return 0; return 0;
}
intf = to_usb_interface(dev); intf = to_usb_interface(dev);
driver = to_usb_driver(dev->driver); driver = to_usb_driver(dev->driver);
@ -1481,7 +1484,7 @@ static int usb_generic_resume(struct device *dev)
mark_quiesced(intf); mark_quiesced(intf);
} }
} else } else
dev_warn(dev, "no %s?\n", "resume"); dev_warn(dev, "no resume for driver %s?\n", driver->name);
return 0; return 0;
} }

View File

@ -2103,7 +2103,7 @@ aiptek_probe(struct usb_interface *intf, const struct usb_device_id *id)
* values. * values.
*/ */
input_set_abs_params(inputdev, ABS_X, 0, 2999, 0, 0); input_set_abs_params(inputdev, ABS_X, 0, 2999, 0, 0);
input_set_abs_params(inputdev, ABS_X, 0, 2249, 0, 0); input_set_abs_params(inputdev, ABS_Y, 0, 2249, 0, 0);
input_set_abs_params(inputdev, ABS_PRESSURE, 0, 511, 0, 0); input_set_abs_params(inputdev, ABS_PRESSURE, 0, 511, 0, 0);
input_set_abs_params(inputdev, ABS_TILT_X, AIPTEK_TILT_MIN, AIPTEK_TILT_MAX, 0, 0); input_set_abs_params(inputdev, ABS_TILT_X, AIPTEK_TILT_MIN, AIPTEK_TILT_MAX, 0, 0);
input_set_abs_params(inputdev, ABS_TILT_Y, AIPTEK_TILT_MIN, AIPTEK_TILT_MAX, 0, 0); input_set_abs_params(inputdev, ABS_TILT_Y, AIPTEK_TILT_MIN, AIPTEK_TILT_MAX, 0, 0);

View File

@ -159,7 +159,7 @@ static int kbtab_probe(struct usb_interface *intf, const struct usb_device_id *i
input_dev->keybit[LONG(BTN_DIGI)] |= BIT(BTN_TOOL_PEN) | BIT(BTN_TOUCH); input_dev->keybit[LONG(BTN_DIGI)] |= BIT(BTN_TOOL_PEN) | BIT(BTN_TOUCH);
input_dev->mscbit[0] |= BIT(MSC_SERIAL); input_dev->mscbit[0] |= BIT(MSC_SERIAL);
input_set_abs_params(input_dev, ABS_X, 0, 0x2000, 4, 0); input_set_abs_params(input_dev, ABS_X, 0, 0x2000, 4, 0);
input_set_abs_params(input_dev, ABS_X, 0, 0x1750, 4, 0); input_set_abs_params(input_dev, ABS_Y, 0, 0x1750, 4, 0);
input_set_abs_params(input_dev, ABS_PRESSURE, 0, 0xff, 0, 0); input_set_abs_params(input_dev, ABS_PRESSURE, 0, 0xff, 0, 0);
endpoint = &intf->cur_altsetting->endpoint[0].desc; endpoint = &intf->cur_altsetting->endpoint[0].desc;

View File

@ -854,7 +854,7 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i
input_dev->evbit[0] |= BIT(EV_KEY) | BIT(EV_ABS); input_dev->evbit[0] |= BIT(EV_KEY) | BIT(EV_ABS);
input_dev->keybit[LONG(BTN_DIGI)] |= BIT(BTN_TOOL_PEN) | BIT(BTN_TOUCH) | BIT(BTN_STYLUS); input_dev->keybit[LONG(BTN_DIGI)] |= BIT(BTN_TOOL_PEN) | BIT(BTN_TOUCH) | BIT(BTN_STYLUS);
input_set_abs_params(input_dev, ABS_X, 0, wacom->features->y_max, 4, 0); input_set_abs_params(input_dev, ABS_X, 0, wacom->features->x_max, 4, 0);
input_set_abs_params(input_dev, ABS_Y, 0, wacom->features->y_max, 4, 0); input_set_abs_params(input_dev, ABS_Y, 0, wacom->features->y_max, 4, 0);
input_set_abs_params(input_dev, ABS_PRESSURE, 0, wacom->features->pressure_max, 0, 0); input_set_abs_params(input_dev, ABS_PRESSURE, 0, wacom->features->pressure_max, 0, 0);

View File

@ -109,7 +109,7 @@ static int slave_configure(struct scsi_device *sdev)
* data comes from. * data comes from.
*/ */
if (sdev->scsi_level < SCSI_2) if (sdev->scsi_level < SCSI_2)
sdev->scsi_level = SCSI_2; sdev->scsi_level = sdev->sdev_target->scsi_level = SCSI_2;
/* According to the technical support people at Genesys Logic, /* According to the technical support people at Genesys Logic,
* devices using their chips have problems transferring more than * devices using their chips have problems transferring more than
@ -162,7 +162,7 @@ static int slave_configure(struct scsi_device *sdev)
* a Get-Max-LUN request, we won't lose much by setting the * a Get-Max-LUN request, we won't lose much by setting the
* revision level down to 2. The only devices that would be * revision level down to 2. The only devices that would be
* affected are those with sparse LUNs. */ * affected are those with sparse LUNs. */
sdev->scsi_level = SCSI_2; sdev->scsi_level = sdev->sdev_target->scsi_level = SCSI_2;
/* USB-IDE bridges tend to report SK = 0x04 (Non-recoverable /* USB-IDE bridges tend to report SK = 0x04 (Non-recoverable
* Hardware Error) when any low-level error occurs, * Hardware Error) when any low-level error occurs,

View File

@ -536,13 +536,13 @@ config FB_SUN3
config FB_SBUS config FB_SBUS
bool "SBUS and UPA framebuffers" bool "SBUS and UPA framebuffers"
depends on (FB = y) && (SPARC32 || SPARC64) depends on (FB = y) && SPARC
help help
Say Y if you want support for SBUS or UPA based frame buffer device. Say Y if you want support for SBUS or UPA based frame buffer device.
config FB_BW2 config FB_BW2
bool "BWtwo support" bool "BWtwo support"
depends on (FB = y) && ((SPARC32 || SPARC64) && FB_SBUS || (SUN3 || SUN3X) && FB_SUN3) depends on (FB = y) && (SPARC && FB_SBUS || (SUN3 || SUN3X) && FB_SUN3)
select FB_CFB_FILLRECT select FB_CFB_FILLRECT
select FB_CFB_COPYAREA select FB_CFB_COPYAREA
select FB_CFB_IMAGEBLIT select FB_CFB_IMAGEBLIT
@ -551,7 +551,7 @@ config FB_BW2
config FB_CG3 config FB_CG3
bool "CGthree support" bool "CGthree support"
depends on (FB = y) && ((SPARC32 || SPARC64) && FB_SBUS || (SUN3 || SUN3X) && FB_SUN3) depends on (FB = y) && (SPARC && FB_SBUS || (SUN3 || SUN3X) && FB_SUN3)
select FB_CFB_FILLRECT select FB_CFB_FILLRECT
select FB_CFB_COPYAREA select FB_CFB_COPYAREA
select FB_CFB_IMAGEBLIT select FB_CFB_IMAGEBLIT
@ -560,7 +560,7 @@ config FB_CG3
config FB_CG6 config FB_CG6
bool "CGsix (GX,TurboGX) support" bool "CGsix (GX,TurboGX) support"
depends on (FB = y) && ((SPARC32 || SPARC64) && FB_SBUS || (SUN3 || SUN3X) && FB_SUN3) depends on (FB = y) && (SPARC && FB_SBUS || (SUN3 || SUN3X) && FB_SUN3)
select FB_CFB_COPYAREA select FB_CFB_COPYAREA
select FB_CFB_IMAGEBLIT select FB_CFB_IMAGEBLIT
help help
@ -1268,7 +1268,7 @@ config FB_LEO
config FB_PCI config FB_PCI
bool "PCI framebuffers" bool "PCI framebuffers"
depends on (FB = y) && PCI && (SPARC64 || SPARC32) depends on (FB = y) && PCI && SPARC
config FB_IGA config FB_IGA
bool "IGA 168x display support" bool "IGA 168x display support"

View File

@ -6,7 +6,7 @@ menu "Console display driver support"
config VGA_CONSOLE config VGA_CONSOLE
bool "VGA text console" if EMBEDDED || !X86 bool "VGA text console" if EMBEDDED || !X86
depends on !ARCH_ACORN && !ARCH_EBSA110 && !4xx && !8xx && !SPARC32 && !SPARC64 && !M68K && !PARISC && !ARCH_VERSATILE depends on !ARCH_ACORN && !ARCH_EBSA110 && !4xx && !8xx && !SPARC && !M68K && !PARISC && !ARCH_VERSATILE
default y default y
help help
Saying Y here will allow you to use Linux in text mode through a Saying Y here will allow you to use Linux in text mode through a
@ -68,7 +68,7 @@ config SGI_NEWPORT_CONSOLE
config PROM_CONSOLE config PROM_CONSOLE
bool "PROM console" bool "PROM console"
depends on SPARC32 || SPARC64 depends on SPARC
help help
Say Y to build a console driver for Sun machines that uses the Say Y to build a console driver for Sun machines that uses the
terminal emulation built into their console PROMS. terminal emulation built into their console PROMS.
@ -136,7 +136,7 @@ config FONTS
config FONT_8x8 config FONT_8x8
bool "VGA 8x8 font" if FONTS bool "VGA 8x8 font" if FONTS
depends on FRAMEBUFFER_CONSOLE || STI_CONSOLE depends on FRAMEBUFFER_CONSOLE || STI_CONSOLE
default y if !SPARC32 && !SPARC64 && !FONTS default y if !SPARC && !FONTS
help help
This is the "high resolution" font for the VGA frame buffer (the one This is the "high resolution" font for the VGA frame buffer (the one
provided by the text console 80x50 (and higher) modes). provided by the text console 80x50 (and higher) modes).
@ -150,7 +150,7 @@ config FONT_8x8
config FONT_8x16 config FONT_8x16
bool "VGA 8x16 font" if FONTS bool "VGA 8x16 font" if FONTS
depends on FRAMEBUFFER_CONSOLE || SGI_NEWPORT_CONSOLE=y || STI_CONSOLE || USB_SISUSBVGA_CON depends on FRAMEBUFFER_CONSOLE || SGI_NEWPORT_CONSOLE=y || STI_CONSOLE || USB_SISUSBVGA_CON
default y if !SPARC32 && !SPARC64 && !FONTS default y if !SPARC && !FONTS
help help
This is the "high resolution" font for the VGA frame buffer (the one This is the "high resolution" font for the VGA frame buffer (the one
provided by the VGA text console 80x25 mode. provided by the VGA text console 80x25 mode.
@ -160,7 +160,7 @@ config FONT_8x16
config FONT_6x11 config FONT_6x11
bool "Mac console 6x11 font (not supported by all drivers)" if FONTS bool "Mac console 6x11 font (not supported by all drivers)" if FONTS
depends on FRAMEBUFFER_CONSOLE || STI_CONSOLE depends on FRAMEBUFFER_CONSOLE || STI_CONSOLE
default y if !SPARC32 && !SPARC64 && !FONTS && MAC default y if !SPARC && !FONTS && MAC
help help
Small console font with Macintosh-style high-half glyphs. Some Mac Small console font with Macintosh-style high-half glyphs. Some Mac
framebuffer drivers don't support this one at all. framebuffer drivers don't support this one at all.
@ -176,7 +176,7 @@ config FONT_7x14
config FONT_PEARL_8x8 config FONT_PEARL_8x8
bool "Pearl (old m68k) console 8x8 font" if FONTS bool "Pearl (old m68k) console 8x8 font" if FONTS
depends on FRAMEBUFFER_CONSOLE depends on FRAMEBUFFER_CONSOLE
default y if !SPARC32 && !SPARC64 && !FONTS && AMIGA default y if !SPARC && !FONTS && AMIGA
help help
Small console font with PC-style control-character and high-half Small console font with PC-style control-character and high-half
glyphs. glyphs.
@ -184,24 +184,24 @@ config FONT_PEARL_8x8
config FONT_ACORN_8x8 config FONT_ACORN_8x8
bool "Acorn console 8x8 font" if FONTS bool "Acorn console 8x8 font" if FONTS
depends on FRAMEBUFFER_CONSOLE depends on FRAMEBUFFER_CONSOLE
default y if !SPARC32 && !SPARC64 && !FONTS && ARM && ARCH_ACORN default y if !SPARC && !FONTS && ARM && ARCH_ACORN
help help
Small console font with PC-style control characters and high-half Small console font with PC-style control characters and high-half
glyphs. glyphs.
config FONT_MINI_4x6 config FONT_MINI_4x6
bool "Mini 4x6 font" bool "Mini 4x6 font"
depends on !SPARC32 && !SPARC64 && FONTS depends on !SPARC && FONTS
config FONT_SUN8x16 config FONT_SUN8x16
bool "Sparc console 8x16 font" bool "Sparc console 8x16 font"
depends on FRAMEBUFFER_CONSOLE && (!SPARC32 && !SPARC64 && FONTS || SPARC32 || SPARC64) depends on FRAMEBUFFER_CONSOLE && (!SPARC && FONTS || SPARC)
help help
This is the high resolution console font for Sun machines. Say Y. This is the high resolution console font for Sun machines. Say Y.
config FONT_SUN12x22 config FONT_SUN12x22
bool "Sparc console 12x22 font (not supported by all drivers)" bool "Sparc console 12x22 font (not supported by all drivers)"
depends on FRAMEBUFFER_CONSOLE && (!SPARC32 && !SPARC64 && FONTS || SPARC32 || SPARC64) depends on FRAMEBUFFER_CONSOLE && (!SPARC && FONTS || SPARC)
help help
This is the high resolution console font for Sun machines with very This is the high resolution console font for Sun machines with very
big letters (like the letters used in the SPARC PROM). If the big letters (like the letters used in the SPARC PROM). If the

View File

@ -420,13 +420,15 @@ static void ud_cursor(struct vc_data *vc, struct fb_info *info,
int ud_update_start(struct fb_info *info) int ud_update_start(struct fb_info *info)
{ {
struct fbcon_ops *ops = info->fbcon_par; struct fbcon_ops *ops = info->fbcon_par;
u32 xoffset, yoffset; int xoffset, yoffset;
u32 vyres = GETVYRES(ops->p->scrollmode, info); u32 vyres = GETVYRES(ops->p->scrollmode, info);
u32 vxres = GETVXRES(ops->p->scrollmode, info); u32 vxres = GETVXRES(ops->p->scrollmode, info);
int err; int err;
xoffset = (vxres - info->var.xres) - ops->var.xoffset; xoffset = vxres - info->var.xres - ops->var.xoffset;
yoffset = (vyres - info->var.yres) - ops->var.yoffset; yoffset = vyres - info->var.yres - ops->var.yoffset;
if (yoffset < 0)
yoffset += vyres;
ops->var.xoffset = xoffset; ops->var.xoffset = xoffset;
ops->var.yoffset = yoffset; ops->var.yoffset = yoffset;
err = fb_pan_display(info, &ops->var); err = fb_pan_display(info, &ops->var);

View File

@ -41,6 +41,10 @@
/*** hw-related values ***/ /*** hw-related values ***/
/* Resource Allocation */
#define INTELFB_FB_ACQUIRED 1
#define INTELFB_MMIO_ACQUIRED 2
/* PCI ids for supported devices */ /* PCI ids for supported devices */
#define PCI_DEVICE_ID_INTEL_830M 0x3577 #define PCI_DEVICE_ID_INTEL_830M 0x3577
#define PCI_DEVICE_ID_INTEL_845G 0x2562 #define PCI_DEVICE_ID_INTEL_845G 0x2562
@ -257,6 +261,7 @@ struct intelfb_info {
int hwcursor; int hwcursor;
int fixed_mode; int fixed_mode;
int ring_active; int ring_active;
int flag;
/* hw cursor */ /* hw cursor */
int cursor_on; int cursor_on;

View File

@ -135,9 +135,6 @@
static void __devinit get_initial_mode(struct intelfb_info *dinfo); static void __devinit get_initial_mode(struct intelfb_info *dinfo);
static void update_dinfo(struct intelfb_info *dinfo, static void update_dinfo(struct intelfb_info *dinfo,
struct fb_var_screeninfo *var); struct fb_var_screeninfo *var);
static int intelfb_get_fix(struct fb_fix_screeninfo *fix,
struct fb_info *info);
static int intelfb_check_var(struct fb_var_screeninfo *var, static int intelfb_check_var(struct fb_var_screeninfo *var,
struct fb_info *info); struct fb_info *info);
static int intelfb_set_par(struct fb_info *info); static int intelfb_set_par(struct fb_info *info);
@ -473,9 +470,9 @@ cleanup(struct intelfb_info *dinfo)
if (dinfo->aperture.virtual) if (dinfo->aperture.virtual)
iounmap((void __iomem *)dinfo->aperture.virtual); iounmap((void __iomem *)dinfo->aperture.virtual);
if (dinfo->mmio_base_phys) if (dinfo->flag & INTELFB_MMIO_ACQUIRED)
release_mem_region(dinfo->mmio_base_phys, INTEL_REG_SIZE); release_mem_region(dinfo->mmio_base_phys, INTEL_REG_SIZE);
if (dinfo->aperture.physical) if (dinfo->flag & INTELFB_FB_ACQUIRED)
release_mem_region(dinfo->aperture.physical, release_mem_region(dinfo->aperture.physical,
dinfo->aperture.size); dinfo->aperture.size);
framebuffer_release(dinfo->info); framebuffer_release(dinfo->info);
@ -572,6 +569,9 @@ intelfb_pci_register(struct pci_dev *pdev, const struct pci_device_id *ent)
cleanup(dinfo); cleanup(dinfo);
return -ENODEV; return -ENODEV;
} }
dinfo->flag |= INTELFB_FB_ACQUIRED;
if (!request_mem_region(dinfo->mmio_base_phys, if (!request_mem_region(dinfo->mmio_base_phys,
INTEL_REG_SIZE, INTEL_REG_SIZE,
INTELFB_MODULE_NAME)) { INTELFB_MODULE_NAME)) {
@ -580,6 +580,8 @@ intelfb_pci_register(struct pci_dev *pdev, const struct pci_device_id *ent)
return -ENODEV; return -ENODEV;
} }
dinfo->flag |= INTELFB_MMIO_ACQUIRED;
/* Get the chipset info. */ /* Get the chipset info. */
dinfo->pci_chipset = pdev->device; dinfo->pci_chipset = pdev->device;
@ -1091,7 +1093,17 @@ intelfb_set_fbinfo(struct intelfb_info *dinfo)
return 1; return 1;
info->pixmap.scan_align = 1; info->pixmap.scan_align = 1;
strcpy(info->fix.id, dinfo->name);
info->fix.smem_start = dinfo->fb.physical;
info->fix.smem_len = dinfo->fb.size;
info->fix.type = FB_TYPE_PACKED_PIXELS;
info->fix.type_aux = 0;
info->fix.xpanstep = 8;
info->fix.ypanstep = 1;
info->fix.ywrapstep = 0;
info->fix.mmio_start = dinfo->mmio_base_phys;
info->fix.mmio_len = INTEL_REG_SIZE;
info->fix.accel = FB_ACCEL_I830;
update_dinfo(dinfo, &info->var); update_dinfo(dinfo, &info->var);
return 0; return 0;
@ -1109,7 +1121,8 @@ update_dinfo(struct intelfb_info *dinfo, struct fb_var_screeninfo *var)
dinfo->yres = var->xres; dinfo->yres = var->xres;
dinfo->pixclock = var->pixclock; dinfo->pixclock = var->pixclock;
intelfb_get_fix(&dinfo->info->fix, dinfo->info); dinfo->info->fix.visual = dinfo->visual;
dinfo->info->fix.line_length = dinfo->pitch;
switch (dinfo->bpp) { switch (dinfo->bpp) {
case 8: case 8:
@ -1139,30 +1152,6 @@ update_dinfo(struct intelfb_info *dinfo, struct fb_var_screeninfo *var)
/* fbops functions */ /* fbops functions */
static int
intelfb_get_fix(struct fb_fix_screeninfo *fix, struct fb_info *info)
{
struct intelfb_info *dinfo = GET_DINFO(info);
DBG_MSG("intelfb_get_fix\n");
memset(fix, 0, sizeof(*fix));
strcpy(fix->id, dinfo->name);
fix->smem_start = dinfo->fb.physical;
fix->smem_len = dinfo->fb.size;
fix->type = FB_TYPE_PACKED_PIXELS;
fix->type_aux = 0;
fix->visual = dinfo->visual;
fix->xpanstep = 8;
fix->ypanstep = 1;
fix->ywrapstep = 0;
fix->line_length = dinfo->pitch;
fix->mmio_start = dinfo->mmio_base_phys;
fix->mmio_len = INTEL_REG_SIZE;
fix->accel = FB_ACCEL_I830;
return 0;
}
/*************************************************************** /***************************************************************
* fbdev interface * * fbdev interface *
***************************************************************/ ***************************************************************/

View File

@ -47,7 +47,7 @@ config LOGO_SGI_CLUT224
config LOGO_SUN_CLUT224 config LOGO_SUN_CLUT224
bool "224-color Sun Linux logo" bool "224-color Sun Linux logo"
depends on LOGO && (SPARC32 || SPARC64) depends on LOGO && SPARC
default y default y
config LOGO_SUPERH_MONO config LOGO_SUPERH_MONO

View File

@ -46,6 +46,9 @@ int sbusfb_mmap_helper(struct sbus_mmap_map *map,
unsigned long off; unsigned long off;
int i; int i;
if (!(vma->vm_flags & (VM_SHARED | VM_MAYSHARE)))
return -EINVAL;
size = vma->vm_end - vma->vm_start; size = vma->vm_end - vma->vm_start;
if (vma->vm_pgoff > (~0UL >> PAGE_SHIFT)) if (vma->vm_pgoff > (~0UL >> PAGE_SHIFT))
return -EINVAL; return -EINVAL;

View File

@ -501,11 +501,16 @@ int hostfs_commit_write(struct file *file, struct page *page, unsigned from,
long long start; long long start;
int err = 0; int err = 0;
start = (long long) (page->index << PAGE_CACHE_SHIFT) + from; start = (((long long) page->index) << PAGE_CACHE_SHIFT) + from;
buffer = kmap(page); buffer = kmap(page);
err = write_file(FILE_HOSTFS_I(file)->fd, &start, buffer + from, err = write_file(FILE_HOSTFS_I(file)->fd, &start, buffer + from,
to - from); to - from);
if(err > 0) err = 0; if(err > 0) err = 0;
/* Actually, if !err, write_file has added to-from to start, so, despite
* the appearance, we are comparing i_size against the _last_ written
* location, as we should. */
if(!err && (start > inode->i_size)) if(!err && (start > inode->i_size))
inode->i_size = start; inode->i_size = start;
@ -910,10 +915,8 @@ static struct inode_operations hostfs_dir_iops = {
int hostfs_link_readpage(struct file *file, struct page *page) int hostfs_link_readpage(struct file *file, struct page *page)
{ {
char *buffer, *name; char *buffer, *name;
long long start;
int err; int err;
start = page->index << PAGE_CACHE_SHIFT;
buffer = kmap(page); buffer = kmap(page);
name = inode_name(page->mapping->host, 0); name = inode_name(page->mapping->host, 0);
if(name == NULL) return(-ENOMEM); if(name == NULL) return(-ENOMEM);

View File

@ -157,6 +157,8 @@ void nlmclnt_mark_reclaim(struct nlm_host *host)
inode = fl->fl_file->f_dentry->d_inode; inode = fl->fl_file->f_dentry->d_inode;
if (inode->i_sb->s_magic != NFS_SUPER_MAGIC) if (inode->i_sb->s_magic != NFS_SUPER_MAGIC)
continue; continue;
if (fl->fl_u.nfs_fl.owner == NULL)
continue;
if (fl->fl_u.nfs_fl.owner->host != host) if (fl->fl_u.nfs_fl.owner->host != host)
continue; continue;
if (!(fl->fl_u.nfs_fl.flags & NFS_LCK_GRANTED)) if (!(fl->fl_u.nfs_fl.flags & NFS_LCK_GRANTED))
@ -226,6 +228,8 @@ restart:
inode = fl->fl_file->f_dentry->d_inode; inode = fl->fl_file->f_dentry->d_inode;
if (inode->i_sb->s_magic != NFS_SUPER_MAGIC) if (inode->i_sb->s_magic != NFS_SUPER_MAGIC)
continue; continue;
if (fl->fl_u.nfs_fl.owner == NULL)
continue;
if (fl->fl_u.nfs_fl.owner->host != host) if (fl->fl_u.nfs_fl.owner->host != host)
continue; continue;
if (!(fl->fl_u.nfs_fl.flags & NFS_LCK_RECLAIM)) if (!(fl->fl_u.nfs_fl.flags & NFS_LCK_RECLAIM))

View File

@ -678,15 +678,9 @@ nfs_file_direct_read(struct kiocb *iocb, char __user *buf, size_t count, loff_t
if (!count) if (!count)
goto out; goto out;
if (mapping->nrpages) { retval = nfs_sync_mapping(mapping);
retval = filemap_fdatawrite(mapping); if (retval)
if (retval == 0) goto out;
retval = nfs_wb_all(inode);
if (retval == 0)
retval = filemap_fdatawait(mapping);
if (retval)
goto out;
}
retval = nfs_direct_read(inode, ctx, &iov, pos, 1); retval = nfs_direct_read(inode, ctx, &iov, pos, 1);
if (retval > 0) if (retval > 0)
@ -764,15 +758,9 @@ nfs_file_direct_write(struct kiocb *iocb, const char __user *buf, size_t count,
if (!count) if (!count)
goto out; goto out;
if (mapping->nrpages) { retval = nfs_sync_mapping(mapping);
retval = filemap_fdatawrite(mapping); if (retval)
if (retval == 0) goto out;
retval = nfs_wb_all(inode);
if (retval == 0)
retval = filemap_fdatawait(mapping);
if (retval)
goto out;
}
retval = nfs_direct_write(inode, ctx, &iov, pos, 1); retval = nfs_direct_write(inode, ctx, &iov, pos, 1);
if (mapping->nrpages) if (mapping->nrpages)

View File

@ -433,11 +433,7 @@ static int do_unlk(struct file *filp, int cmd, struct file_lock *fl)
* Flush all pending writes before doing anything * Flush all pending writes before doing anything
* with locks.. * with locks..
*/ */
filemap_fdatawrite(filp->f_mapping); nfs_sync_mapping(filp->f_mapping);
down(&inode->i_sem);
nfs_wb_all(inode);
up(&inode->i_sem);
filemap_fdatawait(filp->f_mapping);
/* NOTE: special case /* NOTE: special case
* If we're signalled while cleaning up locks on process exit, we * If we're signalled while cleaning up locks on process exit, we
@ -465,15 +461,8 @@ static int do_setlk(struct file *filp, int cmd, struct file_lock *fl)
* Flush all pending writes before doing anything * Flush all pending writes before doing anything
* with locks.. * with locks..
*/ */
status = filemap_fdatawrite(filp->f_mapping); status = nfs_sync_mapping(filp->f_mapping);
if (status == 0) { if (status != 0)
down(&inode->i_sem);
status = nfs_wb_all(inode);
up(&inode->i_sem);
if (status == 0)
status = filemap_fdatawait(filp->f_mapping);
}
if (status < 0)
goto out; goto out;
lock_kernel(); lock_kernel();
@ -497,11 +486,7 @@ static int do_setlk(struct file *filp, int cmd, struct file_lock *fl)
* Make sure we clear the cache whenever we try to get the lock. * Make sure we clear the cache whenever we try to get the lock.
* This makes locking act as a cache coherency point. * This makes locking act as a cache coherency point.
*/ */
filemap_fdatawrite(filp->f_mapping); nfs_sync_mapping(filp->f_mapping);
down(&inode->i_sem);
nfs_wb_all(inode); /* we may have slept */
up(&inode->i_sem);
filemap_fdatawait(filp->f_mapping);
nfs_zap_caches(inode); nfs_zap_caches(inode);
out: out:
rpc_clnt_sigunmask(NFS_CLIENT(inode), &oldset); rpc_clnt_sigunmask(NFS_CLIENT(inode), &oldset);
@ -524,7 +509,8 @@ static int nfs_lock(struct file *filp, int cmd, struct file_lock *fl)
return -EINVAL; return -EINVAL;
/* No mandatory locks over NFS */ /* No mandatory locks over NFS */
if ((inode->i_mode & (S_ISGID | S_IXGRP)) == S_ISGID) if ((inode->i_mode & (S_ISGID | S_IXGRP)) == S_ISGID &&
fl->fl_type != F_UNLCK)
return -ENOLCK; return -ENOLCK;
if (IS_GETLK(cmd)) if (IS_GETLK(cmd))

View File

@ -640,6 +640,27 @@ static int nfs_show_options(struct seq_file *m, struct vfsmount *mnt)
return 0; return 0;
} }
/**
* nfs_sync_mapping - helper to flush all mmapped dirty data to disk
*/
int nfs_sync_mapping(struct address_space *mapping)
{
int ret;
if (mapping->nrpages == 0)
return 0;
unmap_mapping_range(mapping, 0, 0, 0);
ret = filemap_fdatawrite(mapping);
if (ret != 0)
goto out;
ret = filemap_fdatawait(mapping);
if (ret != 0)
goto out;
ret = nfs_wb_all(mapping->host);
out:
return ret;
}
/* /*
* Invalidate the local caches * Invalidate the local caches
*/ */
@ -1179,11 +1200,8 @@ void nfs_revalidate_mapping(struct inode *inode, struct address_space *mapping)
struct nfs_inode *nfsi = NFS_I(inode); struct nfs_inode *nfsi = NFS_I(inode);
if (nfsi->cache_validity & NFS_INO_INVALID_DATA) { if (nfsi->cache_validity & NFS_INO_INVALID_DATA) {
if (S_ISREG(inode->i_mode)) { if (S_ISREG(inode->i_mode))
if (filemap_fdatawrite(mapping) == 0) nfs_sync_mapping(mapping);
filemap_fdatawait(mapping);
nfs_wb_all(inode);
}
invalidate_inode_pages2(mapping); invalidate_inode_pages2(mapping);
spin_lock(&inode->i_lock); spin_lock(&inode->i_lock);

View File

@ -107,7 +107,7 @@ static int nfsacld_proc_setacl(struct svc_rqst * rqstp,
dprintk("nfsd: SETACL(2acl) %s\n", SVCFH_fmt(&argp->fh)); dprintk("nfsd: SETACL(2acl) %s\n", SVCFH_fmt(&argp->fh));
fh = fh_copy(&resp->fh, &argp->fh); fh = fh_copy(&resp->fh, &argp->fh);
nfserr = fh_verify(rqstp, &resp->fh, 0, MAY_NOP); nfserr = fh_verify(rqstp, &resp->fh, 0, MAY_SATTR);
if (!nfserr) { if (!nfserr) {
nfserr = nfserrno( nfsd_set_posix_acl( nfserr = nfserrno( nfsd_set_posix_acl(

View File

@ -101,7 +101,7 @@ static int nfsd3_proc_setacl(struct svc_rqst * rqstp,
int nfserr = 0; int nfserr = 0;
fh = fh_copy(&resp->fh, &argp->fh); fh = fh_copy(&resp->fh, &argp->fh);
nfserr = fh_verify(rqstp, &resp->fh, 0, MAY_NOP); nfserr = fh_verify(rqstp, &resp->fh, 0, MAY_SATTR);
if (!nfserr) { if (!nfserr) {
nfserr = nfserrno( nfsd_set_posix_acl( nfserr = nfserrno( nfsd_set_posix_acl(

Some files were not shown because too many files have changed in this diff Show More