Commit Graph

268 Commits

Author SHA1 Message Date
Gerd Hoffmann
20da2f162a replace worker load/save with loadvm_commands, allow keeping surface content
Add worker->loadvm_commands.  qemu will uses this to send a series of
commands needed to restore state after savevm/loadvm and migration.
That will be one create-surface command per surface and one cursor-set
command for the local pointer.

The worker->save/load functions are not needed any more.
Likewise the interface->{get,set}_save_data callbacks.

Surfaces created via loadvm_commands *will* not be cleared.  Also
primary surfaces are not cleared any more (unconditionally, although
we could do that conditionally on loadvm using the flags field in
QXLSurfaceCreate).
2010-05-19 11:22:07 +02:00
Gerd Hoffmann
6bdf38daf8 surface: keep metadata (aka create command) in device memory.
With this patch applied the spice server will not release surface create
commands for the whole lifecycle of the surface.  When the surface is
destroyed both create and destroy commands are released.

This has the effect that the surface metadata (size, depth, ...) is kept
in qxl device memory.  This in turn makes it alot easier for qemu to
handle savevm/loadvm.  It just needs to do some minimal command parsing
and maintain pointers to the create commands for the active surfaces.
2010-05-19 11:22:07 +02:00
Gerd Hoffmann
3cffcf98a1 kill spice_server_set_mouse_absolute
Not needed.  Just register/unregister the tablet interface instead.
2010-05-19 11:22:07 +02:00
Gerd Hoffmann
ccfbbae513 vdi port: redesign.
Pretty straight forward.

One thing we should think about is if and how we are going to deal
with multiple ports here?

With vdi port using virtio-serial as communication channel to the guest
it is easy to have multiple ports, i.e. we might want to use a second
instance for clipboard data.  That implies that we need support for
multiple channels all the way through the stack ...
2010-05-19 11:22:07 +02:00
Gerd Hoffmann
2e47435ecb constify SpiceBaseInterface 2010-05-19 11:22:07 +02:00
Gerd Hoffmann
6fdcb9310d SoundInterfaces: redesign 2010-05-19 11:22:07 +02:00
Gerd Hoffmann
4701a063da TabletInterface: redesign 2010-05-19 11:22:07 +02:00
Gerd Hoffmann
d3735feea6 QXL: redesign. 2010-05-19 11:22:06 +02:00
Gerd Hoffmann
58273e3a32 MouseInterface: redesign 2010-05-19 11:22:06 +02:00
Gerd Hoffmann
4461c74918 KeyboardInterface: redesign.
This is the direction I wanna take with all interfaces:  Clearly
separate interface (aka version information and function pointers)
and state information.  SpiceKbdInterface defines the interface,
SpiceKbdInstance maintains per-instance state information.  Keyboard
hasn't much beside a pointer to SpiceKbdInterface, for other
interfaces this very likely will be different.
2010-05-19 11:22:06 +02:00
Gerd Hoffmann
10e6d8b53c s/CoreInterface/SpiceCoreInterface/ 2010-05-19 11:22:06 +02:00
Gerd Hoffmann
30c740201d VDInterface: redesign.
VDInterface has been renamed to SpiceBaseInterface. Dropped base_version
element, shlib versioning should be used instead.  Dropped id element,
it is passed to spice_server_add_interface() instead.  Now
SpiceBaseInterface has static information only, multiple interface
instances can share it.

Added SpiceBaseInstance struct for maintaining per-instance state
information.  Adapted spice_server_{add,remove}_interface() functions
to the new world.
2010-05-19 11:22:06 +02:00
Gerd Hoffmann
455cae7c74 shlib major 2010-05-19 11:22:06 +02:00
Gerd Hoffmann
a97875bc3f minor timer interface cleanups.
Make the timer interface largely look like the watch interface.
Simliar naming convention for the functions (timer_*) and a
opaque SpiceTimer type.
2010-05-19 11:22:06 +02:00
Gerd Hoffmann
536212322b new watch api: kill old api 2010-05-19 11:22:06 +02:00
Gerd Hoffmann
a5145cc93e new watch api: switch channels 2010-05-19 11:22:06 +02:00
Gerd Hoffmann
e8a2cca026 new watch api: switch sound 2010-05-19 11:22:06 +02:00
Gerd Hoffmann
614fa00903 new watch api: switch migration 2010-05-19 11:22:06 +02:00
Gerd Hoffmann
5549de4b10 new watch api: switch inputs 2010-05-19 11:22:06 +02:00
Gerd Hoffmann
d54f1103fa new watch api: switch ssl accept 2010-05-19 11:22:06 +02:00
Gerd Hoffmann
2dda5683b6 new watch api: switch main channel 2010-05-19 11:22:06 +02:00
Gerd Hoffmann
1a69ea6627 new watch api: switch liasync read 2010-05-19 11:22:06 +02:00
Gerd Hoffmann
d1ab29c1af new watch api: switch listening sockets 2010-05-19 11:22:06 +02:00
Gerd Hoffmann
4c67874a6d introduce new watch api
This patch adds a new file handle watch interface to libspice, featuring
three callbacks:

  (1) watch_add() -- create a new file watch.
  (2) watch_update_mask() -- change event mask.  spice frequently
                             enables/disables write notification.
  (3) watch_remove() -- remove a file watch.

libspice users must implement these functions to allow libspice
monitoring file handles.

