diff options
Diffstat (limited to 'drivers/staging/vboxvideo/hgsmi_base.c')
-rw-r--r-- | drivers/staging/vboxvideo/hgsmi_base.c | 207 |
1 files changed, 0 insertions, 207 deletions
diff --git a/drivers/staging/vboxvideo/hgsmi_base.c b/drivers/staging/vboxvideo/hgsmi_base.c deleted file mode 100644 index 361d3193258e..000000000000 --- a/drivers/staging/vboxvideo/hgsmi_base.c +++ /dev/null @@ -1,207 +0,0 @@ -// SPDX-License-Identifier: MIT -/* Copyright (C) 2006-2017 Oracle Corporation */ - -#include <linux/vbox_err.h> -#include "vbox_drv.h" -#include "vboxvideo_guest.h" -#include "vboxvideo_vbe.h" -#include "hgsmi_channels.h" -#include "hgsmi_ch_setup.h" - -/** - * Inform the host of the location of the host flags in VRAM via an HGSMI cmd. - * Return: 0 or negative errno value. - * @ctx: The context of the guest heap to use. - * @location: The offset chosen for the flags within guest VRAM. - */ -int hgsmi_report_flags_location(struct gen_pool *ctx, u32 location) -{ - struct hgsmi_buffer_location *p; - - p = hgsmi_buffer_alloc(ctx, sizeof(*p), HGSMI_CH_HGSMI, - HGSMI_CC_HOST_FLAGS_LOCATION); - if (!p) - return -ENOMEM; - - p->buf_location = location; - p->buf_len = sizeof(struct hgsmi_host_flags); - - hgsmi_buffer_submit(ctx, p); - hgsmi_buffer_free(ctx, p); - - return 0; -} - -/** - * Notify the host of HGSMI-related guest capabilities via an HGSMI command. - * Return: 0 or negative errno value. - * @ctx: The context of the guest heap to use. - * @caps: The capabilities to report, see vbva_caps. - */ -int hgsmi_send_caps_info(struct gen_pool *ctx, u32 caps) -{ - struct vbva_caps *p; - - p = hgsmi_buffer_alloc(ctx, sizeof(*p), HGSMI_CH_VBVA, VBVA_INFO_CAPS); - if (!p) - return -ENOMEM; - - p->rc = VERR_NOT_IMPLEMENTED; - p->caps = caps; - - hgsmi_buffer_submit(ctx, p); - - WARN_ON_ONCE(p->rc < 0); - - hgsmi_buffer_free(ctx, p); - - return 0; -} - -int hgsmi_test_query_conf(struct gen_pool *ctx) -{ - u32 value = 0; - int ret; - - ret = hgsmi_query_conf(ctx, U32_MAX, &value); - if (ret) - return ret; - - return value == U32_MAX ? 0 : -EIO; -} - -/** - * Query the host for an HGSMI configuration parameter via an HGSMI command. - * Return: 0 or negative errno value. - * @ctx: The context containing the heap used. - * @index: The index of the parameter to query. - * @value_ret: Where to store the value of the parameter on success. - */ -int hgsmi_query_conf(struct gen_pool *ctx, u32 index, u32 *value_ret) -{ - struct vbva_conf32 *p; - - p = hgsmi_buffer_alloc(ctx, sizeof(*p), HGSMI_CH_VBVA, - VBVA_QUERY_CONF32); - if (!p) - return -ENOMEM; - - p->index = index; - p->value = U32_MAX; - - hgsmi_buffer_submit(ctx, p); - - *value_ret = p->value; - - hgsmi_buffer_free(ctx, p); - - return 0; -} - -/** - * Pass the host a new mouse pointer shape via an HGSMI command. - * Return: 0 or negative errno value. - * @ctx: The context containing the heap to be used. - * @flags: Cursor flags. - * @hot_x: Horizontal position of the hot spot. - * @hot_y: Vertical position of the hot spot. - * @width: Width in pixels of the cursor. - * @height: Height in pixels of the cursor. - * @pixels: Pixel data, @see VMMDevReqMousePointer for the format. - * @len: Size in bytes of the pixel data. - */ -int hgsmi_update_pointer_shape(struct gen_pool *ctx, u32 flags, - u32 hot_x, u32 hot_y, u32 width, u32 height, - u8 *pixels, u32 len) -{ - struct vbva_mouse_pointer_shape *p; - u32 pixel_len = 0; - int rc; - - if (flags & VBOX_MOUSE_POINTER_SHAPE) { - /* - * Size of the pointer data: - * sizeof (AND mask) + sizeof (XOR_MASK) - */ - pixel_len = ((((width + 7) / 8) * height + 3) & ~3) + - width * 4 * height; - if (pixel_len > len) - return -EINVAL; - - /* - * If shape is supplied, then always create the pointer visible. - * See comments in 'vboxUpdatePointerShape' - */ - flags |= VBOX_MOUSE_POINTER_VISIBLE; - } - - p = hgsmi_buffer_alloc(ctx, sizeof(*p) + pixel_len, HGSMI_CH_VBVA, - VBVA_MOUSE_POINTER_SHAPE); - if (!p) - return -ENOMEM; - - p->result = VINF_SUCCESS; - p->flags = flags; - p->hot_X = hot_x; - p->hot_y = hot_y; - p->width = width; - p->height = height; - if (pixel_len) - memcpy(p->data, pixels, pixel_len); - - hgsmi_buffer_submit(ctx, p); - - switch (p->result) { - case VINF_SUCCESS: - rc = 0; - break; - case VERR_NO_MEMORY: - rc = -ENOMEM; - break; - case VERR_NOT_SUPPORTED: - rc = -EBUSY; - break; - default: - rc = -EINVAL; - } - - hgsmi_buffer_free(ctx, p); - - return rc; -} - -/** - * Report the guest cursor position. The host may wish to use this information - * to re-position its own cursor (though this is currently unlikely). The - * current host cursor position is returned. - * Return: 0 or negative errno value. - * @ctx: The context containing the heap used. - * @report_position: Are we reporting a position? - * @x: Guest cursor X position. - * @y: Guest cursor Y position. - * @x_host: Host cursor X position is stored here. Optional. - * @y_host: Host cursor Y position is stored here. Optional. - */ -int hgsmi_cursor_position(struct gen_pool *ctx, bool report_position, - u32 x, u32 y, u32 *x_host, u32 *y_host) -{ - struct vbva_cursor_position *p; - - p = hgsmi_buffer_alloc(ctx, sizeof(*p), HGSMI_CH_VBVA, - VBVA_CURSOR_POSITION); - if (!p) - return -ENOMEM; - - p->report_position = report_position; - p->x = x; - p->y = y; - - hgsmi_buffer_submit(ctx, p); - - *x_host = p->x; - *y_host = p->y; - - hgsmi_buffer_free(ctx, p); - - return 0; -} |