Lines Matching refs:device
3 * Character device driver for extended error reporting.
18 #include <linux/device.h>
48 * each time the device is opened and destroy the buffer when the file is
245 * When a DASD device driver wants to report an error, it calls the
251 * DASD_EER_NOPATH: There is no path to the device left.
252 * DASD_EER_STATECHANGE: The state of the device has changed.
265 * when the extended error reporting is enabled for a device (by
267 * eer enabled DASD device. The presence of the cqr in device->eer_cqr
268 * indicates that eer is enable for the device. The use of the snss request
293 static void dasd_eer_write_standard_trigger(struct dasd_device *device,
316 strlcpy(header.busid, dev_name(&device->cdev->dev),
337 static void dasd_eer_write_snss_trigger(struct dasd_device *device,
359 strlcpy(header.busid, dev_name(&device->cdev->dev),
378 void dasd_eer_write(struct dasd_device *device, struct dasd_ccw_req *cqr,
381 if (!device->eer_cqr)
386 dasd_eer_write_standard_trigger(device, cqr, id);
390 dasd_eer_write_standard_trigger(device, NULL, id);
393 dasd_eer_write_snss_trigger(device, cqr, id);
396 dasd_eer_write_standard_trigger(device, NULL, id);
404 * Needs to be called with the device held.
406 void dasd_eer_snss(struct dasd_device *device)
410 cqr = device->eer_cqr;
413 if (test_and_set_bit(DASD_FLAG_EER_IN_USE, &device->flags)) {
415 set_bit(DASD_FLAG_EER_SNSS, &device->flags);
419 clear_bit(DASD_FLAG_EER_SNSS, &device->flags);
421 list_add(&cqr->devlist, &device->ccw_queue);
422 dasd_schedule_device_bh(device);
430 struct dasd_device *device = cqr->startdev;
433 dasd_eer_write(device, cqr, DASD_EER_STATECHANGE);
434 spin_lock_irqsave(get_ccwdev_lock(device->cdev), flags);
435 if (device->eer_cqr == cqr) {
436 clear_bit(DASD_FLAG_EER_IN_USE, &device->flags);
437 if (test_bit(DASD_FLAG_EER_SNSS, &device->flags))
439 dasd_eer_snss(device);
442 spin_unlock_irqrestore(get_ccwdev_lock(device->cdev), flags);
448 * is a new ccw in device->eer_cqr. Free the "old"
451 dasd_sfree_request(cqr, device);
455 * Enable error reporting on a given device.
457 int dasd_eer_enable(struct dasd_device *device)
464 spin_lock_irqsave(get_ccwdev_lock(device->cdev), flags);
465 if (device->eer_cqr)
467 else if (!device->discipline ||
468 strcmp(device->discipline->name, "ECKD"))
470 else if (test_bit(DASD_FLAG_OFFLINE, &device->flags))
477 SNSS_DATA_SIZE, device, NULL);
484 cqr->startdev = device;
500 if (!device->eer_cqr) {
501 device->eer_cqr = cqr;
506 spin_unlock_irqrestore(get_ccwdev_lock(device->cdev), flags);
509 dasd_sfree_request(cqr, device);
515 * Disable error reporting on a given device.
517 void dasd_eer_disable(struct dasd_device *device)
523 if (!device->eer_cqr)
525 spin_lock_irqsave(get_ccwdev_lock(device->cdev), flags);
526 cqr = device->eer_cqr;
527 device->eer_cqr = NULL;
528 clear_bit(DASD_FLAG_EER_SNSS, &device->flags);
529 in_use = test_and_clear_bit(DASD_FLAG_EER_IN_USE, &device->flags);
530 spin_unlock_irqrestore(get_ccwdev_lock(device->cdev), flags);
532 dasd_sfree_request(cqr, device);
536 * SECTION: the device operations
559 DBF_EVENT(DBF_WARNING, "can't open device since module "
710 "register misc device");