author | Matt Plumtree <matt.plumtree@nokia.com> |
Tue, 02 Nov 2010 09:43:32 +0000 | |
branch | graphics-phase-3 |
changeset 130 | b62870f3934d |
parent 98 | 542d4bc8b7ca |
permissions | -rw-r--r-- |
98
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
1 |
# |
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
2 |
# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). |
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
3 |
# All rights reserved. |
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
4 |
# This component and the accompanying materials are made available |
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
5 |
# under the terms of "Eclipse Public License v1.0" |
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
6 |
# which accompanies this distribution, and is available |
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
7 |
# at the URL "http://www.eclipse.org/legal/epl-v10.html". |
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
8 |
# |
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
9 |
# Initial Contributors: |
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
10 |
# Nokia Corporation - initial contribution. |
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
11 |
# |
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
12 |
# Contributors: |
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
13 |
# |
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
14 |
# Description: syborg_graphicsdevice.py |
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
15 |
# |
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
16 |
# Represents a graphics device register interface for quest OS in QEMU Syborg environment. |
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
17 |
# |
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
18 |
# |
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
19 |
|
77 | 20 |
import ctypes |
21 |
import qemu |
|
22 |
import sys |
|
98
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
23 |
import platform |
77 | 24 |
|
25 |
class syborg_graphicsdevice(qemu.devclass): |
|
26 |
# Graphics device registers derived from VirtualVideoInterfaceConstants.h |
|
27 |
VVI_R_ID = 0x0000 |
|
28 |
VVI_R_IRQ_ENABLE = 0x0004 |
|
29 |
VVI_R_IRQ_STATUS = 0x0008 |
|
30 |
VVI_R_COMMAND = 0x000c |
|
31 |
VVI_R_PARAMETER_LOAD = 0x0010 |
|
32 |
VVI_R_ERROR = 0x0014 |
|
33 |
VVI_R_INPUT_BUFFER_TAIL = 0x0018 |
|
34 |
VVI_R_INPUT_BUFFER_HEAD = 0x001c |
|
35 |
VVI_R_INPUT_BUFFER_READ_COUNT = 0x0020 |
|
36 |
VVI_R_INPUT_BUFFER_WRITE_COUNT = 0x0024 |
|
37 |
VVI_R_INPUT_BUFFER_MAX_TAIL = 0x0028 |
|
38 |
VVI_R_REQUEST_ID = 0x002c |
|
39 |
VVI_R_SHARED_CMD_MEMORY_BASE = 0x0030 |
|
40 |
VVI_R_SHARED_FRAMEBUFFER_MEMORY_BASE = 0x0034 |
|
41 |
VVI_R_LASTREG = 0x0038 # not a register, address of last register |
|
42 |
||
43 |
VVI_EXECUTE = 0 |
|
44 |
shared_cmd_memory_base = 0 |
|
45 |
shared_framebuffer_memory_base = 0 |
|
46 |
m_request_id_reg = 0 |
|
47 |
||
98
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
48 |
host_os = platform.system() |
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
49 |
# List of operating systems for this device |
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
50 |
OS_WINDOWS = "Windows" |
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
51 |
OS_LINUX = "Linux" |
77 | 52 |
|
53 |
def create(self): |
|
98
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
54 |
print "syborg_graphicsdevice: running on ", self.host_os |
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
55 |
|
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
56 |
# Add the supported and validated operating systems to the condition below |
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
57 |
if( (self.host_os != self.OS_WINDOWS) ): |
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
58 |
error_msg = "syborg_graphicsdevice: os support not validated: ", self.host_os |
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
59 |
sys.exit( error_msg ) |
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
60 |
|
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
61 |
# Try open the syborg graphicswrapper library |
77 | 62 |
try: |
98
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
63 |
if( self.host_os == self.OS_WINDOWS ): |
130
b62870f3934d
Change Syborg to use KhronosAPIWrapper instead of syborg-graphicswrapper
Matt Plumtree <matt.plumtree@nokia.com>
parents:
98
diff
changeset
|
64 |
libname = "KhronosAPIWrapper.dll" |
98
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
65 |
elif( self.host_os == self.OS_LINUX ): |
130
b62870f3934d
Change Syborg to use KhronosAPIWrapper instead of syborg-graphicswrapper
Matt Plumtree <matt.plumtree@nokia.com>
parents:
98
diff
changeset
|
66 |
libname = "KhronosAPIWrapper.so" |
98
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
67 |
else: |
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
68 |
# We should never end up here since the operating system check is done above |
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
69 |
sys.exit( "syborg_graphicsdevice: library loading failed. Os not supported!" ) |
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
70 |
self.library = ctypes.CDLL(libname) |
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
71 |
except Exception, e: |
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
72 |
print repr(e) |
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
73 |
error_msg = "syborg_graphicsdevice: " + libname + " load failed"; |
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
74 |
sys.exit( error_msg ) |
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
75 |
|
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
76 |
# Create an instance of syborg graphics wrapper |
130
b62870f3934d
Change Syborg to use KhronosAPIWrapper instead of syborg-graphicswrapper
Matt Plumtree <matt.plumtree@nokia.com>
parents:
98
diff
changeset
|
77 |
self.obj = self.library.create_SimulatorGraphicsWrapper() |
77 | 78 |
|
130
b62870f3934d
Change Syborg to use KhronosAPIWrapper instead of syborg-graphicswrapper
Matt Plumtree <matt.plumtree@nokia.com>
parents:
98
diff
changeset
|
79 |
self.library.initialize_SimulatorGraphicsWrapper( self.obj ) |
77 | 80 |
self.initialize_graphics_callback() |
81 |
||
82 |
self.irqenable = 0 |
|
83 |
self.irqstatus = 0 |
|
84 |
self.command = 0 |
|
85 |
self.parameterload = 0 |
|
86 |
||
87 |
def updateIrq(self,new_value): |
|
88 |
self.set_irq_level(0, new_value) |
|
89 |
||
90 |
def graphics_request_callback(self, request_id): |
|
91 |
#print "graphics_request_callback: " , request_id |
|
92 |
self.m_request_id_reg = request_id |
|
93 |
self.updateIrq(1) |
|
94 |
return 0 |
|
95 |
||
96 |
def initialize_graphics_callback(self): |
|
97 |
self.CALLBACKFUNC = ctypes.CFUNCTYPE(ctypes.c_int, ctypes.c_int) |
|
98 |
self.graphics_callback = self.CALLBACKFUNC(self.graphics_request_callback) |
|
98
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
99 |
self.library.set_GraphicsCallBack( self.obj, self.graphics_callback ) |
77 | 100 |
|
101 |
def read_reg(self, offset): |
|
102 |
offset >>= 2 |
|
103 |
if offset == self.VVI_R_ID: |
|
104 |
return 0xDEADBEEF |
|
105 |
elif offset == self.VVI_R_IRQ_ENABLE: |
|
106 |
return self.irqenable |
|
107 |
elif offset == self.VVI_R_IRQ_STATUS: |
|
108 |
return self.irqstatus |
|
109 |
elif offset == self.VVI_R_COMMAND: |
|
110 |
return self.command |
|
111 |
elif offset == self.VVI_R_PARAMETER_LOAD: |
|
112 |
return self.parameterload |
|
113 |
elif offset == self.VVI_R_ERROR: |
|
114 |
self.lasterror = 0 |
|
115 |
return self.lasterror |
|
116 |
elif offset == self.VVI_R_INPUT_BUFFER_TAIL: |
|
98
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
117 |
return self.library.get_InputBufferTail( self.obj ) |
77 | 118 |
elif offset == self.VVI_R_INPUT_BUFFER_HEAD: |
98
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
119 |
return self.library.get_InputBufferHead( self.obj ) |
77 | 120 |
elif offset == self.VVI_R_INPUT_BUFFER_READ_COUNT: |
98
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
121 |
return self.library.get_InputBufferReadCount( self.obj ) |
77 | 122 |
elif offset == self.VVI_R_INPUT_BUFFER_WRITE_COUNT: |
98
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
123 |
return self.library.get_InputBufferWriteCount( self.obj ) |
77 | 124 |
elif offset == self.VVI_R_INPUT_BUFFER_MAX_TAIL: |
98
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
125 |
return self.library.get_InputMaxTailIndex( self.obj ) |
77 | 126 |
elif offset == self.VVI_R_REQUEST_ID: |
127 |
return self.m_request_id_reg |
|
128 |
elif offset == self.VVI_R_SHARED_CMD_MEMORY_BASE: |
|
129 |
return self.shared_cmd_memory_base |
|
130 |
elif offset == self.VVI_R_SHARED_FRAMEBUFFER_MEMORY_BASE: |
|
131 |
return self.shared_framebuffer_memory_base |
|
132 |
else: |
|
133 |
reg_read_error = "syborg_graphicsdevice: Illegal register read at: ", offset |
|
134 |
sys.exit( reg_read_error ) |
|
135 |
||
136 |
def write_reg(self, offset, value): |
|
137 |
offset >>= 2 |
|
138 |
if offset == self.VVI_R_IRQ_STATUS: |
|
139 |
self.updateIrq(0); |
|
98
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
140 |
self.library.signal_outputbuffer_semafore( self.obj ) |
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
141 |
self.library.execute_command( self.obj ); |
77 | 142 |
elif offset == self.VVI_R_COMMAND: |
143 |
if value == self.VVI_EXECUTE: |
|
98
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
144 |
self.library.execute_command( self.obj ); |
77 | 145 |
else: |
146 |
sys.exit("syborg_graphicsdevice: Unknown command issued!") |
|
147 |
elif offset == self.VVI_R_INPUT_BUFFER_TAIL: |
|
98
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
148 |
self.library.set_InputBufferTail( self.obj, value ); |
77 | 149 |
elif offset == self.VVI_R_INPUT_BUFFER_HEAD: |
98
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
150 |
self.library.set_InputBufferHead( self.obj, value ); |
77 | 151 |
elif offset == self.VVI_R_INPUT_BUFFER_READ_COUNT: |
98
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
152 |
self.library.set_InputBufferReadCount( self.obj, value ); |
77 | 153 |
elif offset == self.VVI_R_INPUT_BUFFER_WRITE_COUNT: |
98
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
154 |
self.library.set_InputBufferWriteCount( self.obj, value ); |
77 | 155 |
elif offset == self.VVI_R_INPUT_BUFFER_MAX_TAIL: |
98
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
156 |
self.library.set_InputMaxTailIndex( self.obj, value ); |
77 | 157 |
elif offset == self.VVI_R_SHARED_CMD_MEMORY_BASE: |
98
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
158 |
gmemsize = self.library.get_cmd_memsize() |
77 | 159 |
self.cmd_memregion = qemu.memregion( value, gmemsize ) |
160 |
self.memregion_cmd_base = self.cmd_memregion.region_host_addr() |
|
161 |
elif offset == self.VVI_R_SHARED_FRAMEBUFFER_MEMORY_BASE: |
|
98
542d4bc8b7ca
bug235_bringup_0 - simplified syborg graphicsdevice and updated towards better linux support
Jani Hyvonen<jani.hyvonen@nokia.com>
parents:
77
diff
changeset
|
162 |
gmemsize = self.library.get_framebuffer_memsize() |
77 | 163 |
self.framebuffer_memregion = qemu.memregion( value, gmemsize ) |
164 |
self.memregion_framebuffer_base = self.framebuffer_memregion.region_host_addr() |
|
165 |
# Ready to finalise graphics initialization |
|
130
b62870f3934d
Change Syborg to use KhronosAPIWrapper instead of syborg-graphicswrapper
Matt Plumtree <matt.plumtree@nokia.com>
parents:
98
diff
changeset
|
166 |
if( self.library.reset_SimulatorGraphicsWrapper( self.obj, self.memregion_framebuffer_base, self.memregion_cmd_base ) != 0 ): |
77 | 167 |
sys.exit("syborg_graphicsdevice: Syborg graphicsutils library not initialized correctly!") |
168 |
else: |
|
169 |
reg_write_error = "syborg_graphicsdevice: Illegal register write to: ", offset |
|
170 |
sys.exit( reg_write_error ) |
|
171 |
||
172 |
# Device class properties |
|
173 |
regions = [qemu.ioregion(0x1000, readl=read_reg, writel=write_reg)] |
|
174 |
irqs = 1 |
|
175 |
name = "syborg,graphicsdevice" |
|
176 |
properties = {} |
|
177 |
||
178 |
qemu.register_device(syborg_graphicsdevice) |