dect
/
linux-2.6
Archived
13
0
Fork 0

Merge branch 'from-linus' into upstream

This commit is contained in:
John W. Linville 2006-08-04 14:24:15 -04:00
commit 71bfe47f02
199 changed files with 2068 additions and 1266 deletions

5
.gitignore vendored
View File

@ -30,6 +30,11 @@ include/config
include/linux/autoconf.h include/linux/autoconf.h
include/linux/compile.h include/linux/compile.h
include/linux/version.h include/linux/version.h
include/linux/utsrelease.h
# stgit generated dirs # stgit generated dirs
patches-* patches-*
# quilt's files
patches
series

View File

@ -51,8 +51,6 @@ Debugging Information
References References
IETF IP over InfiniBand (ipoib) Working Group
http://ietf.org/html.charters/ipoib-charter.html
Transmission of IP over InfiniBand (IPoIB) (RFC 4391) Transmission of IP over InfiniBand (IPoIB) (RFC 4391)
http://ietf.org/rfc/rfc4391.txt http://ietf.org/rfc/rfc4391.txt
IP over InfiniBand (IPoIB) Architecture (RFC 4392) IP over InfiniBand (IPoIB) Architecture (RFC 4392)

View File

@ -59,7 +59,7 @@ bind to an interface (or perhaps several) using an ioctl call. You
would issue more ioctls to the device to communicate to it using would issue more ioctls to the device to communicate to it using
control, bulk, or other kinds of USB transfers. The IOCTLs are control, bulk, or other kinds of USB transfers. The IOCTLs are
listed in the <linux/usbdevice_fs.h> file, and at this writing the listed in the <linux/usbdevice_fs.h> file, and at this writing the
source code (linux/drivers/usb/devio.c) is the primary reference source code (linux/drivers/usb/core/devio.c) is the primary reference
for how to access devices through those files. for how to access devices through those files.
Note that since by default these BBB/DDD files are writable only by Note that since by default these BBB/DDD files are writable only by

View File

