X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=src%2Fkernel%2Fao_storage.h;h=ff8548eb150d71bb73a92ddf4457e7079a7a760f;hp=cf37a824db0a1c986603fd0b267d9cce59bcaaf4;hb=HEAD;hpb=0686a7b8aec524d81bda4c572549a3a068ce0eed diff --git a/src/kernel/ao_storage.h b/src/kernel/ao_storage.h index cf37a824..ff8548eb 100644 --- a/src/kernel/ao_storage.h +++ b/src/kernel/ao_storage.h @@ -31,15 +31,23 @@ typedef ao_storage_pos_t ao_pos_t; /* Total bytes of available storage */ +#ifndef ao_storage_total extern ao_pos_t ao_storage_total; +#endif /* Block size - device is erased in these units. At least 256 bytes */ +#ifndef ao_storage_block extern ao_pos_t ao_storage_block; +#endif #ifndef USE_STORAGE_CONFIG #define USE_STORAGE_CONFIG 1 #endif +#ifndef AO_STORAGE_ERASED_BYTE +#define AO_STORAGE_ERASED_BYTE 0xff +#endif + #if USE_STORAGE_CONFIG /* Byte offset of config block. Will be ao_storage_block bytes long */ extern ao_pos_t ao_storage_config; @@ -50,7 +58,9 @@ extern ao_pos_t ao_storage_config; #endif /* Storage unit size - device reads and writes must be within blocks of this size. Usually 256 bytes. */ +#ifndef ao_storage_unit extern uint16_t ao_storage_unit; +#endif /* Initialize above values. Can only be called once the OS is running */ void @@ -66,7 +76,13 @@ ao_storage_read(ao_pos_t pos, void *buf, uint16_t len); /* Erase a block of storage. This always clears ao_storage_block bytes */ uint8_t -ao_storage_erase(ao_pos_t pos); +ao_storage_erase(ao_pos_t pos, uint32_t len); + +/* Check storage starting at pos to see if the chunk there + * is erased + */ +uint8_t +ao_storage_is_erased(uint32_t pos); /* Flush any pending writes to stable storage */ void @@ -88,6 +104,10 @@ ao_storage_device_read(ao_pos_t pos, void *buf, uint16_t len); uint8_t ao_storage_device_write(ao_pos_t pos, void *buf, uint16_t len); +/* Erase device from pos through pos + ao_storage_block */ +uint8_t +ao_storage_device_erase(uint32_t pos); + /* Initialize low-level device bits */ void ao_storage_device_init(void);