2 Copyright © 1995-2011, The AROS Development Team. All rights reserved.
5 Desc: sm502 gfx Hidd for standalone i386 AROS
9 #define __OOP_NOATTRBASES__
11 #include <aros/debug.h>
13 #include <proto/exec.h>
14 #include <proto/graphics.h>
15 #include <proto/oop.h>
16 #include <exec/types.h>
17 #include <exec/lists.h>
18 #include <graphics/driver.h>
19 #include <graphics/gfxbase.h>
20 #include <hidd/graphics.h>
22 #include <utility/utility.h>
23 #include <aros/symbolsets.h>
26 #include "sm502gfxclass.h"
28 #include LC_LIBDEFS_FILE
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
)
38 for (i
= 0; i
< num
; i
++)
41 OOP_ReleaseAttrBase(iftable
[i
]);
45 static BOOL
GetAttrBases(const STRPTR
*iftable
, OOP_AttrBase
*bases
, ULONG num
)
49 for (i
= 0; i
< num
; i
++)
51 bases
[i
] = OOP_ObtainAttrBase(iftable
[i
]);
54 FreeAttrBases(iftable
, bases
, i
);
62 /* These must stay in the same order as attrBases[] entries assignment in sm502gfx.h */
63 static const STRPTR interfaces
[ATTRBASES_NUM
] =
73 static int PCSM502_Init(LIBBASETYPEPTR LIBBASE
)
75 struct SM502Gfx_staticdata
*xsd
= &LIBBASE
->vsd
;
76 struct GfxBase
*GfxBase
;
80 if (!GetAttrBases(interfaces
, xsd
->attrBases
, ATTRBASES_NUM
))
83 InitSemaphore(&xsd
->framebufferlock
);
84 InitSemaphore(&xsd
->HW_acc
);
86 if (!initSM502GfxHW(&xsd
->data
))
89 D(bug("[SM502] 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);
99 D(bug("[SM502] Failed to open graphics.library!\n"));
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
109 * This is done by graphics.library if DDRV_BootMode is set to TRUE.
111 err
= AddDisplayDriver(LIBBASE
->vsd
.sm502gfxclass
, NULL
, DDRV_BootMode
, TRUE
, TAG_DONE
);
113 D(bug("[SM502] AddDisplayDriver() result: %u\n", err
));
116 /* We use ourselves, and no one else does */
117 LIBBASE
->library
.lib_OpenCnt
= 1;
121 CloseLibrary(&GfxBase
->LibNode
);
125 ADD2INITLIB(PCSM502_Init
, 0)