/* Copyright (C) 2018 RDA Technologies Limited and/or its affiliates("RDA").
 * All rights reserved.
 *
 * This software is supplied "AS IS" without any warranties.
 * RDA assumes no responsibility or liability for the use of the software,
 * conveys no license or title under any patent, copyright, or mask work
 * right to the product. RDA reserves the right to make changes in the
 * software without notification.  RDA also make no representation or
 * warranty that such application will be suitable for the specified use
 * without further testing or modification.
 */

#ifndef _MONITOR_H_
#define _MONITOR_H_

// Auto generated by dtools(see dtools.txt for its version).
// Don't edit it manually!

#define REG_MONITOR_BASE (0x51502000)

typedef volatile struct
{
    uint32_t mon_sel0;   // 0x00000000
    uint32_t mon_sel1;   // 0x00000004
    uint32_t mon_sel2;   // 0x00000008
    uint32_t mon_sel3;   // 0x0000000c
    uint32_t mon_sel4;   // 0x00000010
    uint32_t mon_sel5;   // 0x00000014
    uint32_t mon_sel6;   // 0x00000018
    uint32_t mon_sel7;   // 0x0000001c
    uint32_t mon_con0;   // 0x00000020
    uint32_t mon_con1;   // 0x00000024
    uint32_t mon_con2;   // 0x00000028
    uint32_t mon_con3;   // 0x0000002c
    uint32_t mon_con4;   // 0x00000030
    uint32_t mon_con5;   // 0x00000034
    uint32_t mon_con6;   // 0x00000038
    uint32_t mon_con7;   // 0x0000003c
    uint32_t mon_enable; // 0x00000040
    uint32_t monitor_o;  // 0x00000044
} HWP_MONITOR_T;

#define hwp_monitor ((HWP_MONITOR_T *)REG_ACCESS_ADDRESS(REG_MONITOR_BASE))

// mon_sel0
typedef union {
    uint32_t v;
    struct
    {
        uint32_t mon_sel0 : 11; // [10:0]
        uint32_t __31_11 : 21;  // [31:11]
    } b;
} REG_MONITOR_MON_SEL0_T;

// mon_sel1
typedef union {
    uint32_t v;
    struct
    {
        uint32_t mon_sel1 : 11; // [10:0]
        uint32_t __31_11 : 21;  // [31:11]
    } b;
} REG_MONITOR_MON_SEL1_T;

// mon_sel2
typedef union {
    uint32_t v;
    struct
    {
        uint32_t mon_sel2 : 11; // [10:0]
        uint32_t __31_11 : 21;  // [31:11]
    } b;
} REG_MONITOR_MON_SEL2_T;

// mon_sel3
typedef union {
    uint32_t v;
    struct
    {
        uint32_t mon_sel3 : 11; // [10:0]
        uint32_t __31_11 : 21;  // [31:11]
    } b;
} REG_MONITOR_MON_SEL3_T;

// mon_sel4
typedef union {
    uint32_t v;
    struct
    {
        uint32_t mon_sel4 : 11; // [10:0]
        uint32_t __31_11 : 21;  // [31:11]
    } b;
} REG_MONITOR_MON_SEL4_T;

// mon_sel5
typedef union {
    uint32_t v;
    struct
    {
        uint32_t mon_sel5 : 11; // [10:0]
        uint32_t __31_11 : 21;  // [31:11]
    } b;
} REG_MONITOR_MON_SEL5_T;

// mon_sel6
typedef union {
    uint32_t v;
    struct
    {
        uint32_t mon_sel6 : 11; // [10:0]
        uint32_t __31_11 : 21;  // [31:11]
    } b;
} REG_MONITOR_MON_SEL6_T;

// mon_sel7
typedef union {
    uint32_t v;
    struct
    {
        uint32_t mon_sel7 : 11; // [10:0]
        uint32_t __31_11 : 21;  // [31:11]
    } b;
} REG_MONITOR_MON_SEL7_T;

// mon_con0
typedef union {
    uint32_t v;
    struct
    {
        uint32_t mon_con0 : 3; // [2:0]
        uint32_t __31_3 : 29;  // [31:3]
    } b;
} REG_MONITOR_MON_CON0_T;

