Merge commit 'v3.0.58' into android-3.0
Change-Id: I05959ed26f71cf9197df59291e8e13f254b2115c
This commit is contained in:
commit
fbad46f30d
221 changed files with 1700 additions and 779 deletions
|
|
@ -114,7 +114,7 @@ sub tda10045 {
|
|||
|
||||
sub tda10046 {
|
||||
my $sourcefile = "TT_PCI_2.19h_28_11_2006.zip";
|
||||
my $url = "http://www.tt-download.com/download/updates/219/$sourcefile";
|
||||
my $url = "http://technotrend.com.ua/download/software/219/$sourcefile";
|
||||
my $hash = "6a7e1e2f2644b162ff0502367553c72d";
|
||||
my $outfile = "dvb-fe-tda10046.fw";
|
||||
my $tmpdir = tempdir(DIR => "/tmp", CLEANUP => 1);
|
||||
|
|
|
|||
|
|
@ -6,14 +6,6 @@ be removed from this file.
|
|||
|
||||
---------------------------
|
||||
|
||||
What: x86 floppy disable_hlt
|
||||
When: 2012
|
||||
Why: ancient workaround of dubious utility clutters the
|
||||
code used by everybody else.
|
||||
Who: Len Brown <len.brown@intel.com>
|
||||
|
||||
---------------------------
|
||||
|
||||
What: CONFIG_APM_CPU_IDLE, and its ability to call APM BIOS in idle
|
||||
When: 2012
|
||||
Why: This optional sub-feature of APM is of dubious reliability,
|
||||
|
|
|
|||
|
|
@ -539,12 +539,14 @@ static int if_getconfig(char *ifname)
|
|||
metric = 0;
|
||||
} else
|
||||
metric = ifr.ifr_metric;
|
||||
printf("The result of SIOCGIFMETRIC is %d\n", metric);
|
||||
|
||||
strcpy(ifr.ifr_name, ifname);
|
||||
if (ioctl(skfd, SIOCGIFMTU, &ifr) < 0)
|
||||
mtu = 0;
|
||||
else
|
||||
mtu = ifr.ifr_mtu;
|
||||
printf("The result of SIOCGIFMTU is %d\n", mtu);
|
||||
|
||||
strcpy(ifr.ifr_name, ifname);
|
||||
if (ioctl(skfd, SIOCGIFDSTADDR, &ifr) < 0) {
|
||||
|
|
|
|||
|
|
@ -534,6 +534,11 @@ tcp_thin_dupack - BOOLEAN
|
|||
Documentation/networking/tcp-thin.txt
|
||||
Default: 0
|
||||
|
||||
tcp_challenge_ack_limit - INTEGER
|
||||
Limits number of Challenge ACK sent per second, as recommended
|
||||
in RFC 5961 (Improving TCP's Robustness to Blind In-Window Attacks)
|
||||
Default: 100
|
||||
|
||||
UDP variables:
|
||||
|
||||
udp_mem - vector of 3 INTEGERs: min, pressure, max
|
||||
|
|
|
|||
2
Makefile
2
Makefile
|
|
@ -1,6 +1,6 @@
|
|||
VERSION = 3
|
||||
PATCHLEVEL = 0
|
||||
SUBLEVEL = 50
|
||||
SUBLEVEL = 58
|
||||
EXTRAVERSION =
|
||||
NAME = Sneaky Weasel
|
||||
|
||||
|
|
|
|||
|
|
@ -18,8 +18,9 @@
|
|||
#define HWCAP_THUMBEE 2048
|
||||
#define HWCAP_NEON 4096
|
||||
#define HWCAP_VFPv3 8192
|
||||
#define HWCAP_VFPv3D16 16384
|
||||
#define HWCAP_VFPv3D16 (1 << 14) /* also set for VFPv4-D16 */
|
||||
#define HWCAP_TLS 32768
|
||||
#define HWCAP_VFPD32 (1 << 19) /* set if VFP has 32 regs (not 16) */
|
||||
|
||||
#if defined(__KERNEL__) && !defined(__ASSEMBLY__)
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -27,9 +27,9 @@
|
|||
#if __LINUX_ARM_ARCH__ <= 6
|
||||
ldr \tmp, =elf_hwcap @ may not have MVFR regs
|
||||
ldr \tmp, [\tmp, #0]
|
||||
tst \tmp, #HWCAP_VFPv3D16
|
||||
ldceql p11, cr0, [\base],#32*4 @ FLDMIAD \base!, {d16-d31}
|
||||
addne \base, \base, #32*4 @ step over unused register space
|
||||
tst \tmp, #HWCAP_VFPD32
|
||||
ldcnel p11, cr0, [\base],#32*4 @ FLDMIAD \base!, {d16-d31}
|
||||
addeq \base, \base, #32*4 @ step over unused register space
|
||||
#else
|
||||
VFPFMRX \tmp, MVFR0 @ Media and VFP Feature Register 0
|
||||
and \tmp, \tmp, #MVFR0_A_SIMD_MASK @ A_SIMD field
|
||||
|
|
@ -51,9 +51,9 @@
|
|||
#if __LINUX_ARM_ARCH__ <= 6
|
||||
ldr \tmp, =elf_hwcap @ may not have MVFR regs
|
||||
ldr \tmp, [\tmp, #0]
|
||||
tst \tmp, #HWCAP_VFPv3D16
|
||||
stceql p11, cr0, [\base],#32*4 @ FSTMIAD \base!, {d16-d31}
|
||||
addne \base, \base, #32*4 @ step over unused register space
|
||||
tst \tmp, #HWCAP_VFPD32
|
||||
stcnel p11, cr0, [\base],#32*4 @ FSTMIAD \base!, {d16-d31}
|
||||
addeq \base, \base, #32*4 @ step over unused register space
|
||||
#else
|
||||
VFPFMRX \tmp, MVFR0 @ Media and VFP Feature Register 0
|
||||
and \tmp, \tmp, #MVFR0_A_SIMD_MASK @ A_SIMD field
|
||||
|
|
|
|||
|
|
@ -108,10 +108,12 @@ static void set_segfault(struct pt_regs *regs, unsigned long addr)
|
|||
{
|
||||
siginfo_t info;
|
||||
|
||||
down_read(¤t->mm->mmap_sem);
|
||||
if (find_vma(current->mm, addr) == NULL)
|
||||
info.si_code = SEGV_MAPERR;
|
||||
else
|
||||
info.si_code = SEGV_ACCERR;
|
||||
up_read(¤t->mm->mmap_sem);
|
||||
|
||||
info.si_signo = SIGSEGV;
|
||||
info.si_errno = 0;
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ static inline int pmu_to_irq(int pin)
|
|||
|
||||
static inline int irq_to_pmu(int irq)
|
||||
{
|
||||
if (IRQ_DOVE_PMU_START < irq && irq < NR_IRQS)
|
||||
if (IRQ_DOVE_PMU_START <= irq && irq < NR_IRQS)
|
||||
return irq - IRQ_DOVE_PMU_START;
|
||||
|
||||
return -EINVAL;
|
||||
|
|
|
|||
|
|
@ -61,8 +61,20 @@ static void pmu_irq_ack(struct irq_data *d)
|
|||
int pin = irq_to_pmu(d->irq);
|
||||
u32 u;
|
||||
|
||||
/*
|
||||
* The PMU mask register is not RW0C: it is RW. This means that
|
||||
* the bits take whatever value is written to them; if you write
|
||||
* a '1', you will set the interrupt.
|
||||
*
|
||||
* Unfortunately this means there is NO race free way to clear
|
||||
* these interrupts.
|
||||
*
|
||||
* So, let's structure the code so that the window is as small as
|
||||
* possible.
|
||||
*/
|
||||
u = ~(1 << (pin & 31));
|
||||
writel(u, PMU_INTERRUPT_CAUSE);
|
||||
u &= readl_relaxed(PMU_INTERRUPT_CAUSE);
|
||||
writel_relaxed(u, PMU_INTERRUPT_CAUSE);
|
||||
}
|
||||
|
||||
static struct irq_chip pmu_irq_chip = {
|
||||
|
|
|
|||
|
|
@ -467,7 +467,7 @@ static void __init build_mem_type_table(void)
|
|||
}
|
||||
|
||||
for (i = 0; i < 16; i++) {
|
||||
unsigned long v = pgprot_val(protection_map[i]);
|
||||
pteval_t v = pgprot_val(protection_map[i]);
|
||||
protection_map[i] = __pgprot(v | user_pgprot);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -587,11 +587,14 @@ static int __init vfp_init(void)
|
|||
elf_hwcap |= HWCAP_VFPv3;
|
||||
|
||||
/*
|
||||
* Check for VFPv3 D16. CPUs in this configuration
|
||||
* only have 16 x 64bit registers.
|
||||
* Check for VFPv3 D16 and VFPv4 D16. CPUs in
|
||||
* this configuration only have 16 x 64bit
|
||||
* registers.
|
||||
*/
|
||||
if (((fmrx(MVFR0) & MVFR0_A_SIMD_MASK)) == 1)
|
||||
elf_hwcap |= HWCAP_VFPv3D16;
|
||||
elf_hwcap |= HWCAP_VFPv3D16; /* also v4-D16 */
|
||||
else
|
||||
elf_hwcap |= HWCAP_VFPD32;
|
||||
}
|
||||
#endif
|
||||
#ifdef CONFIG_NEON
|
||||
|
|
|
|||
|
|
@ -133,12 +133,39 @@ static inline void writel(unsigned int b, volatile void __iomem *addr)
|
|||
#define insb(port,addr,count) (cris_iops ? cris_iops->read_io(port,addr,1,count) : 0)
|
||||
#define insw(port,addr,count) (cris_iops ? cris_iops->read_io(port,addr,2,count) : 0)
|
||||
#define insl(port,addr,count) (cris_iops ? cris_iops->read_io(port,addr,4,count) : 0)
|
||||
#define outb(data,port) if (cris_iops) cris_iops->write_io(port,(void*)(unsigned)data,1,1)
|
||||
#define outw(data,port) if (cris_iops) cris_iops->write_io(port,(void*)(unsigned)data,2,1)
|
||||
#define outl(data,port) if (cris_iops) cris_iops->write_io(port,(void*)(unsigned)data,4,1)
|
||||
#define outsb(port,addr,count) if(cris_iops) cris_iops->write_io(port,(void*)addr,1,count)
|
||||
#define outsw(port,addr,count) if(cris_iops) cris_iops->write_io(port,(void*)addr,2,count)
|
||||
#define outsl(port,addr,count) if(cris_iops) cris_iops->write_io(port,(void*)addr,3,count)
|
||||
static inline void outb(unsigned char data, unsigned int port)
|
||||
{
|
||||
if (cris_iops)
|
||||
cris_iops->write_io(port, (void *) &data, 1, 1);
|
||||
}
|
||||
static inline void outw(unsigned short data, unsigned int port)
|
||||
{
|
||||
if (cris_iops)
|
||||
cris_iops->write_io(port, (void *) &data, 2, 1);
|
||||
}
|
||||
static inline void outl(unsigned int data, unsigned int port)
|
||||
{
|
||||
if (cris_iops)
|
||||
cris_iops->write_io(port, (void *) &data, 4, 1);
|
||||
}
|
||||
static inline void outsb(unsigned int port, const void *addr,
|
||||
unsigned long count)
|
||||
{
|
||||
if (cris_iops)
|
||||
cris_iops->write_io(port, (void *)addr, 1, count);
|
||||
}
|
||||
static inline void outsw(unsigned int port, const void *addr,
|
||||
unsigned long count)
|
||||
{
|
||||
if (cris_iops)
|
||||
cris_iops->write_io(port, (void *)addr, 2, count);
|
||||
}
|
||||
static inline void outsl(unsigned int port, const void *addr,
|
||||
unsigned long count)
|
||||
{
|
||||
if (cris_iops)
|
||||
cris_iops->write_io(port, (void *)addr, 4, count);
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert a physical pointer to a virtual kernel pointer for /dev/mem
|
||||
|
|
|
|||
|
|
@ -156,7 +156,7 @@ typedef struct sigaltstack {
|
|||
static inline void sigaddset(sigset_t *set, int _sig)
|
||||
{
|
||||
asm ("bfset %0{%1,#1}"
|
||||
: "+od" (*set)
|
||||
: "+o" (*set)
|
||||
: "id" ((_sig - 1) ^ 31)
|
||||
: "cc");
|
||||
}
|
||||
|
|
@ -164,7 +164,7 @@ static inline void sigaddset(sigset_t *set, int _sig)
|
|||
static inline void sigdelset(sigset_t *set, int _sig)
|
||||
{
|
||||
asm ("bfclr %0{%1,#1}"
|
||||
: "+od" (*set)
|
||||
: "+o" (*set)
|
||||
: "id" ((_sig - 1) ^ 31)
|
||||
: "cc");
|
||||
}
|
||||
|
|
@ -180,7 +180,7 @@ static inline int __gen_sigismember(sigset_t *set, int _sig)
|
|||
int ret;
|
||||
asm ("bfextu %1{%2,#1},%0"
|
||||
: "=d" (ret)
|
||||
: "od" (*set), "id" ((_sig-1) ^ 31)
|
||||
: "o" (*set), "id" ((_sig-1) ^ 31)
|
||||
: "cc");
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -236,7 +236,7 @@ KBUILD_CPPFLAGS += -D"DATAOFFSET=$(if $(dataoffset-y),$(dataoffset-y),0)"
|
|||
LDFLAGS += -m $(ld-emul)
|
||||
|
||||
ifdef CONFIG_MIPS
|
||||
CHECKFLAGS += $(shell $(CC) $(KBUILD_CFLAGS) -dM -E -xc /dev/null | \
|
||||
CHECKFLAGS += $(shell $(CC) $(KBUILD_CFLAGS) -dM -E -x c /dev/null | \
|
||||
egrep -vw '__GNUC_(|MINOR_|PATCHLEVEL_)_' | \
|
||||
sed -e 's/^\#define /-D/' -e "s/ /='/" -e "s/$$/'/")
|
||||
ifdef CONFIG_64BIT
|
||||
|
|
|
|||
|
|
@ -100,7 +100,7 @@ obj-$(CONFIG_MIPS_MACHINE) += mips_machine.o
|
|||
|
||||
obj-$(CONFIG_OF) += prom.o
|
||||
|
||||
CFLAGS_cpu-bugs64.o = $(shell if $(CC) $(KBUILD_CFLAGS) -Wa,-mdaddi -c -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-DHAVE_AS_SET_DADDI"; fi)
|
||||
CFLAGS_cpu-bugs64.o = $(shell if $(CC) $(KBUILD_CFLAGS) -Wa,-mdaddi -c -o /dev/null -x c /dev/null >/dev/null 2>&1; then echo "-DHAVE_AS_SET_DADDI"; fi)
|
||||
|
||||
obj-$(CONFIG_HAVE_STD_PC_SERIAL_PORT) += 8250-platform.o
|
||||
|
||||
|
|
|
|||
|
|
@ -67,7 +67,8 @@ put_sigset32(compat_sigset_t __user *up, sigset_t *set, size_t sz)
|
|||
{
|
||||
compat_sigset_t s;
|
||||
|
||||
if (sz != sizeof *set) panic("put_sigset32()");
|
||||
if (sz != sizeof *set)
|
||||
return -EINVAL;
|
||||
sigset_64to32(&s, set);
|
||||
|
||||
return copy_to_user(up, &s, sizeof s);
|
||||
|
|
@ -79,7 +80,8 @@ get_sigset32(compat_sigset_t __user *up, sigset_t *set, size_t sz)
|
|||
compat_sigset_t s;
|
||||
int r;
|
||||
|
||||
if (sz != sizeof *set) panic("put_sigset32()");
|
||||
if (sz != sizeof *set)
|
||||
return -EINVAL;
|
||||
|
||||
if ((r = copy_from_user(&s, up, sz)) == 0) {
|
||||
sigset_32to64(set, &s);
|
||||
|
|
|
|||
|
|
@ -73,6 +73,8 @@ static unsigned long get_shared_area(struct address_space *mapping,
|
|||
struct vm_area_struct *vma;
|
||||
int offset = mapping ? get_offset(mapping) : 0;
|
||||
|
||||
offset = (offset + (pgoff << PAGE_SHIFT)) & 0x3FF000;
|
||||
|
||||
addr = DCACHE_ALIGN(addr - offset) + offset;
|
||||
|
||||
for (vma = find_vma(current->mm, addr); ; vma = vma->vm_next) {
|
||||
|
|
|
|||
|
|
@ -1497,9 +1497,14 @@ long arch_ptrace(struct task_struct *child, long request,
|
|||
if (index < PT_FPR0) {
|
||||
tmp = ptrace_get_reg(child, (int) index);
|
||||
} else {
|
||||
unsigned int fpidx = index - PT_FPR0;
|
||||
|
||||
flush_fp_to_thread(child);
|
||||
tmp = ((unsigned long *)child->thread.fpr)
|
||||
[TS_FPRWIDTH * (index - PT_FPR0)];
|
||||
if (fpidx < (PT_FPSCR - PT_FPR0))
|
||||
tmp = ((unsigned long *)child->thread.fpr)
|
||||
[fpidx * TS_FPRWIDTH];
|
||||
else
|
||||
tmp = child->thread.fpscr.val;
|
||||
}
|
||||
ret = put_user(tmp, datalp);
|
||||
break;
|
||||
|
|
@ -1525,9 +1530,14 @@ long arch_ptrace(struct task_struct *child, long request,
|
|||
if (index < PT_FPR0) {
|
||||
ret = ptrace_put_reg(child, index, data);
|
||||
} else {
|
||||
unsigned int fpidx = index - PT_FPR0;
|
||||
|
||||
flush_fp_to_thread(child);
|
||||
((unsigned long *)child->thread.fpr)
|
||||
[TS_FPRWIDTH * (index - PT_FPR0)] = data;
|
||||
if (fpidx < (PT_FPSCR - PT_FPR0))
|
||||
((unsigned long *)child->thread.fpr)
|
||||
[fpidx * TS_FPRWIDTH] = data;
|
||||
else
|
||||
child->thread.fpscr.val = data;
|
||||
ret = 0;
|
||||
}
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -192,6 +192,14 @@ static ssize_t show_dscr_default(struct sysdev_class *class,
|
|||
return sprintf(buf, "%lx\n", dscr_default);
|
||||
}
|
||||
|
||||
static void update_dscr(void *dummy)
|
||||
{
|
||||
if (!current->thread.dscr_inherit) {
|
||||
current->thread.dscr = dscr_default;
|
||||
mtspr(SPRN_DSCR, dscr_default);
|
||||
}
|
||||
}
|
||||
|
||||
static ssize_t __used store_dscr_default(struct sysdev_class *class,
|
||||
struct sysdev_class_attribute *attr, const char *buf,
|
||||
size_t count)
|
||||
|
|
@ -204,6 +212,8 @@ static ssize_t __used store_dscr_default(struct sysdev_class *class,
|
|||
return -EINVAL;
|
||||
dscr_default = val;
|
||||
|
||||
on_each_cpu(update_dscr, NULL, 1);
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -935,8 +935,9 @@ static int emulate_instruction(struct pt_regs *regs)
|
|||
cpu_has_feature(CPU_FTR_DSCR)) {
|
||||
PPC_WARN_EMULATED(mtdscr, regs);
|
||||
rd = (instword >> 21) & 0x1f;
|
||||
mtspr(SPRN_DSCR, regs->gpr[rd]);
|
||||
current->thread.dscr = regs->gpr[rd];
|
||||
current->thread.dscr_inherit = 1;
|
||||
mtspr(SPRN_DSCR, current->thread.dscr);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -183,7 +183,7 @@ int get_user_pages_fast(unsigned long start, int nr_pages, int write,
|
|||
addr = start;
|
||||
len = (unsigned long) nr_pages << PAGE_SHIFT;
|
||||
end = start + len;
|
||||
if (end < start)
|
||||
if ((end < start) || (end > TASK_SIZE))
|
||||
goto slow_irqon;
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -58,14 +58,20 @@ static inline pte_t huge_pte_wrprotect(pte_t pte)
|
|||
static inline void huge_ptep_set_wrprotect(struct mm_struct *mm,
|
||||
unsigned long addr, pte_t *ptep)
|
||||
{
|
||||
ptep_set_wrprotect(mm, addr, ptep);
|
||||
pte_t old_pte = *ptep;
|
||||
set_huge_pte_at(mm, addr, ptep, pte_wrprotect(old_pte));
|
||||
}
|
||||
|
||||
static inline int huge_ptep_set_access_flags(struct vm_area_struct *vma,
|
||||
unsigned long addr, pte_t *ptep,
|
||||
pte_t pte, int dirty)
|
||||
{
|
||||
return ptep_set_access_flags(vma, addr, ptep, pte, dirty);
|
||||
int changed = !pte_same(*ptep, pte);
|
||||
if (changed) {
|
||||
set_huge_pte_at(vma->vm_mm, addr, ptep, pte);
|
||||
flush_tlb_page(vma, addr);
|
||||
}
|
||||
return changed;
|
||||
}
|
||||
|
||||
static inline pte_t huge_ptep_get(pte_t *ptep)
|
||||
|
|
|
|||
|
|
@ -309,9 +309,7 @@ void do_rt_sigreturn(struct pt_regs *regs)
|
|||
err |= restore_fpu_state(regs, fpu_save);
|
||||
|
||||
err |= __copy_from_user(&set, &sf->mask, sizeof(sigset_t));
|
||||
err |= do_sigaltstack(&sf->stack, NULL, (unsigned long)sf);
|
||||
|
||||
if (err)
|
||||
if (err || do_sigaltstack(&sf->stack, NULL, (unsigned long)sf) == -EFAULT)
|
||||
goto segv;
|
||||
|
||||
err |= __get_user(rwin_save, &sf->rwin_save);
|
||||
|
|
|
|||
|
|
@ -187,21 +187,14 @@ static inline int v8086_mode(struct pt_regs *regs)
|
|||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* X86_32 CPUs don't save ss and esp if the CPU is already in kernel mode
|
||||
* when it traps. The previous stack will be directly underneath the saved
|
||||
* registers, and 'sp/ss' won't even have been saved. Thus the '®s->sp'.
|
||||
*
|
||||
* This is valid only for kernel mode traps.
|
||||
*/
|
||||
#ifdef CONFIG_X86_32
|
||||
extern unsigned long kernel_stack_pointer(struct pt_regs *regs);
|
||||
#else
|
||||
static inline unsigned long kernel_stack_pointer(struct pt_regs *regs)
|
||||
{
|
||||
#ifdef CONFIG_X86_32
|
||||
return (unsigned long)(®s->sp);
|
||||
#else
|
||||
return regs->sp;
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
#define GET_IP(regs) ((regs)->ip)
|
||||
#define GET_FP(regs) ((regs)->bp)
|
||||
|
|
|
|||
|
|
@ -93,10 +93,6 @@ do { \
|
|||
"memory"); \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* disable hlt during certain critical i/o operations
|
||||
*/
|
||||
#define HAVE_DISABLE_HLT
|
||||
#else
|
||||
|
||||
/* frame pointer must be last for get_wchan */
|
||||
|
|
@ -392,9 +388,6 @@ static inline void clflush(volatile void *__p)
|
|||
|
||||
#define nop() asm volatile ("nop")
|
||||
|
||||
void disable_hlt(void);
|
||||
void enable_hlt(void);
|
||||
|
||||
void cpu_idle_wait(void);
|
||||
|
||||
extern unsigned long arch_align_stack(unsigned long sp);
|
||||
|
|
|
|||
|
|
@ -554,6 +554,20 @@ static void __cpuinit init_amd(struct cpuinfo_x86 *c)
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* The way access filter has a performance penalty on some workloads.
|
||||
* Disable it on the affected CPUs.
|
||||
*/
|
||||
if ((c->x86 == 0x15) &&
|
||||
(c->x86_model >= 0x02) && (c->x86_model < 0x20)) {
|
||||
u64 val;
|
||||
|
||||
if (!rdmsrl_safe(0xc0011021, &val) && !(val & 0x1E)) {
|
||||
val |= 0x1E;
|
||||
checking_wrmsrl(0xc0011021, val);
|
||||
}
|
||||
}
|
||||
|
||||
cpu_detect_cache_sizes(c);
|
||||
|
||||
/* Multi core CPU? */
|
||||
|
|
|
|||
|
|
@ -322,17 +322,6 @@ device_initcall(thermal_throttle_init_device);
|
|||
|
||||
#endif /* CONFIG_SYSFS */
|
||||
|
||||
/*
|
||||
* Set up the most two significant bit to notify mce log that this thermal
|
||||
* event type.
|
||||
* This is a temp solution. May be changed in the future with mce log
|
||||
* infrasture.
|
||||
*/
|
||||
#define CORE_THROTTLED (0)
|
||||
#define CORE_POWER_LIMIT ((__u64)1 << 62)
|
||||
#define PACKAGE_THROTTLED ((__u64)2 << 62)
|
||||
#define PACKAGE_POWER_LIMIT ((__u64)3 << 62)
|
||||
|
||||
static void notify_thresholds(__u64 msr_val)
|
||||
{
|
||||
/* check whether the interrupt handler is defined;
|
||||
|
|
@ -362,27 +351,23 @@ static void intel_thermal_interrupt(void)
|
|||
if (therm_throt_process(msr_val & THERM_STATUS_PROCHOT,
|
||||
THERMAL_THROTTLING_EVENT,
|
||||
CORE_LEVEL) != 0)
|
||||
mce_log_therm_throt_event(CORE_THROTTLED | msr_val);
|
||||
mce_log_therm_throt_event(msr_val);
|
||||
|
||||
if (this_cpu_has(X86_FEATURE_PLN))
|
||||
if (therm_throt_process(msr_val & THERM_STATUS_POWER_LIMIT,
|
||||
therm_throt_process(msr_val & THERM_STATUS_POWER_LIMIT,
|
||||
POWER_LIMIT_EVENT,
|
||||
CORE_LEVEL) != 0)
|
||||
mce_log_therm_throt_event(CORE_POWER_LIMIT | msr_val);
|
||||
CORE_LEVEL);
|
||||
|
||||
if (this_cpu_has(X86_FEATURE_PTS)) {
|
||||
rdmsrl(MSR_IA32_PACKAGE_THERM_STATUS, msr_val);
|
||||
if (therm_throt_process(msr_val & PACKAGE_THERM_STATUS_PROCHOT,
|
||||
therm_throt_process(msr_val & PACKAGE_THERM_STATUS_PROCHOT,
|
||||
THERMAL_THROTTLING_EVENT,
|
||||
PACKAGE_LEVEL) != 0)
|
||||
mce_log_therm_throt_event(PACKAGE_THROTTLED | msr_val);
|
||||
PACKAGE_LEVEL);
|
||||
if (this_cpu_has(X86_FEATURE_PLN))
|
||||
if (therm_throt_process(msr_val &
|
||||
therm_throt_process(msr_val &
|
||||
PACKAGE_THERM_STATUS_POWER_LIMIT,
|
||||
POWER_LIMIT_EVENT,
|
||||
PACKAGE_LEVEL) != 0)
|
||||
mce_log_therm_throt_event(PACKAGE_POWER_LIMIT
|
||||
| msr_val);
|
||||
PACKAGE_LEVEL);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -427,7 +427,7 @@ void hpet_msi_unmask(struct irq_data *data)
|
|||
|
||||
/* unmask it */
|
||||
cfg = hpet_readl(HPET_Tn_CFG(hdev->num));
|
||||
cfg |= HPET_TN_FSB;
|
||||
cfg |= HPET_TN_ENABLE | HPET_TN_FSB;
|
||||
hpet_writel(cfg, HPET_Tn_CFG(hdev->num));
|
||||
}
|
||||
|
||||
|
|
@ -438,7 +438,7 @@ void hpet_msi_mask(struct irq_data *data)
|
|||
|
||||
/* mask it */
|
||||
cfg = hpet_readl(HPET_Tn_CFG(hdev->num));
|
||||
cfg &= ~HPET_TN_FSB;
|
||||
cfg &= ~(HPET_TN_ENABLE | HPET_TN_FSB);
|
||||
hpet_writel(cfg, HPET_Tn_CFG(hdev->num));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -162,6 +162,7 @@ static unsigned int verify_ucode_size(int cpu, const u8 *buf, unsigned int size)
|
|||
#define F1XH_MPB_MAX_SIZE 2048
|
||||
#define F14H_MPB_MAX_SIZE 1824
|
||||
#define F15H_MPB_MAX_SIZE 4096
|
||||
#define F16H_MPB_MAX_SIZE 3458
|
||||
|
||||
switch (c->x86) {
|
||||
case 0x14:
|
||||
|
|
@ -170,6 +171,9 @@ static unsigned int verify_ucode_size(int cpu, const u8 *buf, unsigned int size)
|
|||
case 0x15:
|
||||
max_size = F15H_MPB_MAX_SIZE;
|
||||
break;
|
||||
case 0x16:
|
||||
max_size = F16H_MPB_MAX_SIZE;
|
||||
break;
|
||||
default:
|
||||
max_size = F1XH_MPB_MAX_SIZE;
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -341,34 +341,10 @@ void (*pm_idle)(void);
|
|||
EXPORT_SYMBOL(pm_idle);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_X86_32
|
||||
/*
|
||||
* This halt magic was a workaround for ancient floppy DMA
|
||||
* wreckage. It should be safe to remove.
|
||||
*/
|
||||
static int hlt_counter;
|
||||
void disable_hlt(void)
|
||||
{
|
||||
hlt_counter++;
|
||||
}
|
||||
EXPORT_SYMBOL(disable_hlt);
|
||||
|
||||
void enable_hlt(void)
|
||||
{
|
||||
hlt_counter--;
|
||||
}
|
||||
EXPORT_SYMBOL(enable_hlt);
|
||||
|
||||
static inline int hlt_use_halt(void)
|
||||
{
|
||||
return (!hlt_counter && boot_cpu_data.hlt_works_ok);
|
||||
}
|
||||
#else
|
||||
static inline int hlt_use_halt(void)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* We use this if we don't have any better
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@
|
|||
#include <linux/signal.h>
|
||||
#include <linux/perf_event.h>
|
||||
#include <linux/hw_breakpoint.h>
|
||||
#include <linux/module.h>
|
||||
|
||||
#include <asm/uaccess.h>
|
||||
#include <asm/pgtable.h>
|
||||
|
|
@ -164,6 +165,35 @@ static inline bool invalid_selector(u16 value)
|
|||
|
||||
#define FLAG_MASK FLAG_MASK_32
|
||||
|
||||
/*
|
||||
* X86_32 CPUs don't save ss and esp if the CPU is already in kernel mode
|
||||
* when it traps. The previous stack will be directly underneath the saved
|
||||
* registers, and 'sp/ss' won't even have been saved. Thus the '®s->sp'.
|
||||
*
|
||||
* Now, if the stack is empty, '®s->sp' is out of range. In this
|
||||
* case we try to take the previous stack. To always return a non-null
|
||||
* stack pointer we fall back to regs as stack if no previous stack
|
||||
* exists.
|
||||
*
|
||||
* This is valid only for kernel mode traps.
|
||||
*/
|
||||
unsigned long kernel_stack_pointer(struct pt_regs *regs)
|
||||
{
|
||||
unsigned long context = (unsigned long)regs & ~(THREAD_SIZE - 1);
|
||||
unsigned long sp = (unsigned long)®s->sp;
|
||||
struct thread_info *tinfo;
|
||||
|
||||
if (context == (sp & ~(THREAD_SIZE - 1)))
|
||||
return sp;
|
||||
|
||||
tinfo = (struct thread_info *)context;
|
||||
if (tinfo->previous_esp)
|
||||
return tinfo->previous_esp;
|
||||
|
||||
return (unsigned long)regs;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(kernel_stack_pointer);
|
||||
|
||||
static unsigned long *pt_regs_access(struct pt_regs *regs, unsigned long regno)
|
||||
{
|
||||
BUILD_BUG_ON(offsetof(struct pt_regs, bx) != 0);
|
||||
|
|
|
|||
|
|
@ -722,11 +722,14 @@ int scsi_verify_blk_ioctl(struct block_device *bd, unsigned int cmd)
|
|||
break;
|
||||
}
|
||||
|
||||
if (capable(CAP_SYS_RAWIO))
|
||||
return 0;
|
||||
|
||||
/* In particular, rule out all resets and host-specific ioctls. */
|
||||
printk_ratelimited(KERN_WARNING
|
||||
"%s: sending ioctl %x to a partition!\n", current->comm, cmd);
|
||||
|
||||
return capable(CAP_SYS_RAWIO) ? 0 : -ENOTTY;
|
||||
return -ENOTTY;
|
||||
}
|
||||
EXPORT_SYMBOL(scsi_verify_blk_ioctl);
|
||||
|
||||
|
|
|
|||
|
|
@ -137,13 +137,18 @@ static void cryptd_queue_worker(struct work_struct *work)
|
|||
struct crypto_async_request *req, *backlog;
|
||||
|
||||
cpu_queue = container_of(work, struct cryptd_cpu_queue, work);
|
||||
/* Only handle one request at a time to avoid hogging crypto
|
||||
* workqueue. preempt_disable/enable is used to prevent
|
||||
* being preempted by cryptd_enqueue_request() */
|
||||
/*
|
||||
* Only handle one request at a time to avoid hogging crypto workqueue.
|
||||
* preempt_disable/enable is used to prevent being preempted by
|
||||
* cryptd_enqueue_request(). local_bh_disable/enable is used to prevent
|
||||
* cryptd_enqueue_request() being accessed from software interrupts.
|
||||
*/
|
||||
local_bh_disable();
|
||||
preempt_disable();
|
||||
backlog = crypto_get_backlog(&cpu_queue->queue);
|
||||
req = crypto_dequeue_request(&cpu_queue->queue);
|
||||
preempt_enable();
|
||||
local_bh_enable();
|
||||
|
||||
if (!req)
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@
|
|||
#include <linux/dmi.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/suspend.h>
|
||||
#include <asm/unaligned.h>
|
||||
|
||||
#ifdef CONFIG_ACPI_PROCFS_POWER
|
||||
#include <linux/proc_fs.h>
|
||||
|
|
@ -97,6 +98,18 @@ enum {
|
|||
*/
|
||||
ACPI_BATTERY_QUIRK_SIGNED16_CURRENT,
|
||||
ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY,
|
||||
/* On Lenovo Thinkpad models from 2010 and 2011, the power unit
|
||||
switches between mWh and mAh depending on whether the system
|
||||
is running on battery or not. When mAh is the unit, most
|
||||
reported values are incorrect and need to be adjusted by
|
||||
10000/design_voltage. Verified on x201, t410, t410s, and x220.
|
||||
Pre-2010 and 2012 models appear to always report in mWh and
|
||||
are thus unaffected (tested with t42, t61, t500, x200, x300,
|
||||
and x230). Also, in mid-2012 Lenovo issued a BIOS update for
|
||||
the 2011 models that fixes the issue (tested on x220 with a
|
||||
post-1.29 BIOS), but as of Nov. 2012, no such update is
|
||||
available for the 2010 models. */
|
||||
ACPI_BATTERY_QUIRK_THINKPAD_MAH,
|
||||
};
|
||||
|
||||
struct acpi_battery {
|
||||
|
|
@ -429,6 +442,21 @@ static int acpi_battery_get_info(struct acpi_battery *battery)
|
|||
kfree(buffer.pointer);
|
||||
if (test_bit(ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY, &battery->flags))
|
||||
battery->full_charge_capacity = battery->design_capacity;
|
||||
if (test_bit(ACPI_BATTERY_QUIRK_THINKPAD_MAH, &battery->flags) &&
|
||||
battery->power_unit && battery->design_voltage) {
|
||||
battery->design_capacity = battery->design_capacity *
|
||||
10000 / battery->design_voltage;
|
||||
battery->full_charge_capacity = battery->full_charge_capacity *
|
||||
10000 / battery->design_voltage;
|
||||
battery->design_capacity_warning =
|
||||
battery->design_capacity_warning *
|
||||
10000 / battery->design_voltage;
|
||||
/* Curiously, design_capacity_low, unlike the rest of them,
|
||||
is correct. */
|
||||
/* capacity_granularity_* equal 1 on the systems tested, so
|
||||
it's impossible to tell if they would need an adjustment
|
||||
or not if their values were higher. */
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
@ -469,6 +497,11 @@ static int acpi_battery_get_state(struct acpi_battery *battery)
|
|||
&& battery->capacity_now >= 0 && battery->capacity_now <= 100)
|
||||
battery->capacity_now = (battery->capacity_now *
|
||||
battery->full_charge_capacity) / 100;
|
||||
if (test_bit(ACPI_BATTERY_QUIRK_THINKPAD_MAH, &battery->flags) &&
|
||||
battery->power_unit && battery->design_voltage) {
|
||||
battery->capacity_now = battery->capacity_now *
|
||||
10000 / battery->design_voltage;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
@ -580,6 +613,24 @@ static void acpi_battery_quirks(struct acpi_battery *battery)
|
|||
}
|
||||
}
|
||||
|
||||
static void find_battery(const struct dmi_header *dm, void *private)
|
||||
{
|
||||
struct acpi_battery *battery = (struct acpi_battery *)private;
|
||||
/* Note: the hardcoded offsets below have been extracted from
|
||||
the source code of dmidecode. */
|
||||
if (dm->type == DMI_ENTRY_PORTABLE_BATTERY && dm->length >= 8) {
|
||||
const u8 *dmi_data = (const u8 *)(dm + 1);
|
||||
int dmi_capacity = get_unaligned((const u16 *)(dmi_data + 6));
|
||||
if (dm->length >= 18)
|
||||
dmi_capacity *= dmi_data[17];
|
||||
if (battery->design_capacity * battery->design_voltage / 1000
|
||||
!= dmi_capacity &&
|
||||
battery->design_capacity * 10 == dmi_capacity)
|
||||
set_bit(ACPI_BATTERY_QUIRK_THINKPAD_MAH,
|
||||
&battery->flags);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* According to the ACPI spec, some kinds of primary batteries can
|
||||
* report percentage battery remaining capacity directly to OS.
|
||||
|
|
@ -605,6 +656,32 @@ static void acpi_battery_quirks2(struct acpi_battery *battery)
|
|||
battery->capacity_now = (battery->capacity_now *
|
||||
battery->full_charge_capacity) / 100;
|
||||
}
|
||||
|
||||
if (test_bit(ACPI_BATTERY_QUIRK_THINKPAD_MAH, &battery->flags))
|
||||
return ;
|
||||
|
||||
if (battery->power_unit && dmi_name_in_vendors("LENOVO")) {
|
||||
const char *s;
|
||||
s = dmi_get_system_info(DMI_PRODUCT_VERSION);
|
||||
if (s && !strnicmp(s, "ThinkPad", 8)) {
|
||||
dmi_walk(find_battery, battery);
|
||||
if (test_bit(ACPI_BATTERY_QUIRK_THINKPAD_MAH,
|
||||
&battery->flags) &&
|
||||
battery->design_voltage) {
|
||||
battery->design_capacity =
|
||||
battery->design_capacity *
|
||||
10000 / battery->design_voltage;
|
||||
battery->full_charge_capacity =
|
||||
battery->full_charge_capacity *
|
||||
10000 / battery->design_voltage;
|
||||
battery->design_capacity_warning =
|
||||
battery->design_capacity_warning *
|
||||
10000 / battery->design_voltage;
|
||||
battery->capacity_now = battery->capacity_now *
|
||||
10000 / battery->design_voltage;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int acpi_battery_update(struct acpi_battery *battery)
|
||||
|
|
|
|||
|
|
@ -409,6 +409,7 @@ static void acpi_processor_notify(struct acpi_device *device, u32 event)
|
|||
acpi_bus_generate_proc_event(device, event, 0);
|
||||
acpi_bus_generate_netlink_event(device->pnp.device_class,
|
||||
dev_name(&device->dev), event, 0);
|
||||
break;
|
||||
default:
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
||||
"Unsupported event [0x%x]\n", event));
|
||||
|
|
|
|||
|
|
@ -1153,7 +1153,7 @@ static void acpi_device_set_id(struct acpi_device *device)
|
|||
acpi_add_id(device, ACPI_DOCK_HID);
|
||||
else if (!acpi_ibm_smbus_match(device))
|
||||
acpi_add_id(device, ACPI_SMBUS_IBM_HID);
|
||||
else if (!acpi_device_hid(device) &&
|
||||
else if (list_empty(&device->pnp.ids) &&
|
||||
ACPI_IS_ROOT_DEVICE(device->parent)) {
|
||||
acpi_add_id(device, ACPI_BUS_HID); /* \_SB, LNXSYBUS */
|
||||
strcpy(device->pnp.device_name, ACPI_BUS_DEVICE_NAME);
|
||||
|
|
|
|||
|
|
@ -390,6 +390,12 @@ static int __init video_set_bqc_offset(const struct dmi_system_id *d)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int video_ignore_initial_backlight(const struct dmi_system_id *d)
|
||||
{
|
||||
use_bios_initial_backlight = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct dmi_system_id video_dmi_table[] __initdata = {
|
||||
/*
|
||||
* Broken _BQC workaround http://bugzilla.kernel.org/show_bug.cgi?id=13121
|
||||
|
|
@ -434,6 +440,14 @@ static struct dmi_system_id video_dmi_table[] __initdata = {
|
|||
DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 7720"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.callback = video_ignore_initial_backlight,
|
||||
.ident = "HP Folio 13-2000",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "Hewlett-Packard"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "HP Folio 13 - 2000 Notebook PC"),
|
||||
},
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -142,6 +142,39 @@ static int k2_sata_scr_write(struct ata_link *link,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int k2_sata_softreset(struct ata_link *link,
|
||||
unsigned int *class, unsigned long deadline)
|
||||
{
|
||||
u8 dmactl;
|
||||
void __iomem *mmio = link->ap->ioaddr.bmdma_addr;
|
||||
|
||||
dmactl = readb(mmio + ATA_DMA_CMD);
|
||||
|
||||
/* Clear the start bit */
|
||||
if (dmactl & ATA_DMA_START) {
|
||||
dmactl &= ~ATA_DMA_START;
|
||||
writeb(dmactl, mmio + ATA_DMA_CMD);
|
||||
}
|
||||
|
||||
return ata_sff_softreset(link, class, deadline);
|
||||
}
|
||||
|
||||
static int k2_sata_hardreset(struct ata_link *link,
|
||||
unsigned int *class, unsigned long deadline)
|
||||
{
|
||||
u8 dmactl;
|
||||
void __iomem *mmio = link->ap->ioaddr.bmdma_addr;
|
||||
|
||||
dmactl = readb(mmio + ATA_DMA_CMD);
|
||||
|
||||
/* Clear the start bit */
|
||||
if (dmactl & ATA_DMA_START) {
|
||||
dmactl &= ~ATA_DMA_START;
|
||||
writeb(dmactl, mmio + ATA_DMA_CMD);
|
||||
}
|
||||
|
||||
return sata_sff_hardreset(link, class, deadline);
|
||||
}
|
||||
|
||||
static void k2_sata_tf_load(struct ata_port *ap, const struct ata_taskfile *tf)
|
||||
{
|
||||
|
|
@ -346,6 +379,8 @@ static struct scsi_host_template k2_sata_sht = {
|
|||
|
||||
static struct ata_port_operations k2_sata_ops = {
|
||||
.inherits = &ata_bmdma_port_ops,
|
||||
.softreset = k2_sata_softreset,
|
||||
.hardreset = k2_sata_hardreset,
|
||||
.sff_tf_load = k2_sata_tf_load,
|
||||
.sff_tf_read = k2_sata_tf_read,
|
||||
.sff_check_status = k2_stat_check_status,
|
||||
|
|
|
|||
|
|
@ -967,10 +967,11 @@ static uint32_t fpga_tx(struct solos_card *card)
|
|||
for (port = 0; tx_pending; tx_pending >>= 1, port++) {
|
||||
if (tx_pending & 1) {
|
||||
struct sk_buff *oldskb = card->tx_skb[port];
|
||||
if (oldskb)
|
||||
if (oldskb) {
|
||||
pci_unmap_single(card->dev, SKB_CB(oldskb)->dma_addr,
|
||||
oldskb->len, PCI_DMA_TODEVICE);
|
||||
|
||||
card->tx_skb[port] = NULL;
|
||||
}
|
||||
spin_lock(&card->tx_queue_lock);
|
||||
skb = skb_dequeue(&card->tx_queue[port]);
|
||||
if (!skb)
|
||||
|
|
|
|||
|
|
@ -1177,7 +1177,8 @@ static bool DAC960_V1_EnableMemoryMailboxInterface(DAC960_Controller_T
|
|||
int TimeoutCounter;
|
||||
int i;
|
||||
|
||||
|
||||
memset(&CommandMailbox, 0, sizeof(DAC960_V1_CommandMailbox_T));
|
||||
|
||||
if (pci_set_dma_mask(Controller->PCIDevice, DMA_BIT_MASK(32)))
|
||||
return DAC960_Failure(Controller, "DMA mask out of range");
|
||||
Controller->BounceBufferLimit = DMA_BIT_MASK(32);
|
||||
|
|
@ -4627,7 +4628,8 @@ static void DAC960_V2_ProcessCompletedCommand(DAC960_Command_T *Command)
|
|||
DAC960_Controller_T *Controller = Command->Controller;
|
||||
DAC960_CommandType_T CommandType = Command->CommandType;
|
||||
DAC960_V2_CommandMailbox_T *CommandMailbox = &Command->V2.CommandMailbox;
|
||||
DAC960_V2_IOCTL_Opcode_T CommandOpcode = CommandMailbox->Common.IOCTL_Opcode;
|
||||
DAC960_V2_IOCTL_Opcode_T IOCTLOpcode = CommandMailbox->Common.IOCTL_Opcode;
|
||||
DAC960_V2_CommandOpcode_T CommandOpcode = CommandMailbox->SCSI_10.CommandOpcode;
|
||||
DAC960_V2_CommandStatus_T CommandStatus = Command->V2.CommandStatus;
|
||||
|
||||
if (CommandType == DAC960_ReadCommand ||
|
||||
|
|
@ -4699,7 +4701,7 @@ static void DAC960_V2_ProcessCompletedCommand(DAC960_Command_T *Command)
|
|||
{
|
||||
if (Controller->ShutdownMonitoringTimer)
|
||||
return;
|
||||
if (CommandOpcode == DAC960_V2_GetControllerInfo)
|
||||
if (IOCTLOpcode == DAC960_V2_GetControllerInfo)
|
||||
{
|
||||
DAC960_V2_ControllerInfo_T *NewControllerInfo =
|
||||
Controller->V2.NewControllerInformation;
|
||||
|
|
@ -4719,14 +4721,14 @@ static void DAC960_V2_ProcessCompletedCommand(DAC960_Command_T *Command)
|
|||
memcpy(ControllerInfo, NewControllerInfo,
|
||||
sizeof(DAC960_V2_ControllerInfo_T));
|
||||
}
|
||||
else if (CommandOpcode == DAC960_V2_GetEvent)
|
||||
else if (IOCTLOpcode == DAC960_V2_GetEvent)
|
||||
{
|
||||
if (CommandStatus == DAC960_V2_NormalCompletion) {
|
||||
DAC960_V2_ReportEvent(Controller, Controller->V2.Event);
|
||||
}
|
||||
Controller->V2.NextEventSequenceNumber++;
|
||||
}
|
||||
else if (CommandOpcode == DAC960_V2_GetPhysicalDeviceInfoValid &&
|
||||
else if (IOCTLOpcode == DAC960_V2_GetPhysicalDeviceInfoValid &&
|
||||
CommandStatus == DAC960_V2_NormalCompletion)
|
||||
{
|
||||
DAC960_V2_PhysicalDeviceInfo_T *NewPhysicalDeviceInfo =
|
||||
|
|
@ -4915,7 +4917,7 @@ static void DAC960_V2_ProcessCompletedCommand(DAC960_Command_T *Command)
|
|||
NewPhysicalDeviceInfo->LogicalUnit++;
|
||||
Controller->V2.PhysicalDeviceIndex++;
|
||||
}
|
||||
else if (CommandOpcode == DAC960_V2_GetPhysicalDeviceInfoValid)
|
||||
else if (IOCTLOpcode == DAC960_V2_GetPhysicalDeviceInfoValid)
|
||||
{
|
||||
unsigned int DeviceIndex;
|
||||
for (DeviceIndex = Controller->V2.PhysicalDeviceIndex;
|
||||
|
|
@ -4938,7 +4940,7 @@ static void DAC960_V2_ProcessCompletedCommand(DAC960_Command_T *Command)
|
|||
}
|
||||
Controller->V2.NeedPhysicalDeviceInformation = false;
|
||||
}
|
||||
else if (CommandOpcode == DAC960_V2_GetLogicalDeviceInfoValid &&
|
||||
else if (IOCTLOpcode == DAC960_V2_GetLogicalDeviceInfoValid &&
|
||||
CommandStatus == DAC960_V2_NormalCompletion)
|
||||
{
|
||||
DAC960_V2_LogicalDeviceInfo_T *NewLogicalDeviceInfo =
|
||||
|
|
@ -5065,7 +5067,7 @@ static void DAC960_V2_ProcessCompletedCommand(DAC960_Command_T *Command)
|
|||
[LogicalDeviceNumber] = true;
|
||||
NewLogicalDeviceInfo->LogicalDeviceNumber++;
|
||||
}
|
||||
else if (CommandOpcode == DAC960_V2_GetLogicalDeviceInfoValid)
|
||||
else if (IOCTLOpcode == DAC960_V2_GetLogicalDeviceInfoValid)
|
||||
{
|
||||
int LogicalDriveNumber;
|
||||
for (LogicalDriveNumber = 0;
|
||||
|
|
|
|||
|
|
@ -1032,37 +1032,6 @@ static int fd_wait_for_completion(unsigned long delay, timeout_fn function)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static DEFINE_SPINLOCK(floppy_hlt_lock);
|
||||
static int hlt_disabled;
|
||||
static void floppy_disable_hlt(void)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
WARN_ONCE(1, "floppy_disable_hlt() scheduled for removal in 2012");
|
||||
spin_lock_irqsave(&floppy_hlt_lock, flags);
|
||||
if (!hlt_disabled) {
|
||||
hlt_disabled = 1;
|
||||
#ifdef HAVE_DISABLE_HLT
|
||||
disable_hlt();
|
||||
#endif
|
||||
}
|
||||
spin_unlock_irqrestore(&floppy_hlt_lock, flags);
|
||||
}
|
||||
|
||||
static void floppy_enable_hlt(void)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&floppy_hlt_lock, flags);
|
||||
if (hlt_disabled) {
|
||||
hlt_disabled = 0;
|
||||
#ifdef HAVE_DISABLE_HLT
|
||||
enable_hlt();
|
||||
#endif
|
||||
}
|
||||
spin_unlock_irqrestore(&floppy_hlt_lock, flags);
|
||||
}
|
||||
|
||||
static void setup_DMA(void)
|
||||
{
|
||||
unsigned long f;
|
||||
|
|
@ -1107,7 +1076,6 @@ static void setup_DMA(void)
|
|||
fd_enable_dma();
|
||||
release_dma_lock(f);
|
||||
#endif
|
||||
floppy_disable_hlt();
|
||||
}
|
||||
|
||||
static void show_floppy(void);
|
||||
|
|
@ -1709,7 +1677,6 @@ irqreturn_t floppy_interrupt(int irq, void *dev_id)
|
|||
fd_disable_dma();
|
||||
release_dma_lock(f);
|
||||
|
||||
floppy_enable_hlt();
|
||||
do_floppy = NULL;
|
||||
if (fdc >= N_FDC || FDCS->address == -1) {
|
||||
/* we don't even know which FDC is the culprit */
|
||||
|
|
@ -1858,8 +1825,6 @@ static void floppy_shutdown(unsigned long data)
|
|||
show_floppy();
|
||||
cancel_activity();
|
||||
|
||||
floppy_enable_hlt();
|
||||
|
||||
flags = claim_dma_lock();
|
||||
fd_disable_dma();
|
||||
release_dma_lock(flags);
|
||||
|
|
@ -4198,6 +4163,7 @@ static int __init floppy_init(void)
|
|||
|
||||
disks[dr]->queue = blk_init_queue(do_fd_request, &floppy_lock);
|
||||
if (!disks[dr]->queue) {
|
||||
put_disk(disks[dr]);
|
||||
err = -ENOMEM;
|
||||
goto out_put_disk;
|
||||
}
|
||||
|
|
@ -4504,7 +4470,6 @@ static void floppy_release_irq_and_dma(void)
|
|||
#if N_FDC > 1
|
||||
set_dor(1, ~8, 0);
|
||||
#endif
|
||||
floppy_enable_hlt();
|
||||
|
||||
if (floppy_track_buffer && max_buffer_sectors) {
|
||||
tmpsize = max_buffer_sectors * 1024;
|
||||
|
|
|
|||
|
|
@ -65,6 +65,7 @@ static struct usb_device_id ath3k_table[] = {
|
|||
{ USB_DEVICE(0x13d3, 0x3304) },
|
||||
{ USB_DEVICE(0x0930, 0x0215) },
|
||||
{ USB_DEVICE(0x0489, 0xE03D) },
|
||||
{ USB_DEVICE(0x0489, 0xE027) },
|
||||
|
||||
/* Atheros AR9285 Malbec with sflash firmware */
|
||||
{ USB_DEVICE(0x03F0, 0x311D) },
|
||||
|
|
|
|||
|
|
@ -130,6 +130,7 @@ static struct usb_device_id blacklist_table[] = {
|
|||
{ USB_DEVICE(0x13d3, 0x3304), .driver_info = BTUSB_IGNORE },
|
||||
{ USB_DEVICE(0x0930, 0x0215), .driver_info = BTUSB_IGNORE },
|
||||
{ USB_DEVICE(0x0489, 0xe03d), .driver_info = BTUSB_IGNORE },
|
||||
{ USB_DEVICE(0x0489, 0xe027), .driver_info = BTUSB_IGNORE },
|
||||
|
||||
/* Atheros AR9285 Malbec with sflash firmware */
|
||||
{ USB_DEVICE(0x03f0, 0x311d), .driver_info = BTUSB_IGNORE },
|
||||
|
|
|
|||
|
|
@ -135,8 +135,11 @@ int drm_open(struct inode *inode, struct file *filp)
|
|||
retcode = drm_open_helper(inode, filp, dev);
|
||||
if (!retcode) {
|
||||
atomic_inc(&dev->counts[_DRM_STAT_OPENS]);
|
||||
if (!dev->open_count++)
|
||||
if (!dev->open_count++) {
|
||||
retcode = drm_setup(dev);
|
||||
if (retcode)
|
||||
dev->open_count--;
|
||||
}
|
||||
}
|
||||
if (!retcode) {
|
||||
mutex_lock(&dev->struct_mutex);
|
||||
|
|
|
|||
|
|
@ -204,7 +204,7 @@ struct dip_infoframe {
|
|||
uint16_t bottom_bar_start;
|
||||
uint16_t left_bar_end;
|
||||
uint16_t right_bar_start;
|
||||
} avi;
|
||||
} __attribute__ ((packed)) avi;
|
||||
uint8_t payload[27];
|
||||
} __attribute__ ((packed)) body;
|
||||
} __attribute__((packed));
|
||||
|
|
|
|||
|
|
@ -759,6 +759,22 @@ static const struct dmi_system_id intel_no_lvds[] = {
|
|||
DMI_MATCH(DMI_BOARD_NAME, "ZBOXSD-ID12/ID13"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.callback = intel_no_lvds_dmi_callback,
|
||||
.ident = "Gigabyte GA-D525TUD",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "Gigabyte Technology Co., Ltd."),
|
||||
DMI_MATCH(DMI_BOARD_NAME, "D525TUD"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.callback = intel_no_lvds_dmi_callback,
|
||||
.ident = "Supermicro X7SPA-H",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Supermicro"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "X7SPA-H"),
|
||||
},
|
||||
},
|
||||
|
||||
{ } /* terminating entry */
|
||||
};
|
||||
|
|
|
|||
|
|
@ -428,9 +428,17 @@ static int intel_overlay_off(struct intel_overlay *overlay)
|
|||
OUT_RING(flip_addr);
|
||||
OUT_RING(MI_WAIT_FOR_EVENT | MI_WAIT_FOR_OVERLAY_FLIP);
|
||||
/* turn overlay off */
|
||||
OUT_RING(MI_OVERLAY_FLIP | MI_OVERLAY_OFF);
|
||||
OUT_RING(flip_addr);
|
||||
OUT_RING(MI_WAIT_FOR_EVENT | MI_WAIT_FOR_OVERLAY_FLIP);
|
||||
if (IS_I830(dev)) {
|
||||
/* Workaround: Don't disable the overlay fully, since otherwise
|
||||
* it dies on the next OVERLAY_ON cmd. */
|
||||
OUT_RING(MI_NOOP);
|
||||
OUT_RING(MI_NOOP);
|
||||
OUT_RING(MI_NOOP);
|
||||
} else {
|
||||
OUT_RING(MI_OVERLAY_FLIP | MI_OVERLAY_OFF);
|
||||
OUT_RING(flip_addr);
|
||||
OUT_RING(MI_WAIT_FOR_EVENT | MI_WAIT_FOR_OVERLAY_FLIP);
|
||||
}
|
||||
ADVANCE_LP_RING();
|
||||
|
||||
return intel_overlay_do_wait_request(overlay, request,
|
||||
|
|
|
|||
|
|
@ -861,6 +861,45 @@ static void intel_sdvo_dump_hdmi_buf(struct intel_sdvo *intel_sdvo)
|
|||
}
|
||||
#endif
|
||||
|
||||
static bool intel_sdvo_write_infoframe(struct intel_sdvo *intel_sdvo,
|
||||
unsigned if_index, uint8_t tx_rate,
|
||||
uint8_t *data, unsigned length)
|
||||
{
|
||||
uint8_t set_buf_index[2] = { if_index, 0 };
|
||||
uint8_t hbuf_size, tmp[8];
|
||||
int i;
|
||||
|
||||
if (!intel_sdvo_set_value(intel_sdvo,
|
||||
SDVO_CMD_SET_HBUF_INDEX,
|
||||
set_buf_index, 2))
|
||||
return false;
|
||||
|
||||
if (!intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_HBUF_INFO,
|
||||
&hbuf_size, 1))
|
||||
return false;
|
||||
|
||||
/* Buffer size is 0 based, hooray! */
|
||||
hbuf_size++;
|
||||
|
||||
DRM_DEBUG_KMS("writing sdvo hbuf: %i, hbuf_size %i, hbuf_size: %i\n",
|
||||
if_index, length, hbuf_size);
|
||||
|
||||
for (i = 0; i < hbuf_size; i += 8) {
|
||||
memset(tmp, 0, 8);
|
||||
if (i < length)
|
||||
memcpy(tmp, data + i, min_t(unsigned, 8, length - i));
|
||||
|
||||
if (!intel_sdvo_set_value(intel_sdvo,
|
||||
SDVO_CMD_SET_HBUF_DATA,
|
||||
tmp, 8))
|
||||
return false;
|
||||
}
|
||||
|
||||
return intel_sdvo_set_value(intel_sdvo,
|
||||
SDVO_CMD_SET_HBUF_TXRATE,
|
||||
&tx_rate, 1);
|
||||
}
|
||||
|
||||
static bool intel_sdvo_set_avi_infoframe(struct intel_sdvo *intel_sdvo)
|
||||
{
|
||||
struct dip_infoframe avi_if = {
|
||||
|
|
@ -868,29 +907,19 @@ static bool intel_sdvo_set_avi_infoframe(struct intel_sdvo *intel_sdvo)
|
|||
.ver = DIP_VERSION_AVI,
|
||||
.len = DIP_LEN_AVI,
|
||||
};
|
||||
uint8_t tx_rate = SDVO_HBUF_TX_VSYNC;
|
||||
uint8_t set_buf_index[2] = { 1, 0 };
|
||||
uint64_t *data = (uint64_t *)&avi_if;
|
||||
unsigned i;
|
||||
uint8_t sdvo_data[4 + sizeof(avi_if.body.avi)];
|
||||
|
||||
intel_dip_infoframe_csum(&avi_if);
|
||||
|
||||
if (!intel_sdvo_set_value(intel_sdvo,
|
||||
SDVO_CMD_SET_HBUF_INDEX,
|
||||
set_buf_index, 2))
|
||||
return false;
|
||||
/* sdvo spec says that the ecc is handled by the hw, and it looks like
|
||||
* we must not send the ecc field, either. */
|
||||
memcpy(sdvo_data, &avi_if, 3);
|
||||
sdvo_data[3] = avi_if.checksum;
|
||||
memcpy(&sdvo_data[4], &avi_if.body, sizeof(avi_if.body.avi));
|
||||
|
||||
for (i = 0; i < sizeof(avi_if); i += 8) {
|
||||
if (!intel_sdvo_set_value(intel_sdvo,
|
||||
SDVO_CMD_SET_HBUF_DATA,
|
||||
data, 8))
|
||||
return false;
|
||||
data++;
|
||||
}
|
||||
|
||||
return intel_sdvo_set_value(intel_sdvo,
|
||||
SDVO_CMD_SET_HBUF_TXRATE,
|
||||
&tx_rate, 1);
|
||||
return intel_sdvo_write_infoframe(intel_sdvo, SDVO_HBUF_INDEX_AVI_IF,
|
||||
SDVO_HBUF_TX_VSYNC,
|
||||
sdvo_data, sizeof(sdvo_data));
|
||||
}
|
||||
|
||||
static bool intel_sdvo_set_tv_format(struct intel_sdvo *intel_sdvo)
|
||||
|
|
|
|||
|
|
@ -708,6 +708,8 @@ struct intel_sdvo_enhancements_arg {
|
|||
#define SDVO_CMD_SET_AUDIO_STAT 0x91
|
||||
#define SDVO_CMD_GET_AUDIO_STAT 0x92
|
||||
#define SDVO_CMD_SET_HBUF_INDEX 0x93
|
||||
#define SDVO_HBUF_INDEX_ELD 0
|
||||
#define SDVO_HBUF_INDEX_AVI_IF 1
|
||||
#define SDVO_CMD_GET_HBUF_INDEX 0x94
|
||||
#define SDVO_CMD_GET_HBUF_INFO 0x95
|
||||
#define SDVO_CMD_SET_HBUF_AV_SPLIT 0x96
|
||||
|
|
|
|||
|
|
@ -209,7 +209,7 @@ out:
|
|||
NVWriteVgaCrtc(dev, 0, NV_CIO_CR_MODE_INDEX, saved_cr_mode);
|
||||
|
||||
if (blue == 0x18) {
|
||||
NV_INFO(dev, "Load detected on head A\n");
|
||||
NV_DEBUG(dev, "Load detected on head A\n");
|
||||
return connector_status_connected;
|
||||
}
|
||||
|
||||
|
|
@ -323,7 +323,7 @@ nv17_dac_detect(struct drm_encoder *encoder, struct drm_connector *connector)
|
|||
|
||||
if (nv17_dac_sample_load(encoder) &
|
||||
NV_PRAMDAC_TEST_CONTROL_SENSEB_ALLHI) {
|
||||
NV_INFO(dev, "Load detected on output %c\n",
|
||||
NV_DEBUG(dev, "Load detected on output %c\n",
|
||||
'@' + ffs(dcb->or));
|
||||
return connector_status_connected;
|
||||
} else {
|
||||
|
|
@ -398,7 +398,7 @@ static void nv04_dac_commit(struct drm_encoder *encoder)
|
|||
|
||||
helper->dpms(encoder, DRM_MODE_DPMS_ON);
|
||||
|
||||
NV_INFO(dev, "Output %s is running on CRTC %d using output %c\n",
|
||||
NV_DEBUG(dev, "Output %s is running on CRTC %d using output %c\n",
|
||||
drm_get_connector_name(&nouveau_encoder_connector_get(nv_encoder)->base),
|
||||
nv_crtc->index, '@' + ffs(nv_encoder->dcb->or));
|
||||
}
|
||||
|
|
@ -447,7 +447,7 @@ static void nv04_dac_dpms(struct drm_encoder *encoder, int mode)
|
|||
return;
|
||||
nv_encoder->last_dpms = mode;
|
||||
|
||||
NV_INFO(dev, "Setting dpms mode %d on vga encoder (output %d)\n",
|
||||
NV_DEBUG(dev, "Setting dpms mode %d on vga encoder (output %d)\n",
|
||||
mode, nv_encoder->dcb->index);
|
||||
|
||||
nv04_dac_update_dacclk(encoder, mode == DRM_MODE_DPMS_ON);
|
||||
|
|
|
|||
|
|
@ -468,7 +468,7 @@ static void nv04_dfp_commit(struct drm_encoder *encoder)
|
|||
|
||||
helper->dpms(encoder, DRM_MODE_DPMS_ON);
|
||||
|
||||
NV_INFO(dev, "Output %s is running on CRTC %d using output %c\n",
|
||||
NV_DEBUG(dev, "Output %s is running on CRTC %d using output %c\n",
|
||||
drm_get_connector_name(&nouveau_encoder_connector_get(nv_encoder)->base),
|
||||
nv_crtc->index, '@' + ffs(nv_encoder->dcb->or));
|
||||
}
|
||||
|
|
@ -511,7 +511,7 @@ static void nv04_lvds_dpms(struct drm_encoder *encoder, int mode)
|
|||
return;
|
||||
nv_encoder->last_dpms = mode;
|
||||
|
||||
NV_INFO(dev, "Setting dpms mode %d on lvds encoder (output %d)\n",
|
||||
NV_DEBUG(dev, "Setting dpms mode %d on lvds encoder (output %d)\n",
|
||||
mode, nv_encoder->dcb->index);
|
||||
|
||||
if (was_powersaving && is_powersaving_dpms(mode))
|
||||
|
|
@ -556,7 +556,7 @@ static void nv04_tmds_dpms(struct drm_encoder *encoder, int mode)
|
|||
return;
|
||||
nv_encoder->last_dpms = mode;
|
||||
|
||||
NV_INFO(dev, "Setting dpms mode %d on tmds encoder (output %d)\n",
|
||||
NV_DEBUG(dev, "Setting dpms mode %d on tmds encoder (output %d)\n",
|
||||
mode, nv_encoder->dcb->index);
|
||||
|
||||
nv04_dfp_update_backlight(encoder, mode);
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@ static void nv04_tv_dpms(struct drm_encoder *encoder, int mode)
|
|||
struct nv04_mode_state *state = &dev_priv->mode_reg;
|
||||
uint8_t crtc1A;
|
||||
|
||||
NV_INFO(dev, "Setting dpms mode %d on TV encoder (output %d)\n",
|
||||
NV_DEBUG(dev, "Setting dpms mode %d on TV encoder (output %d)\n",
|
||||
mode, nv_encoder->dcb->index);
|
||||
|
||||
state->pllsel &= ~(PLLSEL_TV_CRTC1_MASK | PLLSEL_TV_CRTC2_MASK);
|
||||
|
|
@ -162,7 +162,7 @@ static void nv04_tv_commit(struct drm_encoder *encoder)
|
|||
|
||||
helper->dpms(encoder, DRM_MODE_DPMS_ON);
|
||||
|
||||
NV_INFO(dev, "Output %s is running on CRTC %d using output %c\n",
|
||||
NV_DEBUG(dev, "Output %s is running on CRTC %d using output %c\n",
|
||||
drm_get_connector_name(&nouveau_encoder_connector_get(nv_encoder)->base), nv_crtc->index,
|
||||
'@' + ffs(nv_encoder->dcb->or));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -70,9 +70,12 @@ static struct radeon_agpmode_quirk radeon_agpmode_quirk_list[] = {
|
|||
/* Intel 82830 830 Chipset Host Bridge / Mobility M6 LY Needs AGPMode 2 (fdo #17360)*/
|
||||
{ PCI_VENDOR_ID_INTEL, 0x3575, PCI_VENDOR_ID_ATI, 0x4c59,
|
||||
PCI_VENDOR_ID_DELL, 0x00e3, 2},
|
||||
/* Intel 82852/82855 host bridge / Mobility FireGL 9000 R250 Needs AGPMode 1 (lp #296617) */
|
||||
/* Intel 82852/82855 host bridge / Mobility FireGL 9000 RV250 Needs AGPMode 1 (lp #296617) */
|
||||
{ PCI_VENDOR_ID_INTEL, 0x3580, PCI_VENDOR_ID_ATI, 0x4c66,
|
||||
PCI_VENDOR_ID_DELL, 0x0149, 1},
|
||||
/* Intel 82855PM host bridge / Mobility FireGL 9000 RV250 Needs AGPMode 1 for suspend/resume */
|
||||
{ PCI_VENDOR_ID_INTEL, 0x3340, PCI_VENDOR_ID_ATI, 0x4c66,
|
||||
PCI_VENDOR_ID_IBM, 0x0531, 1},
|
||||
/* Intel 82852/82855 host bridge / Mobility 9600 M10 RV350 Needs AGPMode 1 (deb #467460) */
|
||||
{ PCI_VENDOR_ID_INTEL, 0x3580, PCI_VENDOR_ID_ATI, 0x4e50,
|
||||
0x1025, 0x0061, 1},
|
||||
|
|
|
|||
|
|
@ -650,6 +650,7 @@ static enum drm_connector_status radeon_legacy_primary_dac_detect(struct drm_enc
|
|||
tmp |= RADEON_DAC_RANGE_CNTL_PS2 | RADEON_DAC_CMP_EN;
|
||||
WREG32(RADEON_DAC_CNTL, tmp);
|
||||
|
||||
tmp = dac_macro_cntl;
|
||||
tmp &= ~(RADEON_DAC_PDWN_R |
|
||||
RADEON_DAC_PDWN_G |
|
||||
RADEON_DAC_PDWN_B);
|
||||
|
|
|
|||
|
|
@ -858,6 +858,11 @@ static void vmw_pm_complete(struct device *kdev)
|
|||
struct drm_device *dev = pci_get_drvdata(pdev);
|
||||
struct vmw_private *dev_priv = vmw_priv(dev);
|
||||
|
||||
mutex_lock(&dev_priv->hw_mutex);
|
||||
vmw_write(dev_priv, SVGA_REG_ID, SVGA_ID_2);
|
||||
(void) vmw_read(dev_priv, SVGA_REG_ID);
|
||||
mutex_unlock(&dev_priv->hw_mutex);
|
||||
|
||||
/**
|
||||
* Reclaim 3d reference held by fbdev and potentially
|
||||
* start fifo.
|
||||
|
|
|
|||
|
|
@ -31,6 +31,9 @@ MODULE_DESCRIPTION("AMD Family 15h CPU processor power monitor");
|
|||
MODULE_AUTHOR("Andreas Herrmann <andreas.herrmann3@amd.com>");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
/* Family 16h Northbridge's function 4 PCI ID */
|
||||
#define PCI_DEVICE_ID_AMD_16H_NB_F4 0x1534
|
||||
|
||||
/* D18F3 */
|
||||
#define REG_NORTHBRIDGE_CAP 0xe8
|
||||
|
||||
|
|
@ -256,6 +259,7 @@ static void __devexit fam15h_power_remove(struct pci_dev *pdev)
|
|||
|
||||
static DEFINE_PCI_DEVICE_TABLE(fam15h_power_id_table) = {
|
||||
{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_15H_NB_F4) },
|
||||
{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_16H_NB_F4) },
|
||||
{}
|
||||
};
|
||||
MODULE_DEVICE_TABLE(pci, fam15h_power_id_table);
|
||||
|
|
|
|||
|
|
@ -1834,6 +1834,7 @@ static int __devinit w83627ehf_probe(struct platform_device *pdev)
|
|||
mutex_init(&data->lock);
|
||||
mutex_init(&data->update_lock);
|
||||
data->name = w83627ehf_device_names[sio_data->kind];
|
||||
data->bank = 0xff; /* Force initial bank selection */
|
||||
platform_set_drvdata(pdev, data);
|
||||
|
||||
/* 627EHG and 627EHF have 10 voltage inputs; 627DHG and 667HG have 9 */
|
||||
|
|
|
|||
|
|
@ -196,6 +196,7 @@ static void walkera0701_close(struct input_dev *dev)
|
|||
struct walkera_dev *w = input_get_drvdata(dev);
|
||||
|
||||
parport_disable_irq(w->parport);
|
||||
hrtimer_cancel(&w->timer);
|
||||
}
|
||||
|
||||
static int walkera0701_connect(struct walkera_dev *w, int parport)
|
||||
|
|
@ -224,6 +225,9 @@ static int walkera0701_connect(struct walkera_dev *w, int parport)
|
|||
if (parport_claim(w->pardevice))
|
||||
goto init_err1;
|
||||
|
||||
hrtimer_init(&w->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
|
||||
w->timer.function = timer_handler;
|
||||
|
||||
w->input_dev = input_allocate_device();
|
||||
if (!w->input_dev)
|
||||
goto init_err2;
|
||||
|
|
@ -254,8 +258,6 @@ static int walkera0701_connect(struct walkera_dev *w, int parport)
|
|||
if (err)
|
||||
goto init_err3;
|
||||
|
||||
hrtimer_init(&w->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
|
||||
w->timer.function = timer_handler;
|
||||
return 0;
|
||||
|
||||
init_err3:
|
||||
|
|
@ -271,7 +273,6 @@ static int walkera0701_connect(struct walkera_dev *w, int parport)
|
|||
|
||||
static void walkera0701_disconnect(struct walkera_dev *w)
|
||||
{
|
||||
hrtimer_cancel(&w->timer);
|
||||
input_unregister_device(w->input_dev);
|
||||
parport_release(w->pardevice);
|
||||
parport_unregister_device(w->pardevice);
|
||||
|
|
|
|||
|
|
@ -373,6 +373,9 @@ static void setup_events_to_report(struct input_dev *input_dev,
|
|||
__set_bit(BTN_TOOL_QUADTAP, input_dev->keybit);
|
||||
__set_bit(BTN_LEFT, input_dev->keybit);
|
||||
|
||||
if (cfg->caps & HAS_INTEGRATED_BUTTON)
|
||||
__set_bit(INPUT_PROP_BUTTONPAD, input_dev->propbit);
|
||||
|
||||
input_set_events_per_packet(input_dev, 60);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -900,6 +900,7 @@ static int __init i8042_platform_init(void)
|
|||
int retval;
|
||||
|
||||
#ifdef CONFIG_X86
|
||||
u8 a20_on = 0xdf;
|
||||
/* Just return if pre-detection shows no i8042 controller exist */
|
||||
if (!x86_platform.i8042_detect())
|
||||
return -ENODEV;
|
||||
|
|
@ -939,6 +940,14 @@ static int __init i8042_platform_init(void)
|
|||
|
||||
if (dmi_check_system(i8042_dmi_dritek_table))
|
||||
i8042_dritek = true;
|
||||
|
||||
/*
|
||||
* A20 was already enabled during early kernel init. But some buggy
|
||||
* BIOSes (in MSI Laptops) require A20 to be enabled using 8042 to
|
||||
* resume from S3. So we do it here and hope that nothing breaks.
|
||||
*/
|
||||
i8042_command(&a20_on, 0x10d1);
|
||||
i8042_command(NULL, 0x00ff); /* Null command for SMM firmware */
|
||||
#endif /* CONFIG_X86 */
|
||||
|
||||
return retval;
|
||||
|
|
|
|||
|
|
@ -616,7 +616,13 @@ static void int_in_work(struct work_struct *work)
|
|||
if (rc == 0)
|
||||
/* success, resubmit interrupt read URB */
|
||||
rc = usb_submit_urb(urb, GFP_ATOMIC);
|
||||
if (rc != 0 && rc != -ENODEV) {
|
||||
|
||||
switch (rc) {
|
||||
case 0: /* success */
|
||||
case -ENODEV: /* device gone */
|
||||
case -EINVAL: /* URB already resubmitted, or terminal badness */
|
||||
break;
|
||||
default: /* failure: try to recover by resetting the device */
|
||||
dev_err(cs->dev, "clear halt failed: %s\n", get_usb_rcmsg(rc));
|
||||
rc = usb_lock_device_for_reset(ucs->udev, ucs->interface);
|
||||
if (rc == 0) {
|
||||
|
|
@ -2437,7 +2443,9 @@ static void gigaset_disconnect(struct usb_interface *interface)
|
|||
}
|
||||
|
||||
/* gigaset_suspend
|
||||
* This function is called before the USB connection is suspended.
|
||||
* This function is called before the USB connection is suspended
|
||||
* or before the USB device is reset.
|
||||
* In the latter case, message == PMSG_ON.
|
||||
*/
|
||||
static int gigaset_suspend(struct usb_interface *intf, pm_message_t message)
|
||||
{
|
||||
|
|
@ -2493,7 +2501,12 @@ static int gigaset_suspend(struct usb_interface *intf, pm_message_t message)
|
|||
del_timer_sync(&ucs->timer_atrdy);
|
||||
del_timer_sync(&ucs->timer_cmd_in);
|
||||
del_timer_sync(&ucs->timer_int_in);
|
||||
cancel_work_sync(&ucs->int_in_wq);
|
||||
|
||||
/* don't try to cancel int_in_wq from within reset as it
|
||||
* might be the one requesting the reset
|
||||
*/
|
||||
if (message.event != PM_EVENT_ON)
|
||||
cancel_work_sync(&ucs->int_in_wq);
|
||||
|
||||
gig_dbg(DEBUG_SUSPEND, "suspend complete");
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -745,8 +745,14 @@ static void rq_completed(struct mapped_device *md, int rw, int run_queue)
|
|||
if (!md_in_flight(md))
|
||||
wake_up(&md->wait);
|
||||
|
||||
/*
|
||||
* Run this off this callpath, as drivers could invoke end_io while
|
||||
* inside their request_fn (and holding the queue lock). Calling
|
||||
* back into ->request_fn() could deadlock attempting to grab the
|
||||
* queue lock again.
|
||||
*/
|
||||
if (run_queue)
|
||||
blk_run_queue(md->queue);
|
||||
blk_run_queue_async(md->queue);
|
||||
|
||||
/*
|
||||
* dm_put() must be at the end of this function. See the comment above
|
||||
|
|
|
|||
|
|
@ -589,7 +589,7 @@ static int __devexit sdhci_s3c_remove(struct platform_device *pdev)
|
|||
|
||||
sdhci_remove_host(host, 1);
|
||||
|
||||
for (ptr = 0; ptr < 3; ptr++) {
|
||||
for (ptr = 0; ptr < MAX_BUS_CLK; ptr++) {
|
||||
if (sc->clk_bus[ptr]) {
|
||||
clk_disable(sc->clk_bus[ptr]);
|
||||
clk_put(sc->clk_bus[ptr]);
|
||||
|
|
|
|||
|
|
@ -266,7 +266,7 @@ static int parse_cmdline(char *devname, char *szstart, char *szlength)
|
|||
|
||||
if (*(szlength) != '+') {
|
||||
devlength = simple_strtoul(szlength, &buffer, 0);
|
||||
devlength = handle_unit(devlength, buffer) - devstart;
|
||||
devlength = handle_unit(devlength, buffer);
|
||||
if (devlength < devstart)
|
||||
goto err_out;
|
||||
|
||||
|
|
|
|||
|
|
@ -1439,6 +1439,8 @@ static void bond_compute_features(struct bonding *bond)
|
|||
struct net_device *bond_dev = bond->dev;
|
||||
u32 vlan_features = BOND_VLAN_FEATURES;
|
||||
unsigned short max_hard_header_len = ETH_HLEN;
|
||||
unsigned int gso_max_size = GSO_MAX_SIZE;
|
||||
u16 gso_max_segs = GSO_MAX_SEGS;
|
||||
int i;
|
||||
|
||||
read_lock(&bond->lock);
|
||||
|
|
@ -1452,11 +1454,16 @@ static void bond_compute_features(struct bonding *bond)
|
|||
|
||||
if (slave->dev->hard_header_len > max_hard_header_len)
|
||||
max_hard_header_len = slave->dev->hard_header_len;
|
||||
|
||||
gso_max_size = min(gso_max_size, slave->dev->gso_max_size);
|
||||
gso_max_segs = min(gso_max_segs, slave->dev->gso_max_segs);
|
||||
}
|
||||
|
||||
done:
|
||||
bond_dev->vlan_features = vlan_features;
|
||||
bond_dev->hard_header_len = max_hard_header_len;
|
||||
bond_dev->gso_max_segs = gso_max_segs;
|
||||
netif_set_gso_max_size(bond_dev, gso_max_size);
|
||||
|
||||
read_unlock(&bond->lock);
|
||||
|
||||
|
|
|
|||
|
|
@ -1524,6 +1524,7 @@ static ssize_t bonding_store_slaves_active(struct device *d,
|
|||
goto out;
|
||||
}
|
||||
|
||||
read_lock(&bond->lock);
|
||||
bond_for_each_slave(bond, slave, i) {
|
||||
if (!bond_is_active_slave(slave)) {
|
||||
if (new_value)
|
||||
|
|
@ -1532,6 +1533,7 @@ static ssize_t bonding_store_slaves_active(struct device *d,
|
|||
slave->inactive = 1;
|
||||
}
|
||||
}
|
||||
read_unlock(&bond->lock);
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -557,8 +557,7 @@ void close_candev(struct net_device *dev)
|
|||
{
|
||||
struct can_priv *priv = netdev_priv(dev);
|
||||
|
||||
if (del_timer_sync(&priv->restart_timer))
|
||||
dev_put(dev);
|
||||
del_timer_sync(&priv->restart_timer);
|
||||
can_flush_echo_skb(dev);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(close_candev);
|
||||
|
|
|
|||
|
|
@ -221,7 +221,7 @@ static void sirdev_config_fsm(struct work_struct *work)
|
|||
break;
|
||||
|
||||
case SIRDEV_STATE_DONGLE_SPEED:
|
||||
if (dev->dongle_drv->reset) {
|
||||
if (dev->dongle_drv->set_speed) {
|
||||
ret = dev->dongle_drv->set_speed(dev, fsm->param);
|
||||
if (ret < 0) {
|
||||
fsm->result = ret;
|
||||
|
|
|
|||
|
|
@ -360,6 +360,8 @@ static enum ixgbe_media_type ixgbe_get_media_type_82599(struct ixgbe_hw *hw)
|
|||
case IXGBE_DEV_ID_82599_SFP_FCOE:
|
||||
case IXGBE_DEV_ID_82599_SFP_EM:
|
||||
case IXGBE_DEV_ID_82599_SFP_SF2:
|
||||
case IXGBE_DEV_ID_82599EN_SFP:
|
||||
case IXGBE_DEV_ID_82599_SFP_SF_QP:
|
||||
media_type = ixgbe_media_type_fiber;
|
||||
break;
|
||||
case IXGBE_DEV_ID_82599_CX4:
|
||||
|
|
|
|||
|
|
@ -3181,6 +3181,7 @@ static s32 ixgbe_device_supports_autoneg_fc(struct ixgbe_hw *hw)
|
|||
|
||||
switch (hw->device_id) {
|
||||
case IXGBE_DEV_ID_X540T:
|
||||
case IXGBE_DEV_ID_X540T1:
|
||||
return 0;
|
||||
case IXGBE_DEV_ID_82599_T3_LOM:
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -129,6 +129,12 @@ static DEFINE_PCI_DEVICE_TABLE(ixgbe_pci_tbl) = {
|
|||
board_82599 },
|
||||
{PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82599_LS),
|
||||
board_82599 },
|
||||
{PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82599EN_SFP),
|
||||
board_82599 },
|
||||
{PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82599_SFP_SF_QP),
|
||||
board_82599 },
|
||||
{PCI_VDEVICE(INTEL, IXGBE_DEV_ID_X540T1),
|
||||
board_X540 },
|
||||
|
||||
/* required last entry */
|
||||
{0, }
|
||||
|
|
|
|||
|
|
@ -59,11 +59,14 @@
|
|||
#define IXGBE_SUBDEV_ID_82599_SFP 0x11A9
|
||||
#define IXGBE_DEV_ID_82599_SFP_EM 0x1507
|
||||
#define IXGBE_DEV_ID_82599_SFP_SF2 0x154D
|
||||
#define IXGBE_DEV_ID_82599EN_SFP 0x1557
|
||||
#define IXGBE_DEV_ID_82599_XAUI_LOM 0x10FC
|
||||
#define IXGBE_DEV_ID_82599_COMBO_BACKPLANE 0x10F8
|
||||
#define IXGBE_SUBDEV_ID_82599_KX4_KR_MEZZ 0x000C
|
||||
#define IXGBE_DEV_ID_82599_LS 0x154F
|
||||
#define IXGBE_DEV_ID_82599_SFP_SF_QP 0x154A
|
||||
#define IXGBE_DEV_ID_X540T 0x1528
|
||||
#define IXGBE_DEV_ID_X540T1 0x1560
|
||||
|
||||
/* General Registers */
|
||||
#define IXGBE_CTRL 0x00000
|
||||
|
|
|
|||
|
|
@ -814,6 +814,7 @@ static int __init ne_drv_probe(struct platform_device *pdev)
|
|||
dev->irq = irq[this_dev];
|
||||
dev->mem_end = bad[this_dev];
|
||||
}
|
||||
SET_NETDEV_DEV(dev, &pdev->dev);
|
||||
err = do_ne_probe(dev);
|
||||
if (err) {
|
||||
free_netdev(dev);
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@ static const int multicast_filter_limit = 32;
|
|||
#define MAX_READ_REQUEST_SHIFT 12
|
||||
#define RX_FIFO_THRESH 7 /* 7 means NO threshold, Rx buffer level before first PCI xfer. */
|
||||
#define RX_DMA_BURST 6 /* Maximum PCI burst, '6' is 1024 */
|
||||
#define TX_DMA_BURST 6 /* Maximum PCI burst, '6' is 1024 */
|
||||
#define TX_DMA_BURST 7 /* Maximum PCI burst, '7' is unlimited */
|
||||
#define SafeMtu 0x1c20 /* ... actually life sucks beyond ~7k */
|
||||
#define InterFrameGap 0x03 /* 3 means InterFrameGap = the shortest one */
|
||||
|
||||
|
|
|
|||
|
|
@ -2929,8 +2929,10 @@ static irqreturn_t sky2_intr(int irq, void *dev_id)
|
|||
|
||||
/* Reading this mask interrupts as side effect */
|
||||
status = sky2_read32(hw, B0_Y2_SP_ISRC2);
|
||||
if (status == 0 || status == ~0)
|
||||
if (status == 0 || status == ~0) {
|
||||
sky2_write32(hw, B0_Y2_SP_ICR, 2);
|
||||
return IRQ_NONE;
|
||||
}
|
||||
|
||||
prefetch(&hw->st_le[hw->st_idx]);
|
||||
|
||||
|
|
|
|||
|
|
@ -62,6 +62,7 @@
|
|||
#define USB_PRODUCT_IPAD 0x129a
|
||||
#define USB_PRODUCT_IPHONE_4_VZW 0x129c
|
||||
#define USB_PRODUCT_IPHONE_4S 0x12a0
|
||||
#define USB_PRODUCT_IPHONE_5 0x12a8
|
||||
|
||||
#define IPHETH_USBINTF_CLASS 255
|
||||
#define IPHETH_USBINTF_SUBCLASS 253
|
||||
|
|
@ -113,6 +114,10 @@ static struct usb_device_id ipheth_table[] = {
|
|||
USB_VENDOR_APPLE, USB_PRODUCT_IPHONE_4S,
|
||||
IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
|
||||
IPHETH_USBINTF_PROTO) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(
|
||||
USB_VENDOR_APPLE, USB_PRODUCT_IPHONE_5,
|
||||
IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
|
||||
IPHETH_USBINTF_PROTO) },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(usb, ipheth_table);
|
||||
|
|
|
|||
|
|
@ -1149,6 +1149,7 @@ netdev_tx_t usbnet_start_xmit (struct sk_buff *skb,
|
|||
usb_anchor_urb(urb, &dev->deferred);
|
||||
/* no use to process more packets */
|
||||
netif_stop_queue(net);
|
||||
usb_put_urb(urb);
|
||||
spin_unlock_irqrestore(&dev->txq.lock, flags);
|
||||
netdev_dbg(dev->net, "Delaying transmission for resumption\n");
|
||||
goto deferred;
|
||||
|
|
@ -1290,6 +1291,8 @@ void usbnet_disconnect (struct usb_interface *intf)
|
|||
|
||||
cancel_work_sync(&dev->kevent);
|
||||
|
||||
usb_scuttle_anchored_urbs(&dev->deferred);
|
||||
|
||||
if (dev->driver_info->unbind)
|
||||
dev->driver_info->unbind (dev, intf);
|
||||
|
||||
|
|
|
|||
|
|
@ -272,6 +272,7 @@ static struct ath_buf *ath_tx_get_buffer(struct ath_softc *sc)
|
|||
}
|
||||
|
||||
bf = list_first_entry(&sc->tx.txbuf, struct ath_buf, list);
|
||||
bf->bf_next = NULL;
|
||||
list_del(&bf->list);
|
||||
|
||||
spin_unlock_bh(&sc->tx.txbuflock);
|
||||
|
|
@ -1488,6 +1489,7 @@ static void ath_tx_send_normal(struct ath_softc *sc, struct ath_txq *txq,
|
|||
if (tid)
|
||||
INCR(tid->seq_start, IEEE80211_SEQ_MAX);
|
||||
|
||||
bf->bf_next = NULL;
|
||||
bf->bf_lastbf = bf;
|
||||
fi = get_frame_info(bf->bf_mpdu);
|
||||
ath_buf_set_rate(sc, bf, fi->framelen);
|
||||
|
|
|
|||
|
|
@ -122,7 +122,6 @@ static int mwifiex_sdio_suspend(struct device *dev)
|
|||
struct sdio_mmc_card *card;
|
||||
struct mwifiex_adapter *adapter;
|
||||
mmc_pm_flag_t pm_flag = 0;
|
||||
int hs_actived = 0;
|
||||
int i;
|
||||
int ret = 0;
|
||||
|
||||
|
|
@ -149,12 +148,14 @@ static int mwifiex_sdio_suspend(struct device *dev)
|
|||
adapter = card->adapter;
|
||||
|
||||
/* Enable the Host Sleep */
|
||||
hs_actived = mwifiex_enable_hs(adapter);
|
||||
if (hs_actived) {
|
||||
pr_debug("cmd: suspend with MMC_PM_KEEP_POWER\n");
|
||||
ret = sdio_set_host_pm_flags(func, MMC_PM_KEEP_POWER);
|
||||
if (!mwifiex_enable_hs(adapter)) {
|
||||
dev_err(adapter->dev, "cmd: failed to suspend\n");
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
dev_dbg(adapter->dev, "cmd: suspend with MMC_PM_KEEP_POWER\n");
|
||||
ret = sdio_set_host_pm_flags(func, MMC_PM_KEEP_POWER);
|
||||
|
||||
/* Indicate device suspended */
|
||||
adapter->is_suspended = true;
|
||||
|
||||
|
|
|
|||
|
|
@ -46,6 +46,7 @@ static struct usb_device_id p54u_table[] = {
|
|||
{USB_DEVICE(0x0411, 0x0050)}, /* Buffalo WLI2-USB2-G54 */
|
||||
{USB_DEVICE(0x045e, 0x00c2)}, /* Microsoft MN-710 */
|
||||
{USB_DEVICE(0x0506, 0x0a11)}, /* 3COM 3CRWE254G72 */
|
||||
{USB_DEVICE(0x0675, 0x0530)}, /* DrayTek Vigor 530 */
|
||||
{USB_DEVICE(0x06b9, 0x0120)}, /* Thomson SpeedTouch 120g */
|
||||
{USB_DEVICE(0x0707, 0xee06)}, /* SMC 2862W-G */
|
||||
{USB_DEVICE(0x07aa, 0x001c)}, /* Corega CG-WLUSB2GT */
|
||||
|
|
@ -81,6 +82,8 @@ static struct usb_device_id p54u_table[] = {
|
|||
{USB_DEVICE(0x06a9, 0x000e)}, /* Westell 802.11g USB (A90-211WG-01) */
|
||||
{USB_DEVICE(0x06b9, 0x0121)}, /* Thomson SpeedTouch 121g */
|
||||
{USB_DEVICE(0x0707, 0xee13)}, /* SMC 2862W-G version 2 */
|
||||
{USB_DEVICE(0x0803, 0x4310)}, /* Zoom 4410a */
|
||||
{USB_DEVICE(0x083a, 0x4503)}, /* T-Com Sinus 154 data II */
|
||||
{USB_DEVICE(0x083a, 0x4521)}, /* Siemens Gigaset USB Adapter 54 version 2 */
|
||||
{USB_DEVICE(0x083a, 0xc501)}, /* Zoom Wireless-G 4410 */
|
||||
{USB_DEVICE(0x083a, 0xf503)}, /* Accton FD7050E ver 1010ec */
|
||||
|
|
@ -100,6 +103,7 @@ static struct usb_device_id p54u_table[] = {
|
|||
{USB_DEVICE(0x13B1, 0x000C)}, /* Linksys WUSB54AG */
|
||||
{USB_DEVICE(0x1413, 0x5400)}, /* Telsey 802.11g USB2.0 Adapter */
|
||||
{USB_DEVICE(0x1435, 0x0427)}, /* Inventel UR054G */
|
||||
/* {USB_DEVICE(0x15a9, 0x0002)}, * Also SparkLAN WL-682 with 3887 */
|
||||
{USB_DEVICE(0x1668, 0x1050)}, /* Actiontec 802UIG-1 */
|
||||
{USB_DEVICE(0x1740, 0x1000)}, /* Senao NUB-350 */
|
||||
{USB_DEVICE(0x2001, 0x3704)}, /* DLink DWL-G122 rev A2 */
|
||||
|
|
|
|||
|
|
@ -1935,7 +1935,7 @@ static int rt2800_get_gain_calibration_delta(struct rt2x00_dev *rt2x00dev)
|
|||
/*
|
||||
* Check if temperature compensation is supported.
|
||||
*/
|
||||
if (tssi_bounds[4] == 0xff)
|
||||
if (tssi_bounds[4] == 0xff || step == 0xff)
|
||||
return 0;
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -295,6 +295,7 @@ static struct usb_device_id rtl8192c_usb_ids[] = {
|
|||
/*=== Customer ID ===*/
|
||||
/****** 8188CU ********/
|
||||
{RTL_USB_DEVICE(0x050d, 0x1102, rtl92cu_hal_cfg)}, /*Belkin - Edimax*/
|
||||
{RTL_USB_DEVICE(0x050d, 0x11f2, rtl92cu_hal_cfg)}, /*Belkin - ISY*/
|
||||
{RTL_USB_DEVICE(0x06f8, 0xe033, rtl92cu_hal_cfg)}, /*Hercules - Edimax*/
|
||||
{RTL_USB_DEVICE(0x07b8, 0x8188, rtl92cu_hal_cfg)}, /*Abocom - Abocom*/
|
||||
{RTL_USB_DEVICE(0x07b8, 0x8189, rtl92cu_hal_cfg)}, /*Funai - Abocom*/
|
||||
|
|
|
|||
|
|
@ -3573,6 +3573,8 @@ static void domain_remove_one_dev_info(struct dmar_domain *domain,
|
|||
found = 1;
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(&device_domain_lock, flags);
|
||||
|
||||
if (found == 0) {
|
||||
unsigned long tmp_flags;
|
||||
spin_lock_irqsave(&domain->iommu_lock, tmp_flags);
|
||||
|
|
@ -3589,8 +3591,6 @@ static void domain_remove_one_dev_info(struct dmar_domain *domain,
|
|||
spin_unlock_irqrestore(&iommu->lock, tmp_flags);
|
||||
}
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(&device_domain_lock, flags);
|
||||
}
|
||||
|
||||
static void vm_domain_remove_all_dev_info(struct dmar_domain *domain)
|
||||
|
|
|
|||
|
|
@ -2746,7 +2746,7 @@ static void ricoh_mmc_fixup_r5c832(struct pci_dev *dev)
|
|||
if (PCI_FUNC(dev->devfn))
|
||||
return;
|
||||
/*
|
||||
* RICOH 0xe823 SD/MMC card reader fails to recognize
|
||||
* RICOH 0xe822 and 0xe823 SD/MMC card readers fail to recognize
|
||||
* certain types of SD/MMC cards. Lowering the SD base
|
||||
* clock frequency from 200Mhz to 50Mhz fixes this issue.
|
||||
*
|
||||
|
|
@ -2757,7 +2757,8 @@ static void ricoh_mmc_fixup_r5c832(struct pci_dev *dev)
|
|||
* 0xf9 - Key register for 0x150
|
||||
* 0xfc - key register for 0xe1
|
||||
*/
|
||||
if (dev->device == PCI_DEVICE_ID_RICOH_R5CE823) {
|
||||
if (dev->device == PCI_DEVICE_ID_RICOH_R5CE822 ||
|
||||
dev->device == PCI_DEVICE_ID_RICOH_R5CE823) {
|
||||
pci_write_config_byte(dev, 0xf9, 0xfc);
|
||||
pci_write_config_byte(dev, 0x150, 0x10);
|
||||
pci_write_config_byte(dev, 0xf9, 0x00);
|
||||
|
|
@ -2784,6 +2785,8 @@ static void ricoh_mmc_fixup_r5c832(struct pci_dev *dev)
|
|||
}
|
||||
DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5C832, ricoh_mmc_fixup_r5c832);
|
||||
DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5C832, ricoh_mmc_fixup_r5c832);
|
||||
DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5CE822, ricoh_mmc_fixup_r5c832);
|
||||
DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5CE822, ricoh_mmc_fixup_r5c832);
|
||||
DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5CE823, ricoh_mmc_fixup_r5c832);
|
||||
DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5CE823, ricoh_mmc_fixup_r5c832);
|
||||
#endif /*CONFIG_MMC_RICOH_MMC*/
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ struct resource_list_x {
|
|||
resource_size_t start;
|
||||
resource_size_t end;
|
||||
resource_size_t add_size;
|
||||
resource_size_t min_align;
|
||||
unsigned long flags;
|
||||
};
|
||||
|
||||
|
|
@ -65,7 +66,7 @@ void pci_realloc(void)
|
|||
*/
|
||||
static void add_to_list(struct resource_list_x *head,
|
||||
struct pci_dev *dev, struct resource *res,
|
||||
resource_size_t add_size)
|
||||
resource_size_t add_size, resource_size_t min_align)
|
||||
{
|
||||
struct resource_list_x *list = head;
|
||||
struct resource_list_x *ln = list->next;
|
||||
|
|
@ -84,13 +85,16 @@ static void add_to_list(struct resource_list_x *head,
|
|||
tmp->end = res->end;
|
||||
tmp->flags = res->flags;
|
||||
tmp->add_size = add_size;
|
||||
tmp->min_align = min_align;
|
||||
list->next = tmp;
|
||||
}
|
||||
|
||||
static void add_to_failed_list(struct resource_list_x *head,
|
||||
struct pci_dev *dev, struct resource *res)
|
||||
{
|
||||
add_to_list(head, dev, res, 0);
|
||||
add_to_list(head, dev, res,
|
||||
0 /* dont care */,
|
||||
0 /* dont care */);
|
||||
}
|
||||
|
||||
static void __dev_sort_resources(struct pci_dev *dev,
|
||||
|
|
@ -159,13 +163,16 @@ static void adjust_resources_sorted(struct resource_list_x *add_head,
|
|||
|
||||
idx = res - &list->dev->resource[0];
|
||||
add_size=list->add_size;
|
||||
if (!resource_size(res) && add_size) {
|
||||
res->end = res->start + add_size - 1;
|
||||
if(pci_assign_resource(list->dev, idx))
|
||||
if (!resource_size(res)) {
|
||||
res->end = res->start + add_size - 1;
|
||||
if(pci_assign_resource(list->dev, idx))
|
||||
reset_resource(res);
|
||||
} else if (add_size) {
|
||||
adjust_resource(res, res->start,
|
||||
resource_size(res) + add_size);
|
||||
} else {
|
||||
resource_size_t align = list->min_align;
|
||||
res->flags |= list->flags & (IORESOURCE_STARTALIGN|IORESOURCE_SIZEALIGN);
|
||||
if (pci_reassign_resource(list->dev, idx, add_size, align))
|
||||
dev_printk(KERN_DEBUG, &list->dev->dev, "failed to add optional resources res=%pR\n",
|
||||
res);
|
||||
}
|
||||
out:
|
||||
tmp = list;
|
||||
|
|
@ -607,7 +614,7 @@ static void pbus_size_io(struct pci_bus *bus, resource_size_t min_size,
|
|||
if (children_add_size > add_size)
|
||||
add_size = children_add_size;
|
||||
size1 = (!add_head || (add_head && !add_size)) ? size0 :
|
||||
calculate_iosize(size, min_size+add_size, size1,
|
||||
calculate_iosize(size, min_size, add_size + size1,
|
||||
resource_size(b_res), 4096);
|
||||
if (!size0 && !size1) {
|
||||
if (b_res->start || b_res->end)
|
||||
|
|
@ -622,7 +629,7 @@ static void pbus_size_io(struct pci_bus *bus, resource_size_t min_size,
|
|||
b_res->end = b_res->start + size0 - 1;
|
||||
b_res->flags |= IORESOURCE_STARTALIGN;
|
||||
if (size1 > size0 && add_head)
|
||||
add_to_list(add_head, bus->self, b_res, size1-size0);
|
||||
add_to_list(add_head, bus->self, b_res, size1-size0, 4096);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -711,7 +718,7 @@ static int pbus_size_mem(struct pci_bus *bus, unsigned long mask,
|
|||
if (children_add_size > add_size)
|
||||
add_size = children_add_size;
|
||||
size1 = (!add_head || (add_head && !add_size)) ? size0 :
|
||||
calculate_memsize(size, min_size+add_size, 0,
|
||||
calculate_memsize(size, min_size, add_size,
|
||||
resource_size(b_res), min_align);
|
||||
if (!size0 && !size1) {
|
||||
if (b_res->start || b_res->end)
|
||||
|
|
@ -725,7 +732,7 @@ static int pbus_size_mem(struct pci_bus *bus, unsigned long mask,
|
|||
b_res->end = size0 + min_align - 1;
|
||||
b_res->flags |= IORESOURCE_STARTALIGN | mem64_mask;
|
||||
if (size1 > size0 && add_head)
|
||||
add_to_list(add_head, bus->self, b_res, size1-size0);
|
||||
add_to_list(add_head, bus->self, b_res, size1-size0, min_align);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -129,16 +129,16 @@ void pci_disable_bridge_window(struct pci_dev *dev)
|
|||
}
|
||||
#endif /* CONFIG_PCI_QUIRKS */
|
||||
|
||||
|
||||
|
||||
static int __pci_assign_resource(struct pci_bus *bus, struct pci_dev *dev,
|
||||
int resno)
|
||||
int resno, resource_size_t size, resource_size_t align)
|
||||
{
|
||||
struct resource *res = dev->resource + resno;
|
||||
resource_size_t size, min, align;
|
||||
resource_size_t min;
|
||||
int ret;
|
||||
|
||||
size = resource_size(res);
|
||||
min = (res->flags & IORESOURCE_IO) ? PCIBIOS_MIN_IO : PCIBIOS_MIN_MEM;
|
||||
align = pci_resource_alignment(dev, res);
|
||||
|
||||
/* First, try exact prefetching match.. */
|
||||
ret = pci_bus_alloc_resource(bus, res, size, align, min,
|
||||
|
|
@ -155,73 +155,51 @@ static int __pci_assign_resource(struct pci_bus *bus, struct pci_dev *dev,
|
|||
ret = pci_bus_alloc_resource(bus, res, size, align, min, 0,
|
||||
pcibios_align_resource, dev);
|
||||
}
|
||||
|
||||
if (ret < 0 && dev->fw_addr[resno]) {
|
||||
struct resource *root, *conflict;
|
||||
resource_size_t start, end;
|
||||
|
||||
/*
|
||||
* If we failed to assign anything, let's try the address
|
||||
* where firmware left it. That at least has a chance of
|
||||
* working, which is better than just leaving it disabled.
|
||||
*/
|
||||
|
||||
if (res->flags & IORESOURCE_IO)
|
||||
root = &ioport_resource;
|
||||
else
|
||||
root = &iomem_resource;
|
||||
|
||||
start = res->start;
|
||||
end = res->end;
|
||||
res->start = dev->fw_addr[resno];
|
||||
res->end = res->start + size - 1;
|
||||
dev_info(&dev->dev, "BAR %d: trying firmware assignment %pR\n",
|
||||
resno, res);
|
||||
conflict = request_resource_conflict(root, res);
|
||||
if (conflict) {
|
||||
dev_info(&dev->dev,
|
||||
"BAR %d: %pR conflicts with %s %pR\n", resno,
|
||||
res, conflict->name, conflict);
|
||||
res->start = start;
|
||||
res->end = end;
|
||||
} else
|
||||
ret = 0;
|
||||
}
|
||||
|
||||
if (!ret) {
|
||||
res->flags &= ~IORESOURCE_STARTALIGN;
|
||||
dev_info(&dev->dev, "BAR %d: assigned %pR\n", resno, res);
|
||||
if (resno < PCI_BRIDGE_RESOURCES)
|
||||
pci_update_resource(dev, resno);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int pci_assign_resource(struct pci_dev *dev, int resno)
|
||||
static int pci_revert_fw_address(struct resource *res, struct pci_dev *dev,
|
||||
int resno, resource_size_t size)
|
||||
{
|
||||
struct resource *root, *conflict;
|
||||
resource_size_t start, end;
|
||||
int ret = 0;
|
||||
|
||||
if (res->flags & IORESOURCE_IO)
|
||||
root = &ioport_resource;
|
||||
else
|
||||
root = &iomem_resource;
|
||||
|
||||
start = res->start;
|
||||
end = res->end;
|
||||
res->start = dev->fw_addr[resno];
|
||||
res->end = res->start + size - 1;
|
||||
dev_info(&dev->dev, "BAR %d: trying firmware assignment %pR\n",
|
||||
resno, res);
|
||||
conflict = request_resource_conflict(root, res);
|
||||
if (conflict) {
|
||||
dev_info(&dev->dev,
|
||||
"BAR %d: %pR conflicts with %s %pR\n", resno,
|
||||
res, conflict->name, conflict);
|
||||
res->start = start;
|
||||
res->end = end;
|
||||
ret = 1;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int _pci_assign_resource(struct pci_dev *dev, int resno, int size, resource_size_t min_align)
|
||||
{
|
||||
struct resource *res = dev->resource + resno;
|
||||
resource_size_t align;
|
||||
struct pci_bus *bus;
|
||||
int ret;
|
||||
char *type;
|
||||
|
||||
align = pci_resource_alignment(dev, res);
|
||||
if (!align) {
|
||||
dev_info(&dev->dev, "BAR %d: can't assign %pR "
|
||||
"(bogus alignment)\n", resno, res);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
bus = dev->bus;
|
||||
while ((ret = __pci_assign_resource(bus, dev, resno))) {
|
||||
if (bus->parent && bus->self->transparent)
|
||||
bus = bus->parent;
|
||||
else
|
||||
bus = NULL;
|
||||
if (bus)
|
||||
continue;
|
||||
break;
|
||||
while ((ret = __pci_assign_resource(bus, dev, resno, size, min_align))) {
|
||||
if (!bus->parent || !bus->self->transparent)
|
||||
break;
|
||||
bus = bus->parent;
|
||||
}
|
||||
|
||||
if (ret) {
|
||||
|
|
@ -242,6 +220,67 @@ int pci_assign_resource(struct pci_dev *dev, int resno)
|
|||
return ret;
|
||||
}
|
||||
|
||||
int pci_reassign_resource(struct pci_dev *dev, int resno, resource_size_t addsize,
|
||||
resource_size_t min_align)
|
||||
{
|
||||
struct resource *res = dev->resource + resno;
|
||||
resource_size_t new_size;
|
||||
int ret;
|
||||
|
||||
if (!res->parent) {
|
||||
dev_info(&dev->dev, "BAR %d: can't reassign an unassigned resouce %pR "
|
||||
"\n", resno, res);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* already aligned with min_align */
|
||||
new_size = resource_size(res) + addsize;
|
||||
ret = _pci_assign_resource(dev, resno, new_size, min_align);
|
||||
if (!ret) {
|
||||
res->flags &= ~IORESOURCE_STARTALIGN;
|
||||
dev_info(&dev->dev, "BAR %d: reassigned %pR\n", resno, res);
|
||||
if (resno < PCI_BRIDGE_RESOURCES)
|
||||
pci_update_resource(dev, resno);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
int pci_assign_resource(struct pci_dev *dev, int resno)
|
||||
{
|
||||
struct resource *res = dev->resource + resno;
|
||||
resource_size_t align, size;
|
||||
struct pci_bus *bus;
|
||||
int ret;
|
||||
|
||||
align = pci_resource_alignment(dev, res);
|
||||
if (!align) {
|
||||
dev_info(&dev->dev, "BAR %d: can't assign %pR "
|
||||
"(bogus alignment)\n", resno, res);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
bus = dev->bus;
|
||||
size = resource_size(res);
|
||||
ret = _pci_assign_resource(dev, resno, size, align);
|
||||
|
||||
/*
|
||||
* If we failed to assign anything, let's try the address
|
||||
* where firmware left it. That at least has a chance of
|
||||
* working, which is better than just leaving it disabled.
|
||||
*/
|
||||
if (ret < 0 && dev->fw_addr[resno])
|
||||
ret = pci_revert_fw_address(res, dev, resno, size);
|
||||
|
||||
if (!ret) {
|
||||
res->flags &= ~IORESOURCE_STARTALIGN;
|
||||
dev_info(&dev->dev, "BAR %d: assigned %pR\n", resno, res);
|
||||
if (resno < PCI_BRIDGE_RESOURCES)
|
||||
pci_update_resource(dev, resno);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/* Sort resources by alignment */
|
||||
void pdev_sort_resources(struct pci_dev *dev, struct resource_list *head)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -104,6 +104,7 @@ static const struct key_entry acer_wmi_keymap[] = {
|
|||
{KE_KEY, 0x22, {KEY_PROG2} }, /* Arcade */
|
||||
{KE_KEY, 0x23, {KEY_PROG3} }, /* P_Key */
|
||||
{KE_KEY, 0x24, {KEY_PROG4} }, /* Social networking_Key */
|
||||
{KE_KEY, 0x29, {KEY_PROG3} }, /* P_Key for TM8372 */
|
||||
{KE_IGNORE, 0x41, {KEY_MUTE} },
|
||||
{KE_IGNORE, 0x42, {KEY_PREVIOUSSONG} },
|
||||
{KE_IGNORE, 0x43, {KEY_NEXTSONG} },
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ static inline int __init is_exclusive_device(struct acpi_device *dev)
|
|||
if (!(('0' <= (c) && (c) <= '9') || ('A' <= (c) && (c) <= 'F'))) \
|
||||
return 0
|
||||
#define TEST_ALPHA(c) \
|
||||
if (!('@' <= (c) || (c) <= 'Z')) \
|
||||
if (!('A' <= (c) && (c) <= 'Z')) \
|
||||
return 0
|
||||
static int __init ispnpidacpi(const char *id)
|
||||
{
|
||||
|
|
@ -94,6 +94,9 @@ static int pnpacpi_set_resources(struct pnp_dev *dev)
|
|||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (WARN_ON_ONCE(acpi_dev != dev->data))
|
||||
dev->data = acpi_dev;
|
||||
|
||||
ret = pnpacpi_build_resource_template(dev, &buffer);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@
|
|||
| ALARM_SEC_BIT)
|
||||
|
||||
#define VT8500_RTC_CR_ENABLE (1 << 0) /* Enable RTC */
|
||||
#define VT8500_RTC_CR_24H (1 << 1) /* 24h time format */
|
||||
#define VT8500_RTC_CR_12H (1 << 1) /* 12h time format */
|
||||
#define VT8500_RTC_CR_SM_ENABLE (1 << 2) /* Enable periodic irqs */
|
||||
#define VT8500_RTC_CR_SM_SEC (1 << 3) /* 0: 1Hz/60, 1: 1Hz */
|
||||
#define VT8500_RTC_CR_CALIB (1 << 4) /* Enable calibration */
|
||||
|
|
@ -116,7 +116,7 @@ static int vt8500_rtc_read_time(struct device *dev, struct rtc_time *tm)
|
|||
tm->tm_min = bcd2bin((time & TIME_MIN_MASK) >> TIME_MIN_S);
|
||||
tm->tm_hour = bcd2bin((time & TIME_HOUR_MASK) >> TIME_HOUR_S);
|
||||
tm->tm_mday = bcd2bin(date & DATE_DAY_MASK);
|
||||
tm->tm_mon = bcd2bin((date & DATE_MONTH_MASK) >> DATE_MONTH_S);
|
||||
tm->tm_mon = bcd2bin((date & DATE_MONTH_MASK) >> DATE_MONTH_S) - 1;
|
||||
tm->tm_year = bcd2bin((date & DATE_YEAR_MASK) >> DATE_YEAR_S)
|
||||
+ ((date >> DATE_CENTURY_S) & 1 ? 200 : 100);
|
||||
tm->tm_wday = (time & TIME_DOW_MASK) >> TIME_DOW_S;
|
||||
|
|
@ -135,8 +135,9 @@ static int vt8500_rtc_set_time(struct device *dev, struct rtc_time *tm)
|
|||
}
|
||||
|
||||
writel((bin2bcd(tm->tm_year - 100) << DATE_YEAR_S)
|
||||
| (bin2bcd(tm->tm_mon) << DATE_MONTH_S)
|
||||
| (bin2bcd(tm->tm_mday)),
|
||||
| (bin2bcd(tm->tm_mon + 1) << DATE_MONTH_S)
|
||||
| (bin2bcd(tm->tm_mday))
|
||||
| ((tm->tm_year >= 200) << DATE_CENTURY_S),
|
||||
vt8500_rtc->regbase + VT8500_RTC_DS);
|
||||
writel((bin2bcd(tm->tm_wday) << TIME_DOW_S)
|
||||
| (bin2bcd(tm->tm_hour) << TIME_HOUR_S)
|
||||
|
|
@ -246,7 +247,7 @@ static int __devinit vt8500_rtc_probe(struct platform_device *pdev)
|
|||
}
|
||||
|
||||
/* Enable RTC and set it to 24-hour mode */
|
||||
writel(VT8500_RTC_CR_ENABLE | VT8500_RTC_CR_24H,
|
||||
writel(VT8500_RTC_CR_ENABLE,
|
||||
vt8500_rtc->regbase + VT8500_RTC_CR);
|
||||
|
||||
vt8500_rtc->rtc = rtc_device_register("vt8500-rtc", &pdev->dev,
|
||||
|
|
|
|||
|
|
@ -1693,7 +1693,7 @@ sci_io_request_frame_handler(struct isci_request *ireq,
|
|||
frame_index,
|
||||
(void **)&frame_buffer);
|
||||
|
||||
sci_controller_copy_sata_response(&ireq->stp.req,
|
||||
sci_controller_copy_sata_response(&ireq->stp.rsp,
|
||||
frame_header,
|
||||
frame_buffer);
|
||||
|
||||
|
|
|
|||
|
|
@ -3234,7 +3234,8 @@ static int __init target_core_init_configfs(void)
|
|||
if (ret < 0)
|
||||
goto out;
|
||||
|
||||
if (core_dev_setup_virtual_lun0() < 0)
|
||||
ret = core_dev_setup_virtual_lun0();
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -3190,12 +3190,12 @@ static void ixj_write_cid(IXJ *j)
|
|||
|
||||
ixj_fsk_alloc(j);
|
||||
|
||||
strcpy(sdmf1, j->cid_send.month);
|
||||
strcat(sdmf1, j->cid_send.day);
|
||||
strcat(sdmf1, j->cid_send.hour);
|
||||
strcat(sdmf1, j->cid_send.min);
|
||||
strcpy(sdmf2, j->cid_send.number);
|
||||
strcpy(sdmf3, j->cid_send.name);
|
||||
strlcpy(sdmf1, j->cid_send.month, sizeof(sdmf1));
|
||||
strlcat(sdmf1, j->cid_send.day, sizeof(sdmf1));
|
||||
strlcat(sdmf1, j->cid_send.hour, sizeof(sdmf1));
|
||||
strlcat(sdmf1, j->cid_send.min, sizeof(sdmf1));
|
||||
strlcpy(sdmf2, j->cid_send.number, sizeof(sdmf2));
|
||||
strlcpy(sdmf3, j->cid_send.name, sizeof(sdmf3));
|
||||
|
||||
len1 = strlen(sdmf1);
|
||||
len2 = strlen(sdmf2);
|
||||
|
|
@ -3340,12 +3340,12 @@ static void ixj_write_cidcw(IXJ *j)
|
|||
ixj_pre_cid(j);
|
||||
}
|
||||
j->flags.cidcw_ack = 0;
|
||||
strcpy(sdmf1, j->cid_send.month);
|
||||
strcat(sdmf1, j->cid_send.day);
|
||||
strcat(sdmf1, j->cid_send.hour);
|
||||
strcat(sdmf1, j->cid_send.min);
|
||||
strcpy(sdmf2, j->cid_send.number);
|
||||
strcpy(sdmf3, j->cid_send.name);
|
||||
strlcpy(sdmf1, j->cid_send.month, sizeof(sdmf1));
|
||||
strlcat(sdmf1, j->cid_send.day, sizeof(sdmf1));
|
||||
strlcat(sdmf1, j->cid_send.hour, sizeof(sdmf1));
|
||||
strlcat(sdmf1, j->cid_send.min, sizeof(sdmf1));
|
||||
strlcpy(sdmf2, j->cid_send.number, sizeof(sdmf2));
|
||||
strlcpy(sdmf3, j->cid_send.name, sizeof(sdmf3));
|
||||
|
||||
len1 = strlen(sdmf1);
|
||||
len2 = strlen(sdmf2);
|
||||
|
|
|
|||
|
|
@ -541,7 +541,7 @@ int pn_bind(struct usb_configuration *c, struct usb_function *f)
|
|||
|
||||
req = usb_ep_alloc_request(fp->out_ep, GFP_KERNEL);
|
||||
if (!req)
|
||||
goto err;
|
||||
goto err_req;
|
||||
|
||||
req->complete = pn_rx_complete;
|
||||
fp->out_reqv[i] = req;
|
||||
|
|
@ -550,14 +550,18 @@ int pn_bind(struct usb_configuration *c, struct usb_function *f)
|
|||
/* Outgoing USB requests */
|
||||
fp->in_req = usb_ep_alloc_request(fp->in_ep, GFP_KERNEL);
|
||||
if (!fp->in_req)
|
||||
goto err;
|
||||
goto err_req;
|
||||
|
||||
INFO(cdev, "USB CDC Phonet function\n");
|
||||
INFO(cdev, "using %s, OUT %s, IN %s\n", cdev->gadget->name,
|
||||
fp->out_ep->name, fp->in_ep->name);
|
||||
return 0;
|
||||
|
||||
err_req:
|
||||
for (i = 0; i < phonet_rxq_size && fp->out_reqv[i]; i++)
|
||||
usb_ep_free_request(fp->out_ep, fp->out_reqv[i]);
|
||||
err:
|
||||
|
||||
if (fp->out_ep)
|
||||
fp->out_ep->driver_data = NULL;
|
||||
if (fp->in_ep)
|
||||
|
|
|
|||
|
|
@ -359,7 +359,8 @@ static bool usb_is_intel_switchable_ehci(struct pci_dev *pdev)
|
|||
pdev->vendor == PCI_VENDOR_ID_INTEL &&
|
||||
(pdev->device == 0x1E26 ||
|
||||
pdev->device == 0x8C2D ||
|
||||
pdev->device == 0x8C26);
|
||||
pdev->device == 0x8C26 ||
|
||||
pdev->device == 0x9C26);
|
||||
}
|
||||
|
||||
static void ehci_enable_xhci_companion(void)
|
||||
|
|
|
|||
|
|
@ -1130,6 +1130,25 @@ dl_done_list (struct ohci_hcd *ohci)
|
|||
|
||||
while (td) {
|
||||
struct td *td_next = td->next_dl_td;
|
||||
struct ed *ed = td->ed;
|
||||
|
||||
/*
|
||||
* Some OHCI controllers (NVIDIA for sure, maybe others)
|
||||
* occasionally forget to add TDs to the done queue. Since
|
||||
* TDs for a given endpoint are always processed in order,
|
||||
* if we find a TD on the donelist then all of its
|
||||
* predecessors must be finished as well.
|
||||
*/
|
||||
for (;;) {
|
||||
struct td *td2;
|
||||
|
||||
td2 = list_first_entry(&ed->td_list, struct td,
|
||||
td_list);
|
||||
if (td2 == td)
|
||||
break;
|
||||
takeback_td(ohci, td2);
|
||||
}
|
||||
|
||||
takeback_td(ohci, td);
|
||||
td = td_next;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -721,6 +721,7 @@ static int handshake(void __iomem *ptr, u32 mask, u32 done,
|
|||
}
|
||||
|
||||
#define PCI_DEVICE_ID_INTEL_LYNX_POINT_XHCI 0x8C31
|
||||
#define PCI_DEVICE_ID_INTEL_LYNX_POINT_LP_XHCI 0x9C31
|
||||
|
||||
bool usb_is_intel_ppt_switchable_xhci(struct pci_dev *pdev)
|
||||
{
|
||||
|
|
@ -734,7 +735,8 @@ bool usb_is_intel_lpt_switchable_xhci(struct pci_dev *pdev)
|
|||
{
|
||||
return pdev->class == PCI_CLASS_SERIAL_USB_XHCI &&
|
||||
pdev->vendor == PCI_VENDOR_ID_INTEL &&
|
||||
pdev->device == PCI_DEVICE_ID_INTEL_LYNX_POINT_XHCI;
|
||||
(pdev->device == PCI_DEVICE_ID_INTEL_LYNX_POINT_XHCI ||
|
||||
pdev->device == PCI_DEVICE_ID_INTEL_LYNX_POINT_LP_XHCI);
|
||||
}
|
||||
|
||||
bool usb_is_intel_switchable_xhci(struct pci_dev *pdev)
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@
|
|||
/* Device for a quirk */
|
||||
#define PCI_VENDOR_ID_FRESCO_LOGIC 0x1b73
|
||||
#define PCI_DEVICE_ID_FRESCO_LOGIC_PDK 0x1000
|
||||
#define PCI_DEVICE_ID_FRESCO_LOGIC_FL1400 0x1400
|
||||
|
||||
#define PCI_VENDOR_ID_ETRON 0x1b6f
|
||||
#define PCI_DEVICE_ID_ASROCK_P67 0x7023
|
||||
|
|
@ -109,8 +110,10 @@ static int xhci_pci_setup(struct usb_hcd *hcd)
|
|||
|
||||
/* Look for vendor-specific quirks */
|
||||
if (pdev->vendor == PCI_VENDOR_ID_FRESCO_LOGIC &&
|
||||
pdev->device == PCI_DEVICE_ID_FRESCO_LOGIC_PDK) {
|
||||
if (pdev->revision == 0x0) {
|
||||
(pdev->device == PCI_DEVICE_ID_FRESCO_LOGIC_PDK ||
|
||||
pdev->device == PCI_DEVICE_ID_FRESCO_LOGIC_FL1400)) {
|
||||
if (pdev->device == PCI_DEVICE_ID_FRESCO_LOGIC_PDK &&
|
||||
pdev->revision == 0x0) {
|
||||
xhci->quirks |= XHCI_RESET_EP_QUIRK;
|
||||
xhci_dbg(xhci, "QUIRK: Fresco Logic xHC needs configure"
|
||||
" endpoint cmd after reset endpoint\n");
|
||||
|
|
|
|||
|
|
@ -120,6 +120,7 @@ static const struct usb_device_id id_table[] = {
|
|||
{ USB_DEVICE(0x10C4, 0x8477) }, /* Balluff RFID */
|
||||
{ USB_DEVICE(0x10C4, 0x85EA) }, /* AC-Services IBUS-IF */
|
||||
{ USB_DEVICE(0x10C4, 0x85EB) }, /* AC-Services CIS-IBUS */
|
||||
{ USB_DEVICE(0x10C4, 0x85F8) }, /* Virtenio Preon32 */
|
||||
{ USB_DEVICE(0x10C4, 0x8664) }, /* AC-Services CAN-IF */
|
||||
{ USB_DEVICE(0x10C4, 0x8665) }, /* AC-Services OBD-IF */
|
||||
{ USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */
|
||||
|
|
|
|||
|
|
@ -195,6 +195,7 @@ static struct usb_device_id id_table_combined [] = {
|
|||
{ USB_DEVICE(FTDI_VID, FTDI_OPENDCC_THROTTLE_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_OPENDCC_GATEWAY_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_OPENDCC_GBM_PID) },
|
||||
{ USB_DEVICE(NEWPORT_VID, NEWPORT_AGILIS_PID) },
|
||||
{ USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_IOBOARD_PID) },
|
||||
{ USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_MINI_IOBOARD_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_SPROG_II) },
|
||||
|
|
@ -1797,7 +1798,7 @@ static int ftdi_8u2232c_probe(struct usb_serial *serial)
|
|||
dbg("%s", __func__);
|
||||
|
||||
if ((udev->manufacturer && !strcmp(udev->manufacturer, "CALAO Systems")) ||
|
||||
(udev->product && !strcmp(udev->product, "BeagleBone/XDS100")))
|
||||
(udev->product && !strcmp(udev->product, "BeagleBone/XDS100V2")))
|
||||
return ftdi_jtag_probe(serial);
|
||||
|
||||
return 0;
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue