Lines Matching refs:device

101 	struct dasd_device *device;  member
108 struct dasd_device *device; member
121 struct dasd_device *device; member
217 static int dasd_eckd_track_from_irb(struct irb *irb, struct dasd_device *device, in dasd_eckd_track_from_irb() argument
220 struct dasd_eckd_private *private = device->private; in dasd_eckd_track_from_irb()
227 DBF_DEV_EVENT(DBF_WARNING, device, "%s", in dasd_eckd_track_from_irb()
232 DBF_DEV_EVENT(DBF_WARNING, device, "%s", in dasd_eckd_track_from_irb()
253 struct dasd_device *device) in set_timestamp() argument
255 struct dasd_eckd_private *private = device->private; in set_timestamp()
281 unsigned int totrk, int cmd, struct dasd_device *device, in define_extent() argument
284 struct dasd_eckd_private *private = device->private; in define_extent()
325 rc = set_timestamp(ccw, data, device); in define_extent()
330 rc = set_timestamp(ccw, data, device); in define_extent()
338 rc = set_timestamp(ccw, data, device); in define_extent()
349 rc = set_timestamp(ccw, data, device); in define_extent()
352 dev_err(&device->cdev->dev, in define_extent()
389 int count, int cmd, struct dasd_device *device, in locate_record_ext() argument
392 struct dasd_eckd_private *private = device->private; in locate_record_ext()
517 DBF_DEV_EVENT(DBF_ERR, device, in locate_record_ext()
607 struct dasd_device * device, int reclen) in locate_record() argument
609 struct dasd_eckd_private *private = device->private; in locate_record()
613 DBF_DEV_EVENT(DBF_INFO, device, in locate_record()
695 DBF_DEV_EVENT(DBF_ERR, device, "unknown locate record " in locate_record()
772 static int dasd_eckd_generate_uid(struct dasd_device *device) in dasd_eckd_generate_uid() argument
774 struct dasd_eckd_private *private = device->private; in dasd_eckd_generate_uid()
781 spin_lock_irqsave(get_ccwdev_lock(device->cdev), flags); in dasd_eckd_generate_uid()
783 spin_unlock_irqrestore(get_ccwdev_lock(device->cdev), flags); in dasd_eckd_generate_uid()
787 static int dasd_eckd_get_uid(struct dasd_device *device, struct dasd_uid *uid) in dasd_eckd_get_uid() argument
789 struct dasd_eckd_private *private = device->private; in dasd_eckd_get_uid()
793 spin_lock_irqsave(get_ccwdev_lock(device->cdev), flags); in dasd_eckd_get_uid()
795 spin_unlock_irqrestore(get_ccwdev_lock(device->cdev), flags); in dasd_eckd_get_uid()
805 static int dasd_eckd_compare_path_uid(struct dasd_device *device, in dasd_eckd_compare_path_uid() argument
812 dasd_eckd_get_uid(device, &device_uid); in dasd_eckd_compare_path_uid()
817 static void dasd_eckd_fill_rcd_cqr(struct dasd_device *device, in dasd_eckd_fill_rcd_cqr() argument
839 cqr->startdev = device; in dasd_eckd_fill_rcd_cqr()
840 cqr->memdev = device; in dasd_eckd_fill_rcd_cqr()
874 static int dasd_eckd_read_conf_immediately(struct dasd_device *device, in dasd_eckd_read_conf_immediately() argument
885 ciw = ccw_device_get_ciw(device->cdev, CIW_TYPE_RCD); in dasd_eckd_read_conf_immediately()
889 dasd_eckd_fill_rcd_cqr(device, cqr, rcd_buffer, lpm); in dasd_eckd_read_conf_immediately()
898 static int dasd_eckd_read_conf_lpm(struct dasd_device *device, in dasd_eckd_read_conf_lpm() argument
911 ciw = ccw_device_get_ciw(device->cdev, CIW_TYPE_RCD); in dasd_eckd_read_conf_lpm()
923 device, NULL); in dasd_eckd_read_conf_lpm()
925 DBF_DEV_EVENT(DBF_WARNING, device, "%s", in dasd_eckd_read_conf_lpm()
930 dasd_eckd_fill_rcd_cqr(device, cqr, rcd_buf, lpm); in dasd_eckd_read_conf_lpm()
1005 static void dasd_eckd_store_conf_data(struct dasd_device *device, in dasd_eckd_store_conf_data() argument
1008 struct dasd_eckd_private *private = device->private; in dasd_eckd_store_conf_data()
1019 cdp = device->path[chp].conf_data; in dasd_eckd_store_conf_data()
1024 ccw_device_get_schid(device->cdev, &sch_id); in dasd_eckd_store_conf_data()
1025 device->path[chp].conf_data = conf_data; in dasd_eckd_store_conf_data()
1026 device->path[chp].cssid = sch_id.cssid; in dasd_eckd_store_conf_data()
1027 device->path[chp].ssid = sch_id.ssid; in dasd_eckd_store_conf_data()
1028 chp_desc = ccw_device_get_chp_desc(device->cdev, chp); in dasd_eckd_store_conf_data()
1030 device->path[chp].chpid = chp_desc->chpid; in dasd_eckd_store_conf_data()
1035 static void dasd_eckd_clear_conf_data(struct dasd_device *device) in dasd_eckd_clear_conf_data() argument
1037 struct dasd_eckd_private *private = device->private; in dasd_eckd_clear_conf_data()
1043 kfree(device->path[i].conf_data); in dasd_eckd_clear_conf_data()
1044 device->path[i].conf_data = NULL; in dasd_eckd_clear_conf_data()
1045 device->path[i].cssid = 0; in dasd_eckd_clear_conf_data()
1046 device->path[i].ssid = 0; in dasd_eckd_clear_conf_data()
1047 device->path[i].chpid = 0; in dasd_eckd_clear_conf_data()
1048 dasd_path_notoper(device, i); in dasd_eckd_clear_conf_data()
1052 static void dasd_eckd_read_fc_security(struct dasd_device *device) in dasd_eckd_read_fc_security() argument
1054 struct dasd_eckd_private *private = device->private; in dasd_eckd_read_fc_security()
1063 device->path[chp].fc_security = 0; in dasd_eckd_read_fc_security()
1069 device->path[chp].fc_security = esm[chp]; in dasd_eckd_read_fc_security()
1071 device->path[chp].fc_security = 0; in dasd_eckd_read_fc_security()
1093 static int dasd_eckd_check_cabling(struct dasd_device *device, in dasd_eckd_check_cabling() argument
1097 struct dasd_eckd_private *private = device->private; in dasd_eckd_check_cabling()
1105 if (dasd_eckd_compare_path_uid(device, &path_conf)) { in dasd_eckd_check_cabling()
1108 dev_err(&device->cdev->dev, in dasd_eckd_check_cabling()
1117 static int dasd_eckd_read_conf(struct dasd_device *device) in dasd_eckd_read_conf() argument
1125 private = device->private; in dasd_eckd_read_conf()
1126 opm = ccw_device_get_path_mask(device->cdev); in dasd_eckd_read_conf()
1133 rc = dasd_eckd_read_conf_lpm(device, &conf_data, in dasd_eckd_read_conf()
1136 DBF_EVENT_DEVID(DBF_WARNING, device->cdev, in dasd_eckd_read_conf()
1142 DBF_EVENT_DEVID(DBF_WARNING, device->cdev, "%s", in dasd_eckd_read_conf()
1146 dasd_path_add_opm(device, opm); in dasd_eckd_read_conf()
1152 dasd_eckd_clear_conf_data(device); in dasd_eckd_read_conf()
1165 dasd_eckd_generate_uid(device); in dasd_eckd_read_conf()
1167 } else if (dasd_eckd_check_cabling(device, conf_data, lpm)) { in dasd_eckd_read_conf()
1168 dasd_path_add_cablepm(device, lpm); in dasd_eckd_read_conf()
1175 dasd_eckd_store_conf_data(device, conf_data, pos); in dasd_eckd_read_conf()
1179 dasd_path_add_nppm(device, lpm); in dasd_eckd_read_conf()
1182 dasd_path_add_ppm(device, lpm); in dasd_eckd_read_conf()
1185 if (!dasd_path_get_opm(device)) { in dasd_eckd_read_conf()
1186 dasd_path_set_opm(device, lpm); in dasd_eckd_read_conf()
1187 dasd_generic_path_operational(device); in dasd_eckd_read_conf()
1189 dasd_path_add_opm(device, lpm); in dasd_eckd_read_conf()
1196 static u32 get_fcx_max_data(struct dasd_device *device) in get_fcx_max_data() argument
1198 struct dasd_eckd_private *private = device->private; in get_fcx_max_data()
1214 mdc = ccw_device_get_mdc(device->cdev, 0); in get_fcx_max_data()
1216 …dev_warn(&device->cdev->dev, "Detecting the maximum supported data size for zHPF requests failed\n… in get_fcx_max_data()
1223 static int verify_fcx_max_data(struct dasd_device *device, __u8 lpm) in verify_fcx_max_data() argument
1225 struct dasd_eckd_private *private = device->private; in verify_fcx_max_data()
1230 mdc = ccw_device_get_mdc(device->cdev, lpm); in verify_fcx_max_data()
1232 dev_warn(&device->cdev->dev, in verify_fcx_max_data()
1240 dev_warn(&device->cdev->dev, in verify_fcx_max_data()
1251 static int rebuild_device_uid(struct dasd_device *device, in rebuild_device_uid() argument
1254 struct dasd_eckd_private *private = device->private; in rebuild_device_uid()
1255 __u8 lpm, opm = dasd_path_get_opm(device); in rebuild_device_uid()
1264 rc = dasd_eckd_read_conf_immediately(device, &data->cqr, in rebuild_device_uid()
1271 DBF_EVENT_DEVID(DBF_WARNING, device->cdev, in rebuild_device_uid()
1285 rc = dasd_eckd_generate_uid(device); in rebuild_device_uid()
1290 static void dasd_eckd_path_available_action(struct dasd_device *device, in dasd_eckd_path_available_action() argument
1314 rc = dasd_eckd_read_conf_immediately(device, &data->cqr, in dasd_eckd_path_available_action()
1330 DBF_EVENT_DEVID(DBF_WARNING, device->cdev, "%s", in dasd_eckd_path_available_action()
1335 DBF_EVENT_DEVID(DBF_WARNING, device->cdev, "%s", in dasd_eckd_path_available_action()
1340 dev_warn(&device->cdev->dev, in dasd_eckd_path_available_action()
1345 if (verify_fcx_max_data(device, lpm)) { in dasd_eckd_path_available_action()
1374 if (dasd_path_get_opm(device) && in dasd_eckd_path_available_action()
1375 dasd_eckd_compare_path_uid(device, &path_conf)) { in dasd_eckd_path_available_action()
1387 if (rebuild_device_uid(device, data) || in dasd_eckd_path_available_action()
1389 device, &path_conf)) { in dasd_eckd_path_available_action()
1391 dev_err(&device->cdev->dev, in dasd_eckd_path_available_action()
1418 dasd_eckd_store_conf_data(device, conf_data, pos); in dasd_eckd_path_available_action()
1427 spin_lock_irqsave(get_ccwdev_lock(device->cdev), flags); in dasd_eckd_path_available_action()
1428 if (!dasd_path_get_opm(device) && opm) { in dasd_eckd_path_available_action()
1429 dasd_path_set_opm(device, opm); in dasd_eckd_path_available_action()
1430 dasd_generic_path_operational(device); in dasd_eckd_path_available_action()
1432 dasd_path_add_opm(device, opm); in dasd_eckd_path_available_action()
1434 dasd_path_add_nppm(device, npm); in dasd_eckd_path_available_action()
1435 dasd_path_add_ppm(device, ppm); in dasd_eckd_path_available_action()
1437 dasd_path_add_tbvpm(device, epm); in dasd_eckd_path_available_action()
1438 dasd_device_set_timer(device, 50); in dasd_eckd_path_available_action()
1440 dasd_path_add_cablepm(device, cablepm); in dasd_eckd_path_available_action()
1441 dasd_path_add_nohpfpm(device, hpfpm); in dasd_eckd_path_available_action()
1442 spin_unlock_irqrestore(get_ccwdev_lock(device->cdev), flags); in dasd_eckd_path_available_action()
1444 dasd_path_create_kobj(device, pos); in dasd_eckd_path_available_action()
1451 struct dasd_device *device; in do_pe_handler_work() local
1454 device = data->device; in do_pe_handler_work()
1457 if (test_bit(DASD_FLAG_SUSPENDED, &device->flags)) { in do_pe_handler_work()
1462 if (test_and_set_bit(DASD_FLAG_PATH_VERIFY, &device->flags)) { in do_pe_handler_work()
1468 dasd_eckd_path_available_action(device, data); in do_pe_handler_work()
1470 dasd_eckd_read_fc_security(device); in do_pe_handler_work()
1472 clear_bit(DASD_FLAG_PATH_VERIFY, &device->flags); in do_pe_handler_work()
1473 dasd_put_device(device); in do_pe_handler_work()
1480 static int dasd_eckd_pe_handler(struct dasd_device *device, in dasd_eckd_pe_handler() argument
1495 dasd_get_device(device); in dasd_eckd_pe_handler()
1496 data->device = device; in dasd_eckd_pe_handler()
1503 static void dasd_eckd_reset_path(struct dasd_device *device, __u8 pm) in dasd_eckd_reset_path() argument
1505 struct dasd_eckd_private *private = device->private; in dasd_eckd_reset_path()
1509 private->fcx_max_data = get_fcx_max_data(device); in dasd_eckd_reset_path()
1510 spin_lock_irqsave(get_ccwdev_lock(device->cdev), flags); in dasd_eckd_reset_path()
1511 dasd_path_set_tbvpm(device, pm ? : dasd_path_get_notoperpm(device)); in dasd_eckd_reset_path()
1512 dasd_schedule_device_bh(device); in dasd_eckd_reset_path()
1513 spin_unlock_irqrestore(get_ccwdev_lock(device->cdev), flags); in dasd_eckd_reset_path()
1516 static int dasd_eckd_read_features(struct dasd_device *device) in dasd_eckd_read_features() argument
1518 struct dasd_eckd_private *private = device->private; in dasd_eckd_read_features()
1529 device, NULL); in dasd_eckd_read_features()
1531 DBF_EVENT_DEVID(DBF_WARNING, device->cdev, "%s", "Could not " in dasd_eckd_read_features()
1535 cqr->startdev = device; in dasd_eckd_read_features()
1536 cqr->memdev = device; in dasd_eckd_read_features()
1572 dev_warn(&device->cdev->dev, "Reading device feature codes" in dasd_eckd_read_features()
1579 static int dasd_eckd_read_vol_info(struct dasd_device *device) in dasd_eckd_read_vol_info() argument
1581 struct dasd_eckd_private *private = device->private; in dasd_eckd_read_vol_info()
1596 sizeof(*prssdp) + sizeof(*vsq), device, NULL); in dasd_eckd_read_vol_info()
1598 DBF_EVENT_DEVID(DBF_WARNING, device->cdev, "%s", in dasd_eckd_read_vol_info()
1635 cqr->startdev = device; in dasd_eckd_read_vol_info()
1636 cqr->memdev = device; in dasd_eckd_read_vol_info()
1639 cqr->expires = device->default_expires * HZ; in dasd_eckd_read_vol_info()
1647 DBF_EVENT_DEVID(DBF_WARNING, device->cdev, in dasd_eckd_read_vol_info()
1659 static int dasd_eckd_is_ese(struct dasd_device *device) in dasd_eckd_is_ese() argument
1661 struct dasd_eckd_private *private = device->private; in dasd_eckd_is_ese()
1666 static int dasd_eckd_ext_pool_id(struct dasd_device *device) in dasd_eckd_ext_pool_id() argument
1668 struct dasd_eckd_private *private = device->private; in dasd_eckd_ext_pool_id()
1678 static int dasd_eckd_space_configured(struct dasd_device *device) in dasd_eckd_space_configured() argument
1680 struct dasd_eckd_private *private = device->private; in dasd_eckd_space_configured()
1683 rc = dasd_eckd_read_vol_info(device); in dasd_eckd_space_configured()
1692 static int dasd_eckd_space_allocated(struct dasd_device *device) in dasd_eckd_space_allocated() argument
1694 struct dasd_eckd_private *private = device->private; in dasd_eckd_space_allocated()
1697 rc = dasd_eckd_read_vol_info(device); in dasd_eckd_space_allocated()
1702 static int dasd_eckd_logical_capacity(struct dasd_device *device) in dasd_eckd_logical_capacity() argument
1704 struct dasd_eckd_private *private = device->private; in dasd_eckd_logical_capacity()
1712 struct dasd_device *device; in dasd_eckd_ext_pool_exhaust_work() local
1716 device = data->device; in dasd_eckd_ext_pool_exhaust_work()
1720 base = device; in dasd_eckd_ext_pool_exhaust_work()
1722 dasd_generic_space_avail(device); in dasd_eckd_ext_pool_exhaust_work()
1724 dev_warn(&device->cdev->dev, "No space left in the extent pool\n"); in dasd_eckd_ext_pool_exhaust_work()
1725 DBF_DEV_EVENT(DBF_WARNING, device, "%s", "out of space"); in dasd_eckd_ext_pool_exhaust_work()
1728 dasd_put_device(device); in dasd_eckd_ext_pool_exhaust_work()
1732 static int dasd_eckd_ext_pool_exhaust(struct dasd_device *device, in dasd_eckd_ext_pool_exhaust() argument
1741 dasd_get_device(device); in dasd_eckd_ext_pool_exhaust()
1742 data->device = device; in dasd_eckd_ext_pool_exhaust()
1756 static void dasd_eckd_cpy_ext_pool_data(struct dasd_device *device, in dasd_eckd_cpy_ext_pool_data() argument
1759 struct dasd_eckd_private *private = device->private; in dasd_eckd_cpy_ext_pool_data()
1760 int pool_id = dasd_eckd_ext_pool_id(device); in dasd_eckd_cpy_ext_pool_data()
1774 static int dasd_eckd_read_ext_pool_info(struct dasd_device *device) in dasd_eckd_read_ext_pool_info() argument
1776 struct dasd_eckd_private *private = device->private; in dasd_eckd_read_ext_pool_info()
1789 sizeof(*prssdp) + sizeof(*lcq), device, NULL); in dasd_eckd_read_ext_pool_info()
1791 DBF_EVENT_DEVID(DBF_WARNING, device->cdev, "%s", in dasd_eckd_read_ext_pool_info()
1819 cqr->startdev = device; in dasd_eckd_read_ext_pool_info()
1820 cqr->memdev = device; in dasd_eckd_read_ext_pool_info()
1823 cqr->expires = device->default_expires * HZ; in dasd_eckd_read_ext_pool_info()
1829 dasd_eckd_cpy_ext_pool_data(device, lcq); in dasd_eckd_read_ext_pool_info()
1831 DBF_EVENT_DEVID(DBF_WARNING, device->cdev, in dasd_eckd_read_ext_pool_info()
1845 static int dasd_eckd_ext_size(struct dasd_device *device) in dasd_eckd_ext_size() argument
1847 struct dasd_eckd_private *private = device->private; in dasd_eckd_ext_size()
1860 static int dasd_eckd_ext_pool_warn_thrshld(struct dasd_device *device) in dasd_eckd_ext_pool_warn_thrshld() argument
1862 struct dasd_eckd_private *private = device->private; in dasd_eckd_ext_pool_warn_thrshld()
1867 static int dasd_eckd_ext_pool_cap_at_warnlevel(struct dasd_device *device) in dasd_eckd_ext_pool_cap_at_warnlevel() argument
1869 struct dasd_eckd_private *private = device->private; in dasd_eckd_ext_pool_cap_at_warnlevel()
1877 static int dasd_eckd_ext_pool_oos(struct dasd_device *device) in dasd_eckd_ext_pool_oos() argument
1879 struct dasd_eckd_private *private = device->private; in dasd_eckd_ext_pool_oos()
1887 static struct dasd_ccw_req *dasd_eckd_build_psf_ssc(struct dasd_device *device, in dasd_eckd_build_psf_ssc() argument
1896 device, NULL); in dasd_eckd_build_psf_ssc()
1899 DBF_DEV_EVENT(DBF_WARNING, device, "%s", in dasd_eckd_build_psf_ssc()
1915 cqr->startdev = device; in dasd_eckd_build_psf_ssc()
1916 cqr->memdev = device; in dasd_eckd_build_psf_ssc()
1931 dasd_eckd_psf_ssc(struct dasd_device *device, int enable_pav, in dasd_eckd_psf_ssc() argument
1937 cqr = dasd_eckd_build_psf_ssc(device, enable_pav); in dasd_eckd_psf_ssc()
1961 static int dasd_eckd_validate_server(struct dasd_device *device, in dasd_eckd_validate_server() argument
1964 struct dasd_eckd_private *private = device->private; in dasd_eckd_validate_server()
1974 rc = dasd_eckd_psf_ssc(device, enable_pav, flags); in dasd_eckd_validate_server()
1978 DBF_EVENT_DEVID(DBF_WARNING, device->cdev, "PSF-SSC for SSID %04x " in dasd_eckd_validate_server()
1988 struct dasd_device *device = container_of(work, struct dasd_device, in dasd_eckd_do_validate_server() local
1993 if (dasd_eckd_validate_server(device, flags) in dasd_eckd_do_validate_server()
1996 schedule_work(&device->kick_validate); in dasd_eckd_do_validate_server()
2000 dasd_put_device(device); in dasd_eckd_do_validate_server()
2003 static void dasd_eckd_kick_validate_server(struct dasd_device *device) in dasd_eckd_kick_validate_server() argument
2005 dasd_get_device(device); in dasd_eckd_kick_validate_server()
2007 if (test_bit(DASD_FLAG_OFFLINE, &device->flags) || in dasd_eckd_kick_validate_server()
2008 device->state < DASD_STATE_ONLINE) { in dasd_eckd_kick_validate_server()
2009 dasd_put_device(device); in dasd_eckd_kick_validate_server()
2013 if (!schedule_work(&device->kick_validate)) in dasd_eckd_kick_validate_server()
2014 dasd_put_device(device); in dasd_eckd_kick_validate_server()
2020 static int dasd_device_is_primary(struct dasd_device *device) in dasd_device_is_primary() argument
2022 if (!device->copy) in dasd_device_is_primary()
2025 if (device->copy->active->device == device) in dasd_device_is_primary()
2031 static int dasd_eckd_alloc_block(struct dasd_device *device) in dasd_eckd_alloc_block() argument
2036 if (!dasd_device_is_primary(device)) in dasd_eckd_alloc_block()
2039 dasd_eckd_get_uid(device, &temp_uid); in dasd_eckd_alloc_block()
2043 DBF_EVENT_DEVID(DBF_WARNING, device->cdev, "%s", in dasd_eckd_alloc_block()
2047 device->block = block; in dasd_eckd_alloc_block()
2048 block->base = device; in dasd_eckd_alloc_block()
2053 static bool dasd_eckd_pprc_enabled(struct dasd_device *device) in dasd_eckd_pprc_enabled() argument
2055 struct dasd_eckd_private *private = device->private; in dasd_eckd_pprc_enabled()
2065 dasd_eckd_check_characteristics(struct dasd_device *device) in dasd_eckd_check_characteristics() argument
2067 struct dasd_eckd_private *private = device->private; in dasd_eckd_check_characteristics()
2073 INIT_WORK(&device->kick_validate, dasd_eckd_do_validate_server); in dasd_eckd_check_characteristics()
2075 INIT_WORK(&device->suc_work, dasd_alias_handle_summary_unit_check); in dasd_eckd_check_characteristics()
2077 if (!ccw_device_is_pathgroup(device->cdev)) { in dasd_eckd_check_characteristics()
2078 dev_warn(&device->cdev->dev, in dasd_eckd_check_characteristics()
2082 if (!ccw_device_is_multipath(device->cdev)) { in dasd_eckd_check_characteristics()
2083 dev_info(&device->cdev->dev, in dasd_eckd_check_characteristics()
2089 dev_warn(&device->cdev->dev, in dasd_eckd_check_characteristics()
2094 device->private = private; in dasd_eckd_check_characteristics()
2105 rc = dasd_eckd_read_conf(device); in dasd_eckd_check_characteristics()
2110 device->default_expires = DASD_EXPIRES; in dasd_eckd_check_characteristics()
2111 device->default_retries = DASD_RETRIES; in dasd_eckd_check_characteristics()
2112 device->path_thrhld = DASD_ECKD_PATH_THRHLD; in dasd_eckd_check_characteristics()
2113 device->path_interval = DASD_ECKD_PATH_INTERVAL; in dasd_eckd_check_characteristics()
2114 device->aq_timeouts = DASD_RETRIES_MAX; in dasd_eckd_check_characteristics()
2123 device->default_expires = value; in dasd_eckd_check_characteristics()
2127 rc = dasd_generic_read_dev_chars(device, DASD_ECKD_MAGIC, in dasd_eckd_check_characteristics()
2130 DBF_EVENT_DEVID(DBF_WARNING, device->cdev, in dasd_eckd_check_characteristics()
2136 rc = dasd_devmap_set_device_copy_relation(device->cdev, in dasd_eckd_check_characteristics()
2137 dasd_eckd_pprc_enabled(device)); in dasd_eckd_check_characteristics()
2139 DBF_EVENT_DEVID(DBF_WARNING, device->cdev, in dasd_eckd_check_characteristics()
2145 rc = dasd_eckd_alloc_block(device); in dasd_eckd_check_characteristics()
2150 rc = dasd_alias_make_device_known_to_lcu(device); in dasd_eckd_check_characteristics()
2154 dasd_eckd_validate_server(device, 0); in dasd_eckd_check_characteristics()
2157 rc = dasd_eckd_read_conf(device); in dasd_eckd_check_characteristics()
2161 dasd_eckd_read_fc_security(device); in dasd_eckd_check_characteristics()
2162 dasd_path_create_kobjects(device); in dasd_eckd_check_characteristics()
2165 dasd_eckd_read_features(device); in dasd_eckd_check_characteristics()
2168 dasd_eckd_read_vol_info(device); in dasd_eckd_check_characteristics()
2171 dasd_eckd_read_ext_pool_info(device); in dasd_eckd_check_characteristics()
2173 if ((device->features & DASD_FEATURE_USERAW) && in dasd_eckd_check_characteristics()
2175 dev_err(&device->cdev->dev, "The storage server does not " in dasd_eckd_check_characteristics()
2188 private->fcx_max_data = get_fcx_max_data(device); in dasd_eckd_check_characteristics()
2190 readonly = dasd_device_is_ro(device); in dasd_eckd_check_characteristics()
2192 set_bit(DASD_FLAG_DEVICE_RO, &device->flags); in dasd_eckd_check_characteristics()
2194 dev_info(&device->cdev->dev, "New DASD %04X/%02X (CU %04X/%02X) " in dasd_eckd_check_characteristics()
2207 dasd_alias_disconnect_device_from_lcu(device); in dasd_eckd_check_characteristics()
2209 dasd_free_block(device->block); in dasd_eckd_check_characteristics()
2210 device->block = NULL; in dasd_eckd_check_characteristics()
2212 dasd_eckd_clear_conf_data(device); in dasd_eckd_check_characteristics()
2213 dasd_path_remove_kobjects(device); in dasd_eckd_check_characteristics()
2214 kfree(device->private); in dasd_eckd_check_characteristics()
2215 device->private = NULL; in dasd_eckd_check_characteristics()
2219 static void dasd_eckd_uncheck_device(struct dasd_device *device) in dasd_eckd_uncheck_device() argument
2221 struct dasd_eckd_private *private = device->private; in dasd_eckd_uncheck_device()
2226 dasd_alias_disconnect_device_from_lcu(device); in dasd_eckd_uncheck_device()
2231 dasd_eckd_clear_conf_data(device); in dasd_eckd_uncheck_device()
2232 dasd_path_remove_kobjects(device); in dasd_eckd_uncheck_device()
2236 dasd_eckd_analysis_ccw(struct dasd_device *device) in dasd_eckd_analysis_ccw() argument
2238 struct dasd_eckd_private *private = device->private; in dasd_eckd_analysis_ccw()
2248 cqr = dasd_smalloc_request(DASD_ECKD_MAGIC, cplength, datasize, device, in dasd_eckd_analysis_ccw()
2255 DASD_ECKD_CCW_READ_COUNT, device, 0); in dasd_eckd_analysis_ccw()
2260 DASD_ECKD_CCW_READ_COUNT, device, 0); in dasd_eckd_analysis_ccw()
2276 DASD_ECKD_CCW_READ_COUNT, device, 0); in dasd_eckd_analysis_ccw()
2285 cqr->startdev = device; in dasd_eckd_analysis_ccw()
2286 cqr->memdev = device; in dasd_eckd_analysis_ccw()
2323 struct dasd_device *device = init_cqr->startdev; in dasd_eckd_analysis_callback() local
2324 struct dasd_eckd_private *private = device->private; in dasd_eckd_analysis_callback()
2327 dasd_sfree_request(init_cqr, device); in dasd_eckd_analysis_callback()
2328 dasd_kick_device(device); in dasd_eckd_analysis_callback()
2352 struct dasd_device *device = block->base; in dasd_eckd_end_analysis() local
2353 struct dasd_eckd_private *private = device->private; in dasd_eckd_end_analysis()
2363 init_cqr = dasd_eckd_analysis_ccw(device); in dasd_eckd_end_analysis()
2366 dasd_sfree_request(init_cqr, device); in dasd_eckd_end_analysis()
2369 if (device->features & DASD_FEATURE_USERAW) { in dasd_eckd_end_analysis()
2377 dev_warn(&device->cdev->dev, "The DASD is not formatted\n"); in dasd_eckd_end_analysis()
2380 dev_err(&device->cdev->dev, in dasd_eckd_end_analysis()
2416 dev_warn(&device->cdev->dev, in dasd_eckd_end_analysis()
2426 dev_warn(&device->cdev->dev, in dasd_eckd_end_analysis()
2441 dev_info(&device->cdev->dev, in dasd_eckd_end_analysis()
2464 static int dasd_eckd_basic_to_ready(struct dasd_device *device) in dasd_eckd_basic_to_ready() argument
2466 return dasd_alias_add_device(device); in dasd_eckd_basic_to_ready()
2469 static int dasd_eckd_online_to_ready(struct dasd_device *device) in dasd_eckd_online_to_ready() argument
2471 if (cancel_work_sync(&device->reload_device)) in dasd_eckd_online_to_ready()
2472 dasd_put_device(device); in dasd_eckd_online_to_ready()
2473 if (cancel_work_sync(&device->kick_validate)) in dasd_eckd_online_to_ready()
2474 dasd_put_device(device); in dasd_eckd_online_to_ready()
2479 static int dasd_eckd_basic_to_known(struct dasd_device *device) in dasd_eckd_basic_to_known() argument
2481 return dasd_alias_remove_device(device); in dasd_eckd_basic_to_known()
3004 struct dasd_device *device; in dasd_eckd_format_process_data() local
3072 device = cqr->startdev; in dasd_eckd_format_process_data()
3073 private = device->private; in dasd_eckd_format_process_data()
3087 dasd_ffree_request(cqr, device); in dasd_eckd_format_process_data()
3174 struct dasd_device *device = cqr->startdev; in dasd_eckd_ese_format_cb() local
3175 struct dasd_eckd_private *private = device->private; in dasd_eckd_ese_format_cb()
3180 dasd_ffree_request(cqr, device); in dasd_eckd_ese_format_cb()
3574 struct dasd_device *device = (struct dasd_device *) cqr->startdev; in dasd_eckd_erp_action() local
3575 struct ccw_device *cdev = device->cdev; in dasd_eckd_erp_action()
3596 static void dasd_eckd_check_for_device_change(struct dasd_device *device, in dasd_eckd_check_for_device_change() argument
3602 struct dasd_eckd_private *private = device->private; in dasd_eckd_check_for_device_change()
3611 if (!device->block && private->lcu && in dasd_eckd_check_for_device_change()
3612 device->state == DASD_STATE_ONLINE && in dasd_eckd_check_for_device_change()
3613 !test_bit(DASD_FLAG_OFFLINE, &device->flags) && in dasd_eckd_check_for_device_change()
3614 !test_bit(DASD_FLAG_SUSPENDED, &device->flags)) { in dasd_eckd_check_for_device_change()
3616 dasd_reload_device(device); in dasd_eckd_check_for_device_change()
3618 dasd_generic_handle_state_change(device); in dasd_eckd_check_for_device_change()
3629 if (test_and_set_bit(DASD_FLAG_SUC, &device->flags)) { in dasd_eckd_check_for_device_change()
3630 DBF_DEV_EVENT(DBF_WARNING, device, "%s", in dasd_eckd_check_for_device_change()
3636 DBF_DEV_EVENT(DBF_WARNING, device, "%s", in dasd_eckd_check_for_device_change()
3638 clear_bit(DASD_FLAG_SUC, &device->flags); in dasd_eckd_check_for_device_change()
3643 DBF_DEV_EVENT(DBF_NOTICE, device, "%s %x", in dasd_eckd_check_for_device_change()
3646 dasd_get_device(device); in dasd_eckd_check_for_device_change()
3647 if (!schedule_work(&device->suc_work)) in dasd_eckd_check_for_device_change()
3648 dasd_put_device(device); in dasd_eckd_check_for_device_change()
3656 dasd_3990_erp_handle_sim(device, sense); in dasd_eckd_check_for_device_change()
3663 if (device->block && (sense[27] & DASD_SENSE_BIT_0) && in dasd_eckd_check_for_device_change()
3666 test_bit(DASD_FLAG_IS_RESERVED, &device->flags)) { in dasd_eckd_check_for_device_change()
3667 if (device->features & DASD_FEATURE_FAILONSLCK) in dasd_eckd_check_for_device_change()
3668 set_bit(DASD_FLAG_LOCK_STOLEN, &device->flags); in dasd_eckd_check_for_device_change()
3669 clear_bit(DASD_FLAG_IS_RESERVED, &device->flags); in dasd_eckd_check_for_device_change()
3670 dev_err(&device->cdev->dev, in dasd_eckd_check_for_device_change()
3675 static int dasd_eckd_ras_sanity_checks(struct dasd_device *device, in dasd_eckd_ras_sanity_checks() argument
3679 struct dasd_eckd_private *private = device->private; in dasd_eckd_ras_sanity_checks()
3686 dev_warn(&device->cdev->dev, in dasd_eckd_ras_sanity_checks()
3691 dev_warn(&device->cdev->dev, in dasd_eckd_ras_sanity_checks()
3696 dev_warn(&device->cdev->dev, in dasd_eckd_ras_sanity_checks()
3738 static int dasd_in_copy_relation(struct dasd_device *device) in dasd_in_copy_relation() argument
3743 if (!dasd_eckd_pprc_enabled(device)) in dasd_in_copy_relation()
3750 rc = dasd_eckd_query_pprc_status(device, temp); in dasd_in_copy_relation()
3762 dasd_eckd_dso_ras(struct dasd_device *device, struct dasd_block *block, in dasd_eckd_dso_ras() argument
3766 struct dasd_eckd_private *private = device->private; in dasd_eckd_dso_ras()
3783 if (dasd_eckd_ras_sanity_checks(device, first_trk, last_trk)) in dasd_eckd_dso_ras()
3786 copy_relation = dasd_in_copy_relation(device); in dasd_eckd_dso_ras()
3794 trks_per_ext = dasd_eckd_ext_size(device) * private->rdc_data.trk_per_cyl; in dasd_eckd_dso_ras()
3801 cqr = dasd_smalloc_request(DASD_ECKD_MAGIC, 1, size, device, rq); in dasd_eckd_dso_ras()
3803 DBF_EVENT_DEVID(DBF_WARNING, device->cdev, "%s", in dasd_eckd_dso_ras()
3858 cqr->startdev = device; in dasd_eckd_dso_ras()
3859 cqr->memdev = device; in dasd_eckd_dso_ras()
3862 cqr->expires = device->default_expires * HZ; in dasd_eckd_dso_ras()
3869 static int dasd_eckd_release_space_full(struct dasd_device *device) in dasd_eckd_release_space_full() argument
3874 cqr = dasd_eckd_dso_ras(device, NULL, NULL, 0, 0, 0); in dasd_eckd_release_space_full()
3885 static int dasd_eckd_release_space_trks(struct dasd_device *device, in dasd_eckd_release_space_trks() argument
3888 struct dasd_eckd_private *private = device->private; in dasd_eckd_release_space_trks()
3889 struct dasd_block *block = device->block; in dasd_eckd_release_space_trks()
3901 device_exts = private->real_cyl / dasd_eckd_ext_size(device); in dasd_eckd_release_space_trks()
3902 trks_per_ext = dasd_eckd_ext_size(device) * private->rdc_data.trk_per_cyl; in dasd_eckd_release_space_trks()
3916 cqr = dasd_eckd_dso_ras(device, NULL, NULL, cur_pos, stop, 1); in dasd_eckd_release_space_trks()
3938 device = cqr->startdev; in dasd_eckd_release_space_trks()
3939 private = device->private; in dasd_eckd_release_space_trks()
3944 dasd_sfree_request(cqr, device); in dasd_eckd_release_space_trks()
3953 static int dasd_eckd_release_space(struct dasd_device *device, in dasd_eckd_release_space() argument
3957 return dasd_eckd_release_space_full(device); in dasd_eckd_release_space()
3959 return dasd_eckd_release_space_trks(device, rdata->start_unit, in dasd_eckd_release_space()
5023 dasd_eckd_fill_info(struct dasd_device * device, in dasd_eckd_fill_info() argument
5026 struct dasd_eckd_private *private = device->private; in dasd_eckd_fill_info()
5051 dasd_eckd_release(struct dasd_device *device) in dasd_eckd_release() argument
5062 cqr = dasd_smalloc_request(DASD_ECKD_MAGIC, 1, 32, device, NULL); in dasd_eckd_release()
5079 cqr->startdev = device; in dasd_eckd_release()
5080 cqr->memdev = device; in dasd_eckd_release()
5090 clear_bit(DASD_FLAG_IS_RESERVED, &device->flags); in dasd_eckd_release()
5106 dasd_eckd_reserve(struct dasd_device *device) in dasd_eckd_reserve() argument
5117 cqr = dasd_smalloc_request(DASD_ECKD_MAGIC, 1, 32, device, NULL); in dasd_eckd_reserve()
5134 cqr->startdev = device; in dasd_eckd_reserve()
5135 cqr->memdev = device; in dasd_eckd_reserve()
5145 set_bit(DASD_FLAG_IS_RESERVED, &device->flags); in dasd_eckd_reserve()
5160 dasd_eckd_steal_lock(struct dasd_device *device) in dasd_eckd_steal_lock() argument
5171 cqr = dasd_smalloc_request(DASD_ECKD_MAGIC, 1, 32, device, NULL); in dasd_eckd_steal_lock()
5188 cqr->startdev = device; in dasd_eckd_steal_lock()
5189 cqr->memdev = device; in dasd_eckd_steal_lock()
5199 set_bit(DASD_FLAG_IS_RESERVED, &device->flags); in dasd_eckd_steal_lock()
5214 static int dasd_eckd_snid(struct dasd_device *device, in dasd_eckd_snid() argument
5231 sizeof(struct dasd_snid_data), device, in dasd_eckd_snid()
5249 cqr->startdev = device; in dasd_eckd_snid()
5250 cqr->memdev = device; in dasd_eckd_snid()
5281 dasd_eckd_performance(struct dasd_device *device, void __user *argp) in dasd_eckd_performance() argument
5292 device, NULL); in dasd_eckd_performance()
5294 DBF_DEV_EVENT(DBF_WARNING, device, "%s", in dasd_eckd_performance()
5298 cqr->startdev = device; in dasd_eckd_performance()
5299 cqr->memdev = device; in dasd_eckd_performance()
5345 dasd_eckd_get_attrib(struct dasd_device *device, void __user *argp) in dasd_eckd_get_attrib() argument
5347 struct dasd_eckd_private *private = device->private; in dasd_eckd_get_attrib()
5369 dasd_eckd_set_attrib(struct dasd_device *device, void __user *argp) in dasd_eckd_set_attrib() argument
5371 struct dasd_eckd_private *private = device->private; in dasd_eckd_set_attrib()
5383 dev_info(&device->cdev->dev, in dasd_eckd_set_attrib()
5393 static int dasd_symm_io(struct dasd_device *device, void __user *argp) in dasd_symm_io() argument
5422 DBF_DEV_EVENT(DBF_WARNING, device, in dasd_symm_io()
5446 cqr = dasd_smalloc_request(DASD_ECKD_MAGIC, 2, 0, device, NULL); in dasd_symm_io()
5448 DBF_DEV_EVENT(DBF_WARNING, device, "%s", in dasd_symm_io()
5454 cqr->startdev = device; in dasd_symm_io()
5455 cqr->memdev = device; in dasd_symm_io()
5494 DBF_DEV_EVENT(DBF_WARNING, device, in dasd_symm_io()
5503 struct dasd_device *device = block->base; in dasd_eckd_ioctl() local
5507 return dasd_eckd_get_attrib(device, argp); in dasd_eckd_ioctl()
5509 return dasd_eckd_set_attrib(device, argp); in dasd_eckd_ioctl()
5511 return dasd_eckd_performance(device, argp); in dasd_eckd_ioctl()
5513 return dasd_eckd_release(device); in dasd_eckd_ioctl()
5515 return dasd_eckd_reserve(device); in dasd_eckd_ioctl()
5517 return dasd_eckd_steal_lock(device); in dasd_eckd_ioctl()
5519 return dasd_eckd_snid(device, argp); in dasd_eckd_ioctl()
5521 return dasd_symm_io(device, argp); in dasd_eckd_ioctl()
5567 dasd_eckd_dump_sense_dbf(struct dasd_device *device, struct irb *irb, in dasd_eckd_dump_sense_dbf() argument
5576 DBF_DEV_EVENT(DBF_EMERG, device, "%s: %016llx %08x : " in dasd_eckd_dump_sense_dbf()
5581 DBF_DEV_EVENT(DBF_EMERG, device, "%s: %016llx %08x : %s", in dasd_eckd_dump_sense_dbf()
5591 static void dasd_eckd_dump_sense_ccw(struct dasd_device *device, in dasd_eckd_dump_sense_ccw() argument
5600 DBF_DEV_EVENT(DBF_WARNING, device, "%s", in dasd_eckd_dump_sense_ccw()
5607 dev_name(&device->cdev->dev)); in dasd_eckd_dump_sense_ccw()
5617 dev_name(&device->cdev->dev), in dasd_eckd_dump_sense_ccw()
5689 static void dasd_eckd_dump_sense_tcw(struct dasd_device *device, in dasd_eckd_dump_sense_tcw() argument
5699 DBF_DEV_EVENT(DBF_WARNING, device, " %s", in dasd_eckd_dump_sense_tcw()
5706 dev_name(&device->cdev->dev)); in dasd_eckd_dump_sense_tcw()
5718 dev_name(&device->cdev->dev), in dasd_eckd_dump_sense_tcw()
5818 static void dasd_eckd_dump_sense(struct dasd_device *device, in dasd_eckd_dump_sense() argument
5836 dasd_eckd_dump_sense_tcw(device, req, irb); in dasd_eckd_dump_sense()
5851 dasd_eckd_dump_sense_ccw(device, req, irb); in dasd_eckd_dump_sense()
5855 static int dasd_eckd_reload_device(struct dasd_device *device) in dasd_eckd_reload_device() argument
5857 struct dasd_eckd_private *private = device->private; in dasd_eckd_reload_device()
5867 dasd_alias_remove_device(device); in dasd_eckd_reload_device()
5869 spin_lock_irqsave(get_ccwdev_lock(device->cdev), flags); in dasd_eckd_reload_device()
5871 spin_unlock_irqrestore(get_ccwdev_lock(device->cdev), flags); in dasd_eckd_reload_device()
5874 rc = dasd_eckd_read_conf(device); in dasd_eckd_reload_device()
5878 dasd_eckd_read_fc_security(device); in dasd_eckd_reload_device()
5880 rc = dasd_eckd_generate_uid(device); in dasd_eckd_reload_device()
5887 dasd_alias_update_add_device(device); in dasd_eckd_reload_device()
5889 dasd_eckd_get_uid(device, &uid); in dasd_eckd_reload_device()
5893 dev_info(&device->cdev->dev, in dasd_eckd_reload_device()
5903 static int dasd_eckd_read_message_buffer(struct dasd_device *device, in dasd_eckd_read_message_buffer() argument
5916 device, NULL); in dasd_eckd_read_message_buffer()
5918 DBF_EVENT_DEVID(DBF_WARNING, device->cdev, "%s", in dasd_eckd_read_message_buffer()
5925 cqr->startdev = device; in dasd_eckd_read_message_buffer()
5926 cqr->memdev = device; in dasd_eckd_read_message_buffer()
5978 DBF_EVENT_DEVID(DBF_WARNING, device->cdev, in dasd_eckd_read_message_buffer()
5985 static int dasd_eckd_query_host_access(struct dasd_device *device, in dasd_eckd_query_host_access() argument
5988 struct dasd_eckd_private *private = device->private; in dasd_eckd_query_host_access()
5996 if (!device->block && private->lcu->pav == HYPER_PAV) in dasd_eckd_query_host_access()
6005 device, NULL); in dasd_eckd_query_host_access()
6007 DBF_EVENT_DEVID(DBF_WARNING, device->cdev, "%s", in dasd_eckd_query_host_access()
6013 dasd_sfree_request(cqr, device); in dasd_eckd_query_host_access()
6014 DBF_EVENT_DEVID(DBF_WARNING, device->cdev, "%s", in dasd_eckd_query_host_access()
6018 cqr->startdev = device; in dasd_eckd_query_host_access()
6019 cqr->memdev = device; in dasd_eckd_query_host_access()
6056 DBF_EVENT_DEVID(DBF_WARNING, device->cdev, in dasd_eckd_query_host_access()
6069 static int dasd_eckd_host_access_count(struct dasd_device *device) in dasd_eckd_host_access_count() argument
6079 DBF_EVENT_DEVID(DBF_WARNING, device->cdev, "%s", in dasd_eckd_host_access_count()
6083 rc = dasd_eckd_query_host_access(device, access); in dasd_eckd_host_access_count()
6105 static int dasd_hosts_print(struct dasd_device *device, struct seq_file *m) in dasd_hosts_print() argument
6115 DBF_EVENT_DEVID(DBF_WARNING, device->cdev, "%s", in dasd_hosts_print()
6119 rc = dasd_eckd_query_host_access(device, access); in dasd_hosts_print()
6158 return copy->entry[i].device; in copy_relation_find_device()
6192 static int dasd_eckd_copy_pair_swap(struct dasd_device *device, char *prim_busid, in dasd_eckd_copy_pair_swap() argument
6200 copy = device->copy; in dasd_eckd_copy_pair_swap()
6203 primary = copy->active->device; in dasd_eckd_copy_pair_swap()
6245 static int dasd_eckd_query_pprc_status(struct dasd_device *device, in dasd_eckd_query_pprc_status() argument
6256 device, NULL); in dasd_eckd_query_pprc_status()
6258 DBF_EVENT_DEVID(DBF_WARNING, device->cdev, "%s", in dasd_eckd_query_pprc_status()
6262 cqr->startdev = device; in dasd_eckd_query_pprc_status()
6263 cqr->memdev = device; in dasd_eckd_query_pprc_status()
6297 DBF_EVENT_DEVID(DBF_WARNING, device->cdev, in dasd_eckd_query_pprc_status()
6310 static int dasd_eckd_nop(struct dasd_device *device) in dasd_eckd_nop() argument
6316 cqr = dasd_smalloc_request(DASD_ECKD_MAGIC, 1, 1, device, NULL); in dasd_eckd_nop()
6318 DBF_EVENT_DEVID(DBF_WARNING, device->cdev, "%s", in dasd_eckd_nop()
6322 cqr->startdev = device; in dasd_eckd_nop()
6323 cqr->memdev = device; in dasd_eckd_nop()
6337 DBF_EVENT_DEVID(DBF_WARNING, device->cdev, in dasd_eckd_nop()
6345 static int dasd_eckd_device_ping(struct dasd_device *device) in dasd_eckd_device_ping() argument
6347 return dasd_eckd_nop(device); in dasd_eckd_device_ping()
6354 dasd_eckd_psf_cuir_response(struct dasd_device *device, int response, in dasd_eckd_psf_cuir_response() argument
6365 device, NULL); in dasd_eckd_psf_cuir_response()
6368 DBF_DEV_EVENT(DBF_WARNING, device, "%s", in dasd_eckd_psf_cuir_response()
6376 psf_cuir->chpid = device->path[pos].chpid; in dasd_eckd_psf_cuir_response()
6378 psf_cuir->cssid = device->path[pos].cssid; in dasd_eckd_psf_cuir_response()
6379 psf_cuir->ssid = device->path[pos].ssid; in dasd_eckd_psf_cuir_response()
6386 cqr->startdev = device; in dasd_eckd_psf_cuir_response()
6387 cqr->memdev = device; in dasd_eckd_psf_cuir_response()
6406 static struct dasd_conf_data *dasd_eckd_get_ref_conf(struct dasd_device *device, in dasd_eckd_get_ref_conf() argument
6416 conf_data = device->path[pos].conf_data; in dasd_eckd_get_ref_conf()
6422 return device->path[pathmask_to_pos(lpum)].conf_data; in dasd_eckd_get_ref_conf()
6434 static int dasd_eckd_cuir_scope(struct dasd_device *device, __u8 lpum, in dasd_eckd_cuir_scope() argument
6452 ref_conf_data = dasd_eckd_get_ref_conf(device, lpum, cuir); in dasd_eckd_cuir_scope()
6465 conf_data = device->path[path].conf_data; in dasd_eckd_cuir_scope()
6491 static void dasd_eckd_cuir_notify_user(struct dasd_device *device, in dasd_eckd_cuir_notify_user() argument
6502 device->path[pos].cssid, in dasd_eckd_cuir_notify_user()
6503 device->path[pos].chpid); in dasd_eckd_cuir_notify_user()
6506 device->path[pos].cssid, in dasd_eckd_cuir_notify_user()
6507 device->path[pos].chpid); in dasd_eckd_cuir_notify_user()
6512 static int dasd_eckd_cuir_remove_path(struct dasd_device *device, __u8 lpum, in dasd_eckd_cuir_remove_path() argument
6517 tbcpm = dasd_eckd_cuir_scope(device, lpum, cuir); in dasd_eckd_cuir_remove_path()
6519 if (!(dasd_path_get_opm(device) & tbcpm)) in dasd_eckd_cuir_remove_path()
6521 if (!(dasd_path_get_opm(device) & ~tbcpm)) { in dasd_eckd_cuir_remove_path()
6527 dasd_path_remove_opm(device, tbcpm); in dasd_eckd_cuir_remove_path()
6528 dasd_path_add_cuirpm(device, tbcpm); in dasd_eckd_cuir_remove_path()
6540 static int dasd_eckd_cuir_quiesce(struct dasd_device *device, __u8 lpum, in dasd_eckd_cuir_quiesce() argument
6543 struct dasd_eckd_private *private = device->private; in dasd_eckd_cuir_quiesce()
6595 dasd_eckd_cuir_notify_user(device, paths, CUIR_QUIESCE); in dasd_eckd_cuir_quiesce()
6601 static int dasd_eckd_cuir_resume(struct dasd_device *device, __u8 lpum, in dasd_eckd_cuir_resume() argument
6604 struct dasd_eckd_private *private = device->private; in dasd_eckd_cuir_resume()
6660 dasd_eckd_cuir_notify_user(device, paths, CUIR_RESUME); in dasd_eckd_cuir_resume()
6664 static void dasd_eckd_handle_cuir(struct dasd_device *device, void *messages, in dasd_eckd_handle_cuir() argument
6670 DBF_DEV_EVENT(DBF_WARNING, device, in dasd_eckd_handle_cuir()
6677 if (dasd_eckd_cuir_quiesce(device, lpum, cuir)) in dasd_eckd_handle_cuir()
6683 dasd_eckd_cuir_resume(device, lpum, cuir); in dasd_eckd_handle_cuir()
6688 dasd_eckd_psf_cuir_response(device, response, in dasd_eckd_handle_cuir()
6690 DBF_DEV_EVENT(DBF_WARNING, device, in dasd_eckd_handle_cuir()
6694 device->discipline->check_attention(device, lpum); in dasd_eckd_handle_cuir()
6697 static void dasd_eckd_oos_resume(struct dasd_device *device) in dasd_eckd_oos_resume() argument
6699 struct dasd_eckd_private *private = device->private; in dasd_eckd_oos_resume()
6733 static void dasd_eckd_handle_oos(struct dasd_device *device, void *messages, in dasd_eckd_handle_oos() argument
6741 dev_warn(&device->cdev->dev, in dasd_eckd_handle_oos()
6743 dasd_eckd_oos_resume(device); in dasd_eckd_handle_oos()
6747 dev_warn(&device->cdev->dev, in dasd_eckd_handle_oos()
6752 dev_info(&device->cdev->dev, in dasd_eckd_handle_oos()
6758 dasd_eckd_read_ext_pool_info(device); in dasd_eckd_handle_oos()
6761 device->discipline->check_attention(device, lpum); in dasd_eckd_handle_oos()
6768 struct dasd_device *device; in dasd_eckd_check_attention_work() local
6772 device = data->device; in dasd_eckd_check_attention_work()
6775 DBF_DEV_EVENT(DBF_WARNING, device, "%s", in dasd_eckd_check_attention_work()
6779 rc = dasd_eckd_read_message_buffer(device, messages, data->lpum); in dasd_eckd_check_attention_work()
6785 dasd_eckd_handle_cuir(device, messages, data->lpum); in dasd_eckd_check_attention_work()
6788 dasd_eckd_handle_oos(device, messages, data->lpum); in dasd_eckd_check_attention_work()
6791 dasd_put_device(device); in dasd_eckd_check_attention_work()
6796 static int dasd_eckd_check_attention(struct dasd_device *device, __u8 lpum) in dasd_eckd_check_attention() argument
6804 dasd_get_device(device); in dasd_eckd_check_attention()
6805 data->device = device; in dasd_eckd_check_attention()
6811 static int dasd_eckd_disable_hpf_path(struct dasd_device *device, __u8 lpum) in dasd_eckd_disable_hpf_path() argument
6813 if (~lpum & dasd_path_get_opm(device)) { in dasd_eckd_disable_hpf_path()
6814 dasd_path_add_nohpfpm(device, lpum); in dasd_eckd_disable_hpf_path()
6815 dasd_path_remove_opm(device, lpum); in dasd_eckd_disable_hpf_path()
6816 dev_err(&device->cdev->dev, in dasd_eckd_disable_hpf_path()
6824 static void dasd_eckd_disable_hpf_device(struct dasd_device *device) in dasd_eckd_disable_hpf_device() argument
6826 struct dasd_eckd_private *private = device->private; in dasd_eckd_disable_hpf_device()
6828 dev_err(&device->cdev->dev, in dasd_eckd_disable_hpf_device()
6833 static int dasd_eckd_hpf_enabled(struct dasd_device *device) in dasd_eckd_hpf_enabled() argument
6835 struct dasd_eckd_private *private = device->private; in dasd_eckd_hpf_enabled()
6840 static void dasd_eckd_handle_hpf_error(struct dasd_device *device, in dasd_eckd_handle_hpf_error() argument
6843 struct dasd_eckd_private *private = device->private; in dasd_eckd_handle_hpf_error()
6847 DBF_DEV_EVENT(DBF_WARNING, device, "%s", in dasd_eckd_handle_hpf_error()
6852 dasd_eckd_disable_hpf_device(device); in dasd_eckd_handle_hpf_error()
6854 if (dasd_eckd_disable_hpf_path(device, irb->esw.esw1.lpum)) in dasd_eckd_handle_hpf_error()
6856 dasd_eckd_disable_hpf_device(device); in dasd_eckd_handle_hpf_error()
6857 dasd_path_set_tbvpm(device, in dasd_eckd_handle_hpf_error()
6858 dasd_path_get_hpfpm(device)); in dasd_eckd_handle_hpf_error()
6864 dasd_device_set_stop_bits(device, DASD_STOPPED_NOT_ACC); in dasd_eckd_handle_hpf_error()
6865 dasd_schedule_requeue(device); in dasd_eckd_handle_hpf_error()
6875 struct dasd_device *device = block->base; in dasd_eckd_setup_blk_queue() local
6878 if (device->features & DASD_FEATURE_USERAW) { in dasd_eckd_setup_blk_queue()