Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
qemu
提交
bc0b1dc1
Q
qemu
项目概览
openeuler
/
qemu
通知
10
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Q
qemu
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
bc0b1dc1
编写于
1月 18, 2004
作者:
B
bellard
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
sb16 patch (malc)
git-svn-id:
svn://svn.savannah.nongnu.org/qemu/trunk@561
c046a42c-6fe2-441c-8c8c-71466251a162
上级
630be16f
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
23 addition
and
10 deletion
+23
-10
hw/sb16.c
hw/sb16.c
+23
-10
未找到文件。
hw/sb16.c
浏览文件 @
bc0b1dc1
...
...
@@ -37,6 +37,7 @@
abort (); \
} while (0)
/* #define DEBUG_SB16 */
#ifdef DEBUG_SB16
#define lwarn(...) fprintf (stderr, "sb16: " __VA_ARGS__)
#define linfo(...) fprintf (stderr, "sb16: " __VA_ARGS__)
...
...
@@ -60,7 +61,7 @@ static struct {
int
hdma
;
int
port
;
int
mix_block
;
}
sb
=
{
4
,
5
,
5
,
1
,
5
,
0x220
,
-
1
};
}
sb
=
{
5
,
4
,
5
,
1
,
5
,
0x220
,
-
1
};
static
int
mix_block
,
noirq
;
...
...
@@ -205,7 +206,7 @@ static void command (uint8_t cmd)
{
char
*
msg
;
msg
=
(
char
*
)
-
1
;
msg
=
(
char
*
)
-
1
;
linfo
(
"%#x
\n
"
,
cmd
);
...
...
@@ -225,6 +226,12 @@ static void command (uint8_t cmd)
}
else
{
switch
(
cmd
)
{
case
0x00
:
case
0x03
:
case
0xe7
:
/* IMS uses those when probing for sound devices */
return
;
case
0x10
:
dsp
.
needed_bytes
=
1
;
break
;
...
...
@@ -328,7 +335,7 @@ static void command (uint8_t cmd)
case
0xf2
:
dsp
.
out_data
[
dsp
.
out_data_len
++
]
=
0xaa
;
mixer
.
regs
[
0x82
]
|=
1
;
mixer
.
regs
[
0x82
]
|=
mixer
.
regs
[
0x80
]
;
pic_set_irq
(
sb
.
irq
,
1
);
return
;
...
...
@@ -500,13 +507,19 @@ static IO_READ_PROTO (dsp_read)
goto
error
;
case
0xe
:
/* data available status | irq 8 ack */
/* XXX drop pic irq line here? */
ldebug
(
"8 ack
\n
"
);
retval
=
(
0
==
dsp
.
out_data_len
)
?
0
:
0x80
;
mixer
.
regs
[
0x82
]
&=
~
mixer
.
regs
[
0x80
];
pic_set_irq
(
sb
.
irq
,
0
);
break
;
case
0xf
:
/* irq 16 ack */
retval
=
0xff
;
mixer
.
regs
[
0x82
]
&=
~
2
;
/* XXX drop pic irq line here? */
ldebug
(
"16 ack
\n
"
);
retval
=
0xff
;
mixer
.
regs
[
0x82
]
&=
~
mixer
.
regs
[
0x80
];
pic_set_irq
(
sb
.
irq
,
0
);
break
;
default:
...
...
@@ -514,8 +527,8 @@ static IO_READ_PROTO (dsp_read)
}
if
((
0xc
!=
iport
)
&&
(
0xe
!=
iport
))
{
ldebug
(
"
(nport=%#x, size=%d)
iport %#x = %#x
\n
"
,
nport
,
size
,
iport
,
retval
);
ldebug
(
"
nport=%#x
iport %#x = %#x
\n
"
,
nport
,
iport
,
retval
);
}
return
retval
;
...
...
@@ -617,8 +630,6 @@ static int SB_read_DMA (uint32_t addr, int size, int *_irq)
ldebug
(
"addr:%#010x free:%d till:%d size:%d
\n
"
,
addr
,
free
,
till
,
size
);
/* linfo ("pos %d free %d size %d till %d copy %d auto %d noirq %d\n", */
/* dsp.dma_pos, free, size, till, copy, dsp.dma_auto, noirq); */
if
(
till
<=
copy
)
{
if
(
0
==
dsp
.
dma_auto
)
{
copy
=
till
;
...
...
@@ -631,8 +642,10 @@ static int SB_read_DMA (uint32_t addr, int size, int *_irq)
if
(
dsp
.
left_till_irq
<=
0
)
{
mixer
.
regs
[
0x82
]
|=
mixer
.
regs
[
0x80
];
if
(
0
==
noirq
)
if
(
0
==
noirq
)
{
ldebug
(
"request irq
\n
"
);
*
_irq
=
sb
.
irq
;
}
if
(
0
==
dsp
.
dma_auto
)
{
control
(
0
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录