Subversion Repositories Kolibri OS

Rev

Rev 6283 | Rev 6320 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 6283 Rev 6296
Line 86... Line 86...
86
        stride = ALIGN(stride, 64);
86
        stride = ALIGN(stride, 64);
87
        size = stride * ALIGN(mode->vdisplay, 2);
87
        size = stride * ALIGN(mode->vdisplay, 2);
88
    }
88
    }
89
 
89
 
Line 90... Line 90...
90
    dbgprintf("size %x stride %x\n", size, stride);
90
    DRM_DEBUG_KMS("size %x stride %x\n", size, stride);
Line 91... Line 91...
91
 
91
 
92
    if(intel_fb == NULL || size > intel_fb->obj->base.size)
92
    if(intel_fb == NULL || size > intel_fb->obj->base.size)
93
    {
93
    {
94
        struct drm_mode_fb_cmd2 mode_cmd = {};
94
        struct drm_mode_fb_cmd2 mode_cmd = {};
Line 146... Line 146...
146
        obj->fence_dirty = true;
146
        obj->fence_dirty = true;
147
        obj->stride      = stride;
147
        obj->stride      = stride;
148
    };
148
    };
149
 
149
 
Line -... Line 150...
-
 
150
    if (obj->base.name == 0)
-
 
151
    {
-
 
152
        int ret;
-
 
153
 
-
 
154
        mutex_lock(&dev->object_name_lock);
-
 
155
        idr_preload(GFP_KERNEL);
-
 
156
        ret = idr_alloc(&dev->object_name_idr, &obj->base, 1, 0, GFP_NOWAIT);
-
 
157
        idr_preload_end();
-
 
158
        mutex_unlock(&dev->object_name_lock);
-
 
159
        obj->base.name = ret;
-
 
160
        obj->base.handle_count++;
-
 
161
        DRM_DEBUG_KMS("%s allocate fb name %d\n", __FUNCTION__, obj->base.name );
-
 
162
    }
-
 
163
 
150
    fb->width  = mode->hdisplay;
164
    fb->width  = mode->hdisplay;
151
    fb->height = mode->vdisplay;
165
    fb->height = mode->vdisplay;
Line 152... Line 166...
152
 
166
 
153
    fb->pitches[0]  =
167
    fb->pitches[0]  =
Line 171... Line 185...
171
 
185
 
Line 172... Line 186...
172
static int set_mode(struct drm_device *dev, struct drm_connector *connector,
186
static int set_mode(struct drm_device *dev, struct drm_connector *connector,
173
                    struct drm_crtc *crtc, videomode_t *reqmode, bool strict)
187
                    struct drm_crtc *crtc, videomode_t *reqmode, bool strict)
