aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/scsi/ipr.c70
1 files changed, 68 insertions, 2 deletions
diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c
index f73007db2bec..52568588039f 100644
--- a/drivers/scsi/ipr.c
+++ b/drivers/scsi/ipr.c
@@ -1168,7 +1168,7 @@ static void ipr_update_res_entry(struct ipr_resource_entry *res,
1168 if (res->ioa_cfg->sis64) { 1168 if (res->ioa_cfg->sis64) {
1169 res->flags = cfgtew->u.cfgte64->flags; 1169 res->flags = cfgtew->u.cfgte64->flags;
1170 res->res_flags = cfgtew->u.cfgte64->res_flags; 1170 res->res_flags = cfgtew->u.cfgte64->res_flags;
1171 res->type = cfgtew->u.cfgte64->res_type & 0x0f; 1171 res->type = cfgtew->u.cfgte64->res_type;
1172 1172
1173 memcpy(&res->std_inq_data, &cfgtew->u.cfgte64->std_inq_data, 1173 memcpy(&res->std_inq_data, &cfgtew->u.cfgte64->std_inq_data,
1174 sizeof(struct ipr_std_inq_data)); 1174 sizeof(struct ipr_std_inq_data));
@@ -3762,6 +3762,36 @@ static struct device_attribute ipr_update_fw_attr = {
3762 .store = ipr_store_update_fw 3762 .store = ipr_store_update_fw
3763}; 3763};
3764 3764
3765/**
3766 * ipr_show_fw_type - Show the adapter's firmware type.
3767 * @dev: class device struct
3768 * @buf: buffer
3769 *
3770 * Return value:
3771 * number of bytes printed to buffer
3772 **/
3773static ssize_t ipr_show_fw_type(struct device *dev,
3774 struct device_attribute *attr, char *buf)
3775{
3776 struct Scsi_Host *shost = class_to_shost(dev);
3777 struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata;
3778 unsigned long lock_flags = 0;
3779 int len;
3780
3781 spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
3782 len = snprintf(buf, PAGE_SIZE, "%d\n", ioa_cfg->sis64);
3783 spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
3784 return len;
3785}
3786
3787static struct device_attribute ipr_ioa_fw_type_attr = {
3788 .attr = {
3789 .name = "fw_type",
3790 .mode = S_IRUGO,
3791 },
3792 .show = ipr_show_fw_type
3793};
3794
3765static struct device_attribute *ipr_ioa_attrs[] = { 3795static struct device_attribute *ipr_ioa_attrs[] = {
3766 &ipr_fw_version_attr, 3796 &ipr_fw_version_attr,
3767 &ipr_log_level_attr, 3797 &ipr_log_level_attr,
@@ -3769,6 +3799,7 @@ static struct device_attribute *ipr_ioa_attrs[] = {
3769 &ipr_ioa_state_attr, 3799 &ipr_ioa_state_attr,
3770 &ipr_ioa_reset_attr, 3800 &ipr_ioa_reset_attr,
3771 &ipr_update_fw_attr, 3801 &ipr_update_fw_attr,
3802 &ipr_ioa_fw_type_attr,
3772 NULL, 3803 NULL,
3773}; 3804};
3774 3805
@@ -4122,14 +4153,49 @@ static ssize_t ipr_show_resource_path(struct device *dev, struct device_attribut
4122static struct device_attribute ipr_resource_path_attr = { 4153static struct device_attribute ipr_resource_path_attr = {
4123 .attr = { 4154 .attr = {
4124 .name = "resource_path", 4155 .name = "resource_path",
4125 .mode = S_IRUSR, 4156 .mode = S_IRUGO,
4126 }, 4157 },
4127 .show = ipr_show_resource_path 4158 .show = ipr_show_resource_path
4128}; 4159};
4129 4160
4161/**
4162 * ipr_show_resource_type - Show the resource type for this device.
4163 * @dev: device struct
4164 * @buf: buffer
4165 *
4166 * Return value:
4167 * number of bytes printed to buffer
4168 **/
4169static ssize_t ipr_show_resource_type(struct device *dev, struct device_attribute *attr, char *buf)
4170{
4171 struct scsi_device *sdev = to_scsi_device(dev);
4172 struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)sdev->host->hostdata;
4173 struct ipr_resource_entry *res;
4174 unsigned long lock_flags = 0;
4175 ssize_t len = -ENXIO;
4176
4177 spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
4178 res = (struct ipr_resource_entry *)sdev->hostdata;
4179
4180 if (res)
4181 len = snprintf(buf, PAGE_SIZE, "%x\n", res->type);
4182
4183 spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
4184 return len;
4185}
4186
4187static struct device_attribute ipr_resource_type_attr = {
4188 .attr = {
4189 .name = "resource_type",
4190 .mode = S_IRUGO,
4191 },
4192 .show = ipr_show_resource_type
4193};
4194
4130static struct device_attribute *ipr_dev_attrs[] = { 4195static struct device_attribute *ipr_dev_attrs[] = {
4131 &ipr_adapter_handle_attr, 4196 &ipr_adapter_handle_attr,
4132 &ipr_resource_path_attr, 4197 &ipr_resource_path_attr,
4198 &ipr_resource_type_attr,
4133 NULL, 4199 NULL,
4134}; 4200};
4135 4201