1 #ifndef SUNXI_HAL_SPINOR_H 2 #define SUNXI_HAL_SPINOR_H 3 4 #include <stdint.h> 5 #include <sunxi_hal_common.h> 6 #include <sunxi_hal_spi.h> 7 #include <hal_sem.h> 8 9 #ifdef __cplusplus 10 extern "C" { 11 #endif 12 13 #define SUNXI_HAL_SPINOR_API_VERSION 1 14 #define SUNXI_HAL_SPINOR_DRV_VERSION 0 15 16 typedef enum sunxi_hal_spinor_signal_event 17 { 18 ARM_FLASH_EVENT_READY = (1UL << 0), 19 ARM_FLASH_EVENT_ERROR = (1UL << 1), 20 } sunxi_hal_spinor_signal_event_t; 21 22 typedef struct sunxi_hal_spinor_status 23 { 24 uint32_t busy: 1; 25 uint32_t error: 1; 26 uint32_t reserved: 30; 27 } sunxi_hal_spinor_status_t; 28 29 typedef struct _sunxi_hal_spinor_sector_info 30 { 31 uint32_t start; 32 uint32_t end; 33 } sunxi_hal_spinor_sector_info; 34 35 typedef struct _sunxi_hal_spinor_info 36 { 37 sunxi_hal_spinor_sector_info *sector_info; 38 uint32_t sector_count; 39 uint32_t sector_size; 40 uint32_t page_size; 41 uint32_t program_unit; 42 uint8_t erased_value; 43 uint8_t reserved[3]; 44 } sunxi_hal_spinor_info; 45 46 typedef struct sunxi_hal_spinor_capabilities 47 { 48 uint32_t event_ready: 1; 49 uint32_t data_width: 2; 50 uint32_t erase_chip: 1; 51 uint32_t reserved: 28; 52 } sunxi_hal_spinor_capabilities_t; 53 54 int32_t hal_spinor_init(sunxi_hal_spinor_signal_event_t cb_event); 55 int32_t hal_spinor_deinit(void); 56 sunxi_hal_version_t hal_spinor_get_version(int32_t dev); 57 sunxi_hal_spinor_capabilities_t hal_spinor_get_capabilities(void); 58 sunxi_hal_spinor_status_t hal_spinor_get_status(void); 59 int32_t hal_spinor_power_control(sunxi_hal_power_state_e state); 60 int32_t hal_spinor_read_data(uint32_t addr, void *buf, uint32_t cnt); 61 int32_t hal_spinor_program_data(uint32_t addr, const void *buf, uint32_t cnt); 62 int32_t hal_spinor_erase_sector(uint32_t addr, uint32_t size); 63 int32_t hal_spinor_erase_chip(void); 64 int32_t hal_spinor_sync(void); 65 sunxi_hal_spinor_info *hal_spinor_get_info(void); 66 void hal_spinor_signal_event(uint32_t event); 67 int32_t hal_spinor_control(int32_t dev, uint32_t command, uint32_t arg); 68 69 #ifdef __cplusplus 70 } 71 #endif 72 73 #endif /*SUNXI_HAL_SPINOR_H*/ 74