174
{
188
{
175
    struct drm_i915_private *dev_priv   = dev->dev_private;
189
    struct drm_i915_private *dev_priv = dev->dev_private;
176
    struct drm_mode_config  *config     = &dev->mode_config;
190
    struct drm_mode_config  *config   = &dev->mode_config;
177
    struct drm_display_mode *mode       = NULL, *tmpmode;
191
    struct drm_display_mode *mode     = NULL, *tmpmode;
178
    struct drm_connector    *tmpc;
192
    struct drm_connector    *tmpc;
179
    struct drm_framebuffer  *fb         = NULL;
193
    struct drm_framebuffer  *fb       = NULL;
180
    struct drm_mode_set     set;
194
    struct drm_mode_set     set;
181
    char  con_edid[128];
195
    char  con_edid[128];
182
    int ret;
196
    int ret;
Line 183... Line 197...
183
 
197
 
Line 239... Line 253...
239
    DRM_DEBUG_KMS("set mode %dx%d: crtc %d connector %s\n"
253
    DRM_DEBUG_KMS("set mode %dx%d: crtc %d connector %s\n"
240
                  "monitor: %s model %x serial number %u\n",
254
                  "monitor: %s model %x serial number %u\n",
241
                mode->hdisplay, mode->vdisplay,
255
                mode->hdisplay, mode->vdisplay,
242
                crtc->base.id, connector->name,
256
                crtc->base.id, connector->name,
243
            manufacturer_name(con_edid + 0x08),
257
                manufacturer_name(con_edid + 0x08),
244
            (unsigned short)(con_edid[0x0A] + (con_edid[0x0B] << 8)),
258
                (unsigned short)(con_edid[0x0A] + (con_edid[0x0B] << 8)),
245
            (unsigned int)(con_edid[0x0C] + (con_edid[0x0D] << 8)
259
                (unsigned int)(con_edid[0x0C] + (con_edid[0x0D] << 8)
246
            + (con_edid[0x0E] << 16) + (con_edid[0x0F] << 24)));
260
                + (con_edid[0x0E] << 16) + (con_edid[0x0F] << 24)));
Line 247... Line 261...
247
 
261
 
Line 248... Line 262...
248
    drm_mode_set_crtcinfo(mode, CRTC_INTERLACE_HALVE_V);
262
    drm_mode_set_crtcinfo(mode, CRTC_INTERLACE_HALVE_V);
249
 
263
 
Line 542... Line 556...
542
    struct drm_connector    *connector = NULL;
556
    struct drm_connector    *connector = NULL;
543
    struct drm_crtc         *crtc = NULL;
557
    struct drm_crtc         *crtc = NULL;
544
    struct drm_plane *plane;
558
    struct drm_plane *plane;
545
 
559
 
Line 546... Line 560...
546
    int       ret;
560
    int ret;
547
ENTER();
561
ENTER();
Line 548... Line 562...
548
 
562
 
549
    drm_for_each_plane(plane, dev)
563
    drm_for_each_plane(plane, dev)
550
    {
564
    {
Line 559... Line 573...
559
        DRM_DEBUG_KMS("No active connectors!\n");
573
        DRM_DEBUG_KMS("No active connectors!\n");
560
        return -1;
574
        return -1;
561
    };
575
    };
562
 
576
 
Line 563... Line -...
563
/*
-
 
564
    mutex_lock(&dev->object_name_lock);
-
 
565
    idr_preload(GFP_KERNEL);
-
 
566
    if (!main_fb_obj->base.name) {
-
 
567
        ret = idr_alloc(&dev->object_name_idr, &main_fb_obj->base, 1, 0, GFP_NOWAIT);
-
 
568
 
-
 
569
        main_fb_obj->base.name = ret;
-
 
570
        main_fb_obj->base.handle_count++;
-
 
571
        DRM_DEBUG_KMS("%s allocate fb name %d\n", __FUNCTION__, main_fb_obj->base.name );
-
 
572
    }
-
 
573
    idr_preload_end();
-
 
574
    mutex_unlock(&dev->object_name_lock);
-
 
575
*/
-
 
576
    dummy_fb_page = AllocPage();
577
    dummy_fb_page = AllocPage();
Line 577... Line 578...
577
 
578
 
578
    os_display = GetDisplay();
579
    os_display = GetDisplay();
579
    os_display->ddev = dev;
580
    os_display->ddev = dev;
Line 818... Line 819...
818
        fb->crtc   = crtc->base.base.id;
819
        fb->crtc   = crtc->base.base.id;
819
        fb->pipe   = crtc->pipe;
820
        fb->pipe   = crtc->pipe;
820
    }
821
    }
821
    safe_sti(ifl);
822
    safe_sti(ifl);
822
    return 0;
823
 
-
 
824
    return 0;
823
}
825
}
824
 
826
 
Line 825... Line -...
825
 
-
 
826
int kolibri_framebuffer_init(struct intel_framebuffer *intel_fb)
827
int kolibri_framebuffer_init(struct intel_framebuffer *intel_fb)
827
{
828
{
828
    struct kos_framebuffer *kfb;
829
    struct kos_framebuffer *kfb;
829
    addr_t dummy_table;
830
    addr_t dummy_table;
830
    addr_t *pt_addr = NULL;
831
    addr_t *pt_addr = NULL;
831
    int pde;
832
    int pde;
832
ENTER();
833
 
833
    kfb = kzalloc(sizeof(struct kos_framebuffer),0);
834
    kfb = kzalloc(sizeof(struct kos_framebuffer),0);
834
    kfb->private = intel_fb;
835
    kfb->private = intel_fb;
Line 835... Line 836...
835
 
836
 
836
    for(pde = 0; pde < 8; pde++)
837
    for(pde = 0; pde < 8; pde++)
Line 843... Line 844...
843
        kunmap((struct page*)dummy_table);
844
        kunmap((struct page*)dummy_table);
844
    };
845
    };
