/** @file

  Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>

  This program and the accompanying materials
  are licensed and made available under the terms and conditions of the BSD License
  which accompanies this distribution.  The full text of the license may be found at
  http://opensource.org/licenses/bsd-license.php

  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

**/

#ifndef FLASH_H
#define FLASH_H

#include <Uefi.h>

#include <Library/BaseLib.h>
#include <Library/BaseMemoryLib.h>
#include <Library/MemoryAllocationLib.h>
#include <Library/DebugLib.h>
#include <Library/IoLib.h>
#include <Library/PcdLib.h>
#include <Library/UefiBootServicesTableLib.h>
#include <Library/IoLib.h>

#include <Protocol/BlockIo.h>
#include <Protocol/Cpu.h>
#include <Omap3530/Omap3530.h>

#define PAGE_SIZE(x)             ((x) & 0x01)
#define PAGE_SIZE_2K_VAL         (0x01UL)

#define SPARE_AREA_SIZE(x)       (((x) >> 2) & 0x01)
#define SPARE_AREA_SIZE_64B_VAL  (0x1UL)

#define BLOCK_SIZE(x)            (((x) >> 4) & 0x01)
#define BLOCK_SIZE_128K_VAL      (0x01UL)

#define ORGANIZATION(x)          (((x) >> 6) & 0x01)
#define ORGANIZATION_X8          (0x0UL)
#define ORGANIZATION_X16         (0x1UL)

#define PAGE_SIZE_512B           (512)
#define PAGE_SIZE_2K             (2048)
#define PAGE_SIZE_4K             (4096)
#define SPARE_AREA_SIZE_16B      (16)
#define SPARE_AREA_SIZE_64B      (64)

#define BLOCK_SIZE_16K           (16*1024)
#define BLOCK_SIZE_128K          (128*1024)

#define BLOCK_COUNT              (2048)
#define LAST_BLOCK               (BLOCK_COUNT - 1)

#define ECC_POSITION             2

//List of commands.
#define RESET_CMD                0xFF
#define READ_ID_CMD              0x90

#define READ_STATUS_CMD          0x70

#define PAGE_READ_CMD            0x00
#define PAGE_READ_CONFIRM_CMD    0x30

#define BLOCK_ERASE_CMD          0x60
#define BLOCK_ERASE_CONFIRM_CMD  0xD0

#define PROGRAM_PAGE_CMD         0x80
#define PROGRAM_PAGE_CONFIRM_CMD 0x10

//Nand status register bit definition
#define NAND_SUCCESS             (0x0UL << 0)
#define NAND_FAILURE             BIT0

#define NAND_BUSY                (0x0UL << 6)
#define NAND_READY               BIT6

#define NAND_RESET_STATUS        (0x60UL << 0)

#define MAX_RETRY_COUNT          1500


typedef struct {
  UINT8 ManufactureId;
  UINT8 DeviceId;
  UINT8 BlockAddressStart; //Start of the Block address in actual NAND
  UINT8 PageAddressStart;  //Start of the Page address in actual NAND
} NAND_PART_INFO_TABLE;

typedef struct {
  UINT8     ManufactureId;
  UINT8     DeviceId;
  UINT8     Organization;      //x8 or x16
  UINT32    PageSize;
  UINT32    SparePageSize;
  UINT32    BlockSize;
  UINT32    NumPagesPerBlock;
  UINT8     BlockAddressStart; //Start of the Block address in actual NAND
  UINT8     PageAddressStart;  //Start of the Page address in actual NAND
} NAND_FLASH_INFO;

#endif //FLASH_H
