Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
raspberrypi-kernel
提交
05f6ece6
R
raspberrypi-kernel
项目概览
openeuler
/
raspberrypi-kernel
通知
13
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
raspberrypi-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
05f6ece6
编写于
1月 10, 2006
作者:
L
Linus Torvalds
浏览文件
操作
浏览文件
下载
差异文件
Merge master.kernel.org:/pub/scm/linux/kernel/git/kyle/parisc-2.6
上级
35d138ae
58b6c58c
变更
37
隐藏空白更改
内联
并排
Showing
37 changed file
with
373 addition
and
228 deletion
+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
未找到文件。
arch/parisc/kernel/cache.c
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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. */
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录