/*******************************************************************/
/************************* File Description ************************/
/*******************************************************************/
/* File Name:           $Workfile:   hmx_uprade_nvram.h  $
 * Version:             $Revision:   1.0  $
 * Original Author:     Yang Hyun Uk $
 * Current Author:      $Author: huyang@humaxdigital.com $
 * Date:                $Date: 2011.11.07
 * File Description:    Upgrade APIs
 * Module:
 * Remarks:
 */


/**
 * @author Hyunuk Yang(huyang@humaxdigital.com)
 * @date 07 Nov 2011
 */

/**
 * @note
 * Copyright (C) 2011 Humax Corporation. All Rights Reserved. <br>
 * This software is the confidential and proprietary information
 * of Humax Corporation. You may not use or distribute this software
 * except in compliance with the terms and conditions of any applicable license
 * agreement in writing between Humax Corporation and you.
 */

 /*@{*/

/**
 * @file hmx_upgrade_nvram.h
 */

#ifndef HMX_UPGRADE_NVRAM_H_
#define HMX_UPGRADE_NVRAM_H_
/*******************************************************************/
/**************************** Header Files**************************/
/*******************************************************************/
/* Start Including Header Files */
/* End Including Headers*/

/*******************************************************************/
/************************ Extern variables *************************/
/*******************************************************************/
/* Start Extern variablee */
extern int libupgrade_verbose;

/* End Extern variable */


/*******************************************************************/
/************************ Macro Definition *************************/
/*******************************************************************/
/* Start Macro definition */

/* End Macro definition */

/*******************************************************************/
/****************************** typedef ****************************/
/*******************************************************************/
/* Start typedef */

typedef enum tagNVRAM_FIELD {
  NVRAM_FIELD_SYSTEM_ID = 0,            // System Id
  NVRAM_FIELD_SERIAL_NO,
  NVRAM_FIELD_MAC_ADDR,
  NVRAM_FIELD_HDCP_KEY,
  NVRAM_FIELD_DTCP_KEY,
  NVRAM_FIELD_1ST_SERIAL_NUMBER,
  NVRAM_FIELD_2ND_SERIAL_NUMBER,
  NVRAM_FIELD_GPN,
  NVRAM_FIELD_MAC_ADDR_MOCA,
  NVRAM_FIELD_MAC_ADDR_BT,
  NVRAM_FIELD_GOOGLE_SSL_PEM,
  NVRAM_FIELD_GOOGLE_SSL_CRT,
  NVRAM_FIELD_LOADER_VERSION,           // Version of boot Loader
  NVRAM_FIELD_ACTIVATED_KERNEL_NUM,     // ACTIVATED_KERNEL_NUM
  NVRAM_FIELD_MTD_TYPE_FOR_KERNEL,      // MTD_TYPE_FOR_KERNEL
  NVRAM_FIELD_ACTIVATED_KERNEL_NAME,    // "kernel0", lookup mtd partition
  NVRAM_FIELD_PLATFORM_NAME,            // Platform name, e.g. "gfhd100"
  NVRAM_FIELD_EXTRA_KERNEL_OPT,         // string to append to cmdline
  NVRAM_FIELD_PAIRED_DISK,              // serial number of the disk
  NVRAM_FIELD_PARTITION_VER,            // partition version
  NVRAM_FIELD_DUMMY = 0xFFFF
} NVRAM_FIELD_T;

/* Start global function prototypes */
typedef enum HMX_NVRAM_PARTITION_e {
  HMX_NVRAM_PARTITION_RO,
  HMX_NVRAM_PARTITION_RW,
  HMX_NVRAM_PARTITION_W_RAWFS,
  HMX_NVRAM_PARTITION_MAX
} HMX_NVRAM_PARTITION_E;


typedef enum {
  DRV_OK = 0,
  DRV_ERR,
  DRV_ERR_INVALID_PARAMETER,
  DRV_ERR_INITIALIZATION,
  DRV_ERR_EVENT_INITIALIZATION,
  DRV_ERR_OUTOFMEMORY,
  DRV_ERR_EXTERNAL_ERROR
} DRV_Error;

/* End typedef */


/*******************************************************************/
/******************** global function prototype ********************/
/*******************************************************************/
extern int HMX_UPGRADE_NVRAM_Write(unsigned long offset, unsigned char * data,
                                   unsigned int size );
extern int HMX_UPGRADE_NVRAM_Read(unsigned long offset, unsigned char * data,
                                  unsigned int size );

/*******************************************************************/
/******************** global function prototype ********************/
/*******************************************************************/
DRV_Error       HMX_NVRAM_Init(void);
DRV_Error       HMX_NVRAM_Write(HMX_NVRAM_PARTITION_E partition,
                                unsigned char *pName, unsigned int offset,
                                unsigned char *pValue, unsigned int ulSize);
DRV_Error       HMX_NVRAM_Read(HMX_NVRAM_PARTITION_E partition,
                               unsigned char *pName, unsigned int offset,
                               unsigned char *pValue, unsigned int ulSize);
DRV_Error       HMX_NVRAM_GetField(NVRAM_FIELD_T field, unsigned int offset,
                                   void *data, int nDataSize);
DRV_Error       HMX_NVRAM_SetField(NVRAM_FIELD_T field, unsigned int offset,
                                   void *data, int nDataSize);
DRV_Error       HMX_NVRAM_GetLength(NVRAM_FIELD_T field, int *pLen);
DRV_Error       HMX_NVRAM_Remove(HMX_NVRAM_PARTITION_E partition,
                                 unsigned char *pName);
DRV_Error       HMX_NVRAM_Dir(void);
/* End global function prototypes */


#endif  // HMX_UPGRADE_NVRAM_H_
/*@}*/
