forked from KolibriOS/kolibrios
vmwgfx: vmw alpha cursor
git-svn-id: svn://kolibrios.org@4570 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
4130072f5a
commit
81e6529629
@ -62,6 +62,7 @@ NAME_SRC= \
|
|||||||
../ttm/ttm_bo.c \
|
../ttm/ttm_bo.c \
|
||||||
../ttm/ttm_bo_manager.c \
|
../ttm/ttm_bo_manager.c \
|
||||||
../ttm/ttm_execbuf_util.c \
|
../ttm/ttm_execbuf_util.c \
|
||||||
|
../ttm/ttm_lock.c \
|
||||||
../ttm/ttm_memory.c \
|
../ttm/ttm_memory.c \
|
||||||
../ttm/ttm_object.c \
|
../ttm/ttm_object.c \
|
||||||
../ttm/ttm_page_alloc.c \
|
../ttm/ttm_page_alloc.c \
|
||||||
|
@ -98,19 +98,13 @@ u32_t __attribute__((externally_visible)) drvEntry(int action, char *cmdline)
|
|||||||
if( cmdline && *cmdline )
|
if( cmdline && *cmdline )
|
||||||
parse_cmdline(cmdline, log);
|
parse_cmdline(cmdline, log);
|
||||||
|
|
||||||
if(!dbg_open(log))
|
if( *log && !dbg_open(log))
|
||||||
{
|
{
|
||||||
strcpy(log, "/tmp1/1/vmw.log");
|
|
||||||
// strcpy(log, "/RD/1/DRIVERS/VMW.log");
|
|
||||||
// strcpy(log, "/HD0/1/vmw.log");
|
|
||||||
|
|
||||||
if(!dbg_open(log))
|
|
||||||
{
|
|
||||||
printf("Can't open %s\nExit\n", log);
|
printf("Can't open %s\nExit\n", log);
|
||||||
return 0;
|
return 0;
|
||||||
};
|
|
||||||
}
|
}
|
||||||
dbgprintf(" vmw v3.12-rc6\n cmdline: %s\n", cmdline);
|
|
||||||
|
dbgprintf(" vmw v3.14-rc1\n cmdline: %s\n", cmdline);
|
||||||
|
|
||||||
cpu_detect();
|
cpu_detect();
|
||||||
dbgprintf("\ncache line size %d\n", x86_clflush_size);
|
dbgprintf("\ncache line size %d\n", x86_clflush_size);
|
||||||
@ -820,16 +814,10 @@ void print_hex_dump_bytes(const char *prefix_str, int prefix_type,
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include "vmwgfx_kms.h"
|
#include "vmwgfx_kms.h"
|
||||||
|
|
||||||
void kms_update();
|
void kms_update();
|
||||||
|
|
||||||
//#define iowrite32(v, addr) writel((v), (addr))
|
|
||||||
|
|
||||||
//#include "bitmap.h"
|
|
||||||
|
|
||||||
extern struct drm_device *main_device;
|
extern struct drm_device *main_device;
|
||||||
|
|
||||||
@ -842,7 +830,6 @@ typedef struct
|
|||||||
uint32_t hot_y;
|
uint32_t hot_y;
|
||||||
|
|
||||||
struct list_head list;
|
struct list_head list;
|
||||||
// struct drm_i915_gem_object *cobj;
|
|
||||||
}cursor_t;
|
}cursor_t;
|
||||||
|
|
||||||
#define CURSOR_WIDTH 64
|
#define CURSOR_WIDTH 64
|
||||||
@ -893,6 +880,37 @@ static int count_connector_modes(struct drm_connector* connector)
|
|||||||
return count;
|
return count;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void __stdcall restore_cursor(int x, int y){};
|
||||||
|
static void disable_mouse(void) {};
|
||||||
|
|
||||||
|
static void __stdcall move_cursor_kms(cursor_t *cursor, int x, int y)
|
||||||
|
{
|
||||||
|
struct drm_crtc *crtc = os_display->crtc;
|
||||||
|
struct vmw_private *dev_priv = vmw_priv(crtc->dev);
|
||||||
|
struct vmw_display_unit *du = vmw_crtc_to_du(crtc);
|
||||||
|
|
||||||
|
vmw_cursor_update_position(dev_priv, true, x,y);
|
||||||
|
};
|
||||||
|
|
||||||
|
static cursor_t* __stdcall select_cursor_kms(cursor_t *cursor)
|
||||||
|
{
|
||||||
|
struct vmw_private *dev_priv = vmw_priv(os_display->ddev);
|
||||||
|
cursor_t *old;
|
||||||
|
|
||||||
|
old = os_display->cursor;
|
||||||
|
os_display->cursor = cursor;
|
||||||
|
|
||||||
|
vmw_cursor_update_image(dev_priv, cursor->data,
|
||||||
|
64, 64, cursor->hot_x, cursor->hot_y);
|
||||||
|
|
||||||
|
// vmw_cursor_update_position(dev_priv, true,
|
||||||
|
// du->cursor_x + du->hotspot_x,
|
||||||
|
// du->cursor_y + du->hotspot_y);
|
||||||
|
|
||||||
|
return old;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
int kms_init(struct drm_device *dev)
|
int kms_init(struct drm_device *dev)
|
||||||
{
|
{
|
||||||
struct drm_connector *connector;
|
struct drm_connector *connector;
|
||||||
@ -943,27 +961,14 @@ int kms_init(struct drm_device *dev)
|
|||||||
os_display->connector = connector;
|
os_display->connector = connector;
|
||||||
os_display->crtc = crtc;
|
os_display->crtc = crtc;
|
||||||
os_display->supported_modes = mode_count;
|
os_display->supported_modes = mode_count;
|
||||||
// os_display->update = kms_update;
|
|
||||||
|
|
||||||
// struct intel_crtc *intel_crtc = to_intel_crtc(os_display->crtc);
|
os_display->restore_cursor(0,0);
|
||||||
|
os_display->select_cursor = select_cursor_kms;
|
||||||
// list_for_each_entry(cursor, &os_display->cursors, list)
|
os_display->show_cursor = NULL;
|
||||||
// {
|
os_display->move_cursor = move_cursor_kms;
|
||||||
// init_cursor(cursor);
|
os_display->restore_cursor = restore_cursor;
|
||||||
// };
|
os_display->disable_mouse = disable_mouse;
|
||||||
|
select_cursor_kms(os_display->cursor);
|
||||||
// os_display->restore_cursor(0,0);
|
|
||||||
// os_display->init_cursor = init_cursor;
|
|
||||||
// os_display->select_cursor = select_cursor_kms;
|
|
||||||
// os_display->show_cursor = NULL;
|
|
||||||
// os_display->move_cursor = move_cursor_kms;
|
|
||||||
// os_display->restore_cursor = restore_cursor;
|
|
||||||
// os_display->disable_mouse = disable_mouse;
|
|
||||||
|
|
||||||
// intel_crtc->cursor_x = os_display->width/2;
|
|
||||||
// intel_crtc->cursor_y = os_display->height/2;
|
|
||||||
|
|
||||||
// select_cursor_kms(os_display->cursor);
|
|
||||||
};
|
};
|
||||||
safe_sti(ifl);
|
safe_sti(ifl);
|
||||||
|
|
||||||
|
@ -390,8 +390,6 @@ int vmw_3d_resource_inc(struct vmw_private *dev_priv,
|
|||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
ENTER();
|
|
||||||
|
|
||||||
mutex_lock(&dev_priv->release_mutex);
|
mutex_lock(&dev_priv->release_mutex);
|
||||||
if (unlikely(dev_priv->num_3d_resources++ == 0)) {
|
if (unlikely(dev_priv->num_3d_resources++ == 0)) {
|
||||||
ret = vmw_request_device(dev_priv);
|
ret = vmw_request_device(dev_priv);
|
||||||
@ -406,7 +404,6 @@ int vmw_3d_resource_inc(struct vmw_private *dev_priv,
|
|||||||
}
|
}
|
||||||
|
|
||||||
mutex_unlock(&dev_priv->release_mutex);
|
mutex_unlock(&dev_priv->release_mutex);
|
||||||
LEAVE();
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -475,6 +472,33 @@ static void vmw_get_initial_size(struct vmw_private *dev_priv)
|
|||||||
dev_priv->initial_height = height;
|
dev_priv->initial_height = height;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* vmw_dma_select_mode - Determine how DMA mappings should be set up for this
|
||||||
|
* system.
|
||||||
|
*
|
||||||
|
* @dev_priv: Pointer to a struct vmw_private
|
||||||
|
*
|
||||||
|
* This functions tries to determine the IOMMU setup and what actions
|
||||||
|
* need to be taken by the driver to make system pages visible to the
|
||||||
|
* device.
|
||||||
|
* If this function decides that DMA is not possible, it returns -EINVAL.
|
||||||
|
* The driver may then try to disable features of the device that require
|
||||||
|
* DMA.
|
||||||
|
*/
|
||||||
|
static int vmw_dma_select_mode(struct vmw_private *dev_priv)
|
||||||
|
{
|
||||||
|
static const char *names[vmw_dma_map_max] = {
|
||||||
|
[vmw_dma_phys] = "Using physical TTM page addresses.",
|
||||||
|
[vmw_dma_alloc_coherent] = "Using coherent TTM pages.",
|
||||||
|
[vmw_dma_map_populate] = "Keeping DMA mappings.",
|
||||||
|
[vmw_dma_map_bind] = "Giving up DMA mappings early."};
|
||||||
|
|
||||||
|
dev_priv->map_mode = vmw_dma_phys;
|
||||||
|
DRM_INFO("DMA map mode: %s\n", names[dev_priv->map_mode]);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* vmw_dma_masks - set required page- and dma masks
|
* vmw_dma_masks - set required page- and dma masks
|
||||||
*
|
*
|
||||||
@ -510,7 +534,6 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset)
|
|||||||
enum vmw_res_type i;
|
enum vmw_res_type i;
|
||||||
bool refuse_dma = false;
|
bool refuse_dma = false;
|
||||||
|
|
||||||
|
|
||||||
ENTER();
|
ENTER();
|
||||||
|
|
||||||
dev_priv = kzalloc(sizeof(*dev_priv), GFP_KERNEL);
|
dev_priv = kzalloc(sizeof(*dev_priv), GFP_KERNEL);
|
||||||
@ -564,11 +587,11 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset)
|
|||||||
}
|
}
|
||||||
|
|
||||||
dev_priv->capabilities = vmw_read(dev_priv, SVGA_REG_CAPABILITIES);
|
dev_priv->capabilities = vmw_read(dev_priv, SVGA_REG_CAPABILITIES);
|
||||||
// ret = vmw_dma_select_mode(dev_priv);
|
ret = vmw_dma_select_mode(dev_priv);
|
||||||
// if (unlikely(ret != 0)) {
|
if (unlikely(ret != 0)) {
|
||||||
// DRM_INFO("Restricting capabilities due to IOMMU setup.\n");
|
DRM_INFO("Restricting capabilities due to IOMMU setup.\n");
|
||||||
// refuse_dma = true;
|
refuse_dma = true;
|
||||||
// }
|
}
|
||||||
|
|
||||||
dev_priv->vram_size = vmw_read(dev_priv, SVGA_REG_VRAM_SIZE);
|
dev_priv->vram_size = vmw_read(dev_priv, SVGA_REG_VRAM_SIZE);
|
||||||
dev_priv->mmio_size = vmw_read(dev_priv, SVGA_REG_MEM_SIZE);
|
dev_priv->mmio_size = vmw_read(dev_priv, SVGA_REG_MEM_SIZE);
|
||||||
@ -927,7 +950,7 @@ static void vmw_lastclose(struct drm_device *dev)
|
|||||||
|
|
||||||
static void vmw_master_init(struct vmw_master *vmaster)
|
static void vmw_master_init(struct vmw_master *vmaster)
|
||||||
{
|
{
|
||||||
// ttm_lock_init(&vmaster->lock);
|
ttm_lock_init(&vmaster->lock);
|
||||||
INIT_LIST_HEAD(&vmaster->fb_surf);
|
INIT_LIST_HEAD(&vmaster->fb_surf);
|
||||||
mutex_init(&vmaster->fb_surf_mutex);
|
mutex_init(&vmaster->fb_surf_mutex);
|
||||||
}
|
}
|
||||||
@ -1176,14 +1199,12 @@ static int vmw_pm_prepare(struct device *kdev)
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
static struct drm_driver driver = {
|
static struct drm_driver driver = {
|
||||||
.driver_features = DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED |
|
.driver_features = DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED |
|
||||||
DRIVER_MODESET,
|
DRIVER_MODESET,
|
||||||
.load = vmw_driver_load,
|
.load = vmw_driver_load,
|
||||||
// .unload = vmw_driver_unload,
|
// .unload = vmw_driver_unload,
|
||||||
// .firstopen = vmw_firstopen,
|
// .lastclose = vmw_lastclose,
|
||||||
// .lastclose = vmw_lastclose,
|
|
||||||
.irq_preinstall = vmw_irq_preinstall,
|
.irq_preinstall = vmw_irq_preinstall,
|
||||||
.irq_postinstall = vmw_irq_postinstall,
|
.irq_postinstall = vmw_irq_postinstall,
|
||||||
// .irq_uninstall = vmw_irq_uninstall,
|
// .irq_uninstall = vmw_irq_uninstall,
|
||||||
@ -1193,11 +1214,6 @@ static struct drm_driver driver = {
|
|||||||
// .disable_vblank = vmw_disable_vblank,
|
// .disable_vblank = vmw_disable_vblank,
|
||||||
// .ioctls = vmw_ioctls,
|
// .ioctls = vmw_ioctls,
|
||||||
// .num_ioctls = DRM_ARRAY_SIZE(vmw_ioctls),
|
// .num_ioctls = DRM_ARRAY_SIZE(vmw_ioctls),
|
||||||
// .dma_quiescent = NULL, /*vmw_dma_quiescent, */
|
|
||||||
// .master_create = vmw_master_create,
|
|
||||||
// .master_destroy = vmw_master_destroy,
|
|
||||||
// .master_set = vmw_master_set,
|
|
||||||
// .master_drop = vmw_master_drop,
|
|
||||||
.open = vmw_driver_open,
|
.open = vmw_driver_open,
|
||||||
// .preclose = vmw_preclose,
|
// .preclose = vmw_preclose,
|
||||||
// .postclose = vmw_postclose,
|
// .postclose = vmw_postclose,
|
||||||
@ -1206,13 +1222,7 @@ static struct drm_driver driver = {
|
|||||||
// .dumb_map_offset = vmw_dumb_map_offset,
|
// .dumb_map_offset = vmw_dumb_map_offset,
|
||||||
// .dumb_destroy = vmw_dumb_destroy,
|
// .dumb_destroy = vmw_dumb_destroy,
|
||||||
|
|
||||||
// .fops = &vmwgfx_driver_fops,
|
|
||||||
// .name = VMWGFX_DRIVER_NAME,
|
|
||||||
// .desc = VMWGFX_DRIVER_DESC,
|
|
||||||
// .date = VMWGFX_DRIVER_DATE,
|
|
||||||
// .major = VMWGFX_DRIVER_MAJOR,
|
|
||||||
// .minor = VMWGFX_DRIVER_MINOR,
|
|
||||||
// .patchlevel = VMWGFX_DRIVER_PATCHLEVEL
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
@ -234,7 +234,7 @@ static int vmw_fifo_wait_noirq(struct vmw_private *dev_priv,
|
|||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
unsigned long end_jiffies = GetTimerTicks() + timeout;
|
unsigned long end_jiffies = GetTimerTicks() + timeout;
|
||||||
DEFINE_WAIT(__wait);
|
// DEFINE_WAIT(__wait);
|
||||||
|
|
||||||
DRM_INFO("Fifo wait noirq.\n");
|
DRM_INFO("Fifo wait noirq.\n");
|
||||||
|
|
||||||
@ -411,6 +411,8 @@ static void vmw_fifo_res_copy(struct vmw_fifo_state *fifo_state,
|
|||||||
uint32_t *buffer = (fifo_state->dynamic_buffer != NULL) ?
|
uint32_t *buffer = (fifo_state->dynamic_buffer != NULL) ?
|
||||||
fifo_state->dynamic_buffer : fifo_state->static_buffer;
|
fifo_state->dynamic_buffer : fifo_state->static_buffer;
|
||||||
|
|
||||||
|
ENTER();
|
||||||
|
|
||||||
if (bytes < chunk_size)
|
if (bytes < chunk_size)
|
||||||
chunk_size = bytes;
|
chunk_size = bytes;
|
||||||
|
|
||||||
@ -421,6 +423,8 @@ static void vmw_fifo_res_copy(struct vmw_fifo_state *fifo_state,
|
|||||||
if (rest)
|
if (rest)
|
||||||
memcpy(fifo_mem + (min >> 2), buffer + (chunk_size >> 2),
|
memcpy(fifo_mem + (min >> 2), buffer + (chunk_size >> 2),
|
||||||
rest);
|
rest);
|
||||||
|
LEAVE();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vmw_fifo_slow_copy(struct vmw_fifo_state *fifo_state,
|
static void vmw_fifo_slow_copy(struct vmw_fifo_state *fifo_state,
|
||||||
@ -430,6 +434,7 @@ static void vmw_fifo_slow_copy(struct vmw_fifo_state *fifo_state,
|
|||||||
{
|
{
|
||||||
uint32_t *buffer = (fifo_state->dynamic_buffer != NULL) ?
|
uint32_t *buffer = (fifo_state->dynamic_buffer != NULL) ?
|
||||||
fifo_state->dynamic_buffer : fifo_state->static_buffer;
|
fifo_state->dynamic_buffer : fifo_state->static_buffer;
|
||||||
|
ENTER();
|
||||||
|
|
||||||
while (bytes > 0) {
|
while (bytes > 0) {
|
||||||
iowrite32(*buffer++, fifo_mem + (next_cmd >> 2));
|
iowrite32(*buffer++, fifo_mem + (next_cmd >> 2));
|
||||||
@ -441,6 +446,7 @@ static void vmw_fifo_slow_copy(struct vmw_fifo_state *fifo_state,
|
|||||||
mb();
|
mb();
|
||||||
bytes -= sizeof(uint32_t);
|
bytes -= sizeof(uint32_t);
|
||||||
}
|
}
|
||||||
|
LEAVE();
|
||||||
}
|
}
|
||||||
|
|
||||||
void vmw_fifo_commit(struct vmw_private *dev_priv, uint32_t bytes)
|
void vmw_fifo_commit(struct vmw_private *dev_priv, uint32_t bytes)
|
||||||
@ -452,6 +458,8 @@ void vmw_fifo_commit(struct vmw_private *dev_priv, uint32_t bytes)
|
|||||||
uint32_t min = ioread32(fifo_mem + SVGA_FIFO_MIN);
|
uint32_t min = ioread32(fifo_mem + SVGA_FIFO_MIN);
|
||||||
bool reserveable = fifo_state->capabilities & SVGA_FIFO_CAP_RESERVE;
|
bool reserveable = fifo_state->capabilities & SVGA_FIFO_CAP_RESERVE;
|
||||||
|
|
||||||
|
// ENTER();
|
||||||
|
|
||||||
BUG_ON((bytes & 3) != 0);
|
BUG_ON((bytes & 3) != 0);
|
||||||
BUG_ON(bytes > fifo_state->reserved_size);
|
BUG_ON(bytes > fifo_state->reserved_size);
|
||||||
|
|
||||||
@ -487,6 +495,8 @@ void vmw_fifo_commit(struct vmw_private *dev_priv, uint32_t bytes)
|
|||||||
// up_write(&fifo_state->rwsem);
|
// up_write(&fifo_state->rwsem);
|
||||||
vmw_fifo_ping_host(dev_priv, SVGA_SYNC_GENERIC);
|
vmw_fifo_ping_host(dev_priv, SVGA_SYNC_GENERIC);
|
||||||
mutex_unlock(&fifo_state->fifo_mutex);
|
mutex_unlock(&fifo_state->fifo_mutex);
|
||||||
|
|
||||||
|
// LEAVE();
|
||||||
}
|
}
|
||||||
|
|
||||||
int vmw_fifo_send_fence(struct vmw_private *dev_priv, uint32_t *seqno)
|
int vmw_fifo_send_fence(struct vmw_private *dev_priv, uint32_t *seqno)
|
||||||
|
@ -40,7 +40,7 @@ struct vmw_clip_rect {
|
|||||||
* Clip @num_rects number of @rects against @clip storing the
|
* Clip @num_rects number of @rects against @clip storing the
|
||||||
* results in @out_rects and the number of passed rects in @out_num.
|
* results in @out_rects and the number of passed rects in @out_num.
|
||||||
*/
|
*/
|
||||||
void vmw_clip_cliprects(struct drm_clip_rect *rects,
|
static void vmw_clip_cliprects(struct drm_clip_rect *rects,
|
||||||
int num_rects,
|
int num_rects,
|
||||||
struct vmw_clip_rect clip,
|
struct vmw_clip_rect clip,
|
||||||
SVGASignedRect *out_rects,
|
SVGASignedRect *out_rects,
|
||||||
@ -80,7 +80,6 @@ void vmw_display_unit_cleanup(struct vmw_display_unit *du)
|
|||||||
drm_connector_cleanup(&du->connector);
|
drm_connector_cleanup(&du->connector);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
/*
|
/*
|
||||||
* Display Unit Cursor functions
|
* Display Unit Cursor functions
|
||||||
*/
|
*/
|
||||||
@ -95,6 +94,8 @@ int vmw_cursor_update_image(struct vmw_private *dev_priv,
|
|||||||
} *cmd;
|
} *cmd;
|
||||||
u32 image_size = width * height * 4;
|
u32 image_size = width * height * 4;
|
||||||
u32 cmd_size = sizeof(*cmd) + image_size;
|
u32 cmd_size = sizeof(*cmd) + image_size;
|
||||||
|
u32 *dst;
|
||||||
|
int i, j;
|
||||||
|
|
||||||
if (!image)
|
if (!image)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
@ -107,7 +108,17 @@ int vmw_cursor_update_image(struct vmw_private *dev_priv,
|
|||||||
|
|
||||||
memset(cmd, 0, sizeof(*cmd));
|
memset(cmd, 0, sizeof(*cmd));
|
||||||
|
|
||||||
memcpy(&cmd[1], image, image_size);
|
dst = (u32*)&cmd[1];
|
||||||
|
|
||||||
|
for(i = 0; i < 32; i++)
|
||||||
|
{
|
||||||
|
for(j = 0; j < 32; j++)
|
||||||
|
*dst++ = *image++;
|
||||||
|
for( ; j < 64; j++)
|
||||||
|
*dst++ = 0;
|
||||||
|
}
|
||||||
|
for(i = 0; i < 64*(64-32); i++)
|
||||||
|
*image++ = 0;
|
||||||
|
|
||||||
cmd->cmd = cpu_to_le32(SVGA_CMD_DEFINE_ALPHA_CURSOR);
|
cmd->cmd = cpu_to_le32(SVGA_CMD_DEFINE_ALPHA_CURSOR);
|
||||||
cmd->cursor.id = cpu_to_le32(0);
|
cmd->cursor.id = cpu_to_le32(0);
|
||||||
@ -121,6 +132,7 @@ int vmw_cursor_update_image(struct vmw_private *dev_priv,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
int vmw_cursor_update_dmabuf(struct vmw_private *dev_priv,
|
int vmw_cursor_update_dmabuf(struct vmw_private *dev_priv,
|
||||||
struct vmw_dma_buffer *dmabuf,
|
struct vmw_dma_buffer *dmabuf,
|
||||||
u32 width, u32 height,
|
u32 width, u32 height,
|
||||||
@ -156,7 +168,7 @@ err_unreserve:
|
|||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void vmw_cursor_update_position(struct vmw_private *dev_priv,
|
void vmw_cursor_update_position(struct vmw_private *dev_priv,
|
||||||
bool show, int x, int y)
|
bool show, int x, int y)
|
||||||
@ -171,6 +183,7 @@ void vmw_cursor_update_position(struct vmw_private *dev_priv,
|
|||||||
iowrite32(++count, fifo_mem + SVGA_FIFO_CURSOR_COUNT);
|
iowrite32(++count, fifo_mem + SVGA_FIFO_CURSOR_COUNT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
int vmw_du_crtc_cursor_set(struct drm_crtc *crtc, struct drm_file *file_priv,
|
int vmw_du_crtc_cursor_set(struct drm_crtc *crtc, struct drm_file *file_priv,
|
||||||
uint32_t handle, uint32_t width, uint32_t height)
|
uint32_t handle, uint32_t width, uint32_t height)
|
||||||
{
|
{
|
||||||
@ -424,21 +437,17 @@ struct vmw_framebuffer_surface {
|
|||||||
struct drm_master *master;
|
struct drm_master *master;
|
||||||
};
|
};
|
||||||
|
|
||||||
void vmw_framebuffer_surface_destroy(struct drm_framebuffer *framebuffer)
|
static void vmw_framebuffer_surface_destroy(struct drm_framebuffer *framebuffer)
|
||||||
{
|
{
|
||||||
struct vmw_framebuffer_surface *vfbs =
|
struct vmw_framebuffer_surface *vfbs =
|
||||||
vmw_framebuffer_to_vfbs(framebuffer);
|
vmw_framebuffer_to_vfbs(framebuffer);
|
||||||
// struct vmw_master *vmaster = vmw_master(vfbs->master);
|
struct vmw_master *vmaster = vmw_master(vfbs->master);
|
||||||
|
|
||||||
|
|
||||||
// mutex_lock(&vmaster->fb_surf_mutex);
|
mutex_lock(&vmaster->fb_surf_mutex);
|
||||||
// list_del(&vfbs->head);
|
list_del(&vfbs->head);
|
||||||
// mutex_unlock(&vmaster->fb_surf_mutex);
|
mutex_unlock(&vmaster->fb_surf_mutex);
|
||||||
|
|
||||||
// drm_master_put(&vfbs->master);
|
|
||||||
// drm_framebuffer_cleanup(framebuffer);
|
|
||||||
// vmw_surface_unreference(&vfbs->surface);
|
|
||||||
// ttm_base_object_unref(&vfbs->base.user_obj);
|
|
||||||
|
|
||||||
kfree(vfbs);
|
kfree(vfbs);
|
||||||
}
|
}
|
||||||
@ -590,29 +599,33 @@ out_free_tmp:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int vmw_framebuffer_surface_dirty(struct drm_framebuffer *framebuffer,
|
static int vmw_framebuffer_surface_dirty(struct drm_framebuffer *framebuffer,
|
||||||
struct drm_file *file_priv,
|
struct drm_file *file_priv,
|
||||||
unsigned flags, unsigned color,
|
unsigned flags, unsigned color,
|
||||||
struct drm_clip_rect *clips,
|
struct drm_clip_rect *clips,
|
||||||
unsigned num_clips)
|
unsigned num_clips)
|
||||||
{
|
{
|
||||||
struct vmw_private *dev_priv = vmw_priv(framebuffer->dev);
|
struct vmw_private *dev_priv = vmw_priv(framebuffer->dev);
|
||||||
// struct vmw_master *vmaster = vmw_master(file_priv->master);
|
struct vmw_master *vmaster = vmw_master(file_priv->master);
|
||||||
struct vmw_framebuffer_surface *vfbs =
|
struct vmw_framebuffer_surface *vfbs =
|
||||||
vmw_framebuffer_to_vfbs(framebuffer);
|
vmw_framebuffer_to_vfbs(framebuffer);
|
||||||
struct drm_clip_rect norect;
|
struct drm_clip_rect norect;
|
||||||
int ret, inc = 1;
|
int ret, inc = 1;
|
||||||
|
|
||||||
// if (unlikely(vfbs->master != file_priv->master))
|
if (unlikely(vfbs->master != file_priv->master))
|
||||||
// return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
/* Require ScreenObject support for 3D */
|
/* Require ScreenObject support for 3D */
|
||||||
if (!dev_priv->sou_priv)
|
if (!dev_priv->sou_priv)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
// ret = ttm_read_lock(&vmaster->lock, true);
|
drm_modeset_lock_all(dev_priv->dev);
|
||||||
// if (unlikely(ret != 0))
|
|
||||||
// return ret;
|
ret = ttm_read_lock(&vmaster->lock, true);
|
||||||
|
if (unlikely(ret != 0)) {
|
||||||
|
drm_modeset_unlock_all(dev_priv->dev);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
if (!num_clips) {
|
if (!num_clips) {
|
||||||
num_clips = 1;
|
num_clips = 1;
|
||||||
@ -629,7 +642,10 @@ int vmw_framebuffer_surface_dirty(struct drm_framebuffer *framebuffer,
|
|||||||
flags, color,
|
flags, color,
|
||||||
clips, num_clips, inc, NULL);
|
clips, num_clips, inc, NULL);
|
||||||
|
|
||||||
// ttm_read_unlock(&vmaster->lock);
|
ttm_read_unlock(&vmaster->lock);
|
||||||
|
|
||||||
|
drm_modeset_unlock_all(dev_priv->dev);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -649,7 +665,7 @@ static int vmw_kms_new_framebuffer_surface(struct vmw_private *dev_priv,
|
|||||||
struct drm_device *dev = dev_priv->dev;
|
struct drm_device *dev = dev_priv->dev;
|
||||||
struct vmw_framebuffer_surface *vfbs;
|
struct vmw_framebuffer_surface *vfbs;
|
||||||
enum SVGA3dSurfaceFormat format;
|
enum SVGA3dSurfaceFormat format;
|
||||||
// struct vmw_master *vmaster = vmw_master(file_priv->master);
|
struct vmw_master *vmaster = vmw_master(file_priv->master);
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
/* 3D is only supported on HWv8 hosts which supports screen objects */
|
/* 3D is only supported on HWv8 hosts which supports screen objects */
|
||||||
@ -722,9 +738,9 @@ static int vmw_kms_new_framebuffer_surface(struct vmw_private *dev_priv,
|
|||||||
vfbs->base.user_handle = mode_cmd->handle;
|
vfbs->base.user_handle = mode_cmd->handle;
|
||||||
// vfbs->master = drm_master_get(file_priv->master);
|
// vfbs->master = drm_master_get(file_priv->master);
|
||||||
|
|
||||||
// mutex_lock(&vmaster->fb_surf_mutex);
|
mutex_lock(&vmaster->fb_surf_mutex);
|
||||||
// list_add_tail(&vfbs->head, &vmaster->fb_surf);
|
list_add_tail(&vfbs->head, &vmaster->fb_surf);
|
||||||
// mutex_unlock(&vmaster->fb_surf_mutex);
|
mutex_unlock(&vmaster->fb_surf_mutex);
|
||||||
|
|
||||||
*out = &vfbs->base;
|
*out = &vfbs->base;
|
||||||
|
|
||||||
@ -755,7 +771,7 @@ struct vmw_framebuffer_dmabuf {
|
|||||||
struct vmw_dma_buffer *buffer;
|
struct vmw_dma_buffer *buffer;
|
||||||
};
|
};
|
||||||
|
|
||||||
void vmw_framebuffer_dmabuf_destroy(struct drm_framebuffer *framebuffer)
|
static void vmw_framebuffer_dmabuf_destroy(struct drm_framebuffer *framebuffer)
|
||||||
{
|
{
|
||||||
struct vmw_framebuffer_dmabuf *vfbd =
|
struct vmw_framebuffer_dmabuf *vfbd =
|
||||||
vmw_framebuffer_to_vfbd(framebuffer);
|
vmw_framebuffer_to_vfbd(framebuffer);
|
||||||
@ -941,22 +957,26 @@ static int do_dmabuf_dirty_sou(struct drm_file *file_priv,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int vmw_framebuffer_dmabuf_dirty(struct drm_framebuffer *framebuffer,
|
static int vmw_framebuffer_dmabuf_dirty(struct drm_framebuffer *framebuffer,
|
||||||
struct drm_file *file_priv,
|
struct drm_file *file_priv,
|
||||||
unsigned flags, unsigned color,
|
unsigned flags, unsigned color,
|
||||||
struct drm_clip_rect *clips,
|
struct drm_clip_rect *clips,
|
||||||
unsigned num_clips)
|
unsigned num_clips)
|
||||||
{
|
{
|
||||||
struct vmw_private *dev_priv = vmw_priv(framebuffer->dev);
|
struct vmw_private *dev_priv = vmw_priv(framebuffer->dev);
|
||||||
// struct vmw_master *vmaster = vmw_master(file_priv->master);
|
struct vmw_master *vmaster = vmw_master(file_priv->master);
|
||||||
struct vmw_framebuffer_dmabuf *vfbd =
|
struct vmw_framebuffer_dmabuf *vfbd =
|
||||||
vmw_framebuffer_to_vfbd(framebuffer);
|
vmw_framebuffer_to_vfbd(framebuffer);
|
||||||
struct drm_clip_rect norect;
|
struct drm_clip_rect norect;
|
||||||
int ret, increment = 1;
|
int ret, increment = 1;
|
||||||
|
|
||||||
// ret = ttm_read_lock(&vmaster->lock, true);
|
drm_modeset_lock_all(dev_priv->dev);
|
||||||
// if (unlikely(ret != 0))
|
|
||||||
// return ret;
|
ret = ttm_read_lock(&vmaster->lock, true);
|
||||||
|
if (unlikely(ret != 0)) {
|
||||||
|
drm_modeset_unlock_all(dev_priv->dev);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
if (!num_clips) {
|
if (!num_clips) {
|
||||||
num_clips = 1;
|
num_clips = 1;
|
||||||
@ -979,7 +999,10 @@ int vmw_framebuffer_dmabuf_dirty(struct drm_framebuffer *framebuffer,
|
|||||||
clips, num_clips, increment, NULL);
|
clips, num_clips, increment, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ttm_read_unlock(&vmaster->lock);
|
ttm_read_unlock(&vmaster->lock);
|
||||||
|
|
||||||
|
drm_modeset_unlock_all(dev_priv->dev);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1672,7 +1695,7 @@ void vmw_disable_vblank(struct drm_device *dev, int crtc)
|
|||||||
* Small shared kms functions.
|
* Small shared kms functions.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int vmw_du_update_layout(struct vmw_private *dev_priv, unsigned num,
|
static int vmw_du_update_layout(struct vmw_private *dev_priv, unsigned num,
|
||||||
struct drm_vmw_rect *rects)
|
struct drm_vmw_rect *rects)
|
||||||
{
|
{
|
||||||
struct drm_device *dev = dev_priv->dev;
|
struct drm_device *dev = dev_priv->dev;
|
||||||
@ -1717,7 +1740,8 @@ int vmw_du_update_layout(struct vmw_private *dev_priv, unsigned num,
|
|||||||
#if 0
|
#if 0
|
||||||
int vmw_du_page_flip(struct drm_crtc *crtc,
|
int vmw_du_page_flip(struct drm_crtc *crtc,
|
||||||
struct drm_framebuffer *fb,
|
struct drm_framebuffer *fb,
|
||||||
struct drm_pending_vblank_event *event)
|
struct drm_pending_vblank_event *event,
|
||||||
|
uint32_t page_flip_flags)
|
||||||
{
|
{
|
||||||
struct vmw_private *dev_priv = vmw_priv(crtc->dev);
|
struct vmw_private *dev_priv = vmw_priv(crtc->dev);
|
||||||
struct drm_framebuffer *old_fb = crtc->fb;
|
struct drm_framebuffer *old_fb = crtc->fb;
|
||||||
|
Loading…
Reference in New Issue
Block a user