@ -5,8 +5,7 @@ For USB help other than the readme files that are located in
Documentation/usb/*, see the following: Documentation/usb/*, see the following:
Linux-USB project: http://www.linux-usb.org Linux-USB project: http://www.linux-usb.org
mirrors at http://www.suse.cz/development/linux-usb/ mirrors at http://usb.in.tum.de/linux-usb/
and http://usb.in.tum.de/linux-usb/
and http://it.linux-usb.org and http://it.linux-usb.org
Linux USB Guide: http://linux-usb.sourceforge.net Linux USB Guide: http://linux-usb.sourceforge.net
Linux-USB device overview (working devices and drivers): Linux-USB device overview (working devices and drivers):

View File

@ -214,6 +214,12 @@ W: http://acpi.sourceforge.net/
T: git kernel.org:/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6.git T: git kernel.org:/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6.git
S: Maintained S: Maintained
ACPI PCI HOTPLUG DRIVER
P: Kristen Carlson Accardi
M: kristen.c.accardi@intel.com
L: pcihpd-discuss@lists.sourceforge.net
S: Maintained
AD1816 SOUND DRIVER AD1816 SOUND DRIVER
P: Thorsten Knabe P: Thorsten Knabe
M: Thorsten Knabe <linux@thorsten-knabe.de> M: Thorsten Knabe <linux@thorsten-knabe.de>

View File

@ -310,8 +310,8 @@ CPPFLAGS := -D__KERNEL__ $(LINUXINCLUDE)
CFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \ CFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
-fno-strict-aliasing -fno-common -fno-strict-aliasing -fno-common
# Force gcc to behave correct even for buggy distributions # Force gcc to behave correct even for buggy distributions
CFLAGS += $(call cc-option, -fno-stack-protector-all \ CFLAGS += $(call cc-option, -fno-stack-protector)
-fno-stack-protector)
AFLAGS := -D__ASSEMBLY__ AFLAGS := -D__ASSEMBLY__
# Read KERNELRELEASE from include/config/kernel.release (if it exists) # Read KERNELRELEASE from include/config/kernel.release (if it exists)
@ -368,6 +368,7 @@ endif
no-dot-config-targets := clean mrproper distclean \ no-dot-config-targets := clean mrproper distclean \
cscope TAGS tags help %docs check% \ cscope TAGS tags help %docs check% \
include/linux/version.h headers_% \
kernelrelease kernelversion kernelrelease kernelversion
config-targets := 0 config-targets := 0

View File

@ -95,7 +95,8 @@ static void gic_set_cpu(unsigned int irq, cpumask_t mask_val)
} }
#endif #endif
static struct irqchip gic_chip = { static struct irq_chip gic_chip = {
.name = "GIC",
.ack = gic_ack_irq, .ack = gic_ack_irq,
.mask = gic_mask_irq, .mask = gic_mask_irq,
.unmask = gic_unmask_irq, .unmask = gic_unmask_irq,

View File

@ -204,7 +204,8 @@ static void locomo_unmask_irq(unsigned int irq)
locomo_writel(r, mapbase + LOCOMO_ICR); locomo_writel(r, mapbase + LOCOMO_ICR);
} }
static struct irqchip locomo_chip = { static struct irq_chip locomo_chip = {
.name = "LOCOMO",
.ack = locomo_ack_irq, .ack = locomo_ack_irq,
.mask = locomo_mask_irq, .mask = locomo_mask_irq,
.unmask = locomo_unmask_irq, .unmask = locomo_unmask_irq,
@ -249,7 +250,8 @@ static void locomo_key_unmask_irq(unsigned int irq)
locomo_writel(r, mapbase + LOCOMO_KEYBOARD + LOCOMO_KIC); locomo_writel(r, mapbase + LOCOMO_KEYBOARD + LOCOMO_KIC);
} }
static struct irqchip locomo_key_chip = { static struct irq_chip locomo_key_chip = {
.name = "LOCOMO-key",
.ack = locomo_key_ack_irq, .ack = locomo_key_ack_irq,
.mask = locomo_key_mask_irq, .mask = locomo_key_mask_irq,
.unmask = locomo_key_unmask_irq, .unmask = locomo_key_unmask_irq,
@ -312,7 +314,8 @@ static void locomo_gpio_unmask_irq(unsigned int irq)
locomo_writel(r, mapbase + LOCOMO_GIE); locomo_writel(r, mapbase + LOCOMO_GIE);
} }
static struct irqchip locomo_gpio_chip = { static struct irq_chip locomo_gpio_chip = {
.name = "LOCOMO-gpio",
.ack = locomo_gpio_ack_irq, .ack = locomo_gpio_ack_irq,
.mask = locomo_gpio_mask_irq, .mask = locomo_gpio_mask_irq,
.unmask = locomo_gpio_unmask_irq, .unmask = locomo_gpio_unmask_irq,
@ -357,7 +360,8 @@ static void locomo_lt_unmask_irq(unsigned int irq)
locomo_writel(r, mapbase + LOCOMO_LTINT); locomo_writel(r, mapbase + LOCOMO_LTINT);
} }
static struct irqchip locomo_lt_chip = { static struct irq_chip locomo_lt_chip = {
.name = "LOCOMO-lt",
.ack = locomo_lt_ack_irq, .ack = locomo_lt_ack_irq,
.mask = locomo_lt_mask_irq, .mask = locomo_lt_mask_irq,
.unmask = locomo_lt_unmask_irq, .unmask = locomo_lt_unmask_irq,
@ -418,7 +422,8 @@ static void locomo_spi_unmask_irq(unsigned int irq)
locomo_writel(r, mapbase + LOCOMO_SPIIE); locomo_writel(r, mapbase + LOCOMO_SPIIE);
} }
static struct irqchip locomo_spi_chip = { static struct irq_chip locomo_spi_chip = {
.name = "LOCOMO-spi",
.ack = locomo_spi_ack_irq, .ack = locomo_spi_ack_irq,
.mask = locomo_spi_mask_irq, .mask = locomo_spi_mask_irq,
.unmask = locomo_spi_unmask_irq, .unmask = locomo_spi_unmask_irq,

View File

@ -272,7 +272,8 @@ static int sa1111_wake_lowirq(unsigned int irq, unsigned int on)
return 0; return 0;
} }
static struct irqchip sa1111_low_chip = { static struct irq_chip sa1111_low_chip = {
.name = "SA1111-l",
.ack = sa1111_ack_irq, .ack = sa1111_ack_irq,
.mask = sa1111_mask_lowirq, .mask = sa1111_mask_lowirq,
.unmask = sa1111_unmask_lowirq, .unmask = sa1111_unmask_lowirq,
@ -368,7 +369,8 @@ static int sa1111_wake_highirq(unsigned int irq, unsigned int on)
return 0; return 0;
} }
static struct irqchip sa1111_high_chip = { static struct irq_chip sa1111_high_chip = {
.name = "SA1111-h",
.ack = sa1111_ack_irq, .ack = sa1111_ack_irq,
.mask = sa1111_mask_highirq, .mask = sa1111_mask_highirq,
.unmask = sa1111_unmask_highirq, .unmask = sa1111_unmask_highirq,

View File

@ -39,7 +39,8 @@ static void vic_unmask_irq(unsigned int irq)
writel(1 << irq, base + VIC_INT_ENABLE); writel(1 << irq, base + VIC_INT_ENABLE);
} }
static struct irqchip vic_chip = { static struct irq_chip vic_chip = {
.name = "VIC",
.ack = vic_mask_irq, .ack = vic_mask_irq,
.mask = vic_mask_irq, .mask = vic_mask_irq,
.unmask = vic_unmask_irq, .unmask = vic_unmask_irq,

View File

@ -470,7 +470,8 @@ static void ecard_irq_mask(unsigned int irqnr)
} }
} }
static struct irqchip ecard_chip = { static struct irq_chip ecard_chip = {
.name = "ECARD",
.ack = ecard_irq_mask, .ack = ecard_irq_mask,
.mask = ecard_irq_mask, .mask = ecard_irq_mask,
.unmask = ecard_irq_unmask, .unmask = ecard_irq_unmask,

View File

@ -77,6 +77,7 @@ int show_interrupts(struct seq_file *p, void *v)
seq_printf(p, "%3d: ", i); seq_printf(p, "%3d: ", i);
for_each_present_cpu(cpu) for_each_present_cpu(cpu)
seq_printf(p, "%10u ", kstat_cpu(cpu).irqs[i]); seq_printf(p, "%10u ", kstat_cpu(cpu).irqs[i]);
seq_printf(p, " %10s", irq_desc[i].chip->name ? : "-");
seq_printf(p, " %s", action->name); seq_printf(p, " %s", action->name);
for (action = action->next; action; action = action->next) for (action = action->next; action; action = action->next)
seq_printf(p, ", %s", action->name); seq_printf(p, ", %s", action->name);

View File

@ -327,7 +327,8 @@ static int gpio_irq_type(unsigned pin, unsigned type)
return (type == IRQT_BOTHEDGE) ? 0 : -EINVAL; return (type == IRQT_BOTHEDGE) ? 0 : -EINVAL;
} }
static struct irqchip gpio_irqchip = { static struct irq_chip gpio_irqchip = {
.name = "GPIO",
.mask = gpio_irq_mask, .mask = gpio_irq_mask,
.unmask = gpio_irq_unmask, .unmask = gpio_irq_unmask,
.set_type = gpio_irq_type, .set_type = gpio_irq_type,

View File

@ -114,7 +114,8 @@ void at91_irq_resume(void)
#define at91_aic_set_wake NULL #define at91_aic_set_wake NULL
#endif #endif
static struct irqchip at91_aic_chip = { static struct irq_chip at91_aic_chip = {
.name = "AIC",
.ack = at91_aic_mask_irq, .ack = at91_aic_mask_irq,
.mask = at91_aic_mask_irq, .mask = at91_aic_mask_irq,
.unmask = at91_aic_unmask_irq, .unmask = at91_aic_unmask_irq,

View File

@ -204,13 +204,15 @@ imx_gpiod_demux_handler(unsigned int irq_unused, struct irqdesc *desc,
imx_gpio_handler(mask, irq, desc, regs); imx_gpio_handler(mask, irq, desc, regs);
} }
static struct irqchip imx_internal_chip = { static struct irq_chip imx_internal_chip = {
.name = "MPU",
.ack = imx_mask_irq, .ack = imx_mask_irq,
.mask = imx_mask_irq, .mask = imx_mask_irq,
.unmask = imx_unmask_irq, .unmask = imx_unmask_irq,
}; };
static struct irqchip imx_gpio_chip = { static struct irq_chip imx_gpio_chip = {
.name = "GPIO",
.ack = imx_gpio_ack_irq, .ack = imx_gpio_ack_irq,
.mask = imx_gpio_mask_irq, .mask = imx_gpio_mask_irq,
.unmask = imx_gpio_unmask_irq, .unmask = imx_gpio_unmask_irq,

View File

@ -161,7 +161,8 @@ static void sc_unmask_irq(unsigned int irq)
writel(1 << irq, VA_IC_BASE + IRQ_ENABLE_SET); writel(1 << irq, VA_IC_BASE + IRQ_ENABLE_SET);
} }
static struct irqchip sc_chip = { static struct irq_chip sc_chip = {
.name = "SC",
.ack = sc_mask_irq, .ack = sc_mask_irq,
.mask = sc_mask_irq, .mask = sc_mask_irq,
.unmask = sc_unmask_irq, .unmask = sc_unmask_irq,

View File

@ -156,7 +156,8 @@ static void cic_unmask_irq(unsigned int irq)
cic_writel(1 << irq, INTCP_VA_CIC_BASE + IRQ_ENABLE_SET); cic_writel(1 << irq, INTCP_VA_CIC_BASE + IRQ_ENABLE_SET);
} }
static struct irqchip cic_chip = { static struct irq_chip cic_chip = {
.name = "CIC",
.ack = cic_mask_irq, .ack = cic_mask_irq,
.mask = cic_mask_irq, .mask = cic_mask_irq,
.unmask = cic_unmask_irq, .unmask = cic_unmask_irq,
@ -174,7 +175,8 @@ static void pic_unmask_irq(unsigned int irq)
pic_writel(1 << irq, INTCP_VA_PIC_BASE + IRQ_ENABLE_SET); pic_writel(1 << irq, INTCP_VA_PIC_BASE + IRQ_ENABLE_SET);
} }
static struct irqchip pic_chip = { static struct irq_chip pic_chip = {
.name = "PIC",
.ack = pic_mask_irq, .ack = pic_mask_irq,
.mask = pic_mask_irq, .mask = pic_mask_irq,
.unmask = pic_unmask_irq, .unmask = pic_unmask_irq,
@ -192,7 +194,8 @@ static void sic_unmask_irq(unsigned int irq)
sic_writel(1 << irq, INTCP_VA_SIC_BASE + IRQ_ENABLE_SET); sic_writel(1 << irq, INTCP_VA_SIC_BASE + IRQ_ENABLE_SET);
} }
static struct irqchip sic_chip = { static struct irq_chip sic_chip = {
.name = "SIC",
.ack = sic_mask_irq, .ack = sic_mask_irq,
.mask = sic_mask_irq, .mask = sic_mask_irq,
.unmask = sic_unmask_irq, .unmask = sic_unmask_irq,

View File

@ -52,7 +52,8 @@ iop321_irq_unmask (unsigned int irq)
intctl_write(iop321_mask); intctl_write(iop321_mask);
} }
struct irqchip ext_chip = { struct irq_chip ext_chip = {
.name = "IOP",
.ack = iop321_irq_mask, .ack = iop321_irq_mask,
.mask = iop321_irq_mask, .mask = iop321_irq_mask,
.unmask = iop321_irq_unmask, .unmask = iop321_irq_unmask,

View File

@ -77,13 +77,15 @@ iop331_irq_unmask2(unsigned int irq)
intctl_write1(iop331_mask1); intctl_write1(iop331_mask1);
} }
struct irqchip iop331_irqchip1 = { struct irq_chip iop331_irqchip1 = {
.name = "IOP-1",
.ack = iop331_irq_mask1, .ack = iop331_irq_mask1,
.mask = iop331_irq_mask1, .mask = iop331_irq_mask1,
.unmask = iop331_irq_unmask1, .unmask = iop331_irq_unmask1,
}; };
struct irqchip iop331_irqchip2 = { struct irq_chip iop331_irqchip2 = {
.name = "IOP-2",
.ack = iop331_irq_mask2, .ack = iop331_irq_mask2,
.mask = iop331_irq_mask2, .mask = iop331_irq_mask2,
.unmask = iop331_irq_unmask2, .unmask = iop331_irq_unmask2,

View File

@ -63,7 +63,8 @@ static void kev7a400_unmask_cpld_irq (u32 irq)
CPLD_WR_PB_INT_MASK = CPLD_IRQ_mask; CPLD_WR_PB_INT_MASK = CPLD_IRQ_mask;
} }
static struct irqchip kev7a400_cpld_chip = { static struct irq_chip kev7a400_cpld_chip = {
.name = "CPLD",
.ack = kev7a400_ack_cpld_irq, .ack = kev7a400_ack_cpld_irq,
.mask = kev7a400_mask_cpld_irq, .mask = kev7a400_mask_cpld_irq,
.unmask = kev7a400_unmask_cpld_irq, .unmask = kev7a400_unmask_cpld_irq,

View File

@ -200,7 +200,8 @@ static void lh7a40x_unmask_cpld_irq (u32 irq)
} }
} }
static struct irqchip lpd7a40x_cpld_chip = { static struct irq_chip lpd7a40x_cpld_chip = {
.name = "CPLD",
.ack = lh7a40x_ack_cpld_irq, .ack = lh7a40x_ack_cpld_irq,
.mask = lh7a40x_mask_cpld_irq, .mask = lh7a40x_mask_cpld_irq,
.unmask = lh7a40x_unmask_cpld_irq, .unmask = lh7a40x_unmask_cpld_irq,

View File

@ -43,7 +43,8 @@ lh7a400_unmask_cpld_irq (u32 irq)
} }
static struct static struct
irqchip lh7a400_cpld_chip = { irq_chip lh7a400_cpld_chip = {
.name = "CPLD",
.ack = lh7a400_ack_cpld_irq, .ack = lh7a400_ack_cpld_irq,
.mask = lh7a400_mask_cpld_irq, .mask = lh7a400_mask_cpld_irq,
.unmask = lh7a400_unmask_cpld_irq, .unmask = lh7a400_unmask_cpld_irq,

View File

@ -38,13 +38,15 @@ static void lh7a400_ack_gpio_irq (u32 irq)
INTC_INTENC = (1 << irq); INTC_INTENC = (1 << irq);
} }
static struct irqchip lh7a400_internal_chip = { static struct irq_chip lh7a400_internal_chip = {
.name = "MPU",
.ack = lh7a400_mask_irq, /* Level triggering -> mask is ack */ .ack = lh7a400_mask_irq, /* Level triggering -> mask is ack */
.mask = lh7a400_mask_irq, .mask = lh7a400_mask_irq,
.unmask = lh7a400_unmask_irq, .unmask = lh7a400_unmask_irq,
}; };
static struct irqchip lh7a400_gpio_chip = { static struct irq_chip lh7a400_gpio_chip = {
.name = "GPIO",
.ack = lh7a400_ack_gpio_irq, .ack = lh7a400_ack_gpio_irq,
.mask = lh7a400_mask_irq, .mask = lh7a400_mask_irq,
.unmask = lh7a400_unmask_irq, .unmask = lh7a400_unmask_irq,

View File

@ -76,25 +76,29 @@ static void lh7a404_vic2_ack_gpio_irq (u32 irq)
VIC2_INTENCLR = (1 << irq); VIC2_INTENCLR = (1 << irq);
} }
static struct irqchip lh7a404_vic1_chip = { static struct irq_chip lh7a404_vic1_chip = {
.name = "VIC1",
.ack = lh7a404_vic1_mask_irq, /* Because level-triggered */ .ack = lh7a404_vic1_mask_irq, /* Because level-triggered */
.mask = lh7a404_vic1_mask_irq, .mask = lh7a404_vic1_mask_irq,
.unmask = lh7a404_vic1_unmask_irq, .unmask = lh7a404_vic1_unmask_irq,
}; };
static struct irqchip lh7a404_vic2_chip = { static struct irq_chip lh7a404_vic2_chip = {
.name = "VIC2",
.ack = lh7a404_vic2_mask_irq, /* Because level-triggered */ .ack = lh7a404_vic2_mask_irq, /* Because level-triggered */
.mask = lh7a404_vic2_mask_irq, .mask = lh7a404_vic2_mask_irq,
.unmask = lh7a404_vic2_unmask_irq, .unmask = lh7a404_vic2_unmask_irq,
}; };
static struct irqchip lh7a404_gpio_vic1_chip = { static struct irq_chip lh7a404_gpio_vic1_chip = {
.name = "GPIO-VIC1",
.ack = lh7a404_vic1_ack_gpio_irq, .ack = lh7a404_vic1_ack_gpio_irq,
.mask = lh7a404_vic1_mask_irq, .mask = lh7a404_vic1_mask_irq,
.unmask = lh7a404_vic1_unmask_irq, .unmask = lh7a404_vic1_unmask_irq,
}; };
static struct irqchip lh7a404_gpio_vic2_chip = { static struct irq_chip lh7a404_gpio_vic2_chip = {
.name = "GPIO-VIC2",
.ack = lh7a404_vic2_ack_gpio_irq, .ack = lh7a404_vic2_ack_gpio_irq,
.mask = lh7a404_vic2_mask_irq, .mask = lh7a404_vic2_mask_irq,
.unmask = lh7a404_vic2_unmask_irq, .unmask = lh7a404_vic2_unmask_irq,

View File

@ -50,7 +50,8 @@ static void lh7a40x_unmask_cpld_irq (u32 irq)
} }
} }
static struct irqchip lh7a40x_cpld_chip = { static struct irq_chip lh7a40x_cpld_chip = {
.name = "CPLD",
.ack = lh7a40x_ack_cpld_irq, .ack = lh7a40x_ack_cpld_irq,
.mask = lh7a40x_mask_cpld_irq, .mask = lh7a40x_mask_cpld_irq,
.unmask = lh7a40x_unmask_cpld_irq, .unmask = lh7a40x_unmask_cpld_irq,

View File

@ -106,14 +106,16 @@ void innovator_fpga_IRQ_demux(unsigned int irq, struct irqdesc *desc,
} }
} }
static struct irqchip omap_fpga_irq_ack = { static struct irq_chip omap_fpga_irq_ack = {
.name = "FPGA-ack",
.ack = fpga_mask_ack_irq, .ack = fpga_mask_ack_irq,
.mask = fpga_mask_irq, .mask = fpga_mask_irq,
.unmask = fpga_unmask_irq, .unmask = fpga_unmask_irq,
}; };
static struct irqchip omap_fpga_irq = { static struct irq_chip omap_fpga_irq = {
.name = "FPGA",
.ack = fpga_ack_irq, .ack = fpga_ack_irq,
.mask = fpga_mask_irq, .mask = fpga_mask_irq,
.unmask = fpga_unmask_irq, .unmask = fpga_unmask_irq,

View File

@ -168,7 +168,8 @@ static struct omap_irq_bank omap1610_irq_banks[] = {
}; };
#endif #endif
static struct irqchip omap_irq_chip = { static struct irq_chip omap_irq_chip = {
.name = "MPU",
.ack = omap_mask_ack_irq, .ack = omap_mask_ack_irq,
.mask = omap_mask_irq, .mask = omap_mask_irq,
.unmask = omap_unmask_irq, .unmask = omap_unmask_irq,

View File

@ -94,7 +94,8 @@ static void omap_mask_ack_irq(unsigned int irq)
omap_ack_irq(irq); omap_ack_irq(irq);
} }
static struct irqchip omap_irq_chip = { static struct irq_chip omap_irq_chip = {
.name = "INTC",
.ack = omap_mask_ack_irq, .ack = omap_mask_ack_irq,
.mask = omap_mask_irq, .mask = omap_mask_irq,
.unmask = omap_unmask_irq, .unmask = omap_unmask_irq,

View File

@ -39,7 +39,8 @@ static void pxa_unmask_low_irq(unsigned int irq)
ICMR |= (1 << (irq + PXA_IRQ_SKIP)); ICMR |= (1 << (irq + PXA_IRQ_SKIP));
} }
static struct irqchip pxa_internal_chip_low = { static struct irq_chip pxa_internal_chip_low = {
.name = "SC",
.ack = pxa_mask_low_irq, .ack = pxa_mask_low_irq,
.mask = pxa_mask_low_irq, .mask = pxa_mask_low_irq,
.unmask = pxa_unmask_low_irq, .unmask = pxa_unmask_low_irq,
@ -61,7 +62,8 @@ static void pxa_unmask_high_irq(unsigned int irq)
ICMR2 |= (1 << (irq - 32 + PXA_IRQ_SKIP)); ICMR2 |= (1 << (irq - 32 + PXA_IRQ_SKIP));
} }
static struct irqchip pxa_internal_chip_high = { static struct irq_chip pxa_internal_chip_high = {
.name = "SC-hi",
.ack = pxa_mask_high_irq, .ack = pxa_mask_high_irq,
.mask = pxa_mask_high_irq, .mask = pxa_mask_high_irq,
.unmask = pxa_unmask_high_irq, .unmask = pxa_unmask_high_irq,
@ -129,7 +131,8 @@ static void pxa_ack_low_gpio(unsigned int irq)
GEDR0 = (1 << (irq - IRQ_GPIO0)); GEDR0 = (1 << (irq - IRQ_GPIO0));
} }
static struct irqchip pxa_low_gpio_chip = { static struct irq_chip pxa_low_gpio_chip = {
.name = "GPIO-l",
.ack = pxa_ack_low_gpio, .ack = pxa_ack_low_gpio,
.mask = pxa_mask_low_irq, .mask = pxa_mask_low_irq,
.unmask = pxa_unmask_low_irq, .unmask = pxa_unmask_low_irq,
@ -237,7 +240,8 @@ static void pxa_unmask_muxed_gpio(unsigned int irq)
GFER(gpio) = GPIO_IRQ_falling_edge[idx] & GPIO_IRQ_mask[idx]; GFER(gpio) = GPIO_IRQ_falling_edge[idx] & GPIO_IRQ_mask[idx];
} }
static struct irqchip pxa_muxed_gpio_chip = { static struct irq_chip pxa_muxed_gpio_chip = {
.name = "GPIO",
.ack = pxa_ack_muxed_gpio, .ack = pxa_ack_muxed_gpio,
.mask = pxa_mask_muxed_gpio, .mask = pxa_mask_muxed_gpio,
.unmask = pxa_unmask_muxed_gpio, .unmask = pxa_unmask_muxed_gpio,

View File

@ -68,7 +68,8 @@ static void lpd270_unmask_irq(unsigned int irq)
__raw_writew(lpd270_irq_enabled, LPD270_INT_MASK); __raw_writew(lpd270_irq_enabled, LPD270_INT_MASK);
} }
static struct irqchip lpd270_irq_chip = { static struct irq_chip lpd270_irq_chip = {
.name = "CPLD",
.ack = lpd270_mask_irq, .ack = lpd270_mask_irq,
.mask = lpd270_mask_irq, .mask = lpd270_mask_irq,
.unmask = lpd270_unmask_irq, .unmask = lpd270_unmask_irq,

View File

@ -78,7 +78,8 @@ static void lubbock_unmask_irq(unsigned int irq)
LUB_IRQ_MASK_EN = (lubbock_irq_enabled |= (1 << lubbock_irq)); LUB_IRQ_MASK_EN = (lubbock_irq_enabled |= (1 << lubbock_irq));
} }
static struct irqchip lubbock_irq_chip = { static struct irq_chip lubbock_irq_chip = {
.name = "FPGA",
.ack = lubbock_mask_irq, .ack = lubbock_mask_irq,
.mask = lubbock_mask_irq, .mask = lubbock_mask_irq,
.unmask = lubbock_unmask_irq, .unmask = lubbock_unmask_irq,

View File

@ -64,7 +64,8 @@ static void mainstone_unmask_irq(unsigned int irq)
MST_INTMSKENA = (mainstone_irq_enabled |= (1 << mainstone_irq)); MST_INTMSKENA = (mainstone_irq_enabled |= (1 << mainstone_irq));
} }
static struct irqchip mainstone_irq_chip = { static struct irq_chip mainstone_irq_chip = {
.name = "FPGA",
.ack = mainstone_mask_irq, .ack = mainstone_mask_irq,
.mask = mainstone_mask_irq, .mask = mainstone_mask_irq,
.unmask = mainstone_unmask_irq, .unmask = mainstone_unmask_irq,

View File

@ -95,7 +95,8 @@ static int sa1100_low_gpio_wake(unsigned int irq, unsigned int on)
return 0; return 0;
} }
static struct irqchip sa1100_low_gpio_chip = { static struct irq_chip sa1100_low_gpio_chip = {
.name = "GPIO-l",
.ack = sa1100_low_gpio_ack, .ack = sa1100_low_gpio_ack,
.mask = sa1100_low_gpio_mask, .mask = sa1100_low_gpio_mask,
.unmask = sa1100_low_gpio_unmask, .unmask = sa1100_low_gpio_unmask,
@ -178,7 +179,8 @@ static int sa1100_high_gpio_wake(unsigned int irq, unsigned int on)
return 0; return 0;
} }
static struct irqchip sa1100_high_gpio_chip = { static struct irq_chip sa1100_high_gpio_chip = {
.name = "GPIO-h",
.ack = sa1100_high_gpio_ack, .ack = sa1100_high_gpio_ack,
.mask = sa1100_high_gpio_mask, .mask = sa1100_high_gpio_mask,
.unmask = sa1100_high_gpio_unmask, .unmask = sa1100_high_gpio_unmask,
@ -215,7 +217,8 @@ static int sa1100_set_wake(unsigned int irq, unsigned int on)
return -EINVAL; return -EINVAL;
} }
static struct irqchip sa1100_normal_chip = { static struct irq_chip sa1100_normal_chip = {
.name = "SC",
.ack = sa1100_mask_irq, .ack = sa1100_mask_irq,
.mask = sa1100_mask_irq, .mask = sa1100_mask_irq,
.unmask = sa1100_unmask_irq, .unmask = sa1100_unmask_irq,

View File

@ -69,7 +69,8 @@ static irqreturn_t bogus_int(int irq, void *dev_id, struct pt_regs *regs)
static struct irqaction cascade; static struct irqaction cascade;
static struct irqchip fb_chip = { static struct irq_chip fb_chip = {
.name = "XT-PIC",
.ack = shark_ack_8259A_irq, .ack = shark_ack_8259A_irq,
.mask = shark_disable_8259A_irq, .mask = shark_disable_8259A_irq,
.unmask = shark_enable_8259A_irq, .unmask = shark_enable_8259A_irq,

View File

@ -69,7 +69,8 @@ static void sic_unmask_irq(unsigned int irq)
writel(1 << irq, VA_SIC_BASE + SIC_IRQ_ENABLE_SET); writel(1 << irq, VA_SIC_BASE + SIC_IRQ_ENABLE_SET);
} }
static struct irqchip sic_chip = { static struct irq_chip sic_chip = {
.name = "SIC",
.ack = sic_mask_irq, .ack = sic_mask_irq,
.mask = sic_mask_irq, .mask = sic_mask_irq,
.unmask = sic_unmask_irq, .unmask = sic_unmask_irq,

View File

@ -944,7 +944,8 @@ static void mpuio_unmask_irq(unsigned int irq)
_set_gpio_irqenable(bank, gpio, 1); _set_gpio_irqenable(bank, gpio, 1);
} }
static struct irqchip gpio_irq_chip = { static struct irq_chip gpio_irq_chip = {
.name = "GPIO",
.ack = gpio_ack_irq, .ack = gpio_ack_irq,
.mask = gpio_mask_irq, .mask = gpio_mask_irq,
.unmask = gpio_unmask_irq, .unmask = gpio_unmask_irq,
@ -952,10 +953,11 @@ static struct irqchip gpio_irq_chip = {
.set_wake = gpio_wake_enable, .set_wake = gpio_wake_enable,
}; };
static struct irqchip mpuio_irq_chip = { static struct irq_chip mpuio_irq_chip = {
.name = "MPUIO",
.ack = mpuio_ack_irq, .ack = mpuio_ack_irq,
.mask = mpuio_mask_irq, .mask = mpuio_mask_irq,
.unmask = mpuio_unmask_irq .unmask = mpuio_unmask_irq
}; };
static int initialized; static int initialized;

View File

@ -151,7 +151,7 @@ static void
simscsi_sg_readwrite (struct scsi_cmnd *sc, int mode, unsigned long offset) simscsi_sg_readwrite (struct scsi_cmnd *sc, int mode, unsigned long offset)
{ {
int list_len = sc->use_sg; int list_len = sc->use_sg;
struct scatterlist *sl = (struct scatterlist *)sc->buffer; struct scatterlist *sl = (struct scatterlist *)sc->request_buffer;
struct disk_stat stat; struct disk_stat stat;
struct disk_req req; struct disk_req req;
@ -244,7 +244,7 @@ static void simscsi_fillresult(struct scsi_cmnd *sc, char *buf, unsigned len)
if (scatterlen == 0) if (scatterlen == 0)
memcpy(sc->request_buffer, buf, len); memcpy(sc->request_buffer, buf, len);
else for (slp = (struct scatterlist *)sc->buffer; scatterlen-- > 0 && len > 0; slp++) { else for (slp = (struct scatterlist *)sc->request_buffer; scatterlen-- > 0 && len > 0; slp++) {
unsigned thislen = min(len, slp->length); unsigned thislen = min(len, slp->length);
memcpy(page_address(slp->page) + slp->offset, buf, thislen); memcpy(page_address(slp->page) + slp->offset, buf, thislen);

View File

@ -632,7 +632,7 @@ kern_memory_descriptor (unsigned long phys_addr)
if (phys_addr - md->start < (md->num_pages << EFI_PAGE_SHIFT)) if (phys_addr - md->start < (md->num_pages << EFI_PAGE_SHIFT))
return md; return md;
} }
return 0; return NULL;
} }
static efi_memory_desc_t * static efi_memory_desc_t *
@ -652,7 +652,7 @@ efi_memory_descriptor (unsigned long phys_addr)
if (phys_addr - md->phys_addr < (md->num_pages << EFI_PAGE_SHIFT)) if (phys_addr - md->phys_addr < (md->num_pages << EFI_PAGE_SHIFT))
return md; return md;
} }
return 0; return NULL;
} }
u32 u32
@ -923,7 +923,7 @@ find_memmap_space (void)
void void
efi_memmap_init(unsigned long *s, unsigned long *e) efi_memmap_init(unsigned long *s, unsigned long *e)
{ {
struct kern_memdesc *k, *prev = 0; struct kern_memdesc *k, *prev = NULL;
u64 contig_low=0, contig_high=0; u64 contig_low=0, contig_high=0;
u64 as, ae, lim; u64 as, ae, lim;
void *efi_map_start, *efi_map_end, *p, *q; void *efi_map_start, *efi_map_end, *p, *q;

View File

@ -853,7 +853,6 @@ END(__ia64_init_fpu)
*/ */
GLOBAL_ENTRY(ia64_switch_mode_phys) GLOBAL_ENTRY(ia64_switch_mode_phys)
{ {
alloc r2=ar.pfs,0,0,0,0
rsm psr.i | psr.ic // disable interrupts and interrupt collection rsm psr.i | psr.ic // disable interrupts and interrupt collection
mov r15=ip mov r15=ip
} }
@ -902,7 +901,6 @@ END(ia64_switch_mode_phys)
*/ */
GLOBAL_ENTRY(ia64_switch_mode_virt) GLOBAL_ENTRY(ia64_switch_mode_virt)
{ {
alloc r2=ar.pfs,0,0,0,0
rsm psr.i | psr.ic // disable interrupts and interrupt collection rsm psr.i | psr.ic // disable interrupts and interrupt collection
mov r15=ip mov r15=ip
} }

View File

@ -62,7 +62,7 @@ EXPORT_SYMBOL(__udivdi3);
EXPORT_SYMBOL(__moddi3); EXPORT_SYMBOL(__moddi3);
EXPORT_SYMBOL(__umoddi3); EXPORT_SYMBOL(__umoddi3);
#if defined(CONFIG_MD_RAID5) || defined(CONFIG_MD_RAID5_MODULE) #if defined(CONFIG_MD_RAID456) || defined(CONFIG_MD_RAID456_MODULE)
extern void xor_ia64_2(void); extern void xor_ia64_2(void);
extern void xor_ia64_3(void); extern void xor_ia64_3(void);
extern void xor_ia64_4(void); extern void xor_ia64_4(void);

View File

@ -217,12 +217,7 @@ GLOBAL_ENTRY(ia64_pal_call_phys_stacked)
.body .body
;; ;;
ld8 loc2 = [loc2] // loc2 <- entry point ld8 loc2 = [loc2] // loc2 <- entry point
mov out0 = in0 // first argument mov loc3 = psr // save psr
mov out1 = in1 // copy arg2
mov out2 = in2 // copy arg3
mov out3 = in3 // copy arg3
;;
mov loc3 = psr // save psr
;; ;;
mov loc4=ar.rsc // save RSE configuration mov loc4=ar.rsc // save RSE configuration
dep.z loc2=loc2,0,61 // convert pal entry point to physical dep.z loc2=loc2,0,61 // convert pal entry point to physical
@ -236,18 +231,23 @@ GLOBAL_ENTRY(ia64_pal_call_phys_stacked)
;; ;;
andcm r16=loc3,r16 // removes bits to clear from psr andcm r16=loc3,r16 // removes bits to clear from psr
br.call.sptk.many rp=ia64_switch_mode_phys br.call.sptk.many rp=ia64_switch_mode_phys
.ret6:
mov out0 = in0 // first argument
mov out1 = in1 // copy arg2
mov out2 = in2 // copy arg3
mov out3 = in3 // copy arg3
mov loc5 = r19 mov loc5 = r19
mov loc6 = r20 mov loc6 = r20
br.call.sptk.many rp=b7 // now make the call br.call.sptk.many rp=b7 // now make the call
.ret7:
mov ar.rsc=0 // put RSE in enforced lazy, LE mode mov ar.rsc=0 // put RSE in enforced lazy, LE mode
mov r16=loc3 // r16= original psr mov r16=loc3 // r16= original psr
mov r19=loc5 mov r19=loc5
mov r20=loc6 mov r20=loc6
br.call.sptk.many rp=ia64_switch_mode_virt // return to virtual mode br.call.sptk.many rp=ia64_switch_mode_virt // return to virtual mode
.ret8: mov psr.l = loc3 // restore init PSR mov psr.l = loc3 // restore init PSR
mov ar.pfs = loc1 mov ar.pfs = loc1
mov rp = loc0 mov rp = loc0
;; ;;

View File

@ -566,29 +566,23 @@ version_info(char *page)
pal_version_u_t min_ver, cur_ver; pal_version_u_t min_ver, cur_ver;
char *p = page; char *p = page;
/* The PAL_VERSION call is advertised as being able to support if (ia64_pal_version(&min_ver, &cur_ver) != 0)
* both physical and virtual mode calls. This seems to be a documentation return 0;
* bug rather than firmware bug. In fact, it does only support physical mode.
* So now the code reflects this fact and the pal_version() has been updated
* accordingly.
*/
if (ia64_pal_version(&min_ver, &cur_ver) != 0) return 0;
p += sprintf(p, p += sprintf(p,
"PAL_vendor : 0x%02x (min=0x%02x)\n" "PAL_vendor : 0x%02x (min=0x%02x)\n"
"PAL_A : %x.%x.%x (min=%x.%x.%x)\n" "PAL_A : %02x.%02x (min=%02x.%02x)\n"
"PAL_B : %x.%x.%x (min=%x.%x.%x)\n", "PAL_B : %02x.%02x (min=%02x.%02x)\n",
cur_ver.pal_version_s.pv_pal_vendor, min_ver.pal_version_s.pv_pal_vendor, cur_ver.pal_version_s.pv_pal_vendor,
min_ver.pal_version_s.pv_pal_vendor,
cur_ver.pal_version_s.pv_pal_a_model>>4, cur_ver.pal_version_s.pv_pal_a_model,
cur_ver.pal_version_s.pv_pal_a_model&0xf, cur_ver.pal_version_s.pv_pal_a_rev, cur_ver.pal_version_s.pv_pal_a_rev,
min_ver.pal_version_s.pv_pal_a_model>>4, min_ver.pal_version_s.pv_pal_a_model,
min_ver.pal_version_s.pv_pal_a_model&0xf, min_ver.pal_version_s.pv_pal_a_rev, min_ver.pal_version_s.pv_pal_a_rev,
cur_ver.pal_version_s.pv_pal_b_model,
cur_ver.pal_version_s.pv_pal_b_model>>4, cur_ver.pal_version_s.pv_pal_b_rev,
cur_ver.pal_version_s.pv_pal_b_model&0xf, cur_ver.pal_version_s.pv_pal_b_rev, min_ver.pal_version_s.pv_pal_b_model,
min_ver.pal_version_s.pv_pal_b_model>>4, min_ver.pal_version_s.pv_pal_b_rev);
min_ver.pal_version_s.pv_pal_b_model&0xf, min_ver.pal_version_s.pv_pal_b_rev);
return p - page; return p - page;
} }

