diff options
Diffstat (limited to 'drivers/s390/block/dasd_devmap.c')
-rw-r--r-- | drivers/s390/block/dasd_devmap.c | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/drivers/s390/block/dasd_devmap.c b/drivers/s390/block/dasd_devmap.c index ed70852cc915..6a89cefe99bb 100644 --- a/drivers/s390/block/dasd_devmap.c +++ b/drivers/s390/block/dasd_devmap.c | |||
@@ -19,6 +19,7 @@ | |||
19 | 19 | ||
20 | #include <asm/debug.h> | 20 | #include <asm/debug.h> |
21 | #include <asm/uaccess.h> | 21 | #include <asm/uaccess.h> |
22 | #include <asm/ipl.h> | ||
22 | 23 | ||
23 | /* This is ugly... */ | 24 | /* This is ugly... */ |
24 | #define PRINTK_HEADER "dasd_devmap:" | 25 | #define PRINTK_HEADER "dasd_devmap:" |
@@ -133,6 +134,8 @@ dasd_call_setup(char *str) | |||
133 | __setup ("dasd=", dasd_call_setup); | 134 | __setup ("dasd=", dasd_call_setup); |
134 | #endif /* #ifndef MODULE */ | 135 | #endif /* #ifndef MODULE */ |
135 | 136 | ||
137 | #define DASD_IPLDEV "ipldev" | ||
138 | |||
136 | /* | 139 | /* |
137 | * Read a device busid/devno from a string. | 140 | * Read a device busid/devno from a string. |
138 | */ | 141 | */ |
@@ -141,6 +144,20 @@ dasd_busid(char **str, int *id0, int *id1, int *devno) | |||
141 | { | 144 | { |
142 | int val, old_style; | 145 | int val, old_style; |
143 | 146 | ||
147 | /* Interpret ipldev busid */ | ||
148 | if (strncmp(DASD_IPLDEV, *str, strlen(DASD_IPLDEV)) == 0) { | ||
149 | if (ipl_info.type != IPL_TYPE_CCW) { | ||
150 | MESSAGE(KERN_ERR, "%s", "ipl device is not a ccw " | ||
151 | "device"); | ||
152 | return -EINVAL; | ||
153 | } | ||
154 | *id0 = 0; | ||
155 | *id1 = ipl_info.data.ccw.dev_id.ssid; | ||
156 | *devno = ipl_info.data.ccw.dev_id.devno; | ||
157 | *str += strlen(DASD_IPLDEV); | ||
158 | |||
159 | return 0; | ||
160 | } | ||
144 | /* check for leading '0x' */ | 161 | /* check for leading '0x' */ |
145 | old_style = 0; | 162 | old_style = 0; |
146 | if ((*str)[0] == '0' && (*str)[1] == 'x') { | 163 | if ((*str)[0] == '0' && (*str)[1] == 'x') { |
@@ -829,6 +846,46 @@ dasd_discipline_show(struct device *dev, struct device_attribute *attr, | |||
829 | static DEVICE_ATTR(discipline, 0444, dasd_discipline_show, NULL); | 846 | static DEVICE_ATTR(discipline, 0444, dasd_discipline_show, NULL); |
830 | 847 | ||
831 | static ssize_t | 848 | static ssize_t |
849 | dasd_device_status_show(struct device *dev, struct device_attribute *attr, | ||
850 | char *buf) | ||
851 | { | ||
852 | struct dasd_device *device; | ||
853 | ssize_t len; | ||
854 | |||
855 | device = dasd_device_from_cdev(to_ccwdev(dev)); | ||
856 | if (!IS_ERR(device)) { | ||
857 | switch (device->state) { | ||
858 | case DASD_STATE_NEW: | ||
859 | len = snprintf(buf, PAGE_SIZE, "new\n"); | ||
860 | break; | ||
861 | case DASD_STATE_KNOWN: | ||
862 | len = snprintf(buf, PAGE_SIZE, "detected\n"); | ||
863 | break; | ||
864 | case DASD_STATE_BASIC: | ||
865 | len = snprintf(buf, PAGE_SIZE, "basic\n"); | ||
866 | break; | ||
867 | case DASD_STATE_UNFMT: | ||
868 | len = snprintf(buf, PAGE_SIZE, "unformatted\n"); | ||
869 | break; | ||
870 | case DASD_STATE_READY: | ||
871 | len = snprintf(buf, PAGE_SIZE, "ready\n"); | ||
872 | break; | ||
873 | case DASD_STATE_ONLINE: | ||
874 | len = snprintf(buf, PAGE_SIZE, "online\n"); | ||
875 | break; | ||
876 | default: | ||
877 | len = snprintf(buf, PAGE_SIZE, "no stat\n"); | ||
878 | break; | ||
879 | } | ||
880 | dasd_put_device(device); | ||
881 | } else | ||
882 | len = snprintf(buf, PAGE_SIZE, "unknown\n"); | ||
883 | return len; | ||
884 | } | ||
885 | |||
886 | static DEVICE_ATTR(status, 0444, dasd_device_status_show, NULL); | ||
887 | |||
888 | static ssize_t | ||
832 | dasd_alias_show(struct device *dev, struct device_attribute *attr, char *buf) | 889 | dasd_alias_show(struct device *dev, struct device_attribute *attr, char *buf) |
833 | { | 890 | { |
834 | struct dasd_devmap *devmap; | 891 | struct dasd_devmap *devmap; |
@@ -939,6 +996,7 @@ static DEVICE_ATTR(eer_enabled, 0644, dasd_eer_show, dasd_eer_store); | |||
939 | static struct attribute * dasd_attrs[] = { | 996 | static struct attribute * dasd_attrs[] = { |
940 | &dev_attr_readonly.attr, | 997 | &dev_attr_readonly.attr, |
941 | &dev_attr_discipline.attr, | 998 | &dev_attr_discipline.attr, |
999 | &dev_attr_status.attr, | ||
942 | &dev_attr_alias.attr, | 1000 | &dev_attr_alias.attr, |
943 | &dev_attr_vendor.attr, | 1001 | &dev_attr_vendor.attr, |
944 | &dev_attr_uid.attr, | 1002 | &dev_attr_uid.attr, |