Merge commit 'gcl/merge' into merge
This commit is contained in:
commit
c71327ad9f
|
@ -3350,10 +3350,8 @@ S: Maintained
|
|||
PARISC ARCHITECTURE
|
||||
P: Kyle McMartin
|
||||
M: kyle@mcmartin.ca
|
||||
P: Matthew Wilcox
|
||||
M: matthew@wil.cx
|
||||
P: Grant Grundler
|
||||
M: grundler@parisc-linux.org
|
||||
P: Helge Deller
|
||||
M: deller@gmx.de
|
||||
L: linux-parisc@vger.kernel.org
|
||||
W: http://www.parisc-linux.org/
|
||||
T: git kernel.org:/pub/scm/linux/kernel/git/kyle/parisc-2.6.git
|
||||
|
|
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
|||
VERSION = 2
|
||||
PATCHLEVEL = 6
|
||||
SUBLEVEL = 29
|
||||
EXTRAVERSION = -rc7
|
||||
EXTRAVERSION = -rc8
|
||||
NAME = Erotic Pickled Herring
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
|
|
@ -111,6 +111,7 @@ ENTRY(mcount)
|
|||
.globl mcount_call
|
||||
mcount_call:
|
||||
bl ftrace_stub
|
||||
ldr lr, [fp, #-4] @ restore lr
|
||||
ldmia sp!, {r0-r3, pc}
|
||||
|
||||
ENTRY(ftrace_caller)
|
||||
|
@ -122,6 +123,7 @@ ENTRY(ftrace_caller)
|
|||
.globl ftrace_call
|
||||
ftrace_call:
|
||||
bl ftrace_stub
|
||||
ldr lr, [fp, #-4] @ restore lr
|
||||
ldmia sp!, {r0-r3, pc}
|
||||
|
||||
#else
|
||||
|
@ -133,6 +135,7 @@ ENTRY(mcount)
|
|||
adr r0, ftrace_stub
|
||||
cmp r0, r2
|
||||
bne trace
|
||||
ldr lr, [fp, #-4] @ restore lr
|
||||
ldmia sp!, {r0-r3, pc}
|
||||
|
||||
trace:
|
||||
|
@ -141,6 +144,7 @@ trace:
|
|||
sub r0, r0, #MCOUNT_INSN_SIZE
|
||||
mov lr, pc
|
||||
mov pc, r2
|
||||
mov lr, r1 @ restore lr
|
||||
ldmia sp!, {r0-r3, pc}
|
||||
|
||||
#endif /* CONFIG_DYNAMIC_FTRACE */
|
||||
|
|
|
@ -88,7 +88,7 @@ void set_fiq_handler(void *start, unsigned int length)
|
|||
* disable irqs for the duration. Note - these functions are almost
|
||||
* entirely coded in assembly.
|
||||
*/
|
||||
void __attribute__((naked)) set_fiq_regs(struct pt_regs *regs)
|
||||
void __naked set_fiq_regs(struct pt_regs *regs)
|
||||
{
|
||||
register unsigned long tmp;
|
||||
asm volatile (
|
||||
|
@ -106,7 +106,7 @@ void __attribute__((naked)) set_fiq_regs(struct pt_regs *regs)
|
|||
: "r" (®s->ARM_r8), "I" (PSR_I_BIT | PSR_F_BIT | FIQ_MODE));
|
||||
}
|
||||
|
||||
void __attribute__((naked)) get_fiq_regs(struct pt_regs *regs)
|
||||
void __naked get_fiq_regs(struct pt_regs *regs)
|
||||
{
|
||||
register unsigned long tmp;
|
||||
asm volatile (
|
||||
|
|
|
@ -4,6 +4,8 @@
|
|||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
struct i2c_board_info;
|
||||
|
||||
struct ep93xx_eth_data
|
||||
{
|
||||
unsigned char dev_addr[6];
|
||||
|
|
|
@ -23,6 +23,8 @@
|
|||
#include <linux/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/gpio.h>
|
||||
|
||||
#include <mach/irqs.h>
|
||||
#include <mach/hardware.h>
|
||||
|
||||
static struct resource imx_csi_resources[] = {
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/time.h>
|
||||
|
||||
#include <mach/irqs.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/common.h>
|
||||
#include <mach/imx-uart.h>
|
||||
|
|
|
@ -178,7 +178,9 @@ static int __init omap3_beagle_i2c_init(void)
|
|||
#ifdef CONFIG_I2C2_OMAP_BEAGLE
|
||||
omap_register_i2c_bus(2, 400, NULL, 0);
|
||||
#endif
|
||||
omap_register_i2c_bus(3, 400, NULL, 0);
|
||||
/* Bus 3 is attached to the DVI port where devices like the pico DLP
|
||||
* projector don't work reliably with 400kHz */
|
||||
omap_register_i2c_bus(3, 100, NULL, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -431,6 +431,10 @@ void __init orion5x_uart1_init(void)
|
|||
/*****************************************************************************
|
||||
* XOR engine
|
||||
****************************************************************************/
|
||||
struct mv_xor_platform_shared_data orion5x_xor_shared_data = {
|
||||
.dram = &orion5x_mbus_dram_info,
|
||||
};
|
||||
|
||||
static struct resource orion5x_xor_shared_resources[] = {
|
||||
{
|
||||
.name = "xor low",
|
||||
|
@ -448,6 +452,9 @@ static struct resource orion5x_xor_shared_resources[] = {
|
|||
static struct platform_device orion5x_xor_shared = {
|
||||
.name = MV_XOR_SHARED_NAME,
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.platform_data = &orion5x_xor_shared_data,
|
||||
},
|
||||
.num_resources = ARRAY_SIZE(orion5x_xor_shared_resources),
|
||||
.resource = orion5x_xor_shared_resources,
|
||||
};
|
||||
|
|
|
@ -129,7 +129,7 @@ static struct s3c_fb_platdata smdk6410_lcd_pdata __initdata = {
|
|||
.vidcon1 = VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
|
||||
};
|
||||
|
||||
struct map_desc smdk6410_iodesc[] = {};
|
||||
static struct map_desc smdk6410_iodesc[] = {};
|
||||
|
||||
static struct platform_device *smdk6410_devices[] __initdata = {
|
||||
#ifdef CONFIG_SMDK6410_SD_CH0
|
||||
|
@ -146,7 +146,7 @@ static struct platform_device *smdk6410_devices[] __initdata = {
|
|||
|
||||
static struct i2c_board_info i2c_devs0[] __initdata = {
|
||||
{ I2C_BOARD_INFO("24c08", 0x50), },
|
||||
{ I2C_BOARD_INFO("WM8580", 0X1b), },
|
||||
{ I2C_BOARD_INFO("wm8580", 0x1b), },
|
||||
};
|
||||
|
||||
static struct i2c_board_info i2c_devs1[] __initdata = {
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
#include <linux/init.h>
|
||||
#include <linux/highmem.h>
|
||||
|
||||
static void __attribute__((naked))
|
||||
static void __naked
|
||||
feroceon_copy_user_page(void *kto, const void *kfrom)
|
||||
{
|
||||
asm("\
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
*
|
||||
* FIXME: do we need to handle cache stuff...
|
||||
*/
|
||||
static void __attribute__((naked))
|
||||
static void __naked
|
||||
v3_copy_user_page(void *kto, const void *kfrom)
|
||||
{
|
||||
asm("\n\
|
||||
|
|
|
@ -44,7 +44,7 @@ static DEFINE_SPINLOCK(minicache_lock);
|
|||
* instruction. If your processor does not supply this, you have to write your
|
||||
* own copy_user_highpage that does the right thing.
|
||||
*/
|
||||
static void __attribute__((naked))
|
||||
static void __naked
|
||||
mc_copy_user_page(void *from, void *to)
|
||||
{
|
||||
asm volatile(
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
* instruction. If your processor does not supply this, you have to write your
|
||||
* own copy_user_highpage that does the right thing.
|
||||
*/
|
||||
static void __attribute__((naked))
|
||||
static void __naked
|
||||
v4wb_copy_user_page(void *kto, const void *kfrom)
|
||||
{
|
||||
asm("\
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
* dirty data in the cache. However, we do have to ensure that
|
||||
* subsequent reads are up to date.
|
||||
*/
|
||||
static void __attribute__((naked))
|
||||
static void __naked
|
||||
v4wt_copy_user_page(void *kto, const void *kfrom)
|
||||
{
|
||||
asm("\
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
* if we eventually end up using our copied page.
|
||||
*
|
||||
*/
|
||||
static void __attribute__((naked))
|
||||
static void __naked
|
||||
xsc3_mc_copy_user_page(void *kto, const void *kfrom)
|
||||
{
|
||||
asm("\
|
||||
|
|
|
@ -42,7 +42,7 @@ static DEFINE_SPINLOCK(minicache_lock);
|
|||
* Dcache aliasing issue. The writes will be forwarded to the write buffer,
|
||||
* and merged as appropriate.
|
||||
*/
|
||||
static void __attribute__((naked))
|
||||
static void __naked
|
||||
mc_copy_user_page(void *from, void *to)
|
||||
{
|
||||
/*
|
||||
|
|
|
@ -490,26 +490,30 @@ core_initcall(consistent_init);
|
|||
*/
|
||||
void dma_cache_maint(const void *start, size_t size, int direction)
|
||||
{
|
||||
const void *end = start + size;
|
||||
void (*inner_op)(const void *, const void *);
|
||||
void (*outer_op)(unsigned long, unsigned long);
|
||||
|
||||
BUG_ON(!virt_addr_valid(start) || !virt_addr_valid(end - 1));
|
||||
BUG_ON(!virt_addr_valid(start) || !virt_addr_valid(start + size - 1));
|
||||
|
||||
switch (direction) {
|
||||
case DMA_FROM_DEVICE: /* invalidate only */
|
||||
dmac_inv_range(start, end);
|
||||
outer_inv_range(__pa(start), __pa(end));
|
||||
inner_op = dmac_inv_range;
|
||||
outer_op = outer_inv_range;
|
||||
break;
|
||||
case DMA_TO_DEVICE: /* writeback only */
|
||||
dmac_clean_range(start, end);
|
||||
outer_clean_range(__pa(start), __pa(end));
|
||||
inner_op = dmac_clean_range;
|
||||
outer_op = outer_clean_range;
|
||||
break;
|
||||
case DMA_BIDIRECTIONAL: /* writeback and invalidate */
|
||||
dmac_flush_range(start, end);
|
||||
outer_flush_range(__pa(start), __pa(end));
|
||||
inner_op = dmac_flush_range;
|
||||
outer_op = outer_flush_range;
|
||||
break;
|
||||
default:
|
||||
BUG();
|
||||
}
|
||||
|
||||
inner_op(start, start + size);
|
||||
outer_op(__pa(start), __pa(start) + size);
|
||||
}
|
||||
EXPORT_SYMBOL(dma_cache_maint);
|
||||
|
||||
|
|
|
@ -382,7 +382,7 @@ void __init bootmem_init(void)
|
|||
for_each_node(node)
|
||||
bootmem_free_node(node, mi);
|
||||
|
||||
high_memory = __va(memend_pfn << PAGE_SHIFT);
|
||||
high_memory = __va((memend_pfn << PAGE_SHIFT) - 1) + 1;
|
||||
|
||||
/*
|
||||
* This doesn't seem to be used by the Linux memory manager any
|
||||
|
|
|
@ -124,7 +124,7 @@ int valid_phys_addr_range(unsigned long addr, size_t size)
|
|||
{
|
||||
if (addr < PHYS_OFFSET)
|
||||
return 0;
|
||||
if (addr + size > __pa(high_memory))
|
||||
if (addr + size >= __pa(high_memory - 1))
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
|
|
|
@ -18,7 +18,8 @@ obj-$(CONFIG_CPU_FREQ) += cpu-omap.o
|
|||
obj-$(CONFIG_OMAP_DM_TIMER) += dmtimer.o
|
||||
obj-$(CONFIG_OMAP_DEBUG_DEVICES) += debug-devices.o
|
||||
obj-$(CONFIG_OMAP_DEBUG_LEDS) += debug-leds.o
|
||||
obj-$(CONFIG_I2C_OMAP) += i2c.o
|
||||
i2c-omap-$(CONFIG_I2C_OMAP) := i2c.o
|
||||
obj-y += $(i2c-omap-m) $(i2c-omap-y)
|
||||
|
||||
# OMAP mailbox framework
|
||||
obj-$(CONFIG_OMAP_MBOX_FWK) += mailbox.o
|
||||
|
|
|
@ -199,21 +199,17 @@ static struct clocksource clocksource_32k = {
|
|||
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
|
||||
};
|
||||
|
||||
/*
|
||||
* Rounds down to nearest nsec.
|
||||
*/
|
||||
unsigned long long omap_32k_ticks_to_nsecs(unsigned long ticks_32k)
|
||||
{
|
||||
return cyc2ns(&clocksource_32k, ticks_32k);
|
||||
}
|
||||
|
||||
/*
|
||||
* Returns current time from boot in nsecs. It's OK for this to wrap
|
||||
* around for now, as it's just a relative time stamp.
|
||||
*/
|
||||
unsigned long long sched_clock(void)
|
||||
{
|
||||
return omap_32k_ticks_to_nsecs(omap_32k_read());
|
||||
unsigned long long ret;
|
||||
|
||||
ret = (unsigned long long)omap_32k_read();
|
||||
ret = (ret * clocksource_32k.mult_orig) >> clocksource_32k.shift;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int __init omap_init_clocksource_32k(void)
|
||||
|
|
|
@ -35,7 +35,7 @@ extern void omap_map_common_io(void);
|
|||
extern struct sys_timer omap_timer;
|
||||
extern void omap_serial_init(void);
|
||||
extern void omap_serial_enable_clocks(int enable);
|
||||
#ifdef CONFIG_I2C_OMAP
|
||||
#if defined(CONFIG_I2C_OMAP) || defined(CONFIG_I2C_OMAP_MODULE)
|
||||
extern int omap_register_i2c_bus(int bus_id, u32 clkrate,
|
||||
struct i2c_board_info const *info,
|
||||
unsigned len);
|
||||
|
|
|
@ -108,7 +108,7 @@
|
|||
!defined(CONFIG_ARCH_OMAP15XX) && \
|
||||
!defined(CONFIG_ARCH_OMAP16XX) && \
|
||||
!defined(CONFIG_ARCH_OMAP24XX)
|
||||
#error "Power management for this processor not implemented yet"
|
||||
#warning "Power management for this processor not implemented yet"
|
||||
#endif
|
||||
|
||||
#ifndef __ASSEMBLER__
|
||||
|
|
|
@ -248,7 +248,7 @@ static struct clk *clks[] __initdata = {
|
|||
&clk_48m,
|
||||
};
|
||||
|
||||
void s3c64xx_register_clocks(void)
|
||||
void __init s3c64xx_register_clocks(void)
|
||||
{
|
||||
struct clk *clkp;
|
||||
int ret;
|
||||
|
|
|
@ -417,4 +417,4 @@ static __init int s3c64xx_gpiolib_init(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
arch_initcall(s3c64xx_gpiolib_init);
|
||||
core_initcall(s3c64xx_gpiolib_init);
|
||||
|
|
|
@ -117,7 +117,7 @@
|
|||
#define IRQ_ONENAND1 S3C64XX_IRQ_VIC1(12)
|
||||
#define IRQ_NFC S3C64XX_IRQ_VIC1(13)
|
||||
#define IRQ_CFCON S3C64XX_IRQ_VIC1(14)
|
||||
#define IRQ_UHOST S3C64XX_IRQ_VIC1(15)
|
||||
#define IRQ_USBH S3C64XX_IRQ_VIC1(15)
|
||||
#define IRQ_SPI0 S3C64XX_IRQ_VIC1(16)
|
||||
#define IRQ_SPI1 S3C64XX_IRQ_VIC1(17)
|
||||
#define IRQ_IIC S3C64XX_IRQ_VIC1(18)
|
||||
|
|
|
@ -14,12 +14,15 @@
|
|||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include <asm/hardware/vic.h>
|
||||
|
||||
#include <plat/regs-irqtype.h>
|
||||
#include <plat/regs-gpio.h>
|
||||
#include <plat/gpio-cfg.h>
|
||||
|
||||
#include <mach/map.h>
|
||||
#include <plat/cpu.h>
|
||||
|
@ -74,6 +77,7 @@ static void s3c_irq_eint_maskack(unsigned int irq)
|
|||
static int s3c_irq_eint_set_type(unsigned int irq, unsigned int type)
|
||||
{
|
||||
int offs = eint_offset(irq);
|
||||
int pin;
|
||||
int shift;
|
||||
u32 ctrl, mask;
|
||||
u32 newvalue = 0;
|
||||
|
@ -125,6 +129,15 @@ static int s3c_irq_eint_set_type(unsigned int irq, unsigned int type)
|
|||
ctrl |= newvalue << shift;
|
||||
__raw_writel(ctrl, reg);
|
||||
|
||||
/* set the GPIO pin appropriately */
|
||||
|
||||
if (offs < 23)
|
||||
pin = S3C64XX_GPN(offs);
|
||||
else
|
||||
pin = S3C64XX_GPM(offs - 23);
|
||||
|
||||
s3c_gpio_cfgpin(pin, S3C_GPIO_SFN(2));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -181,7 +194,7 @@ static void s3c_irq_demux_eint20_27(unsigned int irq, struct irq_desc *desc)
|
|||
s3c_irq_demux_eint(20, 27);
|
||||
}
|
||||
|
||||
int __init s3c64xx_init_irq_eint(void)
|
||||
static int __init s3c64xx_init_irq_eint(void)
|
||||
{
|
||||
int irq;
|
||||
|
||||
|
|
|
@ -207,7 +207,7 @@ static struct irq_chip s3c_irq_uart = {
|
|||
|
||||
static void __init s3c64xx_uart_irq(struct uart_irq *uirq)
|
||||
{
|
||||
void *reg_base = uirq->regs;
|
||||
void __iomem *reg_base = uirq->regs;
|
||||
unsigned int irq;
|
||||
int offs;
|
||||
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
* ext_xtal_mux for want of an actual name from the manual.
|
||||
*/
|
||||
|
||||
struct clk clk_ext_xtal_mux = {
|
||||
static struct clk clk_ext_xtal_mux = {
|
||||
.name = "ext_xtal",
|
||||
.id = -1,
|
||||
};
|
||||
|
@ -63,7 +63,7 @@ struct clksrc_clk {
|
|||
void __iomem *reg_divider;
|
||||
};
|
||||
|
||||
struct clk clk_fout_apll = {
|
||||
static struct clk clk_fout_apll = {
|
||||
.name = "fout_apll",
|
||||
.id = -1,
|
||||
};
|
||||
|
@ -78,7 +78,7 @@ static struct clk_sources clk_src_apll = {
|
|||
.nr_sources = ARRAY_SIZE(clk_src_apll_list),
|
||||
};
|
||||
|
||||
struct clksrc_clk clk_mout_apll = {
|
||||
static struct clksrc_clk clk_mout_apll = {
|
||||
.clk = {
|
||||
.name = "mout_apll",
|
||||
.id = -1,
|
||||
|
@ -88,7 +88,7 @@ struct clksrc_clk clk_mout_apll = {
|
|||
.sources = &clk_src_apll,
|
||||
};
|
||||
|
||||
struct clk clk_fout_epll = {
|
||||
static struct clk clk_fout_epll = {
|
||||
.name = "fout_epll",
|
||||
.id = -1,
|
||||
};
|
||||
|
@ -103,7 +103,7 @@ static struct clk_sources clk_src_epll = {
|
|||
.nr_sources = ARRAY_SIZE(clk_src_epll_list),
|
||||
};
|
||||
|
||||
struct clksrc_clk clk_mout_epll = {
|
||||
static struct clksrc_clk clk_mout_epll = {
|
||||
.clk = {
|
||||
.name = "mout_epll",
|
||||
.id = -1,
|
||||
|
@ -123,7 +123,7 @@ static struct clk_sources clk_src_mpll = {
|
|||
.nr_sources = ARRAY_SIZE(clk_src_mpll_list),
|
||||
};
|
||||
|
||||
struct clksrc_clk clk_mout_mpll = {
|
||||
static struct clksrc_clk clk_mout_mpll = {
|
||||
.clk = {
|
||||
.name = "mout_mpll",
|
||||
.id = -1,
|
||||
|
@ -145,7 +145,7 @@ static unsigned long s3c64xx_clk_doutmpll_get_rate(struct clk *clk)
|
|||
return rate;
|
||||
}
|
||||
|
||||
struct clk clk_dout_mpll = {
|
||||
static struct clk clk_dout_mpll = {
|
||||
.name = "dout_mpll",
|
||||
.id = -1,
|
||||
.parent = &clk_mout_mpll.clk,
|
||||
|
@ -189,10 +189,10 @@ static struct clk_sources clkset_uart = {
|
|||
};
|
||||
|
||||
static struct clk *clkset_uhost_list[] = {
|
||||
&clk_48m,
|
||||
&clk_mout_epll.clk,
|
||||
&clk_dout_mpll,
|
||||
&clk_fin_epll,
|
||||
&clk_48m,
|
||||
};
|
||||
|
||||
static struct clk_sources clkset_uhost = {
|
||||
|
@ -239,10 +239,12 @@ static int s3c64xx_setrate_clksrc(struct clk *clk, unsigned long rate)
|
|||
|
||||
rate = clk_round_rate(clk, rate);
|
||||
div = clk_get_rate(clk->parent) / rate;
|
||||
if (div > 16)
|
||||
return -EINVAL;
|
||||
|
||||
val = __raw_readl(reg);
|
||||
val &= ~sclk->mask;
|
||||
val |= (rate - 1) << sclk->shift;
|
||||
val &= ~(0xf << sclk->shift);
|
||||
val |= (div - 1) << sclk->shift;
|
||||
__raw_writel(val, reg);
|
||||
|
||||
return 0;
|
||||
|
@ -351,7 +353,7 @@ static struct clksrc_clk clk_mmc2 = {
|
|||
|
||||
static struct clksrc_clk clk_usbhost = {
|
||||
.clk = {
|
||||
.name = "usb-host-bus",
|
||||
.name = "usb-bus-host",
|
||||
.id = -1,
|
||||
.ctrlbit = S3C_CLKCON_SCLK_UHOST,
|
||||
.enable = s3c64xx_sclk_ctrl,
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#
|
||||
# http://www.arm.linux.org.uk/developer/machines/?action=new
|
||||
#
|
||||
# Last update: Sun Nov 30 16:39:36 2008
|
||||
# Last update: Thu Mar 12 18:01:45 2009
|
||||
#
|
||||
# machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number
|
||||
#
|
||||
|
@ -1811,7 +1811,7 @@ pilz_pmi5 MACH_PILZ_PMI5 PILZ_PMI5 1820
|
|||
jade MACH_JADE JADE 1821
|
||||
ks8695_softplc MACH_KS8695_SOFTPLC KS8695_SOFTPLC 1822
|
||||
gprisc3 MACH_GPRISC3 GPRISC3 1823
|
||||
stamp9260 MACH_STAMP9260 STAMP9260 1824
|
||||
stamp9g20 MACH_STAMP9G20 STAMP9G20 1824
|
||||
smdk6430 MACH_SMDK6430 SMDK6430 1825
|
||||
smdkc100 MACH_SMDKC100 SMDKC100 1826
|
||||
tavorevb MACH_TAVOREVB TAVOREVB 1827
|
||||
|
@ -1993,4 +1993,134 @@ spark MACH_SPARK SPARK 2002
|
|||
benzina MACH_BENZINA BENZINA 2003
|
||||
blaze MACH_BLAZE BLAZE 2004
|
||||
linkstation_ls_hgl MACH_LINKSTATION_LS_HGL LINKSTATION_LS_HGL 2005
|
||||
htcvenus MACH_HTCVENUS HTCVENUS 2006
|
||||
htckovsky MACH_HTCVENUS HTCVENUS 2006
|
||||
sony_prs505 MACH_SONY_PRS505 SONY_PRS505 2007
|
||||
hanlin_v3 MACH_HANLIN_V3 HANLIN_V3 2008
|
||||
sapphira MACH_SAPPHIRA SAPPHIRA 2009
|
||||
dack_sda_01 MACH_DACK_SDA_01 DACK_SDA_01 2010
|
||||
armbox MACH_ARMBOX ARMBOX 2011
|
||||
harris_rvp MACH_HARRIS_RVP HARRIS_RVP 2012
|
||||
ribaldo MACH_RIBALDO RIBALDO 2013
|
||||
agora MACH_AGORA AGORA 2014
|
||||
omap3_mini MACH_OMAP3_MINI OMAP3_MINI 2015
|
||||
a9sam6432_b MACH_A9SAM6432_B A9SAM6432_B 2016
|
||||
usg2410 MACH_USG2410 USG2410 2017
|
||||
pc72052_i10_revb MACH_PC72052_I10_REVB PC72052_I10_REVB 2018
|
||||
mx35_exm32 MACH_MX35_EXM32 MX35_EXM32 2019
|
||||
topas910 MACH_TOPAS910 TOPAS910 2020
|
||||
hyena MACH_HYENA HYENA 2021
|
||||
pospax MACH_POSPAX POSPAX 2022
|
||||
hdl_gx MACH_HDL_GX HDL_GX 2023
|
||||
ctera_4bay MACH_CTERA_4BAY CTERA_4BAY 2024
|
||||
ctera_plug_c MACH_CTERA_PLUG_C CTERA_PLUG_C 2025
|
||||
crwea_plug_i MACH_CRWEA_PLUG_I CRWEA_PLUG_I 2026
|
||||
egauge2 MACH_EGAUGE2 EGAUGE2 2027
|
||||
didj MACH_DIDJ DIDJ 2028
|
||||
m_s3c2443 MACH_MEISTER MEISTER 2029
|
||||
htcblackstone MACH_HTCBLACKSTONE HTCBLACKSTONE 2030
|
||||
cpuat9g20 MACH_CPUAT9G20 CPUAT9G20 2031
|
||||
smdk6440 MACH_SMDK6440 SMDK6440 2032
|
||||
omap_35xx_mvp MACH_OMAP_35XX_MVP OMAP_35XX_MVP 2033
|
||||
ctera_plug_i MACH_CTERA_PLUG_I CTERA_PLUG_I 2034
|
||||
pvg610_100 MACH_PVG610 PVG610 2035
|
||||
hprw6815 MACH_HPRW6815 HPRW6815 2036
|
||||
omap3_oswald MACH_OMAP3_OSWALD OMAP3_OSWALD 2037
|
||||
nas4220b MACH_NAS4220B NAS4220B 2038
|
||||
htcraphael_cdma MACH_HTCRAPHAEL_CDMA HTCRAPHAEL_CDMA 2039
|
||||
htcdiamond_cdma MACH_HTCDIAMOND_CDMA HTCDIAMOND_CDMA 2040
|
||||
scaler MACH_SCALER SCALER 2041
|
||||
zylonite2 MACH_ZYLONITE2 ZYLONITE2 2042
|
||||
aspenite MACH_ASPENITE ASPENITE 2043
|
||||
teton MACH_TETON TETON 2044
|
||||
ttc_dkb MACH_TTC_DKB TTC_DKB 2045
|
||||
bishop2 MACH_BISHOP2 BISHOP2 2046
|
||||
ippv5 MACH_IPPV5 IPPV5 2047
|
||||
farm926 MACH_FARM926 FARM926 2048
|
||||
mmccpu MACH_MMCCPU MMCCPU 2049
|
||||
sgmsfl MACH_SGMSFL SGMSFL 2050
|
||||
tt8000 MACH_TT8000 TT8000 2051
|
||||
zrn4300lp MACH_ZRN4300LP ZRN4300LP 2052
|
||||
mptc MACH_MPTC MPTC 2053
|
||||
h6051 MACH_H6051 H6051 2054
|
||||
pvg610_101 MACH_PVG610_101 PVG610_101 2055
|
||||
stamp9261_pc_evb MACH_STAMP9261_PC_EVB STAMP9261_PC_EVB 2056
|
||||
pelco_odysseus MACH_PELCO_ODYSSEUS PELCO_ODYSSEUS 2057
|
||||
tny_a9260 MACH_TNY_A9260 TNY_A9260 2058
|
||||
tny_a9g20 MACH_TNY_A9G20 TNY_A9G20 2059
|
||||
aesop_mp2530f MACH_AESOP_MP2530F AESOP_MP2530F 2060
|
||||
dx900 MACH_DX900 DX900 2061
|
||||
cpodc2 MACH_CPODC2 CPODC2 2062
|
||||
tilt_8925 MACH_TILT_8925 TILT_8925 2063
|
||||
davinci_dm357_evm MACH_DAVINCI_DM357_EVM DAVINCI_DM357_EVM 2064
|
||||
swordfish MACH_SWORDFISH SWORDFISH 2065
|
||||
corvus MACH_CORVUS CORVUS 2066
|
||||
taurus MACH_TAURUS TAURUS 2067
|
||||
axm MACH_AXM AXM 2068
|
||||
axc MACH_AXC AXC 2069
|
||||
baby MACH_BABY BABY 2070
|
||||
mp200 MACH_MP200 MP200 2071
|
||||
pcm043 MACH_PCM043 PCM043 2072
|
||||
hanlin_v3c MACH_HANLIN_V3C HANLIN_V3C 2073
|
||||
kbk9g20 MACH_KBK9G20 KBK9G20 2074
|
||||
adsturbog5 MACH_ADSTURBOG5 ADSTURBOG5 2075
|
||||
avenger_lite1 MACH_AVENGER_LITE1 AVENGER_LITE1 2076
|
||||
suc82x MACH_SUC SUC 2077
|
||||
at91sam7s256 MACH_AT91SAM7S256 AT91SAM7S256 2078
|
||||
mendoza MACH_MENDOZA MENDOZA 2079
|
||||
kira MACH_KIRA KIRA 2080
|
||||
mx1hbm MACH_MX1HBM MX1HBM 2081
|
||||
quatro43xx MACH_QUATRO43XX QUATRO43XX 2082
|
||||
quatro4230 MACH_QUATRO4230 QUATRO4230 2083
|
||||
nsb400 MACH_NSB400 NSB400 2084
|
||||
drp255 MACH_DRP255 DRP255 2085
|
||||
thoth MACH_THOTH THOTH 2086
|
||||
firestone MACH_FIRESTONE FIRESTONE 2087
|
||||
asusp750 MACH_ASUSP750 ASUSP750 2088
|
||||
ctera_dl MACH_CTERA_DL CTERA_DL 2089
|
||||
socr MACH_SOCR SOCR 2090
|
||||
htcoxygen MACH_HTCOXYGEN HTCOXYGEN 2091
|
||||
heroc MACH_HEROC HEROC 2092
|
||||
zeno6800 MACH_ZENO6800 ZENO6800 2093
|
||||
sc2mcs MACH_SC2MCS SC2MCS 2094
|
||||
gene100 MACH_GENE100 GENE100 2095
|
||||
as353x MACH_AS353X AS353X 2096
|
||||
sheevaplug MACH_SHEEVAPLUG SHEEVAPLUG 2097
|
||||
at91sam9g20 MACH_AT91SAM9G20 AT91SAM9G20 2098
|
||||
mv88f6192gtw_fe MACH_MV88F6192GTW_FE MV88F6192GTW_FE 2099
|
||||
cc9200 MACH_CC9200 CC9200 2100
|
||||
sm9200 MACH_SM9200 SM9200 2101
|
||||
tp9200 MACH_TP9200 TP9200 2102
|
||||
snapperdv MACH_SNAPPERDV SNAPPERDV 2103
|
||||
avengers_lite MACH_AVENGERS_LITE AVENGERS_LITE 2104
|
||||
avengers_lite1 MACH_AVENGERS_LITE1 AVENGERS_LITE1 2105
|
||||
omap3axon MACH_OMAP3AXON OMAP3AXON 2106
|
||||
ma8xx MACH_MA8XX MA8XX 2107
|
||||
mp201ek MACH_MP201EK MP201EK 2108
|
||||
davinci_tux MACH_DAVINCI_TUX DAVINCI_TUX 2109
|
||||
mpa1600 MACH_MPA1600 MPA1600 2110
|
||||
pelco_troy MACH_PELCO_TROY PELCO_TROY 2111
|
||||
nsb667 MACH_NSB667 NSB667 2112
|
||||
rovers5_4mpix MACH_ROVERS5_4MPIX ROVERS5_4MPIX 2113
|
||||
twocom MACH_TWOCOM TWOCOM 2114
|
||||
ubisys_p9_rcu3r2 MACH_UBISYS_P9_RCU3R2 UBISYS_P9_RCU3R2 2115
|
||||
hero_espresso MACH_HERO_ESPRESSO HERO_ESPRESSO 2116
|
||||
afeusb MACH_AFEUSB AFEUSB 2117
|
||||
t830 MACH_T830 T830 2118
|
||||
spd8020_cc MACH_SPD8020_CC SPD8020_CC 2119
|
||||
om_3d7k MACH_OM_3D7K OM_3D7K 2120
|
||||
picocom2 MACH_PICOCOM2 PICOCOM2 2121
|
||||
uwg4mx27 MACH_UWG4MX27 UWG4MX27 2122
|
||||
uwg4mx31 MACH_UWG4MX31 UWG4MX31 2123
|
||||
cherry MACH_CHERRY CHERRY 2124
|
||||
mx51_babbage MACH_MX51_BABBAGE MX51_BABBAGE 2125
|
||||
s3c2440turkiye MACH_S3C2440TURKIYE S3C2440TURKIYE 2126
|
||||
tx37 MACH_TX37 TX37 2127
|
||||
sbc2800_9g20 MACH_SBC2800_9G20 SBC2800_9G20 2128
|
||||
benzglb MACH_BENZGLB BENZGLB 2129
|
||||
benztd MACH_BENZTD BENZTD 2130
|
||||
cartesio_plus MACH_CARTESIO_PLUS CARTESIO_PLUS 2131
|
||||
solrad_g20 MACH_SOLRAD_G20 SOLRAD_G20 2132
|
||||
mx27wallace MACH_MX27WALLACE MX27WALLACE 2133
|
||||
fmzwebmodul MACH_FMZWEBMODUL FMZWEBMODUL 2134
|
||||
rd78x00_masa MACH_RD78X00_MASA RD78X00_MASA 2135
|
||||
smallogger MACH_SMALLOGGER SMALLOGGER 2136
|
||||
|
|
|
@ -238,8 +238,12 @@ config MIPS_SIM
|
|||
This option enables support for MIPS Technologies MIPSsim software
|
||||
emulator.
|
||||
|
||||
config MACH_EMMA
|
||||
bool "NEC EMMA series based machines"
|
||||
config NEC_MARKEINS
|
||||
bool "NEC EMMA2RH Mark-eins board"
|
||||
select SOC_EMMA2RH
|
||||
select HW_HAS_PCI
|
||||
help
|
||||
This enables support for the NEC Electronics Mark-eins boards.
|
||||
|
||||
config MACH_VR41XX
|
||||
bool "NEC VR4100 series based machines"
|
||||
|
@ -637,7 +641,6 @@ endchoice
|
|||
|
||||
source "arch/mips/alchemy/Kconfig"
|
||||
source "arch/mips/basler/excite/Kconfig"
|
||||
source "arch/mips/emma/Kconfig"
|
||||
source "arch/mips/jazz/Kconfig"
|
||||
source "arch/mips/lasat/Kconfig"
|
||||
source "arch/mips/pmc-sierra/Kconfig"
|
||||
|
@ -895,6 +898,18 @@ config MIPS_RM9122
|
|||
bool
|
||||
select SERIAL_RM9000
|
||||
|
||||
config SOC_EMMA2RH
|
||||
bool
|
||||
select CEVT_R4K
|
||||
select CSRC_R4K
|
||||
select DMA_NONCOHERENT
|
||||
select IRQ_CPU
|
||||
select SWAP_IO_SPACE
|
||||
select SYS_HAS_CPU_R5500
|
||||
select SYS_SUPPORTS_32BIT_KERNEL
|
||||
select SYS_SUPPORTS_64BIT_KERNEL
|
||||
select SYS_SUPPORTS_BIG_ENDIAN
|
||||
|
||||
config SOC_PNX833X
|
||||
bool
|
||||
select CEVT_R4K
|
||||
|
@ -930,11 +945,6 @@ config SOC_PNX8550
|
|||
config SWAP_IO_SPACE
|
||||
bool
|
||||
|
||||
config EMMA2RH
|
||||
bool
|
||||
depends on MARKEINS
|
||||
default y
|
||||
|
||||
config SERIAL_RM9000
|
||||
bool
|
||||
|
||||
|
|
|
@ -416,7 +416,7 @@ load-$(CONFIG_PNX8550_STB810) += 0xffffffff80060000
|
|||
#
|
||||
# Common NEC EMMAXXX
|
||||
#
|
||||
core-$(CONFIG_SOC_EMMA) += arch/mips/emma/common/
|
||||
core-$(CONFIG_SOC_EMMA2RH) += arch/mips/emma/common/
|
||||
cflags-$(CONFIG_SOC_EMMA2RH) += -I$(srctree)/arch/mips/include/asm/mach-emma2rh
|
||||
|
||||
#
|
||||
|
|
|
@ -35,7 +35,7 @@ CONFIG_ZONE_DMA=y
|
|||
# CONFIG_PNX8550_STB810 is not set
|
||||
# CONFIG_MACH_VR41XX is not set
|
||||
# CONFIG_PMC_YOSEMITE is not set
|
||||
CONFIG_MARKEINS=y
|
||||
CONFIG_NEC_MARKEINS=y
|
||||
# CONFIG_SGI_IP22 is not set
|
||||
# CONFIG_SGI_IP27 is not set
|
||||
# CONFIG_SGI_IP32 is not set
|
||||
|
@ -68,7 +68,7 @@ CONFIG_SYS_SUPPORTS_BIG_ENDIAN=y
|
|||
CONFIG_SYS_SUPPORTS_LITTLE_ENDIAN=y
|
||||
CONFIG_IRQ_CPU=y
|
||||
CONFIG_SWAP_IO_SPACE=y
|
||||
CONFIG_EMMA2RH=y
|
||||
CONFIG_SOC_EMMA2RH=y
|
||||
CONFIG_MIPS_L1_CACHE_SHIFT=5
|
||||
|
||||
#
|
||||
|
@ -574,9 +574,9 @@ CONFIG_MTD_CFI_UTIL=y
|
|||
#
|
||||
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
|
||||
CONFIG_MTD_PHYSMAP=y
|
||||
CONFIG_MTD_PHYSMAP_START=0x1e000000
|
||||
CONFIG_MTD_PHYSMAP_LEN=0x02000000
|
||||
CONFIG_MTD_PHYSMAP_BANKWIDTH=2
|
||||
CONFIG_MTD_PHYSMAP_START=0x0
|
||||
CONFIG_MTD_PHYSMAP_LEN=0x0
|
||||
CONFIG_MTD_PHYSMAP_BANKWIDTH=0
|
||||
# CONFIG_MTD_PLATRAM is not set
|
||||
|
||||
#
|
|
@ -1,29 +0,0 @@
|
|||
choice
|
||||
prompt "Machine type"
|
||||
depends on MACH_EMMA
|
||||
default NEC_MARKEINS
|
||||
|
||||
config NEC_MARKEINS
|
||||
bool "NEC EMMA2RH Mark-eins board"
|
||||
select SOC_EMMA2RH
|
||||
select HW_HAS_PCI
|
||||
help
|
||||
This enables support for the NEC Electronics Mark-eins boards.
|
||||
|
||||
endchoice
|
||||
|
||||
config SOC_EMMA2RH
|
||||
bool
|
||||
select SOC_EMMA
|
||||
select SYS_HAS_CPU_R5500
|
||||
select SYS_SUPPORTS_32BIT_KERNEL
|
||||
select SYS_SUPPORTS_64BIT_KERNEL
|
||||
|
||||
config SOC_EMMA
|
||||
bool
|
||||
select CEVT_R4K
|
||||
select CSRC_R4K
|
||||
select DMA_NONCOHERENT
|
||||
select IRQ_CPU
|
||||
select SWAP_IO_SPACE
|
||||
select SYS_SUPPORTS_BIG_ENDIAN
|
|
@ -141,13 +141,6 @@ static struct platform_device serial_emma = {
|
|||
},
|
||||
};
|
||||
|
||||
static struct platform_device *devices[] = {
|
||||
&i2c_emma_devices[0],
|
||||
&i2c_emma_devices[1],
|
||||
&i2c_emma_devices[2],
|
||||
&serial_emma,
|
||||
};
|
||||
|
||||
static struct mtd_partition markeins_parts[] = {
|
||||
[0] = {
|
||||
.name = "RootFS",
|
||||
|
@ -181,11 +174,39 @@ static struct mtd_partition markeins_parts[] = {
|
|||
},
|
||||
};
|
||||
|
||||
static struct physmap_flash_data markeins_flash_data = {
|
||||
.width = 2,
|
||||
.nr_parts = ARRAY_SIZE(markeins_parts),
|
||||
.parts = markeins_parts
|
||||
};
|
||||
|
||||
static struct resource markeins_flash_resource = {
|
||||
.start = 0x1e000000,
|
||||
.end = 0x02000000,
|
||||
.flags = IORESOURCE_MEM
|
||||
};
|
||||
|
||||
static struct platform_device markeins_flash_device = {
|
||||
.name = "physmap-flash",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.platform_data = &markeins_flash_data,
|
||||
},
|
||||
.num_resources = 1,
|
||||
.resource = &markeins_flash_resource,
|
||||
};
|
||||
|
||||
static struct platform_device *devices[] = {
|
||||
i2c_emma_devices,
|
||||
i2c_emma_devices + 1,
|
||||
i2c_emma_devices + 2,
|
||||
&serial_emma,
|
||||
&markeins_flash_device,
|
||||
};
|
||||
|
||||
static int __init platform_devices_setup(void)
|
||||
{
|
||||
physmap_set_partitions(markeins_parts, ARRAY_SIZE(markeins_parts));
|
||||
return platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
}
|
||||
|
||||
arch_initcall(platform_devices_setup);
|
||||
|
||||
|
|
|
@ -15,8 +15,6 @@
|
|||
*/
|
||||
#ifdef CONFIG_MIPS32_O32
|
||||
|
||||
#define TIF_32BIT TIF_32BIT_REGS
|
||||
|
||||
#define __NR_seccomp_read_32 4003
|
||||
#define __NR_seccomp_write_32 4004
|
||||
#define __NR_seccomp_exit_32 4001
|
||||
|
@ -24,8 +22,6 @@
|
|||
|
||||
#elif defined(CONFIG_MIPS32_N32)
|
||||
|
||||
#define TIF_32BIT _TIF_32BIT_ADDR
|
||||
|
||||
#define __NR_seccomp_read_32 6000
|
||||
#define __NR_seccomp_write_32 6001
|
||||
#define __NR_seccomp_exit_32 6058
|
||||
|
|
|
@ -127,6 +127,12 @@ register struct thread_info *__current_thread_info __asm__("$28");
|
|||
#define TIF_LOAD_WATCH 25 /* If set, load watch registers */
|
||||
#define TIF_SYSCALL_TRACE 31 /* syscall trace active */
|
||||
|
||||
#ifdef CONFIG_MIPS32_O32
|
||||
#define TIF_32BIT TIF_32BIT_REGS
|
||||
#elif defined(CONFIG_MIPS32_N32)
|
||||
#define TIF_32BIT _TIF_32BIT_ADDR
|
||||
#endif /* CONFIG_MIPS32_O32 */
|
||||
|
||||
#define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE)
|
||||
#define _TIF_SIGPENDING (1<<TIF_SIGPENDING)
|
||||
#define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.23
|
||||
# Fri Oct 12 21:00:07 2007
|
||||
# Linux kernel version: 2.6.29-rc8
|
||||
# Fri Mar 13 01:32:55 2009
|
||||
#
|
||||
CONFIG_PARISC=y
|
||||
CONFIG_MMU=y
|
||||
|
@ -33,17 +33,35 @@ CONFIG_SYSVIPC_SYSCTL=y
|
|||
CONFIG_POSIX_MQUEUE=y
|
||||
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||
# CONFIG_TASKSTATS is not set
|
||||
# CONFIG_USER_NS is not set
|
||||
# CONFIG_AUDIT is not set
|
||||
|
||||
#
|
||||
# RCU Subsystem
|
||||
#
|
||||
CONFIG_CLASSIC_RCU=y
|
||||
# CONFIG_TREE_RCU is not set
|
||||
# CONFIG_PREEMPT_RCU is not set
|
||||
# CONFIG_TREE_RCU_TRACE is not set
|
||||
# CONFIG_PREEMPT_RCU_TRACE is not set
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_LOG_BUF_SHIFT=16
|
||||
# CONFIG_GROUP_SCHED is not set
|
||||
# CONFIG_CGROUPS is not set
|
||||
CONFIG_SYSFS_DEPRECATED=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
# CONFIG_RELAY is not set
|
||||
CONFIG_NAMESPACES=y
|
||||
# CONFIG_UTS_NS is not set
|
||||
# CONFIG_IPC_NS is not set
|
||||
# CONFIG_USER_NS is not set
|
||||
# CONFIG_PID_NS is not set
|
||||
# CONFIG_NET_NS is not set
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
CONFIG_SYSCTL=y
|
||||
CONFIG_ANON_INODES=y
|
||||
# CONFIG_EMBEDDED is not set
|
||||
CONFIG_SYSCTL_SYSCALL=y
|
||||
CONFIG_KALLSYMS=y
|
||||
|
@ -55,29 +73,38 @@ CONFIG_BUG=y
|
|||
CONFIG_ELF_CORE=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_ANON_INODES=y
|
||||
CONFIG_EPOLL=y
|
||||
CONFIG_SIGNALFD=y
|
||||
CONFIG_TIMERFD=y
|
||||
CONFIG_EVENTFD=y
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_AIO=y
|
||||
CONFIG_VM_EVENT_COUNTERS=y
|
||||
CONFIG_COMPAT_BRK=y
|
||||
CONFIG_SLAB=y
|
||||
# CONFIG_SLUB is not set
|
||||
# CONFIG_SLOB is not set
|
||||
CONFIG_PROFILING=y
|
||||
CONFIG_TRACEPOINTS=y
|
||||
# CONFIG_MARKERS is not set
|
||||
CONFIG_OPROFILE=m
|
||||
CONFIG_HAVE_OPROFILE=y
|
||||
# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
|
||||
CONFIG_SLABINFO=y
|
||||
CONFIG_RT_MUTEXES=y
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
CONFIG_MODULES=y
|
||||
# CONFIG_MODULE_FORCE_LOAD is not set
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_MODULE_FORCE_UNLOAD=y
|
||||
# CONFIG_MODVERSIONS is not set
|
||||
# CONFIG_MODULE_SRCVERSION_ALL is not set
|
||||
CONFIG_KMOD=y
|
||||
CONFIG_INIT_ALL_POSSIBLE=y
|
||||
CONFIG_BLOCK=y
|
||||
# CONFIG_LBD is not set
|
||||
# CONFIG_BLK_DEV_IO_TRACE is not set
|
||||
# CONFIG_LSF is not set
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
# CONFIG_BLK_DEV_INTEGRITY is not set
|
||||
|
||||
#
|
||||
# IO Schedulers
|
||||
|
@ -91,6 +118,7 @@ CONFIG_DEFAULT_AS=y
|
|||
# CONFIG_DEFAULT_CFQ is not set
|
||||
# CONFIG_DEFAULT_NOOP is not set
|
||||
CONFIG_DEFAULT_IOSCHED="anticipatory"
|
||||
# CONFIG_FREEZER is not set
|
||||
|
||||
#
|
||||
# Processor type and features
|
||||
|
@ -114,17 +142,19 @@ CONFIG_HZ_250=y
|
|||
# CONFIG_HZ_300 is not set
|
||||
# CONFIG_HZ_1000 is not set
|
||||
CONFIG_HZ=250
|
||||
# CONFIG_SCHED_HRTICK is not set
|
||||
CONFIG_SELECT_MEMORY_MODEL=y
|
||||
CONFIG_FLATMEM_MANUAL=y
|
||||
# CONFIG_DISCONTIGMEM_MANUAL is not set
|
||||
# CONFIG_SPARSEMEM_MANUAL is not set
|
||||
CONFIG_FLATMEM=y
|
||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||
# CONFIG_SPARSEMEM_STATIC is not set
|
||||
CONFIG_PAGEFLAGS_EXTENDED=y
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4096
|
||||
# CONFIG_RESOURCES_64BIT is not set
|
||||
# CONFIG_PHYS_ADDR_T_64BIT is not set
|
||||
CONFIG_ZONE_DMA_FLAG=0
|
||||
CONFIG_VIRT_TO_BUS=y
|
||||
CONFIG_UNEVICTABLE_LRU=y
|
||||
# CONFIG_HPUX is not set
|
||||
|
||||
#
|
||||
|
@ -138,10 +168,6 @@ CONFIG_GSC_LASI=y
|
|||
# CONFIG_EISA is not set
|
||||
# CONFIG_PCI is not set
|
||||
# CONFIG_ARCH_SUPPORTS_MSI is not set
|
||||
|
||||
#
|
||||
# PCCARD (PCMCIA/CardBus) support
|
||||
#
|
||||
# CONFIG_PCCARD is not set
|
||||
|
||||
#
|
||||
|
@ -156,16 +182,15 @@ CONFIG_PDC_STABLE=y
|
|||
# Executable file formats
|
||||
#
|
||||
CONFIG_BINFMT_ELF=y
|
||||
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
||||
# CONFIG_HAVE_AOUT is not set
|
||||
CONFIG_BINFMT_MISC=m
|
||||
|
||||
#
|
||||
# Networking
|
||||
#
|
||||
CONFIG_NET=y
|
||||
|
||||
#
|
||||
# Networking options
|
||||
#
|
||||
CONFIG_COMPAT_NET_DEV_OPS=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_PACKET_MMAP=y
|
||||
CONFIG_UNIX=y
|
||||
|
@ -173,6 +198,7 @@ CONFIG_XFRM=y
|
|||
CONFIG_XFRM_USER=m
|
||||
# CONFIG_XFRM_SUB_POLICY is not set
|
||||
# CONFIG_XFRM_MIGRATE is not set
|
||||
# CONFIG_XFRM_STATISTICS is not set
|
||||
CONFIG_NET_KEY=m
|
||||
# CONFIG_NET_KEY_MIGRATE is not set
|
||||
CONFIG_INET=y
|
||||
|
@ -203,25 +229,25 @@ CONFIG_INET_TCP_DIAG=m
|
|||
CONFIG_TCP_CONG_CUBIC=y
|
||||
CONFIG_DEFAULT_TCP_CONG="cubic"
|
||||
# CONFIG_TCP_MD5SIG is not set
|
||||
# CONFIG_IP_VS is not set
|
||||
# CONFIG_IPV6 is not set
|
||||
# CONFIG_INET6_XFRM_TUNNEL is not set
|
||||
# CONFIG_INET6_TUNNEL is not set
|
||||
# CONFIG_NETWORK_SECMARK is not set
|
||||
CONFIG_NETFILTER=y
|
||||
# CONFIG_NETFILTER_DEBUG is not set
|
||||
CONFIG_NETFILTER_ADVANCED=y
|
||||
|
||||
#
|
||||
# Core Netfilter Configuration
|
||||
#
|
||||
# CONFIG_NETFILTER_NETLINK is not set
|
||||
# CONFIG_NF_CONNTRACK_ENABLED is not set
|
||||
# CONFIG_NETFILTER_NETLINK_QUEUE is not set
|
||||
# CONFIG_NETFILTER_NETLINK_LOG is not set
|
||||
# CONFIG_NF_CONNTRACK is not set
|
||||
# CONFIG_NETFILTER_XTABLES is not set
|
||||
# CONFIG_IP_VS is not set
|
||||
|
||||
#
|
||||
# IP: Netfilter Configuration
|
||||
#
|
||||
# CONFIG_NF_DEFRAG_IPV4 is not set
|
||||
CONFIG_IP_NF_QUEUE=m
|
||||
# CONFIG_IP_NF_IPTABLES is not set
|
||||
# CONFIG_IP_NF_ARPTABLES is not set
|
||||
|
@ -230,6 +256,7 @@ CONFIG_IP_NF_QUEUE=m
|
|||
# CONFIG_TIPC is not set
|
||||
# CONFIG_ATM is not set
|
||||
# CONFIG_BRIDGE is not set
|
||||
# CONFIG_NET_DSA is not set
|
||||
# CONFIG_VLAN_8021Q is not set
|
||||
# CONFIG_DECNET is not set
|
||||
CONFIG_LLC=m
|
||||
|
@ -240,28 +267,26 @@ CONFIG_LLC2=m
|
|||
# CONFIG_LAPB is not set
|
||||
# CONFIG_ECONET is not set
|
||||
# CONFIG_WAN_ROUTER is not set
|
||||
|
||||
#
|
||||
# QoS and/or fair queueing
|
||||
#
|
||||
# CONFIG_NET_SCHED is not set
|
||||
# CONFIG_DCB is not set
|
||||
|
||||
#
|
||||
# Network testing
|
||||
#
|
||||
CONFIG_NET_PKTGEN=m
|
||||
# CONFIG_HAMRADIO is not set
|
||||
# CONFIG_CAN is not set
|
||||
# CONFIG_IRDA is not set
|
||||
# CONFIG_BT is not set
|
||||
# CONFIG_AF_RXRPC is not set
|
||||
|
||||
#
|
||||
# Wireless
|
||||
#
|
||||
# CONFIG_PHONET is not set
|
||||
CONFIG_WIRELESS=y
|
||||
# CONFIG_CFG80211 is not set
|
||||
CONFIG_WIRELESS_OLD_REGULATORY=y
|
||||
# CONFIG_WIRELESS_EXT is not set
|
||||
# CONFIG_LIB80211 is not set
|
||||
# CONFIG_MAC80211 is not set
|
||||
# CONFIG_IEEE80211 is not set
|
||||
# CONFIG_WIMAX is not set
|
||||
# CONFIG_RFKILL is not set
|
||||
# CONFIG_NET_9P is not set
|
||||
|
||||
|
@ -276,6 +301,8 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
|||
# CONFIG_STANDALONE is not set
|
||||
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
||||
CONFIG_FW_LOADER=y
|
||||
CONFIG_FIRMWARE_IN_KERNEL=y
|
||||
CONFIG_EXTRA_FIRMWARE=""
|
||||
# CONFIG_DEBUG_DRIVER is not set
|
||||
# CONFIG_DEBUG_DEVRES is not set
|
||||
# CONFIG_SYS_HYPERVISOR is not set
|
||||
|
@ -298,11 +325,19 @@ CONFIG_BLK_DEV_CRYPTOLOOP=y
|
|||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_COUNT=16
|
||||
CONFIG_BLK_DEV_RAM_SIZE=6144
|
||||
CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
|
||||
# CONFIG_BLK_DEV_XIP is not set
|
||||
# CONFIG_CDROM_PKTCDVD is not set
|
||||
CONFIG_ATA_OVER_ETH=m
|
||||
# CONFIG_BLK_DEV_HD is not set
|
||||
CONFIG_MISC_DEVICES=y
|
||||
# CONFIG_ENCLOSURE_SERVICES is not set
|
||||
# CONFIG_C2PORT is not set
|
||||
|
||||
#
|
||||
# EEPROM support
|
||||
#
|
||||
# CONFIG_EEPROM_93CX6 is not set
|
||||
CONFIG_HAVE_IDE=y
|
||||
# CONFIG_IDE is not set
|
||||
|
||||
#
|
||||
|
@ -342,14 +377,17 @@ CONFIG_SCSI_SPI_ATTRS=y
|
|||
# CONFIG_SCSI_FC_ATTRS is not set
|
||||
CONFIG_SCSI_ISCSI_ATTRS=m
|
||||
# CONFIG_SCSI_SAS_LIBSAS is not set
|
||||
# CONFIG_SCSI_SRP_ATTRS is not set
|
||||
CONFIG_SCSI_LOWLEVEL=y
|
||||
# CONFIG_ISCSI_TCP is not set
|
||||
# CONFIG_LIBFC is not set
|
||||
# CONFIG_SCSI_PPA is not set
|
||||
# CONFIG_SCSI_IMM is not set
|
||||
CONFIG_SCSI_LASI700=y
|
||||
CONFIG_53C700_LE_ON_BE=y
|
||||
# CONFIG_SCSI_ZALON is not set
|
||||
CONFIG_SCSI_DEBUG=m
|
||||
# CONFIG_SCSI_DH is not set
|
||||
# CONFIG_ATA is not set
|
||||
CONFIG_MD=y
|
||||
CONFIG_BLK_DEV_MD=m
|
||||
|
@ -362,7 +400,6 @@ CONFIG_MD_RAID1=m
|
|||
# CONFIG_MD_FAULTY is not set
|
||||
# CONFIG_BLK_DEV_DM is not set
|
||||
CONFIG_NETDEVICES=y
|
||||
# CONFIG_NETDEVICES_MULTIQUEUE is not set
|
||||
CONFIG_DUMMY=m
|
||||
CONFIG_BONDING=m
|
||||
# CONFIG_MACVLAN is not set
|
||||
|
@ -377,6 +414,9 @@ CONFIG_LASI_82596=y
|
|||
# CONFIG_IBM_NEW_EMAC_RGMII is not set
|
||||
# CONFIG_IBM_NEW_EMAC_TAH is not set
|
||||
# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
|
||||
# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
|
||||
# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
|
||||
# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
|
||||
# CONFIG_B44 is not set
|
||||
# CONFIG_NET_POCKET is not set
|
||||
CONFIG_NETDEV_1000=y
|
||||
|
@ -387,6 +427,11 @@ CONFIG_NETDEV_10000=y
|
|||
#
|
||||
# CONFIG_WLAN_PRE80211 is not set
|
||||
# CONFIG_WLAN_80211 is not set
|
||||
# CONFIG_IWLWIFI_LEDS is not set
|
||||
|
||||
#
|
||||
# Enable WiMAX (Networking options) to see the WiMAX drivers
|
||||
#
|
||||
# CONFIG_WAN is not set
|
||||
# CONFIG_PLIP is not set
|
||||
CONFIG_PPP=m
|
||||
|
@ -401,7 +446,6 @@ CONFIG_PPPOE=m
|
|||
# CONFIG_PPPOL2TP is not set
|
||||
# CONFIG_SLIP is not set
|
||||
CONFIG_SLHC=m
|
||||
# CONFIG_SHAPER is not set
|
||||
# CONFIG_NETCONSOLE is not set
|
||||
# CONFIG_NETPOLL is not set
|
||||
# CONFIG_NET_POLL_CONTROLLER is not set
|
||||
|
@ -423,7 +467,6 @@ CONFIG_INPUT_MOUSEDEV_PSAUX=y
|
|||
CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
|
||||
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
|
||||
# CONFIG_INPUT_JOYDEV is not set
|
||||
# CONFIG_INPUT_TSDEV is not set
|
||||
# CONFIG_INPUT_EVDEV is not set
|
||||
# CONFIG_INPUT_EVBUG is not set
|
||||
|
||||
|
@ -446,8 +489,8 @@ CONFIG_MOUSE_PS2=y
|
|||
CONFIG_MOUSE_PS2_ALPS=y
|
||||
CONFIG_MOUSE_PS2_LOGIPS2PP=y
|
||||
CONFIG_MOUSE_PS2_SYNAPTICS=y
|
||||
CONFIG_MOUSE_PS2_LIFEBOOK=y
|
||||
CONFIG_MOUSE_PS2_TRACKPOINT=y
|
||||
# CONFIG_MOUSE_PS2_ELANTECH is not set
|
||||
# CONFIG_MOUSE_PS2_TOUCHKIT is not set
|
||||
CONFIG_MOUSE_SERIAL=m
|
||||
# CONFIG_MOUSE_VSXXXAA is not set
|
||||
|
@ -474,9 +517,11 @@ CONFIG_SERIO_LIBPS2=y
|
|||
# Character devices
|
||||
#
|
||||
CONFIG_VT=y
|
||||
CONFIG_CONSOLE_TRANSLATIONS=y
|
||||
CONFIG_VT_CONSOLE=y
|
||||
CONFIG_HW_CONSOLE=y
|
||||
# CONFIG_VT_HW_CONSOLE_BINDING is not set
|
||||
CONFIG_DEVKMEM=y
|
||||
# CONFIG_SERIAL_NONSTANDARD is not set
|
||||
|
||||
#
|
||||
|
@ -501,72 +546,76 @@ CONFIG_PDC_CONSOLE=y
|
|||
CONFIG_SERIAL_CORE=y
|
||||
CONFIG_SERIAL_CORE_CONSOLE=y
|
||||
CONFIG_UNIX98_PTYS=y
|
||||
# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
|
||||
CONFIG_LEGACY_PTYS=y
|
||||
CONFIG_LEGACY_PTY_COUNT=64
|
||||
CONFIG_PRINTER=m
|
||||
# CONFIG_LP_CONSOLE is not set
|
||||
CONFIG_PPDEV=m
|
||||
# CONFIG_TIPAR is not set
|
||||
# CONFIG_IPMI_HANDLER is not set
|
||||
# CONFIG_WATCHDOG is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
CONFIG_GEN_RTC=y
|
||||
CONFIG_GEN_RTC_X=y
|
||||
# CONFIG_R3964 is not set
|
||||
CONFIG_RAW_DRIVER=y
|
||||
CONFIG_MAX_RAW_DEVS=256
|
||||
# CONFIG_TCG_TPM is not set
|
||||
# CONFIG_I2C is not set
|
||||
|
||||
#
|
||||
# SPI support
|
||||
#
|
||||
# CONFIG_SPI is not set
|
||||
# CONFIG_SPI_MASTER is not set
|
||||
# CONFIG_W1 is not set
|
||||
# CONFIG_POWER_SUPPLY is not set
|
||||
# CONFIG_HWMON is not set
|
||||
# CONFIG_THERMAL is not set
|
||||
# CONFIG_THERMAL_HWMON is not set
|
||||
# CONFIG_WATCHDOG is not set
|
||||
CONFIG_SSB_POSSIBLE=y
|
||||
|
||||
#
|
||||
# Sonics Silicon Backplane
|
||||
#
|
||||
CONFIG_SSB_POSSIBLE=y
|
||||
# CONFIG_SSB is not set
|
||||
|
||||
#
|
||||
# Multifunction device drivers
|
||||
#
|
||||
# CONFIG_MFD_CORE is not set
|
||||
# CONFIG_MFD_SM501 is not set
|
||||
# CONFIG_HTC_PASIC3 is not set
|
||||
# CONFIG_MFD_TMIO is not set
|
||||
# CONFIG_REGULATOR is not set
|
||||
|
||||
#
|
||||
# Multimedia devices
|
||||
#
|
||||
|
||||
#
|
||||
# Multimedia core support
|
||||
#
|
||||
# CONFIG_VIDEO_DEV is not set
|
||||
# CONFIG_DVB_CORE is not set
|
||||
# CONFIG_VIDEO_MEDIA is not set
|
||||
|
||||
#
|
||||
# Multimedia drivers
|
||||
#
|
||||
# CONFIG_DAB is not set
|
||||
|
||||
#
|
||||
# Graphics support
|
||||
#
|
||||
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
|
||||
|
||||
#
|
||||
# Display device support
|
||||
#
|
||||
# CONFIG_DISPLAY_SUPPORT is not set
|
||||
# CONFIG_VGASTATE is not set
|
||||
CONFIG_VIDEO_OUTPUT_CONTROL=m
|
||||
CONFIG_FB=y
|
||||
# CONFIG_FIRMWARE_EDID is not set
|
||||
# CONFIG_FB_DDC is not set
|
||||
# CONFIG_FB_BOOT_VESA_SUPPORT is not set
|
||||
CONFIG_FB_CFB_FILLRECT=y
|
||||
CONFIG_FB_CFB_COPYAREA=y
|
||||
CONFIG_FB_CFB_IMAGEBLIT=y
|
||||
# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
|
||||
# CONFIG_FB_SYS_FILLRECT is not set
|
||||
# CONFIG_FB_SYS_COPYAREA is not set
|
||||
# CONFIG_FB_SYS_IMAGEBLIT is not set
|
||||
# CONFIG_FB_FOREIGN_ENDIAN is not set
|
||||
# CONFIG_FB_SYS_FOPS is not set
|
||||
CONFIG_FB_DEFERRED_IO=y
|
||||
# CONFIG_FB_SVGALIB is not set
|
||||
# CONFIG_FB_MACMODES is not set
|
||||
# CONFIG_FB_BACKLIGHT is not set
|
||||
|
@ -579,6 +628,14 @@ CONFIG_FB_TILEBLITTING=y
|
|||
CONFIG_FB_STI=y
|
||||
# CONFIG_FB_S1D13XXX is not set
|
||||
# CONFIG_FB_VIRTUAL is not set
|
||||
# CONFIG_FB_METRONOME is not set
|
||||
# CONFIG_FB_MB862XX is not set
|
||||
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
|
||||
|
||||
#
|
||||
# Display device support
|
||||
#
|
||||
# CONFIG_DISPLAY_SUPPORT is not set
|
||||
|
||||
#
|
||||
# Console display driver support
|
||||
|
@ -606,15 +663,8 @@ CONFIG_LOGO=y
|
|||
# CONFIG_LOGO_LINUX_VGA16 is not set
|
||||
# CONFIG_LOGO_LINUX_CLUT224 is not set
|
||||
CONFIG_LOGO_PARISC_CLUT224=y
|
||||
|
||||
#
|
||||
# Sound
|
||||
#
|
||||
CONFIG_SOUND=y
|
||||
|
||||
#
|
||||
# Advanced Linux Sound Architecture
|
||||
#
|
||||
CONFIG_SOUND_OSS_CORE=y
|
||||
CONFIG_SND=y
|
||||
CONFIG_SND_TIMER=y
|
||||
CONFIG_SND_PCM=y
|
||||
|
@ -630,10 +680,7 @@ CONFIG_SND_SUPPORT_OLD_API=y
|
|||
CONFIG_SND_VERBOSE_PROCFS=y
|
||||
# CONFIG_SND_VERBOSE_PRINTK is not set
|
||||
# CONFIG_SND_DEBUG is not set
|
||||
|
||||
#
|
||||
# Generic devices
|
||||
#
|
||||
CONFIG_SND_DRIVERS=y
|
||||
# CONFIG_SND_DUMMY is not set
|
||||
# CONFIG_SND_VIRMIDI is not set
|
||||
# CONFIG_SND_MTPAV is not set
|
||||
|
@ -641,63 +688,82 @@ CONFIG_SND_VERBOSE_PROCFS=y
|
|||
# CONFIG_SND_SERIAL_U16550 is not set
|
||||
# CONFIG_SND_MPU401 is not set
|
||||
# CONFIG_SND_PORTMAN2X4 is not set
|
||||
|
||||
#
|
||||
# GSC devices
|
||||
#
|
||||
CONFIG_SND_GSC=y
|
||||
CONFIG_SND_HARMONY=y
|
||||
|
||||
#
|
||||
# System on Chip audio support
|
||||
#
|
||||
# CONFIG_SND_SOC is not set
|
||||
|
||||
#
|
||||
# SoC Audio support for SuperH
|
||||
#
|
||||
|
||||
#
|
||||
# Open Sound System
|
||||
#
|
||||
# CONFIG_SOUND_PRIME is not set
|
||||
CONFIG_HID_SUPPORT=y
|
||||
CONFIG_HID=y
|
||||
CONFIG_HID_DEBUG=y
|
||||
# CONFIG_HIDRAW is not set
|
||||
# CONFIG_HID_PID is not set
|
||||
|
||||
#
|
||||
# Special HID drivers
|
||||
#
|
||||
CONFIG_HID_COMPAT=y
|
||||
CONFIG_USB_SUPPORT=y
|
||||
# CONFIG_USB_ARCH_HAS_HCD is not set
|
||||
# CONFIG_USB_ARCH_HAS_OHCI is not set
|
||||
# CONFIG_USB_ARCH_HAS_EHCI is not set
|
||||
|
||||
#
|
||||
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
|
||||
# Enable Host or Gadget support to see Inventra options
|
||||
#
|
||||
|
||||
#
|
||||
# USB Gadget Support
|
||||
# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed;
|
||||
#
|
||||
# CONFIG_USB_GADGET is not set
|
||||
|
||||
#
|
||||
# OTG and related infrastructure
|
||||
#
|
||||
# CONFIG_MMC is not set
|
||||
# CONFIG_MEMSTICK is not set
|
||||
# CONFIG_NEW_LEDS is not set
|
||||
# CONFIG_RTC_CLASS is not set
|
||||
# CONFIG_ACCESSIBILITY is not set
|
||||
CONFIG_RTC_LIB=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_HCTOSYS=y
|
||||
CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
|
||||
# CONFIG_RTC_DEBUG is not set
|
||||
|
||||
#
|
||||
# DMA Engine support
|
||||
# RTC interfaces
|
||||
#
|
||||
# CONFIG_DMA_ENGINE is not set
|
||||
CONFIG_RTC_INTF_SYSFS=y
|
||||
CONFIG_RTC_INTF_PROC=y
|
||||
CONFIG_RTC_INTF_DEV=y
|
||||
# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
|
||||
# CONFIG_RTC_DRV_TEST is not set
|
||||
|
||||
#
|
||||
# DMA Clients
|
||||
# SPI RTC drivers
|
||||
#
|
||||
|
||||
#
|
||||
# DMA Devices
|
||||
# Platform RTC drivers
|
||||
#
|
||||
# CONFIG_RTC_DRV_DS1286 is not set
|
||||
# CONFIG_RTC_DRV_DS1511 is not set
|
||||
# CONFIG_RTC_DRV_DS1553 is not set
|
||||
# CONFIG_RTC_DRV_DS1742 is not set
|
||||
# CONFIG_RTC_DRV_STK17TA8 is not set
|
||||
# CONFIG_RTC_DRV_M48T86 is not set
|
||||
# CONFIG_RTC_DRV_M48T35 is not set
|
||||
# CONFIG_RTC_DRV_M48T59 is not set
|
||||
# CONFIG_RTC_DRV_BQ4802 is not set
|
||||
# CONFIG_RTC_DRV_V3020 is not set
|
||||
|
||||
#
|
||||
# on-CPU RTC drivers
|
||||
#
|
||||
CONFIG_RTC_DRV_PARISC=y
|
||||
# CONFIG_DMADEVICES is not set
|
||||
# CONFIG_AUXDISPLAY is not set
|
||||
|
||||
#
|
||||
# Userspace I/O
|
||||
#
|
||||
# CONFIG_UIO is not set
|
||||
# CONFIG_STAGING is not set
|
||||
|
||||
#
|
||||
# File systems
|
||||
|
@ -707,7 +773,7 @@ CONFIG_EXT2_FS=y
|
|||
# CONFIG_EXT2_FS_XIP is not set
|
||||
CONFIG_EXT3_FS=y
|
||||
# CONFIG_EXT3_FS_XATTR is not set
|
||||
# CONFIG_EXT4DEV_FS is not set
|
||||
# CONFIG_EXT4_FS is not set
|
||||
CONFIG_JBD=y
|
||||
# CONFIG_JBD_DEBUG is not set
|
||||
# CONFIG_REISERFS_FS is not set
|
||||
|
@ -717,19 +783,18 @@ CONFIG_JFS_FS=m
|
|||
# CONFIG_JFS_DEBUG is not set
|
||||
# CONFIG_JFS_STATISTICS is not set
|
||||
CONFIG_FS_POSIX_ACL=y
|
||||
CONFIG_FILE_LOCKING=y
|
||||
CONFIG_XFS_FS=m
|
||||
# CONFIG_XFS_QUOTA is not set
|
||||
# CONFIG_XFS_SECURITY is not set
|
||||
# CONFIG_XFS_POSIX_ACL is not set
|
||||
# CONFIG_XFS_RT is not set
|
||||
# CONFIG_GFS2_FS is not set
|
||||
# CONFIG_XFS_DEBUG is not set
|
||||
# CONFIG_OCFS2_FS is not set
|
||||
# CONFIG_MINIX_FS is not set
|
||||
# CONFIG_ROMFS_FS is not set
|
||||
# CONFIG_BTRFS_FS is not set
|
||||
CONFIG_DNOTIFY=y
|
||||
CONFIG_INOTIFY=y
|
||||
CONFIG_INOTIFY_USER=y
|
||||
# CONFIG_QUOTA is not set
|
||||
CONFIG_DNOTIFY=y
|
||||
# CONFIG_AUTOFS_FS is not set
|
||||
CONFIG_AUTOFS4_FS=y
|
||||
# CONFIG_FUSE_FS is not set
|
||||
|
@ -759,16 +824,13 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
|
|||
CONFIG_PROC_FS=y
|
||||
CONFIG_PROC_KCORE=y
|
||||
CONFIG_PROC_SYSCTL=y
|
||||
CONFIG_PROC_PAGE_MONITOR=y
|
||||
CONFIG_SYSFS=y
|
||||
CONFIG_TMPFS=y
|
||||
# CONFIG_TMPFS_POSIX_ACL is not set
|
||||
# CONFIG_HUGETLB_PAGE is not set
|
||||
CONFIG_RAMFS=y
|
||||
# CONFIG_CONFIGFS_FS is not set
|
||||
|
||||
#
|
||||
# Miscellaneous filesystems
|
||||
#
|
||||
CONFIG_MISC_FILESYSTEMS=y
|
||||
# CONFIG_ADFS_FS is not set
|
||||
# CONFIG_AFFS_FS is not set
|
||||
# CONFIG_ECRYPT_FS is not set
|
||||
|
@ -778,35 +840,34 @@ CONFIG_RAMFS=y
|
|||
# CONFIG_BFS_FS is not set
|
||||
# CONFIG_EFS_FS is not set
|
||||
# CONFIG_CRAMFS is not set
|
||||
# CONFIG_SQUASHFS is not set
|
||||
# CONFIG_VXFS_FS is not set
|
||||
# CONFIG_MINIX_FS is not set
|
||||
# CONFIG_OMFS_FS is not set
|
||||
# CONFIG_HPFS_FS is not set
|
||||
# CONFIG_QNX4FS_FS is not set
|
||||
# CONFIG_ROMFS_FS is not set
|
||||
# CONFIG_SYSV_FS is not set
|
||||
CONFIG_UFS_FS=m
|
||||
# CONFIG_UFS_FS_WRITE is not set
|
||||
# CONFIG_UFS_DEBUG is not set
|
||||
|
||||
#
|
||||
# Network File Systems
|
||||
#
|
||||
CONFIG_NETWORK_FILESYSTEMS=y
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V3=y
|
||||
# CONFIG_NFS_V3_ACL is not set
|
||||
CONFIG_NFS_V4=y
|
||||
CONFIG_NFS_DIRECTIO=y
|
||||
CONFIG_ROOT_NFS=y
|
||||
CONFIG_NFSD=m
|
||||
CONFIG_NFSD_V3=y
|
||||
# CONFIG_NFSD_V3_ACL is not set
|
||||
CONFIG_NFSD_V4=y
|
||||
CONFIG_NFSD_TCP=y
|
||||
CONFIG_ROOT_NFS=y
|
||||
CONFIG_LOCKD=y
|
||||
CONFIG_LOCKD_V4=y
|
||||
CONFIG_EXPORTFS=m
|
||||
CONFIG_NFS_COMMON=y
|
||||
CONFIG_SUNRPC=y
|
||||
CONFIG_SUNRPC_GSS=y
|
||||
# CONFIG_SUNRPC_BIND34 is not set
|
||||
# CONFIG_SUNRPC_REGISTER_V4 is not set
|
||||
CONFIG_RPCSEC_GSS_KRB5=y
|
||||
CONFIG_RPCSEC_GSS_SPKM3=m
|
||||
CONFIG_SMB_FS=m
|
||||
|
@ -815,6 +876,7 @@ CONFIG_SMB_NLS_REMOTE="cp437"
|
|||
CONFIG_CIFS=m
|
||||
# CONFIG_CIFS_STATS is not set
|
||||
# CONFIG_CIFS_WEAK_PW_HASH is not set
|
||||
# CONFIG_CIFS_UPCALL is not set
|
||||
# CONFIG_CIFS_XATTR is not set
|
||||
# CONFIG_CIFS_DEBUG2 is not set
|
||||
# CONFIG_CIFS_EXPERIMENTAL is not set
|
||||
|
@ -827,10 +889,6 @@ CONFIG_CIFS=m
|
|||
#
|
||||
# CONFIG_PARTITION_ADVANCED is not set
|
||||
CONFIG_MSDOS_PARTITION=y
|
||||
|
||||
#
|
||||
# Native Language Support
|
||||
#
|
||||
CONFIG_NLS=y
|
||||
CONFIG_NLS_DEFAULT="iso8859-1"
|
||||
CONFIG_NLS_CODEPAGE_437=m
|
||||
|
@ -871,33 +929,28 @@ CONFIG_NLS_ISO8859_15=m
|
|||
CONFIG_NLS_KOI8_R=m
|
||||
CONFIG_NLS_KOI8_U=m
|
||||
CONFIG_NLS_UTF8=m
|
||||
|
||||
#
|
||||
# Distributed Lock Manager
|
||||
#
|
||||
# CONFIG_DLM is not set
|
||||
|
||||
#
|
||||
# Profiling support
|
||||
#
|
||||
CONFIG_PROFILING=y
|
||||
CONFIG_OPROFILE=m
|
||||
|
||||
#
|
||||
# Kernel hacking
|
||||
#
|
||||
# CONFIG_PRINTK_TIME is not set
|
||||
CONFIG_ENABLE_WARN_DEPRECATED=y
|
||||
CONFIG_ENABLE_MUST_CHECK=y
|
||||
CONFIG_FRAME_WARN=1024
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
# CONFIG_UNUSED_SYMBOLS is not set
|
||||
# CONFIG_DEBUG_FS is not set
|
||||
CONFIG_DEBUG_FS=y
|
||||
# CONFIG_HEADERS_CHECK is not set
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
# CONFIG_DEBUG_SHIRQ is not set
|
||||
CONFIG_DETECT_SOFTLOCKUP=y
|
||||
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
|
||||
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
|
||||
CONFIG_SCHED_DEBUG=y
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
# CONFIG_TIMER_STATS is not set
|
||||
# CONFIG_DEBUG_OBJECTS is not set
|
||||
# CONFIG_DEBUG_SLAB is not set
|
||||
# CONFIG_DEBUG_RT_MUTEXES is not set
|
||||
# CONFIG_RT_MUTEX_TESTER is not set
|
||||
|
@ -909,10 +962,32 @@ CONFIG_DEBUG_MUTEXES=y
|
|||
CONFIG_DEBUG_BUGVERBOSE=y
|
||||
# CONFIG_DEBUG_INFO is not set
|
||||
# CONFIG_DEBUG_VM is not set
|
||||
# CONFIG_DEBUG_WRITECOUNT is not set
|
||||
CONFIG_DEBUG_MEMORY_INIT=y
|
||||
# CONFIG_DEBUG_LIST is not set
|
||||
CONFIG_FORCED_INLINING=y
|
||||
# CONFIG_DEBUG_SG is not set
|
||||
# CONFIG_DEBUG_NOTIFIERS is not set
|
||||
# CONFIG_BOOT_PRINTK_DELAY is not set
|
||||
# CONFIG_RCU_TORTURE_TEST is not set
|
||||
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
|
||||
# CONFIG_BACKTRACE_SELF_TEST is not set
|
||||
# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
|
||||
# CONFIG_FAULT_INJECTION is not set
|
||||
# CONFIG_SYSCTL_SYSCALL_CHECK is not set
|
||||
CONFIG_NOP_TRACER=y
|
||||
CONFIG_RING_BUFFER=y
|
||||
CONFIG_TRACING=y
|
||||
|
||||
#
|
||||
# Tracers
|
||||
#
|
||||
# CONFIG_SCHED_TRACER is not set
|
||||
# CONFIG_CONTEXT_SWITCH_TRACER is not set
|
||||
# CONFIG_BOOT_TRACER is not set
|
||||
# CONFIG_TRACE_BRANCH_PROFILING is not set
|
||||
# CONFIG_FTRACE_STARTUP_TEST is not set
|
||||
# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
|
||||
# CONFIG_SAMPLES is not set
|
||||
CONFIG_DEBUG_RODATA=y
|
||||
|
||||
#
|
||||
|
@ -921,57 +996,113 @@ CONFIG_DEBUG_RODATA=y
|
|||
CONFIG_KEYS=y
|
||||
CONFIG_KEYS_DEBUG_PROC_KEYS=y
|
||||
# CONFIG_SECURITY is not set
|
||||
# CONFIG_SECURITYFS is not set
|
||||
# CONFIG_SECURITY_FILE_CAPABILITIES is not set
|
||||
CONFIG_CRYPTO=y
|
||||
|
||||
#
|
||||
# Crypto core or helper
|
||||
#
|
||||
# CONFIG_CRYPTO_FIPS is not set
|
||||
CONFIG_CRYPTO_ALGAPI=y
|
||||
CONFIG_CRYPTO_ALGAPI2=y
|
||||
CONFIG_CRYPTO_AEAD=m
|
||||
CONFIG_CRYPTO_AEAD2=y
|
||||
CONFIG_CRYPTO_BLKCIPHER=y
|
||||
CONFIG_CRYPTO_BLKCIPHER2=y
|
||||
CONFIG_CRYPTO_HASH=y
|
||||
CONFIG_CRYPTO_HASH2=y
|
||||
CONFIG_CRYPTO_RNG2=y
|
||||
CONFIG_CRYPTO_MANAGER=y
|
||||
CONFIG_CRYPTO_MANAGER2=y
|
||||
# CONFIG_CRYPTO_GF128MUL is not set
|
||||
CONFIG_CRYPTO_NULL=m
|
||||
# CONFIG_CRYPTO_CRYPTD is not set
|
||||
CONFIG_CRYPTO_AUTHENC=m
|
||||
CONFIG_CRYPTO_TEST=m
|
||||
|
||||
#
|
||||
# Authenticated Encryption with Associated Data
|
||||
#
|
||||
# CONFIG_CRYPTO_CCM is not set
|
||||
# CONFIG_CRYPTO_GCM is not set
|
||||
# CONFIG_CRYPTO_SEQIV is not set
|
||||
|
||||
#
|
||||
# Block modes
|
||||
#
|
||||
CONFIG_CRYPTO_CBC=y
|
||||
# CONFIG_CRYPTO_CTR is not set
|
||||
# CONFIG_CRYPTO_CTS is not set
|
||||
CONFIG_CRYPTO_ECB=m
|
||||
# CONFIG_CRYPTO_LRW is not set
|
||||
# CONFIG_CRYPTO_PCBC is not set
|
||||
# CONFIG_CRYPTO_XTS is not set
|
||||
|
||||
#
|
||||
# Hash modes
|
||||
#
|
||||
CONFIG_CRYPTO_HMAC=y
|
||||
# CONFIG_CRYPTO_XCBC is not set
|
||||
CONFIG_CRYPTO_NULL=m
|
||||
|
||||
#
|
||||
# Digest
|
||||
#
|
||||
CONFIG_CRYPTO_CRC32C=m
|
||||
CONFIG_CRYPTO_MD4=m
|
||||
CONFIG_CRYPTO_MD5=y
|
||||
CONFIG_CRYPTO_MICHAEL_MIC=m
|
||||
# CONFIG_CRYPTO_RMD128 is not set
|
||||
# CONFIG_CRYPTO_RMD160 is not set
|
||||
# CONFIG_CRYPTO_RMD256 is not set
|
||||
# CONFIG_CRYPTO_RMD320 is not set
|
||||
CONFIG_CRYPTO_SHA1=m
|
||||
CONFIG_CRYPTO_SHA256=m
|
||||
CONFIG_CRYPTO_SHA512=m
|
||||
CONFIG_CRYPTO_WP512=m
|
||||
CONFIG_CRYPTO_TGR192=m
|
||||
# CONFIG_CRYPTO_GF128MUL is not set
|
||||
CONFIG_CRYPTO_ECB=m
|
||||
CONFIG_CRYPTO_CBC=y
|
||||
# CONFIG_CRYPTO_PCBC is not set
|
||||
# CONFIG_CRYPTO_LRW is not set
|
||||
# CONFIG_CRYPTO_XTS is not set
|
||||
# CONFIG_CRYPTO_CRYPTD is not set
|
||||
CONFIG_CRYPTO_DES=y
|
||||
# CONFIG_CRYPTO_FCRYPT is not set
|
||||
CONFIG_CRYPTO_BLOWFISH=m
|
||||
CONFIG_CRYPTO_TWOFISH=m
|
||||
CONFIG_CRYPTO_TWOFISH_COMMON=m
|
||||
CONFIG_CRYPTO_SERPENT=m
|
||||
CONFIG_CRYPTO_WP512=m
|
||||
|
||||
#
|
||||
# Ciphers
|
||||
#
|
||||
CONFIG_CRYPTO_AES=m
|
||||
CONFIG_CRYPTO_ANUBIS=m
|
||||
CONFIG_CRYPTO_ARC4=m
|
||||
CONFIG_CRYPTO_BLOWFISH=m
|
||||
# CONFIG_CRYPTO_CAMELLIA is not set
|
||||
CONFIG_CRYPTO_CAST5=m
|
||||
CONFIG_CRYPTO_CAST6=m
|
||||
CONFIG_CRYPTO_TEA=m
|
||||
CONFIG_CRYPTO_ARC4=m
|
||||
CONFIG_CRYPTO_DES=y
|
||||
# CONFIG_CRYPTO_FCRYPT is not set
|
||||
CONFIG_CRYPTO_KHAZAD=m
|
||||
CONFIG_CRYPTO_ANUBIS=m
|
||||
# CONFIG_CRYPTO_SALSA20 is not set
|
||||
# CONFIG_CRYPTO_SEED is not set
|
||||
CONFIG_CRYPTO_SERPENT=m
|
||||
CONFIG_CRYPTO_TEA=m
|
||||
CONFIG_CRYPTO_TWOFISH=m
|
||||
CONFIG_CRYPTO_TWOFISH_COMMON=m
|
||||
|
||||
#
|
||||
# Compression
|
||||
#
|
||||
CONFIG_CRYPTO_DEFLATE=m
|
||||
CONFIG_CRYPTO_MICHAEL_MIC=m
|
||||
CONFIG_CRYPTO_CRC32C=m
|
||||
# CONFIG_CRYPTO_CAMELLIA is not set
|
||||
CONFIG_CRYPTO_TEST=m
|
||||
# CONFIG_CRYPTO_AUTHENC is not set
|
||||
# CONFIG_CRYPTO_LZO is not set
|
||||
|
||||
#
|
||||
# Random Number Generation
|
||||
#
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
# CONFIG_CRYPTO_HW is not set
|
||||
|
||||
#
|
||||
# Library routines
|
||||
#
|
||||
CONFIG_BITREVERSE=y
|
||||
CONFIG_GENERIC_FIND_LAST_BIT=y
|
||||
CONFIG_CRC_CCITT=m
|
||||
# CONFIG_CRC16 is not set
|
||||
# CONFIG_CRC_ITU_T is not set
|
||||
# CONFIG_CRC_T10DIF is not set
|
||||
CONFIG_CRC_ITU_T=m
|
||||
CONFIG_CRC32=y
|
||||
# CONFIG_CRC7 is not set
|
||||
CONFIG_LIBCRC32C=m
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.23
|
||||
# Fri Oct 12 21:16:46 2007
|
||||
# Linux kernel version: 2.6.29-rc8
|
||||
# Fri Mar 13 01:32:57 2009
|
||||
#
|
||||
CONFIG_PARISC=y
|
||||
CONFIG_MMU=y
|
||||
|
@ -33,13 +33,29 @@ CONFIG_SYSVIPC_SYSCTL=y
|
|||
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||
# CONFIG_TASKSTATS is not set
|
||||
# CONFIG_AUDIT is not set
|
||||
|
||||
#
|
||||
# RCU Subsystem
|
||||
#
|
||||
CONFIG_CLASSIC_RCU=y
|
||||
# CONFIG_TREE_RCU is not set
|
||||
# CONFIG_PREEMPT_RCU is not set
|
||||
# CONFIG_TREE_RCU_TRACE is not set
|
||||
# CONFIG_PREEMPT_RCU_TRACE is not set
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_LOG_BUF_SHIFT=16
|
||||
# CONFIG_CGROUPS is not set
|
||||
CONFIG_SYSFS_DEPRECATED=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
# CONFIG_RELAY is not set
|
||||
CONFIG_NAMESPACES=y
|
||||
# CONFIG_UTS_NS is not set
|
||||
# CONFIG_IPC_NS is not set
|
||||
# CONFIG_BLK_DEV_INITRD is not set
|
||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
CONFIG_SYSCTL=y
|
||||
CONFIG_ANON_INODES=y
|
||||
# CONFIG_EMBEDDED is not set
|
||||
CONFIG_SYSCTL_SYSCALL=y
|
||||
CONFIG_KALLSYMS=y
|
||||
|
@ -51,27 +67,34 @@ CONFIG_BUG=y
|
|||
CONFIG_ELF_CORE=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_ANON_INODES=y
|
||||
CONFIG_EPOLL=y
|
||||
CONFIG_SIGNALFD=y
|
||||
CONFIG_TIMERFD=y
|
||||
CONFIG_EVENTFD=y
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_AIO=y
|
||||
CONFIG_VM_EVENT_COUNTERS=y
|
||||
CONFIG_PCI_QUIRKS=y
|
||||
CONFIG_COMPAT_BRK=y
|
||||
CONFIG_SLAB=y
|
||||
# CONFIG_SLUB is not set
|
||||
# CONFIG_SLOB is not set
|
||||
# CONFIG_PROFILING is not set
|
||||
CONFIG_HAVE_OPROFILE=y
|
||||
# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
|
||||
CONFIG_SLABINFO=y
|
||||
CONFIG_RT_MUTEXES=y
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
CONFIG_MODULES=y
|
||||
# CONFIG_MODULE_FORCE_LOAD is not set
|
||||
# CONFIG_MODULE_UNLOAD is not set
|
||||
CONFIG_MODVERSIONS=y
|
||||
# CONFIG_MODULE_SRCVERSION_ALL is not set
|
||||
# CONFIG_KMOD is not set
|
||||
CONFIG_INIT_ALL_POSSIBLE=y
|
||||
CONFIG_BLOCK=y
|
||||
# CONFIG_LBD is not set
|
||||
# CONFIG_BLK_DEV_IO_TRACE is not set
|
||||
# CONFIG_LSF is not set
|
||||
# CONFIG_BLK_DEV_INTEGRITY is not set
|
||||
|
||||
#
|
||||
# IO Schedulers
|
||||
|
@ -85,6 +108,7 @@ CONFIG_IOSCHED_CFQ=y
|
|||
CONFIG_DEFAULT_CFQ=y
|
||||
# CONFIG_DEFAULT_NOOP is not set
|
||||
CONFIG_DEFAULT_IOSCHED="cfq"
|
||||
# CONFIG_FREEZER is not set
|
||||
|
||||
#
|
||||
# Processor type and features
|
||||
|
@ -108,13 +132,15 @@ CONFIG_HZ_250=y
|
|||
# CONFIG_HZ_300 is not set
|
||||
# CONFIG_HZ_1000 is not set
|
||||
CONFIG_HZ=250
|
||||
# CONFIG_SCHED_HRTICK is not set
|
||||
CONFIG_FLATMEM=y
|
||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||
# CONFIG_SPARSEMEM_STATIC is not set
|
||||
CONFIG_PAGEFLAGS_EXTENDED=y
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4096
|
||||
# CONFIG_RESOURCES_64BIT is not set
|
||||
# CONFIG_PHYS_ADDR_T_64BIT is not set
|
||||
CONFIG_ZONE_DMA_FLAG=0
|
||||
CONFIG_VIRT_TO_BUS=y
|
||||
CONFIG_UNEVICTABLE_LRU=y
|
||||
# CONFIG_HPUX is not set
|
||||
|
||||
#
|
||||
|
@ -130,14 +156,14 @@ CONFIG_EISA_NAMES=y
|
|||
CONFIG_ISA=y
|
||||
CONFIG_PCI=y
|
||||
# CONFIG_ARCH_SUPPORTS_MSI is not set
|
||||
CONFIG_PCI_LEGACY=y
|
||||
# CONFIG_PCI_DEBUG is not set
|
||||
# CONFIG_PCI_STUB is not set
|
||||
CONFIG_GSC_DINO=y
|
||||
# CONFIG_PCI_LBA is not set
|
||||
|
||||
#
|
||||
# PCCARD (PCMCIA/CardBus) support
|
||||
#
|
||||
CONFIG_IOMMU_HELPER=y
|
||||
# CONFIG_PCCARD is not set
|
||||
# CONFIG_HOTPLUG_PCI is not set
|
||||
|
||||
#
|
||||
# PA-RISC specific drivers
|
||||
|
@ -151,16 +177,15 @@ CONFIG_PDC_STABLE=y
|
|||
# Executable file formats
|
||||
#
|
||||
CONFIG_BINFMT_ELF=y
|
||||
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
||||
# CONFIG_HAVE_AOUT is not set
|
||||
# CONFIG_BINFMT_MISC is not set
|
||||
|
||||
#
|
||||
# Networking
|
||||
#
|
||||
CONFIG_NET=y
|
||||
|
||||
#
|
||||
# Networking options
|
||||
#
|
||||
CONFIG_COMPAT_NET_DEV_OPS=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_PACKET_MMAP=y
|
||||
CONFIG_UNIX=y
|
||||
|
@ -205,36 +230,37 @@ CONFIG_INET6_XFRM_MODE_TRANSPORT=y
|
|||
CONFIG_INET6_XFRM_MODE_TUNNEL=y
|
||||
CONFIG_INET6_XFRM_MODE_BEET=y
|
||||
CONFIG_IPV6_SIT=y
|
||||
CONFIG_IPV6_NDISC_NODETYPE=y
|
||||
# CONFIG_IPV6_TUNNEL is not set
|
||||
# CONFIG_NETLABEL is not set
|
||||
# CONFIG_NETWORK_SECMARK is not set
|
||||
# CONFIG_NETFILTER is not set
|
||||
# CONFIG_ATM is not set
|
||||
# CONFIG_BRIDGE is not set
|
||||
# CONFIG_VLAN_8021Q is not set
|
||||
# CONFIG_DECNET is not set
|
||||
# CONFIG_LLC2 is not set
|
||||
# CONFIG_IPX is not set
|
||||
# CONFIG_ATALK is not set
|
||||
|
||||
#
|
||||
# QoS and/or fair queueing
|
||||
#
|
||||
# CONFIG_NET_SCHED is not set
|
||||
# CONFIG_DCB is not set
|
||||
|
||||
#
|
||||
# Network testing
|
||||
#
|
||||
# CONFIG_NET_PKTGEN is not set
|
||||
# CONFIG_HAMRADIO is not set
|
||||
# CONFIG_CAN is not set
|
||||
# CONFIG_IRDA is not set
|
||||
# CONFIG_BT is not set
|
||||
|
||||
#
|
||||
# Wireless
|
||||
#
|
||||
# CONFIG_PHONET is not set
|
||||
CONFIG_WIRELESS=y
|
||||
# CONFIG_CFG80211 is not set
|
||||
CONFIG_WIRELESS_OLD_REGULATORY=y
|
||||
# CONFIG_WIRELESS_EXT is not set
|
||||
# CONFIG_IEEE80211 is not set
|
||||
# CONFIG_LIB80211 is not set
|
||||
# CONFIG_MAC80211 is not set
|
||||
# CONFIG_WIMAX is not set
|
||||
# CONFIG_RFKILL is not set
|
||||
|
||||
#
|
||||
|
@ -247,7 +273,9 @@ CONFIG_IPV6_SIT=y
|
|||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||
CONFIG_STANDALONE=y
|
||||
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
||||
# CONFIG_FW_LOADER is not set
|
||||
CONFIG_FW_LOADER=y
|
||||
CONFIG_FIRMWARE_IN_KERNEL=y
|
||||
CONFIG_EXTRA_FIRMWARE=""
|
||||
# CONFIG_DEBUG_DRIVER is not set
|
||||
# CONFIG_DEBUG_DEVRES is not set
|
||||
# CONFIG_SYS_HYPERVISOR is not set
|
||||
|
@ -275,10 +303,18 @@ CONFIG_BLK_DEV_CRYPTOLOOP=y
|
|||
CONFIG_CDROM_PKTCDVD=m
|
||||
CONFIG_CDROM_PKTCDVD_BUFFERS=8
|
||||
CONFIG_ATA_OVER_ETH=y
|
||||
# CONFIG_BLK_DEV_HD is not set
|
||||
CONFIG_MISC_DEVICES=y
|
||||
# CONFIG_PHANTOM is not set
|
||||
# CONFIG_EEPROM_93CX6 is not set
|
||||
# CONFIG_SGI_IOC4 is not set
|
||||
# CONFIG_ENCLOSURE_SERVICES is not set
|
||||
# CONFIG_HP_ILO is not set
|
||||
|
||||
#
|
||||
# EEPROM support
|
||||
#
|
||||
# CONFIG_EEPROM_93CX6 is not set
|
||||
CONFIG_HAVE_IDE=y
|
||||
# CONFIG_IDE is not set
|
||||
|
||||
#
|
||||
|
@ -317,8 +353,10 @@ CONFIG_SCSI_SPI_ATTRS=y
|
|||
# CONFIG_SCSI_FC_ATTRS is not set
|
||||
# CONFIG_SCSI_ISCSI_ATTRS is not set
|
||||
# CONFIG_SCSI_SAS_LIBSAS is not set
|
||||
# CONFIG_SCSI_SRP_ATTRS is not set
|
||||
CONFIG_SCSI_LOWLEVEL=y
|
||||
# CONFIG_ISCSI_TCP is not set
|
||||
# CONFIG_SCSI_CXGB3_ISCSI is not set
|
||||
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
|
||||
# CONFIG_SCSI_3W_9XXX is not set
|
||||
# CONFIG_SCSI_ACARD is not set
|
||||
|
@ -330,12 +368,15 @@ CONFIG_SCSI_LOWLEVEL=y
|
|||
# CONFIG_SCSI_AIC79XX is not set
|
||||
# CONFIG_SCSI_AIC94XX is not set
|
||||
# CONFIG_SCSI_DPT_I2O is not set
|
||||
# CONFIG_SCSI_ADVANSYS is not set
|
||||
# CONFIG_SCSI_IN2000 is not set
|
||||
# CONFIG_SCSI_ARCMSR is not set
|
||||
# CONFIG_MEGARAID_NEWGEN is not set
|
||||
# CONFIG_MEGARAID_LEGACY is not set
|
||||
# CONFIG_MEGARAID_SAS is not set
|
||||
# CONFIG_SCSI_HPTIOP is not set
|
||||
# CONFIG_LIBFC is not set
|
||||
# CONFIG_FCOE is not set
|
||||
# CONFIG_SCSI_DMX3191D is not set
|
||||
# CONFIG_SCSI_DTC3280 is not set
|
||||
# CONFIG_SCSI_FUTURE_DOMAIN is not set
|
||||
|
@ -346,6 +387,7 @@ CONFIG_SCSI_LOWLEVEL=y
|
|||
# CONFIG_SCSI_INIA100 is not set
|
||||
# CONFIG_SCSI_PPA is not set
|
||||
# CONFIG_SCSI_IMM is not set
|
||||
# CONFIG_SCSI_MVSAS is not set
|
||||
# CONFIG_SCSI_NCR53C406A is not set
|
||||
CONFIG_SCSI_LASI700=y
|
||||
CONFIG_53C700_LE_ON_BE=y
|
||||
|
@ -360,7 +402,6 @@ CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS=8
|
|||
CONFIG_SCSI_NCR53C8XX_MAX_TAGS=32
|
||||
CONFIG_SCSI_NCR53C8XX_SYNC=40
|
||||
# CONFIG_SCSI_PAS16 is not set
|
||||
# CONFIG_SCSI_PSI240I is not set
|
||||
# CONFIG_SCSI_QLOGIC_FAS is not set
|
||||
# CONFIG_SCSI_QLOGIC_1280 is not set
|
||||
# CONFIG_SCSI_QLA_FC is not set
|
||||
|
@ -373,9 +414,11 @@ CONFIG_SCSI_NCR53C8XX_SYNC=40
|
|||
# CONFIG_SCSI_NSP32 is not set
|
||||
# CONFIG_SCSI_DEBUG is not set
|
||||
# CONFIG_SCSI_SRP is not set
|
||||
# CONFIG_SCSI_DH is not set
|
||||
# CONFIG_ATA is not set
|
||||
CONFIG_MD=y
|
||||
CONFIG_BLK_DEV_MD=y
|
||||
CONFIG_MD_AUTODETECT=y
|
||||
CONFIG_MD_LINEAR=y
|
||||
CONFIG_MD_RAID0=y
|
||||
CONFIG_MD_RAID1=y
|
||||
|
@ -383,26 +426,18 @@ CONFIG_MD_RAID1=y
|
|||
# CONFIG_MD_MULTIPATH is not set
|
||||
# CONFIG_MD_FAULTY is not set
|
||||
# CONFIG_BLK_DEV_DM is not set
|
||||
|
||||
#
|
||||
# Fusion MPT device support
|
||||
#
|
||||
# CONFIG_FUSION is not set
|
||||
# CONFIG_FUSION_SPI is not set
|
||||
# CONFIG_FUSION_FC is not set
|
||||
# CONFIG_FUSION_SAS is not set
|
||||
|
||||
#
|
||||
# IEEE 1394 (FireWire) support
|
||||
#
|
||||
|
||||
#
|
||||
# An alternative FireWire stack is available with EXPERIMENTAL=y
|
||||
# A new alternative FireWire stack is available with EXPERIMENTAL=y
|
||||
#
|
||||
# CONFIG_IEEE1394 is not set
|
||||
# CONFIG_I2O is not set
|
||||
CONFIG_NETDEVICES=y
|
||||
# CONFIG_NETDEVICES_MULTIQUEUE is not set
|
||||
# CONFIG_DUMMY is not set
|
||||
# CONFIG_BONDING is not set
|
||||
# CONFIG_EQUALIZER is not set
|
||||
|
@ -434,36 +469,49 @@ CONFIG_TULIP=y
|
|||
# CONFIG_IBM_NEW_EMAC_RGMII is not set
|
||||
# CONFIG_IBM_NEW_EMAC_TAH is not set
|
||||
# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
|
||||
# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
|
||||
# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
|
||||
# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
|
||||
# CONFIG_NET_PCI is not set
|
||||
# CONFIG_B44 is not set
|
||||
# CONFIG_CS89x0 is not set
|
||||
# CONFIG_NET_POCKET is not set
|
||||
# CONFIG_ATL2 is not set
|
||||
CONFIG_NETDEV_1000=y
|
||||
# CONFIG_ACENIC is not set
|
||||
# CONFIG_DL2K is not set
|
||||
# CONFIG_E1000 is not set
|
||||
# CONFIG_E1000E is not set
|
||||
# CONFIG_IGB is not set
|
||||
# CONFIG_NS83820 is not set
|
||||
# CONFIG_HAMACHI is not set
|
||||
# CONFIG_R8169 is not set
|
||||
# CONFIG_SIS190 is not set
|
||||
# CONFIG_SKGE is not set
|
||||
# CONFIG_SKY2 is not set
|
||||
# CONFIG_SK98LIN is not set
|
||||
# CONFIG_VIA_VELOCITY is not set
|
||||
# CONFIG_TIGON3 is not set
|
||||
# CONFIG_BNX2 is not set
|
||||
# CONFIG_QLA3XXX is not set
|
||||
# CONFIG_ATL1 is not set
|
||||
# CONFIG_JME is not set
|
||||
CONFIG_NETDEV_10000=y
|
||||
# CONFIG_CHELSIO_T1 is not set
|
||||
CONFIG_CHELSIO_T3_DEPENDS=y
|
||||
# CONFIG_CHELSIO_T3 is not set
|
||||
# CONFIG_ENIC is not set
|
||||
# CONFIG_IXGBE is not set
|
||||
# CONFIG_IXGB is not set
|
||||
# CONFIG_S2IO is not set
|
||||
# CONFIG_MYRI10GE is not set
|
||||
# CONFIG_NETXEN_NIC is not set
|
||||
# CONFIG_NIU is not set
|
||||
# CONFIG_MLX4_EN is not set
|
||||
# CONFIG_MLX4_CORE is not set
|
||||
# CONFIG_TEHUTI is not set
|
||||
# CONFIG_BNX2X is not set
|
||||
# CONFIG_QLGE is not set
|
||||
# CONFIG_SFC is not set
|
||||
# CONFIG_TR is not set
|
||||
|
||||
#
|
||||
|
@ -471,6 +519,11 @@ CONFIG_NETDEV_10000=y
|
|||
#
|
||||
# CONFIG_WLAN_PRE80211 is not set
|
||||
# CONFIG_WLAN_80211 is not set
|
||||
# CONFIG_IWLWIFI_LEDS is not set
|
||||
|
||||
#
|
||||
# Enable WiMAX (Networking options) to see the WiMAX drivers
|
||||
#
|
||||
# CONFIG_WAN is not set
|
||||
# CONFIG_FDDI is not set
|
||||
# CONFIG_PLIP is not set
|
||||
|
@ -503,7 +556,6 @@ CONFIG_INPUT_MOUSEDEV_PSAUX=y
|
|||
CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
|
||||
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
|
||||
# CONFIG_INPUT_JOYDEV is not set
|
||||
# CONFIG_INPUT_TSDEV is not set
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
# CONFIG_INPUT_EVBUG is not set
|
||||
|
||||
|
@ -526,11 +578,12 @@ CONFIG_MOUSE_PS2=y
|
|||
CONFIG_MOUSE_PS2_ALPS=y
|
||||
CONFIG_MOUSE_PS2_LOGIPS2PP=y
|
||||
CONFIG_MOUSE_PS2_SYNAPTICS=y
|
||||
CONFIG_MOUSE_PS2_LIFEBOOK=y
|
||||
CONFIG_MOUSE_PS2_TRACKPOINT=y
|
||||
# CONFIG_MOUSE_PS2_ELANTECH is not set
|
||||
# CONFIG_MOUSE_PS2_TOUCHKIT is not set
|
||||
# CONFIG_MOUSE_SERIAL is not set
|
||||
# CONFIG_MOUSE_APPLETOUCH is not set
|
||||
# CONFIG_MOUSE_BCM5974 is not set
|
||||
# CONFIG_MOUSE_INPORT is not set
|
||||
# CONFIG_MOUSE_LOGIBM is not set
|
||||
# CONFIG_MOUSE_PC110PAD is not set
|
||||
|
@ -564,9 +617,11 @@ CONFIG_SERIO_LIBPS2=y
|
|||
# Character devices
|
||||
#
|
||||
CONFIG_VT=y
|
||||
CONFIG_CONSOLE_TRANSLATIONS=y
|
||||
CONFIG_VT_CONSOLE=y
|
||||
CONFIG_HW_CONSOLE=y
|
||||
# CONFIG_VT_HW_CONSOLE_BINDING is not set
|
||||
CONFIG_DEVKMEM=y
|
||||
# CONFIG_SERIAL_NONSTANDARD is not set
|
||||
|
||||
#
|
||||
|
@ -598,75 +653,79 @@ CONFIG_SERIAL_CORE=y
|
|||
CONFIG_SERIAL_CORE_CONSOLE=y
|
||||
# CONFIG_SERIAL_JSM is not set
|
||||
CONFIG_UNIX98_PTYS=y
|
||||
# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
|
||||
CONFIG_LEGACY_PTYS=y
|
||||
CONFIG_LEGACY_PTY_COUNT=256
|
||||
CONFIG_PRINTER=y
|
||||
# CONFIG_LP_CONSOLE is not set
|
||||
# CONFIG_PPDEV is not set
|
||||
# CONFIG_TIPAR is not set
|
||||
# CONFIG_IPMI_HANDLER is not set
|
||||
# CONFIG_WATCHDOG is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
CONFIG_GEN_RTC=y
|
||||
# CONFIG_GEN_RTC_X is not set
|
||||
# CONFIG_DTLK is not set
|
||||
# CONFIG_R3964 is not set
|
||||
# CONFIG_APPLICOM is not set
|
||||
# CONFIG_AGP is not set
|
||||
# CONFIG_DRM is not set
|
||||
# CONFIG_RAW_DRIVER is not set
|
||||
CONFIG_DEVPORT=y
|
||||
# CONFIG_I2C is not set
|
||||
|
||||
#
|
||||
# SPI support
|
||||
#
|
||||
# CONFIG_SPI is not set
|
||||
# CONFIG_SPI_MASTER is not set
|
||||
# CONFIG_W1 is not set
|
||||
# CONFIG_POWER_SUPPLY is not set
|
||||
# CONFIG_HWMON is not set
|
||||
# CONFIG_THERMAL is not set
|
||||
# CONFIG_THERMAL_HWMON is not set
|
||||
# CONFIG_WATCHDOG is not set
|
||||
CONFIG_SSB_POSSIBLE=y
|
||||
|
||||
#
|
||||
# Sonics Silicon Backplane
|
||||
#
|
||||
CONFIG_SSB_POSSIBLE=y
|
||||
# CONFIG_SSB is not set
|
||||
|
||||
#
|
||||
# Multifunction device drivers
|
||||
#
|
||||
# CONFIG_MFD_CORE is not set
|
||||
# CONFIG_MFD_SM501 is not set
|
||||
# CONFIG_HTC_PASIC3 is not set
|
||||
# CONFIG_MFD_TMIO is not set
|
||||
# CONFIG_REGULATOR is not set
|
||||
|
||||
#
|
||||
# Multimedia devices
|
||||
#
|
||||
|
||||
#
|
||||
# Multimedia core support
|
||||
#
|
||||
# CONFIG_VIDEO_DEV is not set
|
||||
# CONFIG_DVB_CORE is not set
|
||||
# CONFIG_VIDEO_MEDIA is not set
|
||||
|
||||
#
|
||||
# Multimedia drivers
|
||||
#
|
||||
# CONFIG_DAB is not set
|
||||
|
||||
#
|
||||
# Graphics support
|
||||
#
|
||||
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
|
||||
|
||||
#
|
||||
# Display device support
|
||||
#
|
||||
# CONFIG_DISPLAY_SUPPORT is not set
|
||||
# CONFIG_AGP is not set
|
||||
# CONFIG_DRM is not set
|
||||
# CONFIG_VGASTATE is not set
|
||||
CONFIG_VIDEO_OUTPUT_CONTROL=m
|
||||
CONFIG_FB=y
|
||||
# CONFIG_FIRMWARE_EDID is not set
|
||||
# CONFIG_FB_DDC is not set
|
||||
# CONFIG_FB_BOOT_VESA_SUPPORT is not set
|
||||
CONFIG_FB_CFB_FILLRECT=y
|
||||
CONFIG_FB_CFB_COPYAREA=y
|
||||
CONFIG_FB_CFB_IMAGEBLIT=y
|
||||
# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
|
||||
# CONFIG_FB_SYS_FILLRECT is not set
|
||||
# CONFIG_FB_SYS_COPYAREA is not set
|
||||
# CONFIG_FB_SYS_IMAGEBLIT is not set
|
||||
# CONFIG_FB_FOREIGN_ENDIAN is not set
|
||||
# CONFIG_FB_SYS_FOPS is not set
|
||||
CONFIG_FB_DEFERRED_IO=y
|
||||
# CONFIG_FB_SVGALIB is not set
|
||||
# CONFIG_FB_MACMODES is not set
|
||||
# CONFIG_FB_BACKLIGHT is not set
|
||||
|
@ -691,6 +750,7 @@ CONFIG_FB_STI=y
|
|||
# CONFIG_FB_ATY is not set
|
||||
# CONFIG_FB_S3 is not set
|
||||
# CONFIG_FB_SIS is not set
|
||||
# CONFIG_FB_VIA is not set
|
||||
# CONFIG_FB_NEOMAGIC is not set
|
||||
# CONFIG_FB_KYRO is not set
|
||||
# CONFIG_FB_3DFX is not set
|
||||
|
@ -698,7 +758,16 @@ CONFIG_FB_STI=y
|
|||
# CONFIG_FB_VT8623 is not set
|
||||
# CONFIG_FB_TRIDENT is not set
|
||||
# CONFIG_FB_ARK is not set
|
||||
# CONFIG_FB_CARMINE is not set
|
||||
# CONFIG_FB_VIRTUAL is not set
|
||||
# CONFIG_FB_METRONOME is not set
|
||||
# CONFIG_FB_MB862XX is not set
|
||||
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
|
||||
|
||||
#
|
||||
# Display device support
|
||||
#
|
||||
# CONFIG_DISPLAY_SUPPORT is not set
|
||||
|
||||
#
|
||||
# Console display driver support
|
||||
|
@ -718,15 +787,8 @@ CONFIG_LOGO_LINUX_MONO=y
|
|||
CONFIG_LOGO_LINUX_VGA16=y
|
||||
CONFIG_LOGO_LINUX_CLUT224=y
|
||||
CONFIG_LOGO_PARISC_CLUT224=y
|
||||
|
||||
#
|
||||
# Sound
|
||||
#
|
||||
CONFIG_SOUND=y
|
||||
|
||||
#
|
||||
# Advanced Linux Sound Architecture
|
||||
#
|
||||
CONFIG_SOUND_OSS_CORE=y
|
||||
CONFIG_SND=y
|
||||
CONFIG_SND_TIMER=y
|
||||
CONFIG_SND_PCM=y
|
||||
|
@ -742,10 +804,7 @@ CONFIG_SND_SUPPORT_OLD_API=y
|
|||
CONFIG_SND_VERBOSE_PROCFS=y
|
||||
# CONFIG_SND_VERBOSE_PRINTK is not set
|
||||
# CONFIG_SND_DEBUG is not set
|
||||
|
||||
#
|
||||
# Generic devices
|
||||
#
|
||||
CONFIG_SND_DRIVERS=y
|
||||
# CONFIG_SND_DUMMY is not set
|
||||
# CONFIG_SND_VIRMIDI is not set
|
||||
# CONFIG_SND_MTPAV is not set
|
||||
|
@ -753,10 +812,7 @@ CONFIG_SND_VERBOSE_PROCFS=y
|
|||
# CONFIG_SND_SERIAL_U16550 is not set
|
||||
# CONFIG_SND_MPU401 is not set
|
||||
# CONFIG_SND_PORTMAN2X4 is not set
|
||||
|
||||
#
|
||||
# PCI devices
|
||||
#
|
||||
CONFIG_SND_PCI=y
|
||||
# CONFIG_SND_AD1889 is not set
|
||||
# CONFIG_SND_ALS300 is not set
|
||||
# CONFIG_SND_ALI5451 is not set
|
||||
|
@ -765,9 +821,11 @@ CONFIG_SND_VERBOSE_PROCFS=y
|
|||
# CONFIG_SND_AU8810 is not set
|
||||
# CONFIG_SND_AU8820 is not set
|
||||
# CONFIG_SND_AU8830 is not set
|
||||
# CONFIG_SND_AW2 is not set
|
||||
# CONFIG_SND_BT87X is not set
|
||||
# CONFIG_SND_CA0106 is not set
|
||||
# CONFIG_SND_CMIPCI is not set
|
||||
# CONFIG_SND_OXYGEN is not set
|
||||
# CONFIG_SND_CS4281 is not set
|
||||
# CONFIG_SND_CS46XX is not set
|
||||
# CONFIG_SND_DARLA20 is not set
|
||||
|
@ -792,6 +850,7 @@ CONFIG_SND_VERBOSE_PROCFS=y
|
|||
# CONFIG_SND_HDA_INTEL is not set
|
||||
# CONFIG_SND_HDSP is not set
|
||||
# CONFIG_SND_HDSPM is not set
|
||||
# CONFIG_SND_HIFIER is not set
|
||||
# CONFIG_SND_ICE1712 is not set
|
||||
# CONFIG_SND_ICE1724 is not set
|
||||
# CONFIG_SND_INTEL8X0 is not set
|
||||
|
@ -809,30 +868,23 @@ CONFIG_SND_VERBOSE_PROCFS=y
|
|||
# CONFIG_SND_TRIDENT is not set
|
||||
# CONFIG_SND_VIA82XX is not set
|
||||
# CONFIG_SND_VIA82XX_MODEM is not set
|
||||
# CONFIG_SND_VIRTUOSO is not set
|
||||
# CONFIG_SND_VX222 is not set
|
||||
# CONFIG_SND_YMFPCI is not set
|
||||
|
||||
#
|
||||
# GSC devices
|
||||
#
|
||||
CONFIG_SND_GSC=y
|
||||
CONFIG_SND_HARMONY=y
|
||||
|
||||
#
|
||||
# System on Chip audio support
|
||||
#
|
||||
# CONFIG_SND_SOC is not set
|
||||
|
||||
#
|
||||
# SoC Audio support for SuperH
|
||||
#
|
||||
|
||||
#
|
||||
# Open Sound System
|
||||
#
|
||||
# CONFIG_SOUND_PRIME is not set
|
||||
CONFIG_HID_SUPPORT=y
|
||||
CONFIG_HID=y
|
||||
CONFIG_HID_DEBUG=y
|
||||
# CONFIG_HIDRAW is not set
|
||||
# CONFIG_HID_PID is not set
|
||||
|
||||
#
|
||||
# Special HID drivers
|
||||
#
|
||||
CONFIG_HID_COMPAT=y
|
||||
CONFIG_USB_SUPPORT=y
|
||||
CONFIG_USB_ARCH_HAS_HCD=y
|
||||
CONFIG_USB_ARCH_HAS_OHCI=y
|
||||
|
@ -840,36 +892,63 @@ CONFIG_USB_ARCH_HAS_EHCI=y
|
|||
# CONFIG_USB is not set
|
||||
|
||||
#
|
||||
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
|
||||
# Enable Host or Gadget support to see Inventra options
|
||||
#
|
||||
|
||||
#
|
||||
# USB Gadget Support
|
||||
# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed;
|
||||
#
|
||||
# CONFIG_USB_GADGET is not set
|
||||
|
||||
#
|
||||
# OTG and related infrastructure
|
||||
#
|
||||
# CONFIG_MMC is not set
|
||||
# CONFIG_MEMSTICK is not set
|
||||
# CONFIG_NEW_LEDS is not set
|
||||
# CONFIG_ACCESSIBILITY is not set
|
||||
# CONFIG_INFINIBAND is not set
|
||||
# CONFIG_RTC_CLASS is not set
|
||||
CONFIG_RTC_LIB=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_HCTOSYS=y
|
||||
CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
|
||||
# CONFIG_RTC_DEBUG is not set
|
||||
|
||||
#
|
||||
# DMA Engine support
|
||||
# RTC interfaces
|
||||
#
|
||||
# CONFIG_DMA_ENGINE is not set
|
||||
CONFIG_RTC_INTF_SYSFS=y
|
||||
CONFIG_RTC_INTF_PROC=y
|
||||
CONFIG_RTC_INTF_DEV=y
|
||||
# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
|
||||
# CONFIG_RTC_DRV_TEST is not set
|
||||
|
||||
#
|
||||
# DMA Clients
|
||||
# SPI RTC drivers
|
||||
#
|
||||
|
||||
#
|
||||
# DMA Devices
|
||||
# Platform RTC drivers
|
||||
#
|
||||
# CONFIG_RTC_DRV_DS1286 is not set
|
||||
# CONFIG_RTC_DRV_DS1511 is not set
|
||||
# CONFIG_RTC_DRV_DS1553 is not set
|
||||
# CONFIG_RTC_DRV_DS1742 is not set
|
||||
# CONFIG_RTC_DRV_STK17TA8 is not set
|
||||
# CONFIG_RTC_DRV_M48T86 is not set
|
||||
# CONFIG_RTC_DRV_M48T35 is not set
|
||||
# CONFIG_RTC_DRV_M48T59 is not set
|
||||
# CONFIG_RTC_DRV_BQ4802 is not set
|
||||
# CONFIG_RTC_DRV_V3020 is not set
|
||||
|
||||
#
|
||||
# on-CPU RTC drivers
|
||||
#
|
||||
CONFIG_RTC_DRV_PARISC=y
|
||||
# CONFIG_DMADEVICES is not set
|
||||
# CONFIG_AUXDISPLAY is not set
|
||||
|
||||
#
|
||||
# Userspace I/O
|
||||
#
|
||||
# CONFIG_UIO is not set
|
||||
# CONFIG_STAGING is not set
|
||||
|
||||
#
|
||||
# File systems
|
||||
|
@ -879,19 +958,18 @@ CONFIG_EXT2_FS=y
|
|||
# CONFIG_EXT2_FS_XIP is not set
|
||||
CONFIG_EXT3_FS=y
|
||||
# CONFIG_EXT3_FS_XATTR is not set
|
||||
# CONFIG_EXT4_FS is not set
|
||||
CONFIG_JBD=y
|
||||
# CONFIG_JBD_DEBUG is not set
|
||||
# CONFIG_REISERFS_FS is not set
|
||||
# CONFIG_JFS_FS is not set
|
||||
# CONFIG_FS_POSIX_ACL is not set
|
||||
CONFIG_FILE_LOCKING=y
|
||||
# CONFIG_XFS_FS is not set
|
||||
# CONFIG_OCFS2_FS is not set
|
||||
# CONFIG_MINIX_FS is not set
|
||||
# CONFIG_ROMFS_FS is not set
|
||||
CONFIG_DNOTIFY=y
|
||||
CONFIG_INOTIFY=y
|
||||
CONFIG_INOTIFY_USER=y
|
||||
# CONFIG_QUOTA is not set
|
||||
CONFIG_DNOTIFY=y
|
||||
# CONFIG_AUTOFS_FS is not set
|
||||
CONFIG_AUTOFS4_FS=y
|
||||
# CONFIG_FUSE_FS is not set
|
||||
|
@ -917,35 +995,32 @@ CONFIG_JOLIET=y
|
|||
CONFIG_PROC_FS=y
|
||||
CONFIG_PROC_KCORE=y
|
||||
CONFIG_PROC_SYSCTL=y
|
||||
CONFIG_PROC_PAGE_MONITOR=y
|
||||
CONFIG_SYSFS=y
|
||||
CONFIG_TMPFS=y
|
||||
# CONFIG_TMPFS_POSIX_ACL is not set
|
||||
# CONFIG_HUGETLB_PAGE is not set
|
||||
CONFIG_RAMFS=y
|
||||
|
||||
#
|
||||
# Miscellaneous filesystems
|
||||
#
|
||||
# CONFIG_CONFIGFS_FS is not set
|
||||
CONFIG_MISC_FILESYSTEMS=y
|
||||
# CONFIG_HFSPLUS_FS is not set
|
||||
# CONFIG_CRAMFS is not set
|
||||
# CONFIG_SQUASHFS is not set
|
||||
# CONFIG_VXFS_FS is not set
|
||||
# CONFIG_MINIX_FS is not set
|
||||
# CONFIG_OMFS_FS is not set
|
||||
# CONFIG_HPFS_FS is not set
|
||||
# CONFIG_QNX4FS_FS is not set
|
||||
# CONFIG_ROMFS_FS is not set
|
||||
# CONFIG_SYSV_FS is not set
|
||||
# CONFIG_UFS_FS is not set
|
||||
|
||||
#
|
||||
# Network File Systems
|
||||
#
|
||||
CONFIG_NETWORK_FILESYSTEMS=y
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V3=y
|
||||
# CONFIG_NFS_V3_ACL is not set
|
||||
# CONFIG_NFS_DIRECTIO is not set
|
||||
CONFIG_ROOT_NFS=y
|
||||
CONFIG_NFSD=y
|
||||
CONFIG_NFSD_V3=y
|
||||
# CONFIG_NFSD_V3_ACL is not set
|
||||
CONFIG_NFSD_TCP=y
|
||||
CONFIG_ROOT_NFS=y
|
||||
CONFIG_LOCKD=y
|
||||
CONFIG_LOCKD_V4=y
|
||||
CONFIG_EXPORTFS=y
|
||||
|
@ -962,10 +1037,6 @@ CONFIG_SMB_FS=y
|
|||
#
|
||||
# CONFIG_PARTITION_ADVANCED is not set
|
||||
CONFIG_MSDOS_PARTITION=y
|
||||
|
||||
#
|
||||
# Native Language Support
|
||||
#
|
||||
CONFIG_NLS=y
|
||||
CONFIG_NLS_DEFAULT="iso8859-1"
|
||||
CONFIG_NLS_CODEPAGE_437=m
|
||||
|
@ -1011,7 +1082,9 @@ CONFIG_NLS_UTF8=m
|
|||
# Kernel hacking
|
||||
#
|
||||
# CONFIG_PRINTK_TIME is not set
|
||||
CONFIG_ENABLE_WARN_DEPRECATED=y
|
||||
CONFIG_ENABLE_MUST_CHECK=y
|
||||
CONFIG_FRAME_WARN=1024
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
# CONFIG_UNUSED_SYMBOLS is not set
|
||||
# CONFIG_DEBUG_FS is not set
|
||||
|
@ -1019,9 +1092,12 @@ CONFIG_HEADERS_CHECK=y
|
|||
CONFIG_DEBUG_KERNEL=y
|
||||
# CONFIG_DEBUG_SHIRQ is not set
|
||||
CONFIG_DETECT_SOFTLOCKUP=y
|
||||
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
|
||||
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
|
||||
CONFIG_SCHED_DEBUG=y
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
# CONFIG_TIMER_STATS is not set
|
||||
# CONFIG_DEBUG_OBJECTS is not set
|
||||
# CONFIG_DEBUG_SLAB is not set
|
||||
# CONFIG_DEBUG_RT_MUTEXES is not set
|
||||
# CONFIG_RT_MUTEX_TESTER is not set
|
||||
|
@ -1033,10 +1109,29 @@ CONFIG_SCHED_DEBUG=y
|
|||
CONFIG_DEBUG_BUGVERBOSE=y
|
||||
# CONFIG_DEBUG_INFO is not set
|
||||
# CONFIG_DEBUG_VM is not set
|
||||
# CONFIG_DEBUG_WRITECOUNT is not set
|
||||
CONFIG_DEBUG_MEMORY_INIT=y
|
||||
# CONFIG_DEBUG_LIST is not set
|
||||
CONFIG_FORCED_INLINING=y
|
||||
# CONFIG_DEBUG_SG is not set
|
||||
# CONFIG_DEBUG_NOTIFIERS is not set
|
||||
# CONFIG_BOOT_PRINTK_DELAY is not set
|
||||
# CONFIG_RCU_TORTURE_TEST is not set
|
||||
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
|
||||
# CONFIG_BACKTRACE_SELF_TEST is not set
|
||||
# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
|
||||
# CONFIG_FAULT_INJECTION is not set
|
||||
# CONFIG_SYSCTL_SYSCALL_CHECK is not set
|
||||
|
||||
#
|
||||
# Tracers
|
||||
#
|
||||
# CONFIG_SCHED_TRACER is not set
|
||||
# CONFIG_CONTEXT_SWITCH_TRACER is not set
|
||||
# CONFIG_BOOT_TRACER is not set
|
||||
# CONFIG_TRACE_BRANCH_PROFILING is not set
|
||||
# CONFIG_BUILD_DOCSRC is not set
|
||||
# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
|
||||
# CONFIG_SAMPLES is not set
|
||||
# CONFIG_DEBUG_RODATA is not set
|
||||
|
||||
#
|
||||
|
@ -1044,52 +1139,108 @@ CONFIG_FORCED_INLINING=y
|
|||
#
|
||||
# CONFIG_KEYS is not set
|
||||
CONFIG_SECURITY=y
|
||||
# CONFIG_SECURITYFS is not set
|
||||
# CONFIG_SECURITY_NETWORK is not set
|
||||
CONFIG_SECURITY_CAPABILITIES=y
|
||||
# CONFIG_SECURITY_PATH is not set
|
||||
# CONFIG_SECURITY_FILE_CAPABILITIES is not set
|
||||
CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR=0
|
||||
CONFIG_CRYPTO=y
|
||||
|
||||
#
|
||||
# Crypto core or helper
|
||||
#
|
||||
# CONFIG_CRYPTO_FIPS is not set
|
||||
CONFIG_CRYPTO_ALGAPI=y
|
||||
CONFIG_CRYPTO_ALGAPI2=y
|
||||
CONFIG_CRYPTO_AEAD2=y
|
||||
CONFIG_CRYPTO_BLKCIPHER=y
|
||||
CONFIG_CRYPTO_BLKCIPHER2=y
|
||||
CONFIG_CRYPTO_HASH2=y
|
||||
CONFIG_CRYPTO_RNG2=y
|
||||
CONFIG_CRYPTO_MANAGER=y
|
||||
# CONFIG_CRYPTO_HMAC is not set
|
||||
CONFIG_CRYPTO_MANAGER2=y
|
||||
# CONFIG_CRYPTO_NULL is not set
|
||||
# CONFIG_CRYPTO_CRYPTD is not set
|
||||
# CONFIG_CRYPTO_AUTHENC is not set
|
||||
# CONFIG_CRYPTO_TEST is not set
|
||||
|
||||
#
|
||||
# Authenticated Encryption with Associated Data
|
||||
#
|
||||
# CONFIG_CRYPTO_CCM is not set
|
||||
# CONFIG_CRYPTO_GCM is not set
|
||||
# CONFIG_CRYPTO_SEQIV is not set
|
||||
|
||||
#
|
||||
# Block modes
|
||||
#
|
||||
CONFIG_CRYPTO_CBC=y
|
||||
# CONFIG_CRYPTO_CTR is not set
|
||||
# CONFIG_CRYPTO_CTS is not set
|
||||
# CONFIG_CRYPTO_ECB is not set
|
||||
# CONFIG_CRYPTO_PCBC is not set
|
||||
|
||||
#
|
||||
# Hash modes
|
||||
#
|
||||
# CONFIG_CRYPTO_HMAC is not set
|
||||
|
||||
#
|
||||
# Digest
|
||||
#
|
||||
# CONFIG_CRYPTO_CRC32C is not set
|
||||
# CONFIG_CRYPTO_MD4 is not set
|
||||
# CONFIG_CRYPTO_MD5 is not set
|
||||
# CONFIG_CRYPTO_MICHAEL_MIC is not set
|
||||
# CONFIG_CRYPTO_RMD128 is not set
|
||||
# CONFIG_CRYPTO_RMD160 is not set
|
||||
# CONFIG_CRYPTO_RMD256 is not set
|
||||
# CONFIG_CRYPTO_RMD320 is not set
|
||||
# CONFIG_CRYPTO_SHA1 is not set
|
||||
# CONFIG_CRYPTO_SHA256 is not set
|
||||
# CONFIG_CRYPTO_SHA512 is not set
|
||||
# CONFIG_CRYPTO_WP512 is not set
|
||||
# CONFIG_CRYPTO_TGR192 is not set
|
||||
# CONFIG_CRYPTO_ECB is not set
|
||||
CONFIG_CRYPTO_CBC=y
|
||||
# CONFIG_CRYPTO_PCBC is not set
|
||||
# CONFIG_CRYPTO_CRYPTD is not set
|
||||
# CONFIG_CRYPTO_DES is not set
|
||||
# CONFIG_CRYPTO_FCRYPT is not set
|
||||
# CONFIG_CRYPTO_BLOWFISH is not set
|
||||
# CONFIG_CRYPTO_TWOFISH is not set
|
||||
# CONFIG_CRYPTO_SERPENT is not set
|
||||
# CONFIG_CRYPTO_WP512 is not set
|
||||
|
||||
#
|
||||
# Ciphers
|
||||
#
|
||||
# CONFIG_CRYPTO_AES is not set
|
||||
# CONFIG_CRYPTO_ANUBIS is not set
|
||||
# CONFIG_CRYPTO_ARC4 is not set
|
||||
# CONFIG_CRYPTO_BLOWFISH is not set
|
||||
# CONFIG_CRYPTO_CAMELLIA is not set
|
||||
# CONFIG_CRYPTO_CAST5 is not set
|
||||
# CONFIG_CRYPTO_CAST6 is not set
|
||||
# CONFIG_CRYPTO_TEA is not set
|
||||
# CONFIG_CRYPTO_ARC4 is not set
|
||||
# CONFIG_CRYPTO_DES is not set
|
||||
# CONFIG_CRYPTO_FCRYPT is not set
|
||||
# CONFIG_CRYPTO_KHAZAD is not set
|
||||
# CONFIG_CRYPTO_ANUBIS is not set
|
||||
# CONFIG_CRYPTO_SEED is not set
|
||||
# CONFIG_CRYPTO_SERPENT is not set
|
||||
# CONFIG_CRYPTO_TEA is not set
|
||||
# CONFIG_CRYPTO_TWOFISH is not set
|
||||
|
||||
#
|
||||
# Compression
|
||||
#
|
||||
# CONFIG_CRYPTO_DEFLATE is not set
|
||||
# CONFIG_CRYPTO_MICHAEL_MIC is not set
|
||||
# CONFIG_CRYPTO_CRC32C is not set
|
||||
# CONFIG_CRYPTO_CAMELLIA is not set
|
||||
# CONFIG_CRYPTO_TEST is not set
|
||||
# CONFIG_CRYPTO_AUTHENC is not set
|
||||
# CONFIG_CRYPTO_LZO is not set
|
||||
|
||||
#
|
||||
# Random Number Generation
|
||||
#
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
CONFIG_CRYPTO_HW=y
|
||||
# CONFIG_CRYPTO_DEV_HIFN_795X is not set
|
||||
|
||||
#
|
||||
# Library routines
|
||||
#
|
||||
CONFIG_BITREVERSE=y
|
||||
CONFIG_GENERIC_FIND_LAST_BIT=y
|
||||
# CONFIG_CRC_CCITT is not set
|
||||
# CONFIG_CRC16 is not set
|
||||
# CONFIG_CRC_T10DIF is not set
|
||||
# CONFIG_CRC_ITU_T is not set
|
||||
CONFIG_CRC32=y
|
||||
# CONFIG_CRC7 is not set
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -137,7 +137,6 @@ int hpux_getdents(unsigned int fd, struct hpux_dirent __user *dirent, unsigned i
|
|||
error = count - buf.count;
|
||||
}
|
||||
|
||||
out_putf:
|
||||
fput(file);
|
||||
out:
|
||||
return error;
|
||||
|
|
|
@ -79,6 +79,7 @@
|
|||
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <asm/page.h>
|
||||
#include <asm/types.h>
|
||||
|
||||
#include <asm/asmregs.h>
|
||||
|
||||
|
@ -129,27 +130,27 @@
|
|||
|
||||
/* Shift Left - note the r and t can NOT be the same! */
|
||||
.macro shl r, sa, t
|
||||
dep,z \r, 31-\sa, 32-\sa, \t
|
||||
dep,z \r, 31-(\sa), 32-(\sa), \t
|
||||
.endm
|
||||
|
||||
/* The PA 2.0 shift left */
|
||||
.macro shlw r, sa, t
|
||||
depw,z \r, 31-\sa, 32-\sa, \t
|
||||
depw,z \r, 31-(\sa), 32-(\sa), \t
|
||||
.endm
|
||||
|
||||
/* And the PA 2.0W shift left */
|
||||
.macro shld r, sa, t
|
||||
depd,z \r, 63-\sa, 64-\sa, \t
|
||||
depd,z \r, 63-(\sa), 64-(\sa), \t
|
||||
.endm
|
||||
|
||||
/* Shift Right - note the r and t can NOT be the same! */
|
||||
.macro shr r, sa, t
|
||||
extru \r, 31-\sa, 32-\sa, \t
|
||||
extru \r, 31-(\sa), 32-(\sa), \t
|
||||
.endm
|
||||
|
||||
/* pa20w version of shift right */
|
||||
.macro shrd r, sa, t
|
||||
extrd,u \r, 63-\sa, 64-\sa, \t
|
||||
extrd,u \r, 63-(\sa), 64-(\sa), \t
|
||||
.endm
|
||||
|
||||
/* load 32-bit 'value' into 'reg' compensating for the ldil
|
||||
|
|
|
@ -174,15 +174,48 @@ static inline void __raw_writeq(unsigned long long b, volatile void __iomem *add
|
|||
*(volatile unsigned long long __force *) addr = b;
|
||||
}
|
||||
|
||||
/* readb can never be const, so use __fswab instead of le*_to_cpu */
|
||||
#define readb(addr) __raw_readb(addr)
|
||||
#define readw(addr) le16_to_cpu(__raw_readw(addr))
|
||||
#define readl(addr) le32_to_cpu(__raw_readl(addr))
|
||||
#define readq(addr) le64_to_cpu(__raw_readq(addr))
|
||||
#define writeb(b, addr) __raw_writeb(b, addr)
|
||||
#define writew(b, addr) __raw_writew(cpu_to_le16(b), addr)
|
||||
#define writel(b, addr) __raw_writel(cpu_to_le32(b), addr)
|
||||
#define writeq(b, addr) __raw_writeq(cpu_to_le64(b), addr)
|
||||
static inline unsigned char readb(const volatile void __iomem *addr)
|
||||
{
|
||||
return __raw_readb(addr);
|
||||
}
|
||||
static inline unsigned short readw(const volatile void __iomem *addr)
|
||||
{
|
||||
return le16_to_cpu(__raw_readw(addr));
|
||||
}
|
||||
static inline unsigned int readl(const volatile void __iomem *addr)
|
||||
{
|
||||
return le32_to_cpu(__raw_readl(addr));
|
||||
}
|
||||
static inline unsigned long long readq(const volatile void __iomem *addr)
|
||||
{
|
||||
return le64_to_cpu(__raw_readq(addr));
|
||||
}
|
||||
|
||||
static inline void writeb(unsigned char b, volatile void __iomem *addr)
|
||||
{
|
||||
__raw_writeb(b, addr);
|
||||
}
|
||||
static inline void writew(unsigned short w, volatile void __iomem *addr)
|
||||
{
|
||||
__raw_writew(cpu_to_le16(w), addr);
|
||||
}
|
||||
static inline void writel(unsigned int l, volatile void __iomem *addr)
|
||||
{
|
||||
__raw_writel(cpu_to_le32(l), addr);
|
||||
}
|
||||
static inline void writeq(unsigned long long q, volatile void __iomem *addr)
|
||||
{
|
||||
__raw_writeq(cpu_to_le64(q), addr);
|
||||
}
|
||||
|
||||
#define readb readb
|
||||
#define readw readw
|
||||
#define readl readl
|
||||
#define readq readq
|
||||
#define writeb writeb
|
||||
#define writew writew
|
||||
#define writel writel
|
||||
#define writeq writeq
|
||||
|
||||
#define readb_relaxed(addr) readb(addr)
|
||||
#define readw_relaxed(addr) readw(addr)
|
||||
|
|
|
@ -49,7 +49,7 @@ extern unsigned long txn_alloc_addr(unsigned int);
|
|||
extern unsigned long txn_affinity_addr(unsigned int irq, int cpu);
|
||||
|
||||
extern int cpu_claim_irq(unsigned int irq, struct irq_chip *, void *);
|
||||
extern int cpu_check_affinity(unsigned int irq, cpumask_t *dest);
|
||||
extern int cpu_check_affinity(unsigned int irq, const struct cpumask *dest);
|
||||
|
||||
/* soft power switch support (power.c) */
|
||||
extern struct tasklet_struct power_tasklet;
|
||||
|
|
|
@ -241,6 +241,7 @@ unsigned long copy_in_user(void __user *dst, const void __user *src, unsigned lo
|
|||
#define __copy_to_user_inatomic __copy_to_user
|
||||
#define __copy_from_user_inatomic __copy_from_user
|
||||
|
||||
struct pt_regs;
|
||||
int fixup_exception(struct pt_regs *regs);
|
||||
|
||||
#endif /* __PARISC_UACCESS_H */
|
||||
|
|
|
@ -551,10 +551,7 @@ void flush_cache_range(struct vm_area_struct *vma,
|
|||
{
|
||||
int sr3;
|
||||
|
||||
if (!vma->vm_mm->context) {
|
||||
BUG();
|
||||
return;
|
||||
}
|
||||
BUG_ON(!vma->vm_mm->context);
|
||||
|
||||
sr3 = mfsp(3);
|
||||
if (vma->vm_mm->context == sr3) {
|
||||
|
|
|
@ -368,7 +368,7 @@
|
|||
* abstractions for the macros */
|
||||
.macro EXTR reg1,start,length,reg2
|
||||
#ifdef CONFIG_64BIT
|
||||
extrd,u \reg1,32+\start,\length,\reg2
|
||||
extrd,u \reg1,32+(\start),\length,\reg2
|
||||
#else
|
||||
extrw,u \reg1,\start,\length,\reg2
|
||||
#endif
|
||||
|
@ -376,7 +376,7 @@
|
|||
|
||||
.macro DEP reg1,start,length,reg2
|
||||
#ifdef CONFIG_64BIT
|
||||
depd \reg1,32+\start,\length,\reg2
|
||||
depd \reg1,32+(\start),\length,\reg2
|
||||
#else
|
||||
depw \reg1,\start,\length,\reg2
|
||||
#endif
|
||||
|
@ -384,7 +384,7 @@
|
|||
|
||||
.macro DEPI val,start,length,reg
|
||||
#ifdef CONFIG_64BIT
|
||||
depdi \val,32+\start,\length,\reg
|
||||
depdi \val,32+(\start),\length,\reg
|
||||
#else
|
||||
depwi \val,\start,\length,\reg
|
||||
#endif
|
||||
|
|
|
@ -151,7 +151,7 @@ static void convert_to_wide(unsigned long *addr)
|
|||
}
|
||||
|
||||
#ifdef CONFIG_64BIT
|
||||
void __init set_firmware_width_unlocked(void)
|
||||
void __cpuinit set_firmware_width_unlocked(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
|
@ -168,7 +168,7 @@ void __init set_firmware_width_unlocked(void)
|
|||
* This function must be called before any pdc_* function that uses the
|
||||
* convert_to_wide function.
|
||||
*/
|
||||
void __init set_firmware_width(void)
|
||||
void __cpuinit set_firmware_width(void)
|
||||
{
|
||||
unsigned long flags;
|
||||
spin_lock_irqsave(&pdc_lock, flags);
|
||||
|
@ -176,11 +176,11 @@ void __init set_firmware_width(void)
|
|||
spin_unlock_irqrestore(&pdc_lock, flags);
|
||||
}
|
||||
#else
|
||||
void __init set_firmware_width_unlocked(void) {
|
||||
void __cpuinit set_firmware_width_unlocked(void) {
|
||||
return;
|
||||
}
|
||||
|
||||
void __init set_firmware_width(void) {
|
||||
void __cpuinit set_firmware_width(void) {
|
||||
return;
|
||||
}
|
||||
#endif /*CONFIG_64BIT*/
|
||||
|
@ -302,7 +302,7 @@ int pdc_chassis_warn(unsigned long *warn)
|
|||
return retval;
|
||||
}
|
||||
|
||||
int __init pdc_coproc_cfg_unlocked(struct pdc_coproc_cfg *pdc_coproc_info)
|
||||
int __cpuinit pdc_coproc_cfg_unlocked(struct pdc_coproc_cfg *pdc_coproc_info)
|
||||
{
|
||||
int ret;
|
||||
|
||||
|
@ -323,7 +323,7 @@ int __init pdc_coproc_cfg_unlocked(struct pdc_coproc_cfg *pdc_coproc_info)
|
|||
* This PDC call returns the presence and status of all the coprocessors
|
||||
* attached to the processor.
|
||||
*/
|
||||
int __init pdc_coproc_cfg(struct pdc_coproc_cfg *pdc_coproc_info)
|
||||
int __cpuinit pdc_coproc_cfg(struct pdc_coproc_cfg *pdc_coproc_info)
|
||||
{
|
||||
int ret;
|
||||
unsigned long flags;
|
||||
|
|
|
@ -112,7 +112,7 @@ void cpu_end_irq(unsigned int irq)
|
|||
}
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
int cpu_check_affinity(unsigned int irq, cpumask_t *dest)
|
||||
int cpu_check_affinity(unsigned int irq, const struct cpumask *dest)
|
||||
{
|
||||
int cpu_dest;
|
||||
|
||||
|
@ -120,23 +120,25 @@ int cpu_check_affinity(unsigned int irq, cpumask_t *dest)
|
|||
if (CHECK_IRQ_PER_CPU(irq)) {
|
||||
/* Bad linux design decision. The mask has already
|
||||
* been set; we must reset it */
|
||||
irq_desc[irq].affinity = CPU_MASK_ALL;
|
||||
cpumask_setall(&irq_desc[irq].affinity);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* whatever mask they set, we just allow one CPU */
|
||||
cpu_dest = first_cpu(*dest);
|
||||
*dest = cpumask_of_cpu(cpu_dest);
|
||||
|
||||
return 0;
|
||||
return cpu_dest;
|
||||
}
|
||||
|
||||
static void cpu_set_affinity_irq(unsigned int irq, const struct cpumask *dest)
|
||||
{
|
||||
if (cpu_check_affinity(irq, dest))
|
||||
int cpu_dest;
|
||||
|
||||
cpu_dest = cpu_check_affinity(irq, dest);
|
||||
if (cpu_dest < 0)
|
||||
return;
|
||||
|
||||
irq_desc[irq].affinity = *dest;
|
||||
cpumask_copy(&irq_desc[irq].affinity, &cpumask_of_cpu(cpu_dest));
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -295,7 +297,7 @@ int txn_alloc_irq(unsigned int bits_wide)
|
|||
unsigned long txn_affinity_addr(unsigned int irq, int cpu)
|
||||
{
|
||||
#ifdef CONFIG_SMP
|
||||
irq_desc[irq].affinity = cpumask_of_cpu(cpu);
|
||||
cpumask_copy(&irq_desc[irq].affinity, cpumask_of(cpu));
|
||||
#endif
|
||||
|
||||
return per_cpu(cpu_data, cpu).txn_addr;
|
||||
|
@ -352,7 +354,7 @@ void do_cpu_irq_mask(struct pt_regs *regs)
|
|||
irq = eirr_to_irq(eirr_val);
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
dest = irq_desc[irq].affinity;
|
||||
cpumask_copy(&dest, &irq_desc[irq].affinity);
|
||||
if (CHECK_IRQ_PER_CPU(irq_desc[irq].status) &&
|
||||
!cpu_isset(smp_processor_id(), dest)) {
|
||||
int cpu = first_cpu(dest);
|
||||
|
|
|
@ -447,10 +447,7 @@ static void pa11_dma_free_consistent (struct device *dev, size_t size, void *vad
|
|||
|
||||
static dma_addr_t pa11_dma_map_single(struct device *dev, void *addr, size_t size, enum dma_data_direction direction)
|
||||
{
|
||||
if (direction == DMA_NONE) {
|
||||
printk(KERN_ERR "pa11_dma_map_single(PCI_DMA_NONE) called by %p\n", __builtin_return_address(0));
|
||||
BUG();
|
||||
}
|
||||
BUG_ON(direction == DMA_NONE);
|
||||
|
||||
flush_kernel_dcache_range((unsigned long) addr, size);
|
||||
return virt_to_phys(addr);
|
||||
|
@ -458,10 +455,7 @@ static dma_addr_t pa11_dma_map_single(struct device *dev, void *addr, size_t siz
|
|||
|
||||
static void pa11_dma_unmap_single(struct device *dev, dma_addr_t dma_handle, size_t size, enum dma_data_direction direction)
|
||||
{
|
||||
if (direction == DMA_NONE) {
|
||||
printk(KERN_ERR "pa11_dma_unmap_single(PCI_DMA_NONE) called by %p\n", __builtin_return_address(0));
|
||||
BUG();
|
||||
}
|
||||
BUG_ON(direction == DMA_NONE);
|
||||
|
||||
if (direction == DMA_TO_DEVICE)
|
||||
return;
|
||||
|
@ -480,8 +474,7 @@ static int pa11_dma_map_sg(struct device *dev, struct scatterlist *sglist, int n
|
|||
{
|
||||
int i;
|
||||
|
||||
if (direction == DMA_NONE)
|
||||
BUG();
|
||||
BUG_ON(direction == DMA_NONE);
|
||||
|
||||
for (i = 0; i < nents; i++, sglist++ ) {
|
||||
unsigned long vaddr = sg_virt_addr(sglist);
|
||||
|
@ -496,8 +489,7 @@ static void pa11_dma_unmap_sg(struct device *dev, struct scatterlist *sglist, in
|
|||
{
|
||||
int i;
|
||||
|
||||
if (direction == DMA_NONE)
|
||||
BUG();
|
||||
BUG_ON(direction == DMA_NONE);
|
||||
|
||||
if (direction == DMA_TO_DEVICE)
|
||||
return;
|
||||
|
@ -511,16 +503,14 @@ static void pa11_dma_unmap_sg(struct device *dev, struct scatterlist *sglist, in
|
|||
|
||||
static void pa11_dma_sync_single_for_cpu(struct device *dev, dma_addr_t dma_handle, unsigned long offset, size_t size, enum dma_data_direction direction)
|
||||
{
|
||||
if (direction == DMA_NONE)
|
||||
BUG();
|
||||
BUG_ON(direction == DMA_NONE);
|
||||
|
||||
flush_kernel_dcache_range((unsigned long) phys_to_virt(dma_handle) + offset, size);
|
||||
}
|
||||
|
||||
static void pa11_dma_sync_single_for_device(struct device *dev, dma_addr_t dma_handle, unsigned long offset, size_t size, enum dma_data_direction direction)
|
||||
{
|
||||
if (direction == DMA_NONE)
|
||||
BUG();
|
||||
BUG_ON(direction == DMA_NONE);
|
||||
|
||||
flush_kernel_dcache_range((unsigned long) phys_to_virt(dma_handle) + offset, size);
|
||||
}
|
||||
|
|
|
@ -304,10 +304,8 @@ static void __init setup_bootmem(void)
|
|||
*/
|
||||
max_low_pfn = max_pfn;
|
||||
|
||||
if ((bootmap_pfn - bootmap_start_pfn) != bootmap_pages) {
|
||||
printk(KERN_WARNING "WARNING! bootmap sizing is messed up!\n");
|
||||
BUG();
|
||||
}
|
||||
/* bootmap sizing messed up? */
|
||||
BUG_ON((bootmap_pfn - bootmap_start_pfn) != bootmap_pages);
|
||||
|
||||
/* reserve PAGE0 pdc memory, kernel text/data/bss & bootmap */
|
||||
|
||||
|
|
|
@ -241,9 +241,11 @@ extern const char *powerpc_base_platform;
|
|||
/* We need to mark all pages as being coherent if we're SMP or we have a
|
||||
* 74[45]x and an MPC107 host bridge. Also 83xx and PowerQUICC II
|
||||
* require it for PCI "streaming/prefetch" to work properly.
|
||||
* This is also required by 52xx family.
|
||||
*/
|
||||
#if defined(CONFIG_SMP) || defined(CONFIG_MPC10X_BRIDGE) \
|
||||
|| defined(CONFIG_PPC_83xx) || defined(CONFIG_8260)
|
||||
|| defined(CONFIG_PPC_83xx) || defined(CONFIG_8260) \
|
||||
|| defined(CONFIG_PPC_MPC52xx)
|
||||
#define CPU_FTR_COMMON CPU_FTR_NEED_COHERENT
|
||||
#else
|
||||
#define CPU_FTR_COMMON 0
|
||||
|
|
|
@ -511,7 +511,7 @@ InstructionTLBMiss:
|
|||
and r1,r1,r2 /* writable if _RW and _DIRTY */
|
||||
rlwimi r3,r3,32-1,30,30 /* _PAGE_USER -> PP msb */
|
||||
rlwimi r3,r3,32-1,31,31 /* _PAGE_USER -> PP lsb */
|
||||
ori r1,r1,0xe14 /* clear out reserved bits and M */
|
||||
ori r1,r1,0xe04 /* clear out reserved bits */
|
||||
andc r1,r3,r1 /* PP = user? (rw&dirty? 2: 3): 0 */
|
||||
mtspr SPRN_RPA,r1
|
||||
mfspr r3,SPRN_IMISS
|
||||
|
@ -585,7 +585,7 @@ DataLoadTLBMiss:
|
|||
and r1,r1,r2 /* writable if _RW and _DIRTY */
|
||||
rlwimi r3,r3,32-1,30,30 /* _PAGE_USER -> PP msb */
|
||||
rlwimi r3,r3,32-1,31,31 /* _PAGE_USER -> PP lsb */
|
||||
ori r1,r1,0xe14 /* clear out reserved bits and M */
|
||||
ori r1,r1,0xe04 /* clear out reserved bits */
|
||||
andc r1,r3,r1 /* PP = user? (rw&dirty? 2: 3): 0 */
|
||||
mtspr SPRN_RPA,r1
|
||||
mfspr r3,SPRN_DMISS
|
||||
|
@ -653,7 +653,7 @@ DataStoreTLBMiss:
|
|||
stw r3,0(r2) /* update PTE (accessed/dirty bits) */
|
||||
/* Convert linux-style PTE to low word of PPC-style PTE */
|
||||
rlwimi r3,r3,32-1,30,30 /* _PAGE_USER -> PP msb */
|
||||
li r1,0xe15 /* clear out reserved bits and M */
|
||||
li r1,0xe05 /* clear out reserved bits & PP lsb */
|
||||
andc r1,r3,r1 /* PP = user? 2: 0 */
|
||||
mtspr SPRN_RPA,r1
|
||||
mfspr r3,SPRN_DMISS
|
||||
|
|
|
@ -1289,6 +1289,39 @@ static const int *__devinit piix_init_sata_map(struct pci_dev *pdev,
|
|||
return map;
|
||||
}
|
||||
|
||||
static bool piix_no_sidpr(struct ata_host *host)
|
||||
{
|
||||
struct pci_dev *pdev = to_pci_dev(host->dev);
|
||||
|
||||
/*
|
||||
* Samsung DB-P70 only has three ATA ports exposed and
|
||||
* curiously the unconnected first port reports link online
|
||||
* while not responding to SRST protocol causing excessive
|
||||
* detection delay.
|
||||
*
|
||||
* Unfortunately, the system doesn't carry enough DMI
|
||||
* information to identify the machine but does have subsystem
|
||||
* vendor and device set. As it's unclear whether the
|
||||
* subsystem vendor/device is used only for this specific
|
||||
* board, the port can't be disabled solely with the
|
||||
* information; however, turning off SIDPR access works around
|
||||
* the problem. Turn it off.
|
||||
*
|
||||
* This problem is reported in bnc#441240.
|
||||
*
|
||||
* https://bugzilla.novell.com/show_bug.cgi?id=441420
|
||||
*/
|
||||
if (pdev->vendor == PCI_VENDOR_ID_INTEL && pdev->device == 0x2920 &&
|
||||
pdev->subsystem_vendor == PCI_VENDOR_ID_SAMSUNG &&
|
||||
pdev->subsystem_device == 0xb049) {
|
||||
dev_printk(KERN_WARNING, host->dev,
|
||||
"Samsung DB-P70 detected, disabling SIDPR\n");
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static int __devinit piix_init_sidpr(struct ata_host *host)
|
||||
{
|
||||
struct pci_dev *pdev = to_pci_dev(host->dev);
|
||||
|
@ -1302,6 +1335,10 @@ static int __devinit piix_init_sidpr(struct ata_host *host)
|
|||
if (hpriv->map[i] == IDE)
|
||||
return 0;
|
||||
|
||||
/* is it blacklisted? */
|
||||
if (piix_no_sidpr(host))
|
||||
return 0;
|
||||
|
||||
if (!(host->ports[0]->flags & PIIX_FLAG_SIDPR))
|
||||
return 0;
|
||||
|
||||
|
|
|
@ -2066,6 +2066,7 @@ static int ata_bus_softreset(struct ata_port *ap, unsigned int devmask,
|
|||
iowrite8(ap->ctl | ATA_SRST, ioaddr->ctl_addr);
|
||||
udelay(20); /* FIXME: flush */
|
||||
iowrite8(ap->ctl, ioaddr->ctl_addr);
|
||||
ap->last_ctl = ap->ctl;
|
||||
|
||||
/* wait the port to become ready */
|
||||
return ata_sff_wait_after_reset(&ap->link, devmask, deadline);
|
||||
|
@ -2190,8 +2191,10 @@ void ata_sff_postreset(struct ata_link *link, unsigned int *classes)
|
|||
}
|
||||
|
||||
/* set up device control */
|
||||
if (ap->ioaddr.ctl_addr)
|
||||
if (ap->ioaddr.ctl_addr) {
|
||||
iowrite8(ap->ctl, ap->ioaddr.ctl_addr);
|
||||
ap->last_ctl = ap->ctl;
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ata_sff_postreset);
|
||||
|
||||
|
@ -2534,6 +2537,7 @@ void ata_bus_reset(struct ata_port *ap)
|
|||
if (ap->flags & (ATA_FLAG_SATA_RESET | ATA_FLAG_SRST)) {
|
||||
/* set up device control for ATA_FLAG_SATA_RESET */
|
||||
iowrite8(ap->ctl, ioaddr->ctl_addr);
|
||||
ap->last_ctl = ap->ctl;
|
||||
}
|
||||
|
||||
DPRINTK("EXIT\n");
|
||||
|
|
|
@ -2218,12 +2218,13 @@ static irqreturn_t mv_interrupt(int irq, void *dev_instance)
|
|||
else
|
||||
handled = mv_host_intr(host, pending_irqs);
|
||||
}
|
||||
spin_unlock(&host->lock);
|
||||
|
||||
/* for MSI: unmask; interrupt cause bits will retrigger now */
|
||||
if (using_msi)
|
||||
writel(hpriv->main_irq_mask, hpriv->main_irq_mask_addr);
|
||||
|
||||
spin_unlock(&host->lock);
|
||||
|
||||
return IRQ_RETVAL(handled);
|
||||
}
|
||||
|
||||
|
|
|
@ -489,6 +489,28 @@ static void ace_fsm_dostate(struct ace_device *ace)
|
|||
ace->fsm_state, ace->id_req_count);
|
||||
#endif
|
||||
|
||||
/* Verify that there is actually a CF in the slot. If not, then
|
||||
* bail out back to the idle state and wake up all the waiters */
|
||||
status = ace_in32(ace, ACE_STATUS);
|
||||
if ((status & ACE_STATUS_CFDETECT) == 0) {
|
||||
ace->fsm_state = ACE_FSM_STATE_IDLE;
|
||||
ace->media_change = 1;
|
||||
set_capacity(ace->gd, 0);
|
||||
dev_info(ace->dev, "No CF in slot\n");
|
||||
|
||||
/* Drop all pending requests */
|
||||
while ((req = elv_next_request(ace->queue)) != NULL)
|
||||
end_request(req, 0);
|
||||
|
||||
/* Drop back to IDLE state and notify waiters */
|
||||
ace->fsm_state = ACE_FSM_STATE_IDLE;
|
||||
ace->id_result = -EIO;
|
||||
while (ace->id_req_count) {
|
||||
complete(&ace->id_completion);
|
||||
ace->id_req_count--;
|
||||
}
|
||||
}
|
||||
|
||||
switch (ace->fsm_state) {
|
||||
case ACE_FSM_STATE_IDLE:
|
||||
/* See if there is anything to do */
|
||||
|
|
|
@ -359,9 +359,16 @@ fail:
|
|||
return error;
|
||||
}
|
||||
|
||||
static struct device *next_device(struct klist_iter *i) {
|
||||
struct klist_node * n = klist_next(i);
|
||||
return n ? container_of(n, struct device, knode_parent) : NULL;
|
||||
static int
|
||||
find_quicksilver(struct device *dev, void *data)
|
||||
{
|
||||
struct parisc_device **lba = data;
|
||||
struct parisc_device *padev = to_parisc_device(dev);
|
||||
|
||||
if (IS_QUICKSILVER(padev))
|
||||
*lba = padev;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -372,8 +379,6 @@ parisc_agp_init(void)
|
|||
int err = -1;
|
||||
struct parisc_device *sba = NULL, *lba = NULL;
|
||||
struct lba_device *lbadev = NULL;
|
||||
struct device *dev = NULL;
|
||||
struct klist_iter i;
|
||||
|
||||
if (!sba_list)
|
||||
goto out;
|
||||
|
@ -386,13 +391,7 @@ parisc_agp_init(void)
|
|||
}
|
||||
|
||||
/* Now search our Pluto for our precious AGP device... */
|
||||
klist_iter_init(&sba->dev.klist_children, &i);
|
||||
while ((dev = next_device(&i))) {
|
||||
struct parisc_device *padev = to_parisc_device(dev);
|
||||
if (IS_QUICKSILVER(padev))
|
||||
lba = padev;
|
||||
}
|
||||
klist_iter_exit(&i);
|
||||
device_for_each_child(&sba->dev, &lba, find_quicksilver);
|
||||
|
||||
if (!lba) {
|
||||
printk(KERN_INFO DRVPFX "No AGP devices found.\n");
|
||||
|
|
|
@ -140,6 +140,12 @@ static void ide_queue_pc_head(ide_drive_t *drive, struct gendisk *disk,
|
|||
rq->cmd_flags |= REQ_PREEMPT;
|
||||
rq->buffer = (char *)pc;
|
||||
rq->rq_disk = disk;
|
||||
|
||||
if (pc->req_xfer) {
|
||||
rq->data = pc->buf;
|
||||
rq->data_len = pc->req_xfer;
|
||||
}
|
||||
|
||||
memcpy(rq->cmd, pc->c, 12);
|
||||
if (drive->media == ide_tape)
|
||||
rq->cmd[13] = REQ_IDETAPE_PC1;
|
||||
|
@ -159,6 +165,12 @@ int ide_queue_pc_tail(ide_drive_t *drive, struct gendisk *disk,
|
|||
rq = blk_get_request(drive->queue, READ, __GFP_WAIT);
|
||||
rq->cmd_type = REQ_TYPE_SPECIAL;
|
||||
rq->buffer = (char *)pc;
|
||||
|
||||
if (pc->req_xfer) {
|
||||
rq->data = pc->buf;
|
||||
rq->data_len = pc->req_xfer;
|
||||
}
|
||||
|
||||
memcpy(rq->cmd, pc->c, 12);
|
||||
if (drive->media == ide_tape)
|
||||
rq->cmd[13] = REQ_IDETAPE_PC1;
|
||||
|
|
|
@ -128,6 +128,7 @@ int ide_build_sglist(ide_drive_t *drive, struct request *rq)
|
|||
{
|
||||
ide_hwif_t *hwif = drive->hwif;
|
||||
struct scatterlist *sg = hwif->sg_table;
|
||||
int i;
|
||||
|
||||
ide_map_sg(drive, rq);
|
||||
|
||||
|
@ -136,8 +137,13 @@ int ide_build_sglist(ide_drive_t *drive, struct request *rq)
|
|||
else
|
||||
hwif->sg_dma_direction = DMA_TO_DEVICE;
|
||||
|
||||
return dma_map_sg(hwif->dev, sg, hwif->sg_nents,
|
||||
hwif->sg_dma_direction);
|
||||
i = dma_map_sg(hwif->dev, sg, hwif->sg_nents, hwif->sg_dma_direction);
|
||||
if (i) {
|
||||
hwif->orig_sg_nents = hwif->sg_nents;
|
||||
hwif->sg_nents = i;
|
||||
}
|
||||
|
||||
return i;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ide_build_sglist);
|
||||
|
||||
|
@ -156,7 +162,7 @@ void ide_destroy_dmatable(ide_drive_t *drive)
|
|||
{
|
||||
ide_hwif_t *hwif = drive->hwif;
|
||||
|
||||
dma_unmap_sg(hwif->dev, hwif->sg_table, hwif->sg_nents,
|
||||
dma_unmap_sg(hwif->dev, hwif->sg_table, hwif->orig_sg_nents,
|
||||
hwif->sg_dma_direction);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ide_destroy_dmatable);
|
||||
|
|
|
@ -327,8 +327,10 @@ static ide_startstop_t ide_floppy_do_request(ide_drive_t *drive,
|
|||
return ide_stopped;
|
||||
}
|
||||
|
||||
if (blk_fs_request(rq) || pc->req_xfer) {
|
||||
ide_init_sg_cmd(drive, rq);
|
||||
ide_map_sg(drive, rq);
|
||||
}
|
||||
|
||||
pc->sg = hwif->sg_table;
|
||||
pc->sg_cnt = hwif->sg_nents;
|
||||
|
|
|
@ -1683,7 +1683,7 @@ static int dst_tune_frontend(struct dvb_frontend* fe,
|
|||
|
||||
static int dst_get_tuning_algo(struct dvb_frontend *fe)
|
||||
{
|
||||
return dst_algo;
|
||||
return dst_algo ? DVBFE_ALGO_HW : DVBFE_ALGO_SW;
|
||||
}
|
||||
|
||||
static int dst_get_frontend(struct dvb_frontend *fe, struct dvb_frontend_parameters *p)
|
||||
|
|
|
@ -1290,9 +1290,6 @@ static int dtv_property_process_set(struct dvb_frontend *fe,
|
|||
dprintk("%s() Finalised property cache\n", __func__);
|
||||
dtv_property_cache_submit(fe);
|
||||
|
||||
/* Request the search algorithm to search */
|
||||
fepriv->algo_status |= DVBFE_ALGO_SEARCH_AGAIN;
|
||||
|
||||
r |= dvb_frontend_ioctl_legacy(inode, file, FE_SET_FRONTEND,
|
||||
&fepriv->parameters);
|
||||
break;
|
||||
|
@ -1717,6 +1714,10 @@ static int dvb_frontend_ioctl_legacy(struct inode *inode, struct file *file,
|
|||
fepriv->min_delay = (dvb_override_tune_delay * HZ) / 1000;
|
||||
|
||||
fepriv->state = FESTATE_RETUNE;
|
||||
|
||||
/* Request the search algorithm to search */
|
||||
fepriv->algo_status |= DVBFE_ALGO_SEARCH_AGAIN;
|
||||
|
||||
dvb_frontend_wakeup(fe);
|
||||
dvb_frontend_add_event(fe, 0);
|
||||
fepriv->status = 0;
|
||||
|
|
|
@ -156,7 +156,7 @@ static void stb0899_first_subrange(struct stb0899_state *state)
|
|||
}
|
||||
|
||||
if (range > 0)
|
||||
internal->sub_range = MIN(internal->srch_range, range);
|
||||
internal->sub_range = min(internal->srch_range, range);
|
||||
else
|
||||
internal->sub_range = 0;
|
||||
|
||||
|
@ -185,7 +185,7 @@ static enum stb0899_status stb0899_check_tmg(struct stb0899_state *state)
|
|||
timing = stb0899_read_reg(state, STB0899_RTF);
|
||||
|
||||
if (lock >= 42) {
|
||||
if ((lock > 48) && (ABS(timing) >= 110)) {
|
||||
if ((lock > 48) && (abs(timing) >= 110)) {
|
||||
internal->status = ANALOGCARRIER;
|
||||
dprintk(state->verbose, FE_DEBUG, 1, "-->ANALOG Carrier !");
|
||||
} else {
|
||||
|
@ -222,7 +222,7 @@ static enum stb0899_status stb0899_search_tmg(struct stb0899_state *state)
|
|||
index++;
|
||||
derot_freq += index * internal->direction * derot_step; /* next derot zig zag position */
|
||||
|
||||
if (ABS(derot_freq) > derot_limit)
|
||||
if (abs(derot_freq) > derot_limit)
|
||||
next_loop--;
|
||||
|
||||
if (next_loop) {
|
||||
|
@ -298,7 +298,7 @@ static enum stb0899_status stb0899_search_carrier(struct stb0899_state *state)
|
|||
last_derot_freq = derot_freq;
|
||||
derot_freq += index * internal->direction * internal->derot_step; /* next zig zag derotator position */
|
||||
|
||||
if(ABS(derot_freq) > derot_limit)
|
||||
if(abs(derot_freq) > derot_limit)
|
||||
next_loop--;
|
||||
|
||||
if (next_loop) {
|
||||
|
@ -400,7 +400,7 @@ static enum stb0899_status stb0899_search_data(struct stb0899_state *state)
|
|||
if ((internal->status != CARRIEROK) || (stb0899_check_data(state) != DATAOK)) {
|
||||
|
||||
derot_freq += index * internal->direction * derot_step; /* next zig zag derotator position */
|
||||
if (ABS(derot_freq) > derot_limit)
|
||||
if (abs(derot_freq) > derot_limit)
|
||||
next_loop--;
|
||||
|
||||
if (next_loop) {
|
||||
|
@ -467,7 +467,7 @@ static void next_sub_range(struct stb0899_state *state)
|
|||
|
||||
if (internal->sub_dir > 0) {
|
||||
old_sub_range = internal->sub_range;
|
||||
internal->sub_range = MIN((internal->srch_range / 2) -
|
||||
internal->sub_range = min((internal->srch_range / 2) -
|
||||
(internal->tuner_offst + internal->sub_range / 2),
|
||||
internal->sub_range);
|
||||
|
||||
|
@ -771,7 +771,7 @@ static long Log2Int(int number)
|
|||
int i;
|
||||
|
||||
i = 0;
|
||||
while ((1 << i) <= ABS(number))
|
||||
while ((1 << i) <= abs(number))
|
||||
i++;
|
||||
|
||||
if (number == 0)
|
||||
|
|
|
@ -794,7 +794,7 @@ static int stb0899_send_diseqc_burst(struct dvb_frontend *fe, fe_sec_mini_cmd_t
|
|||
reg = stb0899_read_reg(state, STB0899_DISCNTRL1);
|
||||
old_state = reg;
|
||||
/* set to burst mode */
|
||||
STB0899_SETFIELD_VAL(DISEQCMODE, reg, 0x02);
|
||||
STB0899_SETFIELD_VAL(DISEQCMODE, reg, 0x03);
|
||||
STB0899_SETFIELD_VAL(DISPRECHARGE, reg, 0x01);
|
||||
stb0899_write_reg(state, STB0899_DISCNTRL1, reg);
|
||||
switch (burst) {
|
||||
|
|
|
@ -59,10 +59,6 @@
|
|||
#define MAKEWORD32(a, b, c, d) (((a) << 24) | ((b) << 16) | ((c) << 8) | (d))
|
||||
#define MAKEWORD16(a, b) (((a) << 8) | (b))
|
||||
|
||||
#define MIN(x, y) ((x) <= (y) ? (x) : (y))
|
||||
#define MAX(x, y) ((x) >= (y) ? (x) : (y))
|
||||
#define ABS(x) ((x) >= 0 ? (x) : -(x))
|
||||
|
||||
#define LSB(x) ((x & 0xff))
|
||||
#define MSB(y) ((y >> 8) & 0xff)
|
||||
|
||||
|
@ -168,10 +164,10 @@ struct stb0899_internal {
|
|||
u32 freq; /* Demod internal Frequency */
|
||||
u32 srate; /* Demod internal Symbol rate */
|
||||
enum stb0899_fec fecrate; /* Demod internal FEC rate */
|
||||
u32 srch_range; /* Demod internal Search Range */
|
||||
u32 sub_range; /* Demod current sub range (Hz) */
|
||||
u32 tuner_step; /* Tuner step (Hz) */
|
||||
u32 tuner_offst; /* Relative offset to carrier (Hz) */
|
||||
s32 srch_range; /* Demod internal Search Range */
|
||||
s32 sub_range; /* Demod current sub range (Hz) */
|
||||
s32 tuner_step; /* Tuner step (Hz) */
|
||||
s32 tuner_offst; /* Relative offset to carrier (Hz) */
|
||||
u32 tuner_bw; /* Current bandwidth of the tuner (Hz) */
|
||||
|
||||
s32 mclk; /* Masterclock Divider factor (binary) */
|
||||
|
|
|
@ -427,11 +427,11 @@ static int stb6100_init(struct dvb_frontend *fe)
|
|||
status->refclock = 27000000; /* Hz */
|
||||
status->iqsense = 1;
|
||||
status->bandwidth = 36000; /* kHz */
|
||||
state->bandwidth = status->bandwidth * 1000; /* MHz */
|
||||
state->bandwidth = status->bandwidth * 1000; /* Hz */
|
||||
state->reference = status->refclock / 1000; /* kHz */
|
||||
|
||||
/* Set default bandwidth. */
|
||||
return stb6100_set_bandwidth(fe, status->bandwidth);
|
||||
return stb6100_set_bandwidth(fe, state->bandwidth);
|
||||
}
|
||||
|
||||
static int stb6100_get_state(struct dvb_frontend *fe,
|
||||
|
|
|
@ -590,7 +590,7 @@ static int zl10353_i2c_gate_ctrl(struct dvb_frontend* fe, int enable)
|
|||
struct zl10353_state *state = fe->demodulator_priv;
|
||||
u8 val = 0x0a;
|
||||
|
||||
if (state->config.no_tuner) {
|
||||
if (state->config.disable_i2c_gate_ctrl) {
|
||||
/* No tuner attached to the internal I2C bus */
|
||||
/* If set enable I2C bridge, the main I2C bus stopped hardly */
|
||||
return 0;
|
||||
|
|
|
@ -38,6 +38,9 @@ struct zl10353_config
|
|||
|
||||
/* set if parallel ts output is required */
|
||||
int parallel_ts;
|
||||
|
||||
/* set if i2c_gate_ctrl disable is required */
|
||||
u8 disable_i2c_gate_ctrl:1;
|
||||
};
|
||||
|
||||
#if defined(CONFIG_DVB_ZL10353) || (defined(CONFIG_DVB_ZL10353_MODULE) && defined(MODULE))
|
||||
|
|
|
@ -102,7 +102,11 @@ int s5k4aa_probe(struct sd *sd)
|
|||
}
|
||||
|
||||
/* Test some registers, but we don't know their exact meaning yet */
|
||||
if (m5602_read_sensor(sd, 0x00, prod_id, sizeof(prod_id)))
|
||||
if (m5602_read_sensor(sd, 0x00, prod_id, 2))
|
||||
return -ENODEV;
|
||||
if (m5602_read_sensor(sd, 0x02, prod_id+2, 2))
|
||||
return -ENODEV;
|
||||
if (m5602_read_sensor(sd, 0x04, prod_id+4, 2))
|
||||
return -ENODEV;
|
||||
|
||||
if (memcmp(prod_id, expected_prod_id, sizeof(prod_id)))
|
||||
|
|
|
@ -860,6 +860,7 @@ static struct zl10353_config behold_h6_config = {
|
|||
.demod_address = 0x1e>>1,
|
||||
.no_tuner = 1,
|
||||
.parallel_ts = 1,
|
||||
.disable_i2c_gate_ctrl = 1,
|
||||
};
|
||||
|
||||
/* ==================================================================
|
||||
|
|
|
@ -54,7 +54,7 @@ MODULE_LICENSE("GPL");
|
|||
/* ---------------------------------------------------------------------- */
|
||||
/* our structs */
|
||||
|
||||
#define MAXREGS 64
|
||||
#define MAXREGS 256
|
||||
|
||||
struct CHIPSTATE;
|
||||
typedef int (*getvalue)(int);
|
||||
|
|
|
@ -68,6 +68,7 @@ config VIDEO_ZORAN_AVS6EYES
|
|||
tristate "AverMedia 6 Eyes support (EXPERIMENTAL)"
|
||||
depends on VIDEO_ZORAN_ZR36060 && EXPERIMENTAL && VIDEO_V4L1
|
||||
select VIDEO_BT856 if VIDEO_HELPER_CHIPS_AUTO
|
||||
select VIDEO_BT866 if VIDEO_HELPER_CHIPS_AUTO
|
||||
select VIDEO_KS0127 if VIDEO_HELPER_CHIPS_AUTO
|
||||
help
|
||||
Support for the AverMedia 6 Eyes video surveillance card.
|
||||
|
|
|
@ -479,7 +479,7 @@ dino_card_setup(struct pci_bus *bus, void __iomem *base_addr)
|
|||
res = &dino_dev->hba.lmmio_space;
|
||||
res->flags = IORESOURCE_MEM;
|
||||
size = scnprintf(name, sizeof(name), "Dino LMMIO (%s)",
|
||||
bus->bridge->bus_id);
|
||||
dev_name(bus->bridge));
|
||||
res->name = kmalloc(size+1, GFP_KERNEL);
|
||||
if(res->name)
|
||||
strcpy((char *)res->name, name);
|
||||
|
@ -493,7 +493,7 @@ dino_card_setup(struct pci_bus *bus, void __iomem *base_addr)
|
|||
struct list_head *ln, *tmp_ln;
|
||||
|
||||
printk(KERN_ERR "Dino: cannot attach bus %s\n",
|
||||
bus->bridge->bus_id);
|
||||
dev_name(bus->bridge));
|
||||
/* kill the bus, we can't do anything with it */
|
||||
list_for_each_safe(ln, tmp_ln, &bus->devices) {
|
||||
struct pci_dev *dev = pci_dev_b(ln);
|
||||
|
@ -587,7 +587,7 @@ dino_fixup_bus(struct pci_bus *bus)
|
|||
bus->resource[i+1] = &res[i];
|
||||
}
|
||||
|
||||
} else if(bus->self) {
|
||||
} else if (bus->parent) {
|
||||
int i;
|
||||
|
||||
pci_read_bridge_bases(bus);
|
||||
|
@ -611,12 +611,12 @@ dino_fixup_bus(struct pci_bus *bus)
|
|||
}
|
||||
|
||||
DBG("DEBUG %s assigning %d [0x%lx,0x%lx]\n",
|
||||
bus->self->dev.bus_id, i,
|
||||
dev_name(&bus->self->dev), i,
|
||||
bus->self->resource[i].start,
|
||||
bus->self->resource[i].end);
|
||||
pci_assign_resource(bus->self, i);
|
||||
DBG("DEBUG %s after assign %d [0x%lx,0x%lx]\n",
|
||||
bus->self->dev.bus_id, i,
|
||||
dev_name(&bus->self->dev), i,
|
||||
bus->self->resource[i].start,
|
||||
bus->self->resource[i].end);
|
||||
}
|
||||
|
@ -1026,7 +1026,8 @@ static int __init dino_probe(struct parisc_device *dev)
|
|||
dino_current_bus = bus->subordinate + 1;
|
||||
pci_bus_assign_resources(bus);
|
||||
} else {
|
||||
printk(KERN_ERR "ERROR: failed to scan PCI bus on %s (probably duplicate bus number %d)\n", dev->dev.bus_id, dino_current_bus);
|
||||
printk(KERN_ERR "ERROR: failed to scan PCI bus on %s (probably duplicate bus number %d)\n",
|
||||
dev_name(&dev->dev), dino_current_bus);
|
||||
/* increment the bus number in case of duplicates */
|
||||
dino_current_bus++;
|
||||
}
|
||||
|
|
|
@ -186,29 +186,34 @@ void gsc_asic_assign_irq(struct gsc_asic *asic, int local_irq, int *irqp)
|
|||
*irqp = irq;
|
||||
}
|
||||
|
||||
static struct device *next_device(struct klist_iter *i)
|
||||
struct gsc_fixup_struct {
|
||||
void (*choose_irq)(struct parisc_device *, void *);
|
||||
void *ctrl;
|
||||
};
|
||||
|
||||
static int gsc_fixup_irqs_callback(struct device *dev, void *data)
|
||||
{
|
||||
struct klist_node * n = klist_next(i);
|
||||
return n ? container_of(n, struct device, knode_parent) : NULL;
|
||||
struct parisc_device *padev = to_parisc_device(dev);
|
||||
struct gsc_fixup_struct *gf = data;
|
||||
|
||||
/* work-around for 715/64 and others which have parent
|
||||
at path [5] and children at path [5/0/x] */
|
||||
if (padev->id.hw_type == HPHW_FAULTY)
|
||||
gsc_fixup_irqs(padev, gf->ctrl, gf->choose_irq);
|
||||
gf->choose_irq(padev, gf->ctrl);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void gsc_fixup_irqs(struct parisc_device *parent, void *ctrl,
|
||||
void (*choose_irq)(struct parisc_device *, void *))
|
||||
{
|
||||
struct device *dev;
|
||||
struct klist_iter i;
|
||||
struct gsc_fixup_struct data = {
|
||||
.choose_irq = choose_irq,
|
||||
.ctrl = ctrl,
|
||||
};
|
||||
|
||||
klist_iter_init(&parent->dev.klist_children, &i);
|
||||
while ((dev = next_device(&i))) {
|
||||
struct parisc_device *padev = to_parisc_device(dev);
|
||||
|
||||
/* work-around for 715/64 and others which have parent
|
||||
at path [5] and children at path [5/0/x] */
|
||||
if (padev->id.hw_type == HPHW_FAULTY)
|
||||
return gsc_fixup_irqs(padev, ctrl, choose_irq);
|
||||
choose_irq(padev, ctrl);
|
||||
}
|
||||
klist_iter_exit(&i);
|
||||
device_for_each_child(&parent->dev, &data, gsc_fixup_irqs_callback);
|
||||
}
|
||||
|
||||
int gsc_common_setup(struct parisc_device *parent, struct gsc_asic *gsc_asic)
|
||||
|
|
|
@ -487,7 +487,7 @@ iosapic_xlate_pin(struct iosapic_info *isi, struct pci_dev *pcidev)
|
|||
}
|
||||
|
||||
/* Check if pcidev behind a PPB */
|
||||
if (NULL != pcidev->bus->self) {
|
||||
if (pcidev->bus->parent) {
|
||||
/* Convert pcidev INTR_PIN into something we
|
||||
** can lookup in the IRT.
|
||||
*/
|
||||
|
@ -523,10 +523,9 @@ iosapic_xlate_pin(struct iosapic_info *isi, struct pci_dev *pcidev)
|
|||
#endif /* PCI_BRIDGE_FUNCS */
|
||||
|
||||
/*
|
||||
** Locate the host slot the PPB nearest the Host bus
|
||||
** adapter.
|
||||
* Locate the host slot of the PPB.
|
||||
*/
|
||||
while (NULL != p->parent->self)
|
||||
while (p->parent->parent)
|
||||
p = p->parent;
|
||||
|
||||
intr_slot = PCI_SLOT(p->self->devfn);
|
||||
|
@ -709,11 +708,14 @@ static void iosapic_set_affinity_irq(unsigned int irq,
|
|||
struct vector_info *vi = iosapic_get_vector(irq);
|
||||
u32 d0, d1, dummy_d0;
|
||||
unsigned long flags;
|
||||
int dest_cpu;
|
||||
|
||||
if (cpu_check_affinity(irq, dest))
|
||||
dest_cpu = cpu_check_affinity(irq, dest);
|
||||
if (dest_cpu < 0)
|
||||
return;
|
||||
|
||||
vi->txn_addr = txn_affinity_addr(irq, cpumask_first(dest));
|
||||
irq_desc[irq].affinity = cpumask_of_cpu(dest_cpu);
|
||||
vi->txn_addr = txn_affinity_addr(irq, dest_cpu);
|
||||
|
||||
spin_lock_irqsave(&iosapic_lock, flags);
|
||||
/* d1 contains the destination CPU, so only want to set that
|
||||
|
|
|
@ -644,7 +644,7 @@ lba_fixup_bus(struct pci_bus *bus)
|
|||
** Properly Setup MMIO resources for this bus.
|
||||
** pci_alloc_primary_bus() mangles this.
|
||||
*/
|
||||
if (bus->self) {
|
||||
if (bus->parent) {
|
||||
int i;
|
||||
/* PCI-PCI Bridge */
|
||||
pci_read_bridge_bases(bus);
|
||||
|
@ -802,7 +802,7 @@ lba_fixup_bus(struct pci_bus *bus)
|
|||
** Can't fixup here anyway....garr...
|
||||
*/
|
||||
if (fbb_enable) {
|
||||
if (bus->self) {
|
||||
if (bus->parent) {
|
||||
u8 control;
|
||||
/* enable on PPB */
|
||||
(void) pci_read_config_byte(bus->self, PCI_BRIDGE_CONTROL, &control);
|
||||
|
|
|
@ -1206,30 +1206,48 @@ sba_alloc_pdir(unsigned int pdir_size)
|
|||
return (void *) pdir_base;
|
||||
}
|
||||
|
||||
static struct device *next_device(struct klist_iter *i)
|
||||
struct ibase_data_struct {
|
||||
struct ioc *ioc;
|
||||
int ioc_num;
|
||||
};
|
||||
|
||||
static int setup_ibase_imask_callback(struct device *dev, void *data)
|
||||
{
|
||||
struct klist_node * n = klist_next(i);
|
||||
return n ? container_of(n, struct device, knode_parent) : NULL;
|
||||
/* lba_set_iregs() is in drivers/parisc/lba_pci.c */
|
||||
extern void lba_set_iregs(struct parisc_device *, u32, u32);
|
||||
struct parisc_device *lba = to_parisc_device(dev);
|
||||
struct ibase_data_struct *ibd = data;
|
||||
int rope_num = (lba->hpa.start >> 13) & 0xf;
|
||||
if (rope_num >> 3 == ibd->ioc_num)
|
||||
lba_set_iregs(lba, ibd->ioc->ibase, ibd->ioc->imask);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* setup Mercury or Elroy IBASE/IMASK registers. */
|
||||
static void
|
||||
setup_ibase_imask(struct parisc_device *sba, struct ioc *ioc, int ioc_num)
|
||||
{
|
||||
/* lba_set_iregs() is in drivers/parisc/lba_pci.c */
|
||||
extern void lba_set_iregs(struct parisc_device *, u32, u32);
|
||||
struct device *dev;
|
||||
struct klist_iter i;
|
||||
struct ibase_data_struct ibase_data = {
|
||||
.ioc = ioc,
|
||||
.ioc_num = ioc_num,
|
||||
};
|
||||
|
||||
klist_iter_init(&sba->dev.klist_children, &i);
|
||||
while ((dev = next_device(&i))) {
|
||||
device_for_each_child(&sba->dev, &ibase_data,
|
||||
setup_ibase_imask_callback);
|
||||
}
|
||||
|
||||
#ifdef SBA_AGP_SUPPORT
|
||||
static int
|
||||
sba_ioc_find_quicksilver(struct device *dev, void *data)
|
||||
{
|
||||
int *agp_found = data;
|
||||
struct parisc_device *lba = to_parisc_device(dev);
|
||||
int rope_num = (lba->hpa.start >> 13) & 0xf;
|
||||
if (rope_num >> 3 == ioc_num)
|
||||
lba_set_iregs(lba, ioc->ibase, ioc->imask);
|
||||
}
|
||||
klist_iter_exit(&i);
|
||||
|
||||
if (IS_QUICKSILVER(lba))
|
||||
*agp_found = 1;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
sba_ioc_init_pluto(struct parisc_device *sba, struct ioc *ioc, int ioc_num)
|
||||
|
@ -1332,9 +1350,6 @@ sba_ioc_init_pluto(struct parisc_device *sba, struct ioc *ioc, int ioc_num)
|
|||
WRITE_REG(ioc->ibase | 31, ioc->ioc_hpa + IOC_PCOM);
|
||||
|
||||
#ifdef SBA_AGP_SUPPORT
|
||||
{
|
||||
struct klist_iter i;
|
||||
struct device *dev = NULL;
|
||||
|
||||
/*
|
||||
** If an AGP device is present, only use half of the IOV space
|
||||
|
@ -1344,13 +1359,7 @@ sba_ioc_init_pluto(struct parisc_device *sba, struct ioc *ioc, int ioc_num)
|
|||
** We program the next pdir index after we stop w/ a key for
|
||||
** the GART code to handshake on.
|
||||
*/
|
||||
klist_iter_init(&sba->dev.klist_children, &i);
|
||||
while ((dev = next_device(&i))) {
|
||||
struct parisc_device *lba = to_parisc_device(dev);
|
||||
if (IS_QUICKSILVER(lba))
|
||||
agp_found = 1;
|
||||
}
|
||||
klist_iter_exit(&i);
|
||||
device_for_each_child(&sba->dev, &agp_found, sba_ioc_find_quicksilver);
|
||||
|
||||
if (agp_found && sba_reserve_agpgart) {
|
||||
printk(KERN_INFO "%s: reserving %dMb of IOVA space for agpgart\n",
|
||||
|
@ -1358,9 +1367,7 @@ sba_ioc_init_pluto(struct parisc_device *sba, struct ioc *ioc, int ioc_num)
|
|||
ioc->pdir_size /= 2;
|
||||
ioc->pdir_base[PDIR_INDEX(iova_space_size/2)] = SBA_AGPGART_COOKIE;
|
||||
}
|
||||
}
|
||||
#endif /*SBA_AGP_SUPPORT*/
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -33,19 +33,19 @@ static LIST_HEAD(fcoe_transports);
|
|||
static DEFINE_MUTEX(fcoe_transports_lock);
|
||||
|
||||
/**
|
||||
* fcoe_transport_default - returns ptr to the default transport fcoe_sw
|
||||
**/
|
||||
* fcoe_transport_default() - Returns ptr to the default transport fcoe_sw
|
||||
*/
|
||||
struct fcoe_transport *fcoe_transport_default(void)
|
||||
{
|
||||
return &fcoe_sw_transport;
|
||||
}
|
||||
|
||||
/**
|
||||
* fcoe_transport_to_pcidev - get the pci dev from a netdev
|
||||
* fcoe_transport_to_pcidev() - get the pci dev from a netdev
|
||||
* @netdev: the netdev that pci dev will be retrived from
|
||||
*
|
||||
* Returns: NULL or the corrsponding pci_dev
|
||||
**/
|
||||
*/
|
||||
struct pci_dev *fcoe_transport_pcidev(const struct net_device *netdev)
|
||||
{
|
||||
if (!netdev->dev.parent)
|
||||
|
@ -54,18 +54,17 @@ struct pci_dev *fcoe_transport_pcidev(const struct net_device *netdev)
|
|||
}
|
||||
|
||||
/**
|
||||
* fcoe_transport_device_lookup - find out netdev is managed by the
|
||||
* transport
|
||||
* assign a transport to a device
|
||||
* fcoe_transport_device_lookup() - Lookup a transport
|
||||
* @netdev: the netdev the transport to be attached to
|
||||
*
|
||||
* This will look for existing offload driver, if not found, it falls back to
|
||||
* the default sw hba (fcoe_sw) as its fcoe transport.
|
||||
*
|
||||
* Returns: 0 for success
|
||||
**/
|
||||
static struct fcoe_transport_internal *fcoe_transport_device_lookup(
|
||||
struct fcoe_transport *t, struct net_device *netdev)
|
||||
*/
|
||||
static struct fcoe_transport_internal *
|
||||
fcoe_transport_device_lookup(struct fcoe_transport *t,
|
||||
struct net_device *netdev)
|
||||
{
|
||||
struct fcoe_transport_internal *ti;
|
||||
|
||||
|
@ -81,14 +80,14 @@ static struct fcoe_transport_internal *fcoe_transport_device_lookup(
|
|||
return NULL;
|
||||
}
|
||||
/**
|
||||
* fcoe_transport_device_add - assign a transport to a device
|
||||
* fcoe_transport_device_add() - Assign a transport to a device
|
||||
* @netdev: the netdev the transport to be attached to
|
||||
*
|
||||
* This will look for existing offload driver, if not found, it falls back to
|
||||
* the default sw hba (fcoe_sw) as its fcoe transport.
|
||||
*
|
||||
* Returns: 0 for success
|
||||
**/
|
||||
*/
|
||||
static int fcoe_transport_device_add(struct fcoe_transport *t,
|
||||
struct net_device *netdev)
|
||||
{
|
||||
|
@ -123,14 +122,14 @@ static int fcoe_transport_device_add(struct fcoe_transport *t,
|
|||
}
|
||||
|
||||
/**
|
||||
* fcoe_transport_device_remove - remove a device from its transport
|
||||
* fcoe_transport_device_remove() - Remove a device from its transport
|
||||
* @netdev: the netdev the transport to be attached to
|
||||
*
|
||||
* this removes the device from the transport so the given transport will
|
||||
* This removes the device from the transport so the given transport will
|
||||
* not manage this device any more
|
||||
*
|
||||
* Returns: 0 for success
|
||||
**/
|
||||
*/
|
||||
static int fcoe_transport_device_remove(struct fcoe_transport *t,
|
||||
struct net_device *netdev)
|
||||
{
|
||||
|
@ -155,13 +154,13 @@ static int fcoe_transport_device_remove(struct fcoe_transport *t,
|
|||
}
|
||||
|
||||
/**
|
||||
* fcoe_transport_device_remove_all - remove all from transport devlist
|
||||
* fcoe_transport_device_remove_all() - Remove all from transport devlist
|
||||
*
|
||||
* this removes the device from the transport so the given transport will
|
||||
* This removes the device from the transport so the given transport will
|
||||
* not manage this device any more
|
||||
*
|
||||
* Returns: 0 for success
|
||||
**/
|
||||
*/
|
||||
static void fcoe_transport_device_remove_all(struct fcoe_transport *t)
|
||||
{
|
||||
struct fcoe_transport_internal *ti, *tmp;
|
||||
|
@ -175,16 +174,16 @@ static void fcoe_transport_device_remove_all(struct fcoe_transport *t)
|
|||
}
|
||||
|
||||
/**
|
||||
* fcoe_transport_match - use the bus device match function to match the hw
|
||||
* @t: the fcoe transport
|
||||
* @netdev:
|
||||
* fcoe_transport_match() - Use the bus device match function to match the hw
|
||||
* @t: The fcoe transport to check
|
||||
* @netdev: The netdev to match against
|
||||
*
|
||||
* This function is used to check if the givne transport wants to manage the
|
||||
* This function is used to check if the given transport wants to manage the
|
||||
* input netdev. if the transports implements the match function, it will be
|
||||
* called, o.w. we just compare the pci vendor and device id.
|
||||
*
|
||||
* Returns: true for match up
|
||||
**/
|
||||
*/
|
||||
static bool fcoe_transport_match(struct fcoe_transport *t,
|
||||
struct net_device *netdev)
|
||||
{
|
||||
|
@ -210,17 +209,17 @@ static bool fcoe_transport_match(struct fcoe_transport *t,
|
|||
}
|
||||
|
||||
/**
|
||||
* fcoe_transport_lookup - check if the transport is already registered
|
||||
* fcoe_transport_lookup() - Check if the transport is already registered
|
||||
* @t: the transport to be looked up
|
||||
*
|
||||
* This compares the parent device (pci) vendor and device id
|
||||
*
|
||||
* Returns: NULL if not found
|
||||
*
|
||||
* TODO - return default sw transport if no other transport is found
|
||||
**/
|
||||
static struct fcoe_transport *fcoe_transport_lookup(
|
||||
struct net_device *netdev)
|
||||
* TODO: return default sw transport if no other transport is found
|
||||
*/
|
||||
static struct fcoe_transport *
|
||||
fcoe_transport_lookup(struct net_device *netdev)
|
||||
{
|
||||
struct fcoe_transport *t;
|
||||
|
||||
|
@ -239,11 +238,11 @@ static struct fcoe_transport *fcoe_transport_lookup(
|
|||
}
|
||||
|
||||
/**
|
||||
* fcoe_transport_register - adds a fcoe transport to the fcoe transports list
|
||||
* fcoe_transport_register() - Adds a fcoe transport to the fcoe transports list
|
||||
* @t: ptr to the fcoe transport to be added
|
||||
*
|
||||
* Returns: 0 for success
|
||||
**/
|
||||
*/
|
||||
int fcoe_transport_register(struct fcoe_transport *t)
|
||||
{
|
||||
struct fcoe_transport *tt;
|
||||
|
@ -259,9 +258,6 @@ int fcoe_transport_register(struct fcoe_transport *t)
|
|||
list_add_tail(&t->list, &fcoe_transports);
|
||||
mutex_unlock(&fcoe_transports_lock);
|
||||
|
||||
mutex_init(&t->devlock);
|
||||
INIT_LIST_HEAD(&t->devlist);
|
||||
|
||||
printk(KERN_DEBUG "fcoe_transport_register:%s\n", t->name);
|
||||
|
||||
return 0;
|
||||
|
@ -269,11 +265,11 @@ int fcoe_transport_register(struct fcoe_transport *t)
|
|||
EXPORT_SYMBOL_GPL(fcoe_transport_register);
|
||||
|
||||
/**
|
||||
* fcoe_transport_unregister - remove the tranport fro the fcoe transports list
|
||||
* fcoe_transport_unregister() - Remove the tranport fro the fcoe transports list
|
||||
* @t: ptr to the fcoe transport to be removed
|
||||
*
|
||||
* Returns: 0 for success
|
||||
**/
|
||||
*/
|
||||
int fcoe_transport_unregister(struct fcoe_transport *t)
|
||||
{
|
||||
struct fcoe_transport *tt, *tmp;
|
||||
|
@ -294,8 +290,8 @@ int fcoe_transport_unregister(struct fcoe_transport *t)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(fcoe_transport_unregister);
|
||||
|
||||
/*
|
||||
* fcoe_load_transport_driver - load an offload driver by alias name
|
||||
/**
|
||||
* fcoe_load_transport_driver() - Load an offload driver by alias name
|
||||
* @netdev: the target net device
|
||||
*
|
||||
* Requests for an offload driver module as the fcoe transport, if fails, it
|
||||
|
@ -307,7 +303,7 @@ EXPORT_SYMBOL_GPL(fcoe_transport_unregister);
|
|||
* 3. pure hw fcoe hba may not have netdev
|
||||
*
|
||||
* Returns: 0 for success
|
||||
**/
|
||||
*/
|
||||
int fcoe_load_transport_driver(struct net_device *netdev)
|
||||
{
|
||||
struct pci_dev *pci;
|
||||
|
@ -335,14 +331,14 @@ int fcoe_load_transport_driver(struct net_device *netdev)
|
|||
EXPORT_SYMBOL_GPL(fcoe_load_transport_driver);
|
||||
|
||||
/**
|
||||
* fcoe_transport_attach - load transport to fcoe
|
||||
* fcoe_transport_attach() - Load transport to fcoe
|
||||
* @netdev: the netdev the transport to be attached to
|
||||
*
|
||||
* This will look for existing offload driver, if not found, it falls back to
|
||||
* the default sw hba (fcoe_sw) as its fcoe transport.
|
||||
*
|
||||
* Returns: 0 for success
|
||||
**/
|
||||
*/
|
||||
int fcoe_transport_attach(struct net_device *netdev)
|
||||
{
|
||||
struct fcoe_transport *t;
|
||||
|
@ -373,11 +369,11 @@ int fcoe_transport_attach(struct net_device *netdev)
|
|||
EXPORT_SYMBOL_GPL(fcoe_transport_attach);
|
||||
|
||||
/**
|
||||
* fcoe_transport_release - unload transport from fcoe
|
||||
* fcoe_transport_release() - Unload transport from fcoe
|
||||
* @netdev: the net device on which fcoe is to be released
|
||||
*
|
||||
* Returns: 0 for success
|
||||
**/
|
||||
*/
|
||||
int fcoe_transport_release(struct net_device *netdev)
|
||||
{
|
||||
struct fcoe_transport *t;
|
||||
|
@ -410,12 +406,12 @@ int fcoe_transport_release(struct net_device *netdev)
|
|||
EXPORT_SYMBOL_GPL(fcoe_transport_release);
|
||||
|
||||
/**
|
||||
* fcoe_transport_init - initializes fcoe transport layer
|
||||
* fcoe_transport_init() - Initializes fcoe transport layer
|
||||
*
|
||||
* This prepares for the fcoe transport layer
|
||||
*
|
||||
* Returns: none
|
||||
**/
|
||||
*/
|
||||
int __init fcoe_transport_init(void)
|
||||
{
|
||||
INIT_LIST_HEAD(&fcoe_transports);
|
||||
|
@ -424,12 +420,13 @@ int __init fcoe_transport_init(void)
|
|||
}
|
||||
|
||||
/**
|
||||
* fcoe_transport_exit - cleans up the fcoe transport layer
|
||||
* fcoe_transport_exit() - Cleans up the fcoe transport layer
|
||||
*
|
||||
* This cleans up the fcoe transport layer. removing any transport on the list,
|
||||
* note that the transport destroy func is not called here.
|
||||
*
|
||||
* Returns: none
|
||||
**/
|
||||
*/
|
||||
int __exit fcoe_transport_exit(void)
|
||||
{
|
||||
struct fcoe_transport *t, *tmp;
|
||||
|
|
|
@ -104,19 +104,19 @@ static struct scsi_host_template fcoe_sw_shost_template = {
|
|||
.max_sectors = 0xffff,
|
||||
};
|
||||
|
||||
/*
|
||||
* fcoe_sw_lport_config - sets up the fc_lport
|
||||
/**
|
||||
* fcoe_sw_lport_config() - sets up the fc_lport
|
||||
* @lp: ptr to the fc_lport
|
||||
* @shost: ptr to the parent scsi host
|
||||
*
|
||||
* Returns: 0 for success
|
||||
*
|
||||
*/
|
||||
static int fcoe_sw_lport_config(struct fc_lport *lp)
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
lp->link_status = 0;
|
||||
lp->link_up = 0;
|
||||
lp->qfull = 0;
|
||||
lp->max_retry_count = 3;
|
||||
lp->e_d_tov = 2 * 1000; /* FC-FS default */
|
||||
lp->r_a_tov = 2 * 2 * 1000;
|
||||
|
@ -136,16 +136,14 @@ static int fcoe_sw_lport_config(struct fc_lport *lp)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* fcoe_sw_netdev_config - sets up fcoe_softc for lport and network
|
||||
* related properties
|
||||
/**
|
||||
* fcoe_sw_netdev_config() - Set up netdev for SW FCoE
|
||||
* @lp : ptr to the fc_lport
|
||||
* @netdev : ptr to the associated netdevice struct
|
||||
*
|
||||
* Must be called after fcoe_sw_lport_config() as it will use lport mutex
|
||||
*
|
||||
* Returns : 0 for success
|
||||
*
|
||||
*/
|
||||
static int fcoe_sw_netdev_config(struct fc_lport *lp, struct net_device *netdev)
|
||||
{
|
||||
|
@ -181,9 +179,8 @@ static int fcoe_sw_netdev_config(struct fc_lport *lp, struct net_device *netdev)
|
|||
if (fc_set_mfs(lp, mfs))
|
||||
return -EINVAL;
|
||||
|
||||
lp->link_status = ~FC_PAUSE & ~FC_LINK_UP;
|
||||
if (!fcoe_link_ok(lp))
|
||||
lp->link_status |= FC_LINK_UP;
|
||||
lp->link_up = 1;
|
||||
|
||||
/* offload features support */
|
||||
if (fc->real_dev->features & NETIF_F_SG)
|
||||
|
@ -191,6 +188,7 @@ static int fcoe_sw_netdev_config(struct fc_lport *lp, struct net_device *netdev)
|
|||
|
||||
|
||||
skb_queue_head_init(&fc->fcoe_pending_queue);
|
||||
fc->fcoe_pending_queue_active = 0;
|
||||
|
||||
/* setup Source Mac Address */
|
||||
memcpy(fc->ctl_src_addr, fc->real_dev->dev_addr,
|
||||
|
@ -224,16 +222,15 @@ static int fcoe_sw_netdev_config(struct fc_lport *lp, struct net_device *netdev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* fcoe_sw_shost_config - sets up fc_lport->host
|
||||
/**
|
||||
* fcoe_sw_shost_config() - Sets up fc_lport->host
|
||||
* @lp : ptr to the fc_lport
|
||||
* @shost : ptr to the associated scsi host
|
||||
* @dev : device associated to scsi host
|
||||
*
|
||||
* Must be called after fcoe_sw_lport_config) and fcoe_sw_netdev_config()
|
||||
* Must be called after fcoe_sw_lport_config() and fcoe_sw_netdev_config()
|
||||
*
|
||||
* Returns : 0 for success
|
||||
*
|
||||
*/
|
||||
static int fcoe_sw_shost_config(struct fc_lport *lp, struct Scsi_Host *shost,
|
||||
struct device *dev)
|
||||
|
@ -261,8 +258,8 @@ static int fcoe_sw_shost_config(struct fc_lport *lp, struct Scsi_Host *shost,
|
|||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* fcoe_sw_em_config - allocates em for this lport
|
||||
/**
|
||||
* fcoe_sw_em_config() - allocates em for this lport
|
||||
* @lp: the port that em is to allocated for
|
||||
*
|
||||
* Returns : 0 on success
|
||||
|
@ -279,8 +276,8 @@ static inline int fcoe_sw_em_config(struct fc_lport *lp)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* fcoe_sw_destroy - FCoE software HBA tear-down function
|
||||
/**
|
||||
* fcoe_sw_destroy() - FCoE software HBA tear-down function
|
||||
* @netdev: ptr to the associated net_device
|
||||
*
|
||||
* Returns: 0 if link is OK for use by FCoE.
|
||||
|
@ -301,7 +298,7 @@ static int fcoe_sw_destroy(struct net_device *netdev)
|
|||
if (!lp)
|
||||
return -ENODEV;
|
||||
|
||||
fc = fcoe_softc(lp);
|
||||
fc = lport_priv(lp);
|
||||
|
||||
/* Logout of the fabric */
|
||||
fc_fabric_logoff(lp);
|
||||
|
@ -353,8 +350,8 @@ static struct libfc_function_template fcoe_sw_libfc_fcn_templ = {
|
|||
.frame_send = fcoe_xmit,
|
||||
};
|
||||
|
||||
/*
|
||||
* fcoe_sw_create - this function creates the fcoe interface
|
||||
/**
|
||||
* fcoe_sw_create() - this function creates the fcoe interface
|
||||
* @netdev: pointer the associated netdevice
|
||||
*
|
||||
* Creates fc_lport struct and scsi_host for lport, configures lport
|
||||
|
@ -440,8 +437,8 @@ out_host_put:
|
|||
return rc;
|
||||
}
|
||||
|
||||
/*
|
||||
* fcoe_sw_match - the fcoe sw transport match function
|
||||
/**
|
||||
* fcoe_sw_match() - The FCoE SW transport match function
|
||||
*
|
||||
* Returns : false always
|
||||
*/
|
||||
|
@ -461,8 +458,8 @@ struct fcoe_transport fcoe_sw_transport = {
|
|||
.device = 0xffff,
|
||||
};
|
||||
|
||||
/*
|
||||
* fcoe_sw_init - registers fcoe_sw_transport
|
||||
/**
|
||||
* fcoe_sw_init() - Registers fcoe_sw_transport
|
||||
*
|
||||
* Returns : 0 on success
|
||||
*/
|
||||
|
@ -471,17 +468,22 @@ int __init fcoe_sw_init(void)
|
|||
/* attach to scsi transport */
|
||||
scsi_transport_fcoe_sw =
|
||||
fc_attach_transport(&fcoe_sw_transport_function);
|
||||
|
||||
if (!scsi_transport_fcoe_sw) {
|
||||
printk(KERN_ERR "fcoe_sw_init:fc_attach_transport() failed\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
mutex_init(&fcoe_sw_transport.devlock);
|
||||
INIT_LIST_HEAD(&fcoe_sw_transport.devlist);
|
||||
|
||||
/* register sw transport */
|
||||
fcoe_transport_register(&fcoe_sw_transport);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* fcoe_sw_exit - unregisters fcoe_sw_transport
|
||||
/**
|
||||
* fcoe_sw_exit() - Unregisters fcoe_sw_transport
|
||||
*
|
||||
* Returns : 0 on success
|
||||
*/
|
||||
|
|
|
@ -49,6 +49,7 @@
|
|||
static int debug_fcoe;
|
||||
|
||||
#define FCOE_MAX_QUEUE_DEPTH 256
|
||||
#define FCOE_LOW_QUEUE_DEPTH 32
|
||||
|
||||
/* destination address mode */
|
||||
#define FCOE_GW_ADDR_MODE 0x00
|
||||
|
@ -69,8 +70,6 @@ struct fcoe_percpu_s *fcoe_percpu[NR_CPUS];
|
|||
|
||||
/* Function Prototyes */
|
||||
static int fcoe_check_wait_queue(struct fc_lport *);
|
||||
static void fcoe_insert_wait_queue_head(struct fc_lport *, struct sk_buff *);
|
||||
static void fcoe_insert_wait_queue(struct fc_lport *, struct sk_buff *);
|
||||
static void fcoe_recv_flogi(struct fcoe_softc *, struct fc_frame *, u8 *);
|
||||
#ifdef CONFIG_HOTPLUG_CPU
|
||||
static int fcoe_cpu_callback(struct notifier_block *, ulong, void *);
|
||||
|
@ -91,13 +90,13 @@ static struct notifier_block fcoe_cpu_notifier = {
|
|||
};
|
||||
|
||||
/**
|
||||
* fcoe_create_percpu_data - creates the associated cpu data
|
||||
* fcoe_create_percpu_data() - creates the associated cpu data
|
||||
* @cpu: index for the cpu where fcoe cpu data will be created
|
||||
*
|
||||
* create percpu stats block, from cpu add notifier
|
||||
*
|
||||
* Returns: none
|
||||
**/
|
||||
*/
|
||||
static void fcoe_create_percpu_data(int cpu)
|
||||
{
|
||||
struct fc_lport *lp;
|
||||
|
@ -115,13 +114,13 @@ static void fcoe_create_percpu_data(int cpu)
|
|||
}
|
||||
|
||||
/**
|
||||
* fcoe_destroy_percpu_data - destroys the associated cpu data
|
||||
* fcoe_destroy_percpu_data() - destroys the associated cpu data
|
||||
* @cpu: index for the cpu where fcoe cpu data will destroyed
|
||||
*
|
||||
* destroy percpu stats block called by cpu add/remove notifier
|
||||
*
|
||||
* Retuns: none
|
||||
**/
|
||||
*/
|
||||
static void fcoe_destroy_percpu_data(int cpu)
|
||||
{
|
||||
struct fc_lport *lp;
|
||||
|
@ -137,7 +136,7 @@ static void fcoe_destroy_percpu_data(int cpu)
|
|||
}
|
||||
|
||||
/**
|
||||
* fcoe_cpu_callback - fcoe cpu hotplug event callback
|
||||
* fcoe_cpu_callback() - fcoe cpu hotplug event callback
|
||||
* @nfb: callback data block
|
||||
* @action: event triggering the callback
|
||||
* @hcpu: index for the cpu of this event
|
||||
|
@ -145,7 +144,7 @@ static void fcoe_destroy_percpu_data(int cpu)
|
|||
* this creates or destroys per cpu data for fcoe
|
||||
*
|
||||
* Returns NOTIFY_OK always.
|
||||
**/
|
||||
*/
|
||||
static int fcoe_cpu_callback(struct notifier_block *nfb, unsigned long action,
|
||||
void *hcpu)
|
||||
{
|
||||
|
@ -166,7 +165,7 @@ static int fcoe_cpu_callback(struct notifier_block *nfb, unsigned long action,
|
|||
#endif /* CONFIG_HOTPLUG_CPU */
|
||||
|
||||
/**
|
||||
* fcoe_rcv - this is the fcoe receive function called by NET_RX_SOFTIRQ
|
||||
* fcoe_rcv() - this is the fcoe receive function called by NET_RX_SOFTIRQ
|
||||
* @skb: the receive skb
|
||||
* @dev: associated net device
|
||||
* @ptype: context
|
||||
|
@ -175,7 +174,7 @@ static int fcoe_cpu_callback(struct notifier_block *nfb, unsigned long action,
|
|||
* this function will receive the packet and build fc frame and pass it up
|
||||
*
|
||||
* Returns: 0 for success
|
||||
**/
|
||||
*/
|
||||
int fcoe_rcv(struct sk_buff *skb, struct net_device *dev,
|
||||
struct packet_type *ptype, struct net_device *olddev)
|
||||
{
|
||||
|
@ -265,11 +264,11 @@ err2:
|
|||
EXPORT_SYMBOL_GPL(fcoe_rcv);
|
||||
|
||||
/**
|
||||
* fcoe_start_io - pass to netdev to start xmit for fcoe
|
||||
* fcoe_start_io() - pass to netdev to start xmit for fcoe
|
||||
* @skb: the skb to be xmitted
|
||||
*
|
||||
* Returns: 0 for success
|
||||
**/
|
||||
*/
|
||||
static inline int fcoe_start_io(struct sk_buff *skb)
|
||||
{
|
||||
int rc;
|
||||
|
@ -283,12 +282,12 @@ static inline int fcoe_start_io(struct sk_buff *skb)
|
|||
}
|
||||
|
||||
/**
|
||||
* fcoe_get_paged_crc_eof - in case we need alloc a page for crc_eof
|
||||
* fcoe_get_paged_crc_eof() - in case we need alloc a page for crc_eof
|
||||
* @skb: the skb to be xmitted
|
||||
* @tlen: total len
|
||||
*
|
||||
* Returns: 0 for success
|
||||
**/
|
||||
*/
|
||||
static int fcoe_get_paged_crc_eof(struct sk_buff *skb, int tlen)
|
||||
{
|
||||
struct fcoe_percpu_s *fps;
|
||||
|
@ -326,13 +325,12 @@ static int fcoe_get_paged_crc_eof(struct sk_buff *skb, int tlen)
|
|||
}
|
||||
|
||||
/**
|
||||
* fcoe_fc_crc - calculates FC CRC in this fcoe skb
|
||||
* fcoe_fc_crc() - calculates FC CRC in this fcoe skb
|
||||
* @fp: the fc_frame containg data to be checksummed
|
||||
*
|
||||
* This uses crc32() to calculate the crc for fc frame
|
||||
* Return : 32 bit crc
|
||||
*
|
||||
**/
|
||||
*/
|
||||
u32 fcoe_fc_crc(struct fc_frame *fp)
|
||||
{
|
||||
struct sk_buff *skb = fp_skb(fp);
|
||||
|
@ -363,13 +361,12 @@ u32 fcoe_fc_crc(struct fc_frame *fp)
|
|||
EXPORT_SYMBOL_GPL(fcoe_fc_crc);
|
||||
|
||||
/**
|
||||
* fcoe_xmit - FCoE frame transmit function
|
||||
* fcoe_xmit() - FCoE frame transmit function
|
||||
* @lp: the associated local port
|
||||
* @fp: the fc_frame to be transmitted
|
||||
*
|
||||
* Return : 0 for success
|
||||
*
|
||||
**/
|
||||
*/
|
||||
int fcoe_xmit(struct fc_lport *lp, struct fc_frame *fp)
|
||||
{
|
||||
int wlen, rc = 0;
|
||||
|
@ -389,7 +386,7 @@ int fcoe_xmit(struct fc_lport *lp, struct fc_frame *fp)
|
|||
|
||||
WARN_ON((fr_len(fp) % sizeof(u32)) != 0);
|
||||
|
||||
fc = fcoe_softc(lp);
|
||||
fc = lport_priv(lp);
|
||||
/*
|
||||
* if it is a flogi then we need to learn gw-addr
|
||||
* and my own fcid
|
||||
|
@ -439,7 +436,7 @@ int fcoe_xmit(struct fc_lport *lp, struct fc_frame *fp)
|
|||
if (skb_is_nonlinear(skb)) {
|
||||
skb_frag_t *frag;
|
||||
if (fcoe_get_paged_crc_eof(skb, tlen)) {
|
||||
kfree(skb);
|
||||
kfree_skb(skb);
|
||||
return -ENOMEM;
|
||||
}
|
||||
frag = &skb_shinfo(skb)->frags[skb_shinfo(skb)->nr_frags - 1];
|
||||
|
@ -502,21 +499,22 @@ int fcoe_xmit(struct fc_lport *lp, struct fc_frame *fp)
|
|||
rc = fcoe_start_io(skb);
|
||||
|
||||
if (rc) {
|
||||
fcoe_insert_wait_queue(lp, skb);
|
||||
spin_lock_bh(&fc->fcoe_pending_queue.lock);
|
||||
__skb_queue_tail(&fc->fcoe_pending_queue, skb);
|
||||
spin_unlock_bh(&fc->fcoe_pending_queue.lock);
|
||||
if (fc->fcoe_pending_queue.qlen > FCOE_MAX_QUEUE_DEPTH)
|
||||
fc_pause(lp);
|
||||
lp->qfull = 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(fcoe_xmit);
|
||||
|
||||
/*
|
||||
* fcoe_percpu_receive_thread - recv thread per cpu
|
||||
/**
|
||||
* fcoe_percpu_receive_thread() - recv thread per cpu
|
||||
* @arg: ptr to the fcoe per cpu struct
|
||||
*
|
||||
* Return: 0 for success
|
||||
*
|
||||
*/
|
||||
int fcoe_percpu_receive_thread(void *arg)
|
||||
{
|
||||
|
@ -533,7 +531,7 @@ int fcoe_percpu_receive_thread(void *arg)
|
|||
struct fcoe_softc *fc;
|
||||
struct fcoe_hdr *hp;
|
||||
|
||||
set_user_nice(current, 19);
|
||||
set_user_nice(current, -20);
|
||||
|
||||
while (!kthread_should_stop()) {
|
||||
|
||||
|
@ -658,7 +656,7 @@ int fcoe_percpu_receive_thread(void *arg)
|
|||
}
|
||||
|
||||
/**
|
||||
* fcoe_recv_flogi - flogi receive function
|
||||
* fcoe_recv_flogi() - flogi receive function
|
||||
* @fc: associated fcoe_softc
|
||||
* @fp: the recieved frame
|
||||
* @sa: the source address of this flogi
|
||||
|
@ -667,7 +665,7 @@ int fcoe_percpu_receive_thread(void *arg)
|
|||
* mac address for the initiator, eitehr OUI based or GW based.
|
||||
*
|
||||
* Returns: none
|
||||
**/
|
||||
*/
|
||||
static void fcoe_recv_flogi(struct fcoe_softc *fc, struct fc_frame *fp, u8 *sa)
|
||||
{
|
||||
struct fc_frame_header *fh;
|
||||
|
@ -715,32 +713,23 @@ static void fcoe_recv_flogi(struct fcoe_softc *fc, struct fc_frame *fp, u8 *sa)
|
|||
}
|
||||
|
||||
/**
|
||||
* fcoe_watchdog - fcoe timer callback
|
||||
* fcoe_watchdog() - fcoe timer callback
|
||||
* @vp:
|
||||
*
|
||||
* This checks the pending queue length for fcoe and put fcoe to be paused state
|
||||
* This checks the pending queue length for fcoe and set lport qfull
|
||||
* if the FCOE_MAX_QUEUE_DEPTH is reached. This is done for all fc_lport on the
|
||||
* fcoe_hostlist.
|
||||
*
|
||||
* Returns: 0 for success
|
||||
**/
|
||||
*/
|
||||
void fcoe_watchdog(ulong vp)
|
||||
{
|
||||
struct fc_lport *lp;
|
||||
struct fcoe_softc *fc;
|
||||
int paused = 0;
|
||||
|
||||
read_lock(&fcoe_hostlist_lock);
|
||||
list_for_each_entry(fc, &fcoe_hostlist, list) {
|
||||
lp = fc->lp;
|
||||
if (lp) {
|
||||
if (fc->fcoe_pending_queue.qlen > FCOE_MAX_QUEUE_DEPTH)
|
||||
paused = 1;
|
||||
if (fcoe_check_wait_queue(lp) < FCOE_MAX_QUEUE_DEPTH) {
|
||||
if (paused)
|
||||
fc_unpause(lp);
|
||||
}
|
||||
}
|
||||
if (fc->lp)
|
||||
fcoe_check_wait_queue(fc->lp);
|
||||
}
|
||||
read_unlock(&fcoe_hostlist_lock);
|
||||
|
||||
|
@ -750,96 +739,64 @@ void fcoe_watchdog(ulong vp)
|
|||
|
||||
|
||||
/**
|
||||
* fcoe_check_wait_queue - put the skb into fcoe pending xmit queue
|
||||
* fcoe_check_wait_queue() - put the skb into fcoe pending xmit queue
|
||||
* @lp: the fc_port for this skb
|
||||
* @skb: the associated skb to be xmitted
|
||||
*
|
||||
* This empties the wait_queue, dequeue the head of the wait_queue queue
|
||||
* and calls fcoe_start_io() for each packet, if all skb have been
|
||||
* transmitted, return 0 if a error occurs, then restore wait_queue and
|
||||
* try again later.
|
||||
* transmitted, return qlen or -1 if a error occurs, then restore
|
||||
* wait_queue and try again later.
|
||||
*
|
||||
* The wait_queue is used when the skb transmit fails. skb will go
|
||||
* in the wait_queue which will be emptied by the time function OR
|
||||
* by the next skb transmit.
|
||||
*
|
||||
* Returns: 0 for success
|
||||
**/
|
||||
*/
|
||||
static int fcoe_check_wait_queue(struct fc_lport *lp)
|
||||
{
|
||||
int rc, unpause = 0;
|
||||
int paused = 0;
|
||||
struct fcoe_softc *fc = lport_priv(lp);
|
||||
struct sk_buff *skb;
|
||||
struct fcoe_softc *fc;
|
||||
int rc = -1;
|
||||
|
||||
fc = fcoe_softc(lp);
|
||||
spin_lock_bh(&fc->fcoe_pending_queue.lock);
|
||||
if (fc->fcoe_pending_queue_active)
|
||||
goto out;
|
||||
fc->fcoe_pending_queue_active = 1;
|
||||
|
||||
while (fc->fcoe_pending_queue.qlen) {
|
||||
/* keep qlen > 0 until fcoe_start_io succeeds */
|
||||
fc->fcoe_pending_queue.qlen++;
|
||||
skb = __skb_dequeue(&fc->fcoe_pending_queue);
|
||||
|
||||
/*
|
||||
* is this interface paused?
|
||||
*/
|
||||
if (fc->fcoe_pending_queue.qlen > FCOE_MAX_QUEUE_DEPTH)
|
||||
paused = 1;
|
||||
if (fc->fcoe_pending_queue.qlen) {
|
||||
while ((skb = __skb_dequeue(&fc->fcoe_pending_queue)) != NULL) {
|
||||
spin_unlock_bh(&fc->fcoe_pending_queue.lock);
|
||||
rc = fcoe_start_io(skb);
|
||||
spin_lock_bh(&fc->fcoe_pending_queue.lock);
|
||||
|
||||
if (rc) {
|
||||
fcoe_insert_wait_queue_head(lp, skb);
|
||||
__skb_queue_head(&fc->fcoe_pending_queue, skb);
|
||||
/* undo temporary increment above */
|
||||
fc->fcoe_pending_queue.qlen--;
|
||||
break;
|
||||
}
|
||||
/* undo temporary increment above */
|
||||
fc->fcoe_pending_queue.qlen--;
|
||||
}
|
||||
|
||||
if (fc->fcoe_pending_queue.qlen < FCOE_LOW_QUEUE_DEPTH)
|
||||
lp->qfull = 0;
|
||||
fc->fcoe_pending_queue_active = 0;
|
||||
rc = fc->fcoe_pending_queue.qlen;
|
||||
out:
|
||||
spin_unlock_bh(&fc->fcoe_pending_queue.lock);
|
||||
return rc;
|
||||
}
|
||||
spin_lock_bh(&fc->fcoe_pending_queue.lock);
|
||||
}
|
||||
if (fc->fcoe_pending_queue.qlen < FCOE_MAX_QUEUE_DEPTH)
|
||||
unpause = 1;
|
||||
}
|
||||
spin_unlock_bh(&fc->fcoe_pending_queue.lock);
|
||||
if ((unpause) && (paused))
|
||||
fc_unpause(lp);
|
||||
return fc->fcoe_pending_queue.qlen;
|
||||
}
|
||||
|
||||
/**
|
||||
* fcoe_insert_wait_queue_head - puts skb to fcoe pending queue head
|
||||
* @lp: the fc_port for this skb
|
||||
* @skb: the associated skb to be xmitted
|
||||
*
|
||||
* Returns: none
|
||||
**/
|
||||
static void fcoe_insert_wait_queue_head(struct fc_lport *lp,
|
||||
struct sk_buff *skb)
|
||||
{
|
||||
struct fcoe_softc *fc;
|
||||
|
||||
fc = fcoe_softc(lp);
|
||||
spin_lock_bh(&fc->fcoe_pending_queue.lock);
|
||||
__skb_queue_head(&fc->fcoe_pending_queue, skb);
|
||||
spin_unlock_bh(&fc->fcoe_pending_queue.lock);
|
||||
}
|
||||
|
||||
/**
|
||||
* fcoe_insert_wait_queue - put the skb into fcoe pending queue tail
|
||||
* @lp: the fc_port for this skb
|
||||
* @skb: the associated skb to be xmitted
|
||||
*
|
||||
* Returns: none
|
||||
**/
|
||||
static void fcoe_insert_wait_queue(struct fc_lport *lp,
|
||||
struct sk_buff *skb)
|
||||
{
|
||||
struct fcoe_softc *fc;
|
||||
|
||||
fc = fcoe_softc(lp);
|
||||
spin_lock_bh(&fc->fcoe_pending_queue.lock);
|
||||
__skb_queue_tail(&fc->fcoe_pending_queue, skb);
|
||||
spin_unlock_bh(&fc->fcoe_pending_queue.lock);
|
||||
}
|
||||
|
||||
/**
|
||||
* fcoe_dev_setup - setup link change notification interface
|
||||
*
|
||||
**/
|
||||
static void fcoe_dev_setup(void)
|
||||
* fcoe_dev_setup() - setup link change notification interface
|
||||
*/
|
||||
static void fcoe_dev_setup()
|
||||
{
|
||||
/*
|
||||
* here setup a interface specific wd time to
|
||||
|
@ -849,15 +806,15 @@ static void fcoe_dev_setup(void)
|
|||
}
|
||||
|
||||
/**
|
||||
* fcoe_dev_setup - cleanup link change notification interface
|
||||
**/
|
||||
* fcoe_dev_setup() - cleanup link change notification interface
|
||||
*/
|
||||
static void fcoe_dev_cleanup(void)
|
||||
{
|
||||
unregister_netdevice_notifier(&fcoe_notifier);
|
||||
}
|
||||
|
||||
/**
|
||||
* fcoe_device_notification - netdev event notification callback
|
||||
* fcoe_device_notification() - netdev event notification callback
|
||||
* @notifier: context of the notification
|
||||
* @event: type of event
|
||||
* @ptr: fixed array for output parsed ifname
|
||||
|
@ -865,7 +822,7 @@ static void fcoe_dev_cleanup(void)
|
|||
* This function is called by the ethernet driver in case of link change event
|
||||
*
|
||||
* Returns: 0 for success
|
||||
**/
|
||||
*/
|
||||
static int fcoe_device_notification(struct notifier_block *notifier,
|
||||
ulong event, void *ptr)
|
||||
{
|
||||
|
@ -873,7 +830,7 @@ static int fcoe_device_notification(struct notifier_block *notifier,
|
|||
struct net_device *real_dev = ptr;
|
||||
struct fcoe_softc *fc;
|
||||
struct fcoe_dev_stats *stats;
|
||||
u16 new_status;
|
||||
u32 new_link_up;
|
||||
u32 mfs;
|
||||
int rc = NOTIFY_OK;
|
||||
|
||||
|
@ -890,17 +847,15 @@ static int fcoe_device_notification(struct notifier_block *notifier,
|
|||
goto out;
|
||||
}
|
||||
|
||||
new_status = lp->link_status;
|
||||
new_link_up = lp->link_up;
|
||||
switch (event) {
|
||||
case NETDEV_DOWN:
|
||||
case NETDEV_GOING_DOWN:
|
||||
new_status &= ~FC_LINK_UP;
|
||||
new_link_up = 0;
|
||||
break;
|
||||
case NETDEV_UP:
|
||||
case NETDEV_CHANGE:
|
||||
new_status &= ~FC_LINK_UP;
|
||||
if (!fcoe_link_ok(lp))
|
||||
new_status |= FC_LINK_UP;
|
||||
new_link_up = !fcoe_link_ok(lp);
|
||||
break;
|
||||
case NETDEV_CHANGEMTU:
|
||||
mfs = fc->real_dev->mtu -
|
||||
|
@ -908,17 +863,15 @@ static int fcoe_device_notification(struct notifier_block *notifier,
|
|||
sizeof(struct fcoe_crc_eof));
|
||||
if (mfs >= FC_MIN_MAX_FRAME)
|
||||
fc_set_mfs(lp, mfs);
|
||||
new_status &= ~FC_LINK_UP;
|
||||
if (!fcoe_link_ok(lp))
|
||||
new_status |= FC_LINK_UP;
|
||||
new_link_up = !fcoe_link_ok(lp);
|
||||
break;
|
||||
case NETDEV_REGISTER:
|
||||
break;
|
||||
default:
|
||||
FC_DBG("unknown event %ld call", event);
|
||||
}
|
||||
if (lp->link_status != new_status) {
|
||||
if ((new_status & FC_LINK_UP) == FC_LINK_UP)
|
||||
if (lp->link_up != new_link_up) {
|
||||
if (new_link_up)
|
||||
fc_linkup(lp);
|
||||
else {
|
||||
stats = lp->dev_stats[smp_processor_id()];
|
||||
|
@ -933,12 +886,12 @@ out:
|
|||
}
|
||||
|
||||
/**
|
||||
* fcoe_if_to_netdev - parse a name buffer to get netdev
|
||||
* fcoe_if_to_netdev() - parse a name buffer to get netdev
|
||||
* @ifname: fixed array for output parsed ifname
|
||||
* @buffer: incoming buffer to be copied
|
||||
*
|
||||
* Returns: NULL or ptr to netdeive
|
||||
**/
|
||||
*/
|
||||
static struct net_device *fcoe_if_to_netdev(const char *buffer)
|
||||
{
|
||||
char *cp;
|
||||
|
@ -955,13 +908,13 @@ static struct net_device *fcoe_if_to_netdev(const char *buffer)
|
|||
}
|
||||
|
||||
/**
|
||||
* fcoe_netdev_to_module_owner - finds out the nic drive moddule of the netdev
|
||||
* fcoe_netdev_to_module_owner() - finds out the nic drive moddule of the netdev
|
||||
* @netdev: the target netdev
|
||||
*
|
||||
* Returns: ptr to the struct module, NULL for failure
|
||||
**/
|
||||
static struct module *fcoe_netdev_to_module_owner(
|
||||
const struct net_device *netdev)
|
||||
*/
|
||||
static struct module *
|
||||
fcoe_netdev_to_module_owner(const struct net_device *netdev)
|
||||
{
|
||||
struct device *dev;
|
||||
|
||||
|
@ -979,12 +932,14 @@ static struct module *fcoe_netdev_to_module_owner(
|
|||
}
|
||||
|
||||
/**
|
||||
* fcoe_ethdrv_get - holds the nic driver module by try_module_get() for
|
||||
* the corresponding netdev.
|
||||
* fcoe_ethdrv_get() - Hold the Ethernet driver
|
||||
* @netdev: the target netdev
|
||||
*
|
||||
* Holds the Ethernet driver module by try_module_get() for
|
||||
* the corresponding netdev.
|
||||
*
|
||||
* Returns: 0 for succsss
|
||||
**/
|
||||
*/
|
||||
static int fcoe_ethdrv_get(const struct net_device *netdev)
|
||||
{
|
||||
struct module *owner;
|
||||
|
@ -999,12 +954,14 @@ static int fcoe_ethdrv_get(const struct net_device *netdev)
|
|||
}
|
||||
|
||||
/**
|
||||
* fcoe_ethdrv_get - releases the nic driver module by module_put for
|
||||
* the corresponding netdev.
|
||||
* fcoe_ethdrv_put() - Release the Ethernet driver
|
||||
* @netdev: the target netdev
|
||||
*
|
||||
* Releases the Ethernet driver module by module_put for
|
||||
* the corresponding netdev.
|
||||
*
|
||||
* Returns: 0 for succsss
|
||||
**/
|
||||
*/
|
||||
static int fcoe_ethdrv_put(const struct net_device *netdev)
|
||||
{
|
||||
struct module *owner;
|
||||
|
@ -1020,12 +977,12 @@ static int fcoe_ethdrv_put(const struct net_device *netdev)
|
|||
}
|
||||
|
||||
/**
|
||||
* fcoe_destroy- handles the destroy from sysfs
|
||||
* fcoe_destroy() - handles the destroy from sysfs
|
||||
* @buffer: expcted to be a eth if name
|
||||
* @kp: associated kernel param
|
||||
*
|
||||
* Returns: 0 for success
|
||||
**/
|
||||
*/
|
||||
static int fcoe_destroy(const char *buffer, struct kernel_param *kp)
|
||||
{
|
||||
int rc;
|
||||
|
@ -1058,12 +1015,12 @@ out_nodev:
|
|||
}
|
||||
|
||||
/**
|
||||
* fcoe_create - handles the create call from sysfs
|
||||
* fcoe_create() - Handles the create call from sysfs
|
||||
* @buffer: expcted to be a eth if name
|
||||
* @kp: associated kernel param
|
||||
*
|
||||
* Returns: 0 for success
|
||||
**/
|
||||
*/
|
||||
static int fcoe_create(const char *buffer, struct kernel_param *kp)
|
||||
{
|
||||
int rc;
|
||||
|
@ -1104,8 +1061,8 @@ module_param_call(destroy, fcoe_destroy, NULL, NULL, S_IWUSR);
|
|||
__MODULE_PARM_TYPE(destroy, "string");
|
||||
MODULE_PARM_DESC(destroy, "Destroy fcoe port");
|
||||
|
||||
/*
|
||||
* fcoe_link_ok - check if link is ok for the fc_lport
|
||||
/**
|
||||
* fcoe_link_ok() - Check if link is ok for the fc_lport
|
||||
* @lp: ptr to the fc_lport
|
||||
*
|
||||
* Any permanently-disqualifying conditions have been previously checked.
|
||||
|
@ -1120,7 +1077,7 @@ MODULE_PARM_DESC(destroy, "Destroy fcoe port");
|
|||
*/
|
||||
int fcoe_link_ok(struct fc_lport *lp)
|
||||
{
|
||||
struct fcoe_softc *fc = fcoe_softc(lp);
|
||||
struct fcoe_softc *fc = lport_priv(lp);
|
||||
struct net_device *dev = fc->real_dev;
|
||||
struct ethtool_cmd ecmd = { ETHTOOL_GSET };
|
||||
int rc = 0;
|
||||
|
@ -1149,9 +1106,8 @@ int fcoe_link_ok(struct fc_lport *lp)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(fcoe_link_ok);
|
||||
|
||||
/*
|
||||
* fcoe_percpu_clean - frees skb of the corresponding lport from the per
|
||||
* cpu queue.
|
||||
/**
|
||||
* fcoe_percpu_clean() - Clear the pending skbs for an lport
|
||||
* @lp: the fc_lport
|
||||
*/
|
||||
void fcoe_percpu_clean(struct fc_lport *lp)
|
||||
|
@ -1185,11 +1141,11 @@ void fcoe_percpu_clean(struct fc_lport *lp)
|
|||
EXPORT_SYMBOL_GPL(fcoe_percpu_clean);
|
||||
|
||||
/**
|
||||
* fcoe_clean_pending_queue - dequeue skb and free it
|
||||
* fcoe_clean_pending_queue() - Dequeue a skb and free it
|
||||
* @lp: the corresponding fc_lport
|
||||
*
|
||||
* Returns: none
|
||||
**/
|
||||
*/
|
||||
void fcoe_clean_pending_queue(struct fc_lport *lp)
|
||||
{
|
||||
struct fcoe_softc *fc = lport_priv(lp);
|
||||
|
@ -1206,21 +1162,21 @@ void fcoe_clean_pending_queue(struct fc_lport *lp)
|
|||
EXPORT_SYMBOL_GPL(fcoe_clean_pending_queue);
|
||||
|
||||
/**
|
||||
* libfc_host_alloc - allocate a Scsi_Host with room for the fc_lport
|
||||
* libfc_host_alloc() - Allocate a Scsi_Host with room for the fc_lport
|
||||
* @sht: ptr to the scsi host templ
|
||||
* @priv_size: size of private data after fc_lport
|
||||
*
|
||||
* Returns: ptr to Scsi_Host
|
||||
* TODO - to libfc?
|
||||
* TODO: to libfc?
|
||||
*/
|
||||
static inline struct Scsi_Host *libfc_host_alloc(
|
||||
struct scsi_host_template *sht, int priv_size)
|
||||
static inline struct Scsi_Host *
|
||||
libfc_host_alloc(struct scsi_host_template *sht, int priv_size)
|
||||
{
|
||||
return scsi_host_alloc(sht, sizeof(struct fc_lport) + priv_size);
|
||||
}
|
||||
|
||||
/**
|
||||
* fcoe_host_alloc - allocate a Scsi_Host with room for the fcoe_softc
|
||||
* fcoe_host_alloc() - Allocate a Scsi_Host with room for the fcoe_softc
|
||||
* @sht: ptr to the scsi host templ
|
||||
* @priv_size: size of private data after fc_lport
|
||||
*
|
||||
|
@ -1232,8 +1188,8 @@ struct Scsi_Host *fcoe_host_alloc(struct scsi_host_template *sht, int priv_size)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(fcoe_host_alloc);
|
||||
|
||||
/*
|
||||
* fcoe_reset - resets the fcoe
|
||||
/**
|
||||
* fcoe_reset() - Resets the fcoe
|
||||
* @shost: shost the reset is from
|
||||
*
|
||||
* Returns: always 0
|
||||
|
@ -1246,8 +1202,8 @@ int fcoe_reset(struct Scsi_Host *shost)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(fcoe_reset);
|
||||
|
||||
/*
|
||||
* fcoe_wwn_from_mac - converts 48-bit IEEE MAC address to 64-bit FC WWN.
|
||||
/**
|
||||
* fcoe_wwn_from_mac() - Converts 48-bit IEEE MAC address to 64-bit FC WWN.
|
||||
* @mac: mac address
|
||||
* @scheme: check port
|
||||
* @port: port indicator for converting
|
||||
|
@ -1286,14 +1242,15 @@ u64 fcoe_wwn_from_mac(unsigned char mac[MAX_ADDR_LEN],
|
|||
return wwn;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(fcoe_wwn_from_mac);
|
||||
/*
|
||||
* fcoe_hostlist_lookup_softc - find the corresponding lport by a given device
|
||||
|
||||
/**
|
||||
* fcoe_hostlist_lookup_softc() - find the corresponding lport by a given device
|
||||
* @device: this is currently ptr to net_device
|
||||
*
|
||||
* Returns: NULL or the located fcoe_softc
|
||||
*/
|
||||
static struct fcoe_softc *fcoe_hostlist_lookup_softc(
|
||||
const struct net_device *dev)
|
||||
static struct fcoe_softc *
|
||||
fcoe_hostlist_lookup_softc(const struct net_device *dev)
|
||||
{
|
||||
struct fcoe_softc *fc;
|
||||
|
||||
|
@ -1308,8 +1265,8 @@ static struct fcoe_softc *fcoe_hostlist_lookup_softc(
|
|||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* fcoe_hostlist_lookup - find the corresponding lport by netdev
|
||||
/**
|
||||
* fcoe_hostlist_lookup() - Find the corresponding lport by netdev
|
||||
* @netdev: ptr to net_device
|
||||
*
|
||||
* Returns: 0 for success
|
||||
|
@ -1324,8 +1281,8 @@ struct fc_lport *fcoe_hostlist_lookup(const struct net_device *netdev)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(fcoe_hostlist_lookup);
|
||||
|
||||
/*
|
||||
* fcoe_hostlist_add - add a lport to lports list
|
||||
/**
|
||||
* fcoe_hostlist_add() - Add a lport to lports list
|
||||
* @lp: ptr to the fc_lport to badded
|
||||
*
|
||||
* Returns: 0 for success
|
||||
|
@ -1336,7 +1293,7 @@ int fcoe_hostlist_add(const struct fc_lport *lp)
|
|||
|
||||
fc = fcoe_hostlist_lookup_softc(fcoe_netdev(lp));
|
||||
if (!fc) {
|
||||
fc = fcoe_softc(lp);
|
||||
fc = lport_priv(lp);
|
||||
write_lock_bh(&fcoe_hostlist_lock);
|
||||
list_add_tail(&fc->list, &fcoe_hostlist);
|
||||
write_unlock_bh(&fcoe_hostlist_lock);
|
||||
|
@ -1345,8 +1302,8 @@ int fcoe_hostlist_add(const struct fc_lport *lp)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(fcoe_hostlist_add);
|
||||
|
||||
/*
|
||||
* fcoe_hostlist_remove - remove a lport from lports list
|
||||
/**
|
||||
* fcoe_hostlist_remove() - remove a lport from lports list
|
||||
* @lp: ptr to the fc_lport to badded
|
||||
*
|
||||
* Returns: 0 for success
|
||||
|
@ -1366,12 +1323,12 @@ int fcoe_hostlist_remove(const struct fc_lport *lp)
|
|||
EXPORT_SYMBOL_GPL(fcoe_hostlist_remove);
|
||||
|
||||
/**
|
||||
* fcoe_libfc_config - sets up libfc related properties for lport
|
||||
* fcoe_libfc_config() - sets up libfc related properties for lport
|
||||
* @lp: ptr to the fc_lport
|
||||
* @tt: libfc function template
|
||||
*
|
||||
* Returns : 0 for success
|
||||
**/
|
||||
*/
|
||||
int fcoe_libfc_config(struct fc_lport *lp, struct libfc_function_template *tt)
|
||||
{
|
||||
/* Set the function pointers set by the LLDD */
|
||||
|
@ -1389,14 +1346,14 @@ int fcoe_libfc_config(struct fc_lport *lp, struct libfc_function_template *tt)
|
|||
EXPORT_SYMBOL_GPL(fcoe_libfc_config);
|
||||
|
||||
/**
|
||||
* fcoe_init - fcoe module loading initialization
|
||||
* fcoe_init() - fcoe module loading initialization
|
||||
*
|
||||
* Initialization routine
|
||||
* 1. Will create fc transport software structure
|
||||
* 2. initialize the link list of port information structure
|
||||
*
|
||||
* Returns 0 on success, negative on failure
|
||||
**/
|
||||
*/
|
||||
static int __init fcoe_init(void)
|
||||
{
|
||||
int cpu;
|
||||
|
@ -1433,7 +1390,6 @@ static int __init fcoe_init(void)
|
|||
} else {
|
||||
fcoe_percpu[cpu] = NULL;
|
||||
kfree(p);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1443,11 +1399,9 @@ static int __init fcoe_init(void)
|
|||
*/
|
||||
fcoe_dev_setup();
|
||||
|
||||
init_timer(&fcoe_timer);
|
||||
fcoe_timer.data = 0;
|
||||
fcoe_timer.function = fcoe_watchdog;
|
||||
fcoe_timer.expires = (jiffies + (10 * HZ));
|
||||
add_timer(&fcoe_timer);
|
||||
setup_timer(&fcoe_timer, fcoe_watchdog, 0);
|
||||
|
||||
mod_timer(&fcoe_timer, jiffies + (10 * HZ));
|
||||
|
||||
/* initiatlize the fcoe transport */
|
||||
fcoe_transport_init();
|
||||
|
@ -1459,10 +1413,10 @@ static int __init fcoe_init(void)
|
|||
module_init(fcoe_init);
|
||||
|
||||
/**
|
||||
* fcoe_exit - fcoe module unloading cleanup
|
||||
* fcoe_exit() - fcoe module unloading cleanup
|
||||
*
|
||||
* Returns 0 on success, negative on failure
|
||||
**/
|
||||
*/
|
||||
static void __exit fcoe_exit(void)
|
||||
{
|
||||
u32 idx;
|
||||
|
@ -1483,7 +1437,7 @@ static void __exit fcoe_exit(void)
|
|||
*/
|
||||
del_timer_sync(&fcoe_timer);
|
||||
|
||||
/* releases the assocaited fcoe transport for each lport */
|
||||
/* releases the associated fcoe transport for each lport */
|
||||
list_for_each_entry_safe(fc, tmp, &fcoe_hostlist, list)
|
||||
fcoe_transport_release(fc->real_dev);
|
||||
|
||||
|
|
|
@ -103,7 +103,7 @@ lasi700_probe(struct parisc_device *dev)
|
|||
|
||||
hostdata = kzalloc(sizeof(*hostdata), GFP_KERNEL);
|
||||
if (!hostdata) {
|
||||
dev_printk(KERN_ERR, dev, "Failed to allocate host data\n");
|
||||
dev_printk(KERN_ERR, &dev->dev, "Failed to allocate host data\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
|
|
|
@ -64,7 +64,7 @@ static void fc_disc_single(struct fc_disc *, struct fc_disc_port *);
|
|||
static void fc_disc_restart(struct fc_disc *);
|
||||
|
||||
/**
|
||||
* fc_disc_lookup_rport - lookup a remote port by port_id
|
||||
* fc_disc_lookup_rport() - lookup a remote port by port_id
|
||||
* @lport: Fibre Channel host port instance
|
||||
* @port_id: remote port port_id to match
|
||||
*/
|
||||
|
@ -92,7 +92,7 @@ struct fc_rport *fc_disc_lookup_rport(const struct fc_lport *lport,
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_disc_stop_rports - delete all the remote ports associated with the lport
|
||||
* fc_disc_stop_rports() - delete all the remote ports associated with the lport
|
||||
* @disc: The discovery job to stop rports on
|
||||
*
|
||||
* Locking Note: This function expects that the lport mutex is locked before
|
||||
|
@ -117,7 +117,7 @@ void fc_disc_stop_rports(struct fc_disc *disc)
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_disc_rport_callback - Event handler for rport events
|
||||
* fc_disc_rport_callback() - Event handler for rport events
|
||||
* @lport: The lport which is receiving the event
|
||||
* @rport: The rport which the event has occured on
|
||||
* @event: The event that occured
|
||||
|
@ -151,7 +151,7 @@ static void fc_disc_rport_callback(struct fc_lport *lport,
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_disc_recv_rscn_req - Handle Registered State Change Notification (RSCN)
|
||||
* fc_disc_recv_rscn_req() - Handle Registered State Change Notification (RSCN)
|
||||
* @sp: Current sequence of the RSCN exchange
|
||||
* @fp: RSCN Frame
|
||||
* @lport: Fibre Channel host port instance
|
||||
|
@ -246,7 +246,7 @@ static void fc_disc_recv_rscn_req(struct fc_seq *sp, struct fc_frame *fp,
|
|||
list_del(&dp->peers);
|
||||
rport = lport->tt.rport_lookup(lport, dp->ids.port_id);
|
||||
if (rport) {
|
||||
rdata = RPORT_TO_PRIV(rport);
|
||||
rdata = rport->dd_data;
|
||||
list_del(&rdata->peers);
|
||||
lport->tt.rport_logoff(rport);
|
||||
}
|
||||
|
@ -265,7 +265,7 @@ reject:
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_disc_recv_req - Handle incoming requests
|
||||
* fc_disc_recv_req() - Handle incoming requests
|
||||
* @sp: Current sequence of the request exchange
|
||||
* @fp: The frame
|
||||
* @lport: The FC local port
|
||||
|
@ -294,7 +294,7 @@ static void fc_disc_recv_req(struct fc_seq *sp, struct fc_frame *fp,
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_disc_restart - Restart discovery
|
||||
* fc_disc_restart() - Restart discovery
|
||||
* @lport: FC discovery context
|
||||
*
|
||||
* Locking Note: This function expects that the disc mutex
|
||||
|
@ -322,7 +322,7 @@ static void fc_disc_restart(struct fc_disc *disc)
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_disc_start - Fibre Channel Target discovery
|
||||
* fc_disc_start() - Fibre Channel Target discovery
|
||||
* @lport: FC local port
|
||||
*
|
||||
* Returns non-zero if discovery cannot be started.
|
||||
|
@ -383,7 +383,7 @@ static struct fc_rport_operations fc_disc_rport_ops = {
|
|||
};
|
||||
|
||||
/**
|
||||
* fc_disc_new_target - Handle new target found by discovery
|
||||
* fc_disc_new_target() - Handle new target found by discovery
|
||||
* @lport: FC local port
|
||||
* @rport: The previous FC remote port (NULL if new remote port)
|
||||
* @ids: Identifiers for the new FC remote port
|
||||
|
@ -396,7 +396,7 @@ static int fc_disc_new_target(struct fc_disc *disc,
|
|||
struct fc_rport_identifiers *ids)
|
||||
{
|
||||
struct fc_lport *lport = disc->lport;
|
||||
struct fc_rport_libfc_priv *rp;
|
||||
struct fc_rport_libfc_priv *rdata;
|
||||
int error = 0;
|
||||
|
||||
if (rport && ids->port_name) {
|
||||
|
@ -430,15 +430,15 @@ static int fc_disc_new_target(struct fc_disc *disc,
|
|||
dp.ids.port_name = ids->port_name;
|
||||
dp.ids.node_name = ids->node_name;
|
||||
dp.ids.roles = ids->roles;
|
||||
rport = fc_rport_rogue_create(&dp);
|
||||
rport = lport->tt.rport_create(&dp);
|
||||
}
|
||||
if (!rport)
|
||||
error = -ENOMEM;
|
||||
}
|
||||
if (rport) {
|
||||
rp = rport->dd_data;
|
||||
rp->ops = &fc_disc_rport_ops;
|
||||
rp->rp_state = RPORT_ST_INIT;
|
||||
rdata = rport->dd_data;
|
||||
rdata->ops = &fc_disc_rport_ops;
|
||||
rdata->rp_state = RPORT_ST_INIT;
|
||||
lport->tt.rport_login(rport);
|
||||
}
|
||||
}
|
||||
|
@ -446,20 +446,20 @@ static int fc_disc_new_target(struct fc_disc *disc,
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_disc_del_target - Delete a target
|
||||
* fc_disc_del_target() - Delete a target
|
||||
* @disc: FC discovery context
|
||||
* @rport: The remote port to be removed
|
||||
*/
|
||||
static void fc_disc_del_target(struct fc_disc *disc, struct fc_rport *rport)
|
||||
{
|
||||
struct fc_lport *lport = disc->lport;
|
||||
struct fc_rport_libfc_priv *rdata = RPORT_TO_PRIV(rport);
|
||||
struct fc_rport_libfc_priv *rdata = rport->dd_data;
|
||||
list_del(&rdata->peers);
|
||||
lport->tt.rport_logoff(rport);
|
||||
}
|
||||
|
||||
/**
|
||||
* fc_disc_done - Discovery has been completed
|
||||
* fc_disc_done() - Discovery has been completed
|
||||
* @disc: FC discovery context
|
||||
*/
|
||||
static void fc_disc_done(struct fc_disc *disc)
|
||||
|
@ -479,7 +479,7 @@ static void fc_disc_done(struct fc_disc *disc)
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_disc_error - Handle error on dNS request
|
||||
* fc_disc_error() - Handle error on dNS request
|
||||
* @disc: FC discovery context
|
||||
* @fp: The frame pointer
|
||||
*/
|
||||
|
@ -519,7 +519,7 @@ static void fc_disc_error(struct fc_disc *disc, struct fc_frame *fp)
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_disc_gpn_ft_req - Send Get Port Names by FC-4 type (GPN_FT) request
|
||||
* fc_disc_gpn_ft_req() - Send Get Port Names by FC-4 type (GPN_FT) request
|
||||
* @lport: FC discovery context
|
||||
*
|
||||
* Locking Note: This function expects that the disc_mutex is locked
|
||||
|
@ -553,7 +553,7 @@ err:
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_disc_gpn_ft_parse - Parse the list of IDs and names resulting from a request
|
||||
* fc_disc_gpn_ft_parse() - Parse the list of IDs and names resulting from a request
|
||||
* @lport: Fibre Channel host port instance
|
||||
* @buf: GPN_FT response buffer
|
||||
* @len: size of response buffer
|
||||
|
@ -617,7 +617,7 @@ static int fc_disc_gpn_ft_parse(struct fc_disc *disc, void *buf, size_t len)
|
|||
|
||||
if ((dp.ids.port_id != fc_host_port_id(lport->host)) &&
|
||||
(dp.ids.port_name != lport->wwpn)) {
|
||||
rport = fc_rport_rogue_create(&dp);
|
||||
rport = lport->tt.rport_create(&dp);
|
||||
if (rport) {
|
||||
rdata = rport->dd_data;
|
||||
rdata->ops = &fc_disc_rport_ops;
|
||||
|
@ -658,7 +658,10 @@ static int fc_disc_gpn_ft_parse(struct fc_disc *disc, void *buf, size_t len)
|
|||
return error;
|
||||
}
|
||||
|
||||
/*
|
||||
/**
|
||||
* fc_disc_timeout() - Retry handler for the disc component
|
||||
* @work: Structure holding disc obj that needs retry discovery
|
||||
*
|
||||
* Handle retry of memory allocation for remote ports.
|
||||
*/
|
||||
static void fc_disc_timeout(struct work_struct *work)
|
||||
|
@ -673,7 +676,7 @@ static void fc_disc_timeout(struct work_struct *work)
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_disc_gpn_ft_resp - Handle a response frame from Get Port Names (GPN_FT)
|
||||
* fc_disc_gpn_ft_resp() - Handle a response frame from Get Port Names (GPN_FT)
|
||||
* @sp: Current sequence of GPN_FT exchange
|
||||
* @fp: response frame
|
||||
* @lp_arg: Fibre Channel host port instance
|
||||
|
@ -712,9 +715,7 @@ static void fc_disc_gpn_ft_resp(struct fc_seq *sp, struct fc_frame *fp,
|
|||
fr_len(fp));
|
||||
} else if (ntohs(cp->ct_cmd) == FC_FS_ACC) {
|
||||
|
||||
/*
|
||||
* Accepted. Parse response.
|
||||
*/
|
||||
/* Accepted, parse the response. */
|
||||
buf = cp + 1;
|
||||
len -= sizeof(*cp);
|
||||
} else if (ntohs(cp->ct_cmd) == FC_FS_RJT) {
|
||||
|
@ -746,7 +747,7 @@ static void fc_disc_gpn_ft_resp(struct fc_seq *sp, struct fc_frame *fp,
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_disc_single - Discover the directory information for a single target
|
||||
* fc_disc_single() - Discover the directory information for a single target
|
||||
* @lport: FC local port
|
||||
* @dp: The port to rediscover
|
||||
*
|
||||
|
@ -769,7 +770,7 @@ static void fc_disc_single(struct fc_disc *disc, struct fc_disc_port *dp)
|
|||
if (rport)
|
||||
fc_disc_del_target(disc, rport);
|
||||
|
||||
new_rport = fc_rport_rogue_create(dp);
|
||||
new_rport = lport->tt.rport_create(dp);
|
||||
if (new_rport) {
|
||||
rdata = new_rport->dd_data;
|
||||
rdata->ops = &fc_disc_rport_ops;
|
||||
|
@ -782,7 +783,7 @@ out:
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_disc_stop - Stop discovery for a given lport
|
||||
* fc_disc_stop() - Stop discovery for a given lport
|
||||
* @lport: The lport that discovery should stop for
|
||||
*/
|
||||
void fc_disc_stop(struct fc_lport *lport)
|
||||
|
@ -796,7 +797,7 @@ void fc_disc_stop(struct fc_lport *lport)
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_disc_stop_final - Stop discovery for a given lport
|
||||
* fc_disc_stop_final() - Stop discovery for a given lport
|
||||
* @lport: The lport that discovery should stop for
|
||||
*
|
||||
* This function will block until discovery has been
|
||||
|
@ -809,7 +810,7 @@ void fc_disc_stop_final(struct fc_lport *lport)
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_disc_init - Initialize the discovery block
|
||||
* fc_disc_init() - Initialize the discovery block
|
||||
* @lport: FC local port
|
||||
*/
|
||||
int fc_disc_init(struct fc_lport *lport)
|
||||
|
|
|
@ -32,8 +32,6 @@
|
|||
#include <scsi/libfc.h>
|
||||
#include <scsi/fc_encode.h>
|
||||
|
||||
#define FC_DEF_R_A_TOV (10 * 1000) /* resource allocation timeout */
|
||||
|
||||
/*
|
||||
* fc_exch_debug can be set in debugger or at compile time to get more logs.
|
||||
*/
|
||||
|
@ -627,7 +625,6 @@ static struct fc_exch *fc_exch_resp(struct fc_exch_mgr *mp, struct fc_frame *fp)
|
|||
{
|
||||
struct fc_exch *ep;
|
||||
struct fc_frame_header *fh;
|
||||
u16 rxid;
|
||||
|
||||
ep = mp->lp->tt.exch_get(mp->lp, fp);
|
||||
if (ep) {
|
||||
|
@ -654,18 +651,6 @@ static struct fc_exch *fc_exch_resp(struct fc_exch_mgr *mp, struct fc_frame *fp)
|
|||
if ((ntoh24(fh->fh_f_ctl) & FC_FC_SEQ_INIT) == 0)
|
||||
ep->esb_stat &= ~ESB_ST_SEQ_INIT;
|
||||
|
||||
/*
|
||||
* Set the responder ID in the frame header.
|
||||
* The old one should've been 0xffff.
|
||||
* If it isn't, don't assign one.
|
||||
* Incoming basic link service frames may specify
|
||||
* a referenced RX_ID.
|
||||
*/
|
||||
if (fh->fh_type != FC_TYPE_BLS) {
|
||||
rxid = ntohs(fh->fh_rx_id);
|
||||
WARN_ON(rxid != FC_XID_UNKNOWN);
|
||||
fh->fh_rx_id = htons(ep->rxid);
|
||||
}
|
||||
fc_exch_hold(ep); /* hold for caller */
|
||||
spin_unlock_bh(&ep->ex_lock); /* lock from exch_get */
|
||||
}
|
||||
|
@ -677,8 +662,8 @@ static struct fc_exch *fc_exch_resp(struct fc_exch_mgr *mp, struct fc_frame *fp)
|
|||
* If fc_pf_rjt_reason is FC_RJT_NONE then this function will have a hold
|
||||
* on the ep that should be released by the caller.
|
||||
*/
|
||||
static enum fc_pf_rjt_reason
|
||||
fc_seq_lookup_recip(struct fc_exch_mgr *mp, struct fc_frame *fp)
|
||||
static enum fc_pf_rjt_reason fc_seq_lookup_recip(struct fc_exch_mgr *mp,
|
||||
struct fc_frame *fp)
|
||||
{
|
||||
struct fc_frame_header *fh = fc_frame_header_get(fp);
|
||||
struct fc_exch *ep = NULL;
|
||||
|
@ -996,8 +981,8 @@ static void fc_seq_send_ack(struct fc_seq *sp, const struct fc_frame *rx_fp)
|
|||
* Send BLS Reject.
|
||||
* This is for rejecting BA_ABTS only.
|
||||
*/
|
||||
static void
|
||||
fc_exch_send_ba_rjt(struct fc_frame *rx_fp, enum fc_ba_rjt_reason reason,
|
||||
static void fc_exch_send_ba_rjt(struct fc_frame *rx_fp,
|
||||
enum fc_ba_rjt_reason reason,
|
||||
enum fc_ba_rjt_explan explan)
|
||||
{
|
||||
struct fc_frame *fp;
|
||||
|
@ -1096,7 +1081,7 @@ static void fc_exch_recv_abts(struct fc_exch *ep, struct fc_frame *rx_fp)
|
|||
ap->ba_high_seq_cnt = fh->fh_seq_cnt;
|
||||
ap->ba_low_seq_cnt = htons(sp->cnt);
|
||||
}
|
||||
sp = fc_seq_start_next(sp);
|
||||
sp = fc_seq_start_next_locked(sp);
|
||||
spin_unlock_bh(&ep->ex_lock);
|
||||
fc_seq_send_last(sp, fp, FC_RCTL_BA_ACC, FC_TYPE_BLS);
|
||||
fc_frame_free(rx_fp);
|
||||
|
@ -1480,10 +1465,11 @@ static void fc_exch_reset(struct fc_exch *ep)
|
|||
* If sid is non-zero, reset only exchanges we source from that FID.
|
||||
* If did is non-zero, reset only exchanges destined to that FID.
|
||||
*/
|
||||
void fc_exch_mgr_reset(struct fc_exch_mgr *mp, u32 sid, u32 did)
|
||||
void fc_exch_mgr_reset(struct fc_lport *lp, u32 sid, u32 did)
|
||||
{
|
||||
struct fc_exch *ep;
|
||||
struct fc_exch *next;
|
||||
struct fc_exch_mgr *mp = lp->emp;
|
||||
|
||||
spin_lock_bh(&mp->em_lock);
|
||||
restart:
|
||||
|
@ -1607,7 +1593,7 @@ static void fc_exch_rrq_resp(struct fc_seq *sp, struct fc_frame *fp, void *arg)
|
|||
if (IS_ERR(fp)) {
|
||||
int err = PTR_ERR(fp);
|
||||
|
||||
if (err == -FC_EX_CLOSED)
|
||||
if (err == -FC_EX_CLOSED || err == -FC_EX_TIMEOUT)
|
||||
goto cleanup;
|
||||
FC_DBG("Cannot process RRQ, because of frame error %d\n", err);
|
||||
return;
|
||||
|
|
|
@ -161,7 +161,7 @@ static struct fc_fcp_pkt *fc_fcp_pkt_alloc(struct fc_lport *lp, gfp_t gfp)
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_fcp_pkt_release - release hold on scsi_pkt packet
|
||||
* fc_fcp_pkt_release() - release hold on scsi_pkt packet
|
||||
* @fsp: fcp packet struct
|
||||
*
|
||||
* This is used by upper layer scsi driver.
|
||||
|
@ -183,8 +183,7 @@ static void fc_fcp_pkt_hold(struct fc_fcp_pkt *fsp)
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_fcp_pkt_destory - release hold on scsi_pkt packet
|
||||
*
|
||||
* fc_fcp_pkt_destory() - release hold on scsi_pkt packet
|
||||
* @seq: exchange sequence
|
||||
* @fsp: fcp packet struct
|
||||
*
|
||||
|
@ -199,7 +198,7 @@ static void fc_fcp_pkt_destroy(struct fc_seq *seq, void *fsp)
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_fcp_lock_pkt - lock a packet and get a ref to it.
|
||||
* fc_fcp_lock_pkt() - lock a packet and get a ref to it.
|
||||
* @fsp: fcp packet
|
||||
*
|
||||
* We should only return error if we return a command to scsi-ml before
|
||||
|
@ -291,9 +290,7 @@ static void fc_fcp_recv_data(struct fc_fcp_pkt *fsp, struct fc_frame *fp)
|
|||
buf = fc_frame_payload_get(fp, 0);
|
||||
|
||||
if (offset + len > fsp->data_len) {
|
||||
/*
|
||||
* this should never happen
|
||||
*/
|
||||
/* this should never happen */
|
||||
if ((fr_flags(fp) & FCPHF_CRC_UNCHECKED) &&
|
||||
fc_frame_crc_check(fp))
|
||||
goto crc_err;
|
||||
|
@ -387,8 +384,8 @@ crc_err:
|
|||
fc_fcp_complete_locked(fsp);
|
||||
}
|
||||
|
||||
/*
|
||||
* fc_fcp_send_data - Send SCSI data to target.
|
||||
/**
|
||||
* fc_fcp_send_data() - Send SCSI data to target.
|
||||
* @fsp: ptr to fc_fcp_pkt
|
||||
* @sp: ptr to this sequence
|
||||
* @offset: starting offset for this data request
|
||||
|
@ -610,8 +607,8 @@ static void fc_fcp_abts_resp(struct fc_fcp_pkt *fsp, struct fc_frame *fp)
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* fc_fcp_reduce_can_queue - drop can_queue
|
||||
/**
|
||||
* fc_fcp_reduce_can_queue() - drop can_queue
|
||||
* @lp: lport to drop queueing for
|
||||
*
|
||||
* If we are getting memory allocation failures, then we may
|
||||
|
@ -642,9 +639,11 @@ done:
|
|||
spin_unlock_irqrestore(lp->host->host_lock, flags);
|
||||
}
|
||||
|
||||
/*
|
||||
* exch mgr calls this routine to process scsi
|
||||
* exchanges.
|
||||
/**
|
||||
* fc_fcp_recv() - Reveive FCP frames
|
||||
* @seq: The sequence the frame is on
|
||||
* @fp: The FC frame
|
||||
* @arg: The related FCP packet
|
||||
*
|
||||
* Return : None
|
||||
* Context : called from Soft IRQ context
|
||||
|
@ -832,7 +831,7 @@ err:
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_fcp_complete_locked - complete processing of a fcp packet
|
||||
* fc_fcp_complete_locked() - complete processing of a fcp packet
|
||||
* @fsp: fcp packet
|
||||
*
|
||||
* This function may sleep if a timer is pending. The packet lock must be
|
||||
|
@ -900,7 +899,7 @@ static void fc_fcp_cleanup_cmd(struct fc_fcp_pkt *fsp, int error)
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_fcp_cleanup_each_cmd - run fn on each active command
|
||||
* fc_fcp_cleanup_each_cmd() - Cleanup active commads
|
||||
* @lp: logical port
|
||||
* @id: target id
|
||||
* @lun: lun
|
||||
|
@ -952,7 +951,7 @@ static void fc_fcp_abort_io(struct fc_lport *lp)
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_fcp_pkt_send - send a fcp packet to the lower level.
|
||||
* fc_fcp_pkt_send() - send a fcp packet to the lower level.
|
||||
* @lp: fc lport
|
||||
* @fsp: fc packet.
|
||||
*
|
||||
|
@ -1621,7 +1620,7 @@ out:
|
|||
static inline int fc_fcp_lport_queue_ready(struct fc_lport *lp)
|
||||
{
|
||||
/* lock ? */
|
||||
return (lp->state == LPORT_ST_READY) && (lp->link_status & FC_LINK_UP);
|
||||
return (lp->state == LPORT_ST_READY) && lp->link_up && !lp->qfull;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1727,7 +1726,7 @@ out:
|
|||
EXPORT_SYMBOL(fc_queuecommand);
|
||||
|
||||
/**
|
||||
* fc_io_compl - Handle responses for completed commands
|
||||
* fc_io_compl() - Handle responses for completed commands
|
||||
* @fsp: scsi packet
|
||||
*
|
||||
* Translates a error to a Linux SCSI error.
|
||||
|
@ -1810,12 +1809,12 @@ static void fc_io_compl(struct fc_fcp_pkt *fsp)
|
|||
sc_cmd->result = DID_ERROR << 16;
|
||||
break;
|
||||
case FC_DATA_UNDRUN:
|
||||
if (fsp->cdb_status == 0) {
|
||||
if ((fsp->cdb_status == 0) && !(fsp->req_flags & FC_SRB_READ)) {
|
||||
/*
|
||||
* scsi status is good but transport level
|
||||
* underrun. for read it should be an error??
|
||||
* underrun.
|
||||
*/
|
||||
sc_cmd->result = (DID_OK << 16) | fsp->cdb_status;
|
||||
sc_cmd->result = DID_OK << 16;
|
||||
} else {
|
||||
/*
|
||||
* scsi got underrun, this is an error
|
||||
|
@ -1857,7 +1856,7 @@ static void fc_io_compl(struct fc_fcp_pkt *fsp)
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_fcp_complete - complete processing of a fcp packet
|
||||
* fc_fcp_complete() - complete processing of a fcp packet
|
||||
* @fsp: fcp packet
|
||||
*
|
||||
* This function may sleep if a fsp timer is pending.
|
||||
|
@ -1874,9 +1873,10 @@ void fc_fcp_complete(struct fc_fcp_pkt *fsp)
|
|||
EXPORT_SYMBOL(fc_fcp_complete);
|
||||
|
||||
/**
|
||||
* fc_eh_abort - Abort a command...from scsi host template
|
||||
* fc_eh_abort() - Abort a command
|
||||
* @sc_cmd: scsi command to abort
|
||||
*
|
||||
* From scsi host template.
|
||||
* send ABTS to the target device and wait for the response
|
||||
* sc_cmd is the pointer to the command to be aborted.
|
||||
*/
|
||||
|
@ -1890,7 +1890,7 @@ int fc_eh_abort(struct scsi_cmnd *sc_cmd)
|
|||
lp = shost_priv(sc_cmd->device->host);
|
||||
if (lp->state != LPORT_ST_READY)
|
||||
return rc;
|
||||
else if (!(lp->link_status & FC_LINK_UP))
|
||||
else if (!lp->link_up)
|
||||
return rc;
|
||||
|
||||
spin_lock_irqsave(lp->host->host_lock, flags);
|
||||
|
@ -1920,7 +1920,7 @@ release_pkt:
|
|||
EXPORT_SYMBOL(fc_eh_abort);
|
||||
|
||||
/**
|
||||
* fc_eh_device_reset: Reset a single LUN
|
||||
* fc_eh_device_reset() Reset a single LUN
|
||||
* @sc_cmd: scsi command
|
||||
*
|
||||
* Set from scsi host template to send tm cmd to the target and wait for the
|
||||
|
@ -1973,7 +1973,7 @@ out:
|
|||
EXPORT_SYMBOL(fc_eh_device_reset);
|
||||
|
||||
/**
|
||||
* fc_eh_host_reset - The reset function will reset the ports on the host.
|
||||
* fc_eh_host_reset() - The reset function will reset the ports on the host.
|
||||
* @sc_cmd: scsi command
|
||||
*/
|
||||
int fc_eh_host_reset(struct scsi_cmnd *sc_cmd)
|
||||
|
@ -1999,7 +1999,7 @@ int fc_eh_host_reset(struct scsi_cmnd *sc_cmd)
|
|||
EXPORT_SYMBOL(fc_eh_host_reset);
|
||||
|
||||
/**
|
||||
* fc_slave_alloc - configure queue depth
|
||||
* fc_slave_alloc() - configure queue depth
|
||||
* @sdev: scsi device
|
||||
*
|
||||
* Configures queue depth based on host's cmd_per_len. If not set
|
||||
|
|
|
@ -139,7 +139,7 @@ static int fc_frame_drop(struct fc_lport *lport, struct fc_frame *fp)
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_lport_rport_callback - Event handler for rport events
|
||||
* fc_lport_rport_callback() - Event handler for rport events
|
||||
* @lport: The lport which is receiving the event
|
||||
* @rport: The rport which the event has occured on
|
||||
* @event: The event that occured
|
||||
|
@ -195,7 +195,7 @@ static void fc_lport_rport_callback(struct fc_lport *lport,
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_lport_state - Return a string which represents the lport's state
|
||||
* fc_lport_state() - Return a string which represents the lport's state
|
||||
* @lport: The lport whose state is to converted to a string
|
||||
*/
|
||||
static const char *fc_lport_state(struct fc_lport *lport)
|
||||
|
@ -209,7 +209,7 @@ static const char *fc_lport_state(struct fc_lport *lport)
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_lport_ptp_setup - Create an rport for point-to-point mode
|
||||
* fc_lport_ptp_setup() - Create an rport for point-to-point mode
|
||||
* @lport: The lport to attach the ptp rport to
|
||||
* @fid: The FID of the ptp rport
|
||||
* @remote_wwpn: The WWPN of the ptp rport
|
||||
|
@ -232,7 +232,7 @@ static void fc_lport_ptp_setup(struct fc_lport *lport,
|
|||
lport->ptp_rp = NULL;
|
||||
}
|
||||
|
||||
lport->ptp_rp = fc_rport_rogue_create(&dp);
|
||||
lport->ptp_rp = lport->tt.rport_create(&dp);
|
||||
|
||||
lport->tt.rport_login(lport->ptp_rp);
|
||||
|
||||
|
@ -250,7 +250,7 @@ void fc_get_host_port_state(struct Scsi_Host *shost)
|
|||
{
|
||||
struct fc_lport *lp = shost_priv(shost);
|
||||
|
||||
if ((lp->link_status & FC_LINK_UP) == FC_LINK_UP)
|
||||
if (lp->link_up)
|
||||
fc_host_port_state(shost) = FC_PORTSTATE_ONLINE;
|
||||
else
|
||||
fc_host_port_state(shost) = FC_PORTSTATE_OFFLINE;
|
||||
|
@ -351,7 +351,7 @@ static void fc_lport_add_fc4_type(struct fc_lport *lport, enum fc_fh_type type)
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_lport_recv_rlir_req - Handle received Registered Link Incident Report.
|
||||
* fc_lport_recv_rlir_req() - Handle received Registered Link Incident Report.
|
||||
* @lport: Fibre Channel local port recieving the RLIR
|
||||
* @sp: current sequence in the RLIR exchange
|
||||
* @fp: RLIR request frame
|
||||
|
@ -370,7 +370,7 @@ static void fc_lport_recv_rlir_req(struct fc_seq *sp, struct fc_frame *fp,
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_lport_recv_echo_req - Handle received ECHO request
|
||||
* fc_lport_recv_echo_req() - Handle received ECHO request
|
||||
* @lport: Fibre Channel local port recieving the ECHO
|
||||
* @sp: current sequence in the ECHO exchange
|
||||
* @fp: ECHO request frame
|
||||
|
@ -412,7 +412,7 @@ static void fc_lport_recv_echo_req(struct fc_seq *sp, struct fc_frame *in_fp,
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_lport_recv_echo_req - Handle received Request Node ID data request
|
||||
* fc_lport_recv_echo_req() - Handle received Request Node ID data request
|
||||
* @lport: Fibre Channel local port recieving the RNID
|
||||
* @sp: current sequence in the RNID exchange
|
||||
* @fp: RNID request frame
|
||||
|
@ -479,7 +479,7 @@ static void fc_lport_recv_rnid_req(struct fc_seq *sp, struct fc_frame *in_fp,
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_lport_recv_adisc_req - Handle received Address Discovery Request
|
||||
* fc_lport_recv_adisc_req() - Handle received Address Discovery Request
|
||||
* @lport: Fibre Channel local port recieving the ADISC
|
||||
* @sp: current sequence in the ADISC exchange
|
||||
* @fp: ADISC request frame
|
||||
|
@ -529,7 +529,7 @@ static void fc_lport_recv_adisc_req(struct fc_seq *sp, struct fc_frame *in_fp,
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_lport_recv_logo_req - Handle received fabric LOGO request
|
||||
* fc_lport_recv_logo_req() - Handle received fabric LOGO request
|
||||
* @lport: Fibre Channel local port recieving the LOGO
|
||||
* @sp: current sequence in the LOGO exchange
|
||||
* @fp: LOGO request frame
|
||||
|
@ -546,7 +546,7 @@ static void fc_lport_recv_logo_req(struct fc_seq *sp, struct fc_frame *fp,
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_fabric_login - Start the lport state machine
|
||||
* fc_fabric_login() - Start the lport state machine
|
||||
* @lport: The lport that should log into the fabric
|
||||
*
|
||||
* Locking Note: This function should not be called
|
||||
|
@ -568,7 +568,7 @@ int fc_fabric_login(struct fc_lport *lport)
|
|||
EXPORT_SYMBOL(fc_fabric_login);
|
||||
|
||||
/**
|
||||
* fc_linkup - Handler for transport linkup events
|
||||
* fc_linkup() - Handler for transport linkup events
|
||||
* @lport: The lport whose link is up
|
||||
*/
|
||||
void fc_linkup(struct fc_lport *lport)
|
||||
|
@ -577,8 +577,8 @@ void fc_linkup(struct fc_lport *lport)
|
|||
fc_host_port_id(lport->host));
|
||||
|
||||
mutex_lock(&lport->lp_mutex);
|
||||
if ((lport->link_status & FC_LINK_UP) != FC_LINK_UP) {
|
||||
lport->link_status |= FC_LINK_UP;
|
||||
if (!lport->link_up) {
|
||||
lport->link_up = 1;
|
||||
|
||||
if (lport->state == LPORT_ST_RESET)
|
||||
fc_lport_enter_flogi(lport);
|
||||
|
@ -588,7 +588,7 @@ void fc_linkup(struct fc_lport *lport)
|
|||
EXPORT_SYMBOL(fc_linkup);
|
||||
|
||||
/**
|
||||
* fc_linkdown - Handler for transport linkdown events
|
||||
* fc_linkdown() - Handler for transport linkdown events
|
||||
* @lport: The lport whose link is down
|
||||
*/
|
||||
void fc_linkdown(struct fc_lport *lport)
|
||||
|
@ -597,8 +597,8 @@ void fc_linkdown(struct fc_lport *lport)
|
|||
FC_DEBUG_LPORT("Link is down for port (%6x)\n",
|
||||
fc_host_port_id(lport->host));
|
||||
|
||||
if ((lport->link_status & FC_LINK_UP) == FC_LINK_UP) {
|
||||
lport->link_status &= ~(FC_LINK_UP);
|
||||
if (lport->link_up) {
|
||||
lport->link_up = 0;
|
||||
fc_lport_enter_reset(lport);
|
||||
lport->tt.fcp_cleanup(lport);
|
||||
}
|
||||
|
@ -607,48 +607,25 @@ void fc_linkdown(struct fc_lport *lport)
|
|||
EXPORT_SYMBOL(fc_linkdown);
|
||||
|
||||
/**
|
||||
* fc_pause - Pause the flow of frames
|
||||
* @lport: The lport to be paused
|
||||
*/
|
||||
void fc_pause(struct fc_lport *lport)
|
||||
{
|
||||
mutex_lock(&lport->lp_mutex);
|
||||
lport->link_status |= FC_PAUSE;
|
||||
mutex_unlock(&lport->lp_mutex);
|
||||
}
|
||||
EXPORT_SYMBOL(fc_pause);
|
||||
|
||||
/**
|
||||
* fc_unpause - Unpause the flow of frames
|
||||
* @lport: The lport to be unpaused
|
||||
*/
|
||||
void fc_unpause(struct fc_lport *lport)
|
||||
{
|
||||
mutex_lock(&lport->lp_mutex);
|
||||
lport->link_status &= ~(FC_PAUSE);
|
||||
mutex_unlock(&lport->lp_mutex);
|
||||
}
|
||||
EXPORT_SYMBOL(fc_unpause);
|
||||
|
||||
/**
|
||||
* fc_fabric_logoff - Logout of the fabric
|
||||
* fc_fabric_logoff() - Logout of the fabric
|
||||
* @lport: fc_lport pointer to logoff the fabric
|
||||
*
|
||||
* Return value:
|
||||
* 0 for success, -1 for failure
|
||||
**/
|
||||
*/
|
||||
int fc_fabric_logoff(struct fc_lport *lport)
|
||||
{
|
||||
lport->tt.disc_stop_final(lport);
|
||||
mutex_lock(&lport->lp_mutex);
|
||||
fc_lport_enter_logo(lport);
|
||||
mutex_unlock(&lport->lp_mutex);
|
||||
cancel_delayed_work_sync(&lport->retry_work);
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(fc_fabric_logoff);
|
||||
|
||||
/**
|
||||
* fc_lport_destroy - unregister a fc_lport
|
||||
* fc_lport_destroy() - unregister a fc_lport
|
||||
* @lport: fc_lport pointer to unregister
|
||||
*
|
||||
* Return value:
|
||||
|
@ -658,26 +635,25 @@ EXPORT_SYMBOL(fc_fabric_logoff);
|
|||
* clean-up all the allocated memory
|
||||
* and free up other system resources.
|
||||
*
|
||||
**/
|
||||
*/
|
||||
int fc_lport_destroy(struct fc_lport *lport)
|
||||
{
|
||||
lport->tt.frame_send = fc_frame_drop;
|
||||
lport->tt.fcp_abort_io(lport);
|
||||
lport->tt.exch_mgr_reset(lport->emp, 0, 0);
|
||||
lport->tt.exch_mgr_reset(lport, 0, 0);
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(fc_lport_destroy);
|
||||
|
||||
/**
|
||||
* fc_set_mfs - sets up the mfs for the corresponding fc_lport
|
||||
* fc_set_mfs() - sets up the mfs for the corresponding fc_lport
|
||||
* @lport: fc_lport pointer to unregister
|
||||
* @mfs: the new mfs for fc_lport
|
||||
*
|
||||
* Set mfs for the given fc_lport to the new mfs.
|
||||
*
|
||||
* Return: 0 for success
|
||||
*
|
||||
**/
|
||||
*/
|
||||
int fc_set_mfs(struct fc_lport *lport, u32 mfs)
|
||||
{
|
||||
unsigned int old_mfs;
|
||||
|
@ -706,7 +682,7 @@ int fc_set_mfs(struct fc_lport *lport, u32 mfs)
|
|||
EXPORT_SYMBOL(fc_set_mfs);
|
||||
|
||||
/**
|
||||
* fc_lport_disc_callback - Callback for discovery events
|
||||
* fc_lport_disc_callback() - Callback for discovery events
|
||||
* @lport: FC local port
|
||||
* @event: The discovery event
|
||||
*/
|
||||
|
@ -731,7 +707,7 @@ void fc_lport_disc_callback(struct fc_lport *lport, enum fc_disc_event event)
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_rport_enter_ready - Enter the ready state and start discovery
|
||||
* fc_rport_enter_ready() - Enter the ready state and start discovery
|
||||
* @lport: Fibre Channel local port that is ready
|
||||
*
|
||||
* Locking Note: The lport lock is expected to be held before calling
|
||||
|
@ -748,7 +724,7 @@ static void fc_lport_enter_ready(struct fc_lport *lport)
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_lport_recv_flogi_req - Receive a FLOGI request
|
||||
* fc_lport_recv_flogi_req() - Receive a FLOGI request
|
||||
* @sp_in: The sequence the FLOGI is on
|
||||
* @rx_fp: The frame the FLOGI is in
|
||||
* @lport: The lport that recieved the request
|
||||
|
@ -838,7 +814,7 @@ out:
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_lport_recv_req - The generic lport request handler
|
||||
* fc_lport_recv_req() - The generic lport request handler
|
||||
* @lport: The lport that received the request
|
||||
* @sp: The sequence the request is on
|
||||
* @fp: The frame the request is in
|
||||
|
@ -934,7 +910,7 @@ static void fc_lport_recv_req(struct fc_lport *lport, struct fc_seq *sp,
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_lport_reset - Reset an lport
|
||||
* fc_lport_reset() - Reset an lport
|
||||
* @lport: The lport which should be reset
|
||||
*
|
||||
* Locking Note: This functions should not be called with the
|
||||
|
@ -942,6 +918,7 @@ static void fc_lport_recv_req(struct fc_lport *lport, struct fc_seq *sp,
|
|||
*/
|
||||
int fc_lport_reset(struct fc_lport *lport)
|
||||
{
|
||||
cancel_delayed_work_sync(&lport->retry_work);
|
||||
mutex_lock(&lport->lp_mutex);
|
||||
fc_lport_enter_reset(lport);
|
||||
mutex_unlock(&lport->lp_mutex);
|
||||
|
@ -950,7 +927,7 @@ int fc_lport_reset(struct fc_lport *lport)
|
|||
EXPORT_SYMBOL(fc_lport_reset);
|
||||
|
||||
/**
|
||||
* fc_rport_enter_reset - Reset the local port
|
||||
* fc_rport_enter_reset() - Reset the local port
|
||||
* @lport: Fibre Channel local port to be reset
|
||||
*
|
||||
* Locking Note: The lport lock is expected to be held before calling
|
||||
|
@ -973,16 +950,16 @@ static void fc_lport_enter_reset(struct fc_lport *lport)
|
|||
|
||||
lport->tt.disc_stop(lport);
|
||||
|
||||
lport->tt.exch_mgr_reset(lport->emp, 0, 0);
|
||||
lport->tt.exch_mgr_reset(lport, 0, 0);
|
||||
fc_host_fabric_name(lport->host) = 0;
|
||||
fc_host_port_id(lport->host) = 0;
|
||||
|
||||
if ((lport->link_status & FC_LINK_UP) == FC_LINK_UP)
|
||||
if (lport->link_up)
|
||||
fc_lport_enter_flogi(lport);
|
||||
}
|
||||
|
||||
/**
|
||||
* fc_lport_error - Handler for any errors
|
||||
* fc_lport_error() - Handler for any errors
|
||||
* @lport: The fc_lport object
|
||||
* @fp: The frame pointer
|
||||
*
|
||||
|
@ -1029,7 +1006,7 @@ static void fc_lport_error(struct fc_lport *lport, struct fc_frame *fp)
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_lport_rft_id_resp - Handle response to Register Fibre
|
||||
* fc_lport_rft_id_resp() - Handle response to Register Fibre
|
||||
* Channel Types by ID (RPN_ID) request
|
||||
* @sp: current sequence in RPN_ID exchange
|
||||
* @fp: response frame
|
||||
|
@ -1053,17 +1030,17 @@ static void fc_lport_rft_id_resp(struct fc_seq *sp, struct fc_frame *fp,
|
|||
|
||||
FC_DEBUG_LPORT("Received a RFT_ID response\n");
|
||||
|
||||
if (IS_ERR(fp)) {
|
||||
fc_lport_error(lport, fp);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (lport->state != LPORT_ST_RFT_ID) {
|
||||
FC_DBG("Received a RFT_ID response, but in state %s\n",
|
||||
fc_lport_state(lport));
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (IS_ERR(fp)) {
|
||||
fc_lport_error(lport, fp);
|
||||
goto err;
|
||||
}
|
||||
|
||||
fh = fc_frame_header_get(fp);
|
||||
ct = fc_frame_payload_get(fp, sizeof(*ct));
|
||||
|
||||
|
@ -1081,7 +1058,7 @@ err:
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_lport_rpn_id_resp - Handle response to Register Port
|
||||
* fc_lport_rpn_id_resp() - Handle response to Register Port
|
||||
* Name by ID (RPN_ID) request
|
||||
* @sp: current sequence in RPN_ID exchange
|
||||
* @fp: response frame
|
||||
|
@ -1105,17 +1082,17 @@ static void fc_lport_rpn_id_resp(struct fc_seq *sp, struct fc_frame *fp,
|
|||
|
||||
FC_DEBUG_LPORT("Received a RPN_ID response\n");
|
||||
|
||||
if (IS_ERR(fp)) {
|
||||
fc_lport_error(lport, fp);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (lport->state != LPORT_ST_RPN_ID) {
|
||||
FC_DBG("Received a RPN_ID response, but in state %s\n",
|
||||
fc_lport_state(lport));
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (IS_ERR(fp)) {
|
||||
fc_lport_error(lport, fp);
|
||||
goto err;
|
||||
}
|
||||
|
||||
fh = fc_frame_header_get(fp);
|
||||
ct = fc_frame_payload_get(fp, sizeof(*ct));
|
||||
if (fh && ct && fh->fh_type == FC_TYPE_CT &&
|
||||
|
@ -1133,7 +1110,7 @@ err:
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_lport_scr_resp - Handle response to State Change Register (SCR) request
|
||||
* fc_lport_scr_resp() - Handle response to State Change Register (SCR) request
|
||||
* @sp: current sequence in SCR exchange
|
||||
* @fp: response frame
|
||||
* @lp_arg: Fibre Channel lport port instance that sent the registration request
|
||||
|
@ -1155,17 +1132,17 @@ static void fc_lport_scr_resp(struct fc_seq *sp, struct fc_frame *fp,
|
|||
|
||||
FC_DEBUG_LPORT("Received a SCR response\n");
|
||||
|
||||
if (IS_ERR(fp)) {
|
||||
fc_lport_error(lport, fp);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (lport->state != LPORT_ST_SCR) {
|
||||
FC_DBG("Received a SCR response, but in state %s\n",
|
||||
fc_lport_state(lport));
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (IS_ERR(fp)) {
|
||||
fc_lport_error(lport, fp);
|
||||
goto err;
|
||||
}
|
||||
|
||||
op = fc_frame_payload_op(fp);
|
||||
if (op == ELS_LS_ACC)
|
||||
fc_lport_enter_ready(lport);
|
||||
|
@ -1179,7 +1156,7 @@ err:
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_lport_enter_scr - Send a State Change Register (SCR) request
|
||||
* fc_lport_enter_scr() - Send a State Change Register (SCR) request
|
||||
* @lport: Fibre Channel local port to register for state changes
|
||||
*
|
||||
* Locking Note: The lport lock is expected to be held before calling
|
||||
|
@ -1206,7 +1183,7 @@ static void fc_lport_enter_scr(struct fc_lport *lport)
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_lport_enter_rft_id - Register FC4-types with the name server
|
||||
* fc_lport_enter_rft_id() - Register FC4-types with the name server
|
||||
* @lport: Fibre Channel local port to register
|
||||
*
|
||||
* Locking Note: The lport lock is expected to be held before calling
|
||||
|
@ -1248,7 +1225,7 @@ static void fc_lport_enter_rft_id(struct fc_lport *lport)
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_rport_enter_rft_id - Register port name with the name server
|
||||
* fc_rport_enter_rft_id() - Register port name with the name server
|
||||
* @lport: Fibre Channel local port to register
|
||||
*
|
||||
* Locking Note: The lport lock is expected to be held before calling
|
||||
|
@ -1281,7 +1258,7 @@ static struct fc_rport_operations fc_lport_rport_ops = {
|
|||
};
|
||||
|
||||
/**
|
||||
* fc_rport_enter_dns - Create a rport to the name server
|
||||
* fc_rport_enter_dns() - Create a rport to the name server
|
||||
* @lport: Fibre Channel local port requesting a rport for the name server
|
||||
*
|
||||
* Locking Note: The lport lock is expected to be held before calling
|
||||
|
@ -1304,7 +1281,7 @@ static void fc_lport_enter_dns(struct fc_lport *lport)
|
|||
|
||||
fc_lport_state_enter(lport, LPORT_ST_DNS);
|
||||
|
||||
rport = fc_rport_rogue_create(&dp);
|
||||
rport = lport->tt.rport_create(&dp);
|
||||
if (!rport)
|
||||
goto err;
|
||||
|
||||
|
@ -1318,7 +1295,7 @@ err:
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_lport_timeout - Handler for the retry_work timer.
|
||||
* fc_lport_timeout() - Handler for the retry_work timer.
|
||||
* @work: The work struct of the fc_lport
|
||||
*/
|
||||
static void fc_lport_timeout(struct work_struct *work)
|
||||
|
@ -1359,7 +1336,7 @@ static void fc_lport_timeout(struct work_struct *work)
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_lport_logo_resp - Handle response to LOGO request
|
||||
* fc_lport_logo_resp() - Handle response to LOGO request
|
||||
* @sp: current sequence in LOGO exchange
|
||||
* @fp: response frame
|
||||
* @lp_arg: Fibre Channel lport port instance that sent the LOGO request
|
||||
|
@ -1381,17 +1358,17 @@ static void fc_lport_logo_resp(struct fc_seq *sp, struct fc_frame *fp,
|
|||
|
||||
FC_DEBUG_LPORT("Received a LOGO response\n");
|
||||
|
||||
if (IS_ERR(fp)) {
|
||||
fc_lport_error(lport, fp);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (lport->state != LPORT_ST_LOGO) {
|
||||
FC_DBG("Received a LOGO response, but in state %s\n",
|
||||
fc_lport_state(lport));
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (IS_ERR(fp)) {
|
||||
fc_lport_error(lport, fp);
|
||||
goto err;
|
||||
}
|
||||
|
||||
op = fc_frame_payload_op(fp);
|
||||
if (op == ELS_LS_ACC)
|
||||
fc_lport_enter_reset(lport);
|
||||
|
@ -1405,7 +1382,7 @@ err:
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_rport_enter_logo - Logout of the fabric
|
||||
* fc_rport_enter_logo() - Logout of the fabric
|
||||
* @lport: Fibre Channel local port to be logged out
|
||||
*
|
||||
* Locking Note: The lport lock is expected to be held before calling
|
||||
|
@ -1437,7 +1414,7 @@ static void fc_lport_enter_logo(struct fc_lport *lport)
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_lport_flogi_resp - Handle response to FLOGI request
|
||||
* fc_lport_flogi_resp() - Handle response to FLOGI request
|
||||
* @sp: current sequence in FLOGI exchange
|
||||
* @fp: response frame
|
||||
* @lp_arg: Fibre Channel lport port instance that sent the FLOGI request
|
||||
|
@ -1465,17 +1442,17 @@ static void fc_lport_flogi_resp(struct fc_seq *sp, struct fc_frame *fp,
|
|||
|
||||
FC_DEBUG_LPORT("Received a FLOGI response\n");
|
||||
|
||||
if (IS_ERR(fp)) {
|
||||
fc_lport_error(lport, fp);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (lport->state != LPORT_ST_FLOGI) {
|
||||
FC_DBG("Received a FLOGI response, but in state %s\n",
|
||||
fc_lport_state(lport));
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (IS_ERR(fp)) {
|
||||
fc_lport_error(lport, fp);
|
||||
goto err;
|
||||
}
|
||||
|
||||
fh = fc_frame_header_get(fp);
|
||||
did = ntoh24(fh->fh_d_id);
|
||||
if (fc_frame_payload_op(fp) == ELS_LS_ACC && did != 0) {
|
||||
|
@ -1532,7 +1509,7 @@ err:
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_rport_enter_flogi - Send a FLOGI request to the fabric manager
|
||||
* fc_rport_enter_flogi() - Send a FLOGI request to the fabric manager
|
||||
* @lport: Fibre Channel local port to be logged in to the fabric
|
||||
*
|
||||
* Locking Note: The lport lock is expected to be held before calling
|
||||
|
|
|
@ -81,6 +81,7 @@ static void fc_rport_recv_logo_req(struct fc_rport *,
|
|||
struct fc_seq *, struct fc_frame *);
|
||||
static void fc_rport_timeout(struct work_struct *);
|
||||
static void fc_rport_error(struct fc_rport *, struct fc_frame *);
|
||||
static void fc_rport_error_retry(struct fc_rport *, struct fc_frame *);
|
||||
static void fc_rport_work(struct work_struct *);
|
||||
|
||||
static const char *fc_rport_state_names[] = {
|
||||
|
@ -145,7 +146,7 @@ struct fc_rport *fc_rport_rogue_create(struct fc_disc_port *dp)
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_rport_state - return a string for the state the rport is in
|
||||
* fc_rport_state() - return a string for the state the rport is in
|
||||
* @rport: The rport whose state we want to get a string for
|
||||
*/
|
||||
static const char *fc_rport_state(struct fc_rport *rport)
|
||||
|
@ -160,7 +161,7 @@ static const char *fc_rport_state(struct fc_rport *rport)
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_set_rport_loss_tmo - Set the remote port loss timeout in seconds.
|
||||
* fc_set_rport_loss_tmo() - Set the remote port loss timeout in seconds.
|
||||
* @rport: Pointer to Fibre Channel remote port structure
|
||||
* @timeout: timeout in seconds
|
||||
*/
|
||||
|
@ -174,12 +175,12 @@ void fc_set_rport_loss_tmo(struct fc_rport *rport, u32 timeout)
|
|||
EXPORT_SYMBOL(fc_set_rport_loss_tmo);
|
||||
|
||||
/**
|
||||
* fc_plogi_get_maxframe - Get max payload from the common service parameters
|
||||
* fc_plogi_get_maxframe() - Get max payload from the common service parameters
|
||||
* @flp: FLOGI payload structure
|
||||
* @maxval: upper limit, may be less than what is in the service parameters
|
||||
*/
|
||||
static unsigned int
|
||||
fc_plogi_get_maxframe(struct fc_els_flogi *flp, unsigned int maxval)
|
||||
static unsigned int fc_plogi_get_maxframe(struct fc_els_flogi *flp,
|
||||
unsigned int maxval)
|
||||
{
|
||||
unsigned int mfs;
|
||||
|
||||
|
@ -197,7 +198,7 @@ fc_plogi_get_maxframe(struct fc_els_flogi *flp, unsigned int maxval)
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_rport_state_enter - Change the rport's state
|
||||
* fc_rport_state_enter() - Change the rport's state
|
||||
* @rport: The rport whose state should change
|
||||
* @new: The new state of the rport
|
||||
*
|
||||
|
@ -214,6 +215,7 @@ static void fc_rport_state_enter(struct fc_rport *rport,
|
|||
|
||||
static void fc_rport_work(struct work_struct *work)
|
||||
{
|
||||
u32 port_id;
|
||||
struct fc_rport_libfc_priv *rdata =
|
||||
container_of(work, struct fc_rport_libfc_priv, event_work);
|
||||
enum fc_rport_event event;
|
||||
|
@ -279,14 +281,18 @@ static void fc_rport_work(struct work_struct *work)
|
|||
rport_ops->event_callback(lport, rport, event);
|
||||
if (trans_state == FC_PORTSTATE_ROGUE)
|
||||
put_device(&rport->dev);
|
||||
else
|
||||
else {
|
||||
port_id = rport->port_id;
|
||||
fc_remote_port_delete(rport);
|
||||
lport->tt.exch_mgr_reset(lport, 0, port_id);
|
||||
lport->tt.exch_mgr_reset(lport, port_id, 0);
|
||||
}
|
||||
} else
|
||||
mutex_unlock(&rdata->rp_mutex);
|
||||
}
|
||||
|
||||
/**
|
||||
* fc_rport_login - Start the remote port login state machine
|
||||
* fc_rport_login() - Start the remote port login state machine
|
||||
* @rport: Fibre Channel remote port
|
||||
*
|
||||
* Locking Note: Called without the rport lock held. This
|
||||
|
@ -309,7 +315,7 @@ int fc_rport_login(struct fc_rport *rport)
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_rport_logoff - Logoff and remove an rport
|
||||
* fc_rport_logoff() - Logoff and remove an rport
|
||||
* @rport: Fibre Channel remote port to be removed
|
||||
*
|
||||
* Locking Note: Called without the rport lock held. This
|
||||
|
@ -347,7 +353,7 @@ int fc_rport_logoff(struct fc_rport *rport)
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_rport_enter_ready - The rport is ready
|
||||
* fc_rport_enter_ready() - The rport is ready
|
||||
* @rport: Fibre Channel remote port that is ready
|
||||
*
|
||||
* Locking Note: The rport lock is expected to be held before calling
|
||||
|
@ -366,7 +372,7 @@ static void fc_rport_enter_ready(struct fc_rport *rport)
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_rport_timeout - Handler for the retry_work timer.
|
||||
* fc_rport_timeout() - Handler for the retry_work timer.
|
||||
* @work: The work struct of the fc_rport_libfc_priv
|
||||
*
|
||||
* Locking Note: Called without the rport lock held. This
|
||||
|
@ -405,37 +411,20 @@ static void fc_rport_timeout(struct work_struct *work)
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_rport_error - Handler for any errors
|
||||
* fc_rport_error() - Error handler, called once retries have been exhausted
|
||||
* @rport: The fc_rport object
|
||||
* @fp: The frame pointer
|
||||
*
|
||||
* If the error was caused by a resource allocation failure
|
||||
* then wait for half a second and retry, otherwise retry
|
||||
* immediately.
|
||||
*
|
||||
* Locking Note: The rport lock is expected to be held before
|
||||
* calling this routine
|
||||
*/
|
||||
static void fc_rport_error(struct fc_rport *rport, struct fc_frame *fp)
|
||||
{
|
||||
struct fc_rport_libfc_priv *rdata = rport->dd_data;
|
||||
unsigned long delay = 0;
|
||||
|
||||
FC_DEBUG_RPORT("Error %ld in state %s, retries %d\n",
|
||||
PTR_ERR(fp), fc_rport_state(rport), rdata->retries);
|
||||
|
||||
if (!fp || PTR_ERR(fp) == -FC_EX_TIMEOUT) {
|
||||
/*
|
||||
* Memory allocation failure, or the exchange timed out.
|
||||
* Retry after delay
|
||||
*/
|
||||
if (rdata->retries < rdata->local_port->max_retry_count) {
|
||||
rdata->retries++;
|
||||
if (!fp)
|
||||
delay = msecs_to_jiffies(500);
|
||||
get_device(&rport->dev);
|
||||
schedule_delayed_work(&rdata->retry_work, delay);
|
||||
} else {
|
||||
switch (rdata->rp_state) {
|
||||
case RPORT_ST_PLOGI:
|
||||
case RPORT_ST_PRLI:
|
||||
|
@ -453,11 +442,44 @@ static void fc_rport_error(struct fc_rport *rport, struct fc_frame *fp)
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* fc_rport_error_retry() - Error handler when retries are desired
|
||||
* @rport: The fc_rport object
|
||||
* @fp: The frame pointer
|
||||
*
|
||||
* If the error was an exchange timeout retry immediately,
|
||||
* otherwise wait for E_D_TOV.
|
||||
*
|
||||
* Locking Note: The rport lock is expected to be held before
|
||||
* calling this routine
|
||||
*/
|
||||
static void fc_rport_error_retry(struct fc_rport *rport, struct fc_frame *fp)
|
||||
{
|
||||
struct fc_rport_libfc_priv *rdata = rport->dd_data;
|
||||
unsigned long delay = FC_DEF_E_D_TOV;
|
||||
|
||||
/* make sure this isn't an FC_EX_CLOSED error, never retry those */
|
||||
if (PTR_ERR(fp) == -FC_EX_CLOSED)
|
||||
return fc_rport_error(rport, fp);
|
||||
|
||||
if (rdata->retries < rdata->local_port->max_retry_count) {
|
||||
FC_DEBUG_RPORT("Error %ld in state %s, retrying\n",
|
||||
PTR_ERR(fp), fc_rport_state(rport));
|
||||
rdata->retries++;
|
||||
/* no additional delay on exchange timeouts */
|
||||
if (PTR_ERR(fp) == -FC_EX_TIMEOUT)
|
||||
delay = 0;
|
||||
get_device(&rport->dev);
|
||||
schedule_delayed_work(&rdata->retry_work, delay);
|
||||
return;
|
||||
}
|
||||
|
||||
return fc_rport_error(rport, fp);
|
||||
}
|
||||
|
||||
/**
|
||||
* fc_rport_plogi_recv_resp - Handle incoming ELS PLOGI response
|
||||
* fc_rport_plogi_recv_resp() - Handle incoming ELS PLOGI response
|
||||
* @sp: current sequence in the PLOGI exchange
|
||||
* @fp: response frame
|
||||
* @rp_arg: Fibre Channel remote port
|
||||
|
@ -483,17 +505,17 @@ static void fc_rport_plogi_resp(struct fc_seq *sp, struct fc_frame *fp,
|
|||
FC_DEBUG_RPORT("Received a PLOGI response from port (%6x)\n",
|
||||
rport->port_id);
|
||||
|
||||
if (IS_ERR(fp)) {
|
||||
fc_rport_error_retry(rport, fp);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (rdata->rp_state != RPORT_ST_PLOGI) {
|
||||
FC_DBG("Received a PLOGI response, but in state %s\n",
|
||||
fc_rport_state(rport));
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (IS_ERR(fp)) {
|
||||
fc_rport_error(rport, fp);
|
||||
goto err;
|
||||
}
|
||||
|
||||
op = fc_frame_payload_op(fp);
|
||||
if (op == ELS_LS_ACC &&
|
||||
(plp = fc_frame_payload_get(fp, sizeof(*plp))) != NULL) {
|
||||
|
@ -522,7 +544,7 @@ static void fc_rport_plogi_resp(struct fc_seq *sp, struct fc_frame *fp,
|
|||
else
|
||||
fc_rport_enter_prli(rport);
|
||||
} else
|
||||
fc_rport_error(rport, fp);
|
||||
fc_rport_error_retry(rport, fp);
|
||||
|
||||
out:
|
||||
fc_frame_free(fp);
|
||||
|
@ -532,7 +554,7 @@ err:
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_rport_enter_plogi - Send Port Login (PLOGI) request to peer
|
||||
* fc_rport_enter_plogi() - Send Port Login (PLOGI) request to peer
|
||||
* @rport: Fibre Channel remote port to send PLOGI to
|
||||
*
|
||||
* Locking Note: The rport lock is expected to be held before calling
|
||||
|
@ -552,20 +574,20 @@ static void fc_rport_enter_plogi(struct fc_rport *rport)
|
|||
rport->maxframe_size = FC_MIN_MAX_PAYLOAD;
|
||||
fp = fc_frame_alloc(lport, sizeof(struct fc_els_flogi));
|
||||
if (!fp) {
|
||||
fc_rport_error(rport, fp);
|
||||
fc_rport_error_retry(rport, fp);
|
||||
return;
|
||||
}
|
||||
rdata->e_d_tov = lport->e_d_tov;
|
||||
|
||||
if (!lport->tt.elsct_send(lport, rport, fp, ELS_PLOGI,
|
||||
fc_rport_plogi_resp, rport, lport->e_d_tov))
|
||||
fc_rport_error(rport, fp);
|
||||
fc_rport_error_retry(rport, fp);
|
||||
else
|
||||
get_device(&rport->dev);
|
||||
}
|
||||
|
||||
/**
|
||||
* fc_rport_prli_resp - Process Login (PRLI) response handler
|
||||
* fc_rport_prli_resp() - Process Login (PRLI) response handler
|
||||
* @sp: current sequence in the PRLI exchange
|
||||
* @fp: response frame
|
||||
* @rp_arg: Fibre Channel remote port
|
||||
|
@ -592,17 +614,17 @@ static void fc_rport_prli_resp(struct fc_seq *sp, struct fc_frame *fp,
|
|||
FC_DEBUG_RPORT("Received a PRLI response from port (%6x)\n",
|
||||
rport->port_id);
|
||||
|
||||
if (IS_ERR(fp)) {
|
||||
fc_rport_error_retry(rport, fp);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (rdata->rp_state != RPORT_ST_PRLI) {
|
||||
FC_DBG("Received a PRLI response, but in state %s\n",
|
||||
fc_rport_state(rport));
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (IS_ERR(fp)) {
|
||||
fc_rport_error(rport, fp);
|
||||
goto err;
|
||||
}
|
||||
|
||||
op = fc_frame_payload_op(fp);
|
||||
if (op == ELS_LS_ACC) {
|
||||
pp = fc_frame_payload_get(fp, sizeof(*pp));
|
||||
|
@ -635,7 +657,7 @@ err:
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_rport_logo_resp - Logout (LOGO) response handler
|
||||
* fc_rport_logo_resp() - Logout (LOGO) response handler
|
||||
* @sp: current sequence in the LOGO exchange
|
||||
* @fp: response frame
|
||||
* @rp_arg: Fibre Channel remote port
|
||||
|
@ -657,7 +679,7 @@ static void fc_rport_logo_resp(struct fc_seq *sp, struct fc_frame *fp,
|
|||
rport->port_id);
|
||||
|
||||
if (IS_ERR(fp)) {
|
||||
fc_rport_error(rport, fp);
|
||||
fc_rport_error_retry(rport, fp);
|
||||
goto err;
|
||||
}
|
||||
|
||||
|
@ -684,7 +706,7 @@ err:
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_rport_enter_prli - Send Process Login (PRLI) request to peer
|
||||
* fc_rport_enter_prli() - Send Process Login (PRLI) request to peer
|
||||
* @rport: Fibre Channel remote port to send PRLI to
|
||||
*
|
||||
* Locking Note: The rport lock is expected to be held before calling
|
||||
|
@ -707,19 +729,19 @@ static void fc_rport_enter_prli(struct fc_rport *rport)
|
|||
|
||||
fp = fc_frame_alloc(lport, sizeof(*pp));
|
||||
if (!fp) {
|
||||
fc_rport_error(rport, fp);
|
||||
fc_rport_error_retry(rport, fp);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!lport->tt.elsct_send(lport, rport, fp, ELS_PRLI,
|
||||
fc_rport_prli_resp, rport, lport->e_d_tov))
|
||||
fc_rport_error(rport, fp);
|
||||
fc_rport_error_retry(rport, fp);
|
||||
else
|
||||
get_device(&rport->dev);
|
||||
}
|
||||
|
||||
/**
|
||||
* fc_rport_els_rtv_resp - Request Timeout Value response handler
|
||||
* fc_rport_els_rtv_resp() - Request Timeout Value response handler
|
||||
* @sp: current sequence in the RTV exchange
|
||||
* @fp: response frame
|
||||
* @rp_arg: Fibre Channel remote port
|
||||
|
@ -742,17 +764,17 @@ static void fc_rport_rtv_resp(struct fc_seq *sp, struct fc_frame *fp,
|
|||
FC_DEBUG_RPORT("Received a RTV response from port (%6x)\n",
|
||||
rport->port_id);
|
||||
|
||||
if (IS_ERR(fp)) {
|
||||
fc_rport_error(rport, fp);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (rdata->rp_state != RPORT_ST_RTV) {
|
||||
FC_DBG("Received a RTV response, but in state %s\n",
|
||||
fc_rport_state(rport));
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (IS_ERR(fp)) {
|
||||
fc_rport_error(rport, fp);
|
||||
goto err;
|
||||
}
|
||||
|
||||
op = fc_frame_payload_op(fp);
|
||||
if (op == ELS_LS_ACC) {
|
||||
struct fc_els_rtv_acc *rtv;
|
||||
|
@ -785,7 +807,7 @@ err:
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_rport_enter_rtv - Send Request Timeout Value (RTV) request to peer
|
||||
* fc_rport_enter_rtv() - Send Request Timeout Value (RTV) request to peer
|
||||
* @rport: Fibre Channel remote port to send RTV to
|
||||
*
|
||||
* Locking Note: The rport lock is expected to be held before calling
|
||||
|
@ -804,19 +826,19 @@ static void fc_rport_enter_rtv(struct fc_rport *rport)
|
|||
|
||||
fp = fc_frame_alloc(lport, sizeof(struct fc_els_rtv));
|
||||
if (!fp) {
|
||||
fc_rport_error(rport, fp);
|
||||
fc_rport_error_retry(rport, fp);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!lport->tt.elsct_send(lport, rport, fp, ELS_RTV,
|
||||
fc_rport_rtv_resp, rport, lport->e_d_tov))
|
||||
fc_rport_error(rport, fp);
|
||||
fc_rport_error_retry(rport, fp);
|
||||
else
|
||||
get_device(&rport->dev);
|
||||
}
|
||||
|
||||
/**
|
||||
* fc_rport_enter_logo - Send Logout (LOGO) request to peer
|
||||
* fc_rport_enter_logo() - Send Logout (LOGO) request to peer
|
||||
* @rport: Fibre Channel remote port to send LOGO to
|
||||
*
|
||||
* Locking Note: The rport lock is expected to be held before calling
|
||||
|
@ -835,20 +857,20 @@ static void fc_rport_enter_logo(struct fc_rport *rport)
|
|||
|
||||
fp = fc_frame_alloc(lport, sizeof(struct fc_els_logo));
|
||||
if (!fp) {
|
||||
fc_rport_error(rport, fp);
|
||||
fc_rport_error_retry(rport, fp);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!lport->tt.elsct_send(lport, rport, fp, ELS_LOGO,
|
||||
fc_rport_logo_resp, rport, lport->e_d_tov))
|
||||
fc_rport_error(rport, fp);
|
||||
fc_rport_error_retry(rport, fp);
|
||||
else
|
||||
get_device(&rport->dev);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* fc_rport_recv_req - Receive a request from a rport
|
||||
* fc_rport_recv_req() - Receive a request from a rport
|
||||
* @sp: current sequence in the PLOGI exchange
|
||||
* @fp: response frame
|
||||
* @rp_arg: Fibre Channel remote port
|
||||
|
@ -909,7 +931,7 @@ void fc_rport_recv_req(struct fc_seq *sp, struct fc_frame *fp,
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_rport_recv_plogi_req - Handle incoming Port Login (PLOGI) request
|
||||
* fc_rport_recv_plogi_req() - Handle incoming Port Login (PLOGI) request
|
||||
* @rport: Fibre Channel remote port that initiated PLOGI
|
||||
* @sp: current sequence in the PLOGI exchange
|
||||
* @fp: PLOGI request frame
|
||||
|
@ -1031,7 +1053,7 @@ static void fc_rport_recv_plogi_req(struct fc_rport *rport,
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_rport_recv_prli_req - Handle incoming Process Login (PRLI) request
|
||||
* fc_rport_recv_prli_req() - Handle incoming Process Login (PRLI) request
|
||||
* @rport: Fibre Channel remote port that initiated PRLI
|
||||
* @sp: current sequence in the PRLI exchange
|
||||
* @fp: PRLI request frame
|
||||
|
@ -1182,7 +1204,7 @@ static void fc_rport_recv_prli_req(struct fc_rport *rport,
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_rport_recv_prlo_req - Handle incoming Process Logout (PRLO) request
|
||||
* fc_rport_recv_prlo_req() - Handle incoming Process Logout (PRLO) request
|
||||
* @rport: Fibre Channel remote port that initiated PRLO
|
||||
* @sp: current sequence in the PRLO exchange
|
||||
* @fp: PRLO request frame
|
||||
|
@ -1213,7 +1235,7 @@ static void fc_rport_recv_prlo_req(struct fc_rport *rport, struct fc_seq *sp,
|
|||
}
|
||||
|
||||
/**
|
||||
* fc_rport_recv_logo_req - Handle incoming Logout (LOGO) request
|
||||
* fc_rport_recv_logo_req() - Handle incoming Logout (LOGO) request
|
||||
* @rport: Fibre Channel remote port that initiated LOGO
|
||||
* @sp: current sequence in the LOGO exchange
|
||||
* @fp: LOGO request frame
|
||||
|
@ -1249,6 +1271,9 @@ static void fc_rport_flush_queue(void)
|
|||
|
||||
int fc_rport_init(struct fc_lport *lport)
|
||||
{
|
||||
if (!lport->tt.rport_create)
|
||||
lport->tt.rport_create = fc_rport_rogue_create;
|
||||
|
||||
if (!lport->tt.rport_login)
|
||||
lport->tt.rport_login = fc_rport_login;
|
||||
|
||||
|
@ -1285,7 +1310,7 @@ void fc_rport_terminate_io(struct fc_rport *rport)
|
|||
struct fc_rport_libfc_priv *rdata = rport->dd_data;
|
||||
struct fc_lport *lport = rdata->local_port;
|
||||
|
||||
lport->tt.exch_mgr_reset(lport->emp, 0, rport->port_id);
|
||||
lport->tt.exch_mgr_reset(lport->emp, rport->port_id, 0);
|
||||
lport->tt.exch_mgr_reset(lport, 0, rport->port_id);
|
||||
lport->tt.exch_mgr_reset(lport, rport->port_id, 0);
|
||||
}
|
||||
EXPORT_SYMBOL(fc_rport_terminate_io);
|
||||
|
|
|
@ -244,12 +244,6 @@ qla2x00_sysfs_write_optrom_ctl(struct kobject *kobj,
|
|||
if (ha->optrom_state != QLA_SWAITING)
|
||||
break;
|
||||
|
||||
if (start & 0xfff) {
|
||||
qla_printk(KERN_WARNING, ha,
|
||||
"Invalid start region 0x%x/0x%x.\n", start, size);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ha->optrom_region_start = start;
|
||||
ha->optrom_region_size = start + size > ha->optrom_size ?
|
||||
ha->optrom_size - start : size;
|
||||
|
@ -303,8 +297,7 @@ qla2x00_sysfs_write_optrom_ctl(struct kobject *kobj,
|
|||
else if (start == (ha->flt_region_boot * 4) ||
|
||||
start == (ha->flt_region_fw * 4))
|
||||
valid = 1;
|
||||
else if ((IS_QLA25XX(ha) || IS_QLA81XX(ha)) &&
|
||||
start == (ha->flt_region_vpd_nvram * 4))
|
||||
else if (IS_QLA25XX(ha) || IS_QLA81XX(ha))
|
||||
valid = 1;
|
||||
if (!valid) {
|
||||
qla_printk(KERN_WARNING, ha,
|
||||
|
|
|
@ -1308,8 +1308,12 @@ qla2x00_init_rings(scsi_qla_host_t *vha)
|
|||
|
||||
DEBUG(printk("scsi(%ld): Issue init firmware.\n", vha->host_no));
|
||||
|
||||
if (ha->flags.npiv_supported)
|
||||
if (ha->flags.npiv_supported) {
|
||||
if (ha->operating_mode == LOOP)
|
||||
ha->max_npiv_vports = MIN_MULTI_ID_FABRIC - 1;
|
||||
mid_init_cb->count = cpu_to_le16(ha->max_npiv_vports);
|
||||
}
|
||||
|
||||
|
||||
mid_init_cb->options = __constant_cpu_to_le16(BIT_1);
|
||||
|
||||
|
@ -2610,6 +2614,7 @@ qla2x00_find_all_fabric_devs(scsi_qla_host_t *vha,
|
|||
port_id_t wrap, nxt_d_id;
|
||||
struct qla_hw_data *ha = vha->hw;
|
||||
struct scsi_qla_host *vp, *base_vha = pci_get_drvdata(ha->pdev);
|
||||
struct scsi_qla_host *tvp;
|
||||
|
||||
rval = QLA_SUCCESS;
|
||||
|
||||
|
@ -2709,7 +2714,7 @@ qla2x00_find_all_fabric_devs(scsi_qla_host_t *vha,
|
|||
/* Bypass virtual ports of the same host. */
|
||||
found = 0;
|
||||
if (ha->num_vhosts) {
|
||||
list_for_each_entry(vp, &ha->vp_list, list) {
|
||||
list_for_each_entry_safe(vp, tvp, &ha->vp_list, list) {
|
||||
if (new_fcport->d_id.b24 == vp->d_id.b24) {
|
||||
found = 1;
|
||||
break;
|
||||
|
@ -2832,6 +2837,7 @@ qla2x00_find_new_loop_id(scsi_qla_host_t *vha, fc_port_t *dev)
|
|||
uint16_t first_loop_id;
|
||||
struct qla_hw_data *ha = vha->hw;
|
||||
struct scsi_qla_host *vp;
|
||||
struct scsi_qla_host *tvp;
|
||||
|
||||
rval = QLA_SUCCESS;
|
||||
|
||||
|
@ -2856,7 +2862,7 @@ qla2x00_find_new_loop_id(scsi_qla_host_t *vha, fc_port_t *dev)
|
|||
/* Check for loop ID being already in use. */
|
||||
found = 0;
|
||||
fcport = NULL;
|
||||
list_for_each_entry(vp, &ha->vp_list, list) {
|
||||
list_for_each_entry_safe(vp, tvp, &ha->vp_list, list) {
|
||||
list_for_each_entry(fcport, &vp->vp_fcports, list) {
|
||||
if (fcport->loop_id == dev->loop_id &&
|
||||
fcport != dev) {
|
||||
|
@ -3291,6 +3297,7 @@ qla2x00_abort_isp(scsi_qla_host_t *vha)
|
|||
uint8_t status = 0;
|
||||
struct qla_hw_data *ha = vha->hw;
|
||||
struct scsi_qla_host *vp;
|
||||
struct scsi_qla_host *tvp;
|
||||
struct req_que *req = ha->req_q_map[0];
|
||||
|
||||
if (vha->flags.online) {
|
||||
|
@ -3306,7 +3313,7 @@ qla2x00_abort_isp(scsi_qla_host_t *vha)
|
|||
if (atomic_read(&vha->loop_state) != LOOP_DOWN) {
|
||||
atomic_set(&vha->loop_state, LOOP_DOWN);
|
||||
qla2x00_mark_all_devices_lost(vha, 0);
|
||||
list_for_each_entry(vp, &ha->vp_list, list)
|
||||
list_for_each_entry_safe(vp, tvp, &ha->vp_list, list)
|
||||
qla2x00_mark_all_devices_lost(vp, 0);
|
||||
} else {
|
||||
if (!atomic_read(&vha->loop_down_timer))
|
||||
|
@ -3403,7 +3410,7 @@ qla2x00_abort_isp(scsi_qla_host_t *vha)
|
|||
DEBUG(printk(KERN_INFO
|
||||
"qla2x00_abort_isp(%ld): succeeded.\n",
|
||||
vha->host_no));
|
||||
list_for_each_entry(vp, &ha->vp_list, list) {
|
||||
list_for_each_entry_safe(vp, tvp, &ha->vp_list, list) {
|
||||
if (vp->vp_idx)
|
||||
qla2x00_vp_abort_isp(vp);
|
||||
}
|
||||
|
@ -3428,7 +3435,7 @@ qla2x00_abort_isp(scsi_qla_host_t *vha)
|
|||
static int
|
||||
qla2x00_restart_isp(scsi_qla_host_t *vha)
|
||||
{
|
||||
uint8_t status = 0;
|
||||
int status = 0;
|
||||
uint32_t wait_time;
|
||||
struct qla_hw_data *ha = vha->hw;
|
||||
struct req_que *req = ha->req_q_map[0];
|
||||
|
|
|
@ -2685,6 +2685,7 @@ qla24xx_report_id_acquisition(scsi_qla_host_t *vha,
|
|||
uint16_t stat = le16_to_cpu(rptid_entry->vp_idx);
|
||||
struct qla_hw_data *ha = vha->hw;
|
||||
scsi_qla_host_t *vp;
|
||||
scsi_qla_host_t *tvp;
|
||||
|
||||
if (rptid_entry->entry_status != 0)
|
||||
return;
|
||||
|
@ -2710,7 +2711,7 @@ qla24xx_report_id_acquisition(scsi_qla_host_t *vha,
|
|||
if (MSB(stat) == 1)
|
||||
return;
|
||||
|
||||
list_for_each_entry(vp, &ha->vp_list, list)
|
||||
list_for_each_entry_safe(vp, tvp, &ha->vp_list, list)
|
||||
if (vp_idx == vp->vp_idx)
|
||||
break;
|
||||
if (!vp)
|
||||
|
|
|
@ -69,9 +69,10 @@ static scsi_qla_host_t *
|
|||
qla24xx_find_vhost_by_name(struct qla_hw_data *ha, uint8_t *port_name)
|
||||
{
|
||||
scsi_qla_host_t *vha;
|
||||
struct scsi_qla_host *tvha;
|
||||
|
||||
/* Locate matching device in database. */
|
||||
list_for_each_entry(vha, &ha->vp_list, list) {
|
||||
list_for_each_entry_safe(vha, tvha, &ha->vp_list, list) {
|
||||
if (!memcmp(port_name, vha->port_name, WWN_SIZE))
|
||||
return vha;
|
||||
}
|
||||
|
@ -194,11 +195,11 @@ qla24xx_configure_vp(scsi_qla_host_t *vha)
|
|||
void
|
||||
qla2x00_alert_all_vps(struct rsp_que *rsp, uint16_t *mb)
|
||||
{
|
||||
scsi_qla_host_t *vha;
|
||||
scsi_qla_host_t *vha, *tvha;
|
||||
struct qla_hw_data *ha = rsp->hw;
|
||||
int i = 0;
|
||||
|
||||
list_for_each_entry(vha, &ha->vp_list, list) {
|
||||
list_for_each_entry_safe(vha, tvha, &ha->vp_list, list) {
|
||||
if (vha->vp_idx) {
|
||||
switch (mb[0]) {
|
||||
case MBA_LIP_OCCURRED:
|
||||
|
@ -300,6 +301,7 @@ qla2x00_do_dpc_all_vps(scsi_qla_host_t *vha)
|
|||
int ret;
|
||||
struct qla_hw_data *ha = vha->hw;
|
||||
scsi_qla_host_t *vp;
|
||||
struct scsi_qla_host *tvp;
|
||||
|
||||
if (vha->vp_idx)
|
||||
return;
|
||||
|
@ -308,7 +310,7 @@ qla2x00_do_dpc_all_vps(scsi_qla_host_t *vha)
|
|||
|
||||
clear_bit(VP_DPC_NEEDED, &vha->dpc_flags);
|
||||
|
||||
list_for_each_entry(vp, &ha->vp_list, list) {
|
||||
list_for_each_entry_safe(vp, tvp, &ha->vp_list, list) {
|
||||
if (vp->vp_idx)
|
||||
ret = qla2x00_do_dpc_vp(vp);
|
||||
}
|
||||
|
|
|
@ -2222,10 +2222,6 @@ qla2x00_mem_alloc(struct qla_hw_data *ha, uint16_t req_len, uint16_t rsp_len,
|
|||
{
|
||||
char name[16];
|
||||
|
||||
ha->init_cb_size = sizeof(init_cb_t);
|
||||
if (IS_QLA2XXX_MIDTYPE(ha))
|
||||
ha->init_cb_size = sizeof(struct mid_init_cb_24xx);
|
||||
|
||||
ha->init_cb = dma_alloc_coherent(&ha->pdev->dev, ha->init_cb_size,
|
||||
&ha->init_cb_dma, GFP_KERNEL);
|
||||
if (!ha->init_cb)
|
||||
|
@ -2568,7 +2564,7 @@ qla2x00_do_work(struct scsi_qla_host *vha)
|
|||
void qla2x00_relogin(struct scsi_qla_host *vha)
|
||||
{
|
||||
fc_port_t *fcport;
|
||||
uint8_t status;
|
||||
int status;
|
||||
uint16_t next_loopid = 0;
|
||||
struct qla_hw_data *ha = vha->hw;
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
/*
|
||||
* Driver version
|
||||
*/
|
||||
#define QLA2XXX_VERSION "8.03.00-k3"
|
||||
#define QLA2XXX_VERSION "8.03.00-k4"
|
||||
|
||||
#define QLA_DRIVER_MAJOR_VER 8
|
||||
#define QLA_DRIVER_MINOR_VER 3
|
||||
|
|
|
@ -1167,23 +1167,19 @@ sd_spinup_disk(struct scsi_disk *sdkp)
|
|||
/*
|
||||
* The device does not want the automatic start to be issued.
|
||||
*/
|
||||
if (sdkp->device->no_start_on_add) {
|
||||
if (sdkp->device->no_start_on_add)
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* If manual intervention is required, or this is an
|
||||
* absent USB storage device, a spinup is meaningless.
|
||||
*/
|
||||
if (sense_valid &&
|
||||
sshdr.sense_key == NOT_READY &&
|
||||
sshdr.asc == 4 && sshdr.ascq == 3) {
|
||||
if (sense_valid && sshdr.sense_key == NOT_READY) {
|
||||
if (sshdr.asc == 4 && sshdr.ascq == 3)
|
||||
break; /* manual intervention required */
|
||||
|
||||
if (sshdr.asc == 4 && sshdr.ascq == 0xb)
|
||||
break; /* standby */
|
||||
if (sshdr.asc == 4 && sshdr.ascq == 0xc)
|
||||
break; /* unavailable */
|
||||
/*
|
||||
* Issue command to spin up drive when not ready
|
||||
*/
|
||||
} else if (sense_valid && sshdr.sense_key == NOT_READY) {
|
||||
if (!spintime) {
|
||||
sd_printk(KERN_NOTICE, sdkp, "Spinning up disk...");
|
||||
cmd[0] = START_STOP;
|
||||
|
|
|
@ -137,7 +137,7 @@ zalon_probe(struct parisc_device *dev)
|
|||
goto fail;
|
||||
|
||||
if (request_irq(dev->irq, ncr53c8xx_intr, IRQF_SHARED, "zalon", host)) {
|
||||
dev_printk(KERN_ERR, dev, "irq problem with %d, detaching\n ",
|
||||
dev_printk(KERN_ERR, &dev->dev, "irq problem with %d, detaching\n ",
|
||||
dev->irq);
|
||||
goto fail;
|
||||
}
|
||||
|
|
|
@ -685,19 +685,20 @@ EXPORT_SYMBOL(bio_integrity_split);
|
|||
* bio_integrity_clone - Callback for cloning bios with integrity metadata
|
||||
* @bio: New bio
|
||||
* @bio_src: Original bio
|
||||
* @gfp_mask: Memory allocation mask
|
||||
* @bs: bio_set to allocate bip from
|
||||
*
|
||||
* Description: Called to allocate a bip when cloning a bio
|
||||
*/
|
||||
int bio_integrity_clone(struct bio *bio, struct bio *bio_src,
|
||||
struct bio_set *bs)
|
||||
gfp_t gfp_mask, struct bio_set *bs)
|
||||
{
|
||||
struct bio_integrity_payload *bip_src = bio_src->bi_integrity;
|
||||
struct bio_integrity_payload *bip;
|
||||
|
||||
BUG_ON(bip_src == NULL);
|
||||
|
||||
bip = bio_integrity_alloc_bioset(bio, GFP_NOIO, bip_src->bip_vcnt, bs);
|
||||
bip = bio_integrity_alloc_bioset(bio, gfp_mask, bip_src->bip_vcnt, bs);
|
||||
|
||||
if (bip == NULL)
|
||||
return -EIO;
|
||||
|
|
6
fs/bio.c
6
fs/bio.c
|
@ -463,11 +463,13 @@ struct bio *bio_clone(struct bio *bio, gfp_t gfp_mask)
|
|||
if (bio_integrity(bio)) {
|
||||
int ret;
|
||||
|
||||
ret = bio_integrity_clone(b, bio, fs_bio_set);
|
||||
ret = bio_integrity_clone(b, bio, gfp_mask, fs_bio_set);
|
||||
|
||||
if (ret < 0)
|
||||
if (ret < 0) {
|
||||
bio_put(b);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
return b;
|
||||
}
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue