Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
kernel_linux
提交
45bb5a7c
K
kernel_linux
项目概览
OpenHarmony
/
kernel_linux
上一次同步 4 年多
通知
15
Star
8
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kernel_linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
45bb5a7c
编写于
9月 13, 2008
作者:
D
David S. Miller
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
sparc32: Use PROM device probing for sun4c interrupt register.
Signed-off-by:
N
David S. Miller
<
davem@davemloft.net
>
上级
5ff0d55f
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
21 addition
and
26 deletion
+21
-26
arch/sparc/kernel/sun4c_irq.c
arch/sparc/kernel/sun4c_irq.c
+21
-26
未找到文件。
arch/sparc/kernel/sun4c_irq.c
浏览文件 @
45bb5a7c
...
@@ -59,7 +59,7 @@
...
@@ -59,7 +59,7 @@
*
*
* so don't go making it static, like I tried. sigh.
* so don't go making it static, like I tried. sigh.
*/
*/
unsigned
char
*
interrupt_enable
=
NULL
;
unsigned
char
__iomem
*
interrupt_enable
=
NULL
;
static
void
sun4c_disable_irq
(
unsigned
int
irq_nr
)
static
void
sun4c_disable_irq
(
unsigned
int
irq_nr
)
{
{
...
@@ -68,7 +68,7 @@ static void sun4c_disable_irq(unsigned int irq_nr)
...
@@ -68,7 +68,7 @@ static void sun4c_disable_irq(unsigned int irq_nr)
local_irq_save
(
flags
);
local_irq_save
(
flags
);
irq_nr
&=
(
NR_IRQS
-
1
);
irq_nr
&=
(
NR_IRQS
-
1
);
current_mask
=
*
interrupt_enable
;
current_mask
=
sbus_readb
(
interrupt_enable
)
;
switch
(
irq_nr
)
{
switch
(
irq_nr
)
{
case
1
:
case
1
:
new_mask
=
((
current_mask
)
&
(
~
(
SUN4C_INT_E1
)));
new_mask
=
((
current_mask
)
&
(
~
(
SUN4C_INT_E1
)));
...
@@ -86,7 +86,7 @@ static void sun4c_disable_irq(unsigned int irq_nr)
...
@@ -86,7 +86,7 @@ static void sun4c_disable_irq(unsigned int irq_nr)
local_irq_restore
(
flags
);
local_irq_restore
(
flags
);
return
;
return
;
}
}
*
interrupt_enable
=
new_mask
;
sbus_writeb
(
new_mask
,
interrupt_enable
)
;
local_irq_restore
(
flags
);
local_irq_restore
(
flags
);
}
}
...
@@ -97,7 +97,7 @@ static void sun4c_enable_irq(unsigned int irq_nr)
...
@@ -97,7 +97,7 @@ static void sun4c_enable_irq(unsigned int irq_nr)
local_irq_save
(
flags
);
local_irq_save
(
flags
);
irq_nr
&=
(
NR_IRQS
-
1
);
irq_nr
&=
(
NR_IRQS
-
1
);
current_mask
=
*
interrupt_enable
;
current_mask
=
sbus_readb
(
interrupt_enable
)
;
switch
(
irq_nr
)
{
switch
(
irq_nr
)
{
case
1
:
case
1
:
new_mask
=
((
current_mask
)
|
SUN4C_INT_E1
);
new_mask
=
((
current_mask
)
|
SUN4C_INT_E1
);
...
@@ -115,7 +115,7 @@ static void sun4c_enable_irq(unsigned int irq_nr)
...
@@ -115,7 +115,7 @@ static void sun4c_enable_irq(unsigned int irq_nr)
local_irq_restore
(
flags
);
local_irq_restore
(
flags
);
return
;
return
;
}
}
*
interrupt_enable
=
new_mask
;
sbus_writeb
(
new_mask
,
interrupt_enable
)
;
local_irq_restore
(
flags
);
local_irq_restore
(
flags
);
}
}
...
@@ -172,27 +172,22 @@ static void sun4c_nop(void) {}
...
@@ -172,27 +172,22 @@ static void sun4c_nop(void) {}
void
__init
sun4c_init_IRQ
(
void
)
void
__init
sun4c_init_IRQ
(
void
)
{
{
struct
linux_prom_registers
int_regs
[
2
];
struct
device_node
*
dp
;
int
ie_node
;
const
u32
*
addr
;
struct
resource
phyres
;
dp
=
of_find_node_by_name
(
NULL
,
"interrupt-enable"
);
ie_node
=
prom_searchsiblings
(
prom_getchild
(
prom_root_node
),
if
(
!
dp
)
{
"interrupt-enable"
);
prom_printf
(
"sun4c_init_IRQ: Unable to find interrupt-enable
\n
"
);
if
(
ie_node
==
0
)
prom_halt
();
panic
(
"Cannot find /interrupt-enable node"
);
}
/* Depending on the "address" property is bad news... */
addr
=
of_get_property
(
dp
,
"address"
,
NULL
);
interrupt_enable
=
NULL
;
if
(
!
addr
)
{
if
(
prom_getproperty
(
ie_node
,
"reg"
,
(
char
*
)
int_regs
,
prom_printf
(
"sun4c_init_IRQ: No address property
\n
"
);
sizeof
(
int_regs
))
!=
-
1
)
{
prom_halt
();
memset
(
&
phyres
,
0
,
sizeof
(
struct
resource
));
phyres
.
flags
=
int_regs
[
0
].
which_io
;
phyres
.
start
=
int_regs
[
0
].
phys_addr
;
interrupt_enable
=
(
char
*
)
of_ioremap
(
&
phyres
,
0
,
int_regs
[
0
].
reg_size
,
"sun4c_intr"
);
}
}
if
(
!
interrupt_enable
)
panic
(
"Cannot map interrupt_enable"
)
;
interrupt_enable
=
(
void
__iomem
*
)
(
unsigned
long
)
addr
[
0
]
;
BTFIXUPSET_CALL
(
enable_irq
,
sun4c_enable_irq
,
BTFIXUPCALL_NORM
);
BTFIXUPSET_CALL
(
enable_irq
,
sun4c_enable_irq
,
BTFIXUPCALL_NORM
);
BTFIXUPSET_CALL
(
disable_irq
,
sun4c_disable_irq
,
BTFIXUPCALL_NORM
);
BTFIXUPSET_CALL
(
disable_irq
,
sun4c_disable_irq
,
BTFIXUPCALL_NORM
);
...
@@ -206,6 +201,6 @@ void __init sun4c_init_IRQ(void)
...
@@ -206,6 +201,6 @@ void __init sun4c_init_IRQ(void)
BTFIXUPSET_CALL
(
clear_cpu_int
,
sun4c_nop
,
BTFIXUPCALL_NOP
);
BTFIXUPSET_CALL
(
clear_cpu_int
,
sun4c_nop
,
BTFIXUPCALL_NOP
);
BTFIXUPSET_CALL
(
set_irq_udt
,
sun4c_nop
,
BTFIXUPCALL_NOP
);
BTFIXUPSET_CALL
(
set_irq_udt
,
sun4c_nop
,
BTFIXUPCALL_NOP
);
#endif
#endif
*
interrupt_enable
=
(
SUN4C_INT_ENABLE
);
sbus_writeb
(
SUN4C_INT_ENABLE
,
interrupt_enable
);
/* Cannot enable interrupts until OBP ticker is disabled. */
/* Cannot enable interrupts until OBP ticker is disabled. */
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录