#ifndef _SPD_LP4_H
#define _SPD_LP4_H
#include <sys/bitext.h>
#include "spd_common.h"
#ifdef __cplusplus
extern "C" {
#endif
#define SPD_LP4_NBYTES 0x000
#define SPD_LP4_NBYTES_TOTAL(r) bitx8(r, 6, 4)
#define SPD_LP4_NBYTES_TOTAL_UNDEF 0
#define SPD_LP4_NBYTES_TOTAL_256 1
#define SPD_LP4_NBYTES_TOTAL_512 2
#define SPD_LP4_NBYTES_USED(r) bitx8(r, 3, 0)
#define SPD_LP4_NBYTES_USED_UNDEF 0
#define SPD_LP4_NBYTES_USED_128 1
#define SPD_LP4_NBYTES_USED_256 2
#define SPD_LP4_NBYTES_USED_384 3
#define SPD_LP4_NBYTES_USED_512 4
#define SPD_LP4_SPD_REV 0x001
#define SPD_LP4_SPD_REV_ENC(r) bitx8(r, 7, 4)
#define SPD_LP4_SPD_REV_ADD(r) bitx8(r, 3, 0)
#define SPD_LP4_SPD_REV_V1 1
#define SPD_LP4_DRAM_TYPE 0x002
#define SPD_LP4_MOD_TYPE 0x003
#define SPD_LP4_MOD_TYPE_ISHYBRID(r) bitx8(r, 7, 7)
#define SPD_LP4_MOD_TYPE_HYBRID(r) bitx8(r, 6, 4)
#define SPD_LP4_MOD_TYPE_HYBRID_NONE 0
#define SPD_LP4_MOD_TYPE_TYPE(r) bitx8(r, 3, 0)
#define SPD_LP4_MOD_TYPE_TYPE_EXT 0
#define SPD_LP4_MOD_TYPE_TYPE_LPDIMM 0x7
#define SPD_LP4_MOD_TYPE_TYPE_SOLDER 0xe
#define SPD_LP4_DENSITY 0x004
#define SPD_LP4_DENSITY_NBG_BITS(r) bitx8(r, 7, 6)
#define SPD_LP4_DENSITY_NBG_BITS_MAX 2
#define SPD_LP4_DENSITY_NBA_BITS(r) bitx8(r, 5, 4)
#define SPD_LP4_DENSITY_NBA_BITS_BASE 2
#define SPD_LP4_DENSITY_NBA_BITS_MAX 3
#define SPD_LP4_DENSITY_DENSITY(r) bitx8(r, 3, 0)
#define SPD_LP4_DENSITY_DENSITY_1Gb 2
#define SPD_LP4_DENSITY_DENSITY_2Gb 3
#define SPD_LP4_DENSITY_DENSITY_4Gb 4
#define SPD_LP4_DENSITY_DENSITY_8Gb 5
#define SPD_LP4_DENSITY_DENSITY_16Gb 6
#define SPD_LP4_DENSITY_DENSITY_32Gb 7
#define SPD_LP4_DENSITY_DENSITY_12Gb 8
#define SPD_LP4_DENSITY_DENSITY_24Gb 9
#define SPD_LP4_DENSITY_DENSITY_3Gb 10
#define SPD_LP4_DENSITY_DENSITY_6Gb 11
#define SPD_LP4_DENSITY_DENSITY_18Gb 12
#define SPD_LP4_ADDR 0x005
#define SPD_LP4_ADDR_NROWS(r) bitx8(r, 5, 3)
#define SPD_LP4_ADDR_NROWS_BASE 12
#define SPD_LP4_ADDR_NROWS_MAX 18
#define SPD_LP4_ADDR_NCOLS(r) bitx8(r, 2, 0)
#define SPD_LP4_ADDR_NCOLS_BASE 9
#define SPD_LP4_ADDR_NCOLS_MAX 12
#define SPD_LP4_PKG 0x006
#define SPD_LP4_PKG_TYPE(r) bitx8(r, 7, 7)
#define SPD_LP4_PKG_TYPE_MONO 0
#define SPD_LP4_PKG_TYPE_NOT 1
#define SPD_LP4_PKG_DIE_CNT(r) bitx8(r, 6, 4)
#define SPD_LP4_PKG_DIE_CNT_BASE 1
#define SPD_LP4_PKG_NCHAN(r) bitx8(r, 3, 2)
#define SPD_LP4_PKG_NCHAN_MAX 4
#define SPD_LP4_PKG_SL(r) bitx8(r, 1, 0)
#define SPD_LP4_PKG_SL_M1 1
#define SPD_LP4_PKG_SL_M2 3
#define SPD_LP4_OPT_FEAT 0x007
#define SPD_LP4_OPT_FEAT_MAW(r) bitx8(r, 5, 4)
#define SPD_LP4_OPT_FEAT_MAW_8192X 0
#define SPD_LP4_OPT_FEAT_MAW_4096X 1
#define SPD_LP4_OPT_FEAT_MAW_2048X 2
#define SPD_LP4_OPT_FEAT_MAC(r) bitx8(r, 3, 0)
#define SPD_LP4_OPT_FEAT_MAC_UNTESTED 0
#define SPD_LP4_OPT_FEAT_MAC_700K 1
#define SPD_LP4_OPT_FEAT_MAC_600K 2
#define SPD_LP4_OPT_FEAT_MAC_500K 3
#define SPD_LP4_OPT_FEAT_MAC_400K 4
#define SPD_LP4_OPT_FEAT_MAC_300K 5
#define SPD_LP4_OPT_FEAT_MAC_200K 6
#define SPD_LP4_OPT_FEAT_MAC_UNLIMITED 8
#define SPD_LP4_OPT_FEAT2 0x009
#define SPD_LP4_OPT_FEAT2_PPR(r) bitx8(r, 7, 6)
#define SPD_LP4_OPT_FEAT2_PPR_NOTSUP 0
#define SPD_LP4_OPT_FEAT2_PPR_1RPBG 1
#define SPD_LP4_OPT_FEAT2_SOFT_PPR(r) bitx8(r, 5, 5)
#define SPD_LP4_MOD_ORG 0x00c
#define SPD_LP4_MOD_ORG_IDENT(r) bitx8(r, 6, 6)
#define SPD_LP4_MOD_ORG_IDENT_STD 0
#define SPD_LP4_MOD_ORG_IDENT_BYTE 1
#define SPD_LP4_MOD_ORG_RANK_MIX(r) bitx8(r, 6, 6)
#define SPD_LP4_MOD_ORG_RANK_MIX_SYM 0
#define SPD_LP4_MOD_ORG_RANK_MIX_ASYM 1
#define SPD_LP4_MOD_ORG_NPKG_RANK(r) bitx8(r, 5, 3)
#define SPD_LP4_MOD_ORG_NPKG_RANK_BASE 1
#define SPD_LP4_MOD_ORG_NPKG_RANK_MAX 4
#define SPD_LP4_MOD_ORG_WIDTH(r) bitx8(r, 2, 0)
#define SPD_LP4_MOD_ORG_WIDTH_BASE 2
#define SPD_LP4_MOD_ORG_WIDTH_MAX 32
#define SPD_LP4_BUS_WIDTH 0x00d
#define SPD_LP4_BUS_WIDTH_NCHAN(r) bitx8(r, 7, 5)
#define SPD_LP4_BUS_WIDTH_NCHAN_1ch 0
#define SPD_LP4_BUS_WIDTH_NCHAN_2ch 1
#define SPD_LP4_BUS_WIDTH_NCHAN_3ch 2
#define SPD_LP4_BUS_WIDTH_NCHAN_4ch 3
#define SPD_LP4_BUS_WIDTH_NCHAN_8ch 4
#define SPD_LP4_BUS_WIDTH_EXT(r) bitx8(r, 4, 3)
#define SPD_LP4_BUS_WIDTH_EXT_NONE 0
#define SPD_LP4_BUS_WIDTH_PRI(r) bitx8(r, 2, 0)
#define SPD_LP4_BUS_WIDTH_PRI_BASE 3
#define SPD_LP4_BUS_WIDTH_PRI_MAX 64
#define SPD_LP4_MOD_THERM 0x00e
#define SPD_LP4_MOD_THERM_PRES(r) bitx8(r, 7, 7)
#define SPD_LP4_SIGLOAD 0x010
#define SPD_LP4_SIGLOAD1_DSM_LOAD(r) bitx8(r, 7, 6)
#define SPD_LP4_SIGLOAD1_DSM_LOAD_MAX 4
#define SPD_LP4_SIGLOAD1_CAC_LOAD(r) bitx8(r, 5, 3)
#define SPD_LP4_SIGLOAD1_CAC_LOAD_MAX 8
#define SPD_LP4_SIGLOAD1_CS_LOAD(r) bitx8(r, 2, 0)
#define SPD_LP4_SIGLOAD1_CS_LOAD_MAX 8
#define SPD_LP4_TIMEBASE 0x011
#define SPD_LP4_TIMEBASE_MTB(r) bitx8(r, 3, 2)
#define SPD_LP4_TIMEBASE_MTB_125ps 0
#define SPD_LP4_TIMEBASE_FTB(r) bitx8(r, 1, 0)
#define SPD_LP4_TIMEBASE_FTB_1ps 0
#define SPD_LP4_MTB_PS 125
#define SPD_LP4_FTB_PS 1
#define SPD_LP4_TCKAVG_MIN 0x012
#define SPD_LP4_TCKAVG_MIN_FINE 0x07d
#define SPD_LP4_TCKAVG_MAX 0x013
#define SPD_LP4_TCKAVG_MAX_FINE 0x07c
#define SPD_LP4_CAS_SUP0 0x014
#define SPD_LP4_CAS_SUP1 0x015
#define SPD_LP4_CAS_SUP2 0x016
#define SPD_LP4_CAS_SUP3 0x017
#define SPD_LP4_TAA_MIN 0x018
#define SPD_LP4_TAA_MIN_FINE 0x07b
#define SPD_LP4_RWLAT 0x019
#define SPD_LP4_RWLAT_WRITE(r) bitx8(r, 3, 2)
#define SPD_LP4_RWLAT_WRITE_A 0
#define SPD_LP4_RWLAT_WRITE_B 1
#define SPD_LP4_RWLAT_READ(r) bitx8(r, 1, 0)
#define SPD_LP4_RWLAT_DBIRD_DIS 0
#define SPD_LP4_RWLAT_DBIRD_EN 1
#define SPD_LP4_TRCD_MIN 0x01a
#define SPD_LP4_TRCD_MIN_FINE 0x07a
#define SPD_LP4_TRPAB_MIN 0x01b
#define SPD_LP4_TRPAB_MIN_FINE 0x079
#define SPD_LP4_TRPPB_MIN 0x01c
#define SPD_LP4_TRPPB_MIN_FINE 0x078
#define SPD_LP4_TRFCAB_MIN_LO 0x1d
#define SPD_LP4_TRFCAB_MIN_HI 0x1e
#define SPD_LP4_TRFCPB_MIN_LO 0x1f
#define SPD_LP4_TRFCPB_MIN_HI 0x20
#define SPD_LP4_MAP_DQ0 0x03c
#define SPD_LP4_MAP_DQ4 0x03d
#define SPD_LP4_MAP_DQ8 0x03e
#define SPD_LP4_MAP_DQ12 0x03f
#define SPD_LP4_MAP_DQ16 0x040
#define SPD_LP4_MAP_DQ20 0x041
#define SPD_LP4_MAP_DQ24 0x042
#define SPD_LP4_MAP_DQ28 0x043
#define SPD_LP4_MAP_CB0 0x044
#define SPD_LP4_MAP_CB4 0x045
#define SPD_LP4_MAP_DQ32 0x046
#define SPD_LP4_MAP_DQ36 0x047
#define SPD_LP4_MAP_DQ40 0x048
#define SPD_LP4_MAP_DQ44 0x049
#define SPD_LP4_MAP_DQ48 0x04a
#define SPD_LP4_MAP_DQ52 0x04b
#define SPD_LP4_MAP_DQ56 0x04c
#define SPD_LP4_MAP_DQ60 0x04d
#define SPD_LP4_MAP_PKG(r) bitx8(r, 7, 6)
#define SPD_LP4_MAP_PKG_FLIP 0
#define SPD_LP4_MAP_NIBBLE(r) bitx8(r, 5, 5)
#define SPD_LP4_MAP_IDX(r) bitx8(r, 4, 0)
#define SPD_LP4_MAP_IDX_UNSPEC 0
#define SPD_LP4_CRC_LSB 0x07e
#define SPD_LP4_CRC_MSB 0x07f
#define SPD_LP4_LPDIMM_HEIGHT 0x080
#define SPD_LP4_LPDIMM_HEIGHT_REV(r) bitx8(r, 7, 5)
#define SPD_LP4_LPDIMM_HEIGHT_MM(r) bitx8(r, 4, 0)
#define SPD_LP4_LPDIMM_HEIGHT_LT15MM 0
#define SPD_LP4_LPDIMM_HEIGHT_BASE 15
#define SPD_LP4_LPDIMM_THICK 0x081
#define SPD_LP4_LPDIMM_THICK_BACK(r) bitx8(r, 7, 4)
#define SPD_LP4_LPDIMM_THICK_FRONT(r) bitx8(r, 3, 0)
#define SPD_LP4_LPDIMM_THICK_BASE 1
#define SPD_LP4_LPDIMM_REF 0x082
#define SPD_LP4_LPDIMM_REF_EXT(r) bitx8(r, 7, 7)
#define SPD_LP4_LPDIMM_REF_REV(r) bitx8(r, 6, 5)
#define SPD_LP4_LPDIMM_REV_USE_HEIGHT 3
#define SPD_LP4_LPDIMM_REF_CARD(r) bitx8(r, 4, 0)
#define SPD_LP4_BLK1_CRC_START 0x80
#define SPD_LP4_BLK1_CRC_LSB 0xfe
#define SPD_LP4_BLK1_CRC_MSB 0xff
#ifdef __cplusplus
}
#endif
#endif