* ========== Copyright Header Begin ==========================================
* OpenSPARC T2 Processor File: SS_AsiCtrReg.h
* Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES.
* The above named program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License version 2 as published by the Free Software Foundation.
* The above named program is distributed in the hope that it will be
* useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
* You should have received a copy of the GNU General Public
* License along with this work; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
* ========== Copyright Header End ============================================
#ifndef __SS_AsiCtrReg_h__
#define __SS_AsiCtrReg_h__
SS_AsiCtrReg( const char* __name
, uint64_t __mask_ro
, uint64_t __mask_r1c
, uint64_t __mask_rw
, uint64_t __mask_w1c
, uint64_t __init
)
const char* name() const { return _name
; }
uint64_t get() { uint64_t tmp
= _data
; _data
&= ~_mask_r1c
; return tmp
; }
void set( uint64_t v
) { _data
= (v
& _mask_rw
) | (_data
& ~(_mask_rw
| (v
& _mask_w1c
))); }
void set_unmasked( uint64_t v
) { _data
= v
; }
uint64_t get_ro_mask() const { return _mask_ro
; }
uint64_t get_rw_mask() const { return _mask_rw
; }
uint64_t get_r1c_mask() const { return _mask_r1c
; }
uint64_t get_w1c_mask() const { return _mask_w1c
; }
uint64_t get_init_mask() const { return _init
; }
void snapshot( SS_SnapShot
& ss
, const char* prefix
="", const char* suffix
="" );
static void snapshot( SS_SnapShot
& ss
, Type
* array
, uint_t size
, const char* prefix
="", const char* suffix
="" )
for (int i
=0; i
<size
; i
++)
sprintf(num
,"%s.%d",suffix
,i
);
array
[i
].snapshot(ss
,prefix
,num
);
static SS_AsiSpace::Error
ld64( SS_Node
*, void*, SS_Strand
*, SS_Vaddr
, uint64_t* data
);
static SS_AsiSpace::Error
st64( SS_Node
*, void*, SS_Strand
*, SS_Vaddr
, uint64_t data
);
static SS_AsiSpace::Error
rd64( SS_Node
*, void*, SS_Strand
*, SS_Vaddr
, uint64_t* data
);
static SS_AsiSpace::Error
wr64( SS_Node
*, void*, SS_Strand
*, SS_Vaddr
, uint64_t data
);
uint64_t _mask_ro
; // read only
uint64_t _mask_rw
; // read write
uint64_t _mask_r1c
; // read one clear
uint64_t _mask_w1c
; // write one clear
class SS_SharedAsiCtrReg
: public SS_AsiCtrReg
SS_SharedAsiCtrReg( const char* __name
, uint64_t __mask_ro
, uint64_t __mask_r1c
, uint64_t __mask_rw
, uint64_t __mask_w1c
, uint64_t __init
)
SS_AsiCtrReg(__name
,__mask_ro
,__mask_r1c
,__mask_rw
,__mask_w1c
,__init
)
int lock() { return _mutex
.lock(); }
int unlock() { return _mutex
.unlock(); }
int trylock() { return _mutex
.trylock(); }
void snapshot( SS_SnapShot
& ss
, const char* prefix
="", const char* suffix
="" )
SS_AsiCtrReg::snapshot(ss
,prefix
,suffix
);
static void snapshot( SS_SnapShot
& ss
, Type
* array
, uint_t size
, const char* prefix
="", const char* suffix
="" )
SS_AsiCtrReg::snapshot
<Type
>(ss
,array
,size
,prefix
,suffix
);
static SS_AsiSpace::Error
ld64( SS_Node
*, void*, SS_Strand
*, SS_Vaddr
, uint64_t* data
);
static SS_AsiSpace::Error
st64( SS_Node
*, void*, SS_Strand
*, SS_Vaddr
, uint64_t data
);
static SS_AsiSpace::Error
rd64( SS_Node
*, void*, SS_Strand
*, SS_Vaddr
, uint64_t* data
);
static SS_AsiSpace::Error
wr64( SS_Node
*, void*, SS_Strand
*, SS_Vaddr
, uint64_t data
);