Lines Matching +full:i +full:- +full:drive
1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (C) 1997-1998 Mark Lord
12 * Drive/Driver settings can be retrieved by reading the drive's
37 ide_hwif_t *hwif = (ide_hwif_t *) m->private; in ide_imodel_proc_show()
40 switch (hwif->chipset) { in ide_imodel_proc_show()
50 case ide_pmac: name = "mac-io"; break; in ide_imodel_proc_show()
62 ide_hwif_t *hwif = (ide_hwif_t *) m->private; in ide_mate_proc_show()
64 if (hwif && hwif->mate) in ide_mate_proc_show()
65 seq_printf(m, "%s\n", hwif->mate->name); in ide_mate_proc_show()
73 ide_hwif_t *hwif = (ide_hwif_t *) m->private; in ide_channel_proc_show()
75 seq_printf(m, "%c\n", hwif->channel ? '1' : '0'); in ide_channel_proc_show()
81 ide_drive_t *drive = (ide_drive_t *)m->private; in ide_identify_proc_show() local
84 if (!drive) { in ide_identify_proc_show()
91 return -ENOMEM; in ide_identify_proc_show()
92 if (taskfile_lib_get_identify(drive, buf) == 0) { in ide_identify_proc_show()
94 int i; in ide_identify_proc_show() local
96 for (i = 0; i < SECTOR_SIZE / 2; i++) { in ide_identify_proc_show()
97 seq_printf(m, "%04x%c", le16_to_cpu(val[i]), in ide_identify_proc_show()
98 (i % 8) == 7 ? '\n' : ' '); in ide_identify_proc_show()
107 * ide_find_setting - find a specific setting
120 while (st->name) { in ide_find_setting()
121 if (strcmp(st->name, name) == 0) in ide_find_setting()
125 return st->name ? st : NULL; in ide_find_setting()
129 * ide_read_setting - read an IDE setting
130 * @drive: drive to read from
131 * @setting: drive setting
133 * Read a drive setting and return the value. The caller
137 * so an error -EINVAL and true return of the same value cannot
141 static int ide_read_setting(ide_drive_t *drive, in ide_read_setting() argument
144 const struct ide_devset *ds = setting->setting; in ide_read_setting()
145 int val = -EINVAL; in ide_read_setting()
147 if (ds->get) in ide_read_setting()
148 val = ds->get(drive); in ide_read_setting()
154 * ide_write_setting - read an IDE setting
155 * @drive: drive to read from
156 * @setting: drive setting
159 * Write a drive setting if it is possible. The caller
163 * so an error -EINVAL and true return of the same value cannot
171 static int ide_write_setting(ide_drive_t *drive, in ide_write_setting() argument
174 const struct ide_devset *ds = setting->setting; in ide_write_setting()
177 return -EACCES; in ide_write_setting()
178 if (!ds->set) in ide_write_setting()
179 return -EPERM; in ide_write_setting()
180 if ((ds->flags & DS_SYNC) in ide_write_setting()
181 && (val < setting->min || val > setting->max)) in ide_write_setting()
182 return -EINVAL; in ide_write_setting()
183 return ide_devset_execute(drive, ds, val); in ide_write_setting()
188 static int set_xfer_rate (ide_drive_t *drive, int arg) in set_xfer_rate() argument
193 return -EINVAL; in set_xfer_rate()
203 return ide_no_data_taskfile(drive, &cmd); in set_xfer_rate()
234 ide_drive_t *drive = (ide_drive_t *) m->private; in ide_settings_proc_show() local
241 d = drive->settings; in ide_settings_proc_show()
243 seq_printf(m, "----\t\t\t-----\t\t---\t\t---\t\t----\n"); in ide_settings_proc_show()
244 while (g->name || (d && d->name)) { in ide_settings_proc_show()
246 if (g->name && d && d->name) { in ide_settings_proc_show()
247 if (strcmp(d->name, g->name) < 0) in ide_settings_proc_show()
251 } else if (d && d->name) { in ide_settings_proc_show()
255 mul_factor = setting->mulf ? setting->mulf(drive) : 1; in ide_settings_proc_show()
256 div_factor = setting->divf ? setting->divf(drive) : 1; in ide_settings_proc_show()
257 seq_printf(m, "%-24s", setting->name); in ide_settings_proc_show()
258 rc = ide_read_setting(drive, setting); in ide_settings_proc_show()
260 seq_printf(m, "%-16d", rc * mul_factor / div_factor); in ide_settings_proc_show()
262 seq_printf(m, "%-16s", "write-only"); in ide_settings_proc_show()
263 …seq_printf(m, "%-16d%-16d", (setting->min * mul_factor + div_factor - 1) / div_factor, setting->ma… in ide_settings_proc_show()
264 ds = setting->setting; in ide_settings_proc_show()
265 if (ds->get) in ide_settings_proc_show()
267 if (ds->set) in ide_settings_proc_show()
285 ide_drive_t *drive = PDE_DATA(file_inode(file)); in ide_settings_proc_write() local
294 return -EACCES; in ide_settings_proc_write()
299 return -EINVAL; in ide_settings_proc_write()
303 return -ENOMEM; in ide_settings_proc_write()
307 return -EFAULT; in ide_settings_proc_write()
316 --count; in ide_settings_proc_write()
331 --n; in ide_settings_proc_write()
336 if (p - q > MAX_LEN) in ide_settings_proc_write()
338 memcpy(name, q, p - q); in ide_settings_proc_write()
339 name[p - q] = 0; in ide_settings_proc_write()
342 --n; in ide_settings_proc_write()
348 n -= q - p; in ide_settings_proc_write()
353 --n; in ide_settings_proc_write()
361 if (drive->settings) in ide_settings_proc_write()
362 setting = ide_find_setting(drive->settings, name); in ide_settings_proc_write()
369 mul_factor = setting->mulf ? setting->mulf(drive) : 1; in ide_settings_proc_write()
370 div_factor = setting->divf ? setting->divf(drive) : 1; in ide_settings_proc_write()
371 ide_write_setting(drive, setting, val * div_factor / mul_factor); in ide_settings_proc_write()
381 return -EINVAL; in ide_settings_proc_write()
401 ide_drive_t *drive = (ide_drive_t *) m->private; in ide_geometry_proc_show() local
404 drive->cyl, drive->head, drive->sect); in ide_geometry_proc_show()
406 drive->bios_cyl, drive->bios_head, drive->bios_sect); in ide_geometry_proc_show()
413 ide_drive_t *drive = (ide_drive_t *) seq->private; in ide_dmodel_proc_show() local
414 char *m = (char *)&drive->id[ATA_ID_PROD]; in ide_dmodel_proc_show()
422 ide_drive_t *drive = (ide_drive_t *)m->private; in ide_driver_proc_show() local
423 struct device *dev = &drive->gendev; in ide_driver_proc_show()
426 if (dev->driver) { in ide_driver_proc_show()
427 ide_drv = to_ide_driver(dev->driver); in ide_driver_proc_show()
429 dev->driver->name, ide_drv->version); in ide_driver_proc_show()
431 seq_printf(m, "ide-default version 0.9.newide\n"); in ide_driver_proc_show()
437 ide_drive_t *drive = (ide_drive_t *) m->private; in ide_media_proc_show() local
440 switch (drive->media) { in ide_media_proc_show()
479 while (p->name != NULL) { in ide_add_proc_entries()
480 ent = proc_create_single_data(p->name, p->mode, dir, p->show, data); in ide_add_proc_entries()
490 while (p->name != NULL) { in ide_remove_proc_entries()
491 remove_proc_entry(p->name, dir); in ide_remove_proc_entries()
496 void ide_proc_register_driver(ide_drive_t *drive, struct ide_driver *driver) in ide_proc_register_driver() argument
499 drive->settings = driver->proc_devsets(drive); in ide_proc_register_driver()
502 ide_add_proc_entries(drive->proc, driver->proc_entries(drive), drive); in ide_proc_register_driver()
508 * ide_proc_unregister_driver - remove driver specific data
509 * @drive: drive
513 * for a given drive.
518 void ide_proc_unregister_driver(ide_drive_t *drive, struct ide_driver *driver) in ide_proc_unregister_driver() argument
520 ide_remove_proc_entries(drive->proc, driver->proc_entries(drive)); in ide_proc_unregister_driver()
527 drive->settings = NULL; in ide_proc_unregister_driver()
535 struct proc_dir_entry *parent = hwif->proc; in ide_proc_port_register_devices()
536 ide_drive_t *drive; in ide_proc_port_register_devices() local
538 int i; in ide_proc_port_register_devices() local
540 ide_port_for_each_dev(i, drive, hwif) { in ide_proc_port_register_devices()
541 if ((drive->dev_flags & IDE_DFLAG_PRESENT) == 0) in ide_proc_port_register_devices()
544 drive->proc = proc_mkdir(drive->name, parent); in ide_proc_port_register_devices()
545 if (drive->proc) { in ide_proc_port_register_devices()
546 ide_add_proc_entries(drive->proc, generic_drive_entries, drive); in ide_proc_port_register_devices()
548 drive->proc, &ide_settings_proc_ops, in ide_proc_port_register_devices()
549 drive); in ide_proc_port_register_devices()
551 sprintf(name, "ide%d/%s", (drive->name[2]-'a')/2, drive->name); in ide_proc_port_register_devices()
552 ent = proc_symlink(drive->name, proc_ide_root, name); in ide_proc_port_register_devices()
557 void ide_proc_unregister_device(ide_drive_t *drive) in ide_proc_unregister_device() argument
559 if (drive->proc) { in ide_proc_unregister_device()
560 remove_proc_entry("settings", drive->proc); in ide_proc_unregister_device()
561 ide_remove_proc_entries(drive->proc, generic_drive_entries); in ide_proc_unregister_device()
562 remove_proc_entry(drive->name, proc_ide_root); in ide_proc_unregister_device()
563 remove_proc_entry(drive->name, drive->hwif->proc); in ide_proc_unregister_device()
564 drive->proc = NULL; in ide_proc_unregister_device()
577 if (!hwif->proc) { in ide_proc_register_port()
578 hwif->proc = proc_mkdir(hwif->name, proc_ide_root); in ide_proc_register_port()
580 if (!hwif->proc) in ide_proc_register_port()
583 ide_add_proc_entries(hwif->proc, hwif_entries, hwif); in ide_proc_register_port()
589 if (hwif->proc) { in ide_proc_unregister_port()
590 ide_remove_proc_entries(hwif->proc, hwif_entries); in ide_proc_unregister_port()
591 remove_proc_entry(hwif->name, proc_ide_root); in ide_proc_unregister_port()
592 hwif->proc = NULL; in ide_proc_unregister_port()
601 seq_printf(s, "%s version %s\n", drv->name, ide_drv->version); in proc_print_driver()