Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
4f89363b
K
Kernel
项目概览
openeuler
/
Kernel
接近 2 年 前同步成功
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
4f89363b
编写于
9月 23, 2013
作者:
B
Benjamin Herrenschmidt
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
powerpc/powernv: Fix endian issues in OPAL console and udbg backend
Signed-off-by:
N
Benjamin Herrenschmidt
<
benh@kernel.crashing.org
>
上级
3a1a4661
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
20 addition
and
16 deletion
+20
-16
arch/powerpc/include/asm/opal.h
arch/powerpc/include/asm/opal.h
+4
-4
arch/powerpc/platforms/powernv/opal.c
arch/powerpc/platforms/powernv/opal.c
+16
-12
未找到文件。
arch/powerpc/include/asm/opal.h
浏览文件 @
4f89363b
...
...
@@ -537,12 +537,12 @@ typedef struct oppanel_line {
}
oppanel_line_t
;
/* API functions */
int64_t
opal_console_write
(
int64_t
term_number
,
int64_t
*
length
,
int64_t
opal_console_write
(
int64_t
term_number
,
__be64
*
length
,
const
uint8_t
*
buffer
);
int64_t
opal_console_read
(
int64_t
term_number
,
int64_t
*
length
,
int64_t
opal_console_read
(
int64_t
term_number
,
__be64
*
length
,
uint8_t
*
buffer
);
int64_t
opal_console_write_buffer_space
(
int64_t
term_number
,
int64_t
*
length
);
__be64
*
length
);
int64_t
opal_rtc_read
(
uint32_t
*
year_month_day
,
uint64_t
*
hour_minute_second_millisecond
);
int64_t
opal_rtc_write
(
uint32_t
year_month_day
,
...
...
@@ -552,7 +552,7 @@ int64_t opal_cec_reboot(void);
int64_t
opal_read_nvram
(
uint64_t
buffer
,
uint64_t
size
,
uint64_t
offset
);
int64_t
opal_write_nvram
(
uint64_t
buffer
,
uint64_t
size
,
uint64_t
offset
);
int64_t
opal_handle_interrupt
(
uint64_t
isn
,
uint64_t
*
outstanding_event_mask
);
int64_t
opal_poll_events
(
uint64_t
*
outstanding_event_mask
);
int64_t
opal_poll_events
(
__be64
*
outstanding_event_mask
);
int64_t
opal_pci_set_hub_tce_memory
(
uint64_t
hub_id
,
uint64_t
tce_mem_addr
,
uint64_t
tce_mem_size
);
int64_t
opal_pci_set_phb_tce_memory
(
uint64_t
phb_id
,
uint64_t
tce_mem_addr
,
...
...
arch/powerpc/platforms/powernv/opal.c
浏览文件 @
4f89363b
...
...
@@ -164,27 +164,28 @@ void opal_notifier_disable(void)
int
opal_get_chars
(
uint32_t
vtermno
,
char
*
buf
,
int
count
)
{
s64
len
,
rc
;
u64
evt
;
s64
rc
;
__be64
evt
,
len
;
if
(
!
opal
.
entry
)
return
-
ENODEV
;
opal_poll_events
(
&
evt
);
if
((
evt
&
OPAL_EVENT_CONSOLE_INPUT
)
==
0
)
if
((
be64_to_cpu
(
evt
)
&
OPAL_EVENT_CONSOLE_INPUT
)
==
0
)
return
0
;
len
=
c
ount
;
rc
=
opal_console_read
(
vtermno
,
&
len
,
buf
);
len
=
c
pu_to_be64
(
count
)
;
rc
=
opal_console_read
(
vtermno
,
&
len
,
buf
);
if
(
rc
==
OPAL_SUCCESS
)
return
len
;
return
be64_to_cpu
(
len
)
;
return
0
;
}
int
opal_put_chars
(
uint32_t
vtermno
,
const
char
*
data
,
int
total_len
)
{
int
written
=
0
;
__be64
olen
;
s64
len
,
rc
;
unsigned
long
flags
;
u
64
evt
;
__be
64
evt
;
if
(
!
opal
.
entry
)
return
-
ENODEV
;
...
...
@@ -199,13 +200,14 @@ int opal_put_chars(uint32_t vtermno, const char *data, int total_len)
*/
spin_lock_irqsave
(
&
opal_write_lock
,
flags
);
if
(
firmware_has_feature
(
FW_FEATURE_OPALv2
))
{
rc
=
opal_console_write_buffer_space
(
vtermno
,
&
len
);
rc
=
opal_console_write_buffer_space
(
vtermno
,
&
olen
);
len
=
be64_to_cpu
(
olen
);
if
(
rc
||
len
<
total_len
)
{
spin_unlock_irqrestore
(
&
opal_write_lock
,
flags
);
/* Closed -> drop characters */
if
(
rc
)
return
total_len
;
opal_poll_events
(
&
evt
);
opal_poll_events
(
NULL
);
return
-
EAGAIN
;
}
}
...
...
@@ -216,8 +218,9 @@ int opal_put_chars(uint32_t vtermno, const char *data, int total_len)
rc
=
OPAL_BUSY
;
while
(
total_len
>
0
&&
(
rc
==
OPAL_BUSY
||
rc
==
OPAL_BUSY_EVENT
||
rc
==
OPAL_SUCCESS
))
{
len
=
total_len
;
rc
=
opal_console_write
(
vtermno
,
&
len
,
data
);
olen
=
cpu_to_be64
(
total_len
);
rc
=
opal_console_write
(
vtermno
,
&
olen
,
data
);
len
=
be64_to_cpu
(
olen
);
/* Closed or other error drop */
if
(
rc
!=
OPAL_SUCCESS
&&
rc
!=
OPAL_BUSY
&&
...
...
@@ -237,7 +240,8 @@ int opal_put_chars(uint32_t vtermno, const char *data, int total_len)
*/
do
opal_poll_events
(
&
evt
);
while
(
rc
==
OPAL_SUCCESS
&&
(
evt
&
OPAL_EVENT_CONSOLE_OUTPUT
));
while
(
rc
==
OPAL_SUCCESS
&&
(
be64_to_cpu
(
evt
)
&
OPAL_EVENT_CONSOLE_OUTPUT
));
}
spin_unlock_irqrestore
(
&
opal_write_lock
,
flags
);
return
written
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录