static uint32_t check_crc(mdev_t *fl_drv, uint32_t offset, uint32_t len, uint32_t crc) { uint32_t dummy_buf[32]; uint32_t result = 0, blk = 128; #ifndef CONFIG_SOFTWARE_CRC32 mdev_t *crc_drv = crc_drv_open(MDEV_CRC_ENGINE_0, CRC32_IEEE); if (crc_drv == NULL) { rf_e("CRC driver init is required before open"); return 1; } crc_drv_stream_setlen(crc_drv, len); #endif while (len) { if (blk > len) blk = len; flash_drv_read(fl_drv, (uint8_t *)dummy_buf, blk, offset); #ifndef CONFIG_SOFTWARE_CRC32 crc_drv_stream_feed(crc_drv, (uint8_t *)dummy_buf, blk); #else result = soft_crc32(dummy_buf, blk, result); #endif len -= blk; offset += blk; } #ifndef CONFIG_SOFTWARE_CRC32 crc_drv_stream_get_result(crc_drv, &result); crc_drv_close(crc_drv); #endif return (result == crc) ? 0 : 1; }
uint32_t mc_soft_crc32(const void *data, int data_size, uint32_t crc) { #if mxMC return soft_crc32(data, data_size, crc); #else return 0; #endif }