BTRFS: Implement BTree::Path and change _Find.
[haiku.git] / src / add-ons / accelerants / s3 / accel.h
blob7376da067355c526df8b77fd080b4d707fffbe63
1 /*
2 Copyright 2007-2008 Haiku, Inc. All rights reserved.
3 Distributed under the terms of the MIT license.
5 Authors:
6 Gerald Zajac 2007-2008
7 */
9 #ifndef _ACCEL_H
10 #define _ACCEL_H
12 #include "DriverInterface.h"
13 #include "register_io.h"
17 #undef TRACE
19 #ifdef ENABLE_DEBUG_TRACE
20 extern "C" void _sPrintf(const char* format, ...);
21 # define TRACE(x...) _sPrintf("S3: " x)
22 #else
23 # define TRACE(x...) ;
24 #endif
27 // Global data used by various source files of the accelerant.
29 struct AccelerantInfo {
30 int deviceFileDesc; // file descriptor of kernel driver
32 SharedInfo* sharedInfo; // address of info shared between accelerants & driver
33 area_id sharedInfoArea; // shared info area ID
35 uint8* regs; // base address of MMIO register area
36 area_id regsArea; // MMIO register area ID
38 display_mode* modeList; // list of standard display modes
39 area_id modeListArea; // mode list area ID
41 bool bAccelerantIsClone; // true if this is a cloned accelerant
43 // Pointers to wait handlers.
44 void (*WaitQueue)(uint32);
45 void (*WaitIdleEmpty)();
47 // Pointers to DPMS functions.
48 uint32 (*DPMSCapabilities)(void);
49 uint32 (*GetDPMSMode)(void);
50 status_t (*SetDPMSMode)(uint32 dpms_flags);
52 // Pointers to cursor functions.
53 bool (*LoadCursorImage)(int width, int height, uint8* and_mask, uint8* xor_mask);
54 void (*SetCursorPosition)(int x, int y);
55 void (*ShowCursor)(bool bShow);
57 // Pointers to 2D acceleration functions.
58 void (*FillRectangle)(engine_token*, uint32 color, fill_rect_params*, uint32 count);
59 void (*FillSpan)(engine_token*, uint32 color, uint16* list, uint32 count);
60 void (*InvertRectangle)(engine_token*, fill_rect_params*, uint32 count);
61 void (*ScreenToScreenBlit)(engine_token*, blit_params*, uint32 count);
63 // Pointers to other functions.
64 void (*AdjustFrame)(const DisplayModeEx& mode);
65 status_t (*ChipInit)(void);
66 bool (*GetColorSpaceParams)(int colorSpace, uint32& bpp, uint32& maxPixelClk);
67 bool (*SetDisplayMode)(const DisplayModeEx& mode);
68 void (*SetIndexedColors)(uint count, uint8 first, uint8* color_data, uint32 flags);
71 extern AccelerantInfo gInfo;
74 // Prototypes of the interface functions called by the app_server. Note that
75 // the functions that are unique to a particular chip family, will be prefixed
76 // with the name of the family, and the functions that are applicable to all
77 // chips will have no prefix.
78 //================================================================
80 #if defined(__cplusplus)
81 extern "C" {
82 #endif
84 // General
85 status_t InitAccelerant(int fd);
86 ssize_t AccelerantCloneInfoSize(void);
87 void GetAccelerantCloneInfo(void* data);
88 status_t CloneAccelerant(void* data);
89 void UninitAccelerant(void);
90 status_t GetAccelerantDeviceInfo(accelerant_device_info* adi);
91 sem_id AccelerantRetraceSemaphore(void);
93 // Mode Configuration
94 uint32 AccelerantModeCount(void);
95 status_t GetModeList(display_mode* dm);
96 status_t ProposeDisplayMode(display_mode* target, const display_mode* low, const display_mode* high);
97 status_t SetDisplayMode(display_mode* mode_to_set);
98 status_t GetDisplayMode(display_mode* current_mode);
99 status_t GetFrameBufferConfig(frame_buffer_config* a_frame_buffer);
100 status_t GetPixelClockLimits(display_mode* dm, uint32* low, uint32* high);
101 status_t MoveDisplay(uint16 h_display_start, uint16 v_display_start);
102 status_t GetTimingConstraints(display_timing_constraints* dtc);
103 void Savage_SetIndexedColors(uint count, uint8 first, uint8* color_data, uint32 flags);
104 void Trio64_SetIndexedColors(uint count, uint8 first, uint8* color_data, uint32 flags);
105 void Virge_SetIndexedColors(uint count, uint8 first, uint8* color_data, uint32 flags);
106 status_t GetPreferredDisplayMode(display_mode* preferredMode);
107 status_t GetEdidInfo(void* info, size_t size, uint32* _version);
109 // DPMS
110 uint32 Savage_DPMSCapabilities(void);
111 uint32 Savage_GetDPMSMode(void);
112 status_t Savage_SetDPMSMode(uint32 dpms_flags);
114 uint32 Trio64_DPMSCapabilities(void);
115 uint32 Trio64_GetDPMSMode(void);
116 status_t Trio64_SetDPMSMode(uint32 dpms_flags);
118 uint32 Virge_DPMSCapabilities(void);
119 uint32 Virge_GetDPMSMode(void);
120 status_t Virge_SetDPMSMode(uint32 dpms_flags);
122 // Cursor
123 status_t SetCursorShape(uint16 width, uint16 height, uint16 hot_x, uint16 hot_y,
124 uint8* andMask, uint8* xorMask);
125 void MoveCursor(uint16 x, uint16 y);
126 void Savage_ShowCursor(bool bShow);
127 void Trio64_ShowCursor(bool bShow);
128 void Virge_ShowCursor(bool bShow);
130 // Engine Management
131 uint32 AccelerantEngineCount(void);
132 status_t AcquireEngine(uint32 capabilities, uint32 max_wait, sync_token* st, engine_token** et);
133 status_t ReleaseEngine(engine_token* et, sync_token* st);
134 void WaitEngineIdle(void);
135 status_t GetSyncToken(engine_token* et, sync_token* st);
136 status_t SyncToToken(sync_token* st);
138 // 2D acceleration
139 void Savage_FillRectangle(engine_token* et, uint32 color, fill_rect_params* list, uint32 count);
140 void Savage_FillSpan(engine_token* et, uint32 color, uint16* list, uint32 count);
141 void Savage_InvertRectangle(engine_token* et, fill_rect_params* list, uint32 count);
142 void Savage_ScreenToScreenBlit(engine_token* et, blit_params* list, uint32 count);
144 void Trio64_FillRectangle(engine_token* et, uint32 color, fill_rect_params* list, uint32 count);
145 void Trio64_FillSpan(engine_token* et, uint32 color, uint16* list, uint32 count);
146 void Trio64_InvertRectangle(engine_token* et, fill_rect_params* list, uint32 count);
147 void Trio64_ScreenToScreenBlit(engine_token* et, blit_params* list, uint32 count);
149 void Virge_FillRectangle(engine_token* et, uint32 color, fill_rect_params* list, uint32 count);
150 void Virge_FillSpan(engine_token* et, uint32 color, uint16* list, uint32 count);
151 void Virge_InvertRectangle(engine_token* et, fill_rect_params* list, uint32 count);
152 void Virge_ScreenToScreenBlit(engine_token* et, blit_params* list, uint32 count);
154 #if defined(__cplusplus)
156 #endif
160 // Prototypes for other functions that are called from source files other than
161 // where they are defined.
162 //============================================================================
164 status_t CreateModeList(bool (*checkMode)(const display_mode* mode),
165 bool (*getEdid)(edid1_info& edidInfo));
166 void InitCrtcTimingValues(const DisplayModeEx& mode, int horzScaleFactor, uint8 crtc[],
167 uint8& cr3b, uint8& cr3c, uint8& cr5d, uint8& cr5e);
168 bool IsModeUsable(const display_mode* mode);
170 // Savage functions.
172 bool Savage_GetEdidInfo(edid1_info& edidInfo);
174 bool Savage_LoadCursorImage(int width, int height, uint8* and_mask, uint8* xor_mask);
175 void Savage_SetCursorPosition(int x, int y);
177 void Savage_AdjustFrame(const DisplayModeEx& mode);
178 bool Savage_SetDisplayMode(const DisplayModeEx& mode);
179 void Savage_SetFunctionPointers(void);
181 // Trio64 functions.
183 bool Trio64_LoadCursorImage(int width, int height, uint8* and_mask, uint8* xor_mask);
184 void Trio64_SetCursorPosition(int x, int y);
186 void Trio64_AdjustFrame(const DisplayModeEx& mode);
187 bool Trio64_SetDisplayMode(const DisplayModeEx& mode);
188 void Trio64_SetFunctionPointers(void);
190 // Virge functions.
192 bool Virge_GetEdidInfo(edid1_info& edidInfo);
194 bool Virge_LoadCursorImage(int width, int height, uint8* and_mask, uint8* xor_mask);
195 void Virge_SetCursorPosition(int x, int y);
197 void Virge_AdjustFrame(const DisplayModeEx& mode);
198 bool Virge_SetDisplayMode(const DisplayModeEx& mode);
199 void Virge_SetFunctionPointers(void);
202 #endif // _ACCEL_H