mirror of
https://github.com/AltraMayor/f3.git
synced 2025-09-10 15:46:47 -04:00
f3brew: add block size information
Not only does f3brew list block size, but f3brew also uses this information to better report results.
This commit is contained in:
parent
277f61a403
commit
8305e5ad5f
31
f3brew.c
31
f3brew.c
@ -249,6 +249,7 @@ enum block_state {
|
|||||||
|
|
||||||
struct block_range {
|
struct block_range {
|
||||||
enum block_state state;
|
enum block_state state;
|
||||||
|
int block_order;
|
||||||
uint64_t start_sector_offset;
|
uint64_t start_sector_offset;
|
||||||
uint64_t end_sector_offset;
|
uint64_t end_sector_offset;
|
||||||
|
|
||||||
@ -309,11 +310,25 @@ static const char *block_state_to_str(enum block_state state)
|
|||||||
return conv_array[state];
|
return conv_array[state];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int is_block(uint64_t offset, int block_order)
|
||||||
|
{
|
||||||
|
return !(((1ULL << block_order) - 1) & offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void print_offset(uint64_t offset, int block_order)
|
||||||
|
{
|
||||||
|
if (is_block(offset, block_order))
|
||||||
|
printf("block 0x%" PRIx64, offset >> block_order);
|
||||||
|
else
|
||||||
|
printf("offset 0x%" PRIx64, offset);
|
||||||
|
}
|
||||||
|
|
||||||
static void print_block_range(const struct block_range *range)
|
static void print_block_range(const struct block_range *range)
|
||||||
{
|
{
|
||||||
printf("[%s] sectors from offset 0x%" PRIx64 " to 0x%" PRIx64,
|
printf("[%s] from ", block_state_to_str(range->state));
|
||||||
block_state_to_str(range->state),
|
print_offset(range->start_sector_offset, range->block_order);
|
||||||
range->start_sector_offset, range->end_sector_offset);
|
printf(" to ");
|
||||||
|
print_offset(range->end_sector_offset, range->block_order);
|
||||||
|
|
||||||
switch (range->state) {
|
switch (range->state) {
|
||||||
case bs_good:
|
case bs_good:
|
||||||
@ -323,7 +338,8 @@ static void print_block_range(const struct block_range *range)
|
|||||||
|
|
||||||
case bs_overwritten:
|
case bs_overwritten:
|
||||||
case bs_overwritten_changed:
|
case bs_overwritten_changed:
|
||||||
printf(", found 0x%" PRIx64, range->found_sector_offset);
|
printf(", found ");
|
||||||
|
print_offset(range->found_sector_offset, range->block_order);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -381,10 +397,11 @@ static void read_blocks(char *probe_blk, struct device *dev,
|
|||||||
uint64_t first_block, uint64_t last_block)
|
uint64_t first_block, uint64_t last_block)
|
||||||
{
|
{
|
||||||
const int block_size = dev_get_block_size(dev);
|
const int block_size = dev_get_block_size(dev);
|
||||||
uint64_t expected_sector_offset =
|
const int block_order = dev_get_block_order(dev);
|
||||||
first_block << dev_get_block_order(dev);
|
uint64_t expected_sector_offset = first_block << block_order;
|
||||||
struct block_range range = {
|
struct block_range range = {
|
||||||
.state = bs_unknown,
|
.state = bs_unknown,
|
||||||
|
.block_order = block_order,
|
||||||
.start_sector_offset = 0,
|
.start_sector_offset = 0,
|
||||||
.end_sector_offset = 0,
|
.end_sector_offset = 0,
|
||||||
.found_sector_offset = 0,
|
.found_sector_offset = 0,
|
||||||
@ -466,6 +483,8 @@ int main(int argc, char **argv)
|
|||||||
: create_block_device(args.filename, args.reset_type);
|
: create_block_device(args.filename, args.reset_type);
|
||||||
assert(dev);
|
assert(dev);
|
||||||
|
|
||||||
|
printf("Physical block size: 2^%i Bytes\n\n", dev_get_block_order(dev));
|
||||||
|
|
||||||
very_last_block =
|
very_last_block =
|
||||||
(dev_get_size_byte(dev) >> dev_get_block_order(dev)) - 1;
|
(dev_get_size_byte(dev) >> dev_get_block_order(dev)) - 1;
|
||||||
if (args.first_block > very_last_block)
|
if (args.first_block > very_last_block)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user