Lines Matching +full:left +full:-
1 // SPDX-License-Identifier: GPL-2.0-only
14 * fn41 - Check Extensions Present and
15 * fn48 - Get Device Parameters with EDD extensions
38 #define EDD_DATE "2004-Jun-25"
45 #define left (PAGE_SIZE - (p - buf) - 1) macro
76 return edev->index < min_t(unsigned char, edd.mbr_signature_nr, EDD_MBR_SIG_MAX); in edd_has_mbr_signature()
82 return edev->index < min_t(unsigned char, edd.edd_info_nr, EDDMAXNR); in edd_has_edd_info()
88 return edev->info; in edd_dev_get_info()
94 edev->index = i; in edd_dev_set_info()
96 edev->mbr_signature = edd.mbr_signature[i]; in edd_dev_set_info()
98 edev->info = &edd.edd_info[i]; in edd_dev_set_info()
109 ssize_t ret = -EIO; in edd_attr_show()
111 if (edd_attr->show) in edd_attr_show()
112 ret = edd_attr->show(dev, buf); in edd_attr_show()
128 return -EINVAL; in edd_show_host_bus()
131 return -EINVAL; in edd_show_host_bus()
134 if (isprint(info->params.host_bus_type[i])) { in edd_show_host_bus()
135 p += scnprintf(p, left, "%c", info->params.host_bus_type[i]); in edd_show_host_bus()
137 p += scnprintf(p, left, " "); in edd_show_host_bus()
141 if (!strncmp(info->params.host_bus_type, "ISA", 3)) { in edd_show_host_bus()
142 p += scnprintf(p, left, "\tbase_address: %x\n", in edd_show_host_bus()
143 info->params.interface_path.isa.base_address); in edd_show_host_bus()
144 } else if (!strncmp(info->params.host_bus_type, "PCIX", 4) || in edd_show_host_bus()
145 !strncmp(info->params.host_bus_type, "PCI", 3) || in edd_show_host_bus()
146 !strncmp(info->params.host_bus_type, "XPRS", 4)) { in edd_show_host_bus()
147 p += scnprintf(p, left, in edd_show_host_bus()
149 info->params.interface_path.pci.bus, in edd_show_host_bus()
150 info->params.interface_path.pci.slot, in edd_show_host_bus()
151 info->params.interface_path.pci.function, in edd_show_host_bus()
152 info->params.interface_path.pci.channel); in edd_show_host_bus()
153 } else if (!strncmp(info->params.host_bus_type, "IBND", 4) || in edd_show_host_bus()
154 !strncmp(info->params.host_bus_type, "HTPT", 4)) { in edd_show_host_bus()
155 p += scnprintf(p, left, in edd_show_host_bus()
157 info->params.interface_path.ibnd.reserved); in edd_show_host_bus()
160 p += scnprintf(p, left, "\tunknown: %llx\n", in edd_show_host_bus()
161 info->params.interface_path.unknown.reserved); in edd_show_host_bus()
163 return (p - buf); in edd_show_host_bus()
174 return -EINVAL; in edd_show_interface()
177 return -EINVAL; in edd_show_interface()
180 if (isprint(info->params.interface_type[i])) { in edd_show_interface()
181 p += scnprintf(p, left, "%c", info->params.interface_type[i]); in edd_show_interface()
183 p += scnprintf(p, left, " "); in edd_show_interface()
186 if (!strncmp(info->params.interface_type, "ATAPI", 5)) { in edd_show_interface()
187 p += scnprintf(p, left, "\tdevice: %u lun: %u\n", in edd_show_interface()
188 info->params.device_path.atapi.device, in edd_show_interface()
189 info->params.device_path.atapi.lun); in edd_show_interface()
190 } else if (!strncmp(info->params.interface_type, "ATA", 3)) { in edd_show_interface()
191 p += scnprintf(p, left, "\tdevice: %u\n", in edd_show_interface()
192 info->params.device_path.ata.device); in edd_show_interface()
193 } else if (!strncmp(info->params.interface_type, "SCSI", 4)) { in edd_show_interface()
194 p += scnprintf(p, left, "\tid: %u lun: %llu\n", in edd_show_interface()
195 info->params.device_path.scsi.id, in edd_show_interface()
196 info->params.device_path.scsi.lun); in edd_show_interface()
197 } else if (!strncmp(info->params.interface_type, "USB", 3)) { in edd_show_interface()
198 p += scnprintf(p, left, "\tserial_number: %llx\n", in edd_show_interface()
199 info->params.device_path.usb.serial_number); in edd_show_interface()
200 } else if (!strncmp(info->params.interface_type, "1394", 4)) { in edd_show_interface()
201 p += scnprintf(p, left, "\teui: %llx\n", in edd_show_interface()
202 info->params.device_path.i1394.eui); in edd_show_interface()
203 } else if (!strncmp(info->params.interface_type, "FIBRE", 5)) { in edd_show_interface()
204 p += scnprintf(p, left, "\twwid: %llx lun: %llx\n", in edd_show_interface()
205 info->params.device_path.fibre.wwid, in edd_show_interface()
206 info->params.device_path.fibre.lun); in edd_show_interface()
207 } else if (!strncmp(info->params.interface_type, "I2O", 3)) { in edd_show_interface()
208 p += scnprintf(p, left, "\tidentity_tag: %llx\n", in edd_show_interface()
209 info->params.device_path.i2o.identity_tag); in edd_show_interface()
210 } else if (!strncmp(info->params.interface_type, "RAID", 4)) { in edd_show_interface()
211 p += scnprintf(p, left, "\tidentity_tag: %x\n", in edd_show_interface()
212 info->params.device_path.raid.array_number); in edd_show_interface()
213 } else if (!strncmp(info->params.interface_type, "SATA", 4)) { in edd_show_interface()
214 p += scnprintf(p, left, "\tdevice: %u\n", in edd_show_interface()
215 info->params.device_path.sata.device); in edd_show_interface()
217 p += scnprintf(p, left, "\tunknown: %llx %llx\n", in edd_show_interface()
218 info->params.device_path.unknown.reserved1, in edd_show_interface()
219 info->params.device_path.unknown.reserved2); in edd_show_interface()
222 return (p - buf); in edd_show_interface()
226 * edd_show_raw_data() - copies raw data to buffer for userspace to parse
230 * Returns: number of bytes written, or -EINVAL on failure
236 ssize_t len = sizeof (info->params); in edd_show_raw_data()
238 return -EINVAL; in edd_show_raw_data()
241 return -EINVAL; in edd_show_raw_data()
243 if (!(info->params.key == 0xBEDD || info->params.key == 0xDDBE)) in edd_show_raw_data()
244 len = info->params.length; in edd_show_raw_data()
247 if (len > (sizeof(info->params))) in edd_show_raw_data()
248 len = sizeof(info->params); in edd_show_raw_data()
250 memcpy(buf, &info->params, len); in edd_show_raw_data()
260 return -EINVAL; in edd_show_version()
263 return -EINVAL; in edd_show_version()
265 p += scnprintf(p, left, "0x%02x\n", info->version); in edd_show_version()
266 return (p - buf); in edd_show_version()
273 p += scnprintf(p, left, "0x%08x\n", edev->mbr_signature); in edd_show_mbr_signature()
274 return (p - buf); in edd_show_mbr_signature()
283 return -EINVAL; in edd_show_extensions()
286 return -EINVAL; in edd_show_extensions()
288 if (info->interface_support & EDD_EXT_FIXED_DISK_ACCESS) { in edd_show_extensions()
289 p += scnprintf(p, left, "Fixed disk access\n"); in edd_show_extensions()
291 if (info->interface_support & EDD_EXT_DEVICE_LOCKING_AND_EJECTING) { in edd_show_extensions()
292 p += scnprintf(p, left, "Device locking and ejecting\n"); in edd_show_extensions()
294 if (info->interface_support & EDD_EXT_ENHANCED_DISK_DRIVE_SUPPORT) { in edd_show_extensions()
295 p += scnprintf(p, left, "Enhanced Disk Drive support\n"); in edd_show_extensions()
297 if (info->interface_support & EDD_EXT_64BIT_EXTENSIONS) { in edd_show_extensions()
298 p += scnprintf(p, left, "64-bit extensions\n"); in edd_show_extensions()
300 return (p - buf); in edd_show_extensions()
309 return -EINVAL; in edd_show_info_flags()
312 return -EINVAL; in edd_show_info_flags()
314 if (info->params.info_flags & EDD_INFO_DMA_BOUNDARY_ERROR_TRANSPARENT) in edd_show_info_flags()
315 p += scnprintf(p, left, "DMA boundary error transparent\n"); in edd_show_info_flags()
316 if (info->params.info_flags & EDD_INFO_GEOMETRY_VALID) in edd_show_info_flags()
317 p += scnprintf(p, left, "geometry valid\n"); in edd_show_info_flags()
318 if (info->params.info_flags & EDD_INFO_REMOVABLE) in edd_show_info_flags()
319 p += scnprintf(p, left, "removable\n"); in edd_show_info_flags()
320 if (info->params.info_flags & EDD_INFO_WRITE_VERIFY) in edd_show_info_flags()
321 p += scnprintf(p, left, "write verify\n"); in edd_show_info_flags()
322 if (info->params.info_flags & EDD_INFO_MEDIA_CHANGE_NOTIFICATION) in edd_show_info_flags()
323 p += scnprintf(p, left, "media change notification\n"); in edd_show_info_flags()
324 if (info->params.info_flags & EDD_INFO_LOCKABLE) in edd_show_info_flags()
325 p += scnprintf(p, left, "lockable\n"); in edd_show_info_flags()
326 if (info->params.info_flags & EDD_INFO_NO_MEDIA_PRESENT) in edd_show_info_flags()
327 p += scnprintf(p, left, "no media present\n"); in edd_show_info_flags()
328 if (info->params.info_flags & EDD_INFO_USE_INT13_FN50) in edd_show_info_flags()
329 p += scnprintf(p, left, "use int13 fn50\n"); in edd_show_info_flags()
330 return (p - buf); in edd_show_info_flags()
339 return -EINVAL; in edd_show_legacy_max_cylinder()
342 return -EINVAL; in edd_show_legacy_max_cylinder()
344 p += scnprintf(p, left, "%u\n", info->legacy_max_cylinder); in edd_show_legacy_max_cylinder()
345 return (p - buf); in edd_show_legacy_max_cylinder()
354 return -EINVAL; in edd_show_legacy_max_head()
357 return -EINVAL; in edd_show_legacy_max_head()
359 p += scnprintf(p, left, "%u\n", info->legacy_max_head); in edd_show_legacy_max_head()
360 return (p - buf); in edd_show_legacy_max_head()
369 return -EINVAL; in edd_show_legacy_sectors_per_track()
372 return -EINVAL; in edd_show_legacy_sectors_per_track()
374 p += scnprintf(p, left, "%u\n", info->legacy_sectors_per_track); in edd_show_legacy_sectors_per_track()
375 return (p - buf); in edd_show_legacy_sectors_per_track()
384 return -EINVAL; in edd_show_default_cylinders()
387 return -EINVAL; in edd_show_default_cylinders()
389 p += scnprintf(p, left, "%u\n", info->params.num_default_cylinders); in edd_show_default_cylinders()
390 return (p - buf); in edd_show_default_cylinders()
399 return -EINVAL; in edd_show_default_heads()
402 return -EINVAL; in edd_show_default_heads()
404 p += scnprintf(p, left, "%u\n", info->params.num_default_heads); in edd_show_default_heads()
405 return (p - buf); in edd_show_default_heads()
414 return -EINVAL; in edd_show_default_sectors_per_track()
417 return -EINVAL; in edd_show_default_sectors_per_track()
419 p += scnprintf(p, left, "%u\n", info->params.sectors_per_track); in edd_show_default_sectors_per_track()
420 return (p - buf); in edd_show_default_sectors_per_track()
429 return -EINVAL; in edd_show_sectors()
432 return -EINVAL; in edd_show_sectors()
434 p += scnprintf(p, left, "%llu\n", info->params.number_of_sectors); in edd_show_sectors()
435 return (p - buf); in edd_show_sectors()
458 return info->legacy_max_cylinder > 0; in edd_has_legacy_max_cylinder()
470 return info->legacy_max_head > 0; in edd_has_legacy_max_head()
482 return info->legacy_sectors_per_track > 0; in edd_has_legacy_sectors_per_track()
494 return info->params.num_default_cylinders > 0; in edd_has_default_cylinders()
506 return info->params.num_default_heads > 0; in edd_has_default_heads()
518 return info->params.sectors_per_track > 0; in edd_has_default_sectors_per_track()
534 if (!(info->params.key == 0xBEDD || info->params.key == 0xDDBE)) { in edd_has_edd30()
540 if (info->params.device_path_info_length != 44) in edd_has_edd30()
543 for (i = 30; i < info->params.device_path_info_length + 30; i++) in edd_has_edd30()
544 csum += *(((u8 *)&info->params) + i); in edd_has_edd30()
597 * edd_release - free edd structure
620 * edd_dev_is_type() - is this EDD device a 'type' device?
635 if (!strncmp(info->params.host_bus_type, type, strlen(type)) || in edd_dev_is_type()
636 !strncmp(info->params.interface_type, type, strlen(type))) in edd_dev_is_type()
643 * edd_get_pci_dev() - finds pci_dev that matches edev
655 info->params.interface_path.pci.bus, in edd_get_pci_dev()
656 PCI_DEVFN(info->params.interface_path.pci.slot, in edd_get_pci_dev()
657 info->params.interface_path.pci.function)); in edd_get_pci_dev()
670 ret = sysfs_create_link(&edev->kobj,&pci_dev->dev.kobj,"pci_dev"); in edd_create_symlink_to_pcidev()
678 kobject_put(&edev->kobj); in edd_device_unregister()
688 if (!attr->test || attr->test(edev)) in edd_populate_dir()
689 error = sysfs_create_file(&edev->kobj,&attr->attr); in edd_populate_dir()
705 edev->kobj.kset = edd_kset; in edd_device_register()
706 error = kobject_init_and_add(&edev->kobj, &edd_ktype, NULL, in edd_device_register()
710 kobject_uevent(&edev->kobj, KOBJ_ADD); in edd_device_register()
723 * edd_init() - creates sysfs tree of EDD data
733 return -ENODEV; in edd_init()
740 return -ENOMEM; in edd_init()
745 rc = -ENOMEM; in edd_init()
760 while (--i >= 0) in edd_init()