Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
qemu
提交
f40070c3
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看板
提交
f40070c3
编写于
7月 12, 2009
作者:
B
Blue Swirl
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Sparc32: convert tcx to qdev
Also increase QDEV_MAX_MMIO. Signed-off-by:
N
Blue Swirl
<
blauwirbel@gmail.com
>
上级
798b721e
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
71 addition
and
28 deletion
+71
-28
hw/sysbus.h
hw/sysbus.h
+1
-1
hw/tcx.c
hw/tcx.c
+70
-27
未找到文件。
hw/sysbus.h
浏览文件 @
f40070c3
...
@@ -5,7 +5,7 @@
...
@@ -5,7 +5,7 @@
#include "qdev.h"
#include "qdev.h"
#define QDEV_MAX_MMIO
5
#define QDEV_MAX_MMIO
32
#define QDEV_MAX_IRQ 32
#define QDEV_MAX_IRQ 32
typedef
struct
SysBusDevice
SysBusDevice
;
typedef
struct
SysBusDevice
SysBusDevice
;
...
...
hw/tcx.c
浏览文件 @
f40070c3
...
@@ -21,10 +21,11 @@
...
@@ -21,10 +21,11 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
* THE SOFTWARE.
*/
*/
#include "hw.h"
#include "sun4m.h"
#include "sun4m.h"
#include "console.h"
#include "console.h"
#include "pixel_ops.h"
#include "pixel_ops.h"
#include "sysbus.h"
#define MAXX 1024
#define MAXX 1024
#define MAXY 768
#define MAXY 768
...
@@ -34,6 +35,7 @@
...
@@ -34,6 +35,7 @@
#define TCX_TEC_NREGS 0x1000
#define TCX_TEC_NREGS 0x1000
typedef
struct
TCXState
{
typedef
struct
TCXState
{
SysBusDevice
busdev
;
target_phys_addr_t
addr
;
target_phys_addr_t
addr
;
DisplayState
*
ds
;
DisplayState
*
ds
;
uint8_t
*
vram
;
uint8_t
*
vram
;
...
@@ -500,69 +502,103 @@ static CPUWriteMemoryFunc *tcx_dummy_write[3] = {
...
@@ -500,69 +502,103 @@ static CPUWriteMemoryFunc *tcx_dummy_write[3] = {
void
tcx_init
(
target_phys_addr_t
addr
,
int
vram_size
,
int
width
,
int
height
,
void
tcx_init
(
target_phys_addr_t
addr
,
int
vram_size
,
int
width
,
int
height
,
int
depth
)
int
depth
)
{
{
TCXState
*
s
;
DeviceState
*
dev
;
SysBusDevice
*
s
;
dev
=
qdev_create
(
NULL
,
"SUNW,tcx"
);
qdev_set_prop_int
(
dev
,
"addr"
,
addr
);
qdev_set_prop_int
(
dev
,
"vram_size"
,
vram_size
);
qdev_set_prop_int
(
dev
,
"width"
,
width
);
qdev_set_prop_int
(
dev
,
"height"
,
height
);
qdev_set_prop_int
(
dev
,
"depth"
,
depth
);
qdev_init
(
dev
);
s
=
sysbus_from_qdev
(
dev
);
/* 8-bit plane */
sysbus_mmio_map
(
s
,
0
,
addr
+
0x00800000ULL
);
/* DAC */
sysbus_mmio_map
(
s
,
1
,
addr
+
0x00200000ULL
);
/* TEC (dummy) */
sysbus_mmio_map
(
s
,
2
,
addr
+
0x00700000ULL
);
/* THC 24 bit: NetBSD writes here even with 8-bit display: dummy */
sysbus_mmio_map
(
s
,
3
,
addr
+
0x00301000ULL
);
if
(
depth
==
24
)
{
/* 24-bit plane */
sysbus_mmio_map
(
s
,
4
,
addr
+
0x02000000ULL
);
/* Control plane */
sysbus_mmio_map
(
s
,
5
,
addr
+
0x0a000000ULL
);
}
else
{
/* THC 8 bit (dummy) */
sysbus_mmio_map
(
s
,
4
,
addr
+
0x00300000ULL
);
}
}
static
void
tcx_init1
(
SysBusDevice
*
dev
)
{
TCXState
*
s
=
FROM_SYSBUS
(
TCXState
,
dev
);
int
io_memory
,
dummy_memory
;
int
io_memory
,
dummy_memory
;
ram_addr_t
vram_offset
;
ram_addr_t
vram_offset
;
int
size
;
int
size
,
vram_size
;
uint8_t
*
vram_base
;
uint8_t
*
vram_base
;
vram_size
=
qdev_get_prop_int
(
&
dev
->
qdev
,
"vram_size"
,
-
1
);
vram_offset
=
qemu_ram_alloc
(
vram_size
*
(
1
+
4
+
4
));
vram_offset
=
qemu_ram_alloc
(
vram_size
*
(
1
+
4
+
4
));
vram_base
=
qemu_get_ram_ptr
(
vram_offset
);
vram_base
=
qemu_get_ram_ptr
(
vram_offset
);
s
->
addr
=
qdev_get_prop_int
(
&
dev
->
qdev
,
"addr"
,
-
1
);
s
=
qemu_mallocz
(
sizeof
(
TCXState
));
s
->
addr
=
addr
;
s
->
vram_offset
=
vram_offset
;
s
->
vram_offset
=
vram_offset
;
s
->
width
=
width
;
s
->
width
=
qdev_get_prop_int
(
&
dev
->
qdev
,
"width"
,
-
1
)
;
s
->
height
=
height
;
s
->
height
=
qdev_get_prop_int
(
&
dev
->
qdev
,
"height"
,
-
1
)
;
s
->
depth
=
depth
;
s
->
depth
=
qdev_get_prop_int
(
&
dev
->
qdev
,
"depth"
,
-
1
)
;
/
/ 8-bit plane
/
* 8-bit plane */
s
->
vram
=
vram_base
;
s
->
vram
=
vram_base
;
size
=
vram_size
;
size
=
vram_size
;
cpu_register_physical_memory
(
addr
+
0x00800000ULL
,
size
,
vram_offset
);
sysbus_init_mmio
(
dev
,
size
,
s
->
vram_offset
);
vram_offset
+=
size
;
vram_offset
+=
size
;
vram_base
+=
size
;
vram_base
+=
size
;
/* DAC */
io_memory
=
cpu_register_io_memory
(
tcx_dac_read
,
tcx_dac_write
,
s
);
io_memory
=
cpu_register_io_memory
(
tcx_dac_read
,
tcx_dac_write
,
s
);
cpu_register_physical_memory
(
addr
+
0x00200000ULL
,
TCX_DAC_NREGS
,
sysbus_init_mmio
(
dev
,
TCX_DAC_NREGS
,
io_memory
);
io_memory
);
/* TEC (dummy) */
dummy_memory
=
cpu_register_io_memory
(
tcx_dummy_read
,
tcx_dummy_write
,
dummy_memory
=
cpu_register_io_memory
(
tcx_dummy_read
,
tcx_dummy_write
,
s
);
s
);
cpu_register_physical_memory
(
addr
+
0x00700000ULL
,
TCX_TEC_NREGS
,
sysbus_init_mmio
(
dev
,
TCX_TEC_NREGS
,
dummy_memory
);
dummy_memory
);
/* THC: NetBSD writes here even with 8-bit display: dummy */
if
(
depth
==
24
)
{
sysbus_init_mmio
(
dev
,
TCX_THC_NREGS_24
,
dummy_memory
);
// 24-bit plane
if
(
s
->
depth
==
24
)
{
/* 24-bit plane */
size
=
vram_size
*
4
;
size
=
vram_size
*
4
;
s
->
vram24
=
(
uint32_t
*
)
vram_base
;
s
->
vram24
=
(
uint32_t
*
)
vram_base
;
s
->
vram24_offset
=
vram_offset
;
s
->
vram24_offset
=
vram_offset
;
cpu_register_physical_memory
(
addr
+
0x02000000ULL
,
size
,
vram_offset
);
sysbus_init_mmio
(
dev
,
size
,
vram_offset
);
vram_offset
+=
size
;
vram_offset
+=
size
;
vram_base
+=
size
;
vram_base
+=
size
;
/
/ Control plane
/
* Control plane */
size
=
vram_size
*
4
;
size
=
vram_size
*
4
;
s
->
cplane
=
(
uint32_t
*
)
vram_base
;
s
->
cplane
=
(
uint32_t
*
)
vram_base
;
s
->
cplane_offset
=
vram_offset
;
s
->
cplane_offset
=
vram_offset
;
cpu_register_physical_memory
(
addr
+
0x0a000000ULL
,
size
,
vram_offset
);
sysbus_init_mmio
(
dev
,
size
,
vram_offset
);
s
->
ds
=
graphic_console_init
(
tcx24_update_display
,
s
->
ds
=
graphic_console_init
(
tcx24_update_display
,
tcx24_invalidate_display
,
tcx24_invalidate_display
,
tcx24_screen_dump
,
NULL
,
s
);
tcx24_screen_dump
,
NULL
,
s
);
}
else
{
}
else
{
cpu_register_physical_memory
(
addr
+
0x00300000ULL
,
TCX_THC_NREGS_8
,
/* THC 8 bit (dummy) */
dummy_memory
);
sysbus_init_mmio
(
dev
,
TCX_THC_NREGS_8
,
dummy_memory
);
s
->
ds
=
graphic_console_init
(
tcx_update_display
,
s
->
ds
=
graphic_console_init
(
tcx_update_display
,
tcx_invalidate_display
,
tcx_invalidate_display
,
tcx_screen_dump
,
NULL
,
s
);
tcx_screen_dump
,
NULL
,
s
);
}
}
// NetBSD writes here even with 8-bit display
cpu_register_physical_memory
(
addr
+
0x00301000ULL
,
TCX_THC_NREGS_24
,
dummy_memory
);
register_savevm
(
"tcx"
,
addr
,
4
,
tcx_save
,
tcx_load
,
s
);
register_savevm
(
"tcx"
,
-
1
,
4
,
tcx_save
,
tcx_load
,
s
);
qemu_register_reset
(
tcx_reset
,
s
);
qemu_register_reset
(
tcx_reset
,
s
);
tcx_reset
(
s
);
tcx_reset
(
s
);
qemu_console_resize
(
s
->
ds
,
width
,
height
);
qemu_console_resize
(
s
->
ds
,
s
->
width
,
s
->
height
);
}
}
static
void
tcx_screen_dump
(
void
*
opaque
,
const
char
*
filename
)
static
void
tcx_screen_dump
(
void
*
opaque
,
const
char
*
filename
)
...
@@ -627,3 +663,10 @@ static void tcx24_screen_dump(void *opaque, const char *filename)
...
@@ -627,3 +663,10 @@ static void tcx24_screen_dump(void *opaque, const char *filename)
fclose
(
f
);
fclose
(
f
);
return
;
return
;
}
}
static
void
tcx_register_devices
(
void
)
{
sysbus_register_dev
(
"SUNW,tcx"
,
sizeof
(
TCXState
),
tcx_init1
);
}
device_init
(
tcx_register_devices
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录