Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
c90176df
Commit
c90176df
authored
Feb 16, 2003
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Manual merge
parents
a6f5ccdf
6a8061e8
Changes
37
Hide whitespace changes
Inline
Side-by-side
Showing
37 changed files
with
641 additions
and
746 deletions
+641
-746
arch/arm/common/sa1111-pcibuf.c
arch/arm/common/sa1111-pcibuf.c
+1
-1
arch/arm/common/sa1111.c
arch/arm/common/sa1111.c
+6
-4
arch/arm/def-configs/epxa10db
arch/arm/def-configs/epxa10db
+180
-313
arch/arm/kernel/init_task.c
arch/arm/kernel/init_task.c
+1
-0
arch/arm/kernel/irq.c
arch/arm/kernel/irq.c
+55
-6
arch/arm/kernel/ptrace.c
arch/arm/kernel/ptrace.c
+9
-6
arch/arm/kernel/ptrace.h
arch/arm/kernel/ptrace.h
+2
-16
arch/arm/kernel/signal.c
arch/arm/kernel/signal.c
+47
-131
arch/arm/kernel/traps.c
arch/arm/kernel/traps.c
+9
-4
arch/arm/lib/backtrace.S
arch/arm/lib/backtrace.S
+14
-5
arch/arm/mach-epxa10db/irq.c
arch/arm/mach-epxa10db/irq.c
+3
-0
arch/arm/mach-footbridge/irq.c
arch/arm/mach-footbridge/irq.c
+1
-0
arch/arm/mach-footbridge/isa-irq.c
arch/arm/mach-footbridge/isa-irq.c
+1
-0
arch/arm/mach-iop310/iop310-irq.c
arch/arm/mach-iop310/iop310-irq.c
+1
-0
arch/arm/mach-iop310/iop310-pci.c
arch/arm/mach-iop310/iop310-pci.c
+2
-0
arch/arm/mach-iop310/iq80310-irq.c
arch/arm/mach-iop310/iq80310-irq.c
+1
-0
arch/arm/mach-iop310/xs80200-irq.c
arch/arm/mach-iop310/xs80200-irq.c
+1
-0
arch/arm/mach-pxa/irq.c
arch/arm/mach-pxa/irq.c
+0
-14
arch/arm/mach-rpc/irq.c
arch/arm/mach-rpc/irq.c
+1
-0
arch/arm/mach-sa1100/irq.c
arch/arm/mach-sa1100/irq.c
+1
-17
arch/arm/mach-sa1100/xp860.c
arch/arm/mach-sa1100/xp860.c
+1
-1
arch/arm/mm/consistent.c
arch/arm/mm/consistent.c
+1
-1
arch/arm/mm/proc-xscale.S
arch/arm/mm/proc-xscale.S
+1
-1
arch/arm/vmlinux-armv.lds.in
arch/arm/vmlinux-armv.lds.in
+4
-0
drivers/acorn/scsi/acornscsi.c
drivers/acorn/scsi/acornscsi.c
+54
-54
drivers/acorn/scsi/fas216.c
drivers/acorn/scsi/fas216.c
+100
-59
drivers/acorn/scsi/queue.c
drivers/acorn/scsi/queue.c
+4
-4
drivers/acorn/scsi/scsi.h
drivers/acorn/scsi/scsi.h
+2
-2
drivers/char/watchdog/wdt285.c
drivers/char/watchdog/wdt285.c
+96
-75
drivers/char/watchdog/wdt977.c
drivers/char/watchdog/wdt977.c
+16
-16
drivers/input/serio/sa1111ps2.c
drivers/input/serio/sa1111ps2.c
+2
-0
drivers/mtd/maps/sa1100-flash.c
drivers/mtd/maps/sa1100-flash.c
+6
-5
include/asm-arm/arch-iop310/serial.h
include/asm-arm/arch-iop310/serial.h
+2
-2
include/asm-arm/mach/irq.h
include/asm-arm/mach/irq.h
+6
-2
include/asm-arm/proc-armv/processor.h
include/asm-arm/proc-armv/processor.h
+1
-1
include/asm-arm/proc-armv/system.h
include/asm-arm/proc-armv/system.h
+8
-3
include/asm-arm/signal.h
include/asm-arm/signal.h
+1
-3
No files found.
arch/arm/common/sa1111-pcibuf.c
View file @
c90176df
...
...
@@ -54,7 +54,7 @@ struct safe_buffer {
dma_addr_t
safe_dma_addr
;
};
LIST_HEAD
(
safe_buffers
);
static
LIST_HEAD
(
safe_buffers
);
#define SIZE_SMALL 1024
...
...
arch/arm/common/sa1111.c
View file @
c90176df
...
...
@@ -218,7 +218,7 @@ static void sa1111_unmask_lowirq(unsigned int irq)
* be triggered. In fact, its very difficult, if not impossible to get
* INTSET to re-trigger the interrupt.
*/
static
void
sa1111_rerun
_lowirq
(
unsigned
int
irq
)
static
int
sa1111_retrigger
_lowirq
(
unsigned
int
irq
)
{
unsigned
int
mask
=
SA1111_IRQMASK_LO
(
irq
);
int
i
;
...
...
@@ -233,6 +233,7 @@ static void sa1111_rerun_lowirq(unsigned int irq)
if
(
i
==
8
)
printk
(
KERN_ERR
"Danger Will Robinson: failed to "
"re-trigger IRQ%d
\n
"
,
irq
);
return
i
==
8
?
-
1
:
0
;
}
static
int
sa1111_type_lowirq
(
unsigned
int
irq
,
unsigned
int
flags
)
...
...
@@ -270,7 +271,7 @@ static struct irqchip sa1111_low_chip = {
.
ack
=
sa1111_ack_irq
,
.
mask
=
sa1111_mask_lowirq
,
.
unmask
=
sa1111_unmask_lowirq
,
.
re
run
=
sa1111_rerun
_lowirq
,
.
re
trigger
=
sa1111_retrigger
_lowirq
,
.
type
=
sa1111_type_lowirq
,
.
wake
=
sa1111_wake_lowirq
,
};
...
...
@@ -292,7 +293,7 @@ static void sa1111_unmask_highirq(unsigned int irq)
* be triggered. In fact, its very difficult, if not impossible to get
* INTSET to re-trigger the interrupt.
*/
static
void
sa1111_rerun
_highirq
(
unsigned
int
irq
)
static
int
sa1111_retrigger
_highirq
(
unsigned
int
irq
)
{
unsigned
int
mask
=
SA1111_IRQMASK_HI
(
irq
);
int
i
;
...
...
@@ -307,6 +308,7 @@ static void sa1111_rerun_highirq(unsigned int irq)
if
(
i
==
8
)
printk
(
KERN_ERR
"Danger Will Robinson: failed to "
"re-trigger IRQ%d
\n
"
,
irq
);
return
i
==
8
?
-
1
:
0
;
}
static
int
sa1111_type_highirq
(
unsigned
int
irq
,
unsigned
int
flags
)
...
...
@@ -344,7 +346,7 @@ static struct irqchip sa1111_high_chip = {
.
ack
=
sa1111_ack_irq
,
.
mask
=
sa1111_mask_highirq
,
.
unmask
=
sa1111_unmask_highirq
,
.
re
run
=
sa1111_rerun
_highirq
,
.
re
trigger
=
sa1111_retrigger
_highirq
,
.
type
=
sa1111_type_highirq
,
.
wake
=
sa1111_wake_highirq
,
};
...
...
arch/arm/def-configs/epxa10db
View file @
c90176df
#
# Automatically generated
by make menu
config: don't edit
# Automatically generated
make
config: don't edit
#
CONFIG_ARM=y
# CONFIG_EISA is not set
# CONFIG_SBUS is not set
# CONFIG_MCA is not set
CONFIG_MMU=y
CONFIG_SWAP=y
CONFIG_UID16=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
# CONFIG_GENERIC_BUST_SPINLOCK is not set
# CONFIG_GENERIC_ISA_DMA is not set
#
# Code maturity level options
#
CONFIG_EXPERIMENTAL=y
# CONFIG_OBSOLETE is not set
#
# General setup
#
CONFIG_SYSVIPC=y
# CONFIG_BSD_PROCESS_ACCT is not set
CONFIG_SYSCTL=y
CONFIG_LOG_BUF_SHIFT=14
#
# Loadable module support
#
CONFIG_MODULES=y
# CONFIG_MODVERSIONS is not set
# CONFIG_MODULE_UNLOAD is not set
CONFIG_OBSOLETE_MODPARM=y
# CONFIG_KMOD is not set
#
...
...
@@ -33,6 +37,7 @@ CONFIG_MODULES=y
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
# CONFIG_ARCH_CO285 is not set
# CONFIG_ARCH_PXA is not set
# CONFIG_ARCH_EBSA110 is not set
CONFIG_ARCH_CAMELOT=y
# CONFIG_ARCH_FOOTBRIDGE is not set
...
...
@@ -46,106 +51,71 @@ CONFIG_ARCH_CAMELOT=y
#
# Archimedes/A5000 Implementations
#
# CONFIG_ARCH_ARC is not set
# CONFIG_ARCH_A5K is not set
#
# Archimedes/A5000 Implementations (select only ONE)
#
#
# CLPS711X/EP721X Implementations
#
#
# Epxa10db
#
#
# PLD hotswap support
#
CONFIG_PLD=y
# CONFIG_PLD_HOTSWAP is not set
#
# Footbridge Implementations
#
# CONFIG_ARCH_CATS is not set
# CONFIG_ARCH_PERSONAL_SERVER is not set
# CONFIG_ARCH_EBSA285_ADDIN is not set
# CONFIG_ARCH_EBSA285_HOST is not set
# CONFIG_ARCH_NETWINDER is not set
#
# IOP310 Implementation Options
#
#
# IOP310 Chipset Features
#
#
# Intel PXA250/210 Implementations
#
#
# SA11x0 Implementations
#
# CONFIG_SA1100_ASSABET is not set
# CONFIG_ASSABET_NEPONSET is not set
# CONFIG_SA1100_ADSBITSY is not set
# CONFIG_SA1100_BRUTUS is not set
# CONFIG_SA1100_CERF is not set
# CONFIG_SA1100_H3100 is not set
# CONFIG_SA1100_H3600 is not set
# CONFIG_SA1100_H3800 is not set
# CONFIG_SA1100_H3XXX is not set
# CONFIG_SA1100_EXTENEX1 is not set
# CONFIG_SA1100_FLEXANET is not set
# CONFIG_SA1100_FREEBIRD is not set
# CONFIG_SA1100_GRAPHICSCLIENT is not set
# CONFIG_SA1100_GRAPHICSMASTER is not set
# CONFIG_SA1100_BADGE4 is not set
# CONFIG_SA1100_JORNADA720 is not set
# CONFIG_SA1100_HUW_WEBPANEL is not set
# CONFIG_SA1100_ITSY is not set
# CONFIG_SA1100_LART is not set
# CONFIG_SA1100_NANOENGINE is not set
# CONFIG_SA1100_OMNIMETER is not set
# CONFIG_SA1100_PANGOLIN is not set
# CONFIG_SA1100_PLEB is not set
# CONFIG_SA1100_PT_SYSTEM3 is not set
# CONFIG_SA1100_SHANNON is not set
# CONFIG_SA1100_SHERMAN is not set
# CONFIG_SA1100_SIMPAD is not set
# CONFIG_SA1100_PFS168 is not set
# CONFIG_SA1100_VICTOR is not set
# CONFIG_SA1100_XP860 is not set
# CONFIG_SA1100_YOPY is not set
# CONFIG_SA1100_USB is not set
# CONFIG_SA1100_USB_NETLINK is not set
# CONFIG_SA1100_USB_CHAR is not set
# CONFIG_H3600_SLEEVE is not set
#
#
CLPS711X/EP721X Implementations
#
Processor Type
#
# CONFIG_ARCH_AUTCPU12 is not set
# CONFIG_ARCH_CDB89712 is not set
# CONFIG_ARCH_CLEP7312 is not set
# CONFIG_ARCH_EDB7211 is not set
# CONFIG_ARCH_P720T is not set
# CONFIG_ARCH_FORTUNET is not set
# CONFIG_ARCH_EP7211 is not set
# CONFIG_ARCH_EP7212 is not set
# CONFIG_ARCH_ACORN is not set
# CONFIG_FOOTBRIDGE is not set
# CONFIG_FOOTBRIDGE_HOST is not set
# CONFIG_FOOTBRIDGE_ADDIN is not set
CONFIG_CPU_32=y
# CONFIG_CPU_26 is not set
# CONFIG_CPU_32v3 is not set
CONFIG_CPU_32v4=y
# CONFIG_CPU_ARM610 is not set
# CONFIG_CPU_ARM710 is not set
# CONFIG_CPU_ARM720T is not set
# CONFIG_CPU_ARM920T is not set
CONFIG_CPU_ARM922T=y
CONFIG_CPU_ARM922_CPU_IDLE=y
CONFIG_CPU_ARM922_I_CACHE_ON=y
CONFIG_CPU_ARM922_D_CACHE_ON=y
# CONFIG_CPU_ARM922_WRITETHROUGH is not set
# CONFIG_CPU_ARM926T is not set
# CONFIG_CPU_ARM1020 is not set
# CONFIG_CPU_SA110 is not set
# CONFIG_CPU_SA1100 is not set
# CONFIG_XSCALE_PMU is not set
CONFIG_CPU_32v4=y
#
# Processor Features
#
# CONFIG_ARM_THUMB is not set
# CONFIG_DISCONTIGMEM is not set
# CONFIG_CPU_ICACHE_DISABLE is not set
# CONFIG_CPU_DCACHE_DISABLE is not set
# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
#
# General setup
#
# CONFIG_PCI is not set
# CONFIG_ISA is not set
# CONFIG_ISA_DMA is not set
# CONFIG_FIQ is not set
# CONFIG_ZBOOT_ROM is not set
CONFIG_ZBOOT_ROM_TEXT=0
CONFIG_ZBOOT_ROM_BSS=0
# CONFIG_HOTPLUG is not set
# CONFIG_PCMCIA is not set
CONFIG_NET=y
CONFIG_SYSVIPC=y
# CONFIG_BSD_PROCESS_ACCT is not set
CONFIG_SYSCTL=y
#
# At least one math emulation must be selected
#
CONFIG_FPE_NWFPE=y
# CONFIG_FPE_FASTFPE is not set
CONFIG_KCORE_ELF=y
...
...
@@ -154,7 +124,7 @@ CONFIG_BINFMT_AOUT=y
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_MISC is not set
# CONFIG_PM is not set
# CONFIG_
APM
is not set
# CONFIG_
PREEMPT
is not set
# CONFIG_ARTHUR is not set
CONFIG_CMDLINE="mem=32M console=ttyUA0,38400 root=/dev/mtdblock0 rw"
CONFIG_ALIGNMENT_TRAP=y
...
...
@@ -171,9 +141,14 @@ CONFIG_MTD=y
CONFIG_MTD_DEBUG=y
CONFIG_MTD_DEBUG_VERBOSE=0
CONFIG_MTD_PARTITIONS=y
# CONFIG_MTD_CONCAT is not set
# CONFIG_MTD_REDBOOT_PARTS is not set
CONFIG_MTD_BOOTLDR_PARTS=y
# CONFIG_MTD_CMDLINE_PARTS is not set
# CONFIG_MTD_AFS_PARTS is not set
#
# User Modules And Translation Layers
#
CONFIG_MTD_CHAR=y
CONFIG_MTD_BLOCK=y
# CONFIG_FTL is not set
...
...
@@ -192,9 +167,6 @@ CONFIG_MTD_CFI_INTELEXT=y
# CONFIG_MTD_ROM is not set
# CONFIG_MTD_ABSENT is not set
# CONFIG_MTD_OBSOLETE_CHIPS is not set
# CONFIG_MTD_AMDSTD is not set
# CONFIG_MTD_SHARP is not set
# CONFIG_MTD_JEDEC is not set
#
# Mapping drivers for chip access
...
...
@@ -202,24 +174,23 @@ CONFIG_MTD_CFI_INTELEXT=y
# CONFIG_MTD_PHYSMAP is not set
# CONFIG_MTD_NORA is not set
# CONFIG_MTD_ARM_INTEGRATOR is not set
# CONFIG_MTD_CDB89712 is not set
# CONFIG_MTD_SA1100 is not set
# CONFIG_MTD_DC21285 is not set
# CONFIG_MTD_IQ80310 is not set
CONFIG_MTD_EPXA10DB=y
# CONFIG_MTD_PCI is not set
# CONFIG_MTD_EDB7312 is not set
# CONFIG_MTD_UCLINUX is not set
#
# Self-contained MTD device drivers
#
# CONFIG_MTD_PMC551 is not set
# CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_MTDRAM is not set
# CONFIG_MTD_BLKMTD is not set
#
# Disk-On-Chip Device Drivers
#
# CONFIG_MTD_DOC1000 is not set
# CONFIG_MTD_DOC2000 is not set
# CONFIG_MTD_DOC2001 is not set
# CONFIG_MTD_DOCPROBE is not set
#
# NAND Flash Device Drivers
...
...
@@ -227,21 +198,14 @@ CONFIG_MTD_EPXA10DB=y
# CONFIG_MTD_NAND is not set
#
# Plug and Play
configuration
# Plug and Play
support
#
# CONFIG_PNP is not set
# CONFIG_ISAPNP is not set
#
# Block devices
#
# CONFIG_BLK_DEV_FD is not set
# CONFIG_BLK_DEV_XD is not set
# CONFIG_PARIDE is not set
# CONFIG_BLK_CPQ_DA is not set
# CONFIG_BLK_CPQ_CISS_DA is not set
# CONFIG_CISS_SCSI_TAPE is not set
# CONFIG_BLK_DEV_DAC960 is not set
# CONFIG_BLK_DEV_LOOP is not set
# CONFIG_BLK_DEV_NBD is not set
CONFIG_BLK_DEV_RAM=y
...
...
@@ -252,23 +216,22 @@ CONFIG_BLK_DEV_RAM_SIZE=8192
# Multi-device support (RAID and LVM)
#
# CONFIG_MD is not set
# CONFIG_BLK_DEV_MD is not set
# CONFIG_MD_LINEAR is not set
# CONFIG_MD_RAID0 is not set
# CONFIG_MD_RAID1 is not set
# CONFIG_MD_RAID5 is not set
# CONFIG_MD_MULTIPATH is not set
# CONFIG_BLK_DEV_LVM is not set
#
# Networking support
#
CONFIG_NET=y
#
# Networking options
#
CONFIG_PACKET=y
# CONFIG_PACKET_MMAP is not set
# CONFIG_NETLINK is not set
# CONFIG_NETLINK
_DEV
is not set
# CONFIG_NETFILTER is not set
# CONFIG_FILTER is not set
CONFIG_UNIX=y
# CONFIG_NET_KEY is not set
CONFIG_INET=y
# CONFIG_IP_MULTICAST is not set
# CONFIG_IP_ADVANCED_ROUTER is not set
...
...
@@ -278,19 +241,26 @@ CONFIG_IP_PNP_BOOTP=y
# CONFIG_IP_PNP_RARP is not set
# CONFIG_NET_IPIP is not set
# CONFIG_NET_IPGRE is not set
# CONFIG_ARPD is not set
# CONFIG_INET_ECN is not set
# CONFIG_SYN_COOKIES is not set
# CONFIG_INET_AH is not set
# CONFIG_INET_ESP is not set
# CONFIG_XFRM_USER is not set
# CONFIG_IPV6 is not set
# CONFIG_KHTTPD is not set
#
# SCTP Configuration (EXPERIMENTAL)
#
CONFIG_IPV6_SCTP__=y
# CONFIG_IP_SCTP is not set
# CONFIG_ATM is not set
# CONFIG_VLAN_8021Q is not set
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
# CONFIG_LLC is not set
# CONFIG_DECNET is not set
# CONFIG_BRIDGE is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
# CONFIG_LLC is not set
# CONFIG_NET_DIVERT is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
...
...
@@ -303,54 +273,27 @@ CONFIG_IP_PNP_BOOTP=y
# CONFIG_NET_SCHED is not set
#
# Network
device support
# Network
testing
#
# CONFIG_NET_PKTGEN is not set
CONFIG_NETDEVICES=y
#
# ARCnet devices
#
# CONFIG_ARCNET is not set
# CONFIG_DUMMY is not set
# CONFIG_BONDING is not set
# CONFIG_EQUALIZER is not set
# CONFIG_TUN is not set
# CONFIG_ETHERTAP is not set
#
# Ethernet (10 or 100Mbit)
#
CONFIG_NET_ETHERNET=y
# CONFIG_ARM_AM79C961A is not set
CONFIG_ETHER00=m
# CONFIG_SUNLANCE is not set
# CONFIG_SUNBMAC is not set
# CONFIG_SUNQE is not set
# CONFIG_SUNLANCE is not set
# CONFIG_SUNGEM is not set
# CONFIG_NET_VENDOR_3COM is not set
# CONFIG_LANCE is not set
# CONFIG_NET_VENDOR_SMC is not set
# CONFIG_NET_VENDOR_RACAL is not set
# CONFIG_NET_ISA is not set
# CONFIG_NET_PCI is not set
# CONFIG_NET_POCKET is not set
#
# Ethernet (1000 Mbit)
#
# CONFIG_ACENIC is not set
# CONFIG_DL2K is not set
# CONFIG_MYRI_SBUS is not set
# CONFIG_NS83820 is not set
# CONFIG_HAMACHI is not set
# CONFIG_YELLOWFIN is not set
# CONFIG_SK98LIN is not set
# CONFIG_FDDI is not set
# CONFIG_HIPPI is not set
# CONFIG_PLIP is not set
CONFIG_PPP=y
CONFIG_PPP_MULTILINK=y
# CONFIG_PPP_FILTER is not set
CONFIG_PPP_ASYNC=y
CONFIG_PPP_SYNC_TTY=y
# CONFIG_PPP_DEFLATE is not set
...
...
@@ -364,11 +307,8 @@ CONFIG_PPP_SYNC_TTY=y
# CONFIG_NET_RADIO is not set
#
# Token Ring devices
# Token Ring devices
(depends on LLC=y)
#
# CONFIG_TR is not set
# CONFIG_NET_FC is not set
# CONFIG_RCPCI is not set
# CONFIG_SHAPER is not set
#
...
...
@@ -377,21 +317,19 @@ CONFIG_PPP_SYNC_TTY=y
# CONFIG_WAN is not set
#
#
Amateur Radio
support
#
IrDA (infrared)
support
#
# CONFIG_
HAMRADIO
is not set
# CONFIG_
IRDA
is not set
#
#
IrDA (infrared)
support
#
Amateur Radio
support
#
# CONFIG_
IRDA
is not set
# CONFIG_
HAMRADIO
is not set
#
# ATA/
IDE
/MFM/RLL support
# ATA/
ATAPI
/MFM/RLL support
#
# CONFIG_IDE is not set
# CONFIG_BLK_DEV_IDE_MODES is not set
# CONFIG_BLK_DEV_HD is not set
#
# SCSI support
...
...
@@ -402,59 +340,48 @@ CONFIG_PPP_SYNC_TTY=y
# I2O device support
#
# CONFIG_I2O is not set
# CONFIG_I2O_BLOCK is not set
# CONFIG_I2O_LAN is not set
# CONFIG_I2O_SCSI is not set
# CONFIG_I2O_PROC is not set
#
# ISDN subsystem
#
# CONFIG_ISDN is not set
# CONFIG_ISDN
_BOOL
is not set
#
# Input
cor
e support
# Input
devic
e support
#
# CONFIG_INPUT is not set
# CONFIG_INPUT_KEYBDEV is not set
# CONFIG_INPUT_MOUSEDEV is not set
# CONFIG_INPUT_JOYDEV is not set
# CONFIG_INPUT_EVDEV is not set
#
# Userland interfaces
#
#
# Input I/O drivers
#
# CONFIG_GAMEPORT is not set
CONFIG_SOUND_GAMEPORT=y
# CONFIG_SERIO is not set
#
# Input Device Drivers
#
#
# Character devices
#
# CONFIG_VT is not set
# CONFIG_SERIAL is not set
# CONFIG_SERIAL_EXTENDED is not set
# CONFIG_SERIAL_NONSTANDARD is not set
#
# Serial drivers
#
# CONFIG_SERIAL_ANAKIN is not set
# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
# CONFIG_SERIAL_AMBA is not set
# CONFIG_SERIAL_AMBA_CONSOLE is not set
# CONFIG_SERIAL_CLPS711X is not set
# CONFIG_SERIAL_CLPS711X_CONSOLE is not set
# CONFIG_SERIAL_21285 is not set
# CONFIG_SERIAL_21285_OLD is not set
# CONFIG_SERIAL_21285_CONSOLE is not set
# CONFIG_SERIAL_8250 is not set
#
# Non-8250 serial port support
#
# CONFIG_SERIAL_DZ is not set
CONFIG_SERIAL_UART00=y
CONFIG_SERIAL_UART00_CONSOLE=y
# CONFIG_SERIAL_SA1100 is not set
# CONFIG_SERIAL_SA1100_CONSOLE is not set
# CONFIG_SERIAL_8250 is not set
# CONFIG_SERIAL_8250_CONSOLE is not set
# CONFIG_ATOMWIDE_SERIAL is not set
# CONFIG_DUALSP_SERIAL is not set
# CONFIG_SERIAL_8250_EXTENDED is not set
# CONFIG_SERIAL_8250_MANY_PORTS is not set
# CONFIG_SERIAL_8250_SHARE_IRQ is not set
# CONFIG_SERIAL_8250_DETECT_IRQ is not set
# CONFIG_SERIAL_8250_MULTIPORT is not set
# CONFIG_SERIAL_8250_RSA is not set
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_UNIX98_PTYS=y
...
...
@@ -465,34 +392,37 @@ CONFIG_UNIX98_PTY_COUNT=256
#
# CONFIG_I2C is not set
#
# I2C Hardware Sensors Mainboard support
#
#
# I2C Hardware Sensors Chip support
#
#
# L3 serial bus support
#
# CONFIG_L3 is not set
# CONFIG_L3_ALGOBIT is not set
# CONFIG_L3_BIT_SA1100_GPIO is not set
# CONFIG_L3_SA1111 is not set
# CONFIG_BIT_SA1100_GPIO is not set
#
# Mice
#
# CONFIG_BUSMOUSE is not set
# CONFIG_
MOUS
E is not set
# CONFIG_
QIC02_TAP
E is not set
#
#
Joysticks
#
IPMI
#
# CONFIG_INPUT_GAMEPORT is not set
# CONFIG_QIC02_TAPE is not set
# CONFIG_IPMI_HANDLER is not set
#
# Watchdog Cards
#
# CONFIG_WATCHDOG is not set
# CONFIG_INTEL_RNG is not set
# CONFIG_NVRAM is not set
# CONFIG_RTC is not set
# CONFIG_GEN_RTC is not set
# CONFIG_DTLK is not set
# CONFIG_R3964 is not set
# CONFIG_APPLICOM is not set
...
...
@@ -503,6 +433,7 @@ CONFIG_UNIX98_PTY_COUNT=256
# CONFIG_FTAPE is not set
# CONFIG_AGP is not set
# CONFIG_DRM is not set
# CONFIG_RAW_DRIVER is not set
#
# Multimedia devices
...
...
@@ -516,50 +447,39 @@ CONFIG_UNIX98_PTY_COUNT=256
# CONFIG_AUTOFS_FS is not set
# CONFIG_AUTOFS4_FS is not set
# CONFIG_REISERFS_FS is not set
# CONFIG_REISERFS_CHECK is not set
# CONFIG_REISERFS_PROC_INFO is not set
# CONFIG_ADFS_FS is not set
# CONFIG_ADFS_FS_RW is not set
# CONFIG_AFFS_FS is not set
# CONFIG_HFS_FS is not set
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EXT3_FS is not set
# CONFIG_JBD is not set
# CONFIG_JBD_DEBUG is not set
# CONFIG_FAT_FS is not set
# CONFIG_MSDOS_FS is not set
# CONFIG_UMSDOS_FS is not set
# CONFIG_VFAT_FS is not set
# CONFIG_EFS_FS is not set
# CONFIG_JFFS_FS is not set
CONFIG_JFFS2_FS=y
CONFIG_JFFS2_FS_DEBUG=0
# CONFIG_JFFS2_FS_NAND is not set
# CONFIG_CRAMFS is not set
CONFIG_TMPFS=y
CONFIG_RAMFS=y
# CONFIG_ISO9660_FS is not set
# CONFIG_JOLIET is not set
# CONFIG_ZISOFS is not set
# CONFIG_JFS_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_VXFS_FS is not set
# CONFIG_NTFS_FS is not set
# CONFIG_NTFS_DEBUG is not set
# CONFIG_NTFS_RW is not set
# CONFIG_HPFS_FS is not set
CONFIG_PROC_FS=y
# CONFIG_DEVFS_FS is not set
# CONFIG_DEVFS_MOUNT is not set
# CONFIG_DEVFS_DEBUG is not set
CONFIG_DEVPTS_FS=y
# CONFIG_QNX4FS_FS is not set
# CONFIG_QNX4FS_RW is not set
CONFIG_ROMFS_FS=y
CONFIG_EXT2_FS=y
# CONFIG_EXT2_FS_XATTR is not set
# CONFIG_SYSV_FS is not set
# CONFIG_UDF_FS is not set
# CONFIG_UDF_RW is not set
# CONFIG_UFS_FS is not set
# CONFIG_
UFS_FS_WRITE
is not set
# CONFIG_
XFS_FS
is not set
#
# Network File Systems
...
...
@@ -568,107 +488,52 @@ CONFIG_EXT2_FS=y
# CONFIG_INTERMEZZO_FS is not set
CONFIG_NFS_FS=y
# CONFIG_NFS_V3 is not set
# CONFIG_NFS_V4 is not set
# CONFIG_ROOT_NFS is not set
# CONFIG_NFSD is not set
# CONFIG_NFSD_V3 is not set
CONFIG_SUNRPC=y
# CONFIG_SUNRPC_GSS is not set
CONFIG_LOCKD=y
# CONFIG_EXPORTFS is not set
# CONFIG_CIFS is not set
# CONFIG_SMB_FS is not set
# CONFIG_NCP_FS is not set
# CONFIG_NCPFS_PACKET_SIGNING is not set
# CONFIG_NCPFS_IOCTL_LOCKING is not set
# CONFIG_NCPFS_STRONG is not set
# CONFIG_NCPFS_NFS_NS is not set
# CONFIG_NCPFS_OS2_NS is not set
# CONFIG_NCPFS_SMALLDOS is not set
# CONFIG_NCPFS_NLS is not set
# CONFIG_NCPFS_EXTRAS is not set
# CONFIG_ZISOFS_FS is not set
# CONFIG_ZLIB_FS_INFLATE is not set
# CONFIG_AFS_FS is not set
#
# Partition Types
#
# CONFIG_PARTITION_ADVANCED is not set
CONFIG_MSDOS_PARTITION=y
# CONFIG_SMB_NLS is not set
# CONFIG_NLS is not set
#
# Graphics support
#
# CONFIG_FB is not set
#
# Console display driver support
#
# CONFIG_VGA_CONSOLE is not set
# CONFIG_MDA_CONSOLE is not set
CONFIG_DUMMY_CONSOLE=y
#
# Misc devices
#
#
# Multimedia Capabilities Port drivers
#
# CONFIG_MCP is not set
# CONFIG_MCP_SA1100 is not set
# CONFIG_MCP_UCB1200 is not set
# CONFIG_MCP_UCB1200_AUDIO is not set
# CONFIG_MCP_UCB1200_TS is not set
#
# Console Switches
#
# CONFIG_SWITCHES is not set
#
# USB support
#
# CONFIG_USB is not set
# CONFIG_USB_EHCI_HCD is not set
# CONFIG_USB_UHCI is not set
# CONFIG_USB_UHCI_ALT is not set
# CONFIG_USB_OHCI is not set
# CONFIG_USB_OHCI_SA1111 is not set
# CONFIG_USB_AUDIO is not set
# CONFIG_USB_BLUETOOTH is not set
# CONFIG_USB_STORAGE is not set
# CONFIG_USB_STORAGE_DEBUG is not set
# CONFIG_USB_STORAGE_DATAFAB is not set
# CONFIG_USB_STORAGE_FREECOM is not set
# CONFIG_USB_STORAGE_ISD200 is not set
# CONFIG_USB_STORAGE_DPCM is not set
# CONFIG_USB_STORAGE_HP8200e is not set
# CONFIG_USB_STORAGE_SDDR09 is not set
# CONFIG_USB_STORAGE_JUMPSHOT is not set
# CONFIG_USB_ACM is not set
# CONFIG_USB_PRINTER is not set
# CONFIG_USB_DC2XX is not set
# CONFIG_USB_MDC800 is not set
# CONFIG_USB_SCANNER is not set
# CONFIG_USB_MICROTEK is not set
# CONFIG_USB_HPUSBSCSI is not set
# CONFIG_USB_PEGASUS is not set
# CONFIG_USB_KAWETH is not set
# CONFIG_USB_CATC is not set
# CONFIG_USB_CDCETHER is not set
# CONFIG_USB_USBNET is not set
# CONFIG_USB_USS720 is not set
#
# USB Serial Converter support
#
# CONFIG_USB_SERIAL is not set
# CONFIG_USB_SERIAL_GENERIC is not set
# CONFIG_USB_SERIAL_BELKIN is not set
# CONFIG_USB_SERIAL_WHITEHEAT is not set
# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
# CONFIG_USB_SERIAL_EMPEG is not set
# CONFIG_USB_SERIAL_FTDI_SIO is not set
# CONFIG_USB_SERIAL_VISOR is not set
# CONFIG_USB_SERIAL_IPAQ is not set
# CONFIG_USB_SERIAL_IR is not set
# CONFIG_USB_SERIAL_EDGEPORT is not set
# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
# CONFIG_USB_SERIAL_KEYSPAN is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
# CONFIG_USB_SERIAL_MCT_U232 is not set
# CONFIG_USB_SERIAL_KLSI is not set
# CONFIG_USB_SERIAL_PL2303 is not set
# CONFIG_USB_SERIAL_CYBERJACK is not set
# CONFIG_USB_SERIAL_XIRCOM is not set
# CONFIG_USB_SERIAL_OMNINET is not set
# CONFIG_USB_RIO500 is not set
# CONFIG_USB_AUERSWALD is not set
#
# Bluetooth support
...
...
@@ -681,19 +546,21 @@ CONFIG_MSDOS_PARTITION=y
CONFIG_FRAME_POINTER=y
# CONFIG_DEBUG_USER is not set
# CONFIG_DEBUG_INFO is not set
# CONFIG_NO_PGT_CACHE is not set
# CONFIG_DEBUG_KERNEL is not set
# CONFIG_DEBUG_SLAB is not set
# CONFIG_MAGIC_SYSRQ is not set
# CONFIG_DEBUG_SPINLOCK is not set
# CONFIG_DEBUG_WAITQ is not set
# CONFIG_DEBUG_BUGVERBOSE is not set
# CONFIG_DEBUG_ERRORS is not set
# CONFIG_DEBUG_LL is not set
# CONFIG_DEBUG_DC21285_PORT is not set
# CONFIG_DEBUG_CLPS711X_UART2 is not set
#
# Security options
#
# CONFIG_SECURITY is not set
#
# Cryptographic options
#
# CONFIG_CRYPTO is not set
#
# Library routines
#
# CONFIG_CRC32 is not set
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
arch/arm/kernel/init_task.c
View file @
c90176df
...
...
@@ -13,6 +13,7 @@
static
struct
fs_struct
init_fs
=
INIT_FS
;
static
struct
files_struct
init_files
=
INIT_FILES
;
static
struct
signal_struct
init_signals
=
INIT_SIGNALS
(
init_signals
);
static
struct
sighand_struct
init_sighand
=
INIT_SIGHAND
(
init_sighand
);
struct
mm_struct
init_mm
=
INIT_MM
(
init_mm
);
/*
...
...
arch/arm/kernel/irq.c
View file @
c90176df
...
...
@@ -29,6 +29,7 @@
#include <linux/init.h>
#include <linux/seq_file.h>
#include <linux/errno.h>
#include <linux/list.h>
#include <asm/irq.h>
#include <asm/system.h>
...
...
@@ -45,6 +46,7 @@
static
volatile
unsigned
long
irq_err_count
;
static
spinlock_t
irq_controller_lock
;
static
LIST_HEAD
(
irq_pending
);
struct
irqdesc
irq_desc
[
NR_IRQS
];
void
(
*
init_arch_irq
)(
void
)
__initdata
=
NULL
;
...
...
@@ -69,9 +71,10 @@ static struct irqchip bad_chip = {
};
static
struct
irqdesc
bad_irq_desc
=
{
.
chip
=
&
bad_chip
,
.
handle
=
do_bad_IRQ
,
.
depth
=
1
,
.
chip
=
&
bad_chip
,
.
handle
=
do_bad_IRQ
,
.
pend
=
LIST_HEAD_INIT
(
bad_irq_desc
.
pend
),
.
disable_depth
=
1
,
};
/**
...
...
@@ -90,6 +93,7 @@ void disable_irq(unsigned int irq)
spin_lock_irqsave
(
&
irq_controller_lock
,
flags
);
desc
->
disable_depth
++
;
list_del_init
(
&
desc
->
pend
);
spin_unlock_irqrestore
(
&
irq_controller_lock
,
flags
);
}
...
...
@@ -122,9 +126,11 @@ void enable_irq(unsigned int irq)
* from here since the caller might be in an
* interrupt-protected region.
*/
if
(
desc
->
pending
)
{
if
(
desc
->
pending
&&
list_empty
(
&
desc
->
pend
)
)
{
desc
->
pending
=
0
;
desc
->
chip
->
rerun
(
irq
);
if
(
!
desc
->
chip
->
retrigger
||
desc
->
chip
->
retrigger
(
irq
))
list_add
(
&
desc
->
pend
,
&
irq_pending
);
}
}
spin_unlock_irqrestore
(
&
irq_controller_lock
,
flags
);
...
...
@@ -346,6 +352,40 @@ do_level_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs)
}
}
static
void
do_pending_irqs
(
struct
pt_regs
*
regs
)
{
struct
list_head
head
,
*
l
,
*
n
;
do
{
struct
irqdesc
*
desc
;
/*
* First, take the pending interrupts off the list.
* The act of calling the handlers may add some IRQs
* back onto the list.
*/
head
=
irq_pending
;
INIT_LIST_HEAD
(
&
irq_pending
);
head
.
next
->
prev
=
&
head
;
head
.
prev
->
next
=
&
head
;
/*
* Now run each entry. We must delete it from our
* list before calling the handler.
*/
list_for_each_safe
(
l
,
n
,
&
head
)
{
desc
=
list_entry
(
l
,
struct
irqdesc
,
pend
);
list_del_init
(
&
desc
->
pend
);
desc
->
handle
(
desc
-
irq_desc
,
desc
,
regs
);
}
/*
* The list must be empty.
*/
BUG_ON
(
!
list_empty
(
&
head
));
}
while
(
!
list_empty
(
&
irq_pending
));
}
/*
* do_IRQ handles all hardware IRQ's. Decoded IRQs should not
* come via this function. Instead, they should provide their
...
...
@@ -365,6 +405,13 @@ asmlinkage void asm_do_IRQ(int irq, struct pt_regs *regs)
irq_enter
();
spin_lock
(
&
irq_controller_lock
);
desc
->
handle
(
irq
,
desc
,
regs
);
/*
* Now re-run any pending interrupts.
*/
if
(
!
list_empty
(
&
irq_pending
))
do_pending_irqs
(
regs
);
spin_unlock
(
&
irq_controller_lock
);
irq_exit
();
}
...
...
@@ -740,8 +787,10 @@ void __init init_IRQ(void)
extern
void
init_dma
(
void
);
int
irq
;
for
(
irq
=
0
,
desc
=
irq_desc
;
irq
<
NR_IRQS
;
irq
++
,
desc
++
)
for
(
irq
=
0
,
desc
=
irq_desc
;
irq
<
NR_IRQS
;
irq
++
,
desc
++
)
{
*
desc
=
bad_irq_desc
;
INIT_LIST_HEAD
(
&
desc
->
pend
);
}
init_arch_irq
();
init_dma
();
...
...
arch/arm/kernel/ptrace.c
View file @
c90176df
...
...
@@ -446,7 +446,7 @@ void ptrace_set_bpt(struct task_struct *child)
* Ensure no single-step breakpoint is pending. Returns non-zero
* value if child was being single-stepped.
*/
void
__
ptrace_cancel_bpt
(
struct
task_struct
*
child
)
void
ptrace_cancel_bpt
(
struct
task_struct
*
child
)
{
int
i
,
nsaved
=
child
->
thread
.
debug
.
nsaved
;
...
...
@@ -468,7 +468,8 @@ void __ptrace_cancel_bpt(struct task_struct *child)
*/
void
ptrace_disable
(
struct
task_struct
*
child
)
{
__ptrace_cancel_bpt
(
child
);
child
->
ptrace
&=
~
PT_SINGLESTEP
;
ptrace_cancel_bpt
(
child
);
}
/*
...
...
@@ -486,7 +487,7 @@ void ptrace_break(struct task_struct *tsk, struct pt_regs *regs)
if
(
tsk
->
thread
.
debug
.
nsaved
==
0
)
printk
(
KERN_ERR
"ptrace: bogus breakpoint trap
\n
"
);
__
ptrace_cancel_bpt
(
tsk
);
ptrace_cancel_bpt
(
tsk
);
info
.
si_signo
=
SIGTRAP
;
info
.
si_errno
=
0
;
...
...
@@ -637,7 +638,8 @@ static int do_ptrace(int request, struct task_struct *child, long addr, long dat
clear_tsk_thread_flag
(
child
,
TIF_SYSCALL_TRACE
);
child
->
exit_code
=
data
;
/* make sure single-step breakpoint is gone. */
__ptrace_cancel_bpt
(
child
);
child
->
ptrace
&=
~
PT_SINGLESTEP
;
ptrace_cancel_bpt
(
child
);
wake_up_process
(
child
);
ret
=
0
;
break
;
...
...
@@ -649,7 +651,8 @@ static int do_ptrace(int request, struct task_struct *child, long addr, long dat
*/
case
PTRACE_KILL
:
/* make sure single-step breakpoint is gone. */
__ptrace_cancel_bpt
(
child
);
child
->
ptrace
&=
~
PT_SINGLESTEP
;
ptrace_cancel_bpt
(
child
);
if
(
child
->
state
!=
TASK_ZOMBIE
)
{
child
->
exit_code
=
SIGKILL
;
wake_up_process
(
child
);
...
...
@@ -664,7 +667,7 @@ static int do_ptrace(int request, struct task_struct *child, long addr, long dat
ret
=
-
EIO
;
if
((
unsigned
long
)
data
>
_NSIG
)
break
;
child
->
thread
.
debug
.
nsaved
=
-
1
;
child
->
ptrace
|=
PT_SINGLESTEP
;
clear_tsk_thread_flag
(
child
,
TIF_SYSCALL_TRACE
);
child
->
exit_code
=
data
;
/* give it a chance to run. */
...
...
arch/arm/kernel/ptrace.h
View file @
c90176df
/*
* linux/arch/arm/kernel/ptrace.h
*
* Copyright (C) 2000-200
2
Russell King
* Copyright (C) 2000-200
3
Russell King
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
extern
void
__
ptrace_cancel_bpt
(
struct
task_struct
*
);
extern
void
ptrace_cancel_bpt
(
struct
task_struct
*
);
extern
void
ptrace_set_bpt
(
struct
task_struct
*
);
extern
void
ptrace_break
(
struct
task_struct
*
,
struct
pt_regs
*
);
/*
* Clear a breakpoint, if one exists.
*/
static
inline
int
ptrace_cancel_bpt
(
struct
task_struct
*
tsk
)
{
int
nsaved
=
tsk
->
thread
.
debug
.
nsaved
;
if
(
nsaved
)
__ptrace_cancel_bpt
(
tsk
);
return
nsaved
;
}
arch/arm/kernel/signal.c
View file @
c90176df
...
...
@@ -216,8 +216,10 @@ asmlinkage int sys_sigreturn(struct pt_regs *regs)
goto
badframe
;
/* Send SIGTRAP if we're single-stepping */
if
(
ptrace_cancel_bpt
(
current
))
if
(
current
->
ptrace
&
PT_SINGLESTEP
)
{
ptrace_cancel_bpt
(
current
);
send_sig
(
SIGTRAP
,
current
,
1
);
}
return
regs
->
ARM_r0
;
...
...
@@ -256,8 +258,10 @@ asmlinkage int sys_rt_sigreturn(struct pt_regs *regs)
goto
badframe
;
/* Send SIGTRAP if we're single-stepping */
if
(
ptrace_cancel_bpt
(
current
))
if
(
current
->
ptrace
&
PT_SINGLESTEP
)
{
ptrace_cancel_bpt
(
current
);
send_sig
(
SIGTRAP
,
current
,
1
);
}
return
regs
->
ARM_r0
;
...
...
@@ -441,18 +445,47 @@ setup_rt_frame(int usig, struct k_sigaction *ka, siginfo_t *info,
return
err
;
}
static
inline
void
restart_syscall
(
struct
pt_regs
*
regs
)
{
regs
->
ARM_r0
=
regs
->
ARM_ORIG_r0
;
regs
->
ARM_pc
-=
thumb_mode
(
regs
)
?
2
:
4
;
}
/*
* OK, we're invoking a handler
*/
static
void
handle_signal
(
unsigned
long
sig
,
s
truct
k_sigaction
*
ka
,
s
iginfo_t
*
info
,
sigset_t
*
oldset
,
struct
pt_regs
*
regs
)
handle_signal
(
unsigned
long
sig
,
s
iginfo_t
*
info
,
sigset_t
*
oldset
,
s
truct
pt_regs
*
regs
,
int
syscall
)
{
struct
thread_info
*
thread
=
current_thread_info
();
struct
task_struct
*
tsk
=
current
;
struct
k_sigaction
*
ka
=
&
tsk
->
sighand
->
action
[
sig
-
1
];
int
usig
=
sig
;
int
ret
;
/*
* If we were from a system call, check for system call restarting...
*/
if
(
syscall
)
{
switch
(
regs
->
ARM_r0
)
{
case
-
ERESTART_RESTARTBLOCK
:
current_thread_info
()
->
restart_block
.
fn
=
do_no_restart_syscall
;
case
-
ERESTARTNOHAND
:
regs
->
ARM_r0
=
-
EINTR
;
break
;
case
-
ERESTARTSYS
:
if
(
!
(
ka
->
sa
.
sa_flags
&
SA_RESTART
))
{
regs
->
ARM_r0
=
-
EINTR
;
break
;
}
/* fallthrough */
case
-
ERESTARTNOINTR
:
restart_syscall
(
regs
);
}
}
/*
* translate the signal
*/
...
...
@@ -504,7 +537,7 @@ handle_signal(unsigned long sig, struct k_sigaction *ka,
static
int
do_signal
(
sigset_t
*
oldset
,
struct
pt_regs
*
regs
,
int
syscall
)
{
siginfo_t
info
;
int
si
ngle_stepping
;
int
si
gnr
;
/*
* We want the common case to go fast, which
...
...
@@ -515,130 +548,14 @@ static int do_signal(sigset_t *oldset, struct pt_regs *regs, int syscall)
if
(
!
user_mode
(
regs
))
return
0
;
single_stepping
=
ptrace_cancel_bpt
(
current
);
for
(;;)
{
unsigned
long
signr
=
0
;
struct
k_sigaction
*
ka
;
spin_lock_irq
(
&
current
->
sighand
->
siglock
);
signr
=
dequeue_signal
(
current
,
&
current
->
blocked
,
&
info
);
spin_unlock_irq
(
&
current
->
sighand
->
siglock
);
if
(
!
signr
)
break
;
if
(
current
->
ptrace
&
PT_SINGLESTEP
)
ptrace_cancel_bpt
(
current
);
if
((
current
->
ptrace
&
PT_PTRACED
)
&&
signr
!=
SIGKILL
)
{
/* Let the debugger run. */
current
->
exit_code
=
signr
;
set_current_state
(
TASK_STOPPED
);
notify_parent
(
current
,
SIGCHLD
);
schedule
();
single_stepping
|=
ptrace_cancel_bpt
(
current
);
/* We're back. Did the debugger cancel the sig? */
signr
=
current
->
exit_code
;
if
(
signr
==
0
)
continue
;
current
->
exit_code
=
0
;
/* The debugger continued. Ignore SIGSTOP. */
if
(
signr
==
SIGSTOP
)
continue
;
/* Update the siginfo structure. Is this good? */
if
(
signr
!=
info
.
si_signo
)
{
info
.
si_signo
=
signr
;
info
.
si_errno
=
0
;
info
.
si_code
=
SI_USER
;
info
.
si_pid
=
current
->
parent
->
pid
;
info
.
si_uid
=
current
->
parent
->
uid
;
}
/* If the (new) signal is now blocked, requeue it. */
if
(
sigismember
(
&
current
->
blocked
,
signr
))
{
send_sig_info
(
signr
,
&
info
,
current
);
continue
;
}
}
ka
=
&
current
->
sig
->
action
[
signr
-
1
];
if
(
ka
->
sa
.
sa_handler
==
SIG_IGN
)
{
if
(
signr
!=
SIGCHLD
)
continue
;
/* Check for SIGCHLD: it's special. */
while
(
sys_wait4
(
-
1
,
NULL
,
WNOHANG
,
NULL
)
>
0
)
/* nothing */
;
continue
;
}
if
(
ka
->
sa
.
sa_handler
==
SIG_DFL
)
{
int
exit_code
=
signr
;
/* Init gets no signals it doesn't want. */
if
(
current
->
pid
==
1
)
continue
;
switch
(
signr
)
{
case
SIGCONT
:
case
SIGCHLD
:
case
SIGWINCH
:
case
SIGURG
:
continue
;
case
SIGTSTP
:
case
SIGTTIN
:
case
SIGTTOU
:
if
(
is_orphaned_pgrp
(
current
->
pgrp
))
continue
;
/* FALLTHRU */
case
SIGSTOP
:
{
struct
signal_struct
*
sig
;
set_current_state
(
TASK_STOPPED
);
current
->
exit_code
=
signr
;
sig
=
current
->
parent
->
sig
;
if
(
sig
&&
!
(
sig
->
action
[
SIGCHLD
-
1
].
sa
.
sa_flags
&
SA_NOCLDSTOP
))
notify_parent
(
current
,
SIGCHLD
);
schedule
();
single_stepping
|=
ptrace_cancel_bpt
(
current
);
continue
;
}
case
SIGQUIT
:
case
SIGILL
:
case
SIGTRAP
:
case
SIGABRT
:
case
SIGFPE
:
case
SIGSEGV
:
case
SIGBUS
:
case
SIGSYS
:
case
SIGXCPU
:
case
SIGXFSZ
:
if
(
do_coredump
(
signr
,
exit_code
,
regs
))
exit_code
|=
0x80
;
/* FALLTHRU */
default:
sig_exit
(
signr
,
exit_code
,
&
info
);
/* NOTREACHED */
}
}
/* Are we from a system call? */
if
(
syscall
)
{
/* If so, check system call restarting.. */
switch
(
regs
->
ARM_r0
)
{
case
-
ERESTART_RESTARTBLOCK
:
current_thread_info
()
->
restart_block
.
fn
=
do_no_restart_syscall
;
case
-
ERESTARTNOHAND
:
regs
->
ARM_r0
=
-
EINTR
;
break
;
case
-
ERESTARTSYS
:
if
(
!
(
ka
->
sa
.
sa_flags
&
SA_RESTART
))
{
regs
->
ARM_r0
=
-
EINTR
;
break
;
}
/* fallthrough */
case
-
ERESTARTNOINTR
:
regs
->
ARM_r0
=
regs
->
ARM_ORIG_r0
;
regs
->
ARM_pc
-=
4
;
}
}
/* Whee! Actually deliver the signal. */
handle_signal
(
signr
,
ka
,
&
info
,
oldset
,
regs
);
if
(
single_stepping
)
ptrace_set_bpt
(
current
);
signr
=
get_signal_to_deliver
(
&
info
,
regs
,
NULL
);
if
(
signr
>
0
)
{
handle_signal
(
signr
,
&
info
,
oldset
,
regs
,
syscall
);
if
(
current
->
ptrace
&
PT_SINGLESTEP
)
ptrace_set_bpt
(
current
);
return
1
;
}
...
...
@@ -668,11 +585,10 @@ static int do_signal(sigset_t *oldset, struct pt_regs *regs, int syscall)
if
(
regs
->
ARM_r0
==
-
ERESTARTNOHAND
||
regs
->
ARM_r0
==
-
ERESTARTSYS
||
regs
->
ARM_r0
==
-
ERESTARTNOINTR
)
{
regs
->
ARM_r0
=
regs
->
ARM_ORIG_r0
;
regs
->
ARM_pc
-=
4
;
restart_syscall
(
regs
);
}
}
if
(
single_stepping
)
if
(
current
->
ptrace
&
PT_SINGLESTEP
)
ptrace_set_bpt
(
current
);
return
0
;
}
...
...
arch/arm/kernel/traps.c
View file @
c90176df
...
...
@@ -52,9 +52,14 @@ static const char *handler[]= { "prefetch abort", "data abort", "address excepti
void
dump_backtrace_entry
(
unsigned
long
where
,
unsigned
long
from
)
{
#ifdef CONFIG_KALLSYMS
printk
(
"[<%08lx>] "
,
where
);
print_symbol
(
"(%s) "
,
where
);
printk
(
"from [<%08lx>] "
,
from
);
print_symbol
(
"(%s)
\n
"
,
from
);
#else
printk
(
"Function entered at [<%08lx>] from [<%08lx>]
\n
"
,
where
,
from
);
print_symbol
(
" %s"
,
where
);
printk
(
"
\n
"
);
#endif
}
/*
...
...
@@ -503,11 +508,11 @@ baddataabort(int code, unsigned long instr, struct pt_regs *regs)
die_if_kernel
(
"unknown data abort code"
,
regs
,
instr
);
}
void
__bug
(
const
char
*
file
,
int
line
,
void
*
data
)
vo
latile
vo
id
__bug
(
const
char
*
file
,
int
line
,
void
*
data
)
{
printk
(
KERN_CRIT
"kernel BUG at %s:%d!"
,
file
,
line
);
if
(
data
)
printk
(
KERN_CRIT
" - extra data = %p"
,
data
);
printk
(
" - extra data = %p"
,
data
);
printk
(
"
\n
"
);
*
(
int
*
)
0
=
0
;
}
...
...
arch/arm/lib/backtrace.S
View file @
c90176df
...
...
@@ -82,11 +82,20 @@ ENTRY(c_backtrace)
teq
r3
,
r2
bleq
.
Ldumpstm
teq
frame
,
next
movne
frame
,
next
teqne
frame
,
#
0
bne
3
b
LOADREGS
(
fd
,
sp
!,
{
r4
-
r8
,
pc
})
/
*
*
A
zero
next
framepointer
means
we
're done.
*/
teq
next
,
#
0
LOADREGS
(
eqfd
,
sp
!,
{
r4
-
r8
,
pc
})
/
*
*
The
next
framepointer
must
be
above
the
*
current
framepointer
.
*/
cmp
next
,
frame
mov
frame
,
next
bhi
3
b
b
1007
f
/*
*
Fixup
for
LDMDB
...
...
arch/arm/mach-epxa10db/irq.c
View file @
c90176df
...
...
@@ -19,6 +19,9 @@
*/
#include <linux/init.h>
#include <linux/ioport.h>
#include <linux/stddef.h>
#include <linux/timer.h>
#include <linux/list.h>
#include <asm/io.h>
#include <asm/hardware.h>
#include <asm/irq.h>
...
...
arch/arm/mach-footbridge/irq.c
View file @
c90176df
...
...
@@ -15,6 +15,7 @@
* 16-Mar-1999 RMK Added autodetect of ISA PICs
*/
#include <linux/ioport.h>
#include <linux/list.h>
#include <linux/init.h>
#include <asm/mach/irq.h>
...
...
arch/arm/mach-footbridge/isa-irq.c
View file @
c90176df
...
...
@@ -16,6 +16,7 @@
*/
#include <linux/ioport.h>
#include <linux/interrupt.h>
#include <linux/list.h>
#include <linux/init.h>
#include <asm/mach/irq.h>
...
...
arch/arm/mach-iop310/iop310-irq.c
View file @
c90176df
...
...
@@ -15,6 +15,7 @@
*/
#include <linux/init.h>
#include <linux/interrupt.h>
#include <linux/list.h>
#include <asm/mach/irq.h>
#include <asm/irq.h>
...
...
arch/arm/mach-iop310/iop310-pci.c
View file @
c90176df
...
...
@@ -360,6 +360,8 @@ int iop310_setup(int nr, struct pci_sys_data *sys)
if
(
!
res
)
panic
(
"PCI: unable to alloc resources"
);
memset
(
res
,
0
,
sizeof
(
struct
resource
)
*
2
);
switch
(
nr
)
{
case
0
:
res
[
0
].
start
=
IOP310_PCIPRI_LOWER_IO
+
0x6e000000
;
...
...
arch/arm/mach-iop310/iq80310-irq.c
View file @
c90176df
...
...
@@ -15,6 +15,7 @@
* Fixes for various revision boards - DS
*/
#include <linux/init.h>
#include <linux/list.h>
#include <asm/irq.h>
#include <asm/mach/irq.h>
...
...
arch/arm/mach-iop310/xs80200-irq.c
View file @
c90176df
...
...
@@ -11,6 +11,7 @@
* published by the Free Software Foundation.
*/
#include <linux/init.h>
#include <linux/list.h>
#include <asm/mach/irq.h>
#include <asm/irq.h>
...
...
arch/arm/mach-pxa/irq.c
View file @
c90176df
...
...
@@ -85,19 +85,6 @@ static int pxa_gpio_irq_type(unsigned int irq, unsigned int type)
return
0
;
}
/*
* Since we can't actually physically mask edge triggered interrupts
* without the risk of missing transitions, we therefore logically mask
* them and defer their processing through tis function.
*/
static
void
pxa_manual_rerun
(
unsigned
int
irq
)
{
struct
pt_regs
regs
;
memset
(
&
regs
,
0
,
sizeof
(
regs
));
irq_desc
[
irq
].
handle
(
irq
,
&
irq_desc
[
irq
],
&
regs
);
}
/*
* GPIO IRQs must be acknoledged. This is for GPIO 0 and 1.
*/
...
...
@@ -111,7 +98,6 @@ static struct irqchip pxa_low_gpio_chip = {
.
ack
=
pxa_ack_low_gpio
,
.
mask
=
pxa_mask_irq
,
.
unmask
=
pxa_unmask_irq
,
.
rerun
=
pxa_manual_rerun
,
.
type
=
pxa_gpio_irq_type
,
};
...
...
arch/arm/mach-rpc/irq.c
View file @
c90176df
#include <linux/init.h>
#include <linux/list.h>
#include <asm/mach/irq.h>
#include <asm/hardware/iomd.h>
...
...
arch/arm/mach-sa1100/irq.c
View file @
c90176df
...
...
@@ -13,6 +13,7 @@
#include <linux/module.h>
#include <linux/ioport.h>
#include <linux/ptrace.h>
#include <linux/device.h>
#include <asm/hardware.h>
#include <asm/irq.h>
...
...
@@ -24,20 +25,12 @@
/*
* SA1100 GPIO edge detection for IRQs:
* IRQs are generated on Falling-Edge, Rising-Edge, or both.
* This must be called *before* the appropriate IRQ is registered.
* Use this instead of directly setting GRER/GFER.
*/
static
int
GPIO_IRQ_rising_edge
;
static
int
GPIO_IRQ_falling_edge
;
static
int
GPIO_IRQ_mask
=
(
1
<<
11
)
-
1
;
static
void
sa1100_manual_rerun
(
unsigned
int
irq
)
{
struct
pt_regs
regs
;
memset
(
&
regs
,
0
,
sizeof
(
regs
));
irq_desc
[
irq
].
handle
(
irq
,
&
irq_desc
[
irq
],
&
regs
);
}
/*
* To get the GPIO number from an IRQ number
*/
...
...
@@ -105,7 +98,6 @@ static struct irqchip sa1100_low_gpio_chip = {
.
ack
=
sa1100_low_gpio_ack
,
.
mask
=
sa1100_low_gpio_mask
,
.
unmask
=
sa1100_low_gpio_unmask
,
.
rerun
=
sa1100_manual_rerun
,
.
type
=
sa1100_gpio_type
,
.
wake
=
sa1100_low_gpio_wake
,
};
...
...
@@ -189,7 +181,6 @@ static struct irqchip sa1100_high_gpio_chip = {
.
ack
=
sa1100_high_gpio_ack
,
.
mask
=
sa1100_high_gpio_mask
,
.
unmask
=
sa1100_high_gpio_unmask
,
.
rerun
=
sa1100_manual_rerun
,
.
type
=
sa1100_gpio_type
,
.
wake
=
sa1100_high_gpio_wake
,
};
...
...
@@ -212,7 +203,6 @@ static struct irqchip sa1100_normal_chip = {
.
ack
=
sa1100_mask_irq
,
.
mask
=
sa1100_mask_irq
,
.
unmask
=
sa1100_unmask_irq
,
/* rerun should never be called */
};
static
struct
resource
irq_resource
=
{
...
...
@@ -267,10 +257,4 @@ void __init sa1100_init_irq(void)
*/
set_irq_chip
(
IRQ_GPIO11_27
,
&
sa1100_normal_chip
);
set_irq_chained_handler
(
IRQ_GPIO11_27
,
sa1100_high_gpio_handler
);
/*
* We generally don't want the LCD IRQ being
* enabled as soon as we request it.
*/
set_irq_flags
(
IRQ_LCD
,
IRQF_VALID
/* | IRQF_NOAUTOEN*/
);
}
arch/arm/mach-sa1100/xp860.c
View file @
c90176df
...
...
@@ -15,9 +15,9 @@
#include <asm/mach/arch.h>
#include <asm/mach/map.h>
#include <asm/mach/serial_sa1100.h>
#include <asm/hardware/sa1111.h>
#include "generic.h"
#include "sa1111.h"
static
void
xp860_power_off
(
void
)
...
...
arch/arm/mm/consistent.c
View file @
c90176df
...
...
@@ -83,7 +83,7 @@ static void vm_region_dump(struct vm_region *head, char *fn)
struct vm_region *c;
printk("Consistent Allocation Map (%s):\n", fn);
list_for_each_entry(c, &head->list, vm_list) {
list_for_each_entry(c, &head->
vm_
list, vm_list) {
printk(" %p: %08lx - %08lx (0x%08x)\n", c,
c->vm_start, c->vm_end, c->vm_end - c->vm_start);
}
...
...
arch/arm/mm/proc-xscale.S
View file @
c90176df
...
...
@@ -678,7 +678,7 @@ __xscale_setup:
mcr
p15
,
0
,
r0
,
c15
,
c1
,
0
@
affects
USR
or
SVC
modes
mrc
p15
,
0
,
r0
,
c1
,
c0
,
0
@
get
control
register
bic
r0
,
r0
,
#
0x0200
@
....
..
R
.
....
....
bic
r0
,
r0
,
#
0x00
82
@
....
....
B
...
..
A
.
bic
r0
,
r0
,
#
0x00
02
@
....
....
.
...
..
A
.
orr
r0
,
r0
,
#
0x0005
@
....
....
....
.
C
.
M
orr
r0
,
r0
,
#
0x3900
@
..
VI
Z
..
S
....
....
mov
pc
,
lr
...
...
arch/arm/vmlinux-armv.lds.in
View file @
c90176df
...
...
@@ -7,7 +7,11 @@
OUTPUT_ARCH(arm)
ENTRY(stext)
#ifndef __ARMEB__
jiffies = jiffies_64;
#else
jiffies = jiffies_64 + 4;
#endif
SECTIONS
{
. = TEXTADDR;
...
...
drivers/acorn/scsi/acornscsi.c
View file @
c90176df
...
...
@@ -116,7 +116,7 @@
#ifdef DEBUG_TARGET
#define DBG(cmd,xxx...) \
if (cmd->
target
== DEBUG_TARGET) { \
if (cmd->
device->id
== DEBUG_TARGET) { \
xxx; \
}
#else
...
...
@@ -575,7 +575,7 @@ static
char
acornscsi_target
(
AS_Host
*
host
)
{
if
(
host
->
SCpnt
)
return
'0'
+
host
->
SCpnt
->
target
;
return
'0'
+
host
->
SCpnt
->
device
->
id
;
return
'H'
;
}
...
...
@@ -742,7 +742,7 @@ intr_ret_t acornscsi_kick(AS_Host *host)
* In this case, we don't want to write to the registers
*/
if
(
!
(
sbic_arm_read
(
host
->
scsi
.
io_port
,
ASR
)
&
(
ASR_INT
|
ASR_BSY
|
ASR_CIP
)))
{
sbic_arm_write
(
host
->
scsi
.
io_port
,
DESTID
,
SCpnt
->
target
);
sbic_arm_write
(
host
->
scsi
.
io_port
,
DESTID
,
SCpnt
->
device
->
id
);
sbic_arm_write
(
host
->
scsi
.
io_port
,
CMND
,
CMND_SELWITHATN
);
}
...
...
@@ -759,7 +759,7 @@ intr_ret_t acornscsi_kick(AS_Host *host)
#if (DEBUG & (DEBUG_ABORT|DEBUG_CONNECT))
DBG
(
SCpnt
,
printk
(
"scsi%d.%c: starting cmd %02X
\n
"
,
host
->
host
->
host_no
,
'0'
+
SCpnt
->
target
,
host
->
host
->
host_no
,
'0'
+
SCpnt
->
device
->
id
,
SCpnt
->
cmnd
[
0
]));
#endif
...
...
@@ -775,7 +775,7 @@ intr_ret_t acornscsi_kick(AS_Host *host)
SCpnt
->
tag
=
SCpnt
->
device
->
current_tag
;
}
else
#endif
set_bit
(
SCpnt
->
target
*
8
+
SCpnt
->
lun
,
host
->
busyluns
);
set_bit
(
SCpnt
->
device
->
id
*
8
+
SCpnt
->
device
->
lun
,
host
->
busyluns
);
host
->
stats
.
removes
+=
1
;
...
...
@@ -868,7 +868,7 @@ void acornscsi_done(AS_Host *host, Scsi_Cmnd **SCpntp, unsigned int result)
host
->
host
->
host_no
,
SCpnt
->
result
);
print_command
(
SCpnt
->
cmnd
);
acornscsi_dumpdma
(
host
,
"done"
);
acornscsi_dumplog
(
host
,
SCpnt
->
target
);
acornscsi_dumplog
(
host
,
SCpnt
->
device
->
id
);
SCpnt
->
result
&=
0xffff
;
SCpnt
->
result
|=
DID_ERROR
<<
16
;
}
...
...
@@ -878,7 +878,7 @@ void acornscsi_done(AS_Host *host, Scsi_Cmnd **SCpntp, unsigned int result)
if
(
!
SCpnt
->
scsi_done
)
panic
(
"scsi%d.H: null scsi_done function in acornscsi_done"
,
host
->
host
->
host_no
);
clear_bit
(
SCpnt
->
target
*
8
+
SCpnt
->
lun
,
host
->
busyluns
);
clear_bit
(
SCpnt
->
device
->
id
*
8
+
SCpnt
->
device
->
lun
,
host
->
busyluns
);
SCpnt
->
scsi_done
(
SCpnt
);
}
else
...
...
@@ -1035,7 +1035,7 @@ void acornscsi_dma_setup(AS_Host *host, dmadir_t direction)
if
(
direction
==
DMA_OUT
)
{
#if (DEBUG & DEBUG_NO_WRITE)
if
(
NO_WRITE
&
(
1
<<
host
->
SCpnt
->
target
))
{
if
(
NO_WRITE
&
(
1
<<
host
->
SCpnt
->
device
->
id
))
{
printk
(
KERN_CRIT
"scsi%d.%c: I can't handle DMA_OUT!
\n
"
,
host
->
host
->
host_no
,
acornscsi_target
(
host
));
return
;
...
...
@@ -1511,7 +1511,7 @@ void acornscsi_message(AS_Host *host)
if
(
host
->
scsi
.
phase
!=
PHASE_STATUSIN
)
{
printk
(
KERN_ERR
"scsi%d.%c: command complete following non-status in phase?
\n
"
,
host
->
host
->
host_no
,
acornscsi_target
(
host
));
acornscsi_dumplog
(
host
,
host
->
SCpnt
->
target
);
acornscsi_dumplog
(
host
,
host
->
SCpnt
->
device
->
id
);
}
host
->
scsi
.
phase
=
PHASE_DONE
;
host
->
scsi
.
SCp
.
Message
=
message
[
0
];
...
...
@@ -1567,8 +1567,8 @@ void acornscsi_message(AS_Host *host)
* transfer. Re-initiate sync transfer negociation now, and if
* we got a REJECT in response to SDTR, then it'll be set to DONE.
*/
if (host->device[host->SCpnt->
target
].sync_state == SYNC_SENT_REQUEST)
host->device[host->SCpnt->
target
].sync_state = SYNC_NEGOCIATE;
if (host->device[host->SCpnt->
device->id
].sync_state == SYNC_SENT_REQUEST)
host->device[host->SCpnt->
device->id
].sync_state = SYNC_NEGOCIATE;
#endif
/*
...
...
@@ -1591,7 +1591,7 @@ void acornscsi_message(AS_Host *host)
printk
(
KERN_NOTICE
"scsi%d.%c: disabling tagged queueing
\n
"
,
host
->
host
->
host_no
,
acornscsi_target
(
host
));
host
->
SCpnt
->
device
->
tagged_queue
=
0
;
set_bit
(
host
->
SCpnt
->
target
*
8
+
host
->
SCpnt
->
lun
,
host
->
busyluns
);
set_bit
(
host
->
SCpnt
->
device
->
id
*
8
+
host
->
SCpnt
->
device
->
lun
,
host
->
busyluns
);
break
;
#endif
case
EXTENDED_MESSAGE
|
(
EXTENDED_SDTR
<<
8
):
...
...
@@ -1600,9 +1600,9 @@ void acornscsi_message(AS_Host *host)
*/
printk
(
KERN_NOTICE
"scsi%d.%c: Using asynchronous transfer
\n
"
,
host
->
host
->
host_no
,
acornscsi_target
(
host
));
host
->
device
[
host
->
SCpnt
->
target
].
sync_xfer
=
SYNCHTRANSFER_2DBA
;
host
->
device
[
host
->
SCpnt
->
target
].
sync_state
=
SYNC_ASYNCHRONOUS
;
sbic_arm_write
(
host
->
scsi
.
io_port
,
SYNCHTRANSFER
,
host
->
device
[
host
->
SCpnt
->
target
].
sync_xfer
);
host
->
device
[
host
->
SCpnt
->
device
->
id
].
sync_xfer
=
SYNCHTRANSFER_2DBA
;
host
->
device
[
host
->
SCpnt
->
device
->
id
].
sync_state
=
SYNC_ASYNCHRONOUS
;
sbic_arm_write
(
host
->
scsi
.
io_port
,
SYNCHTRANSFER
,
host
->
device
[
host
->
SCpnt
->
device
->
id
].
sync_xfer
);
break
;
default:
...
...
@@ -1625,18 +1625,18 @@ void acornscsi_message(AS_Host *host)
switch
(
message
[
2
])
{
#ifdef CONFIG_SCSI_ACORNSCSI_SYNC
case
EXTENDED_SDTR
:
if
(
host
->
device
[
host
->
SCpnt
->
target
].
sync_state
==
SYNC_SENT_REQUEST
)
{
if
(
host
->
device
[
host
->
SCpnt
->
device
->
id
].
sync_state
==
SYNC_SENT_REQUEST
)
{
/*
* We requested synchronous transfers. This isn't quite right...
* We can only say if this succeeded if we proceed on to execute the
* command from this message. If we get a MESSAGE PARITY ERROR,
* and the target retries fail, then we fallback to asynchronous mode
*/
host
->
device
[
host
->
SCpnt
->
target
].
sync_state
=
SYNC_COMPLETED
;
host
->
device
[
host
->
SCpnt
->
device
->
id
].
sync_state
=
SYNC_COMPLETED
;
printk
(
KERN_NOTICE
"scsi%d.%c: Using synchronous transfer, offset %d, %d ns
\n
"
,
host
->
host
->
host_no
,
acornscsi_target
(
host
),
message
[
4
],
message
[
3
]
*
4
);
host
->
device
[
host
->
SCpnt
->
target
].
sync_xfer
=
host
->
device
[
host
->
SCpnt
->
device
->
id
].
sync_xfer
=
calc_sync_xfer
(
message
[
3
]
*
4
,
message
[
4
]);
}
else
{
unsigned
char
period
,
length
;
...
...
@@ -1649,10 +1649,10 @@ void acornscsi_message(AS_Host *host)
length
=
min_t
(
unsigned
int
,
message
[
4
],
sdtr_size
);
msgqueue_addmsg
(
&
host
->
scsi
.
msgs
,
5
,
EXTENDED_MESSAGE
,
3
,
EXTENDED_SDTR
,
period
,
length
);
host
->
device
[
host
->
SCpnt
->
target
].
sync_xfer
=
host
->
device
[
host
->
SCpnt
->
device
->
id
].
sync_xfer
=
calc_sync_xfer
(
period
*
4
,
length
);
}
sbic_arm_write
(
host
->
scsi
.
io_port
,
SYNCHTRANSFER
,
host
->
device
[
host
->
SCpnt
->
target
].
sync_xfer
);
sbic_arm_write
(
host
->
scsi
.
io_port
,
SYNCHTRANSFER
,
host
->
device
[
host
->
SCpnt
->
device
->
id
].
sync_xfer
);
break
;
#else
/* We do not accept synchronous transfers. Respond with a
...
...
@@ -1738,8 +1738,8 @@ void acornscsi_buildmessages(AS_Host *host)
#endif
msgqueue_addmsg
(
&
host
->
scsi
.
msgs
,
1
,
IDENTIFY
(
host
->
device
[
host
->
SCpnt
->
target
].
disconnect_ok
,
host
->
SCpnt
->
lun
));
IDENTIFY
(
host
->
device
[
host
->
SCpnt
->
device
->
id
].
disconnect_ok
,
host
->
SCpnt
->
device
->
lun
));
#if 0
/* does the device need the current command aborted */
...
...
@@ -1764,8 +1764,8 @@ void acornscsi_buildmessages(AS_Host *host)
#endif
#ifdef CONFIG_SCSI_ACORNSCSI_SYNC
if
(
host
->
device
[
host
->
SCpnt
->
target
].
sync_state
==
SYNC_NEGOCIATE
)
{
host
->
device
[
host
->
SCpnt
->
target
].
sync_state
=
SYNC_SENT_REQUEST
;
if
(
host
->
device
[
host
->
SCpnt
->
device
->
id
].
sync_state
==
SYNC_NEGOCIATE
)
{
host
->
device
[
host
->
SCpnt
->
device
->
id
].
sync_state
=
SYNC_SENT_REQUEST
;
msgqueue_addmsg
(
&
host
->
scsi
.
msgs
,
5
,
EXTENDED_MESSAGE
,
3
,
EXTENDED_SDTR
,
sdtr_period
/
4
,
sdtr_size
);
...
...
@@ -1792,7 +1792,7 @@ int acornscsi_starttransfer(AS_Host *host)
residual
=
host
->
SCpnt
->
request_bufflen
-
host
->
scsi
.
SCp
.
scsi_xferred
;
sbic_arm_write
(
host
->
scsi
.
io_port
,
SYNCHTRANSFER
,
host
->
device
[
host
->
SCpnt
->
target
].
sync_xfer
);
sbic_arm_write
(
host
->
scsi
.
io_port
,
SYNCHTRANSFER
,
host
->
device
[
host
->
SCpnt
->
device
->
id
].
sync_xfer
);
sbic_arm_writenext
(
host
->
scsi
.
io_port
,
residual
>>
16
);
sbic_arm_writenext
(
host
->
scsi
.
io_port
,
residual
>>
8
);
sbic_arm_writenext
(
host
->
scsi
.
io_port
,
residual
);
...
...
@@ -1828,7 +1828,7 @@ int acornscsi_reconnect(AS_Host *host)
if
(
host
->
SCpnt
&&
!
host
->
scsi
.
disconnectable
)
{
printk
(
KERN_ERR
"scsi%d.%d: reconnected while command in "
"progress to target %d?
\n
"
,
host
->
host
->
host_no
,
target
,
host
->
SCpnt
->
target
);
host
->
host
->
host_no
,
target
,
host
->
SCpnt
->
device
->
id
);
host
->
SCpnt
=
NULL
;
}
...
...
@@ -1839,7 +1839,7 @@ int acornscsi_reconnect(AS_Host *host)
host
->
scsi
.
reconnected
.
tag
=
0
;
if
(
host
->
scsi
.
disconnectable
&&
host
->
SCpnt
&&
host
->
SCpnt
->
target
==
target
&&
host
->
SCpnt
->
lun
==
lun
)
host
->
SCpnt
->
device
->
id
==
target
&&
host
->
SCpnt
->
device
->
lun
==
lun
)
ok
=
1
;
if
(
!
ok
&&
queue_probetgtlun
(
&
host
->
queues
.
disconnected
,
target
,
lun
))
...
...
@@ -1876,9 +1876,9 @@ int acornscsi_reconnect_finish(AS_Host *host)
{
if
(
host
->
scsi
.
disconnectable
&&
host
->
SCpnt
)
{
host
->
scsi
.
disconnectable
=
0
;
if
(
host
->
SCpnt
->
target
==
host
->
scsi
.
reconnected
.
target
&&
host
->
SCpnt
->
lun
==
host
->
scsi
.
reconnected
.
lun
&&
host
->
SCpnt
->
tag
==
host
->
scsi
.
reconnected
.
tag
)
{
if
(
host
->
SCpnt
->
device
->
id
==
host
->
scsi
.
reconnected
.
target
&&
host
->
SCpnt
->
device
->
lun
==
host
->
scsi
.
reconnected
.
lun
&&
host
->
SCpnt
->
tag
==
host
->
scsi
.
reconnected
.
tag
)
{
#if (DEBUG & (DEBUG_QUEUES|DEBUG_DISCON))
DBG
(
host
->
SCpnt
,
printk
(
"scsi%d.%c: reconnected"
,
host
->
host
->
host_no
,
acornscsi_target
(
host
)));
...
...
@@ -1992,7 +1992,7 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
ADD_STATUS
(
8
,
ssr
,
host
->
scsi
.
phase
,
in_irq
);
if
(
host
->
SCpnt
&&
!
host
->
scsi
.
disconnectable
)
ADD_STATUS
(
host
->
SCpnt
->
target
,
ssr
,
host
->
scsi
.
phase
,
in_irq
);
ADD_STATUS
(
host
->
SCpnt
->
device
->
id
,
ssr
,
host
->
scsi
.
phase
,
in_irq
);
switch
(
ssr
)
{
case
0x00
:
/* reset state - not advanced */
...
...
@@ -2030,7 +2030,7 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
break
;
ssr
=
sbic_arm_read
(
host
->
scsi
.
io_port
,
SSR
);
ADD_STATUS
(
8
,
ssr
,
host
->
scsi
.
phase
,
1
);
ADD_STATUS
(
host
->
SCpnt
->
target
,
ssr
,
host
->
scsi
.
phase
,
1
);
ADD_STATUS
(
host
->
SCpnt
->
device
->
id
,
ssr
,
host
->
scsi
.
phase
,
1
);
goto
connected
;
case
0x42
:
/* select timed out */
...
...
@@ -2049,7 +2049,7 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
default:
printk
(
KERN_ERR
"scsi%d.%c: PHASE_CONNECTING, SSR %02X?
\n
"
,
host
->
host
->
host_no
,
acornscsi_target
(
host
),
ssr
);
acornscsi_dumplog
(
host
,
host
->
SCpnt
?
host
->
SCpnt
->
target
:
8
);
acornscsi_dumplog
(
host
,
host
->
SCpnt
?
host
->
SCpnt
->
device
->
id
:
8
);
acornscsi_abortcmd
(
host
,
host
->
SCpnt
->
tag
);
}
return
INTR_PROCESSING
;
...
...
@@ -2085,7 +2085,7 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
default:
printk
(
KERN_ERR
"scsi%d.%c: PHASE_CONNECTED, SSR %02X?
\n
"
,
host
->
host
->
host_no
,
acornscsi_target
(
host
),
ssr
);
acornscsi_dumplog
(
host
,
host
->
SCpnt
?
host
->
SCpnt
->
target
:
8
);
acornscsi_dumplog
(
host
,
host
->
SCpnt
?
host
->
SCpnt
->
device
->
id
:
8
);
acornscsi_abortcmd
(
host
,
host
->
SCpnt
->
tag
);
}
return
INTR_PROCESSING
;
...
...
@@ -2123,7 +2123,7 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
default:
printk
(
KERN_ERR
"scsi%d.%c: PHASE_MSGOUT, SSR %02X?
\n
"
,
host
->
host
->
host_no
,
acornscsi_target
(
host
),
ssr
);
acornscsi_dumplog
(
host
,
host
->
SCpnt
?
host
->
SCpnt
->
target
:
8
);
acornscsi_dumplog
(
host
,
host
->
SCpnt
?
host
->
SCpnt
->
device
->
id
:
8
);
}
return
INTR_PROCESSING
;
...
...
@@ -2168,7 +2168,7 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
default:
printk
(
KERN_ERR
"scsi%d.%c: PHASE_COMMAND, SSR %02X?
\n
"
,
host
->
host
->
host_no
,
acornscsi_target
(
host
),
ssr
);
acornscsi_dumplog
(
host
,
host
->
SCpnt
?
host
->
SCpnt
->
target
:
8
);
acornscsi_dumplog
(
host
,
host
->
SCpnt
?
host
->
SCpnt
->
device
->
id
:
8
);
}
return
INTR_PROCESSING
;
...
...
@@ -2181,7 +2181,7 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
}
else
{
printk
(
KERN_ERR
"scsi%d.%c: PHASE_DISCONNECT, SSR %02X instead of disconnect?
\n
"
,
host
->
host
->
host_no
,
acornscsi_target
(
host
),
ssr
);
acornscsi_dumplog
(
host
,
host
->
SCpnt
?
host
->
SCpnt
->
target
:
8
);
acornscsi_dumplog
(
host
,
host
->
SCpnt
?
host
->
SCpnt
->
device
->
id
:
8
);
}
return
INTR_NEXT_COMMAND
;
...
...
@@ -2191,7 +2191,7 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
else
{
printk
(
KERN_ERR
"scsi%d.%c: PHASE_IDLE, SSR %02X while idle?
\n
"
,
host
->
host
->
host_no
,
acornscsi_target
(
host
),
ssr
);
acornscsi_dumplog
(
host
,
host
->
SCpnt
?
host
->
SCpnt
->
target
:
8
);
acornscsi_dumplog
(
host
,
host
->
SCpnt
?
host
->
SCpnt
->
device
->
id
:
8
);
}
return
INTR_PROCESSING
;
...
...
@@ -2206,7 +2206,7 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
*/
if
(
ssr
!=
0x8f
&&
!
acornscsi_reconnect_finish
(
host
))
return
INTR_IDLE
;
ADD_STATUS
(
host
->
SCpnt
->
target
,
ssr
,
host
->
scsi
.
phase
,
in_irq
);
ADD_STATUS
(
host
->
SCpnt
->
device
->
id
,
ssr
,
host
->
scsi
.
phase
,
in_irq
);
switch
(
ssr
)
{
case
0x88
:
/* data out phase */
/* -> PHASE_DATAOUT */
...
...
@@ -2251,7 +2251,7 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
default:
printk
(
KERN_ERR
"scsi%d.%c: PHASE_RECONNECTED, SSR %02X after reconnect?
\n
"
,
host
->
host
->
host_no
,
acornscsi_target
(
host
),
ssr
);
acornscsi_dumplog
(
host
,
host
->
SCpnt
?
host
->
SCpnt
->
target
:
8
);
acornscsi_dumplog
(
host
,
host
->
SCpnt
?
host
->
SCpnt
->
device
->
id
:
8
);
}
return
INTR_PROCESSING
;
...
...
@@ -2300,7 +2300,7 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
default:
printk
(
KERN_ERR
"scsi%d.%c: PHASE_DATAIN, SSR %02X?
\n
"
,
host
->
host
->
host_no
,
acornscsi_target
(
host
),
ssr
);
acornscsi_dumplog
(
host
,
host
->
SCpnt
?
host
->
SCpnt
->
target
:
8
);
acornscsi_dumplog
(
host
,
host
->
SCpnt
?
host
->
SCpnt
->
device
->
id
:
8
);
}
return
INTR_PROCESSING
;
...
...
@@ -2352,7 +2352,7 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
default:
printk
(
KERN_ERR
"scsi%d.%c: PHASE_DATAOUT, SSR %02X?
\n
"
,
host
->
host
->
host_no
,
acornscsi_target
(
host
),
ssr
);
acornscsi_dumplog
(
host
,
host
->
SCpnt
?
host
->
SCpnt
->
target
:
8
);
acornscsi_dumplog
(
host
,
host
->
SCpnt
?
host
->
SCpnt
->
device
->
id
:
8
);
}
return
INTR_PROCESSING
;
...
...
@@ -2373,7 +2373,7 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
default:
printk
(
KERN_ERR
"scsi%d.%c: PHASE_STATUSIN, SSR %02X instead of MESSAGE_IN?
\n
"
,
host
->
host
->
host_no
,
acornscsi_target
(
host
),
ssr
);
acornscsi_dumplog
(
host
,
host
->
SCpnt
?
host
->
SCpnt
->
target
:
8
);
acornscsi_dumplog
(
host
,
host
->
SCpnt
?
host
->
SCpnt
->
device
->
id
:
8
);
}
return
INTR_PROCESSING
;
...
...
@@ -2396,14 +2396,14 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
case
0x85
:
printk
(
"scsi%d.%c: strange message in disconnection
\n
"
,
host
->
host
->
host_no
,
acornscsi_target
(
host
));
acornscsi_dumplog
(
host
,
host
->
SCpnt
?
host
->
SCpnt
->
target
:
8
);
acornscsi_dumplog
(
host
,
host
->
SCpnt
?
host
->
SCpnt
->
device
->
id
:
8
);
acornscsi_done
(
host
,
&
host
->
SCpnt
,
DID_ERROR
);
break
;
default:
printk
(
KERN_ERR
"scsi%d.%c: PHASE_MSGIN, SSR %02X after message in?
\n
"
,
host
->
host
->
host_no
,
acornscsi_target
(
host
),
ssr
);
acornscsi_dumplog
(
host
,
host
->
SCpnt
?
host
->
SCpnt
->
target
:
8
);
acornscsi_dumplog
(
host
,
host
->
SCpnt
?
host
->
SCpnt
->
device
->
id
:
8
);
}
return
INTR_PROCESSING
;
...
...
@@ -2421,7 +2421,7 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
default:
printk
(
KERN_ERR
"scsi%d.%c: PHASE_DONE, SSR %02X instead of disconnect?
\n
"
,
host
->
host
->
host_no
,
acornscsi_target
(
host
),
ssr
);
acornscsi_dumplog
(
host
,
host
->
SCpnt
?
host
->
SCpnt
->
target
:
8
);
acornscsi_dumplog
(
host
,
host
->
SCpnt
?
host
->
SCpnt
->
device
->
id
:
8
);
}
return
INTR_PROCESSING
;
...
...
@@ -2447,14 +2447,14 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
default:
printk
(
KERN_ERR
"scsi%d.%c: PHASE_ABORTED, SSR %02X?
\n
"
,
host
->
host
->
host_no
,
acornscsi_target
(
host
),
ssr
);
acornscsi_dumplog
(
host
,
host
->
SCpnt
?
host
->
SCpnt
->
target
:
8
);
acornscsi_dumplog
(
host
,
host
->
SCpnt
?
host
->
SCpnt
->
device
->
id
:
8
);
}
return
INTR_PROCESSING
;
default:
printk
(
KERN_ERR
"scsi%d.%c: unknown driver phase %d
\n
"
,
host
->
host
->
host_no
,
acornscsi_target
(
host
),
ssr
);
acornscsi_dumplog
(
host
,
host
->
SCpnt
?
host
->
SCpnt
->
target
:
8
);
acornscsi_dumplog
(
host
,
host
->
SCpnt
?
host
->
SCpnt
->
device
->
id
:
8
);
}
return
INTR_PROCESSING
;
}
...
...
@@ -2531,9 +2531,9 @@ int acornscsi_queuecmd(Scsi_Cmnd *SCpnt, void (*done)(Scsi_Cmnd *))
}
#if (DEBUG & DEBUG_NO_WRITE)
if
(
acornscsi_cmdtype
(
SCpnt
->
cmnd
[
0
])
==
CMD_WRITE
&&
(
NO_WRITE
&
(
1
<<
SCpnt
->
target
)))
{
if
(
acornscsi_cmdtype
(
SCpnt
->
cmnd
[
0
])
==
CMD_WRITE
&&
(
NO_WRITE
&
(
1
<<
SCpnt
->
device
->
id
)))
{
printk
(
KERN_CRIT
"scsi%d.%c: WRITE attempted with NO_WRITE flag set
\n
"
,
SCpnt
->
host
->
host_no
,
'0'
+
SCpnt
->
target
);
SCpnt
->
host
->
host_no
,
'0'
+
SCpnt
->
device
->
id
);
SCpnt
->
result
=
DID_NO_CONNECT
<<
16
;
done
(
SCpnt
);
return
0
;
...
...
@@ -2708,7 +2708,7 @@ int acornscsi_abort(Scsi_Cmnd *SCpnt)
printk
(
KERN_WARNING
"acornscsi_abort: "
);
print_sbic_status
(
asr
,
ssr
,
host
->
scsi
.
phase
);
acornscsi_dumplog
(
host
,
SCpnt
->
target
);
acornscsi_dumplog
(
host
,
SCpnt
->
device
->
id
);
}
#endif
...
...
@@ -2724,7 +2724,7 @@ int acornscsi_abort(Scsi_Cmnd *SCpnt)
//#if (DEBUG & DEBUG_ABORT)
printk
(
"clear "
);
//#endif
clear_bit
(
SCpnt
->
target
*
8
+
SCpnt
->
lun
,
host
->
busyluns
);
clear_bit
(
SCpnt
->
device
->
id
*
8
+
SCpnt
->
device
->
lun
,
host
->
busyluns
);
/*
* We found the command, and cleared it out. Either
...
...
@@ -2758,7 +2758,7 @@ int acornscsi_abort(Scsi_Cmnd *SCpnt)
*/
default:
case
res_not_running
:
acornscsi_dumplog
(
host
,
SCpnt
->
target
);
acornscsi_dumplog
(
host
,
SCpnt
->
device
->
id
);
#if (DEBUG & DEBUG_ABORT)
result
=
SCSI_ABORT_SNOOZE
;
#else
...
...
@@ -2796,7 +2796,7 @@ int acornscsi_reset(Scsi_Cmnd *SCpnt, unsigned int reset_flags)
printk
(
KERN_WARNING
"acornscsi_reset: "
);
print_sbic_status
(
asr
,
ssr
,
host
->
scsi
.
phase
);
acornscsi_dumplog
(
host
,
SCpnt
->
target
);
acornscsi_dumplog
(
host
,
SCpnt
->
device
->
id
);
}
#endif
...
...
drivers/acorn/scsi/fas216.c
View file @
c90176df
...
...
@@ -96,6 +96,47 @@
static
int
level_mask
=
LOG_ERROR
;
static
int
__init
fas216_log_setup
(
char
*
str
)
{
char
*
s
;
level_mask
=
0
;
while
((
s
=
strsep
(
&
str
,
","
))
!=
NULL
)
{
switch
(
s
[
0
])
{
case
'a'
:
if
(
strcmp
(
s
,
"all"
)
==
0
)
level_mask
|=
-
1
;
break
;
case
'b'
:
if
(
strncmp
(
s
,
"bus"
,
3
)
==
0
)
level_mask
|=
LOG_BUSSERVICE
;
if
(
strncmp
(
s
,
"buf"
,
3
)
==
0
)
level_mask
|=
LOG_BUFFER
;
break
;
case
'c'
:
level_mask
|=
LOG_CONNECT
;
break
;
case
'e'
:
level_mask
|=
LOG_ERROR
;
break
;
case
'm'
:
level_mask
|=
LOG_MESSAGES
;
break
;
case
'n'
:
if
(
strcmp
(
s
,
"none"
)
==
0
)
level_mask
=
0
;
break
;
case
's'
:
level_mask
|=
LOG_FUNCTIONDONE
;
break
;
}
}
return
1
;
}
__setup
(
"fas216_logging="
,
fas216_log_setup
);
static
inline
unsigned
char
fas216_readb
(
FAS216_Info
*
info
,
unsigned
int
reg
)
{
unsigned
int
off
=
reg
<<
info
->
scsi
.
io_shift
;
...
...
@@ -244,7 +285,7 @@ static const char *fas216_drv_phase(FAS216_Info *info)
static
char
fas216_target
(
FAS216_Info
*
info
)
{
if
(
info
->
SCpnt
)
return
'0'
+
info
->
SCpnt
->
target
;
return
'0'
+
info
->
SCpnt
->
device
->
id
;
else
return
'H'
;
}
...
...
@@ -267,7 +308,7 @@ fas216_log_command(FAS216_Info *info, int level, Scsi_Cmnd *SCpnt, char *fmt, ..
return
;
va_start
(
args
,
fmt
);
fas216_do_log
(
info
,
'0'
+
SCpnt
->
target
,
fmt
,
args
);
fas216_do_log
(
info
,
'0'
+
SCpnt
->
device
->
id
,
fmt
,
args
);
va_end
(
args
);
printk
(
" CDB: "
);
...
...
@@ -495,7 +536,7 @@ static void fas216_set_sync(FAS216_Info *info, int target)
*/
static
void
fas216_handlesync
(
FAS216_Info
*
info
,
char
*
msg
)
{
struct
fas216_device
*
dev
=
&
info
->
device
[
info
->
SCpnt
->
target
];
struct
fas216_device
*
dev
=
&
info
->
device
[
info
->
SCpnt
->
device
->
id
];
enum
{
sync
,
async
,
none
,
reject
}
res
=
none
;
#ifdef SCSI2_SYNC
...
...
@@ -578,7 +619,7 @@ static void fas216_handlesync(FAS216_Info *info, char *msg)
dev
->
period
=
msg
[
3
];
dev
->
sof
=
msg
[
4
];
dev
->
stp
=
fas216_syncperiod
(
info
,
msg
[
3
]
*
4
);
fas216_set_sync
(
info
,
info
->
SCpnt
->
target
);
fas216_set_sync
(
info
,
info
->
SCpnt
->
device
->
id
);
break
;
case
reject
:
...
...
@@ -591,7 +632,7 @@ static void fas216_handlesync(FAS216_Info *info, char *msg)
dev
->
period
=
info
->
ifcfg
.
asyncperiod
/
4
;
dev
->
sof
=
0
;
dev
->
stp
=
info
->
scsi
.
async_stp
;
fas216_set_sync
(
info
,
info
->
SCpnt
->
target
);
fas216_set_sync
(
info
,
info
->
SCpnt
->
device
->
id
);
break
;
case
none
:
...
...
@@ -608,7 +649,7 @@ static void fas216_handlesync(FAS216_Info *info, char *msg)
*/
static
void
fas216_handlewide
(
FAS216_Info
*
info
,
char
*
msg
)
{
struct
fas216_device
*
dev
=
&
info
->
device
[
info
->
SCpnt
->
target
];
struct
fas216_device
*
dev
=
&
info
->
device
[
info
->
SCpnt
->
device
->
id
];
enum
{
wide
,
bit8
,
none
,
reject
}
res
=
none
;
#ifdef SCSI2_WIDE
...
...
@@ -725,7 +766,7 @@ static void fas216_updateptrs(FAS216_Info *info, int bytes_transferred)
bytes_transferred
-=
SCp
->
this_residual
;
if
(
!
next_SCp
(
SCp
)
&&
bytes_transferred
)
{
printk
(
KERN_WARNING
"scsi%d.%c: out of buffers
\n
"
,
info
->
host
->
host_no
,
'0'
+
info
->
SCpnt
->
target
);
info
->
host
->
host_no
,
'0'
+
info
->
SCpnt
->
device
->
id
);
return
;
}
}
...
...
@@ -848,7 +889,7 @@ static void fas216_transfer(FAS216_Info *info)
* use DMA mode. If we are using asynchronous transfers, we may
* use DMA mode or PIO mode.
*/
if
(
info
->
device
[
info
->
SCpnt
->
target
].
sof
)
if
(
info
->
device
[
info
->
SCpnt
->
device
->
id
].
sof
)
dmatype
=
fasdma_real_all
;
else
dmatype
=
fasdma_pio
;
...
...
@@ -1023,10 +1064,10 @@ fas216_reselected_intr(FAS216_Info *info)
info
->
origSCpnt
=
SCpnt
;
info
->
SCpnt
=
NULL
;
if
(
info
->
device
[
SCpnt
->
target
].
wide_state
==
neg_inprogress
)
info
->
device
[
SCpnt
->
target
].
wide_state
=
neg_wait
;
if
(
info
->
device
[
SCpnt
->
target
].
sync_state
==
neg_inprogress
)
info
->
device
[
SCpnt
->
target
].
sync_state
=
neg_wait
;
if
(
info
->
device
[
SCpnt
->
device
->
id
].
wide_state
==
neg_inprogress
)
info
->
device
[
SCpnt
->
device
->
id
].
wide_state
=
neg_wait
;
if
(
info
->
device
[
SCpnt
->
device
->
id
].
sync_state
==
neg_inprogress
)
info
->
device
[
SCpnt
->
device
->
id
].
sync_state
=
neg_wait
;
}
fas216_log
(
info
,
LOG_CONNECT
,
"reconnect phase=%02X"
,
info
->
scsi
.
phase
);
...
...
@@ -1073,7 +1114,7 @@ fas216_reselected_intr(FAS216_Info *info)
ok
=
0
;
if
(
info
->
scsi
.
disconnectable
&&
info
->
SCpnt
&&
info
->
SCpnt
->
target
==
target
&&
info
->
SCpnt
->
lun
==
identify_msg
)
info
->
SCpnt
->
device
->
id
==
target
&&
info
->
SCpnt
->
device
->
lun
==
identify_msg
)
ok
=
1
;
if
(
!
ok
&&
queue_probetgtlun
(
&
info
->
queues
.
disconnected
,
target
,
identify_msg
))
...
...
@@ -1118,15 +1159,15 @@ fas216_finish_reconnect(FAS216_Info *info)
fas216_checkmagic
(
info
);
fas216_log
(
info
,
LOG_CONNECT
,
"Connected: %1x %1x %02x, reconnected: %1x %1x %02x"
,
info
->
SCpnt
->
target
,
info
->
SCpnt
->
lun
,
info
->
SCpnt
->
tag
,
info
->
SCpnt
->
device
->
id
,
info
->
SCpnt
->
device
->
lun
,
info
->
SCpnt
->
tag
,
info
->
scsi
.
reconnected
.
target
,
info
->
scsi
.
reconnected
.
lun
,
info
->
scsi
.
reconnected
.
tag
);
if
(
info
->
scsi
.
disconnectable
&&
info
->
SCpnt
)
{
info
->
scsi
.
disconnectable
=
0
;
if
(
info
->
SCpnt
->
target
==
info
->
scsi
.
reconnected
.
target
&&
info
->
SCpnt
->
lun
==
info
->
scsi
.
reconnected
.
lun
&&
info
->
SCpnt
->
tag
==
info
->
scsi
.
reconnected
.
tag
)
{
if
(
info
->
SCpnt
->
device
->
id
==
info
->
scsi
.
reconnected
.
target
&&
info
->
SCpnt
->
device
->
lun
==
info
->
scsi
.
reconnected
.
lun
&&
info
->
SCpnt
->
tag
==
info
->
scsi
.
reconnected
.
tag
)
{
fas216_log
(
info
,
LOG_CONNECT
,
"reconnected"
);
}
else
{
queue_add_cmd_tail
(
&
info
->
queues
.
disconnected
,
info
->
SCpnt
);
...
...
@@ -1617,13 +1658,13 @@ static void fas216_busservice_intr(FAS216_Info *info, unsigned int stat, unsigne
* set of messages. If we have more than one byte to
* send, we need to assert ATN again.
*/
if
(
info
->
device
[
info
->
SCpnt
->
target
].
parity_check
)
{
if
(
info
->
device
[
info
->
SCpnt
->
device
->
id
].
parity_check
)
{
/*
* We were testing... good, the device
* supports parity checking.
*/
info
->
device
[
info
->
SCpnt
->
target
].
parity_check
=
0
;
info
->
device
[
info
->
SCpnt
->
target
].
parity_enabled
=
1
;
info
->
device
[
info
->
SCpnt
->
device
->
id
].
parity_check
=
0
;
info
->
device
[
info
->
SCpnt
->
device
->
id
].
parity_enabled
=
1
;
fas216_writeb
(
info
,
REG_CNTL1
,
info
->
scsi
.
cfg
[
0
]);
}
...
...
@@ -1831,11 +1872,11 @@ static void __fas216_start_command(FAS216_Info *info, Scsi_Cmnd *SCpnt)
fas216_cmd
(
info
,
CMD_FLUSHFIFO
);
/* load bus-id and timeout */
fas216_writeb
(
info
,
REG_SDID
,
BUSID
(
SCpnt
->
target
));
fas216_writeb
(
info
,
REG_SDID
,
BUSID
(
SCpnt
->
device
->
id
));
fas216_writeb
(
info
,
REG_STIM
,
info
->
ifcfg
.
select_timeout
);
/* synchronous transfers */
fas216_set_sync
(
info
,
SCpnt
->
target
);
fas216_set_sync
(
info
,
SCpnt
->
device
->
id
);
tot_msglen
=
msgqueue_msglength
(
&
info
->
scsi
.
msgs
);
...
...
@@ -1845,7 +1886,7 @@ static void __fas216_start_command(FAS216_Info *info, Scsi_Cmnd *SCpnt)
int
msgnr
=
0
,
i
;
printk
(
"scsi%d.%c: message out: "
,
info
->
host
->
host_no
,
'0'
+
SCpnt
->
target
);
info
->
host
->
host_no
,
'0'
+
SCpnt
->
device
->
id
);
while
((
msg
=
msgqueue_getmsg
(
&
info
->
scsi
.
msgs
,
msgnr
++
))
!=
NULL
)
{
printk
(
"{ "
);
for
(
i
=
0
;
i
<
msg
->
length
;
i
++
)
...
...
@@ -1923,7 +1964,7 @@ static void fas216_start_command(FAS216_Info *info, Scsi_Cmnd *SCpnt)
info
->
SCpnt
=
SCpnt
;
info
->
dma
.
transfer_type
=
fasdma_none
;
if
(
parity_test
(
info
,
SCpnt
->
target
))
if
(
parity_test
(
info
,
SCpnt
->
device
->
id
))
fas216_writeb
(
info
,
REG_CNTL1
,
info
->
scsi
.
cfg
[
0
]
|
CNTL1_PTE
);
else
fas216_writeb
(
info
,
REG_CNTL1
,
info
->
scsi
.
cfg
[
0
]);
...
...
@@ -1932,13 +1973,13 @@ static void fas216_start_command(FAS216_Info *info, Scsi_Cmnd *SCpnt)
* Don't allow request sense commands to disconnect.
*/
disconnect_ok
=
SCpnt
->
cmnd
[
0
]
!=
REQUEST_SENSE
&&
info
->
device
[
SCpnt
->
target
].
disconnect_ok
;
info
->
device
[
SCpnt
->
device
->
id
].
disconnect_ok
;
/*
* build outgoing message bytes
*/
msgqueue_flush
(
&
info
->
scsi
.
msgs
);
msgqueue_addmsg
(
&
info
->
scsi
.
msgs
,
1
,
IDENTIFY
(
disconnect_ok
,
SCpnt
->
lun
));
msgqueue_addmsg
(
&
info
->
scsi
.
msgs
,
1
,
IDENTIFY
(
disconnect_ok
,
SCpnt
->
device
->
lun
));
/*
* add tag message if required
...
...
@@ -1948,8 +1989,8 @@ static void fas216_start_command(FAS216_Info *info, Scsi_Cmnd *SCpnt)
do
{
#ifdef SCSI2_WIDE
if
(
info
->
device
[
SCpnt
->
target
].
wide_state
==
neg_wait
)
{
info
->
device
[
SCpnt
->
target
].
wide_state
=
neg_inprogress
;
if
(
info
->
device
[
SCpnt
->
device
->
id
].
wide_state
==
neg_wait
)
{
info
->
device
[
SCpnt
->
device
->
id
].
wide_state
=
neg_inprogress
;
msgqueue_addmsg
(
&
info
->
scsi
.
msgs
,
4
,
EXTENDED_MESSAGE
,
2
,
EXTENDED_WDTR
,
info
->
ifcfg
.
wide_max_size
);
...
...
@@ -1957,11 +1998,11 @@ static void fas216_start_command(FAS216_Info *info, Scsi_Cmnd *SCpnt)
}
#endif
#ifdef SCSI2_SYNC
if
((
info
->
device
[
SCpnt
->
target
].
sync_state
==
neg_wait
||
info
->
device
[
SCpnt
->
target
].
sync_state
==
neg_complete
)
&&
if
((
info
->
device
[
SCpnt
->
device
->
id
].
sync_state
==
neg_wait
||
info
->
device
[
SCpnt
->
device
->
id
].
sync_state
==
neg_complete
)
&&
(
SCpnt
->
cmnd
[
0
]
==
REQUEST_SENSE
||
SCpnt
->
cmnd
[
0
]
==
INQUIRY
))
{
info
->
device
[
SCpnt
->
target
].
sync_state
=
neg_inprogress
;
info
->
device
[
SCpnt
->
device
->
id
].
sync_state
=
neg_inprogress
;
msgqueue_addmsg
(
&
info
->
scsi
.
msgs
,
5
,
EXTENDED_MESSAGE
,
3
,
EXTENDED_SDTR
,
1000
/
info
->
ifcfg
.
clockrate
,
...
...
@@ -1988,7 +2029,7 @@ static void fas216_allocate_tag(FAS216_Info *info, Scsi_Cmnd *SCpnt)
SCpnt
->
tag
=
SCpnt
->
device
->
current_tag
;
}
else
#endif
set_bit
(
SCpnt
->
target
*
8
+
SCpnt
->
lun
,
info
->
busyluns
);
set_bit
(
SCpnt
->
device
->
id
*
8
+
SCpnt
->
device
->
lun
,
info
->
busyluns
);
info
->
stats
.
removes
+=
1
;
switch
(
SCpnt
->
cmnd
[
0
])
{
...
...
@@ -2033,11 +2074,11 @@ static void fas216_do_bus_device_reset(FAS216_Info *info, Scsi_Cmnd *SCpnt)
fas216_cmd
(
info
,
CMD_FLUSHFIFO
);
/* load bus-id and timeout */
fas216_writeb
(
info
,
REG_SDID
,
BUSID
(
SCpnt
->
target
));
fas216_writeb
(
info
,
REG_SDID
,
BUSID
(
SCpnt
->
device
->
id
));
fas216_writeb
(
info
,
REG_STIM
,
info
->
ifcfg
.
select_timeout
);
/* synchronous transfers */
fas216_set_sync
(
info
,
SCpnt
->
target
);
fas216_set_sync
(
info
,
SCpnt
->
device
->
id
);
msg
=
msgqueue_getmsg
(
&
info
->
scsi
.
msgs
,
0
);
...
...
@@ -2102,7 +2143,7 @@ static void fas216_kick(FAS216_Info *info)
if
(
info
->
scsi
.
disconnectable
&&
info
->
SCpnt
)
{
fas216_log
(
info
,
LOG_CONNECT
,
"moved command for %d to disconnected queue"
,
info
->
SCpnt
->
target
);
info
->
SCpnt
->
device
->
id
);
queue_add_cmd_tail
(
&
info
->
queues
.
disconnected
,
info
->
SCpnt
);
info
->
scsi
.
disconnectable
=
0
;
info
->
SCpnt
=
NULL
;
...
...
@@ -2155,7 +2196,7 @@ fas216_devicereset_done(FAS216_Info *info, Scsi_Cmnd *SCpnt, unsigned int result
static
void
fas216_rq_sns_done
(
FAS216_Info
*
info
,
Scsi_Cmnd
*
SCpnt
,
unsigned
int
result
)
{
fas216_log_target
(
info
,
LOG_CONNECT
,
SCpnt
->
target
,
fas216_log_target
(
info
,
LOG_CONNECT
,
SCpnt
->
device
->
id
,
"request sense complete, result=0x%04x%02x%02x"
,
result
,
SCpnt
->
SCp
.
Message
,
SCpnt
->
SCp
.
Status
);
...
...
@@ -2166,7 +2207,7 @@ fas216_rq_sns_done(FAS216_Info *info, Scsi_Cmnd *SCpnt, unsigned int result)
* confuse the higher levels.
*/
memset
(
SCpnt
->
sense_buffer
,
0
,
sizeof
(
SCpnt
->
sense_buffer
));
//printk("scsi%d.%c: sense buffer: ", info->host->host_no, '0' + SCpnt->
target
);
//printk("scsi%d.%c: sense buffer: ", info->host->host_no, '0' + SCpnt->
device->id
);
//{ int i; for (i = 0; i < 32; i++) printk("%02x ", SCpnt->sense_buffer[i]); printk("\n"); }
/*
* Note that we don't set SCpnt->result, since that should
...
...
@@ -2235,7 +2276,7 @@ fas216_std_done(FAS216_Info *info, Scsi_Cmnd *SCpnt, unsigned int result)
default:
printk
(
KERN_ERR
"scsi%d.%c: incomplete data transfer "
"detected: res=%08X ptr=%p len=%X CDB: "
,
info
->
host
->
host_no
,
'0'
+
SCpnt
->
target
,
info
->
host
->
host_no
,
'0'
+
SCpnt
->
device
->
id
,
SCpnt
->
result
,
info
->
scsi
.
SCp
.
ptr
,
info
->
scsi
.
SCp
.
this_residual
);
print_command
(
SCpnt
->
cmnd
);
...
...
@@ -2259,11 +2300,11 @@ fas216_std_done(FAS216_Info *info, Scsi_Cmnd *SCpnt, unsigned int result)
if
(
SCpnt
->
cmnd
[
0
]
==
REQUEST_SENSE
)
goto
done
;
fas216_log_target
(
info
,
LOG_CONNECT
,
SCpnt
->
target
,
fas216_log_target
(
info
,
LOG_CONNECT
,
SCpnt
->
device
->
id
,
"requesting sense"
);
memset
(
SCpnt
->
cmnd
,
0
,
sizeof
(
SCpnt
->
cmnd
));
SCpnt
->
cmnd
[
0
]
=
REQUEST_SENSE
;
SCpnt
->
cmnd
[
1
]
=
SCpnt
->
lun
<<
5
;
SCpnt
->
cmnd
[
1
]
=
SCpnt
->
device
->
lun
<<
5
;
SCpnt
->
cmnd
[
4
]
=
sizeof
(
SCpnt
->
sense_buffer
);
SCpnt
->
cmd_len
=
COMMAND_SIZE
(
SCpnt
->
cmnd
[
0
]);
SCpnt
->
SCp
.
buffer
=
NULL
;
...
...
@@ -2285,7 +2326,7 @@ fas216_std_done(FAS216_Info *info, Scsi_Cmnd *SCpnt, unsigned int result)
*/
if
(
info
->
reqSCpnt
)
printk
(
KERN_WARNING
"scsi%d.%c: loosing request command
\n
"
,
info
->
host
->
host_no
,
'0'
+
SCpnt
->
target
);
info
->
host
->
host_no
,
'0'
+
SCpnt
->
device
->
id
);
info
->
reqSCpnt
=
SCpnt
;
}
...
...
@@ -2324,7 +2365,7 @@ static void fas216_done(FAS216_Info *info, unsigned int result)
if
(
info
->
scsi
.
SCp
.
ptr
&&
info
->
scsi
.
SCp
.
this_residual
==
0
)
{
printk
(
"scsi%d.%c: zero bytes left to transfer, but "
"buffer pointer still valid: ptr=%p len=%08x CDB: "
,
info
->
host
->
host_no
,
'0'
+
SCpnt
->
target
,
info
->
host
->
host_no
,
'0'
+
SCpnt
->
device
->
id
,
info
->
scsi
.
SCp
.
ptr
,
info
->
scsi
.
SCp
.
this_residual
);
info
->
scsi
.
SCp
.
ptr
=
NULL
;
print_command
(
SCpnt
->
cmnd
);
...
...
@@ -2335,8 +2376,8 @@ static void fas216_done(FAS216_Info *info, unsigned int result)
* the sense information, fas216_kick will re-assert the busy
* status.
*/
info
->
device
[
SCpnt
->
target
].
parity_check
=
0
;
clear_bit
(
SCpnt
->
target
*
8
+
SCpnt
->
lun
,
info
->
busyluns
);
info
->
device
[
SCpnt
->
device
->
id
].
parity_check
=
0
;
clear_bit
(
SCpnt
->
device
->
id
*
8
+
SCpnt
->
device
->
lun
,
info
->
busyluns
);
fn
=
(
void
(
*
)(
FAS216_Info
*
,
Scsi_Cmnd
*
,
unsigned
int
))
SCpnt
->
host_scribble
;
fn
(
info
,
SCpnt
,
result
);
...
...
@@ -2365,7 +2406,7 @@ static void fas216_done(FAS216_Info *info, unsigned int result)
*/
int
fas216_queue_command
(
Scsi_Cmnd
*
SCpnt
,
void
(
*
done
)(
Scsi_Cmnd
*
))
{
FAS216_Info
*
info
=
(
FAS216_Info
*
)
SCpnt
->
host
->
hostdata
;
FAS216_Info
*
info
=
(
FAS216_Info
*
)
SCpnt
->
device
->
host
->
hostdata
;
int
result
;
fas216_checkmagic
(
info
);
...
...
@@ -2412,7 +2453,7 @@ int fas216_queue_command(Scsi_Cmnd *SCpnt, void (*done)(Scsi_Cmnd *))
*/
static
void
fas216_internal_done
(
Scsi_Cmnd
*
SCpnt
)
{
FAS216_Info
*
info
=
(
FAS216_Info
*
)
SCpnt
->
host
->
hostdata
;
FAS216_Info
*
info
=
(
FAS216_Info
*
)
SCpnt
->
device
->
host
->
hostdata
;
fas216_checkmagic
(
info
);
...
...
@@ -2429,7 +2470,7 @@ static void fas216_internal_done(Scsi_Cmnd *SCpnt)
*/
int
fas216_command
(
Scsi_Cmnd
*
SCpnt
)
{
FAS216_Info
*
info
=
(
FAS216_Info
*
)
SCpnt
->
host
->
hostdata
;
FAS216_Info
*
info
=
(
FAS216_Info
*
)
SCpnt
->
device
->
host
->
hostdata
;
fas216_checkmagic
(
info
);
...
...
@@ -2555,7 +2596,7 @@ static enum res_find fas216_find_command(FAS216_Info *info, Scsi_Cmnd *SCpnt)
* been set.
*/
info
->
origSCpnt
=
NULL
;
clear_bit
(
SCpnt
->
target
*
8
+
SCpnt
->
lun
,
info
->
busyluns
);
clear_bit
(
SCpnt
->
device
->
id
*
8
+
SCpnt
->
device
->
lun
,
info
->
busyluns
);
printk
(
"waiting for execution "
);
res
=
res_success
;
}
else
...
...
@@ -2574,7 +2615,7 @@ static enum res_find fas216_find_command(FAS216_Info *info, Scsi_Cmnd *SCpnt)
*/
int
fas216_eh_abort
(
Scsi_Cmnd
*
SCpnt
)
{
FAS216_Info
*
info
=
(
FAS216_Info
*
)
SCpnt
->
host
->
hostdata
;
FAS216_Info
*
info
=
(
FAS216_Info
*
)
SCpnt
->
device
->
host
->
hostdata
;
int
result
=
FAILED
;
fas216_checkmagic
(
info
);
...
...
@@ -2631,9 +2672,9 @@ int fas216_eh_abort(Scsi_Cmnd *SCpnt)
*/
int
fas216_eh_device_reset
(
Scsi_Cmnd
*
SCpnt
)
{
FAS216_Info
*
info
=
(
FAS216_Info
*
)
SCpnt
->
host
->
hostdata
;
FAS216_Info
*
info
=
(
FAS216_Info
*
)
SCpnt
->
device
->
host
->
hostdata
;
unsigned
long
flags
;
int
i
,
res
=
FAILED
,
target
=
SCpnt
->
target
;
int
i
,
res
=
FAILED
,
target
=
SCpnt
->
device
->
id
;
fas216_log
(
info
,
LOG_ERROR
,
"device reset for target %d"
,
target
);
...
...
@@ -2647,7 +2688,7 @@ int fas216_eh_device_reset(Scsi_Cmnd *SCpnt)
* and we need a bus reset.
*/
if
(
info
->
SCpnt
&&
!
info
->
scsi
.
disconnectable
&&
info
->
SCpnt
->
target
==
SCpnt
->
target
)
info
->
SCpnt
->
device
->
id
==
SCpnt
->
device
->
id
)
break
;
/*
...
...
@@ -2658,9 +2699,9 @@ int fas216_eh_device_reset(Scsi_Cmnd *SCpnt)
*/
queue_remove_all_target
(
&
info
->
queues
.
issue
,
target
);
queue_remove_all_target
(
&
info
->
queues
.
disconnected
,
target
);
if
(
info
->
origSCpnt
&&
info
->
origSCpnt
->
target
==
target
)
if
(
info
->
origSCpnt
&&
info
->
origSCpnt
->
device
->
id
==
target
)
info
->
origSCpnt
=
NULL
;
if
(
info
->
reqSCpnt
&&
info
->
reqSCpnt
->
target
==
target
)
if
(
info
->
reqSCpnt
&&
info
->
reqSCpnt
->
device
->
id
==
target
)
info
->
reqSCpnt
=
NULL
;
for
(
i
=
0
;
i
<
8
;
i
++
)
clear_bit
(
target
*
8
+
i
,
info
->
busyluns
);
...
...
@@ -2712,7 +2753,7 @@ int fas216_eh_device_reset(Scsi_Cmnd *SCpnt)
*/
int
fas216_eh_bus_reset
(
Scsi_Cmnd
*
SCpnt
)
{
FAS216_Info
*
info
=
(
FAS216_Info
*
)
SCpnt
->
host
->
hostdata
;
FAS216_Info
*
info
=
(
FAS216_Info
*
)
SCpnt
->
device
->
host
->
hostdata
;
unsigned
long
flags
;
Scsi_Device
*
SDpnt
;
...
...
@@ -2750,9 +2791,9 @@ int fas216_eh_bus_reset(Scsi_Cmnd *SCpnt)
queue_remove_all_target
(
&
info
->
queues
.
issue
,
SDpnt
->
id
);
queue_remove_all_target
(
&
info
->
queues
.
disconnected
,
SDpnt
->
id
);
if
(
info
->
origSCpnt
&&
info
->
origSCpnt
->
target
==
SDpnt
->
id
)
if
(
info
->
origSCpnt
&&
info
->
origSCpnt
->
device
->
id
==
SDpnt
->
id
)
info
->
origSCpnt
=
NULL
;
if
(
info
->
reqSCpnt
&&
info
->
reqSCpnt
->
target
==
SDpnt
->
id
)
if
(
info
->
reqSCpnt
&&
info
->
reqSCpnt
->
device
->
id
==
SDpnt
->
id
)
info
->
reqSCpnt
=
NULL
;
info
->
SCpnt
=
NULL
;
...
...
@@ -2809,12 +2850,12 @@ static void fas216_init_chip(FAS216_Info *info)
*/
int
fas216_eh_host_reset
(
Scsi_Cmnd
*
SCpnt
)
{
FAS216_Info
*
info
=
(
FAS216_Info
*
)
SCpnt
->
host
->
hostdata
;
FAS216_Info
*
info
=
(
FAS216_Info
*
)
SCpnt
->
device
->
host
->
hostdata
;
fas216_checkmagic
(
info
);
printk
(
"scsi%d.%c: %s: resetting host
\n
"
,
info
->
host
->
host_no
,
'0'
+
SCpnt
->
target
,
__FUNCTION__
);
info
->
host
->
host_no
,
'0'
+
SCpnt
->
device
->
id
,
__FUNCTION__
);
/*
* Reset the SCSI chip.
...
...
drivers/acorn/scsi/queue.c
View file @
c90176df
...
...
@@ -170,7 +170,7 @@ Scsi_Cmnd *queue_remove_exclude(Queue_t *queue, unsigned long *exclude)
spin_lock_irqsave
(
&
queue
->
queue_lock
,
flags
);
list_for_each
(
l
,
&
queue
->
head
)
{
QE_t
*
q
=
list_entry
(
l
,
QE_t
,
list
);
if
(
!
test_bit
(
q
->
SCpnt
->
target
*
8
+
q
->
SCpnt
->
lun
,
exclude
))
{
if
(
!
test_bit
(
q
->
SCpnt
->
device
->
id
*
8
+
q
->
SCpnt
->
device
->
lun
,
exclude
))
{
SCpnt
=
__queue_remove
(
queue
,
l
);
break
;
}
...
...
@@ -217,7 +217,7 @@ Scsi_Cmnd *queue_remove_tgtluntag (Queue_t *queue, int target, int lun, int tag)
spin_lock_irqsave
(
&
queue
->
queue_lock
,
flags
);
list_for_each
(
l
,
&
queue
->
head
)
{
QE_t
*
q
=
list_entry
(
l
,
QE_t
,
list
);
if
(
q
->
SCpnt
->
target
==
target
&&
q
->
SCpnt
->
lun
==
lun
&&
if
(
q
->
SCpnt
->
device
->
id
==
target
&&
q
->
SCpnt
->
device
->
lun
==
lun
&&
q
->
SCpnt
->
tag
==
tag
)
{
SCpnt
=
__queue_remove
(
queue
,
l
);
break
;
...
...
@@ -243,7 +243,7 @@ void queue_remove_all_target(Queue_t *queue, int target)
spin_lock_irqsave
(
&
queue
->
queue_lock
,
flags
);
list_for_each
(
l
,
&
queue
->
head
)
{
QE_t
*
q
=
list_entry
(
l
,
QE_t
,
list
);
if
(
q
->
SCpnt
->
target
==
target
)
if
(
q
->
SCpnt
->
device
->
id
==
target
)
__queue_remove
(
queue
,
l
);
}
spin_unlock_irqrestore
(
&
queue
->
queue_lock
,
flags
);
...
...
@@ -267,7 +267,7 @@ int queue_probetgtlun (Queue_t *queue, int target, int lun)
spin_lock_irqsave
(
&
queue
->
queue_lock
,
flags
);
list_for_each
(
l
,
&
queue
->
head
)
{
QE_t
*
q
=
list_entry
(
l
,
QE_t
,
list
);
if
(
q
->
SCpnt
->
target
==
target
&&
q
->
SCpnt
->
lun
==
lun
)
{
if
(
q
->
SCpnt
->
device
->
id
==
target
&&
q
->
SCpnt
->
device
->
lun
==
lun
)
{
found
=
1
;
break
;
}
...
...
drivers/acorn/scsi/scsi.h
View file @
c90176df
...
...
@@ -92,8 +92,8 @@ static inline void init_SCp(Scsi_Cmnd *SCpnt)
if
(
SCpnt
->
request_bufflen
!=
len
)
printk
(
KERN_WARNING
"scsi%d.%c: bad request buffer "
"length %d, should be %ld
\n
"
,
SCpnt
->
host
->
host_no
,
'0'
+
SCpnt
->
target
,
SCpnt
->
request_bufflen
,
len
);
"length %d, should be %ld
\n
"
,
SCpnt
->
device
->
host
->
host_no
,
'0'
+
SCpnt
->
device
->
id
,
SCpnt
->
request_bufflen
,
len
);
SCpnt
->
request_bufflen
=
len
;
#endif
}
else
{
...
...
drivers/char/watchdog/wdt285.c
View file @
c90176df
...
...
@@ -37,18 +37,14 @@
*/
#undef ONLY_TESTING
#define TIMER_MARGIN 60
/* (secs) Default is 1 minute */
#define FCLK (50*1000*1000)
/* 50MHz */
static
int
soft_margin
=
TIMER_MARGIN
;
/* in seconds */
static
int
timer_alive
;
static
unsigned
int
soft_margin
=
60
;
/* in seconds */
static
unsigned
int
reload
;
static
unsigned
long
timer_alive
;
#ifdef ONLY_TESTING
/*
* If the timer expires..
*/
static
void
watchdog_fire
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
{
printk
(
KERN_CRIT
"Watchdog: Would Reboot.
\n
"
);
...
...
@@ -57,109 +53,134 @@ static void watchdog_fire(int irq, void *dev_id, struct pt_regs *regs)
}
#endif
/*
* Refresh the timer.
*/
static
void
watchdog_ping
(
void
)
{
/*
* Refresh the timer.
*/
*
CSR_TIMER4_LOAD
=
soft_margin
*
(
FCLK
/
256
);
*
CSR_TIMER4_LOAD
=
reload
;
}
/*
* Allow only one person to hold it open
*/
static
int
watchdog_open
(
struct
inode
*
inode
,
struct
file
*
file
)
{
if
(
timer_alive
)
int
ret
;
if
(
*
CSR_SA110_CNTL
&
(
1
<<
13
))
return
-
EBUSY
;
/*
* Ahead watchdog factor ten, Mr Sulu
*/
if
(
test_and_set_bit
(
1
,
&
timer_alive
))
return
-
EBUSY
;
reload
=
soft_margin
*
(
mem_fclk_21285
/
256
);
*
CSR_TIMER4_CLR
=
0
;
watchdog_ping
();
*
CSR_TIMER4_CNTL
=
TIMER_CNTL_ENABLE
|
TIMER_CNTL_AUTORELOAD
|
TIMER_CNTL_DIV256
;
#ifdef ONLY_TESTING
request_irq
(
IRQ_TIMER4
,
watchdog_fire
,
0
,
"watchdog"
,
NULL
);
ret
=
request_irq
(
IRQ_TIMER4
,
watchdog_fire
,
0
,
"watchdog"
,
NULL
);
if
(
ret
)
{
*
CSR_TIMER4_CNTL
=
0
;
clear_bit
(
1
,
&
timer_alive
);
}
#else
/*
* Setting this bit is irreversible; once enabled, there is
* no way to disable the watchdog.
*/
*
CSR_SA110_CNTL
|=
1
<<
13
;
MOD_INC_USE_COUNT
;
ret
=
0
;
#endif
timer_alive
=
1
;
return
0
;
return
ret
;
}
/*
* Shut off the timer.
* Note: if we really have enabled the watchdog, there
* is no way to turn off.
*/
static
int
watchdog_release
(
struct
inode
*
inode
,
struct
file
*
file
)
{
#ifdef ONLY_TESTING
free_irq
(
IRQ_TIMER4
,
NULL
);
timer_alive
=
0
;
#else
/*
* It's irreversible!
*/
clear_bit
(
1
,
&
timer_alive
);
#endif
return
0
;
}
static
ssize_t
watchdog_write
(
struct
file
*
file
,
const
char
*
data
,
size_t
len
,
loff_t
*
ppos
)
static
ssize_t
watchdog_write
(
struct
file
*
file
,
const
char
*
data
,
size_t
len
,
loff_t
*
ppos
)
{
/*
Can't seek (pwrite) on this device */
/* Can't seek (pwrite) on this device */
if
(
ppos
!=
&
file
->
f_pos
)
return
-
ESPIPE
;
/*
* Refresh the timer.
*/
if
(
len
)
{
if
(
len
)
watchdog_ping
();
return
1
;
}
return
0
;
return
len
;
}
static
int
watchdog_ioctl
(
struct
inode
*
inode
,
struct
file
*
file
,
unsigned
int
cmd
,
unsigned
long
arg
)
static
struct
watchdog_info
ident
=
{
.
options
=
WDIOF_SETTIMEOUT
,
.
identity
=
"Footbridge Watchdog"
};
static
int
watchdog_ioctl
(
struct
inode
*
inode
,
struct
file
*
file
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
int
i
,
new_margin
;
static
struct
watchdog_info
ident
=
{
WDIOF_SETTIMEOUT
,
0
,
"Footbridge Watchdog"
};
switch
(
cmd
)
{
default:
return
-
ENOTTY
;
case
WDIOC_GETSUPPORT
:
if
(
copy_to_user
((
struct
watchdog_info
*
)
arg
,
&
ident
,
sizeof
(
ident
)))
return
-
EFAULT
;
return
0
;
case
WDIOC_GETSTATUS
:
case
WDIOC_GETBOOTSTATUS
:
return
put_user
(
0
,(
int
*
)
arg
);
case
WDIOC_KEEPALIVE
:
watchdog_ping
();
return
0
;
case
WDIOC_SETTIMEOUT
:
if
(
get_user
(
new_margin
,
(
int
*
)
arg
))
return
-
EFAULT
;
/* Arbitrary, can't find the card's limits */
if
((
new_marg
<
0
)
||
(
new_margin
>
60
))
return
-
EINVAL
;
soft_margin
=
new_margin
;
watchdog_ping
();
/* Fall */
case
WDIOC_GETTIMEOUT
:
return
put_user
(
soft_margin
,
(
int
*
)
arg
);
unsigned
int
new_margin
;
int
ret
=
-
ENOIOCTLCMD
;
switch
(
cmd
)
{
case
WDIOC_GETSUPPORT
:
ret
=
0
;
if
(
copy_to_user
((
void
*
)
arg
,
&
ident
,
sizeof
(
ident
)))
ret
=
-
EFAULT
;
break
;
case
WDIOC_GETSTATUS
:
case
WDIOC_GETBOOTSTATUS
:
ret
=
put_user
(
0
,(
int
*
)
arg
);
break
;
case
WDIOC_KEEPALIVE
:
watchdog_ping
();
ret
=
0
;
break
;
case
WDIOC_SETTIMEOUT
:
ret
=
get_user
(
new_margin
,
(
int
*
)
arg
);
if
(
ret
)
break
;
/* Arbitrary, can't find the card's limits */
if
(
new_margin
<
0
||
new_margin
>
60
)
{
ret
=
-
EINVAL
;
break
;
}
soft_margin
=
new_margin
;
reload
=
soft_margin
*
(
mem_fclk_21285
/
256
);
watchdog_ping
();
/* Fall */
case
WDIOC_GETTIMEOUT
:
ret
=
put_user
(
soft_margin
,
(
int
*
)
arg
);
break
;
}
return
ret
;
}
static
struct
file_operations
watchdog_fops
=
{
static
struct
file_operations
watchdog_fops
=
{
.
owner
=
THIS_MODULE
,
.
write
=
watchdog_write
,
.
ioctl
=
watchdog_ioctl
,
...
...
@@ -167,11 +188,10 @@ static struct file_operations watchdog_fops=
.
release
=
watchdog_release
,
};
static
struct
miscdevice
watchdog_miscdev
=
{
WATCHDOG_MINOR
,
"watchdog"
,
&
watchdog_fops
static
struct
miscdevice
watchdog_miscdev
=
{
.
minor
=
WATCHDOG_MINOR
,
.
name
=
"watchdog"
,
.
fops
=
&
watchdog_fops
};
static
int
__init
footbridge_watchdog_init
(
void
)
...
...
@@ -182,11 +202,12 @@ static int __init footbridge_watchdog_init(void)
return
-
ENODEV
;
retval
=
misc_register
(
&
watchdog_miscdev
);
if
(
retval
<
0
)
if
(
retval
<
0
)
return
retval
;
printk
(
"Footbridge Watchdog Timer: 0.01, timer margin: %d sec
\n
"
,
soft_margin
);
if
(
machine_is_cats
())
printk
(
"Warning: Watchdog reset may not work on this machine.
\n
"
);
return
0
;
...
...
@@ -198,7 +219,7 @@ static void __exit footbridge_watchdog_exit(void)
}
MODULE_AUTHOR
(
"Phil Blundell <pb@nexus.co.uk>"
);
MODULE_DESCRIPTION
(
"
21285
watchdog driver"
);
MODULE_DESCRIPTION
(
"
Footbridge
watchdog driver"
);
MODULE_LICENSE
(
"GPL"
);
MODULE_PARM
(
soft_margin
,
"i"
);
...
...
drivers/char/watchdog/wdt977.c
View file @
c90176df
...
...
@@ -58,7 +58,7 @@ MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=CON
/* This is kicking the watchdog by simply re-writing the timeout to reg. 0xF2 */
int
kick_wdog
(
void
)
static
int
kick_wdog
(
void
)
{
/*
* Refresh the timer.
...
...
@@ -216,21 +216,20 @@ static int wdt977_release(struct inode *inode, struct file *file)
static
ssize_t
wdt977_write
(
struct
file
*
file
,
const
char
*
buf
,
size_t
count
,
loff_t
*
ppos
)
{
/*
Can't seek (pwrite) on this device */
/* Can't seek (pwrite) on this device */
if
(
ppos
!=
&
file
->
f_pos
)
return
-
ESPIPE
;
if
(
count
)
{
if
(
count
)
{
if
(
!
nowayout
)
{
size_t
i
;
/* In case it was set long ago */
expect_close
=
0
;
for
(
i
=
0
;
i
!=
len
;
i
++
)
{
for
(
i
=
0
;
i
!=
count
;
i
++
)
{
char
c
;
if
(
get_user
(
c
,
data
+
i
))
if
(
get_user
(
c
,
buf
+
i
))
return
-
EFAULT
;
if
(
c
==
'V'
)
expect_close
=
1
;
...
...
@@ -238,9 +237,8 @@ static ssize_t wdt977_write(struct file *file, const char *buf, size_t count, lo
}
kick_wdog
();
return
1
;
}
return
0
;
return
count
;
}
/*
...
...
@@ -254,14 +252,15 @@ static ssize_t wdt977_write(struct file *file, const char *buf, size_t count, lo
* according to their available features.
*/
static
int
wdt977_ioctl
(
struct
inode
*
inode
,
struct
file
*
file
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
static
struct
watchdog_info
ident
=
{
.
identity
=
"Winbond 83977"
.
options
=
WDIOF_SETTIMEOUT
,
.
identity
=
"Winbond 83977"
};
int
temp
;
static
int
wdt977_ioctl
(
struct
inode
*
inode
,
struct
file
*
file
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
int
temp
;
switch
(
cmd
)
{
...
...
@@ -337,9 +336,9 @@ static struct file_operations wdt977_fops=
static
struct
miscdevice
wdt977_miscdev
=
{
WATCHDOG_MINOR
,
"watchdog"
,
&
wdt977_fops
.
minor
=
WATCHDOG_MINOR
,
.
name
=
"watchdog"
,
.
fops
=
&
wdt977_fops
};
static
int
__init
nwwatchdog_init
(
void
)
...
...
@@ -360,4 +359,5 @@ static void __exit nwwatchdog_exit(void)
module_init
(
nwwatchdog_init
);
module_exit
(
nwwatchdog_exit
);
MODULE_DESCRIPTION
(
"W83977AF Watchdog driver"
);
MODULE_LICENSE
(
"GPL"
);
drivers/input/serio/sa1111ps2.c
View file @
c90176df
...
...
@@ -9,6 +9,7 @@
*/
#include <linux/module.h>
#include <linux/init.h>
#include <linux/input.h>
#include <linux/serio.h>
#include <linux/errno.h>
#include <linux/interrupt.h>
...
...
@@ -339,6 +340,7 @@ static struct sa1111_driver ps2_driver = {
.
drv
=
{
.
name
=
"sa1111-ps2"
,
.
bus
=
&
sa1111_bus_type
,
.
devclass
=
&
input_devclass
,
.
probe
=
ps2_probe
,
.
remove
=
ps2_remove
,
.
suspend
=
ps2_suspend
,
...
...
drivers/mtd/maps/sa1100-flash.c
View file @
c90176df
...
...
@@ -773,14 +773,15 @@ static struct mtd_partition stork_partitions[] = {
#ifdef CONFIG_SA1100_TRIZEPS
static
struct
mtd_partition
trizeps_partitions
[]
=
{
{
.
name
=
"Bootloader
& the kernel
"
,
.
size
=
0x00
2
00000
,
.
name
=
"Bootloader"
,
.
size
=
0x00
1
00000
,
.
offset
=
0
,
},
{
.
name
=
"
Data
"
,
.
size
=
0x00
4
00000
,
.
name
=
"
Kernel
"
,
.
size
=
0x00
1
00000
,
.
offset
=
MTDPART_OFS_APPEND
,
},
{
.
name
=
"root"
,
.
size
=
MTDPART_SIZ_FULL
,
.
offset
=
MTDPART_OFS_APPEND
,
}
...
...
@@ -937,7 +938,7 @@ static int __init sa1100_static_partitions(struct mtd_partition **parts)
#ifdef CONFIG_SA1100_TRIZEPS
if
(
machine_is_trizeps
())
{
*
parts
=
trizeps_partitions
;
nb_parts
=
ARRAY_SIZE
(
trizeps_par
itit
ons
);
nb_parts
=
ARRAY_SIZE
(
trizeps_par
titi
ons
);
}
#endif
#ifdef CONFIG_SA1100_YOPY
...
...
include/asm-arm/arch-iop310/serial.h
View file @
c90176df
...
...
@@ -24,8 +24,8 @@
#define STD_SERIAL_PORT_DEFNS \
/* UART CLK PORT IRQ FLAGS */
\
{ 0, BASE_BAUD,
0xfe810000
, IRQ_UART2, STD_COM_FLAGS },
/* ttyS0 */
\
{ 0, BASE_BAUD,
0xfe800000
, IRQ_UART1, STD_COM_FLAGS }
/* ttyS1 */
{ 0, BASE_BAUD,
IQ80310_UART2
, IRQ_UART2, STD_COM_FLAGS },
/* ttyS0 */
\
{ 0, BASE_BAUD,
IQ80310_UART1
, IRQ_UART1, STD_COM_FLAGS }
/* ttyS1 */
#endif // CONFIG_ARCH_IQ80310
...
...
include/asm-arm/mach/irq.h
View file @
c90176df
...
...
@@ -33,9 +33,12 @@ struct irqchip {
*/
void
(
*
unmask
)(
unsigned
int
);
/*
* Re-run the IRQ
* Ask the hardware to re-trigger the IRQ.
* Note: This method _must_ _not_ call the interrupt handler.
* If you are unable to retrigger the interrupt, do not
* provide a function, or if you do, return non-zero.
*/
void
(
*
rerun
)(
unsigned
int
);
int
(
*
retrigger
)(
unsigned
int
);
/*
* Set the type of the IRQ.
*/
...
...
@@ -50,6 +53,7 @@ struct irqdesc {
irq_handler_t
handle
;
struct
irqchip
*
chip
;
struct
irqaction
*
action
;
struct
list_head
pend
;
unsigned
int
disable_depth
;
unsigned
int
triggered
:
1
;
/* IRQ has occurred */
...
...
include/asm-arm/proc-armv/processor.h
View file @
c90176df
...
...
@@ -23,7 +23,7 @@
#define KERNEL_STACK_SIZE PAGE_SIZE
#define INIT_EXTRA_THREAD_INFO \
.cpu_domain = domain_val(DOMAIN_USER, DOMAIN_
CLIENT
) | \
.cpu_domain = domain_val(DOMAIN_USER, DOMAIN_
MANAGER
) | \
domain_val(DOMAIN_KERNEL, DOMAIN_MANAGER) | \
domain_val(DOMAIN_IO, DOMAIN_CLIENT)
...
...
include/asm-arm/proc-armv/system.h
View file @
c90176df
...
...
@@ -14,9 +14,14 @@
#define set_cr(x) \
__asm__ __volatile__( \
"mcr p15, 0, %0, c1, c0 @ set CR" \
"mcr p15, 0, %0, c1, c0
, 0
@ set CR" \
: : "r" (x))
#define get_cr(x) \
__asm__ __volatile__( \
"mrc p15, 0, %0, c1, c0, 0 @ get CR" \
: "=r" (x))
#define CR_M (1 << 0)
/* MMU enable */
#define CR_A (1 << 1)
/* Alignment abort enable */
#define CR_C (1 << 2)
/* Dcache enable */
...
...
@@ -24,9 +29,9 @@
#define CR_P (1 << 4)
/* 32-bit exception handler */
#define CR_D (1 << 5)
/* 32-bit data address range */
#define CR_L (1 << 6)
/* Implementation defined */
#define C
D
_B (1 << 7)
/* Big endian */
#define C
R
_B (1 << 7)
/* Big endian */
#define CR_S (1 << 8)
/* System MMU protection */
#define C
D
_R (1 << 9)
/* ROM MMU protection */
#define C
R
_R (1 << 9)
/* ROM MMU protection */
#define CR_F (1 << 10)
/* Implementation defined */
#define CR_Z (1 << 11)
/* Implementation defined */
#define CR_I (1 << 12)
/* Icache enable */
...
...
include/asm-arm/signal.h
View file @
c90176df
...
...
@@ -184,9 +184,7 @@ typedef struct sigaltstack {
#ifdef __KERNEL__
#include <asm/sigcontext.h>
#define HAVE_ARCH_GET_SIGNAL_TO_DELIVER
#define ptrace_signal_deliver(regs, cookie) do { } while (0)
#endif
#endif
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment