Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 5367 → Rev 6084

/drivers/video/drm/i915/kms_display.c
17,6 → 17,7
 
display_t *os_display;
struct drm_i915_gem_object *main_fb_obj;
struct drm_framebuffer *main_framebuffer;
 
u32 cmd_buffer;
u32 cmd_offset;
60,6 → 61,8
int stride;
int ret;
 
ENTER();
 
drm_modeset_lock_all(dev);
 
list_for_each_entry(tmpmode, &connector->modes, head)
103,10 → 106,12
hdisplay = mode->hdisplay;
vdisplay = mode->vdisplay;
 
if (crtc->invert_dimensions)
swap(hdisplay, vdisplay);
// if (crtc->invert_dimensions)
// swap(hdisplay, vdisplay);
 
fb = crtc->primary->fb;
if(fb == NULL)
fb = main_framebuffer;
 
fb->width = reqmode->width;
fb->height = reqmode->height;
138,9 → 143,11
crtc->enabled = true;
os_display->crtc = crtc;
 
// i915_gem_object_unpin_fence(main_fb_obj);
i915_gem_object_put_fence(main_fb_obj);
 
printf("fb:%p %dx%dx pitch %d format %x\n",
fb,fb->width,fb->height,fb->pitches[0],fb->pixel_format);
 
set.crtc = crtc;
set.x = 0;
set.y = 0;
151,8 → 158,6
 
ret = drm_mode_set_config_internal(&set);
 
drm_modeset_unlock_all(dev);
 
if ( !ret )
{
os_display->width = fb->width;
168,6 → 173,10
DRM_ERROR("failed to set mode %d_%d on crtc %p\n",
fb->width, fb->height, crtc);
 
drm_modeset_unlock_all(dev);
 
LEAVE();
 
return ret;
}
 
223,8 → 232,8
 
if( encoder == NULL)
{
DRM_DEBUG_KMS("CONNECTOR %x ID: %d no active encoders\n",
connector, connector->base.id);
DRM_DEBUG_KMS("CONNECTOR %s ID: %d no active encoders\n",
connector->name, connector->base.id);
continue;
};
}
238,9 → 247,18
*boot_connector = connector;
*boot_crtc = crtc;
 
DRM_DEBUG_KMS("CONNECTOR %p ID:%d status:%d ENCODER %p ID: %d CRTC %p ID:%d\n",
connector, connector->base.id, connector->status,
DRM_DEBUG_KMS("CONNECTOR %s ID:%d status:%d ENCODER %p ID: %d CRTC %p ID:%d\n",
connector->name, connector->base.id, connector->status,
encoder, encoder->base.id, crtc, crtc->base.id );
char con_edid[128];
 
memcpy(con_edid, connector->edid_blob_ptr->data, 128);
printf("Manufacturer: %s Model %x Serial Number %u\n",
manufacturer_name(con_edid + 0x08),
(unsigned short)(con_edid[0x0A] + (con_edid[0x0B] << 8)),
(unsigned int)(con_edid[0x0C] + (con_edid[0x0D] << 8)
+ (con_edid[0x0E] << 16) + (con_edid[0x0F] << 24)));
 
return 0;
}
else
285,6 → 303,8
u32 ifl;
int ret;
 
ENTER();
 
mutex_lock(&dev->struct_mutex);
mutex_lock(&dev->mode_config.mutex);
 
303,16 → 323,12
ret = idr_alloc(&dev->object_name_idr, &main_fb_obj->base, 1, 0, GFP_NOWAIT);
 
main_fb_obj->base.name = ret;
 
/* Allocate a reference for the name table. */
drm_gem_object_reference(&main_fb_obj->base);
 
main_fb_obj->base.handle_count++;
DRM_DEBUG_KMS("%s allocate fb name %d\n", __FUNCTION__, main_fb_obj->base.name );
}
 
idr_preload_end();
mutex_unlock(&dev->object_name_lock);
drm_gem_object_unreference(&main_fb_obj->base);
 
os_display = GetDisplay();
os_display->ddev = dev;
463,7 → 479,7
 
if (dev_priv->info.cursor_needs_physical)
{
bits = (uint32_t*)KernelAlloc(KMS_CURSOR_WIDTH*KMS_CURSOR_HEIGHT*4);
bits = (uint32_t*)KernelAlloc(KMS_CURSOR_WIDTH*KMS_CURSOR_HEIGHT*8);
if (unlikely(bits == NULL))
return ENOMEM;
cursor->cobj = (struct drm_i915_gem_object *)GetPgAddr(bits);
474,7 → 490,7
if (unlikely(obj == NULL))
return -ENOMEM;
 
ret = i915_gem_obj_ggtt_pin(obj, 0,PIN_MAPPABLE | PIN_NONBLOCK);
ret = i915_gem_object_ggtt_pin(obj, &i915_ggtt_view_normal, 128*1024, PIN_GLOBAL);
if (ret) {
drm_gem_object_unreference(&obj->base);
return ret;
531,6 → 547,8
void __stdcall move_cursor_kms(cursor_t *cursor, int x, int y)
{
struct drm_crtc *crtc = os_display->crtc;
struct drm_plane_state *cursor_state = crtc->cursor->state;
 
x-= cursor->hot_x;
y-= cursor->hot_y;
 
537,14 → 555,13
crtc->cursor_x = x;
crtc->cursor_y = y;
 
cursor_state->crtc_x = x;
cursor_state->crtc_y = y;
 
intel_crtc_update_cursor(crtc, 1);
 
// if (crtc->funcs->cursor_move)
// crtc->funcs->cursor_move(crtc, x, y);
 
};
 
 
cursor_t* __stdcall select_cursor_kms(cursor_t *cursor)
{
struct drm_i915_private *dev_priv = os_display->ddev->dev_private;
556,7 → 573,7
old = os_display->cursor;
os_display->cursor = cursor;
 
intel_crtc->cursor_bo = cursor->cobj;
// intel_crtc->cursor_bo = cursor->cobj;
 
if (!dev_priv->info.cursor_needs_physical)
intel_crtc->cursor_addr = i915_gem_obj_ggtt_offset(cursor->cobj);
563,8 → 580,9
else
intel_crtc->cursor_addr = (addr_t)cursor->cobj;
 
intel_crtc->cursor_width = 64;
intel_crtc->cursor_height = 64;
intel_crtc->base.cursor->state->crtc_w = 64;
intel_crtc->base.cursor->state->crtc_h = 64;
intel_crtc->base.cursor->state->rotation = 0;
 
move_cursor_kms(cursor, crtc->cursor_x, crtc->cursor_y);
return old;
574,7 → 592,6
{
struct drm_i915_private *dev_priv = os_display->ddev->dev_private;
struct intel_crtc *crtc = to_intel_crtc(os_display->crtc);
 
struct drm_i915_gem_object *obj = get_fb_obj();
 
fb->name = obj->base.name;
804,10 → 821,11
int ret = 0;
slot = *((u8*)CURRENT_TASK);
 
if( mask_seqno[slot] == os_display->mask_seqno)
if( mask->forced == 0 && mask_seqno[slot] == os_display->mask_seqno)
return 0;
 
memset(mask->bo_map,0,mask->width * mask->height);
if(mask->forced)
memset((void*)mask->bo_map,0,mask->width * mask->height);
 
GetWindowRect(&win);
win.right+= 1;
851,8 → 869,8
return -EINVAL;
}
 
#if 1
if(warn_count < 1000)
#if 0
if(warn_count < 100)
{
printf("left %d top %d right %d bottom %d\n",
ml, mt, mr, mb);
1001,13 → 1019,6
 
 
 
 
 
 
 
 
 
 
#define NSEC_PER_SEC 1000000000L
 
void getrawmonotonic(struct timespec *ts)
1018,30 → 1029,8
ts->tv_nsec = (tmp - ts->tv_sec*100)*10000000;
}
 
void set_normalized_timespec(struct timespec *ts, time_t sec, s64 nsec)
void prepare_to_wait(wait_queue_head_t *q, wait_queue_t *wait, int state)
{
while (nsec >= NSEC_PER_SEC) {
/*
* The following asm() prevents the compiler from
* optimising this loop into a modulo operation. See
* also __iter_div_u64_rem() in include/linux/time.h
*/
asm("" : "+rm"(nsec));
nsec -= NSEC_PER_SEC;
++sec;
}
while (nsec < 0) {
asm("" : "+rm"(nsec));
nsec += NSEC_PER_SEC;
--sec;
}
ts->tv_sec = sec;
ts->tv_nsec = nsec;
}
 
void
prepare_to_wait(wait_queue_head_t *q, wait_queue_t *wait, int state)
{
unsigned long flags;
 
// wait->flags &= ~WQ_FLAG_EXCLUSIVE;