Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 3032 → Rev 3033

/drivers/video/drm/i915/kms_display.c
15,6 → 15,7
 
#include <syscall.h>
 
#include "hmm.h"
#include "bitmap.h"
 
extern struct drm_device *main_device;
275,6 → 276,7
 
cursor_t *cursor;
u32_t ifl;
int err;
 
// ENTER();
 
366,31 → 368,8
};
safe_sti(ifl);
 
#define XY_COLOR_BLT ((2<<29)|(0x50<<22)|(0x4))
#define BLT_WRITE_ALPHA (1<<21)
#define BLT_WRITE_RGB (1<<20)
 
#if 0
 
#if 1
{
 
drm_i915_private_t *dev_priv = dev->dev_private;
struct drm_i915_gem_object *obj;
struct intel_ring_buffer *ring;
 
obj = i915_gem_alloc_object(dev, 4096);
i915_gem_object_pin(obj, 4096, true, true);
 
cmd_buffer = MapIoMem((addr_t)obj->pages.page[0], 4096, PG_SW|PG_NOCACHE);
cmd_offset = obj->gtt_offset;
};
#endif
 
main_device = dev;
 
int err;
 
err = init_bitmaps();
if( !err )
{
397,8 → 376,6
printf("Initialize bitmap manager\n");
};
 
sna_init();
#endif
 
// LEAVE();
 
657,11 → 634,13
return old;
};
 
#if 0
 
#define XY_SRC_COPY_BLT_CMD ((2<<29)|(0x53<<22)|6)
 
 
 
extern struct hmm bm_mm;
 
 
typedef struct
{
int left;
686,18 → 665,57
return *(u32_t*)addr;
}
 
#define XY_COLOR_BLT ((2<<29)|(0x50<<22)|(0x4))
#define XY_SRC_COPY_BLT_CMD ((2<<29)|(0x53<<22)|6)
#define XY_SRC_COPY_CHROMA_CMD ((2<<29)|(0x73<<22)|8)
#define ROP_COPY_SRC 0xCC
#define FORMAT8888 3
 
#define BLT_WRITE_ALPHA (1<<21)
#define BLT_WRITE_RGB (1<<20)
 
 
 
typedef int v4si __attribute__ ((vector_size (16)));
 
 
static void
i915_gem_execbuffer_retire_commands(struct drm_device *dev,
struct intel_ring_buffer *ring)
{
struct drm_i915_gem_request *request;
u32 invalidate;
u32 req;
/*
* Ensure that the commands in the batch buffer are
* finished before the interrupt fires.
*
* The sampler always gets flushed on i965 (sigh).
*/
invalidate = I915_GEM_DOMAIN_COMMAND;
if (INTEL_INFO(dev)->gen >= 4)
invalidate |= I915_GEM_DOMAIN_SAMPLER;
if (ring->flush(ring, invalidate, 0)) {
i915_gem_next_request_seqno(ring);
return;
}
 
/* Add a breadcrumb for the completion of the batch buffer */
if (request == NULL || i915_add_request(ring, NULL, &req)) {
i915_gem_next_request_seqno(ring);
}
}
 
 
 
 
 
int blit_video(u32 hbitmap, int dst_x, int dst_y,
int src_x, int src_y, u32 w, u32 h)
{
drm_i915_private_t *dev_priv = main_device->dev_private;
struct intel_ring_buffer *ring;
struct context *context;
 
bitmap_t *bitmap;
rect_t winrc;
714,11 → 732,14
if(unlikely(hbitmap==0))
return -1;
 
bitmap = (bitmap_t*)hman_get_data(&bm_man, hbitmap);
bitmap = (bitmap_t*)hmm_get_data(&bm_mm, hbitmap);
 
if(unlikely(bitmap==NULL))
return -1;
 
context = get_context(main_device);
if(unlikely(context == NULL))
return -1;
 
GetWindowRect(&winrc);
 
860,12 → 881,12
}
#endif
 
