forked from ~ljy/RK356X_SDK_RELEASE

hc
2023-08-21 fc437ccf3419c424092701f3d883215fa4552a8b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
/***************************************************************************************************
    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);
}