View File

@ -14,7 +14,7 @@ lib-y := __divsi3.o __udivsi3.o __modsi3.o __umodsi3.o \
lib-$(CONFIG_ITANIUM) += copy_page.o copy_user.o memcpy.o lib-$(CONFIG_ITANIUM) += copy_page.o copy_user.o memcpy.o
lib-$(CONFIG_MCKINLEY) += copy_page_mck.o memcpy_mck.o lib-$(CONFIG_MCKINLEY) += copy_page_mck.o memcpy_mck.o
lib-$(CONFIG_PERFMON) += carta_random.o lib-$(CONFIG_PERFMON) += carta_random.o
lib-$(CONFIG_MD_RAID5) += xor.o lib-$(CONFIG_MD_RAID456) += xor.o
AFLAGS___divdi3.o = AFLAGS___divdi3.o =
AFLAGS___udivdi3.o = -DUNSIGNED AFLAGS___udivdi3.o = -DUNSIGNED

View File

@ -27,6 +27,7 @@
#ifdef CONFIG_VIRTUAL_MEM_MAP #ifdef CONFIG_VIRTUAL_MEM_MAP
static unsigned long num_dma_physpages; static unsigned long num_dma_physpages;
static unsigned long max_gap;
#endif #endif
/** /**
@ -45,9 +46,15 @@ show_mem (void)
printk("Free swap: %6ldkB\n", nr_swap_pages<<(PAGE_SHIFT-10)); printk("Free swap: %6ldkB\n", nr_swap_pages<<(PAGE_SHIFT-10));
i = max_mapnr; i = max_mapnr;
while (i-- > 0) { for (i = 0; i < max_mapnr; i++) {
if (!pfn_valid(i)) if (!pfn_valid(i)) {
#ifdef CONFIG_VIRTUAL_MEM_MAP
if (max_gap < LARGE_GAP)
continue;
i = vmemmap_find_next_valid_pfn(0, i) - 1;
#endif
continue; continue;
}
total++; total++;
if (PageReserved(mem_map+i)) if (PageReserved(mem_map+i))
reserved++; reserved++;
@ -234,7 +241,6 @@ paging_init (void)
unsigned long zones_size[MAX_NR_ZONES]; unsigned long zones_size[MAX_NR_ZONES];
#ifdef CONFIG_VIRTUAL_MEM_MAP #ifdef CONFIG_VIRTUAL_MEM_MAP
unsigned long zholes_size[MAX_NR_ZONES]; unsigned long zholes_size[MAX_NR_ZONES];
unsigned long max_gap;
#endif #endif
/* initialize mem_map[] */ /* initialize mem_map[] */
@ -266,7 +272,6 @@ paging_init (void)
} }
} }
max_gap = 0;
efi_memmap_walk(find_largest_hole, (u64 *)&max_gap); efi_memmap_walk(find_largest_hole, (u64 *)&max_gap);
if (max_gap < LARGE_GAP) { if (max_gap < LARGE_GAP) {
vmem_map = (struct page *) 0; vmem_map = (struct page *) 0;
@ -277,7 +282,8 @@ paging_init (void)
/* allocate virtual_mem_map */ /* allocate virtual_mem_map */
map_size = PAGE_ALIGN(max_low_pfn * sizeof(struct page)); map_size = PAGE_ALIGN(ALIGN(max_low_pfn, MAX_ORDER_NR_PAGES) *
sizeof(struct page));
vmalloc_end -= map_size; vmalloc_end -= map_size;
vmem_map = (struct page *) vmalloc_end; vmem_map = (struct page *) vmalloc_end;
efi_memmap_walk(create_mem_map_page_table, NULL); efi_memmap_walk(create_mem_map_page_table, NULL);

View File

@ -534,68 +534,6 @@ void __cpuinit *per_cpu_init(void)
} }
#endif /* CONFIG_SMP */ #endif /* CONFIG_SMP */
#ifdef CONFIG_VIRTUAL_MEM_MAP
static inline int find_next_valid_pfn_for_pgdat(pg_data_t *pgdat, int i)
{
unsigned long end_address, hole_next_pfn;
unsigned long stop_address;
end_address = (unsigned long) &vmem_map[pgdat->node_start_pfn + i];
end_address = PAGE_ALIGN(end_address);
stop_address = (unsigned long) &vmem_map[
pgdat->node_start_pfn + pgdat->node_spanned_pages];
do {
pgd_t *pgd;
pud_t *pud;
pmd_t *pmd;
pte_t *pte;
pgd = pgd_offset_k(end_address);
if (pgd_none(*pgd)) {
end_address += PGDIR_SIZE;
continue;
}
pud = pud_offset(pgd, end_address);
if (pud_none(*pud)) {
end_address += PUD_SIZE;
continue;
}
pmd = pmd_offset(pud, end_address);
if (pmd_none(*pmd)) {
end_address += PMD_SIZE;
continue;
}
pte = pte_offset_kernel(pmd, end_address);
retry_pte:
if (pte_none(*pte)) {
end_address += PAGE_SIZE;
pte++;
if ((end_address < stop_address) &&
(end_address != ALIGN(end_address, 1UL << PMD_SHIFT)))
goto retry_pte;
continue;
}
/* Found next valid vmem_map page */
break;
} while (end_address < stop_address);
end_address = min(end_address, stop_address);
end_address = end_address - (unsigned long) vmem_map + sizeof(struct page) - 1;
hole_next_pfn = end_address / sizeof(struct page);
return hole_next_pfn - pgdat->node_start_pfn;
}
#else
static inline int find_next_valid_pfn_for_pgdat(pg_data_t *pgdat, int i)
{
return i + 1;
}
#endif
/** /**
* show_mem - give short summary of memory stats * show_mem - give short summary of memory stats
* *
@ -625,7 +563,8 @@ void show_mem(void)
if (pfn_valid(pgdat->node_start_pfn + i)) if (pfn_valid(pgdat->node_start_pfn + i))
page = pfn_to_page(pgdat->node_start_pfn + i); page = pfn_to_page(pgdat->node_start_pfn + i);
else { else {
i = find_next_valid_pfn_for_pgdat(pgdat, i) - 1; i = vmemmap_find_next_valid_pfn(pgdat->node_id,
i) - 1;
continue; continue;
} }
if (PageReserved(page)) if (PageReserved(page))
@ -751,7 +690,8 @@ void __init paging_init(void)
efi_memmap_walk(filter_rsvd_memory, count_node_pages); efi_memmap_walk(filter_rsvd_memory, count_node_pages);
#ifdef CONFIG_VIRTUAL_MEM_MAP #ifdef CONFIG_VIRTUAL_MEM_MAP
vmalloc_end -= PAGE_ALIGN(max_low_pfn * sizeof(struct page)); vmalloc_end -= PAGE_ALIGN(ALIGN(max_low_pfn, MAX_ORDER_NR_PAGES) *
sizeof(struct page));
vmem_map = (struct page *) vmalloc_end; vmem_map = (struct page *) vmalloc_end;
efi_memmap_walk(create_mem_map_page_table, NULL); efi_memmap_walk(create_mem_map_page_table, NULL);
printk("Virtual mem_map starts at 0x%p\n", vmem_map); printk("Virtual mem_map starts at 0x%p\n", vmem_map);

View File

@ -415,6 +415,61 @@ ia64_mmu_init (void *my_cpu_data)
} }
#ifdef CONFIG_VIRTUAL_MEM_MAP #ifdef CONFIG_VIRTUAL_MEM_MAP
int vmemmap_find_next_valid_pfn(int node, int i)
{
unsigned long end_address, hole_next_pfn;
unsigned long stop_address;
pg_data_t *pgdat = NODE_DATA(node);
end_address = (unsigned long) &vmem_map[pgdat->node_start_pfn + i];
end_address = PAGE_ALIGN(end_address);
stop_address = (unsigned long) &vmem_map[
pgdat->node_start_pfn + pgdat->node_spanned_pages];
do {
pgd_t *pgd;
pud_t *pud;
pmd_t *pmd;
pte_t *pte;
pgd = pgd_offset_k(end_address);
if (pgd_none(*pgd)) {
end_address += PGDIR_SIZE;
continue;
}
pud = pud_offset(pgd, end_address);
if (pud_none(*pud)) {
end_address += PUD_SIZE;
continue;
}
pmd = pmd_offset(pud, end_address);
if (pmd_none(*pmd)) {
end_address += PMD_SIZE;
continue;
}
pte = pte_offset_kernel(pmd, end_address);
retry_pte:
if (pte_none(*pte)) {
end_address += PAGE_SIZE;
pte++;
if ((end_address < stop_address) &&
(end_address != ALIGN(end_address, 1UL << PMD_SHIFT)))
goto retry_pte;
continue;
}
/* Found next valid vmem_map page */
break;
} while (end_address < stop_address);
end_address = min(end_address, stop_address);
end_address = end_address - (unsigned long) vmem_map + sizeof(struct page) - 1;
hole_next_pfn = end_address / sizeof(struct page);
return hole_next_pfn - pgdat->node_start_pfn;
}
int __init int __init
create_mem_map_page_table (u64 start, u64 end, void *arg) create_mem_map_page_table (u64 start, u64 end, void *arg)

View File

@ -32,7 +32,7 @@ ioremap (unsigned long offset, unsigned long size)
*/ */
attr = kern_mem_attribute(offset, size); attr = kern_mem_attribute(offset, size);
if (attr & EFI_MEMORY_WB) if (attr & EFI_MEMORY_WB)
return phys_to_virt(offset); return (void __iomem *) phys_to_virt(offset);
else if (attr & EFI_MEMORY_UC) else if (attr & EFI_MEMORY_UC)
return __ioremap(offset, size); return __ioremap(offset, size);
@ -43,7 +43,7 @@ ioremap (unsigned long offset, unsigned long size)
gran_base = GRANULEROUNDDOWN(offset); gran_base = GRANULEROUNDDOWN(offset);
gran_size = GRANULEROUNDUP(offset + size) - gran_base; gran_size = GRANULEROUNDUP(offset + size) - gran_base;
if (efi_mem_attribute(gran_base, gran_size) & EFI_MEMORY_WB) if (efi_mem_attribute(gran_base, gran_size) & EFI_MEMORY_WB)
return phys_to_virt(offset); return (void __iomem *) phys_to_virt(offset);
return __ioremap(offset, size); return __ioremap(offset, size);
} }
@ -53,7 +53,7 @@ void __iomem *
ioremap_nocache (unsigned long offset, unsigned long size) ioremap_nocache (unsigned long offset, unsigned long size)
{ {
if (kern_mem_attribute(offset, size) & EFI_MEMORY_WB) if (kern_mem_attribute(offset, size) & EFI_MEMORY_WB)
return 0; return NULL;
return __ioremap(offset, size); return __ioremap(offset, size);
} }

View File

@ -480,7 +480,7 @@ xpc_activating(void *__partid)
partid_t partid = (u64) __partid; partid_t partid = (u64) __partid;
struct xpc_partition *part = &xpc_partitions[partid]; struct xpc_partition *part = &xpc_partitions[partid];
unsigned long irq_flags; unsigned long irq_flags;
struct sched_param param = { sched_priority: MAX_RT_PRIO - 1 }; struct sched_param param = { .sched_priority = MAX_RT_PRIO - 1 };
int ret; int ret;

View File

@ -74,7 +74,7 @@ tioce_mmr_war_pre(struct tioce_kernel *kern, void *mmr_addr)
else else
mmr_war_offset = 0x158; mmr_war_offset = 0x158;
readq_relaxed((void *)(mmr_base + mmr_war_offset)); readq_relaxed((void __iomem *)(mmr_base + mmr_war_offset));
} }
} }
@ -92,8 +92,8 @@ tioce_mmr_war_post(struct tioce_kernel *kern, void *mmr_addr)
if (mmr_offset < 0x45000) { if (mmr_offset < 0x45000) {
if (mmr_offset == 0x100) if (mmr_offset == 0x100)
readq_relaxed((void *)(mmr_base + 0x38)); readq_relaxed((void __iomem *)(mmr_base + 0x38));
readq_relaxed((void *)(mmr_base + 0xb050)); readq_relaxed((void __iomem *)(mmr_base + 0xb050));
} }
} }

View File

@ -513,6 +513,7 @@ END(stub_rt_sigreturn)
swapgs swapgs
1: incl %gs:pda_irqcount # RED-PEN should check preempt count 1: incl %gs:pda_irqcount # RED-PEN should check preempt count
cmoveq %gs:pda_irqstackptr,%rsp cmoveq %gs:pda_irqstackptr,%rsp
push %rbp # backlink for old unwinder
/* /*
* We entered an interrupt context - irqs are off: * We entered an interrupt context - irqs are off:
*/ */
@ -1139,18 +1140,21 @@ ENTRY(machine_check)
END(machine_check) END(machine_check)
#endif #endif
/* Call softirq on interrupt stack. Interrupts are off. */
ENTRY(call_softirq) ENTRY(call_softirq)
CFI_STARTPROC CFI_STARTPROC
movq %gs:pda_irqstackptr,%rax push %rbp
movq %rsp,%rdx CFI_ADJUST_CFA_OFFSET 8
CFI_DEF_CFA_REGISTER rdx CFI_REL_OFFSET rbp,0
mov %rsp,%rbp
CFI_DEF_CFA_REGISTER rbp
incl %gs:pda_irqcount incl %gs:pda_irqcount
cmove %rax,%rsp cmove %gs:pda_irqstackptr,%rsp
pushq %rdx push %rbp # backlink for old unwinder
/*todo CFI_DEF_CFA_EXPRESSION ...*/
call __do_softirq call __do_softirq
popq %rsp leaveq
CFI_DEF_CFA_REGISTER rsp CFI_DEF_CFA_REGISTER rsp
CFI_ADJUST_CFA_OFFSET -8
decl %gs:pda_irqcount decl %gs:pda_irqcount
ret ret
CFI_ENDPROC CFI_ENDPROC

View File

@ -92,5 +92,7 @@ void __init no_iommu_init(void)
{ {
if (dma_ops) if (dma_ops)
return; return;
force_iommu = 0; /* no HW IOMMU */
dma_ops = &nommu_dma_ops; dma_ops = &nommu_dma_ops;
} }

View File

