#ifndef _SB1250_WID_H
#define _SB1250_WID_H
#include "sb1250_defs.h"
#define S_WID_BIN 0
#define M_WID_BIN _SB_MAKEMASK(3,S_WID_BIN)
#define V_WID_BIN(x) _SB_MAKEVALUE(x,S_WID_BIN)
#define G_WID_BIN(x) _SB_GETVALUE(x,S_WID_BIN,M_WID_BIN)
#define K_WID_BIN_2CPU_FI_1D_H2 0
#define K_WID_BIN_2CPU_FI_FD_F2 1
#define K_WID_BIN_2CPU_FI_FD_H2 2
#define K_WID_BIN_2CPU_3I_3D_F2 3
#define K_WID_BIN_2CPU_3I_3D_H2 4
#define K_WID_BIN_1CPU_FI_FD_F2 5
#define K_WID_BIN_1CPU_FI_FD_H2 6
#define K_WID_BIN_2CPU_1I_1D_Q2 7
#define M_WID_BIN_1CPU (_SB_MAKEMASK1(K_WID_BIN_1CPU_FI_FD_F2) | \
_SB_MAKEMASK1(K_WID_BIN_1CPU_FI_FD_H2))
#define M_WID_BIN_F2 (_SB_MAKEMASK1(K_WID_BIN_2CPU_FI_FD_F2) | \
_SB_MAKEMASK1(K_WID_BIN_2CPU_3I_3D_F2) | \
_SB_MAKEMASK1(K_WID_BIN_1CPU_FI_FD_F2))
#define M_WID_BIN_H2 (_SB_MAKEMASK1(K_WID_BIN_2CPU_FI_1D_H2) | \
_SB_MAKEMASK1(K_WID_BIN_2CPU_FI_FD_H2) | \
_SB_MAKEMASK1(K_WID_BIN_2CPU_3I_3D_H2) | \
_SB_MAKEMASK1(K_WID_BIN_1CPU_FI_FD_H2) )
#define M_WID_BIN_Q2 (_SB_MAKEMASK1(K_WID_BIN_2CPU_1I_1D_Q2))
#define M_WID_BIN_3ID (_SB_MAKEMASK1(K_WID_BIN_2CPU_3I_3D_F2) | \
_SB_MAKEMASK1(K_WID_BIN_2CPU_3I_3D_H2))
#define M_WID_BIN_FI (_SB_MAKEMASK1(K_WID_BIN_2CPU_FI_1D_H2) | \
_SB_MAKEMASK1(K_WID_BIN_2CPU_FI_FD_F2) | \
_SB_MAKEMASK1(K_WID_BIN_2CPU_FI_FD_H2) | \
_SB_MAKEMASK1(K_WID_BIN_1CPU_FI_FD_F2) | \
_SB_MAKEMASK1(K_WID_BIN_1CPU_FI_FD_H2))
#define M_WID_BIN_FD (_SB_MAKEMASK1(K_WID_BIN_2CPU_FI_FD_F2) | \
_SB_MAKEMASK1(K_WID_BIN_2CPU_FI_FD_H2) | \
_SB_MAKEMASK1(K_WID_BIN_1CPU_FI_FD_F2) | \
_SB_MAKEMASK1(K_WID_BIN_1CPU_FI_FD_H2))
#define M_WID_BIN_FID (_SB_MAKEMASK1(K_WID_BIN_2CPU_FI_FD_F2) | \
_SB_MAKEMASK1(K_WID_BIN_2CPU_FI_FD_H2) | \
_SB_MAKEMASK1(K_WID_BIN_1CPU_FI_FD_F2) | \
_SB_MAKEMASK1(K_WID_BIN_1CPU_FI_FD_H2))
#define S_WID_L2QTR 3
#define M_WID_L2QTR _SB_MAKEMASK(2,S_WID_L2QTR)
#define V_WID_L2QTR(x) _SB_MAKEVALUE(x,S_WID_L2QTR)
#define G_WID_L2QTR(x) _SB_GETVALUE(x,S_WID_L2QTR,M_WID_L2QTR)
#define M_WID_L2HALF _SB_MAKEMASK1(4)
#define S_WID_CPU0_L1I 5
#define M_WID_CPU0_L1I _SB_MAKEMASK(2,S_WID_CPU0_L1I)
#define V_WID_CPU0_L1I(x) _SB_MAKEVALUE(x,S_WID_CPU0_L1I)
#define G_WID_CPU0_L1I(x) _SB_GETVALUE(x,S_WID_CPU0_L1I,M_WID_CPU0_L1I)
#define S_WID_CPU0_L1D 7
#define M_WID_CPU0_L1D _SB_MAKEMASK(2,S_WID_CPU0_L1D)
#define V_WID_CPU0_L1D(x) _SB_MAKEVALUE(x,S_WID_CPU0_L1D)
#define G_WID_CPU0_L1D(x) _SB_GETVALUE(x,S_WID_CPU0_L1D,M_WID_CPU0_L1D)
#define S_WID_CPU1_L1I 9
#define M_WID_CPU1_L1I _SB_MAKEMASK(2,S_WID_CPU1_L1I)
#define V_WID_CPU1_L1I(x) _SB_MAKEVALUE(x,S_WID_CPU1_L1I)
#define G_WID_CPU1_L1I(x) _SB_GETVALUE(x,S_WID_CPU1_L1I,M_WID_CPU1_L1I)
#define S_WID_CPU1_L1D 11
#define M_WID_CPU1_L1D _SB_MAKEMASK(2,S_WID_CPU1_L1D)
#define V_WID_CPU1_L1D(x) _SB_MAKEVALUE(x,S_WID_CPU1_L1D)
#define G_WID_CPU1_L1D(x) _SB_GETVALUE(x,S_WID_CPU1_L1D,M_WID_CPU1_L1D)
#define S_WID_CPUX_L1I 0
#define M_WID_CPUX_L1I _SB_MAKEMASK(2,S_WID_CPUX_L1I)
#define V_WID_CPUX_L1I(x) _SB_MAKEVALUE(x,S_WID_CPUX_L1I)
#define G_WID_CPUX_L1I(x) _SB_GETVALUE(x,S_WID_CPUX_L1I,M_WID_CPUX_L1I)
#define S_WID_CPUX_L1D 2
#define M_WID_CPUX_L1D _SB_MAKEMASK(2,S_WID_CPUX_L1D)
#define V_WID_CPUX_L1D(x) _SB_MAKEVALUE(x,S_WID_CPUX_L1D)
#define G_WID_CPUX_L1D(x) _SB_GETVALUE(x,S_WID_CPUX_L1D,M_WID_CPUX_L1D)
#define S_WID_CPU0 5
#define S_WID_CPU1 9
#define S_WID_WAFERID 13
#define M_WID_WAFERID _SB_MAKEMASK(5,S_WID_WAFERID)
#define V_WID_WAFERID(x) _SB_MAKEVALUE(x,S_WID_WAFERID)
#define G_WID_WAFERID(x) _SB_GETVALUE(x,S_WID_WAFERID,M_WID_WAFERID)
#define S_WID_LOTID 18
#define M_WID_LOTID _SB_MAKEMASK(14,S_WID_LOTID)
#define V_WID_LOTID(x) _SB_MAKEVALUE(x,S_WID_LOTID)
#define G_WID_LOTID(x) _SB_GETVALUE(x,S_WID_LOTID,M_WID_LOTID)
#define M_WID_SWAPBITS (_SB_MAKEMASK1(2) | _SB_MAKEMASK1(4) | _SB_MAKEMASK1(10) | \
_SB_MAKEMASK1(20) | _SB_MAKEMASK1(18) | _SB_MAKEMASK1(26) )
#ifdef __ASSEMBLER__
#define WID_UNCONVOLUTE(wid,t1,t2,t3) \
li t1,M_WID_SWAPBITS ; \
and t1,t1,wid ; \
sll t1,t1,1 ; \
li t2,(M_WID_SWAPBITS << 1); \
and t2,t2,wid ; \
srl t2,t2,1 ; \
li t3, ~((M_WID_SWAPBITS | (M_WID_SWAPBITS << 1))) ; \
and wid,wid,t3 ; \
or wid,wid,t1 ; \
or wid,wid,t2
#else
#define WID_UNCONVOLUTE(wid) \
(((wid) & ~((M_WID_SWAPBITS | (M_WID_SWAPBITS << 1)))) | \
(((wid) & M_WID_SWAPBITS) << 1) | \
(((wid) & (M_WID_SWAPBITS<<1)) >> 1))
#endif
#endif