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
05f6ece6
Commit
05f6ece6
authored
Jan 10, 2006
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge master.kernel.org:/pub/scm/linux/kernel/git/kyle/parisc-2.6
parents
35d138ae
58b6c58c
Changes
37
Hide whitespace changes
Inline
Side-by-side
Showing
37 changed files
with
373 additions
and
228 deletions
+373
-228
arch/parisc/kernel/cache.c
arch/parisc/kernel/cache.c
+10
-10
arch/parisc/kernel/drivers.c
arch/parisc/kernel/drivers.c
+9
-4
arch/parisc/kernel/firmware.c
arch/parisc/kernel/firmware.c
+1
-1
arch/parisc/kernel/hardware.c
arch/parisc/kernel/hardware.c
+1
-0
arch/parisc/kernel/inventory.c
arch/parisc/kernel/inventory.c
+3
-3
arch/parisc/kernel/pci-dma.c
arch/parisc/kernel/pci-dma.c
+3
-3
arch/parisc/kernel/pdc_chassis.c
arch/parisc/kernel/pdc_chassis.c
+7
-6
arch/parisc/kernel/perf.c
arch/parisc/kernel/perf.c
+3
-3
arch/parisc/kernel/process.c
arch/parisc/kernel/process.c
+1
-1
arch/parisc/kernel/processor.c
arch/parisc/kernel/processor.c
+4
-4
arch/parisc/kernel/setup.c
arch/parisc/kernel/setup.c
+5
-5
arch/parisc/kernel/smp.c
arch/parisc/kernel/smp.c
+7
-9
arch/parisc/kernel/time.c
arch/parisc/kernel/time.c
+2
-2
arch/parisc/kernel/topology.c
arch/parisc/kernel/topology.c
+2
-1
arch/parisc/kernel/unaligned.c
arch/parisc/kernel/unaligned.c
+1
-1
arch/parisc/kernel/unwind.c
arch/parisc/kernel/unwind.c
+1
-1
arch/parisc/kernel/vmlinux.lds.S
arch/parisc/kernel/vmlinux.lds.S
+6
-9
arch/parisc/mm/init.c
arch/parisc/mm/init.c
+18
-11
arch/parisc/mm/ioremap.c
arch/parisc/mm/ioremap.c
+63
-37
drivers/parisc/dino.c
drivers/parisc/dino.c
+23
-7
drivers/parisc/eisa.c
drivers/parisc/eisa.c
+2
-2
drivers/parisc/eisa_eeprom.c
drivers/parisc/eisa_eeprom.c
+1
-1
drivers/parisc/lasi.c
drivers/parisc/lasi.c
+1
-1
drivers/parisc/lba_pci.c
drivers/parisc/lba_pci.c
+91
-24
drivers/parisc/led.c
drivers/parisc/led.c
+9
-9
drivers/parisc/pdc_stable.c
drivers/parisc/pdc_stable.c
+32
-12
drivers/parisc/power.c
drivers/parisc/power.c
+6
-6
drivers/parport/Kconfig
drivers/parport/Kconfig
+1
-0
drivers/video/stifb.c
drivers/video/stifb.c
+28
-37
include/asm-parisc/cache.h
include/asm-parisc/cache.h
+4
-4
include/asm-parisc/io.h
include/asm-parisc/io.h
+1
-1
include/asm-parisc/page.h
include/asm-parisc/page.h
+7
-0
include/asm-parisc/pci.h
include/asm-parisc/pci.h
+7
-1
include/asm-parisc/processor.h
include/asm-parisc/processor.h
+9
-9
include/asm-parisc/tlbflush.h
include/asm-parisc/tlbflush.h
+1
-0
include/linux/cache.h
include/linux/cache.h
+1
-1
sound/oss/harmony.c
sound/oss/harmony.c
+2
-2
No files found.
arch/parisc/kernel/cache.c
View file @
05f6ece6
...
...
@@ -29,9 +29,9 @@
#include <asm/processor.h>
#include <asm/sections.h>
int
split_tlb
;
int
dcache_stride
;
int
icache_stride
;
int
split_tlb
__read_mostly
;
int
dcache_stride
__read_mostly
;
int
icache_stride
__read_mostly
;
EXPORT_SYMBOL
(
dcache_stride
);
...
...
@@ -45,29 +45,29 @@ DEFINE_SPINLOCK(pa_tlb_lock);
EXPORT_SYMBOL
(
pa_tlb_lock
);
#endif
struct
pdc_cache_info
cache_info
;
struct
pdc_cache_info
cache_info
__read_mostly
;
#ifndef CONFIG_PA20
static
struct
pdc_btlb_info
btlb_info
;
static
struct
pdc_btlb_info
btlb_info
__read_mostly
;
#endif
#ifdef CONFIG_SMP
void
flush_data_cache
(
void
)
{
on_each_cpu
(
(
void
(
*
)(
void
*
))
flush_data_cache_local
,
NULL
,
1
,
1
);
on_each_cpu
(
flush_data_cache_local
,
NULL
,
1
,
1
);
}
void
flush_instruction_cache
(
void
)
{
on_each_cpu
(
(
void
(
*
)(
void
*
))
flush_instruction_cache_local
,
NULL
,
1
,
1
);
on_each_cpu
(
flush_instruction_cache_local
,
NULL
,
1
,
1
);
}
#endif
void
flush_cache_all_local
(
void
)
{
flush_instruction_cache_local
();
flush_data_cache_local
();
flush_instruction_cache_local
(
NULL
);
flush_data_cache_local
(
NULL
);
}
EXPORT_SYMBOL
(
flush_cache_all_local
);
...
...
@@ -332,7 +332,7 @@ void clear_user_page_asm(void *page, unsigned long vaddr)
}
#define FLUSH_THRESHOLD 0x80000
/* 0.5MB */
int
parisc_cache_flush_threshold
=
FLUSH_THRESHOLD
;
int
parisc_cache_flush_threshold
__read_mostly
=
FLUSH_THRESHOLD
;
void
parisc_setup_cache_timing
(
void
)
{
...
...
arch/parisc/kernel/drivers.c
View file @
05f6ece6
...
...
@@ -39,7 +39,7 @@
#include <asm/parisc-device.h>
/* See comments in include/asm-parisc/pci.h */
struct
hppa_dma_ops
*
hppa_dma_ops
;
struct
hppa_dma_ops
*
hppa_dma_ops
__read_mostly
;
EXPORT_SYMBOL
(
hppa_dma_ops
);
static
struct
device
root
=
{
...
...
@@ -515,8 +515,13 @@ alloc_pa_dev(unsigned long hpa, struct hardware_path *mod_path)
(
iodc_data
[
5
]
<<
8
)
|
iodc_data
[
6
];
dev
->
hpa
.
name
=
parisc_pathname
(
dev
);
dev
->
hpa
.
start
=
hpa
;
if
(
hpa
==
0xf4000000
||
hpa
==
0xf6000000
||
hpa
==
0xf8000000
||
hpa
==
0xfa000000
)
{
/* This is awkward. The STI spec says that gfx devices may occupy
* 32MB or 64MB. Unfortunately, we don't know how to tell whether
* it's the former or the latter. Assumptions either way can hurt us.
*/
if
(
hpa
==
0xf4000000
||
hpa
==
0xf8000000
)
{
dev
->
hpa
.
end
=
hpa
+
0x03ffffff
;
}
else
if
(
hpa
==
0xf6000000
||
hpa
==
0xfa000000
)
{
dev
->
hpa
.
end
=
hpa
+
0x01ffffff
;
}
else
{
dev
->
hpa
.
end
=
hpa
+
0xfff
;
...
...
@@ -834,7 +839,7 @@ static void print_parisc_device(struct parisc_device *dev)
if
(
dev
->
num_addrs
)
{
int
k
;
printk
(
",
additional addresses: "
);
printk
(
", additional addresses: "
);
for
(
k
=
0
;
k
<
dev
->
num_addrs
;
k
++
)
printk
(
"0x%lx "
,
dev
->
addr
[
k
]);
}
...
...
arch/parisc/kernel/firmware.c
View file @
05f6ece6
...
...
@@ -80,7 +80,7 @@ static unsigned long pdc_result2[32] __attribute__ ((aligned (8)));
/* Firmware needs to be initially set to narrow to determine the
* actual firmware width. */
int
parisc_narrow_firmware
=
1
;
int
parisc_narrow_firmware
__read_mostly
=
1
;
#endif
/* On most currently-supported platforms, IODC I/O calls are 32-bit calls
...
...
arch/parisc/kernel/hardware.c
View file @
05f6ece6
...
...
@@ -551,6 +551,7 @@ static struct hp_hardware hp_hardware_list[] __initdata = {
{
HPHW_BCPORT
,
0x804
,
0x0000C
,
0x10
,
"REO I/O BC Merced Port"
},
{
HPHW_BCPORT
,
0x782
,
0x0000C
,
0x00
,
"REO I/O BC Ropes Port"
},
{
HPHW_BCPORT
,
0x784
,
0x0000C
,
0x00
,
"Pluto I/O BC Ropes Port"
},
{
HPHW_BRIDGE
,
0x05D
,
0x0000A
,
0x00
,
"SummitHawk Dino PCI Bridge"
},
{
HPHW_BRIDGE
,
0x680
,
0x0000A
,
0x00
,
"Dino PCI Bridge"
},
{
HPHW_BRIDGE
,
0x682
,
0x0000A
,
0x00
,
"Cujo PCI Bridge"
},
{
HPHW_BRIDGE
,
0x782
,
0x0000A
,
0x00
,
"Elroy PCI Bridge"
},
...
...
arch/parisc/kernel/inventory.c
View file @
05f6ece6
...
...
@@ -38,7 +38,7 @@
*/
#undef DEBUG_PAT
int
pdc_type
=
PDC_TYPE_ILLEGAL
;
int
pdc_type
__read_mostly
=
PDC_TYPE_ILLEGAL
;
void
__init
setup_pdc
(
void
)
{
...
...
@@ -120,8 +120,8 @@ set_pmem_entry(physmem_range_t *pmem_ptr, unsigned long start,
* pdc info is bad in this case).
*/
if
(
((
start
&
(
PAGE_SIZE
-
1
))
!=
0
)
||
((
pages4k
&
((
1UL
<<
PDC_PAGE_ADJ_SHIFT
)
-
1
))
!=
0
)
)
{
if
(
unlikely
(
((
start
&
(
PAGE_SIZE
-
1
))
!=
0
)
||
((
pages4k
&
((
1UL
<<
PDC_PAGE_ADJ_SHIFT
)
-
1
))
!=
0
)
)
)
{
panic
(
"Memory range doesn't align with page size!
\n
"
);
}
...
...
arch/parisc/kernel/pci-dma.c
View file @
05f6ece6
...
...
@@ -33,10 +33,10 @@
#include <asm/uaccess.h>
#include <asm/tlbflush.h>
/* for purge_tlb_*() macros */
static
struct
proc_dir_entry
*
proc_gsc_root
=
NULL
;
static
struct
proc_dir_entry
*
proc_gsc_root
__read_mostly
=
NULL
;
static
int
pcxl_proc_info
(
char
*
buffer
,
char
**
start
,
off_t
offset
,
int
length
);
static
unsigned
long
pcxl_used_bytes
=
0
;
static
unsigned
long
pcxl_used_pages
=
0
;
static
unsigned
long
pcxl_used_bytes
__read_mostly
=
0
;
static
unsigned
long
pcxl_used_pages
__read_mostly
=
0
;
extern
unsigned
long
pcxl_dma_start
;
/* Start of pcxl dma mapping area */
static
spinlock_t
pcxl_res_lock
;
...
...
arch/parisc/kernel/pdc_chassis.c
View file @
05f6ece6
...
...
@@ -30,6 +30,7 @@
#include <linux/kernel.h>
#include <linux/reboot.h>
#include <linux/notifier.h>
#include <linux/cache.h>
#include <asm/pdc_chassis.h>
#include <asm/processor.h>
...
...
@@ -38,8 +39,8 @@
#ifdef CONFIG_PDC_CHASSIS
static
int
pdc_chassis_old
=
0
;
static
unsigned
int
pdc_chassis_enabled
=
1
;
static
int
pdc_chassis_old
__read_mostly
=
0
;
static
unsigned
int
pdc_chassis_enabled
__read_mostly
=
1
;
/**
...
...
@@ -132,7 +133,7 @@ void __init parisc_pdc_chassis_init(void)
{
#ifdef CONFIG_PDC_CHASSIS
int
handle
=
0
;
if
(
pdc_chassis_enabled
)
{
if
(
likely
(
pdc_chassis_enabled
)
)
{
DPRINTK
(
KERN_DEBUG
"%s: parisc_pdc_chassis_init()
\n
"
,
__FILE__
);
/* Let see if we have something to handle... */
...
...
@@ -142,7 +143,7 @@ void __init parisc_pdc_chassis_init(void)
printk
(
KERN_INFO
"Enabling PDC_PAT chassis codes support.
\n
"
);
handle
=
1
;
}
else
if
(
pdc_chassis_old
)
{
else
if
(
unlikely
(
pdc_chassis_old
)
)
{
printk
(
KERN_INFO
"Enabling old style chassis LED panel support.
\n
"
);
handle
=
1
;
}
...
...
@@ -178,7 +179,7 @@ int pdc_chassis_send_status(int message)
/* Maybe we should do that in an other way ? */
int
retval
=
0
;
#ifdef CONFIG_PDC_CHASSIS
if
(
pdc_chassis_enabled
)
{
if
(
likely
(
pdc_chassis_enabled
)
)
{
DPRINTK
(
KERN_DEBUG
"%s: pdc_chassis_send_status(%d)
\n
"
,
__FILE__
,
message
);
...
...
@@ -214,7 +215,7 @@ int pdc_chassis_send_status(int message)
}
}
else
retval
=
-
1
;
#else
if
(
pdc_chassis_old
)
{
if
(
unlikely
(
pdc_chassis_old
)
)
{
switch
(
message
)
{
case
PDC_CHASSIS_DIRECT_BSTART
:
case
PDC_CHASSIS_DIRECT_BCOMPLETE
:
...
...
arch/parisc/kernel/perf.c
View file @
05f6ece6
...
...
@@ -66,10 +66,10 @@ struct rdr_tbl_ent {
uint8_t
write_control
;
};
static
int
perf_processor_interface
=
UNKNOWN_INTF
;
static
int
perf_enabled
=
0
;
static
int
perf_processor_interface
__read_mostly
=
UNKNOWN_INTF
;
static
int
perf_enabled
__read_mostly
=
0
;
static
spinlock_t
perf_lock
;
struct
parisc_device
*
cpu_device
=
NULL
;
struct
parisc_device
*
cpu_device
__read_mostly
=
NULL
;
/* RDRs to write for PCX-W */
static
int
perf_rdrs_W
[]
=
...
...
arch/parisc/kernel/process.c
View file @
05f6ece6
...
...
@@ -54,7 +54,7 @@
#include <asm/uaccess.h>
#include <asm/unwind.h>
static
int
hlt_counter
;
static
int
hlt_counter
__read_mostly
;
/*
* Power off function, if any
...
...
arch/parisc/kernel/processor.c
View file @
05f6ece6
...
...
@@ -44,10 +44,10 @@
#include <asm/irq.h>
/* for struct irq_region */
#include <asm/parisc-device.h>
struct
system_cpuinfo_parisc
boot_cpu_data
;
struct
system_cpuinfo_parisc
boot_cpu_data
__read_mostly
;
EXPORT_SYMBOL
(
boot_cpu_data
);
struct
cpuinfo_parisc
cpu_data
[
NR_CPUS
];
struct
cpuinfo_parisc
cpu_data
[
NR_CPUS
]
__read_mostly
;
/*
** PARISC CPU driver - claim "device" and initialize CPU data structures.
...
...
@@ -378,12 +378,12 @@ show_cpuinfo (struct seq_file *m, void *v)
return
0
;
}
static
struct
parisc_device_id
processor_tbl
[]
=
{
static
struct
parisc_device_id
processor_tbl
[]
__read_mostly
=
{
{
HPHW_NPROC
,
HVERSION_REV_ANY_ID
,
HVERSION_ANY_ID
,
SVERSION_ANY_ID
},
{
0
,
}
};
static
struct
parisc_driver
cpu_driver
=
{
static
struct
parisc_driver
cpu_driver
__read_mostly
=
{
.
name
=
"CPU"
,
.
id_table
=
processor_tbl
,
.
probe
=
processor_probe
...
...
arch/parisc/kernel/setup.c
View file @
05f6ece6
...
...
@@ -46,15 +46,15 @@
#include <asm/io.h>
#include <asm/setup.h>
char
command_line
[
COMMAND_LINE_SIZE
];
char
command_line
[
COMMAND_LINE_SIZE
]
__read_mostly
;
/* Intended for ccio/sba/cpu statistics under /proc/bus/{runway|gsc} */
struct
proc_dir_entry
*
proc_runway_root
=
NULL
;
struct
proc_dir_entry
*
proc_gsc_root
=
NULL
;
struct
proc_dir_entry
*
proc_mckinley_root
=
NULL
;
struct
proc_dir_entry
*
proc_runway_root
__read_mostly
=
NULL
;
struct
proc_dir_entry
*
proc_gsc_root
__read_mostly
=
NULL
;
struct
proc_dir_entry
*
proc_mckinley_root
__read_mostly
=
NULL
;
#if !defined(CONFIG_PA20) && (defined(CONFIG_IOMMU_CCIO) || defined(CONFIG_IOMMU_SBA))
int
parisc_bus_is_phys
=
1
;
/* Assume no IOMMU is present */
int
parisc_bus_is_phys
__read_mostly
=
1
;
/* Assume no IOMMU is present */
EXPORT_SYMBOL
(
parisc_bus_is_phys
);
#endif
...
...
arch/parisc/kernel/smp.c
View file @
05f6ece6
...
...
@@ -39,7 +39,7 @@
#include <asm/atomic.h>
#include <asm/current.h>
#include <asm/delay.h>
#include <asm/
pgalloc.h>
/* for flush_tlb_all() proto/macro */
#include <asm/
tlbflush.h>
#include <asm/io.h>
#include <asm/irq.h>
/* for CPU_IRQ_REGION and friends */
...
...
@@ -58,9 +58,9 @@ DEFINE_SPINLOCK(smp_lock);
volatile
struct
task_struct
*
smp_init_current_idle_task
;
static
volatile
int
cpu_now_booting
=
0
;
/* track which CPU is booting */
static
volatile
int
cpu_now_booting
__read_mostly
=
0
;
/* track which CPU is booting */
static
int
parisc_max_cpus
=
1
;
static
int
parisc_max_cpus
__read_mostly
=
1
;
/* online cpus are ones that we've managed to bring up completely
* possible cpus are all valid cpu
...
...
@@ -71,8 +71,8 @@ static int parisc_max_cpus = 1;
* empty in the beginning.
*/
cpumask_t
cpu_online_map
=
CPU_MASK_NONE
;
/* Bitmap of online CPUs */
cpumask_t
cpu_possible_map
=
CPU_MASK_ALL
;
/* Bitmap of Present CPUs */
cpumask_t
cpu_online_map
__read_mostly
=
CPU_MASK_NONE
;
/* Bitmap of online CPUs */
cpumask_t
cpu_possible_map
__read_mostly
=
CPU_MASK_ALL
;
/* Bitmap of Present CPUs */
EXPORT_SYMBOL
(
cpu_online_map
);
EXPORT_SYMBOL
(
cpu_possible_map
);
...
...
@@ -406,12 +406,10 @@ EXPORT_SYMBOL(smp_call_function);
* as we want to ensure all TLB's flushed before proceeding.
*/
extern
void
flush_tlb_all_local
(
void
);
void
smp_flush_tlb_all
(
void
)
{
on_each_cpu
(
(
void
(
*
)(
void
*
))
flush_tlb_all_local
,
NULL
,
1
,
1
);
on_each_cpu
(
flush_tlb_all_local
,
NULL
,
1
,
1
);
}
...
...
@@ -487,7 +485,7 @@ void __init smp_callin(void)
#endif
flush_cache_all_local
();
/* start with known state */
flush_tlb_all_local
();
flush_tlb_all_local
(
NULL
);
local_irq_enable
();
/* Interrupts have been off until now */
...
...
arch/parisc/kernel/time.c
View file @
05f6ece6
...
...
@@ -36,8 +36,8 @@
/* xtime and wall_jiffies keep wall-clock time */
extern
unsigned
long
wall_jiffies
;
static
long
clocktick
;
/* timer cycles per tick */
static
long
halftick
;
static
long
clocktick
__read_mostly
;
/* timer cycles per tick */
static
long
halftick
__read_mostly
;
#ifdef CONFIG_SMP
extern
void
smp_do_timer
(
struct
pt_regs
*
regs
);
...
...
arch/parisc/kernel/topology.c
View file @
05f6ece6
...
...
@@ -20,8 +20,9 @@
#include <linux/init.h>
#include <linux/smp.h>
#include <linux/cpu.h>
#include <linux/cache.h>
static
struct
cpu
cpu_devices
[
NR_CPUS
];
static
struct
cpu
cpu_devices
[
NR_CPUS
]
__read_mostly
;
static
int
__init
topology_init
(
void
)
{
...
...
arch/parisc/kernel/unaligned.c
View file @
05f6ece6
...
...
@@ -122,7 +122,7 @@
#define ERR_NOTHANDLED -1
#define ERR_PAGEFAULT -2
int
unaligned_enabled
=
1
;
int
unaligned_enabled
__read_mostly
=
1
;
void
die_if_kernel
(
char
*
str
,
struct
pt_regs
*
regs
,
long
err
);
...
...
arch/parisc/kernel/unwind.c
View file @
05f6ece6
...
...
@@ -35,7 +35,7 @@ static spinlock_t unwind_lock;
* we can call unwind_init as early in the bootup process as
* possible (before the slab allocator is initialized)
*/
static
struct
unwind_table
kernel_unwind_table
;
static
struct
unwind_table
kernel_unwind_table
__read_mostly
;
static
LIST_HEAD
(
unwind_tables
);
static
inline
const
struct
unwind_table_entry
*
...
...
arch/parisc/kernel/vmlinux.lds.S
View file @
05f6ece6
...
...
@@ -68,7 +68,7 @@ SECTIONS
RODATA
/
*
writeable
*/
.
=
ALIGN
(
4096
)
; /* Make sure this is page
d
aligned so
.
=
ALIGN
(
4096
)
; /* Make sure this is page aligned so
that
we
can
properly
leave
these
as
writable
*/
data_start
=
.
;
...
...
@@ -105,6 +105,10 @@ SECTIONS
.
=
ALIGN
(
16
)
;
.
data.
lock_aligned
:
{
*(
.
data
.
lock_aligned
)
}
/
*
rarely
changed
data
like
cpu
maps
*/
.
=
ALIGN
(
16
)
;
.
data.
read_mostly
:
{
*(
.
data
.
read_mostly
)
}
_edata
=
.
; /* End of data section */
.
=
ALIGN
(
16384
)
; /* init_task */
...
...
@@ -194,14 +198,7 @@ SECTIONS
#endif
}
/
*
Stabs
debugging
sections
.
*/
.
stab
0
:
{
*(
.
stab
)
}
.
stabstr
0
:
{
*(
.
stabstr
)
}
.
stab.excl
0
:
{
*(
.
stab
.
excl
)
}
.
stab.exclstr
0
:
{
*(
.
stab
.
exclstr
)
}
.
stab.index
0
:
{
*(
.
stab
.
index
)
}
.
stab.indexstr
0
:
{
*(
.
stab
.
indexstr
)
}
.
comment
0
:
{
*(
.
comment
)
}
STABS_DEBUG
.
note
0
:
{
*(
.
note
)
}
}
arch/parisc/mm/init.c
View file @
05f6ece6
...
...
@@ -36,9 +36,9 @@ extern char _end; /* end of BSS, defined by linker */
extern
char
__init_begin
,
__init_end
;
#ifdef CONFIG_DISCONTIGMEM
struct
node_map_data
node_data
[
MAX_NUMNODES
];
bootmem_data_t
bmem_data
[
MAX_NUMNODES
];
unsigned
char
pfnnid_map
[
PFNNID_MAP_MAX
];
struct
node_map_data
node_data
[
MAX_NUMNODES
]
__read_mostly
;
bootmem_data_t
bmem_data
[
MAX_NUMNODES
]
__read_mostly
;
unsigned
char
pfnnid_map
[
PFNNID_MAP_MAX
]
__read_mostly
;
#endif
static
struct
resource
data_resource
=
{
...
...
@@ -58,14 +58,14 @@ static struct resource pdcdata_resource = {
.
flags
=
IORESOURCE_BUSY
|
IORESOURCE_MEM
,
};
static
struct
resource
sysram_resources
[
MAX_PHYSMEM_RANGES
];
static
struct
resource
sysram_resources
[
MAX_PHYSMEM_RANGES
]
__read_mostly
;
/* The following array is initialized from the firmware specific
* information retrieved in kernel/inventory.c.
*/
physmem_range_t
pmem_ranges
[
MAX_PHYSMEM_RANGES
];
int
npmem_ranges
;
physmem_range_t
pmem_ranges
[
MAX_PHYSMEM_RANGES
]
__read_mostly
;
int
npmem_ranges
__read_mostly
;
#ifdef __LP64__
#define MAX_MEM (~0UL)
...
...
@@ -73,7 +73,7 @@ int npmem_ranges;
#define MAX_MEM (3584U*1024U*1024U)
#endif
/* !__LP64__ */
static
unsigned
long
mem_limit
=
MAX_MEM
;
static
unsigned
long
mem_limit
__read_mostly
=
MAX_MEM
;
static
void
__init
mem_limit_func
(
void
)
{
...
...
@@ -300,6 +300,13 @@ static void __init setup_bootmem(void)
max_pfn
=
start_pfn
+
npages
;
}
/* IOMMU is always used to access "high mem" on those boxes
* that can support enough mem that a PCI device couldn't
* directly DMA to any physical addresses.
* ISA DMA support will need to revisit this.
*/
max_low_pfn
=
max_pfn
;
if
((
bootmap_pfn
-
bootmap_start_pfn
)
!=
bootmap_pages
)
{
printk
(
KERN_WARNING
"WARNING! bootmap sizing is messed up!
\n
"
);
BUG
();
...
...
@@ -431,11 +438,11 @@ void free_initmem(void)
#define SET_MAP_OFFSET(x) ((void *)(((unsigned long)(x) + VM_MAP_OFFSET) \
& ~(VM_MAP_OFFSET-1)))
void
*
vmalloc_start
;
void
*
vmalloc_start
__read_mostly
;
EXPORT_SYMBOL
(
vmalloc_start
);
#ifdef CONFIG_PA11
unsigned
long
pcxl_dma_start
;
unsigned
long
pcxl_dma_start
__read_mostly
;
#endif
void
__init
mem_init
(
void
)
...
...
@@ -475,7 +482,7 @@ int do_check_pgt_cache(int low, int high)
return
0
;
}
unsigned
long
*
empty_zero_page
;
unsigned
long
*
empty_zero_page
__read_mostly
;
void
show_mem
(
void
)
{
...
...
@@ -998,7 +1005,7 @@ void flush_tlb_all(void)
void
flush_tlb_all
(
void
)
{
spin_lock
(
&
sid_lock
);
flush_tlb_all_local
();
flush_tlb_all_local
(
NULL
);
recycle_sids
();
spin_unlock
(
&
sid_lock
);
}
...
...
arch/parisc/mm/ioremap.c
View file @
05f6ece6
/*
* arch/parisc/mm/ioremap.c
*
* Re-map IO memory to kernel address space so that we can access it.
* This is needed for high PCI addresses that aren't mapped in the
* 640k-1MB IO memory area on PC's
*
* (C) Copyright 1995 1996 Linus Torvalds
* (C) Copyright 2001 Helge Deller <deller@gmx.de>
* (C) Copyright 2005 Kyle McMartin <kyle@parisc-linux.org>
*/
#include <linux/vmalloc.h>
...
...
@@ -14,81 +11,107 @@
#include <linux/module.h>
#include <asm/io.h>
#include <asm/pgalloc.h>
#include <asm/tlbflush.h>
#include <asm/cacheflush.h>
static
inline
void
remap_area_pte
(
pte_t
*
pte
,
unsigned
long
address
,
unsigned
long
size
,
unsigned
long
phys_addr
,
unsigned
long
flags
)
static
inline
void
remap_area_pte
(
pte_t
*
pte
,
unsigned
long
address
,
unsigned
long
size
,
unsigned
long
phys_addr
,
unsigned
long
flags
)
{
unsigned
long
end
;
unsigned
long
end
,
pfn
;
pgprot_t
pgprot
=
__pgprot
(
_PAGE_PRESENT
|
_PAGE_RW
|
_PAGE_DIRTY
|
_PAGE_ACCESSED
|
flags
);
address
&=
~
PMD_MASK
;
end
=
address
+
size
;
if
(
end
>
PMD_SIZE
)
end
=
PMD_SIZE
;
if
(
address
>=
end
)
BUG
();
BUG_ON
(
address
>=
end
);
pfn
=
phys_addr
>>
PAGE_SHIFT
;
do
{
if
(
!
pte_none
(
*
pte
))
{
printk
(
KERN_ERR
"remap_area_pte: page already exists
\n
"
);
BUG
();
}
set_pte
(
pte
,
mk_pte_phys
(
phys_addr
,
__pgprot
(
_PAGE_PRESENT
|
_PAGE_RW
|
_PAGE_DIRTY
|
_PAGE_ACCESSED
|
flags
)));
BUG_ON
(
!
pte_none
(
*
pte
));
set_pte
(
pte
,
pfn_pte
(
pfn
,
pgprot
));
address
+=
PAGE_SIZE
;
p
hys_addr
+=
PAGE_SIZE
;
p
fn
++
;
pte
++
;
}
while
(
address
&&
(
address
<
end
));
}
static
inline
int
remap_area_pmd
(
pmd_t
*
pmd
,
unsigned
long
address
,
unsigned
long
size
,
unsigned
long
phys_addr
,
unsigned
long
flags
)
static
inline
int
remap_area_pmd
(
pmd_t
*
pmd
,
unsigned
long
address
,
unsigned
long
size
,
unsigned
long
phys_addr
,
unsigned
long
flags
)
{
unsigned
long
end
;
address
&=
~
PGDIR_MASK
;
end
=
address
+
size
;
if
(
end
>
PGDIR_SIZE
)
end
=
PGDIR_SIZE
;
BUG_ON
(
address
>=
end
);
phys_addr
-=
address
;
if
(
address
>=
end
)
BUG
();
do
{
pte_t
*
pte
=
pte_alloc_kernel
(
pmd
,
address
);
pte_t
*
pte
=
pte_alloc_kernel
(
pmd
,
address
);
if
(
!
pte
)
return
-
ENOMEM
;
remap_area_pte
(
pte
,
address
,
end
-
address
,
address
+
phys_addr
,
flags
);
remap_area_pte
(
pte
,
address
,
end
-
address
,
address
+
phys_addr
,
flags
);
address
=
(
address
+
PMD_SIZE
)
&
PMD_MASK
;
pmd
++
;
}
while
(
address
&&
(
address
<
end
));
return
0
;
}
#if (USE_HPPA_IOREMAP)
static
int
remap_area_pages
(
unsigned
long
address
,
unsigned
long
phys_addr
,
unsigned
long
size
,
unsigned
long
flags
)
#if USE_HPPA_IOREMAP
static
int
remap_area_pages
(
unsigned
long
address
,
unsigned
long
phys_addr
,
unsigned
long
size
,
unsigned
long
flags
)
{
int
erro
r
;
pgd_t
*
dir
;
pgd_t
*
di
r
;
int
error
=
0
;
unsigned
long
end
=
address
+
size
;
BUG_ON
(
address
>=
end
);
phys_addr
-=
address
;
dir
=
pgd_offset
(
&
init_mm
,
address
);
dir
=
pgd_offset_k
(
address
);
flush_cache_all
();
if
(
address
>=
end
)
BUG
();
do
{
pud_t
*
pud
;
pmd_t
*
pmd
;
pmd
=
pmd_alloc
(
&
init_mm
,
dir
,
address
);
error
=
-
ENOMEM
;
pud
=
pud_alloc
(
&
init_mm
,
dir
,
address
);
if
(
!
pud
)
break
;
pmd
=
pmd_alloc
(
&
init_mm
,
pud
,
address
);
if
(
!
pmd
)
break
;
if
(
remap_area_pmd
(
pmd
,
address
,
end
-
address
,
phys_addr
+
address
,
flags
))
phys_addr
+
address
,
flags
))
break
;
error
=
0
;
address
=
(
address
+
PGDIR_SIZE
)
&
PGDIR_MASK
;
dir
++
;
}
while
(
address
&&
(
address
<
end
));
flush_tlb_all
();
return
error
;
}
#endif
/* USE_HPPA_IOREMAP */
...
...
@@ -123,8 +146,7 @@ EXPORT_SYMBOL(__raw_bad_addr);
/*
* Remap an arbitrary physical address space into the kernel virtual
* address space. Needed when the kernel wants to access high addresses
* directly.
* address space.
*
* NOTE! We need to allow non-page-aligned mappings too: we will obviously
* have to convert them into an offset in a page-aligned mapping, but the
...
...
@@ -148,8 +170,8 @@ void __iomem * __ioremap(unsigned long phys_addr, unsigned long size, unsigned l
#endif
#else
void
*
addr
;
struct
vm_struct
*
area
;
void
*
addr
;
struct
vm_struct
*
area
;
unsigned
long
offset
,
last_addr
;
/* Don't allow wraparound or zero size */
...
...
@@ -167,9 +189,11 @@ void __iomem * __ioremap(unsigned long phys_addr, unsigned long size, unsigned l
t_addr
=
__va
(
phys_addr
);
t_end
=
t_addr
+
(
size
-
1
);
for
(
page
=
virt_to_page
(
t_addr
);
page
<=
virt_to_page
(
t_end
);
page
++
)
for
(
page
=
virt_to_page
(
t_addr
);
page
<=
virt_to_page
(
t_end
);
page
++
)
{
if
(
!
PageReserved
(
page
))
return
NULL
;
}
}
/*
...
...
@@ -185,11 +209,13 @@ void __iomem * __ioremap(unsigned long phys_addr, unsigned long size, unsigned l
area
=
get_vm_area
(
size
,
VM_IOREMAP
);
if
(
!
area
)
return
NULL
;
addr
=
area
->
addr
;
if
(
remap_area_pages
((
unsigned
long
)
addr
,
phys_addr
,
size
,
flags
))
{
vfree
(
addr
);
return
NULL
;
}
return
(
void
__iomem
*
)
(
offset
+
(
char
*
)
addr
);
#endif
}
...
...
drivers/parisc/dino.c
View file @
05f6ece6
...
...
@@ -83,7 +83,8 @@
** bus number for each dino.
*/
#define is_card_dino(id) ((id)->hw_type == HPHW_A_DMA)
#define is_card_dino(id) ((id)->hw_type == HPHW_A_DMA)
#define is_cujo(id) ((id)->hversion == 0x682)
#define DINO_IAR0 0x004
#define DINO_IODC_ADDR 0x008
...
...
@@ -124,6 +125,7 @@
#define DINO_IRQS 11
/* bits 0-10 are architected */
#define DINO_IRR_MASK 0x5ff
/* only 10 bits are implemented */
#define DINO_LOCAL_IRQS (DINO_IRQS+1)
#define DINO_MASK_IRQ(x) (1<<(x))
...
...
@@ -146,7 +148,7 @@ struct dino_device
unsigned
long
txn_addr
;
/* EIR addr to generate interrupt */
u32
txn_data
;
/* EIR data assign to each dino */
u32
imr
;
/* IRQ's which are enabled */
int
global_irq
[
12
];
/* map IMR bit to global irq */
int
global_irq
[
DINO_LOCAL_IRQS
];
/* map IMR bit to global irq */
#ifdef DINO_DEBUG
unsigned
int
dino_irr0
;
/* save most recent IRQ line stat */
#endif
...
...
@@ -297,7 +299,7 @@ struct pci_port_ops dino_port_ops = {
static
void
dino_disable_irq
(
unsigned
int
irq
)
{
struct
dino_device
*
dino_dev
=
irq_desc
[
irq
].
handler_data
;
int
local_irq
=
gsc_find_local_irq
(
irq
,
dino_dev
->
global_irq
,
irq
);
int
local_irq
=
gsc_find_local_irq
(
irq
,
dino_dev
->
global_irq
,
DINO_LOCAL_IRQS
);
DBG
(
KERN_WARNING
"%s(0x%p, %d)
\n
"
,
__FUNCTION__
,
dino_dev
,
irq
);
...
...
@@ -309,7 +311,7 @@ static void dino_disable_irq(unsigned int irq)
static
void
dino_enable_irq
(
unsigned
int
irq
)
{
struct
dino_device
*
dino_dev
=
irq_desc
[
irq
].
handler_data
;
int
local_irq
=
gsc_find_local_irq
(
irq
,
dino_dev
->
global_irq
,
irq
);
int
local_irq
=
gsc_find_local_irq
(
irq
,
dino_dev
->
global_irq
,
DINO_LOCAL_IRQS
);
u32
tmp
;
DBG
(
KERN_WARNING
"%s(0x%p, %d)
\n
"
,
__FUNCTION__
,
dino_dev
,
irq
);
...
...
@@ -435,6 +437,21 @@ static void dino_choose_irq(struct parisc_device *dev, void *ctrl)
dino_assign_irq
(
dino
,
irq
,
&
dev
->
irq
);
}
/*
* Cirrus 6832 Cardbus reports wrong irq on RDI Tadpole PARISC Laptop (deller@gmx.de)
* (the irqs are off-by-one, not sure yet if this is a cirrus, dino-hardware or dino-driver problem...)
*/
static
void
__devinit
quirk_cirrus_cardbus
(
struct
pci_dev
*
dev
)
{
u8
new_irq
=
dev
->
irq
-
1
;
printk
(
KERN_INFO
"PCI: Cirrus Cardbus IRQ fixup for %s, from %d to %d
\n
"
,
pci_name
(
dev
),
dev
->
irq
,
new_irq
);
dev
->
irq
=
new_irq
;
}
DECLARE_PCI_FIXUP_ENABLE
(
PCI_VENDOR_ID_CIRRUS
,
PCI_DEVICE_ID_CIRRUS_6832
,
quirk_cirrus_cardbus
);
static
void
__init
dino_bios_init
(
void
)
{
...
...
@@ -666,7 +683,6 @@ dino_fixup_bus(struct pci_bus *bus)
printk
(
KERN_WARNING
"Device %s has unassigned IRQ
\n
"
,
pci_name
(
dev
));
#endif
}
else
{
/* Adjust INT_LINE for that busses region */
dino_assign_irq
(
dino_dev
,
dev
->
irq
,
&
dev
->
irq
);
}
...
...
@@ -872,7 +888,7 @@ static int __init dino_common_init(struct parisc_device *dev,
/* allocate I/O Port resource region */
res
=
&
dino_dev
->
hba
.
io_space
;
if
(
dev
->
id
.
hversion
==
0x680
||
is_card_din
o
(
&
dev
->
id
))
{
if
(
!
is_cuj
o
(
&
dev
->
id
))
{
res
->
name
=
"Dino I/O Port"
;
}
else
{
res
->
name
=
"Cujo I/O Port"
;
...
...
@@ -927,7 +943,7 @@ static int __init dino_probe(struct parisc_device *dev)
if
(
is_card_dino
(
&
dev
->
id
))
{
version
=
"3.x (card mode)"
;
}
else
{
if
(
dev
->
id
.
hversion
==
0x680
)
{
if
(
!
is_cujo
(
&
dev
->
id
)
)
{
if
(
dev
->
id
.
hversion_rev
<
4
)
{
version
=
dino_vers
[
dev
->
id
.
hversion_rev
];
}
...
...
drivers/parisc/eisa.c
View file @
05f6ece6
...
...
@@ -57,7 +57,7 @@
static
DEFINE_SPINLOCK
(
eisa_irq_lock
);
void
__iomem
*
eisa_eeprom_addr
;
void
__iomem
*
eisa_eeprom_addr
__read_mostly
;
/* We can only have one EISA adapter in the system because neither
* implementation can be flexed.
...
...
@@ -141,7 +141,7 @@ static int slave_mask;
* in the furure.
*/
/* irq 13,8,2,1,0 must be edge */
static
unsigned
int
eisa_irq_level
;
/* default to edge triggered */
static
unsigned
int
eisa_irq_level
__read_mostly
;
/* default to edge triggered */
/* called by free irq */
...
...
drivers/parisc/eisa_eeprom.c
View file @
05f6ece6
...
...
@@ -48,7 +48,7 @@ static loff_t eisa_eeprom_llseek(struct file *file, loff_t offset, int origin )
}
static
ssize_t
eisa_eeprom_read
(
struct
file
*
file
,
char
*
buf
,
size_t
count
,
loff_t
*
ppos
)
char
__user
*
buf
,
size_t
count
,
loff_t
*
ppos
)
{
unsigned
char
*
tmp
;
ssize_t
ret
;
...
...
drivers/parisc/lasi.c
View file @
05f6ece6
...
...
@@ -150,7 +150,7 @@ void __init lasi_led_init(unsigned long lasi_hpa)
*
*/
static
unsigned
long
lasi_power_off_hpa
;
static
unsigned
long
lasi_power_off_hpa
__read_mostly
;
static
void
lasi_power_off
(
void
)
{
...
...
drivers/parisc/lba_pci.c
View file @
05f6ece6
...
...
@@ -167,7 +167,7 @@
/* non-postable I/O port space, densely packed */
#define LBA_PORT_BASE (PCI_F_EXTEND | 0xfee00000UL)
static
void
__iomem
*
astro_iop_base
;
static
void
__iomem
*
astro_iop_base
__read_mostly
;
#define ELROY_HVERS 0x782
#define MERCURY_HVERS 0x783
...
...
@@ -695,11 +695,71 @@ lba_claim_dev_resources(struct pci_dev *dev)
}
}
}
/*
* truncate_pat_collision: Deal with overlaps or outright collisions
* between PAT PDC reported ranges.
*
* Broken PA8800 firmware will report lmmio range that
* overlaps with CPU HPA. Just truncate the lmmio range.
*
* BEWARE: conflicts with this lmmio range may be an
* elmmio range which is pointing down another rope.
*
* FIXME: only deals with one collision per range...theoretically we
* could have several. Supporting more than one collision will get messy.
*/
static
unsigned
long
truncate_pat_collision
(
struct
resource
*
root
,
struct
resource
*
new
)
{
unsigned
long
start
=
new
->
start
;
unsigned
long
end
=
new
->
end
;
struct
resource
*
tmp
=
root
->
child
;
if
(
end
<=
start
||
start
<
root
->
start
||
!
tmp
)
return
0
;
/* find first overlap */
while
(
tmp
&&
tmp
->
end
<
start
)
tmp
=
tmp
->
sibling
;
/* no entries overlap */
if
(
!
tmp
)
return
0
;
/* found one that starts behind the new one
** Don't need to do anything.
*/
if
(
tmp
->
start
>=
end
)
return
0
;
if
(
tmp
->
start
<=
start
)
{
/* "front" of new one overlaps */
new
->
start
=
tmp
->
end
+
1
;
if
(
tmp
->
end
>=
end
)
{
/* AACCKK! totally overlaps! drop this range. */
return
1
;
}
}
if
(
tmp
->
end
<
end
)
{
/* "end" of new one overlaps */
new
->
end
=
tmp
->
start
-
1
;
}
printk
(
KERN_WARNING
"LBA: Truncating lmmio_space [%lx/%lx] "
"to [%lx,%lx]
\n
"
,
start
,
end
,
new
->
start
,
new
->
end
);
return
0
;
/* truncation successful */
}
#else
#define lba_claim_dev_resources(dev)
#define lba_claim_dev_resources(dev) do { } while (0)
#define truncate_pat_collision(r,n) (0)
#endif
/*
** The algorithm is generic code.
** But it needs to access local data structures to get the IRQ base.
...
...
@@ -747,6 +807,9 @@ lba_fixup_bus(struct pci_bus *bus)
lba_dump_res
(
&
ioport_resource
,
2
);
BUG
();
}
/* advertize Host bridge resources to PCI bus */
bus
->
resource
[
0
]
=
&
(
ldev
->
hba
.
io_space
);
i
=
1
;
if
(
ldev
->
hba
.
elmmio_space
.
start
)
{
err
=
request_resource
(
&
iomem_resource
,
...
...
@@ -760,23 +823,35 @@ lba_fixup_bus(struct pci_bus *bus)
/* lba_dump_res(&iomem_resource, 2); */
/* BUG(); */
}
}
else
bus
->
resource
[
i
++
]
=
&
(
ldev
->
hba
.
elmmio_space
);
}
err
=
request_resource
(
&
iomem_resource
,
&
(
ldev
->
hba
.
lmmio_space
));
if
(
err
<
0
)
{
/* FIXME overlaps with elmmio will fail here.
* Need to prune (or disable) the distributed range.
*
* BEWARE: conflicts with this lmmio range may be
* elmmio range which is pointing down another rope.
*/
printk
(
"FAILED: lba_fixup_bus() request for "
/* Overlaps with elmmio can (and should) fail here.
* We will prune (or ignore) the distributed range.
*
* FIXME: SBA code should register all elmmio ranges first.
* that would take care of elmmio ranges routed
* to a different rope (already discovered) from
* getting registered *after* LBA code has already
* registered it's distributed lmmio range.
*/
if
(
truncate_pat_collision
(
&
iomem_resource
,
&
(
ldev
->
hba
.
lmmio_space
)))
{
printk
(
KERN_WARNING
"LBA: lmmio_space [%lx/%lx] duplicate!
\n
"
,
ldev
->
hba
.
lmmio_space
.
start
,
ldev
->
hba
.
lmmio_space
.
end
);
}
else
{
err
=
request_resource
(
&
iomem_resource
,
&
(
ldev
->
hba
.
lmmio_space
));
if
(
err
<
0
)
{
printk
(
KERN_ERR
"FAILED: lba_fixup_bus() request for "
"lmmio_space [%lx/%lx]
\n
"
,
ldev
->
hba
.
lmmio_space
.
start
,
ldev
->
hba
.
lmmio_space
.
end
);
/* lba_dump_res(&iomem_resource, 2); */
}
else
bus
->
resource
[
i
++
]
=
&
(
ldev
->
hba
.
lmmio_space
);
}
#ifdef CONFIG_64BIT
...
...
@@ -791,18 +866,10 @@ lba_fixup_bus(struct pci_bus *bus)
lba_dump_res
(
&
iomem_resource
,
2
);
BUG
();
}
bus
->
resource
[
i
++
]
=
&
(
ldev
->
hba
.
gmmio_space
);
}
#endif
/* advertize Host bridge resources to PCI bus */
bus
->
resource
[
0
]
=
&
(
ldev
->
hba
.
io_space
);
bus
->
resource
[
1
]
=
&
(
ldev
->
hba
.
lmmio_space
);
i
=
2
;
if
(
ldev
->
hba
.
elmmio_space
.
start
)
bus
->
resource
[
i
++
]
=
&
(
ldev
->
hba
.
elmmio_space
);
if
(
ldev
->
hba
.
gmmio_space
.
start
)
bus
->
resource
[
i
++
]
=
&
(
ldev
->
hba
.
gmmio_space
);
}
list_for_each
(
ln
,
&
bus
->
devices
)
{
...
...
drivers/parisc/led.c
View file @
05f6ece6
...
...
@@ -3,7 +3,7 @@
*
* (c) Copyright 2000 Red Hat Software
* (c) Copyright 2000 Helge Deller <hdeller@redhat.com>
* (c) Copyright 2001-200
4
Helge Deller <deller@gmx.de>
* (c) Copyright 2001-200
5
Helge Deller <deller@gmx.de>
* (c) Copyright 2001 Randolph Chung <tausq@debian.org>
*
* This program is free software; you can redistribute it and/or modify
...
...
@@ -56,13 +56,13 @@
relatively large amount of CPU time, some of the calculations can be
turned off with the following variables (controlled via procfs) */
static
int
led_type
=
-
1
;
static
int
led_type
__read_mostly
=
-
1
;
static
unsigned
char
lastleds
;
/* LED state from most recent update */
static
unsigned
int
led_heartbeat
=
1
;
static
unsigned
int
led_diskio
=
1
;
static
unsigned
int
led_lanrxtx
=
1
;
static
char
lcd_text
[
32
];
static
char
lcd_text_default
[
32
];
static
unsigned
int
led_heartbeat
__read_mostly
=
1
;
static
unsigned
int
led_diskio
__read_mostly
=
1
;
static
unsigned
int
led_lanrxtx
__read_mostly
=
1
;
static
char
lcd_text
[
32
]
__read_mostly
;
static
char
lcd_text_default
[
32
]
__read_mostly
;
static
struct
workqueue_struct
*
led_wq
;
...
...
@@ -108,7 +108,7 @@ struct pdc_chassis_lcd_info_ret_block {
/* lcd_info is pre-initialized to the values needed to program KittyHawk LCD's
* HP seems to have used Sharp/Hitachi HD44780 LCDs most of the time. */
static
struct
pdc_chassis_lcd_info_ret_block
lcd_info
__attribute__
((
aligned
(
8
)))
=
lcd_info
__attribute__
((
aligned
(
8
)))
__read_mostly
=
{
.
model
=
DISPLAY_MODEL_LCD
,
.
lcd_width
=
16
,
...
...
@@ -144,7 +144,7 @@ static int start_task(void)
device_initcall
(
start_task
);
/* ptr to LCD/LED-specific function */
static
void
(
*
led_func_ptr
)
(
unsigned
char
);
static
void
(
*
led_func_ptr
)
(
unsigned
char
)
__read_mostly
;
#ifdef CONFIG_PROC_FS
static
int
led_proc_read
(
char
*
page
,
char
**
start
,
off_t
off
,
int
count
,
...
...
drivers/parisc/pdc_stable.c
View file @
05f6ece6
...
...
@@ -56,7 +56,7 @@
#include <asm/uaccess.h>
#include <asm/hardware.h>
#define PDCS_VERSION "0.
09
"
#define PDCS_VERSION "0.
10
"
#define PDCS_ADDR_PPRI 0x00
#define PDCS_ADDR_OSID 0x40
...
...
@@ -70,7 +70,7 @@ MODULE_DESCRIPTION("sysfs interface to HP PDC Stable Storage data");
MODULE_LICENSE
(
"GPL"
);
MODULE_VERSION
(
PDCS_VERSION
);
static
unsigned
long
pdcs_size
=
0
;
static
unsigned
long
pdcs_size
__read_mostly
;
/* This struct defines what we need to deal with a parisc pdc path entry */
struct
pdcspath_entry
{
...
...
@@ -194,7 +194,8 @@ pdcspath_store(struct pdcspath_entry *entry)
return
-
EIO
;
}
entry
->
ready
=
1
;
/* kobject is already registered */
entry
->
ready
=
2
;
DPRINTK
(
"%s: device: 0x%p
\n
"
,
__func__
,
entry
->
dev
);
...
...
@@ -653,15 +654,21 @@ pdcs_register_pathentries(void)
{
unsigned
short
i
;
struct
pdcspath_entry
*
entry
;
int
err
;
for
(
i
=
0
;
(
entry
=
pdcspath_entries
[
i
]);
i
++
)
{
if
(
pdcspath_fetch
(
entry
)
<
0
)
continue
;
kobject_set_name
(
&
entry
->
kobj
,
"%s"
,
entry
->
name
);
if
((
err
=
kobject_set_name
(
&
entry
->
kobj
,
"%s"
,
entry
->
name
)))
return
err
;
kobj_set_kset_s
(
entry
,
paths_subsys
);
kobject_register
(
&
entry
->
kobj
);
if
((
err
=
kobject_register
(
&
entry
->
kobj
)))
return
err
;
/* kobject is now registered */
entry
->
ready
=
2
;
if
(
!
entry
->
dev
)
continue
;
...
...
@@ -675,14 +682,14 @@ pdcs_register_pathentries(void)
/**
* pdcs_unregister_pathentries - Routine called when unregistering the module.
*/
static
inline
void
__exit
static
inline
void
pdcs_unregister_pathentries
(
void
)
{
unsigned
short
i
;
struct
pdcspath_entry
*
entry
;
for
(
i
=
0
;
(
entry
=
pdcspath_entries
[
i
]);
i
++
)
if
(
entry
->
ready
)
if
(
entry
->
ready
>=
2
)
kobject_unregister
(
&
entry
->
kobj
);
}
...
...
@@ -704,7 +711,7 @@ pdc_stable_init(void)
/* For now we'll register the pdc subsys within this driver */
if
((
rc
=
firmware_register
(
&
pdc_subsys
)))
return
rc
;
goto
fail_firmreg
;
/* Don't forget the info entry */
for
(
i
=
0
;
(
attr
=
pdcs_subsys_attrs
[
i
])
&&
!
error
;
i
++
)
...
...
@@ -713,12 +720,25 @@ pdc_stable_init(void)
/* register the paths subsys as a subsystem of pdc subsys */
kset_set_kset_s
(
&
paths_subsys
,
pdc_subsys
);
subsystem_register
(
&
paths_subsys
);
if
((
rc
=
subsystem_register
(
&
paths_subsys
)))
goto
fail_subsysreg
;
/* now we create all "files" for the paths subsys */
pdcs_register_pathentries
();
if
((
rc
=
pdcs_register_pathentries
()))
goto
fail_pdcsreg
;
return
rc
;
return
0
;
fail_pdcsreg:
pdcs_unregister_pathentries
();
subsystem_unregister
(
&
paths_subsys
);
fail_subsysreg:
firmware_unregister
(
&
pdc_subsys
);
fail_firmreg:
printk
(
KERN_INFO
"PDC Stable Storage bailing out
\n
"
);
return
rc
;
}
static
void
__exit
...
...
drivers/parisc/power.c
View file @
05f6ece6
...
...
@@ -2,7 +2,7 @@
* linux/arch/parisc/kernel/power.c
* HP PARISC soft power switch support driver
*
* Copyright (c) 2001-200
2
Helge Deller <deller@gmx.de>
* Copyright (c) 2001-200
5
Helge Deller <deller@gmx.de>
* All rights reserved.
*
*
...
...
@@ -102,7 +102,7 @@ static DECLARE_WORK(poweroff_work, deferred_poweroff, NULL);
static
void
poweroff
(
void
)
{
static
int
powering_off
;
static
int
powering_off
__read_mostly
;
if
(
powering_off
)
return
;
...
...
@@ -113,7 +113,7 @@ static void poweroff(void)
/* local time-counter for shutdown */
static
int
shutdown_timer
;
static
int
shutdown_timer
__read_mostly
;
/* check, give feedback and start shutdown after one second */
static
void
process_shutdown
(
void
)
...
...
@@ -139,7 +139,7 @@ static void process_shutdown(void)
DECLARE_TASKLET_DISABLED
(
power_tasklet
,
NULL
,
0
);
/* soft power switch enabled/disabled */
int
pwrsw_enabled
=
1
;
int
pwrsw_enabled
__read_mostly
=
1
;
/*
* On gecko style machines (e.g. 712/xx and 715/xx)
...
...
@@ -149,7 +149,7 @@ int pwrsw_enabled = 1;
*/
static
void
gecko_tasklet_func
(
unsigned
long
unused
)
{
if
(
!
pwrsw_enabled
)
if
(
unlikely
(
!
pwrsw_enabled
)
)
return
;
if
(
__getDIAG
(
25
)
&
0x80000000
)
{
...
...
@@ -173,7 +173,7 @@ static void polling_tasklet_func(unsigned long soft_power_reg)
{
unsigned
long
current_status
;
if
(
!
pwrsw_enabled
)
if
(
unlikely
(
!
pwrsw_enabled
)
)
return
;
current_status
=
gsc_readl
(
soft_power_reg
);
...
...
drivers/parport/Kconfig
View file @
05f6ece6
...
...
@@ -121,6 +121,7 @@ config PARPORT_GSC
tristate
default GSC
depends on PARPORT
select PARPORT_NOT_PC
config PARPORT_SUNBPP
tristate "Sparc hardware (EXPERIMENTAL)"
...
...
drivers/video/stifb.c
View file @
05f6ece6
...
...
@@ -3,7 +3,7 @@
* Low level Frame buffer driver for HP workstations with
* STI (standard text interface) video firmware.
*
* Copyright (C) 2001-200
4
Helge Deller <deller@gmx.de>
* Copyright (C) 2001-200
5
Helge Deller <deller@gmx.de>
* Portions Copyright (C) 2001 Thomas Bogendoerfer <tsbogend@alpha.franken.de>
*
* Based on:
...
...
@@ -73,16 +73,13 @@
#include "sticore.h"
/* REGION_BASE(fb_info, index) returns the virtual address for region <index> */
#ifdef __LP64__
#define REGION_BASE(fb_info, index) \
(fb_info->sti->glob_cfg->region_ptrs[index] | 0xffffffff00000000)
#else
#define REGION_BASE(fb_info, index) \
fb_info->sti->glob_cfg->region_ptrs[index]
#endif
#define REGION_BASE(fb_info, index) \
F_EXTEND(fb_info->sti->glob_cfg->region_ptrs[index])
#define NGLEDEVDEPROM_CRT_REGION 1
#define NR_PALETTE 256
typedef
struct
{
__s32
video_config_reg
;
__s32
misc_video_start
;
...
...
@@ -112,7 +109,7 @@ struct stifb_info {
ngle_rom_t
ngle_rom
;
struct
sti_struct
*
sti
;
int
deviceSpecificConfig
;
u32
pseudo_palette
[
25
6
];
u32
pseudo_palette
[
1
6
];
};
static
int
__initdata
stifb_bpp_pref
[
MAX_STI_ROMS
];
...
...
@@ -352,10 +349,10 @@ ARTIST_ENABLE_DISABLE_DISPLAY(struct stifb_info *fb, int enable)
#define IS_888_DEVICE(fb) \
(!(IS_24_DEVICE(fb)))
#define GET_FIFO_SLOTS(fb, cnt, numslots)
\
{ while (cnt < numslots)
\
#define GET_FIFO_SLOTS(fb, cnt, numslots) \
{ while (cnt < numslots) \
cnt = READ_WORD(fb, REG_34); \
cnt -= numslots;
\
cnt -= numslots; \
}
#define IndexedDcd 0
/* Pixel data is indexed (pseudo) color */
...
...
@@ -995,7 +992,7 @@ stifb_setcolreg(u_int regno, u_int red, u_int green,
struct
stifb_info
*
fb
=
(
struct
stifb_info
*
)
info
;
u32
color
;
if
(
regno
>=
256
)
/* no. of hw registers */
if
(
regno
>=
NR_PALETTE
)
return
1
;
red
>>=
8
;
...
...
@@ -1005,8 +1002,8 @@ stifb_setcolreg(u_int regno, u_int red, u_int green,
DEBUG_OFF
();
START_IMAGE_COLORMAP_ACCESS
(
fb
);
if
(
fb
->
info
.
var
.
grayscale
)
{
if
(
unlikely
(
fb
->
info
.
var
.
grayscale
)
)
{
/* gray = 0.30*R + 0.59*G + 0.11*B */
color
=
((
red
*
77
)
+
(
green
*
151
)
+
...
...
@@ -1017,17 +1014,17 @@ stifb_setcolreg(u_int regno, u_int red, u_int green,
(
blue
));
}
if
(
info
->
var
.
bits_per_pixel
==
32
)
{
((
u32
*
)(
info
->
pseudo_palette
))[
regno
]
=
(
red
<<
info
->
var
.
red
.
offset
)
|
(
green
<<
info
->
var
.
green
.
offset
)
|
(
blue
<<
info
->
var
.
blue
.
offset
);
}
else
{
((
u32
*
)(
info
->
pseudo_palette
))[
regno
]
=
regno
;
if
(
fb
->
info
.
fix
.
visual
==
FB_VISUAL_DIRECTCOLOR
)
{
struct
fb_var_screeninfo
*
var
=
&
fb
->
info
.
var
;
if
(
regno
<
16
)
(
(
u32
*
)
fb
->
info
.
pseudo_palette
)[
regno
]
=
regno
<<
var
->
red
.
offset
|
regno
<<
var
->
green
.
offset
|
regno
<<
var
->
blue
.
offset
;
}
WRITE_IMAGE_COLOR
(
fb
,
regno
,
color
);
if
(
fb
->
id
==
S9000_ID_HCRX
)
{
NgleLutBltCtl
lutBltCtl
;
...
...
@@ -1066,9 +1063,9 @@ stifb_blank(int blank_mode, struct fb_info *info)
case
S9000_ID_HCRX
:
HYPER_ENABLE_DISABLE_DISPLAY
(
fb
,
enable
);
break
;
case
S9000_ID_A1659A
:
;
/* fall through */
case
S9000_ID_TIMBER
:
;
case
CRX24_OVERLAY_PLANES
:
;
case
S9000_ID_A1659A
:
/* fall through */
case
S9000_ID_TIMBER
:
case
CRX24_OVERLAY_PLANES
:
default:
ENABLE_DISABLE_DISPLAY
(
fb
,
enable
);
break
;
...
...
@@ -1250,12 +1247,10 @@ stifb_init_fb(struct sti_struct *sti, int bpp_pref)
memset
(
&
fb
->
ngle_rom
,
0
,
sizeof
(
fb
->
ngle_rom
));
if
((
fb
->
sti
->
regions_phys
[
0
]
&
0xfc000000
)
==
(
fb
->
sti
->
regions_phys
[
2
]
&
0xfc000000
))
sti_rom_address
=
fb
->
sti
->
regions_phys
[
0
]
;
sti_rom_address
=
F_EXTEND
(
fb
->
sti
->
regions_phys
[
0
])
;
else
sti_rom_address
=
fb
->
sti
->
regions_phys
[
1
];
#ifdef __LP64__
sti_rom_address
|=
0xffffffff00000000
;
#endif
sti_rom_address
=
F_EXTEND
(
fb
->
sti
->
regions_phys
[
1
]);
fb
->
deviceSpecificConfig
=
gsc_readl
(
sti_rom_address
);
if
(
IS_24_DEVICE
(
fb
))
{
if
(
bpp_pref
==
8
||
bpp_pref
==
32
)
...
...
@@ -1315,7 +1310,7 @@ stifb_init_fb(struct sti_struct *sti, int bpp_pref)
break
;
case
32
:
fix
->
type
=
FB_TYPE_PACKED_PIXELS
;
fix
->
visual
=
FB_VISUAL_
TRUE
COLOR
;
fix
->
visual
=
FB_VISUAL_
DIRECT
COLOR
;
var
->
red
.
length
=
var
->
green
.
length
=
var
->
blue
.
length
=
var
->
transp
.
length
=
8
;
var
->
blue
.
offset
=
0
;
var
->
green
.
offset
=
8
;
...
...
@@ -1337,7 +1332,7 @@ stifb_init_fb(struct sti_struct *sti, int bpp_pref)
info
->
pseudo_palette
=
&
fb
->
pseudo_palette
;
/* This has to been done !!! */
fb_alloc_cmap
(
&
info
->
cmap
,
256
,
0
);
fb_alloc_cmap
(
&
info
->
cmap
,
NR_PALETTE
,
0
);
stifb_init_display
(
fb
);
if
(
!
request_mem_region
(
fix
->
smem_start
,
fix
->
smem_len
,
"stifb fb"
))
{
...
...
@@ -1488,7 +1483,3 @@ module_exit(stifb_cleanup);
MODULE_AUTHOR
(
"Helge Deller <deller@gmx.de>, Thomas Bogendoerfer <tsbogend@alpha.franken.de>"
);
MODULE_DESCRIPTION
(
"Framebuffer driver for HP's NGLE series graphics cards in HP PARISC machines"
);
MODULE_LICENSE
(
"GPL v2"
);
MODULE_PARM
(
bpp
,
"i"
);
MODULE_PARM_DESC
(
mem
,
"Bits per pixel (default: 8)"
);
include/asm-parisc/cache.h
View file @
05f6ece6
...
...
@@ -29,14 +29,14 @@
#define SMP_CACHE_BYTES L1_CACHE_BYTES
extern
void
flush_data_cache_local
(
void
);
/* flushes local data-cache only */
extern
void
flush_instruction_cache_local
(
void
);
/* flushes local code-cache only */
extern
void
flush_data_cache_local
(
void
*
);
/* flushes local data-cache only */
extern
void
flush_instruction_cache_local
(
void
*
);
/* flushes local code-cache only */
#ifdef CONFIG_SMP
extern
void
flush_data_cache
(
void
);
/* flushes data-cache only (all processors) */
extern
void
flush_instruction_cache
(
void
);
/* flushes i-cache only (all processors) */
#else
#define flush_data_cache
flush_data_cache_local
#define flush_instruction_cache
flush_instruction_cache_local
#define flush_data_cache
() flush_data_cache_local(NULL)
#define flush_instruction_cache
() flush_instruction_cache_local(NULL)
#endif
extern
void
parisc_cache_init
(
void
);
/* initializes cache-flushing */
...
...
include/asm-parisc/io.h
View file @
05f6ece6
...
...
@@ -41,7 +41,7 @@ extern void __raw_bad_addr(const volatile void __iomem *addr);
#define __raw_check_addr(addr) \
if (((unsigned long)addr >> NYBBLE_SHIFT) != 0xe) \
__raw_bad_addr(addr); \
addr = (void *)((unsigned long)addr | (0xfUL << NYBBLE_SHIFT));
addr = (void
__iomem
*)((unsigned long)addr | (0xfUL << NYBBLE_SHIFT));
#else
#define gsc_check_addr(addr)
#define __raw_check_addr(addr)
...
...
include/asm-parisc/page.h
View file @
05f6ece6
...
...
@@ -135,6 +135,13 @@ extern int npmem_ranges;
#define pfn_valid(pfn) ((pfn) < max_mapnr)
#endif
/* CONFIG_DISCONTIGMEM */
#ifdef CONFIG_HUGETLB_PAGE
#define HPAGE_SHIFT 22
/* 4MB (is this fixed?) */
#define HPAGE_SIZE ((1UL) << HPAGE_SHIFT)
#define HPAGE_MASK (~(HPAGE_SIZE - 1))
#define HUGETLB_PAGE_ORDER (HPAGE_SHIFT - PAGE_SHIFT)
#endif
#define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT)
#define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT)
...
...
include/asm-parisc/pci.h
View file @
05f6ece6
...
...
@@ -84,11 +84,17 @@ static __inline__ int pci_is_lmmio(struct pci_hba_data *hba, unsigned long a)
/*
** Convert between PCI (IO_VIEW) addresses and processor (PA_VIEW) addresses.
** See pcibios.c for more conversions used by Generic PCI code.
**
** Platform characteristics/firmware guarantee that
** (1) PA_VIEW - IO_VIEW = lmmio_offset for both LMMIO and ELMMIO
** (2) PA_VIEW == IO_VIEW for GMMIO
*/
#define PCI_BUS_ADDR(hba,a) (PCI_IS_LMMIO(hba,a) \
? ((a) - hba->lmmio_space_offset)
/* mangle LMMIO */
\
: (a))
/* GMMIO */
#define PCI_HOST_ADDR(hba,a) ((a) + hba->lmmio_space_offset)
#define PCI_HOST_ADDR(hba,a) (((a) & PCI_F_EXTEND) == 0 \
? (a) + hba->lmmio_space_offset \
: (a))
#else
/* !CONFIG_64BIT */
...
...
include/asm-parisc/processor.h
View file @
05f6ece6
...
...
@@ -144,16 +144,16 @@ struct thread_struct {
})
#define INIT_THREAD { \
regs: { gr:
{ 0, }, \
fr:
{ 0, }, \
sr:
{ 0, }, \
iasq:
{ 0, }, \
iaoq:
{ 0, }, \
cr27:
0, \
.regs = { .gr =
{ 0, }, \
.fr =
{ 0, }, \
.sr =
{ 0, }, \
.iasq =
{ 0, }, \
.iaoq =
{ 0, }, \
.cr27 =
0, \
}, \
task_size:
DEFAULT_TASK_SIZE, \
map_base:
DEFAULT_MAP_BASE, \
flags:
0 \
.task_size =
DEFAULT_TASK_SIZE, \
.map_base =
DEFAULT_MAP_BASE, \
.flags =
0 \
}
/*
...
...
include/asm-parisc/tlbflush.h
View file @
05f6ece6
...
...
@@ -22,6 +22,7 @@ extern spinlock_t pa_tlb_lock;
#define purge_tlb_end(x) spin_unlock(&pa_tlb_lock)
extern
void
flush_tlb_all
(
void
);
extern
void
flush_tlb_all_local
(
void
*
);
/*
* flush_tlb_mm()
...
...
include/linux/cache.h
View file @
05f6ece6
...
...
@@ -13,7 +13,7 @@
#define SMP_CACHE_BYTES L1_CACHE_BYTES
#endif
#if defined(CONFIG_X86) || defined(CONFIG_SPARC64) || defined(CONFIG_IA64)
#if defined(CONFIG_X86) || defined(CONFIG_SPARC64) || defined(CONFIG_IA64)
|| defined(CONFIG_PARISC)
#define __read_mostly __attribute__((__section__(".data.read_mostly")))
#else
#define __read_mostly
...
...
sound/oss/harmony.c
View file @
05f6ece6
...
...
@@ -1236,7 +1236,7 @@ harmony_driver_probe(struct parisc_device *dev)
}
/* Set the HPA of harmony */
harmony
.
hpa
=
(
struct
harmony_hpa
*
)
dev
->
hpa
;
harmony
.
hpa
=
(
struct
harmony_hpa
*
)
dev
->
hpa
.
start
;
harmony
.
dev
=
dev
;
/* Grab the ID and revision from the device */
...
...
@@ -1250,7 +1250,7 @@ harmony_driver_probe(struct parisc_device *dev)
printk
(
KERN_INFO
"Lasi Harmony Audio driver "
HARMONY_VERSION
", "
"h/w id %i, rev. %i at 0x%lx, IRQ %i
\n
"
,
id
,
rev
,
dev
->
hpa
,
harmony
.
dev
->
irq
);
id
,
rev
,
dev
->
hpa
.
start
,
harmony
.
dev
->
irq
);
/* Make sure the control bit isn't set, although I don't think it
ever is. */
...
...
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