tcp: Add APICall trace entry and move TRACEs into locked parts.
[haiku.git] / src / add-ons / accelerants / nvidia / GetAccelerantHook.c
blobdb714ff565d7d5022c6915df64a8c136ba78f71f
1 /*
2 Copyright 1999, Be Incorporated. All Rights Reserved.
3 This file may be used under the terms of the Be Sample Code License.
5 Other authors:
6 Mark Watson,
7 Rudolf Cornelissen 10/2002-8/2009
8 */
10 #define MODULE_BIT 0x08000000
12 #include "acc_std.h"
15 The standard entry point. Given a uint32 feature identifier, this routine
16 returns a pointer to the function that implements the feature. Some features
17 require more information than just the identifier to select the proper
18 function. The extra information (which is specific to the feature) is
19 pointed at by the void *data parameter. By default, no extra information
20 is available. Any extra information available to choose the function will be
21 noted on a case by case below.
25 These definitions are out of pure lazyness.
27 #define CHKO(x) case B_##x: \
28 if (check_overlay_capability(B_##x) == B_OK) return (void *)x; else return (void *)0
29 #define CHKA(x) case B_##x: \
30 if (check_acc_capability(B_##x) == B_OK) \
31 {if(!si->settings.dma_acc) return (void *)x##_PIO; else return (void *)x##_DMA;} \
32 else return (void *)0
33 #define CHKS(x) case B_##x: \
34 if(!si->settings.dma_acc) return (void *)x##_PIO; else return (void *)x##_DMA
35 #define HOOK(x) case B_##x: return (void *)x
36 #define ZERO(x) case B_##x: return (void *)0
37 #define HRDC(x) case B_##x: return si->settings.hardcursor? (void *)x: (void *)0; // apsed
39 void * get_accelerant_hook(uint32 feature, void *data)
41 switch (feature)
44 One of either B_INIT_ACCELERANT or B_CLONE_ACCELERANT will be requested and
45 subsequently called before any other hook is requested. All other feature
46 hook selections can be predicated on variables assigned during the accelerant
47 initialization process.
50 /* initialization */
51 HOOK(INIT_ACCELERANT);
52 HOOK(CLONE_ACCELERANT);
54 HOOK(ACCELERANT_CLONE_INFO_SIZE);
55 HOOK(GET_ACCELERANT_CLONE_INFO);
56 HOOK(UNINIT_ACCELERANT);
57 HOOK(GET_ACCELERANT_DEVICE_INFO);
58 HOOK(ACCELERANT_RETRACE_SEMAPHORE);
60 /* mode configuration */
61 HOOK(ACCELERANT_MODE_COUNT);
62 HOOK(GET_MODE_LIST);
63 HOOK(PROPOSE_DISPLAY_MODE);
64 HOOK(SET_DISPLAY_MODE);
65 HOOK(GET_DISPLAY_MODE);
66 #ifdef __HAIKU__
67 HOOK(GET_EDID_INFO);
68 HOOK(GET_PREFERRED_DISPLAY_MODE);
69 #endif
70 HOOK(GET_FRAME_BUFFER_CONFIG);
71 HOOK(GET_PIXEL_CLOCK_LIMITS);
72 HOOK(MOVE_DISPLAY);
73 HOOK(SET_INDEXED_COLORS);
74 HOOK(GET_TIMING_CONSTRAINTS);
76 HOOK(DPMS_CAPABILITIES);
77 HOOK(DPMS_MODE);
78 HOOK(SET_DPMS_MODE);
80 /* cursor managment */
81 HRDC(SET_CURSOR_SHAPE);
82 HRDC(MOVE_CURSOR);
83 HRDC(SHOW_CURSOR);
85 /* synchronization */
86 HOOK(ACCELERANT_ENGINE_COUNT);
87 CHKS(ACQUIRE_ENGINE);
88 HOOK(RELEASE_ENGINE);
89 HOOK(WAIT_ENGINE_IDLE);
90 HOOK(GET_SYNC_TOKEN);
91 HOOK(SYNC_TO_TOKEN);
94 Depending on the engine architecture, you may choose to provide a different
95 function to be used with each bit-depth for example.
97 Note: These hooks are re-acquired by the app_server after each mode switch.
100 /* only export video overlay functions if card is capable of it */
101 CHKO(OVERLAY_COUNT);
102 CHKO(OVERLAY_SUPPORTED_SPACES);
103 CHKO(OVERLAY_SUPPORTED_FEATURES);
104 CHKO(ALLOCATE_OVERLAY_BUFFER);
105 CHKO(RELEASE_OVERLAY_BUFFER);
106 CHKO(GET_OVERLAY_CONSTRAINTS);
107 CHKO(ALLOCATE_OVERLAY);
108 CHKO(RELEASE_OVERLAY);
109 CHKO(CONFIGURE_OVERLAY);
112 When requesting an acceleration hook, the calling application provides a
113 pointer to the display_mode for which the acceleration function will be used.
114 Depending on the engine architecture, you may choose to provide a different
115 function to be used with each bit-depth. In the sample driver we return
116 the same function all the time.
118 Note: These hooks are re-acquired by the app_server after each mode switch.
121 /* only export 2D acceleration functions in modes that are capable of it */
122 /* used by the app_server and applications (BWindowScreen) */
123 CHKA(SCREEN_TO_SCREEN_BLIT);
124 CHKA(FILL_RECTANGLE);
125 CHKA(INVERT_RECTANGLE);
126 CHKA(FILL_SPAN);
127 /* not (yet) used by the app_server:
128 * so just for application use (BWindowScreen) */
129 // CHKA(SCREEN_TO_SCREEN_TRANSPARENT_BLIT);
130 CHKA(SCREEN_TO_SCREEN_SCALED_FILTERED_BLIT);
133 /* Return a null pointer for any feature we don't understand. */
134 return 0;
136 #undef CHKO
137 #undef CHKA
138 #undef CHKD
139 #undef HOOK
140 #undef ZERO
141 #undef HRDC
143 status_t check_overlay_capability(uint32 feature)
145 char *msg = "";
147 /* setup logmessage text */
148 switch (feature)
150 case B_OVERLAY_COUNT:
151 msg = "B_OVERLAY_COUNT";
152 break;
153 case B_OVERLAY_SUPPORTED_SPACES:
154 msg = "B_OVERLAY_SUPPORTED_SPACES";
155 break;
156 case B_OVERLAY_SUPPORTED_FEATURES:
157 msg = "B_OVERLAY_SUPPORTED_FEATURES";
158 break;
159 case B_ALLOCATE_OVERLAY_BUFFER:
160 msg = "B_ALLOCATE_OVERLAY_BUFFER";
161 break;
162 case B_RELEASE_OVERLAY_BUFFER:
163 msg = "B_RELEASE_OVERLAY_BUFFER";
164 break;
165 case B_GET_OVERLAY_CONSTRAINTS:
166 msg = "B_GET_OVERLAY_CONSTRAINTS";
167 break;
168 case B_ALLOCATE_OVERLAY:
169 msg = "B_ALLOCATE_OVERLAY";
170 break;
171 case B_RELEASE_OVERLAY:
172 msg = "B_RELEASE_OVERLAY";
173 break;
174 case B_CONFIGURE_OVERLAY:
175 msg = "B_CONFIGURE_OVERLAY";
176 break;
177 default:
178 msg = "UNKNOWN";
179 break;
182 /* all older cards have a supported bes */
183 if ((si->ps.card_type <= NV40) || (si->ps.card_type == NV45))
185 LOG(4, ("Overlay: Exporting hook %s.\n", msg));
186 return B_OK;
189 /* all newer NV40 architecture cards have a new HDTV capable bes except for
190 * GeForce 6800's. Unfortunately we have no info about the new bes yet. */
191 LOG(4, ("Overlay: Not exporting hook %s.\n", msg));
192 return B_ERROR;
195 status_t check_acc_capability(uint32 feature)
197 char *msg = "";
199 /* setup logmessage text */
200 switch (feature)
202 case B_SCREEN_TO_SCREEN_BLIT:
203 msg = "B_SCREEN_TO_SCREEN_BLIT";
204 break;
205 case B_FILL_RECTANGLE:
206 msg = "B_FILL_RECTANGLE";
207 break;
208 case B_INVERT_RECTANGLE:
209 msg = "B_INVERT_RECTANGLE";
210 break;
211 case B_FILL_SPAN:
212 msg = "B_FILL_SPAN";
213 break;
214 case B_SCREEN_TO_SCREEN_TRANSPARENT_BLIT:
215 msg = "B_SCREEN_TO_SCREEN_TRANSPARENT_BLIT";
216 break;
217 case B_SCREEN_TO_SCREEN_SCALED_FILTERED_BLIT:
218 msg = "B_SCREEN_TO_SCREEN_SCALED_FILTERED_BLIT";
219 /* this function is only defined for DMA acceleration,
220 * but doesn't support the B_CMAP8 colorspace */
221 //fixme: checkout B_CMAP8 support sometime, as some cards seem to support it?
222 if (!si->settings.dma_acc || (si->dm.space == B_CMAP8))
224 LOG(4, ("Acc: Not exporting hook %s.\n", msg));
225 return B_ERROR;
227 break;
228 default:
229 msg = "UNKNOWN";
230 break;
233 /* hardware acceleration is only supported in modes with upto a certain
234 * memory pitch.. and acceleration must not be blocked */
235 if (si->acc_mode && !si->settings.block_acc)
237 LOG(4, ("Acc: Exporting hook %s.\n", msg));
238 return B_OK;
240 else
242 LOG(4, ("Acc: Not exporting hook %s.\n", msg));
243 return B_ERROR;