- uint64_t lba = header->pt_start_lba;
- int j = 0;
- int count_per_sector = hd_dev->block_size / sizeof(struct lpt_entry);
- while (lba < header->pt_end_lba) {
- if (!hd_dev->ops.read_buffer(hd_dev, lba, buffer, hd_dev->block_size)) {
- errno = BLOCK_EREAD;
- goto done;
- }
- struct lpt_entry* entry = (struct lpt_entry*)buffer;
- for (int i = 0; i < count_per_sector; i++, j++) {
- struct block_dev* dev = cake_grab(lbd_pile);
- strncpy(dev->name, entry->part_name, PARTITION_NAME_SIZE);
- dev->hd_dev = hd_dev;
- dev->base_lba = entry->base_lba;
- dev->end_lba = entry->end_lba;
- __block_register(dev);
-
- if (j >= header->table_len) {
- goto done;
- }
- }
+int
+block_mount_disk(struct hba_device* hd_dev)
+{
+ int errno = 0;
+ struct block_dev* bdev = cake_grab(lbd_pile);
+ strncpy(bdev->name, hd_dev->model, PARTITION_NAME_SIZE);
+ bdev->hd_dev = hd_dev;
+ bdev->base_lba = 0;
+ bdev->end_lba = hd_dev->max_lba;
+ if (!__block_register(bdev)) {
+ errno = BLOCK_EFULL;
+ goto error;