| 342 | } |
| 343 | |
| 344 | static struct region get_region(const struct frba *frba, unsigned int region_type) |
| 345 | { |
| 346 | int base_mask; |
| 347 | int limit_mask; |
| 348 | uint32_t flreg; |
| 349 | struct region region; |
| 350 | |
| 351 | if (ifd_version >= IFD_VERSION_2) |
| 352 | base_mask = 0x7fff; |
| 353 | else |
| 354 | base_mask = 0xfff; |
| 355 | |
| 356 | limit_mask = base_mask << 16; |
| 357 | |
| 358 | if (region_type >= max_regions) { |
| 359 | fprintf(stderr, "Invalid region type %d.\n", region_type); |
| 360 | exit(EXIT_FAILURE); |
| 361 | } |
| 362 | |
| 363 | flreg = frba->flreg[region_type]; |
| 364 | region.base = (flreg & base_mask) << 12; |
| 365 | region.limit = ((flreg & limit_mask) >> 4) | 0xfff; |
| 366 | region.size = region.limit - region.base + 1; |
| 367 | region.type = region_type; |
| 368 | |
| 369 | if (region.size < 0) |
| 370 | region.size = 0; |
| 371 | |
| 372 | return region; |
| 373 | } |
| 374 | |
| 375 | static void set_region(struct frba *frba, unsigned int region_type, |
| 376 | const struct region *region) |
no test coverage detected