Home | History | Annotate | Download | only in NorFlashDxe
      1 /** @file
      2 *
      3 *  Copyright (c) 2015, Hisilicon Limited. All rights reserved.
      4 *  Copyright (c) 2015, Linaro Limited. All rights reserved.
      5 *
      6 *  This program and the accompanying materials
      7 *  are licensed and made available under the terms and conditions of the BSD License
      8 *  which accompanies this distribution.  The full text of the license may be found at
      9 *  http://opensource.org/licenses/bsd-license.php
     10 *
     11 *  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     12 *  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     13 *
     14 **/
     15 
     16 #ifndef _NOR_FLASH_HW_H_
     17 #define _NOR_FLASH_HW_H_
     18 
     19 #include <Uefi/UefiBaseType.h>
     20 
     21 
     22 #define FOUR_BYTE_UNIT    4
     23 #define FLASH_MAX_UNIT    4
     24 
     25 #define FLASH_DEVICE_NUM  0x10
     26 
     27 
     28 
     29 typedef struct {
     30     UINT32 ManufacturerID;
     31     UINT32 DeviceID1;
     32     UINT32 DeviceID2;
     33     UINT32 DeviceID3;
     34     UINT8  ParallelNum;
     35     UINT32 SingleChipSize;
     36     UINT32 BlockSize;
     37     UINT32 BufferProgramSize;
     38     UINT32 CommandType;
     39 }NOR_FLASH_INFO_TABLE;
     40 
     41 /*Define Command Address And Data*/
     42 /*reset*/
     43 typedef struct {
     44     UINT32 CommandType;
     45     UINT32 ResetData;
     46 }FLASH_COMMAND_RESET;
     47 
     48 /*manufacture ID & Device ID*/
     49 typedef struct {
     50     UINT32 CommandType;
     51     UINT32 ManuIDAddressStep1;
     52     UINT32 ManuIDDataStep1;
     53     UINT32 ManuIDAddressStep2;
     54     UINT32 ManuIDDataStep2;
     55     UINT32 ManuIDAddressStep3;
     56     UINT32 ManuIDDataStep3;
     57     UINT32 ManuIDAddress;
     58 
     59     UINT32 DeviceIDAddress1;
     60     UINT32 DeviceIDAddress2;
     61     UINT32 DeviceIDAddress3;
     62 }FLASH_COMMAND_ID;
     63 
     64 /*Write Buffer*/
     65 typedef struct {
     66     UINT32 CommandType;
     67     UINT32 BufferProgramAddressStep1;
     68     UINT32 BufferProgramDataStep1;
     69     UINT32 BufferProgramAddressStep2;
     70     UINT32 BufferProgramDataStep2;
     71     UINT32 BufferProgramDataStep3;
     72     UINT32 BufferProgramtoFlash;
     73 }FLASH_COMMAND_WRITE;
     74 
     75 /*erase*/
     76 typedef struct {
     77     UINT32 CommandType;
     78     UINT32 SectorEraseAddressStep1;
     79     UINT32 SectorEraseDataStep1;
     80     UINT32 SectorEraseAddressStep2;
     81     UINT32 SectorEraseDataStep2;
     82     UINT32 SectorEraseAddressStep3;
     83     UINT32 SectorEraseDataStep3;
     84     UINT32 SectorEraseAddressStep4;
     85     UINT32 SectorEraseDataStep4;
     86     UINT32 SectorEraseAddressStep5;
     87     UINT32 SectorEraseDataStep5;
     88     UINT32 SectorEraseDataStep6;
     89 }FLASH_COMMAND_ERASE;
     90 
     91 
     92 typedef struct {
     93     UINT32 Base;
     94     UINT32 InfIndex;
     95     UINT32 ReIndex;
     96     UINT32 IdIndex;
     97     UINT32 WIndex;
     98     UINT32 EIndex;
     99 }FLASH_INDEX;
    100 
    101 
    102 extern EFI_STATUS FlashInit(UINT32 Base);
    103 extern EFI_STATUS SectorErase(UINT32 Base, UINT32 Offset);
    104 extern EFI_STATUS BufferWrite(UINT32 Offset, void *pData, UINT32 Length);
    105 extern EFI_STATUS IsNeedToWrite(UINT32 Base, UINT32 Offset, UINT8 *Buffer, UINT32 Length);
    106 
    107 
    108 extern NOR_FLASH_INFO_TABLE gFlashInfo[FLASH_DEVICE_NUM];
    109 extern FLASH_COMMAND_RESET gFlashCommandReset[FLASH_DEVICE_NUM];
    110 extern FLASH_COMMAND_ID gFlashCommandId[FLASH_DEVICE_NUM];
    111 extern FLASH_COMMAND_WRITE gFlashCommandWrite[FLASH_DEVICE_NUM];
    112 extern FLASH_COMMAND_ERASE gFlashCommandErase[FLASH_DEVICE_NUM];
    113 extern FLASH_INDEX gIndex;
    114 
    115 
    116 #endif
    117