@ -58,8 +58,8 @@ struct dock_dependent_device {
}; };
#define DOCK_DOCKING 0x00000001 #define DOCK_DOCKING 0x00000001
#define DOCK_EVENT KOBJ_DOCK #define DOCK_EVENT 3
#define UNDOCK_EVENT KOBJ_UNDOCK #define UNDOCK_EVENT 2
static struct dock_station *dock_station; static struct dock_station *dock_station;
@ -322,11 +322,10 @@ static void hotplug_dock_devices(struct dock_station *ds, u32 event)
static void dock_event(struct dock_station *ds, u32 event, int num) static void dock_event(struct dock_station *ds, u32 event, int num)
{ {
struct acpi_device *device; /*
* we don't do events until someone tells me that
device = dock_create_acpi_device(ds->handle); * they would like to have them.
if (device) */
kobject_uevent(&device->kobj, num);
} }
/** /**

View File

@ -374,7 +374,12 @@ scdrv_init(void)
struct sysctl_data_s *scd; struct sysctl_data_s *scd;
void *salbuf; void *salbuf;
dev_t first_dev, dev; dev_t first_dev, dev;
nasid_t event_nasid = ia64_sn_get_console_nasid(); nasid_t event_nasid;
if (!ia64_platform_is("sn2"))
return -ENODEV;
event_nasid = ia64_sn_get_console_nasid();
if (alloc_chrdev_region(&first_dev, 0, num_cnodes, if (alloc_chrdev_region(&first_dev, 0, num_cnodes,
SYSCTL_BASENAME) < 0) { SYSCTL_BASENAME) < 0) {

View File

@ -35,6 +35,7 @@
#include <net/arp.h> #include <net/arp.h>
#include <net/neighbour.h> #include <net/neighbour.h>
#include <net/route.h> #include <net/route.h>
#include <net/netevent.h>
#include <rdma/ib_addr.h> #include <rdma/ib_addr.h>
MODULE_AUTHOR("Sean Hefty"); MODULE_AUTHOR("Sean Hefty");
@ -326,25 +327,22 @@ void rdma_addr_cancel(struct rdma_dev_addr *addr)
} }
EXPORT_SYMBOL(rdma_addr_cancel); EXPORT_SYMBOL(rdma_addr_cancel);
static int addr_arp_recv(struct sk_buff *skb, struct net_device *dev, static int netevent_callback(struct notifier_block *self, unsigned long event,
struct packet_type *pkt, struct net_device *orig_dev) void *ctx)
{ {
struct arphdr *arp_hdr; if (event == NETEVENT_NEIGH_UPDATE) {
struct neighbour *neigh = ctx;
arp_hdr = (struct arphdr *) skb->nh.raw; if (neigh->dev->type == ARPHRD_INFINIBAND &&
(neigh->nud_state & NUD_VALID)) {
if (arp_hdr->ar_op == htons(ARPOP_REQUEST) || set_timeout(jiffies);
arp_hdr->ar_op == htons(ARPOP_REPLY)) }
set_timeout(jiffies); }
kfree_skb(skb);
return 0; return 0;
} }
static struct packet_type addr_arp = { static struct notifier_block nb = {
.type = __constant_htons(ETH_P_ARP), .notifier_call = netevent_callback
.func = addr_arp_recv,
.af_packet_priv = (void*) 1,
}; };
static int addr_init(void) static int addr_init(void)
@ -353,13 +351,13 @@ static int addr_init(void)
if (!addr_wq) if (!addr_wq)
return -ENOMEM; return -ENOMEM;
dev_add_pack(&addr_arp); register_netevent_notifier(&nb);
return 0; return 0;
} }
static void addr_cleanup(void) static void addr_cleanup(void)
{ {
dev_remove_pack(&addr_arp); unregister_netevent_notifier(&nb);
destroy_workqueue(addr_wq); destroy_workqueue(addr_wq);
} }

View File

@ -975,8 +975,10 @@ int ib_send_cm_req(struct ib_cm_id *cm_id,
cm_id_priv->timewait_info = cm_create_timewait_info(cm_id_priv-> cm_id_priv->timewait_info = cm_create_timewait_info(cm_id_priv->
id.local_id); id.local_id);
if (IS_ERR(cm_id_priv->timewait_info)) if (IS_ERR(cm_id_priv->timewait_info)) {
ret = PTR_ERR(cm_id_priv->timewait_info);
goto out; goto out;
}
ret = cm_init_av_by_path(param->primary_path, &cm_id_priv->av); ret = cm_init_av_by_path(param->primary_path, &cm_id_priv->av);
if (ret) if (ret)

View File

@ -42,6 +42,7 @@
#include <linux/kref.h> #include <linux/kref.h>
#include <linux/idr.h> #include <linux/idr.h>
#include <linux/mutex.h> #include <linux/mutex.h>
#include <linux/completion.h>
#include <rdma/ib_verbs.h> #include <rdma/ib_verbs.h>
#include <rdma/ib_user_verbs.h> #include <rdma/ib_user_verbs.h>
@ -69,6 +70,7 @@
struct ib_uverbs_device { struct ib_uverbs_device {
struct kref ref; struct kref ref;
struct completion comp;
int devnum; int devnum;
struct cdev *dev; struct cdev *dev;
struct class_device *class_dev; struct class_device *class_dev;

View File

@ -122,7 +122,7 @@ static void ib_uverbs_release_dev(struct kref *ref)
struct ib_uverbs_device *dev = struct ib_uverbs_device *dev =
container_of(ref, struct ib_uverbs_device, ref); container_of(ref, struct ib_uverbs_device, ref);
kfree(dev); complete(&dev->comp);
} }
void ib_uverbs_release_ucq(struct ib_uverbs_file *file, void ib_uverbs_release_ucq(struct ib_uverbs_file *file,
@ -740,6 +740,7 @@ static void ib_uverbs_add_one(struct ib_device *device)
return; return;
kref_init(&uverbs_dev->ref); kref_init(&uverbs_dev->ref);
init_completion(&uverbs_dev->comp);
spin_lock(&map_lock); spin_lock(&map_lock);
uverbs_dev->devnum = find_first_zero_bit(dev_map, IB_UVERBS_MAX_DEVICES); uverbs_dev->devnum = find_first_zero_bit(dev_map, IB_UVERBS_MAX_DEVICES);
@ -793,6 +794,8 @@ err_cdev:
err: err:
kref_put(&uverbs_dev->ref, ib_uverbs_release_dev); kref_put(&uverbs_dev->ref, ib_uverbs_release_dev);
wait_for_completion(&uverbs_dev->comp);
kfree(uverbs_dev);
return; return;
} }
@ -812,7 +815,10 @@ static void ib_uverbs_remove_one(struct ib_device *device)
spin_unlock(&map_lock); spin_unlock(&map_lock);
clear_bit(uverbs_dev->devnum, dev_map); clear_bit(uverbs_dev->devnum, dev_map);
kref_put(&uverbs_dev->ref, ib_uverbs_release_dev); kref_put(&uverbs_dev->ref, ib_uverbs_release_dev);
wait_for_completion(&uverbs_dev->comp);
kfree(uverbs_dev);
} }
static int uverbs_event_get_sb(struct file_system_type *fs_type, int flags, static int uverbs_event_get_sb(struct file_system_type *fs_type, int flags,

View File

@ -108,14 +108,15 @@ void mthca_alloc_cleanup(struct mthca_alloc *alloc)
* serialize access to the array. * serialize access to the array.
*/ */
#define MTHCA_ARRAY_MASK (PAGE_SIZE / sizeof (void *) - 1)
void *mthca_array_get(struct mthca_array *array, int index) void *mthca_array_get(struct mthca_array *array, int index)
{ {
int p = (index * sizeof (void *)) >> PAGE_SHIFT; int p = (index * sizeof (void *)) >> PAGE_SHIFT;
if (array->page_list[p].page) { if (array->page_list[p].page)
int i = index & (PAGE_SIZE / sizeof (void *) - 1); return array->page_list[p].page[index & MTHCA_ARRAY_MASK];
return array->page_list[p].page[i]; else
} else
return NULL; return NULL;
} }
@ -130,8 +131,7 @@ int mthca_array_set(struct mthca_array *array, int index, void *value)
if (!array->page_list[p].page) if (!array->page_list[p].page)
return -ENOMEM; return -ENOMEM;
array->page_list[p].page[index & (PAGE_SIZE / sizeof (void *) - 1)] = array->page_list[p].page[index & MTHCA_ARRAY_MASK] = value;
value;
++array->page_list[p].used; ++array->page_list[p].used;
return 0; return 0;
@ -144,7 +144,8 @@ void mthca_array_clear(struct mthca_array *array, int index)
if (--array->page_list[p].used == 0) { if (--array->page_list[p].used == 0) {
free_page((unsigned long) array->page_list[p].page); free_page((unsigned long) array->page_list[p].page);
array->page_list[p].page = NULL; array->page_list[p].page = NULL;
} } else
array->page_list[p].page[index & MTHCA_ARRAY_MASK] = NULL;
if (array->page_list[p].used < 0) if (array->page_list[p].used < 0)
pr_debug("Array %p index %d page %d with ref count %d < 0\n", pr_debug("Array %p index %d page %d with ref count %d < 0\n",

View File

@ -6,8 +6,7 @@ config INFINIBAND_IPOIB
transports IP packets over InfiniBand so you can use your IB transports IP packets over InfiniBand so you can use your IB
device as a fancy NIC. device as a fancy NIC.
The IPoIB protocol is defined by the IETF ipoib working See Documentation/infiniband/ipoib.txt for more information
group: <http://www.ietf.org/html.charters/ipoib-charter.html>.
config INFINIBAND_IPOIB_DEBUG config INFINIBAND_IPOIB_DEBUG
bool "IP-over-InfiniBand debugging" if EMBEDDED bool "IP-over-InfiniBand debugging" if EMBEDDED

View File

@ -77,6 +77,14 @@ MODULE_PARM_DESC(topspin_workarounds,
static const u8 topspin_oui[3] = { 0x00, 0x05, 0xad }; static const u8 topspin_oui[3] = { 0x00, 0x05, 0xad };
static int mellanox_workarounds = 1;
module_param(mellanox_workarounds, int, 0444);
MODULE_PARM_DESC(mellanox_workarounds,
"Enable workarounds for Mellanox SRP target bugs if != 0");
static const u8 mellanox_oui[3] = { 0x00, 0x02, 0xc9 };
static void srp_add_one(struct ib_device *device); static void srp_add_one(struct ib_device *device);
static void srp_remove_one(struct ib_device *device); static void srp_remove_one(struct ib_device *device);
static void srp_completion(struct ib_cq *cq, void *target_ptr); static void srp_completion(struct ib_cq *cq, void *target_ptr);
@ -526,8 +534,10 @@ static int srp_reconnect_target(struct srp_target_port *target)
while (ib_poll_cq(target->cq, 1, &wc) > 0) while (ib_poll_cq(target->cq, 1, &wc) > 0)
; /* nothing */ ; /* nothing */
spin_lock_irq(target->scsi_host->host_lock);
list_for_each_entry_safe(req, tmp, &target->req_queue, list) list_for_each_entry_safe(req, tmp, &target->req_queue, list)
srp_reset_req(target, req); srp_reset_req(target, req);
spin_unlock_irq(target->scsi_host->host_lock);
target->rx_head = 0; target->rx_head = 0;
target->tx_head = 0; target->tx_head = 0;
@ -567,7 +577,7 @@ err:
return ret; return ret;
} }
static int srp_map_fmr(struct srp_device *dev, struct scatterlist *scat, static int srp_map_fmr(struct srp_target_port *target, struct scatterlist *scat,
int sg_cnt, struct srp_request *req, int sg_cnt, struct srp_request *req,
struct srp_direct_buf *buf) struct srp_direct_buf *buf)
{ {
@ -577,10 +587,15 @@ static int srp_map_fmr(struct srp_device *dev, struct scatterlist *scat,
int page_cnt; int page_cnt;
int i, j; int i, j;
int ret; int ret;
struct srp_device *dev = target->srp_host->dev;
if (!dev->fmr_pool) if (!dev->fmr_pool)
return -ENODEV; return -ENODEV;
if ((sg_dma_address(&scat[0]) & ~dev->fmr_page_mask) &&
mellanox_workarounds && !memcmp(&target->ioc_guid, mellanox_oui, 3))
return -EINVAL;
len = page_cnt = 0; len = page_cnt = 0;
for (i = 0; i < sg_cnt; ++i) { for (i = 0; i < sg_cnt; ++i) {
if (sg_dma_address(&scat[i]) & ~dev->fmr_page_mask) { if (sg_dma_address(&scat[i]) & ~dev->fmr_page_mask) {
@ -683,7 +698,7 @@ static int srp_map_data(struct scsi_cmnd *scmnd, struct srp_target_port *target,
buf->va = cpu_to_be64(sg_dma_address(scat)); buf->va = cpu_to_be64(sg_dma_address(scat));
buf->key = cpu_to_be32(target->srp_host->dev->mr->rkey); buf->key = cpu_to_be32(target->srp_host->dev->mr->rkey);
buf->len = cpu_to_be32(sg_dma_len(scat)); buf->len = cpu_to_be32(sg_dma_len(scat));
} else if (srp_map_fmr(target->srp_host->dev, scat, count, req, } else if (srp_map_fmr(target, scat, count, req,
(void *) cmd->add_data)) { (void *) cmd->add_data)) {
/* /*
* FMR mapping failed, and the scatterlist has more * FMR mapping failed, and the scatterlist has more

View File

@ -526,7 +526,9 @@ static int dvb_frontend_thread(void *data)
fepriv->delay = 3*HZ; fepriv->delay = 3*HZ;
fepriv->status = 0; fepriv->status = 0;
fepriv->wakeup = 0; fepriv->wakeup = 0;
fepriv->reinitialise = 1; fepriv->reinitialise = 0;
dvb_frontend_init(fe);
while (1) { while (1) {
up(&fepriv->sem); /* is locked when we enter the thread... */ up(&fepriv->sem); /* is locked when we enter the thread... */
@ -1013,17 +1015,18 @@ static int dvb_frontend_open(struct inode *inode, struct file *file)
return ret; return ret;
if ((file->f_flags & O_ACCMODE) != O_RDONLY) { if ((file->f_flags & O_ACCMODE) != O_RDONLY) {
/* normal tune mode when opened R/W */
fepriv->tune_mode_flags &= ~FE_TUNE_MODE_ONESHOT;
fepriv->tone = -1;
fepriv->voltage = -1;
ret = dvb_frontend_start (fe); ret = dvb_frontend_start (fe);
if (ret) if (ret)
dvb_generic_release (inode, file); dvb_generic_release (inode, file);
/* empty event queue */ /* empty event queue */
fepriv->events.eventr = fepriv->events.eventw = 0; fepriv->events.eventr = fepriv->events.eventw = 0;
/* normal tune mode when opened R/W */
fepriv->tune_mode_flags &= ~FE_TUNE_MODE_ONESHOT;
fepriv->tone = -1;
fepriv->voltage = -1;
} }
return ret; return ret;

View File

@ -194,11 +194,11 @@ struct dvb_pll_desc dvb_pll_tda665x = {
{ 253834000, 36249333, 166667, 0xca, 0x62 /* 011 0 0 0 10 */ }, { 253834000, 36249333, 166667, 0xca, 0x62 /* 011 0 0 0 10 */ },
{ 383834000, 36249333, 166667, 0xca, 0xa2 /* 101 0 0 0 10 */ }, { 383834000, 36249333, 166667, 0xca, 0xa2 /* 101 0 0 0 10 */ },
{ 443834000, 36249333, 166667, 0xca, 0xc2 /* 110 0 0 0 10 */ }, { 443834000, 36249333, 166667, 0xca, 0xc2 /* 110 0 0 0 10 */ },
{ 444000000, 36249333, 166667, 0xca, 0xc3 /* 110 0 0 0 11 */ }, { 444000000, 36249333, 166667, 0xca, 0xc4 /* 110 0 0 1 00 */ },
{ 583834000, 36249333, 166667, 0xca, 0x63 /* 011 0 0 0 11 */ }, { 583834000, 36249333, 166667, 0xca, 0x64 /* 011 0 0 1 00 */ },
{ 793834000, 36249333, 166667, 0xca, 0xa3 /* 101 0 0 0 11 */ }, { 793834000, 36249333, 166667, 0xca, 0xa4 /* 101 0 0 1 00 */ },
{ 444834000, 36249333, 166667, 0xca, 0xc3 /* 110 0 0 0 11 */ }, { 444834000, 36249333, 166667, 0xca, 0xc4 /* 110 0 0 1 00 */ },
{ 861000000, 36249333, 166667, 0xca, 0xe3 /* 111 0 0 0 11 */ }, { 861000000, 36249333, 166667, 0xca, 0xe4 /* 111 0 0 1 00 */ },
} }
}; };
EXPORT_SYMBOL(dvb_pll_tda665x); EXPORT_SYMBOL(dvb_pll_tda665x);
@ -613,7 +613,21 @@ static struct dvb_tuner_ops dvb_pll_tuner_ops = {
int dvb_pll_attach(struct dvb_frontend *fe, int pll_addr, struct i2c_adapter *i2c, struct dvb_pll_desc *desc) int dvb_pll_attach(struct dvb_frontend *fe, int pll_addr, struct i2c_adapter *i2c, struct dvb_pll_desc *desc)
{ {
u8 b1 [] = { 0 };
struct i2c_msg msg = { .addr = pll_addr, .flags = I2C_M_RD, .buf = b1, .len = 1 };
struct dvb_pll_priv *priv = NULL; struct dvb_pll_priv *priv = NULL;
int ret;
if (i2c != NULL) {
if (fe->ops.i2c_gate_ctrl)
fe->ops.i2c_gate_ctrl(fe, 1);
ret = i2c_transfer (i2c, &msg, 1);
if (ret != 1)
return -1;
if (fe->ops.i2c_gate_ctrl)
fe->ops.i2c_gate_ctrl(fe, 0);
}
priv = kzalloc(sizeof(struct dvb_pll_priv), GFP_KERNEL); priv = kzalloc(sizeof(struct dvb_pll_priv), GFP_KERNEL);
if (priv == NULL) if (priv == NULL)

View File

@ -2203,8 +2203,8 @@ static int frontend_init(struct av7110 *av7110)
av7110->fe->ops.tuner_ops.set_params = nexusca_stv0297_tuner_set_params; av7110->fe->ops.tuner_ops.set_params = nexusca_stv0297_tuner_set_params;
/* set TDA9819 into DVB mode */ /* set TDA9819 into DVB mode */
saa7146_setgpio(av7110->dev, 1, SAA7146_GPIO_OUTLO); // TDA9198 pin9(STD) saa7146_setgpio(av7110->dev, 1, SAA7146_GPIO_OUTLO); // TDA9819 pin9(STD)
saa7146_setgpio(av7110->dev, 3, SAA7146_GPIO_OUTLO); // TDA9198 pin30(VIF) saa7146_setgpio(av7110->dev, 3, SAA7146_GPIO_OUTLO); // TDA9819 pin30(VIF)
/* tuner on this needs a slower i2c bus speed */ /* tuner on this needs a slower i2c bus speed */
av7110->dev->i2c_bitrate = SAA7146_I2C_BUS_BIT_RATE_240; av7110->dev->i2c_bitrate = SAA7146_I2C_BUS_BIT_RATE_240;

View File

@ -272,8 +272,8 @@ static int av7110_dvb_c_switch(struct saa7146_fh *fh)
if (ves1820_writereg(dev, 0x09, 0x0f, 0x60)) if (ves1820_writereg(dev, 0x09, 0x0f, 0x60))
dprintk(1, "setting band in demodulator failed.\n"); dprintk(1, "setting band in demodulator failed.\n");
} else if (av7110->analog_tuner_flags & ANALOG_TUNER_STV0297) { } else if (av7110->analog_tuner_flags & ANALOG_TUNER_STV0297) {
saa7146_setgpio(dev, 1, SAA7146_GPIO_OUTHI); // TDA9198 pin9(STD) saa7146_setgpio(dev, 1, SAA7146_GPIO_OUTHI); // TDA9819 pin9(STD)
saa7146_setgpio(dev, 3, SAA7146_GPIO_OUTHI); // TDA9198 pin30(VIF) saa7146_setgpio(dev, 3, SAA7146_GPIO_OUTHI); // TDA9819 pin30(VIF)
} }
if (i2c_writereg(av7110, 0x48, 0x02, 0xd0) != 1) if (i2c_writereg(av7110, 0x48, 0x02, 0xd0) != 1)
dprintk(1, "saa7113 write failed @ card %d", av7110->dvb_adapter.num); dprintk(1, "saa7113 write failed @ card %d", av7110->dvb_adapter.num);
@ -308,8 +308,8 @@ static int av7110_dvb_c_switch(struct saa7146_fh *fh)
if (ves1820_writereg(dev, 0x09, 0x0f, 0x20)) if (ves1820_writereg(dev, 0x09, 0x0f, 0x20))
dprintk(1, "setting band in demodulator failed.\n"); dprintk(1, "setting band in demodulator failed.\n");
} else if (av7110->analog_tuner_flags & ANALOG_TUNER_STV0297) { } else if (av7110->analog_tuner_flags & ANALOG_TUNER_STV0297) {
saa7146_setgpio(dev, 1, SAA7146_GPIO_OUTLO); // TDA9198 pin9(STD) saa7146_setgpio(dev, 1, SAA7146_GPIO_OUTLO); // TDA9819 pin9(STD)
saa7146_setgpio(dev, 3, SAA7146_GPIO_OUTLO); // TDA9198 pin30(VIF) saa7146_setgpio(dev, 3, SAA7146_GPIO_OUTLO); // TDA9819 pin30(VIF)
} }
} }
@ -750,8 +750,8 @@ int av7110_init_analog_module(struct av7110 *av7110)
if (ves1820_writereg(av7110->dev, 0x09, 0x0f, 0x20)) if (ves1820_writereg(av7110->dev, 0x09, 0x0f, 0x20))
dprintk(1, "setting band in demodulator failed.\n"); dprintk(1, "setting band in demodulator failed.\n");
} else if (av7110->analog_tuner_flags & ANALOG_TUNER_STV0297) { } else if (av7110->analog_tuner_flags & ANALOG_TUNER_STV0297) {
saa7146_setgpio(av7110->dev, 1, SAA7146_GPIO_OUTLO); // TDA9198 pin9(STD) saa7146_setgpio(av7110->dev, 1, SAA7146_GPIO_OUTLO); // TDA9819 pin9(STD)
saa7146_setgpio(av7110->dev, 3, SAA7146_GPIO_OUTLO); // TDA9198 pin30(VIF) saa7146_setgpio(av7110->dev, 3, SAA7146_GPIO_OUTLO); // TDA9819 pin30(VIF)
} }
/* init the saa7113 */ /* init the saa7113 */

View File

@ -1303,6 +1303,9 @@ static int budget_av_attach(struct saa7146_dev *dev, struct saa7146_pci_extensio
budget_av->budget.dvb_adapter.priv = budget_av; budget_av->budget.dvb_adapter.priv = budget_av;
frontend_init(budget_av); frontend_init(budget_av);
ciintf_init(budget_av); ciintf_init(budget_av);
ttpci_budget_init_hooks(&budget_av->budget);
return 0; return 0;
} }