// mon_con1
typedef union {
    uint32_t v;
    struct
    {
        uint32_t mon_con1 : 3; // [2:0]
        uint32_t __31_3 : 29;  // [31:3]
    } b;
} REG_MONITOR_MON_CON1_T;

// mon_con2
typedef union {
    uint32_t v;
    struct
    {
        uint32_t mon_con2 : 3; // [2:0]
        uint32_t __31_3 : 29;  // [31:3]
    } b;
} REG_MONITOR_MON_CON2_T;

// mon_con3
typedef union {
    uint32_t v;
    struct
    {
        uint32_t mon_con3 : 3; // [2:0]
        uint32_t __31_3 : 29;  // [31:3]
    } b;
} REG_MONITOR_MON_CON3_T;

// mon_con4
typedef union {
    uint32_t v;
    struct
    {
        uint32_t mon_con4 : 3; // [2:0]
        uint32_t __31_3 : 29;  // [31:3]
    } b;
} REG_MONITOR_MON_CON4_T;

// mon_con5
typedef union {
    uint32_t v;
    struct
    {
        uint32_t mon_con5 : 3; // [2:0]
        uint32_t __31_3 : 29;  // [31:3]
    } b;
} REG_MONITOR_MON_CON5_T;

// mon_con6
typedef union {
    uint32_t v;
    struct
    {
        uint32_t mon_con6 : 3; // [2:0]
        uint32_t __31_3 : 29;  // [31:3]
    } b;
} REG_MONITOR_MON_CON6_T;

// mon_con7
typedef union {
    uint32_t v;
    struct
    {
        uint32_t mon_con7 : 3; // [2:0]
        uint32_t __31_3 : 29;  // [31:3]
    } b;
} REG_MONITOR_MON_CON7_T;

// mon_enable
typedef union {
    uint32_t v;
    struct
    {
        uint32_t mon_enable : 1; // [0]
        uint32_t __31_1 : 31;    // [31:1]
    } b;
} REG_MONITOR_MON_ENABLE_T;

// monitor_o
typedef union {
    uint32_t v;
    struct
    {
        uint32_t monitor_signal : 8; // [7:0], read only
        uint32_t __31_8 : 24;        // [31:8]
    } b;
} REG_MONITOR_MONITOR_O_T;

// mon_sel0
#define MONITOR_MON_SEL0(n) (((n)&0x7ff) << 0)

// mon_sel1
#define MONITOR_MON_SEL1(n) (((n)&0x7ff) << 0)

// mon_sel2
#define MONITOR_MON_SEL2(n) (((n)&0x7ff) << 0)

// mon_sel3
#define MONITOR_MON_SEL3(n) (((n)&0x7ff) << 0)

// mon_sel4
#define MONITOR_MON_SEL4(n) (((n)&0x7ff) << 0)

// mon_sel5
#define MONITOR_MON_SEL5(n) (((n)&0x7ff) << 0)

// mon_sel6
#define MONITOR_MON_SEL6(n) (((n)&0x7ff) << 0)

// mon_sel7
#define MONITOR_MON_SEL7(n) (((n)&0x7ff) << 0)

// mon_con0
#define MONITOR_MON_CON0(n) (((n)&0x7) << 0)

// mon_con1
#define MONITOR_MON_CON1(n) (((n)&0x7) << 0)

// mon_con2
#define MONITOR_MON_CON2(n) (((n)&0x7) << 0)

// mon_con3
#define MONITOR_MON_CON3(n) (((n)&0x7) << 0)

// mon_con4
#define MONITOR_MON_CON4(n) (((n)&0x7) << 0)

// mon_con5
#define MONITOR_MON_CON5(n) (((n)&0x7) << 0)

// mon_con6
#define MONITOR_MON_CON6(n) (((n)&0x7) << 0)

// mon_con7
#define MONITOR_MON_CON7(n) (((n)&0x7) << 0)

// mon_enable
#define MONITOR_MON_ENABLE (1 << 0)

// monitor_o
#define MONITOR_MONITOR_SIGNAL(n) (((n)&0xff) << 0)

#endif // _MONITOR_H_
