2626/* APPLICATION INTERFACE DEFINITION RELEASE */
2727/* */
2828/* lx_api.h PORTABLE C */
29- /* 6.x */
29+ /* 6.2.1 */
3030/* AUTHOR */
3131/* */
3232/* William E. Lamie, Microsoft Corporation */
7575/* 10-31-2022 Xiuwen Cai Modified comment(s), and */
7676/* updated product constants, */
7777/* resulting in version 6.2.0 */
78- /* xx-xx-xxxx Xiuwen Cai Modified comment(s), */
78+ /* 03-08-2023 Xiuwen Cai Modified comment(s), */
7979/* modified NAND logic, */
80- /* resulting in version 6.x */
80+ /* added new driver interface */
81+ /* and user extension, */
82+ /* resulting in version 6.2.1 */
8183/* */
8284/**************************************************************************/
8385
@@ -190,7 +192,7 @@ typedef unsigned long long ULONG64;
190192#define AZURE_RTOS_LEVELX
191193#define LEVELX_MAJOR_VERSION 6
192194#define LEVELX_MINOR_VERSION 2
193- #define LEVELX_PATCH_VERSION 0
195+ #define LEVELX_PATCH_VERSION 1
194196
195197
196198/* Define general LevelX Constants. */
@@ -385,6 +387,14 @@ typedef struct LX_NAND_DEVICE_INFO_STRUCT
385387 ULONG lx_nand_device_info_base_erase_count ;
386388} LX_NAND_DEVICE_INFO ;
387389
390+
391+ /* Determine if the flash control block has an extension defined. If not,
392+ define the extension to whitespace. */
393+
394+ #ifndef LX_NAND_FLASH_USER_EXTENSION
395+ #define LX_NAND_FLASH_USER_EXTENSION
396+ #endif
397+
388398/* Define the NAND flash control block structure. */
389399
390400typedef struct LX_NAND_FLASH_STRUCT
@@ -454,6 +464,22 @@ typedef struct LX_NAND_FLASH_STRUCT
454464 ULONG lx_nand_flash_diagnostic_block_erased_verifies ;
455465 ULONG lx_nand_flash_diagnostic_page_erased_verifies ;
456466
467+ #ifdef LX_NAND_ENABLE_CONTROL_BLOCK_FOR_DRIVER_INTERFACE
468+ UINT (* lx_nand_flash_driver_read )(struct LX_NAND_FLASH_STRUCT * nand_flash , ULONG block , ULONG page , ULONG * destination , ULONG words );
469+ UINT (* lx_nand_flash_driver_write )(struct LX_NAND_FLASH_STRUCT * nand_flash , ULONG block , ULONG page , ULONG * source , ULONG words );
470+ UINT (* lx_nand_flash_driver_block_erase )(struct LX_NAND_FLASH_STRUCT * nand_flash , ULONG block , ULONG erase_count );
471+ UINT (* lx_nand_flash_driver_block_erased_verify )(struct LX_NAND_FLASH_STRUCT * nand_flash , ULONG block );
472+ UINT (* lx_nand_flash_driver_page_erased_verify )(struct LX_NAND_FLASH_STRUCT * nand_flash , ULONG block , ULONG page );
473+ UINT (* lx_nand_flash_driver_block_status_get )(struct LX_NAND_FLASH_STRUCT * nand_flash , ULONG block , UCHAR * bad_block_flag );
474+ UINT (* lx_nand_flash_driver_block_status_set )(struct LX_NAND_FLASH_STRUCT * nand_flash , ULONG block , UCHAR bad_block_flag );
475+ UINT (* lx_nand_flash_driver_extra_bytes_get )(struct LX_NAND_FLASH_STRUCT * nand_flash , ULONG block , ULONG page , UCHAR * destination , UINT size );
476+ UINT (* lx_nand_flash_driver_extra_bytes_set )(struct LX_NAND_FLASH_STRUCT * nand_flash , ULONG block , ULONG page , UCHAR * source , UINT size );
477+ UINT (* lx_nand_flash_driver_system_error )(struct LX_NAND_FLASH_STRUCT * nand_flash , UINT error_code , ULONG block , ULONG page );
478+
479+ UINT (* lx_nand_flash_driver_pages_read )(struct LX_NAND_FLASH_STRUCT * nand_flash , ULONG block , ULONG page , UCHAR * main_buffer , UCHAR * spare_buffer , ULONG pages );
480+ UINT (* lx_nand_flash_driver_pages_write )(struct LX_NAND_FLASH_STRUCT * nand_flash , ULONG block , ULONG page , UCHAR * main_buffer , UCHAR * spare_buffer , ULONG pages );
481+ UINT (* lx_nand_flash_driver_pages_copy )(struct LX_NAND_FLASH_STRUCT * nand_flash , ULONG source_block , ULONG source_page , ULONG destination_block , ULONG destination_page , ULONG pages , UCHAR * data_buffer );
482+ #else
457483 UINT (* lx_nand_flash_driver_read )(ULONG block , ULONG page , ULONG * destination , ULONG words );
458484 UINT (* lx_nand_flash_driver_write )(ULONG block , ULONG page , ULONG * source , ULONG words );
459485 UINT (* lx_nand_flash_driver_block_erase )(ULONG block , ULONG erase_count );
@@ -468,7 +494,7 @@ typedef struct LX_NAND_FLASH_STRUCT
468494 UINT (* lx_nand_flash_driver_pages_read )(ULONG block , ULONG page , UCHAR * main_buffer , UCHAR * spare_buffer , ULONG pages );
469495 UINT (* lx_nand_flash_driver_pages_write )(ULONG block , ULONG page , UCHAR * main_buffer , UCHAR * spare_buffer , ULONG pages );
470496 UINT (* lx_nand_flash_driver_pages_copy )(ULONG source_block , ULONG source_page , ULONG destination_block , ULONG destination_page , ULONG pages , UCHAR * data_buffer );
471-
497+ #endif
472498 UCHAR * lx_nand_flash_page_buffer ;
473499 UINT lx_nand_flash_page_buffer_size ;
474500
@@ -483,6 +509,10 @@ typedef struct LX_NAND_FLASH_STRUCT
483509 /* Define the NAND flash control block open next/previous pointers. */
484510 struct LX_NAND_FLASH_STRUCT * lx_nand_flash_open_next ,
485511 * lx_nand_flash_open_previous ;
512+
513+ /* Define the user extension in the flash control block. This
514+ is typically defined in lx_user.h. */
515+ LX_NAND_FLASH_USER_EXTENSION
486516
487517} LX_NAND_FLASH ;
488518
@@ -508,6 +538,13 @@ typedef struct LX_NOR_FLASH_EXTENDED_CACHE_ENTRY_STRUCT
508538} LX_NOR_FLASH_EXTENDED_CACHE_ENTRY ;
509539
510540
541+ /* Determine if the flash control block has an extension defined. If not,
542+ define the extension to whitespace. */
543+
544+ #ifndef LX_NOR_FLASH_USER_EXTENSION
545+ #define LX_NOR_FLASH_USER_EXTENSION
546+ #endif
547+
511548/* Define the NOR flash control block structure. */
512549
513550typedef struct LX_NOR_FLASH_STRUCT
@@ -553,11 +590,19 @@ typedef struct LX_NOR_FLASH_STRUCT
553590 ULONG lx_nor_flash_diagnostic_sector_not_free ;
554591 ULONG lx_nor_flash_diagnostic_sector_data_not_free ;
555592
593+ #ifdef LX_NOR_ENABLE_CONTROL_BLOCK_FOR_DRIVER_INTERFACE
594+ UINT (* lx_nor_flash_driver_read )(struct LX_NOR_FLASH_STRUCT * nor_flash , ULONG * flash_address , ULONG * destination , ULONG words );
595+ UINT (* lx_nor_flash_driver_write )(struct LX_NOR_FLASH_STRUCT * nor_flash , ULONG * flash_address , ULONG * source , ULONG words );
596+ UINT (* lx_nor_flash_driver_block_erase )(struct LX_NOR_FLASH_STRUCT * nor_flash , ULONG block , ULONG erase_count );
597+ UINT (* lx_nor_flash_driver_block_erased_verify )(struct LX_NOR_FLASH_STRUCT * nor_flash , ULONG block );
598+ UINT (* lx_nor_flash_driver_system_error )(struct LX_NOR_FLASH_STRUCT * nor_flash , UINT error_code );
599+ #else
556600 UINT (* lx_nor_flash_driver_read )(ULONG * flash_address , ULONG * destination , ULONG words );
557601 UINT (* lx_nor_flash_driver_write )(ULONG * flash_address , ULONG * source , ULONG words );
558602 UINT (* lx_nor_flash_driver_block_erase )(ULONG block , ULONG erase_count );
559603 UINT (* lx_nor_flash_driver_block_erased_verify )(ULONG block );
560604 UINT (* lx_nor_flash_driver_system_error )(UINT error_code );
605+ #endif
561606
562607 ULONG * lx_nor_flash_sector_buffer ;
563608 UINT lx_nor_flash_sector_mapping_cache_enabled ;
@@ -585,6 +630,10 @@ typedef struct LX_NOR_FLASH_STRUCT
585630 struct LX_NOR_FLASH_STRUCT * lx_nor_flash_open_next ,
586631 * lx_nor_flash_open_previous ;
587632
633+ /* Define the user extension in the flash control block. This
634+ is typically defined in lx_user.h. */
635+ LX_NOR_FLASH_USER_EXTENSION
636+
588637} LX_NOR_FLASH ;
589638
590639
0 commit comments