View File

@ -1101,6 +1101,8 @@ static int budget_ci_attach(struct saa7146_dev *dev, struct saa7146_pci_extensio
budget_ci->budget.dvb_adapter.priv = budget_ci; budget_ci->budget.dvb_adapter.priv = budget_ci;
frontend_init(budget_ci); frontend_init(budget_ci);
ttpci_budget_init_hooks(&budget_ci->budget);
return 0; return 0;
} }

View File

@ -63,9 +63,6 @@ static int stop_ts_capture(struct budget *budget)
{ {
dprintk(2, "budget: %p\n", budget); dprintk(2, "budget: %p\n", budget);
if (--budget->feeding)
return budget->feeding;
saa7146_write(budget->dev, MC1, MASK_20); // DMA3 off saa7146_write(budget->dev, MC1, MASK_20); // DMA3 off
SAA7146_IER_DISABLE(budget->dev, MASK_10); SAA7146_IER_DISABLE(budget->dev, MASK_10);
return 0; return 0;
@ -77,8 +74,8 @@ static int start_ts_capture(struct budget *budget)
dprintk(2, "budget: %p\n", budget); dprintk(2, "budget: %p\n", budget);
if (budget->feeding) if (!budget->feeding || !budget->fe_synced)
return ++budget->feeding; return 0;
saa7146_write(dev, MC1, MASK_20); // DMA3 off saa7146_write(dev, MC1, MASK_20); // DMA3 off
@ -139,7 +136,33 @@ static int start_ts_capture(struct budget *budget)
SAA7146_IER_ENABLE(budget->dev, MASK_10); /* VPE */ SAA7146_IER_ENABLE(budget->dev, MASK_10); /* VPE */
saa7146_write(dev, MC1, (MASK_04 | MASK_20)); /* DMA3 on */ saa7146_write(dev, MC1, (MASK_04 | MASK_20)); /* DMA3 on */
return ++budget->feeding; return 0;
}
static int budget_read_fe_status(struct dvb_frontend *fe, fe_status_t *status)
{
struct budget *budget = (struct budget *) fe->dvb->priv;
int synced;
int ret;
if (budget->read_fe_status)
ret = budget->read_fe_status(fe, status);
else
ret = -EINVAL;
if (!ret) {
synced = (*status & FE_HAS_LOCK);
if (synced != budget->fe_synced) {
budget->fe_synced = synced;
spin_lock(&budget->feedlock);
if (synced)
start_ts_capture(budget);
else
stop_ts_capture(budget);
spin_unlock(&budget->feedlock);
}
}
return ret;
} }
static void vpeirq(unsigned long data) static void vpeirq(unsigned long data)
@ -267,7 +290,7 @@ static int budget_start_feed(struct dvb_demux_feed *feed)
{ {
struct dvb_demux *demux = feed->demux; struct dvb_demux *demux = feed->demux;
struct budget *budget = (struct budget *) demux->priv; struct budget *budget = (struct budget *) demux->priv;
int status; int status = 0;
dprintk(2, "budget: %p\n", budget); dprintk(2, "budget: %p\n", budget);
@ -276,7 +299,8 @@ static int budget_start_feed(struct dvb_demux_feed *feed)
spin_lock(&budget->feedlock); spin_lock(&budget->feedlock);
feed->pusi_seen = 0; /* have a clean section start */ feed->pusi_seen = 0; /* have a clean section start */
status = start_ts_capture(budget); if (budget->feeding++ == 0)
status = start_ts_capture(budget);
spin_unlock(&budget->feedlock); spin_unlock(&budget->feedlock);
return status; return status;
} }
@ -285,12 +309,13 @@ static int budget_stop_feed(struct dvb_demux_feed *feed)
{ {
struct dvb_demux *demux = feed->demux; struct dvb_demux *demux = feed->demux;
struct budget *budget = (struct budget *) demux->priv; struct budget *budget = (struct budget *) demux->priv;
int status; int status = 0;
dprintk(2, "budget: %p\n", budget); dprintk(2, "budget: %p\n", budget);
spin_lock(&budget->feedlock); spin_lock(&budget->feedlock);
status = stop_ts_capture(budget); if (--budget->feeding == 0)
status = stop_ts_capture(budget);
spin_unlock(&budget->feedlock); spin_unlock(&budget->feedlock);
return status; return status;
} }
@ -470,6 +495,14 @@ err:
return ret; return ret;
} }
void ttpci_budget_init_hooks(struct budget *budget)
{
if (budget->dvb_frontend && !budget->read_fe_status) {
budget->read_fe_status = budget->dvb_frontend->ops.read_status;
budget->dvb_frontend->ops.read_status = budget_read_fe_status;
}
}
int ttpci_budget_deinit(struct budget *budget) int ttpci_budget_deinit(struct budget *budget)
{ {
struct saa7146_dev *dev = budget->dev; struct saa7146_dev *dev = budget->dev;
@ -508,11 +541,8 @@ void ttpci_budget_set_video_port(struct saa7146_dev *dev, int video_port)
spin_lock(&budget->feedlock); spin_lock(&budget->feedlock);
budget->video_port = video_port; budget->video_port = video_port;
if (budget->feeding) { if (budget->feeding) {
int oldfeeding = budget->feeding;
budget->feeding = 1;
stop_ts_capture(budget); stop_ts_capture(budget);
start_ts_capture(budget); start_ts_capture(budget);
budget->feeding = oldfeeding;
} }
spin_unlock(&budget->feedlock); spin_unlock(&budget->feedlock);
} }
@ -520,6 +550,7 @@ void ttpci_budget_set_video_port(struct saa7146_dev *dev, int video_port)
EXPORT_SYMBOL_GPL(ttpci_budget_debiread); EXPORT_SYMBOL_GPL(ttpci_budget_debiread);
EXPORT_SYMBOL_GPL(ttpci_budget_debiwrite); EXPORT_SYMBOL_GPL(ttpci_budget_debiwrite);
EXPORT_SYMBOL_GPL(ttpci_budget_init); EXPORT_SYMBOL_GPL(ttpci_budget_init);
EXPORT_SYMBOL_GPL(ttpci_budget_init_hooks);
EXPORT_SYMBOL_GPL(ttpci_budget_deinit); EXPORT_SYMBOL_GPL(ttpci_budget_deinit);
EXPORT_SYMBOL_GPL(ttpci_budget_irq10_handler); EXPORT_SYMBOL_GPL(ttpci_budget_irq10_handler);
EXPORT_SYMBOL_GPL(ttpci_budget_set_video_port); EXPORT_SYMBOL_GPL(ttpci_budget_set_video_port);

View File

@ -617,6 +617,8 @@ static int budget_patch_attach (struct saa7146_dev* dev, struct saa7146_pci_exte
budget->dvb_adapter.priv = budget; budget->dvb_adapter.priv = budget;
frontend_init(budget); frontend_init(budget);
ttpci_budget_init_hooks(budget);
return 0; return 0;
} }

View File

@ -375,9 +375,6 @@ static void frontend_init(struct budget *budget)
if (budget->dvb_frontend) { if (budget->dvb_frontend) {
budget->dvb_frontend->ops.tuner_ops.set_params = alps_bsru6_tuner_set_params; budget->dvb_frontend->ops.tuner_ops.set_params = alps_bsru6_tuner_set_params;
budget->dvb_frontend->tuner_priv = &budget->i2c_adap; budget->dvb_frontend->tuner_priv = &budget->i2c_adap;
budget->dvb_frontend->ops.diseqc_send_master_cmd = budget_diseqc_send_master_cmd;
budget->dvb_frontend->ops.diseqc_send_burst = budget_diseqc_send_burst;
budget->dvb_frontend->ops.set_tone = budget_set_tone;
break; break;
} }
break; break;
@ -474,6 +471,8 @@ static int budget_attach (struct saa7146_dev* dev, struct saa7146_pci_extension_
budget->dvb_adapter.priv = budget; budget->dvb_adapter.priv = budget;
frontend_init(budget); frontend_init(budget);
ttpci_budget_init_hooks(budget);
return 0; return 0;
} }

View File

