Ejemplo n.º 1
0
static DFBResult
driver_init_driver( CoreGraphicsDevice  *device,
                    GraphicsDeviceFuncs *funcs,
                    void                *driver_data,
                    void                *device_data,
                    CoreDFB             *core )
{
     DFBResult       ret;
     I830DriverData *idrv = driver_data;
     I830DeviceData *idev = device_data;

     idrv->idev = device_data;

     idrv->mmio_base = (volatile u8*) dfb_gfxcard_map_mmio( device, 0, -1 );
     if (!idrv->mmio_base)
          return DFB_IO;

     ret = i830_agp_setup( device, idrv, idev );
     if (ret) {
          dfb_gfxcard_unmap_mmio( device, idrv->mmio_base, -1 );
          return ret;
     }

     idrv->info = idev->info;

     funcs->CheckState         = i830CheckState;
     funcs->SetState           = i830SetState;
     funcs->EngineSync         = i830EngineSync;
     funcs->FlushTextureCache  = i830FlushTextureCache;

     dfb_layers_register( dfb_screens_at(DSCID_PRIMARY), driver_data, &i830OverlayFuncs );

     return DFB_OK;
}
Ejemplo n.º 2
0
static void
driver_close_driver( GraphicsDevice *device,
                     void           *driver_data )
{
     ATI128DriverData *adrv = (ATI128DriverData*) driver_data;

     dfb_gfxcard_unmap_mmio( device, adrv->mmio_base, -1 );
}
Ejemplo n.º 3
0
Archivo: tdfx.c Proyecto: uiv/Lerdu
static void
driver_close_driver( CoreGraphicsDevice *device,
                     void               *driver_data )
{
    TDFXDriverData *tdrv = (TDFXDriverData*) driver_data;

    dfb_gfxcard_unmap_mmio( device, tdrv->mmio_base, -1 );
}
Ejemplo n.º 4
0
static void driver_close_driver(CoreGraphicsDevice *device,
				void *driver_data)
{
	SiSDriverData *drv = (SiSDriverData *)driver_data;

	dfb_gfxcard_unmap_mmio(device, drv->mmio_base, -1);

	if ((drv->has_auto_maximize) && (drv->auto_maximize)) {
		FBDev *dfb_fbdev = dfb_system_data();
		if (!dfb_fbdev)
			return;
		ioctl(dfb_fbdev->fd, drv->set_automaximize, &drv->auto_maximize);
	}
}
Ejemplo n.º 5
0
static void
driver_close_driver( CoreGraphicsDevice *device,
                     void               *driver_data )
{
     NeoDriverData *ndrv = (NeoDriverData*) driver_data;

     switch (dfb_gfxcard_get_accelerator( device )) {
          /* no support for other NeoMagic cards yet */
          case 95:        /* NM2200 */
          case 96:        /* NM2230 */
          case 97:        /* NM2360 */
          case 98:        /* NM2380 */
               neo2200_close_driver( device, driver_data );
     }

     dfb_gfxcard_unmap_mmio( device, ndrv->mmio_base, -1 );
}
Ejemplo n.º 6
0
static void
driver_close_driver( CoreGraphicsDevice *device,
                     void               *driver_data )
{
     I830DriverData *idrv = (I830DriverData *) driver_data;

     dfb_gfxcard_unmap_mmio( device, idrv->mmio_base, -1 );

     if (idrv->flags & I830RES_MMAP) {
          munmap((void *) idrv->aper_base, idrv->info.aper_size * 1024 * 1024);
          idrv->flags &= ~I830RES_MMAP;
     }

     if (idrv->flags & I830RES_GART_ACQ) {
          ioctl(idrv->agpgart, AGPIOC_RELEASE);
          idrv->flags &= ~I830RES_GART_ACQ;
     }

     if (idrv->flags & I830RES_GART) {
          close(idrv->agpgart);
          idrv->flags &= ~I830RES_GART;
     }
}
Ejemplo n.º 7
0
static DFBResult
driver_init_driver( CoreGraphicsDevice  *device,
                    GraphicsDeviceFuncs *funcs,
                    void                *driver_data,
                    void                *device_data,
                    CoreDFB             *core )
{
    SH7722DriverData *sdrv = driver_data;
    SH7722DeviceData *sdev = device_data;

    D_DEBUG_AT( SH7722_Driver, "%s()\n", __FUNCTION__ );

    /* Keep pointer to shared device data. */
    sdrv->dev = device_data;

    /* Keep core and device pointer. */
    sdrv->core   = core;
    sdrv->device = device;

    /* Open the drawing engine device. */
    sdrv->gfx_fd = direct_try_open( "/dev/sh7722gfx", "/dev/misc/sh7722gfx", O_RDWR, true );
    if (sdrv->gfx_fd < 0)
        return DFB_INIT;

    /* Map its shared data. */
    sdrv->gfx_shared = mmap( NULL, direct_page_align( sizeof(SH7722GfxSharedArea) ),
                             PROT_READ | PROT_WRITE,
                             MAP_SHARED, sdrv->gfx_fd, 0 );
    if (sdrv->gfx_shared == MAP_FAILED) {
        D_PERROR( "SH7722/Driver: Could not map shared area!\n" );
        close( sdrv->gfx_fd );
        return DFB_INIT;
    }

    sdrv->mmio_base = dfb_gfxcard_map_mmio( device, 0, -1 );
    if (!sdrv->mmio_base) {
        D_PERROR( "SH7722/Driver: Could not map MMIO area!\n" );
        munmap( (void*) sdrv->gfx_shared, direct_page_align( sizeof(SH7722GfxSharedArea) ) );
        close( sdrv->gfx_fd );
        return DFB_INIT;
    }

    /* Check the magic value. */
    if (sdrv->gfx_shared->magic != SH7722GFX_SHARED_MAGIC) {
        D_ERROR( "SH7722/Driver: Magic value 0x%08x doesn't match 0x%08x!\n",
                 sdrv->gfx_shared->magic, SH7722GFX_SHARED_MAGIC );
        dfb_gfxcard_unmap_mmio( device, sdrv->mmio_base, -1 );
        munmap( (void*) sdrv->gfx_shared, direct_page_align( sizeof(SH7722GfxSharedArea) ) );
        close( sdrv->gfx_fd );
        return DFB_INIT;
    }

    /* Get virtual addresses for LCD buffer and JPEG reload buffers in slaves here,
       master does it in driver_init_device(). */
    if (!dfb_core_is_master( core )) {
        sdrv->lcd_virt  = dfb_gfxcard_memory_virtual( device, sdev->lcd_offset );
        sdrv->jpeg_virt = dfb_gfxcard_memory_virtual( device, sdev->jpeg_offset );
    }

    /* Initialize function table. */
    funcs->EngineReset       = sh7722EngineReset;
    funcs->EngineSync        = sh7722EngineSync;
    funcs->EmitCommands      = sh7722EmitCommands;
    funcs->CheckState        = sh7722CheckState;
    funcs->SetState          = sh7722SetState;
    funcs->FillTriangle      = sh7722FillTriangle;
    funcs->Blit              = sh7722Blit;
    funcs->StretchBlit       = sh7722StretchBlit;
    funcs->FlushTextureCache = sh7722FlushTextureCache;

    /* Register primary screen. */
    sdrv->screen = dfb_screens_register( device, driver_data, &sh7722ScreenFuncs );

    /* Register three input system layers. */
    sdrv->input1 = dfb_layers_register( sdrv->screen, driver_data, &sh7722LayerFuncs );
    sdrv->input2 = dfb_layers_register( sdrv->screen, driver_data, &sh7722LayerFuncs );
    sdrv->input3 = dfb_layers_register( sdrv->screen, driver_data, &sh7722LayerFuncs );

    /* Register multi window layer. */
    sdrv->multi = dfb_layers_register( sdrv->screen, driver_data, &sh7722MultiLayerFuncs );

    return DFB_OK;
}