mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-03 19:24:02 +08:00
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
This commit is contained in:
commit
9c5ef0fbfa
@ -322,39 +322,34 @@ kernel releases as described above.
|
||||
Here is a list of some of the different kernel trees available:
|
||||
git trees:
|
||||
- Kbuild development tree, Sam Ravnborg <sam@ravnborg.org>
|
||||
kernel.org:/pub/scm/linux/kernel/git/sam/kbuild.git
|
||||
git.kernel.org:/pub/scm/linux/kernel/git/sam/kbuild.git
|
||||
|
||||
- ACPI development tree, Len Brown <len.brown@intel.com>
|
||||
kernel.org:/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6.git
|
||||
git.kernel.org:/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6.git
|
||||
|
||||
- Block development tree, Jens Axboe <axboe@suse.de>
|
||||
kernel.org:/pub/scm/linux/kernel/git/axboe/linux-2.6-block.git
|
||||
git.kernel.org:/pub/scm/linux/kernel/git/axboe/linux-2.6-block.git
|
||||
|
||||
- DRM development tree, Dave Airlie <airlied@linux.ie>
|
||||
kernel.org:/pub/scm/linux/kernel/git/airlied/drm-2.6.git
|
||||
git.kernel.org:/pub/scm/linux/kernel/git/airlied/drm-2.6.git
|
||||
|
||||
- ia64 development tree, Tony Luck <tony.luck@intel.com>
|
||||
kernel.org:/pub/scm/linux/kernel/git/aegl/linux-2.6.git
|
||||
|
||||
- ieee1394 development tree, Jody McIntyre <scjody@modernduck.com>
|
||||
kernel.org:/pub/scm/linux/kernel/git/scjody/ieee1394.git
|
||||
git.kernel.org:/pub/scm/linux/kernel/git/aegl/linux-2.6.git
|
||||
|
||||
- infiniband, Roland Dreier <rolandd@cisco.com>
|
||||
kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git
|
||||
git.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git
|
||||
|
||||
- libata, Jeff Garzik <jgarzik@pobox.com>
|
||||
kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev.git
|
||||
git.kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev.git
|
||||
|
||||
- network drivers, Jeff Garzik <jgarzik@pobox.com>
|
||||
kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6.git
|
||||
git.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6.git
|
||||
|
||||
- pcmcia, Dominik Brodowski <linux@dominikbrodowski.net>
|
||||
kernel.org:/pub/scm/linux/kernel/git/brodo/pcmcia-2.6.git
|
||||
git.kernel.org:/pub/scm/linux/kernel/git/brodo/pcmcia-2.6.git
|
||||
|
||||
- SCSI, James Bottomley <James.Bottomley@SteelEye.com>
|
||||
kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6.git
|
||||
|
||||
Other git kernel trees can be found listed at http://kernel.org/git
|
||||
git.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6.git
|
||||
|
||||
quilt trees:
|
||||
- USB, PCI, Driver Core, and I2C, Greg Kroah-Hartman <gregkh@suse.de>
|
||||
@ -362,6 +357,9 @@ Here is a list of some of the different kernel trees available:
|
||||
- x86-64, partly i386, Andi Kleen <ak@suse.de>
|
||||
ftp.firstfloor.org:/pub/ak/x86_64/quilt/
|
||||
|
||||
Other kernel trees can be found listed at http://git.kernel.org/ and in
|
||||
the MAINTAINERS file.
|
||||
|
||||
Bug Reporting
|
||||
-------------
|
||||
|
||||
|
@ -3618,7 +3618,7 @@ W: http://www.kroah.com/linux-usb/
|
||||
USB DAVICOM DM9601 DRIVER
|
||||
P: Peter Korsgaard
|
||||
M: jacmet@sunsite.dk
|
||||
L: linux-usb-devel@lists.sourceforge.net
|
||||
L: netdev@vger.kernel.org
|
||||
W: http://www.linux-usb.org/usbnet
|
||||
S: Maintained
|
||||
|
||||
@ -3702,8 +3702,8 @@ S: Maintained
|
||||
USB PEGASUS DRIVER
|
||||
P: Petko Manolov
|
||||
M: petkan@users.sourceforge.net
|
||||
L: linux-usb-users@lists.sourceforge.net
|
||||
L: linux-usb-devel@lists.sourceforge.net
|
||||
L: netdev@vger.kernel.org
|
||||
W: http://pegasus2.sourceforge.net/
|
||||
S: Maintained
|
||||
|
||||
@ -3717,8 +3717,8 @@ S: Maintained
|
||||
USB RTL8150 DRIVER
|
||||
P: Petko Manolov
|
||||
M: petkan@users.sourceforge.net
|
||||
L: linux-usb-users@lists.sourceforge.net
|
||||
L: linux-usb-devel@lists.sourceforge.net
|
||||
L: netdev@vger.kernel.org
|
||||
W: http://pegasus2.sourceforge.net/
|
||||
S: Maintained
|
||||
|
||||
@ -3829,7 +3829,7 @@ S: Maintained
|
||||
USB "USBNET" DRIVER FRAMEWORK
|
||||
P: David Brownell
|
||||
M: dbrownell@users.sourceforge.net
|
||||
L: linux-usb-devel@lists.sourceforge.net
|
||||
L: netdev@vger.kernel.org
|
||||
W: http://www.linux-usb.org/usbnet
|
||||
S: Maintained
|
||||
|
||||
|
2
Makefile
2
Makefile
@ -1,7 +1,7 @@
|
||||
VERSION = 2
|
||||
PATCHLEVEL = 6
|
||||
SUBLEVEL = 22
|
||||
EXTRAVERSION = -rc6
|
||||
EXTRAVERSION = -rc7
|
||||
NAME = Holy Dancing Manatees, Batman!
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
@ -350,7 +350,7 @@
|
||||
CALL(sys_set_robust_list)
|
||||
CALL(sys_get_robust_list)
|
||||
/* 340 */ CALL(sys_splice)
|
||||
CALL(sys_arm_sync_file_range)
|
||||
CALL(sys_sync_file_range2)
|
||||
CALL(sys_tee)
|
||||
CALL(sys_vmsplice)
|
||||
CALL(sys_move_pages)
|
||||
|
@ -328,16 +328,3 @@ asmlinkage long sys_arm_fadvise64_64(int fd, int advice,
|
||||
{
|
||||
return sys_fadvise64_64(fd, offset, len, advice);
|
||||
}
|
||||
|
||||
/*
|
||||
* Yet more syscall fsckage - we can't fit sys_sync_file_range's
|
||||
* arguments into the available registers with EABI. So, let's
|
||||
* create an ARM specific syscall for this which has _sane_
|
||||
* arguments. (This incidentally also has an ABI-independent
|
||||
* argument layout.)
|
||||
*/
|
||||
asmlinkage long sys_arm_sync_file_range(int fd, unsigned int flags,
|
||||
loff_t offset, loff_t nbytes)
|
||||
{
|
||||
return sys_sync_file_range(fd, offset, nbytes, flags);
|
||||
}
|
||||
|
@ -53,7 +53,7 @@ static suspend_state_t target_state;
|
||||
/*
|
||||
* Called after processes are frozen, but before we shutdown devices.
|
||||
*/
|
||||
static int at91_pm_prepare(suspend_state_t state)
|
||||
static int at91_pm_set_target(suspend_state_t state)
|
||||
{
|
||||
target_state = state;
|
||||
return 0;
|
||||
@ -201,7 +201,7 @@ error:
|
||||
|
||||
static struct pm_ops at91_pm_ops ={
|
||||
.valid = at91_pm_valid_state,
|
||||
.prepare = at91_pm_prepare,
|
||||
.set_target = at91_pm_set_target,
|
||||
.enter = at91_pm_enter,
|
||||
};
|
||||
|
||||
|
@ -142,6 +142,12 @@ config BF_REV_0_5
|
||||
bool "0.5"
|
||||
depends on (BF561 || BF533 || BF532 || BF531)
|
||||
|
||||
config BF_REV_ANY
|
||||
bool "any"
|
||||
|
||||
config BF_REV_NONE
|
||||
bool "none"
|
||||
|
||||
endchoice
|
||||
|
||||
config BFIN_DUAL_CORE
|
||||
|
@ -28,6 +28,27 @@ machine-$(CONFIG_BF561) := bf561
|
||||
MACHINE := $(machine-y)
|
||||
export MACHINE
|
||||
|
||||
cpu-$(CONFIG_BF531) := bf531
|
||||
cpu-$(CONFIG_BF532) := bf532
|
||||
cpu-$(CONFIG_BF533) := bf533
|
||||
cpu-$(CONFIG_BF534) := bf534
|
||||
cpu-$(CONFIG_BF536) := bf536
|
||||
cpu-$(CONFIG_BF537) := bf537
|
||||
cpu-$(CONFIG_BF548) := bf548
|
||||
cpu-$(CONFIG_BF549) := bf549
|
||||
cpu-$(CONFIG_BF561) := bf561
|
||||
|
||||
rev-$(CONFIG_BF_REV_0_0) := 0.0
|
||||
rev-$(CONFIG_BF_REV_0_1) := 0.1
|
||||
rev-$(CONFIG_BF_REV_0_2) := 0.2
|
||||
rev-$(CONFIG_BF_REV_0_3) := 0.3
|
||||
rev-$(CONFIG_BF_REV_0_4) := 0.4
|
||||
rev-$(CONFIG_BF_REV_0_5) := 0.5
|
||||
rev-$(CONFIG_BF_REV_NONE) := none
|
||||
rev-$(CONFIG_BF_REV_ANY) := any
|
||||
|
||||
CFLAGS += -mcpu=$(cpu-y)-$(rev-y)
|
||||
AFLAGS += -mcpu=$(cpu-y)-$(rev-y)
|
||||
|
||||
head-y := arch/$(ARCH)/mach-$(MACHINE)/head.o arch/$(ARCH)/kernel/init_task.o
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.21.3
|
||||
# Linux kernel version: 2.6.21.5
|
||||
#
|
||||
# CONFIG_MMU is not set
|
||||
# CONFIG_FPU is not set
|
||||
@ -115,17 +115,26 @@ CONFIG_BF533=y
|
||||
# CONFIG_BF534 is not set
|
||||
# CONFIG_BF536 is not set
|
||||
# CONFIG_BF537 is not set
|
||||
# CONFIG_BF542 is not set
|
||||
# CONFIG_BF544 is not set
|
||||
# CONFIG_BF548 is not set
|
||||
# CONFIG_BF549 is not set
|
||||
# CONFIG_BF561 is not set
|
||||
# CONFIG_BF_REV_0_0 is not set
|
||||
# CONFIG_BF_REV_0_2 is not set
|
||||
CONFIG_BF_REV_0_3=y
|
||||
# CONFIG_BF_REV_0_4 is not set
|
||||
# CONFIG_BF_REV_0_5 is not set
|
||||
# CONFIG_BF_REV_ANY is not set
|
||||
# CONFIG_BF_REV_NONE is not set
|
||||
CONFIG_BF53x=y
|
||||
CONFIG_BFIN_SINGLE_CORE=y
|
||||
CONFIG_BFIN533_EZKIT=y
|
||||
# CONFIG_BFIN533_STAMP is not set
|
||||
# CONFIG_BFIN537_STAMP is not set
|
||||
# CONFIG_BFIN533_BLUETECHNIX_CM is not set
|
||||
# CONFIG_BFIN537_BLUETECHNIX_CM is not set
|
||||
# CONFIG_BFIN548_EZKIT is not set
|
||||
# CONFIG_BFIN561_BLUETECHNIX_CM is not set
|
||||
# CONFIG_BFIN561_EZKIT is not set
|
||||
# CONFIG_BFIN561_TEPLA is not set
|
||||
@ -634,6 +643,7 @@ CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_MII=y
|
||||
CONFIG_SMC91X=y
|
||||
# CONFIG_SMSC911X is not set
|
||||
|
||||
#
|
||||
# Ethernet (1000 Mbit)
|
||||
|
@ -1,6 +1,6 @@
|
||||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.21.3
|
||||
# Linux kernel version: 2.6.21.5
|
||||
#
|
||||
# CONFIG_MMU is not set
|
||||
# CONFIG_FPU is not set
|
||||
@ -115,17 +115,26 @@ CONFIG_BF533=y
|
||||
# CONFIG_BF534 is not set
|
||||
# CONFIG_BF536 is not set
|
||||
# CONFIG_BF537 is not set
|
||||
# CONFIG_BF542 is not set
|
||||
# CONFIG_BF544 is not set
|
||||
# CONFIG_BF548 is not set
|
||||
# CONFIG_BF549 is not set
|
||||
# CONFIG_BF561 is not set
|
||||
# CONFIG_BF_REV_0_0 is not set
|
||||
# CONFIG_BF_REV_0_2 is not set
|
||||
CONFIG_BF_REV_0_3=y
|
||||
# CONFIG_BF_REV_0_4 is not set
|
||||
# CONFIG_BF_REV_0_5 is not set
|
||||
# CONFIG_BF_REV_ANY is not set
|
||||
# CONFIG_BF_REV_NONE is not set
|
||||
CONFIG_BF53x=y
|
||||
CONFIG_BFIN_SINGLE_CORE=y
|
||||
# CONFIG_BFIN533_EZKIT is not set
|
||||
CONFIG_BFIN533_STAMP=y
|
||||
# CONFIG_BFIN537_STAMP is not set
|
||||
# CONFIG_BFIN533_BLUETECHNIX_CM is not set
|
||||
# CONFIG_BFIN537_BLUETECHNIX_CM is not set
|
||||
# CONFIG_BFIN548_EZKIT is not set
|
||||
# CONFIG_BFIN561_BLUETECHNIX_CM is not set
|
||||
# CONFIG_BFIN561_EZKIT is not set
|
||||
# CONFIG_BFIN561_TEPLA is not set
|
||||
@ -646,6 +655,7 @@ CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_MII=y
|
||||
CONFIG_SMC91X=y
|
||||
# CONFIG_SMSC911X is not set
|
||||
|
||||
#
|
||||
# Ethernet (1000 Mbit)
|
||||
@ -986,9 +996,17 @@ CONFIG_SND_VERBOSE_PROCFS=y
|
||||
#
|
||||
# ALSA Blackfin devices
|
||||
#
|
||||
# CONFIG_SND_BLACKFIN_AD1836 is not set
|
||||
# CONFIG_SND_BLACKFIN_AD1981B is not set
|
||||
# CONFIG_SND_BFIN_AD73311 is not set
|
||||
CONFIG_SND_BLACKFIN_AD1836=m
|
||||
CONFIG_SND_BLACKFIN_AD1836_TDM=y
|
||||
# CONFIG_SND_BLACKFIN_AD1836_I2S is not set
|
||||
CONFIG_SND_BLACKFIN_AD1836_MULSUB=y
|
||||
# CONFIG_SND_BLACKFIN_AD1836_5P1 is not set
|
||||
CONFIG_SND_BLACKFIN_AD1981B=m
|
||||
CONFIG_SND_BLACKFIN_SPORT=0
|
||||
CONFIG_SND_BLACKFIN_SPI_PFBIT=4
|
||||
CONFIG_SND_BFIN_AD73311=m
|
||||
CONFIG_SND_BFIN_SPORT=0
|
||||
CONFIG_SND_BFIN_AD73311_SE=4
|
||||
|
||||
#
|
||||
# SoC audio support
|
||||
|
@ -1,6 +1,6 @@
|
||||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.21.3
|
||||
# Linux kernel version: 2.6.21.5
|
||||
#
|
||||
# CONFIG_MMU is not set
|
||||
# CONFIG_FPU is not set
|
||||
@ -115,17 +115,26 @@ CONFIG_PREEMPT_VOLUNTARY=y
|
||||
# CONFIG_BF534 is not set
|
||||
# CONFIG_BF536 is not set
|
||||
CONFIG_BF537=y
|
||||
# CONFIG_BF542 is not set
|
||||
# CONFIG_BF544 is not set
|
||||
# CONFIG_BF548 is not set
|
||||
# CONFIG_BF549 is not set
|
||||
# CONFIG_BF561 is not set
|
||||
# CONFIG_BF_REV_0_0 is not set
|
||||
CONFIG_BF_REV_0_2=y
|
||||
# CONFIG_BF_REV_0_3 is not set
|
||||
# CONFIG_BF_REV_0_4 is not set
|
||||
# CONFIG_BF_REV_0_5 is not set
|
||||
# CONFIG_BF_REV_ANY is not set
|
||||
# CONFIG_BF_REV_NONE is not set
|
||||
CONFIG_BF53x=y
|
||||
CONFIG_BFIN_SINGLE_CORE=y
|
||||
# CONFIG_BFIN533_EZKIT is not set
|
||||
# CONFIG_BFIN533_STAMP is not set
|
||||
CONFIG_BFIN537_STAMP=y
|
||||
# CONFIG_BFIN533_BLUETECHNIX_CM is not set
|
||||
# CONFIG_BFIN537_BLUETECHNIX_CM is not set
|
||||
# CONFIG_BFIN548_EZKIT is not set
|
||||
# CONFIG_BFIN561_BLUETECHNIX_CM is not set
|
||||
# CONFIG_BFIN561_EZKIT is not set
|
||||
# CONFIG_BFIN561_TEPLA is not set
|
||||
@ -664,6 +673,7 @@ CONFIG_BFIN_MAC_USE_L1=y
|
||||
CONFIG_BFIN_TX_DESC_NUM=10
|
||||
CONFIG_BFIN_RX_DESC_NUM=20
|
||||
# CONFIG_BFIN_MAC_RMII is not set
|
||||
# CONFIG_SMSC911X is not set
|
||||
|
||||
#
|
||||
# Ethernet (1000 Mbit)
|
||||
@ -1020,9 +1030,17 @@ CONFIG_SND_VERBOSE_PROCFS=y
|
||||
#
|
||||
# ALSA Blackfin devices
|
||||
#
|
||||
# CONFIG_SND_BLACKFIN_AD1836 is not set
|
||||
# CONFIG_SND_BLACKFIN_AD1981B is not set
|
||||
# CONFIG_SND_BFIN_AD73311 is not set
|
||||
CONFIG_SND_BLACKFIN_AD1836=m
|
||||
CONFIG_SND_BLACKFIN_AD1836_TDM=y
|
||||
# CONFIG_SND_BLACKFIN_AD1836_I2S is not set
|
||||
CONFIG_SND_BLACKFIN_AD1836_MULSUB=y
|
||||
# CONFIG_SND_BLACKFIN_AD1836_5P1 is not set
|
||||
CONFIG_SND_BLACKFIN_AD1981B=m
|
||||
CONFIG_SND_BLACKFIN_SPORT=0
|
||||
CONFIG_SND_BLACKFIN_SPI_PFBIT=4
|
||||
CONFIG_SND_BFIN_AD73311=m
|
||||
CONFIG_SND_BFIN_SPORT=0
|
||||
CONFIG_SND_BFIN_AD73311_SE=4
|
||||
|
||||
#
|
||||
# SoC audio support
|
||||
|
@ -1,6 +1,6 @@
|
||||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.21.3
|
||||
# Linux kernel version: 2.6.21.5
|
||||
#
|
||||
# CONFIG_MMU is not set
|
||||
# CONFIG_FPU is not set
|
||||
@ -115,17 +115,25 @@ CONFIG_PREEMPT_VOLUNTARY=y
|
||||
# CONFIG_BF534 is not set
|
||||
# CONFIG_BF536 is not set
|
||||
# CONFIG_BF537 is not set
|
||||
# CONFIG_BF542 is not set
|
||||
# CONFIG_BF544 is not set
|
||||
# CONFIG_BF548 is not set
|
||||
# CONFIG_BF549 is not set
|
||||
CONFIG_BF561=y
|
||||
# CONFIG_BF_REV_0_0 is not set
|
||||
# CONFIG_BF_REV_0_2 is not set
|
||||
CONFIG_BF_REV_0_3=y
|
||||
# CONFIG_BF_REV_0_4 is not set
|
||||
# CONFIG_BF_REV_0_5 is not set
|
||||
# CONFIG_BF_REV_ANY is not set
|
||||
# CONFIG_BF_REV_NONE is not set
|
||||
CONFIG_BFIN_DUAL_CORE=y
|
||||
# CONFIG_BFIN533_EZKIT is not set
|
||||
# CONFIG_BFIN533_STAMP is not set
|
||||
# CONFIG_BFIN537_STAMP is not set
|
||||
# CONFIG_BFIN533_BLUETECHNIX_CM is not set
|
||||
# CONFIG_BFIN537_BLUETECHNIX_CM is not set
|
||||
# CONFIG_BFIN548_EZKIT is not set
|
||||
# CONFIG_BFIN561_BLUETECHNIX_CM is not set
|
||||
CONFIG_BFIN561_EZKIT=y
|
||||
# CONFIG_BFIN561_TEPLA is not set
|
||||
@ -673,6 +681,7 @@ CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_MII=y
|
||||
CONFIG_SMC91X=y
|
||||
# CONFIG_SMSC911X is not set
|
||||
|
||||
#
|
||||
# Ethernet (1000 Mbit)
|
||||
@ -801,7 +810,6 @@ CONFIG_WATCHDOG=y
|
||||
CONFIG_BFIN_WDT=y
|
||||
CONFIG_HW_RANDOM=y
|
||||
# CONFIG_GEN_RTC is not set
|
||||
# CONFIG_BLACKFIN_DPMC is not set
|
||||
# CONFIG_DTLK is not set
|
||||
# CONFIG_R3964 is not set
|
||||
# CONFIG_RAW_DRIVER is not set
|
||||
|
@ -1,6 +1,6 @@
|
||||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.21.3
|
||||
# Linux kernel version: 2.6.21.5
|
||||
#
|
||||
# CONFIG_MMU is not set
|
||||
# CONFIG_FPU is not set
|
||||
@ -114,17 +114,26 @@ CONFIG_PREEMPT_VOLUNTARY=y
|
||||
# CONFIG_BF534 is not set
|
||||
# CONFIG_BF536 is not set
|
||||
CONFIG_BF537=y
|
||||
# CONFIG_BF542 is not set
|
||||
# CONFIG_BF544 is not set
|
||||
# CONFIG_BF548 is not set
|
||||
# CONFIG_BF549 is not set
|
||||
# CONFIG_BF561 is not set
|
||||
# CONFIG_BF_REV_0_0 is not set
|
||||
CONFIG_BF_REV_0_2=y
|
||||
# CONFIG_BF_REV_0_3 is not set
|
||||
# CONFIG_BF_REV_0_4 is not set
|
||||
# CONFIG_BF_REV_0_5 is not set
|
||||
# CONFIG_BF_REV_ANY is not set
|
||||
# CONFIG_BF_REV_NONE is not set
|
||||
CONFIG_BF53x=y
|
||||
CONFIG_BFIN_SINGLE_CORE=y
|
||||
# CONFIG_BFIN533_EZKIT is not set
|
||||
# CONFIG_BFIN533_STAMP is not set
|
||||
# CONFIG_BFIN537_STAMP is not set
|
||||
# CONFIG_BFIN533_BLUETECHNIX_CM is not set
|
||||
# CONFIG_BFIN537_BLUETECHNIX_CM is not set
|
||||
# CONFIG_BFIN548_EZKIT is not set
|
||||
# CONFIG_BFIN561_BLUETECHNIX_CM is not set
|
||||
# CONFIG_BFIN561_EZKIT is not set
|
||||
# CONFIG_BFIN561_TEPLA is not set
|
||||
@ -598,6 +607,7 @@ CONFIG_BFIN_MAC=y
|
||||
CONFIG_BFIN_TX_DESC_NUM=100
|
||||
CONFIG_BFIN_RX_DESC_NUM=100
|
||||
CONFIG_BFIN_MAC_RMII=y
|
||||
# CONFIG_SMSC911X is not set
|
||||
|
||||
#
|
||||
# Ethernet (1000 Mbit)
|
||||
@ -746,7 +756,6 @@ CONFIG_CAN_BLACKFIN=m
|
||||
# CONFIG_WATCHDOG is not set
|
||||
CONFIG_HW_RANDOM=y
|
||||
# CONFIG_GEN_RTC is not set
|
||||
CONFIG_BLACKFIN_DPMC=y
|
||||
# CONFIG_DTLK is not set
|
||||
# CONFIG_R3964 is not set
|
||||
# CONFIG_RAW_DRIVER is not set
|
||||
|
@ -307,10 +307,20 @@ void __init setup_arch(char **cmdline_p)
|
||||
init_leds();
|
||||
|
||||
printk(KERN_INFO "Blackfin support (C) 2004-2007 Analog Devices, Inc.\n");
|
||||
printk(KERN_INFO "Compiled for ADSP-%s Rev 0.%d\n", CPU, bfin_compiled_revid());
|
||||
if (bfin_revid() != bfin_compiled_revid())
|
||||
printk(KERN_ERR "Warning: Compiled for Rev %d, but running on Rev %d\n",
|
||||
bfin_compiled_revid(), bfin_revid());
|
||||
if (bfin_compiled_revid() == 0xffff)
|
||||
printk(KERN_INFO "Compiled for ADSP-%s Rev any\n", CPU);
|
||||
else if (bfin_compiled_revid() == -1)
|
||||
printk(KERN_INFO "Compiled for ADSP-%s Rev none\n", CPU);
|
||||
else
|
||||
printk(KERN_INFO "Compiled for ADSP-%s Rev 0.%d\n", CPU, bfin_compiled_revid());
|
||||
if (bfin_revid() != bfin_compiled_revid()) {
|
||||
if (bfin_compiled_revid() == -1)
|
||||
printk(KERN_ERR "Warning: Compiled for Rev none, but running on Rev %d\n",
|
||||
bfin_revid());
|
||||
else if (bfin_compiled_revid() != 0xffff)
|
||||
printk(KERN_ERR "Warning: Compiled for Rev %d, but running on Rev %d\n",
|
||||
bfin_compiled_revid(), bfin_revid());
|
||||
}
|
||||
if (bfin_revid() < SUPPORTED_REVID)
|
||||
printk(KERN_ERR "Warning: Unsupported Chip Revision ADSP-%s Rev 0.%d detected\n",
|
||||
CPU, bfin_revid());
|
||||
|
@ -545,7 +545,8 @@ void dump_bfin_regs(struct pt_regs *fp, void *retaddr)
|
||||
|
||||
if (current->mm) {
|
||||
printk(KERN_EMERG "TEXT = 0x%p-0x%p DATA = 0x%p-0x%p\n"
|
||||
"BSS = 0x%p-0x%p USER-STACK = 0x%p\n\n",
|
||||
KERN_EMERG "BSS = 0x%p-0x%p USER-STACK = 0x%p\n"
|
||||
KERN_EMERG "\n",
|
||||
(void*)current->mm->start_code,
|
||||
(void*)current->mm->end_code,
|
||||
(void*)current->mm->start_data,
|
||||
|
@ -621,8 +621,6 @@ static int __init acpi_parse_sbf(struct acpi_table_header *table)
|
||||
static int __init acpi_parse_hpet(struct acpi_table_header *table)
|
||||
{
|
||||
struct acpi_table_hpet *hpet_tbl;
|
||||
struct resource *hpet_res;
|
||||
resource_size_t res_start;
|
||||
|
||||
hpet_tbl = (struct acpi_table_hpet *)table;
|
||||
if (!hpet_tbl) {
|
||||
@ -636,29 +634,10 @@ static int __init acpi_parse_hpet(struct acpi_table_header *table)
|
||||
return -1;
|
||||
}
|
||||
|
||||
#define HPET_RESOURCE_NAME_SIZE 9
|
||||
hpet_res = alloc_bootmem(sizeof(*hpet_res) + HPET_RESOURCE_NAME_SIZE);
|
||||
if (hpet_res) {
|
||||
memset(hpet_res, 0, sizeof(*hpet_res));
|
||||
hpet_res->name = (void *)&hpet_res[1];
|
||||
hpet_res->flags = IORESOURCE_MEM | IORESOURCE_BUSY;
|
||||
snprintf((char *)hpet_res->name, HPET_RESOURCE_NAME_SIZE,
|
||||
"HPET %u", hpet_tbl->sequence);
|
||||
hpet_res->end = (1 * 1024) - 1;
|
||||
}
|
||||
|
||||
hpet_address = hpet_tbl->address.address;
|
||||
printk(KERN_INFO PREFIX "HPET id: %#x base: %#lx\n",
|
||||
hpet_tbl->id, hpet_address);
|
||||
|
||||
res_start = hpet_address;
|
||||
|
||||
if (hpet_res) {
|
||||
hpet_res->start = res_start;
|
||||
hpet_res->end += res_start;
|
||||
insert_resource(&iomem_resource, hpet_res);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
|
@ -233,12 +233,12 @@ typedef struct {
|
||||
mtrr_type type;
|
||||
} arr_state_t;
|
||||
|
||||
static arr_state_t arr_state[8] __devinitdata = {
|
||||
static arr_state_t arr_state[8] = {
|
||||
{0UL, 0UL, 0UL}, {0UL, 0UL, 0UL}, {0UL, 0UL, 0UL}, {0UL, 0UL, 0UL},
|
||||
{0UL, 0UL, 0UL}, {0UL, 0UL, 0UL}, {0UL, 0UL, 0UL}, {0UL, 0UL, 0UL}
|
||||
};
|
||||
|
||||
static unsigned char ccr_state[7] __devinitdata = { 0, 0, 0, 0, 0, 0, 0 };
|
||||
static unsigned char ccr_state[7] = { 0, 0, 0, 0, 0, 0, 0 };
|
||||
|
||||
static void cyrix_set_all(void)
|
||||
{
|
||||
|
@ -65,7 +65,8 @@ get_fixed_ranges(mtrr_type * frs)
|
||||
|
||||
void mtrr_save_fixed_ranges(void *info)
|
||||
{
|
||||
get_fixed_ranges(mtrr_state.fixed_ranges);
|
||||
if (cpu_has_mtrr)
|
||||
get_fixed_ranges(mtrr_state.fixed_ranges);
|
||||
}
|
||||
|
||||
static void print_fixed(unsigned base, unsigned step, const mtrr_type*types)
|
||||
@ -469,11 +470,6 @@ int generic_validate_add_page(unsigned long base, unsigned long size, unsigned i
|
||||
}
|
||||
}
|
||||
|
||||
if (base < 0x100) {
|
||||
printk(KERN_WARNING "mtrr: cannot set region below 1 MiB (0x%lx000,0x%lx000)\n",
|
||||
base, size);
|
||||
return -EINVAL;
|
||||
}
|
||||
/* Check upper bits of base and last are equal and lower bits are 0
|
||||
for base and 1 for last */
|
||||
last = base + size - 1;
|
||||
|
@ -55,14 +55,45 @@ static DEFINE_PER_CPU(struct nmi_watchdog_ctlblk, nmi_watchdog_ctlblk);
|
||||
/* converts an msr to an appropriate reservation bit */
|
||||
static inline unsigned int nmi_perfctr_msr_to_bit(unsigned int msr)
|
||||
{
|
||||
return wd_ops ? msr - wd_ops->perfctr : 0;
|
||||
/* returns the bit offset of the performance counter register */
|
||||
switch (boot_cpu_data.x86_vendor) {
|
||||
case X86_VENDOR_AMD:
|
||||
return (msr - MSR_K7_PERFCTR0);
|
||||
case X86_VENDOR_INTEL:
|
||||
if (cpu_has(&boot_cpu_data, X86_FEATURE_ARCH_PERFMON))
|
||||
return (msr - MSR_ARCH_PERFMON_PERFCTR0);
|
||||
|
||||
switch (boot_cpu_data.x86) {
|
||||
case 6:
|
||||
return (msr - MSR_P6_PERFCTR0);
|
||||
case 15:
|
||||
return (msr - MSR_P4_BPU_PERFCTR0);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* converts an msr to an appropriate reservation bit */
|
||||
/* returns the bit offset of the event selection register */
|
||||
static inline unsigned int nmi_evntsel_msr_to_bit(unsigned int msr)
|
||||
{
|
||||
return wd_ops ? msr - wd_ops->evntsel : 0;
|
||||
/* returns the bit offset of the event selection register */
|
||||
switch (boot_cpu_data.x86_vendor) {
|
||||
case X86_VENDOR_AMD:
|
||||
return (msr - MSR_K7_EVNTSEL0);
|
||||
case X86_VENDOR_INTEL:
|
||||
if (cpu_has(&boot_cpu_data, X86_FEATURE_ARCH_PERFMON))
|
||||
return (msr - MSR_ARCH_PERFMON_EVENTSEL0);
|
||||
|
||||
switch (boot_cpu_data.x86) {
|
||||
case 6:
|
||||
return (msr - MSR_P6_EVNTSEL0);
|
||||
case 15:
|
||||
return (msr - MSR_P4_BSU_ESCR0);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
/* checks for a bit availability (hack for oprofile) */
|
||||
|
@ -54,7 +54,7 @@ static struct resource jazz_io_resources[] = {
|
||||
.start = 0x40,
|
||||
.end = 0x5f,
|
||||
.name = "timer",
|
||||
.end = IORESOURCE_BUSY
|
||||
.flags = IORESOURCE_BUSY
|
||||
}, {
|
||||
.start = 0x80,
|
||||
.end = 0x8f,
|
||||
|
@ -236,8 +236,6 @@ void __init plat_smp_setup(void)
|
||||
dvpe();
|
||||
dmt();
|
||||
|
||||
mips_mt_set_cpuoptions();
|
||||
|
||||
/* Put MVPE's into 'configuration state' */
|
||||
set_c0_mvpcontrol(MVPCONTROL_VPC);
|
||||
|
||||
@ -263,6 +261,8 @@ void __init plat_smp_setup(void)
|
||||
|
||||
void __init plat_prepare_cpus(unsigned int max_cpus)
|
||||
{
|
||||
mips_mt_set_cpuoptions();
|
||||
|
||||
/* set up ipi interrupts */
|
||||
if (cpu_has_vint) {
|
||||
set_vi_handler(MIPS_CPU_IPI_RESCHED_IRQ, ipi_resched_dispatch);
|
||||
|
@ -810,3 +810,12 @@ asmlinkage long compat_sys_request_key(const char __user *_type,
|
||||
return sys_request_key(_type, _description, _callout_info, destringid);
|
||||
}
|
||||
|
||||
asmlinkage long compat_sys_sync_file_range2(int fd, unsigned int flags,
|
||||
unsigned offset_hi, unsigned offset_lo,
|
||||
unsigned nbytes_hi, unsigned nbytes_lo)
|
||||
{
|
||||
loff_t offset = ((loff_t)offset_hi << 32) | offset_lo;
|
||||
loff_t nbytes = ((loff_t)nbytes_hi << 32) | nbytes_lo;
|
||||
|
||||
return sys_sync_file_range(fd, offset, nbytes, flags);
|
||||
}
|
||||
|
@ -31,7 +31,7 @@ V_FUNCTION_BEGIN(__kernel_gettimeofday)
|
||||
mr r11,r3 /* r11 holds tv */
|
||||
mr r10,r4 /* r10 holds tz */
|
||||
bl V_LOCAL_FUNC(__get_datapage) /* get data page */
|
||||
cmpldi r10,0 /* check if tv is NULL */
|
||||
cmpldi r11,0 /* check if tv is NULL */
|
||||
beq 2f
|
||||
bl V_LOCAL_FUNC(__do_get_xsec) /* get xsec from tb & kernel */
|
||||
lis r7,15 /* r7 = 1000000 = USEC_PER_SEC */
|
||||
|
@ -329,6 +329,10 @@ static void sun4v_irq_enable(unsigned int virt_irq)
|
||||
if (err != HV_EOK)
|
||||
printk("sun4v_intr_settarget(%x,%lu): err(%d)\n",
|
||||
ino, cpuid, err);
|
||||
err = sun4v_intr_setstate(ino, HV_INTR_STATE_IDLE);
|
||||
if (err != HV_EOK)
|
||||
printk("sun4v_intr_setstate(%x): "
|
||||
"err(%d)\n", ino, err);
|
||||
err = sun4v_intr_setenabled(ino, HV_INTR_ENABLED);
|
||||
if (err != HV_EOK)
|
||||
printk("sun4v_intr_setenabled(%x): err(%d)\n",
|
||||
@ -400,6 +404,12 @@ static void sun4v_virq_enable(unsigned int virt_irq)
|
||||
"err(%d)\n",
|
||||
dev_handle, dev_ino, cpuid, err);
|
||||
err = sun4v_vintr_set_state(dev_handle, dev_ino,
|
||||
HV_INTR_STATE_IDLE);
|
||||
if (err != HV_EOK)
|
||||
printk("sun4v_vintr_set_state(%lx,%lx,"
|
||||
"HV_INTR_STATE_IDLE): err(%d)\n",
|
||||
dev_handle, dev_ino, err);
|
||||
err = sun4v_vintr_set_valid(dev_handle, dev_ino,
|
||||
HV_INTR_ENABLED);
|
||||
if (err != HV_EOK)
|
||||
printk("sun4v_vintr_set_state(%lx,%lx,"
|
||||
@ -420,7 +430,7 @@ static void sun4v_virq_disable(unsigned int virt_irq)
|
||||
dev_handle = ino & IMAP_IGN;
|
||||
dev_ino = ino & IMAP_INO;
|
||||
|
||||
err = sun4v_vintr_set_state(dev_handle, dev_ino,
|
||||
err = sun4v_vintr_set_valid(dev_handle, dev_ino,
|
||||
HV_INTR_DISABLED);
|
||||
if (err != HV_EOK)
|
||||
printk("sun4v_vintr_set_state(%lx,%lx,"
|
||||
|
@ -1398,7 +1398,7 @@ static int __init asus_acpi_init(void)
|
||||
if (!asus_hotk_found) {
|
||||
acpi_bus_unregister_driver(&asus_hotk_driver);
|
||||
remove_proc_entry(PROC_ASUS, acpi_root_dir);
|
||||
return result;
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
asus_backlight_device = backlight_device_register("asus",NULL,NULL,
|
||||
@ -1407,6 +1407,7 @@ static int __init asus_acpi_init(void)
|
||||
printk(KERN_ERR "Could not register asus backlight device\n");
|
||||
asus_backlight_device = NULL;
|
||||
asus_acpi_exit();
|
||||
return -ENODEV;
|
||||
}
|
||||
asus_backlight_device->props.max_brightness = 15;
|
||||
|
||||
|
@ -999,11 +999,11 @@ static int __init acpi_osi_setup(char *str)
|
||||
if (str == NULL || *str == '\0') {
|
||||
printk(KERN_INFO PREFIX "_OSI method disabled\n");
|
||||
acpi_gbl_create_osi_method = FALSE;
|
||||
} else if (!strcmp("!Linux", str)) {
|
||||
enable_osi_linux(0);
|
||||
} else if (*str == '!') {
|
||||
if (acpi_osi_invalidate(++str) == AE_OK)
|
||||
printk(KERN_INFO PREFIX "Deleted _OSI(%s)\n", str);
|
||||
} else if (!strcmp("!Linux", str)) {
|
||||
enable_osi_linux(0);
|
||||
} else if (!strcmp("Linux", str)) {
|
||||
enable_osi_linux(1);
|
||||
} else if (*osi_additional_string == '\0') {
|
||||
|
@ -16,6 +16,11 @@ menuconfig ATA
|
||||
that "speaks" the ATA protocol, also called ATA controller),
|
||||
because you will be asked for it.
|
||||
|
||||
NOTE: ATA enables basic SCSI support; *however*,
|
||||
'SCSI disk support', 'SCSI tape support', or
|
||||
'SCSI CDROM support' may also be needed,
|
||||
depending on your hardware configuration.
|
||||
|
||||
if ATA
|
||||
|
||||
config ATA_NONSTANDARD
|
||||
|
@ -50,7 +50,7 @@ static int generic_set_mode(struct ata_port *ap, struct ata_device **unused)
|
||||
|
||||
/* Bits 5 and 6 indicate if DMA is active on master/slave */
|
||||
if (ap->ioaddr.bmdma_addr)
|
||||
dma_enabled = ioread8(ap->ioaddr.bmdma_addr + ATA_DMA_CMD);
|
||||
dma_enabled = ioread8(ap->ioaddr.bmdma_addr + ATA_DMA_STATUS);
|
||||
|
||||
for (i = 0; i < ATA_MAX_DEVICES; i++) {
|
||||
struct ata_device *dev = &ap->device[i];
|
||||
|
@ -3798,6 +3798,7 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
|
||||
/* Drives which do spurious command completion */
|
||||
{ "HTS541680J9SA00", "SB2IC7EP", ATA_HORKAGE_NONCQ, },
|
||||
{ "HTS541612J9SA00", "SBDIC7JP", ATA_HORKAGE_NONCQ, },
|
||||
{ "Hitachi HTS541616J9SA00", "SB4OC70P", ATA_HORKAGE_NONCQ, },
|
||||
{ "WDC WD740ADFD-00NLR1", NULL, ATA_HORKAGE_NONCQ, },
|
||||
|
||||
/* Devices with NCQ limits */
|
||||
@ -4781,8 +4782,6 @@ static void ata_hsm_qc_complete(struct ata_queued_cmd *qc, int in_wq)
|
||||
} else
|
||||
ata_qc_complete(qc);
|
||||
}
|
||||
|
||||
ata_altstatus(ap); /* flush */
|
||||
}
|
||||
|
||||
/**
|
||||
@ -6424,14 +6423,14 @@ int ata_host_activate(struct ata_host *host, int irq,
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
/* Used to print device info at probe */
|
||||
host->irq = irq;
|
||||
|
||||
rc = ata_host_register(host, sht);
|
||||
/* if failed, just free the IRQ and leave ports alone */
|
||||
if (rc)
|
||||
devm_free_irq(host->dev, irq, host);
|
||||
|
||||
/* Used to print device info at probe */
|
||||
host->irq = irq;
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
@ -1065,10 +1065,11 @@ int ata_pci_init_one(struct pci_dev *pdev,
|
||||
if (rc)
|
||||
goto err_out;
|
||||
|
||||
if (!legacy_mode)
|
||||
if (!legacy_mode) {
|
||||
rc = devm_request_irq(dev, pdev->irq, pi->port_ops->irq_handler,
|
||||
IRQF_SHARED, DRV_NAME, host);
|
||||
else {
|
||||
host->irq = pdev->irq;
|
||||
} else {
|
||||
irq_handler_t handler[2] = { host->ops->irq_handler,
|
||||
host->ops->irq_handler };
|
||||
unsigned int irq_flags[2] = { IRQF_SHARED, IRQF_SHARED };
|
||||
|
@ -550,22 +550,22 @@ static int ali_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
.udma_mask = 0x1f,
|
||||
.port_ops = &ali_c2_port_ops
|
||||
};
|
||||
/* Revision 0xC3 is UDMA100 */
|
||||
/* Revision 0xC3 is UDMA66 for now */
|
||||
static const struct ata_port_info info_c3 = {
|
||||
.sht = &ali_sht,
|
||||
.flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST | ATA_FLAG_PIO_LBA48,
|
||||
.pio_mask = 0x1f,
|
||||
.mwdma_mask = 0x07,
|
||||
.udma_mask = 0x3f,
|
||||
.udma_mask = 0x1f,
|
||||
.port_ops = &ali_c2_port_ops
|
||||
};
|
||||
/* Revision 0xC4 is UDMA133 */
|
||||
/* Revision 0xC4 is UDMA100 */
|
||||
static const struct ata_port_info info_c4 = {
|
||||
.sht = &ali_sht,
|
||||
.flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST | ATA_FLAG_PIO_LBA48,
|
||||
.pio_mask = 0x1f,
|
||||
.mwdma_mask = 0x07,
|
||||
.udma_mask = 0x7f,
|
||||
.udma_mask = 0x3f,
|
||||
.port_ops = &ali_c2_port_ops
|
||||
};
|
||||
/* Revision 0xC5 is UDMA133 with LBA48 DMA */
|
||||
|
@ -284,6 +284,11 @@ static int __devinit cs5520_init_one(struct pci_dev *pdev, const struct pci_devi
|
||||
ata_interrupt, 0, DRV_NAME, host);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
if (i == 0)
|
||||
host->irq = irq[0];
|
||||
else
|
||||
host->irq2 = irq[1];
|
||||
}
|
||||
|
||||
return ata_host_register(host, &cs5520_sht);
|
||||
|
@ -129,7 +129,7 @@ static struct ata_port_operations pcmcia_port_ops = {
|
||||
.irq_on = ata_irq_on,
|
||||
.irq_ack = ata_irq_ack,
|
||||
|
||||
.port_start = ata_port_start,
|
||||
.port_start = ata_sff_port_start,
|
||||
};
|
||||
|
||||
#define CS_CHECK(fn, ret) \
|
||||
|
@ -689,10 +689,12 @@ static long pdc_detect_pll_input_clock(struct ata_host *host)
|
||||
void __iomem *mmio_base = host->iomap[PDC_MMIO_BAR];
|
||||
u32 scr;
|
||||
long start_count, end_count;
|
||||
long pll_clock;
|
||||
struct timeval start_time, end_time;
|
||||
long pll_clock, usec_elapsed;
|
||||
|
||||
/* Read current counter value */
|
||||
start_count = pdc_read_counter(host);
|
||||
do_gettimeofday(&start_time);
|
||||
|
||||
/* Start the test mode */
|
||||
scr = readl(mmio_base + PDC_SYS_CTL);
|
||||
@ -705,6 +707,7 @@ static long pdc_detect_pll_input_clock(struct ata_host *host)
|
||||
|
||||
/* Read the counter values again */
|
||||
end_count = pdc_read_counter(host);
|
||||
do_gettimeofday(&end_time);
|
||||
|
||||
/* Stop the test mode */
|
||||
scr = readl(mmio_base + PDC_SYS_CTL);
|
||||
@ -713,7 +716,11 @@ static long pdc_detect_pll_input_clock(struct ata_host *host)
|
||||
readl(mmio_base + PDC_SYS_CTL); /* flush */
|
||||
|
||||
/* calculate the input clock in Hz */
|
||||
pll_clock = (start_count - end_count) * 10;
|
||||
usec_elapsed = (end_time.tv_sec - start_time.tv_sec) * 1000000 +
|
||||
(end_time.tv_usec - start_time.tv_usec);
|
||||
|
||||
pll_clock = (start_count - end_count) / 100 *
|
||||
(100000000 / usec_elapsed);
|
||||
|
||||
PDPRINTK("start[%ld] end[%ld] \n", start_count, end_count);
|
||||
PDPRINTK("PLL input clock[%ld]Hz\n", pll_clock);
|
||||
|
@ -31,8 +31,8 @@ static int pdc2026x_cable_detect(struct ata_port *ap)
|
||||
|
||||
pci_read_config_word(pdev, 0x50, &cis);
|
||||
if (cis & (1 << (10 + ap->port_no)))
|
||||
return ATA_CBL_PATA80;
|
||||
return ATA_CBL_PATA40;
|
||||
return ATA_CBL_PATA40;
|
||||
return ATA_CBL_PATA80;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -560,6 +560,40 @@ static const struct ata_port_operations sis_133_ops = {
|
||||
.port_start = ata_port_start,
|
||||
};
|
||||
|
||||
static const struct ata_port_operations sis_133_for_sata_ops = {
|
||||
.port_disable = ata_port_disable,
|
||||
.set_piomode = sis_133_set_piomode,
|
||||
.set_dmamode = sis_133_set_dmamode,
|
||||
.mode_filter = ata_pci_default_filter,
|
||||
|
||||
.tf_load = ata_tf_load,
|
||||
.tf_read = ata_tf_read,
|
||||
.check_status = ata_check_status,
|
||||
.exec_command = ata_exec_command,
|
||||
.dev_select = ata_std_dev_select,
|
||||
|
||||
.freeze = ata_bmdma_freeze,
|
||||
.thaw = ata_bmdma_thaw,
|
||||
.error_handler = ata_bmdma_error_handler,
|
||||
.post_internal_cmd = ata_bmdma_post_internal_cmd,
|
||||
.cable_detect = sis_133_cable_detect,
|
||||
|
||||
.bmdma_setup = ata_bmdma_setup,
|
||||
.bmdma_start = ata_bmdma_start,
|
||||
.bmdma_stop = ata_bmdma_stop,
|
||||
.bmdma_status = ata_bmdma_status,
|
||||
.qc_prep = ata_qc_prep,
|
||||
.qc_issue = ata_qc_issue_prot,
|
||||
.data_xfer = ata_data_xfer,
|
||||
|
||||
.irq_handler = ata_interrupt,
|
||||
.irq_clear = ata_bmdma_irq_clear,
|
||||
.irq_on = ata_irq_on,
|
||||
.irq_ack = ata_irq_ack,
|
||||
|
||||
.port_start = ata_port_start,
|
||||
};
|
||||
|
||||
static const struct ata_port_operations sis_133_early_ops = {
|
||||
.port_disable = ata_port_disable,
|
||||
.set_piomode = sis_100_set_piomode,
|
||||
@ -733,13 +767,20 @@ static const struct ata_port_info sis_info100_early = {
|
||||
.pio_mask = 0x1f, /* pio0-4 */
|
||||
.port_ops = &sis_66_ops,
|
||||
};
|
||||
const struct ata_port_info sis_info133 = {
|
||||
static const struct ata_port_info sis_info133 = {
|
||||
.sht = &sis_sht,
|
||||
.flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
|
||||
.pio_mask = 0x1f, /* pio0-4 */
|
||||
.udma_mask = ATA_UDMA6,
|
||||
.port_ops = &sis_133_ops,
|
||||
};
|
||||
const struct ata_port_info sis_info133_for_sata = {
|
||||
.sht = &sis_sht,
|
||||
.flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
|
||||
.pio_mask = 0x1f, /* pio0-4 */
|
||||
.udma_mask = ATA_UDMA6,
|
||||
.port_ops = &sis_133_for_sata_ops,
|
||||
};
|
||||
static const struct ata_port_info sis_info133_early = {
|
||||
.sht = &sis_sht,
|
||||
.flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
|
||||
@ -749,7 +790,7 @@ static const struct ata_port_info sis_info133_early = {
|
||||
};
|
||||
|
||||
/* Privately shared with the SiS180 SATA driver, not for use elsewhere */
|
||||
EXPORT_SYMBOL_GPL(sis_info133);
|
||||
EXPORT_SYMBOL_GPL(sis_info133_for_sata);
|
||||
|
||||
static void sis_fixup(struct pci_dev *pdev, struct sis_chipset *sis)
|
||||
{
|
||||
@ -975,6 +1016,7 @@ static int sis_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
static const struct pci_device_id sis_pci_tbl[] = {
|
||||
{ PCI_VDEVICE(SI, 0x5513), }, /* SiS 5513 */
|
||||
{ PCI_VDEVICE(SI, 0x5518), }, /* SiS 5518 */
|
||||
{ PCI_VDEVICE(SI, 0x1180), }, /* SiS 1180 */
|
||||
|
||||
{ }
|
||||
};
|
||||
|
@ -496,6 +496,13 @@ static void inic_dev_config(struct ata_device *dev)
|
||||
/* inic can only handle upto LBA28 max sectors */
|
||||
if (dev->max_sectors > ATA_MAX_SECTORS)
|
||||
dev->max_sectors = ATA_MAX_SECTORS;
|
||||
|
||||
if (dev->n_sectors >= 1 << 28) {
|
||||
ata_dev_printk(dev, KERN_ERR,
|
||||
"ERROR: This driver doesn't support LBA48 yet and may cause\n"
|
||||
" data corruption on such devices. Disabling.\n");
|
||||
ata_dev_disable(dev);
|
||||
}
|
||||
}
|
||||
|
||||
static void init_port(struct ata_port *ap)
|
||||
|
@ -582,6 +582,9 @@ static const struct pci_device_id mv_pci_tbl[] = {
|
||||
|
||||
{ PCI_VDEVICE(ADAPTEC2, 0x0241), chip_604x },
|
||||
|
||||
/* Adaptec 1430SA */
|
||||
{ PCI_VDEVICE(ADAPTEC2, 0x0243), chip_7042 },
|
||||
|
||||
{ PCI_VDEVICE(TTI, 0x2310), chip_7042 },
|
||||
|
||||
/* add Marvell 7042 support */
|
||||
|
@ -325,6 +325,7 @@ static struct scsi_host_template nv_adma_sht = {
|
||||
.name = DRV_NAME,
|
||||
.ioctl = ata_scsi_ioctl,
|
||||
.queuecommand = ata_scsi_queuecmd,
|
||||
.change_queue_depth = ata_scsi_change_queue_depth,
|
||||
.can_queue = NV_ADMA_MAX_CPBS,
|
||||
.this_id = ATA_SHT_THIS_ID,
|
||||
.sg_tablesize = NV_ADMA_SGTBL_TOTAL_LEN,
|
||||
|
@ -72,8 +72,8 @@ static const struct pci_device_id sis_pci_tbl[] = {
|
||||
{ PCI_VDEVICE(SI, 0x0181), sis_180 }, /* SiS 964/180 */
|
||||
{ PCI_VDEVICE(SI, 0x0182), sis_180 }, /* SiS 965/965L */
|
||||
{ PCI_VDEVICE(SI, 0x0183), sis_180 }, /* SiS 965/965L */
|
||||
{ PCI_VDEVICE(SI, 0x1182), sis_180 }, /* SiS 966/966L */
|
||||
{ PCI_VDEVICE(SI, 0x1183), sis_180 }, /* SiS 966/966L */
|
||||
{ PCI_VDEVICE(SI, 0x1182), sis_180 }, /* SiS 966/680 */
|
||||
{ PCI_VDEVICE(SI, 0x1183), sis_180 }, /* SiS 966/966L/968/680 */
|
||||
|
||||
{ } /* terminate list */
|
||||
};
|
||||
@ -161,7 +161,6 @@ static unsigned int get_scr_cfg_addr(struct ata_port *ap, unsigned int sc_reg)
|
||||
case 0x0182:
|
||||
case 0x0183:
|
||||
case 0x1182:
|
||||
case 0x1183:
|
||||
addr += SIS182_SATA1_OFS;
|
||||
break;
|
||||
}
|
||||
@ -183,8 +182,8 @@ static u32 sis_scr_cfg_read (struct ata_port *ap, unsigned int sc_reg)
|
||||
|
||||
pci_read_config_dword(pdev, cfg_addr, &val);
|
||||
|
||||
if ((pdev->device == 0x0182) || (pdev->device == 0x0183) || (pdev->device == 0x1182) ||
|
||||
(pdev->device == 0x1183) || (pmr & SIS_PMR_COMBINED))
|
||||
if ((pdev->device == 0x0182) || (pdev->device == 0x0183) ||
|
||||
(pdev->device == 0x1182) || (pmr & SIS_PMR_COMBINED))
|
||||
pci_read_config_dword(pdev, cfg_addr+0x10, &val2);
|
||||
|
||||
return (val|val2) & 0xfffffffb; /* avoid problems with powerdowned ports */
|
||||
@ -203,8 +202,8 @@ static void sis_scr_cfg_write (struct ata_port *ap, unsigned int sc_reg, u32 val
|
||||
|
||||
pci_write_config_dword(pdev, cfg_addr, val);
|
||||
|
||||
if ((pdev->device == 0x0182) || (pdev->device == 0x0183) || (pdev->device == 0x1182) ||
|
||||
(pdev->device == 0x1183) || (pmr & SIS_PMR_COMBINED))
|
||||
if ((pdev->device == 0x0182) || (pdev->device == 0x0183) ||
|
||||
(pdev->device == 0x1182) || (pmr & SIS_PMR_COMBINED))
|
||||
pci_write_config_dword(pdev, cfg_addr+0x10, val);
|
||||
}
|
||||
|
||||
@ -224,8 +223,8 @@ static u32 sis_scr_read (struct ata_port *ap, unsigned int sc_reg)
|
||||
|
||||
val = ioread32(ap->ioaddr.scr_addr + (sc_reg * 4));
|
||||
|
||||
if ((pdev->device == 0x0182) || (pdev->device == 0x0183) || (pdev->device == 0x1182) ||
|
||||
(pdev->device == 0x1183) || (pmr & SIS_PMR_COMBINED))
|
||||
if ((pdev->device == 0x0182) || (pdev->device == 0x0183) ||
|
||||
(pdev->device == 0x1182) || (pmr & SIS_PMR_COMBINED))
|
||||
val2 = ioread32(ap->ioaddr.scr_addr + (sc_reg * 4) + 0x10);
|
||||
|
||||
return (val | val2) & 0xfffffffb;
|
||||
@ -245,8 +244,8 @@ static void sis_scr_write (struct ata_port *ap, unsigned int sc_reg, u32 val)
|
||||
sis_scr_cfg_write(ap, sc_reg, val);
|
||||
else {
|
||||
iowrite32(val, ap->ioaddr.scr_addr + (sc_reg * 4));
|
||||
if ((pdev->device == 0x0182) || (pdev->device == 0x0183) || (pdev->device == 0x1182) ||
|
||||
(pdev->device == 0x1183) || (pmr & SIS_PMR_COMBINED))
|
||||
if ((pdev->device == 0x0182) || (pdev->device == 0x0183) ||
|
||||
(pdev->device == 0x1182) || (pmr & SIS_PMR_COMBINED))
|
||||
iowrite32(val, ap->ioaddr.scr_addr + (sc_reg * 4)+0x10);
|
||||
}
|
||||
}
|
||||
@ -293,11 +292,11 @@ static int sis_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
/* The PATA-handling is provided by pata_sis */
|
||||
switch (pmr & 0x30) {
|
||||
case 0x10:
|
||||
ppi[1] = &sis_info133;
|
||||
ppi[1] = &sis_info133_for_sata;
|
||||
break;
|
||||
|
||||
case 0x30:
|
||||
ppi[0] = &sis_info133;
|
||||
ppi[0] = &sis_info133_for_sata;
|
||||
break;
|
||||
}
|
||||
if ((pmr & SIS_PMR_COMBINED) == 0) {
|
||||
@ -324,14 +323,14 @@ static int sis_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
break;
|
||||
|
||||
case 0x1182:
|
||||
dev_printk(KERN_INFO, &pdev->dev, "Detected SiS 1182/966/680 SATA controller\n");
|
||||
pi.flags |= ATA_FLAG_SLAVE_POSS;
|
||||
break;
|
||||
|
||||
case 0x1183:
|
||||
pci_read_config_dword(pdev, 0x64, &val);
|
||||
if (val & 0x10000000) {
|
||||
dev_printk(KERN_INFO, &pdev->dev, "Detected SiS 1182/1183/966L SATA controller\n");
|
||||
} else {
|
||||
dev_printk(KERN_INFO, &pdev->dev, "Detected SiS 1182/1183/966 SATA controller\n");
|
||||
pi.flags |= ATA_FLAG_SLAVE_POSS;
|
||||
}
|
||||
dev_printk(KERN_INFO, &pdev->dev, "Detected SiS 1183/966/966L/968/680 controller in PATA mode\n");
|
||||
ppi[0] = &sis_info133_for_sata;
|
||||
ppi[1] = &sis_info133_for_sata;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -2,4 +2,4 @@
|
||||
struct ata_port_info;
|
||||
|
||||
/* pata_sis.c */
|
||||
extern const struct ata_port_info sis_info133;
|
||||
extern const struct ata_port_info sis_info133_for_sata;
|
||||
|
@ -7,7 +7,7 @@ menuconfig ATM_DRIVERS
|
||||
depends on NETDEVICES && ATM
|
||||
default y
|
||||
|
||||
if ATM_DRIVERS
|
||||
if ATM_DRIVERS && NETDEVICES && ATM
|
||||
|
||||
config ATM_DUMMY
|
||||
tristate "Dummy ATM driver"
|
||||
|
@ -556,7 +556,7 @@ static struct pci_device_id ioat_pci_tbl[] = {
|
||||
{ 0, }
|
||||
};
|
||||
|
||||
static struct pci_driver ioat_pci_drv = {
|
||||
static struct pci_driver ioat_pci_driver = {
|
||||
.name = "ioatdma",
|
||||
.id_table = ioat_pci_tbl,
|
||||
.probe = ioat_probe,
|
||||
@ -699,7 +699,7 @@ static int __devinit ioat_probe(struct pci_dev *pdev,
|
||||
if (err)
|
||||
goto err_set_dma_mask;
|
||||
|
||||
err = pci_request_regions(pdev, ioat_pci_drv.name);
|
||||
err = pci_request_regions(pdev, ioat_pci_driver.name);
|
||||
if (err)
|
||||
goto err_request_regions;
|
||||
|
||||
@ -828,14 +828,14 @@ static int __init ioat_init_module(void)
|
||||
/* if forced, worst case is that rmmod hangs */
|
||||
__unsafe(THIS_MODULE);
|
||||
|
||||
return pci_register_driver(&ioat_pci_drv);
|
||||
return pci_register_driver(&ioat_pci_driver);
|
||||
}
|
||||
|
||||
module_init(ioat_init_module);
|
||||
|
||||
static void __exit ioat_exit_module(void)
|
||||
{
|
||||
pci_unregister_driver(&ioat_pci_drv);
|
||||
pci_unregister_driver(&ioat_pci_driver);
|
||||
}
|
||||
|
||||
module_exit(ioat_exit_module);
|
||||
|
@ -4,27 +4,44 @@ comment "An alternative FireWire stack is available with EXPERIMENTAL=y"
|
||||
depends on EXPERIMENTAL=n
|
||||
|
||||
config FIREWIRE
|
||||
tristate "IEEE 1394 (FireWire) support (JUJU alternative stack, experimental)"
|
||||
tristate "IEEE 1394 (FireWire) support - alternative stack, EXPERIMENTAL"
|
||||
depends on EXPERIMENTAL
|
||||
select CRC_ITU_T
|
||||
help
|
||||
IEEE 1394 describes a high performance serial bus, which is also
|
||||
known as FireWire(tm) or i.Link(tm) and is used for connecting all
|
||||
sorts of devices (most notably digital video cameras) to your
|
||||
computer.
|
||||
|
||||
If you have FireWire hardware and want to use it, say Y here. This
|
||||
is the core support only, you will also need to select a driver for
|
||||
your IEEE 1394 adapter.
|
||||
|
||||
To compile this driver as a module, say M here: the module will be
|
||||
called firewire-core.
|
||||
|
||||
This is the "JUJU" FireWire stack, an alternative implementation
|
||||
This is the "Juju" FireWire stack, a new alternative implementation
|
||||
designed for robustness and simplicity. You can build either this
|
||||
stack, or the classic stack (the ieee1394 driver, ohci1394 etc.)
|
||||
or both.
|
||||
|
||||
To compile this driver as a module, say M here: the module will be
|
||||
called firewire-core. It functionally replaces ieee1394, raw1394,
|
||||
and video1394.
|
||||
|
||||
NOTE:
|
||||
|
||||
You should only build ONE of the stacks, unless you REALLY know what
|
||||
you are doing. If you install both, you should configure them only as
|
||||
modules rather than link them statically, and you should blacklist one
|
||||
of the concurrent low-level drivers in /etc/modprobe.conf. Add either
|
||||
|
||||
blacklist firewire-ohci
|
||||
or
|
||||
blacklist ohci1394
|
||||
|
||||
there depending on which driver you DON'T want to have auto-loaded.
|
||||
You can optionally do the same with the other IEEE 1394/ FireWire
|
||||
drivers.
|
||||
|
||||
If you have an old modprobe which doesn't implement the blacklist
|
||||
directive, use either
|
||||
|
||||
install firewire-ohci /bin/true
|
||||
or
|
||||
install ohci1394 /bin/true
|
||||
|
||||
and so on, depending on which modules you DON't want to have
|
||||
auto-loaded.
|
||||
|
||||
config FIREWIRE_OHCI
|
||||
tristate "Support for OHCI FireWire host controllers"
|
||||
depends on PCI && FIREWIRE
|
||||
@ -34,11 +51,13 @@ config FIREWIRE_OHCI
|
||||
is the only chipset in use, so say Y here.
|
||||
|
||||
To compile this driver as a module, say M here: The module will be
|
||||
called firewire-ohci.
|
||||
called firewire-ohci. It replaces ohci1394 of the classic IEEE 1394
|
||||
stack.
|
||||
|
||||
If you also build ohci1394 of the classic IEEE 1394 driver stack,
|
||||
blacklist either ohci1394 or firewire-ohci to let hotplug load the
|
||||
desired driver.
|
||||
NOTE:
|
||||
|
||||
If you also build ohci1394 of the classic stack, blacklist either
|
||||
ohci1394 or firewire-ohci to let hotplug load only the desired driver.
|
||||
|
||||
config FIREWIRE_SBP2
|
||||
tristate "Support for storage devices (SBP-2 protocol driver)"
|
||||
@ -50,12 +69,14 @@ config FIREWIRE_SBP2
|
||||
like scanners.
|
||||
|
||||
To compile this driver as a module, say M here: The module will be
|
||||
called firewire-sbp2.
|
||||
called firewire-sbp2. It replaces sbp2 of the classic IEEE 1394
|
||||
stack.
|
||||
|
||||
You should also enable support for disks, CD-ROMs, etc. in the SCSI
|
||||
configuration section.
|
||||
|
||||
If you also build sbp2 of the classic IEEE 1394 driver stack,
|
||||
blacklist either sbp2 or firewire-sbp2 to let hotplug load the
|
||||
desired driver.
|
||||
NOTE:
|
||||
|
||||
If you also build sbp2 of the classic stack, blacklist either sbp2
|
||||
or firewire-sbp2 to let hotplug load only the desired driver.
|
||||
|
||||
|
@ -373,8 +373,8 @@ static void ar_context_tasklet(unsigned long data)
|
||||
|
||||
offset = offsetof(struct ar_buffer, data);
|
||||
dma_unmap_single(ohci->card.device,
|
||||
ab->descriptor.data_address - offset,
|
||||
PAGE_SIZE, DMA_BIDIRECTIONAL);
|
||||
le32_to_cpu(ab->descriptor.data_address) - offset,
|
||||
PAGE_SIZE, DMA_BIDIRECTIONAL);
|
||||
|
||||
buffer = ab;
|
||||
ab = ab->next;
|
||||
@ -427,7 +427,7 @@ static void ar_context_run(struct ar_context *ctx)
|
||||
size_t offset;
|
||||
|
||||
offset = offsetof(struct ar_buffer, data);
|
||||
ab_bus = ab->descriptor.data_address - offset;
|
||||
ab_bus = le32_to_cpu(ab->descriptor.data_address) - offset;
|
||||
|
||||
reg_write(ctx->ohci, COMMAND_PTR(ctx->regs), ab_bus | 1);
|
||||
reg_write(ctx->ohci, CONTROL_SET(ctx->regs), CONTEXT_RUN);
|
||||
|
@ -574,11 +574,11 @@ static inline u8 probe_for_drive (ide_drive_t *drive)
|
||||
/* look for ATAPI device */
|
||||
(void) do_probe(drive, WIN_PIDENTIFY);
|
||||
}
|
||||
if (strstr(drive->id->model, "E X A B Y T E N E S T"))
|
||||
enable_nest(drive);
|
||||
if (!drive->present)
|
||||
/* drive not found */
|
||||
return 0;
|
||||
if (strstr(drive->id->model, "E X A B Y T E N E S T"))
|
||||
enable_nest(drive);
|
||||
|
||||
/* identification failed? */
|
||||
if (!drive->id_read) {
|
||||
|
@ -238,7 +238,7 @@ EXPORT_SYMBOL(task_no_data_intr);
|
||||
static u8 wait_drive_not_busy(ide_drive_t *drive)
|
||||
{
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
int retries = 100;
|
||||
int retries;
|
||||
u8 stat;
|
||||
|
||||
/*
|
||||
@ -246,10 +246,14 @@ static u8 wait_drive_not_busy(ide_drive_t *drive)
|
||||
* This can take up to 10 usec, but we will wait max 1 ms
|
||||
* (drive_cmd_intr() waits that long).
|
||||
*/
|
||||
while (((stat = hwif->INB(IDE_STATUS_REG)) & BUSY_STAT) && retries--)
|
||||
udelay(10);
|
||||
for (retries = 0; retries < 100; retries++) {
|
||||
if ((stat = hwif->INB(IDE_STATUS_REG)) & BUSY_STAT)
|
||||
udelay(10);
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
if (!retries)
|
||||
if (stat & BUSY_STAT)
|
||||
printk(KERN_ERR "%s: drive still BUSY!\n", drive->name);
|
||||
|
||||
return stat;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Version 2.15
|
||||
* Version 2.16
|
||||
*
|
||||
* AMD 755/756/766/8111 and nVidia nForce/2/2s/3/3s/CK804/MCP04
|
||||
* IDE driver for Linux.
|
||||
@ -244,10 +244,8 @@ static int amd_set_drive(ide_drive_t *drive, u8 speed)
|
||||
struct ide_timing t, p;
|
||||
int T, UT;
|
||||
|
||||
if (speed != XFER_PIO_SLOW && speed != drive->current_speed)
|
||||
if (ide_config_drive_speed(drive, speed))
|
||||
printk(KERN_WARNING "ide%d: Drive %d didn't accept speed setting. Oh, well.\n",
|
||||
drive->dn >> 1, drive->dn & 1);
|
||||
if (speed != XFER_PIO_SLOW)
|
||||
ide_config_drive_speed(drive, speed);
|
||||
|
||||
T = 1000000000 / amd_clock;
|
||||
UT = T / min_t(int, max_t(int, amd_config->flags & AMD_UDMA, 1), 2);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* linux/drivers/ide/pci/hpt366.c Version 1.04 Jun 4, 2007
|
||||
* linux/drivers/ide/pci/hpt366.c Version 1.06 Jun 27, 2007
|
||||
*
|
||||
* Copyright (C) 1999-2003 Andre Hedrick <andre@linux-ide.org>
|
||||
* Portions Copyright (C) 2001 Sun Microsystems, Inc.
|
||||
@ -182,6 +182,7 @@ static const char *bad_ata66_4[] = {
|
||||
"IC35L040AVER07-0",
|
||||
"IC35L060AVER07-0",
|
||||
"WDC AC310200R",
|
||||
"MAXTOR STM3320620A",
|
||||
NULL
|
||||
};
|
||||
|
||||
@ -1513,18 +1514,28 @@ static int __devinit init_setup_hpt366(struct pci_dev *dev, ide_pci_device_t *d)
|
||||
goto init_single;
|
||||
|
||||
/*
|
||||
* HPT36x chips are single channel and
|
||||
* do not seem to have the channel enable bit...
|
||||
* HPT36x chips have one channel per function and have
|
||||
* both channel enable bits located differently and visible
|
||||
* to both functions -- really stupid design decision... :-(
|
||||
* Bit 4 is for the primary channel, bit 5 for the secondary.
|
||||
*/
|
||||
d->channels = 1;
|
||||
d->enablebits[0].reg = 0;
|
||||
d->enablebits[0].mask = d->enablebits[0].val = 0x10;
|
||||
|
||||
if ((dev2 = pci_get_slot(dev->bus, dev->devfn + 1)) != NULL) {
|
||||
u8 pin1 = 0, pin2 = 0;
|
||||
u8 mcr1 = 0, pin1 = 0, pin2 = 0;
|
||||
int ret;
|
||||
|
||||
pci_set_drvdata(dev2, info[rev]);
|
||||
|
||||
/*
|
||||
* Now we'll have to force both channels enabled if
|
||||
* at least one of them has been enabled by BIOS...
|
||||
*/
|
||||
pci_read_config_byte(dev, 0x50, &mcr1);
|
||||
if (mcr1 & 0x30)
|
||||
pci_write_config_byte(dev, 0x50, mcr1 | 0x30);
|
||||
|
||||
pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin1);
|
||||
pci_read_config_byte(dev2, PCI_INTERRUPT_PIN, &pin2);
|
||||
if (pin1 != pin2 && dev->irq == dev2->irq) {
|
||||
|
@ -1,6 +1,6 @@
|
||||
|
||||
/*
|
||||
* linux/drivers/ide/pci/it821x.c Version 0.15 Jun 2 2007
|
||||
* linux/drivers/ide/pci/it821x.c Version 0.16 Jul 3 2007
|
||||
*
|
||||
* Copyright (C) 2004 Red Hat <alan@redhat.com>
|
||||
* Copyright (C) 2007 Bartlomiej Zolnierkiewicz
|
||||
@ -660,7 +660,6 @@ static void __devinit init_hwif_it821x(ide_hwif_t *hwif)
|
||||
|
||||
hwif->ultra_mask = 0x7f;
|
||||
hwif->mwdma_mask = 0x07;
|
||||
hwif->swdma_mask = 0x07;
|
||||
|
||||
hwif->ide_dma_check = &it821x_config_drive_for_dma;
|
||||
if (!(hwif->udma_four))
|
||||
|
@ -306,11 +306,13 @@ static long __devinit read_counter(u32 dma_base)
|
||||
*/
|
||||
static long __devinit detect_pll_input_clock(unsigned long dma_base)
|
||||
{
|
||||
struct timeval start_time, end_time;
|
||||
long start_count, end_count;
|
||||
long pll_input;
|
||||
long pll_input, usec_elapsed;
|
||||
u8 scr1;
|
||||
|
||||
start_count = read_counter(dma_base);
|
||||
do_gettimeofday(&start_time);
|
||||
|
||||
/* Start the test mode */
|
||||
outb(0x01, dma_base + 0x01);
|
||||
@ -322,6 +324,7 @@ static long __devinit detect_pll_input_clock(unsigned long dma_base)
|
||||
mdelay(10);
|
||||
|
||||
end_count = read_counter(dma_base);
|
||||
do_gettimeofday(&end_time);
|
||||
|
||||
/* Stop the test mode */
|
||||
outb(0x01, dma_base + 0x01);
|
||||
@ -333,7 +336,10 @@ static long __devinit detect_pll_input_clock(unsigned long dma_base)
|
||||
* Calculate the input clock in Hz
|
||||
* (the clock counter is 30 bit wide and counts down)
|
||||
*/
|
||||
pll_input = ((start_count - end_count) & 0x3ffffff) * 100;
|
||||
usec_elapsed = (end_time.tv_sec - start_time.tv_sec) * 1000000 +
|
||||
(end_time.tv_usec - start_time.tv_usec);
|
||||
pll_input = ((start_count - end_count) & 0x3ffffff) / 10 *
|
||||
(10000000 / usec_elapsed);
|
||||
|
||||
DBG("start[%ld] end[%ld]\n", start_count, end_count);
|
||||
|
||||
|
@ -872,11 +872,15 @@ void __init ide_scan_pcibus (int scan_direction)
|
||||
* are post init.
|
||||
*/
|
||||
|
||||
list_for_each_safe(l, n, &ide_pci_drivers)
|
||||
{
|
||||
list_for_each_safe(l, n, &ide_pci_drivers) {
|
||||
list_del(l);
|
||||
d = list_entry(l, struct pci_driver, node);
|
||||
__pci_register_driver(d, d->driver.owner, d->driver.mod_name);
|
||||
if (__pci_register_driver(d, d->driver.owner,
|
||||
d->driver.mod_name)) {
|
||||
printk(KERN_ERR "%s: failed to register driver "
|
||||
"for %s\n", __FUNCTION__,
|
||||
d->driver.mod_name);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
@ -148,8 +148,8 @@ partial_error:
|
||||
|
||||
ib_dma_unmap_single(priv->ca, mapping[0], IPOIB_CM_HEAD_SIZE, DMA_FROM_DEVICE);
|
||||
|
||||
for (; i >= 0; --i)
|
||||
ib_dma_unmap_single(priv->ca, mapping[i + 1], PAGE_SIZE, DMA_FROM_DEVICE);
|
||||
for (; i > 0; --i)
|
||||
ib_dma_unmap_single(priv->ca, mapping[i], PAGE_SIZE, DMA_FROM_DEVICE);
|
||||
|
||||
dev_kfree_skb_any(skb);
|
||||
return NULL;
|
||||
|
@ -11,7 +11,7 @@ menuconfig DVB_CAPTURE_DRIVERS
|
||||
---help---
|
||||
Say Y to select Digital TV adapters
|
||||
|
||||
if DVB_CAPTURE_DRIVERS
|
||||
if DVB_CAPTURE_DRIVERS && DVB_CORE
|
||||
|
||||
comment "Supported SAA7146 based PCI Adapters"
|
||||
depends on DVB_CORE && PCI && I2C
|
||||
|
@ -118,6 +118,7 @@ struct cinergyt2 {
|
||||
struct dvb_demux demux;
|
||||
struct usb_device *udev;
|
||||
struct mutex sem;
|
||||
struct mutex wq_sem;
|
||||
struct dvb_adapter adapter;
|
||||
struct dvb_device *fedev;
|
||||
struct dmxdev dmxdev;
|
||||
@ -482,14 +483,14 @@ static int cinergyt2_open (struct inode *inode, struct file *file)
|
||||
struct cinergyt2 *cinergyt2 = dvbdev->priv;
|
||||
int err = -ERESTARTSYS;
|
||||
|
||||
if (cinergyt2->disconnect_pending || mutex_lock_interruptible(&cinergyt2->sem))
|
||||
return -ERESTARTSYS;
|
||||
if (cinergyt2->disconnect_pending || mutex_lock_interruptible(&cinergyt2->wq_sem))
|
||||
goto out;
|
||||
|
||||
if ((err = dvb_generic_open(inode, file))) {
|
||||
mutex_unlock(&cinergyt2->sem);
|
||||
return err;
|
||||
}
|
||||
if (mutex_lock_interruptible(&cinergyt2->sem))
|
||||
goto out_unlock1;
|
||||
|
||||
if ((err = dvb_generic_open(inode, file)))
|
||||
goto out_unlock2;
|
||||
|
||||
if ((file->f_flags & O_ACCMODE) != O_RDONLY) {
|
||||
cinergyt2_sleep(cinergyt2, 0);
|
||||
@ -498,8 +499,12 @@ static int cinergyt2_open (struct inode *inode, struct file *file)
|
||||
|
||||
atomic_inc(&cinergyt2->inuse);
|
||||
|
||||
out_unlock2:
|
||||
mutex_unlock(&cinergyt2->sem);
|
||||
return 0;
|
||||
out_unlock1:
|
||||
mutex_unlock(&cinergyt2->wq_sem);
|
||||
out:
|
||||
return err;
|
||||
}
|
||||
|
||||
static void cinergyt2_unregister(struct cinergyt2 *cinergyt2)
|
||||
@ -519,15 +524,17 @@ static int cinergyt2_release (struct inode *inode, struct file *file)
|
||||
struct dvb_device *dvbdev = file->private_data;
|
||||
struct cinergyt2 *cinergyt2 = dvbdev->priv;
|
||||
|
||||
mutex_lock(&cinergyt2->sem);
|
||||
mutex_lock(&cinergyt2->wq_sem);
|
||||
|
||||
if (!cinergyt2->disconnect_pending && (file->f_flags & O_ACCMODE) != O_RDONLY) {
|
||||
cancel_delayed_work(&cinergyt2->query_work);
|
||||
flush_scheduled_work();
|
||||
cancel_rearming_delayed_work(&cinergyt2->query_work);
|
||||
|
||||
mutex_lock(&cinergyt2->sem);
|
||||
cinergyt2_sleep(cinergyt2, 1);
|
||||
mutex_unlock(&cinergyt2->sem);
|
||||
}
|
||||
|
||||
mutex_unlock(&cinergyt2->sem);
|
||||
mutex_unlock(&cinergyt2->wq_sem);
|
||||
|
||||
if (atomic_dec_and_test(&cinergyt2->inuse) && cinergyt2->disconnect_pending) {
|
||||
warn("delayed unregister in release");
|
||||
@ -838,13 +845,13 @@ static int cinergyt2_register_rc(struct cinergyt2 *cinergyt2)
|
||||
|
||||
static void cinergyt2_unregister_rc(struct cinergyt2 *cinergyt2)
|
||||
{
|
||||
cancel_delayed_work(&cinergyt2->rc_query_work);
|
||||
cancel_rearming_delayed_work(&cinergyt2->rc_query_work);
|
||||
input_unregister_device(cinergyt2->rc_input_dev);
|
||||
}
|
||||
|
||||
static inline void cinergyt2_suspend_rc(struct cinergyt2 *cinergyt2)
|
||||
{
|
||||
cancel_delayed_work(&cinergyt2->rc_query_work);
|
||||
cancel_rearming_delayed_work(&cinergyt2->rc_query_work);
|
||||
}
|
||||
|
||||
static inline void cinergyt2_resume_rc(struct cinergyt2 *cinergyt2)
|
||||
@ -907,6 +914,7 @@ static int cinergyt2_probe (struct usb_interface *intf,
|
||||
usb_set_intfdata (intf, (void *) cinergyt2);
|
||||
|
||||
mutex_init(&cinergyt2->sem);
|
||||
mutex_init(&cinergyt2->wq_sem);
|
||||
init_waitqueue_head (&cinergyt2->poll_wq);
|
||||
INIT_DELAYED_WORK(&cinergyt2->query_work, cinergyt2_query);
|
||||
|
||||
@ -974,11 +982,8 @@ static void cinergyt2_disconnect (struct usb_interface *intf)
|
||||
{
|
||||
struct cinergyt2 *cinergyt2 = usb_get_intfdata (intf);
|
||||
|
||||
flush_scheduled_work();
|
||||
|
||||
cinergyt2_unregister_rc(cinergyt2);
|
||||
|
||||
cancel_delayed_work(&cinergyt2->query_work);
|
||||
cancel_rearming_delayed_work(&cinergyt2->query_work);
|
||||
wake_up_interruptible(&cinergyt2->poll_wq);
|
||||
|
||||
cinergyt2->demux.dmx.close(&cinergyt2->demux.dmx);
|
||||
@ -992,21 +997,21 @@ static int cinergyt2_suspend (struct usb_interface *intf, pm_message_t state)
|
||||
{
|
||||
struct cinergyt2 *cinergyt2 = usb_get_intfdata (intf);
|
||||
|
||||
if (cinergyt2->disconnect_pending || mutex_lock_interruptible(&cinergyt2->sem))
|
||||
if (cinergyt2->disconnect_pending || mutex_lock_interruptible(&cinergyt2->wq_sem))
|
||||
return -ERESTARTSYS;
|
||||
|
||||
if (1) {
|
||||
struct cinergyt2 *cinergyt2 = usb_get_intfdata (intf);
|
||||
|
||||
cinergyt2_suspend_rc(cinergyt2);
|
||||
cancel_delayed_work(&cinergyt2->query_work);
|
||||
cancel_rearming_delayed_work(&cinergyt2->query_work);
|
||||
|
||||
mutex_lock(&cinergyt2->sem);
|
||||
if (cinergyt2->streaming)
|
||||
cinergyt2_stop_stream_xfer(cinergyt2);
|
||||
flush_scheduled_work();
|
||||
cinergyt2_sleep(cinergyt2, 1);
|
||||
mutex_unlock(&cinergyt2->sem);
|
||||
}
|
||||
|
||||
mutex_unlock(&cinergyt2->sem);
|
||||
mutex_unlock(&cinergyt2->wq_sem);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1014,9 +1019,15 @@ static int cinergyt2_resume (struct usb_interface *intf)
|
||||
{
|
||||
struct cinergyt2 *cinergyt2 = usb_get_intfdata (intf);
|
||||
struct dvbt_set_parameters_msg *param = &cinergyt2->param;
|
||||
int err = -ERESTARTSYS;
|
||||
|
||||
if (cinergyt2->disconnect_pending || mutex_lock_interruptible(&cinergyt2->sem))
|
||||
return -ERESTARTSYS;
|
||||
if (cinergyt2->disconnect_pending || mutex_lock_interruptible(&cinergyt2->wq_sem))
|
||||
goto out;
|
||||
|
||||
if (mutex_lock_interruptible(&cinergyt2->sem))
|
||||
goto out_unlock1;
|
||||
|
||||
err = 0;
|
||||
|
||||
if (!cinergyt2->sleeping) {
|
||||
cinergyt2_sleep(cinergyt2, 0);
|
||||
@ -1029,7 +1040,10 @@ static int cinergyt2_resume (struct usb_interface *intf)
|
||||
cinergyt2_resume_rc(cinergyt2);
|
||||
|
||||
mutex_unlock(&cinergyt2->sem);
|
||||
return 0;
|
||||
out_unlock1:
|
||||
mutex_unlock(&cinergyt2->wq_sem);
|
||||
out:
|
||||
return err;
|
||||
}
|
||||
|
||||
static const struct usb_device_id cinergyt2_table [] __devinitdata = {
|
||||
|
@ -529,7 +529,7 @@ int ttpci_budget_init(struct budget *budget, struct saa7146_dev *dev,
|
||||
if (bi->type != BUDGET_FS_ACTIVY)
|
||||
saa7146_setgpio(dev, 2, SAA7146_GPIO_OUTHI);
|
||||
|
||||
if (budget_register(budget) == 0)
|
||||
if ((ret = budget_register(budget)) == 0)
|
||||
return 0; /* Everything OK */
|
||||
|
||||
/* An error occurred, cleanup resources */
|
||||
|
@ -9,7 +9,7 @@ menuconfig RADIO_ADAPTERS
|
||||
---help---
|
||||
Say Y here to enable selecting AM/FM radio adapters.
|
||||
|
||||
if RADIO_ADAPTERS
|
||||
if RADIO_ADAPTERS && VIDEO_DEV
|
||||
|
||||
config RADIO_CADET
|
||||
tristate "ADS Cadet AM/FM Tuner"
|
||||
|
@ -11,7 +11,7 @@ menuconfig VIDEO_CAPTURE_DRIVERS
|
||||
webcams, analog TV, and hybrid analog/digital TV.
|
||||
Some of those devices also supports FM radio.
|
||||
|
||||
if VIDEO_CAPTURE_DRIVERS
|
||||
if VIDEO_CAPTURE_DRIVERS && VIDEO_DEV
|
||||
|
||||
config VIDEO_ADV_DEBUG
|
||||
bool "Enable advanced debug functionality"
|
||||
@ -347,7 +347,7 @@ endmenu # encoder / decoder chips
|
||||
|
||||
config VIDEO_VIVI
|
||||
tristate "Virtual Video Driver"
|
||||
depends on VIDEO_V4L2 && !SPARC32 && !SPARC64 && PCI && VIDEO_DEV
|
||||
depends on VIDEO_V4L2 && !SPARC32 && !SPARC64 && PCI
|
||||
select VIDEO_BUF
|
||||
default n
|
||||
---help---
|
||||
@ -691,7 +691,7 @@ menuconfig V4L_USB_DRIVERS
|
||||
depends on USB
|
||||
default y
|
||||
|
||||
if V4L_USB_DRIVERS
|
||||
if V4L_USB_DRIVERS && USB
|
||||
|
||||
source "drivers/media/video/pvrusb2/Kconfig"
|
||||
|
||||
|
@ -1331,7 +1331,7 @@ set_tvnorm(struct bttv *btv, unsigned int norm)
|
||||
|
||||
/* Call with btv->lock down. */
|
||||
static void
|
||||
set_input(struct bttv *btv, unsigned int input)
|
||||
set_input(struct bttv *btv, unsigned int input, unsigned int norm)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
@ -1350,7 +1350,7 @@ set_input(struct bttv *btv, unsigned int input)
|
||||
}
|
||||
audio_input(btv,(input == bttv_tvcards[btv->c.type].tuner ?
|
||||
TVAUDIO_INPUT_TUNER : TVAUDIO_INPUT_EXTERN));
|
||||
set_tvnorm(btv,btv->tvnorm);
|
||||
set_tvnorm(btv, norm);
|
||||
i2c_vidiocschan(btv);
|
||||
}
|
||||
|
||||
@ -1441,7 +1441,7 @@ static void bttv_reinit_bt848(struct bttv *btv)
|
||||
|
||||
init_bt848(btv);
|
||||
btv->pll.pll_current = -1;
|
||||
set_input(btv,btv->input);
|
||||
set_input(btv, btv->input, btv->tvnorm);
|
||||
}
|
||||
|
||||
static int get_control(struct bttv *btv, struct v4l2_control *c)
|
||||
@ -2011,8 +2011,7 @@ static int bttv_common_ioctls(struct bttv *btv, unsigned int cmd, void *arg)
|
||||
return 0;
|
||||
}
|
||||
|
||||
btv->tvnorm = v->norm;
|
||||
set_input(btv,v->channel);
|
||||
set_input(btv, v->channel, v->norm);
|
||||
mutex_unlock(&btv->lock);
|
||||
return 0;
|
||||
}
|
||||
@ -2148,7 +2147,7 @@ static int bttv_common_ioctls(struct bttv *btv, unsigned int cmd, void *arg)
|
||||
if (*i > bttv_tvcards[btv->c.type].video_inputs)
|
||||
return -EINVAL;
|
||||
mutex_lock(&btv->lock);
|
||||
set_input(btv,*i);
|
||||
set_input(btv, *i, btv->tvnorm);
|
||||
mutex_unlock(&btv->lock);
|
||||
return 0;
|
||||
}
|
||||
@ -4780,7 +4779,7 @@ static int __devinit bttv_probe(struct pci_dev *dev,
|
||||
bt848_hue(btv,32768);
|
||||
bt848_sat(btv,32768);
|
||||
audio_mute(btv, 1);
|
||||
set_input(btv,0);
|
||||
set_input(btv, 0, btv->tvnorm);
|
||||
bttv_crop_reset(&btv->crop[0], btv->tvnorm);
|
||||
btv->crop[1] = btv->crop[0]; /* current = default */
|
||||
disclaim_vbi_lines(btv);
|
||||
|
@ -1034,6 +1034,8 @@ static int vidioc_g_tuner (struct file *file, void *priv,
|
||||
|
||||
if (unlikely(UNSET == core->tuner_type))
|
||||
return -EINVAL;
|
||||
if (0 != t->index)
|
||||
return -EINVAL;
|
||||
|
||||
strcpy(t->name, "Television");
|
||||
t->type = V4L2_TUNER_ANALOG_TV;
|
||||
|
@ -1005,7 +1005,7 @@ int saa7134_tvaudio_init2(struct saa7134_dev *dev)
|
||||
int saa7134_tvaudio_fini(struct saa7134_dev *dev)
|
||||
{
|
||||
/* shutdown tvaudio thread */
|
||||
if (dev->thread.pid >= 0) {
|
||||
if (dev->thread.pid > 0) {
|
||||
dev->thread.shutdown = 1;
|
||||
wake_up_interruptible(&dev->thread.wq);
|
||||
wait_for_completion(&dev->thread.exit);
|
||||
|
@ -16,12 +16,30 @@ static void do_blink(unsigned long data)
|
||||
add_timer(&blink_timer);
|
||||
}
|
||||
|
||||
static int blink_init(void)
|
||||
static int blink_panic_event(struct notifier_block *blk,
|
||||
unsigned long event, void *arg)
|
||||
{
|
||||
printk(KERN_INFO "Enabling keyboard blinking\n");
|
||||
do_blink(0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
module_init(blink_init);
|
||||
static struct notifier_block blink_notify = {
|
||||
.notifier_call = blink_panic_event,
|
||||
};
|
||||
|
||||
static __init int blink_init(void)
|
||||
{
|
||||
printk(KERN_INFO "Enabling keyboard blinking\n");
|
||||
atomic_notifier_chain_register(&panic_notifier_list, &blink_notify);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static __exit void blink_remove(void)
|
||||
{
|
||||
del_timer_sync(&blink_timer);
|
||||
atomic_notifier_chain_unregister(&panic_notifier_list, &blink_notify);
|
||||
}
|
||||
|
||||
module_init(blink_init);
|
||||
module_exit(blink_remove);
|
||||
|
||||
|
@ -944,7 +944,7 @@ static inline void gfar_tx_checksum(struct sk_buff *skb, struct txfcb *fcb)
|
||||
flags |= TXFCB_UDP;
|
||||
fcb->phcs = udp_hdr(skb)->check;
|
||||
} else
|
||||
fcb->phcs = udp_hdr(skb)->check;
|
||||
fcb->phcs = tcp_hdr(skb)->check;
|
||||
|
||||
/* l3os is the distance between the start of the
|
||||
* frame (skb->data) and the start of the IP hdr.
|
||||
|
@ -509,7 +509,7 @@ static void irport_timeout(struct net_device *dev)
|
||||
IRDA_DEBUG(0, "%s(), iir=%02x, lsr=%02x, iobase=%#x\n",
|
||||
__FUNCTION__, iir, lsr, iobase);
|
||||
|
||||
IRDA_DEBUG(0, "%s(), transmitting=%d, remain=%d, done=%d\n",
|
||||
IRDA_DEBUG(0, "%s(), transmitting=%d, remain=%d, done=%td\n",
|
||||
__FUNCTION__, self->transmitting, self->tx_buff.len,
|
||||
self->tx_buff.data - self->tx_buff.head);
|
||||
|
||||
|
@ -79,7 +79,7 @@ MODULE_AUTHOR("Daniele Peri <peri@csai.unipa.it>");
|
||||
MODULE_DESCRIPTION("SMC IrCC SIR/FIR controller driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
static int smsc_nopnp;
|
||||
static int smsc_nopnp = 1;
|
||||
module_param_named(nopnp, smsc_nopnp, bool, 0);
|
||||
MODULE_PARM_DESC(nopnp, "Do not use PNP to detect controller settings");
|
||||
|
||||
@ -416,6 +416,13 @@ static int __init smsc_ircc_legacy_probe(void)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
#ifdef CONFIG_PCI
|
||||
if (smsc_ircc_preconfigure_subsystems(ircc_cfg, ircc_fir, ircc_sir, ircc_dma, ircc_irq) < 0) {
|
||||
/* Ignore errors from preconfiguration */
|
||||
IRDA_ERROR("%s, Preconfiguration failed !\n", driver_name);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (ircc_fir > 0 && ircc_sir > 0) {
|
||||
IRDA_MESSAGE(" Overriding FIR address 0x%04x\n", ircc_fir);
|
||||
IRDA_MESSAGE(" Overriding SIR address 0x%04x\n", ircc_sir);
|
||||
@ -459,13 +466,6 @@ static int __init smsc_ircc_init(void)
|
||||
return ret;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PCI
|
||||
if (smsc_ircc_preconfigure_subsystems(ircc_cfg, ircc_fir, ircc_sir, ircc_dma, ircc_irq) < 0) {
|
||||
/* Ignore errors from preconfiguration */
|
||||
IRDA_ERROR("%s, Preconfiguration failed !\n", driver_name);
|
||||
}
|
||||
#endif
|
||||
|
||||
dev_count = 0;
|
||||
|
||||
if (smsc_nopnp || !pnp_platform_devices ||
|
||||
|
@ -911,6 +911,8 @@ static struct pci_device_id mlx4_pci_table[] = {
|
||||
{ PCI_VDEVICE(MELLANOX, 0x6340) }, /* MT25408 "Hermon" SDR */
|
||||
{ PCI_VDEVICE(MELLANOX, 0x634a) }, /* MT25408 "Hermon" DDR */
|
||||
{ PCI_VDEVICE(MELLANOX, 0x6354) }, /* MT25408 "Hermon" QDR */
|
||||
{ PCI_VDEVICE(MELLANOX, 0x6732) }, /* MT25408 "Hermon" DDR PCIe gen2 */
|
||||
{ PCI_VDEVICE(MELLANOX, 0x673c) }, /* MT25408 "Hermon" QDR PCIe gen2 */
|
||||
{ 0, }
|
||||
};
|
||||
|
||||
|
@ -2854,6 +2854,8 @@ static int myri10ge_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
SET_NETDEV_DEV(netdev, &pdev->dev);
|
||||
|
||||
mgp = netdev_priv(netdev);
|
||||
memset(mgp, 0, sizeof(*mgp));
|
||||
mgp->dev = netdev;
|
||||
|
@ -937,6 +937,7 @@ struct netxen_adapter {
|
||||
struct netxen_ring_ctx *ctx_desc;
|
||||
struct pci_dev *ctx_desc_pdev;
|
||||
dma_addr_t ctx_desc_phys_addr;
|
||||
int intr_scheme;
|
||||
int (*enable_phy_interrupts) (struct netxen_adapter *);
|
||||
int (*disable_phy_interrupts) (struct netxen_adapter *);
|
||||
void (*handle_phy_intr) (struct netxen_adapter *);
|
||||
@ -951,6 +952,24 @@ struct netxen_adapter {
|
||||
int (*stop_port) (struct netxen_adapter *);
|
||||
}; /* netxen_adapter structure */
|
||||
|
||||
/*
|
||||
* NetXen dma watchdog control structure
|
||||
*
|
||||
* Bit 0 : enabled => R/O: 1 watchdog active, 0 inactive
|
||||
* Bit 1 : disable_request => 1 req disable dma watchdog
|
||||
* Bit 2 : enable_request => 1 req enable dma watchdog
|
||||
* Bit 3-31 : unused
|
||||
*/
|
||||
|
||||
#define netxen_set_dma_watchdog_disable_req(config_word) \
|
||||
_netxen_set_bits(config_word, 1, 1, 1)
|
||||
#define netxen_set_dma_watchdog_enable_req(config_word) \
|
||||
_netxen_set_bits(config_word, 2, 1, 1)
|
||||
#define netxen_get_dma_watchdog_enabled(config_word) \
|
||||
((config_word) & 0x1)
|
||||
#define netxen_get_dma_watchdog_disabled(config_word) \
|
||||
(((config_word) >> 1) & 0x1)
|
||||
|
||||
/* Max number of xmit producer threads that can run simultaneously */
|
||||
#define MAX_XMIT_PRODUCERS 16
|
||||
|
||||
@ -1030,8 +1049,8 @@ int netxen_nic_erase_pxe(struct netxen_adapter *adapter);
|
||||
/* Functions from netxen_nic_init.c */
|
||||
void netxen_free_adapter_offload(struct netxen_adapter *adapter);
|
||||
int netxen_initialize_adapter_offload(struct netxen_adapter *adapter);
|
||||
void netxen_phantom_init(struct netxen_adapter *adapter, int pegtune_val);
|
||||
void netxen_load_firmware(struct netxen_adapter *adapter);
|
||||
int netxen_phantom_init(struct netxen_adapter *adapter, int pegtune_val);
|
||||
int netxen_load_firmware(struct netxen_adapter *adapter);
|
||||
int netxen_pinit_from_rom(struct netxen_adapter *adapter, int verbose);
|
||||
int netxen_rom_fast_read(struct netxen_adapter *adapter, int addr, int *valp);
|
||||
int netxen_rom_fast_read_words(struct netxen_adapter *adapter, int addr,
|
||||
@ -1080,37 +1099,106 @@ struct net_device_stats *netxen_nic_get_stats(struct net_device *netdev);
|
||||
|
||||
static inline void netxen_nic_disable_int(struct netxen_adapter *adapter)
|
||||
{
|
||||
/*
|
||||
* ISR_INT_MASK: Can be read from window 0 or 1.
|
||||
*/
|
||||
writel(0x7ff, PCI_OFFSET_SECOND_RANGE(adapter, ISR_INT_MASK));
|
||||
uint32_t mask = 0x7ff;
|
||||
int retries = 32;
|
||||
|
||||
DPRINTK(1, INFO, "Entered ISR Disable \n");
|
||||
|
||||
switch (adapter->portnum) {
|
||||
case 0:
|
||||
writel(0x0, NETXEN_CRB_NORMALIZE(adapter, CRB_SW_INT_MASK_0));
|
||||
break;
|
||||
case 1:
|
||||
writel(0x0, NETXEN_CRB_NORMALIZE(adapter, CRB_SW_INT_MASK_1));
|
||||
break;
|
||||
case 2:
|
||||
writel(0x0, NETXEN_CRB_NORMALIZE(adapter, CRB_SW_INT_MASK_2));
|
||||
break;
|
||||
case 3:
|
||||
writel(0x0, NETXEN_CRB_NORMALIZE(adapter, CRB_SW_INT_MASK_3));
|
||||
break;
|
||||
}
|
||||
|
||||
if (adapter->intr_scheme != -1 &&
|
||||
adapter->intr_scheme != INTR_SCHEME_PERPORT) {
|
||||
writel(mask,
|
||||
(void *)(PCI_OFFSET_SECOND_RANGE(adapter, ISR_INT_MASK)));
|
||||
}
|
||||
|
||||
/* Window = 0 or 1 */
|
||||
if (!(adapter->flags & NETXEN_NIC_MSI_ENABLED)) {
|
||||
do {
|
||||
writel(0xffffffff, (void *)
|
||||
(PCI_OFFSET_SECOND_RANGE(adapter, ISR_INT_TARGET_STATUS)));
|
||||
mask = readl((void *)
|
||||
(pci_base_offset(adapter, ISR_INT_VECTOR)));
|
||||
if (!(mask & 0x80))
|
||||
break;
|
||||
udelay(10);
|
||||
} while (--retries);
|
||||
|
||||
if (!retries) {
|
||||
printk(KERN_NOTICE "%s: Failed to disable interrupt completely\n",
|
||||
netxen_nic_driver_name);
|
||||
}
|
||||
}
|
||||
|
||||
DPRINTK(1, INFO, "Done with Disable Int\n");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static inline void netxen_nic_enable_int(struct netxen_adapter *adapter)
|
||||
{
|
||||
u32 mask;
|
||||
|
||||
switch (adapter->ahw.board_type) {
|
||||
case NETXEN_NIC_GBE:
|
||||
mask = 0x77b;
|
||||
DPRINTK(1, INFO, "Entered ISR Enable \n");
|
||||
|
||||
if (adapter->intr_scheme != -1 &&
|
||||
adapter->intr_scheme != INTR_SCHEME_PERPORT) {
|
||||
switch (adapter->ahw.board_type) {
|
||||
case NETXEN_NIC_GBE:
|
||||
mask = 0x77b;
|
||||
break;
|
||||
case NETXEN_NIC_XGBE:
|
||||
mask = 0x77f;
|
||||
break;
|
||||
default:
|
||||
mask = 0x7ff;
|
||||
break;
|
||||
}
|
||||
|
||||
writel(mask,
|
||||
(void *)(PCI_OFFSET_SECOND_RANGE(adapter, ISR_INT_MASK)));
|
||||
}
|
||||
switch (adapter->portnum) {
|
||||
case 0:
|
||||
writel(0x1, NETXEN_CRB_NORMALIZE(adapter, CRB_SW_INT_MASK_0));
|
||||
break;
|
||||
case NETXEN_NIC_XGBE:
|
||||
mask = 0x77f;
|
||||
case 1:
|
||||
writel(0x1, NETXEN_CRB_NORMALIZE(adapter, CRB_SW_INT_MASK_1));
|
||||
break;
|
||||
default:
|
||||
mask = 0x7ff;
|
||||
case 2:
|
||||
writel(0x1, NETXEN_CRB_NORMALIZE(adapter, CRB_SW_INT_MASK_2));
|
||||
break;
|
||||
case 3:
|
||||
writel(0x1, NETXEN_CRB_NORMALIZE(adapter, CRB_SW_INT_MASK_3));
|
||||
break;
|
||||
}
|
||||
|
||||
writel(mask, PCI_OFFSET_SECOND_RANGE(adapter, ISR_INT_MASK));
|
||||
|
||||
if (!(adapter->flags & NETXEN_NIC_MSI_ENABLED)) {
|
||||
mask = 0xbff;
|
||||
writel(0X0, NETXEN_CRB_NORMALIZE(adapter, CRB_INT_VECTOR));
|
||||
writel(mask, PCI_OFFSET_SECOND_RANGE(adapter,
|
||||
ISR_INT_TARGET_MASK));
|
||||
if (adapter->intr_scheme != -1 &&
|
||||
adapter->intr_scheme != INTR_SCHEME_PERPORT) {
|
||||
writel(0X0, NETXEN_CRB_NORMALIZE(adapter, CRB_INT_VECTOR));
|
||||
}
|
||||
writel(mask,
|
||||
(void *)(PCI_OFFSET_SECOND_RANGE(adapter, ISR_INT_TARGET_MASK)));
|
||||
}
|
||||
|
||||
DPRINTK(1, INFO, "Done with enable Int\n");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1164,6 +1252,62 @@ static inline void get_brd_name_by_type(u32 type, char *name)
|
||||
name = "Unknown";
|
||||
}
|
||||
|
||||
static inline int
|
||||
dma_watchdog_shutdown_request(struct netxen_adapter *adapter)
|
||||
{
|
||||
u32 ctrl;
|
||||
|
||||
/* check if already inactive */
|
||||
if (netxen_nic_hw_read_wx(adapter,
|
||||
NETXEN_CAM_RAM(NETXEN_CAM_RAM_DMA_WATCHDOG_CTRL), &ctrl, 4))
|
||||
printk(KERN_ERR "failed to read dma watchdog status\n");
|
||||
|
||||
if (netxen_get_dma_watchdog_enabled(ctrl) == 0)
|
||||
return 1;
|
||||
|
||||
/* Send the disable request */
|
||||
netxen_set_dma_watchdog_disable_req(ctrl);
|
||||
netxen_crb_writelit_adapter(adapter,
|
||||
NETXEN_CAM_RAM(NETXEN_CAM_RAM_DMA_WATCHDOG_CTRL), ctrl);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int
|
||||
dma_watchdog_shutdown_poll_result(struct netxen_adapter *adapter)
|
||||
{
|
||||
u32 ctrl;
|
||||
|
||||
if (netxen_nic_hw_read_wx(adapter,
|
||||
NETXEN_CAM_RAM(NETXEN_CAM_RAM_DMA_WATCHDOG_CTRL), &ctrl, 4))
|
||||
printk(KERN_ERR "failed to read dma watchdog status\n");
|
||||
|
||||
return ((netxen_get_dma_watchdog_enabled(ctrl) == 0) &&
|
||||
(netxen_get_dma_watchdog_disabled(ctrl) == 0));
|
||||
}
|
||||
|
||||
static inline int
|
||||
dma_watchdog_wakeup(struct netxen_adapter *adapter)
|
||||
{
|
||||
u32 ctrl;
|
||||
|
||||
if (netxen_nic_hw_read_wx(adapter,
|
||||
NETXEN_CAM_RAM(NETXEN_CAM_RAM_DMA_WATCHDOG_CTRL), &ctrl, 4))
|
||||
printk(KERN_ERR "failed to read dma watchdog status\n");
|
||||
|
||||
if (netxen_get_dma_watchdog_enabled(ctrl))
|
||||
return 1;
|
||||
|
||||
/* send the wakeup request */
|
||||
netxen_set_dma_watchdog_enable_req(ctrl);
|
||||
|
||||
netxen_crb_writelit_adapter(adapter,
|
||||
NETXEN_CAM_RAM(NETXEN_CAM_RAM_DMA_WATCHDOG_CTRL), ctrl);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int netxen_is_flash_supported(struct netxen_adapter *adapter);
|
||||
int netxen_get_flash_mac_addr(struct netxen_adapter *adapter, u64 mac[]);
|
||||
extern void netxen_change_ringparam(struct netxen_adapter *adapter);
|
||||
|
@ -687,4 +687,6 @@ enum {
|
||||
|
||||
#define PCIE_MAX_MASTER_SPLIT (0x14048)
|
||||
|
||||
#define NETXEN_CAM_RAM_DMA_WATCHDOG_CTRL (0x14)
|
||||
|
||||
#endif /* __NETXEN_NIC_HDR_H_ */
|
||||
|
@ -377,7 +377,7 @@ int netxen_nic_hw_resources(struct netxen_adapter *adapter)
|
||||
recv_crb_registers[ctx].
|
||||
crb_rcvpeg_state));
|
||||
while (state != PHAN_PEG_RCV_INITIALIZED && loops < 20) {
|
||||
udelay(100);
|
||||
msleep(1);
|
||||
/* Window 1 call */
|
||||
state = readl(NETXEN_CRB_NORMALIZE(adapter,
|
||||
recv_crb_registers
|
||||
@ -392,7 +392,11 @@ int netxen_nic_hw_resources(struct netxen_adapter *adapter)
|
||||
return err;
|
||||
}
|
||||
}
|
||||
DPRINTK(INFO, "Recieve Peg ready too. starting stuff\n");
|
||||
adapter->intr_scheme = readl(
|
||||
NETXEN_CRB_NORMALIZE(adapter, CRB_NIC_CAPABILITIES_FW));
|
||||
printk(KERN_NOTICE "%s: FW capabilities:0x%x\n", netxen_nic_driver_name,
|
||||
adapter->intr_scheme);
|
||||
DPRINTK(INFO, "Receive Peg ready too. starting stuff\n");
|
||||
|
||||
addr = netxen_alloc(adapter->ahw.pdev,
|
||||
sizeof(struct netxen_ring_ctx) +
|
||||
@ -697,7 +701,7 @@ void netxen_nic_pci_change_crbwindow(struct netxen_adapter *adapter, u32 wndw)
|
||||
adapter->curr_window = 0;
|
||||
}
|
||||
|
||||
void netxen_load_firmware(struct netxen_adapter *adapter)
|
||||
int netxen_load_firmware(struct netxen_adapter *adapter)
|
||||
{
|
||||
int i;
|
||||
u32 data, size = 0;
|
||||
@ -709,15 +713,24 @@ void netxen_load_firmware(struct netxen_adapter *adapter)
|
||||
writel(1, NETXEN_CRB_NORMALIZE(adapter, NETXEN_ROMUSB_GLB_CAS_RST));
|
||||
|
||||
for (i = 0; i < size; i++) {
|
||||
if (netxen_rom_fast_read(adapter, flashaddr, (int *)&data) != 0) {
|
||||
DPRINTK(ERR,
|
||||
"Error in netxen_rom_fast_read(). Will skip"
|
||||
"loading flash image\n");
|
||||
return;
|
||||
}
|
||||
int retries = 10;
|
||||
if (netxen_rom_fast_read(adapter, flashaddr, (int *)&data) != 0)
|
||||
return -EIO;
|
||||
|
||||
off = netxen_nic_pci_set_window(adapter, memaddr);
|
||||
addr = pci_base_offset(adapter, off);
|
||||
writel(data, addr);
|
||||
do {
|
||||
if (readl(addr) == data)
|
||||
break;
|
||||
msleep(100);
|
||||
writel(data, addr);
|
||||
} while (--retries);
|
||||
if (!retries) {
|
||||
printk(KERN_ERR "%s: firmware load aborted, write failed at 0x%x\n",
|
||||
netxen_nic_driver_name, memaddr);
|
||||
return -EIO;
|
||||
}
|
||||
flashaddr += 4;
|
||||
memaddr += 4;
|
||||
}
|
||||
@ -727,7 +740,7 @@ void netxen_load_firmware(struct netxen_adapter *adapter)
|
||||
NETXEN_CRB_NORMALIZE(adapter, NETXEN_ROMUSB_GLB_CHIP_CLK_CTRL));
|
||||
writel(0, NETXEN_CRB_NORMALIZE(adapter, NETXEN_ROMUSB_GLB_CAS_RST));
|
||||
|
||||
udelay(100);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -139,6 +139,8 @@ int netxen_init_firmware(struct netxen_adapter *adapter)
|
||||
return err;
|
||||
}
|
||||
/* Window 1 call */
|
||||
writel(INTR_SCHEME_PERPORT,
|
||||
NETXEN_CRB_NORMALIZE(adapter, CRB_NIC_CAPABILITIES_HOST));
|
||||
writel(MPORT_MULTI_FUNCTION_MODE,
|
||||
NETXEN_CRB_NORMALIZE(adapter, CRB_MPORT_MODE));
|
||||
writel(PHAN_INITIALIZE_ACK,
|
||||
@ -405,10 +407,7 @@ static inline int do_rom_fast_write(struct netxen_adapter *adapter, int addr,
|
||||
static inline int
|
||||
do_rom_fast_read(struct netxen_adapter *adapter, int addr, int *valp)
|
||||
{
|
||||
if (jiffies > (last_schedule_time + (8 * HZ))) {
|
||||
last_schedule_time = jiffies;
|
||||
schedule();
|
||||
}
|
||||
cond_resched();
|
||||
|
||||
netxen_nic_reg_write(adapter, NETXEN_ROMUSB_ROM_ADDRESS, addr);
|
||||
netxen_nic_reg_write(adapter, NETXEN_ROMUSB_ROM_ABYTE_CNT, 3);
|
||||
@ -854,10 +853,10 @@ int netxen_pinit_from_rom(struct netxen_adapter *adapter, int verbose)
|
||||
netxen_nic_pci_change_crbwindow(adapter, 1);
|
||||
}
|
||||
if (init_delay == 1) {
|
||||
ssleep(1);
|
||||
msleep(2000);
|
||||
init_delay = 0;
|
||||
}
|
||||
msleep(1);
|
||||
msleep(20);
|
||||
}
|
||||
kfree(buf);
|
||||
|
||||
@ -933,10 +932,6 @@ int netxen_initialize_adapter_offload(struct netxen_adapter *adapter)
|
||||
void netxen_free_adapter_offload(struct netxen_adapter *adapter)
|
||||
{
|
||||
if (adapter->dummy_dma.addr) {
|
||||
writel(0, NETXEN_CRB_NORMALIZE(adapter,
|
||||
CRB_HOST_DUMMY_BUF_ADDR_HI));
|
||||
writel(0, NETXEN_CRB_NORMALIZE(adapter,
|
||||
CRB_HOST_DUMMY_BUF_ADDR_LO));
|
||||
pci_free_consistent(adapter->ahw.pdev,
|
||||
NETXEN_HOST_DUMMY_DMA_SIZE,
|
||||
adapter->dummy_dma.addr,
|
||||
@ -945,25 +940,32 @@ void netxen_free_adapter_offload(struct netxen_adapter *adapter)
|
||||
}
|
||||
}
|
||||
|
||||
void netxen_phantom_init(struct netxen_adapter *adapter, int pegtune_val)
|
||||
int netxen_phantom_init(struct netxen_adapter *adapter, int pegtune_val)
|
||||
{
|
||||
u32 val = 0;
|
||||
int loops = 0;
|
||||
int retries = 30;
|
||||
|
||||
if (!pegtune_val) {
|
||||
val = readl(NETXEN_CRB_NORMALIZE(adapter, CRB_CMDPEG_STATE));
|
||||
while (val != PHAN_INITIALIZE_COMPLETE &&
|
||||
val != PHAN_INITIALIZE_ACK && loops < 200000) {
|
||||
udelay(100);
|
||||
schedule();
|
||||
val =
|
||||
readl(NETXEN_CRB_NORMALIZE
|
||||
do {
|
||||
val = readl(NETXEN_CRB_NORMALIZE
|
||||
(adapter, CRB_CMDPEG_STATE));
|
||||
loops++;
|
||||
pegtune_val = readl(NETXEN_CRB_NORMALIZE
|
||||
(adapter, NETXEN_ROMUSB_GLB_PEGTUNE_DONE));
|
||||
|
||||
if (val == PHAN_INITIALIZE_COMPLETE ||
|
||||
val == PHAN_INITIALIZE_ACK)
|
||||
return 0;
|
||||
|
||||
msleep(1000);
|
||||
} while (--retries);
|
||||
if (!retries) {
|
||||
printk(KERN_WARNING "netxen_phantom_init: init failed, "
|
||||
"pegtune_val=%x\n", pegtune_val);
|
||||
return -1;
|
||||
}
|
||||
if (val != PHAN_INITIALIZE_COMPLETE)
|
||||
printk("WARNING: Initial boot wait loop failed...\n");
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int netxen_nic_rx_has_work(struct netxen_adapter *adapter)
|
||||
@ -1120,6 +1122,7 @@ netxen_process_rcv(struct netxen_adapter *adapter, int ctxid,
|
||||
adapter->stats.csummed++;
|
||||
skb->ip_summed = CHECKSUM_UNNECESSARY;
|
||||
}
|
||||
skb->dev = netdev;
|
||||
if (desc_ctx == RCV_DESC_LRO_CTXID) {
|
||||
/* True length was only available on the last pkt */
|
||||
skb_put(skb, buffer->lro_length);
|
||||
@ -1224,6 +1227,7 @@ u32 netxen_process_rcv_ring(struct netxen_adapter *adapter, int ctxid, int max)
|
||||
NETXEN_CRB_NORMALIZE(adapter,
|
||||
recv_crb_registers[adapter->portnum].
|
||||
crb_rcv_status_consumer));
|
||||
wmb();
|
||||
}
|
||||
|
||||
return count;
|
||||
@ -1276,11 +1280,13 @@ int netxen_process_cmd_ring(unsigned long data)
|
||||
if (skb && (cmpxchg(&buffer->skb, skb, 0) == skb)) {
|
||||
pci_unmap_single(pdev, frag->dma, frag->length,
|
||||
PCI_DMA_TODEVICE);
|
||||
frag->dma = 0ULL;
|
||||
for (i = 1; i < buffer->frag_count; i++) {
|
||||
DPRINTK(INFO, "getting fragment no %d\n", i);
|
||||
frag++; /* Get the next frag */
|
||||
pci_unmap_page(pdev, frag->dma, frag->length,
|
||||
PCI_DMA_TODEVICE);
|
||||
frag->dma = 0ULL;
|
||||
}
|
||||
|
||||
adapter->stats.skbfreed++;
|
||||
@ -1446,6 +1452,7 @@ void netxen_post_rx_buffers(struct netxen_adapter *adapter, u32 ctx, u32 ringid)
|
||||
writel(msg,
|
||||
DB_NORMALIZE(adapter,
|
||||
NETXEN_RCV_PRODUCER_OFFSET));
|
||||
wmb();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -308,7 +308,13 @@ netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
|
||||
adapter->netdev = netdev;
|
||||
adapter->pdev = pdev;
|
||||
|
||||
/* this will be read from FW later */
|
||||
adapter->intr_scheme = -1;
|
||||
|
||||
/* This will be reset for mezz cards */
|
||||
adapter->portnum = pci_func_id;
|
||||
adapter->status &= ~NETXEN_NETDEV_STATUS;
|
||||
|
||||
netdev->open = netxen_nic_open;
|
||||
netdev->stop = netxen_nic_close;
|
||||
@ -336,11 +342,9 @@ netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
if (pci_using_dac)
|
||||
netdev->features |= NETIF_F_HIGHDMA;
|
||||
|
||||
if (pci_enable_msi(pdev)) {
|
||||
if (pci_enable_msi(pdev))
|
||||
adapter->flags &= ~NETXEN_NIC_MSI_ENABLED;
|
||||
printk(KERN_WARNING "%s: unable to allocate MSI interrupt"
|
||||
" error\n", netxen_nic_driver_name);
|
||||
} else
|
||||
else
|
||||
adapter->flags |= NETXEN_NIC_MSI_ENABLED;
|
||||
|
||||
netdev->irq = pdev->irq;
|
||||
@ -355,13 +359,6 @@ netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
/* initialize the adapter */
|
||||
netxen_initialize_adapter_hw(adapter);
|
||||
|
||||
#ifdef CONFIG_PPC
|
||||
if ((adapter->ahw.boardcfg.board_type ==
|
||||
NETXEN_BRDTYPE_P2_SB31_10G_IMEZ) &&
|
||||
(pci_func_id == 2))
|
||||
goto err_out_free_adapter;
|
||||
#endif /* CONFIG_PPC */
|
||||
|
||||
/*
|
||||
* Adapter in our case is quad port so initialize it before
|
||||
* initializing the ports
|
||||
@ -509,22 +506,30 @@ netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
NETXEN_CAM_RAM(0x1fc)));
|
||||
if (val == 0x55555555) {
|
||||
/* This is the first boot after power up */
|
||||
netxen_nic_read_w0(adapter, NETXEN_PCIE_REG(0x4), &val);
|
||||
if (!(val & 0x4)) {
|
||||
val |= 0x4;
|
||||
netxen_nic_write_w0(adapter, NETXEN_PCIE_REG(0x4), val);
|
||||
netxen_nic_read_w0(adapter, NETXEN_PCIE_REG(0x4), &val);
|
||||
if (!(val & 0x4))
|
||||
printk(KERN_ERR "%s: failed to set MSI bit in PCI-e reg\n",
|
||||
netxen_nic_driver_name);
|
||||
}
|
||||
val = readl(NETXEN_CRB_NORMALIZE(adapter,
|
||||
NETXEN_ROMUSB_GLB_SW_RESET));
|
||||
printk(KERN_INFO"NetXen: read 0x%08x for reset reg.\n",val);
|
||||
if (val != 0x80000f) {
|
||||
/* clear the register for future unloads/loads */
|
||||
writel(0, NETXEN_CRB_NORMALIZE(adapter,
|
||||
NETXEN_CAM_RAM(0x1fc)));
|
||||
printk(KERN_ERR "ERROR in NetXen HW init sequence.\n");
|
||||
err = -ENODEV;
|
||||
goto err_out_free_dev;
|
||||
writel(0, NETXEN_CRB_NORMALIZE(adapter,
|
||||
NETXEN_CAM_RAM(0x1fc)));
|
||||
printk(KERN_ERR "ERROR in NetXen HW init sequence.\n");
|
||||
err = -ENODEV;
|
||||
goto err_out_free_dev;
|
||||
}
|
||||
|
||||
/* clear the register for future unloads/loads */
|
||||
writel(0, NETXEN_CRB_NORMALIZE(adapter,
|
||||
NETXEN_CAM_RAM(0x1fc)));
|
||||
}
|
||||
|
||||
/* clear the register for future unloads/loads */
|
||||
writel(0, NETXEN_CRB_NORMALIZE(adapter, NETXEN_CAM_RAM(0x1fc)));
|
||||
printk(KERN_INFO "State: 0x%0x\n",
|
||||
readl(NETXEN_CRB_NORMALIZE(adapter, CRB_CMDPEG_STATE)));
|
||||
|
||||
@ -542,13 +547,6 @@ netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
NETXEN_ROMUSB_GLB_PEGTUNE_DONE));
|
||||
/* Handshake with the card before we register the devices. */
|
||||
netxen_phantom_init(adapter, NETXEN_NIC_PEG_TUNE);
|
||||
|
||||
/* leave the hw in the same state as reboot */
|
||||
writel(0, NETXEN_CRB_NORMALIZE(adapter, CRB_CMDPEG_STATE));
|
||||
netxen_pinit_from_rom(adapter, 0);
|
||||
udelay(500);
|
||||
netxen_load_firmware(adapter);
|
||||
netxen_phantom_init(adapter, NETXEN_NIC_PEG_TUNE);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -639,8 +637,8 @@ static void __devexit netxen_nic_remove(struct pci_dev *pdev)
|
||||
struct netxen_rx_buffer *buffer;
|
||||
struct netxen_recv_context *recv_ctx;
|
||||
struct netxen_rcv_desc_ctx *rcv_desc;
|
||||
int i;
|
||||
int ctxid, ring;
|
||||
int i, ctxid, ring;
|
||||
static int init_firmware_done = 0;
|
||||
|
||||
adapter = pci_get_drvdata(pdev);
|
||||
if (adapter == NULL)
|
||||
@ -648,30 +646,20 @@ static void __devexit netxen_nic_remove(struct pci_dev *pdev)
|
||||
|
||||
netdev = adapter->netdev;
|
||||
|
||||
netxen_nic_disable_int(adapter);
|
||||
if (adapter->irq)
|
||||
free_irq(adapter->irq, adapter);
|
||||
|
||||
unregister_netdev(netdev);
|
||||
|
||||
if (adapter->stop_port)
|
||||
adapter->stop_port(adapter);
|
||||
|
||||
if ((adapter->flags & NETXEN_NIC_MSI_ENABLED))
|
||||
pci_disable_msi(pdev);
|
||||
netxen_nic_disable_int(adapter);
|
||||
|
||||
if (adapter->portnum == 0)
|
||||
netxen_free_adapter_offload(adapter);
|
||||
if (adapter->irq)
|
||||
free_irq(adapter->irq, adapter);
|
||||
|
||||
if(adapter->portnum == 0) {
|
||||
/* leave the hw in the same state as reboot */
|
||||
writel(0, NETXEN_CRB_NORMALIZE(adapter, CRB_CMDPEG_STATE));
|
||||
netxen_pinit_from_rom(adapter, 0);
|
||||
udelay(500);
|
||||
netxen_load_firmware(adapter);
|
||||
netxen_phantom_init(adapter, NETXEN_NIC_PEG_TUNE);
|
||||
}
|
||||
|
||||
if (adapter->is_up == NETXEN_ADAPTER_UP_MAGIC)
|
||||
if (adapter->is_up == NETXEN_ADAPTER_UP_MAGIC) {
|
||||
init_firmware_done++;
|
||||
netxen_free_hw_resources(adapter);
|
||||
}
|
||||
|
||||
for (ctxid = 0; ctxid < MAX_RCV_CTX; ++ctxid) {
|
||||
recv_ctx = &adapter->recv_ctx[ctxid];
|
||||
@ -691,17 +679,73 @@ static void __devexit netxen_nic_remove(struct pci_dev *pdev)
|
||||
}
|
||||
}
|
||||
|
||||
unregister_netdev(netdev);
|
||||
if (adapter->flags & NETXEN_NIC_MSI_ENABLED)
|
||||
pci_disable_msi(pdev);
|
||||
|
||||
vfree(adapter->cmd_buf_arr);
|
||||
|
||||
pci_disable_device(pdev);
|
||||
|
||||
if (adapter->portnum == 0) {
|
||||
if (init_firmware_done) {
|
||||
dma_watchdog_shutdown_request(adapter);
|
||||
msleep(100);
|
||||
i = 100;
|
||||
while ((dma_watchdog_shutdown_poll_result(adapter) != 1) && i) {
|
||||
printk(KERN_INFO "dma_watchdog_shutdown_poll still in progress\n");
|
||||
msleep(100);
|
||||
i--;
|
||||
}
|
||||
|
||||
if (i == 0) {
|
||||
printk(KERN_ERR "dma_watchdog_shutdown_request failed\n");
|
||||
return;
|
||||
}
|
||||
|
||||
/* clear the register for future unloads/loads */
|
||||
writel(0, NETXEN_CRB_NORMALIZE(adapter, NETXEN_CAM_RAM(0x1fc)));
|
||||
printk(KERN_INFO "State: 0x%0x\n",
|
||||
readl(NETXEN_CRB_NORMALIZE(adapter, CRB_CMDPEG_STATE)));
|
||||
|
||||
/* leave the hw in the same state as reboot */
|
||||
writel(0, NETXEN_CRB_NORMALIZE(adapter, CRB_CMDPEG_STATE));
|
||||
if (netxen_pinit_from_rom(adapter, 0))
|
||||
return;
|
||||
msleep(1);
|
||||
if (netxen_load_firmware(adapter))
|
||||
return;
|
||||
netxen_phantom_init(adapter, NETXEN_NIC_PEG_TUNE);
|
||||
}
|
||||
|
||||
/* clear the register for future unloads/loads */
|
||||
writel(0, NETXEN_CRB_NORMALIZE(adapter, NETXEN_CAM_RAM(0x1fc)));
|
||||
printk(KERN_INFO "State: 0x%0x\n",
|
||||
readl(NETXEN_CRB_NORMALIZE(adapter, CRB_CMDPEG_STATE)));
|
||||
|
||||
dma_watchdog_shutdown_request(adapter);
|
||||
msleep(100);
|
||||
i = 100;
|
||||
while ((dma_watchdog_shutdown_poll_result(adapter) != 1) && i) {
|
||||
printk(KERN_INFO "dma_watchdog_shutdown_poll still in progress\n");
|
||||
msleep(100);
|
||||
i--;
|
||||
}
|
||||
|
||||
if (i) {
|
||||
netxen_free_adapter_offload(adapter);
|
||||
} else {
|
||||
printk(KERN_ERR "failed to dma shutdown\n");
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
iounmap(adapter->ahw.db_base);
|
||||
iounmap(adapter->ahw.pci_base0);
|
||||
iounmap(adapter->ahw.pci_base1);
|
||||
iounmap(adapter->ahw.pci_base2);
|
||||
|
||||
pci_release_regions(pdev);
|
||||
pci_disable_device(pdev);
|
||||
pci_set_drvdata(pdev, NULL);
|
||||
|
||||
free_netdev(netdev);
|
||||
@ -798,7 +842,7 @@ static int netxen_nic_close(struct net_device *netdev)
|
||||
if (buffrag->dma) {
|
||||
pci_unmap_single(adapter->pdev, buffrag->dma,
|
||||
buffrag->length, PCI_DMA_TODEVICE);
|
||||
buffrag->dma = (u64) NULL;
|
||||
buffrag->dma = 0ULL;
|
||||
}
|
||||
for (j = 0; j < cmd_buff->frag_count; j++) {
|
||||
buffrag++;
|
||||
@ -806,7 +850,7 @@ static int netxen_nic_close(struct net_device *netdev)
|
||||
pci_unmap_page(adapter->pdev, buffrag->dma,
|
||||
buffrag->length,
|
||||
PCI_DMA_TODEVICE);
|
||||
buffrag->dma = (u64) NULL;
|
||||
buffrag->dma = 0ULL;
|
||||
}
|
||||
}
|
||||
/* Free the skb we received in netxen_nic_xmit_frame */
|
||||
@ -816,8 +860,10 @@ static int netxen_nic_close(struct net_device *netdev)
|
||||
}
|
||||
cmd_buff++;
|
||||
}
|
||||
FLUSH_SCHEDULED_WORK();
|
||||
del_timer_sync(&adapter->watchdog_timer);
|
||||
if (adapter->is_up == NETXEN_ADAPTER_UP_MAGIC) {
|
||||
FLUSH_SCHEDULED_WORK();
|
||||
del_timer_sync(&adapter->watchdog_timer);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -1103,28 +1149,26 @@ static int
|
||||
netxen_handle_int(struct netxen_adapter *adapter, struct net_device *netdev)
|
||||
{
|
||||
u32 ret = 0;
|
||||
u32 our_int = 0;
|
||||
|
||||
DPRINTK(INFO, "Entered handle ISR\n");
|
||||
adapter->stats.ints++;
|
||||
|
||||
if (!(adapter->flags & NETXEN_NIC_MSI_ENABLED)) {
|
||||
int count = 0;
|
||||
u32 mask;
|
||||
u32 our_int = 0;
|
||||
our_int = readl(NETXEN_CRB_NORMALIZE(adapter, CRB_INT_VECTOR));
|
||||
/* not our interrupt */
|
||||
if ((our_int & (0x80 << adapter->portnum)) == 0)
|
||||
return ret;
|
||||
netxen_nic_disable_int(adapter);
|
||||
/* Window = 0 or 1 */
|
||||
do {
|
||||
writel(0xffffffff, PCI_OFFSET_SECOND_RANGE(adapter,
|
||||
ISR_INT_TARGET_STATUS));
|
||||
mask = readl(pci_base_offset(adapter, ISR_INT_VECTOR));
|
||||
} while (((mask & 0x80) != 0) && (++count < 32));
|
||||
if ((mask & 0x80) != 0)
|
||||
printk("Could not disable interrupt completely\n");
|
||||
}
|
||||
|
||||
netxen_nic_disable_int(adapter);
|
||||
|
||||
if (adapter->intr_scheme == INTR_SCHEME_PERPORT) {
|
||||
/* claim interrupt */
|
||||
if (!(adapter->flags & NETXEN_NIC_MSI_ENABLED)) {
|
||||
writel(our_int & ~((u32)(0x80 << adapter->portnum)),
|
||||
NETXEN_CRB_NORMALIZE(adapter, CRB_INT_VECTOR));
|
||||
}
|
||||
}
|
||||
|
||||
if (netxen_nic_rx_has_work(adapter) || netxen_nic_tx_has_work(adapter)) {
|
||||
@ -1136,7 +1180,7 @@ netxen_handle_int(struct netxen_adapter *adapter, struct net_device *netdev)
|
||||
} else {
|
||||
static unsigned int intcount = 0;
|
||||
if ((++intcount & 0xfff) == 0xfff)
|
||||
printk(KERN_ERR
|
||||
DPRINTK(KERN_ERR
|
||||
"%s: %s interrupt %d while in poll\n",
|
||||
netxen_nic_driver_name, netdev->name,
|
||||
intcount);
|
||||
@ -1258,6 +1302,7 @@ static void __exit netxen_exit_module(void)
|
||||
/*
|
||||
* Wait for some time to allow the dma to drain, if any.
|
||||
*/
|
||||
msleep(100);
|
||||
pci_unregister_driver(&netxen_driver);
|
||||
destroy_workqueue(netxen_workq);
|
||||
}
|
||||
|
@ -114,6 +114,20 @@
|
||||
#define CRB_V2P_3 NETXEN_NIC_REG(0x29c)
|
||||
#define CRB_V2P(port) (CRB_V2P_0+((port)*4))
|
||||
#define CRB_DRIVER_VERSION NETXEN_NIC_REG(0x2a0)
|
||||
/* sw int status/mask registers */
|
||||
#define CRB_SW_INT_MASK_0 NETXEN_NIC_REG(0x1d8)
|
||||
#define CRB_SW_INT_MASK_1 NETXEN_NIC_REG(0x1e0)
|
||||
#define CRB_SW_INT_MASK_2 NETXEN_NIC_REG(0x1e4)
|
||||
#define CRB_SW_INT_MASK_3 NETXEN_NIC_REG(0x1e8)
|
||||
|
||||
/*
|
||||
* capabilities register, can be used to selectively enable/disable features
|
||||
* for backward compability
|
||||
*/
|
||||
#define CRB_NIC_CAPABILITIES_HOST NETXEN_NIC_REG(0x1a8)
|
||||
#define CRB_NIC_CAPABILITIES_FW NETXEN_NIC_REG(0x1dc)
|
||||
|
||||
#define INTR_SCHEME_PERPORT 0x1
|
||||
|
||||
/* used for ethtool tests */
|
||||
#define CRB_SCRATCHPAD_TEST NETXEN_NIC_REG(0x280)
|
||||
|
@ -1831,11 +1831,13 @@ static int __devinit ns83820_init_one(struct pci_dev *pci_dev, const struct pci_
|
||||
|
||||
ndev = alloc_etherdev(sizeof(struct ns83820));
|
||||
dev = PRIV(ndev);
|
||||
dev->ndev = ndev;
|
||||
|
||||
err = -ENOMEM;
|
||||
if (!dev)
|
||||
goto out;
|
||||
|
||||
dev->ndev = ndev;
|
||||
|
||||
spin_lock_init(&dev->rx_info.lock);
|
||||
spin_lock_init(&dev->tx_lock);
|
||||
spin_lock_init(&dev->misc_lock);
|
||||
|
@ -629,9 +629,9 @@ static int el3_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
outw(SetTxThreshold + 1536, ioaddr + EL3_CMD);
|
||||
}
|
||||
|
||||
dev_kfree_skb(skb);
|
||||
pop_tx_status(dev);
|
||||
spin_unlock_irqrestore(&priv->lock, flags);
|
||||
dev_kfree_skb(skb);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -19,7 +19,7 @@ menuconfig NET_PCMCIA
|
||||
|
||||
If unsure, say N.
|
||||
|
||||
if NET_PCMCIA
|
||||
if NET_PCMCIA && PCMCIA
|
||||
|
||||
config PCMCIA_3C589
|
||||
tristate "3Com 3c589 PCMCIA support"
|
||||
|
@ -131,7 +131,8 @@ static int mdio_bus_match(struct device *dev, struct device_driver *drv)
|
||||
struct phy_device *phydev = to_phy_device(dev);
|
||||
struct phy_driver *phydrv = to_phy_driver(drv);
|
||||
|
||||
return (phydrv->phy_id == (phydev->phy_id & phydrv->phy_id_mask));
|
||||
return ((phydrv->phy_id & phydrv->phy_id_mask) ==
|
||||
(phydev->phy_id & phydrv->phy_id_mask));
|
||||
}
|
||||
|
||||
/* Suspend and resume. Copied from platform_suspend and
|
||||
|
@ -84,7 +84,7 @@ static int vsc824x_config_intr(struct phy_device *phydev)
|
||||
|
||||
/* Vitesse 824x */
|
||||
static struct phy_driver vsc8244_driver = {
|
||||
.phy_id = 0x000fc6c2,
|
||||
.phy_id = 0x000fc6c0,
|
||||
.name = "Vitesse VSC8244",
|
||||
.phy_id_mask = 0x000fffc0,
|
||||
.features = PHY_GBIT_FEATURES,
|
||||
|
@ -152,7 +152,7 @@ static int full_duplex[MAX_UNITS] = {0, };
|
||||
* This SUCKS.
|
||||
* We need a much better method to determine if dma_addr_t is 64-bit.
|
||||
*/
|
||||
#if (defined(__i386__) && defined(CONFIG_HIGHMEM64G)) || defined(__x86_64__) || defined (__ia64__) || defined(__mips64__) || (defined(__mips__) && defined(CONFIG_HIGHMEM) && defined(CONFIG_64BIT_PHYS_ADDR))
|
||||
#if (defined(__i386__) && defined(CONFIG_HIGHMEM64G)) || defined(__x86_64__) || defined (__ia64__) || defined(__alpha__) || defined(__mips64__) || (defined(__mips__) && defined(CONFIG_HIGHMEM) && defined(CONFIG_64BIT_PHYS_ADDR))
|
||||
/* 64-bit dma_addr_t */
|
||||
#define ADDR_64BITS /* This chip uses 64 bit addresses. */
|
||||
#define netdrv_addr_t u64
|
||||
|
@ -144,14 +144,14 @@ int usbnet_generic_cdc_bind(struct usbnet *dev, struct usb_interface *intf)
|
||||
* modem interface from an RNDIS non-modem.
|
||||
*/
|
||||
if (rndis) {
|
||||
struct usb_cdc_acm_descriptor *d;
|
||||
struct usb_cdc_acm_descriptor *acm;
|
||||
|
||||
d = (void *) buf;
|
||||
if (d->bmCapabilities) {
|
||||
acm = (void *) buf;
|
||||
if (acm->bmCapabilities) {
|
||||
dev_dbg(&intf->dev,
|
||||
"ACM capabilities %02x, "
|
||||
"not really RNDIS?\n",
|
||||
d->bmCapabilities);
|
||||
acm->bmCapabilities);
|
||||
goto bad_desc;
|
||||
}
|
||||
}
|
||||
|
@ -414,18 +414,16 @@ static int dm9601_bind(struct usbnet *dev, struct usb_interface *intf)
|
||||
dev->mii.reg_num_mask = 0x1f;
|
||||
|
||||
/* reset */
|
||||
ret = dm_write_reg(dev, DM_NET_CTRL, 1);
|
||||
dm_write_reg(dev, DM_NET_CTRL, 1);
|
||||
udelay(20);
|
||||
|
||||
/* read MAC */
|
||||
ret = dm_read(dev, DM_PHY_ADDR, ETH_ALEN, dev->net->dev_addr);
|
||||
if (ret < 0) {
|
||||
if (dm_read(dev, DM_PHY_ADDR, ETH_ALEN, dev->net->dev_addr) < 0) {
|
||||
printk(KERN_ERR "Error reading MAC address\n");
|
||||
ret = -ENODEV;
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
||||
/* power up phy */
|
||||
dm_write_reg(dev, DM_GPR_CTRL, 1);
|
||||
dm_write_reg(dev, DM_GPR_DATA, 0);
|
||||
@ -489,6 +487,8 @@ static struct sk_buff *dm9601_tx_fixup(struct usbnet *dev, struct sk_buff *skb,
|
||||
b3..n: packet data
|
||||
*/
|
||||
|
||||
len = skb->len;
|
||||
|
||||
if (skb_headroom(skb) < DM_TX_OVERHEAD) {
|
||||
struct sk_buff *skb2;
|
||||
|
||||
@ -501,10 +501,9 @@ static struct sk_buff *dm9601_tx_fixup(struct usbnet *dev, struct sk_buff *skb,
|
||||
|
||||
__skb_push(skb, DM_TX_OVERHEAD);
|
||||
|
||||
len = skb->len;
|
||||
/* usbnet adds padding if length is a multiple of packet size
|
||||
if so, adjust length value in header */
|
||||
if ((len % dev->maxpacket) == 0)
|
||||
if ((skb->len % dev->maxpacket) == 0)
|
||||
len++;
|
||||
|
||||
skb->data[0] = len;
|
||||
|
@ -953,11 +953,14 @@ static int usbnet_start_xmit (struct sk_buff *skb, struct net_device *net)
|
||||
/* don't assume the hardware handles USB_ZERO_PACKET
|
||||
* NOTE: strictly conforming cdc-ether devices should expect
|
||||
* the ZLP here, but ignore the one-byte packet.
|
||||
*
|
||||
* FIXME zero that byte, if it doesn't require a new skb.
|
||||
*/
|
||||
if ((length % dev->maxpacket) == 0)
|
||||
if ((length % dev->maxpacket) == 0) {
|
||||
urb->transfer_buffer_length++;
|
||||
if (skb_tailroom(skb)) {
|
||||
skb->data[skb->len] = 0;
|
||||
__skb_put(skb, 1);
|
||||
}
|
||||
}
|
||||
|
||||
spin_lock_irqsave (&dev->txq.lock, flags);
|
||||
|
||||
|
@ -2,7 +2,7 @@ libertas-objs := main.o fw.o wext.o \
|
||||
rx.o tx.o cmd.o \
|
||||
cmdresp.o scan.o \
|
||||
join.o 11d.o \
|
||||
ioctl.o debugfs.o \
|
||||
debugfs.o \
|
||||
ethtool.o assoc.o
|
||||
|
||||
usb8xxx-objs += if_bootcmd.o
|
||||
|
@ -28,281 +28,6 @@ DRIVER LOADING
|
||||
|
||||
insmod usb8388.ko [fw_name=usb8388.bin]
|
||||
|
||||
=====================
|
||||
IWPRIV COMMAND
|
||||
=====================
|
||||
|
||||
NAME
|
||||
This manual describes the usage of private commands used in Marvell WLAN
|
||||
Linux Driver. All the commands available in Wlanconfig will not be available
|
||||
in the iwpriv.
|
||||
|
||||
SYNOPSIS
|
||||
iwpriv <ethX> <command> [sub-command] ...
|
||||
|
||||
iwpriv ethX setregioncode <n>
|
||||
iwpriv ethX getregioncode
|
||||
|
||||
Version 5 Command:
|
||||
iwpriv ethX ledgpio <n>
|
||||
|
||||
BT Commands:
|
||||
The blinding table (BT) contains a list of mac addresses that will be,
|
||||
by default, ignored by the firmware. It is also possible to invert this
|
||||
behavior so that we will ignore all traffic except for the portion
|
||||
coming from mac addresess in the list. It is primarily used for
|
||||
debugging and testing networks. It can be edited and inspected with
|
||||
the following commands:
|
||||
|
||||
iwpriv ethX bt_reset
|
||||
iwpriv ethX bt_add <mac_address>
|
||||
iwpriv ethX bt_del <mac_address>
|
||||
iwpriv ethX bt_list <id>
|
||||
iwpriv ethX bt_get_invert <n>
|
||||
iwpriv ethX bt_set_invert <n>
|
||||
|
||||
FWT Commands:
|
||||
The forwarding table (FWT) is a feature used to manage mesh network
|
||||
routing in the firmware. The FWT is essentially a routing table that
|
||||
associates a destination mac address (da) with a next hop receiver
|
||||
address (ra). The FWT can be inspected and edited with the following
|
||||
iwpriv commands, which are described in greater detail below.
|
||||
Eventually, the table will be automatically maintained by a custom
|
||||
routing protocol.
|
||||
|
||||
NOTE: FWT commands replace the previous DFT commands. What were the DFT
|
||||
commands?, you might ask. They were an earlier API to the firmware that
|
||||
implemented a simple MAC-layer forwarding mechanism. In the unlikely
|
||||
event that you were using these commands, you must migrate to the new
|
||||
FWT commands which can be used to achieve the same functionality.
|
||||
|
||||
iwpriv ethX fwt_add [parameters]
|
||||
iwpriv ethX fwt_del [parameters]
|
||||
iwpriv ethX fwt_lookup [parameters]
|
||||
iwpriv ethX fwt_list [parameters]
|
||||
iwpriv ethX fwt_list_route [parameters]
|
||||
iwpriv ethX fwt_list_neigh [parameters]
|
||||
iwpriv ethX fwt_reset [parameters]
|
||||
iwpriv ethX fwt_cleanup
|
||||
iwpriv ethX fwt_time
|
||||
|
||||
MESH Commands:
|
||||
|
||||
The MESH commands are used to configure various features of the mesh
|
||||
routing protocol. The following commands are supported:
|
||||
|
||||
iwpriv ethX mesh_get_ttl
|
||||
iwpriv ethX mesh_set_ttl ttl
|
||||
|
||||
DESCRIPTION
|
||||
Those commands are used to send additional commands to the Marvell WLAN
|
||||
card via the Linux device driver.
|
||||
|
||||
The ethX parameter specifies the network device that is to be used to
|
||||
perform this command on. it could be eth0, eth1 etc.
|
||||
|
||||
setregioncode
|
||||
This command is used to set the region code in the station.
|
||||
where value is 'region code' for various regions like
|
||||
USA FCC, Canada IC, Spain, France, Europe ETSI, Japan ...
|
||||
|
||||
Usage:
|
||||
iwpriv ethX setregioncode 0x10: set region code to USA (0x10).
|
||||
|
||||
getregioncode
|
||||
This command is used to get the region code information set in the
|
||||
station.
|
||||
|
||||
ledgpio
|
||||
This command is used to set/get LEDs.
|
||||
|
||||
iwpriv ethX ledgpio <LEDs>
|
||||
will set the corresponding LED for the GPIO Line.
|
||||
|
||||
iwpriv ethX ledgpio
|
||||
will give u which LEDs are Enabled.
|
||||
|
||||
Usage:
|
||||
iwpriv eth1 ledgpio 1 0 2 1 3 4
|
||||
will enable
|
||||
LED 1 -> GPIO 0
|
||||
LED 2 -> GPIO 1
|
||||
LED 3 -> GPIO 4
|
||||
|
||||
iwpriv eth1 ledgpio
|
||||
shows LED information in the format as mentioned above.
|
||||
|
||||
Note: LED0 is invalid
|
||||
Note: Maximum Number of LEDs are 16.
|
||||
|
||||
fwt_add
|
||||
This command is used to insert an entry into the FWT table. The list of
|
||||
parameters must follow the following structure:
|
||||
|
||||
iwpriv ethX fwt_add da ra [metric dir rate ssn dsn hopcount ttl expiration sleepmode snr]
|
||||
|
||||
The parameters between brackets are optional, but they must appear in
|
||||
the order specified. For example, if you want to specify the metric,
|
||||
you must also specify the dir, ssn, and dsn but you need not specify the
|
||||
hopcount, expiration, sleepmode, or snr. Any unspecified parameters
|
||||
will be assigned the defaults specified below.
|
||||
|
||||
The different parameters are:-
|
||||
da -- DA MAC address in the form 00:11:22:33:44:55
|
||||
ra -- RA MAC address in the form 00:11:22:33:44:55
|
||||
metric -- route metric (cost: smaller-metric routes are
|
||||
preferred, default is 0)
|
||||
dir -- direction (1 for direct, 0 for reverse,
|
||||
default is 1)
|
||||
rate -- data rate used for transmission to the RA,
|
||||
as specified for the rateadapt command,
|
||||
default is 3 (11Mbps)
|
||||
ssn -- Source Sequence Number (time at the RA for
|
||||
reverse routes. Default is 0)
|
||||
dsn -- Destination Sequence Number (time at the DA
|
||||
for direct routes. Default is 0)
|
||||
hopcount -- hop count (currently unused, default is 0)
|
||||
ttl -- TTL (Only used in reverse entries)
|
||||
expiration -- entry expiration (in ticks, where a tick is
|
||||
1024us, or ~ 1ms. Use 0 for an indefinite
|
||||
entry, default is 0)
|
||||
sleepmode -- RA's sleep mode (currently unused, default is
|
||||
0)
|
||||
snr -- SNR in the link to RA (currently unused,
|
||||
default is 0)
|
||||
|
||||
The command does not return anything.
|
||||
|
||||
fwt_del
|
||||
This command is used to remove an entry to the FWT table. The list of
|
||||
parameters must follow the following structure:
|
||||
|
||||
iwpriv ethX fwt_del da ra [dir]
|
||||
|
||||
where the different parameters are:-
|
||||
da -- DA MAC address (in the form "00:11:22:33:44:55")
|
||||
ra -- RA MAC address (in the form "00:11:22:33:44:55")
|
||||
dir -- direction (1 for direct, 0 for reverse,
|
||||
default is 1)
|
||||
|
||||
The command does not return anything.
|
||||
|
||||
fwt_lookup
|
||||
This command is used to get the best route in the FWT table to a given
|
||||
host. The only parameter is the MAC address of the host that is being
|
||||
looked for.
|
||||
|
||||
iwpriv ethX fwt_lookup da
|
||||
|
||||
where:-
|
||||
da -- DA MAC address (in the form "00:11:22:33:44:55")
|
||||
|
||||
The command returns an output string identical to the one returned by
|
||||
fwt_list described below.
|
||||
|
||||
|
||||
fwt_list
|
||||
This command is used to list a route from the FWT table. The only
|
||||
parameter is the index into the table. If you want to list all the
|
||||
routes in a table, start with index=0, and keep listing until you get a
|
||||
"(null)" string. Note that the indicies may change as the fwt is
|
||||
updated. It is expected that most users will not use fwt_list directly,
|
||||
but that a utility similar to the traditional route command will be used
|
||||
to invoke fwt_list over and over.
|
||||
|
||||
iwpriv ethX fwt_list index
|
||||
|
||||
The output is a string of the following form:
|
||||
|
||||
da ra valid metric dir rate ssn dsn hopcount ttl expiration
|
||||
sleepmode snr precursor
|
||||
|
||||
where the different fields are:-
|
||||
da -- DA MAC address (in the form "00:11:22:33:44:55")
|
||||
ra -- RA MAC address (in the form "00:11:22:33:44:55")
|
||||
valid -- whether the route is valid (0 if not valid)
|
||||
metric -- route metric (cost: smaller-metric routes are preferred)
|
||||
dir -- direction (1 for direct, 0 for reverse)
|
||||
rate -- data rate used for transmission to the RA,
|
||||
as specified for the rateadapt command
|
||||
ssn -- Source Sequence Number (time at the RA for reverse routes)
|
||||
dsn -- Destination Sequence Number (time at the DA for direct routes)
|
||||
hopcount -- hop count (currently unused)
|
||||
ttl -- TTL (only used in reverse entries)
|
||||
expiration -- entry expiration (in ticks, where a tick is 1024us, or ~ 1ms. Use 0 for an indefinite entry)
|
||||
sleepmode -- RA's sleep mode (currently unused)
|
||||
snr -- SNR in the link to RA (currently unused)
|
||||
precursor -- predecessor in direct routes
|
||||
|
||||
fwt_list_route
|
||||
This command is equivalent to fwt_list.
|
||||
|
||||
fwt_list_neigh
|
||||
This command is used to list a neighbor from the FWT table. The only
|
||||
parameter is the neighbor ID. If you want to list all the neighbors in a
|
||||
table, start with nid=0, and keep incrementing nid until you get a
|
||||
"(null)" string. Note that the nid from a fwt_list_route command can be
|
||||
used as an input to this command. Also note that this command is meant
|
||||
mostly for debugging. It is expected that users will use fwt_lookup.
|
||||
One important reason for this is that the neighbor id may change as the
|
||||
neighbor table is altered.
|
||||
|
||||
iwpriv ethX fwt_list_neigh nid
|
||||
|
||||
The output is a string of the following form:
|
||||
|
||||
ra sleepmode snr references
|
||||
|
||||
where the different fields are:-
|
||||
ra -- RA MAC address (in the form "00:11:22:33:44:55")
|
||||
sleepmode -- RA's sleep mode (currently unused)
|
||||
snr -- SNR in the link to RA (currently unused)
|
||||
references -- RA's reference counter
|
||||
|
||||
fwt_reset
|
||||
This command is used to reset the FWT table, getting rid of all the
|
||||
entries. There are no input parameters.
|
||||
|
||||
iwpriv ethX fwt_reset
|
||||
|
||||
The command does not return anything.
|
||||
|
||||
fwt_cleanup
|
||||
This command is used to perform user-based garbage recollection. The
|
||||
FWT table is checked, and all the entries that are expired or invalid
|
||||
are cleaned. Note that this is exported to the driver for debugging
|
||||
purposes, as garbage collection is also fired by the firmware when in
|
||||
space problems. There are no input parameters.
|
||||
|
||||
iwpriv ethX fwt_cleanup
|
||||
|
||||
The command does returns the number of invalid/expired routes deleted.
|
||||
|
||||
fwt_time
|
||||
This command returns a card's internal time representation. It is this
|
||||
time that is used to represent the expiration times of FWT entries. The
|
||||
number is not consistent from card to card; it is simply a timer count.
|
||||
The fwt_time command is used to inspect the timer so that expiration
|
||||
times reported by fwt_list can be properly interpreted.
|
||||
|
||||
iwpriv ethX fwt_time
|
||||
|
||||
mesh_get_ttl
|
||||
|
||||
The mesh ttl is the number of hops a mesh packet can traverse before it
|
||||
is dropped. This parameter is used to prevent infinite loops in the
|
||||
mesh network. The value returned by this function is the ttl assigned
|
||||
to all mesh packets. Currently there is no way to control the ttl on a
|
||||
per packet or per socket basis.
|
||||
|
||||
iwpriv ethX mesh_get_ttl
|
||||
|
||||
mesh_set_ttl ttl
|
||||
|
||||
Set the ttl. The argument must be between 0 and 255.
|
||||
|
||||
iwpriv ethX mesh_set_ttl <ttl>
|
||||
|
||||
=========================
|
||||
ETHTOOL
|
||||
=========================
|
||||
|
@ -323,6 +323,8 @@ static int assoc_helper_secinfo(wlan_private *priv,
|
||||
{
|
||||
wlan_adapter *adapter = priv->adapter;
|
||||
int ret = 0;
|
||||
u32 do_wpa;
|
||||
u32 rsn = 0;
|
||||
|
||||
lbs_deb_enter(LBS_DEB_ASSOC);
|
||||
|
||||
@ -333,12 +335,34 @@ static int assoc_helper_secinfo(wlan_private *priv,
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
/* enable/disable RSN */
|
||||
/* If RSN is already enabled, don't try to enable it again, since
|
||||
* ENABLE_RSN resets internal state machines and will clobber the
|
||||
* 4-way WPA handshake.
|
||||
*/
|
||||
|
||||
/* Get RSN enabled/disabled */
|
||||
ret = libertas_prepare_and_send_command(priv,
|
||||
cmd_802_11_enable_rsn,
|
||||
cmd_act_set,
|
||||
cmd_option_waitforrsp,
|
||||
0, assoc_req);
|
||||
0, &rsn);
|
||||
if (ret) {
|
||||
lbs_deb_assoc("Failed to get RSN status: %d", ret);
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Don't re-enable RSN if it's already enabled */
|
||||
do_wpa = (assoc_req->secinfo.WPAenabled || assoc_req->secinfo.WPA2enabled);
|
||||
if (do_wpa == rsn)
|
||||
goto out;
|
||||
|
||||
/* Set RSN enabled/disabled */
|
||||
rsn = do_wpa;
|
||||
ret = libertas_prepare_and_send_command(priv,
|
||||
cmd_802_11_enable_rsn,
|
||||
cmd_act_set,
|
||||
cmd_option_waitforrsp,
|
||||
0, &rsn);
|
||||
|
||||
out:
|
||||
lbs_deb_leave_args(LBS_DEB_ASSOC, "ret %d", ret);
|
||||
|
@ -228,17 +228,19 @@ static int wlan_cmd_802_11_enable_rsn(wlan_private * priv,
|
||||
void * pdata_buf)
|
||||
{
|
||||
struct cmd_ds_802_11_enable_rsn *penableRSN = &cmd->params.enbrsn;
|
||||
struct assoc_request * assoc_req = pdata_buf;
|
||||
u32 * enable = pdata_buf;
|
||||
|
||||
lbs_deb_enter(LBS_DEB_CMD);
|
||||
|
||||
cmd->command = cpu_to_le16(cmd_802_11_enable_rsn);
|
||||
cmd->size = cpu_to_le16(sizeof(*penableRSN) + S_DS_GEN);
|
||||
penableRSN->action = cpu_to_le16(cmd_action);
|
||||
if (assoc_req->secinfo.WPAenabled || assoc_req->secinfo.WPA2enabled) {
|
||||
penableRSN->enable = cpu_to_le16(cmd_enable_rsn);
|
||||
} else {
|
||||
penableRSN->enable = cpu_to_le16(cmd_disable_rsn);
|
||||
|
||||
if (cmd_action == cmd_act_set) {
|
||||
if (*enable)
|
||||
penableRSN->enable = cpu_to_le16(cmd_enable_rsn);
|
||||
else
|
||||
penableRSN->enable = cpu_to_le16(cmd_enable_rsn);
|
||||
}
|
||||
|
||||
lbs_deb_leave(LBS_DEB_CMD);
|
||||
|
@ -537,6 +537,24 @@ static int wlan_ret_get_log(wlan_private * priv,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int libertas_ret_802_11_enable_rsn(wlan_private * priv,
|
||||
struct cmd_ds_command *resp)
|
||||
{
|
||||
struct cmd_ds_802_11_enable_rsn *enable_rsn = &resp->params.enbrsn;
|
||||
wlan_adapter *adapter = priv->adapter;
|
||||
u32 * pdata_buf = adapter->cur_cmd->pdata_buf;
|
||||
|
||||
lbs_deb_enter(LBS_DEB_CMD);
|
||||
|
||||
if (enable_rsn->action == cpu_to_le16(cmd_act_get)) {
|
||||
if (pdata_buf)
|
||||
*pdata_buf = (u32) le16_to_cpu(enable_rsn->enable);
|
||||
}
|
||||
|
||||
lbs_deb_enter(LBS_DEB_CMD);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int handle_cmd_response(u16 respcmd,
|
||||
struct cmd_ds_command *resp,
|
||||
wlan_private *priv)
|
||||
@ -610,7 +628,10 @@ static inline int handle_cmd_response(u16 respcmd,
|
||||
case cmd_ret_802_11_authenticate:
|
||||
case cmd_ret_802_11_radio_control:
|
||||
case cmd_ret_802_11_beacon_stop:
|
||||
break;
|
||||
|
||||
case cmd_ret_802_11_enable_rsn:
|
||||
ret = libertas_ret_802_11_enable_rsn(priv, resp);
|
||||
break;
|
||||
|
||||
case cmd_ret_802_11_data_rate:
|
||||
|
@ -503,7 +503,7 @@ struct cmd_ds_802_11_ad_hoc_join {
|
||||
struct cmd_ds_802_11_enable_rsn {
|
||||
__le16 action;
|
||||
__le16 enable;
|
||||
};
|
||||
} __attribute__ ((packed));
|
||||
|
||||
struct MrvlIEtype_keyParamSet {
|
||||
/* type ID */
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -181,7 +181,8 @@ u16 libertas_region_code_to_index[MRVDRV_MAX_REGION_CODE] =
|
||||
* @brief Get function for sysfs attribute anycast_mask
|
||||
*/
|
||||
static ssize_t libertas_anycast_get(struct device * dev,
|
||||
struct device_attribute *attr, char * buf) {
|
||||
struct device_attribute *attr, char * buf)
|
||||
{
|
||||
struct cmd_ds_mesh_access mesh_access;
|
||||
|
||||
memset(&mesh_access, 0, sizeof(mesh_access));
|
||||
@ -197,7 +198,8 @@ static ssize_t libertas_anycast_get(struct device * dev,
|
||||
* @brief Set function for sysfs attribute anycast_mask
|
||||
*/
|
||||
static ssize_t libertas_anycast_set(struct device * dev,
|
||||
struct device_attribute *attr, const char * buf, size_t count) {
|
||||
struct device_attribute *attr, const char * buf, size_t count)
|
||||
{
|
||||
struct cmd_ds_mesh_access mesh_access;
|
||||
uint32_t datum;
|
||||
|
||||
@ -799,7 +801,6 @@ wlan_private *libertas_add_card(void *card, struct device *dmdev)
|
||||
dev->open = wlan_open;
|
||||
dev->hard_start_xmit = wlan_pre_start_xmit;
|
||||
dev->stop = wlan_close;
|
||||
dev->do_ioctl = libertas_do_ioctl;
|
||||
dev->set_mac_address = wlan_set_mac_address;
|
||||
dev->tx_timeout = wlan_tx_timeout;
|
||||
dev->get_stats = wlan_get_stats;
|
||||
@ -918,7 +919,6 @@ int libertas_add_mesh(wlan_private *priv, struct device *dev)
|
||||
mesh_dev->open = mesh_open;
|
||||
mesh_dev->hard_start_xmit = mesh_pre_start_xmit;
|
||||
mesh_dev->stop = mesh_close;
|
||||
mesh_dev->do_ioctl = libertas_do_ioctl;
|
||||
mesh_dev->get_stats = wlan_get_stats;
|
||||
mesh_dev->set_mac_address = wlan_set_mac_address;
|
||||
mesh_dev->ethtool_ops = &libertas_ethtool_ops;
|
||||
|
@ -214,38 +214,6 @@ done:
|
||||
return matched;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Post process the scan table after a new scan command has completed
|
||||
*
|
||||
* Inspect each entry of the scan table and try to find an entry that
|
||||
* matches our current associated/joined network from the scan. If
|
||||
* one is found, update the stored copy of the bssdescriptor for our
|
||||
* current network.
|
||||
*
|
||||
* Debug dump the current scan table contents if compiled accordingly.
|
||||
*
|
||||
* @param priv A pointer to wlan_private structure
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
static void wlan_scan_process_results(wlan_private * priv)
|
||||
{
|
||||
wlan_adapter *adapter = priv->adapter;
|
||||
struct bss_descriptor * iter_bss;
|
||||
int i = 0;
|
||||
|
||||
if (adapter->connect_status == libertas_connected)
|
||||
return;
|
||||
|
||||
mutex_lock(&adapter->lock);
|
||||
list_for_each_entry (iter_bss, &adapter->network_list, list) {
|
||||
lbs_deb_scan("Scan:(%02d) " MAC_FMT ", RSSI[%03d], SSID[%s]\n",
|
||||
i++, MAC_ARG(iter_bss->bssid), (s32) iter_bss->rssi,
|
||||
escape_essid(iter_bss->ssid, iter_bss->ssid_len));
|
||||
}
|
||||
mutex_unlock(&adapter->lock);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Create a channel list for the driver to scan based on region info
|
||||
*
|
||||
@ -791,6 +759,10 @@ int wlan_scan_networks(wlan_private * priv,
|
||||
u8 scancurrentchanonly;
|
||||
int maxchanperscan;
|
||||
int ret;
|
||||
#ifdef CONFIG_LIBERTAS_DEBUG
|
||||
struct bss_descriptor * iter_bss;
|
||||
int i = 0;
|
||||
#endif
|
||||
|
||||
lbs_deb_enter(LBS_DEB_ASSOC);
|
||||
|
||||
@ -832,11 +804,16 @@ int wlan_scan_networks(wlan_private * priv,
|
||||
puserscanin,
|
||||
full_scan);
|
||||
|
||||
/* Process the resulting scan table:
|
||||
* - Remove any bad ssids
|
||||
* - Update our current BSS information from scan data
|
||||
*/
|
||||
wlan_scan_process_results(priv);
|
||||
#ifdef CONFIG_LIBERTAS_DEBUG
|
||||
/* Dump the scan table */
|
||||
mutex_lock(&adapter->lock);
|
||||
list_for_each_entry (iter_bss, &adapter->network_list, list) {
|
||||
lbs_deb_scan("Scan:(%02d) " MAC_FMT ", RSSI[%03d], SSID[%s]\n",
|
||||
i++, MAC_ARG(iter_bss->bssid), (s32) iter_bss->rssi,
|
||||
escape_essid(iter_bss->ssid, iter_bss->ssid_len));
|
||||
}
|
||||
mutex_unlock(&adapter->lock);
|
||||
#endif
|
||||
|
||||
if (priv->adapter->connect_status == libertas_connected) {
|
||||
netif_carrier_on(priv->dev);
|
||||
|
@ -913,148 +913,6 @@ out:
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* iwpriv settable callbacks
|
||||
*/
|
||||
|
||||
static const iw_handler wlan_private_handler[] = {
|
||||
NULL, /* SIOCIWFIRSTPRIV */
|
||||
};
|
||||
|
||||
static const struct iw_priv_args wlan_private_args[] = {
|
||||
/*
|
||||
* { cmd, set_args, get_args, name }
|
||||
*/
|
||||
/* Using iwpriv sub-command feature */
|
||||
{
|
||||
WLAN_SETONEINT_GETNONE, /* IOCTL: 24 */
|
||||
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
|
||||
IW_PRIV_TYPE_NONE,
|
||||
""},
|
||||
{
|
||||
WLANSETREGION,
|
||||
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
|
||||
IW_PRIV_TYPE_NONE,
|
||||
"setregioncode"},
|
||||
{
|
||||
WLAN_SUBCMD_MESH_SET_TTL,
|
||||
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
|
||||
IW_PRIV_TYPE_NONE,
|
||||
"mesh_set_ttl"},
|
||||
{
|
||||
WLAN_SETNONE_GETONEINT,
|
||||
IW_PRIV_TYPE_NONE,
|
||||
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
|
||||
""},
|
||||
{
|
||||
WLANGETREGION,
|
||||
IW_PRIV_TYPE_NONE,
|
||||
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
|
||||
"getregioncode"},
|
||||
{
|
||||
WLAN_SUBCMD_FWT_CLEANUP,
|
||||
IW_PRIV_TYPE_NONE,
|
||||
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
|
||||
"fwt_cleanup"},
|
||||
{
|
||||
WLAN_SUBCMD_FWT_TIME,
|
||||
IW_PRIV_TYPE_NONE,
|
||||
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
|
||||
"fwt_time"},
|
||||
{
|
||||
WLAN_SUBCMD_MESH_GET_TTL,
|
||||
IW_PRIV_TYPE_NONE,
|
||||
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
|
||||
"mesh_get_ttl"},
|
||||
{
|
||||
WLAN_SETNONE_GETNONE,
|
||||
IW_PRIV_TYPE_NONE,
|
||||
IW_PRIV_TYPE_NONE,
|
||||
""},
|
||||
{
|
||||
WLAN_SUBCMD_FWT_RESET,
|
||||
IW_PRIV_TYPE_NONE,
|
||||
IW_PRIV_TYPE_NONE,
|
||||
"fwt_reset"},
|
||||
{
|
||||
WLAN_SUBCMD_BT_RESET,
|
||||
IW_PRIV_TYPE_NONE,
|
||||
IW_PRIV_TYPE_NONE,
|
||||
"bt_reset"},
|
||||
{
|
||||
WLAN_SET128CHAR_GET128CHAR,
|
||||
IW_PRIV_TYPE_CHAR | 128,
|
||||
IW_PRIV_TYPE_CHAR | 128,
|
||||
""},
|
||||
/* BT Management */
|
||||
{
|
||||
WLAN_SUBCMD_BT_ADD,
|
||||
IW_PRIV_TYPE_CHAR | 128,
|
||||
IW_PRIV_TYPE_CHAR | 128,
|
||||
"bt_add"},
|
||||
{
|
||||
WLAN_SUBCMD_BT_DEL,
|
||||
IW_PRIV_TYPE_CHAR | 128,
|
||||
IW_PRIV_TYPE_CHAR | 128,
|
||||
"bt_del"},
|
||||
{
|
||||
WLAN_SUBCMD_BT_LIST,
|
||||
IW_PRIV_TYPE_CHAR | 128,
|
||||
IW_PRIV_TYPE_CHAR | 128,
|
||||
"bt_list"},
|
||||
{
|
||||
WLAN_SUBCMD_BT_SET_INVERT,
|
||||
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
|
||||
IW_PRIV_TYPE_NONE,
|
||||
"bt_set_invert"},
|
||||
{
|
||||
WLAN_SUBCMD_BT_GET_INVERT,
|
||||
IW_PRIV_TYPE_NONE,
|
||||
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
|
||||
"bt_get_invert"},
|
||||
/* FWT Management */
|
||||
{
|
||||
WLAN_SUBCMD_FWT_ADD,
|
||||
IW_PRIV_TYPE_CHAR | 128,
|
||||
IW_PRIV_TYPE_CHAR | 128,
|
||||
"fwt_add"},
|
||||
{
|
||||
WLAN_SUBCMD_FWT_DEL,
|
||||
IW_PRIV_TYPE_CHAR | 128,
|
||||
IW_PRIV_TYPE_CHAR | 128,
|
||||
"fwt_del"},
|
||||
{
|
||||
WLAN_SUBCMD_FWT_LOOKUP,
|
||||
IW_PRIV_TYPE_CHAR | 128,
|
||||
IW_PRIV_TYPE_CHAR | 128,
|
||||
"fwt_lookup"},
|
||||
{
|
||||
WLAN_SUBCMD_FWT_LIST_NEIGHBOR,
|
||||
IW_PRIV_TYPE_CHAR | 128,
|
||||
IW_PRIV_TYPE_CHAR | 128,
|
||||
"fwt_list_neigh"},
|
||||
{
|
||||
WLAN_SUBCMD_FWT_LIST,
|
||||
IW_PRIV_TYPE_CHAR | 128,
|
||||
IW_PRIV_TYPE_CHAR | 128,
|
||||
"fwt_list"},
|
||||
{
|
||||
WLAN_SUBCMD_FWT_LIST_ROUTE,
|
||||
IW_PRIV_TYPE_CHAR | 128,
|
||||
IW_PRIV_TYPE_CHAR | 128,
|
||||
"fwt_list_route"},
|
||||
{
|
||||
WLAN_SET_GET_SIXTEEN_INT,
|
||||
IW_PRIV_TYPE_INT | 16,
|
||||
IW_PRIV_TYPE_INT | 16,
|
||||
""},
|
||||
{
|
||||
WLAN_LED_GPIO_CTRL,
|
||||
IW_PRIV_TYPE_INT | 16,
|
||||
IW_PRIV_TYPE_INT | 16,
|
||||
"ledgpio"},
|
||||
};
|
||||
|
||||
static struct iw_statistics *wlan_get_wireless_stats(struct net_device *dev)
|
||||
{
|
||||
enum {
|
||||
@ -2444,22 +2302,12 @@ static const iw_handler mesh_wlan_handler[] = {
|
||||
};
|
||||
struct iw_handler_def libertas_handler_def = {
|
||||
.num_standard = sizeof(wlan_handler) / sizeof(iw_handler),
|
||||
.num_private = sizeof(wlan_private_handler) / sizeof(iw_handler),
|
||||
.num_private_args = sizeof(wlan_private_args) /
|
||||
sizeof(struct iw_priv_args),
|
||||
.standard = (iw_handler *) wlan_handler,
|
||||
.private = (iw_handler *) wlan_private_handler,
|
||||
.private_args = (struct iw_priv_args *)wlan_private_args,
|
||||
.get_wireless_stats = wlan_get_wireless_stats,
|
||||
};
|
||||
|
||||
struct iw_handler_def mesh_handler_def = {
|
||||
.num_standard = sizeof(mesh_wlan_handler) / sizeof(iw_handler),
|
||||
.num_private = sizeof(wlan_private_handler) / sizeof(iw_handler),
|
||||
.num_private_args = sizeof(wlan_private_args) /
|
||||
sizeof(struct iw_priv_args),
|
||||
.standard = (iw_handler *) mesh_wlan_handler,
|
||||
.private = (iw_handler *) wlan_private_handler,
|
||||
.private_args = (struct iw_priv_args *)wlan_private_args,
|
||||
.get_wireless_stats = wlan_get_wireless_stats,
|
||||
};
|
||||
|
@ -7,45 +7,6 @@
|
||||
#define SUBCMD_OFFSET 4
|
||||
#define SUBCMD_DATA(x) *((int *)(x->u.name + SUBCMD_OFFSET))
|
||||
|
||||
/** PRIVATE CMD ID */
|
||||
#define WLANIOCTL SIOCIWFIRSTPRIV
|
||||
|
||||
#define WLAN_SETNONE_GETNONE (WLANIOCTL + 8)
|
||||
#define WLAN_SUBCMD_BT_RESET 13
|
||||
#define WLAN_SUBCMD_FWT_RESET 14
|
||||
|
||||
#define WLAN_SETNONE_GETONEINT (WLANIOCTL + 15)
|
||||
#define WLANGETREGION 1
|
||||
|
||||
#define WLAN_SUBCMD_FWT_CLEANUP 15
|
||||
#define WLAN_SUBCMD_FWT_TIME 16
|
||||
#define WLAN_SUBCMD_MESH_GET_TTL 17
|
||||
#define WLAN_SUBCMD_BT_GET_INVERT 18
|
||||
|
||||
#define WLAN_SETONEINT_GETNONE (WLANIOCTL + 24)
|
||||
#define WLANSETREGION 8
|
||||
#define WLAN_SUBCMD_MESH_SET_TTL 18
|
||||
#define WLAN_SUBCMD_BT_SET_INVERT 19
|
||||
|
||||
#define WLAN_SET128CHAR_GET128CHAR (WLANIOCTL + 25)
|
||||
#define WLAN_SUBCMD_BT_ADD 18
|
||||
#define WLAN_SUBCMD_BT_DEL 19
|
||||
#define WLAN_SUBCMD_BT_LIST 20
|
||||
#define WLAN_SUBCMD_FWT_ADD 21
|
||||
#define WLAN_SUBCMD_FWT_DEL 22
|
||||
#define WLAN_SUBCMD_FWT_LOOKUP 23
|
||||
#define WLAN_SUBCMD_FWT_LIST_NEIGHBOR 24
|
||||
#define WLAN_SUBCMD_FWT_LIST 25
|
||||
#define WLAN_SUBCMD_FWT_LIST_ROUTE 26
|
||||
|
||||
#define WLAN_SET_GET_SIXTEEN_INT (WLANIOCTL + 29)
|
||||
#define WLAN_LED_GPIO_CTRL 5
|
||||
|
||||
#define WLAN_LINKMODE_802_3 0
|
||||
#define WLAN_LINKMODE_802_11 2
|
||||
#define WLAN_RADIOMODE_NONE 0
|
||||
#define WLAN_RADIOMODE_RADIOTAP 2
|
||||
|
||||
/** wlan_ioctl_regrdwr */
|
||||
struct wlan_ioctl_regrdwr {
|
||||
/** Which register to access */
|
||||
@ -57,9 +18,13 @@ struct wlan_ioctl_regrdwr {
|
||||
u32 value;
|
||||
};
|
||||
|
||||
#define WLAN_LINKMODE_802_3 0
|
||||
#define WLAN_LINKMODE_802_11 2
|
||||
#define WLAN_RADIOMODE_NONE 0
|
||||
#define WLAN_RADIOMODE_RADIOTAP 2
|
||||
|
||||
extern struct iw_handler_def libertas_handler_def;
|
||||
extern struct iw_handler_def mesh_handler_def;
|
||||
int libertas_do_ioctl(struct net_device *dev, struct ifreq *req, int i);
|
||||
int wlan_radio_ioctl(wlan_private * priv, u8 option);
|
||||
|
||||
#endif /* _WLAN_WEXT_H_ */
|
||||
|
@ -107,31 +107,61 @@ static void quirk_sb16audio_resources(struct pnp_dev *dev)
|
||||
return;
|
||||
}
|
||||
|
||||
static int quirk_smc_fir_enabled(struct pnp_dev *dev)
|
||||
{
|
||||
unsigned long firbase;
|
||||
u8 bank, high, low, chip;
|
||||
|
||||
if (!pnp_port_valid(dev, 1))
|
||||
return 0;
|
||||
|
||||
firbase = pnp_port_start(dev, 1);
|
||||
|
||||
/* Select register bank 3 */
|
||||
bank = inb(firbase + 7);
|
||||
bank &= 0xf0;
|
||||
bank |= 3;
|
||||
outb(bank, firbase + 7);
|
||||
|
||||
high = inb(firbase + 0);
|
||||
low = inb(firbase + 1);
|
||||
chip = inb(firbase + 2);
|
||||
|
||||
/* This corresponds to the check in smsc_ircc_present() */
|
||||
if (high == 0x10 && low == 0xb8 && (chip == 0xf1 || chip == 0xf2))
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void quirk_smc_enable(struct pnp_dev *dev)
|
||||
{
|
||||
unsigned int firbase;
|
||||
|
||||
if (!dev->active || !pnp_port_valid(dev, 1))
|
||||
/*
|
||||
* If the BIOS left the device disabled, or it is enabled and
|
||||
* responding correctly, we're in good shape.
|
||||
*/
|
||||
if (!dev->active || quirk_smc_fir_enabled(dev))
|
||||
return;
|
||||
|
||||
/*
|
||||
* On the HP/Compaq nw8240 (and probably other similar machines),
|
||||
* there is an SMCF010 device with two I/O port regions:
|
||||
* Sometimes the BIOS claims the device is enabled, but it reports
|
||||
* the wrong FIR resources or doesn't properly configure ISA or LPC
|
||||
* bridges on the way to the device.
|
||||
*
|
||||
* 0x3e8-0x3ef SIR
|
||||
* 0x100-0x10f FIR
|
||||
*
|
||||
* _STA reports the device is enabled, but in fact, the BIOS
|
||||
* neglects to enable the FIR range. Fortunately, it does fully
|
||||
* enable the device if we call _SRS.
|
||||
* HP nc6000 and nc8000/nw8000 laptops have known problems like
|
||||
* this. Fortunately, they do fix things up if we auto-configure
|
||||
* the device using its _PRS and _SRS methods.
|
||||
*/
|
||||
firbase = pnp_port_start(dev, 1);
|
||||
if (inb(firbase + 0x7 /* IRCC_MASTER */) == 0xff) {
|
||||
pnp_err("%s (%s) enabled but not responding, disabling and "
|
||||
"re-enabling", dev->dev.bus_id, pnp_dev_name(dev));
|
||||
pnp_disable_dev(dev);
|
||||
pnp_activate_dev(dev);
|
||||
}
|
||||
dev_err(&dev->dev, "%s device not responding, auto-configuring "
|
||||
"resources\n", dev->id->id);
|
||||
|
||||
pnp_disable_dev(dev);
|
||||
pnp_init_resource_table(&dev->res);
|
||||
pnp_auto_config_dev(dev);
|
||||
pnp_activate_dev(dev);
|
||||
|
||||
if (!quirk_smc_fir_enabled(dev))
|
||||
dev_err(&dev->dev, "giving up; try \"smsc-ircc2.nopnp\"\n");
|
||||
}
|
||||
|
||||
|
||||
|
@ -60,6 +60,7 @@ config BLK_DEV_SD
|
||||
depends on SCSI
|
||||
---help---
|
||||
If you want to use SCSI hard disks, Fibre Channel disks,
|
||||
Serial ATA (SATA) or Parallel ATA (PATA) hard disks,
|
||||
USB storage or the SCSI or parallel port version of
|
||||
the IOMEGA ZIP drive, say Y and read the SCSI-HOWTO,
|
||||
the Disk-HOWTO and the Multi-Disk-HOWTO, available from
|
||||
|
@ -503,7 +503,8 @@ mpsc_sdma_intr_ack(struct mpsc_port_info *pi)
|
||||
|
||||
if (pi->mirror_regs)
|
||||
pi->shared_regs->SDMA_INTR_CAUSE_m = 0;
|
||||
writel(0, pi->shared_regs->sdma_intr_base + SDMA_INTR_CAUSE);
|
||||
writeb(0x00, pi->shared_regs->sdma_intr_base + SDMA_INTR_CAUSE +
|
||||
pi->port.line);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -2290,15 +2290,6 @@ static int __devinit aty_init(struct fb_info *info)
|
||||
init_waitqueue_head(&par->vblank.wait);
|
||||
spin_lock_init(&par->int_lock);
|
||||
|
||||
#ifdef CONFIG_PPC_PMAC
|
||||
/* The Apple iBook1 uses non-standard memory frequencies. We detect it
|
||||
* and set the frequency manually. */
|
||||
if (machine_is_compatible("PowerBook2,1")) {
|
||||
par->pll_limits.mclk = 70;
|
||||
par->pll_limits.xclk = 53;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_FB_ATY_GX
|
||||
if (!M64_HAS(INTEGRATED)) {
|
||||
u32 stat0;
|
||||
@ -2383,6 +2374,14 @@ static int __devinit aty_init(struct fb_info *info)
|
||||
par->pll_limits.xclk = (par->pll_limits.xclk + 1) >> 1;
|
||||
}
|
||||
#endif
|
||||
#ifdef CONFIG_PPC_PMAC
|
||||
/* The Apple iBook1 uses non-standard memory frequencies. We detect it
|
||||
* and set the frequency manually. */
|
||||
if (machine_is_compatible("PowerBook2,1")) {
|
||||
par->pll_limits.mclk = 70;
|
||||
par->pll_limits.xclk = 53;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Allow command line to override clocks. */
|
||||
if (pll)
|
||||
|
@ -292,7 +292,7 @@ static void __init chips_hw_init(void)
|
||||
write_fr(chips_init_fr[i].addr, chips_init_fr[i].data);
|
||||
}
|
||||
|
||||
static struct fb_fix_screeninfo chipsfb_fix __initdata = {
|
||||
static struct fb_fix_screeninfo chipsfb_fix __devinitdata = {
|
||||
.id = "C&T 65550",
|
||||
.type = FB_TYPE_PACKED_PIXELS,
|
||||
.visual = FB_VISUAL_PSEUDOCOLOR,
|
||||
@ -309,7 +309,7 @@ static struct fb_fix_screeninfo chipsfb_fix __initdata = {
|
||||
.smem_len = 0x100000, /* 1MB */
|
||||
};
|
||||
|
||||
static struct fb_var_screeninfo chipsfb_var __initdata = {
|
||||
static struct fb_var_screeninfo chipsfb_var __devinitdata = {
|
||||
.xres = 800,
|
||||
.yres = 600,
|
||||
.xres_virtual = 800,
|
||||
@ -330,7 +330,7 @@ static struct fb_var_screeninfo chipsfb_var __initdata = {
|
||||
.vsync_len = 8,
|
||||
};
|
||||
|
||||
static void __init init_chips(struct fb_info *p, unsigned long addr)
|
||||
static void __devinit init_chips(struct fb_info *p, unsigned long addr)
|
||||
{
|
||||
memset(p->screen_base, 0, 0x100000);
|
||||
|
||||
|
@ -191,11 +191,7 @@ static ssize_t w1_therm_read_bin(struct kobject *kobj, char *buf, loff_t off, si
|
||||
|
||||
w1_write_8(dev, W1_CONVERT_TEMP);
|
||||
|
||||
while (tm) {
|
||||
tm = msleep_interruptible(tm);
|
||||
if (signal_pending(current))
|
||||
flush_signals(current);
|
||||
}
|
||||
msleep(tm);
|
||||
|
||||
if (!w1_reset_select_slave(sl)) {
|
||||
|
||||
|
@ -1106,7 +1106,7 @@ direct_io_worker(int rw, struct kiocb *iocb, struct inode *inode,
|
||||
spin_lock_irqsave(&dio->bio_lock, flags);
|
||||
ret2 = --dio->refcount;
|
||||
spin_unlock_irqrestore(&dio->bio_lock, flags);
|
||||
BUG_ON(!dio->is_async && ret2 != 0);
|
||||
|
||||
if (ret2 == 0) {
|
||||
ret = dio_complete(dio, offset, ret);
|
||||
kfree(dio);
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user