#ifndef _RADEON_HD_RINGQUEUE_H
#define _RADEON_HD_RINGQUEUE_H
#include "Accelerant.h"
#include <stdint.h>
#define RADEON_QUEUE_MAX 3
#define RADEON_QUEUE_TYPE_GFX_INDEX 0
#define CAYMAN_QUEUE_TYPE_CP1_INDEX 1
#define CAYMAN_QUEUE_TYPE_CP2_INDEX 2
int compute_order(unsigned long size);
class RingQueue {
public:
RingQueue(size_t bytes, uint32 queueType);
~RingQueue();
size_t Read(unsigned char* data, size_t bytes);
size_t Write(unsigned char* data, size_t bytes);
status_t Empty();
size_t GetSize() {return fSize;};
size_t GetWriteAvail() {return fWriteBytesAvail;}
size_t GetReadAvail() {return fSize - fWriteBytesAvail;}
intptr_t GetLocation() {return (intptr_t)fData;}
private:
uint32 fQueueType;
unsigned char* fData;
size_t fSize;
size_t fWriteBytesAvail;
int fReadPtr;
int fWritePtr;
uint32 fAlignMask;
};
#endif