Play-/Source/iop/Iop_DmacChannel.h
jpd002 74ddd5ef12 Second pass of cleanup for C++11.
git-svn-id: http://svn.purei.org/purei/trunk@852 b36208d7-6611-0410-8bec-b1987f11c4a2
2012-03-11 20:16:15 +00:00

68 lines
1.4 KiB
C++

#ifndef _IOP_DMACCHANNEL_H_
#define _IOP_DMACCHANNEL_H_
#include "convertible.h"
#include "Types.h"
#include <boost/static_assert.hpp>
#include <functional>
namespace Iop
{
class CDmac;
namespace Dmac
{
class CChannel
{
public:
typedef std::function<uint32 (uint8*, uint32, uint32)> ReceiveFunctionType;
enum
{
REG_MADR = 0x00,
REG_BCR = 0x04,
REG_CHCR = 0x08
};
struct BCR : public convertible<uint32>
{
unsigned int bs : 16;
unsigned int ba : 16;
};
BOOST_STATIC_ASSERT(sizeof(BCR) == sizeof(uint32));
struct CHCR : public convertible<uint32>
{
unsigned int dr : 1;
unsigned int unused0 : 8;
unsigned int co : 1;
unsigned int li : 1;
unsigned int unused1 : 13;
unsigned int tr : 1;
unsigned int unused2 : 7;
};
BOOST_STATIC_ASSERT(sizeof(CHCR) == sizeof(uint32));
CChannel(uint32, unsigned int, CDmac&);
virtual ~CChannel();
void Reset();
void SetReceiveFunction(const ReceiveFunctionType&);
void ResumeDma();
uint32 ReadRegister(uint32);
void WriteRegister(uint32, uint32);
private:
ReceiveFunctionType m_receiveFunction;
unsigned int m_number;
uint32 m_baseAddress;
uint32 m_MADR;
BCR m_BCR;
CHCR m_CHCR;
CDmac& m_dmac;
};
}
}
#endif