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
Hide 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 @@
#include <asm/ipc.h>
#include <asm/semaphore.h>
void
check_bugs
(
void
)
{
}
/*
* 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/
boot
:=
arch
/ppc64/boot
boottarget-$(CONFIG_PPC_PSERIES)
:=
zImage zImage.initrd
boottarget-$(CONFIG_PPC_MAPLE)
:=
zImage zImage.initrd
boottarget-$(CONFIG_PPC_ISERIES)
:=
vmlinux.sminitrd vmlinux.initrd vmlinux.sm
boottarget-$(CONFIG_PPC_BPA)
:=
zImage zImage.initrd
$(boottarget-y)
:
vmlinux
boottargets-$(CONFIG_PPC_PSERIES)
+=
zImage zImage.initrd
boottargets-$(CONFIG_PPC_PMAC)
+=
zImage.vmode zImage.initrd.vmode
boottargets-$(CONFIG_PPC_MAPLE)
+=
zImage zImage.initrd
boottargets-$(CONFIG_PPC_ISERIES)
+=
vmlinux.sminitrd vmlinux.initrd vmlinux.sm
boottargets-$(CONFIG_PPC_BPA)
+=
zImage zImage.initrd
$(boottargets-y)
:
vmlinux
$(Q)$(MAKE)
$(build)
=
$(boot)
$(boot)
/
$@
bootimage-$(CONFIG_PPC_PSERIES)
:=
$(boot)
/zImage
...
...
@@ -131,10 +132,12 @@ include3/asm:
$(Q)
ln
-fsn
$(srctree)
/include/asm-powerpc include3/asm
define
archhelp
echo
'* zImage - Compressed kernel image (arch/$(ARCH)/boot/zImage)'
echo
' zImage.initrd- Compressed kernel image with initrd attached,'
echo
' sourced from arch/$(ARCH)/boot/ramdisk.image.gz'
echo
' (arch/$(ARCH)/boot/zImage.initrd)'
echo
' zImage.vmode - Compressed kernel image (arch/$(ARCH)/boot/zImage.vmode)'
echo
' zImage.initrd.vmode - Compressed kernel image with initrd attached,'
echo
' sourced from arch/$(ARCH)/boot/ramdisk.image.gz'
echo
' (arch/$(ARCH)/boot/zImage.initrd.vmode)'
echo
' zImage - zImage for pSeries machines'
echo
' zImage.initrd - zImage with initrd for pSeries machines'
endef
CLEAN_FILES
+=
include/asm-ppc64/offsets.h
arch/ppc64/boot/Makefile
View file @
3aed77bc
...
...
@@ -37,6 +37,9 @@ quiet_cmd_bootcc = BOOTCC $@
quiet_cmd_bootas
=
BOOTAS
$@
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
$(
call
if_changed_dep,bootcc
)
$(patsubst %.S,%.o, $(filter %.S, $(src-boot)))
:
%.o: %.S
...
...
@@ -53,7 +56,7 @@ src-sec = $(foreach section, $(1), $(patsubst %,$(obj)/kernel-%.c, $(section)))
gz-sec
=
$(
foreach
section,
$(1)
,
$(
patsubst
%,
$(obj)
/kernel-%.gz,
$(section)
))
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
src-sec,
$(required)
$(initrd)
))
\
$(
patsubst
$(obj)
/%,%,
$(
call
gz-sec,
$(required)
$(initrd)
))
\
...
...
@@ -63,7 +66,7 @@ extra-y := initrd.o
quiet_cmd_ramdisk
=
RAMDISK
$@
cmd_ramdisk
=
$(obj)
/addRamDisk
$(obj)
/ramdisk.image.gz
$<
$@
quiet_cmd_stripvm
=
STRIP
$@
quiet_cmd_stripvm
=
STRIP
$@
cmd_stripvm
=
$(STRIP)
-s
$<
-o
$@
vmlinux.strip
:
vmlinux FORCE
...
...
@@ -71,12 +74,20 @@ vmlinux.strip: vmlinux FORCE
$(obj)/vmlinux.initrd
:
vmlinux.strip $(obj)/addRamDisk $(obj)/ramdisk.image.gz FORCE
$(
call
if_changed,ramdisk
)
addsection
=
$(CROSS32OBJCOPY)
$(1)
\
--add-section
=
.kernel:
$(
strip
$(
patsubst
$(obj)
/kernel-%.o,%,
$(1)
))
=
$(
patsubst
%.o,%.gz,
$(1)
)
\
--set-section-flags
=
.kernel:
$(
strip
$(
patsubst
$(obj)
/kernel-%.o,%,
$(1)
))
=
$(OBJCOPYFLAGS)
quiet_cmd_addsection
=
ADDSEC
$@
cmd_addsection
=
$(CROSS32OBJCOPY)
$@
\
--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
$@
cmd_addnote
=
$(
CROSS32LD)
$(BOOTLFLAGS)
-o
$@
$
(
obj-boot
)
&&
$(
obj)
/addnote
$@
quiet_cmd_addnote
=
ADDNOTE
$@
cmd_addnote
=
$(obj)
/addnote
$@
$(call gz-sec, $(required))
:
$(obj)/kernel-%.gz: % FORCE
$(
call
if_changed,gzip
)
...
...
@@ -85,28 +96,30 @@ $(obj)/kernel-initrd.gz: $(obj)/ramdisk.image.gz
cp
-f
$(obj)
/ramdisk.image.gz
$@
$(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
if_changed_dep,bootcc
)
$(
call
addsection,
$@
)
$(
call
cmd,addsection
)
$(obj)/zImage.vmode
:
obj-boot += $(call obj-sec
,
$(required))
$(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-boot += $(call obj-sec
,
$(required))
$(obj)/zImage
:
$(call obj-sec
,
$(required)) $(obj-boot) $(obj)/addnote FORCE
$(obj)/zImage
:
$(obj)/zImage.vmode $(obj)/addnote FORCE
@
cp
-f
$<
$@
$(
call
if_changed,addnote
)
$(obj)/zImage.initrd
:
obj-boot += $(call obj-sec
,
$(required) $(initrd))
$(obj)/zImage.initrd
:
$(call obj-sec
,
$(required) $(initrd)) $(obj-boot) $(obj)/addnote FORCE
$(obj)/zImage.initrd
:
$(obj)/zImage.initrd.vmode $(obj)/addnote FORCE
@
cp
-f
$<
$@
$(
call
if_changed,addnote
)
$(obj)/imagesize.c
:
vmlinux.strip
@
echo
Generating
$@
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
$(
call
cmd,imagesize
)
install
:
$(CONFIGURE) $(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);
/* Value picked to match that used by yaboot */
#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
*
begin_avail
,
*
end_avail
;
...
...
@@ -32,6 +33,7 @@ static unsigned int heap_use;
static
unsigned
int
heap_max
;
extern
char
_start
[];
extern
char
_end
[];
extern
char
_vmlinux_start
[];
extern
char
_vmlinux_end
[];
extern
char
_initrd_start
[];
...
...
@@ -58,13 +60,13 @@ typedef void (*kernel_entry_t)( unsigned long,
#undef DEBUG
static
unsigned
long
claim_base
=
PROG_START
;
static
unsigned
long
claim_base
;
static
unsigned
long
try_claim
(
unsigned
long
size
)
{
unsigned
long
addr
=
0
;
for
(;
claim_base
<
RAM_END
;
claim_base
+=
0x100000
)
{
for
(;
claim_base
<
RAM_END
;
claim_base
+=
ONE_MB
)
{
#ifdef DEBUG
printf
(
" trying: 0x%08lx
\n\r
"
,
claim_base
);
#endif
...
...
@@ -95,7 +97,26 @@ void start(unsigned long a1, unsigned long a2, void *promptr)
if
(
getprop
(
chosen_handle
,
"stdin"
,
&
stdin
,
sizeof
(
stdin
))
!=
4
)
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
...
...
@@ -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
* 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
);
vmlinux
.
addr
=
try_claim
(
vmlinux_memsize
);
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)
}
#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
)
{
out_be64
(
&
__get_cpu_var
(
iic
).
regs
->
prio
,
0xff
);
...
...
@@ -212,18 +224,20 @@ void iic_setup_cpu(void)
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
)
{
smp_message_recv
(
irq
-
IIC_IPI_OFFSET
,
regs
);
smp_message_recv
(
iic_irq_to_ipi
(
irq
),
regs
);
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
* disabled */
get_irq_desc
(
irq
)
->
handler
=
&
iic_pic
;
...
...
@@ -233,10 +247,10 @@ static void iic_request_ipi(int irq, const char *name)
void
iic_request_IPIs
(
void
)
{
iic_request_ipi
(
IIC_IPI_OFFSET
+
PPC_MSG_CALL_FUNCTION
,
"IPI-call"
);
iic_request_ipi
(
IIC_IPI_OFFSET
+
PPC_MSG_RESCHEDULE
,
"IPI-resched"
);
iic_request_ipi
(
PPC_MSG_CALL_FUNCTION
,
"IPI-call"
);
iic_request_ipi
(
PPC_MSG_RESCHEDULE
,
"IPI-resched"
);
#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_SMP */
...
...
arch/ppc64/kernel/eeh.c
View file @
3aed77bc
...
...
@@ -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
)
{
struct
device_node
*
dn
;
struct
pci_dn
*
pdn
;
int
i
;
int
inserted
=
0
;
...
...
@@ -265,8 +266,9 @@ static void __pci_addr_cache_insert_device(struct pci_dev *dev)
}
/* Skip any devices for which EEH is not enabled. */
if
(
!
(
dn
->
eeh_mode
&
EEH_MODE_SUPPORTED
)
||
dn
->
eeh_mode
&
EEH_MODE_NOCHECK
)
{
pdn
=
dn
->
data
;
if
(
!
(
pdn
->
eeh_mode
&
EEH_MODE_SUPPORTED
)
||
pdn
->
eeh_mode
&
EEH_MODE_NOCHECK
)
{
#ifdef DEBUG
printk
(
KERN_INFO
"PCI: skip building address cache for=%s
\n
"
,
pci_name
(
dev
));
...
...
@@ -415,6 +417,7 @@ int eeh_unregister_notifier(struct notifier_block *nb)
static
int
read_slot_reset_state
(
struct
device_node
*
dn
,
int
rets
[])
{
int
token
,
outputs
;
struct
pci_dn
*
pdn
=
dn
->
data
;
if
(
ibm_read_slot_reset_state2
!=
RTAS_UNKNOWN_SERVICE
)
{
token
=
ibm_read_slot_reset_state2
;
...
...
@@ -424,8 +427,8 @@ static int read_slot_reset_state(struct device_node *dn, int rets[])
outputs
=
3
;
}
return
rtas_call
(
token
,
3
,
outputs
,
rets
,
dn
->
eeh_config_addr
,
BUID_HI
(
dn
->
phb
->
buid
),
BUID_LO
(
dn
->
phb
->
buid
));
return
rtas_call
(
token
,
3
,
outputs
,
rets
,
p
dn
->
eeh_config_addr
,
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)
unsigned
long
flags
;
int
rc
,
reset_state
;
struct
eeh_event
*
event
;
struct
pci_dn
*
pdn
;
__get_cpu_var
(
total_mmio_ffs
)
++
;
...
...
@@ -542,14 +546,15 @@ int eeh_dn_check_failure(struct device_node *dn, struct pci_dev *dev)
if
(
!
dn
)
return
0
;
pdn
=
dn
->
data
;
/* Access to IO BARs might get this far and still not want checking. */
if
(
!
(
dn
->
eeh_mode
&
EEH_MODE_SUPPORTED
)
||
dn
->
eeh_mode
&
EEH_MODE_NOCHECK
)
{
if
(
!
pdn
->
eeh_capable
||
!
(
p
dn
->
eeh_mode
&
EEH_MODE_SUPPORTED
)
||
p
dn
->
eeh_mode
&
EEH_MODE_NOCHECK
)
{
return
0
;
}
if
(
!
dn
->
eeh_config_addr
)
{
if
(
!
p
dn
->
eeh_config_addr
)
{
return
0
;
}
...
...
@@ -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
* 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
);
if
(
atomic_read
(
&
eeh_fail_count
)
>=
EEH_MAX_FAILS
)
{
/* re-read the slot reset state */
...
...
@@ -582,7 +587,7 @@ int eeh_dn_check_failure(struct device_node *dn, struct pci_dev *dev)
}
/* prevent repeated reports of this failure */
dn
->
eeh_mode
|=
EEH_MODE_ISOLATED
;
p
dn
->
eeh_mode
|=
EEH_MODE_ISOLATED
;
reset_state
=
rets
[
0
];
...
...
@@ -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
);
rc
=
rtas_call
(
ibm_slot_error_detail
,
8
,
1
,
NULL
,
dn
->
eeh_config_addr
,
BUID_HI
(
dn
->
phb
->
buid
),
BUID_LO
(
dn
->
phb
->
buid
),
NULL
,
0
,
8
,
1
,
NULL
,
p
dn
->
eeh_config_addr
,
BUID_HI
(
p
dn
->
phb
->
buid
),
BUID_LO
(
p
dn
->
phb
->
buid
),
NULL
,
0
,
virt_to_phys
(
slot_errbuf
),
eeh_error_buf_size
,
1
/* Temporary Error */
);
...
...
@@ -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
*
regs
;
int
enable
;
struct
pci_dn
*
pdn
=
dn
->
data
;
dn
->
eeh_mode
=
0
;
p
dn
->
eeh_mode
=
0
;
if
(
status
&&
strcmp
(
status
,
"ok"
)
!=
0
)
return
NULL
;
/* ignore devices with bad status */
...
...
@@ -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 */
if
(
dn
->
type
&&
!
strcmp
(
dn
->
type
,
"isa"
))
{
dn
->
eeh_mode
|=
EEH_MODE_NOCHECK
;
p
dn
->
eeh_mode
|=
EEH_MODE_NOCHECK
;
return
NULL
;
}
...
...
@@ -708,7 +714,7 @@ static void *early_enable_eeh(struct device_node *dn, void *data)
enable
=
0
;
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,
* 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)
EEH_ENABLE
);
if
(
ret
==
0
)
{
eeh_subsystem_enabled
=
1
;
dn
->
eeh_mode
|=
EEH_MODE_SUPPORTED
;
dn
->
eeh_config_addr
=
regs
[
0
];
p
dn
->
eeh_mode
|=
EEH_MODE_SUPPORTED
;
p
dn
->
eeh_config_addr
=
regs
[
0
];
#ifdef DEBUG
printk
(
KERN_DEBUG
"EEH: %s: eeh enabled
\n
"
,
dn
->
full_name
);
#endif
...
...
@@ -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
* 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. */
dn
->
eeh_mode
|=
EEH_MODE_SUPPORTED
;
dn
->
eeh_config_addr
=
dn
->
parent
->
eeh_config_addr
;
p
dn
->
eeh_mode
|=
EEH_MODE_SUPPORTED
;
pdn
->
eeh_config_addr
=
PCI_DN
(
dn
->
parent
)
->
eeh_config_addr
;
return
NULL
;
}
}
...
...
@@ -790,11 +797,13 @@ void __init eeh_init(void)
for
(
phb
=
of_find_node_by_name
(
NULL
,
"pci"
);
phb
;
phb
=
of_find_node_by_name
(
phb
,
"pci"
))
{
unsigned
long
buid
;
struct
pci_dn
*
pci
;
buid
=
get_phb_buid
(
phb
);
if
(
buid
==
0
)
if
(
buid
==
0
||
phb
->
data
==
NULL
)
continue
;
pci
=
phb
->
data
;
info
.
buid_lo
=
BUID_LO
(
buid
);
info
.
buid_hi
=
BUID_HI
(
buid
);
traverse_pci_devices
(
phb
,
early_enable_eeh
,
&
info
);
...
...
@@ -823,9 +832,9 @@ void eeh_add_device_early(struct device_node *dn)
struct
pci_controller
*
phb
;
struct
eeh_early_enable_info
info
;
if
(
!
dn
)
if
(
!
dn
||
!
dn
->
data
)
return
;
phb
=
dn
->
phb
;
phb
=
PCI_DN
(
dn
)
->
phb
;
if
(
NULL
==
phb
||
0
==
phb
->
buid
)
{
printk
(
KERN_WARNING
"EEH: Expected buid but found none
\n
"
);
return
;
...
...
arch/ppc64/kernel/iomap.c
View file @
3aed77bc
...
...
@@ -22,13 +22,23 @@ unsigned int fastcall ioread16(void __iomem *addr)
{
return
readw
(
addr
);
}
unsigned
int
fastcall
ioread16be
(
void
__iomem
*
addr
)
{
return
in_be16
(
addr
);
}
unsigned
int
fastcall
ioread32
(
void
__iomem
*
addr
)
{
return
readl
(
addr
);
}
unsigned
int
fastcall
ioread32be
(
void
__iomem
*
addr
)
{
return
in_be32
(
addr
);
}
EXPORT_SYMBOL
(
ioread8
);
EXPORT_SYMBOL
(
ioread16
);
EXPORT_SYMBOL
(
ioread16be
);
EXPORT_SYMBOL
(
ioread32
);
EXPORT_SYMBOL
(
ioread32be
);
void
fastcall
iowrite8
(
u8
val
,
void
__iomem
*
addr
)
{
...
...
@@ -38,13 +48,23 @@ void fastcall iowrite16(u16 val, void __iomem *addr)
{
writew
(
val
,
addr
);
}
void
fastcall
iowrite16be
(
u16
val
,
void
__iomem
*
addr
)
{
out_be16
(
addr
,
val
);
}
void
fastcall
iowrite32
(
u32
val
,
void
__iomem
*
addr
)
{
writel
(
val
,
addr
);
}
void
fastcall
iowrite32be
(
u32
val
,
void
__iomem
*
addr
)
{
out_be32
(
addr
,
val
);
}
EXPORT_SYMBOL
(
iowrite8
);
EXPORT_SYMBOL
(
iowrite16
);
EXPORT_SYMBOL
(
iowrite16be
);
EXPORT_SYMBOL
(
iowrite32
);
EXPORT_SYMBOL
(
iowrite32be
);
/*
* 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)
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
int
order
;
...
...
arch/ppc64/kernel/maple_pci.c
View file @
3aed77bc
...
...
@@ -447,9 +447,9 @@ void __init maple_pci_init(void)
*/
if
(
u3_agp
)
{
struct
device_node
*
np
=
u3_agp
->
arch_data
;
np
->
busno
=
0xf0
;
PCI_DN
(
np
)
->
busno
=
0xf0
;
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 */
...
...
arch/ppc64/kernel/misc.S
View file @
3aed77bc
...
...
@@ -1431,9 +1431,9 @@ _GLOBAL(sys_call_table)
.
llong
.
sys_ni_syscall
/*
195
-
32
bit
only
stat64
*/
.
llong
.
sys_ni_syscall
/*
32
bit
only
lstat64
*/
.
llong
.
sys_ni_syscall
/*
32
bit
only
fstat64
*/
.
llong
.
sys_
ni_syscall
/*
32
bit
only
pciconfig_read
*/
.
llong
.
sys_
ni_syscall
/*
32
bit
only
pciconfig_write
*/
.
llong
.
sys_
ni_syscall
/*
32
bit
only
pciconfig_iobase
*/
.
llong
.
sys_
pciconfig_read
.
llong
.
sys_
pciconfig_write
.
llong
.
sys_
pciconfig_iobase
/*
200
-
pciconfig_iobase
*/
.
llong
.
sys_ni_syscall
/*
reserved
for
MacOnLinux
*/
.
llong
.
sys_getdents64
.
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,
struct
iommu_table
*
tbl
,
unsigned
int
*
dma_window
)
{
tbl
->
it_busno
=
dn
->
bussubno
;
tbl
->
it_busno
=
PCI_DN
(
dn
)
->
bussubno
;
/* TODO: Parse field size properties properly. */
tbl
->
it_size
=
(((
unsigned
long
)
dma_window
[
4
]
<<
32
)
|
...
...
@@ -311,6 +311,7 @@ static void iommu_table_setparms_lpar(struct pci_controller *phb,
static
void
iommu_bus_setup_pSeries
(
struct
pci_bus
*
bus
)
{
struct
device_node
*
dn
,
*
pdn
;
struct
pci_dn
*
pci
;
struct
iommu_table
*
tbl
;
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)
*/
dn
=
pci_bus_to_OF_node
(
bus
);
pci
=
dn
->
data
;
if
(
!
bus
->
self
)
{
/* Root bus */
...
...
@@ -341,18 +343,18 @@ static void iommu_bus_setup_pSeries(struct pci_bus *bus)
* alltogether. This leaves 768MB for the window.
*/
DBG
(
"PHB has io-hole, reserving 256MB
\n
"
);
dn
->
phb
->
dma_window_size
=
3
<<
28
;
dn
->
phb
->
dma_window_base_cur
=
1
<<
28
;
pci
->
phb
->
dma_window_size
=
3
<<
28
;
pci
->
phb
->
dma_window_base_cur
=
1
<<
28
;
}
else
{
/* 1GB window by default */
dn
->
phb
->
dma_window_size
=
1
<<
30
;
dn
->
phb
->
dma_window_base_cur
=
0
;
pci
->
phb
->
dma_window_size
=
1
<<
30
;
pci
->
phb
->
dma_window_base_cur
=
0
;
}
tbl
=
kmalloc
(
sizeof
(
struct
iommu_table
),
GFP_KERNEL
);
iommu_table_setparms
(
dn
->
phb
,
dn
,
tbl
);
dn
->
iommu_table
=
iommu_init_table
(
tbl
);
iommu_table_setparms
(
pci
->
phb
,
dn
,
tbl
);
pci
->
iommu_table
=
iommu_init_table
(
tbl
);
}
else
{
/* Do a 128MB table at root. This is used for the IDE
* controller on some SMP-mode POWER4 machines. It
...
...
@@ -363,16 +365,16 @@ static void iommu_bus_setup_pSeries(struct pci_bus *bus)
* Allocate at offset 128MB to avoid having to deal
* with ISA holes; 128MB table for IDE is plenty.
*/
dn
->
phb
->
dma_window_size
=
1
<<
27
;
dn
->
phb
->
dma_window_base_cur
=
1
<<
27
;
pci
->
phb
->
dma_window_size
=
1
<<
27
;
pci
->
phb
->
dma_window_base_cur
=
1
<<
27
;
tbl
=
kmalloc
(
sizeof
(
struct
iommu_table
),
GFP_KERNEL
);
iommu_table_setparms
(
dn
->
phb
,
dn
,
tbl
);
dn
->
iommu_table
=
iommu_init_table
(
tbl
);
iommu_table_setparms
(
pci
->
phb
,
dn
,
tbl
);
pci
->
iommu_table
=
iommu_init_table
(
tbl
);
/* All child buses have 256MB tables */
dn
->
phb
->
dma_window_size
=
1
<<
28
;
pci
->
phb
->
dma_window_size
=
1
<<
28
;
}
}
else
{
pdn
=
pci_bus_to_OF_node
(
bus
->
parent
);
...
...
@@ -386,12 +388,12 @@ static void iommu_bus_setup_pSeries(struct pci_bus *bus)
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
{
/* 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)
{
struct
iommu_table
*
tbl
;
struct
device_node
*
dn
,
*
pdn
;
struct
pci_dn
*
ppci
;
unsigned
int
*
dma_window
=
NULL
;
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)
return
;
}
if
(
!
pdn
->
iommu_table
)
{
ppci
=
pdn
->
data
;
if
(
!
ppci
->
iommu_table
)
{
/* Bussubno hasn't been copied yet.
* 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
),
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
)
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)
*/
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
;
if
(
dn
)
{
mydn
->
iommu_table
=
dn
->
iommu_table
;
if
(
dn
&&
dn
->
data
)
{
PCI_DN
(
mydn
)
->
iommu_table
=
PCI_DN
(
dn
)
->
iommu_table
;
}
else
{
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
{
int
err
=
NOTIFY_OK
;
struct
device_node
*
np
=
node
;
struct
pci_dn
*
pci
=
np
->
data
;
switch
(
action
)
{
case
PSERIES_RECONFIG_REMOVE
:
if
(
np
->
iommu_table
&&
if
(
pci
->
iommu_table
&&
get_property
(
np
,
"ibm,dma-window"
,
NULL
))
iommu_free_table
(
np
);
break
;
...
...
@@ -486,6 +492,7 @@ static void iommu_dev_setup_pSeriesLP(struct pci_dev *dev)
struct
device_node
*
pdn
,
*
dn
;
struct
iommu_table
*
tbl
;
int
*
dma_window
=
NULL
;
struct
pci_dn
*
pci
;
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)
*/
dn
=
pci_device_to_OF_node
(
dev
);
for
(
pdn
=
dn
;
pdn
&&
!
pdn
->
iommu_table
;
pdn
=
pdn
->
parent
)
{
dma_window
=
(
unsigned
int
*
)
get_property
(
pdn
,
"ibm,dma-window"
,
NULL
);
for
(
pdn
=
dn
;
pdn
&&
pdn
->
data
&&
!
PCI_DN
(
pdn
)
->
iommu_table
;
pdn
=
pdn
->
parent
)
{
dma_window
=
(
unsigned
int
*
)
get_property
(
pdn
,
"ibm,dma-window"
,
NULL
);
if
(
dma_window
)
break
;
}
...
...
@@ -515,20 +524,21 @@ static void iommu_dev_setup_pSeriesLP(struct pci_dev *dev)
DBG
(
"Found DMA window, allocating table
\n
"
);
}
if
(
!
pdn
->
iommu_table
)
{
pci
=
pdn
->
data
;
if
(
!
pci
->
iommu_table
)
{
/* 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
),
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
)
dn
->
iommu_table
=
pdn
->
iommu_table
;
PCI_DN
(
dn
)
->
iommu_table
=
pci
->
iommu_table
;
}
static
void
iommu_bus_setup_null
(
struct
pci_bus
*
b
)
{
}
...
...
arch/ppc64/kernel/pci.c
View file @
3aed77bc
...
...
@@ -21,6 +21,7 @@
#include <linux/bootmem.h>
#include <linux/mm.h>
#include <linux/list.h>
#include <linux/syscalls.h>
#include <asm/processor.h>
#include <asm/io.h>
...
...
@@ -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
* functions of this slot.
*/
for
(
dn
=
busdn
->
child
;
dn
;
dn
=
dn
->
sibling
)
if
((
dn
->
devfn
>>
3
)
==
(
devfn
>>
3
))
for
(
dn
=
busdn
->
child
;
dn
;
dn
=
dn
->
sibling
)
{
struct
pci_dn
*
pdn
=
dn
->
data
;
if
(
pdn
&&
(
pdn
->
devfn
>>
3
)
==
(
devfn
>>
3
))
return
1
;
}
return
0
;
}
...
...
@@ -982,3 +985,62 @@ void pci_resource_to_user(const struct pci_dev *dev, int bar,
}
#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,
void
pci_devs_phb_init
(
void
);
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 */
void
pci_addr_cache_insert_device
(
struct
pci_dev
*
dev
);
...
...
arch/ppc64/kernel/pci_dn.c
View file @
3aed77bc
...
...
@@ -23,6 +23,8 @@
#include <linux/pci.h>
#include <linux/string.h>
#include <linux/init.h>
#include <linux/slab.h>
#include <linux/bootmem.h>
#include <asm/io.h>
#include <asm/prom.h>
...
...
@@ -40,16 +42,26 @@ static void * __devinit update_dn_pci_info(struct device_node *dn, void *data)
struct
pci_controller
*
phb
=
data
;
int
*
type
=
(
int
*
)
get_property
(
dn
,
"ibm,pci-config-space-type"
,
NULL
);
u32
*
regs
;
dn
->
phb
=
phb
;
struct
pci_dn
*
pdn
;
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
);
if
(
regs
)
{
/* First register entry is addr (00BBSS00) */
dn
->
busno
=
(
regs
[
0
]
>>
16
)
&
0xff
;
dn
->
devfn
=
(
regs
[
0
]
>>
8
)
&
0xff
;
p
dn
->
busno
=
(
regs
[
0
]
>>
16
)
&
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
;
}
...
...
@@ -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
)
{
struct
device_node
*
dn
=
(
struct
device_node
*
)
phb
->
arch_data
;
struct
pci_dn
*
pdn
;
/* PHB nodes themselves must not match */
dn
->
devfn
=
dn
->
busno
=
-
1
;
dn
->
phb
=
phb
;
update_dn_pci_info
(
dn
,
phb
);
pdn
=
dn
->
data
;
if
(
pdn
)
{
pdn
->
devfn
=
pdn
->
busno
=
-
1
;
pdn
->
phb
=
phb
;
}
/* Update dn->phb ptrs for new phb and children devices */
traverse_pci_devices
(
dn
,
update_dn_pci_info
,
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.
* 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
)
{
int
busno
=
((
unsigned
long
)
data
>>
8
)
&
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)
struct
device_node
*
fetch_dev_dn
(
struct
pci_dev
*
dev
)
{
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
;
unsigned
long
searchval
=
(
dev
->
bus
->
number
<<
8
)
|
dev
->
devfn
;
phb_dn
=
phb
->
arch_data
;
dn
=
traverse_pci_devices
(
phb_dn
,
is_devfn_node
,
(
void
*
)
searchval
);
dn
=
traverse_pci_devices
(
orig_dn
,
is_devfn_node
,
(
void
*
)
searchval
);
if
(
dn
)
dev
->
sysdata
=
dn
;
return
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
)
{
struct
device_node
*
np
=
node
;
struct
pci_dn
*
pci
;
int
err
=
NOTIFY_OK
;
switch
(
action
)
{
case
PSERIES_RECONFIG_ADD
:
update_dn_pci_info
(
np
,
np
->
parent
->
phb
);
pci
=
np
->
parent
->
data
;
update_dn_pci_info
(
np
,
pci
->
phb
);
break
;
default:
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)
#endif
/* CONFIG_PPC_ISERIES */
#ifdef CONFIG_PPC_MULTIPLATFORM
return
PCI_
GET_DN
(
pdev
)
->
iommu_table
;
return
PCI_
DN
(
PCI_GET_DN
(
pdev
)
)
->
iommu_table
;
#endif
/* CONFIG_PPC_MULTIPLATFORM */
}
...
...
arch/ppc64/kernel/pmac_feature.c
View file @
3aed77bc
...
...
@@ -674,6 +674,7 @@ void __init pmac_check_ht_link(void)
#if 0 /* Disabled for now */
u32 ufreq, freq, ucfg, cfg;
struct device_node *pcix_node;
struct pci_dn *pdn;
u8 px_bus, px_devfn;
struct pci_controller *px_hose;
...
...
@@ -687,9 +688,10 @@ void __init pmac_check_ht_link(void)
printk("No PCI-X bridge found\n");
return;
}
px_hose = pcix_node->phb;
px_bus = pcix_node->busno;
px_devfn = pcix_node->devfn;
pdn = pcix_node->data;
px_hose = pdn->phb;
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, 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,
else
busdn
=
hose
->
arch_data
;
for
(
dn
=
busdn
->
child
;
dn
;
dn
=
dn
->
sibling
)
if
(
dn
->
devfn
==
devfn
)
if
(
dn
->
d
ata
&&
PCI_DN
(
dn
)
->
d
evfn
==
devfn
)
break
;
if
(
dn
==
NULL
)
return
-
1
;
...
...
@@ -746,9 +746,9 @@ void __init pmac_pci_init(void)
*/
if
(
u3_agp
)
{
struct
device_node
*
np
=
u3_agp
->
arch_data
;
np
->
busno
=
0xf0
;
PCI_DN
(
np
)
->
busno
=
0xf0
;
for
(
np
=
np
->
child
;
np
;
np
=
np
->
sibling
)
np
->
busno
=
0xf0
;
PCI_DN
(
np
)
->
busno
=
0xf0
;
}
pmac_check_ht_link
();
...
...
arch/ppc64/kernel/prom.c
View file @
3aed77bc
...
...
@@ -1733,6 +1733,7 @@ static void of_node_release(struct kref *kref)
kfree
(
node
->
intrs
);
kfree
(
node
->
addrs
);
kfree
(
node
->
full_name
);
kfree
(
node
->
data
);
kfree
(
node
);
}
...
...
arch/ppc64/kernel/rtas_pci.c
View file @
3aed77bc
...
...
@@ -48,7 +48,7 @@ static int write_pci_config;
static
int
ibm_read_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
)
return
1
;
...
...
@@ -78,15 +78,17 @@ static int rtas_read_config(struct device_node *dn, int where, int size, u32 *va
int
returnval
=
-
1
;
unsigned
long
buid
,
addr
;
int
ret
;
struct
pci_dn
*
pdn
;
if
(
!
dn
)
if
(
!
dn
||
!
dn
->
data
)
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
;
addr
=
((
where
&
0xf00
)
<<
20
)
|
(
dn
->
busno
<<
16
)
|
(
dn
->
devfn
<<
8
)
|
(
where
&
0xff
);
buid
=
dn
->
phb
->
buid
;
addr
=
((
where
&
0xf00
)
<<
20
)
|
(
p
dn
->
busno
<<
16
)
|
(
p
dn
->
devfn
<<
8
)
|
(
where
&
0xff
);
buid
=
p
dn
->
phb
->
buid
;
if
(
buid
)
{
ret
=
rtas_call
(
ibm_read_pci_config
,
4
,
2
,
&
returnval
,
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
if
(
ret
)
return
PCIBIOS_DEVICE_NOT_FOUND
;
if
(
returnval
==
EEH_IO_ERROR_VALUE
(
size
)
&&
eeh_dn_check_failure
(
dn
,
NULL
))
if
(
returnval
==
EEH_IO_ERROR_VALUE
(
size
)
&&
eeh_dn_check_failure
(
dn
,
NULL
))
return
PCIBIOS_DEVICE_NOT_FOUND
;
return
PCIBIOS_SUCCESSFUL
;
...
...
@@ -118,24 +120,28 @@ static int rtas_pci_read_config(struct pci_bus *bus,
/* Search only direct children of the bus */
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
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
;
int
ret
;
struct
pci_dn
*
pdn
;
if
(
!
dn
)
if
(
!
dn
||
!
dn
->
data
)
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
;
addr
=
((
where
&
0xf00
)
<<
20
)
|
(
dn
->
busno
<<
16
)
|
(
dn
->
devfn
<<
8
)
|
(
where
&
0xff
);
buid
=
dn
->
phb
->
buid
;
addr
=
((
where
&
0xf00
)
<<
20
)
|
(
p
dn
->
busno
<<
16
)
|
(
p
dn
->
devfn
<<
8
)
|
(
where
&
0xff
);
buid
=
p
dn
->
phb
->
buid
;
if
(
buid
)
{
ret
=
rtas_call
(
ibm_write_pci_config
,
5
,
1
,
NULL
,
addr
,
buid
>>
32
,
buid
&
0xffffffff
,
size
,
(
ulong
)
val
);
}
else
{
...
...
@@ -161,7 +167,8 @@ static int rtas_pci_write_config(struct pci_bus *bus,
/* Search only direct children of the bus */
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
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
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
)
{
#ifdef CONFIG_PCI
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
;
return
sys_pciconfig_iobase
(
which
,
in_bus
,
in_devfn
);
}
...
...
arch/ppc64/kernel/syscalls.c
View file @
3aed77bc
...
...
@@ -46,10 +46,6 @@
extern
unsigned
long
wall_jiffies
;
void
check_bugs
(
void
)
{
}
/*
* 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)
dn
=
pci_device_to_OF_node
(
dev
);
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
)
...
...
@@ -291,7 +291,7 @@ static void iommu_bus_setup_u3(struct pci_bus *bus)
dn
=
pci_bus_to_OF_node
(
bus
);
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
)
{
}
...
...
arch/ppc64/kernel/udbg.c
View file @
3aed77bc
...
...
@@ -158,14 +158,20 @@ static struct console udbg_console = {
.
index
=
-
1
,
};
static
int
early_console_initialized
;
void
__init
disable_early_printk
(
void
)
{
if
(
!
early_console_initialized
)
return
;
unregister_console
(
&
udbg_console
);
early_console_initialized
=
0
;
}
/* called by setup_system */
void
register_early_udbg_console
(
void
)
{
early_console_initialized
=
1
;
register_console
(
&
udbg_console
);
}
...
...
arch/ppc64/mm/init.c
View file @
3aed77bc
...
...
@@ -554,12 +554,12 @@ void __init do_init_bootmem(void)
* present.
*/
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
));
/* reserve the sections we're already using */
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
));
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)
static
int
pci_add_secondary_bus
(
struct
device_node
*
dn
,
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
;
u8
sec_busno
;
...
...
@@ -159,7 +160,7 @@ static int pci_add_secondary_bus(struct device_node *dn,
if
(
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 */
remap_bus_range
(
child
);
...
...
@@ -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
)
{
struct
pci_controller
*
hose
=
dn
->
phb
;
struct
pci_dn
*
pdn
=
dn
->
data
;
struct
pci_controller
*
hose
=
pdn
->
phb
;
struct
pci_dev
*
dev
=
NULL
;
/* 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__
);
return
NULL
;
}
...
...
@@ -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
)
{
struct
slot
*
slot
;
struct
pci_dn
*
pdn
;
int
rc
=
0
;
if
(
!
rpaphp_find_pci_bus
(
dn
))
...
...
@@ -285,12 +288,13 @@ static int dlpar_remove_phb(char *drc_name, struct device_node *dn)
}
}
BUG_ON
(
!
dn
->
phb
);
rc
=
dlpar_remove_root_bus
(
dn
->
phb
);
pdn
=
dn
->
data
;
BUG_ON
(
!
pdn
||
!
pdn
->
phb
);
rc
=
dlpar_remove_root_bus
(
pdn
->
phb
);
if
(
rc
<
0
)
return
rc
;
dn
->
phb
=
NULL
;
p
dn
->
phb
=
NULL
;
return
0
;
}
...
...
@@ -299,7 +303,7 @@ static int dlpar_add_phb(char *drc_name, struct device_node *dn)
{
struct
pci_controller
*
phb
;
if
(
dn
->
phb
)
{
if
(
PCI_DN
(
dn
)
->
phb
)
{
/* PHB already exists */
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,
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
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
);
...
...
@@ -229,7 +231,7 @@ rpaphp_pci_config_slot(struct pci_bus *bus)
if
(
!
dn
||
!
dn
->
child
)
return
NULL
;
slotno
=
PCI_SLOT
(
dn
->
child
->
devfn
);
slotno
=
PCI_SLOT
(
PCI_DN
(
dn
->
child
)
->
devfn
);
/* pci_scan_slot should find all children */
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)
address
=
(
u_long
)
dp
->
addrs
[
i
].
address
;
#ifdef CONFIG_PPC64
address
+=
dp
->
phb
->
pci_mem_offset
;
address
+=
((
struct
pci_dn
*
)
dp
->
data
)
->
phb
->
pci_mem_offset
;
#endif
/* 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
*/
#ifndef _8253PIT_H
#define _8253PIT_H
#define PIT_TICK_RATE 1193182UL
#endif
#endif
/* _ASM_POWERPC_8253PIT_H */
include/asm-powerpc/agp.h
View file @
3aed77bc
#ifndef AGP_H
#define
AGP_H 1
#ifndef
_ASM_POWERPC_
AGP_H
#define
_ASM_POWERPC_AGP_H
#include <asm/io.h>
/* nothing much needed here */
#define map_page_into_agp(page)
#define unmap_page_from_agp(page)
#define flush_agp_mappings()
...
...
@@ -20,4 +18,4 @@
#define free_gatt_pages(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
#define _POWERPC_BUGS_H
#ifndef _
ASM_
POWERPC_BUGS_H
#define _
ASM_
POWERPC_BUGS_H
/*
* This program is free software; you can redistribute it and/or
...
...
@@ -13,6 +13,6 @@
* 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
#define _
P
PC_ERRNO_H
#ifndef _
ASM_POWER
PC_ERRNO_H
#define _
ASM_POWER
PC_ERRNO_H
#include <asm-generic/errno.h>
...
...
@@ -8,4 +8,4 @@
#define _LAST_ERRNO 516
#endif
#endif
/* _ASM_POWERPC_ERRNO_H */
include/asm-powerpc/ioctl.h
View file @
3aed77bc
#ifndef _
P
PC_IOCTL_H
#define _
P
PC_IOCTL_H
#ifndef _
ASM_POWER
PC_IOCTL_H
#define _
ASM_POWER
PC_IOCTL_H
/*
...
...
@@ -66,4 +66,4 @@ extern unsigned int __invalid_size_argument_for_IOC;
#define IOCSIZE_MASK (_IOC_SIZEMASK << _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
#define _ASM_PPC_IOCTLS_H
#ifndef _ASM_P
OWER
PC_IOCTLS_H
#define _ASM_P
OWER
PC_IOCTLS_H
#include <asm/ioctl.h>
...
...
@@ -104,4 +104,4 @@
#define TIOCMIWAIT 0x545C
/* wait for a change on serial input line(s) */
#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
#define _
_ASM
_LINKAGE_H
#ifndef _
ASM_POWERPC
_LINKAGE_H
#define _
ASM_POWERPC
_LINKAGE_H
/* Nothing to see here... */
#endif
#endif
/* _ASM_POWERPC_LINKAGE_H */
include/asm-powerpc/mc146818rtc.h
View file @
3aed77bc
#ifndef _POWERPC_MC146818RTC_H
#define _POWERPC_MC146818RTC_H
#ifndef _
ASM_
POWERPC_MC146818RTC_H
#define _
ASM_
POWERPC_MC146818RTC_H
/*
* Machine dependent access functions for RTC registers.
...
...
@@ -33,4 +33,4 @@ outb_p((val),RTC_PORT(1)); \
})
#endif
/* __KERNEL__ */
#endif
/* _POWERPC_MC146818RTC_H */
#endif
/* _
ASM_
POWERPC_MC146818RTC_H */
include/asm-powerpc/mman.h
View file @
3aed77bc
#ifndef _POWERPC_MMAN_H
#define _POWERPC_MMAN_H
#ifndef _
ASM_
POWERPC_MMAN_H
#define _
ASM_
POWERPC_MMAN_H
/*
* This program is free software; you can redistribute it and/or
...
...
@@ -49,4 +49,4 @@
#define MAP_ANON MAP_ANONYMOUS
#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
#define _POWERPC_MODULE_H
#ifndef _
ASM_
POWERPC_MODULE_H
#define _
ASM_
POWERPC_MODULE_H
/*
* This program is free software; you can redistribute it and/or
...
...
@@ -74,4 +74,4 @@ struct exception_table_entry;
void
sort_ex_table
(
struct
exception_table_entry
*
start
,
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
#define _
P
PC_MSGBUF_H
#ifndef _
ASM_POWER
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
ipc64_perm
msg_perm
;
#ifndef __powerpc64__
unsigned
int
__unused1
;
#endif
__kernel_time_t
msg_stime
;
/* last msgsnd time */
#ifndef __powerpc64__
unsigned
int
__unused2
;
#endif
__kernel_time_t
msg_rtime
;
/* last msgrcv time */
#ifndef __powerpc64__
unsigned
int
__unused3
;
#endif
__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 */
...
...
@@ -22,4 +30,4 @@ struct msqid64_ds {
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
*
* Included from fs/namei.c
*/
#ifdef __KERNEL__
#ifndef __PPC_NAMEI_H
#define __PPC_NAMEI_H
/* This dummy routine maybe changed to something useful
* for /usr/gnemul/ emulation stuff.
* Look at asm-sparc/namei.h for details.
...
...
@@ -16,5 +16,5 @@
#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
#define _ASM_PPC_PARAM_H
#ifndef _ASM_P
OWER
PC_PARAM_H
#define _ASM_P
OWER
PC_PARAM_H
#include <linux/config.h>
#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 CLOCKS_PER_SEC (USER_HZ)
/* frequency at which times() counts */
#endif
/* __KERNEL__ */
...
...
@@ -21,4 +21,4 @@
#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
#define _
_P
PC_POLL_H
#ifndef _
ASM_POWER
PC_POLL_H
#define _
ASM_POWER
PC_POLL_H
#define POLLIN 0x0001
#define POLLPRI 0x0002
...
...
@@ -20,4 +20,4 @@ struct pollfd {
short
revents
;
};
#endif
#endif
/* _ASM_POWERPC_POLL_H */
include/asm-powerpc/sembuf.h
View file @
3aed77bc
#ifndef _POWERPC_SEMBUF_H
#define _POWERPC_SEMBUF_H
#ifndef _
ASM_
POWERPC_SEMBUF_H
#define _
ASM_
POWERPC_SEMBUF_H
/*
* This program is free software; you can redistribute it and/or
...
...
@@ -33,4 +33,4 @@ struct semid64_ds {
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
#define _POWERPC_SHMBUF_H
#ifndef _
ASM_
POWERPC_SHMBUF_H
#define _
ASM_
POWERPC_SHMBUF_H
/*
* This program is free software; you can redistribute it and/or
...
...
@@ -21,19 +21,19 @@
struct
shmid64_ds
{
struct
ipc64_perm
shm_perm
;
/* operation perms */
#ifndef __power64__
#ifndef __power
pc
64__
unsigned
long
__unused1
;
#endif
__kernel_time_t
shm_atime
;
/* last attach time */
#ifndef __power64__
#ifndef __power
pc
64__
unsigned
long
__unused2
;
#endif
__kernel_time_t
shm_dtime
;
/* last detach time */
#ifndef __power64__
#ifndef __power
pc
64__
unsigned
long
__unused3
;
#endif
__kernel_time_t
shm_ctime
;
/* last change time */
#ifndef __power64__
#ifndef __power
pc
64__
unsigned
long
__unused4
;
#endif
size_t
shm_segsz
;
/* size of segment (bytes) */
...
...
@@ -56,4 +56,4 @@ struct shminfo64 {
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
#define _
P
PC_SHMPARAM_H
#ifndef _
ASM_POWER
PC_SHMPARAM_H
#define _
ASM_POWER
PC_SHMPARAM_H
#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
#define _POWERPC_SIGINFO_H
#ifndef _
ASM_
POWERPC_SIGINFO_H
#define _
ASM_
POWERPC_SIGINFO_H
/*
* This program is free software; you can redistribute it and/or
...
...
@@ -15,4 +15,4 @@
#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
#define _POWERPC_SOCKET_H
#ifndef _
ASM_
POWERPC_SOCKET_H
#define _
ASM_
POWERPC_SOCKET_H
/*
* This program is free software; you can redistribute it and/or
...
...
@@ -56,4 +56,4 @@
#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
#define _POWERPC_SOCKIOS_H
#ifndef _
ASM_
POWERPC_SOCKIOS_H
#define _
ASM_
POWERPC_SOCKIOS_H
/*
* This program is free software; you can redistribute it and/or
...
...
@@ -16,4 +16,4 @@
#define SIOCATMARK 0x8905
#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_
#define _
PPC_STRING_H_
#ifndef _
ASM_POWERPC_STRING_H
#define _
ASM_POWERPC_STRING_H
#ifdef __KERNEL__
...
...
@@ -29,4 +29,4 @@ extern void * memchr(const void *,int,__kernel_size_t);
#endif
/* __KERNEL__ */
#endif
#endif
/* _ASM_POWERPC_STRING_H */
include/asm-powerpc/termbits.h
View file @
3aed77bc
#ifndef _POWERPC_TERMBITS_H
#define _POWERPC_TERMBITS_H
#ifndef _
ASM_
POWERPC_TERMBITS_H
#define _
ASM_
POWERPC_TERMBITS_H
/*
* This program is free software; you can redistribute it and/or
...
...
@@ -188,4 +188,4 @@ struct termios {
#define TCSADRAIN 1
#define TCSAFLUSH 2
#endif
/*
_POWERPC_TERMBITS_H */
#endif
/* _ASM
_POWERPC_TERMBITS_H */
include/asm-powerpc/termios.h
View file @
3aed77bc
#ifndef _POWERPC_TERMIOS_H
#define _POWERPC_TERMIOS_H
#ifndef _
ASM_
POWERPC_TERMIOS_H
#define _
ASM_
POWERPC_TERMIOS_H
/*
* Liberally adapted from alpha/termios.h. In particular, the c_cc[]
...
...
@@ -233,4 +233,4 @@ struct termio {
#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
*
* ppc architecture timex specifications
* PowerPC architecture timex specifications
*/
#ifdef __KERNEL__
#ifndef _ASMppc_TIMEX_H
#define _ASMppc_TIMEX_H
#include <linux/config.h>
#include <asm/cputable.h>
...
...
@@ -14,14 +14,21 @@
typedef
unsigned
long
cycles_t
;
/*
* For the "cycle" counter we use the timebase lower half.
* Currently only used on SMP.
*/
static
inline
cycles_t
get_cycles
(
void
)
{
cycles_t
ret
=
0
;
cycles_t
ret
;
#ifdef __powerpc64__
__asm__
__volatile__
(
"mftb %0"
:
"=r"
(
ret
)
:
);
#else
/*
* For the "cycle" counter we use the timebase lower half.
* Currently only used on SMP.
*/
ret
=
0
;
__asm__
__volatile__
(
"98: mftb %0
\n
"
...
...
@@ -33,8 +40,10 @@ static inline cycles_t get_cycles(void)
" .long 99b
\n
"
".previous"
:
"=r"
(
ret
)
:
"i"
(
CPU_FTR_601
));
#endif
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
#define _ASM_P
PC64
_TOPOLOGY_H
#ifndef _ASM_P
OWERPC
_TOPOLOGY_H
#define _ASM_P
OWERPC
_TOPOLOGY_H
#include <linux/config.h>
#include <asm/mmzone.h>
#ifdef CONFIG_NUMA
#include <asm/mmzone.h>
static
inline
int
cpu_to_node
(
int
cpu
)
{
int
node
;
...
...
@@ -66,4 +67,4 @@ static inline int node_to_first_cpu(int node)
#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__
#ifndef __PPC_UNALIGNED_H
#define __PPC_UNALIGNED_H
/*
* The PowerPC can do unaligned accesses itself in big endian mode.
...
...
@@ -14,5 +15,5 @@
#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 _PPC_USER_H
#define _PPC_USER_H
#ifndef _ASM_POWERPC_USER_H
#define _ASM_POWERPC_USER_H
/* Adapted from <asm-alpha/user.h> */
#ifdef __KERNEL__
#include <
linux
/ptrace.h>
#include <
asm
/ptrace.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
* 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
...
...
@@ -50,5 +51,5 @@ struct user {
#define HOST_DATA_START_ADDR (u.start_data)
#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,19 +48,52 @@ struct pci_controller {
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
);
/* Get a device_node from a pci_dev. This code must be fast except in the case
* where the sysdata is incorrect and needs to be fixed up (hopefully just once)
/* Get a device_node from a pci_dev. This code must be fast except
* 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
)
{
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 */
else
return
fetch_dev_dn
(
dev
);
return
fetch_dev_dn
(
dev
);
}
static
inline
struct
device_node
*
pci_bus_to_OF_node
(
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
;
BUG_ON
(
busdn
==
NULL
);
return
busdn
->
phb
;
return
PCI_DN
(
busdn
)
->
phb
;
}
#endif
...
...
include/asm-ppc64/prom.h
View file @
3aed77bc
...
...
@@ -116,14 +116,6 @@ struct property {
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
{
char
*
name
;
char
*
type
;
...
...
@@ -135,16 +127,6 @@ struct device_node {
struct
interrupt_info
*
intrs
;
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
device_node
*
parent
;
struct
device_node
*
child
;
...
...
@@ -154,6 +136,7 @@ struct device_node {
struct
proc_dir_entry
*
pde
;
/* this node's proc directory */
struct
kref
kref
;
unsigned
long
_flags
;
void
*
data
;
};
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