1/*
2 * Copyright 1999, Be Incorporated.
3 * Copyright 2007, Haiku.
4 * Distributed under the terms of the MIT License.
5 *
6 * Authors:
7 *		Be Incorporated
8 *		Eric Petit <eric.petit@lapsus.org>
9 *		Michael Pfeiffer <laplace@users.sourceforge.net>
10 */
11
12#include "GlobalData.h"
13
14
15void *
16get_accelerant_hook(uint32 feature, void *data)
17{
18	switch (feature) {
19#define HOOK(x) case B_##x: return (void *)x
20#define ZERO(x) case B_##x: return (void *)0
21#define HOOK_IF(x, cap) case B_##x: if (gSi->capabilities & cap) return (void *)x; else return (void *)0
22
23		/* initialization */
24		HOOK(INIT_ACCELERANT);
25		HOOK(CLONE_ACCELERANT);
26
27		HOOK(ACCELERANT_CLONE_INFO_SIZE);
28		HOOK(GET_ACCELERANT_CLONE_INFO);
29		HOOK(UNINIT_ACCELERANT);
30		//HOOK(GET_ACCELERANT_DEVICE_INFO);
31		HOOK(ACCELERANT_RETRACE_SEMAPHORE);
32
33		/* mode configuration */
34		HOOK(ACCELERANT_MODE_COUNT);
35		HOOK(GET_MODE_LIST);
36		HOOK(PROPOSE_DISPLAY_MODE);
37		HOOK(SET_DISPLAY_MODE);
38		HOOK(GET_DISPLAY_MODE);
39		HOOK(GET_FRAME_BUFFER_CONFIG);
40		HOOK(GET_PIXEL_CLOCK_LIMITS);
41		ZERO(MOVE_DISPLAY);
42		HOOK(SET_INDEXED_COLORS);
43		ZERO(GET_TIMING_CONSTRAINTS);
44
45		/* Power Managment (SetDisplayMode.c) */
46		HOOK(DPMS_CAPABILITIES);
47		HOOK(DPMS_MODE);
48		HOOK(SET_DPMS_MODE);
49
50		/* Cursor managment (Cursor.c) */
51		HOOK_IF(SET_CURSOR_SHAPE, SVGA_CAP_CURSOR_BYPASS);
52		HOOK_IF(MOVE_CURSOR, SVGA_CAP_CURSOR_BYPASS);
53		HOOK_IF(SHOW_CURSOR, SVGA_CAP_CURSOR_BYPASS);
54
55		/* synchronization */
56		HOOK(ACCELERANT_ENGINE_COUNT);
57		HOOK(ACQUIRE_ENGINE);
58		HOOK(RELEASE_ENGINE);
59		HOOK(WAIT_ENGINE_IDLE);
60		HOOK(GET_SYNC_TOKEN);
61		HOOK(SYNC_TO_TOKEN);
62
63		/* 2D acceleration (Acceleration.c) */
64		HOOK_IF(SCREEN_TO_SCREEN_BLIT, SVGA_CAP_RECT_COPY);
65		ZERO(FILL_RECTANGLE);
66		ZERO(INVERT_RECTANGLE);
67		ZERO(FILL_SPAN);
68		ZERO(SCREEN_TO_SCREEN_TRANSPARENT_BLIT);
69		ZERO(SCREEN_TO_SCREEN_SCALED_FILTERED_BLIT);
70
71#undef HOOK
72#undef ZERO
73	}
74
75	return 0;
76}
77