mirror of
https://github.com/torvalds/linux.git
synced 2024-11-28 23:21:31 +00:00
Merge branch 'master'
This commit is contained in:
commit
ac67c62473
@ -536,7 +536,7 @@ P: Mauro Carvalho Chehab
|
||||
M: mchehab@brturbo.com.br
|
||||
L: video4linux-list@redhat.com
|
||||
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
|
||||
|
||||
BUSLOGIC SCSI DRIVER
|
||||
@ -834,7 +834,7 @@ P: LinuxTV.org Project
|
||||
M: linux-dvb-maintainer@linuxtv.org
|
||||
L: linux-dvb@linuxtv.org (subscription required)
|
||||
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
|
||||
|
||||
EATA-DMA SCSI DRIVER
|
||||
@ -2896,7 +2896,7 @@ P: Mauro Carvalho Chehab
|
||||
M: mchehab@brturbo.com.br
|
||||
L: video4linux-list@redhat.com
|
||||
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
|
||||
|
||||
W1 DALLAS'S 1-WIRE BUS
|
||||
|
2
Makefile
2
Makefile
@ -1,7 +1,7 @@
|
||||
VERSION = 2
|
||||
PATCHLEVEL = 6
|
||||
SUBLEVEL = 15
|
||||
EXTRAVERSION =-rc6
|
||||
EXTRAVERSION =
|
||||
NAME=Sliding Snow Leopard
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
@ -131,7 +131,7 @@ __syscall_start:
|
||||
.long sys_wait4
|
||||
/* 115 */ .long sys_swapoff
|
||||
.long sys_sysinfo
|
||||
.long sys_ipc_wrapper
|
||||
.long sys_ipc
|
||||
.long sys_fsync
|
||||
.long sys_sigreturn_wrapper
|
||||
/* 120 */ .long sys_clone_wrapper
|
||||
@ -254,7 +254,7 @@ __syscall_start:
|
||||
.long sys_fremovexattr
|
||||
.long sys_tkill
|
||||
.long sys_sendfile64
|
||||
/* 240 */ .long sys_futex_wrapper
|
||||
/* 240 */ .long sys_futex
|
||||
.long sys_sched_setaffinity
|
||||
.long sys_sched_getaffinity
|
||||
.long sys_io_setup
|
||||
@ -284,7 +284,7 @@ __syscall_start:
|
||||
.long sys_fstatfs64
|
||||
.long sys_tgkill
|
||||
.long sys_utimes
|
||||
/* 270 */ .long sys_arm_fadvise64_64_wrapper
|
||||
/* 270 */ .long sys_arm_fadvise64_64
|
||||
.long sys_pciconfig_iobase
|
||||
.long sys_pciconfig_read
|
||||
.long sys_pciconfig_write
|
||||
@ -333,7 +333,7 @@ __syscall_start:
|
||||
.long sys_inotify_init
|
||||
.long sys_inotify_add_watch
|
||||
.long sys_inotify_rm_watch
|
||||
.long sys_mbind_wrapper
|
||||
.long sys_mbind
|
||||
/* 320 */ .long sys_get_mempolicy
|
||||
.long sys_set_mempolicy
|
||||
__syscall_end:
|
||||
|
@ -611,6 +611,47 @@ ENTRY(__switch_to)
|
||||
.globl __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:
|
||||
*
|
||||
@ -642,6 +683,8 @@ __kuser_helper_start:
|
||||
* The C flag is also set if *ptr was changed to allow for assembly
|
||||
* 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:
|
||||
*
|
||||
* #define atomic_add(ptr, val) \
|
||||
@ -698,10 +741,16 @@ __kuser_cmpxchg: @ 0xffff0fc0
|
||||
|
||||
#else
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
mcr p15, 0, r0, c7, c10, 5 @ dmb
|
||||
#endif
|
||||
ldrex r3, [r2]
|
||||
subs r3, r3, r0
|
||||
strexeq r3, r1, [r2]
|
||||
rsbs r0, r3, #0
|
||||
#ifdef CONFIG_SMP
|
||||
mcr p15, 0, r0, c7, c10, 5 @ dmb
|
||||
#endif
|
||||
mov pc, lr
|
||||
|
||||
#endif
|
||||
|
@ -145,7 +145,7 @@ ENTRY(vector_swi)
|
||||
#endif
|
||||
enable_irq
|
||||
|
||||
str r4, [sp, #-S_OFF]! @ push fifth arg
|
||||
stmdb sp!, {r4, r5} @ push fifth and sixth args
|
||||
|
||||
get_thread_info tsk
|
||||
ldr ip, [tsk, #TI_FLAGS] @ check for syscall tracing
|
||||
@ -204,7 +204,7 @@ ENTRY(sys_call_table)
|
||||
* Special system call wrappers
|
||||
*/
|
||||
@ r0 = syscall number
|
||||
@ r5 = syscall table
|
||||
@ r8 = syscall table
|
||||
.type sys_syscall, #function
|
||||
sys_syscall:
|
||||
eor scno, r0, #__NR_SYSCALL_BASE
|
||||
@ -255,22 +255,6 @@ sys_sigaltstack_wrapper:
|
||||
ldr r2, [sp, #S_OFF + S_SP]
|
||||
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
|
||||
* offset, we return EINVAL.
|
||||
|
@ -554,7 +554,9 @@ int dump_task_regs(struct task_struct *tsk, elf_gregset_t *regs)
|
||||
struct pt_regs ptregs;
|
||||
|
||||
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.xds &= 0xffff;
|
||||
ptregs.xes &= 0xffff;
|
||||
|
@ -1,7 +1,7 @@
|
||||
obj-y := i386.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
|
||||
|
||||
pci-y := fixup.o
|
||||
|
@ -1,7 +1,7 @@
|
||||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.15-rc1
|
||||
# Tue Nov 15 14:36:20 2005
|
||||
# Linux kernel version: 2.6.15-rc5
|
||||
# Tue Dec 20 15:59:26 2005
|
||||
#
|
||||
CONFIG_PPC64=y
|
||||
CONFIG_64BIT=y
|
||||
@ -53,6 +53,7 @@ CONFIG_KOBJECT_UEVENT=y
|
||||
# CONFIG_IKCONFIG is not set
|
||||
# CONFIG_CPUSETS is not set
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
# CONFIG_EMBEDDED is not set
|
||||
CONFIG_KALLSYMS=y
|
||||
# CONFIG_KALLSYMS_ALL is not set
|
||||
@ -151,7 +152,7 @@ CONFIG_FLATMEM_MANUAL=y
|
||||
CONFIG_FLATMEM=y
|
||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||
# CONFIG_SPARSEMEM_STATIC is not set
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4096
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||
# CONFIG_PPC_64K_PAGES is not set
|
||||
CONFIG_SCHED_SMT=y
|
||||
CONFIG_PROC_DEVICETREE=y
|
||||
|
@ -1,7 +1,7 @@
|
||||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.15-rc1
|
||||
# Tue Nov 15 14:39:20 2005
|
||||
# Linux kernel version: 2.6.15-rc5
|
||||
# Tue Dec 20 15:59:30 2005
|
||||
#
|
||||
CONFIG_PPC64=y
|
||||
CONFIG_64BIT=y
|
||||
@ -53,6 +53,7 @@ CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
# CONFIG_CPUSETS is not set
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
# CONFIG_EMBEDDED is not set
|
||||
CONFIG_KALLSYMS=y
|
||||
# CONFIG_KALLSYMS_ALL is not set
|
||||
@ -162,7 +163,7 @@ CONFIG_FLATMEM_MANUAL=y
|
||||
CONFIG_FLATMEM=y
|
||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||
# CONFIG_SPARSEMEM_STATIC is not set
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4096
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||
# CONFIG_PPC_64K_PAGES is not set
|
||||
# CONFIG_SCHED_SMT is not set
|
||||
CONFIG_PROC_DEVICETREE=y
|
||||
@ -1203,6 +1204,7 @@ CONFIG_USB_MON=y
|
||||
CONFIG_USB_SERIAL=m
|
||||
CONFIG_USB_SERIAL_GENERIC=y
|
||||
# CONFIG_USB_SERIAL_AIRPRIME is not set
|
||||
# CONFIG_USB_SERIAL_ANYDATA is not set
|
||||
CONFIG_USB_SERIAL_BELKIN=m
|
||||
CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
|
||||
# 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_KOBIL_SCT=m
|
||||
CONFIG_USB_SERIAL_MCT_U232=m
|
||||
# CONFIG_USB_SERIAL_NOKIA_DKU2 is not set
|
||||
CONFIG_USB_SERIAL_PL2303=m
|
||||
# CONFIG_USB_SERIAL_HP4X is not set
|
||||
CONFIG_USB_SERIAL_SAFE=m
|
||||
|
@ -1,7 +1,7 @@
|
||||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.15-rc1
|
||||
# Tue Nov 15 14:38:09 2005
|
||||
# Linux kernel version: 2.6.15-rc5
|
||||
# Tue Dec 20 15:59:32 2005
|
||||
#
|
||||
CONFIG_PPC64=y
|
||||
CONFIG_64BIT=y
|
||||
@ -55,6 +55,7 @@ CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
# CONFIG_CPUSETS is not set
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
# CONFIG_EMBEDDED is not set
|
||||
CONFIG_KALLSYMS=y
|
||||
# CONFIG_KALLSYMS_ALL is not set
|
||||
@ -144,7 +145,7 @@ CONFIG_FLATMEM_MANUAL=y
|
||||
CONFIG_FLATMEM=y
|
||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||
# CONFIG_SPARSEMEM_STATIC is not set
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4096
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||
# CONFIG_PPC_64K_PAGES is not set
|
||||
# CONFIG_SCHED_SMT is not set
|
||||
CONFIG_PROC_DEVICETREE=y
|
||||
|
@ -1,7 +1,7 @@
|
||||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.15-rc1
|
||||
# Tue Nov 15 14:38:58 2005
|
||||
# Linux kernel version: 2.6.15-rc5
|
||||
# Tue Dec 20 15:59:36 2005
|
||||
#
|
||||
CONFIG_PPC64=y
|
||||
CONFIG_64BIT=y
|
||||
@ -53,6 +53,7 @@ CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
# CONFIG_CPUSETS is not set
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
# CONFIG_EMBEDDED is not set
|
||||
CONFIG_KALLSYMS=y
|
||||
CONFIG_KALLSYMS_ALL=y
|
||||
@ -149,7 +150,7 @@ CONFIG_FLATMEM_MANUAL=y
|
||||
CONFIG_FLATMEM=y
|
||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||
# CONFIG_SPARSEMEM_STATIC is not set
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4096
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||
# CONFIG_PPC_64K_PAGES is not set
|
||||
# CONFIG_SCHED_SMT is not set
|
||||
CONFIG_PROC_DEVICETREE=y
|
||||
@ -242,7 +243,6 @@ CONFIG_TCP_CONG_BIC=y
|
||||
# QoS and/or fair queueing
|
||||
#
|
||||
# CONFIG_NET_SCHED is not set
|
||||
# CONFIG_NET_CLS_ROUTE is not set
|
||||
|
||||
#
|
||||
# Network testing
|
||||
@ -794,6 +794,7 @@ CONFIG_USB_SERIAL=y
|
||||
# CONFIG_USB_SERIAL_CONSOLE is not set
|
||||
CONFIG_USB_SERIAL_GENERIC=y
|
||||
# CONFIG_USB_SERIAL_AIRPRIME is not set
|
||||
# CONFIG_USB_SERIAL_ANYDATA is not set
|
||||
# CONFIG_USB_SERIAL_BELKIN is not set
|
||||
# CONFIG_USB_SERIAL_DIGI_ACCELEPORT 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_KOBIL_SCT 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_HP4X is not set
|
||||
# CONFIG_USB_SERIAL_SAFE is not set
|
||||
|
@ -1,7 +1,7 @@
|
||||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.15-rc1
|
||||
# Fri Nov 18 16:23:24 2005
|
||||
# Linux kernel version: 2.6.15-rc5
|
||||
# Tue Dec 20 15:59:38 2005
|
||||
#
|
||||
CONFIG_PPC64=y
|
||||
CONFIG_64BIT=y
|
||||
@ -54,6 +54,7 @@ CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_CPUSETS=y
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
# CONFIG_EMBEDDED is not set
|
||||
CONFIG_KALLSYMS=y
|
||||
CONFIG_KALLSYMS_ALL=y
|
||||
@ -176,7 +177,7 @@ CONFIG_HAVE_MEMORY_PRESENT=y
|
||||
# CONFIG_SPARSEMEM_STATIC is not set
|
||||
CONFIG_SPARSEMEM_EXTREME=y
|
||||
# CONFIG_MEMORY_HOTPLUG is not set
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4096
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||
# CONFIG_PPC_64K_PAGES is not set
|
||||
# CONFIG_SCHED_SMT is not set
|
||||
CONFIG_PROC_DEVICETREE=y
|
||||
|
@ -1,7 +1,7 @@
|
||||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.15-rc1
|
||||
# Tue Nov 15 14:36:55 2005
|
||||
# Linux kernel version: 2.6.15-rc5
|
||||
# Tue Dec 20 15:59:40 2005
|
||||
#
|
||||
CONFIG_PPC64=y
|
||||
CONFIG_64BIT=y
|
||||
@ -55,6 +55,7 @@ CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_CPUSETS=y
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
# CONFIG_EMBEDDED is not set
|
||||
CONFIG_KALLSYMS=y
|
||||
CONFIG_KALLSYMS_ALL=y
|
||||
@ -163,7 +164,7 @@ CONFIG_HAVE_MEMORY_PRESENT=y
|
||||
# CONFIG_SPARSEMEM_STATIC is not set
|
||||
CONFIG_SPARSEMEM_EXTREME=y
|
||||
# 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_PPC_64K_PAGES is not set
|
||||
CONFIG_SCHED_SMT=y
|
||||
|
@ -183,8 +183,8 @@ syscall_exit_trace_cont:
|
||||
ld r13,GPR13(r1) /* returning to usermode */
|
||||
1: ld r2,GPR2(r1)
|
||||
li r12,MSR_RI
|
||||
andc r10,r10,r12
|
||||
mtmsrd r10,1 /* clear MSR.RI */
|
||||
andc r11,r10,r12
|
||||
mtmsrd r11,1 /* clear MSR.RI */
|
||||
ld r1,GPR1(r1)
|
||||
mtlr r4
|
||||
mtcr r5
|
||||
|
@ -514,7 +514,7 @@ void __init htab_initialize(void)
|
||||
#undef KB
|
||||
#undef MB
|
||||
|
||||
void __init htab_initialize_secondary(void)
|
||||
void htab_initialize_secondary(void)
|
||||
{
|
||||
if (!platform_is_lpar())
|
||||
mtspr(SPRN_SDR1, _SDR1);
|
||||
|
@ -48,11 +48,6 @@ static struct hw_interrupt_type xics_pic = {
|
||||
.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 */
|
||||
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 */
|
||||
if (vec == xics_irq_8259_cascade_real) {
|
||||
irq = i8259_irq(regs);
|
||||
if (irq == -1) {
|
||||
/* Spurious cascaded interrupt. Still must ack xics */
|
||||
xics_end_irq(irq_offset_up(xics_irq_8259_cascade));
|
||||
|
||||
irq = -1;
|
||||
}
|
||||
xics_end_irq(irq_offset_up(xics_irq_8259_cascade));
|
||||
} else if (vec == XICS_IRQ_SPURIOUS) {
|
||||
irq = -1;
|
||||
} else {
|
||||
@ -542,6 +532,7 @@ nextnode:
|
||||
xics_irq_8259_cascade_real = *ireg;
|
||||
xics_irq_8259_cascade
|
||||
= virt_irq_create_mapping(xics_irq_8259_cascade_real);
|
||||
i8259_init(0, 0);
|
||||
of_node_put(np);
|
||||
}
|
||||
|
||||
@ -565,12 +556,7 @@ nextnode:
|
||||
#endif /* CONFIG_SMP */
|
||||
}
|
||||
|
||||
xics_8259_pic.enable = i8259_pic.enable;
|
||||
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)
|
||||
for (i = irq_offset_value(); i < NR_IRQS; ++i)
|
||||
get_irq_desc(i)->handler = &xics_pic;
|
||||
|
||||
xics_setup_cpu();
|
||||
@ -590,7 +576,6 @@ static int __init xics_setup_i8259(void)
|
||||
no_action, 0, "8259 cascade", NULL))
|
||||
printk(KERN_ERR "xics_setup_i8259: couldn't get 8259 "
|
||||
"cascade\n");
|
||||
i8259_init(0, 0);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -130,10 +130,11 @@ mpc85xx_cds_show_cpuinfo(struct seq_file *m)
|
||||
}
|
||||
|
||||
#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)
|
||||
__do_IRQ(irq, regs);
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
static struct irqaction cpm2_irqaction = {
|
||||
|
@ -55,6 +55,10 @@ config NR_CPUS
|
||||
depends on SMP
|
||||
default "32"
|
||||
|
||||
config SPARC
|
||||
bool
|
||||
default y
|
||||
|
||||
# Identify this as a Sparc32 build
|
||||
config SPARC32
|
||||
bool
|
||||
|
@ -894,7 +894,7 @@ asmlinkage long sunos_sysconf (int name)
|
||||
ret = ARG_MAX;
|
||||
break;
|
||||
case _SC_CHILD_MAX:
|
||||
ret = CHILD_MAX;
|
||||
ret = -1; /* no limit */
|
||||
break;
|
||||
case _SC_CLK_TCK:
|
||||
ret = HZ;
|
||||
|
@ -85,19 +85,9 @@ SECTIONS
|
||||
}
|
||||
_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) }
|
||||
|
||||
STABS_DEBUG
|
||||
|
||||
DWARF_DEBUG
|
||||
}
|
||||
|
@ -5,6 +5,10 @@
|
||||
|
||||
mainmenu "Linux/UltraSPARC Kernel Configuration"
|
||||
|
||||
config SPARC
|
||||
bool
|
||||
default y
|
||||
|
||||
config SPARC64
|
||||
bool
|
||||
default y
|
||||
|
@ -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_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; )
|
||||
INLINE_LIMIT := $(call cc-option-yn, -m64 -finline-limit=100000)
|
||||
|
||||
export NEW_GCC
|
||||
|
||||
@ -49,10 +48,6 @@ else
|
||||
AFLAGS += -m64 -mcpu=ultrasparc $(CC_UNDECL)
|
||||
endif
|
||||
|
||||
ifeq ($(INLINE_LIMIT),y)
|
||||
CFLAGS := $(CFLAGS) -finline-limit=100000
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_MCOUNT),y)
|
||||
CFLAGS := $(CFLAGS) -pg
|
||||
endif
|
||||
|
@ -854,7 +854,7 @@ asmlinkage s32 sunos_sysconf (int name)
|
||||
ret = ARG_MAX;
|
||||
break;
|
||||
case _SC_CHILD_MAX:
|
||||
ret = CHILD_MAX;
|
||||
ret = -1; /* no limit */
|
||||
break;
|
||||
case _SC_CLK_TCK:
|
||||
ret = HZ;
|
||||
|
@ -90,19 +90,9 @@ SECTIONS
|
||||
}
|
||||
_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) }
|
||||
|
||||
STABS_DEBUG
|
||||
|
||||
DWARF_DEBUG
|
||||
}
|
||||
|
@ -353,7 +353,7 @@ asmlinkage int solaris_sysconf(int id)
|
||||
{
|
||||
switch (id) {
|
||||
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_POSIX_VER: return 199309;
|
||||
case SOLARIS_CONFIG_PAGESIZE: return PAGE_SIZE;
|
||||
|
@ -116,16 +116,16 @@ static int stop_ptraced_child(int pid, void *stack, int exitcode,
|
||||
if(!WIFEXITED(status) || (WEXITSTATUS(status) != exitcode)) {
|
||||
int exit_with = WEXITSTATUS(status);
|
||||
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 "
|
||||
"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,
|
||||
exitcode, status);
|
||||
if (mustpanic)
|
||||
panic("\n");
|
||||
else
|
||||
printk("\n");
|
||||
printf("\n");
|
||||
ret = -1;
|
||||
}
|
||||
|
||||
@ -183,7 +183,7 @@ static void __init check_sysemu(void)
|
||||
void *stack;
|
||||
int pid, n, status, count=0;
|
||||
|
||||
printk("Checking syscall emulation patch for ptrace...");
|
||||
printf("Checking syscall emulation patch for ptrace...");
|
||||
sysemu_supported = 0;
|
||||
pid = start_ptraced_child(&stack);
|
||||
|
||||
@ -207,10 +207,10 @@ static void __init check_sysemu(void)
|
||||
goto fail_stopped;
|
||||
|
||||
sysemu_supported = 1;
|
||||
printk("OK\n");
|
||||
printf("OK\n");
|
||||
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);
|
||||
|
||||
if(ptrace(PTRACE_OLDSETOPTIONS, pid, 0,
|
||||
@ -246,7 +246,7 @@ static void __init check_sysemu(void)
|
||||
goto fail_stopped;
|
||||
|
||||
sysemu_supported = 2;
|
||||
printk("OK\n");
|
||||
printf("OK\n");
|
||||
|
||||
if ( !force_sysemu_disabled )
|
||||
set_using_sysemu(sysemu_supported);
|
||||
@ -255,7 +255,7 @@ static void __init check_sysemu(void)
|
||||
fail:
|
||||
stop_ptraced_child(pid, stack, 1, 0);
|
||||
fail_stopped:
|
||||
printk("missing\n");
|
||||
printf("missing\n");
|
||||
}
|
||||
|
||||
static void __init check_ptrace(void)
|
||||
@ -263,7 +263,7 @@ static void __init check_ptrace(void)
|
||||
void *stack;
|
||||
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);
|
||||
|
||||
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);
|
||||
printk("OK\n");
|
||||
printf("OK\n");
|
||||
check_sysemu();
|
||||
}
|
||||
|
||||
@ -472,6 +472,8 @@ int can_do_skas(void)
|
||||
|
||||
int have_devanon = 0;
|
||||
|
||||
/* Runs on boot kernel stack - already safe to use printk. */
|
||||
|
||||
void check_devanon(void)
|
||||
{
|
||||
int fd;
|
||||
|
@ -34,6 +34,11 @@ EXPORT_SYMBOL(strstr);
|
||||
int sym(void); \
|
||||
EXPORT_SYMBOL(sym);
|
||||
|
||||
extern void readdir64(void) __attribute__((weak));
|
||||
EXPORT_SYMBOL(readdir64);
|
||||
extern void truncate64(void) __attribute__((weak));
|
||||
EXPORT_SYMBOL(truncate64);
|
||||
|
||||
#ifdef SUBARCH_i386
|
||||
EXPORT_SYMBOL(vsyscall_ehdr);
|
||||
EXPORT_SYMBOL(vsyscall_end);
|
||||
|
@ -1,6 +1,8 @@
|
||||
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 \
|
||||
syscalls.o sysrq.o sys_call_table.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 syscalls.o sysrq.o \
|
||||
sys_call_table.o
|
||||
|
||||
obj-$(CONFIG_MODE_SKAS) += stub.o stub_segv.o
|
||||
|
||||
obj-$(CONFIG_HIGHMEM) += highmem.o
|
||||
obj-$(CONFIG_MODULES) += module.o
|
||||
|
@ -6,8 +6,9 @@
|
||||
|
||||
#XXX: why into lib-y?
|
||||
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 \
|
||||
stub_segv.o syscalls.o syscall_table.o sysrq.o thunk.o
|
||||
ptrace.o ptrace_user.o sigcontext.o signal.o syscalls.o \
|
||||
syscall_table.o sysrq.o thunk.o
|
||||
lib-$(CONFIG_MODE_SKAS) += stub.o stub_segv.o
|
||||
|
||||
obj-y := ksyms.o
|
||||
obj-$(CONFIG_MODULES) += module.o um_module.o
|
||||
|
@ -348,7 +348,7 @@ size_zones(unsigned long *z, unsigned long *h,
|
||||
}
|
||||
|
||||
/* Compute holes */
|
||||
w = 0;
|
||||
w = start_pfn;
|
||||
for (i = 0; i < MAX_NR_ZONES; i++) {
|
||||
unsigned long s = w;
|
||||
w += z[i];
|
||||
|
@ -11,7 +11,7 @@ obj-y += fixup.o
|
||||
obj-$(CONFIG_ACPI) += acpi.o
|
||||
obj-y += legacy.o irq.o common.o
|
||||
# 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
|
||||
|
||||
|
@ -442,11 +442,37 @@ error:
|
||||
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)
|
||||
{
|
||||
request_queue_t *q;
|
||||
struct request *rq;
|
||||
int close = 0, err;
|
||||
int err;
|
||||
|
||||
q = bd_disk->queue;
|
||||
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);
|
||||
break;
|
||||
case CDROMCLOSETRAY:
|
||||
close = 1;
|
||||
err = blk_send_start_stop(q, bd_disk, 0x03);
|
||||
break;
|
||||
case CDROMEJECT:
|
||||
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] = 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);
|
||||
err = blk_send_start_stop(q, bd_disk, 0x02);
|
||||
break;
|
||||
default:
|
||||
err = -ENOTTY;
|
||||
|
@ -274,8 +274,6 @@ static void acpi_processor_idle(void)
|
||||
}
|
||||
}
|
||||
|
||||
cx->usage++;
|
||||
|
||||
#ifdef CONFIG_HOTPLUG_CPU
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
if ((cx->type != ACPI_STATE_C1) && (num_online_cpus() > 1) &&
|
||||
!pr->flags.has_cst && acpi_fadt.plvl2_up)
|
||||
cx->type = ACPI_STATE_C1;
|
||||
!pr->flags.has_cst && !acpi_fadt.plvl2_up)
|
||||
cx = &pr->power.states[ACPI_STATE_C1];
|
||||
#endif
|
||||
|
||||
cx->usage++;
|
||||
|
||||
/*
|
||||
* Sleep:
|
||||
* ------
|
||||
@ -386,6 +387,15 @@ static void acpi_processor_idle(void)
|
||||
|
||||
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?
|
||||
* ----------
|
||||
@ -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
|
||||
* an SMP system.
|
||||
*/
|
||||
if ((num_online_cpus() > 1) && acpi_fadt.plvl2_up)
|
||||
if ((num_online_cpus() > 1) && !acpi_fadt.plvl2_up)
|
||||
return_VALUE(-ENODEV);
|
||||
#endif
|
||||
|
||||
|
@ -102,8 +102,8 @@ static int cpu_has_cpufreq(unsigned int cpu)
|
||||
{
|
||||
struct cpufreq_policy policy;
|
||||
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)
|
||||
|
@ -84,14 +84,14 @@ acpi_status acpi_ut_allocate_owner_id(acpi_owner_id * owner_id)
|
||||
|
||||
/* Find a free owner ID */
|
||||
|
||||
for (i = 0; i < 32; i++) {
|
||||
if (!(acpi_gbl_owner_id_mask & (1 << i))) {
|
||||
for (i = 0; i < 64; i++) {
|
||||
if (!(acpi_gbl_owner_id_mask & (1ULL << i))) {
|
||||
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,
|
||||
(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);
|
||||
goto exit;
|
||||
}
|
||||
@ -106,7 +106,7 @@ acpi_status acpi_ut_allocate_owner_id(acpi_owner_id * owner_id)
|
||||
*/
|
||||
*owner_id = 0;
|
||||
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:
|
||||
(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
|
||||
* 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 */
|
||||
|
||||
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));
|
||||
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 */
|
||||
|
||||
if (acpi_gbl_owner_id_mask & (1 << owner_id)) {
|
||||
acpi_gbl_owner_id_mask ^= (1 << owner_id);
|
||||
if (acpi_gbl_owner_id_mask & (1ULL << owner_id)) {
|
||||
acpi_gbl_owner_id_mask ^= (1ULL << owner_id);
|
||||
}
|
||||
|
||||
(void)acpi_ut_release_mutex(ACPI_MTX_CACHES);
|
||||
|
@ -687,7 +687,7 @@ config NVRAM
|
||||
|
||||
config RTC
|
||||
tristate "Enhanced Real Time Clock Support"
|
||||
depends on !PPC32 && !PARISC && !IA64 && !M68K
|
||||
depends on !PPC32 && !PARISC && !IA64 && !M68K && (!SPARC || PCI)
|
||||
---help---
|
||||
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
|
||||
@ -735,7 +735,7 @@ config SGI_IP27_RTC
|
||||
|
||||
config GEN_RTC
|
||||
tristate "Generic /dev/rtc emulation"
|
||||
depends on RTC!=y && !IA64 && !ARM && !M32R && !SPARC32 && !SPARC64
|
||||
depends on RTC!=y && !IA64 && !ARM && !M32R && !SPARC
|
||||
---help---
|
||||
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
|
||||
|
@ -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)
|
||||
{
|
||||
drm_radeon_private_t *dev_priv = dev->dev_private;
|
||||
unsigned int mem_size;
|
||||
|
||||
DRM_DEBUG("\n");
|
||||
|
||||
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->gart_size = init->gart_size;
|
||||
|
||||
mem_size = RADEON_READ(RADEON_CONFIG_MEMSIZE);
|
||||
if (mem_size == 0)
|
||||
mem_size = 0x800000;
|
||||
dev_priv->gart_vm_start = dev_priv->fb_location + mem_size;
|
||||
dev_priv->gart_vm_start = dev_priv->fb_location
|
||||
+ RADEON_READ(RADEON_CONFIG_APER_SIZE);
|
||||
|
||||
#if __OS_HAS_AGP
|
||||
if (!dev_priv->is_pci)
|
||||
|
@ -930,8 +930,8 @@ static void kbd_refresh_leds(struct input_handle *handle)
|
||||
}
|
||||
|
||||
#if defined(CONFIG_X86) || defined(CONFIG_IA64) || defined(CONFIG_ALPHA) ||\
|
||||
defined(CONFIG_MIPS) || defined(CONFIG_PPC) || defined(CONFIG_SPARC32) ||\
|
||||
defined(CONFIG_SPARC64) || defined(CONFIG_PARISC) || defined(CONFIG_SUPERH) ||\
|
||||
defined(CONFIG_MIPS) || defined(CONFIG_PPC) || defined(CONFIG_SPARC) ||\
|
||||
defined(CONFIG_PARISC) || defined(CONFIG_SUPERH) ||\
|
||||
(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) &&\
|
||||
@ -958,7 +958,7 @@ static unsigned short x86_keycodes[256] =
|
||||
extern int mac_hid_mouse_emulate_buttons(int, int, int);
|
||||
#endif /* CONFIG_MAC_EMUMOUSEBTN */
|
||||
|
||||
#if defined(CONFIG_SPARC32) || defined(CONFIG_SPARC64)
|
||||
#ifdef CONFIG_SPARC
|
||||
static int sparc_l1_a_state = 0;
|
||||
extern void sun_do_break(void);
|
||||
#endif
|
||||
@ -1045,7 +1045,7 @@ static void kbd_keycode(unsigned int keycode, int down,
|
||||
|
||||
if (keycode == KEY_LEFTALT || keycode == KEY_RIGHTALT)
|
||||
sysrq_alt = down;
|
||||
#if defined(CONFIG_SPARC32) || defined(CONFIG_SPARC64)
|
||||
#ifdef CONFIG_SPARC
|
||||
if (keycode == KEY_STOP)
|
||||
sparc_l1_a_state = down;
|
||||
#endif
|
||||
@ -1072,7 +1072,7 @@ static void kbd_keycode(unsigned int keycode, int down,
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
#if defined(CONFIG_SPARC32) || defined(CONFIG_SPARC64)
|
||||
#ifdef CONFIG_SPARC
|
||||
if (keycode == KEY_A && sparc_l1_a_state) {
|
||||
sparc_l1_a_state = 0;
|
||||
sun_do_break();
|
||||
|
@ -419,7 +419,7 @@ vcs_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos)
|
||||
while (this_round > 1) {
|
||||
unsigned short w;
|
||||
|
||||
w = get_unaligned(((const unsigned short *)con_buf0));
|
||||
w = get_unaligned(((unsigned short *)con_buf0));
|
||||
vcs_scr_writew(vc, w, org++);
|
||||
con_buf0 += 2;
|
||||
this_round -= 2;
|
||||
|
@ -26,7 +26,7 @@ comment "FC4 drivers"
|
||||
|
||||
config FC4_SOC
|
||||
tristate "Sun SOC/Sbus"
|
||||
depends on FC4!=n && (SPARC32 || SPARC64)
|
||||
depends on FC4!=n && SPARC
|
||||
help
|
||||
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
|
||||
@ -38,7 +38,7 @@ config FC4_SOC
|
||||
|
||||
config FC4_SOCAL
|
||||
tristate "Sun SOC+ (aka SOCAL)"
|
||||
depends on FC4!=n && (SPARC32 || SPARC64)
|
||||
depends on FC4!=n && SPARC
|
||||
---help---
|
||||
Serial Optical Channel Plus is an interface card with up to two
|
||||
Fibre Optic ports. This card supports FC Arbitrated Loop (usually
|
||||
@ -62,7 +62,7 @@ config SCSI_PLUTO
|
||||
be called pluto.
|
||||
|
||||
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
|
||||
help
|
||||
This driver drives FC-AL disks connected through a Fibre Channel
|
||||
@ -75,7 +75,7 @@ config SCSI_FCAL
|
||||
|
||||
config SCSI_FCAL
|
||||
prompt "Generic FC-AL disk driver"
|
||||
depends on FC4!=n && SCSI && !SPARC32 && !SPARC64
|
||||
depends on FC4!=n && SCSI && !SPARC
|
||||
|
||||
endmenu
|
||||
|
||||
|
@ -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_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_HAT0Y, -1, 1, 0, 0);
|
||||
|
||||
serio_set_drvdata(serio, warrior);
|
||||
|
||||
|
@ -26,7 +26,7 @@ config INPUT_PCSPKR
|
||||
|
||||
config INPUT_SPARCSPKR
|
||||
tristate "SPARC Speaker support"
|
||||
depends on PCI && (SPARC32 || SPARC64)
|
||||
depends on PCI && SPARC
|
||||
help
|
||||
Say Y here if you want the standard Speaker on Sparc PCI systems
|
||||
to be used for bells and whistles.
|
||||
|
@ -95,7 +95,7 @@ static void sermouse_process_msc(struct sermouse *sermouse, signed char data, st
|
||||
|
||||
input_sync(dev);
|
||||
|
||||
if (++sermouse->count == (5 - ((sermouse->type == SERIO_SUN) << 1)))
|
||||
if (++sermouse->count == 5)
|
||||
sermouse->count = 0;
|
||||
}
|
||||
|
||||
|
@ -21,7 +21,7 @@
|
||||
#include "i8042-ip22io.h"
|
||||
#elif defined(CONFIG_PPC)
|
||||
#include "i8042-ppcio.h"
|
||||
#elif defined(CONFIG_SPARC32) || defined(CONFIG_SPARC64)
|
||||
#elif defined(CONFIG_SPARC)
|
||||
#include "i8042-sparcio.h"
|
||||
#elif defined(CONFIG_X86) || defined(CONFIG_IA64)
|
||||
#include "i8042-x86ia64io.h"
|
||||
|
@ -923,7 +923,7 @@ static void do_monitor_cpu_combined(void)
|
||||
if (temp_combi >= ((state0->mpu.tmax + 8) << 16)) {
|
||||
printk(KERN_WARNING "Warning ! Temperature way above maximum (%d) !\n",
|
||||
temp_combi >> 16);
|
||||
state0->overtemp = CPU_MAX_OVERTEMP;
|
||||
state0->overtemp += CPU_MAX_OVERTEMP / 4;
|
||||
} else if (temp_combi > (state0->mpu.tmax << 16))
|
||||
state0->overtemp++;
|
||||
else
|
||||
@ -933,7 +933,7 @@ static void do_monitor_cpu_combined(void)
|
||||
if (state0->overtemp > 0) {
|
||||
state0->rpm = state0->mpu.rmaxn_exhaust_fan;
|
||||
state0->intake_rpm = intake = state0->mpu.rmaxn_intake_fan;
|
||||
pump = state0->pump_min;
|
||||
pump = state0->pump_max;
|
||||
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"
|
||||
" (%d) !\n",
|
||||
state->index, temp >> 16);
|
||||
state->overtemp = CPU_MAX_OVERTEMP;
|
||||
state->overtemp += CPU_MAX_OVERTEMP / 4;
|
||||
} else if (temp > (state->mpu.tmax << 16))
|
||||
state->overtemp++;
|
||||
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"
|
||||
" (%d) !\n",
|
||||
state->index, temp >> 16);
|
||||
state->overtemp = CPU_MAX_OVERTEMP;
|
||||
state->overtemp = CPU_MAX_OVERTEMP / 4;
|
||||
} else if (temp > (state->mpu.tmax << 16))
|
||||
state->overtemp++;
|
||||
else
|
||||
|
@ -1729,7 +1729,7 @@ level_show(mddev_t *mddev, char *page)
|
||||
if (p == NULL && mddev->raid_disks == 0)
|
||||
return 0;
|
||||
if (mddev->level >= 0)
|
||||
return sprintf(page, "RAID-%d\n", mddev->level);
|
||||
return sprintf(page, "raid%d\n", mddev->level);
|
||||
else
|
||||
return sprintf(page, "%s\n", p->name);
|
||||
}
|
||||
|
@ -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);
|
||||
if (ret < 0)
|
||||
printk("dvb-ttpci:cannot set volume :%d\n",ret);
|
||||
|
@ -143,7 +143,8 @@ enum av7110_audio_command {
|
||||
MainSwitch,
|
||||
ADSwitch,
|
||||
SendDiSEqC,
|
||||
SetRegister
|
||||
SetRegister,
|
||||
SpdifSwitch
|
||||
};
|
||||
|
||||
enum av7110_request_command {
|
||||
|
@ -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)
|
||||
{
|
||||
u8 fmt;
|
||||
u8 fmt=0; /* zero is autodetect */
|
||||
|
||||
switch (std) {
|
||||
/* zero is autodetect */
|
||||
case 0: fmt = 0x0; break;
|
||||
/* default ntsc to ntsc-m */
|
||||
case V4L2_STD_NTSC:
|
||||
case V4L2_STD_NTSC_M: fmt = 0x1; break;
|
||||
case V4L2_STD_NTSC_M_JP: fmt = 0x2; break;
|
||||
case V4L2_STD_NTSC_443: fmt = 0x3; break;
|
||||
case V4L2_STD_PAL: fmt = 0x4; break;
|
||||
case V4L2_STD_PAL_M: fmt = 0x5; break;
|
||||
case V4L2_STD_PAL_N: fmt = 0x6; break;
|
||||
case V4L2_STD_PAL_Nc: fmt = 0x7; break;
|
||||
case V4L2_STD_PAL_60: fmt = 0x8; break;
|
||||
case V4L2_STD_SECAM: fmt = 0xc; break;
|
||||
default:
|
||||
return -ERANGE;
|
||||
/* First tests should be against specific std */
|
||||
if (std & V4L2_STD_NTSC_M_JP) {
|
||||
fmt=0x2;
|
||||
} else if (std & V4L2_STD_NTSC_443) {
|
||||
fmt=0x3;
|
||||
} else if (std & V4L2_STD_PAL_M) {
|
||||
fmt=0x5;
|
||||
} else if (std & V4L2_STD_PAL_N) {
|
||||
fmt=0x6;
|
||||
} else if (std & V4L2_STD_PAL_Nc) {
|
||||
fmt=0x7;
|
||||
} else if (std & V4L2_STD_PAL_60) {
|
||||
fmt=0x8;
|
||||
} else {
|
||||
/* Then, test against generic ones */
|
||||
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);
|
||||
|
@ -39,7 +39,7 @@ MODULE_PARM_DESC(core_debug,"enable debug messages [core]");
|
||||
#define em28xx_coredbg(fmt, arg...) do {\
|
||||
if (core_debug) \
|
||||
printk(KERN_INFO "%s %s :"fmt, \
|
||||
dev->name, __FUNCTION__, ##arg); } while (0)
|
||||
dev->name, __FUNCTION__ , ##arg); } while (0)
|
||||
|
||||
static unsigned int reg_debug;
|
||||
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 {\
|
||||
if (reg_debug) \
|
||||
printk(KERN_INFO "%s %s :"fmt, \
|
||||
dev->name, __FUNCTION__, ##arg); } while (0)
|
||||
dev->name, __FUNCTION__ , ##arg); } while (0)
|
||||
|
||||
static unsigned int isoc_debug;
|
||||
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 {\
|
||||
if (isoc_debug) \
|
||||
printk(KERN_INFO "%s %s :"fmt, \
|
||||
dev->name, __FUNCTION__, ##arg); } while (0)
|
||||
dev->name, __FUNCTION__ , ##arg); } while (0)
|
||||
|
||||
static int alt = EM28XX_PINOUT;
|
||||
module_param(alt, int, 0644);
|
||||
|
@ -44,7 +44,7 @@ MODULE_PARM_DESC(i2c_debug, "enable debug messages [i2c]");
|
||||
printk(fmt, ##args); } while (0)
|
||||
#define dprintk2(lvl,fmt, args...) if (i2c_debug>=lvl) do{ \
|
||||
printk(KERN_DEBUG "%s at %s: " fmt, \
|
||||
dev->name, __FUNCTION__, ##args); } while (0)
|
||||
dev->name, __FUNCTION__ , ##args); } while (0)
|
||||
|
||||
/*
|
||||
* em2800_i2c_send_max4()
|
||||
|
@ -45,7 +45,7 @@
|
||||
#define em28xx_videodbg(fmt, arg...) do {\
|
||||
if (video_debug) \
|
||||
printk(KERN_INFO "%s %s :"fmt, \
|
||||
dev->name, __FUNCTION__, ##arg); } while (0)
|
||||
dev->name, __FUNCTION__ , ##arg); } while (0)
|
||||
|
||||
MODULE_AUTHOR(DRIVER_AUTHOR);
|
||||
MODULE_DESCRIPTION(DRIVER_DESC);
|
||||
|
@ -392,18 +392,18 @@ extern const unsigned int em28xx_bcount;
|
||||
/* printk macros */
|
||||
|
||||
#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 {\
|
||||
printk(KERN_ERR "%s: "fmt,\
|
||||
dev->name, ##arg); } while (0)
|
||||
dev->name , ##arg); } while (0)
|
||||
|
||||
#define em28xx_info(fmt, arg...) do {\
|
||||
printk(KERN_INFO "%s: "fmt,\
|
||||
dev->name, ##arg); } while (0)
|
||||
dev->name , ##arg); } while (0)
|
||||
#define em28xx_warn(fmt, arg...) do {\
|
||||
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)
|
||||
{
|
||||
|
@ -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)
|
||||
{
|
||||
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);
|
||||
|
||||
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) {
|
||||
saa7127_dbg("Turn CC %s\n", enable ? "on" : "off");
|
||||
saa7127_write(client, SAA7127_REG_CLOSED_CAPTION,
|
||||
(enable << 6) | 0x11);
|
||||
(state->xds_enable << 7) | (enable << 6) | 0x11);
|
||||
state->cc_enable = 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) {
|
||||
saa7127_dbg("Turn XDS %s\n", enable ? "on" : "off");
|
||||
saa7127_write(client, SAA7127_REG_CLOSED_CAPTION,
|
||||
(enable << 7) | 0x11);
|
||||
(enable << 7) | (state->cc_enable << 6) | 0x11);
|
||||
state->xds_enable = enable;
|
||||
}
|
||||
if (!enable)
|
||||
|
@ -1,11 +1,10 @@
|
||||
config VIDEO_SAA7134
|
||||
tristate "Philips SAA7134 support"
|
||||
depends on VIDEO_DEV && PCI && I2C && SOUND && SND
|
||||
depends on VIDEO_DEV && PCI && I2C
|
||||
select VIDEO_BUF
|
||||
select VIDEO_IR
|
||||
select VIDEO_TUNER
|
||||
select CRC32
|
||||
select SND_PCM_OSS
|
||||
---help---
|
||||
This is a video4linux driver for Philips SAA713x based
|
||||
TV cards.
|
||||
@ -13,6 +12,29 @@ config VIDEO_SAA7134
|
||||
To compile this driver as a module, choose M here: the
|
||||
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
|
||||
tristate "DVB/ATSC Support for saa7134 based TV cards"
|
||||
depends on VIDEO_SAA7134 && DVB_CORE
|
||||
|
@ -4,8 +4,11 @@ saa7134-objs := saa7134-cards.o saa7134-core.o saa7134-i2c.o \
|
||||
saa7134-video.o saa7134-input.o
|
||||
|
||||
obj-$(CONFIG_VIDEO_SAA7134) += saa7134.o saa7134-empress.o \
|
||||
saa6752hs.o saa7134-alsa.o \
|
||||
saa7134-oss.o
|
||||
saa6752hs.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
|
||||
|
||||
EXTRA_CFLAGS += -I$(src)/..
|
||||
|
@ -60,7 +60,7 @@ module_param_array(index, int, NULL, 0444);
|
||||
MODULE_PARM_DESC(index, "Index value for SAA7134 capture interface(s).");
|
||||
|
||||
#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 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");
|
||||
|
||||
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)
|
||||
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]);
|
||||
}
|
||||
|
||||
dmasound_init = NULL;
|
||||
dmasound_exit = NULL;
|
||||
printk(KERN_INFO "saa7134 ALSA driver for DMA sound unloaded\n");
|
||||
|
||||
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_LICENSE("GPL");
|
||||
MODULE_AUTHOR("Ricardo Cerqueira");
|
||||
|
@ -959,8 +959,17 @@ static int saa7134_oss_init(void)
|
||||
struct saa7134_dev *dev = NULL;
|
||||
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");
|
||||
|
||||
|
||||
list_for_each(list,&saa7134_devlist) {
|
||||
dev = list_entry(list, struct saa7134_dev, devlist);
|
||||
if (dev->dmasound.priv_data == NULL) {
|
||||
@ -974,9 +983,6 @@ static int saa7134_oss_init(void)
|
||||
if (dev == NULL)
|
||||
printk(KERN_INFO "saa7134 OSS: no saa7134 cards found\n");
|
||||
|
||||
dmasound_init = oss_device_init;
|
||||
dmasound_exit = oss_device_exit;
|
||||
|
||||
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");
|
||||
|
||||
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_LICENSE("GPL");
|
||||
MODULE_AUTHOR("Gerd Knorr <kraxel@bytesex.org> [SuSE Labs]");
|
||||
|
@ -206,7 +206,7 @@ hauppauge_tuner[] =
|
||||
{ TUNER_ABSENT, "TCL 2002MI_3H"},
|
||||
{ TUNER_TCL_2002N, "TCL 2002N 5H"},
|
||||
/* 100-109 */
|
||||
{ TUNER_ABSENT, "Philips FMD1216ME"},
|
||||
{ TUNER_PHILIPS_FMD1216ME_MK3, "Philips FMD1216ME"},
|
||||
{ TUNER_TEA5767, "Philips TEA5768HL FM Radio"},
|
||||
{ TUNER_ABSENT, "Panasonic ENV57H12D5"},
|
||||
{ TUNER_PHILIPS_FM1236_MK3, "TCL MFNM05-4"},
|
||||
|
@ -359,7 +359,12 @@ static struct mmc_blk_data *mmc_blk_alloc(struct mmc_card *card)
|
||||
md->block_bits = card->csd.read_blkbits;
|
||||
|
||||
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:
|
||||
return md;
|
||||
@ -373,7 +378,7 @@ mmc_blk_set_blksize(struct mmc_blk_data *md, struct mmc_card *card)
|
||||
|
||||
mmc_card_claim_host(card);
|
||||
cmd.opcode = MMC_SET_BLOCKLEN;
|
||||
cmd.arg = 1 << card->csd.read_blkbits;
|
||||
cmd.arg = 1 << md->block_bits;
|
||||
cmd.flags = MMC_RSP_R1;
|
||||
err = mmc_wait_for_cmd(card->host, &cmd, 5);
|
||||
mmc_card_release_host(card);
|
||||
@ -412,10 +417,9 @@ static int mmc_blk_probe(struct mmc_card *card)
|
||||
if (err)
|
||||
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),
|
||||
(card->csd.capacity << card->csd.read_blkbits) / 1024,
|
||||
mmc_blk_readonly(card)?"(ro)":"");
|
||||
get_capacity(md->disk) >> 1, mmc_blk_readonly(card)?"(ro)":"");
|
||||
|
||||
mmc_set_drvdata(card, md);
|
||||
add_disk(md->disk);
|
||||
|
@ -62,7 +62,7 @@ config MTD_PHYSMAP_BANKWIDTH
|
||||
|
||||
config MTD_SUN_UFLASH
|
||||
tristate "Sun Microsystems userflash support"
|
||||
depends on (SPARC32 || SPARC64) && MTD_CFI
|
||||
depends on SPARC && MTD_CFI
|
||||
help
|
||||
This provides a 'mapping' driver which supports the way in
|
||||
which user-programmable flash chips are connected on various
|
||||
|
@ -10,7 +10,7 @@
|
||||
* trademarks of NVIDIA Corporation in the United States and other
|
||||
* 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 Carl-Daniel Hailfinger (invalid MAC handling, insane
|
||||
* 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.46: 20 Oct 2005: Add irq optimization modes.
|
||||
* 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:
|
||||
* 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
|
||||
* superfluous timer interrupts from the nic.
|
||||
*/
|
||||
#define FORCEDETH_VERSION "0.47"
|
||||
#define FORCEDETH_VERSION "0.48"
|
||||
#define DRV_NAME "forcedeth"
|
||||
|
||||
#include <linux/module.h>
|
||||
@ -871,8 +872,8 @@ static int nv_alloc_rx(struct net_device *dev)
|
||||
} else {
|
||||
skb = np->rx_skbuff[nr];
|
||||
}
|
||||
np->rx_dma[nr] = pci_map_single(np->pci_dev, skb->data, skb->len,
|
||||
PCI_DMA_FROMDEVICE);
|
||||
np->rx_dma[nr] = pci_map_single(np->pci_dev, skb->data,
|
||||
skb->end-skb->data, PCI_DMA_FROMDEVICE);
|
||||
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]);
|
||||
wmb();
|
||||
@ -999,7 +1000,7 @@ static void nv_drain_rx(struct net_device *dev)
|
||||
wmb();
|
||||
if (np->rx_skbuff[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);
|
||||
dev_kfree_skb(np->rx_skbuff[i]);
|
||||
np->rx_skbuff[i] = NULL;
|
||||
@ -1334,7 +1335,7 @@ static void nv_rx_process(struct net_device *dev)
|
||||
* the performance.
|
||||
*/
|
||||
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);
|
||||
|
||||
{
|
||||
@ -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;
|
||||
dev->features |= NETIF_F_HW_CSUM | NETIF_F_SG;
|
||||
#ifdef NETIF_F_TSO
|
||||
dev->features |= NETIF_F_TSO;
|
||||
/* disabled dev->features |= NETIF_F_TSO; */
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -38,6 +38,10 @@
|
||||
#include <asm/irq.h>
|
||||
#include <asm/uaccess.h>
|
||||
|
||||
MODULE_DESCRIPTION("PHY library");
|
||||
MODULE_AUTHOR("Andy Fleming");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
static struct phy_driver genphy_driver;
|
||||
extern int mdio_bus_init(void);
|
||||
extern void mdio_bus_exit(void);
|
||||
|
@ -524,9 +524,6 @@ static int get_filter(void __user *arg, struct sock_filter **p)
|
||||
if (copy_from_user(&uprog, arg, sizeof(uprog)))
|
||||
return -EFAULT;
|
||||
|
||||
if (uprog.len > BPF_MAXINSNS)
|
||||
return -EINVAL;
|
||||
|
||||
if (!uprog.len) {
|
||||
*p = NULL;
|
||||
return 0;
|
||||
|
@ -2907,7 +2907,7 @@ static int __devinit gem_get_device_address(struct gem *gp)
|
||||
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);
|
||||
|
||||
@ -3181,7 +3181,7 @@ static struct pci_driver gem_driver = {
|
||||
.name = GEM_MODULE_NAME,
|
||||
.id_table = gem_pci_tbl,
|
||||
.probe = gem_init_one,
|
||||
.remove = __devexit_p(gem_remove_one),
|
||||
.remove = gem_remove_one,
|
||||
#ifdef CONFIG_PM
|
||||
.suspend = gem_suspend,
|
||||
.resume = gem_resume,
|
||||
|
@ -68,8 +68,8 @@
|
||||
|
||||
#define DRV_MODULE_NAME "tg3"
|
||||
#define PFX DRV_MODULE_NAME ": "
|
||||
#define DRV_MODULE_VERSION "3.45"
|
||||
#define DRV_MODULE_RELDATE "Dec 13, 2005"
|
||||
#define DRV_MODULE_VERSION "3.47"
|
||||
#define DRV_MODULE_RELDATE "Dec 28, 2005"
|
||||
|
||||
#define TG3_DEF_MAC_MODE 0
|
||||
#define TG3_DEF_RX_MODE 0
|
||||
@ -341,6 +341,16 @@ static struct {
|
||||
{ "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)
|
||||
{
|
||||
unsigned long flags;
|
||||
@ -411,13 +421,29 @@ static u32 tg3_read_indirect_mbox(struct tg3 *tp, u32 off)
|
||||
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) &&
|
||||
!(tp->tg3_flags & TG3_FLAG_5701_REG_WRITE_BUG) &&
|
||||
!(tp->tg3_flags2 & TG3_FLG2_ICH_WORKAROUND))
|
||||
tp->read32(tp, off); /* flush */
|
||||
if ((tp->tg3_flags & TG3_FLAG_PCIX_TARGET_HWBUG) ||
|
||||
(tp->tg3_flags2 & TG3_FLG2_ICH_WORKAROUND))
|
||||
/* Non-posted methods */
|
||||
tp->write32(tp, off, val);
|
||||
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)
|
||||
@ -438,16 +464,6 @@ static void tg3_write32_tx_mbox(struct tg3 *tp, u32 off, u32 val)
|
||||
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_f(reg, val) tw32_mailbox_flush(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 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)
|
||||
|
||||
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 (orig_clock_ctrl & CLOCK_CTRL_625_CORE) {
|
||||
tw32_f(TG3PCI_CLOCK_CTRL,
|
||||
clock_ctrl | CLOCK_CTRL_625_CORE);
|
||||
udelay(40);
|
||||
tw32_wait_f(TG3PCI_CLOCK_CTRL,
|
||||
clock_ctrl | CLOCK_CTRL_625_CORE, 40);
|
||||
}
|
||||
} else if ((orig_clock_ctrl & CLOCK_CTRL_44MHZ_CORE) != 0) {
|
||||
tw32_f(TG3PCI_CLOCK_CTRL,
|
||||
clock_ctrl |
|
||||
(CLOCK_CTRL_44MHZ_CORE | CLOCK_CTRL_ALTCLK));
|
||||
udelay(40);
|
||||
tw32_f(TG3PCI_CLOCK_CTRL,
|
||||
clock_ctrl | (CLOCK_CTRL_ALTCLK));
|
||||
udelay(40);
|
||||
tw32_wait_f(TG3PCI_CLOCK_CTRL,
|
||||
clock_ctrl |
|
||||
(CLOCK_CTRL_44MHZ_CORE | CLOCK_CTRL_ALTCLK),
|
||||
40);
|
||||
tw32_wait_f(TG3PCI_CLOCK_CTRL,
|
||||
clock_ctrl | (CLOCK_CTRL_ALTCLK),
|
||||
40);
|
||||
}
|
||||
tw32_f(TG3PCI_CLOCK_CTRL, clock_ctrl);
|
||||
udelay(40);
|
||||
tw32_wait_f(TG3PCI_CLOCK_CTRL, clock_ctrl, 40);
|
||||
}
|
||||
|
||||
#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)
|
||||
return;
|
||||
|
||||
if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
|
||||
tp_peer = pci_get_drvdata(tp->pdev_peer);
|
||||
if (!tp_peer)
|
||||
BUG();
|
||||
}
|
||||
if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) ||
|
||||
(GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714)) {
|
||||
struct net_device *dev_peer;
|
||||
|
||||
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 ||
|
||||
(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) {
|
||||
if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
|
||||
GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
|
||||
tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
|
||||
(GRC_LCLCTRL_GPIO_OE0 |
|
||||
GRC_LCLCTRL_GPIO_OE1 |
|
||||
GRC_LCLCTRL_GPIO_OE2 |
|
||||
GRC_LCLCTRL_GPIO_OUTPUT0 |
|
||||
GRC_LCLCTRL_GPIO_OUTPUT1));
|
||||
udelay(100);
|
||||
tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
|
||||
(GRC_LCLCTRL_GPIO_OE0 |
|
||||
GRC_LCLCTRL_GPIO_OE1 |
|
||||
GRC_LCLCTRL_GPIO_OE2 |
|
||||
GRC_LCLCTRL_GPIO_OUTPUT0 |
|
||||
GRC_LCLCTRL_GPIO_OUTPUT1),
|
||||
100);
|
||||
} else {
|
||||
u32 no_gpio2;
|
||||
u32 grc_local_ctrl;
|
||||
u32 grc_local_ctrl = 0;
|
||||
|
||||
if (tp_peer != tp &&
|
||||
(tp_peer->tg3_flags & TG3_FLAG_INIT_COMPLETE) != 0)
|
||||
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. */
|
||||
no_gpio2 = tp->nic_sram_data_cfg &
|
||||
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_OE2 |
|
||||
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_LCLCTRL_GPIO_OUTPUT2);
|
||||
}
|
||||
tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
|
||||
grc_local_ctrl);
|
||||
udelay(100);
|
||||
tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
|
||||
grc_local_ctrl, 100);
|
||||
|
||||
grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT0;
|
||||
|
||||
tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
|
||||
grc_local_ctrl);
|
||||
udelay(100);
|
||||
tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
|
||||
grc_local_ctrl, 100);
|
||||
|
||||
if (!no_gpio2) {
|
||||
grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT2;
|
||||
tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
|
||||
grc_local_ctrl);
|
||||
udelay(100);
|
||||
tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
|
||||
grc_local_ctrl, 100);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@ -1082,19 +1105,16 @@ static void tg3_frob_aux_power(struct tg3 *tp)
|
||||
(tp_peer->tg3_flags & TG3_FLAG_INIT_COMPLETE) != 0)
|
||||
return;
|
||||
|
||||
tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
|
||||
(GRC_LCLCTRL_GPIO_OE1 |
|
||||
GRC_LCLCTRL_GPIO_OUTPUT1));
|
||||
udelay(100);
|
||||
tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
|
||||
(GRC_LCLCTRL_GPIO_OE1 |
|
||||
GRC_LCLCTRL_GPIO_OUTPUT1), 100);
|
||||
|
||||
tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
|
||||
(GRC_LCLCTRL_GPIO_OE1));
|
||||
udelay(100);
|
||||
tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
|
||||
GRC_LCLCTRL_GPIO_OE1, 100);
|
||||
|
||||
tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
|
||||
(GRC_LCLCTRL_GPIO_OE1 |
|
||||
GRC_LCLCTRL_GPIO_OUTPUT1));
|
||||
udelay(100);
|
||||
tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
|
||||
(GRC_LCLCTRL_GPIO_OE1 |
|
||||
GRC_LCLCTRL_GPIO_OUTPUT1), 100);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1137,10 +1157,8 @@ static int tg3_set_power_state(struct tg3 *tp, int state)
|
||||
udelay(100); /* Delay after power state change */
|
||||
|
||||
/* Switch out of Vaux if it is not a LOM */
|
||||
if (!(tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT)) {
|
||||
tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
|
||||
udelay(100);
|
||||
}
|
||||
if (!(tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT))
|
||||
tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl, 100);
|
||||
|
||||
return 0;
|
||||
|
||||
@ -1239,10 +1257,8 @@ static int tg3_set_power_state(struct tg3 *tp, int state)
|
||||
base_val |= (CLOCK_CTRL_RXCLK_DISABLE |
|
||||
CLOCK_CTRL_TXCLK_DISABLE);
|
||||
|
||||
tw32_f(TG3PCI_CLOCK_CTRL, base_val |
|
||||
CLOCK_CTRL_ALTCLK |
|
||||
CLOCK_CTRL_PWRDOWN_PLL133);
|
||||
udelay(40);
|
||||
tw32_wait_f(TG3PCI_CLOCK_CTRL, base_val | CLOCK_CTRL_ALTCLK |
|
||||
CLOCK_CTRL_PWRDOWN_PLL133, 40);
|
||||
} else if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS) {
|
||||
/* do nothing */
|
||||
} 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;
|
||||
}
|
||||
|
||||
tw32_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits1);
|
||||
udelay(40);
|
||||
tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits1,
|
||||
40);
|
||||
|
||||
tw32_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits2);
|
||||
udelay(40);
|
||||
tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits2,
|
||||
40);
|
||||
|
||||
if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
|
||||
u32 newbits3;
|
||||
@ -1281,9 +1297,8 @@ static int tg3_set_power_state(struct tg3 *tp, int state)
|
||||
newbits3 = CLOCK_CTRL_44MHZ_CORE;
|
||||
}
|
||||
|
||||
tw32_f(TG3PCI_CLOCK_CTRL,
|
||||
tp->pci_clock_ctrl | newbits3);
|
||||
udelay(40);
|
||||
tw32_wait_f(TG3PCI_CLOCK_CTRL,
|
||||
tp->pci_clock_ctrl | newbits3, 40);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1294,7 +1309,8 @@ static int tg3_set_power_state(struct tg3 *tp, int state)
|
||||
tg3_writephy(tp, MII_TG3_EXT_CTRL,
|
||||
MII_TG3_EXT_CTRL_FORCE_LED_OFF);
|
||||
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(RDMAC_MODE, 0x08);
|
||||
GET_REG32_LOOP(WDMAC_MODE, 0x08);
|
||||
GET_REG32_LOOP(RX_CPU_BASE, 0x280);
|
||||
GET_REG32_LOOP(TX_CPU_BASE, 0x280);
|
||||
GET_REG32_1(RX_CPU_MODE);
|
||||
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(FTQ_RESET, 0x120);
|
||||
GET_REG32_LOOP(MSGINT_MODE, 0x0c);
|
||||
@ -7959,13 +7980,12 @@ static int tg3_test_memory(struct tg3 *tp)
|
||||
u32 offset;
|
||||
u32 len;
|
||||
} mem_tbl_570x[] = {
|
||||
{ 0x00000000, 0x01000},
|
||||
{ 0x00000000, 0x00b50},
|
||||
{ 0x00002000, 0x1c000},
|
||||
{ 0xffffffff, 0x00000}
|
||||
}, mem_tbl_5705[] = {
|
||||
{ 0x00000100, 0x0000c},
|
||||
{ 0x00000200, 0x00008},
|
||||
{ 0x00000b50, 0x00400},
|
||||
{ 0x00004000, 0x00800},
|
||||
{ 0x00006000, 0x01000},
|
||||
{ 0x00008000, 0x02000},
|
||||
@ -10466,7 +10486,7 @@ static char * __devinit tg3_bus_string(struct tg3 *tp, char *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;
|
||||
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;
|
||||
}
|
||||
|
||||
if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704)
|
||||
tp->pdev_peer = tg3_find_5704_peer(tp);
|
||||
if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) ||
|
||||
(GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714))
|
||||
tp->pdev_peer = tg3_find_peer(tp);
|
||||
|
||||
err = tg3_get_device_address(tp);
|
||||
if (err) {
|
||||
|
@ -1124,7 +1124,14 @@
|
||||
/* 0x280 --> 0x400 unused */
|
||||
|
||||
#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_MODE 0x00005400
|
||||
#define TX_CPU_STATE 0x00005404
|
||||
#define TX_CPU_PGMCTR 0x0000541c
|
||||
|
||||
/* Mailboxes */
|
||||
#define GRCMBOX_INTERRUPT_0 0x00005800 /* 64-bit */
|
||||
|
@ -1,6 +1,8 @@
|
||||
/* orinoco_nortel.c
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* Copyright (C) 2002 Tobias Hoffmann
|
||||
@ -165,7 +167,7 @@ static int nortel_pci_init_one(struct pci_dev *pdev,
|
||||
goto fail_resources;
|
||||
}
|
||||
|
||||
iomem = pci_iomap(pdev, 3, 0);
|
||||
iomem = pci_iomap(pdev, 2, 0);
|
||||
if (!iomem) {
|
||||
err = -ENOMEM;
|
||||
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[] = {
|
||||
/* Nortel emobility PCI */
|
||||
{0x126c, 0x8030, PCI_ANY_ID, PCI_ANY_ID,},
|
||||
/* Symbol LA-4123 PCI */
|
||||
{0x1562, 0x0001, PCI_ANY_ID, PCI_ANY_ID,},
|
||||
{0,},
|
||||
};
|
||||
|
||||
|
@ -62,7 +62,8 @@ qeth_eddp_free_context(struct qeth_eddp_context *ctx)
|
||||
for (i = 0; i < ctx->num_pages; ++i)
|
||||
free_page((unsigned long)ctx->pages[i]);
|
||||
kfree(ctx->pages);
|
||||
kfree(ctx->elements);
|
||||
if (ctx->elements != NULL)
|
||||
kfree(ctx->elements);
|
||||
kfree(ctx);
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
*
|
||||
@ -12,7 +12,7 @@
|
||||
* Frank Pavlic (fpavlic@de.ibm.com) and
|
||||
* 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
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -72,7 +72,7 @@
|
||||
#include "qeth_eddp.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";
|
||||
|
||||
/**
|
||||
@ -518,7 +518,8 @@ __qeth_set_offline(struct ccwgroup_device *cgdev, int recovery_mode)
|
||||
|
||||
QETH_DBF_TEXT(setup, 3, "setoffl");
|
||||
QETH_DBF_HEX(setup, 3, &card, sizeof(void *));
|
||||
|
||||
|
||||
netif_carrier_off(card->dev);
|
||||
recover_flag = card->state;
|
||||
if (qeth_stop_card(card, recovery_mode) == -ERESTARTSYS){
|
||||
PRINT_WARN("Stopping card %s interrupted by user!\n",
|
||||
@ -1020,7 +1021,6 @@ void
|
||||
qeth_schedule_recovery(struct qeth_card *card)
|
||||
{
|
||||
QETH_DBF_TEXT(trace,2,"startrec");
|
||||
|
||||
if (qeth_set_thread_start_bit(card, QETH_RECOVER_THREAD) == 0)
|
||||
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",
|
||||
QETH_CARD_IFNAME(card),
|
||||
card->info.chpid);
|
||||
netif_carrier_on(card->dev);
|
||||
qeth_schedule_recovery(card);
|
||||
return NULL;
|
||||
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;
|
||||
|
||||
QETH_DBF_TEXT(trace,4,"osndipa");
|
||||
QETH_DBF_TEXT(trace,4,"osndipa");
|
||||
|
||||
qeth_prepare_ipa_cmd(card, iob, QETH_PROT_OSN2);
|
||||
s1 = (u16)(IPA_PDU_HEADER_SIZE + data_len);
|
||||
@ -2203,24 +2202,21 @@ qeth_ulp_setup(struct qeth_card *card)
|
||||
}
|
||||
|
||||
static inline int
|
||||
qeth_check_for_inbound_error(struct qeth_qdio_buffer *buf,
|
||||
unsigned int qdio_error,
|
||||
unsigned int siga_error)
|
||||
qeth_check_qdio_errors(struct qdio_buffer *buf, unsigned int qdio_error,
|
||||
unsigned int siga_error, const char *dbftext)
|
||||
{
|
||||
int rc = 0;
|
||||
|
||||
if (qdio_error || siga_error) {
|
||||
QETH_DBF_TEXT(trace, 2, "qdinerr");
|
||||
QETH_DBF_TEXT(qerr, 2, "qdinerr");
|
||||
QETH_DBF_TEXT(trace, 2, dbftext);
|
||||
QETH_DBF_TEXT(qerr, 2, dbftext);
|
||||
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",
|
||||
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, " serr=%X", siga_error);
|
||||
rc = 1;
|
||||
return 1;
|
||||
}
|
||||
return rc;
|
||||
return 0;
|
||||
}
|
||||
|
||||
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) {
|
||||
index = i % QDIO_MAX_BUFFERS_PER_Q;
|
||||
buffer = &card->qdio.in_q->bufs[index];
|
||||
if (!((status == QDIO_STATUS_LOOK_FOR_ERROR) &&
|
||||
qeth_check_for_inbound_error(buffer, qdio_err, siga_err)))
|
||||
if (!((status & QDIO_STATUS_LOOK_FOR_ERROR) &&
|
||||
qeth_check_qdio_errors(buffer->buffer,
|
||||
qdio_err, siga_err,"qinerr")))
|
||||
qeth_process_inbound_buffer(card, buffer, index);
|
||||
/* clear buffer and give back to hardware */
|
||||
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
|
||||
qeth_handle_send_error(struct qeth_card *card,
|
||||
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 cc = siga_err & 3;
|
||||
|
||||
QETH_DBF_TEXT(trace, 6, "hdsnderr");
|
||||
qeth_check_qdio_errors(buffer->buffer, qdio_err, siga_err, "qouterr");
|
||||
switch (cc) {
|
||||
case 0:
|
||||
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){
|
||||
buffer = &queue->bufs[i % QDIO_MAX_BUFFERS_PER_Q];
|
||||
/*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){
|
||||
netif_stop_queue(card->dev);
|
||||
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;
|
||||
INIT_LIST_HEAD(&card->qdio.in_buf_pool.entry_list);
|
||||
INIT_LIST_HEAD(&card->qdio.init_pool.entry_list);
|
||||
/* outbound */
|
||||
}
|
||||
|
||||
static int
|
||||
@ -3731,6 +3729,9 @@ qeth_verify_vlan_dev(struct net_device *dev, struct qeth_card *card)
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (rc && !(VLAN_DEV_INFO(dev)->real_dev->priv == (void *)card))
|
||||
return 0;
|
||||
|
||||
#endif
|
||||
return rc;
|
||||
}
|
||||
@ -3807,10 +3808,8 @@ qeth_open(struct net_device *dev)
|
||||
card->data.state = CH_STATE_UP;
|
||||
card->state = CARD_STATE_UP;
|
||||
|
||||
if (!card->lan_online){
|
||||
if (netif_carrier_ok(dev))
|
||||
netif_carrier_off(dev);
|
||||
}
|
||||
if (!card->lan_online && netif_carrier_ok(dev))
|
||||
netif_carrier_off(dev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -5870,10 +5869,8 @@ qeth_add_multicast_ipv6(struct qeth_card *card)
|
||||
struct inet6_dev *in6_dev;
|
||||
|
||||
QETH_DBF_TEXT(trace,4,"chkmcv6");
|
||||
if ((card->options.layer2 == 0) &&
|
||||
(!qeth_is_supported(card, IPA_IPV6)) )
|
||||
if (!qeth_is_supported(card, IPA_IPV6))
|
||||
return ;
|
||||
|
||||
in6_dev = in6_dev_get(card->dev);
|
||||
if (in6_dev == NULL)
|
||||
return;
|
||||
@ -7936,8 +7933,8 @@ __qeth_set_online(struct ccwgroup_device *gdev, int recovery_mode)
|
||||
QETH_DBF_TEXT_(setup, 2, "6err%d", rc);
|
||||
goto out_remove;
|
||||
}
|
||||
/*maybe it was set offline without ifconfig down
|
||||
* we can also use this state for recovery purposes*/
|
||||
netif_carrier_on(card->dev);
|
||||
|
||||
qeth_set_allowed_threads(card, 0xffffffff, 0);
|
||||
if (recover_flag == CARD_STATE_RECOVER)
|
||||
qeth_start_again(card, recovery_mode);
|
||||
|
@ -11,7 +11,7 @@
|
||||
#include <asm/cio.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[]={
|
||||
0x00,0x00,0x80,0x00, 0x00,0x00,0x00,0x00,
|
||||
|
@ -14,14 +14,14 @@
|
||||
|
||||
#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;
|
||||
|
||||
#define IPA_PDU_HEADER_SIZE 0x40
|
||||
#define QETH_IPA_PDU_LEN_TOTAL(buffer) (buffer+0x0e)
|
||||
#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)
|
||||
|
||||
extern unsigned char IPA_PDU_HEADER[];
|
||||
|
@ -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
|
||||
* This file contains code related to procfs.
|
||||
@ -21,7 +21,7 @@
|
||||
#include "qeth_mpc.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 *****/
|
||||
#define QETH_PROCFILE_NAME "qeth"
|
||||
@ -30,30 +30,26 @@ static struct proc_dir_entry *qeth_procfile;
|
||||
static int
|
||||
qeth_procfile_seq_match(struct device *dev, void *data)
|
||||
{
|
||||
return 1;
|
||||
return(dev ? 1 : 0);
|
||||
}
|
||||
|
||||
static void *
|
||||
qeth_procfile_seq_start(struct seq_file *s, loff_t *offset)
|
||||
{
|
||||
struct device *dev;
|
||||
loff_t nr;
|
||||
|
||||
struct device *dev = NULL;
|
||||
loff_t nr = 0;
|
||||
|
||||
down_read(&qeth_ccwgroup_driver.driver.bus->subsys.rwsem);
|
||||
|
||||
nr = *offset;
|
||||
if (nr == 0)
|
||||
if (*offset == 0)
|
||||
return SEQ_START_TOKEN;
|
||||
|
||||
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)
|
||||
while (1) {
|
||||
dev = driver_find_device(&qeth_ccwgroup_driver.driver, dev,
|
||||
NULL, qeth_procfile_seq_match);
|
||||
return (void *) dev;
|
||||
if (++nr == *offset)
|
||||
break;
|
||||
put_device(dev);
|
||||
}
|
||||
return dev;
|
||||
}
|
||||
|
||||
static void
|
||||
@ -66,19 +62,14 @@ static void *
|
||||
qeth_procfile_seq_next(struct seq_file *s, void *it, loff_t *offset)
|
||||
{
|
||||
struct device *prev, *next;
|
||||
|
||||
if (it == SEQ_START_TOKEN) {
|
||||
next = driver_find_device(&qeth_ccwgroup_driver.driver,
|
||||
NULL, NULL, qeth_procfile_seq_match);
|
||||
if (next)
|
||||
(*offset)++;
|
||||
return (void *) next;
|
||||
}
|
||||
prev = (struct device *) it;
|
||||
|
||||
if (it == SEQ_START_TOKEN)
|
||||
prev = NULL;
|
||||
else
|
||||
prev = (struct device *) it;
|
||||
next = driver_find_device(&qeth_ccwgroup_driver.driver,
|
||||
prev, NULL, qeth_procfile_seq_match);
|
||||
if (next)
|
||||
(*offset)++;
|
||||
(*offset)++;
|
||||
return (void *) next;
|
||||
}
|
||||
|
||||
@ -87,7 +78,7 @@ qeth_get_router_str(struct qeth_card *card, int ipv)
|
||||
{
|
||||
int routing_type = 0;
|
||||
|
||||
if (ipv == 4){
|
||||
if (ipv == 4) {
|
||||
routing_type = card->options.route4.type;
|
||||
} else {
|
||||
#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);
|
||||
else
|
||||
seq_printf(s, " +++ LAN OFFLINE +++\n");
|
||||
put_device(device);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -184,51 +176,16 @@ static struct file_operations qeth_procfile_fops = {
|
||||
static struct proc_dir_entry *qeth_perf_procfile;
|
||||
|
||||
#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
|
||||
qeth_perf_procfile_seq_show(struct seq_file *s, void *it)
|
||||
{
|
||||
struct device *device;
|
||||
struct qeth_card *card;
|
||||
|
||||
|
||||
if (it == SEQ_START_TOKEN)
|
||||
return 0;
|
||||
|
||||
device = (struct device *) it;
|
||||
card = device->driver_data;
|
||||
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_cnt
|
||||
);
|
||||
put_device(device);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct seq_operations qeth_perf_procfile_seq_ops = {
|
||||
.start = qeth_perf_procfile_seq_start,
|
||||
.stop = qeth_perf_procfile_seq_stop,
|
||||
.next = qeth_perf_procfile_seq_next,
|
||||
.start = qeth_procfile_seq_start,
|
||||
.stop = qeth_procfile_seq_stop,
|
||||
.next = qeth_procfile_seq_next,
|
||||
.show = qeth_perf_procfile_seq_show,
|
||||
};
|
||||
|
||||
@ -324,93 +282,6 @@ static struct file_operations qeth_perf_procfile_fops = {
|
||||
#define qeth_perf_procfile_created 1
|
||||
#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
|
||||
qeth_create_procfs_entries(void)
|
||||
{
|
||||
@ -426,13 +297,7 @@ qeth_create_procfs_entries(void)
|
||||
qeth_perf_procfile->proc_fops = &qeth_perf_procfile_fops;
|
||||
#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 &&
|
||||
qeth_ipato_procfile &&
|
||||
qeth_perf_procfile_created)
|
||||
return 0;
|
||||
else
|
||||
@ -446,62 +311,5 @@ qeth_remove_procfs_entries(void)
|
||||
remove_proc_entry(QETH_PROCFILE_NAME, NULL);
|
||||
if (qeth_perf_procfile)
|
||||
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");
|
||||
*/
|
||||
|
@ -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
|
||||
* This file contains code related to sysfs.
|
||||
@ -20,7 +20,7 @@
|
||||
#include "qeth_mpc.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;
|
||||
|
||||
tmp = strsep((char **) &buf, "\n");
|
||||
if ((strlen(tmp) > 8) || (strlen(tmp) < 2))
|
||||
if ((strlen(tmp) > 8) || (strlen(tmp) == 0))
|
||||
return -EINVAL;
|
||||
|
||||
card->info.portname[0] = strlen(tmp);
|
||||
|
@ -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.
|
||||
*
|
||||
@ -7,7 +7,7 @@
|
||||
*
|
||||
* 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__
|
||||
|
@ -2044,7 +2044,7 @@ static int atapi_qc_complete(struct ata_queued_cmd *qc, unsigned int err_mask)
|
||||
else {
|
||||
u8 *scsicmd = cmd->cmnd;
|
||||
|
||||
if (scsicmd[0] == INQUIRY) {
|
||||
if ((scsicmd[0] == INQUIRY) && ((scsicmd[1] & 0x03) == 0)) {
|
||||
u8 *buf = NULL;
|
||||
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
|
||||
* device. 2) Ensure response data format / ATAPI information
|
||||
* are always correct.
|
||||
*/
|
||||
/* FIXME: do we ever override EVPD pages and the like, with
|
||||
* this code?
|
||||
*/
|
||||
if (buf[2] == 0) {
|
||||
buf[2] = 0x5;
|
||||
|
@ -400,6 +400,36 @@ static struct scsi_target *scsi_alloc_target(struct device *parent,
|
||||
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
|
||||
*
|
||||
@ -411,19 +441,18 @@ static struct scsi_target *scsi_alloc_target(struct device *parent,
|
||||
*/
|
||||
void scsi_target_reap(struct scsi_target *starget)
|
||||
{
|
||||
struct Scsi_Host *shost = dev_to_shost(starget->dev.parent);
|
||||
unsigned long flags;
|
||||
spin_lock_irqsave(shost->host_lock, flags);
|
||||
struct work_queue_wrapper *wqw =
|
||||
kzalloc(sizeof(struct work_queue_wrapper), GFP_ATOMIC);
|
||||
|
||||
if (--starget->reap_ref == 0 && list_empty(&starget->devices)) {
|
||||
list_del_init(&starget->siblings);
|
||||
spin_unlock_irqrestore(shost->host_lock, flags);
|
||||
device_del(&starget->dev);
|
||||
transport_unregister_device(&starget->dev);
|
||||
put_device(&starget->dev);
|
||||
if (!wqw) {
|
||||
starget_printk(KERN_ERR, starget,
|
||||
"Failed to allocate memory in scsi_reap_target()\n");
|
||||
return;
|
||||
}
|
||||
spin_unlock_irqrestore(shost->host_lock, flags);
|
||||
|
||||
INIT_WORK(&wqw->work, scsi_target_reap_work, wqw);
|
||||
wqw->starget = starget;
|
||||
schedule_work(&wqw->work);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -105,6 +105,7 @@ static struct {
|
||||
{ FC_PORTSTATE_LINKDOWN, "Linkdown" },
|
||||
{ FC_PORTSTATE_ERROR, "Error" },
|
||||
{ FC_PORTSTATE_LOOPBACK, "Loopback" },
|
||||
{ FC_PORTSTATE_DELETED, "Deleted" },
|
||||
};
|
||||
fc_enum_name_search(port_state, fc_port_state, fc_port_state_names)
|
||||
#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
|
||||
|
||||
|
||||
static void fc_shost_remove_rports(void *data);
|
||||
static void fc_timeout_deleted_rport(void *data);
|
||||
static void fc_scsi_scan_rport(void *data);
|
||||
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_target_id(shost) = 0;
|
||||
|
||||
fc_host_flags(shost) = 0;
|
||||
INIT_WORK(&fc_host_rport_del_work(shost), fc_shost_remove_rports, shost);
|
||||
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); \
|
||||
if ((i->f->get_rport_##field) && \
|
||||
!((rport->port_state == FC_PORTSTATE_BLOCKED) || \
|
||||
(rport->port_state == FC_PORTSTATE_DELETED) || \
|
||||
(rport->port_state == FC_PORTSTATE_NOTPRESENT))) \
|
||||
i->f->get_rport_##field(rport); \
|
||||
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 fc_internal *i = to_fc_internal(shost->transportt); \
|
||||
if ((rport->port_state == FC_PORTSTATE_BLOCKED) || \
|
||||
(rport->port_state == FC_PORTSTATE_DELETED) || \
|
||||
(rport->port_state == FC_PORTSTATE_NOTPRESENT)) \
|
||||
return -EBUSY; \
|
||||
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 fc_internal *i = to_fc_internal(shost->transportt);
|
||||
if ((rport->port_state == FC_PORTSTATE_BLOCKED) ||
|
||||
(rport->port_state == FC_PORTSTATE_DELETED) ||
|
||||
(rport->port_state == FC_PORTSTATE_NOTPRESENT))
|
||||
return -EBUSY;
|
||||
val = simple_strtoul(buf, NULL, 0);
|
||||
@ -1769,7 +1776,7 @@ fc_timeout_deleted_rport(void *data)
|
||||
rport->maxframe_size = -1;
|
||||
rport->supported_classes = FC_COS_UNSPECIFIED;
|
||||
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 */
|
||||
switch (fc_host_tgtid_bind_type(shost)) {
|
||||
@ -1789,14 +1796,23 @@ fc_timeout_deleted_rport(void *data)
|
||||
break;
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(shost->host_lock, flags);
|
||||
|
||||
/*
|
||||
* As this only occurs if the remote port (scsi target)
|
||||
* went away and didn't come back - we'll remove
|
||||
* 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_DESCRIPTION("FC Transport Attributes");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
@ -10,7 +10,7 @@ menu "Serial drivers"
|
||||
# The new 8250/16550 serial drivers
|
||||
config SERIAL_8250
|
||||
tristate "8250/16550 and compatible serial support"
|
||||
depends on (BROKEN || !(SPARC64 || SPARC32))
|
||||
depends on (BROKEN || !SPARC)
|
||||
select SERIAL_CORE
|
||||
---help---
|
||||
This selects whether you want to include the driver for the standard
|
||||
@ -469,14 +469,14 @@ config SERIAL_IMX_CONSOLE
|
||||
|
||||
config SERIAL_SUNCORE
|
||||
bool
|
||||
depends on SPARC32 || SPARC64
|
||||
depends on SPARC
|
||||
select SERIAL_CORE
|
||||
select SERIAL_CORE_CONSOLE
|
||||
default y
|
||||
|
||||
config SERIAL_SUNZILOG
|
||||
tristate "Sun Zilog8530 serial support"
|
||||
depends on SPARC32 || SPARC64
|
||||
depends on SPARC
|
||||
help
|
||||
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.
|
||||
@ -491,7 +491,7 @@ config SERIAL_SUNZILOG_CONSOLE
|
||||
|
||||
config SERIAL_SUNSU
|
||||
tristate "Sun SU serial support"
|
||||
depends on (SPARC32 || SPARC64) && PCI
|
||||
depends on SPARC && PCI
|
||||
help
|
||||
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
|
||||
@ -547,7 +547,7 @@ config PDC_CONSOLE
|
||||
|
||||
config SERIAL_SUNSAB
|
||||
tristate "Sun Siemens SAB82532 serial support"
|
||||
depends on (SPARC32 || SPARC64) && PCI
|
||||
depends on SPARC && PCI
|
||||
help
|
||||
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
|
||||
|
@ -160,7 +160,7 @@ pl011_rx_chars(struct uart_amba_port *uap)
|
||||
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;
|
||||
|
||||
uart_insert_char(&uap->port, ch, UART011_DR_OE, ch, flag);
|
||||
|
@ -361,7 +361,7 @@ static int serial_pxa_startup(struct uart_port *port)
|
||||
if (port->line == 3) /* HWUART */
|
||||
up->mcr |= UART_MCR_AFE;
|
||||
else
|
||||
up->mcr = 0;
|
||||
up->mcr = 0;
|
||||
|
||||
/*
|
||||
* Allocate the IRQ
|
||||
@ -641,7 +641,7 @@ serial_pxa_console_write(struct console *co, const char *s, unsigned int count)
|
||||
int i;
|
||||
|
||||
/*
|
||||
* First save the UER then disable the interrupts
|
||||
* First save the IER then disable the interrupts
|
||||
*/
|
||||
ier = serial_in(up, UART_IER);
|
||||
serial_out(up, UART_IER, UART_IER_UUE);
|
||||
|
@ -1432,7 +1432,8 @@ static int usb_generic_suspend(struct device *dev, pm_message_t message)
|
||||
mark_quiesced(intf);
|
||||
} else {
|
||||
// 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;
|
||||
}
|
||||
return status;
|
||||
@ -1460,8 +1461,10 @@ static int usb_generic_resume(struct device *dev)
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
intf = to_usb_interface(dev);
|
||||
driver = to_usb_driver(dev->driver);
|
||||
@ -1481,7 +1484,7 @@ static int usb_generic_resume(struct device *dev)
|
||||
mark_quiesced(intf);
|
||||
}
|
||||
} else
|
||||
dev_warn(dev, "no %s?\n", "resume");
|
||||
dev_warn(dev, "no resume for driver %s?\n", driver->name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -2103,7 +2103,7 @@ aiptek_probe(struct usb_interface *intf, const struct usb_device_id *id)
|
||||
* values.
|
||||
*/
|
||||
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_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);
|
||||
|
@ -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->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, 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);
|
||||
|
||||
endpoint = &intf->cur_altsetting->endpoint[0].desc;
|
||||
|
@ -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->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_PRESSURE, 0, wacom->features->pressure_max, 0, 0);
|
||||
|
||||
|
@ -109,7 +109,7 @@ static int slave_configure(struct scsi_device *sdev)
|
||||
* data comes from.
|
||||
*/
|
||||
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,
|
||||
* 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
|
||||
* revision level down to 2. The only devices that would be
|
||||
* 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
|
||||
* Hardware Error) when any low-level error occurs,
|
||||
|
@ -536,13 +536,13 @@ config FB_SUN3
|
||||
|
||||
config FB_SBUS
|
||||
bool "SBUS and UPA framebuffers"
|
||||
depends on (FB = y) && (SPARC32 || SPARC64)
|
||||
depends on (FB = y) && SPARC
|
||||
help
|
||||
Say Y if you want support for SBUS or UPA based frame buffer device.
|
||||
|
||||
config FB_BW2
|
||||
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_COPYAREA
|
||||
select FB_CFB_IMAGEBLIT
|
||||
@ -551,7 +551,7 @@ config FB_BW2
|
||||
|
||||
config FB_CG3
|
||||
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_COPYAREA
|
||||
select FB_CFB_IMAGEBLIT
|
||||
@ -560,7 +560,7 @@ config FB_CG3
|
||||
|
||||
config FB_CG6
|
||||
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_IMAGEBLIT
|
||||
help
|
||||
@ -1268,7 +1268,7 @@ config FB_LEO
|
||||
|
||||
config FB_PCI
|
||||
bool "PCI framebuffers"
|
||||
depends on (FB = y) && PCI && (SPARC64 || SPARC32)
|
||||
depends on (FB = y) && PCI && SPARC
|
||||
|
||||
config FB_IGA
|
||||
bool "IGA 168x display support"
|
||||
|
@ -6,7 +6,7 @@ menu "Console display driver support"
|
||||
|
||||
config VGA_CONSOLE
|
||||
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
|
||||
help
|
||||
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
|
||||
bool "PROM console"
|
||||
depends on SPARC32 || SPARC64
|
||||
depends on SPARC
|
||||
help
|
||||
Say Y to build a console driver for Sun machines that uses the
|
||||
terminal emulation built into their console PROMS.
|
||||
@ -136,7 +136,7 @@ config FONTS
|
||||
config FONT_8x8
|
||||
bool "VGA 8x8 font" if FONTS
|
||||
depends on FRAMEBUFFER_CONSOLE || STI_CONSOLE
|
||||
default y if !SPARC32 && !SPARC64 && !FONTS
|
||||
default y if !SPARC && !FONTS
|
||||
help
|
||||
This is the "high resolution" font for the VGA frame buffer (the one
|
||||
provided by the text console 80x50 (and higher) modes).
|
||||
@ -150,7 +150,7 @@ config FONT_8x8
|
||||
config FONT_8x16
|
||||
bool "VGA 8x16 font" if FONTS
|
||||
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
|
||||
This is the "high resolution" font for the VGA frame buffer (the one
|
||||
provided by the VGA text console 80x25 mode.
|
||||
@ -160,7 +160,7 @@ config FONT_8x16
|
||||
config FONT_6x11
|
||||
bool "Mac console 6x11 font (not supported by all drivers)" if FONTS
|
||||
depends on FRAMEBUFFER_CONSOLE || STI_CONSOLE
|
||||
default y if !SPARC32 && !SPARC64 && !FONTS && MAC
|
||||
default y if !SPARC && !FONTS && MAC
|
||||
help
|
||||
Small console font with Macintosh-style high-half glyphs. Some Mac
|
||||
framebuffer drivers don't support this one at all.
|
||||
@ -176,7 +176,7 @@ config FONT_7x14
|
||||
config FONT_PEARL_8x8
|
||||
bool "Pearl (old m68k) console 8x8 font" if FONTS
|
||||
depends on FRAMEBUFFER_CONSOLE
|
||||
default y if !SPARC32 && !SPARC64 && !FONTS && AMIGA
|
||||
default y if !SPARC && !FONTS && AMIGA
|
||||
help
|
||||
Small console font with PC-style control-character and high-half
|
||||
glyphs.
|
||||
@ -184,24 +184,24 @@ config FONT_PEARL_8x8
|
||||
config FONT_ACORN_8x8
|
||||
bool "Acorn console 8x8 font" if FONTS
|
||||
depends on FRAMEBUFFER_CONSOLE
|
||||
default y if !SPARC32 && !SPARC64 && !FONTS && ARM && ARCH_ACORN
|
||||
default y if !SPARC && !FONTS && ARM && ARCH_ACORN
|
||||
help
|
||||
Small console font with PC-style control characters and high-half
|
||||
glyphs.
|
||||
|
||||
config FONT_MINI_4x6
|
||||
bool "Mini 4x6 font"
|
||||
depends on !SPARC32 && !SPARC64 && FONTS
|
||||
depends on !SPARC && FONTS
|
||||
|
||||
config FONT_SUN8x16
|
||||
bool "Sparc console 8x16 font"
|
||||
depends on FRAMEBUFFER_CONSOLE && (!SPARC32 && !SPARC64 && FONTS || SPARC32 || SPARC64)
|
||||
depends on FRAMEBUFFER_CONSOLE && (!SPARC && FONTS || SPARC)
|
||||
help
|
||||
This is the high resolution console font for Sun machines. Say Y.
|
||||
|
||||
config FONT_SUN12x22
|
||||
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
|
||||
This is the high resolution console font for Sun machines with very
|
||||
big letters (like the letters used in the SPARC PROM). If the
|
||||
|
@ -420,13 +420,15 @@ static void ud_cursor(struct vc_data *vc, struct fb_info *info,
|
||||
int ud_update_start(struct fb_info *info)
|
||||
{
|
||||
struct fbcon_ops *ops = info->fbcon_par;
|
||||
u32 xoffset, yoffset;
|
||||
int xoffset, yoffset;
|
||||
u32 vyres = GETVYRES(ops->p->scrollmode, info);
|
||||
u32 vxres = GETVXRES(ops->p->scrollmode, info);
|
||||
int err;
|
||||
|
||||
xoffset = (vxres - info->var.xres) - ops->var.xoffset;
|
||||
yoffset = (vyres - info->var.yres) - ops->var.yoffset;
|
||||
xoffset = vxres - info->var.xres - ops->var.xoffset;
|
||||
yoffset = vyres - info->var.yres - ops->var.yoffset;
|
||||
if (yoffset < 0)
|
||||
yoffset += vyres;
|
||||
ops->var.xoffset = xoffset;
|
||||
ops->var.yoffset = yoffset;
|
||||
err = fb_pan_display(info, &ops->var);
|
||||
|
@ -41,6 +41,10 @@
|
||||
|
||||
/*** hw-related values ***/
|
||||
|
||||
/* Resource Allocation */
|
||||
#define INTELFB_FB_ACQUIRED 1
|
||||
#define INTELFB_MMIO_ACQUIRED 2
|
||||
|
||||
/* PCI ids for supported devices */
|
||||
#define PCI_DEVICE_ID_INTEL_830M 0x3577
|
||||
#define PCI_DEVICE_ID_INTEL_845G 0x2562
|
||||
@ -257,6 +261,7 @@ struct intelfb_info {
|
||||
int hwcursor;
|
||||
int fixed_mode;
|
||||
int ring_active;
|
||||
int flag;
|
||||
|
||||
/* hw cursor */
|
||||
int cursor_on;
|
||||
|
@ -135,9 +135,6 @@
|
||||
static void __devinit get_initial_mode(struct intelfb_info *dinfo);
|
||||
static void update_dinfo(struct intelfb_info *dinfo,
|
||||
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,
|
||||
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)
|
||||
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);
|
||||
if (dinfo->aperture.physical)
|
||||
if (dinfo->flag & INTELFB_FB_ACQUIRED)
|
||||
release_mem_region(dinfo->aperture.physical,
|
||||
dinfo->aperture.size);
|
||||
framebuffer_release(dinfo->info);
|
||||
@ -572,6 +569,9 @@ intelfb_pci_register(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
cleanup(dinfo);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
dinfo->flag |= INTELFB_FB_ACQUIRED;
|
||||
|
||||
if (!request_mem_region(dinfo->mmio_base_phys,
|
||||
INTEL_REG_SIZE,
|
||||
INTELFB_MODULE_NAME)) {
|
||||
@ -580,6 +580,8 @@ intelfb_pci_register(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
dinfo->flag |= INTELFB_MMIO_ACQUIRED;
|
||||
|
||||
/* Get the chipset info. */
|
||||
dinfo->pci_chipset = pdev->device;
|
||||
|
||||
@ -1091,7 +1093,17 @@ intelfb_set_fbinfo(struct intelfb_info *dinfo)
|
||||
return 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);
|
||||
|
||||
return 0;
|
||||
@ -1109,7 +1121,8 @@ update_dinfo(struct intelfb_info *dinfo, struct fb_var_screeninfo *var)
|
||||
dinfo->yres = var->xres;
|
||||
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) {
|
||||
case 8:
|
||||
@ -1139,30 +1152,6 @@ update_dinfo(struct intelfb_info *dinfo, struct fb_var_screeninfo *var)
|
||||
|
||||
/* 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 *
|
||||
***************************************************************/
|
||||
|
@ -47,7 +47,7 @@ config LOGO_SGI_CLUT224
|
||||
|
||||
config LOGO_SUN_CLUT224
|
||||
bool "224-color Sun Linux logo"
|
||||
depends on LOGO && (SPARC32 || SPARC64)
|
||||
depends on LOGO && SPARC
|
||||
default y
|
||||
|
||||
config LOGO_SUPERH_MONO
|
||||
|
@ -46,6 +46,9 @@ int sbusfb_mmap_helper(struct sbus_mmap_map *map,
|
||||
unsigned long off;
|
||||
int i;
|
||||
|
||||
if (!(vma->vm_flags & (VM_SHARED | VM_MAYSHARE)))
|
||||
return -EINVAL;
|
||||
|
||||
size = vma->vm_end - vma->vm_start;
|
||||
if (vma->vm_pgoff > (~0UL >> PAGE_SHIFT))
|
||||
return -EINVAL;
|
||||
|
@ -501,11 +501,16 @@ int hostfs_commit_write(struct file *file, struct page *page, unsigned from,
|
||||
long long start;
|
||||
int err = 0;
|
||||
|
||||
start = (long long) (page->index << PAGE_CACHE_SHIFT) + from;
|
||||
start = (((long long) page->index) << PAGE_CACHE_SHIFT) + from;
|
||||
buffer = kmap(page);
|
||||
err = write_file(FILE_HOSTFS_I(file)->fd, &start, buffer + from,
|
||||
to - from);
|
||||
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))
|
||||
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)
|
||||
{
|
||||
char *buffer, *name;
|
||||
long long start;
|
||||
int err;
|
||||
|
||||
start = page->index << PAGE_CACHE_SHIFT;
|
||||
buffer = kmap(page);
|
||||
name = inode_name(page->mapping->host, 0);
|
||||
if(name == NULL) return(-ENOMEM);
|
||||
|
@ -157,6 +157,8 @@ void nlmclnt_mark_reclaim(struct nlm_host *host)
|
||||
inode = fl->fl_file->f_dentry->d_inode;
|
||||
if (inode->i_sb->s_magic != NFS_SUPER_MAGIC)
|
||||
continue;
|
||||
if (fl->fl_u.nfs_fl.owner == NULL)
|
||||
continue;
|
||||
if (fl->fl_u.nfs_fl.owner->host != host)
|
||||
continue;
|
||||
if (!(fl->fl_u.nfs_fl.flags & NFS_LCK_GRANTED))
|
||||
@ -226,6 +228,8 @@ restart:
|
||||
inode = fl->fl_file->f_dentry->d_inode;
|
||||
if (inode->i_sb->s_magic != NFS_SUPER_MAGIC)
|
||||
continue;
|
||||
if (fl->fl_u.nfs_fl.owner == NULL)
|
||||
continue;
|
||||
if (fl->fl_u.nfs_fl.owner->host != host)
|
||||
continue;
|
||||
if (!(fl->fl_u.nfs_fl.flags & NFS_LCK_RECLAIM))
|
||||
|
@ -678,15 +678,9 @@ nfs_file_direct_read(struct kiocb *iocb, char __user *buf, size_t count, loff_t
|
||||
if (!count)
|
||||
goto out;
|
||||
|
||||
if (mapping->nrpages) {
|
||||
retval = filemap_fdatawrite(mapping);
|
||||
if (retval == 0)
|
||||
retval = nfs_wb_all(inode);
|
||||
if (retval == 0)
|
||||
retval = filemap_fdatawait(mapping);
|
||||
if (retval)
|
||||
goto out;
|
||||
}
|
||||
retval = nfs_sync_mapping(mapping);
|
||||
if (retval)
|
||||
goto out;
|
||||
|
||||
retval = nfs_direct_read(inode, ctx, &iov, pos, 1);
|
||||
if (retval > 0)
|
||||
@ -764,15 +758,9 @@ nfs_file_direct_write(struct kiocb *iocb, const char __user *buf, size_t count,
|
||||
if (!count)
|
||||
goto out;
|
||||
|
||||
if (mapping->nrpages) {
|
||||
retval = filemap_fdatawrite(mapping);
|
||||
if (retval == 0)
|
||||
retval = nfs_wb_all(inode);
|
||||
if (retval == 0)
|
||||
retval = filemap_fdatawait(mapping);
|
||||
if (retval)
|
||||
goto out;
|
||||
}
|
||||
retval = nfs_sync_mapping(mapping);
|
||||
if (retval)
|
||||
goto out;
|
||||
|
||||
retval = nfs_direct_write(inode, ctx, &iov, pos, 1);
|
||||
if (mapping->nrpages)
|
||||
|
@ -433,11 +433,7 @@ static int do_unlk(struct file *filp, int cmd, struct file_lock *fl)
|
||||
* Flush all pending writes before doing anything
|
||||
* with locks..
|
||||
*/
|
||||
filemap_fdatawrite(filp->f_mapping);
|
||||
down(&inode->i_sem);
|
||||
nfs_wb_all(inode);
|
||||
up(&inode->i_sem);
|
||||
filemap_fdatawait(filp->f_mapping);
|
||||
nfs_sync_mapping(filp->f_mapping);
|
||||
|
||||
/* NOTE: special case
|
||||
* 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
|
||||
* with locks..
|
||||
*/
|
||||
status = filemap_fdatawrite(filp->f_mapping);
|
||||
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)
|
||||
status = nfs_sync_mapping(filp->f_mapping);
|
||||
if (status != 0)
|
||||
goto out;
|
||||
|
||||
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.
|
||||
* This makes locking act as a cache coherency point.
|
||||
*/
|
||||
filemap_fdatawrite(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_sync_mapping(filp->f_mapping);
|
||||
nfs_zap_caches(inode);
|
||||
out:
|
||||
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;
|
||||
|
||||
/* 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;
|
||||
|
||||
if (IS_GETLK(cmd))
|
||||
|
@ -640,6 +640,27 @@ static int nfs_show_options(struct seq_file *m, struct vfsmount *mnt)
|
||||
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
|
||||
*/
|
||||
@ -1179,11 +1200,8 @@ void nfs_revalidate_mapping(struct inode *inode, struct address_space *mapping)
|
||||
struct nfs_inode *nfsi = NFS_I(inode);
|
||||
|
||||
if (nfsi->cache_validity & NFS_INO_INVALID_DATA) {
|
||||
if (S_ISREG(inode->i_mode)) {
|
||||
if (filemap_fdatawrite(mapping) == 0)
|
||||
filemap_fdatawait(mapping);
|
||||
nfs_wb_all(inode);
|
||||
}
|
||||
if (S_ISREG(inode->i_mode))
|
||||
nfs_sync_mapping(mapping);
|
||||
invalidate_inode_pages2(mapping);
|
||||
|
||||
spin_lock(&inode->i_lock);
|
||||
|
@ -107,7 +107,7 @@ static int nfsacld_proc_setacl(struct svc_rqst * rqstp,
|
||||
dprintk("nfsd: SETACL(2acl) %s\n", SVCFH_fmt(&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) {
|
||||
nfserr = nfserrno( nfsd_set_posix_acl(
|
||||
|
@ -101,7 +101,7 @@ static int nfsd3_proc_setacl(struct svc_rqst * rqstp,
|
||||
int nfserr = 0;
|
||||
|
||||
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) {
|
||||
nfserr = nfserrno( nfsd_set_posix_acl(
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user