867
873
static DEVICE_ATTR(use_diag, 0644, dasd_use_diag_show, dasd_use_diag_store);
876
* use_raw controls whether the driver should give access to raw eckd data or
877
* operate in standard mode
880
dasd_use_raw_show(struct device *dev, struct device_attribute *attr, char *buf)
882
struct dasd_devmap *devmap;
885
devmap = dasd_find_busid(dev_name(dev));
887
use_raw = (devmap->features & DASD_FEATURE_USERAW) != 0;
889
use_raw = (DASD_FEATURE_DEFAULT & DASD_FEATURE_USERAW) != 0;
890
return sprintf(buf, use_raw ? "1\n" : "0\n");
894
dasd_use_raw_store(struct device *dev, struct device_attribute *attr,
895
const char *buf, size_t count)
897
struct dasd_devmap *devmap;
901
devmap = dasd_devmap_from_cdev(to_ccwdev(dev));
903
return PTR_ERR(devmap);
905
if ((strict_strtoul(buf, 10, &val) != 0) || val > 1)
908
spin_lock(&dasd_devmap_lock);
909
/* Changing diag discipline flag is only allowed in offline state. */
911
if (!devmap->device && !(devmap->features & DASD_FEATURE_USEDIAG)) {
913
devmap->features |= DASD_FEATURE_USERAW;
915
devmap->features &= ~DASD_FEATURE_USERAW;
918
spin_unlock(&dasd_devmap_lock);
922
static DEVICE_ATTR(raw_track_access, 0644, dasd_use_raw_show,
870
926
dasd_discipline_show(struct device *dev, struct device_attribute *attr,
926
989
static DEVICE_ATTR(status, 0444, dasd_device_status_show, NULL);
929
dasd_alias_show(struct device *dev, struct device_attribute *attr, char *buf)
991
static ssize_t dasd_alias_show(struct device *dev,
992
struct device_attribute *attr, char *buf)
931
struct dasd_devmap *devmap;
994
struct dasd_device *device;
934
devmap = dasd_find_busid(dev_name(dev));
935
spin_lock(&dasd_devmap_lock);
936
if (IS_ERR(devmap) || strlen(devmap->uid.vendor) == 0) {
937
spin_unlock(&dasd_devmap_lock);
997
device = dasd_device_from_cdev(to_ccwdev(dev));
938
999
return sprintf(buf, "0\n");
1001
if (device->discipline && device->discipline->get_uid &&
1002
!device->discipline->get_uid(device, &uid)) {
1003
if (uid.type == UA_BASE_PAV_ALIAS ||
1004
uid.type == UA_HYPER_PAV_ALIAS) {
1005
dasd_put_device(device);
1006
return sprintf(buf, "1\n");
940
if (devmap->uid.type == UA_BASE_PAV_ALIAS ||
941
devmap->uid.type == UA_HYPER_PAV_ALIAS)
945
spin_unlock(&dasd_devmap_lock);
946
return sprintf(buf, alias ? "1\n" : "0\n");
1009
dasd_put_device(device);
1011
return sprintf(buf, "0\n");
949
1014
static DEVICE_ATTR(alias, 0444, dasd_alias_show, NULL);
952
dasd_vendor_show(struct device *dev, struct device_attribute *attr, char *buf)
1016
static ssize_t dasd_vendor_show(struct device *dev,
1017
struct device_attribute *attr, char *buf)
954
struct dasd_devmap *devmap;
1019
struct dasd_device *device;
1020
struct dasd_uid uid;
957
devmap = dasd_find_busid(dev_name(dev));
958
spin_lock(&dasd_devmap_lock);
959
if (!IS_ERR(devmap) && strlen(devmap->uid.vendor) > 0)
960
vendor = devmap->uid.vendor;
963
spin_unlock(&dasd_devmap_lock);
1023
device = dasd_device_from_cdev(to_ccwdev(dev));
1026
return snprintf(buf, PAGE_SIZE, "%s\n", vendor);
1028
if (device->discipline && device->discipline->get_uid &&
1029
!device->discipline->get_uid(device, &uid))
1030
vendor = uid.vendor;
1032
dasd_put_device(device);
965
1034
return snprintf(buf, PAGE_SIZE, "%s\n", vendor);
975
1044
dasd_uid_show(struct device *dev, struct device_attribute *attr, char *buf)
977
struct dasd_devmap *devmap;
1046
struct dasd_device *device;
1047
struct dasd_uid uid;
978
1048
char uid_string[UID_STRLEN];
979
1049
char ua_string[3];
980
struct dasd_uid *uid;
982
devmap = dasd_find_busid(dev_name(dev));
983
spin_lock(&dasd_devmap_lock);
984
if (IS_ERR(devmap) || strlen(devmap->uid.vendor) == 0) {
985
spin_unlock(&dasd_devmap_lock);
986
return sprintf(buf, "\n");
991
sprintf(ua_string, "%02x", uid->real_unit_addr);
993
case UA_BASE_PAV_ALIAS:
994
sprintf(ua_string, "%02x", uid->base_unit_addr);
996
case UA_HYPER_PAV_ALIAS:
997
sprintf(ua_string, "xx");
1000
/* should not happen, treat like base device */
1001
sprintf(ua_string, "%02x", uid->real_unit_addr);
1004
if (strlen(uid->vduit) > 0)
1005
snprintf(uid_string, sizeof(uid_string),
1007
uid->vendor, uid->serial,
1008
uid->ssid, ua_string,
1011
snprintf(uid_string, sizeof(uid_string),
1013
uid->vendor, uid->serial,
1014
uid->ssid, ua_string);
1015
spin_unlock(&dasd_devmap_lock);
1051
device = dasd_device_from_cdev(to_ccwdev(dev));
1054
return snprintf(buf, PAGE_SIZE, "%s\n", uid_string);
1056
if (device->discipline && device->discipline->get_uid &&
1057
!device->discipline->get_uid(device, &uid)) {
1059
case UA_BASE_DEVICE:
1060
snprintf(ua_string, sizeof(ua_string), "%02x",
1061
uid.real_unit_addr);
1063
case UA_BASE_PAV_ALIAS:
1064
snprintf(ua_string, sizeof(ua_string), "%02x",
1065
uid.base_unit_addr);
1067
case UA_HYPER_PAV_ALIAS:
1068
snprintf(ua_string, sizeof(ua_string), "xx");
1071
/* should not happen, treat like base device */
1072
snprintf(ua_string, sizeof(ua_string), "%02x",
1073
uid.real_unit_addr);
1077
if (strlen(uid.vduit) > 0)
1078
snprintf(uid_string, sizeof(uid_string),
1080
uid.vendor, uid.serial, uid.ssid, ua_string,
1083
snprintf(uid_string, sizeof(uid_string),
1085
uid.vendor, uid.serial, uid.ssid, ua_string);
1087
dasd_put_device(device);
1016
1089
return snprintf(buf, PAGE_SIZE, "%s\n", uid_string);
1019
1091
static DEVICE_ATTR(uid, 0444, dasd_uid_show, NULL);
1065
1137
static DEVICE_ATTR(eer_enabled, 0644, dasd_eer_show, dasd_eer_store);
1140
* expiration time for default requests
1143
dasd_expires_show(struct device *dev, struct device_attribute *attr, char *buf)
1145
struct dasd_device *device;
1148
device = dasd_device_from_cdev(to_ccwdev(dev));
1151
len = snprintf(buf, PAGE_SIZE, "%lu\n", device->default_expires);
1152
dasd_put_device(device);
1157
dasd_expires_store(struct device *dev, struct device_attribute *attr,
1158
const char *buf, size_t count)
1160
struct dasd_device *device;
1163
device = dasd_device_from_cdev(to_ccwdev(dev));
1167
if ((strict_strtoul(buf, 10, &val) != 0) ||
1168
(val > DASD_EXPIRES_MAX) || val == 0) {
1169
dasd_put_device(device);
1174
device->default_expires = val;
1176
dasd_put_device(device);
1180
static DEVICE_ATTR(expires, 0644, dasd_expires_show, dasd_expires_store);
1182
static ssize_t dasd_reservation_policy_show(struct device *dev,
1183
struct device_attribute *attr,
1186
struct dasd_devmap *devmap;
1189
devmap = dasd_find_busid(dev_name(dev));
1190
if (IS_ERR(devmap)) {
1191
rc = snprintf(buf, PAGE_SIZE, "ignore\n");
1193
spin_lock(&dasd_devmap_lock);
1194
if (devmap->features & DASD_FEATURE_FAILONSLCK)
1195
rc = snprintf(buf, PAGE_SIZE, "fail\n");
1197
rc = snprintf(buf, PAGE_SIZE, "ignore\n");
1198
spin_unlock(&dasd_devmap_lock);
1203
static ssize_t dasd_reservation_policy_store(struct device *dev,
1204
struct device_attribute *attr,
1205
const char *buf, size_t count)
1207
struct dasd_devmap *devmap;
1210
devmap = dasd_devmap_from_cdev(to_ccwdev(dev));
1212
return PTR_ERR(devmap);
1214
spin_lock(&dasd_devmap_lock);
1215
if (sysfs_streq("ignore", buf))
1216
devmap->features &= ~DASD_FEATURE_FAILONSLCK;
1217
else if (sysfs_streq("fail", buf))
1218
devmap->features |= DASD_FEATURE_FAILONSLCK;
1222
devmap->device->features = devmap->features;
1223
spin_unlock(&dasd_devmap_lock);
1230
static DEVICE_ATTR(reservation_policy, 0644,
1231
dasd_reservation_policy_show, dasd_reservation_policy_store);
1233
static ssize_t dasd_reservation_state_show(struct device *dev,
1234
struct device_attribute *attr,
1237
struct dasd_device *device;
1240
device = dasd_device_from_cdev(to_ccwdev(dev));
1242
return snprintf(buf, PAGE_SIZE, "none\n");
1244
if (test_bit(DASD_FLAG_IS_RESERVED, &device->flags))
1245
rc = snprintf(buf, PAGE_SIZE, "reserved\n");
1246
else if (test_bit(DASD_FLAG_LOCK_STOLEN, &device->flags))
1247
rc = snprintf(buf, PAGE_SIZE, "lost\n");
1249
rc = snprintf(buf, PAGE_SIZE, "none\n");
1250
dasd_put_device(device);
1254
static ssize_t dasd_reservation_state_store(struct device *dev,
1255
struct device_attribute *attr,
1256
const char *buf, size_t count)
1258
struct dasd_device *device;
1261
device = dasd_device_from_cdev(to_ccwdev(dev));
1264
if (sysfs_streq("reset", buf))
1265
clear_bit(DASD_FLAG_LOCK_STOLEN, &device->flags);
1268
dasd_put_device(device);
1276
static DEVICE_ATTR(last_known_reservation_state, 0644,
1277
dasd_reservation_state_show, dasd_reservation_state_store);
1067
1279
static struct attribute * dasd_attrs[] = {
1068
1280
&dev_attr_readonly.attr,
1069
1281
&dev_attr_discipline.attr,
1086
* Return copy of the device unique identifier.
1089
dasd_get_uid(struct ccw_device *cdev, struct dasd_uid *uid)
1091
struct dasd_devmap *devmap;
1093
devmap = dasd_find_busid(dev_name(&cdev->dev));
1095
return PTR_ERR(devmap);
1096
spin_lock(&dasd_devmap_lock);
1098
spin_unlock(&dasd_devmap_lock);
1101
EXPORT_SYMBOL_GPL(dasd_get_uid);
1104
* Register the given device unique identifier into devmap struct.
1105
* In addition check if the related storage server subsystem ID is already
1106
* contained in the dasd_server_ssid_list. If subsystem ID is not contained,
1108
* Return 0 if server was already in serverlist,
1109
* 1 if the server was added successful
1110
* <0 in case of error.
1113
dasd_set_uid(struct ccw_device *cdev, struct dasd_uid *uid)
1115
struct dasd_devmap *devmap;
1117
devmap = dasd_find_busid(dev_name(&cdev->dev));
1119
return PTR_ERR(devmap);
1121
spin_lock(&dasd_devmap_lock);
1123
spin_unlock(&dasd_devmap_lock);
1127
EXPORT_SYMBOL_GPL(dasd_set_uid);
1130
1302
* Return value of the specified feature.