xref: /haiku/src/add-ons/accelerants/radeon_hd/ringqueue.h (revision 9e195872df77517e2b21e12e3e2da77e2497533c)
1745450adSAlexander von Gluck IV /*
2745450adSAlexander von Gluck IV  * Copyright 2012, Haiku, Inc. All Rights Reserved.
3745450adSAlexander von Gluck IV  * Distributed under the terms of the MIT License.
4745450adSAlexander von Gluck IV  *
5745450adSAlexander von Gluck IV  * Authors:
6745450adSAlexander von Gluck IV  *    Alexander von Gluck, kallisti5@unixzen.com
7745450adSAlexander von Gluck IV  */
8745450adSAlexander von Gluck IV #ifndef _RADEON_HD_RINGQUEUE_H
9745450adSAlexander von Gluck IV #define _RADEON_HD_RINGQUEUE_H
10745450adSAlexander von Gluck IV 
11745450adSAlexander von Gluck IV 
12745450adSAlexander von Gluck IV #include "Accelerant.h"
13745450adSAlexander von Gluck IV 
14*9e195872SAlexander von Gluck IV #include <stdint.h>
15*9e195872SAlexander von Gluck IV 
16745450adSAlexander von Gluck IV 
17745450adSAlexander von Gluck IV #define RADEON_QUEUE_MAX 3
18745450adSAlexander von Gluck IV // Basic r100+ graphic data ring
19745450adSAlexander von Gluck IV #define RADEON_QUEUE_TYPE_GFX_INDEX 0
20745450adSAlexander von Gluck IV // Cayman+ have two compute command processor rings
21745450adSAlexander von Gluck IV #define CAYMAN_QUEUE_TYPE_CP1_INDEX 1
22745450adSAlexander von Gluck IV #define CAYMAN_QUEUE_TYPE_CP2_INDEX 2
23745450adSAlexander von Gluck IV 
24745450adSAlexander von Gluck IV 
25*9e195872SAlexander von Gluck IV int compute_order(unsigned long size);
26*9e195872SAlexander von Gluck IV 
27*9e195872SAlexander von Gluck IV 
28745450adSAlexander von Gluck IV // A basic ring buffer for passing render data into card.
29745450adSAlexander von Gluck IV // Data flows from the host to the GPU
30745450adSAlexander von Gluck IV class RingQueue {
31745450adSAlexander von Gluck IV public:
32745450adSAlexander von Gluck IV 							RingQueue(size_t bytes, uint32 queueType);
33745450adSAlexander von Gluck IV 							~RingQueue();
34745450adSAlexander von Gluck IV 			size_t			Read(unsigned char* data, size_t bytes);
35745450adSAlexander von Gluck IV 			size_t			Write(unsigned char* data, size_t bytes);
36745450adSAlexander von Gluck IV 			status_t		Empty();
37745450adSAlexander von Gluck IV 
385af067fbSAlexander von Gluck IV 			size_t			GetSize() {return fSize;};
395af067fbSAlexander von Gluck IV 			size_t			GetWriteAvail() {return fWriteBytesAvail;}
405af067fbSAlexander von Gluck IV 			size_t			GetReadAvail() {return fSize - fWriteBytesAvail;}
41*9e195872SAlexander von Gluck IV 			intptr_t		GetLocation() {return (intptr_t)fData;}
42*9e195872SAlexander von Gluck IV 
43745450adSAlexander von Gluck IV private:
445af067fbSAlexander von Gluck IV 			uint32			fQueueType;
45745450adSAlexander von Gluck IV 
465af067fbSAlexander von Gluck IV 			unsigned char*	fData;
475af067fbSAlexander von Gluck IV 			size_t			fSize;
485af067fbSAlexander von Gluck IV 			size_t			fWriteBytesAvail;
495af067fbSAlexander von Gluck IV 			int				fReadPtr;
505af067fbSAlexander von Gluck IV 			int				fWritePtr;
51745450adSAlexander von Gluck IV 
525af067fbSAlexander von Gluck IV 			uint32			fAlignMask;
53745450adSAlexander von Gluck IV };
54745450adSAlexander von Gluck IV 
55745450adSAlexander von Gluck IV 
56745450adSAlexander von Gluck IV #endif /* _RADEON_HD_RINGQUEUE_H */
57