/********************************************************************************
 * 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: sema.h
////////////////////////////////////////////////////////////
#ifndef sema_h
#define sema_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 SemaCell                                 (4,4)
///     ###
///     * Register specification of interface semacounter
///     ###
///     # # ----------------------------------------------------------
///     @ 0x00000 LVL                  (R-)
///               %unsigned 16 consumer                  0x0
///               %unsigned 16 producer                  0x0
///                                    ###
///                                    * Read access the level of consumer and producer counter.
///                                    ###
///     @ 0x00004 THRESH               (P)
///               %unsigned 16 max                       0xF
///                                    ###
///                                    * Defines the max value for level.
///                                    ###
///               %%        16         # Stuffing bits...
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       8B, bits:      48b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_SemaCell
#define h_SemaCell (){}

    #define     RA_SemaCell_LVL                                0x0000

    #define     BA_SemaCell_LVL_consumer                       0x0000
    #define     B16SemaCell_LVL_consumer                       0x0000
    #define   LSb32SemaCell_LVL_consumer                          0
    #define   LSb16SemaCell_LVL_consumer                          0
    #define       bSemaCell_LVL_consumer                       16
    #define   MSK32SemaCell_LVL_consumer                          0x0000FFFF

    #define     BA_SemaCell_LVL_producer                       0x0002
    #define     B16SemaCell_LVL_producer                       0x0002
    #define   LSb32SemaCell_LVL_producer                          16
    #define   LSb16SemaCell_LVL_producer                          0
    #define       bSemaCell_LVL_producer                       16
    #define   MSK32SemaCell_LVL_producer                          0xFFFF0000
    ///////////////////////////////////////////////////////////
    #define     RA_SemaCell_THRESH                             0x0004

    #define     BA_SemaCell_THRESH_max                         0x0004
    #define     B16SemaCell_THRESH_max                         0x0004
    #define   LSb32SemaCell_THRESH_max                            0
    #define   LSb16SemaCell_THRESH_max                            0
    #define       bSemaCell_THRESH_max                         16
    #define   MSK32SemaCell_THRESH_max                            0x0000FFFF
    ///////////////////////////////////////////////////////////

    typedef struct SIE_SemaCell {
    ///////////////////////////////////////////////////////////
    #define   GET32SemaCell_LVL_consumer(r32)                  _BFGET_(r32,15, 0)
    #define   SET32SemaCell_LVL_consumer(r32,v)                _BFSET_(r32,15, 0,v)
    #define   GET16SemaCell_LVL_consumer(r16)                  _BFGET_(r16,15, 0)
    #define   SET16SemaCell_LVL_consumer(r16,v)                _BFSET_(r16,15, 0,v)

    #define   GET32SemaCell_LVL_producer(r32)                  _BFGET_(r32,31,16)
    #define   SET32SemaCell_LVL_producer(r32,v)                _BFSET_(r32,31,16,v)
    #define   GET16SemaCell_LVL_producer(r16)                  _BFGET_(r16,15, 0)
    #define   SET16SemaCell_LVL_producer(r16,v)                _BFSET_(r16,15, 0,v)

    #define     w32SemaCell_LVL                                {\
            UNSG32 uLVL_consumer                               : 16;\
            UNSG32 uLVL_producer                               : 16;\
          }
    union { UNSG32 u32SemaCell_LVL;
            struct w32SemaCell_LVL;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32SemaCell_THRESH_max(r32)                    _BFGET_(r32,15, 0)
    #define   SET32SemaCell_THRESH_max(r32,v)                  _BFSET_(r32,15, 0,v)
    #define   GET16SemaCell_THRESH_max(r16)                    _BFGET_(r16,15, 0)
    #define   SET16SemaCell_THRESH_max(r16,v)                  _BFSET_(r16,15, 0,v)

    #define     w32SemaCell_THRESH                             {\
            UNSG32 uTHRESH_max                                 : 16;\
            UNSG32 RSVDx4_b16                                  : 16;\
          }
    union { UNSG32 u32SemaCell_THRESH;
            struct w32SemaCell_THRESH;
          };
    ///////////////////////////////////////////////////////////
    } SIE_SemaCell;

    typedef union  T32SemaCell_LVL
          { UNSG32 u32;
            struct w32SemaCell_LVL;
                 } T32SemaCell_LVL;
    typedef union  T32SemaCell_THRESH
          { UNSG32 u32;
            struct w32SemaCell_THRESH;
                 } T32SemaCell_THRESH;
    ///////////////////////////////////////////////////////////

    typedef union  TSemaCell_LVL
          { UNSG32 u32[1];
            struct {
            struct w32SemaCell_LVL;
                   };
                 } TSemaCell_LVL;
    typedef union  TSemaCell_THRESH
          { UNSG32 u32[1];
            struct {
            struct w32SemaCell_THRESH;
                   };
                 } TSemaCell_THRESH;

    ///////////////////////////////////////////////////////////
     SIGN32 SemaCell_drvrd(SIE_SemaCell *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 SemaCell_drvwr(SIE_SemaCell *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void SemaCell_reset(SIE_SemaCell *p);
     SIGN32 SemaCell_cmp  (SIE_SemaCell *p, SIE_SemaCell *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define SemaCell_check(p,pie,pfx,hLOG) SemaCell_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define SemaCell_print(p,    pfx,hLOG) SemaCell_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: SemaCell
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE SemaReq                                  (4,4)
///     ###
///     * Register specification of interface semaphore response
///     ###
///     # # ----------------------------------------------------------
///     @ 0x00000 RESP                 (R-)
///               %unsigned 1  success                   
///                                    ###
///                                    * 1 as success
///                                    ###
///               %%        31         # Stuffing bits...
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       4B, bits:       1b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_SemaReq
#define h_SemaReq (){}

    #define     RA_SemaReq_RESP                                0x0000

    #define     BA_SemaReq_RESP_success                        0x0000
    #define     B16SemaReq_RESP_success                        0x0000
    #define   LSb32SemaReq_RESP_success                           0
    #define   LSb16SemaReq_RESP_success                           0
    #define       bSemaReq_RESP_success                        1
    #define   MSK32SemaReq_RESP_success                           0x00000001
    ///////////////////////////////////////////////////////////

    typedef struct SIE_SemaReq {
    ///////////////////////////////////////////////////////////
    #define   GET32SemaReq_RESP_success(r32)                   _BFGET_(r32, 0, 0)
    #define   SET32SemaReq_RESP_success(r32,v)                 _BFSET_(r32, 0, 0,v)
    #define   GET16SemaReq_RESP_success(r16)                   _BFGET_(r16, 0, 0)
    #define   SET16SemaReq_RESP_success(r16,v)                 _BFSET_(r16, 0, 0,v)

    #define     w32SemaReq_RESP                                {\
            UNSG32 uRESP_success                               :  1;\
            UNSG32 RSVDx0_b1                                   : 31;\
          }
    union { UNSG32 u32SemaReq_RESP;
            struct w32SemaReq_RESP;
          };
    ///////////////////////////////////////////////////////////
    } SIE_SemaReq;

    typedef union  T32SemaReq_RESP
          { UNSG32 u32;
            struct w32SemaReq_RESP;
                 } T32SemaReq_RESP;
    ///////////////////////////////////////////////////////////

    typedef union  TSemaReq_RESP
          { UNSG32 u32[1];
            struct {
            struct w32SemaReq_RESP;
                   };
                 } TSemaReq_RESP;

    ///////////////////////////////////////////////////////////
     SIGN32 SemaReq_drvrd(SIE_SemaReq *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 SemaReq_drvwr(SIE_SemaReq *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void SemaReq_reset(SIE_SemaReq *p);
     SIGN32 SemaReq_cmp  (SIE_SemaReq *p, SIE_SemaReq *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define SemaReq_check(p,pie,pfx,hLOG) SemaReq_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define SemaReq_print(p,    pfx,hLOG) SemaReq_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: SemaReq
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE SemaRespMap                              (4,4)
///     ###
///     * Register specification of interface semaphore response array
///     ###
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///     # 0x00000 entry                
///               $SemaReq             entry             REG    [1024]
///                                    ###
///                                    * 16b access addres: see below
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:    4096B, bits:    1024b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_SemaRespMap
#define h_SemaRespMap (){}

    #define     RA_SemaRespMap_entry                           0x0000
    ///////////////////////////////////////////////////////////

    typedef struct SIE_SemaRespMap {
    ///////////////////////////////////////////////////////////
              SIE_SemaReq                                      ie_entry[1024];
    ///////////////////////////////////////////////////////////
    } SIE_SemaRespMap;

    ///////////////////////////////////////////////////////////
     SIGN32 SemaRespMap_drvrd(SIE_SemaRespMap *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 SemaRespMap_drvwr(SIE_SemaRespMap *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void SemaRespMap_reset(SIE_SemaRespMap *p);
     SIGN32 SemaRespMap_cmp  (SIE_SemaRespMap *p, SIE_SemaRespMap *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define SemaRespMap_check(p,pie,pfx,hLOG) SemaRespMap_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define SemaRespMap_print(p,    pfx,hLOG) SemaRespMap_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: SemaRespMap
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE SemaMap                                  (4,4)
///     ###
///     * Register specification of interface semaphore response array
///     ###
///     # # ----------------------------------------------------------
///     @ 0x00000 ADDR                 (P)
///               %unsigned 2  byte                      
///               %unsigned 8  ID                        
///               %unsigned 1  op                        
///                                    : chk                       0x0
///                                    : update                    0x1
///               %unsigned 1  master                    
///                                    : producer                  0x0
///                                    : consumer                  0x1
///                                                 ###
///                                                 * 10b address map for SemaRespMap
///                                                 ###
///               %%        20         # Stuffing bits...
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       4B, bits:      12b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_SemaMap
#define h_SemaMap (){}

    #define     RA_SemaMap_ADDR                                0x0000

    #define     BA_SemaMap_ADDR_byte                           0x0000
    #define     B16SemaMap_ADDR_byte                           0x0000
    #define   LSb32SemaMap_ADDR_byte                              0
    #define   LSb16SemaMap_ADDR_byte                              0
    #define       bSemaMap_ADDR_byte                           2
    #define   MSK32SemaMap_ADDR_byte                              0x00000003

    #define     BA_SemaMap_ADDR_ID                             0x0000
    #define     B16SemaMap_ADDR_ID                             0x0000
    #define   LSb32SemaMap_ADDR_ID                                2
    #define   LSb16SemaMap_ADDR_ID                                2
    #define       bSemaMap_ADDR_ID                             8
    #define   MSK32SemaMap_ADDR_ID                                0x000003FC

    #define     BA_SemaMap_ADDR_op                             0x0001
    #define     B16SemaMap_ADDR_op                             0x0000
    #define   LSb32SemaMap_ADDR_op                                10
    #define   LSb16SemaMap_ADDR_op                                10
    #define       bSemaMap_ADDR_op                             1
    #define   MSK32SemaMap_ADDR_op                                0x00000400
    #define        SemaMap_ADDR_op_chk                                      0x0
    #define        SemaMap_ADDR_op_update                                   0x1

    #define     BA_SemaMap_ADDR_master                         0x0001
    #define     B16SemaMap_ADDR_master                         0x0000
    #define   LSb32SemaMap_ADDR_master                            11
    #define   LSb16SemaMap_ADDR_master                            11
    #define       bSemaMap_ADDR_master                         1
    #define   MSK32SemaMap_ADDR_master                            0x00000800
    #define        SemaMap_ADDR_master_producer                             0x0
    #define        SemaMap_ADDR_master_consumer                             0x1
    ///////////////////////////////////////////////////////////

    typedef struct SIE_SemaMap {
    ///////////////////////////////////////////////////////////
    #define   GET32SemaMap_ADDR_byte(r32)                      _BFGET_(r32, 1, 0)
    #define   SET32SemaMap_ADDR_byte(r32,v)                    _BFSET_(r32, 1, 0,v)
    #define   GET16SemaMap_ADDR_byte(r16)                      _BFGET_(r16, 1, 0)
    #define   SET16SemaMap_ADDR_byte(r16,v)                    _BFSET_(r16, 1, 0,v)

    #define   GET32SemaMap_ADDR_ID(r32)                        _BFGET_(r32, 9, 2)
    #define   SET32SemaMap_ADDR_ID(r32,v)                      _BFSET_(r32, 9, 2,v)
    #define   GET16SemaMap_ADDR_ID(r16)                        _BFGET_(r16, 9, 2)
    #define   SET16SemaMap_ADDR_ID(r16,v)                      _BFSET_(r16, 9, 2,v)

    #define   GET32SemaMap_ADDR_op(r32)                        _BFGET_(r32,10,10)
    #define   SET32SemaMap_ADDR_op(r32,v)                      _BFSET_(r32,10,10,v)
    #define   GET16SemaMap_ADDR_op(r16)                        _BFGET_(r16,10,10)
    #define   SET16SemaMap_ADDR_op(r16,v)                      _BFSET_(r16,10,10,v)

    #define   GET32SemaMap_ADDR_master(r32)                    _BFGET_(r32,11,11)
    #define   SET32SemaMap_ADDR_master(r32,v)                  _BFSET_(r32,11,11,v)
    #define   GET16SemaMap_ADDR_master(r16)                    _BFGET_(r16,11,11)
    #define   SET16SemaMap_ADDR_master(r16,v)                  _BFSET_(r16,11,11,v)

    #define     w32SemaMap_ADDR                                {\
            UNSG32 uADDR_byte                                  :  2;\
            UNSG32 uADDR_ID                                    :  8;\
            UNSG32 uADDR_op                                    :  1;\
            UNSG32 uADDR_master                                :  1;\
            UNSG32 RSVDx0_b12                                  : 20;\
          }
    union { UNSG32 u32SemaMap_ADDR;
            struct w32SemaMap_ADDR;
          };
    ///////////////////////////////////////////////////////////
    } SIE_SemaMap;

    typedef union  T32SemaMap_ADDR
          { UNSG32 u32;
            struct w32SemaMap_ADDR;
                 } T32SemaMap_ADDR;
    ///////////////////////////////////////////////////////////

    typedef union  TSemaMap_ADDR
          { UNSG32 u32[1];
            struct {
            struct w32SemaMap_ADDR;
                   };
                 } TSemaMap_ADDR;

    ///////////////////////////////////////////////////////////
     SIGN32 SemaMap_drvrd(SIE_SemaMap *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 SemaMap_drvwr(SIE_SemaMap *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void SemaMap_reset(SIE_SemaMap *p);
     SIGN32 SemaMap_cmp  (SIE_SemaMap *p, SIE_SemaMap *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define SemaMap_check(p,pie,pfx,hLOG) SemaMap_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define SemaMap_print(p,    pfx,hLOG) SemaMap_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: SemaMap
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE SEMA                    biu              (4,4)
///     # # ----------------------------------------------------------
///               : NumSema            0x20
///                            ###
///                            * Number of semaphore cells
///                            ###
///     @ 0x00000 ARR                  (P)
///     # 0x00000 cell                 
///               $SemaCell            cell              REG      [24]
///                                    ###
///                                    * Semaphore array
///                                    ###
///     @ 0x000C0                      (W-)
///     #         # Stuffing bytes...
///               %% 512
///     @ 0x00100 OFST                 (WOC-)
///               %unsigned 24 arr                       0x0
///                                    ###
///                                    * Interrupt status for O/F
///                                    ###
///               %%        8          # Stuffing bits...
///     @ 0x00104 UFST                 (WOC-)
///               %unsigned 24 arr                       0xFFFFFF
///                                    ###
///                                    * Interrupt status for U/F
///                                    ###
///               %%        8          # Stuffing bits...
///     @ 0x00108 OFMSK                (P)
///               %unsigned 24 arr_0i                    0x0
///               %%        8          # Stuffing bits...
///     # 0x0010C OFMSK1               
///               %unsigned 24 arr_1i                    0x0
///               %%        8          # Stuffing bits...
///     # 0x00110 OFMSK2               
///               %unsigned 24 arr_2i                    0x0
///                                    ###
///                                    * Interrupt mask for O/F of 3 CPUs, 0 disable interrupt, 1 enable interrupt.
///                                    ###
///               %%        8          # Stuffing bits...
///     @ 0x00114 UFMSK                (P)
///               %unsigned 24 arr_0i                    0x0
///               %%        8          # Stuffing bits...
///     # 0x00118 UFMSK1               
///               %unsigned 24 arr_1i                    0x0
///               %%        8          # Stuffing bits...
///     # 0x0011C UFMSK2               
///               %unsigned 24 arr_2i                    0x0
///                                    ###
///                                    * Interrupt mask for U/F of 3 CPU, 0 disable interrupt, 1 enable interrupt.
///                                    ###
///               %%        8          # Stuffing bits...
///     @ 0x00120 XCPU                 (P)
///               %unsigned 32 mailbox_0i                
///     # 0x00124 XCPU1                
///               %unsigned 32 mailbox_1i                
///                                    ###
///                                    * Mailboxes for inter-CPU communication
///                                    ###
///     @ 0x00128 PUSH                 (P)
///               %unsigned 8  ID                        0x0
///               %unsigned 8  delta                     
///                                    ###
///                                    * CPU increase both producer & consumer counters of a semaphore by a delta number
///                                    ###
///               %%        16         # Stuffing bits...
///     @ 0x0012C POP                  (P)
///               %unsigned 8  ID                        0x0
///               %unsigned 8  delta                     
///                                    ###
///                                    * CPU decrease both producer & consumer counters of a semaphore by a delta number
///                                    ###
///               %%        16         # Stuffing bits...
///     @ 0x00130                      (W-)
///     #         # Stuffing bytes...
///               %% 30336
///     @ 0x01000 REQ                  (R-)
///     # 0x01000 resp                 
///               $SemaRespMap         resp              MEM          
///                                    ###
///                                    * CPU interface to operate semaphores
///                                    * Read to this “memory-mapped” response table to trigger check/update semaphore & wait the operation done.
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:    8192B, bits:    1472b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_SEMA
#define h_SEMA (){}

    #define        SEMA_NumSema                                0x20
    ///////////////////////////////////////////////////////////
    #define     RA_SEMA_ARR                                    0x0000
    #define     RA_SEMA_cell                                   0x0000
    ///////////////////////////////////////////////////////////
    #define     RA_SEMA_OFST                                   0x0100

    #define     BA_SEMA_OFST_arr                               0x0100
    #define     B16SEMA_OFST_arr                               0x0100
    #define   LSb32SEMA_OFST_arr                                  0
    #define   LSb16SEMA_OFST_arr                                  0
    #define       bSEMA_OFST_arr                               24
    #define   MSK32SEMA_OFST_arr                                  0x00FFFFFF
    ///////////////////////////////////////////////////////////
    #define     RA_SEMA_UFST                                   0x0104

    #define     BA_SEMA_UFST_arr                               0x0104
    #define     B16SEMA_UFST_arr                               0x0104
    #define   LSb32SEMA_UFST_arr                                  0
    #define   LSb16SEMA_UFST_arr                                  0
    #define       bSEMA_UFST_arr                               24
    #define   MSK32SEMA_UFST_arr                                  0x00FFFFFF
    ///////////////////////////////////////////////////////////
    #define     RA_SEMA_OFMSK                                  0x0108

    #define     BA_SEMA_OFMSK_arr_0i                           0x0108
    #define     B16SEMA_OFMSK_arr_0i                           0x0108
    #define   LSb32SEMA_OFMSK_arr_0i                              0
    #define   LSb16SEMA_OFMSK_arr_0i                              0
    #define       bSEMA_OFMSK_arr_0i                           24
    #define   MSK32SEMA_OFMSK_arr_0i                              0x00FFFFFF

    #define     RA_SEMA_OFMSK1                                 0x010C

    #define     BA_SEMA_OFMSK_arr_1i                           0x010C
    #define     B16SEMA_OFMSK_arr_1i                           0x010C
    #define   LSb32SEMA_OFMSK_arr_1i                              0
    #define   LSb16SEMA_OFMSK_arr_1i                              0
    #define       bSEMA_OFMSK_arr_1i                           24
    #define   MSK32SEMA_OFMSK_arr_1i                              0x00FFFFFF

    #define     RA_SEMA_OFMSK2                                 0x0110

    #define     BA_SEMA_OFMSK_arr_2i                           0x0110
    #define     B16SEMA_OFMSK_arr_2i                           0x0110
    #define   LSb32SEMA_OFMSK_arr_2i                              0
    #define   LSb16SEMA_OFMSK_arr_2i                              0
    #define       bSEMA_OFMSK_arr_2i                           24
    #define   MSK32SEMA_OFMSK_arr_2i                              0x00FFFFFF
    ///////////////////////////////////////////////////////////
    #define     RA_SEMA_UFMSK                                  0x0114

    #define     BA_SEMA_UFMSK_arr_0i                           0x0114
    #define     B16SEMA_UFMSK_arr_0i                           0x0114
    #define   LSb32SEMA_UFMSK_arr_0i                              0
    #define   LSb16SEMA_UFMSK_arr_0i                              0
    #define       bSEMA_UFMSK_arr_0i                           24
    #define   MSK32SEMA_UFMSK_arr_0i                              0x00FFFFFF

    #define     RA_SEMA_UFMSK1                                 0x0118

    #define     BA_SEMA_UFMSK_arr_1i                           0x0118
    #define     B16SEMA_UFMSK_arr_1i                           0x0118
    #define   LSb32SEMA_UFMSK_arr_1i                              0
    #define   LSb16SEMA_UFMSK_arr_1i                              0
    #define       bSEMA_UFMSK_arr_1i                           24
    #define   MSK32SEMA_UFMSK_arr_1i                              0x00FFFFFF

    #define     RA_SEMA_UFMSK2                                 0x011C

    #define     BA_SEMA_UFMSK_arr_2i                           0x011C
    #define     B16SEMA_UFMSK_arr_2i                           0x011C
    #define   LSb32SEMA_UFMSK_arr_2i                              0
    #define   LSb16SEMA_UFMSK_arr_2i                              0
    #define       bSEMA_UFMSK_arr_2i                           24
    #define   MSK32SEMA_UFMSK_arr_2i                              0x00FFFFFF
    ///////////////////////////////////////////////////////////
    #define     RA_SEMA_XCPU                                   0x0120

    #define     BA_SEMA_XCPU_mailbox_0i                        0x0120
    #define     B16SEMA_XCPU_mailbox_0i                        0x0120
    #define   LSb32SEMA_XCPU_mailbox_0i                           0
    #define   LSb16SEMA_XCPU_mailbox_0i                           0
    #define       bSEMA_XCPU_mailbox_0i                        32
    #define   MSK32SEMA_XCPU_mailbox_0i                           0xFFFFFFFF

    #define     RA_SEMA_XCPU1                                  0x0124

    #define     BA_SEMA_XCPU_mailbox_1i                        0x0124
    #define     B16SEMA_XCPU_mailbox_1i                        0x0124
    #define   LSb32SEMA_XCPU_mailbox_1i                           0
    #define   LSb16SEMA_XCPU_mailbox_1i                           0
    #define       bSEMA_XCPU_mailbox_1i                        32
    #define   MSK32SEMA_XCPU_mailbox_1i                           0xFFFFFFFF
    ///////////////////////////////////////////////////////////
    #define     RA_SEMA_PUSH                                   0x0128

    #define     BA_SEMA_PUSH_ID                                0x0128
    #define     B16SEMA_PUSH_ID                                0x0128
    #define   LSb32SEMA_PUSH_ID                                   0
    #define   LSb16SEMA_PUSH_ID                                   0
    #define       bSEMA_PUSH_ID                                8
    #define   MSK32SEMA_PUSH_ID                                   0x000000FF

    #define     BA_SEMA_PUSH_delta                             0x0129
    #define     B16SEMA_PUSH_delta                             0x0128
    #define   LSb32SEMA_PUSH_delta                                8
    #define   LSb16SEMA_PUSH_delta                                8
    #define       bSEMA_PUSH_delta                             8
    #define   MSK32SEMA_PUSH_delta                                0x0000FF00
    ///////////////////////////////////////////////////////////
    #define     RA_SEMA_POP                                    0x012C

    #define     BA_SEMA_POP_ID                                 0x012C
    #define     B16SEMA_POP_ID                                 0x012C
    #define   LSb32SEMA_POP_ID                                    0
    #define   LSb16SEMA_POP_ID                                    0
    #define       bSEMA_POP_ID                                 8
    #define   MSK32SEMA_POP_ID                                    0x000000FF

    #define     BA_SEMA_POP_delta                              0x012D
    #define     B16SEMA_POP_delta                              0x012C
    #define   LSb32SEMA_POP_delta                                 8
    #define   LSb16SEMA_POP_delta                                 8
    #define       bSEMA_POP_delta                              8
    #define   MSK32SEMA_POP_delta                                 0x0000FF00
    ///////////////////////////////////////////////////////////
    #define     RA_SEMA_REQ                                    0x1000
    #define     RA_SEMA_resp                                   0x1000
    ///////////////////////////////////////////////////////////

    typedef struct SIE_SEMA {
    ///////////////////////////////////////////////////////////
              SIE_SemaCell                                     ie_cell[24];
    ///////////////////////////////////////////////////////////
             UNSG8 RSVDxC0                                     [64];
    ///////////////////////////////////////////////////////////
    #define   GET32SEMA_OFST_arr(r32)                          _BFGET_(r32,23, 0)
    #define   SET32SEMA_OFST_arr(r32,v)                        _BFSET_(r32,23, 0,v)

    #define     w32SEMA_OFST                                   {\
            UNSG32 uOFST_arr                                   : 24;\
            UNSG32 RSVDx100_b24                                :  8;\
          }
    union { UNSG32 u32SEMA_OFST;
            struct w32SEMA_OFST;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32SEMA_UFST_arr(r32)                          _BFGET_(r32,23, 0)
    #define   SET32SEMA_UFST_arr(r32,v)                        _BFSET_(r32,23, 0,v)

    #define     w32SEMA_UFST                                   {\
            UNSG32 uUFST_arr                                   : 24;\
            UNSG32 RSVDx104_b24                                :  8;\
          }
    union { UNSG32 u32SEMA_UFST;
            struct w32SEMA_UFST;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32SEMA_OFMSK_arr_0i(r32)                      _BFGET_(r32,23, 0)
    #define   SET32SEMA_OFMSK_arr_0i(r32,v)                    _BFSET_(r32,23, 0,v)

    #define     w32SEMA_OFMSK                                  {\
            UNSG32 uOFMSK_arr_0i                               : 24;\
            UNSG32 RSVDx108_b24                                :  8;\
          }
    union { UNSG32 u32SEMA_OFMSK;
            struct w32SEMA_OFMSK;
          };
    #define   GET32SEMA_OFMSK_arr_1i(r32)                      _BFGET_(r32,23, 0)
    #define   SET32SEMA_OFMSK_arr_1i(r32,v)                    _BFSET_(r32,23, 0,v)

    #define     w32SEMA_OFMSK1                                 {\
            UNSG32 uOFMSK_arr_1i                               : 24;\
            UNSG32 RSVDx10C_b24                                :  8;\
          }
    union { UNSG32 u32SEMA_OFMSK1;
            struct w32SEMA_OFMSK1;
          };
    #define   GET32SEMA_OFMSK_arr_2i(r32)                      _BFGET_(r32,23, 0)
    #define   SET32SEMA_OFMSK_arr_2i(r32,v)                    _BFSET_(r32,23, 0,v)

    #define     w32SEMA_OFMSK2                                 {\
            UNSG32 uOFMSK_arr_2i                               : 24;\
            UNSG32 RSVDx110_b24                                :  8;\
          }
    union { UNSG32 u32SEMA_OFMSK2;
            struct w32SEMA_OFMSK2;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32SEMA_UFMSK_arr_0i(r32)                      _BFGET_(r32,23, 0)
    #define   SET32SEMA_UFMSK_arr_0i(r32,v)                    _BFSET_(r32,23, 0,v)

    #define     w32SEMA_UFMSK                                  {\
            UNSG32 uUFMSK_arr_0i                               : 24;\
            UNSG32 RSVDx114_b24                                :  8;\
          }
    union { UNSG32 u32SEMA_UFMSK;
            struct w32SEMA_UFMSK;
          };
    #define   GET32SEMA_UFMSK_arr_1i(r32)                      _BFGET_(r32,23, 0)
    #define   SET32SEMA_UFMSK_arr_1i(r32,v)                    _BFSET_(r32,23, 0,v)

    #define     w32SEMA_UFMSK1                                 {\
            UNSG32 uUFMSK_arr_1i                               : 24;\
            UNSG32 RSVDx118_b24                                :  8;\
          }
    union { UNSG32 u32SEMA_UFMSK1;
            struct w32SEMA_UFMSK1;
          };
    #define   GET32SEMA_UFMSK_arr_2i(r32)                      _BFGET_(r32,23, 0)
    #define   SET32SEMA_UFMSK_arr_2i(r32,v)                    _BFSET_(r32,23, 0,v)

    #define     w32SEMA_UFMSK2                                 {\
            UNSG32 uUFMSK_arr_2i                               : 24;\
            UNSG32 RSVDx11C_b24                                :  8;\
          }
    union { UNSG32 u32SEMA_UFMSK2;
            struct w32SEMA_UFMSK2;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32SEMA_XCPU_mailbox_0i(r32)                   _BFGET_(r32,31, 0)
    #define   SET32SEMA_XCPU_mailbox_0i(r32,v)                 _BFSET_(r32,31, 0,v)

    #define     w32SEMA_XCPU                                   {\
            UNSG32 uXCPU_mailbox_0i                            : 32;\
          }
    union { UNSG32 u32SEMA_XCPU;
            struct w32SEMA_XCPU;
          };
    #define   GET32SEMA_XCPU_mailbox_1i(r32)                   _BFGET_(r32,31, 0)
    #define   SET32SEMA_XCPU_mailbox_1i(r32,v)                 _BFSET_(r32,31, 0,v)

    #define     w32SEMA_XCPU1                                  {\
            UNSG32 uXCPU_mailbox_1i                            : 32;\
          }
    union { UNSG32 u32SEMA_XCPU1;
            struct w32SEMA_XCPU1;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32SEMA_PUSH_ID(r32)                           _BFGET_(r32, 7, 0)
    #define   SET32SEMA_PUSH_ID(r32,v)                         _BFSET_(r32, 7, 0,v)
    #define   GET16SEMA_PUSH_ID(r16)                           _BFGET_(r16, 7, 0)
    #define   SET16SEMA_PUSH_ID(r16,v)                         _BFSET_(r16, 7, 0,v)

    #define   GET32SEMA_PUSH_delta(r32)                        _BFGET_(r32,15, 8)
    #define   SET32SEMA_PUSH_delta(r32,v)                      _BFSET_(r32,15, 8,v)
    #define   GET16SEMA_PUSH_delta(r16)                        _BFGET_(r16,15, 8)
    #define   SET16SEMA_PUSH_delta(r16,v)                      _BFSET_(r16,15, 8,v)

    #define     w32SEMA_PUSH                                   {\
            UNSG32 uPUSH_ID                                    :  8;\
            UNSG32 uPUSH_delta                                 :  8;\
            UNSG32 RSVDx128_b16                                : 16;\
          }
    union { UNSG32 u32SEMA_PUSH;
            struct w32SEMA_PUSH;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32SEMA_POP_ID(r32)                            _BFGET_(r32, 7, 0)
    #define   SET32SEMA_POP_ID(r32,v)                          _BFSET_(r32, 7, 0,v)
    #define   GET16SEMA_POP_ID(r16)                            _BFGET_(r16, 7, 0)
    #define   SET16SEMA_POP_ID(r16,v)                          _BFSET_(r16, 7, 0,v)

    #define   GET32SEMA_POP_delta(r32)                         _BFGET_(r32,15, 8)
    #define   SET32SEMA_POP_delta(r32,v)                       _BFSET_(r32,15, 8,v)
    #define   GET16SEMA_POP_delta(r16)                         _BFGET_(r16,15, 8)
    #define   SET16SEMA_POP_delta(r16,v)                       _BFSET_(r16,15, 8,v)

    #define     w32SEMA_POP                                    {\
            UNSG32 uPOP_ID                                     :  8;\
            UNSG32 uPOP_delta                                  :  8;\
            UNSG32 RSVDx12C_b16                                : 16;\
          }
    union { UNSG32 u32SEMA_POP;
            struct w32SEMA_POP;
          };
    ///////////////////////////////////////////////////////////
             UNSG8 RSVDx130                                    [3792];
    ///////////////////////////////////////////////////////////
              SIE_SemaRespMap                                  ie_resp;
    ///////////////////////////////////////////////////////////
    } SIE_SEMA;

    typedef union  T32SEMA_OFST
          { UNSG32 u32;
            struct w32SEMA_OFST;
                 } T32SEMA_OFST;
    typedef union  T32SEMA_UFST
          { UNSG32 u32;
            struct w32SEMA_UFST;
                 } T32SEMA_UFST;
    typedef union  T32SEMA_OFMSK
          { UNSG32 u32;
            struct w32SEMA_OFMSK;
                 } T32SEMA_OFMSK;
    typedef union  T32SEMA_OFMSK1
          { UNSG32 u32;
            struct w32SEMA_OFMSK1;
                 } T32SEMA_OFMSK1;
    typedef union  T32SEMA_OFMSK2
          { UNSG32 u32;
            struct w32SEMA_OFMSK2;
                 } T32SEMA_OFMSK2;
    typedef union  T32SEMA_UFMSK
          { UNSG32 u32;
            struct w32SEMA_UFMSK;
                 } T32SEMA_UFMSK;
    typedef union  T32SEMA_UFMSK1
          { UNSG32 u32;
            struct w32SEMA_UFMSK1;
                 } T32SEMA_UFMSK1;
    typedef union  T32SEMA_UFMSK2
          { UNSG32 u32;
            struct w32SEMA_UFMSK2;
                 } T32SEMA_UFMSK2;
    typedef union  T32SEMA_XCPU
          { UNSG32 u32;
            struct w32SEMA_XCPU;
                 } T32SEMA_XCPU;
    typedef union  T32SEMA_XCPU1
          { UNSG32 u32;
            struct w32SEMA_XCPU1;
                 } T32SEMA_XCPU1;
    typedef union  T32SEMA_PUSH
          { UNSG32 u32;
            struct w32SEMA_PUSH;
                 } T32SEMA_PUSH;
    typedef union  T32SEMA_POP
          { UNSG32 u32;
            struct w32SEMA_POP;
                 } T32SEMA_POP;
    ///////////////////////////////////////////////////////////

    typedef union  TSEMA_OFST
          { UNSG32 u32[1];
            struct {
            struct w32SEMA_OFST;
                   };
                 } TSEMA_OFST;
    typedef union  TSEMA_UFST
          { UNSG32 u32[1];
            struct {
            struct w32SEMA_UFST;
                   };
                 } TSEMA_UFST;
    typedef union  TSEMA_OFMSK
          { UNSG32 u32[3];
            struct {
            struct w32SEMA_OFMSK;
            struct w32SEMA_OFMSK1;
            struct w32SEMA_OFMSK2;
                   };
                 } TSEMA_OFMSK;
    typedef union  TSEMA_UFMSK
          { UNSG32 u32[3];
            struct {
            struct w32SEMA_UFMSK;
            struct w32SEMA_UFMSK1;
            struct w32SEMA_UFMSK2;
                   };
                 } TSEMA_UFMSK;
    typedef union  TSEMA_XCPU
          { UNSG32 u32[2];
            struct {
            struct w32SEMA_XCPU;
            struct w32SEMA_XCPU1;
                   };
                 } TSEMA_XCPU;
    typedef union  TSEMA_PUSH
          { UNSG32 u32[1];
            struct {
            struct w32SEMA_PUSH;
                   };
                 } TSEMA_PUSH;
    typedef union  TSEMA_POP
          { UNSG32 u32[1];
            struct {
            struct w32SEMA_POP;
                   };
                 } TSEMA_POP;

    ///////////////////////////////////////////////////////////
     SIGN32 SEMA_drvrd(SIE_SEMA *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 SEMA_drvwr(SIE_SEMA *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void SEMA_reset(SIE_SEMA *p);
     SIGN32 SEMA_cmp  (SIE_SEMA *p, SIE_SEMA *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define SEMA_check(p,pie,pfx,hLOG) SEMA_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define SEMA_print(p,    pfx,hLOG) SEMA_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: SEMA
////////////////////////////////////////////////////////////



#ifdef __cplusplus
  }
#endif
#pragma  pack()

#endif
//////
/// ENDOFFILE: sema.h
////////////////////////////////////////////////////////////

