/** @file
  This file the include all the external OEM Hooks.

@copyright
 Copyright (c) 1999 - 2015 Intel Corporation. All rights reserved
 This software and associated documentation (if any) is furnished
 under a license and may only be used or copied in accordance
 with the terms of the license. Except as permitted by the
 license, no part of this software or documentation may be
 reproduced, stored in a retrieval system, or transmitted in any
 form or by any means without the express written consent of
 Intel Corporation.
 This file contains an 'Intel Peripheral Driver' and is uniquely
 identified as "Intel Reference Module" and is licensed for Intel
 CPUs and chipsets under the terms of your license agreement with
 Intel or your vendor. This file may be modified by the user, subject
 to additional terms of the license agreement.

@par Specification Reference:
**/

#ifndef _OEMHOOKS_H_
#define _OEMHOOKS_H_

#include "Mrc.h"
#include "Regs.h"
#include "MmrcProjectDefinitionsGenerated.h"

#define MAX_OEM_SPD_ADDR  125

typedef UINT8 OEM_MEMORY_DIMM_CONFIGURATION;

extern UINT8  OemSpdDataMemorySolderDown[MAX_OEM_SPD_ADDR + 1];
extern OEM_MEMORY_DIMM_CONFIGURATION  OemMemoryDimmConfiguration[MAX_CHANNELS][MAX_DIMMS];

typedef enum {
  DimmInstalled = 0,    ///< Check Spd Data thru the Smbus
  SolderDownMemory      ///< Check fixed Spd table
} OEM_MEMORY_DIMM_TYPE;

#define MTRR_PHYS_BASE_0  0200h
#define MTRR_PHYS_MASK_0  0201h
#define MTRR_PHYS_BASE_1  0202h
#define MTRR_PHYS_MASK_1  0203h
#define MTRR_PHYS_BASE_2  0204h
#define MTRR_PHYS_MASK_2  0205h
#define MTRR_PHYS_BASE_3  0206h
#define MTRR_PHYS_MASK_3  0207h
#define MTRR_PHYS_BASE_4  0208h
#define MTRR_PHYS_MASK_4  0209h
#define MTRR_PHYS_BASE_5  020Ah
#define MTRR_PHYS_MASK_5  020Bh
#define MTRR_PHYS_BASE_6  020Ch
#define MTRR_PHYS_MASK_6  020Dh
#define MTRR_PHYS_BASE_7  020Eh
#define MTRR_PHYS_MASK_7  020Fh
#define MTRR_PHYS_BASE_8  0210h
#define MTRR_PHYS_MASK_8  0211h
#define MTRR_MEMORY_TYPE_WP 05h
#define MTRR_MEMORY_TYPE_WB 06h
#define MTRR_MEMORY_TYPE_WC 01h
#define TEMP_CACHE_SIZE_ASM 01000h
#define TEMP_CACHE_SIZE_CPP 0x1000

#define SUS_IO_START_ADDRESS      0x80
#define SCORE_IO_START_ADDRESS    0x00



/**
  This function detects the platform under test.

  @param[in,out]  MrcData  Pointer to MRC Output Data that contains MRC Parameters

  @retval  MMRC_SUCCESS    The platform was detected.
**/
MMRC_STATUS
OemGetPlatformType (
  IN  OUT   MMRC_DATA   *MrcData
)
;


/**
  This function sets the OEM specific information

  @param[in,out]  MrcData  Pointer to MRC Output Data that contains MRC Parameters

  @retval  MMRC_SUCCESS    OEM information set correctly
  @retval  Others          Otherwise
**/
MMRC_STATUS
OemSetMrcData (
  IN  OUT   MMRC_DATA   *MrcData
)
;


#endif
