libmem.h File Reference

The main LIBMEM header file.

More...

#include <stddef.h>
#include <stdint.h>


Data Structures

struct   _libmem_geometry_t
  A structure describing a geometry region. More...
struct   _libmem_flash_info_t
  A structure containing information about a specific FLASH chip. More...
struct   _libmem_sector_info_t
  A structure describing a sector. More...
struct   _libmem_driver_functions_t
  A structure containing pointers to a LIBMEM driver's functions. More...
struct   _libmem_ext_driver_functions_t
  A structure containing pointers to a LIBMEM driver's extended functions. More...
struct   _libmem_driver_handle_t
  A LIBMEM driver handle structure. More...

Defines

#define  LIBMEM_STATUS_SUCCESS    (1)
#define  LIBMEM_STATUS_ERROR    (0)
#define  LIBMEM_STATUS_TIMEOUT    (-1)
#define  LIBMEM_STATUS_LOCKED    (-2)
#define  LIBMEM_STATUS_NOT_IMPLEMENTED    (-3)
#define  LIBMEM_STATUS_GEOMETRY_REGION_OVERFLOW    (-4)
#define  LIBMEM_STATUS_NO_DRIVER    (-5)
#define  LIBMEM_STATUS_CFI_ERROR    (-6)
#define  LIBMEM_STATUS_INVALID_RANGE    (-7)
#define  LIBMEM_STATUS_INVALID_PARAMETER    (-8)
#define  LIBMEM_STATUS_INVALID_WIDTH    (-9)
#define  LIBMEM_CFI_CMDSET_NONE    (0x0000)
#define  LIBMEM_CFI_CMDSET_INTEL_EXTENDED    (0x0001)
#define  LIBMEM_CFI_CMDSET_AMD_STANDARD    (0x0002)
#define  LIBMEM_CFI_CMDSET_INTEL_STANDARD    (0x0003)
#define  LIBMEM_CFI_CMDSET_AMD_EXTENDED    (0x0004)
#define  LIBMEM_CFI_CMDSET_WINBOND_STANDARD    (0x0006)
#define  LIBMEM_CFI_CMDSET_MITSUBISHI_STANDARD    (0x0100)
#define  LIBMEM_CFI_CMDSET_MITSUBISHI_EXTENDED    (0x0101)
#define  LIBMEM_CFI_CMDSET_SST_PAGE_WRITE    (0x0102)
#define  LIBMEM_CFI_CMDSET_RESERVED    (0xFFFF)
#define  LIBMEM_ADDRESS_IN_RANGE(address, startAddress, endAddress)   ((address >= startAddress) && (address <= endAddress))
  Macro to determine whether an address is within an address range.
#define  LIBMEM_RANGE_WITHIN_RANGE(r1StartAddress, r1EndAddress, r2StartAddress, r2EndAddress)   (LIBMEM_ADDRESS_IN_RANGE(r1StartAddress, r2StartAddress, r2EndAddress) && LIBMEM_ADDRESS_IN_RANGE(r1EndAddress, r2StartAddress, r2EndAddress))
  Macro to determine whether an address range 1 is within address range 2.
#define  LIBMEM_RANGE_OVERLAPS_RANGE(r1StartAddress, r1EndAddress, r2StartAddress, r2EndAddress)   (LIBMEM_ADDRESS_IN_RANGE(r1StartAddress, r2StartAddress, r2EndAddress) || LIBMEM_ADDRESS_IN_RANGE(r1EndAddress, r2StartAddress, r2EndAddress))
  Macro to determine whether an address range 1 overlaps address range 2.
#define  LIBMEM_RANGE_OCCLUDES_RANGE(r1StartAddress, r1EndAddress, r2StartAddress, r2EndAddress)   (LIBMEM_RANGE_OVERLAPS_RANGE(r1StartAddress, r1EndAddress, r2StartAddress, r2EndAddress) || LIBMEM_RANGE_OVERLAPS_RANGE(r2StartAddress, r2EndAddress, r1StartAddress, r1EndAddress))
  Macro to determine whether an address range 1 overlaps address range 2 or vice versa.
#define  LIBMEM_ADDRESS_IS_ALIGNED(address, width)   ((((uint32_t)address) & ((width) - 1)) == 0)
  Macro to determine whether an address is aligned to a specified width.
#define  LIBMEM_ALIGNED_ADDRESS(address, width)   ((uint8_t *)(((uint32_t)address) & (~((width) - 1))))
  Macro to return an address aligned to a specified width.
#define  LIBMEM_INLINE    inline

Typedefs