@ -52,9 +52,6 @@ struct budget {
struct dmx_frontend hw_frontend; struct dmx_frontend hw_frontend;
struct dmx_frontend mem_frontend; struct dmx_frontend mem_frontend;
int fe_synced;
struct mutex pid_mutex;
int ci_present; int ci_present;
int video_port; int video_port;
@ -74,6 +71,9 @@ struct budget {
struct dvb_adapter dvb_adapter; struct dvb_adapter dvb_adapter;
struct dvb_frontend *dvb_frontend; struct dvb_frontend *dvb_frontend;
int (*read_fe_status)(struct dvb_frontend *fe, fe_status_t *status);
int fe_synced;
void *priv; void *priv;
}; };
@ -106,6 +106,7 @@ static struct saa7146_pci_extension_data x_var = { \
extern int ttpci_budget_init(struct budget *budget, struct saa7146_dev *dev, extern int ttpci_budget_init(struct budget *budget, struct saa7146_dev *dev,
struct saa7146_pci_extension_data *info, struct saa7146_pci_extension_data *info,
struct module *owner); struct module *owner);
extern void ttpci_budget_init_hooks(struct budget *budget);
extern int ttpci_budget_deinit(struct budget *budget); extern int ttpci_budget_deinit(struct budget *budget);
extern void ttpci_budget_irq10_handler(struct saa7146_dev *dev, u32 * isr); extern void ttpci_budget_irq10_handler(struct saa7146_dev *dev, u32 * isr);
extern void ttpci_budget_set_video_port(struct saa7146_dev *dev, int video_port); extern void ttpci_budget_set_video_port(struct saa7146_dev *dev, int video_port);

View File

@ -145,7 +145,7 @@ config VIDEO_SAA5246A
config VIDEO_SAA5249 config VIDEO_SAA5249
tristate "SAA5249 Teletext processor" tristate "SAA5249 Teletext processor"
depends on VIDEO_DEV && I2C depends on VIDEO_DEV && I2C && VIDEO_V4L1
help help
Support for I2C bus based teletext using the SAA5249 chip. At the Support for I2C bus based teletext using the SAA5249 chip. At the
moment this is only useful on some European WinTV cards. moment this is only useful on some European WinTV cards.
@ -155,7 +155,7 @@ config VIDEO_SAA5249
config TUNER_3036 config TUNER_3036
tristate "SAB3036 tuner" tristate "SAB3036 tuner"
depends on VIDEO_DEV && I2C depends on VIDEO_DEV && I2C && VIDEO_V4L1
help help
Say Y here to include support for Philips SAB3036 compatible tuners. Say Y here to include support for Philips SAB3036 compatible tuners.
If in doubt, say N. If in doubt, say N.

View File

@ -1,6 +1,6 @@
config VIDEO_BT848 config VIDEO_BT848
tristate "BT848 Video For Linux" tristate "BT848 Video For Linux"
depends on VIDEO_DEV && PCI && I2C && VIDEO_V4L2 depends on VIDEO_DEV && PCI && I2C && VIDEO_V4L1
select I2C_ALGOBIT select I2C_ALGOBIT
select FW_LOADER select FW_LOADER
select VIDEO_BTCX select VIDEO_BTCX

View File

@ -3923,7 +3923,12 @@ static int __devinit bttv_register_video(struct bttv *btv)
goto err; goto err;
printk(KERN_INFO "bttv%d: registered device video%d\n", printk(KERN_INFO "bttv%d: registered device video%d\n",
btv->c.nr,btv->video_dev->minor & 0x1f); btv->c.nr,btv->video_dev->minor & 0x1f);
video_device_create_file(btv->video_dev, &class_device_attr_card); if (class_device_create_file(&btv->video_dev->class_dev,
&class_device_attr_card)<0) {
printk(KERN_ERR "bttv%d: class_device_create_file 'card' "
"failed\n", btv->c.nr);
goto err;
}
/* vbi */ /* vbi */
btv->vbi_dev = vdev_init(btv, &bttv_vbi_template, "vbi"); btv->vbi_dev = vdev_init(btv, &bttv_vbi_template, "vbi");
@ -4287,6 +4292,8 @@ static struct pci_driver bttv_pci_driver = {
static int bttv_init_module(void) static int bttv_init_module(void)
{ {
int ret;
bttv_num = 0; bttv_num = 0;
printk(KERN_INFO "bttv: driver version %d.%d.%d loaded\n", printk(KERN_INFO "bttv: driver version %d.%d.%d loaded\n",
@ -4308,7 +4315,11 @@ static int bttv_init_module(void)
bttv_check_chipset(); bttv_check_chipset();
bus_register(&bttv_sub_bus_type); ret = bus_register(&bttv_sub_bus_type);
if (ret < 0) {
printk(KERN_WARNING "bttv: bus_register error: %d\n", ret);
return ret;
}
return pci_register_driver(&bttv_pci_driver); return pci_register_driver(&bttv_pci_driver);
} }

View File

@ -31,11 +31,16 @@
#include <asm/io.h> #include <asm/io.h>
#include "bttvp.h" #include "bttvp.h"
/* Offset from line sync pulse leading edge (0H) in 1 / sampling_rate: /* Offset from line sync pulse leading edge (0H) to start of VBI capture,
bt8x8 /HRESET pulse starts at 0H and has length 64 / fCLKx1 (E|O_VTC in fCLKx2 pixels. According to the datasheet, VBI capture starts
HSFMT = 0). VBI_HDELAY (always 0) is an offset from the trailing edge VBI_HDELAY fCLKx1 pixels from the tailing edgeof /HRESET, and /HRESET
of /HRESET in 1 / fCLKx1, and the sampling_rate tvnorm->Fsc is fCLKx2. */ is 64 fCLKx1 pixels wide. VBI_HDELAY is set to 0, so this should be
#define VBI_OFFSET ((64 + 0) * 2) (64 + 0) * 2 = 128 fCLKx2 pixels. But it's not! The datasheet is
Just Plain Wrong. The real value appears to be different for
different revisions of the bt8x8 chips, and to be affected by the
horizontal scaling factor. Experimentally, the value is measured
to be about 244. */
#define VBI_OFFSET 244
#define VBI_DEFLINES 16 #define VBI_DEFLINES 16
#define VBI_MAXLINES 32 #define VBI_MAXLINES 32

View File

@ -490,6 +490,23 @@ static inline int put_v4l2_input(struct v4l2_input *kp, struct v4l2_input __user
return 0; return 0;
} }
struct video_code32
{
char loadwhat[16]; /* name or tag of file being passed */
compat_int_t datasize;
unsigned char *data;
};
static inline int microcode32(struct video_code *kp, struct video_code32 __user *up)
{
if(!access_ok(VERIFY_READ, up, sizeof(struct video_code32)) ||
copy_from_user(kp->loadwhat, up->loadwhat, sizeof (up->loadwhat)) ||
get_user(kp->datasize, &up->datasize) ||
copy_from_user(kp->data, up->data, up->datasize))
return -EFAULT;
return 0;
}
#define VIDIOCGTUNER32 _IOWR('v',4, struct video_tuner32) #define VIDIOCGTUNER32 _IOWR('v',4, struct video_tuner32)
#define VIDIOCSTUNER32 _IOW('v',5, struct video_tuner32) #define VIDIOCSTUNER32 _IOW('v',5, struct video_tuner32)
#define VIDIOCGWIN32 _IOR('v',9, struct video_window32) #define VIDIOCGWIN32 _IOR('v',9, struct video_window32)
@ -498,6 +515,7 @@ static inline int put_v4l2_input(struct v4l2_input *kp, struct v4l2_input __user
#define VIDIOCSFBUF32 _IOW('v',12, struct video_buffer32) #define VIDIOCSFBUF32 _IOW('v',12, struct video_buffer32)
#define VIDIOCGFREQ32 _IOR('v',14, u32) #define VIDIOCGFREQ32 _IOR('v',14, u32)
#define VIDIOCSFREQ32 _IOW('v',15, u32) #define VIDIOCSFREQ32 _IOW('v',15, u32)
#define VIDIOCSMICROCODE32 _IOW('v',27, struct video_code32)
/* VIDIOC_ENUMINPUT32 is VIDIOC_ENUMINPUT minus 4 bytes of padding alignement */ /* VIDIOC_ENUMINPUT32 is VIDIOC_ENUMINPUT minus 4 bytes of padding alignement */
#define VIDIOC_ENUMINPUT32 VIDIOC_ENUMINPUT - _IOC(0, 0, 0, 4) #define VIDIOC_ENUMINPUT32 VIDIOC_ENUMINPUT - _IOC(0, 0, 0, 4)
@ -590,6 +608,7 @@ static int do_video_ioctl(struct file *file, unsigned int cmd, unsigned long arg
struct video_tuner vt; struct video_tuner vt;
struct video_buffer vb; struct video_buffer vb;
struct video_window vw; struct video_window vw;
struct video_code vc;
struct v4l2_format v2f; struct v4l2_format v2f;
struct v4l2_buffer v2b; struct v4l2_buffer v2b;
struct v4l2_framebuffer v2fb; struct v4l2_framebuffer v2fb;
@ -628,6 +647,7 @@ static int do_video_ioctl(struct file *file, unsigned int cmd, unsigned long arg
case VIDIOC_G_INPUT32: cmd = VIDIOC_G_INPUT; break; case VIDIOC_G_INPUT32: cmd = VIDIOC_G_INPUT; break;
case VIDIOC_S_INPUT32: cmd = VIDIOC_S_INPUT; break; case VIDIOC_S_INPUT32: cmd = VIDIOC_S_INPUT; break;
case VIDIOC_TRY_FMT32: cmd = VIDIOC_TRY_FMT; break; case VIDIOC_TRY_FMT32: cmd = VIDIOC_TRY_FMT; break;
case VIDIOCSMICROCODE32: cmd = VIDIOCSMICROCODE; break;
}; };
switch(cmd) { switch(cmd) {
@ -703,6 +723,10 @@ static int do_video_ioctl(struct file *file, unsigned int cmd, unsigned long arg
case VIDIOC_G_FBUF: case VIDIOC_G_FBUF:
case VIDIOC_G_INPUT: case VIDIOC_G_INPUT:
compatible_arg = 0; compatible_arg = 0;
case VIDIOCSMICROCODE:
err = microcode32(&karg.vc, up);
compatible_arg = 0;
break;
}; };
if(err) if(err)

View File

@ -1,6 +1,6 @@
config VIDEO_CPIA2 config VIDEO_CPIA2
tristate "CPiA2 Video For Linux" tristate "CPiA2 Video For Linux"
depends on VIDEO_DEV && USB depends on VIDEO_DEV && USB && VIDEO_V4L1
---help--- ---help---
This is the video4linux driver for cameras based on Vision's CPiA2 This is the video4linux driver for cameras based on Vision's CPiA2
(Colour Processor Interface ASIC), such as the Digital Blue QX5 (Colour Processor Interface ASIC), such as the Digital Blue QX5

View File

@ -89,7 +89,7 @@ static void cx88_ir_handle_key(struct cx88_IR *ir)
auxgpio = cx_read(MO_GP1_IO); auxgpio = cx_read(MO_GP1_IO);
/* Take out the parity part */ /* Take out the parity part */
gpio+=(gpio & 0x7fd) + (auxgpio & 0xef); gpio=(gpio & 0x7fd) + (auxgpio & 0xef);
} else } else
auxgpio = gpio; auxgpio = gpio;

View File

@ -1180,7 +1180,6 @@ static int video_do_ioctl(struct inode *inode, struct file *file,
V4L2_CAP_READWRITE | V4L2_CAP_READWRITE |
V4L2_CAP_STREAMING | V4L2_CAP_STREAMING |
V4L2_CAP_VBI_CAPTURE | V4L2_CAP_VBI_CAPTURE |
V4L2_CAP_VIDEO_OVERLAY |
0; 0;
if (UNSET != core->tuner_type) if (UNSET != core->tuner_type)
cap->capabilities |= V4L2_CAP_TUNER; cap->capabilities |= V4L2_CAP_TUNER;
@ -1226,7 +1225,7 @@ static int video_do_ioctl(struct inode *inode, struct file *file,
struct v4l2_format *f = arg; struct v4l2_format *f = arg;
return cx8800_try_fmt(dev,fh,f); return cx8800_try_fmt(dev,fh,f);
} }
#ifdef HAVE_V4L1 #ifdef CONFIG_V4L1_COMPAT
/* --- streaming capture ------------------------------------- */ /* --- streaming capture ------------------------------------- */
case VIDIOCGMBUF: case VIDIOCGMBUF:
{ {
@ -1585,7 +1584,7 @@ static int radio_do_ioctl(struct inode *inode, struct file *file,
*id = 0; *id = 0;
return 0; return 0;
} }
#ifdef HAVE_V4L1 #ifdef CONFIG_V4L1_COMPAT
case VIDIOCSTUNER: case VIDIOCSTUNER:
{ {
struct video_tuner *v = arg; struct video_tuner *v = arg;

View File

@ -362,7 +362,7 @@ int msp_sleep(struct msp_state *state, int timeout)
} }
/* ------------------------------------------------------------------------ */ /* ------------------------------------------------------------------------ */
#ifdef CONFIG_VIDEO_V4L1
static int msp_mode_v4l2_to_v4l1(int rxsubchans, int audmode) static int msp_mode_v4l2_to_v4l1(int rxsubchans, int audmode)
{ {
if (rxsubchans == V4L2_TUNER_SUB_MONO) if (rxsubchans == V4L2_TUNER_SUB_MONO)
@ -384,6 +384,7 @@ static int msp_mode_v4l1_to_v4l2(int mode)
return V4L2_TUNER_MODE_LANG1; return V4L2_TUNER_MODE_LANG1;
return V4L2_TUNER_MODE_MONO; return V4L2_TUNER_MODE_MONO;
} }
#endif
static int msp_get_ctrl(struct i2c_client *client, struct v4l2_control *ctrl) static int msp_get_ctrl(struct i2c_client *client, struct v4l2_control *ctrl)
{ {
@ -509,6 +510,7 @@ static int msp_command(struct i2c_client *client, unsigned int cmd, void *arg)
/* --- v4l ioctls --- */ /* --- v4l ioctls --- */
/* take care: bttv does userspace copying, we'll get a /* take care: bttv does userspace copying, we'll get a
kernel pointer here... */ kernel pointer here... */
#ifdef CONFIG_VIDEO_V4L1
case VIDIOCGAUDIO: case VIDIOCGAUDIO:
{ {
struct video_audio *va = arg; struct video_audio *va = arg;
@ -577,6 +579,12 @@ static int msp_command(struct i2c_client *client, unsigned int cmd, void *arg)
} }
case VIDIOCSFREQ: case VIDIOCSFREQ:
{
/* new channel -- kick audio carrier scan */
msp_wake_thread(client);
break;
}
#endif
case VIDIOC_S_FREQUENCY: case VIDIOC_S_FREQUENCY:
{ {
/* new channel -- kick audio carrier scan */ /* new channel -- kick audio carrier scan */

View File

@ -852,7 +852,6 @@ unsigned long pvr2_hdw_get_sn(struct pvr2_hdw *hdw)
return hdw->serial_number; return hdw->serial_number;
} }
int pvr2_hdw_get_unit_number(struct pvr2_hdw *hdw) int pvr2_hdw_get_unit_number(struct pvr2_hdw *hdw)
{ {
return hdw->unit_number; return hdw->unit_number;
@ -2318,7 +2317,6 @@ void pvr2_hdw_poll_trigger_unlocked(struct pvr2_hdw *hdw)
} }
} }
/* Return name for this driver instance */ /* Return name for this driver instance */
const char *pvr2_hdw_get_driver_name(struct pvr2_hdw *hdw) const char *pvr2_hdw_get_driver_name(struct pvr2_hdw *hdw)
{ {
@ -2542,6 +2540,10 @@ static void pvr2_ctl_timeout(unsigned long data)
} }
/* Issue a command and get a response from the device. This extended
version includes a probe flag (which if set means that device errors
should not be logged or treated as fatal) and a timeout in jiffies.
This can be used to non-lethally probe the health of endpoint 1. */
static int pvr2_send_request_ex(struct pvr2_hdw *hdw, static int pvr2_send_request_ex(struct pvr2_hdw *hdw,
unsigned int timeout,int probe_fl, unsigned int timeout,int probe_fl,
void *write_data,unsigned int write_len, void *write_data,unsigned int write_len,
@ -2970,6 +2972,7 @@ int pvr2_hdw_cmd_decoder_reset(struct pvr2_hdw *hdw)
} }
/* Stop / start video stream transport */
static int pvr2_hdw_cmd_usbstream(struct pvr2_hdw *hdw,int runFl) static int pvr2_hdw_cmd_usbstream(struct pvr2_hdw *hdw,int runFl)
{ {
int status; int status;
@ -3068,6 +3071,7 @@ int pvr2_hdw_gpio_chg_out(struct pvr2_hdw *hdw,u32 msk,u32 val)
} }
/* Find I2C address of eeprom */
static int pvr2_hdw_get_eeprom_addr(struct pvr2_hdw *hdw) static int pvr2_hdw_get_eeprom_addr(struct pvr2_hdw *hdw)
{ {
int result; int result;

View File

@ -26,6 +26,8 @@
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/mutex.h> #include <linux/mutex.h>
static const char *pvr2_buffer_state_decode(enum pvr2_buffer_state);
#define BUFFER_SIG 0x47653271 #define BUFFER_SIG 0x47653271
// #define SANITY_CHECK_BUFFERS // #define SANITY_CHECK_BUFFERS
@ -515,6 +517,10 @@ void pvr2_stream_set_callback(struct pvr2_stream *sp,
} }
/* Query / set the nominal buffer count */ /* Query / set the nominal buffer count */
int pvr2_stream_get_buffer_count(struct pvr2_stream *sp)
{
return sp->buffer_target_count;
}
int pvr2_stream_set_buffer_count(struct pvr2_stream *sp,unsigned int cnt) int pvr2_stream_set_buffer_count(struct pvr2_stream *sp,unsigned int cnt)
{ {
@ -553,7 +559,6 @@ int pvr2_stream_get_ready_count(struct pvr2_stream *sp)
return sp->r_count; return sp->r_count;
} }
void pvr2_stream_kill(struct pvr2_stream *sp) void pvr2_stream_kill(struct pvr2_stream *sp)
{ {
struct pvr2_buffer *bp; struct pvr2_buffer *bp;
@ -607,7 +612,6 @@ int pvr2_buffer_queue(struct pvr2_buffer *bp)
return ret; return ret;
} }
int pvr2_buffer_set_buffer(struct pvr2_buffer *bp,void *ptr,unsigned int cnt) int pvr2_buffer_set_buffer(struct pvr2_buffer *bp,void *ptr,unsigned int cnt)
{ {
int ret = 0; int ret = 0;
@ -646,7 +650,6 @@ int pvr2_buffer_get_status(struct pvr2_buffer *bp)
return bp->status; return bp->status;
} }
int pvr2_buffer_get_id(struct pvr2_buffer *bp) int pvr2_buffer_get_id(struct pvr2_buffer *bp)
{ {
return bp->id; return bp->id;

View File

@ -47,6 +47,7 @@ void pvr2_stream_set_callback(struct pvr2_stream *,
void *data); void *data);
/* Query / set the nominal buffer count */ /* Query / set the nominal buffer count */
int pvr2_stream_get_buffer_count(struct pvr2_stream *);
int pvr2_stream_set_buffer_count(struct pvr2_stream *,unsigned int); int pvr2_stream_set_buffer_count(struct pvr2_stream *,unsigned int);
/* Get a pointer to a buffer that is either idle, ready, or is specified /* Get a pointer to a buffer that is either idle, ready, or is specified
@ -58,6 +59,7 @@ struct pvr2_buffer *pvr2_stream_get_buffer(struct pvr2_stream *sp,int id);
/* Find out how many buffers are idle or ready */ /* Find out how many buffers are idle or ready */
int pvr2_stream_get_ready_count(struct pvr2_stream *); int pvr2_stream_get_ready_count(struct pvr2_stream *);
/* Kill all pending buffers and throw away any ready buffers as well */ /* Kill all pending buffers and throw away any ready buffers as well */
void pvr2_stream_kill(struct pvr2_stream *); void pvr2_stream_kill(struct pvr2_stream *);

View File

@ -213,7 +213,9 @@ int pvr2_ioread_setup(struct pvr2_ioread *cp,struct pvr2_stream *sp)
" pvr2_ioread_setup (tear-down) id=%p",cp); " pvr2_ioread_setup (tear-down) id=%p",cp);
pvr2_ioread_stop(cp); pvr2_ioread_stop(cp);
pvr2_stream_kill(cp->stream); pvr2_stream_kill(cp->stream);
pvr2_stream_set_buffer_count(cp->stream,0); if (pvr2_stream_get_buffer_count(cp->stream)) {
pvr2_stream_set_buffer_count(cp->stream,0);
}
cp->stream = NULL; cp->stream = NULL;
} }
if (sp) { if (sp) {
@ -251,7 +253,6 @@ int pvr2_ioread_set_enabled(struct pvr2_ioread *cp,int fl)
return ret; return ret;
} }
static int pvr2_ioread_get_buffer(struct pvr2_ioread *cp) static int pvr2_ioread_get_buffer(struct pvr2_ioread *cp)
{ {
int stat; int stat;

View File

@ -44,12 +44,16 @@ struct pvr2_sysfs {
struct kobj_type ktype; struct kobj_type ktype;
struct class_device_attribute attr_v4l_minor_number; struct class_device_attribute attr_v4l_minor_number;
struct class_device_attribute attr_unit_number; struct class_device_attribute attr_unit_number;
int v4l_minor_number_created_ok;
int unit_number_created_ok;
}; };
#ifdef CONFIG_VIDEO_PVRUSB2_DEBUGIFC #ifdef CONFIG_VIDEO_PVRUSB2_DEBUGIFC
struct pvr2_sysfs_debugifc { struct pvr2_sysfs_debugifc {
struct class_device_attribute attr_debugcmd; struct class_device_attribute attr_debugcmd;
struct class_device_attribute attr_debuginfo; struct class_device_attribute attr_debuginfo;
int debugcmd_created_ok;
int debuginfo_created_ok;
}; };
#endif /* CONFIG_VIDEO_PVRUSB2_DEBUGIFC */ #endif /* CONFIG_VIDEO_PVRUSB2_DEBUGIFC */
@ -67,6 +71,7 @@ struct pvr2_sysfs_ctl_item {
struct pvr2_sysfs_ctl_item *item_next; struct pvr2_sysfs_ctl_item *item_next;
struct attribute *attr_gen[7]; struct attribute *attr_gen[7];
struct attribute_group grp; struct attribute_group grp;
int created_ok;
char name[80]; char name[80];
}; };
@ -487,6 +492,7 @@ static void pvr2_sysfs_add_control(struct pvr2_sysfs *sfp,int ctl_id)
struct pvr2_sysfs_func_set *fp; struct pvr2_sysfs_func_set *fp;
struct pvr2_ctrl *cptr; struct pvr2_ctrl *cptr;
unsigned int cnt,acnt; unsigned int cnt,acnt;
int ret;
if ((ctl_id < 0) || (ctl_id >= (sizeof(funcs)/sizeof(funcs[0])))) { if ((ctl_id < 0) || (ctl_id >= (sizeof(funcs)/sizeof(funcs[0])))) {
return; return;
@ -589,7 +595,13 @@ static void pvr2_sysfs_add_control(struct pvr2_sysfs *sfp,int ctl_id)
cip->grp.name = cip->name; cip->grp.name = cip->name;
cip->grp.attrs = cip->attr_gen; cip->grp.attrs = cip->attr_gen;
sysfs_create_group(&sfp->class_dev->kobj,&cip->grp); ret = sysfs_create_group(&sfp->class_dev->kobj,&cip->grp);
if (ret) {
printk(KERN_WARNING "%s: sysfs_create_group error: %d\n",
__FUNCTION__, ret);
return;
}
cip->created_ok = !0;
} }
#ifdef CONFIG_VIDEO_PVRUSB2_DEBUGIFC #ifdef CONFIG_VIDEO_PVRUSB2_DEBUGIFC
@ -600,6 +612,8 @@ static ssize_t debugcmd_store(struct class_device *,const char *,size_t count);
static void pvr2_sysfs_add_debugifc(struct pvr2_sysfs *sfp) static void pvr2_sysfs_add_debugifc(struct pvr2_sysfs *sfp)
{ {
struct pvr2_sysfs_debugifc *dip; struct pvr2_sysfs_debugifc *dip;
int ret;
dip = kmalloc(sizeof(*dip),GFP_KERNEL); dip = kmalloc(sizeof(*dip),GFP_KERNEL);
if (!dip) return; if (!dip) return;
memset(dip,0,sizeof(*dip)); memset(dip,0,sizeof(*dip));
@ -613,17 +627,34 @@ static void pvr2_sysfs_add_debugifc(struct pvr2_sysfs *sfp)
dip->attr_debuginfo.attr.mode = S_IRUGO; dip->attr_debuginfo.attr.mode = S_IRUGO;
dip->attr_debuginfo.show = debuginfo_show; dip->attr_debuginfo.show = debuginfo_show;
sfp->debugifc = dip; sfp->debugifc = dip;
class_device_create_file(sfp->class_dev,&dip->attr_debugcmd); ret = class_device_create_file(sfp->class_dev,&dip->attr_debugcmd);
class_device_create_file(sfp->class_dev,&dip->attr_debuginfo); if (ret < 0) {
printk(KERN_WARNING "%s: class_device_create_file error: %d\n",
__FUNCTION__, ret);
} else {
dip->debugcmd_created_ok = !0;
}
ret = class_device_create_file(sfp->class_dev,&dip->attr_debuginfo);
if (ret < 0) {
printk(KERN_WARNING "%s: class_device_create_file error: %d\n",
__FUNCTION__, ret);
} else {
dip->debuginfo_created_ok = !0;
}
} }
static void pvr2_sysfs_tear_down_debugifc(struct pvr2_sysfs *sfp) static void pvr2_sysfs_tear_down_debugifc(struct pvr2_sysfs *sfp)
{ {
if (!sfp->debugifc) return; if (!sfp->debugifc) return;
class_device_remove_file(sfp->class_dev, if (sfp->debugifc->debuginfo_created_ok) {
&sfp->debugifc->attr_debuginfo); class_device_remove_file(sfp->class_dev,
class_device_remove_file(sfp->class_dev,&sfp->debugifc->attr_debugcmd); &sfp->debugifc->attr_debuginfo);
}
if (sfp->debugifc->debugcmd_created_ok) {
class_device_remove_file(sfp->class_dev,
&sfp->debugifc->attr_debugcmd);
}
kfree(sfp->debugifc); kfree(sfp->debugifc);
sfp->debugifc = NULL; sfp->debugifc = NULL;
} }
@ -645,7 +676,9 @@ static void pvr2_sysfs_tear_down_controls(struct pvr2_sysfs *sfp)
struct pvr2_sysfs_ctl_item *cip1,*cip2; struct pvr2_sysfs_ctl_item *cip1,*cip2;
for (cip1 = sfp->item_first; cip1; cip1 = cip2) { for (cip1 = sfp->item_first; cip1; cip1 = cip2) {
cip2 = cip1->item_next; cip2 = cip1->item_next;
sysfs_remove_group(&sfp->class_dev->kobj,&cip1->grp); if (cip1->created_ok) {
sysfs_remove_group(&sfp->class_dev->kobj,&cip1->grp);
}
pvr2_sysfs_trace("Destroying pvr2_sysfs_ctl_item id=%p",cip1); pvr2_sysfs_trace("Destroying pvr2_sysfs_ctl_item id=%p",cip1);
kfree(cip1); kfree(cip1);
} }
@ -675,8 +708,14 @@ static void class_dev_destroy(struct pvr2_sysfs *sfp)
pvr2_sysfs_tear_down_debugifc(sfp); pvr2_sysfs_tear_down_debugifc(sfp);
#endif /* CONFIG_VIDEO_PVRUSB2_DEBUGIFC */ #endif /* CONFIG_VIDEO_PVRUSB2_DEBUGIFC */
pvr2_sysfs_tear_down_controls(sfp); pvr2_sysfs_tear_down_controls(sfp);
class_device_remove_file(sfp->class_dev,&sfp->attr_v4l_minor_number); if (sfp->v4l_minor_number_created_ok) {
class_device_remove_file(sfp->class_dev,&sfp->attr_unit_number); class_device_remove_file(sfp->class_dev,
&sfp->attr_v4l_minor_number);
}
if (sfp->unit_number_created_ok) {
class_device_remove_file(sfp->class_dev,
&sfp->attr_unit_number);
}
pvr2_sysfs_trace("Destroying class_dev id=%p",sfp->class_dev); pvr2_sysfs_trace("Destroying class_dev id=%p",sfp->class_dev);
sfp->class_dev->class_data = NULL; sfp->class_dev->class_data = NULL;
class_device_unregister(sfp->class_dev); class_device_unregister(sfp->class_dev);
@ -709,6 +748,8 @@ static void class_dev_create(struct pvr2_sysfs *sfp,
{ {
struct usb_device *usb_dev; struct usb_device *usb_dev;
struct class_device *class_dev; struct class_device *class_dev;
int ret;
usb_dev = pvr2_hdw_get_dev(sfp->channel.hdw); usb_dev = pvr2_hdw_get_dev(sfp->channel.hdw);
if (!usb_dev) return; if (!usb_dev) return;
class_dev = kmalloc(sizeof(*class_dev),GFP_KERNEL); class_dev = kmalloc(sizeof(*class_dev),GFP_KERNEL);
@ -733,20 +774,40 @@ static void class_dev_create(struct pvr2_sysfs *sfp,
sfp->class_dev = class_dev; sfp->class_dev = class_dev;
class_dev->class_data = sfp; class_dev->class_data = sfp;
class_device_register(class_dev); ret = class_device_register(class_dev);
if (ret) {
printk(KERN_ERR "%s: class_device_register failed\n",
__FUNCTION__);
kfree(class_dev);
return;
}
sfp->attr_v4l_minor_number.attr.owner = THIS_MODULE; sfp->attr_v4l_minor_number.attr.owner = THIS_MODULE;
sfp->attr_v4l_minor_number.attr.name = "v4l_minor_number"; sfp->attr_v4l_minor_number.attr.name = "v4l_minor_number";
sfp->attr_v4l_minor_number.attr.mode = S_IRUGO; sfp->attr_v4l_minor_number.attr.mode = S_IRUGO;
sfp->attr_v4l_minor_number.show = v4l_minor_number_show; sfp->attr_v4l_minor_number.show = v4l_minor_number_show;
sfp->attr_v4l_minor_number.store = NULL; sfp->attr_v4l_minor_number.store = NULL;
class_device_create_file(sfp->class_dev,&sfp->attr_v4l_minor_number); ret = class_device_create_file(sfp->class_dev,
&sfp->attr_v4l_minor_number);
if (ret < 0) {
printk(KERN_WARNING "%s: class_device_create_file error: %d\n",
__FUNCTION__, ret);
} else {
sfp->v4l_minor_number_created_ok = !0;
}
sfp->attr_unit_number.attr.owner = THIS_MODULE; sfp->attr_unit_number.attr.owner = THIS_MODULE;
sfp->attr_unit_number.attr.name = "unit_number"; sfp->attr_unit_number.attr.name = "unit_number";
sfp->attr_unit_number.attr.mode = S_IRUGO; sfp->attr_unit_number.attr.mode = S_IRUGO;
sfp->attr_unit_number.show = unit_number_show; sfp->attr_unit_number.show = unit_number_show;
sfp->attr_unit_number.store = NULL; sfp->attr_unit_number.store = NULL;
class_device_create_file(sfp->class_dev,&sfp->attr_unit_number); ret = class_device_create_file(sfp->class_dev,&sfp->attr_unit_number);
if (ret < 0) {
printk(KERN_WARNING "%s: class_device_create_file error: %d\n",
__FUNCTION__, ret);
} else {
sfp->unit_number_created_ok = !0;
}
pvr2_sysfs_add_controls(sfp); pvr2_sysfs_add_controls(sfp);
#ifdef CONFIG_VIDEO_PVRUSB2_DEBUGIFC #ifdef CONFIG_VIDEO_PVRUSB2_DEBUGIFC

View File

@ -997,9 +997,9 @@ static int saa7134_alsa_init(void)
struct saa7134_dev *dev = NULL; struct saa7134_dev *dev = NULL;
struct list_head *list; struct list_head *list;
if (!dmasound_init && !dmasound_exit) { if (!saa7134_dmasound_init && !saa7134_dmasound_exit) {
dmasound_init = alsa_device_init; saa7134_dmasound_init = alsa_device_init;
dmasound_exit = alsa_device_exit; saa7134_dmasound_exit = alsa_device_exit;
} else { } else {
printk(KERN_WARNING "saa7134 ALSA: can't load, DMA sound handler already assigned (probably to OSS)\n"); printk(KERN_WARNING "saa7134 ALSA: can't load, DMA sound handler already assigned (probably to OSS)\n");
return -EBUSY; return -EBUSY;
@ -1036,8 +1036,8 @@ static void saa7134_alsa_exit(void)
snd_card_free(snd_saa7134_cards[idx]); snd_card_free(snd_saa7134_cards[idx]);
} }
dmasound_init = NULL; saa7134_dmasound_init = NULL;
dmasound_exit = NULL; saa7134_dmasound_exit = NULL;
printk(KERN_INFO "saa7134 ALSA driver for DMA sound unloaded\n"); printk(KERN_INFO "saa7134 ALSA driver for DMA sound unloaded\n");
return; return;

View File

@ -95,8 +95,8 @@ LIST_HEAD(saa7134_devlist);
static LIST_HEAD(mops_list); static LIST_HEAD(mops_list);
static unsigned int saa7134_devcount; static unsigned int saa7134_devcount;
int (*dmasound_init)(struct saa7134_dev *dev); int (*saa7134_dmasound_init)(struct saa7134_dev *dev);
int (*dmasound_exit)(struct saa7134_dev *dev); int (*saa7134_dmasound_exit)(struct saa7134_dev *dev);
#define dprintk(fmt, arg...) if (core_debug) \ #define dprintk(fmt, arg...) if (core_debug) \
printk(KERN_DEBUG "%s/core: " fmt, dev->name , ## arg) printk(KERN_DEBUG "%s/core: " fmt, dev->name , ## arg)
@ -1008,8 +1008,8 @@ static int __devinit saa7134_initdev(struct pci_dev *pci_dev,
/* check for signal */ /* check for signal */
saa7134_irq_video_intl(dev); saa7134_irq_video_intl(dev);
if (dmasound_init && !dev->dmasound.priv_data) { if (saa7134_dmasound_init && !dev->dmasound.priv_data) {
dmasound_init(dev); saa7134_dmasound_init(dev);
} }
return 0; return 0;
@ -1036,8 +1036,8 @@ static void __devexit saa7134_finidev(struct pci_dev *pci_dev)
struct saa7134_mpeg_ops *mops; struct saa7134_mpeg_ops *mops;
/* Release DMA sound modules if present */ /* Release DMA sound modules if present */
if (dmasound_exit && dev->dmasound.priv_data) { if (saa7134_dmasound_exit && dev->dmasound.priv_data) {
dmasound_exit(dev); saa7134_dmasound_exit(dev);
} }
/* debugging ... */ /* debugging ... */
@ -1169,8 +1169,8 @@ EXPORT_SYMBOL(saa7134_boards);
/* ----------------- for the DMA sound modules --------------- */ /* ----------------- for the DMA sound modules --------------- */
EXPORT_SYMBOL(dmasound_init); EXPORT_SYMBOL(saa7134_dmasound_init);
EXPORT_SYMBOL(dmasound_exit); EXPORT_SYMBOL(saa7134_dmasound_exit);
EXPORT_SYMBOL(saa7134_pgtable_free); EXPORT_SYMBOL(saa7134_pgtable_free);
EXPORT_SYMBOL(saa7134_pgtable_build); EXPORT_SYMBOL(saa7134_pgtable_build);
EXPORT_SYMBOL(saa7134_pgtable_alloc); EXPORT_SYMBOL(saa7134_pgtable_alloc);

View File

@ -993,9 +993,9 @@ static int saa7134_oss_init(void)
struct saa7134_dev *dev = NULL; struct saa7134_dev *dev = NULL;
struct list_head *list; struct list_head *list;
if (!dmasound_init && !dmasound_exit) { if (!saa7134_dmasound_init && !saa7134_dmasound_exit) {
dmasound_init = oss_device_init; saa7134_dmasound_init = oss_device_init;
dmasound_exit = oss_device_exit; saa7134_dmasound_exit = oss_device_exit;
} else { } else {
printk(KERN_WARNING "saa7134 OSS: can't load, DMA sound handler already assigned (probably to ALSA)\n"); printk(KERN_WARNING "saa7134 OSS: can't load, DMA sound handler already assigned (probably to ALSA)\n");
return -EBUSY; return -EBUSY;
@ -1037,8 +1037,8 @@ static void saa7134_oss_exit(void)
} }
dmasound_init = NULL; saa7134_dmasound_init = NULL;
dmasound_exit = NULL; saa7134_dmasound_exit = NULL;
printk(KERN_INFO "saa7134 OSS driver for DMA sound unloaded\n"); printk(KERN_INFO "saa7134 OSS driver for DMA sound unloaded\n");

View File

@ -40,7 +40,7 @@
static unsigned int video_debug = 0; static unsigned int video_debug = 0;
static unsigned int gbuffers = 8; static unsigned int gbuffers = 8;
static unsigned int noninterlaced = 0; static unsigned int noninterlaced = 1;
static unsigned int gbufsize = 720*576*4; static unsigned int gbufsize = 720*576*4;
static unsigned int gbufsize_max = 720*576*4; static unsigned int gbufsize_max = 720*576*4;
module_param(video_debug, int, 0644); module_param(video_debug, int, 0644);
@ -48,7 +48,7 @@ MODULE_PARM_DESC(video_debug,"enable debug messages [video]");
module_param(gbuffers, int, 0444); module_param(gbuffers, int, 0444);
MODULE_PARM_DESC(gbuffers,"number of capture buffers, range 2-32"); MODULE_PARM_DESC(gbuffers,"number of capture buffers, range 2-32");
module_param(noninterlaced, int, 0644); module_param(noninterlaced, int, 0644);
MODULE_PARM_DESC(noninterlaced,"video input is noninterlaced"); MODULE_PARM_DESC(noninterlaced,"capture non interlaced video");
#define dprintk(fmt, arg...) if (video_debug) \ #define dprintk(fmt, arg...) if (video_debug) \
printk(KERN_DEBUG "%s/video: " fmt, dev->name , ## arg) printk(KERN_DEBUG "%s/video: " fmt, dev->name , ## arg)
@ -2087,7 +2087,7 @@ static int video_do_ioctl(struct inode *inode, struct file *file,
struct v4l2_format *f = arg; struct v4l2_format *f = arg;
return saa7134_try_fmt(dev,fh,f); return saa7134_try_fmt(dev,fh,f);
} }
#ifdef HAVE_V4L1 #ifdef CONFIG_V4L1_COMPAT
case VIDIOCGMBUF: case VIDIOCGMBUF:
{ {
struct video_mbuf *mbuf = arg; struct video_mbuf *mbuf = arg;

View File

@ -586,8 +586,8 @@ void saa7134_dma_free(struct videobuf_queue *q,struct saa7134_buf *buf);
int saa7134_set_dmabits(struct saa7134_dev *dev); int saa7134_set_dmabits(struct saa7134_dev *dev);
extern int (*dmasound_init)(struct saa7134_dev *dev); extern int (*saa7134_dmasound_init)(struct saa7134_dev *dev);
extern int (*dmasound_exit)(struct saa7134_dev *dev); extern int (*saa7134_dmasound_exit)(struct saa7134_dev *dev);
/* ----------------------------------------------------------- */ /* ----------------------------------------------------------- */

View File

@ -2181,7 +2181,6 @@ static struct pci_device_id stradis_pci_tbl[] = {
{ 0 } { 0 }
}; };
MODULE_DEVICE_TABLE(pci, stradis_pci_tbl);
static struct pci_driver stradis_driver = { static struct pci_driver stradis_driver = {
.name = "stradis", .name = "stradis",

View File

@ -196,14 +196,6 @@ static void set_type(struct i2c_client *c, unsigned int type,
i2c_master_send(c, buffer, 4); i2c_master_send(c, buffer, 4);
default_tuner_init(c); default_tuner_init(c);
break; break;
case TUNER_LG_TDVS_H06XF:
/* Set the Auxiliary Byte. */
buffer[2] &= ~0x20;
buffer[2] |= 0x18;
buffer[3] = 0x20;
i2c_master_send(c, buffer, 4);
default_tuner_init(c);
break;
case TUNER_PHILIPS_TD1316: case TUNER_PHILIPS_TD1316:
buffer[0] = 0x0b; buffer[0] = 0x0b;
buffer[1] = 0xdc; buffer[1] = 0xdc;
@ -598,6 +590,7 @@ static int tuner_command(struct i2c_client *client, unsigned int cmd, void *arg)
if (t->standby) if (t->standby)
t->standby (client); t->standby (client);
break; break;
#ifdef CONFIG_VIDEO_V4L1
case VIDIOCSAUDIO: case VIDIOCSAUDIO:
if (check_mode(t, "VIDIOCSAUDIO") == EINVAL) if (check_mode(t, "VIDIOCSAUDIO") == EINVAL)
return 0; return 0;
@ -607,17 +600,6 @@ static int tuner_command(struct i2c_client *client, unsigned int cmd, void *arg)
/* Should be implemented, since bttv calls it */ /* Should be implemented, since bttv calls it */
tuner_dbg("VIDIOCSAUDIO not implemented.\n"); tuner_dbg("VIDIOCSAUDIO not implemented.\n");
break; break;
case TDA9887_SET_CONFIG:
if (t->type == TUNER_TDA9887) {
int *i = arg;
t->tda9887_config = *i;
set_freq(client, t->tv_freq);
}
break;
/* --- v4l ioctls --- */
/* take care: bttv does userspace copying, we'll get a
kernel pointer here... */
case VIDIOCSCHAN: case VIDIOCSCHAN:
{ {
static const v4l2_std_id map[] = { static const v4l2_std_id map[] = {
@ -701,7 +683,18 @@ static int tuner_command(struct i2c_client *client, unsigned int cmd, void *arg)
? VIDEO_SOUND_STEREO : VIDEO_SOUND_MONO; ? VIDEO_SOUND_STEREO : VIDEO_SOUND_MONO;
return 0; return 0;
} }
#endif
case TDA9887_SET_CONFIG:
if (t->type == TUNER_TDA9887) {
int *i = arg;
t->tda9887_config = *i;
set_freq(client, t->tv_freq);
}
break;
/* --- v4l ioctls --- */
/* take care: bttv does userspace copying, we'll get a
kernel pointer here... */
case VIDIOC_S_STD: case VIDIOC_S_STD:
{ {
v4l2_std_id *id = arg; v4l2_std_id *id = arg;

View File

@ -339,7 +339,20 @@ static void default_set_tv_freq(struct i2c_client *c, unsigned int freq)
if (4 != (rc = i2c_master_send(c,buffer,4))) if (4 != (rc = i2c_master_send(c,buffer,4)))
tuner_warn("i2c i/o error: rc == %d (should be 4)\n",rc); tuner_warn("i2c i/o error: rc == %d (should be 4)\n",rc);
if (t->type == TUNER_MICROTUNE_4042FI5) { switch (t->type) {
case TUNER_LG_TDVS_H06XF:
/* Set the Auxiliary Byte. */
buffer[0] = buffer[2];
buffer[0] &= ~0x20;
buffer[0] |= 0x18;
buffer[1] = 0x20;
tuner_dbg("tv 0x%02x 0x%02x\n",buffer[0],buffer[1]);
if (2 != (rc = i2c_master_send(c,buffer,2)))
tuner_warn("i2c i/o error: rc == %d (should be 2)\n",rc);
break;
case TUNER_MICROTUNE_4042FI5:
{
// FIXME - this may also work for other tuners // FIXME - this may also work for other tuners
unsigned long timeout = jiffies + msecs_to_jiffies(1); unsigned long timeout = jiffies + msecs_to_jiffies(1);
u8 status_byte = 0; u8 status_byte = 0;
@ -364,10 +377,12 @@ static void default_set_tv_freq(struct i2c_client *c, unsigned int freq)
buffer[2] = config; buffer[2] = config;
buffer[3] = cb; buffer[3] = cb;
tuner_dbg("tv 0x%02x 0x%02x 0x%02x 0x%02x\n", tuner_dbg("tv 0x%02x 0x%02x 0x%02x 0x%02x\n",
buffer[0],buffer[1],buffer[2],buffer[3]); buffer[0],buffer[1],buffer[2],buffer[3]);
if (4 != (rc = i2c_master_send(c,buffer,4))) if (4 != (rc = i2c_master_send(c,buffer,4)))
tuner_warn("i2c i/o error: rc == %d (should be 4)\n",rc); tuner_warn("i2c i/o error: rc == %d (should be 4)\n",rc);
break;
}
} }
} }

View File

@ -3,7 +3,7 @@ config VIDEO_USBVIDEO
config USB_VICAM config USB_VICAM
tristate "USB 3com HomeConnect (aka vicam) support (EXPERIMENTAL)" tristate "USB 3com HomeConnect (aka vicam) support (EXPERIMENTAL)"
depends on USB && VIDEO_V4L1 && EXPERIMENTAL depends on USB && VIDEO_DEV && VIDEO_V4L1 && EXPERIMENTAL
select VIDEO_USBVIDEO select VIDEO_USBVIDEO
---help--- ---help---
Say Y here if you have 3com homeconnect camera (vicam). Say Y here if you have 3com homeconnect camera (vicam).
@ -13,7 +13,7 @@ config USB_VICAM
config USB_IBMCAM config USB_IBMCAM
tristate "USB IBM (Xirlink) C-it Camera support" tristate "USB IBM (Xirlink) C-it Camera support"
depends on USB && VIDEO_V4L1 depends on USB && VIDEO_DEV && VIDEO_V4L1
select VIDEO_USBVIDEO select VIDEO_USBVIDEO
---help--- ---help---
Say Y here if you want to connect a IBM "C-It" camera, also known as Say Y here if you want to connect a IBM "C-It" camera, also known as
@ -28,7 +28,7 @@ config USB_IBMCAM
config USB_KONICAWC config USB_KONICAWC
tristate "USB Konica Webcam support" tristate "USB Konica Webcam support"
depends on USB && VIDEO_V4L1 depends on USB && VIDEO_DEV && VIDEO_V4L1
select VIDEO_USBVIDEO select VIDEO_USBVIDEO
---help--- ---help---
Say Y here if you want support for webcams based on a Konica Say Y here if you want support for webcams based on a Konica
@ -39,7 +39,7 @@ config USB_KONICAWC
config USB_QUICKCAM_MESSENGER config USB_QUICKCAM_MESSENGER
tristate "USB Logitech Quickcam Messenger" tristate "USB Logitech Quickcam Messenger"
depends on USB && VIDEO_DEV depends on USB && VIDEO_DEV && VIDEO_V4L1
select VIDEO_USBVIDEO select VIDEO_USBVIDEO
---help--- ---help---
Say Y or M here to enable support for the USB Logitech Quickcam Say Y or M here to enable support for the USB Logitech Quickcam

View File

@ -202,7 +202,7 @@ static char *v4l2_memory_names[] = {
/* ------------------------------------------------------------------ */ /* ------------------------------------------------------------------ */
/* debug help functions */ /* debug help functions */
#ifdef HAVE_V4L1 #ifdef CONFIG_V4L1_COMPAT
static const char *v4l1_ioctls[] = { static const char *v4l1_ioctls[] = {
[_IOC_NR(VIDIOCGCAP)] = "VIDIOCGCAP", [_IOC_NR(VIDIOCGCAP)] = "VIDIOCGCAP",
[_IOC_NR(VIDIOCGCHAN)] = "VIDIOCGCHAN", [_IOC_NR(VIDIOCGCHAN)] = "VIDIOCGCHAN",
@ -301,7 +301,7 @@ static const char *v4l2_ioctls[] = {
#define V4L2_IOCTLS ARRAY_SIZE(v4l2_ioctls) #define V4L2_IOCTLS ARRAY_SIZE(v4l2_ioctls)
static const char *v4l2_int_ioctls[] = { static const char *v4l2_int_ioctls[] = {
#ifdef HAVE_VIDEO_DECODER #ifdef CONFIG_V4L1_COMPAT
[_IOC_NR(DECODER_GET_CAPABILITIES)] = "DECODER_GET_CAPABILITIES", [_IOC_NR(DECODER_GET_CAPABILITIES)] = "DECODER_GET_CAPABILITIES",
[_IOC_NR(DECODER_GET_STATUS)] = "DECODER_GET_STATUS", [_IOC_NR(DECODER_GET_STATUS)] = "DECODER_GET_STATUS",
[_IOC_NR(DECODER_SET_NORM)] = "DECODER_SET_NORM", [_IOC_NR(DECODER_SET_NORM)] = "DECODER_SET_NORM",
@ -367,7 +367,7 @@ void v4l_printk_ioctl(unsigned int cmd)
(_IOC_NR(cmd) < V4L2_INT_IOCTLS) ? (_IOC_NR(cmd) < V4L2_INT_IOCTLS) ?
v4l2_int_ioctls[_IOC_NR(cmd)] : "UNKNOWN", dir, cmd); v4l2_int_ioctls[_IOC_NR(cmd)] : "UNKNOWN", dir, cmd);
break; break;
#ifdef HAVE_V4L1 #ifdef CONFIG_V4L1_COMPAT
case 'v': case 'v':
printk("v4l1 ioctl %s, dir=%s (0x%08x)\n", printk("v4l1 ioctl %s, dir=%s (0x%08x)\n",
(_IOC_NR(cmd) < V4L1_IOCTLS) ? (_IOC_NR(cmd) < V4L1_IOCTLS) ?
@ -414,6 +414,7 @@ void v4l_printk_ioctl_arg(char *s,unsigned int cmd, void *arg)
printk ("%s: tuner type=%d\n", s, *p); printk ("%s: tuner type=%d\n", s, *p);
break; break;
} }
#ifdef CONFIG_VIDEO_V4L1_COMPAT
case DECODER_SET_VBI_BYPASS: case DECODER_SET_VBI_BYPASS:
case DECODER_ENABLE_OUTPUT: case DECODER_ENABLE_OUTPUT:
case DECODER_GET_STATUS: case DECODER_GET_STATUS:
@ -424,6 +425,7 @@ void v4l_printk_ioctl_arg(char *s,unsigned int cmd, void *arg)
case VIDIOCCAPTURE: case VIDIOCCAPTURE:
case VIDIOCSYNC: case VIDIOCSYNC:
case VIDIOCSWRITEMODE: case VIDIOCSWRITEMODE:
#endif
case TUNER_SET_TYPE_ADDR: case TUNER_SET_TYPE_ADDR:
case TUNER_SET_STANDBY: case TUNER_SET_STANDBY:
case TDA9887_SET_CONFIG: case TDA9887_SET_CONFIG:
@ -755,6 +757,7 @@ void v4l_printk_ioctl_arg(char *s,unsigned int cmd, void *arg)
p->afc); p->afc);
break; break;
} }
#ifdef CONFIG_VIDEO_V4L1_COMPAT
case VIDIOCGVBIFMT: case VIDIOCGVBIFMT:
case VIDIOCSVBIFMT: case VIDIOCSVBIFMT:
{ {
@ -924,6 +927,14 @@ void v4l_printk_ioctl_arg(char *s,unsigned int cmd, void *arg)
p->clipcount); p->clipcount);
break; break;
} }
case VIDIOCGFREQ:
case VIDIOCSFREQ:
{
unsigned long *p=arg;
printk ("%s: value=%lu\n", s, *p);
break;
}
#endif
case VIDIOC_INT_AUDIO_CLOCK_FREQ: case VIDIOC_INT_AUDIO_CLOCK_FREQ:
case VIDIOC_INT_I2S_CLOCK_FREQ: case VIDIOC_INT_I2S_CLOCK_FREQ:
case VIDIOC_INT_S_STANDBY: case VIDIOC_INT_S_STANDBY:
@ -933,13 +944,6 @@ void v4l_printk_ioctl_arg(char *s,unsigned int cmd, void *arg)
printk ("%s: value=%d\n", s, *p); printk ("%s: value=%d\n", s, *p);
break; break;
} }
case VIDIOCGFREQ:
case VIDIOCSFREQ:
{
unsigned long *p=arg;
printk ("%s: value=%lu\n", s, *p);
break;
}
case VIDIOC_G_STD: case VIDIOC_G_STD:
case VIDIOC_S_STD: case VIDIOC_S_STD:
case VIDIOC_QUERYSTD: case VIDIOC_QUERYSTD:

View File

@ -760,7 +760,7 @@ static int __video_do_ioctl(struct inode *inode, struct file *file,
ret=vfd->vidioc_overlay(file, fh, *i); ret=vfd->vidioc_overlay(file, fh, *i);
break; break;
} }
#ifdef HAVE_V4L1 #ifdef CONFIG_V4L1_COMPAT
/* --- streaming capture ------------------------------------- */ /* --- streaming capture ------------------------------------- */
case VIDIOCGMBUF: case VIDIOCGMBUF:
{ {
@ -1512,6 +1512,7 @@ int video_register_device(struct video_device *vfd, int type, int nr)
int i=0; int i=0;
int base; int base;
int end; int end;
int ret;
char *name_base; char *name_base;
switch(type) switch(type)
@ -1537,6 +1538,8 @@ int video_register_device(struct video_device *vfd, int type, int nr)
name_base = "radio"; name_base = "radio";
break; break;
default: default:
printk(KERN_ERR "%s called with unknown type: %d\n",
__FUNCTION__, type);
return -1; return -1;
} }
@ -1571,9 +1574,18 @@ int video_register_device(struct video_device *vfd, int type, int nr)
vfd->class_dev.class = &video_class; vfd->class_dev.class = &video_class;
vfd->class_dev.devt = MKDEV(VIDEO_MAJOR, vfd->minor); vfd->class_dev.devt = MKDEV(VIDEO_MAJOR, vfd->minor);
sprintf(vfd->class_dev.class_id, "%s%d", name_base, i - base); sprintf(vfd->class_dev.class_id, "%s%d", name_base, i - base);
class_device_register(&vfd->class_dev); ret = class_device_register(&vfd->class_dev);
class_device_create_file(&vfd->class_dev, if (ret < 0) {
&class_device_attr_name); printk(KERN_ERR "%s: class_device_register failed\n",
__FUNCTION__);
goto fail_minor;
}
ret = class_device_create_file(&vfd->class_dev, &class_device_attr_name);
if (ret < 0) {
printk(KERN_ERR "%s: class_device_create_file 'name' failed\n",
__FUNCTION__);
goto fail_classdev;
}
#if 1 #if 1
/* needed until all drivers are fixed */ /* needed until all drivers are fixed */
@ -1583,6 +1595,15 @@ int video_register_device(struct video_device *vfd, int type, int nr)
"http://lwn.net/Articles/36850/\n", vfd->name); "http://lwn.net/Articles/36850/\n", vfd->name);
#endif #endif
return 0; return 0;
fail_classdev:
class_device_unregister(&vfd->class_dev);
fail_minor:
mutex_lock(&videodev_lock);
video_device[vfd->minor] = NULL;
vfd->minor = -1;
mutex_unlock(&videodev_lock);
return ret;
} }
/** /**

View File

@ -986,7 +986,7 @@ static int vidioc_dqbuf (struct file *file, void *priv, struct v4l2_buffer *p)
file->f_flags & O_NONBLOCK)); file->f_flags & O_NONBLOCK));
} }
#ifdef HAVE_V4L1 #ifdef CONFIG_V4L1_COMPAT
static int vidiocgmbuf (struct file *file, void *priv, struct video_mbuf *mbuf) static int vidiocgmbuf (struct file *file, void *priv, struct video_mbuf *mbuf)
{ {
struct vivi_fh *fh=priv; struct vivi_fh *fh=priv;
@ -1328,7 +1328,7 @@ static struct video_device vivi = {
.vidioc_s_ctrl = vidioc_s_ctrl, .vidioc_s_ctrl = vidioc_s_ctrl,
.vidioc_streamon = vidioc_streamon, .vidioc_streamon = vidioc_streamon,
.vidioc_streamoff = vidioc_streamoff, .vidioc_streamoff = vidioc_streamoff,
#ifdef HAVE_V4L1 #ifdef CONFIG_V4L1_COMPAT
.vidiocgmbuf = vidiocgmbuf, .vidiocgmbuf = vidiocgmbuf,
#endif #endif
.tvnorms = tvnorms, .tvnorms = tvnorms,

View File

@ -29,7 +29,7 @@ config ATALK
even politically correct people are allowed to say Y here. even politically correct people are allowed to say Y here.
config DEV_APPLETALK config DEV_APPLETALK
bool "Appletalk interfaces support" tristate "Appletalk interfaces support"
depends on ATALK depends on ATALK
help help
AppleTalk is the protocol that Apple computers can use to communicate AppleTalk is the protocol that Apple computers can use to communicate

View File

@ -3127,7 +3127,7 @@ e1000_change_mtu(struct net_device *netdev, int new_mtu)
break; break;
} }
/* NOTE: dev_alloc_skb reserves 16 bytes, and typically NET_IP_ALIGN /* NOTE: netdev_alloc_skb reserves 16 bytes, and typically NET_IP_ALIGN
* means we reserve 2 more, this pushes us to allocate from the next * means we reserve 2 more, this pushes us to allocate from the next
* larger slab size * larger slab size
* i.e. RXBUFFER_2048 --> size-4096 slab */ * i.e. RXBUFFER_2048 --> size-4096 slab */
@ -3708,7 +3708,7 @@ e1000_clean_rx_irq(struct e1000_adapter *adapter,
#define E1000_CB_LENGTH 256 #define E1000_CB_LENGTH 256
if (length < E1000_CB_LENGTH) { if (length < E1000_CB_LENGTH) {
struct sk_buff *new_skb = struct sk_buff *new_skb =
dev_alloc_skb(length + NET_IP_ALIGN); netdev_alloc_skb(netdev, length + NET_IP_ALIGN);
if (new_skb) { if (new_skb) {
skb_reserve(new_skb, NET_IP_ALIGN); skb_reserve(new_skb, NET_IP_ALIGN);
new_skb->dev = netdev; new_skb->dev = netdev;
@ -3979,7 +3979,7 @@ e1000_alloc_rx_buffers(struct e1000_adapter *adapter,
while (cleaned_count--) { while (cleaned_count--) {
if (!(skb = buffer_info->skb)) if (!(skb = buffer_info->skb))
skb = dev_alloc_skb(bufsz); skb = netdev_alloc_skb(netdev, bufsz);
else { else {
skb_trim(skb, 0); skb_trim(skb, 0);
goto map_skb; goto map_skb;
@ -3997,7 +3997,7 @@ e1000_alloc_rx_buffers(struct e1000_adapter *adapter,
DPRINTK(RX_ERR, ERR, "skb align check failed: %u bytes " DPRINTK(RX_ERR, ERR, "skb align check failed: %u bytes "
"at %p\n", bufsz, skb->data); "at %p\n", bufsz, skb->data);
/* Try again, without freeing the previous */ /* Try again, without freeing the previous */
skb = dev_alloc_skb(bufsz); skb = netdev_alloc_skb(netdev, bufsz);
/* Failed allocation, critical failure */ /* Failed allocation, critical failure */
if (!skb) { if (!skb) {
dev_kfree_skb(oldskb); dev_kfree_skb(oldskb);
@ -4121,7 +4121,8 @@ e1000_alloc_rx_buffers_ps(struct e1000_adapter *adapter,
rx_desc->read.buffer_addr[j+1] = ~0; rx_desc->read.buffer_addr[j+1] = ~0;
} }
skb = dev_alloc_skb(adapter->rx_ps_bsize0 + NET_IP_ALIGN); skb = netdev_alloc_skb(netdev,
adapter->rx_ps_bsize0 + NET_IP_ALIGN);
if (unlikely(!skb)) { if (unlikely(!skb)) {
adapter->alloc_rx_buff_failed++; adapter->alloc_rx_buff_failed++;

View File

@ -177,6 +177,7 @@ struct myri10ge_priv {
struct work_struct watchdog_work; struct work_struct watchdog_work;
struct timer_list watchdog_timer; struct timer_list watchdog_timer;
int watchdog_tx_done; int watchdog_tx_done;
int watchdog_tx_req;
int watchdog_resets; int watchdog_resets;
int tx_linearized; int tx_linearized;
int pause; int pause;
@ -448,6 +449,7 @@ static int myri10ge_load_hotplug_firmware(struct myri10ge_priv *mgp, u32 * size)
struct mcp_gen_header *hdr; struct mcp_gen_header *hdr;
size_t hdr_offset; size_t hdr_offset;
int status; int status;
unsigned i;
if ((status = request_firmware(&fw, mgp->fw_name, dev)) < 0) { if ((status = request_firmware(&fw, mgp->fw_name, dev)) < 0) {
dev_err(dev, "Unable to load %s firmware image via hotplug\n", dev_err(dev, "Unable to load %s firmware image via hotplug\n",
@ -479,18 +481,12 @@ static int myri10ge_load_hotplug_firmware(struct myri10ge_priv *mgp, u32 * size)
goto abort_with_fw; goto abort_with_fw;
crc = crc32(~0, fw->data, fw->size); crc = crc32(~0, fw->data, fw->size);
if (mgp->tx.boundary == 2048) { for (i = 0; i < fw->size; i += 256) {
/* Avoid PCI burst on chipset with unaligned completions. */ myri10ge_pio_copy(mgp->sram + MYRI10GE_FW_OFFSET + i,
int i; fw->data + i,
__iomem u32 *ptr = (__iomem u32 *) (mgp->sram + min(256U, (unsigned)(fw->size - i)));
MYRI10GE_FW_OFFSET); mb();
for (i = 0; i < fw->size / 4; i++) { readb(mgp->sram);
__raw_writel(((u32 *) fw->data)[i], ptr + i);
wmb();
}
} else {
myri10ge_pio_copy(mgp->sram + MYRI10GE_FW_OFFSET, fw->data,
fw->size);
} }
/* corruption checking is good for parity recovery and buggy chipset */ /* corruption checking is good for parity recovery and buggy chipset */
memcpy_fromio(fw->data, mgp->sram + MYRI10GE_FW_OFFSET, fw->size); memcpy_fromio(fw->data, mgp->sram + MYRI10GE_FW_OFFSET, fw->size);
@ -2547,7 +2543,8 @@ static void myri10ge_watchdog_timer(unsigned long arg)
mgp = (struct myri10ge_priv *)arg; mgp = (struct myri10ge_priv *)arg;
if (mgp->tx.req != mgp->tx.done && if (mgp->tx.req != mgp->tx.done &&
mgp->tx.done == mgp->watchdog_tx_done) mgp->tx.done == mgp->watchdog_tx_done &&
mgp->watchdog_tx_req != mgp->watchdog_tx_done)
/* nic seems like it might be stuck.. */ /* nic seems like it might be stuck.. */
schedule_work(&mgp->watchdog_work); schedule_work(&mgp->watchdog_work);
else else
@ -2556,6 +2553,7 @@ static void myri10ge_watchdog_timer(unsigned long arg)
jiffies + myri10ge_watchdog_timeout * HZ); jiffies + myri10ge_watchdog_timeout * HZ);
mgp->watchdog_tx_done = mgp->tx.done; mgp->watchdog_tx_done = mgp->tx.done;
mgp->watchdog_tx_req = mgp->tx.req;
} }
static int myri10ge_probe(struct pci_dev *pdev, const struct pci_device_id *ent) static int myri10ge_probe(struct pci_dev *pdev, const struct pci_device_id *ent)

View File

@ -419,9 +419,8 @@ void phy_start_machine(struct phy_device *phydev,
/* phy_stop_machine /* phy_stop_machine
* *
* description: Stops the state machine timer, sets the state to * description: Stops the state machine timer, sets the state to UP
* UP (unless it wasn't up yet), and then frees the interrupt, * (unless it wasn't up yet). This function must be called BEFORE
* if it is in use. This function must be called BEFORE
* phy_detach. * phy_detach.
*/ */
void phy_stop_machine(struct phy_device *phydev) void phy_stop_machine(struct phy_device *phydev)
@ -433,9 +432,6 @@ void phy_stop_machine(struct phy_device *phydev)
phydev->state = PHY_UP; phydev->state = PHY_UP;
spin_unlock(&phydev->lock); spin_unlock(&phydev->lock);
if (phydev->irq != PHY_POLL)
phy_stop_interrupts(phydev);
phydev->adjust_state = NULL; phydev->adjust_state = NULL;
} }

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