if((cmd_buffer & 0xFC0)==0xFC0)
cmd_buffer&= 0xFFFFF000;
if((context->cmd_buffer & 0xFC0)==0xFC0)
context->cmd_buffer&= 0xFFFFF000;
 
b = (u32_t*)ALIGN(cmd_buffer,16);
b = (u32_t*)ALIGN(context->cmd_buffer,16);
 
offset = cmd_offset + ((u32_t)b & 0xFFF);
offset = context->cmd_offset + ((u32_t)b & 0xFFF);
 
cmd = XY_SRC_COPY_CHROMA_CMD | BLT_WRITE_RGB | BLT_WRITE_ALPHA;
cmd |= 3 << 17;
890,29 → 911,26
if( n & 1)
b[n++] = MI_NOOP;
 
i915_gem_object_set_to_gtt_domain(bitmap->obj, false);
context->cmd_buffer+= n*4;
 
// i915_gem_object_set_to_gtt_domain(bitmap->obj, false);
 
if (HAS_BLT(main_device))
{
int ret;
 
ring = &dev_priv->ring[BCS];
ring->dispatch_execbuffer(ring, cmd_offset, n*4);
// printf("dispatch... ");
ring->dispatch_execbuffer(ring, offset, n*4);
// printf("done\n");
 
ret = intel_ring_begin(ring, 4);
if (ret)
return ret;
 
intel_ring_emit(ring, MI_FLUSH_DW);
intel_ring_emit(ring, 0);
intel_ring_emit(ring, 0);
intel_ring_emit(ring, MI_NOOP);
intel_ring_advance(ring);
i915_gem_execbuffer_retire_commands(main_device, ring);
// printf("retire\n");
}
else
{
ring = &dev_priv->ring[RCS];
ring->dispatch_execbuffer(ring, cmd_offset, n*4);
ring->dispatch_execbuffer(ring, offset, n*4);
ring->flush(ring, 0, I915_GEM_DOMAIN_RENDER);
};
 
925,6 → 943,9
};
 
 
#if 0
 
i915_gem_execbuffer_retire_commands(dev, ring);
/* For display hotplug interrupt */
static void
ironlake_enable_display_irq(drm_i915_private_t *dev_priv, u32 mask)
1082,8 → 1103,6
int w, int h, bitmap_t *src_bitmap, int src_x, int src_y,
bitmap_t *mask_bitmap);
 
int create_context();
struct context *get_context();
 
int blit_tex(u32 hbitmap, int dst_x, int dst_y,
int src_x, int src_y, u32 w, u32 h)
1257,75 → 1276,6
};
 
 
struct context *context_map[256];
 
void __attribute__((regparm(1))) destroy_context(struct context *context)
{
printf("destroy context %x\n", context);
 
context_map[context->slot] = NULL;
__DestroyObject(context);
};
 
 
int create_context()
{
struct context *context;
 
bitmap_t *mask;
int slot;
 
struct io_call_10 io_10;
int ret;
 
slot = *((u8*)CURRENT_TASK);
 
if(context_map[slot] != NULL)
return 0;
 
context = CreateObject(GetPid(), sizeof(*context));
// printf("context %x\n", coontext);
if( context == NULL)
goto err1;
context->header.destroy = destroy_context;
 
dbgprintf("Create mask surface\n");
 
io_10.width = os_display->width/4; /* need bitmap format here */
io_10.height = os_display->height+1;
io_10.max_width = os_display->width/4;
io_10.max_height = os_display->height+1;
 
ret = create_surface(&io_10);
if(ret)
goto err2;
 
mask= (bitmap_t*)hman_get_data(&bm_man, io_10.handle);
if(unlikely(mask == NULL)) /* something really terrible happend */
goto err2;
dbgprintf("done\n");
 
context->mask = mask;
context->seqno = os_display->mask_seqno-1;
context->slot = slot;
 
context_map[slot] = context;
return 0;
 
err2:
__DestroyObject(context);
err1:
return -1;
};
 
struct context *get_context()
{
 
int slot = *((u8*)CURRENT_TASK);
 
return context_map[slot];
}
 
#endif