Exemplo n.º 1
0
static int
unparse_hardware_path(char *buffer, EFI_DEVICE_PATH *path)
{
	PCI_DEVICE_PATH *pci = (PCI_DEVICE_PATH *)path;
	PCCARD_DEVICE_PATH *pccard = (PCCARD_DEVICE_PATH *)path;
	MEMORY_MAPPED_DEVICE_PATH *mm = (MEMORY_MAPPED_DEVICE_PATH *)path;
	CONTROLLER_DEVICE_PATH *ctlr = (CONTROLLER_DEVICE_PATH *)path;
	char a[16], b[16], c[16];

	switch (path->subtype) {
	case 1:
		return sprintf(buffer, "PCI(%x,%x)", get(a, pci->device), get(b, pci->function));
		break;
	case 2:
		return sprintf(buffer, "PCCARD(%x)", get(a, pccard->socket));
		break;
	case 3:
		return sprintf(buffer, "MM(%x,%" PRIx64 ",%" PRIx64 ")",
			       get(a, mm->memory_type),
			       get(b, mm->start),
			       get(c, mm->end));
		break;
	case 4:
		return unparse_vendor_path(buffer, (VENDOR_DEVICE_PATH *)path);
		break;

	case 5:
		return sprintf(buffer, "Controller(%x)", get(a, ctlr->controller));
		break;

	default:
		return unparse_raw(buffer, (uint8_t *)path, path->length);
	}
	return 0;
}
Exemplo n.º 2
0
static ssize_t
unparse_media_path(char *buffer, size_t buffer_size, EFI_DEVICE_PATH *path)
{

	CDROM_DEVICE_PATH *cdrom = (CDROM_DEVICE_PATH *)path;
	MEDIA_PROTOCOL_DEVICE_PATH *media = (MEDIA_PROTOCOL_DEVICE_PATH *)path;
	FILE_PATH_DEVICE_PATH *file = (FILE_PATH_DEVICE_PATH *)path;
	char *text_guid;
	char file_name[80];
	memset(file_name, 0, sizeof(file_name));
	char a[16], b[16], c[16];
	int rc;

	switch (path->subtype) {
	case 1:
		return unparse_media_hard_drive_path(buffer, buffer_size, path);
	case 2:
		return snprintf(buffer, buffer_size,
				"CD-ROM(%x,%" PRIx64 ",%" PRIx64 ")",
				get(a, cdrom->boot_entry),
				get(b, cdrom->start), get(c, cdrom->size));
	case 3:
		return unparse_vendor_path(buffer, buffer_size, NULL,
				(VENDOR_DEVICE_PATH *)path);
	case 4:
		efichar_to_char(file_name, file->path_name, 80);
		return snprintf(buffer, buffer_size, "File(%s)", file_name);
	case 5:
		rc = efi_guid_to_str(&media->guid, &text_guid);
		if (rc < 0)
			return rc;
		rc = snprintf(buffer, buffer_size, "Media(%s)", text_guid);
		free(text_guid);
		return rc;
	case 6:
		rc = efi_guid_to_str(&media->guid, &text_guid);
		if (rc < 0)
			return rc;
		rc = snprintf(buffer, buffer_size, "FvFile(%s)", text_guid);
		free(text_guid);
		return rc > 0 ? rc + 1 : rc;
	case 7:
		rc = efi_guid_to_str(&media->guid, &text_guid);
		if (rc < 0)
			return rc;
		rc = snprintf(buffer, buffer_size, "FvVol(%s)", text_guid);
		free(text_guid);
		return rc > 0 ? rc + 1 : rc;
	}
	return 0;
}
Exemplo n.º 3
0
static int
unparse_media_path(char *buffer, EFI_DEVICE_PATH *path)
{

	CDROM_DEVICE_PATH *cdrom = (CDROM_DEVICE_PATH *)path;
	MEDIA_PROTOCOL_DEVICE_PATH *media = (MEDIA_PROTOCOL_DEVICE_PATH *)path;
	FILE_PATH_DEVICE_PATH *file = (FILE_PATH_DEVICE_PATH *)path;
	char text_guid[40], *p = buffer;
	char file_name[80];
	memset(file_name, 0, sizeof(file_name));
	char a[16], b[16], c[16];

	switch (path->subtype) {
	case 1:
		return unparse_media_hard_drive_path(buffer, path);
		break;
	case 2:
		return sprintf(buffer, "CD-ROM(%x,%" PRIx64 ",%" PRIx64 ")",
			       get(a, cdrom->boot_entry), get(b, cdrom->start), get(c, cdrom->size));
		break;
	case 3:
		return unparse_vendor_path(buffer, (VENDOR_DEVICE_PATH *)path);
		break;
	case 4:
		efichar_to_char(file_name, file->path_name, 80);
		return sprintf(p, "File(%s)", file_name);
		break;
	case 5:
		efi_guid_unparse(&media->guid, text_guid);
		return sprintf(buffer, "Media(%s)", text_guid);
		break;
	default:
		break;
	}
	return 0;
}
Exemplo n.º 4
0
static ssize_t
unparse_messaging_path(char *buffer, size_t buffer_size, EFI_DEVICE_PATH *path)
{
	ATAPI_DEVICE_PATH *atapi = (ATAPI_DEVICE_PATH *)path;
	SATA_DEVICE_PATH *sata = (SATA_DEVICE_PATH *)path;
	SCSI_DEVICE_PATH *scsi = (SCSI_DEVICE_PATH *)path;
	FIBRE_CHANNEL_DEVICE_PATH *fc = (FIBRE_CHANNEL_DEVICE_PATH *)path;
	I1394_DEVICE_PATH *i1394 = (I1394_DEVICE_PATH *)path;
	USB_DEVICE_PATH *usb = (USB_DEVICE_PATH *)path;
	MAC_ADDR_DEVICE_PATH *mac = (MAC_ADDR_DEVICE_PATH *)path;
	USB_CLASS_DEVICE_PATH *usbclass = (USB_CLASS_DEVICE_PATH *)path;
	I2O_DEVICE_PATH *i2o = (I2O_DEVICE_PATH *)path;
	IPv4_DEVICE_PATH *ipv4 = (IPv4_DEVICE_PATH *)path;
/* 	IPv6_DEVICE_PATH *ipv6 = (IPv6_DEVICE_PATH *)path; */
	NVME_DEVICE_PATH *nvme = (NVME_DEVICE_PATH *)path;
	char a[16], b[16], c[16], d[16], e[16];

	size_t needed;
	off_t buf_offset = 0;

	switch (path->subtype) {
	case 1:
		return snprintf(buffer, buffer_size, "ATAPI(%x,%x,%x)",
				get(a, atapi->primary_secondary),
				get(b, atapi->slave_master),
				get(c, atapi->lun));
	case 2:
		return snprintf(buffer, buffer_size, "SCSI(%x,%x)",
				get(a, scsi->id), get(b, scsi->lun));
	case 3:
		return snprintf(buffer, buffer_size,
				"FC(%" PRIx64 ",%" PRIx64 ")",
				get(a, fc->wwn), get(b, fc->lun));
	case 4:
		return snprintf(buffer, buffer_size, "1394(%" PRIx64 ")",
				get(a, i1394->guid));
	case 5:
		return snprintf(buffer, buffer_size, "USB(%x,%x)",
				get(a, usb->port), get(b, usb->endpoint));
	case 6:
		return snprintf(buffer, buffer_size, "I2O(%x)",
				get(a, i2o->tid));
	case 10:
		return unparse_vendor_path(buffer, buffer_size, "VenMsg",
			(VENDOR_DEVICE_PATH *)path);
	case 11:
		needed = snprintf(buffer, buffer_size, "MAC(");
		if (needed < 0)
			return needed;
		buf_offset += needed;

		needed = snprintf(buffer + buf_offset,
			buffer_size == 0 ? 0 : buffer_size - buf_offset,
			"MAC(");
		if (needed < 0)
			return needed;
		buf_offset += needed;

		needed = unparse_raw(buffer + buf_offset,
			buffer_size == 0 ? 0 : buffer_size - buf_offset,
			mac->macaddr, 6);
		if (needed < 0)
			return needed;
		buf_offset += needed;

		needed = snprintf(buffer + buf_offset,
			buffer_size == 0 ? 0 : buffer_size - buf_offset,
			",%hhx)", get(a, mac->iftype));
		if (needed < 0)
			return needed;
		buf_offset += needed;

		return buf_offset;
	case 12:
		needed = snprintf(buffer, buf_offset, "IPv4(");
		if (needed < 0)
			return -1;
		buf_offset += needed;

		needed = unparse_ipv4_port(buffer + buf_offset,
			buffer_size == 0 ? 0 : buffer_size - buf_offset,
			ipv4->local_ip, ipv4->local_port);
		if (needed < 0)
			return -1;
		buf_offset += needed;

		needed = snprintf(buffer + buf_offset,
			buffer_size == 0 ? 0 : buffer_size - buf_offset,
			"<->");
		if (needed < 0)
			return -1;
		buf_offset += needed;

		needed = unparse_ipv4_port(buffer + buf_offset,
			buffer_size == 0 ? 0 : buffer_size - buf_offset,
			ipv4->remote_ip, ipv4->remote_port);
		if (needed < 0)
			return -1;
		buf_offset += needed;

		needed = snprintf(buffer + buf_offset,
			buffer_size == 0 ? 0 : buffer_size - buf_offset,
			",%hx, %hhx", get(a, ipv4->protocol),
			get(b, ipv4->static_addr));
		if (needed < 0)
			return -1;
		buf_offset += needed;

		return buf_offset;
	case 15:
		return snprintf(buffer, buffer_size,
				"USBClass(%hx,%hx,%hhx,%hhx,%hhx)",
				get(a, usbclass->vendor),
				get(b, usbclass->product),
				get(c, usbclass->class),
				get(d, usbclass->subclass),
				get(e, usbclass->protocol));
	case 18:
		return snprintf(buffer, buffer_size,
				"SATA(%hx,%hx,%hx)",
				get(a, sata->port),
				get(b, sata->port_multiplier),
				get(c, sata->lun));
	case 23:
		return snprintf(buffer, buffer_size,
				"NVME(%x,%lx)",
				get(a, nvme->namespace_id),
				get(b, nvme->ieee_extended_unique_identifier));
	default:
		return unparse_raw(buffer, buffer_size,
				(uint8_t *)path, path->length);
	}
	return 0;
}