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
312d62f3
Commit
312d62f3
authored
Nov 23, 2007
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Import 2.3.99pre2-5
parent
c0ccd8dc
Changes
47
Hide whitespace changes
Inline
Side-by-side
Showing
47 changed files
with
583 additions
and
283 deletions
+583
-283
Documentation/Configure.help
Documentation/Configure.help
+1
-1
arch/alpha/kernel/alpha_ksyms.c
arch/alpha/kernel/alpha_ksyms.c
+1
-0
arch/arm/config.in
arch/arm/config.in
+5
-5
arch/arm/kernel/arch.c
arch/arm/kernel/arch.c
+66
-23
arch/arm/kernel/bios32.c
arch/arm/kernel/bios32.c
+52
-17
arch/arm/kernel/bios32.h
arch/arm/kernel/bios32.h
+21
-3
arch/arm/kernel/dec21285.c
arch/arm/kernel/dec21285.c
+21
-9
arch/arm/kernel/hw-footbridge.c
arch/arm/kernel/hw-footbridge.c
+2
-2
arch/arm/kernel/process.c
arch/arm/kernel/process.c
+17
-3
arch/arm/mm/fault-armv.c
arch/arm/mm/fault-armv.c
+2
-1
arch/arm/mm/mm-armo.c
arch/arm/mm/mm-armo.c
+11
-1
arch/arm/mm/mm-armv.c
arch/arm/mm/mm-armv.c
+20
-1
arch/arm/mm/proc-arm6,7.S
arch/arm/mm/proc-arm6,7.S
+8
-6
arch/arm/mm/proc-sa110.S
arch/arm/mm/proc-sa110.S
+18
-13
arch/i386/boot/compressed/head.S
arch/i386/boot/compressed/head.S
+4
-4
arch/i386/kernel/setup.c
arch/i386/kernel/setup.c
+24
-18
arch/sparc64/config.in
arch/sparc64/config.in
+1
-0
arch/sparc64/defconfig
arch/sparc64/defconfig
+1
-0
drivers/block/Config.in
drivers/block/Config.in
+1
-1
drivers/char/dtlk.c
drivers/char/dtlk.c
+37
-63
drivers/ide/ide-probe.c
drivers/ide/ide-probe.c
+2
-0
drivers/net/8390.c
drivers/net/8390.c
+11
-5
drivers/net/net_init.c
drivers/net/net_init.c
+14
-7
drivers/net/pcnet32.c
drivers/net/pcnet32.c
+4
-2
drivers/net/tulip/interrupt.c
drivers/net/tulip/interrupt.c
+52
-18
drivers/net/tulip/tulip.h
drivers/net/tulip/tulip.h
+6
-9
drivers/net/tulip/tulip_core.c
drivers/net/tulip/tulip_core.c
+64
-19
drivers/pci/pci.ids
drivers/pci/pci.ids
+5
-2
drivers/pcmcia/ti113x.h
drivers/pcmcia/ti113x.h
+44
-1
drivers/pcmcia/yenta.c
drivers/pcmcia/yenta.c
+10
-0
drivers/scsi/scsi_scan.c
drivers/scsi/scsi_scan.c
+4
-0
drivers/usb/drivers.c
drivers/usb/drivers.c
+5
-1
drivers/video/cyber2000fb.c
drivers/video/cyber2000fb.c
+9
-0
drivers/video/cyber2000fb.h
drivers/video/cyber2000fb.h
+3
-1
fs/ext2/dir.c
fs/ext2/dir.c
+2
-2
fs/namei.c
fs/namei.c
+4
-3
fs/partitions/acorn.c
fs/partitions/acorn.c
+2
-2
fs/ufs/dir.c
fs/ufs/dir.c
+2
-2
include/asm-arm/arch-cl7500/system.h
include/asm-arm/arch-cl7500/system.h
+6
-10
include/asm-arm/arch-ebsa110/system.h
include/asm-arm/arch-ebsa110/system.h
+1
-10
include/asm-arm/arch-ebsa285/system.h
include/asm-arm/arch-ebsa285/system.h
+4
-4
include/asm-arm/arch-rpc/system.h
include/asm-arm/arch-rpc/system.h
+4
-4
include/asm-arm/arch-sa1100/system.h
include/asm-arm/arch-sa1100/system.h
+1
-5
include/asm-arm/cpu-multi32.h
include/asm-arm/cpu-multi32.h
+2
-2
include/asm-arm/cpu-single.h
include/asm-arm/cpu-single.h
+1
-1
include/asm-arm/mman.h
include/asm-arm/mman.h
+6
-0
include/asm-arm/system.h
include/asm-arm/system.h
+2
-2
No files found.
Documentation/Configure.help
View file @
312d62f3
...
...
@@ -14211,7 +14211,7 @@ CONFIG_ARCH_NETWINDER
Say
Y
here
if
you
intend
to
run
this
kernel
on
the
NetWinder
.
Include
support
for
the
Compaq
Personal
Server
CONFIG_PERSONAL_SERVER
CONFIG_
ARCH_
PERSONAL_SERVER
Say
Y
here
if
you
intend
to
run
this
kernel
on
the
Compaq
Personal
Server
.
...
...
arch/alpha/kernel/alpha_ksyms.c
View file @
312d62f3
...
...
@@ -107,6 +107,7 @@ EXPORT_SYMBOL(pci_map_single);
EXPORT_SYMBOL
(
pci_unmap_single
);
EXPORT_SYMBOL
(
pci_map_sg
);
EXPORT_SYMBOL
(
pci_unmap_sg
);
EXPORT_SYMBOL
(
pci_dma_supported
);
EXPORT_SYMBOL
(
dump_thread
);
EXPORT_SYMBOL
(
dump_fpu
);
...
...
arch/arm/config.in
View file @
312d62f3
...
...
@@ -35,9 +35,9 @@ fi
if [ "$CONFIG_HOST_FOOTBRIDGE" = "y" ]; then
bool ' Include support for EBSA285' CONFIG_ARCH_EBSA285
bool ' Include support for CATS' CONFIG_CATS
bool ' Include support for CATS' CONFIG_
ARCH_
CATS
bool ' Include support for NetWinder' CONFIG_ARCH_NETWINDER
bool ' Include support for Compaq Personal Server' CONFIG_PERSONAL_SERVER
bool ' Include support for Compaq Personal Server' CONFIG_
ARCH_
PERSONAL_SERVER
fi
if [ "$CONFIG_ADDIN_FOOTBRIDGE" = "y" ]; then
...
...
@@ -124,7 +124,7 @@ fi
#
# These machines have ISA-DMA
#
if [ "$CONFIG_CATS" = "y" -o \
if [ "$CONFIG_
ARCH_
CATS" = "y" -o \
"$CONFIG_ARCH_SHARK" = "y" -o \
"$CONFIG_ARCH_NETWINDER" = "y" ]; then
define_bool CONFIG_ISA_DMA y
...
...
@@ -171,8 +171,8 @@ source drivers/parport/Config.in
if [ "$CONFIG_ARCH_EBSA110" = "y" -o \
"$CONFIG_ARCH_SA1100" = "y" -o \
"$CONFIG_ARCH_NETWINDER" = "y" -o \
"$CONFIG_PERSONAL_SERVER" = "y" -o \
"$CONFIG_CATS" = "y" ]; then
"$CONFIG_
ARCH_
PERSONAL_SERVER" = "y" -o \
"$CONFIG_
ARCH_
CATS" = "y" ]; then
string 'Initial kernel command string' CONFIG_CMDLINE
fi
if [ "$CONFIG_ARCH_NETWINDER" = "y" -o \
...
...
arch/arm/kernel/arch.c
View file @
312d62f3
...
...
@@ -192,6 +192,7 @@ fixup_sa1100(struct machine_desc *desc, struct param_struct *params,
* in head-armv.S.
*/
static
struct
machine_desc
machine_desc
[]
__attribute__
((
__section__
(
".arch.info"
)))
=
{
#ifdef CONFIG_ARCH_EBSA110
{
MACH_TYPE_EBSA110
,
"EBSA110"
,
/* RMK */
...
...
@@ -199,119 +200,160 @@ static struct machine_desc machine_desc[] __attribute__ ((__section__ (".arch.in
NO_VIDEO
,
1
,
0
,
1
,
1
,
1
,
NULL
},
{
},
#endif
#ifdef CONFIG_ARCH_RPC
{
MACH_TYPE_RISCPC
,
"Acorn-RiscPC"
,
/* RMK */
0x10000100
,
NO_VIDEO
,
1
,
1
,
0
,
0
,
0
,
fixup_acorn
},
{
2
,
"unknown"
,
NO_PARAMS
,
NO_VIDEO
,
0
,
0
,
0
,
0
,
0
,
NULL
},
{
},
#endif
#ifdef CONFIG_ARCH_NEXUSPCI
{
MACH_TYPE_NEXUSPCI
,
"FTV/PCI"
,
/* Philip Blundell */
NO_PARAMS
,
NO_VIDEO
,
0
,
0
,
0
,
0
,
0
,
NULL
},
{
},
#endif
#ifdef CONFIG_ARCH_EBSA285
{
MACH_TYPE_EBSA285
,
"EBSA285"
,
/* RMK */
0x00000100
,
0x000a0000
,
0x000bffff
,
0
,
0
,
0
,
0
,
0
,
fixup_ebsa285
},
{
},
#endif
#ifdef CONFIG_ARCH_NETWINDER
{
MACH_TYPE_NETWINDER
,
"Rebel-NetWinder"
,
/* RMK */
0x00000100
,
0x000a0000
,
0x000bffff
,
1
,
0
,
1
,
0
,
0
,
fixup_netwinder
},
{
},
#endif
#ifdef CONFIG_ARCH_CATS
{
MACH_TYPE_CATS
,
"Chalice-CATS"
,
/* Philip Blundell */
NO_PARAMS
,
0x000a0000
,
0x000bffff
,
0
,
0
,
0
,
0
,
1
,
fixup_cats
},
{
},
#endif
#ifdef CONFIG_ARCH_TBOX
{
MACH_TYPE_TBOX
,
"unknown-TBOX"
,
/* Philip Blundell */
NO_PARAMS
,
NO_VIDEO
,
0
,
0
,
0
,
0
,
0
,
NULL
},
{
},
#endif
#ifdef CONFIG_ARCH_CO285
{
MACH_TYPE_CO285
,
"co-EBSA285"
,
/* Mark van Doesburg */
NO_PARAMS
,
NO_VIDEO
,
0
,
0
,
0
,
0
,
0
,
fixup_coebsa285
},
{
},
#endif
#ifdef CONFIG_ARCH_CLPS7110
{
MACH_TYPE_CLPS7110
,
"CL-PS7110"
,
/* Werner Almesberger */
NO_PARAMS
,
NO_VIDEO
,
0
,
0
,
0
,
0
,
0
,
NULL
},
{
},
#endif
#ifdef CONFIG_ARCH_ARC
{
MACH_TYPE_ARCHIMEDES
,
"Acorn-Archimedes"
,
/* RMK/DAG */
0x0207c000
,
NO_VIDEO
,
0
,
0
,
0
,
0
,
0
,
fixup_acorn
},
{
},
#endif
#ifdef CONFIG_ARCH_A5K
{
MACH_TYPE_A5K
,
"Acorn-A5000"
,
/* RMK/PB */
0x0207c000
,
NO_VIDEO
,
0
,
0
,
0
,
0
,
0
,
fixup_acorn
},
{
},
#endif
#ifdef CONFIG_ARCH_ETOILE
{
MACH_TYPE_ETOILE
,
"Etoile"
,
/* Alex de Vries */
NO_PARAMS
,
NO_VIDEO
,
0
,
0
,
0
,
0
,
0
,
NULL
},
{
},
#endif
#ifdef CONFIG_ARCH_LACIE_NAS
{
MACH_TYPE_LACIE_NAS
,
"LaCie_NAS"
,
/* Benjamin Herrenschmidt */
NO_PARAMS
,
NO_VIDEO
,
0
,
0
,
0
,
0
,
0
,
NULL
},
{
},
#endif
#ifdef CONFIG_ARCH_CLPS7500
{
MACH_TYPE_CLPS7500
,
"CL-PS7500"
,
/* Philip Blundell */
NO_PARAMS
,
NO_VIDEO
,
0
,
0
,
0
,
0
,
0
,
NULL
},
{
},
#endif
#ifdef CONFIG_ARCH_SHARK
{
MACH_TYPE_SHARK
,
"Shark"
,
/* Alexander Schulz */
NO_PARAMS
,
0x06000000
,
0x06000000
+
0x001fffff
,
0
,
0
,
0
,
0
,
0
,
NULL
},
{
},
#endif
#ifdef CONFIG_ARCH_SA1100
{
MACH_TYPE_SA1100
,
"SA1100-based"
,
/* Nicolas Pitre */
NO_PARAMS
,
NO_VIDEO
,
0
,
0
,
0
,
0
,
0
,
fixup_sa1100
},
{
},
#endif
#ifdef CONFIG_ARCH_PERSONAL_SERVER
{
MACH_TYPE_PERSONAL_SERVER
,
"Compaq Personal Server"
,
NO_PARAMS
,
...
...
@@ -319,4 +361,5 @@ static struct machine_desc machine_desc[] __attribute__ ((__section__ (".arch.in
0
,
0
,
0
,
0
,
0
,
NULL
}
#endif
};
arch/arm/kernel/bios32.c
View file @
312d62f3
...
...
@@ -164,7 +164,52 @@ void __init pcibios_update_irq(struct pci_dev *dev, int irq)
void
__init
pcibios_fixup_bus
(
struct
pci_bus
*
bus
)
{
struct
list_head
*
walk
=
&
bus
->
devices
;
struct
arm_pci_sysdata
*
sysdata
=
(
struct
arm_pci_sysdata
*
)
bus
->
sysdata
;
struct
arm_bus_sysdata
*
busdata
;
if
(
bus
->
number
<
MAX_NR_BUS
)
busdata
=
sysdata
->
bus
+
bus
->
number
;
else
BUG
();
/*
* Walk the devices on this bus, working out what we can
* and can't support.
*/
for
(
walk
=
walk
->
next
;
walk
!=
&
bus
->
devices
;
walk
=
walk
->
next
)
{
struct
pci_dev
*
dev
=
pci_dev_b
(
walk
);
u16
status
;
pci_read_config_word
(
dev
,
PCI_STATUS
,
&
status
);
/*
* If this device does not support fast back to back
* transfers, the bus as a whole cannot support them.
*/
if
(
!
(
status
&
PCI_STATUS_FAST_BACK
))
busdata
->
features
&=
~
PCI_COMMAND_FAST_BACK
;
/*
* Calculate the maximum devsel latency.
*/
if
(
busdata
->
maxdevsel
<
(
status
&
PCI_STATUS_DEVSEL_MASK
))
busdata
->
maxdevsel
=
(
status
&
PCI_STATUS_DEVSEL_MASK
);
/*
* If this device is an ISA bridge, set the have_isa_bridge
* flag. We will then go looking for things like keyboard,
* etc
*/
if
(
dev
->
class
>>
8
==
PCI_CLASS_BRIDGE_ISA
||
dev
->
class
>>
8
==
PCI_CLASS_BRIDGE_EISA
)
have_isa_bridge
=
!
0
;
}
/*
* Now walk the devices again, this time setting them up.
*/
walk
=
&
bus
->
devices
;
for
(
walk
=
walk
->
next
;
walk
!=
&
bus
->
devices
;
walk
=
walk
->
next
)
{
struct
pci_dev
*
dev
=
pci_dev_b
(
walk
);
u16
cmd
;
...
...
@@ -181,26 +226,16 @@ void __init pcibios_fixup_bus(struct pci_bus *bus)
/* Put the chip to sleep in case the driver isn't loaded */
pci_write_config_dword
(
dev
,
0x40
,
0x80000000
);
/*
* If this device is an ISA bridge, set the have_isa_bridge
* flag. We will then go looking for things like keyboard,
* etc
*/
if
(
dev
->
class
>>
8
==
PCI_CLASS_BRIDGE_ISA
||
dev
->
class
>>
8
==
PCI_CLASS_BRIDGE_EISA
)
have_isa_bridge
=
!
0
;
/*
* Set latency timer to 32, and a cache line size to 32 bytes.
* Also, set system error enable, parity error enable
, and
*
fast back to back transaction enable.
Disable ROM.
* Also, set system error enable, parity error enable
.
* Disable ROM.
*/
pci_write_config_byte
(
dev
,
PCI_LATENCY_TIMER
,
32
);
pci_write_config_byte
(
dev
,
PCI_CACHE_LINE_SIZE
,
8
);
pci_read_config_word
(
dev
,
PCI_COMMAND
,
&
cmd
);
cmd
|=
PCI_COMMAND_FAST_BACK
|
PCI_COMMAND_SERR
|
PCI_COMMAND_PARITY
;
cmd
|=
busdata
->
features
;
pci_write_config_word
(
dev
,
PCI_COMMAND
,
cmd
);
pci_read_config_word
(
dev
,
PCI_COMMAND
,
&
cmd
);
...
...
@@ -254,7 +289,7 @@ static struct hw_pci ebsa285_pci __initdata = {
};
#endif
#ifdef CONFIG_CATS
#ifdef CONFIG_
ARCH_
CATS
/* cats host-specific stuff */
static
int
irqmap_cats
[]
__initdata
=
{
IRQ_PCI
,
IRQ_IN0
,
IRQ_IN1
,
IRQ_IN3
};
...
...
@@ -323,7 +358,7 @@ static struct hw_pci netwinder_pci __initdata = {
};
#endif
#ifdef CONFIG_PERSONAL_SERVER
#ifdef CONFIG_
ARCH_
PERSONAL_SERVER
static
int
irqmap_personal_server
[]
__initdata
=
{
IRQ_IN0
,
IRQ_IN1
,
IRQ_IN2
,
IRQ_IN3
,
0
,
0
,
0
,
IRQ_DOORBELLHOST
,
IRQ_DMA1
,
IRQ_DMA2
,
IRQ_PCI
...
...
@@ -399,7 +434,7 @@ void __init pcibios_init(void)
break
;
}
#endif
#ifdef CONFIG_CATS
#ifdef CONFIG_
ARCH_
CATS
if
(
machine_is_cats
())
{
hw_pci
=
&
cats_pci
;
break
;
...
...
@@ -411,7 +446,7 @@ void __init pcibios_init(void)
break
;
}
#endif
#ifdef CONFIG_PERSONAL_SERVER
#ifdef CONFIG_
ARCH_
PERSONAL_SERVER
if
(
machine_is_personal_server
())
{
hw_pci
=
&
personal_server_pci
;
break
;
...
...
arch/arm/kernel/bios32.h
View file @
312d62f3
#define MAX_NR_BUS 2
struct
arm_bus_sysdata
{
/*
* bitmask of features we can turn.
* See PCI command register for more info.
*/
u16
features
;
/*
* Maximum devsel for this bus.
*/
u16
maxdevsel
;
};
struct
arm_pci_sysdata
{
struct
arm_bus_sysdata
bus
[
MAX_NR_BUS
];
};
struct
hw_pci
{
void
(
*
init
)(
void
);
void
(
*
init
)(
void
);
unsigned
long
io_start
;
unsigned
long
mem_start
;
u8
(
*
swizzle
)(
struct
pci_dev
*
dev
,
u8
*
pin
);
int
(
*
map_irq
)(
struct
pci_dev
*
dev
,
u8
slot
,
u8
pin
);
u8
(
*
swizzle
)(
struct
pci_dev
*
dev
,
u8
*
pin
);
int
(
*
map_irq
)(
struct
pci_dev
*
dev
,
u8
slot
,
u8
pin
);
};
void
__init
dc21285_init
(
void
);
...
...
arch/arm/kernel/dec21285.c
View file @
312d62f3
...
...
@@ -206,8 +206,11 @@ static struct irqaction dc21285_error_action = {
void
__init
dc21285_init
(
void
)
{
static
struct
resource
csrmem
,
csrio
;
unsigned
int
mem_size
;
struct
arm_pci_sysdata
sysdata
;
unsigned
long
cntl
;
unsigned
int
mem_size
,
pci_cmd
=
PCI_COMMAND_IO
|
PCI_COMMAND_MEMORY
|
PCI_COMMAND_MASTER
|
PCI_COMMAND_INVALIDATE
;
int
i
;
mem_size
=
(
unsigned
int
)
high_memory
-
PAGE_OFFSET
;
*
CSR_SDRAMBASEMASK
=
(
mem_size
-
1
)
&
0x0ffc0000
;
...
...
@@ -240,25 +243,34 @@ void __init dc21285_init(void)
*
CSR_PCICSRIOBASE
=
csrio
.
start
;
*
CSR_PCISDRAMBASE
=
virt_to_bus
((
void
*
)
PAGE_OFFSET
);
*
CSR_PCIROMBASE
=
0
;
*
CSR_PCICMD
=
PCI_COMMAND_IO
|
PCI_COMMAND_MEMORY
|
PCI_COMMAND_MASTER
|
PCI_COMMAND_FAST_BACK
|
PCI_COMMAND_INVALIDATE
|
PCI_COMMAND_PARITY
|
*
CSR_PCICMD
=
pci_cmd
|
(
1
<<
31
)
|
(
1
<<
29
)
|
(
1
<<
28
)
|
(
1
<<
24
);
#endif
printk
(
KERN_DEBUG
"PCI: DC21285 footbridge, revision %02lX
\n
"
,
*
CSR_CLASSREV
&
0xff
);
pci_scan_bus
(
0
,
&
dc21285_ops
,
NULL
);
for
(
i
=
0
;
i
<
MAX_NR_BUS
;
i
++
)
{
sysdata
.
bus
[
i
].
features
=
PCI_COMMAND_FAST_BACK
|
PCI_COMMAND_SERR
|
PCI_COMMAND_PARITY
;
sysdata
.
bus
[
i
].
maxdevsel
=
PCI_STATUS_DEVSEL_FAST
;
}
pci_scan_bus
(
0
,
&
dc21285_ops
,
&
sysdata
);
pci_cmd
|=
sysdata
.
bus
[
0
].
features
;
printk
(
"Fast back to back PCI transfers %sabled
\n
"
,
(
sysdata
.
bus
[
0
].
features
&
PCI_COMMAND_FAST_BACK
)
?
"en"
:
"dis"
);
/*
* Clear any existing errors - we aren't
* interested in historical data...
*/
cntl
=
*
CSR_SA110_CNTL
&
0xffffde07
;
*
CSR_SA110_CNTL
=
cntl
|
SA110_CNTL_RXSERR
;
cntl
=
*
CSR_PCICMD
&
0x0000ffff
;
*
CSR_PCICMD
=
cntl
|
1
<<
31
|
1
<<
29
|
1
<<
28
|
1
<<
24
;
cntl
=
*
CSR_SA110_CNTL
&
0xffffde07
;
*
CSR_SA110_CNTL
=
cntl
|
SA110_CNTL_RXSERR
;
*
CSR_PCICMD
=
pci_cmd
|
1
<<
31
|
1
<<
29
|
1
<<
28
|
1
<<
24
;
/*
* Initialise PCI error IRQ after we've finished probing
...
...
arch/arm/kernel/hw-footbridge.c
View file @
312d62f3
...
...
@@ -613,7 +613,7 @@ EXPORT_SYMBOL(cpld_modify);
/*
* CATS stuff
*/
#ifdef CONFIG_CATS
#ifdef CONFIG_
ARCH_
CATS
#define CONFIG_PORT 0x370
#define INDEX_PORT (CONFIG_PORT)
...
...
@@ -698,7 +698,7 @@ void __init hw_init(void)
#endif
}
#endif
#ifdef CONFIG_CATS
#ifdef CONFIG_
ARCH_
CATS
if
(
machine_is_cats
())
cats_hw_init
();
#endif
...
...
arch/arm/kernel/process.c
View file @
312d62f3
/*
* linux/arch/arm/kernel/process.c
*
* Copyright (C) 1996-
1999
Russell King - Converted to ARM.
* Copyright (C) 1996-
2000
Russell King - Converted to ARM.
* Origional Copyright (C) 1995 Linus Torvalds
*/
...
...
@@ -32,6 +32,7 @@
#include <asm/io.h>
extern
char
*
processor_modes
[];
extern
void
setup_mm_for_reboot
(
char
mode
);
asmlinkage
void
ret_from_sys_call
(
void
)
__asm__
(
"ret_from_sys_call"
);
...
...
@@ -96,15 +97,28 @@ __setup("reboot=", reboot_setup);
void
machine_restart
(
char
*
__unused
)
{
/*
*
Turn off caches, interrupts, etc
*
Clean and disable cache, and turn off interrupts
*/
cpu_proc_fin
();
/*
* Tell the mm system that we are going to reboot -
* we may need it to insert some 1:1 mappings so that
* soft boot works.
*/
setup_mm_for_reboot
(
reboot_mode
);
/*
* Now call the architecture specific reboot code.
*/
arch_reset
(
reboot_mode
);
/*
* Whoops - the architecture was unable to reboot.
* Tell the user!
*/
mdelay
(
1000
);
printk
(
"Reboot failed -- System halted
\n
"
);
cli
();
while
(
1
);
}
...
...
arch/arm/mm/fault-armv.c
View file @
312d62f3
...
...
@@ -379,7 +379,8 @@ static const struct fsr_info {
*/
#define BUG_PROC_MSG \
KERN_DEBUG "Weird data abort (%08X).\n" \
KERN_DEBUG "Please see http://www.arm.linux.org.uk/state.html for more information"
KERN_DEBUG "Please see http://www.arm.linux.org.uk/state.html for " \
"more information\n"
asmlinkage
void
do_DataAbort
(
unsigned
long
addr
,
int
fsr
,
int
error_code
,
struct
pt_regs
*
regs
)
...
...
arch/arm/mm/mm-armo.c
View file @
312d62f3
...
...
@@ -3,7 +3,7 @@
*
* Page table sludge for older ARM processor architectures.
*
* Copyright (C) 1998-
1999
Russell King
* Copyright (C) 1998-
2000
Russell King
*/
#include <linux/sched.h>
#include <linux/mm.h>
...
...
@@ -134,6 +134,13 @@ pte_t *get_pte_slow(pmd_t *pmd, unsigned long offset)
return
(
pte_t
*
)
pmd_page
(
*
pmd
)
+
offset
;
}
/*
* No special code is required here.
*/
void
setup_mm_for_reboot
(
char
mode
)
{
}
/*
* This contains the code to setup the memory map on an ARM2/ARM250/ARM3
* machine. This is both processor & architecture specific, and requires
...
...
@@ -155,6 +162,9 @@ void __init pagetable_init(void)
pgd_val
(
swapper_pg_dir
[
i
])
=
0
;
}
/*
* We never have holes in the memmap
*/
void
__init
create_memmap_holes
(
void
)
{
}
arch/arm/mm/mm-armv.c
View file @
312d62f3
...
...
@@ -3,7 +3,7 @@
*
* Page table sludge for ARM v3 and v4 processor architectures.
*
* Copyright (C) 1998-
1999
Russell King
* Copyright (C) 1998-
2000
Russell King
*/
#include <linux/sched.h>
#include <linux/mm.h>
...
...
@@ -286,6 +286,25 @@ static void __init create_mapping(struct map_desc *md)
}
}
/*
* In order to soft-boot, we need to insert a 1:1 mapping in place of
* the user-mode pages. This will then ensure that we have predictable
* results when turning the mmu off
*/
void
setup_mm_for_reboot
(
char
mode
)
{
pgd_t
*
pgd
=
current
->
mm
->
pgd
;
pmd_t
pmd
;
int
i
;
for
(
i
=
0
;
i
<
FIRST_USER_PGD_NR
+
USER_PTRS_PER_PGD
;
i
++
)
{
pmd_val
(
pmd
)
=
(
i
<<
PGDIR_SHIFT
)
|
PMD_SECT_AP_WRITE
|
PMD_SECT_AP_READ
|
PMD_TYPE_SECT
;
set_pmd
(
pmd_offset
(
pgd
+
i
,
i
<<
PGDIR_SHIFT
),
pmd
);
}
}
void
__init
pagetable_init
(
void
)
{
struct
map_desc
*
init_maps
,
*
p
,
*
q
;
...
...
arch/arm/mm/proc-arm6,7.S
View file @
312d62f3
/*
*
linux
/
arch
/
arm
/
mm
/
proc
-
arm6
,
7
.
S
:
MMU
functions
for
ARM6
*
*
(
C
)
1997
-
1999
Russell
King
*
(
C
)
1997
-
2000
Russell
King
*
*
These
are
the
low
level
assembler
for
performing
cache
and
TLB
*
functions
on
the
ARM6
&
ARM7
.
...
...
@@ -342,15 +342,17 @@ ENTRY(cpu_arm7_set_pte)
/*
*
Function
:
_arm6_7_reset
*
*
Params
:
r0
=
address
to
jump
to
*
Notes
:
This
sets
up
everything
for
a
reset
*/
ENTRY
(
cpu_arm6_reset
)
ENTRY
(
cpu_arm7_reset
)
mov
r0
,
#
0
mcr
p15
,
0
,
r0
,
c7
,
c0
,
0
@
flush
cache
mcr
p15
,
0
,
r0
,
c5
,
c0
,
0
@
flush
TLB
mov
pc
,
lr
mov
r1
,
#
0
mcr
p15
,
0
,
r1
,
c7
,
c0
,
0
@
flush
cache
mcr
p15
,
0
,
r1
,
c5
,
c0
,
0
@
flush
TLB
mov
r1
,
#
0x30
mcr
p15
,
0
,
r1
,
c1
,
c0
,
0
@
turn
off
MMU
etc
mov
pc
,
r0
cpu_armvlsi_name
:
.
asciz
"ARM/VLSI"
...
...
arch/arm/mm/proc-sa110.S
View file @
312d62f3
/*
*
linux
/
arch
/
arm
/
mm
/
proc
-
sa110
.
S
:
MMU
functions
for
SA110
*
*
(
C
)
1997
-
1999
Russell
King
*
(
C
)
1997
-
2000
Russell
King
*
*
These
are
the
low
level
assembler
for
performing
cache
and
TLB
*
functions
on
the
StrongARM
-
110
and
StrongARM
-
1100
...
...
@@ -225,9 +225,9 @@ ENTRY(cpu_sa1100_flush_ram_page)
.
align
5
ENTRY
(
cpu_sa110_flush_tlb_all
)
ENTRY
(
cpu_sa1100_flush_tlb_all
)
mov
r0
,
#
0
mcr
p15
,
0
,
r0
,
c7
,
c10
,
4
@
drain
WB
mcr
p15
,
0
,
r0
,
c8
,
c7
,
0
@
flush
I
&
D
tlbs
mov
ip
,
#
0
mcr
p15
,
0
,
ip
,
c7
,
c10
,
4
@
drain
WB
mcr
p15
,
0
,
ip
,
c8
,
c7
,
0
@
flush
I
&
D
tlbs
mov
pc
,
lr
/*
...
...
@@ -421,16 +421,18 @@ ENTRY(cpu_sa1100_proc_init)
ENTRY
(
cpu_sa110_proc_fin
)
ENTRY
(
cpu_sa1100_proc_fin
)
stmfd
sp
!,
{
r1
,
lr
}
mrs
r0
,
cpsr
orr
r0
,
r0
,
#
F_BIT
|
I_BIT
msr
cpsr
,
r0
bl
cpu_sa110_flush_cache_all
@
clean
caches
mov
r0
,
#
0
mcr
p15
,
0
,
r0
,
c15
,
c2
,
2
@
Disable
clock
switching
mrc
p15
,
0
,
r0
,
c1
,
c0
,
0
bic
r0
,
r0
,
#
0x1
100
@
...
i
...
s
........
bic
r0
,
r0
,
#
0x1
000
@
...
i
....
........
bic
r0
,
r0
,
#
0x000e
@
............
wca
.
mcr
p15
,
0
,
r0
,
c1
,
c0
,
0
@
disable
caches
mov
pc
,
lr
ldmfd
sp
!,
{
r1
,
pc
}
.
align
5
ENTRY
(
cpu_sa110_do_idle
)
...
...
@@ -448,18 +450,21 @@ ENTRY(cpu_sa1100_do_idle)
/*
*
Function
:
sa110_reset
*
Params
:
r0
=
address
to
jump
to
*
Notes
:
This
sets
up
everything
for
a
reset
*/
.
align
5
ENTRY
(
cpu_sa110_reset
)
ENTRY
(
cpu_sa1100_reset
)
stmfd
sp
!,
{
r1
,
lr
}
bl
cpu_sa110_flush_cache_all
bl
cpu_sa110_flush_tlb_all
mov
ip
,
#
0
mcr
p15
,
0
,
ip
,
c7
,
c7
,
0
@
flush
I
,
D
caches
mrc
p15
,
0
,
r0
,
c1
,
c0
,
0
@
ctrl
register
bic
r0
,
r0
,
#
0x000f
@
............
wcam
bic
r0
,
r0
,
#
0x1100
@
...
i
...
s
........
ldmfd
sp
!,
{
r1
,
pc
}
mcr
p15
,
0
,
ip
,
c7
,
c10
,
4
@
drain
WB
mcr
p15
,
0
,
ip
,
c8
,
c7
,
0
@
flush
I
&
D
tlbs
mrc
p15
,
0
,
ip
,
c1
,
c0
,
0
@
ctrl
register
bic
ip
,
ip
,
#
0x000f
@
............
wcam
bic
ip
,
ip
,
#
0x1100
@
...
i
...
s
........
mcr
p15
,
0
,
ip
,
c1
,
c0
,
0
@
ctrl
register
mov
pc
,
r0
/*
*
Purpose
:
Function
pointers
used
to
access
above
functions
-
all
calls
*
come
through
these
...
...
arch/i386/boot/compressed/head.S
View file @
312d62f3
...
...
@@ -33,10 +33,10 @@ startup_32:
cld
cli
movl
$
(
__KERNEL_DS
),%
eax
movl
%
ax
,%
ds
movl
%
ax
,%
es
movl
%
ax
,%
fs
movl
%
ax
,%
gs
movl
%
e
ax
,%
ds
movl
%
e
ax
,%
es
movl
%
e
ax
,%
fs
movl
%
e
ax
,%
gs
lss
SYMBOL_NAME
(
stack_start
),%
esp
xorl
%
eax
,%
eax
...
...
arch/i386/kernel/setup.c
View file @
312d62f3
...
...
@@ -793,7 +793,7 @@ static int __init get_model_name(struct cpuinfo_x86 *c)
unsigned
int
n
,
dummy
,
*
v
,
ecx
,
edx
;
/* Actually we must have cpuid or we could never have
* figured out that this was AMD from the vendor info :-).
* figured out that this was AMD
/Cyrix
from the vendor info :-).
*/
cpuid
(
0x80000000
,
&
n
,
&
dummy
,
&
dummy
,
&
dummy
);
...
...
@@ -806,23 +806,27 @@ static int __init get_model_name(struct cpuinfo_x86 *c)
cpuid
(
0x80000004
,
&
v
[
8
],
&
v
[
9
],
&
v
[
10
],
&
v
[
11
]);
c
->
x86_model_id
[
48
]
=
0
;
/* Set MTRR capability flag if appropriate */
if
(
boot_cpu_data
.
x86
==
5
)
{
if
((
boot_cpu_data
.
x86_model
==
9
)
||
((
boot_cpu_data
.
x86_model
==
8
)
&&
(
boot_cpu_data
.
x86_mask
>=
8
)))
c
->
x86_capability
|=
X86_FEATURE_MTRR
;
}
if
(
n
>=
0x80000005
){
cpuid
(
0x80000005
,
&
dummy
,
&
dummy
,
&
ecx
,
&
edx
);
printk
(
"CPU: L1 I Cache: %dK L1 D Cache: %dK
\n
"
,
ecx
>>
24
,
edx
>>
24
);
c
->
x86_cache_size
=
(
ecx
>>
24
)
+
(
edx
>>
24
);
}
if
(
n
>=
0x80000006
){
cpuid
(
0x80000006
,
&
dummy
,
&
dummy
,
&
ecx
,
&
edx
);
printk
(
"CPU: L2 Cache: %dK
\n
"
,
ecx
>>
16
);
c
->
x86_cache_size
=
(
ecx
>>
16
);
if
(
c
->
x86_vendor
==
X86_VENDOR_AMD
)
{
if
(
boot_cpu_data
.
x86
==
5
)
{
if
((
boot_cpu_data
.
x86_model
==
9
)
||
((
boot_cpu_data
.
x86_model
==
8
)
&&
(
boot_cpu_data
.
x86_mask
>=
8
)))
c
->
x86_capability
|=
X86_FEATURE_MTRR
;
}
if
(
n
>=
0x80000005
){
cpuid
(
0x80000005
,
&
dummy
,
&
dummy
,
&
ecx
,
&
edx
);
printk
(
"CPU: L1 I Cache: %dK L1 D Cache: %dK
\n
"
,
ecx
>>
24
,
edx
>>
24
);
c
->
x86_cache_size
=
(
ecx
>>
24
)
+
(
edx
>>
24
);
}
if
(
n
>=
0x80000006
){
cpuid
(
0x80000006
,
&
dummy
,
&
dummy
,
&
ecx
,
&
edx
);
printk
(
"CPU: L2 Cache: %dK
\n
"
,
ecx
>>
16
);
c
->
x86_cache_size
=
(
ecx
>>
16
);
}
}
return
1
;
}
...
...
@@ -1034,6 +1038,8 @@ static void __init cyrix_model(struct cpuinfo_x86 *c)
printk
(
KERN_INFO
"Working around Cyrix MediaGX virtual DMA bugs.
\n
"
);
isa_dma_bridge_buggy
=
2
;
#endif
c
->
x86_cache_size
=
16
;
/* Yep 16K integrated cache thats it */
/* GXm supports extended cpuid levels 'ala' AMD */
if
(
c
->
cpuid_level
==
2
)
{
get_model_name
(
c
);
/* get CPU marketing name */
...
...
arch/sparc64/config.in
View file @
312d62f3
...
...
@@ -226,6 +226,7 @@ if [ "$CONFIG_NET" = "y" ]; then
tristate ' Sun QuadEthernet support' CONFIG_SUNQE
if [ "$CONFIG_PCI" = "y" ]; then
tristate 'Generic DECchip & DIGITAL EtherWORKS PCI/EISA' CONFIG_DE4X5
tristate 'DECchip Tulip (dc21x4x) PCI support' CONFIG_TULIP
tristate '3c590/3c900 series (592/595/597) "Vortex/Boomerang" support' CONFIG_VORTEX
tristate 'RealTek RTL-8139 support' CONFIG_8139TOO
tristate 'PCI NE2000 support' CONFIG_NE2K_PCI
...
...
arch/sparc64/defconfig
View file @
312d62f3
...
...
@@ -332,6 +332,7 @@ CONFIG_HAPPYMEAL=y
CONFIG_SUNBMAC=m
CONFIG_SUNQE=m
CONFIG_DE4X5=m
CONFIG_TULIP=m
CONFIG_VORTEX=m
CONFIG_8139TOO=m
CONFIG_NE2K_PCI=m
...
...
drivers/block/Config.in
View file @
312d62f3
...
...
@@ -31,7 +31,7 @@ if [ "$CONFIG_ATARI" = "y" ]; then
fi
fi
tristate 'XT hard disk support' CONFIG_BLK_DEV_XD
dep_tristate 'Parallel port IDE device support' CONFIG_PARIDE $CONFIG_PAR
IDE_PAR
PORT
dep_tristate 'Parallel port IDE device support' CONFIG_PARIDE $CONFIG_PARPORT
if [ "$CONFIG_PARIDE" = "y" -o "$CONFIG_PARIDE" = "m" ]; then
source drivers/block/paride/Config.in
fi
...
...
drivers/char/dtlk.c
View file @
312d62f3
/* -*- linux-c -*-
* dtlk.c - DoubleTalk PC driver for Linux kernel 2.0.29
*
* $Id: dtlk.c,v 1.19 1999/02/28 12:13:13 jrv Exp jrv $
* dtlk.c - DoubleTalk PC driver for Linux
*
* Original author: Chris Pallotta <chris@allmedia.com>
* Current maintainer: Jim Van Zandt <jrv@vanzandt.mv.com>
*
* 2000-03-18 Jim Van Zandt: Fix polling.
* Eliminate dtlk_timer_active flag and separate dtlk_stop_timer
* function. Don't restart timer in dtlk_timer_tick. Restart timer
* in dtlk_poll after every poll. dtlk_poll returns mask (duh).
* Eliminate unused function dtlk_write_byte. Misc. code cleanups.
*/
/* This driver is for the DoubleTalk PC, a speech synthesizer
...
...
@@ -79,7 +83,6 @@ static int dtlk_major;
static
int
dtlk_port_lpc
;
static
int
dtlk_port_tts
;
static
int
dtlk_busy
;
static
int
dtlk_timer_active
;
static
int
dtlk_has_indexing
;
static
unsigned
int
dtlk_portlist
[]
=
{
0x25e
,
0x29e
,
0x2de
,
0x31e
,
0x35e
,
0x39e
,
0
};
...
...
@@ -114,13 +117,11 @@ static struct dtlk_settings *dtlk_interrogate(void);
static
int
dtlk_readable
(
void
);
static
char
dtlk_read_lpc
(
void
);
static
char
dtlk_read_tts
(
void
);
static
void
dtlk_stop_timer
(
void
);
static
int
dtlk_writeable
(
void
);
static
char
dtlk_write_bytes
(
const
char
*
buf
,
int
n
);
static
char
dtlk_write_tts
(
char
);
/*
static void dtlk_handle_error(char, char, unsigned int);
static char dtlk_write_byte(unsigned int, const char*);
*/
static
void
dtlk_timer_tick
(
unsigned
long
data
);
...
...
@@ -250,43 +251,27 @@ static unsigned int dtlk_poll(struct file *file, poll_table * wait)
poll_wait
(
file
,
&
dtlk_process_list
,
wait
);
if
(
dtlk_has_indexing
&&
dtlk_readable
())
{
dtlk_stop_timer
(
);
del_timer
(
&
dtlk_timer
);
mask
=
POLLIN
|
POLLRDNORM
;
}
if
(
dtlk_writeable
())
{
dtlk_stop_timer
(
);
del_timer
(
&
dtlk_timer
);
mask
|=
POLLOUT
|
POLLWRNORM
;
}
/* there are no exception conditions */
if
(
mask
==
0
&&
!
dtlk_timer_active
)
{
/* not ready just yet. There won't be any interrupts,
so we set a timer instead. */
dtlk_timer_active
=
1
;
dtlk_timer
.
expires
=
jiffies
+
HZ
/
100
;
add_timer
(
&
dtlk_timer
);
}
return
0
;
}
/* There won't be any interrupts, so we set a timer instead. */
del_timer
(
&
dtlk_timer
);
dtlk_timer
.
expires
=
jiffies
+
3
*
HZ
/
100
;
add_timer
(
&
dtlk_timer
);
static
void
dtlk_stop_timer
()
{
if
(
dtlk_timer_active
)
{
dtlk_timer_active
=
0
;
del_timer
(
&
dtlk_timer
);
}
return
mask
;
}
static
void
dtlk_timer_tick
(
unsigned
long
data
)
{
TRACE_TEXT
(
" dtlk_timer_tick"
);
wake_up_interruptible
(
&
dtlk_process_list
);
if
(
dtlk_timer_active
)
{
del_timer
(
&
dtlk_timer
);
dtlk_timer
.
expires
=
jiffies
+
HZ
/
100
;
add_timer
(
&
dtlk_timer
);
}
}
static
int
dtlk_ioctl
(
struct
inode
*
inode
,
...
...
@@ -348,7 +333,7 @@ static int dtlk_release(struct inode *inode, struct file *file)
}
TRACE_RET
;
d
tlk_stop_timer
(
);
d
el_timer
(
&
dtlk_timer
);
return
0
;
}
...
...
@@ -360,7 +345,6 @@ static int __init dtlk_init(void)
dtlk_port_lpc
=
0
;
dtlk_port_tts
=
0
;
dtlk_busy
=
0
;
dtlk_timer_active
=
0
;
dtlk_major
=
devfs_register_chrdev
(
0
,
"dtlk"
,
&
dtlk_fops
);
if
(
dtlk_major
==
0
)
{
printk
(
KERN_ERR
"DoubleTalk PC - cannot register device
\n
"
);
...
...
@@ -410,15 +394,17 @@ static void dtlk_delay(int ms)
static
int
dtlk_readable
(
void
)
{
TRACE_TEXT
(
" dtlk_readable"
);
#ifdef TRACING
printk
(
" dtlk_readable=%u@%u"
,
inb_p
(
dtlk_port_lpc
)
!=
0x7f
,
jiffies
);
#endif
return
inb_p
(
dtlk_port_lpc
)
!=
0x7f
;
}
static
int
dtlk_writeable
(
void
)
{
/* TRACE_TEXT(" dtlk_writeable"); */
#ifdef TRACING
printk
(
" dtlk_writeable
(%02x)"
,
inb_p
(
dtlk_port_tts
)
);
#ifdef TRACING
MORE
printk
(
" dtlk_writeable
=%u"
,
(
inb_p
(
dtlk_port_tts
)
&
TTS_WRITABLE
)
!=
0
);
#endif
return
inb_p
(
dtlk_port_tts
)
&
TTS_WRITABLE
;
}
...
...
@@ -465,7 +451,9 @@ static int __init dtlk_dev_probe(void)
appears. */
dtlk_delay
(
100
);
dtlk_has_indexing
=
dtlk_readable
();
#ifdef TRACING
printk
(
", indexing %d
\n
"
,
dtlk_has_indexing
);
#endif
#ifdef INSCOPE
{
/* This macro records ten samples read from the LPC port, for later display */
...
...
@@ -479,17 +467,17 @@ for (i = 0; i < 10; i++) \
int
b
=
0
,
i
,
j
;
LOOK
outb_p
(
0xff
,
dtlk_port_lpc
);
outb_p
(
0xff
,
dtlk_port_lpc
);
buffer
[
b
++
]
=
0
;
LOOK
dtlk_write_bytes
(
"
\001
2I
\r
"
,
4
);
dtlk_write_bytes
(
"
\001
2I
\r
"
,
4
);
buffer
[
b
++
]
=
0
;
__delay
(
50
*
loops_per_sec
/
1000
);
outb_p
(
0xff
,
dtlk_port_lpc
);
buffer
[
b
++
]
=
0
;
LOOK
printk
(
"
\n
"
);
printk
(
"
\n
"
);
for
(
j
=
0
;
j
<
b
;
j
++
)
printk
(
" %02x"
,
buffer
[
j
]);
printk
(
"
\n
"
);
...
...
@@ -510,12 +498,12 @@ for (i = 0; i < 10; i++) \
__delay
(
loops_per_sec
/
100
);
/* 10 ms */
LOOK
outb_p
(
0x03
,
dtlk_port_tts
);
outb_p
(
0x03
,
dtlk_port_tts
);
buffer
[
b
++
]
=
0
;
LOOK
LOOK
LOOK
printk
(
"
\n
"
);
printk
(
"
\n
"
);
for
(
j
=
0
;
j
<
b
;
j
++
)
printk
(
" %02x"
,
buffer
[
j
]);
printk
(
"
\n
"
);
...
...
@@ -555,7 +543,7 @@ static struct dtlk_settings *dtlk_interrogate(void)
if
(
total
>
2
&&
buf
[
total
]
==
0x7f
)
break
;
if
(
total
<
sizeof
(
struct
dtlk_settings
))
total
++
;
total
++
;
}
/*
if (i==50) printk("interrogate() read overrun\n");
...
...
@@ -606,7 +594,8 @@ static char dtlk_read_tts(void)
/* verify DT is ready, read char, wait for ACK */
do
{
portval
=
inb_p
(
dtlk_port_tts
);
}
while
((
portval
&
TTS_READABLE
)
==
0
&&
retries
++
<
DTLK_MAX_RETRIES
);
}
while
((
portval
&
TTS_READABLE
)
==
0
&&
retries
++
<
DTLK_MAX_RETRIES
);
if
(
retries
==
DTLK_MAX_RETRIES
)
printk
(
KERN_ERR
"dtlk_read_tts() timeout
\n
"
);
...
...
@@ -617,7 +606,8 @@ static char dtlk_read_tts(void)
retries
=
0
;
do
{
portval
=
inb_p
(
dtlk_port_tts
);
}
while
((
portval
&
TTS_READABLE
)
!=
0
&&
retries
++
<
DTLK_MAX_RETRIES
);
}
while
((
portval
&
TTS_READABLE
)
!=
0
&&
retries
++
<
DTLK_MAX_RETRIES
);
if
(
retries
==
DTLK_MAX_RETRIES
)
printk
(
KERN_ERR
"dtlk_read_tts() timeout
\n
"
);
...
...
@@ -649,22 +639,6 @@ static char dtlk_read_lpc(void)
return
ch
;
}
#ifdef NEVER
static
char
dtlk_write_byte
(
unsigned
int
minor
,
const
char
*
buf
)
{
char
ch
;
int
err
;
/* TRACE_TEXT("(dtlk_write_byte"); */
err
=
get_user
(
ch
,
buf
);
/* printk(" dtlk_write_byte(%d, 0x%02x)", minor, (int)ch); */
ch
=
dtlk_write_tts
(
ch
);
/*
TRACE_RET; */
return
ch
;
}
#endif
/* NEVER */
/* write n bytes to tts port */
static
char
dtlk_write_bytes
(
const
char
*
buf
,
int
n
)
{
...
...
@@ -680,7 +654,7 @@ static char dtlk_write_bytes(const char *buf, int n)
static
char
dtlk_write_tts
(
char
ch
)
{
int
retries
=
0
;
#ifdef TRACING
#ifdef TRACING
MORE
printk
(
" dtlk_write_tts("
);
if
(
' '
<=
ch
&&
ch
<=
'~'
)
printk
(
"'%c'"
,
ch
);
...
...
@@ -702,7 +676,7 @@ static char dtlk_write_tts(char ch)
if
((
inb_p
(
dtlk_port_tts
)
&
TTS_WRITABLE
)
==
0
)
break
;
#ifdef TRACING
#ifdef TRACING
MORE
printk
(
")
\n
"
);
#endif
return
0
;
...
...
drivers/ide/ide-probe.c
View file @
312d62f3
...
...
@@ -470,11 +470,13 @@ static void probe_hwif (ide_hwif_t *hwif)
if
(
hwif
->
noprobe
)
return
;
#ifdef CONFIG_BLK_DEV_IDE
if
(
hwif
->
io_ports
[
IDE_DATA_OFFSET
]
==
HD_DATA
)
{
extern
void
probe_cmos_for_drives
(
ide_hwif_t
*
);
probe_cmos_for_drives
(
hwif
);
}
#endif
if
((
hwif
->
chipset
!=
ide_4drives
||
!
hwif
->
mate
->
present
)
&&
#if CONFIG_BLK_DEV_PDC4030
...
...
drivers/net/8390.c
View file @
312d62f3
...
...
@@ -478,7 +478,9 @@ void ei_interrupt(int irq, void *dev_id, struct pt_regs * regs)
outb_p
(
E8390_NODMA
+
E8390_PAGE0
+
E8390_START
,
e8390_base
+
E8390_CMD
);
if
(
nr_serviced
>=
MAX_SERVICE
)
{
printk
(
KERN_WARNING
"%s: Too much work at interrupt, status %#2.2x
\n
"
,
/* 0xFF is valid for a card removal */
if
(
interrupts
!=
0xFF
)
printk
(
KERN_WARNING
"%s: Too much work at interrupt, status %#2.2x
\n
"
,
dev
->
name
,
interrupts
);
outb_p
(
ENISR_ALL
,
e8390_base
+
EN0_ISR
);
/* Ack. most intrs. */
}
else
{
...
...
@@ -588,8 +590,8 @@ static void ei_tx_intr(struct net_device *dev)
else
ei_local
->
lasttx
=
10
,
ei_local
->
txing
=
0
;
}
else
printk
(
KERN_WARNING
"%s: unexpected TX-done interrupt, lasttx=%d.
\n
"
,
dev
->
name
,
ei_local
->
lasttx
);
//
else printk(KERN_WARNING "%s: unexpected TX-done interrupt, lasttx=%d.\n",
//
dev->name, ei_local->lasttx);
#else
/* EI_PINGPONG */
/*
...
...
@@ -651,8 +653,12 @@ static void ei_receive(struct net_device *dev)
this_frame
=
ei_local
->
rx_start_page
;
/* Someday we'll omit the previous, iff we never get this message.
(There is at least one clone claimed to have a problem.) */
if
(
ei_debug
>
0
&&
this_frame
!=
ei_local
->
current_page
)
(There is at least one clone claimed to have a problem.)
Keep quiet if it looks like a card removal. One problem here
is that some clones crash in roughly the same way.
*/
if
(
ei_debug
>
0
&&
this_frame
!=
ei_local
->
current_page
&&
(
this_frame
!=
0x0
||
rxing_page
!=
0xFF
))
printk
(
KERN_ERR
"%s: mismatched read page pointers %2x vs %2x.
\n
"
,
dev
->
name
,
this_frame
,
ei_local
->
current_page
);
...
...
drivers/net/net_init.c
View file @
312d62f3
...
...
@@ -395,6 +395,8 @@ int ether_config(struct net_device *dev, struct ifmap *map)
int
register_netdev
(
struct
net_device
*
dev
)
{
int
err
;
rtnl_lock
();
/*
...
...
@@ -404,8 +406,9 @@ int register_netdev(struct net_device *dev)
if
(
dev
->
name
&&
strchr
(
dev
->
name
,
'%'
))
{
err
=
-
EBUSY
;
if
(
dev_alloc_name
(
dev
,
dev
->
name
)
<
0
)
return
-
EBUSY
;
goto
out
;
}
/*
...
...
@@ -414,17 +417,21 @@ int register_netdev(struct net_device *dev)
if
(
dev
->
name
&&
(
dev
->
name
[
0
]
==
0
||
dev
->
name
[
0
]
==
' '
))
{
err
=
-
EBUSY
;
if
(
dev_alloc_name
(
dev
,
"eth%d"
)
<
0
)
return
-
EBUSY
;
goto
out
;
}
if
(
register_netdevice
(
dev
))
{
rtnl_unlock
();
return
-
EIO
;
}
err
=
-
EIO
;
if
(
register_netdevice
(
dev
))
goto
out
;
err
=
0
;
out:
rtnl_unlock
();
return
0
;
return
err
;
}
void
unregister_netdev
(
struct
net_device
*
dev
)
...
...
drivers/net/pcnet32.c
View file @
312d62f3
...
...
@@ -929,7 +929,7 @@ pcnet32_init_ring(struct net_device *dev)
lp
->
tx_ring
[
i
].
status
=
0
;
}
lp
->
init_block
.
tlen_rlen
=
TX_RING_LEN_BITS
|
RX_RING_LEN_BITS
;
lp
->
init_block
.
tlen_rlen
=
le16_to_cpu
(
TX_RING_LEN_BITS
|
RX_RING_LEN_BITS
)
;
for
(
i
=
0
;
i
<
6
;
i
++
)
lp
->
init_block
.
phys_addr
[
i
]
=
dev
->
dev_addr
[
i
];
lp
->
init_block
.
rx_ring
=
(
u32
)
le32_to_cpu
(
virt_to_bus
(
lp
->
rx_ring
));
...
...
@@ -1050,8 +1050,10 @@ pcnet32_start_xmit(struct sk_buff *skb, struct net_device *dev)
if
(
lp
->
tx_ring
[(
entry
+
1
)
&
TX_RING_MOD_MASK
].
base
==
0
)
netif_start_queue
(
dev
);
else
else
{
lp
->
tx_full
=
1
;
netif_stop_queue
(
dev
);
}
spin_unlock_irqrestore
(
&
lp
->
lock
,
flags
);
return
0
;
}
...
...
drivers/net/tulip/interrupt.c
View file @
312d62f3
...
...
@@ -16,6 +16,7 @@
#include "tulip.h"
#include <asm/io.h>
#include <linux/etherdevice.h>
#include <linux/pci.h>
int
tulip_rx_copybreak
;
...
...
@@ -32,13 +33,20 @@ static int tulip_refill_rx(struct net_device *dev)
/* Refill the Rx ring buffers. */
for
(;
tp
->
cur_rx
-
tp
->
dirty_rx
>
0
;
tp
->
dirty_rx
++
)
{
entry
=
tp
->
dirty_rx
%
RX_RING_SIZE
;
if
(
tp
->
rx_
skbuff
[
entry
]
==
NULL
)
{
if
(
tp
->
rx_
buffers
[
entry
].
skb
==
NULL
)
{
struct
sk_buff
*
skb
;
skb
=
tp
->
rx_skbuff
[
entry
]
=
dev_alloc_skb
(
PKT_BUF_SZ
);
dma_addr_t
mapping
;
skb
=
tp
->
rx_buffers
[
entry
].
skb
=
dev_alloc_skb
(
PKT_BUF_SZ
);
if
(
skb
==
NULL
)
break
;
mapping
=
pci_map_single
(
tp
->
pdev
,
skb
->
tail
,
PKT_BUF_SZ
,
PCI_DMA_FROMDEVICE
);
tp
->
rx_buffers
[
entry
].
mapping
=
mapping
;
skb
->
dev
=
dev
;
/* Mark as being used by this device. */
tp
->
rx_ring
[
entry
].
buffer1
=
virt_to_le32desc
(
skb
->
tail
);
tp
->
rx_ring
[
entry
].
buffer1
=
cpu_to_le32
(
mapping
);
refilled
++
;
}
tp
->
rx_ring
[
entry
].
status
=
cpu_to_le32
(
DescOwned
);
...
...
@@ -106,24 +114,39 @@ static int tulip_rx(struct net_device *dev)
&&
(
skb
=
dev_alloc_skb
(
pkt_len
+
2
))
!=
NULL
)
{
skb
->
dev
=
dev
;
skb_reserve
(
skb
,
2
);
/* 16 byte align the IP header */
pci_dma_sync_single
(
tp
->
pdev
,
tp
->
rx_buffers
[
entry
].
mapping
,
pkt_len
,
PCI_DMA_FROMDEVICE
);
#if ! defined(__alpha__)
eth_copy_and_sum
(
skb
,
tp
->
rx_skbuff
[
entry
]
->
tail
,
pkt_len
,
0
);
eth_copy_and_sum
(
skb
,
tp
->
rx_buffers
[
entry
].
skb
->
tail
,
pkt_len
,
0
);
skb_put
(
skb
,
pkt_len
);
#else
memcpy
(
skb_put
(
skb
,
pkt_len
),
tp
->
rx_skbuff
[
entry
]
->
tail
,
pkt_len
);
memcpy
(
skb_put
(
skb
,
pkt_len
),
tp
->
rx_buffers
[
entry
].
skb
->
tail
,
pkt_len
);
#endif
}
else
{
/* Pass up the skb already on the Rx ring. */
char
*
temp
=
skb_put
(
skb
=
tp
->
rx_skbuff
[
entry
],
pkt_len
);
tp
->
rx_skbuff
[
entry
]
=
NULL
;
char
*
temp
=
skb_put
(
skb
=
tp
->
rx_buffers
[
entry
].
skb
,
pkt_len
);
#ifndef final_version
if
(
le32desc_to_virt
(
tp
->
rx_ring
[
entry
].
buffer1
)
!=
temp
)
if
(
tp
->
rx_buffers
[
entry
].
mapping
!=
le32_to_cpu
(
tp
->
rx_ring
[
entry
].
buffer1
))
{
printk
(
KERN_ERR
"%s: Internal fault: The skbuff addresses "
"do not match in tulip_rx: %p vs. %p / %p.
\n
"
,
dev
->
name
,
le32desc_to_virt
(
tp
->
rx_ring
[
entry
].
buffer1
),
skb
->
head
,
temp
);
"do not match in tulip_rx: %08x vs. %08x %p / %p.
\n
"
,
dev
->
name
,
le32_to_cpu
(
tp
->
rx_ring
[
entry
].
buffer1
),
tp
->
rx_buffers
[
entry
].
mapping
,
skb
->
head
,
temp
);
}
#endif
pci_unmap_single
(
tp
->
pdev
,
tp
->
rx_buffers
[
entry
].
mapping
,
PKT_BUF_SZ
,
PCI_DMA_FROMDEVICE
);
tp
->
rx_buffers
[
entry
].
skb
=
NULL
;
tp
->
rx_buffers
[
entry
].
mapping
=
0
;
}
skb
->
protocol
=
eth_type_trans
(
skb
,
dev
);
netif_rx
(
skb
);
...
...
@@ -189,8 +212,13 @@ void tulip_interrupt(int irq, void *dev_instance, struct pt_regs *regs)
if
(
status
<
0
)
break
;
/* It still has not been Txed */
/* Check for Rx filter setup frames. */
if
(
tp
->
tx_skbuff
[
entry
]
==
NULL
)
if
(
tp
->
tx_buffers
[
entry
].
skb
==
NULL
)
{
pci_unmap_single
(
tp
->
pdev
,
tp
->
tx_buffers
[
entry
].
mapping
,
sizeof
(
tp
->
setup_frame
),
PCI_DMA_TODEVICE
);
continue
;
}
if
(
status
&
0x8000
)
{
/* There was an major error, log it. */
...
...
@@ -213,14 +241,20 @@ void tulip_interrupt(int irq, void *dev_instance, struct pt_regs *regs)
#ifdef ETHER_STATS
if
(
status
&
0x0001
)
tp
->
stats
.
tx_deferred
++
;
#endif
tp
->
stats
.
tx_bytes
+=
tp
->
tx_skbuff
[
entry
]
->
len
;
tp
->
stats
.
tx_bytes
+=
tp
->
tx_buffers
[
entry
].
skb
->
len
;
tp
->
stats
.
collisions
+=
(
status
>>
3
)
&
15
;
tp
->
stats
.
tx_packets
++
;
}
pci_unmap_single
(
tp
->
pdev
,
tp
->
tx_buffers
[
entry
].
mapping
,
tp
->
tx_buffers
[
entry
].
skb
->
len
,
PCI_DMA_TODEVICE
);
/* Free the original skb. */
dev_kfree_skb_irq
(
tp
->
tx_skbuff
[
entry
]);
tp
->
tx_skbuff
[
entry
]
=
0
;
dev_kfree_skb_irq
(
tp
->
tx_buffers
[
entry
].
skb
);
tp
->
tx_buffers
[
entry
].
skb
=
NULL
;
tp
->
tx_buffers
[
entry
].
mapping
=
0
;
tx
++
;
}
...
...
@@ -311,7 +345,7 @@ void tulip_interrupt(int irq, void *dev_instance, struct pt_regs *regs)
/* check if we card is in suspend mode */
entry
=
tp
->
dirty_rx
%
RX_RING_SIZE
;
if
(
tp
->
rx_
skbuff
[
entry
]
==
NULL
)
{
if
(
tp
->
rx_
buffers
[
entry
].
skb
==
NULL
)
{
if
(
tulip_debug
>
1
)
printk
(
KERN_WARNING
"%s: in rx suspend mode: (%lu) (tp->cur_rx = %u, ttimer = %d, rx = %d) go/stay in suspend mode
\n
"
,
dev
->
name
,
tp
->
nir
,
tp
->
cur_rx
,
tp
->
ttimer
,
rx
);
if
(
tp
->
ttimer
==
0
||
(
inl
(
ioaddr
+
CSR11
)
&
0xffff
)
==
0
)
{
...
...
drivers/net/tulip/tulip.h
View file @
312d62f3
...
...
@@ -204,12 +204,6 @@ enum desc_status_bits {
#define get_u16(ptr) (((u8*)(ptr))[0] + (((u8*)(ptr))[1]<<8))
#endif
/* Condensed operations for readability. */
#define virt_to_le32desc(addr) cpu_to_le32(virt_to_bus(addr))
#define le32desc_to_virt(addr) bus_to_virt(le32_to_cpu(addr))
struct
medialeaf
{
u8
type
;
u8
media
;
...
...
@@ -237,6 +231,10 @@ struct mediainfo {
unsigned
char
*
info
;
};
struct
ring_info
{
struct
sk_buff
*
skb
;
dma_addr_t
mapping
;
};
struct
tulip_private
{
const
char
*
product_name
;
...
...
@@ -246,10 +244,9 @@ struct tulip_private {
dma_addr_t
rx_ring_dma
;
dma_addr_t
tx_ring_dma
;
/* The saved address of a sent-in-place packet/buffer, for skfree(). */
struct
sk_buff
*
tx_skbuff
[
TX_RING_SIZE
];
struct
ring_info
tx_buffers
[
TX_RING_SIZE
];
/* The addresses of receive-in-place skbuffs. */
struct
sk_buff
*
rx_skbuff
[
RX_RING_SIZE
];
char
*
rx_buffs
;
/* Address of temporary Rx buffers. */
struct
ring_info
rx_buffers
[
RX_RING_SIZE
];
u16
setup_frame
[
96
];
/* Pseudo-Tx frame to init address table. */
int
chip_id
;
int
revision
;
...
...
drivers/net/tulip/tulip_core.c
View file @
312d62f3
...
...
@@ -51,7 +51,7 @@ const char * const medianame[] = {
};
/* Set the copy breakpoint for the copy-only-tiny-buffer Rx structure. */
#if defined(__alpha__) || defined(__arm__)
#if defined(__alpha__) || defined(__arm__)
|| defined(__sparc__)
static
int
rx_copybreak
=
1518
;
#else
static
int
rx_copybreak
=
100
;
...
...
@@ -72,8 +72,14 @@ static int rx_copybreak = 100;
#if defined(__alpha__)
static
int
csr0
=
0x01A00000
|
0xE000
;
#elif defined(__i386__) || defined(__powerpc__)
|| defined(__sparc__)
#elif defined(__i386__) || defined(__powerpc__)
static
int
csr0
=
0x01A00000
|
0x8000
;
#elif defined(__sparc__)
/* The UltraSparc PCI controllers will disconnect at every 64-byte
* crossing anyways so it makes no sense to tell Tulip to burst
* any more than that.
*/
static
int
csr0
=
0x01A00000
|
0x9000
;
#elif defined(__arm__)
static
int
csr0
=
0x01A00000
|
0x4800
;
#else
...
...
@@ -285,6 +291,7 @@ static void tulip_up(struct net_device *dev)
/* This is set_rx_mode(), but without starting the transmitter. */
u16
*
eaddrs
=
(
u16
*
)
dev
->
dev_addr
;
u16
*
setup_frm
=
&
tp
->
setup_frame
[
15
*
6
];
dma_addr_t
mapping
;
/* 21140 bug: you must add the broadcast address. */
memset
(
tp
->
setup_frame
,
0xff
,
sizeof
(
tp
->
setup_frame
));
...
...
@@ -292,9 +299,16 @@ static void tulip_up(struct net_device *dev)
*
setup_frm
++
=
eaddrs
[
0
];
*
setup_frm
++
=
eaddrs
[
0
];
*
setup_frm
++
=
eaddrs
[
1
];
*
setup_frm
++
=
eaddrs
[
1
];
*
setup_frm
++
=
eaddrs
[
2
];
*
setup_frm
++
=
eaddrs
[
2
];
mapping
=
pci_map_single
(
tp
->
pdev
,
tp
->
setup_frame
,
sizeof
(
tp
->
setup_frame
),
PCI_DMA_TODEVICE
);
tp
->
tx_buffers
[
0
].
skb
=
NULL
;
tp
->
tx_buffers
[
0
].
mapping
=
mapping
;
/* Put the setup frame on the Tx list. */
tp
->
tx_ring
[
0
].
length
=
cpu_to_le32
(
0x08000000
|
192
);
tp
->
tx_ring
[
0
].
buffer1
=
virt_to_le32desc
(
tp
->
setup_frame
);
tp
->
tx_ring
[
0
].
buffer1
=
cpu_to_le32
(
mapping
);
tp
->
tx_ring
[
0
].
status
=
cpu_to_le32
(
DescOwned
);
tp
->
cur_tx
++
;
...
...
@@ -569,30 +583,37 @@ static void tulip_init_ring(struct net_device *dev)
tp
->
rx_ring
[
i
].
status
=
0x00000000
;
tp
->
rx_ring
[
i
].
length
=
cpu_to_le32
(
PKT_BUF_SZ
);
tp
->
rx_ring
[
i
].
buffer2
=
cpu_to_le32
(
tp
->
rx_ring_dma
+
sizeof
(
struct
tulip_rx_desc
)
*
(
i
+
1
));
tp
->
rx_skbuff
[
i
]
=
NULL
;
tp
->
rx_buffers
[
i
].
skb
=
NULL
;
tp
->
rx_buffers
[
i
].
mapping
=
0
;
}
/* Mark the last entry as wrapping the ring. */
tp
->
rx_ring
[
i
-
1
].
length
=
cpu_to_le32
(
PKT_BUF_SZ
|
DESC_RING_WRAP
);
tp
->
rx_ring
[
i
-
1
].
buffer2
=
cpu_to_le32
(
tp
->
rx_ring_dma
);
for
(
i
=
0
;
i
<
RX_RING_SIZE
;
i
++
)
{
dma_addr_t
mapping
;
/* Note the receive buffer must be longword aligned.
dev_alloc_skb() provides 16 byte alignment. But do *not*
use skb_reserve() to align the IP header! */
struct
sk_buff
*
skb
=
dev_alloc_skb
(
PKT_BUF_SZ
);
tp
->
rx_
skbuff
[
i
]
=
skb
;
tp
->
rx_
buffers
[
i
].
skb
=
skb
;
if
(
skb
==
NULL
)
break
;
mapping
=
pci_map_single
(
tp
->
pdev
,
skb
->
tail
,
PKT_BUF_SZ
,
PCI_DMA_FROMDEVICE
);
tp
->
rx_buffers
[
i
].
mapping
=
mapping
;
skb
->
dev
=
dev
;
/* Mark as being used by this device. */
tp
->
rx_ring
[
i
].
status
=
cpu_to_le32
(
DescOwned
);
/* Owned by Tulip chip */
tp
->
rx_ring
[
i
].
buffer1
=
virt_to_le32desc
(
skb
->
tail
);
tp
->
rx_ring
[
i
].
buffer1
=
cpu_to_le32
(
mapping
);
}
tp
->
dirty_rx
=
(
unsigned
int
)(
i
-
RX_RING_SIZE
);
/* The Tx buffer descriptor is filled in as needed, but we
do need to clear the ownership bit. */
for
(
i
=
0
;
i
<
TX_RING_SIZE
;
i
++
)
{
tp
->
tx_skbuff
[
i
]
=
0
;
tp
->
tx_buffers
[
i
].
skb
=
NULL
;
tp
->
tx_buffers
[
i
].
mapping
=
0
;
tp
->
tx_ring
[
i
].
status
=
0x00000000
;
tp
->
tx_ring
[
i
].
buffer2
=
cpu_to_le32
(
tp
->
tx_ring_dma
+
sizeof
(
struct
tulip_tx_desc
)
*
(
i
+
1
));
}
...
...
@@ -605,6 +626,7 @@ tulip_start_xmit(struct sk_buff *skb, struct net_device *dev)
struct
tulip_private
*
tp
=
(
struct
tulip_private
*
)
dev
->
priv
;
int
entry
;
u32
flag
;
dma_addr_t
mapping
;
unsigned
long
cpuflags
;
/* Caution: the write order is important here, set the field
...
...
@@ -615,8 +637,11 @@ tulip_start_xmit(struct sk_buff *skb, struct net_device *dev)
/* Calculate the next Tx descriptor entry. */
entry
=
tp
->
cur_tx
%
TX_RING_SIZE
;
tp
->
tx_skbuff
[
entry
]
=
skb
;
tp
->
tx_ring
[
entry
].
buffer1
=
virt_to_le32desc
(
skb
->
data
);
tp
->
tx_buffers
[
entry
].
skb
=
skb
;
mapping
=
pci_map_single
(
tp
->
pdev
,
skb
->
data
,
skb
->
len
,
PCI_DMA_TODEVICE
);
tp
->
tx_buffers
[
entry
].
mapping
=
mapping
;
tp
->
tx_ring
[
entry
].
buffer1
=
cpu_to_le32
(
mapping
);
if
(
tp
->
cur_tx
-
tp
->
dirty_tx
<
TX_RING_SIZE
/
2
)
{
/* Typical path */
flag
=
0x60000000
;
/* No interrupt */
...
...
@@ -697,19 +722,31 @@ static int tulip_close (struct net_device *dev)
/* Free all the skbuffs in the Rx queue. */
for
(
i
=
0
;
i
<
RX_RING_SIZE
;
i
++
)
{
struct
sk_buff
*
skb
=
tp
->
rx_skbuff
[
i
];
tp
->
rx_skbuff
[
i
]
=
0
;
struct
sk_buff
*
skb
=
tp
->
rx_buffers
[
i
].
skb
;
dma_addr_t
mapping
=
tp
->
rx_buffers
[
i
].
mapping
;
tp
->
rx_buffers
[
i
].
skb
=
NULL
;
tp
->
rx_buffers
[
i
].
mapping
=
0
;
tp
->
rx_ring
[
i
].
status
=
0
;
/* Not owned by Tulip chip. */
tp
->
rx_ring
[
i
].
length
=
0
;
tp
->
rx_ring
[
i
].
buffer1
=
0xBADF00D0
;
/* An invalid address. */
if
(
skb
)
{
pci_unmap_single
(
tp
->
pdev
,
mapping
,
PKT_BUF_SZ
,
PCI_DMA_FROMDEVICE
);
dev_kfree_skb
(
skb
);
}
}
for
(
i
=
0
;
i
<
TX_RING_SIZE
;
i
++
)
{
if
(
tp
->
tx_skbuff
[
i
])
dev_kfree_skb
(
tp
->
tx_skbuff
[
i
]);
tp
->
tx_skbuff
[
i
]
=
0
;
struct
sk_buff
*
skb
=
tp
->
tx_buffers
[
i
].
skb
;
if
(
skb
!=
NULL
)
{
pci_unmap_single
(
tp
->
pdev
,
tp
->
tx_buffers
[
i
].
mapping
,
skb
->
len
,
PCI_DMA_TODEVICE
);
dev_kfree_skb
(
skb
);
}
tp
->
tx_buffers
[
i
].
skb
=
NULL
;
tp
->
tx_buffers
[
i
].
mapping
=
0
;
}
MOD_DEC_USE_COUNT
;
...
...
@@ -937,7 +974,8 @@ static void set_rx_mode(struct net_device *dev)
if
(
entry
!=
0
)
{
/* Avoid a chip errata by prefixing a dummy entry. */
tp
->
tx_skbuff
[
entry
]
=
0
;
tp
->
tx_buffers
[
entry
].
skb
=
NULL
;
tp
->
tx_buffers
[
entry
].
mapping
=
0
;
tp
->
tx_ring
[
entry
].
length
=
(
entry
==
TX_RING_SIZE
-
1
)
?
cpu_to_le32
(
DESC_RING_WRAP
)
:
0
;
tp
->
tx_ring
[
entry
].
buffer1
=
0
;
...
...
@@ -945,12 +983,17 @@ static void set_rx_mode(struct net_device *dev)
entry
=
tp
->
cur_tx
++
%
TX_RING_SIZE
;
}
tp
->
tx_skbuff
[
entry
]
=
0
;
tp
->
tx_buffers
[
entry
].
skb
=
NULL
;
tp
->
tx_buffers
[
entry
].
mapping
=
pci_map_single
(
tp
->
pdev
,
tp
->
setup_frame
,
sizeof
(
tp
->
setup_frame
),
PCI_DMA_TODEVICE
);
/* Put the setup frame on the Tx list. */
if
(
entry
==
TX_RING_SIZE
-
1
)
tx_flags
|=
DESC_RING_WRAP
;
/* Wrap ring. */
tp
->
tx_ring
[
entry
].
length
=
cpu_to_le32
(
tx_flags
);
tp
->
tx_ring
[
entry
].
buffer1
=
virt_to_le32desc
(
tp
->
setup_frame
);
tp
->
tx_ring
[
entry
].
buffer1
=
cpu_to_le32
(
tp
->
tx_buffers
[
entry
].
mapping
);
tp
->
tx_ring
[
entry
].
status
=
cpu_to_le32
(
DescOwned
);
if
(
tp
->
cur_tx
-
tp
->
dirty_tx
>=
TX_RING_SIZE
-
2
)
{
netif_stop_queue
(
dev
);
...
...
@@ -1163,8 +1206,10 @@ static int __devinit tulip_init_one (struct pci_dev *pdev,
And the ASIX must have a burst limit or horrible things happen. */
if
(
chip_idx
==
DC21143
&&
chip_rev
==
65
)
tp
->
csr0
&=
~
0x01000000
;
else
if
(
chip_idx
==
AX88140
)
tp
->
csr0
|=
0x2000
;
else
if
(
chip_idx
==
AX88140
)
{
if
((
tp
->
csr0
&
0x3f00
)
==
0
)
tp
->
csr0
|=
0x2000
;
}
/* The lower four bits are the media type. */
if
(
board_idx
>=
0
&&
board_idx
<
MAX_UNITS
)
{
...
...
drivers/pci/pci.ids
View file @
312d62f3
...
...
@@ -695,10 +695,13 @@
ac18 PCI1260
ac19 PCI1221
ac1a PCI1210
ac1b PCI1
221
ac1b PCI1
450
ac1c PCI1225
ac1d PCI1251
ac1d PCI1251A
ac1e PCI1211
ac1f PCI1251B
ac20 TI 2030
ac51 PCI1420
fe00 FireWire Host Controller
fe03 12C01A FireWire Host Controller
104d Sony Corporation
...
...
drivers/pcmcia/ti113x.h
View file @
312d62f3
...
...
@@ -136,6 +136,46 @@
#ifdef CONFIG_CARDBUS
/*
* Generic TI open - TI has an extension for the
* INTCTL register that sets the PCI CSC interrupt.
* Make sure we set it correctly at open and init
* time.
*/
static
int
ti_open
(
pci_socket_t
*
socket
)
{
u8
new
,
reg
=
exca_readb
(
socket
,
I365_INTCTL
);
new
=
reg
&
~
I365_INTR_ENA
;
if
(
socket
->
cb_irq
)
new
|=
I365_INTR_ENA
;
if
(
new
!=
reg
)
exca_writeb
(
socket
,
I365_INTCTL
,
new
);
return
0
;
}
static
int
ti_init
(
pci_socket_t
*
socket
)
{
yenta_init
(
socket
);
ti_open
(
socket
);
return
0
;
}
static
struct
pci_socket_ops
ti_ops
=
{
ti_open
,
yenta_close
,
ti_init
,
yenta_suspend
,
yenta_get_status
,
yenta_get_socket
,
yenta_set_socket
,
yenta_get_io_map
,
yenta_set_io_map
,
yenta_get_mem_map
,
yenta_set_mem_map
,
yenta_proc_setup
};
#define ti_sysctl(socket) ((socket)->private[0])
#define ti_cardctl(socket) ((socket)->private[1])
#define ti_devctl(socket) ((socket)->private[2])
...
...
@@ -149,6 +189,7 @@ static int ti113x_open(pci_socket_t *socket)
ti_cardctl
(
socket
)
&=
~
(
TI113X_CCR_PCI_IRQ_ENA
|
TI113X_CCR_PCI_IREQ
|
TI113X_CCR_PCI_CSC
);
if
(
socket
->
cb_irq
)
ti_cardctl
(
socket
)
|=
TI113X_CCR_PCI_IRQ_ENA
|
TI113X_CCR_PCI_CSC
|
TI113X_CCR_PCI_IREQ
;
ti_open
(
socket
);
return
0
;
}
...
...
@@ -159,7 +200,7 @@ static int ti113x_init(pci_socket_t *socket)
config_writel
(
socket
,
TI113X_SYSTEM_CONTROL
,
ti_sysctl
(
socket
));
config_writeb
(
socket
,
TI113X_CARD_CONTROL
,
ti_cardctl
(
socket
));
config_writeb
(
socket
,
TI113X_DEVICE_CONTROL
,
ti_devctl
(
socket
));
ti_open
(
socket
);
return
0
;
}
...
...
@@ -187,6 +228,7 @@ static int ti1250_open(pci_socket_t *socket)
ti_diag
(
socket
)
&=
~
(
TI1250_DIAG_PCI_CSC
|
TI1250_DIAG_PCI_IREQ
);
if
(
socket
->
cb_irq
)
ti_diag
(
socket
)
|=
TI1250_DIAG_PCI_CSC
|
TI1250_DIAG_PCI_IREQ
;
ti_open
(
socket
);
return
0
;
}
...
...
@@ -195,6 +237,7 @@ static int ti1250_init(pci_socket_t *socket)
yenta_init
(
socket
);
config_writeb
(
socket
,
TI1250_DIAGNOSTIC
,
ti_diag
(
socket
));
ti_open
(
socket
);
return
0
;
}
...
...
drivers/pcmcia/yenta.c
View file @
312d62f3
...
...
@@ -740,8 +740,18 @@ static struct cardbus_override_struct {
struct
pci_socket_ops
*
op
;
}
cardbus_override
[]
=
{
{
PD
(
TI
,
1130
),
&
ti113x_ops
},
{
PD
(
TI
,
1031
),
&
ti_ops
},
{
PD
(
TI
,
1131
),
&
ti113x_ops
},
{
PD
(
TI
,
1250
),
&
ti1250_ops
},
{
PD
(
TI
,
1220
),
&
ti_ops
},
{
PD
(
TI
,
1221
),
&
ti_ops
},
{
PD
(
TI
,
1210
),
&
ti_ops
},
{
PD
(
TI
,
1450
),
&
ti_ops
},
{
PD
(
TI
,
1225
),
&
ti_ops
},
{
PD
(
TI
,
1251
A
),
&
ti_ops
},
{
PD
(
TI
,
1211
),
&
ti_ops
},
{
PD
(
TI
,
1251
B
),
&
ti_ops
},
{
PD
(
TI
,
1420
),
&
ti_ops
},
{
PD
(
RICOH
,
RL5C465
),
&
ricoh_ops
},
{
PD
(
RICOH
,
RL5C466
),
&
ricoh_ops
},
...
...
drivers/scsi/scsi_scan.c
View file @
312d62f3
...
...
@@ -108,6 +108,8 @@ static struct dev_info device_list[] =
{
"YAMAHA"
,
"CDR100"
,
"1.00"
,
BLIST_NOLUN
},
/* Locks up if polled for lun != 0 */
{
"YAMAHA"
,
"CDR102"
,
"1.00"
,
BLIST_NOLUN
},
/* Locks up if polled for lun != 0
* extra reset */
{
"YAMAHA"
,
"CRW8424S"
,
"1.0"
,
BLIST_NOLUN
},
/* Locks up if polled for lun != 0 */
{
"YAMAHA"
,
"CRW6416S"
,
"1.0c"
,
BLIST_NOLUN
},
/* Locks up if polled for lun != 0 */
{
"MITSUMI"
,
"CD-R CR-2201CS"
,
"6119"
,
BLIST_NOLUN
},
/* Locks up if polled for lun != 0 */
{
"RELISYS"
,
"Scorpio"
,
"*"
,
BLIST_NOLUN
},
/* responds to all LUN */
{
"MICROTEK"
,
"ScanMaker II"
,
"5.61"
,
BLIST_NOLUN
},
/* responds to all LUN */
...
...
@@ -137,10 +139,12 @@ static struct dev_info device_list[] =
{
"iomega"
,
"jaz 1GB"
,
"J.86"
,
BLIST_NOTQ
|
BLIST_NOLUN
},
{
"CREATIVE"
,
"DVD-RAM RAM"
,
"*"
,
BLIST_GHOST
},
{
"MATSHITA"
,
"PD-2 LF-D100"
,
"*"
,
BLIST_GHOST
},
{
"AOpen"
,
"PD-2 DVD-520S"
,
"*"
,
BLIST_GHOST
},
{
"HITACHI"
,
"GF-1050"
,
"*"
,
BLIST_GHOST
},
/* Hitachi SCSI DVD-RAM */
{
"TOSHIBA"
,
"CDROM"
,
"*"
,
BLIST_ISROM
},
{
"TOSHIBA"
,
"DVD-RAM SD-W1101"
,
"*"
,
BLIST_GHOST
},
{
"TOSHIBA"
,
"DVD-RAM SD-W1111"
,
"*"
,
BLIST_GHOST
},
{
"MegaRAID"
,
"LD"
,
"*"
,
BLIST_FORCELUN
},
/*
* Must be at end of list...
...
...
drivers/usb/drivers.c
View file @
312d62f3
...
...
@@ -69,7 +69,11 @@ static ssize_t usb_driver_read(struct file *file, char *buf, size_t nbytes, loff
pos
=
*
ppos
;
for
(;
tmp
!=
&
usb_driver_list
;
tmp
=
tmp
->
next
)
{
struct
usb_driver
*
driver
=
list_entry
(
tmp
,
struct
usb_driver
,
driver_list
);
start
+=
sprintf
(
start
,
"%s
\n
"
,
driver
->
name
);
int
minor
=
driver
->
fops
?
driver
->
minor
:
-
1
;
if
(
minor
==
-
1
)
start
+=
sprintf
(
start
,
" %s
\n
"
,
driver
->
name
);
else
start
+=
sprintf
(
start
,
"%3d-%3d: %s
\n
"
,
minor
,
minor
+
15
,
driver
->
name
);
if
(
start
>
end
)
{
start
+=
sprintf
(
start
,
"(truncated)
\n
"
);
break
;
...
...
drivers/video/cyber2000fb.c
View file @
312d62f3
...
...
@@ -1175,6 +1175,7 @@ static struct fb_ops cyber2000fb_ops =
int
cyber2000fb_attach
(
struct
cyberpro_info
*
info
)
{
if
(
current_par
.
initialised
)
{
info
->
dev
=
current_par
.
dev
;
info
->
regs
=
CyberRegs
;
info
->
fb
=
current_par
.
screen_base
;
info
->
fb_size
=
current_par
.
screen_size
;
...
...
@@ -1402,8 +1403,16 @@ int __init cyber2000fb_init(void)
smem_base
=
dev
->
resource
[
0
].
start
;
mmio_base
=
dev
->
resource
[
0
].
start
+
0x00800000
;
current_par
.
dev
=
dev
;
current_par
.
dev_id
=
dev
->
device
;
err
=
pci_enable_device
(
dev
);
if
(
err
)
{
printk
(
"%s: unable to enable device: %d
\n
"
,
current_par
.
dev_name
,
err
);
return
err
;
}
/*
* Map in the registers
*/
...
...
drivers/video/cyber2000fb.h
View file @
312d62f3
...
...
@@ -50,8 +50,9 @@ struct cyber2000fb_par {
unsigned
int
palette_size
;
signed
int
currcon
;
char
dev_name
[
32
];
unsigned
int
initialised
;
struct
pci_dev
*
dev
;
unsigned
int
dev_id
;
unsigned
int
initialised
:
1
;
unsigned
int
bus_64bit
:
1
;
/*
...
...
@@ -276,6 +277,7 @@ struct cyber2000fb_par {
#define CO_REG_DEST_WIDTH 0xbf218
struct
cyberpro_info
{
struct
pci_dev
*
dev
;
unsigned
char
*
regs
;
char
*
fb
;
char
dev_name
[
32
];
...
...
fs/ext2/dir.c
View file @
312d62f3
...
...
@@ -137,8 +137,8 @@ static int ext2_readdir(struct file * filp,
bh
,
offset
))
{
/* On error, skip the f_pos to the
next block. */
filp
->
f_pos
=
(
filp
->
f_pos
&
(
sb
->
s_blocksize
-
1
))
+
sb
->
s_blocksize
;
filp
->
f_pos
=
(
filp
->
f_pos
|
(
sb
->
s_blocksize
-
1
))
+
1
;
brelse
(
bh
);
return
stored
;
}
...
...
fs/namei.c
View file @
312d62f3
...
...
@@ -1497,16 +1497,17 @@ asmlinkage long sys_rename(const char * oldname, const char * newname)
int
vfs_readlink
(
struct
dentry
*
dentry
,
char
*
buffer
,
int
buflen
,
const
char
*
link
)
{
u32
len
;
int
len
;
len
=
PTR_ERR
(
link
);
if
(
IS_ERR
(
link
))
goto
out
;
len
=
strlen
(
link
);
if
(
len
>
buflen
)
if
(
len
>
(
unsigned
)
buflen
)
len
=
buflen
;
copy_to_user
(
buffer
,
link
,
len
);
if
(
copy_to_user
(
buffer
,
link
,
len
))
len
=
-
EFAULT
;
out:
return
len
;
}
...
...
fs/partitions/acorn.c
View file @
312d62f3
...
...
@@ -98,7 +98,7 @@ static int riscix_partition(struct gendisk *hd, kdev_t dev, unsigned long first_
}
}
printk
(
" >"
);
printk
(
" >
\n
"
);
if
(
hd
->
part
[
riscix_minor
].
nr_sects
>
2
)
hd
->
part
[
riscix_minor
].
nr_sects
=
2
;
...
...
@@ -139,7 +139,7 @@ static int linux_partition(struct gendisk *hd, kdev_t dev, unsigned long first_s
le32_to_cpu
(
linuxp
->
nr_sects
));
linuxp
++
;
}
printk
(
" >"
);
printk
(
" >
\n
"
);
/*
* Prevent someone doing a mkswap or mkfs on this partition
*/
...
...
fs/ufs/dir.c
View file @
312d62f3
...
...
@@ -106,9 +106,9 @@ ufs_readdir (struct file * filp, void * dirent, filldir_t filldir)
bh
,
offset
))
{
/* On error, skip the f_pos to the
next block. */
filp
->
f_pos
=
(
filp
->
f_pos
&
filp
->
f_pos
=
(
filp
->
f_pos
|
(
sb
->
s_blocksize
-
1
))
+
sb
->
s_blocksize
;
1
;
brelse
(
bh
);
return
stored
;
}
...
...
include/asm-arm/arch-cl7500/system.h
View file @
312d62f3
...
...
@@ -8,18 +8,14 @@
#include <asm/iomd.h>
#define arch_do_idle()
\
#define arch_do_idle() \
outb(0, IOMD_SUSMODE)
#define arch_reset(mode) { \
outb (0, IOMD_ROMCR0); \
cli(); \
__asm__ __volatile__("msr spsr, r1;" \
"mcr p15, 0, %0, c1, c0, 0;" \
"movs pc, #0" \
: \
: "r" (cpu_reset())); \
}
#define arch_reset(mode) \
do { \
outb (0, IOMD_ROMCR0); \
cpu_reset(0); \
} while (0);
#define arch_power_off() do { } while (0)
...
...
include/asm-arm/arch-ebsa110/system.h
View file @
312d62f3
...
...
@@ -8,15 +8,6 @@
#define arch_do_idle() cpu_do_idle()
#define arch_power_off() do { } while (0)
extern
__inline__
void
arch_reset
(
char
mode
)
{
if
(
mode
==
's'
)
{
__asm__
volatile
(
"mcr p15, 0, %0, c1, c0, 0 @ MMU off
mov pc, #0x80000000 @ jump to flash"
:
:
"r"
(
cpu_reset
())
:
"cc"
);
}
}
#define arch_reset(mode) cpu_reset(0x80000000)
#endif
include/asm-arm/arch-ebsa285/system.h
View file @
312d62f3
...
...
@@ -14,10 +14,10 @@
extern
__inline__
void
arch_reset
(
char
mode
)
{
if
(
mode
==
's'
)
{
__asm__
volatile
(
"mcr p15, 0, %0, c1, c0, 0 @ MMU off
mov pc, #0x41000000 @ jump to ROM"
:
:
"r"
(
cpu_reset
())
:
"cc"
);
/*
* Jump into the ROM
*/
cpu_reset
(
0x41000000
);
}
else
{
if
(
machine_is_netwinder
())
{
/* open up the SuperIO chip
...
...
include/asm-arm/arch-rpc/system.h
View file @
312d62f3
...
...
@@ -18,8 +18,8 @@ extern __inline__ void arch_reset(char mode)
outb
(
0
,
IOMD_ROMCR0
);
__asm__
__volatile__
(
"mcr p15, 0, %0, c1, c0, 0
\n\t
"
"mov pc, #0"
:
:
"r"
(
cpu_reset
())
);
/*
* Jump into the ROM
*/
cpu_reset
(
0
);
}
include/asm-arm/arch-sa1100/system.h
View file @
312d62f3
...
...
@@ -16,11 +16,7 @@
#else
#define arch_reset(x) { \
__asm__ volatile ( \
" mcr p15, 0, %0, c1, c0 @ MMU off\n" \
" mov pc, #0\n" : : "r" (cpu_reset()) : "cc"); \
}
#define arch_reset(x) cpu_reset(0)
#endif
...
...
include/asm-arm/cpu-multi32.h
View file @
312d62f3
...
...
@@ -75,7 +75,7 @@ extern struct processor {
/*
* Special stuff for a reset
*/
unsigned
long
(
*
reset
)(
void
);
volatile
void
(
*
reset
)(
unsigned
long
addr
);
/*
* flush an icached page
*/
...
...
@@ -123,7 +123,7 @@ extern const struct processor sa110_processor_functions;
#define cpu_set_pgd(pgd) processor._set_pgd(pgd)
#define cpu_set_pmd(pmdp, pmd) processor._set_pmd(pmdp, pmd)
#define cpu_set_pte(ptep, pte) processor._set_pte(ptep, pte)
#define cpu_reset(
) processor.reset(
)
#define cpu_reset(
addr) processor.reset(addr
)
#define cpu_flush_icache_area(start,end) processor._flush_icache_area(start,end)
#define cpu_cache_wback_area(start,end) processor._cache_wback_area(start,end)
#define cpu_cache_purge_area(start,end) processor._cache_purge_area(start,end)
...
...
include/asm-arm/cpu-single.h
View file @
312d62f3
...
...
@@ -62,7 +62,7 @@ extern void cpu_flush_tlb_page(unsigned long address, int flags);
extern
void
cpu_set_pgd
(
unsigned
long
pgd_phys
);
extern
void
cpu_set_pmd
(
pmd_t
*
pmdp
,
pmd_t
pmd
);
extern
void
cpu_set_pte
(
pte_t
*
ptep
,
pte_t
pte
);
extern
unsigned
long
cpu_reset
(
void
);
extern
volatile
void
cpu_reset
(
unsigned
long
addr
);
extern
void
cpu_flush_icache_area
(
unsigned
long
start
,
unsigned
long
size
);
extern
void
cpu_cache_wback_area
(
unsigned
long
start
,
unsigned
long
end
);
extern
void
cpu_cache_purge_area
(
unsigned
long
start
,
unsigned
long
end
);
...
...
include/asm-arm/mman.h
View file @
312d62f3
...
...
@@ -25,6 +25,12 @@
#define MCL_CURRENT 1
/* lock all current mappings */
#define MCL_FUTURE 2
/* lock all future mappings */
#define MADV_NORMAL 0x0
/* default page-in behavior */
#define MADV_RANDOM 0x1
/* page-in minimum required */
#define MADV_SEQUENTIAL 0x2
/* read-ahead aggressively */
#define MADV_WILLNEED 0x3
/* pre-fault pages */
#define MADV_DONTNEED 0x4
/* discard these pages */
/* compatibility flags */
#define MAP_ANON MAP_ANONYMOUS
#define MAP_FILE 0
...
...
include/asm-arm/system.h
View file @
312d62f3
...
...
@@ -96,7 +96,7 @@ extern unsigned int __machine_arch_type;
# define machine_is_netwinder() (0)
#endif
#ifdef CONFIG_CATS
#ifdef CONFIG_
ARCH_
CATS
# ifdef machine_arch_type
# undef machine_arch_type
# define machine_arch_type __machine_arch_type
...
...
@@ -180,7 +180,7 @@ extern unsigned int __machine_arch_type;
# define machine_is_sa1100() (0)
#endif
#ifdef CONFIG_PERSONAL_SERVER
#ifdef CONFIG_
ARCH_
PERSONAL_SERVER
# ifdef machine_arch_type
# undef machine_arch_type
# define machine_arch_type __machine_arch_type
...
...
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