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
3aed77bc
Commit
3aed77bc
authored
Sep 09, 2005
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge master.kernel.org:/pub/scm/linux/kernel/git/paulus/ppc64-2.6
parents
0b968d23
b2ad7b5e
Changes
65
Show whitespace changes
Inline
Side-by-side
Showing
65 changed files
with
530 additions
and
529 deletions
+530
-529
arch/ppc/kernel/syscalls.c
arch/ppc/kernel/syscalls.c
+0
-4
arch/ppc64/Makefile
arch/ppc64/Makefile
+12
-9
arch/ppc64/boot/Makefile
arch/ppc64/boot/Makefile
+33
-20
arch/ppc64/boot/main.c
arch/ppc64/boot/main.c
+26
-5
arch/ppc64/kernel/bpa_iic.c
arch/ppc64/kernel/bpa_iic.c
+21
-7
arch/ppc64/kernel/eeh.c
arch/ppc64/kernel/eeh.c
+32
-23
arch/ppc64/kernel/iomap.c
arch/ppc64/kernel/iomap.c
+20
-0
arch/ppc64/kernel/iommu.c
arch/ppc64/kernel/iommu.c
+2
-1
arch/ppc64/kernel/maple_pci.c
arch/ppc64/kernel/maple_pci.c
+2
-2
arch/ppc64/kernel/misc.S
arch/ppc64/kernel/misc.S
+3
-3
arch/ppc64/kernel/pSeries_iommu.c
arch/ppc64/kernel/pSeries_iommu.c
+41
-31
arch/ppc64/kernel/pci.c
arch/ppc64/kernel/pci.c
+64
-2
arch/ppc64/kernel/pci.h
arch/ppc64/kernel/pci.h
+0
-1
arch/ppc64/kernel/pci_dn.c
arch/ppc64/kernel/pci_dn.c
+33
-14
arch/ppc64/kernel/pci_iommu.c
arch/ppc64/kernel/pci_iommu.c
+1
-1
arch/ppc64/kernel/pmac_feature.c
arch/ppc64/kernel/pmac_feature.c
+5
-3
arch/ppc64/kernel/pmac_pci.c
arch/ppc64/kernel/pmac_pci.c
+3
-3
arch/ppc64/kernel/prom.c
arch/ppc64/kernel/prom.c
+1
-0
arch/ppc64/kernel/rtas_pci.c
arch/ppc64/kernel/rtas_pci.c
+23
-16
arch/ppc64/kernel/sys_ppc32.c
arch/ppc64/kernel/sys_ppc32.c
+1
-54
arch/ppc64/kernel/syscalls.c
arch/ppc64/kernel/syscalls.c
+0
-4
arch/ppc64/kernel/u3_iommu.c
arch/ppc64/kernel/u3_iommu.c
+2
-2
arch/ppc64/kernel/udbg.c
arch/ppc64/kernel/udbg.c
+6
-0
arch/ppc64/mm/init.c
arch/ppc64/mm/init.c
+2
-2
drivers/pci/hotplug/rpadlpar_core.c
drivers/pci/hotplug/rpadlpar_core.c
+12
-8
drivers/pci/hotplug/rpaphp_pci.c
drivers/pci/hotplug/rpaphp_pci.c
+5
-3
drivers/video/offb.c
drivers/video/offb.c
+1
-1
include/asm-powerpc/8253pit.h
include/asm-powerpc/8253pit.h
+4
-4
include/asm-powerpc/agp.h
include/asm-powerpc/agp.h
+3
-5
include/asm-powerpc/bugs.h
include/asm-powerpc/bugs.h
+4
-4
include/asm-powerpc/errno.h
include/asm-powerpc/errno.h
+3
-3
include/asm-powerpc/ioctl.h
include/asm-powerpc/ioctl.h
+3
-3
include/asm-powerpc/ioctls.h
include/asm-powerpc/ioctls.h
+3
-3
include/asm-powerpc/linkage.h
include/asm-powerpc/linkage.h
+3
-3
include/asm-powerpc/mc146818rtc.h
include/asm-powerpc/mc146818rtc.h
+3
-3
include/asm-powerpc/mman.h
include/asm-powerpc/mman.h
+3
-3
include/asm-powerpc/module.h
include/asm-powerpc/module.h
+3
-3
include/asm-powerpc/msgbuf.h
include/asm-powerpc/msgbuf.h
+12
-4
include/asm-powerpc/namei.h
include/asm-powerpc/namei.h
+7
-7
include/asm-powerpc/param.h
include/asm-powerpc/param.h
+4
-4
include/asm-powerpc/poll.h
include/asm-powerpc/poll.h
+3
-3
include/asm-powerpc/sembuf.h
include/asm-powerpc/sembuf.h
+3
-3
include/asm-powerpc/setup.h
include/asm-powerpc/setup.h
+9
-0
include/asm-powerpc/shmbuf.h
include/asm-powerpc/shmbuf.h
+7
-7
include/asm-powerpc/shmparam.h
include/asm-powerpc/shmparam.h
+3
-3
include/asm-powerpc/siginfo.h
include/asm-powerpc/siginfo.h
+3
-3
include/asm-powerpc/socket.h
include/asm-powerpc/socket.h
+3
-3
include/asm-powerpc/sockios.h
include/asm-powerpc/sockios.h
+3
-3
include/asm-powerpc/string.h
include/asm-powerpc/string.h
+3
-3
include/asm-powerpc/termbits.h
include/asm-powerpc/termbits.h
+3
-3
include/asm-powerpc/termios.h
include/asm-powerpc/termios.h
+3
-3
include/asm-powerpc/timex.h
include/asm-powerpc/timex.h
+23
-14
include/asm-powerpc/topology.h
include/asm-powerpc/topology.h
+5
-4
include/asm-powerpc/unaligned.h
include/asm-powerpc/unaligned.h
+5
-4
include/asm-powerpc/user.h
include/asm-powerpc/user.h
+8
-7
include/asm-ppc/setup.h
include/asm-ppc/setup.h
+0
-14
include/asm-ppc/topology.h
include/asm-ppc/topology.h
+0
-6
include/asm-ppc64/msgbuf.h
include/asm-ppc64/msgbuf.h
+0
-27
include/asm-ppc64/param.h
include/asm-ppc64/param.h
+0
-31
include/asm-ppc64/pci-bridge.h
include/asm-ppc64/pci-bridge.h
+39
-6
include/asm-ppc64/prom.h
include/asm-ppc64/prom.h
+1
-18
include/asm-ppc64/segment.h
include/asm-ppc64/segment.h
+0
-6
include/asm-ppc64/setup.h
include/asm-ppc64/setup.h
+0
-6
include/asm-ppc64/timex.h
include/asm-ppc64/timex.h
+0
-26
include/asm-ppc64/user.h
include/asm-ppc64/user.h
+0
-58
No files found.
arch/ppc/kernel/syscalls.c
View file @
3aed77bc
...
@@ -41,10 +41,6 @@
...
@@ -41,10 +41,6 @@
#include <asm/ipc.h>
#include <asm/ipc.h>
#include <asm/semaphore.h>
#include <asm/semaphore.h>
void
check_bugs
(
void
)
{
}
/*
/*
* sys_ipc() is the de-multiplexer for the SysV IPC calls..
* sys_ipc() is the de-multiplexer for the SysV IPC calls..
...
...
arch/ppc64/Makefile
View file @
3aed77bc
...
@@ -89,11 +89,12 @@ drivers-$(CONFIG_OPROFILE) += arch/ppc64/oprofile/
...
@@ -89,11 +89,12 @@ drivers-$(CONFIG_OPROFILE) += arch/ppc64/oprofile/
boot
:=
arch
/ppc64/boot
boot
:=
arch
/ppc64/boot
boottarget-$(CONFIG_PPC_PSERIES)
:=
zImage zImage.initrd
boottargets-$(CONFIG_PPC_PSERIES)
+=
zImage zImage.initrd
boottarget-$(CONFIG_PPC_MAPLE)
:=
zImage zImage.initrd
boottargets-$(CONFIG_PPC_PMAC)
+=
zImage.vmode zImage.initrd.vmode
boottarget-$(CONFIG_PPC_ISERIES)
:=
vmlinux.sminitrd vmlinux.initrd vmlinux.sm
boottargets-$(CONFIG_PPC_MAPLE)
+=
zImage zImage.initrd
boottarget-$(CONFIG_PPC_BPA)
:=
zImage zImage.initrd
boottargets-$(CONFIG_PPC_ISERIES)
+=
vmlinux.sminitrd vmlinux.initrd vmlinux.sm
$(boottarget-y)
:
vmlinux
boottargets-$(CONFIG_PPC_BPA)
+=
zImage zImage.initrd
$(boottargets-y)
:
vmlinux
$(Q)$(MAKE)
$(build)
=
$(boot)
$(boot)
/
$@
$(Q)$(MAKE)
$(build)
=
$(boot)
$(boot)
/
$@
bootimage-$(CONFIG_PPC_PSERIES)
:=
$(boot)
/zImage
bootimage-$(CONFIG_PPC_PSERIES)
:=
$(boot)
/zImage
...
@@ -131,10 +132,12 @@ include3/asm:
...
@@ -131,10 +132,12 @@ include3/asm:
$(Q)
ln
-fsn
$(srctree)
/include/asm-powerpc include3/asm
$(Q)
ln
-fsn
$(srctree)
/include/asm-powerpc include3/asm
define
archhelp
define
archhelp
echo
'
* zImage - Compressed kernel image (arch/$(ARCH)/boot/zImag
e)'
echo
'
zImage.vmode - Compressed kernel image (arch/$(ARCH)/boot/zImage.vmod
e)'
echo
' zImage.initrd- Compressed kernel image with initrd attached,'
echo
' zImage.initrd
.vmode
- Compressed kernel image with initrd attached,'
echo
' sourced from arch/$(ARCH)/boot/ramdisk.image.gz'
echo
' sourced from arch/$(ARCH)/boot/ramdisk.image.gz'
echo
' (arch/$(ARCH)/boot/zImage.initrd)'
echo
' (arch/$(ARCH)/boot/zImage.initrd.vmode)'
echo
' zImage - zImage for pSeries machines'
echo
' zImage.initrd - zImage with initrd for pSeries machines'
endef
endef
CLEAN_FILES
+=
include/asm-ppc64/offsets.h
CLEAN_FILES
+=
include/asm-ppc64/offsets.h
arch/ppc64/boot/Makefile
View file @
3aed77bc
...
@@ -37,6 +37,9 @@ quiet_cmd_bootcc = BOOTCC $@
...
@@ -37,6 +37,9 @@ quiet_cmd_bootcc = BOOTCC $@
quiet_cmd_bootas
=
BOOTAS
$@
quiet_cmd_bootas
=
BOOTAS
$@
cmd_bootas
=
$(CROSS32CC)
-Wp
,-MD,
$(depfile)
$(BOOTAFLAGS)
-c
-o
$@
$<
cmd_bootas
=
$(CROSS32CC)
-Wp
,-MD,
$(depfile)
$(BOOTAFLAGS)
-c
-o
$@
$<
quiet_cmd_bootld
=
BOOTLD
$@
cmd_bootld
=
$(CROSS32LD)
$(BOOTLFLAGS)
-o
$@
$(2)
$(patsubst %.c,%.o, $(filter %.c, $(src-boot)))
:
%.o: %.c
$(patsubst %.c,%.o, $(filter %.c, $(src-boot)))
:
%.o: %.c
$(
call
if_changed_dep,bootcc
)
$(
call
if_changed_dep,bootcc
)
$(patsubst %.S,%.o, $(filter %.S, $(src-boot)))
:
%.o: %.S
$(patsubst %.S,%.o, $(filter %.S, $(src-boot)))
:
%.o: %.S
...
@@ -53,7 +56,7 @@ src-sec = $(foreach section, $(1), $(patsubst %,$(obj)/kernel-%.c, $(section)))
...
@@ -53,7 +56,7 @@ src-sec = $(foreach section, $(1), $(patsubst %,$(obj)/kernel-%.c, $(section)))
gz-sec
=
$(
foreach
section,
$(1)
,
$(
patsubst
%,
$(obj)
/kernel-%.gz,
$(section)
))
gz-sec
=
$(
foreach
section,
$(1)
,
$(
patsubst
%,
$(obj)
/kernel-%.gz,
$(section)
))
hostprogs-y
:=
addnote addRamDisk
hostprogs-y
:=
addnote addRamDisk
targets
+=
zImage zImage.initrd imagesize.c
\
targets
+=
zImage
.vmode zImage.initrd.vmode zImage
zImage.initrd imagesize.c
\
$(
patsubst
$(obj)
/%,%,
$(
call
obj-sec,
$(required)
$(initrd)
))
\
$(
patsubst
$(obj)
/%,%,
$(
call
obj-sec,
$(required)
$(initrd)
))
\
$(
patsubst
$(obj)
/%,%,
$(
call
src-sec,
$(required)
$(initrd)
))
\
$(
patsubst
$(obj)
/%,%,
$(
call
src-sec,
$(required)
$(initrd)
))
\
$(
patsubst
$(obj)
/%,%,
$(
call
gz-sec,
$(required)
$(initrd)
))
\
$(
patsubst
$(obj)
/%,%,
$(
call
gz-sec,
$(required)
$(initrd)
))
\
...
@@ -71,12 +74,20 @@ vmlinux.strip: vmlinux FORCE
...
@@ -71,12 +74,20 @@ vmlinux.strip: vmlinux FORCE
$(obj)/vmlinux.initrd
:
vmlinux.strip $(obj)/addRamDisk $(obj)/ramdisk.image.gz FORCE
$(obj)/vmlinux.initrd
:
vmlinux.strip $(obj)/addRamDisk $(obj)/ramdisk.image.gz FORCE
$(
call
if_changed,ramdisk
)
$(
call
if_changed,ramdisk
)
addsection
=
$(CROSS32OBJCOPY)
$(1)
\
quiet_cmd_addsection
=
ADDSEC
$@
--add-section
=
.kernel:
$(
strip
$(
patsubst
$(obj)
/kernel-%.o,%,
$(1)
))
=
$(
patsubst
%.o,%.gz,
$(1)
)
\
cmd_addsection
=
$(CROSS32OBJCOPY)
$@
\
--set-section-flags
=
.kernel:
$(
strip
$(
patsubst
$(obj)
/kernel-%.o,%,
$(1)
))
=
$(OBJCOPYFLAGS)
--add-section
=
.kernel:
$(
strip
$(
patsubst
$(obj)
/kernel-%.o,%,
$@
))
=
$(
patsubst
%.o,%.gz,
$@
)
\
--set-section-flags
=
.kernel:
$(
strip
$(
patsubst
$(obj)
/kernel-%.o,%,
$@
))
=
$(OBJCOPYFLAGS)
quiet_cmd_imagesize
=
GENSIZE
$@
cmd_imagesize
=
ls
-l
vmlinux.strip |
\
awk
'{printf "/* generated -- do not edit! */\n" "unsigned long vmlinux_filesize = %d;\n", $$5}'
\
>
$(obj)
/imagesize.c
&&
\
$(CROSS_COMPILE)
nm
-n
vmlinux |
tail
-n
1 |
\
awk
'{printf "unsigned long vmlinux_memsize = 0x%s;\n", substr($$1,8)}'
>>
$(obj)
/imagesize.c
quiet_cmd_addnote
=
ADDNOTE
$@
quiet_cmd_addnote
=
ADDNOTE
$@
cmd_addnote
=
$(
CROSS32LD)
$(BOOTLFLAGS)
-o
$@
$
(
obj-boot
)
&&
$(
obj)
/addnote
$@
cmd_addnote
=
$(obj)
/addnote
$@
$(call gz-sec, $(required))
:
$(obj)/kernel-%.gz: % FORCE
$(call gz-sec, $(required))
:
$(obj)/kernel-%.gz: % FORCE
$(
call
if_changed,gzip
)
$(
call
if_changed,gzip
)
...
@@ -85,28 +96,30 @@ $(obj)/kernel-initrd.gz: $(obj)/ramdisk.image.gz
...
@@ -85,28 +96,30 @@ $(obj)/kernel-initrd.gz: $(obj)/ramdisk.image.gz
cp
-f
$(obj)
/ramdisk.image.gz
$@
cp
-f
$(obj)
/ramdisk.image.gz
$@
$(call src-sec, $(required) $(initrd))
:
$(obj)/kernel-%.c: $(obj)/kernel-%.gz FORCE
$(call src-sec, $(required) $(initrd))
:
$(obj)/kernel-%.c: $(obj)/kernel-%.gz FORCE
touch
$@
@
touch
$@
$(call obj-sec, $(required) $(initrd))
:
$(obj)/kernel-%.o: $(obj)/kernel-%.c FORCE
$(call obj-sec, $(required) $(initrd))
:
$(obj)/kernel-%.o: $(obj)/kernel-%.c FORCE
$(
call
if_changed_dep,bootcc
)
$(
call
if_changed_dep,bootcc
)
$(
call
addsection,
$@
)
$(
call
cmd,addsection
)
$(obj)/zImage
:
obj-boot += $(call obj-sec
,
$(required))
$(obj)/zImage.vmode
:
obj-boot += $(call obj-sec
,
$(required))
$(obj)/zImage
:
$(call obj-sec
,
$(required)) $(obj-boot) $(obj)/addnote FORCE
$(obj)/zImage.vmode
:
$(call obj-sec
,
$(required)) $(obj-boot) FORCE
$(
call
cmd,bootld,
$
(
obj-boot
))
$(obj)/zImage.initrd.vmode
:
obj-boot += $(call obj-sec
,
$(required) $(initrd))
$(obj)/zImage.initrd.vmode
:
$(call obj-sec
,
$(required) $(initrd)) $(obj-boot) FORCE
$(
call
cmd,bootld,
$
(
obj-boot
))
$(obj)/zImage
:
$(obj)/zImage.vmode $(obj)/addnote FORCE
@
cp
-f
$<
$@
$(
call
if_changed,addnote
)
$(
call
if_changed,addnote
)
$(obj)/zImage.initrd
:
obj-boot += $(call obj-sec
,
$(required) $(initrd))
$(obj)/zImage.initrd
:
$(obj)/zImage.initrd.vmode $(obj)/addnote FORCE
$(obj)/zImage.initrd
:
$(call obj-sec
,
$(required) $(initrd)) $(obj-boot) $(obj)/addnote FORCE
@
cp
-f
$<
$@
$(
call
if_changed,addnote
)
$(
call
if_changed,addnote
)
$(obj)/imagesize.c
:
vmlinux.strip
$(obj)/imagesize.c
:
vmlinux.strip
@
echo
Generating
$@
$(
call
cmd,imagesize
)
ls
-l
vmlinux.strip |
\
awk
'{printf "/* generated -- do not edit! */\n" \
"unsigned long vmlinux_filesize = %d;\n", $$5}'
>
$(obj)
/imagesize.c
$(CROSS_COMPILE)
nm
-n
vmlinux |
tail
-n
1 |
\
awk
'{printf "unsigned long vmlinux_memsize = 0x%s;\n", substr($$1,8)}'
\
>>
$(obj)
/imagesize.c
install
:
$(CONFIGURE) $(BOOTIMAGE)
install
:
$(CONFIGURE) $(BOOTIMAGE)
sh
-x
$(srctree)
/
$(src)
/install.sh
"
$(KERNELRELEASE)
"
vmlinux System.map
"
$(INSTALL_PATH)
"
"
$(BOOTIMAGE)
"
sh
-x
$(srctree)
/
$(src)
/install.sh
"
$(KERNELRELEASE)
"
vmlinux System.map
"
$(INSTALL_PATH)
"
"
$(BOOTIMAGE)
"
...
...
arch/ppc64/boot/main.c
View file @
3aed77bc
...
@@ -23,7 +23,8 @@ extern void flush_cache(void *, unsigned long);
...
@@ -23,7 +23,8 @@ extern void flush_cache(void *, unsigned long);
/* Value picked to match that used by yaboot */
/* Value picked to match that used by yaboot */
#define PROG_START 0x01400000
#define PROG_START 0x01400000
#define RAM_END (256<<20) // Fixme: use OF */
#define RAM_END (512<<20) // Fixme: use OF */
#define ONE_MB 0x100000
static
char
*
avail_ram
;
static
char
*
avail_ram
;
static
char
*
begin_avail
,
*
end_avail
;
static
char
*
begin_avail
,
*
end_avail
;
...
@@ -32,6 +33,7 @@ static unsigned int heap_use;
...
@@ -32,6 +33,7 @@ static unsigned int heap_use;
static
unsigned
int
heap_max
;
static
unsigned
int
heap_max
;
extern
char
_start
[];
extern
char
_start
[];
extern
char
_end
[];
extern
char
_vmlinux_start
[];
extern
char
_vmlinux_start
[];
extern
char
_vmlinux_end
[];
extern
char
_vmlinux_end
[];
extern
char
_initrd_start
[];
extern
char
_initrd_start
[];
...
@@ -58,13 +60,13 @@ typedef void (*kernel_entry_t)( unsigned long,
...
@@ -58,13 +60,13 @@ typedef void (*kernel_entry_t)( unsigned long,
#undef DEBUG
#undef DEBUG
static
unsigned
long
claim_base
=
PROG_START
;
static
unsigned
long
claim_base
;
static
unsigned
long
try_claim
(
unsigned
long
size
)
static
unsigned
long
try_claim
(
unsigned
long
size
)
{
{
unsigned
long
addr
=
0
;
unsigned
long
addr
=
0
;
for
(;
claim_base
<
RAM_END
;
claim_base
+=
0x100000
)
{
for
(;
claim_base
<
RAM_END
;
claim_base
+=
ONE_MB
)
{
#ifdef DEBUG
#ifdef DEBUG
printf
(
" trying: 0x%08lx
\n\r
"
,
claim_base
);
printf
(
" trying: 0x%08lx
\n\r
"
,
claim_base
);
#endif
#endif
...
@@ -95,7 +97,26 @@ void start(unsigned long a1, unsigned long a2, void *promptr)
...
@@ -95,7 +97,26 @@ void start(unsigned long a1, unsigned long a2, void *promptr)
if
(
getprop
(
chosen_handle
,
"stdin"
,
&
stdin
,
sizeof
(
stdin
))
!=
4
)
if
(
getprop
(
chosen_handle
,
"stdin"
,
&
stdin
,
sizeof
(
stdin
))
!=
4
)
exit
();
exit
();
printf
(
"
\n\r
zImage starting: loaded at 0x%x
\n\r
"
,
(
unsigned
)
_start
);
printf
(
"
\n\r
zImage starting: loaded at 0x%lx
\n\r
"
,
(
unsigned
long
)
_start
);
/*
* The first available claim_base must be above the end of the
* the loaded kernel wrapper file (_start to _end includes the
* initrd image if it is present) and rounded up to a nice
* 1 MB boundary for good measure.
*/
claim_base
=
_ALIGN_UP
((
unsigned
long
)
_end
,
ONE_MB
);
#if defined(PROG_START)
/*
* Maintain a "magic" minimum address. This keeps some older
* firmware platforms running.
*/
if
(
claim_base
<
PROG_START
)
claim_base
=
PROG_START
;
#endif
/*
/*
* Now we try to claim some memory for the kernel itself
* Now we try to claim some memory for the kernel itself
...
@@ -105,7 +126,7 @@ void start(unsigned long a1, unsigned long a2, void *promptr)
...
@@ -105,7 +126,7 @@ void start(unsigned long a1, unsigned long a2, void *promptr)
* size... In practice we add 1Mb, that is enough, but we should really
* size... In practice we add 1Mb, that is enough, but we should really
* consider fixing the Makefile to put a _raw_ kernel in there !
* consider fixing the Makefile to put a _raw_ kernel in there !
*/
*/
vmlinux_memsize
+=
0x100000
;
vmlinux_memsize
+=
ONE_MB
;
printf
(
"Allocating 0x%lx bytes for kernel ...
\n\r
"
,
vmlinux_memsize
);
printf
(
"Allocating 0x%lx bytes for kernel ...
\n\r
"
,
vmlinux_memsize
);
vmlinux
.
addr
=
try_claim
(
vmlinux_memsize
);
vmlinux
.
addr
=
try_claim
(
vmlinux_memsize
);
if
(
vmlinux
.
addr
==
0
)
{
if
(
vmlinux
.
addr
==
0
)
{
...
...
arch/ppc64/kernel/bpa_iic.c
View file @
3aed77bc
...
@@ -205,6 +205,18 @@ static struct iic_regs __iomem *find_iic(int cpu)
...
@@ -205,6 +205,18 @@ static struct iic_regs __iomem *find_iic(int cpu)
}
}
#ifdef CONFIG_SMP
#ifdef CONFIG_SMP
/* Use the highest interrupt priorities for IPI */
static
inline
int
iic_ipi_to_irq
(
int
ipi
)
{
return
IIC_IPI_OFFSET
+
IIC_NUM_IPIS
-
1
-
ipi
;
}
static
inline
int
iic_irq_to_ipi
(
int
irq
)
{
return
IIC_NUM_IPIS
-
1
-
(
irq
-
IIC_IPI_OFFSET
);
}
void
iic_setup_cpu
(
void
)
void
iic_setup_cpu
(
void
)
{
{
out_be64
(
&
__get_cpu_var
(
iic
).
regs
->
prio
,
0xff
);
out_be64
(
&
__get_cpu_var
(
iic
).
regs
->
prio
,
0xff
);
...
@@ -212,18 +224,20 @@ void iic_setup_cpu(void)
...
@@ -212,18 +224,20 @@ void iic_setup_cpu(void)
void
iic_cause_IPI
(
int
cpu
,
int
mesg
)
void
iic_cause_IPI
(
int
cpu
,
int
mesg
)
{
{
out_be64
(
&
per_cpu
(
iic
,
cpu
).
regs
->
generate
,
mesg
);
out_be64
(
&
per_cpu
(
iic
,
cpu
).
regs
->
generate
,
(
IIC_NUM_IPIS
-
1
-
mesg
)
<<
4
);
}
}
static
irqreturn_t
iic_ipi_action
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
static
irqreturn_t
iic_ipi_action
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
{
{
smp_message_recv
(
iic_irq_to_ipi
(
irq
),
regs
);
smp_message_recv
(
irq
-
IIC_IPI_OFFSET
,
regs
);
return
IRQ_HANDLED
;
return
IRQ_HANDLED
;
}
}
static
void
iic_request_ipi
(
int
i
rq
,
const
char
*
name
)
static
void
iic_request_ipi
(
int
i
pi
,
const
char
*
name
)
{
{
int
irq
;
irq
=
iic_ipi_to_irq
(
ipi
);
/* IPIs are marked SA_INTERRUPT as they must run with irqs
/* IPIs are marked SA_INTERRUPT as they must run with irqs
* disabled */
* disabled */
get_irq_desc
(
irq
)
->
handler
=
&
iic_pic
;
get_irq_desc
(
irq
)
->
handler
=
&
iic_pic
;
...
@@ -233,10 +247,10 @@ static void iic_request_ipi(int irq, const char *name)
...
@@ -233,10 +247,10 @@ static void iic_request_ipi(int irq, const char *name)
void
iic_request_IPIs
(
void
)
void
iic_request_IPIs
(
void
)
{
{
iic_request_ipi
(
IIC_IPI_OFFSET
+
PPC_MSG_CALL_FUNCTION
,
"IPI-call"
);
iic_request_ipi
(
PPC_MSG_CALL_FUNCTION
,
"IPI-call"
);
iic_request_ipi
(
IIC_IPI_OFFSET
+
PPC_MSG_RESCHEDULE
,
"IPI-resched"
);
iic_request_ipi
(
PPC_MSG_RESCHEDULE
,
"IPI-resched"
);
#ifdef CONFIG_DEBUGGER
#ifdef CONFIG_DEBUGGER
iic_request_ipi
(
IIC_IPI_OFFSET
+
PPC_MSG_DEBUGGER_BREAK
,
"IPI-debug"
);
iic_request_ipi
(
PPC_MSG_DEBUGGER_BREAK
,
"IPI-debug"
);
#endif
/* CONFIG_DEBUGGER */
#endif
/* CONFIG_DEBUGGER */
}
}
#endif
/* CONFIG_SMP */
#endif
/* CONFIG_SMP */
...
...
arch/ppc64/kernel/eeh.c
View file @
3aed77bc
...
@@ -254,6 +254,7 @@ pci_addr_cache_insert(struct pci_dev *dev, unsigned long alo,
...
@@ -254,6 +254,7 @@ pci_addr_cache_insert(struct pci_dev *dev, unsigned long alo,
static
void
__pci_addr_cache_insert_device
(
struct
pci_dev
*
dev
)
static
void
__pci_addr_cache_insert_device
(
struct
pci_dev
*
dev
)
{
{
struct
device_node
*
dn
;
struct
device_node
*
dn
;
struct
pci_dn
*
pdn
;
int
i
;
int
i
;
int
inserted
=
0
;
int
inserted
=
0
;
...
@@ -265,8 +266,9 @@ static void __pci_addr_cache_insert_device(struct pci_dev *dev)
...
@@ -265,8 +266,9 @@ static void __pci_addr_cache_insert_device(struct pci_dev *dev)
}
}
/* Skip any devices for which EEH is not enabled. */
/* Skip any devices for which EEH is not enabled. */
if
(
!
(
dn
->
eeh_mode
&
EEH_MODE_SUPPORTED
)
||
pdn
=
dn
->
data
;
dn
->
eeh_mode
&
EEH_MODE_NOCHECK
)
{
if
(
!
(
pdn
->
eeh_mode
&
EEH_MODE_SUPPORTED
)
||
pdn
->
eeh_mode
&
EEH_MODE_NOCHECK
)
{
#ifdef DEBUG
#ifdef DEBUG
printk
(
KERN_INFO
"PCI: skip building address cache for=%s
\n
"
,
printk
(
KERN_INFO
"PCI: skip building address cache for=%s
\n
"
,
pci_name
(
dev
));
pci_name
(
dev
));
...
@@ -415,6 +417,7 @@ int eeh_unregister_notifier(struct notifier_block *nb)
...
@@ -415,6 +417,7 @@ int eeh_unregister_notifier(struct notifier_block *nb)
static
int
read_slot_reset_state
(
struct
device_node
*
dn
,
int
rets
[])
static
int
read_slot_reset_state
(
struct
device_node
*
dn
,
int
rets
[])
{
{
int
token
,
outputs
;
int
token
,
outputs
;
struct
pci_dn
*
pdn
=
dn
->
data
;
if
(
ibm_read_slot_reset_state2
!=
RTAS_UNKNOWN_SERVICE
)
{
if
(
ibm_read_slot_reset_state2
!=
RTAS_UNKNOWN_SERVICE
)
{
token
=
ibm_read_slot_reset_state2
;
token
=
ibm_read_slot_reset_state2
;
...
@@ -424,8 +427,8 @@ static int read_slot_reset_state(struct device_node *dn, int rets[])
...
@@ -424,8 +427,8 @@ static int read_slot_reset_state(struct device_node *dn, int rets[])
outputs
=
3
;
outputs
=
3
;
}
}
return
rtas_call
(
token
,
3
,
outputs
,
rets
,
dn
->
eeh_config_addr
,
return
rtas_call
(
token
,
3
,
outputs
,
rets
,
p
dn
->
eeh_config_addr
,
BUID_HI
(
dn
->
phb
->
buid
),
BUID_LO
(
dn
->
phb
->
buid
));
BUID_HI
(
pdn
->
phb
->
buid
),
BUID_LO
(
p
dn
->
phb
->
buid
));
}
}
/**
/**
...
@@ -534,6 +537,7 @@ int eeh_dn_check_failure(struct device_node *dn, struct pci_dev *dev)
...
@@ -534,6 +537,7 @@ int eeh_dn_check_failure(struct device_node *dn, struct pci_dev *dev)
unsigned
long
flags
;
unsigned
long
flags
;
int
rc
,
reset_state
;
int
rc
,
reset_state
;
struct
eeh_event
*
event
;
struct
eeh_event
*
event
;
struct
pci_dn
*
pdn
;
__get_cpu_var
(
total_mmio_ffs
)
++
;
__get_cpu_var
(
total_mmio_ffs
)
++
;
...
@@ -542,14 +546,15 @@ int eeh_dn_check_failure(struct device_node *dn, struct pci_dev *dev)
...
@@ -542,14 +546,15 @@ int eeh_dn_check_failure(struct device_node *dn, struct pci_dev *dev)
if
(
!
dn
)
if
(
!
dn
)
return
0
;
return
0
;
pdn
=
dn
->
data
;
/* Access to IO BARs might get this far and still not want checking. */
/* Access to IO BARs might get this far and still not want checking. */
if
(
!
(
dn
->
eeh_mode
&
EEH_MODE_SUPPORTED
)
||
if
(
!
pdn
->
eeh_capable
||
!
(
p
dn
->
eeh_mode
&
EEH_MODE_SUPPORTED
)
||
dn
->
eeh_mode
&
EEH_MODE_NOCHECK
)
{
p
dn
->
eeh_mode
&
EEH_MODE_NOCHECK
)
{
return
0
;
return
0
;
}
}
if
(
!
dn
->
eeh_config_addr
)
{
if
(
!
p
dn
->
eeh_config_addr
)
{
return
0
;
return
0
;
}
}
...
@@ -557,7 +562,7 @@ int eeh_dn_check_failure(struct device_node *dn, struct pci_dev *dev)
...
@@ -557,7 +562,7 @@ int eeh_dn_check_failure(struct device_node *dn, struct pci_dev *dev)
* If we already have a pending isolation event for this
* If we already have a pending isolation event for this
* slot, we know it's bad already, we don't need to check...
* slot, we know it's bad already, we don't need to check...
*/
*/
if
(
dn
->
eeh_mode
&
EEH_MODE_ISOLATED
)
{
if
(
p
dn
->
eeh_mode
&
EEH_MODE_ISOLATED
)
{
atomic_inc
(
&
eeh_fail_count
);
atomic_inc
(
&
eeh_fail_count
);
if
(
atomic_read
(
&
eeh_fail_count
)
>=
EEH_MAX_FAILS
)
{
if
(
atomic_read
(
&
eeh_fail_count
)
>=
EEH_MAX_FAILS
)
{
/* re-read the slot reset state */
/* re-read the slot reset state */
...
@@ -582,7 +587,7 @@ int eeh_dn_check_failure(struct device_node *dn, struct pci_dev *dev)
...
@@ -582,7 +587,7 @@ int eeh_dn_check_failure(struct device_node *dn, struct pci_dev *dev)
}
}
/* prevent repeated reports of this failure */
/* prevent repeated reports of this failure */
dn
->
eeh_mode
|=
EEH_MODE_ISOLATED
;
p
dn
->
eeh_mode
|=
EEH_MODE_ISOLATED
;
reset_state
=
rets
[
0
];
reset_state
=
rets
[
0
];
...
@@ -590,9 +595,9 @@ int eeh_dn_check_failure(struct device_node *dn, struct pci_dev *dev)
...
@@ -590,9 +595,9 @@ int eeh_dn_check_failure(struct device_node *dn, struct pci_dev *dev)
memset
(
slot_errbuf
,
0
,
eeh_error_buf_size
);
memset
(
slot_errbuf
,
0
,
eeh_error_buf_size
);
rc
=
rtas_call
(
ibm_slot_error_detail
,
rc
=
rtas_call
(
ibm_slot_error_detail
,
8
,
1
,
NULL
,
dn
->
eeh_config_addr
,
8
,
1
,
NULL
,
p
dn
->
eeh_config_addr
,
BUID_HI
(
dn
->
phb
->
buid
),
BUID_HI
(
p
dn
->
phb
->
buid
),
BUID_LO
(
dn
->
phb
->
buid
),
NULL
,
0
,
BUID_LO
(
p
dn
->
phb
->
buid
),
NULL
,
0
,
virt_to_phys
(
slot_errbuf
),
virt_to_phys
(
slot_errbuf
),
eeh_error_buf_size
,
eeh_error_buf_size
,
1
/* Temporary Error */
);
1
/* Temporary Error */
);
...
@@ -679,8 +684,9 @@ static void *early_enable_eeh(struct device_node *dn, void *data)
...
@@ -679,8 +684,9 @@ static void *early_enable_eeh(struct device_node *dn, void *data)
u32
*
device_id
=
(
u32
*
)
get_property
(
dn
,
"device-id"
,
NULL
);
u32
*
device_id
=
(
u32
*
)
get_property
(
dn
,
"device-id"
,
NULL
);
u32
*
regs
;
u32
*
regs
;
int
enable
;
int
enable
;
struct
pci_dn
*
pdn
=
dn
->
data
;
dn
->
eeh_mode
=
0
;
p
dn
->
eeh_mode
=
0
;
if
(
status
&&
strcmp
(
status
,
"ok"
)
!=
0
)
if
(
status
&&
strcmp
(
status
,
"ok"
)
!=
0
)
return
NULL
;
/* ignore devices with bad status */
return
NULL
;
/* ignore devices with bad status */
...
@@ -691,7 +697,7 @@ static void *early_enable_eeh(struct device_node *dn, void *data)
...
@@ -691,7 +697,7 @@ static void *early_enable_eeh(struct device_node *dn, void *data)
/* There is nothing to check on PCI to ISA bridges */
/* There is nothing to check on PCI to ISA bridges */
if
(
dn
->
type
&&
!
strcmp
(
dn
->
type
,
"isa"
))
{
if
(
dn
->
type
&&
!
strcmp
(
dn
->
type
,
"isa"
))
{
dn
->
eeh_mode
|=
EEH_MODE_NOCHECK
;
p
dn
->
eeh_mode
|=
EEH_MODE_NOCHECK
;
return
NULL
;
return
NULL
;
}
}
...
@@ -708,7 +714,7 @@ static void *early_enable_eeh(struct device_node *dn, void *data)
...
@@ -708,7 +714,7 @@ static void *early_enable_eeh(struct device_node *dn, void *data)
enable
=
0
;
enable
=
0
;
if
(
!
enable
)
if
(
!
enable
)
dn
->
eeh_mode
|=
EEH_MODE_NOCHECK
;
p
dn
->
eeh_mode
|=
EEH_MODE_NOCHECK
;
/* Ok... see if this device supports EEH. Some do, some don't,
/* Ok... see if this device supports EEH. Some do, some don't,
* and the only way to find out is to check each and every one. */
* and the only way to find out is to check each and every one. */
...
@@ -721,8 +727,8 @@ static void *early_enable_eeh(struct device_node *dn, void *data)
...
@@ -721,8 +727,8 @@ static void *early_enable_eeh(struct device_node *dn, void *data)
EEH_ENABLE
);
EEH_ENABLE
);
if
(
ret
==
0
)
{
if
(
ret
==
0
)
{
eeh_subsystem_enabled
=
1
;
eeh_subsystem_enabled
=
1
;
dn
->
eeh_mode
|=
EEH_MODE_SUPPORTED
;
p
dn
->
eeh_mode
|=
EEH_MODE_SUPPORTED
;
dn
->
eeh_config_addr
=
regs
[
0
];
p
dn
->
eeh_config_addr
=
regs
[
0
];
#ifdef DEBUG
#ifdef DEBUG
printk
(
KERN_DEBUG
"EEH: %s: eeh enabled
\n
"
,
dn
->
full_name
);
printk
(
KERN_DEBUG
"EEH: %s: eeh enabled
\n
"
,
dn
->
full_name
);
#endif
#endif
...
@@ -730,10 +736,11 @@ static void *early_enable_eeh(struct device_node *dn, void *data)
...
@@ -730,10 +736,11 @@ static void *early_enable_eeh(struct device_node *dn, void *data)
/* This device doesn't support EEH, but it may have an
/* This device doesn't support EEH, but it may have an
* EEH parent, in which case we mark it as supported. */
* EEH parent, in which case we mark it as supported. */
if
(
dn
->
parent
&&
(
dn
->
parent
->
eeh_mode
&
EEH_MODE_SUPPORTED
))
{
if
(
dn
->
parent
&&
dn
->
parent
->
data
&&
(
PCI_DN
(
dn
->
parent
)
->
eeh_mode
&
EEH_MODE_SUPPORTED
))
{
/* Parent supports EEH. */
/* Parent supports EEH. */
dn
->
eeh_mode
|=
EEH_MODE_SUPPORTED
;
p
dn
->
eeh_mode
|=
EEH_MODE_SUPPORTED
;
dn
->
eeh_config_addr
=
dn
->
parent
->
eeh_config_addr
;
pdn
->
eeh_config_addr
=
PCI_DN
(
dn
->
parent
)
->
eeh_config_addr
;
return
NULL
;
return
NULL
;
}
}
}
}
...
@@ -790,11 +797,13 @@ void __init eeh_init(void)
...
@@ -790,11 +797,13 @@ void __init eeh_init(void)
for
(
phb
=
of_find_node_by_name
(
NULL
,
"pci"
);
phb
;
for
(
phb
=
of_find_node_by_name
(
NULL
,
"pci"
);
phb
;
phb
=
of_find_node_by_name
(
phb
,
"pci"
))
{
phb
=
of_find_node_by_name
(
phb
,
"pci"
))
{
unsigned
long
buid
;
unsigned
long
buid
;
struct
pci_dn
*
pci
;
buid
=
get_phb_buid
(
phb
);
buid
=
get_phb_buid
(
phb
);
if
(
buid
==
0
)
if
(
buid
==
0
||
phb
->
data
==
NULL
)
continue
;
continue
;
pci
=
phb
->
data
;
info
.
buid_lo
=
BUID_LO
(
buid
);
info
.
buid_lo
=
BUID_LO
(
buid
);
info
.
buid_hi
=
BUID_HI
(
buid
);
info
.
buid_hi
=
BUID_HI
(
buid
);
traverse_pci_devices
(
phb
,
early_enable_eeh
,
&
info
);
traverse_pci_devices
(
phb
,
early_enable_eeh
,
&
info
);
...
@@ -823,9 +832,9 @@ void eeh_add_device_early(struct device_node *dn)
...
@@ -823,9 +832,9 @@ void eeh_add_device_early(struct device_node *dn)
struct
pci_controller
*
phb
;
struct
pci_controller
*
phb
;
struct
eeh_early_enable_info
info
;
struct
eeh_early_enable_info
info
;
if
(
!
dn
)
if
(
!
dn
||
!
dn
->
data
)
return
;
return
;
phb
=
dn
->
phb
;
phb
=
PCI_DN
(
dn
)
->
phb
;
if
(
NULL
==
phb
||
0
==
phb
->
buid
)
{
if
(
NULL
==
phb
||
0
==
phb
->
buid
)
{
printk
(
KERN_WARNING
"EEH: Expected buid but found none
\n
"
);
printk
(
KERN_WARNING
"EEH: Expected buid but found none
\n
"
);
return
;
return
;
...
...
arch/ppc64/kernel/iomap.c
View file @
3aed77bc
...
@@ -22,13 +22,23 @@ unsigned int fastcall ioread16(void __iomem *addr)
...
@@ -22,13 +22,23 @@ unsigned int fastcall ioread16(void __iomem *addr)
{
{
return
readw
(
addr
);
return
readw
(
addr
);
}
}
unsigned
int
fastcall
ioread16be
(
void
__iomem
*
addr
)
{
return
in_be16
(
addr
);
}
unsigned
int
fastcall
ioread32
(
void
__iomem
*
addr
)
unsigned
int
fastcall
ioread32
(
void
__iomem
*
addr
)
{
{
return
readl
(
addr
);
return
readl
(
addr
);
}
}
unsigned
int
fastcall
ioread32be
(
void
__iomem
*
addr
)
{
return
in_be32
(
addr
);
}
EXPORT_SYMBOL
(
ioread8
);
EXPORT_SYMBOL
(
ioread8
);
EXPORT_SYMBOL
(
ioread16
);
EXPORT_SYMBOL
(
ioread16
);
EXPORT_SYMBOL
(
ioread16be
);
EXPORT_SYMBOL
(
ioread32
);
EXPORT_SYMBOL
(
ioread32
);
EXPORT_SYMBOL
(
ioread32be
);
void
fastcall
iowrite8
(
u8
val
,
void
__iomem
*
addr
)
void
fastcall
iowrite8
(
u8
val
,
void
__iomem
*
addr
)
{
{
...
@@ -38,13 +48,23 @@ void fastcall iowrite16(u16 val, void __iomem *addr)
...
@@ -38,13 +48,23 @@ void fastcall iowrite16(u16 val, void __iomem *addr)
{
{
writew
(
val
,
addr
);
writew
(
val
,
addr
);
}
}
void
fastcall
iowrite16be
(
u16
val
,
void
__iomem
*
addr
)
{
out_be16
(
addr
,
val
);
}
void
fastcall
iowrite32
(
u32
val
,
void
__iomem
*
addr
)
void
fastcall
iowrite32
(
u32
val
,
void
__iomem
*
addr
)
{
{
writel
(
val
,
addr
);
writel
(
val
,
addr
);
}
}
void
fastcall
iowrite32be
(
u32
val
,
void
__iomem
*
addr
)
{
out_be32
(
addr
,
val
);
}
EXPORT_SYMBOL
(
iowrite8
);
EXPORT_SYMBOL
(
iowrite8
);
EXPORT_SYMBOL
(
iowrite16
);
EXPORT_SYMBOL
(
iowrite16
);
EXPORT_SYMBOL
(
iowrite16be
);
EXPORT_SYMBOL
(
iowrite32
);
EXPORT_SYMBOL
(
iowrite32
);
EXPORT_SYMBOL
(
iowrite32be
);
/*
/*
* These are the "repeat read/write" functions. Note the
* These are the "repeat read/write" functions. Note the
...
...
arch/ppc64/kernel/iommu.c
View file @
3aed77bc
...
@@ -438,7 +438,8 @@ struct iommu_table *iommu_init_table(struct iommu_table *tbl)
...
@@ -438,7 +438,8 @@ struct iommu_table *iommu_init_table(struct iommu_table *tbl)
void
iommu_free_table
(
struct
device_node
*
dn
)
void
iommu_free_table
(
struct
device_node
*
dn
)
{
{
struct
iommu_table
*
tbl
=
dn
->
iommu_table
;
struct
pci_dn
*
pdn
=
dn
->
data
;
struct
iommu_table
*
tbl
=
pdn
->
iommu_table
;
unsigned
long
bitmap_sz
,
i
;
unsigned
long
bitmap_sz
,
i
;
unsigned
int
order
;
unsigned
int
order
;
...
...
arch/ppc64/kernel/maple_pci.c
View file @
3aed77bc
...
@@ -447,9 +447,9 @@ void __init maple_pci_init(void)
...
@@ -447,9 +447,9 @@ void __init maple_pci_init(void)
*/
*/
if
(
u3_agp
)
{
if
(
u3_agp
)
{
struct
device_node
*
np
=
u3_agp
->
arch_data
;
struct
device_node
*
np
=
u3_agp
->
arch_data
;
np
->
busno
=
0xf0
;
PCI_DN
(
np
)
->
busno
=
0xf0
;
for
(
np
=
np
->
child
;
np
;
np
=
np
->
sibling
)
for
(
np
=
np
->
child
;
np
;
np
=
np
->
sibling
)
np
->
busno
=
0xf0
;
PCI_DN
(
np
)
->
busno
=
0xf0
;
}
}
/* Tell pci.c to use the common resource allocation mecanism */
/* Tell pci.c to use the common resource allocation mecanism */
...
...
arch/ppc64/kernel/misc.S
View file @
3aed77bc
...
@@ -1431,9 +1431,9 @@ _GLOBAL(sys_call_table)
...
@@ -1431,9 +1431,9 @@ _GLOBAL(sys_call_table)
.
llong
.
sys_ni_syscall
/*
195
-
32
bit
only
stat64
*/
.
llong
.
sys_ni_syscall
/*
195
-
32
bit
only
stat64
*/
.
llong
.
sys_ni_syscall
/*
32
bit
only
lstat64
*/
.
llong
.
sys_ni_syscall
/*
32
bit
only
lstat64
*/
.
llong
.
sys_ni_syscall
/*
32
bit
only
fstat64
*/
.
llong
.
sys_ni_syscall
/*
32
bit
only
fstat64
*/
.
llong
.
sys_
ni_syscall
/*
32
bit
only
pciconfig_read
*/
.
llong
.
sys_
pciconfig_read
.
llong
.
sys_
ni_syscall
/*
32
bit
only
pciconfig_write
*/
.
llong
.
sys_
pciconfig_write
.
llong
.
sys_
ni_syscall
/*
32
bit
only
pciconfig_iobase
*/
.
llong
.
sys_
pciconfig_iobase
/*
200
-
pciconfig_iobase
*/
.
llong
.
sys_ni_syscall
/*
reserved
for
MacOnLinux
*/
.
llong
.
sys_ni_syscall
/*
reserved
for
MacOnLinux
*/
.
llong
.
sys_getdents64
.
llong
.
sys_getdents64
.
llong
.
sys_pivot_root
.
llong
.
sys_pivot_root
...
...
arch/ppc64/kernel/pSeries_iommu.c
View file @
3aed77bc
...
@@ -295,7 +295,7 @@ static void iommu_table_setparms_lpar(struct pci_controller *phb,
...
@@ -295,7 +295,7 @@ static void iommu_table_setparms_lpar(struct pci_controller *phb,
struct
iommu_table
*
tbl
,
struct
iommu_table
*
tbl
,
unsigned
int
*
dma_window
)
unsigned
int
*
dma_window
)
{
{
tbl
->
it_busno
=
dn
->
bussubno
;
tbl
->
it_busno
=
PCI_DN
(
dn
)
->
bussubno
;
/* TODO: Parse field size properties properly. */
/* TODO: Parse field size properties properly. */
tbl
->
it_size
=
(((
unsigned
long
)
dma_window
[
4
]
<<
32
)
|
tbl
->
it_size
=
(((
unsigned
long
)
dma_window
[
4
]
<<
32
)
|
...
@@ -311,6 +311,7 @@ static void iommu_table_setparms_lpar(struct pci_controller *phb,
...
@@ -311,6 +311,7 @@ static void iommu_table_setparms_lpar(struct pci_controller *phb,
static
void
iommu_bus_setup_pSeries
(
struct
pci_bus
*
bus
)
static
void
iommu_bus_setup_pSeries
(
struct
pci_bus
*
bus
)
{
{
struct
device_node
*
dn
,
*
pdn
;
struct
device_node
*
dn
,
*
pdn
;
struct
pci_dn
*
pci
;
struct
iommu_table
*
tbl
;
struct
iommu_table
*
tbl
;
DBG
(
"iommu_bus_setup_pSeries, bus %p, bus->self %p
\n
"
,
bus
,
bus
->
self
);
DBG
(
"iommu_bus_setup_pSeries, bus %p, bus->self %p
\n
"
,
bus
,
bus
->
self
);
...
@@ -325,6 +326,7 @@ static void iommu_bus_setup_pSeries(struct pci_bus *bus)
...
@@ -325,6 +326,7 @@ static void iommu_bus_setup_pSeries(struct pci_bus *bus)
*/
*/
dn
=
pci_bus_to_OF_node
(
bus
);
dn
=
pci_bus_to_OF_node
(
bus
);
pci
=
dn
->
data
;
if
(
!
bus
->
self
)
{
if
(
!
bus
->
self
)
{
/* Root bus */
/* Root bus */
...
@@ -341,18 +343,18 @@ static void iommu_bus_setup_pSeries(struct pci_bus *bus)
...
@@ -341,18 +343,18 @@ static void iommu_bus_setup_pSeries(struct pci_bus *bus)
* alltogether. This leaves 768MB for the window.
* alltogether. This leaves 768MB for the window.
*/
*/
DBG
(
"PHB has io-hole, reserving 256MB
\n
"
);
DBG
(
"PHB has io-hole, reserving 256MB
\n
"
);
dn
->
phb
->
dma_window_size
=
3
<<
28
;
pci
->
phb
->
dma_window_size
=
3
<<
28
;
dn
->
phb
->
dma_window_base_cur
=
1
<<
28
;
pci
->
phb
->
dma_window_base_cur
=
1
<<
28
;
}
else
{
}
else
{
/* 1GB window by default */
/* 1GB window by default */
dn
->
phb
->
dma_window_size
=
1
<<
30
;
pci
->
phb
->
dma_window_size
=
1
<<
30
;
dn
->
phb
->
dma_window_base_cur
=
0
;
pci
->
phb
->
dma_window_base_cur
=
0
;
}
}
tbl
=
kmalloc
(
sizeof
(
struct
iommu_table
),
GFP_KERNEL
);
tbl
=
kmalloc
(
sizeof
(
struct
iommu_table
),
GFP_KERNEL
);
iommu_table_setparms
(
dn
->
phb
,
dn
,
tbl
);
iommu_table_setparms
(
pci
->
phb
,
dn
,
tbl
);
dn
->
iommu_table
=
iommu_init_table
(
tbl
);
pci
->
iommu_table
=
iommu_init_table
(
tbl
);
}
else
{
}
else
{
/* Do a 128MB table at root. This is used for the IDE
/* Do a 128MB table at root. This is used for the IDE
* controller on some SMP-mode POWER4 machines. It
* controller on some SMP-mode POWER4 machines. It
...
@@ -363,16 +365,16 @@ static void iommu_bus_setup_pSeries(struct pci_bus *bus)
...
@@ -363,16 +365,16 @@ static void iommu_bus_setup_pSeries(struct pci_bus *bus)
* Allocate at offset 128MB to avoid having to deal
* Allocate at offset 128MB to avoid having to deal
* with ISA holes; 128MB table for IDE is plenty.
* with ISA holes; 128MB table for IDE is plenty.
*/
*/
dn
->
phb
->
dma_window_size
=
1
<<
27
;
pci
->
phb
->
dma_window_size
=
1
<<
27
;
dn
->
phb
->
dma_window_base_cur
=
1
<<
27
;
pci
->
phb
->
dma_window_base_cur
=
1
<<
27
;
tbl
=
kmalloc
(
sizeof
(
struct
iommu_table
),
GFP_KERNEL
);
tbl
=
kmalloc
(
sizeof
(
struct
iommu_table
),
GFP_KERNEL
);
iommu_table_setparms
(
dn
->
phb
,
dn
,
tbl
);
iommu_table_setparms
(
pci
->
phb
,
dn
,
tbl
);
dn
->
iommu_table
=
iommu_init_table
(
tbl
);
pci
->
iommu_table
=
iommu_init_table
(
tbl
);
/* All child buses have 256MB tables */
/* All child buses have 256MB tables */
dn
->
phb
->
dma_window_size
=
1
<<
28
;
pci
->
phb
->
dma_window_size
=
1
<<
28
;
}
}
}
else
{
}
else
{
pdn
=
pci_bus_to_OF_node
(
bus
->
parent
);
pdn
=
pci_bus_to_OF_node
(
bus
->
parent
);
...
@@ -386,12 +388,12 @@ static void iommu_bus_setup_pSeries(struct pci_bus *bus)
...
@@ -386,12 +388,12 @@ static void iommu_bus_setup_pSeries(struct pci_bus *bus)
tbl
=
kmalloc
(
sizeof
(
struct
iommu_table
),
GFP_KERNEL
);
tbl
=
kmalloc
(
sizeof
(
struct
iommu_table
),
GFP_KERNEL
);
iommu_table_setparms
(
dn
->
phb
,
dn
,
tbl
);
iommu_table_setparms
(
pci
->
phb
,
dn
,
tbl
);
dn
->
iommu_table
=
iommu_init_table
(
tbl
);
pci
->
iommu_table
=
iommu_init_table
(
tbl
);
}
else
{
}
else
{
/* Lower than first child or under python, use parent table */
/* Lower than first child or under python, use parent table */
dn
->
iommu_table
=
pdn
->
iommu_table
;
pci
->
iommu_table
=
PCI_DN
(
pdn
)
->
iommu_table
;
}
}
}
}
}
}
...
@@ -401,6 +403,7 @@ static void iommu_bus_setup_pSeriesLP(struct pci_bus *bus)
...
@@ -401,6 +403,7 @@ static void iommu_bus_setup_pSeriesLP(struct pci_bus *bus)
{
{
struct
iommu_table
*
tbl
;
struct
iommu_table
*
tbl
;
struct
device_node
*
dn
,
*
pdn
;
struct
device_node
*
dn
,
*
pdn
;
struct
pci_dn
*
ppci
;
unsigned
int
*
dma_window
=
NULL
;
unsigned
int
*
dma_window
=
NULL
;
DBG
(
"iommu_bus_setup_pSeriesLP, bus %p, bus->self %p
\n
"
,
bus
,
bus
->
self
);
DBG
(
"iommu_bus_setup_pSeriesLP, bus %p, bus->self %p
\n
"
,
bus
,
bus
->
self
);
...
@@ -419,22 +422,24 @@ static void iommu_bus_setup_pSeriesLP(struct pci_bus *bus)
...
@@ -419,22 +422,24 @@ static void iommu_bus_setup_pSeriesLP(struct pci_bus *bus)
return
;
return
;
}
}
if
(
!
pdn
->
iommu_table
)
{
ppci
=
pdn
->
data
;
if
(
!
ppci
->
iommu_table
)
{
/* Bussubno hasn't been copied yet.
/* Bussubno hasn't been copied yet.
* Do it now because iommu_table_setparms_lpar needs it.
* Do it now because iommu_table_setparms_lpar needs it.
*/
*/
pdn
->
bussubno
=
bus
->
number
;
ppci
->
bussubno
=
bus
->
number
;
tbl
=
(
struct
iommu_table
*
)
kmalloc
(
sizeof
(
struct
iommu_table
),
tbl
=
(
struct
iommu_table
*
)
kmalloc
(
sizeof
(
struct
iommu_table
),
GFP_KERNEL
);
GFP_KERNEL
);
iommu_table_setparms_lpar
(
p
dn
->
phb
,
pdn
,
tbl
,
dma_window
);
iommu_table_setparms_lpar
(
p
pci
->
phb
,
pdn
,
tbl
,
dma_window
);
p
dn
->
iommu_table
=
iommu_init_table
(
tbl
);
p
pci
->
iommu_table
=
iommu_init_table
(
tbl
);
}
}
if
(
pdn
!=
dn
)
if
(
pdn
!=
dn
)
dn
->
iommu_table
=
pdn
->
iommu_table
;
PCI_DN
(
dn
)
->
iommu_table
=
ppci
->
iommu_table
;
}
}
...
@@ -449,11 +454,11 @@ static void iommu_dev_setup_pSeries(struct pci_dev *dev)
...
@@ -449,11 +454,11 @@ static void iommu_dev_setup_pSeries(struct pci_dev *dev)
*/
*/
mydn
=
dn
=
pci_device_to_OF_node
(
dev
);
mydn
=
dn
=
pci_device_to_OF_node
(
dev
);
while
(
dn
&&
dn
->
iommu_table
==
NULL
)
while
(
dn
&&
dn
->
data
&&
PCI_DN
(
dn
)
->
iommu_table
==
NULL
)
dn
=
dn
->
parent
;
dn
=
dn
->
parent
;
if
(
dn
)
{
if
(
dn
&&
dn
->
data
)
{
mydn
->
iommu_table
=
dn
->
iommu_table
;
PCI_DN
(
mydn
)
->
iommu_table
=
PCI_DN
(
dn
)
->
iommu_table
;
}
else
{
}
else
{
DBG
(
"iommu_dev_setup_pSeries, dev %p (%s) has no iommu table
\n
"
,
dev
,
dev
->
pretty_name
);
DBG
(
"iommu_dev_setup_pSeries, dev %p (%s) has no iommu table
\n
"
,
dev
,
dev
->
pretty_name
);
}
}
...
@@ -463,10 +468,11 @@ static int iommu_reconfig_notifier(struct notifier_block *nb, unsigned long acti
...
@@ -463,10 +468,11 @@ static int iommu_reconfig_notifier(struct notifier_block *nb, unsigned long acti
{
{
int
err
=
NOTIFY_OK
;
int
err
=
NOTIFY_OK
;
struct
device_node
*
np
=
node
;
struct
device_node
*
np
=
node
;
struct
pci_dn
*
pci
=
np
->
data
;
switch
(
action
)
{
switch
(
action
)
{
case
PSERIES_RECONFIG_REMOVE
:
case
PSERIES_RECONFIG_REMOVE
:
if
(
np
->
iommu_table
&&
if
(
pci
->
iommu_table
&&
get_property
(
np
,
"ibm,dma-window"
,
NULL
))
get_property
(
np
,
"ibm,dma-window"
,
NULL
))
iommu_free_table
(
np
);
iommu_free_table
(
np
);
break
;
break
;
...
@@ -486,6 +492,7 @@ static void iommu_dev_setup_pSeriesLP(struct pci_dev *dev)
...
@@ -486,6 +492,7 @@ static void iommu_dev_setup_pSeriesLP(struct pci_dev *dev)
struct
device_node
*
pdn
,
*
dn
;
struct
device_node
*
pdn
,
*
dn
;
struct
iommu_table
*
tbl
;
struct
iommu_table
*
tbl
;
int
*
dma_window
=
NULL
;
int
*
dma_window
=
NULL
;
struct
pci_dn
*
pci
;
DBG
(
"iommu_dev_setup_pSeriesLP, dev %p (%s)
\n
"
,
dev
,
dev
->
pretty_name
);
DBG
(
"iommu_dev_setup_pSeriesLP, dev %p (%s)
\n
"
,
dev
,
dev
->
pretty_name
);
...
@@ -497,8 +504,10 @@ static void iommu_dev_setup_pSeriesLP(struct pci_dev *dev)
...
@@ -497,8 +504,10 @@ static void iommu_dev_setup_pSeriesLP(struct pci_dev *dev)
*/
*/
dn
=
pci_device_to_OF_node
(
dev
);
dn
=
pci_device_to_OF_node
(
dev
);
for
(
pdn
=
dn
;
pdn
&&
!
pdn
->
iommu_table
;
pdn
=
pdn
->
parent
)
{
for
(
pdn
=
dn
;
pdn
&&
pdn
->
data
&&
!
PCI_DN
(
pdn
)
->
iommu_table
;
dma_window
=
(
unsigned
int
*
)
get_property
(
pdn
,
"ibm,dma-window"
,
NULL
);
pdn
=
pdn
->
parent
)
{
dma_window
=
(
unsigned
int
*
)
get_property
(
pdn
,
"ibm,dma-window"
,
NULL
);
if
(
dma_window
)
if
(
dma_window
)
break
;
break
;
}
}
...
@@ -515,20 +524,21 @@ static void iommu_dev_setup_pSeriesLP(struct pci_dev *dev)
...
@@ -515,20 +524,21 @@ static void iommu_dev_setup_pSeriesLP(struct pci_dev *dev)
DBG
(
"Found DMA window, allocating table
\n
"
);
DBG
(
"Found DMA window, allocating table
\n
"
);
}
}
if
(
!
pdn
->
iommu_table
)
{
pci
=
pdn
->
data
;
if
(
!
pci
->
iommu_table
)
{
/* iommu_table_setparms_lpar needs bussubno. */
/* iommu_table_setparms_lpar needs bussubno. */
p
dn
->
bussubno
=
pdn
->
phb
->
bus
->
number
;
p
ci
->
bussubno
=
pci
->
phb
->
bus
->
number
;
tbl
=
(
struct
iommu_table
*
)
kmalloc
(
sizeof
(
struct
iommu_table
),
tbl
=
(
struct
iommu_table
*
)
kmalloc
(
sizeof
(
struct
iommu_table
),
GFP_KERNEL
);
GFP_KERNEL
);
iommu_table_setparms_lpar
(
p
dn
->
phb
,
pdn
,
tbl
,
dma_window
);
iommu_table_setparms_lpar
(
p
ci
->
phb
,
pdn
,
tbl
,
dma_window
);
p
dn
->
iommu_table
=
iommu_init_table
(
tbl
);
p
ci
->
iommu_table
=
iommu_init_table
(
tbl
);
}
}
if
(
pdn
!=
dn
)
if
(
pdn
!=
dn
)
dn
->
iommu_table
=
pdn
->
iommu_table
;
PCI_DN
(
dn
)
->
iommu_table
=
pci
->
iommu_table
;
}
}
static
void
iommu_bus_setup_null
(
struct
pci_bus
*
b
)
{
}
static
void
iommu_bus_setup_null
(
struct
pci_bus
*
b
)
{
}
...
...
arch/ppc64/kernel/pci.c
View file @
3aed77bc
...
@@ -21,6 +21,7 @@
...
@@ -21,6 +21,7 @@
#include <linux/bootmem.h>
#include <linux/bootmem.h>
#include <linux/mm.h>
#include <linux/mm.h>
#include <linux/list.h>
#include <linux/list.h>
#include <linux/syscalls.h>
#include <asm/processor.h>
#include <asm/processor.h>
#include <asm/io.h>
#include <asm/io.h>
...
@@ -837,9 +838,11 @@ int pcibios_scan_all_fns(struct pci_bus *bus, int devfn)
...
@@ -837,9 +838,11 @@ int pcibios_scan_all_fns(struct pci_bus *bus, int devfn)
* device tree. If they are then we need to scan all the
* device tree. If they are then we need to scan all the
* functions of this slot.
* functions of this slot.
*/
*/
for
(
dn
=
busdn
->
child
;
dn
;
dn
=
dn
->
sibling
)
for
(
dn
=
busdn
->
child
;
dn
;
dn
=
dn
->
sibling
)
{
if
((
dn
->
devfn
>>
3
)
==
(
devfn
>>
3
))
struct
pci_dn
*
pdn
=
dn
->
data
;
if
(
pdn
&&
(
pdn
->
devfn
>>
3
)
==
(
devfn
>>
3
))
return
1
;
return
1
;
}
return
0
;
return
0
;
}
}
...
@@ -982,3 +985,62 @@ void pci_resource_to_user(const struct pci_dev *dev, int bar,
...
@@ -982,3 +985,62 @@ void pci_resource_to_user(const struct pci_dev *dev, int bar,
}
}
#endif
/* CONFIG_PPC_MULTIPLATFORM */
#endif
/* CONFIG_PPC_MULTIPLATFORM */
#define IOBASE_BRIDGE_NUMBER 0
#define IOBASE_MEMORY 1
#define IOBASE_IO 2
#define IOBASE_ISA_IO 3
#define IOBASE_ISA_MEM 4
long
sys_pciconfig_iobase
(
long
which
,
unsigned
long
in_bus
,
unsigned
long
in_devfn
)
{
struct
pci_controller
*
hose
;
struct
list_head
*
ln
;
struct
pci_bus
*
bus
=
NULL
;
struct
device_node
*
hose_node
;
/* Argh ! Please forgive me for that hack, but that's the
* simplest way to get existing XFree to not lockup on some
* G5 machines... So when something asks for bus 0 io base
* (bus 0 is HT root), we return the AGP one instead.
*/
#ifdef CONFIG_PPC_PMAC
if
(
systemcfg
->
platform
==
PLATFORM_POWERMAC
&&
machine_is_compatible
(
"MacRISC4"
))
if
(
in_bus
==
0
)
in_bus
=
0xf0
;
#endif
/* CONFIG_PPC_PMAC */
/* That syscall isn't quite compatible with PCI domains, but it's
* used on pre-domains setup. We return the first match
*/
for
(
ln
=
pci_root_buses
.
next
;
ln
!=
&
pci_root_buses
;
ln
=
ln
->
next
)
{
bus
=
pci_bus_b
(
ln
);
if
(
in_bus
>=
bus
->
number
&&
in_bus
<
(
bus
->
number
+
bus
->
subordinate
))
break
;
bus
=
NULL
;
}
if
(
bus
==
NULL
||
bus
->
sysdata
==
NULL
)
return
-
ENODEV
;
hose_node
=
(
struct
device_node
*
)
bus
->
sysdata
;
hose
=
PCI_DN
(
hose_node
)
->
phb
;
switch
(
which
)
{
case
IOBASE_BRIDGE_NUMBER
:
return
(
long
)
hose
->
first_busno
;
case
IOBASE_MEMORY
:
return
(
long
)
hose
->
pci_mem_offset
;
case
IOBASE_IO
:
return
(
long
)
hose
->
io_base_phys
;
case
IOBASE_ISA_IO
:
return
(
long
)
isa_io_base
;
case
IOBASE_ISA_MEM
:
return
-
EINVAL
;
}
return
-
EOPNOTSUPP
;
}
arch/ppc64/kernel/pci.h
View file @
3aed77bc
...
@@ -34,7 +34,6 @@ void *traverse_pci_devices(struct device_node *start, traverse_func pre,
...
@@ -34,7 +34,6 @@ void *traverse_pci_devices(struct device_node *start, traverse_func pre,
void
pci_devs_phb_init
(
void
);
void
pci_devs_phb_init
(
void
);
void
pci_devs_phb_init_dynamic
(
struct
pci_controller
*
phb
);
void
pci_devs_phb_init_dynamic
(
struct
pci_controller
*
phb
);
struct
device_node
*
fetch_dev_dn
(
struct
pci_dev
*
dev
);
/* PCI address cache management routines */
/* PCI address cache management routines */
void
pci_addr_cache_insert_device
(
struct
pci_dev
*
dev
);
void
pci_addr_cache_insert_device
(
struct
pci_dev
*
dev
);
...
...
arch/ppc64/kernel/pci_dn.c
View file @
3aed77bc
...
@@ -23,6 +23,8 @@
...
@@ -23,6 +23,8 @@
#include <linux/pci.h>
#include <linux/pci.h>
#include <linux/string.h>
#include <linux/string.h>
#include <linux/init.h>
#include <linux/init.h>
#include <linux/slab.h>
#include <linux/bootmem.h>
#include <asm/io.h>
#include <asm/io.h>
#include <asm/prom.h>
#include <asm/prom.h>
...
@@ -40,16 +42,26 @@ static void * __devinit update_dn_pci_info(struct device_node *dn, void *data)
...
@@ -40,16 +42,26 @@ static void * __devinit update_dn_pci_info(struct device_node *dn, void *data)
struct
pci_controller
*
phb
=
data
;
struct
pci_controller
*
phb
=
data
;
int
*
type
=
(
int
*
)
get_property
(
dn
,
"ibm,pci-config-space-type"
,
NULL
);
int
*
type
=
(
int
*
)
get_property
(
dn
,
"ibm,pci-config-space-type"
,
NULL
);
u32
*
regs
;
u32
*
regs
;
struct
pci_dn
*
pdn
;
dn
->
phb
=
phb
;
if
(
phb
->
is_dynamic
)
pdn
=
kmalloc
(
sizeof
(
*
pdn
),
GFP_KERNEL
);
else
pdn
=
alloc_bootmem
(
sizeof
(
*
pdn
));
if
(
pdn
==
NULL
)
return
NULL
;
memset
(
pdn
,
0
,
sizeof
(
*
pdn
));
dn
->
data
=
pdn
;
pdn
->
node
=
dn
;
pdn
->
phb
=
phb
;
regs
=
(
u32
*
)
get_property
(
dn
,
"reg"
,
NULL
);
regs
=
(
u32
*
)
get_property
(
dn
,
"reg"
,
NULL
);
if
(
regs
)
{
if
(
regs
)
{
/* First register entry is addr (00BBSS00) */
/* First register entry is addr (00BBSS00) */
dn
->
busno
=
(
regs
[
0
]
>>
16
)
&
0xff
;
p
dn
->
busno
=
(
regs
[
0
]
>>
16
)
&
0xff
;
dn
->
devfn
=
(
regs
[
0
]
>>
8
)
&
0xff
;
p
dn
->
devfn
=
(
regs
[
0
]
>>
8
)
&
0xff
;
}
}
dn
->
pci_ext_config_space
=
(
type
&&
*
type
==
1
);
p
dn
->
pci_ext_config_space
=
(
type
&&
*
type
==
1
);
return
NULL
;
return
NULL
;
}
}
...
@@ -112,10 +124,15 @@ void *traverse_pci_devices(struct device_node *start, traverse_func pre,
...
@@ -112,10 +124,15 @@ void *traverse_pci_devices(struct device_node *start, traverse_func pre,
void
__devinit
pci_devs_phb_init_dynamic
(
struct
pci_controller
*
phb
)
void
__devinit
pci_devs_phb_init_dynamic
(
struct
pci_controller
*
phb
)
{
{
struct
device_node
*
dn
=
(
struct
device_node
*
)
phb
->
arch_data
;
struct
device_node
*
dn
=
(
struct
device_node
*
)
phb
->
arch_data
;
struct
pci_dn
*
pdn
;
/* PHB nodes themselves must not match */
/* PHB nodes themselves must not match */
dn
->
devfn
=
dn
->
busno
=
-
1
;
update_dn_pci_info
(
dn
,
phb
);
dn
->
phb
=
phb
;
pdn
=
dn
->
data
;
if
(
pdn
)
{
pdn
->
devfn
=
pdn
->
busno
=
-
1
;
pdn
->
phb
=
phb
;
}
/* Update dn->phb ptrs for new phb and children devices */
/* Update dn->phb ptrs for new phb and children devices */
traverse_pci_devices
(
dn
,
update_dn_pci_info
,
phb
);
traverse_pci_devices
(
dn
,
update_dn_pci_info
,
phb
);
...
@@ -123,14 +140,17 @@ void __devinit pci_devs_phb_init_dynamic(struct pci_controller *phb)
...
@@ -123,14 +140,17 @@ void __devinit pci_devs_phb_init_dynamic(struct pci_controller *phb)
/*
/*
* Traversal func that looks for a <busno,devfcn> value.
* Traversal func that looks for a <busno,devfcn> value.
* If found, the
device_node
is returned (thus terminating the traversal).
* If found, the
pci_dn
is returned (thus terminating the traversal).
*/
*/
static
void
*
is_devfn_node
(
struct
device_node
*
dn
,
void
*
data
)
static
void
*
is_devfn_node
(
struct
device_node
*
dn
,
void
*
data
)
{
{
int
busno
=
((
unsigned
long
)
data
>>
8
)
&
0xff
;
int
busno
=
((
unsigned
long
)
data
>>
8
)
&
0xff
;
int
devfn
=
((
unsigned
long
)
data
)
&
0xff
;
int
devfn
=
((
unsigned
long
)
data
)
&
0xff
;
struct
pci_dn
*
pci
=
dn
->
data
;
return
((
devfn
==
dn
->
devfn
)
&&
(
busno
==
dn
->
busno
))
?
dn
:
NULL
;
if
(
pci
&&
(
devfn
==
pci
->
devfn
)
&&
(
busno
==
pci
->
busno
))
return
dn
;
return
NULL
;
}
}
/*
/*
...
@@ -149,13 +169,10 @@ static void *is_devfn_node(struct device_node *dn, void *data)
...
@@ -149,13 +169,10 @@ static void *is_devfn_node(struct device_node *dn, void *data)
struct
device_node
*
fetch_dev_dn
(
struct
pci_dev
*
dev
)
struct
device_node
*
fetch_dev_dn
(
struct
pci_dev
*
dev
)
{
{
struct
device_node
*
orig_dn
=
dev
->
sysdata
;
struct
device_node
*
orig_dn
=
dev
->
sysdata
;
struct
pci_controller
*
phb
=
orig_dn
->
phb
;
/* assume same phb as orig_dn */
struct
device_node
*
phb_dn
;
struct
device_node
*
dn
;
struct
device_node
*
dn
;
unsigned
long
searchval
=
(
dev
->
bus
->
number
<<
8
)
|
dev
->
devfn
;
unsigned
long
searchval
=
(
dev
->
bus
->
number
<<
8
)
|
dev
->
devfn
;
phb_dn
=
phb
->
arch_data
;
dn
=
traverse_pci_devices
(
orig_dn
,
is_devfn_node
,
(
void
*
)
searchval
);
dn
=
traverse_pci_devices
(
phb_dn
,
is_devfn_node
,
(
void
*
)
searchval
);
if
(
dn
)
if
(
dn
)
dev
->
sysdata
=
dn
;
dev
->
sysdata
=
dn
;
return
dn
;
return
dn
;
...
@@ -165,11 +182,13 @@ EXPORT_SYMBOL(fetch_dev_dn);
...
@@ -165,11 +182,13 @@ EXPORT_SYMBOL(fetch_dev_dn);
static
int
pci_dn_reconfig_notifier
(
struct
notifier_block
*
nb
,
unsigned
long
action
,
void
*
node
)
static
int
pci_dn_reconfig_notifier
(
struct
notifier_block
*
nb
,
unsigned
long
action
,
void
*
node
)
{
{
struct
device_node
*
np
=
node
;
struct
device_node
*
np
=
node
;
struct
pci_dn
*
pci
;
int
err
=
NOTIFY_OK
;
int
err
=
NOTIFY_OK
;
switch
(
action
)
{
switch
(
action
)
{
case
PSERIES_RECONFIG_ADD
:
case
PSERIES_RECONFIG_ADD
:
update_dn_pci_info
(
np
,
np
->
parent
->
phb
);
pci
=
np
->
parent
->
data
;
update_dn_pci_info
(
np
,
pci
->
phb
);
break
;
break
;
default:
default:
err
=
NOTIFY_DONE
;
err
=
NOTIFY_DONE
;
...
...
arch/ppc64/kernel/pci_iommu.c
View file @
3aed77bc
...
@@ -66,7 +66,7 @@ static inline struct iommu_table *devnode_table(struct device *dev)
...
@@ -66,7 +66,7 @@ static inline struct iommu_table *devnode_table(struct device *dev)
#endif
/* CONFIG_PPC_ISERIES */
#endif
/* CONFIG_PPC_ISERIES */
#ifdef CONFIG_PPC_MULTIPLATFORM
#ifdef CONFIG_PPC_MULTIPLATFORM
return
PCI_
GET_DN
(
pdev
)
->
iommu_table
;
return
PCI_
DN
(
PCI_GET_DN
(
pdev
)
)
->
iommu_table
;
#endif
/* CONFIG_PPC_MULTIPLATFORM */
#endif
/* CONFIG_PPC_MULTIPLATFORM */
}
}
...
...
arch/ppc64/kernel/pmac_feature.c
View file @
3aed77bc
...
@@ -674,6 +674,7 @@ void __init pmac_check_ht_link(void)
...
@@ -674,6 +674,7 @@ void __init pmac_check_ht_link(void)
#if 0 /* Disabled for now */
#if 0 /* Disabled for now */
u32 ufreq, freq, ucfg, cfg;
u32 ufreq, freq, ucfg, cfg;
struct device_node *pcix_node;
struct device_node *pcix_node;
struct pci_dn *pdn;
u8 px_bus, px_devfn;
u8 px_bus, px_devfn;
struct pci_controller *px_hose;
struct pci_controller *px_hose;
...
@@ -687,9 +688,10 @@ void __init pmac_check_ht_link(void)
...
@@ -687,9 +688,10 @@ void __init pmac_check_ht_link(void)
printk("No PCI-X bridge found\n");
printk("No PCI-X bridge found\n");
return;
return;
}
}
px_hose = pcix_node->phb;
pdn = pcix_node->data;
px_bus = pcix_node->busno;
px_hose = pdn->phb;
px_devfn = pcix_node->devfn;
px_bus = pdn->busno;
px_devfn = pdn->devfn;
early_read_config_dword(px_hose, px_bus, px_devfn, 0xc4, &cfg);
early_read_config_dword(px_hose, px_bus, px_devfn, 0xc4, &cfg);
early_read_config_dword(px_hose, px_bus, px_devfn, 0xcc, &freq);
early_read_config_dword(px_hose, px_bus, px_devfn, 0xcc, &freq);
...
...
arch/ppc64/kernel/pmac_pci.c
View file @
3aed77bc
...
@@ -242,7 +242,7 @@ static int u3_ht_skip_device(struct pci_controller *hose,
...
@@ -242,7 +242,7 @@ static int u3_ht_skip_device(struct pci_controller *hose,
else
else
busdn
=
hose
->
arch_data
;
busdn
=
hose
->
arch_data
;
for
(
dn
=
busdn
->
child
;
dn
;
dn
=
dn
->
sibling
)
for
(
dn
=
busdn
->
child
;
dn
;
dn
=
dn
->
sibling
)
if
(
dn
->
devfn
==
devfn
)
if
(
dn
->
d
ata
&&
PCI_DN
(
dn
)
->
d
evfn
==
devfn
)
break
;
break
;
if
(
dn
==
NULL
)
if
(
dn
==
NULL
)
return
-
1
;
return
-
1
;
...
@@ -746,9 +746,9 @@ void __init pmac_pci_init(void)
...
@@ -746,9 +746,9 @@ void __init pmac_pci_init(void)
*/
*/
if
(
u3_agp
)
{
if
(
u3_agp
)
{
struct
device_node
*
np
=
u3_agp
->
arch_data
;
struct
device_node
*
np
=
u3_agp
->
arch_data
;
np
->
busno
=
0xf0
;
PCI_DN
(
np
)
->
busno
=
0xf0
;
for
(
np
=
np
->
child
;
np
;
np
=
np
->
sibling
)
for
(
np
=
np
->
child
;
np
;
np
=
np
->
sibling
)
np
->
busno
=
0xf0
;
PCI_DN
(
np
)
->
busno
=
0xf0
;
}
}
pmac_check_ht_link
();
pmac_check_ht_link
();
...
...
arch/ppc64/kernel/prom.c
View file @
3aed77bc
...
@@ -1733,6 +1733,7 @@ static void of_node_release(struct kref *kref)
...
@@ -1733,6 +1733,7 @@ static void of_node_release(struct kref *kref)
kfree
(
node
->
intrs
);
kfree
(
node
->
intrs
);
kfree
(
node
->
addrs
);
kfree
(
node
->
addrs
);
kfree
(
node
->
full_name
);
kfree
(
node
->
full_name
);
kfree
(
node
->
data
);
kfree
(
node
);
kfree
(
node
);
}
}
...
...
arch/ppc64/kernel/rtas_pci.c
View file @
3aed77bc
...
@@ -48,7 +48,7 @@ static int write_pci_config;
...
@@ -48,7 +48,7 @@ static int write_pci_config;
static
int
ibm_read_pci_config
;
static
int
ibm_read_pci_config
;
static
int
ibm_write_pci_config
;
static
int
ibm_write_pci_config
;
static
int
config_access_valid
(
struct
device_node
*
dn
,
int
where
)
static
int
config_access_valid
(
struct
pci_dn
*
dn
,
int
where
)
{
{
if
(
where
<
256
)
if
(
where
<
256
)
return
1
;
return
1
;
...
@@ -78,15 +78,17 @@ static int rtas_read_config(struct device_node *dn, int where, int size, u32 *va
...
@@ -78,15 +78,17 @@ static int rtas_read_config(struct device_node *dn, int where, int size, u32 *va
int
returnval
=
-
1
;
int
returnval
=
-
1
;
unsigned
long
buid
,
addr
;
unsigned
long
buid
,
addr
;
int
ret
;
int
ret
;
struct
pci_dn
*
pdn
;
if
(
!
dn
)
if
(
!
dn
||
!
dn
->
data
)
return
PCIBIOS_DEVICE_NOT_FOUND
;
return
PCIBIOS_DEVICE_NOT_FOUND
;
if
(
!
config_access_valid
(
dn
,
where
))
pdn
=
dn
->
data
;
if
(
!
config_access_valid
(
pdn
,
where
))
return
PCIBIOS_BAD_REGISTER_NUMBER
;
return
PCIBIOS_BAD_REGISTER_NUMBER
;
addr
=
((
where
&
0xf00
)
<<
20
)
|
(
dn
->
busno
<<
16
)
|
addr
=
((
where
&
0xf00
)
<<
20
)
|
(
p
dn
->
busno
<<
16
)
|
(
dn
->
devfn
<<
8
)
|
(
where
&
0xff
);
(
p
dn
->
devfn
<<
8
)
|
(
where
&
0xff
);
buid
=
dn
->
phb
->
buid
;
buid
=
p
dn
->
phb
->
buid
;
if
(
buid
)
{
if
(
buid
)
{
ret
=
rtas_call
(
ibm_read_pci_config
,
4
,
2
,
&
returnval
,
ret
=
rtas_call
(
ibm_read_pci_config
,
4
,
2
,
&
returnval
,
addr
,
buid
>>
32
,
buid
&
0xffffffff
,
size
);
addr
,
buid
>>
32
,
buid
&
0xffffffff
,
size
);
...
@@ -98,8 +100,8 @@ static int rtas_read_config(struct device_node *dn, int where, int size, u32 *va
...
@@ -98,8 +100,8 @@ static int rtas_read_config(struct device_node *dn, int where, int size, u32 *va
if
(
ret
)
if
(
ret
)
return
PCIBIOS_DEVICE_NOT_FOUND
;
return
PCIBIOS_DEVICE_NOT_FOUND
;
if
(
returnval
==
EEH_IO_ERROR_VALUE
(
size
)
if
(
returnval
==
EEH_IO_ERROR_VALUE
(
size
)
&&
&&
eeh_dn_check_failure
(
dn
,
NULL
))
eeh_dn_check_failure
(
dn
,
NULL
))
return
PCIBIOS_DEVICE_NOT_FOUND
;
return
PCIBIOS_DEVICE_NOT_FOUND
;
return
PCIBIOS_SUCCESSFUL
;
return
PCIBIOS_SUCCESSFUL
;
...
@@ -118,24 +120,28 @@ static int rtas_pci_read_config(struct pci_bus *bus,
...
@@ -118,24 +120,28 @@ static int rtas_pci_read_config(struct pci_bus *bus,
/* Search only direct children of the bus */
/* Search only direct children of the bus */
for
(
dn
=
busdn
->
child
;
dn
;
dn
=
dn
->
sibling
)
for
(
dn
=
busdn
->
child
;
dn
;
dn
=
dn
->
sibling
)
if
(
dn
->
devfn
==
devfn
&&
of_device_available
(
dn
))
if
(
dn
->
data
&&
PCI_DN
(
dn
)
->
devfn
==
devfn
&&
of_device_available
(
dn
))
return
rtas_read_config
(
dn
,
where
,
size
,
val
);
return
rtas_read_config
(
dn
,
where
,
size
,
val
);
return
PCIBIOS_DEVICE_NOT_FOUND
;
return
PCIBIOS_DEVICE_NOT_FOUND
;
}
}
static
int
rtas_write_config
(
struct
device_node
*
dn
,
int
where
,
int
size
,
u32
val
)
int
rtas_write_config
(
struct
device_node
*
dn
,
int
where
,
int
size
,
u32
val
)
{
{
unsigned
long
buid
,
addr
;
unsigned
long
buid
,
addr
;
int
ret
;
int
ret
;
struct
pci_dn
*
pdn
;
if
(
!
dn
)
if
(
!
dn
||
!
dn
->
data
)
return
PCIBIOS_DEVICE_NOT_FOUND
;
return
PCIBIOS_DEVICE_NOT_FOUND
;
if
(
!
config_access_valid
(
dn
,
where
))
pdn
=
dn
->
data
;
if
(
!
config_access_valid
(
pdn
,
where
))
return
PCIBIOS_BAD_REGISTER_NUMBER
;
return
PCIBIOS_BAD_REGISTER_NUMBER
;
addr
=
((
where
&
0xf00
)
<<
20
)
|
(
dn
->
busno
<<
16
)
|
addr
=
((
where
&
0xf00
)
<<
20
)
|
(
p
dn
->
busno
<<
16
)
|
(
dn
->
devfn
<<
8
)
|
(
where
&
0xff
);
(
p
dn
->
devfn
<<
8
)
|
(
where
&
0xff
);
buid
=
dn
->
phb
->
buid
;
buid
=
p
dn
->
phb
->
buid
;
if
(
buid
)
{
if
(
buid
)
{
ret
=
rtas_call
(
ibm_write_pci_config
,
5
,
1
,
NULL
,
addr
,
buid
>>
32
,
buid
&
0xffffffff
,
size
,
(
ulong
)
val
);
ret
=
rtas_call
(
ibm_write_pci_config
,
5
,
1
,
NULL
,
addr
,
buid
>>
32
,
buid
&
0xffffffff
,
size
,
(
ulong
)
val
);
}
else
{
}
else
{
...
@@ -161,7 +167,8 @@ static int rtas_pci_write_config(struct pci_bus *bus,
...
@@ -161,7 +167,8 @@ static int rtas_pci_write_config(struct pci_bus *bus,
/* Search only direct children of the bus */
/* Search only direct children of the bus */
for
(
dn
=
busdn
->
child
;
dn
;
dn
=
dn
->
sibling
)
for
(
dn
=
busdn
->
child
;
dn
;
dn
=
dn
->
sibling
)
if
(
dn
->
devfn
==
devfn
&&
of_device_available
(
dn
))
if
(
dn
->
data
&&
PCI_DN
(
dn
)
->
devfn
==
devfn
&&
of_device_available
(
dn
))
return
rtas_write_config
(
dn
,
where
,
size
,
val
);
return
rtas_write_config
(
dn
,
where
,
size
,
val
);
return
PCIBIOS_DEVICE_NOT_FOUND
;
return
PCIBIOS_DEVICE_NOT_FOUND
;
}
}
...
...
arch/ppc64/kernel/sys_ppc32.c
View file @
3aed77bc
...
@@ -708,62 +708,9 @@ asmlinkage int sys32_pciconfig_write(u32 bus, u32 dfn, u32 off, u32 len, u32 ubu
...
@@ -708,62 +708,9 @@ asmlinkage int sys32_pciconfig_write(u32 bus, u32 dfn, u32 off, u32 len, u32 ubu
compat_ptr
(
ubuf
));
compat_ptr
(
ubuf
));
}
}
#define IOBASE_BRIDGE_NUMBER 0
#define IOBASE_MEMORY 1
#define IOBASE_IO 2
#define IOBASE_ISA_IO 3
#define IOBASE_ISA_MEM 4
asmlinkage
int
sys32_pciconfig_iobase
(
u32
which
,
u32
in_bus
,
u32
in_devfn
)
asmlinkage
int
sys32_pciconfig_iobase
(
u32
which
,
u32
in_bus
,
u32
in_devfn
)
{
{
#ifdef CONFIG_PCI
return
sys_pciconfig_iobase
(
which
,
in_bus
,
in_devfn
);
struct
pci_controller
*
hose
;
struct
list_head
*
ln
;
struct
pci_bus
*
bus
=
NULL
;
struct
device_node
*
hose_node
;
/* Argh ! Please forgive me for that hack, but that's the
* simplest way to get existing XFree to not lockup on some
* G5 machines... So when something asks for bus 0 io base
* (bus 0 is HT root), we return the AGP one instead.
*/
#ifdef CONFIG_PPC_PMAC
if
(
systemcfg
->
platform
==
PLATFORM_POWERMAC
&&
machine_is_compatible
(
"MacRISC4"
))
if
(
in_bus
==
0
)
in_bus
=
0xf0
;
#endif
/* CONFIG_PPC_PMAC */
/* That syscall isn't quite compatible with PCI domains, but it's
* used on pre-domains setup. We return the first match
*/
for
(
ln
=
pci_root_buses
.
next
;
ln
!=
&
pci_root_buses
;
ln
=
ln
->
next
)
{
bus
=
pci_bus_b
(
ln
);
if
(
in_bus
>=
bus
->
number
&&
in_bus
<
(
bus
->
number
+
bus
->
subordinate
))
break
;
bus
=
NULL
;
}
if
(
bus
==
NULL
||
bus
->
sysdata
==
NULL
)
return
-
ENODEV
;
hose_node
=
(
struct
device_node
*
)
bus
->
sysdata
;
hose
=
hose_node
->
phb
;
switch
(
which
)
{
case
IOBASE_BRIDGE_NUMBER
:
return
(
long
)
hose
->
first_busno
;
case
IOBASE_MEMORY
:
return
(
long
)
hose
->
pci_mem_offset
;
case
IOBASE_IO
:
return
(
long
)
hose
->
io_base_phys
;
case
IOBASE_ISA_IO
:
return
(
long
)
isa_io_base
;
case
IOBASE_ISA_MEM
:
return
-
EINVAL
;
}
#endif
/* CONFIG_PCI */
return
-
EOPNOTSUPP
;
}
}
...
...
arch/ppc64/kernel/syscalls.c
View file @
3aed77bc
...
@@ -46,10 +46,6 @@
...
@@ -46,10 +46,6 @@
extern
unsigned
long
wall_jiffies
;
extern
unsigned
long
wall_jiffies
;
void
check_bugs
(
void
)
{
}
/*
/*
* sys_ipc() is the de-multiplexer for the SysV IPC calls..
* sys_ipc() is the de-multiplexer for the SysV IPC calls..
...
...
arch/ppc64/kernel/u3_iommu.c
View file @
3aed77bc
...
@@ -276,7 +276,7 @@ static void iommu_dev_setup_u3(struct pci_dev *dev)
...
@@ -276,7 +276,7 @@ static void iommu_dev_setup_u3(struct pci_dev *dev)
dn
=
pci_device_to_OF_node
(
dev
);
dn
=
pci_device_to_OF_node
(
dev
);
if
(
dn
)
if
(
dn
)
dn
->
iommu_table
=
&
iommu_table_u3
;
PCI_DN
(
dn
)
->
iommu_table
=
&
iommu_table_u3
;
}
}
static
void
iommu_bus_setup_u3
(
struct
pci_bus
*
bus
)
static
void
iommu_bus_setup_u3
(
struct
pci_bus
*
bus
)
...
@@ -291,7 +291,7 @@ static void iommu_bus_setup_u3(struct pci_bus *bus)
...
@@ -291,7 +291,7 @@ static void iommu_bus_setup_u3(struct pci_bus *bus)
dn
=
pci_bus_to_OF_node
(
bus
);
dn
=
pci_bus_to_OF_node
(
bus
);
if
(
dn
)
if
(
dn
)
dn
->
iommu_table
=
&
iommu_table_u3
;
PCI_DN
(
dn
)
->
iommu_table
=
&
iommu_table_u3
;
}
}
static
void
iommu_dev_setup_null
(
struct
pci_dev
*
dev
)
{
}
static
void
iommu_dev_setup_null
(
struct
pci_dev
*
dev
)
{
}
...
...
arch/ppc64/kernel/udbg.c
View file @
3aed77bc
...
@@ -158,14 +158,20 @@ static struct console udbg_console = {
...
@@ -158,14 +158,20 @@ static struct console udbg_console = {
.
index
=
-
1
,
.
index
=
-
1
,
};
};
static
int
early_console_initialized
;
void
__init
disable_early_printk
(
void
)
void
__init
disable_early_printk
(
void
)
{
{
if
(
!
early_console_initialized
)
return
;
unregister_console
(
&
udbg_console
);
unregister_console
(
&
udbg_console
);
early_console_initialized
=
0
;
}
}
/* called by setup_system */
/* called by setup_system */
void
register_early_udbg_console
(
void
)
void
register_early_udbg_console
(
void
)
{
{
early_console_initialized
=
1
;
register_console
(
&
udbg_console
);
register_console
(
&
udbg_console
);
}
}
...
...
arch/ppc64/mm/init.c
View file @
3aed77bc
...
@@ -554,12 +554,12 @@ void __init do_init_bootmem(void)
...
@@ -554,12 +554,12 @@ void __init do_init_bootmem(void)
* present.
* present.
*/
*/
for
(
i
=
0
;
i
<
lmb
.
memory
.
cnt
;
i
++
)
for
(
i
=
0
;
i
<
lmb
.
memory
.
cnt
;
i
++
)
free_bootmem
(
lmb
_start_pfn
(
&
lmb
.
memory
,
i
)
,
free_bootmem
(
lmb
.
memory
.
region
[
i
].
base
,
lmb_size_bytes
(
&
lmb
.
memory
,
i
));
lmb_size_bytes
(
&
lmb
.
memory
,
i
));
/* reserve the sections we're already using */
/* reserve the sections we're already using */
for
(
i
=
0
;
i
<
lmb
.
reserved
.
cnt
;
i
++
)
for
(
i
=
0
;
i
<
lmb
.
reserved
.
cnt
;
i
++
)
reserve_bootmem
(
lmb
_start_pfn
(
&
lmb
.
reserved
,
i
)
,
reserve_bootmem
(
lmb
.
reserved
.
region
[
i
].
base
,
lmb_size_bytes
(
&
lmb
.
reserved
,
i
));
lmb_size_bytes
(
&
lmb
.
reserved
,
i
));
for
(
i
=
0
;
i
<
lmb
.
memory
.
cnt
;
i
++
)
for
(
i
=
0
;
i
<
lmb
.
memory
.
cnt
;
i
++
)
...
...
drivers/pci/hotplug/rpadlpar_core.c
View file @
3aed77bc
...
@@ -134,7 +134,8 @@ static void rpadlpar_claim_one_bus(struct pci_bus *b)
...
@@ -134,7 +134,8 @@ static void rpadlpar_claim_one_bus(struct pci_bus *b)
static
int
pci_add_secondary_bus
(
struct
device_node
*
dn
,
static
int
pci_add_secondary_bus
(
struct
device_node
*
dn
,
struct
pci_dev
*
bridge_dev
)
struct
pci_dev
*
bridge_dev
)
{
{
struct
pci_controller
*
hose
=
dn
->
phb
;
struct
pci_dn
*
pdn
=
dn
->
data
;
struct
pci_controller
*
hose
=
pdn
->
phb
;
struct
pci_bus
*
child
;
struct
pci_bus
*
child
;
u8
sec_busno
;
u8
sec_busno
;
...
@@ -159,7 +160,7 @@ static int pci_add_secondary_bus(struct device_node *dn,
...
@@ -159,7 +160,7 @@ static int pci_add_secondary_bus(struct device_node *dn,
if
(
hose
->
last_busno
<
child
->
number
)
if
(
hose
->
last_busno
<
child
->
number
)
hose
->
last_busno
=
child
->
number
;
hose
->
last_busno
=
child
->
number
;
dn
->
bussubno
=
child
->
number
;
p
dn
->
bussubno
=
child
->
number
;
/* ioremap() for child bus, which may or may not succeed */
/* ioremap() for child bus, which may or may not succeed */
remap_bus_range
(
child
);
remap_bus_range
(
child
);
...
@@ -183,11 +184,12 @@ static struct pci_dev *dlpar_find_new_dev(struct pci_bus *parent,
...
@@ -183,11 +184,12 @@ static struct pci_dev *dlpar_find_new_dev(struct pci_bus *parent,
static
struct
pci_dev
*
dlpar_pci_add_bus
(
struct
device_node
*
dn
)
static
struct
pci_dev
*
dlpar_pci_add_bus
(
struct
device_node
*
dn
)
{
{
struct
pci_controller
*
hose
=
dn
->
phb
;
struct
pci_dn
*
pdn
=
dn
->
data
;
struct
pci_controller
*
hose
=
pdn
->
phb
;
struct
pci_dev
*
dev
=
NULL
;
struct
pci_dev
*
dev
=
NULL
;
/* Scan phb bus for EADS device, adding new one to bus->devices */
/* Scan phb bus for EADS device, adding new one to bus->devices */
if
(
!
pci_scan_single_device
(
hose
->
bus
,
dn
->
devfn
))
{
if
(
!
pci_scan_single_device
(
hose
->
bus
,
p
dn
->
devfn
))
{
printk
(
KERN_ERR
"%s: found no device on bus
\n
"
,
__FUNCTION__
);
printk
(
KERN_ERR
"%s: found no device on bus
\n
"
,
__FUNCTION__
);
return
NULL
;
return
NULL
;
}
}
...
@@ -269,6 +271,7 @@ static int dlpar_remove_root_bus(struct pci_controller *phb)
...
@@ -269,6 +271,7 @@ static int dlpar_remove_root_bus(struct pci_controller *phb)
static
int
dlpar_remove_phb
(
char
*
drc_name
,
struct
device_node
*
dn
)
static
int
dlpar_remove_phb
(
char
*
drc_name
,
struct
device_node
*
dn
)
{
{
struct
slot
*
slot
;
struct
slot
*
slot
;
struct
pci_dn
*
pdn
;
int
rc
=
0
;
int
rc
=
0
;
if
(
!
rpaphp_find_pci_bus
(
dn
))
if
(
!
rpaphp_find_pci_bus
(
dn
))
...
@@ -285,12 +288,13 @@ static int dlpar_remove_phb(char *drc_name, struct device_node *dn)
...
@@ -285,12 +288,13 @@ static int dlpar_remove_phb(char *drc_name, struct device_node *dn)
}
}
}
}
BUG_ON
(
!
dn
->
phb
);
pdn
=
dn
->
data
;
rc
=
dlpar_remove_root_bus
(
dn
->
phb
);
BUG_ON
(
!
pdn
||
!
pdn
->
phb
);
rc
=
dlpar_remove_root_bus
(
pdn
->
phb
);
if
(
rc
<
0
)
if
(
rc
<
0
)
return
rc
;
return
rc
;
dn
->
phb
=
NULL
;
p
dn
->
phb
=
NULL
;
return
0
;
return
0
;
}
}
...
@@ -299,7 +303,7 @@ static int dlpar_add_phb(char *drc_name, struct device_node *dn)
...
@@ -299,7 +303,7 @@ static int dlpar_add_phb(char *drc_name, struct device_node *dn)
{
{
struct
pci_controller
*
phb
;
struct
pci_controller
*
phb
;
if
(
dn
->
phb
)
{
if
(
PCI_DN
(
dn
)
->
phb
)
{
/* PHB already exists */
/* PHB already exists */
return
-
EINVAL
;
return
-
EINVAL
;
}
}
...
...
drivers/pci/hotplug/rpaphp_pci.c
View file @
3aed77bc
...
@@ -51,10 +51,12 @@ static struct pci_bus *find_bus_among_children(struct pci_bus *bus,
...
@@ -51,10 +51,12 @@ static struct pci_bus *find_bus_among_children(struct pci_bus *bus,
struct
pci_bus
*
rpaphp_find_pci_bus
(
struct
device_node
*
dn
)
struct
pci_bus
*
rpaphp_find_pci_bus
(
struct
device_node
*
dn
)
{
{
if
(
!
dn
->
phb
||
!
dn
->
phb
->
bus
)
struct
pci_dn
*
pdn
=
dn
->
data
;
if
(
!
pdn
||
!
pdn
->
phb
||
!
pdn
->
phb
->
bus
)
return
NULL
;
return
NULL
;
return
find_bus_among_children
(
dn
->
phb
->
bus
,
dn
);
return
find_bus_among_children
(
p
dn
->
phb
->
bus
,
dn
);
}
}
EXPORT_SYMBOL_GPL
(
rpaphp_find_pci_bus
);
EXPORT_SYMBOL_GPL
(
rpaphp_find_pci_bus
);
...
@@ -229,7 +231,7 @@ rpaphp_pci_config_slot(struct pci_bus *bus)
...
@@ -229,7 +231,7 @@ rpaphp_pci_config_slot(struct pci_bus *bus)
if
(
!
dn
||
!
dn
->
child
)
if
(
!
dn
||
!
dn
->
child
)
return
NULL
;
return
NULL
;
slotno
=
PCI_SLOT
(
dn
->
child
->
devfn
);
slotno
=
PCI_SLOT
(
PCI_DN
(
dn
->
child
)
->
devfn
);
/* pci_scan_slot should find all children */
/* pci_scan_slot should find all children */
num
=
pci_scan_slot
(
bus
,
PCI_DEVFN
(
slotno
,
0
));
num
=
pci_scan_slot
(
bus
,
PCI_DEVFN
(
slotno
,
0
));
...
...
drivers/video/offb.c
View file @
3aed77bc
...
@@ -363,7 +363,7 @@ static void __init offb_init_nodriver(struct device_node *dp)
...
@@ -363,7 +363,7 @@ static void __init offb_init_nodriver(struct device_node *dp)
address
=
(
u_long
)
dp
->
addrs
[
i
].
address
;
address
=
(
u_long
)
dp
->
addrs
[
i
].
address
;
#ifdef CONFIG_PPC64
#ifdef CONFIG_PPC64
address
+=
dp
->
phb
->
pci_mem_offset
;
address
+=
((
struct
pci_dn
*
)
dp
->
data
)
->
phb
->
pci_mem_offset
;
#endif
#endif
/* kludge for valkyrie */
/* kludge for valkyrie */
...
...
include/asm-powerpc/8253pit.h
View file @
3aed77bc
#ifndef _ASM_POWERPC_8253PIT_H
#define _ASM_POWERPC_8253PIT_H
/*
/*
* 8253/8254 Programmable Interval Timer
* 8253/8254 Programmable Interval Timer
*/
*/
#ifndef _8253PIT_H
#define _8253PIT_H
#define PIT_TICK_RATE 1193182UL
#define PIT_TICK_RATE 1193182UL
#endif
#endif
/* _ASM_POWERPC_8253PIT_H */
include/asm-powerpc/agp.h
View file @
3aed77bc
#ifndef AGP_H
#ifndef
_ASM_POWERPC_
AGP_H
#define
AGP_H 1
#define
_ASM_POWERPC_AGP_H
#include <asm/io.h>
#include <asm/io.h>
/* nothing much needed here */
#define map_page_into_agp(page)
#define map_page_into_agp(page)
#define unmap_page_from_agp(page)
#define unmap_page_from_agp(page)
#define flush_agp_mappings()
#define flush_agp_mappings()
...
@@ -20,4 +18,4 @@
...
@@ -20,4 +18,4 @@
#define free_gatt_pages(table, order) \
#define free_gatt_pages(table, order) \
free_pages((unsigned long)(table), (order))
free_pages((unsigned long)(table), (order))
#endif
#endif
/* _ASM_POWERPC_AGP_H */
include/asm-powerpc/bugs.h
View file @
3aed77bc
#ifndef _POWERPC_BUGS_H
#ifndef _
ASM_
POWERPC_BUGS_H
#define _POWERPC_BUGS_H
#define _
ASM_
POWERPC_BUGS_H
/*
/*
* This program is free software; you can redistribute it and/or
* This program is free software; you can redistribute it and/or
...
@@ -13,6 +13,6 @@
...
@@ -13,6 +13,6 @@
* architecture-dependent bugs.
* architecture-dependent bugs.
*/
*/
extern
void
check_bugs
(
void
);
static
inline
void
check_bugs
(
void
)
{
}
#endif
/*
_POWERPC_BUGS_H */
#endif
/* _ASM
_POWERPC_BUGS_H */
include/asm-powerpc/errno.h
View file @
3aed77bc
#ifndef _
P
PC_ERRNO_H
#ifndef _
ASM_POWER
PC_ERRNO_H
#define _
P
PC_ERRNO_H
#define _
ASM_POWER
PC_ERRNO_H
#include <asm-generic/errno.h>
#include <asm-generic/errno.h>
...
@@ -8,4 +8,4 @@
...
@@ -8,4 +8,4 @@
#define _LAST_ERRNO 516
#define _LAST_ERRNO 516
#endif
#endif
/* _ASM_POWERPC_ERRNO_H */
include/asm-powerpc/ioctl.h
View file @
3aed77bc
#ifndef _
P
PC_IOCTL_H
#ifndef _
ASM_POWER
PC_IOCTL_H
#define _
P
PC_IOCTL_H
#define _
ASM_POWER
PC_IOCTL_H
/*
/*
...
@@ -66,4 +66,4 @@ extern unsigned int __invalid_size_argument_for_IOC;
...
@@ -66,4 +66,4 @@ extern unsigned int __invalid_size_argument_for_IOC;
#define IOCSIZE_MASK (_IOC_SIZEMASK << _IOC_SIZESHIFT)
#define IOCSIZE_MASK (_IOC_SIZEMASK << _IOC_SIZESHIFT)
#define IOCSIZE_SHIFT (_IOC_SIZESHIFT)
#define IOCSIZE_SHIFT (_IOC_SIZESHIFT)
#endif
#endif
/* _ASM_POWERPC_IOCTL_H */
include/asm-powerpc/ioctls.h
View file @
3aed77bc
#ifndef _ASM_PPC_IOCTLS_H
#ifndef _ASM_P
OWER
PC_IOCTLS_H
#define _ASM_PPC_IOCTLS_H
#define _ASM_P
OWER
PC_IOCTLS_H
#include <asm/ioctl.h>
#include <asm/ioctl.h>
...
@@ -104,4 +104,4 @@
...
@@ -104,4 +104,4 @@
#define TIOCMIWAIT 0x545C
/* wait for a change on serial input line(s) */
#define TIOCMIWAIT 0x545C
/* wait for a change on serial input line(s) */
#define TIOCGICOUNT 0x545D
/* read serial port inline interrupt counts */
#define TIOCGICOUNT 0x545D
/* read serial port inline interrupt counts */
#endif
/* _ASM_P
PC_IOCTLS_H */
#endif
/* _ASM_POWER
PC_IOCTLS_H */
include/asm-powerpc/linkage.h
View file @
3aed77bc
#ifndef _
_ASM
_LINKAGE_H
#ifndef _
ASM_POWERPC
_LINKAGE_H
#define _
_ASM
_LINKAGE_H
#define _
ASM_POWERPC
_LINKAGE_H
/* Nothing to see here... */
/* Nothing to see here... */
#endif
#endif
/* _ASM_POWERPC_LINKAGE_H */
include/asm-powerpc/mc146818rtc.h
View file @
3aed77bc
#ifndef _POWERPC_MC146818RTC_H
#ifndef _
ASM_
POWERPC_MC146818RTC_H
#define _POWERPC_MC146818RTC_H
#define _
ASM_
POWERPC_MC146818RTC_H
/*
/*
* Machine dependent access functions for RTC registers.
* Machine dependent access functions for RTC registers.
...
@@ -33,4 +33,4 @@ outb_p((val),RTC_PORT(1)); \
...
@@ -33,4 +33,4 @@ outb_p((val),RTC_PORT(1)); \
})
})
#endif
/* __KERNEL__ */
#endif
/* __KERNEL__ */
#endif
/* _POWERPC_MC146818RTC_H */
#endif
/* _
ASM_
POWERPC_MC146818RTC_H */
include/asm-powerpc/mman.h
View file @
3aed77bc
#ifndef _POWERPC_MMAN_H
#ifndef _
ASM_
POWERPC_MMAN_H
#define _POWERPC_MMAN_H
#define _
ASM_
POWERPC_MMAN_H
/*
/*
* This program is free software; you can redistribute it and/or
* This program is free software; you can redistribute it and/or
...
@@ -49,4 +49,4 @@
...
@@ -49,4 +49,4 @@
#define MAP_ANON MAP_ANONYMOUS
#define MAP_ANON MAP_ANONYMOUS
#define MAP_FILE 0
#define MAP_FILE 0
#endif
/*
_POWERPC_MMAN_H */
#endif
/* _ASM
_POWERPC_MMAN_H */
include/asm-powerpc/module.h
View file @
3aed77bc
#ifndef _POWERPC_MODULE_H
#ifndef _
ASM_
POWERPC_MODULE_H
#define _POWERPC_MODULE_H
#define _
ASM_
POWERPC_MODULE_H
/*
/*
* This program is free software; you can redistribute it and/or
* This program is free software; you can redistribute it and/or
...
@@ -74,4 +74,4 @@ struct exception_table_entry;
...
@@ -74,4 +74,4 @@ struct exception_table_entry;
void
sort_ex_table
(
struct
exception_table_entry
*
start
,
void
sort_ex_table
(
struct
exception_table_entry
*
start
,
struct
exception_table_entry
*
finish
);
struct
exception_table_entry
*
finish
);
#endif
/*
_POWERPC_MODULE_H */
#endif
/* _ASM
_POWERPC_MODULE_H */
include/asm-ppc/msgbuf.h
→
include/asm-p
ower
pc/msgbuf.h
View file @
3aed77bc
#ifndef _
P
PC_MSGBUF_H
#ifndef _
ASM_POWER
PC_MSGBUF_H
#define _
P
PC_MSGBUF_H
#define _
ASM_POWER
PC_MSGBUF_H
/*
/*
* The msqid64_ds structure for the PPC architecture.
* The msqid64_ds structure for the PowerPC architecture.
* Note extra padding because this structure is passed back and forth
* between kernel and user space.
*/
*/
struct
msqid64_ds
{
struct
msqid64_ds
{
struct
ipc64_perm
msg_perm
;
struct
ipc64_perm
msg_perm
;
#ifndef __powerpc64__
unsigned
int
__unused1
;
unsigned
int
__unused1
;
#endif
__kernel_time_t
msg_stime
;
/* last msgsnd time */
__kernel_time_t
msg_stime
;
/* last msgsnd time */
#ifndef __powerpc64__
unsigned
int
__unused2
;
unsigned
int
__unused2
;
#endif
__kernel_time_t
msg_rtime
;
/* last msgrcv time */
__kernel_time_t
msg_rtime
;
/* last msgrcv time */
#ifndef __powerpc64__
unsigned
int
__unused3
;
unsigned
int
__unused3
;
#endif
__kernel_time_t
msg_ctime
;
/* last change time */
__kernel_time_t
msg_ctime
;
/* last change time */
unsigned
long
msg_cbytes
;
/* current number of bytes on queue */
unsigned
long
msg_cbytes
;
/* current number of bytes on queue */
unsigned
long
msg_qnum
;
/* number of messages in queue */
unsigned
long
msg_qnum
;
/* number of messages in queue */
...
@@ -22,4 +30,4 @@ struct msqid64_ds {
...
@@ -22,4 +30,4 @@ struct msqid64_ds {
unsigned
long
__unused5
;
unsigned
long
__unused5
;
};
};
#endif
/* _P
PC_MSGBUF_H */
#endif
/* _ASM_POWER
PC_MSGBUF_H */
include/asm-powerpc/namei.h
View file @
3aed77bc
#ifndef _ASM_POWERPC_NAMEI_H
#define _ASM_POWERPC_NAMEI_H
#ifdef __KERNEL__
/*
/*
* include/asm-ppc/namei.h
* Adapted from include/asm-alpha/namei.h
* Adapted from include/asm-alpha/namei.h
*
*
* Included from fs/namei.c
* Included from fs/namei.c
*/
*/
#ifdef __KERNEL__
#ifndef __PPC_NAMEI_H
#define __PPC_NAMEI_H
/* This dummy routine maybe changed to something useful
/* This dummy routine maybe changed to something useful
* for /usr/gnemul/ emulation stuff.
* for /usr/gnemul/ emulation stuff.
* Look at asm-sparc/namei.h for details.
* Look at asm-sparc/namei.h for details.
...
@@ -16,5 +16,5 @@
...
@@ -16,5 +16,5 @@
#define __emul_prefix() NULL
#define __emul_prefix() NULL
#endif
/* __PPC_NAMEI_H */
#endif
/* __KERNEL__ */
#endif
/* __KERNEL__ */
#endif
/* _ASM_POWERPC_NAMEI_H */
include/asm-ppc/param.h
→
include/asm-p
ower
pc/param.h
View file @
3aed77bc
#ifndef _ASM_PPC_PARAM_H
#ifndef _ASM_P
OWER
PC_PARAM_H
#define _ASM_PPC_PARAM_H
#define _ASM_P
OWER
PC_PARAM_H
#include <linux/config.h>
#include <linux/config.h>
#ifdef __KERNEL__
#ifdef __KERNEL__
#define HZ CONFIG_HZ
/* internal timer frequency */
#define HZ CONFIG_HZ
/* internal
kernel
timer frequency */
#define USER_HZ 100
/* for user interfaces in "ticks" */
#define USER_HZ 100
/* for user interfaces in "ticks" */
#define CLOCKS_PER_SEC (USER_HZ)
/* frequency at which times() counts */
#define CLOCKS_PER_SEC (USER_HZ)
/* frequency at which times() counts */
#endif
/* __KERNEL__ */
#endif
/* __KERNEL__ */
...
@@ -21,4 +21,4 @@
...
@@ -21,4 +21,4 @@
#define MAXHOSTNAMELEN 64
/* max length of hostname */
#define MAXHOSTNAMELEN 64
/* max length of hostname */
#endif
#endif
/* _ASM_POWERPC_PARAM_H */
include/asm-powerpc/poll.h
View file @
3aed77bc
#ifndef _
_P
PC_POLL_H
#ifndef _
ASM_POWER
PC_POLL_H
#define _
_P
PC_POLL_H
#define _
ASM_POWER
PC_POLL_H
#define POLLIN 0x0001
#define POLLIN 0x0001
#define POLLPRI 0x0002
#define POLLPRI 0x0002
...
@@ -20,4 +20,4 @@ struct pollfd {
...
@@ -20,4 +20,4 @@ struct pollfd {
short
revents
;
short
revents
;
};
};
#endif
#endif
/* _ASM_POWERPC_POLL_H */
include/asm-powerpc/sembuf.h
View file @
3aed77bc
#ifndef _POWERPC_SEMBUF_H
#ifndef _
ASM_
POWERPC_SEMBUF_H
#define _POWERPC_SEMBUF_H
#define _
ASM_
POWERPC_SEMBUF_H
/*
/*
* This program is free software; you can redistribute it and/or
* This program is free software; you can redistribute it and/or
...
@@ -33,4 +33,4 @@ struct semid64_ds {
...
@@ -33,4 +33,4 @@ struct semid64_ds {
unsigned
long
__unused4
;
unsigned
long
__unused4
;
};
};
#endif
/*
_POWERPC_SEMBUF_H */
#endif
/* _ASM
_POWERPC_SEMBUF_H */
include/asm-powerpc/setup.h
0 → 100644
View file @
3aed77bc
#ifndef _ASM_POWERPC_SETUP_H
#define _ASM_POWERPC_SETUP_H
#ifdef __KERNEL__
#define COMMAND_LINE_SIZE 512
#endif
/* __KERNEL__ */
#endif
/* _ASM_POWERPC_SETUP_H */
include/asm-powerpc/shmbuf.h
View file @
3aed77bc
#ifndef _POWERPC_SHMBUF_H
#ifndef _
ASM_
POWERPC_SHMBUF_H
#define _POWERPC_SHMBUF_H
#define _
ASM_
POWERPC_SHMBUF_H
/*
/*
* This program is free software; you can redistribute it and/or
* This program is free software; you can redistribute it and/or
...
@@ -21,19 +21,19 @@
...
@@ -21,19 +21,19 @@
struct
shmid64_ds
{
struct
shmid64_ds
{
struct
ipc64_perm
shm_perm
;
/* operation perms */
struct
ipc64_perm
shm_perm
;
/* operation perms */
#ifndef __power64__
#ifndef __power
pc
64__
unsigned
long
__unused1
;
unsigned
long
__unused1
;
#endif
#endif
__kernel_time_t
shm_atime
;
/* last attach time */
__kernel_time_t
shm_atime
;
/* last attach time */
#ifndef __power64__
#ifndef __power
pc
64__
unsigned
long
__unused2
;
unsigned
long
__unused2
;
#endif
#endif
__kernel_time_t
shm_dtime
;
/* last detach time */
__kernel_time_t
shm_dtime
;
/* last detach time */
#ifndef __power64__
#ifndef __power
pc
64__
unsigned
long
__unused3
;
unsigned
long
__unused3
;
#endif
#endif
__kernel_time_t
shm_ctime
;
/* last change time */
__kernel_time_t
shm_ctime
;
/* last change time */
#ifndef __power64__
#ifndef __power
pc
64__
unsigned
long
__unused4
;
unsigned
long
__unused4
;
#endif
#endif
size_t
shm_segsz
;
/* size of segment (bytes) */
size_t
shm_segsz
;
/* size of segment (bytes) */
...
@@ -56,4 +56,4 @@ struct shminfo64 {
...
@@ -56,4 +56,4 @@ struct shminfo64 {
unsigned
long
__unused4
;
unsigned
long
__unused4
;
};
};
#endif
/*
_POWERPC_SHMBUF_H */
#endif
/* _ASM
_POWERPC_SHMBUF_H */
include/asm-powerpc/shmparam.h
View file @
3aed77bc
#ifndef _
P
PC_SHMPARAM_H
#ifndef _
ASM_POWER
PC_SHMPARAM_H
#define _
P
PC_SHMPARAM_H
#define _
ASM_POWER
PC_SHMPARAM_H
#define SHMLBA PAGE_SIZE
/* attach addr a multiple of this */
#define SHMLBA PAGE_SIZE
/* attach addr a multiple of this */
#endif
/* _P
PC_SHMPARAM_H */
#endif
/* _ASM_POWER
PC_SHMPARAM_H */
include/asm-powerpc/siginfo.h
View file @
3aed77bc
#ifndef _POWERPC_SIGINFO_H
#ifndef _
ASM_
POWERPC_SIGINFO_H
#define _POWERPC_SIGINFO_H
#define _
ASM_
POWERPC_SIGINFO_H
/*
/*
* This program is free software; you can redistribute it and/or
* This program is free software; you can redistribute it and/or
...
@@ -15,4 +15,4 @@
...
@@ -15,4 +15,4 @@
#include <asm-generic/siginfo.h>
#include <asm-generic/siginfo.h>
#endif
/*
_POWERPC_SIGINFO_H */
#endif
/* _ASM
_POWERPC_SIGINFO_H */
include/asm-powerpc/socket.h
View file @
3aed77bc
#ifndef _POWERPC_SOCKET_H
#ifndef _
ASM_
POWERPC_SOCKET_H
#define _POWERPC_SOCKET_H
#define _
ASM_
POWERPC_SOCKET_H
/*
/*
* This program is free software; you can redistribute it and/or
* This program is free software; you can redistribute it and/or
...
@@ -56,4 +56,4 @@
...
@@ -56,4 +56,4 @@
#define SO_PEERSEC 31
#define SO_PEERSEC 31
#endif
/*
_POWERPC_SOCKET_H */
#endif
/* _ASM
_POWERPC_SOCKET_H */
include/asm-powerpc/sockios.h
View file @
3aed77bc
#ifndef _POWERPC_SOCKIOS_H
#ifndef _
ASM_
POWERPC_SOCKIOS_H
#define _POWERPC_SOCKIOS_H
#define _
ASM_
POWERPC_SOCKIOS_H
/*
/*
* This program is free software; you can redistribute it and/or
* This program is free software; you can redistribute it and/or
...
@@ -16,4 +16,4 @@
...
@@ -16,4 +16,4 @@
#define SIOCATMARK 0x8905
#define SIOCATMARK 0x8905
#define SIOCGSTAMP 0x8906
/* Get stamp */
#define SIOCGSTAMP 0x8906
/* Get stamp */
#endif
/*
_POWERPC_SOCKIOS_H */
#endif
/* _ASM
_POWERPC_SOCKIOS_H */
include/asm-powerpc/string.h
View file @
3aed77bc
#ifndef _
PPC_STRING_H_
#ifndef _
ASM_POWERPC_STRING_H
#define _
PPC_STRING_H_
#define _
ASM_POWERPC_STRING_H
#ifdef __KERNEL__
#ifdef __KERNEL__
...
@@ -29,4 +29,4 @@ extern void * memchr(const void *,int,__kernel_size_t);
...
@@ -29,4 +29,4 @@ extern void * memchr(const void *,int,__kernel_size_t);
#endif
/* __KERNEL__ */
#endif
/* __KERNEL__ */
#endif
#endif
/* _ASM_POWERPC_STRING_H */
include/asm-powerpc/termbits.h
View file @
3aed77bc
#ifndef _POWERPC_TERMBITS_H
#ifndef _
ASM_
POWERPC_TERMBITS_H
#define _POWERPC_TERMBITS_H
#define _
ASM_
POWERPC_TERMBITS_H
/*
/*
* This program is free software; you can redistribute it and/or
* This program is free software; you can redistribute it and/or
...
@@ -188,4 +188,4 @@ struct termios {
...
@@ -188,4 +188,4 @@ struct termios {
#define TCSADRAIN 1
#define TCSADRAIN 1
#define TCSAFLUSH 2
#define TCSAFLUSH 2
#endif
/*
_POWERPC_TERMBITS_H */
#endif
/* _ASM
_POWERPC_TERMBITS_H */
include/asm-powerpc/termios.h
View file @
3aed77bc
#ifndef _POWERPC_TERMIOS_H
#ifndef _
ASM_
POWERPC_TERMIOS_H
#define _POWERPC_TERMIOS_H
#define _
ASM_
POWERPC_TERMIOS_H
/*
/*
* Liberally adapted from alpha/termios.h. In particular, the c_cc[]
* Liberally adapted from alpha/termios.h. In particular, the c_cc[]
...
@@ -233,4 +233,4 @@ struct termio {
...
@@ -233,4 +233,4 @@ struct termio {
#endif
/* __KERNEL__ */
#endif
/* __KERNEL__ */
#endif
/* _POWERPC_TERMIOS_H */
#endif
/* _
ASM_
POWERPC_TERMIOS_H */
include/asm-ppc/timex.h
→
include/asm-p
ower
pc/timex.h
View file @
3aed77bc
#ifndef _ASM_POWERPC_TIMEX_H
#define _ASM_POWERPC_TIMEX_H
#ifdef __KERNEL__
/*
/*
* include/asm-ppc/timex.h
* PowerPC architecture timex specifications
*
* ppc architecture timex specifications
*/
*/
#ifdef __KERNEL__
#ifndef _ASMppc_TIMEX_H
#define _ASMppc_TIMEX_H
#include <linux/config.h>
#include <linux/config.h>
#include <asm/cputable.h>
#include <asm/cputable.h>
...
@@ -14,14 +14,21 @@
...
@@ -14,14 +14,21 @@
typedef
unsigned
long
cycles_t
;
typedef
unsigned
long
cycles_t
;
/*
static
inline
cycles_t
get_cycles
(
void
)
{
cycles_t
ret
;
#ifdef __powerpc64__
__asm__
__volatile__
(
"mftb %0"
:
"=r"
(
ret
)
:
);
#else
/*
* For the "cycle" counter we use the timebase lower half.
* For the "cycle" counter we use the timebase lower half.
* Currently only used on SMP.
* Currently only used on SMP.
*/
*/
static
inline
cycles_t
get_cycles
(
void
)
ret
=
0
;
{
cycles_t
ret
=
0
;
__asm__
__volatile__
(
__asm__
__volatile__
(
"98: mftb %0
\n
"
"98: mftb %0
\n
"
...
@@ -33,8 +40,10 @@ static inline cycles_t get_cycles(void)
...
@@ -33,8 +40,10 @@ static inline cycles_t get_cycles(void)
" .long 99b
\n
"
" .long 99b
\n
"
".previous"
".previous"
:
"=r"
(
ret
)
:
"i"
(
CPU_FTR_601
));
:
"=r"
(
ret
)
:
"i"
(
CPU_FTR_601
));
#endif
return
ret
;
return
ret
;
}
}
#endif
#endif
/* __KERNEL__ */
#endif
/* __KERNEL__ */
#endif
/* _ASM_POWERPC_TIMEX_H */
include/asm-p
pc64
/topology.h
→
include/asm-p
owerpc
/topology.h
View file @
3aed77bc
#ifndef _ASM_P
PC64
_TOPOLOGY_H
#ifndef _ASM_P
OWERPC
_TOPOLOGY_H
#define _ASM_P
PC64
_TOPOLOGY_H
#define _ASM_P
OWERPC
_TOPOLOGY_H
#include <linux/config.h>
#include <linux/config.h>
#include <asm/mmzone.h>
#ifdef CONFIG_NUMA
#ifdef CONFIG_NUMA
#include <asm/mmzone.h>
static
inline
int
cpu_to_node
(
int
cpu
)
static
inline
int
cpu_to_node
(
int
cpu
)
{
{
int
node
;
int
node
;
...
@@ -66,4 +67,4 @@ static inline int node_to_first_cpu(int node)
...
@@ -66,4 +67,4 @@ static inline int node_to_first_cpu(int node)
#endif
/* CONFIG_NUMA */
#endif
/* CONFIG_NUMA */
#endif
/* _ASM_PPC64
_TOPOLOGY_H */
#endif
/* _ASM_POWERPC
_TOPOLOGY_H */
include/asm-powerpc/unaligned.h
View file @
3aed77bc
#ifndef _ASM_POWERPC_UNALIGNED_H
#define _ASM_POWERPC_UNALIGNED_H
#ifdef __KERNEL__
#ifdef __KERNEL__
#ifndef __PPC_UNALIGNED_H
#define __PPC_UNALIGNED_H
/*
/*
* The PowerPC can do unaligned accesses itself in big endian mode.
* The PowerPC can do unaligned accesses itself in big endian mode.
...
@@ -14,5 +15,5 @@
...
@@ -14,5 +15,5 @@
#define put_unaligned(val, ptr) ((void)( *(ptr) = (val) ))
#define put_unaligned(val, ptr) ((void)( *(ptr) = (val) ))
#endif
#endif
/* __KERNEL__ */
#endif
/* __KERNEL__ */
#endif
/* _ASM_POWERPC_UNALIGNED_H */
include/asm-ppc/user.h
→
include/asm-p
ower
pc/user.h
View file @
3aed77bc
#ifdef __KERNEL__
#ifndef _ASM_POWERPC_USER_H
#ifndef _PPC_USER_H
#define _ASM_POWERPC_USER_H
#define _PPC_USER_H
/* Adapted from <asm-alpha/user.h> */
#ifdef __KERNEL__
#include <
linux
/ptrace.h>
#include <
asm
/ptrace.h>
#include <asm/page.h>
#include <asm/page.h>
/*
/*
* Adapted from <asm-alpha/user.h>
*
* Core file format: The core file is written in such a way that gdb
* Core file format: The core file is written in such a way that gdb
* can understand it and provide useful information to the user (under
* can understand it and provide useful information to the user (under
* linux we use the `trad-core' bfd, NOT the osf-core). The file contents
* linux we use the `trad-core' bfd, NOT the osf-core). The file contents
...
@@ -50,5 +51,5 @@ struct user {
...
@@ -50,5 +51,5 @@ struct user {
#define HOST_DATA_START_ADDR (u.start_data)
#define HOST_DATA_START_ADDR (u.start_data)
#define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG)
#define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG)
#endif
/* _PPC_USER_H */
#endif
/* __KERNEL__ */
#endif
/* __KERNEL__ */
#endif
/* _ASM_POWERPC_USER_H */
include/asm-ppc/setup.h
deleted
100644 → 0
View file @
0b968d23
#ifdef __KERNEL__
#ifndef _PPC_SETUP_H
#define _PPC_SETUP_H
#define m68k_num_memory num_memory
#define m68k_memory memory
#include <asm-m68k/setup.h>
/* We have a bigger command line buffer. */
#undef COMMAND_LINE_SIZE
#define COMMAND_LINE_SIZE 512
#endif
/* _PPC_SETUP_H */
#endif
/* __KERNEL__ */
include/asm-ppc/topology.h
deleted
100644 → 0
View file @
0b968d23
#ifndef _ASM_PPC_TOPOLOGY_H
#define _ASM_PPC_TOPOLOGY_H
#include <asm-generic/topology.h>
#endif
/* _ASM_PPC_TOPOLOGY_H */
include/asm-ppc64/msgbuf.h
deleted
100644 → 0
View file @
0b968d23
#ifndef _PPC64_MSGBUF_H
#define _PPC64_MSGBUF_H
/*
* The msqid64_ds structure for the PPC architecture.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*/
struct
msqid64_ds
{
struct
ipc64_perm
msg_perm
;
__kernel_time_t
msg_stime
;
/* last msgsnd time */
__kernel_time_t
msg_rtime
;
/* last msgrcv time */
__kernel_time_t
msg_ctime
;
/* last change time */
unsigned
long
msg_cbytes
;
/* current number of bytes on queue */
unsigned
long
msg_qnum
;
/* number of messages in queue */
unsigned
long
msg_qbytes
;
/* max number of bytes on queue */
__kernel_pid_t
msg_lspid
;
/* pid of last msgsnd */
__kernel_pid_t
msg_lrpid
;
/* last receive pid */
unsigned
long
__unused1
;
unsigned
long
__unused2
;
};
#endif
/* _PPC64_MSGBUF_H */
include/asm-ppc64/param.h
deleted
100644 → 0
View file @
0b968d23
#ifndef _ASM_PPC64_PARAM_H
#define _ASM_PPC64_PARAM_H
#include <linux/config.h>
/*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*/
#ifdef __KERNEL__
# define HZ CONFIG_HZ
/* Internal kernel timer frequency */
# define USER_HZ 100
/* .. some user interfaces are in "ticks" */
# define CLOCKS_PER_SEC (USER_HZ)
/* like times() */
#endif
#ifndef HZ
#define HZ 100
#endif
#define EXEC_PAGESIZE 4096
#ifndef NOGROUP
#define NOGROUP (-1)
#endif
#define MAXHOSTNAMELEN 64
/* max length of hostname */
#endif
/* _ASM_PPC64_PARAM_H */
include/asm-ppc64/pci-bridge.h
View file @
3aed77bc
...
@@ -48,18 +48,51 @@ struct pci_controller {
...
@@ -48,18 +48,51 @@ struct pci_controller {
unsigned
long
dma_window_size
;
unsigned
long
dma_window_size
;
};
};
/*
* PCI stuff, for nodes representing PCI devices, pointed to
* by device_node->data.
*/
struct
pci_controller
;
struct
iommu_table
;
struct
pci_dn
{
int
busno
;
/* for pci devices */
int
bussubno
;
/* for pci devices */
int
devfn
;
/* for pci devices */
int
eeh_mode
;
/* See eeh.h for possible EEH_MODEs */
int
eeh_config_addr
;
int
eeh_capable
;
/* from firmware */
int
eeh_check_count
;
/* # times driver ignored error */
int
eeh_freeze_count
;
/* # times this device froze up. */
int
eeh_is_bridge
;
/* device is pci-to-pci bridge */
int
pci_ext_config_space
;
/* for pci devices */
struct
pci_controller
*
phb
;
/* for pci devices */
struct
iommu_table
*
iommu_table
;
/* for phb's or bridges */
struct
pci_dev
*
pcidev
;
/* back-pointer to the pci device */
struct
device_node
*
node
;
/* back-pointer to the device_node */
u32
config_space
[
16
];
/* saved PCI config space */
};
/* Get the pointer to a device_node's pci_dn */
#define PCI_DN(dn) ((struct pci_dn *) (dn)->data)
struct
device_node
*
fetch_dev_dn
(
struct
pci_dev
*
dev
);
struct
device_node
*
fetch_dev_dn
(
struct
pci_dev
*
dev
);
/* Get a device_node from a pci_dev. This code must be fast except in the case
/* Get a device_node from a pci_dev. This code must be fast except
* where the sysdata is incorrect and needs to be fixed up (hopefully just once)
* in the case where the sysdata is incorrect and needs to be fixed
* up (this will only happen once).
* In this case the sysdata will have been inherited from a PCI host
* bridge or a PCI-PCI bridge further up the tree, so it will point
* to a valid struct pci_dn, just not the one we want.
*/
*/
static
inline
struct
device_node
*
pci_device_to_OF_node
(
struct
pci_dev
*
dev
)
static
inline
struct
device_node
*
pci_device_to_OF_node
(
struct
pci_dev
*
dev
)
{
{
struct
device_node
*
dn
=
dev
->
sysdata
;
struct
device_node
*
dn
=
dev
->
sysdata
;
struct
pci_dn
*
pdn
=
dn
->
data
;
if
(
dn
->
devfn
==
dev
->
devfn
&&
dn
->
busno
==
dev
->
bus
->
number
)
if
(
pdn
&&
pdn
->
devfn
==
dev
->
devfn
&&
p
dn
->
busno
==
dev
->
bus
->
number
)
return
dn
;
/* fast path. sysdata is good */
return
dn
;
/* fast path. sysdata is good */
else
return
fetch_dev_dn
(
dev
);
return
fetch_dev_dn
(
dev
);
}
}
...
@@ -83,7 +116,7 @@ static inline struct pci_controller *pci_bus_to_host(struct pci_bus *bus)
...
@@ -83,7 +116,7 @@ static inline struct pci_controller *pci_bus_to_host(struct pci_bus *bus)
struct
device_node
*
busdn
=
bus
->
sysdata
;
struct
device_node
*
busdn
=
bus
->
sysdata
;
BUG_ON
(
busdn
==
NULL
);
BUG_ON
(
busdn
==
NULL
);
return
busdn
->
phb
;
return
PCI_DN
(
busdn
)
->
phb
;
}
}
#endif
#endif
...
...
include/asm-ppc64/prom.h
View file @
3aed77bc
...
@@ -116,14 +116,6 @@ struct property {
...
@@ -116,14 +116,6 @@ struct property {
struct
property
*
next
;
struct
property
*
next
;
};
};
/* NOTE: the device_node contains PCI specific info for pci devices.
* This perhaps could be hung off the device_node with another struct,
* but for now it is directly in the node. The phb ptr is a good
* indication of a real PCI node. Other nodes leave these fields zeroed.
*/
struct
pci_controller
;
struct
iommu_table
;
struct
device_node
{
struct
device_node
{
char
*
name
;
char
*
name
;
char
*
type
;
char
*
type
;
...
@@ -135,16 +127,6 @@ struct device_node {
...
@@ -135,16 +127,6 @@ struct device_node {
struct
interrupt_info
*
intrs
;
struct
interrupt_info
*
intrs
;
char
*
full_name
;
char
*
full_name
;
/* PCI stuff probably doesn't belong here */
int
busno
;
/* for pci devices */
int
bussubno
;
/* for pci devices */
int
devfn
;
/* for pci devices */
int
eeh_mode
;
/* See eeh.h for possible EEH_MODEs */
int
eeh_config_addr
;
int
pci_ext_config_space
;
/* for pci devices */
struct
pci_controller
*
phb
;
/* for pci devices */
struct
iommu_table
*
iommu_table
;
/* for phb's or bridges */
struct
property
*
properties
;
struct
property
*
properties
;
struct
device_node
*
parent
;
struct
device_node
*
parent
;
struct
device_node
*
child
;
struct
device_node
*
child
;
...
@@ -154,6 +136,7 @@ struct device_node {
...
@@ -154,6 +136,7 @@ struct device_node {
struct
proc_dir_entry
*
pde
;
/* this node's proc directory */
struct
proc_dir_entry
*
pde
;
/* this node's proc directory */
struct
kref
kref
;
struct
kref
kref
;
unsigned
long
_flags
;
unsigned
long
_flags
;
void
*
data
;
};
};
extern
struct
device_node
*
of_chosen
;
extern
struct
device_node
*
of_chosen
;
...
...
include/asm-ppc64/segment.h
deleted
100644 → 0
View file @
0b968d23
#ifndef __PPC64_SEGMENT_H
#define __PPC64_SEGMENT_H
/* Only here because we have some old header files that expect it.. */
#endif
/* __PPC64_SEGMENT_H */
include/asm-ppc64/setup.h
deleted
100644 → 0
View file @
0b968d23
#ifndef _PPC_SETUP_H
#define _PPC_SETUP_H
#define COMMAND_LINE_SIZE 512
#endif
/* _PPC_SETUP_H */
include/asm-ppc64/timex.h
deleted
100644 → 0
View file @
0b968d23
/*
* linux/include/asm-ppc/timex.h
*
* PPC64 architecture timex specifications
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*/
#ifndef _ASMPPC64_TIMEX_H
#define _ASMPPC64_TIMEX_H
#define CLOCK_TICK_RATE 1193180
/* Underlying HZ */
typedef
unsigned
long
cycles_t
;
static
inline
cycles_t
get_cycles
(
void
)
{
cycles_t
ret
;
__asm__
__volatile__
(
"mftb %0"
:
"=r"
(
ret
)
:
);
return
ret
;
}
#endif
include/asm-ppc64/user.h
deleted
100644 → 0
View file @
0b968d23
#ifndef _PPC_USER_H
#define _PPC_USER_H
/* Adapted from <asm-alpha/user.h>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*/
#include <asm/ptrace.h>
#include <asm/page.h>
/*
* Core file format: The core file is written in such a way that gdb
* can understand it and provide useful information to the user (under
* linux we use the `trad-core' bfd, NOT the osf-core). The file contents
* are as follows:
*
* upage: 1 page consisting of a user struct that tells gdb
* what is present in the file. Directly after this is a
* copy of the task_struct, which is currently not used by gdb,
* but it may come in handy at some point. All of the registers
* are stored as part of the upage. The upage should always be
* only one page long.
* data: The data segment follows next. We use current->end_text to
* current->brk to pick up all of the user variables, plus any memory
* that may have been sbrk'ed. No attempt is made to determine if a
* page is demand-zero or if a page is totally unused, we just cover
* the entire range. All of the addresses are rounded in such a way
* that an integral number of pages is written.
* stack: We need the stack information in order to get a meaningful
* backtrace. We need to write the data from usp to
* current->start_stack, so we round each of these in order to be able
* to write an integer number of pages.
*/
struct
user
{
struct
pt_regs
regs
;
/* entire machine state */
size_t
u_tsize
;
/* text size (pages) */
size_t
u_dsize
;
/* data size (pages) */
size_t
u_ssize
;
/* stack size (pages) */
unsigned
long
start_code
;
/* text starting address */
unsigned
long
start_data
;
/* data starting address */
unsigned
long
start_stack
;
/* stack starting address */
long
int
signal
;
/* signal causing core dump */
struct
regs
*
u_ar0
;
/* help gdb find registers */
unsigned
long
magic
;
/* identifies a core file */
char
u_comm
[
32
];
/* user command name */
};
#define NBPG PAGE_SIZE
#define UPAGES 1
#define HOST_TEXT_START_ADDR (u.start_code)
#define HOST_DATA_START_ADDR (u.start_data)
#define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG)
#endif
/* _PPC_USER_H */
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