/********************************************************************************
 * 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.
 ******************************************************************************/

#ifndef performance_counter_h
#define performance_counter_h

	#define		w32Perc_Config	 	{									\
			UNSG32				uConfig_pc_event_sel0		:  5;		\
			UNSG32				rsvd0						:  1;		\
			UNSG32				uConfig_pc_int_en0			:  1;		\
			UNSG32				uConfig_pc_reg_en0		 	:  1;		\
			UNSG32				uConfig_pc_event_sel1		:  5;		\
			UNSG32				rsvd1						:  1;		\
			UNSG32				uConfig_pc_int_en1			:  1;		\
			UNSG32				uConfig_pc_reg_en1		 	:  1;		\
			UNSG32				uConfig_pc_event_sel2		:  5;		\
			UNSG32				rsvd2						:  1;		\
			UNSG32				uConfig_pc_int_en2			:  1;		\
			UNSG32				uConfig_pc_reg_en2		 	:  1;		\
			UNSG32				uConfig_pc_event_sel3		:  5;		\
			UNSG32				rsvd3						:  1;		\
			UNSG32				uConfig_pc_int_en3			:  1;		\
			UNSG32				uConfig_pc_reg_en3		 	:  1;		\
		}

	#define		w32Perc_Status	 	{									\
			UNSG32				uStatus_pc_overflow0		:  1;		\
			UNSG32				uStatus_pc_overflow1		:  1;		\
			UNSG32				uStatus_pc_overflow2		:  1;		\
			UNSG32				uStatus_pc_overflow3		:  1;		\
			UNSG32				rsvd0						:  28;		\
		}

	#define		w32Perc_Control	 	{									\
			UNSG32				uControl_pc_start_cond		:  1;		\
			UNSG32				rsvd0						:  3;		\
			UNSG32				uControl_pc_stop_cond		:  1;		\
			UNSG32				rsvd1						:  11;		\
			UNSG32				uControl_pc_clk_div			:  3;		\
			UNSG32				rsvd2						:  13;		\
		}

    typedef union  T32Perc_Config
          { UNSG32 u32;
            struct w32Perc_Config;
                 } T32Perc_Config;

    typedef union  T32Perc_Status
          { UNSG32 u32;
            struct w32Perc_Status;
                 } T32Perc_Status;

    typedef union  T32Perc_Control
          { UNSG32 u32;
            struct w32Perc_Control;
                 } T32Perc_Control;

	/*
		Port0: CPU
		Port1: AVIO (VPP)
		Port2: AVIO (AG)
		Port3: Peripheral / MTEST
		Port4: ZSP / GC360 (Vector Graphics)
		Port5: Gfx3D (GC1000_3D)
		Port6: vMeta
		Port7: Gfx2D (GC1000_2D)
	*/
	#define		w32port_Priority_Control	 	{						\
			UNSG32				priority_p0					:  2;		\
			UNSG32				priority_p1					:  2;		\
			UNSG32				priority_p2					:  2;		\
			UNSG32				priority_p3					:  2;		\
			UNSG32				priority_p4					:  2;		\
			UNSG32				priority_p5					:  2;		\
			UNSG32				priority_p6					:  2;		\
			UNSG32				priority_p7					:  2;		\
			UNSG32				rsvd1						:  4;		\
			UNSG32				low_latency_disable			:  1;		\
			UNSG32				block_high					:  1;		\
			UNSG32				block_low					:  1;		\
			UNSG32				rsvd2						:  1;		\
			UNSG32				port_prio_en		 		:  8;		\
		}

    typedef union  T32port_Priority_Control
          { UNSG32 u32;
            struct w32port_Priority_Control;
                 } T32port_Priority_Control;
                 
#endif