The old interface (set_file_handlers) doesn't explicitly express the
lifecycle of a watch.  Also it maps 1:1 to a qemu-internal function.
In case the way qemu implements file watches changes (someone sayed
QemuIONotifier?) this will break horribly.  Beside that it is very
bad style.

Follwing patches will switch over users one by one to the new interface
and finally zap the old one.
2010-05-19 11:22:06 +02:00
Gerd Hoffmann
91f747ea1d fix visibility 2010-05-19 11:22:05 +02:00
Gerd Hoffmann
fe8b838341 zap CoreInterface->{term_printf,log}
Was used to print stuff to the qemu monitor.
Fundamentally incompatible with QMP.  Remove.
2010-05-19 11:22:05 +02:00
Gerd Hoffmann
3f7ea8e7a4 zap qterm interfaces
old way to handle monitor, obsolete.
2010-05-19 11:22:05 +02:00
Gerd Hoffmann
881c685f90 zap CoreInterface->(un)register_change_notifiers()
spice_server_add_interface() and spice_server_remove_interface()
can be used instead.
2010-05-19 11:22:05 +02:00
Gerd Hoffmann
df95728bf0 zap CoreInterface->next()
Interfaces must be registered after spice_server_init().
The "next" callback is used to discover interfaces
registered before spice_server_init().  Which is a empty
list and thus pretty pointless.  Remove it.
2010-05-19 11:22:05 +02:00
Gerd Hoffmann
43caec519e channel security cleanup
- drop spice_channel_name_t enum, use spice-protocol defines instead.
- switch spice_server_set_channel_security() channel parameter from
  enum to string.
- drop spice_server_set_default_channel_security(), use
  spice_server_set_channel_security with channel == NULL instead.
2010-05-19 11:22:05 +02:00
Gerd Hoffmann
edc1af5f67 zap spice_parse_args + spice_usage_str
First step to throw out the old interface.
2010-05-19 11:22:05 +02:00
Alexander Larsson
25bca7a286 Minor whitespace cleanup 2010-05-19 11:13:47 +02:00
Alexander Larsson
ee1e60c4a0 Make it --enable-tunnel work 2010-05-19 11:13:06 +02:00
Yonit Halperin
66a7c4a5e5 server: fix invalid self loop in surfaces dependencies.
Cyclic dependencies between surfaces mustn't occur. They can cause invalid rendering -
recent drawables might be rendered before older ones.
2010-05-03 16:40:37 +02:00
Dan Kenigsberg
270328e5c0 spice server: fix typo in private key error message 2010-05-03 16:40:37 +02:00
Gerd Hoffmann
a5cf90922e Add C version of find_msb()
This patch allows people to build the spice-client on any 32bit/64bit
architecture.

by Bryan Stillwell <bryan@bokeoa.com>
2010-05-03 11:36:59 +02:00
Alexander Larsson
ae40f270cf Remove all mentions of "cairo" from the code
The command line option is renamed from "cairo" to "sw", and
similarly all filenames and types from Cairo to Sw (and similar).
2010-05-03 12:38:02 +02:00
Alexander Larsson
295c8ed8bc Don't send alpha bytes for primary surface
The framebuffer is not used as a source for alpha blends, so we never
need to scan it for alpha bytes.
2010-04-30 09:54:01 +02:00
Gerd Hoffmann
7425253cec iovec: add sanity check
Adds sanity check to iovec setup.  In theory this should never ever
trigger.  In practice guest driver bugs can make it trigger.  This
patch avoids qemu burning cpu in a endless loop, instead we'll print a
message and abort.  Not sure whenever there is a more graceful way to
handle the situation ...
2010-04-29 18:20:15 +02:00
Gerd Hoffmann
ae8429d0c5 fix worker->stop surface cleanup 2010-04-29 18:19:56 +02:00
Alexander Larsson
fcbd3208fc client: Report window format right for win32 2010-04-29 13:34:44 +02:00
Alexander Larsson
1e4ec1f513 client: Support 16bpp pixmaps on win32 2010-04-29 13:34:16 +02:00
Alexander Larsson
7dddbfe488 win32 client: Remove unnecessary GDIImage type
We just use pixman_image_t as the "information about image data" structure.
2010-04-29 11:40:07 +02:00
Alexander Larsson
42e83e3843 Add support for SPICE_IMAGE_FLAGS_HIGH_BITS_SET 2010-04-28 15:43:41 +02:00
Alexander Larsson
bc6029d0b0 Clear alpha in xRGB destination to avoid pixman setting it to 0xff
Pixman sometimes sets the ignored high byte to 0xff during alpha
blending. This is correct according to pixman specs, as the high
byte is ignored. However its not what windows expects, and it causes
unnecessary regions with non-zero high byte, causing us to
send rgba data instead of rgb which compresses worse.

So, we detect this and clear the high byte.
2010-04-28 12:15:24 +02:00
Alexander Larsson
ac5535048c Fix line lengths and tabs 2010-04-28 12:00:25 +02:00
Gerd Hoffmann
e52974c7b4 fix two warnings 2010-04-26 14:01:37 +02:00
Alexander Larsson
16328d2035 Remove surface format workaround now that win32 driver is fixed
The win32 driver makes all 32bit surfaces be xRGB now, so we
can remove this old workaround.
2010-04-23 21:02:59 +02:00
Alexander Larsson
a1ec6e065a Fix up win32 client with recent changes 2010-04-23 16:41:47 +02:00
Alexander Larsson
b2165b4d04 Win32 canvas fixes 2010-04-23 16:41:47 +02:00