NorFlashHw.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  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. #ifndef _NOR_FLASH_HW_H_
  16. #define _NOR_FLASH_HW_H_
  17. #include <Uefi/UefiBaseType.h>
  18. #define FOUR_BYTE_UNIT 4
  19. #define FLASH_MAX_UNIT 4
  20. #define FLASH_DEVICE_NUM 0x10
  21. typedef struct {
  22. UINT32 ManufacturerID;
  23. UINT32 DeviceID1;
  24. UINT32 DeviceID2;
  25. UINT32 DeviceID3;
  26. UINT8 ParallelNum;
  27. UINT32 SingleChipSize;
  28. UINT32 BlockSize;
  29. UINT32 BufferProgramSize;
  30. UINT32 CommandType;
  31. }NOR_FLASH_INFO_TABLE;
  32. /*Define Command Address And Data*/
  33. /*reset*/
  34. typedef struct {
  35. UINT32 CommandType;
  36. UINT32 ResetData;
  37. }FLASH_COMMAND_RESET;
  38. /*manufacture ID & Device ID*/
  39. typedef struct {
  40. UINT32 CommandType;
  41. UINT32 ManuIDAddressStep1;
  42. UINT32 ManuIDDataStep1;
  43. UINT32 ManuIDAddressStep2;
  44. UINT32 ManuIDDataStep2;
  45. UINT32 ManuIDAddressStep3;
  46. UINT32 ManuIDDataStep3;
  47. UINT32 ManuIDAddress;
  48. UINT32 DeviceIDAddress1;
  49. UINT32 DeviceIDAddress2;
  50. UINT32 DeviceIDAddress3;
  51. }FLASH_COMMAND_ID;
  52. /*Write Buffer*/
  53. typedef struct {
  54. UINT32 CommandType;
  55. UINT32 BufferProgramAddressStep1;
  56. UINT32 BufferProgramDataStep1;
  57. UINT32 BufferProgramAddressStep2;
  58. UINT32 BufferProgramDataStep2;
  59. UINT32 BufferProgramDataStep3;
  60. UINT32 BufferProgramtoFlash;
  61. }FLASH_COMMAND_WRITE;
  62. /*erase*/
  63. typedef struct {
  64. UINT32 CommandType;
  65. UINT32 SectorEraseAddressStep1;
  66. UINT32 SectorEraseDataStep1;
  67. UINT32 SectorEraseAddressStep2;
  68. UINT32 SectorEraseDataStep2;
  69. UINT32 SectorEraseAddressStep3;
  70. UINT32 SectorEraseDataStep3;
  71. UINT32 SectorEraseAddressStep4;
  72. UINT32 SectorEraseDataStep4;
  73. UINT32 SectorEraseAddressStep5;
  74. UINT32 SectorEraseDataStep5;
  75. UINT32 SectorEraseDataStep6;
  76. }FLASH_COMMAND_ERASE;
  77. typedef struct {
  78. UINT32 Base;
  79. UINT32 InfIndex;
  80. UINT32 ReIndex;
  81. UINT32 IdIndex;
  82. UINT32 WIndex;
  83. UINT32 EIndex;
  84. }FLASH_INDEX;
  85. extern EFI_STATUS FlashInit(UINT32 Base);
  86. extern EFI_STATUS SectorErase(UINT32 Base, UINT32 Offset);
  87. extern EFI_STATUS BufferWrite(UINT32 Offset, void *pData, UINT32 Length);
  88. extern EFI_STATUS IsNeedToWrite(UINT32 Base, UINT32 Offset, UINT8 *Buffer, UINT32 Length);
  89. extern NOR_FLASH_INFO_TABLE gFlashInfo[FLASH_DEVICE_NUM];
  90. extern FLASH_COMMAND_RESET gFlashCommandReset[FLASH_DEVICE_NUM];
  91. extern FLASH_COMMAND_ID gFlashCommandId[FLASH_DEVICE_NUM];
  92. extern FLASH_COMMAND_WRITE gFlashCommandWrite[FLASH_DEVICE_NUM];
  93. extern FLASH_COMMAND_ERASE gFlashCommandErase[FLASH_DEVICE_NUM];
  94. extern FLASH_INDEX gIndex;
  95. #endif