845
 
846
 
Line 846... Line 847...
846
    intel_fb->private = kfb;
847
    intel_fb->private = kfb;
847
LEAVE();
848
 
848
    return 0;
849
    return 0;
849
#if 0
850
#if 0
850
    struct sg_page_iter sg_iter;
851
    struct sg_page_iter sg_iter;
851
    num_pages = obj->base.size/4096;
852
    num_pages = obj->base.size/4096;
852
    printf("num_pages %d\n",num_pages);
853
    printf("num_pages %d\n",num_pages);
Line 858... Line 859...
858
    __sg_page_iter_start(&sg_iter, obj->pages->sgl, sg_nents(obj->pages->sgl), 0);
859
    __sg_page_iter_start(&sg_iter, obj->pages->sgl, sg_nents(obj->pages->sgl), 0);
859
    while (__sg_page_iter_next(&sg_iter))
860
    while (__sg_page_iter_next(&sg_iter))
860
    {
861
    {
861
        if (pt_addr == NULL)
862
        if (pt_addr == NULL)
862
    {
863
        {
863
            addr_t pt = AllocPage();
864
            addr_t pt = AllocPage();
864
            kfb->pde[pde] = pt|PG_UW;
865
            kfb->pde[pde] = pt|PG_UW;
865
            pde++;
866
            pde++;
866
            pt_addr = kmap_atomic((struct page*)pt);
867
            pt_addr = kmap_atomic((struct page*)pt);
867
    }
868
        }
868
        pt_addr[pte] = sg_page_iter_dma_address(&sg_iter)|PG_UW|PG_WRITEC;
869
        pt_addr[pte] = sg_page_iter_dma_address(&sg_iter)|PG_UW|PG_WRITEC;
869
        if( (pte & 15) == 0)
870
        if( (pte & 15) == 0)
870
            DRM_DEBUG_KMS("pte %x\n",pt_addr[pte]);
871
            DRM_DEBUG_KMS("pte %x\n",pt_addr[pte]);
871
        if (++pte == 1024)
872
        if (++pte == 1024)
872
    {
873
        {
873
            kunmap_atomic(pt_addr);
874
            kunmap_atomic(pt_addr);
874
            pt_addr = NULL;
875
            pt_addr = NULL;
875
            if (pde == 8)
876
            if (pde == 8)
876
                break;
877
                break;
877
            pte = 0;
878
            pte = 0;
878
        }
879
        }
879
        }
880
    }
Line 880... Line 881...
880
 
881
 
881
    if(pt_addr)
882
    if(pt_addr)
882
        {
883
    {
883
        for(;pte < 1024; pte++)
884
        for(;pte < 1024; pte++)
884
            pt_addr[pte] = dummy_page|PG_UW;
885
            pt_addr[pte] = dummy_page|PG_UW;
885
        kunmap_atomic(pt_addr);
886
        kunmap_atomic(pt_addr);
886
        }
887
    }
887
#endif
888
#endif
Line 888... Line 889...
888
};
889
};
889
 
890
 
Line 899... Line 900...
899
    num_pages = intel_fb->obj->base.size/4096;
900
    num_pages = intel_fb->obj->base.size/4096;
900
    pfn = dev_priv->gtt.mappable_base + i915_gem_obj_ggtt_offset(intel_fb->obj);
901
    pfn = dev_priv->gtt.mappable_base + i915_gem_obj_ggtt_offset(intel_fb->obj);
901
 
902
 
Line 902... Line 903...
902
    while(num_pages)
903
    while(num_pages)
903
        {
904
    {
904
        if (pt_addr == NULL)
905
        if (pt_addr == NULL)
905
        {
906
        {
906
            addr_t pt = kfb->pde[pde] & 0xFFFFF000;
907
            addr_t pt = kfb->pde[pde] & 0xFFFFF000;
907
            pde++;
908
            pde++;
908
            pt_addr = kmap_atomic((struct page*)pt);
909
            pt_addr = kmap_atomic((struct page*)pt);