remove definition of ARM_PERIIOBASE
[AROS.git] / rom / hidds / vesa / vesagfx_init.c
blob61a131cf3fcc213bf3b739ed71d976e208a73cb3
1 /*
2 Copyright © 1995-2011, The AROS Development Team. All rights reserved.
3 $Id$
5 Desc: vesa gfx Hidd for standalone i386 AROS
6 Lang: english
7 */
9 #define __OOP_NOATTRBASES__
11 #include <proto/exec.h>
12 #include <proto/graphics.h>
13 #include <proto/oop.h>
14 #include <exec/types.h>
15 #include <exec/lists.h>
16 #include <graphics/driver.h>
17 #include <graphics/gfxbase.h>
18 #include <hidd/graphics.h>
19 #include <oop/oop.h>
20 #include <utility/utility.h>
21 #include <aros/symbolsets.h>
23 #include "hardware.h"
24 #include "vesagfxclass.h"
26 #include LC_LIBDEFS_FILE
28 #include <aros/debug.h>
31 * The following two functions are candidates for inclusion into oop.library.
32 * For slightly other implementation see incomplete Android-hosted graphics driver.
34 static void FreeAttrBases(const STRPTR *iftable, OOP_AttrBase *bases, ULONG num)
36 ULONG i;
38 for (i = 0; i < num; i++)
40 if (bases[i])
41 OOP_ReleaseAttrBase(iftable[i]);
45 static BOOL GetAttrBases(const STRPTR *iftable, OOP_AttrBase *bases, ULONG num)
47 ULONG i;
49 for (i = 0; i < num; i++)
51 bases[i] = OOP_ObtainAttrBase(iftable[i]);
52 if (!bases[i])
54 FreeAttrBases(iftable, bases, i);
55 return FALSE;
59 return TRUE;
62 /* These must stay in the same order as attrBases[] entries assignment in vesagfxclass.h */
63 static const STRPTR interfaces[ATTRBASES_NUM] =
65 IID_Hidd_ChunkyBM,
66 IID_Hidd_BitMap,
67 IID_Hidd_Gfx,
68 IID_Hidd_PixFmt,
69 IID_Hidd_Sync,
70 IID_Hidd
73 static int PCVesa_Init(LIBBASETYPEPTR LIBBASE)
75 struct VesaGfx_staticdata *xsd = &LIBBASE->vsd;
76 struct GfxBase *GfxBase;
77 ULONG err;
78 int res = FALSE;
80 if (!GetAttrBases(interfaces, xsd->attrBases, ATTRBASES_NUM))
81 return FALSE;
83 InitSemaphore(&xsd->framebufferlock);
84 InitSemaphore(&xsd->HW_acc);
86 if (!initVesaGfxHW(&xsd->data))
87 return FALSE;
89 D(bug("[VESA] Init: Everything OK, installing driver\n"));
92 * Open graphics.library ourselves because we will close it
93 * after adding the driver.
94 * Autoinit code would close it only upon driver expunge.
96 GfxBase = (struct GfxBase *)OpenLibrary("graphics.library", 41);
97 if (!GfxBase)
99 D(bug("[VESA] Failed to open graphics.library!\n"));
101 return FALSE;
105 * It is unknown (and no way to know) what hardware part this driver uses.
106 * In order to avoid conflicts with disk-based native-mode hardware
107 * drivers it needs to be removed from the system when some other driver
108 * is installed.
109 * This is done by graphics.library if DDRV_BootMode is set to TRUE.
111 err = AddDisplayDriver(LIBBASE->vsd.vesagfxclass, NULL, DDRV_BootMode, TRUE, TAG_DONE);
113 D(bug("[VESA] AddDisplayDriver() result: %u\n", err));
114 if (!err)
116 /* We use ourselves, and no one else does */
117 LIBBASE->library.lib_OpenCnt = 1;
118 res = TRUE;
121 CloseLibrary(&GfxBase->LibNode);
122 return res;
125 ADD2INITLIB(PCVesa_Init, 0)