From 05697e502d709974f9b94feca5d9bdde20b993be Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Tue, 2 Mar 2010 16:25:22 +0100 Subject: Make virt mapping an interface --- common/cairo_canvas.c | 9 ++------- common/cairo_canvas.h | 3 +-- common/canvas_base.c | 21 +++++++-------------- common/canvas_base.h | 15 ++++++++++----- common/gl_canvas.c | 9 ++------- common/gl_canvas.h | 3 +-- 6 files changed, 23 insertions(+), 37 deletions(-) (limited to 'common') diff --git a/common/cairo_canvas.c b/common/cairo_canvas.c index a3211dea..8dcb12dd 100644 --- a/common/cairo_canvas.c +++ b/common/cairo_canvas.c @@ -2157,8 +2157,7 @@ CairoCanvas *canvas_create(pixman_image_t *image, int bits #endif , SpiceGlzDecoder *glz_decoder #ifndef CAIRO_CANVAS_NO_CHUNKS - , void *get_virt_opaque, get_virt_fn_t get_virt, - void *validate_virt_opaque, validate_virt_fn_t validate_virt + , SpiceVirtMapping *virt_mapping #endif ) { @@ -2181,11 +2180,7 @@ CairoCanvas *canvas_create(pixman_image_t *image, int bits #endif , glz_decoder #ifndef CAIRO_CANVAS_NO_CHUNKS - , - get_virt_opaque, - get_virt, - validate_virt_opaque, - validate_virt + , virt_mapping #endif ); canvas->private_data = NULL; diff --git a/common/cairo_canvas.h b/common/cairo_canvas.h index 38009035..c0102aee 100644 --- a/common/cairo_canvas.h +++ b/common/cairo_canvas.h @@ -71,8 +71,7 @@ CairoCanvas *canvas_create(pixman_image_t *image, int bits #endif , SpiceGlzDecoder *glz_decoder #ifndef CAIRO_CANVAS_NO_CHUNKS - , void *get_virt_opaque, get_virt_fn_t get_virt, - void *validate_virt_opaque, validate_virt_fn_t validate_virt + , SpiceVirtMapping *virt_mapping #endif ); void canvas_destroy(CairoCanvas *canvas); diff --git a/common/canvas_base.c b/common/canvas_base.c index aeb1cb56..01945ec9 100644 --- a/common/canvas_base.c +++ b/common/canvas_base.c @@ -164,10 +164,7 @@ typedef struct QuicData { jmp_buf jmp_env; #ifndef CAIRO_CANVAS_NO_CHUNKS SPICE_ADDRESS next; - get_virt_fn_t get_virt; - void *get_virt_opaque; - validate_virt_fn_t validate_virt; - void *validate_virt_opaque; + SpiceVirtMapping *virt_mapping; #endif char message_buf[512]; } QuicData; @@ -1506,11 +1503,11 @@ static int quic_usr_more_space(QuicUsrContext *usr, uint32_t **io_ptr, int rows_ if (!quic_data->next) { return 0; } - chunk = (DataChunk *)quic_data->get_virt(quic_data->get_virt_opaque, quic_data->next, - sizeof(DataChunk)); + chunk = (DataChunk *)quic_data->virt_mapping->ops->get_virt(quic_data->virt_mapping, quic_data->next, + sizeof(DataChunk)); size = chunk->size; - quic_data->validate_virt(quic_data->validate_virt_opaque, (unsigned long)chunk->data, - quic_data->next, size); + quic_data->virt_mapping->ops->validate_virt(quic_data->virt_mapping, (unsigned long)chunk->data, + quic_data->next, size); quic_data->next = chunk->next; *io_ptr = (uint32_t *)chunk->data; @@ -1555,8 +1552,7 @@ static int canvas_base_init(CanvasBase *canvas, int depth #endif , SpiceGlzDecoder *glz_decoder #ifndef CAIRO_CANVAS_NO_CHUNKS - , void *get_virt_opaque, get_virt_fn_t get_virt, - void *validate_virt_opaque, validate_virt_fn_t validate_virt + , SpiceVirtMapping *virt_mapping #endif ) { @@ -1568,10 +1564,7 @@ static int canvas_base_init(CanvasBase *canvas, int depth canvas->quic_data.usr.more_space = quic_usr_more_space; canvas->quic_data.usr.more_lines = quic_usr_more_lines; #ifndef CAIRO_CANVAS_NO_CHUNKS - canvas->quic_data.get_virt_opaque = get_virt_opaque; - canvas->quic_data.get_virt = get_virt; - canvas->quic_data.validate_virt_opaque = validate_virt_opaque; - canvas->quic_data.validate_virt = validate_virt; + canvas->quic_data.virt_mapping = virt_mapping; #endif if (!(canvas->quic_data.quic = quic_create(&canvas->quic_data.usr))) { return 0; diff --git a/common/canvas_base.h b/common/canvas_base.h index 7796245c..4c286547 100644 --- a/common/canvas_base.h +++ b/common/canvas_base.h @@ -27,6 +27,7 @@ typedef struct _SpiceImageCache SpiceImageCache; typedef struct _SpicePaletteCache SpicePaletteCache; typedef struct _SpiceGlzDecoder SpiceGlzDecoder; +typedef struct _SpiceVirtMapping SpiceVirtMapping; typedef struct { void (*put)(SpiceImageCache *cache, @@ -64,11 +65,15 @@ struct _SpiceGlzDecoder { SpiceGlzDecoderOps *ops; }; -#ifndef CAIRO_CANVAS_NO_CHUNKS -typedef void *(*get_virt_fn_t)(void *get_virt_opaque, unsigned long addr, uint32_t add_size); -typedef void (*validate_virt_fn_t)(void *validate_virt_opaque, unsigned long virt, - unsigned long from_addr, uint32_t add_size); -#endif +typedef struct { + void *(*get_virt)(SpiceVirtMapping *mapping, unsigned long addr, uint32_t add_size); + void (*validate_virt)(SpiceVirtMapping *mapping, unsigned long virt, + unsigned long from_addr, uint32_t add_size); +} SpiceVirtMappingOps; + +struct _SpiceVirtMapping { + SpiceVirtMappingOps *ops; +}; #endif diff --git a/common/gl_canvas.c b/common/gl_canvas.c index f173194e..e7a7bfff 100644 --- a/common/gl_canvas.c +++ b/common/gl_canvas.c @@ -813,8 +813,7 @@ GLCanvas *gl_canvas_create(void *usr_data, int width, int height, int depth #endif , SpiceGlzDecoder *glz_decoder #ifndef CAIRO_CANVAS_NO_CHUNKS - , void *get_virt_opaque, get_virt_fn_t get_virt, - void *validate_virt_opaque, validate_virt_fn_t validate_virt + , SpiceVirtMapping *virt_mapping #endif ) { @@ -843,11 +842,7 @@ GLCanvas *gl_canvas_create(void *usr_data, int width, int height, int depth #endif , glz_decoder #ifndef CAIRO_CANVAS_NO_CHUNKS - , - get_virt_opaque, - get_virt, - validate_virt_opaque, - validate_virt + , virt_mapping #endif ); if (!init_ok) { diff --git a/common/gl_canvas.h b/common/gl_canvas.h index ec0cbdbf..ee272a8a 100644 --- a/common/gl_canvas.h +++ b/common/gl_canvas.h @@ -66,8 +66,7 @@ GLCanvas *gl_canvas_create(void *usr_data, int width, int height, int depth #endif , SpiceGlzDecoder *glz_decoder #ifndef CAIRO_CANVAS_NO_CHUNKS - , void *get_virt_opaque, get_virt_fn_t get_virt, - void *validate_virt_opaque, validate_virt_fn_t validate_virt + , SpiceVirtMapping *virt_mapping #endif ); void gl_canvas_destroy(GLCanvas *, int); -- cgit