/********************************************************************************
 * Marvell GPL License Option
 *
 * If you received this File from Marvell, you may opt to use, redistribute and/or
 * modify this File in accordance with the terms and conditions of the General
 * Public License Version 2, June 1991 (the "GPL License"), a copy of which is
 * available along with the File in the license.txt file or by writing to the Free
 * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
 * on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
 *
 * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
 * DISCLAIMED.  The GPL License provides additional details about this warranty
 * disclaimer.
 ******************************************************************************/

//////
/// don't edit! auto-generated by docc: VideoOverlay.h
////////////////////////////////////////////////////////////
#ifndef VideoOverlay_h
#define VideoOverlay_h (){}


#include "ctypes.h"

#pragma pack(1)
#ifdef __cplusplus
  extern "C" {
#endif

#ifndef _DOCC_H_BITOPS_
#define _DOCC_H_BITOPS_ (){}

    #define _bSETMASK_(b)                                      ((b)<32 ? (1<<((b)&31)) : 0)
    #define _NSETMASK_(msb,lsb)                                (_bSETMASK_((msb)+1)-_bSETMASK_(lsb))
    #define _bCLRMASK_(b)                                      (~_bSETMASK_(b))
    #define _NCLRMASK_(msb,lsb)                                (~_NSETMASK_(msb,lsb))
    #define _BFGET_(r,msb,lsb)                                 (_NSETMASK_((msb)-(lsb),0)&((r)>>(lsb)))
    #define _BFSET_(r,msb,lsb,v)                               do{ (r)&=_NCLRMASK_(msb,lsb); (r)|=_NSETMASK_(msb,lsb)&((v)<<(lsb)); }while(0)

#endif



//////
/// 
/// $INTERFACE VQUAD                                    (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000 AYUV                 (P)
///               %unsigned 8  A                         
///               %unsigned 8  Y                         
///               %unsigned 8  U                         
///               %unsigned 8  V                         
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       4B, bits:      32b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_VQUAD
#define h_VQUAD (){}

    #define     RA_VQUAD_AYUV                                  0x0000

    #define     BA_VQUAD_AYUV_A                                0x0000
    #define     B16VQUAD_AYUV_A                                0x0000
    #define   LSb32VQUAD_AYUV_A                                   0
    #define   LSb16VQUAD_AYUV_A                                   0
    #define       bVQUAD_AYUV_A                                8
    #define   MSK32VQUAD_AYUV_A                                   0x000000FF

    #define     BA_VQUAD_AYUV_Y                                0x0001
    #define     B16VQUAD_AYUV_Y                                0x0000
    #define   LSb32VQUAD_AYUV_Y                                   8
    #define   LSb16VQUAD_AYUV_Y                                   8
    #define       bVQUAD_AYUV_Y                                8
    #define   MSK32VQUAD_AYUV_Y                                   0x0000FF00

    #define     BA_VQUAD_AYUV_U                                0x0002
    #define     B16VQUAD_AYUV_U                                0x0002
    #define   LSb32VQUAD_AYUV_U                                   16
    #define   LSb16VQUAD_AYUV_U                                   0
    #define       bVQUAD_AYUV_U                                8
    #define   MSK32VQUAD_AYUV_U                                   0x00FF0000

    #define     BA_VQUAD_AYUV_V                                0x0003
    #define     B16VQUAD_AYUV_V                                0x0002
    #define   LSb32VQUAD_AYUV_V                                   24
    #define   LSb16VQUAD_AYUV_V                                   8
    #define       bVQUAD_AYUV_V                                8
    #define   MSK32VQUAD_AYUV_V                                   0xFF000000
    ///////////////////////////////////////////////////////////

    typedef struct SIE_VQUAD {
    ///////////////////////////////////////////////////////////
    #define   GET32VQUAD_AYUV_A(r32)                           _BFGET_(r32, 7, 0)
    #define   SET32VQUAD_AYUV_A(r32,v)                         _BFSET_(r32, 7, 0,v)
    #define   GET16VQUAD_AYUV_A(r16)                           _BFGET_(r16, 7, 0)
    #define   SET16VQUAD_AYUV_A(r16,v)                         _BFSET_(r16, 7, 0,v)

    #define   GET32VQUAD_AYUV_Y(r32)                           _BFGET_(r32,15, 8)
    #define   SET32VQUAD_AYUV_Y(r32,v)                         _BFSET_(r32,15, 8,v)
    #define   GET16VQUAD_AYUV_Y(r16)                           _BFGET_(r16,15, 8)
    #define   SET16VQUAD_AYUV_Y(r16,v)                         _BFSET_(r16,15, 8,v)

    #define   GET32VQUAD_AYUV_U(r32)                           _BFGET_(r32,23,16)
    #define   SET32VQUAD_AYUV_U(r32,v)                         _BFSET_(r32,23,16,v)
    #define   GET16VQUAD_AYUV_U(r16)                           _BFGET_(r16, 7, 0)
    #define   SET16VQUAD_AYUV_U(r16,v)                         _BFSET_(r16, 7, 0,v)

    #define   GET32VQUAD_AYUV_V(r32)                           _BFGET_(r32,31,24)
    #define   SET32VQUAD_AYUV_V(r32,v)                         _BFSET_(r32,31,24,v)
    #define   GET16VQUAD_AYUV_V(r16)                           _BFGET_(r16,15, 8)
    #define   SET16VQUAD_AYUV_V(r16,v)                         _BFSET_(r16,15, 8,v)

    #define     w32VQUAD_AYUV                                  {\
            UNSG32 uAYUV_A                                     :  8;\
            UNSG32 uAYUV_Y                                     :  8;\
            UNSG32 uAYUV_U                                     :  8;\
            UNSG32 uAYUV_V                                     :  8;\
          }
    union { UNSG32 u32VQUAD_AYUV;
            struct w32VQUAD_AYUV;
          };
    ///////////////////////////////////////////////////////////
    } SIE_VQUAD;

    typedef union  T32VQUAD_AYUV
          { UNSG32 u32;
            struct w32VQUAD_AYUV;
                 } T32VQUAD_AYUV;
    ///////////////////////////////////////////////////////////

    typedef union  TVQUAD_AYUV
          { UNSG32 u32[1];
            struct {
            struct w32VQUAD_AYUV;
                   };
                 } TVQUAD_AYUV;

    ///////////////////////////////////////////////////////////
     SIGN32 VQUAD_drvrd(SIE_VQUAD *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 VQUAD_drvwr(SIE_VQUAD *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void VQUAD_reset(SIE_VQUAD *p);
     SIGN32 VQUAD_cmp  (SIE_VQUAD *p, SIE_VQUAD *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define VQUAD_check(p,pie,pfx,hLOG) VQUAD_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define VQUAD_print(p,    pfx,hLOG) VQUAD_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: VQUAD
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE FmtCnvt                 biu              (4,2)
///     # # ----------------------------------------------------------
///     @ 0x00000 VLUT                 (W-)
///     # 0x00000 palette              
///               $VQUAD               palette           MEM     [256]
///     @ 0x00400 ccm00                (W-)
///               %signmagn 11 v                         256
///               %%        21         # Stuffing bits...
///     @ 0x00404 ccm01                (W-)
///               %signmagn 11 v                         0
///               %%        21         # Stuffing bits...
///     @ 0x00408 ccm02                (W-)
///               %signmagn 11 v                         0
///               %%        21         # Stuffing bits...
///     @ 0x0040C ccm10                (W-)
///               %signmagn 11 v                         0
///               %%        21         # Stuffing bits...
///     @ 0x00410 ccm11                (W-)
///               %signmagn 11 v                         256
///               %%        21         # Stuffing bits...
///     @ 0x00414 ccm12                (W-)
///               %signmagn 11 v                         0
///               %%        21         # Stuffing bits...
///     @ 0x00418 ccm20                (W-)
///               %signmagn 11 v                         0
///               %%        21         # Stuffing bits...
///     @ 0x0041C ccm21                (W-)
///               %signmagn 11 v                         0
///               %%        21         # Stuffing bits...
///     @ 0x00420 ccm22                (W-)
///               %signmagn 11 v                         256
///               %%        21         # Stuffing bits...
///     @ 0x00424 cca0                 (W-)
///               %signed   13 v                         0
///               %%        19         # Stuffing bits...
///     @ 0x00428 cca1                 (W-)
///               %signed   13 v                         0
///               %%        19         # Stuffing bits...
///     @ 0x0042C cca2                 (W-)
///               %signed   13 v                         0
///               %%        19         # Stuffing bits...
///     @ 0x00430 input                (W-)
///               %unsigned 4  format                    0x3
///                                    : LUT8                      0x0
///                                    : UYVY                      0x1
///                                    : AYUV                      0x2
///                                    : ARGB                      0x3
///                                    : XRGB                      0x4
///                                    : ARGB4444                  0x5
///                                    : ARGB1555                  0x6
///                                    : RGB565                    0x7
///               %unsigned 2  order                     0x0
///                                    : UYVY                      0x0
///                                    : YUYV                      0x1
///                                    : ARGB                      0x0
///                                    : ABGR                      0x1
///                                    : RGBA                      0x2
///                                    : BGRA                      0x3
///               %%        26         # Stuffing bits...
///     @ 0x00434                      (W-)
///     #         # Stuffing bytes...
///               %% 7776
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:    2048B, bits:     176b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_FmtCnvt
#define h_FmtCnvt (){}

    #define     RA_FmtCnvt_VLUT                                0x0000
    #define     RA_FmtCnvt_palette                             0x0000
    ///////////////////////////////////////////////////////////
    #define     RA_FmtCnvt_ccm00                               0x0400

    #define     BA_FmtCnvt_ccm00_v                             0x0400
    #define     B16FmtCnvt_ccm00_v                             0x0400
    #define   LSb32FmtCnvt_ccm00_v                                0
    #define   LSb16FmtCnvt_ccm00_v                                0
    #define       bFmtCnvt_ccm00_v                             11
    #define   MSK32FmtCnvt_ccm00_v                                0x000007FF
    ///////////////////////////////////////////////////////////
    #define     RA_FmtCnvt_ccm01                               0x0404

    #define     BA_FmtCnvt_ccm01_v                             0x0404
    #define     B16FmtCnvt_ccm01_v                             0x0404
    #define   LSb32FmtCnvt_ccm01_v                                0
    #define   LSb16FmtCnvt_ccm01_v                                0
    #define       bFmtCnvt_ccm01_v                             11
    #define   MSK32FmtCnvt_ccm01_v                                0x000007FF
    ///////////////////////////////////////////////////////////
    #define     RA_FmtCnvt_ccm02                               0x0408

    #define     BA_FmtCnvt_ccm02_v                             0x0408
    #define     B16FmtCnvt_ccm02_v                             0x0408
    #define   LSb32FmtCnvt_ccm02_v                                0
    #define   LSb16FmtCnvt_ccm02_v                                0
    #define       bFmtCnvt_ccm02_v                             11
    #define   MSK32FmtCnvt_ccm02_v                                0x000007FF
    ///////////////////////////////////////////////////////////
    #define     RA_FmtCnvt_ccm10                               0x040C

    #define     BA_FmtCnvt_ccm10_v                             0x040C
    #define     B16FmtCnvt_ccm10_v                             0x040C
    #define   LSb32FmtCnvt_ccm10_v                                0
    #define   LSb16FmtCnvt_ccm10_v                                0
    #define       bFmtCnvt_ccm10_v                             11
    #define   MSK32FmtCnvt_ccm10_v                                0x000007FF
    ///////////////////////////////////////////////////////////
    #define     RA_FmtCnvt_ccm11                               0x0410

    #define     BA_FmtCnvt_ccm11_v                             0x0410
    #define     B16FmtCnvt_ccm11_v                             0x0410
    #define   LSb32FmtCnvt_ccm11_v                                0
    #define   LSb16FmtCnvt_ccm11_v                                0
    #define       bFmtCnvt_ccm11_v                             11
    #define   MSK32FmtCnvt_ccm11_v                                0x000007FF
    ///////////////////////////////////////////////////////////
    #define     RA_FmtCnvt_ccm12                               0x0414

    #define     BA_FmtCnvt_ccm12_v                             0x0414
    #define     B16FmtCnvt_ccm12_v                             0x0414
    #define   LSb32FmtCnvt_ccm12_v                                0
    #define   LSb16FmtCnvt_ccm12_v                                0
    #define       bFmtCnvt_ccm12_v                             11
    #define   MSK32FmtCnvt_ccm12_v                                0x000007FF
    ///////////////////////////////////////////////////////////
    #define     RA_FmtCnvt_ccm20                               0x0418

    #define     BA_FmtCnvt_ccm20_v                             0x0418
    #define     B16FmtCnvt_ccm20_v                             0x0418
    #define   LSb32FmtCnvt_ccm20_v                                0
    #define   LSb16FmtCnvt_ccm20_v                                0
    #define       bFmtCnvt_ccm20_v                             11
    #define   MSK32FmtCnvt_ccm20_v                                0x000007FF
    ///////////////////////////////////////////////////////////
    #define     RA_FmtCnvt_ccm21                               0x041C

    #define     BA_FmtCnvt_ccm21_v                             0x041C
    #define     B16FmtCnvt_ccm21_v                             0x041C
    #define   LSb32FmtCnvt_ccm21_v                                0
    #define   LSb16FmtCnvt_ccm21_v                                0
    #define       bFmtCnvt_ccm21_v                             11
    #define   MSK32FmtCnvt_ccm21_v                                0x000007FF
    ///////////////////////////////////////////////////////////
    #define     RA_FmtCnvt_ccm22                               0x0420

    #define     BA_FmtCnvt_ccm22_v                             0x0420
    #define     B16FmtCnvt_ccm22_v                             0x0420
    #define   LSb32FmtCnvt_ccm22_v                                0
    #define   LSb16FmtCnvt_ccm22_v                                0
    #define       bFmtCnvt_ccm22_v                             11
    #define   MSK32FmtCnvt_ccm22_v                                0x000007FF
    ///////////////////////////////////////////////////////////
    #define     RA_FmtCnvt_cca0                                0x0424

    #define     BA_FmtCnvt_cca0_v                              0x0424
    #define     B16FmtCnvt_cca0_v                              0x0424
    #define   LSb32FmtCnvt_cca0_v                                 0
    #define   LSb16FmtCnvt_cca0_v                                 0
    #define       bFmtCnvt_cca0_v                              13
    #define   MSK32FmtCnvt_cca0_v                                 0x00001FFF
    ///////////////////////////////////////////////////////////
    #define     RA_FmtCnvt_cca1                                0x0428

    #define     BA_FmtCnvt_cca1_v                              0x0428
    #define     B16FmtCnvt_cca1_v                              0x0428
    #define   LSb32FmtCnvt_cca1_v                                 0
    #define   LSb16FmtCnvt_cca1_v                                 0
    #define       bFmtCnvt_cca1_v                              13
    #define   MSK32FmtCnvt_cca1_v                                 0x00001FFF
    ///////////////////////////////////////////////////////////
    #define     RA_FmtCnvt_cca2                                0x042C

    #define     BA_FmtCnvt_cca2_v                              0x042C
    #define     B16FmtCnvt_cca2_v                              0x042C
    #define   LSb32FmtCnvt_cca2_v                                 0
    #define   LSb16FmtCnvt_cca2_v                                 0
    #define       bFmtCnvt_cca2_v                              13
    #define   MSK32FmtCnvt_cca2_v                                 0x00001FFF
    ///////////////////////////////////////////////////////////
    #define     RA_FmtCnvt_input                               0x0430

    #define     BA_FmtCnvt_input_format                        0x0430
    #define     B16FmtCnvt_input_format                        0x0430
    #define   LSb32FmtCnvt_input_format                           0
    #define   LSb16FmtCnvt_input_format                           0
    #define       bFmtCnvt_input_format                        4
    #define   MSK32FmtCnvt_input_format                           0x0000000F
    #define        FmtCnvt_input_format_LUT8                                0x0
    #define        FmtCnvt_input_format_UYVY                                0x1
    #define        FmtCnvt_input_format_AYUV                                0x2
    #define        FmtCnvt_input_format_ARGB                                0x3
    #define        FmtCnvt_input_format_XRGB                                0x4
    #define        FmtCnvt_input_format_ARGB4444                            0x5
    #define        FmtCnvt_input_format_ARGB1555                            0x6
    #define        FmtCnvt_input_format_RGB565                              0x7

    #define     BA_FmtCnvt_input_order                         0x0430
    #define     B16FmtCnvt_input_order                         0x0430
    #define   LSb32FmtCnvt_input_order                            4
    #define   LSb16FmtCnvt_input_order                            4
    #define       bFmtCnvt_input_order                         2
    #define   MSK32FmtCnvt_input_order                            0x00000030
    #define        FmtCnvt_input_order_UYVY                                 0x0
    #define        FmtCnvt_input_order_YUYV                                 0x1
    #define        FmtCnvt_input_order_ARGB                                 0x0
    #define        FmtCnvt_input_order_ABGR                                 0x1
    #define        FmtCnvt_input_order_RGBA                                 0x2
    #define        FmtCnvt_input_order_BGRA                                 0x3
    ///////////////////////////////////////////////////////////

    typedef struct SIE_FmtCnvt {
    ///////////////////////////////////////////////////////////
              SIE_VQUAD                                        ie_palette[256];
    ///////////////////////////////////////////////////////////
    #define   GET32FmtCnvt_ccm00_v(r32)                        _BFGET_(r32,10, 0)
    #define   SET32FmtCnvt_ccm00_v(r32,v)                      _BFSET_(r32,10, 0,v)
    #define   GET16FmtCnvt_ccm00_v(r16)                        _BFGET_(r16,10, 0)
    #define   SET16FmtCnvt_ccm00_v(r16,v)                      _BFSET_(r16,10, 0,v)

    #define     w32FmtCnvt_ccm00                               {\
            UNSG32 mccm00_v                                    : 11;\
            UNSG32 RSVDx400_b11                                : 21;\
          }
    union { UNSG32 u32FmtCnvt_ccm00;
            struct w32FmtCnvt_ccm00;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32FmtCnvt_ccm01_v(r32)                        _BFGET_(r32,10, 0)
    #define   SET32FmtCnvt_ccm01_v(r32,v)                      _BFSET_(r32,10, 0,v)
    #define   GET16FmtCnvt_ccm01_v(r16)                        _BFGET_(r16,10, 0)
    #define   SET16FmtCnvt_ccm01_v(r16,v)                      _BFSET_(r16,10, 0,v)

    #define     w32FmtCnvt_ccm01                               {\
            UNSG32 mccm01_v                                    : 11;\
            UNSG32 RSVDx404_b11                                : 21;\
          }
    union { UNSG32 u32FmtCnvt_ccm01;
            struct w32FmtCnvt_ccm01;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32FmtCnvt_ccm02_v(r32)                        _BFGET_(r32,10, 0)
    #define   SET32FmtCnvt_ccm02_v(r32,v)                      _BFSET_(r32,10, 0,v)
    #define   GET16FmtCnvt_ccm02_v(r16)                        _BFGET_(r16,10, 0)
    #define   SET16FmtCnvt_ccm02_v(r16,v)                      _BFSET_(r16,10, 0,v)

    #define     w32FmtCnvt_ccm02                               {\
            UNSG32 mccm02_v                                    : 11;\
            UNSG32 RSVDx408_b11                                : 21;\
          }
    union { UNSG32 u32FmtCnvt_ccm02;
            struct w32FmtCnvt_ccm02;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32FmtCnvt_ccm10_v(r32)                        _BFGET_(r32,10, 0)
    #define   SET32FmtCnvt_ccm10_v(r32,v)                      _BFSET_(r32,10, 0,v)
    #define   GET16FmtCnvt_ccm10_v(r16)                        _BFGET_(r16,10, 0)
    #define   SET16FmtCnvt_ccm10_v(r16,v)                      _BFSET_(r16,10, 0,v)

    #define     w32FmtCnvt_ccm10                               {\
            UNSG32 mccm10_v                                    : 11;\
            UNSG32 RSVDx40C_b11                                : 21;\
          }
    union { UNSG32 u32FmtCnvt_ccm10;
            struct w32FmtCnvt_ccm10;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32FmtCnvt_ccm11_v(r32)                        _BFGET_(r32,10, 0)
    #define   SET32FmtCnvt_ccm11_v(r32,v)                      _BFSET_(r32,10, 0,v)
    #define   GET16FmtCnvt_ccm11_v(r16)                        _BFGET_(r16,10, 0)
    #define   SET16FmtCnvt_ccm11_v(r16,v)                      _BFSET_(r16,10, 0,v)

    #define     w32FmtCnvt_ccm11                               {\
            UNSG32 mccm11_v                                    : 11;\
            UNSG32 RSVDx410_b11                                : 21;\
          }
    union { UNSG32 u32FmtCnvt_ccm11;
            struct w32FmtCnvt_ccm11;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32FmtCnvt_ccm12_v(r32)                        _BFGET_(r32,10, 0)
    #define   SET32FmtCnvt_ccm12_v(r32,v)                      _BFSET_(r32,10, 0,v)
    #define   GET16FmtCnvt_ccm12_v(r16)                        _BFGET_(r16,10, 0)
    #define   SET16FmtCnvt_ccm12_v(r16,v)                      _BFSET_(r16,10, 0,v)

    #define     w32FmtCnvt_ccm12                               {\
            UNSG32 mccm12_v                                    : 11;\
            UNSG32 RSVDx414_b11                                : 21;\
          }
    union { UNSG32 u32FmtCnvt_ccm12;
            struct w32FmtCnvt_ccm12;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32FmtCnvt_ccm20_v(r32)                        _BFGET_(r32,10, 0)
    #define   SET32FmtCnvt_ccm20_v(r32,v)                      _BFSET_(r32,10, 0,v)
    #define   GET16FmtCnvt_ccm20_v(r16)                        _BFGET_(r16,10, 0)
    #define   SET16FmtCnvt_ccm20_v(r16,v)                      _BFSET_(r16,10, 0,v)

    #define     w32FmtCnvt_ccm20                               {\
            UNSG32 mccm20_v                                    : 11;\
            UNSG32 RSVDx418_b11                                : 21;\
          }
    union { UNSG32 u32FmtCnvt_ccm20;
            struct w32FmtCnvt_ccm20;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32FmtCnvt_ccm21_v(r32)                        _BFGET_(r32,10, 0)
    #define   SET32FmtCnvt_ccm21_v(r32,v)                      _BFSET_(r32,10, 0,v)
    #define   GET16FmtCnvt_ccm21_v(r16)                        _BFGET_(r16,10, 0)
    #define   SET16FmtCnvt_ccm21_v(r16,v)                      _BFSET_(r16,10, 0,v)

    #define     w32FmtCnvt_ccm21                               {\
            UNSG32 mccm21_v                                    : 11;\
            UNSG32 RSVDx41C_b11                                : 21;\
          }
    union { UNSG32 u32FmtCnvt_ccm21;
            struct w32FmtCnvt_ccm21;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32FmtCnvt_ccm22_v(r32)                        _BFGET_(r32,10, 0)
    #define   SET32FmtCnvt_ccm22_v(r32,v)                      _BFSET_(r32,10, 0,v)
    #define   GET16FmtCnvt_ccm22_v(r16)                        _BFGET_(r16,10, 0)
    #define   SET16FmtCnvt_ccm22_v(r16,v)                      _BFSET_(r16,10, 0,v)

    #define     w32FmtCnvt_ccm22                               {\
            UNSG32 mccm22_v                                    : 11;\
            UNSG32 RSVDx420_b11                                : 21;\
          }
    union { UNSG32 u32FmtCnvt_ccm22;
            struct w32FmtCnvt_ccm22;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32FmtCnvt_cca0_v(r32)                         _BFGET_(r32,12, 0)
    #define   SET32FmtCnvt_cca0_v(r32,v)                       _BFSET_(r32,12, 0,v)
    #define   GET16FmtCnvt_cca0_v(r16)                         _BFGET_(r16,12, 0)
    #define   SET16FmtCnvt_cca0_v(r16,v)                       _BFSET_(r16,12, 0,v)

    #define     w32FmtCnvt_cca0                                {\
            UNSG32 scca0_v                                     : 13;\
            UNSG32 RSVDx424_b13                                : 19;\
          }
    union { UNSG32 u32FmtCnvt_cca0;
            struct w32FmtCnvt_cca0;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32FmtCnvt_cca1_v(r32)                         _BFGET_(r32,12, 0)
    #define   SET32FmtCnvt_cca1_v(r32,v)                       _BFSET_(r32,12, 0,v)
    #define   GET16FmtCnvt_cca1_v(r16)                         _BFGET_(r16,12, 0)
    #define   SET16FmtCnvt_cca1_v(r16,v)                       _BFSET_(r16,12, 0,v)

    #define     w32FmtCnvt_cca1                                {\
            UNSG32 scca1_v                                     : 13;\
            UNSG32 RSVDx428_b13                                : 19;\
          }
    union { UNSG32 u32FmtCnvt_cca1;
            struct w32FmtCnvt_cca1;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32FmtCnvt_cca2_v(r32)                         _BFGET_(r32,12, 0)
    #define   SET32FmtCnvt_cca2_v(r32,v)                       _BFSET_(r32,12, 0,v)
    #define   GET16FmtCnvt_cca2_v(r16)                         _BFGET_(r16,12, 0)
    #define   SET16FmtCnvt_cca2_v(r16,v)                       _BFSET_(r16,12, 0,v)

    #define     w32FmtCnvt_cca2                                {\
            UNSG32 scca2_v                                     : 13;\
            UNSG32 RSVDx42C_b13                                : 19;\
          }
    union { UNSG32 u32FmtCnvt_cca2;
            struct w32FmtCnvt_cca2;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32FmtCnvt_input_format(r32)                   _BFGET_(r32, 3, 0)
    #define   SET32FmtCnvt_input_format(r32,v)                 _BFSET_(r32, 3, 0,v)
    #define   GET16FmtCnvt_input_format(r16)                   _BFGET_(r16, 3, 0)
    #define   SET16FmtCnvt_input_format(r16,v)                 _BFSET_(r16, 3, 0,v)

    #define   GET32FmtCnvt_input_order(r32)                    _BFGET_(r32, 5, 4)
    #define   SET32FmtCnvt_input_order(r32,v)                  _BFSET_(r32, 5, 4,v)
    #define   GET16FmtCnvt_input_order(r16)                    _BFGET_(r16, 5, 4)
    #define   SET16FmtCnvt_input_order(r16,v)                  _BFSET_(r16, 5, 4,v)

    #define     w32FmtCnvt_input                               {\
            UNSG32 uinput_format                               :  4;\
            UNSG32 uinput_order                                :  2;\
            UNSG32 RSVDx430_b6                                 : 26;\
          }
    union { UNSG32 u32FmtCnvt_input;
            struct w32FmtCnvt_input;
          };
    ///////////////////////////////////////////////////////////
             UNSG8 RSVDx434                                    [972];
    ///////////////////////////////////////////////////////////
    } SIE_FmtCnvt;

    typedef union  T32FmtCnvt_ccm00
          { UNSG32 u32;
            struct w32FmtCnvt_ccm00;
                 } T32FmtCnvt_ccm00;
    typedef union  T32FmtCnvt_ccm01
          { UNSG32 u32;
            struct w32FmtCnvt_ccm01;
                 } T32FmtCnvt_ccm01;
    typedef union  T32FmtCnvt_ccm02
          { UNSG32 u32;
            struct w32FmtCnvt_ccm02;
                 } T32FmtCnvt_ccm02;
    typedef union  T32FmtCnvt_ccm10
          { UNSG32 u32;
            struct w32FmtCnvt_ccm10;
                 } T32FmtCnvt_ccm10;
    typedef union  T32FmtCnvt_ccm11
          { UNSG32 u32;
            struct w32FmtCnvt_ccm11;
                 } T32FmtCnvt_ccm11;
    typedef union  T32FmtCnvt_ccm12
          { UNSG32 u32;
            struct w32FmtCnvt_ccm12;
                 } T32FmtCnvt_ccm12;
    typedef union  T32FmtCnvt_ccm20
          { UNSG32 u32;
            struct w32FmtCnvt_ccm20;
                 } T32FmtCnvt_ccm20;
    typedef union  T32FmtCnvt_ccm21
          { UNSG32 u32;
            struct w32FmtCnvt_ccm21;
                 } T32FmtCnvt_ccm21;
    typedef union  T32FmtCnvt_ccm22
          { UNSG32 u32;
            struct w32FmtCnvt_ccm22;
                 } T32FmtCnvt_ccm22;
    typedef union  T32FmtCnvt_cca0
          { UNSG32 u32;
            struct w32FmtCnvt_cca0;
                 } T32FmtCnvt_cca0;
    typedef union  T32FmtCnvt_cca1
          { UNSG32 u32;
            struct w32FmtCnvt_cca1;
                 } T32FmtCnvt_cca1;
    typedef union  T32FmtCnvt_cca2
          { UNSG32 u32;
            struct w32FmtCnvt_cca2;
                 } T32FmtCnvt_cca2;
    typedef union  T32FmtCnvt_input
          { UNSG32 u32;
            struct w32FmtCnvt_input;
                 } T32FmtCnvt_input;
    ///////////////////////////////////////////////////////////

    typedef union  TFmtCnvt_ccm00
          { UNSG32 u32[1];
            struct {
            struct w32FmtCnvt_ccm00;
                   };
                 } TFmtCnvt_ccm00;
    typedef union  TFmtCnvt_ccm01
          { UNSG32 u32[1];
            struct {
            struct w32FmtCnvt_ccm01;
                   };
                 } TFmtCnvt_ccm01;
    typedef union  TFmtCnvt_ccm02
          { UNSG32 u32[1];
            struct {
            struct w32FmtCnvt_ccm02;
                   };
                 } TFmtCnvt_ccm02;
    typedef union  TFmtCnvt_ccm10
          { UNSG32 u32[1];
            struct {
            struct w32FmtCnvt_ccm10;
                   };
                 } TFmtCnvt_ccm10;
    typedef union  TFmtCnvt_ccm11
          { UNSG32 u32[1];
            struct {
            struct w32FmtCnvt_ccm11;
                   };
                 } TFmtCnvt_ccm11;
    typedef union  TFmtCnvt_ccm12
          { UNSG32 u32[1];
            struct {
            struct w32FmtCnvt_ccm12;
                   };
                 } TFmtCnvt_ccm12;
    typedef union  TFmtCnvt_ccm20
          { UNSG32 u32[1];
            struct {
            struct w32FmtCnvt_ccm20;
                   };
                 } TFmtCnvt_ccm20;
    typedef union  TFmtCnvt_ccm21
          { UNSG32 u32[1];
            struct {
            struct w32FmtCnvt_ccm21;
                   };
                 } TFmtCnvt_ccm21;
    typedef union  TFmtCnvt_ccm22
          { UNSG32 u32[1];
            struct {
            struct w32FmtCnvt_ccm22;
                   };
                 } TFmtCnvt_ccm22;
    typedef union  TFmtCnvt_cca0
          { UNSG32 u32[1];
            struct {
            struct w32FmtCnvt_cca0;
                   };
                 } TFmtCnvt_cca0;
    typedef union  TFmtCnvt_cca1
          { UNSG32 u32[1];
            struct {
            struct w32FmtCnvt_cca1;
                   };
                 } TFmtCnvt_cca1;
    typedef union  TFmtCnvt_cca2
          { UNSG32 u32[1];
            struct {
            struct w32FmtCnvt_cca2;
                   };
                 } TFmtCnvt_cca2;
    typedef union  TFmtCnvt_input
          { UNSG32 u32[1];
            struct {
            struct w32FmtCnvt_input;
                   };
                 } TFmtCnvt_input;

    ///////////////////////////////////////////////////////////
     SIGN32 FmtCnvt_drvrd(SIE_FmtCnvt *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 FmtCnvt_drvwr(SIE_FmtCnvt *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void FmtCnvt_reset(SIE_FmtCnvt *p);
     SIGN32 FmtCnvt_cmp  (SIE_FmtCnvt *p, SIE_FmtCnvt *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define FmtCnvt_check(p,pie,pfx,hLOG) FmtCnvt_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define FmtCnvt_print(p,    pfx,hLOG) FmtCnvt_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: FmtCnvt
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE VPPInputCC              biu              (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///     # 0x00000 mosd                 
///               $FmtCnvt             mosd              REG          
///                                    ###
///                                    * Only LUT, no color-conversion matrix
///                                    ###
///     @ 0x00800                      (P)
///     # 0x00800 ig                   
///               $FmtCnvt             ig                REG          
///                                    ###
///                                    * Only LUT, color-conversion matrix use default values: RGB to ITU709
///                                    * { 47    157    16 }    { 64 }
///                                    * { -25    -85   112 } + { 512 }
///                                    * { 112 -101     -9 }    { 512 }
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:    4096B, bits:     352b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_VPPInputCC
#define h_VPPInputCC (){}

    #define     RA_VPPInputCC_mosd                             0x0000
    ///////////////////////////////////////////////////////////
    #define     RA_VPPInputCC_ig                               0x0800
    ///////////////////////////////////////////////////////////

    typedef struct SIE_VPPInputCC {
    ///////////////////////////////////////////////////////////
              SIE_FmtCnvt                                      ie_mosd;
    ///////////////////////////////////////////////////////////
              SIE_FmtCnvt                                      ie_ig;
    ///////////////////////////////////////////////////////////
    } SIE_VPPInputCC;

    ///////////////////////////////////////////////////////////
     SIGN32 VPPInputCC_drvrd(SIE_VPPInputCC *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 VPPInputCC_drvwr(SIE_VPPInputCC *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void VPPInputCC_reset(SIE_VPPInputCC *p);
     SIGN32 VPPInputCC_cmp  (SIE_VPPInputCC *p, SIE_VPPInputCC *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define VPPInputCC_check(p,pie,pfx,hLOG) VPPInputCC_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define VPPInputCC_print(p,    pfx,hLOG) VPPInputCC_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: VPPInputCC
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE winCFG                  biu              (4,2)
///     # # ----------------------------------------------------------
///     @ 0x00000 LOC                  (P)
///               %unsigned 11 X                         0x0
///               %%        5          # Stuffing bits...
///               %unsigned 11 Y                         0x0
///               %%        5          # Stuffing bits...
///     @ 0x00004 SIZE                 (P)
///               %unsigned 11 X                         0x780
///               %%        5          # Stuffing bits...
///               %unsigned 11 Y                         0x438
///               %%        5          # Stuffing bits...
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       8B, bits:      44b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_winCFG
#define h_winCFG (){}

    #define     RA_winCFG_LOC                                  0x0000

    #define     BA_winCFG_LOC_X                                0x0000
    #define     B16winCFG_LOC_X                                0x0000
    #define   LSb32winCFG_LOC_X                                   0
    #define   LSb16winCFG_LOC_X                                   0
    #define       bwinCFG_LOC_X                                11
    #define   MSK32winCFG_LOC_X                                   0x000007FF

    #define     BA_winCFG_LOC_Y                                0x0002
    #define     B16winCFG_LOC_Y                                0x0002
    #define   LSb32winCFG_LOC_Y                                   16
    #define   LSb16winCFG_LOC_Y                                   0
    #define       bwinCFG_LOC_Y                                11
    #define   MSK32winCFG_LOC_Y                                   0x07FF0000
    ///////////////////////////////////////////////////////////
    #define     RA_winCFG_SIZE                                 0x0004

    #define     BA_winCFG_SIZE_X                               0x0004
    #define     B16winCFG_SIZE_X                               0x0004
    #define   LSb32winCFG_SIZE_X                                  0
    #define   LSb16winCFG_SIZE_X                                  0
    #define       bwinCFG_SIZE_X                               11
    #define   MSK32winCFG_SIZE_X                                  0x000007FF

    #define     BA_winCFG_SIZE_Y                               0x0006
    #define     B16winCFG_SIZE_Y                               0x0006
    #define   LSb32winCFG_SIZE_Y                                  16
    #define   LSb16winCFG_SIZE_Y                                  0
    #define       bwinCFG_SIZE_Y                               11
    #define   MSK32winCFG_SIZE_Y                                  0x07FF0000
    ///////////////////////////////////////////////////////////

    typedef struct SIE_winCFG {
    ///////////////////////////////////////////////////////////
    #define   GET32winCFG_LOC_X(r32)                           _BFGET_(r32,10, 0)
    #define   SET32winCFG_LOC_X(r32,v)                         _BFSET_(r32,10, 0,v)
    #define   GET16winCFG_LOC_X(r16)                           _BFGET_(r16,10, 0)
    #define   SET16winCFG_LOC_X(r16,v)                         _BFSET_(r16,10, 0,v)

    #define   GET32winCFG_LOC_Y(r32)                           _BFGET_(r32,26,16)
    #define   SET32winCFG_LOC_Y(r32,v)                         _BFSET_(r32,26,16,v)
    #define   GET16winCFG_LOC_Y(r16)                           _BFGET_(r16,10, 0)
    #define   SET16winCFG_LOC_Y(r16,v)                         _BFSET_(r16,10, 0,v)

    #define     w32winCFG_LOC                                  {\
            UNSG32 uLOC_X                                      : 11;\
            UNSG32 RSVDx0_b11                                  :  5;\
            UNSG32 uLOC_Y                                      : 11;\
            UNSG32 RSVDx0_b27                                  :  5;\
          }
    union { UNSG32 u32winCFG_LOC;
            struct w32winCFG_LOC;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32winCFG_SIZE_X(r32)                          _BFGET_(r32,10, 0)
    #define   SET32winCFG_SIZE_X(r32,v)                        _BFSET_(r32,10, 0,v)
    #define   GET16winCFG_SIZE_X(r16)                          _BFGET_(r16,10, 0)
    #define   SET16winCFG_SIZE_X(r16,v)                        _BFSET_(r16,10, 0,v)

    #define   GET32winCFG_SIZE_Y(r32)                          _BFGET_(r32,26,16)
    #define   SET32winCFG_SIZE_Y(r32,v)                        _BFSET_(r32,26,16,v)
    #define   GET16winCFG_SIZE_Y(r16)                          _BFGET_(r16,10, 0)
    #define   SET16winCFG_SIZE_Y(r16,v)                        _BFSET_(r16,10, 0,v)

    #define     w32winCFG_SIZE                                 {\
            UNSG32 uSIZE_X                                     : 11;\
            UNSG32 RSVDx4_b11                                  :  5;\
            UNSG32 uSIZE_Y                                     : 11;\
            UNSG32 RSVDx4_b27                                  :  5;\
          }
    union { UNSG32 u32winCFG_SIZE;
            struct w32winCFG_SIZE;
          };
    ///////////////////////////////////////////////////////////
    } SIE_winCFG;

    typedef union  T32winCFG_LOC
          { UNSG32 u32;
            struct w32winCFG_LOC;
                 } T32winCFG_LOC;
    typedef union  T32winCFG_SIZE
          { UNSG32 u32;
            struct w32winCFG_SIZE;
                 } T32winCFG_SIZE;
    ///////////////////////////////////////////////////////////

    typedef union  TwinCFG_LOC
          { UNSG32 u32[1];
            struct {
            struct w32winCFG_LOC;
                   };
                 } TwinCFG_LOC;
    typedef union  TwinCFG_SIZE
          { UNSG32 u32[1];
            struct {
            struct w32winCFG_SIZE;
                   };
                 } TwinCFG_SIZE;

    ///////////////////////////////////////////////////////////
     SIGN32 winCFG_drvrd(SIE_winCFG *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 winCFG_drvwr(SIE_winCFG *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void winCFG_reset(SIE_winCFG *p);
     SIGN32 winCFG_cmp  (SIE_winCFG *p, SIE_winCFG *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define winCFG_check(p,pie,pfx,hLOG) winCFG_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define winCFG_print(p,    pfx,hLOG) winCFG_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: winCFG
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE PlaneOverlay            biu              (4,2)
///     # # ----------------------------------------------------------
///     @ 0x00000 input                (P)
///               %unsigned 11 X                         0x780
///               %unsigned 5  cropLeft                  0x0
///               %unsigned 11 Y                         0x438
///               %unsigned 4  cropTop                   0x0
///                                    ###
///                                    * Input (from dHub or Scaler) resolution and cropping
///                                    ###
///               %unsigned 1  rule                      0x1
///                                    : premult                   0x1
///                                    : nonpremult                0x0
///                                                 ###
///                                                 * If alpha is pre-multiplied for input color
///                                                 ###
///     @ 0x00004                      (P)
///     # 0x00004 window               
///               $winCFG              window            REG          
///                                    ###
///                                    * Valid window on screen
///                                    ###
///     @ 0x0000C cfg                  (W-)
///               %unsigned 9  GA                        0x100
///                                    ###
///                                    * Global alpha (0~256)
///                                    * 0 : transparent
///                                    * 256 : opaque
///                                    ###
///               %%        23         # Stuffing bits...
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:      16B, bits:      85b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_PlaneOverlay
#define h_PlaneOverlay (){}

    #define     RA_PlaneOverlay_input                          0x0000

    #define     BA_PlaneOverlay_input_X                        0x0000
    #define     B16PlaneOverlay_input_X                        0x0000
    #define   LSb32PlaneOverlay_input_X                           0
    #define   LSb16PlaneOverlay_input_X                           0
    #define       bPlaneOverlay_input_X                        11
    #define   MSK32PlaneOverlay_input_X                           0x000007FF

    #define     BA_PlaneOverlay_input_cropLeft                 0x0001
    #define     B16PlaneOverlay_input_cropLeft                 0x0000
    #define   LSb32PlaneOverlay_input_cropLeft                    11
    #define   LSb16PlaneOverlay_input_cropLeft                    11
    #define       bPlaneOverlay_input_cropLeft                 5
    #define   MSK32PlaneOverlay_input_cropLeft                    0x0000F800

    #define     BA_PlaneOverlay_input_Y                        0x0002
    #define     B16PlaneOverlay_input_Y                        0x0002
    #define   LSb32PlaneOverlay_input_Y                           16
    #define   LSb16PlaneOverlay_input_Y                           0
    #define       bPlaneOverlay_input_Y                        11
    #define   MSK32PlaneOverlay_input_Y                           0x07FF0000

    #define     BA_PlaneOverlay_input_cropTop                  0x0003
    #define     B16PlaneOverlay_input_cropTop                  0x0002
    #define   LSb32PlaneOverlay_input_cropTop                     27
    #define   LSb16PlaneOverlay_input_cropTop                     11
    #define       bPlaneOverlay_input_cropTop                  4
    #define   MSK32PlaneOverlay_input_cropTop                     0x78000000

    #define     BA_PlaneOverlay_input_rule                     0x0003
    #define     B16PlaneOverlay_input_rule                     0x0002
    #define   LSb32PlaneOverlay_input_rule                        31
    #define   LSb16PlaneOverlay_input_rule                        15
    #define       bPlaneOverlay_input_rule                     1
    #define   MSK32PlaneOverlay_input_rule                        0x80000000
    #define        PlaneOverlay_input_rule_premult                          0x1
    #define        PlaneOverlay_input_rule_nonpremult                       0x0
    ///////////////////////////////////////////////////////////
    #define     RA_PlaneOverlay_window                         0x0004
    ///////////////////////////////////////////////////////////
    #define     RA_PlaneOverlay_cfg                            0x000C

    #define     BA_PlaneOverlay_cfg_GA                         0x000C
    #define     B16PlaneOverlay_cfg_GA                         0x000C
    #define   LSb32PlaneOverlay_cfg_GA                            0
    #define   LSb16PlaneOverlay_cfg_GA                            0
    #define       bPlaneOverlay_cfg_GA                         9
    #define   MSK32PlaneOverlay_cfg_GA                            0x000001FF
    ///////////////////////////////////////////////////////////

    typedef struct SIE_PlaneOverlay {
    ///////////////////////////////////////////////////////////
    #define   GET32PlaneOverlay_input_X(r32)                   _BFGET_(r32,10, 0)
    #define   SET32PlaneOverlay_input_X(r32,v)                 _BFSET_(r32,10, 0,v)
    #define   GET16PlaneOverlay_input_X(r16)                   _BFGET_(r16,10, 0)
    #define   SET16PlaneOverlay_input_X(r16,v)                 _BFSET_(r16,10, 0,v)

    #define   GET32PlaneOverlay_input_cropLeft(r32)            _BFGET_(r32,15,11)
    #define   SET32PlaneOverlay_input_cropLeft(r32,v)          _BFSET_(r32,15,11,v)
    #define   GET16PlaneOverlay_input_cropLeft(r16)            _BFGET_(r16,15,11)
    #define   SET16PlaneOverlay_input_cropLeft(r16,v)          _BFSET_(r16,15,11,v)

    #define   GET32PlaneOverlay_input_Y(r32)                   _BFGET_(r32,26,16)
    #define   SET32PlaneOverlay_input_Y(r32,v)                 _BFSET_(r32,26,16,v)
    #define   GET16PlaneOverlay_input_Y(r16)                   _BFGET_(r16,10, 0)
    #define   SET16PlaneOverlay_input_Y(r16,v)                 _BFSET_(r16,10, 0,v)

    #define   GET32PlaneOverlay_input_cropTop(r32)             _BFGET_(r32,30,27)
    #define   SET32PlaneOverlay_input_cropTop(r32,v)           _BFSET_(r32,30,27,v)
    #define   GET16PlaneOverlay_input_cropTop(r16)             _BFGET_(r16,14,11)
    #define   SET16PlaneOverlay_input_cropTop(r16,v)           _BFSET_(r16,14,11,v)

    #define   GET32PlaneOverlay_input_rule(r32)                _BFGET_(r32,31,31)
    #define   SET32PlaneOverlay_input_rule(r32,v)              _BFSET_(r32,31,31,v)
    #define   GET16PlaneOverlay_input_rule(r16)                _BFGET_(r16,15,15)
    #define   SET16PlaneOverlay_input_rule(r16,v)              _BFSET_(r16,15,15,v)

    #define     w32PlaneOverlay_input                          {\
            UNSG32 uinput_X                                    : 11;\
            UNSG32 uinput_cropLeft                             :  5;\
            UNSG32 uinput_Y                                    : 11;\
            UNSG32 uinput_cropTop                              :  4;\
            UNSG32 uinput_rule                                 :  1;\
          }
    union { UNSG32 u32PlaneOverlay_input;
            struct w32PlaneOverlay_input;
          };
    ///////////////////////////////////////////////////////////
              SIE_winCFG                                       ie_window;
    ///////////////////////////////////////////////////////////
    #define   GET32PlaneOverlay_cfg_GA(r32)                    _BFGET_(r32, 8, 0)
    #define   SET32PlaneOverlay_cfg_GA(r32,v)                  _BFSET_(r32, 8, 0,v)
    #define   GET16PlaneOverlay_cfg_GA(r16)                    _BFGET_(r16, 8, 0)
    #define   SET16PlaneOverlay_cfg_GA(r16,v)                  _BFSET_(r16, 8, 0,v)

    #define     w32PlaneOverlay_cfg                            {\
            UNSG32 ucfg_GA                                     :  9;\
            UNSG32 RSVDxC_b9                                   : 23;\
          }
    union { UNSG32 u32PlaneOverlay_cfg;
            struct w32PlaneOverlay_cfg;
          };
    ///////////////////////////////////////////////////////////
    } SIE_PlaneOverlay;

    typedef union  T32PlaneOverlay_input
          { UNSG32 u32;
            struct w32PlaneOverlay_input;
                 } T32PlaneOverlay_input;
    typedef union  T32PlaneOverlay_cfg
          { UNSG32 u32;
            struct w32PlaneOverlay_cfg;
                 } T32PlaneOverlay_cfg;
    ///////////////////////////////////////////////////////////

    typedef union  TPlaneOverlay_input
          { UNSG32 u32[1];
            struct {
            struct w32PlaneOverlay_input;
                   };
                 } TPlaneOverlay_input;
    typedef union  TPlaneOverlay_cfg
          { UNSG32 u32[1];
            struct {
            struct w32PlaneOverlay_cfg;
                   };
                 } TPlaneOverlay_cfg;

    ///////////////////////////////////////////////////////////
     SIGN32 PlaneOverlay_drvrd(SIE_PlaneOverlay *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 PlaneOverlay_drvwr(SIE_PlaneOverlay *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void PlaneOverlay_reset(SIE_PlaneOverlay *p);
     SIGN32 PlaneOverlay_cmp  (SIE_PlaneOverlay *p, SIE_PlaneOverlay *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define PlaneOverlay_check(p,pie,pfx,hLOG) PlaneOverlay_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define PlaneOverlay_print(p,    pfx,hLOG) PlaneOverlay_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: PlaneOverlay
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE AllPlaneOverlay         biu              (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///     # 0x00000 bg                   
///               $PlaneOverlay        bg                REG          
///     @ 0x00010                      (P)
///     # 0x00010 mv                   
///               $PlaneOverlay        mv                REG          
///     @ 0x00020                      (P)
///     # 0x00020 pip                  
///               $PlaneOverlay        pip               REG          
///     @ 0x00030                      (P)
///     # 0x00030 pg                   
///               $PlaneOverlay        pg                REG          
///     @ 0x00040                      (P)
///     # 0x00040 ig                   
///               $PlaneOverlay        ig                REG          
///     @ 0x00050                      (P)
///     # 0x00050 cursor               
///               $PlaneOverlay        cursor            REG          
///     @ 0x00060                      (P)
///     # 0x00060 mosd                 
///               $PlaneOverlay        mosd              REG          
///                                    ###
///                                    * Note:
///                                    * - Only pg, ig, cursor and mosd enable global-alpha
///                                    * - bg, mv, pip are always solid over (alpha=1)
///                                    ###
///     @ 0x00070 colorKeyEnb          (P)
///               %unsigned 1  Y                         0x0
///               %unsigned 1  U                         0x0
///               %unsigned 1  V                         0x0
///               %%        29         # Stuffing bits...
///     @ 0x00074 colorKeyMin          (P)
///               %unsigned 8  Y                         
///               %unsigned 8  U                         
///               %unsigned 8  V                         
///               %%        8          # Stuffing bits...
///     @ 0x00078 colorKeyMax          (P)
///               %unsigned 8  Y                         
///               %unsigned 8  U                         
///               %unsigned 8  V                         
///               %%        8          # Stuffing bits...
///     @ 0x0007C mvColor              (P)
///               %unsigned 8  Y                         
///               %unsigned 8  U                         
///               %unsigned 8  V                         
///               %%        8          # Stuffing bits...
///     @ 0x00080 pipColor             (P)
///               %unsigned 8  Y                         
///               %unsigned 8  U                         
///               %unsigned 8  V                         
///               %%        8          # Stuffing bits...
///     @ 0x00084 mvSrc                (P)
///               %unsigned 1  sel                       0x0
///                                    : dma                       0x0
///                                    : reg                       0x1
///                                                 ###
///                                                 * Dma : load the mv plane pixel from DMA.
///                                                 * Reg : load the mv plane pixel form mvColor register.
///                                                 ###
///               %%        31         # Stuffing bits...
///     @ 0x00088 pipSrc               (P)
///               %unsigned 1  sel                       0x0
///                                    : dma                       0x0
///                                    : reg                       0x1
///                                                 ###
///                                                 * Dma : load the pip plane pixel from DMA.
///                                                 * Reg : load the pip plane pixel form mvColor register.
///                                                 ###
///               %%        31         # Stuffing bits...
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:     140B, bits:     696b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_AllPlaneOverlay
#define h_AllPlaneOverlay (){}

    #define     RA_AllPlaneOverlay_bg                          0x0000
    ///////////////////////////////////////////////////////////
    #define     RA_AllPlaneOverlay_mv                          0x0010
    ///////////////////////////////////////////////////////////
    #define     RA_AllPlaneOverlay_pip                         0x0020
    ///////////////////////////////////////////////////////////
    #define     RA_AllPlaneOverlay_pg                          0x0030
    ///////////////////////////////////////////////////////////
    #define     RA_AllPlaneOverlay_ig                          0x0040
    ///////////////////////////////////////////////////////////
    #define     RA_AllPlaneOverlay_cursor                      0x0050
    ///////////////////////////////////////////////////////////
    #define     RA_AllPlaneOverlay_mosd                        0x0060
    ///////////////////////////////////////////////////////////
    #define     RA_AllPlaneOverlay_colorKeyEnb                 0x0070

    #define     BA_AllPlaneOverlay_colorKeyEnb_Y               0x0070
    #define     B16AllPlaneOverlay_colorKeyEnb_Y               0x0070
    #define   LSb32AllPlaneOverlay_colorKeyEnb_Y                  0
    #define   LSb16AllPlaneOverlay_colorKeyEnb_Y                  0
    #define       bAllPlaneOverlay_colorKeyEnb_Y               1
    #define   MSK32AllPlaneOverlay_colorKeyEnb_Y                  0x00000001

    #define     BA_AllPlaneOverlay_colorKeyEnb_U               0x0070
    #define     B16AllPlaneOverlay_colorKeyEnb_U               0x0070
    #define   LSb32AllPlaneOverlay_colorKeyEnb_U                  1
    #define   LSb16AllPlaneOverlay_colorKeyEnb_U                  1
    #define       bAllPlaneOverlay_colorKeyEnb_U               1
    #define   MSK32AllPlaneOverlay_colorKeyEnb_U                  0x00000002

    #define     BA_AllPlaneOverlay_colorKeyEnb_V               0x0070
    #define     B16AllPlaneOverlay_colorKeyEnb_V               0x0070
    #define   LSb32AllPlaneOverlay_colorKeyEnb_V                  2
    #define   LSb16AllPlaneOverlay_colorKeyEnb_V                  2
    #define       bAllPlaneOverlay_colorKeyEnb_V               1
    #define   MSK32AllPlaneOverlay_colorKeyEnb_V                  0x00000004
    ///////////////////////////////////////////////////////////
    #define     RA_AllPlaneOverlay_colorKeyMin                 0x0074

    #define     BA_AllPlaneOverlay_colorKeyMin_Y               0x0074
    #define     B16AllPlaneOverlay_colorKeyMin_Y               0x0074
    #define   LSb32AllPlaneOverlay_colorKeyMin_Y                  0
    #define   LSb16AllPlaneOverlay_colorKeyMin_Y                  0
    #define       bAllPlaneOverlay_colorKeyMin_Y               8
    #define   MSK32AllPlaneOverlay_colorKeyMin_Y                  0x000000FF

    #define     BA_AllPlaneOverlay_colorKeyMin_U               0x0075
    #define     B16AllPlaneOverlay_colorKeyMin_U               0x0074
    #define   LSb32AllPlaneOverlay_colorKeyMin_U                  8
    #define   LSb16AllPlaneOverlay_colorKeyMin_U                  8
    #define       bAllPlaneOverlay_colorKeyMin_U               8
    #define   MSK32AllPlaneOverlay_colorKeyMin_U                  0x0000FF00

    #define     BA_AllPlaneOverlay_colorKeyMin_V               0x0076
    #define     B16AllPlaneOverlay_colorKeyMin_V               0x0076
    #define   LSb32AllPlaneOverlay_colorKeyMin_V                  16
    #define   LSb16AllPlaneOverlay_colorKeyMin_V                  0
    #define       bAllPlaneOverlay_colorKeyMin_V               8
    #define   MSK32AllPlaneOverlay_colorKeyMin_V                  0x00FF0000
    ///////////////////////////////////////////////////////////
    #define     RA_AllPlaneOverlay_colorKeyMax                 0x0078

    #define     BA_AllPlaneOverlay_colorKeyMax_Y               0x0078
    #define     B16AllPlaneOverlay_colorKeyMax_Y               0x0078
    #define   LSb32AllPlaneOverlay_colorKeyMax_Y                  0
    #define   LSb16AllPlaneOverlay_colorKeyMax_Y                  0
    #define       bAllPlaneOverlay_colorKeyMax_Y               8
    #define   MSK32AllPlaneOverlay_colorKeyMax_Y                  0x000000FF

    #define     BA_AllPlaneOverlay_colorKeyMax_U               0x0079
    #define     B16AllPlaneOverlay_colorKeyMax_U               0x0078
    #define   LSb32AllPlaneOverlay_colorKeyMax_U                  8
    #define   LSb16AllPlaneOverlay_colorKeyMax_U                  8
    #define       bAllPlaneOverlay_colorKeyMax_U               8
    #define   MSK32AllPlaneOverlay_colorKeyMax_U                  0x0000FF00

    #define     BA_AllPlaneOverlay_colorKeyMax_V               0x007A
    #define     B16AllPlaneOverlay_colorKeyMax_V               0x007A
    #define   LSb32AllPlaneOverlay_colorKeyMax_V                  16
    #define   LSb16AllPlaneOverlay_colorKeyMax_V                  0
    #define       bAllPlaneOverlay_colorKeyMax_V               8
    #define   MSK32AllPlaneOverlay_colorKeyMax_V                  0x00FF0000
    ///////////////////////////////////////////////////////////
    #define     RA_AllPlaneOverlay_mvColor                     0x007C

    #define     BA_AllPlaneOverlay_mvColor_Y                   0x007C
    #define     B16AllPlaneOverlay_mvColor_Y                   0x007C
    #define   LSb32AllPlaneOverlay_mvColor_Y                      0
    #define   LSb16AllPlaneOverlay_mvColor_Y                      0
    #define       bAllPlaneOverlay_mvColor_Y                   8
    #define   MSK32AllPlaneOverlay_mvColor_Y                      0x000000FF

    #define     BA_AllPlaneOverlay_mvColor_U                   0x007D
    #define     B16AllPlaneOverlay_mvColor_U                   0x007C
    #define   LSb32AllPlaneOverlay_mvColor_U                      8
    #define   LSb16AllPlaneOverlay_mvColor_U                      8
    #define       bAllPlaneOverlay_mvColor_U                   8
    #define   MSK32AllPlaneOverlay_mvColor_U                      0x0000FF00

    #define     BA_AllPlaneOverlay_mvColor_V                   0x007E
    #define     B16AllPlaneOverlay_mvColor_V                   0x007E
    #define   LSb32AllPlaneOverlay_mvColor_V                      16
    #define   LSb16AllPlaneOverlay_mvColor_V                      0
    #define       bAllPlaneOverlay_mvColor_V                   8
    #define   MSK32AllPlaneOverlay_mvColor_V                      0x00FF0000
    ///////////////////////////////////////////////////////////
    #define     RA_AllPlaneOverlay_pipColor                    0x0080

    #define     BA_AllPlaneOverlay_pipColor_Y                  0x0080
    #define     B16AllPlaneOverlay_pipColor_Y                  0x0080
    #define   LSb32AllPlaneOverlay_pipColor_Y                     0
    #define   LSb16AllPlaneOverlay_pipColor_Y                     0
    #define       bAllPlaneOverlay_pipColor_Y                  8
    #define   MSK32AllPlaneOverlay_pipColor_Y                     0x000000FF

    #define     BA_AllPlaneOverlay_pipColor_U                  0x0081
    #define     B16AllPlaneOverlay_pipColor_U                  0x0080
    #define   LSb32AllPlaneOverlay_pipColor_U                     8
    #define   LSb16AllPlaneOverlay_pipColor_U                     8
    #define       bAllPlaneOverlay_pipColor_U                  8
    #define   MSK32AllPlaneOverlay_pipColor_U                     0x0000FF00

    #define     BA_AllPlaneOverlay_pipColor_V                  0x0082
    #define     B16AllPlaneOverlay_pipColor_V                  0x0082
    #define   LSb32AllPlaneOverlay_pipColor_V                     16
    #define   LSb16AllPlaneOverlay_pipColor_V                     0
    #define       bAllPlaneOverlay_pipColor_V                  8
    #define   MSK32AllPlaneOverlay_pipColor_V                     0x00FF0000
    ///////////////////////////////////////////////////////////
    #define     RA_AllPlaneOverlay_mvSrc                       0x0084

    #define     BA_AllPlaneOverlay_mvSrc_sel                   0x0084
    #define     B16AllPlaneOverlay_mvSrc_sel                   0x0084
    #define   LSb32AllPlaneOverlay_mvSrc_sel                      0
    #define   LSb16AllPlaneOverlay_mvSrc_sel                      0
    #define       bAllPlaneOverlay_mvSrc_sel                   1
    #define   MSK32AllPlaneOverlay_mvSrc_sel                      0x00000001
    #define        AllPlaneOverlay_mvSrc_sel_dma                            0x0
    #define        AllPlaneOverlay_mvSrc_sel_reg                            0x1
    ///////////////////////////////////////////////////////////
    #define     RA_AllPlaneOverlay_pipSrc                      0x0088

    #define     BA_AllPlaneOverlay_pipSrc_sel                  0x0088
    #define     B16AllPlaneOverlay_pipSrc_sel                  0x0088
    #define   LSb32AllPlaneOverlay_pipSrc_sel                     0
    #define   LSb16AllPlaneOverlay_pipSrc_sel                     0
    #define       bAllPlaneOverlay_pipSrc_sel                  1
    #define   MSK32AllPlaneOverlay_pipSrc_sel                     0x00000001
    #define        AllPlaneOverlay_pipSrc_sel_dma                           0x0
    #define        AllPlaneOverlay_pipSrc_sel_reg                           0x1
    ///////////////////////////////////////////////////////////

    typedef struct SIE_AllPlaneOverlay {
    ///////////////////////////////////////////////////////////
              SIE_PlaneOverlay                                 ie_bg;
    ///////////////////////////////////////////////////////////
              SIE_PlaneOverlay                                 ie_mv;
    ///////////////////////////////////////////////////////////
              SIE_PlaneOverlay                                 ie_pip;
    ///////////////////////////////////////////////////////////
              SIE_PlaneOverlay                                 ie_pg;
    ///////////////////////////////////////////////////////////
              SIE_PlaneOverlay                                 ie_ig;
    ///////////////////////////////////////////////////////////
              SIE_PlaneOverlay                                 ie_cursor;
    ///////////////////////////////////////////////////////////
              SIE_PlaneOverlay                                 ie_mosd;
    ///////////////////////////////////////////////////////////
    #define   GET32AllPlaneOverlay_colorKeyEnb_Y(r32)          _BFGET_(r32, 0, 0)
    #define   SET32AllPlaneOverlay_colorKeyEnb_Y(r32,v)        _BFSET_(r32, 0, 0,v)
    #define   GET16AllPlaneOverlay_colorKeyEnb_Y(r16)          _BFGET_(r16, 0, 0)
    #define   SET16AllPlaneOverlay_colorKeyEnb_Y(r16,v)        _BFSET_(r16, 0, 0,v)

    #define   GET32AllPlaneOverlay_colorKeyEnb_U(r32)          _BFGET_(r32, 1, 1)
    #define   SET32AllPlaneOverlay_colorKeyEnb_U(r32,v)        _BFSET_(r32, 1, 1,v)
    #define   GET16AllPlaneOverlay_colorKeyEnb_U(r16)          _BFGET_(r16, 1, 1)
    #define   SET16AllPlaneOverlay_colorKeyEnb_U(r16,v)        _BFSET_(r16, 1, 1,v)

    #define   GET32AllPlaneOverlay_colorKeyEnb_V(r32)          _BFGET_(r32, 2, 2)
    #define   SET32AllPlaneOverlay_colorKeyEnb_V(r32,v)        _BFSET_(r32, 2, 2,v)
    #define   GET16AllPlaneOverlay_colorKeyEnb_V(r16)          _BFGET_(r16, 2, 2)
    #define   SET16AllPlaneOverlay_colorKeyEnb_V(r16,v)        _BFSET_(r16, 2, 2,v)

    #define     w32AllPlaneOverlay_colorKeyEnb                 {\
            UNSG32 ucolorKeyEnb_Y                              :  1;\
            UNSG32 ucolorKeyEnb_U                              :  1;\
            UNSG32 ucolorKeyEnb_V                              :  1;\
            UNSG32 RSVDx70_b3                                  : 29;\
          }
    union { UNSG32 u32AllPlaneOverlay_colorKeyEnb;
            struct w32AllPlaneOverlay_colorKeyEnb;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32AllPlaneOverlay_colorKeyMin_Y(r32)          _BFGET_(r32, 7, 0)
    #define   SET32AllPlaneOverlay_colorKeyMin_Y(r32,v)        _BFSET_(r32, 7, 0,v)
    #define   GET16AllPlaneOverlay_colorKeyMin_Y(r16)          _BFGET_(r16, 7, 0)
    #define   SET16AllPlaneOverlay_colorKeyMin_Y(r16,v)        _BFSET_(r16, 7, 0,v)

    #define   GET32AllPlaneOverlay_colorKeyMin_U(r32)          _BFGET_(r32,15, 8)
    #define   SET32AllPlaneOverlay_colorKeyMin_U(r32,v)        _BFSET_(r32,15, 8,v)
    #define   GET16AllPlaneOverlay_colorKeyMin_U(r16)          _BFGET_(r16,15, 8)
    #define   SET16AllPlaneOverlay_colorKeyMin_U(r16,v)        _BFSET_(r16,15, 8,v)

    #define   GET32AllPlaneOverlay_colorKeyMin_V(r32)          _BFGET_(r32,23,16)
    #define   SET32AllPlaneOverlay_colorKeyMin_V(r32,v)        _BFSET_(r32,23,16,v)
    #define   GET16AllPlaneOverlay_colorKeyMin_V(r16)          _BFGET_(r16, 7, 0)
    #define   SET16AllPlaneOverlay_colorKeyMin_V(r16,v)        _BFSET_(r16, 7, 0,v)

    #define     w32AllPlaneOverlay_colorKeyMin                 {\
            UNSG32 ucolorKeyMin_Y                              :  8;\
            UNSG32 ucolorKeyMin_U                              :  8;\
            UNSG32 ucolorKeyMin_V                              :  8;\
            UNSG32 RSVDx74_b24                                 :  8;\
          }
    union { UNSG32 u32AllPlaneOverlay_colorKeyMin;
            struct w32AllPlaneOverlay_colorKeyMin;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32AllPlaneOverlay_colorKeyMax_Y(r32)          _BFGET_(r32, 7, 0)
    #define   SET32AllPlaneOverlay_colorKeyMax_Y(r32,v)        _BFSET_(r32, 7, 0,v)
    #define   GET16AllPlaneOverlay_colorKeyMax_Y(r16)          _BFGET_(r16, 7, 0)
    #define   SET16AllPlaneOverlay_colorKeyMax_Y(r16,v)        _BFSET_(r16, 7, 0,v)

    #define   GET32AllPlaneOverlay_colorKeyMax_U(r32)          _BFGET_(r32,15, 8)
    #define   SET32AllPlaneOverlay_colorKeyMax_U(r32,v)        _BFSET_(r32,15, 8,v)
    #define   GET16AllPlaneOverlay_colorKeyMax_U(r16)          _BFGET_(r16,15, 8)
    #define   SET16AllPlaneOverlay_colorKeyMax_U(r16,v)        _BFSET_(r16,15, 8,v)

    #define   GET32AllPlaneOverlay_colorKeyMax_V(r32)          _BFGET_(r32,23,16)
    #define   SET32AllPlaneOverlay_colorKeyMax_V(r32,v)        _BFSET_(r32,23,16,v)
    #define   GET16AllPlaneOverlay_colorKeyMax_V(r16)          _BFGET_(r16, 7, 0)
    #define   SET16AllPlaneOverlay_colorKeyMax_V(r16,v)        _BFSET_(r16, 7, 0,v)

    #define     w32AllPlaneOverlay_colorKeyMax                 {\
            UNSG32 ucolorKeyMax_Y                              :  8;\
            UNSG32 ucolorKeyMax_U                              :  8;\
            UNSG32 ucolorKeyMax_V                              :  8;\
            UNSG32 RSVDx78_b24                                 :  8;\
          }
    union { UNSG32 u32AllPlaneOverlay_colorKeyMax;
            struct w32AllPlaneOverlay_colorKeyMax;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32AllPlaneOverlay_mvColor_Y(r32)              _BFGET_(r32, 7, 0)
    #define   SET32AllPlaneOverlay_mvColor_Y(r32,v)            _BFSET_(r32, 7, 0,v)
    #define   GET16AllPlaneOverlay_mvColor_Y(r16)              _BFGET_(r16, 7, 0)
    #define   SET16AllPlaneOverlay_mvColor_Y(r16,v)            _BFSET_(r16, 7, 0,v)

    #define   GET32AllPlaneOverlay_mvColor_U(r32)              _BFGET_(r32,15, 8)
    #define   SET32AllPlaneOverlay_mvColor_U(r32,v)            _BFSET_(r32,15, 8,v)
    #define   GET16AllPlaneOverlay_mvColor_U(r16)              _BFGET_(r16,15, 8)
    #define   SET16AllPlaneOverlay_mvColor_U(r16,v)            _BFSET_(r16,15, 8,v)

    #define   GET32AllPlaneOverlay_mvColor_V(r32)              _BFGET_(r32,23,16)
    #define   SET32AllPlaneOverlay_mvColor_V(r32,v)            _BFSET_(r32,23,16,v)
    #define   GET16AllPlaneOverlay_mvColor_V(r16)              _BFGET_(r16, 7, 0)
    #define   SET16AllPlaneOverlay_mvColor_V(r16,v)            _BFSET_(r16, 7, 0,v)

    #define     w32AllPlaneOverlay_mvColor                     {\
            UNSG32 umvColor_Y                                  :  8;\
            UNSG32 umvColor_U                                  :  8;\
            UNSG32 umvColor_V                                  :  8;\
            UNSG32 RSVDx7C_b24                                 :  8;\
          }
    union { UNSG32 u32AllPlaneOverlay_mvColor;
            struct w32AllPlaneOverlay_mvColor;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32AllPlaneOverlay_pipColor_Y(r32)             _BFGET_(r32, 7, 0)
    #define   SET32AllPlaneOverlay_pipColor_Y(r32,v)           _BFSET_(r32, 7, 0,v)
    #define   GET16AllPlaneOverlay_pipColor_Y(r16)             _BFGET_(r16, 7, 0)
    #define   SET16AllPlaneOverlay_pipColor_Y(r16,v)           _BFSET_(r16, 7, 0,v)

    #define   GET32AllPlaneOverlay_pipColor_U(r32)             _BFGET_(r32,15, 8)
    #define   SET32AllPlaneOverlay_pipColor_U(r32,v)           _BFSET_(r32,15, 8,v)
    #define   GET16AllPlaneOverlay_pipColor_U(r16)             _BFGET_(r16,15, 8)
    #define   SET16AllPlaneOverlay_pipColor_U(r16,v)           _BFSET_(r16,15, 8,v)

    #define   GET32AllPlaneOverlay_pipColor_V(r32)             _BFGET_(r32,23,16)
    #define   SET32AllPlaneOverlay_pipColor_V(r32,v)           _BFSET_(r32,23,16,v)
    #define   GET16AllPlaneOverlay_pipColor_V(r16)             _BFGET_(r16, 7, 0)
    #define   SET16AllPlaneOverlay_pipColor_V(r16,v)           _BFSET_(r16, 7, 0,v)

    #define     w32AllPlaneOverlay_pipColor                    {\
            UNSG32 upipColor_Y                                 :  8;\
            UNSG32 upipColor_U                                 :  8;\
            UNSG32 upipColor_V                                 :  8;\
            UNSG32 RSVDx80_b24                                 :  8;\
          }
    union { UNSG32 u32AllPlaneOverlay_pipColor;
            struct w32AllPlaneOverlay_pipColor;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32AllPlaneOverlay_mvSrc_sel(r32)              _BFGET_(r32, 0, 0)
    #define   SET32AllPlaneOverlay_mvSrc_sel(r32,v)            _BFSET_(r32, 0, 0,v)
    #define   GET16AllPlaneOverlay_mvSrc_sel(r16)              _BFGET_(r16, 0, 0)
    #define   SET16AllPlaneOverlay_mvSrc_sel(r16,v)            _BFSET_(r16, 0, 0,v)

    #define     w32AllPlaneOverlay_mvSrc                       {\
            UNSG32 umvSrc_sel                                  :  1;\
            UNSG32 RSVDx84_b1                                  : 31;\
          }
    union { UNSG32 u32AllPlaneOverlay_mvSrc;
            struct w32AllPlaneOverlay_mvSrc;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32AllPlaneOverlay_pipSrc_sel(r32)             _BFGET_(r32, 0, 0)
    #define   SET32AllPlaneOverlay_pipSrc_sel(r32,v)           _BFSET_(r32, 0, 0,v)
    #define   GET16AllPlaneOverlay_pipSrc_sel(r16)             _BFGET_(r16, 0, 0)
    #define   SET16AllPlaneOverlay_pipSrc_sel(r16,v)           _BFSET_(r16, 0, 0,v)

    #define     w32AllPlaneOverlay_pipSrc                      {\
            UNSG32 upipSrc_sel                                 :  1;\
            UNSG32 RSVDx88_b1                                  : 31;\
          }
    union { UNSG32 u32AllPlaneOverlay_pipSrc;
            struct w32AllPlaneOverlay_pipSrc;
          };
    ///////////////////////////////////////////////////////////
    } SIE_AllPlaneOverlay;

    typedef union  T32AllPlaneOverlay_colorKeyEnb
          { UNSG32 u32;
            struct w32AllPlaneOverlay_colorKeyEnb;
                 } T32AllPlaneOverlay_colorKeyEnb;
    typedef union  T32AllPlaneOverlay_colorKeyMin
          { UNSG32 u32;
            struct w32AllPlaneOverlay_colorKeyMin;
                 } T32AllPlaneOverlay_colorKeyMin;
    typedef union  T32AllPlaneOverlay_colorKeyMax
          { UNSG32 u32;
            struct w32AllPlaneOverlay_colorKeyMax;
                 } T32AllPlaneOverlay_colorKeyMax;
    typedef union  T32AllPlaneOverlay_mvColor
          { UNSG32 u32;
            struct w32AllPlaneOverlay_mvColor;
                 } T32AllPlaneOverlay_mvColor;
    typedef union  T32AllPlaneOverlay_pipColor
          { UNSG32 u32;
            struct w32AllPlaneOverlay_pipColor;
                 } T32AllPlaneOverlay_pipColor;
    typedef union  T32AllPlaneOverlay_mvSrc
          { UNSG32 u32;
            struct w32AllPlaneOverlay_mvSrc;
                 } T32AllPlaneOverlay_mvSrc;
    typedef union  T32AllPlaneOverlay_pipSrc
          { UNSG32 u32;
            struct w32AllPlaneOverlay_pipSrc;
                 } T32AllPlaneOverlay_pipSrc;
    ///////////////////////////////////////////////////////////

    typedef union  TAllPlaneOverlay_colorKeyEnb
          { UNSG32 u32[1];
            struct {
            struct w32AllPlaneOverlay_colorKeyEnb;
                   };
                 } TAllPlaneOverlay_colorKeyEnb;
    typedef union  TAllPlaneOverlay_colorKeyMin
          { UNSG32 u32[1];
            struct {
            struct w32AllPlaneOverlay_colorKeyMin;
                   };
                 } TAllPlaneOverlay_colorKeyMin;
    typedef union  TAllPlaneOverlay_colorKeyMax
          { UNSG32 u32[1];
            struct {
            struct w32AllPlaneOverlay_colorKeyMax;
                   };
                 } TAllPlaneOverlay_colorKeyMax;
    typedef union  TAllPlaneOverlay_mvColor
          { UNSG32 u32[1];
            struct {
            struct w32AllPlaneOverlay_mvColor;
                   };
                 } TAllPlaneOverlay_mvColor;
    typedef union  TAllPlaneOverlay_pipColor
          { UNSG32 u32[1];
            struct {
            struct w32AllPlaneOverlay_pipColor;
                   };
                 } TAllPlaneOverlay_pipColor;
    typedef union  TAllPlaneOverlay_mvSrc
          { UNSG32 u32[1];
            struct {
            struct w32AllPlaneOverlay_mvSrc;
                   };
                 } TAllPlaneOverlay_mvSrc;
    typedef union  TAllPlaneOverlay_pipSrc
          { UNSG32 u32[1];
            struct {
            struct w32AllPlaneOverlay_pipSrc;
                   };
                 } TAllPlaneOverlay_pipSrc;

    ///////////////////////////////////////////////////////////
     SIGN32 AllPlaneOverlay_drvrd(SIE_AllPlaneOverlay *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 AllPlaneOverlay_drvwr(SIE_AllPlaneOverlay *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void AllPlaneOverlay_reset(SIE_AllPlaneOverlay *p);
     SIGN32 AllPlaneOverlay_cmp  (SIE_AllPlaneOverlay *p, SIE_AllPlaneOverlay *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define AllPlaneOverlay_check(p,pie,pfx,hLOG) AllPlaneOverlay_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define AllPlaneOverlay_print(p,    pfx,hLOG) AllPlaneOverlay_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: AllPlaneOverlay
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE OverlayCFG              biu              (4,2)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///     # 0x00000 cc                   
///               $FmtCnvt             cc                REG          
///                                    ###
///                                    * Only color-conversion matrix, no LUT, no input format/order (always YUV444)
///                                    * HW will be parameterized as 10b precision.
///                                    ###
///     @ 0x00800 screen               (P)
///               %unsigned 11 X                         0x780
///               %%        5          # Stuffing bits...
///               %unsigned 11 Y                         0x438
///               %%        5          # Stuffing bits...
///     @ 0x00804 background           (P)
///               %unsigned 8  Y                         
///               %unsigned 8  U                         
///               %unsigned 8  V                         
///               %%        8          # Stuffing bits...
///     @ 0x00808 mask                 (P)
///               %unsigned 1  bg                        0x0
///               %unsigned 1  mv                        0x1
///               %unsigned 1  pip                       0x0
///               %unsigned 1  pg                        0x0
///               %unsigned 1  ig                        0x0
///               %unsigned 1  cursor                    0x0
///               %unsigned 1  mosd                      0x0
///               %%        25         # Stuffing bits...
///     @ 0x0080C cfg                  (P)
///               %unsigned 1  progressiveOut            0x1
///               %unsigned 1  progressiveOutSel         
///                                    : XYZ422                    0x0
///                                    : XYZ444                    0x1
///                                                 ###
///                                                 * Output format selection
///                                                 ###
///               %unsigned 1  interlaceOut              0x0
///               %unsigned 2  feedbackSel               
///                                    : up2pip                    0x0
///                                    : up2pg                     0x1
///                                    : up2ig                     0x2
///                                    : up2mosd                   0x3
///               %%        27         # Stuffing bits...
///     @ 0x00810 start                (P-)
///               %unsigned 1  enb                       0x0
///               %%        31         # Stuffing bits...
///     @ 0x00814                      (W-)
///     #         # Stuffing bytes...
///               %% 8032
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:    3072B, bits:     235b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_OverlayCFG
#define h_OverlayCFG (){}

    #define     RA_OverlayCFG_cc                               0x0000
    ///////////////////////////////////////////////////////////
    #define     RA_OverlayCFG_screen                           0x0800

    #define     BA_OverlayCFG_screen_X                         0x0800
    #define     B16OverlayCFG_screen_X                         0x0800
    #define   LSb32OverlayCFG_screen_X                            0
    #define   LSb16OverlayCFG_screen_X                            0
    #define       bOverlayCFG_screen_X                         11
    #define   MSK32OverlayCFG_screen_X                            0x000007FF

    #define     BA_OverlayCFG_screen_Y                         0x0802
    #define     B16OverlayCFG_screen_Y                         0x0802
    #define   LSb32OverlayCFG_screen_Y                            16
    #define   LSb16OverlayCFG_screen_Y                            0
    #define       bOverlayCFG_screen_Y                         11
    #define   MSK32OverlayCFG_screen_Y                            0x07FF0000
    ///////////////////////////////////////////////////////////
    #define     RA_OverlayCFG_background                       0x0804

    #define     BA_OverlayCFG_background_Y                     0x0804
    #define     B16OverlayCFG_background_Y                     0x0804
    #define   LSb32OverlayCFG_background_Y                        0
    #define   LSb16OverlayCFG_background_Y                        0
    #define       bOverlayCFG_background_Y                     8
    #define   MSK32OverlayCFG_background_Y                        0x000000FF

    #define     BA_OverlayCFG_background_U                     0x0805
    #define     B16OverlayCFG_background_U                     0x0804
    #define   LSb32OverlayCFG_background_U                        8
    #define   LSb16OverlayCFG_background_U                        8
    #define       bOverlayCFG_background_U                     8
    #define   MSK32OverlayCFG_background_U                        0x0000FF00

    #define     BA_OverlayCFG_background_V                     0x0806
    #define     B16OverlayCFG_background_V                     0x0806
    #define   LSb32OverlayCFG_background_V                        16
    #define   LSb16OverlayCFG_background_V                        0
    #define       bOverlayCFG_background_V                     8
    #define   MSK32OverlayCFG_background_V                        0x00FF0000
    ///////////////////////////////////////////////////////////
    #define     RA_OverlayCFG_mask                             0x0808

    #define     BA_OverlayCFG_mask_bg                          0x0808
    #define     B16OverlayCFG_mask_bg                          0x0808
    #define   LSb32OverlayCFG_mask_bg                             0
    #define   LSb16OverlayCFG_mask_bg                             0
    #define       bOverlayCFG_mask_bg                          1
    #define   MSK32OverlayCFG_mask_bg                             0x00000001

    #define     BA_OverlayCFG_mask_mv                          0x0808
    #define     B16OverlayCFG_mask_mv                          0x0808
    #define   LSb32OverlayCFG_mask_mv                             1
    #define   LSb16OverlayCFG_mask_mv                             1
    #define       bOverlayCFG_mask_mv                          1
    #define   MSK32OverlayCFG_mask_mv                             0x00000002

    #define     BA_OverlayCFG_mask_pip                         0x0808
    #define     B16OverlayCFG_mask_pip                         0x0808
    #define   LSb32OverlayCFG_mask_pip                            2
    #define   LSb16OverlayCFG_mask_pip                            2
    #define       bOverlayCFG_mask_pip                         1
    #define   MSK32OverlayCFG_mask_pip                            0x00000004

    #define     BA_OverlayCFG_mask_pg                          0x0808
    #define     B16OverlayCFG_mask_pg                          0x0808
    #define   LSb32OverlayCFG_mask_pg                             3
    #define   LSb16OverlayCFG_mask_pg                             3
    #define       bOverlayCFG_mask_pg                          1
    #define   MSK32OverlayCFG_mask_pg                             0x00000008

    #define     BA_OverlayCFG_mask_ig                          0x0808
    #define     B16OverlayCFG_mask_ig                          0x0808
    #define   LSb32OverlayCFG_mask_ig                             4
    #define   LSb16OverlayCFG_mask_ig                             4
    #define       bOverlayCFG_mask_ig                          1
    #define   MSK32OverlayCFG_mask_ig                             0x00000010

    #define     BA_OverlayCFG_mask_cursor                      0x0808
    #define     B16OverlayCFG_mask_cursor                      0x0808
    #define   LSb32OverlayCFG_mask_cursor                         5
    #define   LSb16OverlayCFG_mask_cursor                         5
    #define       bOverlayCFG_mask_cursor                      1
    #define   MSK32OverlayCFG_mask_cursor                         0x00000020

    #define     BA_OverlayCFG_mask_mosd                        0x0808
    #define     B16OverlayCFG_mask_mosd                        0x0808
    #define   LSb32OverlayCFG_mask_mosd                           6
    #define   LSb16OverlayCFG_mask_mosd                           6
    #define       bOverlayCFG_mask_mosd                        1
    #define   MSK32OverlayCFG_mask_mosd                           0x00000040
    ///////////////////////////////////////////////////////////
    #define     RA_OverlayCFG_cfg                              0x080C

    #define     BA_OverlayCFG_cfg_progressiveOut               0x080C
    #define     B16OverlayCFG_cfg_progressiveOut               0x080C
    #define   LSb32OverlayCFG_cfg_progressiveOut                  0
    #define   LSb16OverlayCFG_cfg_progressiveOut                  0
    #define       bOverlayCFG_cfg_progressiveOut               1
    #define   MSK32OverlayCFG_cfg_progressiveOut                  0x00000001

    #define     BA_OverlayCFG_cfg_progressiveOutSel            0x080C
    #define     B16OverlayCFG_cfg_progressiveOutSel            0x080C
    #define   LSb32OverlayCFG_cfg_progressiveOutSel               1
    #define   LSb16OverlayCFG_cfg_progressiveOutSel               1
    #define       bOverlayCFG_cfg_progressiveOutSel            1
    #define   MSK32OverlayCFG_cfg_progressiveOutSel               0x00000002
    #define        OverlayCFG_cfg_progressiveOutSel_XYZ422                  0x0
    #define        OverlayCFG_cfg_progressiveOutSel_XYZ444                  0x1

    #define     BA_OverlayCFG_cfg_interlaceOut                 0x080C
    #define     B16OverlayCFG_cfg_interlaceOut                 0x080C
    #define   LSb32OverlayCFG_cfg_interlaceOut                    2
    #define   LSb16OverlayCFG_cfg_interlaceOut                    2
    #define       bOverlayCFG_cfg_interlaceOut                 1
    #define   MSK32OverlayCFG_cfg_interlaceOut                    0x00000004

    #define     BA_OverlayCFG_cfg_feedbackSel                  0x080C
    #define     B16OverlayCFG_cfg_feedbackSel                  0x080C
    #define   LSb32OverlayCFG_cfg_feedbackSel                     3
    #define   LSb16OverlayCFG_cfg_feedbackSel                     3
    #define       bOverlayCFG_cfg_feedbackSel                  2
    #define   MSK32OverlayCFG_cfg_feedbackSel                     0x00000018
    #define        OverlayCFG_cfg_feedbackSel_up2pip                        0x0
    #define        OverlayCFG_cfg_feedbackSel_up2pg                         0x1
    #define        OverlayCFG_cfg_feedbackSel_up2ig                         0x2
    #define        OverlayCFG_cfg_feedbackSel_up2mosd                       0x3
    ///////////////////////////////////////////////////////////
    #define     RA_OverlayCFG_start                            0x0810

    #define     BA_OverlayCFG_start_enb                        0x0810
    #define     B16OverlayCFG_start_enb                        0x0810
    #define   LSb32OverlayCFG_start_enb                           0
    #define   LSb16OverlayCFG_start_enb                           0
    #define       bOverlayCFG_start_enb                        1
    #define   MSK32OverlayCFG_start_enb                           0x00000001
    ///////////////////////////////////////////////////////////

    typedef struct SIE_OverlayCFG {
    ///////////////////////////////////////////////////////////
              SIE_FmtCnvt                                      ie_cc;
    ///////////////////////////////////////////////////////////
    #define   GET32OverlayCFG_screen_X(r32)                    _BFGET_(r32,10, 0)
    #define   SET32OverlayCFG_screen_X(r32,v)                  _BFSET_(r32,10, 0,v)
    #define   GET16OverlayCFG_screen_X(r16)                    _BFGET_(r16,10, 0)
    #define   SET16OverlayCFG_screen_X(r16,v)                  _BFSET_(r16,10, 0,v)

    #define   GET32OverlayCFG_screen_Y(r32)                    _BFGET_(r32,26,16)
    #define   SET32OverlayCFG_screen_Y(r32,v)                  _BFSET_(r32,26,16,v)
    #define   GET16OverlayCFG_screen_Y(r16)                    _BFGET_(r16,10, 0)
    #define   SET16OverlayCFG_screen_Y(r16,v)                  _BFSET_(r16,10, 0,v)

    #define     w32OverlayCFG_screen                           {\
            UNSG32 uscreen_X                                   : 11;\
            UNSG32 RSVDx800_b11                                :  5;\
            UNSG32 uscreen_Y                                   : 11;\
            UNSG32 RSVDx800_b27                                :  5;\
          }
    union { UNSG32 u32OverlayCFG_screen;
            struct w32OverlayCFG_screen;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32OverlayCFG_background_Y(r32)                _BFGET_(r32, 7, 0)
    #define   SET32OverlayCFG_background_Y(r32,v)              _BFSET_(r32, 7, 0,v)
    #define   GET16OverlayCFG_background_Y(r16)                _BFGET_(r16, 7, 0)
    #define   SET16OverlayCFG_background_Y(r16,v)              _BFSET_(r16, 7, 0,v)

    #define   GET32OverlayCFG_background_U(r32)                _BFGET_(r32,15, 8)
    #define   SET32OverlayCFG_background_U(r32,v)              _BFSET_(r32,15, 8,v)
    #define   GET16OverlayCFG_background_U(r16)                _BFGET_(r16,15, 8)
    #define   SET16OverlayCFG_background_U(r16,v)              _BFSET_(r16,15, 8,v)

    #define   GET32OverlayCFG_background_V(r32)                _BFGET_(r32,23,16)
    #define   SET32OverlayCFG_background_V(r32,v)              _BFSET_(r32,23,16,v)
    #define   GET16OverlayCFG_background_V(r16)                _BFGET_(r16, 7, 0)
    #define   SET16OverlayCFG_background_V(r16,v)              _BFSET_(r16, 7, 0,v)

    #define     w32OverlayCFG_background                       {\
            UNSG32 ubackground_Y                               :  8;\
            UNSG32 ubackground_U                               :  8;\
            UNSG32 ubackground_V                               :  8;\
            UNSG32 RSVDx804_b24                                :  8;\
          }
    union { UNSG32 u32OverlayCFG_background;
            struct w32OverlayCFG_background;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32OverlayCFG_mask_bg(r32)                     _BFGET_(r32, 0, 0)
    #define   SET32OverlayCFG_mask_bg(r32,v)                   _BFSET_(r32, 0, 0,v)
    #define   GET16OverlayCFG_mask_bg(r16)                     _BFGET_(r16, 0, 0)
    #define   SET16OverlayCFG_mask_bg(r16,v)                   _BFSET_(r16, 0, 0,v)

    #define   GET32OverlayCFG_mask_mv(r32)                     _BFGET_(r32, 1, 1)
    #define   SET32OverlayCFG_mask_mv(r32,v)                   _BFSET_(r32, 1, 1,v)
    #define   GET16OverlayCFG_mask_mv(r16)                     _BFGET_(r16, 1, 1)
    #define   SET16OverlayCFG_mask_mv(r16,v)                   _BFSET_(r16, 1, 1,v)

    #define   GET32OverlayCFG_mask_pip(r32)                    _BFGET_(r32, 2, 2)
    #define   SET32OverlayCFG_mask_pip(r32,v)                  _BFSET_(r32, 2, 2,v)
    #define   GET16OverlayCFG_mask_pip(r16)                    _BFGET_(r16, 2, 2)
    #define   SET16OverlayCFG_mask_pip(r16,v)                  _BFSET_(r16, 2, 2,v)

    #define   GET32OverlayCFG_mask_pg(r32)                     _BFGET_(r32, 3, 3)
    #define   SET32OverlayCFG_mask_pg(r32,v)                   _BFSET_(r32, 3, 3,v)
    #define   GET16OverlayCFG_mask_pg(r16)                     _BFGET_(r16, 3, 3)
    #define   SET16OverlayCFG_mask_pg(r16,v)                   _BFSET_(r16, 3, 3,v)

    #define   GET32OverlayCFG_mask_ig(r32)                     _BFGET_(r32, 4, 4)
    #define   SET32OverlayCFG_mask_ig(r32,v)                   _BFSET_(r32, 4, 4,v)
    #define   GET16OverlayCFG_mask_ig(r16)                     _BFGET_(r16, 4, 4)
    #define   SET16OverlayCFG_mask_ig(r16,v)                   _BFSET_(r16, 4, 4,v)

    #define   GET32OverlayCFG_mask_cursor(r32)                 _BFGET_(r32, 5, 5)
    #define   SET32OverlayCFG_mask_cursor(r32,v)               _BFSET_(r32, 5, 5,v)
    #define   GET16OverlayCFG_mask_cursor(r16)                 _BFGET_(r16, 5, 5)
    #define   SET16OverlayCFG_mask_cursor(r16,v)               _BFSET_(r16, 5, 5,v)

    #define   GET32OverlayCFG_mask_mosd(r32)                   _BFGET_(r32, 6, 6)
    #define   SET32OverlayCFG_mask_mosd(r32,v)                 _BFSET_(r32, 6, 6,v)
    #define   GET16OverlayCFG_mask_mosd(r16)                   _BFGET_(r16, 6, 6)
    #define   SET16OverlayCFG_mask_mosd(r16,v)                 _BFSET_(r16, 6, 6,v)

    #define     w32OverlayCFG_mask                             {\
            UNSG32 umask_bg                                    :  1;\
            UNSG32 umask_mv                                    :  1;\
            UNSG32 umask_pip                                   :  1;\
            UNSG32 umask_pg                                    :  1;\
            UNSG32 umask_ig                                    :  1;\
            UNSG32 umask_cursor                                :  1;\
            UNSG32 umask_mosd                                  :  1;\
            UNSG32 RSVDx808_b7                                 : 25;\
          }
    union { UNSG32 u32OverlayCFG_mask;
            struct w32OverlayCFG_mask;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32OverlayCFG_cfg_progressiveOut(r32)          _BFGET_(r32, 0, 0)
    #define   SET32OverlayCFG_cfg_progressiveOut(r32,v)        _BFSET_(r32, 0, 0,v)
    #define   GET16OverlayCFG_cfg_progressiveOut(r16)          _BFGET_(r16, 0, 0)
    #define   SET16OverlayCFG_cfg_progressiveOut(r16,v)        _BFSET_(r16, 0, 0,v)

    #define   GET32OverlayCFG_cfg_progressiveOutSel(r32)       _BFGET_(r32, 1, 1)
    #define   SET32OverlayCFG_cfg_progressiveOutSel(r32,v)     _BFSET_(r32, 1, 1,v)
    #define   GET16OverlayCFG_cfg_progressiveOutSel(r16)       _BFGET_(r16, 1, 1)
    #define   SET16OverlayCFG_cfg_progressiveOutSel(r16,v)     _BFSET_(r16, 1, 1,v)

    #define   GET32OverlayCFG_cfg_interlaceOut(r32)            _BFGET_(r32, 2, 2)
    #define   SET32OverlayCFG_cfg_interlaceOut(r32,v)          _BFSET_(r32, 2, 2,v)
    #define   GET16OverlayCFG_cfg_interlaceOut(r16)            _BFGET_(r16, 2, 2)
    #define   SET16OverlayCFG_cfg_interlaceOut(r16,v)          _BFSET_(r16, 2, 2,v)

    #define   GET32OverlayCFG_cfg_feedbackSel(r32)             _BFGET_(r32, 4, 3)
    #define   SET32OverlayCFG_cfg_feedbackSel(r32,v)           _BFSET_(r32, 4, 3,v)
    #define   GET16OverlayCFG_cfg_feedbackSel(r16)             _BFGET_(r16, 4, 3)
    #define   SET16OverlayCFG_cfg_feedbackSel(r16,v)           _BFSET_(r16, 4, 3,v)

    #define     w32OverlayCFG_cfg                              {\
            UNSG32 ucfg_progressiveOut                         :  1;\
            UNSG32 ucfg_progressiveOutSel                      :  1;\
            UNSG32 ucfg_interlaceOut                           :  1;\
            UNSG32 ucfg_feedbackSel                            :  2;\
            UNSG32 RSVDx80C_b5                                 : 27;\
          }
    union { UNSG32 u32OverlayCFG_cfg;
            struct w32OverlayCFG_cfg;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32OverlayCFG_start_enb(r32)                   _BFGET_(r32, 0, 0)
    #define   SET32OverlayCFG_start_enb(r32,v)                 _BFSET_(r32, 0, 0,v)
    #define   GET16OverlayCFG_start_enb(r16)                   _BFGET_(r16, 0, 0)
    #define   SET16OverlayCFG_start_enb(r16,v)                 _BFSET_(r16, 0, 0,v)

    #define     w32OverlayCFG_start                            {\
            UNSG32 ustart_enb                                  :  1;\
            UNSG32 RSVDx810_b1                                 : 31;\
          }
    union { UNSG32 u32OverlayCFG_start;
            struct w32OverlayCFG_start;
          };
    ///////////////////////////////////////////////////////////
             UNSG8 RSVDx814                                    [1004];
    ///////////////////////////////////////////////////////////
    } SIE_OverlayCFG;

    typedef union  T32OverlayCFG_screen
          { UNSG32 u32;
            struct w32OverlayCFG_screen;
                 } T32OverlayCFG_screen;
    typedef union  T32OverlayCFG_background
          { UNSG32 u32;
            struct w32OverlayCFG_background;
                 } T32OverlayCFG_background;
    typedef union  T32OverlayCFG_mask
          { UNSG32 u32;
            struct w32OverlayCFG_mask;
                 } T32OverlayCFG_mask;
    typedef union  T32OverlayCFG_cfg
          { UNSG32 u32;
            struct w32OverlayCFG_cfg;
                 } T32OverlayCFG_cfg;
    typedef union  T32OverlayCFG_start
          { UNSG32 u32;
            struct w32OverlayCFG_start;
                 } T32OverlayCFG_start;
    ///////////////////////////////////////////////////////////

    typedef union  TOverlayCFG_screen
          { UNSG32 u32[1];
            struct {
            struct w32OverlayCFG_screen;
                   };
                 } TOverlayCFG_screen;
    typedef union  TOverlayCFG_background
          { UNSG32 u32[1];
            struct {
            struct w32OverlayCFG_background;
                   };
                 } TOverlayCFG_background;
    typedef union  TOverlayCFG_mask
          { UNSG32 u32[1];
            struct {
            struct w32OverlayCFG_mask;
                   };
                 } TOverlayCFG_mask;
    typedef union  TOverlayCFG_cfg
          { UNSG32 u32[1];
            struct {
            struct w32OverlayCFG_cfg;
                   };
                 } TOverlayCFG_cfg;
    typedef union  TOverlayCFG_start
          { UNSG32 u32[1];
            struct {
            struct w32OverlayCFG_start;
                   };
                 } TOverlayCFG_start;

    ///////////////////////////////////////////////////////////
     SIGN32 OverlayCFG_drvrd(SIE_OverlayCFG *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 OverlayCFG_drvwr(SIE_OverlayCFG *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void OverlayCFG_reset(SIE_OverlayCFG *p);
     SIGN32 OverlayCFG_cmp  (SIE_OverlayCFG *p, SIE_OverlayCFG *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define OverlayCFG_check(p,pie,pfx,hLOG) OverlayCFG_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define OverlayCFG_print(p,    pfx,hLOG) OverlayCFG_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: OverlayCFG
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE VPPOverlayArray         biu              (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///     # 0x00000 cpcb                 
///               $OverlayCFG          cpcb              REG       [2]
///     @ 0x01800                      (P)
///     # 0x01800 planes               
///               $AllPlaneOverlay     planes            REG          
///     @ 0x0188C altOut               (P)
///               %unsigned 1  enb                       0x0
///               %%        31         # Stuffing bits...
///     @ 0x01890                      (W-)
///     #         # Stuffing bytes...
///               %% 7040
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:    7168B, bits:    1167b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_VPPOverlayArray
#define h_VPPOverlayArray (){}

    #define     RA_VPPOverlayArray_cpcb                        0x0000
    ///////////////////////////////////////////////////////////
    #define     RA_VPPOverlayArray_planes                      0x1800
    ///////////////////////////////////////////////////////////
    #define     RA_VPPOverlayArray_altOut                      0x188C

    #define     BA_VPPOverlayArray_altOut_enb                  0x188C
    #define     B16VPPOverlayArray_altOut_enb                  0x188C
    #define   LSb32VPPOverlayArray_altOut_enb                     0
    #define   LSb16VPPOverlayArray_altOut_enb                     0
    #define       bVPPOverlayArray_altOut_enb                  1
    #define   MSK32VPPOverlayArray_altOut_enb                     0x00000001
    ///////////////////////////////////////////////////////////

    typedef struct SIE_VPPOverlayArray {
    ///////////////////////////////////////////////////////////
              SIE_OverlayCFG                                   ie_cpcb[2];
    ///////////////////////////////////////////////////////////
              SIE_AllPlaneOverlay                              ie_planes;
    ///////////////////////////////////////////////////////////
    #define   GET32VPPOverlayArray_altOut_enb(r32)             _BFGET_(r32, 0, 0)
    #define   SET32VPPOverlayArray_altOut_enb(r32,v)           _BFSET_(r32, 0, 0,v)
    #define   GET16VPPOverlayArray_altOut_enb(r16)             _BFGET_(r16, 0, 0)
    #define   SET16VPPOverlayArray_altOut_enb(r16,v)           _BFSET_(r16, 0, 0,v)

    #define     w32VPPOverlayArray_altOut                      {\
            UNSG32 ualtOut_enb                                 :  1;\
            UNSG32 RSVDx188C_b1                                : 31;\
          }
    union { UNSG32 u32VPPOverlayArray_altOut;
            struct w32VPPOverlayArray_altOut;
          };
    ///////////////////////////////////////////////////////////
             UNSG8 RSVDx1890                                   [880];
    ///////////////////////////////////////////////////////////
    } SIE_VPPOverlayArray;

    typedef union  T32VPPOverlayArray_altOut
          { UNSG32 u32;
            struct w32VPPOverlayArray_altOut;
                 } T32VPPOverlayArray_altOut;
    ///////////////////////////////////////////////////////////

    typedef union  TVPPOverlayArray_altOut
          { UNSG32 u32[1];
            struct {
            struct w32VPPOverlayArray_altOut;
                   };
                 } TVPPOverlayArray_altOut;

    ///////////////////////////////////////////////////////////
     SIGN32 VPPOverlayArray_drvrd(SIE_VPPOverlayArray *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 VPPOverlayArray_drvwr(SIE_VPPOverlayArray *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void VPPOverlayArray_reset(SIE_VPPOverlayArray *p);
     SIGN32 VPPOverlayArray_cmp  (SIE_VPPOverlayArray *p, SIE_VPPOverlayArray *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define VPPOverlayArray_check(p,pie,pfx,hLOG) VPPOverlayArray_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define VPPOverlayArray_print(p,    pfx,hLOG) VPPOverlayArray_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: VPPOverlayArray
////////////////////////////////////////////////////////////



#ifdef __cplusplus
  }
#endif
#pragma  pack()

#endif
//////
/// ENDOFFILE: VideoOverlay.h
////////////////////////////////////////////////////////////