typedef _libmem_driver_handle_t   libmem_driver_handle_t
typedef _libmem_driver_functions_t   libmem_driver_functions_t
typedef _libmem_ext_driver_functions_t   libmem_ext_driver_functions_t
typedef _libmem_geometry_t   libmem_geometry_t
typedef _libmem_flash_info_t   libmem_flash_info_t
typedef _libmem_sector_info_t   libmem_sector_info_t
typedef int(*  libmem_driver_write_fn_t )(libmem_driver_handle_t *h, uint8_t *dest, const uint8_t *src, size_t size)
  A function pointer to a LIBMEM driver's write function.
typedef int(*  libmem_driver_fill_fn_t )(libmem_driver_handle_t *h, uint8_t *dest, uint8_t c, size_t size)
  A function pointer to a LIBMEM driver's fill function.
typedef int(*  libmem_driver_erase_fn_t )(libmem_driver_handle_t *h, uint8_t *start, size_t size, uint8_t **erase_start, size_t *erase_size)
  A function pointer to a LIBMEM driver's erase function.
typedef int(*  libmem_driver_lock_fn_t )(libmem_driver_handle_t *h, uint8_t *start, size_t size)
  A function pointer to a LIBMEM driver's lock function.
typedef int(*  libmem_driver_unlock_fn_t )(libmem_driver_handle_t *h, uint8_t *start, size_t size)
  A function pointer to a LIBMEM driver's unlock function.
typedef int(*  libmem_driver_flush_fn_t )(libmem_driver_handle_t *h)
  A function pointer to a LIBMEM driver's flush function.
typedef int(*  libmem_driver_inrange_fn_t )(libmem_driver_handle_t *h, const uint8_t *dest)
  A function pointer to a LIBMEM driver's inrange extended function.
typedef int(*  libmem_driver_read_fn_t )(libmem_driver_handle_t *h, uint8_t *dest, const uint8_t *src, size_t size)
  A function pointer to a LIBMEM driver's read extended function.
typedef uint32_t(*  libmem_driver_crc32_fn_t )(libmem_driver_handle_t *h, const uint8_t *start, size_t size, uint32_t crc)
  A function pointer to a LIBMEM driver's crc32 extended function.
typedef int(*  libmem_foreach_driver_fn_t )(libmem_driver_handle_t *h)
  A function pointer to a function handling a libmem_foreach_driver call.
typedef int(*  libmem_foreach_sector_fn_t )(libmem_driver_handle_t *h, libmem_sector_info_t *sector_info)
  A function pointer to a function handling a libmem_foreach_sector or libmem_foreach_sector_in_range call.
typedef uint32_t(*  libmem_get_ticks_fn_t )(void)
  A function pointer to a function returning the current timer tick count.

Functions

void  libmem_enable_timeouts (libmem_get_ticks_fn_t get_ticks_fn, uint32_t ticks_per_second)
  Enable LIBMEM operation timeouts.
int  libmem_write (uint8_t *dest, const uint8_t *src, size_t size)
  Write a block of data using a LIBMEM driver.
int  libmem_fill (uint8_t *dest, uint8_t c, size_t size)
  Fill memory with a specific data value using a LIBMEM driver.
int  libmem_read (uint8_t *dest, const uint8_t *src, size_t size)
  Read a block of data using a LIBMEM driver.
int  libmem_erase (uint8_t *start, size_t size, uint8_t **erase_start, size_t *erase_size)
  Erase a block of memory using a LIBMEM driver.
int  libmem_erase_all (void)
  Erase all memory using LIBMEM drivers.
int  libmem_lock (uint8_t *start, size_t size)
  Lock a block of memory using a LIBMEM driver.
int  libmem_lock_all (void)
  Lock all memory using LIBMEM drivers.
int  libmem_unlock (uint8_t *start, size_t size)
  Unlock a block of memory using a LIBMEM driver.
int  libmem_unlock_all (void)
  Unlock all memory using LIBMEM drivers.
int  libmem_flush (void)
  Flush any outstanding memory operations and return memory to read mode if applicable.
uint32_t  libmem_crc32 (const uint8_t *start, size_t size, uint32_t crc)
  Compute CRC-32 checksum of an address range using a LIBMEM driver.
void  libmem_register_driver (libmem_driver_handle_t *h, uint8_t *start, size_t size, const libmem_geometry_t *geometry, const libmem_flash_info_t *flash_info, const libmem_driver_functions_t *driver_functions, const libmem_ext_driver_functions_t *ext_driver_functions)
  Register a LIBMEM driver instance.
int  libmem_foreach_sector (libmem_driver_handle_t *h, libmem_foreach_sector_fn_t fn)
  A helper function for iterating through all sectors handled by a LIBMEM driver.
int  libmem_foreach_sector_in_range (libmem_driver_handle_t *h, uint8_t *range_start, size_t range_size, libmem_foreach_sector_fn_t fn, uint8_t **actual_range_start, size_t *actual_range_size)
  A helper function for iterating through all sectors handled by a driver that are within a specific address range.
