/***************************************************************************************************
|
File:
|
reg.cpp
|
Decription:
|
register operation
|
Author:
|
Jian Huan
|
Date:
|
2010-12-8 16:40:04
|
**************************************************************************************************/
|
#include "reg.h"
|
|
rkdecregister::rkdecregister()
|
{
|
regBase = 0;
|
}
|
|
rkdecregister::~rkdecregister()
|
{
|
regBase = 0;
|
}
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
/*HW Config as follows*/
|
const RK_U32 regMask[33] = { 0x00000000,
|
0x00000001, 0x00000003, 0x00000007, 0x0000000F,
|
0x0000001F, 0x0000003F, 0x0000007F, 0x000000FF,
|
0x000001FF, 0x000003FF, 0x000007FF, 0x00000FFF,
|
0x00001FFF, 0x00003FFF, 0x00007FFF, 0x0000FFFF,
|
0x0001FFFF, 0x0003FFFF, 0x0007FFFF, 0x000FFFFF,
|
0x001FFFFF, 0x003FFFFF, 0x007FFFFF, 0x00FFFFFF,
|
0x01FFFFFF, 0x03FFFFFF, 0x07FFFFFF, 0x0FFFFFFF,
|
0x1FFFFFFF, 0x3FFFFFFF, 0x7FFFFFFF, 0xFFFFFFFF
|
};
|
|
/* { SWREG, BITS, POSITION } */
|
RK_U32 hwDecRegSpec[HWIF_LAST_REG + 1][3] = {
|
/* include script-generated part */
|
#include "6731table.h"
|
/* HWIF_DEC_IRQ_STAT */ {55, 10, 4},
|
/* HWIF_PP_IRQ_STAT */ {40, 2, 2},
|
/* dummy entry */ { 0, 0, 0},
|
};
|
|
|
/***************************************************************************************************
|
Func:
|
SetRegisterFile
|
Description:
|
config register-mapped memory (not hw register)
|
Author:
|
Jian Huan
|
Date:
|
2010-12-8 16:57:35
|
**************************************************************************************************/
|
void rkdecregister::SetRegisterFile(RK_U32 id, RK_U32 value)
|
{
|
RK_U32 tmp;
|
|
tmp = regBase[hwDecRegSpec[id][0]];
|
tmp &= ~(regMask[hwDecRegSpec[id][1]] << hwDecRegSpec[id][2]);
|
tmp |= (value & regMask[hwDecRegSpec[id][1]]) << hwDecRegSpec[id][2];
|
regBase[hwDecRegSpec[id][0]] = tmp;
|
}
|
|
void rkdecregister::SetRegisterMapAddr(RK_U32 *regMemAddr)
|
{
|
regBase = regMemAddr;
|
}
|
|
/***************************************************************************************************
|
Func:
|
GetRegisterFile
|
Description:
|
read register-mapped memory (not hw register)
|
Author:
|
Jian Huan
|
Date:
|
2010-12-8 16:57:35
|
**************************************************************************************************/
|
RK_U32 rkdecregister::GetRegisterFile(RK_U32 id)
|
{
|
RK_U32 tmp;
|
|
tmp = regBase[hwDecRegSpec[id][0]];
|
tmp = tmp >> hwDecRegSpec[id][2];
|
tmp &= regMask[hwDecRegSpec[id][1]];
|
return (tmp);
|
}
|
|
|
extern "C"
|
void *get_rkdecregister_handle(void)
|
{
|
return (void*)new rkdecregister();
|
}
|
|
extern "C"
|
void release_rkdecregister_handle(void * handle)
|
{
|
delete (rkdecregister *)handle;
|
return;
|
}
|
|
extern "C"
|
void set_rkdecregister_map(void * handle, RK_U32 *regMemAddr)
|
{
|
rkdecregister *Creg = (rkdecregister *)handle;
|
return Creg->SetRegisterMapAddr(regMemAddr);
|
}
|
|
|
extern "C"
|
void rk_SetRegisterFile(void * handle, RK_U32 id, RK_U32 value)
|
{
|
rkdecregister *Creg = (rkdecregister *)handle;
|
return Creg->SetRegisterFile(id, value);
|
}
|
|
extern "C"
|
RK_U32 rk_GetRegisterFile(void * handle, RK_U32 id)
|
{
|
rkdecregister *Creg = (rkdecregister *)handle;
|
return Creg->GetRegisterFile(id);
|
}
|
|