Esempio n. 1
0
static DFBResult
crtc1InitScreen( CoreScreen           *screen,
                 CoreGraphicsDevice   *device,
                 void                 *driver_data,
                 void                 *screen_data,
                 DFBScreenDescription *description )
{
     NVidiaDriverData *nvdrv = (NVidiaDriverData*) driver_data;
     volatile u8      *mmio  = nvdrv->mmio_base;

     if (OldPrimaryScreenFuncs.InitScreen)
          OldPrimaryScreenFuncs.InitScreen( screen, device, 
                                            OldPrimaryScreenDriverData,
                                            screen_data, description );
     
     description->caps |= DSCCAPS_VSYNC;

     snprintf( description->name,
               DFB_SCREEN_DESC_NAME_LENGTH, "NVidia Primary Screen" );

     nv_out32( mmio, PCRTC_INTR_EN, PCRTC_INTR_EN_VBLANK_DISABLED );
#ifdef WORDS_BIGENDIAN
     nv_out32( mmio, PCRTC_CONFIG, PCRTC_CONFIG_SIGNAL_HSYNC |
                                   PCRTC_CONFIG_ENDIAN_BIG );
#else
     nv_out32( mmio, PCRTC_CONFIG, PCRTC_CONFIG_SIGNAL_HSYNC |
                                   PCRTC_CONFIG_ENDIAN_LITTLE );
#endif
     nv_out32( mmio, PCRTC_INTR, PCRTC_INTR_VBLANK_RESET );
     
     return DFB_OK;
}
Esempio n. 2
0
static DFBResult
ov0Remove( CoreLayer *layer,
           void      *driver_data,
           void      *layer_data,
           void      *region_data )
{
     NVidiaDriverData *nvdrv = (NVidiaDriverData*) driver_data;
     volatile u8      *mmio  = nvdrv->mmio_base;
     
     /* disable overlay */
     nv_out32( mmio, PVIDEO_STOP, PVIDEO_STOP_OVERLAY_ACTIVE | 
                                  PVIDEO_STOP_METHOD_IMMEDIATELY );
     nv_out32( mmio, PVIDEO_BUFFER, 0 );

     return DFB_OK;
}
Esempio n. 3
0
static DFBResult
fb0FlipRegion( CoreLayer             *layer,
               void                  *driver_data,
               void                  *layer_data,
               void                  *region_data,
               CoreSurface           *surface,
               DFBSurfaceFlipFlags    flags,
               CoreSurfaceBufferLock *left_lock,
               CoreSurfaceBufferLock *right_lock )
{
     NVidiaDriverData *nvdrv  = (NVidiaDriverData*) driver_data;
     NVidiaDeviceData *nvdev  = nvdrv->device_data;
     u32               offset;

     dfb_surface_flip( surface, false );
     
     offset = (left_lock->offset + nvdev->fb_offset) & ~3;
     nv_out32( nvdrv->mmio_base, PCRTC_START, offset );

     if (flags & DSFLIP_WAIT)
          dfb_layer_wait_vsync( layer );

     return DFB_OK;
}