Lines Matching +full:efi +full:- +full:disk

1 // SPDX-License-Identifier: GPL-2.0+
3 * EFI application disk support
18 * struct efi_disk_obj - EFI disk object
20 * @header: EFI object header
21 * @ops: EFI disk I/O protocol interface
28 * @offset: offset into disk for simple partition
67 desc = (struct blk_desc *) diskobj->desc; in efi_disk_rw_blocks()
68 blksz = desc->blksz; in efi_disk_rw_blocks()
70 lba += diskobj->offset; in efi_disk_rw_blocks()
72 debug("EFI: %s:%d blocks=%x lba=%llx blksz=%x dir=%d\n", __func__, in efi_disk_rw_blocks()
76 if (buffer_size & (blksz - 1)) in efi_disk_rw_blocks()
87 debug("EFI: %s:%d n=%lx blocks=%x\n", __func__, __LINE__, n, blocks); in efi_disk_rw_blocks()
109 EFI_LOADER_BOUNCE_BUFFER_SIZE / this->media->block_size, in efi_disk_read_blocks()
110 buffer_size - EFI_LOADER_BOUNCE_BUFFER_SIZE, in efi_disk_read_blocks()
144 EFI_LOADER_BOUNCE_BUFFER_SIZE / this->media->block_size, in efi_disk_write_blocks()
145 buffer_size - EFI_LOADER_BOUNCE_BUFFER_SIZE, in efi_disk_write_blocks()
204 /* Get the EFI object for the partition */ in efi_fs_from_path()
217 return handler->protocol_interface; in efi_fs_from_path()
221 * Create a handle for a partition or disk
228 * @offset offset into disk for simple partitions
229 * @return disk object
239 struct efi_disk_obj **disk) in efi_disk_add_dev() argument
245 if (!desc->lba) in efi_disk_add_dev()
253 efi_add_handle(&diskobj->header); in efi_disk_add_dev()
259 diskobj->dp = efi_dp_append_node(dp_parent, node); in efi_disk_add_dev()
262 diskobj->dp = efi_dp_from_part(desc, part); in efi_disk_add_dev()
264 diskobj->part = part; in efi_disk_add_dev()
265 ret = efi_add_protocol(&diskobj->header, &efi_block_io_guid, in efi_disk_add_dev()
266 &diskobj->ops); in efi_disk_add_dev()
269 ret = efi_add_protocol(&diskobj->header, &efi_guid_device_path, in efi_disk_add_dev()
270 diskobj->dp); in efi_disk_add_dev()
274 diskobj->volume = efi_simple_file_system(desc, part, in efi_disk_add_dev()
275 diskobj->dp); in efi_disk_add_dev()
276 ret = efi_add_protocol(&diskobj->header, in efi_disk_add_dev()
278 diskobj->volume); in efi_disk_add_dev()
282 diskobj->ops = block_io_disk_template; in efi_disk_add_dev()
283 diskobj->ifname = if_typename; in efi_disk_add_dev()
284 diskobj->dev_index = dev_index; in efi_disk_add_dev()
285 diskobj->offset = offset; in efi_disk_add_dev()
286 diskobj->desc = desc; in efi_disk_add_dev()
288 /* Fill in EFI IO Media info (for read/write callbacks) */ in efi_disk_add_dev()
289 diskobj->media.removable_media = desc->removable; in efi_disk_add_dev()
290 diskobj->media.media_present = 1; in efi_disk_add_dev()
291 diskobj->media.block_size = desc->blksz; in efi_disk_add_dev()
292 diskobj->media.io_align = desc->blksz; in efi_disk_add_dev()
293 diskobj->media.last_block = desc->lba - offset; in efi_disk_add_dev()
295 diskobj->media.logical_partition = 1; in efi_disk_add_dev()
296 diskobj->ops.media = &diskobj->media; in efi_disk_add_dev()
297 if (disk) in efi_disk_add_dev()
298 *disk = diskobj; in efi_disk_add_dev()
305 * @parent handle of the parent disk
317 char devname[32] = { 0 }; /* dp->str is u16[32] long */ in efi_disk_create_partitions()
327 dp = handler->protocol_interface; in efi_disk_create_partitions()
348 * U-Boot doesn't have a list of all online disk devices. So when running our
349 * EFI payload, we scan through all of the potentially available ones and
352 * TODO(sjg@chromium.org): Actually with CONFIG_BLK, U-Boot does have this.
353 * Consider converting the code to look up devices as needed. The EFI device
360 struct efi_disk_obj *disk; in efi_disk_register() local
369 const char *if_typename = blk_get_if_type_name(desc->if_type); in efi_disk_register()
372 printf("Scanning disk %s...\n", dev->name); in efi_disk_register()
374 desc, desc->devnum, 0, 0, &disk); in efi_disk_register()
376 printf("Disk %s not ready\n", dev->name); in efi_disk_register()
380 printf("ERROR: failure to add disk device %s, r = %lu\n", in efi_disk_register()
381 dev->name, ret & ~EFI_ERROR_MASK); in efi_disk_register()
386 /* Partitions show up as block devices in EFI */ in efi_disk_register()
388 &disk->header, desc, if_typename, in efi_disk_register()
389 desc->devnum, dev->name); in efi_disk_register()
394 /* Search for all available disk devices */ in efi_disk_register()
403 if_typename = cur_drvr->if_typename; in efi_disk_register()
407 char devname[32] = { 0 }; /* dp->str is u16[32] long */ in efi_disk_register()
412 if (desc->type == DEV_TYPE_UNKNOWN) in efi_disk_register()
420 i, 0, 0, &disk); in efi_disk_register()
422 printf("Disk %s not ready\n", devname); in efi_disk_register()
426 printf("ERROR: failure to add disk device %s, r = %lu\n", in efi_disk_register()
432 /* Partitions show up as block devices in EFI */ in efi_disk_register()
434 (&disk->header, desc, in efi_disk_register()