int  libmem_get_sector_number (uint8_t *start, const libmem_geometry_t *geometry, const uint8_t *p)
  A helper function that returns the sector number of an address within a specified geometry.
int  libmem_get_number_of_sectors (const libmem_geometry_t *geometry)
  A helper function that returns the number of sectors described by a geometry description.
int  libmem_get_number_of_regions (const libmem_geometry_t *geometry)
  A helper function that returns the number of geometry regions described by a geometry description.
int  libmem_get_sector_info (uint8_t *start, const libmem_geometry_t *geometry, const uint8_t *p, libmem_sector_info_t *info)
  A helper function that returns the sector information for an address within a specified geometry.
size_t  libmem_get_geometry_size (const libmem_geometry_t *geometry)
  A helper function that returns the size of the address range described by a geometry description.
uint32_t  libmem_get_ticks (void)
  A helper function that returns the current timer tick count.
uint32_t  libmem_crc32_direct (const uint8_t *start, size_t size, uint32_t crc)
  Compute CRC-32 checksum of an address range.
libmem_driver_handle_t libmem_get_driver (const uint8_t *dest)
  A helper function that returns the handle of a LIBMEM driver that is responsible for a specific memory location.
int  libmem_foreach_driver (libmem_foreach_driver_fn_t fn)
  A helper function for iterating through all LIBMEM drivers.
int  libmem_cfi_get_info (uint8_t *start, size_t *size, libmem_geometry_t *geometry, int max_geometry_regions, libmem_flash_info_t *flash_info)
  Return a FLASH memory device's common flash interface (CFI) information.
int  libmem_register_cfi_driver (libmem_driver_handle_t *h, uint8_t *start, libmem_geometry_t *geometry, int max_geometry_regions, libmem_flash_info_t *flash_info)
  Register a LIBMEM FLASH driver based on the FLASH's CFI information.
int  libmem_register_cfi_0001_8_driver (libmem_driver_handle_t *h, uint8_t *start, size_t size, const libmem_geometry_t *geometry, const libmem_flash_info_t *flash_info)
  Register an 8 bit CFI command set 1 (Intel Extended) LIBMEM driver.
int  libmem_register_cfi_0001_16_driver (libmem_driver_handle_t *h, uint8_t *start, size_t size, const libmem_geometry_t *geometry, const libmem_flash_info_t *flash_info)
  Register a 16 bit CFI command set 1 (Intel Extended) LIBMEM driver.
int  libmem_register_cfi_0002_16_driver (libmem_driver_handle_t *h, uint8_t *start, size_t size, const libmem_geometry_t *geometry, const libmem_flash_info_t *flash_info)
  Register a 16 bit CFI command set 2 (AMD Standard) LIBMEM driver.
int  libmem_register_cfi_0003_8_driver (libmem_driver_handle_t *h, uint8_t *start, size_t size, const libmem_geometry_t *geometry, const libmem_flash_info_t *flash_info)
  Register an 8 bit CFI command set 3 (Intel Standard) LIBMEM driver.
int  libmem_register_cfi_0003_16_driver (libmem_driver_handle_t *h, uint8_t *start, size_t size, const libmem_geometry_t *geometry, const libmem_flash_info_t *flash_info)
  Register an 16 bit CFI command set 3 (Intel Standard) LIBMEM driver.
int  libmem_register_cfi_intel_driver (libmem_driver_handle_t *h, uint8_t *start, size_t size, const libmem_geometry_t *geometry, const libmem_flash_info_t *flash_info)
  Register a combined multi-width CFI command set 1 & 3 (Intel) LIBMEM driver.
int  libmem_register_st_m28w320cb_driver (libmem_driver_handle_t *h, uint8_t *start)
  Register an LIBMEM driver for an ST M28W320CB FLASH chip.
int  libmem_register_st_m28w320ct_driver (libmem_driver_handle_t *h, uint8_t *start)
  Register an LIBMEM driver for an ST M28W320CT FLASH chip.
int  libmem_register_sst39xFx00A_16_driver (libmem_driver_handle_t *h, uint8_t *start, size_t size, const libmem_geometry_t *geometry, const libmem_flash_info_t *flash_info)
  Register a LIBMEM driver for a 16 bit SST39xFx00A FLASH chip.
int  libmem_register_ram_driver (libmem_driver_handle_t *h, uint8_t *start, size_t size)
  Register a simple LIBMEM driver that directly accesses RAM.

Variables

libmem_driver_handle_t libmem_drivers
libmem_get_ticks_fn_t   libmem_get_ticks_fn
uint32_t  libmem_ticks_per_second


Detailed Description

The main LIBMEM header file.

This header file contains all the definitions for the LIBMEM library.