1 #ifndef _NOUVEAU_INTERN_H
2 #define _NOUVEAU_INTERN_H
4 Copyright © 2010-2017, The AROS Development Team. All rights reserved.
8 #include <exec/semaphores.h>
11 #include <hidd/gallium.h>
13 #include "nouveau/nouveau_drmif.h"
14 #include "nouveau/nouveau_bo.h"
15 #include "nouveau/nouveau_channel.h"
16 #include "nouveau/nouveau_notifier.h"
17 #include "nouveau/nouveau_grobj.h"
19 #include LC_LIBDEFS_FILE
21 #define CLID_Hidd_Gfx_Nouveau "hidd.gfx.nouveau"
22 #define IID_Hidd_Gfx_Nouveau "hidd.gfx.nouveau"
24 #define HiddGfxNouveauAttrBase __IHidd_Gfx_Nouveau
26 #ifndef __OOP_NOATTRBASES__
27 extern OOP_AttrBase HiddGfxNouveauAttrBase
;
30 extern struct SignalSemaphore globalLock
;
34 aoHidd_Gfx_Nouveau_VRAMSize
, /* [G..] The amount of total VRAM in bytes */
35 aoHidd_Gfx_Nouveau_GARTSize
, /* [G..] The amount of total GART in bytes */
36 aoHidd_Gfx_Nouveau_VRAMFree
, /* [G..] The amount of free VRAM in bytes */
37 aoHidd_Gfx_Nouveau_GARTFree
, /* [G..] The amount of free GART in bytes */
39 num_Hidd_Gfx_Nouveau_Attrs
42 #define aHidd_Gfx_Nouveau_VRAMSize (HiddGfxNouveauAttrBase + aoHidd_Gfx_Nouveau_VRAMSize)
43 #define aHidd_Gfx_Nouveau_GARTSize (HiddGfxNouveauAttrBase + aoHidd_Gfx_Nouveau_GARTSize)
44 #define aHidd_Gfx_Nouveau_VRAMFree (HiddGfxNouveauAttrBase + aoHidd_Gfx_Nouveau_VRAMFree)
45 #define aHidd_Gfx_Nouveau_GARTFree (HiddGfxNouveauAttrBase + aoHidd_Gfx_Nouveau_GARTFree)
47 #define IS_GFXNOUVEAU_ATTR(attr, idx) \
48 (((idx) = (attr) - HiddGfxNouveauAttrBase) < num_Hidd_Gfx_Nouveau_Attrs)
50 struct HIDDNouveauData
52 struct nouveau_bo
*cursor
;
55 APTR selectedconnector
;
56 OOP_Object
*compositor
;
59 #define CLID_Hidd_BitMap_Nouveau "hidd.bitmap.nouveau"
60 #define IID_Hidd_BitMap_Nouveau "hidd.bitmap.nouveau"
62 #define HiddBitMapNouveauAttrBase __IHidd_BitMap_Nouveau
64 #ifndef __OOP_NOATTRBASES__
65 extern OOP_AttrBase HiddBitMapNouveauAttrBase
;
70 aoHidd_BitMap_Nouveau_CompositorHidd
, /* [I..] The compositor object that will be used by bitmap */
72 num_Hidd_BitMap_Nouveau_Attrs
75 #define aHidd_BitMap_Nouveau_CompositorHidd (HiddBitMapNouveauAttrBase + aoHidd_BitMap_Nouveau_CompositorHidd)
77 #define IS_BITMAPNOUVEAU_ATTR(attr, idx) \
78 (((idx) = (attr) - HiddBitMapNouveauAttrBase) < num_Hidd_BitMap_Nouveau_Attrs)
80 struct HIDDNouveauBitMapData
82 struct SignalSemaphore semaphore
;
83 struct nouveau_bo
*bo
; /* Buffer object behind bitmap. Don't make any
84 assumptions about buffer mapping (bo->map)
85 state. This state however can only be changed
86 when lock is held on bitmap */
88 ULONG height
; /* Height of bitmap in pixels */
89 ULONG width
; /* Width of bitmap in pixels */
90 ULONG pitch
; /* Width of single data row in bytes */
91 UBYTE bytesperpixel
; /* In bytes, how many bytes to store a pixel */
92 UBYTE depth
; /* In bits, how many bits used to represt the color */
93 BOOL displayable
; /* Can bitmap be displayed on screen */
95 /* Information connected with display */
96 OOP_Object
*compositor
; /* Compositor object used by bitmap */
97 LONG xoffset
; /* Offset to bitmap point that is displayed as (0,0) on screen */
98 LONG yoffset
; /* Offset to bitmap point that is displayed as (0,0) on screen */
99 ULONG fbid
; /* Contains ID under which bitmap
100 is registered as framebuffer or
104 #define CLID_Hidd_I2C_Nouveau "hidd.i2c.nouveau"
105 #define IID_Hidd_I2C_Nouveau "hidd.i2c.nouveau"
107 #define HiddI2CNouveauAttrBase __IHidd_I2C_Nouveau
109 #ifndef __OOP_NOATTRBASES__
110 extern OOP_AttrBase HiddI2CNouveauAttrBase
;
115 aoHidd_I2C_Nouveau_Chan
, /* [I..] The nouveau_i2c_chan object */
117 num_Hidd_I2C_Nouveau_Attrs
120 #define aHidd_I2C_Nouveau_Chan (HiddI2CNouveauAttrBase + aoHidd_I2C_Nouveau_Chan)
122 #define IS_I2CNOUVEAU_ATTR(attr, idx) \
123 (((idx) = (attr) - HiddI2CNouveauAttrBase) < num_Hidd_I2C_Nouveau_Attrs)
125 struct HIDDNouveauI2CData
130 #define CLID_Hidd_Gallium_Nouveau "hidd.gallium.nouveau"
132 struct HIDDGalliumNouveauData
138 /* Card controlling objects */
141 struct nouveau_device
*dev
; /* Device object acquired from libdrm */
142 struct nouveau_channel
*chan
;
144 struct nouveau_notifier
*notify0
;
145 struct nouveau_notifier
*vblank_sem
;
147 struct nouveau_grobj
*NvImageBlit
;
148 struct nouveau_grobj
*NvContextSurfaces
;
149 struct nouveau_grobj
*NvRop
;
150 struct nouveau_grobj
*NvImagePattern
;
151 struct nouveau_grobj
*NvRectangle
;
152 struct nouveau_grobj
*NvMemFormat
;
153 struct nouveau_grobj
*Nv2D
;
154 struct nouveau_grobj
*Nv3D
;
155 struct nouveau_grobj
*NvSW
;
156 struct nouveau_bo
*shader_mem
;
157 struct nouveau_bo
*tesla_scratch
;
159 struct nouveau_bo
*GART
; /* Buffer in GART for upload/download of images */
160 struct SignalSemaphore gartsemaphore
;
165 OOP_Class
*basegc
; /* baseclass for CreateObject */
166 OOP_Class
*basebm
; /* baseclass for CreateObject */
167 OOP_Class
*basegallium
; /* baseclass for CreateObject */
172 OOP_Class
*galliumclass
;
173 OOP_Class
*compositorclass
;
175 OOP_AttrBase hiddAttrBase
;
176 OOP_AttrBase pixFmtAttrBase
;
177 OOP_AttrBase gfxAttrBase
;
178 OOP_AttrBase gfxNouveauAttrBase
;
179 OOP_AttrBase syncAttrBase
;
180 OOP_AttrBase bitMapAttrBase
;
181 OOP_AttrBase planarAttrBase
;
182 OOP_AttrBase i2cNouveauAttrBase
;
183 OOP_AttrBase galliumAttrBase
;
184 OOP_AttrBase gcAttrBase
;
185 OOP_AttrBase compositorAttrBase
;
186 OOP_AttrBase bitMapNouveauAttrBase
;
188 OOP_MethodID mid_CopyMemBox16
;
189 OOP_MethodID mid_CopyMemBox32
;
190 OOP_MethodID mid_PutMem32Image16
;
191 OOP_MethodID mid_GetMem32Image16
;
192 OOP_MethodID mid_PutMemTemplate16
;
193 OOP_MethodID mid_PutMemTemplate32
;
194 OOP_MethodID mid_PutMemPattern16
;
195 OOP_MethodID mid_PutMemPattern32
;
196 OOP_MethodID mid_ConvertPixels
;
197 OOP_MethodID mid_GetPixFmt
;
199 OOP_MethodID mid_BitMapPositionChanged
;
200 OOP_MethodID mid_BitMapRectChanged
;
201 OOP_MethodID mid_ValidateBitMapPositionChange
;
203 struct CardData carddata
;
205 struct SignalSemaphore multibitmapsemaphore
;
211 struct staticdata sd
;
214 #define METHOD(base, id, name) \
215 base ## __ ## id ## __ ## name (OOP_Class *cl, OOP_Object *o, struct p ## id ## _ ## name *msg)
217 #define BASE(lib) ((LIBBASETYPEPTR)(lib))
219 #define SD(cl) (&BASE(cl->UserData)->sd)
221 #define LOCK_ENGINE { ObtainSemaphore(&globalLock); }
222 #define UNLOCK_ENGINE { ReleaseSemaphore(&globalLock); }
224 #define LOCK_BITMAP { ObtainSemaphore(&bmdata->semaphore); }
225 #define UNLOCK_BITMAP { ReleaseSemaphore(&bmdata->semaphore); }
227 #define LOCK_BITMAP_BM(bmdata) { ObtainSemaphore(&(bmdata)->semaphore); }
228 #define UNLOCK_BITMAP_BM(bmdata) { ReleaseSemaphore(&(bmdata)->semaphore); }
230 #define LOCK_MULTI_BITMAP { ObtainSemaphore(&(SD(cl))->multibitmapsemaphore); }
231 #define UNLOCK_MULTI_BITMAP { ReleaseSemaphore(&(SD(cl))->multibitmapsemaphore); }
233 #define UNMAP_BUFFER { if (bmdata->bo->map) nouveau_bo_unmap(bmdata->bo); }
234 #define UNMAP_BUFFER_BM(bmdata) { if ((bmdata)->bo->map) nouveau_bo_unmap((bmdata)->bo); }
236 #define MAP_BUFFER { if (!bmdata->bo->map) nouveau_bo_map(bmdata->bo, NOUVEAU_BO_RDWR); }
237 #define MAP_BUFFER_BM(bmdata) { if (!(bmdata)->bo->map) nouveau_bo_map((bmdata)->bo, NOUVEAU_BO_RDWR); }
239 #define IS_NOUVEAU_BM_CLASS(x) ((x) == SD(cl)->bmclass)
241 #define writel(val, addr) (*(volatile ULONG*)(addr) = (val))
242 #define readl(addr) (*(volatile ULONG*)(addr))
243 #define writew(val, addr) (*(volatile UWORD*)(addr) = (val))
244 #define readw(addr) (*(volatile UWORD*)(addr))
248 NvNullObject
= 0x00000000,
249 NvContextSurfaces
= 0x80000010,
251 NvImagePattern
= 0x80000012,
252 NvClipRectangle
= 0x80000013,
253 NvSolidLine
= 0x80000014,
254 NvImageBlit
= 0x80000015,
255 NvRectangle
= 0x80000016,
256 NvScaledImage
= 0x80000017,
257 NvMemFormat
= 0x80000018,
259 NvImageFromCpu
= 0x8000001A,
260 NvContextBeta1
= 0x8000001B,
261 NvContextBeta4
= 0x8000001C,
264 NvDmaFB
= 0xD8000001,
265 NvDmaTT
= 0xD8000002,
266 NvDmaNotifier0
= 0xD8000003,
267 NvVBlankSem
= 0xD8000004,
270 #define NV_ARCH_03 0x03
271 #define NV_ARCH_04 0x04
272 #define NV_ARCH_10 0x10
273 #define NV_ARCH_20 0x20
274 #define NV_ARCH_30 0x30
275 #define NV_ARCH_40 0x40
276 #define NV_ARCH_50 0x50
277 #define NV_ARCH_C0 0xC0
279 #define BLENDOP_SOLID 1
280 #define BLENDOP_ALPHA_PREMULT 3
281 #define BLENDOP_ALPHA 13
283 /* nv_accel_common.c */
284 BOOL
HIDDNouveauAccelCommonInit(struct CardData
* carddata
);
285 VOID
HIDDNouveauAccelFree(struct CardData
* carddata
);
287 BOOL
NVAccelGetCtxSurf2DFormatFromPixmap(struct HIDDNouveauBitMapData
* bmdata
, LONG
*fmt_ret
);
290 VOID
HIDDNouveauNV04SetPattern(struct CardData
* carddata
, LONG clr0
, LONG clr1
,
291 LONG pat0
, LONG pat1
);
292 BOOL
HIDDNouveauNV04FillSolidRect(struct CardData
* carddata
,
293 struct HIDDNouveauBitMapData
* bmdata
, LONG minX
, LONG minY
, LONG maxX
,
294 LONG maxY
, ULONG drawmode
, ULONG color
);
295 BOOL
HIDDNouveauNV04CopySameFormat(struct CardData
* carddata
,
296 struct HIDDNouveauBitMapData
* srcdata
, struct HIDDNouveauBitMapData
* destdata
,
297 LONG srcX
, LONG srcY
, LONG destX
, LONG destY
, LONG width
, LONG height
,
301 BOOL
HIDDNouveauNV103DCopyBox(struct CardData
* carddata
,
302 struct HIDDNouveauBitMapData
* srcdata
, struct HIDDNouveauBitMapData
* destdata
,
303 LONG srcX
, LONG srcY
, LONG destX
, LONG destY
, LONG width
, LONG height
,
307 BOOL
HIDDNouveauNV303DCopyBox(struct CardData
* carddata
,
308 struct HIDDNouveauBitMapData
* srcdata
, struct HIDDNouveauBitMapData
* destdata
,
309 LONG srcX
, LONG srcY
, LONG destX
, LONG destY
, LONG width
, LONG height
,
313 BOOL
HIDDNouveauNV403DCopyBox(struct CardData
* carddata
,
314 struct HIDDNouveauBitMapData
* srcdata
, struct HIDDNouveauBitMapData
* destdata
,
315 LONG srcX
, LONG srcY
, LONG destX
, LONG destY
, LONG width
, LONG height
,
319 VOID
HIDDNouveauNV50SetPattern(struct CardData
* carddata
, LONG col0
,
320 LONG col1
, LONG pat0
, LONG pat1
);
321 BOOL
HIDDNouveauNV50FillSolidRect(struct CardData
* carddata
,
322 struct HIDDNouveauBitMapData
* bmdata
, LONG minX
, LONG minY
, LONG maxX
,
323 LONG maxY
, ULONG drawmode
, ULONG color
);
324 BOOL
HIDDNouveauNV50CopySameFormat(struct CardData
* carddata
,
325 struct HIDDNouveauBitMapData
* srcdata
, struct HIDDNouveauBitMapData
* destdata
,
326 LONG srcX
, LONG srcY
, LONG destX
, LONG destY
, LONG width
, LONG height
,
330 VOID
HIDDNouveauNVC0SetPattern(struct CardData
* carddata
, LONG clr0
, LONG clr1
,
331 LONG pat0
, LONG pat1
);
332 BOOL
HIDDNouveauNVC0FillSolidRect(struct CardData
* carddata
,
333 struct HIDDNouveauBitMapData
* bmdata
, LONG minX
, LONG minY
, LONG maxX
,
334 LONG maxY
, ULONG drawmode
, ULONG color
);
335 BOOL
HIDDNouveauNVC0CopySameFormat(struct CardData
* carddata
,
336 struct HIDDNouveauBitMapData
* srcdata
, struct HIDDNouveauBitMapData
* destdata
,
337 LONG srcX
, LONG srcY
, LONG destX
, LONG destY
, LONG width
, LONG height
,
340 /* nouveau_accel.c */
341 BOOL
HiddNouveauWriteFromRAM(
342 APTR src
, ULONG srcPitch
, HIDDT_StdPixFmt srcPixFmt
,
343 APTR dst
, ULONG dstPitch
,
344 ULONG width
, ULONG height
,
345 OOP_Class
*cl
, OOP_Object
*o
);
346 BOOL
HiddNouveauReadIntoRAM(
347 APTR src
, ULONG srcPitch
,
348 APTR dst
, ULONG dstPitch
, HIDDT_StdPixFmt dstPixFmt
,
349 ULONG width
, ULONG height
,
350 OOP_Class
*cl
, OOP_Object
*o
);
351 BOOL
HiddNouveauAccelARGBUpload3D(
352 UBYTE
* srcpixels
, ULONG srcpitch
,
353 LONG x
, LONG y
, LONG width
, LONG height
,
354 OOP_Class
*cl
, OOP_Object
*o
);
355 BOOL
HiddNouveauAccelAPENUpload3D(
356 UBYTE
* srcalpha
, BOOL srcinvertalpha
, ULONG srcpitch
, ULONG srcpenrgb
,
357 LONG x
, LONG y
, LONG width
, LONG height
,
358 OOP_Class
*cl
, OOP_Object
*o
);
359 VOID
HIDDNouveauBitMapPutAlphaImage32(struct HIDDNouveauBitMapData
* bmdata
,
360 APTR srcbuff
, ULONG srcpitch
, LONG destX
, LONG destY
, LONG width
, LONG height
);
361 VOID
HIDDNouveauBitMapPutAlphaImage16(struct HIDDNouveauBitMapData
* bmdata
,
362 APTR srcbuff
, ULONG srcpitch
, LONG destX
, LONG destY
, LONG width
, LONG height
);
363 VOID
HIDDNouveauBitMapPutAlphaTemplate32(struct HIDDNouveauBitMapData
* bmdata
,
364 OOP_Object
* gc
, OOP_Object
* bm
, BOOL invertalpha
,
365 UBYTE
* srcalpha
, ULONG srcpitch
, LONG destX
, LONG destY
, LONG width
, LONG height
);
366 VOID
HIDDNouveauBitMapPutAlphaTemplate16(struct HIDDNouveauBitMapData
* bmdata
,
367 OOP_Object
* gc
, OOP_Object
* bm
, BOOL invertalpha
,
368 UBYTE
* srcalpha
, ULONG srcpitch
, LONG destX
, LONG destY
, LONG width
, LONG height
);
369 VOID
HIDDNouveauBitMapDrawSolidLine(struct HIDDNouveauBitMapData
* bmdata
,
370 OOP_Object
* gc
, LONG destX1
, LONG destY1
, LONG destX2
, LONG destY2
);
373 BOOL
HiddNouveauNVAccelUploadM2MF(
374 UBYTE
* srcpixels
, ULONG srcpitch
, HIDDT_StdPixFmt srcPixFmt
,
375 LONG x
, LONG y
, LONG width
, LONG height
,
376 OOP_Class
*cl
, OOP_Object
*o
);
377 BOOL
HiddNouveauNVAccelDownloadM2MF(
378 UBYTE
* dstpixels
, ULONG dstpitch
, HIDDT_StdPixFmt dstPixFmt
,
379 LONG x
, LONG y
, LONG width
, LONG height
,
380 OOP_Class
*cl
, OOP_Object
*o
);
382 VOID
HIDDNouveauShowCursor(OOP_Object
* gfx
, BOOL visible
);
383 BOOL
HIDDNouveauSwitchToVideoMode(OOP_Object
* bm
);
384 VOID
HIDDNouveauSetOffsets(OOP_Object
* bm
, LONG newxoffset
, LONG newyoffset
);
386 /* Declaration of nouveau initialization function */
387 extern int nouveau_init(void);
389 /* Commom memory allocation */
390 APTR
HIDDNouveauAlloc(ULONG size
);
391 VOID
HIDDNouveauFree(APTR memory
);
393 #endif /* _NOUVEAU_INTERN_H */